From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 16008 invoked by alias); 17 Nov 2019 23:44:15 -0000 Mailing-List: contact elfutils-devel-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Post: List-Help: List-Subscribe: Sender: elfutils-devel-owner@sourceware.org Received: (qmail 15993 invoked by uid 89); 17 Nov 2019 23:44:15 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Checked: by ClamAV 0.100.3 on sourceware.org X-Virus-Found: No X-Spam-SWARE-Status: No, score=-19.0 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,KAM_SHORT,SPF_PASS autolearn=ham version=3.3.1 spammy=hat, 5017, canon, pool X-Spam-Status: No, score=-19.0 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,KAM_SHORT,SPF_PASS autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on sourceware.org X-Spam-Level: X-HELO: gnu.wildebeest.org Received: from wildebeest.demon.nl (HELO gnu.wildebeest.org) (212.238.236.112) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Sun, 17 Nov 2019 23:44:11 +0000 Received: from tarox.wildebeest.org (tarox.wildebeest.org [172.31.17.39]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by gnu.wildebeest.org (Postfix) with ESMTPSA id 06091302BBFD; Mon, 18 Nov 2019 00:44:07 +0100 (CET) Received: by tarox.wildebeest.org (Postfix, from userid 1000) id A9F39413CEAA; Mon, 18 Nov 2019 00:44:07 +0100 (CET) Message-ID: Subject: Re: patch 3/3 debuginfod client interruptability From: Mark Wielaard To: Pedro Alves , Aaron Merey Cc: "Frank Ch. Eigler" , elfutils-devel@sourceware.org Date: Sun, 17 Nov 2019 23:44:00 -0000 In-Reply-To: <23bbcd14-fc4f-64f6-9a6a-af860b1018cb@redhat.com> References: <20191028190438.GC14349@redhat.com> <20191028190602.GD14349@redhat.com> <20191028190726.GE14349@redhat.com> <20191104214823.GA17633@redhat.com> <73de7c5ac7205dbb5e6d4c47a2abb0c23cd79d5e.camel@klomp.org> <23bbcd14-fc4f-64f6-9a6a-af860b1018cb@redhat.com> Content-Type: multipart/mixed; boundary="=-+Asw+hI29UbxyRqMZZat" X-Mailer: Evolution 3.28.5 (3.28.5-5.el7) Mime-Version: 1.0 X-Spam-Flag: NO X-IsSubscribed: yes X-SW-Source: 2019-q4/txt/msg00161.txt.bz2 --=-+Asw+hI29UbxyRqMZZat Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Content-length: 3812 Hi, On Fri, 2019-11-15 at 18:14 +0000, Pedro Alves wrote: > On 11/15/19 5:35 PM, Mark Wielaard wrote: >=20 > > IMHO it would be best to avoid any global state from the start. Since > > we haven't released this api yet we can make it so that it is easy to > > have state per request object.=20 >=20 > +1 >=20 > > In the gdb thread=20 > > https://sourceware.org/ml/gdb-patches/2019-11/msg00118.html Simon > > Marchi suggested something like: > >=20 > > debuginfod_client *client =3D debuginfod_create_client (); > > debuginfod_set_progressfn (client, my_progress_cb); > >=20 > > With debuginfod_client * being an opaque pointer. I think that is a > > good idea. It also matches what libelf (with Elf *) and libdw (with > > Dwarf *) do. It also makes it easy to add other kinds of state to > > client requests later. > >=20 >=20 > We were discussing this on the #gdb channel on IRC, and I think > Simon's idea is the best one so far.=20 Attached is a variant that adds debuginfod_begin and debuginfo_end (names matching elf/dwarf_begin/end) and adds a debuginfod_client handle to each other function. The only state currently held is the progressfn callback. But it could be extended to hold other state that is now somewhat global (like the cache_path, server_urls, timeout which come from the environment variables when set), or that are setup each time a find call is made (like the handle_data array). The full interface now looks as follows: /* Names of environment variables that control the client logic. */ #define DEBUGINFOD_URLS_ENV_VAR "DEBUGINFOD_URLS" #define DEBUGINFOD_CACHE_PATH_ENV_VAR "DEBUGINFOD_CACHE_PATH" #define DEBUGINFOD_TIMEOUT_ENV_VAR "DEBUGINFOD_TIMEOUT" /* Handle for debuginfod-client connection. */ typedef struct debuginfod_client debuginfod_client; /* Create a handle for a new debuginfod-client session. */ debuginfod_client *debuginfod_begin (void); /* Query the urls contained in $DEBUGINFOD_URLS for a file with the specified type and build id. If build_id_len =3D=3D 0, the build_id is supplied as a lowercase hexadecimal string; otherwise it is a binary blob of given legnth. If successful, return a file descriptor to the target, otherwise return a posix error code. If successful, set *path to a strdup'd copy of the name of the same file in the cache. Caller must free() it later. */ int debuginfod_find_debuginfo (debuginfod_client *client, const unsigned char *build_id, int build_id_len, char **path); int debuginfod_find_executable (debuginfod_client *client, const unsigned char *build_id, int build_id_len, char **path); int debuginfod_find_source (debuginfod_client *client, const unsigned char *build_id, int build_id_len, const char *filename, char **path); typedef int (*debuginfod_progressfn_t)(debuginfod_client *c, long a, long b= ); void debuginfod_set_progressfn(debuginfod_client *c, debuginfod_progressfn_t fn); /* Release debuginfod client connection context handle. */ void debuginfod_end (debuginfod_client *client); I think the debuginfod_set_progressfn could use a bit more documentation. It isn't immediately clear what a and b refer to. And since we seem to use it in different phases maybe it needs an "explanation message"? For libdwfl I put all logic in a new file libdwfl/debuginfod-client.c which sets up a debuginfod_client for each Dwfl that might need it. The attached patch is against the debuginfod-submit branch on sourceware elfutils.git. Cheers, Mark --=-+Asw+hI29UbxyRqMZZat Content-Disposition: inline; filename="0001-debuginfod-client-context.patch" Content-Transfer-Encoding: base64 Content-Type: text/x-patch; name="0001-debuginfod-client-context.patch"; charset="UTF-8" Content-length: 31985 RnJvbSBlZDdhNzg1OTkyNDNhOTVkODcyM2FlZjUwNmVlODY1Y2U0MDJmOWY1 IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJrIFdpZWxhYXJk IDxtYXJrQGtsb21wLm9yZz4KRGF0ZTogU3VuLCAxNyBOb3YgMjAxOSAyMjox NzoyNiArMDEwMApTdWJqZWN0OiBbUEFUQ0hdIGRlYnVnaW5mb2QgY2xpZW50 IGNvbnRleHQKCi0tLQogZGVidWdpbmZvZC9kZWJ1Z2luZm9kLWNsaWVudC5j ICAgfCAgNzIgKysrKysrKysrKysrLS0tLS0tCiBkZWJ1Z2luZm9kL2RlYnVn aW5mb2QtZmluZC5jICAgICB8ICAyOSArKysrKystLQogZGVidWdpbmZvZC9k ZWJ1Z2luZm9kLmN4eCAgICAgICAgfCAgMzUgKysrKysrLS0tCiBkZWJ1Z2lu Zm9kL2RlYnVnaW5mb2QuaCAgICAgICAgICB8ICAyMyArKysrLS0KIGRlYnVn aW5mb2QvbGliZGVidWdpbmZvZC5tYXAgICAgIHwgICAyICsKIGxpYmR3Zmwv TWFrZWZpbGUuYW0gICAgICAgICAgICAgIHwgICAyICstCiBsaWJkd2ZsL2Rl YnVnaW5mb2QtY2xpZW50LmMgICAgICB8IDEyMiArKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrCiBsaWJkd2ZsL2R3ZmxfYnVpbGRfaWRfZmluZF9l bGYuYyB8ICAzNyArKystLS0tLS0tCiBsaWJkd2ZsL2R3ZmxfZW5kLmMgICAg ICAgICAgICAgICB8ICAgMiArCiBsaWJkd2ZsL2ZpbmQtZGVidWdpbmZvLmMg ICAgICAgICB8ICAyOCArLS0tLS0tCiBsaWJkd2ZsL2xpYmR3ZmxQLmggICAg ICAgICAgICAgICB8ICAxNSArKysrCiAxMSBmaWxlcyBjaGFuZ2VkLCAyNjcg aW5zZXJ0aW9ucygrKSwgMTAwIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUg MTAwNjQ0IGxpYmR3ZmwvZGVidWdpbmZvZC1jbGllbnQuYwoKZGlmZiAtLWdp dCBhL2RlYnVnaW5mb2QvZGVidWdpbmZvZC1jbGllbnQuYyBiL2RlYnVnaW5m b2QvZGVidWdpbmZvZC1jbGllbnQuYwppbmRleCA5YmNmMTQ1Mi4uNTFmNjEy ZWUgMTAwNjQ0Ci0tLSBhL2RlYnVnaW5mb2QvZGVidWdpbmZvZC1jbGllbnQu YworKysgYi9kZWJ1Z2luZm9kL2RlYnVnaW5mb2QtY2xpZW50LmMKQEAgLTcx LDYgKzcxLDE2IEBACiAgICNpbmNsdWRlIDxmdHMuaD4KICNlbmRpZgogCitz dHJ1Y3QgZGVidWdpbmZvZF9jbGllbnQKK3sKKyAgLyogUHJvZ3Jlc3MvaW50 ZXJydXB0IGNhbGxiYWNrIGZ1bmN0aW9uLiAqLworICBkZWJ1Z2luZm9kX3By b2dyZXNzZm5fdCBwcm9ncmVzc2ZuOworCisgIC8qIENhbiBjb250YWluIGFs bCBvdGhlciBjb250ZXh0LCBsaWtlIGNhY2hlX3BhdGgsIHNlcnZlcl91cmxz LAorICAgICB0aW1lb3V0IG9yIG90aGVyIGluZm8gZ290dGVuIGZyb20gZW52 aXJvbm1lbnQgdmFyaWFibGVzLCB0aGUKKyAgICAgaGFuZGxlIGRhdGEsIGV0 Yy4gU28gdGhvc2UgZG9uJ3QgaGF2ZSB0byBiZSByZXBhcnNlZCBhbmQKKyAg ICAgcmVjcmVhdGVkIG9uIGVhY2ggcmVxdWVzdC4gICovCit9OwogCiAvKiBU aGUgY2FjaGVfY2xlYW5faW50ZXJ2YWxfcyBmaWxlIHdpdGhpbiB0aGUgZGVi dWdpbmZvZCBjYWNoZSBzcGVjaWZpZXMKICAgIGhvdyBmcmVxdWVudGx5IHRo ZSBjYWNoZSBzaG91bGQgYmUgY2xlYW5lZC4gVGhlIGZpbGUncyBzdF9tdGlt ZSByZXByZXNlbnRzCkBAIC05OSw5ICsxMDksNiBAQCBzdGF0aWMgY29uc3Qg Y2hhciB1cmxfZGVsaW1fY2hhciA9ICcgJzsKIHN0YXRpYyBjb25zdCBjaGFy ICpzZXJ2ZXJfdGltZW91dF9lbnZ2YXIgPSBERUJVR0lORk9EX1RJTUVPVVRf RU5WX1ZBUjsKIHN0YXRpYyBpbnQgc2VydmVyX3RpbWVvdXQgPSA1OwogCi0v KiBQcm9ncmVzcy9pbnRlcnJ1cHQgY2FsbGJhY2sgZnVuY3Rpb24uICovCi1z dGF0aWMgZGVidWdpbmZvZF9wcm9ncmVzc2ZuX3QgcHJvZ3Jlc3NmbjsKLQog LyogRGF0YSBhc3NvY2lhdGVkIHdpdGggYSBwYXJ0aWN1bGFyIENVUkwgZWFz eSBoYW5kbGUuIFBhc3NlZCB0bwogICAgdGhlIHdyaXRlIGNhbGxiYWNrLiAg Ki8KIHN0cnVjdCBoYW5kbGVfZGF0YQpAQCAtMTgxLDcgKzE4OCw5IEBAIGRl YnVnaW5mb2RfaW5pdF9jYWNoZSAoY2hhciAqY2FjaGVfcGF0aCwgY2hhciAq aW50ZXJ2YWxfcGF0aCwgY2hhciAqbWF4YWdlX3BhdGgpCiAvKiBEZWxldGUg YW55IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIHVubW9kaWVkIGZvciBhIHBlcmlv ZAogICAgbG9uZ2VyIHRoYW4gJERFQlVHSU5GT0RfQ0FDSEVfQ0xFQU5fSU5U RVJWQUxfUy4gICovCiBzdGF0aWMgaW50Ci1kZWJ1Z2luZm9kX2NsZWFuX2Nh Y2hlKGNoYXIgKmNhY2hlX3BhdGgsIGNoYXIgKmludGVydmFsX3BhdGgsIGNo YXIgKm1heF91bnVzZWRfcGF0aCkKK2RlYnVnaW5mb2RfY2xlYW5fY2FjaGUo ZGVidWdpbmZvZF9jbGllbnQgKmMsCisJCSAgICAgICBjaGFyICpjYWNoZV9w YXRoLCBjaGFyICppbnRlcnZhbF9wYXRoLAorCQkgICAgICAgY2hhciAqbWF4 X3VudXNlZF9wYXRoKQogewogICBzdHJ1Y3Qgc3RhdCBzdDsKICAgRklMRSAq aW50ZXJ2YWxfZmlsZTsKQEAgLTIzNiw4ICsyNDUsOCBAQCBkZWJ1Z2luZm9k X2NsZWFuX2NhY2hlKGNoYXIgKmNhY2hlX3BhdGgsIGNoYXIgKmludGVydmFs X3BhdGgsIGNoYXIgKm1heF91bnVzZWRfcAogICB3aGlsZSAoKGYgPSBmdHNf cmVhZChmdHMpKSAhPSBOVUxMKQogICAgIHsKICAgICAgIGZpbGVzKys7Ci0g ICAgICBpZiAocHJvZ3Jlc3NmbikgLyogaW5mb3JtL2NoZWNrIHByb2dyZXNz IGNhbGxiYWNrICovCi0gICAgICAgIGlmICgoKnByb2dyZXNzZm4pIChmaWxl cywgMCkpCisgICAgICBpZiAoYy0+cHJvZ3Jlc3NmbikgLyogaW5mb3JtL2No ZWNrIHByb2dyZXNzIGNhbGxiYWNrICovCisgICAgICAgIGlmICgoYy0+cHJv Z3Jlc3NmbikgKGMsIGZpbGVzLCAwKSkKICAgICAgICAgICBicmVhazsKIAog ICAgICAgc3dpdGNoIChmLT5mdHNfaW5mbykKQEAgLTI3NSw3ICsyODQsOCBA QCBkZWJ1Z2luZm9kX2NsZWFuX2NhY2hlKGNoYXIgKmNhY2hlX3BhdGgsIGNo YXIgKmludGVydmFsX3BhdGgsIGNoYXIgKm1heF91bnVzZWRfcAogICAgZGVz Y3JpcHRvciBmb3IgdGhlIHRhcmdldCwgb3RoZXJ3aXNlIHJldHVybiBhbiBl cnJvciBjb2RlLgogKi8KIHN0YXRpYyBpbnQKLWRlYnVnaW5mb2RfcXVlcnlf c2VydmVyIChjb25zdCB1bnNpZ25lZCBjaGFyICpidWlsZF9pZCwKK2RlYnVn aW5mb2RfcXVlcnlfc2VydmVyIChkZWJ1Z2luZm9kX2NsaWVudCAqYywKKwkJ CSBjb25zdCB1bnNpZ25lZCBjaGFyICpidWlsZF9pZCwKICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnQgYnVpbGRfaWRfbGVuLAogICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnR5cGUsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsCkBAIC0zNjYsNyAr Mzc2LDcgQEAgZGVidWdpbmZvZF9xdWVyeV9zZXJ2ZXIgKGNvbnN0IHVuc2ln bmVkIGNoYXIgKmJ1aWxkX2lkLAogICBpbnQgcmMgPSBkZWJ1Z2luZm9kX2lu aXRfY2FjaGUoY2FjaGVfcGF0aCwgaW50ZXJ2YWxfcGF0aCwgbWF4YWdlX3Bh dGgpOwogICBpZiAocmMgIT0gMCkKICAgICBnb3RvIG91dDsKLSAgcmMgPSBk ZWJ1Z2luZm9kX2NsZWFuX2NhY2hlKGNhY2hlX3BhdGgsIGludGVydmFsX3Bh dGgsIG1heGFnZV9wYXRoKTsKKyAgcmMgPSBkZWJ1Z2luZm9kX2NsZWFuX2Nh Y2hlKGMsIGNhY2hlX3BhdGgsIGludGVydmFsX3BhdGgsIG1heGFnZV9wYXRo KTsKICAgaWYgKHJjICE9IDApCiAgICAgZ290byBvdXQ7CiAKQEAgLTUwMSw3 ICs1MTEsNyBAQCBkZWJ1Z2luZm9kX3F1ZXJ5X3NlcnZlciAoY29uc3QgdW5z aWduZWQgY2hhciAqYnVpbGRfaWQsCiAgICAgewogICAgICAgQ1VSTE1jb2Rl IGN1cmxfcmVzOwogCi0gICAgICBpZiAocHJvZ3Jlc3NmbikgLyogaW5mb3Jt L2NoZWNrIHByb2dyZXNzIGNhbGxiYWNrICovCisgICAgICBpZiAoYy0+cHJv Z3Jlc3NmbikgLyogaW5mb3JtL2NoZWNrIHByb2dyZXNzIGNhbGxiYWNrICov CiAgICAgICAgIHsKICAgICAgICAgICBsb29wcyArKzsKICAgICAgICAgICBs b25nIHBhID0gbG9vcHM7IC8qIGRlZmF1bHQgcGFyYW1zIGZvciBwcm9ncmVz cyBjYWxsYmFjayAqLwpAQCAtNTQxLDcgKzU1MSw3IEBAIGRlYnVnaW5mb2Rf cXVlcnlfc2VydmVyIChjb25zdCB1bnNpZ25lZCBjaGFyICpidWlsZF9pZCwK ICNlbmRpZgogICAgICAgICAgICAgfQogCi0gICAgICAgICAgaWYgKCgqcHJv Z3Jlc3NmbikgKHBhLCBwYikpCisgICAgICAgICAgaWYgKCgqYy0+cHJvZ3Jl c3NmbikgKGMsIHBhLCBwYikpCiAgICAgICAgICAgICBicmVhazsKICAgICAg ICAgfQogCkBAIC02NzQsNDEgKzY4NCw1OSBAQCBkZWJ1Z2luZm9kX3F1ZXJ5 X3NlcnZlciAoY29uc3QgdW5zaWduZWQgY2hhciAqYnVpbGRfaWQsCiAgIHJl dHVybiByYzsKIH0KIAotCiAvKiBTZWUgZGVidWdpbmZvZC5oICAqLworZGVi dWdpbmZvZF9jbGllbnQgICoKK2RlYnVnaW5mb2RfYmVnaW4gKHZvaWQpCit7 CisgIGRlYnVnaW5mb2RfY2xpZW50ICpjbGllbnQ7CisgIHNpemVfdCBzaXpl ID0gc2l6ZW9mIChzdHJ1Y3QgZGVidWdpbmZvZF9jbGllbnQpOworICBjbGll bnQgPSAoZGVidWdpbmZvZF9jbGllbnQgKikgbWFsbG9jIChzaXplKTsKKyAg aWYgKGNsaWVudCAhPSBOVUxMKQorICAgIGNsaWVudC0+cHJvZ3Jlc3NmbiA9 IE5VTEw7CisgIHJldHVybiBjbGllbnQ7Cit9CisKK3ZvaWQKK2RlYnVnaW5m b2RfZW5kIChkZWJ1Z2luZm9kX2NsaWVudCAqY2xpZW50KQoreworICBmcmVl IChjbGllbnQpOworfQorCiBpbnQKLWRlYnVnaW5mb2RfZmluZF9kZWJ1Z2lu Zm8gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1aWxkX2lkLCBpbnQgYnVpbGRf aWRfbGVuLAorZGVidWdpbmZvZF9maW5kX2RlYnVnaW5mbyAoZGVidWdpbmZv ZF9jbGllbnQgKmNsaWVudCwKKwkJCSAgIGNvbnN0IHVuc2lnbmVkIGNoYXIg KmJ1aWxkX2lkLCBpbnQgYnVpbGRfaWRfbGVuLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgY2hhciAqKnBhdGgpCiB7Ci0gIHJldHVybiBkZWJ1Z2lu Zm9kX3F1ZXJ5X3NlcnZlcihidWlsZF9pZCwgYnVpbGRfaWRfbGVuLAorICBy ZXR1cm4gZGVidWdpbmZvZF9xdWVyeV9zZXJ2ZXIoY2xpZW50LCBidWlsZF9p ZCwgYnVpbGRfaWRfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgImRlYnVnaW5mbyIsIE5VTEwsIHBhdGgpOwogfQogCiAKIC8qIFNl ZSBkZWJ1Z2luZm9kLmggICovCiBpbnQKLWRlYnVnaW5mb2RfZmluZF9leGVj dXRhYmxlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1aWxkX2lkLCBpbnQgYnVp bGRfaWRfbGVuLAorZGVidWdpbmZvZF9maW5kX2V4ZWN1dGFibGUoZGVidWdp bmZvZF9jbGllbnQgKmNsaWVudCwKKwkJCSAgIGNvbnN0IHVuc2lnbmVkIGNo YXIgKmJ1aWxkX2lkLCBpbnQgYnVpbGRfaWRfbGVuLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgY2hhciAqKnBhdGgpCiB7Ci0gIHJldHVybiBkZWJ1 Z2luZm9kX3F1ZXJ5X3NlcnZlcihidWlsZF9pZCwgYnVpbGRfaWRfbGVuLAor ICByZXR1cm4gZGVidWdpbmZvZF9xdWVyeV9zZXJ2ZXIoY2xpZW50LCBidWls ZF9pZCwgYnVpbGRfaWRfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgImV4ZWN1dGFibGUiLCBOVUxMLCBwYXRoKTsKIH0KIAogLyog U2VlIGRlYnVnaW5mb2QuaCAgKi8KLWludCBkZWJ1Z2luZm9kX2ZpbmRfc291 cmNlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1aWxkX2lkLCBpbnQgYnVpbGRf aWRfbGVuLAoraW50IGRlYnVnaW5mb2RfZmluZF9zb3VyY2UoZGVidWdpbmZv ZF9jbGllbnQgKmNsaWVudCwKKwkJCSAgIGNvbnN0IHVuc2lnbmVkIGNoYXIg KmJ1aWxkX2lkLCBpbnQgYnVpbGRfaWRfbGVuLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsIGNoYXIgKipwYXRo KQogewotICByZXR1cm4gZGVidWdpbmZvZF9xdWVyeV9zZXJ2ZXIoYnVpbGRf aWQsIGJ1aWxkX2lkX2xlbiwKKyAgcmV0dXJuIGRlYnVnaW5mb2RfcXVlcnlf c2VydmVyKGNsaWVudCwgYnVpbGRfaWQsIGJ1aWxkX2lkX2xlbiwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UiLCBmaWxlbmFt ZSwgcGF0aCk7CiB9CiAKIAotZGVidWdpbmZvZF9wcm9ncmVzc2ZuX3QKLWRl YnVnaW5mb2Rfc2V0X3Byb2dyZXNzZm4oZGVidWdpbmZvZF9wcm9ncmVzc2Zu X3QgZm4pCit2b2lkCitkZWJ1Z2luZm9kX3NldF9wcm9ncmVzc2ZuKGRlYnVn aW5mb2RfY2xpZW50ICpjbGllbnQsCisJCQkgIGRlYnVnaW5mb2RfcHJvZ3Jl c3Nmbl90IGZuKQogewotICBkZWJ1Z2luZm9kX3Byb2dyZXNzZm5fdCBpdCA9 IHByb2dyZXNzZm47Ci0gIHByb2dyZXNzZm4gPSBmbjsKLSAgcmV0dXJuIGl0 OworICBjbGllbnQtPnByb2dyZXNzZm4gPSBmbjsKIH0KIAogCmRpZmYgLS1n aXQgYS9kZWJ1Z2luZm9kL2RlYnVnaW5mb2QtZmluZC5jIGIvZGVidWdpbmZv ZC9kZWJ1Z2luZm9kLWZpbmQuYwppbmRleCA0YzFhOTRjNi4uOGJkM2EzZGIg MTAwNjQ0Ci0tLSBhL2RlYnVnaW5mb2QvZGVidWdpbmZvZC1maW5kLmMKKysr IGIvZGVidWdpbmZvZC9kZWJ1Z2luZm9kLWZpbmQuYwpAQCAtNDksOSArNDks MTEgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiBvcHRpb25z W10gPQogICAgeyBOVUxMLCAwLCBOVUxMLCAwLCBOVUxMLCAwIH0KICAgfTsK IAorLyogZGVidWdpbmZvZCBjb25uZWN0aW9uIGhhbmRsZS4gICovCitzdGF0 aWMgZGVidWdpbmZvZF9jbGllbnQgKmNsaWVudDsKIAotCi1pbnQgcHJvZ3Jl c3Nmbihsb25nIGEsIGxvbmcgYikKK2ludCBwcm9ncmVzc2ZuKGRlYnVnaW5m b2RfY2xpZW50ICpjIF9fYXR0cmlidXRlX18oKF9fdW51c2VkX18pKSwKKwkg ICAgICAgbG9uZyBhLCBsb25nIGIpCiB7CiAgIGZwcmludGYgKHN0ZGVyciwg IlByb2dyZXNzICVsZCAvICVsZFxuIiwgYSwgYik7CiAgIHJldHVybiAwOwpA QCAtNjQsNyArNjYsNyBAQCBzdGF0aWMgZXJyb3JfdCBwYXJzZV9vcHQgKGlu dCBrZXksIGNoYXIgKmFyZywgc3RydWN0IGFyZ3Bfc3RhdGUgKnN0YXRlKQog ICAodm9pZCkgc3RhdGU7CiAgIHN3aXRjaCAoa2V5KQogICAgIHsKLSAgICBj YXNlICd2JzogZGVidWdpbmZvZF9zZXRfcHJvZ3Jlc3NmbiAoJiBwcm9ncmVz c2ZuKTsgYnJlYWs7CisgICAgY2FzZSAndic6IGRlYnVnaW5mb2Rfc2V0X3By b2dyZXNzZm4gKGNsaWVudCwgJiBwcm9ncmVzc2ZuKTsgYnJlYWs7CiAgICAg ZGVmYXVsdDogcmV0dXJuIEFSR1BfRVJSX1VOS05PV047CiAgICAgfQogICBy ZXR1cm4gMDsKQEAgLTgyLDYgKzg0LDEzIEBAIHN0YXRpYyBzdHJ1Y3QgYXJn cCBhcmdwID0KIGludAogbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiB7 CisgIGNsaWVudCA9IGRlYnVnaW5mb2RfYmVnaW4gKCk7CisgIGlmIChjbGll bnQgPT0gTlVMTCkKKyAgICB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNv dWxkbid0IGNyZWF0ZSBkZWJ1Z2luZm9kIGNsaWVudCBjb250ZXh0XG4iKTsK KyAgICAgIHJldHVybiAxOworICAgIH0KKwogICBpbnQgcmVtYWluaW5nOwog ICAodm9pZCkgYXJncF9wYXJzZSAoJmFyZ3AsIGFyZ2MsIGFyZ3YsIEFSR1Bf SU5fT1JERVJ8QVJHUF9OT19BUkdTLCAmcmVtYWluaW5nLCBOVUxMKTsKIApA QCAtOTgsOSArMTA3LDEzIEBAIG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2 KQogICAgICBkZWJ1Z2luZm9kX2ZpbmRfKiBmdW5jdGlvbi4gSWYgRklMRVRZ UEUgaXMgInNvdXJjZSIKICAgICAgdGhlbiBlbnN1cmUgYSBGSUxFTkFNRSB3 YXMgYWxzbyBzdXBwbGllZCBhcyBhbiBhcmd1bWVudC4gICovCiAgIGlmIChz dHJjbXAoYXJndltyZW1haW5pbmddLCAiZGVidWdpbmZvIikgPT0gMCkKLSAg ICByYyA9IGRlYnVnaW5mb2RfZmluZF9kZWJ1Z2luZm8oKHVuc2lnbmVkIGNo YXIgKilhcmd2W3JlbWFpbmluZysxXSwgMCwgJmNhY2hlX25hbWUpOworICAg IHJjID0gZGVidWdpbmZvZF9maW5kX2RlYnVnaW5mbyhjbGllbnQsCisJCQkJ ICAgKHVuc2lnbmVkIGNoYXIgKilhcmd2W3JlbWFpbmluZysxXSwgMCwKKwkJ CQkgICAmY2FjaGVfbmFtZSk7CiAgIGVsc2UgaWYgKHN0cmNtcChhcmd2W3Jl bWFpbmluZ10sICJleGVjdXRhYmxlIikgPT0gMCkKLSAgICByYyA9IGRlYnVn aW5mb2RfZmluZF9leGVjdXRhYmxlKCh1bnNpZ25lZCBjaGFyICopYXJndlty ZW1haW5pbmcrMV0sIDAsICZjYWNoZV9uYW1lKTsKKyAgICByYyA9IGRlYnVn aW5mb2RfZmluZF9leGVjdXRhYmxlKGNsaWVudCwKKwkJCQkgICAgKHVuc2ln bmVkIGNoYXIgKilhcmd2W3JlbWFpbmluZysxXSwgMCwKKwkJCQkgICAgJmNh Y2hlX25hbWUpOwogICBlbHNlIGlmIChzdHJjbXAoYXJndltyZW1haW5pbmdd LCAic291cmNlIikgPT0gMCkKICAgICB7CiAgICAgICBpZiAocmVtYWluaW5n KzIgPT0gYXJnYyB8fCBhcmd2WzNdWzBdICE9ICcvJykKQEAgLTEwOCw4ICsx MjEsOCBAQCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKICAgICAgICAg ICBmcHJpbnRmKHN0ZGVyciwgIklmIEZJTEVUWVBFIGlzIFwic291cmNlXCIg dGhlbiBhYnNvbHV0ZSAvRklMRU5BTUUgbXVzdCBiZSBnaXZlblxuIik7CiAg ICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgIH0KLSAgICAgIHJjID0gZGVi dWdpbmZvZF9maW5kX3NvdXJjZSgodW5zaWduZWQgY2hhciAqKWFyZ3ZbcmVt YWluaW5nKzFdLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgYXJndltyZW1haW5pbmcrMl0sICZjYWNoZV9uYW1lKTsKKyAgICAgIHJj ID0gZGVidWdpbmZvZF9maW5kX3NvdXJjZShjbGllbnQsICh1bnNpZ25lZCBj aGFyICopYXJndltyZW1haW5pbmcrMV0sCisJCQkJICAwLCBhcmd2W3JlbWFp bmluZysyXSwgJmNhY2hlX25hbWUpOwogICAgIH0KICAgZWxzZQogICAgIHsK QEAgLTEyNiw1ICsxMzksNyBAQCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJn dikKICAgcHJpbnRmKCIlc1xuIiwgY2FjaGVfbmFtZSk7CiAKICAgZnJlZSAo Y2FjaGVfbmFtZSk7CisgIGRlYnVnaW5mb2RfZW5kIChjbGllbnQpOworCiAg IHJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZGVidWdpbmZvZC9kZWJ1Z2lu Zm9kLmN4eCBiL2RlYnVnaW5mb2QvZGVidWdpbmZvZC5jeHgKaW5kZXggYTRk NDRmMTEuLjM3YjI1ODQ3IDEwMDY0NAotLS0gYS9kZWJ1Z2luZm9kL2RlYnVn aW5mb2QuY3h4CisrKyBiL2RlYnVnaW5mb2QvZGVidWdpbmZvZC5jeHgKQEAg LTM2NSw2ICszNjUsNyBAQCBzdGF0aWMgc3RydWN0IGFyZ3AgYXJncCA9CiAg IH07CiAKIAorc3RhdGljIGRlYnVnaW5mb2RfY2xpZW50ICpjbGllbnQ7CiBz dGF0aWMgc3RyaW5nIGRiX3BhdGg7CiBzdGF0aWMgc3FsaXRlMyAqZGI7CiBz dGF0aWMgdW5zaWduZWQgdmVyYm9zZTsKQEAgLTk0OSw3ICs5NTAsNyBAQCBo YW5kbGVfYnVpbGRpZF9tYXRjaCAoaW50NjRfdCBiX210aW1lLAogCiAKIHN0 YXRpYyBpbnQKLWRlYnVnaW5mb2RfZmluZF9wcm9ncmVzcyAobG9uZyBhLCBs b25nIGIpCitkZWJ1Z2luZm9kX2ZpbmRfcHJvZ3Jlc3MgKGRlYnVnaW5mb2Rf Y2xpZW50ICosIGxvbmcgYSwgbG9uZyBiKQogewogICBpZiAodmVyYm9zZSA+ IDQpCiAgICAgb2JhdGNoZWQoY2xvZykgPDwgImZlZGVyYXRlZCBkZWJ1Z2lu Zm9kIHByb2dyZXNzPSIgPDwgYSA8PCAiLyIgPDwgYiA8PCBlbmRsOwpAQCAt MTA0MSwxNSArMTA0MiwyNCBAQCBzdGF0aWMgc3RydWN0IE1IRF9SZXNwb25z ZSogaGFuZGxlX2J1aWxkaWQgKGNvbnN0IHN0cmluZyYgYnVpbGRpZCAvKiB1 bnNhZmUgKi8sCiAgIC8vIGlzIHRvIGRlZmVyIHRvIG90aGVyIGRlYnVnaW5m byBzZXJ2ZXJzLgogCiAgIGludCBmZCA9IC0xOwotICBpZiAoYXJ0aWZhY3R0 eXBlID09ICJkZWJ1Z2luZm8iKQotICAgIGZkID0gZGVidWdpbmZvZF9maW5k X2RlYnVnaW5mbyAoKGNvbnN0IHVuc2lnbmVkIGNoYXIqKSBidWlsZGlkLmNf c3RyKCksIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IE5VTEwpOwotICBlbHNlIGlmIChhcnRpZmFjdHR5cGUgPT0gImV4ZWN1dGFi bGUiKQotICAgIGZkID0gZGVidWdpbmZvZF9maW5kX2V4ZWN1dGFibGUgKChj b25zdCB1bnNpZ25lZCBjaGFyKikgYnVpbGRpZC5jX3N0cigpLCAwLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7Ci0gIGVs c2UgaWYgKGFydGlmYWN0dHlwZSA9PSAic291cmNlIikKLSAgICBmZCA9IGRl YnVnaW5mb2RfZmluZF9zb3VyY2UgKChjb25zdCB1bnNpZ25lZCBjaGFyKikg YnVpbGRpZC5jX3N0cigpLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzdWZmaXguY19zdHIoKSwgTlVMTCk7CisgIGlmIChjbGllbnQg IT0gTlVMTCkKKyAgICB7CisgICAgICBpZiAoYXJ0aWZhY3R0eXBlID09ICJk ZWJ1Z2luZm8iKQorCWZkID0gZGVidWdpbmZvZF9maW5kX2RlYnVnaW5mbyAo Y2xpZW50LAorCQkJCQkoY29uc3QgdW5zaWduZWQgY2hhciopIGJ1aWxkaWQu Y19zdHIoKSwKKwkJCQkJMCwgTlVMTCk7CisgICAgICBlbHNlIGlmIChhcnRp ZmFjdHR5cGUgPT0gImV4ZWN1dGFibGUiKQorCWZkID0gZGVidWdpbmZvZF9m aW5kX2V4ZWN1dGFibGUgKGNsaWVudCwKKwkJCQkJIChjb25zdCB1bnNpZ25l ZCBjaGFyKikgYnVpbGRpZC5jX3N0cigpLAorCQkJCQkgMCwgTlVMTCk7Cisg ICAgICBlbHNlIGlmIChhcnRpZmFjdHR5cGUgPT0gInNvdXJjZSIpCisJZmQg PSBkZWJ1Z2luZm9kX2ZpbmRfc291cmNlIChjbGllbnQsCisJCQkJICAgICAo Y29uc3QgdW5zaWduZWQgY2hhciopIGJ1aWxkaWQuY19zdHIoKSwKKwkJCQkg ICAgIDAsIHN1ZmZpeC5jX3N0cigpLCBOVUxMKTsKKyAgICB9CisgIGVsc2UK KyAgICBmZCA9IC1FTk9TWVM7CisKICAgaWYgKGZkID49IDApCiAgICAgewog ICAgICAgaW5jX21ldHJpYyAoImh0dHBfcmVzcG9uc2VzX3RvdGFsIiwicmVz dWx0IiwidXBzdHJlYW0iKTsKQEAgLTI1MDgsNyArMjUxOCw5IEBAIG1haW4g KGludCBhcmdjLCBjaGFyICphcmd2W10pCiAgICAgICAgICAgICAgImNhbm5v dCBydW4gZGF0YWJhc2Ugc2NoZW1hIGRkbDogJXMiLCBzcWxpdGUzX2Vycm1z ZyhkYikpOwogICAgIH0KIAotICAodm9pZCkgZGVidWdpbmZvZF9zZXRfcHJv Z3Jlc3NmbiAoJiBkZWJ1Z2luZm9kX2ZpbmRfcHJvZ3Jlc3MpOworICBjbGll bnQgPSBkZWJ1Z2luZm9kX2JlZ2luICgpOworICBpZiAoY2xpZW50ICE9IE5V TEwpCisgICAgZGVidWdpbmZvZF9zZXRfcHJvZ3Jlc3NmbiAoY2xpZW50LCAm IGRlYnVnaW5mb2RfZmluZF9wcm9ncmVzcyk7CiAKICAgLy8gU3RhcnQgaHR0 cGQgc2VydmVyIHRocmVhZHMuICBTZXBhcmF0ZSBwb29sIGZvciBJUHY0IGFu ZCBJUHY2LCBpbgogICAvLyBjYXNlIHRoZSBob3N0IG9ubHkgaGFzIG9uZSBw cm90b2NvbCBzdGFjay4KQEAgLTI2MzcsNiArMjY0OSw3IEBAIG1haW4gKGlu dCBhcmdjLCBjaGFyICphcmd2W10pCiAgIGlmIChkNikgTUhEX3N0b3BfZGFl bW9uIChkNik7CiAKICAgLyogV2l0aCBhbGwgdGhyZWFkcyBrbm93biBkZWFk LCB3ZSBjYW4gY2xlYW4gdXAgdGhlIGdsb2JhbCByZXNvdXJjZXMuICovCisg IGRlYnVnaW5mb2RfZW5kIChjbGllbnQpOwogICBkZWxldGUgc2Nhbl9jb25j dXJyZW5jeV9zZW07CiAgIHJjID0gc3FsaXRlM19leGVjIChkYiwgREVCVUdJ TkZPRF9TUUxJVEVfQ0xFQU5VUF9EREwsIE5VTEwsIE5VTEwsIE5VTEwpOwog ICBpZiAocmMgIT0gU1FMSVRFX09LKQpkaWZmIC0tZ2l0IGEvZGVidWdpbmZv ZC9kZWJ1Z2luZm9kLmggYi9kZWJ1Z2luZm9kL2RlYnVnaW5mb2QuaAppbmRl eCAwNjIwZjAyYS4uNmIxYjFjYzMgMTAwNjQ0Ci0tLSBhL2RlYnVnaW5mb2Qv ZGVidWdpbmZvZC5oCisrKyBiL2RlYnVnaW5mb2QvZGVidWdpbmZvZC5oCkBA IC0zNCwxMCArMzQsMTYgQEAKICNkZWZpbmUgREVCVUdJTkZPRF9DQUNIRV9Q QVRIX0VOVl9WQVIgIkRFQlVHSU5GT0RfQ0FDSEVfUEFUSCIKICNkZWZpbmUg REVCVUdJTkZPRF9USU1FT1VUX0VOVl9WQVIgIkRFQlVHSU5GT0RfVElNRU9V VCIKIAorLyogSGFuZGxlIGZvciBkZWJ1Z2luZm9kLWNsaWVudCBjb25uZWN0 aW9uLiAgKi8KK3R5cGVkZWYgc3RydWN0IGRlYnVnaW5mb2RfY2xpZW50IGRl YnVnaW5mb2RfY2xpZW50OworCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVy biAiQyIgewogI2VuZGlmCiAKKy8qIENyZWF0ZSBhIGhhbmRsZSBmb3IgYSBu ZXcgZGVidWdpbmZvZC1jbGllbnQgc2Vzc2lvbi4gICovCitkZWJ1Z2luZm9k X2NsaWVudCAqZGVidWdpbmZvZF9iZWdpbiAodm9pZCk7CisKIC8qIFF1ZXJ5 IHRoZSB1cmxzIGNvbnRhaW5lZCBpbiAkREVCVUdJTkZPRF9VUkxTIGZvciBh IGZpbGUgd2l0aAogICAgdGhlIHNwZWNpZmllZCB0eXBlIGFuZCBidWlsZCBp ZC4gIElmIGJ1aWxkX2lkX2xlbiA9PSAwLCB0aGUKICAgIGJ1aWxkX2lkIGlz IHN1cHBsaWVkIGFzIGEgbG93ZXJjYXNlIGhleGFkZWNpbWFsIHN0cmluZzsg b3RoZXJ3aXNlCkBAIC00OCwyMSArNTQsMjggQEAgZXh0ZXJuICJDIiB7CiAg ICBzdHJkdXAnZCBjb3B5IG9mIHRoZSBuYW1lIG9mIHRoZSBzYW1lIGZpbGUg aW4gdGhlIGNhY2hlLgogICAgQ2FsbGVyIG11c3QgZnJlZSgpIGl0IGxhdGVy LiAqLwogICAKLWludCBkZWJ1Z2luZm9kX2ZpbmRfZGVidWdpbmZvIChjb25z dCB1bnNpZ25lZCBjaGFyICpidWlsZF9pZCwKK2ludCBkZWJ1Z2luZm9kX2Zp bmRfZGVidWdpbmZvIChkZWJ1Z2luZm9kX2NsaWVudCAqY2xpZW50LAorCQkJ ICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1aWxkX2lkLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBidWlsZF9pZF9sZW4sCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKnBhdGgpOwog Ci1pbnQgZGVidWdpbmZvZF9maW5kX2V4ZWN1dGFibGUgKGNvbnN0IHVuc2ln bmVkIGNoYXIgKmJ1aWxkX2lkLAoraW50IGRlYnVnaW5mb2RfZmluZF9leGVj dXRhYmxlIChkZWJ1Z2luZm9kX2NsaWVudCAqY2xpZW50LAorCQkJCWNvbnN0 IHVuc2lnbmVkIGNoYXIgKmJ1aWxkX2lkLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnQgYnVpbGRfaWRfbGVuLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjaGFyICoqcGF0aCk7CiAKLWludCBkZWJ1 Z2luZm9kX2ZpbmRfc291cmNlIChjb25zdCB1bnNpZ25lZCBjaGFyICpidWls ZF9pZCwKK2ludCBkZWJ1Z2luZm9kX2ZpbmRfc291cmNlIChkZWJ1Z2luZm9k X2NsaWVudCAqY2xpZW50LAorCQkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIg KmJ1aWxkX2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBi dWlsZF9pZF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgY2hhciAqZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY2hhciAqKnBhdGgpOwogCi10eXBlZGVmIGludCAoKmRlYnVnaW5mb2Rf cHJvZ3Jlc3Nmbl90KShsb25nIGEsIGxvbmcgYik7Ci1kZWJ1Z2luZm9kX3By b2dyZXNzZm5fdCBkZWJ1Z2luZm9kX3NldF9wcm9ncmVzc2ZuKGRlYnVnaW5m b2RfcHJvZ3Jlc3Nmbl90IGZuKTsKK3R5cGVkZWYgaW50ICgqZGVidWdpbmZv ZF9wcm9ncmVzc2ZuX3QpKGRlYnVnaW5mb2RfY2xpZW50ICpjLCBsb25nIGEs IGxvbmcgYik7Cit2b2lkIGRlYnVnaW5mb2Rfc2V0X3Byb2dyZXNzZm4oZGVi dWdpbmZvZF9jbGllbnQgKmMsCisJCQkgICAgICAgZGVidWdpbmZvZF9wcm9n cmVzc2ZuX3QgZm4pOworCisvKiBSZWxlYXNlIGRlYnVnaW5mb2QgY2xpZW50 IGNvbm5lY3Rpb24gY29udGV4dCBoYW5kbGUuICAqLwordm9pZCBkZWJ1Z2lu Zm9kX2VuZCAoZGVidWdpbmZvZF9jbGllbnQgKmNsaWVudCk7CiAKICNpZmRl ZiBfX2NwbHVzcGx1cwogfQpkaWZmIC0tZ2l0IGEvZGVidWdpbmZvZC9saWJk ZWJ1Z2luZm9kLm1hcCBiL2RlYnVnaW5mb2QvbGliZGVidWdpbmZvZC5tYXAK aW5kZXggYjMyMmNiYTYuLjBkMjZmOTNlIDEwMDY0NAotLS0gYS9kZWJ1Z2lu Zm9kL2xpYmRlYnVnaW5mb2QubWFwCisrKyBiL2RlYnVnaW5mb2QvbGliZGVi dWdpbmZvZC5tYXAKQEAgLTEsNiArMSw4IEBACiBFTEZVVElMU18wIHsgfTsK IEVMRlVUSUxTXzAuMTc4IHsKICAgZ2xvYmFsOgorICBkZWJ1Z2luZm9kX2Jl Z2luOworICBkZWJ1Z2luZm9kX2VuZDsKICAgZGVidWdpbmZvZF9maW5kX2Rl YnVnaW5mbzsKICAgZGVidWdpbmZvZF9maW5kX2V4ZWN1dGFibGU7CiAgIGRl YnVnaW5mb2RfZmluZF9zb3VyY2U7CmRpZmYgLS1naXQgYS9saWJkd2ZsL01h a2VmaWxlLmFtIGIvbGliZHdmbC9NYWtlZmlsZS5hbQppbmRleCAyOTA0NmU5 ZS4uNDdiZDYyYTUgMTAwNjQ0Ci0tLSBhL2xpYmR3ZmwvTWFrZWZpbGUuYW0K KysrIGIvbGliZHdmbC9NYWtlZmlsZS5hbQpAQCAtNzAsNyArNzAsNyBAQCBs aWJkd2ZsX2FfU09VUkNFUyA9IGR3ZmxfYmVnaW4uYyBkd2ZsX2VuZC5jIGR3 ZmxfZXJyb3IuYyBkd2ZsX3ZlcnNpb24uYyBcCiAJCSAgICBsaW5rX21hcC5j IGNvcmUtZmlsZS5jIG9wZW4uYyBpbWFnZS1oZWFkZXIuYyBcCiAJCSAgICBk d2ZsX2ZyYW1lLmMgZnJhbWVfdW53aW5kLmMgZHdmbF9mcmFtZV9wYy5jIFwK IAkJICAgIGxpbnV4LXBpZC1hdHRhY2guYyBsaW51eC1jb3JlLWF0dGFjaC5j IGR3ZmxfZnJhbWVfcmVncy5jIFwKLQkJICAgIGd6aXAuYworCQkgICAgZ3pp cC5jIGRlYnVnaW5mb2QtY2xpZW50LmMKIAogaWYgQlpMSUIKIGxpYmR3Zmxf YV9TT1VSQ0VTICs9IGJ6aXAyLmMKZGlmZiAtLWdpdCBhL2xpYmR3ZmwvZGVi dWdpbmZvZC1jbGllbnQuYyBiL2xpYmR3ZmwvZGVidWdpbmZvZC1jbGllbnQu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uMzdhNGM3 MWYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJkd2ZsL2RlYnVnaW5mb2QtY2xp ZW50LmMKQEAgLTAsMCArMSwxMjIgQEAKKy8qIFRyeSB0byBnZXQgYW4gRUxG IG9yIGRlYnVnIGZpbGUgdGhyb3VnaCB0aGUgZGVidWdpbmZvZC4KKyAgIENv cHlyaWdodCAoQykgMjAxOSBSZWQgSGF0LCBJbmMuCisgICBUaGlzIGZpbGUg aXMgcGFydCBvZiBlbGZ1dGlscy4KKworICAgVGhpcyBmaWxlIGlzIGZyZWUg c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp ZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXIKKworICAgICAq IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVi bGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgICAgU29mdHdhcmUgRm91bmRhdGlv bjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0Cisg ICAgICAgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uCisKKyAgIG9y CisKKyAgICAgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMg cHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICAgICAgU29mdHdhcmUgRm91bmRh dGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0 CisgICAgICAgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uCisKKyAg IG9yIGJvdGggaW4gcGFyYWxsZWwsIGFzIGhlcmUuCisKKyAgIGVsZnV0aWxz IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1 c2VmdWwsIGJ1dAorICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklM SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl IHRoZSBHTlUKKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg ZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGll cyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisgICB0 aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdp dGggdGhpcyBwcm9ncmFtLiAgSWYKKyAgIG5vdCwgc2VlIDxodHRwOi8vd3d3 LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZmRlZiBIQVZFX0NPTkZJ R19ICisjIGluY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRl ICJsaWJkd2ZsUC5oIgorI2luY2x1ZGUgPGRsZmNuLmg+CisKK3N0YXRpYyBf X3R5cGVvZl9fIChkZWJ1Z2luZm9kX2JlZ2luKSAqZnBfZGVidWdpbmZvZF9i ZWdpbjsKK3N0YXRpYyBfX3R5cGVvZl9fIChkZWJ1Z2luZm9kX2ZpbmRfZXhl Y3V0YWJsZSkgKmZwX2RlYnVnaW5mb2RfZmluZF9leGVjdXRhYmxlOworc3Rh dGljIF9fdHlwZW9mX18gKGRlYnVnaW5mb2RfZmluZF9kZWJ1Z2luZm8pICpm cF9kZWJ1Z2luZm9kX2ZpbmRfZGVidWdpbmZvOworc3RhdGljIF9fdHlwZW9m X18gKGRlYnVnaW5mb2RfZW5kKSAqZnBfZGVidWdpbmZvZF9lbmQ7CisKKy8q IE5COiB0aGlzIGlzIHNsaWdodGx5IHRocmVhZC11bnNhZmUgKi8KKworc3Rh dGljIGRlYnVnaW5mb2RfY2xpZW50ICoKK2dldF9jbGllbnQgKER3ZmwgKmR3 ZmwpCit7CisgIGlmIChkd2ZsLT5kZWJ1Z2luZm9kICE9IE5VTEwpCisgICAg cmV0dXJuIGR3ZmwtPmRlYnVnaW5mb2Q7CisKKyAgaWYgKGZwX2RlYnVnaW5m b2RfYmVnaW4gPT0gTlVMTCkKKyAgICB7CisgICAgICB2b2lkICpkZWJ1Z2lu Zm9kX3NvID0gZGxvcGVuKCJsaWJkZWJ1Z2luZm9kLSIgVkVSU0lPTiAiLnNv IiwgUlRMRF9MQVpZKTsKKworICAgICAgaWYgKGRlYnVnaW5mb2Rfc28gPT0g TlVMTCkKKwlkZWJ1Z2luZm9kX3NvID0gZGxvcGVuKCJsaWJkZWJ1Z2luZm9k LnNvIiwgUlRMRF9MQVpZKTsKKworICAgICAgaWYgKGRlYnVnaW5mb2Rfc28g IT0gTlVMTCkKKwl7CisJICBmcF9kZWJ1Z2luZm9kX2JlZ2luID0gZGxzeW0g KGRlYnVnaW5mb2Rfc28sICJkZWJ1Z2luZm9kX2JlZ2luIik7CisJICBmcF9k ZWJ1Z2luZm9kX2ZpbmRfZXhlY3V0YWJsZSA9IGRsc3ltIChkZWJ1Z2luZm9k X3NvLAorCQkJCQkJICJkZWJ1Z2luZm9kX2ZpbmRfZXhlY3V0YWJsZSIpOwor CSAgZnBfZGVidWdpbmZvZF9maW5kX2RlYnVnaW5mbyA9IGRsc3ltIChkZWJ1 Z2luZm9kX3NvLAorCQkJCQkJImRlYnVnaW5mb2RfZmluZF9kZWJ1Z2luZm8i KTsKKwkgIGZwX2RlYnVnaW5mb2RfZW5kID0gZGxzeW0gKGRlYnVnaW5mb2Rf c28sICJkZWJ1Z2luZm9kX2VuZCIpOworCX0KKworICAgICAgaWYgKGZwX2Rl YnVnaW5mb2RfYmVnaW4gPT0gTlVMTAorCSAgfHwgZnBfZGVidWdpbmZvZF9m aW5kX2V4ZWN1dGFibGUgPT0gTlVMTAorCSAgfHwgZnBfZGVidWdpbmZvZF9m aW5kX2RlYnVnaW5mbyA9PSBOVUxMCisJICB8fCBmcF9kZWJ1Z2luZm9kX2Vu ZCA9PSBOVUxMKQorCWZwX2RlYnVnaW5mb2RfYmVnaW4gPSAodm9pZCAqKSAt MTsgLyogbmV2ZXIgdHJ5IGFnYWluICovCisgICAgfQorCisgIGlmIChmcF9k ZWJ1Z2luZm9kX2JlZ2luICE9IE5VTEwKKyAgICAgICYmIGZwX2RlYnVnaW5m b2RfYmVnaW4gIT0gKHZvaWQgKikgLTEpCisgICAgeworICAgICAgZHdmbC0+ ZGVidWdpbmZvZCA9ICgqZnBfZGVidWdpbmZvZF9iZWdpbikgKCk7CisgICAg ICByZXR1cm4gZHdmbC0+ZGVidWdpbmZvZDsKKyAgICB9CisKKyAgcmV0dXJu IE5VTEw7Cit9CisKK2ludAorX19saWJkd2ZsX2RlYnVnaW5mb2RfZmluZF9l eGVjdXRhYmxlIChEd2ZsICpkd2ZsLAorCQkJCSAgICAgIGNvbnN0IHVuc2ln bmVkIGNoYXIgKmJ1aWxkX2lkX2JpdHMsCisJCQkJICAgICAgc2l6ZV90IGJ1 aWxkX2lkX2xlbikKK3sKKyAgaW50IGZkID0gLTE7CisgIGlmIChidWlsZF9p ZF9sZW4gPiAwKQorICAgIHsKKyAgICAgIGRlYnVnaW5mb2RfY2xpZW50ICpj ID0gZ2V0X2NsaWVudCAoZHdmbCk7CisgICAgICBpZiAoYyAhPSBOVUxMKQor CWZkID0gKCpmcF9kZWJ1Z2luZm9kX2ZpbmRfZXhlY3V0YWJsZSkgKGMsIGJ1 aWxkX2lkX2JpdHMsCisJCQkJCSAgICAgICBidWlsZF9pZF9sZW4sIE5VTEwp OworICAgIH0KKworICByZXR1cm4gZmQ7Cit9CisKK2ludAorX19saWJkd2Zs X2RlYnVnaW5mb2RfZmluZF9kZWJ1Z2luZm8gKER3ZmwgKmR3ZmwsCisJCQkJ ICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWlsZF9pZF9iaXRzLAorCQkJ CSAgICAgc2l6ZV90IGJ1aWxkX2lkX2xlbikKK3sKKyAgaW50IGZkID0gLTE7 CisgIGlmIChidWlsZF9pZF9sZW4gPiAwKQorICAgIHsKKyAgICAgIGRlYnVn aW5mb2RfY2xpZW50ICpjID0gZ2V0X2NsaWVudCAoZHdmbCk7CisgICAgICBp ZiAoYyAhPSBOVUxMKQorCWZkID0gKCpmcF9kZWJ1Z2luZm9kX2ZpbmRfZGVi dWdpbmZvKSAoYywgYnVpbGRfaWRfYml0cywKKwkJCQkJICAgICAgYnVpbGRf aWRfbGVuLCBOVUxMKTsKKyAgICB9CisKKyAgcmV0dXJuIGZkOworfQorCit2 b2lkCitfX2xpYmR3ZmxfZGVidWdpbmZvZF9lbmQgKGRlYnVnaW5mb2RfY2xp ZW50ICpjKQoreworICBpZiAoYyAhPSBOVUxMKQorICAgICgqZnBfZGVidWdp bmZvZF9lbmQpIChjKTsKK30KZGlmZiAtLWdpdCBhL2xpYmR3ZmwvZHdmbF9i dWlsZF9pZF9maW5kX2VsZi5jIGIvbGliZHdmbC9kd2ZsX2J1aWxkX2lkX2Zp bmRfZWxmLmMKaW5kZXggYzgxMTY0NjguLjRlNTYxNDNmIDEwMDY0NAotLS0g YS9saWJkd2ZsL2R3ZmxfYnVpbGRfaWRfZmluZF9lbGYuYworKysgYi9saWJk d2ZsL2R3ZmxfYnVpbGRfaWRfZmluZF9lbGYuYwpAQCAtMzQsOSArMzQsNyBA QAogI2luY2x1ZGUgPGludHR5cGVzLmg+CiAjaW5jbHVkZSA8ZmNudGwuaD4K ICNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxkbGZjbi5oPgogI2lu Y2x1ZGUgInN5c3RlbS5oIgotI2luY2x1ZGUgImRlYnVnaW5mb2QuaCIKIAog CiBpbnQKQEAgLTE4OSwzMiArMTg3LDE1IEBAIGR3ZmxfYnVpbGRfaWRfZmlu ZF9lbGYgKER3ZmxfTW9kdWxlICptb2QsCiAgICAgICBmcmVlICgqZmlsZV9u YW1lKTsKICAgICAgICpmaWxlX25hbWUgPSBOVUxMOwogICAgIH0KLSAgZWxz ZSB7Ci0gICAgLyogTkI6IHRoaXMgaXMgc2xpZ2h0bHkgdGhyZWFkLXVuc2Fm ZSAqLwotICAgIC8qIE5COiBzZWUgYWxzbyBzaW1pbGFyIGNvZGUgaW4gZmlu ZC1kZWJ1Z2luZm8uYyAqLwotICAgIHN0YXRpYyBfX3R5cGVvZl9fIChkZWJ1 Z2luZm9kX2ZpbmRfZXhlY3V0YWJsZSkgKmZwX2RlYnVnaW5mb2RfZmluZF9l eGVjdXRhYmxlOwotCi0gICAgaWYgKGZwX2RlYnVnaW5mb2RfZmluZF9leGVj dXRhYmxlID09IE5VTEwpCi0gICAgICB7Ci0gICAgICAgIHZvaWQgKmRlYnVn aW5mb2Rfc28gPSBkbG9wZW4oImxpYmRlYnVnaW5mb2QtIiBWRVJTSU9OICIu c28iLCBSVExEX0xBWlkpOwotICAgICAgICBpZiAoZGVidWdpbmZvZF9zbyA9 PSBOVUxMKQotICAgICAgICAgIGRlYnVnaW5mb2Rfc28gPSBkbG9wZW4oImxp YmRlYnVnaW5mb2Quc28iLCBSVExEX0xBWlkpOwotICAgICAgICBpZiAoZGVi dWdpbmZvZF9zbyAhPSBOVUxMKQotICAgICAgICAgIGZwX2RlYnVnaW5mb2Rf ZmluZF9leGVjdXRhYmxlID0gZGxzeW0gKGRlYnVnaW5mb2Rfc28sICJkZWJ1 Z2luZm9kX2ZpbmRfZXhlY3V0YWJsZSIpOwotICAgICAgICBpZiAoZnBfZGVi dWdpbmZvZF9maW5kX2V4ZWN1dGFibGUgPT0gTlVMTCkKLSAgICAgICAgICBm cF9kZWJ1Z2luZm9kX2ZpbmRfZXhlY3V0YWJsZSA9ICh2b2lkICopIC0xOyAv KiBuZXZlciB0cnkgYWdhaW4gKi8KLSAgICAgIH0KLQotICAgIGlmIChmcF9k ZWJ1Z2luZm9kX2ZpbmRfZXhlY3V0YWJsZSAhPSBOVUxMICYmIGZwX2RlYnVn aW5mb2RfZmluZF9leGVjdXRhYmxlICE9ICh2b2lkICopIC0xKQotICAgICAg ewotICAgICAgICAvKiBJZiBhbGwgZWxzZSBmYWlscyBhbmQgYSBidWlsZC1p ZCBpcyBhdmFpbGFibGUsIHF1ZXJ5IHRoZQotICAgICAgICAgICBkZWJ1Z2lu Zm8tc2VydmVyIGlmIGVuYWJsZWQuICAqLwotICAgICAgICBpZiAoZmQgPCAw ICYmIG1vZC0+YnVpbGRfaWRfbGVuID4gMCkKLSAgICAgICAgICBmZCA9ICgq ZnBfZGVidWdpbmZvZF9maW5kX2V4ZWN1dGFibGUpIChtb2QtPmJ1aWxkX2lk X2JpdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBtb2QtPmJ1aWxkX2lkX2xlbiwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwotICAg ICAgfQotICB9CisgIGVsc2UKKyAgICB7CisgICAgICAvKiBJZiBhbGwgZWxz ZSBmYWlscyBhbmQgYSBidWlsZC1pZCBpcyBhdmFpbGFibGUsIHF1ZXJ5IHRo ZQorCSBkZWJ1Z2luZm8tc2VydmVyIGlmIGVuYWJsZWQuICAqLworICAgICAg aWYgKGZkIDwgMCAmJiBtb2QtPmJ1aWxkX2lkX2xlbiA+IDApCisJZmQgPSBf X2xpYmR3ZmxfZGVidWdpbmZvZF9maW5kX2V4ZWN1dGFibGUgKG1vZC0+ZHdm bCwKKwkJCQkJCSAgIG1vZC0+YnVpbGRfaWRfYml0cywKKwkJCQkJCSAgIG1v ZC0+YnVpbGRfaWRfbGVuKTsKKyAgICB9CiAKICAgaWYgKGZkIDwgMCAmJiBl cnJubyA9PSAwICYmIG1vZC0+YnVpbGRfaWRfbGVuID4gMCkKICAgICAvKiBT ZXR0aW5nIHRoaXMgd2l0aCBubyBmaWxlIHlldCBsb2FkZWQgaXMgYSBtYXJr ZXIgdGhhdApkaWZmIC0tZ2l0IGEvbGliZHdmbC9kd2ZsX2VuZC5jIGIvbGli ZHdmbC9kd2ZsX2VuZC5jCmluZGV4IDc0ZWU5ZTA3Li40ZjZjNzIyYSAxMDA2 NDQKLS0tIGEvbGliZHdmbC9kd2ZsX2VuZC5jCisrKyBiL2xpYmR3ZmwvZHdm bF9lbmQuYwpAQCAtMzksNiArMzksOCBAQCBkd2ZsX2VuZCAoRHdmbCAqZHdm bCkKICAgaWYgKGR3ZmwgPT0gTlVMTCkKICAgICByZXR1cm47CiAKKyAgX19s aWJkd2ZsX2RlYnVnaW5mb2RfZW5kIChkd2ZsLT5kZWJ1Z2luZm9kKTsKKwog ICBpZiAoZHdmbC0+cHJvY2VzcykKICAgICBfX2xpYmR3ZmxfcHJvY2Vzc19m cmVlIChkd2ZsLT5wcm9jZXNzKTsKIApkaWZmIC0tZ2l0IGEvbGliZHdmbC9m aW5kLWRlYnVnaW5mby5jIGIvbGliZHdmbC9maW5kLWRlYnVnaW5mby5jCmlu ZGV4IDVhYTBjNWJiLi40MDg1NzY0NSAxMDA2NDQKLS0tIGEvbGliZHdmbC9m aW5kLWRlYnVnaW5mby5jCisrKyBiL2xpYmR3ZmwvZmluZC1kZWJ1Z2luZm8u YwpAQCAtMzEsMTEgKzMxLDkgQEAKICNlbmRpZgogCiAjaW5jbHVkZSAibGli ZHdmbFAuaCIKLSNpbmNsdWRlICJkZWJ1Z2luZm9kLmgiCiAjaW5jbHVkZSA8 c3RkaW8uaD4KICNpbmNsdWRlIDxmY250bC5oPgogI2luY2x1ZGUgPHVuaXN0 ZC5oPgotI2luY2x1ZGUgPGRsZmNuLmg+CiAjaW5jbHVkZSA8c3lzL3N0YXQu aD4KICNpbmNsdWRlICJzeXN0ZW0uaCIKIApAQCAtNDAwLDMwICszOTgsOCBA QCBkd2ZsX3N0YW5kYXJkX2ZpbmRfZGVidWdpbmZvIChEd2ZsX01vZHVsZSAq bW9kLAogICAgICAgZnJlZSAoY2Fub24pOwogICAgIH0KIAotICB7Ci0gICAg LyogTkI6IHRoaXMgaXMgc2xpZ2h0bHkgdGhyZWFkLXVuc2FmZSAqLwotICAg IC8qIE5COiBzZWUgYWxzbyBzaW1pbGFyIGNvZGUgaW4gZmluZC1kZWJ1Z2lu Zm8uYyAqLwotICAgIHN0YXRpYyBfX3R5cGVvZl9fIChkZWJ1Z2luZm9kX2Zp bmRfZGVidWdpbmZvKSAqZnBfZGVidWdpbmZvZF9maW5kX2RlYnVnaW5mbzsK LQotICAgIGlmIChmcF9kZWJ1Z2luZm9kX2ZpbmRfZGVidWdpbmZvID09IE5V TEwpCi0gICAgICB7Ci0gICAgICAgIHZvaWQgKmRlYnVnaW5mb2Rfc28gPSBk bG9wZW4oImxpYmRlYnVnaW5mb2QtIiBWRVJTSU9OICIuc28iLCBSVExEX0xB WlkpOwotICAgICAgICBpZiAoZGVidWdpbmZvZF9zbyA9PSBOVUxMKQotICAg ICAgICAgIGRlYnVnaW5mb2Rfc28gPSBkbG9wZW4oImxpYmRlYnVnaW5mb2Qu c28iLCBSVExEX0xBWlkpOwotICAgICAgICBpZiAoZGVidWdpbmZvZF9zbyAh PSBOVUxMKQotICAgICAgICAgIGZwX2RlYnVnaW5mb2RfZmluZF9kZWJ1Z2lu Zm8gPSBkbHN5bSAoZGVidWdpbmZvZF9zbywgImRlYnVnaW5mb2RfZmluZF9k ZWJ1Z2luZm8iKTsKLSAgICAgICAgaWYgKGZwX2RlYnVnaW5mb2RfZmluZF9k ZWJ1Z2luZm8gPT0gTlVMTCkKLSAgICAgICAgICBmcF9kZWJ1Z2luZm9kX2Zp bmRfZGVidWdpbmZvID0gKHZvaWQgKikgLTE7IC8qIG5ldmVyIHRyeSBhZ2Fp biAqLwotICAgICAgfQotCi0gICAgaWYgKGZwX2RlYnVnaW5mb2RfZmluZF9k ZWJ1Z2luZm8gIT0gTlVMTCAmJiBmcF9kZWJ1Z2luZm9kX2ZpbmRfZGVidWdp bmZvICE9ICh2b2lkICopIC0xKQotICAgICAgewotICAgICAgICAvKiBJZiBh bGwgZWxzZSBmYWlscyBhbmQgYSBidWlsZC1pZCBpcyBhdmFpbGFibGUsIHF1 ZXJ5IHRoZQotICAgICAgICAgICBkZWJ1Z2luZm8tc2VydmVyIGlmIGVuYWJs ZWQuICAqLwotICAgICAgICBpZiAoZmQgPCAwICYmIGJpdHNfbGVuID4gMCkK LSAgICAgICAgICBmZCA9ICgqZnBfZGVidWdpbmZvZF9maW5kX2RlYnVnaW5m bykgKGJpdHMsIGJpdHNfbGVuLCBOVUxMKTsKLSAgICAgIH0KLSAgfQorICBp ZiAoZmQgPCAwICYmIGJpdHNfbGVuID4gMCkKKyAgICBmZCA9IF9fbGliZHdm bF9kZWJ1Z2luZm9kX2ZpbmRfZGVidWdpbmZvIChtb2QtPmR3ZmwsIGJpdHMs IGJpdHNfbGVuKTsKIAogICByZXR1cm4gZmQ7CiB9CmRpZmYgLS1naXQgYS9s aWJkd2ZsL2xpYmR3ZmxQLmggYi9saWJkd2ZsL2xpYmR3ZmxQLmgKaW5kZXgg OTQxYThiNjYuLjNhOTNmYzAxIDEwMDY0NAotLS0gYS9saWJkd2ZsL2xpYmR3 ZmxQLmgKKysrIGIvbGliZHdmbC9saWJkd2ZsUC5oCkBAIC00MCw2ICs0MCw3 IEBACiAKICNpbmNsdWRlICIuLi9saWJkdy9saWJkd1AuaCIJLyogV2UgbmVl ZCBpdHMgSU5UREVDTHMuICAqLwogI2luY2x1ZGUgIi4uL2xpYmR3ZWxmL2xp YmR3ZWxmUC5oIgorI2luY2x1ZGUgIi4uL2RlYnVnaW5mb2QvZGVidWdpbmZv ZC5oIgogCiB0eXBlZGVmIHN0cnVjdCBEd2ZsX1Byb2Nlc3MgRHdmbF9Qcm9j ZXNzOwogCkBAIC0xMTQsNiArMTE1LDcgQEAgc3RydWN0IER3ZmxfVXNlcl9D b3JlCiBzdHJ1Y3QgRHdmbAogewogICBjb25zdCBEd2ZsX0NhbGxiYWNrcyAq Y2FsbGJhY2tzOworICBkZWJ1Z2luZm9kX2NsaWVudCAqZGVidWdpbmZvZDsK IAogICBEd2ZsX01vZHVsZSAqbW9kdWxlbGlzdDsgICAgLyogTGlzdCBpbiBv cmRlciB1c2VkIGJ5IGZ1bGwgdHJhdmVyc2Fscy4gICovCiAKQEAgLTYzNSw2 ICs2MzcsMTkgQEAgZXh0ZXJuIER3ZmxfRXJyb3IgX19saWJkd19vcGVuX2Vs ZiAoaW50IGZkLCBFbGYgKiplbGZwKSBpbnRlcm5hbF9mdW5jdGlvbjsKIGV4 dGVybiBib29sIF9fbGliZHdmbF9keW5hbWljX3ZhZGRyX2dldCAoRWxmICpl bGYsIEdFbGZfQWRkciAqdmFkZHJwKQogICBpbnRlcm5hbF9mdW5jdGlvbjsK IAorLyogSW50ZXJuYWwgaW50ZXJmYWNlIHRvIGxpYmRlYnVnaW5mb2QgKGlm IGluc3RhbGxlZCkuICAqLworaW50CitfX2xpYmR3ZmxfZGVidWdpbmZvZF9m aW5kX2V4ZWN1dGFibGUgKER3ZmwgKmR3ZmwsCisJCQkJICAgICAgY29uc3Qg dW5zaWduZWQgY2hhciAqYnVpbGRfaWRfYml0cywKKwkJCQkgICAgICBzaXpl X3QgYnVpbGRfaWRfbGVuKTsKK2ludAorX19saWJkd2ZsX2RlYnVnaW5mb2Rf ZmluZF9kZWJ1Z2luZm8gKER3ZmwgKmR3ZmwsCisJCQkJICAgICBjb25zdCB1 bnNpZ25lZCBjaGFyICpidWlsZF9pZF9iaXRzLAorCQkJCSAgICAgc2l6ZV90 IGJ1aWxkX2lkX2xlbik7Cit2b2lkCitfX2xpYmR3ZmxfZGVidWdpbmZvZF9l bmQgKGRlYnVnaW5mb2RfY2xpZW50ICpjKTsKKworCiAvKiBUaGVzZSBhcmUg d29ya2luZyBuaWNlbHkgZm9yIC0tY29yZSwgYnV0IGFyZSBub3QgcmVhZHkg dG8gYmUKICAgIGV4cG9ydGVkIGludGVyZmFjZXMgcXVpdGUgeWV0LiAgKi8K IAotLSAKMi4xOC4xCgo= --=-+Asw+hI29UbxyRqMZZat--