From mboxrd@z Thu Jan 1 00:00:00 1970 From: bkohlen@intrinsyc.com To: gcc-gnats@gcc.gnu.org Subject: c/2404: arm-linux-gcc ice Date: Tue, 27 Mar 2001 12:46:00 -0000 Message-id: <20010327203623.6066.qmail@sourceware.cygnus.com> X-SW-Source: 2001-03/msg00301.html List-Id: >Number: 2404 >Category: c >Synopsis: arm-linux-gcc ice >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Tue Mar 27 12:46:01 PST 2001 >Closed-Date: >Last-Modified: >Originator: bkohlen@intrinsyc.com >Release: gcc version 2.95.3 20010315 (release) >Organization: >Environment: gcc cross compiler for arm with fairly standard configure flags. used in combination with glibc-2.1.3 and binutils-2.10. I was compiling xfree86 for arm when error occured. >Description: When installing xfree86 (on my pc, so that I can package it for arm) it compiles shadow.c and I get the following error: shadow.c: In function `shadowImageGlyphBlt': shadow.c:1173: Internal compiler error in `purge_addressof_1', at function.c:3183 Please submit a full bug report. See for instructions. I had this exact same problem with gcc-2.95.2, so i tried .3 and it was duplicated perfectly. I haven't included the sources you will need to duplicate the error yourself because it's a 60M tarball (gzipped). I read the bug reporting howto though, and I think i've included everything else that was asked for. If you need the full sources (i've already included shadow.c) just email me for them. >How-To-Repeat: First you'll need the 60M tarball... then you can just run the bugcommand script i've provided... >Fix: >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="shadow.i" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="shadow.i" IyAxICJzaGFkb3cuYyIKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi4uLy4uLy4uLy4u L2V4cG9ydHMvaW5jbHVkZS9YMTEvWC5oIiAxCiAKCgoKIAoKCgoKIAoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCiAKCiAKCgoKCgoKCnR5cGVkZWYgdW5zaWdu ZWQgbG9uZyBYSUQ7CgoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBNYXNrOwoKCgp0eXBlZGVmIHVu c2lnbmVkIGxvbmcgQXRvbTsJCSAKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBWaXN1YWxJRDsKdHlw ZWRlZiB1bnNpZ25lZCBsb25nIFRpbWU7CiMgOTUgIi4uLy4uLy4uLy4uL2V4cG9ydHMvaW5jbHVk ZS9YMTEvWC5oIgoKCnR5cGVkZWYgWElEIFdpbmRvdzsKdHlwZWRlZiBYSUQgRHJhd2FibGU7CgoK dHlwZWRlZiBYSUQgRm9udDsKCnR5cGVkZWYgWElEIFBpeG1hcDsKdHlwZWRlZiBYSUQgQ3Vyc29y Owp0eXBlZGVmIFhJRCBDb2xvcm1hcDsKdHlwZWRlZiBYSUQgR0NvbnRleHQ7CnR5cGVkZWYgWElE IEtleVN5bTsKCnR5cGVkZWYgdW5zaWduZWQgY2hhciBLZXlDb2RlOwoKIAoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCiAKCgoK CgoKCgoKCgoKIAoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKIAoKCgoKCgoKCQkgICAgICAgCiAKCgoK CgoKCgoKCiAKCgoKCgogCgoKCgogCgoKCgoKIAoKCgoKIAoKCgoKIAoKCgoKIAoKCgoKCgoKIAoK CgoKCgoKCgoKIAoKCgoKCiAKCgoKCgoKCgoKCgoKCgojIDM2NSAiLi4vLi4vLi4vLi4vZXhwb3J0 cy9pbmNsdWRlL1gxMS9YLmgiCgoKCgoKCgoKCgoKIAoKCgogCiAKCgoKCiAKCgoKCgoKCgoKCgoK CgoKCgogCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgogCgoKCiAKCgoKCgogCgoKCgoKIAoKCgoK IAoKCgoKCiAKCgoKCgoKCiAKCgoKCiAKCgoKCgogCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoK CgoKCiAKCgoKCgoKIAoKCgoKCiAKCgoKCgoKIAoKCgoKIAoKCgoKIAoKCgoKCgogCgoKCgogCgoK CgoKIAoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCiAKCgoKCgoKIAoKCgog CgoKCgoKIAoKCgogCgoKCgoKIAoKCgoKCiAKCgoKIAoKCgoKCiAKCgoKCgoKCgoKCiAKCgoKCgoK CgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCiAKCgoKCiAKCgoKIAoKCgoKIAoKCgoKIAoKCgoK CgoKCgoKCiAKCgoKCgojIDI2ICJzaGFkb3cuYyIgMgoKIyAxICIuLi8uLi9pbmNsdWRlL3Njcm5p bnRzdHIuaCIgMQogCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgog CgoKCgojIDEgIi4uLy4uL2luY2x1ZGUvc2NyZWVuaW50LmgiIDEKIAogCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgojIDEgIi4uLy4uL2luY2x1ZGUvbWlzYy5o IiAxCiAKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCiAKCgogCgoKCgpleHRlcm4gdW5zaWduZWQgbG9uZyBnbG9iYWxTZXJpYWxO dW1iZXI7CmV4dGVybiB1bnNpZ25lZCBsb25nIHNlcnZlckdlbmVyYXRpb247CgojIDEgIi4uLy4u Ly4uLy4uL2V4cG9ydHMvaW5jbHVkZS9YMTEvWG9zZGVmcy5oIiAxCiAKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCiAKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAg CgoKCgoKCgojIDg5ICIuLi8uLi8uLi8uLi9leHBvcnRzL2luY2x1ZGUvWDExL1hvc2RlZnMuaCIK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgNzYgIi4uLy4uL2luY2x1ZGUv bWlzYy5oIiAyCgojIDEgIi4uLy4uLy4uLy4uL2V4cG9ydHMvaW5jbHVkZS9YMTEvWGZ1bmNwcm90 by5oIiAxCiAKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyA3NyAiLi4vLi4vaW5jbHVkZS9t aXNjLmgiIDIKCiMgMSAiLi4vLi4vLi4vLi4vZXhwb3J0cy9pbmNsdWRlL1gxMS9YbWQuaCIgMQog CiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKIAoKCgogCgoK CgoKCgoKCgoKCgoKCiAKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKIyAxMTkg Ii4uLy4uLy4uLy4uL2V4cG9ydHMvaW5jbHVkZS9YMTEvWG1kLmgiCgoKCgoKCgp0eXBlZGVmIGxv bmcgSU5UMzI7Cgp0eXBlZGVmIHNob3J0IElOVDE2OwoKCgp0eXBlZGVmIHNpZ25lZCBjaGFyICAg IElOVDg7CgoKCgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIENBUkQzMjsKCnR5cGVkZWYgdW5z aWduZWQgc2hvcnQgQ0FSRDE2Owp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgIENBUkQ4OwoKdHlwZWRl ZiBDQVJEMzIJCUJJVFMzMjsKdHlwZWRlZiBDQVJEMTYJCUJJVFMxNjsKCgoKdHlwZWRlZiBDQVJE OAkJQllURTsKdHlwZWRlZiBDQVJEOCAgICAgICAgICAgQk9PTDsKCgoKCgoKCgoKCgoKCgoKCgog CgoKIyAxODMgIi4uLy4uLy4uLy4uL2V4cG9ydHMvaW5jbHVkZS9YMTEvWG1kLmgiCgoKCgoKCgoK CgoKCgoKCgoKCgoKIAoKCiAgCgoKCgojIDc4ICIuLi8uLi9pbmNsdWRlL21pc2MuaCIgMgoKCiMg MSAiLi4vLi4vLi4vLi4vZXhwb3J0cy9pbmNsdWRlL1gxMS9YZGVmcy5oIiAxCiAKCiAKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnR5cGVkZWYgaW50IEJvb2w7 CgoKCgoKdHlwZWRlZiB2b2lkICpwb2ludGVyOwoKCgp0eXBlZGVmIHN0cnVjdCBfQ2xpZW50ICpD bGllbnRQdHI7CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX0ZvbnQgKkZv bnRQdHI7ICAKCgoKCgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIEZTSUQ7CgoKCgoKdHlwZWRl ZiBGU0lEIEFjY0NvbnRleHQ7CgogCgp0eXBlZGVmIHN0cnVjdCB0aW1ldmFsICoqT1NUaW1lUHRy OwoKCnR5cGVkZWYgdm9pZCAoKiBCbG9ja0hhbmRsZXJQcm9jUHRyKShwb2ludGVyICAsCgkJCQkg ICAgIE9TVGltZVB0ciAgLAoJCQkJICAgICBwb2ludGVyICApOwoKCiMgODAgIi4uLy4uL2luY2x1 ZGUvbWlzYy5oIiAyCgoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2FybS1saW51eC8yLjk1LjMv aW5jbHVkZS9zdGRkZWYuaCIgMSAzCgoKCgoKCiAKCgoKCgoKCiAKCiAKCgoKCiAKCgogCgoKCgoK IAoKCiMgNjEgIi91c3IvbGliL2djYy1saWIvYXJtLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRl Zi5oIiAzCgoKIAoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCiAKCiAKCgoKCgoKCgoK CgoKCgoKCgoKCgoKdHlwZWRlZiBpbnQgcHRyZGlmZl90OwoKCgoKCgoKCgogCgoKCgogCgogCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgp0eXBlZGVmIHVuc2lnbmVkIGludCBzaXpl X3Q7CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnR5cGVkZWYgbG9uZyBpbnQgd2NoYXJf dDsKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgIHdpbnRfdDsK CgoKCiAKCiAKCiMgMzE3ICIvdXNyL2xpYi9nY2MtbGliL2FybS1saW51eC8yLjk1LjMvaW5jbHVk ZS9zdGRkZWYuaCIgMwoKCgoKIAoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKIyA4NSAiLi4vLi4vaW5j bHVkZS9taXNjLmgiIDIKCgoKCgoKCgoKCgoKCgoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBQSVhF TDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIEFUT007CgoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX0Nh bGxiYWNrTGlzdCAqQ2FsbGJhY2tMaXN0UHRyOyAgCgoKCnR5cGVkZWYgc3RydWN0IF94UmVxICp4 UmVxUHRyOwoKIyAxICIuLi8uLi9pbmNsdWRlL29zLmgiIDEKIAogCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKIyAxICIuLi8uLi9pbmNsdWRlL21pc2MuaCIg MQogCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgogCiMgMjkzICIuLi8uLi9pbmNsdWRlL21pc2MuaCIKCiMgNDkgIi4uLy4uL2lu Y2x1ZGUvb3MuaCIgMgoKCgojIDEgIi4uLy4uLy4uLy4uL2V4cG9ydHMvaW5jbHVkZS9YMTEvWGFs bG9jYS5oIiAxCiAKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCiAKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKIyA4MyAiLi4vLi4vLi4vLi4vZXhwb3J0cy9pbmNs dWRlL1gxMS9YYWxsb2NhLmgiCgoKCgoKCgoKCiMgMTIwICIuLi8uLi8uLi8uLi9leHBvcnRzL2lu Y2x1ZGUvWDExL1hhbGxvY2EuaCIKCgoKCiMgMTMyICIuLi8uLi8uLi8uLi9leHBvcnRzL2luY2x1 ZGUvWDExL1hhbGxvY2EuaCIKCgoKIyA1MiAiLi4vLi4vaW5jbHVkZS9vcy5oIiAyCgoKIyAxICIv dXNyL2xpYi9nY2MtbGliL2FybS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRhcmcuaCIgMSAzCiAK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCiAKCgoKCgoKdHlwZWRlZiB2b2lkICpfX2dudWNfdmFfbGlzdDsKCgoKIAoKCgogCgoK CgoKCgoKCgoKCgoKCgoKdm9pZCB2YV9lbmQgKF9fZ251Y192YV9saXN0KTsJCSAKCgogCgoKCiAK CgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKIAoKCgoKCgoKCgoKCgoKIyAx NzUgIi91c3IvbGliL2djYy1saWIvYXJtLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGFyZy5oIiAz CgoKIAoKCgoKIAoKIAoKIAoKdHlwZWRlZiBfX2dudWNfdmFfbGlzdCB2YV9saXN0OwoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgojIDU0ICIuLi8uLi9pbmNsdWRlL29zLmgiIDIKCgoKCgoKCgoKCgoK CgoKCgoKCnR5cGVkZWYgcG9pbnRlcglGSUQ7CnR5cGVkZWYgc3RydWN0IF9Gb250UGF0aFJlYyAq Rm9udFBhdGhQdHI7CnR5cGVkZWYgc3RydWN0IF9OZXdDbGllbnRSZWMgKk5ld0NsaWVudFB0cjsK CgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9hcm0tbGludXgvMi45NS4z Ly4uLy4uLy4uLy4uL2FybS1saW51eC9pbmNsdWRlL3N0cmluZy5oIiAxIDMKIAoKCgoKCgoKCgoK CgoKCgoKCiAKCgoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2FybS1saW51eC8yLjk1LjMvLi4v Li4vLi4vLi4vYXJtLWxpbnV4L2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiAKCgoKCgoKCgoKCgoK CgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCiAKCgoKIAoKCgoKCgoKIAoK CgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgogCgoKCgoKIAoKIyAxNjYgIi91c3IvbGliL2dj Yy1saWIvYXJtLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9hcm0tbGludXgvaW5jbHVkZS9mZWF0 dXJlcy5oIiAzCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgogCgoKCiAKCgoKCgoKCgogCgoKCgogCgojIDEgIi91c3IvbGliL2dj Yy1saWIvYXJtLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9hcm0tbGludXgvaW5jbHVkZS9zeXMv Y2RlZnMuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgogCgoKCgoKIAoKCgoKCgoK CiAKCgoKCiMgNzEgIi91c3IvbGliL2djYy1saWIvYXJtLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8u Li9hcm0tbGludXgvaW5jbHVkZS9zeXMvY2RlZnMuaCIgMwoKCiAKCgoKCgoKCiAKCgoKIyAxMDMg Ii91c3IvbGliL2djYy1saWIvYXJtLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9hcm0tbGludXgv aW5jbHVkZS9zeXMvY2RlZnMuaCIgMwoKCgogCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgogCgoK CgoKCgoKIAoKCgoKCgoKCiAKCgoKCgoKCgoKIAoKCgoKCgoKIyAyNTAgIi91c3IvbGliL2djYy1s aWIvYXJtLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9hcm0tbGludXgvaW5jbHVkZS9mZWF0dXJl cy5oIiAyIDMKCgogCgoKCgoKCgoKIAoKCgoKCiAKCiAKCgoKCgoKCgojIDEgIi91c3IvbGliL2dj Yy1saWIvYXJtLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9hcm0tbGludXgvaW5jbHVkZS9nbnUv c3R1YnMuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMjc4ICIvdXNyL2xpYi9n Y2MtbGliL2FybS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vYXJtLWxpbnV4L2luY2x1ZGUvZmVh dHVyZXMuaCIgMiAzCgoKCgojIDI2ICIvdXNyL2xpYi9nY2MtbGliL2FybS1saW51eC8yLjk1LjMv Li4vLi4vLi4vLi4vYXJtLWxpbnV4L2luY2x1ZGUvc3RyaW5nLmgiIDIgMwoKCiAKCiAKCgojIDEg Ii91c3IvbGliL2djYy1saWIvYXJtLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMK CgoKCgoKIAoKCiMgMTkgIi91c3IvbGliL2djYy1saWIvYXJtLWxpbnV4LzIuOTUuMy9pbmNsdWRl L3N0ZGRlZi5oIiAzCgoKCiAKCgogCgoKCgoKIAoKCiMgNjEgIi91c3IvbGliL2djYy1saWIvYXJt LWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKCgoKCiAKCgoKCgoKCgoKCgoK CgoKCgoKIAoKCgoKCiAKCiAKCgojIDEyNiAiL3Vzci9saWIvZ2NjLWxpYi9hcm0tbGludXgvMi45 NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgoKCgogCgogCgoKIyAxODggIi91c3IvbGliL2dj Yy1saWIvYXJtLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgoKIAoKCgoKIAoK CiMgMjY5ICIvdXNyL2xpYi9nY2MtbGliL2FybS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYu aCIgMwoKCgoKCgoKCgoKCgoKCgoKIAoKIAoKIyAzMTcgIi91c3IvbGliL2djYy1saWIvYXJtLWxp bnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgogCgoKCgoKCgoKCgoKCgogCgoKCgoK CgojIDMzICIvdXNyL2xpYi9nY2MtbGliL2FybS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vYXJt LWxpbnV4L2luY2x1ZGUvc3RyaW5nLmgiIDIgMwoKCgogCmV4dGVybiB2b2lkICogIG1lbWNweSAg KHZvaWQgKiAgX19yZXN0cmljdCBfX2Rlc3QsCgkJCSAgICBfX2NvbnN0IHZvaWQgKiAgX19yZXN0 cmljdCBfX3NyYywgc2l6ZV90IF9fbikgICAgOwogCgpleHRlcm4gdm9pZCAqICBtZW1tb3ZlICAo dm9pZCAqICBfX2Rlc3QsIF9fY29uc3Qgdm9pZCAqICBfX3NyYywKCQkJICAgICBzaXplX3QgX19u KSAgICA7CgogCgoKCmV4dGVybiB2b2lkICogIG1lbWNjcHkgICh2b2lkICogIF9fZGVzdCwgX19j b25zdCB2b2lkICogIF9fc3JjLAoJCQkgICAgIGludCBfX2MsIHNpemVfdCBfX24pICAgIDsKCgoK IApleHRlcm4gdm9pZCAqICBtZW1zZXQgICh2b2lkICogIF9fcywgaW50IF9fYywgc2l6ZV90IF9f bikgICAgOwoKIApleHRlcm4gaW50IG1lbWNtcCAgKF9fY29uc3Qgdm9pZCAqICBfX3MxLCBfX2Nv bnN0IHZvaWQgKiAgX19zMiwKCQkJc2l6ZV90IF9fbikgICAgOwoKIApleHRlcm4gdm9pZCAqICBt ZW1jaHIgIChfX2NvbnN0IHZvaWQgKiAgX19zLCBpbnQgX19jLCBzaXplX3QgX19uKSAgICA7CgoK IAoKZXh0ZXJuIHZvaWQgKiAgcmF3bWVtY2hyICAoX19jb25zdCB2b2lkICogIF9fcywgaW50IF9f YykgICAgOwoKCgogCmV4dGVybiBjaGFyICpzdHJjcHkgIChjaGFyICpfX3Jlc3RyaWN0IF9fZGVz dCwKCQkJICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpICAgIDsKIApleHRlcm4gY2hh ciAqc3RybmNweSAgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAoJCQkgICBfX2NvbnN0IGNoYXIg Kl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pICAgIDsKCiAKZXh0ZXJuIGNoYXIgKnN0cmNh dCAgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAoJCQkgIF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX3NyYykgICAgOwogCmV4dGVybiBjaGFyICpzdHJuY2F0ICAoY2hhciAqX19yZXN0cmljdCBf X2Rlc3QsCgkJCSAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikg ICAgOwoKIApleHRlcm4gaW50IHN0cmNtcCAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBj aGFyICpfX3MyKSAgICA7CiAKZXh0ZXJuIGludCBzdHJuY21wICAoX19jb25zdCBjaGFyICpfX3Mx LCBfX2NvbnN0IGNoYXIgKl9fczIsIHNpemVfdCBfX24pICAgIDsKCiAKZXh0ZXJuIGludCBzdHJj b2xsICAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpICAgIDsKIApleHRl cm4gc2l6ZV90IHN0cnhmcm0gIChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwKCQkJICAgIF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgICAgOwoKCiAKCgojIDEgIi91 c3IvbGliL2djYy1saWIvYXJtLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9hcm0tbGludXgvaW5j bHVkZS94bG9jYWxlLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCnR5cGVkZWYg c3RydWN0IF9fbG9jYWxlX3N0cnVjdAp7CiAgc3RydWN0IGxvY2FsZV9kYXRhICpfX2xvY2FsZXNb Nl07CSAKCiAgIAogIGNvbnN0IHVuc2lnbmVkIHNob3J0IGludCAqX19jdHlwZV9iOwogIGNvbnN0 IGludCAqX19jdHlwZV90b2xvd2VyOwogIGNvbnN0IGludCAqX19jdHlwZV90b3VwcGVyOwp9ICpf X2xvY2FsZV90OwoKCiMgOTkgIi91c3IvbGliL2djYy1saWIvYXJtLWxpbnV4LzIuOTUuMy8uLi8u Li8uLi8uLi9hcm0tbGludXgvaW5jbHVkZS9zdHJpbmcuaCIgMiAzCgoKIApleHRlcm4gaW50IF9f c3RyY29sbF9sICAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsCgkJCSAg ICAgX19sb2NhbGVfdCBfX2wpICAgIDsKIApleHRlcm4gc2l6ZV90IF9fc3RyeGZybV9sICAoY2hh ciAqX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fc3JjLCBzaXplX3QgX19uLAoJCQkJX19sb2NhbGVf dCBfX2wpICAgIDsKCgoKIApleHRlcm4gY2hhciAqX19zdHJkdXAgIChfX2NvbnN0IGNoYXIgKl9f cykgICAgOwpleHRlcm4gY2hhciAqc3RyZHVwICAoX19jb25zdCBjaGFyICpfX3MpICAgIDsKCgog CgoKCmV4dGVybiBjaGFyICpzdHJuZHVwICAoX19jb25zdCBjaGFyICpfX3N0cmluZywgc2l6ZV90 IF9fbikgICAgOwoKCgogCgoKCgoKCgoKCiAKCiMgMTQzICIvdXNyL2xpYi9nY2MtbGliL2FybS1s aW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vYXJtLWxpbnV4L2luY2x1ZGUvc3RyaW5nLmgiIDMKCgog CmV4dGVybiBjaGFyICpzdHJjaHIgIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgICAgOwog CmV4dGVybiBjaGFyICpzdHJyY2hyICAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpICAgIDsK CgogCgpleHRlcm4gY2hhciAqc3RyY2hybnVsICAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2Mp ICAgIDsKCgogCgpleHRlcm4gc2l6ZV90IHN0cmNzcG4gIChfX2NvbnN0IGNoYXIgKl9fcywgX19j b25zdCBjaGFyICpfX3JlamVjdCkgICAgOwogCgpleHRlcm4gc2l6ZV90IHN0cnNwbiAgKF9fY29u c3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fYWNjZXB0KSAgICA7CiAKZXh0ZXJuIGNoYXIg KnN0cnBicmsgIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX2FjY2VwdCkgICAg OwogCmV4dGVybiBjaGFyICpzdHJzdHIgIChfX2NvbnN0IGNoYXIgKl9faGF5c3RhY2ssIF9fY29u c3QgY2hhciAqX19uZWVkbGUpICAgIDsKCgogCmV4dGVybiBjaGFyICpfX3N0cmNhc2VzdHIgIChf X2NvbnN0IGNoYXIgKl9faGF5c3RhY2ssCgkJCQlfX2NvbnN0IGNoYXIgKl9fbmVlZGxlKSAgICA7 CmV4dGVybiBjaGFyICpzdHJjYXNlc3RyICAoX19jb25zdCBjaGFyICpfX2hheXN0YWNrLAoJCQkg ICAgICBfX2NvbnN0IGNoYXIgKl9fbmVlZGxlKSAgICA7CgoKIApleHRlcm4gY2hhciAqc3RydG9r ICAoY2hhciAqX19yZXN0cmljdCBfX3MsCgkJCSAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f ZGVsaW0pICAgIDsKCiAKCmV4dGVybiBjaGFyICpfX3N0cnRva19yICAoY2hhciAqX19yZXN0cmlj dCBfX3MsCgkJCSAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltLAoJCQkgICAg ICBjaGFyICoqX19yZXN0cmljdCBfX3NhdmVfcHRyKSAgICA7CgpleHRlcm4gY2hhciAqc3RydG9r X3IgIChjaGFyICpfX3Jlc3RyaWN0IF9fcywKCQkJICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX2RlbGltLAoJCQkgICAgY2hhciAqKl9fcmVzdHJpY3QgX19zYXZlX3B0cikgICAgOwoKCgog CgoKZXh0ZXJuIHZvaWQgKiAgbWVtbWVtICAoX19jb25zdCB2b2lkICogIF9faGF5c3RhY2ssIHNp emVfdCBfX2hheXN0YWNrbGVuLAoJCQkgICAgX19jb25zdCB2b2lkICogIF9fbmVlZGxlLCBzaXpl X3QgX19uZWVkbGVsZW4pICAgIDsKCiAKCmV4dGVybiB2b2lkICogIF9fbWVtcGNweSAgKHZvaWQg KiAgX19yZXN0cmljdCBfX2Rlc3QsCgkJCSAgICAgICBfX2NvbnN0IHZvaWQgKiAgX19yZXN0cmlj dCBfX3NyYywgc2l6ZV90IF9fbikgICAgOwpleHRlcm4gdm9pZCAqICBtZW1wY3B5ICAodm9pZCAq ICBfX3Jlc3RyaWN0IF9fZGVzdCwKCQkJICAgICBfX2NvbnN0IHZvaWQgKiAgX19yZXN0cmljdCBf X3NyYywgc2l6ZV90IF9fbikgICAgOwoKCgogCmV4dGVybiBzaXplX3Qgc3RybGVuICAoX19jb25z dCBjaGFyICpfX3MpICAgIDsKCgogCgpleHRlcm4gc2l6ZV90IHN0cm5sZW4gIChfX2NvbnN0IGNo YXIgKl9fc3RyaW5nLCBzaXplX3QgX19tYXhsZW4pICAgIDsKCgoKIApleHRlcm4gY2hhciAqc3Ry ZXJyb3IgIChpbnQgX19lcnJudW0pICAgIDsKCiAKCmV4dGVybiBjaGFyICpfX3N0cmVycm9yX3Ig IChpbnQgX19lcnJudW0sIGNoYXIgKl9fYnVmLCBzaXplX3QgX19idWZsZW4pICAgIDsKZXh0ZXJu IGNoYXIgKnN0cmVycm9yX3IgIChpbnQgX19lcnJudW0sIGNoYXIgKl9fYnVmLCBzaXplX3QgX19i dWZsZW4pICAgIDsKCgogCgpleHRlcm4gdm9pZCBfX2J6ZXJvICAodm9pZCAqICBfX3MsIHNpemVf dCBfX24pICAgIDsKCgogCmV4dGVybiB2b2lkIGJjb3B5ICAoX19jb25zdCB2b2lkICogIF9fc3Jj LCB2b2lkICogIF9fZGVzdCwgc2l6ZV90IF9fbikgICAgOwoKIApleHRlcm4gdm9pZCBiemVybyAg KHZvaWQgKiAgX19zLCBzaXplX3QgX19uKSAgICA7CgogCmV4dGVybiBpbnQgYmNtcCAgKF9fY29u c3Qgdm9pZCAqICBfX3MxLCBfX2NvbnN0IHZvaWQgKiAgX19zMiwgc2l6ZV90IF9fbikgICAgOwoK IApleHRlcm4gY2hhciAqaW5kZXggIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgICAgOwoK IApleHRlcm4gY2hhciAqcmluZGV4ICAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpICAgIDsK CiAKCmV4dGVybiBpbnQgX19mZnMgIChpbnQgX19pKSAgICAgX19hdHRyaWJ1dGVfXyAoKGNvbnN0 KSk7CmV4dGVybiBpbnQgZmZzICAoaW50IF9faSkgICAgIF9fYXR0cmlidXRlX18gKChjb25zdCkp OwoKIAoKCmV4dGVybiBpbnQgZmZzbCAgKGxvbmcgaW50IF9fbCkgICAgIF9fYXR0cmlidXRlX18g KChjb25zdCkpOwoKX19leHRlbnNpb25fXyBleHRlcm4gaW50IGZmc2xsICAobG9uZyBsb25nIGlu dCBfX2xsKSAgICAKICAgICBfX2F0dHJpYnV0ZV9fICgoY29uc3QpKTsKCgoKIApleHRlcm4gaW50 IF9fc3RyY2FzZWNtcCAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKSAg ICA7CmV4dGVybiBpbnQgc3RyY2FzZWNtcCAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBj aGFyICpfX3MyKSAgICA7CgogCmV4dGVybiBpbnQgc3RybmNhc2VjbXAgIChfX2NvbnN0IGNoYXIg Kl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwKCQkJICAgICBzaXplX3QgX19uKSAgICA7CgoKCiAK CmV4dGVybiBpbnQgX19zdHJjYXNlY21wX2wgIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3Qg Y2hhciAqX19zMiwKCQkJCV9fbG9jYWxlX3QgX19sb2MpICAgIDsKCmV4dGVybiBpbnQgX19zdHJu Y2FzZWNtcF9sICAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsCgkJCQkg c2l6ZV90IF9fbiwgX19sb2NhbGVfdCBfX2xvYykgICAgOwoKCgogCgpleHRlcm4gY2hhciAqc3Ry c2VwICAoY2hhciAqKl9fcmVzdHJpY3QgX19zdHJpbmdwLAoJCQkgIF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX2RlbGltKSAgICA7CgoKCiAKZXh0ZXJuIGludCBzdHJ2ZXJzY21wICAoX19jb25z dCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpICAgIDsKCiAKZXh0ZXJuIGNoYXIgKnN0 cnNpZ25hbCAgKGludCBfX3NpZykgICAgOwoKIApleHRlcm4gY2hhciAqX19zdHBjcHkgIChjaGFy ICpfX3Jlc3RyaWN0IF9fZGVzdCwKCQkJICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3Ny YykgICAgOwpleHRlcm4gY2hhciAqc3RwY3B5ICAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCgkJ CSAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKSAgICA7CgogCgpleHRlcm4gY2hhciAq X19zdHBuY3B5ICAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCgkJCSAgICAgX19jb25zdCBjaGFy ICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSAgICA7CmV4dGVybiBjaGFyICpzdHBuY3B5 ICAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCgkJCSAgIF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX3NyYywgc2l6ZV90IF9fbikgICAgOwoKIApleHRlcm4gY2hhciAqc3RyZnJ5ICAoY2hhciAq X19zdHJpbmcpICAgIDsKCiAKZXh0ZXJuIHZvaWQgKiAgbWVtZnJvYiAgKHZvaWQgKiAgX19zLCBz aXplX3QgX19uKSAgICA7CgoKIAoKCgpleHRlcm4gY2hhciAqYmFzZW5hbWUgIChfX2NvbnN0IGNo YXIgKl9fZmlsZW5hbWUpICAgIDsKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCiAKIyAxICIvdXNy L2xpYi9nY2MtbGliL2FybS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vYXJtLWxpbnV4L2luY2x1 ZGUvYml0cy9zdHJpbmcuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCiMg MzQzICIvdXNyL2xpYi9nY2MtbGliL2FybS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vYXJtLWxp bnV4L2luY2x1ZGUvc3RyaW5nLmgiIDIgMwoKCiAKIyAxICIvdXNyL2xpYi9nY2MtbGliL2FybS1s aW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vYXJtLWxpbnV4L2luY2x1ZGUvYml0cy9zdHJpbmcyLmgi IDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoj IDc0ICIvdXNyL2xpYi9nY2MtbGliL2FybS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vYXJtLWxp bnV4L2luY2x1ZGUvYml0cy9zdHJpbmcyLmgiIDMKCiAKCgoKCnR5cGVkZWYgc3RydWN0IHsgdW5z aWduZWQgY2hhciBfX2FyclsgMiBdOyB9CV9fU1RSSU5HMl9DT1BZX0FSUjIgIF9fYXR0cmlidXRl X18gKChwYWNrZWQpKSA7CnR5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgY2hhciBfX2FyclsgMyBd OyB9CV9fU1RSSU5HMl9DT1BZX0FSUjMgIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSA7CnR5cGVk ZWYgc3RydWN0IHsgdW5zaWduZWQgY2hhciBfX2FyclsgNCBdOyB9CV9fU1RSSU5HMl9DT1BZX0FS UjQgIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSA7CnR5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQg Y2hhciBfX2FyclsgNSBdOyB9CV9fU1RSSU5HMl9DT1BZX0FSUjUgIF9fYXR0cmlidXRlX18gKChw YWNrZWQpKSA7CnR5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgY2hhciBfX2FyclsgNiBdOyB9CV9f U1RSSU5HMl9DT1BZX0FSUjYgIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSA7CnR5cGVkZWYgc3Ry dWN0IHsgdW5zaWduZWQgY2hhciBfX2FyclsgNyBdOyB9CV9fU1RSSU5HMl9DT1BZX0FSUjcgIF9f YXR0cmlidXRlX18gKChwYWNrZWQpKSA7CnR5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgY2hhciBf X2FyclsgOCBdOyB9CV9fU1RSSU5HMl9DT1BZX0FSUjggIF9fYXR0cmlidXRlX18gKChwYWNrZWQp KSA7CgoKCiAKCgoKCgogCgojIDE4MCAiL3Vzci9saWIvZ2NjLWxpYi9hcm0tbGludXgvMi45NS4z Ly4uLy4uLy4uLy4uL2FybS1saW51eC9pbmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAzCgoKCgoKCgog CgoKCgoKCgoKCiAKCgojIDM2NiAiL3Vzci9saWIvZ2NjLWxpYi9hcm0tbGludXgvMi45NS4zLy4u Ly4uLy4uLy4uL2FybS1saW51eC9pbmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAzCgoKCgogCgpleHRl cm4gdm9pZCAqICBfX3Jhd21lbWNociAoY29uc3Qgdm9pZCAqICBfX3MsIGludCBfX2MpOwoKCgoK CgoKIAojIDUzMiAiL3Vzci9saWIvZ2NjLWxpYi9hcm0tbGludXgvMi45NS4zLy4uLy4uLy4uLy4u L2FybS1saW51eC9pbmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAzCgoKCiAKCiMgNjk2ICIvdXNyL2xp Yi9nY2MtbGliL2FybS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vYXJtLWxpbnV4L2luY2x1ZGUv Yml0cy9zdHJpbmcyLmgiIDMKCgoKCiAKCiMgNzEyICIvdXNyL2xpYi9nY2MtbGliL2FybS1saW51 eC8yLjk1LjMvLi4vLi4vLi4vLi4vYXJtLWxpbnV4L2luY2x1ZGUvYml0cy9zdHJpbmcyLmgiIDMK CgoKCgoKCgoKCgogCgojIDczMyAiL3Vzci9saWIvZ2NjLWxpYi9hcm0tbGludXgvMi45NS4zLy4u Ly4uLy4uLy4uL2FybS1saW51eC9pbmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAzCgoKCgoKCgoKCgoK IAoKCiMgNzY2ICIvdXNyL2xpYi9nY2MtbGliL2FybS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4v YXJtLWxpbnV4L2luY2x1ZGUvYml0cy9zdHJpbmcyLmgiIDMKCgojIDc5MyAiL3Vzci9saWIvZ2Nj LWxpYi9hcm0tbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2FybS1saW51eC9pbmNsdWRlL2JpdHMv c3RyaW5nMi5oIiAzCgoKIyA4MTUgIi91c3IvbGliL2djYy1saWIvYXJtLWxpbnV4LzIuOTUuMy8u Li8uLi8uLi8uLi9hcm0tbGludXgvaW5jbHVkZS9iaXRzL3N0cmluZzIuaCIgMwoKCiMgODQwICIv dXNyL2xpYi9nY2MtbGliL2FybS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vYXJtLWxpbnV4L2lu Y2x1ZGUvYml0cy9zdHJpbmcyLmgiIDMKCgoKIAoKCgoKCgoKCgoKCiAKCgoKIyA4NzIgIi91c3Iv bGliL2djYy1saWIvYXJtLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9hcm0tbGludXgvaW5jbHVk ZS9iaXRzL3N0cmluZzIuaCIgMwoKZXh0ZXJuIF9faW5saW5lICBzaXplX3QgX19zdHJjc3BuX2Mx IChfX2NvbnN0IGNoYXIgKl9fcywgY2hhciBfX3JlamVjdCk7CmV4dGVybiBfX2lubGluZSAgc2l6 ZV90Cl9fc3RyY3Nwbl9jMSAoX19jb25zdCBjaGFyICpfX3MsIGNoYXIgX19yZWplY3QpCnsKICBy ZWdpc3RlciBzaXplX3QgX19yZXN1bHQgPSAwOwogIHdoaWxlIChfX3NbX19yZXN1bHRdICE9ICdc MCcgJiYgX19zW19fcmVzdWx0XSAhPSBfX3JlamVjdCkKICAgICsrX19yZXN1bHQ7CiAgcmV0dXJu IF9fcmVzdWx0Owp9CgpleHRlcm4gX19pbmxpbmUgIHNpemVfdCBfX3N0cmNzcG5fYzIgKF9fY29u c3QgY2hhciAqX19zLCBjaGFyIF9fcmVqZWN0MSwKCQkJCSAgICAgY2hhciBfX3JlamVjdDIpOwpl eHRlcm4gX19pbmxpbmUgIHNpemVfdApfX3N0cmNzcG5fYzIgKF9fY29uc3QgY2hhciAqX19zLCBj aGFyIF9fcmVqZWN0MSwgY2hhciBfX3JlamVjdDIpCnsKICByZWdpc3RlciBzaXplX3QgX19yZXN1 bHQgPSAwOwogIHdoaWxlIChfX3NbX19yZXN1bHRdICE9ICdcMCcgJiYgX19zW19fcmVzdWx0XSAh PSBfX3JlamVjdDEKCSAmJiBfX3NbX19yZXN1bHRdICE9IF9fcmVqZWN0MikKICAgICsrX19yZXN1 bHQ7CiAgcmV0dXJuIF9fcmVzdWx0Owp9CgpleHRlcm4gX19pbmxpbmUgIHNpemVfdCBfX3N0cmNz cG5fYzMgKF9fY29uc3QgY2hhciAqX19zLCBjaGFyIF9fcmVqZWN0MSwKCQkJCSAgICAgY2hhciBf X3JlamVjdDIsIGNoYXIgX19yZWplY3QzKTsKZXh0ZXJuIF9faW5saW5lICBzaXplX3QKX19zdHJj c3BuX2MzIChfX2NvbnN0IGNoYXIgKl9fcywgY2hhciBfX3JlamVjdDEsIGNoYXIgX19yZWplY3Qy LAoJICAgICAgY2hhciBfX3JlamVjdDMpCnsKICByZWdpc3RlciBzaXplX3QgX19yZXN1bHQgPSAw OwogIHdoaWxlIChfX3NbX19yZXN1bHRdICE9ICdcMCcgJiYgX19zW19fcmVzdWx0XSAhPSBfX3Jl amVjdDEKCSAmJiBfX3NbX19yZXN1bHRdICE9IF9fcmVqZWN0MiAmJiBfX3NbX19yZXN1bHRdICE9 IF9fcmVqZWN0MykKICAgICsrX19yZXN1bHQ7CiAgcmV0dXJuIF9fcmVzdWx0Owp9CgoKCiAKCgoK IyA5MjcgIi91c3IvbGliL2djYy1saWIvYXJtLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9hcm0t bGludXgvaW5jbHVkZS9iaXRzL3N0cmluZzIuaCIgMwoKZXh0ZXJuIF9faW5saW5lICBzaXplX3Qg X19zdHJzcG5fYzEgKF9fY29uc3QgY2hhciAqX19zLCBjaGFyIF9fYWNjZXB0KTsKZXh0ZXJuIF9f aW5saW5lICBzaXplX3QKX19zdHJzcG5fYzEgKF9fY29uc3QgY2hhciAqX19zLCBjaGFyIF9fYWNj ZXB0KQp7CiAgcmVnaXN0ZXIgc2l6ZV90IF9fcmVzdWx0ID0gMDsKICAgCiAgd2hpbGUgKF9fc1tf X3Jlc3VsdF0gPT0gX19hY2NlcHQpCiAgICArK19fcmVzdWx0OwogIHJldHVybiBfX3Jlc3VsdDsK fQoKZXh0ZXJuIF9faW5saW5lICBzaXplX3QgX19zdHJzcG5fYzIgKF9fY29uc3QgY2hhciAqX19z LCBjaGFyIF9fYWNjZXB0MSwKCQkJCSAgICBjaGFyIF9fYWNjZXB0Mik7CmV4dGVybiBfX2lubGlu ZSAgc2l6ZV90Cl9fc3Ryc3BuX2MyIChfX2NvbnN0IGNoYXIgKl9fcywgY2hhciBfX2FjY2VwdDEs IGNoYXIgX19hY2NlcHQyKQp7CiAgcmVnaXN0ZXIgc2l6ZV90IF9fcmVzdWx0ID0gMDsKICAgCiAg d2hpbGUgKF9fc1tfX3Jlc3VsdF0gPT0gX19hY2NlcHQxIHx8IF9fc1tfX3Jlc3VsdF0gPT0gX19h Y2NlcHQyKQogICAgKytfX3Jlc3VsdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCmV4dGVybiBfX2lu bGluZSAgc2l6ZV90IF9fc3Ryc3BuX2MzIChfX2NvbnN0IGNoYXIgKl9fcywgY2hhciBfX2FjY2Vw dDEsCgkJCQkgICAgY2hhciBfX2FjY2VwdDIsIGNoYXIgX19hY2NlcHQzKTsKZXh0ZXJuIF9faW5s aW5lICBzaXplX3QKX19zdHJzcG5fYzMgKF9fY29uc3QgY2hhciAqX19zLCBjaGFyIF9fYWNjZXB0 MSwgY2hhciBfX2FjY2VwdDIsIGNoYXIgX19hY2NlcHQzKQp7CiAgcmVnaXN0ZXIgc2l6ZV90IF9f cmVzdWx0ID0gMDsKICAgCiAgd2hpbGUgKF9fc1tfX3Jlc3VsdF0gPT0gX19hY2NlcHQxIHx8IF9f c1tfX3Jlc3VsdF0gPT0gX19hY2NlcHQyCgkgfHwgX19zW19fcmVzdWx0XSA9PSBfX2FjY2VwdDMp CiAgICArK19fcmVzdWx0OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKCgogCgoKIyA5ODIgIi91c3Iv bGliL2djYy1saWIvYXJtLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9hcm0tbGludXgvaW5jbHVk ZS9iaXRzL3N0cmluZzIuaCIgMwoKZXh0ZXJuIF9faW5saW5lICBjaGFyICpfX3N0cnBicmtfYzIg KF9fY29uc3QgY2hhciAqX19zLCBjaGFyIF9fYWNjZXB0MSwKCQkJCSAgICAgY2hhciBfX2FjY2Vw dDIpOwpleHRlcm4gX19pbmxpbmUgIGNoYXIgKgpfX3N0cnBicmtfYzIgKF9fY29uc3QgY2hhciAq X19zLCBjaGFyIF9fYWNjZXB0MSwgY2hhciBfX2FjY2VwdDIpCnsKICAgCiAgd2hpbGUgKCpfX3Mg IT0gJ1wwJyAmJiAqX19zICE9IF9fYWNjZXB0MSAmJiAqX19zICE9IF9fYWNjZXB0MikKICAgICsr X19zOwogIHJldHVybiAqX19zID09ICdcMCcgPyAoKHZvaWQgKikwKSAgOiAoY2hhciAqKSAoc2l6 ZV90KSBfX3M7Cn0KCmV4dGVybiBfX2lubGluZSAgY2hhciAqX19zdHJwYnJrX2MzIChfX2NvbnN0 IGNoYXIgKl9fcywgY2hhciBfX2FjY2VwdDEsCgkJCQkgICAgIGNoYXIgX19hY2NlcHQyLCBjaGFy IF9fYWNjZXB0Myk7CmV4dGVybiBfX2lubGluZSAgY2hhciAqCl9fc3RycGJya19jMyAoX19jb25z dCBjaGFyICpfX3MsIGNoYXIgX19hY2NlcHQxLCBjaGFyIF9fYWNjZXB0MiwKCSAgICAgIGNoYXIg X19hY2NlcHQzKQp7CiAgIAogIHdoaWxlICgqX19zICE9ICdcMCcgJiYgKl9fcyAhPSBfX2FjY2Vw dDEgJiYgKl9fcyAhPSBfX2FjY2VwdDIKCSAmJiAqX19zICE9IF9fYWNjZXB0MykKICAgICsrX19z OwogIHJldHVybiAqX19zID09ICdcMCcgPyAoKHZvaWQgKikwKSAgOiAoY2hhciAqKSAoc2l6ZV90 KSBfX3M7Cn0KCgoKIAoKCiMgMTAyMCAiL3Vzci9saWIvZ2NjLWxpYi9hcm0tbGludXgvMi45NS4z Ly4uLy4uLy4uLy4uL2FybS1saW51eC9pbmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAzCgoKCgoKZXh0 ZXJuIF9faW5saW5lICBzaXplX3QKc3RybmxlbiAoX19jb25zdCBjaGFyICpfX3N0cmluZywgc2l6 ZV90IF9fbWF4bGVuKQp7CiAgX19jb25zdCBjaGFyICpfX2VuZCA9IChfX2NvbnN0IGNoYXIgKikg bWVtY2hyIChfX3N0cmluZywgJ1wwJywgX19tYXhsZW4pOwogIHJldHVybiBfX2VuZCA/IChzaXpl X3QpIChfX2VuZCAtIF9fc3RyaW5nKSA6IF9fbWF4bGVuOwp9CgoKCgoKCgoKCgoKCgpleHRlcm4g X19pbmxpbmUgIGNoYXIgKl9fc3RydG9rX3JfMWMgKGNoYXIgKl9fcywgY2hhciBfX3NlcCwgY2hh ciAqKl9fbmV4dHApOwpleHRlcm4gX19pbmxpbmUgIGNoYXIgKgpfX3N0cnRva19yXzFjIChjaGFy ICpfX3MsIGNoYXIgX19zZXAsIGNoYXIgKipfX25leHRwKQp7CiAgY2hhciAqX19yZXN1bHQ7CiAg aWYgKF9fcyA9PSAoKHZvaWQgKikwKSApCiAgICBfX3MgPSAqX19uZXh0cDsKICB3aGlsZSAoKl9f cyA9PSBfX3NlcCkKICAgICsrX19zOwogIGlmICgqX19zID09ICdcMCcpCiAgICBfX3Jlc3VsdCA9 ICgodm9pZCAqKTApIDsKICBlbHNlCiAgICB7CiAgICAgIF9fcmVzdWx0ID0gX19zOwogICAgICB3 aGlsZSAoKl9fcyAhPSAnXDAnICYmICpfX3MgIT0gX19zZXApCgkrK19fczsKICAgICAgaWYgKCpf X3MgPT0gJ1wwJykKCSpfX25leHRwID0gX19zOwogICAgICBlbHNlCgl7CgkgICpfX3MgPSAnXDAn OwoJICAqX19uZXh0cCA9IF9fcyArIDE7Cgl9CiAgICB9CiAgcmV0dXJuIF9fcmVzdWx0Owp9CgoK CgoKCgoKCiMgMTA5MyAiL3Vzci9saWIvZ2NjLWxpYi9hcm0tbGludXgvMi45NS4zLy4uLy4uLy4u Ly4uL2FybS1saW51eC9pbmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAzCgpleHRlcm4gX19pbmxpbmUg IGNoYXIgKl9fc3Ryc2VwXzFjIChjaGFyICoqX19zLCBjaGFyIF9fcmVqZWN0KTsKZXh0ZXJuIF9f aW5saW5lICBjaGFyICoKX19zdHJzZXBfMWMgKGNoYXIgKipfX3MsIGNoYXIgX19yZWplY3QpCnsK ICByZWdpc3RlciBjaGFyICpfX3JldHZhbCA9ICpfX3M7CiAgaWYgKF9fcmV0dmFsID09ICgodm9p ZCAqKTApICkKICAgIHJldHVybiAqX19zID0gKCh2b2lkICopMCkgOwogIGlmICgqX19yZXR2YWwg PT0gX19yZWplY3QpCiAgICAqKCpfX3MpKysgPSAnXDAnOwogIGVsc2UKICAgIGlmICgoKl9fcyA9 IChfX2V4dGVuc2lvbl9fIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoICBfX3JlamVjdCApICYmICgg IF9fcmVqZWN0ICkgPT0gJ1wwJwk/IChjaGFyICopIF9fcmF3bWVtY2hyICggX19yZXR2YWwgLCAg IF9fcmVqZWN0ICkJOiBzdHJjaHIgKCBfX3JldHZhbCAsICAgX19yZWplY3QgKSkpICkgIT0gKCh2 b2lkICopMCkgKQogICAgICAqKCpfX3MpKysgPSAnXDAnOwogICAgZWxzZQogICAgICAqX19zID0g KCh2b2lkICopMCkgOwogIHJldHVybiBfX3JldHZhbDsKfQoKZXh0ZXJuIF9faW5saW5lICBjaGFy ICpfX3N0cnNlcF8yYyAoY2hhciAqKl9fcywgY2hhciBfX3JlamVjdDEsIGNoYXIgX19yZWplY3Qy KTsKZXh0ZXJuIF9faW5saW5lICBjaGFyICoKX19zdHJzZXBfMmMgKGNoYXIgKipfX3MsIGNoYXIg X19yZWplY3QxLCBjaGFyIF9fcmVqZWN0MikKewogIHJlZ2lzdGVyIGNoYXIgKl9fcmV0dmFsID0g Kl9fczsKICBpZiAoX19yZXR2YWwgPT0gKCh2b2lkICopMCkgKQogICAgcmV0dXJuICpfX3MgPSAo KHZvaWQgKikwKSA7CiAgaWYgKCpfX3JldHZhbCA9PSBfX3JlamVjdDEgfHwgKl9fcmV0dmFsID09 IF9fcmVqZWN0MikKICAgICooKl9fcykrKyA9ICdcMCc7CiAgZWxzZQogICAgewogICAgICByZWdp c3RlciBjaGFyICpfX2NwID0gX19yZXR2YWw7CiAgICAgIHdoaWxlICgqX19jcCAhPSAnXDAnICYm ICpfX2NwICE9IF9fcmVqZWN0MSAmJiAqX19jcCAhPSBfX3JlamVjdDIpCgkrK19fY3A7CiAgICAg IGlmICgqX19jcCAhPSAnXDAnKQoJewoJICAqX19zID0gX19jcDsKCSAgKigqX19zKSsrID0gJ1ww JzsKCX0KICAgICAgZWxzZQoJKl9fcyA9ICgodm9pZCAqKTApIDsKICAgIH0KICByZXR1cm4gX19y ZXR2YWw7Cn0KCmV4dGVybiBfX2lubGluZSAgY2hhciAqX19zdHJzZXBfM2MgKGNoYXIgKipfX3Ms IGNoYXIgX19yZWplY3QxLCBjaGFyIF9fcmVqZWN0MiwKCQkJCSAgIGNoYXIgX19yZWplY3QzKTsK ZXh0ZXJuIF9faW5saW5lICBjaGFyICoKX19zdHJzZXBfM2MgKGNoYXIgKipfX3MsIGNoYXIgX19y ZWplY3QxLCBjaGFyIF9fcmVqZWN0MiwgY2hhciBfX3JlamVjdDMpCnsKICByZWdpc3RlciBjaGFy ICpfX3JldHZhbCA9ICpfX3M7CiAgaWYgKF9fcmV0dmFsID09ICgodm9pZCAqKTApICkKICAgIHJl dHVybiAqX19zID0gKCh2b2lkICopMCkgOwogIGlmICgqX19yZXR2YWwgPT0gX19yZWplY3QxIHx8 ICpfX3JldHZhbCA9PSBfX3JlamVjdDIKICAgICAgfHwgKl9fcmV0dmFsID09IF9fcmVqZWN0MykK ICAgICooKl9fcykrKyA9ICdcMCc7CiAgZWxzZQogICAgewogICAgICByZWdpc3RlciBjaGFyICpf X2NwID0gX19yZXR2YWw7CiAgICAgIHdoaWxlICgqX19jcCAhPSAnXDAnICYmICpfX2NwICE9IF9f cmVqZWN0MSAmJiAqX19jcCAhPSBfX3JlamVjdDIKCSAgICAgJiYgKl9fY3AgIT0gX19yZWplY3Qz KQoJKytfX2NwOwogICAgICBpZiAoKl9fY3AgIT0gJ1wwJykKCXsKCSAgKl9fcyA9IF9fY3A7Cgkg ICooKl9fcykrKyA9ICdcMCc7Cgl9CiAgICAgIGVsc2UKCSpfX3MgPSAoKHZvaWQgKikwKSA7CiAg ICB9CiAgcmV0dXJuIF9fcmV0dmFsOwp9CgpleHRlcm4gX19pbmxpbmUgIGNoYXIgKl9fc3Ryc2Vw X2cgKGNoYXIgKipfX3MsIF9fY29uc3QgY2hhciAqX19yZWplY3QpOwpleHRlcm4gX19pbmxpbmUg IGNoYXIgKgpfX3N0cnNlcF9nIChjaGFyICoqX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVqZWN0KQp7 CiAgcmVnaXN0ZXIgY2hhciAqX19yZXR2YWwgPSAqX19zOwogIGlmIChfX3JldHZhbCA9PSAoKHZv aWQgKikwKSApCiAgICByZXR1cm4gKCh2b2lkICopMCkgOwogIGlmICgoKl9fcyA9IF9fZXh0ZW5z aW9uX18JKHsgY2hhciBfX2EwLCBfX2ExLCBfX2EyOwkoX19idWlsdGluX2NvbnN0YW50X3AgKCAg X19yZWplY3QgKSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoICAgX19yZWplY3QgICkgKyAx KSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikoICAgX19yZWplY3QgICkgPT0gMSkgCT8gKChfX2Ew ID0gKChfX2NvbnN0IGNoYXIgICopICggIF9fcmVqZWN0ICkpWzBdLCBfX2EwID09ICdcMCcpCT8g KCh2b2lkICopMCkgCTogKChfX2ExID0gKChfX2NvbnN0IGNoYXIgKikgKCAgX19yZWplY3QgKSlb MV0sIF9fYTEgPT0gJ1wwJykJPyAoX19leHRlbnNpb25fXyAoX19idWlsdGluX2NvbnN0YW50X3Ag KCAgX19hMCApICYmICggIF9fYTAgKSA9PSAnXDAnCT8gKGNoYXIgKikgX19yYXdtZW1jaHIgKCAg X19yZXR2YWwgICwgICBfX2EwICkJOiBzdHJjaHIgKCAgX19yZXR2YWwgICwgICBfX2EwICkpKSAJ OiAoKF9fYTIgPSAoKF9fY29uc3QgY2hhciAqKSAoICBfX3JlamVjdCApKVsyXSwgX19hMiA9PSAn XDAnKQk/IF9fc3RycGJya19jMiAoIF9fcmV0dmFsICwgX19hMCwgX19hMSkJOiAoKChfX2NvbnN0 IGNoYXIgKikgKCAgX19yZWplY3QgKSlbM10gPT0gJ1wwJwk/IF9fc3RycGJya19jMyAoIF9fcmV0 dmFsICwgX19hMCwgX19hMSwgX19hMikJOiBzdHJwYnJrICggX19yZXR2YWwgLCAgIF9fcmVqZWN0 ICkpKSkpCTogc3RycGJyayAoIF9fcmV0dmFsICwgICBfX3JlamVjdCApKTsgfSkgKSAhPSAoKHZv aWQgKikwKSApCiAgICAqKCpfX3MpKysgPSAnXDAnOwogIHJldHVybiBfX3JldHZhbDsKfQoKCgoK CiAKCgoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2FybS1saW51eC8yLjk1LjMvLi4vLi4vLi4v Li4vYXJtLWxpbnV4L2luY2x1ZGUvc3RkbGliLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKIAoK CgoKCgoKIAoKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9hcm0tbGludXgvMi45NS4zL2luY2x1 ZGUvc3RkZGVmLmgiIDEgMwoKCgoKCgogCgoKIyAxOSAiL3Vzci9saWIvZ2NjLWxpYi9hcm0tbGlu dXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKIAoKCiAKCgoKCgogCgoKIyA2MSAiL3Vz ci9saWIvZ2NjLWxpYi9hcm0tbGludXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgoK CgoKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKIAoKIAoKCiMgMTI2ICIvdXNyL2xpYi9nY2Mt bGliL2FybS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCgoKCiAKCiAKCgoj IDE4OCAiL3Vzci9saWIvZ2NjLWxpYi9hcm0tbGludXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgi IDMKCgoKCgogCgoKCgogCgoKIyAyNjkgIi91c3IvbGliL2djYy1saWIvYXJtLWxpbnV4LzIuOTUu My9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgoKCgoKCgoKCgoKCgogCgogCgojIDMxNyAiL3Vzci9s aWIvZ2NjLWxpYi9hcm0tbGludXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKCiAKCgoK CgoKCgoKCgoKCiAKCgoKCgoKCiMgMzMgIi91c3IvbGliL2djYy1saWIvYXJtLWxpbnV4LzIuOTUu My8uLi8uLi8uLi8uLi9hcm0tbGludXgvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCgoKIAoKIyA0Njkg Ii91c3IvbGliL2djYy1saWIvYXJtLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9hcm0tbGludXgv aW5jbHVkZS9zdGRsaWIuaCIgMwoKCgoKIApleHRlcm4gdm9pZCAqICBtYWxsb2MgIChzaXplX3Qg X19zaXplKSAgICA7CiAKZXh0ZXJuIHZvaWQgKiAgY2FsbG9jICAoc2l6ZV90IF9fbm1lbWIsIHNp emVfdCBfX3NpemUpICAgIDsKCgojIDc2OCAiL3Vzci9saWIvZ2NjLWxpYi9hcm0tbGludXgvMi45 NS4zLy4uLy4uLy4uLy4uL2FybS1saW51eC9pbmNsdWRlL3N0ZGxpYi5oIiAzCgoKCiAKCgojIDEx ODcgIi91c3IvbGliL2djYy1saWIvYXJtLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9hcm0tbGlu dXgvaW5jbHVkZS9iaXRzL3N0cmluZzIuaCIgMiAzCgoKCgoKCiMgMTIwMiAiL3Vzci9saWIvZ2Nj LWxpYi9hcm0tbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2FybS1saW51eC9pbmNsdWRlL2JpdHMv c3RyaW5nMi5oIiAzCgoKCgoKCgoKCgoKCgojIDM0NiAiL3Vzci9saWIvZ2NjLWxpYi9hcm0tbGlu dXgvMi45NS4zLy4uLy4uLy4uLy4uL2FybS1saW51eC9pbmNsdWRlL3N0cmluZy5oIiAyIDMKCgoK CiAKCgojIDk1ICIuLi8uLi9pbmNsdWRlL29zLmgiIDIKCgoKCgoKCgoKCiAKCgoKCgoKZXh0ZXJu IEJvb2wgT3NEZWxheUluaXRDb2xvcnM7CmV4dGVybiB2b2lkICgqT3NWZW5kb3JWRXJyb3JGUHJv YykoY29uc3QgY2hhciAqLCB2YV9saXN0IGFyZ3MpOwoKZXh0ZXJuIGludCBXYWl0Rm9yU29tZXRo aW5nKAoKICAgIGludCogIAoKKTsKCiMgMTM0ICIuLi8uLi9pbmNsdWRlL29zLmgiCgpleHRlcm4g aW50IFJlYWRSZXF1ZXN0RnJvbUNsaWVudCgKCiAgICBDbGllbnRQdHIgIAoKKTsKCgpleHRlcm4g Qm9vbCBJbnNlcnRGYWtlUmVxdWVzdCgKCiAgICBDbGllbnRQdHIgICwKICAgIGNoYXIqICAsCiAg ICBpbnQgIAoKKTsKCmV4dGVybiBpbnQgUmVzZXRDdXJyZW50UmVxdWVzdCgKCiAgICBDbGllbnRQ dHIgIAoKKTsKCmV4dGVybiB2b2lkIEZsdXNoQWxsT3V0cHV0KAoKICAgIHZvaWQKCik7CgpleHRl cm4gdm9pZCBGbHVzaElmQ3JpdGljYWxPdXRwdXRQZW5kaW5nKAoKICAgIHZvaWQKCik7CgpleHRl cm4gdm9pZCBTZXRDcml0aWNhbE91dHB1dFBlbmRpbmcoCgogICAgdm9pZAoKKTsKCmV4dGVybiBp bnQgV3JpdGVUb0NsaWVudCgKCiAgICBDbGllbnRQdHIgICwKICAgIGludCAgLAogICAgY2hhciog IAoKKTsKCmV4dGVybiB2b2lkIFJlc2V0T3NCdWZmZXJzKAoKICAgIHZvaWQKCik7CgpleHRlcm4g dm9pZCBDcmVhdGVXZWxsS25vd25Tb2NrZXRzKAoKICAgIHZvaWQKCik7CgpleHRlcm4gdm9pZCBS ZXNldFdlbGxLbm93blNvY2tldHMoCgogICAgdm9pZAoKKTsKCmV4dGVybiBYSUQKQXV0aG9yaXph dGlvbklET2ZDbGllbnQoCgogICAgQ2xpZW50UHRyICAKCik7CgpleHRlcm4gY2hhciAqQ2xpZW50 QXV0aG9yaXplZCgKCiAgICBDbGllbnRQdHIgICwKICAgIHVuc2lnbmVkIGludCAgLAogICAgY2hh ciogICwKICAgIHVuc2lnbmVkIGludCAgLAogICAgY2hhciogIAoKKTsKCmV4dGVybiBCb29sIEVz dGFibGlzaE5ld0Nvbm5lY3Rpb25zKAoKICAgIENsaWVudFB0ciAgLAogICAgcG9pbnRlciAgCgop OwoKZXh0ZXJuIHZvaWQgQ2hlY2tDb25uZWN0aW9ucygKCiAgICB2b2lkCgopOwoKZXh0ZXJuIHZv aWQgQ2xvc2VEb3duQ29ubmVjdGlvbigKCiAgICBDbGllbnRQdHIgIAoKKTsKCmV4dGVybiBpbnQg QWRkRW5hYmxlZERldmljZSgKCiAgICBpbnQgIAoKKTsKCmV4dGVybiBpbnQgUmVtb3ZlRW5hYmxl ZERldmljZSgKCiAgICBpbnQgIAoKKTsKCmV4dGVybiBpbnQgT25seUxpc3RlblRvT25lQ2xpZW50 KAoKICAgIENsaWVudFB0ciAgCgopOwoKZXh0ZXJuIGludCBMaXN0ZW5Ub0FsbENsaWVudHMoCgog ICAgdm9pZAoKKTsKCmV4dGVybiBpbnQgSWdub3JlQ2xpZW50KAoKICAgIENsaWVudFB0ciAgCgop OwoKZXh0ZXJuIGludCBBdHRlbmRDbGllbnQoCgogICAgQ2xpZW50UHRyICAKCik7CgpleHRlcm4g aW50IE1ha2VDbGllbnRHcmFiSW1wZXJ2aW91cygKCiAgICBDbGllbnRQdHIgIAoKKTsKCmV4dGVy biBpbnQgTWFrZUNsaWVudEdyYWJQZXJ2aW91cygKCiAgICBDbGllbnRQdHIgIAoKKTsKCgoKCgoK CgoKZXh0ZXJuIHZvaWQgQXZhaWxhYmxlQ2xpZW50SW5wdXQoCgogICAgQ2xpZW50UHRyICAKCik7 CgpleHRlcm4gdm9pZCBFcnJvcigKCiAgICBjaGFyKiAgCgopOwoKZXh0ZXJuIENBUkQzMiBHZXRU aW1lSW5NaWxsaXMoCgogICAgdm9pZAoKKTsKCmV4dGVybiB2b2lkIEFkanVzdFdhaXRGb3JEZWxh eSgKCiAgICBwb2ludGVyICAsCiAgICB1bnNpZ25lZCBsb25nICAKCik7Cgp0eXBlZGVmCXN0cnVj dCBfT3NUaW1lclJlYyAqT3NUaW1lclB0cjsKCnR5cGVkZWYgQ0FSRDMyICgqT3NUaW1lckNhbGxi YWNrKSgKCiAgICBPc1RpbWVyUHRyICAsCiAgICBDQVJEMzIgICwKICAgIHBvaW50ZXIgIAoKKTsK CmV4dGVybiB2b2lkIFRpbWVySW5pdCgKCiAgICB2b2lkCgopOwoKZXh0ZXJuIEJvb2wgVGltZXJG b3JjZSgKCiAgICBPc1RpbWVyUHRyICAKCik7CgoKCgpleHRlcm4gT3NUaW1lclB0ciBUaW1lclNl dCgKCiAgICBPc1RpbWVyUHRyICAsCiAgICBpbnQgICwKICAgIENBUkQzMiAgLAogICAgT3NUaW1l ckNhbGxiYWNrICAsCiAgICBwb2ludGVyICAKCik7CgpleHRlcm4gdm9pZCBUaW1lckNoZWNrKAoK ICAgIHZvaWQKCik7CgpleHRlcm4gdm9pZCBUaW1lckNhbmNlbCgKCiAgICBPc1RpbWVyUHRyICAK Cik7CgpleHRlcm4gdm9pZCBUaW1lckZyZWUoCgogICAgT3NUaW1lclB0ciAgCgopOwoKZXh0ZXJu IHZvaWQgIEF1dG9SZXNldFNlcnZlcigKCiAgICBpbnQgIAoKKTsKCmV4dGVybiB2b2lkICBHaXZl VXAoCgogICAgaW50ICAKCik7CgpleHRlcm4gdm9pZCBVc2VNc2coCgogICAgdm9pZAoKKTsKCmV4 dGVybiB2b2lkIFByb2Nlc3NDb21tYW5kTGluZSgKCiAgICBpbnQgICwKICAgIGNoYXIqICBbXQoK KTsKCmV4dGVybiBwb2ludGVyIFhhbGxvYygKCiAgICB1bnNpZ25lZCBsb25nICAKCik7CgpleHRl cm4gcG9pbnRlciBYTkZhbGxvYygKCiAgICB1bnNpZ25lZCBsb25nICAKCik7CgpleHRlcm4gcG9p bnRlciBYY2FsbG9jKAoKICAgIHVuc2lnbmVkIGxvbmcgIAoKKTsKCmV4dGVybiBwb2ludGVyIFhO RmNhbGxvYygKCiAgICB1bnNpZ25lZCBsb25nICAKCik7CgpleHRlcm4gcG9pbnRlciBYcmVhbGxv YygKCiAgICBwb2ludGVyICAsCiAgICB1bnNpZ25lZCBsb25nICAKCik7CgpleHRlcm4gcG9pbnRl ciBYTkZyZWFsbG9jKAoKICAgIHBvaW50ZXIgICwKICAgIHVuc2lnbmVkIGxvbmcgIAoKKTsKCmV4 dGVybiB2b2lkIFhmcmVlKAoKICAgIHBvaW50ZXIgIAoKKTsKCmV4dGVybiB2b2lkIE9zSW5pdEFs bG9jYXRvcigKCiAgICB2b2lkCgopOwoKZXh0ZXJuIGNoYXIgKlhzdHJkdXAoY29uc3QgY2hhciAq cyk7CmV4dGVybiBjaGFyICpYTkZzdHJkdXAoY29uc3QgY2hhciAqcyk7Cgp0eXBlZGVmIHZvaWQg ICgqT3NTaWdIYW5kbGVyUHRyKSgKCiAgICBpbnQgIAoKKTsKCmV4dGVybiBPc1NpZ0hhbmRsZXJQ dHIgT3NTaWduYWwoCgogICAgaW50ICAsCiAgICBPc1NpZ0hhbmRsZXJQdHIgIAoKKTsKCmV4dGVy biBpbnQgYXVkaXRUcmFpbExldmVsOwoKZXh0ZXJuIHZvaWQgQXVkaXRGKAoKICAgIGNvbnN0IGNo YXIqICAsCiAgICAuLi4KCik7CgpleHRlcm4gdm9pZCBGYXRhbEVycm9yKAoKICAgIGNvbnN0IGNo YXIqICAsCiAgICAuLi4KCikKCl9fYXR0cmlidXRlKChub3JldHVybikpCgo7CgpleHRlcm4gdm9p ZCBFcnJvckYoCgogICAgY29uc3QgY2hhciogICwKICAgIC4uLgoKKTsKCgpleHRlcm4gdm9pZCBW RXJyb3JGKGNvbnN0IGNoYXIgKmYsIHZhX2xpc3QgYXJncyk7CgoKIyA1MDQgIi4uLy4uL2luY2x1 ZGUvb3MuaCIKCgpleHRlcm4gaW50IE9zTG9va3VwQ29sb3IoCgogICAgaW50CSAsCiAgICBjaGFy ICogICwKICAgIHVuc2lnbmVkICAsCiAgICB1bnNpZ25lZCBzaG9ydCAqICAsCiAgICB1bnNpZ25l ZCBzaG9ydCAqICAsCiAgICB1bnNpZ25lZCBzaG9ydCAqICAKCik7CgpleHRlcm4gdm9pZCBPc0lu aXQoCgogICAgdm9pZAoKKTsKCmV4dGVybiB2b2lkIE9zQ2xlYW51cCgKCiAgICB2b2lkCgopOwoK ZXh0ZXJuIHZvaWQgT3NWZW5kb3JGYXRhbEVycm9yKAoKICAgIHZvaWQKCik7CgpleHRlcm4gdm9p ZCBPc1ZlbmRvckluaXQoCgogICAgdm9pZAoKKTsKCmV4dGVybiBpbnQgT3NJbml0Q29sb3JzKAoK ICAgIHZvaWQKCik7Cgp2b2lkIE9zQmxvY2tTaWduYWxzICgKCgkJICAgICB2b2lkCgoJCSAgICAg KTsKCnZvaWQgT3NSZWxlYXNlU2lnbmFscyAoCgoJCSAgICAgdm9pZAoKCQkgICAgICk7CgoKZXh0 ZXJuIGludCBTeXN0ZW0oY2hhciAqKTsKZXh0ZXJuIHBvaW50ZXIgUG9wZW4oY2hhciAqLCBjaGFy ICopOwpleHRlcm4gaW50IFBjbG9zZShwb2ludGVyKTsKCgoKCgoKZXh0ZXJuIHZvaWQgQ2hlY2tV c2VyUGFyYW1ldGVycyhpbnQgYXJnYywgY2hhciAqKmFyZ3YsIGNoYXIgKiplbnZwKTsKZXh0ZXJu IHZvaWQgQ2hlY2tVc2VyQXV0aG9yaXphdGlvbih2b2lkKTsKCmV4dGVybiBpbnQgQWRkSG9zdCgK CiAgICBDbGllbnRQdHIJICwKICAgIGludCAgICAgICAgICAsCiAgICB1bnNpZ25lZCAgICAgLAog ICAgcG9pbnRlciAgICAgIAoKKTsKCmV4dGVybiBCb29sIEZvckVhY2hIb3N0SW5GYW1pbHkgKAoK ICAgIGludAkgICAgICwKICAgIEJvb2wgICAgKCogICApKAoKICAgICAgICAgICAgdW5zaWduZWQg Y2hhciAqICAsCiAgICAgICAgICAgIHNob3J0ICAgICAgICAgICAgLAogICAgICAgICAgICBwb2lu dGVyICAgICAgICAgIAoKICAgICAgICAgICAgKSwKICAgIHBvaW50ZXIgIAoKKTsKCmV4dGVybiBp bnQgUmVtb3ZlSG9zdCgKCiAgICBDbGllbnRQdHIJICwKICAgIGludCAgICAgICAgICAsCiAgICB1 bnNpZ25lZCAgICAgLAogICAgcG9pbnRlciAgICAgIAoKKTsKCmV4dGVybiBpbnQgR2V0SG9zdHMo CgogICAgcG9pbnRlciAqICAsCiAgICBpbnQJICAgICogICwKICAgIGludAkgICAgKiAgLAogICAg Qk9PTCAgICAqICAKCik7Cgp0eXBlZGVmIHN0cnVjdCBzb2NrYWRkciAqIHNvY2thZGRyUHRyOwoK ZXh0ZXJuIGludCBJbnZhbGlkSG9zdCgKCiAgICBzb2NrYWRkclB0ciAgLAogICAgaW50CQkgCgop OwoKZXh0ZXJuIGludCBMb2NhbENsaWVudCgKCiAgICBDbGllbnRQdHIgIAoKKTsKCmV4dGVybiBp bnQgQ2hhbmdlQWNjZXNzQ29udHJvbCgKCiAgICBDbGllbnRQdHIgICwKICAgIGludCAgCgopOwoK ZXh0ZXJuIGludCBHZXRBY2Nlc3NDb250cm9sKAoKICAgIHZvaWQKCik7CgoKZXh0ZXJuIHZvaWQg QWRkTG9jYWxIb3N0cygKCiAgICB2b2lkCgopOwoKZXh0ZXJuIHZvaWQgUmVzZXRIb3N0cygKCiAg ICBjaGFyICpkaXNwbGF5CgopOwoKZXh0ZXJuIHZvaWQgRW5hYmxlTG9jYWxIb3N0KAoKICAgIHZv aWQKCik7CgpleHRlcm4gdm9pZCBEaXNhYmxlTG9jYWxIb3N0KAoKICAgIHZvaWQKCik7CgpleHRl cm4gdm9pZCBBY2Nlc3NVc2luZ1hkbWNwKAoKICAgIHZvaWQKCik7CgpleHRlcm4gdm9pZCBEZWZp bmVTZWxmKAoKICAgIGludCAgCgopOwoKZXh0ZXJuIHZvaWQgQXVnbWVudFNlbGYoCgogICAgcG9p bnRlciAgLAogICAgaW50ICAKCik7CgpleHRlcm4gdm9pZCBJbml0QXV0aG9yaXphdGlvbigKCiAg ICBjaGFyICogIAoKKTsKCmV4dGVybiBpbnQgTG9hZEF1dGhvcml6YXRpb24oCgogICAgdm9pZAoK KTsKCmV4dGVybiB2b2lkIFJlZ2lzdGVyQXV0aG9yaXphdGlvbnMoCgogICAgdm9pZAoKKTsKCmV4 dGVybiBYSUQgQXV0aG9yaXphdGlvblRvSUQgKAoJdW5zaWduZWQgc2hvcnQJbmFtZV9sZW5ndGgs CgljaGFyCQkqbmFtZSwKCXVuc2lnbmVkIHNob3J0CWRhdGFfbGVuZ3RoLAoJY2hhcgkJKmRhdGEp OwoKZXh0ZXJuIGludCBBdXRob3JpemF0aW9uRnJvbUlEICgKCVhJRCAJCWlkLAoJdW5zaWduZWQg c2hvcnQJKm5hbWVfbGVucCwKCWNoYXIJCSoqbmFtZXAsCgl1bnNpZ25lZCBzaG9ydAkqZGF0YV9s ZW5wLAoJY2hhcgkJKipkYXRhcCk7CgpleHRlcm4gWElEIENoZWNrQXV0aG9yaXphdGlvbigKCiAg ICB1bnNpZ25lZCBpbnQgICwKICAgIGNoYXIgKiAgLAogICAgdW5zaWduZWQgaW50ICAsCiAgICBj aGFyICogICwKICAgIENsaWVudFB0ciAgLAogICAgY2hhciAqKiAgCgopOwoKZXh0ZXJuIHZvaWQg UmVzZXRBdXRob3JpemF0aW9uKAoKICAgIHZvaWQKCik7CgpleHRlcm4gaW50IFJlbW92ZUF1dGhv cml6YXRpb24gKAogICAgdW5zaWduZWQgc2hvcnQJbmFtZV9sZW5ndGgsCiAgICBjaGFyCQkqbmFt ZSwKICAgIHVuc2lnbmVkIHNob3J0CWRhdGFfbGVuZ3RoLAogICAgY2hhcgkJKmRhdGEpOwoKZXh0 ZXJuIGludCBBZGRBdXRob3JpemF0aW9uKAoKICAgIHVuc2lnbmVkIGludAkgLAogICAgY2hhciAq CQkgLAogICAgdW5zaWduZWQgaW50CSAsCiAgICBjaGFyICoJCSAKCik7CgpleHRlcm4gWElEIEdl bmVyYXRlQXV0aG9yaXphdGlvbigKCiAgICB1bnNpZ25lZCBpbnQgICAgLAogICAgY2hhcgkqICAg LAogICAgdW5zaWduZWQgaW50ICAgICwKICAgIGNoYXIJKiAgICwKICAgIHVuc2lnbmVkIGludCAq ICAsCiAgICBjaGFyCSoqICAKCik7CgoKCgoKCgoKCgpleHRlcm4gaW50IGRkeFByb2Nlc3NBcmd1 bWVudCgKCiAgICBpbnQgICwKICAgIGNoYXIgKiAgIFtdLAogICAgaW50ICAKCik7CgpleHRlcm4g dm9pZCBkZHhVc2VNc2codm9pZCk7CgogCgoKCnhSZXFQdHIgUGVla05leHRSZXF1ZXN0KAoKICAg IHhSZXFQdHIgcmVxLCBDbGllbnRQdHIgY2xpZW50LCBCb29sIHJlYWRtb3JlCgopOwoKdm9pZCBT a2lwUmVxdWVzdHMoCgogICAgeFJlcVB0ciByZXEsIENsaWVudFB0ciBjbGllbnQsIGludCBudW1z a2lwcGVkCgopOwoKIAoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCiAKZXh0ZXJuIENhbGxiYWNrTGlz dFB0ciBTa2lwcGVkUmVxdWVzdHNDYWxsYmFjazsKdHlwZWRlZiBzdHJ1Y3QgewogICAgeFJlcVB0 ciByZXE7CiAgICBDbGllbnRQdHIgY2xpZW50OwogICAgaW50IG51bXNraXBwZWQ7Cn0gU2tpcHBl ZFJlcXVlc3RJbmZvUmVjOwoKIApleHRlcm4gQ2FsbGJhY2tMaXN0UHRyIFJlcGx5Q2FsbGJhY2s7 CnR5cGVkZWYgc3RydWN0IHsKICAgIENsaWVudFB0ciBjbGllbnQ7CiAgICBwb2ludGVyIHJlcGx5 RGF0YTsKICAgIHVuc2lnbmVkIGxvbmcgZGF0YUxlbkJ5dGVzOwogICAgdW5zaWduZWQgbG9uZyBi eXRlc1JlbWFpbmluZzsKICAgIEJvb2wgc3RhcnRPZlJlcGx5Owp9IFJlcGx5SW5mb1JlYzsKCiAK ZXh0ZXJuIENhbGxiYWNrTGlzdFB0ciBGbHVzaENhbGxiYWNrOwoKZXh0ZXJuIHZvaWQgQWJvcnRE RFgodm9pZCk7CmV4dGVybiB2b2lkIGRkeEdpdmVVcCh2b2lkKTsKZXh0ZXJuIGludCBUaW1lU2lu Y2VMYXN0SW5wdXRFdmVudCh2b2lkKTsKCgojIDExNyAiLi4vLi4vaW5jbHVkZS9taXNjLmgiIDIK CgojIDEgIi4uLy4uLy4uLy4uL2V4cG9ydHMvaW5jbHVkZS9YMTEvWGZ1bmNzLmgiIDEKIAoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgogCgoKCgoKCgoKCgoKCgojIDY2ICIuLi8uLi8uLi8u Li9leHBvcnRzL2luY2x1ZGUvWDExL1hmdW5jcy5oIgoKCgogCgoKIAoKCgoKCiMgOTIgIi4uLy4u Ly4uLy4uL2V4cG9ydHMvaW5jbHVkZS9YMTEvWGZ1bmNzLmgiCgoKCgoKCgoKCiMgMTE5ICIuLi8u Li9pbmNsdWRlL21pc2MuaCIgMgoKCgoKCgoKICAgICAKCgoKCgoKCiAKCgoKCgogCgoKCgoKCgoK CgoKCgogCgogIAojIDEgIi91c3IvbGliL2djYy1saWIvYXJtLWxpbnV4LzIuOTUuMy8uLi8uLi8u Li8uLi9hcm0tbGludXgvaW5jbHVkZS9zdGRsaWIuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgog CgoKCgoKCgogCgoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2FybS1saW51eC8yLjk1LjMvaW5j bHVkZS9zdGRkZWYuaCIgMSAzCgoKCgoKCiAKCgojIDE5ICIvdXNyL2xpYi9nY2MtbGliL2FybS1s aW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgogCgoKIAoKCgoKCiAKCgojIDYxICIv dXNyL2xpYi9nY2MtbGliL2FybS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAK CgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgogCgogCgoKIyAxMjYgIi91c3IvbGliL2dj Yy1saWIvYXJtLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKCgoKIAoKIAoK CiMgMTg4ICIvdXNyL2xpYi9nY2MtbGliL2FybS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYu aCIgMwoKCgoKCiAKCgoKCiAKCgojIDI2OSAiL3Vzci9saWIvZ2NjLWxpYi9hcm0tbGludXgvMi45 NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKCgoKCgoKCgoKCgoKCiAKCiAKCiMgMzE3ICIvdXNy L2xpYi9nY2MtbGliL2FybS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKIAoK CgoKCgoKCgoKCgoKIAoKCgoKCgoKIyAzMyAiL3Vzci9saWIvZ2NjLWxpYi9hcm0tbGludXgvMi45 NS4zLy4uLy4uLy4uLy4uL2FybS1saW51eC9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgogCgoKCgog CnR5cGVkZWYgc3RydWN0CiAgewogICAgaW50IHF1b3Q7CQkJIAogICAgaW50IHJlbTsJCQkgCiAg fSBkaXZfdDsKCiAKCnR5cGVkZWYgc3RydWN0CiAgewogICAgbG9uZyBpbnQgcXVvdDsJCSAKICAg IGxvbmcgaW50IHJlbTsJCSAKICB9IGxkaXZfdDsKCgoKCiAKX19leHRlbnNpb25fXyB0eXBlZGVm IHN0cnVjdAogIHsKICAgIGxvbmcgbG9uZyBpbnQgcXVvdDsJCSAKICAgIGxvbmcgbG9uZyBpbnQg cmVtOwkJIAogIH0gbGxkaXZfdDsKCgoKCiAKCgoKIAoKCgoKCiAKCmV4dGVybiBzaXplX3QgX19j dHlwZV9nZXRfbWJfY3VyX21heCAgKHZvaWQpICAgIDsKCgogCmV4dGVybiBkb3VibGUgYXRvZiAg KF9fY29uc3QgY2hhciAqX19ucHRyKSAgICA7CiAKZXh0ZXJuIGludCBhdG9pICAoX19jb25zdCBj aGFyICpfX25wdHIpICAgIDsKIApleHRlcm4gbG9uZyBpbnQgYXRvbCAgKF9fY29uc3QgY2hhciAq X19ucHRyKSAgICA7CgoKIApfX2V4dGVuc2lvbl9fIGV4dGVybiBsb25nIGxvbmcgaW50IGF0b2xs ICAoX19jb25zdCBjaGFyICpfX25wdHIpICAgIDsKCgogCmV4dGVybiBkb3VibGUgc3RydG9kICAo X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKCQkJICAgY2hhciAqKl9fcmVzdHJpY3Qg X19lbmRwdHIpICAgIDsKCgogCmV4dGVybiBmbG9hdCBzdHJ0b2YgIChfX2NvbnN0IGNoYXIgKl9f cmVzdHJpY3QgX19ucHRyLAoJCQkgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSAgICA7Cgpl eHRlcm4gbG9uZyBkb3VibGUgIHN0cnRvbGQgIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19u cHRyLAoJCQkJICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikgICAgOwoKCiAKZXh0ZXJu IGxvbmcgaW50IHN0cnRvbCAgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCgkJCSAg ICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpICAgIDsKIApleHRlcm4g dW5zaWduZWQgbG9uZyBpbnQgc3RydG91bCAgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25w dHIsCgkJCQkgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCgkJCQkgICAgICAgaW50 IF9fYmFzZSkgICAgOwoKCiAKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBzdHJ0 b3EgIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAoJCQkJICBjaGFyICoqX19yZXN0 cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgICAgOwogCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVu c2lnbmVkIGxvbmcgbG9uZyBpbnQgc3RydG91cSAgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf X25wdHIsCgkJCQkJICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAoJCQkJCSAgICBpbnQg X19iYXNlKSAgICA7CgoKCiAKCiAKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBz dHJ0b2xsICAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKCQkJCSAgIGNoYXIgKipf X3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSAgICA7CiAKX19leHRlbnNpb25fXwpleHRl cm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBzdHJ0b3VsbCAgKF9fY29uc3QgY2hhciAqX19yZXN0 cmljdCBfX25wdHIsCgkJCQkJICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKCQkJCQkg ICAgIGludCBfX2Jhc2UpICAgIDsKCgoKCiAKCgoKCgoKCgoKCiAKCgoKIAoKZXh0ZXJuIGxvbmcg aW50IF9fc3RydG9sX2wgIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAoJCQkJIGNo YXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLAoJCQkJIF9fbG9jYWxlX3QgX19s b2MpICAgIDsKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBfX3N0cnRvdWxfbCAgKF9fY29uc3Qg Y2hhciAqX19yZXN0cmljdCBfX25wdHIsCgkJCQkJICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRw dHIsCgkJCQkJICAgaW50IF9fYmFzZSwgX19sb2NhbGVfdCBfX2xvYykgICAgOwoKX19leHRlbnNp b25fXwpleHRlcm4gbG9uZyBsb25nIGludCBfX3N0cnRvbGxfbCAgKF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX25wdHIsCgkJCQkgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGlu dCBfX2Jhc2UsCgkJCQkgICAgICAgX19sb2NhbGVfdCBfX2xvYykgICAgOwoKX19leHRlbnNpb25f XwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3N0cnRvdWxsX2wgIChfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QKCQkJCQkJIF9fbnB0ciwKCQkJCQkJIGNoYXIgKipfX3Jlc3RyaWN0IF9f ZW5kcHRyLAoJCQkJCQkgaW50IF9fYmFzZSwKCQkJCQkJIF9fbG9jYWxlX3QgX19sb2MpICAgIDsK CmV4dGVybiBkb3VibGUgX19zdHJ0b2RfbCAgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25w dHIsCgkJCSAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgX19sb2NhbGVfdCBfX2xv YykgICAgOwoKZXh0ZXJuIGZsb2F0IF9fc3RydG9mX2wgIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp Y3QgX19ucHRyLAoJCQkgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgX19sb2NhbGVf dCBfX2xvYykgICAgOwoKZXh0ZXJuIGxvbmcgZG91YmxlICBfX3N0cnRvbGRfbCAgKF9fY29uc3Qg Y2hhciAqX19yZXN0cmljdCBfX25wdHIsCgkJCQkJIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRy LAoJCQkJCSBfX2xvY2FsZV90IF9fbG9jKSAgICA7CgoKCiAKCgpleHRlcm4gZG91YmxlIF9fc3Ry dG9kX2ludGVybmFsICAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKCQkJCSAgICAg IGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAoJCQkJICAgICAgaW50IF9fZ3JvdXApICAgIDsK ZXh0ZXJuIGZsb2F0IF9fc3RydG9mX2ludGVybmFsICAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fbnB0ciwKCQkJCSAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2dyb3Vw KSAgICA7CmV4dGVybiBsb25nIGRvdWJsZSAgX19zdHJ0b2xkX2ludGVybmFsICAoX19jb25zdCBj aGFyICoKCQkJCQkJX19yZXN0cmljdCBfX25wdHIsCgkJCQkJCWNoYXIgKipfX3Jlc3RyaWN0IF9f ZW5kcHRyLAoJCQkJCQlpbnQgX19ncm91cCkgICAgOwoKZXh0ZXJuIGxvbmcgaW50IF9fc3RydG9s X2ludGVybmFsICAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKCQkJCQljaGFyICoq X19yZXN0cmljdCBfX2VuZHB0ciwKCQkJCQlpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgICAgOwoK CgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgX19zdHJ0b3VsX2ludGVybmFsICAoX19jb25zdCBj aGFyICoKCQkJCQkJICBfX3Jlc3RyaWN0IF9fbnB0ciwKCQkJCQkJICBjaGFyICoqX19yZXN0cmlj dCBfX2VuZHB0ciwKCQkJCQkJICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgICAgOwoKCgoKX19l eHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBfX3N0cnRvbGxfaW50ZXJuYWwgIChfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAoJCQkJCSAgICAgIGNoYXIgKipfX3Jlc3RyaWN0 IF9fZW5kcHRyLAoJCQkJCSAgICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSAgICA7CgoKCl9f ZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19zdHJ0b3VsbF9pbnRl cm5hbCAgKF9fY29uc3QgY2hhciAqCgkJCQkJCQlfX3Jlc3RyaWN0IF9fbnB0ciwKCQkJCQkJCWNo YXIgKioKCQkJCQkJCV9fcmVzdHJpY3QgX19lbmRwdHIsCgkJCQkJCQlpbnQgX19iYXNlLAoJCQkJ CQkJaW50IF9fZ3JvdXApICAgIDsKCgoKCgoKIAoKZXh0ZXJuIF9faW5saW5lIGRvdWJsZQpzdHJ0 b2QgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9f ZW5kcHRyKSAgCnsKICByZXR1cm4gX19zdHJ0b2RfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIs IDApOwp9CmV4dGVybiBfX2lubGluZSBsb25nIGludApzdHJ0b2wgKF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAoJaW50IF9fYmFzZSkg IAp7CiAgcmV0dXJuIF9fc3RydG9sX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2Us IDApOwp9CmV4dGVybiBfX2lubGluZSB1bnNpZ25lZCBsb25nIGludApzdHJ0b3VsIChfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKCSBp bnQgX19iYXNlKSAgCnsKICByZXR1cm4gX19zdHJ0b3VsX2ludGVybmFsIChfX25wdHIsIF9fZW5k cHRyLCBfX2Jhc2UsIDApOwp9CgoKZXh0ZXJuIF9faW5saW5lIGZsb2F0CnN0cnRvZiAoX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpICAK ewogIHJldHVybiBfX3N0cnRvZl9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgMCk7Cn0KZXh0 ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIApzdHJ0b2xkIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp Y3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikgIAp7CiAgcmV0dXJuIF9fc3Ry dG9sZF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgMCk7Cn0KCgoKX19leHRlbnNpb25fXyBl eHRlcm4gX19pbmxpbmUgbG9uZyBsb25nIGludApzdHJ0b3EgKF9fY29uc3QgY2hhciAqX19yZXN0 cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAoJaW50IF9fYmFzZSkgIAp7 CiAgcmV0dXJuIF9fc3RydG9sbF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAw KTsKfQpfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSB1bnNpZ25lZCBsb25nIGxvbmcgaW50 CnN0cnRvdXEgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3Ry aWN0IF9fZW5kcHRyLAoJIGludCBfX2Jhc2UpICAKewogIHJldHVybiBfX3N0cnRvdWxsX2ludGVy bmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9CgoKCl9fZXh0ZW5zaW9uX18gZXh0 ZXJuIF9faW5saW5lIGxvbmcgbG9uZyBpbnQKc3RydG9sbCAoX19jb25zdCBjaGFyICpfX3Jlc3Ry aWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCgkgaW50IF9fYmFzZSkgIAp7 CiAgcmV0dXJuIF9fc3RydG9sbF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAw KTsKfQpfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSB1bnNpZ25lZCBsb25nIGxvbmcgaW50 CnN0cnRvdWxsIChfX2NvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVz dHJpY3QgX19lbmRwdHIsCgkgIGludCBfX2Jhc2UpICAKewogIHJldHVybiBfX3N0cnRvdWxsX2lu dGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9CgoKZXh0ZXJuIF9faW5saW5l IGRvdWJsZQphdG9mIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgIAp7CiAgcmV0dXJuIHN0cnRvZCAo X19ucHRyLCAoY2hhciAqKikgKCh2b2lkICopMCkgKTsKfQpleHRlcm4gX19pbmxpbmUgaW50CmF0 b2kgKF9fY29uc3QgY2hhciAqX19ucHRyKSAgCnsKICByZXR1cm4gKGludCkgc3RydG9sIChfX25w dHIsIChjaGFyICoqKSAoKHZvaWQgKikwKSAsIDEwKTsKfQpleHRlcm4gX19pbmxpbmUgbG9uZyBp bnQKYXRvbCAoX19jb25zdCBjaGFyICpfX25wdHIpICAKewogIHJldHVybiBzdHJ0b2wgKF9fbnB0 ciwgKGNoYXIgKiopICgodm9pZCAqKTApICwgMTApOwp9CgoKX19leHRlbnNpb25fXyBleHRlcm4g X19pbmxpbmUgbG9uZyBsb25nIGludAphdG9sbCAoX19jb25zdCBjaGFyICpfX25wdHIpICAKewog IHJldHVybiBzdHJ0b2xsIChfX25wdHIsIChjaGFyICoqKSAoKHZvaWQgKikwKSAsIDEwKTsKfQoK CgoKCiAKCgpleHRlcm4gY2hhciAqbDY0YSAgKGxvbmcgaW50IF9fbikgICAgOwoKIApleHRlcm4g bG9uZyBpbnQgYTY0bCAgKF9fY29uc3QgY2hhciAqX19zKSAgICA7CgoKIyAxICIvdXNyL2xpYi9n Y2MtbGliL2FybS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vYXJtLWxpbnV4L2luY2x1ZGUvc3lz L3R5cGVzLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCiAKCiMgMSAiL3Vzci9s aWIvZ2NjLWxpYi9hcm0tbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2FybS1saW51eC9pbmNsdWRl L2JpdHMvdHlwZXMuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCiMgMSAiL3Vz ci9saWIvZ2NjLWxpYi9hcm0tbGludXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwoKCgoK CgogCgoKIyAxOSAiL3Vzci9saWIvZ2NjLWxpYi9hcm0tbGludXgvMi45NS4zL2luY2x1ZGUvc3Rk ZGVmLmgiIDMKCgoKIAoKCiAKCgoKCgogCgoKIyA2MSAiL3Vzci9saWIvZ2NjLWxpYi9hcm0tbGlu dXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoK CgogCgoKCgoKIAoKIAoKCiMgMTI2ICIvdXNyL2xpYi9nY2MtbGliL2FybS1saW51eC8yLjk1LjMv aW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCgoKCiAKCiAKCgojIDE4OCAiL3Vzci9saWIvZ2NjLWxp Yi9hcm0tbGludXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKCgogCgoKCgogCgoKIyAy NjkgIi91c3IvbGliL2djYy1saWIvYXJtLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAz CgoKCgoKCgoKCgoKCgoKCgogCgogCgojIDMxNyAiL3Vzci9saWIvZ2NjLWxpYi9hcm0tbGludXgv Mi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKCiAKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCiMg MjkgIi91c3IvbGliL2djYy1saWIvYXJtLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9hcm0tbGlu dXgvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDIgMwoKCiAKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9f dV9jaGFyOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fdV9zaG9ydDsKdHlwZWRlZiB1bnNpZ25l ZCBpbnQgX191X2ludDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIF9fdV9sb25nOwoKX19leHRlbnNp b25fXyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX191X3F1YWRfdDsKX19leHRlbnNp b25fXyB0eXBlZGVmIGxvbmcgbG9uZyBpbnQgX19xdWFkX3Q7CiMgNDggIi91c3IvbGliL2djYy1s aWIvYXJtLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9hcm0tbGludXgvaW5jbHVkZS9iaXRzL3R5 cGVzLmgiIDMKCnR5cGVkZWYgc2lnbmVkIGNoYXIgX19pbnQ4X3Q7CnR5cGVkZWYgdW5zaWduZWQg Y2hhciBfX3VpbnQ4X3Q7CnR5cGVkZWYgc2lnbmVkIHNob3J0IGludCBfX2ludDE2X3Q7CnR5cGVk ZWYgdW5zaWduZWQgc2hvcnQgaW50IF9fdWludDE2X3Q7CnR5cGVkZWYgc2lnbmVkIGludCBfX2lu dDMyX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdWludDMyX3Q7CgpfX2V4dGVuc2lvbl9fIHR5 cGVkZWYgc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19pbnQ2NF90OwpfX2V4dGVuc2lvbl9fIHR5cGVk ZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3VpbnQ2NF90OwoKdHlwZWRlZiBfX3F1YWRfdCAq X19xYWRkcl90OwoKdHlwZWRlZiBfX3VfcXVhZF90IF9fZGV2X3Q7CQkgCnR5cGVkZWYgX191X2lu dCBfX3VpZF90OwkJIAp0eXBlZGVmIF9fdV9pbnQgX19naWRfdDsJCSAKdHlwZWRlZiBfX3VfbG9u ZyBfX2lub190OwkJIAp0eXBlZGVmIF9fdV9pbnQgX19tb2RlX3Q7CQkgCnR5cGVkZWYgX191X2lu dCBfX25saW5rX3Q7IAkJIAp0eXBlZGVmIGxvbmcgaW50IF9fb2ZmX3Q7CQkgCnR5cGVkZWYgX19x dWFkX3QgX19sb2ZmX3Q7CQkgCnR5cGVkZWYgaW50IF9fcGlkX3Q7CQkJIAp0eXBlZGVmIGludCBf X3NzaXplX3Q7CQkJIAp0eXBlZGVmIF9fdV9sb25nIF9fcmxpbV90OwkJIAp0eXBlZGVmIF9fdV9x dWFkX3QgX19ybGltNjRfdDsJCSAKdHlwZWRlZiBfX3VfaW50IF9faWRfdDsJCQkgCgp0eXBlZGVm IHN0cnVjdAogIHsKICAgIGludCBfX3ZhbFsyXTsKICB9IF9fZnNpZF90OwkJCQkgCgogCnR5cGVk ZWYgaW50IF9fZGFkZHJfdDsJCQkgCnR5cGVkZWYgY2hhciAqX19jYWRkcl90Owp0eXBlZGVmIGxv bmcgaW50IF9fdGltZV90Owp0eXBlZGVmIGxvbmcgaW50IF9fc3dibGtfdDsJCSAKDAp0eXBlZGVm IGxvbmcgaW50IF9fY2xvY2tfdDsKCiAKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBfX2ZkX21h c2s7CgogCgoKIAoKCgoKIAp0eXBlZGVmIHN0cnVjdAogIHsKICAgICAKCgogICAgX19mZF9tYXNr IGZkc19iaXRzWzEwMjQgIC8gKDggKiBzaXplb2YgKF9fZmRfbWFzaykpIF07CgoKCgoKICB9IF9f ZmRfc2V0OwoKCnR5cGVkZWYgaW50IF9fa2V5X3Q7CgogCnR5cGVkZWYgdW5zaWduZWQgc2hvcnQg aW50IF9faXBjX3BpZF90OwoKCiAKCiAKdHlwZWRlZiBsb25nIGludCBfX2Jsa2NudF90Owp0eXBl ZGVmIF9fcXVhZF90IF9fYmxrY250NjRfdDsKCiAKdHlwZWRlZiBfX3VfbG9uZyBfX2ZzYmxrY250 X3Q7CnR5cGVkZWYgX191X3F1YWRfdCBfX2ZzYmxrY250NjRfdDsKCiAKdHlwZWRlZiBfX3VfbG9u ZyBfX2ZzZmlsY250X3Q7CnR5cGVkZWYgX191X3F1YWRfdCBfX2ZzZmlsY250NjRfdDsKCiAKdHlw ZWRlZiBfX3VfbG9uZyBfX2lubzY0X3Q7CgogCnR5cGVkZWYgX19sb2ZmX3QgX19vZmY2NF90OwoK IAp0eXBlZGVmIGxvbmcgaW50IF9fdF9zY2FsYXJfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGlu dCBfX3RfdXNjYWxhcl90OwoKIAp0eXBlZGVmIGludCBfX2ludHB0cl90OwoKCiAKCiMgMSAiL3Vz ci9saWIvZ2NjLWxpYi9hcm0tbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2FybS1saW51eC9pbmNs dWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDEgMwogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCgoK CgoKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9hcm0tbGludXgvMi45NS4zLy4uLy4uLy4uLy4u L2FybS1saW51eC9pbmNsdWRlL2JpdHMvc2NoZWQuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoK CiMgNjIgIi91c3IvbGliL2djYy1saWIvYXJtLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9hcm0t bGludXgvaW5jbHVkZS9iaXRzL3NjaGVkLmgiIDMKCgoKCgogCnN0cnVjdCBfX3NjaGVkX3BhcmFt CiAgewogICAgaW50IHNjaGVkX3ByaW9yaXR5OwogIH07CgoKIyAyMyAiL3Vzci9saWIvZ2NjLWxp Yi9hcm0tbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2FybS1saW51eC9pbmNsdWRlL2JpdHMvcHRo cmVhZHR5cGVzLmgiIDIgMwoKCiAKc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrCnsKICBsb25nIGlu dCBfX3N0YXR1czsgICAgICAgICAgICAgCiAgaW50IF9fc3BpbmxvY2s7ICAgICAgICAgICAgICAg IAp9OwoKCiAKdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfZGVzY3Jfc3RydWN0ICpfcHRocmVhZF9k ZXNjcjsKCgoKCiAKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2RldGFjaHN0YXRlOwogIGludCBf X3NjaGVkcG9saWN5OwogIHN0cnVjdCBfX3NjaGVkX3BhcmFtIF9fc2NoZWRwYXJhbTsKICBpbnQg X19pbmhlcml0c2NoZWQ7CiAgaW50IF9fc2NvcGU7CiAgc2l6ZV90IF9fZ3VhcmRzaXplOwogIGlu dCBfX3N0YWNrYWRkcl9zZXQ7CiAgdm9pZCAqX19zdGFja2FkZHI7CiAgc2l6ZV90IF9fc3RhY2tz aXplOwp9IHB0aHJlYWRfYXR0cl90OwoKCiAKdHlwZWRlZiBzdHJ1Y3QKewogIHN0cnVjdCBfcHRo cmVhZF9mYXN0bG9jayBfX2NfbG9jazsgIAogIF9wdGhyZWFkX2Rlc2NyIF9fY193YWl0aW5nOyAg ICAgICAgIAp9IHB0aHJlYWRfY29uZF90OwoKCiAKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2R1 bW15Owp9IHB0aHJlYWRfY29uZGF0dHJfdDsKCiAKdHlwZWRlZiB1bnNpZ25lZCBpbnQgcHRocmVh ZF9rZXlfdDsKCgogCiAKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19tX3Jlc2VydmVkOyAgICAg ICAgICAgICAgICAKICBpbnQgX19tX2NvdW50OyAgICAgICAgICAgICAgICAgICAKICBfcHRocmVh ZF9kZXNjciBfX21fb3duZXI7ICAgICAgICAKICBpbnQgX19tX2tpbmQ7ICAgICAgICAgICAgICAg ICAgICAKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19tX2xvY2s7ICAKfSBwdGhyZWFkX211 dGV4X3Q7CgoKIAp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbXV0ZXhraW5kOwp9IHB0aHJlYWRf bXV0ZXhhdHRyX3Q7CgoKIAp0eXBlZGVmIGludCBwdGhyZWFkX29uY2VfdDsKCgoKIAp0eXBlZGVm IHN0cnVjdCBfcHRocmVhZF9yd2xvY2tfdAp7CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9f cndfbG9jazsgIAogIGludCBfX3J3X3JlYWRlcnM7ICAgICAgICAgICAgICAgICAgICAKICBfcHRo cmVhZF9kZXNjciBfX3J3X3dyaXRlcjsgICAgICAgICAgCiAgX3B0aHJlYWRfZGVzY3IgX19yd19y ZWFkX3dhaXRpbmc7ICAgIAogIF9wdGhyZWFkX2Rlc2NyIF9fcndfd3JpdGVfd2FpdGluZzsgICAK ICBpbnQgX19yd19raW5kOyAgICAgICAgICAgICAgICAgICAgICAgCiAgaW50IF9fcndfcHNoYXJl ZDsgICAgICAgICAgICAgICAgICAgIAp9IHB0aHJlYWRfcndsb2NrX3Q7CgoKIAp0eXBlZGVmIHN0 cnVjdAp7CiAgaW50IF9fbG9ja2tpbmQ7CiAgaW50IF9fcHNoYXJlZDsKfSBwdGhyZWFkX3J3bG9j a2F0dHJfdDsKCgoKIAp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHB0aHJlYWRfdDsKCgojIDE1 MCAiL3Vzci9saWIvZ2NjLWxpYi9hcm0tbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2FybS1saW51 eC9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMiAzCgoKCgojIDMwICIvdXNyL2xpYi9nY2MtbGliL2Fy bS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vYXJtLWxpbnV4L2luY2x1ZGUvc3lzL3R5cGVzLmgi IDIgMwoKCgp0eXBlZGVmIF9fdV9jaGFyIHVfY2hhcjsKdHlwZWRlZiBfX3Vfc2hvcnQgdV9zaG9y dDsKdHlwZWRlZiBfX3VfaW50IHVfaW50Owp0eXBlZGVmIF9fdV9sb25nIHVfbG9uZzsKdHlwZWRl ZiBfX3F1YWRfdCBxdWFkX3Q7CnR5cGVkZWYgX191X3F1YWRfdCB1X3F1YWRfdDsKdHlwZWRlZiBf X2ZzaWRfdCBmc2lkX3Q7CgoKdHlwZWRlZiBfX2xvZmZfdCBsb2ZmX3Q7CgoKCnR5cGVkZWYgX19p bm9fdCBpbm9fdDsKCgoKCgoKdHlwZWRlZiBfX2lubzY0X3QgaW5vNjRfdDsKCgoKCnR5cGVkZWYg X19kZXZfdCBkZXZfdDsKCgoKCnR5cGVkZWYgX19naWRfdCBnaWRfdDsKCgoKCnR5cGVkZWYgX19t b2RlX3QgbW9kZV90OwoKCgoKdHlwZWRlZiBfX25saW5rX3QgbmxpbmtfdDsKCgoKCnR5cGVkZWYg X191aWRfdCB1aWRfdDsKCgoKCgp0eXBlZGVmIF9fb2ZmX3Qgb2ZmX3Q7CgoKCgoKCnR5cGVkZWYg X19vZmY2NF90IG9mZjY0X3Q7CgoKCgp0eXBlZGVmIF9fcGlkX3QgcGlkX3Q7CgoKCgp0eXBlZGVm IF9faWRfdCBpZF90OwoKCgp0eXBlZGVmIF9fc3NpemVfdCBzc2l6ZV90OwoKCgoKdHlwZWRlZiBf X2RhZGRyX3QgZGFkZHJfdDsKdHlwZWRlZiBfX2NhZGRyX3QgY2FkZHJfdDsKCgoKdHlwZWRlZiBf X2tleV90IGtleV90OwoKCgoKCgojIDEgIi91c3IvbGliL2djYy1saWIvYXJtLWxpbnV4LzIuOTUu My8uLi8uLi8uLi8uLi9hcm0tbGludXgvaW5jbHVkZS90aW1lLmgiIDEgMwogCgoKCgoKCgoKCgoK CgoKCgoKIAoKCgoKCgoKCgoKCgoKCiMgNTEgIi91c3IvbGliL2djYy1saWIvYXJtLWxpbnV4LzIu OTUuMy8uLi8uLi8uLi8uLi9hcm0tbGludXgvaW5jbHVkZS90aW1lLmgiIDMKCgoKCgoKCgogCnR5 cGVkZWYgX19jbG9ja190IGNsb2NrX3Q7CgoKCgoKCgoKCiAKdHlwZWRlZiBfX3RpbWVfdCB0aW1l X3Q7CgoKCgoKIyA4OSAiL3Vzci9saWIvZ2NjLWxpYi9hcm0tbGludXgvMi45NS4zLy4uLy4uLy4u Ly4uL2FybS1saW51eC9pbmNsdWRlL3RpbWUuaCIgMwoKCgoKIyAyNzkgIi91c3IvbGliL2djYy1s aWIvYXJtLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9hcm0tbGludXgvaW5jbHVkZS90aW1lLmgi IDMKCgoKIyAxMjIgIi91c3IvbGliL2djYy1saWIvYXJtLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8u Li9hcm0tbGludXgvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKCiMgMSAiL3Vzci9saWIvZ2Nj LWxpYi9hcm0tbGludXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwoKCgoKCgogCgoKIyAx OSAiL3Vzci9saWIvZ2NjLWxpYi9hcm0tbGludXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMK CgoKIAoKCiAKCgoKCgogCgoKIyA2MSAiL3Vzci9saWIvZ2NjLWxpYi9hcm0tbGludXgvMi45NS4z L2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoK IAoKIAoKCiMgMTI2ICIvdXNyL2xpYi9nY2MtbGliL2FybS1saW51eC8yLjk1LjMvaW5jbHVkZS9z dGRkZWYuaCIgMwoKCiAKCgoKCiAKCiAKCgojIDE4OCAiL3Vzci9saWIvZ2NjLWxpYi9hcm0tbGlu dXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKCgogCgoKCgogCgoKIyAyNjkgIi91c3Iv bGliL2djYy1saWIvYXJtLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgoKCgoK CgoKCgoKCgogCgogCgojIDMxNyAiL3Vzci9saWIvZ2NjLWxpYi9hcm0tbGludXgvMi45NS4zL2lu Y2x1ZGUvc3RkZGVmLmgiIDMKCgoKCiAKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCiMgMTI1ICIvdXNy L2xpYi9nY2MtbGliL2FybS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vYXJtLWxpbnV4L2luY2x1 ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCgogCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgdWxvbmc7 CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IHVzaG9ydDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQg dWludDsKCgogCgojIDE1OSAiL3Vzci9saWIvZ2NjLWxpYi9hcm0tbGludXgvMi45NS4zLy4uLy4u Ly4uLy4uL2FybS1saW51eC9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCgoKIAoKCgoKCgoKdHlwZWRl ZiBpbnQgaW50OF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoICBfX1FJX18gKSkpIDsKdHlw ZWRlZiBpbnQgaW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKCAgX19ISV9fICkpKSA7 CnR5cGVkZWYgaW50IGludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fICggIF9fU0lfXyAp KSkgOwp0eXBlZGVmIGludCBpbnQ2NF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoICBfX0RJ X18gKSkpIDsKCgp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDhfdCBfX2F0dHJpYnV0ZV9fICgo X19tb2RlX18gKCAgX19RSV9fICkpKSA7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50MTZfdCBf X2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKCAgX19ISV9fICkpKSA7CnR5cGVkZWYgdW5zaWduZWQg aW50IHVfaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKCAgX19TSV9fICkpKSA7CnR5 cGVkZWYgdW5zaWduZWQgaW50IHVfaW50NjRfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKCAg X19ESV9fICkpKSA7Cgp0eXBlZGVmIGludCByZWdpc3Rlcl90IF9fYXR0cmlidXRlX18gKChfX21v ZGVfXyAoX193b3JkX18pKSk7CgoKIAoKCgoKCgogCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9hcm0t bGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2FybS1saW51eC9pbmNsdWRlL2VuZGlhbi5oIiAxIDMK IAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgogCiMgMSAiL3Vzci9saWIvZ2NjLWxp Yi9hcm0tbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2FybS1saW51eC9pbmNsdWRlL2JpdHMvZW5k aWFuLmgiIDEgMwogCgoKCgoKCgoKCgoKIyAzNSAiL3Vzci9saWIvZ2NjLWxpYi9hcm0tbGludXgv Mi45NS4zLy4uLy4uLy4uLy4uL2FybS1saW51eC9pbmNsdWRlL2VuZGlhbi5oIiAyIDMKCgogCgoK CgoKCgoKCgoKCgojIDE5MSAiL3Vzci9saWIvZ2NjLWxpYi9hcm0tbGludXgvMi45NS4zLy4uLy4u Ly4uLy4uL2FybS1saW51eC9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgogCiMgMSAiL3Vzci9s aWIvZ2NjLWxpYi9hcm0tbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2FybS1saW51eC9pbmNsdWRl L3N5cy9zZWxlY3QuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgogCgoKIAojIDEg Ii91c3IvbGliL2djYy1saWIvYXJtLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9hcm0tbGludXgv aW5jbHVkZS9iaXRzL3NlbGVjdC5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoK CgoKCgoKCiMgMzEgIi91c3IvbGliL2djYy1saWIvYXJtLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8u Li9hcm0tbGludXgvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCiAKIyAxICIvdXNyL2xpYi9n Y2MtbGliL2FybS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vYXJtLWxpbnV4L2luY2x1ZGUvYml0 cy9zaWdzZXQuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKdHlwZWRlZiBpbnQgX19zaWdf YXRvbWljX3Q7CgogCgoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICB1bnNpZ25lZCBsb25nIGludCBf X3ZhbFsoMTAyNCAvICg4ICogc2l6ZW9mICh1bnNpZ25lZCBsb25nIGludCkpKSBdOwogIH0gX19z aWdzZXRfdDsKCgoKCiAKCgoKCgojIDEyNSAiL3Vzci9saWIvZ2NjLWxpYi9hcm0tbGludXgvMi45 NS4zLy4uLy4uLy4uLy4uL2FybS1saW51eC9pbmNsdWRlL2JpdHMvc2lnc2V0LmgiIDMKCiMgMzQg Ii91c3IvbGliL2djYy1saWIvYXJtLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9hcm0tbGludXgv aW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCiAKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9hcm0t bGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2FybS1saW51eC9pbmNsdWRlL3RpbWUuaCIgMSAzCiAK CgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKIyA1MSAiL3Vzci9saWIvZ2NjLWxpYi9h cm0tbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2FybS1saW51eC9pbmNsdWRlL3RpbWUuaCIgMwoK CgojIDYyICIvdXNyL2xpYi9nY2MtbGliL2FybS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vYXJt LWxpbnV4L2luY2x1ZGUvdGltZS5oIiAzCgoKCiMgNzMgIi91c3IvbGliL2djYy1saWIvYXJtLWxp bnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9hcm0tbGludXgvaW5jbHVkZS90aW1lLmgiIDMKCgoKCgoK CgogCgpzdHJ1Y3QgdGltZXNwZWMKICB7CiAgICBsb25nIGludCB0dl9zZWM7CQkgCiAgICBsb25n IGludCB0dl9uc2VjOwkJIAogIH07CgoKCgoKIyAyNzkgIi91c3IvbGliL2djYy1saWIvYXJtLWxp bnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9hcm0tbGludXgvaW5jbHVkZS90aW1lLmgiIDMKCgoKIyAz OCAiL3Vzci9saWIvZ2NjLWxpYi9hcm0tbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2FybS1saW51 eC9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgoKIAoKIAoKCgpzdHJ1Y3QgdGltZXZhbDsKCnR5 cGVkZWYgX19mZF9tYXNrIGZkX21hc2s7CgogCnR5cGVkZWYgX19mZF9zZXQgZmRfc2V0OwoKIAoK CgogCgoKCgogCgoKCgoKCiAKCgoKCmV4dGVybiBpbnQgX19zZWxlY3QgIChpbnQgX19uZmRzLCBf X2ZkX3NldCAqX19yZWFkZmRzLAoJCQkgIF9fZmRfc2V0ICpfX3dyaXRlZmRzLCBfX2ZkX3NldCAq X19leGNlcHRmZHMsCgkJCSAgc3RydWN0IHRpbWV2YWwgKl9fdGltZW91dCkgICAgOwpleHRlcm4g aW50IHNlbGVjdCAgKGludCBfX25mZHMsIF9fZmRfc2V0ICpfX3JlYWRmZHMsCgkJCV9fZmRfc2V0 ICpfX3dyaXRlZmRzLCBfX2ZkX3NldCAqX19leGNlcHRmZHMsCgkJCXN0cnVjdCB0aW1ldmFsICpf X3RpbWVvdXQpICAgIDsKCgogCgogCgoKZXh0ZXJuIGludCBwc2VsZWN0ICAoaW50IF9fbmZkcywg X19mZF9zZXQgKl9fcmVhZGZkcywKCQkJIF9fZmRfc2V0ICpfX3dyaXRlZmRzLCBfX2ZkX3NldCAq X19leGNlcHRmZHMsCgkJCSBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fdGltZW91dCwKCQkJIGNv bnN0IF9fc2lnc2V0X3QgKl9fc2lnbWFzaykgICAgOwoKCiAKCgojIDE5NCAiL3Vzci9saWIvZ2Nj LWxpYi9hcm0tbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2FybS1saW51eC9pbmNsdWRlL3N5cy90 eXBlcy5oIiAyIDMKCgogCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9hcm0tbGludXgvMi45NS4zLy4u Ly4uLy4uLy4uL2FybS1saW51eC9pbmNsdWRlL3N5cy9zeXNtYWNyb3MuaCIgMSAzCiAKCgoKCgoK CgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCiMgNDcgIi91c3IvbGliL2djYy1saWIvYXJtLWxpbnV4 LzIuOTUuMy8uLi8uLi8uLi8uLi9hcm0tbGludXgvaW5jbHVkZS9zeXMvc3lzbWFjcm9zLmgiIDMK CgoKIyAxOTcgIi91c3IvbGliL2djYy1saWIvYXJtLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9h cm0tbGludXgvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKCgogCgp0eXBlZGVmIF9fYmxrY250 X3QgYmxrY250X3Q7CSAgCnR5cGVkZWYgX19mc2Jsa2NudF90IGZzYmxrY250X3Q7ICAKdHlwZWRl ZiBfX2ZzZmlsY250X3QgZnNmaWxjbnRfdDsgIAoKCgoKCgoKdHlwZWRlZiBfX2Jsa2NudDY0X3Qg YmxrY250NjRfdDsgICAgICAKdHlwZWRlZiBfX2ZzYmxrY250NjRfdCBmc2Jsa2NudDY0X3Q7ICAK dHlwZWRlZiBfX2ZzZmlsY250NjRfdCBmc2ZpbGNudDY0X3Q7ICAKCgogCgoKIyAzMzkgIi91c3Iv bGliL2djYy1saWIvYXJtLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9hcm0tbGludXgvaW5jbHVk ZS9zdGRsaWIuaCIgMiAzCgoKIAoKCgogCmV4dGVybiBpbnQzMl90IHJhbmRvbSAgKHZvaWQpICAg IDsKCiAKZXh0ZXJuIHZvaWQgc3JhbmRvbSAgKHVuc2lnbmVkIGludCBfX3NlZWQpICAgIDsKCiAK CgoKZXh0ZXJuIHZvaWQgKiAgaW5pdHN0YXRlICAodW5zaWduZWQgaW50IF9fc2VlZCwgdm9pZCAq ICBfX3N0YXRlYnVmLAoJCQkgICAgICAgc2l6ZV90IF9fc3RhdGVsZW4pICAgIDsKCiAKCmV4dGVy biB2b2lkICogIHNldHN0YXRlICAodm9pZCAqICBfX3N0YXRlYnVmKSAgICA7CgoKCiAKCgoKc3Ry dWN0IHJhbmRvbV9kYXRhCiAgewogICAgaW50MzJfdCAqZnB0cjsJCSAKICAgIGludDMyX3QgKnJw dHI7CQkgCiAgICBpbnQzMl90ICpzdGF0ZTsJCSAKICAgIGludCByYW5kX3R5cGU7CQkgCiAgICBp bnQgcmFuZF9kZWc7CQkgCiAgICBpbnQgcmFuZF9zZXA7CQkgCiAgICBpbnQzMl90ICplbmRfcHRy OwkJIAogIH07CgpleHRlcm4gaW50IHJhbmRvbV9yICAoc3RydWN0IHJhbmRvbV9kYXRhICpfX3Jl c3RyaWN0IF9fYnVmLAoJCQkgIGludDMyX3QgKl9fcmVzdHJpY3QgX19yZXN1bHQpICAgIDsKCmV4 dGVybiBpbnQgc3JhbmRvbV9yICAodW5zaWduZWQgaW50IF9fc2VlZCwgc3RydWN0IHJhbmRvbV9k YXRhICpfX2J1ZikgICAgOwoKZXh0ZXJuIGludCBpbml0c3RhdGVfciAgKHVuc2lnbmVkIGludCBf X3NlZWQsCgkJCSAgICAgdm9pZCAqICBfX3Jlc3RyaWN0IF9fc3RhdGVidWYsCgkJCSAgICAgc2l6 ZV90IF9fc3RhdGVsZW4sCgkJCSAgICAgc3RydWN0IHJhbmRvbV9kYXRhICpfX3Jlc3RyaWN0IF9f YnVmKSAgICA7CgpleHRlcm4gaW50IHNldHN0YXRlX3IgICh2b2lkICogIF9fcmVzdHJpY3QgX19z dGF0ZWJ1ZiwKCQkJICAgIHN0cnVjdCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1ZikgICAg OwoKCgoKIApleHRlcm4gaW50IHJhbmQgICh2b2lkKSAgICA7CiAKZXh0ZXJuIHZvaWQgc3JhbmQg ICh1bnNpZ25lZCBpbnQgX19zZWVkKSAgICA7CgoKIApleHRlcm4gaW50IHJhbmRfciAgKHVuc2ln bmVkIGludCAqX19zZWVkKSAgICA7CgoKCgogCgogCmV4dGVybiBkb3VibGUgZHJhbmQ0OCAgKHZv aWQpICAgIDsKZXh0ZXJuIGRvdWJsZSBlcmFuZDQ4ICAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1 YmlbM10pICAgIDsKCiAKZXh0ZXJuIGxvbmcgaW50IGxyYW5kNDggICh2b2lkKSAgICA7CmV4dGVy biBsb25nIGludCBucmFuZDQ4ICAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10pICAgIDsK CiAKZXh0ZXJuIGxvbmcgaW50IG1yYW5kNDggICh2b2lkKSAgICA7CmV4dGVybiBsb25nIGludCBq cmFuZDQ4ICAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10pICAgIDsKCiAKZXh0ZXJuIHZv aWQgc3JhbmQ0OCAgKGxvbmcgaW50IF9fc2VlZHZhbCkgICAgOwpleHRlcm4gdW5zaWduZWQgc2hv cnQgaW50ICpzZWVkNDggICh1bnNpZ25lZCBzaG9ydCBpbnQgX19zZWVkMTZ2WzNdKSAgICA7CmV4 dGVybiB2b2lkIGxjb25nNDggICh1bnNpZ25lZCBzaG9ydCBpbnQgX19wYXJhbVs3XSkgICAgOwoK IApzdHJ1Y3QgZHJhbmQ0OF9kYXRhCiAgewogICAgdW5zaWduZWQgc2hvcnQgaW50IHhbM107CSAK ICAgIHVuc2lnbmVkIHNob3J0IGludCBhWzNdOwkgCiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgYzsJ IAogICAgdW5zaWduZWQgc2hvcnQgaW50IG9sZF94WzNdOyAgCiAgICBpbnQgaW5pdDsJCQkgCiAg fTsKCgogCmV4dGVybiBpbnQgZHJhbmQ0OF9yICAoc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0 cmljdCBfX2J1ZmZlciwKCQkJICAgZG91YmxlICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSAgICA7CmV4 dGVybiBpbnQgZXJhbmQ0OF9yICAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10sCgkJCSAg IHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCgkJCSAgIGRvdWJsZSAq X19yZXN0cmljdCBfX3Jlc3VsdCkgICAgOwoKIApleHRlcm4gaW50IGxyYW5kNDhfciAgKHN0cnVj dCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCgkJCSAgIGxvbmcgaW50ICpfX3Jl c3RyaWN0IF9fcmVzdWx0KSAgICA7CmV4dGVybiBpbnQgbnJhbmQ0OF9yICAodW5zaWduZWQgc2hv cnQgaW50IF9feHN1YmlbM10sCgkJCSAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3Qg X19idWZmZXIsCgkJCSAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSAgICA7CgogCmV4 dGVybiBpbnQgbXJhbmQ0OF9yICAoc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1 ZmZlciwKCQkJICAgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpICAgIDsKZXh0ZXJuIGlu dCBqcmFuZDQ4X3IgICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwKCQkJICAgc3RydWN0 IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKCQkJICAgbG9uZyBpbnQgKl9fcmVz dHJpY3QgX19yZXN1bHQpICAgIDsKCiAKZXh0ZXJuIGludCBzcmFuZDQ4X3IgIChsb25nIGludCBf X3NlZWR2YWwsIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKSAgICA7CgpleHRlcm4gaW50 IHNlZWQ0OF9yICAodW5zaWduZWQgc2hvcnQgaW50IF9fc2VlZDE2dlszXSwKCQkJICBzdHJ1Y3Qg ZHJhbmQ0OF9kYXRhICpfX2J1ZmZlcikgICAgOwoKZXh0ZXJuIGludCBsY29uZzQ4X3IgICh1bnNp Z25lZCBzaG9ydCBpbnQgX19wYXJhbVs3XSwKCQkJICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19i dWZmZXIpICAgIDsKCgoKCgoKCgoKCgoKCgogCgpleHRlcm4gdm9pZCAqICByZWFsbG9jICAodm9p ZCAqICBfX3B0ciwgc2l6ZV90IF9fc2l6ZSkgICAgOwogCmV4dGVybiB2b2lkIGZyZWUgICh2b2lk ICogIF9fcHRyKSAgICA7CgoKIApleHRlcm4gdm9pZCBjZnJlZSAgKHZvaWQgKiAgX19wdHIpICAg IDsKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2FybS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4v YXJtLWxpbnV4L2luY2x1ZGUvYWxsb2NhLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK IyAxICIvdXNyL2xpYi9nY2MtbGliL2FybS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIg MSAzCgoKCgoKCiAKCgojIDE5ICIvdXNyL2xpYi9nY2MtbGliL2FybS1saW51eC8yLjk1LjMvaW5j bHVkZS9zdGRkZWYuaCIgMwoKCgogCgoKIAoKCgoKCiAKCgojIDYxICIvdXNyL2xpYi9nY2MtbGli L2FybS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCgoKCgogCgoKCgoKCgoK CgoKCgoKCgoKCiAKCgoKCgogCgogCgoKIyAxMjYgIi91c3IvbGliL2djYy1saWIvYXJtLWxpbnV4 LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKCgoKIAoKIAoKCiMgMTg4ICIvdXNyL2xp Yi9nY2MtbGliL2FybS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKCiAKCgoK CiAKCgojIDI2OSAiL3Vzci9saWIvZ2NjLWxpYi9hcm0tbGludXgvMi45NS4zL2luY2x1ZGUvc3Rk ZGVmLmgiIDMKCgoKCgoKCgoKCgoKCgoKCiAKCiAKCiMgMzE3ICIvdXNyL2xpYi9nY2MtbGliL2Fy bS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKIAoKCgoKCgoKCgoKCgoKIAoK CgoKCgoKIyAyNSAiL3Vzci9saWIvZ2NjLWxpYi9hcm0tbGludXgvMi45NS4zLy4uLy4uLy4uLy4u L2FybS1saW51eC9pbmNsdWRlL2FsbG9jYS5oIiAyIDMKCgogCgogCgoKIApleHRlcm4gdm9pZCAq ICBhbGxvY2EgIChzaXplX3QgX19zaXplKSAgICA7CgoKCgoKIAoKCiMgNDkyICIvdXNyL2xpYi9n Y2MtbGliL2FybS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vYXJtLWxpbnV4L2luY2x1ZGUvc3Rk bGliLmgiIDIgMwoKCgoKIApleHRlcm4gdm9pZCAqICB2YWxsb2MgIChzaXplX3QgX19zaXplKSAg ICA7CgoKCiAKZXh0ZXJuIHZvaWQgYWJvcnQgICh2b2lkKSAgICAgX19hdHRyaWJ1dGVfXyAoKF9f bm9yZXR1cm5fXykpOwoKCiAKZXh0ZXJuIGludCBhdGV4aXQgICh2b2lkICgqX19mdW5jKSAodm9p ZCkpICAgIDsKCgogCgpleHRlcm4gaW50IF9fb25fZXhpdCAgKHZvaWQgKCpfX2Z1bmMpIChpbnQg X19zdGF0dXMsIHZvaWQgKiAgX19hcmcpLAoJCQkgICB2b2lkICogIF9fYXJnKSAgICA7CmV4dGVy biBpbnQgb25fZXhpdCAgKHZvaWQgKCpfX2Z1bmMpIChpbnQgX19zdGF0dXMsIHZvaWQgKiAgX19h cmcpLAoJCQkgdm9pZCAqICBfX2FyZykgICAgOwoKCiAKCgpleHRlcm4gdm9pZCBleGl0ICAoaW50 IF9fc3RhdHVzKSAgICAgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCiAKCmV4dGVy biB2b2lkIF9FeGl0ICAoaW50IF9fc3RhdHVzKSAgICAgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1 cm5fXykpOwoKCgogCmV4dGVybiBjaGFyICpnZXRlbnYgIChfX2NvbnN0IGNoYXIgKl9fbmFtZSkg ICAgOwoKIAoKZXh0ZXJuIGNoYXIgKl9fc2VjdXJlX2dldGVudiAgKF9fY29uc3QgY2hhciAqX19u YW1lKSAgICA7CgoKIAogCgpleHRlcm4gaW50IHB1dGVudiAgKGNoYXIgKl9fc3RyaW5nKSAgICA7 CgoKCiAKCmV4dGVybiBpbnQgc2V0ZW52ICAoX19jb25zdCBjaGFyICpfX25hbWUsIF9fY29uc3Qg Y2hhciAqX192YWx1ZSwKCQkJaW50IF9fcmVwbGFjZSkgICAgOwoKIApleHRlcm4gdm9pZCB1bnNl dGVudiAgKF9fY29uc3QgY2hhciAqX19uYW1lKSAgICA7CgoKCiAKCgpleHRlcm4gaW50IGNsZWFy ZW52ICAodm9pZCkgICAgOwoKCgoKIAoKCgpleHRlcm4gY2hhciAqbWt0ZW1wICAoY2hhciAqX190 ZW1wbGF0ZSkgICAgOwoKIAoKCgoKZXh0ZXJuIGludCBta3N0ZW1wICAoY2hhciAqX190ZW1wbGF0 ZSkgICAgOwoKCgogCmV4dGVybiBpbnQgc3lzdGVtICAoX19jb25zdCBjaGFyICpfX2NvbW1hbmQp ICAgIDsKCgoKIAoKCmV4dGVybiBjaGFyICpjYW5vbmljYWxpemVfZmlsZV9uYW1lICAoX19jb25z dCBjaGFyICpfX25hbWUpICAgIDsKCgoKIAoKCgoKCmV4dGVybiBjaGFyICpyZWFscGF0aCAgKF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX25hbWUsCgkJCSAgICBjaGFyICpfX3Jlc3RyaWN0IF9f cmVzb2x2ZWQpICAgIDsKCgoKIAoKCnR5cGVkZWYgaW50ICgqX19jb21wYXJfZm5fdCkgIChfX2Nv bnN0IHZvaWQgKiAsIF9fY29uc3Qgdm9pZCAqICkgIDsKCgp0eXBlZGVmIF9fY29tcGFyX2ZuX3Qg Y29tcGFyaXNvbl9mbl90OwoKCgogCgpleHRlcm4gdm9pZCAqICBic2VhcmNoICAoX19jb25zdCB2 b2lkICogIF9fa2V5LCBfX2NvbnN0IHZvaWQgKiAgX19iYXNlLAoJCQkgICAgICAgc2l6ZV90IF9f bm1lbWIsIHNpemVfdCBfX3NpemUsCgkJCSAgICAgICBfX2NvbXBhcl9mbl90IF9fY29tcGFyKSAg OwoKIAoKZXh0ZXJuIHZvaWQgcXNvcnQgICh2b2lkICogIF9fYmFzZSwgc2l6ZV90IF9fbm1lbWIs IHNpemVfdCBfX3NpemUsCgkJCSAgX19jb21wYXJfZm5fdCBfX2NvbXBhcikgIDsKCgogCmV4dGVy biBpbnQgYWJzICAoaW50IF9feCkgICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKZXh0 ZXJuIGxvbmcgaW50IGxhYnMgIChsb25nIGludCBfX3gpICAgICBfX2F0dHJpYnV0ZV9fICgoX19j b25zdF9fKSk7CgpfX2V4dGVuc2lvbl9fIGV4dGVybiBsb25nIGxvbmcgaW50IGxsYWJzICAobG9u ZyBsb25nIGludCBfX3gpICAgIAogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoK IAoKIApleHRlcm4gZGl2X3QgZGl2ICAoaW50IF9fbnVtZXIsIGludCBfX2Rlbm9tKSAgICAgX19h dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwpleHRlcm4gbGRpdl90IGxkaXYgIChsb25nIGludCBf X251bWVyLCBsb25nIGludCBfX2Rlbm9tKSAgICAKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25z dF9fKSk7CgpfX2V4dGVuc2lvbl9fIGV4dGVybiBsbGRpdl90IGxsZGl2ICAobG9uZyBsb25nIGlu dCBfX251bWVyLAoJCQkJCSBsb25nIGxvbmcgaW50IF9fZGVub20pICAgIAogICAgIF9fYXR0cmli dXRlX18gKChfX2NvbnN0X18pKTsKCgoKCiAKCgogCgoKZXh0ZXJuIGNoYXIgKmVjdnQgIChkb3Vi bGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKCQkJaW50 ICpfX3Jlc3RyaWN0IF9fc2lnbikgICAgOwoKIAoKCmV4dGVybiBjaGFyICpmY3Z0ICAoZG91Ymxl IF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCgkJCWludCAq X19yZXN0cmljdCBfX3NpZ24pICAgIDsKCiAKCgpleHRlcm4gY2hhciAqZ2N2dCAgKGRvdWJsZSBf X3ZhbHVlLCBpbnQgX19uZGlnaXQsIGNoYXIgKl9fYnVmKSAgICA7CgogCmV4dGVybiBjaGFyICpx ZWN2dCAgKGxvbmcgZG91YmxlICBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCgkJCSBpbnQgKl9fcmVz dHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgICAgOwpleHRlcm4gY2hhciAq cWZjdnQgIChsb25nIGRvdWJsZSAgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAoJCQkgaW50ICpfX3Jl c3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24pICAgIDsKZXh0ZXJuIGNoYXIg KnFnY3Z0ICAobG9uZyBkb3VibGUgIF9fdmFsdWUsIGludCBfX25kaWdpdCwgY2hhciAqX19idWYp ICAgIDsKCgoKIAoKZXh0ZXJuIGludCBlY3Z0X3IgIChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRp Z2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKCQkJaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwg Y2hhciAqX19yZXN0cmljdCBfX2J1ZiwKCQkJc2l6ZV90IF9fbGVuKSAgICA7CmV4dGVybiBpbnQg ZmN2dF9yICAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9f ZGVjcHQsCgkJCWludCAqX19yZXN0cmljdCBfX3NpZ24sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYs CgkJCXNpemVfdCBfX2xlbikgICAgOwoKZXh0ZXJuIGludCBxZWN2dF9yICAobG9uZyBkb3VibGUg IF9fdmFsdWUsIGludCBfX25kaWdpdCwKCQkJIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQg Kl9fcmVzdHJpY3QgX19zaWduLAoJCQkgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9f bGVuKSAgICA7CmV4dGVybiBpbnQgcWZjdnRfciAgKGxvbmcgZG91YmxlICBfX3ZhbHVlLCBpbnQg X19uZGlnaXQsCgkJCSBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9f c2lnbiwKCQkJIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2xlbikgICAgOwoKCgoK IAoKZXh0ZXJuIGludCBtYmxlbiAgKF9fY29uc3QgY2hhciAqX19zLCBzaXplX3QgX19uKSAgICA7 CiAKCmV4dGVybiBpbnQgbWJ0b3djICAod2NoYXJfdCAqX19yZXN0cmljdCBfX3B3YywKCQkJX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbikgICAgOwogCgpleHRlcm4gaW50 IHdjdG9tYiAgKGNoYXIgKl9fcywgd2NoYXJfdCBfX3djaGFyKSAgICA7CgoKIApleHRlcm4gc2l6 ZV90IG1ic3Rvd2NzICAod2NoYXJfdCAqX19yZXN0cmljdCAgX19wd2NzLAoJCQkgICAgIF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24pICAgIDsKIApleHRlcm4gc2l6ZV90 IHdjc3RvbWJzICAoY2hhciAqX19yZXN0cmljdCBfX3MsCgkJCSAgICAgX19jb25zdCB3Y2hhcl90 ICpfX3Jlc3RyaWN0IF9fcHdjcywgc2l6ZV90IF9fbikgICAgOwoKCgogCgoKCmV4dGVybiBpbnQg cnBtYXRjaCAgKF9fY29uc3QgY2hhciAqX19yZXNwb25zZSkgICAgOwoKCgoKIAoKCgoKCmV4dGVy biBpbnQgZ2V0c3Vib3B0ICAoY2hhciAqKl9fcmVzdHJpY3QgX19vcHRpb25wLAoJCQkgICBfX2Nv bnN0IGNoYXIgKl9fY29uc3QgKl9fcmVzdHJpY3QgX190b2tlbnMsCgkJCSAgIGNoYXIgKipfX3Jl c3RyaWN0IF9fdmFsdWVwKSAgICA7CgoKCgoKIApleHRlcm4gdm9pZCBzZXRrZXkgIChfX2NvbnN0 IGNoYXIgKl9fa2V5KSAgICA7CgogCgogCgoKIApleHRlcm4gaW50IGdyYW50cHQgIChpbnQgX19m ZCkgICAgOwoKIAoKZXh0ZXJuIGludCB1bmxvY2twdCAgKGludCBfX2ZkKSAgICA7CgogCgoKZXh0 ZXJuIGNoYXIgKnB0c25hbWUgIChpbnQgX19mZCkgICAgOwoKCgogCgoKZXh0ZXJuIGludCBwdHNu YW1lX3IgIChpbnQgX19mZCwgY2hhciAqX19idWYsIHNpemVfdCBfX2J1ZmxlbikgICAgOwoKIApl eHRlcm4gaW50IGdldHB0ICAodm9pZCkgICAgOwoKCgoKCiAKCgojIDE1NyAiLi4vLi4vaW5jbHVk ZS9taXNjLmgiIDIKCgoKCgoKCiAKCiAKCgoKCgoKCgoKIAojIDEgIi91c3IvbGliL2djYy1saWIv YXJtLWxpbnV4LzIuOTUuMy9pbmNsdWRlL2xpbWl0cy5oIiAxIDMKCgoKIAoKCgogCgoKCiAKCgoK CiAKCgoKCgogCgoKCiAKCgoKCgoKCgoKCgoKIAoKIAoKCgoKIAoKCgogCgoKCgoKCgoKIAoKCgog CgoKCgoKCgoKCgoKCgogCgoKCgogCgoKCgoKCgoKIAoKCgoKCgojIDE3NyAiLi4vLi4vaW5jbHVk ZS9taXNjLmgiIDIKCgoKIAoKCgoKCgoKCgojIDEgIi91c3IvbGliL2djYy1saWIvYXJtLWxpbnV4 LzIuOTUuMy8uLi8uLi8uLi8uLi9hcm0tbGludXgvaW5jbHVkZS9tYXRoLmgiIDEgMwogCgoKCgoK CgoKCgoKCgoKCgoKCiAKCgoKCgoKCgogCgogCgojIDEgIi91c3IvbGliL2djYy1saWIvYXJtLWxp bnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9hcm0tbGludXgvaW5jbHVkZS9iaXRzL2h1Z2VfdmFsLmgi IDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCiMgNTMgIi91c3IvbGli L2djYy1saWIvYXJtLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9hcm0tbGludXgvaW5jbHVkZS9i aXRzL2h1Z2VfdmFsLmgiIDMKCgoKIAoKCgoKCgoKCgoKIyA4MSAiL3Vzci9saWIvZ2NjLWxpYi9h cm0tbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2FybS1saW51eC9pbmNsdWRlL2JpdHMvaHVnZV92 YWwuaCIgMwoKCgogCgoKCgojIDMzICIvdXNyL2xpYi9nY2MtbGliL2FybS1saW51eC8yLjk1LjMv Li4vLi4vLi4vLi4vYXJtLWxpbnV4L2luY2x1ZGUvbWF0aC5oIiAyIDMKCgogCgojIDEgIi91c3Iv bGliL2djYy1saWIvYXJtLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9hcm0tbGludXgvaW5jbHVk ZS9iaXRzL25hbi5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgojIDQ4 ICIvdXNyL2xpYi9nY2MtbGliL2FybS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vYXJtLWxpbnV4 L2luY2x1ZGUvYml0cy9uYW4uaCIgMwoKIyAzNyAiL3Vzci9saWIvZ2NjLWxpYi9hcm0tbGludXgv Mi45NS4zLy4uLy4uLy4uLy4uL2FybS1saW51eC9pbmNsdWRlL21hdGguaCIgMiAzCgoKIAojIDEg Ii91c3IvbGliL2djYy1saWIvYXJtLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9hcm0tbGludXgv aW5jbHVkZS9iaXRzL21hdGhkZWYuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAp0 eXBlZGVmIGZsb2F0IGZsb2F0X3Q7CQkgCgp0eXBlZGVmIGRvdWJsZSBkb3VibGVfdDsJIAoKCiAK CgogCgoKCiAKCgoKIAoKCgoKCiAKCiAKCgoKIyA0MCAiL3Vzci9saWIvZ2NjLWxpYi9hcm0tbGlu dXgvMi45NS4zLy4uLy4uLy4uLy4uL2FybS1saW51eC9pbmNsdWRlL21hdGguaCIgMiAzCgoKCiAK CgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9hcm0tbGludXgvMi45NS4z Ly4uLy4uLy4uLy4uL2FybS1saW51eC9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDEgMwogCgoK CgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKIApleHRl cm4gICBkb3VibGUgICAgICAgICAgYWNvcyAgICAgICAgICAoZG91YmxlICBfX3gpICAgIDsgZXh0 ZXJuICAgZG91YmxlICAgICAgICAgX19hY29zICAgICAgICAgIChkb3VibGUgIF9feCkgICAgICA7 CiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAgIGFzaW4gICAgICAgICAgKGRvdWJsZSAgX194KSAg ICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fYXNpbiAgICAgICAgICAoZG91YmxlICBfX3gp ICAgICAgOwogCmV4dGVybiAgIGRvdWJsZSAgICAgICAgICBhdGFuICAgICAgICAgIChkb3VibGUg IF9feCkgICAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX2F0YW4gICAgICAgICAgKGRvdWJs ZSAgX194KSAgICAgIDsKIApleHRlcm4gICBkb3VibGUgICAgICAgICAgYXRhbjIgICAgICAgICAg KGRvdWJsZSAgX195LCBkb3VibGUgIF9feCkgICAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBf X2F0YW4yICAgICAgICAgIChkb3VibGUgIF9feSwgZG91YmxlICBfX3gpICAgICAgOwoKIApleHRl cm4gICBkb3VibGUgICAgICAgICAgY29zICAgICAgICAgIChkb3VibGUgIF9feCkgICAgOyBleHRl cm4gICBkb3VibGUgICAgICAgICBfX2NvcyAgICAgICAgICAoZG91YmxlICBfX3gpICAgICAgOwog CmV4dGVybiAgIGRvdWJsZSAgICAgICAgICBzaW4gICAgICAgICAgKGRvdWJsZSAgX194KSAgICA7 IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fc2luICAgICAgICAgIChkb3VibGUgIF9feCkgICAg ICA7CiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAgIHRhbiAgICAgICAgICAoZG91YmxlICBfX3gp ICAgIDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX190YW4gICAgICAgICAgKGRvdWJsZSAgX194 KSAgICAgIDsKCgogCmV4dGVybiAgIHZvaWQgICAgICAgIHNpbmNvcyAgICAgICAKCSAgICAoZG91 YmxlICBfX3gsIGRvdWJsZSAgKl9fc2lueCwgZG91YmxlICAqX19jb3N4KSAgIDsgZXh0ZXJuICAg dm9pZCAgICAgICAgX19zaW5jb3MgICAgICAgIAkgICAgKGRvdWJsZSAgX194LCBkb3VibGUgICpf X3NpbngsIGRvdWJsZSAgKl9fY29zeCkgICAgOwoKCiAKCiAKZXh0ZXJuICAgZG91YmxlICAgICAg ICAgIGNvc2ggICAgICAgICAgKGRvdWJsZSAgX194KSAgICA7IGV4dGVybiAgIGRvdWJsZSAgICAg ICAgIF9fY29zaCAgICAgICAgICAoZG91YmxlICBfX3gpICAgICAgOwogCmV4dGVybiAgIGRvdWJs ZSAgICAgICAgICBzaW5oICAgICAgICAgIChkb3VibGUgIF9feCkgICAgOyBleHRlcm4gICBkb3Vi bGUgICAgICAgICBfX3NpbmggICAgICAgICAgKGRvdWJsZSAgX194KSAgICAgIDsKIApleHRlcm4g ICBkb3VibGUgICAgICAgICAgdGFuaCAgICAgICAgICAoZG91YmxlICBfX3gpICAgIDsgZXh0ZXJu ICAgZG91YmxlICAgICAgICAgX190YW5oICAgICAgICAgIChkb3VibGUgIF9feCkgICAgICA7CgoK IApleHRlcm4gICBkb3VibGUgICAgICAgICAgYWNvc2ggICAgICAgICAgKGRvdWJsZSAgX194KSAg ICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fYWNvc2ggICAgICAgICAgKGRvdWJsZSAgX194 KSAgICAgIDsKIApleHRlcm4gICBkb3VibGUgICAgICAgICAgYXNpbmggICAgICAgICAgKGRvdWJs ZSAgX194KSAgICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fYXNpbmggICAgICAgICAgKGRv dWJsZSAgX194KSAgICAgIDsKIApleHRlcm4gICBkb3VibGUgICAgICAgICAgYXRhbmggICAgICAg ICAgKGRvdWJsZSAgX194KSAgICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fYXRhbmggICAg ICAgICAgKGRvdWJsZSAgX194KSAgICAgIDsKCgogCgogCmV4dGVybiAgIGRvdWJsZSAgICAgICAg ICBleHAgICAgICAgICAgKGRvdWJsZSAgX194KSAgICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAg IF9fZXhwICAgICAgICAgIChkb3VibGUgIF9feCkgICAgICA7CgoKIApleHRlcm4gICBkb3VibGUg ICAgICAgICAgZXhwMTAgICAgICAgICAgKGRvdWJsZSAgX194KSAgICA7IGV4dGVybiAgIGRvdWJs ZSAgICAgICAgIF9fZXhwMTAgICAgICAgICAgKGRvdWJsZSAgX194KSAgICAgIDsKIApleHRlcm4g ICBkb3VibGUgICAgICAgICAgcG93MTAgICAgICAgICAgKGRvdWJsZSAgX194KSAgICA7IGV4dGVy biAgIGRvdWJsZSAgICAgICAgIF9fcG93MTAgICAgICAgICAgKGRvdWJsZSAgX194KSAgICAgIDsK CgogCmV4dGVybiAgIGRvdWJsZSAgICAgICAgICBmcmV4cCAgICAgICAgICAoZG91YmxlICBfX3gs IGludCAqX19leHBvbmVudCkgICAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX2ZyZXhwICAg ICAgICAgIChkb3VibGUgIF9feCwgaW50ICpfX2V4cG9uZW50KSAgICAgIDsKCiAKZXh0ZXJuICAg ZG91YmxlICAgICAgICAgIGxkZXhwICAgICAgICAgIChkb3VibGUgIF9feCwgaW50IF9fZXhwb25l bnQpICAgIDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19sZGV4cCAgICAgICAgICAoZG91Ymxl ICBfX3gsIGludCBfX2V4cG9uZW50KSAgICAgIDsKCiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAg IGxvZyAgICAgICAgICAoZG91YmxlICBfX3gpICAgIDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAg X19sb2cgICAgICAgICAgKGRvdWJsZSAgX194KSAgICAgIDsKCiAKZXh0ZXJuICAgZG91YmxlICAg ICAgICAgIGxvZzEwICAgICAgICAgIChkb3VibGUgIF9feCkgICAgOyBleHRlcm4gICBkb3VibGUg ICAgICAgICBfX2xvZzEwICAgICAgICAgIChkb3VibGUgIF9feCkgICAgICA7CgogCmV4dGVybiAg IGRvdWJsZSAgICAgICAgICBtb2RmICAgICAgICAgIChkb3VibGUgIF9feCwgZG91YmxlICAqX19p cHRyKSAgICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fbW9kZiAgICAgICAgICAoZG91Ymxl ICBfX3gsIGRvdWJsZSAgKl9faXB0cikgICAgICA7CgoKIApleHRlcm4gICBkb3VibGUgICAgICAg ICAgZXhwbTEgICAgICAgICAgKGRvdWJsZSAgX194KSAgICA7IGV4dGVybiAgIGRvdWJsZSAgICAg ICAgIF9fZXhwbTEgICAgICAgICAgKGRvdWJsZSAgX194KSAgICAgIDsKCiAKZXh0ZXJuICAgZG91 YmxlICAgICAgICAgIGxvZzFwICAgICAgICAgIChkb3VibGUgIF9feCkgICAgOyBleHRlcm4gICBk b3VibGUgICAgICAgICBfX2xvZzFwICAgICAgICAgIChkb3VibGUgIF9feCkgICAgICA7CgogCmV4 dGVybiAgIGRvdWJsZSAgICAgICAgICBsb2diICAgICAgICAgIChkb3VibGUgIF9feCkgICAgOyBl eHRlcm4gICBkb3VibGUgICAgICAgICBfX2xvZ2IgICAgICAgICAgKGRvdWJsZSAgX194KSAgICAg IDsKCgoKIApleHRlcm4gICBkb3VibGUgICAgICAgICAgZXhwMiAgICAgICAgICAoZG91YmxlICBf X3gpICAgIDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19leHAyICAgICAgICAgIChkb3VibGUg IF9feCkgICAgICA7CgogCmV4dGVybiAgIGRvdWJsZSAgICAgICAgICBsb2cyICAgICAgICAgIChk b3VibGUgIF9feCkgICAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX2xvZzIgICAgICAgICAg KGRvdWJsZSAgX194KSAgICAgIDsKCgoKIAoKIApleHRlcm4gICBkb3VibGUgICAgICAgICAgcG93 ICAgICAgICAgIChkb3VibGUgIF9feCwgZG91YmxlICBfX3kpICAgIDsgZXh0ZXJuICAgZG91Ymxl ICAgICAgICAgX19wb3cgICAgICAgICAgKGRvdWJsZSAgX194LCBkb3VibGUgIF9feSkgICAgICA7 CgogCmV4dGVybiAgIGRvdWJsZSAgICAgICAgICBzcXJ0ICAgICAgICAgIChkb3VibGUgIF9feCkg ICAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX3NxcnQgICAgICAgICAgKGRvdWJsZSAgX194 KSAgICAgIDsKCgogCmV4dGVybiAgIGRvdWJsZSAgICAgICAgICBoeXBvdCAgICAgICAgICAoZG91 YmxlICBfX3gsIGRvdWJsZSAgX195KSAgICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9faHlw b3QgICAgICAgICAgKGRvdWJsZSAgX194LCBkb3VibGUgIF9feSkgICAgICA7CgoKCiAKZXh0ZXJu ICAgZG91YmxlICAgICAgICAgIGNicnQgICAgICAgICAgKGRvdWJsZSAgX194KSAgICA7IGV4dGVy biAgIGRvdWJsZSAgICAgICAgIF9fY2JydCAgICAgICAgICAoZG91YmxlICBfX3gpICAgICAgOwoK CgogCgogCmV4dGVybiAgIGRvdWJsZSAgICAgICAgICBjZWlsICAgICAgICAgIChkb3VibGUgIF9f eCkgICAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX2NlaWwgICAgICAgICAgKGRvdWJsZSAg X194KSAgICAgIDsKCiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAgIGZhYnMgICAgICAgICAgKGRv dWJsZSAgX194KSAgICAgX19hdHRyaWJ1dGVfXyAoICAgIChfX2NvbnN0X18pICApOyBleHRlcm4g ICBkb3VibGUgICAgICAgICBfX2ZhYnMgICAgICAgICAgKGRvdWJsZSAgX194KSAgICAgX19hdHRy aWJ1dGVfXyAoICAgIChfX2NvbnN0X18pICApICA7CgogCmV4dGVybiAgIGRvdWJsZSAgICAgICAg ICBmbG9vciAgICAgICAgICAoZG91YmxlICBfX3gpICAgIDsgZXh0ZXJuICAgZG91YmxlICAgICAg ICAgX19mbG9vciAgICAgICAgICAoZG91YmxlICBfX3gpICAgICAgOwoKIApleHRlcm4gICBkb3Vi bGUgICAgICAgICAgZm1vZCAgICAgICAgICAoZG91YmxlICBfX3gsIGRvdWJsZSAgX195KSAgICA7 IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fZm1vZCAgICAgICAgICAoZG91YmxlICBfX3gsIGRv dWJsZSAgX195KSAgICAgIDsKCgogCgpleHRlcm4gIGludCAgICAgX19pc2luZiAgICAgIChkb3Vi bGUgIF9fdmFsdWUpICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKIApleHRlcm4gIGlu dCAgICAgX19maW5pdGUgICAgICAoZG91YmxlICBfX3ZhbHVlKSAgIF9fYXR0cmlidXRlX18gKChf X2NvbnN0X18pKTsKCgogCgpleHRlcm4gIGludCAgICAgaXNpbmYgICAgICAoZG91YmxlICBfX3Zh bHVlKSAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCiAKZXh0ZXJuICBpbnQgICAgIGZp bml0ZSAgICAgIChkb3VibGUgIF9fdmFsdWUpICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp OwoKIAoKCgoKCmV4dGVybiAgIGRvdWJsZSAgICAgICAgICBpbmZuYW4gICAgICAgICAgKGludCBf X2Vycm9yKSAgICAgX19hdHRyaWJ1dGVfXyAoICAgIChfX2NvbnN0X18pICApOyBleHRlcm4gICBk b3VibGUgICAgICAgICBfX2luZm5hbiAgICAgICAgICAoaW50IF9fZXJyb3IpICAgICBfX2F0dHJp YnV0ZV9fICggICAgKF9fY29uc3RfXykgICkgIDsKCiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAg IGRyZW0gICAgICAgICAgKGRvdWJsZSAgX194LCBkb3VibGUgIF9feSkgICAgOyBleHRlcm4gICBk b3VibGUgICAgICAgICBfX2RyZW0gICAgICAgICAgKGRvdWJsZSAgX194LCBkb3VibGUgIF9feSkg ICAgICA7CgoKIApleHRlcm4gICBkb3VibGUgICAgICAgICAgc2lnbmlmaWNhbmQgICAgICAgICAg KGRvdWJsZSAgX194KSAgICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fc2lnbmlmaWNhbmQg ICAgICAgICAgKGRvdWJsZSAgX194KSAgICAgIDsKCgoKIApleHRlcm4gICBkb3VibGUgICAgICAg ICAgY29weXNpZ24gICAgICAgICAgKGRvdWJsZSAgX194LCBkb3VibGUgIF9feSkgICAgIF9fYXR0 cmlidXRlX18gKCAgICAoX19jb25zdF9fKSAgKTsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19j b3B5c2lnbiAgICAgICAgICAoZG91YmxlICBfX3gsIGRvdWJsZSAgX195KSAgICAgX19hdHRyaWJ1 dGVfXyAoICAgIChfX2NvbnN0X18pICApICA7CgoKCiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAg IG5hbiAgICAgICAgICAoX19jb25zdCBjaGFyICpfX3RhZ2IpICAgICBfX2F0dHJpYnV0ZV9fICgg ICAgKF9fY29uc3RfXykgICk7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fbmFuICAgICAgICAg IChfX2NvbnN0IGNoYXIgKl9fdGFnYikgICAgIF9fYXR0cmlidXRlX18gKCAgICAoX19jb25zdF9f KSAgKSAgOwoKCgogCmV4dGVybiAgaW50ICAgICBfX2lzbmFuICAgICAgKGRvdWJsZSAgX192YWx1 ZSkgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKIApleHRlcm4gIGludCAgICAgaXNu YW4gICAgICAoZG91YmxlICBfX3ZhbHVlKSAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsK CiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAgIGowICAgICAgICAgIChkb3VibGUgKSAgICA7IGV4 dGVybiAgIGRvdWJsZSAgICAgICAgIF9fajAgICAgICAgICAgKGRvdWJsZSApICAgICAgOwpleHRl cm4gICBkb3VibGUgICAgICAgICAgajEgICAgICAgICAgKGRvdWJsZSApICAgIDsgZXh0ZXJuICAg ZG91YmxlICAgICAgICAgX19qMSAgICAgICAgICAoZG91YmxlICkgICAgICA7CmV4dGVybiAgIGRv dWJsZSAgICAgICAgICBqbiAgICAgICAgICAoaW50LCBkb3VibGUgKSAgICA7IGV4dGVybiAgIGRv dWJsZSAgICAgICAgIF9fam4gICAgICAgICAgKGludCwgZG91YmxlICkgICAgICA7CmV4dGVybiAg IGRvdWJsZSAgICAgICAgICB5MCAgICAgICAgICAoZG91YmxlICkgICAgOyBleHRlcm4gICBkb3Vi bGUgICAgICAgICBfX3kwICAgICAgICAgIChkb3VibGUgKSAgICAgIDsKZXh0ZXJuICAgZG91Ymxl ICAgICAgICAgIHkxICAgICAgICAgIChkb3VibGUgKSAgICA7IGV4dGVybiAgIGRvdWJsZSAgICAg ICAgIF9feTEgICAgICAgICAgKGRvdWJsZSApICAgICAgOwpleHRlcm4gICBkb3VibGUgICAgICAg ICAgeW4gICAgICAgICAgKGludCwgZG91YmxlICkgICAgOyBleHRlcm4gICBkb3VibGUgICAgICAg ICBfX3luICAgICAgICAgIChpbnQsIGRvdWJsZSApICAgICAgOwoKCgoKIApleHRlcm4gICBkb3Vi bGUgICAgICAgICAgZXJmICAgICAgICAgIChkb3VibGUgKSAgICA7IGV4dGVybiAgIGRvdWJsZSAg ICAgICAgIF9fZXJmICAgICAgICAgIChkb3VibGUgKSAgICAgIDsKZXh0ZXJuICAgZG91YmxlICAg ICAgICAgIGVyZmMgICAgICAgICAgKGRvdWJsZSApICAgIDsgZXh0ZXJuICAgZG91YmxlICAgICAg ICAgX19lcmZjICAgICAgICAgIChkb3VibGUgKSAgICAgIDsKZXh0ZXJuICAgZG91YmxlICAgICAg ICAgIGxnYW1tYSAgICAgICAgICAoZG91YmxlICkgICAgOyBleHRlcm4gICBkb3VibGUgICAgICAg ICBfX2xnYW1tYSAgICAgICAgICAoZG91YmxlICkgICAgICA7CmV4dGVybiAgIGRvdWJsZSAgICAg ICAgICB0Z2FtbWEgICAgICAgICAgKGRvdWJsZSApICAgIDsgZXh0ZXJuICAgZG91YmxlICAgICAg ICAgX190Z2FtbWEgICAgICAgICAgKGRvdWJsZSApICAgICAgOwoKCgogCmV4dGVybiAgIGRvdWJs ZSAgICAgICAgICBnYW1tYSAgICAgICAgICAoZG91YmxlICkgICAgOyBleHRlcm4gICBkb3VibGUg ICAgICAgICBfX2dhbW1hICAgICAgICAgIChkb3VibGUgKSAgICAgIDsKCgoKIAoKCmV4dGVybiAg IGRvdWJsZSAgICAgICAgICBsZ2FtbWFfciAgICAgICAgICAgICAgKGRvdWJsZSAsIGludCAqX19z aWduZ2FtcCkgICAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX2xnYW1tYV9yICAgICAgICAg ICAgICAoZG91YmxlICwgaW50ICpfX3NpZ25nYW1wKSAgICAgIDsKCgoKCiAKCmV4dGVybiAgIGRv dWJsZSAgICAgICAgICByaW50ICAgICAgICAgIChkb3VibGUgIF9feCkgICAgOyBleHRlcm4gICBk b3VibGUgICAgICAgICBfX3JpbnQgICAgICAgICAgKGRvdWJsZSAgX194KSAgICAgIDsKCiAKZXh0 ZXJuICAgZG91YmxlICAgICAgICAgIG5leHRhZnRlciAgICAgICAgICAoZG91YmxlICBfX3gsIGRv dWJsZSAgX195KSAgICAgX19hdHRyaWJ1dGVfXyAoICAgIChfX2NvbnN0X18pICApOyBleHRlcm4g ICBkb3VibGUgICAgICAgICBfX25leHRhZnRlciAgICAgICAgICAoZG91YmxlICBfX3gsIGRvdWJs ZSAgX195KSAgICAgX19hdHRyaWJ1dGVfXyAoICAgIChfX2NvbnN0X18pICApICA7CgpleHRlcm4g ICBkb3VibGUgICAgICAgICAgbmV4dHRvd2FyZCAgICAgICAgICAoZG91YmxlICBfX3gsIGxvbmcg ZG91YmxlIF9feSkgICAgIF9fYXR0cmlidXRlX18gKCAgICAoX19jb25zdF9fKSAgKTsgZXh0ZXJu ICAgZG91YmxlICAgICAgICAgX19uZXh0dG93YXJkICAgICAgICAgIChkb3VibGUgIF9feCwgbG9u ZyBkb3VibGUgX195KSAgICAgX19hdHRyaWJ1dGVfXyAoICAgIChfX2NvbnN0X18pICApICA7CgoK IApleHRlcm4gICBkb3VibGUgICAgICAgICAgcmVtYWluZGVyICAgICAgICAgIChkb3VibGUgIF9f eCwgZG91YmxlICBfX3kpICAgIDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19yZW1haW5kZXIg ICAgICAgICAgKGRvdWJsZSAgX194LCBkb3VibGUgIF9feSkgICAgICA7CgoKIApleHRlcm4gICBk b3VibGUgICAgICAgICAgc2NhbGIgICAgICAgICAgKGRvdWJsZSAgX194LCBkb3VibGUgIF9fbikg ICAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX3NjYWxiICAgICAgICAgIChkb3VibGUgIF9f eCwgZG91YmxlICBfX24pICAgICAgOwoKCiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAgIHNjYWxi biAgICAgICAgICAoZG91YmxlICBfX3gsIGludCBfX24pICAgIDsgZXh0ZXJuICAgZG91YmxlICAg ICAgICAgX19zY2FsYm4gICAgICAgICAgKGRvdWJsZSAgX194LCBpbnQgX19uKSAgICAgIDsKCiAK ZXh0ZXJuICAgaW50ICAgICAgICBpbG9nYiAgICAgICAgKGRvdWJsZSAgX194KSAgIDsgZXh0ZXJu ICAgaW50ICAgICAgICBfX2lsb2diICAgICAgICAoZG91YmxlICBfX3gpICAgIDsKCgoKIApleHRl cm4gICBkb3VibGUgICAgICAgICAgc2NhbGJsbiAgICAgICAgICAoZG91YmxlICBfX3gsIGxvbmcg aW50IF9fbikgICAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX3NjYWxibG4gICAgICAgICAg KGRvdWJsZSAgX194LCBsb25nIGludCBfX24pICAgICAgOwoKIAoKZXh0ZXJuICAgZG91YmxlICAg ICAgICAgIG5lYXJieWludCAgICAgICAgICAoZG91YmxlICBfX3gpICAgIDsgZXh0ZXJuICAgZG91 YmxlICAgICAgICAgX19uZWFyYnlpbnQgICAgICAgICAgKGRvdWJsZSAgX194KSAgICAgIDsKCiAK CmV4dGVybiAgIGRvdWJsZSAgICAgICAgICByb3VuZCAgICAgICAgICAoZG91YmxlICBfX3gpICAg IDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19yb3VuZCAgICAgICAgICAoZG91YmxlICBfX3gp ICAgICAgOwoKIAoKZXh0ZXJuICAgZG91YmxlICAgICAgICAgIHRydW5jICAgICAgICAgIChkb3Vi bGUgIF9feCkgICAgIF9fYXR0cmlidXRlX18gKCAgICAoX19jb25zdF9fKSAgKTsgZXh0ZXJuICAg ZG91YmxlICAgICAgICAgX190cnVuYyAgICAgICAgICAoZG91YmxlICBfX3gpICAgICBfX2F0dHJp YnV0ZV9fICggICAgKF9fY29uc3RfXykgICkgIDsKCiAKCgpleHRlcm4gICBkb3VibGUgICAgICAg ICAgcmVtcXVvICAgICAgICAgIChkb3VibGUgIF9feCwgZG91YmxlICBfX3ksIGludCAqX19xdW8p ICAgIDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19yZW1xdW8gICAgICAgICAgKGRvdWJsZSAg X194LCBkb3VibGUgIF9feSwgaW50ICpfX3F1bykgICAgICA7CgoKIAoKIAoKZXh0ZXJuICAgbG9u ZyBpbnQgICAgICAgIGxyaW50ICAgICAgICAoZG91YmxlICBfX3gpICAgOyBleHRlcm4gICBsb25n IGludCAgICAgICAgX19scmludCAgICAgICAgKGRvdWJsZSAgX194KSAgICA7CmV4dGVybiAgIGxv bmcgbG9uZyBpbnQgICAgICAgIGxscmludCAgICAgICAgKGRvdWJsZSAgX194KSAgIDsgZXh0ZXJu ICAgbG9uZyBsb25nIGludCAgICAgICAgX19sbHJpbnQgICAgICAgIChkb3VibGUgIF9feCkgICAg OwoKIAoKZXh0ZXJuICAgbG9uZyBpbnQgICAgICAgIGxyb3VuZCAgICAgICAgKGRvdWJsZSAgX194 KSAgIDsgZXh0ZXJuICAgbG9uZyBpbnQgICAgICAgIF9fbHJvdW5kICAgICAgICAoZG91YmxlICBf X3gpICAgIDsKZXh0ZXJuICAgbG9uZyBsb25nIGludCAgICAgICAgbGxyb3VuZCAgICAgICAgKGRv dWJsZSAgX194KSAgIDsgZXh0ZXJuICAgbG9uZyBsb25nIGludCAgICAgICAgX19sbHJvdW5kICAg ICAgICAoZG91YmxlICBfX3gpICAgIDsKCgogCmV4dGVybiAgIGRvdWJsZSAgICAgICAgICBmZGlt ICAgICAgICAgIChkb3VibGUgIF9feCwgZG91YmxlICBfX3kpICAgIDsgZXh0ZXJuICAgZG91Ymxl ICAgICAgICAgX19mZGltICAgICAgICAgIChkb3VibGUgIF9feCwgZG91YmxlICBfX3kpICAgICAg OwoKIApleHRlcm4gICBkb3VibGUgICAgICAgICAgZm1heCAgICAgICAgICAoZG91YmxlICBfX3gs IGRvdWJsZSAgX195KSAgICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fZm1heCAgICAgICAg ICAoZG91YmxlICBfX3gsIGRvdWJsZSAgX195KSAgICAgIDsKCiAKZXh0ZXJuICAgZG91YmxlICAg ICAgICAgIGZtaW4gICAgICAgICAgKGRvdWJsZSAgX194LCBkb3VibGUgIF9feSkgICAgOyBleHRl cm4gICBkb3VibGUgICAgICAgICBfX2ZtaW4gICAgICAgICAgKGRvdWJsZSAgX194LCBkb3VibGUg IF9feSkgICAgICA7CgoKIApleHRlcm4gIGludCAgICAgIF9fZnBjbGFzc2lmeSAgICAgIChkb3Vi bGUgIF9fdmFsdWUpICAKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgogCmV4dGVy biAgaW50ICAgICAgX19zaWduYml0ICAgICAgKGRvdWJsZSAgX192YWx1ZSkgIAogICAgIF9fYXR0 cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgogCmV4dGVybiAgIGRvdWJsZSAgICAgICAgICBmbWEg ICAgICAgICAgKGRvdWJsZSAgX194LCBkb3VibGUgIF9feSwgZG91YmxlICBfX3opICAgIDsgZXh0 ZXJuICAgZG91YmxlICAgICAgICAgX19mbWEgICAgICAgICAgKGRvdWJsZSAgX194LCBkb3VibGUg IF9feSwgZG91YmxlICBfX3opICAgICAgOwoKIyA2MyAiL3Vzci9saWIvZ2NjLWxpYi9hcm0tbGlu dXgvMi45NS4zLy4uLy4uLy4uLy4uL2FybS1saW51eC9pbmNsdWRlL21hdGguaCIgMiAzCgoKCgoK CgogCgoKCgoKCgoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2FybS1saW51eC8yLjk1LjMvLi4v Li4vLi4vLi4vYXJtLWxpbnV4L2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMSAzCiAKCgoKCgoK CgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgogCmV4dGVybiAg IGZsb2F0ICAgICAgICAgIGFjb3NmICAgICAgICAgKGZsb2F0ICAgX194KSAgICA7IGV4dGVybiAg IGZsb2F0ICAgICAgICAgX19hY29zZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgICA7CiAKZXh0 ZXJuICAgZmxvYXQgICAgICAgICAgYXNpbmYgICAgICAgICAoZmxvYXQgICBfX3gpICAgIDsgZXh0 ZXJuICAgZmxvYXQgICAgICAgICBfX2FzaW5mICAgICAgICAgKGZsb2F0ICAgX194KSAgICAgIDsK IApleHRlcm4gICBmbG9hdCAgICAgICAgICBhdGFuZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAg OyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fYXRhbmYgICAgICAgICAoZmxvYXQgICBfX3gpICAg ICAgOwogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIGF0YW4yZiAgICAgICAgIChmbG9hdCAgIF9f eSwgZmxvYXQgICBfX3gpICAgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX2F0YW4yZiAgICAg ICAgIChmbG9hdCAgIF9feSwgZmxvYXQgICBfX3gpICAgICAgOwoKIApleHRlcm4gICBmbG9hdCAg ICAgICAgICBjb3NmICAgICAgICAgKGZsb2F0ICAgX194KSAgICA7IGV4dGVybiAgIGZsb2F0ICAg ICAgICAgX19jb3NmICAgICAgICAgKGZsb2F0ICAgX194KSAgICAgIDsKIApleHRlcm4gICBmbG9h dCAgICAgICAgICBzaW5mICAgICAgICAgKGZsb2F0ICAgX194KSAgICA7IGV4dGVybiAgIGZsb2F0 ICAgICAgICAgX19zaW5mICAgICAgICAgKGZsb2F0ICAgX194KSAgICAgIDsKIApleHRlcm4gICBm bG9hdCAgICAgICAgICB0YW5mICAgICAgICAgKGZsb2F0ICAgX194KSAgICA7IGV4dGVybiAgIGZs b2F0ICAgICAgICAgX190YW5mICAgICAgICAgKGZsb2F0ICAgX194KSAgICAgIDsKCgogCmV4dGVy biAgIHZvaWQgICAgICAgc2luY29zZiAgICAgIAoJICAgIChmbG9hdCAgIF9feCwgZmxvYXQgICAq X19zaW54LCBmbG9hdCAgICpfX2Nvc3gpICAgOyBleHRlcm4gICB2b2lkICAgICAgIF9fc2luY29z ZiAgICAgICAJICAgIChmbG9hdCAgIF9feCwgZmxvYXQgICAqX19zaW54LCBmbG9hdCAgICpfX2Nv c3gpICAgIDsKCgogCgogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIGNvc2hmICAgICAgICAgKGZs b2F0ICAgX194KSAgICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19jb3NoZiAgICAgICAgIChm bG9hdCAgIF9feCkgICAgICA7CiAKZXh0ZXJuICAgZmxvYXQgICAgICAgICAgc2luaGYgICAgICAg ICAoZmxvYXQgICBfX3gpICAgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX3NpbmhmICAgICAg ICAgKGZsb2F0ICAgX194KSAgICAgIDsKIApleHRlcm4gICBmbG9hdCAgICAgICAgICB0YW5oZiAg ICAgICAgIChmbG9hdCAgIF9feCkgICAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fdGFuaGYg ICAgICAgICAoZmxvYXQgICBfX3gpICAgICAgOwoKCiAKZXh0ZXJuICAgZmxvYXQgICAgICAgICAg YWNvc2hmICAgICAgICAgKGZsb2F0ICAgX194KSAgICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAg X19hY29zaGYgICAgICAgICAoZmxvYXQgICBfX3gpICAgICAgOwogCmV4dGVybiAgIGZsb2F0ICAg ICAgICAgIGFzaW5oZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgOyBleHRlcm4gICBmbG9hdCAg ICAgICAgIF9fYXNpbmhmICAgICAgICAgKGZsb2F0ICAgX194KSAgICAgIDsKIApleHRlcm4gICBm bG9hdCAgICAgICAgICBhdGFuaGYgICAgICAgICAoZmxvYXQgICBfX3gpICAgIDsgZXh0ZXJuICAg ZmxvYXQgICAgICAgICBfX2F0YW5oZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgICA7CgoKIAoK IApleHRlcm4gICBmbG9hdCAgICAgICAgICBleHBmICAgICAgICAgKGZsb2F0ICAgX194KSAgICA7 IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19leHBmICAgICAgICAgKGZsb2F0ICAgX194KSAgICAg IDsKCgogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIGV4cDEwZiAgICAgICAgIChmbG9hdCAgIF9f eCkgICAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fZXhwMTBmICAgICAgICAgKGZsb2F0ICAg X194KSAgICAgIDsKIApleHRlcm4gICBmbG9hdCAgICAgICAgICBwb3cxMGYgICAgICAgICAoZmxv YXQgICBfX3gpICAgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX3BvdzEwZiAgICAgICAgIChm bG9hdCAgIF9feCkgICAgICA7CgoKIApleHRlcm4gICBmbG9hdCAgICAgICAgICBmcmV4cGYgICAg ICAgICAoZmxvYXQgICBfX3gsIGludCAqX19leHBvbmVudCkgICAgOyBleHRlcm4gICBmbG9hdCAg ICAgICAgIF9fZnJleHBmICAgICAgICAgKGZsb2F0ICAgX194LCBpbnQgKl9fZXhwb25lbnQpICAg ICAgOwoKIApleHRlcm4gICBmbG9hdCAgICAgICAgICBsZGV4cGYgICAgICAgICAoZmxvYXQgICBf X3gsIGludCBfX2V4cG9uZW50KSAgICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19sZGV4cGYg ICAgICAgICAoZmxvYXQgICBfX3gsIGludCBfX2V4cG9uZW50KSAgICAgIDsKCiAKZXh0ZXJuICAg ZmxvYXQgICAgICAgICAgbG9nZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgOyBleHRlcm4gICBm bG9hdCAgICAgICAgIF9fbG9nZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgICA7CgogCmV4dGVy biAgIGZsb2F0ICAgICAgICAgIGxvZzEwZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgOyBleHRl cm4gICBmbG9hdCAgICAgICAgIF9fbG9nMTBmICAgICAgICAgKGZsb2F0ICAgX194KSAgICAgIDsK CiAKZXh0ZXJuICAgZmxvYXQgICAgICAgICAgbW9kZmYgICAgICAgICAoZmxvYXQgICBfX3gsIGZs b2F0ICAgKl9faXB0cikgICAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fbW9kZmYgICAgICAg ICAoZmxvYXQgICBfX3gsIGZsb2F0ICAgKl9faXB0cikgICAgICA7CgoKIApleHRlcm4gICBmbG9h dCAgICAgICAgICBleHBtMWYgICAgICAgICAoZmxvYXQgICBfX3gpICAgIDsgZXh0ZXJuICAgZmxv YXQgICAgICAgICBfX2V4cG0xZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgICA7CgogCmV4dGVy biAgIGZsb2F0ICAgICAgICAgIGxvZzFwZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgOyBleHRl cm4gICBmbG9hdCAgICAgICAgIF9fbG9nMXBmICAgICAgICAgKGZsb2F0ICAgX194KSAgICAgIDsK CiAKZXh0ZXJuICAgZmxvYXQgICAgICAgICAgbG9nYmYgICAgICAgICAoZmxvYXQgICBfX3gpICAg IDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX2xvZ2JmICAgICAgICAgKGZsb2F0ICAgX194KSAg ICAgIDsKCgoKIApleHRlcm4gICBmbG9hdCAgICAgICAgICBleHAyZiAgICAgICAgIChmbG9hdCAg IF9feCkgICAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fZXhwMmYgICAgICAgICAoZmxvYXQg ICBfX3gpICAgICAgOwoKIApleHRlcm4gICBmbG9hdCAgICAgICAgICBsb2cyZiAgICAgICAgIChm bG9hdCAgIF9feCkgICAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fbG9nMmYgICAgICAgICAo ZmxvYXQgICBfX3gpICAgICAgOwoKCgogCgogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIHBvd2Yg ICAgICAgICAoZmxvYXQgICBfX3gsIGZsb2F0ICAgX195KSAgICA7IGV4dGVybiAgIGZsb2F0ICAg ICAgICAgX19wb3dmICAgICAgICAgKGZsb2F0ICAgX194LCBmbG9hdCAgIF9feSkgICAgICA7Cgog CmV4dGVybiAgIGZsb2F0ICAgICAgICAgIHNxcnRmICAgICAgICAgKGZsb2F0ICAgX194KSAgICA7 IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19zcXJ0ZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAg ICA7CgoKIApleHRlcm4gICBmbG9hdCAgICAgICAgICBoeXBvdGYgICAgICAgICAoZmxvYXQgICBf X3gsIGZsb2F0ICAgX195KSAgICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19oeXBvdGYgICAg ICAgICAoZmxvYXQgICBfX3gsIGZsb2F0ICAgX195KSAgICAgIDsKCgoKIApleHRlcm4gICBmbG9h dCAgICAgICAgICBjYnJ0ZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgOyBleHRlcm4gICBmbG9h dCAgICAgICAgIF9fY2JydGYgICAgICAgICAoZmxvYXQgICBfX3gpICAgICAgOwoKCgogCgogCmV4 dGVybiAgIGZsb2F0ICAgICAgICAgIGNlaWxmICAgICAgICAgKGZsb2F0ICAgX194KSAgICA7IGV4 dGVybiAgIGZsb2F0ICAgICAgICAgX19jZWlsZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgICA7 CgogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIGZhYnNmICAgICAgICAgKGZsb2F0ICAgX194KSAg ICAgX19hdHRyaWJ1dGVfXyAoICAgIChfX2NvbnN0X18pICApOyBleHRlcm4gICBmbG9hdCAgICAg ICAgIF9fZmFic2YgICAgICAgICAoZmxvYXQgICBfX3gpICAgICBfX2F0dHJpYnV0ZV9fICggICAg KF9fY29uc3RfXykgICkgIDsKCiAKZXh0ZXJuICAgZmxvYXQgICAgICAgICAgZmxvb3JmICAgICAg ICAgKGZsb2F0ICAgX194KSAgICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19mbG9vcmYgICAg ICAgICAoZmxvYXQgICBfX3gpICAgICAgOwoKIApleHRlcm4gICBmbG9hdCAgICAgICAgICBmbW9k ZiAgICAgICAgIChmbG9hdCAgIF9feCwgZmxvYXQgICBfX3kpICAgIDsgZXh0ZXJuICAgZmxvYXQg ICAgICAgICBfX2Ztb2RmICAgICAgICAgKGZsb2F0ICAgX194LCBmbG9hdCAgIF9feSkgICAgICA7 CgoKIAoKZXh0ZXJuICBpbnQgICAgX19pc2luZmYgICAgIChmbG9hdCAgIF9fdmFsdWUpICAgX19h dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKIApleHRlcm4gIGludCAgICBfX2Zpbml0ZWYgICAg IChmbG9hdCAgIF9fdmFsdWUpICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCiAKCmV4 dGVybiAgaW50ICAgIGlzaW5mZiAgICAgKGZsb2F0ICAgX192YWx1ZSkgICBfX2F0dHJpYnV0ZV9f ICgoX19jb25zdF9fKSk7CgogCmV4dGVybiAgaW50ICAgIGZpbml0ZWYgICAgIChmbG9hdCAgIF9f dmFsdWUpICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKIAoKCgoKCmV4dGVybiAgIGZs b2F0ICAgICAgICAgIGluZm5hbmYgICAgICAgICAoaW50IF9fZXJyb3IpICAgICBfX2F0dHJpYnV0 ZV9fICggICAgKF9fY29uc3RfXykgICk7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19pbmZuYW5m ICAgICAgICAgKGludCBfX2Vycm9yKSAgICAgX19hdHRyaWJ1dGVfXyAoICAgIChfX2NvbnN0X18p ICApICA7CgogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIGRyZW1mICAgICAgICAgKGZsb2F0ICAg X194LCBmbG9hdCAgIF9feSkgICAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fZHJlbWYgICAg ICAgICAoZmxvYXQgICBfX3gsIGZsb2F0ICAgX195KSAgICAgIDsKCgogCmV4dGVybiAgIGZsb2F0 ICAgICAgICAgIHNpZ25pZmljYW5kZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgOyBleHRlcm4g ICBmbG9hdCAgICAgICAgIF9fc2lnbmlmaWNhbmRmICAgICAgICAgKGZsb2F0ICAgX194KSAgICAg IDsKCgoKIApleHRlcm4gICBmbG9hdCAgICAgICAgICBjb3B5c2lnbmYgICAgICAgICAoZmxvYXQg ICBfX3gsIGZsb2F0ICAgX195KSAgICAgX19hdHRyaWJ1dGVfXyAoICAgIChfX2NvbnN0X18pICAp OyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fY29weXNpZ25mICAgICAgICAgKGZsb2F0ICAgX194 LCBmbG9hdCAgIF9feSkgICAgIF9fYXR0cmlidXRlX18gKCAgICAoX19jb25zdF9fKSAgKSAgOwoK CgogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIG5hbmYgICAgICAgICAoX19jb25zdCBjaGFyICpf X3RhZ2IpICAgICBfX2F0dHJpYnV0ZV9fICggICAgKF9fY29uc3RfXykgICk7IGV4dGVybiAgIGZs b2F0ICAgICAgICAgX19uYW5mICAgICAgICAgKF9fY29uc3QgY2hhciAqX190YWdiKSAgICAgX19h dHRyaWJ1dGVfXyAoICAgIChfX2NvbnN0X18pICApICA7CgoKCiAKZXh0ZXJuICBpbnQgICAgX19p c25hbmYgICAgIChmbG9hdCAgIF9fdmFsdWUpICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp OwoKCiAKZXh0ZXJuICBpbnQgICAgaXNuYW5mICAgICAoZmxvYXQgICBfX3ZhbHVlKSAgIF9fYXR0 cmlidXRlX18gKChfX2NvbnN0X18pKTsKCiAKZXh0ZXJuICAgZmxvYXQgICAgICAgICAgajBmICAg ICAgICAgKGZsb2F0ICApICAgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX2owZiAgICAgICAg IChmbG9hdCAgKSAgICAgIDsKZXh0ZXJuICAgZmxvYXQgICAgICAgICAgajFmICAgICAgICAgKGZs b2F0ICApICAgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX2oxZiAgICAgICAgIChmbG9hdCAg KSAgICAgIDsKZXh0ZXJuICAgZmxvYXQgICAgICAgICAgam5mICAgICAgICAgKGludCwgZmxvYXQg ICkgICAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fam5mICAgICAgICAgKGludCwgZmxvYXQg ICkgICAgICA7CmV4dGVybiAgIGZsb2F0ICAgICAgICAgIHkwZiAgICAgICAgIChmbG9hdCAgKSAg ICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX195MGYgICAgICAgICAoZmxvYXQgICkgICAgICA7 CmV4dGVybiAgIGZsb2F0ICAgICAgICAgIHkxZiAgICAgICAgIChmbG9hdCAgKSAgICA7IGV4dGVy biAgIGZsb2F0ICAgICAgICAgX195MWYgICAgICAgICAoZmxvYXQgICkgICAgICA7CmV4dGVybiAg IGZsb2F0ICAgICAgICAgIHluZiAgICAgICAgIChpbnQsIGZsb2F0ICApICAgIDsgZXh0ZXJuICAg ZmxvYXQgICAgICAgICBfX3luZiAgICAgICAgIChpbnQsIGZsb2F0ICApICAgICAgOwoKCgoKIApl eHRlcm4gICBmbG9hdCAgICAgICAgICBlcmZmICAgICAgICAgKGZsb2F0ICApICAgIDsgZXh0ZXJu ICAgZmxvYXQgICAgICAgICBfX2VyZmYgICAgICAgICAoZmxvYXQgICkgICAgICA7CmV4dGVybiAg IGZsb2F0ICAgICAgICAgIGVyZmNmICAgICAgICAgKGZsb2F0ICApICAgIDsgZXh0ZXJuICAgZmxv YXQgICAgICAgICBfX2VyZmNmICAgICAgICAgKGZsb2F0ICApICAgICAgOwpleHRlcm4gICBmbG9h dCAgICAgICAgICBsZ2FtbWFmICAgICAgICAgKGZsb2F0ICApICAgIDsgZXh0ZXJuICAgZmxvYXQg ICAgICAgICBfX2xnYW1tYWYgICAgICAgICAoZmxvYXQgICkgICAgICA7CmV4dGVybiAgIGZsb2F0 ICAgICAgICAgIHRnYW1tYWYgICAgICAgICAoZmxvYXQgICkgICAgOyBleHRlcm4gICBmbG9hdCAg ICAgICAgIF9fdGdhbW1hZiAgICAgICAgIChmbG9hdCAgKSAgICAgIDsKCgoKIApleHRlcm4gICBm bG9hdCAgICAgICAgICBnYW1tYWYgICAgICAgICAoZmxvYXQgICkgICAgOyBleHRlcm4gICBmbG9h dCAgICAgICAgIF9fZ2FtbWFmICAgICAgICAgKGZsb2F0ICApICAgICAgOwoKCgogCgoKZXh0ZXJu ICAgZmxvYXQgICAgICAgICAgbGdhbW1hZl9yICAgICAgICAgICAgKGZsb2F0ICAsIGludCAqX19z aWduZ2FtcCkgICAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fbGdhbW1hZl9yICAgICAgICAg ICAgKGZsb2F0ICAsIGludCAqX19zaWduZ2FtcCkgICAgICA7CgoKCgogCgpleHRlcm4gICBmbG9h dCAgICAgICAgICByaW50ZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgOyBleHRlcm4gICBmbG9h dCAgICAgICAgIF9fcmludGYgICAgICAgICAoZmxvYXQgICBfX3gpICAgICAgOwoKIApleHRlcm4g ICBmbG9hdCAgICAgICAgICBuZXh0YWZ0ZXJmICAgICAgICAgKGZsb2F0ICAgX194LCBmbG9hdCAg IF9feSkgICAgIF9fYXR0cmlidXRlX18gKCAgICAoX19jb25zdF9fKSAgKTsgZXh0ZXJuICAgZmxv YXQgICAgICAgICBfX25leHRhZnRlcmYgICAgICAgICAoZmxvYXQgICBfX3gsIGZsb2F0ICAgX195 KSAgICAgX19hdHRyaWJ1dGVfXyAoICAgIChfX2NvbnN0X18pICApICA7CgpleHRlcm4gICBmbG9h dCAgICAgICAgICBuZXh0dG93YXJkZiAgICAgICAgIChmbG9hdCAgIF9feCwgbG9uZyBkb3VibGUg X195KSAgICAgX19hdHRyaWJ1dGVfXyAoICAgIChfX2NvbnN0X18pICApOyBleHRlcm4gICBmbG9h dCAgICAgICAgIF9fbmV4dHRvd2FyZGYgICAgICAgICAoZmxvYXQgICBfX3gsIGxvbmcgZG91Ymxl IF9feSkgICAgIF9fYXR0cmlidXRlX18gKCAgICAoX19jb25zdF9fKSAgKSAgOwoKCiAKZXh0ZXJu ICAgZmxvYXQgICAgICAgICAgcmVtYWluZGVyZiAgICAgICAgIChmbG9hdCAgIF9feCwgZmxvYXQg ICBfX3kpICAgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX3JlbWFpbmRlcmYgICAgICAgICAo ZmxvYXQgICBfX3gsIGZsb2F0ICAgX195KSAgICAgIDsKCgogCmV4dGVybiAgIGZsb2F0ICAgICAg ICAgIHNjYWxiZiAgICAgICAgIChmbG9hdCAgIF9feCwgZmxvYXQgICBfX24pICAgIDsgZXh0ZXJu ICAgZmxvYXQgICAgICAgICBfX3NjYWxiZiAgICAgICAgIChmbG9hdCAgIF9feCwgZmxvYXQgICBf X24pICAgICAgOwoKCiAKZXh0ZXJuICAgZmxvYXQgICAgICAgICAgc2NhbGJuZiAgICAgICAgIChm bG9hdCAgIF9feCwgaW50IF9fbikgICAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fc2NhbGJu ZiAgICAgICAgIChmbG9hdCAgIF9feCwgaW50IF9fbikgICAgICA7CgogCmV4dGVybiAgIGludCAg ICAgICBpbG9nYmYgICAgICAgKGZsb2F0ICAgX194KSAgIDsgZXh0ZXJuICAgaW50ICAgICAgIF9f aWxvZ2JmICAgICAgIChmbG9hdCAgIF9feCkgICAgOwoKCgogCmV4dGVybiAgIGZsb2F0ICAgICAg ICAgIHNjYWxibG5mICAgICAgICAgKGZsb2F0ICAgX194LCBsb25nIGludCBfX24pICAgIDsgZXh0 ZXJuICAgZmxvYXQgICAgICAgICBfX3NjYWxibG5mICAgICAgICAgKGZsb2F0ICAgX194LCBsb25n IGludCBfX24pICAgICAgOwoKIAoKZXh0ZXJuICAgZmxvYXQgICAgICAgICAgbmVhcmJ5aW50ZiAg ICAgICAgIChmbG9hdCAgIF9feCkgICAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fbmVhcmJ5 aW50ZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgICA7CgogCgpleHRlcm4gICBmbG9hdCAgICAg ICAgICByb3VuZGYgICAgICAgICAoZmxvYXQgICBfX3gpICAgIDsgZXh0ZXJuICAgZmxvYXQgICAg ICAgICBfX3JvdW5kZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgICA7CgogCgpleHRlcm4gICBm bG9hdCAgICAgICAgICB0cnVuY2YgICAgICAgICAoZmxvYXQgICBfX3gpICAgICBfX2F0dHJpYnV0 ZV9fICggICAgKF9fY29uc3RfXykgICk7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX190cnVuY2Yg ICAgICAgICAoZmxvYXQgICBfX3gpICAgICBfX2F0dHJpYnV0ZV9fICggICAgKF9fY29uc3RfXykg ICkgIDsKCiAKCgpleHRlcm4gICBmbG9hdCAgICAgICAgICByZW1xdW9mICAgICAgICAgKGZsb2F0 ICAgX194LCBmbG9hdCAgIF9feSwgaW50ICpfX3F1bykgICAgOyBleHRlcm4gICBmbG9hdCAgICAg ICAgIF9fcmVtcXVvZiAgICAgICAgIChmbG9hdCAgIF9feCwgZmxvYXQgICBfX3ksIGludCAqX19x dW8pICAgICAgOwoKCiAKCiAKCmV4dGVybiAgIGxvbmcgaW50ICAgICAgIGxyaW50ZiAgICAgICAo ZmxvYXQgICBfX3gpICAgOyBleHRlcm4gICBsb25nIGludCAgICAgICBfX2xyaW50ZiAgICAgICAo ZmxvYXQgICBfX3gpICAgIDsKZXh0ZXJuICAgbG9uZyBsb25nIGludCAgICAgICBsbHJpbnRmICAg ICAgIChmbG9hdCAgIF9feCkgICA7IGV4dGVybiAgIGxvbmcgbG9uZyBpbnQgICAgICAgX19sbHJp bnRmICAgICAgIChmbG9hdCAgIF9feCkgICAgOwoKIAoKZXh0ZXJuICAgbG9uZyBpbnQgICAgICAg bHJvdW5kZiAgICAgICAoZmxvYXQgICBfX3gpICAgOyBleHRlcm4gICBsb25nIGludCAgICAgICBf X2xyb3VuZGYgICAgICAgKGZsb2F0ICAgX194KSAgICA7CmV4dGVybiAgIGxvbmcgbG9uZyBpbnQg ICAgICAgbGxyb3VuZGYgICAgICAgKGZsb2F0ICAgX194KSAgIDsgZXh0ZXJuICAgbG9uZyBsb25n IGludCAgICAgICBfX2xscm91bmRmICAgICAgIChmbG9hdCAgIF9feCkgICAgOwoKCiAKZXh0ZXJu ICAgZmxvYXQgICAgICAgICAgZmRpbWYgICAgICAgICAoZmxvYXQgICBfX3gsIGZsb2F0ICAgX195 KSAgICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19mZGltZiAgICAgICAgIChmbG9hdCAgIF9f eCwgZmxvYXQgICBfX3kpICAgICAgOwoKIApleHRlcm4gICBmbG9hdCAgICAgICAgICBmbWF4ZiAg ICAgICAgIChmbG9hdCAgIF9feCwgZmxvYXQgICBfX3kpICAgIDsgZXh0ZXJuICAgZmxvYXQgICAg ICAgICBfX2ZtYXhmICAgICAgICAgKGZsb2F0ICAgX194LCBmbG9hdCAgIF9feSkgICAgICA7Cgog CmV4dGVybiAgIGZsb2F0ICAgICAgICAgIGZtaW5mICAgICAgICAgKGZsb2F0ICAgX194LCBmbG9h dCAgIF9feSkgICAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fZm1pbmYgICAgICAgICAoZmxv YXQgICBfX3gsIGZsb2F0ICAgX195KSAgICAgIDsKCgogCmV4dGVybiAgaW50ICAgICBfX2ZwY2xh c3NpZnlmICAgICAoZmxvYXQgICBfX3ZhbHVlKSAgCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29u c3RfXykpOwoKIApleHRlcm4gIGludCAgICAgX19zaWduYml0ZiAgICAgKGZsb2F0ICAgX192YWx1 ZSkgIAogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgogCmV4dGVybiAgIGZsb2F0 ICAgICAgICAgIGZtYWYgICAgICAgICAoZmxvYXQgICBfX3gsIGZsb2F0ICAgX195LCBmbG9hdCAg IF9feikgICAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fZm1hZiAgICAgICAgIChmbG9hdCAg IF9feCwgZmxvYXQgICBfX3ksIGZsb2F0ICAgX196KSAgICAgIDsKCiMgODIgIi91c3IvbGliL2dj Yy1saWIvYXJtLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9hcm0tbGludXgvaW5jbHVkZS9tYXRo LmgiIDIgMwoKCgoKIyAxMDMgIi91c3IvbGliL2djYy1saWIvYXJtLWxpbnV4LzIuOTUuMy8uLi8u Li8uLi8uLi9hcm0tbGludXgvaW5jbHVkZS9tYXRoLmgiIDMKCgoKCgoKCgoKIApleHRlcm4gaW50 IHNpZ25nYW07CgoKCiAKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAplbnVt CiAgewogICAgRlBfTkFOLAoKICAgIEZQX0lORklOSVRFLAoKICAgIEZQX1pFUk8sCgogICAgRlBf U1VCTk9STUFMLAoKICAgIEZQX05PUk1BTAoKICB9OwoKIAoKCgoKCgoKCgoKCiAKCgoKCgoKCgoK CgogCgoKCgoKCgoKCgoKIAoKCiAKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCiAKdHlwZWRl ZiBlbnVtCnsKICBfSUVFRV8gPSAtMSwJIAogIF9TVklEXywJIAogIF9YT1BFTl8sCSAKICBfUE9T SVhfLAogIF9JU09DXwkgCn0gX0xJQl9WRVJTSU9OX1RZUEU7CgogCgoKZXh0ZXJuIF9MSUJfVkVS U0lPTl9UWVBFIF9MSUJfVkVSU0lPTjsKCgoKCiAKCgoKCgoKCnN0cnVjdCBleGNlcHRpb24KCiAg ewogICAgaW50IHR5cGU7CiAgICBjaGFyICpuYW1lOwogICAgZG91YmxlIGFyZzE7CiAgICBkb3Vi bGUgYXJnMjsKICAgIGRvdWJsZSByZXR2YWw7CiAgfTsKCgoKCmV4dGVybiBpbnQgbWF0aGVyciAg KHN0cnVjdCBleGNlcHRpb24gKl9fZXhjKSAgICA7CgoKCgogCgoKCgoKCgogCgojIDEgIi91c3Iv bGliL2djYy1saWIvYXJtLWxpbnV4LzIuOTUuMy9pbmNsdWRlL2Zsb2F0LmgiIDEgMwogCgoKIAoK ICAgIAoKCiAgICAKCgogICAgCgoKICAgIAoKCiAgICAKCgogICAgCgoKICAgIAoKCiAgICAKCgog ICAgCgoKICAgIAoKCiAgICAKCgoKICAgIAoKCiAgICAKCgogICAgCgoKICAgIAoKCiAgICAKCgog ICAgCgoKICAgIAoKCiAgICAKCgogICAgCgoKCiAgICAKCgogICAgCgoKICAgIAoKCiAgICAKCgog ICAgCgoKICAgIAoKCiAgICAKCgogICAgCgoKICAgIAoKCgoKIyAyODkgIi91c3IvbGliL2djYy1s aWIvYXJtLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9hcm0tbGludXgvaW5jbHVkZS9tYXRoLmgi IDIgMwoKCiMgMjk5ICIvdXNyL2xpYi9nY2MtbGliL2FybS1saW51eC8yLjk1LjMvLi4vLi4vLi4v Li4vYXJtLWxpbnV4L2luY2x1ZGUvbWF0aC5oIiAzCgoKCiAKCgoKCgoKCgoKCgoKCgoKCiAKCgoK CgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKIAoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2FybS1saW51 eC8yLjk1LjMvLi4vLi4vLi4vLi4vYXJtLWxpbnV4L2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgi IDEgMwogCgoKCgoKCgoKIAoKCiMgMzQ4ICIvdXNyL2xpYi9nY2MtbGliL2FybS1saW51eC8yLjk1 LjMvLi4vLi4vLi4vLi4vYXJtLWxpbnV4L2luY2x1ZGUvbWF0aC5oIiAyIDMKCgoKCgogCgoKCgoK IAoKCgoKCgoKIAoKCgoKCgoKIAoKCgoKCgoKIAoKCgoKCgoKIAoKCgoKCgoKIAoKCgoKCgoKCgog CgoKCiMgMTkwICIuLi8uLi9pbmNsdWRlL21pc2MuaCIgMgoKCgoKCgoKCgoKCiMgMSAiL3Vzci9s aWIvZ2NjLWxpYi9hcm0tbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2FybS1saW51eC9pbmNsdWRl L2Fzc2VydC5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKIyAzMiAiL3Vzci9saWIvZ2Nj LWxpYi9hcm0tbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2FybS1saW51eC9pbmNsdWRlL2Fzc2Vy dC5oIiAzCgoKCgoKIAoKCgoKCgoKCiAKCgoKCgoKCgoKIyAxMDkgIi91c3IvbGliL2djYy1saWIv YXJtLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9hcm0tbGludXgvaW5jbHVkZS9hc3NlcnQuaCIg MwoKIyAyMDEgIi4uLy4uL2luY2x1ZGUvbWlzYy5oIiAyCgojIDEgIi91c3IvbGliL2djYy1saWIv YXJtLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9hcm0tbGludXgvaW5jbHVkZS9jdHlwZS5oIiAx IDMKIAoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKIAoKCiAKCgoKCgoKCgoKCgoKCgplbnVt CnsKICBfSVN1cHBlciA9ICgoIDAgKSA8IDggPyAoKDEgPDwgKCAwICkpIDw8IDgpIDogKCgxIDw8 ICggMCApKSA+PiA4KSkgLAkgCiAgX0lTbG93ZXIgPSAoKCAxICkgPCA4ID8gKCgxIDw8ICggMSAp KSA8PCA4KSA6ICgoMSA8PCAoIDEgKSkgPj4gOCkpICwJIAogIF9JU2FscGhhID0gKCggMiApIDwg OCA/ICgoMSA8PCAoIDIgKSkgPDwgOCkgOiAoKDEgPDwgKCAyICkpID4+IDgpKSAsCSAKICBfSVNk aWdpdCA9ICgoIDMgKSA8IDggPyAoKDEgPDwgKCAzICkpIDw8IDgpIDogKCgxIDw8ICggMyApKSA+ PiA4KSkgLAkgCiAgX0lTeGRpZ2l0ID0gKCggNCApIDwgOCA/ICgoMSA8PCAoIDQgKSkgPDwgOCkg OiAoKDEgPDwgKCA0ICkpID4+IDgpKSAsCSAKICBfSVNzcGFjZSA9ICgoIDUgKSA8IDggPyAoKDEg PDwgKCA1ICkpIDw8IDgpIDogKCgxIDw8ICggNSApKSA+PiA4KSkgLAkgCiAgX0lTcHJpbnQgPSAo KCA2ICkgPCA4ID8gKCgxIDw8ICggNiApKSA8PCA4KSA6ICgoMSA8PCAoIDYgKSkgPj4gOCkpICwJ IAogIF9JU2dyYXBoID0gKCggNyApIDwgOCA/ICgoMSA8PCAoIDcgKSkgPDwgOCkgOiAoKDEgPDwg KCA3ICkpID4+IDgpKSAsCSAKICBfSVNibGFuayA9ICgoIDggKSA8IDggPyAoKDEgPDwgKCA4ICkp IDw8IDgpIDogKCgxIDw8ICggOCApKSA+PiA4KSkgLAkgCiAgX0lTY250cmwgPSAoKCA5ICkgPCA4 ID8gKCgxIDw8ICggOSApKSA8PCA4KSA6ICgoMSA8PCAoIDkgKSkgPj4gOCkpICwJIAogIF9JU3B1 bmN0ID0gKCggMTAgKSA8IDggPyAoKDEgPDwgKCAxMCApKSA8PCA4KSA6ICgoMSA8PCAoIDEwICkp ID4+IDgpKSAsCSAKICBfSVNhbG51bSA9ICgoIDExICkgPCA4ID8gKCgxIDw8ICggMTEgKSkgPDwg OCkgOiAoKDEgPDwgKCAxMSApKSA+PiA4KSkgCSAKfTsKCgogCgoKCgoKCgoKCgpleHRlcm4gX19j b25zdCB1bnNpZ25lZCBzaG9ydCBpbnQgKl9fY3R5cGVfYjsJIApleHRlcm4gX19jb25zdCBfX2lu dDMyX3QgKl9fY3R5cGVfdG9sb3dlcjsgIApleHRlcm4gX19jb25zdCBfX2ludDMyX3QgKl9fY3R5 cGVfdG91cHBlcjsgIAoKCgoKCgoKCgogCgoKCmV4dGVybiBpbnQgIGlzYWxudW0gICAoaW50KSAg ICAgOwpleHRlcm4gaW50ICBpc2FscGhhICAgKGludCkgICAgIDsKZXh0ZXJuIGludCAgaXNjbnRy bCAgIChpbnQpICAgICA7CmV4dGVybiBpbnQgIGlzZGlnaXQgICAoaW50KSAgICAgOwpleHRlcm4g aW50ICBpc2xvd2VyICAgKGludCkgICAgIDsKZXh0ZXJuIGludCAgaXNncmFwaCAgIChpbnQpICAg ICA7CmV4dGVybiBpbnQgIGlzcHJpbnQgICAoaW50KSAgICAgOwpleHRlcm4gaW50ICBpc3B1bmN0 ICAgKGludCkgICAgIDsKZXh0ZXJuIGludCAgaXNzcGFjZSAgIChpbnQpICAgICA7CmV4dGVybiBp bnQgIGlzdXBwZXIgICAoaW50KSAgICAgOwpleHRlcm4gaW50ICBpc3hkaWdpdCAgIChpbnQpICAg ICA7CgoKZXh0ZXJuIGludCAgaXNibGFuayAgIChpbnQpICAgICA7CgoKCiAKZXh0ZXJuIGludCB0 b2xvd2VyICAoaW50IF9fYykgICAgOwoKIApleHRlcm4gaW50IHRvdXBwZXIgIChpbnQgX19jKSAg ICA7CgoKCgogCgpleHRlcm4gaW50IGlzYXNjaWkgIChpbnQgX19jKSAgICA7CgogCgpleHRlcm4g aW50IHRvYXNjaWkgIChpbnQgX19jKSAgICA7CgoKCgogCgpleHRlcm4gaW50ICBfdG91cHBlciAg IChpbnQpICAgICA7CmV4dGVybiBpbnQgIF90b2xvd2VyICAgKGludCkgICAgIDsKCgoKCgoKCgoK CgoKCgoKCgoKCgoKZXh0ZXJuIF9faW5saW5lIGludAp0b2xvd2VyIChpbnQgX19jKSAgCnsKICBy ZXR1cm4gX19jID49IC0xMjggJiYgX19jIDwgMjU2ID8gX19jdHlwZV90b2xvd2VyW19fY10gOiBf X2M7Cn0KCmV4dGVybiBfX2lubGluZSBpbnQKdG91cHBlciAoaW50IF9fYykgIAp7CiAgcmV0dXJu IF9fYyA+PSAtMTI4ICYmIF9fYyA8IDI1NiA/IF9fY3R5cGVfdG91cHBlcltfX2NdIDogX19jOwp9 CgoKCgojIDE4MyAiL3Vzci9saWIvZ2NjLWxpYi9hcm0tbGludXgvMi45NS4zLy4uLy4uLy4uLy4u L2FybS1saW51eC9pbmNsdWRlL2N0eXBlLmgiIDMKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoK CgogCgoKCiAKCgoKCgoKCgoKIAoKCgpleHRlcm4gaW50ICBfX2lzYWxudW1fbCAgIChpbnQsIF9f bG9jYWxlX3QpICAgICA7CmV4dGVybiBpbnQgIF9faXNhbHBoYV9sICAgKGludCwgX19sb2NhbGVf dCkgICAgIDsKZXh0ZXJuIGludCAgX19pc2NudHJsX2wgICAoaW50LCBfX2xvY2FsZV90KSAgICAg OwpleHRlcm4gaW50ICBfX2lzZGlnaXRfbCAgIChpbnQsIF9fbG9jYWxlX3QpICAgICA7CmV4dGVy biBpbnQgIF9faXNsb3dlcl9sICAgKGludCwgX19sb2NhbGVfdCkgICAgIDsKZXh0ZXJuIGludCAg X19pc2dyYXBoX2wgICAoaW50LCBfX2xvY2FsZV90KSAgICAgOwpleHRlcm4gaW50ICBfX2lzcHJp bnRfbCAgIChpbnQsIF9fbG9jYWxlX3QpICAgICA7CmV4dGVybiBpbnQgIF9faXNwdW5jdF9sICAg KGludCwgX19sb2NhbGVfdCkgICAgIDsKZXh0ZXJuIGludCAgX19pc3NwYWNlX2wgICAoaW50LCBf X2xvY2FsZV90KSAgICAgOwpleHRlcm4gaW50ICBfX2lzdXBwZXJfbCAgIChpbnQsIF9fbG9jYWxl X3QpICAgICA7CmV4dGVybiBpbnQgIF9faXN4ZGlnaXRfbCAgIChpbnQsIF9fbG9jYWxlX3QpICAg ICA7CgpleHRlcm4gaW50ICBfX2lzYmxhbmtfbCAgIChpbnQsIF9fbG9jYWxlX3QpICAgICA7CgoK IApleHRlcm4gaW50IF9fdG9sb3dlcl9sICAoaW50IF9fYywgX19sb2NhbGVfdCBfX2wpICAgIDsK CiAKZXh0ZXJuIGludCBfX3RvdXBwZXJfbCAgKGludCBfX2MsIF9fbG9jYWxlX3QgX19sKSAgICA7 CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCiMgMjAyICIuLi8uLi9pbmNsdWRlL21pc2Mu aCIgMgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2FybS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4v YXJtLWxpbnV4L2luY2x1ZGUvc3RkaW8uaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoK CgoKCiAKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2FybS1saW51eC8yLjk1LjMvaW5jbHVkZS9z dGRkZWYuaCIgMSAzCgoKCgoKCiAKCgojIDE5ICIvdXNyL2xpYi9nY2MtbGliL2FybS1saW51eC8y Ljk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgogCgoKIAoKCgoKCiAKCgojIDYxICIvdXNyL2xp Yi9nY2MtbGliL2FybS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCgoKCgog CgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgogCgogCgoKIyAxMjYgIi91c3IvbGliL2djYy1saWIv YXJtLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKCgoKIAoKIAoKCiMgMTg4 ICIvdXNyL2xpYi9nY2MtbGliL2FybS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoK CgoKCiAKCgoKCiAKCgojIDI2OSAiL3Vzci9saWIvZ2NjLWxpYi9hcm0tbGludXgvMi45NS4zL2lu Y2x1ZGUvc3RkZGVmLmgiIDMKCgoKCgoKCgoKCgoKCgoKCiAKCiAKCiMgMzE3ICIvdXNyL2xpYi9n Y2MtbGliL2FybS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKIAoKCgoKCgoK CgoKCgoKIAoKCgoKCgoKIyAzMyAiL3Vzci9saWIvZ2NjLWxpYi9hcm0tbGludXgvMi45NS4zLy4u Ly4uLy4uLy4uL2FybS1saW51eC9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKCgoKCgoKCgoKCgoKCiAK dHlwZWRlZiBzdHJ1Y3QgX0lPX0ZJTEUgRklMRTsKCgoKCgoKCgojIDEgIi91c3IvbGliL2djYy1s aWIvYXJtLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9hcm0tbGludXgvaW5jbHVkZS9saWJpby5o IiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGli L2FybS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vYXJtLWxpbnV4L2luY2x1ZGUvX0dfY29uZmln LmgiIDEgMwogCgoKCgoKIAoKCgoKCgojIDEgIi91c3IvbGliL2djYy1saWIvYXJtLWxpbnV4LzIu OTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKCgoKCgoKIAoKCiMgMTkgIi91c3IvbGliL2djYy1s aWIvYXJtLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCiAKCgogCgoKCgoKIAoK CiMgNjEgIi91c3IvbGliL2djYy1saWIvYXJtLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5o IiAzCgoKIAoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCiAKCiAKCgojIDEyNiAiL3Vz ci9saWIvZ2NjLWxpYi9hcm0tbGludXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgoK CgogCgogCgoKIyAxODggIi91c3IvbGliL2djYy1saWIvYXJtLWxpbnV4LzIuOTUuMy9pbmNsdWRl L3N0ZGRlZi5oIiAzCgoKCgoKIAoKCgoKIAoKCiMgMjY5ICIvdXNyL2xpYi9nY2MtbGliL2FybS1s aW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKCgoKCgoKCgoKCgoKIAoKIAoKIyAz MTcgIi91c3IvbGliL2djYy1saWIvYXJtLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAz CgoKCgogCgoKCgoKCgoKCgoKCgogCgoKCgoKCgojIDE0ICIvdXNyL2xpYi9nY2MtbGliL2FybS1s aW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vYXJtLWxpbnV4L2luY2x1ZGUvX0dfY29uZmlnLmgiIDIg MwoKCgoKCgoKCgoKCgoKCgoKCgoKCgp0eXBlZGVmIGludCBfR19pbnQxNl90IF9fYXR0cmlidXRl X18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIGludCBfR19pbnQzMl90IF9fYXR0cmli dXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCBfR191aW50 MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiB1bnNpZ25l ZCBpbnQgX0dfdWludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7CgoK CgogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCiAKCgoKCgoKCgoKCgoKCgojIDMwICIvdXNyL2xp Yi9nY2MtbGliL2FybS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vYXJtLWxpbnV4L2luY2x1ZGUv bGliaW8uaCIgMiAzCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKIyA2NyAiL3Vzci9saWIvZ2Nj LWxpYi9hcm0tbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2FybS1saW51eC9pbmNsdWRlL2xpYmlv LmgiIDMKCgogCgoKCgoKCgoKCgoKCgoKCgoKIyA5OCAiL3Vzci9saWIvZ2NjLWxpYi9hcm0tbGlu dXgvMi45NS4zLy4uLy4uLy4uLy4uL2FybS1saW51eC9pbmNsdWRlL2xpYmlvLmgiIDMKCgoKCgoK CgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCnN0cnVj dCBfSU9fanVtcF90OyAgc3RydWN0IF9JT19GSUxFOwoKIAoKCgoKCgoKdHlwZWRlZiB2b2lkIF9J T19sb2NrX3Q7CgoKCiAKCnN0cnVjdCBfSU9fbWFya2VyIHsKICBzdHJ1Y3QgX0lPX21hcmtlciAq X25leHQ7CiAgc3RydWN0IF9JT19GSUxFICpfc2J1ZjsKICAgCgogICAKICBpbnQgX3BvczsKIyAx ODYgIi91c3IvbGliL2djYy1saWIvYXJtLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9hcm0tbGlu dXgvaW5jbHVkZS9saWJpby5oIiAzCgp9OwoKc3RydWN0IF9JT19GSUxFIHsKICBpbnQgX2ZsYWdz OwkJIAoKCiAgIAogICAKICBjaGFyKiBfSU9fcmVhZF9wdHI7CSAKICBjaGFyKiBfSU9fcmVhZF9l bmQ7CSAKICBjaGFyKiBfSU9fcmVhZF9iYXNlOwkgCiAgY2hhciogX0lPX3dyaXRlX2Jhc2U7CSAK ICBjaGFyKiBfSU9fd3JpdGVfcHRyOwkgCiAgY2hhciogX0lPX3dyaXRlX2VuZDsJIAogIGNoYXIq IF9JT19idWZfYmFzZTsJIAogIGNoYXIqIF9JT19idWZfZW5kOwkgCiAgIAogIGNoYXIgKl9JT19z YXZlX2Jhc2U7ICAKICBjaGFyICpfSU9fYmFja3VwX2Jhc2U7ICAgCiAgY2hhciAqX0lPX3NhdmVf ZW5kOyAgCgogIHN0cnVjdCBfSU9fbWFya2VyICpfbWFya2VyczsKCiAgc3RydWN0IF9JT19GSUxF ICpfY2hhaW47CgogIGludCBfZmlsZW5vOwogIGludCBfYmxrc2l6ZTsKICBfX29mZl90ICAgX29s ZF9vZmZzZXQ7ICAKCgogICAKICB1bnNpZ25lZCBzaG9ydCBfY3VyX2NvbHVtbjsKICBzaWduZWQg Y2hhciBfdnRhYmxlX29mZnNldDsKICBjaGFyIF9zaG9ydGJ1ZlsxXTsKCiAgIAoKICBfSU9fbG9j a190ICpfbG9jazsKCgoKCgoKCgogIF9fb2ZmNjRfdCAgIF9vZmZzZXQ7CiAgIAogIGludCBfdW51 c2VkMlsxNl07Cgp9OwoKCnR5cGVkZWYgc3RydWN0IF9JT19GSUxFIF9JT19GSUxFOwoKCnN0cnVj dCBfSU9fRklMRV9wbHVzOwpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRp bl87CmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZG91dF87CmV4dGVybiBz dHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZGVycl87CgoKCgoKCgoKCgoKIAoKIAoKdHlw ZWRlZiBfX3NzaXplX3QgX19pb19yZWFkX2ZuICAodm9pZCAqICBfX2Nvb2tpZSwgY2hhciAqX19i dWYsCgkJCQkgICAgICAgc2l6ZV90IF9fbmJ5dGVzKSAgOwoKIAoKCgoKCnR5cGVkZWYgX19zc2l6 ZV90IF9faW9fd3JpdGVfZm4gICh2b2lkICogIF9fY29va2llLCBfX2NvbnN0IGNoYXIgKl9fYnVm LAoJCQkJICAgICAgc2l6ZV90IF9fbikgIDsKCiAKCgoKCgp0eXBlZGVmIGludCBfX2lvX3NlZWtf Zm4gICh2b2lkICogIF9fY29va2llLCBfX29mZl90ICAgX19wb3MsIGludCBfX3cpICA7CgogCnR5 cGVkZWYgaW50IF9faW9fY2xvc2VfZm4gICh2b2lkICogIF9fY29va2llKSAgOwoKCgogCnR5cGVk ZWYgX19pb19yZWFkX2ZuIGNvb2tpZV9yZWFkX2Z1bmN0aW9uX3Q7CnR5cGVkZWYgX19pb193cml0 ZV9mbiBjb29raWVfd3JpdGVfZnVuY3Rpb25fdDsKdHlwZWRlZiBfX2lvX3NlZWtfZm4gY29va2ll X3NlZWtfZnVuY3Rpb25fdDsKdHlwZWRlZiBfX2lvX2Nsb3NlX2ZuIGNvb2tpZV9jbG9zZV9mdW5j dGlvbl90OwoKIAp0eXBlZGVmIHN0cnVjdAp7CiAgX19pb19yZWFkX2ZuICpyZWFkOwkJIAogIF9f aW9fd3JpdGVfZm4gKndyaXRlOwkJIAogIF9faW9fc2Vla19mbiAqc2VlazsJCSAKICBfX2lvX2Ns b3NlX2ZuICpjbG9zZTsJCSAKfSBfSU9fY29va2llX2lvX2Z1bmN0aW9uc190Owp0eXBlZGVmIF9J T19jb29raWVfaW9fZnVuY3Rpb25zX3QgY29va2llX2lvX2Z1bmN0aW9uc190OwoKIApzdHJ1Y3Qg X0lPX2Nvb2tpZV9maWxlCnsKICBzdHJ1Y3QgX0lPX0ZJTEUgX19maWxlOwogIGNvbnN0IHZvaWQg Kl9fdnRhYmxlOwogIHZvaWQgKl9fY29va2llOwogIF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3Qg X19pb19mdW5jdGlvbnM7Cn07CgoKCgoKCgpleHRlcm4gaW50IF9fdW5kZXJmbG93ICAoX0lPX0ZJ TEUgKikgICAgOwpleHRlcm4gaW50IF9fdWZsb3cgIChfSU9fRklMRSAqKSAgICA7CmV4dGVybiBp bnQgX19vdmVyZmxvdyAgKF9JT19GSUxFICosIGludCkgICAgOwoKCgoKCgoKCgoKCgoKCgoKZXh0 ZXJuIGludCBfSU9fZ2V0YyAgKF9JT19GSUxFICpfX2ZwKSAgICA7CmV4dGVybiBpbnQgX0lPX3B1 dGMgIChpbnQgX19jLCBfSU9fRklMRSAqX19mcCkgICAgOwpleHRlcm4gaW50IF9JT19mZW9mICAo X0lPX0ZJTEUgKl9fZnApICAgIDsKZXh0ZXJuIGludCBfSU9fZmVycm9yICAoX0lPX0ZJTEUgKl9f ZnApICAgIDsKCmV4dGVybiBpbnQgX0lPX3BlZWtjX2xvY2tlZCAgKF9JT19GSUxFICpfX2ZwKSAg ICA7CgogCgoKCmV4dGVybiB2b2lkIF9JT19mbG9ja2ZpbGUgIChfSU9fRklMRSAqKSAgICA7CmV4 dGVybiB2b2lkIF9JT19mdW5sb2NrZmlsZSAgKF9JT19GSUxFICopICAgIDsKZXh0ZXJuIGludCBf SU9fZnRyeWxvY2tmaWxlICAoX0lPX0ZJTEUgKikgICAgOwoKCgoKCgoKCgoKCgpleHRlcm4gaW50 IF9JT192ZnNjYW5mICAoX0lPX0ZJTEUgKiBfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICogX19yZXN0 cmljdCwKCQkJICAgICBfX2dudWNfdmFfbGlzdCAsIGludCAqX19yZXN0cmljdCkgICAgOwpleHRl cm4gaW50IF9JT192ZnByaW50ZiAgKF9JT19GSUxFICpfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICpf X3Jlc3RyaWN0LAoJCQkgICAgICBfX2dudWNfdmFfbGlzdCApICAgIDsKZXh0ZXJuIF9fc3NpemVf dCAgIF9JT19wYWRuICAoX0lPX0ZJTEUgKiwgaW50LCBfX3NzaXplX3QgICkgICAgOwpleHRlcm4g c2l6ZV90ICAgX0lPX3NnZXRuICAoX0lPX0ZJTEUgKiwgdm9pZCAqLCBzaXplX3QgICkgICAgOwoK ZXh0ZXJuIF9fb2ZmNjRfdCAgIF9JT19zZWVrb2ZmICAoX0lPX0ZJTEUgKiwgX19vZmY2NF90ICAs IGludCwgaW50KSAgICA7CmV4dGVybiBfX29mZjY0X3QgICBfSU9fc2Vla3BvcyAgKF9JT19GSUxF ICosIF9fb2ZmNjRfdCAgLCBpbnQpICAgIDsKCmV4dGVybiB2b2lkIF9JT19mcmVlX2JhY2t1cF9h cmVhICAoX0lPX0ZJTEUgKikgICAgOwoKCgoKCgojIDU3ICIvdXNyL2xpYi9nY2MtbGliL2FybS1s aW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vYXJtLWxpbnV4L2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoK IAoKdHlwZWRlZiBfX29mZl90ICBmcG9zX3Q7CgoKCgp0eXBlZGVmIF9fb2ZmNjRfdCAgZnBvczY0 X3Q7CgoKIAoKCgoKCiAKCgoKCgogCgoKCgoKCiAKCgoKCgoKCiAKCgoKCiAKCgoKCgoKCgojIDEg Ii91c3IvbGliL2djYy1saWIvYXJtLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9hcm0tbGludXgv aW5jbHVkZS9iaXRzL3N0ZGlvX2xpbS5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgojIDExMCAiL3Vzci9saWIvZ2NjLWxpYi9hcm0tbGludXgvMi45NS4zLy4uLy4u Ly4uLy4uL2FybS1saW51eC9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKCgogCmV4dGVybiBGSUxFICpz dGRpbjsJCSAKZXh0ZXJuIEZJTEUgKnN0ZG91dDsJCSAKZXh0ZXJuIEZJTEUgKnN0ZGVycjsJCSAK IAoKCgoKCiAKZXh0ZXJuIGludCByZW1vdmUgIChfX2NvbnN0IGNoYXIgKl9fZmlsZW5hbWUpICAg IDsKIApleHRlcm4gaW50IHJlbmFtZSAgKF9fY29uc3QgY2hhciAqX19vbGQsIF9fY29uc3QgY2hh ciAqX19uZXcpICAgIDsKCgogCgpleHRlcm4gRklMRSAqdG1wZmlsZSAgKHZvaWQpICAgIDsKCgoK CgoKCgpleHRlcm4gRklMRSAqdG1wZmlsZTY0ICAodm9pZCkgICAgOwoKIApleHRlcm4gY2hhciAq dG1wbmFtICAoY2hhciAqX19zKSAgICA7CgoKIAoKZXh0ZXJuIGNoYXIgKnRtcG5hbV9yICAoY2hh ciAqX19zKSAgICA7CgoKCgogCgoKCgoKCmV4dGVybiBjaGFyICp0ZW1wbmFtICAoX19jb25zdCBj aGFyICpfX2RpciwgX19jb25zdCBjaGFyICpfX3BmeCkgICAgOwoKCgogCmV4dGVybiBpbnQgZmNs b3NlICAoRklMRSAqX19zdHJlYW0pICAgIDsKIApleHRlcm4gaW50IGZmbHVzaCAgKEZJTEUgKl9f c3RyZWFtKSAgICA7CgoKIApleHRlcm4gaW50IGZmbHVzaF91bmxvY2tlZCAgKEZJTEUgKl9fc3Ry ZWFtKSAgICA7CgoKCiAKZXh0ZXJuIGludCBmY2xvc2VhbGwgICh2b2lkKSAgICA7CgoKCgogCmV4 dGVybiBGSUxFICpmb3BlbiAgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLAoJ CQkgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMpICAgIDsKIApleHRlcm4gRklMRSAq ZnJlb3BlbiAgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLAoJCQkgICBfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcywKCQkJICAgRklMRSAqX19yZXN0cmljdCBfX3N0 cmVhbSkgICAgOwojIDIwMSAiL3Vzci9saWIvZ2NjLWxpYi9hcm0tbGludXgvMi45NS4zLy4uLy4u Ly4uLy4uL2FybS1saW51eC9pbmNsdWRlL3N0ZGlvLmgiIDMKCgpleHRlcm4gRklMRSAqZm9wZW42 NCAgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLAoJCQkgICBfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19tb2RlcykgICAgOwpleHRlcm4gRklMRSAqZnJlb3BlbjY0ICAoX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsCgkJCSAgICAgX19jb25zdCBjaGFyICpf X3Jlc3RyaWN0IF9fbW9kZXMsCgkJCSAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgICAg OwoKCgogCmV4dGVybiBGSUxFICpmZG9wZW4gIChpbnQgX19mZCwgX19jb25zdCBjaGFyICpfX21v ZGVzKSAgICA7CgoKCiAKCmV4dGVybiBGSUxFICpmb3BlbmNvb2tpZSAgKHZvaWQgKl9fcmVzdHJp Y3QgX19tYWdpY19jb29raWUsCgkJCSAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19t b2RlcywKCQkJICAgICAgIF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3QgX19pb19mdW5jcykgICAg OwoKIAoKCmV4dGVybiBGSUxFICpvcGVuX21lbXN0cmVhbSAgKGNoYXIgKipfX3Jlc3RyaWN0IF9f YnVmbG9jLAoJCQkJICBzaXplX3QgKl9fcmVzdHJpY3QgX19zaXplbG9jKSAgICA7CgoKCiAKCmV4 dGVybiB2b2lkIHNldGJ1ZiAgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGNoYXIgKl9fcmVz dHJpY3QgX19idWYpICAgIDsKIAoKCmV4dGVybiBpbnQgc2V0dmJ1ZiAgKEZJTEUgKl9fcmVzdHJp Y3QgX19zdHJlYW0sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCgkJCSBpbnQgX19tb2Rlcywgc2l6 ZV90IF9fbikgICAgOwoKCiAKCmV4dGVybiB2b2lkIHNldGJ1ZmZlciAgKEZJTEUgKl9fcmVzdHJp Y3QgX19zdHJlYW0sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCgkJCSAgICBzaXplX3QgX19zaXpl KSAgICA7CgogCmV4dGVybiB2b2lkIHNldGxpbmVidWYgIChGSUxFICpfX3N0cmVhbSkgICAgOwoK CgogCmV4dGVybiBpbnQgZnByaW50ZiAgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sCgkJCSBf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgICAgOwogCmV4dGVybiBpbnQg cHJpbnRmICAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pICAgIDsKIApl eHRlcm4gaW50IHNwcmludGYgIChjaGFyICpfX3Jlc3RyaWN0IF9fcywKCQkJIF9fY29uc3QgY2hh ciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSAgICA7CgogCmV4dGVybiBpbnQgdmZwcmludGYg IChGSUxFICpfX3Jlc3RyaWN0IF9fcywKCQkJICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19m b3JtYXQsCgkJCSAgX19nbnVjX3ZhX2xpc3QgIF9fYXJnKSAgICA7CiAKZXh0ZXJuIGludCB2cHJp bnRmICAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAoJCQkgX19nbnVjX3ZhX2xp c3QgIF9fYXJnKSAgICA7CiAKZXh0ZXJuIGludCB2c3ByaW50ZiAgKGNoYXIgKl9fcmVzdHJpY3Qg X19zLAoJCQkgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKCQkJICBfX2dudWNf dmFfbGlzdCAgX19hcmcpICAgIDsKCgogCmV4dGVybiBpbnQgc25wcmludGYgIChjaGFyICpfX3Jl c3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLAoJCQkgIF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX2Zvcm1hdCwgLi4uKSAgICAKICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19w cmludGZfXywgMywgNCkpKTsKCmV4dGVybiBpbnQgX192c25wcmludGYgIChjaGFyICpfX3Jlc3Ry aWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLAoJCQkgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX2Zvcm1hdCwKCQkJICAgICBfX2dudWNfdmFfbGlzdCAgX19hcmcpICAgIAogICAgIF9fYXR0 cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAzLCAwKSkpOwpleHRlcm4gaW50IHZz bnByaW50ZiAgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhsZW4sCgkJCSAgIF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKCQkJICAgX19nbnVjX3ZhX2xpc3QgIF9f YXJnKSAgICAKICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMywg MCkpKTsKCgoKIAoKZXh0ZXJuIGludCB2YXNwcmludGYgIChjaGFyICoqX19yZXN0cmljdCBfX3B0 ciwKCQkJICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZiwgX19nbnVjX3ZhX2xpc3QgIF9f YXJnKSAgICAKICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwg MCkpKTsKZXh0ZXJuIGludCBfX2FzcHJpbnRmICAoY2hhciAqKl9fcmVzdHJpY3QgX19wdHIsCgkJ CSAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIC4uLikgICAgCiAgICAgX19hdHRy aWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDMpKSk7CmV4dGVybiBpbnQgYXNw cmludGYgIChjaGFyICoqX19yZXN0cmljdCBfX3B0ciwKCQkJICBfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19mbXQsIC4uLikgICAgCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9f cHJpbnRmX18sIDIsIDMpKSk7CgogCmV4dGVybiBpbnQgdmRwcmludGYgIChpbnQgX19mZCwgX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LAoJCQkgIF9fZ251Y192YV9saXN0ICBfX2FyZykg ICAgCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDApKSk7 CmV4dGVybiBpbnQgZHByaW50ZiAgKGludCBfX2ZkLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg X19mbXQsIC4uLikgICAgCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRm X18sIDIsIDMpKSk7CgoKCiAKZXh0ZXJuIGludCBmc2NhbmYgIChGSUxFICpfX3Jlc3RyaWN0IF9f c3RyZWFtLAoJCQlfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgICAgOwog CmV4dGVybiBpbnQgc2NhbmYgIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4u LikgICAgOwogCmV4dGVybiBpbnQgc3NjYW5mICAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f cywKCQkJX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pICAgIDsKCgogCmV4 dGVybiBpbnQgdmZzY2FuZiAgKEZJTEUgKl9fcmVzdHJpY3QgX19zLAoJCQkgX19jb25zdCBjaGFy ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAoJCQkgX19nbnVjX3ZhX2xpc3QgIF9fYXJnKSAgICAKICAg ICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19zY2FuZl9fLCAyLCAwKSkpOwoKIApleHRl cm4gaW50IHZzY2FuZiAgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVj X3ZhX2xpc3QgIF9fYXJnKSAgICAKICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19z Y2FuZl9fLCAxLCAwKSkpOwoKIApleHRlcm4gaW50IHZzc2NhbmYgIChfX2NvbnN0IGNoYXIgKl9f cmVzdHJpY3QgX19zLAoJCQkgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAoJCQkg X19nbnVjX3ZhX2xpc3QgIF9fYXJnKSAgICAKICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRf XyAoX19zY2FuZl9fLCAyLCAwKSkpOwoKCgogCmV4dGVybiBpbnQgZmdldGMgIChGSUxFICpfX3N0 cmVhbSkgICAgOwpleHRlcm4gaW50IGdldGMgIChGSUxFICpfX3N0cmVhbSkgICAgOwoKIApleHRl cm4gaW50IGdldGNoYXIgICh2b2lkKSAgICA7CgogCgoKCgogCmV4dGVybiBpbnQgZ2V0Y191bmxv Y2tlZCAgKEZJTEUgKl9fc3RyZWFtKSAgICA7CmV4dGVybiBpbnQgZ2V0Y2hhcl91bmxvY2tlZCAg KHZvaWQpICAgIDsKCgoKIApleHRlcm4gaW50IGZnZXRjX3VubG9ja2VkICAoRklMRSAqX19zdHJl YW0pICAgIDsKCgoKIApleHRlcm4gaW50IGZwdXRjICAoaW50IF9fYywgRklMRSAqX19zdHJlYW0p ICAgIDsKZXh0ZXJuIGludCBwdXRjICAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pICAgIDsKCiAK ZXh0ZXJuIGludCBwdXRjaGFyICAoaW50IF9fYykgICAgOwoKIAoKCgoKIApleHRlcm4gaW50IGZw dXRjX3VubG9ja2VkICAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pICAgIDsKCgoKIApleHRlcm4g aW50IHB1dGNfdW5sb2NrZWQgIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgICAgOwpleHRlcm4g aW50IHB1dGNoYXJfdW5sb2NrZWQgIChpbnQgX19jKSAgICA7CgoKCgogCmV4dGVybiBpbnQgZ2V0 dyAgKEZJTEUgKl9fc3RyZWFtKSAgICA7CgogCmV4dGVybiBpbnQgcHV0dyAgKGludCBfX3csIEZJ TEUgKl9fc3RyZWFtKSAgICA7CgoKCiAKZXh0ZXJuIGNoYXIgKmZnZXRzICAoY2hhciAqX19yZXN0 cmljdCBfX3MsIGludCBfX24sCgkJCSBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSAgICA7CgoK IApleHRlcm4gY2hhciAqZmdldHNfdW5sb2NrZWQgIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgaW50 IF9fbiwKCQkJCSAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgICAgOwoKCiAKCmV4dGVybiBj aGFyICpnZXRzICAoY2hhciAqX19zKSAgICA7CgoKCiAKCgoKCmV4dGVybiBfX3NzaXplX3QgICBf X2dldGRlbGltICAoY2hhciAqKl9fcmVzdHJpY3QgX19saW5lcHRyLAoJCQkJICAgIHNpemVfdCAq X19yZXN0cmljdCBfX24sIGludCBfX2RlbGltaXRlciwKCQkJCSAgICBGSUxFICpfX3Jlc3RyaWN0 IF9fc3RyZWFtKSAgICA7CmV4dGVybiBfX3NzaXplX3QgICBnZXRkZWxpbSAgKGNoYXIgKipfX3Jl c3RyaWN0IF9fbGluZXB0ciwKCQkJCSAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fbiwgaW50IF9fZGVs aW1pdGVyLAoJCQkJICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSAgICA7CgogCmV4dGVybiBf X3NzaXplX3QgICBnZXRsaW5lICAoY2hhciAqKl9fcmVzdHJpY3QgX19saW5lcHRyLAoJCQkJIHNp emVfdCAqX19yZXN0cmljdCBfX24sCgkJCQkgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgICAg OwoKCgogCmV4dGVybiBpbnQgZnB1dHMgIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLAoJ CSAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSAgICA7CgoKIApleHRlcm4gaW50IGZw dXRzX3VubG9ja2VkICAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywKCQkJCUZJTEUgKl9f cmVzdHJpY3QgX19zdHJlYW0pICAgIDsKCgogCmV4dGVybiBpbnQgcHV0cyAgKF9fY29uc3QgY2hh ciAqX19zKSAgICA7CgoKIApleHRlcm4gaW50IHVuZ2V0YyAgKGludCBfX2MsIEZJTEUgKl9fc3Ry ZWFtKSAgICA7CgoKIApleHRlcm4gc2l6ZV90IGZyZWFkICAodm9pZCAqX19yZXN0cmljdCBfX3B0 ciwgc2l6ZV90IF9fc2l6ZSwKCQkJICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3Ry ZWFtKSAgICA7CiAKZXh0ZXJuIHNpemVfdCBmd3JpdGUgIChfX2NvbnN0IHZvaWQgKl9fcmVzdHJp Y3QgX19wdHIsIHNpemVfdCBfX3NpemUsCgkJCSAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJp Y3QgX19zKSAgICA7CgoKIApleHRlcm4gc2l6ZV90IGZyZWFkX3VubG9ja2VkICAodm9pZCAqX19y ZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKCQkJCSAgIHNpemVfdCBfX24sIEZJTEUgKl9f cmVzdHJpY3QgX19zdHJlYW0pICAgIDsKZXh0ZXJuIHNpemVfdCBmd3JpdGVfdW5sb2NrZWQgIChf X2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsCgkJCQkgICAgc2l6ZV90IF9fc2l6ZSwgc2l6 ZV90IF9fbiwKCQkJCSAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSAgICA7CgoKCiAKZXh0 ZXJuIGludCBmc2VlayAgKEZJTEUgKl9fc3RyZWFtLCBsb25nIGludCBfX29mZiwgaW50IF9fd2hl bmNlKSAgICA7CiAKZXh0ZXJuIGxvbmcgaW50IGZ0ZWxsICAoRklMRSAqX19zdHJlYW0pICAgIDsK IApleHRlcm4gdm9pZCByZXdpbmQgIChGSUxFICpfX3N0cmVhbSkgICAgOwoKIAoKCgoKIAoKCgoK CgoKCgoKCgoKCgoKCiAKZXh0ZXJuIGludCBmc2Vla28gIChGSUxFICpfX3N0cmVhbSwgX19vZmZf dCBfX29mZiwgaW50IF9fd2hlbmNlKSAgICA7CiAKZXh0ZXJuIF9fb2ZmX3QgZnRlbGxvICAoRklM RSAqX19zdHJlYW0pICAgIDsKCgogCmV4dGVybiBpbnQgZmdldHBvcyAgKEZJTEUgKl9fcmVzdHJp Y3QgX19zdHJlYW0sCgkJCSBmcG9zX3QgKl9fcmVzdHJpY3QgX19wb3MpICAgIDsKIApleHRlcm4g aW50IGZzZXRwb3MgIChGSUxFICpfX3N0cmVhbSwgX19jb25zdCBmcG9zX3QgKl9fcG9zKSAgICA7 CiMgNTIzICIvdXNyL2xpYi9nY2MtbGliL2FybS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vYXJt LWxpbnV4L2luY2x1ZGUvc3RkaW8uaCIgMwoKCgoKZXh0ZXJuIGludCBmc2Vla282NCAgKEZJTEUg Kl9fc3RyZWFtLCBfX29mZjY0X3QgX19vZmYsIGludCBfX3doZW5jZSkgICAgOwpleHRlcm4gX19v ZmY2NF90IGZ0ZWxsbzY0ICAoRklMRSAqX19zdHJlYW0pICAgIDsKCmV4dGVybiBpbnQgZmdldHBv czY0ICAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwKCQkJICAgZnBvczY0X3QgKl9fcmVzdHJp Y3QgX19wb3MpICAgIDsKZXh0ZXJuIGludCBmc2V0cG9zNjQgIChGSUxFICpfX3N0cmVhbSwgX19j b25zdCBmcG9zNjRfdCAqX19wb3MpICAgIDsKCgogCmV4dGVybiB2b2lkIGNsZWFyZXJyICAoRklM RSAqX19zdHJlYW0pICAgIDsKIApleHRlcm4gaW50IGZlb2YgIChGSUxFICpfX3N0cmVhbSkgICAg OwogCmV4dGVybiBpbnQgZmVycm9yICAoRklMRSAqX19zdHJlYW0pICAgIDsKCgogCmV4dGVybiB2 b2lkIGNsZWFyZXJyX3VubG9ja2VkICAoRklMRSAqX19zdHJlYW0pICAgIDsKZXh0ZXJuIGludCBm ZW9mX3VubG9ja2VkICAoRklMRSAqX19zdHJlYW0pICAgIDsKZXh0ZXJuIGludCBmZXJyb3JfdW5s b2NrZWQgIChGSUxFICpfX3N0cmVhbSkgICAgOwoKCgogCmV4dGVybiB2b2lkIHBlcnJvciAgKF9f Y29uc3QgY2hhciAqX19zKSAgICA7CgogCgoKZXh0ZXJuIGludCBzeXNfbmVycjsKZXh0ZXJuIF9f Y29uc3QgY2hhciAqX19jb25zdCBzeXNfZXJybGlzdFtdOwoKCmV4dGVybiBpbnQgX3N5c19uZXJy OwpleHRlcm4gX19jb25zdCBjaGFyICpfX2NvbnN0IF9zeXNfZXJybGlzdFtdOwoKCgoKIApleHRl cm4gaW50IGZpbGVubyAgKEZJTEUgKl9fc3RyZWFtKSAgICA7CgoKCiAKZXh0ZXJuIGludCBmaWxl bm9fdW5sb2NrZWQgIChGSUxFICpfX3N0cmVhbSkgICAgOwoKCgoKCiAKZXh0ZXJuIEZJTEUgKnBv cGVuICAoX19jb25zdCBjaGFyICpfX2NvbW1hbmQsIF9fY29uc3QgY2hhciAqX19tb2RlcykgICAg OwoKIApleHRlcm4gaW50IHBjbG9zZSAgKEZJTEUgKl9fc3RyZWFtKSAgICA7CgoKCgogCmV4dGVy biBjaGFyICpjdGVybWlkICAoY2hhciAqX19zKSAgICA7CgoKCgogCmV4dGVybiBjaGFyICpjdXNl cmlkICAoY2hhciAqX19zKSAgICA7CgoKCgpzdHJ1Y3Qgb2JzdGFjazsJCQkgCgogCmV4dGVybiBp bnQgb2JzdGFja19wcmludGYgIChzdHJ1Y3Qgb2JzdGFjayAqX19yZXN0cmljdCBfX29ic3RhY2ss CgkJCQlfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgICAgOwpleHRlcm4g aW50IG9ic3RhY2tfdnByaW50ZiAgKHN0cnVjdCBvYnN0YWNrICpfX3Jlc3RyaWN0IF9fb2JzdGFj aywKCQkJCSBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCgkJCQkgX19nbnVjX3Zh X2xpc3QgIF9fYXJncykgICAgOwoKCgoKIAoKIApleHRlcm4gdm9pZCBmbG9ja2ZpbGUgIChGSUxF ICpfX3N0cmVhbSkgICAgOwoKIAoKZXh0ZXJuIGludCBmdHJ5bG9ja2ZpbGUgIChGSUxFICpfX3N0 cmVhbSkgICAgOwoKIApleHRlcm4gdm9pZCBmdW5sb2NrZmlsZSAgKEZJTEUgKl9fc3RyZWFtKSAg ICA7CgoKCgoKCgoKCgogCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2FybS1saW51eC8yLjk1LjMv Li4vLi4vLi4vLi4vYXJtLWxpbnV4L2luY2x1ZGUvYml0cy9zdGRpby5oIiAxIDMKIAoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKZXh0ZXJuIF9faW5saW5lICBpbnQKdnByaW50ZiAoX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCBfX2dudWNfdmFfbGlzdCAgX19hcmcpICAKewog IHJldHVybiB2ZnByaW50ZiAoc3Rkb3V0ICwgX19mbXQsIF9fYXJnKTsKfQoKIApleHRlcm4gX19p bmxpbmUgIGludApnZXRjaGFyICh2b2lkKSAgCnsKICByZXR1cm4gX0lPX2dldGMgKHN0ZGluICk7 Cn0KCgoKIApleHRlcm4gX19pbmxpbmUgIGludApnZXRjX3VubG9ja2VkIChGSUxFICpfX2ZwKSAg CnsKICByZXR1cm4gKCggX19mcCApLT5fSU9fcmVhZF9wdHIgPj0gKCBfX2ZwICktPl9JT19yZWFk X2VuZCA/IF9fdWZsb3cgKCBfX2ZwICkgOiAqKHVuc2lnbmVkIGNoYXIgKikgKCBfX2ZwICktPl9J T19yZWFkX3B0cisrKSA7Cn0KCiAKZXh0ZXJuIF9faW5saW5lICBpbnQKZ2V0Y2hhcl91bmxvY2tl ZCAodm9pZCkgIAp7CiAgcmV0dXJuICgoIHN0ZGluICApLT5fSU9fcmVhZF9wdHIgPj0gKCBzdGRp biAgKS0+X0lPX3JlYWRfZW5kID8gX191ZmxvdyAoIHN0ZGluICApIDogKih1bnNpZ25lZCBjaGFy ICopICggc3RkaW4gICktPl9JT19yZWFkX3B0cisrKSA7Cn0KCgoKIApleHRlcm4gX19pbmxpbmUg IGludApwdXRjaGFyIChpbnQgX19jKSAgCnsKICByZXR1cm4gX0lPX3B1dGMgKF9fYywgc3Rkb3V0 ICk7Cn0KCgoKIApleHRlcm4gX19pbmxpbmUgIGludApmcHV0Y191bmxvY2tlZCAoaW50IF9fYywg RklMRSAqX19zdHJlYW0pICAKewogIHJldHVybiAoKCggIF9fc3RyZWFtICktPl9JT193cml0ZV9w dHIgPj0gKCAgX19zdHJlYW0gKS0+X0lPX3dyaXRlX2VuZCkgPyBfX292ZXJmbG93ICggIF9fc3Ry ZWFtICwgKHVuc2lnbmVkIGNoYXIpICggX19jICkpIDogKHVuc2lnbmVkIGNoYXIpICgqKCAgX19z dHJlYW0gKS0+X0lPX3dyaXRlX3B0cisrID0gKCBfX2MgKSkpIDsKfQoKCgoKIApleHRlcm4gX19p bmxpbmUgIGludApwdXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgIAp7CiAg cmV0dXJuICgoKCAgX19zdHJlYW0gKS0+X0lPX3dyaXRlX3B0ciA+PSAoICBfX3N0cmVhbSApLT5f SU9fd3JpdGVfZW5kKSA/IF9fb3ZlcmZsb3cgKCAgX19zdHJlYW0gLCAodW5zaWduZWQgY2hhcikg KCBfX2MgKSkgOiAodW5zaWduZWQgY2hhcikgKCooICBfX3N0cmVhbSApLT5fSU9fd3JpdGVfcHRy KysgPSAoIF9fYyApKSkgOwp9CgogCmV4dGVybiBfX2lubGluZSAgaW50CnB1dGNoYXJfdW5sb2Nr ZWQgKGludCBfX2MpICAKewogIHJldHVybiAoKCggIHN0ZG91dCAgKS0+X0lPX3dyaXRlX3B0ciA+ PSAoICBzdGRvdXQgICktPl9JT193cml0ZV9lbmQpID8gX19vdmVyZmxvdyAoICBzdGRvdXQgICwg KHVuc2lnbmVkIGNoYXIpICggX19jICkpIDogKHVuc2lnbmVkIGNoYXIpICgqKCAgc3Rkb3V0ICAp LT5fSU9fd3JpdGVfcHRyKysgPSAoIF9fYyApKSkgOwp9CgoKCgogCmV4dGVybiBfX2lubGluZSAg X19zc2l6ZV90ICAKZ2V0bGluZSAoY2hhciAqKl9fbGluZXB0ciwgc2l6ZV90ICpfX24sIEZJTEUg Kl9fc3RyZWFtKSAgCnsKICByZXR1cm4gX19nZXRkZWxpbSAoX19saW5lcHRyLCBfX24sICdcbics IF9fc3RyZWFtKTsKfQoKCgoKIApleHRlcm4gX19pbmxpbmUgIGludApmZW9mX3VubG9ja2VkIChG SUxFICpfX3N0cmVhbSkgIAp7CiAgcmV0dXJuICgoKCBfX3N0cmVhbSApLT5fZmxhZ3MgJiAweDEw ICkgIT0gMCkgOwp9CgogCmV4dGVybiBfX2lubGluZSAgaW50CmZlcnJvcl91bmxvY2tlZCAoRklM RSAqX19zdHJlYW0pICAKewogIHJldHVybiAoKCggX19zdHJlYW0gKS0+X2ZsYWdzICYgMHgyMCAp ICE9IDApIDsKfQoKCgoKCgogCgojIDE0OSAiL3Vzci9saWIvZ2NjLWxpYi9hcm0tbGludXgvMi45 NS4zLy4uLy4uLy4uLy4uL2FybS1saW51eC9pbmNsdWRlL2JpdHMvc3RkaW8uaCIgMwoKCiMgMTY1 ICIvdXNyL2xpYi9nY2MtbGliL2FybS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vYXJtLWxpbnV4 L2luY2x1ZGUvYml0cy9zdGRpby5oIiAzCgoKIAoKIyA2MzUgIi91c3IvbGliL2djYy1saWIvYXJt LWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9hcm0tbGludXgvaW5jbHVkZS9zdGRpby5oIiAyIDMK CgoKIAoKCgoKIyAyMDMgIi4uLy4uL2luY2x1ZGUvbWlzYy5oIiAyCgoKCgogCgoKCgoKCgoKCgoK CgoKCgogCgoKCgoKCgoKIAoKCgoKCiAKCgoKCgoKIAoKCgoKZXh0ZXJuIHZvaWQgU3dhcExvbmdz KAoKICAgIENBUkQzMiAqbGlzdCwKICAgIHVuc2lnbmVkIGxvbmcgY291bnQKCik7CgpleHRlcm4g dm9pZCBTd2FwU2hvcnRzKAoKICAgIHNob3J0ICpsaXN0LAogICAgdW5zaWduZWQgbG9uZyBjb3Vu dAoKKTsKCmV4dGVybiB2b2lkIE1ha2VQcmVkZWNsYXJlZEF0b21zKAoKICAgIHZvaWQKCik7Cgpl eHRlcm4gaW50IE9uZXMoCgogICAgdW5zaWduZWQgbG9uZyAgCgopOwoKdHlwZWRlZiBzdHJ1Y3Qg X3hQb2ludCAqRERYUG9pbnRQdHI7CnR5cGVkZWYgc3RydWN0IF9Cb3ggKkJveFB0cjsKdHlwZWRl ZiBzdHJ1Y3QgX3hFdmVudCAqeEV2ZW50UHRyOwp0eXBlZGVmIHN0cnVjdCBfeFJlY3RhbmdsZSAq eFJlY3RhbmdsZVB0cjsKdHlwZWRlZiBzdHJ1Y3QgX0dyYWJSZWMgKkdyYWJQdHI7CgogCgoKCgoK dHlwZWRlZiBzdHJ1Y3QgX0NoYXJJbmZvICpDaGFySW5mb1B0cjsgIAoKCgoKIyA0OCAiLi4vLi4v aW5jbHVkZS9zY3JlZW5pbnQuaCIgMgoKCnR5cGVkZWYgc3RydWN0IF9QaXhtYXBGb3JtYXQgKlBp eG1hcEZvcm1hdFB0cjsKdHlwZWRlZiBzdHJ1Y3QgX1Zpc3VhbCAqVmlzdWFsUHRyOwp0eXBlZGVm IHN0cnVjdCBfRGVwdGggICpEZXB0aFB0cjsKdHlwZWRlZiBzdHJ1Y3QgX1NjcmVlbiAqU2NyZWVu UHRyOwoKZXh0ZXJuIHZvaWQgUmVzZXRTY3JlZW5Qcml2YXRlcygKCiAgICB2b2lkCgopOwoKZXh0 ZXJuIGludCBBbGxvY2F0ZVNjcmVlblByaXZhdGVJbmRleCgKCiAgICB2b2lkCgopOwoKZXh0ZXJu IHZvaWQgUmVzZXRXaW5kb3dQcml2YXRlcygKCiAgICB2b2lkCgopOwoKZXh0ZXJuIGludCBBbGxv Y2F0ZVdpbmRvd1ByaXZhdGVJbmRleCgKCiAgICB2b2lkCgopOwoKZXh0ZXJuIEJvb2wgQWxsb2Nh dGVXaW5kb3dQcml2YXRlKAoKICAgIFNjcmVlblB0ciAgLAogICAgaW50ICAsCiAgICB1bnNpZ25l ZCAgCgopOwoKZXh0ZXJuIHZvaWQgUmVzZXRHQ1ByaXZhdGVzKAoKICAgIHZvaWQKCik7CgpleHRl cm4gaW50IEFsbG9jYXRlR0NQcml2YXRlSW5kZXgoCgogICAgdm9pZAoKKTsKCmV4dGVybiBCb29s IEFsbG9jYXRlR0NQcml2YXRlKAoKICAgIFNjcmVlblB0ciAgLAogICAgaW50ICAsCiAgICB1bnNp Z25lZCAgCgopOwoKZXh0ZXJuIGludCBBZGRTY3JlZW4oCgogICAgQm9vbCAoKiAgKSgKCglpbnQg ICwKCVNjcmVlblB0ciAgLAoJaW50ICAsCgljaGFyICoqICAKCiAgICApLAogICAgaW50ICAsCiAg ICBjaGFyKiogIAoKKTsKCiMgMTQ0ICIuLi8uLi9pbmNsdWRlL3NjcmVlbmludC5oIgoKCmV4dGVy biB2b2lkIFJlc2V0Q29sb3JtYXBQcml2YXRlcygKCiAgICB2b2lkCgopOwoKCnR5cGVkZWYgc3Ry dWN0IF9Db2xvcm1hcFJlYyAqQ29sb3JtYXBQdHI7CnR5cGVkZWYgaW50ICgqSW5pdENtYXBQcml2 RnVuYykoCgoJQ29sb3JtYXBQdHIKCik7CgpleHRlcm4gaW50IEFsbG9jYXRlQ29sb3JtYXBQcml2 YXRlSW5kZXgoCgogICAgSW5pdENtYXBQcml2RnVuYyAgCgopOwoKCiMgNDkgIi4uLy4uL2luY2x1 ZGUvc2NybmludHN0ci5oIiAyCgojIDEgIi4uLy4uL2luY2x1ZGUvbWlzY3N0cnVjdC5oIiAxCiAK IAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgojIDEgIi4u Ly4uLy4uLy4uL2V4cG9ydHMvaW5jbHVkZS9YMTEvWHByb3Rvc3RyLmgiIDEKIAoKCgogCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgp0eXBlZGVmIHN0cnVjdCBf eFNlZ21lbnQgewogICAgSU5UMTYgeDEgICwgeTEgICwgeDIgICwgeTIgIDsKfSB4U2VnbWVudDsK CiAKCnR5cGVkZWYgc3RydWN0IF94UG9pbnQgewoJSU5UMTYJCXggICwgeSAgOwp9IHhQb2ludDsK CnR5cGVkZWYgc3RydWN0IF94UmVjdGFuZ2xlIHsKICAgIElOVDE2IHggICwgeSAgOwogICAgQ0FS RDE2ICB3aWR0aCAgLCBoZWlnaHQgIDsKfSB4UmVjdGFuZ2xlOwoKIAoKdHlwZWRlZiBzdHJ1Y3Qg X3hBcmMgewogICAgSU5UMTYgeCAgLCB5ICA7CiAgICBDQVJEMTYgICB3aWR0aCAgLCBoZWlnaHQg IDsKICAgIElOVDE2ICAgYW5nbGUxICAsIGFuZ2xlMiAgOwp9IHhBcmM7CgoKIyA1MCAiLi4vLi4v aW5jbHVkZS9taXNjc3RydWN0LmgiIDIKCgp0eXBlZGVmIHhQb2ludCBERFhQb2ludFJlYzsKCnR5 cGVkZWYgc3RydWN0IF9Cb3ggewogICAgc2hvcnQgeDEsIHkxLCB4MiwgeTI7Cn0gQm94UmVjOwoK dHlwZWRlZiB1bmlvbiBfRGV2VW5pb24gewogICAgcG9pbnRlcgkJcHRyOwogICAgbG9uZwkJdmFs OwogICAgdW5zaWduZWQgbG9uZwl1dmFsOwogICAgcG9pbnRlcgkJKCpmcHRyKSgKCiAgICAgICAg ICAgICAgICAgICAgICAgIHZvaWQKCiAgICAgICAgICAgICAgICAgICAgICAgICk7Cn0gRGV2VW5p b247CgoKIyA1MCAiLi4vLi4vaW5jbHVkZS9zY3JuaW50c3RyLmgiIDIKCiMgMSAiLi4vLi4vaW5j bHVkZS9ic3RvcmUuaCIgMQogCiAKCgoKCgoKCgoKCiAKCgoKCgoKCiMgMSAiLi4vLi4vaW5jbHVk ZS9ic3RvcmVzdHIuaCIgMQogCiAKCgoKCgoKCgoKCiAKCgoKCgoKCiMgMSAiLi4vLi4vaW5jbHVk ZS9nYy5oIiAxCiAKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAK CgoKCgoKIyAxICIuLi8uLi8uLi8uLi9leHBvcnRzL2luY2x1ZGUvWDExL1hwcm90by5oIiAxCiAK CgoKIAoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnR5cGVkZWYgQ0FSRDE2IEtleUJ1dE1h c2s7CgogCgoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICBDQVJEOAlieXRlT3JkZXI7CiAgICBCWVRF CXBhZDsKICAgIENBUkQxNgltYWpvclZlcnNpb24gICwgbWlub3JWZXJzaW9uICA7CiAgICBDQVJE MTYJbmJ5dGVzQXV0aFByb3RvICA7CSAKICAgIENBUkQxNgluYnl0ZXNBdXRoU3RyaW5nICA7CSAK ICAgIENBUkQxNglwYWQyICA7Cn0geENvbm5DbGllbnRQcmVmaXg7Cgp0eXBlZGVmIHN0cnVjdCB7 CiAgICBDQVJEOCAgICAgICAgICBzdWNjZXNzOwogICAgQllURSAgICAgICAgICAgbGVuZ3RoUmVh c29uOyAgCiAgICBDQVJEMTYgICAgICAgICBtYWpvclZlcnNpb24gICwgCiAgICAgICAgICAgICAg ICAgICBtaW5vclZlcnNpb24gIDsKICAgIENBUkQxNiAgICAgICAgIGxlbmd0aCAgOyAgIAp9IHhD b25uU2V0dXBQcmVmaXg7CgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgQ0FSRDMyICAgICAgICAgcmVs ZWFzZSAgOwogICAgQ0FSRDMyICAgICAgICAgcmlkQmFzZSAgLCAKICAgICAgICAgICAgICAgICAg IHJpZE1hc2sgIDsKICAgIENBUkQzMiAgICAgICAgIG1vdGlvbkJ1ZmZlclNpemUgIDsKICAgIENB UkQxNiAgICAgICAgIG5ieXRlc1ZlbmRvciAgOyAgIAogICAgQ0FSRDE2ICAgICAgICAgbWF4UmVx dWVzdFNpemUgIDsKICAgIENBUkQ4ICAgICAgICAgIG51bVJvb3RzOyAgICAgICAgICAgCiAgICBD QVJEOCAgICAgICAgICBudW1Gb3JtYXRzOyAgICAgICAgIAogICAgQ0FSRDggICAgICAgICAgaW1h Z2VCeXRlT3JkZXI7ICAgICAgICAgCiAgICBDQVJEOCAgICAgICAgICBiaXRtYXBCaXRPcmRlcjsg ICAgICAgICAKICAgIENBUkQ4ICAgICAgICAgIGJpdG1hcFNjYW5saW5lVW5pdCwgICAgICAKICAg ICAgICAgICAgICAgICAgIGJpdG1hcFNjYW5saW5lUGFkOyAgICAgIAogICAgQ0FSRDggCSAgIG1p bktleUNvZGUsIG1heEtleUNvZGU7CiAgICBDQVJEMzIJICAgcGFkMiAgOwp9IHhDb25uU2V0dXA7 Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBDQVJEOCAgICAgICAgICBkZXB0aDsKICAgIENBUkQ4ICAg ICAgICAgIGJpdHNQZXJQaXhlbDsKICAgIENBUkQ4ICAgICAgICAgIHNjYW5MaW5lUGFkOwogICAg Q0FSRDggICAgICAgICAgcGFkMTsKICAgIENBUkQzMgkgICBwYWQyICA7Cn0geFBpeG1hcEZvcm1h dDsKCiAKCnR5cGVkZWYgc3RydWN0IHsKICAgIENBUkQ4IAlkZXB0aDsKICAgIENBUkQ4IAlwYWQx OwogICAgQ0FSRDE2CW5WaXN1YWxzICA7ICAgCiAgICBDQVJEMzIJcGFkMiAgOwogICAgfSB4RGVw dGg7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBDQVJEMzIgIHZpc3VhbElEICA7CgoKCiAgICBDQVJE OCBjbGFzczsKCiAgICBDQVJEOCBiaXRzUGVyUkdCOwogICAgQ0FSRDE2IGNvbG9ybWFwRW50cmll cyAgOwogICAgQ0FSRDMyIHJlZE1hc2sgICwgZ3JlZW5NYXNrICAsIGJsdWVNYXNrICA7CiAgICBD QVJEMzIgcGFkICA7CiAgICB9IHhWaXN1YWxUeXBlOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgQ0FS RDMyICAgICAgICAgIHdpbmRvd0lkICA7CiAgICBDQVJEMzIgICAgICAgIGRlZmF1bHRDb2xvcm1h cCAgOwogICAgQ0FSRDMyICAgICAgICAgd2hpdGVQaXhlbCAgLCBibGFja1BpeGVsICA7CiAgICBD QVJEMzIgICAgICAgICBjdXJyZW50SW5wdXRNYXNrICA7ICAgCiAgICBDQVJEMTYgICAgICAgICBw aXhXaWR0aCAgLCBwaXhIZWlnaHQgIDsKICAgIENBUkQxNiAgICAgICAgIG1tV2lkdGggICwgbW1I ZWlnaHQgIDsKICAgIENBUkQxNiAgICAgICAgIG1pbkluc3RhbGxlZE1hcHMgICwgbWF4SW5zdGFs bGVkTWFwcyAgOwogICAgQ0FSRDMyICAgICAgICByb290VmlzdWFsSUQgIDsKICAgIENBUkQ4ICAg ICAgICAgIGJhY2tpbmdTdG9yZTsKICAgIEJPT0wgICAgICAgICAgIHNhdmVVbmRlcnM7CiAgICBD QVJEOCAgICAgICAgICByb290RGVwdGg7CiAgICBDQVJEOCAgICAgICAgICBuRGVwdGhzOyAgIAp9 IHhXaW5kb3dSb290OwoMCgogCgoKCgogCgp0eXBlZGVmIHN0cnVjdCB7CiAgICBDQVJEMzIgdGlt ZSAgOwogICAgSU5UMTYgeCAgLCB5ICA7Cn0geFRpbWVjb29yZDsKCnR5cGVkZWYgc3RydWN0IHsK ICAgIENBUkQ4IGZhbWlseTsKICAgIEJZVEUgcGFkOwogICAgQ0FSRDE2IGxlbmd0aCAgOwp9IHhI b3N0RW50cnk7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBJTlQxNiBsZWZ0U2lkZUJlYXJpbmcgICwK CSAgcmlnaHRTaWRlQmVhcmluZyAgLAoJICBjaGFyYWN0ZXJXaWR0aCAgLAoJICBhc2NlbnQgICwK CSAgZGVzY2VudCAgOwogICAgQ0FSRDE2IGF0dHJpYnV0ZXMgIDsKfSB4Q2hhckluZm87Cgp0eXBl ZGVmIHN0cnVjdCB7CiAgICBDQVJEMzIgIG5hbWUgIDsKICAgIENBUkQzMiB2YWx1ZSAgOwp9IHhG b250UHJvcDsKCiAKCgp0eXBlZGVmIHN0cnVjdCB7ICAgICAgICAgICAgCiAgICBDQVJEOCBsZW47 CSAKCiAgICBJTlQ4IGRlbHRhOwp9IHhUZXh0RWx0OwoKCnR5cGVkZWYgc3RydWN0IHsgICAgICAg IAogICAgQ0FSRDMyIHBpeGVsICA7CiAgICBDQVJEMTYgcmVkICAsIGdyZWVuICAsIGJsdWUgIDsK ICAgIENBUkQ4IGZsYWdzOyAgIAogICAgQ0FSRDggcGFkOwp9IHhDb2xvckl0ZW07CgoKdHlwZWRl ZiBzdHJ1Y3QgewogICAgQ0FSRDE2IHJlZCAgLCBncmVlbiAgLCBibHVlICAsIHBhZCAgOwp9IHhy Z2I7Cgp0eXBlZGVmIENBUkQ4IEtFWUNPREU7CgwKCiAKCgoKCiAKCgp0eXBlZGVmIHN0cnVjdCB7 CQogICAgQllURSB0eXBlOyAgICAgICAgICAgICAgIAogICAgQllURSBkYXRhMTsgICAgICAgICAg ICAgIAogICAgQ0FSRDE2IHNlcXVlbmNlTnVtYmVyICA7ICAgCiAgICBDQVJEMzIgbGVuZ3RoICA7 ICAgICAgIAogICAgQ0FSRDMyIGRhdGEwMCAgOwogICAgQ0FSRDMyIGRhdGEwMSAgOwogICAgQ0FS RDMyIGRhdGEwMiAgOwogICAgQ0FSRDMyIGRhdGEwMyAgOwogICAgQ0FSRDMyIGRhdGEwNCAgOwog ICAgQ0FSRDMyIGRhdGEwNSAgOwogICAgfSB4R2VuZXJpY1JlcGx5OwoKIAoKdHlwZWRlZiBzdHJ1 Y3QgewogICAgQllURSB0eXBlOyAgIAogICAgQ0FSRDggYmFja2luZ1N0b3JlOwogICAgQ0FSRDE2 IHNlcXVlbmNlTnVtYmVyICA7CiAgICBDQVJEMzIgbGVuZ3RoICA7CSAKICAgIENBUkQzMiAgdmlz dWFsSUQgIDsKCgoKICAgIENBUkQxNiBjbGFzcyAgOwoKICAgIENBUkQ4IGJpdEdyYXZpdHk7CiAg ICBDQVJEOCB3aW5HcmF2aXR5OwogICAgQ0FSRDMyIGJhY2tpbmdCaXRQbGFuZXMgIDsKICAgIENB UkQzMiBiYWNraW5nUGl4ZWwgIDsKICAgIEJPT0wgc2F2ZVVuZGVyOwogICAgQk9PTCBtYXBJbnN0 YWxsZWQ7CiAgICBDQVJEOCBtYXBTdGF0ZTsKICAgIEJPT0wgb3ZlcnJpZGU7CiAgICBDQVJEMzIg IGNvbG9ybWFwICA7CiAgICBDQVJEMzIgYWxsRXZlbnRNYXNrcyAgOwogICAgQ0FSRDMyIHlvdXJF dmVudE1hc2sgIDsKICAgIENBUkQxNiBkb05vdFByb3BhZ2F0ZU1hc2sgIDsKICAgIENBUkQxNiBw YWQgIDsKICAgIH0geEdldFdpbmRvd0F0dHJpYnV0ZXNSZXBseTsKCnR5cGVkZWYgc3RydWN0IHsK ICAgIEJZVEUgdHlwZTsgICAgCiAgICBDQVJEOCBkZXB0aDsKICAgIENBUkQxNiBzZXF1ZW5jZU51 bWJlciAgOwogICAgQ0FSRDMyIGxlbmd0aCAgOyAgIAogICAgQ0FSRDMyICByb290ICA7CiAgICBJ TlQxNiB4ICAsIHkgIDsKICAgIENBUkQxNiB3aWR0aCAgLCBoZWlnaHQgIDsKICAgIENBUkQxNiBi b3JkZXJXaWR0aCAgOwogICAgQ0FSRDE2IHBhZDEgIDsKICAgIENBUkQzMiBwYWQyICA7CiAgICBD QVJEMzIgcGFkMyAgOwogICAgfSB4R2V0R2VvbWV0cnlSZXBseTsKCnR5cGVkZWYgc3RydWN0IHsK ICAgIEJZVEUgdHlwZTsgICAKICAgIEJZVEUgcGFkMTsKICAgIENBUkQxNiBzZXF1ZW5jZU51bWJl ciAgOwogICAgQ0FSRDMyIGxlbmd0aCAgOwogICAgQ0FSRDMyICByb290ICAsIHBhcmVudCAgOwog ICAgQ0FSRDE2IG5DaGlsZHJlbiAgOwogICAgQ0FSRDE2IHBhZDIgIDsKICAgIENBUkQzMiBwYWQz ICA7CiAgICBDQVJEMzIgcGFkNCAgOwogICAgQ0FSRDMyIHBhZDUgIDsKICAgIH0geFF1ZXJ5VHJl ZVJlcGx5OwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgQllURSB0eXBlOyAgIAogICAgQllURSBwYWQx OwogICAgQ0FSRDE2IHNlcXVlbmNlTnVtYmVyICA7CiAgICBDQVJEMzIgbGVuZ3RoICA7ICAKICAg IENBUkQzMiAgYXRvbSAgOwogICAgQ0FSRDMyIHBhZDIgIDsKICAgIENBUkQzMiBwYWQzICA7CiAg ICBDQVJEMzIgcGFkNCAgOwogICAgQ0FSRDMyIHBhZDUgIDsKICAgIENBUkQzMiBwYWQ2ICA7CiAg ICB9IHhJbnRlcm5BdG9tUmVwbHk7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBCWVRFIHR5cGU7ICAg CiAgICBCWVRFIHBhZDE7CiAgICBDQVJEMTYgc2VxdWVuY2VOdW1iZXIgIDsKICAgIENBUkQzMiBs ZW5ndGggIDsgICAKICAgIENBUkQxNiBuYW1lTGVuZ3RoICA7ICAgCiAgICBDQVJEMTYgcGFkMiAg OwogICAgQ0FSRDMyIHBhZDMgIDsKICAgIENBUkQzMiBwYWQ0ICA7CiAgICBDQVJEMzIgcGFkNSAg OwogICAgQ0FSRDMyIHBhZDYgIDsKICAgIENBUkQzMiBwYWQ3ICA7CiAgICB9IHhHZXRBdG9tTmFt ZVJlcGx5OwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgQllURSB0eXBlOyAgIAogICAgQ0FSRDggZm9y bWF0OwogICAgQ0FSRDE2IHNlcXVlbmNlTnVtYmVyICA7CiAgICBDQVJEMzIgbGVuZ3RoICA7ICAK ICAgIENBUkQzMiAgcHJvcGVydHlUeXBlICA7CiAgICBDQVJEMzIgYnl0ZXNBZnRlciAgOwogICAg Q0FSRDMyIG5JdGVtcyAgOyAgCiAgICBDQVJEMzIgcGFkMSAgOwogICAgQ0FSRDMyIHBhZDIgIDsK ICAgIENBUkQzMiBwYWQzICA7CiAgICB9IHhHZXRQcm9wZXJ0eVJlcGx5OwoKdHlwZWRlZiBzdHJ1 Y3QgewogICAgQllURSB0eXBlOyAgIAogICAgQllURSBwYWQxOwogICAgQ0FSRDE2IHNlcXVlbmNl TnVtYmVyICA7CiAgICBDQVJEMzIgbGVuZ3RoICA7CiAgICBDQVJEMTYgblByb3BlcnRpZXMgIDsK ICAgIENBUkQxNiBwYWQyICA7CiAgICBDQVJEMzIgcGFkMyAgOwogICAgQ0FSRDMyIHBhZDQgIDsK ICAgIENBUkQzMiBwYWQ1ICA7CiAgICBDQVJEMzIgcGFkNiAgOwogICAgQ0FSRDMyIHBhZDcgIDsK ICAgIH0geExpc3RQcm9wZXJ0aWVzUmVwbHk7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBCWVRFIHR5 cGU7ICAgCiAgICBCWVRFIHBhZDE7CiAgICBDQVJEMTYgc2VxdWVuY2VOdW1iZXIgIDsKICAgIENB UkQzMiBsZW5ndGggIDsgICAKICAgIENBUkQzMiAgb3duZXIgIDsKICAgIENBUkQzMiBwYWQyICA7 CiAgICBDQVJEMzIgcGFkMyAgOwogICAgQ0FSRDMyIHBhZDQgIDsKICAgIENBUkQzMiBwYWQ1ICA7 CiAgICBDQVJEMzIgcGFkNiAgOwogICAgfSB4R2V0U2VsZWN0aW9uT3duZXJSZXBseTsKCnR5cGVk ZWYgc3RydWN0IHsKICAgIEJZVEUgdHlwZTsgICAKICAgIEJZVEUgc3RhdHVzOwogICAgQ0FSRDE2 IHNlcXVlbmNlTnVtYmVyICA7CiAgICBDQVJEMzIgbGVuZ3RoICA7ICAgCiAgICBDQVJEMzIgcGFk MSAgOwogICAgQ0FSRDMyIHBhZDIgIDsKICAgIENBUkQzMiBwYWQzICA7CiAgICBDQVJEMzIgcGFk NCAgOwogICAgQ0FSRDMyIHBhZDUgIDsKICAgIENBUkQzMiBwYWQ2ICA7CiAgICB9IHhHcmFiUG9p bnRlclJlcGx5OwoKdHlwZWRlZiB4R3JhYlBvaW50ZXJSZXBseSB4R3JhYktleWJvYXJkUmVwbHk7 Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBCWVRFIHR5cGU7ICAgCiAgICBCT09MIHNhbWVTY3JlZW47 CiAgICBDQVJEMTYgc2VxdWVuY2VOdW1iZXIgIDsKICAgIENBUkQzMiBsZW5ndGggIDsgICAKICAg IENBUkQzMiAgcm9vdCAgLCBjaGlsZCAgOwogICAgSU5UMTYgcm9vdFggICwgcm9vdFkgICwgd2lu WCAgLCB3aW5ZICA7CiAgICBDQVJEMTYgbWFzayAgOwogICAgQ0FSRDE2IHBhZDEgIDsKICAgIENB UkQzMiBwYWQgIDsKICAgIH0geFF1ZXJ5UG9pbnRlclJlcGx5OwoKdHlwZWRlZiBzdHJ1Y3Qgewog ICAgQllURSB0eXBlOyAgIAogICAgQllURSBwYWQxOwogICAgQ0FSRDE2IHNlcXVlbmNlTnVtYmVy ICA7CiAgICBDQVJEMzIgbGVuZ3RoICA7CiAgICBDQVJEMzIgbkV2ZW50cyAgOwogICAgQ0FSRDMy IHBhZDIgIDsKICAgIENBUkQzMiBwYWQzICA7CiAgICBDQVJEMzIgcGFkNCAgOwogICAgQ0FSRDMy IHBhZDUgIDsKICAgIENBUkQzMiBwYWQ2ICA7CiAgICB9IHhHZXRNb3Rpb25FdmVudHNSZXBseTsK CnR5cGVkZWYgc3RydWN0IHsKICAgIEJZVEUgdHlwZTsgICAKICAgIEJPT0wgc2FtZVNjcmVlbjsK ICAgIENBUkQxNiBzZXF1ZW5jZU51bWJlciAgOwogICAgQ0FSRDMyIGxlbmd0aCAgOyAgCiAgICBD QVJEMzIgIGNoaWxkICA7CiAgICBJTlQxNiBkc3RYICAsIGRzdFkgIDsKICAgIENBUkQzMiBwYWQy ICA7CiAgICBDQVJEMzIgcGFkMyAgOwogICAgQ0FSRDMyIHBhZDQgIDsKICAgIENBUkQzMiBwYWQ1 ICA7CiAgICB9IHhUcmFuc2xhdGVDb29yZHNSZXBseTsKCnR5cGVkZWYgc3RydWN0IHsKICAgIEJZ VEUgdHlwZTsgICAKICAgIENBUkQ4IHJldmVydFRvOwogICAgQ0FSRDE2IHNlcXVlbmNlTnVtYmVy ICA7CiAgICBDQVJEMzIgbGVuZ3RoICA7ICAgCiAgICBDQVJEMzIgIGZvY3VzICA7CiAgICBDQVJE MzIgcGFkMSAgOwogICAgQ0FSRDMyIHBhZDIgIDsKICAgIENBUkQzMiBwYWQzICA7CiAgICBDQVJE MzIgcGFkNCAgOwogICAgQ0FSRDMyIHBhZDUgIDsKICAgIH0geEdldElucHV0Rm9jdXNSZXBseTsK CnR5cGVkZWYgc3RydWN0IHsKICAgIEJZVEUgdHlwZTsgICAKICAgIEJZVEUgcGFkMTsKICAgIENB UkQxNiBzZXF1ZW5jZU51bWJlciAgOwogICAgQ0FSRDMyIGxlbmd0aCAgOyAgIAogICAgQllURSBt YXBbMzJdOwogICAgfSB4UXVlcnlLZXltYXBSZXBseTsKCiAKdHlwZWRlZiBzdHJ1Y3QgX3hRdWVy eUZvbnRSZXBseSB7CiAgICBCWVRFIHR5cGU7ICAgCiAgICBCWVRFIHBhZDE7CiAgICBDQVJEMTYg c2VxdWVuY2VOdW1iZXIgIDsKICAgIENBUkQzMiBsZW5ndGggIDsgICAKICAgIHhDaGFySW5mbyBt aW5Cb3VuZHM7IAoKICAgIENBUkQzMiB3YWxpZ24xICA7CgogICAgeENoYXJJbmZvIG1heEJvdW5k czsgCgogICAgQ0FSRDMyIHdhbGlnbjIgIDsKCiAgICBDQVJEMTYgbWluQ2hhck9yQnl0ZTIgICwg bWF4Q2hhck9yQnl0ZTIgIDsKICAgIENBUkQxNiBkZWZhdWx0Q2hhciAgOwogICAgQ0FSRDE2IG5G b250UHJvcHMgIDsgICAKICAgIENBUkQ4IGRyYXdEaXJlY3Rpb247CiAgICBDQVJEOCBtaW5CeXRl MSwgbWF4Qnl0ZTE7CiAgICBCT09MIGFsbENoYXJzRXhpc3Q7CiAgICBJTlQxNiBmb250QXNjZW50 ICAsIGZvbnREZXNjZW50ICA7CiAgICBDQVJEMzIgbkNoYXJJbmZvcyAgOyAgCn0geFF1ZXJ5Rm9u dFJlcGx5OwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgQllURSB0eXBlOyAgIAogICAgQ0FSRDggZHJh d0RpcmVjdGlvbjsKICAgIENBUkQxNiBzZXF1ZW5jZU51bWJlciAgOwogICAgQ0FSRDMyIGxlbmd0 aCAgOyAgIAogICAgSU5UMTYgZm9udEFzY2VudCAgLCBmb250RGVzY2VudCAgOwogICAgSU5UMTYg b3ZlcmFsbEFzY2VudCAgLCBvdmVyYWxsRGVzY2VudCAgOwogICAgSU5UMzIgb3ZlcmFsbFdpZHRo ICAsIG92ZXJhbGxMZWZ0ICAsIG92ZXJhbGxSaWdodCAgOwogICAgQ0FSRDMyIHBhZCAgOwogICAg fSB4UXVlcnlUZXh0RXh0ZW50c1JlcGx5OwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgQllURSB0eXBl OyAgIAogICAgQllURSBwYWQxOwogICAgQ0FSRDE2IHNlcXVlbmNlTnVtYmVyICA7CiAgICBDQVJE MzIgbGVuZ3RoICA7CiAgICBDQVJEMTYgbkZvbnRzICA7CiAgICBDQVJEMTYgcGFkMiAgOwogICAg Q0FSRDMyIHBhZDMgIDsKICAgIENBUkQzMiBwYWQ0ICA7CiAgICBDQVJEMzIgcGFkNSAgOwogICAg Q0FSRDMyIHBhZDYgIDsKICAgIENBUkQzMiBwYWQ3ICA7CiAgICB9IHhMaXN0Rm9udHNSZXBseTsK CiAKdHlwZWRlZiBzdHJ1Y3QgewogICAgQllURSB0eXBlOyAgIAogICAgQ0FSRDggbmFtZUxlbmd0 aDsgICAKICAgIENBUkQxNiBzZXF1ZW5jZU51bWJlciAgOwogICAgQ0FSRDMyIGxlbmd0aCAgOyAg IAogICAgeENoYXJJbmZvIG1pbkJvdW5kczsgCgogICAgQ0FSRDMyIHdhbGlnbjEgIDsKCiAgICB4 Q2hhckluZm8gbWF4Qm91bmRzOyAKCiAgICBDQVJEMzIgd2FsaWduMiAgOwoKICAgIENBUkQxNiBt aW5DaGFyT3JCeXRlMiAgLCBtYXhDaGFyT3JCeXRlMiAgOwogICAgQ0FSRDE2IGRlZmF1bHRDaGFy ICA7CiAgICBDQVJEMTYgbkZvbnRQcm9wcyAgOyAgIAogICAgQ0FSRDggZHJhd0RpcmVjdGlvbjsK ICAgIENBUkQ4IG1pbkJ5dGUxLCBtYXhCeXRlMTsKICAgIEJPT0wgYWxsQ2hhcnNFeGlzdDsKICAg IElOVDE2IGZvbnRBc2NlbnQgICwgZm9udERlc2NlbnQgIDsKICAgIENBUkQzMiBuUmVwbGllcyAg OyAgICAKfSB4TGlzdEZvbnRzV2l0aEluZm9SZXBseTsKCnR5cGVkZWYgc3RydWN0IHsKICAgIEJZ VEUgdHlwZTsgICAKICAgIEJZVEUgcGFkMTsKICAgIENBUkQxNiBzZXF1ZW5jZU51bWJlciAgOwog ICAgQ0FSRDMyIGxlbmd0aCAgOwogICAgQ0FSRDE2IG5QYXRocyAgOwogICAgQ0FSRDE2IHBhZDIg IDsKICAgIENBUkQzMiBwYWQzICA7CiAgICBDQVJEMzIgcGFkNCAgOwogICAgQ0FSRDMyIHBhZDUg IDsKICAgIENBUkQzMiBwYWQ2ICA7CiAgICBDQVJEMzIgcGFkNyAgOwogICAgfSB4R2V0Rm9udFBh dGhSZXBseTsKCnR5cGVkZWYgc3RydWN0IHsKICAgIEJZVEUgdHlwZTsgICAKICAgIENBUkQ4IGRl cHRoOwogICAgQ0FSRDE2IHNlcXVlbmNlTnVtYmVyICA7CiAgICBDQVJEMzIgbGVuZ3RoICA7CiAg ICBDQVJEMzIgIHZpc3VhbCAgOwogICAgQ0FSRDMyIHBhZDMgIDsKICAgIENBUkQzMiBwYWQ0ICA7 CiAgICBDQVJEMzIgcGFkNSAgOwogICAgQ0FSRDMyIHBhZDYgIDsKICAgIENBUkQzMiBwYWQ3ICA7 CiAgICB9IHhHZXRJbWFnZVJlcGx5OwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgQllURSB0eXBlOyAg IAogICAgQllURSBwYWQxOwogICAgQ0FSRDE2IHNlcXVlbmNlTnVtYmVyICA7CiAgICBDQVJEMzIg bGVuZ3RoICA7CiAgICBDQVJEMTYgbkNvbG9ybWFwcyAgOwogICAgQ0FSRDE2IHBhZDIgIDsKICAg IENBUkQzMiBwYWQzICA7CiAgICBDQVJEMzIgcGFkNCAgOwogICAgQ0FSRDMyIHBhZDUgIDsKICAg IENBUkQzMiBwYWQ2ICA7CiAgICBDQVJEMzIgcGFkNyAgOwogICAgfSB4TGlzdEluc3RhbGxlZENv bG9ybWFwc1JlcGx5OwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgQllURSB0eXBlOyAgCiAgICBCWVRF IHBhZDE7CiAgICBDQVJEMTYgc2VxdWVuY2VOdW1iZXIgIDsKICAgIENBUkQzMiBsZW5ndGggIDsg ICAgCiAgICBDQVJEMTYgcmVkICAsIGdyZWVuICAsIGJsdWUgIDsKICAgIENBUkQxNiBwYWQyICA7 CiAgICBDQVJEMzIgcGl4ZWwgIDsKICAgIENBUkQzMiBwYWQzICA7CiAgICBDQVJEMzIgcGFkNCAg OwogICAgQ0FSRDMyIHBhZDUgIDsKICAgIH0geEFsbG9jQ29sb3JSZXBseTsKCnR5cGVkZWYgc3Ry dWN0IHsKICAgIEJZVEUgdHlwZTsgIAogICAgQllURSBwYWQxOwogICAgQ0FSRDE2IHNlcXVlbmNl TnVtYmVyICA7CiAgICBDQVJEMzIgbGVuZ3RoICA7ICAgCiAgICBDQVJEMzIgcGl4ZWwgIDsKICAg IENBUkQxNiBleGFjdFJlZCAgLCBleGFjdEdyZWVuICAsIGV4YWN0Qmx1ZSAgOwogICAgQ0FSRDE2 IHNjcmVlblJlZCAgLCBzY3JlZW5HcmVlbiAgLCBzY3JlZW5CbHVlICA7CiAgICBDQVJEMzIgcGFk MiAgOwogICAgQ0FSRDMyIHBhZDMgIDsKICAgIH0geEFsbG9jTmFtZWRDb2xvclJlcGx5OwoKdHlw ZWRlZiBzdHJ1Y3QgewogICAgQllURSB0eXBlOyAgIAogICAgQllURSBwYWQxOwogICAgQ0FSRDE2 IHNlcXVlbmNlTnVtYmVyICA7CiAgICBDQVJEMzIgbGVuZ3RoICA7CiAgICBDQVJEMTYgblBpeGVs cyAgLCBuTWFza3MgIDsKICAgIENBUkQzMiBwYWQzICA7CiAgICBDQVJEMzIgcGFkNCAgOwogICAg Q0FSRDMyIHBhZDUgIDsKICAgIENBUkQzMiBwYWQ2ICA7CiAgICBDQVJEMzIgcGFkNyAgOwogICAg fSB4QWxsb2NDb2xvckNlbGxzUmVwbHk7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBCWVRFIHR5cGU7 ICAKICAgIEJZVEUgcGFkMTsKICAgIENBUkQxNiBzZXF1ZW5jZU51bWJlciAgOwogICAgQ0FSRDMy IGxlbmd0aCAgOwogICAgQ0FSRDE2IG5QaXhlbHMgIDsKICAgIENBUkQxNiBwYWQyICA7CiAgICBD QVJEMzIgcmVkTWFzayAgLCBncmVlbk1hc2sgICwgYmx1ZU1hc2sgIDsKICAgIENBUkQzMiBwYWQz ICA7CiAgICBDQVJEMzIgcGFkNCAgOwogICAgfSB4QWxsb2NDb2xvclBsYW5lc1JlcGx5OwoKdHlw ZWRlZiBzdHJ1Y3QgewogICAgQllURSB0eXBlOyAgCiAgICBCWVRFIHBhZDE7CiAgICBDQVJEMTYg c2VxdWVuY2VOdW1iZXIgIDsKICAgIENBUkQzMiBsZW5ndGggIDsKICAgIENBUkQxNiBuQ29sb3Jz ICA7CiAgICBDQVJEMTYgcGFkMiAgOwogICAgQ0FSRDMyIHBhZDMgIDsKICAgIENBUkQzMiBwYWQ0 ICA7CiAgICBDQVJEMzIgcGFkNSAgOwogICAgQ0FSRDMyIHBhZDYgIDsKICAgIENBUkQzMiBwYWQ3 ICA7CiAgICB9IHhRdWVyeUNvbG9yc1JlcGx5OwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgQllURSB0 eXBlOyAgIAogICAgQllURSBwYWQxOwogICAgQ0FSRDE2IHNlcXVlbmNlTnVtYmVyICA7CiAgICBD QVJEMzIgbGVuZ3RoICA7ICAgCiAgICBDQVJEMTYgZXhhY3RSZWQgICwgZXhhY3RHcmVlbiAgLCBl eGFjdEJsdWUgIDsKICAgIENBUkQxNiBzY3JlZW5SZWQgICwgc2NyZWVuR3JlZW4gICwgc2NyZWVu Qmx1ZSAgOwogICAgQ0FSRDMyIHBhZDMgIDsKICAgIENBUkQzMiBwYWQ0ICA7CiAgICBDQVJEMzIg cGFkNSAgOwogICAgfSB4TG9va3VwQ29sb3JSZXBseTsKCnR5cGVkZWYgc3RydWN0IHsKICAgIEJZ VEUgdHlwZTsgICAKICAgIEJZVEUgcGFkMTsKICAgIENBUkQxNiBzZXF1ZW5jZU51bWJlciAgOwog ICAgQ0FSRDMyIGxlbmd0aCAgOyAgIAogICAgQ0FSRDE2IHdpZHRoICAsIGhlaWdodCAgOwogICAg Q0FSRDMyIHBhZDMgIDsKICAgIENBUkQzMiBwYWQ0ICA7CiAgICBDQVJEMzIgcGFkNSAgOwogICAg Q0FSRDMyIHBhZDYgIDsKICAgIENBUkQzMiBwYWQ3ICA7CiAgICB9IHhRdWVyeUJlc3RTaXplUmVw bHk7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBCWVRFIHR5cGU7ICAgCiAgICBCWVRFIHBhZDE7CiAg ICBDQVJEMTYgc2VxdWVuY2VOdW1iZXIgIDsKICAgIENBUkQzMiBsZW5ndGggIDsgIAogICAgQk9P TCAgcHJlc2VudDsKICAgIENBUkQ4IG1ham9yX29wY29kZTsKICAgIENBUkQ4IGZpcnN0X2V2ZW50 OwogICAgQ0FSRDggZmlyc3RfZXJyb3I7CiAgICBDQVJEMzIgcGFkMyAgOwogICAgQ0FSRDMyIHBh ZDQgIDsKICAgIENBUkQzMiBwYWQ1ICA7CiAgICBDQVJEMzIgcGFkNiAgOwogICAgQ0FSRDMyIHBh ZDcgIDsKICAgIH0geFF1ZXJ5RXh0ZW5zaW9uUmVwbHk7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBC WVRFIHR5cGU7ICAgCiAgICBDQVJEOCBuRXh0ZW5zaW9uczsKICAgIENBUkQxNiBzZXF1ZW5jZU51 bWJlciAgOwogICAgQ0FSRDMyIGxlbmd0aCAgOwogICAgQ0FSRDMyIHBhZDIgIDsKICAgIENBUkQz MiBwYWQzICA7CiAgICBDQVJEMzIgcGFkNCAgOwogICAgQ0FSRDMyIHBhZDUgIDsKICAgIENBUkQz MiBwYWQ2ICA7CiAgICBDQVJEMzIgcGFkNyAgOwogICAgfSB4TGlzdEV4dGVuc2lvbnNSZXBseTsK Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBCWVRFICAgdHlwZTsgICAKICAgIENBUkQ4ICBzdWNjZXNz OwogICAgQ0FSRDE2IHNlcXVlbmNlTnVtYmVyICA7CiAgICBDQVJEMzIgbGVuZ3RoICA7CiAgICBD QVJEMzIgcGFkMiAgOwogICAgQ0FSRDMyIHBhZDMgIDsKICAgIENBUkQzMiBwYWQ0ICA7CiAgICBD QVJEMzIgcGFkNSAgOwogICAgQ0FSRDMyIHBhZDYgIDsKICAgIENBUkQzMiBwYWQ3ICA7CiAgICB9 IHhTZXRNYXBwaW5nUmVwbHk7CnR5cGVkZWYgeFNldE1hcHBpbmdSZXBseSB4U2V0UG9pbnRlck1h cHBpbmdSZXBseTsKdHlwZWRlZiB4U2V0TWFwcGluZ1JlcGx5IHhTZXRNb2RpZmllck1hcHBpbmdS ZXBseTsKCnR5cGVkZWYgc3RydWN0IHsKICAgIEJZVEUgdHlwZTsgICAKICAgIENBUkQ4IG5FbHRz OyAgIAogICAgQ0FSRDE2IHNlcXVlbmNlTnVtYmVyICA7CiAgICBDQVJEMzIgbGVuZ3RoICA7CiAg ICBDQVJEMzIgcGFkMiAgOwogICAgQ0FSRDMyIHBhZDMgIDsKICAgIENBUkQzMiBwYWQ0ICA7CiAg ICBDQVJEMzIgcGFkNSAgOwogICAgQ0FSRDMyIHBhZDYgIDsKICAgIENBUkQzMiBwYWQ3ICA7CiAg ICB9IHhHZXRQb2ludGVyTWFwcGluZ1JlcGx5OwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgQllURSB0 eXBlOwogICAgQ0FSRDgga2V5U3ltc1BlcktleUNvZGU7CiAgICBDQVJEMTYgc2VxdWVuY2VOdW1i ZXIgIDsKICAgIENBUkQzMiBsZW5ndGggIDsKICAgIENBUkQzMiBwYWQyICA7CiAgICBDQVJEMzIg cGFkMyAgOwogICAgQ0FSRDMyIHBhZDQgIDsKICAgIENBUkQzMiBwYWQ1ICA7CiAgICBDQVJEMzIg cGFkNiAgOwogICAgQ0FSRDMyIHBhZDcgIDsKfSB4R2V0S2V5Ym9hcmRNYXBwaW5nUmVwbHk7ICAg IAoKdHlwZWRlZiBzdHJ1Y3QgewogICAgQllURSB0eXBlOwogICAgQ0FSRDggbnVtS2V5UGVyTW9k aWZpZXI7CiAgICBDQVJEMTYgc2VxdWVuY2VOdW1iZXIgIDsKICAgIENBUkQzMiBsZW5ndGggIDsK ICAgIENBUkQzMiBwYWQxICA7CiAgICBDQVJEMzIgcGFkMiAgOwogICAgQ0FSRDMyIHBhZDMgIDsK ICAgIENBUkQzMiBwYWQ0ICA7CiAgICBDQVJEMzIgcGFkNSAgOwogICAgQ0FSRDMyIHBhZDYgIDsK fSB4R2V0TW9kaWZpZXJNYXBwaW5nUmVwbHk7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBCWVRFIHR5 cGU7ICAgCiAgICBCT09MIGdsb2JhbEF1dG9SZXBlYXQ7CiAgICBDQVJEMTYgc2VxdWVuY2VOdW1i ZXIgIDsKICAgIENBUkQzMiBsZW5ndGggIDsgICAKICAgIENBUkQzMiBsZWRNYXNrICA7CiAgICBD QVJEOCBrZXlDbGlja1BlcmNlbnQsIGJlbGxQZXJjZW50OwogICAgQ0FSRDE2IGJlbGxQaXRjaCAg LCBiZWxsRHVyYXRpb24gIDsKICAgIENBUkQxNiBwYWQgIDsKICAgIEJZVEUgbWFwWzMyXTsgICAK ICAgIH0geEdldEtleWJvYXJkQ29udHJvbFJlcGx5OwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgQllU RSB0eXBlOyAgIAogICAgQllURSBwYWQxOwogICAgQ0FSRDE2IHNlcXVlbmNlTnVtYmVyICA7CiAg ICBDQVJEMzIgbGVuZ3RoICA7ICAgCiAgICBDQVJEMTYgYWNjZWxOdW1lcmF0b3IgICwgYWNjZWxE ZW5vbWluYXRvciAgOwogICAgQ0FSRDE2IHRocmVzaG9sZCAgOwogICAgQ0FSRDE2IHBhZDIgIDsK ICAgIENBUkQzMiBwYWQzICA7CiAgICBDQVJEMzIgcGFkNCAgOwogICAgQ0FSRDMyIHBhZDUgIDsK ICAgIENBUkQzMiBwYWQ2ICA7CiAgICB9IHhHZXRQb2ludGVyQ29udHJvbFJlcGx5OwoKdHlwZWRl ZiBzdHJ1Y3QgewogICAgQllURSB0eXBlOyAgIAogICAgQllURSBwYWQxOwogICAgQ0FSRDE2IHNl cXVlbmNlTnVtYmVyICA7CiAgICBDQVJEMzIgbGVuZ3RoICA7ICAgCiAgICBDQVJEMTYgdGltZW91 dCAgLCBpbnRlcnZhbCAgOwogICAgQk9PTCBwcmVmZXJCbGFua2luZzsKICAgIEJPT0wgYWxsb3dF eHBvc3VyZXM7CiAgICBDQVJEMTYgcGFkMiAgOwogICAgQ0FSRDMyIHBhZDMgIDsKICAgIENBUkQz MiBwYWQ0ICA7CiAgICBDQVJEMzIgcGFkNSAgOwogICAgQ0FSRDMyIHBhZDYgIDsKICAgIH0geEdl dFNjcmVlblNhdmVyUmVwbHk7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBCWVRFIHR5cGU7ICAgCiAg ICBCT09MIGVuYWJsZWQ7CiAgICBDQVJEMTYgc2VxdWVuY2VOdW1iZXIgIDsKICAgIENBUkQzMiBs ZW5ndGggIDsKICAgIENBUkQxNiBuSG9zdHMgIDsKICAgIENBUkQxNiBwYWQxICA7CiAgICBDQVJE MzIgcGFkMyAgOwogICAgQ0FSRDMyIHBhZDQgIDsKICAgIENBUkQzMiBwYWQ1ICA7CiAgICBDQVJE MzIgcGFkNiAgOwogICAgQ0FSRDMyIHBhZDcgIDsKICAgIH0geExpc3RIb3N0c1JlcGx5OwoKDAoK CiAKCgoKCnR5cGVkZWYgc3RydWN0IHsKICAgIEJZVEUgdHlwZTsgICAgICAgICAgICAgICAgICAg CiAgICBCWVRFIGVycm9yQ29kZTsKICAgIENBUkQxNiBzZXF1ZW5jZU51bWJlciAgOyAgICAgICAg CiAgICBDQVJEMzIgcmVzb3VyY2VJRCAgOwogICAgQ0FSRDE2IG1pbm9yQ29kZSAgOwogICAgQ0FS RDggbWFqb3JDb2RlOwogICAgQllURSBwYWQxOwogICAgQ0FSRDMyIHBhZDMgIDsKICAgIENBUkQz MiBwYWQ0ICA7CiAgICBDQVJEMzIgcGFkNSAgOwogICAgQ0FSRDMyIHBhZDYgIDsKICAgIENBUkQz MiBwYWQ3ICA7Cn0geEVycm9yOwoKIAoKCgoKdHlwZWRlZiBzdHJ1Y3QgX3hFdmVudCB7CiAgICB1 bmlvbiB7CglzdHJ1Y3QgewoJICAgIEJZVEUgdHlwZTsKCSAgICBCWVRFIGRldGFpbDsKCSAgICBD QVJEMTYgc2VxdWVuY2VOdW1iZXIgIDsKCSAgICB9IHU7CglzdHJ1Y3QgewogICAgICAgICAgICBD QVJEMzIgcGFkMDAgIDsKCSAgICBDQVJEMzIgIHRpbWUgIDsKCSAgICBDQVJEMzIgIHJvb3QgICwg ZXZlbnQgICwgY2hpbGQgIDsKCSAgICBJTlQxNiByb290WCAgLCByb290WSAgLCBldmVudFggICwg ZXZlbnRZICA7CgkgICAgS2V5QnV0TWFzayBzdGF0ZSAgOwoJICAgIEJPT0wgc2FtZVNjcmVlbjsJ CQoJICAgIEJZVEUgcGFkMTsKCX0ga2V5QnV0dG9uUG9pbnRlcjsKCXN0cnVjdCB7CiAgICAgICAg ICAgIENBUkQzMiBwYWQwMCAgOwogICAgICAgICAgICBDQVJEMzIgIHRpbWUgIDsKCSAgICBDQVJE MzIgIHJvb3QgICwgZXZlbnQgICwgY2hpbGQgIDsKCSAgICBJTlQxNiByb290WCAgLCByb290WSAg LCBldmVudFggICwgZXZlbnRZICA7CgkgICAgS2V5QnV0TWFzayBzdGF0ZSAgOwoJICAgIEJZVEUg bW9kZTsgCQkJIAoJICAgIEJZVEUgZmxhZ3M7CQkgCgoKCX0gZW50ZXJMZWF2ZTsKCXN0cnVjdCB7 CiAgICAgICAgICAgIENBUkQzMiBwYWQwMCAgOwoJICAgIENBUkQzMiAgd2luZG93ICA7CgkgICAg QllURSBtb2RlOyAJCQkgCgkgICAgQllURSBwYWQxLCBwYWQyLCBwYWQzOwoJfSBmb2N1czsKCXN0 cnVjdCB7CiAgICAgICAgICAgIENBUkQzMiBwYWQwMCAgOwoJICAgIENBUkQzMiAgd2luZG93ICA7 CgkgICAgQ0FSRDE2IHggICwgeSAgLCB3aWR0aCAgLCBoZWlnaHQgIDsKCSAgICBDQVJEMTYgY291 bnQgIDsKCSAgICBDQVJEMTYgcGFkMiAgOwoJfSBleHBvc2U7CglzdHJ1Y3QgewogICAgICAgICAg ICBDQVJEMzIgcGFkMDAgIDsKCSAgICBDQVJEMzIgIGRyYXdhYmxlICA7CgkgICAgQ0FSRDE2IHgg ICwgeSAgLCB3aWR0aCAgLCBoZWlnaHQgIDsKCSAgICBDQVJEMTYgbWlub3JFdmVudCAgOwoJICAg IENBUkQxNiBjb3VudCAgOwoJICAgIEJZVEUgbWFqb3JFdmVudDsKCSAgICBCWVRFIHBhZDEsIHBh ZDIsIHBhZDM7Cgl9IGdyYXBoaWNzRXhwb3N1cmU7CglzdHJ1Y3QgewogICAgICAgICAgICBDQVJE MzIgcGFkMDAgIDsKCSAgICBDQVJEMzIgIGRyYXdhYmxlICA7CgkgICAgQ0FSRDE2IG1pbm9yRXZl bnQgIDsKCSAgICBCWVRFIG1ham9yRXZlbnQ7CgkgICAgQllURSBicGFkOwoJfSBub0V4cG9zdXJl OwoJc3RydWN0IHsKICAgICAgICAgICAgQ0FSRDMyIHBhZDAwICA7CgkgICAgQ0FSRDMyICB3aW5k b3cgIDsKCSAgICBDQVJEOCBzdGF0ZTsKCSAgICBCWVRFIHBhZDEsIHBhZDIsIHBhZDM7Cgl9IHZp c2liaWxpdHk7CglzdHJ1Y3QgewogICAgICAgICAgICBDQVJEMzIgcGFkMDAgIDsKCSAgICBDQVJE MzIgIHBhcmVudCAgLCB3aW5kb3cgIDsKCSAgICBJTlQxNiB4ICAsIHkgIDsKCSAgICBDQVJEMTYg d2lkdGggICwgaGVpZ2h0ICAsIGJvcmRlcldpZHRoICA7CgkgICAgQk9PTCBvdmVycmlkZTsKCSAg ICBCWVRFIGJwYWQ7CiAgICAgICAgfSBjcmVhdGVOb3RpZnk7CiAKCgoKCgoKCglzdHJ1Y3Qgewog ICAgICAgICAgICBDQVJEMzIgcGFkMDAgIDsKCSAgICBDQVJEMzIgIGV2ZW50ICAsIHdpbmRvdyAg OwoJfSBkZXN0cm95Tm90aWZ5OwoJc3RydWN0IHsKICAgICAgICAgICAgQ0FSRDMyIHBhZDAwICA7 CgkgICAgQ0FSRDMyICBldmVudCAgLCB3aW5kb3cgIDsKCSAgICBCT09MIGZyb21Db25maWd1cmU7 CgkgICAgQllURSBwYWQxLCBwYWQyLCBwYWQzOwogICAgICAgIH0gdW5tYXBOb3RpZnk7CglzdHJ1 Y3QgewogICAgICAgICAgICBDQVJEMzIgcGFkMDAgIDsKCSAgICBDQVJEMzIgIGV2ZW50ICAsIHdp bmRvdyAgOwoJICAgIEJPT0wgb3ZlcnJpZGU7CgkgICAgQllURSBwYWQxLCBwYWQyLCBwYWQzOwog ICAgICAgIH0gbWFwTm90aWZ5OwoJc3RydWN0IHsKICAgICAgICAgICAgQ0FSRDMyIHBhZDAwICA7 CgkgICAgQ0FSRDMyICBwYXJlbnQgICwgd2luZG93ICA7CiAgICAgICAgfSBtYXBSZXF1ZXN0OwoJ c3RydWN0IHsKICAgICAgICAgICAgQ0FSRDMyIHBhZDAwICA7CgkgICAgQ0FSRDMyICBldmVudCAg LCB3aW5kb3cgICwgcGFyZW50ICA7CgkgICAgSU5UMTYgeCAgLCB5ICA7CgkgICAgQk9PTCBvdmVy cmlkZTsKCSAgICBCWVRFIHBhZDEsIHBhZDIsIHBhZDM7Cgl9IHJlcGFyZW50OwoJc3RydWN0IHsK ICAgICAgICAgICAgQ0FSRDMyIHBhZDAwICA7CgkgICAgQ0FSRDMyICBldmVudCAgLCB3aW5kb3cg ICwgYWJvdmVTaWJsaW5nICA7CgkgICAgSU5UMTYgeCAgLCB5ICA7CgkgICAgQ0FSRDE2IHdpZHRo ICAsIGhlaWdodCAgLCBib3JkZXJXaWR0aCAgOwoJICAgIEJPT0wgb3ZlcnJpZGU7CQkKCSAgICBC WVRFIGJwYWQ7Cgl9IGNvbmZpZ3VyZU5vdGlmeTsKCXN0cnVjdCB7CiAgICAgICAgICAgIENBUkQz MiBwYWQwMCAgOwoJICAgIENBUkQzMiAgcGFyZW50ICAsIHdpbmRvdyAgLCBzaWJsaW5nICA7Cgkg ICAgSU5UMTYgeCAgLCB5ICA7CgkgICAgQ0FSRDE2IHdpZHRoICAsIGhlaWdodCAgLCBib3JkZXJX aWR0aCAgOwoJICAgIENBUkQxNiB2YWx1ZU1hc2sgIDsKCSAgICBDQVJEMzIgcGFkMSAgOwoJfSBj b25maWd1cmVSZXF1ZXN0OwoJc3RydWN0IHsKICAgICAgICAgICAgQ0FSRDMyIHBhZDAwICA7Cgkg ICAgQ0FSRDMyICBldmVudCAgLCB3aW5kb3cgIDsKCSAgICBJTlQxNiB4ICAsIHkgIDsKCSAgICBD QVJEMzIgcGFkMSAgLCBwYWQyICAsIHBhZDMgICwgcGFkNCAgOwoJfSBncmF2aXR5OwoJc3RydWN0 IHsKICAgICAgICAgICAgQ0FSRDMyIHBhZDAwICA7CgkgICAgQ0FSRDMyICB3aW5kb3cgIDsKCSAg ICBDQVJEMTYgd2lkdGggICwgaGVpZ2h0ICA7Cgl9IHJlc2l6ZVJlcXVlc3Q7CglzdHJ1Y3Qgewog CgogICAgICAgICAgICBDQVJEMzIgcGFkMDAgIDsKCSAgICBDQVJEMzIgIGV2ZW50ICAsIHdpbmRv dyAgLCBwYXJlbnQgIDsKCSAgICBCWVRFIHBsYWNlOwkJCSAKCSAgICBCWVRFIHBhZDEsIHBhZDIs IHBhZDM7Cgl9IGNpcmN1bGF0ZTsKCXN0cnVjdCB7CiAgICAgICAgICAgIENBUkQzMiBwYWQwMCAg OwoJICAgIENBUkQzMiAgd2luZG93ICA7CgkgICAgQ0FSRDMyICBhdG9tICA7CgkgICAgQ0FSRDMy ICB0aW1lICA7CgkgICAgQllURSBzdGF0ZTsJCQkgCgkgICAgQllURSBwYWQxOwoJICAgIENBUkQx NiBwYWQyICA7Cgl9IHByb3BlcnR5OwoJc3RydWN0IHsKICAgICAgICAgICAgQ0FSRDMyIHBhZDAw ICA7CiAgICAgICAgICAgIENBUkQzMiAgdGltZSAgOyAgICAgCgkgICAgQ0FSRDMyICB3aW5kb3cg IDsKCSAgICBDQVJEMzIgIGF0b20gIDsKCX0gc2VsZWN0aW9uQ2xlYXI7CglzdHJ1Y3QgewogICAg ICAgICAgICBDQVJEMzIgcGFkMDAgIDsKICAgICAgICAgICAgQ0FSRDMyICB0aW1lICA7ICAgIAoJ ICAgIENBUkQzMiAgb3duZXIgICwgcmVxdWVzdG9yICA7CgkgICAgQ0FSRDMyICBzZWxlY3Rpb24g ICwgdGFyZ2V0ICAsIHByb3BlcnR5ICA7Cgl9IHNlbGVjdGlvblJlcXVlc3Q7CglzdHJ1Y3Qgewog ICAgICAgICAgICBDQVJEMzIgcGFkMDAgIDsKICAgICAgICAgICAgQ0FSRDMyICB0aW1lICA7ICAg CgkgICAgQ0FSRDMyICByZXF1ZXN0b3IgIDsKCSAgICBDQVJEMzIgIHNlbGVjdGlvbiAgLCB0YXJn ZXQgICwgcHJvcGVydHkgIDsKCX0gc2VsZWN0aW9uTm90aWZ5OwoJc3RydWN0IHsKICAgICAgICAg ICAgQ0FSRDMyIHBhZDAwICA7CgkgICAgQ0FSRDMyICB3aW5kb3cgIDsKCSAgICBDQVJEMzIgIGNv bG9ybWFwICA7CgoKCgkgICAgQk9PTCBuZXc7CgoJICAgIEJZVEUgc3RhdGU7CQkJIAoJICAgIEJZ VEUgcGFkMSwgcGFkMjsKCX0gY29sb3JtYXA7CglzdHJ1Y3QgewoJICAgIENBUkQzMiBwYWQwMCAg OwoJICAgIENBUkQ4IHJlcXVlc3Q7CgkgICAgQ0FSRDggIGZpcnN0S2V5Q29kZTsKCSAgICBDQVJE OCBjb3VudDsKCSAgICBCWVRFIHBhZDE7Cgl9IG1hcHBpbmdOb3RpZnk7CglzdHJ1Y3QgewogICAg ICAgICAgICBDQVJEMzIgcGFkMDAgIDsKCSAgICBDQVJEMzIgIHdpbmRvdyAgOwoJICAgIHVuaW9u IHsKCQlzdHJ1Y3QgewoJCSAgICBDQVJEMzIgIHR5cGUgIDsKCQkgICAgSU5UMzIgbG9uZ3MwICA7 CgkJICAgIElOVDMyIGxvbmdzMSAgOwoJCSAgICBJTlQzMiBsb25nczIgIDsKCQkgICAgSU5UMzIg bG9uZ3MzICA7CgkJICAgIElOVDMyIGxvbmdzNCAgOwoJCX0gbDsKCQlzdHJ1Y3QgewoJCSAgICBD QVJEMzIgIHR5cGUgIDsKCQkgICAgSU5UMTYgc2hvcnRzMCAgOwoJCSAgICBJTlQxNiBzaG9ydHMx ICA7CgkJICAgIElOVDE2IHNob3J0czIgIDsKCQkgICAgSU5UMTYgc2hvcnRzMyAgOwoJCSAgICBJ TlQxNiBzaG9ydHM0ICA7CgkJICAgIElOVDE2IHNob3J0czUgIDsKCQkgICAgSU5UMTYgc2hvcnRz NiAgOwoJCSAgICBJTlQxNiBzaG9ydHM3ICA7CgkJICAgIElOVDE2IHNob3J0czggIDsKCQkgICAg SU5UMTYgc2hvcnRzOSAgOwoJCX0gczsKCQlzdHJ1Y3QgewoJCSAgICBDQVJEMzIgIHR5cGUgIDsK CQkgICAgSU5UOCBieXRlc1syMF07CgkJfSBiOwoJICAgIH0gdTsgCgl9IGNsaWVudE1lc3NhZ2U7 CiAgICB9IHU7Cn0geEV2ZW50OwoKIAoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICBCWVRFIHR5cGU7 CiAgICBCWVRFIG1hcFszMV07CiAgICB9IHhLZXltYXBFdmVudDsKCgoKIAoKCgoKdHlwZWRlZiB1 bmlvbiB7CiAgICB4R2VuZXJpY1JlcGx5IGdlbmVyaWM7CiAgICB4R2V0R2VvbWV0cnlSZXBseSBn ZW9tOwogICAgeFF1ZXJ5VHJlZVJlcGx5IHRyZWU7CiAgICB4SW50ZXJuQXRvbVJlcGx5IGF0b207 CiAgICB4R2V0QXRvbU5hbWVSZXBseSBhdG9tTmFtZTsKICAgIHhHZXRQcm9wZXJ0eVJlcGx5IHBy b3BlcnR5OwogICAgeExpc3RQcm9wZXJ0aWVzUmVwbHkgbGlzdFByb3BlcnRpZXM7CiAgICB4R2V0 U2VsZWN0aW9uT3duZXJSZXBseSBzZWxlY3Rpb247CiAgICB4R3JhYlBvaW50ZXJSZXBseSBncmFi UG9pbnRlcjsKICAgIHhHcmFiS2V5Ym9hcmRSZXBseSBncmFiS2V5Ym9hcmQ7CiAgICB4UXVlcnlQ b2ludGVyUmVwbHkgcG9pbnRlcjsKICAgIHhHZXRNb3Rpb25FdmVudHNSZXBseSBtb3Rpb25FdmVu dHM7CiAgICB4VHJhbnNsYXRlQ29vcmRzUmVwbHkgY29vcmRzOwogICAgeEdldElucHV0Rm9jdXNS ZXBseSBpbnB1dEZvY3VzOwogICAgeFF1ZXJ5VGV4dEV4dGVudHNSZXBseSB0ZXh0RXh0ZW50czsK ICAgIHhMaXN0Rm9udHNSZXBseSBmb250czsKICAgIHhHZXRGb250UGF0aFJlcGx5IGZvbnRQYXRo OwogICAgeEdldEltYWdlUmVwbHkgaW1hZ2U7CiAgICB4TGlzdEluc3RhbGxlZENvbG9ybWFwc1Jl cGx5IGNvbG9ybWFwczsKICAgIHhBbGxvY0NvbG9yUmVwbHkgYWxsb2NDb2xvcjsKICAgIHhBbGxv Y05hbWVkQ29sb3JSZXBseSBhbGxvY05hbWVkQ29sb3I7CiAgICB4QWxsb2NDb2xvckNlbGxzUmVw bHkgY29sb3JDZWxsczsKICAgIHhBbGxvY0NvbG9yUGxhbmVzUmVwbHkgY29sb3JQbGFuZXM7CiAg ICB4UXVlcnlDb2xvcnNSZXBseSBjb2xvcnM7CiAgICB4TG9va3VwQ29sb3JSZXBseSBsb29rdXBD b2xvcjsKICAgIHhRdWVyeUJlc3RTaXplUmVwbHkgYmVzdFNpemU7CiAgICB4UXVlcnlFeHRlbnNp b25SZXBseSBleHRlbnNpb247CiAgICB4TGlzdEV4dGVuc2lvbnNSZXBseSBleHRlbnNpb25zOwog ICAgeFNldE1vZGlmaWVyTWFwcGluZ1JlcGx5IHNldE1vZGlmaWVyTWFwcGluZzsKICAgIHhHZXRN b2RpZmllck1hcHBpbmdSZXBseSBnZXRNb2RpZmllck1hcHBpbmc7CiAgICB4U2V0UG9pbnRlck1h cHBpbmdSZXBseSBzZXRQb2ludGVyTWFwcGluZzsKICAgIHhHZXRLZXlib2FyZE1hcHBpbmdSZXBs eSBnZXRLZXlib2FyZE1hcHBpbmc7CiAgICB4R2V0UG9pbnRlck1hcHBpbmdSZXBseSBnZXRQb2lu dGVyTWFwcGluZzsKICAgIHhHZXRQb2ludGVyQ29udHJvbFJlcGx5IHBvaW50ZXJDb250cm9sOwog ICAgeEdldFNjcmVlblNhdmVyUmVwbHkgc2NyZWVuU2F2ZXI7CiAgICB4TGlzdEhvc3RzUmVwbHkg aG9zdHM7CiAgICB4RXJyb3IgZXJyb3I7CiAgICB4RXZlbnQgZXZlbnQ7Cn0geFJlcGx5OwoKDAoK IAoKCgoKIAoKdHlwZWRlZiBzdHJ1Y3QgX3hSZXEgewoJQ0FSRDggcmVxVHlwZTsKCUNBUkQ4IGRh dGE7ICAgICAgICAgICAgIAoJQ0FSRDE2IGxlbmd0aCAgOyAgICAgICAgICAKCn0geFJlcTsKCiAK CgoKIAoKCnR5cGVkZWYgc3RydWN0IHsKICAgIENBUkQ4IHJlcVR5cGU7CiAgICBCWVRFIHBhZDsK ICAgIENBUkQxNiBsZW5ndGggIDsKICAgIENBUkQzMiBpZCAgOyAgIAogICAgfSB4UmVzb3VyY2VS ZXE7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBDQVJEOCByZXFUeXBlOwogICAgQ0FSRDggZGVwdGg7 CiAgICBDQVJEMTYgbGVuZ3RoICA7CiAgICBDQVJEMzIgIHdpZCAgLCBwYXJlbnQgIDsKICAgIElO VDE2IHggICwgeSAgOwogICAgQ0FSRDE2IHdpZHRoICAsIGhlaWdodCAgLCBib3JkZXJXaWR0aCAg OyAgCgoKCiAgICBDQVJEMTYgY2xhc3MgIDsKCiAgICBDQVJEMzIgIHZpc3VhbCAgOwogICAgQ0FS RDMyIG1hc2sgIDsKfSB4Q3JlYXRlV2luZG93UmVxOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgQ0FS RDggcmVxVHlwZTsKICAgIEJZVEUgcGFkOwogICAgQ0FSRDE2IGxlbmd0aCAgOwogICAgQ0FSRDMy ICB3aW5kb3cgIDsKICAgIENBUkQzMiB2YWx1ZU1hc2sgIDsgCn0geENoYW5nZVdpbmRvd0F0dHJp YnV0ZXNSZXE7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBDQVJEOCByZXFUeXBlOwogICAgQllURSBt b2RlOwogICAgQ0FSRDE2IGxlbmd0aCAgOwogICAgQ0FSRDMyICB3aW5kb3cgIDsKfSB4Q2hhbmdl U2F2ZVNldFJlcTsKCnR5cGVkZWYgc3RydWN0IHsKICAgIENBUkQ4IHJlcVR5cGU7CiAgICBCWVRF IHBhZDsKICAgIENBUkQxNiBsZW5ndGggIDsKICAgIENBUkQzMiAgd2luZG93ICAsIHBhcmVudCAg OwogICAgSU5UMTYgeCAgLCB5ICA7Cn0geFJlcGFyZW50V2luZG93UmVxOwoKdHlwZWRlZiBzdHJ1 Y3QgewogICAgQ0FSRDggcmVxVHlwZTsKICAgIENBUkQ4IHBhZDsKICAgIENBUkQxNiBsZW5ndGgg IDsKICAgIENBUkQzMiAgd2luZG93ICA7CiAgICBDQVJEMTYgbWFzayAgOwogICAgQ0FSRDE2IHBh ZDIgIDsKfSB4Q29uZmlndXJlV2luZG93UmVxOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgQ0FSRDgg cmVxVHlwZTsKICAgIENBUkQ4IGRpcmVjdGlvbjsKICAgIENBUkQxNiBsZW5ndGggIDsKICAgIENB UkQzMiAgd2luZG93ICA7Cn0geENpcmN1bGF0ZVdpbmRvd1JlcTsKCnR5cGVkZWYgc3RydWN0IHsg ICAgIAogICAgQ0FSRDggcmVxVHlwZTsKICAgIEJPT0wgb25seUlmRXhpc3RzOwogICAgQ0FSRDE2 IGxlbmd0aCAgOwogICAgQ0FSRDE2IG5ieXRlcyAgIDsgICAgIAogICAgQ0FSRDE2IHBhZCAgOwp9 IHhJbnRlcm5BdG9tUmVxOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgQ0FSRDggcmVxVHlwZTsKICAg IENBUkQ4IG1vZGU7CiAgICBDQVJEMTYgbGVuZ3RoICA7CiAgICBDQVJEMzIgIHdpbmRvdyAgOwog ICAgQ0FSRDMyICBwcm9wZXJ0eSAgLCB0eXBlICA7CiAgICBDQVJEOCBmb3JtYXQ7CiAgICBCWVRF IHBhZFszXTsKICAgIENBUkQzMiBuVW5pdHMgIDsgICAgICAKfSB4Q2hhbmdlUHJvcGVydHlSZXE7 Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBDQVJEOCByZXFUeXBlOwogICAgQllURSBwYWQ7CiAgICBD QVJEMTYgbGVuZ3RoICA7CiAgICBDQVJEMzIgIHdpbmRvdyAgOwogICAgQ0FSRDMyICBwcm9wZXJ0 eSAgOwp9IHhEZWxldGVQcm9wZXJ0eVJlcTsKCnR5cGVkZWYgc3RydWN0IHsKICAgIENBUkQ4IHJl cVR5cGU7CgoKCiAgICBCT09MIGRlbGV0ZTsKCiAgICBDQVJEMTYgbGVuZ3RoICA7CiAgICBDQVJE MzIgIHdpbmRvdyAgOwogICAgQ0FSRDMyICBwcm9wZXJ0eSAgLCB0eXBlICA7CiAgICBDQVJEMzIg bG9uZ09mZnNldCAgOwogICAgQ0FSRDMyIGxvbmdMZW5ndGggIDsKfSB4R2V0UHJvcGVydHlSZXE7 CiAKdHlwZWRlZiBzdHJ1Y3QgewogICAgQ0FSRDggcmVxVHlwZTsKICAgIEJZVEUgcGFkOwogICAg Q0FSRDE2IGxlbmd0aCAgOwogICAgQ0FSRDMyICB3aW5kb3cgIDsKICAgIENBUkQzMiAgc2VsZWN0 aW9uICA7CiAgICBDQVJEMzIgIHRpbWUgIDsKfSB4U2V0U2VsZWN0aW9uT3duZXJSZXE7Cgp0eXBl ZGVmIHN0cnVjdCB7CiAgICBDQVJEOCByZXFUeXBlOwogICAgQllURSBwYWQ7CiAgICBDQVJEMTYg bGVuZ3RoICA7CiAgICBDQVJEMzIgIHJlcXVlc3RvciAgOwogICAgQ0FSRDMyICBzZWxlY3Rpb24g ICwgdGFyZ2V0ICAsIHByb3BlcnR5ICA7CiAgICBDQVJEMzIgIHRpbWUgIDsKICAgIH0geENvbnZl cnRTZWxlY3Rpb25SZXE7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBDQVJEOCByZXFUeXBlOwogICAg Qk9PTCBwcm9wYWdhdGU7CiAgICBDQVJEMTYgbGVuZ3RoICA7CiAgICBDQVJEMzIgIGRlc3RpbmF0 aW9uICA7CiAgICBDQVJEMzIgZXZlbnRNYXNrICA7CgoKCgogICAgeEV2ZW50IGV2ZW50OwoKfSB4 U2VuZEV2ZW50UmVxOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgQ0FSRDggcmVxVHlwZTsKICAgIEJP T0wgb3duZXJFdmVudHM7CiAgICBDQVJEMTYgbGVuZ3RoICA7CiAgICBDQVJEMzIgIGdyYWJXaW5k b3cgIDsKICAgIENBUkQxNiBldmVudE1hc2sgIDsKICAgIEJZVEUgcG9pbnRlck1vZGUsIGtleWJv YXJkTW9kZTsKICAgIENBUkQzMiAgY29uZmluZVRvICA7CiAgICBDQVJEMzIgIGN1cnNvciAgOwog ICAgQ0FSRDMyICB0aW1lICA7Cn0geEdyYWJQb2ludGVyUmVxOwoKdHlwZWRlZiBzdHJ1Y3Qgewog ICAgQ0FSRDggcmVxVHlwZTsKICAgIEJPT0wgb3duZXJFdmVudHM7CiAgICBDQVJEMTYgbGVuZ3Ro ICA7CiAgICBDQVJEMzIgIGdyYWJXaW5kb3cgIDsKICAgIENBUkQxNiBldmVudE1hc2sgIDsKICAg IEJZVEUgcG9pbnRlck1vZGUsIGtleWJvYXJkTW9kZTsKICAgIENBUkQzMiAgY29uZmluZVRvICA7 CiAgICBDQVJEMzIgIGN1cnNvciAgOwogICAgQ0FSRDggYnV0dG9uOwogICAgQllURSBwYWQ7CiAg ICBDQVJEMTYgbW9kaWZpZXJzICA7Cn0geEdyYWJCdXR0b25SZXE7Cgp0eXBlZGVmIHN0cnVjdCB7 CiAgICBDQVJEOCByZXFUeXBlOwogICAgQ0FSRDggYnV0dG9uOwogICAgQ0FSRDE2IGxlbmd0aCAg OwogICAgQ0FSRDMyICBncmFiV2luZG93ICA7CiAgICBDQVJEMTYgbW9kaWZpZXJzICA7CiAgICBD QVJEMTYgcGFkICA7Cn0geFVuZ3JhYkJ1dHRvblJlcTsKCnR5cGVkZWYgc3RydWN0IHsKICAgIENB UkQ4IHJlcVR5cGU7CiAgICBCWVRFIHBhZDsKICAgIENBUkQxNiBsZW5ndGggIDsKICAgIENBUkQz MiAgY3Vyc29yICA7CiAgICBDQVJEMzIgIHRpbWUgIDsKICAgIENBUkQxNiBldmVudE1hc2sgIDsK ICAgIENBUkQxNiBwYWQyICA7Cn0geENoYW5nZUFjdGl2ZVBvaW50ZXJHcmFiUmVxOwoKdHlwZWRl ZiBzdHJ1Y3QgewogICAgQ0FSRDggcmVxVHlwZTsKICAgIEJPT0wgb3duZXJFdmVudHM7CiAgICBD QVJEMTYgbGVuZ3RoICA7CiAgICBDQVJEMzIgIGdyYWJXaW5kb3cgIDsKICAgIENBUkQzMiAgdGlt ZSAgOwogICAgQllURSBwb2ludGVyTW9kZSwga2V5Ym9hcmRNb2RlOyAgCiAgICBDQVJEMTYgcGFk ICA7Cn0geEdyYWJLZXlib2FyZFJlcTsKCnR5cGVkZWYgc3RydWN0IHsKICAgIENBUkQ4IHJlcVR5 cGU7CiAgICBCT09MIG93bmVyRXZlbnRzOwogICAgQ0FSRDE2IGxlbmd0aCAgOwogICAgQ0FSRDMy ICBncmFiV2luZG93ICA7CiAgICBDQVJEMTYgbW9kaWZpZXJzICA7CiAgICBDQVJEOCBrZXk7CiAg ICBCWVRFIHBvaW50ZXJNb2RlLCBrZXlib2FyZE1vZGU7ICAKICAgIEJZVEUgcGFkMSwgcGFkMiwg cGFkMzsKfSB4R3JhYktleVJlcTsKCnR5cGVkZWYgc3RydWN0IHsKICAgIENBUkQ4IHJlcVR5cGU7 CiAgICBDQVJEOCBrZXk7CiAgICBDQVJEMTYgbGVuZ3RoICA7CiAgICBDQVJEMzIgIGdyYWJXaW5k b3cgIDsKICAgIENBUkQxNiBtb2RpZmllcnMgIDsKICAgIENBUkQxNiBwYWQgIDsKfSB4VW5ncmFi S2V5UmVxOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgQ0FSRDggcmVxVHlwZTsKICAgIENBUkQ4IG1v ZGU7CiAgICBDQVJEMTYgbGVuZ3RoICA7CiAgICBDQVJEMzIgIHRpbWUgIDsKfSB4QWxsb3dFdmVu dHNSZXE7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBDQVJEOCByZXFUeXBlOwogICAgQllURSBwYWQ7 CiAgICBDQVJEMTYgbGVuZ3RoICA7CiAgICBDQVJEMzIgIHdpbmRvdyAgOwogICAgQ0FSRDMyICBz dGFydCAgLCBzdG9wICA7Cn0geEdldE1vdGlvbkV2ZW50c1JlcTsKCnR5cGVkZWYgc3RydWN0IHsK ICAgIENBUkQ4IHJlcVR5cGU7CiAgICBCWVRFIHBhZDsKICAgIENBUkQxNiBsZW5ndGggIDsKICAg IENBUkQzMiAgc3JjV2lkICAsIGRzdFdpZCAgOwogICAgSU5UMTYgc3JjWCAgLCBzcmNZICA7Cn0g eFRyYW5zbGF0ZUNvb3Jkc1JlcTsKCnR5cGVkZWYgc3RydWN0IHsKICAgIENBUkQ4IHJlcVR5cGU7 CiAgICBCWVRFIHBhZDsKICAgIENBUkQxNiBsZW5ndGggIDsKICAgIENBUkQzMiAgc3JjV2lkICAs IGRzdFdpZCAgOwogICAgSU5UMTYgc3JjWCAgLCBzcmNZICA7CiAgICBDQVJEMTYgc3JjV2lkdGgg ICwgc3JjSGVpZ2h0ICA7CiAgICBJTlQxNiBkc3RYICAsIGRzdFkgIDsKfSB4V2FycFBvaW50ZXJS ZXE7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBDQVJEOCByZXFUeXBlOwogICAgQ0FSRDggcmV2ZXJ0 VG87CiAgICBDQVJEMTYgbGVuZ3RoICA7CiAgICBDQVJEMzIgIGZvY3VzICA7CiAgICBDQVJEMzIg IHRpbWUgIDsKfSB4U2V0SW5wdXRGb2N1c1JlcTsKCnR5cGVkZWYgc3RydWN0IHsKICAgIENBUkQ4 IHJlcVR5cGU7CiAgICBCWVRFIHBhZDsKICAgIENBUkQxNiBsZW5ndGggIDsKICAgIENBUkQzMiAg ZmlkICA7CiAgICBDQVJEMTYgbmJ5dGVzICA7CiAgICBCWVRFIHBhZDEsIHBhZDI7CSAKfSB4T3Bl bkZvbnRSZXE7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBDQVJEOCByZXFUeXBlOwogICAgQk9PTCBv ZGRMZW5ndGg7CiAgICBDQVJEMTYgbGVuZ3RoICA7CiAgICBDQVJEMzIgIGZpZCAgOwogICAgfSB4 UXVlcnlUZXh0RXh0ZW50c1JlcTsKCnR5cGVkZWYgc3RydWN0IHsKICAgIENBUkQ4IHJlcVR5cGU7 CiAgICBCWVRFIHBhZDsKICAgIENBUkQxNiBsZW5ndGggIDsKICAgIENBUkQxNiBtYXhOYW1lcyAg OwogICAgQ0FSRDE2IG5ieXRlcyAgOyAgIAp9IHhMaXN0Rm9udHNSZXE7Cgp0eXBlZGVmIHhMaXN0 Rm9udHNSZXEgeExpc3RGb250c1dpdGhJbmZvUmVxOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgQ0FS RDggcmVxVHlwZTsKICAgIEJZVEUgcGFkOwogICAgQ0FSRDE2IGxlbmd0aCAgOwogICAgQ0FSRDE2 IG5Gb250cyAgOwogICAgQllURSBwYWQxLCBwYWQyOwkgCn0geFNldEZvbnRQYXRoUmVxOwoKdHlw ZWRlZiBzdHJ1Y3QgewogICAgQ0FSRDggcmVxVHlwZTsKICAgIENBUkQ4IGRlcHRoOwogICAgQ0FS RDE2IGxlbmd0aCAgOwogICAgQ0FSRDMyICBwaWQgIDsKICAgIENBUkQzMiAgZHJhd2FibGUgIDsK ICAgIENBUkQxNiB3aWR0aCAgLCBoZWlnaHQgIDsKfSB4Q3JlYXRlUGl4bWFwUmVxOwoKdHlwZWRl ZiBzdHJ1Y3QgewogICAgQ0FSRDggcmVxVHlwZTsKICAgIEJZVEUgcGFkOwogICAgQ0FSRDE2IGxl bmd0aCAgOwogICAgQ0FSRDMyICBnYyAgOwogICAgQ0FSRDMyICBkcmF3YWJsZSAgOwogICAgQ0FS RDMyIG1hc2sgIDsKfSB4Q3JlYXRlR0NSZXE7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBDQVJEOCBy ZXFUeXBlOwogICAgQllURSBwYWQ7CiAgICBDQVJEMTYgbGVuZ3RoICA7CiAgICBDQVJEMzIgIGdj ICA7CiAgICBDQVJEMzIgbWFzayAgOwp9IHhDaGFuZ2VHQ1JlcTsgICAgCgp0eXBlZGVmIHN0cnVj dCB7CiAgICBDQVJEOCByZXFUeXBlOwogICAgQllURSBwYWQ7CiAgICBDQVJEMTYgbGVuZ3RoICA7 CiAgICBDQVJEMzIgIHNyY0dDICAsIGRzdEdDICA7CiAgICBDQVJEMzIgbWFzayAgOwp9IHhDb3B5 R0NSZXE7ICAgIAoKdHlwZWRlZiBzdHJ1Y3QgewogICAgQ0FSRDggcmVxVHlwZTsKICAgIEJZVEUg cGFkOwogICAgQ0FSRDE2IGxlbmd0aCAgOwogICAgQ0FSRDMyICBnYyAgOwogICAgQ0FSRDE2IGRh c2hPZmZzZXQgIDsKICAgIENBUkQxNiBuRGFzaGVzICA7ICAgICAgICAgCn0geFNldERhc2hlc1Jl cTsgICAgCgp0eXBlZGVmIHN0cnVjdCB7CiAgICBDQVJEOCByZXFUeXBlOwogICAgQllURSBvcmRl cmluZzsKICAgIENBUkQxNiBsZW5ndGggIDsKICAgIENBUkQzMiAgZ2MgIDsKICAgIElOVDE2IHhP cmlnaW4gICwgeU9yaWdpbiAgOwp9IHhTZXRDbGlwUmVjdGFuZ2xlc1JlcTsgICAgCgp0eXBlZGVm IHN0cnVjdCB7CiAgICBDQVJEOCByZXFUeXBlOwogICAgQk9PTCBleHBvc3VyZXM7CiAgICBDQVJE MTYgbGVuZ3RoICA7CiAgICBDQVJEMzIgIHdpbmRvdyAgOwogICAgSU5UMTYgeCAgLCB5ICA7CiAg ICBDQVJEMTYgd2lkdGggICwgaGVpZ2h0ICA7Cn0geENsZWFyQXJlYVJlcTsKCnR5cGVkZWYgc3Ry dWN0IHsKICAgIENBUkQ4IHJlcVR5cGU7CiAgICBCWVRFIHBhZDsKICAgIENBUkQxNiBsZW5ndGgg IDsKICAgIENBUkQzMiAgc3JjRHJhd2FibGUgICwgZHN0RHJhd2FibGUgIDsKICAgIENBUkQzMiAg Z2MgIDsKICAgIElOVDE2IHNyY1ggICwgc3JjWSAgLCBkc3RYICAsIGRzdFkgIDsKICAgIENBUkQx NiB3aWR0aCAgLCBoZWlnaHQgIDsKfSB4Q29weUFyZWFSZXE7ICAgIAoKdHlwZWRlZiBzdHJ1Y3Qg ewogICAgQ0FSRDggcmVxVHlwZTsKICAgIEJZVEUgcGFkOwogICAgQ0FSRDE2IGxlbmd0aCAgOwog ICAgQ0FSRDMyICBzcmNEcmF3YWJsZSAgLCBkc3REcmF3YWJsZSAgOwogICAgQ0FSRDMyICBnYyAg OwogICAgSU5UMTYgc3JjWCAgLCBzcmNZICAsIGRzdFggICwgZHN0WSAgOwogICAgQ0FSRDE2IHdp ZHRoICAsIGhlaWdodCAgOwogICAgQ0FSRDMyIGJpdFBsYW5lICA7Cn0geENvcHlQbGFuZVJlcTsg ICAgCgp0eXBlZGVmIHN0cnVjdCB7CiAgICBDQVJEOCByZXFUeXBlOwogICAgQllURSBjb29yZE1v ZGU7CiAgICBDQVJEMTYgbGVuZ3RoICA7CiAgICBDQVJEMzIgIGRyYXdhYmxlICA7CiAgICBDQVJE MzIgIGdjICA7Cn0geFBvbHlQb2ludFJlcTsgICAgCgp0eXBlZGVmIHhQb2x5UG9pbnRSZXEgeFBv bHlMaW5lUmVxOyAgIAoKIAoKdHlwZWRlZiBzdHJ1Y3QgewogICAgQ0FSRDggcmVxVHlwZTsKICAg IEJZVEUgcGFkOwogICAgQ0FSRDE2IGxlbmd0aCAgOwogICAgQ0FSRDMyICBkcmF3YWJsZSAgOwog ICAgQ0FSRDMyICBnYyAgOwp9IHhQb2x5U2VnbWVudFJlcTsgICAgCgp0eXBlZGVmIHhQb2x5U2Vn bWVudFJlcSB4UG9seUFyY1JlcTsKdHlwZWRlZiB4UG9seVNlZ21lbnRSZXEgeFBvbHlSZWN0YW5n bGVSZXE7CnR5cGVkZWYgeFBvbHlTZWdtZW50UmVxIHhQb2x5RmlsbFJlY3RhbmdsZVJlcTsKdHlw ZWRlZiB4UG9seVNlZ21lbnRSZXEgeFBvbHlGaWxsQXJjUmVxOwoKdHlwZWRlZiBzdHJ1Y3QgX0Zp bGxQb2x5UmVxIHsKICAgIENBUkQ4IHJlcVR5cGU7CiAgICBCWVRFIHBhZDsKICAgIENBUkQxNiBs ZW5ndGggIDsKICAgIENBUkQzMiAgZHJhd2FibGUgIDsKICAgIENBUkQzMiAgZ2MgIDsKICAgIEJZ VEUgc2hhcGU7CiAgICBCWVRFIGNvb3JkTW9kZTsKICAgIENBUkQxNiBwYWQxICA7Cn0geEZpbGxQ b2x5UmVxOyAgICAKCgp0eXBlZGVmIHN0cnVjdCBfUHV0SW1hZ2VSZXEgewogICAgQ0FSRDggcmVx VHlwZTsKICAgIENBUkQ4IGZvcm1hdDsKICAgIENBUkQxNiBsZW5ndGggIDsKICAgIENBUkQzMiAg ZHJhd2FibGUgIDsKICAgIENBUkQzMiAgZ2MgIDsKICAgIENBUkQxNiB3aWR0aCAgLCBoZWlnaHQg IDsKICAgIElOVDE2IGRzdFggICwgZHN0WSAgOwogICAgQ0FSRDggbGVmdFBhZDsKICAgIENBUkQ4 IGRlcHRoOwogICAgQ0FSRDE2IHBhZCAgOwp9IHhQdXRJbWFnZVJlcTsgICAgCgp0eXBlZGVmIHN0 cnVjdCB7CiAgICBDQVJEOCByZXFUeXBlOwogICAgQ0FSRDggZm9ybWF0OwogICAgQ0FSRDE2IGxl bmd0aCAgOwogICAgQ0FSRDMyICBkcmF3YWJsZSAgOwogICAgSU5UMTYgeCAgLCB5ICA7CiAgICBD QVJEMTYgd2lkdGggICwgaGVpZ2h0ICA7CiAgICBDQVJEMzIgcGxhbmVNYXNrICA7Cn0geEdldElt YWdlUmVxOyAgICAKCiAKCnR5cGVkZWYgc3RydWN0IHsKICAgIENBUkQ4IHJlcVR5cGU7CiAgICBD QVJEOCBwYWQ7CiAgICBDQVJEMTYgbGVuZ3RoICA7CiAgICBDQVJEMzIgIGRyYXdhYmxlICA7CiAg ICBDQVJEMzIgIGdjICA7CiAgICBJTlQxNiB4ICAsIHkgIDsJCSAKfSB4UG9seVRleHRSZXE7ICAg IAoKdHlwZWRlZiB4UG9seVRleHRSZXEgeFBvbHlUZXh0OFJlcTsKdHlwZWRlZiB4UG9seVRleHRS ZXEgeFBvbHlUZXh0MTZSZXE7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBDQVJEOCByZXFUeXBlOwog ICAgQllURSBuQ2hhcnM7CiAgICBDQVJEMTYgbGVuZ3RoICA7CiAgICBDQVJEMzIgIGRyYXdhYmxl ICA7CiAgICBDQVJEMzIgIGdjICA7CiAgICBJTlQxNiB4ICAsIHkgIDsKfSB4SW1hZ2VUZXh0UmVx OyAgICAKCnR5cGVkZWYgeEltYWdlVGV4dFJlcSB4SW1hZ2VUZXh0OFJlcTsKdHlwZWRlZiB4SW1h Z2VUZXh0UmVxIHhJbWFnZVRleHQxNlJlcTsKCnR5cGVkZWYgc3RydWN0IHsKICAgIENBUkQ4IHJl cVR5cGU7CiAgICBCWVRFIGFsbG9jOwogICAgQ0FSRDE2IGxlbmd0aCAgOwogICAgQ0FSRDMyICBt aWQgIDsKICAgIENBUkQzMiAgd2luZG93ICA7CiAgICBDQVJEMzIgIHZpc3VhbCAgOwp9IHhDcmVh dGVDb2xvcm1hcFJlcTsgICAgCgp0eXBlZGVmIHN0cnVjdCB7CiAgICBDQVJEOCByZXFUeXBlOwog ICAgQllURSBwYWQ7CiAgICBDQVJEMTYgbGVuZ3RoICA7CiAgICBDQVJEMzIgIG1pZCAgOwogICAg Q0FSRDMyICBzcmNDbWFwICA7Cn0geENvcHlDb2xvcm1hcEFuZEZyZWVSZXE7ICAgIAoKdHlwZWRl ZiBzdHJ1Y3QgewogICAgQ0FSRDggcmVxVHlwZTsKICAgIEJZVEUgcGFkOwogICAgQ0FSRDE2IGxl bmd0aCAgOwogICAgQ0FSRDMyICBjbWFwICA7CiAgICBDQVJEMTYgcmVkICAsIGdyZWVuICAsIGJs dWUgIDsKICAgIENBUkQxNiBwYWQyICA7Cn0geEFsbG9jQ29sb3JSZXE7ICAgIAoKdHlwZWRlZiBz dHJ1Y3QgewogICAgQ0FSRDggcmVxVHlwZTsKICAgIEJZVEUgcGFkOwogICAgQ0FSRDE2IGxlbmd0 aCAgOwogICAgQ0FSRDMyICBjbWFwICA7CiAgICBDQVJEMTYgbmJ5dGVzICA7ICAgCiAgICBCWVRF IHBhZDEsIHBhZDI7Cn0geEFsbG9jTmFtZWRDb2xvclJlcTsgICAgCgp0eXBlZGVmIHN0cnVjdCB7 CiAgICBDQVJEOCByZXFUeXBlOwogICAgQk9PTCBjb250aWd1b3VzOwogICAgQ0FSRDE2IGxlbmd0 aCAgOwogICAgQ0FSRDMyICBjbWFwICA7CiAgICBDQVJEMTYgY29sb3JzICAsIHBsYW5lcyAgOwp9 IHhBbGxvY0NvbG9yQ2VsbHNSZXE7ICAgIAoKdHlwZWRlZiBzdHJ1Y3QgewogICAgQ0FSRDggcmVx VHlwZTsKICAgIEJPT0wgY29udGlndW91czsKICAgIENBUkQxNiBsZW5ndGggIDsKICAgIENBUkQz MiAgY21hcCAgOwogICAgQ0FSRDE2IGNvbG9ycyAgLCByZWQgICwgZ3JlZW4gICwgYmx1ZSAgOwp9 IHhBbGxvY0NvbG9yUGxhbmVzUmVxOyAgICAKCnR5cGVkZWYgc3RydWN0IHsKICAgIENBUkQ4IHJl cVR5cGU7CiAgICBCWVRFIHBhZDsKICAgIENBUkQxNiBsZW5ndGggIDsKICAgIENBUkQzMiAgY21h cCAgOwogICAgQ0FSRDMyIHBsYW5lTWFzayAgOwp9IHhGcmVlQ29sb3JzUmVxOyAgICAKCnR5cGVk ZWYgc3RydWN0IHsKICAgIENBUkQ4IHJlcVR5cGU7CiAgICBCWVRFIHBhZDsKICAgIENBUkQxNiBs ZW5ndGggIDsKICAgIENBUkQzMiAgY21hcCAgOwp9IHhTdG9yZUNvbG9yc1JlcTsgICAgCgp0eXBl ZGVmIHN0cnVjdCB7CiAgICBDQVJEOCByZXFUeXBlOwogICAgQ0FSRDggZmxhZ3M7ICAgIAogICAg Q0FSRDE2IGxlbmd0aCAgOwogICAgQ0FSRDMyICBjbWFwICA7CiAgICBDQVJEMzIgcGl4ZWwgIDsK ICAgIENBUkQxNiBuYnl0ZXMgIDsgICAKICAgIEJZVEUgcGFkMSwgcGFkMjsKICAgIH0geFN0b3Jl TmFtZWRDb2xvclJlcTsKCnR5cGVkZWYgc3RydWN0IHsKICAgIENBUkQ4IHJlcVR5cGU7CiAgICBC WVRFIHBhZDsKICAgIENBUkQxNiBsZW5ndGggIDsKICAgIENBUkQzMiAgY21hcCAgOwp9IHhRdWVy eUNvbG9yc1JlcTsgICAgCgp0eXBlZGVmIHN0cnVjdCB7ICAgICAKICAgIENBUkQ4IHJlcVR5cGU7 CiAgICBCWVRFIHBhZDsKICAgIENBUkQxNiBsZW5ndGggIDsKICAgIENBUkQzMiAgY21hcCAgOwog ICAgQ0FSRDE2IG5ieXRlcyAgOyAgIAogICAgQllURSBwYWQxLCBwYWQyOwp9IHhMb29rdXBDb2xv clJlcTsgICAgCgp0eXBlZGVmIHN0cnVjdCB7CiAgICBDQVJEOCByZXFUeXBlOwogICAgQllURSBw YWQ7CiAgICBDQVJEMTYgbGVuZ3RoICA7CiAgICBDQVJEMzIgIGNpZCAgOwogICAgQ0FSRDMyICBz b3VyY2UgICwgbWFzayAgOwogICAgQ0FSRDE2IGZvcmVSZWQgICwgZm9yZUdyZWVuICAsIGZvcmVC bHVlICA7CiAgICBDQVJEMTYgYmFja1JlZCAgLCBiYWNrR3JlZW4gICwgYmFja0JsdWUgIDsKICAg IENBUkQxNiB4ICAsIHkgIDsKfSB4Q3JlYXRlQ3Vyc29yUmVxOyAgICAKCnR5cGVkZWYgc3RydWN0 IHsKICAgIENBUkQ4IHJlcVR5cGU7CiAgICBCWVRFIHBhZDsKICAgIENBUkQxNiBsZW5ndGggIDsK ICAgIENBUkQzMiAgY2lkICA7CiAgICBDQVJEMzIgIHNvdXJjZSAgLCBtYXNrICA7CiAgICBDQVJE MTYgc291cmNlQ2hhciAgLCBtYXNrQ2hhciAgOwogICAgQ0FSRDE2IGZvcmVSZWQgICwgZm9yZUdy ZWVuICAsIGZvcmVCbHVlICA7CiAgICBDQVJEMTYgYmFja1JlZCAgLCBiYWNrR3JlZW4gICwgYmFj a0JsdWUgIDsKfSB4Q3JlYXRlR2x5cGhDdXJzb3JSZXE7ICAgIAoKdHlwZWRlZiBzdHJ1Y3Qgewog ICAgQ0FSRDggcmVxVHlwZTsKICAgIEJZVEUgcGFkOwogICAgQ0FSRDE2IGxlbmd0aCAgOwogICAg Q0FSRDMyICBjdXJzb3IgIDsKICAgIENBUkQxNiBmb3JlUmVkICAsIGZvcmVHcmVlbiAgLCBmb3Jl Qmx1ZSAgOwogICAgQ0FSRDE2IGJhY2tSZWQgICwgYmFja0dyZWVuICAsIGJhY2tCbHVlICA7Cn0g eFJlY29sb3JDdXJzb3JSZXE7ICAgIAoKdHlwZWRlZiBzdHJ1Y3QgewogICAgQ0FSRDggcmVxVHlw ZTsKCgoKICAgIENBUkQ4IGNsYXNzOwoKICAgIENBUkQxNiBsZW5ndGggIDsKICAgIENBUkQzMiAg ZHJhd2FibGUgIDsKICAgIENBUkQxNiB3aWR0aCAgLCBoZWlnaHQgIDsKfSB4UXVlcnlCZXN0U2l6 ZVJlcTsgICAgCgp0eXBlZGVmIHN0cnVjdCB7CiAgICBDQVJEOCByZXFUeXBlOwogICAgQllURSBw YWQ7CiAgICBDQVJEMTYgbGVuZ3RoICA7CiAgICBDQVJEMTYgbmJ5dGVzICA7ICAgCiAgICBCWVRF IHBhZDEsIHBhZDI7Cn0geFF1ZXJ5RXh0ZW5zaW9uUmVxOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAg Q0FSRDggICByZXFUeXBlOwogICAgQ0FSRDggICBudW1LZXlQZXJNb2RpZmllcjsKICAgIENBUkQx NiAgbGVuZ3RoICA7Cn0geFNldE1vZGlmaWVyTWFwcGluZ1JlcTsKCnR5cGVkZWYgc3RydWN0IHsK ICAgIENBUkQ4IHJlcVR5cGU7CiAgICBDQVJEOCBuRWx0czsgICAKICAgIENBUkQxNiBsZW5ndGgg IDsKfSB4U2V0UG9pbnRlck1hcHBpbmdSZXE7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBDQVJEOCBy ZXFUeXBlOwogICAgQllURSBwYWQ7CiAgICBDQVJEMTYgbGVuZ3RoICA7CiAgICBDQVJEOCAgZmly c3RLZXlDb2RlOwogICAgQ0FSRDggY291bnQ7CiAgICBDQVJEMTYgcGFkMSAgOwp9IHhHZXRLZXli b2FyZE1hcHBpbmdSZXE7ICAgIAoKdHlwZWRlZiBzdHJ1Y3QgewogICAgQ0FSRDggcmVxVHlwZTsK ICAgIENBUkQ4IGtleUNvZGVzOwogICAgQ0FSRDE2IGxlbmd0aCAgOwogICAgQ0FSRDggIGZpcnN0 S2V5Q29kZTsKICAgIENBUkQ4IGtleVN5bXNQZXJLZXlDb2RlOwogICAgQ0FSRDE2IHBhZDEgIDsK fSB4Q2hhbmdlS2V5Ym9hcmRNYXBwaW5nUmVxOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgQ0FSRDgg cmVxVHlwZTsKICAgIEJZVEUgcGFkOwogICAgQ0FSRDE2IGxlbmd0aCAgOwogICAgQ0FSRDMyIG1h c2sgIDsKfSB4Q2hhbmdlS2V5Ym9hcmRDb250cm9sUmVxOyAgICAKCnR5cGVkZWYgc3RydWN0IHsK ICAgIENBUkQ4IHJlcVR5cGU7CiAgICBJTlQ4IHBlcmNlbnQ7ICAgCiAgICBDQVJEMTYgbGVuZ3Ro ICA7Cn0geEJlbGxSZXE7ICAgIAoKdHlwZWRlZiBzdHJ1Y3QgewogICAgQ0FSRDggcmVxVHlwZTsK ICAgIEJZVEUgcGFkOwogICAgQ0FSRDE2IGxlbmd0aCAgOwogICAgSU5UMTYgYWNjZWxOdW0gICwg YWNjZWxEZW51bSAgOwogICAgSU5UMTYgdGhyZXNob2xkICA7ICAgICAgICAgICAgIAogICAgQk9P TCBkb0FjY2VsLCBkb1RocmVzaDsKfSB4Q2hhbmdlUG9pbnRlckNvbnRyb2xSZXE7ICAgIAoKdHlw ZWRlZiBzdHJ1Y3QgewogICAgQ0FSRDggcmVxVHlwZTsKICAgIEJZVEUgcGFkOwogICAgQ0FSRDE2 IGxlbmd0aCAgOwogICAgSU5UMTYgdGltZW91dCAgLCBpbnRlcnZhbCAgOwogICAgQllURSBwcmVm ZXJCbGFuaywgYWxsb3dFeHBvc2U7ICAKICAgIENBUkQxNiBwYWQyICA7Cn0geFNldFNjcmVlblNh dmVyUmVxOyAgICAKCnR5cGVkZWYgc3RydWN0IHsKICAgIENBUkQ4IHJlcVR5cGU7CiAgICBCWVRF IG1vZGU7CiAgICBDQVJEMTYgbGVuZ3RoICA7CiAgICBDQVJEOCBob3N0RmFtaWx5OwogICAgQllU RSBwYWQ7CiAgICBDQVJEMTYgaG9zdExlbmd0aCAgOwp9IHhDaGFuZ2VIb3N0c1JlcTsgICAgCgp0 eXBlZGVmIHN0cnVjdCB7CiAgICBDQVJEOCByZXFUeXBlOwogICAgQllURSBwYWQ7CiAgICBDQVJE MTYgbGVuZ3RoICA7CiAgICB9IHhMaXN0SG9zdHNSZXE7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBD QVJEOCByZXFUeXBlOwogICAgQllURSBtb2RlOwogICAgQ0FSRDE2IGxlbmd0aCAgOwogICAgfSB4 Q2hhbmdlTW9kZVJlcTsKCnR5cGVkZWYgeENoYW5nZU1vZGVSZXEgeFNldEFjY2Vzc0NvbnRyb2xS ZXE7CnR5cGVkZWYgeENoYW5nZU1vZGVSZXEgeFNldENsb3NlRG93bk1vZGVSZXE7CnR5cGVkZWYg eENoYW5nZU1vZGVSZXEgeEZvcmNlU2NyZWVuU2F2ZXJSZXE7Cgp0eXBlZGVmIHN0cnVjdCB7ICAK ICAgIENBUkQ4IHJlcVR5cGU7CiAgICBCWVRFIHBhZDsKICAgIENBUkQxNiBsZW5ndGggIDsKICAg IENBUkQzMiAgd2luZG93ICA7CiAgICBDQVJEMTYgbkF0b21zICA7CiAgICBJTlQxNiBuUG9zaXRp b25zICA7CiAgICB9IHhSb3RhdGVQcm9wZXJ0aWVzUmVxOwogICAgCgwKCiAKCgoKCiAKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgogCgoKCgoKCgoKCgoKCgoKIyA1MSAiLi4vLi4vaW5jbHVkZS9nYy5oIiAyCgoKIyAxICIuLi8u Li9pbmNsdWRlL3BpeG1hcC5oIiAxCiAKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCiAKCgoKCgogCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX0RyYXdhYmxlICpE cmF3YWJsZVB0cjsJCnR5cGVkZWYgc3RydWN0IF9QaXhtYXAgKlBpeG1hcFB0cjsKCnR5cGVkZWYg dW5pb24gX1BpeFVuaW9uIHsKICAgIFBpeG1hcFB0cgkJcGl4bWFwOwogICAgdW5zaWduZWQgbG9u ZwlwaXhlbDsKfSBQaXhVbmlvbjsKCgoKCgoKCgoKCgoKCmV4dGVybiBQaXhtYXBQdHIgR2V0U2Ny YXRjaFBpeG1hcEhlYWRlcigKCiAgICBTY3JlZW5QdHIgICwKICAgIGludCAgLAogICAgaW50ICAs CiAgICBpbnQgICwKICAgIGludCAgLAogICAgaW50ICAsCiAgICBwb2ludGVyICAKCik7CgpleHRl cm4gdm9pZCBGcmVlU2NyYXRjaFBpeG1hcEhlYWRlcigKCiAgICBQaXhtYXBQdHIgIAoKKTsKCmV4 dGVybiBCb29sIENyZWF0ZVNjcmF0Y2hQaXhtYXBzRm9yU2NyZWVuKAoKICAgIGludCAgCgopOwoK ZXh0ZXJuIHZvaWQgRnJlZVNjcmF0Y2hQaXhtYXBzRm9yU2NyZWVuKAoKICAgIGludCAgCgopOwoK ZXh0ZXJuIFBpeG1hcFB0ciBBbGxvY2F0ZVBpeG1hcCgKCiAgICBTY3JlZW5QdHIgICwKICAgIGlu dCAgCgopOwoKCiMgNTMgIi4uLy4uL2luY2x1ZGUvZ2MuaCIgMgoKCiAKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCnR5cGVkZWYgc3RydWN0IF9HQ0ludGVyZXN0ICpHQ0ludGVyZXN0UHRyOwp0eXBl ZGVmIHN0cnVjdCBfR0MgICAgKkdDUHRyOwp0eXBlZGVmIHN0cnVjdCBfR0NPcHMgKkdDT3BzUHRy OwoKZXh0ZXJuIHZvaWQgVmFsaWRhdGVHQygKCiAgICBEcmF3YWJsZVB0ciAgLAogICAgR0NQdHIg IAoKKTsKCmV4dGVybiBpbnQgQ2hhbmdlR0MoCgogICAgR0NQdHIgLAogICAgQklUUzMyICAsCiAg ICBYSUQqICAKCik7CgpleHRlcm4gaW50IERvQ2hhbmdlR0MoCgogICAgR0NQdHIgLAogICAgQklU UzMyICAsCiAgICBYSUQqICAsCiAgICBpbnQgIAoKKTsKCnR5cGVkZWYgdW5pb24gewogICAgQ0FS RDMyIHZhbDsKICAgIHBvaW50ZXIgcHRyOwp9IENoYW5nZUdDVmFsLCAqQ2hhbmdlR0NWYWxQdHI7 CgpleHRlcm4gaW50IGRpeENoYW5nZUdDKAoKICAgIENsaWVudFB0ciAgLAogICAgR0NQdHIgICwK ICAgIEJJVFMzMiAgLAogICAgQ0FSRDMyICogICwKICAgIENoYW5nZUdDVmFsUHRyICAKCik7Cgpl eHRlcm4gR0NQdHIgQ3JlYXRlR0MoCgogICAgRHJhd2FibGVQdHIgICwKICAgIEJJVFMzMiAgLAog ICAgWElEKiAgLAogICAgaW50KiAgCgopOwoKZXh0ZXJuIGludCBDb3B5R0MoCgogICAgR0NQdHIg LAogICAgR0NQdHIgLAogICAgQklUUzMyICAKCik7CgpleHRlcm4gaW50IEZyZWVHQygKCiAgICBw b2ludGVyICAsCiAgICBYSUQgIAoKKTsKCmV4dGVybiB2b2lkIFNldEdDTWFzaygKCiAgICBHQ1B0 ciAgLAogICAgTWFzayAgLAogICAgTWFzayAgCgopOwoKZXh0ZXJuIEdDUHRyIENyZWF0ZVNjcmF0 Y2hHQygKCiAgICBTY3JlZW5QdHIgICwKICAgIHVuc2lnbmVkICAKCik7CgpleHRlcm4gdm9pZCBG cmVlR0NwZXJEZXB0aCgKCiAgICBpbnQgIAoKKTsKCmV4dGVybiBCb29sIENyZWF0ZUdDcGVyRGVw dGgoCgogICAgaW50ICAKCik7CgpleHRlcm4gQm9vbCBDcmVhdGVEZWZhdWx0U3RpcHBsZSgKCiAg ICBpbnQgIAoKKTsKCmV4dGVybiB2b2lkIEZyZWVEZWZhdWx0U3RpcHBsZSgKCiAgICBpbnQgIAoK KTsKCmV4dGVybiBpbnQgU2V0RGFzaGVzKAoKICAgIEdDUHRyICAsCiAgICB1bnNpZ25lZCAgLAog ICAgdW5zaWduZWQgICwKICAgIHVuc2lnbmVkIGNoYXIqICAKCik7CgpleHRlcm4gaW50IFZlcmlm eVJlY3RPcmRlcigKCiAgICBpbnQgICwKICAgIHhSZWN0YW5nbGUqICAsCiAgICBpbnQgIAoKKTsK CmV4dGVybiBpbnQgU2V0Q2xpcFJlY3RzKAoKICAgIEdDUHRyICAsCiAgICBpbnQgICwKICAgIGlu dCAgLAogICAgaW50ICAsCiAgICB4UmVjdGFuZ2xlKiAgLAogICAgaW50ICAKCik7CgpleHRlcm4g R0NQdHIgR2V0U2NyYXRjaEdDKAoKICAgIHVuc2lnbmVkICAsCiAgICBTY3JlZW5QdHIgIAoKKTsK CmV4dGVybiB2b2lkIEZyZWVTY3JhdGNoR0MoCgogICAgR0NQdHIgIAoKKTsKCgojIDIxICIuLi8u Li9pbmNsdWRlL2JzdG9yZXN0ci5oIiAyCgoKIyAxICIuLi8uLi9pbmNsdWRlL3JlZ2lvbi5oIiAx CiAKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiLi4v Li4vaW5jbHVkZS9yZWdpb25zdHIuaCIgMQogCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgogCgoKCgoKCiAKCgoKCgoKCiAKCgoKdHlwZWRlZiBzdHJ1Y3QgX1JlZ0Rh dGEgewogICAgbG9uZwlzaXplOwogICAgbG9uZyAJbnVtUmVjdHM7CiAKfSBSZWdEYXRhUmVjLCAq UmVnRGF0YVB0cjsKCnR5cGVkZWYgc3RydWN0IF9SZWdpb24gewogICAgQm94UmVjIAlleHRlbnRz OwogICAgUmVnRGF0YVB0cglkYXRhOwp9IFJlZ2lvblJlYywgKlJlZ2lvblB0cjsKCmV4dGVybiBC b3hSZWMgbWlFbXB0eUJveDsKZXh0ZXJuIFJlZ0RhdGFSZWMgbWlFbXB0eURhdGE7CmV4dGVybiBS ZWdEYXRhUmVjIG1pQnJva2VuRGF0YTsKCgogCgoKCgoKCgoKCgoKIyAxNTkgIi4uLy4uL2luY2x1 ZGUvcmVnaW9uc3RyLmgiCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKIyAyMjkgIi4uLy4uL2luY2x1ZGUvcmVnaW9uc3RyLmgiCgoKCiMgMjUxICIuLi8uLi9p bmNsdWRlL3JlZ2lvbnN0ci5oIgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoK ZXh0ZXJuIFJlZ2lvblB0ciBtaVJlZ2lvbkNyZWF0ZSgKCiAgICBCb3hQdHIgICwKICAgIGludCAg CgopOwoKZXh0ZXJuIHZvaWQgbWlSZWdpb25Jbml0KAoKICAgIFJlZ2lvblB0ciAgLAogICAgQm94 UHRyICAsCiAgICBpbnQgIAoKKTsKCmV4dGVybiB2b2lkIG1pUmVnaW9uRGVzdHJveSgKCiAgICBS ZWdpb25QdHIgIAoKKTsKCmV4dGVybiB2b2lkIG1pUmVnaW9uVW5pbml0KAoKICAgIFJlZ2lvblB0 ciAgCgopOwoKZXh0ZXJuIEJvb2wgbWlSZWdpb25Db3B5KAoKICAgIFJlZ2lvblB0ciAgLAogICAg UmVnaW9uUHRyICAKCik7CgpleHRlcm4gQm9vbCBtaUludGVyc2VjdCgKCiAgICBSZWdpb25QdHIg ICwKICAgIFJlZ2lvblB0ciAgLAogICAgUmVnaW9uUHRyICAKCik7CgpleHRlcm4gQm9vbCBtaVVu aW9uKAoKICAgIFJlZ2lvblB0ciAgLAogICAgUmVnaW9uUHRyICAsCiAgICBSZWdpb25QdHIgIAoK KTsKCmV4dGVybiBCb29sIG1pUmVnaW9uQXBwZW5kKAoKICAgIFJlZ2lvblB0ciAgLAogICAgUmVn aW9uUHRyICAKCik7CgpleHRlcm4gQm9vbCBtaVJlZ2lvblZhbGlkYXRlKAoKICAgIFJlZ2lvblB0 ciAgLAogICAgQm9vbCAqICAKCik7CgpleHRlcm4gUmVnaW9uUHRyIG1pUmVjdHNUb1JlZ2lvbigK CiAgICBpbnQgICwKICAgIHhSZWN0YW5nbGVQdHIgICwKICAgIGludCAgCgopOwoKZXh0ZXJuIEJv b2wgbWlTdWJ0cmFjdCgKCiAgICBSZWdpb25QdHIgICwKICAgIFJlZ2lvblB0ciAgLAogICAgUmVn aW9uUHRyICAKCik7CgpleHRlcm4gQm9vbCBtaUludmVyc2UoCgogICAgUmVnaW9uUHRyICAsCiAg ICBSZWdpb25QdHIgICwKICAgIEJveFB0ciAgCgopOwoKZXh0ZXJuIGludCBtaVJlY3RJbigKCiAg ICBSZWdpb25QdHIgICwKICAgIEJveFB0ciAgCgopOwoKZXh0ZXJuIHZvaWQgbWlUcmFuc2xhdGVS ZWdpb24oCgogICAgUmVnaW9uUHRyICAsCiAgICBpbnQgICwKICAgIGludCAgCgopOwoKZXh0ZXJu IHZvaWQgbWlSZWdpb25SZXNldCgKCiAgICBSZWdpb25QdHIgICwKICAgIEJveFB0ciAgCgopOwoK ZXh0ZXJuIEJvb2wgbWlQb2ludEluUmVnaW9uKAoKICAgIFJlZ2lvblB0ciAgLAogICAgaW50ICAs CiAgICBpbnQgICwKICAgIEJveFB0ciAgCgopOwoKZXh0ZXJuIEJvb2wgbWlSZWdpb25Ob3RFbXB0 eSgKCiAgICBSZWdpb25QdHIgIAoKKTsKCmV4dGVybiB2b2lkIG1pUmVnaW9uRW1wdHkoCgogICAg UmVnaW9uUHRyICAKCik7CgpleHRlcm4gQm94UHRyIG1pUmVnaW9uRXh0ZW50cygKCiAgICBSZWdp b25QdHIgIAoKKTsKCgojIDQ3ICIuLi8uLi9pbmNsdWRlL3JlZ2lvbi5oIiAyCgoKCiMgMjMgIi4u Ly4uL2luY2x1ZGUvYnN0b3Jlc3RyLmgiIDIKCiMgMSAiLi4vLi4vaW5jbHVkZS93aW5kb3cuaCIg MQogCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgogCgoKCgoKCnR5cGVkZWYgc3RydWN0IF9CYWNraW5nU3RvcmUgKkJhY2tpbmdTdG9yZVB0 cjsKdHlwZWRlZiBzdHJ1Y3QgX1dpbmRvdyAqV2luZG93UHRyOwoKdHlwZWRlZiBpbnQgKCpWaXNp dFdpbmRvd1Byb2NQdHIpKAoKICAgIFdpbmRvd1B0ciAgLAogICAgcG9pbnRlciAgCgopOwoKZXh0 ZXJuIGludCBUcmF2ZXJzZVRyZWUoCgogICAgV2luZG93UHRyICAsCiAgICBWaXNpdFdpbmRvd1By b2NQdHIgICwKICAgIHBvaW50ZXIgIAoKKTsKCmV4dGVybiBpbnQgV2Fsa1RyZWUoCgogICAgU2Ny ZWVuUHRyICAsCiAgICBWaXNpdFdpbmRvd1Byb2NQdHIgICwKICAgIHBvaW50ZXIgIAoKKTsKCmV4 dGVybiBXaW5kb3dQdHIgQWxsb2NhdGVXaW5kb3coCgogICAgU2NyZWVuUHRyICAKCik7CgpleHRl cm4gQm9vbCBDcmVhdGVSb290V2luZG93KAoKICAgIFNjcmVlblB0ciAgCgopOwoKZXh0ZXJuIHZv aWQgSW5pdFJvb3RXaW5kb3coCgogICAgV2luZG93UHRyICAKCik7CgpleHRlcm4gdm9pZCBDbGlw cGVkUmVnaW9uRnJvbUJveCgKCiAgICBXaW5kb3dQdHIgICwKICAgIFJlZ2lvblB0ciAgLAogICAg aW50ICAsCiAgICBpbnQgICwKICAgIGludCAgLAogICAgaW50ICAKCik7CgpleHRlcm4gV2luZG93 UHRyIFJlYWxDaGlsZEhlYWQoCgogICAgV2luZG93UHRyICAKCik7CgpleHRlcm4gV2luZG93UHRy IENyZWF0ZVdpbmRvdygKCiAgICBXaW5kb3cgICwKICAgIFdpbmRvd1B0ciAgLAogICAgaW50ICAs CiAgICBpbnQgICwKICAgIHVuc2lnbmVkIGludCAgLAogICAgdW5zaWduZWQgaW50ICAsCiAgICB1 bnNpZ25lZCBpbnQgICwKICAgIHVuc2lnbmVkIGludCAgLAogICAgTWFzayAgLAogICAgWElEKiAg LAogICAgaW50ICAsCiAgICBDbGllbnRQdHIgICwKICAgIFZpc3VhbElEICAsCiAgICBpbnQqICAK Cik7CgpleHRlcm4gaW50IERlbGV0ZVdpbmRvdygKCiAgICBwb2ludGVyICAsCiAgICBYSUQgIAoK KTsKCmV4dGVybiB2b2lkIERlc3Ryb3lTdWJ3aW5kb3dzKAoKICAgIFdpbmRvd1B0ciAgLAogICAg Q2xpZW50UHRyICAKCik7CgpleHRlcm4gaW50IENoYW5nZVdpbmRvd0F0dHJpYnV0ZXMoCgogICAg V2luZG93UHRyICAsCiAgICBNYXNrICAsCiAgICBYSUQqICAsCiAgICBDbGllbnRQdHIgIAoKKTsK CmV4dGVybiB2b2lkIEdldFdpbmRvd0F0dHJpYnV0ZXMoCgogICAgV2luZG93UHRyICAsCiAgICBD bGllbnRQdHIgICwKICAgIHhHZXRXaW5kb3dBdHRyaWJ1dGVzUmVwbHkqICAKCik7CgpleHRlcm4g UmVnaW9uUHRyIENyZWF0ZVVuY2xpcHBlZFdpblNpemUoCgogICAgV2luZG93UHRyICAKCik7Cgpl eHRlcm4gdm9pZCBHcmF2aXR5VHJhbnNsYXRlKAoKICAgIGludCAgLAogICAgaW50ICAsCiAgICBp bnQgICwKICAgIGludCAgLAogICAgaW50ICAsCiAgICBpbnQgICwKICAgIHVuc2lnbmVkICAsCiAg ICBpbnQqICAsCiAgICBpbnQqICAKCik7CgpleHRlcm4gaW50IENvbmZpZ3VyZVdpbmRvdygKCiAg ICBXaW5kb3dQdHIgICwKICAgIE1hc2sgICwKICAgIFhJRCogICwKICAgIENsaWVudFB0ciAgCgop OwoKZXh0ZXJuIGludCBDaXJjdWxhdGVXaW5kb3coCgogICAgV2luZG93UHRyICAsCiAgICBpbnQg ICwKICAgIENsaWVudFB0ciAgCgopOwoKZXh0ZXJuIGludCBSZXBhcmVudFdpbmRvdygKCiAgICBX aW5kb3dQdHIgICwKICAgIFdpbmRvd1B0ciAgLAogICAgaW50ICAsCiAgICBpbnQgICwKICAgIENs aWVudFB0ciAgCgopOwoKZXh0ZXJuIGludCBNYXBXaW5kb3coCgogICAgV2luZG93UHRyICAsCiAg ICBDbGllbnRQdHIgIAoKKTsKCmV4dGVybiB2b2lkIE1hcFN1YndpbmRvd3MoCgogICAgV2luZG93 UHRyICAsCiAgICBDbGllbnRQdHIgIAoKKTsKCmV4dGVybiBpbnQgVW5tYXBXaW5kb3coCgogICAg V2luZG93UHRyICAsCiAgICBCb29sICAKCik7CgpleHRlcm4gdm9pZCBVbm1hcFN1YndpbmRvd3Mo CgogICAgV2luZG93UHRyICAKCik7CgpleHRlcm4gdm9pZCBIYW5kbGVTYXZlU2V0KAoKICAgIENs aWVudFB0ciAgCgopOwoKZXh0ZXJuIEJvb2wgVmlzaWJsZUJvdW5kaW5nQm94RnJvbVBvaW50KAoK ICAgIFdpbmRvd1B0ciAgLAogICAgaW50ICAsCiAgICBpbnQgICwKICAgIEJveFB0ciAgCgopOwoK ZXh0ZXJuIEJvb2wgUG9pbnRJbldpbmRvd0lzVmlzaWJsZSgKCiAgICBXaW5kb3dQdHIgICwKICAg IGludCAgLAogICAgaW50ICAKCik7CgpleHRlcm4gUmVnaW9uUHRyIE5vdENsaXBwZWRCeUNoaWxk cmVuKAoKICAgIFdpbmRvd1B0ciAgCgopOwoKZXh0ZXJuIHZvaWQgU2VuZFZpc2liaWxpdHlOb3Rp ZnkoCgogICAgV2luZG93UHRyICAKCik7CgpleHRlcm4gdm9pZCBTYXZlU2NyZWVucygKCiAgICBp bnQgICwKICAgIGludCAgCgopOwoKZXh0ZXJuIFdpbmRvd1B0ciBGaW5kV2luZG93V2l0aE9wdGlv bmFsKAoKICAgIFdpbmRvd1B0ciAgCgopOwoKZXh0ZXJuIHZvaWQgQ2hlY2tXaW5kb3dPcHRpb25h bE5lZWQoCgogICAgV2luZG93UHRyICAKCik7CgpleHRlcm4gQm9vbCBNYWtlV2luZG93T3B0aW9u YWwoCgogICAgV2luZG93UHRyICAKCik7CgpleHRlcm4gdm9pZCBEaXNwb3NlV2luZG93T3B0aW9u YWwoCgogICAgV2luZG93UHRyICAKCik7CgpleHRlcm4gV2luZG93UHRyIE1vdmVXaW5kb3dJblN0 YWNrKAoKICAgIFdpbmRvd1B0ciAgLAogICAgV2luZG93UHRyICAKCik7Cgp2b2lkIFNldFdpblNp emUoCgogICAgV2luZG93UHRyICAKCik7Cgp2b2lkIFNldEJvcmRlclNpemUoCgogICAgV2luZG93 UHRyICAKCik7Cgp2b2lkIFJlc2l6ZUNoaWxkcmVuV2luU2l6ZSgKCiAgICBXaW5kb3dQdHIgICwK ICAgIGludCAgLAogICAgaW50ICAsCiAgICBpbnQgICwKICAgIGludCAgCgopOwoKCiMgMjQgIi4u Ly4uL2luY2x1ZGUvYnN0b3Jlc3RyLmgiIDIKCgp0eXBlZGVmICAgIHZvaWQgKCogQmFja2luZ1N0 b3JlU2F2ZUFyZWFzUHJvY1B0cikoCgoJUGl4bWFwUHRyICAsCglSZWdpb25QdHIgICwKCWludCAg LAoJaW50ICAsCglXaW5kb3dQdHIgIAoKKTsKCnR5cGVkZWYgICAgdm9pZCAoKiBCYWNraW5nU3Rv cmVSZXN0b3JlQXJlYXNQcm9jUHRyKSgKCglQaXhtYXBQdHIgICwKCVJlZ2lvblB0ciAgLAoJaW50 ICAsCglpbnQgICwKCVdpbmRvd1B0ciAgCgopOwoKdHlwZWRlZiAgICB2b2lkICgqIEJhY2tpbmdT dG9yZVNldENsaXBtYXNrUmduUHJvY1B0cikoCgoJR0NQdHIgICwKCVJlZ2lvblB0ciAgCgopOwoK dHlwZWRlZiAgICBQaXhtYXBQdHIgKCogQmFja2luZ1N0b3JlR2V0SW1hZ2VQaXhtYXBQcm9jUHRy KSgJIAoKCXZvaWQKCik7Cgp0eXBlZGVmICAgIFBpeG1hcFB0ciAoKiBCYWNraW5nU3RvcmVHZXRT cGFuc1BpeG1hcFByb2NQdHIpKAkgCgoJdm9pZAoKKTsKCnR5cGVkZWYgc3RydWN0IF9CU0Z1bmNz IHsKCglCYWNraW5nU3RvcmVTYXZlQXJlYXNQcm9jUHRyIFNhdmVBcmVhczsKCUJhY2tpbmdTdG9y ZVJlc3RvcmVBcmVhc1Byb2NQdHIgUmVzdG9yZUFyZWFzOwoJQmFja2luZ1N0b3JlU2V0Q2xpcG1h c2tSZ25Qcm9jUHRyIFNldENsaXBtYXNrUmduOwoJQmFja2luZ1N0b3JlR2V0SW1hZ2VQaXhtYXBQ cm9jUHRyIEdldEltYWdlUGl4bWFwOwoJQmFja2luZ1N0b3JlR2V0U3BhbnNQaXhtYXBQcm9jUHRy IEdldFNwYW5zUGl4bWFwOwoKfSBCU0Z1bmNSZWMsICpCU0Z1bmNQdHI7CgoKIyAyMSAiLi4vLi4v aW5jbHVkZS9ic3RvcmUuaCIgMgoKCgojIDUxICIuLi8uLi9pbmNsdWRlL3Njcm5pbnRzdHIuaCIg MgoKIyAxICIuLi8uLi9pbmNsdWRlL2NvbG9ybWFwLmgiIDEKIAogCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKIAoKCiAKCgoKCgoKCgogCgoKCgoKCnR5 cGVkZWYgQ0FSRDMyIFBpeGVsOwp0eXBlZGVmIHN0cnVjdCBfQ01FbnRyeSAqRW50cnlQdHI7CiAK dHlwZWRlZiBzdHJ1Y3QgX2NvbG9yUmVzb3VyY2UgKmNvbG9yUmVzb3VyY2VQdHI7CgpleHRlcm4g aW50IENyZWF0ZUNvbG9ybWFwKAoKICAgIENvbG9ybWFwICAsCiAgICBTY3JlZW5QdHIgICwKICAg IFZpc3VhbFB0ciAgLAogICAgQ29sb3JtYXBQdHIqICAsCiAgICBpbnQgICwKICAgIGludCAgCgop OwoKZXh0ZXJuIGludCBGcmVlQ29sb3JtYXAoCgogICAgcG9pbnRlciAgLAogICAgWElEICAKCik7 CgpleHRlcm4gaW50IFRlbGxMb3N0TWFwKAoKICAgIFdpbmRvd1B0ciAgLAogICAgcG9pbnRlciAg CgopOwoKZXh0ZXJuIGludCBUZWxsR2FpbmVkTWFwKAoKICAgIFdpbmRvd1B0ciAgLAogICAgcG9p bnRlciAgCgopOwoKZXh0ZXJuIGludCBDb3B5Q29sb3JtYXBBbmRGcmVlKAoKICAgIENvbG9ybWFw ICAsCiAgICBDb2xvcm1hcFB0ciAgLAogICAgaW50ICAKCik7CgpleHRlcm4gaW50IEFsbG9jQ29s b3IoCgogICAgQ29sb3JtYXBQdHIgICwKICAgIHVuc2lnbmVkIHNob3J0KiAgLAogICAgdW5zaWdu ZWQgc2hvcnQqICAsCiAgICB1bnNpZ25lZCBzaG9ydCogICwKICAgIFBpeGVsKiAgLAogICAgaW50 ICAKCik7CgpleHRlcm4gdm9pZCBGYWtlQWxsb2NDb2xvcigKCiAgICBDb2xvcm1hcFB0ciAgLAog ICAgeENvbG9ySXRlbSAqICAKCik7CgpleHRlcm4gdm9pZCBGYWtlRnJlZUNvbG9yKAoKICAgIENv bG9ybWFwUHRyICAsCiAgICBQaXhlbCAgCgopOwoKdHlwZWRlZiBpbnQgKCpDb2xvckNvbXBhcmVQ cm9jUHRyKSgKCiAgICBFbnRyeVB0ciAgLAogICAgeHJnYiAqICAKCik7CgpleHRlcm4gaW50IEZp bmRDb2xvcigKCiAgICBDb2xvcm1hcFB0ciAgLAogICAgRW50cnlQdHIgICwKICAgIGludCAgLAog ICAgeHJnYiogICwKICAgIFBpeGVsKiAgLAogICAgaW50ICAsCiAgICBpbnQgICwKICAgIENvbG9y Q29tcGFyZVByb2NQdHIgIAoKKTsKCmV4dGVybiBpbnQgUXVlcnlDb2xvcnMoCgogICAgQ29sb3Jt YXBQdHIgICwKICAgIGludCAgLAogICAgUGl4ZWwqICAsCiAgICB4cmdiKiAgCgopOwoKZXh0ZXJu IGludCBGcmVlQ2xpZW50UGl4ZWxzKAoKICAgIHBvaW50ZXIgICwKICAgIFhJRCAgCgopOwoKZXh0 ZXJuIGludCBBbGxvY0NvbG9yQ2VsbHMoCgogICAgaW50ICAsCiAgICBDb2xvcm1hcFB0ciAgLAog ICAgaW50ICAsCiAgICBpbnQgICwKICAgIEJvb2wgICwKICAgIFBpeGVsKiAgLAogICAgUGl4ZWwq ICAKCik7CgpleHRlcm4gaW50IEFsbG9jQ29sb3JQbGFuZXMoCgogICAgaW50ICAsCiAgICBDb2xv cm1hcFB0ciAgLAogICAgaW50ICAsCiAgICBpbnQgICwKICAgIGludCAgLAogICAgaW50ICAsCiAg ICBCb29sICAsCiAgICBQaXhlbCogICwKICAgIFBpeGVsKiAgLAogICAgUGl4ZWwqICAsCiAgICBQ aXhlbCogIAoKKTsKCmV4dGVybiBpbnQgRnJlZUNvbG9ycygKCiAgICBDb2xvcm1hcFB0ciAgLAog ICAgaW50ICAsCiAgICBpbnQgICwKICAgIFBpeGVsKiAgLAogICAgUGl4ZWwgIAoKKTsKCmV4dGVy biBpbnQgU3RvcmVDb2xvcnMoCgogICAgQ29sb3JtYXBQdHIgICwKICAgIGludCAgLAogICAgeENv bG9ySXRlbSogIAoKKTsKCmV4dGVybiBpbnQgSXNNYXBJbnN0YWxsZWQoCgogICAgQ29sb3JtYXAg ICwKICAgIFdpbmRvd1B0ciAgCgopOwoKCiMgNTIgIi4uLy4uL2luY2x1ZGUvc2NybmludHN0ci5o IiAyCgojIDEgIi4uLy4uL2luY2x1ZGUvY3Vyc29yLmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX0N1cnNvciAq Q3Vyc29yUHRyOwp0eXBlZGVmIHN0cnVjdCBfQ3Vyc29yTWV0cmljICpDdXJzb3JNZXRyaWNQdHI7 CgpleHRlcm4gQ3Vyc29yUHRyIHJvb3RDdXJzb3I7CgpleHRlcm4gaW50IEZyZWVDdXJzb3IoCgog ICAgcG9pbnRlciAgLAogICAgWElEICAKCik7CgpleHRlcm4gQ3Vyc29yUHRyIEFsbG9jQ3Vyc29y KAoKICAgIHVuc2lnbmVkIGNoYXIqICAsCiAgICB1bnNpZ25lZCBjaGFyKiAgLAogICAgQ3Vyc29y TWV0cmljUHRyICAsCiAgICB1bnNpZ25lZCAgLAogICAgdW5zaWduZWQgICwKICAgIHVuc2lnbmVk ICAsCiAgICB1bnNpZ25lZCAgLAogICAgdW5zaWduZWQgICwKICAgIHVuc2lnbmVkICAKCik7Cgpl eHRlcm4gaW50IEFsbG9jR2x5cGhDdXJzb3IoCgogICAgRm9udCAgLAogICAgdW5zaWduZWQgaW50 ICAsCiAgICBGb250ICAsCiAgICB1bnNpZ25lZCBpbnQgICwKICAgIHVuc2lnbmVkICAsCiAgICB1 bnNpZ25lZCAgLAogICAgdW5zaWduZWQgICwKICAgIHVuc2lnbmVkICAsCiAgICB1bnNpZ25lZCAg LAogICAgdW5zaWduZWQgICwKICAgIEN1cnNvclB0ciogICwKICAgIENsaWVudFB0ciAgCgopOwoK ZXh0ZXJuIEN1cnNvclB0ciBDcmVhdGVSb290Q3Vyc29yKAoKICAgIGNoYXIqICAsCiAgICB1bnNp Z25lZCBpbnQgIAoKKTsKCmV4dGVybiBpbnQgU2VydmVyQml0c0Zyb21HbHlwaCgKCiAgICBGb250 UHRyICAsCiAgICB1bnNpZ25lZCBpbnQgICwKICAgIHJlZ2lzdGVyIEN1cnNvck1ldHJpY1B0ciAg LAogICAgdW5zaWduZWQgY2hhciAqKiAgCgopOwoKZXh0ZXJuIEJvb2wgQ3Vyc29yTWV0cmljc0Zy b21HbHlwaCgKCiAgICBGb250UHRyICAsCiAgICB1bnNpZ25lZCAgLAogICAgQ3Vyc29yTWV0cmlj UHRyICAKCik7CgpleHRlcm4gdm9pZCBDaGVja0N1cnNvckNvbmZpbmVtZW50KAoKICAgIFdpbmRv d1B0ciAgCgopOwoKZXh0ZXJuIHZvaWQgTmV3Q3VycmVudFNjcmVlbigKCiAgICBTY3JlZW5QdHIg ICwKICAgIGludCAgLAogICAgaW50ICAKCik7CgpleHRlcm4gQm9vbCBQb2ludGVyQ29uZmluZWRU b1NjcmVlbigKCiAgICB2b2lkCgopOwoKZXh0ZXJuIHZvaWQgR2V0U3ByaXRlUG9zaXRpb24oCgog ICAgaW50ICogICwKICAgIGludCAqICAKCik7CgoKIyA1MyAiLi4vLi4vaW5jbHVkZS9zY3JuaW50 c3RyLmgiIDIKCiMgMSAiLi4vLi4vaW5jbHVkZS92YWxpZGF0ZS5oIiAxCiAKCiAKCgoKCgoKCgoK CgoKCgoKCgoKCiAKCgoKCgoKCnR5cGVkZWYgZW51bSB7IFZUT3RoZXIsIFZUU3RhY2ssIFZUTW92 ZSwgVlRVbm1hcCwgVlRNYXAsIFZUQnJva2VuIH0gVlRLaW5kOwoKIAp0eXBlZGVmIHVuaW9uIF9W YWxpZGF0ZSAqVmFsaWRhdGVQdHI7CgoKCgojIDU0ICIuLi8uLi9pbmNsdWRlL3Njcm5pbnRzdHIu aCIgMgoKCiMgMSAiLi4vLi4vaW5jbHVkZS9kaXguaCIgMQogCiAKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCiMgMSAiLi4vLi4vaW5jbHVkZS9pbnB1dC5o IiAxCiAKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgTGVkczsKdHlw ZWRlZiBzdHJ1Y3QgX090aGVyQ2xpZW50cyAqT3RoZXJDbGllbnRzUHRyOwp0eXBlZGVmIHN0cnVj dCBfSW5wdXRDbGllbnRzICpJbnB1dENsaWVudHNQdHI7CnR5cGVkZWYgc3RydWN0IF9EZXZpY2VJ bnRSZWMgKkRldmljZUludFB0cjsKCnR5cGVkZWYgaW50ICgqRGV2aWNlUHJvYykoCgogICAgRGV2 aWNlSW50UHRyICAsCiAgICBpbnQgIAoKKTsKCnR5cGVkZWYgdm9pZCAoKlByb2Nlc3NJbnB1dFBy b2MpKAoKICAgIHhFdmVudFB0ciAgLAogICAgRGV2aWNlSW50UHRyICAsCiAgICBpbnQgIAoKKTsK CnR5cGVkZWYgc3RydWN0IF9EZXZpY2VSZWMgewogICAgcG9pbnRlcglkZXZpY2VQcml2YXRlOwog ICAgUHJvY2Vzc0lucHV0UHJvYyBwcm9jZXNzSW5wdXRQcm9jOwkgCiAgICBQcm9jZXNzSW5wdXRQ cm9jIHJlYWxJbnB1dFByb2M7CSAKICAgIFByb2Nlc3NJbnB1dFByb2MgZW5xdWV1ZUlucHV0UHJv YzsJIAogICAgQm9vbAlvbjsJCQkgCn0gRGV2aWNlUmVjLCAqRGV2aWNlUHRyOwoKdHlwZWRlZiBz dHJ1Y3QgewogICAgaW50CQkJY2xpY2ssIGJlbGwsIGJlbGxfcGl0Y2gsIGJlbGxfZHVyYXRpb247 CiAgICBCb29sCQlhdXRvUmVwZWF0OwogICAgdW5zaWduZWQgY2hhcglhdXRvUmVwZWF0c1szMl07 CiAgICBMZWRzCQlsZWRzOwogICAgdW5zaWduZWQgY2hhcglpZDsKfSBLZXliZEN0cmw7Cgp0eXBl ZGVmIHN0cnVjdCB7CiAgICBLZXlTeW0gICptYXA7CiAgICBLZXlDb2RlIG1pbktleUNvZGUsCgkg ICAgbWF4S2V5Q29kZTsKICAgIGludCAgICAgbWFwV2lkdGg7Cn0gS2V5U3ltc1JlYywgKktleVN5 bXNQdHI7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBpbnQJCW51bSwgZGVuLCB0aHJlc2hvbGQ7CiAg ICB1bnNpZ25lZCBjaGFyIGlkOwp9IFB0ckN0cmw7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBpbnQg ICAgICAgICByZXNvbHV0aW9uLCBtaW5fdmFsdWUsIG1heF92YWx1ZTsKICAgIGludCAgICAgICAg IGludGVnZXJfZGlzcGxheWVkOwogICAgdW5zaWduZWQgY2hhciBpZDsKfSBJbnRlZ2VyQ3RybDsK CnR5cGVkZWYgc3RydWN0IHsKICAgIGludCAgICAgICAgIG1heF9zeW1ib2xzLCBudW1fc3ltYm9s c19zdXBwb3J0ZWQ7CiAgICBpbnQgICAgICAgICBudW1fc3ltYm9sc19kaXNwbGF5ZWQ7CiAgICBL ZXlTeW0gICAgICAqc3ltYm9sc19zdXBwb3J0ZWQ7CiAgICBLZXlTeW0gICAgICAqc3ltYm9sc19k aXNwbGF5ZWQ7CiAgICB1bnNpZ25lZCBjaGFyIGlkOwp9IFN0cmluZ0N0cmw7Cgp0eXBlZGVmIHN0 cnVjdCB7CiAgICBpbnQgICAgICAgICBwZXJjZW50LCBwaXRjaCwgZHVyYXRpb247CiAgICB1bnNp Z25lZCBjaGFyIGlkOwp9IEJlbGxDdHJsOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgTGVkcyAgICAg ICAgbGVkX3ZhbHVlczsKICAgIE1hc2sgICAgICAgIGxlZF9tYXNrOwogICAgdW5zaWduZWQgY2hh ciBpZDsKfSBMZWRDdHJsOwoKZXh0ZXJuIEtleWJkQ3RybAlkZWZhdWx0S2V5Ym9hcmRDb250cm9s OwpleHRlcm4gUHRyQ3RybAkJZGVmYXVsdFBvaW50ZXJDb250cm9sOwoKCmV4dGVybiBEZXZpY2VQ dHIgQWRkSW5wdXREZXZpY2UoCgogICAgRGV2aWNlUHJvYyAgLAogICAgQm9vbCAgCgopOwoKCgoK ZXh0ZXJuIERldmljZUludFB0ciBfQWRkSW5wdXREZXZpY2UoCgogICAgRGV2aWNlUHJvYyAgLAog ICAgQm9vbCAgCgopOwoKZXh0ZXJuIEJvb2wgRW5hYmxlRGV2aWNlKAoKICAgIERldmljZUludFB0 ciAgCgopOwoKZXh0ZXJuIEJvb2wgRGlzYWJsZURldmljZSgKCiAgICBEZXZpY2VJbnRQdHIgIAoK KTsKCmV4dGVybiBpbnQgSW5pdEFuZFN0YXJ0RGV2aWNlcygKCiAgICB2b2lkCgopOwoKZXh0ZXJu IHZvaWQgQ2xvc2VEb3duRGV2aWNlcygKCiAgICB2b2lkCgopOwoKZXh0ZXJuIHZvaWQgUmVtb3Zl RGV2aWNlKAoKICAgIERldmljZUludFB0ciAgCgopOwoKZXh0ZXJuIGludCBOdW1Nb3Rpb25FdmVu dHMoCgogICAgdm9pZAoKKTsKCgpleHRlcm4gdm9pZCBSZWdpc3RlclBvaW50ZXJEZXZpY2UoCgog ICAgRGV2aWNlUHRyICAKCik7CgoKCgpleHRlcm4gdm9pZCBfUmVnaXN0ZXJQb2ludGVyRGV2aWNl KAoKICAgIERldmljZUludFB0ciAgCgopOwoKCmV4dGVybiB2b2lkIFJlZ2lzdGVyS2V5Ym9hcmRE ZXZpY2UoCgogICAgRGV2aWNlUHRyICAKCik7CgoKCgpleHRlcm4gdm9pZCBfUmVnaXN0ZXJLZXli b2FyZERldmljZSgKCiAgICBEZXZpY2VJbnRQdHIgIAoKKTsKCmV4dGVybiBEZXZpY2VQdHIgTG9v a3VwS2V5Ym9hcmREZXZpY2UoCgogICAgdm9pZAoKKTsKCmV4dGVybiBEZXZpY2VQdHIgTG9va3Vw UG9pbnRlckRldmljZSgKCiAgICB2b2lkCgopOwoKZXh0ZXJuIERldmljZVB0ciBMb29rdXBEZXZp Y2UoCgogICAgaW50ICAKCik7CgpleHRlcm4gdm9pZCBRdWVyeU1pbk1heEtleUNvZGVzKAoKICAg IEtleUNvZGUqICAsCiAgICBLZXlDb2RlKiAgCgopOwoKZXh0ZXJuIEJvb2wgU2V0S2V5U3ltc01h cCgKCiAgICBLZXlTeW1zUHRyICAsCiAgICBLZXlTeW1zUHRyICAKCik7CgpleHRlcm4gQm9vbCBJ bml0S2V5Q2xhc3NEZXZpY2VTdHJ1Y3QoCgogICAgRGV2aWNlSW50UHRyICAsCiAgICBLZXlTeW1z UHRyICAsCiAgICBDQVJEOCAgW10KCik7CgpleHRlcm4gQm9vbCBJbml0QnV0dG9uQ2xhc3NEZXZp Y2VTdHJ1Y3QoCgogICAgRGV2aWNlSW50UHRyICAsCiAgICBpbnQgICwKICAgIENBUkQ4KiAgCgop OwoKdHlwZWRlZiBpbnQgKCpWYWx1YXRvck1vdGlvblByb2NQdHIpKAoKCQlEZXZpY2VJbnRQdHIg ICwKCQl4VGltZWNvb3JkICogICwKCQl1bnNpZ25lZCBsb25nICAsCgkJdW5zaWduZWQgbG9uZyAg LAoJCVNjcmVlblB0ciAgCgopOwoKZXh0ZXJuIEJvb2wgSW5pdFZhbHVhdG9yQ2xhc3NEZXZpY2VT dHJ1Y3QoCgogICAgRGV2aWNlSW50UHRyICAsCiAgICBpbnQgICwKICAgIFZhbHVhdG9yTW90aW9u UHJvY1B0ciAgLAogICAgaW50ICAsCiAgICBpbnQgIAoKKTsKCmV4dGVybiBCb29sIEluaXRGb2N1 c0NsYXNzRGV2aWNlU3RydWN0KAoKICAgIERldmljZUludFB0ciAgCgopOwoKdHlwZWRlZiB2b2lk ICgqQmVsbFByb2NQdHIpKAoKICAgIGludCAgLAogICAgRGV2aWNlSW50UHRyICAsCiAgICBwb2lu dGVyICAsCiAgICBpbnQKCik7Cgp0eXBlZGVmIHZvaWQgKCpLYmRDdHJsUHJvY1B0cikoCgogICAg RGV2aWNlSW50UHRyICAsCiAgICBLZXliZEN0cmwgKiAgCgopOwoKZXh0ZXJuIEJvb2wgSW5pdEti ZEZlZWRiYWNrQ2xhc3NEZXZpY2VTdHJ1Y3QoCgogICAgRGV2aWNlSW50UHRyICAsCiAgICBCZWxs UHJvY1B0ciAgLAogICAgS2JkQ3RybFByb2NQdHIgIAoKKTsKCnR5cGVkZWYgdm9pZCAoKlB0ckN0 cmxQcm9jUHRyKSgKCiAgICBEZXZpY2VJbnRQdHIgICwKICAgIFB0ckN0cmwgKiAgCgopOwoKZXh0 ZXJuIEJvb2wgSW5pdFB0ckZlZWRiYWNrQ2xhc3NEZXZpY2VTdHJ1Y3QoCgogICAgRGV2aWNlSW50 UHRyICAsCiAgICBQdHJDdHJsUHJvY1B0ciAgCgopOwoKdHlwZWRlZiB2b2lkICgqU3RyaW5nQ3Ry bFByb2NQdHIpKAoKICAgIERldmljZUludFB0ciAgLAogICAgU3RyaW5nQ3RybCAqICAKCik7Cgpl eHRlcm4gQm9vbCBJbml0U3RyaW5nRmVlZGJhY2tDbGFzc0RldmljZVN0cnVjdCgKCiAgICBEZXZp Y2VJbnRQdHIgICwKICAgIFN0cmluZ0N0cmxQcm9jUHRyICAsCiAgICBpbnQgICwKICAgIGludCAg LAogICAgS2V5U3ltKiAgCgopOwoKdHlwZWRlZiB2b2lkICgqQmVsbEN0cmxQcm9jUHRyKSgKCiAg ICBEZXZpY2VJbnRQdHIgICwKICAgIEJlbGxDdHJsICogIAoKKTsKCmV4dGVybiBCb29sIEluaXRC ZWxsRmVlZGJhY2tDbGFzc0RldmljZVN0cnVjdCgKCiAgICBEZXZpY2VJbnRQdHIgICwKICAgIEJl bGxQcm9jUHRyICAsCiAgICBCZWxsQ3RybFByb2NQdHIgIAoKKTsKCnR5cGVkZWYgdm9pZCAoKkxl ZEN0cmxQcm9jUHRyKSgKCiAgICBEZXZpY2VJbnRQdHIgICwKICAgIExlZEN0cmwgKiAgCgopOwoK ZXh0ZXJuIEJvb2wgSW5pdExlZEZlZWRiYWNrQ2xhc3NEZXZpY2VTdHJ1Y3QoCgogICAgRGV2aWNl SW50UHRyICAsCiAgICBMZWRDdHJsUHJvY1B0ciAgCgopOwoKdHlwZWRlZiB2b2lkICgqSW50ZWdl ckN0cmxQcm9jUHRyKSgKCiAgICBEZXZpY2VJbnRQdHIgICwKICAgIEludGVnZXJDdHJsICogIAoK KTsKCgpleHRlcm4gQm9vbCBJbml0SW50ZWdlckZlZWRiYWNrQ2xhc3NEZXZpY2VTdHJ1Y3QoCgog ICAgRGV2aWNlSW50UHRyICAsCiAgICBJbnRlZ2VyQ3RybFByb2NQdHIgIAoKKTsKCmV4dGVybiBC b29sIEluaXRQb2ludGVyRGV2aWNlU3RydWN0KAoKICAgIERldmljZVB0ciAgLAogICAgQ0FSRDgq ICAsCiAgICBpbnQgICwKICAgIFZhbHVhdG9yTW90aW9uUHJvY1B0ciAgLAogICAgUHRyQ3RybFBy b2NQdHIgICwKICAgIGludCAgCgopOwoKZXh0ZXJuIEJvb2wgSW5pdEtleWJvYXJkRGV2aWNlU3Ry dWN0KAoKICAgIERldmljZVB0ciAgLAogICAgS2V5U3ltc1B0ciAgLAogICAgQ0FSRDggIFtdLAog ICAgQmVsbFByb2NQdHIgICwKICAgIEtiZEN0cmxQcm9jUHRyICAKCik7CgpleHRlcm4gdm9pZCBT ZW5kTWFwcGluZ05vdGlmeSgKCiAgICB1bnNpZ25lZCBpbnQgICwKICAgIHVuc2lnbmVkIGludCAg LAogICAgdW5zaWduZWQgaW50ICAsCiAgICBDbGllbnRQdHIJIAoKKTsKCmV4dGVybiBCb29sIEJh ZERldmljZU1hcCgKCiAgICBCWVRFKiAgLAogICAgaW50ICAsCiAgICB1bnNpZ25lZCAgLAogICAg dW5zaWduZWQgICwKICAgIFhJRCogIAoKKTsKCmV4dGVybiBCb29sIEFsbE1vZGlmaWVyS2V5c0Fy ZVVwKAoKICAgIERldmljZUludFB0ciAgLAogICAgQ0FSRDgqICAsCiAgICBpbnQgICwKICAgIENB UkQ4KiAgLAogICAgaW50ICAKCik7CgpleHRlcm4gdm9pZCBOb3RlTGVkU3RhdGUoCgogICAgRGV2 aWNlSW50UHRyICAsCiAgICBpbnQgICwKICAgIEJvb2wgIAoKKTsKCmV4dGVybiB2b2lkIE1heWJl U3RvcEhpbnQoCgogICAgRGV2aWNlSW50UHRyICAsCiAgICBDbGllbnRQdHIgIAoKKTsKCmV4dGVy biB2b2lkIFByb2Nlc3NQb2ludGVyRXZlbnQoCgogICAgeEV2ZW50UHRyICAsCiAgICBEZXZpY2VJ bnRQdHIgICwKICAgIGludCAgCgopOwoKZXh0ZXJuIHZvaWQgUHJvY2Vzc0tleWJvYXJkRXZlbnQo CgogICAgeEV2ZW50UHRyICAsCiAgICBEZXZpY2VJbnRQdHIgICwKICAgIGludCAgCgopOwoKIyA1 MDkgIi4uLy4uL2luY2x1ZGUvaW5wdXQuaCIKCgpleHRlcm4gQm9vbCBMZWdhbE1vZGlmaWVyKAoK ICAgIHVuc2lnbmVkIGludCAgLCAKICAgIERldmljZVB0ciAgCgopOwoKZXh0ZXJuIHZvaWQgUHJv Y2Vzc0lucHV0RXZlbnRzKAoKICAgIHZvaWQKCik7CgpleHRlcm4gdm9pZCBJbml0SW5wdXQoCgog ICAgaW50ICAgLAogICAgY2hhciAqKiAgCgopOwoKCiMgNTEgIi4uLy4uL2luY2x1ZGUvZGl4Lmgi IDIKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgojIDE0MCAiLi4vLi4vaW5j bHVkZS9kaXguaCIKCgoKIyAxNTYgIi4uLy4uL2luY2x1ZGUvZGl4LmgiCgoKIyAxNjkgIi4uLy4u L2luY2x1ZGUvZGl4LmgiCgoKIyAxODAgIi4uLy4uL2luY2x1ZGUvZGl4LmgiCgoKCgoKCgoKCgoK CiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAyNDAgIi4uLy4uL2luY2x1ZGUvZGl4LmgiCgoK CgoKCiMgMjY3ICIuLi8uLi9pbmNsdWRlL2RpeC5oIgoKCgoKCgoKCgoKCgoKdHlwZWRlZiBzdHJ1 Y3QgX1RpbWVTdGFtcCAqVGltZVN0YW1wUHRyOwoKCgoKCgp0eXBlZGVmIHN0cnVjdCBfV29ya1F1 ZXVlCSpXb3JrUXVldWVQdHI7CgpleHRlcm4gQ2xpZW50UHRyIHJlcXVlc3RpbmdDbGllbnQ7CmV4 dGVybiBDbGllbnRQdHIgKmNsaWVudHM7CmV4dGVybiBDbGllbnRQdHIgc2VydmVyQ2xpZW50Owpl eHRlcm4gaW50IGN1cnJlbnRNYXhDbGllbnRzOwoKdHlwZWRlZiBpbnQgSFdFdmVudFF1ZXVlVHlw ZTsKdHlwZWRlZiBIV0V2ZW50UXVldWVUeXBlKiBIV0V2ZW50UXVldWVQdHI7CgpleHRlcm4gSFdF dmVudFF1ZXVlUHRyIGNoZWNrRm9ySW5wdXRbMl07Cgp0eXBlZGVmIHN0cnVjdCBfVGltZVN0YW1w IHsKICAgIENBUkQzMiBtb250aHM7CSAKICAgIENBUkQzMiBtaWxsaXNlY29uZHM7Cn0gICAgICAg ICAgIFRpbWVTdGFtcDsKCiAKCmV4dGVybiB2b2lkIFNldElucHV0Q2hlY2soCgogICAgSFdFdmVu dFF1ZXVlUHRyICAsCiAgICBIV0V2ZW50UXVldWVQdHIgIAoKKTsKCmV4dGVybiB2b2lkIENsb3Nl RG93bkNsaWVudCgKCiAgICBDbGllbnRQdHIgIAoKKTsKCmV4dGVybiB2b2lkIFVwZGF0ZUN1cnJl bnRUaW1lKAoKICAgIHZvaWQKCik7CgpleHRlcm4gdm9pZCBVcGRhdGVDdXJyZW50VGltZUlmKAoK ICAgIHZvaWQKCik7CgpleHRlcm4gdm9pZCBJbml0U2VsZWN0aW9ucygKCiAgICB2b2lkCgopOwoK ZXh0ZXJuIHZvaWQgRmx1c2hDbGllbnRDYWNoZXMoCgogICAgWElEICAKCik7CgpleHRlcm4gaW50 IGRpeERlc3Ryb3lQaXhtYXAoCgogICAgcG9pbnRlciAgLAogICAgWElEICAKCik7CgpleHRlcm4g dm9pZCBDbG9zZURvd25SZXRhaW5lZFJlc291cmNlcygKCiAgICB2b2lkCgopOwoKZXh0ZXJuIHZv aWQgSW5pdENsaWVudCgKCiAgICBDbGllbnRQdHIgICwKICAgIGludCAgLAogICAgcG9pbnRlciAg CgopOwoKZXh0ZXJuIENsaWVudFB0ciBOZXh0QXZhaWxhYmxlQ2xpZW50KAoKICAgIHBvaW50ZXIg IAoKKTsKCmV4dGVybiB2b2lkIFNlbmRFcnJvclRvQ2xpZW50KAoKICAgIENsaWVudFB0ciAgLAog ICAgdW5zaWduZWQgaW50ICAsCiAgICB1bnNpZ25lZCBpbnQgICwKICAgIFhJRCAgLAogICAgaW50 ICAKCik7CgpleHRlcm4gdm9pZCBEZWxldGVXaW5kb3dGcm9tQW55U2VsZWN0aW9ucygKCiAgICBX aW5kb3dQdHIgIAoKKTsKCmV4dGVybiB2b2lkIE1hcmtDbGllbnRFeGNlcHRpb24oCgogICAgQ2xp ZW50UHRyICAKCik7CgpleHRlcm4gaW50IEdldEdlb21ldHJ5KAoKICAgIENsaWVudFB0ciAgLAog ICAgeEdldEdlb21ldHJ5UmVwbHkqICAKCik7CgpleHRlcm4gaW50IFNlbmRDb25uU2V0dXAoCgog ICAgQ2xpZW50UHRyICAsCiAgICBjaGFyKiAgCgopOwoKZXh0ZXJuIGludApEb0dldEltYWdlKAoK ICAgIENsaWVudFB0cgkgLAogICAgaW50ICAsCiAgICBEcmF3YWJsZSAgLAogICAgaW50ICAsIAog ICAgaW50ICAsIAogICAgaW50ICAsIAogICAgaW50ICAsCiAgICBNYXNrICAsCiAgICB4R2V0SW1h Z2VSZXBseSAqKiAKCik7CgoKCgoKCgoKCiAKCmV4dGVybiB2b2lkIENvcHlJU09MYXRpbjFMb3dl cmVkKAoKICAgIHVuc2lnbmVkIGNoYXIgKiAgLAogICAgdW5zaWduZWQgY2hhciAqICAsCiAgICBp bnQgIAoKKTsKCiMgNDcxICIuLi8uLi9pbmNsdWRlL2RpeC5oIgoKCmV4dGVybiBXaW5kb3dQdHIg TG9va3VwV2luZG93KAoKICAgIFhJRCAgLAogICAgQ2xpZW50UHRyICAKCik7CgpleHRlcm4gcG9p bnRlciBMb29rdXBEcmF3YWJsZSgKCiAgICBYSUQgICwKICAgIENsaWVudFB0ciAgCgopOwoKCgoK CgoKCgpleHRlcm4gQ2xpZW50UHRyIExvb2t1cENsaWVudCgKCiAgICBYSUQgICwKICAgIENsaWVu dFB0ciAgCgopOwoKZXh0ZXJuIHZvaWQgTm9vcEREQSgKCiAgICB2b2lkICosCiAgICAuLi4KCik7 CgpleHRlcm4gaW50IEFsdGVyU2F2ZVNldEZvckNsaWVudCgKCiAgICBDbGllbnRQdHIgICwKICAg IFdpbmRvd1B0ciAgLAogICAgdW5zaWduZWQgIAoKKTsKCmV4dGVybiB2b2lkIERlbGV0ZVdpbmRv d0Zyb21BbnlTYXZlU2V0KAoKICAgIFdpbmRvd1B0ciAgCgopOwoKZXh0ZXJuIHZvaWQgQmxvY2tI YW5kbGVyKAoKICAgIHBvaW50ZXIgICwKICAgIHBvaW50ZXIgIAoKKTsKCmV4dGVybiB2b2lkIFdh a2V1cEhhbmRsZXIoCgogICAgaW50ICAsCiAgICBwb2ludGVyICAKCik7Cgp0eXBlZGVmIHZvaWQg KCogV2FrZXVwSGFuZGxlclByb2NQdHIpKAoKICAgIHBvaW50ZXIgICwKICAgIGludCAgLAogICAg cG9pbnRlciAgCgopOwoKZXh0ZXJuIEJvb2wgUmVnaXN0ZXJCbG9ja0FuZFdha2V1cEhhbmRsZXJz KAoKICAgIEJsb2NrSGFuZGxlclByb2NQdHIgICwKICAgIFdha2V1cEhhbmRsZXJQcm9jUHRyICAs CiAgICBwb2ludGVyICAKCik7CgpleHRlcm4gdm9pZCBSZW1vdmVCbG9ja0FuZFdha2V1cEhhbmRs ZXJzKAoKICAgIEJsb2NrSGFuZGxlclByb2NQdHIgICwKICAgIFdha2V1cEhhbmRsZXJQcm9jUHRy ICAsCiAgICBwb2ludGVyICAKCik7CgpleHRlcm4gdm9pZCBJbml0QmxvY2tBbmRXYWtldXBIYW5k bGVycygKCiAgICB2b2lkCgopOwoKZXh0ZXJuIHZvaWQgUHJvY2Vzc1dvcmtRdWV1ZSgKCiAgICB2 b2lkCgopOwoKZXh0ZXJuIEJvb2wgUXVldWVXb3JrUHJvYygKCiAgICBCb29sICgqICApKAoKICAg ICAgICBDbGllbnRQdHIgICwKICAgICAgICBwb2ludGVyICAKCiAgICAgICAgKSwKICAgIENsaWVu dFB0ciAgLAogICAgcG9pbnRlciAgCgopOwoKdHlwZWRlZiBCb29sICgqIENsaWVudFNsZWVwUHJv Y1B0cikoCgogICAgQ2xpZW50UHRyICAsCiAgICBwb2ludGVyICAKCik7CgpleHRlcm4gQm9vbCBD bGllbnRTbGVlcCgKCiAgICBDbGllbnRQdHIgICwKICAgIENsaWVudFNsZWVwUHJvY1B0ciAgLAog ICAgcG9pbnRlciAgCgopOwoKCgpleHRlcm4gQm9vbCBDbGllbnRTaWduYWwoCgogICAgQ2xpZW50 UHRyICAKCik7CgoKZXh0ZXJuIHZvaWQgQ2xpZW50V2FrZXVwKAoKICAgIENsaWVudFB0ciAgCgop OwoKZXh0ZXJuIEJvb2wgQ2xpZW50SXNBc2xlZXAoCgogICAgQ2xpZW50UHRyICAKCik7CgogCgpl eHRlcm4gQXRvbSBNYWtlQXRvbSgKCiAgICBjaGFyICogICwKICAgIHVuc2lnbmVkICAsCiAgICBC b29sICAKCik7CgpleHRlcm4gQm9vbCBWYWxpZEF0b20oCgogICAgQXRvbSAgCgopOwoKZXh0ZXJu IGNoYXIgKk5hbWVGb3JBdG9tKAoKICAgIEF0b20gIAoKKTsKCmV4dGVybiB2b2lkIEF0b21FcnJv cigKCiAgICB2b2lkCgopOwoKZXh0ZXJuIHZvaWQgRnJlZUFsbEF0b21zKAoKICAgIHZvaWQKCik7 CgpleHRlcm4gdm9pZCBJbml0QXRvbXMoCgogICAgdm9pZAoKKTsKCiAKCmV4dGVybiB2b2lkIFNl dE1hc2tGb3JFdmVudCgKCiAgICBNYXNrICAsCiAgICBpbnQgIAoKKTsKCgoKCgoKCgoKZXh0ZXJu IEJvb2wgSXNQYXJlbnQoCgogICAgV2luZG93UHRyICAsCiAgICBXaW5kb3dQdHIgIAoKKTsKCmV4 dGVybiBXaW5kb3dQdHIgR2V0Q3VycmVudFJvb3RXaW5kb3coCgogICAgdm9pZAoKKTsKCmV4dGVy biBXaW5kb3dQdHIgR2V0U3ByaXRlV2luZG93KAoKICAgIHZvaWQKCik7CgoKCgoKCgoKCgpleHRl cm4gdm9pZCBOb3RpY2VFdmVudFRpbWUoCgogICAgeEV2ZW50UHRyICAKCik7CgpleHRlcm4gdm9p ZCBFbnF1ZXVlRXZlbnQoCgogICAgeEV2ZW50UHRyICAsCiAgICBEZXZpY2VJbnRQdHIgICwKICAg IGludAkgCgopOwoKZXh0ZXJuIHZvaWQgQ29tcHV0ZUZyZWV6ZXMoCgogICAgdm9pZAoKKTsKCmV4 dGVybiB2b2lkIENoZWNrR3JhYkZvclN5bmNzKAoKICAgIERldmljZUludFB0ciAgLAogICAgQm9v bCAgLAogICAgQm9vbCAgCgopOwoKZXh0ZXJuIHZvaWQgQWN0aXZhdGVQb2ludGVyR3JhYigKCiAg ICBEZXZpY2VJbnRQdHIgICwKICAgIEdyYWJQdHIgICwKICAgIFRpbWVTdGFtcCAgLAogICAgQm9v bCAgCgopOwoKZXh0ZXJuIHZvaWQgRGVhY3RpdmF0ZVBvaW50ZXJHcmFiKAoKICAgIERldmljZUlu dFB0ciAgCgopOwoKZXh0ZXJuIHZvaWQgQWN0aXZhdGVLZXlib2FyZEdyYWIoCgogICAgRGV2aWNl SW50UHRyICAsCiAgICBHcmFiUHRyICAsCiAgICBUaW1lU3RhbXAgICwKICAgIEJvb2wgIAoKKTsK CmV4dGVybiB2b2lkIERlYWN0aXZhdGVLZXlib2FyZEdyYWIoCgogICAgRGV2aWNlSW50UHRyICAK Cik7CgpleHRlcm4gdm9pZCBBbGxvd1NvbWUoCgogICAgQ2xpZW50UHRyCSAsCiAgICBUaW1lU3Rh bXAgICwKICAgIERldmljZUludFB0ciAgLAogICAgaW50ICAKCik7CgpleHRlcm4gdm9pZCBSZWxl YXNlQWN0aXZlR3JhYnMoCgpDbGllbnRQdHIgY2xpZW50CgopOwoKZXh0ZXJuIGludCBEZWxpdmVy RXZlbnRzVG9XaW5kb3coCgogICAgV2luZG93UHRyICAsCiAgICB4RXZlbnRQdHIgICwKICAgIGlu dCAgLAogICAgTWFzayAgLAogICAgR3JhYlB0ciAgLAogICAgaW50ICAKCik7CgpleHRlcm4gaW50 IERlbGl2ZXJEZXZpY2VFdmVudHMoCgogICAgV2luZG93UHRyICAsCiAgICB4RXZlbnRQdHIgICwK ICAgIEdyYWJQdHIgICwKICAgIFdpbmRvd1B0ciAgLAogICAgRGV2aWNlSW50UHRyICAsCiAgICBp bnQgIAoKKTsKCmV4dGVybiB2b2lkIERlZmluZUluaXRpYWxSb290V2luZG93KAoKICAgIFdpbmRv d1B0ciAgCgopOwoKZXh0ZXJuIHZvaWQgV2luZG93SGFzTmV3Q3Vyc29yKAoKICAgIFdpbmRvd1B0 ciAgCgopOwoKZXh0ZXJuIEJvb2wgQ2hlY2tEZXZpY2VHcmFicygKCiAgICBEZXZpY2VJbnRQdHIg ICwKICAgIHhFdmVudFB0ciAgLAogICAgaW50ICAsCiAgICBpbnQgIAoKKTsKCmV4dGVybiB2b2lk IERlbGl2ZXJGb2N1c2VkRXZlbnQoCgogICAgRGV2aWNlSW50UHRyICAsCiAgICB4RXZlbnRQdHIg ICwKICAgIFdpbmRvd1B0ciAgLAogICAgaW50ICAKCik7CgpleHRlcm4gdm9pZCBEZWxpdmVyR3Jh YmJlZEV2ZW50KAoKICAgIHhFdmVudFB0ciAgLAogICAgRGV2aWNlSW50UHRyICAsCiAgICBCb29s ICAsCiAgICBpbnQgIAoKKTsKCmV4dGVybiB2b2lkIFJlY2FsY3VsYXRlRGVsaXZlcmFibGVFdmVu dHMoCgogICAgV2luZG93UHRyICAKCik7CgpleHRlcm4gaW50IE90aGVyQ2xpZW50R29uZSgKCiAg ICBwb2ludGVyICAsCiAgICBYSUQgIAoKKTsKCmV4dGVybiB2b2lkIERvRm9jdXNFdmVudHMoCgog ICAgRGV2aWNlSW50UHRyICAsCiAgICBXaW5kb3dQdHIgICwKICAgIFdpbmRvd1B0ciAgLAogICAg aW50ICAKCik7CgpleHRlcm4gaW50IFNldElucHV0Rm9jdXMoCgogICAgQ2xpZW50UHRyICAsCiAg ICBEZXZpY2VJbnRQdHIgICwKICAgIFdpbmRvdyAgLAogICAgQ0FSRDggICwKICAgIFRpbWUgICwK ICAgIEJvb2wgIAoKKTsKCmV4dGVybiBpbnQgR3JhYkRldmljZSgKCiAgICBDbGllbnRQdHIgICwK ICAgIERldmljZUludFB0ciAgLAogICAgdW5zaWduZWQgICwKICAgIHVuc2lnbmVkICAsCiAgICBX aW5kb3cgICwKICAgIHVuc2lnbmVkICAsCiAgICBUaW1lICAsCiAgICBNYXNrICAsCiAgICBDQVJE OCAqICAKCik7CgpleHRlcm4gdm9pZCBJbml0RXZlbnRzKAoKICAgIHZvaWQKCik7CgpleHRlcm4g dm9pZCBEZWxldGVXaW5kb3dGcm9tQW55RXZlbnRzKAoKICAgIFdpbmRvd1B0cgkgLAogICAgQm9v bCAgCgopOwoKCgoKCgoKCgpleHRlcm4gTWFzayBFdmVudE1hc2tGb3JDbGllbnQoCgogICAgV2lu ZG93UHRyICAsCiAgICBDbGllbnRQdHIgIAoKKTsKCgoKZXh0ZXJuIGludCBEZWxpdmVyRXZlbnRz KAoKICAgIFdpbmRvd1B0ciAgLAogICAgeEV2ZW50UHRyICAsCiAgICBpbnQgICwKICAgIFdpbmRv d1B0ciAgCgopOwoKZXh0ZXJuIHZvaWQgU2V0Q3JpdGljYWxFdmVudCgKCiAgICBpbnQgIAoKKTsK CmV4dGVybiB2b2lkIFdyaXRlRXZlbnRzVG9DbGllbnQoCgogICAgQ2xpZW50UHRyICAsCiAgICBp bnQJICAgICAgLAogICAgeEV2ZW50UHRyICAKCik7CgpleHRlcm4gaW50IFRyeUNsaWVudEV2ZW50 cygKCiAgICBDbGllbnRQdHIgICwKICAgIHhFdmVudFB0ciAgLAogICAgaW50ICAsCiAgICBNYXNr ICAsCiAgICBNYXNrICAsCiAgICBHcmFiUHRyICAKCik7CgpleHRlcm4gaW50IEV2ZW50U2VsZWN0 Rm9yV2luZG93KAoKICAgIFdpbmRvd1B0ciAgLAogICAgQ2xpZW50UHRyICAsCiAgICBNYXNrICAK Cik7CgpleHRlcm4gaW50IEV2ZW50U3VwcHJlc3NGb3JXaW5kb3coCgogICAgV2luZG93UHRyICAs CiAgICBDbGllbnRQdHIgICwKICAgIE1hc2sgICwKICAgIEJvb2wgKiAgCgopOwoKZXh0ZXJuIGlu dCBNYXliZURlbGl2ZXJFdmVudHNUb0NsaWVudCgKCiAgICBXaW5kb3dQdHIgICwKICAgIHhFdmVu dFB0ciAgLAogICAgaW50ICAsCiAgICBNYXNrICAsCiAgICBDbGllbnRQdHIgIAoKKTsKCmV4dGVy biB2b2lkIFdpbmRvd3NSZXN0cnVjdHVyZWQoCgogICAgdm9pZAoKKTsKCmV4dGVybiB2b2lkIFJl c2V0Q2xpZW50UHJpdmF0ZXMoCgogICAgdm9pZAoKKTsKCmV4dGVybiBpbnQgQWxsb2NhdGVDbGll bnRQcml2YXRlSW5kZXgoCgogICAgdm9pZAoKKTsKCmV4dGVybiBCb29sIEFsbG9jYXRlQ2xpZW50 UHJpdmF0ZSgKCiAgICBpbnQgICwKICAgIHVuc2lnbmVkICAKCik7CgogCgoKCgoKCgoKdHlwZWRl ZiB2b2lkICgqQ2FsbGJhY2tQcm9jUHRyKSAoCgogICAgQ2FsbGJhY2tMaXN0UHRyICosIHBvaW50 ZXIsIHBvaW50ZXIKCik7Cgp0eXBlZGVmIEJvb2wgKCpBZGRDYWxsYmFja1Byb2NQdHIpICgKCiAg ICBDYWxsYmFja0xpc3RQdHIgKiwgQ2FsbGJhY2tQcm9jUHRyLCBwb2ludGVyCgopOwoKdHlwZWRl ZiBCb29sICgqRGVsZXRlQ2FsbGJhY2tQcm9jUHRyKSAoCgogICAgQ2FsbGJhY2tMaXN0UHRyICos IENhbGxiYWNrUHJvY1B0ciwgcG9pbnRlcgoKKTsKCnR5cGVkZWYgdm9pZCAoKkNhbGxDYWxsYmFj a3NQcm9jUHRyKSAoCgogICAgQ2FsbGJhY2tMaXN0UHRyICosIHBvaW50ZXIKCik7Cgp0eXBlZGVm IHZvaWQgKCpEZWxldGVDYWxsYmFja0xpc3RQcm9jUHRyKSAoCgogICAgQ2FsbGJhY2tMaXN0UHRy ICoKCik7Cgp0eXBlZGVmIHN0cnVjdCBfQ2FsbGJhY2tQcm9jcyB7CiAgICBBZGRDYWxsYmFja1By b2NQdHIJCUFkZENhbGxiYWNrOwogICAgRGVsZXRlQ2FsbGJhY2tQcm9jUHRyCURlbGV0ZUNhbGxi YWNrOwogICAgQ2FsbENhbGxiYWNrc1Byb2NQdHIJQ2FsbENhbGxiYWNrczsKICAgIERlbGV0ZUNh bGxiYWNrTGlzdFByb2NQdHIJRGVsZXRlQ2FsbGJhY2tMaXN0Owp9IENhbGxiYWNrRnVuY3NSZWMs ICpDYWxsYmFja0Z1bmNzUHRyOwoKZXh0ZXJuIEJvb2wgQ3JlYXRlQ2FsbGJhY2tMaXN0KAoKICAg IENhbGxiYWNrTGlzdFB0ciAqICAsCiAgICBDYWxsYmFja0Z1bmNzUHRyICAKCik7CgpleHRlcm4g Qm9vbCBBZGRDYWxsYmFjaygKCiAgICBDYWxsYmFja0xpc3RQdHIgKiAgLAogICAgQ2FsbGJhY2tQ cm9jUHRyICAsCiAgICBwb2ludGVyICAKCik7CgpleHRlcm4gQm9vbCBEZWxldGVDYWxsYmFjaygK CiAgICBDYWxsYmFja0xpc3RQdHIgKiAgLAogICAgQ2FsbGJhY2tQcm9jUHRyICAsCiAgICBwb2lu dGVyICAKCik7CgpleHRlcm4gdm9pZCBDYWxsQ2FsbGJhY2tzKAoKICAgIENhbGxiYWNrTGlzdFB0 ciAqICAsCiAgICBwb2ludGVyICAKCik7CgpleHRlcm4gdm9pZCBEZWxldGVDYWxsYmFja0xpc3Qo CgogICAgQ2FsbGJhY2tMaXN0UHRyICogIAoKKTsKCmV4dGVybiB2b2lkIEluaXRDYWxsYmFja01h bmFnZXIoCgogICAgdm9pZAoKKTsKCiAKCgoKZXh0ZXJuIENhbGxiYWNrTGlzdFB0ciBTZXJ2ZXJH cmFiQ2FsbGJhY2s7Cgp0eXBlZGVmIGVudW0ge1NFUlZFUl9HUkFCQkVELCBTRVJWRVJfVU5HUkFC QkVELAoJICAgICAgQ0xJRU5UX1BFUlZJT1VTLCBDTElFTlRfSU1QRVJWSU9VUyB9IFNlcnZlckdy YWJTdGF0ZTsKCnR5cGVkZWYgc3RydWN0IHsKICAgIENsaWVudFB0ciBjbGllbnQ7CiAgICBTZXJ2 ZXJHcmFiU3RhdGUgZ3JhYnN0YXRlOwp9IFNlcnZlckdyYWJJbmZvUmVjOwoKIAoKCgpleHRlcm4g Q2FsbGJhY2tMaXN0UHRyIEV2ZW50Q2FsbGJhY2s7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBDbGll bnRQdHIgY2xpZW50OwogICAgeEV2ZW50UHRyIGV2ZW50czsKICAgIGludCBjb3VudDsKfSBFdmVu dEluZm9SZWM7CgogCgoKCmV4dGVybiBDYWxsYmFja0xpc3RQdHIgRGV2aWNlRXZlbnRDYWxsYmFj azsKCnR5cGVkZWYgc3RydWN0IHsKICAgIHhFdmVudFB0ciBldmVudHM7CiAgICBpbnQgY291bnQ7 Cn0gRGV2aWNlRXZlbnRJbmZvUmVjOwoKCiMgNTYgIi4uLy4uL2luY2x1ZGUvc2NybmludHN0ci5o IiAyCgoKdHlwZWRlZiBzdHJ1Y3QgX1BpeG1hcEZvcm1hdCB7CiAgICB1bnNpZ25lZCBjaGFyCWRl cHRoOwogICAgdW5zaWduZWQgY2hhcgliaXRzUGVyUGl4ZWw7CiAgICB1bnNpZ25lZCBjaGFyCXNj YW5saW5lUGFkOwogICAgfSBQaXhtYXBGb3JtYXRSZWM7CiAgICAKdHlwZWRlZiBzdHJ1Y3QgX1Zp c3VhbCB7CiAgICBWaXN1YWxJRAkJdmlkOwogICAgc2hvcnQJCWNsYXNzOwogICAgc2hvcnQJCWJp dHNQZXJSR0JWYWx1ZTsKICAgIHNob3J0CQlDb2xvcm1hcEVudHJpZXM7CiAgICBzaG9ydAkJbnBs YW5lczsgCgoKICAgIHVuc2lnbmVkIGxvbmcJcmVkTWFzaywgZ3JlZW5NYXNrLCBibHVlTWFzazsK ICAgIGludAkJCW9mZnNldFJlZCwgb2Zmc2V0R3JlZW4sIG9mZnNldEJsdWU7CiAgfSBWaXN1YWxS ZWM7Cgp0eXBlZGVmIHN0cnVjdCBfRGVwdGggewogICAgdW5zaWduZWQgY2hhcglkZXB0aDsKICAg IHNob3J0CQludW1WaWRzOwogICAgVmlzdWFsSUQJCSp2aWRzOyAgICAgCiAgfSBEZXB0aFJlYzsK CgogCgoKCgoKdHlwZWRlZiAgICBCb29sICgqIENsb3NlU2NyZWVuUHJvY1B0cikoCgoJaW50ICAs CglTY3JlZW5QdHIgIAoKKTsKCnR5cGVkZWYgICAgdm9pZCAoKiBRdWVyeUJlc3RTaXplUHJvY1B0 cikoCgoJaW50ICAsCgl1bnNpZ25lZCBzaG9ydCAqICAsCgl1bnNpZ25lZCBzaG9ydCAqICAsCglT Y3JlZW5QdHIgIAoKKTsKCnR5cGVkZWYgICAgQm9vbCAoKiBTYXZlU2NyZWVuUHJvY1B0cikoCgoJ IFNjcmVlblB0ciAgLAoJIGludCAgCgopOwoKdHlwZWRlZiAgICB2b2lkICgqIEdldEltYWdlUHJv Y1B0cikoCgoJRHJhd2FibGVQdHIgICwKCWludCAgLAoJaW50ICAsCglpbnQgICwKCWludCAgLAoJ dW5zaWduZWQgaW50ICAsCgl1bnNpZ25lZCBsb25nICAsCgljaGFyICogIAoKKTsKCnR5cGVkZWYg ICAgdm9pZCAoKiBHZXRTcGFuc1Byb2NQdHIpKAoKCURyYXdhYmxlUHRyICAsCglpbnQgICwKCURE WFBvaW50UHRyICAsCglpbnQqICAsCglpbnQgICwKCWNoYXIgKiAgCgopOwoKdHlwZWRlZiAgICB2 b2lkICgqIFBvaW50ZXJOb25JbnRlcmVzdEJveFByb2NQdHIpKAoKCVNjcmVlblB0ciAgLAoJQm94 UHRyICAKCik7Cgp0eXBlZGVmICAgIHZvaWQgKCogU291cmNlVmFsaWRhdGVQcm9jUHRyKSgKCglE cmF3YWJsZVB0ciAgLAoJaW50ICAsCglpbnQgICwKCWludCAgLAoJaW50ICAKCik7Cgp0eXBlZGVm ICAgIEJvb2wgKCogQ3JlYXRlV2luZG93UHJvY1B0cikoCgoJV2luZG93UHRyICAKCik7Cgp0eXBl ZGVmICAgIEJvb2wgKCogRGVzdHJveVdpbmRvd1Byb2NQdHIpKAoKCVdpbmRvd1B0ciAgCgopOwoK dHlwZWRlZiAgICBCb29sICgqIFBvc2l0aW9uV2luZG93UHJvY1B0cikoCgoJV2luZG93UHRyICAs CglpbnQgICwKCWludCAgCgopOwoKdHlwZWRlZiAgICBCb29sICgqIENoYW5nZVdpbmRvd0F0dHJp YnV0ZXNQcm9jUHRyKSgKCglXaW5kb3dQdHIgICwKCXVuc2lnbmVkIGxvbmcgIAoKKTsKCnR5cGVk ZWYgICAgQm9vbCAoKiBSZWFsaXplV2luZG93UHJvY1B0cikoCgoJV2luZG93UHRyICAKCik7Cgp0 eXBlZGVmICAgIEJvb2wgKCogVW5yZWFsaXplV2luZG93UHJvY1B0cikoCgoJV2luZG93UHRyICAK Cik7Cgp0eXBlZGVmICAgIHZvaWQgKCogUmVzdGFja1dpbmRvd1Byb2NQdHIpKAoKCVdpbmRvd1B0 ciAgLAoJV2luZG93UHRyICAKCik7Cgp0eXBlZGVmICAgIGludCAgKCogVmFsaWRhdGVUcmVlUHJv Y1B0cikoCgoJV2luZG93UHRyICAsCglXaW5kb3dQdHIgICwKCVZUS2luZCAgCgopOwoKdHlwZWRl ZiAgICB2b2lkICgqIFBvc3RWYWxpZGF0ZVRyZWVQcm9jUHRyKSgKCglXaW5kb3dQdHIgICwKCVdp bmRvd1B0ciAgLAoJVlRLaW5kICAKCik7Cgp0eXBlZGVmICAgIHZvaWQgKCogV2luZG93RXhwb3N1 cmVzUHJvY1B0cikoCgoJV2luZG93UHRyICAsCglSZWdpb25QdHIgICwKCVJlZ2lvblB0ciAgCgop OwoKdHlwZWRlZiAgICB2b2lkICgqIFBhaW50V2luZG93UHJvY1B0cikoCgoJV2luZG93UHRyICAs CglSZWdpb25QdHIgICwKCWludCAgCgopOwoKdHlwZWRlZiBQYWludFdpbmRvd1Byb2NQdHIgUGFp bnRXaW5kb3dCYWNrZ3JvdW5kUHJvY1B0cjsKdHlwZWRlZiBQYWludFdpbmRvd1Byb2NQdHIgUGFp bnRXaW5kb3dCb3JkZXJQcm9jUHRyOwoKdHlwZWRlZiAgICB2b2lkICgqIENvcHlXaW5kb3dQcm9j UHRyKSgKCglXaW5kb3dQdHIgICwKCUREWFBvaW50UmVjICAsCglSZWdpb25QdHIgIAoKKTsKCnR5 cGVkZWYgICAgdm9pZCAoKiBDbGVhclRvQmFja2dyb3VuZFByb2NQdHIpKAoKCVdpbmRvd1B0ciAg LAoJaW50ICAsCglpbnQgICwKCWludCAgLAoJaW50ICAsCglCb29sICAKCik7Cgp0eXBlZGVmICAg IHZvaWQgKCogQ2xpcE5vdGlmeVByb2NQdHIpKAoKCVdpbmRvd1B0ciAgLAoJaW50ICAsCglpbnQg IAoKKTsKCnR5cGVkZWYgICAgUGl4bWFwUHRyICgqIENyZWF0ZVBpeG1hcFByb2NQdHIpKAoKCVNj cmVlblB0ciAgLAoJaW50ICAsCglpbnQgICwKCWludCAgCgopOwoKdHlwZWRlZiAgICBCb29sICgq IERlc3Ryb3lQaXhtYXBQcm9jUHRyKSgKCglQaXhtYXBQdHIgIAoKKTsKCnR5cGVkZWYgICAgdm9p ZCAoKiBTYXZlRG9vbWVkQXJlYXNQcm9jUHRyKSgKCglXaW5kb3dQdHIgICwKCVJlZ2lvblB0ciAg LAoJaW50ICAsCglpbnQgIAoKKTsKCnR5cGVkZWYgICAgUmVnaW9uUHRyICgqIFJlc3RvcmVBcmVh c1Byb2NQdHIpKAoKCVdpbmRvd1B0ciAgLAoJUmVnaW9uUHRyICAKCik7Cgp0eXBlZGVmICAgIHZv aWQgKCogRXhwb3NlQ29weVByb2NQdHIpKAoKCVdpbmRvd1B0ciAgLAoJRHJhd2FibGVQdHIgICwK CUdDUHRyICAsCglSZWdpb25QdHIgICwKCWludCAgLAoJaW50ICAsCglpbnQgICwKCWludCAgLAoJ dW5zaWduZWQgbG9uZyAgCgopOwoKdHlwZWRlZiAgICBSZWdpb25QdHIgKCogVHJhbnNsYXRlQmFj a2luZ1N0b3JlUHJvY1B0cikoCgoJV2luZG93UHRyICAsCglpbnQgICwKCWludCAgLAoJUmVnaW9u UHRyICAsCglpbnQgICwKCWludCAgCgopOwoKdHlwZWRlZiAgICBSZWdpb25QdHIgKCogQ2xlYXJC YWNraW5nU3RvcmVQcm9jUHRyKSgKCglXaW5kb3dQdHIgICwKCWludCAgLAoJaW50ICAsCglpbnQg ICwKCWludCAgLAoJQm9vbCAgCgopOwoKdHlwZWRlZiAgICB2b2lkICgqIERyYXdHdWFyYW50ZWVQ cm9jUHRyKSgKCglXaW5kb3dQdHIgICwKCUdDUHRyICAsCglpbnQgIAoKKTsKICAgIAp0eXBlZGVm ICAgIEJvb2wgKCogUmVhbGl6ZUZvbnRQcm9jUHRyKSgKCglTY3JlZW5QdHIgICwKCUZvbnRQdHIg IAoKKTsKCnR5cGVkZWYgICAgQm9vbCAoKiBVbnJlYWxpemVGb250UHJvY1B0cikoCgoJU2NyZWVu UHRyICAsCglGb250UHRyICAKCik7Cgp0eXBlZGVmICAgIHZvaWQgKCogQ29uc3RyYWluQ3Vyc29y UHJvY1B0cikoCgoJU2NyZWVuUHRyICAsCglCb3hQdHIgIAoKKTsKCnR5cGVkZWYgICAgdm9pZCAo KiBDdXJzb3JMaW1pdHNQcm9jUHRyKSgKCglTY3JlZW5QdHIgICwKCUN1cnNvclB0ciAgLAoJQm94 UHRyICAsCglCb3hQdHIgIAoKKTsKCnR5cGVkZWYgICAgQm9vbCAoKiBEaXNwbGF5Q3Vyc29yUHJv Y1B0cikoCgoJU2NyZWVuUHRyICAsCglDdXJzb3JQdHIgIAoKKTsKCnR5cGVkZWYgICAgQm9vbCAo KiBSZWFsaXplQ3Vyc29yUHJvY1B0cikoCgoJU2NyZWVuUHRyICAsCglDdXJzb3JQdHIgIAoKKTsK CnR5cGVkZWYgICAgQm9vbCAoKiBVbnJlYWxpemVDdXJzb3JQcm9jUHRyKSgKCglTY3JlZW5QdHIg ICwKCUN1cnNvclB0ciAgCgopOwoKdHlwZWRlZiAgICB2b2lkICgqIFJlY29sb3JDdXJzb3JQcm9j UHRyKSgKCglTY3JlZW5QdHIgICwKCUN1cnNvclB0ciAgLAoJQm9vbCAgCgopOwoKdHlwZWRlZiAg ICBCb29sICgqIFNldEN1cnNvclBvc2l0aW9uUHJvY1B0cikoCgoJU2NyZWVuUHRyICAsCglpbnQg ICwKCWludCAgLAoJQm9vbCAgCgopOwoKdHlwZWRlZiAgICBCb29sICgqIENyZWF0ZUdDUHJvY1B0 cikoCgoJR0NQdHIgIAoKKTsKCnR5cGVkZWYgICAgQm9vbCAoKiBDcmVhdGVDb2xvcm1hcFByb2NQ dHIpKAoKCUNvbG9ybWFwUHRyICAKCik7Cgp0eXBlZGVmICAgIHZvaWQgKCogRGVzdHJveUNvbG9y bWFwUHJvY1B0cikoCgoJQ29sb3JtYXBQdHIgIAoKKTsKCnR5cGVkZWYgICAgdm9pZCAoKiBJbnN0 YWxsQ29sb3JtYXBQcm9jUHRyKSgKCglDb2xvcm1hcFB0ciAgCgopOwoKdHlwZWRlZiAgICB2b2lk ICgqIFVuaW5zdGFsbENvbG9ybWFwUHJvY1B0cikoCgoJQ29sb3JtYXBQdHIgIAoKKTsKCnR5cGVk ZWYgICAgaW50ICgqIExpc3RJbnN0YWxsZWRDb2xvcm1hcHNQcm9jUHRyKSAoCgoJU2NyZWVuUHRy ICAsCglYSUQqICAKCik7Cgp0eXBlZGVmICAgIHZvaWQgKCogU3RvcmVDb2xvcnNQcm9jUHRyKSgK CglDb2xvcm1hcFB0ciAgLAoJaW50ICAsCgl4Q29sb3JJdGVtICogIAoKKTsKCnR5cGVkZWYgICAg dm9pZCAoKiBSZXNvbHZlQ29sb3JQcm9jUHRyKSgKCgl1bnNpZ25lZCBzaG9ydCogICwKCXVuc2ln bmVkIHNob3J0KiAgLAoJdW5zaWduZWQgc2hvcnQqICAsCglWaXN1YWxQdHIgIAoKKTsKCiMgNjAx ICIuLi8uLi9pbmNsdWRlL3Njcm5pbnRzdHIuaCIKCgp0eXBlZGVmICAgIFJlZ2lvblB0ciAoKiBC aXRtYXBUb1JlZ2lvblByb2NQdHIpKAoKCVBpeG1hcFB0ciAgCgopOwoKIyA2MTkgIi4uLy4uL2lu Y2x1ZGUvc2NybmludHN0ci5oIgoKCnR5cGVkZWYgICAgdm9pZCAoKiBTZW5kR3JhcGhpY3NFeHBv c2VQcm9jUHRyKSgKCglDbGllbnRQdHIgICwKCVJlZ2lvblB0ciAgLAoJWElEICAsCglpbnQgICwK CWludCAgCgopOwoKdHlwZWRlZiAgICB2b2lkICgqIFNjcmVlbkJsb2NrSGFuZGxlclByb2NQdHIp KAoKCWludCAgLAoJcG9pbnRlciAgLAoJcG9pbnRlciAgLAoJcG9pbnRlciAgCgopOwoKdHlwZWRl ZiAgICB2b2lkICgqIFNjcmVlbldha2V1cEhhbmRsZXJQcm9jUHRyKSgKCgkgaW50ICAsCgkgcG9p bnRlciAgLAoJIHVuc2lnbmVkIGxvbmcgICwKCSBwb2ludGVyICAKCik7Cgp0eXBlZGVmICAgIEJv b2wgKCogQ3JlYXRlU2NyZWVuUmVzb3VyY2VzUHJvY1B0cikoCgoJU2NyZWVuUHRyICAKCik7Cgp0 eXBlZGVmICAgIEJvb2wgKCogTW9kaWZ5UGl4bWFwSGVhZGVyUHJvY1B0cikoCgoJUGl4bWFwUHRy ICAsCglpbnQgICwKCWludCAgLAoJaW50ICAsCglpbnQgICwKCWludCAgLAoJcG9pbnRlciAgCgop OwoKdHlwZWRlZiAgICBQaXhtYXBQdHIgKCogR2V0V2luZG93UGl4bWFwUHJvY1B0cikoCgoJV2lu ZG93UHRyICAKCik7Cgp0eXBlZGVmICAgIHZvaWQgKCogU2V0V2luZG93UGl4bWFwUHJvY1B0ciko CgoJV2luZG93UHRyICAsCglQaXhtYXBQdHIgIAoKKTsKCnR5cGVkZWYgICAgUGl4bWFwUHRyICgq IEdldFNjcmVlblBpeG1hcFByb2NQdHIpKAoKCVNjcmVlblB0ciAgCgopOwoKdHlwZWRlZiAgICB2 b2lkICgqIFNldFNjcmVlblBpeG1hcFByb2NQdHIpKAoKCVBpeG1hcFB0ciAgCgopOwoKdHlwZWRl ZiAgICB2b2lkICgqIE1hcmtXaW5kb3dQcm9jUHRyKSgKCglXaW5kb3dQdHIgIAoKKTsKCnR5cGVk ZWYgICAgQm9vbCAoKiBNYXJrT3ZlcmxhcHBlZFdpbmRvd3NQcm9jUHRyKSgKCglXaW5kb3dQdHIg ICwKCVdpbmRvd1B0ciAgLAoJV2luZG93UHRyICogIAoKKTsKCnR5cGVkZWYgICAgQm9vbCAoKiBD aGFuZ2VTYXZlVW5kZXJQcm9jUHRyKSgKCglXaW5kb3dQdHIgICwKCVdpbmRvd1B0ciAgCgopOwoK dHlwZWRlZiAgICB2b2lkICgqIFBvc3RDaGFuZ2VTYXZlVW5kZXJQcm9jUHRyKSgKCglXaW5kb3dQ dHIgICwKCVdpbmRvd1B0ciAgCgopOwoKdHlwZWRlZiAgICB2b2lkICgqIE1vdmVXaW5kb3dQcm9j UHRyKSgKCglXaW5kb3dQdHIgICwKCWludCAgLAoJaW50ICAsCglXaW5kb3dQdHIgICwKCVZUS2lu ZCAgCgopOwoKdHlwZWRlZiAgICB2b2lkICgqIFJlc2l6ZVdpbmRvd1Byb2NQdHIpKAoKICAgIFdp bmRvd1B0ciAgLAogICAgaW50ICAsCiAgICBpbnQgICwgCiAgICB1bnNpZ25lZCBpbnQgICwKICAg IHVuc2lnbmVkIGludCAgLAogICAgV2luZG93UHRyICAKCik7Cgp0eXBlZGVmICAgIFdpbmRvd1B0 ciAoKiBHZXRMYXllcldpbmRvd1Byb2NQdHIpKAoKICAgIFdpbmRvd1B0ciAgCgopOwoKdHlwZWRl ZiAgICB2b2lkICgqIEhhbmRsZUV4cG9zdXJlc1Byb2NQdHIpKAoKICAgIFdpbmRvd1B0ciAgCgop OwoKdHlwZWRlZiAgICB2b2lkICgqIFJlcGFyZW50V2luZG93UHJvY1B0cikoCgogICAgV2luZG93 UHRyICAsCiAgICBXaW5kb3dQdHIgIAoKKTsKCgp0eXBlZGVmICAgIHZvaWQgKCogU2V0U2hhcGVQ cm9jUHRyKSgKCglXaW5kb3dQdHIgIAoKKTsKCgp0eXBlZGVmICAgIHZvaWQgKCogQ2hhbmdlQm9y ZGVyV2lkdGhQcm9jUHRyKSgKCglXaW5kb3dQdHIgICwKCXVuc2lnbmVkIGludCAgCgopOwoKdHlw ZWRlZiAgICB2b2lkICgqIE1hcmtVbnJlYWxpemVkV2luZG93UHJvY1B0cikoCgoJV2luZG93UHRy ICAsCglXaW5kb3dQdHIgICwKCUJvb2wgIAoKKTsKCnR5cGVkZWYgc3RydWN0IF9TY3JlZW4gewog ICAgaW50CQkJbXlOdW07CSAKICAgIEFUT00JCWlkOwogICAgc2hvcnQJCXdpZHRoLCBoZWlnaHQ7 CiAgICBzaG9ydAkJbW1XaWR0aCwgbW1IZWlnaHQ7CiAgICBzaG9ydAkJbnVtRGVwdGhzOwogICAg dW5zaWduZWQgY2hhciAgICAgIAlyb290RGVwdGg7CiAgICBEZXB0aFB0ciAgICAgICAJYWxsb3dl ZERlcHRoczsKICAgIHVuc2lnbmVkIGxvbmcgICAgICAJcm9vdFZpc3VhbDsKICAgIHVuc2lnbmVk IGxvbmcJZGVmQ29sb3JtYXA7CiAgICBzaG9ydAkJbWluSW5zdGFsbGVkQ21hcHMsIG1heEluc3Rh bGxlZENtYXBzOwogICAgY2hhciAgICAgICAgICAgICAgICBiYWNraW5nU3RvcmVTdXBwb3J0LCBz YXZlVW5kZXJTdXBwb3J0OwogICAgdW5zaWduZWQgbG9uZwl3aGl0ZVBpeGVsLCBibGFja1BpeGVs OwogICAgdW5zaWduZWQgbG9uZwlyZ2Y7CSAKICAgIEdDUHRyCQlHQ3BlckRlcHRoWzggKzFdOwoJ CQkgCgoKCgoKCiAgICBQaXhtYXBQdHIJCVBpeG1hcFBlckRlcHRoWzFdOwogICAgcG9pbnRlcgkJ ZGV2UHJpdmF0ZTsKICAgIHNob3J0ICAgICAgIAludW1WaXN1YWxzOwogICAgVmlzdWFsUHRyCQl2 aXN1YWxzOwogICAgaW50CQkJV2luZG93UHJpdmF0ZUxlbjsKICAgIHVuc2lnbmVkCQkqV2luZG93 UHJpdmF0ZVNpemVzOwogICAgdW5zaWduZWQJCXRvdGFsV2luZG93U2l6ZTsKICAgIGludAkJCUdD UHJpdmF0ZUxlbjsKICAgIHVuc2lnbmVkCQkqR0NQcml2YXRlU2l6ZXM7CiAgICB1bnNpZ25lZAkJ dG90YWxHQ1NpemU7CgogICAgIAoKICAgIENsb3NlU2NyZWVuUHJvY1B0cgkJQ2xvc2VTY3JlZW47 CiAgICBRdWVyeUJlc3RTaXplUHJvY1B0cglRdWVyeUJlc3RTaXplOwogICAgU2F2ZVNjcmVlblBy b2NQdHIJCVNhdmVTY3JlZW47CiAgICBHZXRJbWFnZVByb2NQdHIJCUdldEltYWdlOwogICAgR2V0 U3BhbnNQcm9jUHRyCQlHZXRTcGFuczsKICAgIFBvaW50ZXJOb25JbnRlcmVzdEJveFByb2NQdHIg UG9pbnRlck5vbkludGVyZXN0Qm94OwogICAgU291cmNlVmFsaWRhdGVQcm9jUHRyCVNvdXJjZVZh bGlkYXRlOwoKICAgICAKCiAgICBDcmVhdGVXaW5kb3dQcm9jUHRyCQlDcmVhdGVXaW5kb3c7CiAg ICBEZXN0cm95V2luZG93UHJvY1B0cglEZXN0cm95V2luZG93OwogICAgUG9zaXRpb25XaW5kb3dQ cm9jUHRyCVBvc2l0aW9uV2luZG93OwogICAgQ2hhbmdlV2luZG93QXR0cmlidXRlc1Byb2NQdHIg Q2hhbmdlV2luZG93QXR0cmlidXRlczsKICAgIFJlYWxpemVXaW5kb3dQcm9jUHRyCVJlYWxpemVX aW5kb3c7CiAgICBVbnJlYWxpemVXaW5kb3dQcm9jUHRyCVVucmVhbGl6ZVdpbmRvdzsKICAgIFZh bGlkYXRlVHJlZVByb2NQdHIJCVZhbGlkYXRlVHJlZTsKICAgIFBvc3RWYWxpZGF0ZVRyZWVQcm9j UHRyCVBvc3RWYWxpZGF0ZVRyZWU7CiAgICBXaW5kb3dFeHBvc3VyZXNQcm9jUHRyCVdpbmRvd0V4 cG9zdXJlczsKICAgIFBhaW50V2luZG93QmFja2dyb3VuZFByb2NQdHIgUGFpbnRXaW5kb3dCYWNr Z3JvdW5kOwogICAgUGFpbnRXaW5kb3dCb3JkZXJQcm9jUHRyCVBhaW50V2luZG93Qm9yZGVyOwog ICAgQ29weVdpbmRvd1Byb2NQdHIJCUNvcHlXaW5kb3c7CiAgICBDbGVhclRvQmFja2dyb3VuZFBy b2NQdHIJQ2xlYXJUb0JhY2tncm91bmQ7CiAgICBDbGlwTm90aWZ5UHJvY1B0cgkJQ2xpcE5vdGlm eTsKICAgIFJlc3RhY2tXaW5kb3dQcm9jUHRyCVJlc3RhY2tXaW5kb3c7CgogICAgIAoKICAgIENy ZWF0ZVBpeG1hcFByb2NQdHIJCUNyZWF0ZVBpeG1hcDsKICAgIERlc3Ryb3lQaXhtYXBQcm9jUHRy CURlc3Ryb3lQaXhtYXA7CgogICAgIAoKICAgIFNhdmVEb29tZWRBcmVhc1Byb2NQdHIJU2F2ZURv b21lZEFyZWFzOwogICAgUmVzdG9yZUFyZWFzUHJvY1B0cgkJUmVzdG9yZUFyZWFzOwogICAgRXhw b3NlQ29weVByb2NQdHIJCUV4cG9zZUNvcHk7CiAgICBUcmFuc2xhdGVCYWNraW5nU3RvcmVQcm9j UHRyIFRyYW5zbGF0ZUJhY2tpbmdTdG9yZTsKICAgIENsZWFyQmFja2luZ1N0b3JlUHJvY1B0cglD bGVhckJhY2tpbmdTdG9yZTsKICAgIERyYXdHdWFyYW50ZWVQcm9jUHRyCURyYXdHdWFyYW50ZWU7 CiAgICAgCgoKCiAgICBCU0Z1bmNSZWMJCQlCYWNraW5nU3RvcmVGdW5jczsKICAgIAogICAgIAoK ICAgIFJlYWxpemVGb250UHJvY1B0cgkJUmVhbGl6ZUZvbnQ7CiAgICBVbnJlYWxpemVGb250UHJv Y1B0cglVbnJlYWxpemVGb250OwoKICAgICAKCiAgICBDb25zdHJhaW5DdXJzb3JQcm9jUHRyCUNv bnN0cmFpbkN1cnNvcjsKICAgIEN1cnNvckxpbWl0c1Byb2NQdHIJCUN1cnNvckxpbWl0czsKICAg IERpc3BsYXlDdXJzb3JQcm9jUHRyCURpc3BsYXlDdXJzb3I7CiAgICBSZWFsaXplQ3Vyc29yUHJv Y1B0cglSZWFsaXplQ3Vyc29yOwogICAgVW5yZWFsaXplQ3Vyc29yUHJvY1B0cglVbnJlYWxpemVD dXJzb3I7CiAgICBSZWNvbG9yQ3Vyc29yUHJvY1B0cglSZWNvbG9yQ3Vyc29yOwogICAgU2V0Q3Vy c29yUG9zaXRpb25Qcm9jUHRyCVNldEN1cnNvclBvc2l0aW9uOwoKICAgICAKCiAgICBDcmVhdGVH Q1Byb2NQdHIJCUNyZWF0ZUdDOwoKICAgICAKCiAgICBDcmVhdGVDb2xvcm1hcFByb2NQdHIJQ3Jl YXRlQ29sb3JtYXA7CiAgICBEZXN0cm95Q29sb3JtYXBQcm9jUHRyCURlc3Ryb3lDb2xvcm1hcDsK ICAgIEluc3RhbGxDb2xvcm1hcFByb2NQdHIJSW5zdGFsbENvbG9ybWFwOwogICAgVW5pbnN0YWxs Q29sb3JtYXBQcm9jUHRyCVVuaW5zdGFsbENvbG9ybWFwOwogICAgTGlzdEluc3RhbGxlZENvbG9y bWFwc1Byb2NQdHIgTGlzdEluc3RhbGxlZENvbG9ybWFwczsKICAgIFN0b3JlQ29sb3JzUHJvY1B0 cgkJU3RvcmVDb2xvcnM7CiAgICBSZXNvbHZlQ29sb3JQcm9jUHRyCQlSZXNvbHZlQ29sb3I7Cgog ICAgIAoKIyA5MTUgIi4uLy4uL2luY2x1ZGUvc2NybmludHN0ci5oIgoKICAgIEJpdG1hcFRvUmVn aW9uUHJvY1B0cglCaXRtYXBUb1JlZ2lvbjsKCgoKICAgIFNlbmRHcmFwaGljc0V4cG9zZVByb2NQ dHIJU2VuZEdyYXBoaWNzRXhwb3NlOwoKICAgICAKCiAgICBTY3JlZW5CbG9ja0hhbmRsZXJQcm9j UHRyCUJsb2NrSGFuZGxlcjsKICAgIFNjcmVlbldha2V1cEhhbmRsZXJQcm9jUHRyCVdha2V1cEhh bmRsZXI7CgogICAgcG9pbnRlciBibG9ja0RhdGE7CiAgICBwb2ludGVyIHdha2V1cERhdGE7Cgog ICAgIAogICAgRGV2VW5pb24JKmRldlByaXZhdGVzOwoKICAgIENyZWF0ZVNjcmVlblJlc291cmNl c1Byb2NQdHIgQ3JlYXRlU2NyZWVuUmVzb3VyY2VzOwogICAgTW9kaWZ5UGl4bWFwSGVhZGVyUHJv Y1B0cglNb2RpZnlQaXhtYXBIZWFkZXI7CgogICAgR2V0V2luZG93UGl4bWFwUHJvY1B0cglHZXRX aW5kb3dQaXhtYXA7CiAgICBTZXRXaW5kb3dQaXhtYXBQcm9jUHRyCVNldFdpbmRvd1BpeG1hcDsK ICAgIEdldFNjcmVlblBpeG1hcFByb2NQdHIJR2V0U2NyZWVuUGl4bWFwOwogICAgU2V0U2NyZWVu UGl4bWFwUHJvY1B0cglTZXRTY3JlZW5QaXhtYXA7CgogICAgUGl4bWFwUHRyIHBTY3JhdGNoUGl4 bWFwOwkJIAoKCgoKCgoKICAgIE1hcmtXaW5kb3dQcm9jUHRyCQlNYXJrV2luZG93OwogICAgTWFy a092ZXJsYXBwZWRXaW5kb3dzUHJvY1B0ciBNYXJrT3ZlcmxhcHBlZFdpbmRvd3M7CiAgICBDaGFu Z2VTYXZlVW5kZXJQcm9jUHRyCUNoYW5nZVNhdmVVbmRlcjsKICAgIFBvc3RDaGFuZ2VTYXZlVW5k ZXJQcm9jUHRyCVBvc3RDaGFuZ2VTYXZlVW5kZXI7CiAgICBNb3ZlV2luZG93UHJvY1B0cgkJTW92 ZVdpbmRvdzsKICAgIFJlc2l6ZVdpbmRvd1Byb2NQdHIJCVJlc2l6ZVdpbmRvdzsKICAgIEdldExh eWVyV2luZG93UHJvY1B0cglHZXRMYXllcldpbmRvdzsKICAgIEhhbmRsZUV4cG9zdXJlc1Byb2NQ dHIJSGFuZGxlRXhwb3N1cmVzOwogICAgUmVwYXJlbnRXaW5kb3dQcm9jUHRyCVJlcGFyZW50V2lu ZG93OwoKCiAgICBTZXRTaGFwZVByb2NQdHIJCVNldFNoYXBlOwoKCiAgICBDaGFuZ2VCb3JkZXJX aWR0aFByb2NQdHIJQ2hhbmdlQm9yZGVyV2lkdGg7CiAgICBNYXJrVW5yZWFsaXplZFdpbmRvd1By b2NQdHIJTWFya1VucmVhbGl6ZWRXaW5kb3c7Cgp9IFNjcmVlblJlYzsKCnR5cGVkZWYgc3RydWN0 IF9TY3JlZW5JbmZvIHsKICAgIGludAkJaW1hZ2VCeXRlT3JkZXI7CiAgICBpbnQJCWJpdG1hcFNj YW5saW5lVW5pdDsKICAgIGludAkJYml0bWFwU2NhbmxpbmVQYWQ7CiAgICBpbnQJCWJpdG1hcEJp dE9yZGVyOwogICAgaW50CQludW1QaXhtYXBGb3JtYXRzOwogICAgUGl4bWFwRm9ybWF0UmVjCgkJ Zm9ybWF0c1s4IF07CiAgICBpbnQJCWFycmF5U2l6ZTsKICAgIGludAkJbnVtU2NyZWVuczsKICAg IFNjcmVlblB0cglzY3JlZW5zWzMgXTsKICAgIGludAkJbnVtVmlkZW9TY3JlZW5zOwp9IFNjcmVl bkluZm87CgpleHRlcm4gU2NyZWVuSW5mbyBzY3JlZW5JbmZvOwoKZXh0ZXJuIHZvaWQgSW5pdE91 dHB1dCgKCiAgICBTY3JlZW5JbmZvIAkqICAsCiAgICBpbnQgICAgIAkgLAogICAgY2hhciAgICAJ KiogIAoKKTsKCgojIDI3ICJzaGFkb3cuYyIgMgoKIyAxICIuLi8uLi9pbmNsdWRlL3dpbmRvd3N0 ci5oIiAxCiAKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoK CgoKCgoKIyAxICIuLi8uLi9pbmNsdWRlL3BpeG1hcHN0ci5oIiAxCiAKIAoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgp0eXBlZGVmIHN0cnVjdCBfRHJhd2Fi bGUgewogICAgdW5zaWduZWQgY2hhcgl0eXBlOwkgCiAgICB1bnNpZ25lZCBjaGFyCWNsYXNzOwkg CiAgICB1bnNpZ25lZCBjaGFyCWRlcHRoOwogICAgdW5zaWduZWQgY2hhcgliaXRzUGVyUGl4ZWw7 CiAgICB1bnNpZ25lZCBsb25nCWlkOwkgCiAgICBzaG9ydAkJeDsJIAogICAgc2hvcnQJCXk7CSAK ICAgIHVuc2lnbmVkIHNob3J0CXdpZHRoOwogICAgdW5zaWduZWQgc2hvcnQJaGVpZ2h0OwogICAg U2NyZWVuUHRyCQlwU2NyZWVuOwogICAgdW5zaWduZWQgbG9uZwlzZXJpYWxOdW1iZXI7Cn0gRHJh d2FibGVSZWM7CgogCgoKCnR5cGVkZWYgc3RydWN0IF9QaXhtYXAgewogICAgRHJhd2FibGVSZWMJ CWRyYXdhYmxlOwogICAgaW50CQkJcmVmY250OwogICAgaW50CQkJZGV2S2luZDsKICAgIERldlVu aW9uCQlkZXZQcml2YXRlOwoKCgp9IFBpeG1hcFJlYzsKCgojIDU0ICIuLi8uLi9pbmNsdWRlL3dp bmRvd3N0ci5oIiAyCgoKCiMgMSAiLi4vLi4vaW5jbHVkZS9wcm9wZXJ0eS5oIiAxCiAKIAoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX1By b3BlcnR5ICpQcm9wZXJ0eVB0cjsKCmV4dGVybiBpbnQgQ2hhbmdlV2luZG93UHJvcGVydHkoCgog ICAgV2luZG93UHRyICAsCiAgICBBdG9tICAsCiAgICBBdG9tICAsCiAgICBpbnQgICwKICAgIGlu dCAgLAogICAgdW5zaWduZWQgbG9uZyAgLAogICAgcG9pbnRlciAgLAogICAgQm9vbCAgCgopOwoK ZXh0ZXJuIGludCBEZWxldGVQcm9wZXJ0eSgKCiAgICBXaW5kb3dQdHIgICwKICAgIEF0b20gIAoK KTsKCmV4dGVybiB2b2lkIERlbGV0ZUFsbFdpbmRvd1Byb3BlcnRpZXMoCgogICAgV2luZG93UHRy ICAKCik7CgoKIyA1NyAiLi4vLi4vaW5jbHVkZS93aW5kb3dzdHIuaCIgMgoKIyAxICIuLi8uLi9p bmNsdWRlL3Jlc291cmNlLmgiIDEKIAoKIAogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCiAKCgoKIAoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIFJFU1RZUEU7CgoK CgogCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgogCgogCgogCgogCgog CgoKCgoKCgogCgoKCgp0eXBlZGVmIGludCAoKkRlbGV0ZVR5cGUpKAoKICAgIHBvaW50ZXIgICwK ICAgIFhJRCAgCgopOwoKdHlwZWRlZiB2b2lkICgqRmluZFJlc1R5cGUpKAoKICAgIHBvaW50ZXIg ICwKICAgIFhJRCAgLAogICAgcG9pbnRlciAgCgopOwoKdHlwZWRlZiBCb29sICgqRmluZENvbXBs ZXhSZXNUeXBlKSgKCiAgICBwb2ludGVyICAsCiAgICBYSUQgICwKICAgIHBvaW50ZXIgIAoKKTsK CmV4dGVybiBSRVNUWVBFIENyZWF0ZU5ld1Jlc291cmNlVHlwZSgKCiAgICBEZWxldGVUeXBlICAK Cik7CgpleHRlcm4gUkVTVFlQRSBDcmVhdGVOZXdSZXNvdXJjZUNsYXNzKAoKdm9pZAoKKTsKCmV4 dGVybiBCb29sIEluaXRDbGllbnRSZXNvdXJjZXMoCgogICAgQ2xpZW50UHRyICAKCik7CgpleHRl cm4gWElEIEZha2VDbGllbnRJRCgKCiAgICBpbnQgIAoKKTsKCmV4dGVybiBCb29sIEFkZFJlc291 cmNlKAoKICAgIFhJRCAgLAogICAgUkVTVFlQRSAgLAogICAgcG9pbnRlciAgCgopOwoKZXh0ZXJu IHZvaWQgRnJlZVJlc291cmNlKAoKICAgIFhJRCAgLAogICAgUkVTVFlQRSAgCgopOwoKZXh0ZXJu IHZvaWQgRnJlZVJlc291cmNlQnlUeXBlKAoKICAgIFhJRCAgLAogICAgUkVTVFlQRSAgLAogICAg Qm9vbCAgCgopOwoKZXh0ZXJuIEJvb2wgQ2hhbmdlUmVzb3VyY2VWYWx1ZSgKCiAgICBYSUQgICwK ICAgIFJFU1RZUEUgICwKICAgIHBvaW50ZXIgIAoKKTsKCmV4dGVybiB2b2lkIEZpbmRDbGllbnRS ZXNvdXJjZXNCeVR5cGUoCgogICAgQ2xpZW50UHRyICAsCiAgICBSRVNUWVBFICAsCiAgICBGaW5k UmVzVHlwZSAgLAogICAgcG9pbnRlciAgCgopOwoKZXh0ZXJuIHZvaWQgRnJlZUNsaWVudE5ldmVy UmV0YWluUmVzb3VyY2VzKAoKICAgIENsaWVudFB0ciAgCgopOwoKZXh0ZXJuIHZvaWQgRnJlZUNs aWVudFJlc291cmNlcygKCiAgICBDbGllbnRQdHIgIAoKKTsKCmV4dGVybiB2b2lkIEZyZWVBbGxS ZXNvdXJjZXMoCgp2b2lkCgopOwoKZXh0ZXJuIEJvb2wgTGVnYWxOZXdJRCgKCiAgICBYSUQgICwK ICAgIENsaWVudFB0ciAgCgopOwoKZXh0ZXJuIHBvaW50ZXIgTG9va3VwSURCeVR5cGUoCgogICAg WElEICAsCiAgICBSRVNUWVBFICAKCik7CgpleHRlcm4gcG9pbnRlciBMb29rdXBJREJ5Q2xhc3Mo CgogICAgWElEICAsCiAgICBSRVNUWVBFICAKCik7CgpleHRlcm4gcG9pbnRlciBMb29rdXBDbGll bnRSZXNvdXJjZUNvbXBsZXgoCgogICAgQ2xpZW50UHRyIGNsaWVudCwKICAgIFJFU1RZUEUgdHlw ZSwKICAgIEZpbmRDb21wbGV4UmVzVHlwZSBmdW5jLAogICAgcG9pbnRlciBjZGF0YQoKKTsKCiAK CgoKCgoKCgoKCgoKIyAyODkgIi4uLy4uL2luY2x1ZGUvcmVzb3VyY2UuaCIKCgoKCgoKCgoKCmV4 dGVybiB2b2lkIEdldFhJRFJhbmdlKAoKICAgIGludCAgLAogICAgQm9vbCAgLAogICAgWElEICog ICwKICAgIFhJRCAqICAKCik7CgpleHRlcm4gdW5zaWduZWQgaW50IEdldFhJRExpc3QoCgogICAg Q2xpZW50UHRyICAsCiAgICB1bnNpZ25lZCBpbnQgICwKICAgIFhJRCAqICAKCik7CgoKCiMgNTgg Ii4uLy4uL2luY2x1ZGUvd2luZG93c3RyLmgiIDIKCgoKCiMgMSAiLi4vLi4vaW5jbHVkZS9vcGFx dWUuaCIgMQogCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKIyAxICIuLi8uLi9pbmNs dWRlL2dsb2JhbHMuaCIgMQogCgoKCgoKCiAKCmV4dGVybiBDQVJEMzIgZGVmYXVsdFNjcmVlblNh dmVyVGltZTsKZXh0ZXJuIENBUkQzMiBkZWZhdWx0U2NyZWVuU2F2ZXJJbnRlcnZhbDsKZXh0ZXJu IENBUkQzMiBTY3JlZW5TYXZlclRpbWU7CmV4dGVybiBDQVJEMzIgU2NyZWVuU2F2ZXJJbnRlcnZh bDsKCmV4dGVybiBjaGFyICpkZWZhdWx0Rm9udFBhdGg7CmV4dGVybiBjaGFyICpyZ2JQYXRoOwpl eHRlcm4gaW50IG1vbml0b3JSZXNvbHV0aW9uOwpleHRlcm4gQm9vbCBsb2FkYWJsZUZvbnRzOwpl eHRlcm4gaW50IGRlZmF1bHRDb2xvclZpc3VhbENsYXNzOwoKZXh0ZXJuIEJvb2wgTXVzdF9oYXZl X21lbW9yeTsKZXh0ZXJuIFdpbmRvd1B0ciAqV2luZG93VGFibGU7CmV4dGVybiBpbnQgR3JhYklu UHJvZ3Jlc3M7CmV4dGVybiBCb29sIG5vVGVzdEV4dGVuc2lvbnM7CgpleHRlcm4gRERYUG9pbnRS ZWMgZGl4U2NyZWVuT3JpZ2luc1szIF07CgojIDQxICIuLi8uLi9pbmNsdWRlL2dsb2JhbHMuaCIK CgoKZXh0ZXJuIEJvb2wgbm9QYW5vcmFtaVhFeHRlbnNpb247CmV4dGVybiBCb29sIFBhbm9yYW1p WE1hcHBlZDsKZXh0ZXJuIEJvb2wgUGFub3JhbWlYVmlzaWJpbGl0eU5vdGlmeVNlbnQ7CmV4dGVy biBCb29sIFBhbm9yYW1pWFdpbmRvd0V4cG9zdXJlU2VudDsKZXh0ZXJuIEJvb2wgUGFub3JhbWlY T25lRXhwb3NlUmVxdWVzdDsKCgoKCiMgMzIgIi4uLy4uL2luY2x1ZGUvb3BhcXVlLmgiIDIKCgpl eHRlcm4gY2hhciAqZGVmYXVsdFRleHRGb250OwpleHRlcm4gY2hhciAqZGVmYXVsdEN1cnNvckZv bnQ7CmV4dGVybiBpbnQgTWF4Q2xpZW50czsKZXh0ZXJuIGNoYXIgaXNJdFRpbWVUb1lpZWxkOwpl eHRlcm4gY2hhciBkaXNwYXRjaEV4Y2VwdGlvbjsKCiAKCgoKCmV4dGVybiBDQVJEMzIgVGltZU91 dFZhbHVlOwpleHRlcm4gaW50IFNjcmVlblNhdmVyQmxhbmtpbmc7CmV4dGVybiBpbnQgU2NyZWVu U2F2ZXJBbGxvd0V4cG9zdXJlczsKZXh0ZXJuIGludCBkZWZhdWx0U2NyZWVuU2F2ZXJCbGFua2lu ZzsKZXh0ZXJuIGludCBkZWZhdWx0U2NyZWVuU2F2ZXJBbGxvd0V4cG9zdXJlczsKZXh0ZXJuIGlu dCBhcmdjR2xvYmFsOwpleHRlcm4gY2hhciAqKmFyZ3ZHbG9iYWw7CmV4dGVybiBjaGFyICpkaXNw bGF5OwoKZXh0ZXJuIGludCBkZWZhdWx0QmFja2luZ1N0b3JlOwpleHRlcm4gQm9vbCBkaXNhYmxl QmFja2luZ1N0b3JlOwpleHRlcm4gQm9vbCBlbmFibGVCYWNraW5nU3RvcmU7CmV4dGVybiBCb29s IGRpc2FibGVTYXZlVW5kZXJzOwpleHRlcm4gQm9vbCBQYXJ0aWFsTmV0d29yazsKCmV4dGVybiBp bnQgbG9nb1NjcmVlblNhdmVyOwoKCgoKCgoKCgoKZXh0ZXJuIEJvb2wgcGVybWl0T2xkQnVnczsK ZXh0ZXJuIEJvb2wgZGVmZWF0QWNjZXNzQ29udHJvbDsKCgoKZXh0ZXJuIGNoYXIqIHByb3ROb0xp c3RlbjsKCgoKCiMgNjIgIi4uLy4uL2luY2x1ZGUvd2luZG93c3RyLmgiIDIKCgoKCgoKCgoKCgoK CnR5cGVkZWYgc3RydWN0IF9XaW5kb3dPcHQgewogICAgVmlzdWFsSUQJCXZpc3VhbDsJCSAgICAK ICAgIEN1cnNvclB0cgkJY3Vyc29yOwkJICAgIAogICAgQ29sb3JtYXAJCWNvbG9ybWFwOwkgICAg CiAgICBNYXNrCQlkb250UHJvcGFnYXRlTWFzazsgIAogICAgTWFzawkJb3RoZXJFdmVudE1hc2tz OyAgICAKICAgIHN0cnVjdCBfT3RoZXJDbGllbnRzICpvdGhlckNsaWVudHM7CSAgICAKICAgIHN0 cnVjdCBfR3JhYlJlYwkqcGFzc2l2ZUdyYWJzOwkgICAgCiAgICBQcm9wZXJ0eVB0cgkJdXNlclBy b3BzOwkgICAgCiAgICB1bnNpZ25lZCBsb25nCWJhY2tpbmdCaXRQbGFuZXM7ICAgCiAgICB1bnNp Z25lZCBsb25nCWJhY2tpbmdQaXhlbDsJICAgIAoKICAgIFJlZ2lvblB0cgkJYm91bmRpbmdTaGFw ZTsJICAgIAogICAgUmVnaW9uUHRyCQljbGlwU2hhcGU7CSAgICAKCgoKCn0gV2luZG93T3B0UmVj LCAqV2luZG93T3B0UHRyOwoKCgoKdHlwZWRlZiBzdHJ1Y3QgX1dpbmRvdyB7CiAgICBEcmF3YWJs ZVJlYwkJZHJhd2FibGU7CiAgICBXaW5kb3dQdHIJCXBhcmVudDsJCSAKICAgIFdpbmRvd1B0cgkJ bmV4dFNpYjsJIAogICAgV2luZG93UHRyCQlwcmV2U2liOwkgCiAgICBXaW5kb3dQdHIJCWZpcnN0 Q2hpbGQ7CSAKICAgIFdpbmRvd1B0cgkJbGFzdENoaWxkOwkgCiAgICBSZWdpb25SZWMJCWNsaXBM aXN0OwkgCiAgICBSZWdpb25SZWMJCWJvcmRlckNsaXA7CSAKICAgIHVuaW9uIF9WYWxpZGF0ZQkq dmFsZGF0YTsKICAgIFJlZ2lvblJlYwkJd2luU2l6ZTsKICAgIFJlZ2lvblJlYwkJYm9yZGVyU2l6 ZTsKICAgIEREWFBvaW50UmVjCQlvcmlnaW47CQkgCiAgICB1bnNpZ25lZCBzaG9ydAlib3JkZXJX aWR0aDsKICAgIHVuc2lnbmVkIHNob3J0CWRlbGl2ZXJhYmxlRXZlbnRzOwogICAgTWFzawkJZXZl bnRNYXNrOwogICAgUGl4VW5pb24JCWJhY2tncm91bmQ7CiAgICBQaXhVbmlvbgkJYm9yZGVyOwog ICAgcG9pbnRlcgkJYmFja1N0b3JhZ2U7CSAKICAgIFdpbmRvd09wdFB0cglvcHRpb25hbDsKICAg IHVuc2lnbmVkCQliYWNrZ3JvdW5kU3RhdGU6MjsgIAogICAgdW5zaWduZWQJCWJvcmRlcklzUGl4 ZWw6MTsKICAgIHVuc2lnbmVkCQljdXJzb3JJc05vbmU6MTsJIAogICAgdW5zaWduZWQJCWJhY2tp bmdTdG9yZToyOwogICAgdW5zaWduZWQJCXNhdmVVbmRlcjoxOwogICAgdW5zaWduZWQJCURJWHNh dmVVbmRlcjoxOwogICAgdW5zaWduZWQJCWJpdEdyYXZpdHk6NDsKICAgIHVuc2lnbmVkCQl3aW5H cmF2aXR5OjQ7CiAgICB1bnNpZ25lZAkJb3ZlcnJpZGVSZWRpcmVjdDoxOwogICAgdW5zaWduZWQJ CXZpc2liaWxpdHk6MjsKICAgIHVuc2lnbmVkCQltYXBwZWQ6MTsKICAgIHVuc2lnbmVkCQlyZWFs aXplZDoxOwkgCiAgICB1bnNpZ25lZAkJdmlld2FibGU6MTsJIAogICAgdW5zaWduZWQJCWRvbnRQ cm9wYWdhdGU6MzsgCiAgICB1bnNpZ25lZAkJZm9yY2VkQlM6MTsJIAoKCgoKCgogICAgRGV2VW5p b24JCSpkZXZQcml2YXRlczsKfSBXaW5kb3dSZWM7CgogCgoKCgpleHRlcm4gTWFzawkgICAgRG9u dFByb3BhZ2F0ZU1hc2tzW107CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoK CnR5cGVkZWYgc3RydWN0IF9TY3JlZW5TYXZlclN0dWZmIHsKICAgIFdpbmRvd1B0ciBwV2luZG93 OwogICAgWElEICAgICAgIHdpZDsKICAgIGNoYXIgICAgICBibGFua2VkOwogICAgQm9vbCAgICAg ICgqRXh0ZXJuYWxTY3JlZW5TYXZlcikoCgoJU2NyZWVuUHRyCSAsCglpbnQJCSAsCglCb29sCQkg CgogICAgKTsKfSBTY3JlZW5TYXZlclN0dWZmUmVjLCAqU2NyZWVuU2F2ZXJTdHVmZlB0cjsKCgoK CgoKCgpleHRlcm4gaW50IHNjcmVlbklzU2F2ZWQ7CmV4dGVybiBTY3JlZW5TYXZlclN0dWZmUmVj IHNhdmVkU2NyZWVuSW5mb1szIF07CgogCgoKCgoKCgoKIAoKCgoKCgpleHRlcm4gaW50IG51bVNh dmVVbmRlcnNWaWV3YWJsZTsKZXh0ZXJuIGludCBkZWx0YVNhdmVVbmRlcnNWaWV3YWJsZTsKCgoj IDI4ICJzaGFkb3cuYyIgMgoKIyAxICIuLi8uLi8uLi8uLi9pbmNsdWRlL2ZvbnRzL2ZvbnQuaCIg MQogCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAogCgoKCgoKIyAxICIuLi8uLi8uLi8uLi9pbmNs dWRlL2ZvbnRzL2ZzbWFza3MuaCIgMQogCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCnR5cGVkZWYgQ0FSRDMyIGZzQml0bWFwRm9ybWF0Owp0eXBlZGVmIENBUkQzMiBmc0JpdG1h cEZvcm1hdE1hc2s7CgoKIyAzMSAiLi4vLi4vLi4vLi4vaW5jbHVkZS9mb250cy9mb250LmgiIDIK CgoKIAoKCgoKCnR5cGVkZWYgc3RydWN0IF9Gb250SW5mbyAqRm9udEluZm9QdHI7CnR5cGVkZWYg c3RydWN0IF9Gb250UHJvcCAqRm9udFByb3BQdHI7CnR5cGVkZWYgc3RydWN0IF9FeHRlbnRJbmZv ICpFeHRlbnRJbmZvUHRyOwp0eXBlZGVmIHN0cnVjdCBfRm9udFBhdGhFbGVtZW50ICpGb250UGF0 aEVsZW1lbnRQdHI7CgoKCgoKCnR5cGVkZWYgc3RydWN0IF9Gb250TmFtZXMgKkZvbnROYW1lc1B0 cjsKdHlwZWRlZiBzdHJ1Y3QgX0ZvbnRSZXNvbHV0aW9uICpGb250UmVzb2x1dGlvblB0cjsKCgoK CgogIAoKCgoKdHlwZWRlZiBpbnQgRHJhd0RpcmVjdGlvbjsKCgoKCgoKCgoKCgoKCgoKCgogCgoK CgoKCgoKIAoKCgoKCiAKCgoKCmV4dGVybiBpbnQgZ2x5cGhDYWNoaW5nTW9kZTsKCnN0cnVjdCBf Q2xpZW50OwoKZXh0ZXJuIGludCBTdGFydExpc3RGb250c1dpdGhJbmZvKAogICAgc3RydWN0IF9D bGllbnQgKiAgLAogICAgaW50ICAsCiAgICB1bnNpZ25lZCBjaGFyICogICwKICAgIGludCAgCik7 CgpleHRlcm4gRm9udE5hbWVzUHRyIE1ha2VGb250TmFtZXNSZWNvcmQoCiAgICB1bnNpZ25lZCAg Cik7CgpleHRlcm4gdm9pZCBGcmVlRm9udE5hbWVzKAogICAgRm9udE5hbWVzUHRyICAKKTsKCmV4 dGVybiBpbnQgIEFkZEZvbnROYW1lc05hbWUoCiAgICBGb250TmFtZXNQdHIgICwKICAgIGNoYXIg KiAgLAogICAgaW50ICAKKTsKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX0ZvbnRQYXR0ZXJuQ2FjaGUg ICAgKkZvbnRQYXR0ZXJuQ2FjaGVQdHI7CgpleHRlcm4gRm9udFBhdHRlcm5DYWNoZVB0ciAgTWFr ZUZvbnRQYXR0ZXJuQ2FjaGUgKAogICAgdm9pZAopOwoKZXh0ZXJuIHZvaWQJCSAgICBGcmVlRm9u dFBhdHRlcm5DYWNoZSAoCiAgICBGb250UGF0dGVybkNhY2hlUHRyICAKKTsKCmV4dGVybiB2b2lk CQkgICAgRW1wdHlGb250UGF0dGVybkNhY2hlICgKICAgIEZvbnRQYXR0ZXJuQ2FjaGVQdHIgIAop OwoKZXh0ZXJuIHZvaWQJCSAgICBDYWNoZUZvbnRQYXR0ZXJuICgKICAgIEZvbnRQYXR0ZXJuQ2Fj aGVQdHIgICwKICAgIGNoYXIgKiAgLAogICAgaW50ICAsCiAgICBGb250UHRyICAKKTsKZXh0ZXJu IEZvbnRSZXNvbHV0aW9uUHRyIEdldENsaWVudFJlc29sdXRpb25zKAogICAgaW50ICogIAopOwoK ZXh0ZXJuIEZvbnRQdHIJCSAgICBGaW5kQ2FjaGVkRm9udFBhdHRlcm4gKAogICAgRm9udFBhdHRl cm5DYWNoZVB0ciAgLAogICAgY2hhciAqICAsCiAgICBpbnQgIAopOwoKZXh0ZXJuIHZvaWQJCSAg ICBSZW1vdmVDYWNoZWRGb250UGF0dGVybiAoCiAgICBGb250UGF0dGVybkNhY2hlUHRyICAsCiAg ICBGb250UHRyICAKKTsKCnR5cGVkZWYgZW51bSB7CiAgICBMaW5lYXI4Qml0LCBUd29EOEJpdCwg TGluZWFyMTZCaXQsIFR3b0QxNkJpdAp9ICAgICAgICAgICBGb250RW5jb2Rpbmc7CgoKIyAyOSAi c2hhZG93LmMiIDIKCiMgMSAiLi4vLi4vaW5jbHVkZS9kaXhmb250c3RyLmgiIDEKIAogCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi4uLy4uL2luY2x1ZGUvc2VydmVybWQuaCIgMQogCiAK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgogCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKIyAxMjkgIi4uLy4uL2luY2x1ZGUvc2VydmVybWQuaCIKCgojIDE1MCAiLi4vLi4vaW5j bHVkZS9zZXJ2ZXJtZC5oIgoKCiMgMTY1ICIuLi8uLi9pbmNsdWRlL3NlcnZlcm1kLmgiCgoKIyAx ODYgIi4uLy4uL2luY2x1ZGUvc2VydmVybWQuaCIKCgojIDIxNSAiLi4vLi4vaW5jbHVkZS9zZXJ2 ZXJtZC5oIgoKCgojIDIzMSAiLi4vLi4vaW5jbHVkZS9zZXJ2ZXJtZC5oIgoKCiMgMjQ5ICIuLi8u Li9pbmNsdWRlL3NlcnZlcm1kLmgiCgoKIyAyNjMgIi4uLy4uL2luY2x1ZGUvc2VydmVybWQuaCIK CgojIDI3NCAiLi4vLi4vaW5jbHVkZS9zZXJ2ZXJtZC5oIgoKCiMgMjg1ICIuLi8uLi9pbmNsdWRl L3NlcnZlcm1kLmgiCgoKIyAzMDYgIi4uLy4uL2luY2x1ZGUvc2VydmVybWQuaCIKCgojIDMyNyAi Li4vLi4vaW5jbHVkZS9zZXJ2ZXJtZC5oIgoKCgojIDM0OSAiLi4vLi4vaW5jbHVkZS9zZXJ2ZXJt ZC5oIgoKCiMgMzYzICIuLi8uLi9pbmNsdWRlL3NlcnZlcm1kLmgiCgoKIyAzNzkgIi4uLy4uL2lu Y2x1ZGUvc2VydmVybWQuaCIKCgojIDQyMiAiLi4vLi4vaW5jbHVkZS9zZXJ2ZXJtZC5oIgoKCiMg NDMyICIuLi8uLi9pbmNsdWRlL3NlcnZlcm1kLmgiCgoKIyA0NTYgIi4uLy4uL2luY2x1ZGUvc2Vy dmVybWQuaCIKCgogCgoKCgoKCiAKIAoKCgoKCgoKIAoKCgoKCgoKCgoKIAoKCgoKCgp0eXBlZGVm IHN0cnVjdCBfUGFkZGluZ0luZm8gewoJaW50ICAgICBwYWRSb3VuZFVwOwkgCglpbnQJcGFkUGl4 ZWxzTG9nMjsJIAoJaW50ICAgICBwYWRCeXRlc0xvZzI7CSAKCWludAlub3RQb3dlcjI7CSAKCWlu dAlieXRlc1BlclBpeGVsOwkgCglpbnQJYml0c1BlclBpeGVsOwkgCn0gUGFkZGluZ0luZm87CmV4 dGVybiBQYWRkaW5nSW5mbyBQaXhtYXBXaWR0aFBhZGRpbmdJbmZvW107CgogCgoKCgoKCgoKCgog CgoKCgoKCgoKCgoKCgoKIyAyOCAiLi4vLi4vaW5jbHVkZS9kaXhmb250c3RyLmgiIDIKCiMgMSAi Li4vLi4vaW5jbHVkZS9kaXhmb250LmgiIDEKIAogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoK CgoKIyAxICIuLi8uLi9pbmNsdWRlL2Nsb3N1cmUuaCIgMQogCiAKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgp0eXBlZGVmIHN0cnVjdCBfTEZjbG9zdXJlCSpMRmNs b3N1cmVQdHI7CnR5cGVkZWYgc3RydWN0IF9MRldJY2xvc3VyZQkqTEZXSWNsb3N1cmVQdHI7CnR5 cGVkZWYgc3RydWN0IF9PRmNsb3N1cmUJKk9GY2xvc3VyZVB0cjsKdHlwZWRlZiBzdHJ1Y3QgX1BU Y2xvc3VyZQkqUFRjbG9zdXJlUHRyOwp0eXBlZGVmIHN0cnVjdCBfSVRjbG9zdXJlCSpJVGNsb3N1 cmVQdHI7CgoKIyAzMSAiLi4vLi4vaW5jbHVkZS9kaXhmb250LmgiIDIKCiMgMSAiLi4vLi4vLi4v Li4vaW5jbHVkZS9mb250cy9mb250c3RydWN0LmgiIDEKIAogCiAKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKIAoKCgoKCgoKCnR5cGVkZWYgc3RydWN0IF9Gb250UHJvcCB7CiAgICBsb25n ICAgICAgICBuYW1lOwogICAgbG9uZyAgICAgICAgdmFsdWU7CQkgCn0gICAgICAgICAgIEZvbnRQ cm9wUmVjOwoKdHlwZWRlZiBzdHJ1Y3QgX0ZvbnRSZXNvbHV0aW9uIHsKICAgIHVuc2lnbmVkIHNo b3J0IHhfcmVzb2x1dGlvbjsKICAgIHVuc2lnbmVkIHNob3J0IHlfcmVzb2x1dGlvbjsKICAgIHVu c2lnbmVkIHNob3J0IHBvaW50X3NpemU7Cn0gICAgICAgICAgIEZvbnRSZXNvbHV0aW9uUmVjOwoK dHlwZWRlZiBzdHJ1Y3QgX0V4dGVudEluZm8gewogICAgRHJhd0RpcmVjdGlvbiBkcmF3RGlyZWN0 aW9uOwogICAgaW50ICAgICAgICAgZm9udEFzY2VudDsKICAgIGludCAgICAgICAgIGZvbnREZXNj ZW50OwogICAgaW50ICAgICAgICAgb3ZlcmFsbEFzY2VudDsKICAgIGludCAgICAgICAgIG92ZXJh bGxEZXNjZW50OwogICAgaW50ICAgICAgICAgb3ZlcmFsbFdpZHRoOwogICAgaW50ICAgICAgICAg b3ZlcmFsbExlZnQ7CiAgICBpbnQgICAgICAgICBvdmVyYWxsUmlnaHQ7Cn0gICAgICAgICAgIEV4 dGVudEluZm9SZWM7Cgp0eXBlZGVmIHN0cnVjdCBfQ2hhckluZm8gewogICAgeENoYXJJbmZvICAg bWV0cmljczsJIAogICAgY2hhciAgICAgICAqYml0czsJCSAKfSAgICAgICAgICAgQ2hhckluZm9S ZWM7CgogCgoKCgp0eXBlZGVmIHN0cnVjdCBfRm9udEluZm8gewogICAgdW5zaWduZWQgc2hvcnQg Zmlyc3RDb2w7CiAgICB1bnNpZ25lZCBzaG9ydCBsYXN0Q29sOwogICAgdW5zaWduZWQgc2hvcnQg Zmlyc3RSb3c7CiAgICB1bnNpZ25lZCBzaG9ydCBsYXN0Um93OwogICAgdW5zaWduZWQgc2hvcnQg ZGVmYXVsdENoOwogICAgdW5zaWduZWQgaW50IG5vT3ZlcmxhcDoxOwogICAgdW5zaWduZWQgaW50 IHRlcm1pbmFsRm9udDoxOwogICAgdW5zaWduZWQgaW50IGNvbnN0YW50TWV0cmljczoxOwogICAg dW5zaWduZWQgaW50IGNvbnN0YW50V2lkdGg6MTsKICAgIHVuc2lnbmVkIGludCBpbmtJbnNpZGU6 MTsKICAgIHVuc2lnbmVkIGludCBpbmtNZXRyaWNzOjE7CiAgICB1bnNpZ25lZCBpbnQgYWxsRXhp c3Q6MTsKICAgIHVuc2lnbmVkIGludCBkcmF3RGlyZWN0aW9uOjI7CiAgICB1bnNpZ25lZCBpbnQg Y2FjaGFibGU6MTsKICAgIHVuc2lnbmVkIGludCBhbmFtb3JwaGljOjE7CiAgICBzaG9ydCAgICAg ICBtYXhPdmVybGFwOwogICAgc2hvcnQgICAgICAgcGFkOwogICAgeENoYXJJbmZvICAgbWF4Ym91 bmRzOwogICAgeENoYXJJbmZvICAgbWluYm91bmRzOwogICAgeENoYXJJbmZvICAgaW5rX21heGJv dW5kczsKICAgIHhDaGFySW5mbyAgIGlua19taW5ib3VuZHM7CiAgICBzaG9ydCAgICAgICBmb250 QXNjZW50OwogICAgc2hvcnQgICAgICAgZm9udERlc2NlbnQ7CiAgICBpbnQgICAgICAgICBucHJv cHM7CiAgICBGb250UHJvcFB0ciBwcm9wczsKICAgIGNoYXIgICAgICAgKmlzU3RyaW5nUHJvcDsK fSAgICAgICAgICAgRm9udEluZm9SZWM7Cgp0eXBlZGVmIHN0cnVjdCBfRm9udCB7CiAgICBpbnQg ICAgICAgICByZWZjbnQ7CiAgICBGb250SW5mb1JlYyBpbmZvOwogICAgY2hhciAgICAgICAgYml0 OwogICAgY2hhciAgICAgICAgYnl0ZTsKICAgIGNoYXIgICAgICAgIGdseXBoOwogICAgY2hhciAg ICAgICAgc2NhbjsKICAgIGZzQml0bWFwRm9ybWF0IGZvcm1hdDsKICAgIGludCAgICAgICAgICgq Z2V0X2dseXBocykgKEZvbnRQdHIgICAgICAgICAgLAoJCQkgICAgICAgdW5zaWduZWQgbG9uZyAg ICAsCgkJCSAgICAgICB1bnNpZ25lZCBjaGFyICogICwKCQkJICAgICAgIEZvbnRFbmNvZGluZyAg ICAgLAoJCQkgICAgICAgdW5zaWduZWQgbG9uZyAqICAsCgkJCSAgICAgICBDaGFySW5mb1B0ciAq ICAgICk7CiAgICBpbnQgICAgICAgICAoKmdldF9tZXRyaWNzKSAoRm9udFB0ciAgICAgICAgICAs CgkJCQl1bnNpZ25lZCBsb25nICAgICwKCQkJCXVuc2lnbmVkIGNoYXIgKiAgLAoJCQkJRm9udEVu Y29kaW5nICAgICAsCgkJCQl1bnNpZ25lZCBsb25nICogICwKCQkJCXhDaGFySW5mbyAqKiAgICAg KTsKICAgIHZvaWQgICAgICAgICgqdW5sb2FkX2ZvbnQpIChGb250UHRyICAgICAgICAgICk7CiAg ICB2b2lkICAgICAgICAoKnVubG9hZF9nbHlwaHMpIChGb250UHRyICAgICAgICAgICk7CiAgICBG b250UGF0aEVsZW1lbnRQdHIgZnBlOwogICAgcG9pbnRlciAgICAgc3ZyUHJpdmF0ZTsKICAgIHBv aW50ZXIgICAgIGZvbnRQcml2YXRlOwogICAgcG9pbnRlciAgICAgZnBlUHJpdmF0ZTsKICAgIGlu dAkJbWF4UHJpdmF0ZTsKICAgIHBvaW50ZXIJKmRldlByaXZhdGVzOwp9ICAgICAgICAgICBGb250 UmVjOwoKCgoKCgoKCnR5cGVkZWYgc3RydWN0IF9Gb250TmFtZXMgewogICAgaW50ICAgICAgICAg bm5hbWVzOwogICAgaW50ICAgICAgICAgc2l6ZTsKICAgIGludCAgICAgICAgKmxlbmd0aDsKICAg IGNoYXIgICAgICAqKm5hbWVzOwp9ICAgICAgICAgICBGb250TmFtZXNSZWM7CgogCnR5cGVkZWYg c3RydWN0IF9Gb250UGF0aEVsZW1lbnQgewogICAgaW50ICAgICAgICAgbmFtZV9sZW5ndGg7CiAg ICBjaGFyICAgICAgICpuYW1lOwogICAgaW50ICAgICAgICAgdHlwZTsKICAgIGludCAgICAgICAg IHJlZmNvdW50OwogICAgcG9pbnRlciAgICAgcHJpdmF0ZTsKfSAgICAgICAgICAgRm9udFBhdGhF bGVtZW50UmVjOwoKdHlwZWRlZiBCb29sICgqTmFtZUNoZWNrRnVuYykgKGNoYXIgKm5hbWUpOwp0 eXBlZGVmIGludCAoKkluaXRGcGVGdW5jKSAoRm9udFBhdGhFbGVtZW50UHRyIGZwZSk7CnR5cGVk ZWYgaW50ICgqRnJlZUZwZUZ1bmMpIChGb250UGF0aEVsZW1lbnRQdHIgZnBlKTsKdHlwZWRlZiBp bnQgKCpSZXNldEZwZUZ1bmMpIChGb250UGF0aEVsZW1lbnRQdHIgZnBlKTsKdHlwZWRlZiBpbnQg KCpPcGVuRm9udEZ1bmMpICggcG9pbnRlciBjbGllbnQsCgkJCSAgICAgIEZvbnRQYXRoRWxlbWVu dFB0ciBmcGUsCgkJCSAgICAgIE1hc2sgZmxhZ3MsCgkJCSAgICAgIGNoYXIqIG5hbWUsCgkJCSAg ICAgIGludCBuYW1lbGVuLAoJCQkgICAgICBmc0JpdG1hcEZvcm1hdCBmb3JtYXQsCgkJCSAgICAg IGZzQml0bWFwRm9ybWF0TWFzayBmbWFzaywKCQkJICAgICAgWElEIGlkLAoJCQkgICAgICBGb250 UHRyKiBwRm9udCwKCQkJICAgICAgY2hhcioqIGFsaWFzTmFtZSwKCQkJICAgICAgRm9udFB0ciBu b25fY2FjaGFibGVfZm9udCk7CnR5cGVkZWYgdm9pZCAoKkNsb3NlRm9udEZ1bmMpIChGb250UGF0 aEVsZW1lbnRQdHIgZnBlLCBGb250UHRyIHBGb250KTsKdHlwZWRlZiBpbnQgKCpMaXN0Rm9udHNG dW5jKSAocG9pbnRlciBjbGllbnQsCgkJCSAgICAgIEZvbnRQYXRoRWxlbWVudFB0ciBmcGUsCgkJ CSAgICAgIGNoYXIqIHBhdCwKCQkJICAgICAgaW50IGxlbiwKCQkJICAgICAgaW50IG1heCwKCQkJ ICAgICAgRm9udE5hbWVzUHRyIG5hbWVzKTsKCnR5cGVkZWYgaW50ICgqU3RhcnRMZndpRnVuYykg KHBvaW50ZXIgY2xpZW50LAoJCQkgICAgICBGb250UGF0aEVsZW1lbnRQdHIgZnBlLAoJCQkgICAg ICBjaGFyKiBwYXQsCgkJCSAgICAgIGludCBsZW4sCgkJCSAgICAgIGludCBtYXgsCgkJCSAgICAg IHBvaW50ZXIqIHByaXZhdGVwKTsKCnR5cGVkZWYgaW50ICgqTmV4dExmd2lGdW5jKSAocG9pbnRl ciBjbGllbnQsCgkJCSAgICAgRm9udFBhdGhFbGVtZW50UHRyIGZwZSwKCQkJICAgICBjaGFyKiog bmFtZSwKCQkJICAgICBpbnQqIG5hbWVsZW4sCgkJCSAgICAgRm9udEluZm9QdHIqIGluZm8sCgkJ CSAgICAgaW50KiBudW1Gb250cywKCQkJICAgICBwb2ludGVyIHByaXZhdGUpOwoKdHlwZWRlZiBp bnQgKCpXYWtldXBGcGVGdW5jKSAoRm9udFBhdGhFbGVtZW50UHRyIGZwZSwKCQkJICAgICAgdW5z aWduZWQgbG9uZyogTGFzdFNlbGVjdE1hc2spOwoKdHlwZWRlZiB2b2lkICgqQ2xpZW50RGllZEZ1 bmMpIChwb2ludGVyIGNsaWVudCwKCQkJICAgICAgIEZvbnRQYXRoRWxlbWVudFB0ciBmcGUpOwoK dHlwZWRlZiBpbnQgKCpMb2FkR2x5cGhzRnVuYykgKHBvaW50ZXIgY2xpZW50LAoJCQkgICAgICAg Rm9udFB0ciBwZm9udCwKCQkJICAgICAgIEJvb2wgcmFuZ2VfZmxhZywKCQkJICAgICAgIHVuc2ln bmVkIGludCBuY2hhcnMsCgkJCSAgICAgICBpbnQgaXRlbV9zaXplLAoJCQkgICAgICAgdW5zaWdu ZWQgY2hhciogZGF0YSk7Cgp0eXBlZGVmIGludCAoKlN0YXJ0TGFGdW5jKSAocG9pbnRlciBjbGll bnQsCgkJCSAgICBGb250UGF0aEVsZW1lbnRQdHIgZnBlLAoJCQkgICAgY2hhciogcGF0LAoJCQkg ICAgaW50IGxlbiwKCQkJICAgIGludCBtYXgsCgkJCSAgICBwb2ludGVyKiBwcml2YXRlcCk7Cgp0 eXBlZGVmIGludCAoKk5leHRMYUZ1bmMpIChwb2ludGVyIGNsaWVudCwKCQkJICAgRm9udFBhdGhF bGVtZW50UHRyIGZwZSwKCQkJICAgY2hhcioqIG5hbWVwLAoJCQkgICBpbnQqIG5hbWVsZW5wLAoJ CQkgICBjaGFyKiogcmVzb2x2ZWRwLAoJCQkgICBpbnQqIHJlc29sdmVkbGVucCwKCQkJICAgcG9p bnRlciBwcml2YXRlKTsKCnR5cGVkZWYgdm9pZCAoKlNldFBhdGhGdW5jKSh2b2lkKTsKCnR5cGVk ZWYgc3RydWN0IF9GUEVGdW5jdGlvbnMgewogICAgTmFtZUNoZWNrRnVuYyAgICAgICBuYW1lX2No ZWNrOwogICAgSW5pdEZwZUZ1bmMgCWluaXRfZnBlOwogICAgUmVzZXRGcGVGdW5jCXJlc2V0X2Zw ZTsKICAgIEZyZWVGcGVGdW5jICAgICAgICAgZnJlZV9mcGU7CiAgICBPcGVuRm9udEZ1bmMgICAg ICAgIG9wZW5fZm9udDsKICAgIENsb3NlRm9udEZ1bmMgICAgICAgY2xvc2VfZm9udDsKICAgIExp c3RGb250c0Z1bmMgICAgICAgbGlzdF9mb250czsKICAgIFN0YXJ0TGFGdW5jICAgICAgICAgc3Rh cnRfbGlzdF9mb250c19hbmRfYWxpYXNlczsKICAgIE5leHRMYUZ1bmMgICAgICAgICAgbGlzdF9u ZXh0X2ZvbnRfb3JfYWxpYXM7CiAgICBTdGFydExmd2lGdW5jICAgICAgIHN0YXJ0X2xpc3RfZm9u dHNfd2l0aF9pbmZvOwogICAgTmV4dExmd2lGdW5jICAgICAgICBsaXN0X25leHRfZm9udF93aXRo X2luZm87CiAgICBXYWtldXBGcGVGdW5jICAgICAgIHdha2V1cF9mcGU7CiAgICBDbGllbnREaWVk RnVuYyAJY2xpZW50X2RpZWQ7CgkJIAoKCgoKCgoKICAgIExvYWRHbHlwaHNGdW5jCWxvYWRfZ2x5 cGhzOwogICAgU2V0UGF0aEZ1bmMJCXNldF9wYXRoX2hvb2s7Cn0gRlBFRnVuY3Rpb25zUmVjLCBG UEVGdW5jdGlvbnM7CgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoK CiMgMSAiLi4vLi4vLi4vLi4vaW5jbHVkZS9mb250cy9mb250cHJvdG8uaCIgMQogCgogCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCiAKZXh0ZXJuIGludCBSZWdpc3RlckZQRUZ1bmN0aW9ucyAoIE5h bWVDaGVja0Z1bmMgbmFtZV9mdW5jLCAKCQkJCSAgSW5pdEZwZUZ1bmMgaW5pdF9mdW5jLCAKCQkJ CSAgRnJlZUZwZUZ1bmMgZnJlZV9mdW5jLCAKCQkJCSAgUmVzZXRGcGVGdW5jIHJlc2V0X2Z1bmMs IAoJCQkJICBPcGVuRm9udEZ1bmMgb3Blbl9mdW5jLCAKCQkJCSAgQ2xvc2VGb250RnVuYyBjbG9z ZV9mdW5jLCAKCQkJCSAgTGlzdEZvbnRzRnVuYyBsaXN0X2Z1bmMsIAoJCQkJICBTdGFydExmd2lG dW5jIHN0YXJ0X2xmd2lfZnVuYywgCgkJCQkgIE5leHRMZndpRnVuYyBuZXh0X2xmd2lfZnVuYywg CgkJCQkgIFdha2V1cEZwZUZ1bmMgd2FrZXVwX2Z1bmMsIAoJCQkJICBDbGllbnREaWVkRnVuYyBj bGllbnRfZGllZCwgCgkJCQkgIExvYWRHbHlwaHNGdW5jIGxvYWRfZ2x5cGhzLCAKCQkJCSAgU3Rh cnRMYUZ1bmMgc3RhcnRfbGlzdF9hbGlhc19mdW5jLCAKCQkJCSAgTmV4dExhRnVuYyBuZXh0X2xp c3RfYWxpYXNfZnVuYywgCgkJCQkgIFNldFBhdGhGdW5jIHNldF9wYXRoX2Z1bmMpOwoKZXh0ZXJu IGludCBHZXREZWZhdWx0UG9pbnRTaXplICggdm9pZCApOwoKZXh0ZXJuIGludCBpbml0X2ZzX2hh bmRsZXJzICggRm9udFBhdGhFbGVtZW50UHRyIGZwZSwgCgkJCSAgICAgIEJsb2NrSGFuZGxlclBy b2NQdHIgYmxvY2tfaGFuZGxlcik7CmV4dGVybiB2b2lkIHJlbW92ZV9mc19oYW5kbGVycyAoIEZv bnRQYXRoRWxlbWVudFB0ciBmcGUsIAoJCQkJIEJsb2NrSGFuZGxlclByb2NQdHIgYmxvY2tfaGFu ZGxlciwgCgkJCQkgQm9vbCBhbGwgKTsKCmV4dGVybiBpbnQgY2xpZW50X2F1dGhfZ2VuZXJhdGlv biAoIENsaWVudFB0ciBjbGllbnQgKTsKCgoKCgoKZXh0ZXJuIHZvaWQgRGVsZXRlRm9udENsaWVu dElEICggRm9udCBpZCApOwpleHRlcm4gRm9udCBHZXROZXdGb250Q2xpZW50SUQgKCB2b2lkICk7 CmV4dGVybiBpbnQgU3RvcmVGb250Q2xpZW50Rm9udCAoIEZvbnRQdHIgcGZvbnQsIEZvbnQgaWQg KTsKCmV4dGVybiBCb29sIFhwQ2xpZW50SXNCaXRtYXBDbGllbnQgKCBDbGllbnRQdHIgY2xpZW50 ICk7CmV4dGVybiBCb29sIFhwQ2xpZW50SXNQcmludENsaWVudCggQ2xpZW50UHRyIGNsaWVudCwg Rm9udFBhdGhFbGVtZW50UHRyIGZwZSApOwoKIApleHRlcm4gRm9udFB0ciAgQ3JlYXRlRm9udFJl YyAodm9pZCk7CmV4dGVybiB2b2lkICBEZXN0cm95Rm9udFJlYyAoRm9udFB0ciBmb250KTsKZXh0 ZXJuIEJvb2wgICAgIF9Gb250U2V0TmV3UHJpdmF0ZSAoRm9udFB0ciAgICAgICAgICwKCQkJCSAg ICBpbnQgICAgICAgICAgICAgLAoJCQkJICAgIHBvaW50ZXIgICAgICAgICApOwpleHRlcm4gaW50 ICAgICAgQWxsb2NhdGVGb250UHJpdmF0ZUluZGV4ICh2b2lkKTsKZXh0ZXJuIHZvaWQgUmVzZXRG b250UHJpdmF0ZUluZGV4ICh2b2lkKTsKCiAKZXh0ZXJuIHZvaWQgVHlwZTFSZWdpc3RlckZvbnRG aWxlRnVuY3Rpb25zKHZvaWQpOwpleHRlcm4gdm9pZCBDSURSZWdpc3RlckZvbnRGaWxlRnVuY3Rp b25zKHZvaWQpOwoKIApleHRlcm4gdm9pZCBTcGVlZG9SZWdpc3RlckZvbnRGaWxlRnVuY3Rpb25z KHZvaWQpOwoKIApleHRlcm4gdm9pZCBGcmVlVHlwZVJlZ2lzdGVyRm9udEZpbGVGdW5jdGlvbnMo dm9pZCk7CgoKIyAyOTMgIi4uLy4uLy4uLy4uL2luY2x1ZGUvZm9udHMvZm9udHN0cnVjdC5oIiAy CgoKCiMgMzIgIi4uLy4uL2luY2x1ZGUvZGl4Zm9udC5oIiAyCgoKCgp0eXBlZGVmIHN0cnVjdCBf RElYRm9udFByb3AgKkRJWEZvbnRQcm9wUHRyOwoKZXh0ZXJuIEZQRUZ1bmN0aW9ucyAqZnBlX2Z1 bmN0aW9uczsKCmV4dGVybiBpbnQgRm9udFRvWEVycm9yKGludCAgKTsKCmV4dGVybiBCb29sIFNl dERlZmF1bHRGb250KGNoYXIgKiAgKTsKCmV4dGVybiB2b2lkIFF1ZXVlRm9udFdha2V1cChGb250 UGF0aEVsZW1lbnRQdHIgICk7CgpleHRlcm4gdm9pZCBSZW1vdmVGb250V2FrZXVwKEZvbnRQYXRo RWxlbWVudFB0ciAgKTsKCmV4dGVybiB2b2lkIEZvbnRXYWtldXAocG9pbnRlciAgLAoJCSAgICAg ICBpbnQgICwKCQkgICAgICAgcG9pbnRlciAgKTsKCmV4dGVybiBpbnQgT3BlbkZvbnQoQ2xpZW50 UHRyICAsCgkJICAgIFhJRCAgLAoJCSAgICBNYXNrICAsCgkJICAgIHVuc2lnbmVkICAsCgkJICAg IGNoYXIgKiAgKTsKCmV4dGVybiBpbnQgQ2xvc2VGb250KHBvaW50ZXIgICwKCQkgICAgIFhJRCAg KTsKCnR5cGVkZWYgc3RydWN0IF94UXVlcnlGb250UmVwbHkgKnhRdWVyeUZvbnRSZXBseVB0cjsK CmV4dGVybiB2b2lkIFF1ZXJ5Rm9udChGb250UHRyICAsCgkJICAgICAgeFF1ZXJ5Rm9udFJlcGx5 UHRyICAsCgkJICAgICAgaW50ICApOwoKZXh0ZXJuIGludCBMaXN0Rm9udHMoQ2xpZW50UHRyICAs CgkJICAgICB1bnNpZ25lZCBjaGFyICogICwKCQkgICAgIHVuc2lnbmVkIGludCAgLAoJCSAgICAg dW5zaWduZWQgaW50ICApOwoKaW50CmRvTGlzdEZvbnRzV2l0aEluZm8oQ2xpZW50UHRyICAsCgkJ ICAgIExGV0ljbG9zdXJlUHRyICApOwoKZXh0ZXJuIGludCBkb1BvbHlUZXh0KENsaWVudFB0ciAg LAoJCSAgICAgIFBUY2xvc3VyZVB0ciAgCik7CgpleHRlcm4gaW50IFBvbHlUZXh0KENsaWVudFB0 ciAgLAoJCSAgICBEcmF3YWJsZVB0ciAgLAoJCSAgICBHQ1B0ciAgLAoJCSAgICB1bnNpZ25lZCBj aGFyICogICwKCQkgICAgdW5zaWduZWQgY2hhciAqICAsCgkJICAgIGludCAgLAoJCSAgICBpbnQg ICwKCQkgICAgaW50ICAsCgkJICAgIFhJRCAgKTsKCmV4dGVybiBpbnQgZG9JbWFnZVRleHQoQ2xp ZW50UHRyICAsCgkJICAgICAgIElUY2xvc3VyZVB0ciAgKTsKCmV4dGVybiBpbnQgSW1hZ2VUZXh0 KENsaWVudFB0ciAgLAoJCSAgICAgRHJhd2FibGVQdHIgICwKCQkgICAgIEdDUHRyICAsCgkJICAg ICBpbnQgICwKCQkgICAgIHVuc2lnbmVkIGNoYXIgKiAgLAoJCSAgICAgaW50ICAsCgkJICAgICBp bnQgICwKCQkgICAgIGludCAgLAoJCSAgICAgWElEICApOwoKZXh0ZXJuIGludCBTZXRGb250UGF0 aChDbGllbnRQdHIgICwKCQkgICAgICAgaW50ICAsCgkJICAgICAgIHVuc2lnbmVkIGNoYXIgKiAg LAoJCSAgICAgICBpbnQgKiAgKTsKCmV4dGVybiBpbnQgU2V0RGVmYXVsdEZvbnRQYXRoKGNoYXIg KiAgKTsKCmV4dGVybiB1bnNpZ25lZCBjaGFyICpHZXRGb250UGF0aChpbnQgKiAgLAoJCQkJICBp bnQgKiAgKTsKCmV4dGVybiBpbnQgTG9hZEdseXBocyhDbGllbnRQdHIgICwKCQkgICAgICBGb250 UHRyICAsCgkJICAgICAgdW5zaWduZWQgICwKCQkgICAgICBpbnQgICwKCQkgICAgICB1bnNpZ25l ZCBjaGFyICogICk7CgpleHRlcm4gdm9pZCBEZWxldGVDbGllbnRGb250U3R1ZmYoQ2xpZW50UHRy ICApOwoKZXh0ZXJuIHZvaWQgSW5pdEZvbnRzKHZvaWQpOwoKZXh0ZXJuIGludCBHZXREZWZhdWx0 UG9pbnRTaXplKHZvaWQpOwoKZXh0ZXJuIHZvaWQgRnJlZUZvbnRzKHZvaWQpOwoKZXh0ZXJuIEZv bnRQdHIgZmluZF9vbGRfZm9udChYSUQgICk7CgpleHRlcm4gRm9udCBHZXROZXdGb250Q2xpZW50 SUQodm9pZCk7CgpleHRlcm4gaW50IFN0b3JlRm9udENsaWVudEZvbnQoRm9udFB0ciAgLAoJCQkg ICAgICAgRm9udCAgKTsKCmV4dGVybiB2b2lkIERlbGV0ZUZvbnRDbGllbnRJRChGb250ICApOwoK CmV4dGVybiB2b2lkIEdldEdseXBocyhGb250UHRyICAgICAgLAoJCSAgICAgIHVuc2lnbmVkIGxv bmcgICwKCQkgICAgICB1bnNpZ25lZCBjaGFyICogICwKCQkgICAgICBGb250RW5jb2RpbmcgICwK CQkgICAgICB1bnNpZ25lZCBsb25nICogICwKCQkgICAgICBDaGFySW5mb1B0ciAqICApOwoKZXh0 ZXJuIHZvaWQgUXVlcnlHbHlwaEV4dGVudHMoRm9udFB0ciAgICAgICwKCQkJICAgICAgQ2hhcklu Zm9QdHIgKiAgLAoJCQkgICAgICB1bnNpZ25lZCBsb25nICAsCgkJCSAgICAgIEV4dGVudEluZm9Q dHIgICk7CgpleHRlcm4gQm9vbCBRdWVyeVRleHRFeHRlbnRzKEZvbnRQdHIgICAgICAsCgkJCSAg ICAgdW5zaWduZWQgbG9uZyAgLAoJCQkgICAgIHVuc2lnbmVkIGNoYXIgKiAgLAoJCQkgICAgIEV4 dGVudEluZm9QdHIgICk7CgpleHRlcm4gQm9vbCBQYXJzZUdseXBoQ2FjaGluZ01vZGUoY2hhciAq ICApOwoKZXh0ZXJuIHZvaWQgSW5pdEdseXBoQ2FjaGluZyh2b2lkKTsKCmV4dGVybiB2b2lkIFNl dEdseXBoQ2FjaGluZ01vZGUoaW50ICApOwoKZXh0ZXJuIHZvaWQKUmVzZXRGb250UHJpdmF0ZUlu ZGV4KHZvaWQpOwoKCiMgMjkgIi4uLy4uL2luY2x1ZGUvZGl4Zm9udHN0ci5oIiAyCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKIAoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgojIDMwICJzaGFkb3cuYyIgMgoKCiMgMSAiLi4vLi4vbWkvbWkuaCIgMQogCiAKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKdHlwZWRl ZiBzdHJ1Y3QgX21pRGFzaCAqbWlEYXNoUHRyOwoKCgogCgpleHRlcm4gdm9pZCBtaVBvbHlBcmMo CgogICAgRHJhd2FibGVQdHIgICwKICAgIEdDUHRyICAsCiAgICBpbnQgICwKICAgIHhBcmMgKiAg CgopOwoKIAoKZXh0ZXJuIFJlZ2lvblB0ciBtaUNvcHlBcmVhKAoKICAgIERyYXdhYmxlUHRyICAs CiAgICBEcmF3YWJsZVB0ciAgLAogICAgR0NQdHIgICwKICAgIGludCAgLAogICAgaW50ICAsCiAg ICBpbnQgICwKICAgIGludCAgLAogICAgaW50ICAsCiAgICBpbnQgIAoKKTsKCmV4dGVybiB2b2lk IG1pT3BxU3RpcERyYXdhYmxlKAoKICAgIERyYXdhYmxlUHRyICAsCiAgICBHQ1B0ciAgLAogICAg UmVnaW9uUHRyICAsCiAgICBDQVJEMzIgICogICwKICAgIGludCAgLAogICAgaW50ICAsCiAgICBp bnQgICwKICAgIGludCAgLAogICAgaW50ICAKCik7CgpleHRlcm4gUmVnaW9uUHRyIG1pQ29weVBs YW5lKAoKICAgIERyYXdhYmxlUHRyICAsCiAgICBEcmF3YWJsZVB0ciAgLAogICAgR0NQdHIgICwK ICAgIGludCAgLAogICAgaW50ICAsCiAgICBpbnQgICwKICAgIGludCAgLAogICAgaW50ICAsCiAg ICBpbnQgICwKICAgIHVuc2lnbmVkIGxvbmcgIAoKKTsKCmV4dGVybiB2b2lkIG1pR2V0SW1hZ2Uo CgogICAgRHJhd2FibGVQdHIgICwKICAgIGludCAgLAogICAgaW50ICAsCiAgICBpbnQgICwKICAg IGludCAgLAogICAgdW5zaWduZWQgaW50ICAsCiAgICB1bnNpZ25lZCBsb25nICAsCiAgICBjaGFy ICogIAoKKTsKCmV4dGVybiB2b2lkIG1pUHV0SW1hZ2UoCgogICAgRHJhd2FibGVQdHIgICwKICAg IEdDUHRyICAsCiAgICBpbnQgICwKICAgIGludCAgLAogICAgaW50ICAsCiAgICBpbnQgICwKICAg IGludCAgLAogICAgaW50ICAsCiAgICBpbnQgICwKICAgIGNoYXIgKiAgCgopOwoKIAoKZXh0ZXJu IHZvaWQgbWlDbGlwTm90aWZ5KAoKICAgIHZvaWQgKCogICkoCgoJV2luZG93UHRyICAsCglpbnQg ICwKCWludCAgCgoJKQoKKTsKCiAKCmV4dGVybiB2b2lkIG1pUmVjb2xvckN1cnNvcigKCiAgICBT Y3JlZW5QdHIgICwKICAgIEN1cnNvclB0ciAgLAogICAgQm9vbCAgCgopOwoKIAoKZXh0ZXJuIG1p RGFzaFB0ciBtaURhc2hMaW5lKAoKICAgIGludCAgLAogICAgRERYUG9pbnRQdHIgICwKICAgIHVu c2lnbmVkIGludCAgLAogICAgdW5zaWduZWQgY2hhciAqICAsCiAgICB1bnNpZ25lZCBpbnQgICwK ICAgIGludCAqICAKCik7CgpleHRlcm4gdm9pZCBtaVN0ZXBEYXNoKAoKICAgIGludCAgLAogICAg aW50ICogICwKICAgIHVuc2lnbmVkIGNoYXIgKiAgLAogICAgaW50ICAsCiAgICBpbnQgKiAgCgop OwoKIAoKCgoKCgpleHRlcm4gQm9vbCBtaWVxSW5pdCgKCiAgICBEZXZpY2VQdHIgICwKICAgIERl dmljZVB0ciAgCgopOwoKZXh0ZXJuIHZvaWQgbWllcUVucXVldWUoCgogICAgeEV2ZW50UHRyICAK Cik7CgpleHRlcm4gdm9pZCBtaWVxU3dpdGNoU2NyZWVuKAoKICAgIFNjcmVlblB0ciAgLAogICAg Qm9vbCAgCgopOwoKZXh0ZXJuIGludCBtaWVxUHJvY2Vzc0lucHV0RXZlbnRzKAoKICAgIHZvaWQK Cik7CgogCgpleHRlcm4gUmVnaW9uUHRyIG1pSGFuZGxlRXhwb3N1cmVzKAoKICAgIERyYXdhYmxl UHRyICAsCiAgICBEcmF3YWJsZVB0ciAgLAogICAgR0NQdHIgICwKICAgIGludCAgLAogICAgaW50 ICAsCiAgICBpbnQgICwKICAgIGludCAgLAogICAgaW50ICAsCiAgICBpbnQgICwKICAgIHVuc2ln bmVkIGxvbmcgIAoKKTsKCmV4dGVybiB2b2lkIG1pU2VuZEdyYXBoaWNzRXhwb3NlKAoKICAgIENs aWVudFB0ciAgLAogICAgUmVnaW9uUHRyICAsCiAgICBYSUQgICwKICAgIGludCAgLAogICAgaW50 ICAKCik7CgpleHRlcm4gdm9pZCBtaVNlbmRFeHBvc3VyZXMoCgogICAgV2luZG93UHRyICAsCiAg ICBSZWdpb25QdHIgICwKICAgIGludCAgLAogICAgaW50ICAKCik7CgpleHRlcm4gdm9pZCBtaVdp bmRvd0V4cG9zdXJlcygKCiAgICBXaW5kb3dQdHIgICwKICAgIFJlZ2lvblB0ciAgLAogICAgUmVn aW9uUHRyICAKCik7CgpleHRlcm4gdm9pZCBtaVBhaW50V2luZG93KAoKICAgIFdpbmRvd1B0ciAg LAogICAgUmVnaW9uUHRyICAsCiAgICBpbnQgIAoKKTsKCmV4dGVybiB2b2lkIG1pQ2xlYXJEcmF3 YWJsZSgKCiAgICBEcmF3YWJsZVB0ciAgLAogICAgR0NQdHIgIAoKKTsKCiAKCmV4dGVybiB2b2lk IG1pUG9seUZpbGxSZWN0KAoKICAgIERyYXdhYmxlUHRyICAsCiAgICBHQ1B0ciAgLAogICAgaW50 ICAsCiAgICB4UmVjdGFuZ2xlICogIAoKKTsKCiAKCmV4dGVybiB2b2lkIG1pUG9seUdseXBoQmx0 KAoKICAgIERyYXdhYmxlUHRyICAsCiAgICBHQ1B0ciAgLAogICAgaW50ICAsCiAgICBpbnQgICwK ICAgIHVuc2lnbmVkIGludCAgLAogICAgQ2hhckluZm9QdHIgKiAgLAogICAgcG9pbnRlciAgCgop OwoKZXh0ZXJuIHZvaWQgbWlJbWFnZUdseXBoQmx0KAoKICAgIERyYXdhYmxlUHRyICAsCiAgICBH Q1B0ciAgLAogICAgaW50ICAsCiAgICBpbnQgICwKICAgIHVuc2lnbmVkIGludCAgLAogICAgQ2hh ckluZm9QdHIgKiAgLAogICAgcG9pbnRlciAgCgopOwoKIAoKZXh0ZXJuIHZvaWQgbWlGaWxsUG9s eWdvbigKCiAgICBEcmF3YWJsZVB0ciAgLAogICAgR0NQdHIgICwKICAgIGludCAgLAogICAgaW50 ICAsCiAgICBpbnQgICwKICAgIEREWFBvaW50UHRyICAKCik7CgogCgpleHRlcm4gQm9vbCBtaUZp bGxDb252ZXhQb2x5KAoKICAgIERyYXdhYmxlUHRyICAsCiAgICBHQ1B0ciAgLAogICAgaW50ICAs CiAgICBERFhQb2ludFB0ciAgCgopOwoKIAoKZXh0ZXJuIEJvb2wgbWlGaWxsR2VuZXJhbFBvbHko CgogICAgRHJhd2FibGVQdHIgICwKICAgIEdDUHRyICAsCiAgICBpbnQgICwKICAgIEREWFBvaW50 UHRyICAKCik7CgogCgpleHRlcm4gdm9pZCBtaVBvbHlQb2ludCgKCiAgICBEcmF3YWJsZVB0ciAg LAogICAgR0NQdHIgICwKICAgIGludCAgLAogICAgaW50ICAsCiAgICB4UG9pbnQgKiAgCgopOwoK IAoKZXh0ZXJuIHZvaWQgbWlQb2x5UmVjdGFuZ2xlKAoKICAgIERyYXdhYmxlUHRyICAsCiAgICBH Q1B0ciAgLAogICAgaW50ICAsCiAgICB4UmVjdGFuZ2xlICogIAoKKTsKCiAKCmV4dGVybiB2b2lk IG1pUG9seVNlZ21lbnQoCgogICAgRHJhd2FibGVQdHIgICwKICAgIEdDUHRyICAsCiAgICBpbnQg ICwKICAgIHhTZWdtZW50ICogIAoKKTsKCiAKCmV4dGVybiBpbnQgbWlQb2x5VGV4dCgKCiAgICBE cmF3YWJsZVB0ciAgLAogICAgR0NQdHIgICwKICAgIGludCAgLAogICAgaW50ICAsCiAgICBpbnQg ICwKICAgIGNoYXIgKiAgLAogICAgRm9udEVuY29kaW5nICAKCik7CgpleHRlcm4gaW50IG1pUG9s eVRleHQ4KAoKICAgIERyYXdhYmxlUHRyICAsCiAgICBHQ1B0ciAgLAogICAgaW50ICAsCiAgICBp bnQgICwKICAgIGludCAgLAogICAgY2hhciAqICAKCik7CgpleHRlcm4gaW50IG1pUG9seVRleHQx NigKCiAgICBEcmF3YWJsZVB0ciAgLAogICAgR0NQdHIgICwKICAgIGludCAgLAogICAgaW50ICAs CiAgICBpbnQgICwKICAgIHVuc2lnbmVkIHNob3J0ICogIAoKKTsKCmV4dGVybiBpbnQgbWlJbWFn ZVRleHQoCgogICAgRHJhd2FibGVQdHIgICwKICAgIEdDUHRyICAsCiAgICBpbnQgICwKICAgIGlu dCAgLAogICAgaW50ICAsCiAgICBjaGFyICogICwKICAgIEZvbnRFbmNvZGluZyAgCgopOwoKZXh0 ZXJuIHZvaWQgbWlJbWFnZVRleHQ4KAoKICAgIERyYXdhYmxlUHRyICAsCiAgICBHQ1B0ciAgLAog ICAgaW50ICAsCiAgICBpbnQgICwKICAgIGludCAgLAogICAgY2hhciAqICAKCik7CgpleHRlcm4g dm9pZCBtaUltYWdlVGV4dDE2KAoKICAgIERyYXdhYmxlUHRyICAsCiAgICBHQ1B0ciAgLAogICAg aW50ICAsCiAgICBpbnQgICwKICAgIGludCAgLAogICAgdW5zaWduZWQgc2hvcnQgKiAgCgopOwoK IAoKZXh0ZXJuIHZvaWQgbWlQdXNoUGl4ZWxzKAoKICAgIEdDUHRyICAsCiAgICBQaXhtYXBQdHIg ICwKICAgIERyYXdhYmxlUHRyICAsCiAgICBpbnQgICwKICAgIGludCAgLAogICAgaW50ICAsCiAg ICBpbnQgIAoKKTsKCiAKCiAKCmV4dGVybiBCb29sIG1pUmVjdEFsbG9jKAoKICAgIFJlZ2lvblB0 ciAgLAogICAgaW50ICAKCik7CgpleHRlcm4gdm9pZCBtaVNldEV4dGVudHMoCgogICAgUmVnaW9u UHRyICAKCik7CgpleHRlcm4gaW50IG1pRmluZE1heEJhbmQoCgogICAgUmVnaW9uUHRyICAKCik7 CgoKCgoKCgoKCiAKCmV4dGVybiBCb29sIG1pTW9kaWZ5UGl4bWFwSGVhZGVyKAoKICAgIFBpeG1h cFB0ciAgLAogICAgaW50ICAsCiAgICBpbnQgICwKICAgIGludCAgLAogICAgaW50ICAsCiAgICBp bnQgICwKICAgIHBvaW50ZXIgIAoKKTsKCmV4dGVybiBCb29sIG1pQ2xvc2VTY3JlZW4oCgogICAg aW50ICAsCiAgICBTY3JlZW5QdHIgIAoKKTsKCmV4dGVybiBCb29sIG1pQ3JlYXRlU2NyZWVuUmVz b3VyY2VzKAoKICAgIFNjcmVlblB0ciAgCgopOwoKZXh0ZXJuIEJvb2wgbWlTY3JlZW5EZXZQcml2 YXRlSW5pdCgKCiAgICBTY3JlZW5QdHIgICwKICAgIGludCAgLAogICAgcG9pbnRlciAgCgopOwoK ZXh0ZXJuIEJvb2wgbWlTY3JlZW5Jbml0KAoKICAgIFNjcmVlblB0ciAgLAogICAgcG9pbnRlciAg LAogICAgaW50ICAsCiAgICBpbnQgICwKICAgIGludCAgLAogICAgaW50ICAsCiAgICBpbnQgICwK ICAgIGludCAgLAogICAgaW50ICAsCiAgICBEZXB0aFB0ciAgLAogICAgVmlzdWFsSUQgICwKICAg IGludCAgLAogICAgVmlzdWFsUHRyICAKCik7CgpleHRlcm4gaW50IG1pQWxsb2NhdGVHQ1ByaXZh dGVJbmRleCgKCiAgICB2b2lkCgopOwoKZXh0ZXJuIFBpeG1hcFB0ciBtaUdldFNjcmVlblBpeG1h cCgKCiAgICBTY3JlZW5QdHIgcFNjcmVlbgoKKTsKCmV4dGVybiB2b2lkIG1pU2V0U2NyZWVuUGl4 bWFwKAoKICAgIFBpeG1hcFB0ciBwUGl4CgopOwoKIAoKZXh0ZXJuIGludCBtaVNoYXBlZFdpbmRv d0luKAoKICAgIFNjcmVlblB0ciAgLAogICAgUmVnaW9uUHRyICAsCiAgICBSZWdpb25QdHIgICwK ICAgIEJveFB0ciAgLAogICAgaW50ICAsCiAgICBpbnQgIAoKKTsKCmV4dGVybiBpbnQgbWlWYWxp ZGF0ZVRyZWUoCgogICAgV2luZG93UHRyICAsCiAgICBXaW5kb3dQdHIgICwKICAgIFZUS2luZCAg CgopOwoKZXh0ZXJuIHZvaWQgbWlXaWRlTGluZSgKCiAgICBEcmF3YWJsZVB0ciAgLAogICAgR0NQ dHIgICwKICAgIGludCAgLAogICAgaW50ICAsCiAgICBERFhQb2ludFB0ciAgCgopOwoKZXh0ZXJu IHZvaWQgbWlXaWRlRGFzaCgKCiAgICBEcmF3YWJsZVB0ciAgLAogICAgR0NQdHIgICwKICAgIGlu dCAgLAogICAgaW50ICAsCiAgICBERFhQb2ludFB0ciAgCgopOwoKZXh0ZXJuIHZvaWQgbWlNaXRl cigKCiAgICB2b2lkCgopOwoKZXh0ZXJuIHZvaWQgbWlOb3RNaXRlcigKCiAgICB2b2lkCgopOwoK IAoKZXh0ZXJuIHZvaWQgbWlDbGVhclRvQmFja2dyb3VuZCgKCiAgICBXaW5kb3dQdHIgICwKICAg IGludCAgLAogICAgaW50ICAsCiAgICBpbnQgICwKICAgIGludCAgLAogICAgQm9vbCAgCgopOwoK ZXh0ZXJuIEJvb2wgbWlDaGFuZ2VTYXZlVW5kZXIoCgogICAgV2luZG93UHRyICAsCiAgICBXaW5k b3dQdHIgIAoKKTsKCmV4dGVybiB2b2lkIG1pUG9zdENoYW5nZVNhdmVVbmRlcigKCiAgICBXaW5k b3dQdHIgICwKICAgIFdpbmRvd1B0ciAgCgopOwoKZXh0ZXJuIHZvaWQgbWlNYXJrV2luZG93KAoK ICAgIFdpbmRvd1B0ciAgCgopOwoKZXh0ZXJuIEJvb2wgbWlNYXJrT3ZlcmxhcHBlZFdpbmRvd3Mo CgogICAgV2luZG93UHRyICAsCiAgICBXaW5kb3dQdHIgICwKICAgIFdpbmRvd1B0ciAqICAKCik7 CgpleHRlcm4gdm9pZCBtaUhhbmRsZVZhbGlkYXRlRXhwb3N1cmVzKAoKICAgIFdpbmRvd1B0ciAg CgopOwoKZXh0ZXJuIHZvaWQgbWlNb3ZlV2luZG93KAoKICAgIFdpbmRvd1B0ciAgLAogICAgaW50 ICAsCiAgICBpbnQgICwKICAgIFdpbmRvd1B0ciAgLAogICAgVlRLaW5kICAKCik7CgpleHRlcm4g dm9pZCBtaVNsaWRlQW5kU2l6ZVdpbmRvdygKCiAgICBXaW5kb3dQdHIgICwKICAgIGludCAgLAog ICAgaW50ICAsCiAgICB1bnNpZ25lZCBpbnQgICwKICAgIHVuc2lnbmVkIGludCAgLAogICAgV2lu ZG93UHRyICAKCik7CgpleHRlcm4gV2luZG93UHRyIG1pR2V0TGF5ZXJXaW5kb3coCgogICAgV2lu ZG93UHRyICAKCik7CgpleHRlcm4gdm9pZCBtaVNldFNoYXBlKAoKICAgIFdpbmRvd1B0ciAgCgop OwoKZXh0ZXJuIHZvaWQgbWlDaGFuZ2VCb3JkZXJXaWR0aCgKCiAgICBXaW5kb3dQdHIgICwKICAg IHVuc2lnbmVkIGludCAgCgopOwoKZXh0ZXJuIHZvaWQgbWlNYXJrVW5yZWFsaXplZFdpbmRvdygK CiAgICBXaW5kb3dQdHIgICwKICAgIFdpbmRvd1B0ciAgLAogICAgQm9vbCAgCgopOwoKZXh0ZXJu IHZvaWQgbWlTZWdyZWdhdGVDaGlsZHJlbihXaW5kb3dQdHIgcFdpbiwgUmVnaW9uUHRyIHBSZWcs IGludCBkZXB0aCk7CgogCgpleHRlcm4gdm9pZCBtaVplcm9Qb2x5QXJjKAoKICAgIERyYXdhYmxl UHRyICAsCiAgICBHQ1B0ciAgLAogICAgaW50ICAsCiAgICB4QXJjICogIAoKKTsKCiAKCmV4dGVy biB2b2lkIG1pWmVyb0xpbmUoCgogICAgRHJhd2FibGVQdHIgICwKICAgIEdDUHRyICAsCiAgICBp bnQgICwKICAgIGludCAgLAogICAgRERYUG9pbnRSZWMgKiAgCgopOwoKZXh0ZXJuIHZvaWQgbWla ZXJvRGFzaExpbmUoCgogICAgRHJhd2FibGVQdHIgICwKICAgIEdDUHRyICAsCiAgICBpbnQgICwK ICAgIGludCAgLAogICAgRERYUG9pbnRSZWMgKiAgCgopOwoKZXh0ZXJuIHZvaWQgbWlQb2x5Rmls bEFyYygKCiAgICBEcmF3YWJsZVB0ciAgLAogICAgR0NQdHIgICwKICAgIGludCAgLAogICAgeEFy YyAqICAKCik7CgoKIyAzMiAic2hhZG93LmMiIDIKCgoKIyAxICIuLi8uLi9pbmNsdWRlL2djc3Ry dWN0LmgiIDEKIAogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgog CgoKCgoKCgoKCgoKCiAKCgoKdHlwZWRlZiBzdHJ1Y3QgX0dDRnVuY3MgewogICAgdm9pZAkoKiBW YWxpZGF0ZUdDKSgKCgkJR0NQdHIgICwKCQl1bnNpZ25lZCBsb25nICAsCgkJRHJhd2FibGVQdHIg IAoKKTsKCiAgICB2b2lkCSgqIENoYW5nZUdDKSgKCgkJR0NQdHIgICwKCQl1bnNpZ25lZCBsb25n ICAKCik7CgogICAgdm9pZAkoKiBDb3B5R0MpKAoKCQlHQ1B0ciAgLAoJCXVuc2lnbmVkIGxvbmcg ICwKCQlHQ1B0ciAgCgopOwoKICAgIHZvaWQJKCogRGVzdHJveUdDKSgKCgkJR0NQdHIgIAoKKTsK CiAgICB2b2lkCSgqIENoYW5nZUNsaXApKAoKCQlHQ1B0ciAgLAoJCWludCAgLAoJCXBvaW50ZXIg ICwKCQlpbnQgIAoKKTsKCiAgICB2b2lkCSgqIERlc3Ryb3lDbGlwKSgKCgkJR0NQdHIgIAoKKTsK CiAgICB2b2lkCSgqIENvcHlDbGlwKSgKCgkJR0NQdHIgICwKCQlHQ1B0ciAgCgopOwogICAgRGV2 VW5pb24JZGV2UHJpdmF0ZTsKfSBHQ0Z1bmNzOwoKIAoKCgp0eXBlZGVmIHN0cnVjdCBfR0NPcHMg ewogICAgdm9pZAkoKiBGaWxsU3BhbnMpKAoKCQlEcmF3YWJsZVB0ciAgLAoJCUdDUHRyICAsCgkJ aW50ICAsCgkJRERYUG9pbnRQdHIgICwKCQlpbnQgKiAgLAoJCWludCAgCgopOwoKICAgIHZvaWQJ KCogU2V0U3BhbnMpKAoKCQlEcmF3YWJsZVB0ciAgLAoJCUdDUHRyICAsCgkJY2hhciAqICAsCgkJ RERYUG9pbnRQdHIgICwKCQlpbnQgKiAgLAoJCWludCAgLAoJCWludCAgCgopOwoKICAgIHZvaWQJ KCogUHV0SW1hZ2UpKAoKCQlEcmF3YWJsZVB0ciAgLAoJCUdDUHRyICAsCgkJaW50ICAsCgkJaW50 ICAsCgkJaW50ICAsCgkJaW50ICAsCgkJaW50ICAsCgkJaW50ICAsCgkJaW50ICAsCgkJY2hhciAq ICAKCik7CgogICAgUmVnaW9uUHRyCSgqIENvcHlBcmVhKSgKCgkJRHJhd2FibGVQdHIgICwKCQlE cmF3YWJsZVB0ciAgLAoJCUdDUHRyICAsCgkJaW50ICAsCgkJaW50ICAsCgkJaW50ICAsCgkJaW50 ICAsCgkJaW50ICAsCgkJaW50ICAKCik7CgogICAgUmVnaW9uUHRyCSgqIENvcHlQbGFuZSkoCgoJ CURyYXdhYmxlUHRyICAsCgkJRHJhd2FibGVQdHIgICwKCQlHQ1B0ciAgLAoJCWludCAgLAoJCWlu dCAgLAoJCWludCAgLAoJCWludCAgLAoJCWludCAgLAoJCWludCAgLAoJCXVuc2lnbmVkIGxvbmcg IAoKKTsKICAgIHZvaWQJKCogUG9seVBvaW50KSgKCgkJRHJhd2FibGVQdHIgICwKCQlHQ1B0ciAg LAoJCWludCAgLAoJCWludCAgLAoJCUREWFBvaW50UHRyICAKCik7CgogICAgdm9pZAkoKiBQb2x5 bGluZXMpKAoKCQlEcmF3YWJsZVB0ciAgLAoJCUdDUHRyICAsCgkJaW50ICAsCgkJaW50ICAsCgkJ RERYUG9pbnRQdHIgIAoKKTsKCiAgICB2b2lkCSgqIFBvbHlTZWdtZW50KSgKCgkJRHJhd2FibGVQ dHIgICwKCQlHQ1B0ciAgLAoJCWludCAgLAoJCXhTZWdtZW50ICogIAoKKTsKCiAgICB2b2lkCSgq IFBvbHlSZWN0YW5nbGUpKAoKCQlEcmF3YWJsZVB0ciAgLAoJCUdDUHRyICAsCgkJaW50ICAsCgkJ eFJlY3RhbmdsZSAqICAKCik7CgogICAgdm9pZAkoKiBQb2x5QXJjKSgKCgkJRHJhd2FibGVQdHIg ICwKCQlHQ1B0ciAgLAoJCWludCAgLAoJCXhBcmMgKiAgCgopOwoKICAgIHZvaWQJKCogRmlsbFBv bHlnb24pKAoKCQlEcmF3YWJsZVB0ciAgLAoJCUdDUHRyICAsCgkJaW50ICAsCgkJaW50ICAsCgkJ aW50ICAsCgkJRERYUG9pbnRQdHIgIAoKKTsKCiAgICB2b2lkCSgqIFBvbHlGaWxsUmVjdCkoCgoJ CURyYXdhYmxlUHRyICAsCgkJR0NQdHIgICwKCQlpbnQgICwKCQl4UmVjdGFuZ2xlICogIAoKKTsK CiAgICB2b2lkCSgqIFBvbHlGaWxsQXJjKSgKCgkJRHJhd2FibGVQdHIgICwKCQlHQ1B0ciAgLAoJ CWludCAgLAoJCXhBcmMgKiAgCgopOwoKICAgIGludAkJKCogUG9seVRleHQ4KSgKCgkJRHJhd2Fi bGVQdHIgICwKCQlHQ1B0ciAgLAoJCWludCAgLAoJCWludCAgLAoJCWludCAgLAoJCWNoYXIgKiAg CgopOwoKICAgIGludAkJKCogUG9seVRleHQxNikoCgoJCURyYXdhYmxlUHRyICAsCgkJR0NQdHIg ICwKCQlpbnQgICwKCQlpbnQgICwKCQlpbnQgICwKCQl1bnNpZ25lZCBzaG9ydCAqICAKCik7Cgog ICAgdm9pZAkoKiBJbWFnZVRleHQ4KSgKCgkJRHJhd2FibGVQdHIgICwKCQlHQ1B0ciAgLAoJCWlu dCAgLAoJCWludCAgLAoJCWludCAgLAoJCWNoYXIgKiAgCgopOwoKICAgIHZvaWQJKCogSW1hZ2VU ZXh0MTYpKAoKCQlEcmF3YWJsZVB0ciAgLAoJCUdDUHRyICAsCgkJaW50ICAsCgkJaW50ICAsCgkJ aW50ICAsCgkJdW5zaWduZWQgc2hvcnQgKiAgCgopOwoKICAgIHZvaWQJKCogSW1hZ2VHbHlwaEJs dCkoCgoJCURyYXdhYmxlUHRyICAsCgkJR0NQdHIgICwKCQlpbnQgICwKCQlpbnQgICwKCQl1bnNp Z25lZCBpbnQgICwKCQlDaGFySW5mb1B0ciAqICAsCgkJcG9pbnRlciAgCgopOwoKICAgIHZvaWQJ KCogUG9seUdseXBoQmx0KSgKCgkJRHJhd2FibGVQdHIgICwKCQlHQ1B0ciAgLAoJCWludCAgLAoJ CWludCAgLAoJCXVuc2lnbmVkIGludCAgLAoJCUNoYXJJbmZvUHRyICogICwKCQlwb2ludGVyICAK Cik7CgogICAgdm9pZAkoKiBQdXNoUGl4ZWxzKSgKCgkJR0NQdHIgICwKCQlQaXhtYXBQdHIgICwK CQlEcmF3YWJsZVB0ciAgLAoJCWludCAgLAoJCWludCAgLAoJCWludCAgLAoJCWludCAgCgopOwoK CgoKCiAgICBEZXZVbmlvbglkZXZQcml2YXRlOwp9IEdDT3BzOwoKIAoKCnR5cGVkZWYgc3RydWN0 IF9HQyB7CiAgICBTY3JlZW5QdHIJCXBTY3JlZW47CQkKICAgIHVuc2lnbmVkIGNoYXIJZGVwdGg7 ICAgIAogICAgdW5zaWduZWQgY2hhcglhbHU7CiAgICB1bnNpZ25lZCBzaG9ydAlsaW5lV2lkdGg7 ICAgICAgICAgIAogICAgdW5zaWduZWQgc2hvcnQJZGFzaE9mZnNldDsKICAgIHVuc2lnbmVkIHNo b3J0CW51bUluRGFzaExpc3Q7CiAgICB1bnNpZ25lZCBjaGFyCSpkYXNoOwogICAgdW5zaWduZWQg aW50CWxpbmVTdHlsZSA6IDI7CiAgICB1bnNpZ25lZCBpbnQJY2FwU3R5bGUgOiAyOwogICAgdW5z aWduZWQgaW50CWpvaW5TdHlsZSA6IDI7CiAgICB1bnNpZ25lZCBpbnQJZmlsbFN0eWxlIDogMjsK ICAgIHVuc2lnbmVkIGludAlmaWxsUnVsZSA6IDE7CiAgICB1bnNpZ25lZCBpbnQgCWFyY01vZGUg OiAxOwogICAgdW5zaWduZWQgaW50CXN1YldpbmRvd01vZGUgOiAxOwogICAgdW5zaWduZWQgaW50 CWdyYXBoaWNzRXhwb3N1cmVzIDogMTsKICAgIHVuc2lnbmVkIGludAljbGllbnRDbGlwVHlwZSA6 IDI7ICAKICAgIHVuc2lnbmVkIGludAltaVRyYW5zbGF0ZToxOyAgCiAgICB1bnNpZ25lZCBpbnQJ dGlsZUlzUGl4ZWw6MTsgIAogICAgdW5zaWduZWQgaW50CWZFeHBvc2U6MTsgICAgICAKICAgIHVu c2lnbmVkIGludAlmcmVlQ29tcENsaXA6MTsgICAKICAgIHVuc2lnbmVkIGludAl1bnVzZWQ6MTQ7 ICAKICAgIHVuc2lnbmVkIGxvbmcJcGxhbmVtYXNrOwogICAgdW5zaWduZWQgbG9uZwlmZ1BpeGVs OwogICAgdW5zaWduZWQgbG9uZwliZ1BpeGVsOwogICAgIAoKCgogICAgUGl4VW5pb24JCXRpbGU7 CiAgICBQaXhtYXBQdHIJCXN0aXBwbGU7CiAgICBERFhQb2ludFJlYwkJcGF0T3JnOwkJIAogICAg c3RydWN0IF9Gb250CSpmb250OwogICAgRERYUG9pbnRSZWMJCWNsaXBPcmc7CiAgICBERFhQb2lu dFJlYwkJbGFzdFdpbk9yZzsJIAogICAgcG9pbnRlcgkJY2xpZW50Q2xpcDsKICAgIHVuc2lnbmVk IGxvbmcJc3RhdGVDaGFuZ2VzOwkgCiAgICB1bnNpZ25lZCBsb25nICAgICAgIHNlcmlhbE51bWJl cjsKICAgIEdDRnVuY3MJCSpmdW5jczsKICAgIEdDT3BzCQkqb3BzOwogICAgRGV2VW5pb24JCSpk ZXZQcml2YXRlczsKICAgICAKCgoKCiAgICBQaXhtYXBQdHIJCXBSb3RhdGVkUGl4bWFwOyAgCiAg ICBSZWdpb25QdHIJCXBDb21wb3NpdGVDbGlwOwogICAgIAp9IEdDOwoKCiMgMzUgInNoYWRvdy5j IiAyCgojIDEgInNoYWRvdy5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxICIu Li8uLi9yZW5kZXIvcGljdHVyZXN0ci5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK IyAxICIuLi8uLi8uLi8uLi9pbmNsdWRlL2V4dGVuc2lvbnMvcmVuZGVycHJvdG8uaCIgMQogCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiLi4vLi4vLi4vLi4vaW5jbHVkZS9leHRlbnNp b25zL3JlbmRlci5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKdHlwZWRlZiB1bnNp Z25lZCBsb25nCUdseXBoOwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcJR2x5cGhTZXQ7CnR5cGVkZWYg dW5zaWduZWQgbG9uZwlQaWN0dXJlOwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcJUGljdEZvcm1hdDsK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAyOSAiLi4vLi4vLi4vLi4vaW5jbHVkZS9leHRlbnNp b25zL3JlbmRlcnByb3RvLmgiIDIKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgp0eXBlZGVmIHN0 cnVjdCB7CiAgICBDQVJEMTYgIHJlZCAgOwogICAgQ0FSRDE2ICByZWRNYXNrICA7CiAgICBDQVJE MTYgIGdyZWVuICA7CiAgICBDQVJEMTYgIGdyZWVuTWFzayAgOwogICAgQ0FSRDE2ICBibHVlICA7 CiAgICBDQVJEMTYgIGJsdWVNYXNrICA7CiAgICBDQVJEMTYgIGFscGhhICA7CiAgICBDQVJEMTYg IGFscGhhTWFzayAgOwp9IHhEaXJlY3RGb3JtYXQ7CgoKCnR5cGVkZWYgc3RydWN0IHsKICAgIENB UkQzMiAJaWQgIDsKICAgIENBUkQ4CXR5cGU7CiAgICBDQVJEOAlkZXB0aDsKICAgIENBUkQxNglw YWQxICA7CiAgICB4RGlyZWN0Rm9ybWF0ICAgZGlyZWN0OwogICAgQ0FSRDMyIAljb2xvcm1hcDsK fSB4UGljdEZvcm1JbmZvOwoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICBDQVJEMzIgCXZpc3VhbDsK ICAgIENBUkQzMiAJZm9ybWF0Owp9IHhQaWN0VmlzdWFsOwoKCgp0eXBlZGVmIHN0cnVjdCB7CiAg ICBDQVJEOAlkZXB0aDsKICAgIENBUkQ4CXBhZDE7CiAgICBDQVJEMTYJblBpY3RWaXN1YWxzICA7 CiAgICBDQVJEMzIJcGFkMiAgOwp9IHhQaWN0RGVwdGg7CgoKCnR5cGVkZWYgc3RydWN0IHsKICAg IENBUkQzMgluRGVwdGggIDsKICAgIENBUkQzMiAJZmFsbGJhY2sgIDsKfSB4UGljdFNjcmVlbjsK CgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgQ0FSRDMyCXBpeGVsICA7CiAgICBDQVJEMTYJcmVkICA7 CiAgICBDQVJEMTYJZ3JlZW4gIDsKICAgIENBUkQxNglibHVlICA7CiAgICBDQVJEMTYJYWxwaGEg IDsKfSB4SW5kZXhWYWx1ZTsKCgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgQ0FSRDE2CXJlZCAgOwog ICAgQ0FSRDE2CWdyZWVuICA7CiAgICBDQVJEMTYJYmx1ZSAgOwogICAgQ0FSRDE2CWFscGhhICA7 Cn0geFJlbmRlckNvbG9yOwoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICBJTlQzMiAJeCAgOwogICAg SU5UMzIgCXkgIDsKfSB4UG9pbnRGaXhlZDsKCgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgeFBvaW50 Rml4ZWQJcDEsIHAyLCBwMzsKfSB4VHJpYW5nbGU7CgoKCnR5cGVkZWYgc3RydWN0IHsKICAgIENB UkQxNiAgd2lkdGggIDsKICAgIENBUkQxNiAgaGVpZ2h0ICA7CiAgICBJTlQxNiAgIHggIDsKICAg IElOVDE2ICAgeSAgOwogICAgSU5UMTYgICB4T2ZmICA7CiAgICBJTlQxNiAgIHlPZmYgIDsKfSB4 R2x5cGhJbmZvOwoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICBDQVJEOCAgIGxlbjsKICAgIENBUkQ4 ICAgcGFkMTsKICAgIENBUkQxNiAgcGFkMjsKICAgIElOVDE2ICAgZGVsdGF4OwogICAgSU5UMTYg ICBkZWx0YXk7Cn0geEdseXBoRWx0OwoKCgogCgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgQ0FSRDgg ICByZXFUeXBlOwogICAgQ0FSRDggICByZW5kZXJSZXFUeXBlOwogICAgQ0FSRDE2ICBsZW5ndGgg IDsKICAgIENBUkQzMiAgbWFqb3JWZXJzaW9uICA7CiAgICBDQVJEMzIgIG1pbm9yVmVyc2lvbiAg Owp9IHhSZW5kZXJRdWVyeVZlcnNpb25SZXE7CgoKCnR5cGVkZWYgc3RydWN0IHsKICAgIEJZVEUg ICAgdHlwZTsgICAgCiAgICBCWVRFICAgIHBhZDE7CiAgICBDQVJEMTYgIHNlcXVlbmNlTnVtYmVy ICA7CiAgICBDQVJEMzIgIGxlbmd0aCAgOwogICAgQ0FSRDMyICBtYWpvclZlcnNpb24gIDsKICAg IENBUkQzMiAgbWlub3JWZXJzaW9uICA7CiAgICBDQVJEMzIgIHBhZDIgIDsKICAgIENBUkQzMiAg cGFkMyAgOwogICAgQ0FSRDMyICBwYWQ0ICA7CiAgICBDQVJEMzIgIHBhZDUgIDsKfSB4UmVuZGVy UXVlcnlWZXJzaW9uUmVwbHk7CgoKCnR5cGVkZWYgc3RydWN0IHsKICAgIENBUkQ4ICAgcmVxVHlw ZTsKICAgIENBUkQ4ICAgcmVuZGVyUmVxVHlwZTsKICAgIENBUkQxNiAgbGVuZ3RoICA7Cn0geFJl bmRlclF1ZXJ5UGljdEZvcm1hdHNSZXE7CgoKCnR5cGVkZWYgc3RydWN0IHsKICAgIEJZVEUgICAg dHlwZTsgICAgCiAgICBCWVRFICAgIHBhZDE7CiAgICBDQVJEMTYgIHNlcXVlbmNlTnVtYmVyICA7 CiAgICBDQVJEMzIgIGxlbmd0aCAgOwogICAgQ0FSRDMyICBudW1Gb3JtYXRzICA7CiAgICBDQVJE MzIgIG51bVNjcmVlbnMgIDsKICAgIENBUkQzMiAgbnVtRGVwdGhzICA7CiAgICBDQVJEMzIgIG51 bVZpc3VhbHMgIDsKICAgIENBUkQzMiAgcGFkNCAgOwogICAgQ0FSRDMyICBwYWQ1ICA7Cn0geFJl bmRlclF1ZXJ5UGljdEZvcm1hdHNSZXBseTsKCgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgQ0FSRDgg ICByZXFUeXBlOwogICAgQ0FSRDggICByZW5kZXJSZXFUeXBlOwogICAgQ0FSRDE2ICBsZW5ndGgg IDsKICAgIENBUkQzMiAJZm9ybWF0ICA7Cn0geFJlbmRlclF1ZXJ5UGljdEluZGV4VmFsdWVzUmVx OwoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICBCWVRFICAgIHR5cGU7ICAgIAogICAgQllURSAgICBw YWQxOwogICAgQ0FSRDE2ICBzZXF1ZW5jZU51bWJlciAgOwogICAgQ0FSRDMyICBsZW5ndGggIDsK ICAgIENBUkQzMiAgbnVtSW5kZXhWYWx1ZXM7CiAgICBDQVJEMzIgIHBhZDIgIDsKICAgIENBUkQz MiAgcGFkMyAgOwogICAgQ0FSRDMyICBwYWQ0ICA7CiAgICBDQVJEMzIgIHBhZDUgIDsKICAgIENB UkQzMiAgcGFkNiAgOwp9IHhSZW5kZXJRdWVyeVBpY3RJbmRleFZhbHVlc1JlcGx5OwoKCgp0eXBl ZGVmIHN0cnVjdCB7CiAgICBDQVJEOAlyZXFUeXBlOwogICAgQ0FSRDgJcmVuZGVyUmVxVHlwZTsK ICAgIENBUkQxNglsZW5ndGggIDsKICAgIENBUkQzMiAJcGlkICA7CiAgICBDQVJEMzIgCWRyYXdh YmxlICA7CiAgICBDQVJEMzIgCWZvcm1hdCAgOwogICAgQ0FSRDMyCW1hc2sgIDsKfSB4UmVuZGVy Q3JlYXRlUGljdHVyZVJlcTsKCgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgQ0FSRDgJcmVxVHlwZTsK ICAgIENBUkQ4CXJlbmRlclJlcVR5cGU7CiAgICBDQVJEMTYJbGVuZ3RoICA7CiAgICBDQVJEMzIg CXBpY3R1cmUgIDsKICAgIENBUkQzMgltYXNrICA7Cn0geFJlbmRlckNoYW5nZVBpY3R1cmVSZXE7 CgoKCnR5cGVkZWYgc3RydWN0IHsKICAgIENBUkQ4ICAgICAgIHJlcVR5cGU7CiAgICBDQVJEOCAg ICAgICByZW5kZXJSZXFUeXBlOwogICAgQ0FSRDE2ICAgICAgbGVuZ3RoICA7CiAgICBDQVJEMzIg ICAgICBwaWN0dXJlICA7CiAgICBJTlQxNgl4T3JpZ2luICA7CiAgICBJTlQxNgl5T3JpZ2luICA7 Cn0geFJlbmRlclNldFBpY3R1cmVDbGlwUmVjdGFuZ2xlc1JlcTsKCgoKdHlwZWRlZiBzdHJ1Y3Qg ewogICAgQ0FSRDggICAgICAgcmVxVHlwZTsKICAgIENBUkQ4ICAgICAgIHJlbmRlclJlcVR5cGU7 CiAgICBDQVJEMTYgICAgICBsZW5ndGggIDsKICAgIENBUkQzMiAgICAgIHBpY3R1cmUgIDsKfSB4 UmVuZGVyRnJlZVBpY3R1cmVSZXE7CgoKCnR5cGVkZWYgc3RydWN0IHsKICAgIENBUkQ4ICAgICAg IHJlcVR5cGU7CiAgICBDQVJEOCAgICAgICByZW5kZXJSZXFUeXBlOwogICAgQ0FSRDE2ICAgICAg bGVuZ3RoICA7CiAgICBDQVJEOAlvcDsKICAgIENBUkQ4CXBhZDE7CiAgICBDQVJEMTYJcGFkMiAg OwogICAgQ0FSRDMyIAlzcmMgIDsKICAgIENBUkQzMiAJbWFzayAgOwogICAgQ0FSRDMyIAlkc3Qg IDsKICAgIElOVDE2CXhTcmMgIDsKICAgIElOVDE2CXlTcmMgIDsKICAgIElOVDE2CXhNYXNrICA7 CiAgICBJTlQxNgl5TWFzayAgOwogICAgSU5UMTYJeERzdCAgOwogICAgSU5UMTYJeURzdCAgOwog ICAgQ0FSRDE2CXdpZHRoICA7CiAgICBDQVJEMTYJaGVpZ2h0ICA7Cn0geFJlbmRlckNvbXBvc2l0 ZVJlcTsKCgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgQ0FSRDggICAgICAgcmVxVHlwZTsKICAgIENB UkQ4ICAgICAgIHJlbmRlclJlcVR5cGU7CiAgICBDQVJEMTYgICAgICBsZW5ndGggIDsKICAgIENB UkQzMiAJc3JjICA7CiAgICBDQVJEMzIgCWRzdCAgOwogICAgQ0FSRDMyCWNvbG9yU2NhbGUgIDsK ICAgIENBUkQzMglhbHBoYVNjYWxlICA7CiAgICBJTlQxNgl4U3JjICA7CiAgICBJTlQxNgl5U3Jj ICA7CiAgICBJTlQxNgl4RHN0ICA7CiAgICBJTlQxNgl5RHN0ICA7CiAgICBDQVJEMTYJd2lkdGgg IDsKICAgIENBUkQxNgloZWlnaHQgIDsKfSB4UmVuZGVyU2NhbGVSZXE7CgoKCnR5cGVkZWYgc3Ry dWN0IHsKICAgIENBUkQ4ICAgICAgIHJlcVR5cGU7CiAgICBDQVJEOCAgICAgICByZW5kZXJSZXFU eXBlOwogICAgQ0FSRDE2ICAgICAgbGVuZ3RoICA7CiAgICBDQVJEMzIgCXNyYyAgOwogICAgQ0FS RDMyIAlkc3QgIDsKICAgIElOVDE2CXhTcmMgIDsKICAgIElOVDE2CXlTcmMgIDsKfSB4UmVuZGVy VHJpYW5nbGVzUmVxOwoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICBDQVJEOCAgICAgICByZXFUeXBl OwogICAgQ0FSRDggICAgICAgcmVuZGVyUmVxVHlwZTsKICAgIENBUkQxNiAgICAgIGxlbmd0aCAg OwogICAgQ0FSRDMyIAlnc2lkICA7CiAgICBDQVJEMzIgCWZvcm1hdCAgOwp9IHhSZW5kZXJDcmVh dGVHbHlwaFNldFJlcTsKCgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgQ0FSRDggICAgICAgcmVxVHlw ZTsKICAgIENBUkQ4ICAgICAgIHJlbmRlclJlcVR5cGU7CiAgICBDQVJEMTYgICAgICBsZW5ndGgg IDsKICAgIENBUkQzMiAgICAgZ3NpZCAgOwogICAgQ0FSRDMyICAgICBleGlzdGluZyAgOwp9IHhS ZW5kZXJSZWZlcmVuY2VHbHlwaFNldFJlcTsKCgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgQ0FSRDgg ICAgICAgcmVxVHlwZTsKICAgIENBUkQ4ICAgICAgIHJlbmRlclJlcVR5cGU7CiAgICBDQVJEMTYg ICAgICBsZW5ndGggIDsKICAgIENBUkQzMiAgICAgZ2x5cGhzZXQgIDsKfSB4UmVuZGVyRnJlZUds eXBoU2V0UmVxOwoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICBDQVJEOCAgICAgICByZXFUeXBlOwog ICAgQ0FSRDggICAgICAgcmVuZGVyUmVxVHlwZTsKICAgIENBUkQxNiAgICAgIGxlbmd0aCAgOwog ICAgQ0FSRDMyICAgICBnbHlwaHNldCAgOwogICAgQ0FSRDMyCW5nbHlwaHM7Cn0geFJlbmRlckFk ZEdseXBoc1JlcTsKCgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgQ0FSRDggICAgICAgcmVxVHlwZTsK ICAgIENBUkQ4ICAgICAgIHJlbmRlclJlcVR5cGU7CiAgICBDQVJEMTYgICAgICBsZW5ndGggIDsK ICAgIENBUkQzMiAgICAgZ2x5cGhzZXQgIDsKfSB4UmVuZGVyRnJlZUdseXBoc1JlcTsKCgoKdHlw ZWRlZiBzdHJ1Y3QgewogICAgQ0FSRDggICAgICAgcmVxVHlwZTsKICAgIENBUkQ4ICAgICAgIHJl bmRlclJlcVR5cGU7CiAgICBDQVJEMTYgICAgICBsZW5ndGggIDsKICAgIENBUkQ4CW9wOwogICAg Q0FSRDgJcGFkMTsKICAgIENBUkQxNglwYWQyICA7CiAgICBDQVJEMzIgCXNyYyAgOwogICAgQ0FS RDMyIAlkc3QgIDsKICAgIENBUkQzMiAJbWFza0Zvcm1hdCAgOwogICAgQ0FSRDMyICAgICBnbHlw aHNldCAgOwogICAgSU5UMTYJeFNyYyAgOwogICAgSU5UMTYJeVNyYyAgOwp9IHhSZW5kZXJDb21w b3NpdGVHbHlwaHNSZXEsIHhSZW5kZXJDb21wb3NpdGVHbHlwaHM4UmVxLCAKeFJlbmRlckNvbXBv c2l0ZUdseXBoczE2UmVxLCB4UmVuZGVyQ29tcG9zaXRlR2x5cGhzMzJSZXE7CgoKCgoKIAoKdHlw ZWRlZiBzdHJ1Y3QgewogICAgQ0FSRDgJcmVxVHlwZTsKICAgIENBUkQ4ICAgICAgIHJlbmRlclJl cVR5cGU7CiAgICBDQVJEMTYgICAgICBsZW5ndGggIDsKICAgIENBUkQ4CW9wOwogICAgQ0FSRDgJ cGFkMTsKICAgIENBUkQxNglwYWQyICA7CiAgICBDQVJEMzIgCWRzdCAgOwogICAgeFJlbmRlckNv bG9yICAgIGNvbG9yOwp9IHhSZW5kZXJGaWxsUmVjdGFuZ2xlc1JlcTsKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgojIDI5ICIuLi8uLi9yZW5kZXIvcGljdHVyZXN0ci5oIiAyCgojIDEgIi4uLy4uL3Jl bmRlci9waWN0dXJlLmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgp0eXBlZGVmIHN0 cnVjdCBfRGlyZWN0Rm9ybWF0CSpEaXJlY3RGb3JtYXRQdHI7CnR5cGVkZWYgc3RydWN0IF9QaWN0 Rm9ybWF0CSpQaWN0Rm9ybWF0UHRyOwp0eXBlZGVmIHN0cnVjdCBfUGljdHVyZQkJKlBpY3R1cmVQ dHI7CgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgogCgoKCiAKCgoKCgoKCgog CgoKCgoKCiAKCgoKCgoJCQkJICAgIAogCgoKCgoKCgoKCgoKIyAzMCAiLi4vLi4vcmVuZGVyL3Bp Y3R1cmVzdHIuaCIgMgoKIyAxICIuLi8uLi9yZW5kZXIvZ2x5cGhzdHIuaCIgMQogCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnR5cGVkZWYgc3RydWN0IF9HbHlwaCB7CiAgICBD QVJEMzIJcmVmY250OwogICAgQ0FSRDMyCXNpemU7CSAKICAgIHhHbHlwaEluZm8JaW5mbzsKICAg ICAKfSBHbHlwaFJlYywgKkdseXBoUHRyOwoKdHlwZWRlZiBzdHJ1Y3QgX0dseXBoUmVmIHsKICAg IENBUkQzMglzaWduYXR1cmU7CiAgICBHbHlwaFB0cglnbHlwaDsKfSBHbHlwaFJlZlJlYywgKkds eXBoUmVmUHRyOwoKCgp0eXBlZGVmIHN0cnVjdCBfR2x5cGhIYXNoU2V0IHsKICAgIENBUkQzMgll bnRyaWVzOwogICAgQ0FSRDMyCXNpemU7CiAgICBDQVJEMzIJcmVoYXNoOwp9IEdseXBoSGFzaFNl dFJlYywgKkdseXBoSGFzaFNldFB0cjsKCnR5cGVkZWYgc3RydWN0IF9HbHlwaEhhc2ggewogICAg R2x5cGhSZWZQdHIJICAgIHRhYmxlOwogICAgR2x5cGhIYXNoU2V0UHRyIGhhc2hTZXQ7CiAgICBD QVJEMzIJICAgIHRhYmxlRW50cmllczsKfSBHbHlwaEhhc2hSZWMsICpHbHlwaEhhc2hQdHI7Cgp0 eXBlZGVmIHN0cnVjdCBfR2x5cGhTZXQgewogICAgQ0FSRDMyCSAgICByZWZjbnQ7CiAgICBQaWN0 Rm9ybWF0UHRyICAgZm9ybWF0OwogICAgaW50CQkgICAgZmRlcHRoOwogICAgR2x5cGhIYXNoUmVj ICAgIGhhc2g7Cn0gR2x5cGhTZXRSZWMsICpHbHlwaFNldFB0cjsKCnR5cGVkZWYgc3RydWN0IF9H bHlwaExpc3QgewogICAgSU5UMTYJICAgIHhPZmY7CiAgICBJTlQxNgkgICAgeU9mZjsKICAgIENB UkQ4CSAgICBsZW47CiAgICBQaWN0Rm9ybWF0UHRyICAgZm9ybWF0Owp9IEdseXBoTGlzdFJlYywg KkdseXBoTGlzdFB0cjsKCmV4dGVybiBHbHlwaEhhc2hSZWMJZ2xvYmFsR2x5cGhzWzUgXTsKCkds eXBoSGFzaFNldFB0cgpGaW5kR2x5cGhIYXNoU2V0IChDQVJEMzIgZmlsbGVkKTsKCkJvb2wKR2x5 cGhJbml0IChTY3JlZW5QdHIgcFNjcmVlbik7CgpHbHlwaFJlZlB0cgpGaW5kR2x5cGhSZWYgKEds eXBoSGFzaFB0ciBoYXNoLCBDQVJEMzIgc2lnbmF0dXJlLCBCb29sIG1hdGNoLCBHbHlwaFB0ciBj b21wYXJlKTsKCkNBUkQzMgpIYXNoR2x5cGggKEdseXBoUHRyIGdseXBoKTsKCnZvaWQKRnJlZUds eXBoIChHbHlwaFB0ciBnbHlwaCwgaW50IGZvcm1hdCk7Cgp2b2lkCkFkZEdseXBoIChHbHlwaFNl dFB0ciBnbHlwaFNldCwgR2x5cGhQdHIgZ2x5cGgsIEdseXBoIGlkKTsKCkJvb2wKRGVsZXRlR2x5 cGggKEdseXBoU2V0UHRyIGdseXBoU2V0LCBHbHlwaCBpZCk7CgpHbHlwaFB0cgpGaW5kR2x5cGgg KEdseXBoU2V0UHRyIGdseXBoU2V0LCBHbHlwaCBpZCk7CgpHbHlwaFB0cgpBbGxvY2F0ZUdseXBo ICh4R2x5cGhJbmZvICpnaSwgaW50IGZvcm1hdCk7CgpCb29sCkFsbG9jYXRlR2x5cGhIYXNoIChH bHlwaEhhc2hQdHIgaGFzaCwgR2x5cGhIYXNoU2V0UHRyIGhhc2hTZXQpOwoKQm9vbApSZXNpemVH bHlwaEhhc2ggKEdseXBoSGFzaFB0ciBoYXNoLCBDQVJEMzIgY2hhbmdlLCBCb29sIGdsb2JhbCk7 CgpCb29sClJlc2l6ZUdseXBoU2V0IChHbHlwaFNldFB0ciBnbHlwaFNldCwgQ0FSRDMyIGNoYW5n ZSk7CgpHbHlwaFNldFB0cgpBbGxvY2F0ZUdseXBoU2V0IChpbnQgZmRlcHRoLCBQaWN0Rm9ybWF0 UHRyIGZvcm1hdCk7CgppbnQKRnJlZUdseXBoU2V0IChwb2ludGVyICAgdmFsdWUsCgkgICAgICBY SUQgICAgICAgZ2lkKTsKCgoKCiMgMzEgIi4uLy4uL3JlbmRlci9waWN0dXJlc3RyLmgiIDIKCgoK dHlwZWRlZiBzdHJ1Y3QgX0RpcmVjdEZvcm1hdCB7CiAgICBDQVJEMTYJICAgIHJlZCwgcmVkTWFz azsKICAgIENBUkQxNgkgICAgZ3JlZW4sIGdyZWVuTWFzazsKICAgIENBUkQxNgkgICAgYmx1ZSwg Ymx1ZU1hc2s7CiAgICBDQVJEMTYJICAgIGFscGhhLCBhbHBoYU1hc2s7Cn0gRGlyZWN0Rm9ybWF0 UmVjOwoKdHlwZWRlZiBzdHJ1Y3QgX1BpY3RGb3JtYXQgewogICAgQ0FSRDMyCSAgICBpZDsKICAg IENBUkQzMgkgICAgZm9ybWF0OwkgICAgIAogICAgdW5zaWduZWQgY2hhciAgIHR5cGU7CiAgICB1 bnNpZ25lZCBjaGFyICAgZGVwdGg7CiAgICBEaXJlY3RGb3JtYXRSZWMgZGlyZWN0OwogICAgQ29s b3JtYXBQdHIJICAgIHBDb2xvcm1hcDsKfSBQaWN0Rm9ybWF0UmVjOwoKdHlwZWRlZiBzdHJ1Y3Qg X1BpY3R1cmUgewogICAgRHJhd2FibGVQdHIJICAgIHBEcmF3YWJsZTsKICAgIFBpY3RGb3JtYXRQ dHIgICBwRm9ybWF0OwogICAgQ0FSRDMyCSAgICBmb3JtYXQ7CSAgICAgCiAgICBpbnQJCSAgICBy ZWZjbnQ7CiAgICBDQVJEMzIJICAgIGlkOwogICAgUGljdHVyZVB0cgkgICAgcE5leHQ7CSAgICAg CiAgICAKICAgIHVuc2lnbmVkIGludCAgICByZXBlYXQgOiAxOwogICAgdW5zaWduZWQgaW50ICAg IGdyYXBoaWNzRXhwb3N1cmVzIDogMTsKICAgIHVuc2lnbmVkIGludCAgICBzdWJXaW5kb3dNb2Rl IDogMTsKICAgIHVuc2lnbmVkIGludCAgICBwb2x5RWRnZSA6IDE7CiAgICB1bnNpZ25lZCBpbnQg ICAgcG9seU1vZGUgOiAxOwogICAgdW5zaWduZWQgaW50ICAgIGZyZWVDb21wQ2xpcCA6IDE7CiAg ICB1bnNpZ25lZCBpbnQgICAgY2xpZW50Q2xpcFR5cGUgOiAyOwogICAgdW5zaWduZWQgaW50ICAg IGNvbXBvbmVudEFscGhhIDogMTsKICAgIHVuc2lnbmVkIGludCAgICB1bnVzZWQgOiAyMzsKCiAg ICBQaWN0dXJlUHRyCSAgICBhbHBoYU1hcDsKICAgIEREWFBvaW50UmVjCSAgICBhbHBoYU9yaWdp bjsKCiAgICBERFhQb2ludFJlYwkgICAgY2xpcE9yaWdpbjsKICAgIHBvaW50ZXIJICAgIGNsaWVu dENsaXA7CgogICAgQXRvbQkgICAgZGl0aGVyOwoKICAgIHVuc2lnbmVkIGxvbmcgICBzdGF0ZUNo YW5nZXM7CiAgICB1bnNpZ25lZCBsb25nICAgc2VyaWFsTnVtYmVyOwoKICAgIFJlZ2lvblB0cgkg ICAgcENvbXBvc2l0ZUNsaXA7CiAgICAKICAgIERldlVuaW9uCSAgICAqZGV2UHJpdmF0ZXM7Cn0g UGljdHVyZVJlYzsKCnR5cGVkZWYgaW50CSgqQ3JlYXRlUGljdHVyZVByb2NQdHIpCSAgICAoUGlj dHVyZVB0ciBwUGljdHVyZSk7CnR5cGVkZWYgdm9pZAkoKkRlc3Ryb3lQaWN0dXJlUHJvY1B0cikg ICAgKFBpY3R1cmVQdHIgcFBpY3R1cmUpOwp0eXBlZGVmIGludAkoKkNoYW5nZVBpY3R1cmVDbGlw UHJvY1B0cikgKFBpY3R1cmVQdHIJcFBpY3R1cmUsCgkJCQkJICAgICBpbnQJY2xpcFR5cGUsCgkJ CQkJICAgICBwb2ludGVyICAgIHZhbHVlLAoJCQkJCSAgICAgaW50CW4pOwp0eXBlZGVmIHZvaWQJ KCpEZXN0cm95UGljdHVyZUNsaXBQcm9jUHRyKShQaWN0dXJlUHRyCXBQaWN0dXJlKTsKICAgIAp0 eXBlZGVmIHZvaWQJKCpDaGFuZ2VQaWN0dXJlUHJvY1B0cikJICAgIChQaWN0dXJlUHRyIHBQaWN0 dXJlLAoJCQkJCSAgICAgTWFzawltYXNrKTsKdHlwZWRlZiB2b2lkCSgqVmFsaWRhdGVQaWN0dXJl UHJvY1B0cikgICAgKFBpY3R1cmVQdHIgcFBpY3R1cmUsCgkJCQkJICAgICBNYXNrICAgICAgIG1h c2spOwp0eXBlZGVmIHZvaWQJKCpDb21wb3NpdGVQcm9jUHRyKQkgICAgKENBUkQ4CW9wLAoJCQkJ CSAgICAgUGljdHVyZVB0ciBwU3JjLAoJCQkJCSAgICAgUGljdHVyZVB0ciBwTWFzaywKCQkJCQkg ICAgIFBpY3R1cmVQdHIgcERzdCwKCQkJCQkgICAgIElOVDE2CXhTcmMsCgkJCQkJICAgICBJTlQx Ngl5U3JjLAoJCQkJCSAgICAgSU5UMTYJeE1hc2ssCgkJCQkJICAgICBJTlQxNgl5TWFzaywKCQkJ CQkgICAgIElOVDE2CXhEc3QsCgkJCQkJICAgICBJTlQxNgl5RHN0LAoJCQkJCSAgICAgQ0FSRDE2 CXdpZHRoLAoJCQkJCSAgICAgQ0FSRDE2CWhlaWdodCk7Cgp0eXBlZGVmIHZvaWQJKCpHbHlwaHNQ cm9jUHRyKQkgICAgKENBUkQ4ICAgICAgb3AsCgkJCQkJICAgICBQaWN0dXJlUHRyIHBTcmMsCgkJ CQkJICAgICBQaWN0dXJlUHRyIHBEc3QsCgkJCQkJICAgICBQaWN0Rm9ybWF0UHRyICBtYXNrRm9y bWF0LAoJCQkJCSAgICAgSU5UMTYgICAgICB4U3JjLAoJCQkJCSAgICAgSU5UMTYgICAgICB5U3Jj LAoJCQkJCSAgICAgaW50CW5saXN0cywKCQkJCQkgICAgIEdseXBoTGlzdFB0ciAgIGxpc3RzLAoJ CQkJCSAgICAgR2x5cGhQdHIJKmdseXBocyk7Cgp0eXBlZGVmIHZvaWQJKCpDb21wb3NpdGVSZWN0 c1Byb2NQdHIpICAgIChDQVJEOAkgICAgb3AsCgkJCQkJICAgICBQaWN0dXJlUHRyCSAgICBwRHN0 LAoJCQkJCSAgICAgeFJlbmRlckNvbG9yICAgKmNvbG9yLAoJCQkJCSAgICAgaW50CSAgICBuUmVj dCwKCQkJCQkgICAgIHhSZWN0YW5nbGUJICAgICpyZWN0cyk7Cgp0eXBlZGVmIHN0cnVjdCBfUGlj dHVyZVNjcmVlbiB7CiAgICBpbnQJCQkJdG90YWxQaWN0dXJlU2l6ZTsKICAgIHVuc2lnbmVkIGlu dAkJKlBpY3R1cmVQcml2YXRlU2l6ZXM7CiAgICBpbnQJCQkJUGljdHVyZVByaXZhdGVMZW47Cgog ICAgUGljdEZvcm1hdFB0cgkJZm9ybWF0czsKICAgIFBpY3RGb3JtYXRQdHIJCWZhbGxiYWNrOwog ICAgaW50CQkJCW5mb3JtYXRzOwogICAgCiAgICBDcmVhdGVQaWN0dXJlUHJvY1B0cglDcmVhdGVQ aWN0dXJlOwogICAgRGVzdHJveVBpY3R1cmVQcm9jUHRyCURlc3Ryb3lQaWN0dXJlOwogICAgQ2hh bmdlUGljdHVyZUNsaXBQcm9jUHRyCUNoYW5nZVBpY3R1cmVDbGlwOwogICAgRGVzdHJveVBpY3R1 cmVDbGlwUHJvY1B0cglEZXN0cm95UGljdHVyZUNsaXA7CiAgICAKICAgIENoYW5nZVBpY3R1cmVQ cm9jUHRyCUNoYW5nZVBpY3R1cmU7CiAgICBWYWxpZGF0ZVBpY3R1cmVQcm9jUHRyCVZhbGlkYXRl UGljdHVyZTsKCiAgICBDb21wb3NpdGVQcm9jUHRyCQlDb21wb3NpdGU7CiAgICBHbHlwaHNQcm9j UHRyCQlHbHlwaHM7CiAgICBDb21wb3NpdGVSZWN0c1Byb2NQdHIJQ29tcG9zaXRlUmVjdHM7Cgog ICAgRGVzdHJveVdpbmRvd1Byb2NQdHIJRGVzdHJveVdpbmRvdzsKICAgIENsb3NlU2NyZWVuUHJv Y1B0cgkJQ2xvc2VTY3JlZW47Cgp9IFBpY3R1cmVTY3JlZW5SZWMsICpQaWN0dXJlU2NyZWVuUHRy OwoKZXh0ZXJuIGludAkJUGljdHVyZVNjcmVlblByaXZhdGVJbmRleDsKZXh0ZXJuIGludAkJUGlj dHVyZVdpbmRvd1ByaXZhdGVJbmRleDsKZXh0ZXJuIFJFU1RZUEUJCVBpY3R1cmVUeXBlOwpleHRl cm4gUkVTVFlQRQkJUGljdEZvcm1hdFR5cGU7CmV4dGVybiBSRVNUWVBFCQlHbHlwaFNldFR5cGU7 CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKQm9vbApQaWN0dXJlRGVzdHJveVdpbmRvdyAoV2luZG93 UHRyIHBXaW5kb3cpOwoKQm9vbApQaWN0dXJlQ2xvc2VTY3JlZW4gKGludCBJbmRleCwgU2NyZWVu UHRyIHBTY3JlZW4pOwoKUGljdEZvcm1hdFB0cgpQaWN0dXJlQ3JlYXRlRGVmYXVsdEZvcm1hdHMg KFNjcmVlblB0ciBwU2NyZWVuLCBpbnQgKm5mb3JtYXRwKTsKClBpY3RGb3JtYXRQdHIKUGljdHVy ZU1hdGNoVmlzdWFsIChTY3JlZW5QdHIgcFNjcmVlbiwgaW50IGRlcHRoLCBWaXN1YWxQdHIgcFZp c3VhbCk7CgpQaWN0Rm9ybWF0UHRyClBpY3R1cmVNYXRjaEZvcm1hdCAoU2NyZWVuUHRyIHBTY3Jl ZW4sIGludCBkZXB0aCwgQ0FSRDMyIGZvcm1hdCk7CiAgICAKQm9vbApQaWN0dXJlSW5pdCAoU2Ny ZWVuUHRyIHBTY3JlZW4sIFBpY3RGb3JtYXRQdHIgZm9ybWF0cywgaW50IG5mb3JtYXRzKTsKCnZv aWQKU2V0UGljdHVyZVRvRGVmYXVsdHMgKFBpY3R1cmVQdHIgcFBpY3R1cmUpOwogICAgClBpY3R1 cmVQdHIKQWxsb2NhdGVQaWN0dXJlIChTY3JlZW5QdHIgIHBTY3JlZW4pOwoKQm9vbAptaVBpY3R1 cmVJbml0IChTY3JlZW5QdHIgcFNjcmVlbiwgUGljdEZvcm1hdFB0ciBmb3JtYXRzLCBpbnQgbmZv cm1hdHMpOwoKClBpY3R1cmVQdHIKQ3JlYXRlUGljdHVyZSAoUGljdHVyZQkJcGlkLAoJICAgICAg IERyYXdhYmxlUHRyCXBEcmF3YWJsZSwKCSAgICAgICBQaWN0Rm9ybWF0UHRyCXBGb3JtYXQsCgkg ICAgICAgTWFzawkJbWFzaywKCSAgICAgICBYSUQJCSpsaXN0LAoJICAgICAgIENsaWVudFB0cglj bGllbnQsCgkgICAgICAgaW50CQkqZXJyb3IpOwoKaW50CkNoYW5nZVBpY3R1cmUgKFBpY3R1cmVQ dHIJcFBpY3R1cmUsCgkgICAgICAgTWFzawkJdm1hc2ssCgkgICAgICAgWElECQkqdmxpc3QsCgkg ICAgICAgRGV2VW5pb24JCSp1bGlzdCwKCSAgICAgICBDbGllbnRQdHIJY2xpZW50KTsKCmludApT ZXRQaWN0dXJlQ2xpcFJlY3RzIChQaWN0dXJlUHRyCXBQaWN0dXJlLAoJCSAgICAgaW50CXhPcmln aW4sCgkJICAgICBpbnQJeU9yaWdpbiwKCQkgICAgIGludAluUmVjdCwKCQkgICAgIHhSZWN0YW5n bGUJKnJlY3RzKTsKCnZvaWQKVmFsaWRhdGVQaWN0dXJlKFBpY3R1cmVQdHIgcFBpY3R1cmUpOwoK aW50CkZyZWVQaWN0dXJlIChwb2ludGVyCXBQaWN0dXJlLAoJICAgICBYSUQJcGlkKTsKCmludApG cmVlUGljdEZvcm1hdCAocG9pbnRlcglwUGljdEZvcm1hdCwKCQlYSUQgICAgIHBpZCk7Cgp2b2lk CkNvbXBvc2l0ZVBpY3R1cmUgKENBUkQ4CQlvcCwKCQkgIFBpY3R1cmVQdHIJcFNyYywKCQkgIFBp Y3R1cmVQdHIJcE1hc2ssCgkJICBQaWN0dXJlUHRyCXBEc3QsCgkJICBJTlQxNgkJeFNyYywKCQkg IElOVDE2CQl5U3JjLAoJCSAgSU5UMTYJCXhNYXNrLAoJCSAgSU5UMTYJCXlNYXNrLAoJCSAgSU5U MTYJCXhEc3QsCgkJICBJTlQxNgkJeURzdCwKCQkgIENBUkQxNgl3aWR0aCwKCQkgIENBUkQxNglo ZWlnaHQpOwoKdm9pZApDb21wb3NpdGVHbHlwaHMgKENBUkQ4CQlvcCwKCQkgUGljdHVyZVB0cglw U3JjLAoJCSBQaWN0dXJlUHRyCXBEc3QsCgkJIFBpY3RGb3JtYXRQdHIJbWFza0Zvcm1hdCwKCQkg SU5UMTYJCXhTcmMsCgkJIElOVDE2CQl5U3JjLAoJCSBpbnQJCW5saXN0LAoJCSBHbHlwaExpc3RQ dHIJbGlzdHMsCgkJIEdseXBoUHRyCSpnbHlwaHMpOwoKdm9pZApDb21wb3NpdGVSZWN0cyAoQ0FS RDgJCW9wLAoJCVBpY3R1cmVQdHIJcERzdCwKCQl4UmVuZGVyQ29sb3IJKmNvbG9yLAoJCWludAkJ blJlY3QsCgkJeFJlY3RhbmdsZSAgICAgICpyZWN0cyk7CgoKIyAyOSAic2hhZG93LmgiIDIKCgoK dHlwZWRlZiB2b2lkICgqU2hhZG93VXBkYXRlUHJvYykgKFNjcmVlblB0ciBwU2NyZWVuLCAKCQkJ CSAgUGl4bWFwUHRyIHBTaGFkb3csCgkJCQkgIFJlZ2lvblB0ciBkYW1hZ2UpOwoKCgoKCnR5cGVk ZWYgdm9pZCAqKCpTaGFkb3dXaW5kb3dQcm9jKSAoU2NyZWVuUHRyCXBTY3JlZW4sCgkJCQkgICBD QVJEMzIJcm93LAoJCQkJICAgQ0FSRDMyCW9mZnNldCwKCQkJCSAgIGludAkJbW9kZSwKCQkJCSAg IENBUkQzMgkqc2l6ZSk7Cgp0eXBlZGVmIHN0cnVjdCBfc2hhZG93U2NyUHJpdiB7CiAgICBQYWlu dFdpbmRvd0JhY2tncm91bmRQcm9jUHRyIFBhaW50V2luZG93QmFja2dyb3VuZDsKICAgIFBhaW50 V2luZG93Qm9yZGVyUHJvY1B0cglQYWludFdpbmRvd0JvcmRlcjsKICAgIENvcHlXaW5kb3dQcm9j UHRyCQlDb3B5V2luZG93OwogICAgQ2xvc2VTY3JlZW5Qcm9jUHRyCQlDbG9zZVNjcmVlbjsKICAg IENyZWF0ZUdDUHJvY1B0cgkJQ3JlYXRlR0M7CiAgICBHZXRJbWFnZVByb2NQdHIJCUdldEltYWdl OwoKICAgIENvbXBvc2l0ZVByb2NQdHIJCUNvbXBvc2l0ZTsKICAgIEdseXBoc1Byb2NQdHIJCUds eXBoczsKCiAgICBTaGFkb3dVcGRhdGVQcm9jCQl1cGRhdGU7CiAgICBTaGFkb3dXaW5kb3dQcm9j CQl3aW5kb3c7CiAgICBSZWdpb25SZWMJCQlkYW1hZ2U7Cn0gc2hhZG93U2NyUHJpdlJlYywgKnNo YWRvd1NjclByaXZQdHI7CgpleHRlcm4gaW50IHNoYWRvd1NjclByaXZhdGVJbmRleDsKCgoKCkJv b2wKc2hhZG93SW5pdCAoU2NyZWVuUHRyIHBTY3JlZW4sIFNoYWRvd1VwZGF0ZVByb2MgdXBkYXRl LCBTaGFkb3dXaW5kb3dQcm9jIHdpbmRvdyk7Cgp2b2lkICoKc2hhZG93QWxsb2MgKGludCB3aWR0 aCwgaW50IGhlaWdodCwgaW50IGJwcCk7Cgp2b2lkCnNoYWRvd1VwZGF0ZVBhY2tlZCAoU2NyZWVu UHRyIHBTY3JlZW4sCgkJICAgIFBpeG1hcFB0ciBwU2hhZG93LAoJCSAgICBSZWdpb25QdHIgZGFt YWdlKTsKCnZvaWQKc2hhZG93VXBkYXRlUGxhbmFyNCAoU2NyZWVuUHRyIHBTY3JlZW4sCgkJICAg ICBQaXhtYXBQdHIgcFNoYWRvdywKCQkgICAgIFJlZ2lvblB0ciBkYW1hZ2UpOwoKdm9pZApzaGFk b3dVcGRhdGVQbGFuYXI0eDggKFNjcmVlblB0ciBwU2NyZWVuLAoJCSAgICAgICBQaXhtYXBQdHIg cFNoYWRvdywKCQkgICAgICAgUmVnaW9uUHRyIGRhbWFnZSk7Cgp2b2lkCnNoYWRvd1VwZGF0ZVJv dGF0ZTggKFNjcmVlblB0ciBwU2NyZWVuLAoJCSAgICAgUGl4bWFwUHRyIHBTaGFkb3csCgkJICAg ICBSZWdpb25QdHIgZGFtYWdlKTsKCnZvaWQKc2hhZG93VXBkYXRlUm90YXRlMTYgKFNjcmVlblB0 ciBwU2NyZWVuLAoJCSAgICAgIFBpeG1hcFB0ciBwU2hhZG93LAoJCSAgICAgIFJlZ2lvblB0ciBk YW1hZ2UpOwoKdm9pZApzaGFkb3dVcGRhdGVSb3RhdGUzMiAoU2NyZWVuUHRyIHBTY3JlZW4sCgkJ ICAgICAgUGl4bWFwUHRyIHBTaGFkb3csCgkJICAgICAgUmVnaW9uUHRyIGRhbWFnZSk7CgoKIyAz NiAic2hhZG93LmMiIDIKCgoKCgp0eXBlZGVmIHN0cnVjdCBfc2hhZG93R0NQcml2IHsKICAgIEdD T3BzICAgKm9wczsKICAgIEdDRnVuY3MgKmZ1bmNzOwp9IHNoYWRvd0dDUHJpdlJlYywgKnNoYWRv d0dDUHJpdlB0cjsKCmludCBzaGFkb3dTY3JQcml2YXRlSW5kZXg7CmludCBzaGFkb3dHQ1ByaXZh dGVJbmRleDsKaW50IHNoYWRvd0dlbmVyYXRpb247CgoKCgoKCgoKCgoKCgpzdGF0aWMgdm9pZApz aGFkb3dSZWRpc3BsYXkgKFNjcmVlblB0ciBwU2NyZWVuKQp7CiAgICBzaGFkb3dTY3JQcml2UHRy ICAgIHBTY3JQcml2ID0gKChzaGFkb3dTY3JQcml2UHRyKSAoICBwU2NyZWVuICApLT5kZXZQcml2 YXRlc1tzaGFkb3dTY3JQcml2YXRlSW5kZXhdLnB0cikgIDsKICAgIFBpeG1hcFB0cglwU2hhZG93 ID0gKFBpeG1hcFB0cikgcFNjcmVlbi0+ZGV2UHJpdmF0ZTsKICAgIAogICAgaWYgKCEgKCggICAm cFNjclByaXYtPmRhbWFnZSAgKS0+ZGF0YSAmJiAhKCAgICZwU2NyUHJpdi0+ZGFtYWdlICApLT5k YXRhLT5udW1SZWN0cykgICkKICAgIHsKCW1pSW50ZXJzZWN0KCAgJnBTY3JQcml2LT5kYW1hZ2Ug LCAgICZwU2NyUHJpdi0+ZGFtYWdlICwgIAoJCQkgICZXaW5kb3dUYWJsZVtwU2NyZWVuLT5teU51 bV0tPmJvcmRlclNpemUgKSA7CgkoKnBTY3JQcml2LT51cGRhdGUpIChwU2NyZWVuLCBwU2hhZG93 LCAmcFNjclByaXYtPmRhbWFnZSk7Cgl7IHsgaWYgKCggICAgJnBTY3JQcml2LT5kYW1hZ2UgICkt PmRhdGEgJiYgKCAgICAmcFNjclByaXYtPmRhbWFnZSAgKS0+ZGF0YS0+c2l6ZSkgWGZyZWUoKHBv aW50ZXIpKCAoICAgICZwU2NyUHJpdi0+ZGFtYWdlICApLT5kYXRhICkpIDsgfSA7ICggICZwU2Ny UHJpdi0+ZGFtYWdlICktPmV4dGVudHMueDIgPSAoICAmcFNjclByaXYtPmRhbWFnZSApLT5leHRl bnRzLngxOyAoICAmcFNjclByaXYtPmRhbWFnZSApLT5leHRlbnRzLnkyID0gKCAgJnBTY3JQcml2 LT5kYW1hZ2UgKS0+ZXh0ZW50cy55MTsgKCAgJnBTY3JQcml2LT5kYW1hZ2UgKS0+ZGF0YSA9ICZt aUVtcHR5RGF0YTsgfSA7CiAgICB9Cn0KCnN0YXRpYyB2b2lkCnNoYWRvd0Jsb2NrSGFuZGxlciAo cG9pbnRlcglkYXRhLAoJCSAgICAgIE9TVGltZVB0ciBwVGltZW91dCwKCQkgICAgICBwb2ludGVy IHBSZWFkKQp7CiAgICBTY3JlZW5QdHIJcFNjcmVlbiA9IChTY3JlZW5QdHIpIGRhdGE7CgogICAg c2hhZG93UmVkaXNwbGF5IChwU2NyZWVuKTsKfQoKc3RhdGljIHZvaWQKc2hhZG93V2FrZXVwSGFu ZGxlciAocG9pbnRlciBkYXRhLCBpbnQgaSwgcG9pbnRlciBMYXN0U2VsZWN0TWFzaykKewp9Cgpz dGF0aWMgdm9pZApzaGFkb3dEYW1hZ2VSZWdpb24gKFdpbmRvd1B0ciBwV2luZG93LCBSZWdpb25Q dHIgcFJlZ2lvbikKewogICAgU2NyZWVuUHRyCXBTY3JlZW4gPSBwV2luZG93LT5kcmF3YWJsZS5w U2NyZWVuOwogICAgc2hhZG93U2NyUHJpdlB0ciAgICBwU2NyUHJpdiA9ICgoc2hhZG93U2NyUHJp dlB0cikgKCAgcFNjcmVlbiAgKS0+ZGV2UHJpdmF0ZXNbc2hhZG93U2NyUHJpdmF0ZUluZGV4XS5w dHIpICA7CgogICAgbWlVbmlvbiggICZwU2NyUHJpdi0+ZGFtYWdlICwgICAmcFNjclByaXYtPmRh bWFnZSAsICAgcFJlZ2lvbiApIDsKCgoKCn0KCnN0YXRpYyB2b2lkIApzaGFkb3dEYW1hZ2VCb3gg KFdpbmRvd1B0ciBwV2luZG93LCBCb3hQdHIgcEJveCkKewogICAgUmVnaW9uUmVjCXJlZ2lvbjsK CiAgICB7IGlmICggIHBCb3ggKSB7ICggICZyZWdpb24gKS0+ZXh0ZW50cyA9ICooICBwQm94ICk7 ICggICZyZWdpb24gKS0+ZGF0YSA9IChSZWdEYXRhUHRyKSgodm9pZCAqKTApIDsgfSBlbHNlIHsg KCAgJnJlZ2lvbiApLT5leHRlbnRzID0gbWlFbXB0eUJveDsgaWYgKCgoICAxICkgPiAxKSAmJiAo KCAgJnJlZ2lvbiApLT5kYXRhID0gKFJlZ0RhdGFQdHIpWGFsbG9jKCh1bnNpZ25lZCBsb25nKSgg KHNpemVvZihSZWdEYXRhUmVjKSArICgoICAgMSAgKSAqIHNpemVvZihCb3hSZWMpKSkgICkpICkp IHsgKCAgJnJlZ2lvbiApLT5kYXRhLT5zaXplID0gKCAgMSApOyAoICAmcmVnaW9uICktPmRhdGEt Pm51bVJlY3RzID0gMDsgfSBlbHNlICggICZyZWdpb24gKS0+ZGF0YSA9ICZtaUVtcHR5RGF0YTsg fSB9IDsKICAgIHNoYWRvd0RhbWFnZVJlZ2lvbiAocFdpbmRvdywgJnJlZ2lvbik7Cn0gICAgCgpz dGF0aWMgdm9pZApzaGFkb3dEYW1hZ2VSZWN0IChXaW5kb3dQdHIgcFdpbmRvdywgaW50IHgsIGlu dCB5LCBpbnQgdywgaW50IGgpCnsKICAgIEJveFJlYwlib3g7CgogICAgeCArPSBwV2luZG93LT5k cmF3YWJsZS54OwogICAgeSArPSBwV2luZG93LT5kcmF3YWJsZS55OwogICAgYm94LngxID0geDsK ICAgIGJveC54MiA9IHggKyB3OwogICAgYm94LnkxID0geTsKICAgIGJveC55MiA9IHkgKyBoOwog ICAgc2hhZG93RGFtYWdlQm94IChwV2luZG93LCAmYm94KTsgICAgCn0KCnN0YXRpYyB2b2lkIHNo YWRvd1ZhbGlkYXRlR0MoR0NQdHIsIHVuc2lnbmVkIGxvbmcsIERyYXdhYmxlUHRyKTsKc3RhdGlj IHZvaWQgc2hhZG93Q2hhbmdlR0MoR0NQdHIsIHVuc2lnbmVkIGxvbmcpOwpzdGF0aWMgdm9pZCBz aGFkb3dDb3B5R0MoR0NQdHIsIHVuc2lnbmVkIGxvbmcsIEdDUHRyKTsKc3RhdGljIHZvaWQgc2hh ZG93RGVzdHJveUdDKEdDUHRyKTsKc3RhdGljIHZvaWQgc2hhZG93Q2hhbmdlQ2xpcChHQ1B0ciwg aW50LCBwb2ludGVyLCBpbnQpOwpzdGF0aWMgdm9pZCBzaGFkb3dEZXN0cm95Q2xpcChHQ1B0cik7 CnN0YXRpYyB2b2lkIHNoYWRvd0NvcHlDbGlwKEdDUHRyLCBHQ1B0cik7CgpHQ0Z1bmNzIHNoYWRv d0dDRnVuY3MgPSB7CiAgICBzaGFkb3dWYWxpZGF0ZUdDLCBzaGFkb3dDaGFuZ2VHQywgc2hhZG93 Q29weUdDLCBzaGFkb3dEZXN0cm95R0MsCiAgICBzaGFkb3dDaGFuZ2VDbGlwLCBzaGFkb3dEZXN0 cm95Q2xpcCwgc2hhZG93Q29weUNsaXAKfTsKCmV4dGVybiBHQ09wcyBzaGFkb3dHQ09wczsKCnN0 YXRpYyBCb29sCnNoYWRvd0NyZWF0ZUdDKEdDUHRyIHBHQykKewogICAgU2NyZWVuUHRyIHBTY3Jl ZW4gPSBwR0MtPnBTY3JlZW47CiAgICBzaGFkb3dTY3JQcml2UHRyICAgIHBTY3JQcml2ID0gKChz aGFkb3dTY3JQcml2UHRyKSAoICBwU2NyZWVuICApLT5kZXZQcml2YXRlc1tzaGFkb3dTY3JQcml2 YXRlSW5kZXhdLnB0cikgIDsKICAgIHNoYWRvd0dDUHJpdlB0ciAgcEdDUHJpdiA9ICgoc2hhZG93 R0NQcml2UHRyKSAoICBwR0MgICktPmRldlByaXZhdGVzW3NoYWRvd0dDUHJpdmF0ZUluZGV4XS5w dHIpICA7CiAgICBCb29sIHJldDsKCiAgICB7ICAgcFNjcmVlbiAtPiAgQ3JlYXRlR0MgID0gIHBT Y3JQcml2IC0+ICBDcmVhdGVHQyA7IH0gOwogICAgaWYoKHJldCA9ICgqcFNjcmVlbi0+Q3JlYXRl R0MpIChwR0MpKSkgewoJcEdDUHJpdi0+b3BzID0gKCh2b2lkICopMCkgOwoJcEdDUHJpdi0+ZnVu Y3MgPSBwR0MtPmZ1bmNzOwoJcEdDLT5mdW5jcyA9ICZzaGFkb3dHQ0Z1bmNzOwogICAgfQogICAg eyAgcFNjclByaXYgLT4gIENyZWF0ZUdDICA9ICAgcFNjcmVlbiAtPiAgQ3JlYXRlR0MgOyAgIHBT Y3JlZW4gLT4gIENyZWF0ZUdDICA9ICAgc2hhZG93Q3JlYXRlR0MgOyB9IDsKCiAgICByZXR1cm4g cmV0Owp9CgoKCgoKCgoKCgoKCgoKCgoKCgoKc3RhdGljIHZvaWQKc2hhZG93VmFsaWRhdGVHQygK ICAgR0NQdHIgICAgICAgICBwR0MsCiAgIHVuc2lnbmVkIGxvbmcgY2hhbmdlcywKICAgRHJhd2Fi bGVQdHIgICBwRHJhdyAKKXsKICAgIHNoYWRvd0dDUHJpdlB0ciAgcEdDUHJpdiA9ICgoc2hhZG93 R0NQcml2UHRyKSAoICAgcEdDICAgKS0+ZGV2UHJpdmF0ZXNbc2hhZG93R0NQcml2YXRlSW5kZXhd LnB0cikgIDsgeyAgICBwR0MgIC0+ICBmdW5jcyAgPSAgcEdDUHJpdiAtPiAgZnVuY3MgOyB9IDsg aWYgKHBHQ1ByaXYtPm9wcykgeyAgICBwR0MgIC0+ICBvcHMgID0gIHBHQ1ByaXYgLT4gIG9wcyA7 IH0gIDsKICAgICgqcEdDLT5mdW5jcy0+VmFsaWRhdGVHQykocEdDLCBjaGFuZ2VzLCBwRHJhdyk7 CiAgICBpZihwRHJhdy0+dHlwZSA9PSAwICkKCXBHQ1ByaXYtPm9wcyA9IHBHQy0+b3BzOyAgIAog ICAgZWxzZSAKCXBHQ1ByaXYtPm9wcyA9ICgodm9pZCAqKTApIDsKICAgIHsgIHBHQ1ByaXYgLT4g IGZ1bmNzICA9ICAgIHBHQyAgLT4gIGZ1bmNzIDsgICAgcEdDICAtPiAgZnVuY3MgID0gICAmc2hh ZG93R0NGdW5jcyA7IH0gOyBpZiAocEdDUHJpdi0+b3BzKSB7ICBwR0NQcml2IC0+ICBvcHMgID0g ICAgcEdDICAtPiAgb3BzIDsgICAgcEdDICAtPiAgb3BzICA9ICAgJnNoYWRvd0dDT3BzIDsgfSAg Owp9CgpzdGF0aWMgdm9pZApzaGFkb3dEZXN0cm95R0MoR0NQdHIgcEdDKQp7CiAgICBzaGFkb3dH Q1ByaXZQdHIgIHBHQ1ByaXYgPSAoKHNoYWRvd0dDUHJpdlB0cikgKCAgIHBHQyAgICktPmRldlBy aXZhdGVzW3NoYWRvd0dDUHJpdmF0ZUluZGV4XS5wdHIpICA7IHsgICAgcEdDICAtPiAgZnVuY3Mg ID0gIHBHQ1ByaXYgLT4gIGZ1bmNzIDsgfSA7IGlmIChwR0NQcml2LT5vcHMpIHsgICAgcEdDICAt PiAgb3BzICA9ICBwR0NQcml2IC0+ICBvcHMgOyB9ICA7CiAgICAoKnBHQy0+ZnVuY3MtPkRlc3Ry b3lHQykocEdDKTsKICAgIHsgIHBHQ1ByaXYgLT4gIGZ1bmNzICA9ICAgIHBHQyAgLT4gIGZ1bmNz IDsgICAgcEdDICAtPiAgZnVuY3MgID0gICAmc2hhZG93R0NGdW5jcyA7IH0gOyBpZiAocEdDUHJp di0+b3BzKSB7ICBwR0NQcml2IC0+ICBvcHMgID0gICAgcEdDICAtPiAgb3BzIDsgICAgcEdDICAt PiAgb3BzICA9ICAgJnNoYWRvd0dDT3BzIDsgfSAgOwp9CgpzdGF0aWMgdm9pZApzaGFkb3dDaGFu Z2VHQyAoCiAgICBHQ1B0cgkgICAgcEdDLAogICAgdW5zaWduZWQgbG9uZyAgIG1hc2sKKXsKICAg IHNoYWRvd0dDUHJpdlB0ciAgcEdDUHJpdiA9ICgoc2hhZG93R0NQcml2UHRyKSAoICAgcEdDICAg KS0+ZGV2UHJpdmF0ZXNbc2hhZG93R0NQcml2YXRlSW5kZXhdLnB0cikgIDsgeyAgICBwR0MgIC0+ ICBmdW5jcyAgPSAgcEdDUHJpdiAtPiAgZnVuY3MgOyB9IDsgaWYgKHBHQ1ByaXYtPm9wcykgeyAg ICBwR0MgIC0+ICBvcHMgID0gIHBHQ1ByaXYgLT4gIG9wcyA7IH0gIDsKICAgICgqcEdDLT5mdW5j cy0+Q2hhbmdlR0MpIChwR0MsIG1hc2spOwogICAgeyAgcEdDUHJpdiAtPiAgZnVuY3MgID0gICAg cEdDICAtPiAgZnVuY3MgOyAgICBwR0MgIC0+ICBmdW5jcyAgPSAgICZzaGFkb3dHQ0Z1bmNzIDsg fSA7IGlmIChwR0NQcml2LT5vcHMpIHsgIHBHQ1ByaXYgLT4gIG9wcyAgPSAgICBwR0MgIC0+ICBv cHMgOyAgICBwR0MgIC0+ICBvcHMgID0gICAmc2hhZG93R0NPcHMgOyB9ICA7Cn0KCnN0YXRpYyB2 b2lkCnNoYWRvd0NvcHlHQyAoCiAgICBHQ1B0cgkgICAgcEdDU3JjLCAKICAgIHVuc2lnbmVkIGxv bmcgICBtYXNrLAogICAgR0NQdHIJICAgIHBHQ0RzdAopewogICAgc2hhZG93R0NQcml2UHRyICBw R0NQcml2ID0gKChzaGFkb3dHQ1ByaXZQdHIpICggICBwR0NEc3QgICApLT5kZXZQcml2YXRlc1tz aGFkb3dHQ1ByaXZhdGVJbmRleF0ucHRyKSAgOyB7ICAgIHBHQ0RzdCAgLT4gIGZ1bmNzICA9ICBw R0NQcml2IC0+ICBmdW5jcyA7IH0gOyBpZiAocEdDUHJpdi0+b3BzKSB7ICAgIHBHQ0RzdCAgLT4g IG9wcyAgPSAgcEdDUHJpdiAtPiAgb3BzIDsgfSAgOwogICAgKCpwR0NEc3QtPmZ1bmNzLT5Db3B5 R0MpIChwR0NTcmMsIG1hc2ssIHBHQ0RzdCk7CiAgICB7ICBwR0NQcml2IC0+ICBmdW5jcyAgPSAg ICBwR0NEc3QgIC0+ICBmdW5jcyA7ICAgIHBHQ0RzdCAgLT4gIGZ1bmNzICA9ICAgJnNoYWRvd0dD RnVuY3MgOyB9IDsgaWYgKHBHQ1ByaXYtPm9wcykgeyAgcEdDUHJpdiAtPiAgb3BzICA9ICAgIHBH Q0RzdCAgLT4gIG9wcyA7ICAgIHBHQ0RzdCAgLT4gIG9wcyAgPSAgICZzaGFkb3dHQ09wcyA7IH0g IDsKfQoKc3RhdGljIHZvaWQKc2hhZG93Q2hhbmdlQ2xpcCAoCiAgICBHQ1B0ciAgIHBHQywKICAg IGludAkJdHlwZSwKICAgIHBvaW50ZXIJcHZhbHVlLAogICAgaW50CQlucmVjdHMgCil7CiAgICBz aGFkb3dHQ1ByaXZQdHIgIHBHQ1ByaXYgPSAoKHNoYWRvd0dDUHJpdlB0cikgKCAgIHBHQyAgICkt PmRldlByaXZhdGVzW3NoYWRvd0dDUHJpdmF0ZUluZGV4XS5wdHIpICA7IHsgICAgcEdDICAtPiAg ZnVuY3MgID0gIHBHQ1ByaXYgLT4gIGZ1bmNzIDsgfSA7IGlmIChwR0NQcml2LT5vcHMpIHsgICAg cEdDICAtPiAgb3BzICA9ICBwR0NQcml2IC0+ICBvcHMgOyB9ICA7CiAgICAoKnBHQy0+ZnVuY3Mt PkNoYW5nZUNsaXApIChwR0MsIHR5cGUsIHB2YWx1ZSwgbnJlY3RzKTsKICAgIHsgIHBHQ1ByaXYg LT4gIGZ1bmNzICA9ICAgIHBHQyAgLT4gIGZ1bmNzIDsgICAgcEdDICAtPiAgZnVuY3MgID0gICAm c2hhZG93R0NGdW5jcyA7IH0gOyBpZiAocEdDUHJpdi0+b3BzKSB7ICBwR0NQcml2IC0+ICBvcHMg ID0gICAgcEdDICAtPiAgb3BzIDsgICAgcEdDICAtPiAgb3BzICA9ICAgJnNoYWRvd0dDT3BzIDsg fSAgOwp9CgpzdGF0aWMgdm9pZApzaGFkb3dDb3B5Q2xpcChHQ1B0ciBwZ2NEc3QsIEdDUHRyIHBn Y1NyYykKewogICAgc2hhZG93R0NQcml2UHRyICBwR0NQcml2ID0gKChzaGFkb3dHQ1ByaXZQdHIp ICggICBwZ2NEc3QgICApLT5kZXZQcml2YXRlc1tzaGFkb3dHQ1ByaXZhdGVJbmRleF0ucHRyKSAg OyB7ICAgIHBnY0RzdCAgLT4gIGZ1bmNzICA9ICBwR0NQcml2IC0+ICBmdW5jcyA7IH0gOyBpZiAo cEdDUHJpdi0+b3BzKSB7ICAgIHBnY0RzdCAgLT4gIG9wcyAgPSAgcEdDUHJpdiAtPiAgb3BzIDsg fSAgOwogICAgKCogcGdjRHN0LT5mdW5jcy0+Q29weUNsaXApKHBnY0RzdCwgcGdjU3JjKTsKICAg IHsgIHBHQ1ByaXYgLT4gIGZ1bmNzICA9ICAgIHBnY0RzdCAgLT4gIGZ1bmNzIDsgICAgcGdjRHN0 ICAtPiAgZnVuY3MgID0gICAmc2hhZG93R0NGdW5jcyA7IH0gOyBpZiAocEdDUHJpdi0+b3BzKSB7 ICBwR0NQcml2IC0+ICBvcHMgID0gICAgcGdjRHN0ICAtPiAgb3BzIDsgICAgcGdjRHN0ICAtPiAg b3BzICA9ICAgJnNoYWRvd0dDT3BzIDsgfSAgOwp9CgpzdGF0aWMgdm9pZApzaGFkb3dEZXN0cm95 Q2xpcChHQ1B0ciBwR0MpCnsKICAgIHNoYWRvd0dDUHJpdlB0ciAgcEdDUHJpdiA9ICgoc2hhZG93 R0NQcml2UHRyKSAoICAgcEdDICAgKS0+ZGV2UHJpdmF0ZXNbc2hhZG93R0NQcml2YXRlSW5kZXhd LnB0cikgIDsgeyAgICBwR0MgIC0+ICBmdW5jcyAgPSAgcEdDUHJpdiAtPiAgZnVuY3MgOyB9IDsg aWYgKHBHQ1ByaXYtPm9wcykgeyAgICBwR0MgIC0+ICBvcHMgID0gIHBHQ1ByaXYgLT4gIG9wcyA7 IH0gIDsKICAgICgqIHBHQy0+ZnVuY3MtPkRlc3Ryb3lDbGlwKShwR0MpOwogICAgeyAgcEdDUHJp diAtPiAgZnVuY3MgID0gICAgcEdDICAtPiAgZnVuY3MgOyAgICBwR0MgIC0+ICBmdW5jcyAgPSAg ICZzaGFkb3dHQ0Z1bmNzIDsgfSA7IGlmIChwR0NQcml2LT5vcHMpIHsgIHBHQ1ByaXYgLT4gIG9w cyAgPSAgICBwR0MgIC0+ICBvcHMgOyAgICBwR0MgIC0+ICBvcHMgID0gICAmc2hhZG93R0NPcHMg OyB9ICA7Cn0KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnN0YXRpYyB2b2lkCnNoYWRvd0Nv bXBvc2l0ZSAoQ0FSRDggICAgICBvcCwKCQkgICBQaWN0dXJlUHRyIHBTcmMsCgkJICAgUGljdHVy ZVB0ciBwTWFzaywKCQkgICBQaWN0dXJlUHRyIHBEc3QsCgkJICAgSU5UMTYgICAgICB4U3JjLAoJ CSAgIElOVDE2ICAgICAgeVNyYywKCQkgICBJTlQxNiAgICAgIHhNYXNrLAoJCSAgIElOVDE2ICAg ICAgeU1hc2ssCgkJICAgSU5UMTYgICAgICB4RHN0LAoJCSAgIElOVDE2ICAgICAgeURzdCwKCQkg ICBDQVJEMTYgICAgIHdpZHRoLAoJCSAgIENBUkQxNiAgICAgaGVpZ2h0KQp7CiAgICBTY3JlZW5Q dHIJCXBTY3JlZW4gPSBwRHN0LT5wRHJhd2FibGUtPnBTY3JlZW47CiAgICBQaWN0dXJlU2NyZWVu UHRyCXBzID0gKChQaWN0dXJlU2NyZWVuUHRyKSAoKCBwU2NyZWVuICktPmRldlByaXZhdGVzW1Bp Y3R1cmVTY3JlZW5Qcml2YXRlSW5kZXhdLnB0cikpIDsKICAgIHNoYWRvd1NjclByaXZQdHIgICAg cFNjclByaXYgPSAoKHNoYWRvd1NjclByaXZQdHIpICggIHBTY3JlZW4gICktPmRldlByaXZhdGVz W3NoYWRvd1NjclByaXZhdGVJbmRleF0ucHRyKSAgOwogICAgCiAgICB7ICAgcHMgLT4gIENvbXBv c2l0ZSAgPSAgcFNjclByaXYgLT4gIENvbXBvc2l0ZSA7IH0gOwogICAgKCpwcy0+Q29tcG9zaXRl KSAob3AsCgkJICAgICAgIHBTcmMsCgkJICAgICAgIHBNYXNrLAoJCSAgICAgICBwRHN0LAoJCSAg ICAgICB4U3JjLAoJCSAgICAgICB5U3JjLAoJCSAgICAgICB4TWFzaywKCQkgICAgICAgeU1hc2ss CgkJICAgICAgIHhEc3QsCgkJICAgICAgIHlEc3QsCgkJICAgICAgIHdpZHRoLAoJCSAgICAgICBo ZWlnaHQpOwogICAgeyAgcFNjclByaXYgLT4gIENvbXBvc2l0ZSAgPSAgIHBzIC0+ICBDb21wb3Np dGUgOyAgIHBzIC0+ICBDb21wb3NpdGUgID0gICBzaGFkb3dDb21wb3NpdGUgOyB9IDsKICAgIGlm IChwRHN0LT5wRHJhd2FibGUtPnR5cGUgPT0gMCApCglzaGFkb3dEYW1hZ2VSZWN0ICgoV2luZG93 UHRyKSBwRHN0LT5wRHJhd2FibGUsIHhEc3QsIHlEc3QsCgkJCSAgICB3aWR0aCwgaGVpZ2h0KTsK fQoKc3RhdGljIHZvaWQKc2hhZG93R2x5cGhzIChDQVJEOAkJb3AsCgkJUGljdHVyZVB0cglwU3Jj LAoJCVBpY3R1cmVQdHIJcERzdCwKCQlQaWN0Rm9ybWF0UHRyCW1hc2tGb3JtYXQsCgkJSU5UMTYJ CXhTcmMsCgkJSU5UMTYJCXlTcmMsCgkJaW50CQlubGlzdCwKCQlHbHlwaExpc3RQdHIJbGlzdCwK CQlHbHlwaFB0cgkqZ2x5cGhzKQp7CiAgICBTY3JlZW5QdHIJCXBTY3JlZW4gPSBwRHN0LT5wRHJh d2FibGUtPnBTY3JlZW47CiAgICBQaWN0dXJlU2NyZWVuUHRyCXBzID0gKChQaWN0dXJlU2NyZWVu UHRyKSAoKCBwU2NyZWVuICktPmRldlByaXZhdGVzW1BpY3R1cmVTY3JlZW5Qcml2YXRlSW5kZXhd LnB0cikpIDsKICAgIHNoYWRvd1NjclByaXZQdHIgICAgcFNjclByaXYgPSAoKHNoYWRvd1NjclBy aXZQdHIpICggIHBTY3JlZW4gICktPmRldlByaXZhdGVzW3NoYWRvd1NjclByaXZhdGVJbmRleF0u cHRyKSAgOwogICAgaW50CQkJeCwgeTsKICAgIGludAkJCW47CiAgICBHbHlwaFB0cgkJZ2x5cGg7 CgogICAgeyAgIHBzIC0+ICBHbHlwaHMgID0gIHBTY3JQcml2IC0+ICBHbHlwaHMgOyB9IDsKICAg ICgqcHMtPkdseXBocykgKG9wLCBwU3JjLCBwRHN0LCBtYXNrRm9ybWF0LCB4U3JjLCB5U3JjLCBu bGlzdCwgbGlzdCwgZ2x5cGhzKTsKICAgIHsgIHBTY3JQcml2IC0+ICBHbHlwaHMgID0gICBwcyAt PiAgR2x5cGhzIDsgICBwcyAtPiAgR2x5cGhzICA9ICAgc2hhZG93R2x5cGhzIDsgfSA7CiAgICBp ZiAocERzdC0+cERyYXdhYmxlLT50eXBlID09IDAgKQogICAgewoJeCA9IHhTcmM7Cgl5ID0geVNy YzsKCXdoaWxlIChubGlzdC0tKQoJewoJICAgIHggKz0gbGlzdC0+eE9mZjsKCSAgICB5ICs9IGxp c3QtPnlPZmY7CgkgICAgbiA9IGxpc3QtPmxlbjsKCSAgICB3aGlsZSAobi0tKQoJICAgIHsKCQln bHlwaCA9ICpnbHlwaHMrKzsKCQlzaGFkb3dEYW1hZ2VSZWN0ICgoV2luZG93UHRyKSBwRHN0LT5w RHJhd2FibGUsCgkJCQkgICAgeCAtIGdseXBoLT5pbmZvLngsCgkJCQkgICAgeSAtIGdseXBoLT5p bmZvLnksCgkJCQkgICAgZ2x5cGgtPmluZm8ud2lkdGgsCgkJCQkgICAgZ2x5cGgtPmluZm8uaGVp Z2h0KTsKCQl4ICs9IGdseXBoLT5pbmZvLnhPZmY7CgkJeSArPSBnbHlwaC0+aW5mby55T2ZmOwoJ ICAgIH0KCSAgICBsaXN0Kys7Cgl9CiAgICB9Cn0KCgogCgoKc3RhdGljIHZvaWQKc2hhZG93Rmls bFNwYW5zKAogICAgRHJhd2FibGVQdHIgcERyYXcsCiAgICBHQwkJKnBHQywKICAgIGludAkJbklu aXQsCQogICAgRERYUG9pbnRQdHIgcHB0SW5pdCwJCiAgICBpbnQgCSpwd2lkdGhJbml0LAkJCiAg ICBpbnQgCWZTb3J0ZWQgCil7CiAgICBzaGFkb3dHQ1ByaXZQdHIgIHBHQ1ByaXYgPSAoKHNoYWRv d0dDUHJpdlB0cikgKCAgIHBHQyAgICktPmRldlByaXZhdGVzW3NoYWRvd0dDUHJpdmF0ZUluZGV4 XS5wdHIpICA7IEdDRnVuY3MgKm9sZEZ1bmNzID0gIHBHQyAtPmZ1bmNzOyB7ICAgIHBHQyAgLT4g IGZ1bmNzICA9ICBwR0NQcml2IC0+ICBmdW5jcyA7IH0gOyB7ICAgIHBHQyAgLT4gIG9wcyAgPSAg cEdDUHJpdiAtPiAgb3BzIDsgfSA7IDsgICAgCgogICAgaWYoMSAgJiYgbkluaXQpIHsKCUREWFBv aW50UHRyIHBwdCA9IHBwdEluaXQ7CglpbnQgKnB3aWR0aCA9IHB3aWR0aEluaXQ7CglpbnQgaSA9 IG5Jbml0OwoJQm94UmVjIGJveDsKCglib3gueDEgPSBwcHQtPng7Cglib3gueDIgPSBib3gueDEg KyAqcHdpZHRoOwoJYm94LnkyID0gYm94LnkxID0gcHB0LT55OwoKCXdoaWxlKC0taSkgewoJICAg cHB0Kys7CgkgICBwd2lkdGhJbml0Kys7CgkgICBpZihib3gueDEgPiBwcHQtPngpIGJveC54MSA9 IHBwdC0+eDsKCSAgIGlmKGJveC54MiA8IChwcHQtPnggKyAqcHdpZHRoKSkgCgkJYm94LngyID0g cHB0LT54ICsgKnB3aWR0aDsKCSAgIGlmKGJveC55MSA+IHBwdC0+eSkgYm94LnkxID0gcHB0LT55 OwoJICAgZWxzZSBpZihib3gueTIgPCBwcHQtPnkpIGJveC55MiA9IHBwdC0+eTsKCX0KCglib3gu eTIrKzsKCgkoKnBHQy0+b3BzLT5GaWxsU3BhbnMpKHBEcmF3LCBwR0MsIG5Jbml0LCBwcHRJbml0 LCBwd2lkdGhJbml0LCBmU29ydGVkKTsKCgl7IHsgICBib3ggIC54MSArPSAgICAgcERyYXcgIC0+ eDsgICBib3ggIC54MiArPSAgICAgcERyYXcgIC0+eDsgICBib3ggIC55MSArPSAgICAgcERyYXcg IC0+eTsgICBib3ggIC55MiArPSAgICAgcERyYXcgIC0+eTsgfSA7IHsgQm94UHRyIGV4dGVudHMg PSAmICAgIHBHQyAgLT5wQ29tcG9zaXRlQ2xpcC0+ZXh0ZW50czsgaWYoICBib3ggIC54MSA8IGV4 dGVudHMtPngxKSAgIGJveCAgLngxID0gZXh0ZW50cy0+eDE7IGlmKCAgYm94ICAueDIgPiBleHRl bnRzLT54MikgICBib3ggIC54MiA9IGV4dGVudHMtPngyOyBpZiggIGJveCAgLnkxIDwgZXh0ZW50 cy0+eTEpICAgYm94ICAueTEgPSBleHRlbnRzLT55MTsgaWYoICBib3ggIC55MiA+IGV4dGVudHMt PnkyKSAgIGJveCAgLnkyID0gZXh0ZW50cy0+eTI7IH0gOyB9IDsKCWlmKCgoKCBib3ggLngyIC0g IGJveCAueDEpID4gMCkgJiYgKCggYm94IC55MiAtICBib3ggLnkxKSA+IDApKSApCgkgICBzaGFk b3dEYW1hZ2VCb3ggKChXaW5kb3dQdHIpIHBEcmF3LCAmYm94KTsKICAgIH0gZWxzZQoJKCpwR0Mt Pm9wcy0+RmlsbFNwYW5zKShwRHJhdywgcEdDLCBuSW5pdCwgcHB0SW5pdCwgcHdpZHRoSW5pdCwg ZlNvcnRlZCk7CgogICAgeyAgcEdDUHJpdiAtPiAgZnVuY3MgID0gICAgcEdDICAtPiAgZnVuY3Mg OyAgICBwR0MgIC0+ICBmdW5jcyAgPSAgIG9sZEZ1bmNzIDsgfSA7IHsgIHBHQ1ByaXYgLT4gIG9w cyAgPSAgICBwR0MgIC0+ICBvcHMgOyAgICBwR0MgIC0+ICBvcHMgID0gICAmc2hhZG93R0NPcHMg OyB9ICA7Cn0KCnN0YXRpYyB2b2lkCnNoYWRvd1NldFNwYW5zKAogICAgRHJhd2FibGVQdHIJCXBE cmF3LAogICAgR0NQdHIJCXBHQywKICAgIGNoYXIJCSpwY2hhcnNyYywKICAgIEREWFBvaW50UHRy IAlwcHRJbml0LAogICAgaW50CQkJKnB3aWR0aEluaXQsCiAgICBpbnQJCQluc3BhbnMsCiAgICBp bnQJCQlmU29ydGVkIAopewogICAgc2hhZG93R0NQcml2UHRyICBwR0NQcml2ID0gKChzaGFkb3dH Q1ByaXZQdHIpICggICBwR0MgICApLT5kZXZQcml2YXRlc1tzaGFkb3dHQ1ByaXZhdGVJbmRleF0u cHRyKSAgOyBHQ0Z1bmNzICpvbGRGdW5jcyA9ICBwR0MgLT5mdW5jczsgeyAgICBwR0MgIC0+ICBm dW5jcyAgPSAgcEdDUHJpdiAtPiAgZnVuY3MgOyB9IDsgeyAgICBwR0MgIC0+ICBvcHMgID0gIHBH Q1ByaXYgLT4gIG9wcyA7IH0gOyA7CgogICAgaWYoMSAgJiYgbnNwYW5zKSB7CglERFhQb2ludFB0 ciBwcHQgPSBwcHRJbml0OwoJaW50ICpwd2lkdGggPSBwd2lkdGhJbml0OwoJaW50IGkgPSBuc3Bh bnM7CglCb3hSZWMgYm94OwoKCWJveC54MSA9IHBwdC0+eDsKCWJveC54MiA9IGJveC54MSArICpw d2lkdGg7Cglib3gueTIgPSBib3gueTEgPSBwcHQtPnk7CgoJd2hpbGUoLS1pKSB7CgkgICBwcHQr KzsKCSAgIHB3aWR0aCsrOwoJICAgaWYoYm94LngxID4gcHB0LT54KSBib3gueDEgPSBwcHQtPng7 CgkgICBpZihib3gueDIgPCAocHB0LT54ICsgKnB3aWR0aCkpIAoJCWJveC54MiA9IHBwdC0+eCAr ICpwd2lkdGg7CgkgICBpZihib3gueTEgPiBwcHQtPnkpIGJveC55MSA9IHBwdC0+eTsKCSAgIGVs c2UgaWYoYm94LnkyIDwgcHB0LT55KSBib3gueTIgPSBwcHQtPnk7Cgl9CgoJYm94LnkyKys7CgoJ KCpwR0MtPm9wcy0+U2V0U3BhbnMpKHBEcmF3LCBwR0MsIHBjaGFyc3JjLCBwcHRJbml0LCAKCQkJ CXB3aWR0aEluaXQsIG5zcGFucywgZlNvcnRlZCk7CgoJeyB7ICAgYm94ICAueDEgKz0gICAgIHBE cmF3ICAtPng7ICAgYm94ICAueDIgKz0gICAgIHBEcmF3ICAtPng7ICAgYm94ICAueTEgKz0gICAg IHBEcmF3ICAtPnk7ICAgYm94ICAueTIgKz0gICAgIHBEcmF3ICAtPnk7IH0gOyB7IEJveFB0ciBl eHRlbnRzID0gJiAgICBwR0MgIC0+cENvbXBvc2l0ZUNsaXAtPmV4dGVudHM7IGlmKCAgYm94ICAu eDEgPCBleHRlbnRzLT54MSkgICBib3ggIC54MSA9IGV4dGVudHMtPngxOyBpZiggIGJveCAgLngy ID4gZXh0ZW50cy0+eDIpICAgYm94ICAueDIgPSBleHRlbnRzLT54MjsgaWYoICBib3ggIC55MSA8 IGV4dGVudHMtPnkxKSAgIGJveCAgLnkxID0gZXh0ZW50cy0+eTE7IGlmKCAgYm94ICAueTIgPiBl eHRlbnRzLT55MikgICBib3ggIC55MiA9IGV4dGVudHMtPnkyOyB9IDsgfSA7CglpZigoKCggYm94 IC54MiAtICBib3ggLngxKSA+IDApICYmICgoIGJveCAueTIgLSAgYm94IC55MSkgPiAwKSkgKQoJ ICAgc2hhZG93RGFtYWdlQm94ICgoV2luZG93UHRyKSBwRHJhdywgJmJveCk7CiAgICB9IGVsc2UK CSgqcEdDLT5vcHMtPlNldFNwYW5zKShwRHJhdywgcEdDLCBwY2hhcnNyYywgcHB0SW5pdCwgCgkJ CQlwd2lkdGhJbml0LCBuc3BhbnMsIGZTb3J0ZWQpOwoKICAgIHsgIHBHQ1ByaXYgLT4gIGZ1bmNz ICA9ICAgIHBHQyAgLT4gIGZ1bmNzIDsgICAgcEdDICAtPiAgZnVuY3MgID0gICBvbGRGdW5jcyA7 IH0gOyB7ICBwR0NQcml2IC0+ICBvcHMgID0gICAgcEdDICAtPiAgb3BzIDsgICAgcEdDICAtPiAg b3BzICA9ICAgJnNoYWRvd0dDT3BzIDsgfSAgOwp9CgpzdGF0aWMgdm9pZApzaGFkb3dQdXRJbWFn ZSgKICAgIERyYXdhYmxlUHRyIHBEcmF3LAogICAgR0NQdHIJcEdDLAogICAgaW50CQlkZXB0aCwg CiAgICBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCwKICAgIGludAkJbGVmdFBhZCwKICAgIGlu dAkJZm9ybWF0LAogICAgY2hhciAJKnBJbWFnZSAKKXsKICAgIHNoYWRvd0dDUHJpdlB0ciAgcEdD UHJpdiA9ICgoc2hhZG93R0NQcml2UHRyKSAoICAgcEdDICAgKS0+ZGV2UHJpdmF0ZXNbc2hhZG93 R0NQcml2YXRlSW5kZXhdLnB0cikgIDsgR0NGdW5jcyAqb2xkRnVuY3MgPSAgcEdDIC0+ZnVuY3M7 IHsgICAgcEdDICAtPiAgZnVuY3MgID0gIHBHQ1ByaXYgLT4gIGZ1bmNzIDsgfSA7IHsgICAgcEdD ICAtPiAgb3BzICA9ICBwR0NQcml2IC0+ICBvcHMgOyB9IDsgOwogICAgKCpwR0MtPm9wcy0+UHV0 SW1hZ2UpKHBEcmF3LCBwR0MsIGRlcHRoLCB4LCB5LCB3LCBoLCAKCQlsZWZ0UGFkLCBmb3JtYXQs IHBJbWFnZSk7CiAgICB7ICBwR0NQcml2IC0+ICBmdW5jcyAgPSAgICBwR0MgIC0+ICBmdW5jcyA7 ICAgIHBHQyAgLT4gIGZ1bmNzICA9ICAgb2xkRnVuY3MgOyB9IDsgeyAgcEdDUHJpdiAtPiAgb3Bz ICA9ICAgIHBHQyAgLT4gIG9wcyA7ICAgIHBHQyAgLT4gIG9wcyAgPSAgICZzaGFkb3dHQ09wcyA7 IH0gIDsKCiAgICBpZigxICkgewoJQm94UmVjIGJveDsKCglib3gueDEgPSB4ICsgcERyYXctPng7 Cglib3gueDIgPSBib3gueDEgKyB3OwoJYm94LnkxID0geSArIHBEcmF3LT55OwoJYm94LnkyID0g Ym94LnkxICsgaDsKCgl7IEJveFB0ciBleHRlbnRzID0gJiAgcEdDIC0+cENvbXBvc2l0ZUNsaXAt PmV4dGVudHM7IGlmKCBib3ggLngxIDwgZXh0ZW50cy0+eDEpICBib3ggLngxID0gZXh0ZW50cy0+ eDE7IGlmKCBib3ggLngyID4gZXh0ZW50cy0+eDIpICBib3ggLngyID0gZXh0ZW50cy0+eDI7IGlm KCBib3ggLnkxIDwgZXh0ZW50cy0+eTEpICBib3ggLnkxID0gZXh0ZW50cy0+eTE7IGlmKCBib3gg LnkyID4gZXh0ZW50cy0+eTIpICBib3ggLnkyID0gZXh0ZW50cy0+eTI7IH0gOwoJaWYoKCgoIGJv eCAueDIgLSAgYm94IC54MSkgPiAwKSAmJiAoKCBib3ggLnkyIC0gIGJveCAueTEpID4gMCkpICkK CSAgIHNoYWRvd0RhbWFnZUJveCAoKFdpbmRvd1B0cikgcERyYXcsICZib3gpOwogICAgfQp9Cgpz dGF0aWMgUmVnaW9uUHRyCnNoYWRvd0NvcHlBcmVhKAogICAgRHJhd2FibGVQdHIgcFNyYywKICAg IERyYXdhYmxlUHRyIHBEc3QsCiAgICBHQyAqcEdDLAogICAgaW50IHNyY3gsIGludCBzcmN5LAog ICAgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAogICAgaW50IGRzdHgsIGludCBkc3R5IAopewogICAg UmVnaW9uUHRyIHJldDsKICAgIHNoYWRvd0dDUHJpdlB0ciAgcEdDUHJpdiA9ICgoc2hhZG93R0NQ cml2UHRyKSAoICAgcEdDICAgKS0+ZGV2UHJpdmF0ZXNbc2hhZG93R0NQcml2YXRlSW5kZXhdLnB0 cikgIDsgR0NGdW5jcyAqb2xkRnVuY3MgPSAgcEdDIC0+ZnVuY3M7IHsgICAgcEdDICAtPiAgZnVu Y3MgID0gIHBHQ1ByaXYgLT4gIGZ1bmNzIDsgfSA7IHsgICAgcEdDICAtPiAgb3BzICA9ICBwR0NQ cml2IC0+ICBvcHMgOyB9IDsgOwogICAgcmV0ID0gKCpwR0MtPm9wcy0+Q29weUFyZWEpKHBTcmMs IHBEc3QsCiAgICAgICAgICAgIHBHQywgc3JjeCwgc3JjeSwgd2lkdGgsIGhlaWdodCwgZHN0eCwg ZHN0eSk7CiAgICB7ICBwR0NQcml2IC0+ICBmdW5jcyAgPSAgICBwR0MgIC0+ICBmdW5jcyA7ICAg IHBHQyAgLT4gIGZ1bmNzICA9ICAgb2xkRnVuY3MgOyB9IDsgeyAgcEdDUHJpdiAtPiAgb3BzICA9 ICAgIHBHQyAgLT4gIG9wcyA7ICAgIHBHQyAgLT4gIG9wcyAgPSAgICZzaGFkb3dHQ09wcyA7IH0g IDsKCiAgICBpZigxICkgewoJQm94UmVjIGJveDsKCglib3gueDEgPSBkc3R4ICsgcERzdC0+eDsK CWJveC54MiA9IGJveC54MSArIHdpZHRoOwoJYm94LnkxID0gZHN0eSArIHBEc3QtPnk7Cglib3gu eTIgPSBib3gueTEgKyBoZWlnaHQ7CgoJeyBCb3hQdHIgZXh0ZW50cyA9ICYgIHBHQyAtPnBDb21w b3NpdGVDbGlwLT5leHRlbnRzOyBpZiggYm94IC54MSA8IGV4dGVudHMtPngxKSAgYm94IC54MSA9 IGV4dGVudHMtPngxOyBpZiggYm94IC54MiA+IGV4dGVudHMtPngyKSAgYm94IC54MiA9IGV4dGVu dHMtPngyOyBpZiggYm94IC55MSA8IGV4dGVudHMtPnkxKSAgYm94IC55MSA9IGV4dGVudHMtPnkx OyBpZiggYm94IC55MiA+IGV4dGVudHMtPnkyKSAgYm94IC55MiA9IGV4dGVudHMtPnkyOyB9IDsK CWlmKCgoKCBib3ggLngyIC0gIGJveCAueDEpID4gMCkgJiYgKCggYm94IC55MiAtICBib3ggLnkx KSA+IDApKSApCgkgICBzaGFkb3dEYW1hZ2VCb3ggKChXaW5kb3dQdHIpIHBEc3QsICZib3gpOwog ICAgfQoKICAgIHJldHVybiByZXQ7Cn0KCnN0YXRpYyBSZWdpb25QdHIKc2hhZG93Q29weVBsYW5l KAogICAgRHJhd2FibGVQdHIJcFNyYywKICAgIERyYXdhYmxlUHRyCXBEc3QsCiAgICBHQ1B0ciBw R0MsCiAgICBpbnQJc3JjeCwgaW50IHNyY3ksCiAgICBpbnQJd2lkdGgsIGludCBoZWlnaHQsCiAg ICBpbnQJZHN0eCwgaW50IGRzdHksCiAgICB1bnNpZ25lZCBsb25nIGJpdFBsYW5lIAopewogICAg UmVnaW9uUHRyIHJldDsKICAgIHNoYWRvd0dDUHJpdlB0ciAgcEdDUHJpdiA9ICgoc2hhZG93R0NQ cml2UHRyKSAoICAgcEdDICAgKS0+ZGV2UHJpdmF0ZXNbc2hhZG93R0NQcml2YXRlSW5kZXhdLnB0 cikgIDsgR0NGdW5jcyAqb2xkRnVuY3MgPSAgcEdDIC0+ZnVuY3M7IHsgICAgcEdDICAtPiAgZnVu Y3MgID0gIHBHQ1ByaXYgLT4gIGZ1bmNzIDsgfSA7IHsgICAgcEdDICAtPiAgb3BzICA9ICBwR0NQ cml2IC0+ICBvcHMgOyB9IDsgOwogICAgcmV0ID0gKCpwR0MtPm9wcy0+Q29weVBsYW5lKShwU3Jj LCBwRHN0LAoJICAgICAgIHBHQywgc3JjeCwgc3JjeSwgd2lkdGgsIGhlaWdodCwgZHN0eCwgZHN0 eSwgYml0UGxhbmUpOwogICAgeyAgcEdDUHJpdiAtPiAgZnVuY3MgID0gICAgcEdDICAtPiAgZnVu Y3MgOyAgICBwR0MgIC0+ICBmdW5jcyAgPSAgIG9sZEZ1bmNzIDsgfSA7IHsgIHBHQ1ByaXYgLT4g IG9wcyAgPSAgICBwR0MgIC0+ICBvcHMgOyAgICBwR0MgIC0+ICBvcHMgID0gICAmc2hhZG93R0NP cHMgOyB9ICA7CgogICAgaWYoMSApIHsKCUJveFJlYyBib3g7CgoJYm94LngxID0gZHN0eCArIHBE c3QtPng7Cglib3gueDIgPSBib3gueDEgKyB3aWR0aDsKCWJveC55MSA9IGRzdHkgKyBwRHN0LT55 OwoJYm94LnkyID0gYm94LnkxICsgaGVpZ2h0OwoKCXsgQm94UHRyIGV4dGVudHMgPSAmICBwR0Mg LT5wQ29tcG9zaXRlQ2xpcC0+ZXh0ZW50czsgaWYoIGJveCAueDEgPCBleHRlbnRzLT54MSkgIGJv eCAueDEgPSBleHRlbnRzLT54MTsgaWYoIGJveCAueDIgPiBleHRlbnRzLT54MikgIGJveCAueDIg PSBleHRlbnRzLT54MjsgaWYoIGJveCAueTEgPCBleHRlbnRzLT55MSkgIGJveCAueTEgPSBleHRl bnRzLT55MTsgaWYoIGJveCAueTIgPiBleHRlbnRzLT55MikgIGJveCAueTIgPSBleHRlbnRzLT55 MjsgfSA7CglpZigoKCggYm94IC54MiAtICBib3ggLngxKSA+IDApICYmICgoIGJveCAueTIgLSAg Ym94IC55MSkgPiAwKSkgKQoJICAgc2hhZG93RGFtYWdlQm94ICgoV2luZG93UHRyKSBwRHN0LCAm Ym94KTsKICAgIH0KCiAgICByZXR1cm4gcmV0Owp9CgpzdGF0aWMgdm9pZApzaGFkb3dQb2x5UG9p bnQoCiAgICBEcmF3YWJsZVB0ciBwRHJhdywKICAgIEdDUHRyIHBHQywKICAgIGludCBtb2RlLAog ICAgaW50IG5wdCwKICAgIHhQb2ludCAqcHB0SW5pdCAKKXsKICAgIHNoYWRvd0dDUHJpdlB0ciAg cEdDUHJpdiA9ICgoc2hhZG93R0NQcml2UHRyKSAoICAgcEdDICAgKS0+ZGV2UHJpdmF0ZXNbc2hh ZG93R0NQcml2YXRlSW5kZXhdLnB0cikgIDsgR0NGdW5jcyAqb2xkRnVuY3MgPSAgcEdDIC0+ZnVu Y3M7IHsgICAgcEdDICAtPiAgZnVuY3MgID0gIHBHQ1ByaXYgLT4gIGZ1bmNzIDsgfSA7IHsgICAg cEdDICAtPiAgb3BzICA9ICBwR0NQcml2IC0+ICBvcHMgOyB9IDsgOwogICAgKCpwR0MtPm9wcy0+ UG9seVBvaW50KShwRHJhdywgcEdDLCBtb2RlLCBucHQsIHBwdEluaXQpOwogICAgeyAgcEdDUHJp diAtPiAgZnVuY3MgID0gICAgcEdDICAtPiAgZnVuY3MgOyAgICBwR0MgIC0+ICBmdW5jcyAgPSAg IG9sZEZ1bmNzIDsgfSA7IHsgIHBHQ1ByaXYgLT4gIG9wcyAgPSAgICBwR0MgIC0+ICBvcHMgOyAg ICBwR0MgIC0+ICBvcHMgID0gICAmc2hhZG93R0NPcHMgOyB9ICA7CgogICAgaWYoMSAgJiYgbnB0 KSB7CglCb3hSZWMgYm94OwoKCWJveC54MiA9IGJveC54MSA9IHBwdEluaXQtPng7Cglib3gueTIg PSBib3gueTEgPSBwcHRJbml0LT55OwoKCSAKCgl3aGlsZSgtLW5wdCkgewoJICAgcHB0SW5pdCsr OwoJICAgaWYoYm94LngxID4gcHB0SW5pdC0+eCkgYm94LngxID0gcHB0SW5pdC0+eDsKCSAgIGVs c2UgaWYoYm94LngyIDwgcHB0SW5pdC0+eCkgYm94LngyID0gcHB0SW5pdC0+eDsKCSAgIGlmKGJv eC55MSA+IHBwdEluaXQtPnkpIGJveC55MSA9IHBwdEluaXQtPnk7CgkgICBlbHNlIGlmKGJveC55 MiA8IHBwdEluaXQtPnkpIGJveC55MiA9IHBwdEluaXQtPnk7Cgl9CgoJYm94LngyKys7Cglib3gu eTIrKzsKCgl7IHsgICBib3ggIC54MSArPSAgICAgcERyYXcgIC0+eDsgICBib3ggIC54MiArPSAg ICAgcERyYXcgIC0+eDsgICBib3ggIC55MSArPSAgICAgcERyYXcgIC0+eTsgICBib3ggIC55MiAr PSAgICAgcERyYXcgIC0+eTsgfSA7IHsgQm94UHRyIGV4dGVudHMgPSAmICAgIHBHQyAgLT5wQ29t cG9zaXRlQ2xpcC0+ZXh0ZW50czsgaWYoICBib3ggIC54MSA8IGV4dGVudHMtPngxKSAgIGJveCAg LngxID0gZXh0ZW50cy0+eDE7IGlmKCAgYm94ICAueDIgPiBleHRlbnRzLT54MikgICBib3ggIC54 MiA9IGV4dGVudHMtPngyOyBpZiggIGJveCAgLnkxIDwgZXh0ZW50cy0+eTEpICAgYm94ICAueTEg PSBleHRlbnRzLT55MTsgaWYoICBib3ggIC55MiA+IGV4dGVudHMtPnkyKSAgIGJveCAgLnkyID0g ZXh0ZW50cy0+eTI7IH0gOyB9IDsKCWlmKCgoKCBib3ggLngyIC0gIGJveCAueDEpID4gMCkgJiYg KCggYm94IC55MiAtICBib3ggLnkxKSA+IDApKSApCgkgICBzaGFkb3dEYW1hZ2VCb3ggKChXaW5k b3dQdHIpIHBEcmF3LCAmYm94KTsKICAgIH0KfQoKc3RhdGljIHZvaWQKc2hhZG93UG9seWxpbmVz KAogICAgRHJhd2FibGVQdHIgcERyYXcsCiAgICBHQ1B0cglwR0MsCiAgICBpbnQJCW1vZGUsCQkK ICAgIGludAkJbnB0LAkJCiAgICBERFhQb2ludFB0ciBwcHRJbml0IAopewogICAgc2hhZG93R0NQ cml2UHRyICBwR0NQcml2ID0gKChzaGFkb3dHQ1ByaXZQdHIpICggICBwR0MgICApLT5kZXZQcml2 YXRlc1tzaGFkb3dHQ1ByaXZhdGVJbmRleF0ucHRyKSAgOyBHQ0Z1bmNzICpvbGRGdW5jcyA9ICBw R0MgLT5mdW5jczsgeyAgICBwR0MgIC0+ICBmdW5jcyAgPSAgcEdDUHJpdiAtPiAgZnVuY3MgOyB9 IDsgeyAgICBwR0MgIC0+ICBvcHMgID0gIHBHQ1ByaXYgLT4gIG9wcyA7IH0gOyA7CiAgICAoKnBH Qy0+b3BzLT5Qb2x5bGluZXMpKHBEcmF3LCBwR0MsIG1vZGUsIG5wdCwgcHB0SW5pdCk7CiAgICB7 ICBwR0NQcml2IC0+ICBmdW5jcyAgPSAgICBwR0MgIC0+ICBmdW5jcyA7ICAgIHBHQyAgLT4gIGZ1 bmNzICA9ICAgb2xkRnVuY3MgOyB9IDsgeyAgcEdDUHJpdiAtPiAgb3BzICA9ICAgIHBHQyAgLT4g IG9wcyA7ICAgIHBHQyAgLT4gIG9wcyAgPSAgICZzaGFkb3dHQ09wcyA7IH0gIDsKCgogICAgaWYo MSAgJiYgbnB0KSB7CglCb3hSZWMgYm94OwoJaW50IGV4dHJhID0gcEdDLT5saW5lV2lkdGggPj4g MTsKCglib3gueDIgPSBib3gueDEgPSBwcHRJbml0LT54OwoJYm94LnkyID0gYm94LnkxID0gcHB0 SW5pdC0+eTsKCglpZihucHQgPiAxKSB7CgkgICBpZihwR0MtPmpvaW5TdHlsZSA9PSAwICkKCQll eHRyYSA9IDYgKiBwR0MtPmxpbmVXaWR0aDsKCSAgIGVsc2UgaWYocEdDLT5jYXBTdHlsZSA9PSAz ICkKCQlleHRyYSA9IHBHQy0+bGluZVdpZHRoOwogICAgICAgIH0KCglpZihtb2RlID09IDEgKSB7 CgkgICBpbnQgeCA9IGJveC54MTsKCSAgIGludCB5ID0gYm94LnkxOwoJICAgd2hpbGUoLS1ucHQp IHsKCQlwcHRJbml0Kys7CgkJeCArPSBwcHRJbml0LT54OwoJCXkgKz0gcHB0SW5pdC0+eTsKCQlp Zihib3gueDEgPiB4KSBib3gueDEgPSB4OwoJCWVsc2UgaWYoYm94LngyIDwgeCkgYm94LngyID0g eDsKCQlpZihib3gueTEgPiB5KSBib3gueTEgPSB5OwoJCWVsc2UgaWYoYm94LnkyIDwgeSkgYm94 LnkyID0geTsKCSAgICB9Cgl9IGVsc2UgewoJICAgd2hpbGUoLS1ucHQpIHsKCQlwcHRJbml0Kys7 CgkJaWYoYm94LngxID4gcHB0SW5pdC0+eCkgYm94LngxID0gcHB0SW5pdC0+eDsKCQllbHNlIGlm KGJveC54MiA8IHBwdEluaXQtPngpIGJveC54MiA9IHBwdEluaXQtPng7CgkJaWYoYm94LnkxID4g cHB0SW5pdC0+eSkgYm94LnkxID0gcHB0SW5pdC0+eTsKCQllbHNlIGlmKGJveC55MiA8IHBwdElu aXQtPnkpIGJveC55MiA9IHBwdEluaXQtPnk7CgkgICAgfQoJfQoKCWJveC54MisrOwoJYm94Lnky Kys7CgoJaWYoZXh0cmEpIHsKCSAgIGJveC54MSAtPSBleHRyYTsKCSAgIGJveC54MiArPSBleHRy YTsKCSAgIGJveC55MSAtPSBleHRyYTsKCSAgIGJveC55MiArPSBleHRyYTsKICAgICAgICB9CgoJ eyB7ICAgYm94ICAueDEgKz0gICAgIHBEcmF3ICAtPng7ICAgYm94ICAueDIgKz0gICAgIHBEcmF3 ICAtPng7ICAgYm94ICAueTEgKz0gICAgIHBEcmF3ICAtPnk7ICAgYm94ICAueTIgKz0gICAgIHBE cmF3ICAtPnk7IH0gOyB7IEJveFB0ciBleHRlbnRzID0gJiAgICBwR0MgIC0+cENvbXBvc2l0ZUNs aXAtPmV4dGVudHM7IGlmKCAgYm94ICAueDEgPCBleHRlbnRzLT54MSkgICBib3ggIC54MSA9IGV4 dGVudHMtPngxOyBpZiggIGJveCAgLngyID4gZXh0ZW50cy0+eDIpICAgYm94ICAueDIgPSBleHRl bnRzLT54MjsgaWYoICBib3ggIC55MSA8IGV4dGVudHMtPnkxKSAgIGJveCAgLnkxID0gZXh0ZW50 cy0+eTE7IGlmKCAgYm94ICAueTIgPiBleHRlbnRzLT55MikgICBib3ggIC55MiA9IGV4dGVudHMt PnkyOyB9IDsgfSA7CglpZigoKCggYm94IC54MiAtICBib3ggLngxKSA+IDApICYmICgoIGJveCAu eTIgLSAgYm94IC55MSkgPiAwKSkgKQoJICAgc2hhZG93RGFtYWdlQm94ICgoV2luZG93UHRyKSBw RHJhdywgJmJveCk7CiAgICB9Cn0KCnN0YXRpYyB2b2lkIApzaGFkb3dQb2x5U2VnbWVudCgKICAg IERyYXdhYmxlUHRyCXBEcmF3LAogICAgR0NQdHIJcEdDLAogICAgaW50CQluc2VnLAogICAgeFNl Z21lbnQJKnBTZWcgCil7CiAgICBzaGFkb3dHQ1ByaXZQdHIgIHBHQ1ByaXYgPSAoKHNoYWRvd0dD UHJpdlB0cikgKCAgIHBHQyAgICktPmRldlByaXZhdGVzW3NoYWRvd0dDUHJpdmF0ZUluZGV4XS5w dHIpICA7IEdDRnVuY3MgKm9sZEZ1bmNzID0gIHBHQyAtPmZ1bmNzOyB7ICAgIHBHQyAgLT4gIGZ1 bmNzICA9ICBwR0NQcml2IC0+ICBmdW5jcyA7IH0gOyB7ICAgIHBHQyAgLT4gIG9wcyAgPSAgcEdD UHJpdiAtPiAgb3BzIDsgfSA7IDsKICAgICgqcEdDLT5vcHMtPlBvbHlTZWdtZW50KShwRHJhdywg cEdDLCBuc2VnLCBwU2VnKTsKICAgIHsgIHBHQ1ByaXYgLT4gIGZ1bmNzICA9ICAgIHBHQyAgLT4g IGZ1bmNzIDsgICAgcEdDICAtPiAgZnVuY3MgID0gICBvbGRGdW5jcyA7IH0gOyB7ICBwR0NQcml2 IC0+ICBvcHMgID0gICAgcEdDICAtPiAgb3BzIDsgICAgcEdDICAtPiAgb3BzICA9ICAgJnNoYWRv d0dDT3BzIDsgfSAgOwoKICAgIGlmKDEgICYmIG5zZWcpIHsKCUJveFJlYyBib3g7CglpbnQgZXh0 cmEgPSBwR0MtPmxpbmVXaWR0aDsKCiAgICAgICAgaWYocEdDLT5jYXBTdHlsZSAhPSAzICkJCgkg ICBleHRyYSA+Pj0gMTsKCglpZihwU2VnLT54MiA+IHBTZWctPngxKSB7CgkgICAgYm94LngxID0g cFNlZy0+eDE7CgkgICAgYm94LngyID0gcFNlZy0+eDI7Cgl9IGVsc2UgewoJICAgIGJveC54MiA9 IHBTZWctPngxOwoJICAgIGJveC54MSA9IHBTZWctPngyOwoJfQoKCWlmKHBTZWctPnkyID4gcFNl Zy0+eTEpIHsKCSAgICBib3gueTEgPSBwU2VnLT55MTsKCSAgICBib3gueTIgPSBwU2VnLT55MjsK CX0gZWxzZSB7CgkgICAgYm94LnkyID0gcFNlZy0+eTE7CgkgICAgYm94LnkxID0gcFNlZy0+eTI7 Cgl9CgoJd2hpbGUoLS1uc2VnKSB7CgkgICAgcFNlZysrOwoJICAgIGlmKHBTZWctPngyID4gcFNl Zy0+eDEpIHsKCQlpZihwU2VnLT54MSA8IGJveC54MSkgYm94LngxID0gcFNlZy0+eDE7CgkJaWYo cFNlZy0+eDIgPiBib3gueDIpIGJveC54MiA9IHBTZWctPngyOwoJICAgIH0gZWxzZSB7CgkJaWYo cFNlZy0+eDIgPCBib3gueDEpIGJveC54MSA9IHBTZWctPngyOwoJCWlmKHBTZWctPngxID4gYm94 LngyKSBib3gueDIgPSBwU2VnLT54MTsKCSAgICB9CgkgICAgaWYocFNlZy0+eTIgPiBwU2VnLT55 MSkgewoJCWlmKHBTZWctPnkxIDwgYm94LnkxKSBib3gueTEgPSBwU2VnLT55MTsKCQlpZihwU2Vn LT55MiA+IGJveC55MikgYm94LnkyID0gcFNlZy0+eTI7CgkgICAgfSBlbHNlIHsKCQlpZihwU2Vn LT55MiA8IGJveC55MSkgYm94LnkxID0gcFNlZy0+eTI7CgkJaWYocFNlZy0+eTEgPiBib3gueTIp IGJveC55MiA9IHBTZWctPnkxOwoJICAgIH0KCX0KCglib3gueDIrKzsKCWJveC55MisrOwoKCWlm KGV4dHJhKSB7CgkgICBib3gueDEgLT0gZXh0cmE7CgkgICBib3gueDIgKz0gZXh0cmE7CgkgICBi b3gueTEgLT0gZXh0cmE7CgkgICBib3gueTIgKz0gZXh0cmE7CiAgICAgICAgfQoKCXsgeyAgIGJv eCAgLngxICs9ICAgICBwRHJhdyAgLT54OyAgIGJveCAgLngyICs9ICAgICBwRHJhdyAgLT54OyAg IGJveCAgLnkxICs9ICAgICBwRHJhdyAgLT55OyAgIGJveCAgLnkyICs9ICAgICBwRHJhdyAgLT55 OyB9IDsgeyBCb3hQdHIgZXh0ZW50cyA9ICYgICAgcEdDICAtPnBDb21wb3NpdGVDbGlwLT5leHRl bnRzOyBpZiggIGJveCAgLngxIDwgZXh0ZW50cy0+eDEpICAgYm94ICAueDEgPSBleHRlbnRzLT54 MTsgaWYoICBib3ggIC54MiA+IGV4dGVudHMtPngyKSAgIGJveCAgLngyID0gZXh0ZW50cy0+eDI7 IGlmKCAgYm94ICAueTEgPCBleHRlbnRzLT55MSkgICBib3ggIC55MSA9IGV4dGVudHMtPnkxOyBp ZiggIGJveCAgLnkyID4gZXh0ZW50cy0+eTIpICAgYm94ICAueTIgPSBleHRlbnRzLT55MjsgfSA7 IH0gOwoJaWYoKCgoIGJveCAueDIgLSAgYm94IC54MSkgPiAwKSAmJiAoKCBib3ggLnkyIC0gIGJv eCAueTEpID4gMCkpICkKCSAgIHNoYWRvd0RhbWFnZUJveCAoKFdpbmRvd1B0cikgcERyYXcsICZi b3gpOwogICAgfQp9CgpzdGF0aWMgdm9pZApzaGFkb3dQb2x5UmVjdGFuZ2xlKAogICAgRHJhd2Fi bGVQdHIgIHBEcmF3LAogICAgR0NQdHIgICAgICAgIHBHQywKICAgIGludAkgICAgICAgICBuUmVj dHMsCiAgICB4UmVjdGFuZ2xlICAqcFJlY3RzIAopewogICAgc2hhZG93R0NQcml2UHRyICBwR0NQ cml2ID0gKChzaGFkb3dHQ1ByaXZQdHIpICggICBwR0MgICApLT5kZXZQcml2YXRlc1tzaGFkb3dH Q1ByaXZhdGVJbmRleF0ucHRyKSAgOyBHQ0Z1bmNzICpvbGRGdW5jcyA9ICBwR0MgLT5mdW5jczsg eyAgICBwR0MgIC0+ICBmdW5jcyAgPSAgcEdDUHJpdiAtPiAgZnVuY3MgOyB9IDsgeyAgICBwR0Mg IC0+ICBvcHMgID0gIHBHQ1ByaXYgLT4gIG9wcyA7IH0gOyA7CiAgICAoKnBHQy0+b3BzLT5Qb2x5 UmVjdGFuZ2xlKShwRHJhdywgcEdDLCBuUmVjdHMsIHBSZWN0cyk7CiAgICB7ICBwR0NQcml2IC0+ ICBmdW5jcyAgPSAgICBwR0MgIC0+ICBmdW5jcyA7ICAgIHBHQyAgLT4gIGZ1bmNzICA9ICAgb2xk RnVuY3MgOyB9IDsgeyAgcEdDUHJpdiAtPiAgb3BzICA9ICAgIHBHQyAgLT4gIG9wcyA7ICAgIHBH QyAgLT4gIG9wcyAgPSAgICZzaGFkb3dHQ09wcyA7IH0gIDsKCiAgICBpZigxICAmJiBuUmVjdHMp IAogICAgewoJQm94UmVjIGJveDsKCWludCBvZmZzZXQxLCBvZmZzZXQyLCBvZmZzZXQzOwoKCW9m ZnNldDIgPSBwR0MtPmxpbmVXaWR0aDsKCWlmKCFvZmZzZXQyKSBvZmZzZXQyID0gMTsKCW9mZnNl dDEgPSBvZmZzZXQyID4+IDE7CglvZmZzZXQzID0gb2Zmc2V0MiAtIG9mZnNldDE7CgoJd2hpbGUo blJlY3RzLS0pIAoJewoJICAgIGJveC54MSA9IHBSZWN0cy0+eCAtIG9mZnNldDE7CgkgICAgYm94 LnkxID0gcFJlY3RzLT55IC0gb2Zmc2V0MTsKCSAgICBib3gueDIgPSBib3gueDEgKyBwUmVjdHMt PndpZHRoICsgb2Zmc2V0MjsKCSAgICBib3gueTIgPSBib3gueTEgKyBvZmZzZXQyOwkJCgkgICAg eyB7ICAgYm94ICAueDEgKz0gICAgIHBEcmF3ICAtPng7ICAgYm94ICAueDIgKz0gICAgIHBEcmF3 ICAtPng7ICAgYm94ICAueTEgKz0gICAgIHBEcmF3ICAtPnk7ICAgYm94ICAueTIgKz0gICAgIHBE cmF3ICAtPnk7IH0gOyB7IEJveFB0ciBleHRlbnRzID0gJiAgICBwR0MgIC0+cENvbXBvc2l0ZUNs aXAtPmV4dGVudHM7IGlmKCAgYm94ICAueDEgPCBleHRlbnRzLT54MSkgICBib3ggIC54MSA9IGV4 dGVudHMtPngxOyBpZiggIGJveCAgLngyID4gZXh0ZW50cy0+eDIpICAgYm94ICAueDIgPSBleHRl bnRzLT54MjsgaWYoICBib3ggIC55MSA8IGV4dGVudHMtPnkxKSAgIGJveCAgLnkxID0gZXh0ZW50 cy0+eTE7IGlmKCAgYm94ICAueTIgPiBleHRlbnRzLT55MikgICBib3ggIC55MiA9IGV4dGVudHMt PnkyOyB9IDsgfSA7CgkgICAgaWYoKCgoIGJveCAueDIgLSAgYm94IC54MSkgPiAwKSAmJiAoKCBi b3ggLnkyIC0gIGJveCAueTEpID4gMCkpICkKCQlzaGFkb3dEYW1hZ2VCb3ggKChXaW5kb3dQdHIp IHBEcmF3LCAmYm94KTsKCgkgICAgYm94LngxID0gcFJlY3RzLT54IC0gb2Zmc2V0MTsKCSAgICBi b3gueTEgPSBwUmVjdHMtPnkgKyBvZmZzZXQzOwoJICAgIGJveC54MiA9IGJveC54MSArIG9mZnNl dDI7CgkgICAgYm94LnkyID0gYm94LnkxICsgcFJlY3RzLT5oZWlnaHQgLSBvZmZzZXQyOwkJCgkg ICAgeyB7ICAgYm94ICAueDEgKz0gICAgIHBEcmF3ICAtPng7ICAgYm94ICAueDIgKz0gICAgIHBE cmF3ICAtPng7ICAgYm94ICAueTEgKz0gICAgIHBEcmF3ICAtPnk7ICAgYm94ICAueTIgKz0gICAg IHBEcmF3ICAtPnk7IH0gOyB7IEJveFB0ciBleHRlbnRzID0gJiAgICBwR0MgIC0+cENvbXBvc2l0 ZUNsaXAtPmV4dGVudHM7IGlmKCAgYm94ICAueDEgPCBleHRlbnRzLT54MSkgICBib3ggIC54MSA9 IGV4dGVudHMtPngxOyBpZiggIGJveCAgLngyID4gZXh0ZW50cy0+eDIpICAgYm94ICAueDIgPSBl eHRlbnRzLT54MjsgaWYoICBib3ggIC55MSA8IGV4dGVudHMtPnkxKSAgIGJveCAgLnkxID0gZXh0 ZW50cy0+eTE7IGlmKCAgYm94ICAueTIgPiBleHRlbnRzLT55MikgICBib3ggIC55MiA9IGV4dGVu dHMtPnkyOyB9IDsgfSA7CgkgICAgaWYoKCgoIGJveCAueDIgLSAgYm94IC54MSkgPiAwKSAmJiAo KCBib3ggLnkyIC0gIGJveCAueTEpID4gMCkpICkKCQlzaGFkb3dEYW1hZ2VCb3ggKChXaW5kb3dQ dHIpIHBEcmF3LCAmYm94KTsKCgkgICAgYm94LngxID0gcFJlY3RzLT54ICsgcFJlY3RzLT53aWR0 aCAtIG9mZnNldDE7CgkgICAgYm94LnkxID0gcFJlY3RzLT55ICsgb2Zmc2V0MzsKCSAgICBib3gu eDIgPSBib3gueDEgKyBvZmZzZXQyOwoJICAgIGJveC55MiA9IGJveC55MSArIHBSZWN0cy0+aGVp Z2h0IC0gb2Zmc2V0MjsJCQoJICAgIHsgeyAgIGJveCAgLngxICs9ICAgICBwRHJhdyAgLT54OyAg IGJveCAgLngyICs9ICAgICBwRHJhdyAgLT54OyAgIGJveCAgLnkxICs9ICAgICBwRHJhdyAgLT55 OyAgIGJveCAgLnkyICs9ICAgICBwRHJhdyAgLT55OyB9IDsgeyBCb3hQdHIgZXh0ZW50cyA9ICYg ICAgcEdDICAtPnBDb21wb3NpdGVDbGlwLT5leHRlbnRzOyBpZiggIGJveCAgLngxIDwgZXh0ZW50 cy0+eDEpICAgYm94ICAueDEgPSBleHRlbnRzLT54MTsgaWYoICBib3ggIC54MiA+IGV4dGVudHMt PngyKSAgIGJveCAgLngyID0gZXh0ZW50cy0+eDI7IGlmKCAgYm94ICAueTEgPCBleHRlbnRzLT55 MSkgICBib3ggIC55MSA9IGV4dGVudHMtPnkxOyBpZiggIGJveCAgLnkyID4gZXh0ZW50cy0+eTIp ICAgYm94ICAueTIgPSBleHRlbnRzLT55MjsgfSA7IH0gOwoJICAgIGlmKCgoKCBib3ggLngyIC0g IGJveCAueDEpID4gMCkgJiYgKCggYm94IC55MiAtICBib3ggLnkxKSA+IDApKSApCgkJc2hhZG93 RGFtYWdlQm94ICgoV2luZG93UHRyKSBwRHJhdywgJmJveCk7CgoJICAgIGJveC54MSA9IHBSZWN0 cy0+eCAtIG9mZnNldDE7CgkgICAgYm94LnkxID0gcFJlY3RzLT55ICsgcFJlY3RzLT5oZWlnaHQg LSBvZmZzZXQxOwoJICAgIGJveC54MiA9IGJveC54MSArIHBSZWN0cy0+d2lkdGggKyBvZmZzZXQy OwoJICAgIGJveC55MiA9IGJveC55MSArIG9mZnNldDI7CQkKCSAgICB7IHsgICBib3ggIC54MSAr PSAgICAgcERyYXcgIC0+eDsgICBib3ggIC54MiArPSAgICAgcERyYXcgIC0+eDsgICBib3ggIC55 MSArPSAgICAgcERyYXcgIC0+eTsgICBib3ggIC55MiArPSAgICAgcERyYXcgIC0+eTsgfSA7IHsg Qm94UHRyIGV4dGVudHMgPSAmICAgIHBHQyAgLT5wQ29tcG9zaXRlQ2xpcC0+ZXh0ZW50czsgaWYo ICBib3ggIC54MSA8IGV4dGVudHMtPngxKSAgIGJveCAgLngxID0gZXh0ZW50cy0+eDE7IGlmKCAg Ym94ICAueDIgPiBleHRlbnRzLT54MikgICBib3ggIC54MiA9IGV4dGVudHMtPngyOyBpZiggIGJv eCAgLnkxIDwgZXh0ZW50cy0+eTEpICAgYm94ICAueTEgPSBleHRlbnRzLT55MTsgaWYoICBib3gg IC55MiA+IGV4dGVudHMtPnkyKSAgIGJveCAgLnkyID0gZXh0ZW50cy0+eTI7IH0gOyB9IDsKCSAg ICBpZigoKCggYm94IC54MiAtICBib3ggLngxKSA+IDApICYmICgoIGJveCAueTIgLSAgYm94IC55 MSkgPiAwKSkgKQoJCXNoYWRvd0RhbWFnZUJveCAoKFdpbmRvd1B0cikgcERyYXcsICZib3gpOwoK CSAgICBwUmVjdHMrKzsKCX0KICAgIH0KIH0KCnN0YXRpYyB2b2lkCnNoYWRvd1BvbHlBcmMoCiAg ICBEcmF3YWJsZVB0cglwRHJhdywKICAgIEdDUHRyCXBHQywKICAgIGludAkJbmFyY3MsCiAgICB4 QXJjCSpwYXJjcyAKKXsKICAgIHNoYWRvd0dDUHJpdlB0ciAgcEdDUHJpdiA9ICgoc2hhZG93R0NQ cml2UHRyKSAoICAgcEdDICAgKS0+ZGV2UHJpdmF0ZXNbc2hhZG93R0NQcml2YXRlSW5kZXhdLnB0 cikgIDsgR0NGdW5jcyAqb2xkRnVuY3MgPSAgcEdDIC0+ZnVuY3M7IHsgICAgcEdDICAtPiAgZnVu Y3MgID0gIHBHQ1ByaXYgLT4gIGZ1bmNzIDsgfSA7IHsgICAgcEdDICAtPiAgb3BzICA9ICBwR0NQ cml2IC0+ICBvcHMgOyB9IDsgOwogICAgKCpwR0MtPm9wcy0+UG9seUFyYykocERyYXcsIHBHQywg bmFyY3MsIHBhcmNzKTsKICAgIHsgIHBHQ1ByaXYgLT4gIGZ1bmNzICA9ICAgIHBHQyAgLT4gIGZ1 bmNzIDsgICAgcEdDICAtPiAgZnVuY3MgID0gICBvbGRGdW5jcyA7IH0gOyB7ICBwR0NQcml2IC0+ ICBvcHMgID0gICAgcEdDICAtPiAgb3BzIDsgICAgcEdDICAtPiAgb3BzICA9ICAgJnNoYWRvd0dD T3BzIDsgfSAgOwoKICAgIGlmKDEgICYmIG5hcmNzKSB7CglpbnQgZXh0cmEgPSBwR0MtPmxpbmVX aWR0aCA+PiAxOwoJQm94UmVjIGJveDsKCglib3gueDEgPSBwYXJjcy0+eDsKCWJveC54MiA9IGJv eC54MSArIHBhcmNzLT53aWR0aDsKCWJveC55MSA9IHBhcmNzLT55OwoJYm94LnkyID0gYm94Lnkx ICsgcGFyY3MtPmhlaWdodDsKCgkgCgoJd2hpbGUoLS1uYXJjcykgewoJICAgcGFyY3MrKzsKCSAg IGlmKGJveC54MSA+IHBhcmNzLT54KSBib3gueDEgPSBwYXJjcy0+eDsKCSAgIGlmKGJveC54MiA8 IChwYXJjcy0+eCArIHBhcmNzLT53aWR0aCkpCgkJYm94LngyID0gcGFyY3MtPnggKyBwYXJjcy0+ d2lkdGg7CgkgICBpZihib3gueTEgPiBwYXJjcy0+eSkgYm94LnkxID0gcGFyY3MtPnk7CgkgICBp Zihib3gueTIgPCAocGFyY3MtPnkgKyBwYXJjcy0+aGVpZ2h0KSkKCQlib3gueTIgPSBwYXJjcy0+ eSArIHBhcmNzLT5oZWlnaHQ7CiAgICAgICAgfQoKCWlmKGV4dHJhKSB7CgkgICBib3gueDEgLT0g ZXh0cmE7CgkgICBib3gueDIgKz0gZXh0cmE7CgkgICBib3gueTEgLT0gZXh0cmE7CgkgICBib3gu eTIgKz0gZXh0cmE7CiAgICAgICAgfQoKCWJveC54MisrOwoJYm94LnkyKys7CgoJeyB7ICAgYm94 ICAueDEgKz0gICAgIHBEcmF3ICAtPng7ICAgYm94ICAueDIgKz0gICAgIHBEcmF3ICAtPng7ICAg Ym94ICAueTEgKz0gICAgIHBEcmF3ICAtPnk7ICAgYm94ICAueTIgKz0gICAgIHBEcmF3ICAtPnk7 IH0gOyB7IEJveFB0ciBleHRlbnRzID0gJiAgICBwR0MgIC0+cENvbXBvc2l0ZUNsaXAtPmV4dGVu dHM7IGlmKCAgYm94ICAueDEgPCBleHRlbnRzLT54MSkgICBib3ggIC54MSA9IGV4dGVudHMtPngx OyBpZiggIGJveCAgLngyID4gZXh0ZW50cy0+eDIpICAgYm94ICAueDIgPSBleHRlbnRzLT54Mjsg aWYoICBib3ggIC55MSA8IGV4dGVudHMtPnkxKSAgIGJveCAgLnkxID0gZXh0ZW50cy0+eTE7IGlm KCAgYm94ICAueTIgPiBleHRlbnRzLT55MikgICBib3ggIC55MiA9IGV4dGVudHMtPnkyOyB9IDsg fSA7CglpZigoKCggYm94IC54MiAtICBib3ggLngxKSA+IDApICYmICgoIGJveCAueTIgLSAgYm94 IC55MSkgPiAwKSkgKQoJICAgc2hhZG93RGFtYWdlQm94ICgoV2luZG93UHRyKSBwRHJhdywgJmJv eCk7CiAgICB9Cn0KCnN0YXRpYyB2b2lkCnNoYWRvd0ZpbGxQb2x5Z29uKAogICAgRHJhd2FibGVQ dHIJcERyYXcsCiAgICBHQ1B0cglwR0MsCiAgICBpbnQJCXNoYXBlLAogICAgaW50CQltb2RlLAog ICAgaW50CQljb3VudCwKICAgIEREWFBvaW50UHRyCXBwdEluaXQgCil7CiAgICBzaGFkb3dHQ1By aXZQdHIgIHBHQ1ByaXYgPSAoKHNoYWRvd0dDUHJpdlB0cikgKCAgIHBHQyAgICktPmRldlByaXZh dGVzW3NoYWRvd0dDUHJpdmF0ZUluZGV4XS5wdHIpICA7IEdDRnVuY3MgKm9sZEZ1bmNzID0gIHBH QyAtPmZ1bmNzOyB7ICAgIHBHQyAgLT4gIGZ1bmNzICA9ICBwR0NQcml2IC0+ICBmdW5jcyA7IH0g OyB7ICAgIHBHQyAgLT4gIG9wcyAgPSAgcEdDUHJpdiAtPiAgb3BzIDsgfSA7IDsKCiAgICBpZigx ICAmJiAoY291bnQgPiAyKSkgewoJRERYUG9pbnRQdHIgcHB0ID0gcHB0SW5pdDsKCWludCBpID0g Y291bnQ7CglCb3hSZWMgYm94OwoKCWJveC54MiA9IGJveC54MSA9IHBwdC0+eDsKCWJveC55MiA9 IGJveC55MSA9IHBwdC0+eTsKCglpZihtb2RlICE9IDAgKSB7CgkgICBpbnQgeCA9IGJveC54MTsK CSAgIGludCB5ID0gYm94LnkxOwoJICAgd2hpbGUoLS1pKSB7CgkJcHB0Kys7CgkJeCArPSBwcHQt Png7CgkJeSArPSBwcHQtPnk7CgkJaWYoYm94LngxID4geCkgYm94LngxID0geDsKCQllbHNlIGlm KGJveC54MiA8IHgpIGJveC54MiA9IHg7CgkJaWYoYm94LnkxID4geSkgYm94LnkxID0geTsKCQll bHNlIGlmKGJveC55MiA8IHkpIGJveC55MiA9IHk7CgkgICAgfQoJfSBlbHNlIHsKCSAgIHdoaWxl KC0taSkgewoJCXBwdCsrOwoJCWlmKGJveC54MSA+IHBwdC0+eCkgYm94LngxID0gcHB0LT54OwoJ CWVsc2UgaWYoYm94LngyIDwgcHB0LT54KSBib3gueDIgPSBwcHQtPng7CgkJaWYoYm94LnkxID4g cHB0LT55KSBib3gueTEgPSBwcHQtPnk7CgkJZWxzZSBpZihib3gueTIgPCBwcHQtPnkpIGJveC55 MiA9IHBwdC0+eTsKCSAgICB9Cgl9CgoJYm94LngyKys7Cglib3gueTIrKzsKCgkoKnBHQy0+b3Bz LT5GaWxsUG9seWdvbikocERyYXcsIHBHQywgc2hhcGUsIG1vZGUsIGNvdW50LCBwcHRJbml0KTsK Cgl7IHsgICBib3ggIC54MSArPSAgICAgcERyYXcgIC0+eDsgICBib3ggIC54MiArPSAgICAgcERy YXcgIC0+eDsgICBib3ggIC55MSArPSAgICAgcERyYXcgIC0+eTsgICBib3ggIC55MiArPSAgICAg cERyYXcgIC0+eTsgfSA7IHsgQm94UHRyIGV4dGVudHMgPSAmICAgIHBHQyAgLT5wQ29tcG9zaXRl Q2xpcC0+ZXh0ZW50czsgaWYoICBib3ggIC54MSA8IGV4dGVudHMtPngxKSAgIGJveCAgLngxID0g ZXh0ZW50cy0+eDE7IGlmKCAgYm94ICAueDIgPiBleHRlbnRzLT54MikgICBib3ggIC54MiA9IGV4 dGVudHMtPngyOyBpZiggIGJveCAgLnkxIDwgZXh0ZW50cy0+eTEpICAgYm94ICAueTEgPSBleHRl bnRzLT55MTsgaWYoICBib3ggIC55MiA+IGV4dGVudHMtPnkyKSAgIGJveCAgLnkyID0gZXh0ZW50 cy0+eTI7IH0gOyB9IDsKCWlmKCgoKCBib3ggLngyIC0gIGJveCAueDEpID4gMCkgJiYgKCggYm94 IC55MiAtICBib3ggLnkxKSA+IDApKSApCgkgICBzaGFkb3dEYW1hZ2VCb3ggKChXaW5kb3dQdHIp IHBEcmF3LCAmYm94KTsKICAgIH0gZWxzZQoJKCpwR0MtPm9wcy0+RmlsbFBvbHlnb24pKHBEcmF3 LCBwR0MsIHNoYXBlLCBtb2RlLCBjb3VudCwgcHB0SW5pdCk7CgogICAgeyAgcEdDUHJpdiAtPiAg ZnVuY3MgID0gICAgcEdDICAtPiAgZnVuY3MgOyAgICBwR0MgIC0+ICBmdW5jcyAgPSAgIG9sZEZ1 bmNzIDsgfSA7IHsgIHBHQ1ByaXYgLT4gIG9wcyAgPSAgICBwR0MgIC0+ICBvcHMgOyAgICBwR0Mg IC0+ICBvcHMgID0gICAmc2hhZG93R0NPcHMgOyB9ICA7Cn0KCgpzdGF0aWMgdm9pZCAKc2hhZG93 UG9seUZpbGxSZWN0KAogICAgRHJhd2FibGVQdHIJcERyYXcsCiAgICBHQ1B0cglwR0MsCiAgICBp bnQJCW5SZWN0c0luaXQsIAogICAgeFJlY3RhbmdsZQkqcFJlY3RzSW5pdCAKKXsKICAgIHNoYWRv d0dDUHJpdlB0ciAgcEdDUHJpdiA9ICgoc2hhZG93R0NQcml2UHRyKSAoICAgcEdDICAgKS0+ZGV2 UHJpdmF0ZXNbc2hhZG93R0NQcml2YXRlSW5kZXhdLnB0cikgIDsgR0NGdW5jcyAqb2xkRnVuY3Mg PSAgcEdDIC0+ZnVuY3M7IHsgICAgcEdDICAtPiAgZnVuY3MgID0gIHBHQ1ByaXYgLT4gIGZ1bmNz IDsgfSA7IHsgICAgcEdDICAtPiAgb3BzICA9ICBwR0NQcml2IC0+ICBvcHMgOyB9IDsgOwoKICAg IGlmKDEgICYmIG5SZWN0c0luaXQpIHsKCUJveFJlYyBib3g7Cgl4UmVjdGFuZ2xlICpwUmVjdHMg PSBwUmVjdHNJbml0OwoJaW50IG5SZWN0cyA9IG5SZWN0c0luaXQ7CgoJYm94LngxID0gcFJlY3Rz LT54OwoJYm94LngyID0gYm94LngxICsgcFJlY3RzLT53aWR0aDsKCWJveC55MSA9IHBSZWN0cy0+ eTsKCWJveC55MiA9IGJveC55MSArIHBSZWN0cy0+aGVpZ2h0OwoKCXdoaWxlKC0tblJlY3RzKSB7 CgkgICAgcFJlY3RzKys7CgkgICAgaWYoYm94LngxID4gcFJlY3RzLT54KSBib3gueDEgPSBwUmVj dHMtPng7CgkgICAgaWYoYm94LngyIDwgKHBSZWN0cy0+eCArIHBSZWN0cy0+d2lkdGgpKQoJCWJv eC54MiA9IHBSZWN0cy0+eCArIHBSZWN0cy0+d2lkdGg7CgkgICAgaWYoYm94LnkxID4gcFJlY3Rz LT55KSBib3gueTEgPSBwUmVjdHMtPnk7CgkgICAgaWYoYm94LnkyIDwgKHBSZWN0cy0+eSArIHBS ZWN0cy0+aGVpZ2h0KSkKCQlib3gueTIgPSBwUmVjdHMtPnkgKyBwUmVjdHMtPmhlaWdodDsKCX0K CgkgCgoKCSgqcEdDLT5vcHMtPlBvbHlGaWxsUmVjdCkocERyYXcsIHBHQywgblJlY3RzSW5pdCwg cFJlY3RzSW5pdCk7CgoJeyB7ICAgYm94ICAueDEgKz0gICAgIHBEcmF3ICAtPng7ICAgYm94ICAu eDIgKz0gICAgIHBEcmF3ICAtPng7ICAgYm94ICAueTEgKz0gICAgIHBEcmF3ICAtPnk7ICAgYm94 ICAueTIgKz0gICAgIHBEcmF3ICAtPnk7IH0gOyB7IEJveFB0ciBleHRlbnRzID0gJiAgICBwR0Mg IC0+cENvbXBvc2l0ZUNsaXAtPmV4dGVudHM7IGlmKCAgYm94ICAueDEgPCBleHRlbnRzLT54MSkg ICBib3ggIC54MSA9IGV4dGVudHMtPngxOyBpZiggIGJveCAgLngyID4gZXh0ZW50cy0+eDIpICAg Ym94ICAueDIgPSBleHRlbnRzLT54MjsgaWYoICBib3ggIC55MSA8IGV4dGVudHMtPnkxKSAgIGJv eCAgLnkxID0gZXh0ZW50cy0+eTE7IGlmKCAgYm94ICAueTIgPiBleHRlbnRzLT55MikgICBib3gg IC55MiA9IGV4dGVudHMtPnkyOyB9IDsgfSA7CglpZigoKCggYm94IC54MiAtICBib3ggLngxKSA+ IDApICYmICgoIGJveCAueTIgLSAgYm94IC55MSkgPiAwKSkgKQoJICAgIHNoYWRvd0RhbWFnZUJv eCAoKFdpbmRvd1B0cikgcERyYXcsICZib3gpOwogICAgfSBlbHNlCgkoKnBHQy0+b3BzLT5Qb2x5 RmlsbFJlY3QpKHBEcmF3LCBwR0MsIG5SZWN0c0luaXQsIHBSZWN0c0luaXQpOwoKICAgIHsgIHBH Q1ByaXYgLT4gIGZ1bmNzICA9ICAgIHBHQyAgLT4gIGZ1bmNzIDsgICAgcEdDICAtPiAgZnVuY3Mg ID0gICBvbGRGdW5jcyA7IH0gOyB7ICBwR0NQcml2IC0+ICBvcHMgID0gICAgcEdDICAtPiAgb3Bz IDsgICAgcEdDICAtPiAgb3BzICA9ICAgJnNoYWRvd0dDT3BzIDsgfSAgOwp9CgoKc3RhdGljIHZv aWQKc2hhZG93UG9seUZpbGxBcmMoCiAgICBEcmF3YWJsZVB0cglwRHJhdywKICAgIEdDUHRyCXBH QywKICAgIGludAkJbmFyY3MsCiAgICB4QXJjCSpwYXJjcyAKKXsKICAgIHNoYWRvd0dDUHJpdlB0 ciAgcEdDUHJpdiA9ICgoc2hhZG93R0NQcml2UHRyKSAoICAgcEdDICAgKS0+ZGV2UHJpdmF0ZXNb c2hhZG93R0NQcml2YXRlSW5kZXhdLnB0cikgIDsgR0NGdW5jcyAqb2xkRnVuY3MgPSAgcEdDIC0+ ZnVuY3M7IHsgICAgcEdDICAtPiAgZnVuY3MgID0gIHBHQ1ByaXYgLT4gIGZ1bmNzIDsgfSA7IHsg ICAgcEdDICAtPiAgb3BzICA9ICBwR0NQcml2IC0+ICBvcHMgOyB9IDsgOwogICAgKCpwR0MtPm9w cy0+UG9seUZpbGxBcmMpKHBEcmF3LCBwR0MsIG5hcmNzLCBwYXJjcyk7CiAgICB7ICBwR0NQcml2 IC0+ICBmdW5jcyAgPSAgICBwR0MgIC0+ICBmdW5jcyA7ICAgIHBHQyAgLT4gIGZ1bmNzICA9ICAg b2xkRnVuY3MgOyB9IDsgeyAgcEdDUHJpdiAtPiAgb3BzICA9ICAgIHBHQyAgLT4gIG9wcyA7ICAg IHBHQyAgLT4gIG9wcyAgPSAgICZzaGFkb3dHQ09wcyA7IH0gIDsKCiAgICBpZigxICAmJiBuYXJj cykgewoJQm94UmVjIGJveDsKCglib3gueDEgPSBwYXJjcy0+eDsKCWJveC54MiA9IGJveC54MSAr IHBhcmNzLT53aWR0aDsKCWJveC55MSA9IHBhcmNzLT55OwoJYm94LnkyID0gYm94LnkxICsgcGFy Y3MtPmhlaWdodDsKCgkgCgoJd2hpbGUoLS1uYXJjcykgewoJICAgcGFyY3MrKzsKCSAgIGlmKGJv eC54MSA+IHBhcmNzLT54KSBib3gueDEgPSBwYXJjcy0+eDsKCSAgIGlmKGJveC54MiA8IChwYXJj cy0+eCArIHBhcmNzLT53aWR0aCkpCgkJYm94LngyID0gcGFyY3MtPnggKyBwYXJjcy0+d2lkdGg7 CgkgICBpZihib3gueTEgPiBwYXJjcy0+eSkgYm94LnkxID0gcGFyY3MtPnk7CgkgICBpZihib3gu eTIgPCAocGFyY3MtPnkgKyBwYXJjcy0+aGVpZ2h0KSkKCQlib3gueTIgPSBwYXJjcy0+eSArIHBh cmNzLT5oZWlnaHQ7CiAgICAgICAgfQoKCXsgeyAgIGJveCAgLngxICs9ICAgICBwRHJhdyAgLT54 OyAgIGJveCAgLngyICs9ICAgICBwRHJhdyAgLT54OyAgIGJveCAgLnkxICs9ICAgICBwRHJhdyAg LT55OyAgIGJveCAgLnkyICs9ICAgICBwRHJhdyAgLT55OyB9IDsgeyBCb3hQdHIgZXh0ZW50cyA9 ICYgICAgcEdDICAtPnBDb21wb3NpdGVDbGlwLT5leHRlbnRzOyBpZiggIGJveCAgLngxIDwgZXh0 ZW50cy0+eDEpICAgYm94ICAueDEgPSBleHRlbnRzLT54MTsgaWYoICBib3ggIC54MiA+IGV4dGVu dHMtPngyKSAgIGJveCAgLngyID0gZXh0ZW50cy0+eDI7IGlmKCAgYm94ICAueTEgPCBleHRlbnRz LT55MSkgICBib3ggIC55MSA9IGV4dGVudHMtPnkxOyBpZiggIGJveCAgLnkyID4gZXh0ZW50cy0+ eTIpICAgYm94ICAueTIgPSBleHRlbnRzLT55MjsgfSA7IH0gOwoJaWYoKCgoIGJveCAueDIgLSAg Ym94IC54MSkgPiAwKSAmJiAoKCBib3ggLnkyIC0gIGJveCAueTEpID4gMCkpICkKCSAgIHNoYWRv d0RhbWFnZUJveCAoKFdpbmRvd1B0cikgcERyYXcsICZib3gpOwogICAgfQoKfQoKc3RhdGljIGlu dApzaGFkb3dQb2x5VGV4dDgoCiAgICBEcmF3YWJsZVB0ciBwRHJhdywKICAgIEdDUHRyCXBHQywK ICAgIGludAkJeCwgCiAgICBpbnQgCXksCiAgICBpbnQgCWNvdW50LAogICAgY2hhcgkqY2hhcnMg Cil7CiAgICBpbnQgd2lkdGg7CgogICAgc2hhZG93R0NQcml2UHRyICBwR0NQcml2ID0gKChzaGFk b3dHQ1ByaXZQdHIpICggICBwR0MgICApLT5kZXZQcml2YXRlc1tzaGFkb3dHQ1ByaXZhdGVJbmRl eF0ucHRyKSAgOyBHQ0Z1bmNzICpvbGRGdW5jcyA9ICBwR0MgLT5mdW5jczsgeyAgICBwR0MgIC0+ ICBmdW5jcyAgPSAgcEdDUHJpdiAtPiAgZnVuY3MgOyB9IDsgeyAgICBwR0MgIC0+ICBvcHMgID0g IHBHQ1ByaXYgLT4gIG9wcyA7IH0gOyA7CiAgICB3aWR0aCA9ICgqcEdDLT5vcHMtPlBvbHlUZXh0 OCkocERyYXcsIHBHQywgeCwgeSwgY291bnQsIGNoYXJzKTsKICAgIHsgIHBHQ1ByaXYgLT4gIGZ1 bmNzICA9ICAgIHBHQyAgLT4gIGZ1bmNzIDsgICAgcEdDICAtPiAgZnVuY3MgID0gICBvbGRGdW5j cyA7IH0gOyB7ICBwR0NQcml2IC0+ICBvcHMgID0gICAgcEdDICAtPiAgb3BzIDsgICAgcEdDICAt PiAgb3BzICA9ICAgJnNoYWRvd0dDT3BzIDsgfSAgOwoKICAgIHdpZHRoIC09IHg7CgogICAgaWYo MSAgJiYgKHdpZHRoID4gMCkpIHsKCUJveFJlYyBib3g7CgoJIAoJYm94LngxID0gcERyYXctPngg KyB4ICsgKCBwR0MtPmZvbnQgKS0+aW5mby5taW5ib3VuZHMuICBsZWZ0U2lkZUJlYXJpbmcgIDsK CWJveC54MiA9IHBEcmF3LT54ICsgeCArICggcEdDLT5mb250ICktPmluZm8ubWF4Ym91bmRzLiAg cmlnaHRTaWRlQmVhcmluZyAgOwoKCWlmKGNvdW50ID4gMSkgewoJICAgaWYod2lkdGggPiAwKSBi b3gueDIgKz0gd2lkdGg7CgkgICBlbHNlIGJveC54MSArPSB3aWR0aDsKCX0KCglib3gueTEgPSBw RHJhdy0+eSArIHkgLSAoIHBHQy0+Zm9udCApLT5pbmZvLm1heGJvdW5kcy4gIGFzY2VudCAgOwoJ Ym94LnkyID0gcERyYXctPnkgKyB5ICsgKCBwR0MtPmZvbnQgKS0+aW5mby5tYXhib3VuZHMuICBk ZXNjZW50ICA7CgoJeyBCb3hQdHIgZXh0ZW50cyA9ICYgIHBHQyAtPnBDb21wb3NpdGVDbGlwLT5l eHRlbnRzOyBpZiggYm94IC54MSA8IGV4dGVudHMtPngxKSAgYm94IC54MSA9IGV4dGVudHMtPngx OyBpZiggYm94IC54MiA+IGV4dGVudHMtPngyKSAgYm94IC54MiA9IGV4dGVudHMtPngyOyBpZigg Ym94IC55MSA8IGV4dGVudHMtPnkxKSAgYm94IC55MSA9IGV4dGVudHMtPnkxOyBpZiggYm94IC55 MiA+IGV4dGVudHMtPnkyKSAgYm94IC55MiA9IGV4dGVudHMtPnkyOyB9IDsKCWlmKCgoKCBib3gg LngyIC0gIGJveCAueDEpID4gMCkgJiYgKCggYm94IC55MiAtICBib3ggLnkxKSA+IDApKSApCgkg ICBzaGFkb3dEYW1hZ2VCb3ggKChXaW5kb3dQdHIpIHBEcmF3LCAmYm94KTsKICAgIH0KCiAgICBy ZXR1cm4gKHdpZHRoICsgeCk7Cn0KCnN0YXRpYyBpbnQKc2hhZG93UG9seVRleHQxNigKICAgIERy YXdhYmxlUHRyIHBEcmF3LAogICAgR0NQdHIJcEdDLAogICAgaW50CQl4LAogICAgaW50CQl5LAog ICAgaW50IAljb3VudCwKICAgIHVuc2lnbmVkIHNob3J0ICpjaGFycyAKKXsKICAgIGludCB3aWR0 aDsKCiAgICBzaGFkb3dHQ1ByaXZQdHIgIHBHQ1ByaXYgPSAoKHNoYWRvd0dDUHJpdlB0cikgKCAg IHBHQyAgICktPmRldlByaXZhdGVzW3NoYWRvd0dDUHJpdmF0ZUluZGV4XS5wdHIpICA7IEdDRnVu Y3MgKm9sZEZ1bmNzID0gIHBHQyAtPmZ1bmNzOyB7ICAgIHBHQyAgLT4gIGZ1bmNzICA9ICBwR0NQ cml2IC0+ICBmdW5jcyA7IH0gOyB7ICAgIHBHQyAgLT4gIG9wcyAgPSAgcEdDUHJpdiAtPiAgb3Bz IDsgfSA7IDsKICAgIHdpZHRoID0gKCpwR0MtPm9wcy0+UG9seVRleHQxNikocERyYXcsIHBHQywg eCwgeSwgY291bnQsIGNoYXJzKTsKICAgIHsgIHBHQ1ByaXYgLT4gIGZ1bmNzICA9ICAgIHBHQyAg LT4gIGZ1bmNzIDsgICAgcEdDICAtPiAgZnVuY3MgID0gICBvbGRGdW5jcyA7IH0gOyB7ICBwR0NQ cml2IC0+ICBvcHMgID0gICAgcEdDICAtPiAgb3BzIDsgICAgcEdDICAtPiAgb3BzICA9ICAgJnNo YWRvd0dDT3BzIDsgfSAgOwoKICAgIHdpZHRoIC09IHg7CgogICAgaWYoMSAgJiYgKHdpZHRoID4g MCkpIHsKCUJveFJlYyBib3g7CgoJIAoJYm94LngxID0gcERyYXctPnggKyB4ICsgKCBwR0MtPmZv bnQgKS0+aW5mby5taW5ib3VuZHMuICBsZWZ0U2lkZUJlYXJpbmcgIDsKCWJveC54MiA9IHBEcmF3 LT54ICsgeCArICggcEdDLT5mb250ICktPmluZm8ubWF4Ym91bmRzLiAgcmlnaHRTaWRlQmVhcmlu ZyAgOwoKCWlmKGNvdW50ID4gMSkgewoJICAgaWYod2lkdGggPiAwKSBib3gueDIgKz0gd2lkdGg7 CgkgICBlbHNlIGJveC54MSArPSB3aWR0aDsKCX0KCglib3gueTEgPSBwRHJhdy0+eSArIHkgLSAo IHBHQy0+Zm9udCApLT5pbmZvLm1heGJvdW5kcy4gIGFzY2VudCAgOwoJYm94LnkyID0gcERyYXct PnkgKyB5ICsgKCBwR0MtPmZvbnQgKS0+aW5mby5tYXhib3VuZHMuICBkZXNjZW50ICA7CgoJeyBC b3hQdHIgZXh0ZW50cyA9ICYgIHBHQyAtPnBDb21wb3NpdGVDbGlwLT5leHRlbnRzOyBpZiggYm94 IC54MSA8IGV4dGVudHMtPngxKSAgYm94IC54MSA9IGV4dGVudHMtPngxOyBpZiggYm94IC54MiA+ IGV4dGVudHMtPngyKSAgYm94IC54MiA9IGV4dGVudHMtPngyOyBpZiggYm94IC55MSA8IGV4dGVu dHMtPnkxKSAgYm94IC55MSA9IGV4dGVudHMtPnkxOyBpZiggYm94IC55MiA+IGV4dGVudHMtPnky KSAgYm94IC55MiA9IGV4dGVudHMtPnkyOyB9IDsKCWlmKCgoKCBib3ggLngyIC0gIGJveCAueDEp ID4gMCkgJiYgKCggYm94IC55MiAtICBib3ggLnkxKSA+IDApKSApCgkgICBzaGFkb3dEYW1hZ2VC b3ggKChXaW5kb3dQdHIpIHBEcmF3LCAmYm94KTsKICAgIH0KCiAgICByZXR1cm4gKHdpZHRoICsg eCk7Cn0KCnN0YXRpYyB2b2lkCnNoYWRvd0ltYWdlVGV4dDgoCiAgICBEcmF3YWJsZVB0ciBwRHJh dywKICAgIEdDUHRyCXBHQywKICAgIGludAkJeCwgCiAgICBpbnQJCXksCiAgICBpbnQgCWNvdW50 LAogICAgY2hhcgkqY2hhcnMgCil7CiAgICBzaGFkb3dHQ1ByaXZQdHIgIHBHQ1ByaXYgPSAoKHNo YWRvd0dDUHJpdlB0cikgKCAgIHBHQyAgICktPmRldlByaXZhdGVzW3NoYWRvd0dDUHJpdmF0ZUlu ZGV4XS5wdHIpICA7IEdDRnVuY3MgKm9sZEZ1bmNzID0gIHBHQyAtPmZ1bmNzOyB7ICAgIHBHQyAg LT4gIGZ1bmNzICA9ICBwR0NQcml2IC0+ICBmdW5jcyA7IH0gOyB7ICAgIHBHQyAgLT4gIG9wcyAg PSAgcEdDUHJpdiAtPiAgb3BzIDsgfSA7IDsKICAgICgqcEdDLT5vcHMtPkltYWdlVGV4dDgpKHBE cmF3LCBwR0MsIHgsIHksIGNvdW50LCBjaGFycyk7CiAgICB7ICBwR0NQcml2IC0+ICBmdW5jcyAg PSAgICBwR0MgIC0+ICBmdW5jcyA7ICAgIHBHQyAgLT4gIGZ1bmNzICA9ICAgb2xkRnVuY3MgOyB9 IDsgeyAgcEdDUHJpdiAtPiAgb3BzICA9ICAgIHBHQyAgLT4gIG9wcyA7ICAgIHBHQyAgLT4gIG9w cyAgPSAgICZzaGFkb3dHQ09wcyA7IH0gIDsKCiAgICBpZigxICAmJiBjb3VudCkgewoJaW50IHRv cCwgYm90LCBNaW4sIE1heDsKCUJveFJlYyBib3g7CgoJdG9wID0gKCgoICggcEdDLT5mb250ICkt PmluZm8ubWF4Ym91bmRzLiAgYXNjZW50ICAgKSA+ICggICggcEdDLT5mb250ICktPmluZm8uZm9u dEFzY2VudCAgKSkgPyAoICggcEdDLT5mb250ICktPmluZm8ubWF4Ym91bmRzLiAgYXNjZW50ICAg KSA6ICggICggcEdDLT5mb250ICktPmluZm8uZm9udEFzY2VudCAgKSkgOwoJYm90ID0gKCgoICgg cEdDLT5mb250ICktPmluZm8ubWF4Ym91bmRzLiAgZGVzY2VudCAgICkgPiAoICAoIHBHQy0+Zm9u dCApLT5pbmZvLmZvbnREZXNjZW50ICApKSA/ICggKCBwR0MtPmZvbnQgKS0+aW5mby5tYXhib3Vu ZHMuICBkZXNjZW50ICAgKSA6ICggICggcEdDLT5mb250ICktPmluZm8uZm9udERlc2NlbnQgICkp IDsKCglNaW4gPSBjb3VudCAqICggcEdDLT5mb250ICktPmluZm8ubWluYm91bmRzLiAgY2hhcmFj dGVyV2lkdGggIDsKCWlmKE1pbiA+IDApIE1pbiA9IDA7CglNYXggPSBjb3VudCAqICggcEdDLT5m b250ICktPmluZm8ubWF4Ym91bmRzLiAgY2hhcmFjdGVyV2lkdGggIDsJCglpZihNYXggPCAwKSBN YXggPSAwOwoKCSAKCWJveC54MSA9IHBEcmF3LT54ICsgeCArIE1pbiArCgkJKCBwR0MtPmZvbnQg KS0+aW5mby5taW5ib3VuZHMuICBsZWZ0U2lkZUJlYXJpbmcgIDsKCWJveC54MiA9IHBEcmF3LT54 ICsgeCArIE1heCArIAoJCSggcEdDLT5mb250ICktPmluZm8ubWF4Ym91bmRzLiAgcmlnaHRTaWRl QmVhcmluZyAgOwoKCWJveC55MSA9IHBEcmF3LT55ICsgeSAtIHRvcDsKCWJveC55MiA9IHBEcmF3 LT55ICsgeSArIGJvdDsKCgl7IEJveFB0ciBleHRlbnRzID0gJiAgcEdDIC0+cENvbXBvc2l0ZUNs aXAtPmV4dGVudHM7IGlmKCBib3ggLngxIDwgZXh0ZW50cy0+eDEpICBib3ggLngxID0gZXh0ZW50 cy0+eDE7IGlmKCBib3ggLngyID4gZXh0ZW50cy0+eDIpICBib3ggLngyID0gZXh0ZW50cy0+eDI7 IGlmKCBib3ggLnkxIDwgZXh0ZW50cy0+eTEpICBib3ggLnkxID0gZXh0ZW50cy0+eTE7IGlmKCBi b3ggLnkyID4gZXh0ZW50cy0+eTIpICBib3ggLnkyID0gZXh0ZW50cy0+eTI7IH0gOwoJaWYoKCgo IGJveCAueDIgLSAgYm94IC54MSkgPiAwKSAmJiAoKCBib3ggLnkyIC0gIGJveCAueTEpID4gMCkp ICkKCSAgIHNoYWRvd0RhbWFnZUJveCAoKFdpbmRvd1B0cikgcERyYXcsICZib3gpOwogICAgfQp9 CnN0YXRpYyB2b2lkCnNoYWRvd0ltYWdlVGV4dDE2KAogICAgRHJhd2FibGVQdHIgcERyYXcsCiAg ICBHQ1B0cglwR0MsCiAgICBpbnQJCXgsCiAgICBpbnQJCXksCiAgICBpbnQgCWNvdW50LAogICAg dW5zaWduZWQgc2hvcnQgKmNoYXJzIAopewogICAgc2hhZG93R0NQcml2UHRyICBwR0NQcml2ID0g KChzaGFkb3dHQ1ByaXZQdHIpICggICBwR0MgICApLT5kZXZQcml2YXRlc1tzaGFkb3dHQ1ByaXZh dGVJbmRleF0ucHRyKSAgOyBHQ0Z1bmNzICpvbGRGdW5jcyA9ICBwR0MgLT5mdW5jczsgeyAgICBw R0MgIC0+ICBmdW5jcyAgPSAgcEdDUHJpdiAtPiAgZnVuY3MgOyB9IDsgeyAgICBwR0MgIC0+ICBv cHMgID0gIHBHQ1ByaXYgLT4gIG9wcyA7IH0gOyA7CiAgICAoKnBHQy0+b3BzLT5JbWFnZVRleHQx NikocERyYXcsIHBHQywgeCwgeSwgY291bnQsIGNoYXJzKTsKICAgIHsgIHBHQ1ByaXYgLT4gIGZ1 bmNzICA9ICAgIHBHQyAgLT4gIGZ1bmNzIDsgICAgcEdDICAtPiAgZnVuY3MgID0gICBvbGRGdW5j cyA7IH0gOyB7ICBwR0NQcml2IC0+ICBvcHMgID0gICAgcEdDICAtPiAgb3BzIDsgICAgcEdDICAt PiAgb3BzICA9ICAgJnNoYWRvd0dDT3BzIDsgfSAgOwoKICAgIGlmKDEgICYmIGNvdW50KSB7Cglp bnQgdG9wLCBib3QsIE1pbiwgTWF4OwoJQm94UmVjIGJveDsKCgl0b3AgPSAoKCggKCBwR0MtPmZv bnQgKS0+aW5mby5tYXhib3VuZHMuICBhc2NlbnQgICApID4gKCAgKCBwR0MtPmZvbnQgKS0+aW5m by5mb250QXNjZW50ICApKSA/ICggKCBwR0MtPmZvbnQgKS0+aW5mby5tYXhib3VuZHMuICBhc2Nl bnQgICApIDogKCAgKCBwR0MtPmZvbnQgKS0+aW5mby5mb250QXNjZW50ICApKSA7Cglib3QgPSAo KCggKCBwR0MtPmZvbnQgKS0+aW5mby5tYXhib3VuZHMuICBkZXNjZW50ICAgKSA+ICggICggcEdD LT5mb250ICktPmluZm8uZm9udERlc2NlbnQgICkpID8gKCAoIHBHQy0+Zm9udCApLT5pbmZvLm1h eGJvdW5kcy4gIGRlc2NlbnQgICApIDogKCAgKCBwR0MtPmZvbnQgKS0+aW5mby5mb250RGVzY2Vu dCAgKSkgOwoKCU1pbiA9IGNvdW50ICogKCBwR0MtPmZvbnQgKS0+aW5mby5taW5ib3VuZHMuICBj aGFyYWN0ZXJXaWR0aCAgOwoJaWYoTWluID4gMCkgTWluID0gMDsKCU1heCA9IGNvdW50ICogKCBw R0MtPmZvbnQgKS0+aW5mby5tYXhib3VuZHMuICBjaGFyYWN0ZXJXaWR0aCAgOwkKCWlmKE1heCA8 IDApIE1heCA9IDA7CgoJIAoJYm94LngxID0gcERyYXctPnggKyB4ICsgTWluICsKCQkoIHBHQy0+ Zm9udCApLT5pbmZvLm1pbmJvdW5kcy4gIGxlZnRTaWRlQmVhcmluZyAgOwoJYm94LngyID0gcERy YXctPnggKyB4ICsgTWF4ICsgCgkJKCBwR0MtPmZvbnQgKS0+aW5mby5tYXhib3VuZHMuICByaWdo dFNpZGVCZWFyaW5nICA7CgoJYm94LnkxID0gcERyYXctPnkgKyB5IC0gdG9wOwoJYm94LnkyID0g cERyYXctPnkgKyB5ICsgYm90OwoKCXsgQm94UHRyIGV4dGVudHMgPSAmICBwR0MgLT5wQ29tcG9z aXRlQ2xpcC0+ZXh0ZW50czsgaWYoIGJveCAueDEgPCBleHRlbnRzLT54MSkgIGJveCAueDEgPSBl eHRlbnRzLT54MTsgaWYoIGJveCAueDIgPiBleHRlbnRzLT54MikgIGJveCAueDIgPSBleHRlbnRz LT54MjsgaWYoIGJveCAueTEgPCBleHRlbnRzLT55MSkgIGJveCAueTEgPSBleHRlbnRzLT55MTsg aWYoIGJveCAueTIgPiBleHRlbnRzLT55MikgIGJveCAueTIgPSBleHRlbnRzLT55MjsgfSA7Cglp ZigoKCggYm94IC54MiAtICBib3ggLngxKSA+IDApICYmICgoIGJveCAueTIgLSAgYm94IC55MSkg PiAwKSkgKQoJICAgc2hhZG93RGFtYWdlQm94ICgoV2luZG93UHRyKSBwRHJhdywgJmJveCk7CiAg ICB9Cn0KCgpzdGF0aWMgdm9pZApzaGFkb3dJbWFnZUdseXBoQmx0KAogICAgRHJhd2FibGVQdHIg cERyYXcsCiAgICBHQ1B0ciBwR0MsCiAgICBpbnQgeCwgaW50IHksCiAgICB1bnNpZ25lZCBpbnQg bmdseXBoLAogICAgQ2hhckluZm9QdHIgKnBwY2ksCiAgICBwb2ludGVyIHBnbHlwaEJhc2UgCil7 CiAgICBzaGFkb3dHQ1ByaXZQdHIgIHBHQ1ByaXYgPSAoKHNoYWRvd0dDUHJpdlB0cikgKCAgIHBH QyAgICktPmRldlByaXZhdGVzW3NoYWRvd0dDUHJpdmF0ZUluZGV4XS5wdHIpICA7IEdDRnVuY3Mg Km9sZEZ1bmNzID0gIHBHQyAtPmZ1bmNzOyB7ICAgIHBHQyAgLT4gIGZ1bmNzICA9ICBwR0NQcml2 IC0+ICBmdW5jcyA7IH0gOyB7ICAgIHBHQyAgLT4gIG9wcyAgPSAgcEdDUHJpdiAtPiAgb3BzIDsg fSA7IDsKICAgICgqcEdDLT5vcHMtPkltYWdlR2x5cGhCbHQpKHBEcmF3LCBwR0MsIHgsIHksIG5n bHlwaCwgCgkJCQkJcHBjaSwgcGdseXBoQmFzZSk7CiAgICB7ICBwR0NQcml2IC0+ICBmdW5jcyAg PSAgICBwR0MgIC0+ICBmdW5jcyA7ICAgIHBHQyAgLT4gIGZ1bmNzICA9ICAgb2xkRnVuY3MgOyB9 IDsgeyAgcEdDUHJpdiAtPiAgb3BzICA9ICAgIHBHQyAgLT4gIG9wcyA7ICAgIHBHQyAgLT4gIG9w cyAgPSAgICZzaGFkb3dHQ09wcyA7IH0gIDsKCiAgICBpZigxICAmJiBuZ2x5cGgpIHsKCWludCB0 b3AsIGJvdCwgd2lkdGggPSAwOwoJQm94UmVjIGJveDsKCgl0b3AgPSAoKCggKCBwR0MtPmZvbnQg KS0+aW5mby5tYXhib3VuZHMuICBhc2NlbnQgICApID4gKCAgKCBwR0MtPmZvbnQgKS0+aW5mby5m b250QXNjZW50ICApKSA/ICggKCBwR0MtPmZvbnQgKS0+aW5mby5tYXhib3VuZHMuICBhc2NlbnQg ICApIDogKCAgKCBwR0MtPmZvbnQgKS0+aW5mby5mb250QXNjZW50ICApKSA7Cglib3QgPSAoKCgg KCBwR0MtPmZvbnQgKS0+aW5mby5tYXhib3VuZHMuICBkZXNjZW50ICAgKSA+ICggICggcEdDLT5m b250ICktPmluZm8uZm9udERlc2NlbnQgICkpID8gKCAoIHBHQy0+Zm9udCApLT5pbmZvLm1heGJv dW5kcy4gIGRlc2NlbnQgICApIDogKCAgKCBwR0MtPmZvbnQgKS0+aW5mby5mb250RGVzY2VudCAg KSkgOwoKCWJveC54MSA9IHBwY2lbMF0tPm1ldHJpY3MubGVmdFNpZGVCZWFyaW5nOwoJaWYoYm94 LngxID4gMCkgYm94LngxID0gMDsKCWJveC54MiA9IHBwY2lbbmdseXBoIC0gMV0tPm1ldHJpY3Mu cmlnaHRTaWRlQmVhcmluZyAtIAoJCXBwY2lbbmdseXBoIC0gMV0tPm1ldHJpY3MuY2hhcmFjdGVy V2lkdGg7CglpZihib3gueDIgPCAwKSBib3gueDIgPSAwOwoKCWJveC54MiArPSBwRHJhdy0+eCAr IHg7Cglib3gueDEgKz0gcERyYXctPnggKyB4OwoJICAgCgl3aGlsZShuZ2x5cGgtLSkgewoJICAg IHdpZHRoICs9ICgqcHBjaSktPm1ldHJpY3MuY2hhcmFjdGVyV2lkdGg7CgkgICAgcHBjaSsrOwoJ fQoKCWlmKHdpZHRoID4gMCkgCgkgICBib3gueDIgKz0gd2lkdGg7CgllbHNlIAoJICAgYm94Lngx ICs9IHdpZHRoOwoKCWJveC55MSA9IHBEcmF3LT55ICsgeSAtIHRvcDsKCWJveC55MiA9IHBEcmF3 LT55ICsgeSArIGJvdDsKCgl7IEJveFB0ciBleHRlbnRzID0gJiAgcEdDIC0+cENvbXBvc2l0ZUNs aXAtPmV4dGVudHM7IGlmKCBib3ggLngxIDwgZXh0ZW50cy0+eDEpICBib3ggLngxID0gZXh0ZW50 cy0+eDE7IGlmKCBib3ggLngyID4gZXh0ZW50cy0+eDIpICBib3ggLngyID0gZXh0ZW50cy0+eDI7 IGlmKCBib3ggLnkxIDwgZXh0ZW50cy0+eTEpICBib3ggLnkxID0gZXh0ZW50cy0+eTE7IGlmKCBi b3ggLnkyID4gZXh0ZW50cy0+eTIpICBib3ggLnkyID0gZXh0ZW50cy0+eTI7IH0gOwoJaWYoKCgo IGJveCAueDIgLSAgYm94IC54MSkgPiAwKSAmJiAoKCBib3ggLnkyIC0gIGJveCAueTEpID4gMCkp ICkKCSAgIHNoYWRvd0RhbWFnZUJveCAoKFdpbmRvd1B0cikgcERyYXcsICZib3gpOwogICAgfQp9 CgpzdGF0aWMgdm9pZApzaGFkb3dQb2x5R2x5cGhCbHQoCiAgICBEcmF3YWJsZVB0ciBwRHJhdywK ICAgIEdDUHRyIHBHQywKICAgIGludCB4LCBpbnQgeSwKICAgIHVuc2lnbmVkIGludCBuZ2x5cGgs CiAgICBDaGFySW5mb1B0ciAqcHBjaSwKICAgIHBvaW50ZXIgcGdseXBoQmFzZSAKKXsKICAgIHNo YWRvd0dDUHJpdlB0ciAgcEdDUHJpdiA9ICgoc2hhZG93R0NQcml2UHRyKSAoICAgcEdDICAgKS0+ ZGV2UHJpdmF0ZXNbc2hhZG93R0NQcml2YXRlSW5kZXhdLnB0cikgIDsgR0NGdW5jcyAqb2xkRnVu Y3MgPSAgcEdDIC0+ZnVuY3M7IHsgICAgcEdDICAtPiAgZnVuY3MgID0gIHBHQ1ByaXYgLT4gIGZ1 bmNzIDsgfSA7IHsgICAgcEdDICAtPiAgb3BzICA9ICBwR0NQcml2IC0+ICBvcHMgOyB9IDsgOwog ICAgKCpwR0MtPm9wcy0+UG9seUdseXBoQmx0KShwRHJhdywgcEdDLCB4LCB5LCBuZ2x5cGgsIAoJ CQkJcHBjaSwgcGdseXBoQmFzZSk7CiAgICB7ICBwR0NQcml2IC0+ICBmdW5jcyAgPSAgICBwR0Mg IC0+ICBmdW5jcyA7ICAgIHBHQyAgLT4gIGZ1bmNzICA9ICAgb2xkRnVuY3MgOyB9IDsgeyAgcEdD UHJpdiAtPiAgb3BzICA9ICAgIHBHQyAgLT4gIG9wcyA7ICAgIHBHQyAgLT4gIG9wcyAgPSAgICZz aGFkb3dHQ09wcyA7IH0gIDsKCiAgICBpZigxICAmJiBuZ2x5cGgpIHsKCUJveFJlYyBib3g7CgoJ IAoJYm94LngxID0gcERyYXctPnggKyB4ICsgcHBjaVswXS0+bWV0cmljcy5sZWZ0U2lkZUJlYXJp bmc7Cglib3gueDIgPSBwRHJhdy0+eCArIHggKyBwcGNpW25nbHlwaCAtIDFdLT5tZXRyaWNzLnJp Z2h0U2lkZUJlYXJpbmc7CgoJaWYobmdseXBoID4gMSkgewoJICAgIGludCB3aWR0aCA9IDA7CgoJ ICAgIHdoaWxlKC0tbmdseXBoKSB7IAoJCXdpZHRoICs9ICgqcHBjaSktPm1ldHJpY3MuY2hhcmFj dGVyV2lkdGg7CgkJcHBjaSsrOwoJICAgIH0KCQoJICAgIGlmKHdpZHRoID4gMCkgYm94LngyICs9 IHdpZHRoOwoJICAgIGVsc2UgYm94LngxICs9IHdpZHRoOwoJfQoKCWJveC55MSA9IHBEcmF3LT55 ICsgeSAtICggcEdDLT5mb250ICktPmluZm8ubWF4Ym91bmRzLiAgYXNjZW50ICA7Cglib3gueTIg PSBwRHJhdy0+eSArIHkgKyAoIHBHQy0+Zm9udCApLT5pbmZvLm1heGJvdW5kcy4gIGRlc2NlbnQg IDsKCgl7IEJveFB0ciBleHRlbnRzID0gJiAgcEdDIC0+cENvbXBvc2l0ZUNsaXAtPmV4dGVudHM7 IGlmKCBib3ggLngxIDwgZXh0ZW50cy0+eDEpICBib3ggLngxID0gZXh0ZW50cy0+eDE7IGlmKCBi b3ggLngyID4gZXh0ZW50cy0+eDIpICBib3ggLngyID0gZXh0ZW50cy0+eDI7IGlmKCBib3ggLnkx IDwgZXh0ZW50cy0+eTEpICBib3ggLnkxID0gZXh0ZW50cy0+eTE7IGlmKCBib3ggLnkyID4gZXh0 ZW50cy0+eTIpICBib3ggLnkyID0gZXh0ZW50cy0+eTI7IH0gOwoJaWYoKCgoIGJveCAueDIgLSAg Ym94IC54MSkgPiAwKSAmJiAoKCBib3ggLnkyIC0gIGJveCAueTEpID4gMCkpICkKCSAgIHNoYWRv d0RhbWFnZUJveCAoKFdpbmRvd1B0cikgcERyYXcsICZib3gpOwogICAgfQp9CgpzdGF0aWMgdm9p ZApzaGFkb3dQdXNoUGl4ZWxzKAogICAgR0NQdHIJcEdDLAogICAgUGl4bWFwUHRyCXBCaXRNYXAs CiAgICBEcmF3YWJsZVB0ciBwRHJhdywKICAgIGludAlkeCwgaW50IGR5LCBpbnQgeE9yZywgaW50 IHlPcmcgCil7CiAgICBzaGFkb3dHQ1ByaXZQdHIgIHBHQ1ByaXYgPSAoKHNoYWRvd0dDUHJpdlB0 cikgKCAgIHBHQyAgICktPmRldlByaXZhdGVzW3NoYWRvd0dDUHJpdmF0ZUluZGV4XS5wdHIpICA7 IEdDRnVuY3MgKm9sZEZ1bmNzID0gIHBHQyAtPmZ1bmNzOyB7ICAgIHBHQyAgLT4gIGZ1bmNzICA9 ICBwR0NQcml2IC0+ICBmdW5jcyA7IH0gOyB7ICAgIHBHQyAgLT4gIG9wcyAgPSAgcEdDUHJpdiAt PiAgb3BzIDsgfSA7IDsKICAgICgqcEdDLT5vcHMtPlB1c2hQaXhlbHMpKHBHQywgcEJpdE1hcCwg cERyYXcsIGR4LCBkeSwgeE9yZywgeU9yZyk7CiAgICB7ICBwR0NQcml2IC0+ICBmdW5jcyAgPSAg ICBwR0MgIC0+ICBmdW5jcyA7ICAgIHBHQyAgLT4gIGZ1bmNzICA9ICAgb2xkRnVuY3MgOyB9IDsg eyAgcEdDUHJpdiAtPiAgb3BzICA9ICAgIHBHQyAgLT4gIG9wcyA7ICAgIHBHQyAgLT4gIG9wcyAg PSAgICZzaGFkb3dHQ09wcyA7IH0gIDsKCiAgICBpZigxICkgewoJQm94UmVjIGJveDsKCglib3gu eDEgPSB4T3JnICsgcERyYXctPng7Cglib3gueDIgPSBib3gueDEgKyBkeDsKCWJveC55MSA9IHlP cmcgKyBwRHJhdy0+eTsKCWJveC55MiA9IGJveC55MSArIGR5OwoKCXsgQm94UHRyIGV4dGVudHMg PSAmICBwR0MgLT5wQ29tcG9zaXRlQ2xpcC0+ZXh0ZW50czsgaWYoIGJveCAueDEgPCBleHRlbnRz LT54MSkgIGJveCAueDEgPSBleHRlbnRzLT54MTsgaWYoIGJveCAueDIgPiBleHRlbnRzLT54Mikg IGJveCAueDIgPSBleHRlbnRzLT54MjsgaWYoIGJveCAueTEgPCBleHRlbnRzLT55MSkgIGJveCAu eTEgPSBleHRlbnRzLT55MTsgaWYoIGJveCAueTIgPiBleHRlbnRzLT55MikgIGJveCAueTIgPSBl eHRlbnRzLT55MjsgfSA7CglpZigoKCggYm94IC54MiAtICBib3ggLngxKSA+IDApICYmICgoIGJv eCAueTIgLSAgYm94IC55MSkgPiAwKSkgKQoJICAgc2hhZG93RGFtYWdlQm94ICgoV2luZG93UHRy KSBwRHJhdywgJmJveCk7CiAgICB9Cn0KCgpzdGF0aWMgdm9pZApzaGFkb3dQYWludFdpbmRvdygK ICBXaW5kb3dQdHIgcFdpbmRvdywKICBSZWdpb25QdHIgcHJnbiwKICBpbnQgd2hhdCAKKXsKICAg IFNjcmVlblB0ciBwU2NyZWVuID0gcFdpbmRvdy0+ZHJhd2FibGUucFNjcmVlbjsKICAgIHNoYWRv d1NjclByaXZQdHIgICAgcFNjclByaXYgPSAoKHNoYWRvd1NjclByaXZQdHIpICggIHBTY3JlZW4g ICktPmRldlByaXZhdGVzW3NoYWRvd1NjclByaXZhdGVJbmRleF0ucHRyKSAgOwogICAgCiAgICBp Zih3aGF0ID09IDAgKSB7Cgl7ICAgcFNjcmVlbiAtPiAgUGFpbnRXaW5kb3dCYWNrZ3JvdW5kICA9 ICBwU2NyUHJpdiAtPiAgUGFpbnRXaW5kb3dCYWNrZ3JvdW5kIDsgfSA7CgkoKnBTY3JlZW4tPlBh aW50V2luZG93QmFja2dyb3VuZCkgKHBXaW5kb3csIHByZ24sIHdoYXQpOwoJeyAgcFNjclByaXYg LT4gIFBhaW50V2luZG93QmFja2dyb3VuZCAgPSAgIHBTY3JlZW4gLT4gIFBhaW50V2luZG93QmFj a2dyb3VuZCA7ICAgcFNjcmVlbiAtPiAgUGFpbnRXaW5kb3dCYWNrZ3JvdW5kICA9ICAgc2hhZG93 UGFpbnRXaW5kb3cgOyB9IDsKICAgIH0gZWxzZSB7Cgl7ICAgcFNjcmVlbiAtPiAgUGFpbnRXaW5k b3dCb3JkZXIgID0gIHBTY3JQcml2IC0+ICBQYWludFdpbmRvd0JvcmRlciA7IH0gOwoJKCpwU2Ny ZWVuLT5QYWludFdpbmRvd0JvcmRlcikgKHBXaW5kb3csIHByZ24sIHdoYXQpOwoJeyAgcFNjclBy aXYgLT4gIFBhaW50V2luZG93Qm9yZGVyICA9ICAgcFNjcmVlbiAtPiAgUGFpbnRXaW5kb3dCb3Jk ZXIgOyAgIHBTY3JlZW4gLT4gIFBhaW50V2luZG93Qm9yZGVyICA9ICAgc2hhZG93UGFpbnRXaW5k b3cgOyB9IDsKICAgIH0KICAgIHNoYWRvd0RhbWFnZVJlZ2lvbiAocFdpbmRvdywgcHJnbik7Cn0K CgpzdGF0aWMgdm9pZCAKc2hhZG93Q29weVdpbmRvdygKICAgV2luZG93UHRyIHBXaW5kb3csCiAg IEREWFBvaW50UmVjIHB0T2xkT3JnLAogICBSZWdpb25QdHIgcHJnbiAKKXsKICAgIFNjcmVlblB0 ciBwU2NyZWVuID0gcFdpbmRvdy0+ZHJhd2FibGUucFNjcmVlbjsKICAgIHNoYWRvd1NjclByaXZQ dHIgICAgcFNjclByaXYgPSAoKHNoYWRvd1NjclByaXZQdHIpICggIHBTY3JlZW4gICktPmRldlBy aXZhdGVzW3NoYWRvd1NjclByaXZhdGVJbmRleF0ucHRyKSAgOwoKICAgIHsgICBwU2NyZWVuIC0+ ICBDb3B5V2luZG93ICA9ICBwU2NyUHJpdiAtPiAgQ29weVdpbmRvdyA7IH0gOwogICAgKCpwU2Ny ZWVuLT5Db3B5V2luZG93KSAocFdpbmRvdywgcHRPbGRPcmcsIHByZ24pOwogICAgeyAgcFNjclBy aXYgLT4gIENvcHlXaW5kb3cgID0gICBwU2NyZWVuIC0+ICBDb3B5V2luZG93IDsgICBwU2NyZWVu IC0+ICBDb3B5V2luZG93ICA9ICAgc2hhZG93Q29weVdpbmRvdyA7IH0gOwogICAgc2hhZG93RGFt YWdlUmVnaW9uIChwV2luZG93LCBwcmduKTsKfQoKR0NPcHMgc2hhZG93R0NPcHMgPSB7CiAgICBz aGFkb3dGaWxsU3BhbnMsIHNoYWRvd1NldFNwYW5zLCAKICAgIHNoYWRvd1B1dEltYWdlLCBzaGFk b3dDb3B5QXJlYSwgCiAgICBzaGFkb3dDb3B5UGxhbmUsIHNoYWRvd1BvbHlQb2ludCwgCiAgICBz aGFkb3dQb2x5bGluZXMsIHNoYWRvd1BvbHlTZWdtZW50LCAKICAgIHNoYWRvd1BvbHlSZWN0YW5n bGUsIHNoYWRvd1BvbHlBcmMsIAogICAgc2hhZG93RmlsbFBvbHlnb24sIHNoYWRvd1BvbHlGaWxs UmVjdCwgCiAgICBzaGFkb3dQb2x5RmlsbEFyYywgc2hhZG93UG9seVRleHQ4LCAKICAgIHNoYWRv d1BvbHlUZXh0MTYsIHNoYWRvd0ltYWdlVGV4dDgsIAogICAgc2hhZG93SW1hZ2VUZXh0MTYsIHNo YWRvd0ltYWdlR2x5cGhCbHQsIAogICAgc2hhZG93UG9seUdseXBoQmx0LCBzaGFkb3dQdXNoUGl4 ZWxzLAoKCgogICAgeygodm9pZCAqKTApIH0JCSAKfTsKCnN0YXRpYyB2b2lkCnNoYWRvd0dldElt YWdlIChEcmF3YWJsZVB0ciBwRHJhd2FibGUsCgkJaW50IHN4LAoJCWludCBzeSwKCQlpbnQgdywK CQlpbnQgaCwKCQl1bnNpZ25lZCBpbnQgZm9ybWF0LAoJCXVuc2lnbmVkIGxvbmcgcGxhbmVNYXNr LAoJCWNoYXIgKiBwZHN0TGluZSkKewogICAgU2NyZWVuUHRyIHBTY3JlZW4gPSBwRHJhd2FibGUt PnBTY3JlZW47CiAgICBzaGFkb3dTY3JQcml2UHRyICAgIHBTY3JQcml2ID0gKChzaGFkb3dTY3JQ cml2UHRyKSAoICBwU2NyZWVuICApLT5kZXZQcml2YXRlc1tzaGFkb3dTY3JQcml2YXRlSW5kZXhd LnB0cikgIDsKCiAgICAgCiAgICBpZiAocERyYXdhYmxlLT50eXBlID09IDAgKQoJc2hhZG93UmVk aXNwbGF5IChwU2NyZWVuKTsKICAgIHsgICBwU2NyZWVuIC0+ICBHZXRJbWFnZSAgPSAgcFNjclBy aXYgLT4gIEdldEltYWdlIDsgfSA7CiAgICAoKnBTY3JlZW4tPkdldEltYWdlKSAocERyYXdhYmxl LCBzeCwgc3ksIHcsIGgsIGZvcm1hdCwgcGxhbmVNYXNrLCBwZHN0TGluZSk7CiAgICB7ICBwU2Ny UHJpdiAtPiAgR2V0SW1hZ2UgID0gICBwU2NyZWVuIC0+ICBHZXRJbWFnZSA7ICAgcFNjcmVlbiAt PiAgR2V0SW1hZ2UgID0gICBzaGFkb3dHZXRJbWFnZSA7IH0gOwp9CgoJCQpzdGF0aWMgQm9vbApz aGFkb3dDbG9zZVNjcmVlbiAoaW50IGksIFNjcmVlblB0ciBwU2NyZWVuKQp7CiAgICBzaGFkb3dT Y3JQcml2UHRyICAgIHBTY3JQcml2ID0gKChzaGFkb3dTY3JQcml2UHRyKSAoICBwU2NyZWVuICAp LT5kZXZQcml2YXRlc1tzaGFkb3dTY3JQcml2YXRlSW5kZXhdLnB0cikgIDsKCiAgICB7ICAgcFNj cmVlbiAtPiAgQ2xvc2VTY3JlZW4gID0gIHBTY3JQcml2IC0+ICBDbG9zZVNjcmVlbiA7IH0gOwog ICAgWGZyZWUoKHBvaW50ZXIpKCBwU2NyUHJpdiApKSA7CiAgICByZXR1cm4gKCpwU2NyZWVuLT5D bG9zZVNjcmVlbikgKGksIHBTY3JlZW4pOyAgICAKfQoKQm9vbApzaGFkb3dJbml0IChTY3JlZW5Q dHIgcFNjcmVlbiwgU2hhZG93VXBkYXRlUHJvYyB1cGRhdGUsIFNoYWRvd1dpbmRvd1Byb2Mgd2lu ZG93KQp7CiAgICBzaGFkb3dTY3JQcml2UHRyCXBTY3JQcml2OwoKICAgIFBpY3R1cmVTY3JlZW5Q dHIJcHMgPSAoKFBpY3R1cmVTY3JlZW5QdHIpICgoIHBTY3JlZW4gKS0+ZGV2UHJpdmF0ZXNbUGlj dHVyZVNjcmVlblByaXZhdGVJbmRleF0ucHRyKSkgOwoKICAgIAogICAgaWYgKHNoYWRvd0dlbmVy YXRpb24gIT0gc2VydmVyR2VuZXJhdGlvbikKICAgIHsKCXNoYWRvd1NjclByaXZhdGVJbmRleCA9 IEFsbG9jYXRlU2NyZWVuUHJpdmF0ZUluZGV4ICgpOwoJaWYgKHNoYWRvd1NjclByaXZhdGVJbmRl eCA9PSAtMSkKCSAgICByZXR1cm4gMCA7CglzaGFkb3dHQ1ByaXZhdGVJbmRleCA9IEFsbG9jYXRl R0NQcml2YXRlSW5kZXggKCk7CglpZiAoc2hhZG93R0NQcml2YXRlSW5kZXggPT0gLTEpCgkgICAg cmV0dXJuIDAgOwoJc2hhZG93R2VuZXJhdGlvbiA9IHNlcnZlckdlbmVyYXRpb247CiAgICB9CiAg ICBpZiAoIUFsbG9jYXRlR0NQcml2YXRlIChwU2NyZWVuLCBzaGFkb3dHQ1ByaXZhdGVJbmRleCwg c2l6ZW9mIChzaGFkb3dHQ1ByaXZSZWMpKSkKCXJldHVybiAwIDsKICAgIHBTY3JQcml2ID0gKHNo YWRvd1NjclByaXZQdHIpIFhhbGxvYygodW5zaWduZWQgbG9uZykoIHNpemVvZiAoc2hhZG93U2Ny UHJpdlJlYykgKSkgOwogICAgaWYgKCFwU2NyUHJpdikKCXJldHVybiAwIDsKICAgIHsgaWYgKCAg KChCb3hQdHIpMCkgICkgeyAoICAmcFNjclByaXYtPmRhbWFnZSApLT5leHRlbnRzID0gKiggICgo Qm94UHRyKTApICApOyAoICAmcFNjclByaXYtPmRhbWFnZSApLT5kYXRhID0gKFJlZ0RhdGFQdHIp KCh2b2lkICopMCkgOyB9IGVsc2UgeyAoICAmcFNjclByaXYtPmRhbWFnZSApLT5leHRlbnRzID0g bWlFbXB0eUJveDsgaWYgKCgoICAwICkgPiAxKSAmJiAoKCAgJnBTY3JQcml2LT5kYW1hZ2UgKS0+ ZGF0YSA9IChSZWdEYXRhUHRyKVhhbGxvYygodW5zaWduZWQgbG9uZykoIChzaXplb2YoUmVnRGF0 YVJlYykgKyAoKCAgIDAgICkgKiBzaXplb2YoQm94UmVjKSkpICApKSApKSB7ICggICZwU2NyUHJp di0+ZGFtYWdlICktPmRhdGEtPnNpemUgPSAoICAwICk7ICggICZwU2NyUHJpdi0+ZGFtYWdlICkt PmRhdGEtPm51bVJlY3RzID0gMDsgfSBlbHNlICggICZwU2NyUHJpdi0+ZGFtYWdlICktPmRhdGEg PSAmbWlFbXB0eURhdGE7IH0gfSA7CiAgICBwU2NyUHJpdi0+dXBkYXRlID0gdXBkYXRlOwogICAg cFNjclByaXYtPndpbmRvdyA9IHdpbmRvdzsKICAgIGlmICghUmVnaXN0ZXJCbG9ja0FuZFdha2V1 cEhhbmRsZXJzIChzaGFkb3dCbG9ja0hhbmRsZXIsCgkJCQkJIHNoYWRvd1dha2V1cEhhbmRsZXIs CgkJCQkJIChwb2ludGVyKSBwU2NyZWVuKSkKCXJldHVybiAwIDsKICAgIAogICAgeyAgcFNjclBy aXYgLT4gIENyZWF0ZUdDICA9ICAgcFNjcmVlbiAtPiAgQ3JlYXRlR0MgOyAgIHBTY3JlZW4gLT4g IENyZWF0ZUdDICA9ICAgc2hhZG93Q3JlYXRlR0MgOyB9IDsKICAgIHsgIHBTY3JQcml2IC0+ICBQ YWludFdpbmRvd0JhY2tncm91bmQgID0gICBwU2NyZWVuIC0+ICBQYWludFdpbmRvd0JhY2tncm91 bmQgOyAgIHBTY3JlZW4gLT4gIFBhaW50V2luZG93QmFja2dyb3VuZCAgPSAgIHNoYWRvd1BhaW50 V2luZG93IDsgfSA7CiAgICB7ICBwU2NyUHJpdiAtPiAgUGFpbnRXaW5kb3dCb3JkZXIgID0gICBw U2NyZWVuIC0+ICBQYWludFdpbmRvd0JvcmRlciA7ICAgcFNjcmVlbiAtPiAgUGFpbnRXaW5kb3dC b3JkZXIgID0gICBzaGFkb3dQYWludFdpbmRvdyA7IH0gOwogICAgeyAgcFNjclByaXYgLT4gIENv cHlXaW5kb3cgID0gICBwU2NyZWVuIC0+ICBDb3B5V2luZG93IDsgICBwU2NyZWVuIC0+ICBDb3B5 V2luZG93ICA9ICAgc2hhZG93Q29weVdpbmRvdyA7IH0gOwogICAgeyAgcFNjclByaXYgLT4gIENs b3NlU2NyZWVuICA9ICAgcFNjcmVlbiAtPiAgQ2xvc2VTY3JlZW4gOyAgIHBTY3JlZW4gLT4gIENs b3NlU2NyZWVuICA9ICAgc2hhZG93Q2xvc2VTY3JlZW4gOyB9IDsKICAgIHsgIHBTY3JQcml2IC0+ ICBHZXRJbWFnZSAgPSAgIHBTY3JlZW4gLT4gIEdldEltYWdlIDsgICBwU2NyZWVuIC0+ICBHZXRJ bWFnZSAgPSAgIHNoYWRvd0dldEltYWdlIDsgfSA7CgogICAgeyAgcFNjclByaXYgLT4gIEdseXBo cyAgPSAgIHBzIC0+ICBHbHlwaHMgOyAgIHBzIC0+ICBHbHlwaHMgID0gICBzaGFkb3dHbHlwaHMg OyB9IDsKICAgIHsgIHBTY3JQcml2IC0+ICBDb21wb3NpdGUgID0gICBwcyAtPiAgQ29tcG9zaXRl IDsgICBwcyAtPiAgQ29tcG9zaXRlICA9ICAgc2hhZG93Q29tcG9zaXRlIDsgfSA7CgoKICAgIHBT Y3JlZW4tPmRldlByaXZhdGVzW3NoYWRvd1NjclByaXZhdGVJbmRleF0ucHRyID0gKHBvaW50ZXIp IHBTY3JQcml2OwogICAgcmV0dXJuIDEgOwp9Cg==