Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w9m3k-001jad-2o for pgsql-hackers@arkaria.postgresql.org; Mon, 06 Apr 2026 15:40:17 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w9m3i-009ypK-1p for pgsql-hackers@arkaria.postgresql.org; Mon, 06 Apr 2026 15:40:15 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w9m3h-009ypB-0i for pgsql-hackers@lists.postgresql.org; Mon, 06 Apr 2026 15:40:14 +0000 Received: from mail-wr1-x434.google.com ([2a00:1450:4864:20::434]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w9m3d-00000000sJ6-29sX for pgsql-hackers@lists.postgresql.org; Mon, 06 Apr 2026 15:40:12 +0000 Received: by mail-wr1-x434.google.com with SMTP id ffacd0b85a97d-43d01d6b50cso3809308f8f.1 for ; Mon, 06 Apr 2026 08:40:09 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1775490008; cv=none; d=google.com; s=arc-20240605; b=ISfvqnGtL5l/Mw41Fre7s+3PnmpaoQyVslcxeMgWEUxaa0PrTtOTbbfMdvvXw5jhwz lNgTcJ/oQ6MHp5FssONdDMyRfrDg/DJPoS8H2H/1iNrCz9J5MZ4xJH1Ae71QuJ+ZKKoa nPISmiy52VA2PsLT7eugvWlCWdXG+3ktVCKzfGBhav967XxvwZSH/0QxIX0ZQBQr7DTB Kq491tlO4ZGUuH32fwLD6JoehJp9wWXaSW56jrNPdwzkS6PeXmsk1vW/WVz/a8LualiQ 5CZaXZWXvgB1UbhrnzxqWj/tmuvRIxG2LpxUsiDDz0IgKIUUIONRlgPh7Nccg7POBPjd vavw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=rg2DSCh7liWBawoZJ0Y5QNd8sAlgt8gGLF5u3vVd7FU=; fh=9riBXRxQ0Nw2WOdezPdXd6aG0HAcBPYg9PUX9DR8hVg=; b=SsWcHVkjZeqj1iSkAmnH9A/UqYtqpuI0hMZFqdOdTjLzAyousG7AFSQcXbUZnzgt+U oJhyiSSOZhForb1tAakdOykEmUk/XsPBkrAbEM5B+j8Jk24MSsSnEPYivBmd1V/HjjGG RoK1b951vMFw56qk70tRyKUOJrhe6VH4Ov8aTxSyTszNO4CF2MZ5EH9os0TiHqVN4n3L 6VWSweumSoJWOtjaWhvTKIEhkQBmSN7roxp+MwhG6y+HYqmyA+x9uYAXyOn6BNkCwOaa zYLkqZsEhp68fsOhWvPNeqoH/f13SSGEaYHiiWB381LvHWepHyiYH6yulZUij1GD9UEP M/Ig==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bowt-ie.20251104.gappssmtp.com; s=20251104; t=1775490008; x=1776094808; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=rg2DSCh7liWBawoZJ0Y5QNd8sAlgt8gGLF5u3vVd7FU=; b=xNEKL4gP2AthXdv0qbn4VMgARGb72xtpIvd/BEjE5o53OzoeoCA6dZ4wgj3WU577Tx utz89zdEyAee/o9ljIq5Ai8zVOEJRQz30LDLV+15y5mnxBlA8HTKlQmZm5oai5QOYNPK HIpfKVfQqGrQu4ZYdZB1OrDCy7fro4kSstrppsZLcZVl72NXwZkuDRzO6BCF9Q5XdrIU C1CEbQVkNbf/TamH03w5ZuApISj3Dx/Q6QttjKxWgmUbFRYmo8hunNf7VXuN/iS4KQ25 Yy09379AubDQ+KvsBKH5P6EemqSQdaoJOpgdQYZgek2QxZBNuzq25WO/86IzNW10ybGT wDLA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775490008; x=1776094808; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=rg2DSCh7liWBawoZJ0Y5QNd8sAlgt8gGLF5u3vVd7FU=; b=jRaqkT8ESTNLGIM8dWjJ5bc4Dks7lgHtgDJM3SL3ND6/rAZ7M71HkBSVLIdZ5Zc+wV QAfZDw/ZTUJ0lujp5LBDb4qWxMZQJSCjPonaWZuEu0bCHxN5P6r4Oz7y9j+uYiFcxPfp +J6aa+NrCFfnMkdeCXjcKkogADYZ1ShpL3DY30akPD88C3haylmk4NahrgNOjjHNr1sc kX8ycVqysbN19ALerImN3IvVWnSRuEB3MRByuiJdLjWJtYmwnV1e9XWCZNQogVfOXCpQ N2gBjk+tziuB0jZ2F0vOPAA1qlWNX0sSI8taQqUW0D+bZXzLwypU9oQYPeJB2fdie+uW 7iwQ== X-Forwarded-Encrypted: i=1; AJvYcCV3qQZ3KKHEZJ3T0DCOabokXhX3qqfTsAlWzA1CrbSCeiV/yL1YJMFn4FCZqvwvM/ibL1LnsP23H8rv6BNH@lists.postgresql.org X-Gm-Message-State: AOJu0Yw5azRZMj5Mg306GbrAOfI7GhJaSgnf0guCmQFaeAYU5raZkuAg g3vDV8vzdo9/rkkgQJQ4wIjI5Bq3IbvOGOI22F5gwQMeOFD4SuNnSjbxvj8rBugOBTVclg/Yrat pt1Nq8+tQgDIleDz9T27QjjuUn3+yhaGA2We5PNrbeg== X-Gm-Gg: AeBDiev7syJgT3tQRVL8j7ofUVjG5J8RspU3+Iobxqv2x+1KgZjuCzUN8zGHfnN3AeI 16aPTsXdbsrGY2IFKqFeN74GWfCKnEQUlUYpYtnYb+5aCvMSuyx5rn/P3y1ozgFg5bQvR3BkWge rBYB7xE2ZHwGPjGfBFZEb6FmKj4Z9Lap3AziL9r0ugV0SYm1vueDU/Ng/dY5POppbIlcLpqJoMY usFG6VoWyO7FRG2TA2TThQJeO3+vYxdY7jq6uxCwTmtD1LfyKdGfEzIuMW3XcVfdJMB4wPoZcYE tjCyeeH6RlQhbGwCQwnN9RQYdkBbGQRvUeyMxubfZdi7LeXae9GHHPfaxxogRTcV X-Received: by 2002:a05:6000:4305:b0:43c:f925:8fc0 with SMTP id ffacd0b85a97d-43d29304ef8mr20992928f8f.50.1775490007211; Mon, 06 Apr 2026 08:40:07 -0700 (PDT) MIME-Version: 1.0 References: <6sphk3ycctmbihlrykts7uj6mjakop6wrq2dhe3vnlmrnldz2f@uuwmkd6jjrxa> In-Reply-To: From: Peter Geoghegan Date: Mon, 6 Apr 2026 11:39:39 -0400 X-Gm-Features: AQROBzD6EvSkMUl6FOP1SypFlQWSfGUWPzZSi1f1LewPpCU7XOX6XvM7SzMvsBw Message-ID: Subject: Re: index prefetching To: Andres Freund Cc: Tomas Vondra , Alexandre Felipe , Thomas Munro , Nazir Bilal Yavuz , Robert Haas , Melanie Plageman , PostgreSQL Hackers , Georgios , Konstantin Knizhnik , Dilip Kumar Content-Type: multipart/mixed; boundary="0000000000002eda15064ecc7bcf" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000002eda15064ecc7bcf Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Mon, Apr 6, 2026 at 9:09=E2=80=AFAM Andres Freund w= rote: > Quite a few people have tried very hard over the last months to get this,= and > its dependencies, into a committable shape. The patchset is much better t= han > it was. The performance is better. Regressions are drastically reduced. T= he > performance gains are often unbelievably large. > > I'd be happy to merge the patchset from the performance POV. I'd be happy= to > merge it from a high-level architectural perspective. It's just the pesky > details that need more buffing out than our tired arms can do in the rema= ining > time. I think Peter feels similar. That's a good summary. At a high level, the patch has no significant problems. It introduces virtually no regressions, which required a great deal of effort from all of us -- that exceeds what I once thought possible. There's a general sense that the high level architecture is a big improvement, without any notable flaws. As you said, it came down to lots of small things. And timing. Many last minute non-trivial changes to specific aspects of the patch design seemed necessary. This all happened under enormous time pressure. And I'm honestly just exhausted right now (I'm likely not the only one). I just couldn't justify committing such an invasive patch set under those circumstances. Attached is v24 -- one last revision ahead of feature freeze, just to post what I have, before taking some time away from this. Summary of changes from v23: * index_getnext_tid is renamed and moved into indexbatch.h, where it becomes a utility function that has a similar contract to the one that is used to call amgetbatch (and manage changes in the batch direction). Now there's only one canonical call to pgstat_count_index_tuples in heapam, and no accidental table index fetch state resets when a scan that happens to be using amgettuple ends. * Miscellaneous small cleanups, including renaming some of the functions in indexbatch.c. * Slightly simplified tableam_util_batchscan_mark_pos logic. Obviously this isn't everything that I'd hoped would appear in the next revision. It's just what got done in the past 24 hours. --=20 Peter Geoghegan --0000000000002eda15064ecc7bcf Content-Type: application/octet-stream; name="v24-0007-aio-Fix-pgaio_io_wait-for-staged-IOs-B.patch" Content-Disposition: attachment; filename="v24-0007-aio-Fix-pgaio_io_wait-for-staged-IOs-B.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnncq24w2 RnJvbSAxOWFkNmU4ZTdhOWY1YWJlZTc4N2Q1ZGUzNjZmZmY0ZjcwMDdmOTljIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFN1biwgMjIgTWFyIDIwMjYgMTU6MTI6NDEgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyNCA3 LzhdIGFpbzogRml4IHBnYWlvX2lvX3dhaXQoKSBmb3Igc3RhZ2VkIElPcyAoQikuCgpQcmV2aW91 c2x5LCBwZ2Fpb19pb193YWl0KCkncyBjYXNlcyBmb3IgUEdBSU9fSFNfREVGSU5FRCBhbmQKUEdB SU9fSFNfU1RBR0VEIGZlbGwgdGhyb3VnaCB0byB3YWl0aW5nIGZvciBjb21wbGV0aW9uLiAgVGhl IG93bmVyIG9ubHkKcHJvbWlzZXMgdG8gYWR2YW5jZSBpdCB0byBQR0FJT19IU19TVUJNSVRURUQu ICBUaGUgd2FpdGVyIG5lZWRzIHRvIGJlCnByZXBhcmVkIHRvIGNhbGwgLT53YWl0X29uZSgpIGl0 c2VsZiBvbmNlIHRoZSBJTyBpcyBzdWJtaXR0ZWQgaW4gb3JkZXIKdG8gZ3VhcmFudGVlIHByb2dy ZXNzIGFuZCBhdm9pZCBkZWFkbG9ja3Mgb24gSU8gbWV0aG9kcyB0aGF0IHByb3ZpZGUKLT53YWl0 X29uZSgpLgoKSW50cm9kdWNlIGEgbmV3IHBlci1iYWNrZW5kIGNvbmRpdGlvbiB2YXJpYWJsZSBz dWJtaXRfY3YsIHdva2VuIGJ5IGJ5CnBnYWlvX3N1Ym1pdF9zdGFnZSgpLCBhbmQgdXNlIGl0IHRv IHdhaXQgZm9yIHRoZSBzdGF0ZSB0byBhZHZhbmNlLiAgVGhlCm5ldyBicm9hZGNhc3QgZG9lc24n dCBzZWVtIHRvIGNhdXNlIGFueSBtZWFzdXJhYmxlIHNsb3dkb3duLCBzbyBpZGVhcwpmb3Igb3B0 aW1pemluZyB0aGUgY29tbW9uIG5vLXdhaXRlcnMgY2FzZSB3ZXJlIGFiYW5kb25lZCBmb3Igbm93 LgoKSXQgbWF5IG5vdCBiZSBwb3NzaWJsZSB0byByZWFjaCBhbnkgcmVhbCBkZWFkbG9jayB3aXRo IGV4aXN0aW5nIEFJTwp1c2VycywgYnV0IHRoYXQgc2l0dWF0aW9uIGNvdWxkIGNoYW5nZS4gIFRo ZXJlJ3MgYWxzbyBubyByZWFzb24gdGhlCndhaXRlciBzaG91bGRuJ3QgYmVnaW4gdG8gd2FpdCB2 aWEgdGhlIElPIG1ldGhvZCBhcyBzb29uIGFzIHBvc3NpYmxlCmV2ZW4gd2l0aG91dCBhIGRlYWRs b2NrLgoKUGlja2VkIHVwIGJ5IHRlc3RpbmcgYSBwcm9wb3NlZCBJTyBtZXRob2QgdGhhdCBoYXMg LT53YWl0X29uZSgpLCBsaWtlCmlvX21ldGhvZD1pb191cmluZywgYW5kIGNvZGUgcmV2aWV3LgoK QmFja3BhdGNoLXRocm91Z2g6IDE4ClJldmlld2VkLWJ5OiBBbmRyZXMgRnJldW5kIDxhbmRyZXNA YW5hcmF6ZWwuZGU+CkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vQ0ElMkJoVUtHJTJC bVpZclNkbmhrLVhyQllPMThIODI5Szc3UzlnTUtVc3lrT2lUSnRxQjQzZyU0MG1haWwuZ21haWwu Y29tCi0tLQogc3JjL2luY2x1ZGUvc3RvcmFnZS9haW9faW50ZXJuYWwuaCAgICAgICAgICAgIHwg IDcgKysrCiBzcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9haW8uYyAgICAgICAgICAgICAgICAgfCA1 MCArKysrKysrKysrKysrKysrLS0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9haW9faW5pdC5j ICAgICAgICAgICAgfCAgMSArCiAuLi4vdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVudF9uYW1lcy50 eHQgICAgICAgfCAgMSArCiA0IGZpbGVzIGNoYW5nZWQsIDUxIGluc2VydGlvbnMoKyksIDggZGVs ZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9haW9faW50ZXJuYWwu aCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYWlvX2ludGVybmFsLmgKaW5kZXggOWNhNDA4N2FhLi5j M2FmZGU0ZDUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYWlvX2ludGVybmFsLmgK KysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9haW9faW50ZXJuYWwuaApAQCAtMjE2LDYgKzIxNiwx MyBAQCB0eXBlZGVmIHN0cnVjdCBQZ0Fpb0JhY2tlbmQKIAl1aW50MTYJCW51bV9zdGFnZWRfaW9z OwogCVBnQWlvSGFuZGxlICpzdGFnZWRfaW9zW1BHQUlPX1NVQk1JVF9CQVRDSF9TSVpFXTsKIAor CS8qCisJICogT3RoZXIgYmFja2VuZHMgc29tZXRpbWVzIG5lZWQgdG8gd2FpdCBmb3IgdGhlIG93 bmluZyBiYWNrZW5kIHRvIHN1Ym1pdC4KKwkgKiBUaGUgcGVyLUlPIENWIHdvdWxkIHdvcmsgZm9y IHRoYXQgcHVycG9zZSwgYnV0IGEgcGVyLWJhY2tlbmQgQ1YgYWxsb3dzCisJICogZm9yIGp1c3Qg b25lIGJyb2FkY2FzdCBwZXIgc3VibWl0dGVkIGJhdGNoLgorCSAqLworCUNvbmRpdGlvblZhcmlh YmxlIHN1Ym1pdF9jdjsKKwogCS8qCiAJICogTGlzdCBvZiBpbi1mbGlnaHQgSU9zLiBBbHNvIGNv bnRhaW5zIElPcyB0aGF0IGFyZW4ndCBzdHJpY3RseSBzcGVha2luZwogCSAqIGluLWZsaWdodCBh bnltb3JlLCBidXQgaGF2ZSBiZWVuIHdhaXRlZC1mb3IgYW5kIGNvbXBsZXRlZCBieSBhbm90aGVy CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9haW8uYyBiL3NyYy9iYWNrZW5k L3N0b3JhZ2UvYWlvL2Fpby5jCmluZGV4IDcwMDlmYjdmNi4uY2UyZjczYmZmIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9haW8uYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdl L2Fpby9haW8uYwpAQCAtNTkzLDYgKzU5MywxNiBAQCBwZ2Fpb19pb193YXNfcmVjeWNsZWQoUGdB aW9IYW5kbGUgKmlvaCwgdWludDY0IHJlZl9nZW5lcmF0aW9uLCBQZ0Fpb0hhbmRsZVN0YXRlCiAJ cmV0dXJuIGlvaC0+Z2VuZXJhdGlvbiAhPSByZWZfZ2VuZXJhdGlvbjsKIH0KIAorLyoKKyAqIFdo ZXRoZXIgd2UgbmVlZCB0byB3YWl0IHZpYSB0aGUgSU8gbWV0aG9kLiBEb24ndCBjaGVjayB2aWEg dGhlIElPIG1ldGhvZCBpZgorICogdGhlIGlzc3VpbmcgYmFja2VuZCBpcyBleGVjdXRpbmcgdGhl IElPIHN5bmNocm9ub3VzbHkuCisgKi8KK3N0YXRpYyBib29sCitwZ2Fpb19pb19uZWVkc193YWl0 X29uZShQZ0Fpb0hhbmRsZSAqaW9oKQoreworCXJldHVybiBwZ2Fpb19tZXRob2Rfb3BzLT53YWl0 X29uZSAmJiAhKGlvaC0+ZmxhZ3MgJiBQR0FJT19IRl9TWU5DSFJPTk9VUyk7Cit9CisKIC8qCiAg KiBXYWl0IGZvciBJTyB0byBjb21wbGV0ZS4gRXh0ZXJuYWwgY29kZSBzaG91bGQgbmV2ZXIgdXNl IHRoaXMsIG91dHNpZGUgb2YKICAqIHRoZSBBSU8gc3Vic3lzdGVtIHdhaXRzIGFyZSBvbmx5IGFs bG93ZWQgdmlhIHBnYWlvX3dyZWZfd2FpdCgpLgpAQCAtNjMyLDIzICs2NDIsMzggQEAgcGdhaW9f aW9fd2FpdChQZ0Fpb0hhbmRsZSAqaW9oLCB1aW50NjQgcmVmX2dlbmVyYXRpb24pCiAJCQkJZWxv ZyhFUlJPUiwgIklPIGluIHdyb25nIHN0YXRlOiAlZCIsIHN0YXRlKTsKIAkJCQlicmVhazsKIAot CQkJY2FzZSBQR0FJT19IU19TVUJNSVRURUQ6CisJCQljYXNlIFBHQUlPX0hTX0RFRklORUQ6CisJ CQljYXNlIFBHQUlPX0hTX1NUQUdFRDoKIAogCQkJCS8qCi0JCQkJICogSWYgd2UgbmVlZCB0byB3 YWl0IHZpYSB0aGUgSU8gbWV0aG9kLCBkbyBzbyBub3cuIERvbid0Ci0JCQkJICogY2hlY2sgdmlh IHRoZSBJTyBtZXRob2QgaWYgdGhlIGlzc3VpbmcgYmFja2VuZCBpcyBleGVjdXRpbmcKLQkJCQkg KiB0aGUgSU8gc3luY2hyb25vdXNseS4KKwkJCQkgKiBUaGUgb3duZXIgaGFzbid0IHN1Ym1pdHRl ZCB0aGUgSU8geWV0LiBJZiB3ZSBuZWVkIHRvIHdhaXQKKwkJCQkgKiB2aWEgdGhlIElPIG1ldGhv ZCwgd2FpdCBmb3Igc3VibWlzc2lvbiwgZ2l2aW5nIHRoaXMgYmFja2VuZAorCQkJCSAqIHRoZSBj aGFuY2UgdG8gY2FsbCAtPndhaXRfb25lKCkuCiAJCQkJICovCi0JCQkJaWYgKHBnYWlvX21ldGhv ZF9vcHMtPndhaXRfb25lICYmICEoaW9oLT5mbGFncyAmIFBHQUlPX0hGX1NZTkNIUk9OT1VTKSkK KwkJCQlpZiAocGdhaW9faW9fbmVlZHNfd2FpdF9vbmUoaW9oKSkKKwkJCQl7CisJCQkJCVBnQWlv QmFja2VuZCAqYmFja2VuZCA9ICZwZ2Fpb19jdGwtPmJhY2tlbmRfc3RhdGVbaW9oLT5vd25lcl9w cm9jbm9dOworCisJCQkJCUNvbmRpdGlvblZhcmlhYmxlUHJlcGFyZVRvU2xlZXAoJmJhY2tlbmQt PnN1Ym1pdF9jdik7CisJCQkJCXdoaWxlICghcGdhaW9faW9fd2FzX3JlY3ljbGVkKGlvaCwgcmVm X2dlbmVyYXRpb24sICZzdGF0ZSkgJiYKKwkJCQkJCSAgIChzdGF0ZSA9PSBQR0FJT19IU19ERUZJ TkVEIHx8CisJCQkJCQkJc3RhdGUgPT0gUEdBSU9fSFNfU1RBR0VEKSkKKwkJCQkJCUNvbmRpdGlv blZhcmlhYmxlU2xlZXAoJmJhY2tlbmQtPnN1Ym1pdF9jdiwgV0FJVF9FVkVOVF9BSU9fSU9fU1VC TUlUKTsKKwkJCQkJQ29uZGl0aW9uVmFyaWFibGVDYW5jZWxTbGVlcCgpOworCQkJCQljb250aW51 ZTsKKwkJCQl9CisJCQkJcGdfZmFsbHRocm91Z2g7CisKKwkJCWNhc2UgUEdBSU9fSFNfU1VCTUlU VEVEOgorCisJCQkJLyogSWYgd2UgbmVlZCB0byB3YWl0IHZpYSB0aGUgSU8gbWV0aG9kLCBkbyBz byBub3cuICovCisJCQkJaWYgKHBnYWlvX2lvX25lZWRzX3dhaXRfb25lKGlvaCkpCiAJCQkJewog CQkJCQlwZ2Fpb19tZXRob2Rfb3BzLT53YWl0X29uZShpb2gsIHJlZl9nZW5lcmF0aW9uKTsKIAkJ CQkJY29udGludWU7CiAJCQkJfQogCQkJCXBnX2ZhbGx0aHJvdWdoOwogCi0JCQkJLyogd2FpdGlu ZyBmb3Igb3duZXIgdG8gc3VibWl0ICovCi0JCQljYXNlIFBHQUlPX0hTX0RFRklORUQ6Ci0JCQlj YXNlIFBHQUlPX0hTX1NUQUdFRDoKIAkJCQkvKiB3YWl0aW5nIGZvciByZWFwZXIgdG8gY29tcGxl dGUgKi8KIAkJCQkvKiBmYWxsdGhyb3VnaCAqLwogCQkJY2FzZSBQR0FJT19IU19DT01QTEVURURf SU86CkBAIC0xMjI2LDYgKzEyNTEsMTUgQEAgcGdhaW9fc3VibWl0X3N0YWdlZCh2b2lkKQogCiAJ cGdhaW9fbXlfYmFja2VuZC0+bnVtX3N0YWdlZF9pb3MgPSAwOwogCisJLyoKKwkgKiBXYWtlIGFu eSBiYWNrZW5kIHRoYXQgc3RhcnRlZCB3YWl0aW5nIGZvciBhbnkgb2YgdGhlc2UgSU9zIGJlZm9y ZQorCSAqIHN1Ym1pc3Npb24sIGlmIGl0IGlzIG5lY2Vzc2FyeSB0byBjYWxsIC0+d2FpdF9vbmUo KSB0byBndWFyYW50ZWUKKwkgKiBwcm9ncmVzcyB3aXRoIHRoZSBjb25maWd1cmVkIElPIG1ldGhv ZC4gIE9uIGl0cyBzaWRlLCBwZ2Fpb19pb193YWl0KCkKKwkgKiBvbmx5IHdhaXRzIGZvciBzdWJt aXRfY3Ygb24gSU8gbWV0aG9kcyBuZWVkaW5nIHRoYXQuCisJICovCisJaWYgKHBnYWlvX21ldGhv ZF9vcHMtPndhaXRfb25lKQorCQlDb25kaXRpb25WYXJpYWJsZUJyb2FkY2FzdCgmcGdhaW9fbXlf YmFja2VuZC0+c3VibWl0X2N2KTsKKwogCXBnYWlvX2RlYnVnKERFQlVHNCwKIAkJCQkiYWlvOiBz dWJtaXR0ZWQgJWQgSU9zIiwKIAkJCQl0b3RhbF9zdWJtaXR0ZWQpOwpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvc3RvcmFnZS9haW8vYWlvX2luaXQuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlv L2Fpb19pbml0LmMKaW5kZXggZGEzMGQ3OTJhLi42ZmMwMGE5MTcgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3N0b3JhZ2UvYWlvL2Fpb19pbml0LmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9h aW8vYWlvX2luaXQuYwpAQCAtMTk5LDYgKzE5OSw3IEBAIEFpb1NobWVtSW5pdCh2b2lkICphcmcp CiAKIAkJZGNsaXN0X2luaXQoJmJzLT5pZGxlX2lvcyk7CiAJCW1lbXNldChicy0+c3RhZ2VkX2lv cywgMCwgc2l6ZW9mKFBnQWlvSGFuZGxlICopICogUEdBSU9fU1VCTUlUX0JBVENIX1NJWkUpOwor CQlDb25kaXRpb25WYXJpYWJsZUluaXQoJmJzLT5zdWJtaXRfY3YpOwogCQlkY2xpc3RfaW5pdCgm YnMtPmluX2ZsaWdodF9pb3MpOwogCiAJCS8qIGluaXRpYWxpemUgcGVyLWJhY2tlbmQgSU9zICov CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50X25hbWVz LnR4dCBiL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnRfbmFtZXMudHh0Cmlu ZGV4IDBhNmQxNmY4MS4uOTU4MzFjYjc3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9h Y3Rpdml0eS93YWl0X2V2ZW50X25hbWVzLnR4dAorKysgYi9zcmMvYmFja2VuZC91dGlscy9hY3Rp dml0eS93YWl0X2V2ZW50X25hbWVzLnR4dApAQCAtMTk5LDYgKzE5OSw3IEBAIEFCSV9jb21wYXRp YmlsaXR5OgogU2VjdGlvbjogQ2xhc3NOYW1lIC0gV2FpdEV2ZW50SU8KIAogQUlPX0lPX0NPTVBM RVRJT04JIldhaXRpbmcgZm9yIGFub3RoZXIgcHJvY2VzcyB0byBjb21wbGV0ZSBJTy4iCitBSU9f SU9fU1VCTUlUCSJXYWl0aW5nIGZvciBhbm90aGVyIHByb2Nlc3MgdG8gc3VibWl0IElPLiIKIEFJ T19JT19VUklOR19TVUJNSVQJIldhaXRpbmcgZm9yIElPIHN1Ym1pc3Npb24gdmlhIGlvX3VyaW5n LiIKIEFJT19JT19VUklOR19FWEVDVVRJT04JIldhaXRpbmcgZm9yIElPIGV4ZWN1dGlvbiB2aWEg aW9fdXJpbmcuIgogQkFTRUJBQ0tVUF9SRUFECSJXYWl0aW5nIGZvciBiYXNlIGJhY2t1cCB0byBy ZWFkIGZyb20gYSBmaWxlLiIKLS0gCjIuNTMuMAoK --0000000000002eda15064ecc7bcf Content-Type: application/octet-stream; name="v24-0006-Allow-read_stream_reset-to-not-wait-for-IO-compl.patch" Content-Disposition: attachment; filename="v24-0006-Allow-read_stream_reset-to-not-wait-for-IO-compl.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnncq24y3 RnJvbSAyYjA5Y2ZhMDRiMWI5ODFmYTkzNDc0Mjk3NTcxYWIyOWZlNTA4Yjg1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFN1biwgNSBBcHIgMjAyNiAwMDo0Mzo1NCAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggdjI0IDYv OF0gQWxsb3cgcmVhZF9zdHJlYW1fcmVzZXQoKSB0byBub3Qgd2FpdCBmb3IgSU8KIGNvbXBsZXRp b24KCk5vdCB3YWl0aW5nIGZvciBJTyBkdXJpbmcgcmVhZF9zdHJlYW1fcmVzZXQoKSBjYW4gYmUg aW1wb3J0YW50IGZvciBwZXJmb3JtYW5jZQppbiBjYXNlcyB3aGVyZSByZWFkIHN0cmVhbXMgYXJl IGZyZXF1ZW50bHkgcmVzZXQgYmVmb3JlIHRoZSBlbmQgaXMKcmVhY2hlZC4gQ3VycmVudCB1c2Vy cyBkbyBub3QgY29tbW9ubHkgZG8gdGhhdCwgYnV0IHRoZSB1cGNvbWluZyB3b3JrIHRvIHVzZSBh CnJlYWQgc3RyZWFtIHRvIHByZWZldGNoIHRhYmxlIGJsb2NrcyBhcyBwYXJ0IG9mIGluZGV4IHNj YW5zIGNhbiBkbyBzbwpmcmVxdWVudGx5IGluIHNvbWUgcXVlcnkgcGF0dGVybnMuIEUuZy4gaWYg dGhlcmUgaXMgYW4gaW5kZXggc2NhbiBvbiB0aGUgaW5uZXIKc2lkZSBvZiBhIG5lc3RlZCBsb29w IGFudGlqb2luLgoKVGhpcyB0YWtlcyBhIGJpdCBvZiBjYXJlIHRvIGRvIHJpZ2h0LiBKdXN0IGlu dHJvZHVjaW5nIHN1cHBvcnQgZm9yIGFiYW5kb25pbmcKYSBBSU8gaGFuZGxlIGNvdWxkIGxlYWQg dG8gdGhlIElPJ3MgY29tcGxldGlvbiBub3QgYmVpbmcgcHJvY2Vzc2VkIHVudGlsIHRoZQpiYWNr ZW5kIGV4aXRzLiBUaGF0J3MgYmFkIGJlY2F1c2UgaXQgd291bGQgbGVhZCB0byByZXNvdXJjZXMg aGVsZCBvbnRvIGZvciB0aGUKSU8gKGUuZy4gYnVmZmVyIHBpbnMpIG5vdCBiZWluZyByZWxlYXNl ZCBhbmQgdGhlIGhhbmRsZSBzaG93aW5nIHVwIGluIHBnX2Fpb3MuCgpUbyBhdm9pZCB0aGF0LCB0 aGUgZXhpc3RpbmcgcmVzb3duZXIgY2xlYW51cCBpcyBjaGFuZ2VkIHRvIHdhaXQgZm9yIHRoZSBJ TydzCmNvbXBsZXRpb24sIHdoaWNoIGd1YXJhbnRlZXMgdGhhdCBieSB0aGUgZW5kIG9mIHRoZSBz dGF0ZW1lbnQgdGhlIElPIGhhcwpjb21wbGV0ZWQuIFdlIG1pZ2h0IGV2ZW50dWFsbHkgd2FudCB0 byByZWxheCB0aGF0IGZvciBzb21lIG9wZXJhdGlvbnMgKGUuZy4sCmZvciBiYWNrZ3JvdW5kIFdB TCB3cml0ZXMgb3Igb3Bwb3J0dW5pc3RpYyBwcmVmZXRjaGluZykuCgpEaXNjdXNzaW9uOiBodHRw czovL3Bvc3Rnci5lcy9tL2YzeHhmcmthZmp4cHlxeHl3Y3hyaWN4Z3lpemppcmZjZXljaHl4c2du N2J3anA1ZWRhQGt3YmR1aHk3dGZtdQotLS0KIHNyYy9pbmNsdWRlL3N0b3JhZ2UvYWlvLmggICAg ICAgICAgICAgICAgICAgfCAgIDIgKwogc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3IuaCAgICAg ICAgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9haW8uYyAgICAgICAg ICAgICAgIHwgMTAyICsrKysrKysrKysrKysrKystLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYWlv L3JlYWRfc3RyZWFtLmMgICAgICAgfCAgMzEgKysrKy0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL2J1 ZmZlci9idWZtZ3IuYyAgICAgICAgIHwgIDM0ICsrKysrKysKIHNyYy90ZXN0L21vZHVsZXMvdGVz dF9haW8vdC8wMDFfYWlvLnBsICAgICAgfCAxMDcgKysrKysrKysrKysrKysrKysrKysKIHNyYy90 ZXN0L21vZHVsZXMvdGVzdF9haW8vdGVzdF9haW8tLTEuMC5zcWwgfCAgIDIgKy0KIHNyYy90ZXN0 L21vZHVsZXMvdGVzdF9haW8vdGVzdF9haW8uYyAgICAgICAgfCAgMzggKysrKystLQogOCBmaWxl cyBjaGFuZ2VkLCAyODUgaW5zZXJ0aW9ucygrKSwgMzIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9haW8uaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYWlvLmgK aW5kZXggZWM1NDNiNzg0Li5hYjdmYWQxMzAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3Jh Z2UvYWlvLmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9haW8uaApAQCAtMzI4LDYgKzMyOCw4 IEBAIGV4dGVybiBpbnQJcGdhaW9fd3JlZl9nZXRfaWQoUGdBaW9XYWl0UmVmICppb3cpOwogZXh0 ZXJuIHZvaWQgcGdhaW9fd3JlZl93YWl0KFBnQWlvV2FpdFJlZiAqaW93KTsKIGV4dGVybiBib29s IHBnYWlvX3dyZWZfY2hlY2tfZG9uZShQZ0Fpb1dhaXRSZWYgKmlvdyk7CiAKK2V4dGVybiB2b2lk IHBnYWlvX3dyZWZfYWJhbmRvbihQZ0Fpb1dhaXRSZWYgKmlvdyk7CisKIAogCiAvKiAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3Iu aCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmgKaW5kZXggNjgzN2IzNWZjLi5jMDJiZmQ2 ODUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmgKKysrIGIvc3JjL2lu Y2x1ZGUvc3RvcmFnZS9idWZtZ3IuaApAQCAtMjUyLDYgKzI1Miw3IEBAIGV4dGVybiBib29sIFN0 YXJ0UmVhZEJ1ZmZlcnMoUmVhZEJ1ZmZlcnNPcGVyYXRpb24gKm9wZXJhdGlvbiwKIAkJCQkJCQkg aW50ICpuYmxvY2tzLAogCQkJCQkJCSBpbnQgZmxhZ3MpOwogZXh0ZXJuIGJvb2wgV2FpdFJlYWRC dWZmZXJzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24pOworZXh0ZXJuIHZvaWQgQWJh bmRvblJlYWRCdWZmZXJzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24pOwogCiBleHRl cm4gdm9pZCBSZWxlYXNlQnVmZmVyKEJ1ZmZlciBidWZmZXIpOwogZXh0ZXJuIHZvaWQgVW5sb2Nr UmVsZWFzZUJ1ZmZlcihCdWZmZXIgYnVmZmVyKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0 b3JhZ2UvYWlvL2Fpby5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vYWlvLmMKaW5kZXggOGY3 ZTI2NjA3Li43MDA5ZmI3ZjYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL2Fp by5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL2Fpby5jCkBAIC0xNTIsMTEgKzE1Miwx NSBAQCBjb25zdCBJb01ldGhvZE9wcyAqcGdhaW9fbWV0aG9kX29wczsKICAqIG9wZXJhdGlvbiBz dWNjZWVkZWQgYW5kIGRldGFpbHMgYWJvdXQgdGhlIGZpcnN0IGZhaWx1cmUsIGlmIGFueS4gVGhl IGVycm9yCiAgKiBjYW4gYmUgcmFpc2VkIC8gbG9nZ2VkIHdpdGggcGdhaW9fcmVzdWx0X3JlcG9y dCgpLgogICoKLSAqIFRoZSBsaWZldGltZSBvZiB0aGUgbWVtb3J5IHBvaW50ZWQgdG8gYmUgKnJl dCBuZWVkcyB0byBiZSBhdCBsZWFzdCBhcyBsb25nCi0gKiBhcyB0aGUgcGFzc2VkIGluIHJlc293 bmVyLiBJZiB0aGUgcmVzb3duZXIgcmVsZWFzZXMgcmVzb3VyY2VzIGJlZm9yZSB0aGUgSU8KLSAq IGNvbXBsZXRlcyAodHlwaWNhbGx5IGR1ZSB0byBhbiBlcnJvciksIHRoZSByZWZlcmVuY2UgdG8g KnJldCB3aWxsIGJlCi0gKiBjbGVhcmVkLiBJbiBjYXNlIG9mIHJlc293bmVyIGNsZWFudXAgKnJl dCB3aWxsIG5vdCBiZSB1cGRhdGVkIHdpdGggdGhlCi0gKiByZXN1bHRzIG9mIHRoZSBJTyBvcGVy YXRpb24uCisgKiBUaGUgbGlmZXRpbWUgb2YgdGhlIG1lbW9yeSBwb2ludGVkIHRvIGJ5ICpyZXQg bmVlZHMgdG8gYmUgYXQgbGVhc3QgYXMgbG9uZworICogYXMgdGhlIHBhc3NlZCBpbiByZXNvd25l ci4KKyAqCisgKiBJZiB0aGUgcmVzb3duZXIgcmVsZWFzZXMgcmVzb3VyY2VzIGJlZm9yZSB0aGUg SU8gY29tcGxldGVzICh0eXBpY2FsbHkgZHVlCisgKiB0byBhbiBlcnJvciksIHRoZSByZWZlcmVu Y2UgdG8gKnJldCB3aWxsIGJlIGNsZWFyZWQuIEluIGNhc2Ugb2YgcmVzb3duZXIKKyAqIGNsZWFu dXAgKnJldCB3aWxsIG5vdCBiZSB1cGRhdGVkIHdpdGggdGhlIHJlc3VsdHMgb2YgdGhlIElPIG9w ZXJhdGlvbi4KKyAqCisgKiBJZiB0aGUgY2FsbGVyIGxvc2VzIGludGVyZXN0IGluIHRoZSBJTyBi ZWZvcmUgY29tcGxldGlvbgorICogcGdhaW9fd3JlZl9hYmFuZG9uKCkgY2FuIGJlIHVzZWQuCiAg Ki8KIFBnQWlvSGFuZGxlICoKIHBnYWlvX2lvX2FjcXVpcmUoc3RydWN0IFJlc291cmNlT3duZXJE YXRhICpyZXNvd25lciwgUGdBaW9SZXR1cm4gKnJldCkKQEAgLTI3OCw2ICsyODIsMTQgQEAgcGdh aW9faW9fcmVsZWFzZV9yZXNvd25lcihkbGlzdF9ub2RlICppb2hfbm9kZSwgYm9vbCBvbl9lcnJv cikKIAlSZXNvdXJjZU93bmVyRm9yZ2V0QWlvSGFuZGxlKGlvaC0+cmVzb3duZXIsICZpb2gtPnJl c293bmVyX25vZGUpOwogCWlvaC0+cmVzb3duZXIgPSBOVUxMOwogCisJLyoKKwkgKiBOZWVkIHRv IHVucmVnaXN0ZXIgdGhlIHJlcG9ydGluZyBvZiB0aGUgSU8ncyByZXN1bHQsIHRoZSBtZW1vcnkg aXQncworCSAqIHJlZmVyZW5jaW5nIGxpa2VseSBoYXMgZ29uZSBhd2F5LiBEbyBzbyBiZWZvcmUg cG90ZW50aWFsbHkgd2FpdGluZworCSAqIGJlbG93LCBhcyB0aGF0IGNvdWxkIGNhdXNlIHRoZSB1 bmRlc2lyZWQgd3JpdGVzLgorCSAqLworCWlmIChpb2gtPnJlcG9ydF9yZXR1cm4pCisJCWlvaC0+ cmVwb3J0X3JldHVybiA9IE5VTEw7CisKIAlzd2l0Y2ggKChQZ0Fpb0hhbmRsZVN0YXRlKSBpb2gt PnN0YXRlKQogCXsKIAkJY2FzZSBQR0FJT19IU19JRExFOgpAQCAtMzAwLDIyICszMTIsMzIgQEAg cGdhaW9faW9fcmVsZWFzZV9yZXNvd25lcihkbGlzdF9ub2RlICppb2hfbm9kZSwgYm9vbCBvbl9l cnJvcikKIAkJCWlmICghb25fZXJyb3IpCiAJCQkJZWxvZyhXQVJOSU5HLCAiQUlPIGhhbmRsZSB3 YXMgbm90IHN1Ym1pdHRlZCIpOwogCQkJcGdhaW9fc3VibWl0X3N0YWdlZCgpOwotCQkJYnJlYWs7 CisKKwkJCS8qIG5vdyB0aGF0IHRoZSBJTyBpcyBzdWJtaXR0ZWQsIG5lZWQgdG8gd2FpdCAqLwor CQkJcGdfZmFsbHRocm91Z2g7CiAJCWNhc2UgUEdBSU9fSFNfU1VCTUlUVEVEOgogCQljYXNlIFBH QUlPX0hTX0NPTVBMRVRFRF9JTzoKIAkJY2FzZSBQR0FJT19IU19DT01QTEVURURfU0hBUkVEOgog CQljYXNlIFBHQUlPX0hTX0NPTVBMRVRFRF9MT0NBTDoKLQkJCS8qIHRoaXMgaXMgZXhwZWN0ZWQg dG8gaGFwcGVuICovCisKKwkJCS8qCisJCQkgKiBUaGlzIGlzIGV4cGVjdGVkIHRvIGhhcHBlbiwg ZS5nLiBhZnRlciBhbiBlcnJvciBvciBhZnRlcgorCQkJICogcGdhaW9fd3JlZl9hYmFuZG9uKCkg d2FzIGNhbGxlZC4KKwkJCSAqCisJCQkgKiBGb3Igbm93IGFsd2F5cyB3YWl0IGZvciB0aGUgSU8n cyBjb21wbGV0aW9uIGR1cmluZyByZXNvd25lcgorCQkJICogY2xlYW51cC4gVGhpcyBwcm92aWRl cyBhIGJvdW5kIG9uIGhvdyBsb25nIGFmdGVyIGFuIGVycm9yIG9yCisJCQkgKiBwZ2Fpb193cmVm X2FiYW5kb24oKSBhbiBJTyBoYW5kbGUgd2lsbCBzaG93IHVwIGFzIHVzZWQgYW5kIGhvdworCQkJ ICogbG9uZyBhbiB1bmNvbXBsZXRlZCBJTyBjYW4gY2F1c2UgcmVzb3VyY2VzIHRvIGJlIHJldGFp bmVkLgorCQkJICoKKwkJCSAqIEl0IGlzIHF1aXRlIHBvc3NpYmxlIHRoYXQgd2UgZXZlbnR1YWxs eSB3YW50IHRvIHN1cHBvcnQgSU8KKwkJCSAqIG9wZXJhdGlvbnMgdGhhdCBsYXN0IGxvbmdlciwg ZS5nLiBmb3IgV0FMIHdyaXRlcyBpbiB0aGUKKwkJCSAqIGJhY2tncm91bmQuIElmIHNvIHdlIHdp bGwgZWl0aGVyIG5lZWQgdG8gdXNlIGEgbG9uZ2VyIGxpdmVkCisJCQkgKiByZXNvd25lciBvciBh ZGQgYSBmbGFnIGNvbnRyb2xsaW5nIHdoZW4gdGhpcyBjbGVhbnVwIGhhcHBlbnMuCisJCQkgKi8K KwkJCXBnYWlvX2lvX3dhaXQoaW9oLCBpb2gtPmdlbmVyYXRpb24pOwogCQkJYnJlYWs7CiAJfQog Ci0JLyoKLQkgKiBOZWVkIHRvIHVucmVnaXN0ZXIgdGhlIHJlcG9ydGluZyBvZiB0aGUgSU8ncyBy ZXN1bHQsIHRoZSBtZW1vcnkgaXQncwotCSAqIHJlZmVyZW5jaW5nIGxpa2VseSBoYXMgZ29uZSBh d2F5LgotCSAqLwotCWlmIChpb2gtPnJlcG9ydF9yZXR1cm4pCi0JCWlvaC0+cmVwb3J0X3JldHVy biA9IE5VTEw7Ci0KIAlSRVNVTUVfSU5URVJSVVBUUygpOwogfQogCkBAIC0xMDUwLDYgKzEwNzIs NTggQEAgcGdhaW9fd3JlZl9jaGVja19kb25lKFBnQWlvV2FpdFJlZiAqaW93KQogCXJldHVybiBm YWxzZTsKIH0KIAorLyoKKyAqIERlY2xhcmUgdGhhdCBhIHdhaXQgcmVmZXJlbmNlIHRvIGFuIElP LCBzdGFydGVkIGJ5IHRoaXMgYmFja2VuZCwgaXMgbm90IG9mCisgKiBpbnRlcmVzdCB0byB0aGlz IGJhY2tlbmQgYW55bW9yZS4gT25jZSBjYWxsZWQsIHRoZSBQZ0Fpb1JldHVybiAqcmV0IHBhc3Nl ZAorICogdG8gcGdhaW9faW9fYWNxdWlyZVtfbmJdKCkgd2lsbCBub3QgYmUgdXBkYXRlZCBhbnlt b3JlIGFuZCB0aHVzIGNhbiBiZQorICogZnJlZWQuCisgKi8KK3ZvaWQKK3BnYWlvX3dyZWZfYWJh bmRvbihQZ0Fpb1dhaXRSZWYgKmlvdykKK3sKKwl1aW50NjQJCXJlZl9nZW5lcmF0aW9uOworCWJv b2wJCWFtX293bmVyOworCVBnQWlvSGFuZGxlICppb2g7CisJUGdBaW9IYW5kbGVTdGF0ZSBzdGF0 ZTsKKworCWlvaCA9IHBnYWlvX2lvX2Zyb21fd3JlZihpb3csICZyZWZfZ2VuZXJhdGlvbik7CisK KwlhbV9vd25lciA9IGlvaC0+b3duZXJfcHJvY25vID09IE15UHJvY051bWJlcjsKKworCS8qCisJ ICogSXQgaXMgc2FmZSB0byBwZXJmb3JtIHRoaXMgY2hlY2sgYmVmb3JlIGNoZWNraW5nIGlmIHRo ZSBJTyB3YXMgcmVjeWNsZWQKKwkgKiAoYW5kIGJlZm9yZSB3ZSBob2xkIGludGVycnVwdHMpIGFz IHRoZSBvd25lciBvZiBhbiBJTyBjYW5ub3QgY2hhbmdlLgorCSAqLworCWlmICghYW1fb3duZXIp CisJCWVsb2coRVJST1IsICJvbmx5IElPcyBvd25lZCBieSBjdXJyZW50IGJhY2tlbmQgY2FuIGJl IGFiYW5kb25lZCIpOworCisJLyoKKwkgKiBUbyBlbnN1cmUgdGhhdCB0aGUgSU8gd29uJ3QgYmUg cmVjeWNsZWQgd2hpbGUgd2UgY2hlY2sgKGUuZy4gZHVyaW5nIHRoZQorCSAqIGVtaXNzaW9uIG9m IGEgZGVidWcgbWVzc2FnZSkuCisJICovCisJSE9MRF9JTlRFUlJVUFRTKCk7CisKKwlpZiAoIXBn YWlvX2lvX3dhc19yZWN5Y2xlZChpb2gsIHJlZl9nZW5lcmF0aW9uLCAmc3RhdGUpKQorCXsKKwkJ cGdhaW9fZGVidWdfaW8oREVCVUczLCBpb2gsCisJCQkJCSAgICJkaXNjYXJkaW5nIHJlc3VsdCAl cCwgcmVzb3duZXI6ICVwIiwKKwkJCQkJICAgaW9oLT5yZXBvcnRfcmV0dXJuLCBpb2gtPnJlc293 bmVyKTsKKworCQlpZiAoc3RhdGUgPCBQR0FJT19IU19TVUJNSVRURUQpCisJCQllbG9nKEVSUk9S LCAiYWJhbmRvbmluZyBJTyBpbiB3cm9uZyBzdGF0ZTogJWQiLCBzdGF0ZSk7CisKKwkJLyoKKwkJ ICogQWxsIHdlIG5lZWQgdG8gZG8gdG8gYWJhbmRvbiB0aGUgSU8gaXMgdG8gY2xlYXIgaXRzIHJl cG9ydF9yZXR1cm4KKwkJICogZmllbGQuIFdpdGhvdXQgdGhhdCB3ZSBjb3VsZCBlbmQgdXAgd3Jp dGluZyB0byBmcmVlZC9yZXVzZWQgbWVtb3J5CisJCSAqIHdoZW4gdGhlIElPIGNvbXBsZXRlcy4K KwkJICovCisJCWlmIChpb2gtPnJlcG9ydF9yZXR1cm4pCisJCQlpb2gtPnJlcG9ydF9yZXR1cm4g PSBOVUxMOworCX0KKworCVJFU1VNRV9JTlRFUlJVUFRTKCk7Cit9CisKIAogCiAvKiAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vcmVh ZF9zdHJlYW0uYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3RyZWFtLmMKaW5kZXgg MGI2Y2RmN2M4Li45YWIzMmM3N2YgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlv L3JlYWRfc3RyZWFtLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vcmVhZF9zdHJlYW0u YwpAQCAtMTA5LDcgKzEwOSw4IEBAIHN0cnVjdCBSZWFkU3RyZWFtCiAJICogZm9yIElPIGNvbWJp bmluZyBldmVuIGluIGNhc2VzIHdoZXJlIHRoZSBJL08gc3Vic3lzdGVtIGNhbiBrZWVwIHVwIGF0 IGEKIAkgKiBsb3cgcmVhZC1haGVhZCBkaXN0YW5jZSwgYXMgZG9pbmcgbGFyZ2VyIElPcyBpcyBt b3JlIGVmZmljaWVudC4KIAkgKgotCSAqIFNldCB0byAwIHdoZW4gdGhlIGVuZCBvZiB0aGUgc3Ry ZWFtIGlzIHJlYWNoZWQuCisJICogU2V0IHRvIDAgd2hlbiB0aGUgZW5kIG9mIHRoZSBzdHJlYW0g aXMgcmVhY2hlZCBhbmQgdG8gLTEgd2hlbiB0aGUKKwkgKiBzdHJlYW0gaXMgcmVzZXQuCiAJICov CiAJaW50MTYJCWNvbWJpbmVfZGlzdGFuY2U7CiAJaW50MTYJCXJlYWRhaGVhZF9kaXN0YW5jZTsK QEAgLTQ3OSw4ICs0ODAsOCBAQCByZWFkX3N0cmVhbV9zdGFydF9wZW5kaW5nX3JlYWQoUmVhZFN0 cmVhbSAqc3RyZWFtKQogc3RhdGljIGlubGluZSBib29sCiByZWFkX3N0cmVhbV9zaG91bGRfbG9v a19haGVhZChSZWFkU3RyZWFtICpzdHJlYW0pCiB7Ci0JLyogSWYgdGhlIGNhbGxiYWNrIGhhcyBz aWduYWxlZCBlbmQtb2Ytc3RyZWFtLCB3ZSdyZSBkb25lICovCi0JaWYgKHN0cmVhbS0+cmVhZGFo ZWFkX2Rpc3RhbmNlID09IDApCisJLyogSWYgd2UgcmVhY2hlZCBlbmQtb2Ytc3RyZWFtIG9yIGEg cmVzZXQsIHdlJ3JlIGRvbmUgKi8KKwlpZiAoc3RyZWFtLT5yZWFkYWhlYWRfZGlzdGFuY2UgPD0g MCkKIAkJcmV0dXJuIGZhbHNlOwogCiAJLyogbmV2ZXIgc3RhcnQgbW9yZSBJT3MgdGhhbiBvdXIg Y2FwICovCkBAIC01NTgsNyArNTU5LDcgQEAgcmVhZF9zdHJlYW1fc2hvdWxkX2lzc3VlX25vdyhS ZWFkU3RyZWFtICpzdHJlYW0pCiAJICogSWYgdGhlIGNhbGxiYWNrIGhhcyBzaWduYWxlZCBlbmQt b2Ytc3RyZWFtLCBzdGFydCB0aGUgcGVuZGluZyByZWFkCiAJICogaW1tZWRpYXRlbHkuIFRoZXJl IGlzIG5vIGZ1cnRoZXIgcG90ZW50aWFsIGZvciBJTyBjb21iaW5pbmcuCiAJICovCi0JaWYgKHN0 cmVhbS0+cmVhZGFoZWFkX2Rpc3RhbmNlID09IDApCisJaWYgKHN0cmVhbS0+cmVhZGFoZWFkX2Rp c3RhbmNlIDw9IDApCiAJCXJldHVybiB0cnVlOwogCiAJLyoKQEAgLTY2Niw3ICs2NjcsNyBAQCBy ZWFkX3N0cmVhbV9sb29rX2FoZWFkKFJlYWRTdHJlYW0gKnN0cmVhbSkKIAkgKiBzdHJlYW0uICBJ biB0aGUgd29yc3QgY2FzZSB3ZSBjYW4gYWx3YXlzIG1ha2UgcHJvZ3Jlc3Mgb25lIGJ1ZmZlciBh dCBhCiAJICogdGltZS4KIAkgKi8KLQlBc3NlcnQoc3RyZWFtLT5waW5uZWRfYnVmZmVycyA+IDAg fHwgc3RyZWFtLT5yZWFkYWhlYWRfZGlzdGFuY2UgPT0gMCk7CisJQXNzZXJ0KHN0cmVhbS0+cGlu bmVkX2J1ZmZlcnMgPiAwIHx8IHN0cmVhbS0+cmVhZGFoZWFkX2Rpc3RhbmNlIDw9IDApOwogCiAJ aWYgKHN0cmVhbS0+YmF0Y2hfbW9kZSkKIAkJcGdhaW9fZXhpdF9iYXRjaG1vZGUoKTsKQEAgLTEw NTYsOCArMTA1Nyw4IEBAIHJlYWRfc3RyZWFtX25leHRfYnVmZmVyKFJlYWRTdHJlYW0gKnN0cmVh bSwgdm9pZCAqKnBlcl9idWZmZXJfZGF0YSkKIAl7CiAJCUFzc2VydChzdHJlYW0tPm9sZGVzdF9i dWZmZXJfaW5kZXggPT0gc3RyZWFtLT5uZXh0X2J1ZmZlcl9pbmRleCk7CiAKLQkJLyogRW5kIG9m IHN0cmVhbSByZWFjaGVkPyAgKi8KLQkJaWYgKHN0cmVhbS0+cmVhZGFoZWFkX2Rpc3RhbmNlID09 IDApCisJCS8qIEVuZCBvZiBzdHJlYW0gLyByZXNldCByZWFjaGVkPyAgKi8KKwkJaWYgKHN0cmVh bS0+cmVhZGFoZWFkX2Rpc3RhbmNlIDw9IDApCiAJCQlyZXR1cm4gSW52YWxpZEJ1ZmZlcjsKIAog CQkvKgpAQCAtMTA5OCw3ICsxMDk5LDE3IEBAIHJlYWRfc3RyZWFtX25leHRfYnVmZmVyKFJlYWRT dHJlYW0gKnN0cmVhbSwgdm9pZCAqKnBlcl9idWZmZXJfZGF0YSkKIAkJQXNzZXJ0KHN0cmVhbS0+ aW9zW2lvX2luZGV4XS5vcC5idWZmZXJzID09CiAJCQkgICAmc3RyZWFtLT5idWZmZXJzW29sZGVz dF9idWZmZXJfaW5kZXhdKTsKIAotCQluZWVkZWRfd2FpdCA9IFdhaXRSZWFkQnVmZmVycygmc3Ry ZWFtLT5pb3NbaW9faW5kZXhdLm9wKTsKKwkJLyoKKwkJICogSWYgdGhlIHN0cmVhbSBoYXMgYmVl biByZXNldCwgZG9uJ3QgZXZlbiB3YWl0IGZvciB0aGUgSU8sIGp1c3QKKwkJICogYWJhbmRvbiBp dC4KKwkJICovCisJCWlmIChzdHJlYW0tPnJlYWRhaGVhZF9kaXN0YW5jZSA8IDApCisJCXsKKwkJ CUFiYW5kb25SZWFkQnVmZmVycygmc3RyZWFtLT5pb3NbaW9faW5kZXhdLm9wKTsKKwkJCW5lZWRl ZF93YWl0ID0gZmFsc2U7CisJCX0KKwkJZWxzZQorCQkJbmVlZGVkX3dhaXQgPSBXYWl0UmVhZEJ1 ZmZlcnMoJnN0cmVhbS0+aW9zW2lvX2luZGV4XS5vcCk7CiAKIAkJQXNzZXJ0KHN0cmVhbS0+aW9z X2luX3Byb2dyZXNzID4gMCk7CiAJCXN0cmVhbS0+aW9zX2luX3Byb2dyZXNzLS07CkBAIC0xMzI0 LDggKzEzMzUsOCBAQCByZWFkX3N0cmVhbV9yZXNldChSZWFkU3RyZWFtICpzdHJlYW0pCiAJQnVm ZmVyCQlidWZmZXI7CiAKIAkvKiBTdG9wIGxvb2tpbmcgYWhlYWQuICovCi0Jc3RyZWFtLT5yZWFk YWhlYWRfZGlzdGFuY2UgPSAwOwotCXN0cmVhbS0+Y29tYmluZV9kaXN0YW5jZSA9IDA7CisJc3Ry ZWFtLT5yZWFkYWhlYWRfZGlzdGFuY2UgPSAtMTsKKwlzdHJlYW0tPmNvbWJpbmVfZGlzdGFuY2Ug PSAtMTsKIAogCS8qIEZvcmdldCBidWZmZXJlZCBibG9jayBudW1iZXIgYW5kIGZhc3QgcGF0aCBz dGF0ZS4gKi8KIAlzdHJlYW0tPmJ1ZmZlcmVkX2Jsb2NrbnVtID0gSW52YWxpZEJsb2NrTnVtYmVy OwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMgYi9zcmMv YmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYwppbmRleCAzY2MwYjBiZGQuLjMzNTBmNzhk MCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKKysrIGIv c3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKQEAgLTE2MDQsNiArMTYwNCwxMCBA QCBTdGFydFJlYWRCdWZmZXJzSW1wbChSZWFkQnVmZmVyc09wZXJhdGlvbiAqb3BlcmF0aW9uLAog ICogYnVmZmVycyBtdXN0IHJlbWFpbiB2YWxpZCB1bnRpbCBXYWl0UmVhZEJ1ZmZlcnMoKSBpcyBj YWxsZWQsIGFuZCBhbnkKICAqIGZvcndhcmRlZCBidWZmZXJzIG11c3QgYWxzbyBiZSBwcmVzZXJ2 ZWQgZm9yIGEgY29udGludWluZyBjYWxsIHVubGVzcwogICogdGhleSBhcmUgZXhwbGljaXRseSBy ZWxlYXNlZC4KKyAqCisgKiBJZiB0cnVlIHdhcyByZXR1cm5lZCwgdGhlIG1lbW9yeSB1bmRlcmx5 aW5nIHRoZSBSZWFkQnVmZmVyc09wZXJhdGlvbiBuZWVkcworICogdG8gc3RheSBhcm91bmQgdW50 aWwgZWl0aGVyIFdhaXRSZWFkQnVmZmVycygpIG9yIEFiYW5kb25SZWFkQnVmZmVycygpIGlzCisg KiBjYWxsZWQgKG9yIGFuIGVycm9yIGlzIHRocm93bikuCiAgKi8KIGJvb2wKIFN0YXJ0UmVhZEJ1 ZmZlcnMoUmVhZEJ1ZmZlcnNPcGVyYXRpb24gKm9wZXJhdGlvbiwKQEAgLTIxNjUsNiArMjE2OSwz NiBAQCBBc3luY1JlYWRCdWZmZXJzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24sIGlu dCAqbmJsb2Nrc19wcm9ncmVzcykKIAlyZXR1cm4gdHJ1ZTsKIH0KIAorLyoKKyAqIERlY2xhcmUg dGhhdCB0aGlzIGJhY2tlbmQgaXMgbm90IGludGVyZXN0ZWQgaW4gdGhlIG9wZXJhdGlvbiBhbnlt b3JlLiBUaGlzCisgKiBuZWVkcyB0byBiZSBjYWxsZWQgaWYgU3RhcnRSZWFkQnVmZmVycygpIHJl dHVybmVkIHRydWUgYW5kIHRoZQorICogUmVhZEJ1ZmZlcnNPcGVyYXRpb24gaXMgdG8gYmUgZnJl ZWQgd2l0aG91dCBjYWxsaW5nIFdhaXRSZWFkQnVmZmVycygpCisgKiAobGVhdmluZyBlcnJvcnMg YXNpZGUpLgorICoKKyAqIEl0IGlzIHRoZSBjYWxsZXIncyByZXNwb25zaWJpbGl0eSB0byByZWxl YXNlIGJ1ZmZlciBwaW5zIChzZWVtcyBzaW1wbGVyCisgKiB0aGF0IHdheSwgYXMgdGhhdCBhbHJl YWR5IGlzIHJlcXVpcmVkIGlmIG5vIElPIGhhZCBiZWVuIG5lY2Vzc2FyeSkuCisgKi8KK3ZvaWQK K0FiYW5kb25SZWFkQnVmZmVycyhSZWFkQnVmZmVyc09wZXJhdGlvbiAqb3BlcmF0aW9uKQorewor CVBnQWlvV2FpdFJlZiBpb193cmVmID0gb3BlcmF0aW9uLT5pb193cmVmOworCisJLyogc2VlIGVx dWl2YWxlbnQgV2FpdFJlYWRCdWZmZXJzKCkgY2hlY2sgKi8KKwlpZiAoIXBnYWlvX3dyZWZfdmFs aWQoJmlvX3dyZWYpICYmIGlvX21ldGhvZCAhPSBJT01FVEhPRF9TWU5DKQorCQllbG9nKEVSUk9S LCAiYWJhbmRvbmluZyByZWFkIG9wZXJhdGlvbiB0aGF0IGRpZG4ndCByZWFkIik7CisKKwlpZiAo IXBnYWlvX3dyZWZfdmFsaWQoJmlvX3dyZWYpKQorCQlyZXR1cm47CisKKwlwZ2Fpb193cmVmX2Ns ZWFyKCZvcGVyYXRpb24tPmlvX3dyZWYpOworCisJLyogY2FuJ3QgYWJhbmRvbiBmb3JlaWduIElP cyAobm9yIGRvIHdlIG5lZWQgdG8pICovCisJaWYgKG9wZXJhdGlvbi0+Zm9yZWlnbl9pbykKKwkJ b3BlcmF0aW9uLT5mb3JlaWduX2lvID0gZmFsc2U7CisJZWxzZQorCQlwZ2Fpb193cmVmX2FiYW5k b24oJmlvX3dyZWYpOworfQorCiAvKgogICogQnVmZmVyQWxsb2MgLS0gc3Vicm91dGluZSBmb3Ig UGluQnVmZmVyRm9yQmxvY2suICBIYW5kbGVzIGxvb2t1cCBvZiBhIHNoYXJlZAogICoJCWJ1ZmZl ci4gIElmIG5vIGJ1ZmZlciBleGlzdHMgYWxyZWFkeSwgc2VsZWN0cyBhIHJlcGxhY2VtZW50IHZp Y3RpbSBhbmQKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9haW8vdC8wMDFfYWlv LnBsIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90LzAwMV9haW8ucGwKaW5kZXggNjNjYWRk NjRjLi4xZmJjYTJiNTkgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9haW8vdC8w MDFfYWlvLnBsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9haW8vdC8wMDFfYWlvLnBsCkBA IC0xNSw2ICsxNSwxMCBAQCB1c2UgVGVzdEFpbzsKIG15IEBtZXRob2RzID0gVGVzdEFpbzo6c3Vw cG9ydGVkX2lvX21ldGhvZHMoKTsKIG15ICVub2RlczsKIAorIyBQdXR0aW5nIGl0IGlubGluZSBt YWtlcyBwZXJsdGlkeSBkbyB1Z2x5IHRoaW5ncworbXkgJGNvdW50X215X2Fpb3NfcXVlcnkgPQor ICAnU0VMRUNUIGNvdW50KCopIEZST00gcGdfYWlvcyBXSEVSRSBwaWQgPSBwZ19iYWNrZW5kX3Bp ZCgpJzsKKwogCiAjIyMKICMgQ3JlYXRlIGFuZCBjb25maWd1cmUgb25lIGluc3RhbmNlIGZvciBl YWNoIGlvX21ldGhvZApAQCAtMTYxNiw2ICsxNjIwLDYxIEBAIElOU0VSVCBJTlRPIHRtcF9vayBT RUxFQ1QgZ2VuZXJhdGVfc2VyaWVzKDEsIDUwMDApOwogCQkJcXF8U0VMRUNUIGJsb2Nrb2ZmLCBi bG9ja251bSwgaW9fcmVxZCBhbmQgbm90IGZvcmVpZ25faW8sIG5ibG9ja3MgRlJPTSByZWFkX2J1 ZmZlcnMoJyR0YWJsZScsIDEsIDMpfCwKIAkJCXFyL14wXHwxXHx0XHwyXG4yXHwzXHxmXHwxJC8s CiAJCQlxci9eJC8pOworCisKKwkJIyMjCisJCSMgVGVzdCB0aGF0IGFiYW5kb25pbmcgSU8gd29y a3MgYW5kIHRoYXQgaXQgZG9lcyBub3QgY2F1c2UgaXNzdWVzLgorCQkjIyMKKworCQkjIFRlc3Qg dGhhdCBldmVuIGFmdGVyIGFiYW5kb25pbmcgSU8gd2UgZG8gd2FpdCBmb3IgdGhlIElPcyBhdCB0 aGUgZW5kCisJCSMgb2YgdGhlIHN0YXRlbWVudC4KKwkJJHBzcWxfYS0+cXVlcnlfc2FmZShxcXxT RVQgaW9fY29tYmluZV9saW1pdD0yfCk7CisJCSRwc3FsX2EtPnF1ZXJ5X3NhZmUocXF8U0VMRUNU IGV2aWN0X3JlbCgnJHRhYmxlJyl8KTsKKwkJcHNxbF9saWtlKAorCQkJJGlvX21ldGhvZCwKKwkJ CSRwc3FsX2EsCisJCQkiJHBlcnNpc3RlbmN5OiByZWFkIGJ1ZmZlcnMgJiBhYmFuZG9uIGl0IiwK KwkJCXFxfFNFTEVDVCBhYmFuZG9uZWQsIGNvdW50KCopIEZST00gcmVhZF9idWZmZXJzKCckdGFi bGUnLCAwLCA2LCBhYmFuZG9uX2FmdGVyID0+IDIpIEdST1VQIEJZIDEgT1JERVIgQlkgMXwsCisJ CQlxci9eZlx8MVxudFx8MiQvLAorCQkJcXIvXiQvKTsKKwkJIyBEdWUgdG8gdGhlIGVuZC1vZi1z dGF0ZW1lbnQgd2FpdCB0aGVyZSBzaG91bGQgYmUgbm8gSU9zIGFueW1vcmUKKwkJaXMoJHBzcWxf YS0+cXVlcnlfc2FmZSgkY291bnRfbXlfYWlvc19xdWVyeSksIDAsCisJCQkiJGlvX21ldGhvZDog JHBlcnNpc3RlbmN5OiBhYmFuZG9uZWQgSU8gY29tcGxldGVkIGJ5IGVuZCBvZiBzdGF0ZW1lbnQi CisJCSk7CisKKwkJIyBUZXN0IHRoYXQgYWZ0ZXIgYWJhbmRvbmluZyBJTyBidWZmZXIgYWNjZXNz IHN0aWxsIHdvcmtzLgorCQkjCisJCSMgRmlyc3QgdGVzdCB0aGF0IGJ5IGp1c3QgaXNzdWluZyBh bm90aGVyIHJlYWRfYnVmZmVycygpIGluIHRoZSBzYW1lCisJCSMgc3RhdGVtZW50IChzbyB0aGF0 IHRoZSBhYmFuZG9uZWQgSU9zIGFyZW4ndCB3YWl0ZWQtZm9yIGR1cmluZworCQkjIGVuZC1vZi1z dGF0ZW1lbnQgcmVzb3duZXIgaGFuZGxpbmcpLgorCQkkcHNxbF9hLT5xdWVyeV9zYWZlKHFxfFNF TEVDVCBldmljdF9yZWwoJyR0YWJsZScpfCk7CisJCXBzcWxfbGlrZSgKKwkJCSRpb19tZXRob2Qs CisJCQkkcHNxbF9hLAorCQkJIiRwZXJzaXN0ZW5jeTogcmVhZCBidWZmZXJzICYgYWJhbmRvbiBp dCAmIHJlYWQgYWdhaW4iLAorCQkJcXF8CisJCQkgICBTRUxFQ1QgU1VNKG5ibG9ja3MpIEZST00g cmVhZF9idWZmZXJzKCckdGFibGUnLCAwLCA0LCBhYmFuZG9uX2FmdGVyID0+IDIpCisJCQkgICBV TklPTiBBTEwKKwkJCSAgIFNFTEVDVCBTVU0obmJsb2NrcykgRlJPTSByZWFkX2J1ZmZlcnMoJyR0 YWJsZScsIDAsIDQpCisJCQkgICB8LAorCQkJcXIvXjRcbjQkLywKKwkJCXFyL14kLyk7CisKKwkJ IyBOb3cgdGVzdCB0aGF0IGEgcGxhaW4gU0VMRUNUIG5lZWRpbmcgYnVmZmVycyBhZmZlY3RlZCBi eSBhYmFuZG9uZWQKKwkJIyBJTyB3b3JrCisJCSRwc3FsX2EtPnF1ZXJ5X3NhZmUocXF8U0VMRUNU IGV2aWN0X3JlbCgnJHRhYmxlJyl8KTsKKwkJcHNxbF9saWtlKAorCQkJJGlvX21ldGhvZCwKKwkJ CSRwc3FsX2EsCisJCQkiJHBlcnNpc3RlbmN5OiByZWFkIGJ1ZmZlcnMgJiBhYmFuZG9uIGl0ICYg cmVhZCBhZ2FpbiB2aWEgU0VMRUNUIiwKKwkJCXFxfAorCQkJICAgU0VMRUNUIFNVTShuYmxvY2tz KSBGUk9NIHJlYWRfYnVmZmVycygnJHRhYmxlJywgMCwgNCwgYWJhbmRvbl9hZnRlciA9PiAyKQor CQkJICAgVU5JT04gQUxMCisJCQkgICBTRUxFQ1QgU1VNKGRhdGEpIEZST00gJHRhYmxlIFdIRVJF IGRhdGEgPCAxMDAwCisJCQkgICB8LAorCQkJcXIvXjRcbjQ5OTUwMCQvLAorCQkJcXIvXiQvKTsK KwkJJHBzcWxfYS0+cXVlcnlfc2FmZShxcXxSRVNFVCBpb19jb21iaW5lX2xpbWl0fCk7CiAJfQog CiAJIyBUaGUgcmVtYWluaW5nIHRlc3RzIGRvbid0IG1ha2Ugc2Vuc2UgZm9yIHRlbXAgdGFibGVz LCBhcyB0aGV5IGFyZQpAQCAtMTgzNyw2ICsxODk2LDU0IEBAIHJlYWRfYnVmZmVycygnJHRhYmxl JywgMCwgNCl8LAogCSRwc3FsX2EtPntzdGRvdXR9ID0gJyc7CiAKIAorCSMjIworCSMgVGVzdCB0 aGF0IGFiYW5kb25pbmcgSU8gYWN0dWFsbHkgYXZvaWRzIHdhaXRpbmcgZm9yIElPLgorCSMjIwor CisJIyBUZXN0aW5nIG5vdCB3YWl0aW5nIG9ubHkgd29ya3MgaWYgdGhlIElPIG1ldGhvZCBkb2Vz bid0IGV4ZWN1dGUgSU8KKwkjIHN5bmNocm9ub3VzbHksIHdoaWNoIGlzIHdoeSB3ZSBmdW5kYW1l bnRhbGx5IGNhbid0IHRlc3Qgd2l0aAorCSMgaW9fbWV0aG9kPXN5bmMuIEZ1cnRoZXJtb3JlIHdl IG5lZWQgdG8gd29yayBhcm91bmQgaW9fbWV0aG9kPWlvX3VyaW5nCisJIyBwb3RlbnRpYWxseSBl eGVjdXRpbmcgdGhlIElPIHN5bmNocm9ub3VzbHkgLSB3ZSBjYW4gZG8gc28gYnkgbWFraW5nIHRo ZQorCSMgSU9zIGJpZyBlbm91Z2ggKGMuZi4gcGdhaW9fdXJpbmdfc2hvdWxkX3VzZV9hc3luYygp KS4KKwkjCisJIyBUbyBtYWtlIHRoZSB0ZXN0IHJlbGlhYmxlIHdlIGhhdmUgdG8gYWJhbmRvbiBh bGwgSU9zLCBhcyB3YWl0aW5nIGZvcgorCSMgc29tZSBJT3MgY291bGQgbGVhZCB0byBhbHNvIGNv bnN1bWluZyB0aGUgY29tcGxldGlvbiBvZiB0aGUgSU8gdGhhdCB3aWxsCisJIyB0cmlnZ2VyIGEg d2FpdCBpbiB0aGUgY29tcGxldGlvbi4KKwlpZiAoJGlvX21ldGhvZCBuZSAnc3luYycpCisJewor CQkkcHNxbF9hLT5xdWVyeV9zYWZlKHFxfFNFTEVDVCBldmljdF9yZWwoJyR0YWJsZScpfCk7CisJ CSRwc3FsX2EtPnF1ZXJ5X3NhZmUocXF8U0VUIGlvX2NvbWJpbmVfbGltaXQ9NXwpOworCQkkcHNx bF9iLT5xdWVyeV9zYWZlKAorCQkJcXEvU0VMRUNUIGlual9pb19jb21wbGV0aW9uX3dhaXQoCisJ CSAgIHJlbGZpbGVub2RlPT5wZ19yZWxhdGlvbl9maWxlbm9kZSgnJHRhYmxlJyksCisJCSAgIGJs b2Nrbm89PjQpOy8pOworCQlvaygxLAorCQkJIiRpb19tZXRob2Q6ICRwZXJzaXN0ZW5jeTogY29u ZmlndXJlIHdhaXQgaW4gY29tcGxldGlvbiBvZiBibG9jayA0IgorCQkpOworCisJCSMgTmVlZCB0 byBlbmQgdGhlIHdhaXQgaW4gdGhlIGNvbXBsZXRpb24gYmVmb3JlIHRoZSBzdGF0ZW1lbnQgaXMg b3ZlciwKKwkJIyBvdGhlcndpc2Ugd2UnbGwgd2FpdCBkdXJpbmcgcmVzb3duZXIgY2xlYW51cCBh dCB0aGUgZW5kIG9mIHRoZQorCQkjIHN0YXRlbWVudC4KKwkJcHNxbF9saWtlKAorCQkJJGlvX21l dGhvZCwKKwkJCSRwc3FsX2EsCisJCQkiJHBlcnNpc3RlbmN5OiByZWFkIGJ1ZmZlcnMgYWJhbmRv bmluZyBibG9ja2VkIElPIGF2b2lkcyB3YWl0IiwKKwkJCXFxfAorCQkJICAgU0VMRUNUIGNvdW50 KCopID4gMCBGUk9NIHJlYWRfYnVmZmVycygnJHRhYmxlJywgMCwgMTAsIGFiYW5kb25fYWZ0ZXIg PT4gMCkgV0hFUkUgYWJhbmRvbmVkCisJCQkgICBVTklPTiBBTEwKKwkJCSAgIFNFTEVDVCBjb3Vu dCgqKSA+IDAgRlJPTSBwZ19haW9zIFdIRVJFIHBpZCA9IHBnX2JhY2tlbmRfcGlkKCkKKwkJCSAg IFVOSU9OIEFMTAorCQkJICAgU0VMRUNUIGlual9pb19jb21wbGV0aW9uX2NvbnRpbnVlKCkgSVMg Tk9UIE5VTEwKKwkJCXwsCisJCQlxci9edFxudFxudCQvLAorCQkJcXIvXiQvKTsKKwkJaXMoJHBz cWxfYS0+cXVlcnlfc2FmZSgkY291bnRfbXlfYWlvc19xdWVyeSksIDAsCisJCQkiJGlvX21ldGhv ZDogJHBlcnNpc3RlbmN5OiBhYmFuZG9uZWQgSU8gaXMgY29tcGxldGVkIGF0IGVuZCBvZiBzdGF0 ZW1lbnQiCisJCSk7CisKKwkJJHBzcWxfYS0+cXVlcnlfc2FmZShxcXxSRVNFVCBpb19jb21iaW5l X2xpbWl0fCk7CisJfQorCiAJJHBzcWxfYS0+cXVpdCgpOwogCSRwc3FsX2ItPnF1aXQoKTsKIAkk cHNxbF9jLT5xdWl0KCk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3Rl c3RfYWlvLS0xLjAuc3FsIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90ZXN0X2Fpby0tMS4w LnNxbAppbmRleCA3NjJhYzI5NTEuLmZmM2IyMDBjZiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9k dWxlcy90ZXN0X2Fpby90ZXN0X2Fpby0tMS4wLnNxbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rl c3RfYWlvL3Rlc3RfYWlvLS0xLjAuc3FsCkBAIC01Myw3ICs1Myw3IEBAIENSRUFURSBGVU5DVElP TiBidWZmZXJfY2FsbF90ZXJtaW5hdGVfaW8oYnVmZmVyIGludCwgZm9yX2lucHV0IGJvb2wsIHN1 Y2NlZWQgYm9vCiBSRVRVUk5TIHBnX2NhdGFsb2cudm9pZCBTVFJJQ1QKIEFTICdNT0RVTEVfUEFU SE5BTUUnIExBTkdVQUdFIEM7CiAKLUNSRUFURSBGVU5DVElPTiByZWFkX2J1ZmZlcnMocmVsIHJl Z2NsYXNzLCBzdGFydGJsb2NrIGludDQsIG5ibG9ja3MgaW50NCwgT1VUIGJsb2Nrb2ZmIGludDQs IE9VVCBibG9ja251bSBpbnQ0LCBPVVQgaW9fcmVxZCBib29sLCBPVVQgZm9yZWlnbl9pbyBib29s LCBPVVQgbmJsb2NrcyBpbnQ0LCBPVVQgYnVmIGludDRbXSkKK0NSRUFURSBGVU5DVElPTiByZWFk X2J1ZmZlcnMocmVsIHJlZ2NsYXNzLCBzdGFydGJsb2NrIGludDQsIG5ibG9ja3MgaW50NCwgYWJh bmRvbl9hZnRlciBpbnQ0IERFRkFVTFQgLTEsIE9VVCBibG9ja29mZiBpbnQ0LCBPVVQgYmxvY2tu dW0gaW50NCwgT1VUIGlvX3JlcWQgYm9vbCwgT1VUIGZvcmVpZ25faW8gYm9vbCwgT1VUIGFiYW5k b25lZCBib29sLCBPVVQgbmJsb2NrcyBpbnQ0LCBPVVQgYnVmIGludDRbXSkKIFJFVFVSTlMgU0VU T0YgcmVjb3JkIFNUUklDVAogQVMgJ01PRFVMRV9QQVRITkFNRScgTEFOR1VBR0UgQzsKIApkaWZm IC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90ZXN0X2Fpby5jIGIvc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X2Fpby90ZXN0X2Fpby5jCmluZGV4IDM1ZWZiYTFhNS4uNjQ4NTJjNGU0IDEw MDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3Rlc3RfYWlvLmMKKysrIGIvc3Jj L3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90ZXN0X2Fpby5jCkBAIC02OTgsMTEgKzY5OCwxMyBAQCBy ZWFkX2J1ZmZlcnMoUEdfRlVOQ1RJT05fQVJHUykKIAlPaWQJCQlyZWxpZCA9IFBHX0dFVEFSR19P SUQoMCk7CiAJQmxvY2tOdW1iZXIgc3RhcnRibG9jayA9IFBHX0dFVEFSR19VSU5UMzIoMSk7CiAJ aW50MzIJCW5ibG9ja3MgPSBQR19HRVRBUkdfSU5UMzIoMik7CisJaW50MzIJCWFiYW5kb25fYWZ0 ZXIgPSBQR19HRVRBUkdfSU5UMzIoMyk7CiAJUmV0dXJuU2V0SW5mbyAqcnNpbmZvID0gKFJldHVy blNldEluZm8gKikgZmNpbmZvLT5yZXN1bHRpbmZvOwogCVJlbGF0aW9uCXJlbDsKIAlTTWdyUmVs YXRpb24gc21ncjsKIAlpbnQJCQluYmxvY2tzX2RvbmUgPSAwOwogCWludAkJCW5ibG9ja3NfZGlz cCA9IDA7CisJaW50CQkJbmJsb2Nrc193YWl0ID0gMDsKIAlpbnQJCQluaW9zID0gMDsKIAlSZWFk QnVmZmVyc09wZXJhdGlvbiAqb3BlcmF0aW9uczsKIAlCdWZmZXIJICAgKmJ1ZmZlcnM7CkBAIC03 MjQsNiArNzI2LDkgQEAgcmVhZF9idWZmZXJzKFBHX0ZVTkNUSU9OX0FSR1MpCiAJcmVsID0gcmVs YXRpb25fb3BlbihyZWxpZCwgQWNjZXNzU2hhcmVMb2NrKTsKIAlzbWdyID0gUmVsYXRpb25HZXRT bWdyKHJlbCk7CiAKKwlpZiAoYWJhbmRvbl9hZnRlciA8IDApCisJCWFiYW5kb25fYWZ0ZXIgPSBu YmxvY2tzOworCiAJLyoKIAkgKiBEbyBTdGFydFJlYWRCdWZmZXJzKCkgdW50aWwgSU8gZm9yIGFs bCB0aGUgcmVxdWlyZWQgYmxvY2tzIGhhcyBiZWVuCiAJICogc3RhcnRlZCAoaWYgcmVxdWlyZWQp LgpAQCAtNzU4LDkgKzc2MywxNyBAQCByZWFkX2J1ZmZlcnMoUEdfRlVOQ1RJT05fQVJHUykKIAlm b3IgKGludCBuaW8gPSAwOyBuaW8gPCBuaW9zOyBuaW8rKykKIAl7CiAJCVJlYWRCdWZmZXJzT3Bl cmF0aW9uICpvcGVyYXRpb24gPSAmb3BlcmF0aW9uc1tuaW9dOworCQlpbnQJCQluYmxvY2tzX3Ro aXNfaW8gPSBuYmxvY2tzX3Blcl9pb1tuaW9dOwogCiAJCWlmIChpb19yZXFkc1tuaW9dKQotCQkJ V2FpdFJlYWRCdWZmZXJzKG9wZXJhdGlvbik7CisJCXsKKwkJCWlmIChuYmxvY2tzX3dhaXQgPCBh YmFuZG9uX2FmdGVyKQorCQkJCVdhaXRSZWFkQnVmZmVycyhvcGVyYXRpb24pOworCQkJZWxzZQor CQkJCUFiYW5kb25SZWFkQnVmZmVycyhvcGVyYXRpb24pOworCQl9CisKKwkJbmJsb2Nrc193YWl0 ICs9IG5ibG9ja3NfdGhpc19pbzsKIAl9CiAKIAkvKgpAQCAtNzcwLDggKzc4Myw4IEBAIHJlYWRf YnVmZmVycyhQR19GVU5DVElPTl9BUkdTKQogCXsKIAkJUmVhZEJ1ZmZlcnNPcGVyYXRpb24gKm9w ZXJhdGlvbiA9ICZvcGVyYXRpb25zW25pb107CiAJCWludAkJCW5ibG9ja3NfdGhpc19pbyA9IG5i bG9ja3NfcGVyX2lvW25pb107Ci0JCURhdHVtCQl2YWx1ZXNbNl0gPSB7MH07Ci0JCWJvb2wJCW51 bGxzWzZdID0gezB9OworCQlEYXR1bQkJdmFsdWVzWzddID0gezB9OworCQlib29sCQludWxsc1s3 XSA9IHswfTsKIAkJQXJyYXlUeXBlICAqYnVmZmVyc19hcnI7CiAKIAkJLyogY29udmVydCBidWZm ZXIgYXJyYXkgdG8gZGF0dW0gYXJyYXkgKi8KQEAgLTgwNCwxNCArODE3LDE4IEBAIHJlYWRfYnVm ZmVycyhQR19GVU5DVElPTl9BUkdTKQogCQl2YWx1ZXNbM10gPSBCb29sR2V0RGF0dW0oaW9fcmVx ZHNbbmlvXSA/IG9wZXJhdGlvbi0+Zm9yZWlnbl9pbyA6IGZhbHNlKTsKIAkJbnVsbHNbM10gPSBm YWxzZTsKIAotCQkvKiBuYmxvY2tzICovCi0JCXZhbHVlc1s0XSA9IEludDMyR2V0RGF0dW0obmJs b2Nrc190aGlzX2lvKTsKKwkJLyogYWJhbmRvbmVkICovCisJCXZhbHVlc1s0XSA9IEJvb2xHZXRE YXR1bShuYmxvY2tzX2Rpc3AgPj0gYWJhbmRvbl9hZnRlcik7CiAJCW51bGxzWzRdID0gZmFsc2U7 CiAKLQkJLyogYXJyYXkgb2YgYnVmZmVycyAqLwotCQl2YWx1ZXNbNV0gPSBQb2ludGVyR2V0RGF0 dW0oYnVmZmVyc19hcnIpOworCQkvKiBuYmxvY2tzICovCisJCXZhbHVlc1s1XSA9IEludDMyR2V0 RGF0dW0obmJsb2Nrc190aGlzX2lvKTsKIAkJbnVsbHNbNV0gPSBmYWxzZTsKIAorCQkvKiBhcnJh eSBvZiBidWZmZXJzICovCisJCXZhbHVlc1s2XSA9IFBvaW50ZXJHZXREYXR1bShidWZmZXJzX2Fy cik7CisJCW51bGxzWzZdID0gZmFsc2U7CisKIAkJdHVwbGVzdG9yZV9wdXR2YWx1ZXMocnNpbmZv LT5zZXRSZXN1bHQsIHJzaW5mby0+c2V0RGVzYywgdmFsdWVzLCBudWxscyk7CiAKIAkJbmJsb2Nr c19kaXNwICs9IG5ibG9ja3NfdGhpc19pbzsKQEAgLTEwNjQsNiArMTA4MSwxMyBAQCBpbmpfaW9f Y29tcGxldGlvbl93YWl0X21hdGNoZXMoUGdBaW9IYW5kbGUgKmlvaCkKIAkJIShpbmpfYmxvY2tu byA+PSBpb19ibG9ja25vICYmIGlual9ibG9ja25vIDwgKGlvX2Jsb2Nrbm8gKyB0ZC0+c21nci5u YmxvY2tzKSkpCiAJCXJldHVybiBmYWxzZTsKIAorCWVyZXBvcnQoTE9HLAorCQkJZXJybXNnKCJ3 YWl0IGluamVjdGlvbiBwb2ludCBtYXRjaGVzIGZvciBJTyAlZCwgaW5qIGJsb2Nrbm8gJWQsIGlv IGJsb2Nrbm8gJWQsIGlvIG5ibG9ja3MgJWQiLAorCQkJCSAgIHBnYWlvX2lvX2dldF9pZChpb2gp LAorCQkJCSAgIGlual9ibG9ja25vLCBpb19ibG9ja25vLCB0ZC0+c21nci5uYmxvY2tzCisJCQkJ ICAgKSwKKwkJCWVycmhpZGVzdG10KHRydWUpLCBlcnJoaWRlY29udGV4dCh0cnVlKSk7CisKIAly ZXR1cm4gdHJ1ZTsKIH0KIAotLSAKMi41My4wCgo= --0000000000002eda15064ecc7bcf Content-Type: application/octet-stream; name="v24-0001-Add-slot-based-table-AM-index-scan-interface.patch" Content-Disposition: attachment; filename="v24-0001-Add-slot-based-table-AM-index-scan-interface.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnncq24q0 RnJvbSA5ZWUwZjhiZDJiMWRiMTM0YzQxYzg1MjQ3ZjdjYTIzNjY4YjNkMTM5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFN1 biwgMjIgTWFyIDIwMjYgMDI6MzY6NTcgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyNCAxLzhdIEFk ZCBzbG90LWJhc2VkIHRhYmxlIEFNIGluZGV4IHNjYW4gaW50ZXJmYWNlLgoKQWRkIHRhYmxlX2lu ZGV4X2dldG5leHRfc2xvdCwgYSBuZXcgdGFibGUgQU0gY2FsbGJhY2sgdGhhdCB3cmFwcyBib3Ro CnBsYWluIGFuZCBpbmRleC1vbmx5IGluZGV4IHNjYW5zIHRoYXQgdXNlIGFtZ2V0dHVwbGUuICBU d28gbmV3ClRhYmxlQW1Sb3V0aW5lIGNhbGxiYWNrcyBhcmUgaW50cm9kdWNlZCAtLSBvbmUgZm9y IHBsYWluIHNjYW5zIGFuZCBvbmUKZm9yIGluZGV4LW9ubHkgc2NhbnMgLS0gd2hpY2ggYW4gdXBj b21pbmcgY29tbWl0IHRoYXQgYWRkcyB0aGUKYW1nZXRiYXRjaCBpbnRlcmZhY2Ugd2lsbCBleHBh bmQgdG8gZm91ci4gIFRoZSBhcHByb3ByaWF0ZSBjYWxsYmFjayBpcwpyZXNvbHZlZCBvbmNlIGlu IGluZGV4X2JlZ2luc2NhbiwgYW5kIGNhbGxlZCB0aHJvdWdoIGEgZnVuY3Rpb24gcG9pbnRlcgoo eHNfZ2V0bmV4dF9zbG90KSBvbiB0aGUgSW5kZXhTY2FuRGVzYyB3aGVuIHRoZSB0YWJsZV9pbmRl eF9nZXRuZXh0X3Nsb3QKc2hpbSBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBleGVjdXRvciBub2Rl cy4KClRoaXMgbW92ZXMgVk0gY2hlY2tzIGZvciBpbmRleC1vbmx5IHNjYW5zIG91dCBvZiB0aGUg ZXhlY3V0b3IgYW5kIGludG8KaGVhcGFtLCBlbmFibGluZyBiYXRjaGluZyBvZiB2aXNpYmlsaXR5 IG1hcCBsb29rdXBzICh0aG91Z2ggZm9yIG5vdyB3ZQpjb250aW51ZSB0byBqdXN0IHBlcmZvcm0g cmV0YWlsIGxvb2t1cHMpLiAgVXNpbmcgdGhlIG5ldyBoaWdoZXIgbGV2ZWwKc2xvdC1iYXNlZCBp bnRlcmZhY2UgZ3JlYXRseSBzaW1wbGlmaWVzIG5vZGVJbmRleG9ubHlzY2FuLmMsIHdoaWNoIG5v CmxvbmdlciBoYXMgdG8gZGVhbCB3aXRoIHRoZSB2aXNpYmlsaXR5IG1hcCBkaXJlY3RseS4gIE1v cmUgaW1wb3J0YW50bHksCnRoaXMgaXMgYSBzaWduaWZpY2FudCBhcmNoaXRlY3R1cmFsIGltcHJv dmVtZW50OiB0YWJsZSBBTXMgY2FuIG5vdwppbXBsZW1lbnQgaW5kZXgtb25seSBzY2FucyB0aGF0 IGFyZSBub3QgdGllZCB0byBoZWFwYW0ncyB2aXNpYmlsaXR5IG1hcC4KCkEgc21hbGwgbWlub3Jp dHkgb2YgY2FsbGVycyAoMiBjYWxsZXJzIGluIHRvdGFsKSBmdW5kYW1lbnRhbGx5IG5lZWQgdG8K cGFzcyBhIFRJRCB0byB0aGUgdGFibGUgQU0gKGJvdGggcGVyZm9ybSBjb25zdHJhaW50IGVuZm9y Y2VtZW50KS4gIFRoZXNlCmNhbGxlcnMgZG9uJ3QgYWN0dWFsbHkgcGVyZm9ybSBpbmRleCBzY2Fu cyAoZXZlbiBpZiB0aGVpciBUSURzIGFyZSB0YWtlbgpmcm9tIGFuIGluZGV4KSwgYW5kIGhhdmUg bm8gbmVlZCBmb3IgbW9zdCBvZiB0aGUgaW5kZXggc2NhbiBtYWNoaW5lcnkuClN3aXRjaCB0aGVz ZSBjYWxsZXJzIG92ZXIgdG8gdGhlIG5ldyBmZXRjaF90aWQgaW50ZXJmYWNlICh3aGljaCByZXBs YWNlcwp0aGUgcHJldmlvdXMgVElELWJhc2VkIGluZGV4X2ZldGNoX3R1cGxlIGludGVyZmFjZSku ICBBbGwgaW5kZXggc2NhbgpjYWxsZXJzIG5vdyB1c2UgdGhlIG5ldyBzbG90LWJhc2VkIGludGVy ZmFjZSAodGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90KS4KCkluZGV4LW9ubHkgc2NhbiBjYWxsZXJz IHBhc3MgdGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90IGEgVHVwbGVUYWJsZVNsb3QKKHdoaWNoIHRo ZSB0YWJsZSBBTSB1c2VzIGludGVybmFsbHkgZm9yIGhlYXAgZmV0Y2hlcyksIGJ1dCBjb250aW51 ZSB0bwpyZWFkIHRoZWlyIHJlc3VsdHMgZnJvbSBJbmRleFNjYW5EZXNjRGF0YSBmaWVsZHMgc3Vj aCBhcyB4c19pdHVwIChyYXRoZXIKdGhhbiBmcm9tIHRoZSBzbG90IGl0c2VsZikuICBBbGwgY2Fs bGVycyBjYW4gY29udGludWUgdG8gcmVseSBvbiB0aGUKc2NhbiBkZXNjcmlwdG9yJ3MgeHNfaGVh cHRpZCBmaWVsZCBiZWluZyBzZXQgb24gZWFjaCBjYWxsLgoKVGhlIFZJU0lURURfUEFHRVNfTElN SVQgbWVjaGFuaXNtIHVzZWQgYnkgZ2V0X2FjdHVhbF92YXJpYWJsZV9yYW5nZSB0bwpjYXAgc2Nh biBvdmVyaGVhZCBkdXJpbmcgcGxhbm5pbmcgaXMgcmV3b3JrZWQgdG8gZ28gdGhyb3VnaCBhIG5l dyBzY2FuCmRlc2NyaXB0b3IgaW50ZXJmYWNlICh4c192aXNpdGVkX3BhZ2VzX2xpbWl0KSwgcmF0 aGVyIHRoYW4gdHJhY2tpbmcgdGhlCmNvc3RzIGRpcmVjdGx5IGFuZCB0ZXJtaW5hdGluZyB0aGUg c2NhbiBpdHNlbGYsIGluIGFuIGFkLWhvYyB3YXkuICBUaGlzCmlzIG5lY2Vzc2FyeSBiZWNhdXNl IGNhbGxlcnMgdGhhdCB1c2UgdGhlIG5ldyBzbG90LWJhc2VkIGludGVyZmFjZSBubwpsb25nZXIg aGF2ZSBkaXJlY3QgYWNjZXNzIHRvIHdoaWNoIGhlYXAgYmxvY2tzIHdlcmUgZmV0Y2hlZC4gIFNp bWlsYXJseSwKbm9kZUluZGV4b25seXNjYW4uYyBjYW4gbm8gbG9uZ2VyIHVzZSBJbnN0ckNvdW50 VHVwbGVzMiB0byBjb3VudCBoZWFwCmZldGNoZXMgZHVyaW5nIGFuIEVYUExBSU4gQU5BTFlaRS4g IEVYUExBSU4gQU5BTFlaRSBub3cgb2J0YWlucyB0aGlzCmluZm9ybWF0aW9uIGZyb20gYSBuZXcg SW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uIGZpZWxkLCB3aGljaCB0YWJsZSBBTXMKYXJlIHJlcXVp cmVkIHRvIG1haW50YWluLgoKVGhvdWdoIGluZGVwZW5kZW50bHkgdXNlZnVsLCB0aGlzIGNvbW1p dCBpcyBwcmVwYXJhdG9yeSB3b3JrIGZvciBhbgp1cGNvbWluZyBjb21taXQgdGhhdCB3aWxsIGFk ZCBhbiBhbWdldGJhdGNoIGluZGV4IEFNIGludGVyZmFjZSwgd2hlcmUKdGhlIHRhYmxlIEFNIHRh a2VzIGZ1bGwgcmVzcG9uc2liaWxpdHkgZm9yIG1hbmFnaW5nIHRoZSBwcm9ncmVzcyBvZgppbmRl eCBzY2Fucy4gIFRoYXQgd2lsbCBtb3ZlIG1vc3Qgb2YgdGhlIGltcGxlbWVudGF0aW9uIG9mIHNj cm9sbGFibGUKY3Vyc29ycyBvdXQgb2YgaW5kZXggQU1zIGFuZCBpbnRvIHRhYmxlIEFNcywgbWFr aW5nIGl0IGVzc2VudGlhbCB0aGF0CmV4ZWN1dG9yIG5vZGVzIHBhc3MgdGhlIGN1cnJlbnQgc2Nh biBkaXJlY3Rpb24gZG93biB0byB0aGUgdGFibGUgQU0uCgpUaGUgaGVhcGFtIGltcGxlbWVudGF0 aW9ucyBtYWtlIGFnZ3Jlc3NpdmUgdXNlIG9mIGZvcmNlZCBpbmxpbmluZyB0bwplbnN1cmUgdGhh dCBwbGFpbiBhbmQgaW5kZXgtb25seSBjb2RlIHBhdGhzIGFyZSBmdWxseSBzcGVjaWFsaXplZCBh dApjb21waWxlIHRpbWUgZGVzcGl0ZSBzaGFyaW5nIGEgY29tbW9uIGltcGxlbWVudGF0aW9uLiAg VGVzdGluZyBoYXMgc2hvd24KdGhpcyBpcyBuZWNlc3NhcnkgdG8ga2VlcCBpY2FjaGUgbWlzc2Vz IHRvIGEgbWluaW11bSwgYXQgbGVhc3Qgd2l0aCB0aGUKdHdvIHVwY29taW5nIGFtZ2V0YmF0Y2gg dmFyaWFudHMuCgpBdXRob3I6IFBldGVyIEdlb2doZWdhbiA8cGdAYm93dC5pZT4KUmV2aWV3ZWQt Qnk6IEFuZHJlcyBGcmV1bmQgPGFuZHJlc0BhbmFyYXplbC5kZT4KUmV2aWV3ZWQtQnk6IFRvbWFz IFZvbmRyYSA8dG9tYXNAdm9uZHJhLm1lPgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9t L0NBSDItV3ptWXFoYWNCSDE2MXBlQVdiNWVGPUphN0NGQVErMGpTRU1xPXFuZkxWVE9PZ0BtYWls LmdtYWlsLmNvbQotLS0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5oICAgICAgICAgICAgICAg ICB8ICAgNSArLQogc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oICAgICAgICAgICAgICAgIHwg IDE3ICstCiBzcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oICAgICAgICAgICAgICAgfCAgMzQg KystCiBzcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oICAgICAgICAgICAgICAgfCAyMDggKysr KysrKystLS0tLS0tCiBzcmMvaW5jbHVkZS9leGVjdXRvci9pbnN0cnVtZW50X25vZGUuaCAgICAg fCAgIDMgKwogc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggICAgICAgICAgICAgIHwgICAy IC0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMgICB8ICAgOSArLQog c3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2luZGV4c2Nhbi5jIHwgMjc1ICsrKysrKysr KysrKysrKysrKystCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC92aXNpYmlsaXR5bWFwLmMgICAg fCAgMjcgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9nZW5hbS5jICAgICAgICAgICB8ICAx MSArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYyAgICAgICAgIHwgMjg0ICsr KysrKystLS0tLS0tLS0tLS0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRpbnNlcnQu YyAgICAgIHwgIDEwICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbS5jICAgICAg ICAgfCAgMjYgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtYXBpLmMgICAgICB8 ICAgMiArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvY29uc3RyYWludC5jICAgICAgICAgIHwgIDI4 ICstCiBzcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMgICAgICAgICAgICAgfCAgMjMgKy0K IHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5jICAgICAgICB8ICAgNSArLQogc3Jj L2JhY2tlbmQvZXhlY3V0b3IvZXhlY1JlcGxpY2F0aW9uLmMgICAgIHwgICA4ICstCiBzcmMvYmFj a2VuZC9leGVjdXRvci9ub2RlQml0bWFwSW5kZXhzY2FuLmMgfCAgIDEgKwogc3JjL2JhY2tlbmQv ZXhlY3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYyAgIHwgMTA2ICstLS0tLS0tCiBzcmMvYmFja2Vu ZC9leGVjdXRvci9ub2RlSW5kZXhzY2FuLmMgICAgICAgfCAgIDkgKy0KIHNyYy9iYWNrZW5kL3V0 aWxzL2FkdC9yaV90cmlnZ2Vycy5jICAgICAgICB8ICAgOCArLQogc3JjL2JhY2tlbmQvdXRpbHMv YWR0L3NlbGZ1bmNzLmMgICAgICAgICAgIHwgIDYxICstLS0tCiAyMyBmaWxlcyBjaGFuZ2VkLCA2 MjQgaW5zZXJ0aW9ucygrKSwgNTM4IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL2FjY2Vzcy9nZW5hbS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFtLmgKaW5kZXggYjY5 MzIwYTdmLi5kYjYyZTBjYTEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5o CisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5oCkBAIC0xNTYsNiArMTU2LDcgQEAgZXh0 ZXJuIHZvaWQgaW5kZXhfaW5zZXJ0X2NsZWFudXAoUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwKIAog ZXh0ZXJuIEluZGV4U2NhbkRlc2MgaW5kZXhfYmVnaW5zY2FuKFJlbGF0aW9uIGhlYXBSZWxhdGlv biwKIAkJCQkJCQkJCSBSZWxhdGlvbiBpbmRleFJlbGF0aW9uLAorCQkJCQkJCQkJIGJvb2wgaW5k ZXhfb25seV9zY2FuLAogCQkJCQkJCQkJIFNuYXBzaG90IHNuYXBzaG90LAogCQkJCQkJCQkJIElu ZGV4U2Nhbkluc3RydW1lbnRhdGlvbiAqaW5zdHJ1bWVudCwKIAkJCQkJCQkJCSBpbnQgbmtleXMs IGludCBub3JkZXJieXMsCkBAIC0xODMsMTUgKzE4NCwxMyBAQCBleHRlcm4gdm9pZCBpbmRleF9w YXJhbGxlbHNjYW5faW5pdGlhbGl6ZShSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiBleHRlcm4gdm9p ZCBpbmRleF9wYXJhbGxlbHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4pOwogZXh0ZXJuIEluZGV4 U2NhbkRlc2MgaW5kZXhfYmVnaW5zY2FuX3BhcmFsbGVsKFJlbGF0aW9uIGhlYXByZWwsCiAJCQkJ CQkJCQkJCSAgUmVsYXRpb24gaW5kZXhyZWwsCisJCQkJCQkJCQkJCSAgYm9vbCBpbmRleF9vbmx5 X3NjYW4sCiAJCQkJCQkJCQkJCSAgSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uICppbnN0cnVtZW50 LAogCQkJCQkJCQkJCQkgIGludCBua2V5cywgaW50IG5vcmRlcmJ5cywKIAkJCQkJCQkJCQkJICBQ YXJhbGxlbEluZGV4U2NhbkRlc2MgcHNjYW4sCiAJCQkJCQkJCQkJCSAgdWludDMyIGZsYWdzKTsK IGV4dGVybiBJdGVtUG9pbnRlciBpbmRleF9nZXRuZXh0X3RpZChJbmRleFNjYW5EZXNjIHNjYW4s CiAJCQkJCQkJCQkgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pOwotZXh0ZXJuIGJvb2wgaW5kZXhf ZmV0Y2hfaGVhcChJbmRleFNjYW5EZXNjIHNjYW4sIFR1cGxlVGFibGVTbG90ICpzbG90KTsKLWV4 dGVybiBib29sIGluZGV4X2dldG5leHRfc2xvdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJl Y3Rpb24gZGlyZWN0aW9uLAotCQkJCQkJCSAgIFR1cGxlVGFibGVTbG90ICpzbG90KTsKIGV4dGVy biBpbnQ2NCBpbmRleF9nZXRiaXRtYXAoSW5kZXhTY2FuRGVzYyBzY2FuLCBUSURCaXRtYXAgKmJp dG1hcCk7CiAKIGV4dGVybiBJbmRleEJ1bGtEZWxldGVSZXN1bHQgKmluZGV4X2J1bGtfZGVsZXRl KEluZGV4VmFjdXVtSW5mbyAqaW5mbywKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9o ZWFwYW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaAppbmRleCA1MTc2NDc4YzIuLjNj YTQyZWI5MyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCisrKyBiL3Ny Yy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaApAQCAtMTI4LDggKzEyOCw4IEBAIHR5cGVkZWYgc3Ry dWN0IEluZGV4RmV0Y2hIZWFwRGF0YQogCUJ1ZmZlcgkJeHNfY2J1ZjsKIAlCbG9ja051bWJlciB4 c19ibGs7CiAKLQkvKiBDdXJyZW50IGhlYXAgYmxvY2sncyBjb3JyZXNwb25kaW5nIHBhZ2UgaW4g dGhlIHZpc2liaWxpdHkgbWFwICovCi0JQnVmZmVyCQl4c192bWJ1ZmZlcjsKKwkvKiBGb3Igdmlz aWJpbGl0eSBtYXAgY2hlY2tzIChpbmRleC1vbmx5IHNjYW5zIGFuZCBvbi1hY2Nlc3MgcHJ1bmlu ZykgKi8KKwlCdWZmZXIJCXhzX3ZtYnVmZmVyOwkvKiB2aXNpYmlsaXR5IG1hcCBidWZmZXIgKi8K IH0gSW5kZXhGZXRjaEhlYXBEYXRhOwogCiAvKiBSZXN1bHQgY29kZXMgZm9yIEhlYXBUdXBsZVNh dGlzZmllc1ZhY3V1bSAqLwpAQCAtNDMwLDE2ICs0MzAsMTUgQEAgZXh0ZXJuIFRyYW5zYWN0aW9u SWQgaGVhcF9pbmRleF9kZWxldGVfdHVwbGVzKFJlbGF0aW9uIHJlbCwKIAkJCQkJCQkJCQkJICBU TV9JbmRleERlbGV0ZU9wICpkZWxzdGF0ZSk7CiAKIC8qIGluIGhlYXAvaGVhcGFtX2luZGV4c2Nh bi5jICovCi1leHRlcm4gSW5kZXhGZXRjaFRhYmxlRGF0YSAqaGVhcGFtX2luZGV4X2ZldGNoX2Jl Z2luKFJlbGF0aW9uIHJlbCwgdWludDMyIGZsYWdzKTsKLWV4dGVybiB2b2lkIGhlYXBhbV9pbmRl eF9mZXRjaF9yZXNldChJbmRleEZldGNoVGFibGVEYXRhICpzY2FuKTsKLWV4dGVybiB2b2lkIGhl YXBhbV9pbmRleF9mZXRjaF9lbmQoSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2Nhbik7CitleHRlcm4g Ym9vbCBoZWFwYW1fZmV0Y2hfdGlkKFJlbGF0aW9uIHJlbCwgSXRlbVBvaW50ZXIgdGlkLCBTbmFw c2hvdCBzbmFwc2hvdCwKKwkJCQkJCQkgVHVwbGVUYWJsZVNsb3QgKnNsb3QsIGJvb2wgKmFsbF9k ZWFkKTsKK2V4dGVybiBJbmRleEZldGNoVGFibGVEYXRhICpoZWFwYW1faW5kZXhfZmV0Y2hfYmVn aW4oSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJCQkJCSB1aW50MzIgZmxhZ3MpOworZXh0 ZXJuIHZvaWQgaGVhcGFtX2luZGV4X2ZldGNoX3Jlc2V0KEluZGV4U2NhbkRlc2Mgc2Nhbik7Citl eHRlcm4gdm9pZCBoZWFwYW1faW5kZXhfZmV0Y2hfZW5kKEluZGV4U2NhbkRlc2Mgc2Nhbik7CiBl eHRlcm4gYm9vbCBoZWFwX2hvdF9zZWFyY2hfYnVmZmVyKEl0ZW1Qb2ludGVyIHRpZCwgUmVsYXRp b24gcmVsYXRpb24sCiAJCQkJCQkJCSAgIEJ1ZmZlciBidWZmZXIsIFNuYXBzaG90IHNuYXBzaG90 LCBIZWFwVHVwbGUgaGVhcFR1cGxlLAogCQkJCQkJCQkgICBib29sICphbGxfZGVhZCwgYm9vbCBm aXJzdF9jYWxsKTsKLWV4dGVybiBib29sIGhlYXBhbV9pbmRleF9mZXRjaF90dXBsZShzdHJ1Y3Qg SW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbiwKLQkJCQkJCQkJCSBJdGVtUG9pbnRlciB0aWQsIFNu YXBzaG90IHNuYXBzaG90LAotCQkJCQkJCQkJIFR1cGxlVGFibGVTbG90ICpzbG90LCBib29sICpo ZWFwX2NvbnRpbnVlLAotCQkJCQkJCQkJIGJvb2wgKmFsbF9kZWFkKTsKIAogLyogaW4gaGVhcC9w cnVuZWhlYXAuYyAqLwogZXh0ZXJuIHZvaWQgaGVhcF9wYWdlX3BydW5lX29wdChSZWxhdGlvbiBy ZWxhdGlvbiwgQnVmZmVyIGJ1ZmZlciwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9y ZWxzY2FuLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oCmluZGV4IDk2MGFiZjZjMi4u OTg2YjRmNWYzIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oCisrKyBi L3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmgKQEAgLTE2LDYgKzE2LDcgQEAKIAogI2luY2x1 ZGUgImFjY2Vzcy9odHVwX2RldGFpbHMuaCIKICNpbmNsdWRlICJhY2Nlc3MvaXR1cC5oIgorI2lu Y2x1ZGUgImFjY2Vzcy9zZGlyLmgiCiAjaW5jbHVkZSAibm9kZXMvdGlkYml0bWFwLmgiCiAjaW5j bHVkZSAicG9ydC9hdG9taWNzLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9yZWxmaWxlbG9jYXRvci5o IgpAQCAtMjQsNiArMjUsNyBAQAogCiAKIHN0cnVjdCBQYXJhbGxlbFRhYmxlU2NhbkRlc2NEYXRh Oworc3RydWN0IFR1cGxlVGFibGVTbG90OwogCiAvKgogICogR2VuZXJpYyBkZXNjcmlwdG9yIGZv ciB0YWJsZSBzY2Fucy4gVGhpcyBpcyB0aGUgYmFzZS1jbGFzcyBmb3IgdGFibGUgc2NhbnMsCkBA IC0xMTcsMTIgKzExOSwxMyBAQCB0eXBlZGVmIHN0cnVjdCBQYXJhbGxlbEJsb2NrVGFibGVTY2Fu V29ya2VyRGF0YSAqUGFyYWxsZWxCbG9ja1RhYmxlU2NhbldvcmtlcjsKIC8qCiAgKiBCYXNlIGNs YXNzIGZvciBmZXRjaGVzIGZyb20gYSB0YWJsZSB2aWEgYW4gaW5kZXguIFRoaXMgaXMgdGhlIGJh c2UtY2xhc3MKICAqIGZvciBzdWNoIHNjYW5zLCB3aGljaCBuZWVkcyB0byBiZSBlbWJlZGRlZCBp biB0aGUgcmVzcGVjdGl2ZSBzdHJ1Y3QgZm9yCi0gKiBpbmRpdmlkdWFsIEFNcy4KKyAqIGluZGl2 aWR1YWwgdGFibGUgQU1zLgorICoKKyAqIFRoaXMgaXMgZXNzZW50aWFsbHkgdGhlIHRhYmxlIEFN IHNwZWNpZmljIHBvcnRpb24gb2YgSW5kZXhTY2FuRGVzY0RhdGEsCisgKiBhY2Nlc3NlZCB0aHJv dWdoIGl0cyB4c19oZWFwZmV0Y2ggZmllbGQuCiAgKi8KIHR5cGVkZWYgc3RydWN0IEluZGV4RmV0 Y2hUYWJsZURhdGEKIHsKLQlSZWxhdGlvbglyZWw7Ci0KIAkvKgogCSAqIEJpdG1hc2sgb2YgU2Nh bk9wdGlvbnMgYWZmZWN0aW5nIHRoZSByZWxhdGlvbi4gTm8gU09fSU5URVJOQUxfRkxBR1MgYXJl CiAJICogcGVybWl0dGVkLgpAQCAtMTY2LDEwICsxNjksMTAgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5k ZXhTY2FuRGVzY0RhdGEKIAlzdHJ1Y3QgSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uICppbnN0cnVt ZW50OwogCiAJLyoKLQkgKiBJbiBhbiBpbmRleC1vbmx5IHNjYW4sIGEgc3VjY2Vzc2Z1bCBhbWdl dHR1cGxlIGNhbGwgbXVzdCBmaWxsIGVpdGhlcgotCSAqIHhzX2l0dXAgKGFuZCB4c19pdHVwZGVz Yykgb3IgeHNfaGl0dXAgKGFuZCB4c19oaXR1cGRlc2MpIHRvIHByb3ZpZGUgdGhlCi0JICogZGF0 YSByZXR1cm5lZCBieSB0aGUgc2Nhbi4gIEl0IGNhbiBmaWxsIGJvdGgsIGluIHdoaWNoIGNhc2Ug dGhlIGhlYXAKLQkgKiBmb3JtYXQgd2lsbCBiZSB1c2VkLgorCSAqIEluIGFuIGluZGV4LW9ubHkg c2NhbiwgYSBzdWNjZXNzZnVsIHRhYmxlX2luZGV4X2dldG5leHRfc2xvdCBjYWxsIG11c3QKKwkg KiBmaWxsIGVpdGhlciB4c19pdHVwIChhbmQgeHNfaXR1cGRlc2MpIG9yIHhzX2hpdHVwIChhbmQg eHNfaGl0dXBkZXNjKSB0bworCSAqIHByb3ZpZGUgdGhlIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHNj YW4uICBJdCBjYW4gZmlsbCBib3RoLCBpbiB3aGljaCBjYXNlCisJICogdGhlIGhlYXAgZm9ybWF0 IHdpbGwgYmUgdXNlZC4KIAkgKi8KIAlJbmRleFR1cGxlCXhzX2l0dXA7CQkvKiBpbmRleCB0dXBs ZSByZXR1cm5lZCBieSBBTSAqLwogCXN0cnVjdCBUdXBsZURlc2NEYXRhICp4c19pdHVwZGVzYzsJ Lyogcm93dHlwZSBkZXNjcmlwdG9yIG9mIHhzX2l0dXAgKi8KQEAgLTE4MSw2ICsxODQsMTQgQEAg dHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuRGVzY0RhdGEKIAkJCQkJCQkJCSAqIGZ1cnRoZXIgcmVz dWx0cyAqLwogCUluZGV4RmV0Y2hUYWJsZURhdGEgKnhzX2hlYXBmZXRjaDsKIAorCS8qCisJICog UmVzb2x2ZWQgdGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90IGNhbGxiYWNrLCB3aGljaCBpcyBzZXQg YnkKKwkgKiB0YWJsZV9pbmRleF9mZXRjaF9iZWdpbiBhdCB0aGUgc3RhcnQgb2YgYW1nZXR0dXBs ZSBzY2FucworCSAqLworCWJvb2wJCSgqeHNfZ2V0bmV4dF9zbG90KSAoc3RydWN0IEluZGV4U2Nh bkRlc2NEYXRhICpzY2FuLAorCQkJCQkJCQkJU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJ CQkJCQlzdHJ1Y3QgVHVwbGVUYWJsZVNsb3QgKnNsb3QpOworCiAJYm9vbAkJeHNfcmVjaGVjazsJ CS8qIFQgbWVhbnMgc2NhbiBrZXlzIG11c3QgYmUgcmVjaGVja2VkICovCiAKIAkvKgpAQCAtMTk0 LDYgKzIwNSwxMyBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5EZXNjRGF0YQogCWJvb2wJICAg KnhzX29yZGVyYnludWxsczsKIAlib29sCQl4c19yZWNoZWNrb3JkZXJieTsKIAorCS8qCisJICog QW4gYXBwcm94aW1hdGUgbGltaXQgb24gdGhlIGFtb3VudCBvZiB3b3JrLCBtZWFzdXJlZCBpbiBw YWdlcyB0b3VjaGVkLAorCSAqIGltcG9zZWQgb24gdGhlIGluZGV4IHNjYW4uICBUaGUgZGVmYXVs dCwgMCwgbWVhbnMgbm8gbGltaXQuICBVc2VkIGJ5CisJICogc2VsZnVuY3MuYyB0byBib3VuZCB0 aGUgY29zdCBvZiBnZXRfYWN0dWFsX3ZhcmlhYmxlX2VuZHBvaW50KCkuCisJICovCisJdWludDgJ CXhzX3Zpc2l0ZWRfcGFnZXNfbGltaXQ7CisKIAkvKiBwYXJhbGxlbCBpbmRleCBzY2FuIGluZm9y bWF0aW9uLCBpbiBzaGFyZWQgbWVtb3J5ICovCiAJc3RydWN0IFBhcmFsbGVsSW5kZXhTY2FuRGVz Y0RhdGEgKnBhcmFsbGVsX3NjYW47CiB9IEluZGV4U2NhbkRlc2NEYXRhOwpAQCAtMjA4LDggKzIy Niw2IEBAIHR5cGVkZWYgc3RydWN0IFBhcmFsbGVsSW5kZXhTY2FuRGVzY0RhdGEKIAljaGFyCQlw c19zbmFwc2hvdF9kYXRhW0ZMRVhJQkxFX0FSUkFZX01FTUJFUl07CiB9CQkJUGFyYWxsZWxJbmRl eFNjYW5EZXNjRGF0YTsKIAotc3RydWN0IFR1cGxlVGFibGVTbG90OwotCiAvKiBTdHJ1Y3QgZm9y IHN0b3JhZ2Utb3ItaW5kZXggc2NhbnMgb2Ygc3lzdGVtIHRhYmxlcyAqLwogdHlwZWRlZiBzdHJ1 Y3QgU3lzU2NhbkRlc2NEYXRhCiB7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFi bGVhbS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaAppbmRleCA0NjQ3Nzg1ZmQuLjYy MDE2ZmQwYiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaAorKysgYi9z cmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oCkBAIC0zOCw2ICszOCw3IEBAIHR5cGVkZWYgc3Ry dWN0IEJ1bGtJbnNlcnRTdGF0ZURhdGEgQnVsa0luc2VydFN0YXRlRGF0YTsKIHR5cGVkZWYgc3Ry dWN0IEluZGV4SW5mbyBJbmRleEluZm87CiB0eXBlZGVmIHN0cnVjdCBTYW1wbGVTY2FuU3RhdGUg U2FtcGxlU2NhblN0YXRlOwogdHlwZWRlZiBzdHJ1Y3QgU2NhbktleURhdGEgU2NhbktleURhdGE7 Cit0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5EZXNjRGF0YSAqSW5kZXhTY2FuRGVzYzsKIHR5cGVk ZWYgc3RydWN0IFZhbGlkYXRlSW5kZXhTdGF0ZSBWYWxpZGF0ZUluZGV4U3RhdGU7CiB0eXBlZGVm IHN0cnVjdCBWYWN1dW1QYXJhbXMgVmFjdXVtUGFyYW1zOwogCkBAIC00NDIsNjAgKzQ0Myw2NiBA QCB0eXBlZGVmIHN0cnVjdCBUYWJsZUFtUm91dGluZQogCSAqLwogCiAJLyoKLQkgKiBQcmVwYXJl IHRvIGZldGNoIHR1cGxlcyBmcm9tIHRoZSByZWxhdGlvbiwgYXMgbmVlZGVkIHdoZW4gZmV0Y2hp bmcKLQkgKiB0dXBsZXMgZm9yIGFuIGluZGV4IHNjYW4uICBUaGUgY2FsbGJhY2sgaGFzIHRvIHJl dHVybiBhbgotCSAqIEluZGV4RmV0Y2hUYWJsZURhdGEsIHdoaWNoIHRoZSBBTSB3aWxsIHR5cGlj YWxseSBlbWJlZCBpbiBhIGxhcmdlcgotCSAqIHN0cnVjdHVyZSB3aXRoIGFkZGl0aW9uYWwgaW5m b3JtYXRpb24uCisJICogUHJlcGFyZSB0byBmZXRjaCB0dXBsZXMsIGFzIG5lZWRlZCB3aGVuIGZl dGNoaW5nIHR1cGxlcyBmb3IgYW4gaW5kZXgKKwkgKiBzY2FuLiAgVGhlIGNhbGxiYWNrIGhhcyB0 byByZXR1cm4gYW4gSW5kZXhGZXRjaFRhYmxlRGF0YSwgd2hpY2ggdGhlIEFNCisJICogd2lsbCB0 eXBpY2FsbHkgZW1iZWQgaW4gYSBsYXJnZXIgc3RydWN0dXJlIHdpdGggYWRkaXRpb25hbCBpbmZv cm1hdGlvbi4KKwkgKiBBIHBvaW50ZXIgdG8gdGhpcyBzdHJ1Y3R1cmUgd2lsbCBiZSBzdG9yZWQg aW4gcGFzc2VkIGluZGV4IHNjYW4KKwkgKiBkZXNjcmlwdG9yJ3MgeHNfaGVhcGZldGNoIGZpZWxk IGJ5IHRoZSBjYWxsZXIgKGNvcmUgZXhlY3V0b3IgY29kZSkuCiAJICoKIAkgKiBmbGFncyBpcyBh IGJpdG1hc2sgb2YgU2Nhbk9wdGlvbnMgYWZmZWN0aW5nIHVuZGVybHlpbmcgdGFibGUgc2Nhbgog CSAqIGJlaGF2aW9yLiBTZWUgc2Nhbl9iZWdpbigpIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHBh c3NpbmcgdGhlc2UuCiAJICoKLQkgKiBUdXBsZXMgZm9yIGFuIGluZGV4IHNjYW4gY2FuIHRoZW4g YmUgZmV0Y2hlZCB2aWEgaW5kZXhfZmV0Y2hfdHVwbGUuCisJICogQ2FsbGJhY2sgaXMgcmVzcG9u c2libGUgZm9yIHNldHRpbmcgSW5kZXhTY2FuRGVzYy54c19nZXRuZXh0X3Nsb3QgdG8KKwkgKiB0 aGUgYXBwcm9wcmlhdGUgc2xvdC1iYXNlZCBjYWxsYmFjay4gIFR1cGxlcyBjYW4gdGhlbiBiZSBm ZXRjaGVkIHZpYQorCSAqIHRhYmxlX2luZGV4X2dldG5leHRfc2xvdCgpLiAgTm8gc2VwYXJhdGUg c2xvdC1iYXNlZCBjYWxsYmFjayBleGlzdHMgaW4KKwkgKiB0aGlzIHN0cnVjdCEKKwkgKgorCSAq IEluIHByaW5jaXBsZSBhIHNpbmdsZSBnZW5lcmFsLXB1cnBvc2UgY2FsbGJhY2sgKHN0b3JlZCBo ZXJlKSB3b3VsZAorCSAqIHN1ZmZpY2UsIGJ1dCB1c2luZyBzcGVjaWFsaXplZCB2YXJpYW50cyBh bGxvd3MgdGhlIHRhYmxlIEFNIHRvIHByb3ZpZGUKKwkgKiBtaW5pbWFsIGNvZGUgYmFzZWQgb24g Y29uZGl0aW9ucyB0aGF0IGFyZSBmaXhlZCBmb3IgdGhlIHdob2xlIHNjYW4gYXMKKwkgKiBhbiBv cHRpbWl6YXRpb24gKGUuZy4sIHZhcmlhbnRzIGZvciBwbGFpbiBpbmRleCBzY2FucyBhbmQgaW5k ZXgtb25seQorCSAqIHNjYW5zLCBlYWNoIHdpdGggZmV3ZXIgYnJhbmNoZXMpLgorCSAqCisJICog Tm90ZSB0aGF0IEFNcyB0aGF0IGRvIG5vdCBuZWNlc3NhcmlseSB1cGRhdGUgaW5kZXhlcyB3aGVu IGluZGV4ZWQKKwkgKiBjb2x1bW5zIGRvIG5vdCBjaGFuZ2UsIG5lZWQgdG8gcmV0dXJuIHRoZSBj dXJyZW50L2NvcnJlY3QgdmVyc2lvbiBvZgorCSAqIHRoZSB0dXBsZSB0aGF0IGlzIHZpc2libGUg dG8gdGhlIHNuYXBzaG90LCBldmVuIGlmIHRoZSB0aWQgcG9pbnRzIHRvIGFuCisJICogb2xkZXIg dmVyc2lvbiBvZiB0aGUgdHVwbGUuCiAJICovCi0Jc3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEg KigqaW5kZXhfZmV0Y2hfYmVnaW4pIChSZWxhdGlvbiByZWwsIHVpbnQzMiBmbGFncyk7CisJc3Ry dWN0IEluZGV4RmV0Y2hUYWJsZURhdGEgKigqaW5kZXhfZmV0Y2hfYmVnaW4pIChJbmRleFNjYW5E ZXNjIHNjYW4sCisJCQkJCQkJCQkJCQkJICB1aW50MzIgZmxhZ3MpOwogCiAJLyoKLQkgKiBSZXNl dCBpbmRleCBmZXRjaC4gVHlwaWNhbGx5IHRoaXMgd2lsbCByZWxlYXNlIGNyb3NzIGluZGV4IGZl dGNoCi0JICogcmVzb3VyY2VzIGhlbGQgaW4gSW5kZXhGZXRjaFRhYmxlRGF0YS4KKwkgKiBSZXNl dCBpbmRleCBzY2FuIGZvciBhIHJlc2Nhbi4gIFJlc2V0cyB0YWJsZS1vd25lZCByZXNvdXJjZXMu CiAJICovCi0Jdm9pZAkJKCppbmRleF9mZXRjaF9yZXNldCkgKHN0cnVjdCBJbmRleEZldGNoVGFi bGVEYXRhICpkYXRhKTsKKwl2b2lkCQkoKmluZGV4X2ZldGNoX3Jlc2V0KSAoSW5kZXhTY2FuRGVz YyBzY2FuKTsKIAogCS8qCi0JICogUmVsZWFzZSByZXNvdXJjZXMgYW5kIGRlYWxsb2NhdGUgaW5k ZXggZmV0Y2guCisJICogUmVsZWFzZSByZXNvdXJjZXMgYW5kIGRlYWxsb2NhdGUgaW5kZXggc2Nh biBzdGF0ZS4KKwkgKi8KKwl2b2lkCQkoKmluZGV4X2ZldGNoX2VuZCkgKEluZGV4U2NhbkRlc2Mg c2Nhbik7CisKKwkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgKiBDYWxsYmFja3MgZm9yIG5vbi1tb2Rp Znlpbmcgb3BlcmF0aW9ucyBvbiBpbmRpdmlkdWFsIHR1cGxlcworCSAqIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQogCSAqLwotCXZvaWQJCSgqaW5kZXhfZmV0Y2hfZW5kKSAoc3RydWN0IEluZGV4RmV0Y2hUYWJs ZURhdGEgKmRhdGEpOwogCiAJLyoKIAkgKiBGZXRjaCB0dXBsZSBhdCBgdGlkYCBpbnRvIGBzbG90 YCwgYWZ0ZXIgZG9pbmcgYSB2aXNpYmlsaXR5IHRlc3QKIAkgKiBhY2NvcmRpbmcgdG8gYHNuYXBz aG90YC4gSWYgYSB0dXBsZSB3YXMgZm91bmQgYW5kIHBhc3NlZCB0aGUgdmlzaWJpbGl0eQogCSAq IHRlc3QsIHJldHVybiB0cnVlLCBmYWxzZSBvdGhlcndpc2UuCiAJICoKLQkgKiBOb3RlIHRoYXQg QU1zIHRoYXQgZG8gbm90IG5lY2Vzc2FyaWx5IHVwZGF0ZSBpbmRleGVzIHdoZW4gaW5kZXhlZAot CSAqIGNvbHVtbnMgZG8gbm90IGNoYW5nZSwgbmVlZCB0byByZXR1cm4gdGhlIGN1cnJlbnQvY29y cmVjdCB2ZXJzaW9uIG9mCi0JICogdGhlIHR1cGxlIHRoYXQgaXMgdmlzaWJsZSB0byB0aGUgc25h cHNob3QsIGV2ZW4gaWYgdGhlIHRpZCBwb2ludHMgdG8gYW4KLQkgKiBvbGRlciB2ZXJzaW9uIG9m IHRoZSB0dXBsZS4KKwkgKiBUaGlzIGlzIGEgbG93ZXItbGV2ZWwgY2FsbGJhY2sgZm9yIHNpbmds ZS1zaG90IFRJRCBsb29rdXBzIHVzZWQgYnkKKwkgKiBjb25zdHJhaW50IGVuZm9yY2VtZW50IGNv ZGUgKHVuaXF1ZSBjaGVja3MgYW5kIHNpbWlsYXIpLgogCSAqCi0JICogKmNhbGxfYWdhaW4gaXMg ZmFsc2Ugb24gdGhlIGZpcnN0IGNhbGwgdG8gaW5kZXhfZmV0Y2hfdHVwbGUgZm9yIGEgdGlkLgot CSAqIElmIHRoZXJlIHBvdGVudGlhbGx5IGlzIGFub3RoZXIgdHVwbGUgbWF0Y2hpbmcgdGhlIHRp ZCwgKmNhbGxfYWdhaW4KLQkgKiBuZWVkcyB0byBiZSBzZXQgdG8gdHJ1ZSBieSBpbmRleF9mZXRj aF90dXBsZSwgc2lnbmFsaW5nIHRvIHRoZSBjYWxsZXIKLQkgKiB0aGF0IGluZGV4X2ZldGNoX3R1 cGxlIHNob3VsZCBiZSBjYWxsZWQgYWdhaW4gZm9yIHRoZSBzYW1lIHRpZC4KLQkgKgotCSAqICph bGxfZGVhZCwgaWYgYWxsX2RlYWQgaXMgbm90IE5VTEwsIHNob3VsZCBiZSBzZXQgdG8gdHJ1ZSBi eQotCSAqIGluZGV4X2ZldGNoX3R1cGxlIGlmZiBpdCBpcyBndWFyYW50ZWVkIHRoYXQgbm8gYmFj a2VuZCBuZWVkcyB0byBzZWUKLQkgKiB0aGF0IHR1cGxlLiBJbmRleCBBTXMgY2FuIHVzZSB0aGF0 IHRvIGF2b2lkIHJldHVybmluZyB0aGF0IHRpZCBpbgotCSAqIGZ1dHVyZSBzZWFyY2hlcy4KLQkg Ki8KLQlib29sCQkoKmluZGV4X2ZldGNoX3R1cGxlKSAoc3RydWN0IEluZGV4RmV0Y2hUYWJsZURh dGEgKnNjYW4sCi0JCQkJCQkJCQkgIEl0ZW1Qb2ludGVyIHRpZCwKLQkJCQkJCQkJCSAgU25hcHNo b3Qgc25hcHNob3QsCi0JCQkJCQkJCQkgIFR1cGxlVGFibGVTbG90ICpzbG90LAotCQkJCQkJCQkJ ICBib29sICpjYWxsX2FnYWluLCBib29sICphbGxfZGVhZCk7Ci0KLQotCS8qIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQotCSAqIENhbGxiYWNrcyBmb3Igbm9uLW1vZGlmeWluZyBvcGVyYXRpb25zIG9uIGluZGl2 aWR1YWwgdHVwbGVzCi0JICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICogKmFsbF9kZWFkLCBpZiBhbGxf ZGVhZCBpcyBub3QgTlVMTCwgc2hvdWxkIGJlIHNldCB0byB0cnVlIGJ5IGZldGNoX3RpZAorCSAq IGlmZiBpdCBpcyBndWFyYW50ZWVkIHRoYXQgbm8gYmFja2VuZCBuZWVkcyB0byBzZWUgdGhhdCB0 dXBsZS4gSW5kZXggQU1zCisJICogY2FuIHVzZSB0aGF0IHRvIGF2b2lkIHJldHVybmluZyB0aGF0 IHRpZCBpbiBmdXR1cmUgc2VhcmNoZXMuCiAJICovCisJYm9vbAkJKCpmZXRjaF90aWQpIChSZWxh dGlvbiByZWwsCisJCQkJCQkJICBJdGVtUG9pbnRlciB0aWQsCisJCQkJCQkJICBTbmFwc2hvdCBz bmFwc2hvdCwKKwkJCQkJCQkgIFR1cGxlVGFibGVTbG90ICpzbG90LAorCQkJCQkJCSAgYm9vbCAq YWxsX2RlYWQpOwogCiAJLyoKIAkgKiBGZXRjaCB0dXBsZSBhdCBgdGlkYCBpbnRvIGBzbG90YCwg YWZ0ZXIgZG9pbmcgYSB2aXNpYmlsaXR5IHRlc3QKQEAgLTEyMzAsMTYgKzEyMzcsMTggQEAgdGFi bGVfcGFyYWxsZWxzY2FuX3JlaW5pdGlhbGl6ZShSZWxhdGlvbiByZWwsIFBhcmFsbGVsVGFibGVT Y2FuRGVzYyBwc2NhbikKICAqLwogCiAvKgotICogUHJlcGFyZSB0byBmZXRjaCB0dXBsZXMgZnJv bSB0aGUgcmVsYXRpb24sIGFzIG5lZWRlZCB3aGVuIGZldGNoaW5nIHR1cGxlcwotICogZm9yIGFu IGluZGV4IHNjYW4uCisgKiBQcmVwYXJlIHRvIGZldGNoIHR1cGxlcyBmcm9tIHRoZSByZWxhdGlv biBhcyBwYXJ0IG9mIGFuIGluZGV4IHNjYW4uCisgKiBDYWxsZXIgcHV0cyB0aGlzIGluIHRoZSBw YXNzZWQgaW5kZXggc2NhbiBkZXNjcmlwdG9yJ3MgeHNfaGVhcGZldGNoIGZpZWxkLgorICoKKyAq IFR1cGxlcyBmb3IgYW4gaW5kZXggc2NhbiBjYW4gdGhlbiBiZSBmZXRjaGVkIHZpYSB0YWJsZV9p bmRleF9nZXRuZXh0X3Nsb3QoKS4KICAqCiAgKiBmbGFncyBpcyBhIGJpdG1hc2sgb2YgU2Nhbk9w dGlvbnMuIE5vIFNPX0lOVEVSTkFMX0ZMQUdTIGFyZSBwZXJtaXR0ZWQuCi0gKgotICogVHVwbGVz IGZvciBhbiBpbmRleCBzY2FuIGNhbiB0aGVuIGJlIGZldGNoZWQgdmlhIHRhYmxlX2luZGV4X2Zl dGNoX3R1cGxlKCkuCiAgKi8KIHN0YXRpYyBpbmxpbmUgSW5kZXhGZXRjaFRhYmxlRGF0YSAqCi10 YWJsZV9pbmRleF9mZXRjaF9iZWdpbihSZWxhdGlvbiByZWwsIHVpbnQzMiBmbGFncykKK3RhYmxl X2luZGV4X2ZldGNoX2JlZ2luKEluZGV4U2NhbkRlc2Mgc2NhbiwgdWludDMyIGZsYWdzKQogewor CVJlbGF0aW9uCXJlbCA9IHNjYW4tPmhlYXBSZWxhdGlvbjsKKwogCUFzc2VydCgoZmxhZ3MgJiBT T19JTlRFUk5BTF9GTEFHUykgPT0gMCk7CiAKIAkvKgpAQCAtMTI1MCw3NCArMTI1OSwxMDIgQEAg dGFibGVfaW5kZXhfZmV0Y2hfYmVnaW4oUmVsYXRpb24gcmVsLCB1aW50MzIgZmxhZ3MpCiAJaWYg KHVubGlrZWx5KFRyYW5zYWN0aW9uSWRJc1ZhbGlkKENoZWNrWGlkQWxpdmUpICYmICFic3lzc2Nh bikpCiAJCWVsb2coRVJST1IsICJzY2FuIHN0YXJ0ZWQgZHVyaW5nIGxvZ2ljYWwgZGVjb2Rpbmci KTsKIAotCXJldHVybiByZWwtPnJkX3RhYmxlYW0tPmluZGV4X2ZldGNoX2JlZ2luKHJlbCwgZmxh Z3MpOworCXJldHVybiByZWwtPnJkX3RhYmxlYW0tPmluZGV4X2ZldGNoX2JlZ2luKHNjYW4sIGZs YWdzKTsKIH0KIAogLyoKLSAqIFJlc2V0IGluZGV4IGZldGNoLiBUeXBpY2FsbHkgdGhpcyB3aWxs IHJlbGVhc2UgY3Jvc3MgaW5kZXggZmV0Y2ggcmVzb3VyY2VzCi0gKiBoZWxkIGluIEluZGV4RmV0 Y2hUYWJsZURhdGEuCisgKiBSZXNldCBpbmRleCBzY2FuLCBmb3IgYSByZXNjYW4uIFJlc2V0cyB0 YWJsZS1vd25lZCByZXNvdXJjZXMuCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZAotdGFibGVfaW5k ZXhfZmV0Y2hfcmVzZXQoc3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4pCit0YWJsZV9p bmRleF9mZXRjaF9yZXNldChJbmRleFNjYW5EZXNjIHNjYW4pCiB7Ci0Jc2Nhbi0+cmVsLT5yZF90 YWJsZWFtLT5pbmRleF9mZXRjaF9yZXNldChzY2FuKTsKKwlBc3NlcnQoc2Nhbi0+eHNfaGVhcGZl dGNoKTsKKworCXNjYW4tPmhlYXBSZWxhdGlvbi0+cmRfdGFibGVhbS0+aW5kZXhfZmV0Y2hfcmVz ZXQoc2Nhbik7CiB9CiAKIC8qCi0gKiBSZWxlYXNlIHJlc291cmNlcyBhbmQgZGVhbGxvY2F0ZSBp bmRleCBmZXRjaC4KKyAqIFJlbGVhc2UgcmVzb3VyY2VzIGFuZCBkZWFsbG9jYXRlIHRoZSBJbmRl eEZldGNoVGFibGVEYXRhIGluIHRoZSBzY2FuLgogICovCiBzdGF0aWMgaW5saW5lIHZvaWQKLXRh YmxlX2luZGV4X2ZldGNoX2VuZChzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbikKK3Rh YmxlX2luZGV4X2ZldGNoX2VuZChJbmRleFNjYW5EZXNjIHNjYW4pCiB7Ci0Jc2Nhbi0+cmVsLT5y ZF90YWJsZWFtLT5pbmRleF9mZXRjaF9lbmQoc2Nhbik7CisJQXNzZXJ0KHNjYW4tPnhzX2hlYXBm ZXRjaCk7CisKKwlzY2FuLT5oZWFwUmVsYXRpb24tPnJkX3RhYmxlYW0tPmluZGV4X2ZldGNoX2Vu ZChzY2FuKTsKIH0KIAogLyoKLSAqIEZldGNoZXMsIGFzIHBhcnQgb2YgYW4gaW5kZXggc2Nhbiwg dHVwbGUgYXQgYHRpZGAgaW50byBgc2xvdGAsIGFmdGVyIGRvaW5nCi0gKiBhIHZpc2liaWxpdHkg dGVzdCBhY2NvcmRpbmcgdG8gYHNuYXBzaG90YC4gSWYgYSB0dXBsZSB3YXMgZm91bmQgYW5kIHBh c3NlZAotICogdGhlIHZpc2liaWxpdHkgdGVzdCwgcmV0dXJucyB0cnVlLCBmYWxzZSBvdGhlcndp c2UuIE5vdGUgdGhhdCAqdGlkIG1heSBiZQotICogbW9kaWZpZWQgd2hlbiB3ZSByZXR1cm4gdHJ1 ZSAoc2VlIGxhdGVyIHJlbWFya3Mgb24gbXVsdGlwbGUgcm93IHZlcnNpb25zCi0gKiByZWFjaGFi bGUgdmlhIGEgc2luZ2xlIGluZGV4IGVudHJ5KS4KKyAqIEZldGNoIHRoZSBuZXh0IHR1cGxlIGZy b20gYW4gaW5kZXggc2NhbiBpbnRvIGBzbG90YCwgc2Nhbm5pbmcgaW4gdGhlCisgKiBzcGVjaWZp ZWQgZGlyZWN0aW9uLiAgUmV0dXJucyB0cnVlIGlmIGEgdHVwbGUgc2F0aXNmeWluZyB0aGUgc2Nh biBrZXlzIGFuZAorICogdGhlIHNuYXBzaG90IHdhcyBmb3VuZCwgZmFsc2Ugb3RoZXJ3aXNlLiAg VGhlIHR1cGxlIGlzIHN0b3JlZCBpbiB0aGUKKyAqIHNwZWNpZmllZCBzbG90LgogICoKLSAqICpj YWxsX2FnYWluIG5lZWRzIHRvIGJlIGZhbHNlIG9uIHRoZSBmaXJzdCBjYWxsIHRvIHRhYmxlX2lu ZGV4X2ZldGNoX3R1cGxlKCkgZm9yCi0gKiBhIHRpZC4gSWYgdGhlcmUgcG90ZW50aWFsbHkgaXMg YW5vdGhlciB0dXBsZSBtYXRjaGluZyB0aGUgdGlkLCAqY2FsbF9hZ2FpbgotICogd2lsbCBiZSBz ZXQgdG8gdHJ1ZSwgc2lnbmFsaW5nIHRoYXQgdGFibGVfaW5kZXhfZmV0Y2hfdHVwbGUoKSBzaG91 bGQgYmUgY2FsbGVkCi0gKiBhZ2FpbiBmb3IgdGhlIHNhbWUgdGlkLgorICogRGlzcGF0Y2hlcyB0 aHJvdWdoIHNjYW4tPnhzX2dldG5leHRfc2xvdCwgd2hpY2ggaXMgcmVzb2x2ZWQgb25jZSBieQor ICogdGhlIHRhYmxlIEFNJ3MgaW5kZXhfZmV0Y2hfYmVnaW4gY2FsbGJhY2suCiAgKgotICogKmFs bF9kZWFkLCBpZiBhbGxfZGVhZCBpcyBub3QgTlVMTCwgd2lsbCBiZSBzZXQgdG8gdHJ1ZSBieQot ICogdGFibGVfaW5kZXhfZmV0Y2hfdHVwbGUoKSBpZmYgaXQgaXMgZ3VhcmFudGVlZCB0aGF0IG5v IGJhY2tlbmQgbmVlZHMgdG8gc2VlCi0gKiB0aGF0IHR1cGxlLiBJbmRleCBBTXMgY2FuIHVzZSB0 aGF0IHRvIGF2b2lkIHJldHVybmluZyB0aGF0IHRpZCBpbiBmdXR1cmUKLSAqIHNlYXJjaGVzLgor ICogT24gc3VjY2VzcywgcmVzb3VyY2VzIChsaWtlIGJ1ZmZlciBwaW5zKSBhcmUgbGlrZWx5IHRv IGJlIGhlbGQsIGFuZCB3aWxsIGJlCisgKiByZWxlYXNlZCBieSBhIGZ1dHVyZSB0YWJsZV9pbmRl eF9nZXRuZXh0X3Nsb3Qgb3IgaW5kZXhfZW5kc2NhbiBjYWxsLgogICoKLSAqIFRoZSBkaWZmZXJl bmNlIGJldHdlZW4gdGhpcyBmdW5jdGlvbiBhbmQgdGFibGVfdHVwbGVfZmV0Y2hfcm93X3ZlcnNp b24oKQotICogaXMgdGhhdCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGN1cnJlbnRseSB2aXNp YmxlIHZlcnNpb24gb2YgYSByb3cgaWYKLSAqIHRoZSBBTSBzdXBwb3J0cyBzdG9yaW5nIG11bHRp cGxlIHJvdyB2ZXJzaW9ucyByZWFjaGFibGUgdmlhIGEgc2luZ2xlIGluZGV4Ci0gKiBlbnRyeSAo bGlrZSBoZWFwJ3MgSE9UKS4gV2hlcmVhcyB0YWJsZV90dXBsZV9mZXRjaF9yb3dfdmVyc2lvbigp IG9ubHkKLSAqIGV2YWx1YXRlcyB0aGUgdHVwbGUgZXhhY3RseSBhdCBgdGlkYC4gT3V0c2lkZSBv ZiBpbmRleCBlbnRyeSAtPnRhYmxlIHR1cGxlCi0gKiBsb29rdXBzLCB0YWJsZV90dXBsZV9mZXRj aF9yb3dfdmVyc2lvbigpIGlzIHdoYXQncyB1c3VhbGx5IG5lZWRlZC4KKyAqIE5vdGU6IGNhbGxl ciBtdXN0IGNoZWNrIHNjYW4tPnhzX3JlY2hlY2ssIGFuZCBwZXJmb3JtIHJlY2hlY2tpbmcgb2Yg dGhlCisgKiBzY2FuIGtleXMgaWYgcmVxdWlyZWQuICBXZSBkbyBub3QgZG8gdGhhdCBoZXJlIGJl Y2F1c2Ugd2UgZG9uJ3QgaGF2ZQorICogZW5vdWdoIGluZm9ybWF0aW9uIHRvIGRvIGl0IGVmZmlj aWVudGx5IGluIHRoZSBnZW5lcmFsIGNhc2UuCisgKgorICogRm9yIGluZGV4LW9ubHkgc2NhbnMs IHRoZSBjYWxsYmFjayBhbHNvIGZpbGxzIHhzX2l0dXAveHNfaXR1cGRlc2Mgb3IKKyAqIHhzX2hp dHVwL3hzX2hpdHVwZGVzYyAob3IgYm90aCkgc28gdGhhdCBpbmRleCBkYXRhIGNhbiBiZSByZXR1 cm5lZCB3aXRob3V0CisgKiBhIGhlYXAgZmV0Y2guCiAgKi8KIHN0YXRpYyBpbmxpbmUgYm9vbAot dGFibGVfaW5kZXhfZmV0Y2hfdHVwbGUoc3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4s Ci0JCQkJCQlJdGVtUG9pbnRlciB0aWQsCi0JCQkJCQlTbmFwc2hvdCBzbmFwc2hvdCwKLQkJCQkJ CVR1cGxlVGFibGVTbG90ICpzbG90LAotCQkJCQkJYm9vbCAqY2FsbF9hZ2FpbiwgYm9vbCAqYWxs X2RlYWQpCit0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2Fu RGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQkJCSBUdXBsZVRhYmxlU2xvdCAqc2xvdCkKIHsKLQly ZXR1cm4gc2Nhbi0+cmVsLT5yZF90YWJsZWFtLT5pbmRleF9mZXRjaF90dXBsZShzY2FuLCB0aWQs IHNuYXBzaG90LAotCQkJCQkJCQkJCQkJCXNsb3QsIGNhbGxfYWdhaW4sCi0JCQkJCQkJCQkJCQkJ YWxsX2RlYWQpOworCUFzc2VydChzY2FuLT54c19oZWFwZmV0Y2gpOworCisJcmV0dXJuIHNjYW4t PnhzX2dldG5leHRfc2xvdChzY2FuLCBkaXJlY3Rpb24sIHNsb3QpOwogfQogCiAvKgotICogVGhp cyBpcyBhIGNvbnZlbmllbmNlIHdyYXBwZXIgYXJvdW5kIHRhYmxlX2luZGV4X2ZldGNoX3R1cGxl KCkgd2hpY2gKLSAqIHJldHVybnMgd2hldGhlciB0aGVyZSBhcmUgdGFibGUgdHVwbGUgaXRlbXMg Y29ycmVzcG9uZGluZyB0byBhbiBpbmRleAotICogZW50cnkuICBUaGlzIGxpa2VseSBpcyBvbmx5 IHVzZWZ1bCB0byB2ZXJpZnkgaWYgdGhlcmUncyBhIGNvbmZsaWN0IGluIGEKLSAqIHVuaXF1ZSBp bmRleC4KKyAqIEZldGNoIHR1cGxlIGF0IGB0aWRgIGludG8gYHNsb3RgLCBhZnRlciBkb2luZyBh IHZpc2liaWxpdHkgdGVzdCBhY2NvcmRpbmcKKyAqIHRvIGBzbmFwc2hvdGAuIElmIGEgdHVwbGUg d2FzIGZvdW5kIGFuZCBwYXNzZWQgdGhlIHZpc2liaWxpdHkgdGVzdCwgcmV0dXJucworICogdHJ1 ZSwgZmFsc2Ugb3RoZXJ3aXNlLiAgVGhpcyBpcyBhIGxvdy1sZXZlbCBpbnRlcmZhY2UgZGVzaWdu ZWQgZm9yIHVzZSBieQorICogY29uc3RyYWludCBlbmZvcmNlbWVudCBjb2RlLCB3aGVyZSBwYXNz aW5nIGEgVElEIGNhbid0IGJlIGF2b2lkZWQuCisgKgorICogTm90ZSB0aGF0ICp0aWQgbWF5IGJl IG1vZGlmaWVkIHdoZW4gd2UgcmV0dXJuIHRydWUgKGUuZy4gZHVlIHRvIGZvbGxvd2luZyBhCisg KiBIT1QgY2hhaW4gaW4gYSBoZWFwYW0gdGFibGUpLiAgQ2FsbGVyIHNob3VsZCBjb25zaWRlciBw YXNzaW5nIGEgcG9pbnRlciB0bworICogYSBtdXRhYmxlIGNvcHkgb2YgdGhlaXIgb3JpZ2luYWwg VElEIHRvIGF2b2lkIHVud2FudGVkIHNpZGUtZWZmZWN0cy4KKyAqCisgKiBJZiBhbGxfZGVhZCBp cyBub3QgTlVMTCwgKmFsbF9kZWFkIHdpbGwgYmUgc2V0IHRvIHRydWUgaGVyZSBpZmYgaXQgaXMK KyAqIGd1YXJhbnRlZWQgdGhhdCBubyBiYWNrZW5kIG5lZWRzIHRvIHNlZSBhbnkgdHVwbGUgcmVh Y2hhYmxlIHRocm91Z2gKKyAqIGNhbGxlcidzIFRJRC4gIFRoaXMgbWVhbnMgdGhhdCBpdCBpcyBz YWZlIHRvIG1hcmsgYW4gaW5kZXggdHVwbGUgY29udGFpbmluZworICogdGhpcyBUSUQgYXMgTFBf REVBRC4KKyAqCisgKiBUaGUgbWFpbiBkaWZmZXJlbmNlIGJldHdlZW4gdGFibGVfdHVwbGVfZmV0 Y2hfcm93X3ZlcnNpb24oKSBhbmQgdGhpcworICogZnVuY3Rpb24gaXMgdGhhdCB3ZSByZXR1cm4g dGhlIGN1cnJlbnRseSB2aXNpYmxlIHZlcnNpb24gb2YgYSByb3csIHdoaWNoCisgKiBtYXR0ZXJz IHdpdGggQU1zIHRoYXQgc3VwcG9ydCBzdG9yaW5nIG11bHRpcGxlIHJvdyB2ZXJzaW9ucyByZWFj aGFibGUgdmlhIGEKKyAqIHNpbmdsZSBUSUQgKGUuZy4sIGR1ZSB0byBoZWFwYW0ncyBIT1QgY2hh aW5zKS4gIFRvIHJlbGlhYmx5IGV2YWx1YXRlCisgKiBleGFjdGx5IHRoZSB0dXBsZSBhdCBgdGlk YCwgY2FsbCB0YWJsZV90dXBsZV9mZXRjaF9yb3dfdmVyc2lvbigpIGluc3RlYWQuCiAgKi8KLWV4 dGVybiBib29sIHRhYmxlX2luZGV4X2ZldGNoX3R1cGxlX2NoZWNrKFJlbGF0aW9uIHJlbCwKLQkJ CQkJCQkJCQkgIEl0ZW1Qb2ludGVyIHRpZCwKLQkJCQkJCQkJCQkgIFNuYXBzaG90IHNuYXBzaG90 LAotCQkJCQkJCQkJCSAgYm9vbCAqYWxsX2RlYWQpOworc3RhdGljIGlubGluZSBib29sCit0YWJs ZV9mZXRjaF90aWQoUmVsYXRpb24gcmVsLAorCQkJCUl0ZW1Qb2ludGVyIHRpZCwKKwkJCQlTbmFw c2hvdCBzbmFwc2hvdCwKKwkJCQlUdXBsZVRhYmxlU2xvdCAqc2xvdCwKKwkJCQlib29sICphbGxf ZGVhZCkKK3sKKwlyZXR1cm4gcmVsLT5yZF90YWJsZWFtLT5mZXRjaF90aWQocmVsLCB0aWQsIHNu YXBzaG90LCBzbG90LCBhbGxfZGVhZCk7Cit9CisKKy8qCisgKiBDb252ZW5pZW5jZSB3cmFwcGVy IGFyb3VuZCB0YWJsZV9mZXRjaF90aWQoKSBmb3IgY2FsbGVycyB0aGF0IGp1c3QgbmVlZCB0bwor ICogY2hlY2sgaWYgYSB0dXBsZSBpcyB2aXNpYmxlLgorICoKKyAqIENhbGxlciBzaG91bGQgbm90 ZSB0aGUgdGFibGVfZmV0Y2hfdGlkIHdhcm5pbmcgYWJvdXQgKnRpZCBiZWluZyBtb2RpZmllZAor ICogd2hlbiB3ZSByZXR1cm4gdHJ1ZSBpbiBzb21lIGNhc2VzLgorICovCitleHRlcm4gYm9vbCB0 YWJsZV9mZXRjaF90aWRfY2hlY2soUmVsYXRpb24gcmVsLAorCQkJCQkJCQkgIEl0ZW1Qb2ludGVy IHRpZCwKKwkJCQkJCQkJICBTbmFwc2hvdCBzbmFwc2hvdCwKKwkJCQkJCQkJICBib29sICphbGxf ZGVhZCk7CiAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xMzMxLDkgKzEzNjgsOCBAQCBleHRl cm4gYm9vbCB0YWJsZV9pbmRleF9mZXRjaF90dXBsZV9jaGVjayhSZWxhdGlvbiByZWwsCiAgKiBg c25hcHNob3RgLiBJZiBhIHR1cGxlIHdhcyBmb3VuZCBhbmQgcGFzc2VkIHRoZSB2aXNpYmlsaXR5 IHRlc3QsIHJldHVybnMKICAqIHRydWUsIGZhbHNlIG90aGVyd2lzZS4KICAqCi0gKiBTZWUgdGFi bGVfaW5kZXhfZmV0Y2hfdHVwbGUncyBjb21tZW50IGFib3V0IHdoYXQgdGhlIGRpZmZlcmVuY2Ug YmV0d2VlbgotICogdGhlc2UgZnVuY3Rpb25zIGlzLiBJdCBpcyBjb3JyZWN0IHRvIHVzZSB0aGlz IGZ1bmN0aW9uIG91dHNpZGUgb2YgaW5kZXgKLSAqIGVudHJ5LT50YWJsZSB0dXBsZSBsb29rdXBz LgorICogU2VlIHRhYmxlX2ZldGNoX3RpZCdzIGNvbW1lbnQgYWJvdXQgd2hhdCB0aGUgZGlmZmVy ZW5jZSBiZXR3ZWVuIHRoZXNlCisgKiBmdW5jdGlvbnMgaXMuCiAgKi8KIHN0YXRpYyBpbmxpbmUg Ym9vbAogdGFibGVfdHVwbGVfZmV0Y2hfcm93X3ZlcnNpb24oUmVsYXRpb24gcmVsLApkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvaW5zdHJ1bWVudF9ub2RlLmggYi9zcmMvaW5jbHVk ZS9leGVjdXRvci9pbnN0cnVtZW50X25vZGUuaAppbmRleCAyYTBmZjM3N2EuLjc4ZjgxMGFhYiAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvaW5zdHJ1bWVudF9ub2RlLmgKKysrIGIv c3JjL2luY2x1ZGUvZXhlY3V0b3IvaW5zdHJ1bWVudF9ub2RlLmgKQEAgLTQ4LDYgKzQ4LDkgQEAg dHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uCiB7CiAJLyogSW5kZXggc2Vh cmNoIGNvdW50IChpbmNyZW1lbnRlZCB3aXRoIHBnc3RhdF9jb3VudF9pbmRleF9zY2FuIGNhbGwp ICovCiAJdWludDY0CQluc2VhcmNoZXM7CisKKwkvKiBUYWJsZSB0dXBsZXMgZmV0Y2hlZCBjb3Vu dCAoaW5jcmVtZW50ZWQgZHVyaW5nIGluZGV4LW9ubHkgc2NhbnMpICovCisJdWludDY0CQludGFi bGV0dXBsZWZldGNoZXM7CiB9IEluZGV4U2Nhbkluc3RydW1lbnRhdGlvbjsKIAogLyoKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMv ZXhlY25vZGVzLmgKaW5kZXggM2VjYWU3NTUyLi5iYTM2Yzk3NWQgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rl cy5oCkBAIC0xNzg5LDcgKzE3ODksNiBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5TdGF0ZQog ICoJCUluc3RydW1lbnQJCSAgIGxvY2FsIGluZGV4IHNjYW4gaW5zdHJ1bWVudGF0aW9uCiAgKgkJ U2hhcmVkSW5mbwkJICAgcGFyYWxsZWwgd29ya2VyIGluc3RydW1lbnRhdGlvbiAobm8gbGVhZGVy IGVudHJ5KQogICoJCVRhYmxlU2xvdAkJICAgc2xvdCBmb3IgaG9sZGluZyB0dXBsZXMgZmV0Y2hl ZCBmcm9tIHRoZSB0YWJsZQotICoJCVZNQnVmZmVyCQkgICBidWZmZXIgaW4gdXNlIGZvciB2aXNp YmlsaXR5IG1hcCB0ZXN0aW5nLCBpZiBhbnkKICAqCQlQc2NhbkxlbgkJICAgc2l6ZSBvZiBwYXJh bGxlbCBpbmRleC1vbmx5IHNjYW4gZGVzY3JpcHRvcgogICoJCU5hbWVDU3RyaW5nQXR0TnVtcyBh dHRudW1zIG9mIG5hbWUgdHlwZWQgY29sdW1ucyB0byBwYWQgdG8gTkFNRURBVEFMRU4KICAqCQlO YW1lQ1N0cmluZ0NvdW50ICAgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBOYW1lQ1N0cmluZ0F0 dE51bXMgYXJyYXkKQEAgLTE4MTIsNyArMTgxMSw2IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4T25s eVNjYW5TdGF0ZQogCUluZGV4U2Nhbkluc3RydW1lbnRhdGlvbiAqaW9zc19JbnN0cnVtZW50Owog CVNoYXJlZEluZGV4U2Nhbkluc3RydW1lbnRhdGlvbiAqaW9zc19TaGFyZWRJbmZvOwogCVR1cGxl VGFibGVTbG90ICppb3NzX1RhYmxlU2xvdDsKLQlCdWZmZXIJCWlvc3NfVk1CdWZmZXI7CiAJU2l6 ZQkJaW9zc19Qc2NhbkxlbjsKIAlBdHRyTnVtYmVyICppb3NzX05hbWVDU3RyaW5nQXR0TnVtczsK IAlpbnQJCQlpb3NzX05hbWVDU3RyaW5nQ291bnQ7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9h Y2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVh cGFtX2hhbmRsZXIuYwppbmRleCAwN2YwNzE4OGQuLjY1N2FlNDQxNCAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYworKysgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCkBAIC02NTcsOCArNjU3LDggQEAgaGVhcGFtX3Jl bGF0aW9uX2NvcHlfZm9yX2NsdXN0ZXIoUmVsYXRpb24gT2xkSGVhcCwgUmVsYXRpb24gTmV3SGVh cCwKIAogCQl0YWJsZVNjYW4gPSBOVUxMOwogCQloZWFwU2NhbiA9IE5VTEw7Ci0JCWluZGV4U2Nh biA9IGluZGV4X2JlZ2luc2NhbihPbGRIZWFwLCBPbGRJbmRleCwgU25hcHNob3RBbnksIE5VTEws IDAsIDAsCi0JCQkJCQkJCQlTT19OT05FKTsKKwkJaW5kZXhTY2FuID0gaW5kZXhfYmVnaW5zY2Fu KE9sZEhlYXAsIE9sZEluZGV4LCBmYWxzZSwKKwkJCQkJCQkJCVNuYXBzaG90QW55LCBOVUxMLCAw LCAwLCBTT19OT05FKTsKIAkJaW5kZXhfcmVzY2FuKGluZGV4U2NhbiwgTlVMTCwgMCwgTlVMTCwg MCk7CiAJfQogCWVsc2UKQEAgLTY5Niw3ICs2OTYsOCBAQCBoZWFwYW1fcmVsYXRpb25fY29weV9m b3JfY2x1c3RlcihSZWxhdGlvbiBPbGRIZWFwLCBSZWxhdGlvbiBOZXdIZWFwLAogCiAJCWlmIChp bmRleFNjYW4gIT0gTlVMTCkKIAkJewotCQkJaWYgKCFpbmRleF9nZXRuZXh0X3Nsb3QoaW5kZXhT Y2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgc2xvdCkpCisJCQlpZiAoIXRhYmxlX2luZGV4X2dl dG5leHRfc2xvdChpbmRleFNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLAorCQkJCQkJCQkJCSAg c2xvdCkpCiAJCQkJYnJlYWs7CiAKIAkJCS8qIFNpbmNlIHdlIHVzZWQgbm8gc2NhbiBrZXlzLCBz aG91bGQgbmV2ZXIgbmVlZCB0byByZWNoZWNrICovCkBAIC0yNTU2LDcgKzI1NTcsNiBAQCBzdGF0 aWMgY29uc3QgVGFibGVBbVJvdXRpbmUgaGVhcGFtX21ldGhvZHMgPSB7CiAJLmluZGV4X2ZldGNo X2JlZ2luID0gaGVhcGFtX2luZGV4X2ZldGNoX2JlZ2luLAogCS5pbmRleF9mZXRjaF9yZXNldCA9 IGhlYXBhbV9pbmRleF9mZXRjaF9yZXNldCwKIAkuaW5kZXhfZmV0Y2hfZW5kID0gaGVhcGFtX2lu ZGV4X2ZldGNoX2VuZCwKLQkuaW5kZXhfZmV0Y2hfdHVwbGUgPSBoZWFwYW1faW5kZXhfZmV0Y2hf dHVwbGUsCiAKIAkudHVwbGVfaW5zZXJ0ID0gaGVhcGFtX3R1cGxlX2luc2VydCwKIAkudHVwbGVf aW5zZXJ0X3NwZWN1bGF0aXZlID0gaGVhcGFtX3R1cGxlX2luc2VydF9zcGVjdWxhdGl2ZSwKQEAg LTI1NjYsNiArMjU2Niw3IEBAIHN0YXRpYyBjb25zdCBUYWJsZUFtUm91dGluZSBoZWFwYW1fbWV0 aG9kcyA9IHsKIAkudHVwbGVfdXBkYXRlID0gaGVhcGFtX3R1cGxlX3VwZGF0ZSwKIAkudHVwbGVf bG9jayA9IGhlYXBhbV90dXBsZV9sb2NrLAogCisJLmZldGNoX3RpZCA9IGhlYXBhbV9mZXRjaF90 aWQsCiAJLnR1cGxlX2ZldGNoX3Jvd192ZXJzaW9uID0gaGVhcGFtX2ZldGNoX3Jvd192ZXJzaW9u LAogCS50dXBsZV9nZXRfbGF0ZXN0X3RpZCA9IGhlYXBfZ2V0X2xhdGVzdF90aWQsCiAJLnR1cGxl X3RpZF92YWxpZCA9IGhlYXBhbV90dXBsZV90aWRfdmFsaWQsCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faW5kZXhzY2FuLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv aGVhcC9oZWFwYW1faW5kZXhzY2FuLmMKaW5kZXggMzNkMTRmMWRlLi5lMWJhMTlkOGEgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9pbmRleHNjYW4uYworKysgYi9z cmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faW5kZXhzY2FuLmMKQEAgLTE0LDMyICsxNCw4 NSBAQAogICovCiAjaW5jbHVkZSAicG9zdGdyZXMuaCIKIAorI2luY2x1ZGUgImFjY2Vzcy9hbWFw aS5oIgogI2luY2x1ZGUgImFjY2Vzcy9oZWFwYW0uaCIKICNpbmNsdWRlICJhY2Nlc3MvcmVsc2Nh bi5oIgorI2luY2x1ZGUgImFjY2Vzcy92aXNpYmlsaXR5bWFwLmgiCiAjaW5jbHVkZSAic3RvcmFn ZS9wcmVkaWNhdGUuaCIKKyNpbmNsdWRlICJ1dGlscy9wZ3N0YXRfaW50ZXJuYWwuaCIKIAogCitz dGF0aWMgYm9vbCBoZWFwYW1faW5kZXhfcGxhaW5fdHVwbGVfZ2V0bmV4dF9zbG90KEluZGV4U2Nh bkRlc2Mgc2NhbiwKKwkJCQkJCQkJCQkJCSAgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJ CQkJCQkJCQkgIFR1cGxlVGFibGVTbG90ICpzbG90KTsKK3N0YXRpYyBib29sIGhlYXBhbV9pbmRl eF9vbmx5X3R1cGxlX2dldG5leHRfc2xvdChJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCQkJ CQkgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJCQkJCQkJCQkgVHVwbGVUYWJsZVNsb3Qg KnNsb3QpOworCisvKgorICogU2ltcGxlLCBzaW5nbGUtc2hvdCBUSUQgbG9va3VwIGZvciBjb25z dHJhaW50IGVuZm9yY2VtZW50IGNvZGUgKHVuaXF1ZQorICogY2hlY2tzIGFuZCBzaW1pbGFyKS4g IFRoaXMgaXMgZXNzZW50aWFsbHkganVzdCBhIGhlYXBfaG90X3NlYXJjaF9idWZmZXIKKyAqIHdy YXBwZXIuCisgKgorICogVGhpcyBpc24ndCBhY3R1YWxseSByZWxhdGVkIHRvIGluZGV4IHNjYW5z LCBidXQga2VlcGluZyBpdCBuZWFyCisgKiBoZWFwX2hvdF9zZWFyY2hfYnVmZmVyIGNhbiBoZWxw IHRoZSBjb21waWxlciBnZW5lcmF0ZSBiZXR0ZXIgY29kZS4KKyAqLworYm9vbAoraGVhcGFtX2Zl dGNoX3RpZChSZWxhdGlvbiByZWwsIEl0ZW1Qb2ludGVyIHRpZCwgU25hcHNob3Qgc25hcHNob3Qs CisJCQkJIFR1cGxlVGFibGVTbG90ICpzbG90LCBib29sICphbGxfZGVhZCkKK3sKKwlCdWZmZXJI ZWFwVHVwbGVUYWJsZVNsb3QgKmJzbG90ID0gKEJ1ZmZlckhlYXBUdXBsZVRhYmxlU2xvdCAqKSBz bG90OworCUJ1ZmZlcgkJYnVmOworCWJvb2wJCWZvdW5kOworCisJQXNzZXJ0KFRUU19JU19CVUZG RVJUVVBMRShzbG90KSk7CisKKwlidWYgPSBSZWFkQnVmZmVyKHJlbCwgSXRlbVBvaW50ZXJHZXRC bG9ja051bWJlcih0aWQpKTsKKworCUxvY2tCdWZmZXIoYnVmLCBCVUZGRVJfTE9DS19TSEFSRSk7 CisJZm91bmQgPSBoZWFwX2hvdF9zZWFyY2hfYnVmZmVyKHRpZCwgcmVsLCBidWYsIHNuYXBzaG90 LAorCQkJCQkJCQkgICAmYnNsb3QtPmJhc2UudHVwZGF0YSwgYWxsX2RlYWQsIHRydWUpOworCWJz bG90LT5iYXNlLnR1cGRhdGEudF9zZWxmID0gKnRpZDsKKwlMb2NrQnVmZmVyKGJ1ZiwgQlVGRkVS X0xPQ0tfVU5MT0NLKTsKKworCWlmIChmb3VuZCkKKwl7CisJCXNsb3QtPnR0c190YWJsZU9pZCA9 IFJlbGF0aW9uR2V0UmVsaWQocmVsKTsKKwkJRXhlY1N0b3JlUGlubmVkQnVmZmVySGVhcFR1cGxl KCZic2xvdC0+YmFzZS50dXBkYXRhLCBzbG90LAorCQkJCQkJCQkJICAgYnVmKTsKKwl9CisJZWxz ZQorCQlSZWxlYXNlQnVmZmVyKGJ1Zik7CisKKwlyZXR1cm4gZm91bmQ7Cit9CisKIC8qIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQogICogSW5kZXggU2NhbiBDYWxsYmFja3MgZm9yIGhlYXAgQU0KICAqIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQogICovCiAKIEluZGV4RmV0Y2hUYWJsZURhdGEgKgotaGVhcGFtX2luZGV4X2Zl dGNoX2JlZ2luKFJlbGF0aW9uIHJlbCwgdWludDMyIGZsYWdzKQoraGVhcGFtX2luZGV4X2ZldGNo X2JlZ2luKEluZGV4U2NhbkRlc2Mgc2NhbiwgdWludDMyIGZsYWdzKQogewogCUluZGV4RmV0Y2hI ZWFwRGF0YSAqaHNjYW4gPSBwYWxsb2MwX29iamVjdChJbmRleEZldGNoSGVhcERhdGEpOwogCi0J aHNjYW4tPnhzX2Jhc2UucmVsID0gcmVsOwogCWhzY2FuLT54c19iYXNlLmZsYWdzID0gZmxhZ3M7 CiAJaHNjYW4tPnhzX2NidWYgPSBJbnZhbGlkQnVmZmVyOwogCWhzY2FuLT54c19ibGsgPSBJbnZh bGlkQmxvY2tOdW1iZXI7CiAJaHNjYW4tPnhzX3ZtYnVmZmVyID0gSW52YWxpZEJ1ZmZlcjsKIAor CS8qIFJlc29sdmUgd2hpY2ggZ2V0bmV4dF9zbG90IGltcGxlbWVudGF0aW9uIHRvIHVzZSBmb3Ig dGhpcyBzY2FuICovCisJaWYgKHNjYW4tPnhzX3dhbnRfaXR1cCkKKwkJc2Nhbi0+eHNfZ2V0bmV4 dF9zbG90ID0gaGVhcGFtX2luZGV4X29ubHlfdHVwbGVfZ2V0bmV4dF9zbG90OworCWVsc2UKKwkJ c2Nhbi0+eHNfZ2V0bmV4dF9zbG90ID0gaGVhcGFtX2luZGV4X3BsYWluX3R1cGxlX2dldG5leHRf c2xvdDsKKwogCXJldHVybiAmaHNjYW4tPnhzX2Jhc2U7CiB9CiAKIHZvaWQKLWhlYXBhbV9pbmRl eF9mZXRjaF9yZXNldChJbmRleEZldGNoVGFibGVEYXRhICpzY2FuKQoraGVhcGFtX2luZGV4X2Zl dGNoX3Jlc2V0KEluZGV4U2NhbkRlc2Mgc2NhbikKIHsKIAkvKgogCSAqIFJlc2V0cyBhcmUgYSBu by1vcC4KQEAgLTUxLDkgKzEwNCw5IEBAIGhlYXBhbV9pbmRleF9mZXRjaF9yZXNldChJbmRleEZl dGNoVGFibGVEYXRhICpzY2FuKQogfQogCiB2b2lkCi1oZWFwYW1faW5kZXhfZmV0Y2hfZW5kKElu ZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4pCitoZWFwYW1faW5kZXhfZmV0Y2hfZW5kKEluZGV4U2Nh bkRlc2Mgc2NhbikKIHsKLQlJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuID0gKEluZGV4RmV0Y2hI ZWFwRGF0YSAqKSBzY2FuOworCUluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4gPSAoSW5kZXhGZXRj aEhlYXBEYXRhICopIHNjYW4tPnhzX2hlYXBmZXRjaDsKIAogCS8qIGRyb3AgcGluIGlmIHRoZXJl J3MgYSBwaW5uZWQgaGVhcCBwYWdlICovCiAJaWYgKEJ1ZmZlcklzVmFsaWQoaHNjYW4tPnhzX2Ni dWYpKQpAQCAtMjI4LDE0ICsyODEsMTggQEAgaGVhcF9ob3Rfc2VhcmNoX2J1ZmZlcihJdGVtUG9p bnRlciB0aWQsIFJlbGF0aW9uIHJlbGF0aW9uLCBCdWZmZXIgYnVmZmVyLAogCXJldHVybiBmYWxz ZTsKIH0KIAotYm9vbAotaGVhcGFtX2luZGV4X2ZldGNoX3R1cGxlKHN0cnVjdCBJbmRleEZldGNo VGFibGVEYXRhICpzY2FuLAorLyoKKyAqIFRoaXMgaXMgdGhlIGd1dHMgb2YgaGVhcGFtX2luZGV4 X2ZldGNoX2hlYXBfaXRlbSwgd2hlcmUgaXQgYWN0dWFsbHkgZmV0Y2hlcworICogdGhlIGhlYXAg dHVwbGUgaXRzZWxmCisgKi8KK3N0YXRpYyBwZ19hdHRyaWJ1dGVfYWx3YXlzX2lubGluZSBib29s CitoZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGUoUmVsYXRpb24gcmVsLAorCQkJCQkJIEluZGV4RmV0 Y2hIZWFwRGF0YSAqaHNjYW4sCiAJCQkJCQkgSXRlbVBvaW50ZXIgdGlkLAogCQkJCQkJIFNuYXBz aG90IHNuYXBzaG90LAogCQkJCQkJIFR1cGxlVGFibGVTbG90ICpzbG90LAogCQkJCQkJIGJvb2wg KmhlYXBfY29udGludWUsIGJvb2wgKmFsbF9kZWFkKQogewotCUluZGV4RmV0Y2hIZWFwRGF0YSAq aHNjYW4gPSAoSW5kZXhGZXRjaEhlYXBEYXRhICopIHNjYW47CiAJQnVmZmVySGVhcFR1cGxlVGFi bGVTbG90ICpic2xvdCA9IChCdWZmZXJIZWFwVHVwbGVUYWJsZVNsb3QgKikgc2xvdDsKIAlib29s CQlnb3RfaGVhcF90dXBsZTsKIApAQCAtMjUyLDEzICszMDksMTIgQEAgaGVhcGFtX2luZGV4X2Zl dGNoX3R1cGxlKHN0cnVjdCBJbmRleEZldGNoVGFibGVEYXRhICpzY2FuLAogCQlpZiAoQnVmZmVy SXNWYWxpZChoc2Nhbi0+eHNfY2J1ZikpCiAJCQlSZWxlYXNlQnVmZmVyKGhzY2FuLT54c19jYnVm KTsKIAotCQloc2Nhbi0+eHNfY2J1ZiA9IFJlYWRCdWZmZXIoaHNjYW4tPnhzX2Jhc2UucmVsLCBo c2Nhbi0+eHNfYmxrKTsKKwkJaHNjYW4tPnhzX2NidWYgPSBSZWFkQnVmZmVyKHJlbCwgaHNjYW4t PnhzX2Jsayk7CiAKIAkJLyoKIAkJICogUHJ1bmUgcGFnZSB3aGVuIGl0IGlzIHBpbm5lZCBmb3Ig dGhlIGZpcnN0IHRpbWUKIAkJICovCi0JCWhlYXBfcGFnZV9wcnVuZV9vcHQoaHNjYW4tPnhzX2Jh c2UucmVsLCBoc2Nhbi0+eHNfY2J1ZiwKLQkJCQkJCQkmaHNjYW4tPnhzX3ZtYnVmZmVyLAorCQlo ZWFwX3BhZ2VfcHJ1bmVfb3B0KHJlbCwgaHNjYW4tPnhzX2NidWYsICZoc2Nhbi0+eHNfdm1idWZm ZXIsCiAJCQkJCQkJaHNjYW4tPnhzX2Jhc2UuZmxhZ3MgJiBTT19ISU5UX1JFTF9SRUFEX09OTFkp OwogCX0KIApAQCAtMjY4LDcgKzMyNCw3IEBAIGhlYXBhbV9pbmRleF9mZXRjaF90dXBsZShzdHJ1 Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbiwKIAkvKiBPYnRhaW4gc2hhcmUtbG9jayBvbiB0 aGUgYnVmZmVyIHNvIHdlIGNhbiBleGFtaW5lIHZpc2liaWxpdHkgKi8KIAlMb2NrQnVmZmVyKGhz Y2FuLT54c19jYnVmLCBCVUZGRVJfTE9DS19TSEFSRSk7CiAJZ290X2hlYXBfdHVwbGUgPSBoZWFw X2hvdF9zZWFyY2hfYnVmZmVyKHRpZCwKLQkJCQkJCQkJCQkJaHNjYW4tPnhzX2Jhc2UucmVsLAor CQkJCQkJCQkJCQlyZWwsCiAJCQkJCQkJCQkJCWhzY2FuLT54c19jYnVmLAogCQkJCQkJCQkJCQlz bmFwc2hvdCwKIAkJCQkJCQkJCQkJJmJzbG90LT5iYXNlLnR1cGRhdGEsCkBAIC0yODUsNyArMzQx LDcgQEAgaGVhcGFtX2luZGV4X2ZldGNoX3R1cGxlKHN0cnVjdCBJbmRleEZldGNoVGFibGVEYXRh ICpzY2FuLAogCQkgKi8KIAkJKmhlYXBfY29udGludWUgPSAhSXNNVkNDTGlrZVNuYXBzaG90KHNu YXBzaG90KTsKIAotCQlzbG90LT50dHNfdGFibGVPaWQgPSBSZWxhdGlvbkdldFJlbGlkKHNjYW4t PnJlbCk7CisJCXNsb3QtPnR0c190YWJsZU9pZCA9IFJlbGF0aW9uR2V0UmVsaWQocmVsKTsKIAkJ RXhlY1N0b3JlQnVmZmVySGVhcFR1cGxlKCZic2xvdC0+YmFzZS50dXBkYXRhLCBzbG90LCBoc2Nh bi0+eHNfY2J1Zik7CiAJfQogCWVsc2UKQEAgLTI5NiwzICszNTIsMTk2IEBAIGhlYXBhbV9pbmRl eF9mZXRjaF90dXBsZShzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbiwKIAogCXJldHVy biBnb3RfaGVhcF90dXBsZTsKIH0KKworLyoKKyAqIEdldCB0aGUgc2NhbidzIG5leHQgaGVhcCBp dGVtLgorICoKKyAqIFRoZSByZXN1bHQgaXMgYSB2aXNpYmxlIGhlYXAgdHVwbGUgYXNzb2NpYXRl ZCB3aXRoIHRoZSBpbmRleCBUSUQgbW9zdAorICogcmVjZW50bHkgZmV0Y2hlZCBieSBvdXIgY2Fs bGVyIGluIHNjYW4tPnhzX2hlYXB0aWQsIG9yIE5VTEwgaWYgbm8gbW9yZQorICogbWF0Y2hpbmcg dHVwbGVzIGV4aXN0LiAgKFRoZXJlIGNhbiBiZSBtb3JlIHRoYW4gb25lIG1hdGNoaW5nIHR1cGxl IGJlY2F1c2UKKyAqIG9mIEhPVCBjaGFpbnMsIGFsdGhvdWdoIHdoZW4gdXNpbmcgYW4gTVZDQyBz bmFwc2hvdCBpdCBzaG91bGQgYmUgaW1wb3NzaWJsZQorICogZm9yIG1vcmUgdGhhbiBvbmUgc3Vj aCB0dXBsZSB0byBleGlzdC4pCisgKgorICogT24gc3VjY2VzcywgdGhlIGJ1ZmZlciBjb250YWlu aW5nIHRoZSBoZWFwIHR1cCBpcyBwaW5uZWQuICBUaGUgcGluIG11c3QgYmUKKyAqIGRyb3BwZWQg ZWxzZXdoZXJlLgorICovCitzdGF0aWMgcGdfYXR0cmlidXRlX2Fsd2F5c19pbmxpbmUgYm9vbAor aGVhcGFtX2luZGV4X2ZldGNoX2hlYXBfaXRlbShJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4RmV0 Y2hIZWFwRGF0YSAqaHNjYW4sCisJCQkJCQkJIFR1cGxlVGFibGVTbG90ICpzbG90LCBib29sICpo ZWFwX2NvbnRpbnVlKQoreworCWJvb2wJCWFsbF9kZWFkID0gZmFsc2U7CisJYm9vbAkJZm91bmQ7 CisKKwlmb3VuZCA9IGhlYXBhbV9pbmRleF9mZXRjaF90dXBsZShzY2FuLT5oZWFwUmVsYXRpb24s IGhzY2FuLAorCQkJCQkJCQkJICZzY2FuLT54c19oZWFwdGlkLAorCQkJCQkJCQkJIHNjYW4tPnhz X3NuYXBzaG90LCBzbG90LAorCQkJCQkJCQkJIGhlYXBfY29udGludWUsICZhbGxfZGVhZCk7CisK KwlpZiAoZm91bmQpCisJCXBnc3RhdF9jb3VudF9oZWFwX2ZldGNoKHNjYW4tPmluZGV4UmVsYXRp b24pOworCisJLyoKKwkgKiBJZiB3ZSBzY2FubmVkIGEgd2hvbGUgSE9UIGNoYWluIGFuZCBmb3Vu ZCBvbmx5IGRlYWQgdHVwbGVzLCB0ZWxsIGluZGV4CisJICogQU0gdG8ga2lsbCBpdHMgZW50cnkg Zm9yIHRoYXQgVElEICh0aGlzIHdpbGwgdGFrZSBlZmZlY3QgaW4gdGhlIG5leHQKKwkgKiBhbWdl dHR1cGxlIGNhbGwsIGluIGluZGV4X2dldG5leHRfdGlkKS4gIFdlIGRvIG5vdCBkbyB0aGlzIHdo ZW4gaW4KKwkgKiByZWNvdmVyeSBiZWNhdXNlIGl0IG1heSB2aW9sYXRlIE1WQ0MgdG8gZG8gc28u ICBTZWUgY29tbWVudHMgaW4KKwkgKiBSZWxhdGlvbkdldEluZGV4U2NhbigpLgorCSAqLworCWlm ICghc2Nhbi0+eGFjdFN0YXJ0ZWRJblJlY292ZXJ5KQorCQlzY2FuLT5raWxsX3ByaW9yX3R1cGxl ID0gYWxsX2RlYWQ7CisKKwlyZXR1cm4gZm91bmQ7Cit9CisKKy8qCisgKiBDb21tb24gaW1wbGVt ZW50YXRpb24gZm9yIGJvdGggaGVhcGFtX2luZGV4XypfZ2V0bmV4dF9zbG90IHZhcmlhbnRzLgor ICoKKyAqIFRoZSByZXN1bHQgaXMgdHJ1ZSBpZiBhIHR1cGxlIHNhdGlzZnlpbmcgdGhlIHNjYW4g a2V5cyBhbmQgdGhlIHNuYXBzaG90IHdhcworICogZm91bmQsIGZhbHNlIG90aGVyd2lzZS4gIFRo ZSB0dXBsZSBpcyBzdG9yZWQgaW4gdGhlIHNwZWNpZmllZCBzbG90LgorICoKKyAqIE9uIHN1Y2Nl c3MsIHJlc291cmNlcyAobGlrZSBidWZmZXIgcGlucykgYXJlIGxpa2VseSB0byBiZSBoZWxkLCBh bmQgd2lsbCBiZQorICogZHJvcHBlZCBieSBhIGZ1dHVyZSBjYWxsIGhlcmUgKG9yIGJ5IGEgbGF0 ZXIgY2FsbCB0byBoZWFwYW1faW5kZXhfZmV0Y2hfZW5kCisgKiB0aHJvdWdoIGluZGV4X2VuZHNj YW4pLgorICoKKyAqIFRoZSBpbmRleF9vbmx5IHBhcmFtZXRlciBpcyBhIGNvbXBpbGUtdGltZSBj b25zdGFudCBhdCBlYWNoIGNhbGwgc2l0ZSwKKyAqIGFsbG93aW5nIHRoZSBjb21waWxlciB0byBz cGVjaWFsaXplIHRoZSBjb2RlIGZvciBlYWNoIHZhcmlhbnQuCisgKi8KK3N0YXRpYyBwZ19hdHRy aWJ1dGVfYWx3YXlzX2lubGluZSBib29sCitoZWFwYW1faW5kZXhfZ2V0bmV4dF9zbG90KEluZGV4 U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJCQkgIFR1cGxlVGFi bGVTbG90ICpzbG90LCBib29sIGluZGV4X29ubHkpCit7CisJSW5kZXhGZXRjaEhlYXBEYXRhICpo c2NhbiA9IChJbmRleEZldGNoSGVhcERhdGEgKikgc2Nhbi0+eHNfaGVhcGZldGNoOworCWJvb2wJ ICAgKmhlYXBfY29udGludWUgPSAmc2Nhbi0+eHNfaGVhcF9jb250aW51ZTsKKwlib29sCQlhbGxf dmlzaWJsZSA9IGZhbHNlOworCUJsb2NrTnVtYmVyIGxhc3RfdmlzaXRlZF9ibG9jayA9IEludmFs aWRCbG9ja051bWJlcjsKKwl1aW50OAkJbl92aXNpdGVkX3BhZ2VzID0gMDsKKwlJdGVtUG9pbnRl ciB0aWQgPSBOVUxMOworCisJZm9yICg7OykKKwl7CisJCWlmICghKmhlYXBfY29udGludWUpCisJ CXsKKwkJCS8qIEdldCB0aGUgbmV4dCBUSUQgZnJvbSB0aGUgaW5kZXggKi8KKwkJCXRpZCA9IGlu ZGV4X2dldG5leHRfdGlkKHNjYW4sIGRpcmVjdGlvbik7CisKKwkJCS8qIElmIHdlJ3JlIG91dCBv ZiBpbmRleCBlbnRyaWVzLCB3ZSdyZSBkb25lICovCisJCQlpZiAodGlkID09IE5VTEwpCisJCQkJ YnJlYWs7CisKKwkJCS8qIEZvciBpbmRleC1vbmx5IHNjYW5zLCBjaGVjayB0aGUgdmlzaWJpbGl0 eSBtYXAgKi8KKwkJCWlmIChpbmRleF9vbmx5KQorCQkJCWFsbF92aXNpYmxlID0gVk1fQUxMX1ZJ U0lCTEUoc2Nhbi0+aGVhcFJlbGF0aW9uLAorCQkJCQkJCQkJCQkgSXRlbVBvaW50ZXJHZXRCbG9j a051bWJlcih0aWQpLAorCQkJCQkJCQkJCQkgJmhzY2FuLT54c192bWJ1ZmZlcik7CisJCX0KKwor CQlBc3NlcnQoSXRlbVBvaW50ZXJJc1ZhbGlkKCZzY2FuLT54c19oZWFwdGlkKSk7CisKKwkJaWYg KGluZGV4X29ubHkpCisJCXsKKwkJCS8qCisJCQkgKiBXZSBjYW4gc2tpcCB0aGUgaGVhcCBmZXRj aCBpZiB0aGUgVElEIHJlZmVyZW5jZXMgYSBoZWFwIHBhZ2Ugb24KKwkJCSAqIHdoaWNoIGFsbCB0 dXBsZXMgYXJlIGtub3duIHZpc2libGUgdG8gZXZlcnlib2R5LiAgSW4gYW55IGNhc2UsCisJCQkg KiB3ZSdsbCB1c2UgdGhlIGluZGV4IHR1cGxlIG5vdCB0aGUgaGVhcCB0dXBsZSBhcyB0aGUgZGF0 YQorCQkJICogc291cmNlLgorCQkJICovCisJCQlpZiAoIWFsbF92aXNpYmxlKQorCQkJeworCQkJ CS8qCisJCQkJICogUmF0cywgd2UgaGF2ZSB0byB2aXNpdCB0aGUgaGVhcCB0byBjaGVjayB2aXNp YmlsaXR5LgorCQkJCSAqLworCQkJCWlmIChzY2FuLT5pbnN0cnVtZW50KQorCQkJCQlzY2FuLT5p bnN0cnVtZW50LT5udGFibGV0dXBsZWZldGNoZXMrKzsKKworCQkJCWlmICghaGVhcGFtX2luZGV4 X2ZldGNoX2hlYXBfaXRlbShzY2FuLCBoc2Nhbiwgc2xvdCwKKwkJCQkJCQkJCQkJCSAgaGVhcF9j b250aW51ZSkpCisJCQkJeworCQkJCQkvKgorCQkJCQkgKiBObyB2aXNpYmxlIHR1cGxlLiAgSWYg Y2FsbGVyIHNldCBhIHZpc2l0ZWQtcGFnZXMgbGltaXQKKwkJCQkJICogKG9ubHkgc2VsZnVuY3Mu YyBkb2VzIHRoaXMpLCBjb3VudCBkaXN0aW5jdCBoZWFwIHBhZ2VzCisJCQkJCSAqIGFuZCBnaXZl IHVwIG9uY2Ugd2UndmUgdmlzaXRlZCB0b28gbWFueS4KKwkJCQkJICovCisJCQkJCWlmICh1bmxp a2VseShzY2FuLT54c192aXNpdGVkX3BhZ2VzX2xpbWl0ID4gMCkpCisJCQkJCXsKKwkJCQkJCUFz c2VydChoc2Nhbi0+eHNfYmxrID09IEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKSk7CisK KwkJCQkJCWlmIChoc2Nhbi0+eHNfYmxrICE9IGxhc3RfdmlzaXRlZF9ibG9jaykKKwkJCQkJCXsK KwkJCQkJCQlsYXN0X3Zpc2l0ZWRfYmxvY2sgPSBoc2Nhbi0+eHNfYmxrOworCQkJCQkJCWlmICgr K25fdmlzaXRlZF9wYWdlcyA+IHNjYW4tPnhzX3Zpc2l0ZWRfcGFnZXNfbGltaXQpCisJCQkJCQkJ CXJldHVybiBmYWxzZTsJLyogZ2l2ZSB1cCAqLworCQkJCQkJfQorCQkJCQl9CisJCQkJCWNvbnRp bnVlOwkvKiBubyB2aXNpYmxlIHR1cGxlLCB0cnkgbmV4dCBpbmRleCBlbnRyeSAqLworCQkJCX0K KworCQkJCS8qIFdlIGRvbid0IGFjdHVhbGx5IG5lZWQgdGhlIGhlYXAgdHVwbGUgZm9yIGFueXRo aW5nICovCisJCQkJRXhlY0NsZWFyVHVwbGUoc2xvdCk7CisKKwkJCQkvKgorCQkJCSAqIE9ubHkg TVZDQyBzbmFwc2hvdHMgYXJlIHN1cHBvcnRlZCB3aXRoIHN0YW5kYXJkIGluZGV4LW9ubHkKKwkJ CQkgKiBzY2Fucywgc28gdGhlcmUgc2hvdWxkIGJlIG5vIG5lZWQgdG8ga2VlcCBmb2xsb3dpbmcg dGhlIEhPVAorCQkJCSAqIGNoYWluIG9uY2UgYSB2aXNpYmxlIGVudHJ5IGhhcyBiZWVuIGZvdW5k LiAgT3RoZXIgY2FsbGVycworCQkJCSAqIChjdXJyZW50bHkgb25seSBzZWxmdW5jcy5jKSB1c2Ug U25hcHNob3ROb25WYWN1dW1hYmxlLCBhbmQKKwkJCQkgKiB3YW50IHVzIHRvIGFzc3VtZSB0aGF0 IGp1c3QgaGF2aW5nIG9uZSB2aXNpYmxlIHR1cGxlIGluIHRoZQorCQkJCSAqIGhvdCBjaGFpbiBp cyBhbHdheXMgZ29vZCBlbm91Z2guCisJCQkJICovCisJCQkJQXNzZXJ0KCEoKmhlYXBfY29udGlu dWUgJiYgSXNNVkNDU25hcHNob3Qoc2Nhbi0+eHNfc25hcHNob3QpKSk7CisJCQl9CisJCQllbHNl CisJCQl7CisJCQkJLyoKKwkJCQkgKiBXZSBkaWRuJ3QgYWNjZXNzIHRoZSBoZWFwLCBzbyB3ZSds bCBuZWVkIHRvIHRha2UgYQorCQkJCSAqIHByZWRpY2F0ZSBsb2NrIGV4cGxpY2l0bHksIGFzIGlm IHdlIGhhZC4gIEZvciBub3cgd2UgZG8KKwkJCQkgKiB0aGF0IGF0IHBhZ2UgbGV2ZWwuCisJCQkJ ICovCisJCQkJUHJlZGljYXRlTG9ja1BhZ2Uoc2Nhbi0+aGVhcFJlbGF0aW9uLAorCQkJCQkJCQkg IEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKSwKKwkJCQkJCQkJICBzY2FuLT54c19zbmFw c2hvdCk7CisJCQl9CisKKwkJCS8qCisJCQkgKiBSZXR1cm4gbWF0Y2hpbmcgaW5kZXggdHVwbGUg bm93IHNldCBpbiBzY2FuLT54c19pdHVwIChvciByZXR1cm4KKwkJCSAqIG1hdGNoaW5nIGhlYXAg dHVwbGUgbm93IHNldCBpbiBzY2FuLT54c19oaXR1cCkKKwkJCSAqLworCQkJcmV0dXJuIHRydWU7 CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKgorCQkJICogRmV0Y2ggdGhlIG5leHQgKG9yIG9ubHkp IHZpc2libGUgaGVhcCB0dXBsZSBmb3IgdGhpcyBpbmRleAorCQkJICogZW50cnkuICBJZiB3ZSBk b24ndCBmaW5kIGFueXRoaW5nLCBsb29wIGFyb3VuZCBhbmQgZ3JhYiB0aGUKKwkJCSAqIG5leHQg VElEIGZyb20gdGhlIGluZGV4LgorCQkJICovCisJCQlpZiAoaGVhcGFtX2luZGV4X2ZldGNoX2hl YXBfaXRlbShzY2FuLCBoc2Nhbiwgc2xvdCwKKwkJCQkJCQkJCQkJIGhlYXBfY29udGludWUpKQor CQkJCXJldHVybiB0cnVlOworCQl9CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCisvKiB4c19n ZXRuZXh0X3Nsb3QgY2FsbGJhY2s6IGFtZ2V0dHVwbGUsIHBsYWluIGluZGV4IHNjYW4gKi8KK3N0 YXRpYyBwZ19hdHRyaWJ1dGVfaG90IGJvb2wKK2hlYXBhbV9pbmRleF9wbGFpbl90dXBsZV9nZXRu ZXh0X3Nsb3QoSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJICBTY2FuRGlyZWN0aW9uIGRp cmVjdGlvbiwKKwkJCQkJCQkJCSAgVHVwbGVUYWJsZVNsb3QgKnNsb3QpCit7CisJQXNzZXJ0KCFz Y2FuLT54c193YW50X2l0dXApOworCUFzc2VydChzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRh bS0+YW1nZXR0dXBsZSAhPSBOVUxMKTsKKworCXJldHVybiBoZWFwYW1faW5kZXhfZ2V0bmV4dF9z bG90KHNjYW4sIGRpcmVjdGlvbiwgc2xvdCwgZmFsc2UpOworfQorCisvKiB4c19nZXRuZXh0X3Ns b3QgY2FsbGJhY2s6IGFtZ2V0dHVwbGUsIGluZGV4LW9ubHkgc2NhbiAqLworc3RhdGljIHBnX2F0 dHJpYnV0ZV9ob3QgYm9vbAoraGVhcGFtX2luZGV4X29ubHlfdHVwbGVfZ2V0bmV4dF9zbG90KElu ZGV4U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCQkJCSBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJ CQkJCQkJCSBUdXBsZVRhYmxlU2xvdCAqc2xvdCkKK3sKKwlBc3NlcnQoc2Nhbi0+eHNfd2FudF9p dHVwKTsKKwlBc3NlcnQoc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtZ2V0dHVwbGUg IT0gTlVMTCk7CisKKwlyZXR1cm4gaGVhcGFtX2luZGV4X2dldG5leHRfc2xvdChzY2FuLCBkaXJl Y3Rpb24sIHNsb3QsIHRydWUpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hl YXAvdmlzaWJpbGl0eW1hcC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvdmlzaWJpbGl0eW1h cC5jCmluZGV4IDRmZDQ3MDcwMi4uNGJhOWY0OGU5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9h Y2Nlc3MvaGVhcC92aXNpYmlsaXR5bWFwLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAv dmlzaWJpbGl0eW1hcC5jCkBAIC0zMTMsNyArMzEzLDMyIEBAIHZpc2liaWxpdHltYXBfc2V0KEJs b2NrTnVtYmVyIGhlYXBCbGssCiAgKiBzaW5jZSB3ZSBkb24ndCBsb2NrIHRoZSB2aXNpYmlsaXR5 IG1hcCBwYWdlIGVpdGhlciwgaXQncyBldmVuIHBvc3NpYmxlIHRoYXQKICAqIHNvbWVvbmUgZWxz ZSBjb3VsZCBoYXZlIGNoYW5nZWQgdGhlIGJpdCBqdXN0IGJlZm9yZSB3ZSBsb29rIGF0IGl0LCBi dXQgeWV0CiAgKiB3ZSBtaWdodCBzZWUgdGhlIG9sZCB2YWx1ZS4gIEl0IGlzIHRoZSBjYWxsZXIn cyByZXNwb25zaWJpbGl0eSB0byBkZWFsIHdpdGgKLSAqIGFsbCBjb25jdXJyZW5jeSBpc3N1ZXMh CisgKiBhbGwgY29uY3VycmVuY3kgaXNzdWVzISAgSW4gcHJhY3RpY2UgaXQgY2FuJ3QgYmUgc3Rh bGUgZW5vdWdoIHRvIG1hdHRlciBmb3IKKyAqIHRoZSBwcmltYXJ5IHVzZSBjYXNlOiBpbmRleC1v bmx5IHNjYW5zIHRoYXQgY2hlY2sgd2hldGhlciBhIGhlYXAgZmV0Y2ggY2FuCisgKiBiZSBza2lw cGVkLgorICoKKyAqIFRoZSBhcmd1bWVudCBmb3Igd2h5IGl0IGNhbid0IGJlIHN0YWxlIGVub3Vn aCB0byBtYXR0ZXIgZm9yIHRoZSBwcmltYXJ5IHVzZQorICogY2FzZSBpcyBhcyBmb2xsb3dzOgor ICoKKyAqIEluc2VydHM6IHdlIG5lZWQgdG8gZGV0ZWN0IHRoYXQgYSBWTSBiaXQgd2FzIGNsZWFy ZWQgYnkgYW4gaW5zZXJ0IHJpZ2h0CisgKiBhd2F5LCBiZWNhdXNlIHRoZSBuZXcgdHVwbGUgaXMg cHJlc2VudCBpbiB0aGUgaW5kZXggYnV0IG5vdCB5ZXQgdmlzaWJsZS4KKyAqIFJlYWRpbmcgdGhl IFRJRCBmcm9tIHRoZSBpbmRleCBwYWdlICh1bmRlciBhIHNoYXJlZCBsb2NrIG9uIHRoZSBpbmRl eAorICogYnVmZmVyKSBpcyBzZXJpYWxpemVkIHdpdGggdGhlIGluc2VydGlvbiBvZiB0aGUgVElE IGludG8gdGhlIGluZGV4ICh1bmRlcgorICogYW4gZXhjbHVzaXZlIGxvY2sgb24gdGhlIHNhbWUg aW5kZXggYnVmZmVyKS4gIEJlY2F1c2UgdGhlIFZNIGJpdCBpcyBjbGVhcmVkCisgKiBiZWZvcmUg dGhlIGluZGV4IGlzIHVwZGF0ZWQsIGFuZCBsb2NraW5nL3VubG9ja2luZyBvZiB0aGUgaW5kZXgg cGFnZSBhY3RzCisgKiBhcyBhIGZ1bGwgbWVtb3J5IGJhcnJpZXIsIHdlIGFyZSBzdXJlIHRvIHNl ZSB0aGUgY2xlYXJlZCBiaXQgd2hlbmV2ZXIgd2UKKyAqIHNlZSBhIHJlY2VudGx5LWluc2VydGVk IFRJRC4KKyAqCisgKiBEZWxldGVzOiB0aGUgY2xlYXJpbmcgb2YgdGhlIFZNIGJpdCBieSBhIGRl bGV0ZSBpcyBOT1Qgc2VyaWFsaXplZCB3aXRoIHRoZQorICogaW5kZXggcGFnZSBhY2Nlc3MsIGJl Y2F1c2UgZGVsZXRlcyBkbyBub3QgdXBkYXRlIHRoZSBpbmRleCBwYWdlIChvbmx5CisgKiBWQUNV VU0gcmVtb3ZlcyB0aGUgaW5kZXggVElEKS4gIFNvIHdlIG1heSBzZWUgYSBzaWduaWZpY2FudGx5 IHN0YWxlIHZhbHVlLgorICogSG93ZXZlciwgd2UgZG9uJ3QgbmVlZCB0byBkZXRlY3QgdGhlIGRl bGV0ZSByaWdodCBhd2F5LCBiZWNhdXNlIHRoZSB0dXBsZQorICogcmVtYWlucyB2aXNpYmxlIHVu dGlsIHRoZSBkZWxldGluZyB0cmFuc2FjdGlvbiBjb21taXRzIG9yIHRoZSBzdGF0ZW1lbnQKKyAq IGVuZHMgKGlmIGl0J3Mgb3VyIG93biB0cmFuc2FjdGlvbikuICBJbiBlaXRoZXIgY2FzZSwgdGhl IGxvY2sgb24gdGhlIFZNCisgKiBidWZmZXIgd2lsbCBoYXZlIGJlZW4gcmVsZWFzZWQgKGFjdGlu ZyBhcyBhIHdyaXRlIGJhcnJpZXIpIGFmdGVyIGNsZWFyaW5nCisgKiB0aGUgYml0LiAgQW5kIGZv ciB1cyB0byBoYXZlIGEgc25hcHNob3QgdGhhdCBpbmNsdWRlcyB0aGUgZGVsZXRpbmcKKyAqIHRy YW5zYWN0aW9uIChtYWtpbmcgdGhlIHR1cGxlIGludmlzaWJsZSksIHdlIG11c3QgaGF2ZSBhY3F1 aXJlZAorICogUHJvY0FycmF5TG9jayBhZnRlciB0aGF0IHRpbWUsIGFjdGluZyBhcyBhIHJlYWQg YmFycmllci4KICAqLwogdWludDgKIHZpc2liaWxpdHltYXBfZ2V0X3N0YXR1cyhSZWxhdGlvbiBy ZWwsIEJsb2NrTnVtYmVyIGhlYXBCbGssIEJ1ZmZlciAqdm1idWYpCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9n ZW5hbS5jCmluZGV4IDE0MDg5ODljNS4uYWNjOWYzZTZhIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2Vu YW0uYwpAQCAtMTI2LDYgKzEyNiw4IEBAIFJlbGF0aW9uR2V0SW5kZXhTY2FuKFJlbGF0aW9uIGlu ZGV4UmVsYXRpb24sIGludCBua2V5cywgaW50IG5vcmRlcmJ5cykKIAlzY2FuLT54c19oaXR1cCA9 IE5VTEw7CiAJc2Nhbi0+eHNfaGl0dXBkZXNjID0gTlVMTDsKIAorCXNjYW4tPnhzX3Zpc2l0ZWRf cGFnZXNfbGltaXQgPSAwOworCiAJcmV0dXJuIHNjYW47CiB9CiAKQEAgLTQ1NCw3ICs0NTYsNyBA QCBzeXN0YWJsZV9iZWdpbnNjYW4oUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogCQkJCWVsb2coRVJS T1IsICJjb2x1bW4gaXMgbm90IGluIGluZGV4Iik7CiAJCX0KIAotCQlzeXNzY2FuLT5pc2NhbiA9 IGluZGV4X2JlZ2luc2NhbihoZWFwUmVsYXRpb24sIGlyZWwsCisJCXN5c3NjYW4tPmlzY2FuID0g aW5kZXhfYmVnaW5zY2FuKGhlYXBSZWxhdGlvbiwgaXJlbCwgZmFsc2UsCiAJCQkJCQkJCQkJIHNu YXBzaG90LCBOVUxMLCBua2V5cywgMCwKIAkJCQkJCQkJCQkgU09fTk9ORSk7CiAJCWluZGV4X3Jl c2NhbihzeXNzY2FuLT5pc2NhbiwgaWR4a2V5LCBua2V5cywgTlVMTCwgMCk7CkBAIC01MTgsNyAr NTIwLDggQEAgc3lzdGFibGVfZ2V0bmV4dChTeXNTY2FuRGVzYyBzeXNzY2FuKQogCiAJaWYgKHN5 c3NjYW4tPmlyZWwpCiAJewotCQlpZiAoaW5kZXhfZ2V0bmV4dF9zbG90KHN5c3NjYW4tPmlzY2Fu LCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgc3lzc2Nhbi0+c2xvdCkpCisJCWlmICh0YWJsZV9pbmRl eF9nZXRuZXh0X3Nsb3Qoc3lzc2Nhbi0+aXNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLAorCQkJ CQkJCQkJIHN5c3NjYW4tPnNsb3QpKQogCQl7CiAJCQlib29sCQlzaG91bGRGcmVlOwogCkBAIC03 MTYsNyArNzE5LDcgQEAgc3lzdGFibGVfYmVnaW5zY2FuX29yZGVyZWQoUmVsYXRpb24gaGVhcFJl bGF0aW9uLAogCWlmIChUcmFuc2FjdGlvbklkSXNWYWxpZChDaGVja1hpZEFsaXZlKSkKIAkJYnN5 c3NjYW4gPSB0cnVlOwogCi0Jc3lzc2Nhbi0+aXNjYW4gPSBpbmRleF9iZWdpbnNjYW4oaGVhcFJl bGF0aW9uLCBpbmRleFJlbGF0aW9uLAorCXN5c3NjYW4tPmlzY2FuID0gaW5kZXhfYmVnaW5zY2Fu KGhlYXBSZWxhdGlvbiwgaW5kZXhSZWxhdGlvbiwgZmFsc2UsCiAJCQkJCQkJCQkgc25hcHNob3Qs IE5VTEwsIG5rZXlzLCAwLAogCQkJCQkJCQkJIFNPX05PTkUpOwogCWluZGV4X3Jlc2NhbihzeXNz Y2FuLT5pc2NhbiwgaWR4a2V5LCBua2V5cywgTlVMTCwgMCk7CkBAIC03MzYsNyArNzM5LDcgQEAg c3lzdGFibGVfZ2V0bmV4dF9vcmRlcmVkKFN5c1NjYW5EZXNjIHN5c3NjYW4sIFNjYW5EaXJlY3Rp b24gZGlyZWN0aW9uKQogCUhlYXBUdXBsZQlodHVwID0gTlVMTDsKIAogCUFzc2VydChzeXNzY2Fu LT5pcmVsKTsKLQlpZiAoaW5kZXhfZ2V0bmV4dF9zbG90KHN5c3NjYW4tPmlzY2FuLCBkaXJlY3Rp b24sIHN5c3NjYW4tPnNsb3QpKQorCWlmICh0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Qoc3lzc2Nh bi0+aXNjYW4sIGRpcmVjdGlvbiwgc3lzc2Nhbi0+c2xvdCkpCiAJCWh0dXAgPSBFeGVjRmV0Y2hT bG90SGVhcFR1cGxlKHN5c3NjYW4tPnNsb3QsIGZhbHNlLCBOVUxMKTsKIAogCS8qIFNlZSBub3Rl cyBpbiBzeXN0YWJsZV9nZXRuZXh0ICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mv aW5kZXgvaW5kZXhhbS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYwppbmRl eCAyMzI4OGE0ZjkuLjNmYWM0YzMwZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2lu ZGV4L2luZGV4YW0uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jCkBA IC0yNCw5ICsyNCw3IEBACiAgKgkJaW5kZXhfcGFyYWxsZWxzY2FuX2luaXRpYWxpemUgLSBpbml0 aWFsaXplIHBhcmFsbGVsIHNjYW4KICAqCQlpbmRleF9wYXJhbGxlbHJlc2NhbiAgLSAocmUpc3Rh cnQgYSBwYXJhbGxlbCBzY2FuIG9mIGFuIGluZGV4CiAgKgkJaW5kZXhfYmVnaW5zY2FuX3BhcmFs bGVsIC0gam9pbiBwYXJhbGxlbCBpbmRleCBzY2FuCi0gKgkJaW5kZXhfZ2V0bmV4dF90aWQJLSBn ZXQgdGhlIG5leHQgVElEIGZyb20gYSBzY2FuCi0gKgkJaW5kZXhfZmV0Y2hfaGVhcAkJLSBnZXQg dGhlIHNjYW4ncyBuZXh0IGhlYXAgdHVwbGUKLSAqCQlpbmRleF9nZXRuZXh0X3Nsb3QJLSBnZXQg dGhlIG5leHQgdHVwbGUgZnJvbSBhIHNjYW4KKyAqCQlpbmRleF9nZXRuZXh0X3RpZAktIGFtZ2V0 dHVwbGUgdGFibGUgQU0gaGVscGVyIHJvdXRpbmUKICAqCQlpbmRleF9nZXRiaXRtYXAgLSBnZXQg YWxsIHR1cGxlcyBmcm9tIGEgc2NhbgogICoJCWluZGV4X2J1bGtfZGVsZXRlCS0gYnVsayBkZWxl dGlvbiBvZiBpbmRleCB0dXBsZXMKICAqCQlpbmRleF92YWN1dW1fY2xlYW51cAktIHBvc3QtZGVs ZXRpb24gY2xlYW51cCBvZiBhbiBpbmRleApAQCAtMTA1LDkgKzEwMyw2IEBAIGRvIHsgXAogCQkJ IENwcEFzU3RyaW5nKHBuYW1lKSwgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoc2Nhbi0+aW5kZXhS ZWxhdGlvbikpOyBcCiB9IHdoaWxlKDApCiAKLXN0YXRpYyBJbmRleFNjYW5EZXNjIGluZGV4X2Jl Z2luc2Nhbl9pbnRlcm5hbChSZWxhdGlvbiBpbmRleFJlbGF0aW9uLAotCQkJCQkJCQkJCQkgIGlu dCBua2V5cywgaW50IG5vcmRlcmJ5cywgU25hcHNob3Qgc25hcHNob3QsCi0JCQkJCQkJCQkJCSAg UGFyYWxsZWxJbmRleFNjYW5EZXNjIHBzY2FuLCBib29sIHRlbXBfc25hcCk7CiBzdGF0aWMgaW5s aW5lIHZvaWQgdmFsaWRhdGVfcmVsYXRpb25fYXNfaW5kZXgoUmVsYXRpb24gcik7CiAKIApAQCAt MjQ4LDg0ICsyNDMsMTcgQEAgaW5kZXhfaW5zZXJ0X2NsZWFudXAoUmVsYXRpb24gaW5kZXhSZWxh dGlvbiwKIAkJaW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtaW5zZXJ0Y2xlYW51cChpbmRleFJl bGF0aW9uLCBpbmRleEluZm8pOwogfQogCi0vKgotICogaW5kZXhfYmVnaW5zY2FuIC0gc3RhcnQg YSBzY2FuIG9mIGFuIGluZGV4IHdpdGggYW1nZXR0dXBsZQotICoKLSAqIENhbGxlciBtdXN0IGJl IGhvbGRpbmcgc3VpdGFibGUgbG9ja3Mgb24gdGhlIGhlYXAgYW5kIHRoZSBpbmRleC4KLSAqLwot SW5kZXhTY2FuRGVzYwotaW5kZXhfYmVnaW5zY2FuKFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKLQkJ CQlSZWxhdGlvbiBpbmRleFJlbGF0aW9uLAotCQkJCVNuYXBzaG90IHNuYXBzaG90LAotCQkJCUlu ZGV4U2Nhbkluc3RydW1lbnRhdGlvbiAqaW5zdHJ1bWVudCwKLQkJCQlpbnQgbmtleXMsIGludCBu b3JkZXJieXMsCi0JCQkJdWludDMyIGZsYWdzKQotewotCUluZGV4U2NhbkRlc2Mgc2NhbjsKLQot CUFzc2VydChzbmFwc2hvdCAhPSBJbnZhbGlkU25hcHNob3QpOwotCi0JLyogQ2hlY2sgdGhhdCBh IGhpc3RvcmljIHNuYXBzaG90IGlzIG5vdCB1c2VkIGZvciBub24tY2F0YWxvZyB0YWJsZXMgKi8K LQlpZiAoSXNIaXN0b3JpY01WQ0NTbmFwc2hvdChzbmFwc2hvdCkgJiYKLQkJIVJlbGF0aW9uSXNB Y2Nlc3NpYmxlSW5Mb2dpY2FsRGVjb2RpbmcoaGVhcFJlbGF0aW9uKSkKLQl7Ci0JCWVyZXBvcnQo RVJST1IsCi0JCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1RSQU5TQUNUSU9OX1NUQVRFKSwK LQkJCQkgZXJybXNnKCJjYW5ub3QgcXVlcnkgbm9uLWNhdGFsb2cgdGFibGUgXCIlc1wiIGR1cmlu ZyBsb2dpY2FsIGRlY29kaW5nIiwKLQkJCQkJCVJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKGhlYXBS ZWxhdGlvbikpKSk7Ci0JfQotCi0Jc2NhbiA9IGluZGV4X2JlZ2luc2Nhbl9pbnRlcm5hbChpbmRl eFJlbGF0aW9uLCBua2V5cywgbm9yZGVyYnlzLCBzbmFwc2hvdCwgTlVMTCwgZmFsc2UpOwotCi0J LyoKLQkgKiBTYXZlIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBpbnRvIHRoZSBzY2FuZGVzYy4gIEV2 ZXJ5dGhpbmcgZWxzZSB3YXMgc2V0Ci0JICogdXAgYnkgUmVsYXRpb25HZXRJbmRleFNjYW4uCi0J ICovCi0Jc2Nhbi0+aGVhcFJlbGF0aW9uID0gaGVhcFJlbGF0aW9uOwotCXNjYW4tPnhzX3NuYXBz aG90ID0gc25hcHNob3Q7Ci0Jc2Nhbi0+aW5zdHJ1bWVudCA9IGluc3RydW1lbnQ7Ci0KLQkvKiBw cmVwYXJlIHRvIGZldGNoIGluZGV4IG1hdGNoZXMgZnJvbSB0YWJsZSAqLwotCXNjYW4tPnhzX2hl YXBmZXRjaCA9IHRhYmxlX2luZGV4X2ZldGNoX2JlZ2luKGhlYXBSZWxhdGlvbiwgZmxhZ3MpOwot Ci0JcmV0dXJuIHNjYW47Ci19Ci0KLS8qCi0gKiBpbmRleF9iZWdpbnNjYW5fYml0bWFwIC0gc3Rh cnQgYSBzY2FuIG9mIGFuIGluZGV4IHdpdGggYW1nZXRiaXRtYXAKLSAqCi0gKiBBcyBhYm92ZSwg Y2FsbGVyIGhhZCBiZXR0ZXIgYmUgaG9sZGluZyBzb21lIGxvY2sgb24gdGhlIHBhcmVudCBoZWFw Ci0gKiByZWxhdGlvbiwgZXZlbiB0aG91Z2ggaXQncyBub3QgZXhwbGljaXRseSBtZW50aW9uZWQg aGVyZS4KLSAqLwotSW5kZXhTY2FuRGVzYwotaW5kZXhfYmVnaW5zY2FuX2JpdG1hcChSZWxhdGlv biBpbmRleFJlbGF0aW9uLAotCQkJCQkgICBTbmFwc2hvdCBzbmFwc2hvdCwKLQkJCQkJICAgSW5k ZXhTY2FuSW5zdHJ1bWVudGF0aW9uICppbnN0cnVtZW50LAotCQkJCQkgICBpbnQgbmtleXMpCi17 Ci0JSW5kZXhTY2FuRGVzYyBzY2FuOwotCi0JQXNzZXJ0KHNuYXBzaG90ICE9IEludmFsaWRTbmFw c2hvdCk7Ci0KLQlzY2FuID0gaW5kZXhfYmVnaW5zY2FuX2ludGVybmFsKGluZGV4UmVsYXRpb24s IG5rZXlzLCAwLCBzbmFwc2hvdCwgTlVMTCwgZmFsc2UpOwotCi0JLyoKLQkgKiBTYXZlIGFkZGl0 aW9uYWwgcGFyYW1ldGVycyBpbnRvIHRoZSBzY2FuZGVzYy4gIEV2ZXJ5dGhpbmcgZWxzZSB3YXMg c2V0Ci0JICogdXAgYnkgUmVsYXRpb25HZXRJbmRleFNjYW4uCi0JICovCi0Jc2Nhbi0+eHNfc25h cHNob3QgPSBzbmFwc2hvdDsKLQlzY2FuLT5pbnN0cnVtZW50ID0gaW5zdHJ1bWVudDsKLQotCXJl dHVybiBzY2FuOwotfQotCiAvKgogICogaW5kZXhfYmVnaW5zY2FuX2ludGVybmFsIC0tLSBjb21t b24gY29kZSBmb3IgaW5kZXhfYmVnaW5zY2FuIHZhcmlhbnRzCisgKgorICogV2hlbiBoZWFwUmVs YXRpb24gaXMgbm90IE5VTEwsIGFsc28gaW5pdGlhbGl6ZXMgdGFibGUgQU0gaW5kZXggc2NhbiBz dGF0ZS4KICAqLwotc3RhdGljIEluZGV4U2NhbkRlc2MKLWluZGV4X2JlZ2luc2Nhbl9pbnRlcm5h bChSZWxhdGlvbiBpbmRleFJlbGF0aW9uLAorc3RhdGljIHBnX2F0dHJpYnV0ZV9hbHdheXNfaW5s aW5lIEluZGV4U2NhbkRlc2MKK2luZGV4X2JlZ2luc2Nhbl9pbnRlcm5hbChSZWxhdGlvbiBpbmRl eFJlbGF0aW9uLCBSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJCQkJCQkgaW50IG5rZXlzLCBpbnQg bm9yZGVyYnlzLCBTbmFwc2hvdCBzbmFwc2hvdCwKLQkJCQkJCSBQYXJhbGxlbEluZGV4U2NhbkRl c2MgcHNjYW4sIGJvb2wgdGVtcF9zbmFwKQorCQkJCQkJIFBhcmFsbGVsSW5kZXhTY2FuRGVzYyBw c2NhbiwKKwkJCQkJCSBJbmRleFNjYW5JbnN0cnVtZW50YXRpb24gKmluc3RydW1lbnQsCisJCQkJ CQkgYm9vbCBpbmRleF9vbmx5X3NjYW4sIGJvb2wgdGVtcF9zbmFwLCB1aW50MzIgZmxhZ3MpCiB7 CiAJSW5kZXhTY2FuRGVzYyBzY2FuOwogCkBAIC0zNDksOSArMjc3LDgwIEBAIGluZGV4X2JlZ2lu c2Nhbl9pbnRlcm5hbChSZWxhdGlvbiBpbmRleFJlbGF0aW9uLAogCXNjYW4tPnBhcmFsbGVsX3Nj YW4gPSBwc2NhbjsKIAlzY2FuLT54c190ZW1wX3NuYXAgPSB0ZW1wX3NuYXA7CiAKKwlzY2FuLT54 c19zbmFwc2hvdCA9IHNuYXBzaG90OworCXNjYW4tPmluc3RydW1lbnQgPSBpbnN0cnVtZW50Owor CisJLyoKKwkgKiBJbml0aWFsaXplIGhlYXAtc2lkZSBzY2FuIHN0YXRlIHdoZW4gYSBoZWFwIHJl bGF0aW9uIGlzIHByb3ZpZGVkLgorCSAqIEJpdG1hcCBpbmRleCBzY2FucyBkb24ndCBwcm92aWRl IG9uZS4KKwkgKi8KKwlpZiAoaGVhcFJlbGF0aW9uICE9IE5VTEwpCisJeworCQlzY2FuLT5oZWFw UmVsYXRpb24gPSBoZWFwUmVsYXRpb247CisJCXNjYW4tPnhzX3dhbnRfaXR1cCA9IGluZGV4X29u bHlfc2NhbjsKKwkJc2Nhbi0+eHNfaGVhcF9jb250aW51ZSA9IGZhbHNlOworCisJCS8qIHByZXBh cmUgdG8gZmV0Y2ggaW5kZXggbWF0Y2hlcyBmcm9tIHRhYmxlICovCisJCXNjYW4tPnhzX2hlYXBm ZXRjaCA9IHRhYmxlX2luZGV4X2ZldGNoX2JlZ2luKHNjYW4sIGZsYWdzKTsKKworCQkvKiB0YWJs ZSBBTSBtdXN0IHNldCB4c19nZXRuZXh0X3Nsb3QgY2FsbGJhY2sgZm9yIHVzICovCisJCUFzc2Vy dChzY2FuLT54c19nZXRuZXh0X3Nsb3QgIT0gTlVMTCk7CisJfQorCiAJcmV0dXJuIHNjYW47CiB9 CiAKKy8qCisgKiBpbmRleF9iZWdpbnNjYW4gLSBzdGFydCBhIHNjYW4gb2YgYW4gaW5kZXggd2l0 aCBhbWdldHR1cGxlCisgKgorICogQ2FsbGVyIG11c3QgYmUgaG9sZGluZyBzdWl0YWJsZSBsb2Nr cyBvbiB0aGUgaGVhcCBhbmQgdGhlIGluZGV4LgorICovCitJbmRleFNjYW5EZXNjCitpbmRleF9i ZWdpbnNjYW4oUmVsYXRpb24gaGVhcFJlbGF0aW9uLAorCQkJCVJlbGF0aW9uIGluZGV4UmVsYXRp b24sCisJCQkJYm9vbCBpbmRleF9vbmx5X3NjYW4sCisJCQkJU25hcHNob3Qgc25hcHNob3QsCisJ CQkJSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uICppbnN0cnVtZW50LAorCQkJCWludCBua2V5cywg aW50IG5vcmRlcmJ5cywKKwkJCQl1aW50MzIgZmxhZ3MpCit7CisJQXNzZXJ0KHNuYXBzaG90ICE9 IEludmFsaWRTbmFwc2hvdCk7CisKKwkvKiBDaGVjayB0aGF0IGEgaGlzdG9yaWMgc25hcHNob3Qg aXMgbm90IHVzZWQgZm9yIG5vbi1jYXRhbG9nIHRhYmxlcyAqLworCWlmIChJc0hpc3RvcmljTVZD Q1NuYXBzaG90KHNuYXBzaG90KSAmJgorCQkhUmVsYXRpb25Jc0FjY2Vzc2libGVJbkxvZ2ljYWxE ZWNvZGluZyhoZWFwUmVsYXRpb24pKQorCXsKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29k ZShFUlJDT0RFX0lOVkFMSURfVFJBTlNBQ1RJT05fU1RBVEUpLAorCQkJCSBlcnJtc2coImNhbm5v dCBxdWVyeSBub24tY2F0YWxvZyB0YWJsZSBcIiVzXCIgZHVyaW5nIGxvZ2ljYWwgZGVjb2Rpbmci LAorCQkJCQkJUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoaGVhcFJlbGF0aW9uKSkpKTsKKwl9CisK KwlyZXR1cm4gaW5kZXhfYmVnaW5zY2FuX2ludGVybmFsKGluZGV4UmVsYXRpb24sIGhlYXBSZWxh dGlvbiwKKwkJCQkJCQkJCW5rZXlzLCBub3JkZXJieXMsCisJCQkJCQkJCQlzbmFwc2hvdCwgTlVM TCwgaW5zdHJ1bWVudCwKKwkJCQkJCQkJCWluZGV4X29ubHlfc2NhbiwgZmFsc2UsIGZsYWdzKTsK K30KKworLyoKKyAqIGluZGV4X2JlZ2luc2Nhbl9iaXRtYXAgLSBzdGFydCBhIHNjYW4gb2YgYW4g aW5kZXggd2l0aCBhbWdldGJpdG1hcAorICoKKyAqIEFzIGFib3ZlLCBjYWxsZXIgaGFkIGJldHRl ciBiZSBob2xkaW5nIHNvbWUgbG9jayBvbiB0aGUgcGFyZW50IGhlYXAKKyAqIHJlbGF0aW9uLCBl dmVuIHRob3VnaCBpdCdzIG5vdCBleHBsaWNpdGx5IG1lbnRpb25lZCBoZXJlLgorICovCitJbmRl eFNjYW5EZXNjCitpbmRleF9iZWdpbnNjYW5fYml0bWFwKFJlbGF0aW9uIGluZGV4UmVsYXRpb24s CisJCQkJCSAgIFNuYXBzaG90IHNuYXBzaG90LAorCQkJCQkgICBJbmRleFNjYW5JbnN0cnVtZW50 YXRpb24gKmluc3RydW1lbnQsCisJCQkJCSAgIGludCBua2V5cykKK3sKKwlBc3NlcnQoc25hcHNo b3QgIT0gSW52YWxpZFNuYXBzaG90KTsKKwlBc3NlcnQoSXNNVkNDTGlrZVNuYXBzaG90KHNuYXBz aG90KSk7CisKKwlyZXR1cm4gaW5kZXhfYmVnaW5zY2FuX2ludGVybmFsKGluZGV4UmVsYXRpb24s IE5VTEwsIG5rZXlzLCAwLCBzbmFwc2hvdCwKKwkJCQkJCQkJCU5VTEwsIGluc3RydW1lbnQsIGZh bHNlLCBmYWxzZSwgU09fTk9ORSk7Cit9CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0KICAqCQlpbmRl eF9yZXNjYW4gIC0gKHJlKXN0YXJ0IGEgc2NhbiBvZiBhbiBpbmRleAogICoKQEAgLTM3Nyw3ICsz NzYsNyBAQCBpbmRleF9yZXNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuLAogCiAJLyogcmVzZXQgdGFi bGUgQU0gc3RhdGUgZm9yIHJlc2NhbiAqLwogCWlmIChzY2FuLT54c19oZWFwZmV0Y2gpCi0JCXRh YmxlX2luZGV4X2ZldGNoX3Jlc2V0KHNjYW4tPnhzX2hlYXBmZXRjaCk7CisJCXRhYmxlX2luZGV4 X2ZldGNoX3Jlc2V0KHNjYW4pOwogCiAJc2Nhbi0+a2lsbF9wcmlvcl90dXBsZSA9IGZhbHNlOyAv KiBmb3Igc2FmZXR5ICovCiAJc2Nhbi0+eHNfaGVhcF9jb250aW51ZSA9IGZhbHNlOwpAQCAtMzk5 LDcgKzM5OCw3IEBAIGluZGV4X2VuZHNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuKQogCS8qIFJlbGVh c2UgcmVzb3VyY2VzIChsaWtlIGJ1ZmZlciBwaW5zKSBmcm9tIHRhYmxlIGFjY2Vzc2VzICovCiAJ aWYgKHNjYW4tPnhzX2hlYXBmZXRjaCkKIAl7Ci0JCXRhYmxlX2luZGV4X2ZldGNoX2VuZChzY2Fu LT54c19oZWFwZmV0Y2gpOworCQl0YWJsZV9pbmRleF9mZXRjaF9lbmQoc2Nhbik7CiAJCXNjYW4t PnhzX2hlYXBmZXRjaCA9IE5VTEw7CiAJfQogCkBAIC00NTQsNyArNDUzLDcgQEAgaW5kZXhfcmVz dHJwb3MoSW5kZXhTY2FuRGVzYyBzY2FuKQogCiAJLyogcmVzZXQgdGFibGUgQU0gc3RhdGUgZm9y IHJlc3RvcmluZyB0aGUgbWFya2VkIHBvc2l0aW9uICovCiAJaWYgKHNjYW4tPnhzX2hlYXBmZXRj aCkKLQkJdGFibGVfaW5kZXhfZmV0Y2hfcmVzZXQoc2Nhbi0+eHNfaGVhcGZldGNoKTsKKwkJdGFi bGVfaW5kZXhfZmV0Y2hfcmVzZXQoc2Nhbik7CiAKIAlzY2FuLT5raWxsX3ByaW9yX3R1cGxlID0g ZmFsc2U7IC8qIGZvciBzYWZldHkgKi8KIAlzY2FuLT54c19oZWFwX2NvbnRpbnVlID0gZmFsc2U7 CkBAIC01ODAsNyArNTc5LDcgQEAgaW5kZXhfcGFyYWxsZWxyZXNjYW4oSW5kZXhTY2FuRGVzYyBz Y2FuKQogCiAJLyogcmVzZXQgdGFibGUgQU0gc3RhdGUgZm9yIHJlc2NhbiAqLwogCWlmIChzY2Fu LT54c19oZWFwZmV0Y2gpCi0JCXRhYmxlX2luZGV4X2ZldGNoX3Jlc2V0KHNjYW4tPnhzX2hlYXBm ZXRjaCk7CisJCXRhYmxlX2luZGV4X2ZldGNoX3Jlc2V0KHNjYW4pOwogCiAJLyogYW1wYXJhbGxl bHJlc2NhbiBpcyBvcHRpb25hbDsgYXNzdW1lIG5vLW9wIGlmIG5vdCBwcm92aWRlZCBieSBBTSAq LwogCWlmIChzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1wYXJhbGxlbHJlc2NhbiAh PSBOVUxMKQpAQCAtNTk3LDQxICs1OTYsMzMgQEAgaW5kZXhfcGFyYWxsZWxyZXNjYW4oSW5kZXhT Y2FuRGVzYyBzY2FuKQogICovCiBJbmRleFNjYW5EZXNjCiBpbmRleF9iZWdpbnNjYW5fcGFyYWxs ZWwoUmVsYXRpb24gaGVhcHJlbCwgUmVsYXRpb24gaW5kZXhyZWwsCisJCQkJCQkgYm9vbCBpbmRl eF9vbmx5X3NjYW4sCiAJCQkJCQkgSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uICppbnN0cnVtZW50 LAogCQkJCQkJIGludCBua2V5cywgaW50IG5vcmRlcmJ5cywKIAkJCQkJCSBQYXJhbGxlbEluZGV4 U2NhbkRlc2MgcHNjYW4sCiAJCQkJCQkgdWludDMyIGZsYWdzKQogewogCVNuYXBzaG90CXNuYXBz aG90OwotCUluZGV4U2NhbkRlc2Mgc2NhbjsKIAogCUFzc2VydChSZWxGaWxlTG9jYXRvckVxdWFs cyhoZWFwcmVsLT5yZF9sb2NhdG9yLCBwc2Nhbi0+cHNfbG9jYXRvcikpOwogCUFzc2VydChSZWxG aWxlTG9jYXRvckVxdWFscyhpbmRleHJlbC0+cmRfbG9jYXRvciwgcHNjYW4tPnBzX2luZGV4bG9j YXRvcikpOwogCiAJc25hcHNob3QgPSBSZXN0b3JlU25hcHNob3QocHNjYW4tPnBzX3NuYXBzaG90 X2RhdGEpOwogCVJlZ2lzdGVyU25hcHNob3Qoc25hcHNob3QpOwotCXNjYW4gPSBpbmRleF9iZWdp bnNjYW5faW50ZXJuYWwoaW5kZXhyZWwsIG5rZXlzLCBub3JkZXJieXMsIHNuYXBzaG90LAotCQkJ CQkJCQkJcHNjYW4sIHRydWUpOwogCi0JLyoKLQkgKiBTYXZlIGFkZGl0aW9uYWwgcGFyYW1ldGVy cyBpbnRvIHRoZSBzY2FuZGVzYy4gIEV2ZXJ5dGhpbmcgZWxzZSB3YXMgc2V0Ci0JICogdXAgYnkg aW5kZXhfYmVnaW5zY2FuX2ludGVybmFsLgotCSAqLwotCXNjYW4tPmhlYXBSZWxhdGlvbiA9IGhl YXByZWw7Ci0Jc2Nhbi0+eHNfc25hcHNob3QgPSBzbmFwc2hvdDsKLQlzY2FuLT5pbnN0cnVtZW50 ID0gaW5zdHJ1bWVudDsKLQotCS8qIHByZXBhcmUgdG8gZmV0Y2ggaW5kZXggbWF0Y2hlcyBmcm9t IHRhYmxlICovCi0Jc2Nhbi0+eHNfaGVhcGZldGNoID0gdGFibGVfaW5kZXhfZmV0Y2hfYmVnaW4o aGVhcHJlbCwgZmxhZ3MpOwotCi0JcmV0dXJuIHNjYW47CisJcmV0dXJuIGluZGV4X2JlZ2luc2Nh bl9pbnRlcm5hbChpbmRleHJlbCwgaGVhcHJlbCwgbmtleXMsIG5vcmRlcmJ5cywKKwkJCQkJCQkJ CXNuYXBzaG90LCBwc2NhbiwgaW5zdHJ1bWVudCwKKwkJCQkJCQkJCWluZGV4X29ubHlfc2Nhbiwg dHJ1ZSwgZmxhZ3MpOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tCi0gKiBpbmRleF9nZXRuZXh0 X3RpZCAtIGdldCB0aGUgbmV4dCBUSUQgZnJvbSBhIHNjYW4KKyAqIGluZGV4X2dldG5leHRfdGlk IC0gYW1nZXR0dXBsZSBpbnRlcmZhY2UKICAqCiAgKiBUaGUgcmVzdWx0IGlzIHRoZSBuZXh0IFRJ RCBzYXRpc2Z5aW5nIHRoZSBzY2FuIGtleXMsCiAgKiBvciBOVUxMIGlmIG5vIG1vcmUgbWF0Y2hp bmcgdHVwbGVzIGV4aXN0LgorICoKKyAqIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJ5IHRh YmxlIEFNIGFtZ2V0dHVwbGUtYmFzZWQgaW5kZXggc2NhbgorICogY2FsbGJhY2tzLgogICogLS0t LS0tLS0tLS0tLS0tLQogICovCiBJdGVtUG9pbnRlcgpAQCAtNjYyLDcgKzY1Myw3IEBAIGluZGV4 X2dldG5leHRfdGlkKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24p CiAJewogCQkvKiByZXNldCB0YWJsZSBBTSBzdGF0ZSAqLwogCQlpZiAoc2Nhbi0+eHNfaGVhcGZl dGNoKQotCQkJdGFibGVfaW5kZXhfZmV0Y2hfcmVzZXQoc2Nhbi0+eHNfaGVhcGZldGNoKTsKKwkJ CXRhYmxlX2luZGV4X2ZldGNoX3Jlc2V0KHNjYW4pOwogCiAJCXJldHVybiBOVUxMOwogCX0KQEAg LTY3NCw5NyArNjY1LDYgQEAgaW5kZXhfZ2V0bmV4dF90aWQoSW5kZXhTY2FuRGVzYyBzY2FuLCBT Y2FuRGlyZWN0aW9uIGRpcmVjdGlvbikKIAlyZXR1cm4gJnNjYW4tPnhzX2hlYXB0aWQ7CiB9CiAK LS8qIC0tLS0tLS0tLS0tLS0tLS0KLSAqCQlpbmRleF9mZXRjaF9oZWFwIC0gZ2V0IHRoZSBzY2Fu J3MgbmV4dCBoZWFwIHR1cGxlCi0gKgotICogVGhlIHJlc3VsdCBpcyBhIHZpc2libGUgaGVhcCB0 dXBsZSBhc3NvY2lhdGVkIHdpdGggdGhlIGluZGV4IFRJRCBtb3N0Ci0gKiByZWNlbnRseSBmZXRj aGVkIGJ5IGluZGV4X2dldG5leHRfdGlkLCBvciBOVUxMIGlmIG5vIG1vcmUgbWF0Y2hpbmcgdHVw bGVzCi0gKiBleGlzdC4gIChUaGVyZSBjYW4gYmUgbW9yZSB0aGFuIG9uZSBtYXRjaGluZyB0dXBs ZSBiZWNhdXNlIG9mIEhPVCBjaGFpbnMsCi0gKiBhbHRob3VnaCB3aGVuIHVzaW5nIGFuIE1WQ0Mg c25hcHNob3QgaXQgc2hvdWxkIGJlIGltcG9zc2libGUgZm9yIG1vcmUgdGhhbgotICogb25lIHN1 Y2ggdHVwbGUgdG8gZXhpc3QuKQotICoKLSAqIE9uIHN1Y2Nlc3MsIHRoZSBidWZmZXIgY29udGFp bmluZyB0aGUgaGVhcCB0dXAgaXMgcGlubmVkICh0aGUgcGluIHdpbGwgYmUKLSAqIGRyb3BwZWQg aW4gYSBmdXR1cmUgaW5kZXhfZ2V0bmV4dF90aWQsIGluZGV4X2ZldGNoX2hlYXAgb3IgaW5kZXhf ZW5kc2NhbgotICogY2FsbCkuCi0gKgotICogTm90ZTogY2FsbGVyIG11c3QgY2hlY2sgc2Nhbi0+ eHNfcmVjaGVjaywgYW5kIHBlcmZvcm0gcmVjaGVja2luZyBvZiB0aGUKLSAqIHNjYW4ga2V5cyBp ZiByZXF1aXJlZC4gIFdlIGRvIG5vdCBkbyB0aGF0IGhlcmUgYmVjYXVzZSB3ZSBkb24ndCBoYXZl Ci0gKiBlbm91Z2ggaW5mb3JtYXRpb24gdG8gZG8gaXQgZWZmaWNpZW50bHkgaW4gdGhlIGdlbmVy YWwgY2FzZS4KLSAqIC0tLS0tLS0tLS0tLS0tLS0KLSAqLwotYm9vbAotaW5kZXhfZmV0Y2hfaGVh cChJbmRleFNjYW5EZXNjIHNjYW4sIFR1cGxlVGFibGVTbG90ICpzbG90KQotewotCWJvb2wJCWFs bF9kZWFkID0gZmFsc2U7Ci0JYm9vbAkJZm91bmQ7Ci0KLQlmb3VuZCA9IHRhYmxlX2luZGV4X2Zl dGNoX3R1cGxlKHNjYW4tPnhzX2hlYXBmZXRjaCwgJnNjYW4tPnhzX2hlYXB0aWQsCi0JCQkJCQkJ CQlzY2FuLT54c19zbmFwc2hvdCwgc2xvdCwKLQkJCQkJCQkJCSZzY2FuLT54c19oZWFwX2NvbnRp bnVlLCAmYWxsX2RlYWQpOwotCi0JaWYgKGZvdW5kKQotCQlwZ3N0YXRfY291bnRfaGVhcF9mZXRj aChzY2FuLT5pbmRleFJlbGF0aW9uKTsKLQotCS8qCi0JICogSWYgd2Ugc2Nhbm5lZCBhIHdob2xl IEhPVCBjaGFpbiBhbmQgZm91bmQgb25seSBkZWFkIHR1cGxlcywgdGVsbCBpbmRleAotCSAqIEFN IHRvIGtpbGwgaXRzIGVudHJ5IGZvciB0aGF0IFRJRCAodGhpcyB3aWxsIHRha2UgZWZmZWN0IGlu IHRoZSBuZXh0Ci0JICogYW1nZXR0dXBsZSBjYWxsLCBpbiBpbmRleF9nZXRuZXh0X3RpZCkuICBX ZSBkbyBub3QgZG8gdGhpcyB3aGVuIGluCi0JICogcmVjb3ZlcnkgYmVjYXVzZSBpdCBtYXkgdmlv bGF0ZSBNVkNDIHRvIGRvIHNvLiAgU2VlIGNvbW1lbnRzIGluCi0JICogUmVsYXRpb25HZXRJbmRl eFNjYW4oKS4KLQkgKi8KLQlpZiAoIXNjYW4tPnhhY3RTdGFydGVkSW5SZWNvdmVyeSkKLQkJc2Nh bi0+a2lsbF9wcmlvcl90dXBsZSA9IGFsbF9kZWFkOwotCi0JcmV0dXJuIGZvdW5kOwotfQotCi0v KiAtLS0tLS0tLS0tLS0tLS0tCi0gKgkJaW5kZXhfZ2V0bmV4dF9zbG90IC0gZ2V0IHRoZSBuZXh0 IHR1cGxlIGZyb20gYSBzY2FuCi0gKgotICogVGhlIHJlc3VsdCBpcyB0cnVlIGlmIGEgdHVwbGUg c2F0aXNmeWluZyB0aGUgc2NhbiBrZXlzIGFuZCB0aGUgc25hcHNob3Qgd2FzCi0gKiBmb3VuZCwg ZmFsc2Ugb3RoZXJ3aXNlLiAgVGhlIHR1cGxlIGlzIHN0b3JlZCBpbiB0aGUgc3BlY2lmaWVkIHNs b3QuCi0gKgotICogT24gc3VjY2VzcywgcmVzb3VyY2VzIChsaWtlIGJ1ZmZlciBwaW5zKSBhcmUg bGlrZWx5IHRvIGJlIGhlbGQsIGFuZCB3aWxsIGJlCi0gKiBkcm9wcGVkIGJ5IGEgZnV0dXJlIGlu ZGV4X2dldG5leHRfdGlkLCBpbmRleF9mZXRjaF9oZWFwIG9yIGluZGV4X2VuZHNjYW4KLSAqIGNh bGwpLgotICoKLSAqIE5vdGU6IGNhbGxlciBtdXN0IGNoZWNrIHNjYW4tPnhzX3JlY2hlY2ssIGFu ZCBwZXJmb3JtIHJlY2hlY2tpbmcgb2YgdGhlCi0gKiBzY2FuIGtleXMgaWYgcmVxdWlyZWQuICBX ZSBkbyBub3QgZG8gdGhhdCBoZXJlIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZQotICogZW5vdWdoIGlu Zm9ybWF0aW9uIHRvIGRvIGl0IGVmZmljaWVudGx5IGluIHRoZSBnZW5lcmFsIGNhc2UuCi0gKiAt LS0tLS0tLS0tLS0tLS0tCi0gKi8KLWJvb2wKLWluZGV4X2dldG5leHRfc2xvdChJbmRleFNjYW5E ZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCkK LXsKLQlmb3IgKDs7KQotCXsKLQkJaWYgKCFzY2FuLT54c19oZWFwX2NvbnRpbnVlKQotCQl7Ci0J CQlJdGVtUG9pbnRlciB0aWQ7Ci0KLQkJCS8qIFRpbWUgdG8gZmV0Y2ggdGhlIG5leHQgVElEIGZy b20gdGhlIGluZGV4ICovCi0JCQl0aWQgPSBpbmRleF9nZXRuZXh0X3RpZChzY2FuLCBkaXJlY3Rp b24pOwotCi0JCQkvKiBJZiB3ZSdyZSBvdXQgb2YgaW5kZXggZW50cmllcywgd2UncmUgZG9uZSAq LwotCQkJaWYgKHRpZCA9PSBOVUxMKQotCQkJCWJyZWFrOwotCi0JCQlBc3NlcnQoSXRlbVBvaW50 ZXJFcXVhbHModGlkLCAmc2Nhbi0+eHNfaGVhcHRpZCkpOwotCQl9Ci0KLQkJLyoKLQkJICogRmV0 Y2ggdGhlIG5leHQgKG9yIG9ubHkpIHZpc2libGUgaGVhcCB0dXBsZSBmb3IgdGhpcyBpbmRleCBl bnRyeS4KLQkJICogSWYgd2UgZG9uJ3QgZmluZCBhbnl0aGluZywgbG9vcCBhcm91bmQgYW5kIGdy YWIgdGhlIG5leHQgVElEIGZyb20KLQkJICogdGhlIGluZGV4LgotCQkgKi8KLQkJQXNzZXJ0KEl0 ZW1Qb2ludGVySXNWYWxpZCgmc2Nhbi0+eHNfaGVhcHRpZCkpOwotCQlpZiAoaW5kZXhfZmV0Y2hf aGVhcChzY2FuLCBzbG90KSkKLQkJCXJldHVybiB0cnVlOwotCX0KLQotCXJldHVybiBmYWxzZTsK LX0KLQogLyogLS0tLS0tLS0tLS0tLS0tLQogICoJCWluZGV4X2dldGJpdG1hcCAtIGdldCBhbGwg dHVwbGVzIGF0IG9uY2UgZnJvbSBhbiBpbmRleCBzY2FuCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL25idHJlZS9uYnRpbnNlcnQuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRy ZWUvbmJ0aW5zZXJ0LmMKaW5kZXggYzhhZjk3ZGQyLi5mMWI1NWZiMjAgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0aW5zZXJ0LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL25idHJlZS9uYnRpbnNlcnQuYwpAQCAtNTYwLDkgKzU2MCw5IEBAIF9idF9jaGVja191bmlx dWUoUmVsYXRpb24gcmVsLCBCVEluc2VydFN0YXRlIGluc2VydHN0YXRlLCBSZWxhdGlvbiBoZWFw UmVsLAogCQkJCSAqIHdpdGggb3B0aW1pemF0aW9ucyBsaWtlIGhlYXAncyBIT1QsIHdlIGhhdmUg anVzdCBhIHNpbmdsZQogCQkJCSAqIGluZGV4IGVudHJ5IGZvciB0aGUgZW50aXJlIGNoYWluLgog CQkJCSAqLwotCQkJCWVsc2UgaWYgKHRhYmxlX2luZGV4X2ZldGNoX3R1cGxlX2NoZWNrKGhlYXBS ZWwsICZodGlkLAotCQkJCQkJCQkJCQkJCSAgICZTbmFwc2hvdERpcnR5LAotCQkJCQkJCQkJCQkJ CSAgICZhbGxfZGVhZCkpCisJCQkJZWxzZSBpZiAodGFibGVfZmV0Y2hfdGlkX2NoZWNrKGhlYXBS ZWwsICZodGlkLAorCQkJCQkJCQkJCQkgICAmU25hcHNob3REaXJ0eSwKKwkJCQkJCQkJCQkJICAg JmFsbF9kZWFkKSkKIAkJCQl7CiAJCQkJCVRyYW5zYWN0aW9uSWQgeHdhaXQ7CiAKQEAgLTYxOCw4 ICs2MTgsOCBAQCBfYnRfY2hlY2tfdW5pcXVlKFJlbGF0aW9uIHJlbCwgQlRJbnNlcnRTdGF0ZSBp bnNlcnRzdGF0ZSwgUmVsYXRpb24gaGVhcFJlbCwKIAkJCQkJICogZW50cnkuCiAJCQkJCSAqLwog CQkJCQlodGlkID0gaXR1cC0+dF90aWQ7Ci0JCQkJCWlmICh0YWJsZV9pbmRleF9mZXRjaF90dXBs ZV9jaGVjayhoZWFwUmVsLCAmaHRpZCwKLQkJCQkJCQkJCQkJCQkgIFNuYXBzaG90U2VsZiwgTlVM TCkpCisJCQkJCWlmICh0YWJsZV9mZXRjaF90aWRfY2hlY2soaGVhcFJlbCwgJmh0aWQsCisJCQkJ CQkJCQkJCSAgU25hcHNob3RTZWxmLCBOVUxMKSkKIAkJCQkJewogCQkJCQkJLyogTm9ybWFsIGNh c2UgLS0tIGl0J3Mgc3RpbGwgbGl2ZSAqLwogCQkJCQl9CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvdGFibGUvdGFibGVhbS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxl YW0uYwppbmRleCA2OGZmMDk2NmYuLjBhYzlmMDE0MyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv YWNjZXNzL3RhYmxlL3RhYmxlYW0uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFi bGVhbS5jCkBAIC0yMjgsMzIgKzIyOCwyMCBAQCB0YWJsZV9iZWdpbnNjYW5fcGFyYWxsZWxfdGlk cmFuZ2UoUmVsYXRpb24gcmVsYXRpb24sCiAgKi8KIAogLyoKLSAqIFRvIHBlcmZvcm0gdGhhdCBj aGVjayBzaW1wbHkgc3RhcnQgYW4gaW5kZXggc2NhbiwgY3JlYXRlIHRoZSBuZWNlc3NhcnkKLSAq IHNsb3QsIGRvIHRoZSBoZWFwIGxvb2t1cCwgYW5kIHNodXQgZXZlcnl0aGluZyBkb3duIGFnYWlu LiBUaGlzIGNvdWxkIGJlCi0gKiBvcHRpbWl6ZWQsIGJ1dCBpcyB1bmxpa2VseSB0byBtYXR0ZXIg ZnJvbSBhIHBlcmZvcm1hbmNlIFBPVi4gSWYgdGhlcmUKLSAqIGZyZXF1ZW50bHkgYXJlIGxpdmUg aW5kZXggcG9pbnRlcnMgYWxzbyBtYXRjaGluZyBhIHVuaXF1ZSBpbmRleCBrZXksIHRoZQotICog Q1BVIG92ZXJoZWFkIG9mIHRoaXMgcm91dGluZSBpcyB1bmxpa2VseSB0byBtYXR0ZXIuCi0gKgot ICogTm90ZSB0aGF0ICp0aWQgbWF5IGJlIG1vZGlmaWVkIHdoZW4gd2UgcmV0dXJuIHRydWUgaWYg dGhlIEFNIHN1cHBvcnRzCi0gKiBzdG9yaW5nIG11bHRpcGxlIHJvdyB2ZXJzaW9ucyByZWFjaGFi bGUgdmlhIGEgc2luZ2xlIGluZGV4IGVudHJ5IChsaWtlCi0gKiBoZWFwJ3MgSE9UKS4KKyAqIENh bGxlciBzaG91bGQgbm90ZSB0aGUgdGFibGVfZmV0Y2hfdGlkIHdhcm5pbmcgYWJvdXQgKnRpZCBi ZWluZyBtb2RpZmllZAorICogd2hlbiB3ZSByZXR1cm4gdHJ1ZSBpbiBzb21lIGNhc2VzCiAgKi8K IGJvb2wKLXRhYmxlX2luZGV4X2ZldGNoX3R1cGxlX2NoZWNrKFJlbGF0aW9uIHJlbCwKLQkJCQkJ CQkgIEl0ZW1Qb2ludGVyIHRpZCwKLQkJCQkJCQkgIFNuYXBzaG90IHNuYXBzaG90LAotCQkJCQkJ CSAgYm9vbCAqYWxsX2RlYWQpCit0YWJsZV9mZXRjaF90aWRfY2hlY2soUmVsYXRpb24gcmVsLAor CQkJCQkgIEl0ZW1Qb2ludGVyIHRpZCwKKwkJCQkJICBTbmFwc2hvdCBzbmFwc2hvdCwKKwkJCQkJ ICBib29sICphbGxfZGVhZCkKIHsKLQlJbmRleEZldGNoVGFibGVEYXRhICpzY2FuOwogCVR1cGxl VGFibGVTbG90ICpzbG90OwotCWJvb2wJCWNhbGxfYWdhaW4gPSBmYWxzZTsKIAlib29sCQlmb3Vu ZDsKIAogCXNsb3QgPSB0YWJsZV9zbG90X2NyZWF0ZShyZWwsIE5VTEwpOwotCXNjYW4gPSB0YWJs ZV9pbmRleF9mZXRjaF9iZWdpbihyZWwsIFNPX05PTkUpOwotCWZvdW5kID0gdGFibGVfaW5kZXhf ZmV0Y2hfdHVwbGUoc2NhbiwgdGlkLCBzbmFwc2hvdCwgc2xvdCwgJmNhbGxfYWdhaW4sCi0JCQkJ CQkJCQlhbGxfZGVhZCk7Ci0JdGFibGVfaW5kZXhfZmV0Y2hfZW5kKHNjYW4pOworCWZvdW5kID0g dGFibGVfZmV0Y2hfdGlkKHJlbCwgdGlkLCBzbmFwc2hvdCwgc2xvdCwgYWxsX2RlYWQpOwogCUV4 ZWNEcm9wU2luZ2xlVHVwbGVUYWJsZVNsb3Qoc2xvdCk7CiAKIAlyZXR1cm4gZm91bmQ7CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbWFwaS5jIGIvc3JjL2JhY2tl bmQvYWNjZXNzL3RhYmxlL3RhYmxlYW1hcGkuYwppbmRleCA1NDUwYTI3ZmEuLmMwOTQ3M2I5NyAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW1hcGkuYworKysgYi9z cmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbWFwaS5jCkBAIC01Myw4ICs1Myw4IEBAIEdl dFRhYmxlQW1Sb3V0aW5lKE9pZCBhbWhhbmRsZXIpCiAJQXNzZXJ0KHJvdXRpbmUtPmluZGV4X2Zl dGNoX2JlZ2luICE9IE5VTEwpOwogCUFzc2VydChyb3V0aW5lLT5pbmRleF9mZXRjaF9yZXNldCAh PSBOVUxMKTsKIAlBc3NlcnQocm91dGluZS0+aW5kZXhfZmV0Y2hfZW5kICE9IE5VTEwpOwotCUFz c2VydChyb3V0aW5lLT5pbmRleF9mZXRjaF90dXBsZSAhPSBOVUxMKTsKIAorCUFzc2VydChyb3V0 aW5lLT5mZXRjaF90aWQgIT0gTlVMTCk7CiAJQXNzZXJ0KHJvdXRpbmUtPnR1cGxlX2ZldGNoX3Jv d192ZXJzaW9uICE9IE5VTEwpOwogCUFzc2VydChyb3V0aW5lLT50dXBsZV90aWRfdmFsaWQgIT0g TlVMTCk7CiAJQXNzZXJ0KHJvdXRpbmUtPnR1cGxlX2dldF9sYXRlc3RfdGlkICE9IE5VTEwpOwpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29uc3RyYWludC5jIGIvc3JjL2JhY2tl bmQvY29tbWFuZHMvY29uc3RyYWludC5jCmluZGV4IDQyMWQ4YzM1OS4uN2FmZjQ4MTI0IDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb25zdHJhaW50LmMKKysrIGIvc3JjL2JhY2tl bmQvY29tbWFuZHMvY29uc3RyYWludC5jCkBAIC0xMDUsMjMgKzEwNSwxNCBAQCB1bmlxdWVfa2V5 X3JlY2hlY2soUEdfRlVOQ1RJT05fQVJHUykKIAkgKiByZW1vdmVkLgogCSAqLwogCXRtcHRpZCA9 IGNoZWNrdGlkOworCWlmICghdGFibGVfZmV0Y2hfdGlkKHRyaWdkYXRhLT50Z19yZWxhdGlvbiwg JnRtcHRpZCwgU25hcHNob3RTZWxmLAorCQkJCQkJIHNsb3QsIE5VTEwpKQogCXsKLQkJSW5kZXhG ZXRjaFRhYmxlRGF0YSAqc2NhbiA9IHRhYmxlX2luZGV4X2ZldGNoX2JlZ2luKHRyaWdkYXRhLT50 Z19yZWxhdGlvbiwKLQkJCQkJCQkJCQkJCQkJCVNPX05PTkUpOwotCQlib29sCQljYWxsX2FnYWlu ID0gZmFsc2U7Ci0KLQkJaWYgKCF0YWJsZV9pbmRleF9mZXRjaF90dXBsZShzY2FuLCAmdG1wdGlk LCBTbmFwc2hvdFNlbGYsIHNsb3QsCi0JCQkJCQkJCQkgJmNhbGxfYWdhaW4sIE5VTEwpKQotCQl7 Ci0JCQkvKgotCQkJICogQWxsIHJvd3MgcmVmZXJlbmNlZCBieSB0aGUgaW5kZXggZW50cnkgYXJl IGRlYWQsIHNvIHNraXAgdGhlCi0JCQkgKiBjaGVjay4KLQkJCSAqLwotCQkJRXhlY0Ryb3BTaW5n bGVUdXBsZVRhYmxlU2xvdChzbG90KTsKLQkJCXRhYmxlX2luZGV4X2ZldGNoX2VuZChzY2FuKTsK LQkJCXJldHVybiBQb2ludGVyR2V0RGF0dW0oTlVMTCk7Ci0JCX0KLQkJdGFibGVfaW5kZXhfZmV0 Y2hfZW5kKHNjYW4pOworCQkvKgorCQkgKiBBbGwgcm93cyByZWZlcmVuY2VkIGJ5IHRoZSBpbmRl eCBlbnRyeSBhcmUgZGVhZCwgc28gc2tpcCB0aGUgY2hlY2sKKwkJICovCisJCUV4ZWNEcm9wU2lu Z2xlVHVwbGVUYWJsZVNsb3Qoc2xvdCk7CisJCXJldHVybiBQb2ludGVyR2V0RGF0dW0oTlVMTCk7 CiAJfQogCiAJLyoKQEAgLTE2OCw5ICsxNTksOCBAQCB1bmlxdWVfa2V5X3JlY2hlY2soUEdfRlVO Q1RJT05fQVJHUykKIAkJLyoKIAkJICogTm90ZTogdGhpcyBpcyBub3QgYSByZWFsIGluc2VydDsg aXQgaXMgYSBjaGVjayB0aGF0IHRoZSBpbmRleCBlbnRyeQogCQkgKiB0aGF0IGhhcyBhbHJlYWR5 IGJlZW4gaW5zZXJ0ZWQgaXMgdW5pcXVlLiAgUGFzc2luZyB0aGUgdHVwbGUncyB0aWQKLQkJICog KGkuZS4gdW5tb2RpZmllZCBieSB0YWJsZV9pbmRleF9mZXRjaF90dXBsZSgpKSBpcyBjb3JyZWN0 IGV2ZW4gaWYKLQkJICogdGhlIHJvdyBpcyBub3cgZGVhZCwgYmVjYXVzZSB0aGF0IGlzIHRoZSBU SUQgdGhlIGluZGV4IHdpbGwga25vdwotCQkgKiBhYm91dC4KKwkJICogKGkuZS4gdW5tb2RpZmll ZCBieSB0YWJsZV9mZXRjaF90aWQoKSkgaXMgY29ycmVjdCBldmVuIGlmIHRoZSByb3cKKwkJICog aXMgbm93IGRlYWQsIGJlY2F1c2UgdGhhdCBpcyB0aGUgVElEIHRoZSBpbmRleCB3aWxsIGtub3cg YWJvdXQuCiAJCSAqLwogCQlpbmRleF9pbnNlcnQoaW5kZXhSZWwsIHZhbHVlcywgaXNudWxsLCAm Y2hlY2t0aWQsCiAJCQkJCSB0cmlnZGF0YS0+dGdfcmVsYXRpb24sIFVOSVFVRV9DSEVDS19FWElT VElORywKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYyBiL3NyYy9i YWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYwppbmRleCA3M2VhYWYxNzYuLmZjMDJlODcwOSAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCisrKyBiL3NyYy9iYWNrZW5k L2NvbW1hbmRzL2V4cGxhaW4uYwpAQCAtMTM2LDcgKzEzNiw3IEBAIHN0YXRpYyB2b2lkIHNob3df cmVjdXJzaXZlX3VuaW9uX2luZm8oUmVjdXJzaXZlVW5pb25TdGF0ZSAqcnN0YXRlLAogc3RhdGlj IHZvaWQgc2hvd19tZW1vaXplX2luZm8oTWVtb2l6ZVN0YXRlICptc3RhdGUsIExpc3QgKmFuY2Vz dG9ycywKIAkJCQkJCQkgIEV4cGxhaW5TdGF0ZSAqZXMpOwogc3RhdGljIHZvaWQgc2hvd19oYXNo YWdnX2luZm8oQWdnU3RhdGUgKmFnZ3N0YXRlLCBFeHBsYWluU3RhdGUgKmVzKTsKLXN0YXRpYyB2 b2lkIHNob3dfaW5kZXhzZWFyY2hlc19pbmZvKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBFeHBsYWlu U3RhdGUgKmVzKTsKK3N0YXRpYyB2b2lkIHNob3dfaW5kZXhzY2FuX2luZm8oUGxhblN0YXRlICpw bGFuc3RhdGUsIEV4cGxhaW5TdGF0ZSAqZXMpOwogc3RhdGljIHZvaWQgc2hvd190aWRiaXRtYXBf aW5mbyhCaXRtYXBIZWFwU2NhblN0YXRlICpwbGFuc3RhdGUsCiAJCQkJCQkJCUV4cGxhaW5TdGF0 ZSAqZXMpOwogc3RhdGljIHZvaWQgc2hvd19pbnN0cnVtZW50YXRpb25fY291bnQoY29uc3QgY2hh ciAqcWxhYmVsLCBpbnQgd2hpY2gsCkBAIC0xOTczLDcgKzE5NzMsNyBAQCBFeHBsYWluTm9kZShQ bGFuU3RhdGUgKnBsYW5zdGF0ZSwgTGlzdCAqYW5jZXN0b3JzLAogCQkJaWYgKHBsYW4tPnF1YWwp CiAJCQkJc2hvd19pbnN0cnVtZW50YXRpb25fY291bnQoIlJvd3MgUmVtb3ZlZCBieSBGaWx0ZXIi LCAxLAogCQkJCQkJCQkJCSAgIHBsYW5zdGF0ZSwgZXMpOwotCQkJc2hvd19pbmRleHNlYXJjaGVz X2luZm8ocGxhbnN0YXRlLCBlcyk7CisJCQlzaG93X2luZGV4c2Nhbl9pbmZvKHBsYW5zdGF0ZSwg ZXMpOwogCQkJYnJlYWs7CiAJCWNhc2UgVF9JbmRleE9ubHlTY2FuOgogCQkJc2hvd19zY2FuX3F1 YWwoKChJbmRleE9ubHlTY2FuICopIHBsYW4pLT5pbmRleHF1YWwsCkBAIC0xOTg3LDE1ICsxOTg3 LDEyIEBAIEV4cGxhaW5Ob2RlKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBMaXN0ICphbmNlc3RvcnMs CiAJCQlpZiAocGxhbi0+cXVhbCkKIAkJCQlzaG93X2luc3RydW1lbnRhdGlvbl9jb3VudCgiUm93 cyBSZW1vdmVkIGJ5IEZpbHRlciIsIDEsCiAJCQkJCQkJCQkJICAgcGxhbnN0YXRlLCBlcyk7Ci0J CQlpZiAoZXMtPmFuYWx5emUpCi0JCQkJRXhwbGFpblByb3BlcnR5RmxvYXQoIkhlYXAgRmV0Y2hl cyIsIE5VTEwsCi0JCQkJCQkJCQkgcGxhbnN0YXRlLT5pbnN0cnVtZW50LT5udHVwbGVzMiwgMCwg ZXMpOwotCQkJc2hvd19pbmRleHNlYXJjaGVzX2luZm8ocGxhbnN0YXRlLCBlcyk7CisJCQlzaG93 X2luZGV4c2Nhbl9pbmZvKHBsYW5zdGF0ZSwgZXMpOwogCQkJYnJlYWs7CiAJCWNhc2UgVF9CaXRt YXBJbmRleFNjYW46CiAJCQlzaG93X3NjYW5fcXVhbCgoKEJpdG1hcEluZGV4U2NhbiAqKSBwbGFu KS0+aW5kZXhxdWFsb3JpZywKIAkJCQkJCSAgICJJbmRleCBDb25kIiwgcGxhbnN0YXRlLCBhbmNl c3RvcnMsIGVzKTsKLQkJCXNob3dfaW5kZXhzZWFyY2hlc19pbmZvKHBsYW5zdGF0ZSwgZXMpOwor CQkJc2hvd19pbmRleHNjYW5faW5mbyhwbGFuc3RhdGUsIGVzKTsKIAkJCWJyZWFrOwogCQljYXNl IFRfQml0bWFwSGVhcFNjYW46CiAJCQlzaG93X3NjYW5fcXVhbCgoKEJpdG1hcEhlYXBTY2FuICop IHBsYW4pLT5iaXRtYXBxdWFsb3JpZywKQEAgLTM4NTksMTUgKzM4NTYsMTYgQEAgc2hvd19oYXNo YWdnX2luZm8oQWdnU3RhdGUgKmFnZ3N0YXRlLCBFeHBsYWluU3RhdGUgKmVzKQogfQogCiAvKgot ICogU2hvdyB0aGUgdG90YWwgbnVtYmVyIG9mIGluZGV4IHNlYXJjaGVzIGZvciBhCisgKiBTaG93 IGluZGV4IHNjYW4gcmVsYXRlZCBleGVjdXRvciBpbnN0cnVtZW50YXRpb24gZm9yIGEKICAqIElu ZGV4U2Nhbi9JbmRleE9ubHlTY2FuL0JpdG1hcEluZGV4U2NhbiBub2RlCiAgKi8KIHN0YXRpYyB2 b2lkCi1zaG93X2luZGV4c2VhcmNoZXNfaW5mbyhQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgRXhwbGFp blN0YXRlICplcykKK3Nob3dfaW5kZXhzY2FuX2luZm8oUGxhblN0YXRlICpwbGFuc3RhdGUsIEV4 cGxhaW5TdGF0ZSAqZXMpCiB7CiAJUGxhbgkgICAqcGxhbiA9IHBsYW5zdGF0ZS0+cGxhbjsKIAlT aGFyZWRJbmRleFNjYW5JbnN0cnVtZW50YXRpb24gKlNoYXJlZEluZm8gPSBOVUxMOwotCXVpbnQ2 NAkJbnNlYXJjaGVzID0gMDsKKwl1aW50NjQJCW5zZWFyY2hlcyA9IDAsCisJCQkJbnRhYmxldHVw bGVmZXRjaGVzID0gMDsKIAogCWlmICghZXMtPmFuYWx5emUpCiAJCXJldHVybjsKQEAgLTM4ODgs NiArMzg4Niw3IEBAIHNob3dfaW5kZXhzZWFyY2hlc19pbmZvKFBsYW5TdGF0ZSAqcGxhbnN0YXRl LCBFeHBsYWluU3RhdGUgKmVzKQogCQkJCUluZGV4T25seVNjYW5TdGF0ZSAqaW5kZXhzdGF0ZSA9 ICgoSW5kZXhPbmx5U2NhblN0YXRlICopIHBsYW5zdGF0ZSk7CiAKIAkJCQluc2VhcmNoZXMgPSBp bmRleHN0YXRlLT5pb3NzX0luc3RydW1lbnQtPm5zZWFyY2hlczsKKwkJCQludGFibGV0dXBsZWZl dGNoZXMgPSBpbmRleHN0YXRlLT5pb3NzX0luc3RydW1lbnQtPm50YWJsZXR1cGxlZmV0Y2hlczsK IAkJCQlTaGFyZWRJbmZvID0gaW5kZXhzdGF0ZS0+aW9zc19TaGFyZWRJbmZvOwogCQkJCWJyZWFr OwogCQkJfQpAQCAtMzkxMSw5ICszOTEwLDEzIEBAIHNob3dfaW5kZXhzZWFyY2hlc19pbmZvKFBs YW5TdGF0ZSAqcGxhbnN0YXRlLCBFeHBsYWluU3RhdGUgKmVzKQogCQkJSW5kZXhTY2FuSW5zdHJ1 bWVudGF0aW9uICp3aW5zdHJ1bWVudCA9ICZTaGFyZWRJbmZvLT53aW5zdHJ1bWVudFtpXTsKIAog CQkJbnNlYXJjaGVzICs9IHdpbnN0cnVtZW50LT5uc2VhcmNoZXM7CisJCQludGFibGV0dXBsZWZl dGNoZXMgKz0gd2luc3RydW1lbnQtPm50YWJsZXR1cGxlZmV0Y2hlczsKIAkJfQogCX0KIAorCWlm IChub2RlVGFnKHBsYW4pID09IFRfSW5kZXhPbmx5U2NhbikKKwkJRXhwbGFpblByb3BlcnR5VUlu dGVnZXIoIkhlYXAgRmV0Y2hlcyIsIE5VTEwsIG50YWJsZXR1cGxlZmV0Y2hlcywgZXMpOworCiAJ RXhwbGFpblByb3BlcnR5VUludGVnZXIoIkluZGV4IFNlYXJjaGVzIiwgTlVMTCwgbnNlYXJjaGVz LCBlcyk7CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGlu Zy5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMKaW5kZXggNDM2M2UxNTRj Li44NGM4YzM0MDMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGlu Zy5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5jCkBAIC04MTUsMTIg KzgxNSwxMyBAQCBjaGVja19leGNsdXNpb25fb3JfdW5pcXVlX2NvbnN0cmFpbnQoUmVsYXRpb24g aGVhcCwgUmVsYXRpb24gaW5kZXgsCiByZXRyeToKIAljb25mbGljdCA9IGZhbHNlOwogCWZvdW5k X3NlbGYgPSBmYWxzZTsKLQlpbmRleF9zY2FuID0gaW5kZXhfYmVnaW5zY2FuKGhlYXAsIGluZGV4 LAorCWluZGV4X3NjYW4gPSBpbmRleF9iZWdpbnNjYW4oaGVhcCwgaW5kZXgsIGZhbHNlLAogCQkJ CQkJCQkgJkRpcnR5U25hcHNob3QsIE5VTEwsIGluZG5rZXlhdHRzLCAwLAogCQkJCQkJCQkgU09f Tk9ORSk7CiAJaW5kZXhfcmVzY2FuKGluZGV4X3NjYW4sIHNjYW5rZXlzLCBpbmRua2V5YXR0cywg TlVMTCwgMCk7CiAKLQl3aGlsZSAoaW5kZXhfZ2V0bmV4dF9zbG90KGluZGV4X3NjYW4sIEZvcndh cmRTY2FuRGlyZWN0aW9uLCBleGlzdGluZ19zbG90KSkKKwl3aGlsZSAodGFibGVfaW5kZXhfZ2V0 bmV4dF9zbG90KGluZGV4X3NjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLAorCQkJCQkJCQkJZXhp c3Rpbmdfc2xvdCkpCiAJewogCQlUcmFuc2FjdGlvbklkIHh3YWl0OwogCQlYTFRXX09wZXIJcmVh c29uX3dhaXQ7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUmVwbGljYXRp b24uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNSZXBsaWNhdGlvbi5jCmluZGV4IGIyY2E1 Y2JmMS4uZmQ5ZWZkOTQ3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUmVw bGljYXRpb24uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUmVwbGljYXRpb24uYwpA QCAtMjA1LDcgKzIwNSw3IEBAIFJlbGF0aW9uRmluZFJlcGxUdXBsZUJ5SW5kZXgoUmVsYXRpb24g cmVsLCBPaWQgaWR4b2lkLAogCXNrZXlfYXR0b2ZmID0gYnVpbGRfcmVwbGluZGV4X3NjYW5fa2V5 KHNrZXksIHJlbCwgaWR4cmVsLCBzZWFyY2hzbG90KTsKIAogCS8qIFN0YXJ0IGFuIGluZGV4IHNj YW4uICovCi0Jc2NhbiA9IGluZGV4X2JlZ2luc2NhbihyZWwsIGlkeHJlbCwKKwlzY2FuID0gaW5k ZXhfYmVnaW5zY2FuKHJlbCwgaWR4cmVsLCBmYWxzZSwKIAkJCQkJCSAgICZzbmFwLCBOVUxMLCBz a2V5X2F0dG9mZiwgMCwgU09fTk9ORSk7CiAKIHJldHJ5OgpAQCAtMjE0LDcgKzIxNCw3IEBAIHJl dHJ5OgogCWluZGV4X3Jlc2NhbihzY2FuLCBza2V5LCBza2V5X2F0dG9mZiwgTlVMTCwgMCk7CiAK IAkvKiBUcnkgdG8gZmluZCB0aGUgdHVwbGUgKi8KLQl3aGlsZSAoaW5kZXhfZ2V0bmV4dF9zbG90 KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBvdXRzbG90KSkKKwl3aGlsZSAodGFibGVfaW5k ZXhfZ2V0bmV4dF9zbG90KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBvdXRzbG90KSkKIAl7 CiAJCS8qCiAJCSAqIEF2b2lkIGV4cGVuc2l2ZSBlcXVhbGl0eSBjaGVjayBpZiB0aGUgaW5kZXgg aXMgcHJpbWFyeSBrZXkgb3IKQEAgLTY2OSwxMyArNjY5LDEzIEBAIFJlbGF0aW9uRmluZERlbGV0 ZWRUdXBsZUluZm9CeUluZGV4KFJlbGF0aW9uIHJlbCwgT2lkIGlkeG9pZCwKIAkgKiBub3QgeWV0 IGNvbW1pdHRlZCBvciB0aG9zZSBqdXN0IGNvbW1pdHRlZCBwcmlvciB0byB0aGUgc2NhbiBhcmUK IAkgKiBleGNsdWRlZCBpbiB1cGRhdGVfbW9zdF9yZWNlbnRfZGVsZXRpb25faW5mbygpLgogCSAq LwotCXNjYW4gPSBpbmRleF9iZWdpbnNjYW4ocmVsLCBpZHhyZWwsCisJc2NhbiA9IGluZGV4X2Jl Z2luc2NhbihyZWwsIGlkeHJlbCwgZmFsc2UsCiAJCQkJCQkgICBTbmFwc2hvdEFueSwgTlVMTCwg c2tleV9hdHRvZmYsIDAsIFNPX05PTkUpOwogCiAJaW5kZXhfcmVzY2FuKHNjYW4sIHNrZXksIHNr ZXlfYXR0b2ZmLCBOVUxMLCAwKTsKIAogCS8qIFRyeSB0byBmaW5kIHRoZSB0dXBsZSAqLwotCXdo aWxlIChpbmRleF9nZXRuZXh0X3Nsb3Qoc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIHNjYW5z bG90KSkKKwl3aGlsZSAodGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90KHNjYW4sIEZvcndhcmRTY2Fu RGlyZWN0aW9uLCBzY2Fuc2xvdCkpCiAJewogCQkvKgogCQkgKiBBdm9pZCBleHBlbnNpdmUgZXF1 YWxpdHkgY2hlY2sgaWYgdGhlIGluZGV4IGlzIHByaW1hcnkga2V5IG9yCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9leGVjdXRvci9ub2RlQml0bWFwSW5kZXhzY2FuLmMgYi9zcmMvYmFja2VuZC9l eGVjdXRvci9ub2RlQml0bWFwSW5kZXhzY2FuLmMKaW5kZXggNzBjNTVlZTZkLi5hOWEzZDJmYjEg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVCaXRtYXBJbmRleHNjYW4uYwor KysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQml0bWFwSW5kZXhzY2FuLmMKQEAgLTIwNCw2 ICsyMDQsNyBAQCBFeGVjRW5kQml0bWFwSW5kZXhTY2FuKEJpdG1hcEluZGV4U2NhblN0YXRlICpu b2RlKQogCQkgKiB3aGljaCB3aWxsIGhhdmUgYSBuZXcgQml0bWFwSW5kZXhTY2FuU3RhdGUgYW5k IHplcm9lZCBzdGF0cy4KIAkJICovCiAJCXdpbnN0cnVtZW50LT5uc2VhcmNoZXMgKz0gbm9kZS0+ Ymlzc19JbnN0cnVtZW50LT5uc2VhcmNoZXM7CisJCUFzc2VydChub2RlLT5iaXNzX0luc3RydW1l bnQtPm50YWJsZXR1cGxlZmV0Y2hlcyA9PSAwKTsKIAl9CiAKIAkvKgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL25vZGVJbmRleG9ubHlzY2FuLmMKaW5kZXggZGU2MTU0ZmQ1Li5iNmI5ZGJkMTAgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleG9ubHlzY2FuLmMKKysrIGIvc3Jj L2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYwpAQCAtMzQsNyArMzQsNiBAQAog I2luY2x1ZGUgImFjY2Vzcy9yZWxzY2FuLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3RhYmxlYW0uaCIK ICNpbmNsdWRlICJhY2Nlc3MvdHVwZGVzYy5oIgotI2luY2x1ZGUgImFjY2Vzcy92aXNpYmlsaXR5 bWFwLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ190eXBlLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3Iv ZXhlY3V0b3IuaCIKICNpbmNsdWRlICJleGVjdXRvci9pbnN0cnVtZW50LmgiCkBAIC00Miw3ICs0 MSw2IEBACiAjaW5jbHVkZSAiZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5oIgogI2luY2x1ZGUgIm1p c2NhZG1pbi5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmbWdyLmgiCi0jaW5jbHVkZSAic3RvcmFn ZS9wcmVkaWNhdGUuaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUgInV0 aWxzL3JlbC5oIgogCkBAIC02Niw3ICs2NCw2IEBAIEluZGV4T25seU5leHQoSW5kZXhPbmx5U2Nh blN0YXRlICpub2RlKQogCVNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uOwogCUluZGV4U2NhbkRlc2Mg c2NhbmRlc2M7CiAJVHVwbGVUYWJsZVNsb3QgKnNsb3Q7Ci0JSXRlbVBvaW50ZXIgdGlkOwogCiAJ LyoKIAkgKiBleHRyYWN0IG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiBmcm9tIGluZGV4IHNjYW4gbm9k ZQpAQCAtOTIsNiArODksNyBAQCBJbmRleE9ubHlOZXh0KEluZGV4T25seVNjYW5TdGF0ZSAqbm9k ZSkKIAkJICovCiAJCXNjYW5kZXNjID0gaW5kZXhfYmVnaW5zY2FuKG5vZGUtPnNzLnNzX2N1cnJl bnRSZWxhdGlvbiwKIAkJCQkJCQkJICAgbm9kZS0+aW9zc19SZWxhdGlvbkRlc2MsCisJCQkJCQkJ CSAgIHRydWUsCiAJCQkJCQkJCSAgIGVzdGF0ZS0+ZXNfc25hcHNob3QsCiAJCQkJCQkJCSAgIG5v ZGUtPmlvc3NfSW5zdHJ1bWVudCwKIAkJCQkJCQkJICAgbm9kZS0+aW9zc19OdW1TY2FuS2V5cywK QEAgLTEwMCwxMSArOTgsNyBAQCBJbmRleE9ubHlOZXh0KEluZGV4T25seVNjYW5TdGF0ZSAqbm9k ZSkKIAkJCQkJCQkJICAgU09fSElOVF9SRUxfUkVBRF9PTkxZIDogU09fTk9ORSk7CiAKIAkJbm9k ZS0+aW9zc19TY2FuRGVzYyA9IHNjYW5kZXNjOwotCi0KLQkJLyogU2V0IGl0IHVwIGZvciBpbmRl eC1vbmx5IHNjYW4gKi8KLQkJbm9kZS0+aW9zc19TY2FuRGVzYy0+eHNfd2FudF9pdHVwID0gdHJ1 ZTsKLQkJbm9kZS0+aW9zc19WTUJ1ZmZlciA9IEludmFsaWRCdWZmZXI7CisJCUFzc2VydChub2Rl LT5pb3NzX1NjYW5EZXNjLT54c193YW50X2l0dXApOwogCiAJCS8qCiAJCSAqIElmIG5vIHJ1bi10 aW1lIGtleXMgdG8gY2FsY3VsYXRlIG9yIHRoZXkgYXJlIHJlYWR5LCBnbyBhaGVhZCBhbmQKQEAg LTEyMSw3OCArMTE1LDExIEBAIEluZGV4T25seU5leHQoSW5kZXhPbmx5U2NhblN0YXRlICpub2Rl KQogCS8qCiAJICogT0ssIG5vdyB0aGF0IHdlIGhhdmUgd2hhdCB3ZSBuZWVkLCBmZXRjaCB0aGUg bmV4dCB0dXBsZS4KIAkgKi8KLQl3aGlsZSAoKHRpZCA9IGluZGV4X2dldG5leHRfdGlkKHNjYW5k ZXNjLCBkaXJlY3Rpb24pKSAhPSBOVUxMKQorCXdoaWxlICh0YWJsZV9pbmRleF9nZXRuZXh0X3Ns b3Qoc2NhbmRlc2MsIGRpcmVjdGlvbiwKKwkJCQkJCQkJCW5vZGUtPmlvc3NfVGFibGVTbG90KSkK IAl7Ci0JCWJvb2wJCXR1cGxlX2Zyb21faGVhcCA9IGZhbHNlOwotCiAJCUNIRUNLX0ZPUl9JTlRF UlJVUFRTKCk7CiAKLQkJLyoKLQkJICogV2UgY2FuIHNraXAgdGhlIGhlYXAgZmV0Y2ggaWYgdGhl IFRJRCByZWZlcmVuY2VzIGEgaGVhcCBwYWdlIG9uCi0JCSAqIHdoaWNoIGFsbCB0dXBsZXMgYXJl IGtub3duIHZpc2libGUgdG8gZXZlcnlib2R5LiAgSW4gYW55IGNhc2UsCi0JCSAqIHdlJ2xsIHVz ZSB0aGUgaW5kZXggdHVwbGUgbm90IHRoZSBoZWFwIHR1cGxlIGFzIHRoZSBkYXRhIHNvdXJjZS4K LQkJICoKLQkJICogTm90ZSBvbiBNZW1vcnkgT3JkZXJpbmcgRWZmZWN0czogdmlzaWJpbGl0eW1h cF9nZXRfc3RhdHVzIGRvZXMgbm90Ci0JCSAqIGxvY2sgdGhlIHZpc2liaWxpdHkgbWFwIGJ1ZmZl ciwgYW5kIHRoZXJlZm9yZSB0aGUgcmVzdWx0IHdlIHJlYWQKLQkJICogaGVyZSBjb3VsZCBiZSBz bGlnaHRseSBzdGFsZS4gIEhvd2V2ZXIsIGl0IGNhbid0IGJlIHN0YWxlIGVub3VnaCB0bwotCQkg KiBtYXR0ZXIuCi0JCSAqCi0JCSAqIFdlIG5lZWQgdG8gZGV0ZWN0IGNsZWFyaW5nIGEgVk0gYml0 IGR1ZSB0byBhbiBpbnNlcnQgcmlnaHQgYXdheSwKLQkJICogYmVjYXVzZSB0aGUgdHVwbGUgaXMg cHJlc2VudCBpbiB0aGUgaW5kZXggcGFnZSBidXQgbm90IHZpc2libGUuIFRoZQotCQkgKiByZWFk aW5nIG9mIHRoZSBUSUQgYnkgdGhpcyBzY2FuICh1c2luZyBhIHNoYXJlZCBsb2NrIG9uIHRoZSBp bmRleAotCQkgKiBidWZmZXIpIGlzIHNlcmlhbGl6ZWQgd2l0aCB0aGUgaW5zZXJ0IG9mIHRoZSBU SUQgaW50byB0aGUgaW5kZXgKLQkJICogKHVzaW5nIGFuIGV4Y2x1c2l2ZSBsb2NrIG9uIHRoZSBp bmRleCBidWZmZXIpLiBCZWNhdXNlIHRoZSBWTSBiaXQKLQkJICogaXMgY2xlYXJlZCBiZWZvcmUg dXBkYXRpbmcgdGhlIGluZGV4LCBhbmQgbG9ja2luZy91bmxvY2tpbmcgb2YgdGhlCi0JCSAqIGlu ZGV4IHBhZ2UgYWN0cyBhcyBhIGZ1bGwgbWVtb3J5IGJhcnJpZXIsIHdlIGFyZSBzdXJlIHRvIHNl ZSB0aGUKLQkJICogY2xlYXJlZCBiaXQgaWYgd2Ugc2VlIGEgcmVjZW50bHktaW5zZXJ0ZWQgVElE LgotCQkgKgotCQkgKiBEZWxldGVzIGRvIG5vdCB1cGRhdGUgdGhlIGluZGV4IHBhZ2UgKG9ubHkg VkFDVVVNIHdpbGwgY2xlYXIgb3V0Ci0JCSAqIHRoZSBUSUQpLCBzbyB0aGUgY2xlYXJpbmcgb2Yg dGhlIFZNIGJpdCBieSBhIGRlbGV0ZSBpcyBub3QKLQkJICogc2VyaWFsaXplZCB3aXRoIHRoaXMg dGVzdCBiZWxvdywgYW5kIHdlIG1heSBzZWUgYSB2YWx1ZSB0aGF0IGlzCi0JCSAqIHNpZ25pZmlj YW50bHkgc3RhbGUuIEhvd2V2ZXIsIHdlIGRvbid0IGNhcmUgYWJvdXQgdGhlIGRlbGV0ZSByaWdo dAotCQkgKiBhd2F5LCBiZWNhdXNlIHRoZSB0dXBsZSBpcyBzdGlsbCB2aXNpYmxlIHVudGlsIHRo ZSBkZWxldGluZwotCQkgKiB0cmFuc2FjdGlvbiBjb21taXRzIG9yIHRoZSBzdGF0ZW1lbnQgZW5k cyAoaWYgaXQncyBvdXIKLQkJICogdHJhbnNhY3Rpb24pLiBJbiBlaXRoZXIgY2FzZSwgdGhlIGxv Y2sgb24gdGhlIFZNIGJ1ZmZlciB3aWxsIGhhdmUKLQkJICogYmVlbiByZWxlYXNlZCAoYWN0aW5n IGFzIGEgd3JpdGUgYmFycmllcikgYWZ0ZXIgY2xlYXJpbmcgdGhlIGJpdC4KLQkJICogQW5kIGZv ciB1cyB0byBoYXZlIGEgc25hcHNob3QgdGhhdCBpbmNsdWRlcyB0aGUgZGVsZXRpbmcKLQkJICog dHJhbnNhY3Rpb24gKG1ha2luZyB0aGUgdHVwbGUgaW52aXNpYmxlKSwgd2UgbXVzdCBoYXZlIGFj cXVpcmVkCi0JCSAqIFByb2NBcnJheUxvY2sgYWZ0ZXIgdGhhdCB0aW1lLCBhY3RpbmcgYXMgYSBy ZWFkIGJhcnJpZXIuCi0JCSAqCi0JCSAqIEl0J3Mgd29ydGggZ29pbmcgdGhyb3VnaCB0aGlzIGNv bXBsZXhpdHkgdG8gYXZvaWQgbmVlZGluZyB0byBsb2NrCi0JCSAqIHRoZSBWTSBidWZmZXIsIHdo aWNoIGNvdWxkIGNhdXNlIHNpZ25pZmljYW50IGNvbnRlbnRpb24uCi0JCSAqLwotCQlpZiAoIVZN X0FMTF9WSVNJQkxFKHNjYW5kZXNjLT5oZWFwUmVsYXRpb24sCi0JCQkJCQkJSXRlbVBvaW50ZXJH ZXRCbG9ja051bWJlcih0aWQpLAotCQkJCQkJCSZub2RlLT5pb3NzX1ZNQnVmZmVyKSkKLQkJewot CQkJLyoKLQkJCSAqIFJhdHMsIHdlIGhhdmUgdG8gdmlzaXQgdGhlIGhlYXAgdG8gY2hlY2sgdmlz aWJpbGl0eS4KLQkJCSAqLwotCQkJSW5zdHJDb3VudFR1cGxlczIobm9kZSwgMSk7Ci0JCQlpZiAo IWluZGV4X2ZldGNoX2hlYXAoc2NhbmRlc2MsIG5vZGUtPmlvc3NfVGFibGVTbG90KSkKLQkJCQlj b250aW51ZTsJCS8qIG5vIHZpc2libGUgdHVwbGUsIHRyeSBuZXh0IGluZGV4IGVudHJ5ICovCi0K LQkJCUV4ZWNDbGVhclR1cGxlKG5vZGUtPmlvc3NfVGFibGVTbG90KTsKLQotCQkJLyoKLQkJCSAq IE9ubHkgTVZDQyBzbmFwc2hvdHMgYXJlIHN1cHBvcnRlZCBoZXJlLCBzbyB0aGVyZSBzaG91bGQg YmUgbm8KLQkJCSAqIG5lZWQgdG8ga2VlcCBmb2xsb3dpbmcgdGhlIEhPVCBjaGFpbiBvbmNlIGEg dmlzaWJsZSBlbnRyeSBoYXMKLQkJCSAqIGJlZW4gZm91bmQuICBJZiB3ZSBkaWQgd2FudCB0byBh bGxvdyB0aGF0LCB3ZSdkIG5lZWQgdG8ga2VlcAotCQkJICogbW9yZSBzdGF0ZSB0byByZW1lbWJl ciBub3QgdG8gY2FsbCBpbmRleF9nZXRuZXh0X3RpZCBuZXh0IHRpbWUuCi0JCQkgKi8KLQkJCWlm IChzY2FuZGVzYy0+eHNfaGVhcF9jb250aW51ZSkKLQkJCQllbG9nKEVSUk9SLCAibm9uLU1WQ0Mg c25hcHNob3RzIGFyZSBub3Qgc3VwcG9ydGVkIGluIGluZGV4LW9ubHkgc2NhbnMiKTsKLQotCQkJ LyoKLQkJCSAqIE5vdGU6IGF0IHRoaXMgcG9pbnQgd2UgYXJlIGhvbGRpbmcgYSBwaW4gb24gdGhl IGhlYXAgcGFnZSwgYXMKLQkJCSAqIHJlY29yZGVkIGluIHNjYW5kZXNjLT54c19jYnVmLiAgV2Ug Y291bGQgcmVsZWFzZSB0aGF0IHBpbiBub3csCi0JCQkgKiBidXQgaXQncyBub3QgY2xlYXIgd2hl dGhlciBpdCdzIGEgd2luIHRvIGRvIHNvLiAgVGhlIG5leHQgaW5kZXgKLQkJCSAqIGVudHJ5IG1p Z2h0IHJlcXVpcmUgYSB2aXNpdCB0byB0aGUgc2FtZSBoZWFwIHBhZ2UuCi0JCQkgKi8KLQotCQkJ dHVwbGVfZnJvbV9oZWFwID0gdHJ1ZTsKLQkJfQotCiAJCS8qCiAJCSAqIEZpbGwgdGhlIHNjYW4g dHVwbGUgc2xvdCB3aXRoIGRhdGEgZnJvbSB0aGUgaW5kZXguICBUaGlzIG1pZ2h0IGJlCiAJCSAq IHByb3ZpZGVkIGluIGVpdGhlciBIZWFwVHVwbGUgb3IgSW5kZXhUdXBsZSBmb3JtYXQuICBDb25j ZWl2YWJseSBhbgpAQCAtMjQxLDE2ICsxNjgsNiBAQCBJbmRleE9ubHlOZXh0KEluZGV4T25seVNj YW5TdGF0ZSAqbm9kZSkKIAkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCShlcnJjb2RlKEVSUkNPREVf RkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKIAkJCQkJIGVycm1zZygibG9zc3kgZGlzdGFuY2UgZnVu Y3Rpb25zIGFyZSBub3Qgc3VwcG9ydGVkIGluIGluZGV4LW9ubHkgc2NhbnMiKSkpOwotCi0JCS8q Ci0JCSAqIElmIHdlIGRpZG4ndCBhY2Nlc3MgdGhlIGhlYXAsIHRoZW4gd2UnbGwgbmVlZCB0byB0 YWtlIGEgcHJlZGljYXRlCi0JCSAqIGxvY2sgZXhwbGljaXRseSwgYXMgaWYgd2UgaGFkLiAgRm9y IG5vdyB3ZSBkbyB0aGF0IGF0IHBhZ2UgbGV2ZWwuCi0JCSAqLwotCQlpZiAoIXR1cGxlX2Zyb21f aGVhcCkKLQkJCVByZWRpY2F0ZUxvY2tQYWdlKHNjYW5kZXNjLT5oZWFwUmVsYXRpb24sCi0JCQkJ CQkJICBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCksCi0JCQkJCQkJICBlc3RhdGUtPmVz X3NuYXBzaG90KTsKLQogCQlyZXR1cm4gc2xvdDsKIAl9CiAKQEAgLTQxMCwxMyArMzI3LDYgQEAg RXhlY0VuZEluZGV4T25seVNjYW4oSW5kZXhPbmx5U2NhblN0YXRlICpub2RlKQogCWluZGV4UmVs YXRpb25EZXNjID0gbm9kZS0+aW9zc19SZWxhdGlvbkRlc2M7CiAJaW5kZXhTY2FuRGVzYyA9IG5v ZGUtPmlvc3NfU2NhbkRlc2M7CiAKLQkvKiBSZWxlYXNlIFZNIGJ1ZmZlciBwaW4sIGlmIGFueS4g Ki8KLQlpZiAobm9kZS0+aW9zc19WTUJ1ZmZlciAhPSBJbnZhbGlkQnVmZmVyKQotCXsKLQkJUmVs ZWFzZUJ1ZmZlcihub2RlLT5pb3NzX1ZNQnVmZmVyKTsKLQkJbm9kZS0+aW9zc19WTUJ1ZmZlciA9 IEludmFsaWRCdWZmZXI7Ci0JfQotCiAJLyoKIAkgKiBXaGVuIGVuZGluZyBhIHBhcmFsbGVsIHdv cmtlciwgY29weSB0aGUgc3RhdGlzdGljcyBnYXRoZXJlZCBieSB0aGUKIAkgKiB3b3JrZXIgYmFj ayBpbnRvIHNoYXJlZCBtZW1vcnkgc28gdGhhdCBpdCBjYW4gYmUgcGlja2VkIHVwIGJ5IHRoZSBt YWluCkBAIC00MzYsNiArMzQ2LDcgQEAgRXhlY0VuZEluZGV4T25seVNjYW4oSW5kZXhPbmx5U2Nh blN0YXRlICpub2RlKQogCQkgKiB3aGljaCB3aWxsIGhhdmUgYSBuZXcgSW5kZXhPbmx5U2NhblN0 YXRlIGFuZCB6ZXJvZWQgc3RhdHMuCiAJCSAqLwogCQl3aW5zdHJ1bWVudC0+bnNlYXJjaGVzICs9 IG5vZGUtPmlvc3NfSW5zdHJ1bWVudC0+bnNlYXJjaGVzOworCQl3aW5zdHJ1bWVudC0+bnRhYmxl dHVwbGVmZXRjaGVzICs9IG5vZGUtPmlvc3NfSW5zdHJ1bWVudC0+bnRhYmxldHVwbGVmZXRjaGVz OwogCX0KIAogCS8qCkBAIC03OTMsMTQgKzcwNCwxNCBAQCBFeGVjSW5kZXhPbmx5U2NhbkluaXRp YWxpemVEU00oSW5kZXhPbmx5U2NhblN0YXRlICpub2RlLAogCW5vZGUtPmlvc3NfU2NhbkRlc2Mg PQogCQlpbmRleF9iZWdpbnNjYW5fcGFyYWxsZWwobm9kZS0+c3Muc3NfY3VycmVudFJlbGF0aW9u LAogCQkJCQkJCQkgbm9kZS0+aW9zc19SZWxhdGlvbkRlc2MsCisJCQkJCQkJCSB0cnVlLAogCQkJ CQkJCQkgbm9kZS0+aW9zc19JbnN0cnVtZW50LAogCQkJCQkJCQkgbm9kZS0+aW9zc19OdW1TY2Fu S2V5cywKIAkJCQkJCQkJIG5vZGUtPmlvc3NfTnVtT3JkZXJCeUtleXMsCiAJCQkJCQkJCSBwaXNj YW4sCiAJCQkJCQkJCSBTY2FuUmVsSXNSZWFkT25seSgmbm9kZS0+c3MpID8KIAkJCQkJCQkJIFNP X0hJTlRfUkVMX1JFQURfT05MWSA6IFNPX05PTkUpOwotCW5vZGUtPmlvc3NfU2NhbkRlc2MtPnhz X3dhbnRfaXR1cCA9IHRydWU7Ci0Jbm9kZS0+aW9zc19WTUJ1ZmZlciA9IEludmFsaWRCdWZmZXI7 CisJQXNzZXJ0KG5vZGUtPmlvc3NfU2NhbkRlc2MtPnhzX3dhbnRfaXR1cCk7CiAKIAkvKgogCSAq IElmIG5vIHJ1bi10aW1lIGtleXMgdG8gY2FsY3VsYXRlIG9yIHRoZXkgYXJlIHJlYWR5LCBnbyBh aGVhZCBhbmQgcGFzcwpAQCAtODYxLDEzICs3NzIsMTQgQEAgRXhlY0luZGV4T25seVNjYW5Jbml0 aWFsaXplV29ya2VyKEluZGV4T25seVNjYW5TdGF0ZSAqbm9kZSwKIAlub2RlLT5pb3NzX1NjYW5E ZXNjID0KIAkJaW5kZXhfYmVnaW5zY2FuX3BhcmFsbGVsKG5vZGUtPnNzLnNzX2N1cnJlbnRSZWxh dGlvbiwKIAkJCQkJCQkJIG5vZGUtPmlvc3NfUmVsYXRpb25EZXNjLAorCQkJCQkJCQkgdHJ1ZSwK IAkJCQkJCQkJIG5vZGUtPmlvc3NfSW5zdHJ1bWVudCwKIAkJCQkJCQkJIG5vZGUtPmlvc3NfTnVt U2NhbktleXMsCiAJCQkJCQkJCSBub2RlLT5pb3NzX051bU9yZGVyQnlLZXlzLAogCQkJCQkJCQkg cGlzY2FuLAogCQkJCQkJCQkgU2NhblJlbElzUmVhZE9ubHkoJm5vZGUtPnNzKSA/CiAJCQkJCQkJ CSBTT19ISU5UX1JFTF9SRUFEX09OTFkgOiBTT19OT05FKTsKLQlub2RlLT5pb3NzX1NjYW5EZXNj LT54c193YW50X2l0dXAgPSB0cnVlOworCUFzc2VydChub2RlLT5pb3NzX1NjYW5EZXNjLT54c193 YW50X2l0dXApOwogCiAJLyoKIAkgKiBJZiBubyBydW4tdGltZSBrZXlzIHRvIGNhbGN1bGF0ZSBv ciB0aGV5IGFyZSByZWFkeSwgZ28gYWhlYWQgYW5kIHBhc3MKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL25vZGVJbmRleHNjYW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJ bmRleHNjYW4uYwppbmRleCAxNjIwZDE0NjAuLjJhYzg1NGRhNCAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9y L25vZGVJbmRleHNjYW4uYwpAQCAtMTEwLDYgKzExMCw3IEBAIEluZGV4TmV4dChJbmRleFNjYW5T dGF0ZSAqbm9kZSkKIAkJICovCiAJCXNjYW5kZXNjID0gaW5kZXhfYmVnaW5zY2FuKG5vZGUtPnNz LnNzX2N1cnJlbnRSZWxhdGlvbiwKIAkJCQkJCQkJICAgbm9kZS0+aXNzX1JlbGF0aW9uRGVzYywK KwkJCQkJCQkJICAgZmFsc2UsCiAJCQkJCQkJCSAgIGVzdGF0ZS0+ZXNfc25hcHNob3QsCiAJCQkJ CQkJCSAgIG5vZGUtPmlzc19JbnN0cnVtZW50LAogCQkJCQkJCQkgICBub2RlLT5pc3NfTnVtU2Nh bktleXMsCkBAIC0xMzIsNyArMTMzLDcgQEAgSW5kZXhOZXh0KEluZGV4U2NhblN0YXRlICpub2Rl KQogCS8qCiAJICogb2ssIG5vdyB0aGF0IHdlIGhhdmUgd2hhdCB3ZSBuZWVkLCBmZXRjaCB0aGUg bmV4dCB0dXBsZS4KIAkgKi8KLQl3aGlsZSAoaW5kZXhfZ2V0bmV4dF9zbG90KHNjYW5kZXNjLCBk aXJlY3Rpb24sIHNsb3QpKQorCXdoaWxlICh0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Qoc2NhbmRl c2MsIGRpcmVjdGlvbiwgc2xvdCkpCiAJewogCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwogCkBA IC0yMDgsNiArMjA5LDcgQEAgSW5kZXhOZXh0V2l0aFJlb3JkZXIoSW5kZXhTY2FuU3RhdGUgKm5v ZGUpCiAJCSAqLwogCQlzY2FuZGVzYyA9IGluZGV4X2JlZ2luc2Nhbihub2RlLT5zcy5zc19jdXJy ZW50UmVsYXRpb24sCiAJCQkJCQkJCSAgIG5vZGUtPmlzc19SZWxhdGlvbkRlc2MsCisJCQkJCQkJ CSAgIGZhbHNlLAogCQkJCQkJCQkgICBlc3RhdGUtPmVzX3NuYXBzaG90LAogCQkJCQkJCQkgICBu b2RlLT5pc3NfSW5zdHJ1bWVudCwKIAkJCQkJCQkJICAgbm9kZS0+aXNzX051bVNjYW5LZXlzLApA QCAtMjY2LDcgKzI2OCw3IEBAIEluZGV4TmV4dFdpdGhSZW9yZGVyKEluZGV4U2NhblN0YXRlICpu b2RlKQogCQkgKiBGZXRjaCBuZXh0IHR1cGxlIGZyb20gdGhlIGluZGV4LgogCQkgKi8KIG5leHRf aW5kZXh0dXBsZToKLQkJaWYgKCFpbmRleF9nZXRuZXh0X3Nsb3Qoc2NhbmRlc2MsIEZvcndhcmRT Y2FuRGlyZWN0aW9uLCBzbG90KSkKKwkJaWYgKCF0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Qoc2Nh bmRlc2MsIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBzbG90KSkKIAkJewogCQkJLyoKIAkJCSAqIE5v IG1vcmUgdHVwbGVzIGZyb20gdGhlIGluZGV4LiAgQnV0IHdlIHN0aWxsIG5lZWQgdG8gZHJhaW4g YW55CkBAIC04MTgsNiArODIwLDcgQEAgRXhlY0VuZEluZGV4U2NhbihJbmRleFNjYW5TdGF0ZSAq bm9kZSkKIAkJICogd2hpY2ggd2lsbCBoYXZlIGEgbmV3IEluZGV4T25seVNjYW5TdGF0ZSBhbmQg emVyb2VkIHN0YXRzLgogCQkgKi8KIAkJd2luc3RydW1lbnQtPm5zZWFyY2hlcyArPSBub2RlLT5p c3NfSW5zdHJ1bWVudC0+bnNlYXJjaGVzOworCQlBc3NlcnQobm9kZS0+aXNzX0luc3RydW1lbnQt Pm50YWJsZXR1cGxlZmV0Y2hlcyA9PSAwKTsKIAl9CiAKIAkvKgpAQCAtMTczMSw2ICsxNzM0LDcg QEAgRXhlY0luZGV4U2NhbkluaXRpYWxpemVEU00oSW5kZXhTY2FuU3RhdGUgKm5vZGUsCiAJbm9k ZS0+aXNzX1NjYW5EZXNjID0KIAkJaW5kZXhfYmVnaW5zY2FuX3BhcmFsbGVsKG5vZGUtPnNzLnNz X2N1cnJlbnRSZWxhdGlvbiwKIAkJCQkJCQkJIG5vZGUtPmlzc19SZWxhdGlvbkRlc2MsCisJCQkJ CQkJCSBmYWxzZSwKIAkJCQkJCQkJIG5vZGUtPmlzc19JbnN0cnVtZW50LAogCQkJCQkJCQkgbm9k ZS0+aXNzX051bVNjYW5LZXlzLAogCQkJCQkJCQkgbm9kZS0+aXNzX051bU9yZGVyQnlLZXlzLApA QCAtMTc5Nyw2ICsxODAxLDcgQEAgRXhlY0luZGV4U2NhbkluaXRpYWxpemVXb3JrZXIoSW5kZXhT Y2FuU3RhdGUgKm5vZGUsCiAJbm9kZS0+aXNzX1NjYW5EZXNjID0KIAkJaW5kZXhfYmVnaW5zY2Fu X3BhcmFsbGVsKG5vZGUtPnNzLnNzX2N1cnJlbnRSZWxhdGlvbiwKIAkJCQkJCQkJIG5vZGUtPmlz c19SZWxhdGlvbkRlc2MsCisJCQkJCQkJCSBmYWxzZSwKIAkJCQkJCQkJIG5vZGUtPmlzc19JbnN0 cnVtZW50LAogCQkJCQkJCQkgbm9kZS0+aXNzX051bVNjYW5LZXlzLAogCQkJCQkJCQkgbm9kZS0+ aXNzX051bU9yZGVyQnlLZXlzLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3Jp X3RyaWdnZXJzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcmlfdHJpZ2dlcnMuYwppbmRleCA4 NGY5ZmVjZGIuLmZjZWI1NjM4NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3Jp X3RyaWdnZXJzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3JpX3RyaWdnZXJzLmMKQEAg LTI4MDMsNyArMjgwMyw3IEBAIHJpX0Zhc3RQYXRoQ2hlY2soY29uc3QgUklfQ29uc3RyYWludElu Zm8gKnJpaW5mbywKIAlpZHhfcmVsID0gaW5kZXhfb3BlbihyaWluZm8tPmNvbmluZGlkLCBBY2Nl c3NTaGFyZUxvY2spOwogCiAJc2xvdCA9IHRhYmxlX3Nsb3RfY3JlYXRlKHBrX3JlbCwgTlVMTCk7 Ci0Jc2NhbmRlc2MgPSBpbmRleF9iZWdpbnNjYW4ocGtfcmVsLCBpZHhfcmVsLAorCXNjYW5kZXNj ID0gaW5kZXhfYmVnaW5zY2FuKHBrX3JlbCwgaWR4X3JlbCwgZmFsc2UsCiAJCQkJCQkJICAgc25h cHNob3QsIE5VTEwsCiAJCQkJCQkJICAgcmlpbmZvLT5ua2V5cywgMCwKIAkJCQkJCQkgICBTT19O T05FKTsKQEAgLTI5MTgsNyArMjkxOCw3IEBAIHJpX0Zhc3RQYXRoQmF0Y2hGbHVzaChSSV9GYXN0 UGF0aEVudHJ5ICpmcGVudHJ5LCBSZWxhdGlvbiBma19yZWwsCiAJICovCiAJb2xkY3h0ID0gTWVt b3J5Q29udGV4dFN3aXRjaFRvKGZwZW50cnktPmZsdXNoX2N4dCk7CiAKLQlzY2FuZGVzYyA9IGlu ZGV4X2JlZ2luc2Nhbihwa19yZWwsIGlkeF9yZWwsIHNuYXBzaG90LCBOVUxMLAorCXNjYW5kZXNj ID0gaW5kZXhfYmVnaW5zY2FuKHBrX3JlbCwgaWR4X3JlbCwgZmFsc2UsIHNuYXBzaG90LCBOVUxM LAogCQkJCQkJCSAgIHJpaW5mby0+bmtleXMsIDAsIFNPX05PTkUpOwogCiAJR2V0VXNlcklkQW5k U2VjQ29udGV4dCgmc2F2ZWRfdXNlcmlkLCAmc2F2ZWRfc2VjX2NvbnRleHQpOwpAQCAtMzExMiw3 ICszMTEyLDcgQEAgcmlfRmFzdFBhdGhGbHVzaEFycmF5KFJJX0Zhc3RQYXRoRW50cnkgKmZwZW50 cnksIFR1cGxlVGFibGVTbG90ICpma19zbG90LAogCSAqIFdhbGsgYWxsIG1hdGNoZXMuICBUaGUg aW5kZXggQU0gcmV0dXJucyB0aGVtIGluIGluZGV4IG9yZGVyLiAgRm9yIGVhY2gKIAkgKiBtYXRj aCwgZmluZCB3aGljaCBiYXRjaCBpdGVtKHMpIGl0IHNhdGlzZmllcy4KIAkgKi8KLQl3aGlsZSAo aW5kZXhfZ2V0bmV4dF9zbG90KHNjYW5kZXNjLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgcGtfc2xv dCkpCisJd2hpbGUgKHRhYmxlX2luZGV4X2dldG5leHRfc2xvdChzY2FuZGVzYywgRm9yd2FyZFNj YW5EaXJlY3Rpb24sIHBrX3Nsb3QpKQogCXsKIAkJRGF0dW0JCWZvdW5kX3ZhbDsKIAkJYm9vbAkJ Zm91bmRfbnVsbDsKQEAgLTMxODUsNyArMzE4NSw3IEBAIHJpX0Zhc3RQYXRoUHJvYmVPbmUoUmVs YXRpb24gcGtfcmVsLCBSZWxhdGlvbiBpZHhfcmVsLAogCiAJaW5kZXhfcmVzY2FuKHNjYW5kZXNj LCBza2V5LCBua2V5cywgTlVMTCwgMCk7CiAKLQlpZiAoaW5kZXhfZ2V0bmV4dF9zbG90KHNjYW5k ZXNjLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgc2xvdCkpCisJaWYgKHRhYmxlX2luZGV4X2dldG5l eHRfc2xvdChzY2FuZGVzYywgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIHNsb3QpKQogCXsKIAkJYm9v bAkJY29uY3VycmVudGx5X3VwZGF0ZWQ7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxz L2FkdC9zZWxmdW5jcy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNzLmMKaW5kZXgg NDE2MGQyZDZlLi42YTFkZmFiNTEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9z ZWxmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5jCkBAIC0xMDIs NyArMTAyLDYgQEAKICNpbmNsdWRlICJhY2Nlc3MvZ2luLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3Rh YmxlLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3RhYmxlYW0uaCIKLSNpbmNsdWRlICJhY2Nlc3Mvdmlz aWJpbGl0eW1hcC5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfY29sbGF0aW9uLmgiCiAjaW5jbHVk ZSAiY2F0YWxvZy9wZ19vcGVyYXRvci5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfc3RhdGlzdGlj LmgiCkBAIC03MTIxLDEwICs3MTIwLDYgQEAgZ2V0X2FjdHVhbF92YXJpYWJsZV9lbmRwb2ludChS ZWxhdGlvbiBoZWFwUmVsLAogCWJvb2wJCWhhdmVfZGF0YSA9IGZhbHNlOwogCVNuYXBzaG90RGF0 YSBTbmFwc2hvdE5vblZhY3V1bWFibGU7CiAJSW5kZXhTY2FuRGVzYyBpbmRleF9zY2FuOwotCUJ1 ZmZlcgkJdm1idWZmZXIgPSBJbnZhbGlkQnVmZmVyOwotCUJsb2NrTnVtYmVyIGxhc3RfaGVhcF9i bG9jayA9IEludmFsaWRCbG9ja051bWJlcjsKLQlpbnQJCQluX3Zpc2l0ZWRfaGVhcF9wYWdlcyA9 IDA7Ci0JSXRlbVBvaW50ZXIgdGlkOwogCURhdHVtCQl2YWx1ZXNbSU5ERVhfTUFYX0tFWVNdOwog CWJvb2wJCWlzbnVsbFtJTkRFWF9NQVhfS0VZU107CiAJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0 OwpAQCAtNzE3Miw2MiArNzE2NywyNiBAQCBnZXRfYWN0dWFsX3ZhcmlhYmxlX2VuZHBvaW50KFJl bGF0aW9uIGhlYXBSZWwsCiAJICogYSBodWdlIGFtb3VudCBvZiB0aW1lIGhlcmUsIHNvIHdlIGdp dmUgdXAgb25jZSB3ZSd2ZSByZWFkIHRvbyBtYW55IGhlYXAKIAkgKiBwYWdlcy4gIFdoZW4gd2Ug ZmFpbCBmb3IgdGhhdCByZWFzb24sIHRoZSBjYWxsZXIgd2lsbCBlbmQgdXAgdXNpbmcKIAkgKiB3 aGF0ZXZlciBleHRyZW1hbCB2YWx1ZSBpcyByZWNvcmRlZCBpbiBwZ19zdGF0aXN0aWMuCisJICoK KwkgKiBXZSBzZXQgeHNfdmlzaXRlZF9wYWdlc19saW1pdCB0byB0ZWxsIHRoZSB0YWJsZSBBTSB0 byBjb3VudCBkaXN0aW5jdAorCSAqIGhlYXAgcGFnZXMgdmlzaXRlZCBmb3Igbm9uLXZpc2libGUg dHVwbGVzIGFuZCBnaXZlIHVwIGFmdGVyIHRoZSBsaW1pdAorCSAqIGlzIGV4Y2VlZGVkLgogCSAq LworI2RlZmluZSBWSVNJVEVEX1BBR0VTX0xJTUlUIDEwMAogCUluaXROb25WYWN1dW1hYmxlU25h cHNob3QoU25hcHNob3ROb25WYWN1dW1hYmxlLAogCQkJCQkJCSAgR2xvYmFsVmlzVGVzdEZvciho ZWFwUmVsKSk7CiAKLQlpbmRleF9zY2FuID0gaW5kZXhfYmVnaW5zY2FuKGhlYXBSZWwsIGluZGV4 UmVsLAorCWluZGV4X3NjYW4gPSBpbmRleF9iZWdpbnNjYW4oaGVhcFJlbCwgaW5kZXhSZWwsIHRy dWUsCiAJCQkJCQkJCSAmU25hcHNob3ROb25WYWN1dW1hYmxlLCBOVUxMLAogCQkJCQkJCQkgMSwg MCwKIAkJCQkJCQkJIFNPX05PTkUpOwotCS8qIFNldCBpdCB1cCBmb3IgaW5kZXgtb25seSBzY2Fu ICovCi0JaW5kZXhfc2Nhbi0+eHNfd2FudF9pdHVwID0gdHJ1ZTsKKwlBc3NlcnQoaW5kZXhfc2Nh bi0+eHNfd2FudF9pdHVwKTsKKwlpbmRleF9zY2FuLT54c192aXNpdGVkX3BhZ2VzX2xpbWl0ID0g VklTSVRFRF9QQUdFU19MSU1JVDsKIAlpbmRleF9yZXNjYW4oaW5kZXhfc2Nhbiwgc2NhbmtleXMs IDEsIE5VTEwsIDApOwogCiAJLyogRmV0Y2ggZmlyc3QvbmV4dCB0dXBsZSBpbiBzcGVjaWZpZWQg ZGlyZWN0aW9uICovCi0Jd2hpbGUgKCh0aWQgPSBpbmRleF9nZXRuZXh0X3RpZChpbmRleF9zY2Fu LCBpbmRleHNjYW5kaXIpKSAhPSBOVUxMKQorCXdoaWxlICh0YWJsZV9pbmRleF9nZXRuZXh0X3Ns b3QoaW5kZXhfc2NhbiwgaW5kZXhzY2FuZGlyLCB0YWJsZXNsb3QpKQogCXsKLQkJQmxvY2tOdW1i ZXIgYmxvY2sgPSBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCk7Ci0KLQkJaWYgKCFWTV9B TExfVklTSUJMRShoZWFwUmVsLAotCQkJCQkJCWJsb2NrLAotCQkJCQkJCSZ2bWJ1ZmZlcikpCi0J CXsKLQkJCS8qIFJhdHMsIHdlIGhhdmUgdG8gdmlzaXQgdGhlIGhlYXAgdG8gY2hlY2sgdmlzaWJp bGl0eSAqLwotCQkJaWYgKCFpbmRleF9mZXRjaF9oZWFwKGluZGV4X3NjYW4sIHRhYmxlc2xvdCkp Ci0JCQl7Ci0JCQkJLyoKLQkJCQkgKiBObyB2aXNpYmxlIHR1cGxlIGZvciB0aGlzIGluZGV4IGVu dHJ5LCBzbyB3ZSBuZWVkIHRvCi0JCQkJICogYWR2YW5jZSB0byB0aGUgbmV4dCBlbnRyeS4gIEJl Zm9yZSBkb2luZyBzbywgY291bnQgaGVhcAotCQkJCSAqIHBhZ2UgZmV0Y2hlcyBhbmQgZ2l2ZSB1 cCBpZiB3ZSd2ZSBkb25lIHRvbyBtYW55LgotCQkJCSAqCi0JCQkJICogV2UgZG9uJ3QgY2hhcmdl IGEgcGFnZSBmZXRjaCBpZiB0aGlzIGlzIHRoZSBzYW1lIGhlYXAgcGFnZQotCQkJCSAqIGFzIHRo ZSBwcmV2aW91cyB0dXBsZS4gIFRoaXMgaXMgb24gdGhlIGNvbnNlcnZhdGl2ZSBzaWRlLAotCQkJ CSAqIHNpbmNlIG90aGVyIHJlY2VudGx5LWFjY2Vzc2VkIHBhZ2VzIGFyZSBwcm9iYWJseSBzdGls bCBpbgotCQkJCSAqIGJ1ZmZlcnMgdG9vOyBidXQgaXQncyBnb29kIGVub3VnaCBmb3IgdGhpcyBo ZXVyaXN0aWMuCi0JCQkJICovCi0jZGVmaW5lIFZJU0lURURfUEFHRVNfTElNSVQgMTAwCi0KLQkJ CQlpZiAoYmxvY2sgIT0gbGFzdF9oZWFwX2Jsb2NrKQotCQkJCXsKLQkJCQkJbGFzdF9oZWFwX2Js b2NrID0gYmxvY2s7Ci0JCQkJCW5fdmlzaXRlZF9oZWFwX3BhZ2VzKys7Ci0JCQkJCWlmIChuX3Zp c2l0ZWRfaGVhcF9wYWdlcyA+IFZJU0lURURfUEFHRVNfTElNSVQpCi0JCQkJCQlicmVhazsKLQkJ CQl9Ci0KLQkJCQljb250aW51ZTsJCS8qIG5vIHZpc2libGUgdHVwbGUsIHRyeSBuZXh0IGluZGV4 IGVudHJ5ICovCi0JCQl9Ci0KLQkJCS8qIFdlIGRvbid0IGFjdHVhbGx5IG5lZWQgdGhlIGhlYXAg dHVwbGUgZm9yIGFueXRoaW5nICovCi0JCQlFeGVjQ2xlYXJUdXBsZSh0YWJsZXNsb3QpOwotCi0J CQkvKgotCQkJICogV2UgZG9uJ3QgY2FyZSB3aGV0aGVyIHRoZXJlJ3MgbW9yZSB0aGFuIG9uZSB2 aXNpYmxlIHR1cGxlIGluCi0JCQkgKiB0aGUgSE9UIGNoYWluOyBpZiBhbnkgYXJlIHZpc2libGUs IHRoYXQncyBnb29kIGVub3VnaC4KLQkJCSAqLwotCQl9Ci0KIAkJLyoKIAkJICogV2UgZXhwZWN0 IHRoYXQgdGhlIGluZGV4IHdpbGwgcmV0dXJuIGRhdGEgaW4gSW5kZXhUdXBsZSBub3QKIAkJICog SGVhcFR1cGxlIGZvcm1hdC4KQEAgLTcyNTksOCArNzIxOCw2IEBAIGdldF9hY3R1YWxfdmFyaWFi bGVfZW5kcG9pbnQoUmVsYXRpb24gaGVhcFJlbCwKIAkJYnJlYWs7CiAJfQogCi0JaWYgKHZtYnVm ZmVyICE9IEludmFsaWRCdWZmZXIpCi0JCVJlbGVhc2VCdWZmZXIodm1idWZmZXIpOwogCWluZGV4 X2VuZHNjYW4oaW5kZXhfc2Nhbik7CiAKIAlyZXR1cm4gaGF2ZV9kYXRhOwotLSAKMi41My4wCgo= --0000000000002eda15064ecc7bcf Content-Type: application/octet-stream; name="v24-0008-WIP-aio-bufmgr-Fix-race-condition-leading-to-dea.patch" Content-Disposition: attachment; filename="v24-0008-WIP-aio-bufmgr-Fix-race-condition-leading-to-dea.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnncq24u1 RnJvbSBjNmY4ZDAzYTBjNzA3Nzc1ZTVmMmMwNTdkNWU2YTdiOTExOGRmMzZmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFN1biwgMjIgTWFyIDIwMjYgMTU6MTk6MDggLTA0MDAKU3ViamVjdDogW1BBVENIIHYyNCA4 LzhdIFdJUDogYWlvOiBidWZtZ3I6IEZpeCByYWNlIGNvbmRpdGlvbiBsZWFkaW5nIHRvCiBkZWFk bG9ja3Mgd2l0aCBpb191cmluZwoKSWYgYmFja2VuZCBBIGlzIGluIHRoZSBwcm9jZXNzIG9mIHN0 YXJ0aW5nIElPIGZvciBhIGJ1ZmZlciwgdGhlcmUgaXMgYSBzaG9ydApwZXJpb2QgaW4gd2hpY2gg dGhlIGJ1ZmZlciBpcyBtYXJrZWQgYXMgSU9fSU5fUFJPR1JFU1Mgd2l0aG91dCBoYXZpbmcgYW4K YXNzb2NpYXRlZCBBSU8gd2FpdCByZWZlcmVuY2UuIElmIGEgYmFja2VuZCBCIGRvZXMgV2FpdElP KCkgb24gdGhhdCBidWZmZXIsCml0J2xsIHdhaXQgZm9yIHRoZSBidWZmZXIncyBJTyBjb25kaXRp b24gdmFyaWFibGUgdG8gYmUgc2V0LiBNb3N0IG9mIHRoZSB0aW1lCnRoYXQgaXMgT0ssIHdoZW4g dGhlIElPIG9uIHRoZSBidWZmZXIgZmluaXNoZXMsIHRoZSBDViB3aWxsIGJlIHNpZ25hbGxlZC4K SG93ZXZlciwgd2l0aCBpb191cmluZywgaXQgaXMgcG9zc2libGUgdGhhdCB0aGUgaXNzdWVyIChB KSBvZiB0aGUgSU8gbmV2ZXIKZ2V0cyBhcm91bmQgdG8gZG9pbmcgc28sIGUuZy4gYmVjYXVzZSBp dCBpcyB3YWl0aW5nIGZvciBzb21ldGhpbmcgZG9uZSBieSBCLgoKVG8gZml4IHRoYXQsIHdlIG5l ZWQgdG8gc2lnbmFsIHRoZSBDViB3aGVuIHN0YWdpbmcgSU8uIFRoYXQncyBhbm5veWluZyBhcyBD Vgpicm9hZGNhc3RzIGFyZSBub3QgY2hlYXAuIFNvIHdlIGF0IGxlYXN0IGF2b2lkIGl0IGZvciB0 aGUgY29tbW9uIGNhc2Ugb2YgSU8KYmVpbmcgZXhlY3V0ZWQgc3luY2hyb25vdXNseS4KCkkgaG9w ZSB0aGF0IGV2ZW50dWFsbHkgd2UgY2FuIGdldCBhd2F5IGZyb20gbmVlZGluZyBtdWx0aXBsZSBz eXN0ZW1zIGZvcgpzaWduYWxsaW5nIElPIGNvbXBsZXRpb24sIGJ1dCB3ZSBhcmUgY2xlYXJseSBu b3QgdGhlcmUgeWV0LgotLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jIHwg MjIgKysrKysrKysrKysrKysrKysrKy0tLQogMSBmaWxlIGNoYW5nZWQsIDE5IGluc2VydGlvbnMo KyksIDMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZm ZXIvYnVmbWdyLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYwppbmRleCAz MzUwZjc4ZDAuLjcxODk5YzVhOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZm ZXIvYnVmbWdyLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKQEAg LTgzMTIsNyArODMxMiw3IEBAIE1hcmtEaXJ0eUFsbFVucGlubmVkQnVmZmVycyhpbnQzMiAqYnVm ZmVyc19kaXJ0aWVkLAogICogcmVwbGFjZWQgd2hpbGUgSU8gaXMgb25nb2luZy4KICAqLwogc3Rh dGljIHBnX2F0dHJpYnV0ZV9hbHdheXNfaW5saW5lIHZvaWQKLWJ1ZmZlcl9zdGFnZV9jb21tb24o UGdBaW9IYW5kbGUgKmlvaCwgYm9vbCBpc193cml0ZSwgYm9vbCBpc190ZW1wKQorYnVmZmVyX3N0 YWdlX2NvbW1vbihQZ0Fpb0hhbmRsZSAqaW9oLCB1aW50OCBjYl9kYXRhLCBib29sIGlzX3dyaXRl LCBib29sIGlzX3RlbXApCiB7CiAJdWludDY0CSAgICppb19kYXRhOwogCXVpbnQ4CQloYW5kbGVf ZGF0YV9sZW47CkBAIC04NDExLDcgKzg0MTEsMjMgQEAgYnVmZmVyX3N0YWdlX2NvbW1vbihQZ0Fp b0hhbmRsZSAqaW9oLCBib29sIGlzX3dyaXRlLCBib29sIGlzX3RlbXApCiAJCSAqIGtlZXBzIHRy YWNrLgogCQkgKi8KIAkJaWYgKCFpc190ZW1wKQorCQl7CiAJCQlSZXNvdXJjZU93bmVyRm9yZ2V0 QnVmZmVySU8oQ3VycmVudFJlc291cmNlT3duZXIsIGJ1ZmZlcik7CisKKwkJCS8qCisJCQkgKiBB IGJhY2tlbmQgbWlnaHQgaGF2ZSBzdGFydGVkIHdhaXRpbmcgZm9yIHRoZSBJTyB1c2luZyB0aGUK KwkJCSAqIGJ1ZmZlcidzIGNvbmRpdGlvbiB2YXJpYWJsZSwgYnV0IG9uY2UgdGhlIElPIGlzIHN1 Ym1pdHRlZCwgaXQKKwkJCSAqIHNob3VsZCB3YWl0IHZpYSB0aGUgQUlPIHN1YnN5c3RlbSwgYXMg YSB3YWl0ZXIgbWlnaHQgbmVlZCB0bworCQkJICogY29tcGxldGUgdGhlIElPLgorCQkJICoKKwkJ CSAqIEhvd2V2ZXIsIGRvaW5nIGJyb2FkY2FzdHMgaXMgbm90IGZyZWUsIHNvIHdlIGxpa2UgdG8g YXZvaWQgaXQKKwkJCSAqIHdoZW4gbm90IG5lY2Vzc2FyeS4gSWYgdGhlIElPIGlzIGJlaW5nIGV4 ZWN1dGVkIHN5bmNocm9ub3VzbHksCisJCQkgKiB0aGlzIGJhY2tlbmQgd2lsbCBhbHdheXMgZW5k IHVwIHNpZ25hbGxpbmcgdGhlIElPQ1Ygd2l0aG91dAorCQkJICogZnVydGhlciB3YWl0aW5nLCB0 aGVyZWZvcmUgYXZvaWQgZG9pbmcgc28gaGVyZS4KKwkJCSAqLworCQkJaWYgKCEoY2JfZGF0YSAm IFJFQURfQlVGRkVSU19TWU5DSFJPTk9VU0xZKSkKKwkJCQlDb25kaXRpb25WYXJpYWJsZUJyb2Fk Y2FzdChCdWZmZXJEZXNjcmlwdG9yR2V0SU9DVihidWZfaGRyKSk7CisJCX0KIAl9CiB9CiAKQEAg LTg5MDcsNyArODkyMyw3IEBAIGJ1ZmZlcl9yZWFkdl9yZXBvcnQoUGdBaW9SZXN1bHQgcmVzdWx0 LCBjb25zdCBQZ0Fpb1RhcmdldERhdGEgKnRkLAogc3RhdGljIHZvaWQKIHNoYXJlZF9idWZmZXJf cmVhZHZfc3RhZ2UoUGdBaW9IYW5kbGUgKmlvaCwgdWludDggY2JfZGF0YSkKIHsKLQlidWZmZXJf c3RhZ2VfY29tbW9uKGlvaCwgZmFsc2UsIGZhbHNlKTsKKwlidWZmZXJfc3RhZ2VfY29tbW9uKGlv aCwgY2JfZGF0YSwgZmFsc2UsIGZhbHNlKTsKIH0KIAogc3RhdGljIFBnQWlvUmVzdWx0CkBAIC04 OTU4LDcgKzg5NzQsNyBAQCBzaGFyZWRfYnVmZmVyX3JlYWR2X2NvbXBsZXRlX2xvY2FsKFBnQWlv SGFuZGxlICppb2gsIFBnQWlvUmVzdWx0IHByaW9yX3Jlc3VsdCwKIHN0YXRpYyB2b2lkCiBsb2Nh bF9idWZmZXJfcmVhZHZfc3RhZ2UoUGdBaW9IYW5kbGUgKmlvaCwgdWludDggY2JfZGF0YSkKIHsK LQlidWZmZXJfc3RhZ2VfY29tbW9uKGlvaCwgZmFsc2UsIHRydWUpOworCWJ1ZmZlcl9zdGFnZV9j b21tb24oaW9oLCBjYl9kYXRhLCBmYWxzZSwgdHJ1ZSk7CiB9CiAKIHN0YXRpYyBQZ0Fpb1Jlc3Vs dAotLSAKMi41My4wCgo= --0000000000002eda15064ecc7bcf Content-Type: application/octet-stream; name="v24-0003-Adopt-amgetbatch-interface-in-hash-index-AM.patch" Content-Disposition: attachment; filename="v24-0003-Adopt-amgetbatch-interface-in-hash-index-AM.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnncq2556 RnJvbSA1NGMxNTQ0YzljZWE3ZmQ3MzY4ZWM4ODk4MzJjYmEwZjUzMzJiN2ZkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFR1 ZSwgMjUgTm92IDIwMjUgMTg6MDM6MTUgLTA1MDAKU3ViamVjdDogW1BBVENIIHYyNCAzLzhdIEFk b3B0IGFtZ2V0YmF0Y2ggaW50ZXJmYWNlIGluIGhhc2ggaW5kZXggQU0uCgpSZXBsYWNlIGhhc2hn ZXR0dXBsZSB3aXRoIGhhc2hnZXRiYXRjaCwgYSBmdW5jdGlvbiB0aGF0IGltcGxlbWVudHMgdGhl Cm5ldyBhbWdldGJhdGNoIGludGVyZmFjZSBhZGRlZCBieSBjb21taXQgRklYTUUuICBQbGFpbiBp bmRleCBzY2FucyBvZgpoYXNoIGluZGV4ZXMgbm93IHJldHVybiBtYXRjaGluZyBpdGVtcyBpbiBi YXRjaGVzIGNvbnNpc3Rpbmcgb2YgYWxsIG9mCnRoZSBtYXRjaGVzIGZyb20gYSBnaXZlbiBidWNr ZXQgb3Igb3ZlcmZsb3cgcGFnZS4gIFRoaXMgZ2l2ZXMgdGhlIHRhYmxlCkFNIHRoZSBhYmlsaXR5 IHRvIHBlcmZvcm0gb3B0aW1pemF0aW9ucyBsaWtlIGluZGV4IHByZWZldGNoaW5nIGR1cmluZwpo YXNoIGluZGV4IHNjYW5zLgoKYmF0Y2hJbW1lZGlhdGVVbmd1YXJkIGlzIGFsd2F5cyB0cnVlIGR1 cmluZyBoYXNoIGluZGV4IHNjYW5zIChzaW5jZSBoYXNoCmRvZXNuJ3Qgc3VwcG9ydCBpbmRleC1v bmx5IHNjYW5zIGFuZCBhbHdheXMgdXNlcyBhbiBNVkNDIHNuYXBzaG90KSwgc28KdGhlIGJ1ZmZl ciBwaW4gaW50ZXJsb2NrIGhlbGQgb24gZWFjaCBiYXRjaCBpcyBhbHdheXMgZHJvcHBlZCBhdCB1 bmxvY2sKdGltZSAtLSBiZWZvcmUgdGhlIGJhdGNoIGlzIGV2ZW4gcmV0dXJuZWQgdG8gdGhlIHRh YmxlIEFNLiAgVGhpcyBkaWZmZXJzCmZyb20gaGFzaCdzIHByZXZpb3VzIGFwcHJvYWNoIG9mIGhv bGRpbmcgb24gdG8gYSBwaW4gZm9yIGF0IGxlYXN0IGFzCmxvbmcgYXMgdGhlIHNjYW4gd2FzIHN0 b3BwZWQgb24gdGhlIHBpbm5lZCBpbmRleCBwYWdlLgoKQW4gYW11bmd1YXJkYmF0Y2ggY2FsbGJh Y2sgaXMgYSByZXF1aXJlbWVudCBmb3IgYW1nZXRiYXRjaCBpbmRleCBBTXMuCmhhc2h1bmd1YXJk YmF0Y2ggaXMgcHJvdmlkZWQsIGV2ZW4gdGhvdWdoIGl0IGlzIG5vdCBjdXJyZW50bHkgdXNlZCBk dWUKdG8gYmF0Y2hJbW1lZGlhdGVVbmd1YXJkIGFsd2F5cyBiZWluZyB0cnVlIGluIHByYWN0aWNl LiAgVGhhdCBtaWdodCBub3QKcmVtYWluIHRydWUgaW4gdGhlIGZ1dHVyZSwgd2l0aCBvdGhlciB0 YWJsZSBBTXMgdGhhdCB1c2UgYW4gYWx0ZXJuYXRpdmUKZm9ybSBvZiBpbnRlcmxvY2suICBXaGls ZSB0aGUgcnVsZXMgdGhhdCBkZXRlcm1pbmUgd2hldGhlciBhIHNjYW4gaXMKYmF0Y2hJbW1lZGlh dGVVbmd1YXJkIGNhbm5vdCBiZSBpbmZsdWVuY2VkIGJ5IHRoZSB0YWJsZSBBTSByaWdodCBub3cs CnRoYXQgbWlnaHQgdmVyeSB3ZWxsIGNoYW5nZSBhcyByZXF1aXJlbWVudHMgZnJvbSB0YWJsZSBB TXMgZGljdGF0ZS4KCkd1YXJhbnRlZWluZyB0aGF0IHJldHVybmVkIGJhdGNoZXMgaG9sZCBubyBi dWZmZXIgcGlucyBvbiBpbmRleCBwYWdlcwpncmVhdGx5IHNpbXBsaWZpZXMgcmVzb3VyY2UgbWFu YWdlbWVudCBkdXJpbmcgaW5kZXggcHJlZmV0Y2hpbmcsIHdoZXJlCnRoZSByZWFkIHN0cmVhbSBp cyBleHBlY3RlZCB0byBob2xkIG1hbnkgcGlucyBvbiBoZWFwIHBhZ2VzLiAgVGhlCmFtZ2V0YmF0 Y2ggaW50ZXJmYWNlIHJlcXVpcmVzIHRoYXQgaW5kZXggQU1zIHRha2UgdGhlIHNhbWUgc3RhbmRh cmRpemVkCmFwcHJvYWNoIHRvIHBpbiBtYW5hZ2VtZW50IGZvciBwaW5zIHRoYXQgYXJlIHVzZWQg dG8gcHJldmVudCB1bnNhZmUKY29uY3VycmVudCBUSUQgcmVjeWNsaW5nIGJ5IFZBQ1VVTSAodGhh dCB3YXkgcHJlZmV0Y2hpbmcgY2FuIGhvbGQgb3BlbgptdWx0aXBsZSBiYXRjaGVzIHdpdGhvdXQg aXQgYWZmZWN0aW5nIHRoZSByZWFkIHN0cmVhbSkuICBOb3RlLCBob3dldmVyLAp0aGF0IGhhc2gg c3RpbGwgaG9sZHMgb24gdG8gcGlucyBuZWVkZWQgZm9yIGl0cyBvd24gaW50ZXJuYWwgcHVycG9z ZXMKKGUuZy4sIGl0J2xsIHN0aWxsIGhvbGQgb250byBhIHBpbiBkdXJpbmcgYSBidWNrZXQgc3Bs aXQpLgoKaGFzaGtpbGxpdGVtc2JhdGNoICh0aGUgaGFzaCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUg bmV3IGFta2lsbGl0ZW1zYmF0Y2gKaW50ZXJmYWNlKSBwZXJmb3JtcyBMUF9ERUFEIG1hcmtpbmcg b2YgZGVhZCBpbmRleCBlbnRyaWVzLCB3aGlsZQpmb2xsb3dpbmcgc2xpZ2h0bHkgZGlmZmVyZW50 IHJ1bGVzIHRvIHRoZSBvbGQgYXBwcm9hY2guICBJdCByZWxpZXMgb24KY29tcGFyaW5nIHRoZSBi YXRjaCdzIHNhdmVkIExTTiBhZ2FpbnN0IHRoZSBjdXJyZW50IHBhZ2UgTFNOIHRvIGRldGVjdApj b25jdXJyZW50IHBhZ2UgbW9kaWZpY2F0aW9ucywgd2hpY2ggaW4gdHVybiByZXF1aXJlcyBmYWtl IExTTiBzdXBwb3J0CmZvciB1bmxvZ2dlZCByZWxhdGlvbnMuICBQcmVwYXJhdG9yeSBjb21taXQg ZTU4MzZmN2IgYWRkZWQgdGhhdCBzdXBwb3J0CnRvIHRoZSBoYXNoIGluZGV4IEFNLgoKQXV0aG9y OiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+ClJldmlld2VkLUJ5OiBUb21hcyBWb25kcmEg PHRvbWFzQHZvbmRyYS5tZT4KUmV2aWV3ZWQtQnk6IEFuZHJlcyBGcmV1bmQgPGFuZHJlc0BhbmFy YXplbC5kZT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQUgyLVd6bVlxaGFjQkgx NjFwZUFXYjVlRj1KYTdDRkFRKzBqU0VNcT1xbmZMVlRPT2dAbWFpbC5nbWFpbC5jb20KLS0tCiBz cmMvaW5jbHVkZS9hY2Nlc3MvaGFzaC5oICAgICAgICAgICAgfCAgODEgKystLS0tLQogc3JjL2Jh Y2tlbmQvYWNjZXNzL2hhc2gvUkVBRE1FICAgICAgIHwgIDMxICstLQogc3JjL2JhY2tlbmQvYWNj ZXNzL2hhc2gvaGFzaC5jICAgICAgIHwgMjEwICsrKysrKysrKystLS0tLS0KIHNyYy9iYWNrZW5k L2FjY2Vzcy9oYXNoL2hhc2hfeGxvZy5jICB8ICAgNCArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hh c2gvaGFzaHBhZ2UuYyAgIHwgIDIxICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoc2Vh cmNoLmMgfCAzNDUgKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tCiBzcmMvYmFja2VuZC9hY2Nl c3MvaGFzaC9oYXNodXRpbC5jICAgfCAxMzAgKy0tLS0tLS0tLQogZG9jL3NyYy9zZ21sL2luZGV4 YW0uc2dtbCAgICAgICAgICAgIHwgIDI4ICsrLQogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZz Lmxpc3QgICAgIHwgICAzICstCiA5IGZpbGVzIGNoYW5nZWQsIDM0MyBpbnNlcnRpb25zKCspLCA1 MTAgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hhc2guaCBi L3NyYy9pbmNsdWRlL2FjY2Vzcy9oYXNoLmgKaW5kZXggYTg3MDJmMGU1Li4xYTJlMDJmOWUgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oYXNoLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNj ZXNzL2hhc2guaApAQCAtMTgsNiArMTgsNyBAQAogI2RlZmluZSBIQVNIX0gKIAogI2luY2x1ZGUg ImFjY2Vzcy9hbWFwaS5oIgorI2luY2x1ZGUgImFjY2Vzcy9pbmRleGJhdGNoLmgiCiAjaW5jbHVk ZSAiYWNjZXNzL2l0dXAuaCIKICNpbmNsdWRlICJhY2Nlc3Mvc2Rpci5oIgogI2luY2x1ZGUgImNh dGFsb2cvcGdfYW1fZC5oIgpAQCAtMTAwLDU3ICsxMDEsMTggQEAgdHlwZWRlZiBIYXNoUGFnZU9w YXF1ZURhdGEgKkhhc2hQYWdlT3BhcXVlOwogICovCiAjZGVmaW5lIEhBU0hPX1BBR0VfSUQJCTB4 RkY4MAogCi10eXBlZGVmIHN0cnVjdCBIYXNoU2NhblBvc0l0ZW0JLyogd2hhdCB3ZSByZW1lbWJl ciBhYm91dCBlYWNoIG1hdGNoICovCisvKiBQZXItYmF0Y2ggZGF0YSBwcml2YXRlIHRvIHRoZSBo YXNoIGluZGV4IEFNICovCit0eXBlZGVmIHN0cnVjdCBIYXNoQmF0Y2hEYXRhCiB7Ci0JSXRlbVBv aW50ZXJEYXRhIGhlYXBUaWQ7CS8qIFRJRCBvZiByZWZlcmVuY2VkIGhlYXAgaXRlbSAqLwotCU9m ZnNldE51bWJlciBpbmRleE9mZnNldDsJLyogaW5kZXggaXRlbSdzIGxvY2F0aW9uIHdpdGhpbiBw YWdlICovCi19IEhhc2hTY2FuUG9zSXRlbTsKKwlCdWZmZXIJCWJ1ZjsJCQkvKiBpbmRleCBwYWdl J3MgYnVmZmVyIHBpbiAqLworCUJsb2NrTnVtYmVyIGN1cnJQYWdlOwkJLyogaW5kZXggcGFnZSdz IGJsb2NrIG51bWJlciAqLworCUJsb2NrTnVtYmVyIHByZXZQYWdlOwkJLyogaW5kZXggcGFnZSdz IGxlZnQgc2libGluZyAqLworCUJsb2NrTnVtYmVyIG5leHRQYWdlOwkJLyogaW5kZXggcGFnZSdz IHJpZ2h0IHNpYmxpbmcgKi8KK30gSGFzaEJhdGNoRGF0YTsKIAotdHlwZWRlZiBzdHJ1Y3QgSGFz aFNjYW5Qb3NEYXRhCi17Ci0JQnVmZmVyCQlidWY7CQkJLyogaWYgdmFsaWQsIHRoZSBidWZmZXIg aXMgcGlubmVkICovCi0JQmxvY2tOdW1iZXIgY3VyclBhZ2U7CQkvKiBjdXJyZW50IGhhc2ggaW5k ZXggcGFnZSAqLwotCUJsb2NrTnVtYmVyIG5leHRQYWdlOwkJLyogbmV4dCBvdmVyZmxvdyBwYWdl ICovCi0JQmxvY2tOdW1iZXIgcHJldlBhZ2U7CQkvKiBwcmV2IG92ZXJmbG93IG9yIGJ1Y2tldCBw YWdlICovCi0KLQkvKgotCSAqIFRoZSBpdGVtcyBhcnJheSBpcyBhbHdheXMgb3JkZXJlZCBpbiBp bmRleCBvcmRlciAoaWUsIGluY3JlYXNpbmcKLQkgKiBpbmRleG9mZnNldCkuICBXaGVuIHNjYW5u aW5nIGJhY2t3YXJkcyBpdCBpcyBjb252ZW5pZW50IHRvIGZpbGwgdGhlCi0JICogYXJyYXkgYmFj ay10by1mcm9udCwgc28gd2Ugc3RhcnQgYXQgdGhlIGxhc3Qgc2xvdCBhbmQgZmlsbCBkb3dud2Fy ZHMuCi0JICogSGVuY2Ugd2UgbmVlZCBib3RoIGEgZmlyc3QtdmFsaWQtZW50cnkgYW5kIGEgbGFz dC12YWxpZC1lbnRyeSBjb3VudGVyLgotCSAqIGl0ZW1JbmRleCBpcyBhIGN1cnNvciBzaG93aW5n IHdoaWNoIGVudHJ5IHdhcyBsYXN0IHJldHVybmVkIHRvIGNhbGxlci4KLQkgKi8KLQlpbnQJCQlm aXJzdEl0ZW07CQkvKiBmaXJzdCB2YWxpZCBpbmRleCBpbiBpdGVtc1tdICovCi0JaW50CQkJbGFz dEl0ZW07CQkvKiBsYXN0IHZhbGlkIGluZGV4IGluIGl0ZW1zW10gKi8KLQlpbnQJCQlpdGVtSW5k ZXg7CQkvKiBjdXJyZW50IGluZGV4IGluIGl0ZW1zW10gKi8KLQotCUhhc2hTY2FuUG9zSXRlbSBp dGVtc1tNYXhJbmRleFR1cGxlc1BlclBhZ2VdOwkvKiBNVVNUIEJFIExBU1QgKi8KLX0gSGFzaFNj YW5Qb3NEYXRhOwotCi0jZGVmaW5lIEhhc2hTY2FuUG9zSXNQaW5uZWQoc2NhbnBvcykgXAotKCBc Ci0JQXNzZXJ0TWFjcm8oQmxvY2tOdW1iZXJJc1ZhbGlkKChzY2FucG9zKS5jdXJyUGFnZSkgfHwg XAotCQkJCSFCdWZmZXJJc1ZhbGlkKChzY2FucG9zKS5idWYpKSwgXAotCUJ1ZmZlcklzVmFsaWQo KHNjYW5wb3MpLmJ1ZikgXAotKQotCi0jZGVmaW5lIEhhc2hTY2FuUG9zSXNWYWxpZChzY2FucG9z KSBcCi0oIFwKLQlBc3NlcnRNYWNybyhCbG9ja051bWJlcklzVmFsaWQoKHNjYW5wb3MpLmN1cnJQ YWdlKSB8fCBcCi0JCQkJIUJ1ZmZlcklzVmFsaWQoKHNjYW5wb3MpLmJ1ZikpLCBcCi0JQmxvY2tO dW1iZXJJc1ZhbGlkKChzY2FucG9zKS5jdXJyUGFnZSkgXAotKQotCi0jZGVmaW5lIEhhc2hTY2Fu UG9zSW52YWxpZGF0ZShzY2FucG9zKSBcCi0JZG8geyBcCi0JCShzY2FucG9zKS5idWYgPSBJbnZh bGlkQnVmZmVyOyBcCi0JCShzY2FucG9zKS5jdXJyUGFnZSA9IEludmFsaWRCbG9ja051bWJlcjsg XAotCQkoc2NhbnBvcykubmV4dFBhZ2UgPSBJbnZhbGlkQmxvY2tOdW1iZXI7IFwKLQkJKHNjYW5w b3MpLnByZXZQYWdlID0gSW52YWxpZEJsb2NrTnVtYmVyOyBcCi0JCShzY2FucG9zKS5maXJzdEl0 ZW0gPSAwOyBcCi0JCShzY2FucG9zKS5sYXN0SXRlbSA9IDA7IFwKLQkJKHNjYW5wb3MpLml0ZW1J bmRleCA9IDA7IFwKLQl9IHdoaWxlICgwKQorLyogQWNjZXNzIHRoZSBoYXNoLXByaXZhdGUgcGVy LWJhdGNoIGRhdGEgZnJvbSBhbiBJbmRleFNjYW5CYXRjaCBwb2ludGVyICovCisjZGVmaW5lIEhh c2hCYXRjaEdldERhdGEoc2NhbiwgYmF0Y2gpIFwKKwlpbmRleGFtX3V0aWxfYmF0Y2hfZ2V0X2Ft ZGF0YShzY2FuLCBiYXRjaCwgSGFzaEJhdGNoRGF0YSkKIAogLyoKICAqCUhhc2hTY2FuT3BhcXVl RGF0YSBpcyBwcml2YXRlIHN0YXRlIGZvciBhIGhhc2ggaW5kZXggc2Nhbi4KQEAgLTE3OCwxNSAr MTQwLDYgQEAgdHlwZWRlZiBzdHJ1Y3QgSGFzaFNjYW5PcGFxdWVEYXRhCiAJICogcmVmZXJyZWQg b25seSB3aGVuIGhhc2hzb19idWNfcG9wdWxhdGVkIGlzIHRydWUuCiAJICovCiAJYm9vbAkJaGFz aHNvX2J1Y19zcGxpdDsKLQkvKiBpbmZvIGFib3V0IGtpbGxlZCBpdGVtcyBpZiBhbnkgKGtpbGxl ZEl0ZW1zIGlzIE5VTEwgaWYgbmV2ZXIgdXNlZCkgKi8KLQlpbnQJCSAgICpraWxsZWRJdGVtczsJ LyogY3VyclBvcy5pdGVtcyBpbmRleGVzIG9mIGtpbGxlZCBpdGVtcyAqLwotCWludAkJCW51bUtp bGxlZDsJCS8qIG51bWJlciBvZiBjdXJyZW50bHkgc3RvcmVkIGl0ZW1zICovCi0KLQkvKgotCSAq IElkZW50aWZ5IGFsbCB0aGUgbWF0Y2hpbmcgaXRlbXMgb24gYSBwYWdlIGFuZCBzYXZlIHRoZW0g aW4KLQkgKiBIYXNoU2NhblBvc0RhdGEKLQkgKi8KLQlIYXNoU2NhblBvc0RhdGEgY3VyclBvczsJ LyogY3VycmVudCBwb3NpdGlvbiBkYXRhICovCiB9IEhhc2hTY2FuT3BhcXVlRGF0YTsKIAogdHlw ZWRlZiBIYXNoU2Nhbk9wYXF1ZURhdGEgKkhhc2hTY2FuT3BhcXVlOwpAQCAtMzY4LDExICszMjEs MTUgQEAgZXh0ZXJuIGJvb2wgaGFzaGluc2VydChSZWxhdGlvbiByZWwsIERhdHVtICp2YWx1ZXMs IGJvb2wgKmlzbnVsbCwKIAkJCQkJICAgSW5kZXhVbmlxdWVDaGVjayBjaGVja1VuaXF1ZSwKIAkJ CQkJICAgYm9vbCBpbmRleFVuY2hhbmdlZCwKIAkJCQkJICAgc3RydWN0IEluZGV4SW5mbyAqaW5k ZXhJbmZvKTsKLWV4dGVybiBib29sIGhhc2hnZXR0dXBsZShJbmRleFNjYW5EZXNjIHNjYW4sIFNj YW5EaXJlY3Rpb24gZGlyKTsKK2V4dGVybiBJbmRleFNjYW5CYXRjaCBoYXNoZ2V0YmF0Y2goSW5k ZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkgICBJbmRleFNjYW5CYXRjaCBwcmlvcmJhdGNoLAor CQkJCQkJCQkgICBTY2FuRGlyZWN0aW9uIGRpcik7CiBleHRlcm4gaW50NjQgaGFzaGdldGJpdG1h cChJbmRleFNjYW5EZXNjIHNjYW4sIFRJREJpdG1hcCAqdGJtKTsKIGV4dGVybiBJbmRleFNjYW5E ZXNjIGhhc2hiZWdpbnNjYW4oUmVsYXRpb24gcmVsLCBpbnQgbmtleXMsIGludCBub3JkZXJieXMp OwogZXh0ZXJuIHZvaWQgaGFzaHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5LZXkgc2Nh bmtleSwgaW50IG5zY2Fua2V5cywKIAkJCQkJICAgU2NhbktleSBvcmRlcmJ5cywgaW50IG5vcmRl cmJ5cyk7CitleHRlcm4gdm9pZCBoYXNodW5ndWFyZGJhdGNoKEluZGV4U2NhbkRlc2Mgc2Nhbiwg SW5kZXhTY2FuQmF0Y2ggYmF0Y2gpOworZXh0ZXJuIHZvaWQgaGFzaGtpbGxpdGVtc2JhdGNoKElu ZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpOwogZXh0ZXJuIHZvaWQgaGFz aGVuZHNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuKTsKIGV4dGVybiBJbmRleEJ1bGtEZWxldGVSZXN1 bHQgKmhhc2hidWxrZGVsZXRlKEluZGV4VmFjdXVtSW5mbyAqaW5mbywKIAkJCQkJCQkJCQkJIElu ZGV4QnVsa0RlbGV0ZVJlc3VsdCAqc3RhdHMsCkBAIC00NDUsOCArNDAyLDkgQEAgZXh0ZXJuIHZv aWQgX2hhc2hfZmluaXNoX3NwbGl0KFJlbGF0aW9uIHJlbCwgQnVmZmVyIG1ldGFidWYsIEJ1ZmZl ciBvYnVmLAogCQkJCQkJCSAgIHVpbnQzMiBsb3dtYXNrKTsKIAogLyogaGFzaHNlYXJjaC5jICov Ci1leHRlcm4gYm9vbCBfaGFzaF9uZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlv biBkaXIpOwotZXh0ZXJuIGJvb2wgX2hhc2hfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2Fu RGlyZWN0aW9uIGRpcik7CitleHRlcm4gSW5kZXhTY2FuQmF0Y2ggX2hhc2hfbmV4dChJbmRleFNj YW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLAorCQkJCQkJCQkgSW5kZXhTY2FuQmF0Y2gg cHJpb3JiYXRjaCk7CitleHRlcm4gSW5kZXhTY2FuQmF0Y2ggX2hhc2hfZmlyc3QoSW5kZXhTY2Fu RGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcik7CiAKIC8qIGhhc2hzb3J0LmMgKi8KIHR5cGVk ZWYgc3RydWN0IEhTcG9vbCBIU3Bvb2w7CS8qIG9wYXF1ZSBzdHJ1Y3QgaW4gaGFzaHNvcnQuYyAq LwpAQCAtNDc2LDcgKzQzNCw2IEBAIGV4dGVybiBCbG9ja051bWJlciBfaGFzaF9nZXRfb2xkYmxv Y2tfZnJvbV9uZXdidWNrZXQoUmVsYXRpb24gcmVsLCBCdWNrZXQgbmV3X2J1CiBleHRlcm4gQmxv Y2tOdW1iZXIgX2hhc2hfZ2V0X25ld2Jsb2NrX2Zyb21fb2xkYnVja2V0KFJlbGF0aW9uIHJlbCwg QnVja2V0IG9sZF9idWNrZXQpOwogZXh0ZXJuIEJ1Y2tldCBfaGFzaF9nZXRfbmV3YnVja2V0X2Zy b21fb2xkYnVja2V0KFJlbGF0aW9uIHJlbCwgQnVja2V0IG9sZF9idWNrZXQsCiAJCQkJCQkJCQkJ CQkgdWludDMyIGxvd21hc2ssIHVpbnQzMiBtYXhidWNrZXQpOwotZXh0ZXJuIHZvaWQgX2hhc2hf a2lsbF9pdGVtcyhJbmRleFNjYW5EZXNjIHNjYW4pOwogCiAvKiBoYXNoLmMgKi8KIGV4dGVybiB2 b2lkIGhhc2hidWNrZXRjbGVhbnVwKFJlbGF0aW9uIHJlbCwgQnVja2V0IGN1cl9idWNrZXQsCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9SRUFETUUgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvaGFzaC9SRUFETUUKaW5kZXggZmM5MDMxMTE3Li45NzJiYjY2NmIgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL1JFQURNRQorKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv aGFzaC9SRUFETUUKQEAgLTI1NSwyOCArMjU1LDI5IEBAIFRoZSByZWFkZXIgYWxnb3JpdGhtIGlz OgogCQlyZXRha2UgdGhlIGJ1ZmZlciBjb250ZW50IGxvY2sgb24gbmV3IGJ1Y2tldAogCQlhcnJh bmdlIHRvIHNjYW4gdGhlIG9sZCBidWNrZXQgbm9ybWFsbHkgYW5kIHRoZSBuZXcgYnVja2V0IGZv cgogICAgICAgICAgdHVwbGVzIHdoaWNoIGFyZSBub3QgbW92ZWQtYnktc3BsaXQKLS0tIHRoZW4s IHBlciByZWFkIHJlcXVlc3Q6CistLSB0aGVuLCBwZXIgYmF0Y2ggKHBhZ2UpIHJlcXVlc3Q6CiAJ cmVhY3F1aXJlIGNvbnRlbnQgbG9jayBvbiBjdXJyZW50IHBhZ2UKIAlzdGVwIHRvIG5leHQgcGFn ZSBpZiBuZWNlc3NhcnkgKG5vIGNoYWluaW5nIG9mIGNvbnRlbnQgbG9ja3MsIGJ1dCBrZWVwCiAJ dGhlIHBpbiBvbiB0aGUgcHJpbWFyeSBidWNrZXQgdGhyb3VnaG91dCB0aGUgc2NhbikKLQlzYXZl IGFsbCB0aGUgbWF0Y2hpbmcgdHVwbGVzIGZyb20gY3VycmVudCBpbmRleCBwYWdlIGludG8gYW4g aXRlbXMgYXJyYXkKLQlyZWxlYXNlIHBpbiBhbmQgY29udGVudCBsb2NrIChidXQgaWYgaXQgaXMg cHJpbWFyeSBidWNrZXQgcGFnZSByZXRhaW4KLQlpdHMgcGluIHRpbGwgdGhlIGVuZCBvZiB0aGUg c2NhbikKLQlnZXQgdHVwbGUgZnJvbSBhbiBpdGVtIGFycmF5CisJc2F2ZSBhbGwgdGhlIG1hdGNo aW5nIHR1cGxlcyBmcm9tIGN1cnJlbnQgaW5kZXggcGFnZSBpbnRvIGEgYmF0Y2gKKwlyZWxlYXNl IGNvbnRlbnQgbG9jayBvbiBjdXJyZW50IHBhZ2UgcmV0dXJuIGJhdGNoIHRvIHRhYmxlIEFNICh0 YWJsZSBBTQorCXdpbGwgZHJvcCBiYXRjaCdzIGJ1ZmZlciBwaW4sIHRob3VnaCBwcmltYXJ5IGJ1 Y2tldCBwYWdlIHBpbiBpcyBrZXB0CisJdW50aWwgdGhlIGVuZCBvZiB0aGUgc2NhbikKIC0tIGF0 IHNjYW4gc2h1dGRvd246Ci0JcmVsZWFzZSBhbGwgcGlucyBzdGlsbCBoZWxkCisJcmVsZWFzZSBz Y2FuLW93bmVkIHBpbnMgKGUuZy4sIHByaW1hcnkgYnVja2V0IHBhZ2UgcGluKSBhcyBuZWVkZWQK IAogSG9sZGluZyB0aGUgYnVmZmVyIHBpbiBvbiB0aGUgcHJpbWFyeSBidWNrZXQgcGFnZSBmb3Ig dGhlIHdob2xlIHNjYW4gcHJldmVudHMKLXRoZSByZWFkZXIncyBjdXJyZW50LXR1cGxlIHBvaW50 ZXIgZnJvbSBiZWluZyBpbnZhbGlkYXRlZCBieSBzcGxpdHMgb3IKLWNvbXBhY3Rpb25zLiAgKE9m IGNvdXJzZSwgb3RoZXIgYnVja2V0cyBjYW4gc3RpbGwgYmUgc3BsaXQgb3IgY29tcGFjdGVkLikK K3RoZSBidWNrZXQgZnJvbSBiZWluZyByZW9yZ2FuaXplZCBieSBzcGxpdHMgb3IgY29tcGFjdGlv bnMgd2hpbGUgdGhlIHNjYW4gaXMKK2luIHByb2dyZXNzLiAgKE9mIGNvdXJzZSwgb3RoZXIgYnVj a2V0cyBjYW4gc3RpbGwgYmUgc3BsaXQgb3IgY29tcGFjdGVkLikKIAotVG8gbWluaW1pemUgbG9j ay91bmxvY2sgdHJhZmZpYywgaGFzaCBpbmRleCBzY2FuIGFsd2F5cyBzZWFyY2hlcyB0aGUgZW50 aXJlCi1oYXNoIHBhZ2UgdG8gaWRlbnRpZnkgYWxsIHRoZSBtYXRjaGluZyBpdGVtcyBhdCBvbmNl LCBjb3B5aW5nIHRoZWlyIGhlYXAgdHVwbGUKLUlEcyBpbnRvIGJhY2tlbmQtbG9jYWwgc3RvcmFn ZS4gVGhlIGhlYXAgdHVwbGUgSURzIGFyZSB0aGVuIHByb2Nlc3NlZCB3aGlsZSBub3QKLWhvbGRp bmcgYW55IHBhZ2UgbG9jayB3aXRoaW4gdGhlIGluZGV4IHRoZXJlYnksIGFsbG93aW5nIGNvbmN1 cnJlbnQgaW5zZXJ0aW9uCi10byBoYXBwZW4gb24gdGhlIHNhbWUgaW5kZXggcGFnZSB3aXRob3V0 IGFueSByZXF1aXJlbWVudCBvZiByZS1maW5kaW5nIHRoZQotY3VycmVudCBzY2FuIHBvc2l0aW9u IGZvciB0aGUgcmVhZGVyLiBXZSBkbyBjb250aW51ZSB0byBob2xkIGEgcGluIG9uIHRoZQotYnVj a2V0IHBhZ2UsIHRvIHByb3RlY3QgYWdhaW5zdCBjb25jdXJyZW50IGRlbGV0aW9ucyBhbmQgYnVj a2V0IHNwbGl0LgorVG8gbWluaW1pemUgbG9jay91bmxvY2sgdHJhZmZpYywgaGFzaCBpbmRleCBz Y2FucyBhbHdheXMgc2VhcmNoIHRoZSBlbnRpcmUKK2hhc2ggcGFnZSB0byBpZGVudGlmeSBhbGwg dGhlIG1hdGNoaW5nIGl0ZW1zIGF0IG9uY2UsIHJldHVybmluZyB0aGVtIGluCitiYXRjaGVzIHRv IHRoZSB0YWJsZSBBTS4gIFRoZSB0YWJsZSBBTSBwcm9jZXNzZXMgYmF0Y2hlcyB3aGlsZSBubyBw YWdlIGxvY2sKK2lzIGhlbGQgd2l0aGluIHRoZSBpbmRleCwgYWxsb3dpbmcgY29uY3VycmVudCBp bnNlcnRpb24gdG8gaGFwcGVuIG9uIHRoZQorc2FtZSBpbmRleCBwYWdlIHdpdGhvdXQgYW55IHJl cXVpcmVtZW50IG9mIHJlLWZpbmRpbmcgdGhlIGN1cnJlbnQgc2NhbgorcG9zaXRpb24gZm9yIHRo ZSByZWFkZXIuICBUaGUgdGFibGUgQU0gY29udHJvbHMgd2hlbiBiYXRjaCBidWZmZXIgcGlucyBh cmUKK2Ryb3BwZWQuICBXZSBkbyBjb250aW51ZSB0byBob2xkIGEgcGluIG9uIHRoZSBwcmltYXJ5 IGJ1Y2tldCBwYWdlLCB0bworcHJvdGVjdCBhZ2FpbnN0IGNvbmN1cnJlbnQgYnVja2V0IHNwbGl0 cy4KIAogVG8gYWxsb3cgZm9yIHNjYW5zIGR1cmluZyBhIGJ1Y2tldCBzcGxpdCwgaWYgYXQgdGhl IHN0YXJ0IG9mIHRoZSBzY2FuLCB0aGUKIGJ1Y2tldCBpcyBtYXJrZWQgYXMgYnVja2V0LWJlaW5n LXBvcHVsYXRlZCwgaXQgc2NhbiBhbGwgdGhlIHR1cGxlcyBpbiB0aGF0CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9o YXNoLmMKaW5kZXggOWFlOWYwNDQ4Li44Y2MyNGY5MzkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2FjY2Vzcy9oYXNoL2hhc2guYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMK QEAgLTExMywxMCArMTEzLDEwIEBAIGhhc2hoYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCS5h bWFkanVzdG1lbWJlcnMgPSBoYXNoYWRqdXN0bWVtYmVycywKIAkJLmFtYmVnaW5zY2FuID0gaGFz aGJlZ2luc2NhbiwKIAkJLmFtcmVzY2FuID0gaGFzaHJlc2NhbiwKLQkJLmFtZ2V0dHVwbGUgPSBo YXNoZ2V0dHVwbGUsCi0JCS5hbWdldGJhdGNoID0gTlVMTCwKLQkJLmFtdW5ndWFyZGJhdGNoID0g TlVMTCwKLQkJLmFta2lsbGl0ZW1zYmF0Y2ggPSBOVUxMLAorCQkuYW1nZXR0dXBsZSA9IE5VTEws CisJCS5hbWdldGJhdGNoID0gaGFzaGdldGJhdGNoLAorCQkuYW11bmd1YXJkYmF0Y2ggPSBoYXNo dW5ndWFyZGJhdGNoLAorCQkuYW1raWxsaXRlbXNiYXRjaCA9IGhhc2hraWxsaXRlbXNiYXRjaCwK IAkJLmFtZ2V0Yml0bWFwID0gaGFzaGdldGJpdG1hcCwKIAkJLmFtZW5kc2NhbiA9IGhhc2hlbmRz Y2FuLAogCQkuYW1wb3NyZXNldCA9IE5VTEwsCkBAIC0yOTksNTMgKzI5OSwyOCBAQCBoYXNoaW5z ZXJ0KFJlbGF0aW9uIHJlbCwgRGF0dW0gKnZhbHVlcywgYm9vbCAqaXNudWxsLAogCiAKIC8qCi0g KgloYXNoZ2V0dHVwbGUoKSAtLSBHZXQgdGhlIG5leHQgdHVwbGUgaW4gdGhlIHNjYW4uCisgKglo YXNoZ2V0YmF0Y2goKSAtLSBHZXQgdGhlIGZpcnN0IG9yIG5leHQgYmF0Y2ggb2YgdHVwbGVzIGlu IHRoZSBzY2FuCiAgKi8KLWJvb2wKLWhhc2hnZXR0dXBsZShJbmRleFNjYW5EZXNjIHNjYW4sIFNj YW5EaXJlY3Rpb24gZGlyKQorSW5kZXhTY2FuQmF0Y2gKK2hhc2hnZXRiYXRjaChJbmRleFNjYW5E ZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIHByaW9yYmF0Y2gsIFNjYW5EaXJlY3Rpb24gZGlyKQog ewogCUhhc2hTY2FuT3BhcXVlIHNvID0gKEhhc2hTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7Ci0J Ym9vbAkJcmVzOwogCiAJLyogSGFzaCBpbmRleGVzIGFyZSBhbHdheXMgbG9zc3kgc2luY2Ugd2Ug c3RvcmUgb25seSB0aGUgaGFzaCBjb2RlICovCiAJc2Nhbi0+eHNfcmVjaGVjayA9IHRydWU7CiAK LQkvKgotCSAqIElmIHdlJ3ZlIGFscmVhZHkgaW5pdGlhbGl6ZWQgdGhpcyBzY2FuLCB3ZSBjYW4g anVzdCBhZHZhbmNlIGl0IGluIHRoZQotCSAqIGFwcHJvcHJpYXRlIGRpcmVjdGlvbi4gIElmIHdl IGhhdmVuJ3QgZG9uZSBzbyB5ZXQsIHdlIGNhbGwgYSByb3V0aW5lIHRvCi0JICogZ2V0IHRoZSBm aXJzdCBpdGVtIGluIHRoZSBzY2FuLgotCSAqLwotCWlmICghSGFzaFNjYW5Qb3NJc1ZhbGlkKHNv LT5jdXJyUG9zKSkKLQkJcmVzID0gX2hhc2hfZmlyc3Qoc2NhbiwgZGlyKTsKLQllbHNlCisJaWYg KHByaW9yYmF0Y2ggPT0gTlVMTCkKIAl7Ci0JCS8qCi0JCSAqIENoZWNrIHRvIHNlZSBpZiB3ZSBz aG91bGQga2lsbCB0aGUgcHJldmlvdXNseS1mZXRjaGVkIHR1cGxlLgotCQkgKi8KLQkJaWYgKHNj YW4tPmtpbGxfcHJpb3JfdHVwbGUpCi0JCXsKLQkJCS8qCi0JCQkgKiBZZXMsIHNvIHJlbWVtYmVy IGl0IGZvciBsYXRlci4gKFdlJ2xsIGRlYWwgd2l0aCBhbGwgc3VjaCB0dXBsZXMKLQkJCSAqIGF0 IG9uY2UgcmlnaHQgYWZ0ZXIgbGVhdmluZyB0aGUgaW5kZXggcGFnZSBvciBhdCBlbmQgb2Ygc2Nh bi4pCi0JCQkgKiBJbiBjYXNlIGlmIGNhbGxlciByZXZlcnNlcyB0aGUgaW5kZXhzY2FuIGRpcmVj dGlvbiBpdCBpcyBxdWl0ZQotCQkJICogcG9zc2libGUgdGhhdCB0aGUgc2FtZSBpdGVtIG1pZ2h0 IGdldCBlbnRlcmVkIG11bHRpcGxlIHRpbWVzLgotCQkJICogQnV0LCB3ZSBkb24ndCBkZXRlY3Qg dGhhdDsgaW5zdGVhZCwgd2UganVzdCBmb3JnZXQgYW55IGV4Y2VzcwotCQkJICogZW50cmllcy4K LQkJCSAqLwotCQkJaWYgKHNvLT5raWxsZWRJdGVtcyA9PSBOVUxMKQotCQkJCXNvLT5raWxsZWRJ dGVtcyA9IHBhbGxvY19hcnJheShpbnQsIE1heEluZGV4VHVwbGVzUGVyUGFnZSk7CisJCVJlbGF0 aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247CiAKLQkJCWlmIChzby0+bnVtS2lsbGVkIDwg TWF4SW5kZXhUdXBsZXNQZXJQYWdlKQotCQkJCXNvLT5raWxsZWRJdGVtc1tzby0+bnVtS2lsbGVk KytdID0gc28tPmN1cnJQb3MuaXRlbUluZGV4OwotCQl9CisJCV9oYXNoX2Ryb3BzY2FuYnVmKHJl bCwgc28pOwogCi0JCS8qCi0JCSAqIE5vdyBjb250aW51ZSB0aGUgc2Nhbi4KLQkJICovCi0JCXJl cyA9IF9oYXNoX25leHQoc2NhbiwgZGlyKTsKKwkJLyogSW5pdGlhbGl6ZSB0aGUgc2NhbiwgYW5k IHJldHVybiBmaXJzdCBiYXRjaCBvZiBtYXRjaGluZyBpdGVtcyAqLworCQlyZXR1cm4gX2hhc2hf Zmlyc3Qoc2NhbiwgZGlyKTsKIAl9CiAKLQlyZXR1cm4gcmVzOworCS8qIFJldHVybiBiYXRjaCBw b3NpdGlvbmVkIGFmdGVyIGNhbGxlcidzIGJhdGNoIChpbiBkaXJlY3Rpb24gJ2RpcicpICovCisJ cmV0dXJuIF9oYXNoX25leHQoc2NhbiwgZGlyLCBwcmlvcmJhdGNoKTsKIH0KIAogCkBAIC0zNTUs MjYgKzMzMCwyNiBAQCBoYXNoZ2V0dHVwbGUoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0 aW9uIGRpcikKIGludDY0CiBoYXNoZ2V0Yml0bWFwKEluZGV4U2NhbkRlc2Mgc2NhbiwgVElEQml0 bWFwICp0Ym0pCiB7Ci0JSGFzaFNjYW5PcGFxdWUgc28gPSAoSGFzaFNjYW5PcGFxdWUpIHNjYW4t Pm9wYXF1ZTsKLQlib29sCQlyZXM7CisJSW5kZXhTY2FuQmF0Y2ggYmF0Y2g7CiAJaW50NjQJCW50 aWRzID0gMDsKLQlIYXNoU2NhblBvc0l0ZW0gKmN1cnJJdGVtOwogCi0JcmVzID0gX2hhc2hfZmly c3Qoc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24pOworCWJhdGNoID0gX2hhc2hfZmlyc3Qoc2Nh biwgRm9yd2FyZFNjYW5EaXJlY3Rpb24pOwogCi0Jd2hpbGUgKHJlcykKKwl3aGlsZSAoYmF0Y2gg IT0gTlVMTCkKIAl7Ci0JCWN1cnJJdGVtID0gJnNvLT5jdXJyUG9zLml0ZW1zW3NvLT5jdXJyUG9z Lml0ZW1JbmRleF07CisJCWZvciAoaW50IGl0ZW1JbmRleCA9IGJhdGNoLT5maXJzdEl0ZW07CisJ CQkgaXRlbUluZGV4IDw9IGJhdGNoLT5sYXN0SXRlbTsKKwkJCSBpdGVtSW5kZXgrKykKKwkJewor CQkJdGJtX2FkZF90dXBsZXModGJtLCAmYmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF0udGFibGVUaWQs IDEsIHRydWUpOworCQkJbnRpZHMrKzsKKwkJfQogCiAJCS8qCi0JCSAqIF9oYXNoX2ZpcnN0IGFu ZCBfaGFzaF9uZXh0IGhhbmRsZSBlbGltaW5hdGUgZGVhZCBpbmRleCBlbnRyaWVzCi0JCSAqIHdo ZW5ldmVyIHNjYW4tPmlnbm9yZV9raWxsZWRfdHVwbGVzIGlzIHRydWUuICBUaGVyZWZvcmUsIHRo ZXJlJ3MKLQkJICogbm90aGluZyB0byBkbyBoZXJlIGV4Y2VwdCBhZGQgdGhlIHJlc3VsdHMgdG8g dGhlIFRJREJpdG1hcC4KKwkJICogX2hhc2hfbmV4dCByZWxlYXNlcyB0aGUgcHJpb3IgYmF0Y2gg Zm9yIGJpdG1hcCBjYWxsZXJzIGJlZm9yZQorCQkgKiBhbGxvY2F0aW5nIHRoZSBuZXh0IG9uZSwg c28gb25seSBvbmUgYmF0Y2ggaXMgZXZlciB1c2VkIGF0IGEgdGltZQogCQkgKi8KLQkJdGJtX2Fk ZF90dXBsZXModGJtLCAmKGN1cnJJdGVtLT5oZWFwVGlkKSwgMSwgdHJ1ZSk7Ci0JCW50aWRzKys7 Ci0KLQkJcmVzID0gX2hhc2hfbmV4dChzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbik7CisJCWJh dGNoID0gX2hhc2hfbmV4dChzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgYmF0Y2gpOwogCX0K IAogCXJldHVybiBudGlkczsKQEAgLTM5NiwxNyArMzcxLDE2IEBAIGhhc2hiZWdpbnNjYW4oUmVs YXRpb24gcmVsLCBpbnQgbmtleXMsIGludCBub3JkZXJieXMpCiAJc2NhbiA9IFJlbGF0aW9uR2V0 SW5kZXhTY2FuKHJlbCwgbmtleXMsIG5vcmRlcmJ5cyk7CiAKIAlzbyA9IChIYXNoU2Nhbk9wYXF1 ZSkgcGFsbG9jX29iamVjdChIYXNoU2Nhbk9wYXF1ZURhdGEpOwotCUhhc2hTY2FuUG9zSW52YWxp ZGF0ZShzby0+Y3VyclBvcyk7CiAJc28tPmhhc2hzb19idWNrZXRfYnVmID0gSW52YWxpZEJ1ZmZl cjsKIAlzby0+aGFzaHNvX3NwbGl0X2J1Y2tldF9idWYgPSBJbnZhbGlkQnVmZmVyOwogCiAJc28t Pmhhc2hzb19idWNfcG9wdWxhdGVkID0gZmFsc2U7CiAJc28tPmhhc2hzb19idWNfc3BsaXQgPSBm YWxzZTsKIAotCXNvLT5raWxsZWRJdGVtcyA9IE5VTEw7Ci0Jc28tPm51bUtpbGxlZCA9IDA7Ci0K IAlzY2FuLT5vcGFxdWUgPSBzbzsKKwlzY2FuLT5tYXhpdGVtc2JhdGNoID0gTWF4SW5kZXhUdXBs ZXNQZXJQYWdlOworCXNjYW4tPmJhdGNoX2luZGV4X29wYXF1ZV9zaXplID0gTUFYQUxJR04oc2l6 ZW9mKEhhc2hCYXRjaERhdGEpKTsKKwlzY2FuLT5iYXRjaF90dXBsZXNfd29ya3NwYWNlID0gMDsK IAogCXJldHVybiBzY2FuOwogfQpAQCAtNDIxLDE4ICszOTUsOCBAQCBoYXNocmVzY2FuKEluZGV4 U2NhbkRlc2Mgc2NhbiwgU2NhbktleSBzY2Fua2V5LCBpbnQgbnNjYW5rZXlzLAogCUhhc2hTY2Fu T3BhcXVlIHNvID0gKEhhc2hTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CiAJUmVsYXRpb24JcmVs ID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKIAotCWlmIChIYXNoU2NhblBvc0lzVmFsaWQoc28tPmN1 cnJQb3MpKQotCXsKLQkJLyogQmVmb3JlIGxlYXZpbmcgY3VycmVudCBwYWdlLCBkZWFsIHdpdGgg YW55IGtpbGxlZCBpdGVtcyAqLwotCQlpZiAoc28tPm51bUtpbGxlZCA+IDApCi0JCQlfaGFzaF9r aWxsX2l0ZW1zKHNjYW4pOwotCX0KLQogCV9oYXNoX2Ryb3BzY2FuYnVmKHJlbCwgc28pOwogCi0J Lyogc2V0IHBvc2l0aW9uIGludmFsaWQgKHRoaXMgd2lsbCBjYXVzZSBfaGFzaF9maXJzdCBjYWxs KSAqLwotCUhhc2hTY2FuUG9zSW52YWxpZGF0ZShzby0+Y3VyclBvcyk7Ci0KIAkvKiBVcGRhdGUg c2NhbiBrZXksIGlmIGEgbmV3IG9uZSBpcyBnaXZlbiAqLwogCWlmIChzY2Fua2V5ICYmIHNjYW4t Pm51bWJlck9mS2V5cyA+IDApCiAJCW1lbWNweShzY2FuLT5rZXlEYXRhLCBzY2Fua2V5LCBzY2Fu LT5udW1iZXJPZktleXMgKiBzaXplb2YoU2NhbktleURhdGEpKTsKQEAgLTQ0MSw2ICs0MDUsMTEx IEBAIGhhc2hyZXNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuS2V5IHNjYW5rZXksIGludCBu c2NhbmtleXMsCiAJc28tPmhhc2hzb19idWNfc3BsaXQgPSBmYWxzZTsKIH0KIAorLyoKKyAqCWhh c2h1bmd1YXJkYmF0Y2goKSAtLSBEcm9wIGJhdGNoJ3MgVElEIHJlY3ljbGluZyBpbnRlcmxvY2sg KGJ1ZmZlciBwaW4pCisgKgorICogQ2FsbGVkIGJ5IHRoZSB0YWJsZSBBTSB3aGVuIGl0J3Mgc2Fm ZSB0byBkcm9wIHRoZSBidWZmZXIgcGluIGhlbGQgdG8KKyAqIHByZXZlbnQgY29uY3VycmVudCBU SUQgcmVjeWNsaW5nIGJ5IFZBQ1VVTS4KKyAqLwordm9pZAoraGFzaHVuZ3VhcmRiYXRjaChJbmRl eFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKQoreworCUhhc2hCYXRjaERhdGEg Kmhhc2hiYXRjaCA9IEhhc2hCYXRjaEdldERhdGEoc2NhbiwgYmF0Y2gpOworCisJLyogU2hvdWxk IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgaWZmICFiYXRjaEltbWVkaWF0ZVVuZ3VhcmQgKi8KKwlB c3NlcnQoIXNjYW4tPmJhdGNoSW1tZWRpYXRlVW5ndWFyZCk7CisJQXNzZXJ0KGJhdGNoLT5pc0d1 YXJkZWQpOworCisJUmVsZWFzZUJ1ZmZlcihoYXNoYmF0Y2gtPmJ1Zik7Cit9CisKKy8qCisgKglo YXNoa2lsbGl0ZW1zYmF0Y2goKSAtLSBNYXJrIGRlYWQgaXRlbXMnIGluZGV4IHR1cGxlcyBMUF9E RUFECisgKi8KK3ZvaWQKK2hhc2hraWxsaXRlbXNiYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIElu ZGV4U2NhbkJhdGNoIGJhdGNoKQoreworCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRp b247CisJSGFzaEJhdGNoRGF0YSAqaGFzaGJhdGNoID0gSGFzaEJhdGNoR2V0RGF0YShzY2FuLCBi YXRjaCk7CisJQnVmZmVyCQlidWY7CisJUGFnZQkJcGFnZTsKKwlIYXNoUGFnZU9wYXF1ZSBvcGFx dWU7CisJT2Zmc2V0TnVtYmVyIG9mZm51bSwKKwkJCQltYXhvZmY7CisJYm9vbAkJa2lsbGVkc29t ZXRoaW5nID0gZmFsc2U7CisJWExvZ1JlY1B0cglsYXRlc3Rsc247CisKKwlBc3NlcnQoYmF0Y2gt Pm51bURlYWQgPiAwKTsKKworCWJ1ZiA9IF9oYXNoX2dldGJ1ZihyZWwsIGhhc2hiYXRjaC0+Y3Vy clBhZ2UsIEhBU0hfUkVBRCwKKwkJCQkJICAgTEhfQlVDS0VUX1BBR0UgfCBMSF9PVkVSRkxPV19Q QUdFKTsKKworCWxhdGVzdGxzbiA9IEJ1ZmZlckdldExTTkF0b21pYyhidWYpOworCUFzc2VydChi YXRjaC0+bHNuIDw9IGxhdGVzdGxzbik7CisJaWYgKGJhdGNoLT5sc24gIT0gbGF0ZXN0bHNuKQor CXsKKwkJLyogTW9kaWZpZWQsIGdpdmUgdXAgb24gaGludGluZyAqLworCQlfaGFzaF9yZWxidWYo cmVsLCBidWYpOworCQlyZXR1cm47CisJfQorCisJcGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnVmKTsK KwlvcGFxdWUgPSBIYXNoUGFnZUdldE9wYXF1ZShwYWdlKTsKKwltYXhvZmYgPSBQYWdlR2V0TWF4 T2Zmc2V0TnVtYmVyKHBhZ2UpOworCisJLyogSXRlcmF0ZSB0aHJvdWdoIGJhdGNoLT5kZWFkSXRl bXNbXSBpbiBpbmRleCBwYWdlIG9yZGVyICovCisJZm9yIChpbnQgaSA9IDA7IGkgPCBiYXRjaC0+ bnVtRGVhZDsgaSsrKQorCXsKKwkJaW50CQkJaXRlbUluZGV4ID0gYmF0Y2gtPmRlYWRJdGVtc1tp XTsKKwkJQmF0Y2hNYXRjaGluZ0l0ZW0gKmN1cnJJdGVtID0gJmJhdGNoLT5pdGVtc1tpdGVtSW5k ZXhdOworCisJCW9mZm51bSA9IGN1cnJJdGVtLT5pbmRleE9mZnNldDsKKworCQlBc3NlcnQoaXRl bUluZGV4ID49IGJhdGNoLT5maXJzdEl0ZW0gJiYKKwkJCSAgIGl0ZW1JbmRleCA8PSBiYXRjaC0+ bGFzdEl0ZW0pOworCisJCXdoaWxlIChvZmZudW0gPD0gbWF4b2ZmKQorCQl7CisJCQlJdGVtSWQJ CWlpZCA9IFBhZ2VHZXRJdGVtSWQocGFnZSwgb2ZmbnVtKTsKKwkJCUluZGV4VHVwbGUJaXR1cGxl ID0gKEluZGV4VHVwbGUpIFBhZ2VHZXRJdGVtKHBhZ2UsIGlpZCk7CisKKwkJCWlmIChJdGVtUG9p bnRlckVxdWFscygmaXR1cGxlLT50X3RpZCwgJmN1cnJJdGVtLT50YWJsZVRpZCkpCisJCQl7CisJ CQkJaWYgKCFraWxsZWRzb21ldGhpbmcpCisJCQkJeworCQkJCQkvKgorCQkJCQkgKiBVc2UgdGhl IGhpbnQgYml0IGluZnJhc3RydWN0dXJlIHRvIGNoZWNrIGlmIHdlIGNhbgorCQkJCQkgKiB1cGRh dGUgdGhlIHBhZ2Ugd2hpbGUganVzdCBob2xkaW5nIGEgc2hhcmUgbG9jay4gSWYgd2UKKwkJCQkJ ICogYXJlIG5vdCBhbGxvd2VkLCB0aGVyZSdzIG5vIHBvaW50IGNvbnRpbnVpbmcuCisJCQkJCSAq LworCQkJCQlpZiAoIUJ1ZmZlckJlZ2luU2V0SGludEJpdHMoYnVmKSkKKwkJCQkJCWdvdG8gdW5s b2NrX3BhZ2U7CisJCQkJfQorCisJCQkJLyogZm91bmQgdGhlIGl0ZW0gKi8KKwkJCQlJdGVtSWRN YXJrRGVhZChpaWQpOworCQkJCWtpbGxlZHNvbWV0aGluZyA9IHRydWU7CisJCQkJYnJlYWs7CQkJ Lyogb3V0IG9mIGlubmVyIHNlYXJjaCBsb29wICovCisJCQl9CisJCQlvZmZudW0gPSBPZmZzZXRO dW1iZXJOZXh0KG9mZm51bSk7CisJCX0KKwl9CisKKwkvKgorCSAqIFNpbmNlIHRoaXMgY2FuIGJl IHJlZG9uZSBsYXRlciBpZiBuZWVkZWQsIG1hcmsgYXMgZGlydHkgaGludC4gV2hlbmV2ZXIKKwkg KiB3ZSBtYXJrIGFueXRoaW5nIExQX0RFQUQsIHdlIGFsc28gc2V0IHRoZSBwYWdlJ3MKKwkgKiBM SF9QQUdFX0hBU19ERUFEX1RVUExFUyBmbGFnLCB3aGljaCBpcyBsaWtld2lzZSBqdXN0IGEgaGlu dC4KKwkgKi8KKwlpZiAoa2lsbGVkc29tZXRoaW5nKQorCXsKKwkJb3BhcXVlLT5oYXNob19mbGFn IHw9IExIX1BBR0VfSEFTX0RFQURfVFVQTEVTOworCQlCdWZmZXJGaW5pc2hTZXRIaW50Qml0cyhi dWYsIHRydWUsIHRydWUpOworCX0KKwordW5sb2NrX3BhZ2U6CisJX2hhc2hfcmVsYnVmKHJlbCwg YnVmKTsKK30KKwogLyoKICAqCWhhc2hlbmRzY2FuKCkgLS0gY2xvc2UgZG93biBhIHNjYW4KICAq LwpAQCAtNDUwLDE3ICs1MTksOCBAQCBoYXNoZW5kc2NhbihJbmRleFNjYW5EZXNjIHNjYW4pCiAJ SGFzaFNjYW5PcGFxdWUgc28gPSAoSGFzaFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKIAlSZWxh dGlvbglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOwogCi0JaWYgKEhhc2hTY2FuUG9zSXNWYWxp ZChzby0+Y3VyclBvcykpCi0JewotCQkvKiBCZWZvcmUgbGVhdmluZyBjdXJyZW50IHBhZ2UsIGRl YWwgd2l0aCBhbnkga2lsbGVkIGl0ZW1zICovCi0JCWlmIChzby0+bnVtS2lsbGVkID4gMCkKLQkJ CV9oYXNoX2tpbGxfaXRlbXMoc2Nhbik7Ci0JfQotCiAJX2hhc2hfZHJvcHNjYW5idWYocmVsLCBz byk7CiAKLQlpZiAoc28tPmtpbGxlZEl0ZW1zICE9IE5VTEwpCi0JCXBmcmVlKHNvLT5raWxsZWRJ dGVtcyk7CiAJcGZyZWUoc28pOwogCXNjYW4tPm9wYXF1ZSA9IE5VTEw7CiB9CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoX3hsb2cuYyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9oYXNoL2hhc2hfeGxvZy5jCmluZGV4IDIwNjA2MjBjNy4uZTI2ZWU4YmI5IDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoX3hsb2cuYworKysgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvaGFzaC9oYXNoX3hsb2cuYwpAQCAtMTE0MSwxNCArMTE0MSwxNCBAQCBoYXNoX21hc2so Y2hhciAqcGFnZWRhdGEsIEJsb2NrTnVtYmVyIGJsa25vKQogCQkvKgogCQkgKiBJbiBoYXNoIGJ1 Y2tldCBhbmQgb3ZlcmZsb3cgcGFnZXMsIGl0IGlzIHBvc3NpYmxlIHRvIG1vZGlmeSB0aGUKIAkJ ICogTFBfRkxBR1Mgd2l0aG91dCBlbWl0dGluZyBhbnkgV0FMIHJlY29yZC4gSGVuY2UsIG1hc2sg dGhlIGxpbmUKLQkJICogcG9pbnRlciBmbGFncy4gU2VlIGhhc2hnZXR0dXBsZSgpLCBfaGFzaF9r aWxsX2l0ZW1zKCkgZm9yIGRldGFpbHMuCisJCSAqIHBvaW50ZXIgZmxhZ3MuIFNlZSBoYXNoa2ls bGl0ZW1zYmF0Y2goKSBmb3IgZGV0YWlscy4KIAkJICovCiAJCW1hc2tfbHBfZmxhZ3MocGFnZSk7 CiAJfQogCiAJLyoKIAkgKiBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBoaW50IGJpdCBMSF9QQUdF X0hBU19ERUFEX1RVUExFUyBtYXkgcmVtYWluCi0JICogdW5sb2dnZWQuIFNvLCBtYXNrIGl0LiBT ZWUgX2hhc2hfa2lsbF9pdGVtcygpIGZvciBkZXRhaWxzLgorCSAqIHVubG9nZ2VkLiBTbywgbWFz ayBpdC4gU2VlIGhhc2hraWxsaXRlbXNiYXRjaCgpIGZvciBkZXRhaWxzLgogCSAqLwogCW9wYXF1 ZS0+aGFzaG9fZmxhZyAmPSB+TEhfUEFHRV9IQVNfREVBRF9UVVBMRVM7CiB9CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNocGFnZS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNz L2hhc2gvaGFzaHBhZ2UuYwppbmRleCA4MDk5YjBkMDIuLjExZTNkYjQ3MiAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHBhZ2UuYworKysgYi9zcmMvYmFja2VuZC9hY2Nl c3MvaGFzaC9oYXNocGFnZS5jCkBAIC0yODAsMzEgKzI4MCwyNCBAQCBfaGFzaF9kcm9wYnVmKFJl bGF0aW9uIHJlbCwgQnVmZmVyIGJ1ZikKIH0KIAogLyoKLSAqCV9oYXNoX2Ryb3BzY2FuYnVmKCkg LS0gcmVsZWFzZSBidWZmZXJzIHVzZWQgaW4gc2Nhbi4KKyAqCV9oYXNoX2Ryb3BzY2FuYnVmKCkg LS0gcmVsZWFzZSBidWZmZXJzIG93bmVkIGJ5IHNjYW4uCiAgKgotICogVGhpcyByb3V0aW5lIHVu cGlucyB0aGUgYnVmZmVycyB1c2VkIGR1cmluZyBzY2FuIG9uIHdoaWNoIHdlCi0gKiBob2xkIG5v IGxvY2suCisgKiBUaGlzIHJvdXRpbmUgdW5waW5zIHRoZSBidWZmZXJzIGZvciB0aGUgcHJpbWFy eSBidWNrZXQgcGFnZSBhbmQgZm9yIHRoZQorICogYnVja2V0IHBhZ2Ugb2YgYSBidWNrZXQgYmVp bmcgc3BsaXQgYXMgbmVlZGVkLgogICovCiB2b2lkCiBfaGFzaF9kcm9wc2NhbmJ1ZihSZWxhdGlv biByZWwsIEhhc2hTY2FuT3BhcXVlIHNvKQogewotCS8qIHJlbGVhc2UgcGluIHdlIGhvbGQgb24g cHJpbWFyeSBidWNrZXQgcGFnZSAqLwotCWlmIChCdWZmZXJJc1ZhbGlkKHNvLT5oYXNoc29fYnVj a2V0X2J1ZikgJiYKLQkJc28tPmhhc2hzb19idWNrZXRfYnVmICE9IHNvLT5jdXJyUG9zLmJ1ZikK KwkvKiByZWxlYXNlIHBpbiBoZWxkIG9uIHByaW1hcnkgYnVja2V0IHBhZ2UgKi8KKwlpZiAoQnVm ZmVySXNWYWxpZChzby0+aGFzaHNvX2J1Y2tldF9idWYpKQogCQlfaGFzaF9kcm9wYnVmKHJlbCwg c28tPmhhc2hzb19idWNrZXRfYnVmKTsKIAlzby0+aGFzaHNvX2J1Y2tldF9idWYgPSBJbnZhbGlk QnVmZmVyOwogCi0JLyogcmVsZWFzZSBwaW4gd2UgaG9sZCBvbiBwcmltYXJ5IGJ1Y2tldCBwYWdl ICBvZiBidWNrZXQgYmVpbmcgc3BsaXQgKi8KLQlpZiAoQnVmZmVySXNWYWxpZChzby0+aGFzaHNv X3NwbGl0X2J1Y2tldF9idWYpICYmCi0JCXNvLT5oYXNoc29fc3BsaXRfYnVja2V0X2J1ZiAhPSBz by0+Y3VyclBvcy5idWYpCisJLyogcmVsZWFzZSBwaW4gaGVsZCBvbiBwcmltYXJ5IGJ1Y2tldCBw YWdlIG9mIGJ1Y2tldCBiZWluZyBzcGxpdCAqLworCWlmIChCdWZmZXJJc1ZhbGlkKHNvLT5oYXNo c29fc3BsaXRfYnVja2V0X2J1ZikpCiAJCV9oYXNoX2Ryb3BidWYocmVsLCBzby0+aGFzaHNvX3Nw bGl0X2J1Y2tldF9idWYpOwogCXNvLT5oYXNoc29fc3BsaXRfYnVja2V0X2J1ZiA9IEludmFsaWRC dWZmZXI7CiAKLQkvKiByZWxlYXNlIGFueSBwaW4gd2Ugc3RpbGwgaG9sZCAqLwotCWlmIChCdWZm ZXJJc1ZhbGlkKHNvLT5jdXJyUG9zLmJ1ZikpCi0JCV9oYXNoX2Ryb3BidWYocmVsLCBzby0+Y3Vy clBvcy5idWYpOwotCXNvLT5jdXJyUG9zLmJ1ZiA9IEludmFsaWRCdWZmZXI7Ci0KIAkvKiByZXNl dCBzcGxpdCBzY2FuICovCiAJc28tPmhhc2hzb19idWNfcG9wdWxhdGVkID0gZmFsc2U7CiAJc28t Pmhhc2hzb19idWNfc3BsaXQgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vz cy9oYXNoL2hhc2hzZWFyY2guYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hzZWFyY2gu YwppbmRleCA4OWQxYzViYzYuLjYzYTdiYTY4OCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNj ZXNzL2hhc2gvaGFzaHNlYXJjaC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hz ZWFyY2guYwpAQCAtMjIsMTA1ICsyMiw5NCBAQAogI2luY2x1ZGUgInN0b3JhZ2UvcHJlZGljYXRl LmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsLmgiCiAKLXN0YXRpYyBib29sIF9oYXNoX3JlYWRwYWdl KEluZGV4U2NhbkRlc2Mgc2NhbiwgQnVmZmVyICpidWZQLAotCQkJCQkJICAgU2NhbkRpcmVjdGlv biBkaXIpOworc3RhdGljIGJvb2wgX2hhc2hfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBC dWZmZXIgYnVmLCBTY2FuRGlyZWN0aW9uIGRpciwKKwkJCQkJCSAgIEluZGV4U2NhbkJhdGNoIGJh dGNoKTsKIHN0YXRpYyBpbnQJX2hhc2hfbG9hZF9xdWFsaWZpZWRfaXRlbXMoSW5kZXhTY2FuRGVz YyBzY2FuLCBQYWdlIHBhZ2UsCi0JCQkJCQkJCQkgICBPZmZzZXROdW1iZXIgb2ZmbnVtLCBTY2Fu RGlyZWN0aW9uIGRpcik7Ci1zdGF0aWMgaW5saW5lIHZvaWQgX2hhc2hfc2F2ZWl0ZW0oSGFzaFNj YW5PcGFxdWUgc28sIGludCBpdGVtSW5kZXgsCisJCQkJCQkJCQkgICBPZmZzZXROdW1iZXIgb2Zm bnVtLCBTY2FuRGlyZWN0aW9uIGRpciwKKwkJCQkJCQkJCSAgIEluZGV4U2NhbkJhdGNoIGJhdGNo KTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBfaGFzaF9zYXZlaXRlbShJbmRleFNjYW5CYXRjaCBiYXRj aCwgaW50IGl0ZW1JbmRleCwKIAkJCQkJCQkJICBPZmZzZXROdW1iZXIgb2ZmbnVtLCBJbmRleFR1 cGxlIGl0dXApOwogc3RhdGljIHZvaWQgX2hhc2hfcmVhZG5leHQoSW5kZXhTY2FuRGVzYyBzY2Fu LCBCdWZmZXIgKmJ1ZnAsCiAJCQkJCQkgICBQYWdlICpwYWdlcCwgSGFzaFBhZ2VPcGFxdWUgKm9w YXF1ZXApOwogCiAvKgotICoJX2hhc2hfbmV4dCgpIC0tIEdldCB0aGUgbmV4dCBpdGVtIGluIGEg c2Nhbi4KKyAqCV9oYXNoX25leHQoKSAtLSBHZXQgdGhlIG5leHQgYmF0Y2ggb2YgaXRlbXMgaW4g YSBzY2FuLgogICoKLSAqCQlPbiBlbnRyeSwgc28tPmN1cnJQb3MgZGVzY3JpYmVzIHRoZSBjdXJy ZW50IHBhZ2UsIHdoaWNoIG1heQotICoJCWJlIHBpbm5lZCBidXQgbm90IGxvY2tlZCwgYW5kIHNv LT5jdXJyUG9zLml0ZW1JbmRleCBpZGVudGlmaWVzCi0gKgkJd2hpY2ggaXRlbSB3YXMgcHJldmlv dXNseSByZXR1cm5lZC4KKyAqCQlPbiBlbnRyeSwgcHJpb3JiYXRjaCBkZXNjcmliZXMgdGhlIGN1 cnJlbnQgcGFnZSBiYXRjaCB3aXRoIGl0ZW1zCisgKgkJYWxyZWFkeSByZXR1cm5lZC4KICAqCi0g KgkJT24gc3VjY2Vzc2Z1bCBleGl0LCBzY2FuLT54c19oZWFwdGlkIGlzIHNldCB0byB0aGUgVElE IG9mIHRoZSBuZXh0Ci0gKgkJaGVhcCB0dXBsZS4gIHNvLT5jdXJyUG9zIGlzIHVwZGF0ZWQgYXMg bmVlZGVkLgorICoJCU9uIHN1Y2Nlc3NmdWwgZXhpdCwgcmV0dXJucyBhIGJhdGNoIGNvbnRhaW5p bmcgbWF0Y2hpbmcgaXRlbXMgZnJvbQorICoJCW5leHQgcGFnZS4gIE90aGVyd2lzZSByZXR1cm5z IE5VTEwsIGluZGljYXRpbmcgdGhhdCB0aGVyZSBhcmUgbm8KKyAqCQlmdXJ0aGVyIG1hdGNoZXMu ICBObyBsb2NrcyBhcmUgZXZlciBoZWxkIHdoZW4gd2UgcmV0dXJuLgogICoKLSAqCQlPbiBmYWls dXJlIGV4aXQgKG5vIG1vcmUgdHVwbGVzKSwgd2UgcmV0dXJuIGZhbHNlIHdpdGggcGluCi0gKgkJ aGVsZCBvbiBidWNrZXQgcGFnZSBidXQgbm8gcGlucyBvciBsb2NrcyBoZWxkIG9uIG92ZXJmbG93 Ci0gKgkJcGFnZS4KKyAqCQlSZXRhaW5zIHBpbnMgYWNjb3JkaW5nIHRvIHRoZSBzYW1lIHJ1bGVz IGFzIF9oYXNoX2ZpcnN0LgogICovCi1ib29sCi1faGFzaF9uZXh0KEluZGV4U2NhbkRlc2Mgc2Nh biwgU2NhbkRpcmVjdGlvbiBkaXIpCitJbmRleFNjYW5CYXRjaAorX2hhc2hfbmV4dChJbmRleFNj YW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBJbmRleFNjYW5CYXRjaCBwcmlvcmJhdGNo KQogewogCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247CiAJSGFzaFNjYW5PcGFx dWUgc28gPSAoSGFzaFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKLQlIYXNoU2NhblBvc0l0ZW0g KmN1cnJJdGVtOworCUhhc2hCYXRjaERhdGEgKmhhc2hwcmlvcmJhdGNoID0gSGFzaEJhdGNoR2V0 RGF0YShzY2FuLCBwcmlvcmJhdGNoKTsKIAlCbG9ja051bWJlciBibGtubzsKIAlCdWZmZXIJCWJ1 ZjsKLQlib29sCQllbmRfb2Zfc2NhbiA9IGZhbHNlOworCUluZGV4U2NhbkJhdGNoIGJhdGNoOwog CiAJLyoKLQkgKiBBZHZhbmNlIHRvIHRoZSBuZXh0IHR1cGxlIG9uIHRoZSBjdXJyZW50IHBhZ2U7 IG9yIGlmIGRvbmUsIHRyeSB0byByZWFkCi0JICogZGF0YSBmcm9tIHRoZSBuZXh0IG9yIHByZXZp b3VzIHBhZ2UgYmFzZWQgb24gdGhlIHNjYW4gZGlyZWN0aW9uLiBCZWZvcmUKLQkgKiBtb3Zpbmcg dG8gdGhlIG5leHQgb3IgcHJldmlvdXMgcGFnZSBtYWtlIHN1cmUgdGhhdCB3ZSBkZWFsIHdpdGgg YWxsIHRoZQotCSAqIGtpbGxlZCBpdGVtcy4KKwkgKiBUaGUgY29yZSBjb2RlIG11c3QgZGVhbCB3 aXRoIGNyb3NzLWJhdGNoIHNjYW4gZGlyZWN0aW9uIGNoYW5nZXMgZm9yIHVzLgorCSAqIEEgYmF0 Y2ggbWFuYWdlbWVudCByb3V0aW5lIHRoYXQgZmxpcHMgcHJpb3JiYXRjaCdzIHNjYW4gZGlyZWN0 aW9uIGlzCisJICogdXNlZCBmb3IgdGhpcy4KKwkgKi8KKwlBc3NlcnQocHJpb3JiYXRjaC0+ZGly ID09IGRpcik7CisKKwkvKgorCSAqIERldGVybWluZSB3aGljaCBwYWdlIHRvIHJlYWQgbmV4dCBi YXNlZCBvbiBzY2FuIGRpcmVjdGlvbiBhbmQgZGV0YWlscworCSAqIHRha2VuIGZyb20gdGhlIHBy aW9yIGJhdGNoCiAJICovCiAJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKLQl7Ci0J CWlmICgrK3NvLT5jdXJyUG9zLml0ZW1JbmRleCA+IHNvLT5jdXJyUG9zLmxhc3RJdGVtKQotCQl7 Ci0JCQlpZiAoc28tPm51bUtpbGxlZCA+IDApCi0JCQkJX2hhc2hfa2lsbF9pdGVtcyhzY2FuKTsK KwkJYmxrbm8gPSBoYXNocHJpb3JiYXRjaC0+bmV4dFBhZ2U7CisJZWxzZQorCQlibGtubyA9IGhh c2hwcmlvcmJhdGNoLT5wcmV2UGFnZTsKIAotCQkJYmxrbm8gPSBzby0+Y3VyclBvcy5uZXh0UGFn ZTsKLQkJCWlmIChCbG9ja051bWJlcklzVmFsaWQoYmxrbm8pKQotCQkJewotCQkJCWJ1ZiA9IF9o YXNoX2dldGJ1ZihyZWwsIGJsa25vLCBIQVNIX1JFQUQsIExIX09WRVJGTE9XX1BBR0UpOwotCQkJ CWlmICghX2hhc2hfcmVhZHBhZ2Uoc2NhbiwgJmJ1ZiwgZGlyKSkKLQkJCQkJZW5kX29mX3NjYW4g PSB0cnVlOwotCQkJfQotCQkJZWxzZQotCQkJCWVuZF9vZl9zY2FuID0gdHJ1ZTsKLQkJfQotCX0K KwkvKgorCSAqIEZvciBiaXRtYXAgc2NhbiBjYWxsZXJzLCByZWxlYXNlIHRoZSBwcmlvciBiYXRj aCBub3cgc28gdGhhdCB0aGUKKwkgKiBhbGxvY2F0aW9uIGJlbG93IGNhbiByZXVzZSBpdHMgbWVt b3J5LiAgVGhhdCB3YXkgYml0bWFwIHNjYW5zIG5ldmVyCisJICogbmVlZCBtb3JlIHRoYW4gb25l IGJhdGNoIGFsbG9jYXRpb24uCisJICovCisJaWYgKCFzY2FuLT51c2ViYXRjaHJpbmcpCisJCWlu ZGV4YW1fdXRpbF9yZWxlYXNlX2JhdGNoKHNjYW4sIHByaW9yYmF0Y2gpOworCisJaWYgKCFCbG9j a051bWJlcklzVmFsaWQoYmxrbm8pKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIEFsbG9jYXRlIHNw YWNlIGZvciBuZXh0IGJhdGNoICovCisJYmF0Y2ggPSBpbmRleGFtX3V0aWxfYWxsb2NfYmF0Y2go c2Nhbik7CisKKwkvKiBHZXQgdGhlIGJ1ZmZlciBmb3IgbmV4dCBiYXRjaCAqLworCWlmIChTY2Fu RGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCisJCWJ1ZiA9IF9oYXNoX2dldGJ1ZihyZWwsIGJsa25v LCBIQVNIX1JFQUQsIExIX09WRVJGTE9XX1BBR0UpOwogCWVsc2UKIAl7Ci0JCWlmICgtLXNvLT5j dXJyUG9zLml0ZW1JbmRleCA8IHNvLT5jdXJyUG9zLmZpcnN0SXRlbSkKLQkJewotCQkJaWYgKHNv LT5udW1LaWxsZWQgPiAwKQotCQkJCV9oYXNoX2tpbGxfaXRlbXMoc2Nhbik7CisJCWJ1ZiA9IF9o YXNoX2dldGJ1ZihyZWwsIGJsa25vLCBIQVNIX1JFQUQsCisJCQkJCQkgICBMSF9CVUNLRVRfUEFH RSB8IExIX09WRVJGTE9XX1BBR0UpOwogCi0JCQlibGtubyA9IHNvLT5jdXJyUG9zLnByZXZQYWdl OwotCQkJaWYgKEJsb2NrTnVtYmVySXNWYWxpZChibGtubykpCi0JCQl7Ci0JCQkJYnVmID0gX2hh c2hfZ2V0YnVmKHJlbCwgYmxrbm8sIEhBU0hfUkVBRCwKLQkJCQkJCQkJICAgTEhfQlVDS0VUX1BB R0UgfCBMSF9PVkVSRkxPV19QQUdFKTsKLQotCQkJCS8qCi0JCQkJICogV2UgYWx3YXlzIG1haW50 YWluIHRoZSBwaW4gb24gYnVja2V0IHBhZ2UgZm9yIHdob2xlIHNjYW4KLQkJCQkgKiBvcGVyYXRp b24sIHNvIHJlbGVhc2luZyB0aGUgYWRkaXRpb25hbCBwaW4gd2UgaGF2ZSBhY3F1aXJlZAotCQkJ CSAqIGhlcmUuCi0JCQkJICovCi0JCQkJaWYgKGJ1ZiA9PSBzby0+aGFzaHNvX2J1Y2tldF9idWYg fHwKLQkJCQkJYnVmID09IHNvLT5oYXNoc29fc3BsaXRfYnVja2V0X2J1ZikKLQkJCQkJX2hhc2hf ZHJvcGJ1ZihyZWwsIGJ1Zik7Ci0KLQkJCQlpZiAoIV9oYXNoX3JlYWRwYWdlKHNjYW4sICZidWYs IGRpcikpCi0JCQkJCWVuZF9vZl9zY2FuID0gdHJ1ZTsKLQkJCX0KLQkJCWVsc2UKLQkJCQllbmRf b2Zfc2NhbiA9IHRydWU7Ci0JCX0KKwkJLyoKKwkJICogV2UgYWx3YXlzIG1haW50YWluIHRoZSBw aW4gb24gYnVja2V0IHBhZ2UgZm9yIHdob2xlIHNjYW4gb3BlcmF0aW9uLAorCQkgKiBzbyByZWxl YXNpbmcgdGhlIGFkZGl0aW9uYWwgcGluIHdlIGhhdmUgYWNxdWlyZWQgaGVyZS4KKwkJICovCisJ CWlmIChidWYgPT0gc28tPmhhc2hzb19idWNrZXRfYnVmIHx8CisJCQlidWYgPT0gc28tPmhhc2hz b19zcGxpdF9idWNrZXRfYnVmKQorCQkJX2hhc2hfZHJvcGJ1ZihyZWwsIGJ1Zik7CiAJfQogCi0J aWYgKGVuZF9vZl9zY2FuKQorCS8qIFJlYWQgdGhlIG5leHQgcGFnZSBhbmQgbG9hZCBpdGVtcyBp bnRvIGFsbG9jYXRlZCBiYXRjaCAqLworCWlmICghX2hhc2hfcmVhZHBhZ2Uoc2NhbiwgYnVmLCBk aXIsIGJhdGNoKSkKIAl7Ci0JCV9oYXNoX2Ryb3BzY2FuYnVmKHJlbCwgc28pOwotCQlIYXNoU2Nh blBvc0ludmFsaWRhdGUoc28tPmN1cnJQb3MpOwotCQlyZXR1cm4gZmFsc2U7CisJCWluZGV4YW1f dXRpbF9yZWxlYXNlX2JhdGNoKHNjYW4sIGJhdGNoKTsKKwkJcmV0dXJuIE5VTEw7CiAJfQogCi0J LyogT0ssIGl0ZW1JbmRleCBzYXlzIHdoYXQgdG8gcmV0dXJuICovCi0JY3Vyckl0ZW0gPSAmc28t PmN1cnJQb3MuaXRlbXNbc28tPmN1cnJQb3MuaXRlbUluZGV4XTsKLQlzY2FuLT54c19oZWFwdGlk ID0gY3Vyckl0ZW0tPmhlYXBUaWQ7Ci0KLQlyZXR1cm4gdHJ1ZTsKKwkvKiBSZXR1cm4gdGhlIGJh dGNoIGNvbnRhaW5pbmcgbWF0Y2hlZCBpdGVtcyBmcm9tIG5leHQgcGFnZSAqLworCXJldHVybiBi YXRjaDsKIH0KIAogLyoKQEAgLTI3MCwyMiArMjU5LDIwIEBAIF9oYXNoX3JlYWRwcmV2KEluZGV4 U2NhbkRlc2Mgc2NhbiwKIH0KIAogLyoKLSAqCV9oYXNoX2ZpcnN0KCkgLS0gRmluZCB0aGUgZmly c3QgaXRlbSBpbiBhIHNjYW4uCisgKglfaGFzaF9maXJzdCgpIC0tIEZpbmQgdGhlIGZpcnN0IGJh dGNoIG9mIGl0ZW1zIGluIGEgc2Nhbi4KICAqCi0gKgkJV2UgZmluZCB0aGUgZmlyc3QgaXRlbSAo b3IsIGlmIGJhY2t3YXJkIHNjYW4sIHRoZSBsYXN0IGl0ZW0pIGluIHRoZQotICoJCWluZGV4IHRo YXQgc2F0aXNmaWVzIHRoZSBxdWFsaWZpY2F0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2Nhbgot ICoJCWRlc2NyaXB0b3IuCisgKgkJV2UgZmluZCB0aGUgZmlyc3QgYmF0Y2ggb2YgaXRlbXMgKG9y LCBpZiBiYWNrd2FyZCBzY2FuLCB0aGUgbGFzdAorICoJCWJhdGNoKSBpbiB0aGUgaW5kZXggdGhh dCBzYXRpc2ZpZXMgdGhlIHF1YWxpZmljYXRpb24gYXNzb2NpYXRlZCB3aXRoCisgKgkJdGhlIHNj YW4gZGVzY3JpcHRvci4KICAqCi0gKgkJT24gc3VjY2Vzc2Z1bCBleGl0LCBpZiB0aGUgcGFnZSBj b250YWluaW5nIGN1cnJlbnQgaW5kZXggdHVwbGUgaXMgYW4KLSAqCQlvdmVyZmxvdyBwYWdlLCBi b3RoIHBpbiBhbmQgbG9jayBhcmUgcmVsZWFzZWQgd2hlcmVhcyBpZiBpdCBpcyBhIGJ1Y2tldAot ICoJCXBhZ2UgdGhlbiBpdCBpcyBwaW5uZWQgYnV0IG5vdCBsb2NrZWQgYW5kIGRhdGEgYWJvdXQg dGhlIG1hdGNoaW5nCi0gKgkJdHVwbGUocykgb24gdGhlIHBhZ2UgaGFzIGJlZW4gbG9hZGVkIGlu dG8gc28tPmN1cnJQb3MsCi0gKgkJc2Nhbi0+eHNfaGVhcHRpZCBpcyBzZXQgdG8gdGhlIGhlYXAg VElEIG9mIHRoZSBjdXJyZW50IHR1cGxlLgorICoJCU9uIHN1Y2Nlc3NmdWwgZXhpdCwgcmV0dXJu cyBhIGJhdGNoIGNvbnRhaW5pbmcgbWF0Y2hpbmcgaXRlbXMuCisgKgkJT3RoZXJ3aXNlIHJldHVy bnMgTlVMTCwgaW5kaWNhdGluZyB0aGF0IHRoZXJlIGFyZSBubyBmdXJ0aGVyIG1hdGNoZXMuCisg KgkJTm8gbG9ja3MgYXJlIGV2ZXIgaGVsZCB3aGVuIHdlIHJldHVybi4KICAqCi0gKgkJT24gZmFp bHVyZSBleGl0IChubyBtb3JlIHR1cGxlcyksIHdlIHJldHVybiBmYWxzZSwgd2l0aCBwaW4gaGVs ZCBvbgotICoJCWJ1Y2tldCBwYWdlIGJ1dCBubyBwaW5zIG9yIGxvY2tzIGhlbGQgb24gb3ZlcmZs b3cgcGFnZS4KKyAqCQlXZSBhbHdheXMgcmV0YWluIG91ciBvd24gcGluIG9uIHRoZSBidWNrZXQg cGFnZS4gIFdoZW4gd2UgcmV0dXJuIGEKKyAqCQliYXRjaCB3aXRoIGEgYnVja2V0IHBhZ2UsIGl0 IHdpbGwgcmV0YWluIGl0cyBvd24gcmVmZXJlbmNlIHBpbi4KICAqLwotYm9vbAorSW5kZXhTY2Fu QmF0Y2gKIF9oYXNoX2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIp CiB7CiAJUmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKQEAgLTI5Niw3ICsyODMs NyBAQCBfaGFzaF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQog CUJ1ZmZlcgkJYnVmOwogCVBhZ2UJCXBhZ2U7CiAJSGFzaFBhZ2VPcGFxdWUgb3BhcXVlOwotCUhh c2hTY2FuUG9zSXRlbSAqY3Vyckl0ZW07CisJSW5kZXhTY2FuQmF0Y2ggYmF0Y2g7CiAKIAlwZ3N0 YXRfY291bnRfaW5kZXhfc2NhbihyZWwpOwogCWlmIChzY2FuLT5pbnN0cnVtZW50KQpAQCAtMzI2 LDcgKzMxMyw3IEBAIF9oYXNoX2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlv biBkaXIpCiAJICogaXRlbXMgaW4gdGhlIGluZGV4LgogCSAqLwogCWlmIChjdXItPnNrX2ZsYWdz ICYgU0tfSVNOVUxMKQotCQlyZXR1cm4gZmFsc2U7CisJCXJldHVybiBOVUxMOwogCiAJLyoKIAkg KiBPa2F5IHRvIGNvbXB1dGUgdGhlIGhhc2gga2V5LiAgV2Ugd2FudCB0byBkbyB0aGlzIGJlZm9y ZSBhY3F1aXJpbmcgYW55CkBAIC00MTksMTkxICs0MDYsMTUyIEBAIF9oYXNoX2ZpcnN0KEluZGV4 U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJCQlfaGFzaF9yZWFkbmV4dChzY2Fu LCAmYnVmLCAmcGFnZSwgJm9wYXF1ZSk7CiAJfQogCi0JLyogcmVtZW1iZXIgd2hpY2ggYnVmZmVy IHdlIGhhdmUgcGlubmVkLCBpZiBhbnkgKi8KLQlBc3NlcnQoQnVmZmVySXNJbnZhbGlkKHNvLT5j dXJyUG9zLmJ1ZikpOwotCXNvLT5jdXJyUG9zLmJ1ZiA9IGJ1ZjsKKwkvKiBBbGxvY2F0ZSBzcGFj ZSBmb3IgZmlyc3QgYmF0Y2ggKi8KKwliYXRjaCA9IGluZGV4YW1fdXRpbF9hbGxvY19iYXRjaChz Y2FuKTsKIAotCS8qIE5vdyBmaW5kIGFsbCB0aGUgdHVwbGVzIHNhdGlzZnlpbmcgdGhlIHF1YWxp ZmljYXRpb24gZnJvbSBhIHBhZ2UgKi8KLQlpZiAoIV9oYXNoX3JlYWRwYWdlKHNjYW4sICZidWYs IGRpcikpCi0JCXJldHVybiBmYWxzZTsKKwkvKiBSZWFkIHRoZSBmaXJzdCBwYWdlIGFuZCBsb2Fk IGl0ZW1zIGludG8gYWxsb2NhdGVkIGJhdGNoICovCisJaWYgKCFfaGFzaF9yZWFkcGFnZShzY2Fu LCBidWYsIGRpciwgYmF0Y2gpKQorCXsKKwkJaW5kZXhhbV91dGlsX3JlbGVhc2VfYmF0Y2goc2Nh biwgYmF0Y2gpOworCQlyZXR1cm4gTlVMTDsKKwl9CiAKLQkvKiBPSywgaXRlbUluZGV4IHNheXMg d2hhdCB0byByZXR1cm4gKi8KLQljdXJySXRlbSA9ICZzby0+Y3VyclBvcy5pdGVtc1tzby0+Y3Vy clBvcy5pdGVtSW5kZXhdOwotCXNjYW4tPnhzX2hlYXB0aWQgPSBjdXJySXRlbS0+aGVhcFRpZDsK LQotCS8qIGlmIHdlJ3JlIGhlcmUsIF9oYXNoX3JlYWRwYWdlIGZvdW5kIGEgdmFsaWQgdHVwbGVz ICovCi0JcmV0dXJuIHRydWU7CisJLyogUmV0dXJuIHRoZSBiYXRjaCBjb250YWluaW5nIG1hdGNo ZWQgaXRlbXMgKi8KKwlyZXR1cm4gYmF0Y2g7CiB9CiAKIC8qCi0gKglfaGFzaF9yZWFkcGFnZSgp IC0tIExvYWQgZGF0YSBmcm9tIGN1cnJlbnQgaW5kZXggcGFnZSBpbnRvIHNvLT5jdXJyUG9zCisg KglfaGFzaF9yZWFkcGFnZSgpIC0tIExvYWQgZGF0YSBmcm9tIGN1cnJlbnQgaW5kZXggcGFnZSBp bnRvIGJhdGNoCiAgKgogICoJV2Ugc2NhbiBhbGwgdGhlIGl0ZW1zIGluIHRoZSBjdXJyZW50IGlu ZGV4IHBhZ2UgYW5kIHNhdmUgdGhlbSBpbnRvCi0gKglzby0+Y3VyclBvcyBpZiBpdCBzYXRpc2Zp ZXMgdGhlIHF1YWxpZmljYXRpb24uIElmIG5vIG1hdGNoaW5nIGl0ZW1zCisgKgl0aGUgYmF0Y2gg aWYgdGhleSBzYXRpc2Z5IHRoZSBxdWFsaWZpY2F0aW9uLiBJZiBubyBtYXRjaGluZyBpdGVtcwog ICoJYXJlIGZvdW5kIGluIHRoZSBjdXJyZW50IHBhZ2UsIHdlIG1vdmUgdG8gdGhlIG5leHQgb3Ig cHJldmlvdXMgcGFnZQogICoJaW4gYSBidWNrZXQgY2hhaW4gYXMgaW5kaWNhdGVkIGJ5IHRoZSBk aXJlY3Rpb24uCiAgKgogICoJUmV0dXJuIHRydWUgaWYgYW55IG1hdGNoaW5nIGl0ZW1zIGFyZSBm b3VuZCBlbHNlIHJldHVybiBmYWxzZS4KICAqLwogc3RhdGljIGJvb2wKLV9oYXNoX3JlYWRwYWdl KEluZGV4U2NhbkRlc2Mgc2NhbiwgQnVmZmVyICpidWZQLCBTY2FuRGlyZWN0aW9uIGRpcikKK19o YXNoX3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQnVmZmVyIGJ1ZiwgU2NhbkRpcmVjdGlv biBkaXIsCisJCQkgICBJbmRleFNjYW5CYXRjaCBiYXRjaCkKIHsKIAlSZWxhdGlvbglyZWwgPSBz Y2FuLT5pbmRleFJlbGF0aW9uOwogCUhhc2hTY2FuT3BhcXVlIHNvID0gKEhhc2hTY2FuT3BhcXVl KSBzY2FuLT5vcGFxdWU7Ci0JQnVmZmVyCQlidWY7CisJSGFzaEJhdGNoRGF0YSAqaGFzaGJhdGNo ID0gSGFzaEJhdGNoR2V0RGF0YShzY2FuLCBiYXRjaCk7CiAJUGFnZQkJcGFnZTsKIAlIYXNoUGFn ZU9wYXF1ZSBvcGFxdWU7CiAJT2Zmc2V0TnVtYmVyIG9mZm51bTsKIAl1aW50MTYJCWl0ZW1JbmRl eDsKIAotCWJ1ZiA9ICpidWZQOwogCUFzc2VydChCdWZmZXJJc1ZhbGlkKGJ1ZikpOwogCV9oYXNo X2NoZWNrcGFnZShyZWwsIGJ1ZiwgTEhfQlVDS0VUX1BBR0UgfCBMSF9PVkVSRkxPV19QQUdFKTsK IAlwYWdlID0gQnVmZmVyR2V0UGFnZShidWYpOwogCW9wYXF1ZSA9IEhhc2hQYWdlR2V0T3BhcXVl KHBhZ2UpOwogCi0Jc28tPmN1cnJQb3MuYnVmID0gYnVmOwotCXNvLT5jdXJyUG9zLmN1cnJQYWdl ID0gQnVmZmVyR2V0QmxvY2tOdW1iZXIoYnVmKTsKKwloYXNoYmF0Y2gtPmJ1ZiA9IGJ1ZjsKKwlo YXNoYmF0Y2gtPmN1cnJQYWdlID0gQnVmZmVyR2V0QmxvY2tOdW1iZXIoYnVmKTsKKwliYXRjaC0+ ZGlyID0gZGlyOwogCiAJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKIAl7Ci0JCUJs b2NrTnVtYmVyIHByZXZfYmxrbm8gPSBJbnZhbGlkQmxvY2tOdW1iZXI7Ci0KIAkJZm9yICg7OykK IAkJewogCQkJLyogbmV3IHBhZ2UsIGxvY2F0ZSBzdGFydGluZyBwb3NpdGlvbiBieSBiaW5hcnkg c2VhcmNoICovCiAJCQlvZmZudW0gPSBfaGFzaF9iaW5zZWFyY2gocGFnZSwgc28tPmhhc2hzb19z a19oYXNoKTsKIAotCQkJaXRlbUluZGV4ID0gX2hhc2hfbG9hZF9xdWFsaWZpZWRfaXRlbXMoc2Nh biwgcGFnZSwgb2ZmbnVtLCBkaXIpOworCQkJaXRlbUluZGV4ID0gX2hhc2hfbG9hZF9xdWFsaWZp ZWRfaXRlbXMoc2NhbiwgcGFnZSwgb2ZmbnVtLCBkaXIsCisJCQkJCQkJCQkJCQkgICBiYXRjaCk7 CiAKIAkJCWlmIChpdGVtSW5kZXggIT0gMCkKIAkJCQlicmVhazsKIAogCQkJLyoKLQkJCSAqIENv dWxkIG5vdCBmaW5kIGFueSBtYXRjaGluZyB0dXBsZXMgaW4gdGhlIGN1cnJlbnQgcGFnZSwgbW92 ZSB0bwotCQkJICogdGhlIG5leHQgcGFnZS4gQmVmb3JlIGxlYXZpbmcgdGhlIGN1cnJlbnQgcGFn ZSwgZGVhbCB3aXRoIGFueQotCQkJICoga2lsbGVkIGl0ZW1zLgorCQkJICogQ291bGQgbm90IGZp bmQgYW55IG1hdGNoaW5nIHR1cGxlcyBpbiB0aGUgY3VycmVudCBwYWdlLCB0cnkgdG8KKwkJCSAq IG1vdmUgdG8gdGhlIG5leHQgcGFnZQogCQkJICovCi0JCQlpZiAoc28tPm51bUtpbGxlZCA+IDAp Ci0JCQkJX2hhc2hfa2lsbF9pdGVtcyhzY2FuKTsKLQotCQkJLyoKLQkJCSAqIElmIHRoaXMgaXMg YSBwcmltYXJ5IGJ1Y2tldCBwYWdlLCBoYXNob19wcmV2Ymxrbm8gaXMgbm90IGEgcmVhbAotCQkJ ICogYmxvY2sgbnVtYmVyLgotCQkJICovCi0JCQlpZiAoc28tPmN1cnJQb3MuYnVmID09IHNvLT5o YXNoc29fYnVja2V0X2J1ZiB8fAotCQkJCXNvLT5jdXJyUG9zLmJ1ZiA9PSBzby0+aGFzaHNvX3Nw bGl0X2J1Y2tldF9idWYpCi0JCQkJcHJldl9ibGtubyA9IEludmFsaWRCbG9ja051bWJlcjsKLQkJ CWVsc2UKLQkJCQlwcmV2X2Jsa25vID0gb3BhcXVlLT5oYXNob19wcmV2Ymxrbm87Ci0KIAkJCV9o YXNoX3JlYWRuZXh0KHNjYW4sICZidWYsICZwYWdlLCAmb3BhcXVlKTsKLQkJCWlmIChCdWZmZXJJ c1ZhbGlkKGJ1ZikpCi0JCQl7Ci0JCQkJc28tPmN1cnJQb3MuYnVmID0gYnVmOwotCQkJCXNvLT5j dXJyUG9zLmN1cnJQYWdlID0gQnVmZmVyR2V0QmxvY2tOdW1iZXIoYnVmKTsKLQkJCX0KLQkJCWVs c2UKLQkJCXsKLQkJCQkvKgotCQkJCSAqIFJlbWVtYmVyIG5leHQgYW5kIHByZXZpb3VzIGJsb2Nr IG51bWJlcnMgZm9yIHNjcm9sbGFibGUKLQkJCQkgKiBjdXJzb3JzIHRvIGtub3cgdGhlIHN0YXJ0 IHBvc2l0aW9uIGFuZCByZXR1cm4gZmFsc2UKLQkJCQkgKiBpbmRpY2F0aW5nIHRoYXQgbm8gbW9y ZSBtYXRjaGluZyB0dXBsZXMgd2VyZSBmb3VuZC4gQWxzbywKLQkJCQkgKiBkb24ndCByZXNldCBj dXJyUGFnZSBvciBsc24sIGJlY2F1c2Ugd2UgZXhwZWN0Ci0JCQkJICogX2hhc2hfa2lsbF9pdGVt cyB0byBiZSBjYWxsZWQgZm9yIHRoZSBvbGQgcGFnZSBhZnRlciB0aGlzCi0JCQkJICogZnVuY3Rp b24gcmV0dXJucy4KLQkJCQkgKi8KLQkJCQlzby0+Y3VyclBvcy5wcmV2UGFnZSA9IHByZXZfYmxr bm87Ci0JCQkJc28tPmN1cnJQb3MubmV4dFBhZ2UgPSBJbnZhbGlkQmxvY2tOdW1iZXI7Ci0JCQkJ c28tPmN1cnJQb3MuYnVmID0gYnVmOworCQkJaWYgKCFCdWZmZXJJc1ZhbGlkKGJ1ZikpCiAJCQkJ cmV0dXJuIGZhbHNlOwotCQkJfQorCisJCQloYXNoYmF0Y2gtPmJ1ZiA9IGJ1ZjsKKwkJCWhhc2hi YXRjaC0+Y3VyclBhZ2UgPSBCdWZmZXJHZXRCbG9ja051bWJlcihidWYpOwogCQl9CiAKLQkJc28t PmN1cnJQb3MuZmlyc3RJdGVtID0gMDsKLQkJc28tPmN1cnJQb3MubGFzdEl0ZW0gPSBpdGVtSW5k ZXggLSAxOwotCQlzby0+Y3VyclBvcy5pdGVtSW5kZXggPSAwOworCQliYXRjaC0+Zmlyc3RJdGVt ID0gMDsKKwkJYmF0Y2gtPmxhc3RJdGVtID0gaXRlbUluZGV4IC0gMTsKIAl9CiAJZWxzZQogCXsK LQkJQmxvY2tOdW1iZXIgbmV4dF9ibGtubyA9IEludmFsaWRCbG9ja051bWJlcjsKLQogCQlmb3Ig KDs7KQogCQl7CiAJCQkvKiBuZXcgcGFnZSwgbG9jYXRlIHN0YXJ0aW5nIHBvc2l0aW9uIGJ5IGJp bmFyeSBzZWFyY2ggKi8KIAkJCW9mZm51bSA9IF9oYXNoX2JpbnNlYXJjaF9sYXN0KHBhZ2UsIHNv LT5oYXNoc29fc2tfaGFzaCk7CiAKLQkJCWl0ZW1JbmRleCA9IF9oYXNoX2xvYWRfcXVhbGlmaWVk X2l0ZW1zKHNjYW4sIHBhZ2UsIG9mZm51bSwgZGlyKTsKKwkJCWl0ZW1JbmRleCA9IF9oYXNoX2xv YWRfcXVhbGlmaWVkX2l0ZW1zKHNjYW4sIHBhZ2UsIG9mZm51bSwgZGlyLAorCQkJCQkJCQkJCQkJ ICAgYmF0Y2gpOwogCiAJCQlpZiAoaXRlbUluZGV4ICE9IE1heEluZGV4VHVwbGVzUGVyUGFnZSkK IAkJCQlicmVhazsKIAogCQkJLyoKLQkJCSAqIENvdWxkIG5vdCBmaW5kIGFueSBtYXRjaGluZyB0 dXBsZXMgaW4gdGhlIGN1cnJlbnQgcGFnZSwgbW92ZSB0bwotCQkJICogdGhlIHByZXZpb3VzIHBh Z2UuIEJlZm9yZSBsZWF2aW5nIHRoZSBjdXJyZW50IHBhZ2UsIGRlYWwgd2l0aAotCQkJICogYW55 IGtpbGxlZCBpdGVtcy4KKwkJCSAqIENvdWxkIG5vdCBmaW5kIGFueSBtYXRjaGluZyB0dXBsZXMg aW4gdGhlIGN1cnJlbnQgcGFnZSwgdHJ5IHRvCisJCQkgKiBtb3ZlIHRvIHRoZSBwcmV2aW91cyBw YWdlCiAJCQkgKi8KLQkJCWlmIChzby0+bnVtS2lsbGVkID4gMCkKLQkJCQlfaGFzaF9raWxsX2l0 ZW1zKHNjYW4pOwotCi0JCQlpZiAoc28tPmN1cnJQb3MuYnVmID09IHNvLT5oYXNoc29fYnVja2V0 X2J1ZiB8fAotCQkJCXNvLT5jdXJyUG9zLmJ1ZiA9PSBzby0+aGFzaHNvX3NwbGl0X2J1Y2tldF9i dWYpCi0JCQkJbmV4dF9ibGtubyA9IG9wYXF1ZS0+aGFzaG9fbmV4dGJsa25vOwotCiAJCQlfaGFz aF9yZWFkcHJldihzY2FuLCAmYnVmLCAmcGFnZSwgJm9wYXF1ZSk7Ci0JCQlpZiAoQnVmZmVySXNW YWxpZChidWYpKQotCQkJewotCQkJCXNvLT5jdXJyUG9zLmJ1ZiA9IGJ1ZjsKLQkJCQlzby0+Y3Vy clBvcy5jdXJyUGFnZSA9IEJ1ZmZlckdldEJsb2NrTnVtYmVyKGJ1Zik7Ci0JCQl9Ci0JCQllbHNl Ci0JCQl7Ci0JCQkJLyoKLQkJCQkgKiBSZW1lbWJlciBuZXh0IGFuZCBwcmV2aW91cyBibG9jayBu dW1iZXJzIGZvciBzY3JvbGxhYmxlCi0JCQkJICogY3Vyc29ycyB0byBrbm93IHRoZSBzdGFydCBw b3NpdGlvbiBhbmQgcmV0dXJuIGZhbHNlCi0JCQkJICogaW5kaWNhdGluZyB0aGF0IG5vIG1vcmUg bWF0Y2hpbmcgdHVwbGVzIHdlcmUgZm91bmQuIEFsc28sCi0JCQkJICogZG9uJ3QgcmVzZXQgY3Vy clBhZ2Ugb3IgbHNuLCBiZWNhdXNlIHdlIGV4cGVjdAotCQkJCSAqIF9oYXNoX2tpbGxfaXRlbXMg dG8gYmUgY2FsbGVkIGZvciB0aGUgb2xkIHBhZ2UgYWZ0ZXIgdGhpcwotCQkJCSAqIGZ1bmN0aW9u IHJldHVybnMuCi0JCQkJICovCi0JCQkJc28tPmN1cnJQb3MucHJldlBhZ2UgPSBJbnZhbGlkQmxv Y2tOdW1iZXI7Ci0JCQkJc28tPmN1cnJQb3MubmV4dFBhZ2UgPSBuZXh0X2Jsa25vOwotCQkJCXNv LT5jdXJyUG9zLmJ1ZiA9IGJ1ZjsKKwkJCWlmICghQnVmZmVySXNWYWxpZChidWYpKQogCQkJCXJl dHVybiBmYWxzZTsKLQkJCX0KKworCQkJaGFzaGJhdGNoLT5idWYgPSBidWY7CisJCQloYXNoYmF0 Y2gtPmN1cnJQYWdlID0gQnVmZmVyR2V0QmxvY2tOdW1iZXIoYnVmKTsKIAkJfQogCi0JCXNvLT5j dXJyUG9zLmZpcnN0SXRlbSA9IGl0ZW1JbmRleDsKLQkJc28tPmN1cnJQb3MubGFzdEl0ZW0gPSBN YXhJbmRleFR1cGxlc1BlclBhZ2UgLSAxOwotCQlzby0+Y3VyclBvcy5pdGVtSW5kZXggPSBNYXhJ bmRleFR1cGxlc1BlclBhZ2UgLSAxOworCQliYXRjaC0+Zmlyc3RJdGVtID0gaXRlbUluZGV4Owor CQliYXRjaC0+bGFzdEl0ZW0gPSBNYXhJbmRleFR1cGxlc1BlclBhZ2UgLSAxOwogCX0KIAotCWlm IChzby0+Y3VyclBvcy5idWYgPT0gc28tPmhhc2hzb19idWNrZXRfYnVmIHx8Ci0JCXNvLT5jdXJy UG9zLmJ1ZiA9PSBzby0+aGFzaHNvX3NwbGl0X2J1Y2tldF9idWYpCisJLyoKKwkgKiBTYXZlZCBh dCBsZWFzdCBvbmUgbWF0Y2ggaW4gYmF0Y2guaXRlbXNbXS4gIFByZXBhcmUgZm9yIGhhc2hnZXRi YXRjaCB0bworCSAqIHJldHVybiBpdCBieSBpbml0aWFsaXppbmcgcmVtYWluaW5nIHVuaW5pdGlh bGl6ZWQgZmllbGRzLgorCSAqLworCWlmIChoYXNoYmF0Y2gtPmJ1ZiA9PSBzby0+aGFzaHNvX2J1 Y2tldF9idWYgfHwKKwkJaGFzaGJhdGNoLT5idWYgPT0gc28tPmhhc2hzb19zcGxpdF9idWNrZXRf YnVmKQogCXsKLQkJc28tPmN1cnJQb3MucHJldlBhZ2UgPSBJbnZhbGlkQmxvY2tOdW1iZXI7Ci0J CXNvLT5jdXJyUG9zLm5leHRQYWdlID0gb3BhcXVlLT5oYXNob19uZXh0Ymxrbm87Ci0JCUxvY2tC dWZmZXIoc28tPmN1cnJQb3MuYnVmLCBCVUZGRVJfTE9DS19VTkxPQ0spOworCQkvKgorCQkgKiBC YXRjaCdzIGJ1ZmZlciBpcyBlaXRoZXIgdGhlIHByaW1hcnkgYnVja2V0LCBvciBhIGJ1Y2tldCBi ZWluZworCQkgKiBwb3B1bGF0ZWQgZHVlIHRvIGEgc3BsaXQuCisJCSAqCisJCSAqIEluY3JlbWVu dCBsb2NhbCByZWZlcmVuY2UgY291bnQgc28gdGhhdCBiYXRjaCBnZXRzIGFuIGluZGVwZW5kZW50 CisJCSAqIGJ1ZmZlciByZWZlcmVuY2UgdGhhdCBjYW4gYmUgcmVsZWFzZWQgKGJ5IHRoZSBjb3Jl IGNvZGUvdGFibGUgQU0pCisJCSAqIGJlZm9yZSB0aGUgaGFzaHNvX2J1Y2tldF9idWYvaGFzaHNv X3NwbGl0X2J1Y2tldF9idWYgcmVmZXJlbmNlcyBhcmUKKwkJICogcmVsZWFzZWQuCisJCSAqLwor CQlJbmNyQnVmZmVyUmVmQ291bnQoaGFzaGJhdGNoLT5idWYpOworCisJCS8qIENhbiBvbmx5IHVz ZSBvcGFxdWUtPmhhc2hvX25leHRibGtubyAqLworCQloYXNoYmF0Y2gtPnByZXZQYWdlID0gSW52 YWxpZEJsb2NrTnVtYmVyOworCQloYXNoYmF0Y2gtPm5leHRQYWdlID0gb3BhcXVlLT5oYXNob19u ZXh0Ymxrbm87CiAJfQogCWVsc2UKIAl7Ci0JCXNvLT5jdXJyUG9zLnByZXZQYWdlID0gb3BhcXVl LT5oYXNob19wcmV2Ymxrbm87Ci0JCXNvLT5jdXJyUG9zLm5leHRQYWdlID0gb3BhcXVlLT5oYXNo b19uZXh0Ymxrbm87Ci0JCV9oYXNoX3JlbGJ1ZihyZWwsIHNvLT5jdXJyUG9zLmJ1Zik7Ci0JCXNv LT5jdXJyUG9zLmJ1ZiA9IEludmFsaWRCdWZmZXI7CisJCS8qIENhbiB1c2Ugb3BhcXVlLT5oYXNo b19wcmV2Ymxrbm8gYW5kIG9wYXF1ZS0+aGFzaG9fbmV4dGJsa25vICovCisJCWhhc2hiYXRjaC0+ cHJldlBhZ2UgPSBvcGFxdWUtPmhhc2hvX3ByZXZibGtubzsKKwkJaGFzaGJhdGNoLT5uZXh0UGFn ZSA9IG9wYXF1ZS0+aGFzaG9fbmV4dGJsa25vOwogCX0KIAotCUFzc2VydChzby0+Y3VyclBvcy5m aXJzdEl0ZW0gPD0gc28tPmN1cnJQb3MubGFzdEl0ZW0pOworCS8qIHdlIHNhdmVkIG9uZSBvciBt b3JlIG1hdGNoZXMgaW4gYmF0Y2guaXRlbXNbXSAqLworCWluZGV4YW1fdXRpbF91bmxvY2tfYmF0 Y2goc2NhbiwgYmF0Y2gsIGhhc2hiYXRjaC0+YnVmKTsKKworCUFzc2VydChiYXRjaC0+Zmlyc3RJ dGVtIDw9IGJhdGNoLT5sYXN0SXRlbSk7CiAJcmV0dXJuIHRydWU7CiB9CiAKIC8qCiAgKiBMb2Fk IGFsbCB0aGUgcXVhbGlmaWVkIGl0ZW1zIGZyb20gYSBjdXJyZW50IGluZGV4IHBhZ2UKLSAqIGlu dG8gc28tPmN1cnJQb3MuIEhlbHBlciBmdW5jdGlvbiBmb3IgX2hhc2hfcmVhZHBhZ2UuCisgKiBp bnRvIGJhdGNoLiBIZWxwZXIgZnVuY3Rpb24gZm9yIF9oYXNoX3JlYWRwYWdlLgogICovCiBzdGF0 aWMgaW50CiBfaGFzaF9sb2FkX3F1YWxpZmllZF9pdGVtcyhJbmRleFNjYW5EZXNjIHNjYW4sIFBh Z2UgcGFnZSwKLQkJCQkJCSAgIE9mZnNldE51bWJlciBvZmZudW0sIFNjYW5EaXJlY3Rpb24gZGly KQorCQkJCQkJICAgT2Zmc2V0TnVtYmVyIG9mZm51bSwgU2NhbkRpcmVjdGlvbiBkaXIsCisJCQkJ CQkgICBJbmRleFNjYW5CYXRjaCBiYXRjaCkKIHsKIAlIYXNoU2Nhbk9wYXF1ZSBzbyA9IChIYXNo U2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwogCUluZGV4VHVwbGUJaXR1cDsKQEAgLTY0MCw3ICs1 ODgsNyBAQCBfaGFzaF9sb2FkX3F1YWxpZmllZF9pdGVtcyhJbmRleFNjYW5EZXNjIHNjYW4sIFBh Z2UgcGFnZSwKIAkJCQlfaGFzaF9jaGVja3F1YWwoc2NhbiwgaXR1cCkpCiAJCQl7CiAJCQkJLyog dHVwbGUgaXMgcXVhbGlmaWVkLCBzbyByZW1lbWJlciBpdCAqLwotCQkJCV9oYXNoX3NhdmVpdGVt KHNvLCBpdGVtSW5kZXgsIG9mZm51bSwgaXR1cCk7CisJCQkJX2hhc2hfc2F2ZWl0ZW0oYmF0Y2gs IGl0ZW1JbmRleCwgb2ZmbnVtLCBpdHVwKTsKIAkJCQlpdGVtSW5kZXgrKzsKIAkJCX0KIAkJCWVs c2UKQEAgLTY4Nyw3ICs2MzUsNyBAQCBfaGFzaF9sb2FkX3F1YWxpZmllZF9pdGVtcyhJbmRleFNj YW5EZXNjIHNjYW4sIFBhZ2UgcGFnZSwKIAkJCXsKIAkJCQlpdGVtSW5kZXgtLTsKIAkJCQkvKiB0 dXBsZSBpcyBxdWFsaWZpZWQsIHNvIHJlbWVtYmVyIGl0ICovCi0JCQkJX2hhc2hfc2F2ZWl0ZW0o c28sIGl0ZW1JbmRleCwgb2ZmbnVtLCBpdHVwKTsKKwkJCQlfaGFzaF9zYXZlaXRlbShiYXRjaCwg aXRlbUluZGV4LCBvZmZudW0sIGl0dXApOwogCQkJfQogCQkJZWxzZQogCQkJewpAQCAtNzA2LDEz ICs2NTQsMTQgQEAgX2hhc2hfbG9hZF9xdWFsaWZpZWRfaXRlbXMoSW5kZXhTY2FuRGVzYyBzY2Fu LCBQYWdlIHBhZ2UsCiAJfQogfQogCi0vKiBTYXZlIGFuIGluZGV4IGl0ZW0gaW50byBzby0+Y3Vy clBvcy5pdGVtc1tpdGVtSW5kZXhdICovCisvKiBTYXZlIGFuIGluZGV4IGl0ZW0gaW50byBiYXRj aC0+aXRlbXNbaXRlbUluZGV4XSAqLwogc3RhdGljIGlubGluZSB2b2lkCi1faGFzaF9zYXZlaXRl bShIYXNoU2Nhbk9wYXF1ZSBzbywgaW50IGl0ZW1JbmRleCwKK19oYXNoX3NhdmVpdGVtKEluZGV4 U2NhbkJhdGNoIGJhdGNoLCBpbnQgaXRlbUluZGV4LAogCQkJICAgT2Zmc2V0TnVtYmVyIG9mZm51 bSwgSW5kZXhUdXBsZSBpdHVwKQogewotCUhhc2hTY2FuUG9zSXRlbSAqY3Vyckl0ZW0gPSAmc28t PmN1cnJQb3MuaXRlbXNbaXRlbUluZGV4XTsKKwlCYXRjaE1hdGNoaW5nSXRlbSAqY3Vyckl0ZW0g PSAmYmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF07CiAKLQljdXJySXRlbS0+aGVhcFRpZCA9IGl0dXAt PnRfdGlkOworCWN1cnJJdGVtLT50YWJsZVRpZCA9IGl0dXAtPnRfdGlkOwogCWN1cnJJdGVtLT5p bmRleE9mZnNldCA9IG9mZm51bTsKKwljdXJySXRlbS0+dHVwbGVPZmZzZXQgPSAwOwogfQpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHV0aWwuYyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy9oYXNoL2hhc2h1dGlsLmMKaW5kZXggMDgxYWRiYzg4Li44OGEzZjNhZDggMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2h1dGlsLmMKKysrIGIvc3JjL2JhY2tl bmQvYWNjZXNzL2hhc2gvaGFzaHV0aWwuYwpAQCAtMTYsMTAgKzE2LDggQEAKIAogI2luY2x1ZGUg ImFjY2Vzcy9oYXNoLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3JlbG9wdGlvbnMuaCIKLSNpbmNsdWRl ICJhY2Nlc3MvcmVsc2Nhbi5oIgogI2luY2x1ZGUgInBvcnQvcGdfYml0dXRpbHMuaCIKICNpbmNs dWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKLSNpbmNsdWRlICJ1dGlscy9yZWwuaCIKIAogI2RlZmlu ZSBDQUxDX05FV19CVUNLRVQob2xkX2J1Y2tldCwgbG93bWFzaykgXAogCQkJb2xkX2J1Y2tldCB8 IChsb3dtYXNrICsgMSkKQEAgLTMzLDcgKzMxLDcgQEAgX2hhc2hfY2hlY2txdWFsKEluZGV4U2Nh bkRlc2Mgc2NhbiwgSW5kZXhUdXBsZSBpdHVwKQogCS8qCiAJICogQ3VycmVudGx5LCB3ZSBjYW4n dCBjaGVjayBhbnkgb2YgdGhlIHNjYW4gY29uZGl0aW9ucyBzaW5jZSB3ZSBkbyBub3QKIAkgKiBo YXZlIHRoZSBvcmlnaW5hbCBpbmRleCBlbnRyeSB2YWx1ZSB0byBzdXBwbHkgdG8gdGhlIHNrX2Z1 bmMuIEFsd2F5cwotCSAqIHJldHVybiB0cnVlOyB3ZSBleHBlY3QgdGhhdCBoYXNoZ2V0dHVwbGUg YWxyZWFkeSBzZXQgdGhlIHJlY2hlY2sgZmxhZworCSAqIHJldHVybiB0cnVlOyB3ZSBleHBlY3Qg dGhhdCBoYXNoZ2V0YmF0Y2ggYWxyZWFkeSBzZXQgdGhlIHJlY2hlY2sgZmxhZwogCSAqIHRvIG1h a2UgdGhlIG1haW4gaW5kZXhzY2FuIGNvZGUgZG8gaXQuCiAJICovCiAjaWZkZWYgTk9UX1VTRUQK QEAgLTUwNSwxMjkgKzUwMywzIEBAIF9oYXNoX2dldF9uZXdidWNrZXRfZnJvbV9vbGRidWNrZXQo UmVsYXRpb24gcmVsLCBCdWNrZXQgb2xkX2J1Y2tldCwKIAogCXJldHVybiBuZXdfYnVja2V0Owog fQotCi0vKgotICogX2hhc2hfa2lsbF9pdGVtcyAtIHNldCBMUF9ERUFEIHN0YXRlIGZvciBpdGVt cyBhbiBpbmRleHNjYW4gY2FsbGVyIGhhcwotICogdG9sZCB1cyB3ZXJlIGtpbGxlZC4KLSAqCi0g KiBzY2FuLT5vcGFxdWUsIHJlZmVyZW5jZWQgbG9jYWxseSB0aHJvdWdoIHNvLCBjb250YWlucyBp bmZvcm1hdGlvbiBhYm91dCB0aGUKLSAqIGN1cnJlbnQgcGFnZSBhbmQga2lsbGVkIHR1cGxlcyB0 aGVyZW9uIChnZW5lcmFsbHksIHRoaXMgc2hvdWxkIG9ubHkgYmUKLSAqIGNhbGxlZCBpZiBzby0+ bnVtS2lsbGVkID4gMCkuCi0gKgotICogVGhlIGNhbGxlciBkb2VzIG5vdCBoYXZlIGEgbG9jayBv biB0aGUgcGFnZSBhbmQgbWF5IG9yIG1heSBub3QgaGF2ZSB0aGUKLSAqIHBhZ2UgcGlubmVkIGlu IGEgYnVmZmVyLiAgTm90ZSB0aGF0IHJlYWQtbG9jayBpcyBzdWZmaWNpZW50IGZvciBzZXR0aW5n Ci0gKiBMUF9ERUFEIHN0YXR1cyAod2hpY2ggaXMgb25seSBhIGhpbnQpLgotICoKLSAqIFRoZSBj YWxsZXIgbXVzdCBoYXZlIHBpbiBvbiBidWNrZXQgYnVmZmVyLCBidXQgbWF5IG9yIG1heSBub3Qg aGF2ZSBwaW4KLSAqIG9uIG92ZXJmbG93IGJ1ZmZlciwgYXMgaW5kaWNhdGVkIGJ5IEhhc2hTY2Fu UG9zSXNQaW5uZWQoc28tPmN1cnJQb3MpLgotICoKLSAqIFdlIG1hdGNoIGl0ZW1zIGJ5IGhlYXAg VElEIGJlZm9yZSBhc3N1bWluZyB0aGV5IGFyZSB0aGUgcmlnaHQgb25lcyB0bwotICogZGVsZXRl LgotICoKLSAqIFRoZXJlIGFyZSBuZXZlciBhbnkgc2NhbnMgYWN0aXZlIGluIGEgYnVja2V0IGF0 IHRoZSB0aW1lIFZBQ1VVTSBiZWdpbnMsCi0gKiBiZWNhdXNlIFZBQ1VVTSB0YWtlcyBhIGNsZWFu dXAgbG9jayBvbiB0aGUgcHJpbWFyeSBidWNrZXQgcGFnZSBhbmQgc2NhbnMKLSAqIGhvbGQgYSBw aW4uICBBIHNjYW4gY2FuIGJlZ2luIGFmdGVyIFZBQ1VVTSBsZWF2ZXMgdGhlIHByaW1hcnkgYnVj a2V0IHBhZ2UKLSAqIGJ1dCBiZWZvcmUgaXQgZmluaXNoZXMgdGhlIGVudGlyZSBidWNrZXQsIGJ1 dCBpdCBjYW4gbmV2ZXIgcGFzcyBWQUNVVU0sCi0gKiBiZWNhdXNlIFZBQ1VVTSBhbHdheXMgbG9j a3MgdGhlIG5leHQgcGFnZSBiZWZvcmUgcmVsZWFzaW5nIHRoZSBsb2NrIG9uCi0gKiB0aGUgcHJl dmlvdXMgb25lLiAgVGhlcmVmb3JlLCB3ZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IGFjY2lk ZW50YWxseQotICoga2lsbGluZyBhIFRJRCB0aGF0IGhhcyBiZWVuIHJldXNlZCBmb3IgYW4gdW5y ZWxhdGVkIHR1cGxlLgotICovCi12b2lkCi1faGFzaF9raWxsX2l0ZW1zKEluZGV4U2NhbkRlc2Mg c2NhbikKLXsKLQlIYXNoU2Nhbk9wYXF1ZSBzbyA9IChIYXNoU2Nhbk9wYXF1ZSkgc2Nhbi0+b3Bh cXVlOwotCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247Ci0JQmxvY2tOdW1iZXIg Ymxrbm87Ci0JQnVmZmVyCQlidWY7Ci0JUGFnZQkJcGFnZTsKLQlIYXNoUGFnZU9wYXF1ZSBvcGFx dWU7Ci0JT2Zmc2V0TnVtYmVyIG9mZm51bSwKLQkJCQltYXhvZmY7Ci0JaW50CQkJbnVtS2lsbGVk ID0gc28tPm51bUtpbGxlZDsKLQlpbnQJCQlpOwotCWJvb2wJCWtpbGxlZHNvbWV0aGluZyA9IGZh bHNlOwotCWJvb2wJCWhhdmVQaW4gPSBmYWxzZTsKLQotCUFzc2VydChzby0+bnVtS2lsbGVkID4g MCk7Ci0JQXNzZXJ0KHNvLT5raWxsZWRJdGVtcyAhPSBOVUxMKTsKLQlBc3NlcnQoSGFzaFNjYW5Q b3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSk7Ci0KLQkvKgotCSAqIEFsd2F5cyByZXNldCB0aGUgc2Nh biBzdGF0ZSwgc28gd2UgZG9uJ3QgbG9vayBmb3Igc2FtZSBpdGVtcyBvbiBvdGhlcgotCSAqIHBh Z2VzLgotCSAqLwotCXNvLT5udW1LaWxsZWQgPSAwOwotCi0JYmxrbm8gPSBzby0+Y3VyclBvcy5j dXJyUGFnZTsKLQlpZiAoSGFzaFNjYW5Qb3NJc1Bpbm5lZChzby0+Y3VyclBvcykpCi0JewotCQkv KgotCQkgKiBXZSBhbHJlYWR5IGhhdmUgcGluIG9uIHRoaXMgYnVmZmVyLCBzbywgYWxsIHdlIG5l ZWQgdG8gZG8gaXMKLQkJICogYWNxdWlyZSBsb2NrIG9uIGl0LgotCQkgKi8KLQkJaGF2ZVBpbiA9 IHRydWU7Ci0JCWJ1ZiA9IHNvLT5jdXJyUG9zLmJ1ZjsKLQkJTG9ja0J1ZmZlcihidWYsIEJVRkZF Ul9MT0NLX1NIQVJFKTsKLQl9Ci0JZWxzZQotCQlidWYgPSBfaGFzaF9nZXRidWYocmVsLCBibGtu bywgSEFTSF9SRUFELCBMSF9PVkVSRkxPV19QQUdFKTsKLQotCXBhZ2UgPSBCdWZmZXJHZXRQYWdl KGJ1Zik7Ci0Jb3BhcXVlID0gSGFzaFBhZ2VHZXRPcGFxdWUocGFnZSk7Ci0JbWF4b2ZmID0gUGFn ZUdldE1heE9mZnNldE51bWJlcihwYWdlKTsKLQotCWZvciAoaSA9IDA7IGkgPCBudW1LaWxsZWQ7 IGkrKykKLQl7Ci0JCWludAkJCWl0ZW1JbmRleCA9IHNvLT5raWxsZWRJdGVtc1tpXTsKLQkJSGFz aFNjYW5Qb3NJdGVtICpjdXJySXRlbSA9ICZzby0+Y3VyclBvcy5pdGVtc1tpdGVtSW5kZXhdOwot Ci0JCW9mZm51bSA9IGN1cnJJdGVtLT5pbmRleE9mZnNldDsKLQotCQlBc3NlcnQoaXRlbUluZGV4 ID49IHNvLT5jdXJyUG9zLmZpcnN0SXRlbSAmJgotCQkJICAgaXRlbUluZGV4IDw9IHNvLT5jdXJy UG9zLmxhc3RJdGVtKTsKLQotCQl3aGlsZSAob2ZmbnVtIDw9IG1heG9mZikKLQkJewotCQkJSXRl bUlkCQlpaWQgPSBQYWdlR2V0SXRlbUlkKHBhZ2UsIG9mZm51bSk7Ci0JCQlJbmRleFR1cGxlCWl0 dXBsZSA9IChJbmRleFR1cGxlKSBQYWdlR2V0SXRlbShwYWdlLCBpaWQpOwotCi0JCQlpZiAoSXRl bVBvaW50ZXJFcXVhbHMoJml0dXBsZS0+dF90aWQsICZjdXJySXRlbS0+aGVhcFRpZCkpCi0JCQl7 Ci0JCQkJaWYgKCFraWxsZWRzb21ldGhpbmcpCi0JCQkJewotCQkJCQkvKgotCQkJCQkgKiBVc2Ug dGhlIGhpbnQgYml0IGluZnJhc3RydWN0dXJlIHRvIGNoZWNrIGlmIHdlIGNhbgotCQkJCQkgKiB1 cGRhdGUgdGhlIHBhZ2Ugd2hpbGUganVzdCBob2xkaW5nIGEgc2hhcmUgbG9jay4gSWYgd2UKLQkJ CQkJICogYXJlIG5vdCBhbGxvd2VkLCB0aGVyZSdzIG5vIHBvaW50IGNvbnRpbnVpbmcuCi0JCQkJ CSAqLwotCQkJCQlpZiAoIUJ1ZmZlckJlZ2luU2V0SGludEJpdHMoYnVmKSkKLQkJCQkJCWdvdG8g dW5sb2NrX3BhZ2U7Ci0JCQkJfQotCi0JCQkJLyogZm91bmQgdGhlIGl0ZW0gKi8KLQkJCQlJdGVt SWRNYXJrRGVhZChpaWQpOwotCQkJCWtpbGxlZHNvbWV0aGluZyA9IHRydWU7Ci0JCQkJYnJlYWs7 CQkJLyogb3V0IG9mIGlubmVyIHNlYXJjaCBsb29wICovCi0JCQl9Ci0JCQlvZmZudW0gPSBPZmZz ZXROdW1iZXJOZXh0KG9mZm51bSk7Ci0JCX0KLQl9Ci0KLQkvKgotCSAqIFNpbmNlIHRoaXMgY2Fu IGJlIHJlZG9uZSBsYXRlciBpZiBuZWVkZWQsIG1hcmsgYXMgZGlydHkgaGludC4gV2hlbmV2ZXIK LQkgKiB3ZSBtYXJrIGFueXRoaW5nIExQX0RFQUQsIHdlIGFsc28gc2V0IHRoZSBwYWdlJ3MKLQkg KiBMSF9QQUdFX0hBU19ERUFEX1RVUExFUyBmbGFnLCB3aGljaCBpcyBsaWtld2lzZSBqdXN0IGEg aGludC4KLQkgKi8KLQlpZiAoa2lsbGVkc29tZXRoaW5nKQotCXsKLQkJb3BhcXVlLT5oYXNob19m bGFnIHw9IExIX1BBR0VfSEFTX0RFQURfVFVQTEVTOwotCQlCdWZmZXJGaW5pc2hTZXRIaW50Qml0 cyhidWYsIHRydWUsIHRydWUpOwotCX0KLQotdW5sb2NrX3BhZ2U6Ci0JaWYgKHNvLT5oYXNoc29f YnVja2V0X2J1ZiA9PSBzby0+Y3VyclBvcy5idWYgfHwKLQkJaGF2ZVBpbikKLQkJTG9ja0J1ZmZl cihzby0+Y3VyclBvcy5idWYsIEJVRkZFUl9MT0NLX1VOTE9DSyk7Ci0JZWxzZQotCQlfaGFzaF9y ZWxidWYocmVsLCBidWYpOwotfQpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dt bCBiL2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwKaW5kZXggMTcxNTA1YThkLi4xODhmODY3YmQg MTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21s L2luZGV4YW0uc2dtbApAQCAtODQ0LDcgKzg0NCw4IEBAIGFtZ2V0YmF0Y2ggKEluZGV4U2NhbkRl c2Mgc2NhbiwKICAgIEl0IGlzIHVwIHRvIHRoZSB0YWJsZSBBTSBjYWxsZXIgdG8gZGVjaWRlIHdo ZW4gaXQgc2hvdWxkIGJlIHJlbGVhc2VkLiAgTm90ZQogICAgYWxzbyB0aGF0IDxmdW5jdGlvbj5h bWdldGJhdGNoPC9mdW5jdGlvbj4gZnVuY3Rpb25zIG11c3QgbmV2ZXIgbW9kaWZ5IHRoZQogICAg PHN0cnVjdGZpZWxkPnByaW9yYmF0Y2g8L3N0cnVjdGZpZWxkPiBwYXJhbWV0ZXIuICBUaGUgY29y ZQotICAgPGZpbGVuYW1lPnNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvPC9maWxlbmFtZT4gaW1w bGVtZW50YXRpb24gcHJvdmlkZXMgYQorICAgPGZpbGVuYW1lPnNyYy9iYWNrZW5kL2FjY2Vzcy9u YnRyZWUvPC9maWxlbmFtZT4gYW5kCisgICA8ZmlsZW5hbWU+c3JjL2JhY2tlbmQvYWNjZXNzL2hh c2gvPC9maWxlbmFtZT4gaW1wbGVtZW50YXRpb25zIHByb3ZpZGUKICAgIHJlZmVyZW5jZSBleGFt cGxlcyBvZiB0aGUgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBpbnRlcmZhY2UuCiAg IDwvcGFyYT4KIApAQCAtOTE2LDEyICs5MTcsMTIgQEAgYW11bmd1YXJkYmF0Y2ggKEluZGV4U2Nh bkRlc2Mgc2NhbiwKICAgIGxlYWYgcGFnZSwgd2hpY2ggcHJldmVudHMgY29uY3VycmVudCBUSUQg cmVjeWNsaW5nIGJ5CiAgICA8Y29tbWFuZD5WQUNVVU08L2NvbW1hbmQ+LgogICAgRm9ybWFsbHks IGFuIGluZGV4IEFNIG1heSBob2xkIGEgZGlmZmVyZW50IGtpbmQgb2YgaW50ZXJsb2NrLCBvciBt dWx0aXBsZQotICAgaW50ZXJsb2NrcywgaW4gaXRzIHBlci1iYXRjaCBvcGFxdWUgYXJlYSwgYnV0 IGluIHByYWN0aWNlIHRoZSBidWlsdC1pbgotICAgaW5kZXggQU0gdGhhdCBzdXBwb3J0cyA8ZnVu Y3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+ICZtZGFzaDsgQi10cmVlCi0gICAmbWRhc2g7IGhv bGRzIGEgc2luZ2xlIGJ1ZmZlciBwaW4uICBTZWUgPHhyZWYgbGlua2VuZD0iaW5kZXgtbG9ja2lu ZyIvPiBmb3IKLSAgIGRldGFpbHMgb24gYnVmZmVyIHBpbiBtYW5hZ2VtZW50IGR1cmluZyBpbmRl eCBzY2Fucy4gIFRoaXMgZnVuY3Rpb24gd2lsbCBiZQotICAgY2FsbGVkIGF0IG1vc3Qgb25jZSBm b3IgZWFjaCBndWFyZGVkIGJhdGNoOyBpdCBpcyBub3QgY2FsbGVkIHdoZW4gdGhlIGluZGV4Ci0g ICBBTSBoYXMgYWxyZWFkeSB1bmd1YXJkZWQgdGhlIGJhdGNoIGl0c2VsZiAoYXMgaXQgZG9lcyB3 aGVuCisgICBpbnRlcmxvY2tzLCBpbiBpdHMgcGVyLWJhdGNoIG9wYXF1ZSBhcmVhLCBidXQgaW4g cHJhY3RpY2UgYm90aCBidWlsdC1pbgorICAgaW5kZXggQU1zIHRoYXQgc3VwcG9ydCA8ZnVuY3Rp b24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+ICZtZGFzaDsgQi10cmVlIGFuZAorICAgaGFzaCAmbWRh c2g7IGhvbGQgYSBzaW5nbGUgYnVmZmVyIHBpbi4gIFNlZSA8eHJlZiBsaW5rZW5kPSJpbmRleC1s b2NraW5nIi8+CisgICBmb3IgZGV0YWlscyBvbiBidWZmZXIgcGluIG1hbmFnZW1lbnQgZHVyaW5n IGluZGV4IHNjYW5zLiAgVGhpcyBmdW5jdGlvbgorICAgd2lsbCBiZSBjYWxsZWQgYXQgbW9zdCBv bmNlIGZvciBlYWNoIGd1YXJkZWQgYmF0Y2g7IGl0IGlzIG5vdCBjYWxsZWQgd2hlbgorICAgdGhl IGluZGV4IEFNIGhhcyBhbHJlYWR5IHVuZ3VhcmRlZCB0aGUgYmF0Y2ggaXRzZWxmIChhcyBpdCBk b2VzIHdoZW4KICAgIDxzdHJ1Y3RmaWVsZD5iYXRjaEltbWVkaWF0ZVVuZ3VhcmQ8L3N0cnVjdGZp ZWxkPiBpcyB0cnVlLCB3aGljaCBpcyB0aGUKICAgIGNvbW1vbiBjYXNlKS4KICAgPC9wYXJhPgpA QCAtOTYxLDggKzk2Miw4IEBAIGFta2lsbGl0ZW1zYmF0Y2ggKEluZGV4U2NhbkRlc2Mgc2NhbiwK ICAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaW5kZXggQU1zICh0aG9zZSB0aGF0 IGRvbid0IGNhbiBsZWF2ZQogICAgdGhlIGZpZWxkIHNldCB0byA8bGl0ZXJhbD5OVUxMPC9saXRl cmFsPiksIGJ1dCBkb2luZyBzbyBpcyByZWNvbW1lbmRlZCBmb3IKICAgIHBlcmZvcm1hbmNlLCBh cyBpdCBhbGxvd3MgZnV0dXJlIHNjYW5zIHRvIHNraXAga25vd24tZGVhZCBpbmRleCBlbnRyaWVz LgotICAgVGhlIGNvcmUgaW5kZXggYWNjZXNzIG1ldGhvZCB0aGF0IGN1cnJlbnRseSBzdXBwb3J0 cwotICAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiAoQi10cmVlKSBpbXBsZW1lbnRz CisgICBCb3RoIGNvcmUgaW5kZXggYWNjZXNzIG1ldGhvZHMgdGhhdCBjdXJyZW50bHkgc3VwcG9y dAorICAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiAoQi10cmVlIGFuZCBoYXNoKSBp bXBsZW1lbnQKICAgIDxsaXRlcmFsPkxQX0RFQUQ8L2xpdGVyYWw+IG1hcmtpbmcsIHRob3VnaCB0 aGlyZC1wYXJ0eSBpbmRleCBhY2Nlc3MgbWV0aG9kcwogICAgYXJlIGZyZWUgdG8gY2hvb3NlIHdo ZXRoZXIgdG8gaW1wbGVtZW50IHRoaXMgZmVhdHVyZS4gIFRoZSB0YWJsZSBBTSBtYXkKICAgIGNh bGwgPGZ1bmN0aW9uPnRhYmxlYW1fdXRpbF9zY2FucG9zX2tpbGxpdGVtPC9mdW5jdGlvbj4gdG8g bWFyayBkZWFkIGl0ZW1zIGFzCkBAIC0xMDAzLDcgKzEwMDQsOCBAQCBhbWtpbGxpdGVtc2JhdGNo IChJbmRleFNjYW5EZXNjIHNjYW4sCiAgICA8Y29tbWFuZD5WQUNVVU08L2NvbW1hbmQ+IHJlY3lj bGluZyB0YWJsZSBUSURzICZtZGFzaDsgc28gaXQgd291bGQgYmUKICAgIHVuc2FmZSB0byBhc3N1 bWUgdGhhdCBpbmRleCBlbnRyaWVzIHN0aWxsIHBvaW50IHRvIHRoZSBzYW1lIGhlYXAvdGFibGUK ICAgIHR1cGxlcy4gIFNpbmNlIDxsaXRlcmFsPkxQX0RFQUQ8L2xpdGVyYWw+IG1hcmtpbmcgaXMg b25seSBhbiBvcHRpbWl6YXRpb24KLSAgIGhpbnQsIGl0IGlzIGFsd2F5cyBzYWZlIHRvIHNraXAg aXQuICBCLXRyZWUgdXNlcyB0aGlzIGFwcHJvYWNoLgorICAgaGludCwgaXQgaXMgYWx3YXlzIHNh ZmUgdG8gc2tpcCBpdC4gIEJvdGggQi10cmVlIGFuZCBoYXNoIHVzZSB0aGlzCisgICBhcHByb2Fj aC4KICAgPC9wYXJhPgogCiAgIDx3YXJuaW5nPgpAQCAtMTAxMSw3ICsxMDEzLDcgQEAgYW1raWxs aXRlbXNiYXRjaCAoSW5kZXhTY2FuRGVzYyBzY2FuLAogICAgIFRoaXMgTFNOIGNvbXBhcmlzb24g dGVjaG5pcXVlIHJlcXVpcmVzIHRoZSBpbmRleCBBTSB0byB1c2UgZmFrZQogICAgIChtb25vdG9u aWNhbGx5IGluY3JlYXNpbmcpIExTTnMgb24gaXRzIHBhZ2VzIGZvciByZWxhdGlvbnMgd2hlcmUg V0FMIGlzCiAgICAgbm90IGdlbmVyYXRlZCwgc2luY2UgcmVhbCBMU05zIGFyZSBub3QgYXZhaWxh YmxlIGluIHRoYXQgY2FzZS4gIFNlZSB0aGUKLSAgICBCLXRyZWUgaW5kZXggaW1wbGVtZW50YXRp b24gZm9yIGEgcmVmZXJlbmNlIGV4YW1wbGUgb2YgdGhpcworICAgIEItdHJlZSBhbmQgaGFzaCBp bmRleCBpbXBsZW1lbnRhdGlvbnMgZm9yIHJlZmVyZW5jZSBleGFtcGxlcyBvZiB0aGlzCiAgICAg dGVjaG5pcXVlLiAgQW4gaW5kZXggQU0gdGhhdCBkb2VzIG5vdCBpbXBsZW1lbnQgZmFrZSBMU05z IGNhbiBzdGlsbAogICAgIHByb3ZpZGUgPGZ1bmN0aW9uPmFta2lsbGl0ZW1zYmF0Y2g8L2Z1bmN0 aW9uPiwgYnV0IHNob3VsZCBzaW1wbHkgZG8KICAgICBub3RoaW5nIHdoZW4gdGhlIHJlbGF0aW9u IGRvZXMgbm90IGdlbmVyYXRlIFdBTCAoaS5lLiwgd2hlbgpAQCAtMTA5Myw4ICsxMDk1LDggQEAg YW1nZXRiaXRtYXAgKEluZGV4U2NhbkRlc2Mgc2NhbiwKICAgIDxmdW5jdGlvbj5hbWdldGJpdG1h cDwvZnVuY3Rpb24+IHNjYW5zOyBkdXJpbmcKICAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5j dGlvbj4gc2NhbnMgdGhlIDxsaXRlcmFsPnByaW9yYmF0Y2g8L2xpdGVyYWw+CiAgICBpcyBzdHJp Y3RseSBvd25lZCBieSB0aGUgY2FsbGVyICh0aGUgdGFibGUgQU0pLCBhbmQgdGhlIGluZGV4IEFN IG11c3QKLSAgIG5ldmVyIHJlbGVhc2UgaXQuICBTZWUgPGZ1bmN0aW9uPl9idF9uZXh0PC9mdW5j dGlvbj4gZm9yIGEgcmVmZXJlbmNlCi0gICBleGFtcGxlLgorICAgbmV2ZXIgcmVsZWFzZSBpdC4g IFNlZSA8ZnVuY3Rpb24+X2J0X25leHQ8L2Z1bmN0aW9uPiBhbmQKKyAgIDxmdW5jdGlvbj5faGFz aF9uZXh0PC9mdW5jdGlvbj4gZm9yIHJlZmVyZW5jZSBleGFtcGxlcy4KICAgPC9wYXJhPgogCiAg IDxwYXJhPgpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9z cmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCAwZmU3OGQwMDguLmMzYTc1ZWM3 OSAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3Jj L3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTEyMjAsNiArMTIyMCw3IEBAIEhhc2gK IEhhc2hBZ2dCYXRjaAogSGFzaEFnZ1NwaWxsCiBIYXNoQWxsb2NGdW5jCitIYXNoQmF0Y2hEYXRh CiBIYXNoQnVpbGRTdGF0ZQogSGFzaEJ1bGtEZWxldGVTdHJlYW1Qcml2YXRlCiBIYXNoQ29tcGFy ZUZ1bmMKQEAgLTEyNDEsOCArMTI0Miw2IEBAIEhhc2hQYWdlU3RhdAogSGFzaFBhdGgKIEhhc2hT Y2FuT3BhcXVlCiBIYXNoU2Nhbk9wYXF1ZURhdGEKLUhhc2hTY2FuUG9zRGF0YQotSGFzaFNjYW5Q b3NJdGVtCiBIYXNoU2tld0J1Y2tldAogSGFzaFN0YXRlCiBIYXNoVmFsdWVGdW5jCi0tIAoyLjUz LjAKCg== --0000000000002eda15064ecc7bcf Content-Type: application/octet-stream; name="v24-0004-heapam-Optimize-pin-transfers-during-index-scans.patch" Content-Disposition: attachment; filename="v24-0004-heapam-Optimize-pin-transfers-during-index-scans.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnncq2535 RnJvbSAyMjhjOGJkNjZhMDEwZjFiNmU4MmY4M2I4MjhiYjg3YWRmMjEyNTRkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFN1 biwgMjIgTWFyIDIwMjYgMDI6MjI6MDYgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyNCA0LzhdIGhl YXBhbTogT3B0aW1pemUgcGluIHRyYW5zZmVycyBkdXJpbmcgaW5kZXggc2NhbnMuCgpBZGQgYW4g eHNfbGFzdGluYmxvY2sgZmxhZyB0byBJbmRleEZldGNoSGVhcERhdGEgdGhhdCB0cmFja3Mgd2hl dGhlciB0aGUKY3VycmVudCBUSUQgaXMgdGhlIGxhc3Qgb25lIG9uIGl0cyBoZWFwIGJsb2NrIHdp dGhpbiB0aGUgY3VycmVudCBiYXRjaC4KV2hlbiBpdCBpcywgaGVhcGFtX2luZGV4X2ZldGNoX3R1 cGxlIGNhbiB0cmFuc2ZlciBpdHMgYnVmZmVyIHBpbiB0byB0aGUKc2xvdCAodmlhIEV4ZWNTdG9y ZVBpbm5lZEJ1ZmZlckhlYXBUdXBsZSkgaW5zdGVhZCBvZiBpbmNyZW1lbnRpbmcgdGhlCnBpbiBj b3VudCwgc2F2aW5nIGEgcGFpciBvZiBJbmNyQnVmZmVyUmVmQ291bnQvUmVsZWFzZUJ1ZmZlciBj YWxscy4KVGhpcyBvcHRpbWl6YXRpb24gaXMgbm90IHVzZWQgZm9yIGluZGV4LW9ubHkgc2NhbnMg YmVjYXVzZSBhbGwtdmlzaWJsZQppdGVtcyBjYW4gYmUgc2tpcHBlZCwgd2hpY2ggd291bGQgYnJl YWsgYmxvY2sgZGVkdXBsaWNhdGlvbiBzeW1tZXRyeQpiZXR3ZWVuIHRoZSBzY2FuIGFuZCB0aGUg cmVhZCBzdHJlYW0gKGJlc2lkZXMsIHRoZSBwZXJmb3JtYW5jZSBvZiB0aGlzCmNvZGUgcGF0aCBj YW4gb25seSBtYXR0ZXIgd2hlbiBtYW55IGhlYXAgZmV0Y2hlcyBhcmUgcmVxdWlyZWQsIHdoaWNo IGlzCmhvcGVmdWxseSByYXJlIGR1cmluZyBpbmRleC1vbmx5IHNjYW5zKS4KCkFsc28gYWRkIGFu IGV4cGxpY2l0IEV4ZWNDbGVhclR1cGxlIHRvIHRoZSBibG9jay1zd2l0Y2ggcGF0aCBpbgpoZWFw YW1faW5kZXhfZmV0Y2hfdHVwbGVfaW1wbCB0byByZWxlYXNlIHRoZSBwaW4gdHJhbnNmZXJyZWQg dG8gdGhlIHNsb3QKb24gdGhlIHByZXZpb3VzIGNhbGwgKGp1c3QgYmVmb3JlIGNhbGxpbmcgUmVs ZWFzZUJ1ZmZlciBhcyBwYXJ0IG9mCm1vdmluZyBvbiB0byB0aGUgc2NhbidzIG5leHQgYmxvY2sp LiAgVGhpcyBmaXhlcyBhIHBlcmZvcm1hbmNlIHByb2JsZW0Kd2hlcmUgdGhlIGNvZGUgcGF0aCBp biBxdWVzdGlvbiB0cmlnZ2VycyBHZXRQcml2YXRlUmVmQ291bnRFbnRyeVNsb3cKY2FsbHMgbW9y ZSBvZnRlbiB0aGFuIG9uZSB3b3VsZCBob3BlLiAgVGhlIHVuZGVybHlpbmcgaXNzdWUgaGFzIGJl ZW4KdGllZCB0byB0aGUgcGluIGluIHRoZSBzbG90IGJlaW5nIGhlbGQsIGV2ZW4gaWYgd2UgZGVj aWRlIHRvIHJlbGVhc2UgdGhlCmJ1ZmZlciBhbmQgbW92ZSBvbjogRXhlY1N0b3JlQnVmZmVySGVh cFR1cGxlIHdpbGwgZmlyc3QgZmFpbCB0byBoaXQgdGhlCmJhY2tlbmQtbG9jYWwgY2FjaGUgZm9y IHRoZSByZWxlYXNlIG9mIHRoZSBvbGQgcGluIChiZWNhdXNlIHdlIGp1c3QKcGlubmVkIGFuZCBs b2NrZWQgdGhlIG5ldyBidWZmZXIpLCBjYXVzaW5nIGEgY2FjaGUgbWlzcyBpbnNpZGUKSW5jckJ1 ZmZlclJlZkNvdW50LgoKQXV0aG9yOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+ClN1Z2dl c3RlZC1ieTogQW5kcmVzIEZyZXVuZCA8YW5kcmVzQGFuYXJhemVsLmRlPgpSZXZpZXdlZC1CeTog QW5kcmVzIEZyZXVuZCA8YW5kcmVzQGFuYXJhemVsLmRlPgpEaXNjdXNzaW9uOiBodHRwczovL3Bv c3Rnci5lcy9tL0NBSDItV3o9RDRMcnU5Qmt2cWFSbkZSUERhWmJmVE9kV2N4dzEzenlHNkdWRlR0 el92d0BtYWlsLmdtYWlsLmNvbQotLS0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaCAgICAg ICAgICAgICAgICB8ICAzICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9pbmRleHNj YW4uYyB8IDczICsrKysrKysrKysrKysrKysrKysrKy0KIDIgZmlsZXMgY2hhbmdlZCwgNzQgaW5z ZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nl c3MvaGVhcGFtLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKaW5kZXggNzk5NzZmNTBm Li45MjgxZDg2NDUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaAorKysg Yi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKQEAgLTEzMSw2ICsxMzEsOSBAQCB0eXBlZGVm IHN0cnVjdCBJbmRleEZldGNoSGVhcERhdGEKIAkvKiBGb3IgdmlzaWJpbGl0eSBtYXAgY2hlY2tz IChpbmRleC1vbmx5IHNjYW5zIGFuZCBvbi1hY2Nlc3MgcHJ1bmluZykgKi8KIAlCdWZmZXIJCXhz X3ZtYnVmZmVyOwkvKiB2aXNpYmlsaXR5IG1hcCBidWZmZXIgKi8KIAlpbnQJCQl4c192bV9pdGVt czsJLyogIyBpdGVtcyB0byByZXNvbHZlIHZpc2liaWxpdHkgaW5mbyBmb3IgKi8KKworCS8qIFBs YWluIGluZGV4IHNjYW4geHNfbGFzdGluYmxvY2sgb3B0aW1pemF0aW9uICovCisJYm9vbAkJeHNf bGFzdGluYmxvY2s7IC8qIGxhc3QgVElEIG9uIHRoaXMgYmxvY2sgaW4gY3VycmVudCBiYXRjaD8g Ki8KIH0gSW5kZXhGZXRjaEhlYXBEYXRhOwogCiAvKiBSZXN1bHQgY29kZXMgZm9yIEhlYXBUdXBs ZVNhdGlzZmllc1ZhY3V1bSAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAv aGVhcGFtX2luZGV4c2Nhbi5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2luZGV4 c2Nhbi5jCmluZGV4IDhkM2FmZDBmMy4uYzA5NDBmMmQxIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvaGVhcC9oZWFwYW1faW5kZXhzY2FuLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L2hlYXAvaGVhcGFtX2luZGV4c2Nhbi5jCkBAIC0xMjcsNiArMTI3LDkgQEAgaGVhcGFtX2luZGV4 X2ZldGNoX2JlZ2luKEluZGV4U2NhbkRlc2Mgc2NhbiwgdWludDMyIGZsYWdzKQogCUFzc2VydCho c2Nhbi0+eHNfdm1idWZmZXIgPT0gSW52YWxpZEJ1ZmZlcik7CiAJaHNjYW4tPnhzX3ZtX2l0ZW1z ID0gMTsKIAorCS8qIHhzX2xhc3RpbmJsb2NrIG9wdGltaXphdGlvbiBzdGF0ZSAqLworCUFzc2Vy dCghaHNjYW4tPnhzX2xhc3RpbmJsb2NrKTsKKwogCS8qIFJlc29sdmUgd2hpY2ggeHNfZ2V0bmV4 dF9zbG90IGltcGxlbWVudGF0aW9uIHRvIHVzZSBmb3IgdGhpcyBzY2FuICovCiAJaWYgKHNjYW4t PmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbWdldGJhdGNoICE9IE5VTEwpCiAJewpAQCAtNDM2 LDYgKzQzOSwxNCBAQCBoZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGUoUmVsYXRpb24gcmVsLAogCQkv KiBSZW1lbWJlciB0aGlzIGJ1ZmZlcidzIGJsb2NrIG51bWJlciBmb3IgbmV4dCB0aW1lICovCiAJ CWhzY2FuLT54c19ibGsgPSBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCk7CiAKKwkJLyoK KwkJICogRHJvcCB0aGUgeHNfYmxrIHBpbiBpbmRlcGVuZGVudGx5IGhlbGQgb24gYnkgc2xvdCAo aWYgYW55KSBub3csCisJCSAqIGJlZm9yZSBjYWxsaW5nIFJlbGVhc2VCdWZmZXIuICBUaGlzIGF2 b2lkcyBleHBlbnNpdmUgY2FsbHMgdG8KKwkJICogR2V0UHJpdmF0ZVJlZkNvdW50RW50cnlTbG93 IGNhdXNlZCBieSBFeGVjU3RvcmVCdWZmZXJIZWFwVHVwbGUKKwkJICogZmFpbGluZyB0byBoaXQg dGhlIGJhY2tlbmQncyBjYWNoZSBmb3IgdGhlIHJlbGVhc2Ugb2YgdGhlIG9sZCBwaW4uCisJCSAq LworCQlFeGVjQ2xlYXJUdXBsZShzbG90KTsKKwogCQlpZiAoQnVmZmVySXNWYWxpZChoc2Nhbi0+ eHNfY2J1ZikpCiAJCQlSZWxlYXNlQnVmZmVyKGhzY2FuLT54c19jYnVmKTsKIApAQCAtNDcyLDcg KzQ4MywzMyBAQCBoZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGUoUmVsYXRpb24gcmVsLAogCQkqaGVh cF9jb250aW51ZSA9ICFJc01WQ0NMaWtlU25hcHNob3Qoc25hcHNob3QpOwogCiAJCXNsb3QtPnR0 c190YWJsZU9pZCA9IFJlbGF0aW9uR2V0UmVsaWQocmVsKTsKLQkJRXhlY1N0b3JlQnVmZmVySGVh cFR1cGxlKCZic2xvdC0+YmFzZS50dXBkYXRhLCBzbG90LCBoc2Nhbi0+eHNfY2J1Zik7CisKKwkJ LyoKKwkJICogSWYgdGhpcyBpcyB0aGUgbGFzdCBUSUQgb24gdGhlIGN1cnJlbnQgaGVhcCBibG9j ayB3aXRoaW4gdGhlIGJhdGNoLAorCQkgKiB0cmFuc2ZlciBvdXIgYnVmZmVyIHBpbiB0byB0aGUg c2xvdCByYXRoZXIgdGhhbiBoYXZpbmcgdGhlIHNsb3QKKwkJICogaW5jcmVtZW50IHRoZSBwaW4g Y291bnQuICBUaGlzIHNhdmVzIGEgcGFpciBvZiBJbmNyQnVmZmVyUmVmQ291bnQKKwkJICogYW5k IFJlbGVhc2VCdWZmZXIgY2FsbHMsIHNpbmNlIHRoZSBjYWxsZXIgd291bGQganVzdCByZWxlYXNl IGl0cworCQkgKiBwaW4gb24geHNfY2J1ZiB3aGVuIHN3aXRjaGluZyB0byB0aGUgbmV4dCBibG9j ayBhbnl3YXkuCisJCSAqCisJCSAqIFdlIGNhbiBvbmx5IGRvIHRoaXMgd2hlbiBoZWFwX2NvbnRp bnVlIGlzIGZhbHNlLCBzaW5jZSBvdGhlcndpc2UKKwkJICogdGhlIGNhbGxlciB3aWxsIG5lZWQg eHNfY2J1ZiB0byByZW1haW4gdmFsaWQgZm9yIHRoZSBuZXh0IGNhbGwuCisJCSAqLworCQlpZiAo aHNjYW4tPnhzX2xhc3RpbmJsb2NrICYmICEqaGVhcF9jb250aW51ZSkKKwkJeworCQkJRXhlY1N0 b3JlUGlubmVkQnVmZmVySGVhcFR1cGxlKCZic2xvdC0+YmFzZS50dXBkYXRhLCBzbG90LAorCQkJ CQkJCQkJCSAgIGhzY2FuLT54c19jYnVmKTsKKwkJCWhzY2FuLT54c19jYnVmID0gSW52YWxpZEJ1 ZmZlcjsKKwkJCWhzY2FuLT54c19ibGsgPSBJbnZhbGlkQmxvY2tOdW1iZXI7CisKKwkJCS8qCisJ CQkgKiBOb3RlOiB0aGUgcGluIG5vdyBvd25lZCBieSB0aGUgc2xvdCBpcyBleHBlY3RlZCB0byBi ZSByZWxlYXNlZAorCQkJICogb24gdGhlIG5leHQgY2FsbCBoZXJlLCB2aWEgYW4gZXhwbGljaXQg RXhlY0NsZWFyVHVwbGUuICBUaGlzCisJCQkgKiBhdm9pZHMgY2h1cm4gaW4gdGhlIGJhY2tlbmQn cyBwcml2YXRlIHJlZmNvdW50IGNhY2hlLgorCQkJICovCisJCX0KKwkJZWxzZQorCQkJRXhlY1N0 b3JlQnVmZmVySGVhcFR1cGxlKCZic2xvdC0+YmFzZS50dXBkYXRhLCBzbG90LAorCQkJCQkJCQkJ IGhzY2FuLT54c19jYnVmKTsKIAl9CiAJZWxzZQogCXsKQEAgLTY0OCwxMCArNjg1LDQyIEBAIGhl YXBhbV9pbmRleF9yZXR1cm5fc2NhbnBvc190aWQoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleEZl dGNoSGVhcERhdGEgKmhzY2FuLAogCiAJaWYgKGFsbF92aXNpYmxlID09IE5VTEwpCiAJeworCQlp bnQJCQluZXh0SXRlbTsKKwkJYm9vbAkJaGFzTmV4dDsKKwogCQkvKgogCQkgKiBQbGFpbiBpbmRl eCBzY2FuLgorCQkgKgorCQkgKiBEZXRlcm1pbmUgaWYgdGhlIG5leHQgaXRlbSBpbiB0aGUgY3Vy cmVudCBzY2FuIGRpcmVjdGlvbiBpcyBvbiBhCisJCSAqIGRpZmZlcmVudCBoZWFwIGJsb2NrLiAg V2hlbiBpdCBpcywgaGVhcGFtX2luZGV4X2ZldGNoX3R1cGxlIGNhbgorCQkgKiB0cmFuc2ZlciBp dHMgYnVmZmVyIHBpbiB0byB0aGUgc2xvdCBpbnN0ZWFkIG9mIGluY3JlbWVudGluZyB0aGUgcGlu CisJCSAqIGNvdW50LCBzYXZpbmcgYSBwYWlyIG9mIEluY3JCdWZmZXJSZWZDb3VudC9SZWxlYXNl QnVmZmVyIGNhbGxzLgorCQkgKgorCQkgKiBOb3RlOiBXZSBjYW5ub3QgZG8gdGhpcyBmb3IgaW5k ZXgtb25seSBzY2FucyBiZWNhdXNlIGFsbC12aXNpYmxlCisJCSAqIGl0ZW1zIGFyZSBza2lwcGVk IGJ5IGJvdGggdGhlIHNjYW4gYW5kIHRoZSByZWFkIHN0cmVhbSBjYWxsYmFjay4gSXQKKwkJICog ZG9lc24ndCBzZWVtIHdvcnRoIHRoZSB0cm91YmxlIG9mIHJlYXNvbmluZyBhYm91dCB0aGVzZSBp c3N1ZXMsCisJCSAqIHNpbmNlIHRoZSBvcHRpbWl6YXRpb24gb25seSBoZWxwcyB3aGVuIGhlYXAg ZmV0Y2hlcyBhcmUgcmVxdWlyZWQuCisJCSAqCisJCSAqIE5vdGU6IFdlIGRlbGliZXJhdGVseSBk b24ndCBjb25zaWRlciB0aGUgYmF0Y2ggYWZ0ZXIgc2NhbkJhdGNoLAorCQkgKiBiZWNhdXNlIGRv aW5nIHNvIHdvdWxkIGFkZCBjb21wbGV4aXR5IGZvciBsaXR0bGUgYmVuZWZpdC4gIEl0J3MKKwkJ ICogb2theSBpZiB4c19sYXN0aW5ibG9jayBpcyBzcHVyaW91c2x5IHNldCB0byBmYWxzZS4KIAkJ ICovCiAJCUFzc2VydCghc2Nhbi0+eHNfd2FudF9pdHVwKTsKKwkJaWYgKFNjYW5EaXJlY3Rpb25J c0ZvcndhcmQoZGlyZWN0aW9uKSkKKwkJeworCQkJbmV4dEl0ZW0gPSBzY2FuUG9zLT5pdGVtICsg MTsKKwkJCWhhc05leHQgPSAobmV4dEl0ZW0gPD0gc2NhbkJhdGNoLT5sYXN0SXRlbSk7CisJCX0K KwkJZWxzZQorCQl7CisJCQluZXh0SXRlbSA9IHNjYW5Qb3MtPml0ZW0gLSAxOworCQkJaGFzTmV4 dCA9IChuZXh0SXRlbSA+PSBzY2FuQmF0Y2gtPmZpcnN0SXRlbSk7CisJCX0KKworCQloc2Nhbi0+ eHNfbGFzdGluYmxvY2sgPSBoYXNOZXh0ICYmCisJCQlJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVy KCZzY2FuQmF0Y2gtPml0ZW1zW25leHRJdGVtXS50YWJsZVRpZCkgIT0KKwkJCUl0ZW1Qb2ludGVy R2V0QmxvY2tOdW1iZXIoJnNjYW4tPnhzX2hlYXB0aWQpOworCiAJCXJldHVybiAmc2Nhbi0+eHNf aGVhcHRpZDsKIAl9CiAKQEAgLTY2MCw3ICs3MjksNyBAQCBoZWFwYW1faW5kZXhfcmV0dXJuX3Nj YW5wb3NfdGlkKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiwK IAkgKgogCSAqIEFsc28gc2V0IHhzX2l0dXAsIHdoaWNoIGNhbGxlciBhbHNvIG5lZWRzLgogCSAq LwotCUFzc2VydChzY2FuLT54c193YW50X2l0dXApOworCUFzc2VydChzY2FuLT54c193YW50X2l0 dXAgJiYgIWhzY2FuLT54c19sYXN0aW5ibG9jayk7CiAJc2Nhbi0+eHNfaXR1cCA9IChJbmRleFR1 cGxlKSAoc2NhbkJhdGNoLT5jdXJyVHVwbGVzICsKIAkJCQkJCQkJICBzY2FuQmF0Y2gtPml0ZW1z W3NjYW5Qb3MtPml0ZW1dLnR1cGxlT2Zmc2V0KTsKIAotLSAKMi41My4wCgo= --0000000000002eda15064ecc7bcf Content-Type: application/octet-stream; name="v24-0002-Add-amgetbatch-interface-and-adopt-it-in-nbtree.patch" Content-Disposition: attachment; filename="v24-0002-Add-amgetbatch-interface-and-adopt-it-in-nbtree.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnncq2577 RnJvbSBmN2E5ZDIyOTk0MzMwMWE2YzdlNzE1OWQ5OTlhNzExMWIxZTYwZTUzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFdl ZCwgMjUgTWFyIDIwMjYgMTY6NDg6NDMgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyNCAyLzhdIEFk ZCBhbWdldGJhdGNoIGludGVyZmFjZSBhbmQgYWRvcHQgaXQgaW4gbmJ0cmVlLgoKQWRkIGEgbmV3 IGFtZ2V0YmF0Y2ggaW5kZXggQU0gaW50ZXJmYWNlIHRoYXQgYWxsb3dzIGluZGV4IGFjY2VzcyBt ZXRob2RzCnRvIGltcGxlbWVudCBwbGFpbiBpbmRleCBzY2FucyBhbmQgaW5kZXgtb25seSBzY2Fu cyB0aGF0IHJldHVybiBpbmRleAplbnRyaWVzIGluIGJhdGNoZXMgY29tcHJpc2luZyBhbGwgbWF0 Y2hpbmcgaXRlbXMgZnJvbSBhbiBpbmRleCBwYWdlLApyYXRoZXIgdGhhbiBvbmUgbWF0Y2ggYXQg YSB0aW1lLiAgQWxzbyBzd2l0Y2ggbmJ0cmVlIG92ZXIgZnJvbQphbWdldHR1cGxlIHRvIHRoZSBu ZXcgYW1nZXRiYXRjaCBpbnRlcmZhY2UuCgpUaGUgbmV3IGludGVyZmFjZSBhbGxvd3MgdGhlIHRh YmxlIEFNIHRvIGFwcGx5IGtub3dsZWRnZSBvZiB3aGljaCBUSURzCndpbGwgYmUgcmV0dXJuZWQg dG8gdGhlIHNjYW4gaW4gdGhlIG5lYXIgZnV0dXJlIHRvIHBlcmZvcm0gb3B0aW1pemF0aW9ucwps aWtlIEkvTyBwcmVmZXRjaGluZy4gIFByZWZldGNoaW5nIGlzIHNldCB0byBiZSBhZGRlZCBieSBh biB1cGNvbWluZyBjb21taXQuCgpXaXRoIGFtZ2V0YmF0Y2gsIGEgc2Nhbi1sZXZlbCBwb2xpY3kg ZGV0ZXJtaW5lcyB3aGV0aGVyIGVhY2ggYmF0Y2gncwppbmRleCBwYWdlIGJ1ZmZlciBwaW4gaXMg ZHJvcHBlZCBlYWdlcmx5IGJ5IHRoZSBpbmRleCBBTSAoZm9yIHBsYWluCnNjYW5zIHdpdGggYW4g TVZDQyBzbmFwc2hvdCwgd2hlcmUgdGhlIHNuYXBzaG90IGl0c2VsZiBwcmV2ZW50cyBUSUQKcmVj eWNsaW5nIHByb2JsZW1zKSBvciByZXRhaW5lZCBhcyBhbiBpbnRlcmxvY2sgYWdhaW5zdCBjb25j dXJyZW50IFRJRApyZWN5Y2xpbmcgYnkgVkFDVVVNLiAgVGhlIGludGVybG9jayBpcyByZXRhaW5l ZCBmb3IgcGxhaW4gbm9uLU1WQ0Mgc2NhbnMKYW5kIGZvciBpbmRleC1vbmx5IHNjYW5zLCBhbmQg aXMgZHJvcHBlZCBieSB0aGUgdGFibGUgQU0gdmlhIHRoZSBuZXcKYW11bmd1YXJkYmF0Y2ggY2Fs bGJhY2sgd2hlbiBpdCBpcyBzYWZlIHRvIGRvIHNvLiAoQWN0dWFsbHksIGluZGV4IEFNcwphcmUg dXN1YWxseSBhYmxlIHRvIGRyb3AgdGhlIHBpbiBhdCB0aGUgc2FtZSB0aW1lIHRoYXQgdGhleSBy ZWxlYXNlIHRoZQpsb2NrLiAgSW4gcHJhY3RpY2UsIHRoZSBhbXVuZ3VhcmRiYXRjaCBjYWxsYmFj ayBpcyBvbmx5IHJlYWxseSBuZWVkZWQKZHVyaW5nIGluZGV4LW9ubHkgc2NhbnMsIHdoZXJlIGRy b3BwaW5nIHRoZSBwaW4gaW50ZXJsb2NrIG1pZ2h0IG5lZWQgdG8KYmUgZGVsYXllZCBldmVyIHNv IHNsaWdodGx5LCBhcyBleHBsYWluZWQgYmVsb3cuKQoKVGhpcyBleHRlbmRzIHRoZSBkcm9wUGlu IG1lY2hhbmlzbSBhZGRlZCB0byBuYnRyZWUgYnkgY29tbWl0IDJlZDViODdmLAphbmQgZ2VuZXJh bGl6ZXMgaXQgdG8gd29yayB3aXRoIGFsbCBpbmRleCBBTXMgdGhhdCBzdXBwb3J0IHRoZSBuZXcK YW1nZXRiYXRjaCBpbnRlcmZhY2UgKExQX0RFQUQgbWFya2luZyBvZiBpbmRleCBlbnRyaWVzIG11 c3QgYmUgcGVyZm9ybWVkCmJ5IGltcGxlbWVudGluZyB0aGUgbmV3IGFta2lsbGl0ZW1zYmF0Y2gg Y2FsbGJhY2ssIHdoaWNoIGhhcyBhCmRvY3VtZW50ZWQgY29udHJhY3QgZGVzY3JpYmluZyBob3cg aW5kZXggQU1zIG11c3QgcmVhc29uIGFib3V0CmNvbmN1cnJlbnQgVElEIHJlY3ljbGluZykuICBT Y2FucyBjYW4gYWx3YXlzIHNhZmVseSBkcm9wIGluZGV4IHBhZ2UgcGlucwplYWdlcmx5LCBwcm92 aWRlZCB0aGUgc2NhbiB1c2VzIGFuIE1WQ0Mgc25hcHNob3QgKHVubGlrZSB0aGUgbmJ0cmVlCmRy b3BQaW4gb3B0aW1pemF0aW9uLCB3aGljaCBoYWQgbm8gd2F5IG9mIGRvaW5nIHRoaXMgc2FmZWx5 IGR1cmluZwppbmRleC1vbmx5IHNjYW5zIGR1ZSB0byBob3cgYW1nZXR0dXBsZSB3b3JrcywgYW5k IG9ubHkgZ2FpbmVkIHN1cHBvcnQKZm9yIHNjYW5zIG9mIHVubG9nZ2VkIHJlbGF0aW9ucyBpbiBy ZWNlbnQgY29tbWl0IDhhODc5MTE5KS4KClRoZSBvbGQgYW1tYXJrcG9zIGFuZCBhbXJlc3RycG9z IGluZGV4IEFNIGNhbGxiYWNrcyBhcmUgcmVtb3ZlZC4gIFdpdGgKYW1nZXRiYXRjaCwgbWFyay9y ZXN0b3JlIG9mIHNjYW4gcG9zaXRpb25zIGlzIG1hbmFnZWQgYnkgdGhlIHRhYmxlIEFNLAp3aXRo IGhlbHAgZnJvbSBpbmRleGJhdGNoLmMgdXRpbGl0eSBmdW5jdGlvbnMsIHJhdGhlciB0aGFuIGJl aW5nCmRlbGVnYXRlZCB0byB0aGUgaW5kZXggQU0uICBBbGwgYW1nZXRiYXRjaC1jYXBhYmxlIGlu ZGV4IEFNcyBpbmhlcmVudGx5CnN1cHBvcnQgbWFyay9yZXN0b3JlIHdpdGhvdXQgbmVlZGluZyB0 byBpbXBsZW1lbnQgaXQgdGhlbXNlbHZlcy4gIFRhYmxlCkFNcyBtdXN0IHByb3ZpZGUgdGhlIG5l dyBpbmRleF9mZXRjaF9tYXJrcG9zIGFuZCBpbmRleF9mZXRjaF9yZXN0cnBvcwpjYWxsYmFja3Mg dG8gbWFrZSBhbGwgdGhpcyB3b3JrLgoKQW4gdXBjb21pbmcgY29tbWl0IHRoYXQgd2lsbCBhZGQg aW5kZXggcHJlZmV0Y2hpbmcgd2lsbCB1c2UgYSByZWFkCnN0cmVhbSB0byByZWFkIGhlYXAgcGFn ZXMgZHVyaW5nIGluZGV4IHNjYW5zLiAgUmVhZCBzdHJlYW0gaXMgY2FyZWZ1bCB0bwpsaW1pdCBo b3cgbWFueSB0aGluZ3MgaXQgcGlucywgbGVzdCB3ZSBydW4gaW50byBwcm9ibGVtcyBkdWUgdG8g aGF2aW5nCnRvbyBtYW55IGJ1ZmZlcnMgcGlubmVkLiAgU2ltcGx5IG5ldmVyIGhvbGRpbmcgb24g dG8gaW5kZXggcGFnZSBidWZmZXIKcGlucyBncmVhdGx5IHNpbXBsaWZpZXMgcmVzb3VyY2UgbWFu YWdlbWVudCBmb3IgaW5kZXggcHJlZmV0Y2hpbmc7CnRoZXJlJ3Mgbm8gcmlzayBvZiB1bmludGVu ZGVkIGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoZSByZWFkIHN0cmVhbSBhbmQKaW5kZXggQU0uICBU aGUgb25seSBkb3duc2lkZSBpcyB0aGF0IHdlIGNhbm5vdCBzdXBwb3J0IHByZWZldGNoaW5nCmR1 cmluZyBzY2FucyB0aGF0IHVzZSBhIG5vbi1NVkNDIHNuYXBzaG90LCB3aGljaCBzZWVtcyBxdWl0 ZSBhY2NlcHRhYmxlLgoKSW4gcHJhY3RpY2UsIGhlYXBhbSBkb2Vzbid0IGRyb3AgZWFjaCBiYXRj aCdzIGluZGV4IHBhZ2UgYnVmZmVyIHBpbiBhdAp0aGUgZWFybGllc3Qgb3Bwb3J0dW5pdHkgZHVy aW5nIGluZGV4LW9ubHkgc2NhbnMuICBUaGlzIHdhcyBkZWVtZWQKbmVjZXNzYXJ5IHRvIGF2b2lk IHJlZ3Jlc3NpbmcgaW5kZXgtb25seSBzY2FucyB3aXRoIGEgTElNSVQsIGluCnBhcnRpY3VsYXIg d2l0aCBuZXN0bG9vcCBhbnRpLWpvaW5zIGFuZCBuZXN0bG9vcCBzZW1pLWpvaW5zOyBlYWdlcmx5 CmxvYWRpbmcgYWxsIHRoZSB2aXNpYmlsaXR5IGluZm9ybWF0aW9uIHVwIGZyb250IHJlZ3Jlc3Nl ZCBzdWNoIHF1ZXJpZXMuClRoZSBuZXcgYW1nZXRiYXRjaCBpbnRlcmZhY2UgZ2l2ZXMgdGFibGUg QU1zIHRoZSBhdXRob3JpdHkgdG8gZGVjaWRlCndoZW4gdG8gZHJvcCBpbmRleCBwYWdlIHBpbnMv dW5ndWFyZCBiYXRjaGVzLCBzbyB0aGlzIGNhbiBiZSBjb25zaWRlcmVkCmEgaGVhcGFtIGltcGxl bWVudGF0aW9uIGRldGFpbCAoaW5kZXggQU1zIGRvbid0IG5lZWQgdG8ga25vdyBhYm91dCBpdCku ClRoaXMgc2NoZW1lIHN0aWxsIGFsbG93cyBpbmRleCBwcmVmZXRjaGluZyB0byBjb25zaXN0ZW50 bHkgaG9sZCBubyBtb3JlCnRoYW4gb25lIGJhdGNoIGluZGV4IHBhZ2UgcGluIGF0IGEgdGltZSwg ZXZlbiB3aGVuIGFuIGluZGV4LW9ubHkgc2NhbgoodGhhdCBtdXN0IHBlcmZvcm0gc29tZSBoZWFw IGZldGNoZXMpIGhvbGRzIG9wZW4gc2V2ZXJhbCBpbmRleCBiYXRjaGVzCmF0IG9uY2UgaW4gb3Jk ZXIgdG8gbWFpbnRhaW4gYW4gYWRlcXVhdGUgcHJlZmV0Y2ggZGlzdGFuY2UuCgpJbmRleCBhY2Nl c3MgbWV0aG9kcyB0aGF0IHN1cHBvcnQgcGxhaW4gaW5kZXggc2NhbnMgbXVzdCBub3cgaW1wbGVt ZW50CmVpdGhlciB0aGUgYW1nZXRiYXRjaCBpbnRlcmZhY2Ugb3IgdGhlIGFtZ2V0dHVwbGUgaW50 ZXJmYWNlIChub3QgYm90aCkuCkFuIHVwY29taW5nIHBhdGNoIHdpbGwgYWRkIHN1cHBvcnQgZm9y IGFtZ2V0YmF0Y2ggdG8gdGhlIGhhc2ggaW5kZXggQU0uCkJ1dCB0aGUgYW1nZXR0dXBsZSBpbnRl cmZhY2Ugd2lsbCBzdGlsbCBiZSB1c2VkIGJ5IHRoZSBHaVNUIGFuZCBTUC1HaVNUCmluZGV4IEFN cyBmb3Igbm93LiAgQm90aCBzaGFyZSBhIHNldCBvZiBwcm9ibGVtcyB0aGF0IG1ha2UgaXQgdW5j bGVhcgpob3cgdG8gZ28gYWJvdXQgYWRkaW5nIHN1cHBvcnQuCgpCb3RoIEFNcyByZWNvbnN0cnVj dCBpbmRleCBkYXRhIGFzIEhlYXBUdXBsZXMgdmlhIGhlYXBfZm9ybV90dXBsZSBkdXJpbmcKaW5k ZXgtb25seSBzY2FucywgcGVyZm9ybWluZyByZXRhaWwgcGFsbG9jIGFsbG9jYXRpb25zIHRoYXQg YXJlCmluY29tcGF0aWJsZSB3aXRoIHRoZSBmbGF0LCBmaXhlZC1zaXplLCByZWN5Y2xhYmxlIHBl ci1iYXRjaCBtZW1vcnkKbW9kZWwgdGhhdCBhbWdldGJhdGNoJ3MgY3VyclR1cGxlcyB3b3Jrc3Bh Y2UgcmVxdWlyZXMuICBNb3Jlb3ZlciwgYm90aApBTXMgaGF2ZSBrbm93biBidWdzIGludm9sdmlu ZyBidWZmZXIgcGluIG1hbmFnZW1lbnQgZHVyaW5nIGluZGV4LW9ubHkKc2NhbnM6IHRoZXkgcmVs ZWFzZSBpbmRleCBsZWFmIHBhZ2UgcGlucyBpbW1lZGlhdGVseSwgcmF0aGVyIHRoYW4KaG9sZGlu ZyB0aGVtIGFzIGFuIGludGVybG9jayBhZ2FpbnN0IGNvbmN1cnJlbnQgVElEIHJlY3ljbGluZyBi eSBWQUNVVU0sCmNyZWF0aW5nIGEgcmFjZSBjb25kaXRpb24gaW4gd2hpY2ggVkFDVVVNIGNhbiBy ZW1vdmUgYSBoZWFwIHR1cGxlIGFuZAp0aGVuIG1hcmsgaXRzIHBhZ2UgYWxsLXZpc2libGUgd2hp bGUgdGhlIGluZGV4LW9ubHkgc2NhbiBzdGlsbCBob2xkcyBhCnJlZmVyZW5jZSB0byB0aGUgbm93 LXJlY3ljbGVkIFRJRCBbMV0uICBUaGVzZSBpbmRleCBBTXMgY2Fubm90IGFkb3B0CmFtZ2V0YmF0 Y2ggd2l0aG91dCBmaXJzdCBmaXhpbmcgdGhlIHBpbi1oYW5kbGluZyBkZWZpY2llbmN5IHRoYXQg dGhleQphbHJlYWR5IGhhdmUgdW5kZXIgYW1nZXR0dXBsZSAoaXQncyBub3QgY2xlYXIgaG93IHRv IGZpeCB0aGUgcHJvYmxlbQp3aXRoaW4gdGhlIGNvbmZpbmVzIG9mIHRoZSBjdXJyZW50IGFtZ2V0 dHVwbGUgZGVzaWduLCBsZXQgYWxvbmUgaW4gYSB3YXkKdGhhdCdzIGNvbXBhdGlibGUgd2l0aCBh bWdldGJhdGNoKS4KClsxXSBodHRwczovL3Bvc3Rnci5lcy9tL0NBSDItV3olM0RqamlOTDlGQ2g4 QzFMLUdVSDE1ZjRXRlRXdWIyeCUyQl9OdWNuZ2NERGNIS3clNDBtYWlsLmdtYWlsLmNvbQoKQXV0 aG9yOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4KQXV0aG9yOiBQZXRlciBHZW9naGVn YW4gPHBnQGJvd3QuaWU+ClJldmlld2VkLUJ5OiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6 ZWwuZGU+ClJldmlld2VkLUJ5OiBUaG9tYXMgTXVucm8gPHRob21hcy5tdW5yb0BnbWFpbC5jb20+ CkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vY2Y4NWY0NmYtYjAyZi0wNWIyLTUyNDgt NTAwMGI4OTRlYmFiQGVudGVycHJpc2VkYi5jb20KRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3Iu ZXMvbS9lZmFjMzIzOC02ZjM0LTQxZWEtYTM5My0yNmNjMDQ0MWI1MDYlNDB2b25kcmEubWUKLS0t CiBzcmMvaW5jbHVkZS9hY2Nlc3MvYW1hcGkuaCAgICAgICAgICAgICAgICAgICAgfCAgMjcgKy0K IHNyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5oICAgICAgICAgICAgICAgICAgICB8ICAgMyArLQog c3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oICAgICAgICAgICAgICAgICAgIHwgICA2ICsKIHNy Yy9pbmNsdWRlL2FjY2Vzcy9pbmRleGJhdGNoLmggICAgICAgICAgICAgICB8IDIzNSArKysrKysK IHNyYy9pbmNsdWRlL2FjY2Vzcy9uYnRyZWUuaCAgICAgICAgICAgICAgICAgICB8IDE5MCArKy0t LQogc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaCAgICAgICAgICAgICAgICAgIHwgMzY0ICsr KysrKysrLQogc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaCAgICAgICAgICAgICAgICAgIHwg IDc3ICstCiBzcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCAgICAgICAgICAgICAgICAgfCAg IDYgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW4uYyAgICAgICAgICAgICAgICB8ICAg NiArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW5nZXQuYyAgICAgICAgICAgICAgIHwgICA2 ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbnV0aWwuYyAgICAgICAgICAgICAgfCAgIDYg Ky0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3QuYyAgICAgICAgICAgICAgICB8ICAgNiAr LQogc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jICAgICAgICAgICAgICAgIHwgICA2ICst CiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jICAgICAgfCAgIDMgKwog c3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2luZGV4c2Nhbi5jICAgIHwgNTQxICsrKysr KysrKysrKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9NYWtlZmlsZSAgICAgICAgICAgICB8 ICAgMyArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2FtYXBpLmMgICAgICAgICAgICAgIHwg ICA1ICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9nZW5hbS5jICAgICAgICAgICAgICB8ICAg NiArCiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jICAgICAgICAgICAgfCAxMDUg Ky0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhiYXRjaC5jICAgICAgICAgfCA3NDIg KysrKysrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvbWVzb24uYnVpbGQg ICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9SRUFETUUgICAgICAg ICAgICAgIHwgIDc0ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHBhZ2UuYyAgICAg ICAgICAgfCAgMTMgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVhZHBhZ2UuYyAg ICAgICB8IDIwNyArKystLQogc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWUuYyAgICAg ICAgICAgIHwgNDY5ICsrKysrLS0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNl YXJjaC5jICAgICAgICAgfCA1NjcgKysrKysrLS0tLS0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL25i dHJlZS9uYnR1dGlscy5jICAgICAgICAgIHwgMjQ1IC0tLS0tLQogc3JjL2JhY2tlbmQvYWNjZXNz L25idHJlZS9uYnR4bG9nLmMgICAgICAgICAgIHwgICA2ICstCiBzcmMvYmFja2VuZC9hY2Nlc3Mv c3BnaXN0L3NwZ3V0aWxzLmMgICAgICAgICAgfCAgIDYgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90 YWJsZS90YWJsZWFtYXBpLmMgICAgICAgICB8ICAgMyArCiBzcmMvYmFja2VuZC9jb21tYW5kcy9p bmRleGNtZHMuYyAgICAgICAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4 ZWNBbWkuYyAgICAgICAgICAgICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9k ZU1lcmdlam9pbi5jICAgICAgICAgIHwgICA0ICstCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0 aC9pbmR4cGF0aC5jICAgICAgICAgfCAgIDYgKy0KIHNyYy9iYWNrZW5kL29wdGltaXplci91dGls L3BsYW5jYXQuYyAgICAgICAgICB8ICAgOCArLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9n aWNhbC9yZWxhdGlvbi5jICAgIHwgICA5ICstCiBzcmMvYmFja2VuZC91dGlscy9hZHQvYW11dGls cy5jICAgICAgICAgICAgICAgfCAgIDggKy0KIGNvbnRyaWIvYW1jaGVjay92ZXJpZnlfbmJ0cmVl LmMgICAgICAgICAgICAgICB8ICAgMiArLQogY29udHJpYi9ibG9vbS9ibHV0aWxzLmMgICAgICAg ICAgICAgICAgICAgICAgIHwgICA2ICstCiBkb2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21sICAgICAg ICAgICAgICAgICAgICAgfCA1NzAgKysrKysrKysrKysrLS0KIGRvYy9zcmMvc2dtbC9yZWYvY3Jl YXRlX3RhYmxlLnNnbWwgICAgICAgICAgICB8ICAxMyArLQogLi4uL21vZHVsZXMvZHVtbXlfaW5k ZXhfYW0vZHVtbXlfaW5kZXhfYW0uYyAgIHwgICA2ICstCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlw ZWRlZnMubGlzdCAgICAgICAgICAgICAgfCAgMTIgKy0KIDQzIGZpbGVzIGNoYW5nZWQsIDMyMjcg aW5zZXJ0aW9ucygrKSwgMTM1NSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMv aW5jbHVkZS9hY2Nlc3MvaW5kZXhiYXRjaC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tl bmQvYWNjZXNzL2luZGV4L2luZGV4YmF0Y2guYwoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2Fj Y2Vzcy9hbWFwaS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2FtYXBpLmgKaW5kZXggZWNmYmQwMTdk Li5mZGZkOGQ2MDAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9hbWFwaS5oCisrKyBi L3NyYy9pbmNsdWRlL2FjY2Vzcy9hbWFwaS5oCkBAIC0xOTgsNiArMTk4LDE5IEBAIHR5cGVkZWYg dm9pZCAoKmFtcmVzY2FuX2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuLAogdHlwZWRlZiBi b29sICgqYW1nZXR0dXBsZV9mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2NhbiwKIAkJCQkJCQkJ CSBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbik7CiAKKy8qIG5leHQgYmF0Y2ggb2YgdmFsaWQgdHVw bGVzICovCit0eXBlZGVmIEluZGV4U2NhbkJhdGNoICgqYW1nZXRiYXRjaF9mdW5jdGlvbikgKElu ZGV4U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCQkJCQkJICAgSW5kZXhTY2FuQmF0Y2ggcHJpb3JiYXRj aCwKKwkJCQkJCQkJCQkJICAgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pOworCisvKiBkcm9wIFRJ RCByZWN5Y2xpbmcgaW50ZXJsb2NrIGhlbGQgdG8gcHJldmVudCBjb25jdXJyZW50IFZBQ1VVTSBy ZWN5Y2xpbmcgKi8KK3R5cGVkZWYgdm9pZCAoKmFtdW5ndWFyZGJhdGNoX2Z1bmN0aW9uKSAoSW5k ZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJCSBJbmRleFNjYW5CYXRjaCBiYXRjaCk7CisKKy8q IG1hcmsgZGVhZCBpdGVtcyBpbiBpbmRleCBwYWdlICovCit0eXBlZGVmIHZvaWQgKCphbWtpbGxp dGVtc2JhdGNoX2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJCSAgIElu ZGV4U2NhbkJhdGNoIGJhdGNoKTsKKwogLyogZmV0Y2ggYWxsIHZhbGlkIHR1cGxlcyAqLwogdHlw ZWRlZiBpbnQ2NCAoKmFtZ2V0Yml0bWFwX2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuLAog CQkJCQkJCQkJICAgVElEQml0bWFwICp0Ym0pOwpAQCAtMjA1LDExICsyMTgsOSBAQCB0eXBlZGVm IGludDY0ICgqYW1nZXRiaXRtYXBfZnVuY3Rpb24pIChJbmRleFNjYW5EZXNjIHNjYW4sCiAvKiBl bmQgaW5kZXggc2NhbiAqLwogdHlwZWRlZiB2b2lkICgqYW1lbmRzY2FuX2Z1bmN0aW9uKSAoSW5k ZXhTY2FuRGVzYyBzY2FuKTsKIAotLyogbWFyayBjdXJyZW50IHNjYW4gcG9zaXRpb24gKi8KLXR5 cGVkZWYgdm9pZCAoKmFtbWFya3Bvc19mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2Nhbik7Ci0K LS8qIHJlc3RvcmUgbWFya2VkIHNjYW4gcG9zaXRpb24gKi8KLXR5cGVkZWYgdm9pZCAoKmFtcmVz dHJwb3NfZnVuY3Rpb24pIChJbmRleFNjYW5EZXNjIHNjYW4pOworLyogaW52YWxpZGF0ZSBpbmRl eCBBTSBzdGF0ZSB0aGF0IGluZGVwZW5kZW50bHkgdHJhY2tzIHNjYW4ncyBwb3NpdGlvbiAqLwor dHlwZWRlZiB2b2lkICgqYW1wb3NyZXNldF9mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2NhbiwK KwkJCQkJCQkJCSBJbmRleFNjYW5CYXRjaCBiYXRjaCk7CiAKIC8qCiAgKiBDYWxsYmFjayBmdW5j dGlvbiBzaWduYXR1cmVzIC0gZm9yIHBhcmFsbGVsIGluZGV4IHNjYW5zLgpAQCAtMzA5LDEwICsz MjAsMTIgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhBbVJvdXRpbmUKIAlhbWJlZ2luc2Nhbl9mdW5j dGlvbiBhbWJlZ2luc2NhbjsKIAlhbXJlc2Nhbl9mdW5jdGlvbiBhbXJlc2NhbjsKIAlhbWdldHR1 cGxlX2Z1bmN0aW9uIGFtZ2V0dHVwbGU7IC8qIGNhbiBiZSBOVUxMICovCisJYW1nZXRiYXRjaF9m dW5jdGlvbiBhbWdldGJhdGNoOyAvKiBjYW4gYmUgTlVMTCAqLworCWFtdW5ndWFyZGJhdGNoX2Z1 bmN0aW9uIGFtdW5ndWFyZGJhdGNoOyAvKiBjYW4gYmUgTlVMTCAqLworCWFta2lsbGl0ZW1zYmF0 Y2hfZnVuY3Rpb24gYW1raWxsaXRlbXNiYXRjaDsgLyogY2FuIGJlIE5VTEwgKi8KIAlhbWdldGJp dG1hcF9mdW5jdGlvbiBhbWdldGJpdG1hcDsJLyogY2FuIGJlIE5VTEwgKi8KIAlhbWVuZHNjYW5f ZnVuY3Rpb24gYW1lbmRzY2FuOwotCWFtbWFya3Bvc19mdW5jdGlvbiBhbW1hcmtwb3M7CS8qIGNh biBiZSBOVUxMICovCi0JYW1yZXN0cnBvc19mdW5jdGlvbiBhbXJlc3RycG9zOyAvKiBjYW4gYmUg TlVMTCAqLworCWFtcG9zcmVzZXRfZnVuY3Rpb24gYW1wb3NyZXNldDsgLyogY2FuIGJlIE5VTEwg Ki8KIAogCS8qIGludGVyZmFjZSBmdW5jdGlvbnMgdG8gc3VwcG9ydCBwYXJhbGxlbCBpbmRleCBz Y2FucyAqLwogCWFtZXN0aW1hdGVwYXJhbGxlbHNjYW5fZnVuY3Rpb24gYW1lc3RpbWF0ZXBhcmFs bGVsc2NhbjsgLyogY2FuIGJlIE5VTEwgKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vz cy9nZW5hbS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFtLmgKaW5kZXggZGI2MmUwY2ExLi5h ZjI5MmQwNzEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5oCisrKyBiL3Ny Yy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5oCkBAIC05Niw2ICs5Niw3IEBAIHR5cGVkZWYgYm9vbCAo KkluZGV4QnVsa0RlbGV0ZUNhbGxiYWNrKSAoSXRlbVBvaW50ZXIgaXRlbXB0ciwgdm9pZCAqc3Rh dGUpOwogCiAvKiBzdHJ1Y3QgZGVmaW5pdGlvbnMgYXBwZWFyIGluIHJlbHNjYW4uaCAqLwogdHlw ZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuRGVzY0RhdGEgKkluZGV4U2NhbkRlc2M7Cit0eXBlZGVmIHN0 cnVjdCBJbmRleFNjYW5CYXRjaERhdGEgKkluZGV4U2NhbkJhdGNoOwogdHlwZWRlZiBzdHJ1Y3Qg U3lzU2NhbkRlc2NEYXRhICpTeXNTY2FuRGVzYzsKIAogdHlwZWRlZiBzdHJ1Y3QgUGFyYWxsZWxJ bmRleFNjYW5EZXNjRGF0YSAqUGFyYWxsZWxJbmRleFNjYW5EZXNjOwpAQCAtMTg5LDggKzE5MCw2 IEBAIGV4dGVybiBJbmRleFNjYW5EZXNjIGluZGV4X2JlZ2luc2Nhbl9wYXJhbGxlbChSZWxhdGlv biBoZWFwcmVsLAogCQkJCQkJCQkJCQkgIGludCBua2V5cywgaW50IG5vcmRlcmJ5cywKIAkJCQkJ CQkJCQkJICBQYXJhbGxlbEluZGV4U2NhbkRlc2MgcHNjYW4sCiAJCQkJCQkJCQkJCSAgdWludDMy IGZsYWdzKTsKLWV4dGVybiBJdGVtUG9pbnRlciBpbmRleF9nZXRuZXh0X3RpZChJbmRleFNjYW5E ZXNjIHNjYW4sCi0JCQkJCQkJCQkgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pOwogZXh0ZXJuIGlu dDY0IGluZGV4X2dldGJpdG1hcChJbmRleFNjYW5EZXNjIHNjYW4sIFRJREJpdG1hcCAqYml0bWFw KTsKIAogZXh0ZXJuIEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAqaW5kZXhfYnVsa19kZWxldGUoSW5k ZXhWYWN1dW1JbmZvICppbmZvLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBh bS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCmluZGV4IDNjYTQyZWI5My4uNzk5NzZm NTBmIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKKysrIGIvc3JjL2lu Y2x1ZGUvYWNjZXNzL2hlYXBhbS5oCkBAIC0xMzAsNiArMTMwLDcgQEAgdHlwZWRlZiBzdHJ1Y3Qg SW5kZXhGZXRjaEhlYXBEYXRhCiAKIAkvKiBGb3IgdmlzaWJpbGl0eSBtYXAgY2hlY2tzIChpbmRl eC1vbmx5IHNjYW5zIGFuZCBvbi1hY2Nlc3MgcHJ1bmluZykgKi8KIAlCdWZmZXIJCXhzX3ZtYnVm ZmVyOwkvKiB2aXNpYmlsaXR5IG1hcCBidWZmZXIgKi8KKwlpbnQJCQl4c192bV9pdGVtczsJLyog IyBpdGVtcyB0byByZXNvbHZlIHZpc2liaWxpdHkgaW5mbyBmb3IgKi8KIH0gSW5kZXhGZXRjaEhl YXBEYXRhOwogCiAvKiBSZXN1bHQgY29kZXMgZm9yIEhlYXBUdXBsZVNhdGlzZmllc1ZhY3V1bSAq LwpAQCAtNDM0LDggKzQzNSwxMyBAQCBleHRlcm4gYm9vbCBoZWFwYW1fZmV0Y2hfdGlkKFJlbGF0 aW9uIHJlbCwgSXRlbVBvaW50ZXIgdGlkLCBTbmFwc2hvdCBzbmFwc2hvdCwKIAkJCQkJCQkgVHVw bGVUYWJsZVNsb3QgKnNsb3QsIGJvb2wgKmFsbF9kZWFkKTsKIGV4dGVybiBJbmRleEZldGNoVGFi bGVEYXRhICpoZWFwYW1faW5kZXhfZmV0Y2hfYmVnaW4oSW5kZXhTY2FuRGVzYyBzY2FuLAogCQkJ CQkJCQkJCQkJCSB1aW50MzIgZmxhZ3MpOworZXh0ZXJuIHZvaWQgaGVhcGFtX2luZGV4X2ZldGNo X2JhdGNoX2luaXQoSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJCSAgSW5kZXhTY2FuQmF0 Y2ggYmF0Y2gsCisJCQkJCQkJCQkJICBib29sIG5ld19hbGxvYyk7CiBleHRlcm4gdm9pZCBoZWFw YW1faW5kZXhfZmV0Y2hfcmVzZXQoSW5kZXhTY2FuRGVzYyBzY2FuKTsKIGV4dGVybiB2b2lkIGhl YXBhbV9pbmRleF9mZXRjaF9lbmQoSW5kZXhTY2FuRGVzYyBzY2FuKTsKK2V4dGVybiB2b2lkIGhl YXBhbV9pbmRleF9mZXRjaF9tYXJrcG9zKEluZGV4U2NhbkRlc2Mgc2Nhbik7CitleHRlcm4gdm9p ZCBoZWFwYW1faW5kZXhfZmV0Y2hfcmVzdHJwb3MoSW5kZXhTY2FuRGVzYyBzY2FuKTsKIGV4dGVy biBib29sIGhlYXBfaG90X3NlYXJjaF9idWZmZXIoSXRlbVBvaW50ZXIgdGlkLCBSZWxhdGlvbiBy ZWxhdGlvbiwKIAkJCQkJCQkJICAgQnVmZmVyIGJ1ZmZlciwgU25hcHNob3Qgc25hcHNob3QsIEhl YXBUdXBsZSBoZWFwVHVwbGUsCiAJCQkJCQkJCSAgIGJvb2wgKmFsbF9kZWFkLCBib29sIGZpcnN0 X2NhbGwpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2luZGV4YmF0Y2guaCBiL3Ny Yy9pbmNsdWRlL2FjY2Vzcy9pbmRleGJhdGNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwLi5kZjBiZThjOWYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW5jbHVkZS9hY2Nl c3MvaW5kZXhiYXRjaC5oCkBAIC0wLDAgKzEsMjM1IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAq CisgKiBpbmRleGJhdGNoLmgKKyAqCSAgQmF0Y2gtYmFzZWQgaW5kZXggc2NhbiBpbmZyYXN0cnVj dHVyZSBmb3IgdGhlIGFtZ2V0YmF0Y2ggaW50ZXJmYWNlLgorICoKKyAqIFByb3ZpZGVzIGZ1bmN0 aW9ucyB1c2VkIGJ5IHRhYmxlIEFNcyB0byBtYW5hZ2UgYW4gaW5kZXggc2NhbidzIHBvc2l0aW9u YWwKKyAqIHN0YXRlIChzdG9yZWQgaW4gSW5kZXhTY2FuRGVzYy5iYXRjaHJpbmdidWYpLCBhbmQg dG8gbWFuYWdlIHVuZGVybHlpbmcKKyAqIHJlc291cmNlcyBzdWNoIGFzIG1lbW9yeSBhbmQgYnVm ZmVyIHBpbnMuICBBbHNvIHByb3ZpZGVzIHZhcmlvdXMgdXRpbGl0eQorICogZnVuY3Rpb25zIHVz ZWQgYnkgaW5kZXggQU1zIGZvciBiYXRjaCByZXNvdXJjZSBtYW5hZ2VtZW50LgorICoKKyAqIFRo aXMgbW9kdWxlIGRvZXMgbm90IHByb3ZpZGUgZWxlbWVudGFyeSBvcGVyYXRpb25zIGZvciBtYW5p cHVsYXRpbmcgdGhlCisgKiBzY2FuJ3MgcmluZyBidWZmZXIgKGUuZy4sIGZvciBhcHBlbmRpbmcg YSBiYXRjaCkuICBUaG9zZSBhcmUgaW1wbGVtZW50ZWQgYXMKKyAqIGlubGluZSBmdW5jdGlvbnMg ZGVmaW5lZCBiZXNpZGUgSW5kZXhTY2FuRGVzYyBhbmQgSW5kZXhTY2FuQmF0Y2guCisgKgorICog UG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjYsIFBvc3RncmVTUUwgR2xvYmFsIERldmVs b3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2Yg dGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqIHNyYy9pbmNsdWRlL2FjY2Vzcy9p bmRleGJhdGNoLmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBJTkRFWEJB VENIX0gKKyNkZWZpbmUgSU5ERVhCQVRDSF9ICisKKyNpbmNsdWRlICJhY2Nlc3MvYW1hcGkuaCIK KyNpbmNsdWRlICJhY2Nlc3MvZ2VuYW0uaCIKKyNpbmNsdWRlICJhY2Nlc3MvcmVsc2Nhbi5oIgor I2luY2x1ZGUgInN0b3JhZ2UvYnVmLmgiCisjaW5jbHVkZSAidXRpbHMvcmVsLmgiCisKKy8qIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAqIFV0aWxpdGllcyBjYWxsZWQgYnkgdGFibGUgQU1zCisgKiAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworLyoKKyAqIFNldHMgdXAgdGhlIGJhdGNoIHJpbmcg YnVmZmVyIHN0cnVjdHVyZSBmb3IgdXNlIGJ5IGFuIGluZGV4IHNjYW4uCisgKgorICogQ2FsbGVk IGZyb20gdGFibGUgQU0ncyBpbmRleF9mZXRjaF9iZWdpbiBjYWxsYmFjayBkdXJpbmcgYW1nZXRi YXRjaCBzY2Fucy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCit0YWJsZWFtX3V0aWxfYmF0Y2hz Y2FuX2luaXQoSW5kZXhTY2FuRGVzYyBzY2FuKQoreworCUFzc2VydChzY2FuLT5pbmRleFJlbGF0 aW9uLT5yZF9pbmRhbS0+YW1nZXRiYXRjaCAhPSBOVUxMKTsKKworCXNjYW4tPmJhdGNocmluZ2J1 Zi5zY2FuUG9zLnZhbGlkID0gZmFsc2U7CisJc2Nhbi0+YmF0Y2hyaW5nYnVmLm1hcmtQb3MudmFs aWQgPSBmYWxzZTsKKworCXNjYW4tPmJhdGNocmluZ2J1Zi5tYXJrQmF0Y2ggPSBOVUxMOworCXNj YW4tPmJhdGNocmluZ2J1Zi5oZWFkQmF0Y2ggPSAwOworCXNjYW4tPmJhdGNocmluZ2J1Zi5uZXh0 QmF0Y2ggPSAwOworCisJc2Nhbi0+dXNlYmF0Y2hyaW5nID0gdHJ1ZTsKK30KKworZXh0ZXJuIHZv aWQgdGFibGVhbV91dGlsX2JhdGNoc2Nhbl9yZXNldChJbmRleFNjYW5EZXNjIHNjYW4sIGJvb2wg ZW5kc2Nhbik7CitleHRlcm4gdm9pZCB0YWJsZWFtX3V0aWxfYmF0Y2hzY2FuX2VuZChJbmRleFNj YW5EZXNjIHNjYW4pOworZXh0ZXJuIHZvaWQgdGFibGVhbV91dGlsX2JhdGNoc2Nhbl9tYXJrX3Bv cyhJbmRleFNjYW5EZXNjIHNjYW4pOworZXh0ZXJuIHZvaWQgdGFibGVhbV91dGlsX2JhdGNoc2Nh bl9yZXN0b3JlX3BvcyhJbmRleFNjYW5EZXNjIHNjYW4pOworZXh0ZXJuIHZvaWQgdGFibGVhbV91 dGlsX3NjYW5iYXRjaF9kaXJjaGFuZ2UoSW5kZXhTY2FuRGVzYyBzY2FuKTsKK2V4dGVybiB2b2lk IHRhYmxlYW1fdXRpbF9zY2FucG9zX2tpbGxpdGVtKEluZGV4U2NhbkRlc2Mgc2Nhbik7CitleHRl cm4gdm9pZCB0YWJsZWFtX3V0aWxfcmVsZWFzZV9iYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIElu ZGV4U2NhbkJhdGNoIGJhdGNoKTsKK2V4dGVybiB2b2lkIHRhYmxlYW1fdXRpbF91bmd1YXJkX2Jh dGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpOworCisvKgorICog RmV0Y2ggdGhlIG5leHQgYmF0Y2ggb2YgbWF0Y2hpbmcgaXRlbXMgZm9yIHRoZSBzY2FuIChvciB0 aGUgZmlyc3QpLgorICoKKyAqIENhbGxlZCB3aGVuIGNhbGxlcidzIGN1cnJlbnQgYmF0Y2ggKHBh c3NlZCB0byB1cyBhcyBwcmlvckJhdGNoKSBoYXMgbm8gbW9yZQorICogbWF0Y2hpbmcgaXRlbXMg aW4gdGhlIGdpdmVuIHNjYW4gZGlyZWN0aW9uLiAgQ2FsbGVyIHBhc3NlcyBhIE5VTEwKKyAqIHBy aW9yQmF0Y2ggb24gdGhlIGZpcnN0IGNhbGwgaGVyZSBmb3IgdGhlIHNjYW4uCisgKgorICogUmV0 dXJucyB0aGUgbmV4dCBiYXRjaCB0byBiZSBwcm9jZXNzZWQgYnkgY2FsbGVyIGluIHRoZSBnaXZl biBzY2FuCisgKiBkaXJlY3Rpb24sIG9yIE5VTEwgd2hlbiB0aGVyZSBhcmUgbm8gbW9yZSBtYXRj aGVzIGluIHRoYXQgZGlyZWN0aW9uLgorICoKKyAqIFRoaXMgaXMgd2hlcmUgYmF0Y2hlcyBhcmUg YXBwZW5kZWQgdG8gdGhlIHNjYW4ncyByaW5nIGJ1ZmZlci4gIFdlIGRvbid0CisgKiBmcmVlIGFu eSBiYXRjaGVzIGhlcmUsIHRob3VnaDsgdGhhdCBpcyBsZWZ0IHVwIHRvIHRoZSBjYWxsZXIuICBU aGUgY2FsbGVyCisgKiBpcyBhbHNvIHJlc3BvbnNpYmxlIGZvciBhZHZhbmNpbmcgdGhlaXIgcG9z aXRpb24uCisgKi8KK3N0YXRpYyBwZ19hdHRyaWJ1dGVfYWx3YXlzX2lubGluZSBJbmRleFNjYW5C YXRjaAordGFibGVhbV91dGlsX2ZldGNoX25leHRfYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBT Y2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQkJCQkgIEluZGV4U2NhbkJhdGNoIHByaW9yQmF0 Y2gsIEJhdGNoUmluZ0l0ZW1Qb3MgKnBvcykKK3sKKwlJbmRleFNjYW5CYXRjaCBiYXRjaCA9IE5V TEw7CisJQmF0Y2hSaW5nQnVmZmVyICpiYXRjaHJpbmdidWYgUEdfVVNFRF9GT1JfQVNTRVJUU19P TkxZID0gJnNjYW4tPmJhdGNocmluZ2J1ZjsKKworCUFzc2VydChzY2FuLT51c2ViYXRjaHJpbmcp OworCisJaWYgKCFwcmlvckJhdGNoKQorCXsKKwkJLyogRmlyc3QgY2FsbCBmb3IgdGhlIHNjYW4g Ki8KKwkJQXNzZXJ0KHBvcyA9PSAmYmF0Y2hyaW5nYnVmLT5zY2FuUG9zKTsKKwl9CisJZWxzZSBp ZiAodW5saWtlbHkocHJpb3JCYXRjaC0+ZGlyICE9IGRpcmVjdGlvbikpCisJeworCQkvKgorCQkg KiBXZSBkZXRlY3RlZCBhIGNoYW5nZSBpbiBzY2FuIGRpcmVjdGlvbiBhY3Jvc3MgYmF0Y2hlcy4g IFByZXBhcmUKKwkJICogc2NhbidzIGJhdGNocmluZ2J1ZiBzdGF0ZSBmb3IgdXMgdG8gZ2V0IHRo ZSBuZXh0IGJhdGNoIGZvciB0aGUKKwkJICogb3Bwb3NpdGUgc2NhbiBkaXJlY3Rpb24gdG8gdGhl IG9uZSB1c2VkIHdoZW4gcHJpb3JCYXRjaCB3YXMKKwkJICogcmV0dXJuZWQgYnkgYW1nZXRiYXRj aC4KKwkJICovCisJCXRhYmxlYW1fdXRpbF9zY2FuYmF0Y2hfZGlyY2hhbmdlKHNjYW4pOworCisJ CS8qIHByaW9yQmF0Y2ggaXMgbm93IGJhdGNocmluZ2J1ZidzIG9ubHkgYmF0Y2ggKi8KKwkJQXNz ZXJ0KHBvcy0+YmF0Y2ggPT0gYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2gpOworCQlBc3NlcnQoaW5k ZXhfc2Nhbl9iYXRjaF9jb3VudChzY2FuKSA9PSAxKTsKKwl9CisJZWxzZSBpZiAoaW5kZXhfc2Nh bl9iYXRjaF9sb2FkZWQoc2NhbiwgcG9zLT5iYXRjaCArIDEpKQorCXsKKwkJLyogTmV4dCBiYXRj aCBhbHJlYWR5IGxvYWRlZCBmb3IgdXMgKi8KKwkJYmF0Y2ggPSBpbmRleF9zY2FuX2JhdGNoKHNj YW4sIHBvcy0+YmF0Y2ggKyAxKTsKKworCQlBc3NlcnQocHJpb3JCYXRjaC0+ZGlyID09IGRpcmVj dGlvbik7CisJCUFzc2VydChiYXRjaC0+ZGlyID09IGRpcmVjdGlvbik7CisJCUFzc2VydChiYXRj aC0+Zmlyc3RJdGVtIDw9IGJhdGNoLT5sYXN0SXRlbSk7CisJCXJldHVybiBiYXRjaDsKKwl9CisK KwkvKgorCSAqIEFzc2VydCBwcmVjb25kaXRpb25zIGZvciBjYWxsaW5nIGFtZ2V0YmF0Y2guCisJ ICoKKwkgKiBwcmlvckJhdGNoIGhhZCBiZXR0ZXIgYmUgZm9yIHRoZSBsYXN0IHZhbGlkIGJhdGNo IGN1cnJlbnRseSBpbiB0aGUgcmluZworCSAqIGJ1ZmZlciAoYmF0Y2hlcyBtdXN0IHN0YXkgaW4g c2NhbiBvcmRlcikuICBJZiBpdCBpc24ndCB0aGVuIHdlIHNob3VsZAorCSAqIGhhdmUgYWxyZWFk eSByZXR1cm5lZCBzb21lIGV4aXN0aW5nIGxvYWRlZCBiYXRjaCBlYXJsaWVyLgorCSAqLworCUFz c2VydCghaW5kZXhfc2Nhbl9iYXRjaF9mdWxsKHNjYW4pKTsKKwlBc3NlcnQoIXByaW9yQmF0Y2gg fHwKKwkJICAgKGluZGV4X3NjYW5fYmF0Y2hfY291bnQoc2NhbikgPiAwICYmIHByaW9yQmF0Y2gt PmRpciA9PSBkaXJlY3Rpb24gJiYKKwkJCWluZGV4X3NjYW5fYmF0Y2goc2NhbiwgYmF0Y2hyaW5n YnVmLT5uZXh0QmF0Y2ggLSAxKSA9PSBwcmlvckJhdGNoKSk7CisKKwkvKgorCSAqIEJlZm9yZSB3 ZSBjYWxsIGFtZ2V0YmF0Y2ggYWdhaW4sIGNoZWNrIGlmIHByaW9yQmF0Y2ggaXMgYWxyZWFkeSBr bm93bgorCSAqIHRvIGJlIHRoZSBsYXN0IGJhdGNoIHdpdGggbWF0Y2hpbmcgaXRlbXMgaW4gdGhp cyBzY2FuIGRpcmVjdGlvbgorCSAqLworCWlmIChwcmlvckJhdGNoICYmCisJCShTY2FuRGlyZWN0 aW9uSXNGb3J3YXJkKGRpcmVjdGlvbikgPworCQkgcHJpb3JCYXRjaC0+a25vd25FbmRGb3J3YXJk IDoKKwkJIHByaW9yQmF0Y2gtPmtub3duRW5kQmFja3dhcmQpKQorCQlyZXR1cm4gTlVMTDsKKwor CWJhdGNoID0gc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtZ2V0YmF0Y2goc2Nhbiwg cHJpb3JCYXRjaCwKKwkJCQkJCQkJCQkJCQkgIGRpcmVjdGlvbik7CisJaWYgKGJhdGNoKQorCXsK KwkJLyogV2UgZ290IHRoZSBiYXRjaCBmcm9tIHRoZSBpbmRleCBBTSAqLworCQlBc3NlcnQoYmF0 Y2gtPmRpciA9PSBkaXJlY3Rpb24pOworCQlBc3NlcnQoYmF0Y2gtPmZpcnN0SXRlbSA8PSBiYXRj aC0+bGFzdEl0ZW0pOworCisJCS8qIEFwcGVuZCBiYXRjaCB0byB0aGUgZW5kIG9mIHJpbmcgYnVm ZmVyL3dyaXRlIGl0IHRvIGJ1ZmZlciBpbmRleCAqLworCQlpbmRleF9zY2FuX2JhdGNoX2FwcGVu ZChzY2FuLCBiYXRjaCk7CisKKwkJLyoKKwkJICogVGhlb3JldGljYWxseSB3ZSBzaG91bGQgc2V0 IGtub3duRW5kRm9yd2FyZC9rbm93bkVuZEJhY2t3YXJkIHRvCisJCSAqIGZhbHNlICh3aGljaGV2 ZXIgaXMgdXNlZCB3aGVuIG1vdmluZyBpbiB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uKQorCQkgKiB3 aGVuIHRoaXMgaXMgdGhlIHNjYW4ncyBmaXJzdCByZXR1cm5lZCBiYXRjaC4gIFdlIGRvbid0IGJv dGhlcgorCQkgKiBiZWNhdXNlIHRoZSBpbmRleCBBTSBzaG91bGQgYWx3YXlzIHJlY29yZCB0aGF0 IGZhY3QgaW4gaXRzIG93bgorCQkgKiBvcGFxdWUgYXJlYS4gIChUaGVzZSBmaWVsZHMgb25seSBl eGlzdCBiZWNhdXNlIHdlIGRvbid0IHdhbnQgaW5kZXgKKwkJICogQU1zIHNldHRpbmcgX2FueV8g ZmllbGQgZnJvbSBhbnkgcHJpb3JiYXRjaCB0aGF0IHdlIHBhc3MgdG8gdGhlbS4KKwkJICogQmVz aWRlcywgaXQgd291bGQgYmUgY3VtYmVyc29tZSBmb3IgaW5kZXggQU1zIHRvIGtlZXAgdHJhY2sg b2YKKwkJICogd2hpY2ggYmF0Y2ggaXMgdGhlIGN1cnJlbnQgYW1nZXRiYXRjaCBjYWxsJ3Mgb3Jp Z2luYWwgcHJpb3JiYXRjaC4pCisJCSAqLworCX0KKwllbHNlCisJeworCQkvKiBhbWdldGJhdGNo IHJldHVybmVkIE5VTEwgKi8KKwkJaWYgKHByaW9yQmF0Y2gpCisJCXsKKwkJCS8qCisJCQkgKiBU aGVyZSBhcmUgbm8gZnVydGhlciBtYXRjaGVzIHRvIGJlIGZvdW5kIGluIHRoZSBjdXJyZW50IHNj YW4KKwkJCSAqIGRpcmVjdGlvbiwgZm9sbG93aW5nIHByaW9yQmF0Y2guICBSZW1lbWJlciB0aGF0 IHByaW9yQmF0Y2ggaXMKKwkJCSAqIHRoZSBsYXN0IGJhdGNoIHdpdGggbWF0Y2hpbmcgaXRlbXMu CisJCQkgKi8KKwkJCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcmVjdGlvbikpCisJCQkJ cHJpb3JCYXRjaC0+a25vd25FbmRGb3J3YXJkID0gdHJ1ZTsKKwkJCWVsc2UKKwkJCQlwcmlvckJh dGNoLT5rbm93bkVuZEJhY2t3YXJkID0gdHJ1ZTsKKwkJfQorCX0KKworCS8qIHhzX2hpdHVwIGlz bid0IGN1cnJlbnRseSBzdXBwb3J0ZWQgYnkgYW1nZXRiYXRjaCBzY2FucyAqLworCUFzc2VydCgh c2Nhbi0+eHNfaGl0dXApOworCisJcmV0dXJuIGJhdGNoOworfQorCisvKgorICogRmV0Y2ggdGhl IG5leHQgbWF0Y2hpbmcgVElEIGZvciB0aGUgc2NhbiAob3IgdGhlIGZpcnN0KS4KKyAqCisgKiBU aGlzIGlzIHRoZSBhbWdldHR1cGxlIGVxdWl2YWxlbnQgb2YgdGFibGVhbV91dGlsX2ZldGNoX25l eHRfYmF0Y2guCisgKgorICogVGhlcmUgaXMgbm8gYmF0Y2gtbGlrZSBzdGF0ZSBmb3IgdXMgdG8g bWFuYWdlICh0eXBpY2FsbHkgdGhhdCdzIHVwIHRvIHRoZQorICogaW5kZXggQU0gd2hlbiBpdCBp bXBsZW1lbnRzIGFtZ2V0dHVwbGUpLgorICovCitzdGF0aWMgcGdfYXR0cmlidXRlX2Fsd2F5c19p bmxpbmUgSXRlbVBvaW50ZXIKK3RhYmxlYW1fdXRpbF9mZXRjaF9uZXh0X3R1cGxlX3RpZChJbmRl eFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCWJvb2wJCWZvdW5k OworCisJQXNzZXJ0KCFzY2FuLT51c2ViYXRjaHJpbmcpOworCisJZm91bmQgPSBzY2FuLT5pbmRl eFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1nZXR0dXBsZShzY2FuLCBkaXJlY3Rpb24pOworCisJLyog UmVzZXQga2lsbCBmbGFnIGltbWVkaWF0ZWx5IGZvciBzYWZldHkgKi8KKwlzY2FuLT5raWxsX3By aW9yX3R1cGxlID0gZmFsc2U7CisJQXNzZXJ0KCFzY2FuLT54c19oZWFwX2NvbnRpbnVlKTsKKwor CS8qIElmIHdlJ3JlIG91dCBvZiBpbmRleCBlbnRyaWVzLCB3ZSdyZSBkb25lICovCisJaWYgKCFm b3VuZCkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiBSZXR1cm4gdGhlIFRJRCBvZiB0aGUgdHVwbGUg d2UgZm91bmQgKi8KKwlyZXR1cm4gJnNjYW4tPnhzX2hlYXB0aWQ7Cit9CisKKy8qIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAqIFV0aWxpdGllcyBjYWxsZWQgYnkgaW5kZXggQU1zCisgKiAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgKi8KK2V4dGVybiB2b2lkIGluZGV4YW1fdXRpbF91bmxvY2tfYmF0Y2go SW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCwKKwkJCQkJCQkJCSAgQnVm ZmVyIGJ1Zik7CitleHRlcm4gSW5kZXhTY2FuQmF0Y2ggaW5kZXhhbV91dGlsX2FsbG9jX2JhdGNo KEluZGV4U2NhbkRlc2Mgc2Nhbik7CitleHRlcm4gdm9pZCBpbmRleGFtX3V0aWxfcmVsZWFzZV9i YXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKKworLyoKKyAq IFV0aWxpdHkgbWFjcm8gZm9yIGFjY2Vzc2luZyB0aGUgaW5kZXggQU0ncyBwZXItYmF0Y2ggb3Bh cXVlIGRhdGEuCisgKgorICogRWFjaCBiYXRjaCBhbGxvY2F0aW9uIHBsYWNlcyB0aGUgaW5kZXgg QU0gb3BhcXVlIGFyZWEgYXQgYSBmaXhlZCBuZWdhdGl2ZQorICogb2Zmc2V0IGZyb20gdGhlIElu ZGV4U2NhbkJhdGNoIHBvaW50ZXIgKHNlZSBpbmRleGFtX3V0aWxfYWxsb2NfYmF0Y2gpLgorICog VGhpcyBtYWNybyByZXR1cm5zIGEgdHlwZWQgcG9pbnRlciB0byB0aGF0IGFyZWEsIGFzc2VydGlu ZyB0aGF0IGV2ZXJ5Ym9keQorICogaGFzIHRoZSBzYW1lIGlkZWEgYWJvdXQgd2hlcmUgdGhlIGlu ZGV4IEFNIG9wYXF1ZSBhcmVhIGlzIGluIHBhc3NpbmcuCisgKi8KKyNkZWZpbmUgaW5kZXhhbV91 dGlsX2JhdGNoX2dldF9hbWRhdGEoc2NhbiwgYmF0Y2gsIHR5cGUpIFwKKwkoQXNzZXJ0TWFjcm8o KHNjYW4pLT5iYXRjaF9pbmRleF9vcGFxdWVfc2l6ZSA9PSBNQVhBTElHTihzaXplb2YodHlwZSkp KSwgXAorCSAoKHR5cGUgKikgKChjaGFyICopIChiYXRjaCkgLSBNQVhBTElHTihzaXplb2YodHlw ZSkpKSkpCisKKyNlbmRpZgkJCQkJCQkvKiBJTkRFWEJBVENIX0ggKi8KZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL2FjY2Vzcy9uYnRyZWUuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9uYnRyZWUuaApp bmRleCAzMDk3ZTliYjEuLmVmOTM4MmY3NCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNz L25idHJlZS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9uYnRyZWUuaApAQCAtMTUsNiArMTUs NyBAQAogI2RlZmluZSBOQlRSRUVfSAogCiAjaW5jbHVkZSAiYWNjZXNzL2FtYXBpLmgiCisjaW5j bHVkZSAiYWNjZXNzL2luZGV4YmF0Y2guaCIKICNpbmNsdWRlICJhY2Nlc3MvaXR1cC5oIgogI2lu Y2x1ZGUgImFjY2Vzcy9zZGlyLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19hbV9kLmgiCkBAIC05 MjQsMTEyICs5MjUsNiBAQCB0eXBlZGVmIHN0cnVjdCBCVFZhY3V1bVBvc3RpbmdEYXRhCiAKIHR5 cGVkZWYgQlRWYWN1dW1Qb3N0aW5nRGF0YSAqQlRWYWN1dW1Qb3N0aW5nOwogCi0vKgotICogQlRT Y2FuT3BhcXVlRGF0YSBpcyB0aGUgYnRyZWUtcHJpdmF0ZSBzdGF0ZSBuZWVkZWQgZm9yIGFuIGlu ZGV4c2Nhbi4KLSAqIFRoaXMgY29uc2lzdHMgb2YgcHJlcHJvY2Vzc2VkIHNjYW4ga2V5cyAoc2Vl IF9idF9wcmVwcm9jZXNzX2tleXMoKSBmb3IKLSAqIGRldGFpbHMgb2YgdGhlIHByZXByb2Nlc3Np bmcpLCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY3VycmVudCBsb2NhdGlvbgotICogb2YgdGhlIHNj YW4sIGFuZCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbWFya2VkIGxvY2F0aW9uLCBpZiBhbnkuICAo V2UgdXNlCi0gKiBCVFNjYW5Qb3NEYXRhIHRvIHJlcHJlc2VudCB0aGUgZGF0YSBuZWVkZWQgZm9y IGVhY2ggb2YgY3VycmVudCBhbmQgbWFya2VkCi0gKiBsb2NhdGlvbnMuKQlJbiBhZGRpdGlvbiB3 ZSBjYW4gcmVtZW1iZXIgc29tZSBrbm93bi1raWxsZWQgaW5kZXggZW50cmllcwotICogdGhhdCBt dXN0IGJlIG1hcmtlZCBiZWZvcmUgd2UgY2FuIG1vdmUgb2ZmIHRoZSBjdXJyZW50IHBhZ2UuCi0g KgotICogSW5kZXggc2NhbnMgd29yayBhIHBhZ2UgYXQgYSB0aW1lOiB3ZSBwaW4gYW5kIHJlYWQt bG9jayB0aGUgcGFnZSwgaWRlbnRpZnkKLSAqIGFsbCB0aGUgbWF0Y2hpbmcgaXRlbXMgb24gdGhl IHBhZ2UgYW5kIHNhdmUgdGhlbSBpbiBCVFNjYW5Qb3NEYXRhLCB0aGVuCi0gKiByZWxlYXNlIHRo ZSByZWFkLWxvY2sgd2hpbGUgcmV0dXJuaW5nIHRoZSBpdGVtcyB0byB0aGUgY2FsbGVyIGZvcgot ICogcHJvY2Vzc2luZy4gIFRoaXMgYXBwcm9hY2ggbWluaW1pemVzIGxvY2svdW5sb2NrIHRyYWZm aWMuICBXZSBtdXN0IGFsd2F5cwotICogZHJvcCB0aGUgbG9jayB0byBtYWtlIGl0IG9rYXkgZm9y IGNhbGxlciB0byBwcm9jZXNzIHRoZSByZXR1cm5lZCBpdGVtcy4KLSAqIFdoZXRoZXIgb3Igbm90 IHdlIGNhbiBhbHNvIHJlbGVhc2UgdGhlIHBpbiBkdXJpbmcgdGhpcyB3aW5kb3cgd2lsbCB2YXJ5 LgotICogV2UgZHJvcCB0aGUgcGluICh3aGVuIHNvLT5kcm9wUGluKSB0byBhdm9pZCBibG9ja2lu ZyBwcm9ncmVzcyBieSBWQUNVVU0KLSAqIChzZWUgbmJ0cmVlL1JFQURNRSBzZWN0aW9uIGFib3V0 IG1ha2luZyBjb25jdXJyZW50IFRJRCByZWN5Y2xpbmcgc2FmZSkuCi0gKiBXZSdsbCBhbHdheXMg cmVsZWFzZSBib3RoIHRoZSBsb2NrIGFuZCB0aGUgcGluIG9uIHRoZSBjdXJyZW50IHBhZ2UgYmVm b3JlCi0gKiBtb3Zpbmcgb24gdG8gaXRzIHNpYmxpbmcgcGFnZS4KLSAqCi0gKiBJZiB3ZSBhcmUg ZG9pbmcgYW4gaW5kZXgtb25seSBzY2FuLCB3ZSBzYXZlIHRoZSBlbnRpcmUgSW5kZXhUdXBsZSBm b3IgZWFjaAotICogbWF0Y2hlZCBpdGVtLCBvdGhlcndpc2Ugb25seSBpdHMgaGVhcCBUSUQgYW5k IG9mZnNldC4gIFRoZSBJbmRleFR1cGxlcyBnbwotICogaW50byBhIHNlcGFyYXRlIHdvcmtzcGFj ZSBhcnJheTsgZWFjaCBCVFNjYW5Qb3NJdGVtIHN0b3JlcyBpdHMgdHVwbGUncwotICogb2Zmc2V0 IHdpdGhpbiB0aGF0IGFycmF5LiAgUG9zdGluZyBsaXN0IHR1cGxlcyBzdG9yZSBhICJiYXNlIiB0 dXBsZSBvbmNlLAotICogYWxsb3dpbmcgdGhlIHNhbWUga2V5IHRvIGJlIHJldHVybmVkIGZvciBl YWNoIFRJRCBpbiB0aGUgcG9zdGluZyBsaXN0Ci0gKiB0dXBsZS4KLSAqLwotCi10eXBlZGVmIHN0 cnVjdCBCVFNjYW5Qb3NJdGVtCS8qIHdoYXQgd2UgcmVtZW1iZXIgYWJvdXQgZWFjaCBtYXRjaCAq LwotewotCUl0ZW1Qb2ludGVyRGF0YSBoZWFwVGlkOwkvKiBUSUQgb2YgcmVmZXJlbmNlZCBoZWFw IGl0ZW0gKi8KLQlPZmZzZXROdW1iZXIgaW5kZXhPZmZzZXQ7CS8qIGluZGV4IGl0ZW0ncyBsb2Nh dGlvbiB3aXRoaW4gcGFnZSAqLwotCUxvY2F0aW9uSW5kZXggdHVwbGVPZmZzZXQ7CS8qIEluZGV4 VHVwbGUncyBvZmZzZXQgaW4gd29ya3NwYWNlLCBpZiBhbnkgKi8KLX0gQlRTY2FuUG9zSXRlbTsK LQotdHlwZWRlZiBzdHJ1Y3QgQlRTY2FuUG9zRGF0YQotewotCUJ1ZmZlcgkJYnVmOwkJCS8qIGN1 cnJQYWdlIGJ1ZiAoaW52YWxpZCBtZWFucyB1bnBpbm5lZCkgKi8KLQotCS8qIHBhZ2UgZGV0YWls cyBhcyBvZiB0aGUgc2F2ZWQgcG9zaXRpb24ncyBjYWxsIHRvIF9idF9yZWFkcGFnZSAqLwotCUJs b2NrTnVtYmVyIGN1cnJQYWdlOwkJLyogcGFnZSByZWZlcmVuY2VkIGJ5IGl0ZW1zIGFycmF5ICov Ci0JQmxvY2tOdW1iZXIgcHJldlBhZ2U7CQkvKiBjdXJyUGFnZSdzIGxlZnQgbGluayAqLwotCUJs b2NrTnVtYmVyIG5leHRQYWdlOwkJLyogY3VyclBhZ2UncyByaWdodCBsaW5rICovCi0JWExvZ1Jl Y1B0cglsc247CQkJLyogY3VyclBhZ2UncyBMU04gKHdoZW4gc28tPmRyb3BQaW4pICovCi0KLQkv KiBzY2FuIGRpcmVjdGlvbiBmb3IgdGhlIHNhdmVkIHBvc2l0aW9uJ3MgY2FsbCB0byBfYnRfcmVh ZHBhZ2UgKi8KLQlTY2FuRGlyZWN0aW9uIGRpcjsKLQotCS8qCi0JICogSWYgd2UgYXJlIGRvaW5n IGFuIGluZGV4LW9ubHkgc2NhbiwgbmV4dFR1cGxlT2Zmc2V0IGlzIHRoZSBmaXJzdCBmcmVlCi0J ICogbG9jYXRpb24gaW4gdGhlIGFzc29jaWF0ZWQgdHVwbGUgc3RvcmFnZSB3b3Jrc3BhY2UuCi0J ICovCi0JaW50CQkJbmV4dFR1cGxlT2Zmc2V0OwotCi0JLyoKLQkgKiBtb3JlTGVmdCBhbmQgbW9y ZVJpZ2h0IHRyYWNrIHdoZXRoZXIgd2UgdGhpbmsgdGhlcmUgbWF5IGJlIG1hdGNoaW5nCi0JICog aW5kZXggZW50cmllcyB0byB0aGUgbGVmdCBhbmQgcmlnaHQgb2YgdGhlIGN1cnJlbnQgcGFnZSwg cmVzcGVjdGl2ZWx5LgotCSAqLwotCWJvb2wJCW1vcmVMZWZ0OwotCWJvb2wJCW1vcmVSaWdodDsK LQotCS8qCi0JICogVGhlIGl0ZW1zIGFycmF5IGlzIGFsd2F5cyBvcmRlcmVkIGluIGluZGV4IG9y ZGVyIChpZSwgaW5jcmVhc2luZwotCSAqIGluZGV4b2Zmc2V0KS4gIFdoZW4gc2Nhbm5pbmcgYmFj a3dhcmRzIGl0IGlzIGNvbnZlbmllbnQgdG8gZmlsbCB0aGUKLQkgKiBhcnJheSBiYWNrLXRvLWZy b250LCBzbyB3ZSBzdGFydCBhdCB0aGUgbGFzdCBzbG90IGFuZCBmaWxsIGRvd253YXJkcy4KLQkg KiBIZW5jZSB3ZSBuZWVkIGJvdGggYSBmaXJzdC12YWxpZC1lbnRyeSBhbmQgYSBsYXN0LXZhbGlk LWVudHJ5IGNvdW50ZXIuCi0JICogaXRlbUluZGV4IGlzIGEgY3Vyc29yIHNob3dpbmcgd2hpY2gg ZW50cnkgd2FzIGxhc3QgcmV0dXJuZWQgdG8gY2FsbGVyLgotCSAqLwotCWludAkJCWZpcnN0SXRl bTsJCS8qIGZpcnN0IHZhbGlkIGluZGV4IGluIGl0ZW1zW10gKi8KLQlpbnQJCQlsYXN0SXRlbTsJ CS8qIGxhc3QgdmFsaWQgaW5kZXggaW4gaXRlbXNbXSAqLwotCWludAkJCWl0ZW1JbmRleDsJCS8q IGN1cnJlbnQgaW5kZXggaW4gaXRlbXNbXSAqLwotCi0JQlRTY2FuUG9zSXRlbSBpdGVtc1tNYXhU SURzUGVyQlRyZWVQYWdlXTsJLyogTVVTVCBCRSBMQVNUICovCi19IEJUU2NhblBvc0RhdGE7Ci0K LXR5cGVkZWYgQlRTY2FuUG9zRGF0YSAqQlRTY2FuUG9zOwotCi0jZGVmaW5lIEJUU2NhblBvc0lz UGlubmVkKHNjYW5wb3MpIFwKLSggXAotCUFzc2VydE1hY3JvKEJsb2NrTnVtYmVySXNWYWxpZCgo c2NhbnBvcykuY3VyclBhZ2UpIHx8IFwKLQkJCQkhQnVmZmVySXNWYWxpZCgoc2NhbnBvcykuYnVm KSksIFwKLQlCdWZmZXJJc1ZhbGlkKChzY2FucG9zKS5idWYpIFwKLSkKLSNkZWZpbmUgQlRTY2Fu UG9zVW5waW4oc2NhbnBvcykgXAotCWRvIHsgXAotCQlSZWxlYXNlQnVmZmVyKChzY2FucG9zKS5i dWYpOyBcCi0JCShzY2FucG9zKS5idWYgPSBJbnZhbGlkQnVmZmVyOyBcCi0JfSB3aGlsZSAoMCkK LSNkZWZpbmUgQlRTY2FuUG9zVW5waW5JZlBpbm5lZChzY2FucG9zKSBcCi0JZG8geyBcCi0JCWlm IChCVFNjYW5Qb3NJc1Bpbm5lZChzY2FucG9zKSkgXAotCQkJQlRTY2FuUG9zVW5waW4oc2NhbnBv cyk7IFwKLQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIEJUU2NhblBvc0lzVmFsaWQoc2NhbnBvcykg XAotKCBcCi0JQXNzZXJ0TWFjcm8oQmxvY2tOdW1iZXJJc1ZhbGlkKChzY2FucG9zKS5jdXJyUGFn ZSkgfHwgXAotCQkJCSFCdWZmZXJJc1ZhbGlkKChzY2FucG9zKS5idWYpKSwgXAotCUJsb2NrTnVt YmVySXNWYWxpZCgoc2NhbnBvcykuY3VyclBhZ2UpIFwKLSkKLSNkZWZpbmUgQlRTY2FuUG9zSW52 YWxpZGF0ZShzY2FucG9zKSBcCi0JZG8geyBcCi0JCShzY2FucG9zKS5idWYgPSBJbnZhbGlkQnVm ZmVyOyBcCi0JCShzY2FucG9zKS5jdXJyUGFnZSA9IEludmFsaWRCbG9ja051bWJlcjsgXAotCX0g d2hpbGUgKDApCi0KIC8qIFdlIG5lZWQgb25lIG9mIHRoZXNlIGZvciBlYWNoIGVxdWFsaXR5LXR5 cGUgU0tfU0VBUkNIQVJSQVkgc2NhbiBrZXkgKi8KIHR5cGVkZWYgc3RydWN0IEJUQXJyYXlLZXlJ bmZvCiB7CkBAIC0xMDUwLDYgKzk0NSw0MyBAQCB0eXBlZGVmIHN0cnVjdCBCVEFycmF5S2V5SW5m bwogCVNjYW5LZXkJCWhpZ2hfY29tcGFyZTsJLyogYXJyYXkncyA8IG9yIDw9IHVwcGVyIGJvdW5k ICovCiB9IEJUQXJyYXlLZXlJbmZvOwogCisvKiBQZXItYmF0Y2ggZGF0YSBwcml2YXRlIHRvIHRo ZSBidHJlZSBpbmRleCBBTSAqLwordHlwZWRlZiBzdHJ1Y3QgQlRCYXRjaERhdGEKK3sKKwlCdWZm ZXIJCWJ1ZjsJCQkvKiBsZWFmIHBhZ2UncyBidWZmZXIgcGluICovCisJQmxvY2tOdW1iZXIgY3Vy clBhZ2U7CQkvKiBsZWFmIHBhZ2UncyBibG9jayBudW1iZXIgKi8KKwlCbG9ja051bWJlciBwcmV2 UGFnZTsJCS8qIGxlYWYgcGFnZSdzIGxlZnQgc2libGluZyAqLworCUJsb2NrTnVtYmVyIG5leHRQ YWdlOwkJLyogbGVhZiBwYWdlJ3MgcmlnaHQgc2libGluZyAqLworCWJvb2wJCW1vcmVMZWZ0OwkJ LyogbW9yZSBwYWdlcyBvZiBpbnRlcmVzdCB0byB0aGUgbGVmdD8gKi8KKwlib29sCQltb3JlUmln aHQ7CQkvKiBtb3JlIHBhZ2VzIG9mIGludGVyZXN0IHRvIHRoZSByaWdodD8gKi8KK30gQlRCYXRj aERhdGE7CisKKy8qIEFjY2VzcyB0aGUgYnRyZWUtcHJpdmF0ZSBwZXItYmF0Y2ggZGF0YSBmcm9t IGFuIEluZGV4U2NhbkJhdGNoIHBvaW50ZXIgKi8KKyNkZWZpbmUgQlRCYXRjaEdldERhdGEoc2Nh biwgYmF0Y2gpIFwKKwlpbmRleGFtX3V0aWxfYmF0Y2hfZ2V0X2FtZGF0YShzY2FuLCBiYXRjaCwg QlRCYXRjaERhdGEpCisKKy8qCisgKiBCVFNjYW5PcGFxdWVEYXRhIGlzIHRoZSBidHJlZS1wcml2 YXRlIHN0YXRlIG5lZWRlZCBmb3IgYW4gaW5kZXhzY2FuLgorICogVGhpcyBjb25zaXN0cyBvZiBw cmVwcm9jZXNzZWQgc2NhbiBrZXlzIChzZWUgX2J0X3ByZXByb2Nlc3Nfa2V5cygpIGZvcgorICog ZGV0YWlscyBvZiB0aGUgcHJlcHJvY2Vzc2luZyksIGFuZCBpbmZvcm1hdGlvbiBhYm91dCB0aGUg Y3VycmVudCBhcnJheQorICoga2V5cy4gIFRoZXJlIGFyZSBhc3N1bXB0aW9ucyBhYm91dCBob3cg dGhlIGN1cnJlbnQgYXJyYXkga2V5cyB0cmFjayB0aGUKKyAqIHByb2dyZXNzIG9mIHRoZSBpbmRl eCBzY2FuIHRocm91Z2ggdGhlIGluZGV4J3Mga2V5IHNwYWNlIChzZWUgX2J0X3JlYWRwYWdlLAor ICogYnRwb3NyZXNldCwgYW5kIF9idF9hZHZhbmNlX2FycmF5X2tleXMpLCBidXQgd2UgZG9uJ3Qg dHJhY2sgYW55dGhpbmcgYWJvdXQKKyAqIHRoZSBjdXJyZW50IHNjYW4gcG9zaXRpb24vYmF0Y2gg aW4gdGhpcyBvcGFxdWUgc3RydWN0LgorICoKKyAqIEluZGV4IHNjYW5zIHdvcmsgYSBwYWdlIGF0 IGEgdGltZSwgYXMgcmVxdWlyZWQgYnkgdGhlIGFtZ2V0YmF0Y2ggY29udHJhY3Q6CisgKiB3ZSBw aW4gYW5kIHJlYWQtbG9jayB0aGUgcGFnZSwgaWRlbnRpZnkgYWxsIHRoZSBtYXRjaGluZyBpdGVt cyBvbiB0aGUgcGFnZQorICogYW5kIHJldHVybiB0aGVtIGluIGEgbmV3bHkgYWxsb2NhdGVkIGJh dGNoLiAgV2UgdGhlbiByZWxlYXNlIHRoZSByZWFkLWxvY2sKKyAqIHVzaW5nIGFtZ2V0YmF0Y2gg dXRpbGl0eSByb3V0aW5lcy4gIFRoaXMgYXBwcm9hY2ggbWluaW1pemVzIGxvY2svdW5sb2NrCisg KiB0cmFmZmljLiAgX2J0X25leHQgaXMgcGFzc2VkIHByaW9yYmF0Y2gsIHdoaWNoIGhhcyBhIEJU QmF0Y2hEYXRhIGFyZWEgdGhhdAorICogdGVsbHMgdXMgd2hpY2ggcGFnZSBpcyBuZXh0IGluIGxp bmUgdG8gYmUgcmVhZCBpbiB0aGUgZ2l2ZW4gc2NhbiBkaXJlY3Rpb24KKyAqICh0aGlzIGlzIG9m dGVuIHRoZSBzYW1lIHByaW9yYmF0Y2ggcGFzc2VkIHRvIGJ0Z2V0YmF0Y2ggYnkgY29yZSBjb2Rl KS4KKyAqCisgKiBJZiB3ZSBhcmUgZG9pbmcgYW4gaW5kZXgtb25seSBzY2FuLCB3ZSBzYXZlIHRo ZSBlbnRpcmUgSW5kZXhUdXBsZSBmb3IgZWFjaAorICogbWF0Y2hlZCBpdGVtLCBvdGhlcndpc2Ug b25seSBpdHMgdGFibGUgVElEIGFuZCBvZmZzZXQuICBQb3N0aW5nIGxpc3QgdHVwbGVzCisgKiBz dG9yZSBhICJiYXNlIiB0dXBsZSBvbmNlLCBhbGxvd2luZyB0aGUgc2FtZSBrZXkgdG8gYmUgdXNl ZCBmb3IgZWFjaCBUSUQgaW4KKyAqIHRoZSBwb3N0aW5nIGxpc3QuCisgKi8KIHR5cGVkZWYgc3Ry dWN0IEJUU2Nhbk9wYXF1ZURhdGEKIHsKIAkvKiB0aGVzZSBmaWVsZHMgYXJlIHNldCBieSBfYnRf cHJlcHJvY2Vzc19rZXlzKCk6ICovCkBAIC0xMDY2LDMyICs5OTgsNiBAQCB0eXBlZGVmIHN0cnVj dCBCVFNjYW5PcGFxdWVEYXRhCiAJQlRBcnJheUtleUluZm8gKmFycmF5S2V5czsJLyogaW5mbyBh Ym91dCBlYWNoIGVxdWFsaXR5LXR5cGUgYXJyYXkga2V5ICovCiAJRm1nckluZm8gICAqb3JkZXJQ cm9jczsJCS8qIE9SREVSIHByb2NzIGZvciByZXF1aXJlZCBlcXVhbGl0eSBrZXlzICovCiAJTWVt b3J5Q29udGV4dCBhcnJheUNvbnRleHQ7IC8qIHNjYW4tbGlmZXNwYW4gY29udGV4dCBmb3IgYXJy YXkgZGF0YSAqLwotCi0JLyogaW5mbyBhYm91dCBraWxsZWQgaXRlbXMgaWYgYW55IChraWxsZWRJ dGVtcyBpcyBOVUxMIGlmIG5ldmVyIHVzZWQpICovCi0JaW50CQkgICAqa2lsbGVkSXRlbXM7CS8q IGN1cnJQb3MuaXRlbXMgaW5kZXhlcyBvZiBraWxsZWQgaXRlbXMgKi8KLQlpbnQJCQludW1LaWxs ZWQ7CQkvKiBudW1iZXIgb2YgY3VycmVudGx5IHN0b3JlZCBpdGVtcyAqLwotCWJvb2wJCWRyb3BQ aW47CQkvKiBkcm9wIGxlYWYgcGluIGJlZm9yZSBidGdldHR1cGxlIHJldHVybnM/ICovCi0KLQkv KgotCSAqIElmIHdlIGFyZSBkb2luZyBhbiBpbmRleC1vbmx5IHNjYW4sIHRoZXNlIGFyZSB0aGUg dHVwbGUgc3RvcmFnZQotCSAqIHdvcmtzcGFjZXMgZm9yIHRoZSBjdXJyUG9zIGFuZCBtYXJrUG9z IHJlc3BlY3RpdmVseS4gIEVhY2ggaXMgb2Ygc2l6ZQotCSAqIEJMQ0tTWiwgc28gaXQgY2FuIGhv bGQgYXMgbXVjaCBhcyBhIGZ1bGwgcGFnZSdzIHdvcnRoIG9mIHR1cGxlcy4KLQkgKi8KLQljaGFy CSAgICpjdXJyVHVwbGVzOwkJLyogdHVwbGUgc3RvcmFnZSBmb3IgY3VyclBvcyAqLwotCWNoYXIJ ICAgKm1hcmtUdXBsZXM7CQkvKiB0dXBsZSBzdG9yYWdlIGZvciBtYXJrUG9zICovCi0KLQkvKgot CSAqIElmIHRoZSBtYXJrZWQgcG9zaXRpb24gaXMgb24gdGhlIHNhbWUgcGFnZSBhcyBjdXJyZW50 IHBvc2l0aW9uLCB3ZQotCSAqIGRvbid0IHVzZSBtYXJrUG9zLCBidXQganVzdCBrZWVwIHRoZSBt YXJrZWQgaXRlbUluZGV4IGluIG1hcmtJdGVtSW5kZXgKLQkgKiAoYWxsIHRoZSByZXN0IG9mIGN1 cnJQb3MgaXMgdmFsaWQgZm9yIHRoZSBtYXJrIHBvc2l0aW9uKS4gSGVuY2UsIHRvCi0JICogZGV0 ZXJtaW5lIGlmIHRoZXJlIGlzIGEgbWFyaywgZmlyc3QgbG9vayBhdCBtYXJrSXRlbUluZGV4LCB0 aGVuIGF0Ci0JICogbWFya1Bvcy4KLQkgKi8KLQlpbnQJCQltYXJrSXRlbUluZGV4OwkvKiBpdGVt SW5kZXgsIG9yIC0xIGlmIG5vdCB2YWxpZCAqLwotCi0JLyoga2VlcCB0aGVzZSBsYXN0IGluIHN0 cnVjdCBmb3IgZWZmaWNpZW5jeSAqLwotCUJUU2NhblBvc0RhdGEgY3VyclBvczsJCS8qIGN1cnJl bnQgcG9zaXRpb24gZGF0YSAqLwotCUJUU2NhblBvc0RhdGEgbWFya1BvczsJCS8qIG1hcmtlZCBw b3NpdGlvbiwgaWYgYW55ICovCiB9IEJUU2Nhbk9wYXF1ZURhdGE7CiAKIHR5cGVkZWYgQlRTY2Fu T3BhcXVlRGF0YSAqQlRTY2FuT3BhcXVlOwpAQCAtMTE2MCwxNCArMTA2NiwxNyBAQCBleHRlcm4g Ym9vbCBidGluc2VydChSZWxhdGlvbiByZWwsIERhdHVtICp2YWx1ZXMsIGJvb2wgKmlzbnVsbCwK IGV4dGVybiBJbmRleFNjYW5EZXNjIGJ0YmVnaW5zY2FuKFJlbGF0aW9uIHJlbCwgaW50IG5rZXlz LCBpbnQgbm9yZGVyYnlzKTsKIGV4dGVybiBTaXplIGJ0ZXN0aW1hdGVwYXJhbGxlbHNjYW4oUmVs YXRpb24gcmVsLCBpbnQgbmtleXMsIGludCBub3JkZXJieXMpOwogZXh0ZXJuIHZvaWQgYnRpbml0 cGFyYWxsZWxzY2FuKHZvaWQgKnRhcmdldCk7Ci1leHRlcm4gYm9vbCBidGdldHR1cGxlKEluZGV4 U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpOworZXh0ZXJuIEluZGV4U2NhbkJhdGNo IGJ0Z2V0YmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkgSW5kZXhTY2FuQmF0Y2gg cHJpb3JiYXRjaCwKKwkJCQkJCQkJIFNjYW5EaXJlY3Rpb24gZGlyKTsKIGV4dGVybiBpbnQ2NCBi dGdldGJpdG1hcChJbmRleFNjYW5EZXNjIHNjYW4sIFRJREJpdG1hcCAqdGJtKTsKIGV4dGVybiB2 b2lkIGJ0cmVzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbktleSBzY2Fua2V5LCBpbnQgbnNj YW5rZXlzLAogCQkJCQkgU2NhbktleSBvcmRlcmJ5cywgaW50IG5vcmRlcmJ5cyk7CitleHRlcm4g dm9pZCBidHVuZ3VhcmRiYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJh dGNoKTsKK2V4dGVybiB2b2lkIGJ0a2lsbGl0ZW1zYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJ bmRleFNjYW5CYXRjaCBiYXRjaCk7CiBleHRlcm4gdm9pZCBidHBhcmFsbGVscmVzY2FuKEluZGV4 U2NhbkRlc2Mgc2Nhbik7CiBleHRlcm4gdm9pZCBidGVuZHNjYW4oSW5kZXhTY2FuRGVzYyBzY2Fu KTsKLWV4dGVybiB2b2lkIGJ0bWFya3BvcyhJbmRleFNjYW5EZXNjIHNjYW4pOwotZXh0ZXJuIHZv aWQgYnRyZXN0cnBvcyhJbmRleFNjYW5EZXNjIHNjYW4pOworZXh0ZXJuIHZvaWQgYnRwb3NyZXNl dChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKIGV4dGVybiBJbmRl eEJ1bGtEZWxldGVSZXN1bHQgKmJ0YnVsa2RlbGV0ZShJbmRleFZhY3V1bUluZm8gKmluZm8sCiAJ CQkJCQkJCQkJICAgSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICpzdGF0cywKIAkJCQkJCQkJCQkgICBJ bmRleEJ1bGtEZWxldGVDYWxsYmFjayBjYWxsYmFjaywKQEAgLTEyNzEsOCArMTE4MCw5IEBAIGV4 dGVybiB2b2lkIF9idF9wcmVwcm9jZXNzX2tleXMoSW5kZXhTY2FuRGVzYyBzY2FuKTsKIC8qCiAg KiBwcm90b3R5cGVzIGZvciBmdW5jdGlvbnMgaW4gbmJ0cmVhZHBhZ2UuYwogICovCi1leHRlcm4g Ym9vbCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwK LQkJCQkJCSBPZmZzZXROdW1iZXIgb2ZmbnVtLCBib29sIGZpcnN0cGFnZSk7CitleHRlcm4gYm9v bCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBuZXdiYXRj aCwKKwkJCQkJCSBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKKwkJCQkJ CSBib29sIGZpcnN0cGFnZSk7CiBleHRlcm4gdm9pZCBfYnRfc3RhcnRfYXJyYXlfa2V5cyhJbmRl eFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsKIGV4dGVybiBpbnQJX2J0X2JpbnNy Y2hfYXJyYXlfc2tleShGbWdySW5mbyAqb3JkZXJwcm9jLAogCQkJCQkJCQkgICBib29sIGN1cl9l bGVtX3RyaWcsIFNjYW5EaXJlY3Rpb24gZGlyLApAQCAtMTI4NywxNSArMTE5NywxNSBAQCBleHRl cm4gQlRTdGFjayBfYnRfc2VhcmNoKFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcHJlbCwgQlRT Y2FuSW5zZXJ0IGtleSwKIAkJCQkJCSAgQnVmZmVyICpidWZQLCBpbnQgYWNjZXNzLCBib29sIHJl dHVybnN0YWNrKTsKIGV4dGVybiBPZmZzZXROdW1iZXIgX2J0X2JpbnNyY2hfaW5zZXJ0KFJlbGF0 aW9uIHJlbCwgQlRJbnNlcnRTdGF0ZSBpbnNlcnRzdGF0ZSk7CiBleHRlcm4gaW50MzIgX2J0X2Nv bXBhcmUoUmVsYXRpb24gcmVsLCBCVFNjYW5JbnNlcnQga2V5LCBQYWdlIHBhZ2UsIE9mZnNldE51 bWJlciBvZmZudW0pOwotZXh0ZXJuIGJvb2wgX2J0X2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2Nhbiwg U2NhbkRpcmVjdGlvbiBkaXIpOwotZXh0ZXJuIGJvb2wgX2J0X25leHQoSW5kZXhTY2FuRGVzYyBz Y2FuLCBTY2FuRGlyZWN0aW9uIGRpcik7CitleHRlcm4gSW5kZXhTY2FuQmF0Y2ggX2J0X2ZpcnN0 KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpOworZXh0ZXJuIEluZGV4U2Nh bkJhdGNoIF9idF9uZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsCisJ CQkJCQkJICAgSW5kZXhTY2FuQmF0Y2ggcHJpb3JiYXRjaCk7CiBleHRlcm4gQnVmZmVyIF9idF9n ZXRfZW5kcG9pbnQoUmVsYXRpb24gcmVsLCB1aW50MzIgbGV2ZWwsIGJvb2wgcmlnaHRtb3N0KTsK IAogLyoKICAqIHByb3RvdHlwZXMgZm9yIGZ1bmN0aW9ucyBpbiBuYnR1dGlscy5jCiAgKi8KIGV4 dGVybiBCVFNjYW5JbnNlcnQgX2J0X21rc2NhbmtleShSZWxhdGlvbiByZWwsIEluZGV4VHVwbGUg aXR1cCk7Ci1leHRlcm4gdm9pZCBfYnRfa2lsbGl0ZW1zKEluZGV4U2NhbkRlc2Mgc2Nhbik7CiBl eHRlcm4gQlRDeWNsZUlkIF9idF92YWN1dW1fY3ljbGVpZChSZWxhdGlvbiByZWwpOwogZXh0ZXJu IEJUQ3ljbGVJZCBfYnRfc3RhcnRfdmFjdXVtKFJlbGF0aW9uIHJlbCk7CiBleHRlcm4gdm9pZCBf YnRfZW5kX3ZhY3V1bShSZWxhdGlvbiByZWwpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNj ZXNzL3JlbHNjYW4uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmgKaW5kZXggOTg2YjRm NWYzLi4zY2M1NzhlM2MgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmgK KysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaApAQCAtMTI2LDYgKzEyNiwxMiBAQCB0 eXBlZGVmIHN0cnVjdCBQYXJhbGxlbEJsb2NrVGFibGVTY2FuV29ya2VyRGF0YSAqUGFyYWxsZWxC bG9ja1RhYmxlU2NhbldvcmtlcjsKICAqLwogdHlwZWRlZiBzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxl RGF0YQogeworCS8qIFRhYmxlIEFNIGZpeGVkLXNpemUgb3BhcXVlIGFyZWEgc2l6ZSwgc2V0IGJ5 IEFNIChNQVhBTElHTidkKSAqLworCXVpbnQxNgkJYmF0Y2hfb3BhcXVlX3NpemU7CisKKwkvKiBQ ZXItaXRlbSB0cmFpbGluZyBkYXRhIHNpemUgaW4gZWFjaCBiYXRjaCAoZm9yIGluZGV4LW9ubHkg c2NhbnMpICovCisJdWludDE2CQliYXRjaF9wZXJfaXRlbV9zaXplOworCiAJLyoKIAkgKiBCaXRt YXNrIG9mIFNjYW5PcHRpb25zIGFmZmVjdGluZyB0aGUgcmVsYXRpb24uIE5vIFNPX0lOVEVSTkFM X0ZMQUdTIGFyZQogCSAqIHBlcm1pdHRlZC4KQEAgLTEzMywxMyArMTM5LDE4NCBAQCB0eXBlZGVm IHN0cnVjdCBJbmRleEZldGNoVGFibGVEYXRhCiAJdWludDMyCQlmbGFnczsKIH0gSW5kZXhGZXRj aFRhYmxlRGF0YTsKIAorLyoKKyAqIExvY2F0aW9uIG9mIGEgQmF0Y2hNYXRjaGluZ0l0ZW0gd2l0 aGluIHRoZSBzY2FuJ3MgcmluZyBidWZmZXIKKyAqLwordHlwZWRlZiBzdHJ1Y3QgQmF0Y2hSaW5n SXRlbVBvcworeworCS8qIFBvc2l0aW9uIHJlZmVyZW5jZXMgYSB2YWxpZCBJbmRleFNjYW5EZXNj RGF0YS5iYXRjaGJ1ZltdIGVudHJ5PyAqLworCWJvb2wJCXZhbGlkOworCisJLyogSW5kZXhTY2Fu RGVzY0RhdGEuYmF0Y2hidWZbXS13aXNlIGluZGV4IHRvIHJlbGV2YW50IEluZGV4U2NhbkJhdGNo ICovCisJdWludDgJCWJhdGNoOworCisJLyogSW5kZXhTY2FuQmF0Y2guaXRlbXNbXS13aXNlIGlu ZGV4IHRvIHJlbGV2YW50IEJhdGNoTWF0Y2hpbmdJdGVtICovCisJaW50CQkJaXRlbTsKKworfSBC YXRjaFJpbmdJdGVtUG9zOworCisvKgorICogTWF0Y2hpbmcgaXRlbSByZXR1cm5lZCBieSBhbWdl dGJhdGNoIChpbiByZXR1cm5lZCBJbmRleFNjYW5CYXRjaCkgZHVyaW5nIGFuCisgKiBpbmRleCBz Y2FuLiAgVXNlZCBieSB0YWJsZSBBTSB0byBsb2NhdGUgcmVsZXZhbnQgbWF0Y2hpbmcgdGFibGUg dHVwbGUuCisgKi8KK3R5cGVkZWYgc3RydWN0IEJhdGNoTWF0Y2hpbmdJdGVtCit7CisJSXRlbVBv aW50ZXJEYXRhIHRhYmxlVGlkOwkvKiBUSUQgb2YgcmVmZXJlbmNlZCB0YWJsZSBpdGVtICovCisJ T2Zmc2V0TnVtYmVyIGluZGV4T2Zmc2V0OwkvKiBpbmRleCBpdGVtJ3MgbG9jYXRpb24gd2l0aGlu IHBhZ2UgKi8KKwlMb2NhdGlvbkluZGV4IHR1cGxlT2Zmc2V0OwkvKiBpbmRleCB0dXBsZSdzIGN1 cnJUdXBsZXMgb2Zmc2V0LCBpZiBhbnkgKi8KK30gQmF0Y2hNYXRjaGluZ0l0ZW07CisKKy8qCisg KiBEYXRhIGFib3V0IG9uZSBiYXRjaCBvZiBpdGVtcyByZXR1cm5lZCBieSAoYW5kIHBhc3NlZCB0 bykgYW1nZXRiYXRjaCBkdXJpbmcKKyAqIGluZGV4IHNjYW5zLgorICoKKyAqIEVhY2ggYmF0Y2gg YWxsb2NhdGlvbiBoYXMgdGhlIGZvbGxvd2luZyBtZW1vcnkgbGF5b3V0OgorICoKKyAqICAgW3Rh YmxlIEFNIG9wYXF1ZSBhcmVhXSAgICA8LSBhbGxvY2F0aW9uIGJhc2UsIGF0IC0oYmF0Y2hfYmFz ZV9vZmZzZXQpCisgKiAgIFtpbmRleCBBTSBvcGFxdWUgYXJlYV0gICAgPC0gYXQgLShiYXRjaF9p bmRleF9vcGFxdWVfc2l6ZSkKKyAqICAgW0luZGV4U2NhbkJhdGNoRGF0YV0gICAgICA8LSBiYXRj aCBwb2ludGVyLCByZXR1cm5lZCBieSBhbWdldGJhdGNoCisgKiAgIFtpdGVtc1ttYXhpdGVtc2Jh dGNoXV0KKyAqICAgW3RhYmxlIEFNIHRyYWlsaW5nIGRhdGFdICA8LSBwZXItaXRlbSBhcmVhIChl LmcuLCBmb3IgdmlzaWJpbGl0eSBpbmZvKQorICogICBbY3VyclR1cGxlcyB3b3Jrc3BhY2VdICAg IDwtIGluZGV4IEFNIHN0b3JlcyBpbmRleCB0dXBsZXMgaGVyZSBmb3IKKyAqICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbmRleC1vbmx5IHNjYW5zIChiYXRjaF90dXBsZXNfd29ya3Nw YWNlKQorICoKKyAqIGJhdGNoX2Jhc2Vfb2Zmc2V0IGNvbWJpbmVzIGJvdGggQU0gb3BhcXVlIHNp emVzIGludG8gYSBzaW5nbGUgb2Zmc2V0IGZyb20KKyAqIHRoZSBiYXRjaCBwb2ludGVyIHRvIHRo ZSB0cnVlIGFsbG9jYXRpb24gYmFzZS4gIFRoZSBpbmRleGJhdGNoLmMgdXRpbGl0aWVzCisgKiBw ZnJlZSBhIGJhdGNoIGJ5IHBhc3NpbmcgcGZyZWUgYSBwb2ludGVyIHJldHVybmVkIGJ5IGluZGV4 X3NjYW5fYmF0Y2hfYmFzZS4KKyAqIFdlIHJlbHkgb24gdGhlIGFzc3VtcHRpb24gdGhhdCBiYXRj aGVzIGhhdmUgYSBmaXhlZCBsYXlvdXQgZm9yIHRoZSBkdXJhdGlvbgorICogb2YgYW4gaW5kZXgg c2NhbiAoYmF0Y2hlcyBhcmUgY2FjaGVkIGZvciByZXVzZSB0byBhdm9pZCBwYWxsb2MgY2h1cm4p LgorICoKKyAqIFRoZSB0YWJsZSBBTSBjYW4gb3ZlcmxheSBhIHNtYWxsIGZpeGVkLXNpemUgc3Ry dWN0IGF0IHRoZSBzdGFydCBvZiB0aGUKKyAqIGFsbG9jYXRlZCBzcGFjZSwgd2hpY2ggaXQgYWNj ZXNzZXMgdXNpbmcgYSBpbmRleF9zY2FuX2JhdGNoX2Jhc2Ugc2hpbQorICogYWNjZXNzb3IgZnVu Y3Rpb24uICBDb252ZW50aW9uIGZvciB0YWJsZSBBTXMgaXMgdG8gc3RvcmUgYSBwb2ludGVyIHRv IGl0cworICogcGVyLWl0ZW0gYXJlYSBpbiB0aGlzIGZpeGVkLXNpemUgYXJlYSAoZS5nLiwgaGVh cGFtIHN0b3JlcyBhIHZpc0luZm8KKyAqIHBvaW50ZXIgaGVyZSksIGluIGFkZGl0aW9uIHRvIG90 aGVyIGluZm9ybWF0aW9uIHRyYWNrZWQgYXQgdGhlIGJhdGNoIGxldmVsLgorICoKKyAqIFRoZSBp bmRleCBBTSBvcGFxdWUgYXJlYSBpcyBhY2Nlc3NlZCB2aWEgYSBjdXN0b20gYWNjZXNzb3IgdGhh dCB1c2VzIGEKKyAqIGZpeGVkIGNvbXBpbGUtdGltZSBjb25zdGFudCBvZmZzZXQgZm9yIGVmZmlj aWVuY3kgKGEgY29uc3RhbnQgdGhhdCBpcworICogdHJhY2tlZCBpbiB0aGUgc2NhbiBkZXNjcmlw dG9yIGFzIGJhdGNoX2luZGV4X29wYXF1ZV9zaXplKS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgSW5k ZXhTY2FuQmF0Y2hEYXRhCit7CisJLyogSW5kZXggcGFnZSdzIExTTiwgb3B0aW9uYWxseSB1c2Vk IGJ5IGFta2lsbGl0ZW1zYmF0Y2ggcm91dGluZXMgKi8KKwlYTG9nUmVjUHRyCWxzbjsKKworCS8q IHNjYW4gZGlyZWN0aW9uIHdoZW4gdGhlIGluZGV4IHBhZ2Ugd2FzIHJlYWQgKi8KKwlTY2FuRGly ZWN0aW9uIGRpcjsKKworCS8qCisJICoga25vd25FbmRCYWNrd2FyZCBhbmQga25vd25FbmRGb3J3 YXJkIGluZGljYXRlIHRoYXQgdGhpcyBiYXRjaCBpcyB0aGUKKwkgKiBsYXN0IG9uZSB3aXRoIG1h dGNoaW5nIGl0ZW1zIGluIHRoZSByZWxldmFudCBzY2FuIGRpcmVjdGlvbi4gIFdoZW4KKwkgKiBh bWdldGJhdGNoIHJldHVybnMgTlVMTCBmb3IgYSBnaXZlbiBkaXJlY3Rpb24sIHRoZSBjb3JyZXNw b25kaW5nIGZsYWcKKwkgKiBpcyBzZXQgb24gdGhlIHByaW9yYmF0Y2ggdGhhdCB3YXMgcGFzc2Vk IHRvIHRoYXQgY2FsbC4gIFdlIGNhbm5vdCBrbm93CisJICogdGhpcyB3aGVuIGEgYmF0Y2ggaXMg Zmlyc3QgcmV0dXJuZWQgYnkgYW1nZXRiYXRjaDsgaXQgb25seSBiZWNvbWVzCisJICogYXBwYXJl bnQgd2hlbiB3ZSB0cnkgYW5kIGZhaWwgdG8gY29udGludWUgdGhlIHNjYW4gcGFzdCBpdC4KKwkg KgorCSAqIFRoaXMgYWxsb3dzIHRhYmxlIEFNcyB0byBhdm9pZCByZWR1bmRhbnQgYW1nZXRiYXRj aCBjYWxscyB3aXRoIHRoZSBzYW1lCisJICogcHJpb3JiYXRjaCAtLSB0aGUgaW5kZXggQU0gbWln aHQgbmVlZCB0byByZWFkIGFkZGl0aW9uYWwgaW5kZXggcGFnZXMgdG8KKwkgKiBkZXRlcm1pbmUg dGhlcmUgYXJlIG5vIG1vcmUgbWF0Y2hpbmcgaXRlbXMgYmV5b25kIGNhbGxlcidzIHByaW9yYmF0 Y2guCisJICovCisJYm9vbAkJa25vd25FbmRCYWNrd2FyZDsKKwlib29sCQlrbm93bkVuZEZvcndh cmQ7CisKKwkvKgorCSAqIEJhdGNoIHN0aWxsIGhvbGRzIFRJRCByZWN5Y2xpbmcgaW50ZXJsb2Nr PworCSAqLworCWJvb2wJCWlzR3VhcmRlZDsKKworCS8qCisJICogTWF0Y2hpbmcgaXRlbXMgc3Rh dGUgZm9yIHRoaXMgYmF0Y2guICBPdXRwdXQgYnkgaW5kZXggQU0gZm9yIHRhYmxlIEFNLgorCSAq CisJICogVGhlIGl0ZW1zIGFycmF5IGlzIGFsd2F5cyBvcmRlcmVkIGluIGluZGV4IG9yZGVyIChp ZSwgYnkgaW5jcmVhc2luZworCSAqIGluZGV4b2Zmc2V0KS4gIFdoZW4gc2Nhbm5pbmcgYmFja3dh cmRzIGl0IGlzIGNvbnZlbmllbnQgZm9yIGluZGV4IEFNcworCSAqIHRvIGZpbGwgdGhlIGFycmF5 IGJhY2stdG8tZnJvbnQsIHN0YXJ0aW5nIGF0IHRoZSBsYXN0IGl0ZW0gc2xvdCBhbmQKKwkgKiBm aWxsaW5nIGRvd253YXJkcy4gIFRoaXMgaXMgd2h5IHdlIG5lZWQgYm90aCBhIGZpcnN0LXZhbGlk LWVudHJ5IGFuZCBhCisJICogbGFzdC12YWxpZC1lbnRyeSBjb3VudGVyLgorCSAqCisJICogTm90 ZTogdGhlc2UgYXJlIHNpZ25lZCBiZWNhdXNlIGl0J3Mgc29tZXRpbWVzIGNvbnZlbmllbnQgdG8g dXNlIC0xIHRvCisJICogcmVwcmVzZW50IGFuIG91dC1vZi1ib3VuZHMgc3BhY2UganVzdCBiZWZv cmUgZmlyc3RJdGVtICh3aGVuIGl0J3MgMCkuCisJICovCisJaW50CQkJZmlyc3RJdGVtOwkJLyog Zmlyc3QgdmFsaWQgaW5kZXggaW4gaXRlbXNbXSAqLworCWludAkJCWxhc3RJdGVtOwkJLyogbGFz dCB2YWxpZCBpbmRleCBpbiBpdGVtc1tdICovCisKKwkvKiBpbmZvIGFib3V0IGRlYWQgaXRlbXMs IGlmIGFueSAocGFsbG9jJ2Qgc2VwYXJhdGVseSwgTlVMTCBpZiB1bnVzZWQpICovCisJaW50CQkJ bnVtRGVhZDsJCS8qIG51bWJlciBvZiBjdXJyZW50bHkgc3RvcmVkIGl0ZW1zICovCisJaW50CQkg ICAqZGVhZEl0ZW1zOwkJLyogaXRlbXNbXS13aXNlIGluZGV4ZXMgb2YgZGVhZCBpdGVtcyAqLwor CisJLyoKKwkgKiBJZiB3ZSBhcmUgZG9pbmcgYW4gaW5kZXgtb25seSBzY2FuLCB0aGlzIGlzIHRo ZSB0dXBsZSBzdG9yYWdlIHdvcmtzcGFjZQorCSAqIGZvciB0aGUgbWF0Y2hpbmcgdHVwbGVzICh0 dXBsZXMgcmVmZXJlbmNlZCBieSBpdGVtc1tdKS4gIFRoZSB3b3Jrc3BhY2UKKwkgKiBzaXplIGlz IGRldGVybWluZWQgYnkgdGhlIGluZGV4IEFNIChiYXRjaF90dXBsZXNfd29ya3NwYWNlKS4KKwkg KgorCSAqIGN1cnJUdXBsZXMgcG9pbnRzIGludG8gdGhlIHRyYWlsaW5nIHBvcnRpb24gb2YgdGhp cyBhbGxvY2F0aW9uLCBwYXN0CisJICogaXRlbXNbXSBhbmQgYW55IHRhYmxlIEFNIHRyYWlsaW5n IGRhdGEuICBJdCBpcyBOVUxMIGZvciBwbGFpbiBpbmRleAorCSAqIHNjYW5zLgorCSAqLworCWNo YXIJICAgKmN1cnJUdXBsZXM7CQkvKiB0dXBsZSBzdG9yYWdlIGZvciBpdGVtc1tdICovCisJQmF0 Y2hNYXRjaGluZ0l0ZW0gaXRlbXNbRkxFWElCTEVfQVJSQVlfTUVNQkVSXTsgLyogbWF0Y2hpbmcg aXRlbXMgKi8KK30gSW5kZXhTY2FuQmF0Y2hEYXRhOworCit0eXBlZGVmIHN0cnVjdCBJbmRleFNj YW5CYXRjaERhdGEgKkluZGV4U2NhbkJhdGNoOworCisvKgorICogU3RhdGUgdXNlZCBieSB0YWJs ZSBBTXMgdG8gbWFuYWdlIGFuIGluZGV4IHNjYW4gdGhhdCB1c2VzIHRoZSBhbWdldGJhdGNoCisg KiBpbnRlcmZhY2UuICBTY2FucyB1c2UgYSByaW5nIGJ1ZmZlciBvZiBiYXRjaGVzIHJldHVybmVk IGJ5IGFtZ2V0YmF0Y2guCisgKgorICogVGhpcyBkYXRhIHN0cnVjdHVyZSBwcm92aWRlcyB0YWJs ZSBBTXMgd2l0aCBhIHdheSB0byByZWFkIGFoZWFkIG9mIHRoZQorICogY3VycmVudCByZWFkIHBv c2l0aW9uIGJ5IF9tdWx0aXBsZV8gYmF0Y2hlcy9pbmRleCBwYWdlcy4gIFRoZSBmdXJ0aGVyIG91 dAorICogdGhlIHRhYmxlIEFNIHJlYWRzIGFoZWFkIGxpa2UgdGhpcywgdGhlIGZ1cnRoZXIgaXQg Y2FuIHNlZSBpbnRvIHRoZSBmdXR1cmUuCisgKiBUaGF0IHdheSB0aGUgdGFibGUgQU0gaXMgYWJs ZSB0byByZW9yZGVyIHdvcmsgYXMgYWdncmVzc2l2ZWx5IGFzIGRlc2lyZWQuCisgKi8KK3R5cGVk ZWYgc3RydWN0IEJhdGNoUmluZ0J1ZmZlcgoreworCS8qIGN1cnJlbnQgcG9zaXRpb25zIGluIElu ZGV4U2NhbkRlc2NEYXRhLmJhdGNoYnVmW10gZm9yIHNjYW4gKi8KKwlCYXRjaFJpbmdJdGVtUG9z IHNjYW5Qb3M7CS8qIHNjYW4ncyByZWFkIHBvc2l0aW9uICovCisJQmF0Y2hSaW5nSXRlbVBvcyBt YXJrUG9zOwkvKiBtYXJrL3Jlc3RvcmUgcG9zaXRpb24gKi8KKworCS8qIG1hcmtQb3MncyBiYXRj aCAobm90IGluIHJpbmcgYnVmZmVyIHdoZW4gbWFya0JhdGNoICE9IHNjYW5CYXRjaCkgKi8KKwlJ bmRleFNjYW5CYXRjaCBtYXJrQmF0Y2g7CisKKwkvKgorCSAqIGhlYWRCYXRjaCBpcyBhbiBpbmRl eCB0byB0aGUgZWFybGllc3Qgc3RpbGwtdmFsaWQgcmluZyBidWZmZXIgYmF0Y2gKKwkgKiBzbG90 IGluIGJhdGNoYnVmW10uICBUaGUgYWN0dWFsIGFycmF5IHBvc2l0aW9uIGZvciBpdHMgSW5kZXhT Y2FuQmF0Y2gKKwkgKiBpcyBoZWFkQmF0Y2ggJiAoSU5ERVhfU0NBTl9NQVhfQkFUQ0hFUyAtIDEp LCBzaW5jZSB0aGVzZSBpbmRleGVzIHVzZQorCSAqIHVuc2lnbmVkIHdyYXBwaW5nIGFyaXRobWV0 aWMuICBoZWFkQmF0Y2ggbXVzdCBiZSB0aGUgc2NhbidzIGN1cnJlbnQKKwkgKiBzY2FuQmF0Y2gg KGkuZS4gdGhlIGN1cnJlbnQgc2NhblBvcyBiYXRjaCkuCisJICovCisJdWludDgJCWhlYWRCYXRj aDsKKworCS8qCisJICogbmV4dEJhdGNoIGlzIGFuIGluZGV4IHRvIHRoZSBuZXh0IF9lbXB0eV8g cmluZyBidWZmZXIgYmF0Y2ggc2xvdCBpbgorCSAqIGJhdGNoYnVmW10uICBBcyB3aXRoIGhlYWRC YXRjaCwgdGhlIGFjdHVhbCBiYXRjaGJ1ZltdIGFycmF5IHBvc2l0aW9uIGlzCisJICogbmV4dEJh dGNoICYgKElOREVYX1NDQU5fTUFYX0JBVENIRVMgLSAxKS4gIEEgbmV3IGJhdGNoIGNhbiBvbmx5 IGJlCisJICogYXBwZW5kZWQgdG8gdGhpcyBwb3NpdGlvbi9zbG90IHdoZW4gIWluZGV4X3NjYW5f YmF0Y2hfZnVsbCgpLgorCSAqCisJICogTm90ZTogdGhlIHNjYW4ncyBtb3N0IHJlY2VudGx5IGFw cGVuZGVkIGJhdGNoIChpdHMgdGFpbCBiYXRjaCkgaXMKKwkgKiBhbHdheXMgbG9jYXRlZCBhdCAo bmV4dEJhdGNoIC0gMSkgJiAoSU5ERVhfU0NBTl9NQVhfQkFUQ0hFUyAtIDEpLgorCSAqLworCXVp bnQ4CQluZXh0QmF0Y2g7Cit9IEJhdGNoUmluZ0J1ZmZlcjsKKwogc3RydWN0IEluZGV4U2Nhbklu c3RydW1lbnRhdGlvbjsKIAogLyoKICAqIFdlIHVzZSB0aGUgc2FtZSBJbmRleFNjYW5EZXNjRGF0 YSBzdHJ1Y3R1cmUgZm9yIGJvdGggYW1nZXR0dXBsZS1iYXNlZAogICogYW5kIGFtZ2V0Yml0bWFw LWJhc2VkIGluZGV4IHNjYW5zLiAgU29tZSBmaWVsZHMgYXJlIG9ubHkgcmVsZXZhbnQgaW4KLSAq IGFtZ2V0dHVwbGUtYmFzZWQgc2NhbnMuCisgKiBhbWdldHR1cGxlLWJhc2VkIHNjYW5zLiAgT3Ro ZXJzIGFyZSBvbmx5IHVzZWQgaW4gYW1nZXRiYXRjaC1iYXNlZCBzY2Fucy4KKyAqCisgKiBUaGUg cmluZyBidWZmZXIgdXNlZCBieSBhbWdldGJhdGNoIHNjYW5zIGlzIHN0b3JlZCBoZXJlIGFzIGEg Zml4ZWQgYXJyYXkgb2YKKyAqIHBvaW50ZXJzIHRvIGJhdGNoZXMuICBXZSBuZWVkIGEgbWluaW11 bSBvZiB0d28gcmluZyBidWZmZXIgYmF0Y2hlcyAoYnV0IHVzZQorICogSU5ERVhfU0NBTl9NQVhf QkFUQ0hFUyksIHNpbmNlIHRhYmxlIEFNcyBvbmx5IHJlbW92ZSBhIGJhdGNoIGFmdGVyIHRoZXkn dmUKKyAqIGFscmVhZHkgY2FsbGVkIGFtZ2V0YmF0Y2ggYWdhaW4gYW5kIGFwcGVuZGVkIHRoZSBy ZXR1cm5lZCBiYXRjaC4KICAqLworI2RlZmluZSBJTkRFWF9TQ0FOX0NBQ0hFX0JBVENIRVMJMgor I2RlZmluZSBJTkRFWF9TQ0FOX01BWF9CQVRDSEVTCQk2NAorCitTdGF0aWNBc3NlcnREZWNsKElO REVYX1NDQU5fTUFYX0JBVENIRVMgPD0gUEdfSU5UOF9NQVggKyAxLAorCQkJCSAiaW5kZXhfc2Nh bl9iYXRjaF9sb2FkZWQgcmVsaWVzIG9uIGludDggcmluZyBidWZmZXIgYXJpdGhtZXRpYyIpOwor U3RhdGljQXNzZXJ0RGVjbCgoSU5ERVhfU0NBTl9NQVhfQkFUQ0hFUyAmIChJTkRFWF9TQ0FOX01B WF9CQVRDSEVTIC0gMSkpID09IDAsCisJCQkJICJJTkRFWF9TQ0FOX01BWF9CQVRDSEVTIG11c3Qg YmUgYSBwb3dlciBvZiAyIik7CisKIHR5cGVkZWYgc3RydWN0IEluZGV4U2NhbkRlc2NEYXRhCiB7 CiAJLyogc2NhbiBwYXJhbWV0ZXJzICovCkBAIC0xNTAsNiArMzI3LDI2IEBAIHR5cGVkZWYgc3Ry dWN0IEluZGV4U2NhbkRlc2NEYXRhCiAJaW50CQkJbnVtYmVyT2ZPcmRlckJ5czsJLyogbnVtYmVy IG9mIG9yZGVyaW5nIG9wZXJhdG9ycyAqLwogCXN0cnVjdCBTY2FuS2V5RGF0YSAqa2V5RGF0YTsJ LyogYXJyYXkgb2YgaW5kZXggcXVhbGlmaWVyIGRlc2NyaXB0b3JzICovCiAJc3RydWN0IFNjYW5L ZXlEYXRhICpvcmRlckJ5RGF0YTsJLyogYXJyYXkgb2Ygb3JkZXJpbmcgb3AgZGVzY3JpcHRvcnMg Ki8KKworCS8qIGluZGV4IGFjY2VzcyBtZXRob2QncyBwcml2YXRlIHN0YXRlICovCisJdm9pZAkg ICAqb3BhcXVlOwkJCS8qIGFjY2Vzcy1tZXRob2Qtc3BlY2lmaWMgaW5mbyAqLworCisJLyogc2Nh bidzIGFtZ2V0YmF0Y2ggc3RhdGUgKG9ubHkgdXNlZCBieSBhbWdldGJhdGNoL3VzZWJhdGNocmlu ZyBzY2FucykgKi8KKwlCYXRjaFJpbmdCdWZmZXIgYmF0Y2hyaW5nYnVmOworCisJLyoKKwkgKiBB cnJheSBvZiBwb2ludGVycyB0byByZWN5Y2xhYmxlIGJhdGNoZXMsIHVzZWQgYnkgYWxsIGFtZ2V0 YmF0Y2ggc2NhbnMKKwkgKiBhbmQgYnkgYW1nZXRiaXRtYXAgc2NhbnMgb2YgYW4gaW5kZXggQU0g dGhhdCBzdXBwb3J0cyBhbWdldGJhdGNoCisJICovCisJSW5kZXhTY2FuQmF0Y2ggYmF0Y2hjYWNo ZVtJTkRFWF9TQ0FOX0NBQ0hFX0JBVENIRVNdOworCisJLyogQXJyYXkgb2YgcG9pbnRlcnMgdG8g YmF0Y2hlcywgcmVmZXJlbmNlZCB3aXRoaW4gYmF0Y2hyaW5nYnVmICovCisJSW5kZXhTY2FuQmF0 Y2ggYmF0Y2hidWZbSU5ERVhfU0NBTl9NQVhfQkFUQ0hFU107CisKKwlib29sCQl1c2ViYXRjaHJp bmc7CS8qIHNjYW4gdXNlcyBhbWdldGJhdGNoL2JhdGNocmluZ2J1Zj8gKi8KKwlib29sCQliYXRj aEltbWVkaWF0ZVVuZ3VhcmQ7CS8qIGVhZ2VybHkgZHJvcCBUSUQgcmVjeWNsaW5nCisJCQkJCQkJ CQkJICogaW50ZXJsb2NrPyAqLworCiAJYm9vbAkJeHNfd2FudF9pdHVwOwkvKiBjYWxsZXIgcmVx dWVzdHMgaW5kZXggdHVwbGVzICovCiAJYm9vbAkJeHNfdGVtcF9zbmFwOwkvKiB1bnJlZ2lzdGVy IHNuYXBzaG90IGF0IHNjYW4gZW5kPyAqLwogCkBAIC0xNTgsOSArMzU1LDggQEAgdHlwZWRlZiBz dHJ1Y3QgSW5kZXhTY2FuRGVzY0RhdGEKIAlib29sCQlpZ25vcmVfa2lsbGVkX3R1cGxlczsJLyog ZG8gbm90IHJldHVybiBraWxsZWQgZW50cmllcyAqLwogCWJvb2wJCXhhY3RTdGFydGVkSW5SZWNv dmVyeTsJLyogcHJldmVudHMga2lsbGluZy9zZWVpbmcga2lsbGVkCiAJCQkJCQkJCQkJICogdHVw bGVzICovCi0KLQkvKiBpbmRleCBhY2Nlc3MgbWV0aG9kJ3MgcHJpdmF0ZSBzdGF0ZSAqLwotCXZv aWQJICAgKm9wYXF1ZTsJCQkvKiBhY2Nlc3MtbWV0aG9kLXNwZWNpZmljIGluZm8gKi8KKwkvKiB4 c19zbmFwc2hvdCB1c2VzIGFuIE1WQ0Mgc25hcHNob3Q/ICovCisJYm9vbAkJTVZDQ1NjYW47CiAK IAkvKgogCSAqIEluc3RydW1lbnRhdGlvbiBjb3VudGVycyBtYWludGFpbmVkIGJ5IGFsbCBpbmRl eCBBTXMgZHVyaW5nIGJvdGgKQEAgLTE4Niw3ICszODIsNyBAQCB0eXBlZGVmIHN0cnVjdCBJbmRl eFNjYW5EZXNjRGF0YQogCiAJLyoKIAkgKiBSZXNvbHZlZCB0YWJsZV9pbmRleF9nZXRuZXh0X3Ns b3QgY2FsbGJhY2ssIHdoaWNoIGlzIHNldCBieQotCSAqIHRhYmxlX2luZGV4X2ZldGNoX2JlZ2lu IGF0IHRoZSBzdGFydCBvZiBhbWdldHR1cGxlIHNjYW5zCisJICogdGFibGVfaW5kZXhfZmV0Y2hf YmVnaW4gYXQgdGhlIHN0YXJ0IG9mIGFtZ2V0YmF0Y2gvYW1nZXR0dXBsZSBzY2FucwogCSAqLwog CWJvb2wJCSgqeHNfZ2V0bmV4dF9zbG90KSAoc3RydWN0IEluZGV4U2NhbkRlc2NEYXRhICpzY2Fu LAogCQkJCQkJCQkJU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCkBAIC0xOTQsNiArMzkwLDE0IEBA IHR5cGVkZWYgc3RydWN0IEluZGV4U2NhbkRlc2NEYXRhCiAKIAlib29sCQl4c19yZWNoZWNrOwkJ LyogVCBtZWFucyBzY2FuIGtleXMgbXVzdCBiZSByZWNoZWNrZWQgKi8KIAorCS8qIGJhdGNoIHNp emUgaW5mb3JtYXRpb24sIHNldCBvbmNlIGJ5IGluZGV4IEFNIGluIGFtYmVnaW5zY2FuICovCisJ dWludDE2CQltYXhpdGVtc2JhdGNoOwkvKiBzaXplIG9mIGVhY2ggYmF0Y2gncyBpdGVtc1tdIGFy cmF5ICovCisJdWludDE2CQliYXRjaF9pbmRleF9vcGFxdWVfc2l6ZTsJLyogTUFYQUxJR04nZCBp bmRleCBBTSBvcGFxdWUgc2l6ZSAqLworCXVpbnQxNgkJYmF0Y2hfdHVwbGVzX3dvcmtzcGFjZTsg LyogY3VyclR1cGxlcyB3b3Jrc3BhY2Ugc2l6ZSAqLworCisJLyogT2Zmc2V0IHVzZWQgYnkgaW5k ZXhfc2Nhbl9iYXRjaF9iYXNlIChjb21wdXRlZCBsYXppbHkpICovCisJdWludDE2CQliYXRjaF9i YXNlX29mZnNldDsKKwogCS8qCiAJICogV2hlbiBmZXRjaGluZyB3aXRoIGFuIG9yZGVyaW5nIG9w ZXJhdG9yLCB0aGUgdmFsdWVzIG9mIHRoZSBPUkRFUiBCWQogCSAqIGV4cHJlc3Npb25zIG9mIHRo ZSBsYXN0IHJldHVybmVkIHR1cGxlLCBhY2NvcmRpbmcgdG8gdGhlIGluZGV4LiAgSWYKQEAgLTIz Nyw0ICs0NDEsMTU0IEBAIHR5cGVkZWYgc3RydWN0IFN5c1NjYW5EZXNjRGF0YQogCXN0cnVjdCBU dXBsZVRhYmxlU2xvdCAqc2xvdDsKIH0gU3lzU2NhbkRlc2NEYXRhOwogCisvKgorICogSG93IG1h bnkgYmF0Y2hlcyBhcmUgY3VycmVudGx5IGxvYWRlZCBpbiB0aGUgcmluZyBidWZmZXI/CisgKi8K K3N0YXRpYyBpbmxpbmUgdWludDgKK2luZGV4X3NjYW5fYmF0Y2hfY291bnQoSW5kZXhTY2FuRGVz Y0RhdGEgKnNjYW4pCit7CisJcmV0dXJuICh1aW50OCkgKHNjYW4tPmJhdGNocmluZ2J1Zi5uZXh0 QmF0Y2ggLQorCQkJCQlzY2FuLT5iYXRjaHJpbmdidWYuaGVhZEJhdGNoKTsKK30KKworLyoKKyAq IERvIHdlIGFscmVhZHkgaGF2ZSBhIGJhdGNoIGxvYWRlZCBhdCAnaWR4JyBvZmZzZXQgaW4gc2Nh bidzIHJpbmcgYnVmZmVyPworICoKKyAqIE5PVEU6IGEgc3RhbGUgYmF0Y2ggaWR4IGNhbiBhbGlh cyBhIGN1cnJlbnRseS1sb2FkZWQgcmFuZ2UgZHVlIHRvCisgKiB3cmFwYXJvdW5kLCBwcm9kdWNp bmcgYSBmYWxzZSBwb3NpdGl2ZS4gIEZhbHNlIG5lZ2F0aXZlcyBhcmUgbm90IHBvc3NpYmxlLgor ICovCitzdGF0aWMgaW5saW5lIGJvb2wKK2luZGV4X3NjYW5fYmF0Y2hfbG9hZGVkKEluZGV4U2Nh bkRlc2NEYXRhICpzY2FuLCB1aW50OCBpZHgpCit7CisJcmV0dXJuIChpbnQ4KSAoaWR4IC0gc2Nh bi0+YmF0Y2hyaW5nYnVmLmhlYWRCYXRjaCkgPj0gMCAmJgorCQkoaW50OCkgKGlkeCAtIHNjYW4t PmJhdGNocmluZ2J1Zi5uZXh0QmF0Y2gpIDwgMDsKK30KKworLyoKKyAqIEhhdmUgd2UgbG9hZGVk IHRoZSBtYXhpbXVtIG51bWJlciBvZiBiYXRjaGVzPworICovCitzdGF0aWMgaW5saW5lIGJvb2wK K2luZGV4X3NjYW5fYmF0Y2hfZnVsbChJbmRleFNjYW5EZXNjRGF0YSAqc2NhbikKK3sKKwlyZXR1 cm4gaW5kZXhfc2Nhbl9iYXRjaF9jb3VudChzY2FuKSA9PSBJTkRFWF9TQ0FOX01BWF9CQVRDSEVT OworfQorCisvKgorICogUmV0dXJuIGJhdGNoIGZvciB0aGUgcHJvdmlkZWQgaW5kZXguCisgKi8K K3N0YXRpYyBpbmxpbmUgSW5kZXhTY2FuQmF0Y2gKK2luZGV4X3NjYW5fYmF0Y2goSW5kZXhTY2Fu RGVzY0RhdGEgKnNjYW4sIHVpbnQ4IGlkeCkKK3sKKwlBc3NlcnQoaW5kZXhfc2Nhbl9iYXRjaF9s b2FkZWQoc2NhbiwgaWR4KSk7CisKKwlyZXR1cm4gc2Nhbi0+YmF0Y2hidWZbaWR4ICYgKElOREVY X1NDQU5fTUFYX0JBVENIRVMgLSAxKV07Cit9CisKKy8qCisgKiBBcHBlbmQgZ2l2ZW4gYmF0Y2gg dG8gc2NhbidzIGJhdGNoIHJpbmcgYnVmZmVyLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK2lu ZGV4X3NjYW5fYmF0Y2hfYXBwZW5kKEluZGV4U2NhbkRlc2NEYXRhICpzY2FuLCBJbmRleFNjYW5C YXRjaCBiYXRjaCkKK3sKKwlCYXRjaFJpbmdCdWZmZXIgKnJpbmdidWYgPSAmc2Nhbi0+YmF0Y2hy aW5nYnVmOworCXVpbnQ4CQluZXh0QmF0Y2ggPSByaW5nYnVmLT5uZXh0QmF0Y2g7CisKKwlBc3Nl cnQoIWluZGV4X3NjYW5fYmF0Y2hfZnVsbChzY2FuKSk7CisKKwlzY2FuLT5iYXRjaGJ1ZltuZXh0 QmF0Y2ggJiAoSU5ERVhfU0NBTl9NQVhfQkFUQ0hFUyAtIDEpXSA9IGJhdGNoOworCXJpbmdidWYt Pm5leHRCYXRjaCsrOworfQorCisvKgorICogUmV0dXJuIHRoZSB0cnVlIGFsbG9jYXRpb24gYmFz ZSBvZiBhIGJhdGNoICh1c2VkIHRvIHBmcmVlIGJhdGNoZXMpCisgKi8KK3N0YXRpYyBpbmxpbmUg dm9pZCAqCitpbmRleF9zY2FuX2JhdGNoX2Jhc2UoSW5kZXhTY2FuRGVzY0RhdGEgKnNjYW4sIElu ZGV4U2NhbkJhdGNoIGJhdGNoKQoreworCUFzc2VydChzY2FuLT5iYXRjaF9iYXNlX29mZnNldCA+ IDApOworCisJcmV0dXJuIChjaGFyICopIGJhdGNoIC0gc2Nhbi0+YmF0Y2hfYmFzZV9vZmZzZXQ7 Cit9CisKKy8qCisgKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBmaXhlZC1zaXplIHRhYmxlIEFN IG9wYXF1ZSBhcmVhLgorICoKKyAqIE5vdGU6IHRoaXMgc2hvdWxkbid0IGJlIGNvbmZ1c2VkIHdp dGggdGhlIHZhcmlhYmxlLXNpemVkIHRhYmxlIEFNIHRyYWlsaW5nCisgKiBkYXRhIGFyZWEuCisg Ki8KK3N0YXRpYyBpbmxpbmUgdm9pZCAqCitpbmRleF9zY2FuX2JhdGNoX3RhYmxlX2FyZWEoSW5k ZXhTY2FuRGVzY0RhdGEgKnNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKQoreworCS8qCisJICog VGhlIHRhYmxlIEFNIG9wYXF1ZSBhcmVhIGlzIGFsd2F5cyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRo ZSBiYXRjaCdzCisJICogYWxsb2NhdGVkIHNwYWNlCisJICovCisJcmV0dXJuIGluZGV4X3NjYW5f YmF0Y2hfYmFzZShzY2FuLCBiYXRjaCk7Cit9CisKKworLyoKKyAqIEFkdmFuY2UgcG9zaXRpb24g dG8gaXRzIG5leHQgaXRlbSBpbiB0aGUgYmF0Y2guCisgKgorICogQWR2YW5jZSB0byB0aGUgbmV4 dCBpdGVtIHdpdGhpbiB0aGUgcHJvdmlkZWQgYmF0Y2ggKG9yIHRvIHRoZSBwcmV2aW91cyBpdGVt LAorICogd2hlbiBzY2FubmluZyBiYWNrd2FyZHMpLgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0 aGUgcG9zaXRpb24gY291bGQgYmUgYWR2YW5jZWQuICBSZXR1cm5zIGZhbHNlIHdoZW4gdGhlcmUK KyAqIGFyZSBubyBtb3JlIGl0ZW1zIGZyb20gdGhlIGJhdGNoIHJlbWFpbmluZyBpbiB0aGUgZ2l2 ZW4gc2NhbiBkaXJlY3Rpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbAoraW5kZXhfc2Nhbl9w b3NfYWR2YW5jZShTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQkJICAgSW5kZXhTY2FuQmF0 Y2ggYmF0Y2gsIEJhdGNoUmluZ0l0ZW1Qb3MgKnBvcykKK3sKKwlBc3NlcnQocG9zLT52YWxpZCk7 CisKKwlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXJlY3Rpb24pKQorCXsKKwkJaWYgKCsr cG9zLT5pdGVtID4gYmF0Y2gtPmxhc3RJdGVtKQorCQkJcmV0dXJuIGZhbHNlOworCX0KKwllbHNl CQkJCQkJLyogU2NhbkRpcmVjdGlvbklzQmFja3dhcmQgKi8KKwl7CisJCWlmICgtLXBvcy0+aXRl bSA8IGJhdGNoLT5maXJzdEl0ZW0pCisJCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyogQWR2YW5j ZWQgd2l0aGluIGJhdGNoICovCisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBBZHZhbmNlIGJh dGNoIHBvc2l0aW9uIHRvIHRoZSBzdGFydCBvZiBpdHMgbmV3IGJhdGNoLgorICoKKyAqIFdoZW4g d2UncmUgY2FsbGVkLCB0aGlzIHBvc2l0aW9uIHNob3VsZCBwb2ludCB0byBhIGJhdGNoIHRoYXQg Y2FsbGVyIGp1c3QKKyAqIGZpbmlzaGVkIGNvbnN1bWluZyBmcm9tLiAgV2hlbiB3ZSByZXR1cm4s IHRoaXMgcG9zaXRpb24gd2lsbCBwb2ludCB0bworICogbmV4dEJhdGNoLCB0aGUgbmV4dCBiYXRj aCBmcm9tIHRoZSByaW5nIGJ1ZmZlci4gIFdlJ2xsIGhhdmUgYWxzbyBzZXQgdGhlCisgKiBwb3Np dGlvbidzIGl0ZW0gb2Zmc2V0IHRvIG5leHRCYXRjaCdzIGZpcnN0IGl0ZW0gaW4gdGhlIGdpdmVu IGRpcmVjdGlvbgorICogKHdoaWNoIGlzIGFjdHVhbGx5IG5leHRCYXRjaCdzIF9sYXN0XyBpdGVt IHdoZW4gc2Nhbm5pbmcgYmFja3dhcmRzKS4KKyAqCisgKiBuZXh0QmF0Y2ggZG9lc24ndCBoYXZl IHRvIGJlIChhbmQgb2Z0ZW4gaXNuJ3QpIHRoZSBtb3N0IHJlY2VudGx5IGFwcGVuZGVkCisgKiBi YXRjaCBpbiB0aGUgc2NhbidzIHJpbmcgYnVmZmVyLiAgSXQgaXMgbWVyZWx5IHRoZSBuZXh0IGJh dGNoIGluIGxpbmUgdG8gYmUKKyAqIGNvbnN1bWVkIGZyb20gdGhlIHBvaW50IG9mIHZpZXcgb2Yg b3VyIGNhbGxlci4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCitpbmRleF9zY2FuX3Bvc19uZXh0 YmF0Y2goU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJCQkgSW5kZXhTY2FuQmF0Y2ggbmV4 dEJhdGNoLCBCYXRjaFJpbmdJdGVtUG9zICpwb3MpCit7CisJQXNzZXJ0KG5leHRCYXRjaC0+ZGly ID09IGRpcmVjdGlvbik7CisJQXNzZXJ0KG5leHRCYXRjaC0+Zmlyc3RJdGVtIDw9IG5leHRCYXRj aC0+bGFzdEl0ZW0pOworCisJLyogSW5jcmVtZW50IGJhdGNoIChtaWdodCB3cmFwKSwgb3IgaW5p dGlhbGl6ZSBpdCB0byB6ZXJvICovCisJaWYgKHBvcy0+dmFsaWQpCisJCXBvcy0+YmF0Y2grKzsK KwllbHNlCisJCXBvcy0+YmF0Y2ggPSAwOworCisJcG9zLT52YWxpZCA9IHRydWU7CisKKwlpZiAo U2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXJlY3Rpb24pKQorCQlwb3MtPml0ZW0gPSBuZXh0QmF0 Y2gtPmZpcnN0SXRlbTsKKwllbHNlCisJCXBvcy0+aXRlbSA9IG5leHRCYXRjaC0+bGFzdEl0ZW07 Cit9CisKICNlbmRpZgkJCQkJCQkvKiBSRUxTQ0FOX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL2FjY2Vzcy90YWJsZWFtLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oCmluZGV4 IDYyMDE2ZmQwYi4uODgwZTgwY2NlIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFi bGVhbS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgKQEAgLTQ1MiwxMCArNDUy LDExIEBAIHR5cGVkZWYgc3RydWN0IFRhYmxlQW1Sb3V0aW5lCiAJICogZmxhZ3MgaXMgYSBiaXRt YXNrIG9mIFNjYW5PcHRpb25zIGFmZmVjdGluZyB1bmRlcmx5aW5nIHRhYmxlIHNjYW4KIAkgKiBi ZWhhdmlvci4gU2VlIHNjYW5fYmVnaW4oKSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBwYXNzaW5n IHRoZXNlLgogCSAqCi0JICogQ2FsbGJhY2sgaXMgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgSW5k ZXhTY2FuRGVzYy54c19nZXRuZXh0X3Nsb3QgdG8KLQkgKiB0aGUgYXBwcm9wcmlhdGUgc2xvdC1i YXNlZCBjYWxsYmFjay4gIFR1cGxlcyBjYW4gdGhlbiBiZSBmZXRjaGVkIHZpYQotCSAqIHRhYmxl X2luZGV4X2dldG5leHRfc2xvdCgpLiAgTm8gc2VwYXJhdGUgc2xvdC1iYXNlZCBjYWxsYmFjayBl eGlzdHMgaW4KLQkgKiB0aGlzIHN0cnVjdCEKKwkgKiBDYWxsYmFjayBpcyByZXNwb25zaWJsZSBm b3IgaW5pdGlhbGl6aW5nIHRoZSBzY2FuJ3MgYmF0Y2ggcmluZyBidWZmZXIKKwkgKiAod2hlbiB0 aGUgc2NhbidzIGluZGV4IEFNIHN1cHBvcnRzIHRoZSBhbWdldGJhdGNoIGludGVyZmFjZSksIGFu ZCBmb3IKKwkgKiBzZXR0aW5nIEluZGV4U2NhbkRlc2MueHNfZ2V0bmV4dF9zbG90IHRvIHRoZSBh cHByb3ByaWF0ZSBzbG90LWJhc2VkCisJICogY2FsbGJhY2suICBUdXBsZXMgY2FuIHRoZW4gYmUg ZmV0Y2hlZCB2aWEgdGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90KCkuCisJICogTm8gc2VwYXJhdGUg c2xvdC1iYXNlZCBjYWxsYmFjayBleGlzdHMgaW4gdGhpcyBzdHJ1Y3QhCiAJICoKIAkgKiBJbiBw cmluY2lwbGUgYSBzaW5nbGUgZ2VuZXJhbC1wdXJwb3NlIGNhbGxiYWNrIChzdG9yZWQgaGVyZSkg d291bGQKIAkgKiBzdWZmaWNlLCBidXQgdXNpbmcgc3BlY2lhbGl6ZWQgdmFyaWFudHMgYWxsb3dz IHRoZSB0YWJsZSBBTSB0byBwcm92aWRlCkBAIC00NjcsMTAgKzQ2OCwzMSBAQCB0eXBlZGVmIHN0 cnVjdCBUYWJsZUFtUm91dGluZQogCSAqIGNvbHVtbnMgZG8gbm90IGNoYW5nZSwgbmVlZCB0byBy ZXR1cm4gdGhlIGN1cnJlbnQvY29ycmVjdCB2ZXJzaW9uIG9mCiAJICogdGhlIHR1cGxlIHRoYXQg aXMgdmlzaWJsZSB0byB0aGUgc25hcHNob3QsIGV2ZW4gaWYgdGhlIHRpZCBwb2ludHMgdG8gYW4K IAkgKiBvbGRlciB2ZXJzaW9uIG9mIHRoZSB0dXBsZS4KKwkgKgorCSAqIENhbGxiYWNrIGFsc28g aW5pdGlhbGl6ZXMgdGhlIGJhdGNoX29wYXF1ZV9zaXplIGFuZCBiYXRjaF9wZXJfaXRlbV9zaXpl CisJICogZmllbGRzIGluIHRoZSByZXR1cm5lZCBzdHJ1Y3QsIHRvIGxldCB0aGUgY29yZSBjb2Rl IGtub3cgaG93IG11Y2gKKwkgKiBtZW1vcnkgd2lsbCBiZSByZXF1aXJlZCBpbiB0aGUgb3BhcXVl IHRhYmxlIEFNIHBvcnRpb25zIG9mIGVhY2ggYmF0Y2gKKwkgKiBhbGxvY2F0aW9uIChkdXJpbmcg YW1nZXRiYXRjaCBpbmRleCBzY2FucykuICBUYWJsZSBBTXMgY2FuIHN0b3JlIHRoaW5ncworCSAq IGxpa2UgcGVyLWl0ZW0gdmlzaWJpbGl0eSBpbmZvcm1hdGlvbiBpbiBlYWNoIGFsbG9jYXRlZCBi YXRjaC4gIFNlZQorCSAqIHJlbHNjYW4uaCBmb3IgZGV0YWlscy4KIAkgKi8KIAlzdHJ1Y3QgSW5k ZXhGZXRjaFRhYmxlRGF0YSAqKCppbmRleF9mZXRjaF9iZWdpbikgKEluZGV4U2NhbkRlc2Mgc2Nh biwKIAkJCQkJCQkJCQkJCQkgIHVpbnQzMiBmbGFncyk7CiAKKwkvKgorCSAqIEluaXRpYWxpemUg dGFibGUgQU0ncyBwZXItYmF0Y2ggb3BhcXVlIGFyZWEgd2l0aGluIGEgYmF0Y2ggYWxsb2NhdGlv bi4KKwkgKgorCSAqIENhbGxlZCBieSBpbmRleGFtX3V0aWxfYWxsb2NfYmF0Y2ggZm9yIGVhY2gg bmV3IG9yIHJlY3ljbGVkIGJhdGNoLgorCSAqIFRhYmxlIEFNcyBzaG91bGQgc2V0IHVwIGl0cyBv cGFxdWUgYXJlYSAoYXQgYSBuZWdhdGl2ZSBvZmZzZXQgZnJvbSB0aGUKKwkgKiBiYXRjaCBwb2lu dGVyKSBhbmQgYW55IHRyYWlsaW5nIHBlci1pdGVtIGRhdGEgKGUuZy4gdmlzaWJpbGl0eSBmbGFn cykuCisJICoKKwkgKiAnbmV3X2FsbG9jJyBpcyB0cnVlIGZvciBmcmVzaGx5IHBhbGxvYydkIGJh dGNoZXMsIGZhbHNlIGZvciBiYXRjaGVzCisJICogcmVjeWNsZWQgZnJvbSB0aGUgY2FjaGUuCisJ ICovCisJdm9pZAkJKCppbmRleF9mZXRjaF9iYXRjaF9pbml0KSAoSW5kZXhTY2FuRGVzYyBzY2Fu LAorCQkJCQkJCQkJCSAgIEluZGV4U2NhbkJhdGNoIGJhdGNoLAorCQkJCQkJCQkJCSAgIGJvb2wg bmV3X2FsbG9jKTsKKwogCS8qCiAJICogUmVzZXQgaW5kZXggc2NhbiBmb3IgYSByZXNjYW4uICBS ZXNldHMgdGFibGUtb3duZWQgcmVzb3VyY2VzLgogCSAqLwpAQCAtNDgxLDYgKzUwMywxNiBAQCB0 eXBlZGVmIHN0cnVjdCBUYWJsZUFtUm91dGluZQogCSAqLwogCXZvaWQJCSgqaW5kZXhfZmV0Y2hf ZW5kKSAoSW5kZXhTY2FuRGVzYyBzY2FuKTsKIAorCS8qCisJICogTWFyayB0aGUgY3VycmVudCBz Y2FuIHBvc2l0aW9uIHNvIGl0IGNhbiBiZSByZXN0b3JlZCBsYXRlcgorCSAqLworCXZvaWQJCSgq aW5kZXhfZmV0Y2hfbWFya3BvcykgKEluZGV4U2NhbkRlc2Mgc2Nhbik7CisKKwkvKgorCSAqIFJl c3RvcmUgYSBwcmV2aW91c2x5IG1hcmtlZCBzY2FuIHBvc2l0aW9uCisJICovCisJdm9pZAkJKCpp bmRleF9mZXRjaF9yZXN0cnBvcykgKEluZGV4U2NhbkRlc2Mgc2Nhbik7CisKIAkvKiAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KIAkgKiBDYWxsYmFja3MgZm9yIG5vbi1tb2RpZnlpbmcgb3BlcmF0aW9ucyBvbiBp bmRpdmlkdWFsIHR1cGxlcwogCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTI3Myw2ICsxMzA1LDI4 IEBAIHRhYmxlX2luZGV4X2ZldGNoX3Jlc2V0KEluZGV4U2NhbkRlc2Mgc2NhbikKIAlzY2FuLT5o ZWFwUmVsYXRpb24tPnJkX3RhYmxlYW0tPmluZGV4X2ZldGNoX3Jlc2V0KHNjYW4pOwogfQogCisv KgorICogTWFyayB0aGUgY3VycmVudCBzY2FuIHBvc2l0aW9uIHNvIGl0IGNhbiBiZSByZXN0b3Jl ZCBsYXRlcgorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK3RhYmxlX2luZGV4X2ZldGNoX21hcmtw b3MoSW5kZXhTY2FuRGVzYyBzY2FuKQoreworCUFzc2VydChzY2FuLT54c19oZWFwZmV0Y2gpOwor CisJc2Nhbi0+aGVhcFJlbGF0aW9uLT5yZF90YWJsZWFtLT5pbmRleF9mZXRjaF9tYXJrcG9zKHNj YW4pOworfQorCisvKgorICogUmVzdG9yZSBhIHByZXZpb3VzbHkgbWFya2VkIHNjYW4gcG9zaXRp b24KKyAqLworc3RhdGljIGlubGluZSB2b2lkCit0YWJsZV9pbmRleF9mZXRjaF9yZXN0cnBvcyhJ bmRleFNjYW5EZXNjIHNjYW4pCit7CisJQXNzZXJ0KHNjYW4tPnhzX2hlYXBmZXRjaCk7CisKKwlz Y2FuLT5oZWFwUmVsYXRpb24tPnJkX3RhYmxlYW0tPmluZGV4X2ZldGNoX3Jlc3RycG9zKHNjYW4p OworfQorCiAvKgogICogUmVsZWFzZSByZXNvdXJjZXMgYW5kIGRlYWxsb2NhdGUgdGhlIEluZGV4 RmV0Y2hUYWJsZURhdGEgaW4gdGhlIHNjYW4uCiAgKi8KQEAgLTEyODQsNiArMTMzOCwyMSBAQCB0 YWJsZV9pbmRleF9mZXRjaF9lbmQoSW5kZXhTY2FuRGVzYyBzY2FuKQogCXNjYW4tPmhlYXBSZWxh dGlvbi0+cmRfdGFibGVhbS0+aW5kZXhfZmV0Y2hfZW5kKHNjYW4pOwogfQogCisvKgorICogSW5p dGlhbGl6ZSB0YWJsZSBBTSdzIHBlci1iYXRjaCBvcGFxdWUgYXJlYSB3aXRoaW4gYSBiYXRjaCBh bGxvY2F0aW9uLgorICoKKyAqIENhbGxlZCBieSBpbmRleGFtX3V0aWxfYWxsb2NfYmF0Y2ggZm9y IGVhY2ggbmV3IG9yIHJlY3ljbGVkIGJhdGNoLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK3Rh YmxlX2luZGV4X2ZldGNoX2JhdGNoX2luaXQoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5C YXRjaCBiYXRjaCwKKwkJCQkJCQkgYm9vbCBuZXdfYWxsb2MpCit7CisJQXNzZXJ0KHNjYW4tPnhz X2hlYXBmZXRjaCk7CisKKwlzY2FuLT5oZWFwUmVsYXRpb24tPnJkX3RhYmxlYW0tPmluZGV4X2Zl dGNoX2JhdGNoX2luaXQoc2NhbiwgYmF0Y2gsCisJCQkJCQkJCQkJCQkJCSAgIG5ld19hbGxvYyk7 Cit9CisKIC8qCiAgKiBGZXRjaCB0aGUgbmV4dCB0dXBsZSBmcm9tIGFuIGluZGV4IHNjYW4gaW50 byBgc2xvdGAsIHNjYW5uaW5nIGluIHRoZQogICogc3BlY2lmaWVkIGRpcmVjdGlvbi4gIFJldHVy bnMgdHJ1ZSBpZiBhIHR1cGxlIHNhdGlzZnlpbmcgdGhlIHNjYW4ga2V5cyBhbmQKZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0 aG5vZGVzLmgKaW5kZXggNjkzYjg3OWY3Li44NTk5MWQ0NDcgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL25vZGVzL3BhdGhub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5o CkBAIC0xNDM3LDEyICsxNDM3LDEyIEBAIHR5cGVkZWYgc3RydWN0IEluZGV4T3B0SW5mbwogCWJv b2wJCWFtb3B0aW9uYWxrZXk7CiAJYm9vbAkJYW1zZWFyY2hhcnJheTsKIAlib29sCQlhbXNlYXJj aG51bGxzOwotCS8qIGRvZXMgQU0gaGF2ZSBhbWdldHR1cGxlIGludGVyZmFjZT8gKi8KLQlib29s CQlhbWhhc2dldHR1cGxlOworCS8qIGRvZXMgQU0gaGF2ZSBhbWdldGJhdGNoIChvciBnZXR0dXBs ZSkgaW50ZXJmYWNlPyAqLworCWJvb2wJCWFtY2FucGxhaW5zY2FuOwogCS8qIGRvZXMgQU0gaGF2 ZSBhbWdldGJpdG1hcCBpbnRlcmZhY2U/ICovCiAJYm9vbAkJYW1oYXNnZXRiaXRtYXA7CiAJYm9v bAkJYW1jYW5wYXJhbGxlbDsKLQkvKiBkb2VzIEFNIGhhdmUgYW1tYXJrcG9zIGludGVyZmFjZT8g Ki8KKwkvKiBpcyBBTSBwcmVwYXJlZCBmb3IgdXMgdG8gcmVzdG9yZSBhIG1hcms/ICovCiAJYm9v bAkJYW1jYW5tYXJrcG9zOwogCS8qIEFNJ3MgY29zdCBlc3RpbWF0b3IgKi8KIAkvKiBSYXRoZXIg dGhhbiBpbmNsdWRlIGFtYXBpLmggaGVyZSwgd2UgZGVjbGFyZSBhbWNvc3Rlc3RpbWF0ZSBsaWtl IHRoaXMgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW4uYyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW4uYwppbmRleCBiZGIzMDc1MmUuLjlmNDRjZjMxZSAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jCisrKyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9icmluL2JyaW4uYwpAQCAtMjk4LDEwICsyOTgsMTIgQEAgYnJpbmhhbmRsZXIo UEdfRlVOQ1RJT05fQVJHUykKIAkJLmFtYmVnaW5zY2FuID0gYnJpbmJlZ2luc2NhbiwKIAkJLmFt cmVzY2FuID0gYnJpbnJlc2NhbiwKIAkJLmFtZ2V0dHVwbGUgPSBOVUxMLAorCQkuYW1nZXRiYXRj aCA9IE5VTEwsCisJCS5hbXVuZ3VhcmRiYXRjaCA9IE5VTEwsCisJCS5hbWtpbGxpdGVtc2JhdGNo ID0gTlVMTCwKIAkJLmFtZ2V0Yml0bWFwID0gYnJpbmdldGJpdG1hcCwKIAkJLmFtZW5kc2NhbiA9 IGJyaW5lbmRzY2FuLAotCQkuYW1tYXJrcG9zID0gTlVMTCwKLQkJLmFtcmVzdHJwb3MgPSBOVUxM LAorCQkuYW1wb3NyZXNldCA9IE5VTEwsCiAJCS5hbWVzdGltYXRlcGFyYWxsZWxzY2FuID0gTlVM TCwKIAkJLmFtaW5pdHBhcmFsbGVsc2NhbiA9IE5VTEwsCiAJCS5hbXBhcmFsbGVscmVzY2FuID0g TlVMTCwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2luZ2V0LmMgYi9zcmMv YmFja2VuZC9hY2Nlc3MvZ2luL2dpbmdldC5jCmluZGV4IDZiMTQ4ZTY5YS4uOGY3MDMzZDYyIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbmdldC5jCisrKyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9naW4vZ2luZ2V0LmMKQEAgLTE5NTMsOSArMTk1Myw5IEBAIGdpbmdldGJpdG1h cChJbmRleFNjYW5EZXNjIHNjYW4sIFRJREJpdG1hcCAqdGJtKQogCSAqIGludG8gdGhlIG1haW4g aW5kZXgsIGFuZCBzbyB3ZSBtaWdodCB2aXNpdCBpdCBhIHNlY29uZCB0aW1lIGR1cmluZyB0aGUK IAkgKiBtYWluIHNjYW4uICBUaGlzIGlzIG9rYXkgYmVjYXVzZSB3ZSdsbCBqdXN0IHJlLXNldCB0 aGUgc2FtZSBiaXQgaW4gdGhlCiAJICogYml0bWFwLiAgKFRoZSBwb3NzaWJpbGl0eSBvZiBkdXBs aWNhdGUgdmlzaXRzIGlzIGEgbWFqb3IgcmVhc29uIHdoeSBHSU4KLQkgKiBjYW4ndCBzdXBwb3J0 IHRoZSBhbWdldHR1cGxlIEFQSSwgaG93ZXZlci4pIE5vdGUgdGhhdCBpdCB3b3VsZCBub3QgZG8K LQkgKiB0byBzY2FuIHRoZSBtYWluIGluZGV4IGJlZm9yZSB0aGUgcGVuZGluZyBsaXN0LCBzaW5j ZSBjb25jdXJyZW50Ci0JICogY2xlYW51cCBjb3VsZCB0aGVuIG1ha2UgdXMgbWlzcyBlbnRyaWVz IGVudGlyZWx5LgorCSAqIGNhbid0IHN1cHBvcnQgZWl0aGVyIHRoZSBhbWdldHR1cGxlIG9yIGFt Z2V0YmF0Y2ggQVBJLikgTm90ZSB0aGF0IGl0CisJICogd291bGQgbm90IGRvIHRvIHNjYW4gdGhl IG1haW4gaW5kZXggYmVmb3JlIHRoZSBwZW5kaW5nIGxpc3QsIHNpbmNlCisJICogY29uY3VycmVu dCBjbGVhbnVwIGNvdWxkIHRoZW4gbWFrZSB1cyBtaXNzIGVudHJpZXMgZW50aXJlbHkuCiAJICov CiAJc2NhblBlbmRpbmdJbnNlcnQoc2NhbiwgdGJtLCAmbnRpZHMpOwogCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbnV0aWwuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4v Z2ludXRpbC5jCmluZGV4IGZlN2I5ODRmZi4uMzI0MjI4NjViIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9hY2Nlc3MvZ2luL2dpbnV0aWwuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dp bnV0aWwuYwpAQCAtODIsMTAgKzgyLDEyIEBAIGdpbmhhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykK IAkJLmFtYmVnaW5zY2FuID0gZ2luYmVnaW5zY2FuLAogCQkuYW1yZXNjYW4gPSBnaW5yZXNjYW4s CiAJCS5hbWdldHR1cGxlID0gTlVMTCwKKwkJLmFtZ2V0YmF0Y2ggPSBOVUxMLAorCQkuYW11bmd1 YXJkYmF0Y2ggPSBOVUxMLAorCQkuYW1raWxsaXRlbXNiYXRjaCA9IE5VTEwsCiAJCS5hbWdldGJp dG1hcCA9IGdpbmdldGJpdG1hcCwKIAkJLmFtZW5kc2NhbiA9IGdpbmVuZHNjYW4sCi0JCS5hbW1h cmtwb3MgPSBOVUxMLAotCQkuYW1yZXN0cnBvcyA9IE5VTEwsCisJCS5hbXBvc3Jlc2V0ID0gTlVM TCwKIAkJLmFtZXN0aW1hdGVwYXJhbGxlbHNjYW4gPSBOVUxMLAogCQkuYW1pbml0cGFyYWxsZWxz Y2FuID0gTlVMTCwKIAkJLmFtcGFyYWxsZWxyZXNjYW4gPSBOVUxMLApkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lz dC5jCmluZGV4IDg1NjVlMjI1Yi4uYTU4YzUyMjJmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9h Y2Nlc3MvZ2lzdC9naXN0LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdC5jCkBA IC0xMDMsMTAgKzEwMywxMiBAQCBnaXN0aGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCQkuYW1i ZWdpbnNjYW4gPSBnaXN0YmVnaW5zY2FuLAogCQkuYW1yZXNjYW4gPSBnaXN0cmVzY2FuLAogCQku YW1nZXR0dXBsZSA9IGdpc3RnZXR0dXBsZSwKKwkJLmFtZ2V0YmF0Y2ggPSBOVUxMLAorCQkuYW11 bmd1YXJkYmF0Y2ggPSBOVUxMLAorCQkuYW1raWxsaXRlbXNiYXRjaCA9IE5VTEwsCiAJCS5hbWdl dGJpdG1hcCA9IGdpc3RnZXRiaXRtYXAsCiAJCS5hbWVuZHNjYW4gPSBnaXN0ZW5kc2NhbiwKLQkJ LmFtbWFya3BvcyA9IE5VTEwsCi0JCS5hbXJlc3RycG9zID0gTlVMTCwKKwkJLmFtcG9zcmVzZXQg PSBOVUxMLAogCQkuYW1lc3RpbWF0ZXBhcmFsbGVsc2NhbiA9IE5VTEwsCiAJCS5hbWluaXRwYXJh bGxlbHNjYW4gPSBOVUxMLAogCQkuYW1wYXJhbGxlbHJlc2NhbiA9IE5VTEwsCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFz aC9oYXNoLmMKaW5kZXggOGQ4Y2QzMGRjLi45YWU5ZjA0NDggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9oYXNoL2hhc2guYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNo LmMKQEAgLTExNCwxMCArMTE0LDEyIEBAIGhhc2hoYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJ CS5hbWJlZ2luc2NhbiA9IGhhc2hiZWdpbnNjYW4sCiAJCS5hbXJlc2NhbiA9IGhhc2hyZXNjYW4s CiAJCS5hbWdldHR1cGxlID0gaGFzaGdldHR1cGxlLAorCQkuYW1nZXRiYXRjaCA9IE5VTEwsCisJ CS5hbXVuZ3VhcmRiYXRjaCA9IE5VTEwsCisJCS5hbWtpbGxpdGVtc2JhdGNoID0gTlVMTCwKIAkJ LmFtZ2V0Yml0bWFwID0gaGFzaGdldGJpdG1hcCwKIAkJLmFtZW5kc2NhbiA9IGhhc2hlbmRzY2Fu LAotCQkuYW1tYXJrcG9zID0gTlVMTCwKLQkJLmFtcmVzdHJwb3MgPSBOVUxMLAorCQkuYW1wb3Ny ZXNldCA9IE5VTEwsCiAJCS5hbWVzdGltYXRlcGFyYWxsZWxzY2FuID0gTlVMTCwKIAkJLmFtaW5p dHBhcmFsbGVsc2NhbiA9IE5VTEwsCiAJCS5hbXBhcmFsbGVscmVzY2FuID0gTlVMTCwKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCmluZGV4IDY1N2FlNDQxNC4uMWY5N2I2 ZTE0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5j CisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKQEAgLTI1NTUs OCArMjU1NSwxMSBAQCBzdGF0aWMgY29uc3QgVGFibGVBbVJvdXRpbmUgaGVhcGFtX21ldGhvZHMg PSB7CiAJLnBhcmFsbGVsc2Nhbl9yZWluaXRpYWxpemUgPSB0YWJsZV9ibG9ja19wYXJhbGxlbHNj YW5fcmVpbml0aWFsaXplLAogCiAJLmluZGV4X2ZldGNoX2JlZ2luID0gaGVhcGFtX2luZGV4X2Zl dGNoX2JlZ2luLAorCS5pbmRleF9mZXRjaF9iYXRjaF9pbml0ID0gaGVhcGFtX2luZGV4X2ZldGNo X2JhdGNoX2luaXQsCiAJLmluZGV4X2ZldGNoX3Jlc2V0ID0gaGVhcGFtX2luZGV4X2ZldGNoX3Jl c2V0LAogCS5pbmRleF9mZXRjaF9lbmQgPSBoZWFwYW1faW5kZXhfZmV0Y2hfZW5kLAorCS5pbmRl eF9mZXRjaF9tYXJrcG9zID0gaGVhcGFtX2luZGV4X2ZldGNoX21hcmtwb3MsCisJLmluZGV4X2Zl dGNoX3Jlc3RycG9zID0gaGVhcGFtX2luZGV4X2ZldGNoX3Jlc3RycG9zLAogCiAJLnR1cGxlX2lu c2VydCA9IGhlYXBhbV90dXBsZV9pbnNlcnQsCiAJLnR1cGxlX2luc2VydF9zcGVjdWxhdGl2ZSA9 IGhlYXBhbV90dXBsZV9pbnNlcnRfc3BlY3VsYXRpdmUsCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvaGVhcC9oZWFwYW1faW5kZXhzY2FuLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVh cC9oZWFwYW1faW5kZXhzY2FuLmMKaW5kZXggZTFiYTE5ZDhhLi44ZDNhZmQwZjMgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9pbmRleHNjYW4uYworKysgYi9zcmMv YmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faW5kZXhzY2FuLmMKQEAgLTE2LDEyICsxNiw0NyBA QAogCiAjaW5jbHVkZSAiYWNjZXNzL2FtYXBpLmgiCiAjaW5jbHVkZSAiYWNjZXNzL2hlYXBhbS5o IgorI2luY2x1ZGUgImFjY2Vzcy9pbmRleGJhdGNoLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3JlbHNj YW4uaCIKICNpbmNsdWRlICJhY2Nlc3MvdmlzaWJpbGl0eW1hcC5oIgogI2luY2x1ZGUgInN0b3Jh Z2UvcHJlZGljYXRlLmgiCiAjaW5jbHVkZSAidXRpbHMvcGdzdGF0X2ludGVybmFsLmgiCiAKIAor LyoKKyAqIFBlci1iYXRjaCBkYXRhIHByaXZhdGUgdG8gdGhlIGhlYXAgdGFibGUgQU0uCisgKgor ICogU3RvcmVkIGF0IGEgbmVnYXRpdmUgb2Zmc2V0IGZyb20gdGhlIEluZGV4U2NhbkJhdGNoIHBv aW50ZXIsIGluIHRoZQorICogZml4ZWQtc2l6ZSB0YWJsZSBBTSBvcGFxdWUgYXJlYSBvZiBlYWNo IGJhdGNoIGFsbG9jYXRpb24uCisgKi8KK3R5cGVkZWYgc3RydWN0IEhlYXBCYXRjaERhdGEKK3sK Kwl1aW50OAkgICAqdmlzSW5mbzsJCS8qIHBlci1pdGVtIHZpc2liaWxpdHkgZmxhZ3MsIG9yIE5V TEwgKi8KK30gSGVhcEJhdGNoRGF0YTsKKworLyoKKyAqIFBlci1pdGVtIHZpc2liaWxpdHkgZmxh Z3Mgc3RvcmVkIGluIEhlYXBCYXRjaERhdGEudmlzSW5mbyBhcnJheQorICovCisjZGVmaW5lIEhF QVBfQkFUQ0hfVklTX0NIRUNLRUQJCTB4MDEJLyogY2hlY2tlZCBpdGVtIGluIFZNPyAqLworI2Rl ZmluZSBIRUFQX0JBVENIX1ZJU19BTExfVklTSUJMRQkweDAyCS8qIGJsb2NrIGlzIGtub3duIGFs bC12aXNpYmxlPyAqLworCitzdGF0aWMgaW5saW5lIEl0ZW1Qb2ludGVyIGhlYXBhbV9pbmRleF9y ZXR1cm5fc2NhbnBvc190aWQoSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJCQkJCQkgIElu ZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4sCisJCQkJCQkJCQkJCQkJCSAgU2NhbkRpcmVjdGlvbiBk aXJlY3Rpb24sCisJCQkJCQkJCQkJCQkJCSAgSW5kZXhTY2FuQmF0Y2ggc2NhbkJhdGNoLAorCQkJ CQkJCQkJCQkJCQkgIEJhdGNoUmluZ0l0ZW1Qb3MgKnNjYW5Qb3MsCisJCQkJCQkJCQkJCQkJCSAg Ym9vbCAqYWxsX3Zpc2libGUpOworc3RhdGljIHZvaWQgaGVhcGFtX2luZGV4X2JhdGNoX3Bvc192 aXNpYmlsaXR5KEluZGV4U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCQkJCQkJICBTY2FuRGlyZWN0aW9u IGRpcmVjdGlvbiwKKwkJCQkJCQkJCQkJICBJbmRleFNjYW5CYXRjaCBiYXRjaCwKKwkJCQkJCQkJ CQkJICBIZWFwQmF0Y2hEYXRhICpoYmF0Y2gsCisJCQkJCQkJCQkJCSAgQmF0Y2hSaW5nSXRlbVBv cyAqcG9zKTsKK3N0YXRpYyBib29sIGhlYXBhbV9pbmRleF9wbGFpbl9iYXRjaF9nZXRuZXh0X3Ns b3QoSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJCQkJICBTY2FuRGlyZWN0aW9uIGRpcmVj dGlvbiwKKwkJCQkJCQkJCQkJCSAgVHVwbGVUYWJsZVNsb3QgKnNsb3QpOworc3RhdGljIGJvb2wg aGVhcGFtX2luZGV4X29ubHlfYmF0Y2hfZ2V0bmV4dF9zbG90KEluZGV4U2NhbkRlc2Mgc2NhbiwK KwkJCQkJCQkJCQkJCSBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQkJCQkJCQkJCSBUdXBs ZVRhYmxlU2xvdCAqc2xvdCk7CiBzdGF0aWMgYm9vbCBoZWFwYW1faW5kZXhfcGxhaW5fdHVwbGVf Z2V0bmV4dF9zbG90KEluZGV4U2NhbkRlc2Mgc2NhbiwKIAkJCQkJCQkJCQkJCSAgU2NhbkRpcmVj dGlvbiBkaXJlY3Rpb24sCiAJCQkJCQkJCQkJCQkgIFR1cGxlVGFibGVTbG90ICpzbG90KTsKQEAg LTc3LDI2ICsxMTIsOTUgQEAgaGVhcGFtX2luZGV4X2ZldGNoX2JlZ2luKEluZGV4U2NhbkRlc2Mg c2NhbiwgdWludDMyIGZsYWdzKQogewogCUluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4gPSBwYWxs b2MwX29iamVjdChJbmRleEZldGNoSGVhcERhdGEpOwogCi0JaHNjYW4tPnhzX2Jhc2UuZmxhZ3Mg PSBmbGFnczsKLQloc2Nhbi0+eHNfY2J1ZiA9IEludmFsaWRCdWZmZXI7Ci0JaHNjYW4tPnhzX2Js ayA9IEludmFsaWRCbG9ja051bWJlcjsKLQloc2Nhbi0+eHNfdm1idWZmZXIgPSBJbnZhbGlkQnVm ZmVyOworCS8qIEluZGljYXRlIGhvdyBtdWNoIG1lbW9yeSBIZWFwQmF0Y2hEYXRhIHdpbGwgdGFr ZSBmcm9tIGVhY2ggYmF0Y2ggKi8KKwloc2Nhbi0+eHNfYmFzZS5iYXRjaF9vcGFxdWVfc2l6ZSA9 IE1BWEFMSUdOKHNpemVvZihIZWFwQmF0Y2hEYXRhKSk7CisJLyogSW5kaWNhdGUgcGVyLWl0ZW0g dmlzSW5mbyBlbGVtZW50IG92ZXJoZWFkIChmb3IgaW5kZXgtb25seSBzY2FucykgKi8KKwloc2Nh bi0+eHNfYmFzZS5iYXRjaF9wZXJfaXRlbV9zaXplID0gc2l6ZW9mKHVpbnQ4KTsKIAotCS8qIFJl c29sdmUgd2hpY2ggZ2V0bmV4dF9zbG90IGltcGxlbWVudGF0aW9uIHRvIHVzZSBmb3IgdGhpcyBz Y2FuICovCi0JaWYgKHNjYW4tPnhzX3dhbnRfaXR1cCkKLQkJc2Nhbi0+eHNfZ2V0bmV4dF9zbG90 ID0gaGVhcGFtX2luZGV4X29ubHlfdHVwbGVfZ2V0bmV4dF9zbG90OworCWhzY2FuLT54c19iYXNl LmZsYWdzID0gZmxhZ3M7CisKKwkvKiBDdXJyZW50IGhlYXAgYmxvY2sgc3RhdGUgKi8KKwlBc3Nl cnQoaHNjYW4tPnhzX2NidWYgPT0gSW52YWxpZEJ1ZmZlcik7CisJaHNjYW4tPnhzX2JsayA9IElu dmFsaWRCbG9ja051bWJlcjsKKworCS8qIFZNIHJlbGF0ZWQgc3RhdGUgKi8KKwlBc3NlcnQoaHNj YW4tPnhzX3ZtYnVmZmVyID09IEludmFsaWRCdWZmZXIpOworCWhzY2FuLT54c192bV9pdGVtcyA9 IDE7CisKKwkvKiBSZXNvbHZlIHdoaWNoIHhzX2dldG5leHRfc2xvdCBpbXBsZW1lbnRhdGlvbiB0 byB1c2UgZm9yIHRoaXMgc2NhbiAqLworCWlmIChzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRh bS0+YW1nZXRiYXRjaCAhPSBOVUxMKQorCXsKKwkJLyogYW1nZXRiYXRjaCBpbmRleCBBTSAqLwor CQlpZiAoc2Nhbi0+eHNfd2FudF9pdHVwKQorCQkJc2Nhbi0+eHNfZ2V0bmV4dF9zbG90ID0gaGVh cGFtX2luZGV4X29ubHlfYmF0Y2hfZ2V0bmV4dF9zbG90OworCQllbHNlCisJCQlzY2FuLT54c19n ZXRuZXh0X3Nsb3QgPSBoZWFwYW1faW5kZXhfcGxhaW5fYmF0Y2hfZ2V0bmV4dF9zbG90OworCisJ CS8qIFNldCB1cCBzY2FuJ3MgYmF0Y2ggcmluZyBidWZmZXIgaW4gcGFzc2luZyAqLworCQl0YWJs ZWFtX3V0aWxfYmF0Y2hzY2FuX2luaXQoc2Nhbik7CisJfQogCWVsc2UKLQkJc2Nhbi0+eHNfZ2V0 bmV4dF9zbG90ID0gaGVhcGFtX2luZGV4X3BsYWluX3R1cGxlX2dldG5leHRfc2xvdDsKKwl7CisJ CS8qIGFtZ2V0dHVwbGUgaW5kZXggQU0gKi8KKwkJaWYgKHNjYW4tPnhzX3dhbnRfaXR1cCkKKwkJ CXNjYW4tPnhzX2dldG5leHRfc2xvdCA9IGhlYXBhbV9pbmRleF9vbmx5X3R1cGxlX2dldG5leHRf c2xvdDsKKwkJZWxzZQorCQkJc2Nhbi0+eHNfZ2V0bmV4dF9zbG90ID0gaGVhcGFtX2luZGV4X3Bs YWluX3R1cGxlX2dldG5leHRfc2xvdDsKKwl9CiAKIAlyZXR1cm4gJmhzY2FuLT54c19iYXNlOwog fQogCisvKgorICogSW5pdGlhbGl6ZSB0aGUgaGVhcCB0YWJsZSBBTSdzIHBlci1iYXRjaCBvcGFx dWUgYXJlYSAoSGVhcEJhdGNoRGF0YSkuCisgKiBDYWxsZWQgYnkgaW5kZXhhbV91dGlsX2FsbG9j X2JhdGNoIGZvciBlYWNoIG5ldyBvciByZWN5Y2xlZCBiYXRjaC4KKyAqLwordm9pZAoraGVhcGFt X2luZGV4X2ZldGNoX2JhdGNoX2luaXQoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRj aCBiYXRjaCwKKwkJCQkJCQkgIGJvb2wgbmV3X2FsbG9jKQoreworCUhlYXBCYXRjaERhdGEgKmhi YXRjaCA9IGluZGV4X3NjYW5fYmF0Y2hfdGFibGVfYXJlYShzY2FuLCBiYXRjaCk7CisKKwlpZiAo c2Nhbi0+eHNfd2FudF9pdHVwKQorCXsKKwkJaWYgKG5ld19hbGxvYykKKwkJeworCQkJLyoKKwkJ CSAqIFRoZSB2aXNJbmZvIHBvaW50ZXIgaXMgc3RvcmVkIGF0IHRoZSB2ZXJ5IHN0YXJ0IG9mIHRo ZSBwYWxsb2MnZAorCQkJICogc3BhY2UsIGluIHRoZSBmaXhlZC1zaXplZCB0YWJsZSBBTSBvcGFx dWUgYXJlYS4gIHZpc0luZm8gcG9pbnRzCisJCQkgKiB0byBqdXN0IHBhc3QgdGhlIGVuZCBvZiB0 aGUgdmFyaWFibGUtc2l6ZWQgaXRlbXNbbWF4aXRlbXNiYXRjaF0KKwkJCSAqIGFycmF5ICh0byBh IHNwYWNlIHRoYXQgaXMgYWxzbyBzaXplZCBhY2NvcmRpbmcgdG8gd2hhdGV2ZXIgdGhlCisJCQkg KiBpbmRleCBBTSBzZXQgbWF4aXRlbXNiYXRjaCB0bykuCisJCQkgKi8KKwkJCVNpemUJCWl0ZW1z RW5kOworCisJCQlpdGVtc0VuZCA9IE1BWEFMSUdOKG9mZnNldG9mKEluZGV4U2NhbkJhdGNoRGF0 YSwgaXRlbXMpICsKKwkJCQkJCQkJc2l6ZW9mKEJhdGNoTWF0Y2hpbmdJdGVtKSAqIHNjYW4tPm1h eGl0ZW1zYmF0Y2gpOworCQkJaGJhdGNoLT52aXNJbmZvID0gKHVpbnQ4ICopICgoY2hhciAqKSBi YXRjaCArIGl0ZW1zRW5kKTsKKwkJfQorCisJCS8qIENsZWFyIHZpc2liaWxpdHkgZmxhZ3MgKG5l ZWRlZCBmb3IgYm90aCBuZXcgYW5kIHJlY3ljbGVkIGJhdGNoZXMpICovCisJCW1lbXNldChoYmF0 Y2gtPnZpc0luZm8sIDAsIHNjYW4tPm1heGl0ZW1zYmF0Y2gpOworCX0KKwllbHNlCisJeworCQlo YmF0Y2gtPnZpc0luZm8gPSBOVUxMOworCX0KK30KKwogdm9pZAogaGVhcGFtX2luZGV4X2ZldGNo X3Jlc2V0KEluZGV4U2NhbkRlc2Mgc2NhbikKIHsKKwlJbmRleEZldGNoSGVhcERhdGEgKmhzY2Fu ID0gKEluZGV4RmV0Y2hIZWFwRGF0YSAqKSBzY2FuLT54c19oZWFwZmV0Y2g7CisKKwkvKiBSZXNj YW5zIHNob3VsZCBhdm9pZCBhbiBleGNlc3NpdmUgbnVtYmVyIG9mIFZNIGxvb2t1cHMgKi8KKwlo c2Nhbi0+eHNfdm1faXRlbXMgPSAxOworCisJLyogUmVzZXQgYmF0Y2ggcmluZyBidWZmZXIgc3Rh dGUgKi8KKwlpZiAoc2Nhbi0+dXNlYmF0Y2hyaW5nKQorCQl0YWJsZWFtX3V0aWxfYmF0Y2hzY2Fu X3Jlc2V0KHNjYW4sIGZhbHNlKTsKKwogCS8qCi0JICogUmVzZXRzIGFyZSBhIG5vLW9wLgotCSAq CiAJICogRGVsaWJlcmF0ZWx5IGF2b2lkIGRyb3BwaW5nIHBpbnMgbm93IGhlbGQgaW4geHNfY2J1 ZiBhbmQgeHNfdm1idWZmZXIuCiAJICogVGhpcyBzYXZlcyBjeWNsZXMgZHVyaW5nIGNlcnRhaW4g dGlnaHQgbmVzdGVkIGxvb3Agam9pbnMgKGl0IGNhbiBhdm9pZAogCSAqIHJlcGVhdGVkIHBpbm5p bmcgYW5kIHVucGlubmluZyBvZiB0aGUgc2FtZSBidWZmZXIgYWNyb3NzIHJlc2NhbnMpLgpAQCAt MTE2LDkgKzIyMCwzNSBAQCBoZWFwYW1faW5kZXhfZmV0Y2hfZW5kKEluZGV4U2NhbkRlc2Mgc2Nh bikKIAlpZiAoQnVmZmVySXNWYWxpZChoc2Nhbi0+eHNfdm1idWZmZXIpKQogCQlSZWxlYXNlQnVm ZmVyKGhzY2FuLT54c192bWJ1ZmZlcik7CiAKKwkvKiBGcmVlIGFsbCBiYXRjaCByZWxhdGVkIHJl c291cmNlcyAqLworCWlmIChzY2FuLT51c2ViYXRjaHJpbmcpCisJCXRhYmxlYW1fdXRpbF9iYXRj aHNjYW5fZW5kKHNjYW4pOworCiAJcGZyZWUoaHNjYW4pOwogfQogCisvKgorICogU2F2ZSBiYXRj aCByaW5nIGJ1ZmZlcidzIGN1cnJlbnQgc2NhblBvcyBhcyBpdHMgbWFya1BvcworICovCit2b2lk CitoZWFwYW1faW5kZXhfZmV0Y2hfbWFya3BvcyhJbmRleFNjYW5EZXNjIHNjYW4pCit7CisJQXNz ZXJ0KHNjYW4tPnVzZWJhdGNocmluZyk7CisKKwl0YWJsZWFtX3V0aWxfYmF0Y2hzY2FuX21hcmtf cG9zKHNjYW4pOworfQorCisvKgorICogUmVzdG9yZSBiYXRjaCByaW5nIGJ1ZmZlcidzIG1hcmtQ b3MgaW50byBpdHMgc2NhblBvcworICovCit2b2lkCitoZWFwYW1faW5kZXhfZmV0Y2hfcmVzdHJw b3MoSW5kZXhTY2FuRGVzYyBzY2FuKQoreworCUFzc2VydChzY2FuLT51c2ViYXRjaHJpbmcpOwor CisJdGFibGVhbV91dGlsX2JhdGNoc2Nhbl9yZXN0b3JlX3BvcyhzY2FuKTsKK30KKwogLyoKICAq CWhlYXBfaG90X3NlYXJjaF9idWZmZXIJLSBzZWFyY2ggSE9UIGNoYWluIGZvciB0dXBsZSBzYXRp c2Z5aW5nIHNuYXBzaG90CiAgKgpAQCAtMzY3LDcgKzQ5Nyw4IEBAIGhlYXBhbV9pbmRleF9mZXRj aF90dXBsZShSZWxhdGlvbiByZWwsCiAgKi8KIHN0YXRpYyBwZ19hdHRyaWJ1dGVfYWx3YXlzX2lu bGluZSBib29sCiBoZWFwYW1faW5kZXhfZmV0Y2hfaGVhcF9pdGVtKEluZGV4U2NhbkRlc2Mgc2Nh biwgSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiwKLQkJCQkJCQkgVHVwbGVUYWJsZVNsb3QgKnNs b3QsIGJvb2wgKmhlYXBfY29udGludWUpCisJCQkJCQkJIFR1cGxlVGFibGVTbG90ICpzbG90LCBi b29sICpoZWFwX2NvbnRpbnVlLAorCQkJCQkJCSBib29sIGFtZ2V0YmF0Y2gpCiB7CiAJYm9vbAkJ YWxsX2RlYWQgPSBmYWxzZTsKIAlib29sCQlmb3VuZDsKQEAgLTM4MSwyMCArNTEyLDMyNyBAQCBo ZWFwYW1faW5kZXhfZmV0Y2hfaGVhcF9pdGVtKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhGZXRj aEhlYXBEYXRhICpoc2NhbiwKIAkJcGdzdGF0X2NvdW50X2hlYXBfZmV0Y2goc2Nhbi0+aW5kZXhS ZWxhdGlvbik7CiAKIAkvKgotCSAqIElmIHdlIHNjYW5uZWQgYSB3aG9sZSBIT1QgY2hhaW4gYW5k IGZvdW5kIG9ubHkgZGVhZCB0dXBsZXMsIHRlbGwgaW5kZXgKLQkgKiBBTSB0byBraWxsIGl0cyBl bnRyeSBmb3IgdGhhdCBUSUQgKHRoaXMgd2lsbCB0YWtlIGVmZmVjdCBpbiB0aGUgbmV4dAotCSAq IGFtZ2V0dHVwbGUgY2FsbCwgaW4gaW5kZXhfZ2V0bmV4dF90aWQpLiAgV2UgZG8gbm90IGRvIHRo aXMgd2hlbiBpbgotCSAqIHJlY292ZXJ5IGJlY2F1c2UgaXQgbWF5IHZpb2xhdGUgTVZDQyB0byBk byBzby4gIFNlZSBjb21tZW50cyBpbgotCSAqIFJlbGF0aW9uR2V0SW5kZXhTY2FuKCkuCisJICog SWYgd2Ugc2Nhbm5lZCBhIHdob2xlIEhPVCBjaGFpbiBhbmQgZm91bmQgb25seSBkZWFkIHR1cGxl cywgcmVtZW1iZXIgaXQKKwkgKiBmb3IgbGF0ZXIuICBXZSBkbyBub3QgZG8gdGhpcyB3aGVuIGlu IHJlY292ZXJ5IGJlY2F1c2UgaXQgbWF5IHZpb2xhdGUKKwkgKiBNVkNDIHRvIGRvIHNvLiAgU2Vl IGNvbW1lbnRzIGluIFJlbGF0aW9uR2V0SW5kZXhTY2FuKCkuCiAJICovCiAJaWYgKCFzY2FuLT54 YWN0U3RhcnRlZEluUmVjb3ZlcnkpCi0JCXNjYW4tPmtpbGxfcHJpb3JfdHVwbGUgPSBhbGxfZGVh ZDsKKwl7CisJCWlmIChhbWdldGJhdGNoKQorCQl7CisJCQlpZiAoYWxsX2RlYWQpCisJCQkJdGFi bGVhbV91dGlsX3NjYW5wb3Nfa2lsbGl0ZW0oc2Nhbik7CisJCX0KKwkJZWxzZQorCQl7CisJCQkv KgorCQkJICogVGVsbCBhbWdldHR1cGxlLWJhc2VkIGluZGV4IEFNIHRvIGtpbGwgaXRzIGVudHJ5 IGZvciB0aGF0IFRJRC4KKwkJCSAqIE5leHQgdGFibGVhbV91dGlsX2ZldGNoX25leHRfdHVwbGVf dGlkIGNhbGwgd2lsbCB0ZWxsIGluZGV4IEFNCisJCQkgKiB0byBraWxsIHRoZSB0dXBsZSBpdCBq dXN0IHJldHVybmVkIHRvIHVzIC0tIHRoZSAicHJpb3IiIHR1cGxlLgorCQkJICovCisJCQlzY2Fu LT5raWxsX3ByaW9yX3R1cGxlID0gYWxsX2RlYWQ7CisJCX0KKwl9CiAKIAlyZXR1cm4gZm91bmQ7 CiB9CiAKIC8qCi0gKiBDb21tb24gaW1wbGVtZW50YXRpb24gZm9yIGJvdGggaGVhcGFtX2luZGV4 XypfZ2V0bmV4dF9zbG90IHZhcmlhbnRzLgorICogR2V0IG5leHQgVElEIGZyb20gYmF0Y2ggcmlu ZyBidWZmZXIsIG1vdmluZyBpbiB0aGUgZ2l2ZW4gc2NhbiBkaXJlY3Rpb24uCisgKiBBbHNvIHNl dHMgKmFsbF92aXNpYmxlIGZvciBpdGVtIHdoZW4gY2FsbGVyIHBhc3NlcyBhIG5vbi1OVUxMIGFy Zy4KKyAqLworc3RhdGljIHBnX2F0dHJpYnV0ZV9hbHdheXNfaW5saW5lIEl0ZW1Qb2ludGVyCito ZWFwYW1faW5kZXhfZ2V0bmV4dF9zY2FuYmF0Y2hfcG9zKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5k ZXhGZXRjaEhlYXBEYXRhICpoc2NhbiwKKwkJCQkJCQkJICAgU2NhbkRpcmVjdGlvbiBkaXJlY3Rp b24sIGJvb2wgKmFsbF92aXNpYmxlKQoreworCUJhdGNoUmluZ0J1ZmZlciAqYmF0Y2hyaW5nYnVm ID0gJnNjYW4tPmJhdGNocmluZ2J1ZjsKKwlCYXRjaFJpbmdJdGVtUG9zICpzY2FuUG9zID0gJmJh dGNocmluZ2J1Zi0+c2NhblBvczsKKwlJbmRleFNjYW5CYXRjaCBzY2FuQmF0Y2ggPSBOVUxMOwor CWJvb2wJCWhhZEV4aXN0aW5nU2NhbkJhdGNoOworCisJQXNzZXJ0KCFzY2FuUG9zLT52YWxpZCB8 fCBiYXRjaHJpbmdidWYtPmhlYWRCYXRjaCA9PSBzY2FuUG9zLT5iYXRjaCk7CisJQXNzZXJ0KHNj YW5Qb3MtPnZhbGlkIHx8IGluZGV4X3NjYW5fYmF0Y2hfY291bnQoc2NhbikgPT0gMCk7CisJQXNz ZXJ0KGFsbF92aXNpYmxlID09IE5VTEwgfHwgc2Nhbi0+eHNfd2FudF9pdHVwKTsKKworCS8qCisJ ICogQ2hlY2sgaWYgdGhlcmUncyBhbiBleGlzdGluZyBsb2FkZWQgc2NhbkJhdGNoIGZvciB1cyB0 byByZXR1cm4gdGhlIG5leHQKKwkgKiBtYXRjaGluZyBpdGVtJ3MgVElEL2luZGV4IHR1cGxlIGZy b20KKwkgKi8KKwloYWRFeGlzdGluZ1NjYW5CYXRjaCA9IHNjYW5Qb3MtPnZhbGlkOworCWlmIChz Y2FuUG9zLT52YWxpZCkKKwl7CisJCS8qCisJCSAqIHNjYW5Qb3MgaXMgdmFsaWQsIHNvIHNjYW5C YXRjaCBtdXN0IGFscmVhZHkgYmUgbG9hZGVkIGluIGJhdGNoIHJpbmcKKwkJICogYnVmZmVyLiAg V2UgcmVseSBvbiB0aGF0IGhlcmUuCisJCSAqLworCQlwZ19hc3N1bWUoYmF0Y2hyaW5nYnVmLT5o ZWFkQmF0Y2ggPT0gc2NhblBvcy0+YmF0Y2gpOworCisJCXNjYW5CYXRjaCA9IGluZGV4X3NjYW5f YmF0Y2goc2Nhbiwgc2NhblBvcy0+YmF0Y2gpOworCisJCWlmIChpbmRleF9zY2FuX3Bvc19hZHZh bmNlKGRpcmVjdGlvbiwgc2NhbkJhdGNoLCBzY2FuUG9zKSkKKwkJCXJldHVybiBoZWFwYW1faW5k ZXhfcmV0dXJuX3NjYW5wb3NfdGlkKHNjYW4sIGhzY2FuLCBkaXJlY3Rpb24sCisJCQkJCQkJCQkJ CQkgICBzY2FuQmF0Y2gsIHNjYW5Qb3MsCisJCQkJCQkJCQkJCQkgICBhbGxfdmlzaWJsZSk7CisJ fQorCisJLyoKKwkgKiBFaXRoZXIgcmFuIG91dCBvZiBpdGVtcyBmcm9tIG91ciBleGlzdGluZyBz Y2FuQmF0Y2gsIG9yIGl0IGhhc24ndCBiZWVuCisJICogbG9hZGVkIHlldCAoYmVjYXVzZSB0aGlz IGlzIHRoZSBmaXJzdCBjYWxsIGhlcmUgZm9yIHRoZSBlbnRpcmUgc2NhbikuCisJICogVHJ5IHRv IGFkdmFuY2Ugc2NhbkJhdGNoIHRvIHRoZSBuZXh0IGJhdGNoIChvciBnZXQgdGhlIGZpcnN0IGJh dGNoKS4KKwkgKi8KKwlzY2FuQmF0Y2ggPSB0YWJsZWFtX3V0aWxfZmV0Y2hfbmV4dF9iYXRjaChz Y2FuLCBkaXJlY3Rpb24sCisJCQkJCQkJCQkJCSAgc2NhbkJhdGNoLCBzY2FuUG9zKTsKKworCWlm ICghc2NhbkJhdGNoKQorCXsKKwkJLyoKKwkJICogV2UncmUgZG9uZTsgbm8gbW9yZSBiYXRjaGVz IGluIHRoZSBjdXJyZW50IHNjYW4gZGlyZWN0aW9uLgorCQkgKgorCQkgKiBOb3RlOiBzY2FuUG9z IGlzIGdlbmVyYWxseSBzdGlsbCB2YWxpZCBhdCB0aGlzIHBvaW50LiAgVGhlIHNjYW4KKwkJICog bWlnaHQgc3RpbGwgYmFjayB1cCBpbiB0aGUgb3RoZXIgZGlyZWN0aW9uLgorCQkgKi8KKwkJcmV0 dXJuIE5VTEw7CisJfQorCisJLyoKKwkgKiBBZHZhbmNlZCBzY2FuQmF0Y2guICBOb3cgcG9zaXRp b24gc2NhblBvcyB0byB0aGUgc3RhcnQgb2YgbmV3CisJICogc2NhbkJhdGNoLgorCSAqLworCWlu ZGV4X3NjYW5fcG9zX25leHRiYXRjaChkaXJlY3Rpb24sIHNjYW5CYXRjaCwgc2NhblBvcyk7CisJ QXNzZXJ0KGluZGV4X3NjYW5fYmF0Y2goc2Nhbiwgc2NhblBvcy0+YmF0Y2gpID09IHNjYW5CYXRj aCk7CisKKwkvKgorCSAqIFJlbW92ZSB0aGUgaGVhZCBiYXRjaCBmcm9tIHRoZSBiYXRjaCByaW5n IGJ1ZmZlciAoZXhjZXB0IHdoZW4gdGhpcyBuZXcKKwkgKiBzY2FuQmF0Y2ggaXMgb3VyIG9ubHkg b25lKQorCSAqLworCWlmIChoYWRFeGlzdGluZ1NjYW5CYXRjaCkKKwl7CisJCUluZGV4U2NhbkJh dGNoIGhlYWRCYXRjaCA9IGluZGV4X3NjYW5fYmF0Y2goc2NhbiwKKwkJCQkJCQkJCQkJCQliYXRj aHJpbmdidWYtPmhlYWRCYXRjaCk7CisKKwkJQXNzZXJ0KGhlYWRCYXRjaCAhPSBzY2FuQmF0Y2gp OworCQlBc3NlcnQoYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2ggIT0gc2NhblBvcy0+YmF0Y2gpOwor CisJCS8qIGZyZWUgb2Jzb2xlc2NlbnQgaGVhZCBiYXRjaCAodW5sZXNzIGl0IGlzIHNjYW4ncyBt YXJrQmF0Y2gpICovCisJCXRhYmxlYW1fdXRpbF9yZWxlYXNlX2JhdGNoKHNjYW4sIGhlYWRCYXRj aCk7CisKKwkJLyogUmVtb3ZlIHRoZSBiYXRjaCBmcm9tIHRoZSByaW5nIGJ1ZmZlciAoZXZlbiBp ZiBpdCdzIG1hcmtCYXRjaCkgKi8KKwkJYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2grKzsKKwl9CisK KwkvKiBJbiBwcmFjdGljZSBzY2FuQmF0Y2ggd2lsbCBhbHdheXMgYmUgdGhlIHJpbmcgYnVmZmVy J3MgaGVhZEJhdGNoICovCisJQXNzZXJ0KGJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoID09IHNjYW5Q b3MtPmJhdGNoKTsKKworCXJldHVybiBoZWFwYW1faW5kZXhfcmV0dXJuX3NjYW5wb3NfdGlkKHNj YW4sIGhzY2FuLCBkaXJlY3Rpb24sCisJCQkJCQkJCQkJICAgc2NhbkJhdGNoLCBzY2FuUG9zLCBh bGxfdmlzaWJsZSk7Cit9CisKKy8qCisgKiBTYXZlIHRoZSBjdXJyZW50IHNjYW5Qb3Mvc2NhbkJh dGNoIGl0ZW0ncyBUSUQgaW4gc2NhbidzIHhzX2hlYXB0aWQsIGFuZAorICogcmV0dXJuIGEgcG9p bnRlciB0byB0aGF0IFRJRC4gIFdoZW4gYWxsX3Zpc2libGUgaXNuJ3QgTlVMTCAoZHVyaW5nIGFu CisgKiBpbmRleC1vbmx5IHNjYW4pLCBhbHNvIHNldHMgaXRlbSdzIHZpc2liaWxpdHkgc3RhdHVz IGluICphbGxfdmlzaWJsZS4KKyAqCisgKiBoZWFwYW1faW5kZXhfZ2V0bmV4dF9zY2FuYmF0Y2hf cG9zIGhlbHBlciBmdW5jdGlvbi4KKyAqLworc3RhdGljIGlubGluZSBJdGVtUG9pbnRlcgoraGVh cGFtX2luZGV4X3JldHVybl9zY2FucG9zX3RpZChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4RmV0 Y2hIZWFwRGF0YSAqaHNjYW4sCisJCQkJCQkJCVNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJ CQkJCQlJbmRleFNjYW5CYXRjaCBzY2FuQmF0Y2gsCisJCQkJCQkJCUJhdGNoUmluZ0l0ZW1Qb3Mg KnNjYW5Qb3MsCisJCQkJCQkJCWJvb2wgKmFsbF92aXNpYmxlKQoreworCUhlYXBCYXRjaERhdGEg KmhiYXRjaDsKKworCS8qIFNldCB4c19oZWFwdGlkLCB3aGljaCBjYWxsZXIgKGFuZCBjb3JlIGV4 ZWN1dG9yKSB3aWxsIG5lZWQgKi8KKwlzY2FuLT54c19oZWFwdGlkID0gc2NhbkJhdGNoLT5pdGVt c1tzY2FuUG9zLT5pdGVtXS50YWJsZVRpZDsKKworCWlmIChhbGxfdmlzaWJsZSA9PSBOVUxMKQor CXsKKwkJLyoKKwkJICogUGxhaW4gaW5kZXggc2Nhbi4KKwkJICovCisJCUFzc2VydCghc2Nhbi0+ eHNfd2FudF9pdHVwKTsKKwkJcmV0dXJuICZzY2FuLT54c19oZWFwdGlkOworCX0KKworCS8qCisJ ICogSW5kZXgtb25seSBzY2FuLgorCSAqCisJICogQWxzbyBzZXQgeHNfaXR1cCwgd2hpY2ggY2Fs bGVyIGFsc28gbmVlZHMuCisJICovCisJQXNzZXJ0KHNjYW4tPnhzX3dhbnRfaXR1cCk7CisJc2Nh bi0+eHNfaXR1cCA9IChJbmRleFR1cGxlKSAoc2NhbkJhdGNoLT5jdXJyVHVwbGVzICsKKwkJCQkJ CQkJICBzY2FuQmF0Y2gtPml0ZW1zW3NjYW5Qb3MtPml0ZW1dLnR1cGxlT2Zmc2V0KTsKKworCS8q CisJICogU2V0IHZpc2liaWxpdHkgaW5mbyBmb3IgdGhlIGN1cnJlbnQgc2NhblBvcyBpdGVtIChw bHVzIHBvc3NpYmx5IHNvbWUKKwkgKiBhZGRpdGlvbmFsIGl0ZW1zIGluIHRoZSBjdXJyZW50IHNj YW4gZGlyZWN0aW9uKSBhcyBuZWVkZWQKKwkgKi8KKwloYmF0Y2ggPSBpbmRleF9zY2FuX2JhdGNo X3RhYmxlX2FyZWEoc2Nhbiwgc2NhbkJhdGNoKTsKKwlpZiAoIShoYmF0Y2gtPnZpc0luZm9bc2Nh blBvcy0+aXRlbV0gJiBIRUFQX0JBVENIX1ZJU19DSEVDS0VEKSkKKwkJaGVhcGFtX2luZGV4X2Jh dGNoX3Bvc192aXNpYmlsaXR5KHNjYW4sIGRpcmVjdGlvbiwgc2NhbkJhdGNoLCBoYmF0Y2gsCisJ CQkJCQkJCQkJICBzY2FuUG9zKTsKKworCS8qIEZpbmFsbHksIHNldCBhbGxfdmlzaWJsZSBmb3Ig Y2FsbGVyICovCisJKmFsbF92aXNpYmxlID0KKwkJKGhiYXRjaC0+dmlzSW5mb1tzY2FuUG9zLT5p dGVtXSAmIEhFQVBfQkFUQ0hfVklTX0FMTF9WSVNJQkxFKSAhPSAwOworCisJcmV0dXJuICZzY2Fu LT54c19oZWFwdGlkOworfQorCisvKgorICogT2J0YWluIHZpc2liaWxpdHkgaW5mb3JtYXRpb24g Zm9yIGEgVElEIGZyb20gY2FsbGVyJ3MgYmF0Y2guCisgKgorICogQ2FsbGVkIGR1cmluZyBhbWdl dGJhdGNoIGluZGV4LW9ubHkgc2NhbnMuICBXZSBhbHdheXMgY2hlY2sgdGhlIHZpc2liaWxpdHkK KyAqIG9mIGNhbGxlcidzIGl0ZW0gKGFuIG9mZnNldCBpbnRvIGNhbGxlcidzIGJhdGNoLT5pdGVt c1tdIGFycmF5KS4gIFdlIG1pZ2h0CisgKiBhbHNvIHNldCB2aXNpYmlsaXR5IGluZm8gZm9yIG90 aGVyIGl0ZW1zIGZyb20gY2FsbGVyJ3MgYmF0Y2ggbW9yZQorICogcHJvYWN0aXZlbHkgd2hlbiB0 aGF0IG1ha2VzIHNlbnNlLgorICoKKyAqIFdlIGtlZXAgdHdvIGNvbXBldGluZyBjb25zaWRlcmF0 aW9ucyBpbiBiYWxhbmNlIHdoZW4gZGV0ZXJtaW5pbmcgd2hldGhlciB0bworICogY2hlY2sgYWRk aXRpb25hbCBpdGVtczogdGhlIG5lZWQgdG8ga2VlcCB0aGUgY29zdCBvZiB2aXNpYmlsaXR5IG1h cCBhY2Nlc3MKKyAqIHVuZGVyIGNvbnRyb2wgd2hlbiBtb3N0IGl0ZW1zIHdpbGwgbmV2ZXIgYmUg cmV0dXJuZWQgYnkgdGhlIHNjYW4gYW55d2F5CisgKiAoaW1wb3J0YW50IGZvciBpbm5lciBpbmRl eCBzY2FucyBvZiBhbnRpLWpvaW5zIGFuZCBzZW1pLWpvaW5zKSwgYW5kIHRoZQorICogbmVlZCB0 byB1bmd1YXJkIGJhdGNoZXMgcHJvbXB0bHkuCisgKgorICogT25jZSB3ZSd2ZSByZXNvbHZlZCB2 aXNpYmlsaXR5IGZvciBhbGwgaXRlbXMgaW4gYSBiYXRjaCwgd2UgY2FuIHNhZmVseQorICogdW5n dWFyZCBpdCBieSBjYWxsaW5nIGFtdW5ndWFyZGJhdGNoLiAgVGhpcyBpcyBzYWZlIHdpdGggcmVz cGVjdCB0bworICogY29uY3VycmVudCBWQUNVVU0gYmVjYXVzZSB0aGUgYmF0Y2gncyBndWFyZCAo dHlwaWNhbGx5IGEgYnVmZmVyIHBpbiBvbiB0aGUKKyAqIG9yaWdpbmF0aW5nIGluZGV4IHBhZ2Up IGJsb2NrcyBWQUNVVU0gZnJvbSBhY3F1aXJpbmcgYSBjb25mbGljdGluZyBjbGVhbnVwCisgKiBs b2NrIG9uIHRoYXQgcGFnZS4gIENvcHlpbmcgdGhlIHJlbGV2YW50IHZpc2liaWxpdHkgbWFwIGRh dGEgaW50byBvdXIgbG9jYWwKKyAqIGNhY2hlIHN1ZmZpY2VzIHRvIHByZXZlbnQgdW5zYWZlIGNv bmN1cnJlbnQgVElEIHJlY3ljbGluZzogaWYgYW55IG9mIHRoZXNlCisgKiBUSURzIHBvaW50IHRv IGRlYWQgaGVhcCB0dXBsZXMsIFZBQ1VVTSBjYW5ub3QgcG9zc2libHkgcmV0dXJuIGZyb20KKyAq IGFtYnVsa2RlbGV0ZSBhbmQgbWFyayB0aGUgcG9pbnRlZC10byBoZWFwIHBhZ2VzIGFzIGFsbC12 aXNpYmxlLiAgVkFDVVVNCisgKiBfY2FuXyBkbyBzbyBvbmNlIHRoZSBiYXRjaCBpcyB1bmd1YXJk ZWQsIGJ1dCB0aGF0J3Mgb2theTsgd2UnbGwgYmUgd29ya2luZworICogb2ZmIG9mIGNhY2hlZCB2 aXNpYmlsaXR5IGluZm8gdGhhdCBpbmRpY2F0ZXMgdGhhdCB0aGUgZGVhZCBUSURzIGFyZSBOT1QK KyAqIGFsbC12aXNpYmxlLgorICoKKyAqIFdoYXQgYWJvdXQgdGhlIG9wcG9zaXRlIGNhc2UsIHdo ZXJlIGEgcGFnZSB3YXMgYWxsLXZpc2libGUgd2hlbiB3ZSBjYWNoZWQKKyAqIHRoZSBWTSBiaXRz IGJ1dCB0dXBsZXMgb24gaXQgYXJlIGRlbGV0ZWQgYWZ0ZXJ3YXJkcz8gIFRoYXQgaXMgc2FmZSB0 b286IGFueQorICogdHVwbGUgdGhhdCB3YXMgdmlzaWJsZSB0byBhbGwgd2hlbiB3ZSByZWFkIHRo ZSBWTSBtdXN0IGFsc28gYmUgdmlzaWJsZSB0bworICogb3VyIE1WQ0Mgc25hcHNob3QsIHNvIGl0 IGlzIGNvcnJlY3QgdG8gc2tpcCB0aGUgaGVhcCBmZXRjaCBmb3IgdGhvc2UgVElEcy4KKyAqLwor c3RhdGljIHZvaWQKK2hlYXBhbV9pbmRleF9iYXRjaF9wb3NfdmlzaWJpbGl0eShJbmRleFNjYW5E ZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJCQkgIEluZGV4U2NhbkJh dGNoIGJhdGNoLCBIZWFwQmF0Y2hEYXRhICpoYmF0Y2gsCisJCQkJCQkJCSAgQmF0Y2hSaW5nSXRl bVBvcyAqcG9zKQoreworCUluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4gPSAoSW5kZXhGZXRjaEhl YXBEYXRhICopIHNjYW4tPnhzX2hlYXBmZXRjaDsKKwlpbnQJCQlwb3NJdGVtID0gcG9zLT5pdGVt OworCWJvb2wJCWFsbGJhdGNoaXRlbXN2aXNpYmxlOworCUJsb2NrTnVtYmVyIGN1cnZtaGVhcGJs a25vID0gSW52YWxpZEJsb2NrTnVtYmVyOworCXVpbnQ4CQljdXJ2bWhlYXBibGtmbGFncyA9IDA7 CisKKwlBc3NlcnQoaGJhdGNoID09IGluZGV4X3NjYW5fYmF0Y2hfdGFibGVfYXJlYShzY2FuLCBi YXRjaCkpOworCisJLyoKKwkgKiBUaGUgYmF0Y2ggbXVzdCBzdGlsbCBiZSBndWFyZGVkIHdoZW5l dmVyIHdlJ3JlIGNhbGxlZC4KKwkgKgorCSAqIGFtdW5ndWFyZGJhdGNoIGNhbid0IGJlIGNhbGxl ZCB1bnRpbCB3ZSd2ZSBhbHJlYWR5IHNldCBfZXZlcnlfIGJhdGNoCisJICogaXRlbSdzIHZpc0lu Zm9bXSBzdGF0dXMsIGJ1dCBpZiB3ZSd2ZSBhbHJlYWR5IGRvbmUgc28gZm9yIHRoaXMgYmF0Y2gK KwkgKiB0aGVuIGl0IHNob3VsZG4ndCBldmVyIGdldCBwYXNzZWQgdG8gdXMgYWdhaW4gYnkgc29t ZSBzdWJzZXF1ZW50IGNhbGwuCisJICogKFRoaXMgcmVsaWVzIG9uIGluZGV4LW9ubHkgc2NhbnMg YWx3YXlzIGJlaW5nICFiYXRjaEltbWVkaWF0ZVVuZ3VhcmQuKQorCSAqLworCUFzc2VydChiYXRj aC0+aXNHdWFyZGVkICYmICFzY2FuLT5iYXRjaEltbWVkaWF0ZVVuZ3VhcmQpOworCisJLyoKKwkg KiBTZXQgdmlzaWJpbGl0eSBpbmZvIGZvciBhIHJhbmdlIG9mIGl0ZW1zLCBpbiBzY2FuIG9yZGVy LgorCSAqCisJICogTm90ZTogdmlzaWJpbGl0eW1hcF9nZXRfc3RhdHVzIGRvZXMgbm90IGxvY2sg dGhlIHZpc2liaWxpdHkgbWFwIGJ1ZmZlciwKKwkgKiBzbyB0aGUgcmVzdWx0IGNvdWxkIGJlIHNs aWdodGx5IHN0YWxlLiAgU2VlIHRoZSAiTWVtb3J5IG9yZGVyaW5nCisJICogZWZmZWN0cyIgZGlz Y3Vzc2lvbiBhYm92ZSB2aXNpYmlsaXR5bWFwX2dldF9zdGF0dXMgZm9yIGFuIGV4cGxhbmF0aW9u CisJICogb2Ygd2h5IHRoaXMgaXMgb2theS4KKwkgKi8KKwlpZiAoU2NhbkRpcmVjdGlvbklzRm9y d2FyZChkaXJlY3Rpb24pKQorCXsKKwkJaW50CQkJbGFzdFNldEl0ZW0gPSBNaW4oYmF0Y2gtPmxh c3RJdGVtLAorCQkJCQkJCQkJICBwb3NJdGVtICsgaHNjYW4tPnhzX3ZtX2l0ZW1zIC0gMSk7CisK KwkJZm9yIChpbnQgc2V0SXRlbSA9IHBvc0l0ZW07IHNldEl0ZW0gPD0gbGFzdFNldEl0ZW07IHNl dEl0ZW0rKykKKwkJeworCQkJSXRlbVBvaW50ZXIgdGlkID0gJmJhdGNoLT5pdGVtc1tzZXRJdGVt XS50YWJsZVRpZDsKKwkJCUJsb2NrTnVtYmVyIGhlYXBibGtubyA9IEl0ZW1Qb2ludGVyR2V0Qmxv Y2tOdW1iZXIodGlkKTsKKwkJCXVpbnQ4CQlmbGFnczsKKworCQkJaWYgKGhlYXBibGtubyA9PSBj dXJ2bWhlYXBibGtubykKKwkJCXsKKwkJCQloYmF0Y2gtPnZpc0luZm9bc2V0SXRlbV0gPSBjdXJ2 bWhlYXBibGtmbGFnczsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJZmxhZ3MgPSBIRUFQX0JB VENIX1ZJU19DSEVDS0VEOworCQkJaWYgKFZNX0FMTF9WSVNJQkxFKHNjYW4tPmhlYXBSZWxhdGlv biwgaGVhcGJsa25vLCAmaHNjYW4tPnhzX3ZtYnVmZmVyKSkKKwkJCQlmbGFncyB8PSBIRUFQX0JB VENIX1ZJU19BTExfVklTSUJMRTsKKworCQkJaGJhdGNoLT52aXNJbmZvW3NldEl0ZW1dID0gY3Vy dm1oZWFwYmxrZmxhZ3MgPSBmbGFnczsKKwkJCWN1cnZtaGVhcGJsa25vID0gaGVhcGJsa25vOwor CQl9CisKKwkJYWxsYmF0Y2hpdGVtc3Zpc2libGUgPSBsYXN0U2V0SXRlbSA+PSBiYXRjaC0+bGFz dEl0ZW0gJiYKKwkJCShwb3NJdGVtID09IGJhdGNoLT5maXJzdEl0ZW0gfHwKKwkJCSAoaGJhdGNo LT52aXNJbmZvW2JhdGNoLT5maXJzdEl0ZW1dICYgSEVBUF9CQVRDSF9WSVNfQ0hFQ0tFRCkpOwor CX0KKwllbHNlCisJeworCQlpbnQJCQlsYXN0U2V0SXRlbSA9IE1heChiYXRjaC0+Zmlyc3RJdGVt LAorCQkJCQkJCQkJICBwb3NJdGVtIC0gaHNjYW4tPnhzX3ZtX2l0ZW1zICsgMSk7CisKKwkJZm9y IChpbnQgc2V0SXRlbSA9IHBvc0l0ZW07IHNldEl0ZW0gPj0gbGFzdFNldEl0ZW07IHNldEl0ZW0t LSkKKwkJeworCQkJSXRlbVBvaW50ZXIgdGlkID0gJmJhdGNoLT5pdGVtc1tzZXRJdGVtXS50YWJs ZVRpZDsKKwkJCUJsb2NrTnVtYmVyIGhlYXBibGtubyA9IEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1i ZXIodGlkKTsKKwkJCXVpbnQ4CQlmbGFnczsKKworCQkJaWYgKGhlYXBibGtubyA9PSBjdXJ2bWhl YXBibGtubykKKwkJCXsKKwkJCQloYmF0Y2gtPnZpc0luZm9bc2V0SXRlbV0gPSBjdXJ2bWhlYXBi bGtmbGFnczsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJZmxhZ3MgPSBIRUFQX0JBVENIX1ZJ U19DSEVDS0VEOworCQkJaWYgKFZNX0FMTF9WSVNJQkxFKHNjYW4tPmhlYXBSZWxhdGlvbiwgaGVh cGJsa25vLCAmaHNjYW4tPnhzX3ZtYnVmZmVyKSkKKwkJCQlmbGFncyB8PSBIRUFQX0JBVENIX1ZJ U19BTExfVklTSUJMRTsKKworCQkJaGJhdGNoLT52aXNJbmZvW3NldEl0ZW1dID0gY3Vydm1oZWFw YmxrZmxhZ3MgPSBmbGFnczsKKwkJCWN1cnZtaGVhcGJsa25vID0gaGVhcGJsa25vOworCQl9CisK KwkJYWxsYmF0Y2hpdGVtc3Zpc2libGUgPSBsYXN0U2V0SXRlbSA8PSBiYXRjaC0+Zmlyc3RJdGVt ICYmCisJCQkocG9zSXRlbSA9PSBiYXRjaC0+bGFzdEl0ZW0gfHwKKwkJCSAoaGJhdGNoLT52aXNJ bmZvW2JhdGNoLT5sYXN0SXRlbV0gJiBIRUFQX0JBVENIX1ZJU19DSEVDS0VEKSk7CisJfQorCisJ LyoKKwkgKiBJdCdzIHNhZmUgdG8gdW5ndWFyZCB0aGUgYmF0Y2ggKHZpYSBhbXVuZ3VhcmRiYXRj aCkgYXMgc29vbiBhcyB3ZSd2ZQorCSAqIHJlc29sdmVkIHRoZSB2aXNpYmlsaXR5IHN0YXR1cyBv ZiBhbGwgb2YgaXRzIGl0ZW1zICh1bmxlc3MgdGhpcyBpcyBhCisJICogbm9uLU1WQ0Mgc2NhbikK KwkgKi8KKwlpZiAoYWxsYmF0Y2hpdGVtc3Zpc2libGUpCisJeworCQlBc3NlcnQoaGJhdGNoLT52 aXNJbmZvW2JhdGNoLT5maXJzdEl0ZW1dICYgSEVBUF9CQVRDSF9WSVNfQ0hFQ0tFRCk7CisJCUFz c2VydChoYmF0Y2gtPnZpc0luZm9bYmF0Y2gtPmxhc3RJdGVtXSAmIEhFQVBfQkFUQ0hfVklTX0NI RUNLRUQpOworCisJCS8qCisJCSAqIE5vdGU6IG5vZGVJbmRleG9ubHlzY2FuLmMgb25seSBzdXBw b3J0cyBNVkNDIHNuYXBzaG90cywgYnV0IHdlCisJCSAqIHN0aWxsIGNvcGUgd2l0aCBpbmRleC1v bmx5IHNjYW4gY2FsbGVycyB3aXRoIG90aGVyIHNuYXBzaG90IHR5cGVzLgorCQkgKiBUaGlzIGlz IGNlcnRhaW5seSBub3QgdW5leHBlY3RlZDsgc2VsZnVuY3MuYyBwZXJmb3JtcyBpbmRleC1vbmx5 CisJCSAqIHNjYW5zIHRoYXQgdXNlIFNuYXBzaG90Tm9uVmFjdXVtYWJsZS4KKwkJICovCisJCWlm IChzY2FuLT5NVkNDU2NhbikKKwkJCXRhYmxlYW1fdXRpbF91bmd1YXJkX2JhdGNoKHNjYW4sIGJh dGNoKTsKKwl9CisKKwkvKgorCSAqIEVsc2UgY2hlY2sgdmlzaWJpbGl0eSBmb3IgdHdpY2UgYXMg bWFueSBpdGVtcyBuZXh0IHRpbWUsIG9yIGFsbCBpdGVtcy4KKwkgKiBXZSBjaGVjayBhbGwgaXRl bXMgaW4gb25lIGdvIG9uY2Ugd2UncmUgcGFzc2VkIHRoZSBzY2FuJ3MgZmlyc3QgYmF0Y2guCisJ ICovCisJZWxzZSBpZiAoaHNjYW4tPnhzX3ZtX2l0ZW1zIDwgKGJhdGNoLT5sYXN0SXRlbSAtIGJh dGNoLT5maXJzdEl0ZW0pKQorCQloc2Nhbi0+eHNfdm1faXRlbXMgKj0gMjsKKwllbHNlCisJCWhz Y2FuLT54c192bV9pdGVtcyA9IHNjYW4tPm1heGl0ZW1zYmF0Y2g7Cit9CisKKy8qCisgKiBDb21t b24gaW1wbGVtZW50YXRpb24gZm9yIGFsbCBmb3VyIGhlYXBhbV9pbmRleF8qX2dldG5leHRfc2xv dCB2YXJpYW50cy4KICAqCiAgKiBUaGUgcmVzdWx0IGlzIHRydWUgaWYgYSB0dXBsZSBzYXRpc2Z5 aW5nIHRoZSBzY2FuIGtleXMgYW5kIHRoZSBzbmFwc2hvdCB3YXMKICAqIGZvdW5kLCBmYWxzZSBv dGhlcndpc2UuICBUaGUgdHVwbGUgaXMgc3RvcmVkIGluIHRoZSBzcGVjaWZpZWQgc2xvdC4KQEAg LTQwMywxMiArODQxLDEzIEBAIGhlYXBhbV9pbmRleF9mZXRjaF9oZWFwX2l0ZW0oSW5kZXhTY2Fu RGVzYyBzY2FuLCBJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuLAogICogZHJvcHBlZCBieSBhIGZ1 dHVyZSBjYWxsIGhlcmUgKG9yIGJ5IGEgbGF0ZXIgY2FsbCB0byBoZWFwYW1faW5kZXhfZmV0Y2hf ZW5kCiAgKiB0aHJvdWdoIGluZGV4X2VuZHNjYW4pLgogICoKLSAqIFRoZSBpbmRleF9vbmx5IHBh cmFtZXRlciBpcyBhIGNvbXBpbGUtdGltZSBjb25zdGFudCBhdCBlYWNoIGNhbGwgc2l0ZSwKLSAq IGFsbG93aW5nIHRoZSBjb21waWxlciB0byBzcGVjaWFsaXplIHRoZSBjb2RlIGZvciBlYWNoIHZh cmlhbnQuCisgKiBUaGUgaW5kZXhfb25seSBhbmQgYW1nZXRiYXRjaCBwYXJhbWV0ZXJzIGFyZSBj b21waWxlLXRpbWUgY29uc3RhbnRzIGF0IGVhY2gKKyAqIGNhbGwgc2l0ZSwgYWxsb3dpbmcgdGhl IGNvbXBpbGVyIHRvIHNwZWNpYWxpemUgdGhlIGNvZGUgZm9yIGVhY2ggdmFyaWFudC4KICAqLwog c3RhdGljIHBnX2F0dHJpYnV0ZV9hbHdheXNfaW5saW5lIGJvb2wKIGhlYXBhbV9pbmRleF9nZXRu ZXh0X3Nsb3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKLQkJ CQkJCSAgVHVwbGVUYWJsZVNsb3QgKnNsb3QsIGJvb2wgaW5kZXhfb25seSkKKwkJCQkJCSAgVHVw bGVUYWJsZVNsb3QgKnNsb3QsIGJvb2wgaW5kZXhfb25seSwKKwkJCQkJCSAgYm9vbCBhbWdldGJh dGNoKQogewogCUluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4gPSAoSW5kZXhGZXRjaEhlYXBEYXRh ICopIHNjYW4tPnhzX2hlYXBmZXRjaDsKIAlib29sCSAgICpoZWFwX2NvbnRpbnVlID0gJnNjYW4t PnhzX2hlYXBfY29udGludWU7CkBAIC00MTcsMTkgKzg1NiwyOSBAQCBoZWFwYW1faW5kZXhfZ2V0 bmV4dF9zbG90KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCiAJ dWludDgJCW5fdmlzaXRlZF9wYWdlcyA9IDA7CiAJSXRlbVBvaW50ZXIgdGlkID0gTlVMTDsKIAor CUFzc2VydChUcmFuc2FjdGlvbklkSXNWYWxpZChSZWNlbnRYbWluKSk7CisKIAlmb3IgKDs7KQog CXsKIAkJaWYgKCEqaGVhcF9jb250aW51ZSkKIAkJewogCQkJLyogR2V0IHRoZSBuZXh0IFRJRCBm cm9tIHRoZSBpbmRleCAqLwotCQkJdGlkID0gaW5kZXhfZ2V0bmV4dF90aWQoc2NhbiwgZGlyZWN0 aW9uKTsKKwkJCWlmIChhbWdldGJhdGNoKQorCQkJCXRpZCA9IGhlYXBhbV9pbmRleF9nZXRuZXh0 X3NjYW5iYXRjaF9wb3Moc2NhbiwgaHNjYW4sCisJCQkJCQkJCQkJCQkJCSBkaXJlY3Rpb24sCisJ CQkJCQkJCQkJCQkJCSBpbmRleF9vbmx5ID8KKwkJCQkJCQkJCQkJCQkJICZhbGxfdmlzaWJsZSA6 IE5VTEwpOworCQkJZWxzZQorCQkJCXRpZCA9IHRhYmxlYW1fdXRpbF9mZXRjaF9uZXh0X3R1cGxl X3RpZChzY2FuLCBkaXJlY3Rpb24pOwogCiAJCQkvKiBJZiB3ZSdyZSBvdXQgb2YgaW5kZXggZW50 cmllcywgd2UncmUgZG9uZSAqLwogCQkJaWYgKHRpZCA9PSBOVUxMKQogCQkJCWJyZWFrOwogCi0J CQkvKiBGb3IgaW5kZXgtb25seSBzY2FucywgY2hlY2sgdGhlIHZpc2liaWxpdHkgbWFwICovCi0J CQlpZiAoaW5kZXhfb25seSkKKwkJCXBnc3RhdF9jb3VudF9pbmRleF90dXBsZXMoc2Nhbi0+aW5k ZXhSZWxhdGlvbiwgMSk7CisKKwkJCS8qIEZvciBub24tYmF0Y2ggaW5kZXgtb25seSBzY2Fucywg Y2hlY2sgdGhlIHZpc2liaWxpdHkgbWFwICovCisJCQlpZiAoaW5kZXhfb25seSAmJiAhYW1nZXRi YXRjaCkKIAkJCQlhbGxfdmlzaWJsZSA9IFZNX0FMTF9WSVNJQkxFKHNjYW4tPmhlYXBSZWxhdGlv biwKIAkJCQkJCQkJCQkJIEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKSwKIAkJCQkJCQkJ CQkJICZoc2Nhbi0+eHNfdm1idWZmZXIpOwpAQCAtNDQyLDggKzg5MSw4IEBAIGhlYXBhbV9pbmRl eF9nZXRuZXh0X3Nsb3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlv biwKIAkJCS8qCiAJCQkgKiBXZSBjYW4gc2tpcCB0aGUgaGVhcCBmZXRjaCBpZiB0aGUgVElEIHJl ZmVyZW5jZXMgYSBoZWFwIHBhZ2Ugb24KIAkJCSAqIHdoaWNoIGFsbCB0dXBsZXMgYXJlIGtub3du IHZpc2libGUgdG8gZXZlcnlib2R5LiAgSW4gYW55IGNhc2UsCi0JCQkgKiB3ZSdsbCB1c2UgdGhl IGluZGV4IHR1cGxlIG5vdCB0aGUgaGVhcCB0dXBsZSBhcyB0aGUgZGF0YQotCQkJICogc291cmNl LgorCQkJICogb3VyIGV4ZWN1dG9yIG5vZGUgY2FsbGVyIGlnbm9yZXMgdGhlIHNsb3Qgd2UgcmV0 dXJuOiBpdCBmaWxscworCQkJICogaXRzIHJlc3VsdCBzbG90IGZyb20gdGhlIGluZGV4IHR1cGxl ICh4c19pdHVwL3hzX2hpdHVwKS4KIAkJCSAqLwogCQkJaWYgKCFhbGxfdmlzaWJsZSkKIAkJCXsK QEAgLTQ1NCw3ICs5MDMsNyBAQCBoZWFwYW1faW5kZXhfZ2V0bmV4dF9zbG90KEluZGV4U2NhbkRl c2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCiAJCQkJCXNjYW4tPmluc3RydW1lbnQt Pm50YWJsZXR1cGxlZmV0Y2hlcysrOwogCiAJCQkJaWYgKCFoZWFwYW1faW5kZXhfZmV0Y2hfaGVh cF9pdGVtKHNjYW4sIGhzY2FuLCBzbG90LAotCQkJCQkJCQkJCQkJICBoZWFwX2NvbnRpbnVlKSkK KwkJCQkJCQkJCQkJCSAgaGVhcF9jb250aW51ZSwgYW1nZXRiYXRjaCkpCiAJCQkJewogCQkJCQkv KgogCQkJCQkgKiBObyB2aXNpYmxlIHR1cGxlLiAgSWYgY2FsbGVyIHNldCBhIHZpc2l0ZWQtcGFn ZXMgbGltaXQKQEAgLTQ4Niw3ICs5MzUsNyBAQCBoZWFwYW1faW5kZXhfZ2V0bmV4dF9zbG90KElu ZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCiAJCQkJICogd2FudCB1 cyB0byBhc3N1bWUgdGhhdCBqdXN0IGhhdmluZyBvbmUgdmlzaWJsZSB0dXBsZSBpbiB0aGUKIAkJ CQkgKiBob3QgY2hhaW4gaXMgYWx3YXlzIGdvb2QgZW5vdWdoLgogCQkJCSAqLwotCQkJCUFzc2Vy dCghKCpoZWFwX2NvbnRpbnVlICYmIElzTVZDQ1NuYXBzaG90KHNjYW4tPnhzX3NuYXBzaG90KSkp OworCQkJCUFzc2VydCghKCpoZWFwX2NvbnRpbnVlICYmIHNjYW4tPk1WQ0NTY2FuKSk7CiAJCQl9 CiAJCQllbHNlCiAJCQl7CkBAIC01MTMsOCArOTYyLDggQEAgaGVhcGFtX2luZGV4X2dldG5leHRf c2xvdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAogCQkJICog ZW50cnkuICBJZiB3ZSBkb24ndCBmaW5kIGFueXRoaW5nLCBsb29wIGFyb3VuZCBhbmQgZ3JhYiB0 aGUKIAkJCSAqIG5leHQgVElEIGZyb20gdGhlIGluZGV4LgogCQkJICovCi0JCQlpZiAoaGVhcGFt X2luZGV4X2ZldGNoX2hlYXBfaXRlbShzY2FuLCBoc2Nhbiwgc2xvdCwKLQkJCQkJCQkJCQkJIGhl YXBfY29udGludWUpKQorCQkJaWYgKGhlYXBhbV9pbmRleF9mZXRjaF9oZWFwX2l0ZW0oc2Nhbiwg aHNjYW4sIHNsb3QsIGhlYXBfY29udGludWUsCisJCQkJCQkJCQkJCSBhbWdldGJhdGNoKSkKIAkJ CQlyZXR1cm4gdHJ1ZTsKIAkJfQogCX0KQEAgLTUyMiwxNiArOTcxLDQwIEBAIGhlYXBhbV9pbmRl eF9nZXRuZXh0X3Nsb3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlv biwKIAlyZXR1cm4gZmFsc2U7CiB9CiAKKy8qIHhzX2dldG5leHRfc2xvdCBjYWxsYmFjazogYW1n ZXRiYXRjaCwgcGxhaW4gaW5kZXggc2NhbiAqLworc3RhdGljIHBnX2F0dHJpYnV0ZV9ob3QgYm9v bAoraGVhcGFtX2luZGV4X3BsYWluX2JhdGNoX2dldG5leHRfc2xvdChJbmRleFNjYW5EZXNjIHNj YW4sCisJCQkJCQkJCQkgIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJCQkJICBUdXBs ZVRhYmxlU2xvdCAqc2xvdCkKK3sKKwlBc3NlcnQoIXNjYW4tPnhzX3dhbnRfaXR1cCAmJiBzY2Fu LT51c2ViYXRjaHJpbmcpOworCUFzc2VydChzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+ YW1nZXRiYXRjaCAhPSBOVUxMKTsKKworCXJldHVybiBoZWFwYW1faW5kZXhfZ2V0bmV4dF9zbG90 KHNjYW4sIGRpcmVjdGlvbiwgc2xvdCwgZmFsc2UsIHRydWUpOworfQorCisvKiB4c19nZXRuZXh0 X3Nsb3QgY2FsbGJhY2s6IGFtZ2V0YmF0Y2gsIGluZGV4LW9ubHkgc2NhbiAqLworc3RhdGljIHBn X2F0dHJpYnV0ZV9ob3QgYm9vbAoraGVhcGFtX2luZGV4X29ubHlfYmF0Y2hfZ2V0bmV4dF9zbG90 KEluZGV4U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCQkJCSBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwK KwkJCQkJCQkJCSBUdXBsZVRhYmxlU2xvdCAqc2xvdCkKK3sKKwlBc3NlcnQoc2Nhbi0+eHNfd2Fu dF9pdHVwICYmIHNjYW4tPnVzZWJhdGNocmluZyk7CisJQXNzZXJ0KHNjYW4tPmluZGV4UmVsYXRp b24tPnJkX2luZGFtLT5hbWdldGJhdGNoICE9IE5VTEwpOworCisJcmV0dXJuIGhlYXBhbV9pbmRl eF9nZXRuZXh0X3Nsb3Qoc2NhbiwgZGlyZWN0aW9uLCBzbG90LCB0cnVlLCB0cnVlKTsKK30KKwog LyogeHNfZ2V0bmV4dF9zbG90IGNhbGxiYWNrOiBhbWdldHR1cGxlLCBwbGFpbiBpbmRleCBzY2Fu ICovCiBzdGF0aWMgcGdfYXR0cmlidXRlX2hvdCBib29sCiBoZWFwYW1faW5kZXhfcGxhaW5fdHVw bGVfZ2V0bmV4dF9zbG90KEluZGV4U2NhbkRlc2Mgc2NhbiwKIAkJCQkJCQkJCSAgU2NhbkRpcmVj dGlvbiBkaXJlY3Rpb24sCiAJCQkJCQkJCQkgIFR1cGxlVGFibGVTbG90ICpzbG90KQogewotCUFz c2VydCghc2Nhbi0+eHNfd2FudF9pdHVwKTsKKwlBc3NlcnQoIXNjYW4tPnhzX3dhbnRfaXR1cCAm JiAhc2Nhbi0+dXNlYmF0Y2hyaW5nKTsKIAlBc3NlcnQoc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRf aW5kYW0tPmFtZ2V0dHVwbGUgIT0gTlVMTCk7CiAKLQlyZXR1cm4gaGVhcGFtX2luZGV4X2dldG5l eHRfc2xvdChzY2FuLCBkaXJlY3Rpb24sIHNsb3QsIGZhbHNlKTsKKwlyZXR1cm4gaGVhcGFtX2lu ZGV4X2dldG5leHRfc2xvdChzY2FuLCBkaXJlY3Rpb24sIHNsb3QsIGZhbHNlLCBmYWxzZSk7CiB9 CiAKIC8qIHhzX2dldG5leHRfc2xvdCBjYWxsYmFjazogYW1nZXR0dXBsZSwgaW5kZXgtb25seSBz Y2FuICovCkBAIC01NDAsOCArMTAxMyw4IEBAIGhlYXBhbV9pbmRleF9vbmx5X3R1cGxlX2dldG5l eHRfc2xvdChJbmRleFNjYW5EZXNjIHNjYW4sCiAJCQkJCQkJCQkgU2NhbkRpcmVjdGlvbiBkaXJl Y3Rpb24sCiAJCQkJCQkJCQkgVHVwbGVUYWJsZVNsb3QgKnNsb3QpCiB7Ci0JQXNzZXJ0KHNjYW4t PnhzX3dhbnRfaXR1cCk7CisJQXNzZXJ0KHNjYW4tPnhzX3dhbnRfaXR1cCAmJiAhc2Nhbi0+dXNl YmF0Y2hyaW5nKTsKIAlBc3NlcnQoc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtZ2V0 dHVwbGUgIT0gTlVMTCk7CiAKLQlyZXR1cm4gaGVhcGFtX2luZGV4X2dldG5leHRfc2xvdChzY2Fu LCBkaXJlY3Rpb24sIHNsb3QsIHRydWUpOworCXJldHVybiBoZWFwYW1faW5kZXhfZ2V0bmV4dF9z bG90KHNjYW4sIGRpcmVjdGlvbiwgc2xvdCwgdHJ1ZSwgZmFsc2UpOwogfQpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L01ha2VmaWxlIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2lu ZGV4L01ha2VmaWxlCmluZGV4IDZmMmUzMDYxYS4uZTZkNjgxYjQwIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9hY2Nlc3MvaW5kZXgvTWFrZWZpbGUKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2lu ZGV4L01ha2VmaWxlCkBAIC0xNiw2ICsxNiw3IEBAIE9CSlMgPSBcCiAJYW1hcGkubyBcCiAJYW12 YWxpZGF0ZS5vIFwKIAlnZW5hbS5vIFwKLQlpbmRleGFtLm8KKwlpbmRleGFtLm8gXAorCWluZGV4 YmF0Y2gubwogCiBpbmNsdWRlICQodG9wX3NyY2Rpcikvc3JjL2JhY2tlbmQvY29tbW9uLm1rCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvYW1hcGkuYyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy9pbmRleC9hbWFwaS5jCmluZGV4IGVmYTAwNzAzMC4uZDRhZGJiZWIyIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvYW1hcGkuYworKysgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvaW5kZXgvYW1hcGkuYwpAQCAtNTUsNiArNTUsMTEgQEAgR2V0SW5kZXhBbVJvdXRpbmUo T2lkIGFtaGFuZGxlcikKIAlBc3NlcnQocm91dGluZS0+YW1yZXNjYW4gIT0gTlVMTCk7CiAJQXNz ZXJ0KHJvdXRpbmUtPmFtZW5kc2NhbiAhPSBOVUxMKTsKIAorCS8qIEFzc2VydCB0aGF0IEFNIGRv ZXNuJ3QgaGF2ZSBhbiBpbnZhbGlkIGNvbWJpbmF0aW9uIG9mIGNhbGxiYWNrcyAqLworCUFzc2Vy dCgocm91dGluZS0+YW1nZXRiYXRjaCAhPSBOVUxMKSA9PSAocm91dGluZS0+YW11bmd1YXJkYmF0 Y2ggIT0gTlVMTCkpOworCUFzc2VydChyb3V0aW5lLT5hbWtpbGxpdGVtc2JhdGNoID09IE5VTEwg fHwgcm91dGluZS0+YW1nZXRiYXRjaCAhPSBOVUxMKTsKKwlBc3NlcnQocm91dGluZS0+YW1nZXRi YXRjaCAhPSBOVUxMIHx8IHJvdXRpbmUtPmFtcG9zcmVzZXQgPT0gTlVMTCk7CisKIAlyZXR1cm4g cm91dGluZTsKIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFt LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYwppbmRleCBhY2M5ZjNlNmEuLjc4 ZmZiYWIzMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMKKysr IGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMKQEAgLTg5LDYgKzg5LDggQEAgUmVs YXRpb25HZXRJbmRleFNjYW4oUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwgaW50IG5rZXlzLCBpbnQg bm9yZGVyYnlzKQogCXNjYW4tPnhzX3NuYXBzaG90ID0gSW52YWxpZFNuYXBzaG90OwkvKiBjYWxs ZXIgbXVzdCBpbml0aWFsaXplIHRoaXMgKi8KIAlzY2FuLT5udW1iZXJPZktleXMgPSBua2V5czsK IAlzY2FuLT5udW1iZXJPZk9yZGVyQnlzID0gbm9yZGVyYnlzOworCXNjYW4tPnVzZWJhdGNocmlu ZyA9IGZhbHNlOyAvKiBzZXQgbGF0ZXIgZm9yIGFtZ2V0YmF0Y2ggY2FsbGVycyAqLworCW1lbXNl dCgmc2Nhbi0+YmF0Y2hjYWNoZSwgMCwgc2l6ZW9mKHNjYW4tPmJhdGNoY2FjaGUpKTsKIAogCS8q CiAJICogV2UgYWxsb2NhdGUga2V5IHdvcmtzcGFjZSBoZXJlLCBidXQgaXQgd29uJ3QgZ2V0IGZp bGxlZCB1bnRpbCBhbXJlc2Nhbi4KQEAgLTEyNiw2ICsxMjgsMTAgQEAgUmVsYXRpb25HZXRJbmRl eFNjYW4oUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwgaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzKQog CXNjYW4tPnhzX2hpdHVwID0gTlVMTDsKIAlzY2FuLT54c19oaXR1cGRlc2MgPSBOVUxMOwogCisJ c2Nhbi0+YmF0Y2hfaW5kZXhfb3BhcXVlX3NpemUgPSAwOworCXNjYW4tPmJhdGNoX3R1cGxlc193 b3Jrc3BhY2UgPSAwOworCXNjYW4tPmJhdGNoX2Jhc2Vfb2Zmc2V0ID0gMDsKKwogCXNjYW4tPnhz X3Zpc2l0ZWRfcGFnZXNfbGltaXQgPSAwOwogCiAJcmV0dXJuIHNjYW47CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2lu ZGV4L2luZGV4YW0uYwppbmRleCAzZmFjNGMzMGQuLjE0YTYxMTQ5OCAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv aW5kZXgvaW5kZXhhbS5jCkBAIC0xMyw3ICsxMyw3IEBACiAgKiBJTlRFUkZBQ0UgUk9VVElORVMK ICAqCQlpbmRleF9vcGVuCQktIG9wZW4gYW4gaW5kZXggcmVsYXRpb24gYnkgcmVsYXRpb24gT0lE CiAgKgkJaW5kZXhfY2xvc2UJCS0gY2xvc2UgYW4gaW5kZXggcmVsYXRpb24KLSAqCQlpbmRleF9i ZWdpbnNjYW4gLSBzdGFydCBhIHNjYW4gb2YgYW4gaW5kZXggd2l0aCBhbWdldHR1cGxlCisgKgkJ aW5kZXhfYmVnaW5zY2FuIC0gc3RhcnQgYSBzY2FuIG9mIGFuIGluZGV4IHdpdGggYW1nZXRiYXRj aC9hbWdldHR1cGxlCiAgKgkJaW5kZXhfYmVnaW5zY2FuX2JpdG1hcCAtIHN0YXJ0IGEgc2NhbiBv ZiBhbiBpbmRleCB3aXRoIGFtZ2V0Yml0bWFwCiAgKgkJaW5kZXhfcmVzY2FuCS0gcmVzdGFydCBh IHNjYW4gb2YgYW4gaW5kZXgKICAqCQlpbmRleF9lbmRzY2FuCS0gZW5kIGEgc2NhbgpAQCAtMjQs NyArMjQsNiBAQAogICoJCWluZGV4X3BhcmFsbGVsc2Nhbl9pbml0aWFsaXplIC0gaW5pdGlhbGl6 ZSBwYXJhbGxlbCBzY2FuCiAgKgkJaW5kZXhfcGFyYWxsZWxyZXNjYW4gIC0gKHJlKXN0YXJ0IGEg cGFyYWxsZWwgc2NhbiBvZiBhbiBpbmRleAogICoJCWluZGV4X2JlZ2luc2Nhbl9wYXJhbGxlbCAt IGpvaW4gcGFyYWxsZWwgaW5kZXggc2NhbgotICoJCWluZGV4X2dldG5leHRfdGlkCS0gYW1nZXR0 dXBsZSB0YWJsZSBBTSBoZWxwZXIgcm91dGluZQogICoJCWluZGV4X2dldGJpdG1hcCAtIGdldCBh bGwgdHVwbGVzIGZyb20gYSBzY2FuCiAgKgkJaW5kZXhfYnVsa19kZWxldGUJLSBidWxrIGRlbGV0 aW9uIG9mIGluZGV4IHR1cGxlcwogICoJCWluZGV4X3ZhY3V1bV9jbGVhbnVwCS0gcG9zdC1kZWxl dGlvbiBjbGVhbnVwIG9mIGFuIGluZGV4CkBAIC0yNzgsNiArMjc3LDcgQEAgaW5kZXhfYmVnaW5z Y2FuX2ludGVybmFsKFJlbGF0aW9uIGluZGV4UmVsYXRpb24sIFJlbGF0aW9uIGhlYXBSZWxhdGlv biwKIAlzY2FuLT54c190ZW1wX3NuYXAgPSB0ZW1wX3NuYXA7CiAKIAlzY2FuLT54c19zbmFwc2hv dCA9IHNuYXBzaG90OworCXNjYW4tPk1WQ0NTY2FuID0gSXNNVkNDTGlrZVNuYXBzaG90KHNuYXBz aG90KTsKIAlzY2FuLT5pbnN0cnVtZW50ID0gaW5zdHJ1bWVudDsKIAogCS8qCkBAIC0yODksNiAr Mjg5LDcgQEAgaW5kZXhfYmVnaW5zY2FuX2ludGVybmFsKFJlbGF0aW9uIGluZGV4UmVsYXRpb24s IFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKIAkJc2Nhbi0+aGVhcFJlbGF0aW9uID0gaGVhcFJlbGF0 aW9uOwogCQlzY2FuLT54c193YW50X2l0dXAgPSBpbmRleF9vbmx5X3NjYW47CiAJCXNjYW4tPnhz X2hlYXBfY29udGludWUgPSBmYWxzZTsKKwkJc2Nhbi0+YmF0Y2hJbW1lZGlhdGVVbmd1YXJkID0g KHNjYW4tPk1WQ0NTY2FuICYmICFpbmRleF9vbmx5X3NjYW4pOwogCiAJCS8qIHByZXBhcmUgdG8g ZmV0Y2ggaW5kZXggbWF0Y2hlcyBmcm9tIHRhYmxlICovCiAJCXNjYW4tPnhzX2hlYXBmZXRjaCA9 IHRhYmxlX2luZGV4X2ZldGNoX2JlZ2luKHNjYW4sIGZsYWdzKTsKQEAgLTI5NywxMSArMjk4LDE5 IEBAIGluZGV4X2JlZ2luc2Nhbl9pbnRlcm5hbChSZWxhdGlvbiBpbmRleFJlbGF0aW9uLCBSZWxh dGlvbiBoZWFwUmVsYXRpb24sCiAJCUFzc2VydChzY2FuLT54c19nZXRuZXh0X3Nsb3QgIT0gTlVM TCk7CiAJfQogCisJLyoKKwkgKiBCaXRtYXAgaW5kZXggc2NhbnMgc2hvdWxkIG5ldmVyIHVzZSBh IGJhdGNoIHJpbmcgYnVmZmVyICh0aG91Z2ggY2FuIHVzZQorCSAqIHRoZSBzY2FuJ3MgYmF0Y2gg Y2FjaGUpLiAgUGxhaW4gaW5kZXggc2NhbnMgKGFuZCBpbmRleC1vbmx5IHNjYW5zKQorCSAqIHNo b3VsZCBvbmx5IHVzZSBhIGJhdGNoIHJpbmcgYnVmZmVyIHdpdGggYW4gYW1nZXRiYXRjaCBpbmRl eCBBTS4KKwkgKi8KKwlBc3NlcnQoIXNjYW4tPnhzX2hlYXBmZXRjaCA/ICFzY2FuLT51c2ViYXRj aHJpbmcgOgorCQkgICAoaW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtZ2V0YmF0Y2ggIT0gTlVM TCkgPT0gc2Nhbi0+dXNlYmF0Y2hyaW5nKTsKKwogCXJldHVybiBzY2FuOwogfQogCiAvKgotICog aW5kZXhfYmVnaW5zY2FuIC0gc3RhcnQgYSBzY2FuIG9mIGFuIGluZGV4IHdpdGggYW1nZXR0dXBs ZQorICogaW5kZXhfYmVnaW5zY2FuIC0gc3RhcnQgYSBzY2FuIG9mIGFuIGluZGV4IHdpdGggYW1n ZXRiYXRjaC9hbWdldHR1cGxlCiAgKgogICogQ2FsbGVyIG11c3QgYmUgaG9sZGluZyBzdWl0YWJs ZSBsb2NrcyBvbiB0aGUgaGVhcCBhbmQgdGhlIGluZGV4LgogICovCkBAIC0zOTUsNyArNDA0LDIx IEBAIGluZGV4X2VuZHNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuKQogCVNDQU5fQ0hFQ0tTOwogCUNI RUNLX1NDQU5fUFJPQ0VEVVJFKGFtZW5kc2Nhbik7CiAKLQkvKiBSZWxlYXNlIHJlc291cmNlcyAo bGlrZSBidWZmZXIgcGlucykgZnJvbSB0YWJsZSBhY2Nlc3NlcyAqLworCS8qCisJICogYW1nZXRi aXRtYXAgc2NhbnMgb2YgYW4gaW5kZXggQU0gdGhhdCBzdXBwb3J0cyBhbWdldGJhdGNoIG1ha2Ug bGltaXRlZAorCSAqIHVzZSBvZiB0aGUgc2NhbidzIGJhdGNoIGNhY2hlLiAgQ2hlY2sgZm9yIHRo YXQuCisJICovCisJaWYgKCFzY2FuLT51c2ViYXRjaHJpbmcgJiYgc2Nhbi0+YmF0Y2hjYWNoZVsw XSAhPSBOVUxMKQorCXsKKwkJQXNzZXJ0KHNjYW4tPnhzX2hlYXBmZXRjaCA9PSBOVUxMKTsKKwkJ QXNzZXJ0KHNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbWdldGJhdGNoICE9IE5VTEwp OworCQlwZnJlZShpbmRleF9zY2FuX2JhdGNoX2Jhc2Uoc2Nhbiwgc2Nhbi0+YmF0Y2hjYWNoZVsw XSkpOworCX0KKworCS8qCisJICogUmVsZWFzZSByZXNvdXJjZXMgKGxpa2UgYnVmZmVyIHBpbnMg YW5kIGJhdGNoIHJpbmcgYnVmZmVyKSBoZWxkIGJ5CisJICogdGFibGUgQU0gZm9yIGluZGV4IHNj YW4KKwkgKi8KIAlpZiAoc2Nhbi0+eHNfaGVhcGZldGNoKQogCXsKIAkJdGFibGVfaW5kZXhfZmV0 Y2hfZW5kKHNjYW4pOwpAQCAtNDIzLDI0ICs0NDYsMjQgQEAgdm9pZAogaW5kZXhfbWFya3BvcyhJ bmRleFNjYW5EZXNjIHNjYW4pCiB7CiAJU0NBTl9DSEVDS1M7Ci0JQ0hFQ0tfU0NBTl9QUk9DRURV UkUoYW1tYXJrcG9zKTsKKwlDSEVDS19TQ0FOX1BST0NFRFVSRShhbWdldGJhdGNoKTsKIAotCXNj YW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbW1hcmtwb3Moc2Nhbik7CisJdGFibGVfaW5k ZXhfZmV0Y2hfbWFya3BvcyhzY2FuKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLQogICoJCWlu ZGV4X3Jlc3RycG9zCS0gcmVzdG9yZSBhIHNjYW4gcG9zaXRpb24KICAqCi0gKiBOT1RFOiB0aGlz IG9ubHkgcmVzdG9yZXMgdGhlIGludGVybmFsIHNjYW4gc3RhdGUgb2YgdGhlIGluZGV4IEFNLiAg U2VlCisgKiBOT1RFOiB0aGlzIG9ubHkgcmVzdG9yZXMgdGhlIGJhdGNoIHBvc2l0aW9uYWwgc3Rh dGUgb2YgdGhlIHRhYmxlIEFNLiAgU2VlCiAgKiBjb21tZW50cyBmb3IgRXhlY1Jlc3RyUG9zKCku CiAgKgogICogTk9URTogRm9yIGhlYXAsIGluIHRoZSBwcmVzZW5jZSBvZiBIT1QgY2hhaW5zLCBt YXJrL3Jlc3RvcmUgb25seSB3b3JrcwogICogY29ycmVjdGx5IGlmIHRoZSBzY2FuJ3Mgc25hcHNo b3QgaXMgTVZDQy1zYWZlOyB0aGF0IGVuc3VyZXMgdGhhdCB0aGVyZSdzIGF0CiAgKiBtb3N0IG9u ZSByZXR1cm5hYmxlIHR1cGxlIGluIGVhY2ggSE9UIGNoYWluLCBhbmQgc28gcmVzdG9yaW5nIHRo ZSBwcmlvcgotICogc3RhdGUgYXQgdGhlIGdyYW51bGFyaXR5IG9mIHRoZSBpbmRleCBBTSBpcyBz dWZmaWNpZW50LiAgU2luY2UgdGhlIG9ubHkKLSAqIGN1cnJlbnQgdXNlciBvZiBtYXJrL3Jlc3Rv cmUgZnVuY3Rpb25hbGl0eSBpcyBub2RlTWVyZ2Vqb2luLmMsIHRoaXMKLSAqIGVmZmVjdGl2ZWx5 IG1lYW5zIHRoYXQgbWVyZ2Utam9pbiBwbGFucyBvbmx5IHdvcmsgZm9yIE1WQ0Mgc25hcHNob3Rz LiAgVGhpcwotICogY291bGQgYmUgZml4ZWQgaWYgbmVjZXNzYXJ5LCBidXQgZm9yIG5vdyBpdCBz ZWVtcyB1bmltcG9ydGFudC4KKyAqIHN0YXRlIGF0IHRoZSBzY2FuIGl0ZW0gZ3JhbnVsYXJpdHkg aXMgc3VmZmljaWVudC4gIFNpbmNlIHRoZSBvbmx5IGN1cnJlbnQKKyAqIHVzZXIgb2YgbWFyay9y ZXN0b3JlIGZ1bmN0aW9uYWxpdHkgaXMgbm9kZU1lcmdlam9pbi5jLCB0aGlzIGVmZmVjdGl2ZWx5 CisgKiBtZWFucyB0aGF0IG1lcmdlLWpvaW4gcGxhbnMgb25seSB3b3JrIGZvciBNVkNDIHNuYXBz aG90cy4gIFRoaXMgY291bGQgYmUKKyAqIGZpeGVkIGlmIG5lY2Vzc2FyeSwgYnV0IGZvciBub3cg aXQgc2VlbXMgdW5pbXBvcnRhbnQuCiAgKiAtLS0tLS0tLS0tLS0tLS0tCiAgKi8KIHZvaWQKQEAg LTQ0OSwxNiArNDcyLDEyIEBAIGluZGV4X3Jlc3RycG9zKEluZGV4U2NhbkRlc2Mgc2NhbikKIAlB c3NlcnQoSXNNVkNDTGlrZVNuYXBzaG90KHNjYW4tPnhzX3NuYXBzaG90KSk7CiAKIAlTQ0FOX0NI RUNLUzsKLQlDSEVDS19TQ0FOX1BST0NFRFVSRShhbXJlc3RycG9zKTsKKwlDSEVDS19TQ0FOX1BS T0NFRFVSRShhbWdldGJhdGNoKTsKIAotCS8qIHJlc2V0IHRhYmxlIEFNIHN0YXRlIGZvciByZXN0 b3JpbmcgdGhlIG1hcmtlZCBwb3NpdGlvbiAqLwotCWlmIChzY2FuLT54c19oZWFwZmV0Y2gpCi0J CXRhYmxlX2luZGV4X2ZldGNoX3Jlc2V0KHNjYW4pOwotCi0Jc2Nhbi0+a2lsbF9wcmlvcl90dXBs ZSA9IGZhbHNlOyAvKiBmb3Igc2FmZXR5ICovCisJQXNzZXJ0KCFzY2FuLT5raWxsX3ByaW9yX3R1 cGxlKTsgLyogbm90IHVzZWQgd2l0aCBhbWdldGJhdGNoICovCiAJc2Nhbi0+eHNfaGVhcF9jb250 aW51ZSA9IGZhbHNlOwogCi0Jc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtcmVzdHJw b3Moc2Nhbik7CisJdGFibGVfaW5kZXhfZmV0Y2hfcmVzdHJwb3Moc2Nhbik7CiB9CiAKIC8qCkBA IC02MTUsNTYgKzYzNCw2IEBAIGluZGV4X2JlZ2luc2Nhbl9wYXJhbGxlbChSZWxhdGlvbiBoZWFw cmVsLCBSZWxhdGlvbiBpbmRleHJlbCwKIAkJCQkJCQkJCWluZGV4X29ubHlfc2NhbiwgdHJ1ZSwg ZmxhZ3MpOwogfQogCi0vKiAtLS0tLS0tLS0tLS0tLS0tCi0gKiBpbmRleF9nZXRuZXh0X3RpZCAt IGFtZ2V0dHVwbGUgaW50ZXJmYWNlCi0gKgotICogVGhlIHJlc3VsdCBpcyB0aGUgbmV4dCBUSUQg c2F0aXNmeWluZyB0aGUgc2NhbiBrZXlzLAotICogb3IgTlVMTCBpZiBubyBtb3JlIG1hdGNoaW5n IHR1cGxlcyBleGlzdC4KLSAqCi0gKiBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBieSB0YWJs ZSBBTSBhbWdldHR1cGxlLWJhc2VkIGluZGV4IHNjYW4KLSAqIGNhbGxiYWNrcy4KLSAqIC0tLS0t LS0tLS0tLS0tLS0KLSAqLwotSXRlbVBvaW50ZXIKLWluZGV4X2dldG5leHRfdGlkKEluZGV4U2Nh bkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pCi17Ci0JYm9vbAkJZm91bmQ7Ci0K LQlTQ0FOX0NIRUNLUzsKLQlDSEVDS19TQ0FOX1BST0NFRFVSRShhbWdldHR1cGxlKTsKLQotCS8q IFhYWDogd2Ugc2hvdWxkIGFzc2VydCB0aGF0IGEgc25hcHNob3QgaXMgcHVzaGVkIG9yIHJlZ2lz dGVyZWQgKi8KLQlBc3NlcnQoVHJhbnNhY3Rpb25JZElzVmFsaWQoUmVjZW50WG1pbikpOwotCi0J LyoKLQkgKiBUaGUgQU0ncyBhbWdldHR1cGxlIHByb2MgZmluZHMgdGhlIG5leHQgaW5kZXggZW50 cnkgbWF0Y2hpbmcgdGhlIHNjYW4KLQkgKiBrZXlzLCBhbmQgcHV0cyB0aGUgVElEIGludG8gc2Nh bi0+eHNfaGVhcHRpZC4gIEl0IHNob3VsZCBhbHNvIHNldAotCSAqIHNjYW4tPnhzX3JlY2hlY2sg YW5kIHBvc3NpYmx5IHNjYW4tPnhzX2l0dXAvc2Nhbi0+eHNfaGl0dXAsIHRob3VnaCB3ZQotCSAq IHBheSBubyBhdHRlbnRpb24gdG8gdGhvc2UgZmllbGRzIGhlcmUuCi0JICovCi0JZm91bmQgPSBz Y2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1nZXR0dXBsZShzY2FuLCBkaXJlY3Rpb24p OwotCi0JLyogUmVzZXQga2lsbCBmbGFnIGltbWVkaWF0ZWx5IGZvciBzYWZldHkgKi8KLQlzY2Fu LT5raWxsX3ByaW9yX3R1cGxlID0gZmFsc2U7Ci0Jc2Nhbi0+eHNfaGVhcF9jb250aW51ZSA9IGZh bHNlOwotCi0JLyogSWYgd2UncmUgb3V0IG9mIGluZGV4IGVudHJpZXMsIHdlJ3JlIGRvbmUgKi8K LQlpZiAoIWZvdW5kKQotCXsKLQkJLyogcmVzZXQgdGFibGUgQU0gc3RhdGUgKi8KLQkJaWYgKHNj YW4tPnhzX2hlYXBmZXRjaCkKLQkJCXRhYmxlX2luZGV4X2ZldGNoX3Jlc2V0KHNjYW4pOwotCi0J CXJldHVybiBOVUxMOwotCX0KLQlBc3NlcnQoSXRlbVBvaW50ZXJJc1ZhbGlkKCZzY2FuLT54c19o ZWFwdGlkKSk7Ci0KLQlwZ3N0YXRfY291bnRfaW5kZXhfdHVwbGVzKHNjYW4tPmluZGV4UmVsYXRp b24sIDEpOwotCi0JLyogUmV0dXJuIHRoZSBUSUQgb2YgdGhlIHR1cGxlIHdlIGZvdW5kLiAqLwot CXJldHVybiAmc2Nhbi0+eHNfaGVhcHRpZDsKLX0KLQogLyogLS0tLS0tLS0tLS0tLS0tLQogICoJ CWluZGV4X2dldGJpdG1hcCAtIGdldCBhbGwgdHVwbGVzIGF0IG9uY2UgZnJvbSBhbiBpbmRleCBz Y2FuCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YmF0Y2gu YyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGJhdGNoLmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwLi5jNjYxYjcwZTUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMv YmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhiYXRjaC5jCkBAIC0wLDAgKzEsNzQyIEBACisvKi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAqCisgKiBpbmRleGJhdGNoLmMKKyAqCSAgQmF0Y2gtYmFzZWQgaW5k ZXggc2NhbiBpbmZyYXN0cnVjdHVyZSBmb3IgdGhlIGFtZ2V0YmF0Y2ggaW50ZXJmYWNlLgorICoK KyAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIHRoZSBjb3JlIGluZnJhc3RydWN0dXJlIGZvciBiYXRj aC1iYXNlZCBpbmRleCBzY2FucywKKyAqIHdoaWNoIGFsbG93IGluZGV4IEFNcyB0byByZXR1cm4g bXVsdGlwbGUgbWF0Y2hpbmcgVElEcyBwZXIgcGFnZSBpbiBhIHNpbmdsZQorICogY2FsbC4gIFRo ZSBiYXRjaCByaW5nIGJ1ZmZlciBpcyBvd25lZCBieSB0aGUgdGFibGUgQU0uCisgKgorICogVGhl IHJpbmcgYnVmZmVyIGxvYWRzIGJhdGNoZXMgaW4gaW5kZXgga2V5IHNwYWNlL2luZGV4IHNjYW4g b3JkZXIuCisgKgorICogTW9zdCBmdW5jdGlvbnMgaGVyZSBhcmUgdGFibGUgQU0gdXRpbGl0aWVz ICh0YWJsZWFtX3V0aWxfKiksIGNhbGxlZCBieQorICogdGFibGUgQU1zIGR1cmluZyBhbWdldGJh dGNoIGluZGV4IHNjYW5zLiAgVGhlc2UgbWFuYWdlIHRoZSBiYXRjaCByaW5nCisgKiBidWZmZXIn cyBsaWZlY3ljbGUgYW5kIHBvc2l0aW9uYWwgc3RhdGUsIGFuZCBoZWxwIHdpdGggY2VydGFpbiBh c3BlY3RzIG9mCisgKiByZXNvdXJjZSBtYW5hZ2VtZW50LiAgVGhlIHRhYmxlIEFNIHVzZXMgc2Nh blBvcyAoYW5kIGl0cyBzY2FuQmF0Y2ggYmF0Y2gpCisgKiB0byByZXR1cm4gaXRlbXMgZnJvbSBi YXRjaGVzIHJldHVybmVkIGJ5IGFtZ2V0YmF0Y2guCisgKgorICogVGhlcmUgYXJlIGFsc28gc29t ZSBpbmRleCBBTSB1dGlsaXRpZXMgKGluZGV4YW1fdXRpbF8qKSwgY2FsbGVkIGJ5IGluZGV4Cisg KiBBTXMgdGhhdCBpbXBsZW1lbnQgdGhlIGFtZ2V0YmF0Y2ggaW50ZXJmYWNlLCB0byBoZWxwIG1h bmFnZSByZXNvdXJjZXMgbGlrZQorICogbWVtb3J5LCBsb2NrcywgYW5kIGJ1ZmZlciBwaW5zLiAg SW5kZXggQU1zIGZyZWUgYW5kIHVubG9jayBiYXRjaGVzIGFzCisgKiBkZXNjcmliZWQgaW4gaW5k ZXhhbS5zZ21sLgorICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDI2LCBQb3N0 Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChj KSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKgor ICogSURFTlRJRklDQVRJT04KKyAqCSAgc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YmF0 Y2guYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpbmNsdWRlICJwb3N0Z3Jlcy5o IgorCisjaW5jbHVkZSAiYWNjZXNzL2FtYXBpLmgiCisjaW5jbHVkZSAiYWNjZXNzL2luZGV4YmF0 Y2guaCIKKyNpbmNsdWRlICJhY2Nlc3MvdGFibGVhbS5oIgorI2luY2x1ZGUgImNvbW1vbi9pbnQu aCIKKyNpbmNsdWRlICJsaWIvcXVuaXF1ZS5oIgorCitzdGF0aWMgdm9pZCByZWxlYXNlX2FuZF91 bmd1YXJkX2JhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gsCisJ CQkJCQkJCQkgIGJvb2wgYWxsb3dfY2FjaGUpOworc3RhdGljIGlubGluZSBib29sIGJhdGNoX2Nh Y2hlX3N0b3JlKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpOworc3Rh dGljIGludAliYXRjaF9jb21wYXJlX2ludChjb25zdCB2b2lkICp2YSwgY29uc3Qgdm9pZCAqdmIp OworCisvKgorICogUmVzZXQgcmluZyBidWZmZXIgYW5kIHJlbGF0ZWQgcG9zaXRpb25hbCBzdGF0 ZSB1c2VkIGR1cmluZyBhbiBhbWdldGJhdGNoCisgKiBpbmRleCBzY2FuCisgKi8KK3ZvaWQKK3Rh YmxlYW1fdXRpbF9iYXRjaHNjYW5fcmVzZXQoSW5kZXhTY2FuRGVzYyBzY2FuLCBib29sIGVuZHNj YW4pCit7CisJQmF0Y2hSaW5nQnVmZmVyICpiYXRjaHJpbmdidWYgPSAmc2Nhbi0+YmF0Y2hyaW5n YnVmOworCUluZGV4U2NhbkJhdGNoIG1hcmtCYXRjaCA9IGJhdGNocmluZ2J1Zi0+bWFya0JhdGNo OworCWJvb2wJCW1hcmtCYXRjaEZyZWVkID0gZmFsc2U7CisKKwliYXRjaHJpbmdidWYtPnNjYW5Q b3MudmFsaWQgPSBmYWxzZTsKKwliYXRjaHJpbmdidWYtPm1hcmtQb3MudmFsaWQgPSBmYWxzZTsK KworCWZvciAodWludDggaSA9IGJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoOyBpICE9IGJhdGNocmlu Z2J1Zi0+bmV4dEJhdGNoOyBpKyspCisJeworCQlJbmRleFNjYW5CYXRjaCBiYXRjaCA9IGluZGV4 X3NjYW5fYmF0Y2goc2NhbiwgaSk7CisKKwkJaWYgKGJhdGNoID09IG1hcmtCYXRjaCkKKwkJCW1h cmtCYXRjaEZyZWVkID0gdHJ1ZTsKKworCQlyZWxlYXNlX2FuZF91bmd1YXJkX2JhdGNoKHNjYW4s IGJhdGNoLCAhZW5kc2Nhbik7CisJfQorCisJaWYgKCFtYXJrQmF0Y2hGcmVlZCAmJiB1bmxpa2Vs eShtYXJrQmF0Y2gpKQorCQlyZWxlYXNlX2FuZF91bmd1YXJkX2JhdGNoKHNjYW4sIG1hcmtCYXRj aCwgIWVuZHNjYW4pOworCisJYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2ggPSAwOworCWJhdGNocmlu Z2J1Zi0+bmV4dEJhdGNoID0gMDsKKwliYXRjaHJpbmdidWYtPm1hcmtCYXRjaCA9IE5VTEw7Cit9 CisKKy8qCisgKiBGcmVlIHJlc291cmNlcyBhdCBlbmQgb2YgYSBiYXRjaCBpbmRleCBzY2FuLgor ICoKKyAqIENhbGxlZCBieSB0YWJsZSBBTSB3aGVuIGFuIGluZGV4IHNjYW4gaXMgZW5kaW5nLCBy aWdodCBiZWZvcmUgdGhlIG93bmluZworICogc2NhbiBkZXNjcmlwdG9yIGdvZXMgYXdheS4gIENs ZWFucyB1cCBhbGwgYmF0Y2ggcmVsYXRlZCByZXNvdXJjZXMuCisgKi8KK3ZvaWQKK3RhYmxlYW1f dXRpbF9iYXRjaHNjYW5fZW5kKEluZGV4U2NhbkRlc2Mgc2NhbikKK3sKKwkvKiBGcmVlIGFsbCBy ZW1haW5pbmcgbG9hZGVkIGJhdGNoZXMgKGV2ZW4gbWFya0JhdGNoKSwgYnlwYXNzaW5nIGNhY2hl ICovCisJdGFibGVhbV91dGlsX2JhdGNoc2Nhbl9yZXNldChzY2FuLCB0cnVlKTsKKworCWZvciAo aW50IGkgPSAwOyBpIDwgSU5ERVhfU0NBTl9DQUNIRV9CQVRDSEVTOyBpKyspCisJeworCQlJbmRl eFNjYW5CYXRjaCBjYWNoZWQgPSBzY2FuLT5iYXRjaGNhY2hlW2ldOworCisJCWlmIChjYWNoZWQg PT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCisJCWlmIChjYWNoZWQtPmRlYWRJdGVtcykKKwkJCXBm cmVlKGNhY2hlZC0+ZGVhZEl0ZW1zKTsKKwkJcGZyZWUoaW5kZXhfc2Nhbl9iYXRjaF9iYXNlKHNj YW4sIGNhY2hlZCkpOworCX0KK30KKworLyoKKyAqIFNldCBhIG1hcmsgZnJvbSBzY2FuUG9zIHBv c2l0aW9uCisgKgorICogQ2FsbGVkIGZyb20gdGhlIHRhYmxlIEFNJ3MgaW5kZXhfZmV0Y2hfbWFy a3BvcyBjYWxsYmFjay4gIFNhdmVzIHRoZSBjdXJyZW50CisgKiBzY2FuIHBvc2l0aW9uIGFuZCBh c3NvY2lhdGVkIGJhdGNoIHNvIHRoYXQgdGhlIHNjYW4gY2FuIGJlIHJlc3RvcmVkIHRvIHRoaXMK KyAqIHBvaW50IGxhdGVyLCB2aWEgdGFibGVhbV91dGlsX2JhdGNoc2Nhbl9yZXN0b3JlX3Bvcy4g IFRoZSBtYXJrZWQgYmF0Y2ggaXMKKyAqIHJldGFpbmVkIGFuZCBub3QgZnJlZWQgdW50aWwgYSBu ZXcgbWFyayBpcyBzZXQgb3IgdGhlIHNjYW4gZW5kcyAob3IgdW50aWwKKyAqIHRoZSBtYXJrIGlz IHJlc3RvcmVkKS4KKyAqLwordm9pZAordGFibGVhbV91dGlsX2JhdGNoc2Nhbl9tYXJrX3BvcyhJ bmRleFNjYW5EZXNjIHNjYW4pCit7CisJQmF0Y2hSaW5nQnVmZmVyICpiYXRjaHJpbmdidWYgPSAm c2Nhbi0+YmF0Y2hyaW5nYnVmOworCUJhdGNoUmluZ0l0ZW1Qb3MgKnNjYW5Qb3MgPSAmc2Nhbi0+ YmF0Y2hyaW5nYnVmLnNjYW5Qb3M7CisJQmF0Y2hSaW5nSXRlbVBvcyAqbWFya1BvcyA9ICZiYXRj aHJpbmdidWYtPm1hcmtQb3M7CisJSW5kZXhTY2FuQmF0Y2ggc2NhbkJhdGNoID0gaW5kZXhfc2Nh bl9iYXRjaChzY2FuLCBzY2FuUG9zLT5iYXRjaCk7CisJSW5kZXhTY2FuQmF0Y2ggbWFya0JhdGNo ID0gYmF0Y2hyaW5nYnVmLT5tYXJrQmF0Y2g7CisJYm9vbAkJZnJlZU1hcmtCYXRjaDsKKworCUFz c2VydChzY2FuLT5NVkNDU2Nhbik7CisKKwkvKgorCSAqIEZyZWUgdGhlIHByZXZpb3VzIG1hcmsg YmF0Y2ggKGlmIGFueSkgLS0gYnV0IG9ubHkgaWYgaXQgaXNuJ3Qgb3VyCisJICogc2NhbkJhdGNo LiAgRGVmZW5zaXZlbHkgbWFrZSBzdXJlIHRoYXQgbWFya0JhdGNoIGlzbid0IHNvbWUgbGF0ZXIK KwkgKiBzdGlsbC1uZWVkZWQgYmF0Y2gsIHRvby4KKwkgKi8KKwlpZiAoIW1hcmtCYXRjaCB8fCBt YXJrQmF0Y2ggPT0gc2NhbkJhdGNoKQorCXsKKwkJLyogRGVmaW5pdGVseSBubyBtYXJrQmF0Y2gg dGhhdCB3ZSBzaG91bGQgZnJlZSBub3cgKi8KKwkJZnJlZU1hcmtCYXRjaCA9IGZhbHNlOworCX0K KwllbHNlIGlmIChsaWtlbHkoIWluZGV4X3NjYW5fYmF0Y2hfbG9hZGVkKHNjYW4sIG1hcmtQb3Mt PmJhdGNoKSkpCisJeworCQkvKiBEZWZpbml0ZWx5IGhhdmUgYSBuby1sb25nZXItbG9hZGVkIG1h cmtCYXRjaCB0byBmcmVlICovCisJCWZyZWVNYXJrQmF0Y2ggPSB0cnVlOworCX0KKwllbHNlCisJ eworCQkvKgorCQkgKiBpbmRleF9zY2FuX2JhdGNoX2xvYWRlZCBpbmRpY2F0ZXMgdGhhdCBtYXJr UG9zLT5iYXRjaCBpcyBsb2FkZWQsCisJCSAqIGJ1dCBhZnRlciAnYmF0Y2gnIHdyYXBzIGFyb3Vu ZCBhIHN0YWxlIGJhdGNoIG9mZnNldCBjYW4gYWxpYXMgYQorCQkgKiBjdXJyZW50bHktbG9hZGVk IHJhbmdlIChmYWxzZSBwb3NpdGl2ZSkuICBDb25maXJtIGJ5IGNoZWNraW5nCisJCSAqIHdoZXRo ZXIgdGhlIGJhdGNoIHBvaW50ZXIgaW4gbWFya1Bvcy0+YmF0Y2gncyBzbG90IHN0aWxsIG1hdGNo ZXMuCisJCSAqLworCQlmcmVlTWFya0JhdGNoID0gKGluZGV4X3NjYW5fYmF0Y2goc2NhbiwgbWFy a1Bvcy0+YmF0Y2gpICE9IG1hcmtCYXRjaCk7CisJfQorCisJaWYgKGZyZWVNYXJrQmF0Y2gpCisJ CXJlbGVhc2VfYW5kX3VuZ3VhcmRfYmF0Y2goc2NhbiwgbWFya0JhdGNoLCB0cnVlKTsKKworCS8q IGNvcHkgdGhlIHNjYW4ncyBwb3NpdGlvbiAqLworCWJhdGNocmluZ2J1Zi0+bWFya1BvcyA9ICpz Y2FuUG9zOworCWJhdGNocmluZ2J1Zi0+bWFya0JhdGNoID0gc2NhbkJhdGNoOworfQorCisvKgor ICogUmVzdG9yZSBzY2FuUG9zIHRvIHRoZSBwcmV2aW91c2x5IHNhdmVkIG1hcmtQb3MgcG9zaXRp b24uCisgKgorICogQ2FsbGVkIGZyb20gdGhlIHRhYmxlIEFNJ3MgaW5kZXhfZmV0Y2hfcmVzdHJw b3MgY2FsbGJhY2suICBSZXN0b3JlcyB0aGUKKyAqIHNjYW4gdG8gYSBwb3NpdGlvbiBzYXZlZCB1 c2luZyB0YWJsZWFtX3V0aWxfYmF0Y2hzY2FuX21hcmtfcG9zIGVhcmxpZXIuCisgKiBUaGUgc2Nh bidzIG1hcmtQb3MgYmVjb21lcyBpdHMgc2NhblBvcy4gIFRoZSBtYXJrZWQgYmF0Y2ggaXMgcmVz dG9yZWQgYXMKKyAqIHRoZSBjdXJyZW50IHNjYW5CYXRjaCB3aGVuIG5lZWRlZC4KKyAqCisgKiBX ZSBqdXN0IGRpc2NhcmQgYWxsIGJhdGNoZXMgKG90aGVyIHRoYW4gbWFya0JhdGNoL3Jlc3RvcmVk IHNjYW5CYXRjaCksCisgKiBleGNlcHQgd2hlbiBtYXJrQmF0Y2ggaXMgYWxyZWFkeSB0aGUgc2Nh bidzIGN1cnJlbnQgc2NhbkJhdGNoLgorICovCit2b2lkCit0YWJsZWFtX3V0aWxfYmF0Y2hzY2Fu X3Jlc3RvcmVfcG9zKEluZGV4U2NhbkRlc2Mgc2NhbikKK3sKKwlCYXRjaFJpbmdCdWZmZXIgKmJh dGNocmluZ2J1ZiA9ICZzY2FuLT5iYXRjaHJpbmdidWY7CisJQmF0Y2hSaW5nSXRlbVBvcyAqc2Nh blBvcyA9ICZzY2FuLT5iYXRjaHJpbmdidWYuc2NhblBvczsKKwlCYXRjaFJpbmdJdGVtUG9zICpt YXJrUG9zID0gJmJhdGNocmluZ2J1Zi0+bWFya1BvczsKKwlJbmRleFNjYW5CYXRjaCBtYXJrQmF0 Y2ggPSBiYXRjaHJpbmdidWYtPm1hcmtCYXRjaDsKKwlJbmRleFNjYW5CYXRjaCBzY2FuQmF0Y2gg PSBpbmRleF9zY2FuX2JhdGNoKHNjYW4sIHNjYW5Qb3MtPmJhdGNoKTsKKworCUFzc2VydChzY2Fu LT5NVkNDU2Nhbik7CisJQXNzZXJ0KHNjYW4tPnhzX2hlYXBmZXRjaCk7CisJQXNzZXJ0KG1hcmtQ b3MtPnZhbGlkKTsKKworCWlmIChzY2FuQmF0Y2ggPT0gbWFya0JhdGNoKQorCXsKKwkJLyogbWFy a0JhdGNoIGlzIGFscmVhZHkgc2NhbkJhdGNoOyBuZWVkbid0IGNoYW5nZSBiYXRjaHJpbmdidWYg Ki8KKwkJQXNzZXJ0KHNjYW5Qb3MtPmJhdGNoID09IG1hcmtQb3MtPmJhdGNoKTsKKworCQlzY2Fu UG9zLT5pdGVtID0gbWFya1Bvcy0+aXRlbTsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogbWFy a0JhdGNoIGlzIGJlaGluZCBzY2FuQmF0Y2gsIGFuZCBzbyBtdXN0IG5vdCBiZSBzYXZlZCBpbiBy aW5nIGJ1ZmZlcgorCSAqIGFueW1vcmUuICBXZSBoYXZlIHRvIGRlYWwgd2l0aCByZXN0b3Jpbmcg dGhlIG1hcmsgdGhlIGhhcmQgd2F5OiBieQorCSAqIGludmFsaWRhdGluZyBhbGwgb3RoZXIgbG9h ZGVkIGJhdGNoZXMuICBUaGlzIGlzIHNpbWlsYXIgdG8gdGhlIGNhc2UKKwkgKiB3aGVyZSB0aGUg c2NhbiBkaXJlY3Rpb24gY2hhbmdlcyBhbmQgdGhlIHNjYW4gYWN0dWFsbHkgY3Jvc3NlcworCSAq IGJhdGNoL2luZGV4IHBhZ2UgYm91bmRhcmllcyAoc2VlIHRhYmxlYW1fdXRpbF9zY2FuYmF0Y2hf ZGlyY2hhbmdlKS4KKwkgKgorCSAqIEZpcnN0LCBmcmVlIGFsbCBiYXRjaGVzIHRoYXQgYXJlIHN0 aWxsIGluIHRoZSByaW5nIGJ1ZmZlci4KKwkgKi8KKwlmb3IgKHVpbnQ4IGkgPSBiYXRjaHJpbmdi dWYtPmhlYWRCYXRjaDsgaSAhPSBiYXRjaHJpbmdidWYtPm5leHRCYXRjaDsgaSsrKQorCXsKKwkJ SW5kZXhTY2FuQmF0Y2ggYmF0Y2ggPSBpbmRleF9zY2FuX2JhdGNoKHNjYW4sIGkpOworCisJCUFz c2VydChiYXRjaCAhPSBtYXJrQmF0Y2gpOworCisJCXRhYmxlYW1fdXRpbF9yZWxlYXNlX2JhdGNo KHNjYW4sIGJhdGNoKTsKKwl9CisKKwkvKgorCSAqIE5leHQgImFwcGVuZCIgc3RhbmRhbG9uZSBt YXJrQmF0Y2gsIHdoaWNoIHdpbGwgYmVjb21lIHNjYW5CYXRjaAorCSAqIChzY2FuQmF0Y2ggaXMg YWx3YXlzIHRoZSByaW5nIGJ1ZmZlcidzIGhlYWRCYXRjaCkKKwkgKi8KKwltYXJrUG9zLT5iYXRj aCA9IDA7CisJYmF0Y2hyaW5nYnVmLT5zY2FuUG9zID0gKm1hcmtQb3M7CisJYmF0Y2hyaW5nYnVm LT5uZXh0QmF0Y2ggPSBiYXRjaHJpbmdidWYtPmhlYWRCYXRjaCA9IG1hcmtQb3MtPmJhdGNoOwor CWluZGV4X3NjYW5fYmF0Y2hfYXBwZW5kKHNjYW4sIG1hcmtCYXRjaCk7CisJQXNzZXJ0KGluZGV4 X3NjYW5fYmF0Y2goc2NhbiwgYmF0Y2hyaW5nYnVmLT5zY2FuUG9zLmJhdGNoKSA9PSBtYXJrQmF0 Y2gpOworCisJLyoKKwkgKiBGaW5hbGx5LCBjYWxsIGFtcG9zcmVzZXQgdG8gbGV0IGluZGV4IEFN IGtub3cgdG8gaW52YWxpZGF0ZSBhbnkgcHJpdmF0ZQorCSAqIHN0YXRlIHRoYXQgaW5kZXBlbmRl bnRseSB0cmFja3MgdGhlIHNjYW4ncyBwcm9ncmVzcworCSAqLworCWlmIChzY2FuLT5pbmRleFJl bGF0aW9uLT5yZF9pbmRhbS0+YW1wb3NyZXNldCkKKwkJc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRf aW5kYW0tPmFtcG9zcmVzZXQoc2NhbiwgbWFya0JhdGNoKTsKKworCS8qCisJICogTm90ZTogbWFy a0JhdGNoLmRlYWRJdGVtc1tdIG1pZ2h0IGFscmVhZHkgY29udGFpbiBkZWFkIGl0ZW1zLCBhbmQg bWlnaHQKKwkgKiB5ZXQgaGF2ZSBtb3JlIGRlYWQgaXRlbXMgc2F2ZWQuICB0YWJsZWFtX3V0aWxf cmVsZWFzZV9iYXRjaCBpcyBwcmVwYXJlZAorCSAqIGZvciB0aGF0LgorCSAqLworfQorCisvKgor ICogSGFuZGxlIGNyb3NzLWJhdGNoIGNoYW5nZSBpbiBzY2FuIGRpcmVjdGlvbgorICoKKyAqIENh bGxlZCBieSB0YWJsZSBBTSB3aGVuIGl0cyBzY2FuIGNoYW5nZXMgZGlyZWN0aW9uIGluIGEgd2F5 IHRoYXQKKyAqIG5lY2Vzc2l0YXRlcyBiYWNraW5nIHRoZSBzY2FuIHVwIHRvIGFuIGluZGV4IHBh Z2Ugb3JpZ2luYWxseSBhc3NvY2lhdGVkCisgKiB3aXRoIGEgbm93LWZyZWVkIGJhdGNoLgorICoK KyAqIFdoZW4gd2UgcmV0dXJuLCBiYXRjaHJpbmdidWYgd2lsbCBvbmx5IGNvbnRhaW4gb25lIGJh dGNoICh0aGUgY3VycmVudAorICogaGVhZEJhdGNoL3NjYW5CYXRjaCkgYW5kIHdpbGwgbG9vayBh cyBpZiB0aGUgbmV3IHNjYW4gZGlyZWN0aW9uIGhhZCBiZWVuCisgKiB1c2VkIGZyb20gdGhlIHN0 YXJ0LiAgQ2FsbGVyIGNhbiB0aGVuIHNhZmVseSBwYXNzIHRoaXMgYmF0Y2ggdG8gYW1nZXRiYXRj aAorICogdG8gZGV0ZXJtaW5lIHdoaWNoIGJhdGNoIGNvbWVzIG5leHQgaW4gdGhlIG5ldyBzY2Fu IGRpcmVjdGlvbi4gIFRoaXMKKyAqIGFwcHJvYWNoIGlzbid0IHBhcnRpY3VsYXJseSBlZmZpY2ll bnQsIGJ1dCBpdCB3b3JrcyB3ZWxsIGVub3VnaCBmb3Igd2hhdAorICogb3VnaHQgdG8gYmUgYSBy ZWxhdGl2ZWx5IHJhcmUgb2NjdXJyZW5jZS4KKyAqLwordm9pZAordGFibGVhbV91dGlsX3NjYW5i YXRjaF9kaXJjaGFuZ2UoSW5kZXhTY2FuRGVzYyBzY2FuKQoreworCUJhdGNoUmluZ0J1ZmZlciAq YmF0Y2hyaW5nYnVmID0gJnNjYW4tPmJhdGNocmluZ2J1ZjsKKwlJbmRleFNjYW5CYXRjaCBzY2Fu QmF0Y2g7CisKKwkvKgorCSAqIFJlbGVhc2UgYmF0Y2hlcyBzdGFydGluZyBmcm9tIHRoZSBjdXJy ZW50ICJ0YWlsIiBiYXRjaCwgd29ya2luZworCSAqIGJhY2t3YXJkcyB1bnRpbCB0aGUgY3VycmVu dCBoZWFkIGJhdGNoICh3aGljaCBpcyBhbHNvIHRoZSBjdXJyZW50CisJICogc2NhbkJhdGNoKSBp cyB0aGUgb25seSBiYXRjaCBoYXNuJ3QgYmVlbiBmcmVlZAorCSAqLworCXdoaWxlIChpbmRleF9z Y2FuX2JhdGNoX2NvdW50KHNjYW4pID4gMSkKKwl7CisJCXVpbnQ4CQl0YWlsaWR4ID0gYmF0Y2hy aW5nYnVmLT5uZXh0QmF0Y2ggLSAxOworCQlJbmRleFNjYW5CYXRjaCB0YWlsID0gaW5kZXhfc2Nh bl9iYXRjaChzY2FuLCB0YWlsaWR4KTsKKworCQlBc3NlcnQodGFpbGlkeCAhPSBiYXRjaHJpbmdi dWYtPnNjYW5Qb3MuYmF0Y2gpOworCisJCXRhYmxlYW1fdXRpbF9yZWxlYXNlX2JhdGNoKHNjYW4s IHRhaWwpOworCQliYXRjaHJpbmdidWYtPm5leHRCYXRjaC0tOworCX0KKworCS8qIHNjYW5CYXRj aCBpcyBub3cgdGhlIG9ubHkgYmF0Y2ggc3RpbGwgbG9hZGVkICovCisJQXNzZXJ0KGJhdGNocmlu Z2J1Zi0+aGVhZEJhdGNoID09IGJhdGNocmluZ2J1Zi0+c2NhblBvcy5iYXRjaCk7CisJc2NhbkJh dGNoID0gaW5kZXhfc2Nhbl9iYXRjaChzY2FuLCBiYXRjaHJpbmdidWYtPmhlYWRCYXRjaCk7CisK KwkvKgorCSAqIEZsaXAgc2NhbkJhdGNoJ3Mgc2NhbiBkaXJlY3Rpb24gdG8gcmVmbGVjdCB0aGUg cmV2ZXJzYWwuICBBbHNvIHJlc2V0CisJICogYW55IGluZGV4IEFNIHN0YXRlIHRoYXQgaW5kZXBl bmRlbnRseSB0cmFja3Mgc2NhbiBwcm9ncmVzcy4KKwkgKi8KKwlzY2FuQmF0Y2gtPmRpciA9IC1z Y2FuQmF0Y2gtPmRpcjsKKwlpZiAoc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtcG9z cmVzZXQpCisJCXNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbXBvc3Jlc2V0KHNjYW4s IHNjYW5CYXRjaCk7Cit9CisKKy8qCisgKiBSZWNvcmQgdGhhdCBzY2FuUG9zIGl0ZW0gaXMgZGVh ZAorICoKKyAqIFJlY29yZHMgYW4gb2Zmc2V0IHRvIHRoZSBjdXJyZW50IHNjYW5CYXRjaC9zY2Fu UG9zIGl0ZW0sIHNhdmluZyBpdCBpbgorICogc2NhbkJhdGNoJ3MgZGVhZEl0ZW1zIGFycmF5LiAg VGhlIGl0ZW1zJyBpbmRleCB0dXBsZXMgd2lsbCBsYXRlciBiZQorICogbWFya2VkIExQX0RFQUQg d2hlbiBjdXJyZW50IHNjYW5CYXRjaCBpcyBmcmVlZC4KKyAqLwordm9pZAordGFibGVhbV91dGls X3NjYW5wb3Nfa2lsbGl0ZW0oSW5kZXhTY2FuRGVzYyBzY2FuKQoreworCUJhdGNoUmluZ0l0ZW1Q b3MgKnNjYW5Qb3MgPSAmc2Nhbi0+YmF0Y2hyaW5nYnVmLnNjYW5Qb3M7CisJSW5kZXhTY2FuQmF0 Y2ggc2NhbkJhdGNoID0gaW5kZXhfc2Nhbl9iYXRjaChzY2FuLCBzY2FuUG9zLT5iYXRjaCk7CisK KwlpZiAoc2NhbkJhdGNoLT5kZWFkSXRlbXMgPT0gTlVMTCkKKwkJc2NhbkJhdGNoLT5kZWFkSXRl bXMgPSBwYWxsb2NfYXJyYXkoaW50LCBzY2FuLT5tYXhpdGVtc2JhdGNoKTsKKwlpZiAoc2NhbkJh dGNoLT5udW1EZWFkIDwgc2Nhbi0+bWF4aXRlbXNiYXRjaCkKKwkJc2NhbkJhdGNoLT5kZWFkSXRl bXNbc2NhbkJhdGNoLT5udW1EZWFkKytdID0gc2NhblBvcy0+aXRlbTsKK30KKworLyoKKyAqIFJl bGVhc2UgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBhIGJhdGNoCisgKgorICogQ2FsbGVkIGJ5 IHRhYmxlIEFNJ3MgYW1nZXRiYXRjaCBpbmRleCBzY2FuIGltcGxlbWVudGF0aW9uIHdoZW4gaXQg aXMKKyAqIGZpbmlzaGVkIHdpdGggYSBiYXRjaCBhbmQgd2lzaGVzIHRvIHJlbGVhc2UgaXRzIHJl c291cmNlcy4KKyAqCisgKiBDYWxsaW5nIGhlcmUgd2hlbiAnYmF0Y2gnIGlzIGFsc28gYmF0Y2hy aW5nYnVmLm1hcmtCYXRjaCBpcyBhIG5vLW9wLiAgVGFibGUKKyAqIEFNIGNhbGxlcnMgZ2VuZXJh bGx5IHdvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgdGhpcyBiZWNhdXNlIGl0IGlzIGhhbmRsZWQK KyAqIGFzIGEgc3BlY2lhbCBjYXNlIGJ5IHRoZSBmdW5jdGlvbnMgaW4gdGhpcyBtb2R1bGUgKGJl c2lkZXMsIHRoZSBzY2FuIGNhbgorICogb25seSBoYXZlIG9uZSBtYXJrQmF0Y2ggYXQgYSB0aW1l KS4KKyAqCisgKiBXZSBjYWxsIGFtdW5ndWFyZGJhdGNoIHRvIGRyb3AgdGhlIFRJRCByZWN5Y2xp bmcgaW50ZXJsb2NrIChlLmcuIGJ1ZmZlcgorICogcGluKSB3aGVuIGl0IGhhc24ndCBiZWVuIGRy b3BwZWQgeWV0LiAgRm9yIHBsYWluIE1WQ0Mgc2NhbnMgKHdoZXJlCisgKiBiYXRjaEltbWVkaWF0 ZVVuZ3VhcmQgaXMgc2V0KSwgdGhlIGludGVybG9jayB3YXMgYWxyZWFkeSBkcm9wcGVkIGVhZ2Vy bHkKKyAqIGluIGluZGV4YW1fdXRpbF91bmxvY2tfYmF0Y2gsIHNvIHdlIHNraXAgdGhlIGFtdW5n dWFyZGJhdGNoIGNhbGwgaGVyZS4KKyAqIEluZGV4LW9ubHkgc2NhbnMgbXVzdCBkZWxheSBkcm9w cGluZyB0aGUgaW50ZXJsb2NrIHVudGlsIHZpc2liaWxpdHkgaXMKKyAqIHJlc29sdmVkIGZvciBh bGwgaXRlbXMgaW4gdGhlIGJhdGNoLCBzbyBhbXVuZ3VhcmRiYXRjaCBtYXkgc3RpbGwgbmVlZCB0 bworICogYWN0IGhlcmUuICBGb3Igbm9uLU1WQ0Mgc25hcHNob3Qgc2NhbnMsIHRoZSBpbnRlcmxv Y2sgaXMgYWx3YXlzIGhlbGQKKyAqIHVudGlsIGFtdW5ndWFyZGJhdGNoIGRyb3BzIGl0IGhlcmUg LS0gdGhpcyBpcyB0aGUgb25seSBwbGFjZSB3aWxsaW5nIHRvCisgKiB1bmd1YXJkIGEgbm9uLU1W Q0Mgc2NhbidzIGJhdGNoLgorICoKKyAqIFdoZW4gdGhlIGJhdGNoIGhhcyBkZWFkIGl0ZW1zIChu dW1EZWFkID4gMCkgYW5kIHRoZSBpbmRleCBBTSBwcm92aWRlcyBhbgorICogYW1raWxsaXRlbXNi YXRjaCBjYWxsYmFjaywgd2UgY2FsbCBpdCB0byBzZXQgTFBfREVBRCBiaXRzIGluIHRoZSBpbmRl eAorICogcGFnZS4gIFRoaXMgaXMgdGhlIG5hdHVyYWwgcGxhY2UgdG8ga2lsbCBpbmRleCBpdGVt cyBiZWNhdXNlIGl0J3MgdGhlCisgKiBwb2ludCB3aGVuIHdlIGtub3cgZm9yIHN1cmUgdGhhdCBu byBmdXJ0aGVyIHRhYmxlIGFjY2Vzc2VzIHdpbGwgdGFrZQorICogcGxhY2UgZm9yIHRoYXQgYmF0 Y2gncyBpdGVtcy4KKyAqLwordm9pZAordGFibGVhbV91dGlsX3JlbGVhc2VfYmF0Y2goSW5kZXhT Y2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCkKK3sKKwkvKiBkb24ndCBmcmVlIGNh bGxlcidzIGJhdGNoIGlmIGl0IGlzIHNjYW4ncyBjdXJyZW50IG1hcmtCYXRjaCAqLworCWlmIChi YXRjaCA9PSBzY2FuLT5iYXRjaHJpbmdidWYubWFya0JhdGNoKQorCQlyZXR1cm47CisKKwkvKiBQ YXNzIHRocm91Z2ggdG8gaW1wbGVtZW50YXRpb24gZnVuY3Rpb24sIHdpdGggYWxsb3dfY2FjaGU9 dHJ1ZSAqLworCXJlbGVhc2VfYW5kX3VuZ3VhcmRfYmF0Y2goc2NhbiwgYmF0Y2gsIHRydWUpOwor fQorCisvKgorICogRnJlZSBhIGJhdGNoLCBvcHRpb25hbGx5IGNhY2hpbmcgaXQgZm9yIHJldXNl LgorICoKKyAqIFdoZW4gYWxsb3dfY2FjaGUgaXMgdHJ1ZSwgd2UgdHJ5IHRvIHN0b3JlIHRoZSBi YXRjaCBpbiB0aGUgc2NhbidzIGJhdGNoCisgKiBjYWNoZSBmb3IgbGF0ZXIgcmV1c2UuICBXaGVu IGFsbG93X2NhY2hlIGlzIGZhbHNlICh0eXBpY2FsbHkgYmVjYXVzZSB0aGUKKyAqIHNjYW4gaXMg c2h1dHRpbmcgZG93biksIHdlIHBmcmVlIHRoZSBjYWxsZXIncyBiYXRjaCB1bmNvbmRpdGlvbmFs bHkuCisgKi8KK3N0YXRpYyB2b2lkCityZWxlYXNlX2FuZF91bmd1YXJkX2JhdGNoKEluZGV4U2Nh bkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gsCisJCQkJCQkgIGJvb2wgYWxsb3dfY2Fj aGUpCit7CisJQXNzZXJ0KCEoc2Nhbi0+YmF0Y2hJbW1lZGlhdGVVbmd1YXJkICYmIGJhdGNoLT5p c0d1YXJkZWQpKTsKKwlBc3NlcnQoYmF0Y2gtPmlzR3VhcmRlZCB8fCBzY2FuLT5NVkNDU2Nhbik7 CisKKwkvKiBEcm9wIFRJRCByZWN5Y2xpbmcgaW50ZXJsb2NrIHZpYSBhbXVuZ3VhcmRiYXRjaCBh cyBuZWVkZWQgKi8KKwlpZiAoIXNjYW4tPmJhdGNoSW1tZWRpYXRlVW5ndWFyZCAmJiBiYXRjaC0+ aXNHdWFyZGVkKQorCQl0YWJsZWFtX3V0aWxfdW5ndWFyZF9iYXRjaChzY2FuLCBiYXRjaCk7CisK KwkvKgorCSAqIExldCB0aGUgaW5kZXggQU0gc2V0IExQX0RFQUQgYml0cyBpbiB0aGUgaW5kZXgg cGFnZSwgaWYgYXBwbGljYWJsZS4KKwkgKgorCSAqIGJhdGNoLmRlYWRJdGVtc1tdIGlzIG5vdyBp biB3aGF0ZXZlciBvcmRlciB0aGUgc2NhbiByZXR1cm5lZCBpdGVtcyBpbi4KKwkgKiBXZSBtaWdo dCBoYXZlIGV2ZW4gc2F2ZWQgdGhlIHNhbWUgaXRlbS9USUQgdHdpY2UuCisJICoKKwkgKiBTb3J0 IGFuZCB1bmlxdWUtaWZ5IGRlYWRJdGVtc1tdLiAgVGhhdCB3YXkgdGhlIGluZGV4IEFNIGNhbiBz YWZlbHkKKwkgKiBhc3N1bWUgdGhhdCBpdGVtcyB3aWxsIGFsd2F5cyBiZSBpbiB0aGVpciBvcmln aW5hbCBpbmRleCBwYWdlIG9yZGVyLgorCSAqLworCWlmIChiYXRjaC0+bnVtRGVhZCA+IDAgJiYK KwkJc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFta2lsbGl0ZW1zYmF0Y2ggIT0gTlVM TCkKKwl7CisJCWlmIChiYXRjaC0+bnVtRGVhZCA+IDEpCisJCXsKKwkJCXFzb3J0KGJhdGNoLT5k ZWFkSXRlbXMsIGJhdGNoLT5udW1EZWFkLCBzaXplb2YoaW50KSwKKwkJCQkgIGJhdGNoX2NvbXBh cmVfaW50KTsKKwkJCWJhdGNoLT5udW1EZWFkID0gcXVuaXF1ZShiYXRjaC0+ZGVhZEl0ZW1zLCBi YXRjaC0+bnVtRGVhZCwKKwkJCQkJCQkJCSBzaXplb2YoaW50KSwgYmF0Y2hfY29tcGFyZV9pbnQp OworCQl9CisKKwkJc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFta2lsbGl0ZW1zYmF0 Y2goc2NhbiwgYmF0Y2gpOworCX0KKworCS8qCisJICogVHJ5IHRvIHN0b3JlIGNhbGxlcidzIGJh dGNoIGluIHRoaXMgYW1nZXRiYXRjaCBzY2FuJ3MgY2FjaGUgb2YKKwkgKiBwcmV2aW91c2x5IHJl bGVhc2VkIGJhdGNoZXMgZmlyc3QgKHdoZW4gY2FsbGVyIHJlcXVlc3RzIGl0KQorCSAqLworCWlm IChhbGxvd19jYWNoZSAmJiBiYXRjaF9jYWNoZV9zdG9yZShzY2FuLCBiYXRjaCkpCisJCXJldHVy bjsKKworCS8qIGp1c3QgcGZyZWUgdGhlIGNhbGxlcidzIGJhdGNoIChwbHVzIGJhdGNoJ3MgZGVh ZEl0ZW1zLCBpZiBhbnkpICovCisJaWYgKGJhdGNoLT5kZWFkSXRlbXMpCisJCXBmcmVlKGJhdGNo LT5kZWFkSXRlbXMpOworCXBmcmVlKGluZGV4X3NjYW5fYmF0Y2hfYmFzZShzY2FuLCBiYXRjaCkp OworfQorCisvKgorICogRHJvcCB0aGUgYmF0Y2gncyBUSUQgcmVjeWNsaW5nIGludGVybG9jayB2 aWEgYW11bmd1YXJkYmF0Y2gKKyAqCisgKiBDYWxsZWQgYnkgdGhlIHRhYmxlIEFNIHdoZW4gaXQn cyBzYWZlIHRvIGRyb3Agd2hhdGV2ZXIgaW50ZXJsb2NrIHRoZSBpbmRleAorICogQU0gaG9sZHMg dG8gcHJldmVudCB1bnNhZmUgY29uY3VycmVudCBUSUQgcmVjeWNsaW5nIGJ5IFZBQ1VVTSAodHlw aWNhbGx5IGEKKyAqIGJ1ZmZlciBwaW4gb24gdGhlIGJhdGNoJ3MgaW5kZXggcGFnZSBpbiBiYXRj aCdzIG9wYXF1ZSBhcmVhKS4KKyAqLwordm9pZAordGFibGVhbV91dGlsX3VuZ3VhcmRfYmF0Y2go SW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCkKK3sKKwkvKiBTaG91bGQg YmUgY2FsbGVkIGV4YWN0bHkgb25jZSBpZmYgIWJhdGNoSW1tZWRpYXRlVW5ndWFyZCAqLworCUFz c2VydCghc2Nhbi0+YmF0Y2hJbW1lZGlhdGVVbmd1YXJkKTsKKwlBc3NlcnQoYmF0Y2gtPmlzR3Vh cmRlZCk7CisKKwlzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW11bmd1YXJkYmF0Y2go c2NhbiwgYmF0Y2gpOworCisJYmF0Y2gtPmlzR3VhcmRlZCA9IGZhbHNlOworfQorCisvKgorICog VW5sb2NrIGJhdGNoJ3MgaW5kZXggcGFnZSBidWZmZXIgbG9jaworICoKKyAqIFVubG9ja3MgdGhl IGdpdmVuIGJ1ZmZlciBpbiBwcmVwYXJhdGlvbiBmb3IgYW1nZXRiYXRjaCByZXR1cm5pbmcgaXRl bXMKKyAqIHNhdmVkIGluIHRoYXQgYmF0Y2guICBQZXJmb3JtcyBleHRyYSBzdGVwcyByZXF1aXJl ZCBieSBhbWdldGJhdGNoIGNhbGxlcnMKKyAqIGluIHBhc3NpbmcuCisgKgorICogT25seSBjYWxs IGhlcmUgd2hlbiBhIGJhdGNoIGhhcyBvbmUgb3IgbW9yZSBtYXRjaGluZyBpdGVtcyB0byByZXR1 cm4gdXNpbmcKKyAqIGFtZ2V0YmF0Y2ggKG9yIGZvciBhbWdldGJpdG1hcCB0byBsb2FkIGludG8g aXRzIGJpdG1hcCBvZiBtYXRjaGluZyBUSURzKS4KKyAqIFdoZW4gYW4gaW5kZXggcGFnZSBoYXMg bm8gbWF0Y2hlcywgaXQncyBhbHdheXMgc2FmZSBmb3IgaW5kZXggQU1zIHRvIGRyb3AKKyAqIGJv dGggdGhlIGxvY2sgYW5kIHRoZSBwaW4gZm9yIHRoZW1zZWx2ZXMuCisgKgorICogTm90ZTogSXQg aXMgY29udmVuaWVudCBmb3IgaW5kZXggQU1zIHRoYXQgaW1wbGVtZW50IGJvdGggYW1nZXRiYXRj aCBhbmQKKyAqIGFtZ2V0Yml0bWFwIHRvIGNvbnNpc3RlbnRseSB1c2UgdGhlIHNhbWUgYmF0Y2gg bWFuYWdlbWVudCBhcHByb2FjaCwgc2luY2UKKyAqIHRoYXQgYXZvaWRzIGludHJvZHVjaW5nIHNw ZWNpYWwgY2FzZXMgdG8gbG93ZXItbGV2ZWwgY29kZS4gIFdlIGRyb3AgYm90aAorICogdGhlIGxv Y2sgYW5kIHRoZSBwaW4gb24gYmF0Y2gncyBwYWdlIG9uIGJlaGFsZiBvZiBhbWdldGJpdG1hcCBj YWxsZXJzLgorICoKKyAqIEZvciBhbWdldGJhdGNoIGNhbGxlcnMsIHdoZW4gYmF0Y2hJbW1lZGlh dGVVbmd1YXJkIGlzIHNldCAocGxhaW4gTVZDQworICogc2NhbnMpLCB3ZSBhbHNvIHJlbGVhc2Ug dGhlIHBpbiBoZXJlICh0aGUgVElEIHJlY3ljbGluZyBpbnRlcmxvY2spLCBzbworICogdGhhdCBu byBsYXRlciBhbXVuZ3VhcmRiYXRjaCBjYWxsYmFjayB3aWxsIGJlIG5lZWRlZC4gIE90aGVyd2lz ZSB0aGUgdGFibGUKKyAqIEFNIHdpbGwgY2FsbCBhbXVuZ3VhcmRiYXRjaCBsYXRlciB3aGVuIGl0 J3Mgc2FmZSB0byBkcm9wIHRoZSBpbnRlcmxvY2suCisgKgorICogSW5kZXggQU1zIHdob3NlIFRJ RCByZWN5Y2xpbmcgaW50ZXJsb2NrIGlzIG5vdCBqdXN0IGEgYnVmZmVyIHBpbiwgb3Igd2hvc2UK KyAqIGFtdW5ndWFyZGJhdGNoIGRvZXMgbm90IHNpbXBseSByZWxlYXNlIGEgcGluLCBhcmUgbm90 IG9ibGlnYXRlZCB0byB1c2UgdGhpcworICogZnVuY3Rpb24uICBUaGV5IGNhbiBpbXBsZW1lbnQg dGhlaXIgb3duIGVxdWl2YWxlbnQuICBTdWNoIGluZGV4IEFNcyBhcmUgYWxzbworICogZnJlZSB0 byB1c2UgdGhlIGJhdGNoIExTTiBmaWVsZCB0aGVtc2VsdmVzOyB0aGVpciBhbWtpbGxpdGVtc2Jh dGNoIHJvdXRpbmUKKyAqIGNhbiB1c2UgdGhhdCBMU04gaW4gdGhlIHVzdWFsIHdheSwgb3IgaW4g d2hhdGV2ZXIgd2F5IHRoZSBBTSBkZWVtcyBuZWNlc3NhcnkKKyAqIChjb3JlIGNvZGUgd2lsbCBu b3QgdXNlIGl0IGZvciBhbnkgb3RoZXIgcHVycG9zZSkuCisgKi8KK3ZvaWQKK2luZGV4YW1fdXRp bF91bmxvY2tfYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCwg QnVmZmVyIGJ1ZikKK3sKKwkvKiBiYXRjaCBtdXN0IGhhdmUgb25lIG9yIG1vcmUgbWF0Y2hpbmcg aXRlbXMgcmV0dXJuZWQgYnkgaW5kZXggQU0gKi8KKwlBc3NlcnQoYmF0Y2gtPmZpcnN0SXRlbSA+ PSAwICYmIGJhdGNoLT5maXJzdEl0ZW0gPD0gYmF0Y2gtPmxhc3RJdGVtKTsKKworCWlmIChzY2Fu LT51c2ViYXRjaHJpbmcpCisJeworCQkvKiBhbWdldGJhdGNoIChub3QgYW1nZXRiaXRtYXApIGNh bGxlciAqLworCQlBc3NlcnQoc2Nhbi0+aGVhcFJlbGF0aW9uICE9IE5VTEwpOworCisJCS8qCisJ CSAqIEhhdmUgdG8gc2V0IGJhdGNoLT5sc24gc28gdGhhdCBhbWtpbGxpdGVtc2JhdGNoIGhhcyBh IHdheSB0byBkZXRlY3QKKwkJICogd2hlbiBjb25jdXJyZW50IHRhYmxlIFRJRCByZWN5Y2xpbmcg YnkgVkFDVVVNIG1pZ2h0IGhhdmUgdGFrZW4KKwkJICogcGxhY2UuICBJdCdsbCBvbmx5IGJlIHNh ZmUgdG8gc2V0IGFueSBpbmRleCB0dXBsZSBMUF9ERUFEIGJpdHMgd2hlbgorCQkgKiB0aGUgcGFn ZSBMU04gaGFzbid0IGFkdmFuY2VkLgorCQkgKgorCQkgKiBQbGFpbiBNVkNDIHNjYW5zIChiYXRj aEltbWVkaWF0ZVVuZ3VhcmQpIGFsc28gcmVsZWFzZSB0aGUgcGluIG5vdywKKwkJICogZHJvcHBp bmcgdGhlIFRJRCByZWN5Y2xpbmcgaW50ZXJsb2NrIHNvIHRoYXQgbm8gYW11bmd1YXJkYmF0Y2gK KwkJICogY2FsbGJhY2sgd2lsbCBiZSBuZWVkZWQgbGF0ZXIuICBUaGUgaW5kZXggQU0gY2FsbGVy IG11c3QgY2xlYXIgaXRzCisJCSAqIG93biBvcGFxdWUgYnVmIGZpZWxkIGFmdGVyIHdlIHJldHVy bi4KKwkJICoKKwkJICogTm9uLWltbWVkaWF0ZS11bmd1YXJkIHNjYW5zIHJldGFpbiB0aGUgcGlu OyB0aGUgdGFibGUgQU0gd2lsbCBjYWxsCisJCSAqIGFtdW5ndWFyZGJhdGNoIHRvIGRyb3AgdGhl IGludGVybG9jayB3aGVuIHJlYWR5LgorCQkgKi8KKwkJYmF0Y2gtPmxzbiA9IEJ1ZmZlckdldExT TkF0b21pYyhidWYpOworCQlpZiAoc2Nhbi0+YmF0Y2hJbW1lZGlhdGVVbmd1YXJkKQorCQl7CisJ CQkvKiBkcm9wIGJvdGggdGhlIGxvY2sgYW5kIHRoZSBwaW4gKi8KKwkJCVVubG9ja1JlbGVhc2VC dWZmZXIoYnVmKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8qIGp1c3QgZHJvcCB0aGUgbG9jayAo aG9sZCBvbiB0byBpbnRlcmxvY2sgcGluKSAqLworCQkJVW5sb2NrQnVmZmVyKGJ1Zik7CisJCX0K KworCQkvKiBJZiB3ZSByZWxlYXNlZCBidWZmZXIgcGluLCBiYXRjaCBpcyBub3cgdW5ndWFyZGVk ICovCisJCWJhdGNoLT5pc0d1YXJkZWQgPSAhc2Nhbi0+YmF0Y2hJbW1lZGlhdGVVbmd1YXJkOwor CX0KKwllbHNlCisJeworCQkvKiBhbWdldGJpdG1hcCAobm90IGFtZ2V0YmF0Y2gpIGNhbGxlciAq LworCQlBc3NlcnQoc2Nhbi0+aGVhcFJlbGF0aW9uID09IE5VTEwpOworCisJCS8qIGRyb3AgYm90 aCB0aGUgbG9jayBhbmQgdGhlIHBpbiAqLworCQlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1Zik7CisJ fQorfQorCisvKgorICogQWxsb2NhdGUgYSBuZXcgYmF0Y2gKKyAqCisgKiBVc2VkIGJ5IGluZGV4 IEFNcyB0aGF0IHN1cHBvcnQgYW1nZXRiYXRjaCBpbnRlcmZhY2UgKGJvdGggZHVyaW5nIGFtZ2V0 YmF0Y2gKKyAqIGFuZCBhbWdldGJpdG1hcCBzY2FucykuCisgKgorICogUmV0dXJucyBJbmRleFNj YW5CYXRjaCB3aXRoIHNwYWNlIHRvIGZpdCBzY2FuLT5tYXhpdGVtc2JhdGNoLW1hbnkKKyAqIEJh dGNoTWF0Y2hpbmdJdGVtIGVudHJpZXMuICBUaGlzIHdpbGwgZWl0aGVyIGJlIGEgbmV3bHkgYWxs b2NhdGVkIGJhdGNoLCBvcgorICogYSBiYXRjaCByZWN5Y2xlZCBmcm9tIHRoZSBjYWNoZSBtYW5h Z2VkIGJ5IGluZGV4YW1fdXRpbF9yZWxlYXNlX2JhdGNoLiAgU2VlCisgKiBjb21tZW50cyBhYm92 ZSBpbmRleGFtX3V0aWxfcmVsZWFzZV9iYXRjaC4KKyAqCisgKiBIb3VzZWtlZXBpbmcgZmllbGRz IChidWYsIGtub3duRW5kQmFja3dhcmQvRm9yd2FyZCwgZmlyc3RJdGVtLCBsYXN0SXRlbSwKKyAq IG51bURlYWQsIGRlYWRJdGVtcywgY3VyclR1cGxlcykgYXJlIGluaXRpYWxpemVkIGhlcmUuICBU aGUgdGFibGUgQU0ncworICogYmF0Y2hfaW5pdCBjYWxsYmFjayBpcyBpbnZva2VkIGhlcmUgdG8g aW5pdGlhbGl6ZSB0aGUgdGFibGUgQU0gb3BhcXVlIGFyZWEuCisgKiBUaGUgaW5kZXggQU0gY2Fs bGVyIGlzIHJlc3BvbnNpYmxlIGZvciBmaWxsaW5nIGluIGl0cyBwZXItYmF0Y2ggb3BhcXVlCisg KiBmaWVsZHMgYW5kIHRoZSBtYXRjaGluZyBpdGVtc1tdIGFycmF5LgorICoKKyAqIE9uY2UgdGhl IGJhdGNoIGhhcyB0aGUgcmVxdWlyZWQgbWF0Y2hpbmcgaXRlbXMsIGNhbGxlciBzaG91bGQgZ2Vu ZXJhbGx5CisgKiBwYXNzIGl0IHRvIGluZGV4YW1fdXRpbF91bmxvY2tfYmF0Y2gsIGFoZWFkIG9m IGl0IGJlaW5nIHJldHVybmVkIHRocm91Z2gKKyAqIGluZGV4IEFNJ3MgYW1nZXRiYXRjaCByb3V0 aW5lLiAgSWYgaXQgdHVybnMgb3V0IHRoYXQgdGhlIGJhdGNoIHdvbid0IG5lZWQKKyAqIHRvIGJl IHJldHVybmVkIGxpa2UgdGhpcyAoZS5nLiwgZHVlIHRvIHRoZSBzY2FuIGhhdmluZyBubyBtb3Jl IG1hdGNoZXMpLAorICogY2FsbGVyIHNob3VsZCBwYXNzIGl0cyBlbXB0eS91bnVzZWQgYmF0Y2gg dG8gaW5kZXhhbV91dGlsX3JlbGVhc2VfYmF0Y2guCisgKi8KK0luZGV4U2NhbkJhdGNoCitpbmRl eGFtX3V0aWxfYWxsb2NfYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuKQoreworCUluZGV4U2NhbkJh dGNoIGJhdGNoID0gTlVMTDsKKwlib29sCQluZXdfYWxsb2MgPSBmYWxzZTsKKworCS8qIEluZGV4 IEFNIG11c3QgaGF2ZSBzZXQgaXRzIG9wYXF1ZSBzcGFjZSB0byBzb21ldGhpbmcgYWxyZWFkeSAq LworCUFzc2VydChzY2FuLT5iYXRjaF9pbmRleF9vcGFxdWVfc2l6ZSA+IDApOworCUFzc2VydChz Y2FuLT5iYXRjaF9pbmRleF9vcGFxdWVfc2l6ZSA9PQorCQkgICBNQVhBTElHTihzY2FuLT5iYXRj aF9pbmRleF9vcGFxdWVfc2l6ZSkpOworCisJLyogRmlyc3QgbG9vayBmb3IgYW4gZXhpc3Rpbmcg YmF0Y2ggZnJvbSB0aGUgY2FjaGUgKi8KKwlpZiAoc2Nhbi0+dXNlYmF0Y2hyaW5nKQorCXsKKwkJ Zm9yIChpbnQgaSA9IDA7IGkgPCBJTkRFWF9TQ0FOX0NBQ0hFX0JBVENIRVM7IGkrKykKKwkJewor CQkJaWYgKHNjYW4tPmJhdGNoY2FjaGVbaV0gIT0gTlVMTCkKKwkJCXsKKwkJCQkvKiBSZXR1cm4g Y2FjaGVkIHVucmVmZXJlbmNlZCBiYXRjaCAqLworCQkJCWJhdGNoID0gc2Nhbi0+YmF0Y2hjYWNo ZVtpXTsKKwkJCQlzY2FuLT5iYXRjaGNhY2hlW2ldID0gTlVMTDsKKwkJCQlicmVhazsKKwkJCX0K KwkJfQorCX0KKwllbHNlIGlmIChzY2FuLT5iYXRjaGNhY2hlWzBdICE9IE5VTEwpCisJeworCQkv KgorCQkgKiBSZXVzZSBjYWNoZWQgYmF0Y2ggZnJvbSBwcmlvciBhbWdldGJpdG1hcCBpdGVyYXRp b24uICBUaGlzIHBhdGggaXMKKwkJICogaGl0IG9uIGV2ZXJ5IGFtZ2V0Yml0bWFwIGNhbGwgaGVy ZSBhZnRlciB0aGUgc2NhbidzIGZpcnN0LgorCQkgKi8KKwkJYmF0Y2ggPSBzY2FuLT5iYXRjaGNh Y2hlWzBdOworCQlzY2FuLT5iYXRjaGNhY2hlWzBdID0gTlVMTDsKKwl9CisKKwlpZiAoIWJhdGNo KQorCXsKKwkJc2l6ZV90CQlvcGFxdWVfYXJlYXNfcHJlZml4X3N6LAorCQkJCQliYXNlX3N6LAor CQkJCQlpb3NfdGFibGVfdHJhaWxpbmdfc3osCisJCQkJCWlvc190b3RhbF90cmFpbGluZ19zeiwK KwkJCQkJYWxsb2NzejsKKwkJY2hhcgkgICAqcmF3X2JhdGNoX2FsbG9jOworCisJCS8qCisJCSAq IExhemlseSBjb21wdXRlIGJhdGNoX2Jhc2Vfb2Zmc2V0IG9uIGZpcnN0IGNhbGwgaGVyZSBmb3Ig c2Nhbi4KKwkJICoKKwkJICogVGhpcyBjb21iaW5lcyB0aGUgZml4ZWQtc2l6ZSB0YWJsZSBBTSBh bmQgaW5kZXggQU0gb3BhcXVlIHNpemVzCisJCSAqIGludG8gYSBzaW5nbGUgb2Zmc2V0IHRoYXQg Y2FuIGJlIHVzZWQgdG8gZmluZCB0aGUgdHJ1ZSBhbGxvY2F0aW9uCisJCSAqIGJhc2UgZnJvbSB0 aGUgYmF0Y2ggcG9pbnRlci4gKFRoaXMgaXMgYWxzbyB3aGVyZSB0aGUgZml4ZWQtc2l6ZWQKKwkJ ICogdGFibGUgQU0gb3BhcXVlIGFyZWEgY2FuIGJlIGZvdW5kLikKKwkJICovCisJCWlmIChzY2Fu LT5iYXRjaF9iYXNlX29mZnNldCA9PSAwKQorCQl7CisJCQl1aW50MTYJCXRhYmxlX29wYXF1ZSA9 IHNjYW4tPnhzX2hlYXBmZXRjaCA/CisJCQkJc2Nhbi0+eHNfaGVhcGZldGNoLT5iYXRjaF9vcGFx dWVfc2l6ZSA6IDA7CisKKwkJCXNjYW4tPmJhdGNoX2Jhc2Vfb2Zmc2V0ID0gdGFibGVfb3BhcXVl ICsKKwkJCQlzY2FuLT5iYXRjaF9pbmRleF9vcGFxdWVfc2l6ZTsKKwkJfQorCisJCS8qCisJCSAq IFN1YnRvdGFsICMxOiB0aGUgc2l6ZSBvZiBib3RoIGZpeGVkLXNpemUgQU0gb3BhcXVlIGFyZWFz IGxvY2F0ZWQKKwkJICogYmVmb3JlIHRoZSBzdGFydCBvZiBJbmRleFNjYW5CYXRjaERhdGEKKwkJ ICovCisJCW9wYXF1ZV9hcmVhc19wcmVmaXhfc3ogPSBzY2FuLT5iYXRjaF9iYXNlX29mZnNldDsK KwkJQXNzZXJ0KG9wYXF1ZV9hcmVhc19wcmVmaXhfc3ogPT0gTUFYQUxJR04ob3BhcXVlX2FyZWFz X3ByZWZpeF9zeikpOworCisJCS8qIFN1YnRvdGFsICMyOiBJbmRleFNjYW5CYXRjaERhdGEgYW5k IGl0cyBpdGVtc1ttYXhpdGVtc2JhdGNoXSAqLworCQliYXNlX3N6ID0gTUFYQUxJR04ob2Zmc2V0 b2YoSW5kZXhTY2FuQmF0Y2hEYXRhLCBpdGVtcykgKworCQkJCQkJICAgc2l6ZW9mKEJhdGNoTWF0 Y2hpbmdJdGVtKSAqIHNjYW4tPm1heGl0ZW1zYmF0Y2gpOworCisJCS8qCisJCSAqIFRyYWlsaW5n IGRhdGEgYWZ0ZXIgaXRlbXNbXSB1c2VkIGR1cmluZyBpbmRleC1vbmx5IHNjYW5zOiBwZXItaXRl bQorCQkgKiBkYXRhIChvd25lZCBieSB0YWJsZSBBTSksIHRoZW4gY3VyclR1cGxlcyB3b3Jrc3Bh Y2UgKG93bmVkIGJ5IGluZGV4CisJCSAqIEFNLCByZWFkIGJ5IHRhYmxlIEFNKQorCQkgKi8KKwkJ aW9zX3RhYmxlX3RyYWlsaW5nX3N6ID0gMDsKKwkJaW9zX3RvdGFsX3RyYWlsaW5nX3N6ID0gMDsK KwkJaWYgKHNjYW4tPnhzX3dhbnRfaXR1cCkKKwkJeworCQkJLyoKKwkJCSAqIFdlIGF2b2lkIGFz c3VtaW5nIHRoYXQgdGFibGUgQU0gYWN0dWFsbHkgcmVxdWlyZXMgYW55IHBlci1pdGVtCisJCQkg KiB0cmFpbGluZyBzcGFjZSBkdXJpbmcgaW5kZXgtb25seSBzY2FucworCQkJICovCisJCQlpZiAo c2Nhbi0+eHNfaGVhcGZldGNoLT5iYXRjaF9wZXJfaXRlbV9zaXplID4gMCkKKwkJCQlpb3NfdGFi bGVfdHJhaWxpbmdfc3ogPQorCQkJCQlNQVhBTElHTihzY2FuLT54c19oZWFwZmV0Y2gtPmJhdGNo X3Blcl9pdGVtX3NpemUgKgorCQkJCQkJCSBzY2FuLT5tYXhpdGVtc2JhdGNoKTsKKwkJCWlvc190 b3RhbF90cmFpbGluZ19zeiArPSBpb3NfdGFibGVfdHJhaWxpbmdfc3o7CisKKwkJCS8qCisJCQkg KiBBbiBpbmRleC1vbmx5IHNjYW4gd2lsbCBhbHdheXMgbmVlZCBhIGN1cnJUdXBsZXMgc3BhY2Us IGhvd2V2ZXIKKwkJCSAqLworCQkJaW9zX3RvdGFsX3RyYWlsaW5nX3N6ICs9IHNjYW4tPmJhdGNo X3R1cGxlc193b3Jrc3BhY2U7CisKKwkJCS8qCisJCQkgKiBTdWJ0b3RhbCAjMzogVGhlIGNvbWJp bmVkIHNpemUgb2YgYm90aCBpbmRleC1vbmx5IHNjYW4gdHJhaWxpbmcKKwkJCSAqIGFyZWFzIChp b3NfdG90YWxfdHJhaWxpbmdfc3opCisJCQkgKi8KKwkJCXBnX2Fzc3VtZShpb3NfdG90YWxfdHJh aWxpbmdfc3ogPiAwKTsKKwkJCUFzc2VydChpb3NfdG90YWxfdHJhaWxpbmdfc3ogPT0gTUFYQUxJ R04oaW9zX3RvdGFsX3RyYWlsaW5nX3N6KSk7CisJCX0KKworCQlBc3NlcnQoc2Nhbi0+eHNfd2Fu dF9pdHVwIHx8IGlvc190b3RhbF90cmFpbGluZ19zeiA9PSAwKTsKKworCQkvKiBUb3RhbCBiYXRj aCBhbGxvY2F0aW9uIHNpemUgaXMgdGhlIHN1bSBvZiBvdXIgdGhyZWUgc3VidG90YWxzICovCisJ CWFsbG9jc3ogPSBvcGFxdWVfYXJlYXNfcHJlZml4X3N6ICsgYmFzZV9zeiArIGlvc190b3RhbF90 cmFpbGluZ19zejsKKwkJcmF3X2JhdGNoX2FsbG9jID0gcGFsbG9jKGFsbG9jc3opOworCQliYXRj aCA9IChJbmRleFNjYW5CYXRjaCkgKHJhd19iYXRjaF9hbGxvYyArIG9wYXF1ZV9hcmVhc19wcmVm aXhfc3opOworCQlBc3NlcnQoaW5kZXhfc2Nhbl9iYXRjaF9iYXNlKHNjYW4sIGJhdGNoKSA9PSBy YXdfYmF0Y2hfYWxsb2MpOworCisJCS8qIGN1cnJUdXBsZXMgKGlmIGFueSkgaXMgZGlyZWN0bHkg YWZ0ZXIgSW9TIHRyYWlsaW5nIHRhYmxlIHNwYWNlICovCisJCWJhdGNoLT5jdXJyVHVwbGVzID0g TlVMTDsKKwkJaWYgKGlvc190b3RhbF90cmFpbGluZ19zeikKKwkJCWJhdGNoLT5jdXJyVHVwbGVz ID0gKGNoYXIgKikgYmF0Y2ggKyBiYXNlX3N6ICsgaW9zX3RhYmxlX3RyYWlsaW5nX3N6OworCQlB c3NlcnQoIXNjYW4tPnhzX3dhbnRfaXR1cCB8fCBiYXRjaC0+Y3VyclR1cGxlcyAhPSBOVUxMKTsK KworCQkvKgorCQkgKiBCYXRjaGVzIGdldCB0aGVpciBvd24gcGFsbG9jJ2QgZGVhZEl0ZW1zIGFz IG5lZWRlZCAodGhvdWdoIGNhY2hlZAorCQkgKiBiYXRjaGVzIGtlZXAgdGhlaXIgZGVhZEl0ZW1z IGFsbG9jYXRpb24gd2hlbiByZWN5Y2xlZCkKKwkJICovCisJCWJhdGNoLT5kZWFkSXRlbXMgPSBO VUxMOworCQluZXdfYWxsb2MgPSB0cnVlOworCX0KKworCS8qIFdlIGhhZCBiZXR0ZXIgaGF2ZSBj b21wdXRlZCBiYXRjaF9iYXNlX29mZnNldCBieSBub3cgKi8KKwlBc3NlcnQoc2Nhbi0+YmF0Y2hf YmFzZV9vZmZzZXQgPiAwKTsKKworCS8qIExldCB0aGUgdGFibGUgQU0gaW5pdGlhbGl6ZSBpdHMg cGVyLWJhdGNoIG9wYXF1ZSBhcmVhICovCisJaWYgKHNjYW4tPnhzX2hlYXBmZXRjaCkKKwkJdGFi bGVfaW5kZXhfZmV0Y2hfYmF0Y2hfaW5pdChzY2FuLCBiYXRjaCwgbmV3X2FsbG9jKTsKKworCS8q IHNoYXJlZCBpbml0aWFsaXphdGlvbiAqLworCWJhdGNoLT5rbm93bkVuZEJhY2t3YXJkID0gZmFs c2U7CisJYmF0Y2gtPmtub3duRW5kRm9yd2FyZCA9IGZhbHNlOworCWJhdGNoLT5pc0d1YXJkZWQg PSBmYWxzZTsKKwliYXRjaC0+Zmlyc3RJdGVtID0gLTE7CisJYmF0Y2gtPmxhc3RJdGVtID0gLTE7 CisJYmF0Y2gtPm51bURlYWQgPSAwOworCisJcmV0dXJuIGJhdGNoOworfQorCisvKgorICogUmVs ZWFzZSBhbGxvY2F0ZWQgYmF0Y2gKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBp bmRleCBBTXMgdG8gcmVsZWFzZSBhIGJhdGNoIGFsbG9jYXRlZCBieQorICogaW5kZXhhbV91dGls X2FsbG9jX2JhdGNoLiAgQmF0Y2hlcyBhcmUgY2FjaGVkIGhlcmUgZm9yIHJldXNlIHRvIHJlZHVj ZQorICogcGFsbG9jL3BmcmVlIG92ZXJoZWFkLgorICoKKyAqIEl0J3Mgc2FmZSB0byByZWxlYXNl IGEgYmF0Y2ggaW1tZWRpYXRlbHkgd2hlbiBpdCB3YXMgdXNlZCB0byByZWFkIGEgcGFnZQorICog dGhhdCByZXR1cm5lZCBubyBtYXRjaGVzIHRvIHRoZSBzY2FuLiAgQmF0Y2hlcyBhY3R1YWxseSBy ZXR1cm5lZCBieSBpbmRleAorICogQU0ncyBhbWdldGJhdGNoIHJvdXRpbmUgKGkuZS4gYmF0Y2hl cyBmb3IgcGFnZXMgd2l0aCBvbmUgb3IgbW9yZSBtYXRjaGVzKQorICogbXVzdCBiZSByZWxlYXNl ZCBieSB0YWJsZWFtX3V0aWxfcmVsZWFzZV9iYXRjaCwgd2hpY2ggY2FsbHMgaGVyZSBhZnRlciB0 aGUKKyAqIGluZGV4IEFNJ3MgYW1raWxsaXRlbXNiYXRjaCByb3V0aW5lIChpZiBhbnkpLiAgSW5k ZXggQU1zIHRoYXQgdXNlIGJhdGNoZXMKKyAqIHNob3VsZCBjYWxsIGhlcmUgdG8gcmVsZWFzZSBh IGJhdGNoIGZyb20gdGhlaXIgYW1nZXRiYXRjaCBvciBhbWdldGJpdG1hcAorICogcm91dGluZXMu CisgKgorICogVGhlIHJ1bGVzIGZvciBiYXRjaCBvd25lcnNoaXAgZGlmZmVyIHNsaWdodGx5IGZv ciBhbWdldGJpdG1hcCBzY2Fuczsgc2VlCisgKiB0aGUgYW1nZXRiaXRtYXAgZG9jdW1lbnRhdGlv biBpbiBkb2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21sIGZvciBkZXRhaWxzLgorICovCit2b2lkCitp bmRleGFtX3V0aWxfcmVsZWFzZV9iYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJh dGNoIGJhdGNoKQoreworCWlmICghc2Nhbi0+dXNlYmF0Y2hyaW5nKQorCXsKKwkJLyoKKwkJICog YW1nZXRiaXRtYXAgc2NhbiBjYWxsZXIuCisJCSAqCisJCSAqIGFtZ2V0Yml0bWFwIHJvdXRpbmVz IGFyZSByZXF1aXJlZCB0byBhbGxvY2F0ZSBubyBtb3JlIHRoYW4gb25lCisJCSAqIGJhdGNoIGF0 IGEgdGltZSwgc28gd2UnbGwgYWx3YXlzIGhhdmUgYSBmcmVlIHNsb3QuCisJCSAqLworCQlBc3Nl cnQoc2Nhbi0+YmF0Y2hjYWNoZVswXSA9PSBOVUxMKTsKKwkJQXNzZXJ0KHNjYW4tPmhlYXBSZWxh dGlvbiA9PSBOVUxMKTsKKwkJQXNzZXJ0KGJhdGNoLT5kZWFkSXRlbXMgPT0gTlVMTCk7CisJCUFz c2VydChiYXRjaC0+Y3VyclR1cGxlcyA9PSBOVUxMKTsKKworCQlzY2FuLT5iYXRjaGNhY2hlWzBd ID0gYmF0Y2g7CisJCXJldHVybjsKKwl9CisKKwkvKiBhbWdldGJhdGNoIHNjYW4gY2FsbGVyICov CisJQXNzZXJ0KHNjYW4tPmhlYXBSZWxhdGlvbiAhPSBOVUxMKTsKKworCS8qCisJICogVHJ5IHRv IHN0b3JlIGNhbGxlcidzIGJhdGNoIGluIHRoaXMgYW1nZXRiYXRjaCBzY2FuJ3MgY2FjaGUgb2YK KwkgKiBwcmV2aW91c2x5IHJlbGVhc2VkIGJhdGNoZXMgZmlyc3QKKwkgKi8KKwlpZiAoYmF0Y2hf Y2FjaGVfc3RvcmUoc2NhbiwgYmF0Y2gpKQorCQlyZXR1cm47CisKKwkvKiBDYWNoZSBmdWxsOyBq dXN0IGZyZWUgdGhlIGNhbGxlcidzIGJhdGNoICovCisJaWYgKGJhdGNoLT5kZWFkSXRlbXMpCisJ CXBmcmVlKGJhdGNoLT5kZWFkSXRlbXMpOworCXBmcmVlKGluZGV4X3NjYW5fYmF0Y2hfYmFzZShz Y2FuLCBiYXRjaCkpOworfQorCisvKgorICogVHJ5IHRvIHN0b3JlIGEgYmF0Y2ggaW4gdGhlIHNj YW4ncyBiYXRjaCBjYWNoZS4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgYSBmcmVlIHNsb3Qgd2Fz IGZvdW5kLCBmYWxzZSBpZiB0aGUgY2FjaGUgaXMgZnVsbC4KKyAqLworc3RhdGljIGlubGluZSBi b29sCitiYXRjaF9jYWNoZV9zdG9yZShJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNo IGJhdGNoKQoreworCWZvciAoaW50IGkgPSAwOyBpIDwgSU5ERVhfU0NBTl9DQUNIRV9CQVRDSEVT OyBpKyspCisJeworCQlpZiAoc2Nhbi0+YmF0Y2hjYWNoZVtpXSA9PSBOVUxMKQorCQl7CisJCQlz Y2FuLT5iYXRjaGNhY2hlW2ldID0gYmF0Y2g7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCX0KKwor CXJldHVybiBmYWxzZTsKK30KKworLyoKKyAqIHFzb3J0IGNvbXBhcmlzb24gZnVuY3Rpb24gZm9y IGludCBhcnJheXMKKyAqLworc3RhdGljIGludAorYmF0Y2hfY29tcGFyZV9pbnQoY29uc3Qgdm9p ZCAqdmEsIGNvbnN0IHZvaWQgKnZiKQoreworCWludAkJCWEgPSAqKChjb25zdCBpbnQgKikgdmEp OworCWludAkJCWIgPSAqKChjb25zdCBpbnQgKikgdmIpOworCisJcmV0dXJuIHBnX2NtcF9zMzIo YSwgYik7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvbWVzb24uYnVp bGQgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvbWVzb24uYnVpbGQKaW5kZXggZGE2NGNiNTk1 Li44M2RmYTNmMmIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9tZXNvbi5i dWlsZAorKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvbWVzb24uYnVpbGQKQEAgLTUsNCAr NSw1IEBAIGJhY2tlbmRfc291cmNlcyArPSBmaWxlcygKICAgJ2FtdmFsaWRhdGUuYycsCiAgICdn ZW5hbS5jJywKICAgJ2luZGV4YW0uYycsCisgICdpbmRleGJhdGNoLmMnLAogKQpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9SRUFETUUgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv bmJ0cmVlL1JFQURNRQppbmRleCBjYjkyMWNhMmUuLmEzNzg2OWI3MSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvYWNjZXNzL25idHJlZS9SRUFETUUKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25i dHJlZS9SRUFETUUKQEAgLTE3OSwxOCArMTc5LDE1IEBAIGhvbGQgb24gdG8gdGhlIHBpbiAodXNl ZCB3aGVuIHJlYWRpbmcgZnJvbSB0aGUgbGVhZiBwYWdlKSB1bnRpbCBfYWZ0ZXJfCiB0aGV5J3Jl IGRvbmUgdmlzaXRpbmcgdGhlIGhlYXAgKGZvciBUSURzIGZyb20gcGlubmVkIGxlYWYgcGFnZSkg cHJldmVudHMKIGNvbmN1cnJlbnQgVElEIHJlY3ljbGluZy4gIFZBQ1VVTSBjYW5ub3QgZ2V0IGEg Y29uZmxpY3RpbmcgY2xlYW51cCBsb2NrCiB1bnRpbCB0aGUgaW5kZXggc2NhbiBpcyB0b3RhbGx5 IGZpbmlzaGVkIHByb2Nlc3NpbmcgaXRzIGxlYWYgcGFnZS4KK1RoaXMgaXMgcmVxdWlyZWQgYnkg YW55IGluZGV4IEFNIHRoYXQgaW1wbGVtZW50cyB0aGUgYW1nZXRiYXRjaAoraW50ZXJmYWNlLiAg KFNlZSBhbHNvLCBkb2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21sKS4KIAotVGhpcyBhcHByb2FjaCBp cyBmYWlybHkgY29hcnNlLCBzbyB3ZSBhdm9pZCBpdCB3aGVuZXZlciBwb3NzaWJsZS4gIEluCi1w cmFjdGljZSBtb3N0IGluZGV4IHNjYW5zIHdvbid0IGhvbGQgb250byB0aGVpciBwaW4sIGFuZCBz byB3b24ndCBibG9jawotVkFDVVVNLiAgVGhlc2UgaW5kZXggc2NhbnMgbXVzdCBkZWFsIHdpdGgg VElEIHJlY3ljbGluZyBkaXJlY3RseSwgd2hpY2ggaXMKLW1vcmUgY29tcGxpY2F0ZWQgYW5kIG5v dCBhbHdheXMgcG9zc2libGUuICBTZWUgbGF0ZXIgc2VjdGlvbiBvbiBtYWtpbmcKLWNvbmN1cnJl bnQgVElEIHJlY3ljbGluZyBzYWZlLgotCi1PcHBvcnR1bmlzdGljIGluZGV4IHR1cGxlIGRlbGV0 aW9uIHBlcmZvcm1zIGFsbW9zdCB0aGUgc2FtZSBwYWdlLWxldmVsCi1tb2RpZmljYXRpb25zIHdo aWxlIG9ubHkgaG9sZGluZyBhbiBleGNsdXNpdmUgbG9jay4gIFRoaXMgaXMgc2FmZSBiZWNhdXNl Ci10aGVyZSBpcyBubyBxdWVzdGlvbiBvZiBUSUQgcmVjeWNsaW5nIHRha2luZyBwbGFjZSBsYXRl ciBvbiAtLSBvbmx5IFZBQ1VVTQotY2FuIG1ha2UgVElEcyByZWN5Y2xhYmxlLiAgU2VlIGFsc28g c2ltcGxlIGRlbGV0aW9uIGFuZCBib3R0b20tdXAKLWRlbGV0aW9uLCBiZWxvdy4KK09wcG9ydHVu aXN0aWMgaW5kZXggdHVwbGUgZGVsZXRpb24gcGVyZm9ybXMgdGhlIHNhbWUgcGFnZS1sZXZlbAor bW9kaWZpY2F0aW9ucyBhcyBWQUNVVU0sIHdoaWxlIG9ubHkgaG9sZGluZyBhbiBleGNsdXNpdmUg bG9jay4gIFRoaXMgaXMKK3NhZmUgYmVjYXVzZSB0aGVyZSBpcyBubyBxdWVzdGlvbiBvZiBUSUQg cmVjeWNsaW5nIHRha2luZyBwbGFjZSAtLSBvbmx5CitWQUNVVU0gY2FuIG1ha2UgVElEcyByZWN5 Y2xhYmxlLiAgSW4gb3RoZXIgd29yZHMsIFZBQ1VVTSdzIGNsZWFudXAgbG9jaworc2VydmVzIHRv IHByb3RlY3Qgbm9uLU1WQ0Mgc25hcHNob3Qgc2NhbnMgZnJvbSBjb25jdXJyZW50IFRJRCByZWN5 Y2xpbmcKK2hhemFyZHM7IGl0IGRvZXNuJ3QgcHJvdGVjdCB0aGUgQi1UcmVlIHN0cnVjdHVyZSBp dHNlbGYuCiAKIEJlY2F1c2UgYSBwaW4gaXMgbm90IGFsd2F5cyBoZWxkLCBhbmQgYSBwYWdlIGNh biBiZSBzcGxpdCBldmVuIHdoaWxlCiBzb21lb25lIGRvZXMgaG9sZCBhIHBpbiBvbiBpdCwgaXQg aXMgcG9zc2libGUgdGhhdCBhbiBpbmRleHNjYW4gd2lsbApAQCAtNDQwLDU0ICs0MzcsNiBAQCB3 aGVuZXZlciBpdCBpcyBzdWJzZXF1ZW50bHkgdGFrZW4gZnJvbSB0aGUgRlNNIGZvciByZXVzZS4g IFRoZSBkZWxldGVkCiBwYWdlJ3MgY29udGVudHMgd2lsbCBiZSBvdmVyd3JpdHRlbiBieSB0aGUg c3BsaXQgb3BlcmF0aW9uIChpdCB3aWxsIGJlY29tZQogdGhlIG5ldyByaWdodCBzaWJsaW5nIHBh Z2UpLgogCi1NYWtpbmcgY29uY3VycmVudCBUSUQgcmVjeWNsaW5nIHNhZmUKLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1BcyBleHBsYWluZWQgaW4gdGhlIGVhcmxpZXIg c2VjdGlvbiBhYm91dCBkZWxldGluZyBpbmRleCB0dXBsZXMgZHVyaW5nCi1WQUNVVU0sIHdlIGlt cGxlbWVudCBhIGxvY2tpbmcgcHJvdG9jb2wgdGhhdCBhbGxvd3MgaW5kaXZpZHVhbCBpbmRleCBz Y2FucwotdG8gYXZvaWQgY29uY3VycmVudCBUSUQgcmVjeWNsaW5nLiAgSW5kZXggc2NhbnMgb3B0 LW91dCAoYW5kIHNvIGRyb3AgdGhlaXIKLWxlYWYgcGFnZSBwaW4gd2hlbiB2aXNpdGluZyB0aGUg aGVhcCkgd2hlbmV2ZXIgaXQncyBzYWZlIHRvIGRvIHNvLCB0aG91Z2guCi1Ecm9wcGluZyB0aGUg cGluIGVhcmx5IGlzIHVzZWZ1bCBiZWNhdXNlIGl0IGF2b2lkcyBibG9ja2luZyBwcm9ncmVzcyBi eQotVkFDVVVNLiAgVGhpcyBpcyBwYXJ0aWN1bGFybHkgaW1wb3J0YW50IHdpdGggaW5kZXggc2Nh bnMgdXNlZCBieSBjdXJzb3JzLAotc2luY2UgaWRsZSBjdXJzb3JzIHNvbWV0aW1lcyBzdG9wIGZv ciByZWxhdGl2ZWx5IGxvbmcgcGVyaW9kcyBvZiB0aW1lLiAgSW4KLWV4dHJlbWUgY2FzZXMsIGEg Y2xpZW50IGFwcGxpY2F0aW9uIG1heSBob2xkIG9uIHRvIGFuIGlkbGUgY3Vyc29ycyBmb3IKLWhv dXJzIG9yIGV2ZW4gZGF5cy4gIEJsb2NraW5nIFZBQ1VVTSBmb3IgdGhhdCBsb25nIGNvdWxkIGJl IGRpc2FzdHJvdXMuCi0KLUluZGV4IHNjYW5zIHRoYXQgZG9uJ3QgaG9sZCBvbiB0byBhIGJ1ZmZl ciBwaW4gYXJlIHByb3RlY3RlZCBieSBob2xkaW5nIGFuCi1NVkNDIHNuYXBzaG90IGluc3RlYWQu ICBUaGlzIG1vcmUgbGltaXRlZCBpbnRlcmxvY2sgcHJldmVudHMgd3JvbmcgYW5zd2VycwotdG8g cXVlcmllcywgYnV0IGl0IGRvZXMgbm90IHByZXZlbnQgY29uY3VycmVudCBUSUQgcmVjeWNsaW5n IGl0c2VsZiAob25seQotaG9sZGluZyBvbnRvIHRoZSBsZWFmIHBhZ2UgcGluIHdoaWxlIGFjY2Vz c2luZyB0aGUgaGVhcCBlbnN1cmVzIHRoYXQpLgotCi1JbmRleC1vbmx5IHNjYW5zIGNhbiBuZXZl ciBkcm9wIHRoZWlyIGJ1ZmZlciBwaW4sIHNpbmNlIHRoZXkgYXJlIHVuYWJsZSB0bwotdG9sZXJh dGUgaGF2aW5nIGEgcmVmZXJlbmNlZCBUSUQgYmVjb21lIHJlY3ljbGFibGUuICBJbmRleC1vbmx5 IHNjYW5zCi10eXBpY2FsbHkganVzdCB2aXNpdCB0aGUgdmlzaWJpbGl0eSBtYXAgKG5vdCB0aGUg aGVhcCBwcm9wZXIpLCBhbmQgc28gd2lsbAotbm90IHJlbGlhYmx5IG5vdGljZSB0aGF0IGFueSBz dGFsZSBUSUQgcmVmZXJlbmNlIChmb3IgYSBUSUQgdGhhdCBwb2ludGVkCi10byBhIGRlYWQtdG8t YWxsIGhlYXAgaXRlbSBhdCBmaXJzdCkgd2FzIGNvbmN1cnJlbnRseSBtYXJrZWQgTFBfVU5VU0VE IGluCi10aGUgaGVhcCBieSBWQUNVVU0uICBUaGlzIGNvdWxkIGVhc2lseSBhbGxvdyBWQUNVVU0g dG8gc2V0IHRoZSB3aG9sZSBoZWFwCi1wYWdlIHRvIGFsbC12aXNpYmxlIGluIHRoZSB2aXNpYmls aXR5IG1hcCBpbW1lZGlhdGVseSBhZnRlcndhcmRzLiAgQW4gTVZDQwotc25hcHNob3QgaXMgb25s eSBzdWZmaWNpZW50IHRvIGF2b2lkIHByb2JsZW1zIGR1cmluZyBwbGFpbiBpbmRleCBzY2Fucwot YmVjYXVzZSB0aGV5IG11c3QgYWNjZXNzIGdyYW51bGFyIHZpc2liaWxpdHkgaW5mb3JtYXRpb24g ZnJvbSB0aGUgaGVhcAotcHJvcGVyLiAgQSBwbGFpbiBpbmRleCBzY2FuIHdpbGwgZXZlbiByZWNv Z25pemUgTFBfVU5VU0VEIGl0ZW1zIGluIHRoZQotaGVhcCAoaXRlbXMgdGhhdCBjb3VsZCBiZSBy ZWN5Y2xlZCBidXQgaGF2ZW4ndCBiZWVuIGp1c3QgeWV0KSBhcyAibm90Ci12aXNpYmxlIiAtLSBl dmVuIHdoZW4gdGhlIGhlYXAgcGFnZSBpcyBnZW5lcmFsbHkgY29uc2lkZXJlZCBhbGwtdmlzaWJs ZS4KLQotTFBfREVBRCBzZXR0aW5nIG9mIGluZGV4IHR1cGxlcyBieSB0aGUga2lsbF9wcmlvcl90 dXBsZSBvcHRpbWl6YXRpb24KLShkZXNjcmliZWQgaW4gZnVsbCBpbiBzaW1wbGUgZGVsZXRpb24s IGJlbG93KSBpcyBhbHNvIG1vcmUgY29tcGxpY2F0ZWQgZm9yCi1pbmRleCBzY2FucyB0aGF0IGRy b3AgdGhlaXIgbGVhZiBwYWdlIHBpbnMuICBXZSBtdXN0IGJlIGNhcmVmdWwgdG8gYXZvaWQKLUxQ X0RFQUQtbWFya2luZyBhbnkgbmV3IGluZGV4IHR1cGxlIHRoYXQgbG9va3MgbGlrZSBhIGtub3du LWRlYWQgaW5kZXgKLXR1cGxlIGJlY2F1c2UgaXQgaGFwcGVucyB0byBzaGFyZSB0aGUgc2FtZSBU SUQsIGZvbGxvd2luZyBjb25jdXJyZW50IFRJRAotcmVjeWNsaW5nLiAgSXQncyBqdXN0IGFib3V0 IHBvc3NpYmxlIHRoYXQgc29tZSBvdGhlciBzZXNzaW9uIGluc2VydGVkIGEKLW5ldywgdW5yZWxh dGVkIGluZGV4IHR1cGxlLCBvbiB0aGUgc2FtZSBsZWFmIHBhZ2UsIHdoaWNoIGhhcyB0aGUgc2Ft ZQotb3JpZ2luYWwgVElELiAgSXQgd291bGQgYmUgdG90YWxseSB3cm9uZyB0byBMUF9ERUFELXNl dCB0aGlzIG5ldywKLXVucmVsYXRlZCBpbmRleCB0dXBsZS4KLQotV2UgaGFuZGxlIHRoaXMga2ls bF9wcmlvcl90dXBsZSByYWNlIGNvbmRpdGlvbiBieSBoYXZpbmcgYWZmZWN0ZWQgaW5kZXgKLXNj YW5zIGNvbnNlcnZhdGl2ZWx5IGFzc3VtZSB0aGF0IGFueSBjaGFuZ2UgdG8gdGhlIGxlYWYgcGFn ZSBhdCBhbGwKLWltcGxpZXMgdGhhdCBpdCB3YXMgcmVhY2hlZCBieSBidGJ1bGtkZWxldGUgaW4g dGhlIGludGVyaW0gcGVyaW9kIHdoZW4gbm8KLWJ1ZmZlciBwaW4gd2FzIGhlbGQuICBUaGlzIGlz IGltcGxlbWVudGVkIGJ5IG5vdCBzZXR0aW5nIGFueSBMUF9ERUFEIGJpdHMKLW9uIHRoZSBsZWFm IHBhZ2UgYXQgYWxsIHdoZW4gdGhlIHBhZ2UncyBMU04gaGFzIGNoYW5nZWQuICAoVGhpcyBpcyB3 aHkgd2UKLWltcGxlbWVudCAiZmFrZSIgTFNOcyBmb3IgdW5sb2dnZWQgaW5kZXggcmVsYXRpb25z LikKLQogRmFzdHBhdGggRm9yIEluZGV4IEluc2VydGlvbgogLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQogCkBAIC03MzQsNyArNjgzLDcgQEAgb2YgcmVhZGVycyBjb3VsZCBzdGlsbCBtb3Zl IHJpZ2h0IHRvIHJlY292ZXIgaWYgd2UgZGlkbid0IGNvdXBsZQogc2FtZS1sZXZlbCBsb2Nrcyks IGJ1dCB3ZSBwcmVmZXIgdG8gYmUgY29uc2VydmF0aXZlIGhlcmUuCiAKIER1cmluZyByZWNvdmVy eSBhbGwgaW5kZXggc2NhbnMgc3RhcnQgd2l0aCBpZ25vcmVfa2lsbGVkX3R1cGxlcyA9IGZhbHNl Ci1hbmQgd2UgbmV2ZXIgc2V0IGtpbGxfcHJpb3JfdHVwbGUuIFdlIGRvIHRoaXMgYmVjYXVzZSB0 aGUgb2xkZXN0IHhtaW4KK2FuZCB3ZSBuZXZlciBMUF9ERUFELW1hcmsgdHVwbGVzLiBXZSBkbyB0 aGlzIGJlY2F1c2UgdGhlIG9sZGVzdCB4bWluCiBvbiB0aGUgc3RhbmRieSBzZXJ2ZXIgY2FuIGJl IG9sZGVyIHRoYW4gdGhlIG9sZGVzdCB4bWluIG9uIHRoZSBwcmltYXJ5CiBzZXJ2ZXIsIHdoaWNo IG1lYW5zIHR1cGxlcyBjYW4gYmUgbWFya2VkIExQX0RFQUQgZXZlbiB3aGVuIHRoZXkgYXJlCiBz dGlsbCB2aXNpYmxlIG9uIHRoZSBzdGFuZGJ5LiBXZSBkb24ndCBXQUwgbG9nIHR1cGxlIExQX0RF QUQgYml0cywgYnV0CkBAIC03NTYsOSArNzA1LDggQEAgbm9uLU1WQ0Mgc2NhbnMgaXMgbm90IHJl cXVpcmVkIG9uIHN0YW5kYnkgbm9kZXMuIFdlIHN0aWxsIGdldCBhIGZ1bGwKIGNsZWFudXAgbG9j ayB3aGVuIHJlcGxheWluZyBWQUNVVU0gcmVjb3JkcyBkdXJpbmcgcmVjb3ZlcnksIGJ1dCByZWNv dmVyeQogZG9lcyBub3QgbmVlZCB0byBsb2NrIGV2ZXJ5IGxlYWYgcGFnZSAob25seSB0aG9zZSBs ZWFmIHBhZ2VzIHRoYXQgaGF2ZQogaXRlbXMgdG8gZGVsZXRlKSAtLSB0aGF0J3Mgc3VmZmljaWVu dCB0byBhdm9pZCBicmVha2luZyBpbmRleC1vbmx5IHNjYW5zCi1kdXJpbmcgcmVjb3ZlcnkgKHNl ZSBzZWN0aW9uIGFib3ZlIGFib3V0IG1ha2luZyBUSUQgcmVjeWNsaW5nIHNhZmUpLiBUaGF0Ci1s ZWF2ZXMgY29uY2VybiBvbmx5IGZvciBwbGFpbiBpbmRleCBzY2Fucy4gKFhYWDogTm90IGFjdHVh bGx5IGNsZWFyIHdoeQotdGhpcyBpcyB0b3RhbGx5IHVubmVjZXNzYXJ5IGR1cmluZyByZWNvdmVy eS4pCitkdXJpbmcgcmVjb3ZlcnkuIFRoYXQgbGVhdmVzIGNvbmNlcm4gb25seSBmb3IgcGxhaW4g aW5kZXggc2NhbnMuCisoWFhYOiBOb3QgYWN0dWFsbHkgY2xlYXIgd2h5IHRoaXMgaXMgdG90YWxs eSB1bm5lY2Vzc2FyeSBkdXJpbmcgcmVjb3ZlcnkuKQogCiBNVkNDIHNuYXBzaG90IHBsYWluIGlu ZGV4IHNjYW5zIGFyZSBhbHdheXMgc2FmZSwgZm9yIHRoZSBzYW1lIHJlYXNvbnMgdGhhdAogdGhl eSdyZSBzYWZlIGR1cmluZyBvcmlnaW5hbCBleGVjdXRpb24uICBIZWFwVHVwbGVTYXRpc2ZpZXNU b2FzdCgpIGRvZXNuJ3QKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0 cGFnZS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRwYWdlLmMKaW5kZXggMDU0NzAz ODYxLi5iOWMyNzk1MDggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0 cGFnZS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cGFnZS5jCkBAIC0xMDYw LDYgKzEwNjAsOSBAQCBfYnRfcmVsYnVmKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGJ1ZikKICAqIExv Y2sgaXMgYWNxdWlyZWQgd2l0aG91dCBhY3F1aXJpbmcgYW5vdGhlciBwaW4uICBUaGlzIGlzIGxp a2UgYSByYXcKICAqIExvY2tCdWZmZXIoKSBjYWxsLCBidXQgcGVyZm9ybXMgZXh0cmEgc3RlcHMg bmVlZGVkIGJ5IFZhbGdyaW5kLgogICoKKyAqIE5vdGU6IF9idF9iYXRjaF91bmxvY2sgaW4gbmJ0 c2VhcmNoLmMgKGluZGV4YW1fdXRpbF91bmxvY2tfYmF0Y2ggd3JhcHBlcgorICogZnVuY3Rpb24p IGhhcyBtYXRjaGluZyBWYWxncmluZCBidWZmZXIgbG9jayBpbnN0cnVtZW50YXRpb24uCisgKgog ICogTm90ZTogQ2FsbGVyIG1heSBuZWVkIHRvIGNhbGwgX2J0X2NoZWNrcGFnZSgpIHdpdGggYnVm IHdoZW4gcGluIG9uIGJ1ZgogICogd2Fzbid0IG9yaWdpbmFsbHkgYWNxdWlyZWQgaW4gX2J0X2dl dGJ1ZigpIG9yIF9idF9yZWxhbmRnZXRidWYoKS4KICAqLwpAQCAtMTEwMSwxMyArMTEwNCwxOSBA QCBfYnRfdW5sb2NrYnVmKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGJ1ZikKIAkgKiBCdWZmZXIgaXMg cGlubmVkIGFuZCBsb2NrZWQsIHdoaWNoIG1lYW5zIHRoYXQgaXQgaXMgZXhwZWN0ZWQgdG8gYmUK IAkgKiBkZWZpbmVkIGFuZCBhZGRyZXNzYWJsZS4gIENoZWNrIHRoYXQgcHJvYWN0aXZlbHkuCiAJ ICovCi0JVkFMR1JJTkRfQ0hFQ0tfTUVNX0lTX0RFRklORUQoQnVmZmVyR2V0UGFnZShidWYpLCBC TENLU1opOworI2lmIGRlZmluZWQoVVNFX1ZBTEdSSU5EKQorCVBhZ2UJCXBhZ2UgPSBCdWZmZXJH ZXRQYWdlKGJ1Zik7CisKKwlWQUxHUklORF9DSEVDS19NRU1fSVNfREVGSU5FRChwYWdlLCBCTENL U1opOworI2VuZGlmCiAKIAkvKiBMb2NrQnVmZmVyKCkgYXNzZXJ0cyB0aGF0IHBpbiBpcyBoZWxk IGJ5IHRoaXMgYmFja2VuZCAqLwogCUxvY2tCdWZmZXIoYnVmLCBCVUZGRVJfTE9DS19VTkxPQ0sp OwogCisjaWYgZGVmaW5lZChVU0VfVkFMR1JJTkQpCiAJaWYgKCFSZWxhdGlvblVzZXNMb2NhbEJ1 ZmZlcnMocmVsKSkKLQkJVkFMR1JJTkRfTUFLRV9NRU1fTk9BQ0NFU1MoQnVmZmVyR2V0UGFnZShi dWYpLCBCTENLU1opOworCQlWQUxHUklORF9NQUtFX01FTV9OT0FDQ0VTUyhwYWdlLCBCTENLU1op OworI2VuZGlmCiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVl L25idHJlYWRwYWdlLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlYWRwYWdlLmMK aW5kZXggMmJhMWNhNjYwLi4zOWM2NjE0OTggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vz cy9uYnRyZWUvbmJ0cmVhZHBhZ2UuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25i dHJlYWRwYWdlLmMKQEAgLTMyLDYgKzMyLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgQlRSZWFkUGFnZVN0 YXRlCiB7CiAJLyogSW5wdXQgcGFyYW1ldGVycywgc2V0IGJ5IF9idF9yZWFkcGFnZSBmb3IgX2J0 X2NoZWNra2V5cyAqLwogCVNjYW5EaXJlY3Rpb24gZGlyOwkJCS8qIGN1cnJlbnQgc2NhbiBkaXJl Y3Rpb24gKi8KKwlCbG9ja051bWJlciBjdXJycGFnZTsJCS8qIGN1cnJlbnQgcGFnZSBiZWluZyBy ZWFkICovCiAJT2Zmc2V0TnVtYmVyIG1pbm9mZjsJCS8qIExvd2VzdCBub24tcGl2b3QgdHVwbGUn cyBvZmZzZXQgKi8KIAlPZmZzZXROdW1iZXIgbWF4b2ZmOwkJLyogSGlnaGVzdCBub24tcGl2b3Qg dHVwbGUncyBvZmZzZXQgKi8KIAlJbmRleFR1cGxlCWZpbmFsdHVwOwkJLyogTmVlZGVkIGJ5IHNj YW5zIHdpdGggYXJyYXkga2V5cyAqLwpAQCAtNjMsMTQgKzY0LDEzIEBAIHN0YXRpYyBib29sIF9i dF9zY2FuYmVoaW5kX2NoZWNra2V5cyhJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24g ZGlyLAogCQkJCQkJCQkJIEluZGV4VHVwbGUgZmluYWx0dXApOwogc3RhdGljIGJvb2wgX2J0X29w cG9kaXJfY2hlY2trZXlzKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsCiAJ CQkJCQkJCSAgSW5kZXhUdXBsZSBmaW5hbHR1cCk7Ci1zdGF0aWMgdm9pZCBfYnRfc2F2ZWl0ZW0o QlRTY2FuT3BhcXVlIHNvLCBpbnQgaXRlbUluZGV4LAotCQkJCQkJIE9mZnNldE51bWJlciBvZmZu dW0sIEluZGV4VHVwbGUgaXR1cCk7Ci1zdGF0aWMgaW50CV9idF9zZXR1cHBvc3RpbmdpdGVtcyhC VFNjYW5PcGFxdWUgc28sIGludCBpdGVtSW5kZXgsCi0JCQkJCQkJCSAgT2Zmc2V0TnVtYmVyIG9m Zm51bSwgY29uc3QgSXRlbVBvaW50ZXJEYXRhICpoZWFwVGlkLAotCQkJCQkJCQkgIEluZGV4VHVw bGUgaXR1cCk7Ci1zdGF0aWMgaW5saW5lIHZvaWQgX2J0X3NhdmVwb3N0aW5naXRlbShCVFNjYW5P cGFxdWUgc28sIGludCBpdGVtSW5kZXgsCi0JCQkJCQkJCQkgICBPZmZzZXROdW1iZXIgb2ZmbnVt LAotCQkJCQkJCQkJICAgSXRlbVBvaW50ZXIgaGVhcFRpZCwgaW50IHR1cGxlT2Zmc2V0KTsKK3N0 YXRpYyB2b2lkIF9idF9zYXZlaXRlbShJbmRleFNjYW5CYXRjaCBuZXdiYXRjaCwgaW50IGl0ZW1J bmRleCwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKKwkJCQkJCSBJbmRleFR1cGxlIGl0dXAsIGludCAq dHVwbGVPZmZzZXQpOworc3RhdGljIGludAlfYnRfc2V0dXBwb3N0aW5naXRlbXMoSW5kZXhTY2Fu QmF0Y2ggbmV3YmF0Y2gsIGludCBpdGVtSW5kZXgsCisJCQkJCQkJCSAgT2Zmc2V0TnVtYmVyIG9m Zm51bSwgY29uc3QgSXRlbVBvaW50ZXJEYXRhICp0YWJsZVRpZCwKKwkJCQkJCQkJICBJbmRleFR1 cGxlIGl0dXAsIGludCAqdHVwbGVPZmZzZXQpOworc3RhdGljIGlubGluZSB2b2lkIF9idF9zYXZl cG9zdGluZ2l0ZW0oSW5kZXhTY2FuQmF0Y2ggbmV3YmF0Y2gsIGludCBpdGVtSW5kZXgsIE9mZnNl dE51bWJlciBvZmZudW0sCisJCQkJCQkJCQkgICBJdGVtUG9pbnRlciB0YWJsZVRpZCwgaW50IGJh c2VPZmZzZXQpOwogc3RhdGljIGJvb2wgX2J0X2NoZWNra2V5cyhJbmRleFNjYW5EZXNjIHNjYW4s IEJUUmVhZFBhZ2VTdGF0ZSAqcHN0YXRlLCBib29sIGFycmF5S2V5cywKIAkJCQkJCSAgSW5kZXhU dXBsZSB0dXBsZSwgaW50IHR1cG5hdHRzKTsKIHN0YXRpYyBib29sIF9idF9jaGVja19jb21wYXJl KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsCkBAIC0xMTEsMTUgKzExMSwx NSBAQCBzdGF0aWMgYm9vbCBfYnRfdmVyaWZ5X2tleXNfd2l0aF9hcnJheWtleXMoSW5kZXhTY2Fu RGVzYyBzY2FuKTsKIAogCiAvKgotICoJX2J0X3JlYWRwYWdlKCkgLS0gTG9hZCBkYXRhIGZyb20g Y3VycmVudCBpbmRleCBwYWdlIGludG8gc28tPmN1cnJQb3MKKyAqCV9idF9yZWFkcGFnZSgpIC0t IExvYWQgZGF0YSBmcm9tIGN1cnJlbnQgaW5kZXggcGFnZSBpbnRvIG5ld2JhdGNoLgogICoKLSAq IENhbGxlciBtdXN0IGhhdmUgcGlubmVkIGFuZCByZWFkLWxvY2tlZCBzby0+Y3VyclBvcy5idWY7 IHRoZSBidWZmZXIncyBzdGF0ZQotICogaXMgbm90IGNoYW5nZWQgaGVyZS4gIEFsc28sIGN1cnJQ b3MubW9yZUxlZnQgYW5kIG1vcmVSaWdodCBtdXN0IGJlIHZhbGlkOwotICogdGhleSBhcmUgdXBk YXRlZCBhcyBhcHByb3ByaWF0ZS4gIEFsbCBvdGhlciBmaWVsZHMgb2Ygc28tPmN1cnJQb3MgYXJl CisgKiBDYWxsZXIgbXVzdCBoYXZlIHBpbm5lZCBhbmQgcmVhZC1sb2NrZWQgbmV3YmF0Y2guYnVm OyB0aGUgYnVmZmVyJ3Mgc3RhdGUgaXMKKyAqIG5vdCBjaGFuZ2VkIGhlcmUuICBBbHNvLCBuZXdi YXRjaCdzIG1vcmVMZWZ0IGFuZCBtb3JlUmlnaHQgbXVzdCBiZSB2YWxpZDsKKyAqIHRoZXkgYXJl IHVwZGF0ZWQgYXMgYXBwcm9wcmlhdGUuICBBbGwgb3RoZXIgZmllbGRzIG9mIG5ld2JhdGNoIGFy ZQogICogaW5pdGlhbGl6ZWQgZnJvbSBzY3JhdGNoIGhlcmUuCiAgKgogICogV2Ugc2NhbiB0aGUg Y3VycmVudCBwYWdlIHN0YXJ0aW5nIGF0IG9mZm51bSBhbmQgbW92aW5nIGluIHRoZSBpbmRpY2F0 ZWQKLSAqIGRpcmVjdGlvbi4gIEFsbCBpdGVtcyBtYXRjaGluZyB0aGUgc2NhbiBrZXlzIGFyZSBs b2FkZWQgaW50byBjdXJyUG9zLml0ZW1zLgorICogZGlyZWN0aW9uLiAgQWxsIGl0ZW1zIG1hdGNo aW5nIHRoZSBzY2FuIGtleXMgYXJlIHNhdmVkIGluIG5ld2JhdGNoLml0ZW1zLgogICogbW9yZUxl ZnQgb3IgbW9yZVJpZ2h0IChhcyBhcHByb3ByaWF0ZSkgaXMgY2xlYXJlZCBpZiBfYnRfY2hlY2tr ZXlzIHJlcG9ydHMKICAqIHRoYXQgdGhlcmUgY2FuIGJlIG5vIG1vcmUgbWF0Y2hpbmcgdHVwbGVz IGluIHRoZSBjdXJyZW50IHNjYW4gZGlyZWN0aW9uCiAgKiAoY291bGQganVzdCBiZSBmb3IgdGhl IGN1cnJlbnQgcHJpbWl0aXZlIGluZGV4IHNjYW4gd2hlbiBzY2FuIGhhcyBhcnJheXMpLgpAQCAt MTMxLDExICsxMzEsMTIgQEAgc3RhdGljIGJvb2wgX2J0X3ZlcmlmeV9rZXlzX3dpdGhfYXJyYXlr ZXlzKEluZGV4U2NhbkRlc2Mgc2Nhbik7CiAgKiBSZXR1cm5zIHRydWUgaWYgYW55IG1hdGNoaW5n IGl0ZW1zIGZvdW5kIG9uIHRoZSBwYWdlLCBmYWxzZSBpZiBub25lLgogICovCiBib29sCi1fYnRf cmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVt YmVyIG9mZm51bSwKLQkJCSBib29sIGZpcnN0cGFnZSkKK19idF9yZWFkcGFnZShJbmRleFNjYW5E ZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIG5ld2JhdGNoLCBTY2FuRGlyZWN0aW9uIGRpciwKKwkJ CSBPZmZzZXROdW1iZXIgb2ZmbnVtLCBib29sIGZpcnN0cGFnZSkKIHsKIAlSZWxhdGlvbglyZWwg PSBzY2FuLT5pbmRleFJlbGF0aW9uOwogCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUp IHNjYW4tPm9wYXF1ZTsKKwlCVEJhdGNoRGF0YSAqYnRuZXdiYXRjaCA9IEJUQmF0Y2hHZXREYXRh KHNjYW4sIG5ld2JhdGNoKTsKIAlQYWdlCQlwYWdlOwogCUJUUGFnZU9wYXF1ZSBvcGFxdWU7CiAJ T2Zmc2V0TnVtYmVyIG1pbm9mZjsKQEAgLTE0NCwyMyArMTQ1LDIwIEBAIF9idF9yZWFkcGFnZShJ bmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVt LAogCWJvb2wJCWFycmF5S2V5cywKIAkJCQlpZ25vcmVfa2lsbGVkX3R1cGxlcyA9IHNjYW4tPmln bm9yZV9raWxsZWRfdHVwbGVzOwogCWludAkJCWl0ZW1JbmRleCwKKwkJCQl0dXBsZU9mZnNldCA9 IDAsCiAJCQkJaW5kbmF0dHM7CiAKIAkvKiBzYXZlIHRoZSBwYWdlL2J1ZmZlciBibG9jayBudW1i ZXIsIGFsb25nIHdpdGggaXRzIHNpYmxpbmcgbGlua3MgKi8KLQlwYWdlID0gQnVmZmVyR2V0UGFn ZShzby0+Y3VyclBvcy5idWYpOworCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGJ0bmV3YmF0Y2gtPmJ1 Zik7CiAJb3BhcXVlID0gQlRQYWdlR2V0T3BhcXVlKHBhZ2UpOwotCXNvLT5jdXJyUG9zLmN1cnJQ YWdlID0gQnVmZmVyR2V0QmxvY2tOdW1iZXIoc28tPmN1cnJQb3MuYnVmKTsKLQlzby0+Y3VyclBv cy5wcmV2UGFnZSA9IG9wYXF1ZS0+YnRwb19wcmV2OwotCXNvLT5jdXJyUG9zLm5leHRQYWdlID0g b3BhcXVlLT5idHBvX25leHQ7Ci0JLyogZGVsYXkgc2V0dGluZyBzby0+Y3VyclBvcy5sc24gdW50 aWwgX2J0X2Ryb3BfbG9ja19hbmRfbWF5YmVfcGluICovCi0JcHN0YXRlLmRpciA9IHNvLT5jdXJy UG9zLmRpciA9IGRpcjsKLQlzby0+Y3VyclBvcy5uZXh0VHVwbGVPZmZzZXQgPSAwOworCXBzdGF0 ZS5jdXJycGFnZSA9IGJ0bmV3YmF0Y2gtPmN1cnJQYWdlID0gQnVmZmVyR2V0QmxvY2tOdW1iZXIo YnRuZXdiYXRjaC0+YnVmKTsKKwlidG5ld2JhdGNoLT5wcmV2UGFnZSA9IG9wYXF1ZS0+YnRwb19w cmV2OworCWJ0bmV3YmF0Y2gtPm5leHRQYWdlID0gb3BhcXVlLT5idHBvX25leHQ7CisJcHN0YXRl LmRpciA9IG5ld2JhdGNoLT5kaXIgPSBkaXI7CiAKIAkvKiBlaXRoZXIgbW9yZVJpZ2h0IG9yIG1v cmVMZWZ0IHNob3VsZCBiZSBzZXQgbm93IChtYXkgYmUgdW5zZXQgbGF0ZXIpICovCi0JQXNzZXJ0 KFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSA/IHNvLT5jdXJyUG9zLm1vcmVSaWdodCA6Ci0J CSAgIHNvLT5jdXJyUG9zLm1vcmVMZWZ0KTsKKwlBc3NlcnQoU2NhbkRpcmVjdGlvbklzRm9yd2Fy ZChkaXIpID8gYnRuZXdiYXRjaC0+bW9yZVJpZ2h0IDogYnRuZXdiYXRjaC0+bW9yZUxlZnQpOwog CUFzc2VydCghUF9JR05PUkUob3BhcXVlKSk7Ci0JQXNzZXJ0KEJUU2NhblBvc0lzUGlubmVkKHNv LT5jdXJyUG9zKSk7CiAJQXNzZXJ0KCFzby0+bmVlZFByaW1TY2FuKTsKIAogCS8qIGluaXRpYWxp emUgbG9jYWwgdmFyaWFibGVzICovCkBAIC0xODgsMTQgKzE4NiwxNCBAQCBfYnRfcmVhZHBhZ2Uo SW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51 bSwKIAl7CiAJCS8qIGFsbG93IG5leHQvcHJldiBwYWdlIHRvIGJlIHJlYWQgYnkgb3RoZXIgd29y a2VyIHdpdGhvdXQgZGVsYXkgKi8KIAkJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkK LQkJCV9idF9wYXJhbGxlbF9yZWxlYXNlKHNjYW4sIHNvLT5jdXJyUG9zLm5leHRQYWdlLAotCQkJ CQkJCQkgc28tPmN1cnJQb3MuY3VyclBhZ2UpOworCQkJX2J0X3BhcmFsbGVsX3JlbGVhc2Uoc2Nh biwgYnRuZXdiYXRjaC0+bmV4dFBhZ2UsCisJCQkJCQkJCSBidG5ld2JhdGNoLT5jdXJyUGFnZSk7 CiAJCWVsc2UKLQkJCV9idF9wYXJhbGxlbF9yZWxlYXNlKHNjYW4sIHNvLT5jdXJyUG9zLnByZXZQ YWdlLAotCQkJCQkJCQkgc28tPmN1cnJQb3MuY3VyclBhZ2UpOworCQkJX2J0X3BhcmFsbGVsX3Jl bGVhc2Uoc2NhbiwgYnRuZXdiYXRjaC0+cHJldlBhZ2UsCisJCQkJCQkJCSBidG5ld2JhdGNoLT5j dXJyUGFnZSk7CiAJfQogCi0JUHJlZGljYXRlTG9ja1BhZ2UocmVsLCBzby0+Y3VyclBvcy5jdXJy UGFnZSwgc2Nhbi0+eHNfc25hcHNob3QpOworCVByZWRpY2F0ZUxvY2tQYWdlKHJlbCwgcHN0YXRl LmN1cnJwYWdlLCBzY2FuLT54c19zbmFwc2hvdCk7CiAKIAlpZiAoU2NhbkRpcmVjdGlvbklzRm9y d2FyZChkaXIpKQogCXsKQEAgLTIxMiwxMSArMjEwLDExIEBAIF9idF9yZWFkcGFnZShJbmRleFNj YW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtLAogCQkJ CQkhX2J0X3NjYW5iZWhpbmRfY2hlY2trZXlzKHNjYW4sIGRpciwgcHN0YXRlLmZpbmFsdHVwKSkK IAkJCQl7CiAJCQkJCS8qIFNjaGVkdWxlIGFub3RoZXIgcHJpbWl0aXZlIGluZGV4IHNjYW4gYWZ0 ZXIgYWxsICovCi0JCQkJCXNvLT5jdXJyUG9zLm1vcmVSaWdodCA9IGZhbHNlOworCQkJCQlidG5l d2JhdGNoLT5tb3JlUmlnaHQgPSBmYWxzZTsKIAkJCQkJc28tPm5lZWRQcmltU2NhbiA9IHRydWU7 CiAJCQkJCWlmIChzY2FuLT5wYXJhbGxlbF9zY2FuKQogCQkJCQkJX2J0X3BhcmFsbGVsX3ByaW1z Y2FuX3NjaGVkdWxlKHNjYW4sCi0JCQkJCQkJCQkJCQkJICAgc28tPmN1cnJQb3MuY3VyclBhZ2Up OworCQkJCQkJCQkJCQkJCSAgIGJ0bmV3YmF0Y2gtPmN1cnJQYWdlKTsKIAkJCQkJcmV0dXJuIGZh bHNlOwogCQkJCX0KIAkJCX0KQEAgLTI4MCwyNiArMjc4LDI2IEBAIF9idF9yZWFkcGFnZShJbmRl eFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtLAog CQkJCWlmICghQlRyZWVUdXBsZUlzUG9zdGluZyhpdHVwKSkKIAkJCQl7CiAJCQkJCS8qIFJlbWVt YmVyIGl0ICovCi0JCQkJCV9idF9zYXZlaXRlbShzbywgaXRlbUluZGV4LCBvZmZudW0sIGl0dXAp OworCQkJCQlfYnRfc2F2ZWl0ZW0obmV3YmF0Y2gsIGl0ZW1JbmRleCwgb2ZmbnVtLCBpdHVwLCAm dHVwbGVPZmZzZXQpOwogCQkJCQlpdGVtSW5kZXgrKzsKIAkJCQl9CiAJCQkJZWxzZQogCQkJCXsK LQkJCQkJaW50CQkJdHVwbGVPZmZzZXQ7CisJCQkJCWludAkJCWJhc2VPZmZzZXQ7CiAKIAkJCQkJ LyogU2V0IHVwIHBvc3RpbmcgbGlzdCBzdGF0ZSAoYW5kIHJlbWVtYmVyIGZpcnN0IFRJRCkgKi8K LQkJCQkJdHVwbGVPZmZzZXQgPQotCQkJCQkJX2J0X3NldHVwcG9zdGluZ2l0ZW1zKHNvLCBpdGVt SW5kZXgsIG9mZm51bSwKKwkJCQkJYmFzZU9mZnNldCA9CisJCQkJCQlfYnRfc2V0dXBwb3N0aW5n aXRlbXMobmV3YmF0Y2gsIGl0ZW1JbmRleCwgb2ZmbnVtLAogCQkJCQkJCQkJCQkgIEJUcmVlVHVw bGVHZXRQb3N0aW5nTihpdHVwLCAwKSwKLQkJCQkJCQkJCQkJICBpdHVwKTsKKwkJCQkJCQkJCQkJ ICBpdHVwLCAmdHVwbGVPZmZzZXQpOwogCQkJCQlpdGVtSW5kZXgrKzsKIAogCQkJCQkvKiBSZW1l bWJlciBhbGwgbGF0ZXIgVElEcyAobXVzdCBiZSBhdCBsZWFzdCBvbmUpICovCiAJCQkJCWZvciAo aW50IGkgPSAxOyBpIDwgQlRyZWVUdXBsZUdldE5Qb3N0aW5nKGl0dXApOyBpKyspCiAJCQkJCXsK LQkJCQkJCV9idF9zYXZlcG9zdGluZ2l0ZW0oc28sIGl0ZW1JbmRleCwgb2ZmbnVtLAorCQkJCQkJ X2J0X3NhdmVwb3N0aW5naXRlbShuZXdiYXRjaCwgaXRlbUluZGV4LCBvZmZudW0sCiAJCQkJCQkJ CQkJCUJUcmVlVHVwbGVHZXRQb3N0aW5nTihpdHVwLCBpKSwKLQkJCQkJCQkJCQkJdHVwbGVPZmZz ZXQpOworCQkJCQkJCQkJCQliYXNlT2Zmc2V0KTsKIAkJCQkJCWl0ZW1JbmRleCsrOwogCQkJCQl9 CiAJCQkJfQpAQCAtMzM5LDEyICszMzcsMTEgQEAgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mg c2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNldE51bWJlciBvZmZudW0sCiAJCX0KIAogCQlp ZiAoIXBzdGF0ZS5jb250aW51ZXNjYW4pCi0JCQlzby0+Y3VyclBvcy5tb3JlUmlnaHQgPSBmYWxz ZTsKKwkJCWJ0bmV3YmF0Y2gtPm1vcmVSaWdodCA9IGZhbHNlOwogCiAJCUFzc2VydChpdGVtSW5k ZXggPD0gTWF4VElEc1BlckJUcmVlUGFnZSk7Ci0JCXNvLT5jdXJyUG9zLmZpcnN0SXRlbSA9IDA7 Ci0JCXNvLT5jdXJyUG9zLmxhc3RJdGVtID0gaXRlbUluZGV4IC0gMTsKLQkJc28tPmN1cnJQb3Mu aXRlbUluZGV4ID0gMDsKKwkJbmV3YmF0Y2gtPmZpcnN0SXRlbSA9IDA7CisJCW5ld2JhdGNoLT5s YXN0SXRlbSA9IGl0ZW1JbmRleCAtIDE7CiAJfQogCWVsc2UKIAl7CkBAIC0zNjEsMTEgKzM1OCwx MSBAQCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwg T2Zmc2V0TnVtYmVyIG9mZm51bSwKIAkJCQkJIV9idF9zY2FuYmVoaW5kX2NoZWNra2V5cyhzY2Fu LCBkaXIsIHBzdGF0ZS5maW5hbHR1cCkpCiAJCQkJewogCQkJCQkvKiBTY2hlZHVsZSBhbm90aGVy IHByaW1pdGl2ZSBpbmRleCBzY2FuIGFmdGVyIGFsbCAqLwotCQkJCQlzby0+Y3VyclBvcy5tb3Jl TGVmdCA9IGZhbHNlOworCQkJCQlidG5ld2JhdGNoLT5tb3JlTGVmdCA9IGZhbHNlOwogCQkJCQlz by0+bmVlZFByaW1TY2FuID0gdHJ1ZTsKIAkJCQkJaWYgKHNjYW4tPnBhcmFsbGVsX3NjYW4pCiAJ CQkJCQlfYnRfcGFyYWxsZWxfcHJpbXNjYW5fc2NoZWR1bGUoc2NhbiwKLQkJCQkJCQkJCQkJCQkg ICBzby0+Y3VyclBvcy5jdXJyUGFnZSk7CisJCQkJCQkJCQkJCQkJICAgYnRuZXdiYXRjaC0+Y3Vy clBhZ2UpOwogCQkJCQlyZXR1cm4gZmFsc2U7CiAJCQkJfQogCQkJfQpAQCAtNDY2LDI3ICs0NjMs MjcgQEAgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIs IE9mZnNldE51bWJlciBvZmZudW0sCiAJCQkJewogCQkJCQkvKiBSZW1lbWJlciBpdCAqLwogCQkJ CQlpdGVtSW5kZXgtLTsKLQkJCQkJX2J0X3NhdmVpdGVtKHNvLCBpdGVtSW5kZXgsIG9mZm51bSwg aXR1cCk7CisJCQkJCV9idF9zYXZlaXRlbShuZXdiYXRjaCwgaXRlbUluZGV4LCBvZmZudW0sIGl0 dXAsICZ0dXBsZU9mZnNldCk7CiAJCQkJfQogCQkJCWVsc2UKIAkJCQl7CiAJCQkJCXVpbnQxNgkJ bml0ZW1zID0gQlRyZWVUdXBsZUdldE5Qb3N0aW5nKGl0dXApOwotCQkJCQlpbnQJCQl0dXBsZU9m ZnNldDsKKwkJCQkJaW50CQkJYmFzZU9mZnNldDsKIAogCQkJCQkvKiBTZXQgdXAgcG9zdGluZyBs aXN0IHN0YXRlIChhbmQgcmVtZW1iZXIgbGFzdCBUSUQpICovCiAJCQkJCWl0ZW1JbmRleC0tOwot CQkJCQl0dXBsZU9mZnNldCA9Ci0JCQkJCQlfYnRfc2V0dXBwb3N0aW5naXRlbXMoc28sIGl0ZW1J bmRleCwgb2ZmbnVtLAorCQkJCQliYXNlT2Zmc2V0ID0KKwkJCQkJCV9idF9zZXR1cHBvc3Rpbmdp dGVtcyhuZXdiYXRjaCwgaXRlbUluZGV4LCBvZmZudW0sCiAJCQkJCQkJCQkJCSAgQlRyZWVUdXBs ZUdldFBvc3RpbmdOKGl0dXAsIG5pdGVtcyAtIDEpLAotCQkJCQkJCQkJCQkgIGl0dXApOworCQkJ CQkJCQkJCQkgIGl0dXAsICZ0dXBsZU9mZnNldCk7CiAKIAkJCQkJLyogUmVtZW1iZXIgYWxsIHBy aW9yIFRJRHMgKG11c3QgYmUgYXQgbGVhc3Qgb25lKSAqLwogCQkJCQlmb3IgKGludCBpID0gbml0 ZW1zIC0gMjsgaSA+PSAwOyBpLS0pCiAJCQkJCXsKIAkJCQkJCWl0ZW1JbmRleC0tOwotCQkJCQkJ X2J0X3NhdmVwb3N0aW5naXRlbShzbywgaXRlbUluZGV4LCBvZmZudW0sCisJCQkJCQlfYnRfc2F2 ZXBvc3RpbmdpdGVtKG5ld2JhdGNoLCBpdGVtSW5kZXgsIG9mZm51bSwKIAkJCQkJCQkJCQkJQlRy ZWVUdXBsZUdldFBvc3RpbmdOKGl0dXAsIGkpLAotCQkJCQkJCQkJCQl0dXBsZU9mZnNldCk7CisJ CQkJCQkJCQkJCWJhc2VPZmZzZXQpOwogCQkJCQl9CiAJCQkJfQogCQkJfQpAQCAtNTAyLDEyICs0 OTksMTEgQEAgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBk aXIsIE9mZnNldE51bWJlciBvZmZudW0sCiAJCSAqIGJlIGZvdW5kIHRoZXJlCiAJCSAqLwogCQlp ZiAoIXBzdGF0ZS5jb250aW51ZXNjYW4pCi0JCQlzby0+Y3VyclBvcy5tb3JlTGVmdCA9IGZhbHNl OworCQkJYnRuZXdiYXRjaC0+bW9yZUxlZnQgPSBmYWxzZTsKIAogCQlBc3NlcnQoaXRlbUluZGV4 ID49IDApOwotCQlzby0+Y3VyclBvcy5maXJzdEl0ZW0gPSBpdGVtSW5kZXg7Ci0JCXNvLT5jdXJy UG9zLmxhc3RJdGVtID0gTWF4VElEc1BlckJUcmVlUGFnZSAtIDE7Ci0JCXNvLT5jdXJyUG9zLml0 ZW1JbmRleCA9IE1heFRJRHNQZXJCVHJlZVBhZ2UgLSAxOworCQluZXdiYXRjaC0+Zmlyc3RJdGVt ID0gaXRlbUluZGV4OworCQluZXdiYXRjaC0+bGFzdEl0ZW0gPSBNYXhUSURzUGVyQlRyZWVQYWdl IC0gMTsKIAl9CiAKIAkvKgpAQCAtNTI0LDcgKzUyMCw3IEBAIF9idF9yZWFkcGFnZShJbmRleFNj YW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtLAogCSAq LwogCUFzc2VydCghcHN0YXRlLmZvcmNlbm9ucmVxdWlyZWQpOwogCi0JcmV0dXJuIChzby0+Y3Vy clBvcy5maXJzdEl0ZW0gPD0gc28tPmN1cnJQb3MubGFzdEl0ZW0pOworCXJldHVybiAobmV3YmF0 Y2gtPmZpcnN0SXRlbSA8PSBuZXdiYXRjaC0+bGFzdEl0ZW0pOwogfQogCiAvKgpAQCAtMTAyNyw5 MCArMTAyMyw5MSBAQCBfYnRfb3Bwb2Rpcl9jaGVja2tleXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBT Y2FuRGlyZWN0aW9uIGRpciwKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotLyogU2F2ZSBhbiBpbmRleCBp dGVtIGludG8gc28tPmN1cnJQb3MuaXRlbXNbaXRlbUluZGV4XSAqLworLyogU2F2ZSBhbiBpbmRl eCBpdGVtIGludG8gbmV3YmF0Y2guaXRlbXNbaXRlbUluZGV4XSAqLwogc3RhdGljIHZvaWQKLV9i dF9zYXZlaXRlbShCVFNjYW5PcGFxdWUgc28sIGludCBpdGVtSW5kZXgsCi0JCQkgT2Zmc2V0TnVt YmVyIG9mZm51bSwgSW5kZXhUdXBsZSBpdHVwKQorX2J0X3NhdmVpdGVtKEluZGV4U2NhbkJhdGNo IG5ld2JhdGNoLCBpbnQgaXRlbUluZGV4LCBPZmZzZXROdW1iZXIgb2ZmbnVtLAorCQkJIEluZGV4 VHVwbGUgaXR1cCwgaW50ICp0dXBsZU9mZnNldCkKIHsKLQlCVFNjYW5Qb3NJdGVtICpjdXJySXRl bSA9ICZzby0+Y3VyclBvcy5pdGVtc1tpdGVtSW5kZXhdOwotCiAJQXNzZXJ0KCFCVHJlZVR1cGxl SXNQaXZvdChpdHVwKSAmJiAhQlRyZWVUdXBsZUlzUG9zdGluZyhpdHVwKSk7CiAKLQljdXJySXRl bS0+aGVhcFRpZCA9IGl0dXAtPnRfdGlkOwotCWN1cnJJdGVtLT5pbmRleE9mZnNldCA9IG9mZm51 bTsKLQlpZiAoc28tPmN1cnJUdXBsZXMpCisJbmV3YmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF0udGFi bGVUaWQgPSBpdHVwLT50X3RpZDsKKwluZXdiYXRjaC0+aXRlbXNbaXRlbUluZGV4XS5pbmRleE9m ZnNldCA9IG9mZm51bTsKKworCWlmIChuZXdiYXRjaC0+Y3VyclR1cGxlcykKIAl7CiAJCVNpemUJ CWl0dXBzeiA9IEluZGV4VHVwbGVTaXplKGl0dXApOwogCi0JCWN1cnJJdGVtLT50dXBsZU9mZnNl dCA9IHNvLT5jdXJyUG9zLm5leHRUdXBsZU9mZnNldDsKLQkJbWVtY3B5KHNvLT5jdXJyVHVwbGVz ICsgc28tPmN1cnJQb3MubmV4dFR1cGxlT2Zmc2V0LCBpdHVwLCBpdHVwc3opOwotCQlzby0+Y3Vy clBvcy5uZXh0VHVwbGVPZmZzZXQgKz0gTUFYQUxJR04oaXR1cHN6KTsKKwkJbmV3YmF0Y2gtPml0 ZW1zW2l0ZW1JbmRleF0udHVwbGVPZmZzZXQgPSAqdHVwbGVPZmZzZXQ7CisJCW1lbWNweShuZXdi YXRjaC0+Y3VyclR1cGxlcyArICp0dXBsZU9mZnNldCwgaXR1cCwgaXR1cHN6KTsKKwkJKnR1cGxl T2Zmc2V0ICs9IE1BWEFMSUdOKGl0dXBzeik7CiAJfQogfQogCiAvKgogICogU2V0dXAgc3RhdGUg dG8gc2F2ZSBUSURzL2l0ZW1zIGZyb20gYSBzaW5nbGUgcG9zdGluZyBsaXN0IHR1cGxlLgogICoK LSAqIFNhdmVzIGFuIGluZGV4IGl0ZW0gaW50byBzby0+Y3VyclBvcy5pdGVtc1tpdGVtSW5kZXhd IGZvciBUSUQgdGhhdCBpcwotICogcmV0dXJuZWQgdG8gc2NhbiBmaXJzdC4gIFNlY29uZCBvciBz dWJzZXF1ZW50IFRJRHMgZm9yIHBvc3RpbmcgbGlzdCBzaG91bGQKLSAqIGJlIHNhdmVkIGJ5IGNh bGxpbmcgX2J0X3NhdmVwb3N0aW5naXRlbSgpLgorICogU2F2ZXMgYW4gaW5kZXggaXRlbSBpbnRv IG5ld2JhdGNoLml0ZW1zW2l0ZW1JbmRleF0gZm9yIFRJRCB0aGF0IGlzIHJldHVybmVkCisgKiB0 byBzY2FuIGZpcnN0LiAgU2Vjb25kIG9yIHN1YnNlcXVlbnQgVElEcyBmb3IgcG9zdGluZyBsaXN0 IHNob3VsZCBiZSBzYXZlZAorICogYnkgY2FsbGluZyBfYnRfc2F2ZXBvc3RpbmdpdGVtKCkuCiAg KgotICogUmV0dXJucyBhbiBvZmZzZXQgaW50byB0dXBsZSBzdG9yYWdlIHNwYWNlIHRoYXQgbWFp biB0dXBsZSBpcyBzdG9yZWQgYXQgaWYKLSAqIG5lZWRlZC4KKyAqIFJldHVybnMgYmFzZU9mZnNl dCwgYW4gb2Zmc2V0IGludG8gdHVwbGUgc3RvcmFnZSBzcGFjZSB0aGF0IG1haW4gdHVwbGUgaXMK KyAqIHN0b3JlZCBhdCBpZiBuZWVkZWQuCiAgKi8KIHN0YXRpYyBpbnQKLV9idF9zZXR1cHBvc3Rp bmdpdGVtcyhCVFNjYW5PcGFxdWUgc28sIGludCBpdGVtSW5kZXgsIE9mZnNldE51bWJlciBvZmZu dW0sCi0JCQkJCSAgY29uc3QgSXRlbVBvaW50ZXJEYXRhICpoZWFwVGlkLCBJbmRleFR1cGxlIGl0 dXApCitfYnRfc2V0dXBwb3N0aW5naXRlbXMoSW5kZXhTY2FuQmF0Y2ggbmV3YmF0Y2gsIGludCBp dGVtSW5kZXgsCisJCQkJCSAgT2Zmc2V0TnVtYmVyIG9mZm51bSwgY29uc3QgSXRlbVBvaW50ZXJE YXRhICp0YWJsZVRpZCwKKwkJCQkJICBJbmRleFR1cGxlIGl0dXAsIGludCAqdHVwbGVPZmZzZXQp CiB7Ci0JQlRTY2FuUG9zSXRlbSAqY3Vyckl0ZW0gPSAmc28tPmN1cnJQb3MuaXRlbXNbaXRlbUlu ZGV4XTsKKwlCYXRjaE1hdGNoaW5nSXRlbSAqaXRlbSA9ICZuZXdiYXRjaC0+aXRlbXNbaXRlbUlu ZGV4XTsKIAogCUFzc2VydChCVHJlZVR1cGxlSXNQb3N0aW5nKGl0dXApKTsKIAotCWN1cnJJdGVt LT5oZWFwVGlkID0gKmhlYXBUaWQ7Ci0JY3Vyckl0ZW0tPmluZGV4T2Zmc2V0ID0gb2ZmbnVtOwot CWlmIChzby0+Y3VyclR1cGxlcykKKwlpdGVtLT50YWJsZVRpZCA9ICp0YWJsZVRpZDsKKwlpdGVt LT5pbmRleE9mZnNldCA9IG9mZm51bTsKKworCWlmIChuZXdiYXRjaC0+Y3VyclR1cGxlcykKIAl7 CiAJCS8qIFNhdmUgYmFzZSBJbmRleFR1cGxlICh0cnVuY2F0ZSBwb3N0aW5nIGxpc3QpICovCiAJ CUluZGV4VHVwbGUJYmFzZTsKIAkJU2l6ZQkJaXR1cHN6ID0gQlRyZWVUdXBsZUdldFBvc3RpbmdP ZmZzZXQoaXR1cCk7CiAKIAkJaXR1cHN6ID0gTUFYQUxJR04oaXR1cHN6KTsKLQkJY3Vyckl0ZW0t PnR1cGxlT2Zmc2V0ID0gc28tPmN1cnJQb3MubmV4dFR1cGxlT2Zmc2V0OwotCQliYXNlID0gKElu ZGV4VHVwbGUpIChzby0+Y3VyclR1cGxlcyArIHNvLT5jdXJyUG9zLm5leHRUdXBsZU9mZnNldCk7 CisJCWl0ZW0tPnR1cGxlT2Zmc2V0ID0gKnR1cGxlT2Zmc2V0OworCQliYXNlID0gKEluZGV4VHVw bGUpIChuZXdiYXRjaC0+Y3VyclR1cGxlcyArICp0dXBsZU9mZnNldCk7CiAJCW1lbWNweShiYXNl LCBpdHVwLCBpdHVwc3opOwogCQkvKiBEZWZlbnNpdmVseSByZWR1Y2Ugd29yayBhcmVhIGluZGV4 IHR1cGxlIGhlYWRlciBzaXplICovCiAJCWJhc2UtPnRfaW5mbyAmPSB+SU5ERVhfU0laRV9NQVNL OwogCQliYXNlLT50X2luZm8gfD0gaXR1cHN6OwotCQlzby0+Y3VyclBvcy5uZXh0VHVwbGVPZmZz ZXQgKz0gaXR1cHN6OworCQkqdHVwbGVPZmZzZXQgKz0gaXR1cHN6OwogCi0JCXJldHVybiBjdXJy SXRlbS0+dHVwbGVPZmZzZXQ7CisJCXJldHVybiBpdGVtLT50dXBsZU9mZnNldDsKIAl9CiAKIAly ZXR1cm4gMDsKIH0KIAogLyoKLSAqIFNhdmUgYW4gaW5kZXggaXRlbSBpbnRvIHNvLT5jdXJyUG9z Lml0ZW1zW2l0ZW1JbmRleF0gZm9yIGN1cnJlbnQgcG9zdGluZworICogU2F2ZSBhbiBpbmRleCBp dGVtIGludG8gbmV3YmF0Y2guaXRlbXNbaXRlbUluZGV4XSBmb3IgY3VycmVudCBwb3N0aW5nCiAg KiB0dXBsZS4KICAqCiAgKiBBc3N1bWVzIHRoYXQgX2J0X3NldHVwcG9zdGluZ2l0ZW1zKCkgaGFz IGFscmVhZHkgYmVlbiBjYWxsZWQgZm9yIGN1cnJlbnQKLSAqIHBvc3RpbmcgbGlzdCB0dXBsZS4g IENhbGxlciBwYXNzZXMgaXRzIHJldHVybiB2YWx1ZSBhcyB0dXBsZU9mZnNldC4KKyAqIHBvc3Rp bmcgbGlzdCB0dXBsZS4gIENhbGxlciBwYXNzZXMgaXRzIHJldHVybiB2YWx1ZSBhcyBiYXNlT2Zm c2V0LgogICovCiBzdGF0aWMgaW5saW5lIHZvaWQKLV9idF9zYXZlcG9zdGluZ2l0ZW0oQlRTY2Fu T3BhcXVlIHNvLCBpbnQgaXRlbUluZGV4LCBPZmZzZXROdW1iZXIgb2ZmbnVtLAotCQkJCQlJdGVt UG9pbnRlciBoZWFwVGlkLCBpbnQgdHVwbGVPZmZzZXQpCitfYnRfc2F2ZXBvc3RpbmdpdGVtKElu ZGV4U2NhbkJhdGNoIG5ld2JhdGNoLCBpbnQgaXRlbUluZGV4LCBPZmZzZXROdW1iZXIgb2ZmbnVt LAorCQkJCQlJdGVtUG9pbnRlciB0YWJsZVRpZCwgaW50IGJhc2VPZmZzZXQpCiB7Ci0JQlRTY2Fu UG9zSXRlbSAqY3Vyckl0ZW0gPSAmc28tPmN1cnJQb3MuaXRlbXNbaXRlbUluZGV4XTsKKwlCYXRj aE1hdGNoaW5nSXRlbSAqaXRlbSA9ICZuZXdiYXRjaC0+aXRlbXNbaXRlbUluZGV4XTsKIAotCWN1 cnJJdGVtLT5oZWFwVGlkID0gKmhlYXBUaWQ7Ci0JY3Vyckl0ZW0tPmluZGV4T2Zmc2V0ID0gb2Zm bnVtOworCWl0ZW0tPnRhYmxlVGlkID0gKnRhYmxlVGlkOworCWl0ZW0tPmluZGV4T2Zmc2V0ID0g b2ZmbnVtOwogCiAJLyoKIAkgKiBIYXZlIGluZGV4LW9ubHkgc2NhbnMgcmV0dXJuIHRoZSBzYW1l IGJhc2UgSW5kZXhUdXBsZSBmb3IgZXZlcnkgVElECiAJICogdGhhdCBvcmlnaW5hdGVzIGZyb20g dGhlIHNhbWUgcG9zdGluZyBsaXN0CiAJICovCi0JaWYgKHNvLT5jdXJyVHVwbGVzKQotCQljdXJy SXRlbS0+dHVwbGVPZmZzZXQgPSB0dXBsZU9mZnNldDsKKwlpZiAobmV3YmF0Y2gtPmN1cnJUdXBs ZXMpCisJCWl0ZW0tPnR1cGxlT2Zmc2V0ID0gYmFzZU9mZnNldDsKIH0KIAogI2RlZmluZSBMT09L X0FIRUFEX1JFUVVJUkVEX1JFQ0hFQ0tTIAkzCkBAIC0yODIxLDE0ICsyODE4LDE1IEBAIG5ld19w cmltX3NjYW46CiAJICoKIAkgKiBOb3RlOiBXZSBtYWtlIGEgc29mdCBhc3N1bXB0aW9uIHRoYXQg dGhlIGN1cnJlbnQgc2NhbiBkaXJlY3Rpb24gd2lsbAogCSAqIGFsc28gYmUgdXNlZCB3aXRoaW4g X2J0X25leHQsIHdoZW4gaXQgaXMgYXNrZWQgdG8gc3RlcCBvZmYgdGhpcyBwYWdlLgotCSAqIEl0 IGlzIHVwIHRvIF9idF9uZXh0IHRvIGNhbmNlbCB0aGlzIHNjaGVkdWxlZCBwcmltaXRpdmUgaW5k ZXggc2NhbgotCSAqIHdoZW5ldmVyIGl0IHN0ZXBzIHRvIGEgcGFnZSBpbiB0aGUgZGlyZWN0aW9u IG9wcG9zaXRlIGN1cnJQb3MuZGlyLgorCSAqIFRoZSBzY2FuIGRpcmVjdGlvbiBtaWdodCBiZSBy ZXZlcnNlZCBkdXJpbmcgdGhlIG5leHQgYW1nZXRiYXRjaCBjYWxsLAorCSAqIGJ1dCBub3QgYmVm b3JlIGEgY2FsbCB0byBidHBvc3Jlc2V0IHRoYXQgcmVzZXRzIHRoZSBhcnJheSBrZXlzIHRvIHRo ZQorCSAqIGZpcnN0IHBvc2l0aW9ucy9lbGVtZW50cyB1c2VkIHdoZW4gc2Nhbm5pbmcgaW4gdGhp cyBvdGhlciBkaXJlY3Rpb24uCiAJICovCiAJcHN0YXRlLT5jb250aW51ZXNjYW4gPSBmYWxzZTsJ LyogVGVsbCBfYnRfcmVhZHBhZ2Ugd2UncmUgZG9uZS4uLiAqLwogCXNvLT5uZWVkUHJpbVNjYW4g PSB0cnVlOwkvKiAuLi5idXQgY2FsbCBfYnRfZmlyc3QgYWdhaW4gKi8KIAogCWlmIChzY2FuLT5w YXJhbGxlbF9zY2FuKQotCQlfYnRfcGFyYWxsZWxfcHJpbXNjYW5fc2NoZWR1bGUoc2Nhbiwgc28t PmN1cnJQb3MuY3VyclBhZ2UpOworCQlfYnRfcGFyYWxsZWxfcHJpbXNjYW5fc2NoZWR1bGUoc2Nh biwgcHN0YXRlLT5jdXJycGFnZSk7CiAKIAkvKiBDYWxsZXIncyB0dXBsZSBkb2Vzbid0IG1hdGNo IHRoZSBuZXcgcXVhbCAqLwogCXJldHVybiBmYWxzZTsKQEAgLTI4NDEsOSArMjgzOSw4IEBAIGVu ZF90b3BsZXZlbF9zY2FuOgogCSAqIFRoaXMgZW5kcyB0aGUgZW50aXJlIHRvcC1sZXZlbCBzY2Fu IGluIHRoZSBjdXJyZW50IHNjYW4gZGlyZWN0aW9uLgogCSAqCiAJICogTm90ZTogVGhlIHNjYW4n cyBhcnJheXMgKGluY2x1ZGluZyBhbnkgbm9uLXJlcXVpcmVkIGFycmF5cykgYXJlIG5vdyBpbgot CSAqIHRoZWlyIGZpbmFsIHBvc2l0aW9ucyBmb3IgdGhlIGN1cnJlbnQgc2NhbiBkaXJlY3Rpb24u ICBJZiB0aGUgc2NhbgotCSAqIGRpcmVjdGlvbiBoYXBwZW5zIHRvIGNoYW5nZSwgdGhlbiB0aGUg YXJyYXlzIHdpbGwgYWxyZWFkeSBiZSBpbiB0aGVpcgotCSAqIGZpcnN0IHBvc2l0aW9ucyBmb3Ig d2hhdCB3aWxsIHRoZW4gYmUgdGhlIGN1cnJlbnQgc2NhbiBkaXJlY3Rpb24uCisJICogdGhlaXIg ZmluYWwgcG9zaXRpb25zIGZvciB0aGUgY3VycmVudCBzY2FuIGRpcmVjdGlvbi4gIFRoaXMgaXMg anVzdAorCSAqIGRlZmVuc2l2ZS4KIAkgKi8KIAlwc3RhdGUtPmNvbnRpbnVlc2NhbiA9IGZhbHNl OwkvKiBUZWxsIF9idF9yZWFkcGFnZSB3ZSdyZSBkb25lLi4uICovCiAJc28tPm5lZWRQcmltU2Nh biA9IGZhbHNlOwkvKiAuLi5hbmQgZG9uJ3QgY2FsbCBfYnRfZmlyc3QgYWdhaW4gKi8KQEAgLTI5 MTAsMTcgKzI5MDcsOSBAQCBfYnRfYWR2YW5jZV9hcnJheV9rZXlzX2luY3JlbWVudChJbmRleFNj YW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLAogCS8qCiAJICogVGhlIGFycmF5IGtleXMg YXJlIG5vdyBleGhhdXN0ZWQuCiAJICoKLQkgKiBSZXN0b3JlIHRoZSBhcnJheSBrZXlzIHRvIHRo ZSBzdGF0ZSB0aGV5IHdlcmUgaW4gaW1tZWRpYXRlbHkgYmVmb3JlIHdlCi0JICogd2VyZSBjYWxs ZWQuICBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgYXJyYXlzIG9ubHkgZXZlciByYXRjaGV0IGluIHRo ZQotCSAqIGN1cnJlbnQgc2NhbiBkaXJlY3Rpb24uCi0JICoKLQkgKiBXaXRob3V0IHRoaXMsIHNj YW5zIGNvdWxkIG92ZXJsb29rIG1hdGNoaW5nIHR1cGxlcyB3aGVuIHRoZSBzY2FuCi0JICogZGly ZWN0aW9uIGdldHMgcmV2ZXJzZWQganVzdCBiZWZvcmUgYnRnZXR0dXBsZSBydW5zIG91dCBvZiBp dGVtcyB0bwotCSAqIHJldHVybiwgYnV0IGp1c3QgYWZ0ZXIgX2J0X3JlYWRwYWdlIHByZXBhcmVz IGFsbCB0aGUgaXRlbXMgZnJvbSB0aGUKLQkgKiBzY2FuJ3MgZmluYWwgcGFnZSBpbiBzby0+Y3Vy clBvcy4gIFdoZW4gd2UncmUgb24gdGhlIGZpbmFsIHBhZ2UgaXQgaXMKLQkgKiB0eXBpY2FsIGZv ciBzby0+Y3VyclBvcyB0byBnZXQgaW52YWxpZGF0ZWQgb25jZSBidGdldHR1cGxlIGZpbmFsbHkK LQkgKiByZXR1cm5zIGZhbHNlLCB3aGljaCdsbCBlZmZlY3RpdmVseSBpbnZhbGlkYXRlIHRoZSBz Y2FuJ3MgYXJyYXkga2V5cy4KLQkgKiBUaGF0IGhhc24ndCBoYXBwZW5lZCB5ZXQsIHRob3VnaCAt LSBhbmQgaW4gZ2VuZXJhbCBpdCBtYXkgbmV2ZXIgaGFwcGVuLgorCSAqIERlZmVuc2l2ZWx5IHJl c3RvcmUgdGhlIGFycmF5IGtleXMgdG8gdGhlIHBvc2l0aW9ucyB0aGV5IHdlcmUgaW4KKwkgKiBp bW1lZGlhdGVseSBiZWZvcmUgd2Ugd2VyZSBjYWxsZWQgKGkuZS4gdG8gdGhlaXIgZmluYWwgcG9z aXRpb25zIGZvcgorCSAqIHRoZSBjdXJyZW50IHNjYW4gZGlyZWN0aW9uKS4KIAkgKi8KIAlfYnRf c3RhcnRfYXJyYXlfa2V5cyhzY2FuLCAtZGlyKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv YWNjZXNzL25idHJlZS9uYnRyZWUuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVl LmMKaW5kZXggNmQ4NzBlNGViLi5lMDg3Y2I4MjQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9uYnRyZWUvbmJ0cmVlLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRy ZWUuYwpAQCAtMTYxLDExICsxNjEsMTMgQEAgYnRoYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJ CS5hbWFkanVzdG1lbWJlcnMgPSBidGFkanVzdG1lbWJlcnMsCiAJCS5hbWJlZ2luc2NhbiA9IGJ0 YmVnaW5zY2FuLAogCQkuYW1yZXNjYW4gPSBidHJlc2NhbiwKLQkJLmFtZ2V0dHVwbGUgPSBidGdl dHR1cGxlLAorCQkuYW1nZXR0dXBsZSA9IE5VTEwsCisJCS5hbWdldGJhdGNoID0gYnRnZXRiYXRj aCwKKwkJLmFtdW5ndWFyZGJhdGNoID0gYnR1bmd1YXJkYmF0Y2gsCisJCS5hbWtpbGxpdGVtc2Jh dGNoID0gYnRraWxsaXRlbXNiYXRjaCwKIAkJLmFtZ2V0Yml0bWFwID0gYnRnZXRiaXRtYXAsCiAJ CS5hbWVuZHNjYW4gPSBidGVuZHNjYW4sCi0JCS5hbW1hcmtwb3MgPSBidG1hcmtwb3MsCi0JCS5h bXJlc3RycG9zID0gYnRyZXN0cnBvcywKKwkJLmFtcG9zcmVzZXQgPSBidHBvc3Jlc2V0LAogCQku YW1lc3RpbWF0ZXBhcmFsbGVsc2NhbiA9IGJ0ZXN0aW1hdGVwYXJhbGxlbHNjYW4sCiAJCS5hbWlu aXRwYXJhbGxlbHNjYW4gPSBidGluaXRwYXJhbGxlbHNjYW4sCiAJCS5hbXBhcmFsbGVscmVzY2Fu ID0gYnRwYXJhbGxlbHJlc2NhbiwKQEAgLTIyNCwxMyArMjI2LDEzIEBAIGJ0aW5zZXJ0KFJlbGF0 aW9uIHJlbCwgRGF0dW0gKnZhbHVlcywgYm9vbCAqaXNudWxsLAogfQogCiAvKgotICoJYnRnZXR0 dXBsZSgpIC0tIEdldCB0aGUgbmV4dCB0dXBsZSBpbiB0aGUgc2Nhbi4KKyAqCWJ0Z2V0YmF0Y2go KSAtLSBHZXQgdGhlIGZpcnN0IG9yIG5leHQgYmF0Y2ggb2YgdHVwbGVzIGluIHRoZSBzY2FuCiAg Ki8KLWJvb2wKLWJ0Z2V0dHVwbGUoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRp cikKK0luZGV4U2NhbkJhdGNoCitidGdldGJhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhT Y2FuQmF0Y2ggcHJpb3JiYXRjaCwgU2NhbkRpcmVjdGlvbiBkaXIpCiB7CiAJQlRTY2FuT3BhcXVl IHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwotCWJvb2wJCXJlczsKKwlJbmRleFNj YW5CYXRjaCBiYXRjaCA9IHByaW9yYmF0Y2g7CiAKIAlBc3NlcnQoc2Nhbi0+aGVhcFJlbGF0aW9u ICE9IE5VTEwpOwogCkBAIC0yNDMsNDUgKzI0NSwyMCBAQCBidGdldHR1cGxlKEluZGV4U2NhbkRl c2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJCS8qCiAJCSAqIElmIHdlJ3ZlIGFscmVhZHkg aW5pdGlhbGl6ZWQgdGhpcyBzY2FuLCB3ZSBjYW4ganVzdCBhZHZhbmNlIGl0IGluCiAJCSAqIHRo ZSBhcHByb3ByaWF0ZSBkaXJlY3Rpb24uICBJZiB3ZSBoYXZlbid0IGRvbmUgc28geWV0LCB3ZSBj YWxsCi0JCSAqIF9idF9maXJzdCgpIHRvIGdldCB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgc2Nhbi4K KwkJICogX2J0X2ZpcnN0KCkgdG8gZ2V0IHRoZSBmaXJzdCBiYXRjaCBpbiB0aGUgc2Nhbi4KIAkJ ICovCi0JCWlmICghQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpCi0JCQlyZXMgPSBfYnRf Zmlyc3Qoc2NhbiwgZGlyKTsKKwkJaWYgKGJhdGNoID09IE5VTEwpCisJCQliYXRjaCA9IF9idF9m aXJzdChzY2FuLCBkaXIpOwogCQllbHNlCi0JCXsKLQkJCS8qCi0JCQkgKiBDaGVjayB0byBzZWUg aWYgd2Ugc2hvdWxkIGtpbGwgdGhlIHByZXZpb3VzbHktZmV0Y2hlZCB0dXBsZS4KLQkJCSAqLwot CQkJaWYgKHNjYW4tPmtpbGxfcHJpb3JfdHVwbGUpCi0JCQl7Ci0JCQkJLyoKLQkJCQkgKiBZZXMs IHJlbWVtYmVyIGl0IGZvciBsYXRlci4gKFdlJ2xsIGRlYWwgd2l0aCBhbGwgc3VjaAotCQkJCSAq IHR1cGxlcyBhdCBvbmNlIHJpZ2h0IGJlZm9yZSBsZWF2aW5nIHRoZSBpbmRleCBwYWdlLikgIFRo ZQotCQkJCSAqIHRlc3QgZm9yIG51bUtpbGxlZCBvdmVycnVuIGlzIG5vdCBqdXN0IHBhcmFub2lh OiBpZiB0aGUKLQkJCQkgKiBjYWxsZXIgcmV2ZXJzZXMgZGlyZWN0aW9uIGluIHRoZSBpbmRleHNj YW4gdGhlbiB0aGUgc2FtZQotCQkJCSAqIGl0ZW0gbWlnaHQgZ2V0IGVudGVyZWQgbXVsdGlwbGUg dGltZXMuIEl0J3Mgbm90IHdvcnRoCi0JCQkJICogdHJ5aW5nIHRvIG9wdGltaXplIHRoYXQsIHNv IHdlIGRvbid0IGRldGVjdCBpdCwgYnV0IGluc3RlYWQKLQkJCQkgKiBqdXN0IGZvcmdldCBhbnkg ZXhjZXNzIGVudHJpZXMuCi0JCQkJICovCi0JCQkJaWYgKHNvLT5raWxsZWRJdGVtcyA9PSBOVUxM KQotCQkJCQlzby0+a2lsbGVkSXRlbXMgPSBwYWxsb2NfYXJyYXkoaW50LCBNYXhUSURzUGVyQlRy ZWVQYWdlKTsKLQkJCQlpZiAoc28tPm51bUtpbGxlZCA8IE1heFRJRHNQZXJCVHJlZVBhZ2UpCi0J CQkJCXNvLT5raWxsZWRJdGVtc1tzby0+bnVtS2lsbGVkKytdID0gc28tPmN1cnJQb3MuaXRlbUlu ZGV4OwotCQkJfQorCQkJYmF0Y2ggPSBfYnRfbmV4dChzY2FuLCBkaXIsIGJhdGNoKTsKIAotCQkJ LyoKLQkJCSAqIE5vdyBjb250aW51ZSB0aGUgc2Nhbi4KLQkJCSAqLwotCQkJcmVzID0gX2J0X25l eHQoc2NhbiwgZGlyKTsKLQkJfQotCi0JCS8qIElmIHdlIGhhdmUgYSB0dXBsZSwgcmV0dXJuIGl0 IC4uLiAqLwotCQlpZiAocmVzKQorCQkvKiBJZiB3ZSBoYXZlIGEgYmF0Y2gsIHJldHVybiBpdCAu Li4gKi8KKwkJaWYgKGJhdGNoKQogCQkJYnJlYWs7CiAJCS8qIC4uLiBvdGhlcndpc2Ugc2VlIGlm IHdlIG5lZWQgYW5vdGhlciBwcmltaXRpdmUgaW5kZXggc2NhbiAqLwogCX0gd2hpbGUgKHNvLT5u dW1BcnJheUtleXMgJiYgX2J0X3N0YXJ0X3ByaW1fc2NhbihzY2FuKSk7CiAKLQlyZXR1cm4gcmVz OworCXJldHVybiBiYXRjaDsKIH0KIAogLyoKQEAgLTI5MSwzOCArMjY4LDQzIEBAIGludDY0CiBi dGdldGJpdG1hcChJbmRleFNjYW5EZXNjIHNjYW4sIFRJREJpdG1hcCAqdGJtKQogewogCUJUU2Nh bk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKKwlJbmRleFNjYW5CYXRj aCBiYXRjaDsKIAlpbnQ2NAkJbnRpZHMgPSAwOwotCUl0ZW1Qb2ludGVyIGhlYXBUaWQ7CisJSXRl bVBvaW50ZXIgdGFibGVUaWQ7CiAKIAlBc3NlcnQoc2Nhbi0+aGVhcFJlbGF0aW9uID09IE5VTEwp OwogCiAJLyogRWFjaCBsb29wIGl0ZXJhdGlvbiBwZXJmb3JtcyBhbm90aGVyIHByaW1pdGl2ZSBp bmRleCBzY2FuICovCiAJZG8KIAl7Ci0JCS8qIEZldGNoIHRoZSBmaXJzdCBwYWdlICYgdHVwbGUg Ki8KLQkJaWYgKF9idF9maXJzdChzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbikpCisJCS8qIEZl dGNoIHRoZSBmaXJzdCBiYXRjaCAqLworCQlpZiAoKGJhdGNoID0gX2J0X2ZpcnN0KHNjYW4sIEZv cndhcmRTY2FuRGlyZWN0aW9uKSkpCiAJCXsKLQkJCS8qIFNhdmUgdHVwbGUgSUQsIGFuZCBjb250 aW51ZSBzY2FubmluZyAqLwotCQkJaGVhcFRpZCA9ICZzY2FuLT54c19oZWFwdGlkOwotCQkJdGJt X2FkZF90dXBsZXModGJtLCBoZWFwVGlkLCAxLCBmYWxzZSk7CisJCQlpbnQJCQlpdGVtSW5kZXgg PSAwOworCisJCQkvKiBTYXZlIGZpcnN0IHR1cGxlJ3MgVElEICovCisJCQl0YWJsZVRpZCA9ICZi YXRjaC0+aXRlbXNbaXRlbUluZGV4XS50YWJsZVRpZDsKKwkJCXRibV9hZGRfdHVwbGVzKHRibSwg dGFibGVUaWQsIDEsIGZhbHNlKTsKIAkJCW50aWRzKys7CiAKIAkJCWZvciAoOzspCiAJCQl7Ci0J CQkJLyoKLQkJCQkgKiBBZHZhbmNlIHRvIG5leHQgdHVwbGUgd2l0aGluIHBhZ2UuICBUaGlzIGlz IHRoZSBzYW1lIGFzIHRoZQotCQkJCSAqIGVhc3kgY2FzZSBpbiBfYnRfbmV4dCgpLgotCQkJCSAq LwotCQkJCWlmICgrK3NvLT5jdXJyUG9zLml0ZW1JbmRleCA+IHNvLT5jdXJyUG9zLmxhc3RJdGVt KQorCQkJCS8qIEFkdmFuY2UgdG8gbmV4dCBUSUQgd2l0aGluIHBhZ2Utc2l6ZWQgYmF0Y2ggKi8K KwkJCQlpZiAoKytpdGVtSW5kZXggPiBiYXRjaC0+bGFzdEl0ZW0pCiAJCQkJewotCQkJCQkvKiBs ZXQgX2J0X25leHQgZG8gdGhlIGhlYXZ5IGxpZnRpbmcgKi8KLQkJCQkJaWYgKCFfYnRfbmV4dChz Y2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbikpCisJCQkJCS8qCisJCQkJCSAqIF9idF9uZXh0IHJl bGVhc2VzIHRoZSBwcmlvciBiYXRjaCBmb3IgYml0bWFwIGNhbGxlcnMKKwkJCQkJICogYmVmb3Jl IGFsbG9jYXRpbmcgdGhlIG5leHQgb25lLCBzbyBvbmx5IG9uZSBiYXRjaCBpcworCQkJCQkgKiBl dmVyIHVzZWQgYXQgYSB0aW1lCisJCQkJCSAqLworCQkJCQlpdGVtSW5kZXggPSAwOworCQkJCQli YXRjaCA9IF9idF9uZXh0KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBiYXRjaCk7CisJCQkJ CWlmICghYmF0Y2gpCiAJCQkJCQlicmVhazsKIAkJCQl9CiAKLQkJCQkvKiBTYXZlIHR1cGxlIElE LCBhbmQgY29udGludWUgc2Nhbm5pbmcgKi8KLQkJCQloZWFwVGlkID0gJnNvLT5jdXJyUG9zLml0 ZW1zW3NvLT5jdXJyUG9zLml0ZW1JbmRleF0uaGVhcFRpZDsKLQkJCQl0Ym1fYWRkX3R1cGxlcyh0 Ym0sIGhlYXBUaWQsIDEsIGZhbHNlKTsKKwkJCQl0YWJsZVRpZCA9ICZiYXRjaC0+aXRlbXNbaXRl bUluZGV4XS50YWJsZVRpZDsKKwkJCQl0Ym1fYWRkX3R1cGxlcyh0Ym0sIHRhYmxlVGlkLCAxLCBm YWxzZSk7CiAJCQkJbnRpZHMrKzsKIAkJCX0KIAkJfQpAQCAtMzQ5LDggKzMzMSw2IEBAIGJ0YmVn aW5zY2FuKFJlbGF0aW9uIHJlbCwgaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzKQogCiAJLyogYWxs b2NhdGUgcHJpdmF0ZSB3b3Jrc3BhY2UgKi8KIAlzbyA9IHBhbGxvY19vYmplY3QoQlRTY2FuT3Bh cXVlRGF0YSk7Ci0JQlRTY2FuUG9zSW52YWxpZGF0ZShzby0+Y3VyclBvcyk7Ci0JQlRTY2FuUG9z SW52YWxpZGF0ZShzby0+bWFya1Bvcyk7CiAJaWYgKHNjYW4tPm51bWJlck9mS2V5cyA+IDApCiAJ CXNvLT5rZXlEYXRhID0gKFNjYW5LZXkpIHBhbGxvYyhzY2FuLT5udW1iZXJPZktleXMgKiBzaXpl b2YoU2NhbktleURhdGEpKTsKIAllbHNlCkBAIC0zNjQsMTkgKzM0NCwxMSBAQCBidGJlZ2luc2Nh bihSZWxhdGlvbiByZWwsIGludCBua2V5cywgaW50IG5vcmRlcmJ5cykKIAlzby0+b3JkZXJQcm9j cyA9IE5VTEw7CiAJc28tPmFycmF5Q29udGV4dCA9IE5VTEw7CiAKLQlzby0+a2lsbGVkSXRlbXMg PSBOVUxMOwkJLyogdW50aWwgbmVlZGVkICovCi0Jc28tPm51bUtpbGxlZCA9IDA7Ci0KLQkvKgot CSAqIFdlIGRvbid0IGtub3cgeWV0IHdoZXRoZXIgdGhlIHNjYW4gd2lsbCBiZSBpbmRleC1vbmx5 LCBzbyB3ZSBkbyBub3QKLQkgKiBhbGxvY2F0ZSB0aGUgdHVwbGUgd29ya3NwYWNlIGFycmF5cyB1 bnRpbCBidHJlc2Nhbi4gIEhvd2V2ZXIsIHdlIHNldCB1cAotCSAqIHNjYW4tPnhzX2l0dXBkZXNj IHdoZXRoZXIgd2UnbGwgbmVlZCBpdCBvciBub3QsIHNpbmNlIHRoYXQncyBzbyBjaGVhcC4KLQkg Ki8KLQlzby0+Y3VyclR1cGxlcyA9IHNvLT5tYXJrVHVwbGVzID0gTlVMTDsKLQotCXNjYW4tPnhz X2l0dXBkZXNjID0gUmVsYXRpb25HZXREZXNjcihyZWwpOwotCiAJc2Nhbi0+b3BhcXVlID0gc287 CisJc2Nhbi0+eHNfaXR1cGRlc2MgPSBSZWxhdGlvbkdldERlc2NyKHJlbCk7CisJc2Nhbi0+bWF4 aXRlbXNiYXRjaCA9IE1heFRJRHNQZXJCVHJlZVBhZ2U7CisJc2Nhbi0+YmF0Y2hfaW5kZXhfb3Bh cXVlX3NpemUgPSBNQVhBTElHTihzaXplb2YoQlRCYXRjaERhdGEpKTsKKwlzY2FuLT5iYXRjaF90 dXBsZXNfd29ya3NwYWNlID0gQkxDS1NaOwogCiAJcmV0dXJuIHNjYW47CiB9CkBAIC0zOTAsNjQg KzM2MiwxODUgQEAgYnRyZXNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuS2V5IHNjYW5rZXks IGludCBuc2NhbmtleXMsCiB7CiAJQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nh bi0+b3BhcXVlOwogCi0JLyogd2UgYXJlbid0IGhvbGRpbmcgYW55IHJlYWQgbG9ja3MsIGJ1dCBn b3R0YSBkcm9wIHRoZSBwaW5zICovCi0JaWYgKEJUU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3Mp KQotCXsKLQkJLyogQmVmb3JlIGxlYXZpbmcgY3VycmVudCBwYWdlLCBkZWFsIHdpdGggYW55IGtp bGxlZCBpdGVtcyAqLwotCQlpZiAoc28tPm51bUtpbGxlZCA+IDApCi0JCQlfYnRfa2lsbGl0ZW1z KHNjYW4pOwotCQlCVFNjYW5Qb3NVbnBpbklmUGlubmVkKHNvLT5jdXJyUG9zKTsKLQkJQlRTY2Fu UG9zSW52YWxpZGF0ZShzby0+Y3VyclBvcyk7Ci0JfQotCi0JLyoKLQkgKiBXZSBwcmVmZXIgdG8g ZWFnZXJseSBkcm9wIGxlYWYgcGFnZSBwaW5zIGJlZm9yZSBidGdldHR1cGxlIHJldHVybnMuCi0J ICogVGhpcyBhdm9pZHMgbWFraW5nIFZBQ1VVTSB3YWl0IHRvIGFjcXVpcmUgYSBjbGVhbnVwIGxv Y2sgb24gdGhlIHBhZ2UuCi0JICoKLQkgKiBXZSBjYW5ub3Qgc2FmZWx5IGRyb3AgbGVhZiBwYWdl IHBpbnMgZHVyaW5nIGluZGV4LW9ubHkgc2NhbnMgZHVlIHRvIGEKLQkgKiByYWNlIGNvbmRpdGlv biBpbnZvbHZpbmcgVkFDVVVNIHNldHRpbmcgcGFnZXMgYWxsLXZpc2libGUgaW4gdGhlIFZNLgot CSAqIEl0J3MgYWxzbyB1bnNhZmUgZm9yIHBsYWluIGluZGV4IHNjYW5zIHRoYXQgdXNlIGEgbm9u LU1WQ0Mgc25hcHNob3QuCi0JICoKLQkgKiBBbHNvIG9wdCBvdXQgb2YgZHJvcHBpbmcgbGVhZiBw YWdlIHBpbnMgZWFnZXJseSBkdXJpbmcgYml0bWFwIHNjYW5zLgotCSAqIFBpbnMgY2Fubm90IGJl IGhlbGQgZm9yIG1vcmUgdGhhbiBhbiBpbnN0YW50IGR1cmluZyBiaXRtYXAgc2NhbnMgZWl0aGVy Ci0JICogd2F5LCBzbyB3ZSBtaWdodCBhcyB3ZWxsIGF2b2lkIHdhc3RpbmcgY3ljbGVzIG9uIGFj cXVpcmluZyBwYWdlIExTTnMuCi0JICoKLQkgKiBTZWUgbmJ0cmVlL1JFQURNRSBzZWN0aW9uIG9u IG1ha2luZyBjb25jdXJyZW50IFRJRCByZWN5Y2xpbmcgc2FmZS4KLQkgKgotCSAqIE5vdGU6IHNv LT5kcm9wUGluIHNob3VsZCBuZXZlciBjaGFuZ2UgYWNyb3NzIHJlc2NhbnMuCi0JICovCi0Jc28t PmRyb3BQaW4gPSAoIXNjYW4tPnhzX3dhbnRfaXR1cCAmJgotCQkJCSAgIElzTVZDQ0xpa2VTbmFw c2hvdChzY2FuLT54c19zbmFwc2hvdCkgJiYKLQkJCQkgICBzY2FuLT5oZWFwUmVsYXRpb24gIT0g TlVMTCk7Ci0KLQlzby0+bWFya0l0ZW1JbmRleCA9IC0xOwotCXNvLT5uZWVkUHJpbVNjYW4gPSBm YWxzZTsKLQlzby0+c2NhbkJlaGluZCA9IGZhbHNlOwotCXNvLT5vcHBvc2l0ZURpckNoZWNrID0g ZmFsc2U7Ci0JQlRTY2FuUG9zVW5waW5JZlBpbm5lZChzby0+bWFya1Bvcyk7Ci0JQlRTY2FuUG9z SW52YWxpZGF0ZShzby0+bWFya1Bvcyk7Ci0KLQkvKgotCSAqIEFsbG9jYXRlIHR1cGxlIHdvcmtz cGFjZSBhcnJheXMsIGlmIG5lZWRlZCBmb3IgYW4gaW5kZXgtb25seSBzY2FuIGFuZAotCSAqIG5v dCBhbHJlYWR5IGRvbmUgaW4gYSBwcmV2aW91cyByZXNjYW4gY2FsbC4gIFRvIHNhdmUgb24gcGFs bG9jCi0JICogb3ZlcmhlYWQsIGJvdGggd29ya3NwYWNlcyBhcmUgYWxsb2NhdGVkIGFzIG9uZSBw YWxsb2MgYmxvY2s7IG9ubHkgdGhpcwotCSAqIGZ1bmN0aW9uIGFuZCBidGVuZHNjYW4ga25vdyB0 aGF0LgotCSAqLwotCWlmIChzY2FuLT54c193YW50X2l0dXAgJiYgc28tPmN1cnJUdXBsZXMgPT0g TlVMTCkKLQl7Ci0JCXNvLT5jdXJyVHVwbGVzID0gKGNoYXIgKikgcGFsbG9jKEJMQ0tTWiAqIDIp OwotCQlzby0+bWFya1R1cGxlcyA9IHNvLT5jdXJyVHVwbGVzICsgQkxDS1NaOwotCX0KLQogCS8q CiAJICogUmVzZXQgdGhlIHNjYW4ga2V5cwogCSAqLwogCWlmIChzY2Fua2V5ICYmIHNjYW4tPm51 bWJlck9mS2V5cyA+IDApCiAJCW1lbWNweShzY2FuLT5rZXlEYXRhLCBzY2Fua2V5LCBzY2FuLT5u dW1iZXJPZktleXMgKiBzaXplb2YoU2NhbktleURhdGEpKTsKKwlzby0+bmVlZFByaW1TY2FuID0g ZmFsc2U7CisJc28tPnNjYW5CZWhpbmQgPSBmYWxzZTsKKwlzby0+b3Bwb3NpdGVEaXJDaGVjayA9 IGZhbHNlOwogCXNvLT5udW1iZXJPZktleXMgPSAwOwkJLyogdW50aWwgX2J0X3ByZXByb2Nlc3Nf a2V5cyBzZXRzIGl0ICovCiAJc28tPm51bUFycmF5S2V5cyA9IDA7CQkvKiBkaXR0byAqLwogfQog CisvKgorICoJYnR1bmd1YXJkYmF0Y2goKSAtLSBEcm9wIGJhdGNoJ3MgVElEIHJlY3ljbGluZyBp bnRlcmxvY2sgKGJ1ZmZlciBwaW4pCisgKgorICogQ2FsbGVkIGJ5IHRoZSB0YWJsZSBBTSB3aGVu IGl0J3Mgc2FmZSB0byBkcm9wIHRoZSBidWZmZXIgcGluIGhlbGQgdG8KKyAqIHByZXZlbnQgY29u Y3VycmVudCBUSUQgcmVjeWNsaW5nIGJ5IFZBQ1VVTS4KKyAqLwordm9pZAorYnR1bmd1YXJkYmF0 Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCkKK3sKKwlCVEJhdGNo RGF0YSAqYnRiYXRjaCA9IEJUQmF0Y2hHZXREYXRhKHNjYW4sIGJhdGNoKTsKKworCS8qIFNob3Vs ZCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGlmZiAhYmF0Y2hJbW1lZGlhdGVVbmd1YXJkICovCisJ QXNzZXJ0KCFzY2FuLT5iYXRjaEltbWVkaWF0ZVVuZ3VhcmQpOworCUFzc2VydChiYXRjaC0+aXNH dWFyZGVkKTsKKworCVJlbGVhc2VCdWZmZXIoYnRiYXRjaC0+YnVmKTsKK30KKworLyoKKyAqCWJ0 a2lsbGl0ZW1zYmF0Y2goKSAtLSBNYXJrIGRlYWQgaXRlbXMnIGluZGV4IHR1cGxlcyBMUF9ERUFE CisgKi8KK3ZvaWQKK2J0a2lsbGl0ZW1zYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNj YW5CYXRjaCBiYXRjaCkKK3sKKwlSZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOwor CUJUQmF0Y2hEYXRhICpidGJhdGNoID0gQlRCYXRjaEdldERhdGEoc2NhbiwgYmF0Y2gpOworCVBh Z2UJCXBhZ2U7CisJQlRQYWdlT3BhcXVlIG9wYXF1ZTsKKwlPZmZzZXROdW1iZXIgbWlub2ZmOwor CU9mZnNldE51bWJlciBtYXhvZmY7CisJYm9vbAkJa2lsbGVkc29tZXRoaW5nID0gZmFsc2U7CisJ QnVmZmVyCQlidWY7CisJWExvZ1JlY1B0cglsYXRlc3Rsc247CisKKwkvKiBUYWJsZSBBTSBzaG91 bGQgaGF2ZSBhbHJlYWR5IHJlbGVhc2VkIGJhdGNoIHBhZ2UncyBwaW4gYnkgbm93ICovCisJQXNz ZXJ0KGJhdGNoLT5udW1EZWFkID4gMCk7CisKKwlidWYgPSBfYnRfZ2V0YnVmKHJlbCwgYnRiYXRj aC0+Y3VyclBhZ2UsIEJUX1JFQUQpOworCisJbGF0ZXN0bHNuID0gQnVmZmVyR2V0TFNOQXRvbWlj KGJ1Zik7CisJQXNzZXJ0KGJhdGNoLT5sc24gPD0gbGF0ZXN0bHNuKTsKKwlpZiAoYmF0Y2gtPmxz biAhPSBsYXRlc3Rsc24pCisJeworCQkvKiBNb2RpZmllZCwgZ2l2ZSB1cCBvbiBoaW50aW5nICov CisJCV9idF9yZWxidWYocmVsLCBidWYpOworCQlyZXR1cm47CisJfQorCisJcGFnZSA9IEJ1ZmZl ckdldFBhZ2UoYnVmKTsKKwlvcGFxdWUgPSBCVFBhZ2VHZXRPcGFxdWUocGFnZSk7CisJbWlub2Zm ID0gUF9GSVJTVERBVEFLRVkob3BhcXVlKTsKKwltYXhvZmYgPSBQYWdlR2V0TWF4T2Zmc2V0TnVt YmVyKHBhZ2UpOworCisJLyogSXRlcmF0ZSB0aHJvdWdoIGJhdGNoLT5kZWFkSXRlbXNbXSBpbiBs ZWFmIHBhZ2Ugb3JkZXIgKi8KKwlmb3IgKGludCBpID0gMDsgaSA8IGJhdGNoLT5udW1EZWFkOyBp KyspCisJeworCQlpbnQJCQlpdGVtSW5kZXggPSBiYXRjaC0+ZGVhZEl0ZW1zW2ldOworCQlCYXRj aE1hdGNoaW5nSXRlbSAqa2l0ZW0gPSAmYmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF07CisJCU9mZnNl dE51bWJlciBvZmZudW0gPSBraXRlbS0+aW5kZXhPZmZzZXQ7CisKKwkJQXNzZXJ0KGl0ZW1JbmRl eCA+PSBiYXRjaC0+Zmlyc3RJdGVtICYmIGl0ZW1JbmRleCA8PSBiYXRjaC0+bGFzdEl0ZW0pOwor CQlBc3NlcnQoaSA9PSAwIHx8CisJCQkgICBvZmZudW0gPj0gYmF0Y2gtPml0ZW1zW2JhdGNoLT5k ZWFkSXRlbXNbaSAtIDFdXS5pbmRleE9mZnNldCk7CisKKwkJaWYgKG9mZm51bSA8IG1pbm9mZikK KwkJCWNvbnRpbnVlOwkJCS8qIHB1cmUgcGFyYW5vaWEgKi8KKwkJd2hpbGUgKG9mZm51bSA8PSBt YXhvZmYpCisJCXsKKwkJCUl0ZW1JZAkJaWlkID0gUGFnZUdldEl0ZW1JZChwYWdlLCBvZmZudW0p OworCQkJSW5kZXhUdXBsZQlpdHVwbGUgPSAoSW5kZXhUdXBsZSkgUGFnZUdldEl0ZW0ocGFnZSwg aWlkKTsKKwkJCWJvb2wJCWtpbGx0dXBsZSA9IGZhbHNlOworCisJCQlpZiAoQlRyZWVUdXBsZUlz UG9zdGluZyhpdHVwbGUpKQorCQkJeworCQkJCWludAkJCXBpID0gaSArIDE7CisJCQkJaW50CQkJ bnBvc3RpbmcgPSBCVHJlZVR1cGxlR2V0TlBvc3RpbmcoaXR1cGxlKTsKKwkJCQlpbnQJCQlqOwor CisJCQkJZm9yIChqID0gMDsgaiA8IG5wb3N0aW5nOyBqKyspCisJCQkJeworCQkJCQlJdGVtUG9p bnRlciBpdGVtID0gQlRyZWVUdXBsZUdldFBvc3RpbmdOKGl0dXBsZSwgaik7CisKKwkJCQkJaWYg KCFJdGVtUG9pbnRlckVxdWFscyhpdGVtLCAma2l0ZW0tPnRhYmxlVGlkKSkKKwkJCQkJCWJyZWFr OwkvKiBvdXQgb2YgcG9zdGluZyBsaXN0IGxvb3AgKi8KKworCQkJCQlBc3NlcnQoa2l0ZW0tPmlu ZGV4T2Zmc2V0ID09IG9mZm51bSk7CisKKwkJCQkJLyoKKwkJCQkJICogUmVhZC1haGVhZCB0byBs YXRlciBraXRlbXMgaGVyZS4KKwkJCQkJICoKKwkJCQkJICogV2UgcmVseSBvbiB0aGUgYXNzdW1w dGlvbiB0aGF0IG5vdCBhZHZhbmNpbmcga2l0ZW0gaGVyZQorCQkJCQkgKiB3aWxsIHByZXZlbnQg dXMgZnJvbSBjb25zaWRlcmluZyB0aGUgcG9zdGluZyBsaXN0IHR1cGxlCisJCQkJCSAqIGZ1bGx5 IGRlYWQgYnkgbm90IG1hdGNoaW5nIGl0cyBuZXh0IGhlYXAgVElEIGluIG5leHQKKwkJCQkJICog bG9vcCBpdGVyYXRpb24uCisJCQkJCSAqCisJCQkJCSAqIElmLCBvbiB0aGUgb3RoZXIgaGFuZCwg dGhpcyBpcyB0aGUgZmluYWwgaGVhcCBUSUQgaW4KKwkJCQkJICogdGhlIHBvc3RpbmcgbGlzdCB0 dXBsZSwgdGhlbiB0dXBsZSBnZXRzIGtpbGxlZAorCQkJCQkgKiByZWdhcmRsZXNzIChpLmUuIHdl IGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUgbGFzdAorCQkJCQkgKiBraXRlbSBpcyBhbHNvIHRo ZSBsYXN0IGhlYXAgVElEIGluIHRoZSBsYXN0IGluZGV4IHR1cGxlCisJCQkJCSAqIGNvcnJlY3Rs eSAtLSBwb3N0aW5nIHR1cGxlIHN0aWxsIGdldHMga2lsbGVkKS4KKwkJCQkJICovCisJCQkJCWlm IChwaSA8IGJhdGNoLT5udW1EZWFkKQorCQkJCQkJa2l0ZW0gPSAmYmF0Y2gtPml0ZW1zW2JhdGNo LT5kZWFkSXRlbXNbcGkrK11dOworCQkJCX0KKworCQkJCS8qCisJCQkJICogRG9uJ3QgYm90aGVy IGFkdmFuY2luZyB0aGUgb3V0ZXJtb3N0IGxvb3AncyBpbnQgaXRlcmF0b3IgdG8KKwkJCQkgKiBh dm9pZCBwcm9jZXNzaW5nIGRlYWQgaXRlbXMgdGhhdCByZWxhdGUgdG8gdGhlIHNhbWUKKwkJCQkg KiBvZmZudW0vcG9zdGluZyBsaXN0IHR1cGxlLiAgVGhpcyBtaWNyby1vcHRpbWl6YXRpb24gaGFy ZGx5CisJCQkJICogc2VlbXMgd29ydGggaXQuICAoRnVydGhlciBpdGVyYXRpb25zIG9mIHRoZSBv dXRlcm1vc3QgbG9vcAorCQkJCSAqIHdpbGwgZmFpbCB0byBtYXRjaCBvbiB0aGlzIHNhbWUgcG9z dGluZyBsaXN0J3MgZmlyc3QgaGVhcAorCQkJCSAqIFRJRCBpbnN0ZWFkLCBzbyB3ZSdsbCBhZHZh bmNlIHRvIHRoZSBuZXh0IG9mZm51bS9pbmRleAorCQkJCSAqIHR1cGxlIHByZXR0eSBxdWlja2x5 LikKKwkJCQkgKi8KKwkJCQlpZiAoaiA9PSBucG9zdGluZykKKwkJCQkJa2lsbHR1cGxlID0gdHJ1 ZTsKKwkJCX0KKwkJCWVsc2UgaWYgKEl0ZW1Qb2ludGVyRXF1YWxzKCZpdHVwbGUtPnRfdGlkLCAm a2l0ZW0tPnRhYmxlVGlkKSkKKwkJCQlraWxsdHVwbGUgPSB0cnVlOworCisJCQkvKgorCQkJICog TWFyayBpbmRleCBpdGVtIGFzIGRlYWQsIGlmIGl0IGlzbid0IGFscmVhZHkuICBTaW5jZSB0aGlz CisJCQkgKiBoYXBwZW5zIHdoaWxlIGhvbGRpbmcgYSBzaGFyZWQgYnVmZmVyIGxvY2ssIGl0J3Mg cG9zc2libGUgdGhhdAorCQkJICogbXVsdGlwbGUgcHJvY2Vzc2VzIGF0dGVtcHQgdG8gZG8gdGhp cyBzaW11bHRhbmVvdXNseSwgbGVhZGluZworCQkJICogdG8gbXVsdGlwbGUgZnVsbC1wYWdlIGlt YWdlcyBiZWluZyBzZW50IHRvIFdBTCAoaWYKKwkJCSAqIHdhbF9sb2dfaGludHMgb3IgZGF0YSBj aGVja3N1bXMgYXJlIGVuYWJsZWQpLCB3aGljaCBpcworCQkJICogdW5kZXNpcmFibGUuCisJCQkg Ki8KKwkJCWlmIChraWxsdHVwbGUgJiYgIUl0ZW1JZElzRGVhZChpaWQpKQorCQkJeworCQkJCWlm ICgha2lsbGVkc29tZXRoaW5nKQorCQkJCXsKKwkJCQkJLyoKKwkJCQkJICogVXNlIHRoZSBoaW50 IGJpdCBpbmZyYXN0cnVjdHVyZSB0byBjaGVjayBpZiB3ZSBjYW4KKwkJCQkJICogdXBkYXRlIHRo ZSBwYWdlIHdoaWxlIGp1c3QgaG9sZGluZyBhIHNoYXJlIGxvY2suIElmIHdlCisJCQkJCSAqIGFy ZSBub3QgYWxsb3dlZCwgdGhlcmUncyBubyBwb2ludCBjb250aW51aW5nLgorCQkJCQkgKi8KKwkJ CQkJaWYgKCFCdWZmZXJCZWdpblNldEhpbnRCaXRzKGJ1ZikpCisJCQkJCQlnb3RvIHVubG9ja19w YWdlOworCQkJCX0KKworCQkJCS8qIGZvdW5kIHRoZSBpdGVtL2FsbCBwb3N0aW5nIGxpc3QgaXRl bXMgKi8KKwkJCQlJdGVtSWRNYXJrRGVhZChpaWQpOworCQkJCWtpbGxlZHNvbWV0aGluZyA9IHRy dWU7CisJCQkJYnJlYWs7CQkJLyogb3V0IG9mIGlubmVyIHNlYXJjaCBsb29wICovCisJCQl9CisJ CQlvZmZudW0gPSBPZmZzZXROdW1iZXJOZXh0KG9mZm51bSk7CisJCX0KKwl9CisKKwkvKgorCSAq IFNpbmNlIHRoaXMgY2FuIGJlIHJlZG9uZSBsYXRlciBpZiBuZWVkZWQsIG1hcmsgYXMgZGlydHkg aGludC4KKwkgKgorCSAqIFdoZW5ldmVyIHdlIG1hcmsgYW55dGhpbmcgTFBfREVBRCwgd2UgYWxz byBzZXQgdGhlIHBhZ2UncworCSAqIEJUUF9IQVNfR0FSQkFHRSBmbGFnLCB3aGljaCBpcyBsaWtl d2lzZSBqdXN0IGEgaGludC4gIChOb3RlIHRoYXQgd2UKKwkgKiBvbmx5IHJlbHkgb24gdGhlIHBh Z2UtbGV2ZWwgZmxhZyBpbiAhaGVhcGtleXNwYWNlIGluZGV4ZXMuKQorCSAqLworCWlmIChraWxs ZWRzb21ldGhpbmcpCisJeworCQlvcGFxdWUtPmJ0cG9fZmxhZ3MgfD0gQlRQX0hBU19HQVJCQUdF OworCQlCdWZmZXJGaW5pc2hTZXRIaW50Qml0cyhidWYsIHRydWUsIHRydWUpOworCX0KKwordW5s b2NrX3BhZ2U6CisJX2J0X3JlbGJ1ZihyZWwsIGJ1Zik7Cit9CisKIC8qCiAgKglidGVuZHNjYW4o KSAtLSBjbG9zZSBkb3duIGEgc2NhbgogICovCkBAIC00NTYsMTE2ICs1NDksNjMgQEAgYnRlbmRz Y2FuKEluZGV4U2NhbkRlc2Mgc2NhbikKIHsKIAlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3Bh cXVlKSBzY2FuLT5vcGFxdWU7CiAKLQkvKiB3ZSBhcmVuJ3QgaG9sZGluZyBhbnkgcmVhZCBsb2Nr cywgYnV0IGdvdHRhIGRyb3AgdGhlIHBpbnMgKi8KLQlpZiAoQlRTY2FuUG9zSXNWYWxpZChzby0+ Y3VyclBvcykpCi0JewotCQkvKiBCZWZvcmUgbGVhdmluZyBjdXJyZW50IHBhZ2UsIGRlYWwgd2l0 aCBhbnkga2lsbGVkIGl0ZW1zICovCi0JCWlmIChzby0+bnVtS2lsbGVkID4gMCkKLQkJCV9idF9r aWxsaXRlbXMoc2Nhbik7Ci0JCUJUU2NhblBvc1VucGluSWZQaW5uZWQoc28tPmN1cnJQb3MpOwot CX0KLQotCXNvLT5tYXJrSXRlbUluZGV4ID0gLTE7Ci0JQlRTY2FuUG9zVW5waW5JZlBpbm5lZChz by0+bWFya1Bvcyk7Ci0KLQkvKiBObyBuZWVkIHRvIGludmFsaWRhdGUgcG9zaXRpb25zLCB0aGUg UkFNIGlzIGFib3V0IHRvIGJlIGZyZWVkLiAqLwotCiAJLyogUmVsZWFzZSBzdG9yYWdlICovCiAJ aWYgKHNvLT5rZXlEYXRhICE9IE5VTEwpCiAJCXBmcmVlKHNvLT5rZXlEYXRhKTsKIAkvKiBzby0+ YXJyYXlLZXlzIGFuZCBzby0+b3JkZXJQcm9jcyBhcmUgaW4gYXJyYXlDb250ZXh0ICovCiAJaWYg KHNvLT5hcnJheUNvbnRleHQgIT0gTlVMTCkKIAkJTWVtb3J5Q29udGV4dERlbGV0ZShzby0+YXJy YXlDb250ZXh0KTsKLQlpZiAoc28tPmtpbGxlZEl0ZW1zICE9IE5VTEwpCi0JCXBmcmVlKHNvLT5r aWxsZWRJdGVtcyk7Ci0JaWYgKHNvLT5jdXJyVHVwbGVzICE9IE5VTEwpCi0JCXBmcmVlKHNvLT5j dXJyVHVwbGVzKTsKLQkvKiBzby0+bWFya1R1cGxlcyBzaG91bGQgbm90IGJlIHBmcmVlJ2QsIHNl ZSBidHJlc2NhbiAqLwogCXBmcmVlKHNvKTsKIH0KIAogLyoKLSAqCWJ0bWFya3BvcygpIC0tIHNh dmUgY3VycmVudCBzY2FuIHBvc2l0aW9uCisgKglidHBvc3Jlc2V0KCkgLS0gcmVzZXQgYXJyYXkg a2V5IHN0YXRlIGZvciBzY2FuIHBvc2l0aW9uIGNoYW5nZQorICoKKyAqIENhbGxlZCBieSB0aGUg Y29yZSBzeXN0ZW0gd2hlbiB0aGUgc2NhbidzIGxvZ2ljYWwgcG9zaXRpb24gaXMgYWJvdXQgdG8K KyAqIGNoYW5nZSBpbiBhIHdheSB0aGF0IGludmFsaWRhdGVzIG91ciBhcnJheSBrZXkgc3RhdGUu ICBUaGlzIGhhcHBlbnMgd2hlbgorICogcmVzdG9yaW5nIGEgbWFya2VkIHBvc2l0aW9uLCBvciB3 aGVuIHRoZSBzY2FuIGNyb3NzZXMgYSBiYXRjaCBib3VuZGFyeQorICogd2hpbGUgbW92aW5nIGlu IHRoZSBvcHBvc2l0ZSBkaXJlY3Rpb24gdG8gdGhlIG9uZSBvcmlnaW5hbGx5IHVzZWQuCisgKgor ICogRm9yIGRpcmVjdGlvbiBjaGFuZ2VzLCB0aGUgY29yZSBzeXN0ZW0gd2lsbCBoYXZlIGFscmVh ZHkgZmxpcHBlZCB0aGUKKyAqIGJhdGNoJ3MgZGlyIGZpZWxkIGJlZm9yZSBjYWxsaW5nIGhlcmU7 IHdlIHVzZSB0aGlzIHVwZGF0ZWQgZGlyZWN0aW9uIHdoZW4KKyAqIHJlc2V0dGluZyBvdXIgYXJy YXkga2V5cy4gIEZvciBtYXJrIHJlc3RvcmF0aW9uLCB0aGUgYmF0Y2gncyBkaXIgd2lsbAorICog cmV0YWluIGl0cyBvcmlnaW5hbCB2YWx1ZSAoZnJvbSB3aGVuIGJ0Z2V0YmF0Y2ggcmV0dXJuZWQg aXQpLgogICovCiB2b2lkCi1idG1hcmtwb3MoSW5kZXhTY2FuRGVzYyBzY2FuKQorYnRwb3NyZXNl dChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKQogewogCUJUU2Nhbk9w YXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKKwlCVEJhdGNoRGF0YSAqYnRi YXRjaCA9IEJUQmF0Y2hHZXREYXRhKHNjYW4sIGJhdGNoKTsKIAotCS8qIFRoZXJlIG1heSBiZSBh biBvbGQgbWFyayB3aXRoIGEgcGluIChidXQgbm8gbG9jaykuICovCi0JQlRTY2FuUG9zVW5waW5J ZlBpbm5lZChzby0+bWFya1Bvcyk7CisJaWYgKCFzby0+bnVtQXJyYXlLZXlzKQorCQlyZXR1cm47 CiAKIAkvKgotCSAqIEp1c3QgcmVjb3JkIHRoZSBjdXJyZW50IGl0ZW1JbmRleC4gIElmIHdlIGxh dGVyIHN0ZXAgdG8gbmV4dCBwYWdlCi0JICogYmVmb3JlIHJlbGVhc2luZyB0aGUgbWFya2VkIHBv c2l0aW9uLCBfYnRfc3RlcHBhZ2UgbWFrZXMgYSBmdWxsIGNvcHkgb2YKLQkgKiB0aGUgY3VyclBv cyBzdHJ1Y3QgaW4gbWFya1Bvcy4gIElmIChhcyBvZnRlbiBoYXBwZW5zKSB0aGUgbWFyayBpcyBt b3ZlZAotCSAqIGJlZm9yZSB3ZSBsZWF2ZSB0aGUgcGFnZSwgd2UgZG9uJ3QgaGF2ZSB0byBkbyB0 aGF0IHdvcmsuCisJICogUmVzZXQgYXJyYXkga2V5cyB0byBpbml0aWFsIHN0YXRlIGZvciB0aGUg YmF0Y2gncyBzY2FuIGRpcmVjdGlvbi4gIEFsc28KKwkgKiBjbGVhciBuZWVkUHJpbVNjYW4gYW5k IHJlbGF0ZWQgZmxhZ3MuICBUaGVzZSB3ZXJlIHNldCBiYXNlZCBvbiB0aGUgc29mdAorCSAqIGFz c3VtcHRpb24gdGhhdCB0aGUgc2NhbiB3b3VsZCBhbHdheXMgcHJvY2VlZCBpbiB0aGUgc2FtZSBk aXJlY3Rpb24uCisJICoKKwkgKiBUaGVzZSBzdGVwcyB3b3JrIGFyb3VuZCB0aGUgc29mdCBhc3N1 bXB0aW9uIGJlaW5nIHZpb2xhdGVkOiB0aGV5IGZvcmNlCisJICogdGhlIHNjYW4gdG8gc3RlcCB0 byB0aGUgbmV4dC9wcmV2aW91cyBwYWdlLCBtYWtpbmcgdGhlIGFycmF5cyByZWNvdmVyLgorCSAq IFdoZW4gd2UgZ28gdG8gcmVhZCB0aGF0IHBhZ2UsIF9idF9yZWFkcGFnZSB3aWxsIHJlbGlhYmx5 IGRldGVybWluZSBpZiBhCisJICogcHJpbWl0aXZlIHNjYW4gcmVhbGx5IGlzIG5lZWRlZCBiYXNl ZCBvbiB0aGUgcGFnZSdzIHR1cGxlcy4gIElmIHRoZXJlJ3MKKwkgKiBhIHByaW1pdGl2ZSBzY2Fu LCBpdCB3aWxsIHJlcG9zaXRpb24gdGhlIHNjYW4gdXNpbmcgbmV3IGFycmF5IHZhbHVlcworCSAq IChiYXNlZCBvbiB0aGUgdHVwbGVzIGZyb20gdGhlIG5laWdoYm9yaW5nIHBhZ2Ugd2UnbGwgc3Rl cCBvbiB0bykuCisJICoKKwkgKiBXZSBuZWVkIHRvIHJlc2V0IHRoZSBhcnJheSBrZXkgc3RhdGUg aW4gdGhlIGNvcnJlY3QgZGlyZWN0aW9uIHNvIHRoYXQKKwkgKiB3ZSB3b24ndCBnZXQgY29uZnVz ZWQuICBXaGVuIHRoZSBhcnJheSBrZXlzIGFyZSBiZWhpbmQgdGhlIGtleSBzcGFjZQorCSAqIGZv ciB0aGUgcGFnZSB3ZSdyZSBzdGVwcGluZyBvbiB0byAoYmVoaW5kIGluIHRlcm1zIG9mIHRoZSBz Y2FuIGRpciksCisJICogdGhleSB3aWxsIGNhdGNoIHVwIGF1dG9tYXRpY2FsbHkuICBCdXQgd2hl biB0aGV5J3JlIGFoZWFkIG9mIHRoYXQKKwkgKiBwYWdlJ3Mga2V5IHNwYWNlLCB0aGUgc2NhbiBj b3VsZCBtaXNzIG1hdGNoaW5nIHR1cGxlcy4KIAkgKi8KLQlpZiAoQlRTY2FuUG9zSXNWYWxpZChz by0+Y3VyclBvcykpCi0JCXNvLT5tYXJrSXRlbUluZGV4ID0gc28tPmN1cnJQb3MuaXRlbUluZGV4 OworCV9idF9zdGFydF9hcnJheV9rZXlzKHNjYW4sIGJhdGNoLT5kaXIpOworCWlmIChTY2FuRGly ZWN0aW9uSXNGb3J3YXJkKGJhdGNoLT5kaXIpKQorCQlidGJhdGNoLT5tb3JlUmlnaHQgPSB0cnVl OwogCWVsc2UKLQl7Ci0JCUJUU2NhblBvc0ludmFsaWRhdGUoc28tPm1hcmtQb3MpOwotCQlzby0+ bWFya0l0ZW1JbmRleCA9IC0xOwotCX0KLX0KLQotLyoKLSAqCWJ0cmVzdHJwb3MoKSAtLSByZXN0 b3JlIHNjYW4gdG8gbGFzdCBzYXZlZCBwb3NpdGlvbgotICovCi12b2lkCi1idHJlc3RycG9zKElu ZGV4U2NhbkRlc2Mgc2NhbikKLXsKLQlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBz Y2FuLT5vcGFxdWU7Ci0KLQlpZiAoc28tPm1hcmtJdGVtSW5kZXggPj0gMCkKLQl7Ci0JCS8qCi0J CSAqIFRoZSBzY2FuIGhhcyBuZXZlciBtb3ZlZCB0byBhIG5ldyBwYWdlIHNpbmNlIHRoZSBsYXN0 IG1hcmsuICBKdXN0Ci0JCSAqIHJlc3RvcmUgdGhlIGl0ZW1JbmRleC4KLQkJICoKLQkJICogTkI6 IEluIHRoaXMgY2FzZSB3ZSBjYW4ndCBjb3VudCBvbiBhbnl0aGluZyBpbiBzby0+bWFya1BvcyB0 byBiZQotCQkgKiBhY2N1cmF0ZS4KLQkJICovCi0JCXNvLT5jdXJyUG9zLml0ZW1JbmRleCA9IHNv LT5tYXJrSXRlbUluZGV4OwotCX0KLQllbHNlCi0JewotCQkvKgotCQkgKiBUaGUgc2NhbiBtb3Zl ZCB0byBhIG5ldyBwYWdlIGFmdGVyIGxhc3QgbWFyayBvciByZXN0b3JlLCBhbmQgd2UgYXJlCi0J CSAqIG5vdyByZXN0b3JpbmcgdG8gdGhlIG1hcmtlZCBwYWdlLiAgV2UgYXJlbid0IGhvbGRpbmcg YW55IHJlYWQKLQkJICogbG9ja3MsIGJ1dCBpZiB3ZSdyZSBzdGlsbCBob2xkaW5nIHRoZSBwaW4g Zm9yIHRoZSBjdXJyZW50IHBvc2l0aW9uLAotCQkgKiB3ZSBtdXN0IGRyb3AgaXQuCi0JCSAqLwot CQlpZiAoQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpCi0JCXsKLQkJCS8qIEJlZm9yZSBs ZWF2aW5nIGN1cnJlbnQgcGFnZSwgZGVhbCB3aXRoIGFueSBraWxsZWQgaXRlbXMgKi8KLQkJCWlm IChzby0+bnVtS2lsbGVkID4gMCkKLQkJCQlfYnRfa2lsbGl0ZW1zKHNjYW4pOwotCQkJQlRTY2Fu UG9zVW5waW5JZlBpbm5lZChzby0+Y3VyclBvcyk7Ci0JCX0KLQotCQlpZiAoQlRTY2FuUG9zSXNW YWxpZChzby0+bWFya1BvcykpCi0JCXsKLQkJCS8qIGJ1bXAgcGluIG9uIG1hcmsgYnVmZmVyIGZv ciBhc3NpZ25tZW50IHRvIGN1cnJlbnQgYnVmZmVyICovCi0JCQlpZiAoQlRTY2FuUG9zSXNQaW5u ZWQoc28tPm1hcmtQb3MpKQotCQkJCUluY3JCdWZmZXJSZWZDb3VudChzby0+bWFya1Bvcy5idWYp OwotCQkJbWVtY3B5KCZzby0+Y3VyclBvcywgJnNvLT5tYXJrUG9zLAotCQkJCSAgIG9mZnNldG9m KEJUU2NhblBvc0RhdGEsIGl0ZW1zWzFdKSArCi0JCQkJICAgc28tPm1hcmtQb3MubGFzdEl0ZW0g KiBzaXplb2YoQlRTY2FuUG9zSXRlbSkpOwotCQkJaWYgKHNvLT5jdXJyVHVwbGVzKQotCQkJCW1l bWNweShzby0+Y3VyclR1cGxlcywgc28tPm1hcmtUdXBsZXMsCi0JCQkJCSAgIHNvLT5tYXJrUG9z Lm5leHRUdXBsZU9mZnNldCk7Ci0JCQkvKiBSZXNldCB0aGUgc2NhbidzIGFycmF5IGtleXMgKHNl ZSBfYnRfc3RlcHBhZ2UgZm9yIHdoeSkgKi8KLQkJCWlmIChzby0+bnVtQXJyYXlLZXlzKQotCQkJ ewotCQkJCV9idF9zdGFydF9hcnJheV9rZXlzKHNjYW4sIHNvLT5jdXJyUG9zLmRpcik7Ci0JCQkJ c28tPm5lZWRQcmltU2NhbiA9IGZhbHNlOwotCQkJfQotCQl9Ci0JCWVsc2UKLQkJCUJUU2NhblBv c0ludmFsaWRhdGUoc28tPmN1cnJQb3MpOwotCX0KKwkJYnRiYXRjaC0+bW9yZUxlZnQgPSB0cnVl OworCXNvLT5uZWVkUHJpbVNjYW4gPSBmYWxzZTsKKwlzby0+c2NhbkJlaGluZCA9IGZhbHNlOwor CXNvLT5vcHBvc2l0ZURpckNoZWNrID0gZmFsc2U7CiB9CiAKIC8qCkBAIC04ODEsMTUgKzkyMSw2 IEBAIF9idF9wYXJhbGxlbF9zZWl6ZShJbmRleFNjYW5EZXNjIHNjYW4sIEJsb2NrTnVtYmVyICpu ZXh0X3NjYW5fcGFnZSwKIAkqbmV4dF9zY2FuX3BhZ2UgPSBJbnZhbGlkQmxvY2tOdW1iZXI7CiAJ Kmxhc3RfY3Vycl9wYWdlID0gSW52YWxpZEJsb2NrTnVtYmVyOwogCi0JLyoKLQkgKiBSZXNldCBz by0+Y3VyclBvcywgYW5kIGluaXRpYWxpemUgbW9yZUxlZnQvbW9yZVJpZ2h0IHN1Y2ggdGhhdCB0 aGUgbmV4dAotCSAqIGNhbGwgdG8gX2J0X3JlYWRuZXh0cGFnZSB0cmVhdHMgdGhpcyBiYWNrZW5k IHNpbWlsYXJseSB0byBhIHNlcmlhbAotCSAqIGJhY2tlbmQgdGhhdCBzdGVwcyBmcm9tICpsYXN0 X2N1cnJfcGFnZSB0byAqbmV4dF9zY2FuX3BhZ2UgKHVubGVzcyB0aGlzCi0JICogYmFja2VuZCdz IHNvLT5jdXJyUG9zIGlzIGluaXRpYWxpemVkIGJ5IF9idF9yZWFkZmlyc3RwYWdlIGJlZm9yZSB0 aGVuKS4KLQkgKi8KLQlCVFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5jdXJyUG9zKTsKLQlzby0+Y3Vy clBvcy5tb3JlTGVmdCA9IHNvLT5jdXJyUG9zLm1vcmVSaWdodCA9IHRydWU7Ci0KIAlpZiAoZmly c3QpCiAJewogCQkvKgpAQCAtMTAzOSw4ICsxMDcwLDYgQEAgX2J0X3BhcmFsbGVsX2RvbmUoSW5k ZXhTY2FuRGVzYyBzY2FuKQogCUJUUGFyYWxsZWxTY2FuRGVzYyBidHNjYW47CiAJYm9vbAkJc3Rh dHVzX2NoYW5nZWQgPSBmYWxzZTsKIAotCUFzc2VydCghQlRTY2FuUG9zSXNWYWxpZChzby0+Y3Vy clBvcykpOwotCiAJLyogRG8gbm90aGluZywgZm9yIG5vbi1wYXJhbGxlbCBzY2FucyAqLwogCWlm IChwYXJhbGxlbF9zY2FuID09IE5VTEwpCiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2VhcmNoLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVl L25idHNlYXJjaC5jCmluZGV4IGFhZTZhY2I3Zi4uOWUwYmUzZTJkIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNlYXJjaC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9uYnRyZWUvbmJ0c2VhcmNoLmMKQEAgLTIzLDUzICsyMyw0OSBAQAogI2luY2x1ZGUgInBnc3Rh dC5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJlZGljYXRlLmgiCiAjaW5jbHVkZSAidXRpbHMvbHN5 c2NhY2hlLmgiCisjaW5jbHVkZSAidXRpbHMvbWVtZGVidWcuaCIKICNpbmNsdWRlICJ1dGlscy9y ZWwuaCIKIAogCi1zdGF0aWMgaW5saW5lIHZvaWQgX2J0X2Ryb3BfbG9ja19hbmRfbWF5YmVfcGlu KFJlbGF0aW9uIHJlbCwgQlRTY2FuT3BhcXVlIHNvKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBfYnRf YmF0Y2hfdW5sb2NrKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gsCisJ CQkJCQkJCQlCdWZmZXIgYnVmKTsKIHN0YXRpYyBCdWZmZXIgX2J0X21vdmVyaWdodChSZWxhdGlv biByZWwsIFJlbGF0aW9uIGhlYXByZWwsIEJUU2Nhbkluc2VydCBrZXksCiAJCQkJCQkJQnVmZmVy IGJ1ZiwgYm9vbCBmb3J1cGRhdGUsIEJUU3RhY2sgc3RhY2ssCiAJCQkJCQkJaW50IGFjY2Vzcyk7 CiBzdGF0aWMgT2Zmc2V0TnVtYmVyIF9idF9iaW5zcmNoKFJlbGF0aW9uIHJlbCwgQlRTY2FuSW5z ZXJ0IGtleSwgQnVmZmVyIGJ1Zik7CiBzdGF0aWMgaW50CV9idF9iaW5zcmNoX3Bvc3RpbmcoQlRT Y2FuSW5zZXJ0IGtleSwgUGFnZSBwYWdlLAogCQkJCQkJCQlPZmZzZXROdW1iZXIgb2ZmbnVtKTsK LXN0YXRpYyBpbmxpbmUgdm9pZCBfYnRfcmV0dXJuaXRlbShJbmRleFNjYW5EZXNjIHNjYW4sIEJU U2Nhbk9wYXF1ZSBzbyk7Ci1zdGF0aWMgYm9vbCBfYnRfc3RlcHBhZ2UoSW5kZXhTY2FuRGVzYyBz Y2FuLCBTY2FuRGlyZWN0aW9uIGRpcik7Ci1zdGF0aWMgYm9vbCBfYnRfcmVhZGZpcnN0cGFnZShJ bmRleFNjYW5EZXNjIHNjYW4sIE9mZnNldE51bWJlciBvZmZudW0sCi0JCQkJCQkJICBTY2FuRGly ZWN0aW9uIGRpcik7Ci1zdGF0aWMgYm9vbCBfYnRfcmVhZG5leHRwYWdlKEluZGV4U2NhbkRlc2Mg c2NhbiwgQmxvY2tOdW1iZXIgYmxrbm8sCi0JCQkJCQkJIEJsb2NrTnVtYmVyIGxhc3RjdXJyYmxr bm8sIFNjYW5EaXJlY3Rpb24gZGlyLAotCQkJCQkJCSBib29sIHNlaXplZCk7CitzdGF0aWMgSW5k ZXhTY2FuQmF0Y2ggX2J0X3JlYWRmaXJzdHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNj YW5CYXRjaCBmaXJzdGJhdGNoLAorCQkJCQkJCQkJCU9mZnNldE51bWJlciBvZmZudW0sIFNjYW5E aXJlY3Rpb24gZGlyKTsKK3N0YXRpYyBJbmRleFNjYW5CYXRjaCBfYnRfcmVhZG5leHRwYWdlKElu ZGV4U2NhbkRlc2Mgc2NhbiwgQmxvY2tOdW1iZXIgYmxrbm8sCisJCQkJCQkJCQkgICBCbG9ja051 bWJlciBsYXN0Y3VycmJsa25vLAorCQkJCQkJCQkJICAgU2NhbkRpcmVjdGlvbiBkaXIsIGJvb2wg Zmlyc3RwYWdlKTsKIHN0YXRpYyBCdWZmZXIgX2J0X2xvY2tfYW5kX3ZhbGlkYXRlX2xlZnQoUmVs YXRpb24gcmVsLCBCbG9ja051bWJlciAqYmxrbm8sCiAJCQkJCQkJCQkJIEJsb2NrTnVtYmVyIGxh c3RjdXJyYmxrbm8pOwotc3RhdGljIGJvb2wgX2J0X2VuZHBvaW50KEluZGV4U2NhbkRlc2Mgc2Nh biwgU2NhbkRpcmVjdGlvbiBkaXIpOworc3RhdGljIEluZGV4U2NhbkJhdGNoIF9idF9lbmRwb2lu dChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLAorCQkJCQkJCQkgICBJbmRl eFNjYW5CYXRjaCBmaXJzdGJhdGNoKTsKIAogCiAvKgotICoJX2J0X2Ryb3BfbG9ja19hbmRfbWF5 YmVfcGluKCkKKyAqIF9idF9iYXRjaF91bmxvY2soKSAtLSBuYnRyZWUgd3JhcHBlciBmb3IgaW5k ZXhhbV91dGlsX3VubG9ja19iYXRjaC4KICAqCi0gKiBVbmxvY2sgc28tPmN1cnJQb3MuYnVmLiAg SWYgc2NhbiBpcyBzby0+ZHJvcFBpbiwgZHJvcCB0aGUgcGluLCB0b28uCi0gKiBEcm9wcGluZyB0 aGUgcGluIHByZXZlbnRzIFZBQ1VVTSBmcm9tIGJsb2NraW5nIG9uIGFjcXVpcmluZyBhIGNsZWFu dXAgbG9jay4KKyAqIFBlcmZvcm1zIHRoZSBzYW1lIFZhbGdyaW5kIGluc3RydW1lbnRhdGlvbiBh cyBfYnRfdW5sb2NrYnVmLgogICovCiBzdGF0aWMgaW5saW5lIHZvaWQKLV9idF9kcm9wX2xvY2tf YW5kX21heWJlX3BpbihSZWxhdGlvbiByZWwsIEJUU2Nhbk9wYXF1ZSBzbykKK19idF9iYXRjaF91 bmxvY2soSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCwgQnVmZmVyIGJ1 ZikKIHsKLQlpZiAoIXNvLT5kcm9wUGluKQotCXsKLQkJLyogSnVzdCBkcm9wIHRoZSBsb2NrIChu b3QgdGhlIHBpbikgKi8KLQkJX2J0X3VubG9ja2J1ZihyZWwsIHNvLT5jdXJyUG9zLmJ1Zik7Ci0J CXJldHVybjsKLQl9CisjaWYgZGVmaW5lZChVU0VfVkFMR1JJTkQpCisJUGFnZQkJcGFnZSA9IEJ1 ZmZlckdldFBhZ2UoYnVmKTsKIAotCS8qCi0JICogRHJvcCBib3RoIHRoZSBsb2NrIGFuZCB0aGUg cGluLgotCSAqCi0JICogSGF2ZSB0byBzZXQgc28tPmN1cnJQb3MubHNuIHNvIHRoYXQgX2J0X2tp bGxpdGVtcyBoYXMgYSB3YXkgdG8gZGV0ZWN0Ci0JICogd2hlbiBjb25jdXJyZW50IGhlYXAgVElE IHJlY3ljbGluZyBieSBWQUNVVU0gbWlnaHQgaGF2ZSB0YWtlbiBwbGFjZS4KLQkgKi8KLQlzby0+ Y3VyclBvcy5sc24gPSBCdWZmZXJHZXRMU05BdG9taWMoc28tPmN1cnJQb3MuYnVmKTsKLQlfYnRf cmVsYnVmKHJlbCwgc28tPmN1cnJQb3MuYnVmKTsKLQlzby0+Y3VyclBvcy5idWYgPSBJbnZhbGlk QnVmZmVyOworCVZBTEdSSU5EX0NIRUNLX01FTV9JU19ERUZJTkVEKHBhZ2UsIEJMQ0tTWik7Cisj ZW5kaWYKKworCWluZGV4YW1fdXRpbF91bmxvY2tfYmF0Y2goc2NhbiwgYmF0Y2gsIGJ1Zik7CisK KyNpZiBkZWZpbmVkKFVTRV9WQUxHUklORCkKKwlpZiAoIVJlbGF0aW9uVXNlc0xvY2FsQnVmZmVy cyhzY2FuLT5pbmRleFJlbGF0aW9uKSkKKwkJVkFMR1JJTkRfTUFLRV9NRU1fTk9BQ0NFU1MocGFn ZSwgQkxDS1NaKTsKKyNlbmRpZgogfQogCiAvKgpAQCAtODYwLDI2ICs4NTYsMjUgQEAgX2J0X2Nv bXBhcmUoUmVsYXRpb24gcmVsLAogfQogCiAvKgotICoJX2J0X2ZpcnN0KCkgLS0gRmluZCB0aGUg Zmlyc3QgaXRlbSBpbiBhIHNjYW4uCisgKglfYnRfZmlyc3QoKSAtLSBGaW5kIHRoZSBmaXJzdCBi YXRjaCBpbiBhIHNjYW4uCiAgKgogICoJCVdlIG5lZWQgdG8gYmUgY2xldmVyIGFib3V0IHRoZSBk aXJlY3Rpb24gb2Ygc2NhbiwgdGhlIHNlYXJjaAotICoJCWNvbmRpdGlvbnMsIGFuZCB0aGUgdHJl ZSBvcmRlcmluZy4gIFdlIGZpbmQgdGhlIGZpcnN0IGl0ZW0gKG9yLAotICoJCWlmIGJhY2t3YXJk cyBzY2FuLCB0aGUgbGFzdCBpdGVtKSBpbiB0aGUgdHJlZSB0aGF0IHNhdGlzZmllcyB0aGUKLSAq CQlxdWFsaWZpY2F0aW9ucyBpbiB0aGUgc2NhbiBrZXkuICBPbiBzdWNjZXNzIGV4aXQsIGRhdGEg YWJvdXQgdGhlCi0gKgkJbWF0Y2hpbmcgdHVwbGUocykgb24gdGhlIHBhZ2UgaGFzIGJlZW4gbG9h ZGVkIGludG8gc28tPmN1cnJQb3MuICBXZSdsbAotICoJCWRyb3AgYWxsIGxvY2tzIGFuZCBob2xk IG9udG8gYSBwaW4gb24gcGFnZSdzIGJ1ZmZlciwgZXhjZXB0IGR1cmluZwotICoJCXNvLT5kcm9w UGluIHNjYW5zLCB3aGVuIHdlIGRyb3AgYm90aCB0aGUgbG9jayBhbmQgdGhlIHBpbi4KLSAqCQlf YnRfcmV0dXJuaXRlbSBzZXRzIHRoZSBuZXh0IGl0ZW0gdG8gcmV0dXJuIHRvIHNjYW4gb24gc3Vj Y2VzcyBleGl0LgorICoJCWNvbmRpdGlvbnMsIGFuZCB0aGUgdHJlZSBvcmRlcmluZy4gIFdlIGZp bmQgdGhlIGZpcnN0IGxlYWYgcGFnZSAob3IKKyAqCQl0aGUgbGFzdCBsZWFmIHBhZ2UsIHdoZW4g c2Nhbm5pbmcgYmFja3dhcmRzKSBpbiB0aGUgdHJlZSB3aXRoIGF0IGxlYXN0CisgKgkJb25lIHR1 cGxlIHRoYXQgc2F0aXNmaWVzIHRoZSBxdWFsaWZpY2F0aW9ucyBpbiB0aGUgc2NhbiBrZXkuICBP bgorICoJCXN1Y2Nlc3MgZXhpdCwgd2UgcmV0dXJuIGEgbmV3IGJhdGNoIHdpdGggdGhhdCBwYWdl J3MgbWF0Y2hpbmcgaXRlbXMuCiAgKgotICogSWYgdGhlcmUgYXJlIG5vIG1hdGNoaW5nIGl0ZW1z IGluIHRoZSBpbmRleCwgd2UgcmV0dXJuIGZhbHNlLCB3aXRoIG5vCi0gKiBwaW5zIG9yIGxvY2tz IGhlbGQuICBzby0+Y3VyclBvcyB3aWxsIHJlbWFpbiBpbnZhbGlkLgorICogSWYgdGhlcmUgYXJl IG5vIG1hdGNoaW5nIGl0ZW1zIGluIHRoZSBpbmRleCAoaW4gdGhlIGdpdmVuIHNjYW4gZGlyZWN0 aW9uKSwKKyAqIHdlIGp1c3QgcmV0dXJuIE5VTEwuICBOb3RlIHRoYXQgcmV0dXJuaW5nIE5VTEwg ZG9lc24ndCBuZWNlc3NhcmlseSBtZWFuIHRoZQorICogZW5kIG9mIHRoZSB0b3AtbGV2ZWwgc2Nh bjsgY2FsbGVyIHNob3VsZCBjaGVjayBzby0+bmVlZFByaW1TY2FuIHRvCisgKiBkZXRlcm1pbmUg aWYgYW5vdGhlciBwcmltaXRpdmUgaW5kZXggc2NhbiBpcyByZXF1aXJlZC4KICAqCiAgKiBOb3Rl IHRoYXQgc2Nhbi0+a2V5RGF0YVtdLCBhbmQgdGhlIHNvLT5rZXlEYXRhW10gc2NhbmtleSBidWls dCBmcm9tIGl0LAogICogYXJlIGJvdGggc2VhcmNoLXR5cGUgc2NhbmtleXMgKHNlZSBuYnRyZWUv UkVBRE1FIGZvciBtb3JlIGFib3V0IHRoaXMpLgogICogV2l0aGluIHRoaXMgcm91dGluZSwgd2Ug YnVpbGQgYSB0ZW1wb3JhcnkgaW5zZXJ0aW9uLXR5cGUgc2NhbmtleSB0byB1c2UKICAqIGluIGxv Y2F0aW5nIHRoZSBzY2FuIHN0YXJ0IHBvc2l0aW9uLgogICovCi1ib29sCitJbmRleFNjYW5CYXRj aAogX2J0X2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiB7CiAJ UmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKQEAgLTg5Miw4ICs4ODcsMTIgQEAg X2J0X2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJU3RyYXRl Z3lOdW1iZXIgc3RyYXRfdG90YWwgPSBJbnZhbGlkU3RyYXRlZ3k7CiAJQmxvY2tOdW1iZXIgYmxr bm8gPSBJbnZhbGlkQmxvY2tOdW1iZXIsCiAJCQkJbGFzdGN1cnJibGtubzsKKwlJbmRleFNjYW5C YXRjaCBmaXJzdGJhdGNoOworCUJUQmF0Y2hEYXRhICpidGZpcnN0YmF0Y2g7CiAKLQlBc3NlcnQo IUJUU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKTsKKwkvKiBBbGxvY2F0ZSBzcGFjZSBmb3Ig Zmlyc3QgYmF0Y2ggKi8KKwlmaXJzdGJhdGNoID0gaW5kZXhhbV91dGlsX2FsbG9jX2JhdGNoKHNj YW4pOworCWJ0Zmlyc3RiYXRjaCA9IEJUQmF0Y2hHZXREYXRhKHNjYW4sIGZpcnN0YmF0Y2gpOwog CiAJLyoKIAkgKiBFeGFtaW5lIHRoZSBzY2FuIGtleXMgYW5kIGVsaW1pbmF0ZSBhbnkgcmVkdW5k YW50IGtleXM7IGFsc28gbWFyayB0aGUKQEAgLTkwOSw3ICs5MDgsOCBAQCBfYnRfZmlyc3QoSW5k ZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAl7CiAJCUFzc2VydCghc28tPm5l ZWRQcmltU2Nhbik7CiAJCV9idF9wYXJhbGxlbF9kb25lKHNjYW4pOwotCQlyZXR1cm4gZmFsc2U7 CisJCWluZGV4YW1fdXRpbF9yZWxlYXNlX2JhdGNoKHNjYW4sIGZpcnN0YmF0Y2gpOworCQlyZXR1 cm4gTlVMTDsKIAl9CiAKIAkvKgpAQCAtOTE4LDcgKzkxOCwxMCBAQCBfYnRfZmlyc3QoSW5kZXhT Y2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAkgKi8KIAlpZiAoc2Nhbi0+cGFyYWxs ZWxfc2NhbiAhPSBOVUxMICYmCiAJCSFfYnRfcGFyYWxsZWxfc2VpemUoc2NhbiwgJmJsa25vLCAm bGFzdGN1cnJibGtubywgdHJ1ZSkpCi0JCXJldHVybiBmYWxzZTsKKwl7CisJCWluZGV4YW1fdXRp bF9yZWxlYXNlX2JhdGNoKHNjYW4sIGZpcnN0YmF0Y2gpOworCQlyZXR1cm4gTlVMTDsJCQkvKiBk ZWZpbml0ZWx5IGRvbmUgKHNvLT5uZWVkUHJpbVNjYW4gaXMgdW5zZXQpICovCisJfQogCiAJLyoK IAkgKiBJbml0aWFsaXplIHRoZSBzY2FuJ3MgYXJyYXlzIChpZiBhbnkpIGZvciB0aGUgY3VycmVu dCBzY2FuIGRpcmVjdGlvbgpAQCAtOTM4LDExICs5NDEsOSBAQCBfYnRfZmlyc3QoSW5kZXhTY2Fu RGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAkJQXNzZXJ0KCFzby0+bmVlZFByaW1TY2Fu KTsKIAkJQXNzZXJ0KGJsa25vICE9IFBfTk9ORSk7CiAKLQkJaWYgKCFfYnRfcmVhZG5leHRwYWdl KHNjYW4sIGJsa25vLCBsYXN0Y3VycmJsa25vLCBkaXIsIHRydWUpKQotCQkJcmV0dXJuIGZhbHNl OworCQlpbmRleGFtX3V0aWxfcmVsZWFzZV9iYXRjaChzY2FuLCBmaXJzdGJhdGNoKTsKIAotCQlf YnRfcmV0dXJuaXRlbShzY2FuLCBzbyk7Ci0JCXJldHVybiB0cnVlOworCQlyZXR1cm4gX2J0X3Jl YWRuZXh0cGFnZShzY2FuLCBibGtubywgbGFzdGN1cnJibGtubywgZGlyLCB0cnVlKTsKIAl9CiAK IAkvKgpAQCAtMTI0Miw3ICsxMjQzLDcgQEAgX2J0X2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2Nhbiwg U2NhbkRpcmVjdGlvbiBkaXIpCiAJICogTm90ZTogY2FsbHMgX2J0X3JlYWRmaXJzdHBhZ2UgZm9y IHVzLCB3aGljaCByZWxlYXNlcyB0aGUgcGFyYWxsZWwgc2Nhbi4KIAkgKi8KIAlpZiAoa2V5c3og PT0gMCkKLQkJcmV0dXJuIF9idF9lbmRwb2ludChzY2FuLCBkaXIpOworCQlyZXR1cm4gX2J0X2Vu ZHBvaW50KHNjYW4sIGRpciwgZmlyc3RiYXRjaCk7CiAKIAkvKgogCSAqIFdlIHdhbnQgdG8gc3Rh cnQgdGhlIHNjYW4gc29tZXdoZXJlIHdpdGhpbiB0aGUgaW5kZXguICBTZXQgdXAgYW4KQEAgLTE1 MDIsNyArMTUwMyw3IEBAIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rp b24gZGlyKQogCQlkZWZhdWx0OgogCQkJLyogY2FuJ3QgZ2V0IGhlcmUsIGJ1dCBrZWVwIGNvbXBp bGVyIHF1aWV0ICovCiAJCQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIHN0cmF0X3RvdGFsOiAl ZCIsIChpbnQpIHN0cmF0X3RvdGFsKTsKLQkJCXJldHVybiBmYWxzZTsKKwkJCXJldHVybiBOVUxM OwogCX0KIAogCS8qCkBAIC0xNTEwLDkgKzE1MTEsOSBAQCBfYnRfZmlyc3QoSW5kZXhTY2FuRGVz YyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAkgKiBwb3NpdGlvbiBvdXJzZWx2ZXMgb24gdGhl IHRhcmdldCBsZWFmIHBhZ2UuCiAJICovCiAJQXNzZXJ0KFNjYW5EaXJlY3Rpb25Jc0JhY2t3YXJk KGRpcikgPT0gaW5za2V5LmJhY2t3YXJkKTsKLQlfYnRfc2VhcmNoKHJlbCwgTlVMTCwgJmluc2tl eSwgJnNvLT5jdXJyUG9zLmJ1ZiwgQlRfUkVBRCwgZmFsc2UpOworCV9idF9zZWFyY2gocmVsLCBO VUxMLCAmaW5za2V5LCAmYnRmaXJzdGJhdGNoLT5idWYsIEJUX1JFQUQsIGZhbHNlKTsKIAotCWlm ICghQnVmZmVySXNWYWxpZChzby0+Y3VyclBvcy5idWYpKQorCWlmICh1bmxpa2VseSghQnVmZmVy SXNWYWxpZChidGZpcnN0YmF0Y2gtPmJ1ZikpKQogCXsKIAkJQXNzZXJ0KCFzby0+bmVlZFByaW1T Y2FuKTsKIApAQCAtMTUyOCwyMiArMTUyOSwyMyBAQCBfYnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBz Y2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAkJaWYgKElzb2xhdGlvbklzU2VyaWFsaXphYmxlKCkp CiAJCXsKIAkJCVByZWRpY2F0ZUxvY2tSZWxhdGlvbihyZWwsIHNjYW4tPnhzX3NuYXBzaG90KTsK LQkJCV9idF9zZWFyY2gocmVsLCBOVUxMLCAmaW5za2V5LCAmc28tPmN1cnJQb3MuYnVmLCBCVF9S RUFELCBmYWxzZSk7CisJCQlfYnRfc2VhcmNoKHJlbCwgTlVMTCwgJmluc2tleSwgJmJ0Zmlyc3Ri YXRjaC0+YnVmLCBCVF9SRUFELCBmYWxzZSk7CiAJCX0KIAotCQlpZiAoIUJ1ZmZlcklzVmFsaWQo c28tPmN1cnJQb3MuYnVmKSkKKwkJaWYgKCFCdWZmZXJJc1ZhbGlkKGJ0Zmlyc3RiYXRjaC0+YnVm KSkKIAkJewogCQkJX2J0X3BhcmFsbGVsX2RvbmUoc2Nhbik7Ci0JCQlyZXR1cm4gZmFsc2U7CisJ CQlpbmRleGFtX3V0aWxfcmVsZWFzZV9iYXRjaChzY2FuLCBmaXJzdGJhdGNoKTsKKwkJCXJldHVy biBOVUxMOwogCQl9CiAJfQogCiAJLyogcG9zaXRpb24gdG8gdGhlIHByZWNpc2UgaXRlbSBvbiB0 aGUgcGFnZSAqLwotCW9mZm51bSA9IF9idF9iaW5zcmNoKHJlbCwgJmluc2tleSwgc28tPmN1cnJQ b3MuYnVmKTsKKwlvZmZudW0gPSBfYnRfYmluc3JjaChyZWwsICZpbnNrZXksIGJ0Zmlyc3RiYXRj aC0+YnVmKTsKIAogCS8qCiAJICogTm93IGxvYWQgZGF0YSBmcm9tIHRoZSBmaXJzdCBwYWdlIG9m IHRoZSBzY2FuICh1c3VhbGx5IHRoZSBwYWdlCi0JICogY3VycmVudGx5IGluIHNvLT5jdXJyUG9z LmJ1ZikuCisJICogY3VycmVudGx5IGluIGZpcnN0YmF0Y2guYnVmKS4KIAkgKgogCSAqIElmIGlu c2tleS5uZXh0a2V5ID0gZmFsc2UgYW5kIGluc2tleS5iYWNrd2FyZCA9IGZhbHNlLCBvZmZudW0g aXMKIAkgKiBwb3NpdGlvbmVkIGF0IHRoZSBmaXJzdCBub24tcGl2b3QgdHVwbGUgPj0gaW5za2V5 LnNjYW5rZXlzLgpAQCAtMTU2MSwxNjQgKzE1NjMsNzIgQEAgX2J0X2ZpcnN0KEluZGV4U2NhbkRl c2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJICogZm9yIHRoZSBwYWdlLiAgRm9yIGV4YW1w bGUsIHdoZW4gaW5za2V5IGlzIGJvdGggPCB0aGUgbGVhZiBwYWdlJ3MgaGlnaAogCSAqIGtleSBh bmQgPiBhbGwgb2YgaXRzIG5vbi1waXZvdCB0dXBsZXMsIG9mZm51bSB3aWxsIGJlICJtYXhvZmYg KyAxIi4KIAkgKi8KLQlpZiAoIV9idF9yZWFkZmlyc3RwYWdlKHNjYW4sIG9mZm51bSwgZGlyKSkK LQkJcmV0dXJuIGZhbHNlOwotCi0JX2J0X3JldHVybml0ZW0oc2Nhbiwgc28pOwotCXJldHVybiB0 cnVlOworCXJldHVybiBfYnRfcmVhZGZpcnN0cGFnZShzY2FuLCBmaXJzdGJhdGNoLCBvZmZudW0s IGRpcik7CiB9CiAKIC8qCi0gKglfYnRfbmV4dCgpIC0tIEdldCB0aGUgbmV4dCBpdGVtIGluIGEg c2Nhbi4KKyAqCV9idF9uZXh0KCkgLS0gR2V0IHRoZSBuZXh0IGJhdGNoIGluIGEgc2Nhbi4KICAq Ci0gKgkJT24gZW50cnksIHNvLT5jdXJyUG9zIGRlc2NyaWJlcyB0aGUgY3VycmVudCBwYWdlLCB3 aGljaCBtYXkgYmUgcGlubmVkCi0gKgkJYnV0IGlzIG5vdCBsb2NrZWQsIGFuZCBzby0+Y3VyclBv cy5pdGVtSW5kZXggaWRlbnRpZmllcyB3aGljaCBpdGVtIHdhcwotICoJCXByZXZpb3VzbHkgcmV0 dXJuZWQuCisgKgkJT24gZW50cnksIHByaW9yYmF0Y2ggZGVzY3JpYmVzIHRoZSBiYXRjaCB0aGF0 IHdhcyBsYXN0IHJldHVybmVkIGJ5CisgKgkJYnRnZXRiYXRjaC4gIFdlJ2xsIHVzZSB0aGUgcHJp b3IgYmF0Y2gncyBwb3NpdGlvbmluZyBpbmZvcm1hdGlvbiB0bworICoJCWRlY2lkZSB3aGljaCBs ZWFmIHBhZ2UgdG8gcmVhZCBuZXh0LgogICoKLSAqCQlPbiBzdWNjZXNzIGV4aXQsIHNvLT5jdXJy UG9zIGlzIHVwZGF0ZWQgYXMgbmVlZGVkLCBhbmQgX2J0X3JldHVybml0ZW0KLSAqCQlzZXRzIHRo ZSBuZXh0IGl0ZW0gdG8gcmV0dXJuIHRvIHRoZSBzY2FuLiAgc28tPmN1cnJQb3MgcmVtYWlucyB2 YWxpZC4KLSAqCi0gKgkJT24gZmFpbHVyZSBleGl0IChubyBtb3JlIHR1cGxlcyksIHdlIGludmFs aWRhdGUgc28tPmN1cnJQb3MuICBJdCdsbAotICoJCXN0aWxsIGJlIHBvc3NpYmxlIGZvciB0aGUg c2NhbiB0byByZXR1cm4gdHVwbGVzIGJ5IGNoYW5naW5nIGRpcmVjdGlvbiwKLSAqCQl0aG91Z2gg d2UnbGwgbmVlZCB0byBjYWxsIF9idF9maXJzdCBhbmV3IGluIHRoYXQgb3RoZXIgZGlyZWN0aW9u LgorICoJCU9uIHN1Y2Nlc3MgZXhpdCwgcmV0dXJucyB0aGUgbmV4dCBiYXRjaC4gIFRoZXJlIG11 c3QgYmUgYXQgbGVhc3Qgb25lCisgKgkJbWF0Y2hpbmcgdHVwbGUgb24gYW55IHJldHVybmVkIGJh dGNoIChlbHNlIHdlJ2QganVzdCByZXR1cm4gTlVMTCkuCisgKgkJTm90ZSB0aGF0IHJldHVybmlu ZyBOVUxMIGRvZXNuJ3QgbmVjZXNzYXJpbHkgbWVhbiB0aGUgZW5kIG9mIHRoZQorICoJCXRvcC1s ZXZlbCBzY2FuOyBjYWxsZXIgc2hvdWxkIGNoZWNrIHNvLT5uZWVkUHJpbVNjYW4gdG8gZGV0ZXJt aW5lCisgKgkJaWYgYW5vdGhlciBwcmltaXRpdmUgaW5kZXggc2NhbiBpcyByZXF1aXJlZC4KICAq LwotYm9vbAotX2J0X25leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikK K0luZGV4U2NhbkJhdGNoCitfYnRfbmV4dChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rp b24gZGlyLCBJbmRleFNjYW5CYXRjaCBwcmlvcmJhdGNoKQogewotCUJUU2Nhbk9wYXF1ZSBzbyA9 IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKLQotCUFzc2VydChCVFNjYW5Qb3NJc1ZhbGlk KHNvLT5jdXJyUG9zKSk7Ci0KLQkvKgotCSAqIEFkdmFuY2UgdG8gbmV4dCB0dXBsZSBvbiBjdXJy ZW50IHBhZ2U7IG9yIGlmIHRoZXJlJ3Mgbm8gbW9yZSwgdHJ5IHRvCi0JICogc3RlcCB0byB0aGUg bmV4dCBwYWdlIHdpdGggZGF0YS4KLQkgKi8KLQlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChk aXIpKQotCXsKLQkJaWYgKCsrc28tPmN1cnJQb3MuaXRlbUluZGV4ID4gc28tPmN1cnJQb3MubGFz dEl0ZW0pCi0JCXsKLQkJCWlmICghX2J0X3N0ZXBwYWdlKHNjYW4sIGRpcikpCi0JCQkJcmV0dXJu IGZhbHNlOwotCQl9Ci0JfQotCWVsc2UKLQl7Ci0JCWlmICgtLXNvLT5jdXJyUG9zLml0ZW1JbmRl eCA8IHNvLT5jdXJyUG9zLmZpcnN0SXRlbSkKLQkJewotCQkJaWYgKCFfYnRfc3RlcHBhZ2Uoc2Nh biwgZGlyKSkKLQkJCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQl9Ci0KLQlfYnRfcmV0dXJuaXRlbShz Y2FuLCBzbyk7Ci0JcmV0dXJuIHRydWU7Ci19Ci0KLS8qCi0gKiBSZXR1cm4gdGhlIGluZGV4IGl0 ZW0gZnJvbSBzby0+Y3VyclBvcy5pdGVtc1tzby0+Y3VyclBvcy5pdGVtSW5kZXhdIHRvIHRoZQot ICogaW5kZXggc2NhbiBieSBzZXR0aW5nIHRoZSByZWxldmFudCBmaWVsZHMgaW4gY2FsbGVyJ3Mg aW5kZXggc2NhbiBkZXNjcmlwdG9yCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZAotX2J0X3JldHVy bml0ZW0oSW5kZXhTY2FuRGVzYyBzY2FuLCBCVFNjYW5PcGFxdWUgc28pCi17Ci0JQlRTY2FuUG9z SXRlbSAqY3Vyckl0ZW0gPSAmc28tPmN1cnJQb3MuaXRlbXNbc28tPmN1cnJQb3MuaXRlbUluZGV4 XTsKLQotCS8qIE1vc3QgcmVjZW50IF9idF9yZWFkcGFnZSBtdXN0IGhhdmUgc3VjY2VlZGVkICov Ci0JQXNzZXJ0KEJUU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKTsKLQlBc3NlcnQoc28tPmN1 cnJQb3MuaXRlbUluZGV4ID49IHNvLT5jdXJyUG9zLmZpcnN0SXRlbSk7Ci0JQXNzZXJ0KHNvLT5j dXJyUG9zLml0ZW1JbmRleCA8PSBzby0+Y3VyclBvcy5sYXN0SXRlbSk7Ci0KLQkvKiBSZXR1cm4g bmV4dCBpdGVtLCBwZXIgYW1nZXR0dXBsZSBjb250cmFjdCAqLwotCXNjYW4tPnhzX2hlYXB0aWQg PSBjdXJySXRlbS0+aGVhcFRpZDsKLQlpZiAoc28tPmN1cnJUdXBsZXMpCi0JCXNjYW4tPnhzX2l0 dXAgPSAoSW5kZXhUdXBsZSkgKHNvLT5jdXJyVHVwbGVzICsgY3Vyckl0ZW0tPnR1cGxlT2Zmc2V0 KTsKLX0KLQotLyoKLSAqCV9idF9zdGVwcGFnZSgpIC0tIFN0ZXAgdG8gbmV4dCBwYWdlIGNvbnRh aW5pbmcgdmFsaWQgZGF0YSBmb3Igc2NhbgotICoKLSAqIFdyYXBwZXIgb24gX2J0X3JlYWRuZXh0 cGFnZSB0aGF0IHBlcmZvcm1zIGZpbmFsIHN0ZXBzIGZvciB0aGUgY3VycmVudCBwYWdlLgotICoK LSAqIE9uIGVudHJ5LCBzby0+Y3VyclBvcyBtdXN0IGJlIHZhbGlkLiAgSXRzIGJ1ZmZlciB3aWxs IGJlIHBpbm5lZCwgdGhvdWdoCi0gKiBuZXZlciBsb2NrZWQuIChBY3R1YWxseSwgd2hlbiBzby0+ ZHJvcFBpbiB0aGVyZSB3b24ndCBldmVuIGJlIGEgcGluIGhlbGQsCi0gKiB0aG91Z2ggc28tPmN1 cnJQb3MuY3VyclBhZ2UgbXVzdCBzdGlsbCBiZSBzZXQgdG8gYSB2YWxpZCBibG9jayBudW1iZXIu KQotICovCi1zdGF0aWMgYm9vbAotX2J0X3N0ZXBwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2Nh bkRpcmVjdGlvbiBkaXIpCi17Ci0JQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nh bi0+b3BhcXVlOworCUJUQmF0Y2hEYXRhICpidHByaW9yYmF0Y2ggPSBCVEJhdGNoR2V0RGF0YShz Y2FuLCBwcmlvcmJhdGNoKTsKIAlCbG9ja051bWJlciBibGtubywKIAkJCQlsYXN0Y3VycmJsa25v OwotCi0JQXNzZXJ0KEJUU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKTsKLQotCS8qIEJlZm9y ZSBsZWF2aW5nIGN1cnJlbnQgcGFnZSwgZGVhbCB3aXRoIGFueSBraWxsZWQgaXRlbXMgKi8KLQlp ZiAoc28tPm51bUtpbGxlZCA+IDApCi0JCV9idF9raWxsaXRlbXMoc2Nhbik7CisJYm9vbAkJbW9y ZUluRGlyOwogCiAJLyoKLQkgKiBCZWZvcmUgd2UgbW9kaWZ5IGN1cnJQb3MsIG1ha2UgYSBjb3B5 IG9mIHRoZSBwYWdlIGRhdGEgaWYgdGhlcmUgd2FzIGEKLQkgKiBtYXJrIHBvc2l0aW9uIHRoYXQg bmVlZHMgaXQuCisJICogVGhlIGNvcmUgY29kZSBtdXN0IGRlYWwgd2l0aCBjcm9zcy1iYXRjaCBz Y2FuIGRpcmVjdGlvbiBjaGFuZ2VzIGZvciB1cy4KKwkgKiBBIGJhdGNoIG1hbmFnZW1lbnQgcm91 dGluZSB0aGF0IGZsaXBzIHByaW9yYmF0Y2gncyBzY2FuIGRpcmVjdGlvbiAoYW5kCisJICogY2Fs bHMgYnRwb3NyZXNldCB0byBkZWFsIHdpdGggdGhlIHNjYW4ncyBhcnJheSBrZXlzKSBpcyB1c2Vk IGZvciB0aGlzLgogCSAqLwotCWlmIChzby0+bWFya0l0ZW1JbmRleCA+PSAwKQotCXsKLQkJLyog YnVtcCBwaW4gb24gY3VycmVudCBidWZmZXIgZm9yIGFzc2lnbm1lbnQgdG8gbWFyayBidWZmZXIg Ki8KLQkJaWYgKEJUU2NhblBvc0lzUGlubmVkKHNvLT5jdXJyUG9zKSkKLQkJCUluY3JCdWZmZXJS ZWZDb3VudChzby0+Y3VyclBvcy5idWYpOwotCQltZW1jcHkoJnNvLT5tYXJrUG9zLCAmc28tPmN1 cnJQb3MsCi0JCQkgICBvZmZzZXRvZihCVFNjYW5Qb3NEYXRhLCBpdGVtc1sxXSkgKwotCQkJICAg c28tPmN1cnJQb3MubGFzdEl0ZW0gKiBzaXplb2YoQlRTY2FuUG9zSXRlbSkpOwotCQlpZiAoc28t Pm1hcmtUdXBsZXMpCi0JCQltZW1jcHkoc28tPm1hcmtUdXBsZXMsIHNvLT5jdXJyVHVwbGVzLAot CQkJCSAgIHNvLT5jdXJyUG9zLm5leHRUdXBsZU9mZnNldCk7Ci0JCXNvLT5tYXJrUG9zLml0ZW1J bmRleCA9IHNvLT5tYXJrSXRlbUluZGV4OwotCQlzby0+bWFya0l0ZW1JbmRleCA9IC0xOwotCi0J CS8qCi0JCSAqIElmIHdlJ3JlIGp1c3QgYWJvdXQgdG8gc3RhcnQgdGhlIG5leHQgcHJpbWl0aXZl IGluZGV4IHNjYW4KLQkJICogKHBvc3NpYmxlIHdpdGggYSBzY2FuIHRoYXQgaGFzIGFycmF5cyBr ZXlzLCBhbmQgbmVlZHMgdG8gc2tpcCB0bwotCQkgKiBjb250aW51ZSBpbiB0aGUgY3VycmVudCBz Y2FuIGRpcmVjdGlvbiksIG1vcmVMZWZ0L21vcmVSaWdodCBvbmx5Ci0JCSAqIGluZGljYXRlIHRo ZSBlbmQgb2YgdGhlIGN1cnJlbnQgcHJpbWl0aXZlIGluZGV4IHNjYW4uICBUaGV5IG11c3QKLQkJ ICogbmV2ZXIgYmUgdGFrZW4gdG8gaW5kaWNhdGUgdGhhdCB0aGUgdG9wLWxldmVsIGluZGV4IHNj YW4gaGFzIGVuZGVkCi0JCSAqICh0aGF0IHdvdWxkIGJlIHdyb25nKS4KLQkJICoKLQkJICogV2Ug Y291bGQgaGFuZGxlIHRoaXMgY2FzZSBieSB0cmVhdGluZyB0aGUgY3VycmVudCBhcnJheSBrZXlz IGFzCi0JCSAqIG1hcmtQb3Mgc3RhdGUuICBCdXQgZGVwZW5kaW5nIG9uIHRoZSBjdXJyZW50IGFy cmF5IHN0YXRlIGxpa2UgdGhpcwotCQkgKiB3b3VsZCBhZGQgY29tcGxleGl0eS4gIEluc3RlYWQs IHdlIGp1c3QgdW5zZXQgbWFya1BvcydzIGNvcHkgb2YKLQkJICogbW9yZVJpZ2h0IG9yIG1vcmVM ZWZ0ICh3aGljaGV2ZXIgbWlnaHQgYmUgYWZmZWN0ZWQpLCB3aGlsZSBtYWtpbmcKLQkJICogYnRy ZXN0cnBvcyByZXNldCB0aGUgc2NhbidzIGFycmF5cyB0byB0aGVpciBpbml0aWFsIHNjYW4gcG9z aXRpb25zLgotCQkgKiBJbiBlZmZlY3QsIGJ0cmVzdHJwb3MgbGVhdmVzIGFkdmFuY2luZyB0aGUg YXJyYXlzIHVwIHRvIHRoZSBmaXJzdAotCQkgKiBfYnRfcmVhZHBhZ2UgY2FsbCAodGhhdCB0YWtl cyBwbGFjZSBhZnRlciBpdCBoYXMgcmVzdG9yZWQgbWFya1BvcykuCi0JCSAqLwotCQlpZiAoc28t Pm5lZWRQcmltU2NhbikKLQkJewotCQkJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoc28tPmN1 cnJQb3MuZGlyKSkKLQkJCQlzby0+bWFya1Bvcy5tb3JlUmlnaHQgPSB0cnVlOwotCQkJZWxzZQot CQkJCXNvLT5tYXJrUG9zLm1vcmVMZWZ0ID0gdHJ1ZTsKLQkJfQotCi0JCS8qIG1hcmsvcmVzdG9y ZSBub3Qgc3VwcG9ydGVkIGJ5IHBhcmFsbGVsIHNjYW5zICovCi0JCUFzc2VydCghc2Nhbi0+cGFy YWxsZWxfc2Nhbik7Ci0JfQotCi0JQlRTY2FuUG9zVW5waW5JZlBpbm5lZChzby0+Y3VyclBvcyk7 CisJQXNzZXJ0KHByaW9yYmF0Y2gtPmRpciA9PSBkaXIpOwogCiAJLyogV2FsayB0byB0aGUgbmV4 dCBwYWdlIHdpdGggZGF0YSAqLwogCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCi0J CWJsa25vID0gc28tPmN1cnJQb3MubmV4dFBhZ2U7CisJCWJsa25vID0gYnRwcmlvcmJhdGNoLT5u ZXh0UGFnZTsKIAllbHNlCi0JCWJsa25vID0gc28tPmN1cnJQb3MucHJldlBhZ2U7Ci0JbGFzdGN1 cnJibGtubyA9IHNvLT5jdXJyUG9zLmN1cnJQYWdlOworCQlibGtubyA9IGJ0cHJpb3JiYXRjaC0+ cHJldlBhZ2U7CisJbGFzdGN1cnJibGtubyA9IGJ0cHJpb3JiYXRjaC0+Y3VyclBhZ2U7CisJbW9y ZUluRGlyID0gU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpID8KKwkJYnRwcmlvcmJhdGNoLT5t b3JlUmlnaHQgOiBidHByaW9yYmF0Y2gtPm1vcmVMZWZ0OwogCiAJLyoKLQkgKiBDYW5jZWwgcHJp bWl0aXZlIGluZGV4IHNjYW5zIHRoYXQgd2VyZSBzY2hlZHVsZWQgd2hlbiB0aGUgY2FsbCB0bwot CSAqIF9idF9yZWFkcGFnZSBmb3IgY3VyclBvcyBoYXBwZW5lZCB0byB1c2UgdGhlIG9wcG9zaXRl IGRpcmVjdGlvbiB0byB0aGUKLQkgKiBvbmUgdGhhdCB3ZSdyZSBzdGVwcGluZyBpbiBub3cuICAo SXQncyBva2F5IHRvIGxlYXZlIHRoZSBzY2FuJ3MgYXJyYXkKLQkgKiBrZXlzIGFzLWlzLCBzaW5j ZSB0aGUgbmV4dCBfYnRfcmVhZHBhZ2Ugd2lsbCBhZHZhbmNlIHRoZW0uKQorCSAqIEZvciBiaXRt YXAgc2NhbiBjYWxsZXJzLCByZWxlYXNlIHRoZSBwcmlvciBiYXRjaCBub3cgc28gdGhhdAorCSAq IF9idF9yZWFkbmV4dHBhZ2UgY2FuIHJldXNlIGl0cyBtZW1vcnkuICBUaGF0IHdheSBiaXRtYXAg c2NhbnMgbmV2ZXIKKwkgKiBuZWVkIG1vcmUgdGhhbiBvbmUgYmF0Y2ggYWxsb2NhdGlvbi4KIAkg Ki8KLQlpZiAoc28tPmN1cnJQb3MuZGlyICE9IGRpcikKLQkJc28tPm5lZWRQcmltU2NhbiA9IGZh bHNlOworCWlmICghc2Nhbi0+dXNlYmF0Y2hyaW5nKQorCQlpbmRleGFtX3V0aWxfcmVsZWFzZV9i YXRjaChzY2FuLCBwcmlvcmJhdGNoKTsKKworCWlmIChibGtubyA9PSBQX05PTkUgfHwgIW1vcmVJ bkRpcikKKwl7CisJCS8qCisJCSAqIHByaW9yYmF0Y2gncyBwYWdlIGlzIGtub3duIHRvIGJlIHRo ZSBmaW5hbCBsZWFmIHBhZ2Ugd2l0aCBtYXRjaGVzCisJCSAqIGluIHRoaXMgc2NhbiBkaXJlY3Rp b24gKGl0cyBfYnRfcmVhZHBhZ2UgY2FsbCBmaWd1cmVkIHRoYXQgb3V0KS4KKwkJICoKKwkJICog Tm90ZTogaWYgc28tPm5lZWRQcmltU2NhbiBpcyBzZXQsIHRoZW4gcHJpb3JiYXRjaCdzIGxlYWYg cGFnZSBpcworCQkgKiBhY3R1YWxseSBqdXN0IHRoZSBmaW5hbCBwYWdlIGZvciB0aGUgY3VycmVu dCBwcmltaXRpdmUgaW5kZXggc2NhbgorCQkgKiBpbiB0aGlzIHNjYW4gZGlyZWN0aW9uICh0aGUg c2NhbiB3aWxsIGNvbnRpbnVlIGluIF9idF9maXJzdCkuCisJCSAqLworCQlfYnRfcGFyYWxsZWxf ZG9uZShzY2FuKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyogcGFyYWxsZWwgc2NhbiBtdXN0 IHNlaXplIHRoZSBzY2FuIHRvIGdldCBuZXh0IGJsa25vICovCisJaWYgKHNjYW4tPnBhcmFsbGVs X3NjYW4gIT0gTlVMTCAmJgorCQkhX2J0X3BhcmFsbGVsX3NlaXplKHNjYW4sICZibGtubywgJmxh c3RjdXJyYmxrbm8sIGZhbHNlKSkKKwkJcmV0dXJuIE5VTEw7CQkJLyogZG9uZSBpZmYgc28tPm5l ZWRQcmltU2NhbiB3YXNuJ3Qgc2V0ICovCiAKIAlyZXR1cm4gX2J0X3JlYWRuZXh0cGFnZShzY2Fu LCBibGtubywgbGFzdGN1cnJibGtubywgZGlyLCBmYWxzZSk7CiB9CkBAIC0xNzMyLDE3OCArMTY0 MiwxNjkgQEAgX2J0X3N0ZXBwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBk aXIpCiAgKiB0byBzdG9wIHRoZSBzY2FuIG9uIHRoaXMgcGFnZSBieSBjYWxsaW5nIF9idF9jaGVj a2tleXMgYWdhaW5zdCB0aGUgaGlnaAogICoga2V5LiAgU2VlIF9idF9yZWFkcGFnZSBmb3IgZnVs bCBkZXRhaWxzLgogICoKLSAqIE9uIGVudHJ5LCBzby0+Y3VyclBvcyBtdXN0IGJlIHBpbm5lZCBh bmQgbG9ja2VkIChzbyBvZmZudW0gc3RheXMgdmFsaWQpLgorICogT24gZW50cnksIGZpcnN0YmF0 Y2ggbXVzdCBiZSBwaW5uZWQgYW5kIGxvY2tlZCAoc28gb2ZmbnVtIHN0YXlzIHZhbGlkKS4KICAq IFBhcmFsbGVsIHNjYW4gY2FsbGVycyBtdXN0IGhhdmUgc2VpemVkIHRoZSBzY2FuIGJlZm9yZSBj YWxsaW5nIGhlcmUuCiAgKgotICogT24gZXhpdCwgd2UnbGwgaGF2ZSB1cGRhdGVkIHNvLT5jdXJy UG9zIGFuZCByZXRhaW5lZCBsb2NrcyBhbmQgcGlucwotICogYWNjb3JkaW5nIHRvIHRoZSBzYW1l IHJ1bGVzIGFzIHRob3NlIGxhaWQgb3V0IGZvciBfYnRfcmVhZG5leHRwYWdlIGV4aXQuCi0gKiBM aWtlIF9idF9yZWFkbmV4dHBhZ2UsIG91ciByZXR1cm4gdmFsdWUgaW5kaWNhdGVzIGlmIHRoZXJl IGFyZSBhbnkgbWF0Y2hpbmcKLSAqIHJlY29yZHMgaW4gdGhlIGdpdmVuIGRpcmVjdGlvbi4KKyAq IE9uIHN1Y2Nlc3MgZXhpdCwgcmV0dXJucyB1bmxvY2tlZCBiYXRjaCBjb250YWluaW5nIGRhdGEg ZnJvbSB0aGUgbmV4dCBwYWdlCisgKiB0aGF0IGhhcyBhdCBsZWFzdCBvbmUgbWF0Y2hpbmcgaXRl bS4gIElmIHRoZXJlIGFyZSBubyBtYXRjaGluZyBpdGVtcyBpbiB0aGUKKyAqIGdpdmVuIHNjYW4g ZGlyZWN0aW9uLCB3ZSBqdXN0IHJldHVybiBOVUxMLiAgTm90ZSB0aGF0IHJldHVybmluZyBOVUxM CisgKiBkb2Vzbid0IG5lY2Vzc2FyaWx5IG1lYW4gdGhlIGVuZCBvZiB0aGUgdG9wLWxldmVsIHNj YW47IGJ0Z2V0YmF0Y2ggYW5kCisgKiBidGdldGJpdG1hcCBjaGVjayBzby0+bmVlZFByaW1TY2Fu IHRvIGRldGVybWluZSBpZiBhbm90aGVyIHByaW1pdGl2ZSBpbmRleAorICogc2NhbiBpcyByZXF1 aXJlZC4KICAqCiAgKiBXZSBhbHdheXMgcmVsZWFzZSB0aGUgc2NhbiBmb3IgYSBwYXJhbGxlbCBz Y2FuIGNhbGxlciwgcmVnYXJkbGVzcyBvZgogICogc3VjY2VzcyBvciBmYWlsdXJlOyB3ZSdsbCBj YWxsIF9idF9wYXJhbGxlbF9yZWxlYXNlIGFzIHNvb24gYXMgcG9zc2libGUuCiAgKi8KLXN0YXRp YyBib29sCi1fYnRfcmVhZGZpcnN0cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIE9mZnNldE51bWJl ciBvZmZudW0sIFNjYW5EaXJlY3Rpb24gZGlyKQorc3RhdGljIEluZGV4U2NhbkJhdGNoCitfYnRf cmVhZGZpcnN0cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGZpcnN0YmF0 Y2gsCisJCQkJICBPZmZzZXROdW1iZXIgb2ZmbnVtLCBTY2FuRGlyZWN0aW9uIGRpcikKIHsKIAlC VFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CisJQlRCYXRjaERh dGEgKmJ0Zmlyc3RiYXRjaCA9IEJUQmF0Y2hHZXREYXRhKHNjYW4sIGZpcnN0YmF0Y2gpOworCUJs b2NrTnVtYmVyIGJsa25vLAorCQkJCWxhc3RjdXJyYmxrbm87CisJYm9vbAkJbW9yZUluRGlyOwog Ci0Jc28tPm51bUtpbGxlZCA9IDA7CQkJLyoganVzdCBwYXJhbm9pYSAqLwotCXNvLT5tYXJrSXRl bUluZGV4ID0gLTE7CQkvKiBkaXR0byAqLwotCi0JLyogSW5pdGlhbGl6ZSBzby0+Y3VyclBvcyBm b3IgdGhlIGZpcnN0IHBhZ2UgKHBhZ2UgaW4gc28tPmN1cnJQb3MuYnVmKSAqLworCS8qIEluaXRp YWxpemUgZmlyc3RiYXRjaCdzIHBvc2l0aW9uIGZvciB0aGUgZmlyc3QgcGFnZSAqLwogCWlmIChz by0+bmVlZFByaW1TY2FuKQogCXsKIAkJQXNzZXJ0KHNvLT5udW1BcnJheUtleXMpOwogCi0JCXNv LT5jdXJyUG9zLm1vcmVMZWZ0ID0gdHJ1ZTsKLQkJc28tPmN1cnJQb3MubW9yZVJpZ2h0ID0gdHJ1 ZTsKKwkJYnRmaXJzdGJhdGNoLT5tb3JlTGVmdCA9IHRydWU7CisJCWJ0Zmlyc3RiYXRjaC0+bW9y ZVJpZ2h0ID0gdHJ1ZTsKIAkJc28tPm5lZWRQcmltU2NhbiA9IGZhbHNlOwogCX0KIAllbHNlIGlm IChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCiAJewotCQlzby0+Y3VyclBvcy5tb3JlTGVm dCA9IGZhbHNlOwotCQlzby0+Y3VyclBvcy5tb3JlUmlnaHQgPSB0cnVlOworCQlidGZpcnN0YmF0 Y2gtPm1vcmVMZWZ0ID0gZmFsc2U7CisJCWJ0Zmlyc3RiYXRjaC0+bW9yZVJpZ2h0ID0gdHJ1ZTsK IAl9CiAJZWxzZQogCXsKLQkJc28tPmN1cnJQb3MubW9yZUxlZnQgPSB0cnVlOwotCQlzby0+Y3Vy clBvcy5tb3JlUmlnaHQgPSBmYWxzZTsKKwkJYnRmaXJzdGJhdGNoLT5tb3JlTGVmdCA9IHRydWU7 CisJCWJ0Zmlyc3RiYXRjaC0+bW9yZVJpZ2h0ID0gZmFsc2U7CiAJfQogCiAJLyoKIAkgKiBBdHRl bXB0IHRvIGxvYWQgbWF0Y2hpbmcgdHVwbGVzIGZyb20gdGhlIGZpcnN0IHBhZ2UuCiAJICoKLQkg KiBOb3RlIHRoYXQgX2J0X3JlYWRwYWdlIHdpbGwgZmluaXNoIGluaXRpYWxpemluZyB0aGUgc28t PmN1cnJQb3MgZmllbGRzLgorCSAqIE5vdGUgdGhhdCBfYnRfcmVhZHBhZ2Ugd2lsbCBmaW5pc2gg aW5pdGlhbGl6aW5nIHRoZSBmaXJzdGJhdGNoIGZpZWxkcy4KIAkgKiBfYnRfcmVhZHBhZ2UgYWxz byByZWxlYXNlcyBwYXJhbGxlbCBzY2FuIChldmVuIHdoZW4gaXQgcmV0dXJucyBmYWxzZSkuCiAJ ICovCi0JaWYgKF9idF9yZWFkcGFnZShzY2FuLCBkaXIsIG9mZm51bSwgdHJ1ZSkpCisJaWYgKF9i dF9yZWFkcGFnZShzY2FuLCBmaXJzdGJhdGNoLCBkaXIsIG9mZm51bSwgdHJ1ZSkpCiAJewotCQlS ZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOwotCi0JCS8qCi0JCSAqIF9idF9yZWFk cGFnZSBzdWNjZWVkZWQuICBEcm9wIHRoZSBsb2NrIChhbmQgbWF5YmUgdGhlIHBpbikgb24KLQkJ ICogc28tPmN1cnJQb3MuYnVmIGluIHByZXBhcmF0aW9uIGZvciBidGdldHR1cGxlIHJldHVybmlu ZyB0dXBsZXMuCi0JCSAqLwotCQlBc3NlcnQoQlRTY2FuUG9zSXNQaW5uZWQoc28tPmN1cnJQb3Mp KTsKLQkJX2J0X2Ryb3BfbG9ja19hbmRfbWF5YmVfcGluKHJlbCwgc28pOwotCQlyZXR1cm4gdHJ1 ZTsKKwkJLyogX2J0X3JlYWRwYWdlIHNhdmVkIG9uZSBvciBtb3JlIG1hdGNoZXMgaW4gZmlyc3Ri YXRjaC5pdGVtc1tdICovCisJCV9idF9iYXRjaF91bmxvY2soc2NhbiwgZmlyc3RiYXRjaCwgYnRm aXJzdGJhdGNoLT5idWYpOworCQlyZXR1cm4gZmlyc3RiYXRjaDsKIAl9CiAKLQkvKiBUaGVyZSdz IG5vIGFjdHVhbGx5LW1hdGNoaW5nIGRhdGEgb24gdGhlIHBhZ2UgaW4gc28tPmN1cnJQb3MuYnVm ICovCi0JX2J0X3VubG9ja2J1ZihzY2FuLT5pbmRleFJlbGF0aW9uLCBzby0+Y3VyclBvcy5idWYp OworCS8qIFRoZXJlJ3Mgbm8gYWN0dWFsbHktbWF0Y2hpbmcgZGF0YSBvbiB0aGUgcGFnZSByZXR1 cm5lZCBieSBfYnRfc2VhcmNoICovCisJX2J0X3JlbGJ1ZihzY2FuLT5pbmRleFJlbGF0aW9uLCBi dGZpcnN0YmF0Y2gtPmJ1Zik7CiAKLQkvKiBDYWxsIF9idF9yZWFkbmV4dHBhZ2UgdXNpbmcgaXRz IF9idF9zdGVwcGFnZSB3cmFwcGVyIGZ1bmN0aW9uICovCi0JaWYgKCFfYnRfc3RlcHBhZ2Uoc2Nh biwgZGlyKSkKLQkJcmV0dXJuIGZhbHNlOworCS8qIFdhbGsgdG8gdGhlIG5leHQgcGFnZSB3aXRo IGRhdGEgKi8KKwlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpKQorCQlibGtubyA9IGJ0 Zmlyc3RiYXRjaC0+bmV4dFBhZ2U7CisJZWxzZQorCQlibGtubyA9IGJ0Zmlyc3RiYXRjaC0+cHJl dlBhZ2U7CisJbGFzdGN1cnJibGtubyA9IGJ0Zmlyc3RiYXRjaC0+Y3VyclBhZ2U7CisJbW9yZUlu RGlyID0gU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpID8KKwkJYnRmaXJzdGJhdGNoLT5tb3Jl UmlnaHQgOiBidGZpcnN0YmF0Y2gtPm1vcmVMZWZ0OwogCi0JLyogX2J0X3JlYWRwYWdlIGZvciBh IGxhdGVyIHBhZ2UgKG5vdyBpbiBzby0+Y3VyclBvcykgc3VjY2VlZGVkICovCi0JcmV0dXJuIHRy dWU7CisJLyogUmVsZWFzZSBmaXJzdGJhdGNoICh3aWxsIGJlIHJlY3ljbGVkIGlmIHdlIHJlYWNo IF9idF9yZWFkbmV4dHBhZ2UpICovCisJaW5kZXhhbV91dGlsX3JlbGVhc2VfYmF0Y2goc2Nhbiwg Zmlyc3RiYXRjaCk7CisKKwlpZiAoYmxrbm8gPT0gUF9OT05FIHx8ICFtb3JlSW5EaXIpCisJewor CQkvKgorCQkgKiBmaXJzdGJhdGNoIF9idF9yZWFkcGFnZSBjYWxsIGVuZGVkIHNjYW4gaW4gdGhp cyBkaXJlY3Rpb24gKHRob3VnaAorCQkgKiBpZiBzby0+bmVlZFByaW1TY2FuIHdhcyBzZXQgdGhl IHNjYW4gd2lsbCBjb250aW51ZSBpbiBfYnRfZmlyc3QpCisJCSAqLworCQlfYnRfcGFyYWxsZWxf ZG9uZShzY2FuKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyogcGFyYWxsZWwgc2NhbiBtdXN0 IHNlaXplIHRoZSBzY2FuIHRvIGdldCBuZXh0IGJsa25vICovCisJaWYgKHNjYW4tPnBhcmFsbGVs X3NjYW4gIT0gTlVMTCAmJgorCQkhX2J0X3BhcmFsbGVsX3NlaXplKHNjYW4sICZibGtubywgJmxh c3RjdXJyYmxrbm8sIGZhbHNlKSkKKwkJcmV0dXJuIE5VTEw7CQkJLyogZG9uZSBpZmYgc28tPm5l ZWRQcmltU2NhbiB3YXNuJ3Qgc2V0ICovCisKKwlyZXR1cm4gX2J0X3JlYWRuZXh0cGFnZShzY2Fu LCBibGtubywgbGFzdGN1cnJibGtubywgZGlyLCBmYWxzZSk7CiB9CiAKIC8qCiAgKglfYnRfcmVh ZG5leHRwYWdlKCkgLS0gUmVhZCBuZXh0IHBhZ2UgY29udGFpbmluZyB2YWxpZCBkYXRhIGZvciBf YnRfbmV4dAogICoKLSAqIENhbGxlcidzIGJsa25vIGlzIHRoZSBuZXh0IGludGVyZXN0aW5nIHBh Z2UncyBsaW5rLCB0YWtlbiBmcm9tIGVpdGhlciB0aGUKLSAqIHByZXZpb3VzbHktc2F2ZWQgcmln aHQgbGluayBvciBsZWZ0IGxpbmsuICBsYXN0Y3VycmJsa25vIGlzIHRoZSBwYWdlIHRoYXQKLSAq IHdhcyBjdXJyZW50IGF0IHRoZSBwb2ludCB3aGVyZSB0aGUgYmxrbm8gbGluayB3YXMgc2F2ZWQs IHdoaWNoIHdlIHVzZSB0bwotICogcmVhc29uIGFib3V0IGNvbmN1cnJlbnQgcGFnZSBzcGxpdHMv cGFnZSBkZWxldGlvbnMgZHVyaW5nIGJhY2t3YXJkcyBzY2Fucy4KLSAqIEluIHRoZSBjb21tb24g Y2FzZSB3aGVyZSBzZWl6ZWQ9ZmFsc2UsIGJsa25vIGlzIGVpdGhlciBzby0+Y3VyclBvcy5uZXh0 UGFnZQotICogb3Igc28tPmN1cnJQb3MucHJldlBhZ2UsIGFuZCBsYXN0Y3VycmJsa25vIGlzIHNv LT5jdXJyUG9zLmN1cnJQYWdlLgorICogQ2FsbGVyJ3MgYmxrbm8gaXMgdGhlIHByaW9yIGJhdGNo J3MgbmV4dFBhZ2Ugb3IgcHJldlBhZ2UgKGRlcGVuZGluZyBvbiB0aGUKKyAqIGN1cnJlbnQgc2Nh biBkaXJlY3Rpb24pLCBhbmQgbGFzdGN1cnJibGtubyBpcyB0aGUgcHJpb3IgYmF0Y2gncyBjdXJy UGFnZS4KKyAqIFdlIHVzZSBsYXN0Y3VycmJsa25vIHRvIHJlYXNvbiBhYm91dCBjb25jdXJyZW50 IHBhZ2Ugc3BsaXRzL3BhZ2UgZGVsZXRpb25zCisgKiBkdXJpbmcgYmFja3dhcmRzIHNjYW5zLgog ICoKLSAqIE9uIGVudHJ5LCBzby0+Y3VyclBvcyBzaG91bGRuJ3QgYmUgbG9ja2VkIGJ5IGNhbGxl ci4gIHNvLT5jdXJyUG9zLmJ1ZiBtdXN0Ci0gKiBiZSBJbnZhbGlkQnVmZmVyL3VucGlubmVkIGFz IG5lZWRlZCBieSBjYWxsZXIgKG5vdGUgdGhhdCBsYXN0Y3VycmJsa25vCi0gKiB3b24ndCBuZWVk IHRvIGJlIHJlYWQgYWdhaW4gaW4gYWxtb3N0IGFsbCBjYXNlcykuICBQYXJhbGxlbCBzY2FuIGNh bGxlcnMKLSAqIHRoYXQgc2VpemVkIHRoZSBzY2FuIGJlZm9yZSBjYWxsaW5nIGhlcmUgc2hvdWxk IHBhc3Mgc2VpemVkPXRydWU7IHN1Y2ggYQotICogY2FsbGVyJ3MgYmxrbm8gYW5kIGxhc3RjdXJy Ymxrbm8gYXJndW1lbnRzIGNvbWUgZnJvbSB0aGUgc2VpemVkIHNjYW4uCi0gKiBzZWl6ZWQ9ZmFs c2UgY2FsbGVycyBqdXN0IHBhc3MgdXMgdGhlIGJsa25vL2xhc3RjdXJyYmxrbm8gdGFrZW4gZnJv bSB0aGVpcgotICogc28tPmN1cnJQb3MsIHdoaWNoIChhbG9uZyB3aXRoIHNvLT5jdXJyUG9zIGl0 c2VsZikgY2FuIGJlIHVzZWQgdG8gZW5kIHRoZQotICogc2Nhbi4gIEEgc2VpemVkPWZhbHNlIGNh bGxlcidzIGJsa25vIGNhbiBuZXZlciBiZSBhc3N1bWVkIHRvIGJlIHRoZSBwYWdlCi0gKiB0aGF0 IG11c3QgYmUgcmVhZCBuZXh0IGR1cmluZyBhIHBhcmFsbGVsIHNjYW4sIHRob3VnaC4gIFdlIG11 c3QgZmlndXJlIHRoYXQKLSAqIHBhcnQgb3V0IGZvciBvdXJzZWx2ZXMgYnkgc2VpemluZyB0aGUg c2NhbiAodGhlIGNvcnJlY3QgcGFnZSB0byByZWFkIG1pZ2h0Ci0gKiBhbHJlYWR5IGJlIGJleW9u ZCB0aGUgc2VpemVkPWZhbHNlIGNhbGxlcidzIGJsa25vIGR1cmluZyBhIHBhcmFsbGVsIHNjYW4s Ci0gKiB1bmxlc3MgYmxrbm8vc28tPmN1cnJQb3MubmV4dFBhZ2Uvc28tPmN1cnJQb3MucHJldlBh Z2UgaXMgYWxyZWFkeSBQX05PTkUsCi0gKiBvciB1bmxlc3Mgc28tPmN1cnJQb3MubW9yZVJpZ2h0 L3NvLT5jdXJyUG9zLm1vcmVMZWZ0IGlzIGFscmVhZHkgdW5zZXQpLgorICogT24gZW50cnksIG5v IHBhZ2Ugc2hvdWxkIGJlIGxvY2tlZCBieSBjYWxsZXIuCiAgKgotICogT24gc3VjY2VzcyBleGl0 LCBzby0+Y3VyclBvcyBpcyB1cGRhdGVkIHRvIGNvbnRhaW4gZGF0YSBmcm9tIHRoZSBuZXh0Ci0g KiBpbnRlcmVzdGluZyBwYWdlLCBhbmQgd2UgcmV0dXJuIHRydWUuICBXZSBob2xkIGEgcGluIG9u IHRoZSBidWZmZXIgb24KLSAqIHN1Y2Nlc3MgZXhpdCAoZXhjZXB0IGR1cmluZyBzby0+ZHJvcFBp biBpbmRleCBzY2Fucywgd2hlbiB3ZSBkcm9wIHRoZSBwaW4KLSAqIGVhZ2VybHkgdG8gYXZvaWQg YmxvY2tpbmcgVkFDVVVNKS4KKyAqIE9uIHN1Y2Nlc3MgZXhpdCwgcmV0dXJucyB1bmxvY2tlZCBi YXRjaCBjb250YWluaW5nIGRhdGEgZnJvbSB0aGUgbmV4dCBwYWdlCisgKiB0aGF0IGhhcyBhdCBs ZWFzdCBvbmUgbWF0Y2hpbmcgaXRlbS4gIElmIHRoZXJlIGFyZSBubyBtb3JlIG1hdGNoaW5nIGl0 ZW1zCisgKiBpbiB0aGUgZ2l2ZW4gc2NhbiBkaXJlY3Rpb24sIHdlIGp1c3QgcmV0dXJuIE5VTEwu ICBOb3RlIHRoYXQgcmV0dXJuaW5nIE5VTEwKKyAqIGRvZXNuJ3QgbmVjZXNzYXJpbHkgbWVhbiB0 aGUgZW5kIG9mIHRoZSB0b3AtbGV2ZWwgc2NhbjsgYnRnZXRiYXRjaCBhbmQKKyAqIGJ0Z2V0Yml0 bWFwIGNoZWNrIHNvLT5uZWVkUHJpbVNjYW4gdG8gZGV0ZXJtaW5lIGlmIGFub3RoZXIgcHJpbWl0 aXZlIGluZGV4CisgKiBzY2FuIGlzIHJlcXVpcmVkLgogICoKLSAqIElmIHRoZXJlIGFyZSBubyBt b3JlIG1hdGNoaW5nIHJlY29yZHMgaW4gdGhlIGdpdmVuIGRpcmVjdGlvbiwgd2UgaW52YWxpZGF0 ZQotICogc28tPmN1cnJQb3MgKHdoaWxlIGVuc3VyaW5nIGl0IHJldGFpbnMgbm8gbG9ja3Mgb3Ig cGlucyksIGFuZCByZXR1cm4gZmFsc2UuCi0gKgotICogV2UgYWx3YXlzIHJlbGVhc2UgdGhlIHNj YW4gZm9yIGEgcGFyYWxsZWwgc2NhbiBjYWxsZXIsIHJlZ2FyZGxlc3Mgb2YKLSAqIHN1Y2Nlc3Mg b3IgZmFpbHVyZTsgd2UnbGwgY2FsbCBfYnRfcGFyYWxsZWxfcmVsZWFzZSBhcyBzb29uIGFzIHBv c3NpYmxlLgorICogUGFyYWxsZWwgc2NhbiBjYWxsZXJzIG11c3Qgc2VpemUgdGhlIHNjYW4gYmVm b3JlIGNhbGxpbmcgaGVyZS4gIGJsa25vIGFuZAorICogbGFzdGN1cnJibGtubyBzaG91bGQgY29t ZSBmcm9tIHRoZSBzZWl6ZWQgc2Nhbi4gIFdlJ2xsIHJlbGVhc2UgdGhlIHNjYW4gYXMKKyAqIHNv b24gYXMgcG9zc2libGUuCiAgKi8KLXN0YXRpYyBib29sCitzdGF0aWMgSW5kZXhTY2FuQmF0Y2gK IF9idF9yZWFkbmV4dHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBCbG9ja051bWJlciBibGtubywK LQkJCQkgQmxvY2tOdW1iZXIgbGFzdGN1cnJibGtubywgU2NhbkRpcmVjdGlvbiBkaXIsIGJvb2wg c2VpemVkKQorCQkJCSBCbG9ja051bWJlciBsYXN0Y3VycmJsa25vLCBTY2FuRGlyZWN0aW9uIGRp ciwgYm9vbCBmaXJzdHBhZ2UpCiB7CiAJUmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlv bjsKLQlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CisJSW5k ZXhTY2FuQmF0Y2ggbmV3YmF0Y2g7CisJQlRCYXRjaERhdGEgKmJ0bmV3YmF0Y2g7CiAKLQlBc3Nl cnQoc28tPmN1cnJQb3MuY3VyclBhZ2UgPT0gbGFzdGN1cnJibGtubyB8fCBzZWl6ZWQpOwotCUFz c2VydCghKGJsa25vID09IFBfTk9ORSAmJiBzZWl6ZWQpKTsKLQlBc3NlcnQoIUJUU2NhblBvc0lz UGlubmVkKHNvLT5jdXJyUG9zKSk7CisJLyogQWxsb2NhdGUgc3BhY2UgZm9yIG5ldyBiYXRjaCAq LworCW5ld2JhdGNoID0gaW5kZXhhbV91dGlsX2FsbG9jX2JhdGNoKHNjYW4pOworCWJ0bmV3YmF0 Y2ggPSBCVEJhdGNoR2V0RGF0YShzY2FuLCBuZXdiYXRjaCk7CiAKIAkvKgotCSAqIFJlbWVtYmVy IHRoYXQgdGhlIHNjYW4gYWxyZWFkeSByZWFkIGxhc3RjdXJyYmxrbm8sIGEgcGFnZSB0byB0aGUg bGVmdAotCSAqIG9mIGJsa25vIChvciByZW1lbWJlciByZWFkaW5nIGEgcGFnZSB0byB0aGUgcmln aHQsIGZvciBiYWNrd2FyZHMgc2NhbnMpCisJICogbmV3YmF0Y2ggd2lsbCBiZSB0aGUgYmF0Y2gg Zm9yIGJsa25vLCBhIHBhZ2UgdG8gdGhlIHJpZ2h0IG9mCisJICogbGFzdGN1cnJibGtubyAob3Ig dG8gdGhlIGxlZnQsIHdoZW4gdGhlIHNjYW4gaXMgbW92aW5nIGJhY2t3YXJkcykuCisJICoKKwkg KiBOb3RlOiBjYWxsZXIncyBibGtubyBpcyB0ZW50YXRpdmUuICBuZXdiYXRjaCBhY3R1YWxseSBz dG9yZXMgbWF0Y2hlcworCSAqIGZyb20gdGhlIG5leHQgbGVhZiBwYWdlIGluIHRoaXMgc2NhbiBk aXJlY3Rpb24gdGhhdCBoYXMgYXQgbGVhc3Qgb25lCisJICogbWF0Y2hpbmcgaXRlbS4gIFRoaXMg aXMgdXN1YWxseSBjYWxsZXIncyBibGtubyBwYWdlLCBidXQgbWlnaHQgYmUgc29tZQorCSAqIG90 aGVyIHBhZ2UgdG8gaXRzIHJpZ2h0IChvciB0byBpdHMgbGVmdCkgaW5zdGVhZC4KIAkgKi8KLQlp ZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpKQotCQlzby0+Y3VyclBvcy5tb3JlTGVmdCA9 IHRydWU7Ci0JZWxzZQotCQlzby0+Y3VyclBvcy5tb3JlUmlnaHQgPSB0cnVlOworCWJ0bmV3YmF0 Y2gtPm1vcmVMZWZ0ID0gdHJ1ZTsJLyogZm9yIGxhc3RjdXJyYmxrbm8gKG9yIHRlbnRhdGl2ZSkg Ki8KKwlidG5ld2JhdGNoLT5tb3JlUmlnaHQgPSB0cnVlOwkvKiB0ZW50YXRpdmUgKG9yIGZvciBs YXN0Y3VycmJsa25vKSAqLwogCiAJZm9yICg7OykKIAl7CiAJCVBhZ2UJCXBhZ2U7CiAJCUJUUGFn ZU9wYXF1ZSBvcGFxdWU7CiAKLQkJaWYgKGJsa25vID09IFBfTk9ORSB8fAotCQkJKFNjYW5EaXJl Y3Rpb25Jc0ZvcndhcmQoZGlyKSA/Ci0JCQkgIXNvLT5jdXJyUG9zLm1vcmVSaWdodCA6ICFzby0+ Y3VyclBvcy5tb3JlTGVmdCkpCi0JCXsKLQkJCS8qIG1vc3QgcmVjZW50IF9idF9yZWFkcGFnZSBj YWxsIChmb3IgbGFzdGN1cnJibGtubykgZW5kZWQgc2NhbiAqLwotCQkJQXNzZXJ0KHNvLT5jdXJy UG9zLmN1cnJQYWdlID09IGxhc3RjdXJyYmxrbm8gJiYgIXNlaXplZCk7Ci0JCQlCVFNjYW5Qb3NJ bnZhbGlkYXRlKHNvLT5jdXJyUG9zKTsKLQkJCV9idF9wYXJhbGxlbF9kb25lKHNjYW4pOwkvKiBp ZmYgIXNvLT5uZWVkUHJpbVNjYW4gKi8KLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCi0JCUFzc2Vy dCghc28tPm5lZWRQcmltU2Nhbik7Ci0KLQkJLyogcGFyYWxsZWwgc2NhbiBtdXN0IG5ldmVyIGFj dHVhbGx5IHZpc2l0IHNvLT5jdXJyUG9zIGJsa25vICovCi0JCWlmICghc2VpemVkICYmIHNjYW4t PnBhcmFsbGVsX3NjYW4gIT0gTlVMTCAmJgotCQkJIV9idF9wYXJhbGxlbF9zZWl6ZShzY2FuLCAm Ymxrbm8sICZsYXN0Y3VycmJsa25vLCBmYWxzZSkpCi0JCXsKLQkJCS8qIHdob2xlIHNjYW4gaXMg bm93IGRvbmUgKG9yIGFub3RoZXIgcHJpbWl0aXZlIHNjYW4gcmVxdWlyZWQpICovCi0JCQlCVFNj YW5Qb3NJbnZhbGlkYXRlKHNvLT5jdXJyUG9zKTsKLQkJCXJldHVybiBmYWxzZTsKLQkJfQorCQlB c3NlcnQoISgoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWUpLT5uZWVkUHJpbVNjYW4pOworCQlB c3NlcnQoYmxrbm8gIT0gUF9OT05FICYmIGxhc3RjdXJyYmxrbm8gIT0gUF9OT05FKTsKIAogCQlp ZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpKQogCQl7CiAJCQkvKiByZWFkIGJsa25vLCBi dXQgY2hlY2sgZm9yIGludGVycnVwdHMgZmlyc3QgKi8KIAkJCUNIRUNLX0ZPUl9JTlRFUlJVUFRT KCk7Ci0JCQlzby0+Y3VyclBvcy5idWYgPSBfYnRfZ2V0YnVmKHJlbCwgYmxrbm8sIEJUX1JFQUQp OworCQkJYnRuZXdiYXRjaC0+YnVmID0gX2J0X2dldGJ1ZihyZWwsIGJsa25vLCBCVF9SRUFEKTsK IAkJfQogCQllbHNlCiAJCXsKIAkJCS8qIHJlYWQgYmxrbm8sIGF2b2lkaW5nIHJhY2UgKGFsc28g Y2hlY2tzIGZvciBpbnRlcnJ1cHRzKSAqLwotCQkJc28tPmN1cnJQb3MuYnVmID0gX2J0X2xvY2tf YW5kX3ZhbGlkYXRlX2xlZnQocmVsLCAmYmxrbm8sCisJCQlidG5ld2JhdGNoLT5idWYgPSBfYnRf bG9ja19hbmRfdmFsaWRhdGVfbGVmdChyZWwsICZibGtubywKIAkJCQkJCQkJCQkJCQkJIGxhc3Rj dXJyYmxrbm8pOwotCQkJaWYgKHNvLT5jdXJyUG9zLmJ1ZiA9PSBJbnZhbGlkQnVmZmVyKQorCQkJ aWYgKGJ0bmV3YmF0Y2gtPmJ1ZiA9PSBJbnZhbGlkQnVmZmVyKQogCQkJewogCQkJCS8qIG11c3Qg aGF2ZSBiZWVuIGEgY29uY3VycmVudCBkZWxldGlvbiBvZiBsZWZ0bW9zdCBwYWdlICovCi0JCQkJ QlRTY2FuUG9zSW52YWxpZGF0ZShzby0+Y3VyclBvcyk7CiAJCQkJX2J0X3BhcmFsbGVsX2RvbmUo c2Nhbik7Ci0JCQkJcmV0dXJuIGZhbHNlOworCQkJCWluZGV4YW1fdXRpbF9yZWxlYXNlX2JhdGNo KHNjYW4sIG5ld2JhdGNoKTsKKwkJCQlyZXR1cm4gTlVMTDsKIAkJCX0KIAkJfQogCi0JCXBhZ2Ug PSBCdWZmZXJHZXRQYWdlKHNvLT5jdXJyUG9zLmJ1Zik7CisJCXBhZ2UgPSBCdWZmZXJHZXRQYWdl KGJ0bmV3YmF0Y2gtPmJ1Zik7CiAJCW9wYXF1ZSA9IEJUUGFnZUdldE9wYXF1ZShwYWdlKTsKIAkJ bGFzdGN1cnJibGtubyA9IGJsa25vOwogCQlpZiAobGlrZWx5KCFQX0lHTk9SRShvcGFxdWUpKSkK QEAgLTE5MTEsMTcgKzE4MTIsMTcgQEAgX2J0X3JlYWRuZXh0cGFnZShJbmRleFNjYW5EZXNjIHNj YW4sIEJsb2NrTnVtYmVyIGJsa25vLAogCQkJLyogc2VlIGlmIHRoZXJlIGFyZSBhbnkgbWF0Y2hl cyBvbiB0aGlzIHBhZ2UgKi8KIAkJCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCiAJ CQl7Ci0JCQkJLyogbm90ZSB0aGF0IHRoaXMgd2lsbCBjbGVhciBtb3JlUmlnaHQgaWYgd2UgY2Fu IHN0b3AgKi8KLQkJCQlpZiAoX2J0X3JlYWRwYWdlKHNjYW4sIGRpciwgUF9GSVJTVERBVEFLRVko b3BhcXVlKSwgc2VpemVkKSkKKwkJCQlpZiAoX2J0X3JlYWRwYWdlKHNjYW4sIG5ld2JhdGNoLCBk aXIsCisJCQkJCQkJCSBQX0ZJUlNUREFUQUtFWShvcGFxdWUpLCBmaXJzdHBhZ2UpKQogCQkJCQli cmVhazsKLQkJCQlibGtubyA9IHNvLT5jdXJyUG9zLm5leHRQYWdlOworCQkJCWJsa25vID0gYnRu ZXdiYXRjaC0+bmV4dFBhZ2U7CiAJCQl9CiAJCQllbHNlCiAJCQl7Ci0JCQkJLyogbm90ZSB0aGF0 IHRoaXMgd2lsbCBjbGVhciBtb3JlTGVmdCBpZiB3ZSBjYW4gc3RvcCAqLwotCQkJCWlmIChfYnRf cmVhZHBhZ2Uoc2NhbiwgZGlyLCBQYWdlR2V0TWF4T2Zmc2V0TnVtYmVyKHBhZ2UpLCBzZWl6ZWQp KQorCQkJCWlmIChfYnRfcmVhZHBhZ2Uoc2NhbiwgbmV3YmF0Y2gsIGRpciwKKwkJCQkJCQkJIFBh Z2VHZXRNYXhPZmZzZXROdW1iZXIocGFnZSksIGZpcnN0cGFnZSkpCiAJCQkJCWJyZWFrOwotCQkJ CWJsa25vID0gc28tPmN1cnJQb3MucHJldlBhZ2U7CisJCQkJYmxrbm8gPSBidG5ld2JhdGNoLT5w cmV2UGFnZTsKIAkJCX0KIAkJfQogCQllbHNlCkBAIC0xOTM2LDE5ICsxODM3LDM4IEBAIF9idF9y ZWFkbmV4dHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBCbG9ja051bWJlciBibGtubywKIAkJfQog CiAJCS8qIG5vIG1hdGNoaW5nIHR1cGxlcyBvbiB0aGlzIHBhZ2UgKi8KLQkJX2J0X3JlbGJ1Zihy ZWwsIHNvLT5jdXJyUG9zLmJ1Zik7Ci0JCXNlaXplZCA9IGZhbHNlOwkJCS8qIHJlbGVhc2VkIGJ5 IF9idF9yZWFkcGFnZSAob3IgYnkgdXMpICovCisJCV9idF9yZWxidWYocmVsLCBidG5ld2JhdGNo LT5idWYpOworCisJCS8qIENvbnRpbnVlIHRoZSBzY2FuIGluIHRoaXMgZGlyZWN0aW9uPyAqLwor CQlpZiAoYmxrbm8gPT0gUF9OT05FIHx8CisJCQkoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIp ID8KKwkJCSAhYnRuZXdiYXRjaC0+bW9yZVJpZ2h0IDogIWJ0bmV3YmF0Y2gtPm1vcmVMZWZ0KSkK KwkJeworCQkJLyoKKwkJCSAqIGJsa25vIF9idF9yZWFkcGFnZSBjYWxsIGVuZGVkIHNjYW4gaW4g dGhpcyBkaXJlY3Rpb24gKHRob3VnaCBpZgorCQkJICogc28tPm5lZWRQcmltU2NhbiB3YXMgc2V0 IHRoZSBzY2FuIHdpbGwgY29udGludWUgaW4gX2J0X2ZpcnN0KQorCQkJICovCisJCQlfYnRfcGFy YWxsZWxfZG9uZShzY2FuKTsKKwkJCWluZGV4YW1fdXRpbF9yZWxlYXNlX2JhdGNoKHNjYW4sIG5l d2JhdGNoKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisKKwkJLyogcGFyYWxsZWwgc2NhbiBtdXN0 IHNlaXplIHRoZSBzY2FuIHRvIGdldCBuZXh0IGJsa25vICovCisJCWlmIChzY2FuLT5wYXJhbGxl bF9zY2FuICE9IE5VTEwgJiYKKwkJCSFfYnRfcGFyYWxsZWxfc2VpemUoc2NhbiwgJmJsa25vLCAm bGFzdGN1cnJibGtubywgZmFsc2UpKQorCQl7CisJCQlpbmRleGFtX3V0aWxfcmVsZWFzZV9iYXRj aChzY2FuLCBuZXdiYXRjaCk7CisJCQlyZXR1cm4gTlVMTDsJCS8qIGRvbmUgaWZmIHNvLT5uZWVk UHJpbVNjYW4gd2Fzbid0IHNldCAqLworCQl9CisKKwkJZmlyc3RwYWdlID0gZmFsc2U7CQkvKiBu ZXh0IHBhZ2UgY2Fubm90IGJlIGZpcnN0ICovCiAJfQogCi0JLyoKLQkgKiBfYnRfcmVhZHBhZ2Ug c3VjY2VlZGVkLiAgRHJvcCB0aGUgbG9jayAoYW5kIG1heWJlIHRoZSBwaW4pIG9uCi0JICogc28t PmN1cnJQb3MuYnVmIGluIHByZXBhcmF0aW9uIGZvciBidGdldHR1cGxlIHJldHVybmluZyB0dXBs ZXMuCi0JICovCi0JQXNzZXJ0KHNvLT5jdXJyUG9zLmN1cnJQYWdlID09IGJsa25vKTsKLQlBc3Nl cnQoQlRTY2FuUG9zSXNQaW5uZWQoc28tPmN1cnJQb3MpKTsKLQlfYnRfZHJvcF9sb2NrX2FuZF9t YXliZV9waW4ocmVsLCBzbyk7CisJLyogX2J0X3JlYWRwYWdlIHNhdmVkIG9uZSBvciBtb3JlIG1h dGNoZXMgaW4gbmV3YmF0Y2guaXRlbXNbXSAqLworCUFzc2VydChidG5ld2JhdGNoLT5jdXJyUGFn ZSA9PSBibGtubyk7CisJX2J0X2JhdGNoX3VubG9jayhzY2FuLCBuZXdiYXRjaCwgYnRuZXdiYXRj aC0+YnVmKTsKIAotCXJldHVybiB0cnVlOworCXJldHVybiBuZXdiYXRjaDsKIH0KIAogLyoKQEAg LTIxNzQsMjUgKzIwOTQsMjQgQEAgX2J0X2dldF9lbmRwb2ludChSZWxhdGlvbiByZWwsIHVpbnQz MiBsZXZlbCwgYm9vbCByaWdodG1vc3QpCiAgKiBQYXJhbGxlbCBzY2FuIGNhbGxlcnMgbXVzdCBo YXZlIHNlaXplZCB0aGUgc2NhbiBiZWZvcmUgY2FsbGluZyBoZXJlLgogICogRXhpdCBjb25kaXRp b25zIGFyZSB0aGUgc2FtZSBhcyBmb3IgX2J0X2ZpcnN0KCkuCiAgKi8KLXN0YXRpYyBib29sCi1f YnRfZW5kcG9pbnQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKK3N0YXRp YyBJbmRleFNjYW5CYXRjaAorX2J0X2VuZHBvaW50KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRp cmVjdGlvbiBkaXIsIEluZGV4U2NhbkJhdGNoIGZpcnN0YmF0Y2gpCiB7CiAJUmVsYXRpb24JcmVs ID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKLQlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVl KSBzY2FuLT5vcGFxdWU7CisJQlRCYXRjaERhdGEgKmJ0Zmlyc3RiYXRjaCA9IEJUQmF0Y2hHZXRE YXRhKHNjYW4sIGZpcnN0YmF0Y2gpOwogCVBhZ2UJCXBhZ2U7CiAJQlRQYWdlT3BhcXVlIG9wYXF1 ZTsKIAlPZmZzZXROdW1iZXIgc3RhcnQ7CiAKLQlBc3NlcnQoIUJUU2NhblBvc0lzVmFsaWQoc28t PmN1cnJQb3MpKTsKLQlBc3NlcnQoIXNvLT5uZWVkUHJpbVNjYW4pOworCUFzc2VydCghKChCVFNj YW5PcGFxdWUpIHNjYW4tPm9wYXF1ZSktPm5lZWRQcmltU2Nhbik7CiAKIAkvKgogCSAqIFNjYW4g ZG93biB0byB0aGUgbGVmdG1vc3Qgb3IgcmlnaHRtb3N0IGxlYWYgcGFnZS4gIFRoaXMgaXMgYSBz aW1wbGlmaWVkCiAJICogdmVyc2lvbiBvZiBfYnRfc2VhcmNoKCkuCiAJICovCi0Jc28tPmN1cnJQ b3MuYnVmID0gX2J0X2dldF9lbmRwb2ludChyZWwsIDAsIFNjYW5EaXJlY3Rpb25Jc0JhY2t3YXJk KGRpcikpOworCWJ0Zmlyc3RiYXRjaC0+YnVmID0gX2J0X2dldF9lbmRwb2ludChyZWwsIDAsIFNj YW5EaXJlY3Rpb25Jc0JhY2t3YXJkKGRpcikpOwogCi0JaWYgKCFCdWZmZXJJc1ZhbGlkKHNvLT5j dXJyUG9zLmJ1ZikpCisJaWYgKCFCdWZmZXJJc1ZhbGlkKGJ0Zmlyc3RiYXRjaC0+YnVmKSkKIAl7 CiAJCS8qCiAJCSAqIEVtcHR5IGluZGV4LiBMb2NrIHRoZSB3aG9sZSByZWxhdGlvbiwgYXMgbm90 aGluZyBmaW5lciB0byBsb2NrCkBAIC0yMjAwLDEwICsyMTE5LDEwIEBAIF9idF9lbmRwb2ludChJ bmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCQkgKi8KIAkJUHJlZGljYXRl TG9ja1JlbGF0aW9uKHJlbCwgc2Nhbi0+eHNfc25hcHNob3QpOwogCQlfYnRfcGFyYWxsZWxfZG9u ZShzY2FuKTsKLQkJcmV0dXJuIGZhbHNlOworCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQlwYWdlID0g QnVmZmVyR2V0UGFnZShzby0+Y3VyclBvcy5idWYpOworCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGJ0 Zmlyc3RiYXRjaC0+YnVmKTsKIAlvcGFxdWUgPSBCVFBhZ2VHZXRPcGFxdWUocGFnZSk7CiAJQXNz ZXJ0KFBfSVNMRUFGKG9wYXF1ZSkpOwogCkBAIC0yMjI5LDkgKzIxNDgsNSBAQCBfYnRfZW5kcG9p bnQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAkvKgogCSAqIE5vdyBs b2FkIGRhdGEgZnJvbSB0aGUgZmlyc3QgcGFnZSBvZiB0aGUgc2Nhbi4KIAkgKi8KLQlpZiAoIV9i dF9yZWFkZmlyc3RwYWdlKHNjYW4sIHN0YXJ0LCBkaXIpKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlf YnRfcmV0dXJuaXRlbShzY2FuLCBzbyk7Ci0JcmV0dXJuIHRydWU7CisJcmV0dXJuIF9idF9yZWFk Zmlyc3RwYWdlKHNjYW4sIGZpcnN0YmF0Y2gsIHN0YXJ0LCBkaXIpOwogfQpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnR1dGlscy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNz L25idHJlZS9uYnR1dGlscy5jCmluZGV4IDAxNGZhYTE2Mi4uYjZjOTc3Yjk2IDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHV0aWxzLmMKKysrIGIvc3JjL2JhY2tlbmQv YWNjZXNzL25idHJlZS9uYnR1dGlscy5jCkBAIC0xOSwxMCArMTksNyBAQAogCiAjaW5jbHVkZSAi YWNjZXNzL25idHJlZS5oIgogI2luY2x1ZGUgImFjY2Vzcy9yZWxvcHRpb25zLmgiCi0jaW5jbHVk ZSAiYWNjZXNzL3JlbHNjYW4uaCIKICNpbmNsdWRlICJjb21tYW5kcy9wcm9ncmVzcy5oIgotI2lu Y2x1ZGUgImNvbW1vbi9pbnQuaCIKLSNpbmNsdWRlICJsaWIvcXVuaXF1ZS5oIgogI2luY2x1ZGUg Im1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInN0b3JhZ2UvbHdsb2NrLmgiCiAjaW5jbHVkZSAic3Rv cmFnZS9zdWJzeXN0ZW1zLmgiCkBAIC0zMSw3ICsyOCw2IEBACiAjaW5jbHVkZSAidXRpbHMvcmVs LmgiCiAKIAotc3RhdGljIGludAlfYnRfY29tcGFyZV9pbnQoY29uc3Qgdm9pZCAqdmEsIGNvbnN0 IHZvaWQgKnZiKTsKIHN0YXRpYyBpbnQJX2J0X2tlZXBfbmF0dHMoUmVsYXRpb24gcmVsLCBJbmRl eFR1cGxlIGxhc3RsZWZ0LAogCQkJCQkJICAgSW5kZXhUdXBsZSBmaXJzdHJpZ2h0LCBCVFNjYW5J bnNlcnQgaXR1cF9rZXkpOwogCkBAIC0xNDYsMjQ3ICsxNDIsNiBAQCBfYnRfbWtzY2Fua2V5KFJl bGF0aW9uIHJlbCwgSW5kZXhUdXBsZSBpdHVwKQogCXJldHVybiBrZXk7CiB9CiAKLS8qCi0gKiBx c29ydCBjb21wYXJpc29uIGZ1bmN0aW9uIGZvciBpbnQgYXJyYXlzCi0gKi8KLXN0YXRpYyBpbnQK LV9idF9jb21wYXJlX2ludChjb25zdCB2b2lkICp2YSwgY29uc3Qgdm9pZCAqdmIpCi17Ci0JaW50 CQkJYSA9ICooKGNvbnN0IGludCAqKSB2YSk7Ci0JaW50CQkJYiA9ICooKGNvbnN0IGludCAqKSB2 Yik7Ci0KLQlyZXR1cm4gcGdfY21wX3MzMihhLCBiKTsKLX0KLQotLyoKLSAqIF9idF9raWxsaXRl bXMgLSBzZXQgTFBfREVBRCBzdGF0ZSBmb3IgaXRlbXMgYW4gaW5kZXhzY2FuIGNhbGxlciBoYXMK LSAqIHRvbGQgdXMgd2VyZSBraWxsZWQKLSAqCi0gKiBzY2FuLT5vcGFxdWUsIHJlZmVyZW5jZWQg bG9jYWxseSB0aHJvdWdoIHNvLCBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUKLSAqIGN1 cnJlbnQgcGFnZSBhbmQga2lsbGVkIHR1cGxlcyB0aGVyZW9uIChnZW5lcmFsbHksIHRoaXMgc2hv dWxkIG9ubHkgYmUKLSAqIGNhbGxlZCBpZiBzby0+bnVtS2lsbGVkID4gMCkuCi0gKgotICogQ2Fs bGVyIHNob3VsZCBub3QgaGF2ZSBhIGxvY2sgb24gdGhlIHNvLT5jdXJyUG9zIHBhZ2UsIGJ1dCBt dXN0IGhvbGQgYQotICogYnVmZmVyIHBpbiB3aGVuICFzby0+ZHJvcFBpbi4gIFdoZW4gd2UgcmV0 dXJuLCBpdCBzdGlsbCB3b24ndCBiZSBsb2NrZWQuCi0gKiBJdCdsbCBjb250aW51ZSB0byBob2xk IHdoYXRldmVyIHBpbnMgd2VyZSBoZWxkIGJlZm9yZSBjYWxsaW5nIGhlcmUuCi0gKgotICogV2Ug bWF0Y2ggaXRlbXMgYnkgaGVhcCBUSUQgYmVmb3JlIGFzc3VtaW5nIHRoZXkgYXJlIHRoZSByaWdo dCBvbmVzIHRvIHNldAotICogTFBfREVBRC4gIElmIHRoZSBzY2FuIGlzIG9uZSB0aGF0IGhvbGRz IGEgYnVmZmVyIHBpbiBvbiB0aGUgdGFyZ2V0IHBhZ2UKLSAqIGNvbnRpbnVvdXNseSBmcm9tIGlu aXRpYWxseSByZWFkaW5nIHRoZSBpdGVtcyB1bnRpbCBhcHBseWluZyB0aGlzIGZ1bmN0aW9uCi0g KiAoaWYgaXQgaXMgYSAhc28tPmRyb3BQaW4gc2NhbiksIFZBQ1VVTSBjYW5ub3QgaGF2ZSBkZWxl dGVkIGFueSBpdGVtcyBvbiB0aGUKLSAqIHBhZ2UsIHNvIHRoZSBwYWdlJ3MgVElEcyBjYW4ndCBo YXZlIGJlZW4gcmVjeWNsZWQgYnkgbm93LiAgVGhlcmUncyBubyByaXNrCi0gKiB0aGF0IHdlJ2xs IGNvbmZ1c2UgYSBuZXcgaW5kZXggdHVwbGUgdGhhdCBoYXBwZW5zIHRvIHVzZSBhIHJlY3ljbGVk IFRJRAotICogd2l0aCBhIG5vdy1yZW1vdmVkIHR1cGxlIHdpdGggdGhlIHNhbWUgVElEICh0aGF0 IHVzZWQgdG8gYmUgb24gdGhpcyBzYW1lCi0gKiBwYWdlKS4gIFdlIGNhbid0IHJlbHkgb24gdGhh dCBkdXJpbmcgc2NhbnMgdGhhdCBkcm9wIGJ1ZmZlciBwaW5zIGVhZ2VybHkKLSAqIChzby0+ZHJv cFBpbiBzY2FucyksIHRob3VnaCwgc28gd2UgbXVzdCBjb25kaXRpb24gc2V0dGluZyBMUF9ERUFE IGJpdHMgb24KLSAqIHRoZSBwYWdlIExTTiBoYXZpbmcgbm90IGNoYW5nZWQgc2luY2UgYmFjayB3 aGVuIF9idF9yZWFkcGFnZSBzYXcgdGhlIHBhZ2UuCi0gKiBXZSB0b3RhbGx5IGdpdmUgdXAgb24g c2V0dGluZyBMUF9ERUFEIGJpdHMgd2hlbiB0aGUgcGFnZSBMU04gY2hhbmdlZC4KLSAqCi0gKiBX ZSBnaXZlIHVwIG11Y2ggbGVzcyBvZnRlbiBkdXJpbmcgIXNvLT5kcm9wUGluIHNjYW5zLCBidXQg aXQgc3RpbGwgaGFwcGVucy4KLSAqIFdlIGNvcGUgd2l0aCBjYXNlcyB3aGVyZSBpdGVtcyBoYXZl IG1vdmVkIHJpZ2h0IGR1ZSB0byBpbnNlcnRpb25zLiAgSWYgYW4KLSAqIGl0ZW0gaGFzIG1vdmVk IG9mZiB0aGUgY3VycmVudCBwYWdlIGR1ZSB0byBhIHNwbGl0LCB3ZSdsbCBmYWlsIHRvIGZpbmQg aXQKLSAqIGFuZCBqdXN0IGdpdmUgdXAgb24gaXQuCi0gKi8KLXZvaWQKLV9idF9raWxsaXRlbXMo SW5kZXhTY2FuRGVzYyBzY2FuKQotewotCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRp b247Ci0JQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwotCVBh Z2UJCXBhZ2U7Ci0JQlRQYWdlT3BhcXVlIG9wYXF1ZTsKLQlPZmZzZXROdW1iZXIgbWlub2ZmOwot CU9mZnNldE51bWJlciBtYXhvZmY7Ci0JaW50CQkJbnVtS2lsbGVkID0gc28tPm51bUtpbGxlZDsK LQlib29sCQlraWxsZWRzb21ldGhpbmcgPSBmYWxzZTsKLQlCdWZmZXIJCWJ1ZjsKLQotCUFzc2Vy dChudW1LaWxsZWQgPiAwKTsKLQlBc3NlcnQoQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykp OwotCUFzc2VydChzY2FuLT5oZWFwUmVsYXRpb24gIT0gTlVMTCk7IC8qIGNhbid0IGJlIGEgYml0 bWFwIGluZGV4IHNjYW4gKi8KLQotCS8qIEFsd2F5cyBpbnZhbGlkYXRlIHNvLT5raWxsZWRJdGVt c1tdIGJlZm9yZSBsZWF2aW5nIHNvLT5jdXJyUG9zICovCi0Jc28tPm51bUtpbGxlZCA9IDA7Ci0K LQkvKgotCSAqIFdlIG5lZWQgdG8gaXRlcmF0ZSB0aHJvdWdoIHNvLT5raWxsZWRJdGVtc1tdIGlu IGxlYWYgcGFnZSBvcmRlcjsgdGhlCi0JICogbG9vcCBiZWxvdyBleHBlY3RzIHRoaXMgKHdoZW4g bWFya2luZyBwb3N0aW5nIGxpc3QgdHVwbGVzLCBhdCBsZWFzdCkuCi0JICogc28tPmtpbGxlZEl0 ZW1zW10gaXMgbm93IGluIHdoYXRldmVyIG9yZGVyIHRoZSBzY2FuIHJldHVybmVkIGl0ZW1zIGlu LgotCSAqIFNjcm9sbGFibGUgY3Vyc29yIHNjYW5zIG1pZ2h0IGhhdmUgZXZlbiBzYXZlZCB0aGUg c2FtZSBpdGVtL1RJRCB0d2ljZS4KLQkgKgotCSAqIFNvcnQgYW5kIHVuaXF1ZS1pZnkgc28tPmtp bGxlZEl0ZW1zW10gdG8gZGVhbCB3aXRoIGFsbCB0aGlzLgotCSAqLwotCWlmIChudW1LaWxsZWQg PiAxKQotCXsKLQkJcXNvcnQoc28tPmtpbGxlZEl0ZW1zLCBudW1LaWxsZWQsIHNpemVvZihpbnQp LCBfYnRfY29tcGFyZV9pbnQpOwotCQludW1LaWxsZWQgPSBxdW5pcXVlKHNvLT5raWxsZWRJdGVt cywgbnVtS2lsbGVkLCBzaXplb2YoaW50KSwKLQkJCQkJCQlfYnRfY29tcGFyZV9pbnQpOwotCX0K LQotCWlmICghc28tPmRyb3BQaW4pCi0JewotCQkvKgotCQkgKiBXZSBoYXZlIGhlbGQgdGhlIHBp biBvbiB0aGlzIHBhZ2Ugc2luY2Ugd2UgcmVhZCB0aGUgaW5kZXggdHVwbGVzLAotCQkgKiBzbyBh bGwgd2UgbmVlZCB0byBkbyBpcyBsb2NrIGl0LiAgVGhlIHBpbiB3aWxsIGhhdmUgcHJldmVudGVk Ci0JCSAqIGNvbmN1cnJlbnQgVkFDVVVNcyBmcm9tIHJlY3ljbGluZyBhbnkgb2YgdGhlIFRJRHMg b24gdGhlIHBhZ2UuCi0JCSAqLwotCQlBc3NlcnQoQlRTY2FuUG9zSXNQaW5uZWQoc28tPmN1cnJQ b3MpKTsKLQkJYnVmID0gc28tPmN1cnJQb3MuYnVmOwotCQlfYnRfbG9ja2J1ZihyZWwsIGJ1Ziwg QlRfUkVBRCk7Ci0JfQotCWVsc2UKLQl7Ci0JCVhMb2dSZWNQdHIJbGF0ZXN0bHNuOwotCi0JCUFz c2VydCghQlRTY2FuUG9zSXNQaW5uZWQoc28tPmN1cnJQb3MpKTsKLQkJYnVmID0gX2J0X2dldGJ1 ZihyZWwsIHNvLT5jdXJyUG9zLmN1cnJQYWdlLCBCVF9SRUFEKTsKLQotCQlsYXRlc3Rsc24gPSBC dWZmZXJHZXRMU05BdG9taWMoYnVmKTsKLQkJQXNzZXJ0KHNvLT5jdXJyUG9zLmxzbiA8PSBsYXRl c3Rsc24pOwotCQlpZiAoc28tPmN1cnJQb3MubHNuICE9IGxhdGVzdGxzbikKLQkJewotCQkJLyog TW9kaWZpZWQsIGdpdmUgdXAgb24gaGludGluZyAqLwotCQkJX2J0X3JlbGJ1ZihyZWwsIGJ1Zik7 Ci0JCQlyZXR1cm47Ci0JCX0KLQotCQkvKiBVbm1vZGlmaWVkLCBoaW50aW5nIGlzIHNhZmUgKi8K LQl9Ci0KLQlwYWdlID0gQnVmZmVyR2V0UGFnZShidWYpOwotCW9wYXF1ZSA9IEJUUGFnZUdldE9w YXF1ZShwYWdlKTsKLQltaW5vZmYgPSBQX0ZJUlNUREFUQUtFWShvcGFxdWUpOwotCW1heG9mZiA9 IFBhZ2VHZXRNYXhPZmZzZXROdW1iZXIocGFnZSk7Ci0KLQkvKiBJdGVyYXRlIHRocm91Z2ggc28t PmtpbGxlZEl0ZW1zW10gaW4gbGVhZiBwYWdlIG9yZGVyICovCi0JZm9yIChpbnQgaSA9IDA7IGkg PCBudW1LaWxsZWQ7IGkrKykKLQl7Ci0JCWludAkJCWl0ZW1JbmRleCA9IHNvLT5raWxsZWRJdGVt c1tpXTsKLQkJQlRTY2FuUG9zSXRlbSAqa2l0ZW0gPSAmc28tPmN1cnJQb3MuaXRlbXNbaXRlbUlu ZGV4XTsKLQkJT2Zmc2V0TnVtYmVyIG9mZm51bSA9IGtpdGVtLT5pbmRleE9mZnNldDsKLQotCQlB c3NlcnQoaXRlbUluZGV4ID49IHNvLT5jdXJyUG9zLmZpcnN0SXRlbSAmJgotCQkJICAgaXRlbUlu ZGV4IDw9IHNvLT5jdXJyUG9zLmxhc3RJdGVtKTsKLQkJQXNzZXJ0KGkgPT0gMCB8fAotCQkJICAg b2ZmbnVtID49IHNvLT5jdXJyUG9zLml0ZW1zW3NvLT5raWxsZWRJdGVtc1tpIC0gMV1dLmluZGV4 T2Zmc2V0KTsKLQotCQlpZiAob2ZmbnVtIDwgbWlub2ZmKQotCQkJY29udGludWU7CQkJLyogcHVy ZSBwYXJhbm9pYSAqLwotCQl3aGlsZSAob2ZmbnVtIDw9IG1heG9mZikKLQkJewotCQkJSXRlbUlk CQlpaWQgPSBQYWdlR2V0SXRlbUlkKHBhZ2UsIG9mZm51bSk7Ci0JCQlJbmRleFR1cGxlCWl0dXBs ZSA9IChJbmRleFR1cGxlKSBQYWdlR2V0SXRlbShwYWdlLCBpaWQpOwotCQkJYm9vbAkJa2lsbHR1 cGxlID0gZmFsc2U7Ci0KLQkJCWlmIChCVHJlZVR1cGxlSXNQb3N0aW5nKGl0dXBsZSkpCi0JCQl7 Ci0JCQkJaW50CQkJcGkgPSBpICsgMTsKLQkJCQlpbnQJCQlucG9zdGluZyA9IEJUcmVlVHVwbGVH ZXROUG9zdGluZyhpdHVwbGUpOwotCQkJCWludAkJCWo7Ci0KLQkJCQkvKgotCQkJCSAqIE5vdGUg dGhhdCB0aGUgcGFnZSBtYXkgaGF2ZSBiZWVuIG1vZGlmaWVkIGluIGFsbW9zdCBhbnkgd2F5Ci0J CQkJICogc2luY2Ugd2UgZmlyc3QgcmVhZCBpdCAoaW4gdGhlICFzby0+ZHJvcFBpbiBjYXNlKSwg c28gaXQncwotCQkJCSAqIHBvc3NpYmxlIHRoYXQgdGhpcyBwb3N0aW5nIGxpc3QgdHVwbGUgd2Fz bid0IGEgcG9zdGluZyBsaXN0Ci0JCQkJICogdHVwbGUgd2hlbiB3ZSBmaXJzdCBlbmNvdW50ZXJl ZCBpdHMgaGVhcCBUSURzLgotCQkJCSAqLwotCQkJCWZvciAoaiA9IDA7IGogPCBucG9zdGluZzsg aisrKQotCQkJCXsKLQkJCQkJSXRlbVBvaW50ZXIgaXRlbSA9IEJUcmVlVHVwbGVHZXRQb3N0aW5n TihpdHVwbGUsIGopOwotCi0JCQkJCWlmICghSXRlbVBvaW50ZXJFcXVhbHMoaXRlbSwgJmtpdGVt LT5oZWFwVGlkKSkKLQkJCQkJCWJyZWFrOwkvKiBvdXQgb2YgcG9zdGluZyBsaXN0IGxvb3AgKi8K LQotCQkJCQkvKgotCQkJCQkgKiBraXRlbSBtdXN0IGhhdmUgbWF0Y2hpbmcgb2ZmbnVtIHdoZW4g aGVhcCBUSURzIG1hdGNoLAotCQkJCQkgKiB0aG91Z2ggb25seSBpbiB0aGUgY29tbW9uIGNhc2Ug d2hlcmUgdGhlIHBhZ2UgY2FuJ3QKLQkJCQkJICogaGF2ZSBiZWVuIGNvbmN1cnJlbnRseSBtb2Rp ZmllZAotCQkJCQkgKi8KLQkJCQkJQXNzZXJ0KGtpdGVtLT5pbmRleE9mZnNldCA9PSBvZmZudW0g fHwgIXNvLT5kcm9wUGluKTsKLQotCQkJCQkvKgotCQkJCQkgKiBSZWFkLWFoZWFkIHRvIGxhdGVy IGtpdGVtcyBoZXJlLgotCQkJCQkgKgotCQkJCQkgKiBXZSByZWx5IG9uIHRoZSBhc3N1bXB0aW9u IHRoYXQgbm90IGFkdmFuY2luZyBraXRlbSBoZXJlCi0JCQkJCSAqIHdpbGwgcHJldmVudCB1cyBm cm9tIGNvbnNpZGVyaW5nIHRoZSBwb3N0aW5nIGxpc3QgdHVwbGUKLQkJCQkJICogZnVsbHkgZGVh ZCBieSBub3QgbWF0Y2hpbmcgaXRzIG5leHQgaGVhcCBUSUQgaW4gbmV4dAotCQkJCQkgKiBsb29w IGl0ZXJhdGlvbi4KLQkJCQkJICoKLQkJCQkJICogSWYsIG9uIHRoZSBvdGhlciBoYW5kLCB0aGlz IGlzIHRoZSBmaW5hbCBoZWFwIFRJRCBpbgotCQkJCQkgKiB0aGUgcG9zdGluZyBsaXN0IHR1cGxl LCB0aGVuIHR1cGxlIGdldHMga2lsbGVkCi0JCQkJCSAqIHJlZ2FyZGxlc3MgKGkuZS4gd2UgaGFu ZGxlIHRoZSBjYXNlIHdoZXJlIHRoZSBsYXN0Ci0JCQkJCSAqIGtpdGVtIGlzIGFsc28gdGhlIGxh c3QgaGVhcCBUSUQgaW4gdGhlIGxhc3QgaW5kZXggdHVwbGUKLQkJCQkJICogY29ycmVjdGx5IC0t IHBvc3RpbmcgdHVwbGUgc3RpbGwgZ2V0cyBraWxsZWQpLgotCQkJCQkgKi8KLQkJCQkJaWYgKHBp IDwgbnVtS2lsbGVkKQotCQkJCQkJa2l0ZW0gPSAmc28tPmN1cnJQb3MuaXRlbXNbc28tPmtpbGxl ZEl0ZW1zW3BpKytdXTsKLQkJCQl9Ci0KLQkJCQkvKgotCQkJCSAqIERvbid0IGJvdGhlciBhZHZh bmNpbmcgdGhlIG91dGVybW9zdCBsb29wJ3MgaW50IGl0ZXJhdG9yIHRvCi0JCQkJICogYXZvaWQg cHJvY2Vzc2luZyBraWxsZWQgaXRlbXMgdGhhdCByZWxhdGUgdG8gdGhlIHNhbWUKLQkJCQkgKiBv ZmZudW0vcG9zdGluZyBsaXN0IHR1cGxlLiAgVGhpcyBtaWNyby1vcHRpbWl6YXRpb24gaGFyZGx5 Ci0JCQkJICogc2VlbXMgd29ydGggaXQuICAoRnVydGhlciBpdGVyYXRpb25zIG9mIHRoZSBvdXRl cm1vc3QgbG9vcAotCQkJCSAqIHdpbGwgZmFpbCB0byBtYXRjaCBvbiB0aGlzIHNhbWUgcG9zdGlu ZyBsaXN0J3MgZmlyc3QgaGVhcAotCQkJCSAqIFRJRCBpbnN0ZWFkLCBzbyB3ZSdsbCBhZHZhbmNl IHRvIHRoZSBuZXh0IG9mZm51bS9pbmRleAotCQkJCSAqIHR1cGxlIHByZXR0eSBxdWlja2x5LikK LQkJCQkgKi8KLQkJCQlpZiAoaiA9PSBucG9zdGluZykKLQkJCQkJa2lsbHR1cGxlID0gdHJ1ZTsK LQkJCX0KLQkJCWVsc2UgaWYgKEl0ZW1Qb2ludGVyRXF1YWxzKCZpdHVwbGUtPnRfdGlkLCAma2l0 ZW0tPmhlYXBUaWQpKQotCQkJCWtpbGx0dXBsZSA9IHRydWU7Ci0KLQkJCS8qCi0JCQkgKiBNYXJr IGluZGV4IGl0ZW0gYXMgZGVhZCwgaWYgaXQgaXNuJ3QgYWxyZWFkeS4gIFNpbmNlIHRoaXMKLQkJ CSAqIGhhcHBlbnMgd2hpbGUgaG9sZGluZyBhIGJ1ZmZlciBsb2NrIHBvc3NpYmx5IGluIHNoYXJl ZCBtb2RlLAotCQkJICogaXQncyBwb3NzaWJsZSB0aGF0IG11bHRpcGxlIHByb2Nlc3NlcyBhdHRl bXB0IHRvIGRvIHRoaXMKLQkJCSAqIHNpbXVsdGFuZW91c2x5LCBsZWFkaW5nIHRvIG11bHRpcGxl IGZ1bGwtcGFnZSBpbWFnZXMgYmVpbmcgc2VudAotCQkJICogdG8gV0FMIChpZiB3YWxfbG9nX2hp bnRzIG9yIGRhdGEgY2hlY2tzdW1zIGFyZSBlbmFibGVkKSwgd2hpY2gKLQkJCSAqIGlzIHVuZGVz aXJhYmxlLgotCQkJICovCi0JCQlpZiAoa2lsbHR1cGxlICYmICFJdGVtSWRJc0RlYWQoaWlkKSkK LQkJCXsKLQkJCQlpZiAoIWtpbGxlZHNvbWV0aGluZykKLQkJCQl7Ci0JCQkJCS8qCi0JCQkJCSAq IFVzZSB0aGUgaGludCBiaXQgaW5mcmFzdHJ1Y3R1cmUgdG8gY2hlY2sgaWYgd2UgY2FuCi0JCQkJ CSAqIHVwZGF0ZSB0aGUgcGFnZSB3aGlsZSBqdXN0IGhvbGRpbmcgYSBzaGFyZSBsb2NrLiBJZiB3 ZQotCQkJCQkgKiBhcmUgbm90IGFsbG93ZWQsIHRoZXJlJ3Mgbm8gcG9pbnQgY29udGludWluZy4K LQkJCQkJICovCi0JCQkJCWlmICghQnVmZmVyQmVnaW5TZXRIaW50Qml0cyhidWYpKQotCQkJCQkJ Z290byB1bmxvY2tfcGFnZTsKLQkJCQl9Ci0KLQkJCQkvKiBmb3VuZCB0aGUgaXRlbS9hbGwgcG9z dGluZyBsaXN0IGl0ZW1zICovCi0JCQkJSXRlbUlkTWFya0RlYWQoaWlkKTsKLQkJCQlraWxsZWRz b21ldGhpbmcgPSB0cnVlOwotCQkJCWJyZWFrOwkJCS8qIG91dCBvZiBpbm5lciBzZWFyY2ggbG9v cCAqLwotCQkJfQotCQkJb2ZmbnVtID0gT2Zmc2V0TnVtYmVyTmV4dChvZmZudW0pOwotCQl9Ci0J fQotCi0JLyoKLQkgKiBTaW5jZSB0aGlzIGNhbiBiZSByZWRvbmUgbGF0ZXIgaWYgbmVlZGVkLCBt YXJrIGFzIGRpcnR5IGhpbnQuCi0JICoKLQkgKiBXaGVuZXZlciB3ZSBtYXJrIGFueXRoaW5nIExQ X0RFQUQsIHdlIGFsc28gc2V0IHRoZSBwYWdlJ3MKLQkgKiBCVFBfSEFTX0dBUkJBR0UgZmxhZywg d2hpY2ggaXMgbGlrZXdpc2UganVzdCBhIGhpbnQuICAoTm90ZSB0aGF0IHdlCi0JICogb25seSBy ZWx5IG9uIHRoZSBwYWdlLWxldmVsIGZsYWcgaW4gIWhlYXBrZXlzcGFjZSBpbmRleGVzLikKLQkg Ki8KLQlpZiAoa2lsbGVkc29tZXRoaW5nKQotCXsKLQkJb3BhcXVlLT5idHBvX2ZsYWdzIHw9IEJU UF9IQVNfR0FSQkFHRTsKLQkJQnVmZmVyRmluaXNoU2V0SGludEJpdHMoYnVmLCB0cnVlLCB0cnVl KTsKLQl9Ci0KLXVubG9ja19wYWdlOgotCWlmICghc28tPmRyb3BQaW4pCi0JCV9idF91bmxvY2ti dWYocmVsLCBidWYpOwotCWVsc2UKLQkJX2J0X3JlbGJ1ZihyZWwsIGJ1Zik7Ci19Ci0KLQogLyoK ICAqIFRoZSBmb2xsb3dpbmcgcm91dGluZXMgbWFuYWdlIGEgc2hhcmVkLW1lbW9yeSBhcmVhIGlu IHdoaWNoIHdlIHRyYWNrCiAgKiBhc3NpZ25tZW50IG9mICJ2YWN1dW0gY3ljbGUgSURzIiB0byBj dXJyZW50bHktYWN0aXZlIGJ0cmVlIHZhY3V1bWluZwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv YWNjZXNzL25idHJlZS9uYnR4bG9nLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHhs b2cuYwppbmRleCBkZmY3ZDI4NmYuLjNiYzVlNWNjZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv YWNjZXNzL25idHJlZS9uYnR4bG9nLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9u YnR4bG9nLmMKQEAgLTEwOTUsMTUgKzEwOTUsMTUgQEAgYnRyZWVfbWFzayhjaGFyICpwYWdlZGF0 YSwgQmxvY2tOdW1iZXIgYmxrbm8pCiAJCS8qCiAJCSAqIEluIGJ0cmVlIGxlYWYgcGFnZXMsIGl0 IGlzIHBvc3NpYmxlIHRvIG1vZGlmeSB0aGUgTFBfRkxBR1Mgd2l0aG91dAogCQkgKiBlbWl0dGlu ZyBhbnkgV0FMIHJlY29yZC4gSGVuY2UsIG1hc2sgdGhlIGxpbmUgcG9pbnRlciBmbGFncy4gU2Vl Ci0JCSAqIF9idF9raWxsaXRlbXMoKSwgX2J0X2NoZWNrX3VuaXF1ZSgpIGZvciBkZXRhaWxzLgor CQkgKiBidGtpbGxpdGVtc2JhdGNoKCksIF9idF9jaGVja191bmlxdWUoKSBmb3IgZGV0YWlscy4K IAkJICovCiAJCW1hc2tfbHBfZmxhZ3MocGFnZSk7CiAJfQogCiAJLyoKIAkgKiBCVFBfSEFTX0dB UkJBR0UgaXMganVzdCBhbiB1bi1sb2dnZWQgaGludCBiaXQuIFNvLCBtYXNrIGl0LiBTZWUKLQkg KiBfYnRfZGVsZXRlX29yX2RlZHVwX29uZV9wYWdlKCksIF9idF9raWxsaXRlbXMoKSwgYW5kIF9i dF9jaGVja191bmlxdWUoKQotCSAqIGZvciBkZXRhaWxzLgorCSAqIF9idF9kZWxldGVfb3JfZGVk dXBfb25lX3BhZ2UoKSwgYnRraWxsaXRlbXNiYXRjaCgpLCBhbmQKKwkgKiBfYnRfY2hlY2tfdW5p cXVlKCkgZm9yIGRldGFpbHMuCiAJICovCiAJbWFza29wYXEtPmJ0cG9fZmxhZ3MgJj0gfkJUUF9I QVNfR0FSQkFHRTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd1 dGlscy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd1dGlscy5jCmluZGV4IGYyZWUz MzNmNi4uMWY0NTIzMTAyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3Nw Z3V0aWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd1dGlscy5jCkBAIC04 OCwxMCArODgsMTIgQEAgc3BnaGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCQkuYW1iZWdpbnNj YW4gPSBzcGdiZWdpbnNjYW4sCiAJCS5hbXJlc2NhbiA9IHNwZ3Jlc2NhbiwKIAkJLmFtZ2V0dHVw bGUgPSBzcGdnZXR0dXBsZSwKKwkJLmFtZ2V0YmF0Y2ggPSBOVUxMLAorCQkuYW11bmd1YXJkYmF0 Y2ggPSBOVUxMLAorCQkuYW1raWxsaXRlbXNiYXRjaCA9IE5VTEwsCiAJCS5hbWdldGJpdG1hcCA9 IHNwZ2dldGJpdG1hcCwKIAkJLmFtZW5kc2NhbiA9IHNwZ2VuZHNjYW4sCi0JCS5hbW1hcmtwb3Mg PSBOVUxMLAotCQkuYW1yZXN0cnBvcyA9IE5VTEwsCisJCS5hbXBvc3Jlc2V0ID0gTlVMTCwKIAkJ LmFtZXN0aW1hdGVwYXJhbGxlbHNjYW4gPSBOVUxMLAogCQkuYW1pbml0cGFyYWxsZWxzY2FuID0g TlVMTCwKIAkJLmFtcGFyYWxsZWxyZXNjYW4gPSBOVUxMLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvYWNjZXNzL3RhYmxlL3RhYmxlYW1hcGkuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90 YWJsZWFtYXBpLmMKaW5kZXggYzA5NDczYjk3Li4wZmZmODAxYTQgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtYXBpLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L3RhYmxlL3RhYmxlYW1hcGkuYwpAQCAtNTMsNiArNTMsOSBAQCBHZXRUYWJsZUFtUm91dGluZShP aWQgYW1oYW5kbGVyKQogCUFzc2VydChyb3V0aW5lLT5pbmRleF9mZXRjaF9iZWdpbiAhPSBOVUxM KTsKIAlBc3NlcnQocm91dGluZS0+aW5kZXhfZmV0Y2hfcmVzZXQgIT0gTlVMTCk7CiAJQXNzZXJ0 KHJvdXRpbmUtPmluZGV4X2ZldGNoX2VuZCAhPSBOVUxMKTsKKwlBc3NlcnQocm91dGluZS0+aW5k ZXhfZmV0Y2hfYmF0Y2hfaW5pdCAhPSBOVUxMKTsKKwlBc3NlcnQocm91dGluZS0+aW5kZXhfZmV0 Y2hfbWFya3BvcyAhPSBOVUxMKTsKKwlBc3NlcnQocm91dGluZS0+aW5kZXhfZmV0Y2hfcmVzdHJw b3MgIT0gTlVMTCk7CiAKIAlBc3NlcnQocm91dGluZS0+ZmV0Y2hfdGlkICE9IE5VTEwpOwogCUFz c2VydChyb3V0aW5lLT50dXBsZV9mZXRjaF9yb3dfdmVyc2lvbiAhPSBOVUxMKTsKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFu ZHMvaW5kZXhjbWRzLmMKaW5kZXggOWFiNzRjOGRmLi4xY2FmZmViODkgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRz L2luZGV4Y21kcy5jCkBAIC04ODUsNyArODg1LDcgQEAgRGVmaW5lSW5kZXgoUGFyc2VTdGF0ZSAq cHN0YXRlLAogCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKIAkJ CQkgZXJybXNnKCJhY2Nlc3MgbWV0aG9kIFwiJXNcIiBkb2VzIG5vdCBzdXBwb3J0IG11bHRpY29s dW1uIGluZGV4ZXMiLAogCQkJCQkJYWNjZXNzTWV0aG9kTmFtZSkpKTsKLQlpZiAoZXhjbHVzaW9u ICYmIGFtUm91dGluZS0+YW1nZXR0dXBsZSA9PSBOVUxMKQorCWlmIChleGNsdXNpb24gJiYgYW1S b3V0aW5lLT5hbWdldHR1cGxlID09IE5VTEwgJiYgYW1Sb3V0aW5lLT5hbWdldGJhdGNoID09IE5V TEwpCiAJCWVyZXBvcnQoRVJST1IsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9T VVBQT1JURUQpLAogCQkJCSBlcnJtc2coImFjY2VzcyBtZXRob2QgXCIlc1wiIGRvZXMgbm90IHN1 cHBvcnQgZXhjbHVzaW9uIGNvbnN0cmFpbnRzIiwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL2V4ZWNBbWkuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNBbWkuYwppbmRleCAz N2ZlMDNmZGMuLjk3OWE4NTJmZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhl Y0FtaS5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNBbWkuYwpAQCAtNDI5LDcgKzQy OSw3IEBAIEV4ZWNTdXBwb3J0c01hcmtSZXN0b3JlKFBhdGggKnBhdGhub2RlKQogCQljYXNlIFRf SW5kZXhPbmx5U2NhbjoKIAogCQkJLyoKLQkJCSAqIE5vdCBhbGwgaW5kZXggdHlwZXMgc3VwcG9y dCBtYXJrL3Jlc3RvcmUuCisJCQkgKiBOb3QgYWxsIGluZGV4IHR5cGVzIHN1cHBvcnQgcmVzdG9y aW5nIGEgbWFyawogCQkJICovCiAJCQlyZXR1cm4gY2FzdE5vZGUoSW5kZXhQYXRoLCBwYXRobm9k ZSktPmluZGV4aW5mby0+YW1jYW5tYXJrcG9zOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9l eGVjdXRvci9ub2RlTWVyZ2Vqb2luLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTWVyZ2Vq b2luLmMKaW5kZXggZjg0MjFhNzRjLi42ZThmZTA3ZjYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2V4ZWN1dG9yL25vZGVNZXJnZWpvaW4uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2Rl TWVyZ2Vqb2luLmMKQEAgLTU0LDggKzU0LDggQEAKICAqCQl0aGUgaW5uZXIgIjUncyIuIFRoaXMg cmVxdWlyZXMgcmVwb3NpdGlvbmluZyB0aGUgaW5uZXIgImN1cnNvciIKICAqCQl0byBwb2ludCBh dCB0aGUgZmlyc3QgaW5uZXIgIjUiLiBUaGlzIGlzIGRvbmUgYnkgIm1hcmtpbmciIHRoZQogICoJ CWZpcnN0IGlubmVyIDUgc28gd2UgY2FuIHJlc3RvcmUgdGhlICJjdXJzb3IiIHRvIGl0IGJlZm9y ZSBqb2luaW5nCi0gKgkJd2l0aCB0aGUgc2Vjb25kIG91dGVyIDUuIFRoZSBhY2Nlc3MgbWV0aG9k IGludGVyZmFjZSBwcm92aWRlcwotICoJCXJvdXRpbmVzIHRvIG1hcmsgYW5kIHJlc3RvcmUgdG8g YSB0dXBsZS4KKyAqCQl3aXRoIHRoZSBzZWNvbmQgb3V0ZXIgNS4gVGhlIHRhYmxlIEFNIGludGVy ZmFjZSBwcm92aWRlcworICoJCXJvdXRpbmVzIHRvIG1hcmsgYW5kIHJlc3RvcmUgdG8gYSB0dXBs ZSBkdXJpbmcgaW5kZXggc2NhbnMuCiAgKgogICoKICAqCQlFc3NlbnRpYWwgb3BlcmF0aW9uIG9m IHRoZSBtZXJnZSBqb2luIGFsZ29yaXRobSBpcyBhcyBmb2xsb3dzOgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvaW5keHBhdGguYyBiL3NyYy9iYWNrZW5kL29wdGltaXpl ci9wYXRoL2luZHhwYXRoLmMKaW5kZXggNjdkOWRjMzVmLi5lZGM3ZTQ3MzYgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2luZHhwYXRoLmMKKysrIGIvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BhdGgvaW5keHBhdGguYwpAQCAtNDMsNyArNDMsNyBAQAogLyogV2hldGhlciB3 ZSBhcmUgbG9va2luZyBmb3IgcGxhaW4gaW5kZXhzY2FuLCBiaXRtYXAgc2Nhbiwgb3IgZWl0aGVy ICovCiB0eXBlZGVmIGVudW0KIHsKLQlTVF9JTkRFWFNDQU4sCQkJCS8qIG11c3Qgc3VwcG9ydCBh bWdldHR1cGxlICovCisJU1RfSU5ERVhTQ0FOLAkJCQkvKiBtdXN0IHN1cHBvcnQgYW1nZXR0dXBs ZSBvciBhbWdldGJhdGNoICovCiAJU1RfQklUTUFQU0NBTiwJCQkJLyogbXVzdCBzdXBwb3J0IGFt Z2V0Yml0bWFwICovCiAJU1RfQU5ZU0NBTiwJCQkJCS8qIGVpdGhlciBpcyBva2F5ICovCiB9IFNj YW5UeXBlQ29udHJvbDsKQEAgLTc0Nyw3ICs3NDcsNyBAQCBnZXRfaW5kZXhfcGF0aHMoUGxhbm5l ckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAl7CiAJCUluZGV4UGF0aCAgKmlwYXRoID0g KEluZGV4UGF0aCAqKSBsZmlyc3QobGMpOwogCi0JCWlmIChpbmRleC0+YW1oYXNnZXR0dXBsZSkK KwkJaWYgKGluZGV4LT5hbWNhbnBsYWluc2NhbikKIAkJCWFkZF9wYXRoKHJlbCwgKFBhdGggKikg aXBhdGgpOwogCiAJCWlmIChpbmRleC0+YW1oYXNnZXRiaXRtYXAgJiYKQEAgLTgzNSw3ICs4MzUs NyBAQCBidWlsZF9pbmRleF9wYXRocyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVs LAogCXN3aXRjaCAoc2NhbnR5cGUpCiAJewogCQljYXNlIFNUX0lOREVYU0NBTjoKLQkJCWlmICgh aW5kZXgtPmFtaGFzZ2V0dHVwbGUpCisJCQlpZiAoIWluZGV4LT5hbWNhbnBsYWluc2NhbikKIAkJ CQlyZXR1cm4gTklMOwogCQkJYnJlYWs7CiAJCWNhc2UgU1RfQklUTUFQU0NBTjoKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYyBiL3NyYy9iYWNrZW5kL29w dGltaXplci91dGlsL3BsYW5jYXQuYwppbmRleCA3YzRiZTE3NDguLjA2YTJlOTQ5ZCAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGxhbmNhdC5jCisrKyBiL3NyYy9iYWNr ZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYwpAQCAtMzEwLDExICszMTAsMTEgQEAgZ2V0X3Jl bGF0aW9uX2luZm8oUGxhbm5lckluZm8gKnJvb3QsIE9pZCByZWxhdGlvbk9iamVjdElkLCBib29s IGluaHBhcmVudCwKIAkJCQlpbmZvLT5hbXNlYXJjaGFycmF5ID0gYW1yb3V0aW5lLT5hbXNlYXJj aGFycmF5OwogCQkJCWluZm8tPmFtc2VhcmNobnVsbHMgPSBhbXJvdXRpbmUtPmFtc2VhcmNobnVs bHM7CiAJCQkJaW5mby0+YW1jYW5wYXJhbGxlbCA9IGFtcm91dGluZS0+YW1jYW5wYXJhbGxlbDsK LQkJCQlpbmZvLT5hbWhhc2dldHR1cGxlID0gKGFtcm91dGluZS0+YW1nZXR0dXBsZSAhPSBOVUxM KTsKKwkJCQlpbmZvLT5hbWNhbnBsYWluc2NhbiA9IChhbXJvdXRpbmUtPmFtZ2V0YmF0Y2ggIT0g TlVMTCB8fAorCQkJCQkJCQkJCWFtcm91dGluZS0+YW1nZXR0dXBsZSAhPSBOVUxMKTsKIAkJCQlp bmZvLT5hbWhhc2dldGJpdG1hcCA9IGFtcm91dGluZS0+YW1nZXRiaXRtYXAgIT0gTlVMTCAmJgog CQkJCQlyZWxhdGlvbi0+cmRfdGFibGVhbS0+c2Nhbl9iaXRtYXBfbmV4dF90dXBsZSAhPSBOVUxM OwotCQkJCWluZm8tPmFtY2FubWFya3BvcyA9IChhbXJvdXRpbmUtPmFtbWFya3BvcyAhPSBOVUxM ICYmCi0JCQkJCQkJCQkgIGFtcm91dGluZS0+YW1yZXN0cnBvcyAhPSBOVUxMKTsKKwkJCQlpbmZv LT5hbWNhbm1hcmtwb3MgPSBhbXJvdXRpbmUtPmFtZ2V0YmF0Y2ggIT0gTlVMTDsKIAkJCQlpbmZv LT5hbWNvc3Rlc3RpbWF0ZSA9IGFtcm91dGluZS0+YW1jb3N0ZXN0aW1hdGU7CiAJCQkJQXNzZXJ0 KGluZm8tPmFtY29zdGVzdGltYXRlICE9IE5VTEwpOwogCkBAIC00MTEsNyArNDExLDcgQEAgZ2V0 X3JlbGF0aW9uX2luZm8oUGxhbm5lckluZm8gKnJvb3QsIE9pZCByZWxhdGlvbk9iamVjdElkLCBi b29sIGluaHBhcmVudCwKIAkJCQlpbmZvLT5hbXNlYXJjaGFycmF5ID0gZmFsc2U7CiAJCQkJaW5m by0+YW1zZWFyY2hudWxscyA9IGZhbHNlOwogCQkJCWluZm8tPmFtY2FucGFyYWxsZWwgPSBmYWxz ZTsKLQkJCQlpbmZvLT5hbWhhc2dldHR1cGxlID0gZmFsc2U7CisJCQkJaW5mby0+YW1jYW5wbGFp bnNjYW4gPSBmYWxzZTsKIAkJCQlpbmZvLT5hbWhhc2dldGJpdG1hcCA9IGZhbHNlOwogCQkJCWlu Zm8tPmFtY2FubWFya3BvcyA9IGZhbHNlOwogCQkJCWluZm8tPmFtY29zdGVzdGltYXRlID0gTlVM TDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVsYXRpb24u YyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVsYXRpb24uYwppbmRleCAwYjFk ODBiNWIuLjBkMGJkNDY4ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9n aWNhbC9yZWxhdGlvbi5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVs YXRpb24uYwpAQCAtODM2LDYgKzgzNiw3IEBAIElzSW5kZXhVc2FibGVGb3JSZXBsaWNhSWRlbnRp dHlGdWxsKFJlbGF0aW9uIGlkeHJlbCwgQXR0ck1hcCAqYXR0cm1hcCkKIHsKIAlBdHRyTnVtYmVy CWtleWNvbDsKIAlvaWR2ZWN0b3IgICppbmRjbGFzczsKKwljb25zdCBJbmRleEFtUm91dGluZSAq YW1yb3V0aW5lOwogCiAJLyogVGhlIGluZGV4IG11c3Qgbm90IGJlIGEgcGFydGlhbCBpbmRleCAq LwogCWlmICghaGVhcF9hdHRpc251bGwoaWR4cmVsLT5yZF9pbmRleHR1cGxlLCBBbnVtX3BnX2lu ZGV4X2luZHByZWQsIE5VTEwpKQpAQCAtODg3LDEwICs4ODgsMTIgQEAgSXNJbmRleFVzYWJsZUZv clJlcGxpY2FJZGVudGl0eUZ1bGwoUmVsYXRpb24gaWR4cmVsLCBBdHRyTWFwICphdHRybWFwKQog CQlyZXR1cm4gZmFsc2U7CiAKIAkvKgotCSAqIFRoZSBnaXZlbiBpbmRleCBhY2Nlc3MgbWV0aG9k IG11c3QgaW1wbGVtZW50ICJhbWdldHR1cGxlIiwgd2hpY2ggd2lsbAotCSAqIGJlIHVzZWQgbGF0 ZXIgdG8gZmV0Y2ggdGhlIHR1cGxlcy4gIFNlZSBSZWxhdGlvbkZpbmRSZXBsVHVwbGVCeUluZGV4 KCkuCisJICogVGhlIGdpdmVuIGluZGV4IGFjY2VzcyBtZXRob2QgbXVzdCBpbXBsZW1lbnQgImFt Z2V0dHVwbGUiIG9yCisJICogImFtZ2V0YmF0Y2giLCB3aGljaCB3aWxsIGJlIHVzZWQgbGF0ZXIg dG8gZmV0Y2ggdGhlIHR1cGxlcy4gIFNlZQorCSAqIFJlbGF0aW9uRmluZFJlcGxUdXBsZUJ5SW5k ZXgoKS4KIAkgKi8KLQlpZiAoR2V0SW5kZXhBbVJvdXRpbmVCeUFtSWQoaWR4cmVsLT5yZF9yZWwt PnJlbGFtLCBmYWxzZSktPmFtZ2V0dHVwbGUgPT0gTlVMTCkKKwlhbXJvdXRpbmUgPSBHZXRJbmRl eEFtUm91dGluZUJ5QW1JZChpZHhyZWwtPnJkX3JlbC0+cmVsYW0sIGZhbHNlKTsKKwlpZiAoYW1y b3V0aW5lLT5hbWdldHR1cGxlID09IE5VTEwgJiYgYW1yb3V0aW5lLT5hbWdldGJhdGNoID09IE5V TEwpCiAJCXJldHVybiBmYWxzZTsKIAogCXJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L2FtdXRpbHMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9hbXV0aWxz LmMKaW5kZXggYzgxZmI2MWEwLi5kZGZkMWI1NWMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0 aWxzL2FkdC9hbXV0aWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2FtdXRpbHMuYwpA QCAtMzYzLDEwICszNjMsMTEgQEAgaW5kZXhhbV9wcm9wZXJ0eShGdW5jdGlvbkNhbGxJbmZvIGZj aW5mbywKIAkJCQlQR19SRVRVUk5fQk9PTChyb3V0aW5lLT5hbWNsdXN0ZXJhYmxlKTsKIAogCQkJ Y2FzZSBBTVBST1BfSU5ERVhfU0NBTjoKLQkJCQlQR19SRVRVUk5fQk9PTChyb3V0aW5lLT5hbWdl dHR1cGxlID8gdHJ1ZSA6IGZhbHNlKTsKKwkJCQlQR19SRVRVUk5fQk9PTChyb3V0aW5lLT5hbWdl dHR1cGxlICE9IE5VTEwgfHwKKwkJCQkJCQkgICByb3V0aW5lLT5hbWdldGJhdGNoICE9IE5VTEwp OwogCiAJCQljYXNlIEFNUFJPUF9CSVRNQVBfU0NBTjoKLQkJCQlQR19SRVRVUk5fQk9PTChyb3V0 aW5lLT5hbWdldGJpdG1hcCA/IHRydWUgOiBmYWxzZSk7CisJCQkJUEdfUkVUVVJOX0JPT0wocm91 dGluZS0+YW1nZXRiaXRtYXAgIT0gTlVMTCk7CiAKIAkJCWNhc2UgQU1QUk9QX0JBQ0tXQVJEX1ND QU46CiAJCQkJUEdfUkVUVVJOX0JPT0wocm91dGluZS0+YW1jYW5iYWNrd2FyZCk7CkBAIC0zOTIs NyArMzkzLDggQEAgaW5kZXhhbV9wcm9wZXJ0eShGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywKIAkJ CVBHX1JFVFVSTl9CT09MKHJvdXRpbmUtPmFtY2FubXVsdGljb2wpOwogCiAJCWNhc2UgQU1QUk9Q X0NBTl9FWENMVURFOgotCQkJUEdfUkVUVVJOX0JPT0wocm91dGluZS0+YW1nZXR0dXBsZSA/IHRy dWUgOiBmYWxzZSk7CisJCQlQR19SRVRVUk5fQk9PTChyb3V0aW5lLT5hbWdldHR1cGxlICE9IE5V TEwgfHwKKwkJCQkJCSAgIHJvdXRpbmUtPmFtZ2V0YmF0Y2ggIT0gTlVMTCk7CiAKIAkJY2FzZSBB TVBST1BfQ0FOX0lOQ0xVREU6CiAJCQlQR19SRVRVUk5fQk9PTChyb3V0aW5lLT5hbWNhbmluY2x1 ZGUpOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9hbWNoZWNrL3ZlcmlmeV9uYnRyZWUuYyBiL2NvbnRy aWIvYW1jaGVjay92ZXJpZnlfbmJ0cmVlLmMKaW5kZXggYjc0YWI1ZjdhLi5jODhhMGVjMWQgMTAw NjQ0Ci0tLSBhL2NvbnRyaWIvYW1jaGVjay92ZXJpZnlfbmJ0cmVlLmMKKysrIGIvY29udHJpYi9h bWNoZWNrL3ZlcmlmeV9uYnRyZWUuYwpAQCAtMzkzLDcgKzM5Myw3IEBAIGJ0X2NoZWNrX2V2ZXJ5 X2xldmVsKFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcHJlbCwgYm9vbCBoZWFwa2V5c3BhY2Us CiAJCQkgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSk7CiAKIAkvKgotCSAqIFRoaXMgYXNz ZXJ0aW9uIG1hdGNoZXMgdGhlIG9uZSBpbiBpbmRleF9nZXRuZXh0X3RpZCgpLiAgU2VlIHBhZ2UK KwkgKiBUaGlzIGFzc2VydGlvbiBtYXRjaGVzIHRoZSBvbmUgaW4gaGVhcGFtX2luZGV4c2Nhbi5j LiAgU2VlIHBhZ2UKIAkgKiByZWN5Y2xpbmcvInZpc2libGUgdG8gZXZlcnlvbmUiIG5vdGVzIGlu IG5idHJlZSBSRUFETUUuCiAJICovCiAJQXNzZXJ0KFRyYW5zYWN0aW9uSWRJc1ZhbGlkKFJlY2Vu dFhtaW4pKTsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvYmxvb20vYmx1dGlscy5jIGIvY29udHJpYi9i bG9vbS9ibHV0aWxzLmMKaW5kZXggNTExMWNkYzZkLi42MTM5ZmI5NTkgMTAwNjQ0Ci0tLSBhL2Nv bnRyaWIvYmxvb20vYmx1dGlscy5jCisrKyBiL2NvbnRyaWIvYmxvb20vYmx1dGlscy5jCkBAIC0x NDYsMTAgKzE0NiwxMiBAQCBibGhhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAkJLmFtYmVnaW5z Y2FuID0gYmxiZWdpbnNjYW4sCiAJCS5hbXJlc2NhbiA9IGJscmVzY2FuLAogCQkuYW1nZXR0dXBs ZSA9IE5VTEwsCisJCS5hbWdldGJhdGNoID0gTlVMTCwKKwkJLmFtdW5ndWFyZGJhdGNoID0gTlVM TCwKKwkJLmFta2lsbGl0ZW1zYmF0Y2ggPSBOVUxMLAogCQkuYW1nZXRiaXRtYXAgPSBibGdldGJp dG1hcCwKIAkJLmFtZW5kc2NhbiA9IGJsZW5kc2NhbiwKLQkJLmFtbWFya3BvcyA9IE5VTEwsCi0J CS5hbXJlc3RycG9zID0gTlVMTCwKKwkJLmFtcG9zcmVzZXQgPSBOVUxMLAogCQkuYW1lc3RpbWF0 ZXBhcmFsbGVsc2NhbiA9IE5VTEwsCiAJCS5hbWluaXRwYXJhbGxlbHNjYW4gPSBOVUxMLAogCQku YW1wYXJhbGxlbHJlc2NhbiA9IE5VTEwsCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvaW5kZXhh bS5zZ21sIGIvZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbAppbmRleCBmNDhkYTMxODUuLjE3MTUw NWE4ZCAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbAorKysgYi9kb2Mvc3Jj L3NnbWwvaW5kZXhhbS5zZ21sCkBAIC0xNjcsMTAgKzE2NywxMiBAQCB0eXBlZGVmIHN0cnVjdCBJ bmRleEFtUm91dGluZQogICAgIGFtYmVnaW5zY2FuX2Z1bmN0aW9uIGFtYmVnaW5zY2FuOwogICAg IGFtcmVzY2FuX2Z1bmN0aW9uIGFtcmVzY2FuOwogICAgIGFtZ2V0dHVwbGVfZnVuY3Rpb24gYW1n ZXR0dXBsZTsgICAgIC8qIGNhbiBiZSBOVUxMICovCisgICAgYW1nZXRiYXRjaF9mdW5jdGlvbiBh bWdldGJhdGNoOyAvKiBjYW4gYmUgTlVMTCAqLworICAgIGFtdW5ndWFyZGJhdGNoX2Z1bmN0aW9u IGFtdW5ndWFyZGJhdGNoOyAvKiBjYW4gYmUgTlVMTCAqLworICAgIGFta2lsbGl0ZW1zYmF0Y2hf ZnVuY3Rpb24gYW1raWxsaXRlbXNiYXRjaDsJLyogY2FuIGJlIE5VTEwgKi8KICAgICBhbWdldGJp dG1hcF9mdW5jdGlvbiBhbWdldGJpdG1hcDsgICAvKiBjYW4gYmUgTlVMTCAqLwogICAgIGFtZW5k c2Nhbl9mdW5jdGlvbiBhbWVuZHNjYW47Ci0gICAgYW1tYXJrcG9zX2Z1bmN0aW9uIGFtbWFya3Bv czsgICAgICAgLyogY2FuIGJlIE5VTEwgKi8KLSAgICBhbXJlc3RycG9zX2Z1bmN0aW9uIGFtcmVz dHJwb3M7ICAgICAvKiBjYW4gYmUgTlVMTCAqLworICAgIGFtcG9zcmVzZXRfZnVuY3Rpb24gYW1w b3NyZXNldDsgLyogY2FuIGJlIE5VTEwgKi8KIAogICAgIC8qIGludGVyZmFjZSBmdW5jdGlvbnMg dG8gc3VwcG9ydCBwYXJhbGxlbCBpbmRleCBzY2FucyAqLwogICAgIGFtZXN0aW1hdGVwYXJhbGxl bHNjYW5fZnVuY3Rpb24gYW1lc3RpbWF0ZXBhcmFsbGVsc2NhbjsgICAgLyogY2FuIGJlIE5VTEwg Ki8KQEAgLTY3Niw4ICs2NzgsMzggQEAgYW1iZWdpbnNjYW4gKFJlbGF0aW9uIGluZGV4UmVsYXRp b24sCiAgICA8ZW1waGFzaXM+bXVzdDwvZW1waGFzaXM+IGNyZWF0ZSB0aGlzIHN0cnVjdCBieSBj YWxsaW5nCiAgICA8ZnVuY3Rpb24+UmVsYXRpb25HZXRJbmRleFNjYW4oKTwvZnVuY3Rpb24+LiAg SW4gbW9zdCBjYXNlcwogICAgPGZ1bmN0aW9uPmFtYmVnaW5zY2FuPC9mdW5jdGlvbj4gZG9lcyBs aXR0bGUgYmV5b25kIG1ha2luZyB0aGF0IGNhbGwgYW5kIHBlcmhhcHMKLSAgIGFjcXVpcmluZyBs b2NrczsKKyAgIGFjcXVpcmluZyBsb2NrcyBhbmQgaW5pdGlhbGl6aW5nIHN0YW5kYXJkIDxzdHJ1 Y3RuYW1lPkluZGV4U2NhbkRlc2M8L3N0cnVjdG5hbWU+IGZpZWxkczsKICAgIHRoZSBpbnRlcmVz dGluZyBwYXJ0cyBvZiBpbmRleC1zY2FuIHN0YXJ0dXAgYXJlIGluIDxmdW5jdGlvbj5hbXJlc2Nh bjwvZnVuY3Rpb24+LgorICAgSW5kZXggYWNjZXNzIG1ldGhvZHMgdGhhdCB1c2UgdGhlIDxmdW5j dGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaW50ZXJmYWNlCisgICBtdXN0IGFsc28gc2V0IHRo ZSBmb2xsb3dpbmcgZmllbGRzIGluIHRoZSBzY2FuIGRlc2NyaXB0b3I6CisgICA8aXRlbWl6ZWRs aXN0PgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICA8bGl0ZXJhbD5zY2FuLSZn dDttYXhpdGVtc2JhdGNoPC9saXRlcmFsPjogdGhlIG1heGltdW0gbnVtYmVyIG9mIGl0ZW1zCisg ICAgICB0aGF0IGNhbiBhcHBlYXIgaW4gYSBzaW5nbGUgYmF0Y2ggKHR5cGljYWxseSBkZXJpdmVk IGZyb20gdGhlIGluZGV4IHBhZ2UKKyAgICAgIHNpemUsIGUuZy4sIDxsaXRlcmFsPk1heEluZGV4 VHVwbGVzUGVyUGFnZTwvbGl0ZXJhbD4pLgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4K KyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgPGxpdGVyYWw+c2Nhbi0mZ3Q7YmF0 Y2hfaW5kZXhfb3BhcXVlX3NpemU8L2xpdGVyYWw+OiB0aGUKKyAgICAgIDxmdW5jdGlvbj5NQVhB TElHTjwvZnVuY3Rpb24+J2Qgc2l6ZSBvZiB0aGUgaW5kZXggQU0ncyBwZXItYmF0Y2ggb3BhcXVl CisgICAgICBhcmVhLiAgRWFjaCBiYXRjaCBhbGxvY2F0aW9uIHJlc2VydmVzIHRoaXMgbXVjaCBz cGFjZSBpbW1lZGlhdGVseSBiZWZvcmUKKyAgICAgIHRoZSA8c3RydWN0bmFtZT5JbmRleFNjYW5C YXRjaERhdGE8L3N0cnVjdG5hbWU+IHBvaW50ZXIsIGZvciB1c2UgYnkgdGhlCisgICAgICBpbmRl eCBBTSB0byBzdG9yZSBwZXItcGFnZSBuYXZpZ2F0aW9uIHN0YXRlIChlLmcuLCBiYXRjaCBpbmRl eCBwYWdlJ3MKKyAgICAgIGJ1ZmZlciBwaW4gYW5kIHNpYmxpbmcgcGFnZSBsaW5rcykuCisgICAg IDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+Cisg ICAgICA8bGl0ZXJhbD5zY2FuLSZndDtiYXRjaF90dXBsZXNfd29ya3NwYWNlPC9saXRlcmFsPjog dGhlIHNpemUgaW4gYnl0ZXMKKyAgICAgIG9mIHRoZSBwZXItYmF0Y2ggdHVwbGUgc3RvcmFnZSB3 b3Jrc3BhY2UgdXNlZCBmb3IgaW5kZXgtb25seSBzY2FucworICAgICAgKHR5cGljYWxseSA8bGl0 ZXJhbD5CTENLU1o8L2xpdGVyYWw+KSwgb3IgMCBpZiB0aGUgaW5kZXggQU0gZG9lcyBub3QKKyAg ICAgIHN1cHBvcnQgaW5kZXgtb25seSBzY2Fucy4gIFRoZSB3b3Jrc3BhY2UgaXMgYWNjZXNzaWJs ZSB2aWEKKyAgICAgIDxzdHJ1Y3RmaWVsZD5iYXRjaC0mZ3Q7Y3VyclR1cGxlczwvc3RydWN0Zmll bGQ+LgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvaXRlbWl6ZWRsaXN0Pgog ICA8L3BhcmE+CiAKICAgPHBhcmE+CkBAIC03NDksNiArNzgxLDI2MyBAQCBhbWdldHR1cGxlIChJ bmRleFNjYW5EZXNjIHNjYW4sCiAgICA8c3RydWN0ZmllbGQ+YW1nZXR0dXBsZTwvc3RydWN0Zmll bGQ+IGZpZWxkIGluIGl0cyA8c3RydWN0bmFtZT5JbmRleEFtUm91dGluZTwvc3RydWN0bmFtZT4K ICAgIHN0cnVjdCBtdXN0IGJlIHNldCB0byBOVUxMLgogICA8L3BhcmE+CisgIDxub3RlPgorICAg PHBhcmE+CisgICAgQXMgb2YgPHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiB2 ZXJzaW9uIDE5LCBtYXJrL3Jlc3RvcmUgb2YKKyAgICBzY2FuIHBvc2l0aW9ucyBpcyBvbmx5IHN1 cHBvcnRlZCBmb3Igc2NhbnMgdGhhdCB1c2UgdGhlCisgICAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8 L2Z1bmN0aW9uPiBpbnRlcmZhY2UuCisgICAgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9u PiBzY2FucyBkbyBub3Qgc3VwcG9ydCBtYXJrL3Jlc3RvcmUuICBUaGUKKyAgICBtYXJrL3Jlc3Rv cmUgaW1wbGVtZW50YXRpb24gbGl2ZXMgaW4gdGhlIHRhYmxlIEFNLCB0aHJvdWdoIGl0cworICAg IDxmdW5jdGlvbj50YWJsZV9pbmRleF9mZXRjaF9tYXJrcG9zPC9mdW5jdGlvbj4gYW5kCisgICAg PGZ1bmN0aW9uPnRhYmxlX2luZGV4X2ZldGNoX3Jlc3RycG9zPC9mdW5jdGlvbj4gaW1wbGVtZW50 YXRpb25zLgorICAgPC9wYXJhPgorICA8L25vdGU+CisKKyAgPHBhcmE+Cis8cHJvZ3JhbWxpc3Rp bmc+CitJbmRleFNjYW5CYXRjaAorYW1nZXRiYXRjaCAoSW5kZXhTY2FuRGVzYyBzY2FuLAorICAg ICAgICAgICAgSW5kZXhTY2FuQmF0Y2ggcHJpb3JiYXRjaCwKKyAgICAgICAgICAgIFNjYW5EaXJl Y3Rpb24gZGlyZWN0aW9uKTsKKzwvcHJvZ3JhbWxpc3Rpbmc+CisgICBSZXR1cm4gdGhlIG5leHQg YmF0Y2ggb2YgaW5kZXggdHVwbGVzIGluIHRoZSBnaXZlbiBzY2FuLCBtb3ZpbmcgaW4gdGhlCisg ICBnaXZlbiBkaXJlY3Rpb24gKGZvcndhcmQgb3IgYmFja3dhcmQgaW4gdGhlIGluZGV4KS4gIFJl dHVybnMgYW4gaW5zdGFuY2Ugb2YKKyAgIDx0eXBlPkluZGV4U2NhbkJhdGNoPC90eXBlPiB3aXRo IGluZGV4IHR1cGxlcyBsb2FkZWQsIG9yCisgICA8bGl0ZXJhbD5OVUxMPC9saXRlcmFsPiBpZiB0 aGVyZSBhcmUgbm8gbW9yZSBpbmRleCB0dXBsZXMgaW4gdGhlIGdpdmVuCisgICBzY2FuIGRpcmVj dGlvbi4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgVGhlIDxmdW5jdGlvbj5hbWdldGJhdGNo PC9mdW5jdGlvbj4gaW50ZXJmYWNlIGlzIGFuIGFsdGVybmF0aXZlIHRvCisgICA8ZnVuY3Rpb24+ YW1nZXR0dXBsZTwvZnVuY3Rpb24+IHRoYXQgcmV0dXJucyBtYXRjaGluZyBpbmRleCBlbnRyaWVz IGluIGJhdGNoZXMKKyAgIHJhdGhlciB0aGFuIG9uZSBhdCBhIHRpbWUuICBCeSByZXR1cm5pbmcg YWxsIG1hdGNoaW5nIGluZGV4IGVudHJpZXMgZnJvbSBhCisgICBzaW5nbGUgaW5kZXggcGFnZSB0 b2dldGhlciwgdGhlIHRhYmxlIEFNIGdhaW5zIHZpc2liaWxpdHkgaW50byB3aGljaCB0YWJsZQor ICAgYmxvY2tzIHdpbGwgYmUgbmVlZGVkIGluIHRoZSBuZWFyIGZ1dHVyZS4KKyAgPC9wYXJhPgor CisgIDxwYXJhPgorICAgVGhlIHRhYmxlIEFNIHBhc3NlcyA8bGl0ZXJhbD5wcmlvcmJhdGNoPC9s aXRlcmFsPiB0byBpbmRpY2F0ZSB3aGVyZSB0aGUKKyAgIGluZGV4IEFNIHNob3VsZCBjb250aW51 ZSBzY2FubmluZyBmcm9tIChvciA8bGl0ZXJhbD5OVUxMPC9saXRlcmFsPiBvbiB0aGUKKyAgIGZp cnN0IGNhbGwgZm9yIHRoZSBzY2FuKS4gIFRoZSBpbmRleCBBTSB1c2VzIGluZm9ybWF0aW9uIGZy b20KKyAgIDxsaXRlcmFsPnByaW9yYmF0Y2g8L2xpdGVyYWw+IHRvIGRldGVybWluZSB3aGljaCBp bmRleCBwYWdlIHRvIHJlYWQgbmV4dC4KKyAgIFVubGlrZSA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwv ZnVuY3Rpb24+LCB3aGVyZSB0aGUgaW5kZXggQU0gbWFpbnRhaW5zIGl0cworICAgb3duIHNjYW4g cG9zaXRpb24sIHdpdGggPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBpdCBpcyB0aGUg Y2FsbGVyCisgICB0aGF0IGNvbnRyb2xzIHRoZSBwcm9ncmVzcyBvZiB0aGUgc2NhbiB0aHJvdWdo IHRoZSBpbmRleC4gIFRoZSBjYWxsZXIKKyAgIHdpbGwgdHlwaWNhbGx5IHBhc3MgdGhlIG1vc3Qg cmVjZW50bHkgcmV0dXJuZWQgYmF0Y2gsIGJ1dCB0aGlzIGlzIG5vdAorICAgZ3VhcmFudGVlZCAm bWRhc2g7IGZvciBleGFtcGxlLCBmb2xsb3dpbmcgdGhlIHJlc3RvcmF0aW9uIG9mIGEgbWFya2Vk CisgICBwb3NpdGlvbiwgYW4gZWFybGllciBiYXRjaCBtYXkgYmUgcGFzc2VkIGluc3RlYWQuCisg IDwvcGFyYT4KKworICA8cGFyYT4KKyAgIEEgYmF0Y2ggcmV0dXJuZWQgYnkgPGZ1bmN0aW9uPmFt Z2V0YmF0Y2g8L2Z1bmN0aW9uPiBpcyBhc3NvY2lhdGVkIHdpdGggYW4KKyAgIGluZGV4IHBhZ2Ug Y29udGFpbmluZyBhdCBsZWFzdCBvbmUgbWF0Y2hpbmcgaXRlbS90dXBsZS4gIEEgYnVmZmVyCisg ICBwaW4gY2FuIGJlIGhlbGQgb250byBieSB0aGUgdGFibGUgQU0gYXMgYW4gaW50ZXJsb2NrIGFn YWluc3QgY29uY3VycmVudCBUSUQKKyAgIHJlY3ljbGluZyBieSA8Y29tbWFuZD5WQUNVVU08L2Nv bW1hbmQ+LiAgVGhlIHRhYmxlIEFNIGRyb3BzIHRoaXMgaW50ZXJsb2NrCisgICBieSBjYWxsaW5n IDxmdW5jdGlvbj5hbXVuZ3VhcmRiYXRjaDwvZnVuY3Rpb24+IHdoZW4gaXQgaXMgc2FmZSB0byBk byBzby4KKyAgIFNlZSA8eHJlZiBsaW5rZW5kPSJpbmRleC1sb2NraW5nIi8+IGZvciBkZXRhaWxz IG9uIGJ1ZmZlciBwaW4gbWFuYWdlbWVudAorICAgZHVyaW5nIGluZGV4IHNjYW5zLgorICA8L3Bh cmE+CisKKyAgPHBhcmE+CisgICBBIDx0eXBlPkluZGV4U2NhbkJhdGNoPC90eXBlPiB0aGF0IGlz IHJldHVybmVkIGJ5CisgICA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGlzIG5vIGxv bmdlciBtYW5hZ2VkIGJ5IHRoZSBhY2Nlc3MgbWV0aG9kLgorICAgSXQgaXMgdXAgdG8gdGhlIHRh YmxlIEFNIGNhbGxlciB0byBkZWNpZGUgd2hlbiBpdCBzaG91bGQgYmUgcmVsZWFzZWQuICBOb3Rl CisgICBhbHNvIHRoYXQgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBmdW5jdGlvbnMg bXVzdCBuZXZlciBtb2RpZnkgdGhlCisgICA8c3RydWN0ZmllbGQ+cHJpb3JiYXRjaDwvc3RydWN0 ZmllbGQ+IHBhcmFtZXRlci4gIFRoZSBjb3JlCisgICA8ZmlsZW5hbWU+c3JjL2JhY2tlbmQvYWNj ZXNzL25idHJlZS88L2ZpbGVuYW1lPiBpbXBsZW1lbnRhdGlvbiBwcm92aWRlcyBhCisgICByZWZl cmVuY2UgZXhhbXBsZXMgb2YgdGhlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaW50 ZXJmYWNlLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBUaGUgc2FtZSBjYXZlYXRzIGRlc2Ny aWJlZCBmb3IgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBhcHBseSBoZXJlCisgICB0 b286IGFuIGVudHJ5IGluIHRoZSByZXR1cm5lZCBiYXRjaCBtZWFucyBvbmx5IHRoYXQgdGhlIGlu ZGV4IGNvbnRhaW5zCisgICBhbiBlbnRyeSB0aGF0IG1hdGNoZXMgdGhlIHNjYW4ga2V5cywgbm90 IHRoYXQgdGhlIHR1cGxlIG5lY2Vzc2FyaWx5IHN0aWxsCisgICBleGlzdHMgaW4gdGhlIGhlYXAg b3Igd2lsbCBwYXNzIHRoZSBjYWxsZXIncyBzbmFwc2hvdCB0ZXN0LgorICA8L3BhcmE+CisKKyAg PHBhcmE+CisgICBJbmRleCBhY2Nlc3MgbWV0aG9kcyB1c2luZyA8ZnVuY3Rpb24+YW1nZXRiYXRj aDwvZnVuY3Rpb24+IG11c3Qgc2V0CisgICA8bGl0ZXJhbD5zY2FuLSZndDt4c19yZWNoZWNrPC9s aXRlcmFsPiB0byBpbmRpY2F0ZSB3aGV0aGVyIHJlY2hlY2tpbmcgb2YKKyAgIHNjYW4ga2V5cyBp cyByZXF1aXJlZCwgaW4gdGhlIHNhbWUgd2F5IGFzIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5j dGlvbj4KKyAgIGRvZXMuIEhvd2V2ZXIsIDxsaXRlcmFsPnNjYW4tJmd0O3hzX3JlY2hlY2s8L2xp dGVyYWw+IG11c3QgYmUgc2V0IGNvbnNpc3RlbnRseQorICAgZm9yIGFuIGVudGlyZSBzY2FuIHJh dGhlciB0aGFuIHZhcnlpbmcgb24gYSBwZXItdHVwbGUgYmFzaXMuIFRoaXMgaXMgYSBrZXkKKyAg IGRpZmZlcmVuY2UgZnJvbSA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+LCB3aGljaCBj YW4gc2V0CisgICA8bGl0ZXJhbD5zY2FuLSZndDt4c19yZWNoZWNrPC9saXRlcmFsPiBpbmRlcGVu ZGVudGx5IGZvciBlYWNoIHR1cGxlIGl0IHJldHVybnMuCisgICBJbmRleCBhY2Nlc3MgbWV0aG9k cyB0aGF0IHJlcXVpcmUgZ3JhbnVsYXIgY29udHJvbCBvdmVyCisgICA8bGl0ZXJhbD5zY2FuLSZn dDt4c19yZWNoZWNrPC9saXRlcmFsPiBtdXN0IHVzZSB0aGUgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8 L2Z1bmN0aW9uPgorICAgaW50ZXJmYWNlIGluc3RlYWQgb2YgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8 L2Z1bmN0aW9uPi4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgU2ltaWxhcmx5LCB0aGUgPGZ1 bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBpbnRlcmZhY2UgZG9lcyBub3QgY3VycmVudGx5 CisgICBzdXBwb3J0IGluZGV4LW9ubHkgc2NhbnMgdGhhdCByZXR1cm4gZGF0YSBpbiB0aGUgZm9y bSBvZiBhCisgICA8c3RydWN0bmFtZT5IZWFwVHVwbGU8L3N0cnVjdG5hbWU+IHBvaW50ZXIuICBJ bmRleC1vbmx5IHNjYW5zIHdvcmsgYnkKKyAgIGNvcHlpbmcgPHN0cnVjdG5hbWU+SW5kZXhUdXBs ZTwvc3RydWN0bmFtZT4gcmVjb3JkcyBmcm9tIGluZGV4IHBhZ2VzIGludG8gYQorICAgbG9jYWwg YnVmZmVyIGFzc29jaWF0ZWQgd2l0aCBlYWNoIGJhdGNoLiAgPGxpdGVyYWw+eHNfaXR1cGRlc2M8 L2xpdGVyYWw+CisgICB3b3JrcyBpbiB0aGUgc2FtZSB3YXkgYXMgYWxyZWFkeSBkZXNjcmliZWQg Zm9yIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4uCisgICBUaGUgaW5kZXggYWNjZXNz IG1ldGhvZCBtdXN0IG5vdCBzZXQgdGhlIDxsaXRlcmFsPnNjYW4tJmd0O3hzX2l0dXA8L2xpdGVy YWw+CisgICBmaWVsZCBpdHNlbGYuCisgICBXaXRoIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5j dGlvbj4sIHRoZSBpbmRleCBBTSBzZXRzCisgICA8bGl0ZXJhbD5zY2FuLSZndDt4c19oaXR1cDwv bGl0ZXJhbD4gdG8gcG9pbnQgdG8gYSByZWNvbnN0cnVjdGVkCisgICA8c3RydWN0bmFtZT5IZWFw VHVwbGU8L3N0cnVjdG5hbWU+IHdob3NlIGxpZmV0aW1lIGV4dGVuZHMgdW50aWwgdGhlIG5leHQK KyAgIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gY2FsbCAmbWRhc2g7IG9ubHkgb25l IHR1cGxlIGlzIHZhbGlkIGF0IGEKKyAgIHRpbWUuICBXaXRoIDxmdW5jdGlvbj5hbWdldGJhdGNo PC9mdW5jdGlvbj4sIG11bHRpcGxlIGJhdGNoZXMgYXJlIGhlbGQgb3BlbgorICAgc2ltdWx0YW5l b3VzbHkgYW5kIGl0ZW1zIGFyZSBjb25zdW1lZCBhc3luY2hyb25vdXNseSBieSB0aGUgdGFibGUg QU0sIHNvCisgICB0aGVyZSBpcyBubyBlcXVpdmFsZW50IHNpbmdsZS10dXBsZSBsaWZldGltZSBm b3IgcGVyLWl0ZW0KKyAgIDxzdHJ1Y3RuYW1lPkhlYXBUdXBsZTwvc3RydWN0bmFtZT4gcG9pbnRl cnMuICBUaGUgYmF0Y2ggaW5mcmFzdHJ1Y3R1cmUKKyAgIHByb3ZpZGVzIHBlci1iYXRjaCBzdG9y YWdlIGZvciA8c3RydWN0bmFtZT5JbmRleFR1cGxlPC9zdHJ1Y3RuYW1lPiBjb3BpZXMsCisgICBi dXQgaGFzIG5vIGFuYWxvZ291cyBtZWNoYW5pc20gZm9yIDxzdHJ1Y3RuYW1lPkhlYXBUdXBsZTwv c3RydWN0bmFtZT4gZGF0YQorICAgKHVzZWQgYnkgc29tZSBpbmRleCBBTXMgZm9yIHJlY29uc3Ry dWN0ZWQgdHVwbGVzIHRoYXQgbWlnaHQgbm90IGZpdCBpbgorICAgPHN0cnVjdG5hbWU+SW5kZXhU dXBsZTwvc3RydWN0bmFtZT4gZm9ybWF0KS4gIFRoaXMgbGltaXRhdGlvbiBjb3VsZCBiZQorICAg YWRkcmVzc2VkIGluIGEgZnV0dXJlIHZlcnNpb24gb2YgPHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8 L3Byb2R1Y3RuYW1lPi4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgVGhlIGluZGV4IGFjY2Vz cyBtZXRob2QgbXVzdCBwcm92aWRlIGVpdGhlciA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rp b24+CisgICBvciA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+LCBidXQgbm90IGJvdGgu CisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFRoZSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVu Y3Rpb24+IGZ1bmN0aW9uIG5lZWQgb25seSBiZSBwcm92aWRlZCBpZiB0aGUKKyAgIGFjY2VzcyBt ZXRob2Qgc3VwcG9ydHMgPHF1b3RlPnBsYWluPC9xdW90ZT4gaW5kZXggc2NhbnMuICBJZiBpdCBk b2Vzbid0LAorICAgdGhlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gZmllbGQgaW4g aXRzCisgICA8c3RydWN0bmFtZT5JbmRleEFtUm91dGluZTwvc3RydWN0bmFtZT4gc3RydWN0IG11 c3QgYmUgc2V0IHRvIE5VTEwuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKzxwcm9ncmFtbGlzdGlu Zz4KK3ZvaWQKK2FtdW5ndWFyZGJhdGNoIChJbmRleFNjYW5EZXNjIHNjYW4sCisgICAgICAgICAg ICAgICAgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpOworPC9wcm9ncmFtbGlzdGluZz4KKyAgIENhbGxl ZCBieSB0aGUgdGFibGUgQU0gKHZpYQorICAgPGZ1bmN0aW9uPnRhYmxlYW1fdXRpbF91bmd1YXJk X2JhdGNoPC9mdW5jdGlvbj4pIHdoZW4gaXQgaXMgc2FmZSB0byBkcm9wCisgICB0aGUgVElEIHJl Y3ljbGluZyBpbnRlcmxvY2sgdGhhdCB0aGUgaW5kZXggQU0gaG9sZHMgb24gdGhlIGJhdGNoJ3Mg aW5kZXgKKyAgIGxlYWYgcGFnZSwgd2hpY2ggcHJldmVudHMgY29uY3VycmVudCBUSUQgcmVjeWNs aW5nIGJ5CisgICA8Y29tbWFuZD5WQUNVVU08L2NvbW1hbmQ+LgorICAgRm9ybWFsbHksIGFuIGlu ZGV4IEFNIG1heSBob2xkIGEgZGlmZmVyZW50IGtpbmQgb2YgaW50ZXJsb2NrLCBvciBtdWx0aXBs ZQorICAgaW50ZXJsb2NrcywgaW4gaXRzIHBlci1iYXRjaCBvcGFxdWUgYXJlYSwgYnV0IGluIHBy YWN0aWNlIHRoZSBidWlsdC1pbgorICAgaW5kZXggQU0gdGhhdCBzdXBwb3J0cyA8ZnVuY3Rpb24+ YW1nZXRiYXRjaDwvZnVuY3Rpb24+ICZtZGFzaDsgQi10cmVlCisgICAmbWRhc2g7IGhvbGRzIGEg c2luZ2xlIGJ1ZmZlciBwaW4uICBTZWUgPHhyZWYgbGlua2VuZD0iaW5kZXgtbG9ja2luZyIvPiBm b3IKKyAgIGRldGFpbHMgb24gYnVmZmVyIHBpbiBtYW5hZ2VtZW50IGR1cmluZyBpbmRleCBzY2Fu cy4gIFRoaXMgZnVuY3Rpb24gd2lsbCBiZQorICAgY2FsbGVkIGF0IG1vc3Qgb25jZSBmb3IgZWFj aCBndWFyZGVkIGJhdGNoOyBpdCBpcyBub3QgY2FsbGVkIHdoZW4gdGhlIGluZGV4CisgICBBTSBo YXMgYWxyZWFkeSB1bmd1YXJkZWQgdGhlIGJhdGNoIGl0c2VsZiAoYXMgaXQgZG9lcyB3aGVuCisg ICA8c3RydWN0ZmllbGQ+YmF0Y2hJbW1lZGlhdGVVbmd1YXJkPC9zdHJ1Y3RmaWVsZD4gaXMgdHJ1 ZSwgd2hpY2ggaXMgdGhlCisgICBjb21tb24gY2FzZSkuCisgIDwvcGFyYT4KKworICA8bm90ZT4K KyAgIDxwYXJhPgorICAgIFRoZSBpbmRleCBBTSBtYXkgY2hvb3NlIHRvIHJldGFpbiBpdHMgb3du IGJ1ZmZlciBwaW5zIHdoZW4gdGhpcyBzZXJ2ZXMgYW4KKyAgICBpbnRlcm5hbCBwdXJwb3NlIChm b3IgZXhhbXBsZSwgbWFpbnRhaW5pbmcgYSBkZXNjZW50IHN0YWNrIG9mIHBpbm5lZCBpbmRleAor ICAgIHBhZ2VzIGZvciByZXVzZSBhY3Jvc3MgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9u PiBjYWxscykuICBIb3dldmVyLAorICAgIGFueSBzY2hlbWUgdGhhdCByZXRhaW5zIGJ1ZmZlciBw aW5zIG1hbmFnZWQgYnkgdGhlIGluZGV4IEFNIG11c3QgYmUgc3VyZQorICAgIHRvIGZyZWUgdGhl IHBpbnMgYXQgYW4gb3Bwb3J0dW5lIHBvaW50IChhdCBhIG1pbmltdW0gd2hlbmV2ZXIKKyAgICA8 ZnVuY3Rpb24+YW1lbmRzY2FuPC9mdW5jdGlvbj4gaXMgY2FsbGVkLCBhbmQgdHlwaWNhbGx5IHdo ZW4KKyAgICA8ZnVuY3Rpb24+YW1yZXNjYW48L2Z1bmN0aW9uPiBpcyBjYWxsZWQpLiAgSXQgbXVz dCBhbHNvIGtlZXAgdGhlIG51bWJlciBvZgorICAgIHJldGFpbmVkIHBpbnMgZml4ZWQgYW5kIHNt YWxsLgorICAgPC9wYXJhPgorICA8L25vdGU+CisKKyAgPHBhcmE+CisgICBUaGUgPGZ1bmN0aW9u PmFtdW5ndWFyZGJhdGNoPC9mdW5jdGlvbj4gZnVuY3Rpb24gaXMgcmVxdWlyZWQgZm9yIGFueSBp bmRleAorICAgYWNjZXNzIG1ldGhvZCB0aGF0IHByb3ZpZGVzIDxmdW5jdGlvbj5hbWdldGJhdGNo PC9mdW5jdGlvbj4uCisgIDwvcGFyYT4KKworICA8cGFyYT4KKzxwcm9ncmFtbGlzdGluZz4KK3Zv aWQKK2Fta2lsbGl0ZW1zYmF0Y2ggKEluZGV4U2NhbkRlc2Mgc2NhbiwKKyAgICAgICAgICAgICAg ICAgIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKKzwvcHJvZ3JhbWxpc3Rpbmc+CisgICBDYWxsZWQg YnkgdGhlIHRhYmxlIEFNIHdoZW4gaXQgaGFzIGZpbmlzaGVkIHByb2Nlc3NpbmcgYSBiYXRjaCB0 aGF0CisgICBjb250YWlucyBkZWFkIGl0ZW1zLCB0byBzZXQgPGxpdGVyYWw+TFBfREVBRDwvbGl0 ZXJhbD4gYml0cyBpbiB0aGUgYmF0Y2gncworICAgaW5kZXggcGFnZS4gIFRoZSBiYXRjaCdzIGlu ZGV4IHBhZ2Ugd2lsbCBub3QgYmUgbG9ja2VkIGJ5IHRoZSBjYWxsZXI7IHRoZQorICAgaW5kZXgg QU0gbXVzdCBhY3F1aXJlIGFuZCByZWxlYXNlIGl0cyBvd24gbG9jayAoYW5kIHBpbikgb24gdGhl IGluZGV4IHBhZ2UuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIEltcGxlbWVudGluZyA8ZnVu Y3Rpb24+YW1raWxsaXRlbXNiYXRjaDwvZnVuY3Rpb24+IGlzIG9wdGlvbmFsIGZvcgorICAgPGZ1 bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBpbmRleCBBTXMgKHRob3NlIHRoYXQgZG9uJ3Qg Y2FuIGxlYXZlCisgICB0aGUgZmllbGQgc2V0IHRvIDxsaXRlcmFsPk5VTEw8L2xpdGVyYWw+KSwg YnV0IGRvaW5nIHNvIGlzIHJlY29tbWVuZGVkIGZvcgorICAgcGVyZm9ybWFuY2UsIGFzIGl0IGFs bG93cyBmdXR1cmUgc2NhbnMgdG8gc2tpcCBrbm93bi1kZWFkIGluZGV4IGVudHJpZXMuCisgICBU aGUgY29yZSBpbmRleCBhY2Nlc3MgbWV0aG9kIHRoYXQgY3VycmVudGx5IHN1cHBvcnRzCisgICA8 ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IChCLXRyZWUpIGltcGxlbWVudHMKKyAgIDxs aXRlcmFsPkxQX0RFQUQ8L2xpdGVyYWw+IG1hcmtpbmcsIHRob3VnaCB0aGlyZC1wYXJ0eSBpbmRl eCBhY2Nlc3MgbWV0aG9kcworICAgYXJlIGZyZWUgdG8gY2hvb3NlIHdoZXRoZXIgdG8gaW1wbGVt ZW50IHRoaXMgZmVhdHVyZS4gIFRoZSB0YWJsZSBBTSBtYXkKKyAgIGNhbGwgPGZ1bmN0aW9uPnRh YmxlYW1fdXRpbF9zY2FucG9zX2tpbGxpdGVtPC9mdW5jdGlvbj4gdG8gbWFyayBkZWFkIGl0ZW1z IGFzCisgICB0aGUgc2NhbiBwcm9ncmVzc2VzLiAgSWYgdGhlIGJhdGNoIGNvbnRhaW5zIGFueSBz dWNoIGRlYWQgaXRlbXMsIHRoZSBiYXRjaCdzCisgICA8c3RydWN0ZmllbGQ+ZGVhZEl0ZW1zPC9z dHJ1Y3RmaWVsZD4gYXJyYXkgd2lsbCBoYXZlIGJlZW4gc29ydGVkIGFuZAorICAgZGVkdXBsaWNh dGVkIGJlZm9yZSA8ZnVuY3Rpb24+YW1raWxsaXRlbXNiYXRjaDwvZnVuY3Rpb24+IGlzIGNhbGxl ZCwgd2l0aAorICAgaXRlbSBvZmZzZXRzIGFwcGVhcmluZyBpbiBhc2NlbmRpbmcgb3JkZXIgKHRo YXQgaXMsIGluIGluZGV4IHBhZ2Ugb3JkZXIsCisgICB3aGljaCBpcyBhbHNvIGJhdGNoIG9yZGVy KSBhbmQgbm8gb2Zmc2V0IGFwcGVhcmluZyBtb3JlIHRoYW4gb25jZS4gIEluZGV4CisgICBhY2Nl c3MgbWV0aG9kcyBjYW4gcmVseSBvbiB0aGlzIG9yZGVyaW5nIHdoZW4gcHJvY2Vzc2luZyBkZWFk IGl0ZW1zOiB0aGUKKyAgIDxzdHJ1Y3RmaWVsZD5kZWFkSXRlbXM8L3N0cnVjdGZpZWxkPiBhcnJh eSBjYW4gYmUgd2Fsa2VkIGluIGxvY2tzdGVwIHdpdGgKKyAgIHRoZSBpbmRleCBwYWdlJ3MgaXRl bSBwb2ludGVycywgc2luY2UgYm90aCBhcmUgaW4gYXNjZW5kaW5nIHBhZ2Ugb2Zmc2V0CisgICBu dW1iZXIgb3JkZXIuICBUaGlzIGFsc28gbWVhbnMgdGhlIHRhYmxlIEFNIG5lZWQgbm90IGNhbGwK KyAgIDxmdW5jdGlvbj50YWJsZWFtX3V0aWxfc2NhbnBvc19raWxsaXRlbTwvZnVuY3Rpb24+IGlu IGFueSBwYXJ0aWN1bGFyIG9yZGVyLgorICA8L3BhcmE+CisKKyAgPG5vdGU+CisgICA8cGFyYT4K KyAgICBJbmRleCBhY2Nlc3MgbWV0aG9kcyB1c2luZyA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVu Y3Rpb24+IHJlbHkgb24gdGhlCisgICAgPHN0cnVjdGZpZWxkPmtpbGxfcHJpb3JfdHVwbGU8L3N0 cnVjdGZpZWxkPiBtZWNoYW5pc20gaW5zdGVhZCB0byBtYXJrIGRlYWQKKyAgICB0dXBsZXM7IHRo ZSA8ZmlsZW5hbWU+c3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvPC9maWxlbmFtZT4gaW1wbGVtZW50 YXRpb24KKyAgICBwcm92aWRlcyBhIHJlZmVyZW5jZSBleGFtcGxlLgorICAgPC9wYXJhPgorICA8 L25vdGU+CisKKyAgPHBhcmE+CisgICBXaGVuIGltcGxlbWVudGluZyA8ZnVuY3Rpb24+YW1raWxs aXRlbXNiYXRjaDwvZnVuY3Rpb24+LCB0aGUgaW5kZXggQU0KKyAgIG11c3QgdmVyaWZ5IHRoYXQg dGhlIGluZGV4IHBhZ2UgaGFzIG5vdCBiZWVuIG1vZGlmaWVkIHNpbmNlIHRoZSBiYXRjaCB3YXMK KyAgIG9yaWdpbmFsbHkgcmVhZC4gIFRoZSBzdGFuZGFyZCB3YXkgdG8gZG8gdGhpcyBpcyB0byBj YWxsCisgICA8ZnVuY3Rpb24+aW5kZXhhbV91dGlsX3VubG9ja19iYXRjaDwvZnVuY3Rpb24+IGR1 cmluZworICAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiwgd2hpY2ggcmVsZWFzZXMg dGhlIGluZGV4IHBhZ2UgbG9jayBhbmQKKyAgIHNhdmVzIHRoZSBwYWdlIExTTiBpbgorICAgdGhl IGJhdGNoJ3MgPHN0cnVjdGZpZWxkPmxzbjwvc3RydWN0ZmllbGQ+IGZpZWxkLiAgTGF0ZXIsIHdp dGhpbgorICAgPGZ1bmN0aW9uPmFta2lsbGl0ZW1zYmF0Y2g8L2Z1bmN0aW9uPiwgdGhlIGluZGV4 IEFNIHJlLXJlYWRzIHRoZSBwYWdlLAorICAgY29tcGFyZXMgdGhlIGN1cnJlbnQgcGFnZSBMU04g YWdhaW5zdAorICAgPHN0cnVjdGZpZWxkPmJhdGNoLSZndDtsc248L3N0cnVjdGZpZWxkPiwgYW5k IGdpdmVzIHVwIG9uIHNldHRpbmcKKyAgIDxsaXRlcmFsPkxQX0RFQUQ8L2xpdGVyYWw+IGJpdHMg aWYgdGhlIExTTiBoYXMgYWR2YW5jZWQuICBBbiBhZHZhbmNlZCBMU04KKyAgIGluZGljYXRlcyB0 aGF0IHRoZSBwYWdlIHdhcyBtb2RpZmllZCAmbWRhc2g7IHBvc3NpYmx5IGJ5CisgICA8Y29tbWFu ZD5WQUNVVU08L2NvbW1hbmQ+IHJlY3ljbGluZyB0YWJsZSBUSURzICZtZGFzaDsgc28gaXQgd291 bGQgYmUKKyAgIHVuc2FmZSB0byBhc3N1bWUgdGhhdCBpbmRleCBlbnRyaWVzIHN0aWxsIHBvaW50 IHRvIHRoZSBzYW1lIGhlYXAvdGFibGUKKyAgIHR1cGxlcy4gIFNpbmNlIDxsaXRlcmFsPkxQX0RF QUQ8L2xpdGVyYWw+IG1hcmtpbmcgaXMgb25seSBhbiBvcHRpbWl6YXRpb24KKyAgIGhpbnQsIGl0 IGlzIGFsd2F5cyBzYWZlIHRvIHNraXAgaXQuICBCLXRyZWUgdXNlcyB0aGlzIGFwcHJvYWNoLgor ICA8L3BhcmE+CisKKyAgPHdhcm5pbmc+CisgICA8cGFyYT4KKyAgICBUaGlzIExTTiBjb21wYXJp c29uIHRlY2huaXF1ZSByZXF1aXJlcyB0aGUgaW5kZXggQU0gdG8gdXNlIGZha2UKKyAgICAobW9u b3RvbmljYWxseSBpbmNyZWFzaW5nKSBMU05zIG9uIGl0cyBwYWdlcyBmb3IgcmVsYXRpb25zIHdo ZXJlIFdBTCBpcworICAgIG5vdCBnZW5lcmF0ZWQsIHNpbmNlIHJlYWwgTFNOcyBhcmUgbm90IGF2 YWlsYWJsZSBpbiB0aGF0IGNhc2UuICBTZWUgdGhlCisgICAgQi10cmVlIGluZGV4IGltcGxlbWVu dGF0aW9uIGZvciBhIHJlZmVyZW5jZSBleGFtcGxlIG9mIHRoaXMKKyAgICB0ZWNobmlxdWUuICBB biBpbmRleCBBTSB0aGF0IGRvZXMgbm90IGltcGxlbWVudCBmYWtlIExTTnMgY2FuIHN0aWxsCisg ICAgcHJvdmlkZSA8ZnVuY3Rpb24+YW1raWxsaXRlbXNiYXRjaDwvZnVuY3Rpb24+LCBidXQgc2hv dWxkIHNpbXBseSBkbworICAgIG5vdGhpbmcgd2hlbiB0aGUgcmVsYXRpb24gZG9lcyBub3QgZ2Vu ZXJhdGUgV0FMIChpLmUuLCB3aGVuCisgICAgPGZ1bmN0aW9uPlJlbGF0aW9uTmVlZHNXQUwoKTwv ZnVuY3Rpb24+IGlzIGZhbHNlKSwgc2luY2UgdGhlIExTTgorICAgIGNvbXBhcmlzb24gd291bGQg YmUgdW5yZWxpYWJsZS4KKyAgIDwvcGFyYT4KKyAgPC93YXJuaW5nPgorCisgIDx0aXA+CisgICA8 cGFyYT4KKyAgICBJbmRleCBBTXMgYXJlIG5vdCBvYmxpZ2F0ZWQgdG8gdXNlCisgICAgPGZ1bmN0 aW9uPmluZGV4YW1fdXRpbF91bmxvY2tfYmF0Y2g8L2Z1bmN0aW9uPiAmbWRhc2g7IHRoZXkgY2Fu IGltcGxlbWVudAorICAgIHRoZWlyIG93biBlcXVpdmFsZW50LCBhbmQgYXJlIGZyZWUgdG8gdXNl IHRoZSBiYXRjaAorICAgIDxzdHJ1Y3RmaWVsZD5sc248L3N0cnVjdGZpZWxkPiBmaWVsZCBpbiB3 aGF0ZXZlciB3YXkgdGhleSBkZWVtIG5lY2Vzc2FyeQorICAgPC9wYXJhPgorICA8L3RpcD4KKwor ICA8cGFyYT4KKyAgIFRoaXMgTFNOLWJhc2VkIHZlcmlmaWNhdGlvbiBtZWFucyB0aGF0IHRoZSB0 YWJsZSBBTSBuZWVkIG5vdCBjb25zaWRlcgorICAgd2hldGhlciB1bmd1YXJkaW5nIGEgYmF0Y2gg Y291bGQgaW50cm9kdWNlIFRJRCByZWN5Y2xpbmcgaGF6YXJkcyBmb3IgYQorICAgc3Vic2VxdWVu dCA8ZnVuY3Rpb24+YW1raWxsaXRlbXNiYXRjaDwvZnVuY3Rpb24+IGNhbGwuICBUaGUgaGF6YXJk cyBhcmUgdGhlCisgICBzYW1lIGluIGJvdGggY2FzZXMsIGJ1dCBzaW5jZSA8ZnVuY3Rpb24+YW1r aWxsaXRlbXNiYXRjaDwvZnVuY3Rpb24+CisgICBpbmRlcGVuZGVudGx5IHZlcmlmaWVzIHRoZSBw YWdlIExTTiBhbmQgY2FuIGFsd2F5cyBzYWZlbHkgZ2l2ZSB1cCBvbgorICAgc2V0dGluZyA8bGl0 ZXJhbD5MUF9ERUFEPC9saXRlcmFsPiBiaXRzLCBjb3JyZWN0bmVzcyBpcyBvYnZpb3VzIHdpdGhv dXQgYW55CisgICBjb3VwbGluZyBiZXR3ZWVuIHRoZSB0d28uCisgIDwvcGFyYT4KIAogICA8cGFy YT4KIDxwcm9ncmFtbGlzdGluZz4KQEAgLTc2OCw4ICsxMDU3LDggQEAgYW1nZXRiaXRtYXAgKElu ZGV4U2NhbkRlc2Mgc2NhbiwKICAgIGl0c2VsZiwgYW5kIHRoZXJlZm9yZSBjYWxsZXJzIHJlY2hl Y2sgYm90aCB0aGUgc2NhbiBjb25kaXRpb25zIGFuZCB0aGUKICAgIHBhcnRpYWwgaW5kZXggcHJl ZGljYXRlIChpZiBhbnkpIGZvciByZWNoZWNrYWJsZSB0dXBsZXMuICBUaGF0IG1pZ2h0IG5vdAog ICAgYWx3YXlzIGJlIHRydWUsIGhvd2V2ZXIuCi0gICA8ZnVuY3Rpb24+YW1nZXRiaXRtYXA8L2Z1 bmN0aW9uPiBhbmQKLSAgIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gY2Fubm90IGJl IHVzZWQgaW4gdGhlIHNhbWUgaW5kZXggc2NhbjsgdGhlcmUKKyAgIE9ubHkgb25lIG9mIDxmdW5j dGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+LCA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rp b24+LAorICAgb3IgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBjYW4gYmUgdXNlZCBp biBhbnkgZ2l2ZW4gaW5kZXggc2NhbjsgdGhlcmUKICAgIGFyZSBvdGhlciByZXN0cmljdGlvbnMg dG9vIHdoZW4gdXNpbmcgPGZ1bmN0aW9uPmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4sIGFzIGV4cGxh aW5lZAogICAgaW4gPHhyZWYgbGlua2VuZD0iaW5kZXgtc2Nhbm5pbmciLz4uCiAgIDwvcGFyYT4K QEAgLTc4MSw2ICsxMDcwLDM5IEBAIGFtZ2V0Yml0bWFwIChJbmRleFNjYW5EZXNjIHNjYW4sCiAg ICBzdHJ1Y3QgbXVzdCBiZSBzZXQgdG8gTlVMTC4KICAgPC9wYXJhPgogCisgIDxwYXJhPgorICAg SW5kZXggYWNjZXNzIG1ldGhvZHMgdGhhdCBzdXBwb3J0IDxmdW5jdGlvbj5hbWdldGJhdGNoPC9m dW5jdGlvbj4gd2lsbAorICAgdHlwaWNhbGx5IGFsc28gc3VwcG9ydCA8ZnVuY3Rpb24+YW1nZXRi aXRtYXA8L2Z1bmN0aW9uPiwgYW5kIGFsbW9zdCBhbGwgb2YKKyAgIHRoZSBpbmRleCBBTSdzIGlu dGVybmFsIHNjYW5uaW5nIGNvZGUgaXMgc2hhcmVkIGJldHdlZW4gdGhlIHR3byBwYXRocy4gIFRo ZQorICAgbWFpbiBkaWZmZXJlbmNlIGlzIHRoYXQgZHVyaW5nIDxmdW5jdGlvbj5hbWdldGJpdG1h cDwvZnVuY3Rpb24+IG9ubHkgb25lCisgICBiYXRjaCBpcyBhbGxvY2F0ZWQgYXQgYSB0aW1lICh2 aWEgPGZ1bmN0aW9uPmluZGV4YW1fdXRpbF9hbGxvY19iYXRjaDwvZnVuY3Rpb24+KSwKKyAgIHVu bGlrZSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IHdoZXJlIHRoZSB0YWJsZSBBTSBt YW5hZ2VzIHNldmVyYWwKKyAgIGJhdGNoZXMgaW4gYSBkZWRpY2F0ZWQgYmF0Y2ggcmluZyBidWZm ZXIgZGF0YSBzdHJ1Y3R1cmUuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFRoZSBvbmx5IGNo YW5nZSBuZWVkZWQgdG8gbWFpbnRhaW4gdGhpcyBpbnZhcmlhbnQgaXMgYSBzaW5nbGUgY2FsbCB0 bworICAgPGZ1bmN0aW9uPmluZGV4YW1fdXRpbF9yZWxlYXNlX2JhdGNoPC9mdW5jdGlvbj4gYXQg dGhlIHBvaW50IHdoZXJlIHRoZQorICAgc2NhbiBtb3ZlcyBiZXR3ZWVuIGluZGV4IHBhZ2VzLCBj b25kaXRpb25hbCBvbiB0aGUgc2NhbidzCisgICA8c3RydWN0ZmllbGQ+dXNlYmF0Y2hyaW5nPC9z dHJ1Y3RmaWVsZD4gZmllbGQgYmVpbmcgZmFsc2UgKGluZGljYXRpbmcgYQorICAgYml0bWFwIGlu ZGV4IHNjYW4pLiAgVGhlIGluZGV4IEFNIHJlbGVhc2VzIGl0cyBwcmlvciBiYXRjaAorICAganVz dCBhcyBpdCBpcyBhYm91dCB0byBnZW5lcmF0ZSB0aGUgbmV4dCBiYXRjaCAmbWRhc2g7IHRoZSBz YW1lIHBvaW50CisgICB3aGVyZSBpdCBleHRyYWN0cyBuYXZpZ2F0aW9uIHN0YXRlIChzdWNoIGFz IHNpYmxpbmctcGFnZSBsaW5rcykgZnJvbQorICAgPGxpdGVyYWw+cHJpb3JiYXRjaDwvbGl0ZXJh bD4uICBObyBvdGhlciBjaGFuZ2VzIHRvIHRoZSBpbmRleCBBTSdzCisgICBzY2FubmluZyBsb2dp YyBhcmUgbmVlZGVkLiAgVGhpcyBlYXJseSByZWxlYXNlIGlzIHNwZWNpZmljIHRvCisgICA8ZnVu Y3Rpb24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiBzY2FuczsgZHVyaW5nCisgICA8ZnVuY3Rpb24+ YW1nZXRiYXRjaDwvZnVuY3Rpb24+IHNjYW5zIHRoZSA8bGl0ZXJhbD5wcmlvcmJhdGNoPC9saXRl cmFsPgorICAgaXMgc3RyaWN0bHkgb3duZWQgYnkgdGhlIGNhbGxlciAodGhlIHRhYmxlIEFNKSwg YW5kIHRoZSBpbmRleCBBTSBtdXN0CisgICBuZXZlciByZWxlYXNlIGl0LiAgU2VlIDxmdW5jdGlv bj5fYnRfbmV4dDwvZnVuY3Rpb24+IGZvciBhIHJlZmVyZW5jZQorICAgZXhhbXBsZS4KKyAgPC9w YXJhPgorCisgIDxwYXJhPgorICAgVGhlIHJlbGVhc2VkIGJhdGNoIGlzIGNhY2hlZCBpbnRlcm5h bGx5IGFuZCByZXVzZWQgYnkgdGhlIG5leHQKKyAgIDxmdW5jdGlvbj5pbmRleGFtX3V0aWxfYWxs b2NfYmF0Y2g8L2Z1bmN0aW9uPiBjYWxsLCBhdm9pZGluZyByZXBlYXRlZAorICAgbWVtb3J5IGFs bG9jYXRpb24gZHVyaW5nIHRoZSBiaXRtYXAgc2Nhbi4KKyAgPC9wYXJhPgorCiAgIDxwYXJhPgog PHByb2dyYW1saXN0aW5nPgogdm9pZApAQCAtNzk1LDMyICsxMTE3LDUyIEBAIGFtZW5kc2NhbiAo SW5kZXhTY2FuRGVzYyBzY2FuKTsKICAgPHBhcmE+CiA8cHJvZ3JhbWxpc3Rpbmc+CiB2b2lkCi1h bW1hcmtwb3MgKEluZGV4U2NhbkRlc2Mgc2Nhbik7CithbXBvc3Jlc2V0IChJbmRleFNjYW5EZXNj IHNjYW4sCisgICAgICAgICAgICBJbmRleFNjYW5CYXRjaCBiYXRjaCk7CiA8L3Byb2dyYW1saXN0 aW5nPgotICAgTWFyayBjdXJyZW50IHNjYW4gcG9zaXRpb24uICBUaGUgYWNjZXNzIG1ldGhvZCBu ZWVkIG9ubHkgc3VwcG9ydCBvbmUKLSAgIHJlbWVtYmVyZWQgc2NhbiBwb3NpdGlvbiBwZXIgc2Nh bi4KKyAgIE5vdGlmeSB0aGUgaW5kZXggQU0gdGhhdCB0aGUgdGFibGUgQU0gaXMgYWJvdXQgdG8g Y2hhbmdlIHRoZSBzY2FuJ3MKKyAgIGxvZ2ljYWwgcG9zaXRpb24gaW4gYSB3YXkgdGhhdCBtYXkg aW52YWxpZGF0ZSBpbmRleCBBTSBzdGF0ZSB0aGF0CisgICBpbmRlcGVuZGVudGx5IHRyYWNrcyB0 aGUgc2NhbidzIHByb2dyZXNzLiAgVGhpcyBjYWxsYmFjayBpcyBpbnZva2VkIHdoZW4KKyAgIHRo ZSB0YWJsZSBBTSBpcyBhYm91dCB0byBwcm9jZXNzIGEgYmF0Y2ggaW4gYSBkaWZmZXJlbnQgZGly ZWN0aW9uIHRoYW4KKyAgIHdhcyB1c2VkIHdoZW4gdGhlIGJhdGNoIHdhcyBvcmlnaW5hbGx5IHJl dHVybmVkIGJ5CisgICA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+LCBhbmQgYWxzbyB3 aGVuIGEgbWFya2VkIHNjYW4gcG9zaXRpb24gaXMKKyAgIGFib3V0IHRvIGJlIHJlc3RvcmVkLiAg U29tZSBpbmRleCBBTXMgbWFpbnRhaW4gaW50ZXJuYWwgc3RhdGUgdGhhdAorICAgYWR2YW5jZXMg aW4gbG9ja3N0ZXAgd2l0aCB0aGUgc2NhbiB1bmRlciB0aGUgc29mdCBhc3N1bXB0aW9uIHRoYXQg dGhlIHNjYW4KKyAgIGRpcmVjdGlvbiB3aWxsIG5vdCBjaGFuZ2UuICBTdWNoIHN0YXRlIG1heSBm YWxsIGJlaGluZCB0aGUgc2NhbidzIHRydWUKKyAgIHBvc2l0aW9uIHdpdGhvdXQgaGFybSAoc2lt cGx5IHJlYWRpbmcgdGhlIG5leHQgaW5kZXggcGFnZSB3aWxsIGFsbG93IHRoZQorICAgc3RhdGUg dG8gPHF1b3RlPmNhdGNoIHVwPC9xdW90ZT4pLCBidXQgbXVzdCBuZXZlciBnZXQgYWhlYWQgb2Yg aXQuICBXaGVuCisgICB0aGUgc2NhbiBkaXJlY3Rpb24gY2hhbmdlcyBvciBhIG1hcmtlZCBwb3Np dGlvbiBpcyByZXN0b3JlZCwgdGhlIGFzc3VtcHRpb24KKyAgIGlzIHZpb2xhdGVkLCBzbyB0aGUg aW5kZXggQU0gbXVzdCByZXNldCB0aGUgc3RhdGUgdG8gYSBzYWZlIHN0YXJ0aW5nIHBvaW50Cisg ICBmb3IgdGhlIG5ldyBkaXJlY3Rpb24uICBGb3IgZXhhbXBsZSwgQi10cmVlIHVzZXMgdGhpcyBj YWxsYmFjayB0byByZXNldCBpdHMKKyAgIDxsaXRlcmFsPlNjYWxhckFycmF5T3BFeHByPC9saXRl cmFsPiBhcnJheSBrZXlzIHRvIHRoZWlyIGluaXRpYWwgcG9zaXRpb25zCisgICBmb3IgdGhlIG5l dyBzY2FuIGRpcmVjdGlvbi4KICAgPC9wYXJhPgogCiAgIDxwYXJhPgotICAgVGhlIDxmdW5jdGlv bj5hbW1hcmtwb3M8L2Z1bmN0aW9uPiBmdW5jdGlvbiBuZWVkIG9ubHkgYmUgcHJvdmlkZWQgaWYg dGhlIGFjY2VzcwotICAgbWV0aG9kIHN1cHBvcnRzIG9yZGVyZWQgc2NhbnMuICBJZiBpdCBkb2Vz bid0LAotICAgdGhlIDxzdHJ1Y3RmaWVsZD5hbW1hcmtwb3M8L3N0cnVjdGZpZWxkPiBmaWVsZCBp biBpdHMgPHN0cnVjdG5hbWU+SW5kZXhBbVJvdXRpbmU8L3N0cnVjdG5hbWU+Ci0gICBzdHJ1Y3Qg bWF5IGJlIHNldCB0byBOVUxMLgorICAgV2hlbiA8ZnVuY3Rpb24+YW1wb3NyZXNldDwvZnVuY3Rp b24+IGlzIGNhbGxlZCBkdWUgdG8gYSBjcm9zcy1iYXRjaAorICAgZGlyZWN0aW9uIGNoYW5nZSwg dGhlIGNvcmUgc3lzdGVtIHdpbGwgaGF2ZSBhbHJlYWR5IGZsaXBwZWQgdGhlIGJhdGNoJ3MKKyAg IDxzdHJ1Y3RmaWVsZD5kaXI8L3N0cnVjdGZpZWxkPiBmaWVsZCB0byByZWZsZWN0IHRoZSBuZXcg c2NhbiBkaXJlY3Rpb24KKyAgIGJlZm9yZSBtYWtpbmcgdGhlIGNhbGwuICBUaGUgaW5kZXggQU0g c2hvdWxkIHVzZSB0aGlzIHVwZGF0ZWQgZGlyZWN0aW9uCisgICB3aGVuIHJlc2V0dGluZyBhbnkg c3RhdGUgdGhhdCBkZXBlbmRzIG9uIGtub3dpbmcgd2hpY2ggd2F5IHRoZSBzY2FuIGlzCisgICBw cm9jZWVkaW5nLiAgV2hlbiBjYWxsZWQgdG8gcmVzdG9yZSBhIG1hcmtlZCBwb3NpdGlvbiwgdGhl IGJhdGNoJ3MKKyAgIDxzdHJ1Y3RmaWVsZD5kaXI8L3N0cnVjdGZpZWxkPiBpcyBub3QgbW9kaWZp ZWQ7IGl0IHJldGFpbnMgdGhlIGRpcmVjdGlvbgorICAgZnJvbSB3aGVuIHRoZSBiYXRjaCB3YXMg b3JpZ2luYWxseSByZXR1cm5lZC4gIEluIGJvdGggY2FzZXMsIHRoZSBiYXRjaAorICAgcGFzc2Vk IHRvIDxmdW5jdGlvbj5hbXBvc3Jlc2V0PC9mdW5jdGlvbj4gaXMgdGhlIGJhdGNoIHRoYXQgd2ls bCBuZXh0IGJlCisgICBwYXNzZWQgdG8gPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBh cyBpdHMKKyAgIDxsaXRlcmFsPnByaW9yYmF0Y2g8L2xpdGVyYWw+LiAgTm90ZSBpbiBwYXJ0aWN1 bGFyIHRoYXQgdGhlCisgICA8bGl0ZXJhbD5wcmlvcmJhdGNoPC9saXRlcmFsPi48c3RydWN0Zmll bGQ+ZGlyPC9zdHJ1Y3RmaWVsZD4gZmllbGQgaXMKKyAgIGd1YXJhbnRlZWQgdG8gaGF2ZSB0aGUg c2FtZSBzY2FuIGRpcmVjdGlvbiBhcyB3aGVuCisgICA8ZnVuY3Rpb24+YW1wb3NyZXNldDwvZnVu Y3Rpb24+IHdhcyBjYWxsZWQuCiAgIDwvcGFyYT4KIAogICA8cGFyYT4KLTxwcm9ncmFtbGlzdGlu Zz4KLXZvaWQKLWFtcmVzdHJwb3MgKEluZGV4U2NhbkRlc2Mgc2Nhbik7Ci08L3Byb2dyYW1saXN0 aW5nPgotICAgUmVzdG9yZSB0aGUgc2NhbiB0byB0aGUgbW9zdCByZWNlbnRseSBtYXJrZWQgcG9z aXRpb24uCi0gIDwvcGFyYT4KLQotICA8cGFyYT4KLSAgIFRoZSA8ZnVuY3Rpb24+YW1yZXN0cnBv czwvZnVuY3Rpb24+IGZ1bmN0aW9uIG5lZWQgb25seSBiZSBwcm92aWRlZCBpZiB0aGUgYWNjZXNz Ci0gICBtZXRob2Qgc3VwcG9ydHMgb3JkZXJlZCBzY2Fucy4gIElmIGl0IGRvZXNuJ3QsCi0gICB0 aGUgPHN0cnVjdGZpZWxkPmFtcmVzdHJwb3M8L3N0cnVjdGZpZWxkPiBmaWVsZCBpbiBpdHMgPHN0 cnVjdG5hbWU+SW5kZXhBbVJvdXRpbmU8L3N0cnVjdG5hbWU+Ci0gICBzdHJ1Y3QgbWF5IGJlIHNl dCB0byBOVUxMLgorICAgSW5kZXggYWNjZXNzIG1ldGhvZHMgdGhhdCBoYXZlIHByaXZhdGUgc3Rh dGUgd2hpY2ggbXVzdCBiZSByZXNldCB3aGVuIHRoZQorICAgc2NhbiBwb3NpdGlvbiBjaGFuZ2Vz IG11c3QgcHJvdmlkZSBhbiA8ZnVuY3Rpb24+YW1wb3NyZXNldDwvZnVuY3Rpb24+CisgICBpbXBs ZW1lbnRhdGlvbi4gIEluZGV4IEFNcyB3aXRoIG5vIHN1Y2ggc3RhdGUgbWF5IHNldAorICAgPHN0 cnVjdGZpZWxkPmFtcG9zcmVzZXQ8L3N0cnVjdGZpZWxkPiB0byBOVUxMLiAgVGhlCisgICA8ZnVu Y3Rpb24+YW1wb3NyZXNldDwvZnVuY3Rpb24+IGZ1bmN0aW9uIGNhbiBvbmx5IGJlIHByb3ZpZGVk IHdoZW4gdGhlCisgICBhY2Nlc3MgbWV0aG9kIHN1cHBvcnRzIG9yZGVyZWQgc2NhbnMgdGhyb3Vn aCB0aGUKKyAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaW50ZXJmYWNlLgogICA8 L3BhcmE+CiAKICAgPHBhcmE+CkBAIC05NzUsNiArMTMxNyw4IEBAIGFtdHJhbnNsYXRlY21wdHlw ZSAoQ29tcGFyZVR5cGUgY21wdHlwZSwgT2lkIG9wZmFtaWx5LCBPaWQgb3BjaW50eXBlKTsKICAg ICAgICBBY2Nlc3MgbWV0aG9kcyB0aGF0IGFsd2F5cyByZXR1cm4gZW50cmllcyBpbiB0aGUgbmF0 dXJhbCBvcmRlcmluZwogICAgICAgIG9mIHRoZWlyIGRhdGEgKHN1Y2ggYXMgYnRyZWUpIHNob3Vs ZCBzZXQKICAgICAgICA8c3RydWN0ZmllbGQ+YW1jYW5vcmRlcjwvc3RydWN0ZmllbGQ+IHRvIHRy dWUuCisgICAgICAgQm90aCA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGFuZCA8ZnVu Y3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+CisgICAgICAgc2NhbnMgc3VwcG9ydCB0aGlzIGNh cGFiaWxpdHkuCiAgICAgICAgQ3VycmVudGx5LCBzdWNoIGFjY2VzcyBtZXRob2RzIG11c3QgdXNl IGJ0cmVlLWNvbXBhdGlibGUgc3RyYXRlZ3kKICAgICAgICBudW1iZXJzIGZvciB0aGVpciBlcXVh bGl0eSBhbmQgb3JkZXJpbmcgb3BlcmF0b3JzLgogICAgICAgPC9wYXJhPgpAQCAtOTk0LDM0ICsx MzM4LDQxIEBAIGFtdHJhbnNsYXRlY21wdHlwZSAoQ29tcGFyZVR5cGUgY21wdHlwZSwgT2lkIG9w ZmFtaWx5LCBPaWQgb3BjaW50eXBlKTsKICAgPC9wYXJhPgogCiAgIDxwYXJhPgotICAgVGhlIDxm dW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gZnVuY3Rpb24gaGFzIGEgPGxpdGVyYWw+ZGly ZWN0aW9uPC9saXRlcmFsPiBhcmd1bWVudCwKKyAgIE5vdGUgdGhhdCA8ZnVuY3Rpb24+YW1nZXRi YXRjaDwvZnVuY3Rpb24+IHNjYW5zIGRvIG5vdCBjdXJyZW50bHkgc3VwcG9ydAorICAgb3JkZXJp bmcgb3BlcmF0b3JzLiAgVGhlIGNvcmUgZXhlY3V0b3IgZXhwZWN0cyA8ZnVuY3Rpb24+YW1nZXR0 dXBsZTwvZnVuY3Rpb24+CisgICB0byBzZXQgPHN0cnVjdGZpZWxkPnhzX29yZGVyYnl2YWxzPC9z dHJ1Y3RmaWVsZD4gZm9yIGVhY2ggcmV0dXJuZWQgdHVwbGUsCisgICBidXQgdGhlcmUgaXMgY3Vy cmVudGx5IG5vIG1lY2hhbmlzbSB0byBhc3NvY2lhdGUgcGVyLWl0ZW0gb3JkZXJpbmcgdmFsdWVz CisgICB3aXRoIGluZGl2aWR1YWwgaXRlbXMgd2l0aGluIGEgYmF0Y2guICBUaGlzIHdvdWxkIHJl cXVpcmUgYW4gYWRkaXRpb25hbAorICAgbGF5ZXIgb2YgaW5kaXJlY3Rpb24gdGhhdCBkb2VzIG5v dCB5ZXQgZXhpc3QsIGJ1dCBjb3VsZCBiZSBhZGRlZCBpbiBhCisgICBmdXR1cmUgdmVyc2lvbiBv ZiA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+LgorICA8L3BhcmE+CisKKyAg PHBhcmE+CisgICBUaGUgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBmdW5jdGlvbiBo YXMgYSA8bGl0ZXJhbD5kaXJlY3Rpb248L2xpdGVyYWw+IGFyZ3VtZW50LAogICAgd2hpY2ggY2Fu IGJlIGVpdGhlciA8bGl0ZXJhbD5Gb3J3YXJkU2NhbkRpcmVjdGlvbjwvbGl0ZXJhbD4gKHRoZSBu b3JtYWwgY2FzZSkKICAgIG9yICA8bGl0ZXJhbD5CYWNrd2FyZFNjYW5EaXJlY3Rpb248L2xpdGVy YWw+LiAgSWYgdGhlIGZpcnN0IGNhbGwgYWZ0ZXIKICAgIDxmdW5jdGlvbj5hbXJlc2NhbjwvZnVu Y3Rpb24+IHNwZWNpZmllcyA8bGl0ZXJhbD5CYWNrd2FyZFNjYW5EaXJlY3Rpb248L2xpdGVyYWw+ LCB0aGVuIHRoZQotICAgc2V0IG9mIG1hdGNoaW5nIGluZGV4IGVudHJpZXMgaXMgdG8gYmUgc2Nh bm5lZCBiYWNrLXRvLWZyb250IHJhdGhlciB0aGFuIGluCi0gICB0aGUgbm9ybWFsIGZyb250LXRv LWJhY2sgZGlyZWN0aW9uLCBzbyA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IG11c3Qg cmV0dXJuCi0gICB0aGUgbGFzdCBtYXRjaGluZyB0dXBsZSBpbiB0aGUgaW5kZXgsIHJhdGhlciB0 aGFuIHRoZSBmaXJzdCBvbmUgYXMgaXQKLSAgIG5vcm1hbGx5IHdvdWxkLiAgKFRoaXMgd2lsbCBv bmx5IG9jY3VyIGZvciBhY2Nlc3MKLSAgIG1ldGhvZHMgdGhhdCBzZXQgPHN0cnVjdGZpZWxkPmFt Y2Fub3JkZXI8L3N0cnVjdGZpZWxkPiB0byB0cnVlLikgIEFmdGVyIHRoZQotICAgZmlyc3QgY2Fs bCwgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBtdXN0IGJlIHByZXBhcmVkIHRvIGFk dmFuY2UgdGhlIHNjYW4gaW4KKyAgIHJldHVybmVkIGJhdGNoIG11c3QgYmUgdGhlIGJhdGNoIGNv bnRhaW5pbmcgdGhlIGxhc3QgbWF0Y2hpbmcgaXRlbShzKSwKKyAgIHJhdGhlciB0aGFuIHRoZSBi YXRjaCBjb250YWluaW5nIHRoZSBmaXJzdCBtYXRjaGluZyBpdGVtKHMpLgorICAgPGZ1bmN0aW9u PmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBtdXN0IGJlIHByZXBhcmVkIHRvIGFkdmFuY2UgdGhlIHNj YW4gaW4KICAgIGVpdGhlciBkaXJlY3Rpb24gZnJvbSB0aGUgbW9zdCByZWNlbnRseSByZXR1cm5l ZCBlbnRyeS4gIChCdXQgaWYKICAgIDxzdHJ1Y3RmaWVsZD5hbWNhbmJhY2t3YXJkPC9zdHJ1Y3Rm aWVsZD4gaXMgZmFsc2UsIGFsbCBzdWJzZXF1ZW50CiAgICBjYWxscyB3aWxsIGhhdmUgdGhlIHNh bWUgZGlyZWN0aW9uIGFzIHRoZSBmaXJzdCBvbmUuKQogICA8L3BhcmE+CiAKICAgPHBhcmE+Ci0g ICBBY2Nlc3MgbWV0aG9kcyB0aGF0IHN1cHBvcnQgb3JkZXJlZCBzY2FucyBtdXN0IHN1cHBvcnQg PHF1b3RlPm1hcmtpbmc8L3F1b3RlPiBhCi0gICBwb3NpdGlvbiBpbiBhIHNjYW4gYW5kIGxhdGVy IHJldHVybmluZyB0byB0aGUgbWFya2VkIHBvc2l0aW9uLiAgVGhlIHNhbWUKLSAgIHBvc2l0aW9u IG1pZ2h0IGJlIHJlc3RvcmVkIG11bHRpcGxlIHRpbWVzLiAgSG93ZXZlciwgb25seSBvbmUgcG9z aXRpb24gbmVlZAotICAgYmUgcmVtZW1iZXJlZCBwZXIgc2NhbjsgYSBuZXcgPGZ1bmN0aW9uPmFt bWFya3BvczwvZnVuY3Rpb24+IGNhbGwgb3ZlcnJpZGVzIHRoZQotICAgcHJldmlvdXNseSBtYXJr ZWQgcG9zaXRpb24uICBBbiBhY2Nlc3MgbWV0aG9kIHRoYXQgZG9lcyBub3Qgc3VwcG9ydCBvcmRl cmVkCi0gICBzY2FucyBuZWVkIG5vdCBwcm92aWRlIDxmdW5jdGlvbj5hbW1hcmtwb3M8L2Z1bmN0 aW9uPiBhbmQgPGZ1bmN0aW9uPmFtcmVzdHJwb3M8L2Z1bmN0aW9uPgotICAgZnVuY3Rpb25zIGlu IDxzdHJ1Y3RuYW1lPkluZGV4QW1Sb3V0aW5lPC9zdHJ1Y3RuYW1lPjsgc2V0IHRob3NlIHBvaW50 ZXJzIHRvIE5VTEwKLSAgIGluc3RlYWQuCisgICBBbGwgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1 bmN0aW9uPiBpbmRleCBBTXMgaW5oZXJlbnRseSBzdXBwb3J0CisgICBtYXJrL3Jlc3RvcmUgb2Yg c2NhbiBwb3NpdGlvbnMgKDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gaW5kZXggQU1z CisgICBkbyBub3QpLiAgVGhlIG1hcmsvcmVzdG9yZSBpbXBsZW1lbnRhdGlvbiBsaXZlcyBpbiB0 aGUgdGFibGUgQU0gYW5kIHdvcmtzCisgICB3aXRoIGFueSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwv ZnVuY3Rpb24+IGltcGxlbWVudGF0aW9uLiAgSW5kZXggQU1zIHRoYXQKKyAgIG1haW50YWluIGlu dGVybmFsIHN0YXRlIHdoaWNoIHRyYWNrcyB0aGUgc2NhbidzIHByb2dyZXNzIG11c3QgcHJvdmlk ZSBhbgorICAgPGZ1bmN0aW9uPmFtcG9zcmVzZXQ8L2Z1bmN0aW9uPiBjYWxsYmFjayB0byBiZSBu b3RpZmllZCB3aGVuIHRoZSBzY2FuJ3MKKyAgIGxvZ2ljYWwgcG9zaXRpb24gY2hhbmdlcyB1bmV4 cGVjdGVkbHksIHN1Y2ggYXMgZHVyaW5nIG1hcmsvcmVzdG9yZTsgc2VlCisgICA8eHJlZiBsaW5r ZW5kPSJpbmRleC1mdW5jdGlvbnMiLz4gZm9yIGRldGFpbHMuCiAgIDwvcGFyYT4KIAogICA8cGFy YT4KLSAgIEJvdGggdGhlIHNjYW4gcG9zaXRpb24gYW5kIHRoZSBtYXJrIHBvc2l0aW9uIChpZiBh bnkpIG11c3QgYmUgbWFpbnRhaW5lZAorICAgVGhlIHNjYW4gcG9zaXRpb24gKGlmIGFueSkgbXVz dCBiZSBtYWludGFpbmVkIGJ5IHRoZSB0YWJsZSBBTSBhbmQgaW5kZXggQU0KICAgIGNvbnNpc3Rl bnRseSBpbiB0aGUgZmFjZSBvZiBjb25jdXJyZW50IGluc2VydGlvbnMgb3IgZGVsZXRpb25zIGlu IHRoZQogICAgaW5kZXguICBJdCBpcyBPSyBpZiBhIGZyZXNobHktaW5zZXJ0ZWQgZW50cnkgaXMg bm90IHJldHVybmVkIGJ5IGEgc2NhbiB0aGF0CiAgICB3b3VsZCBoYXZlIGZvdW5kIHRoZSBlbnRy eSBpZiBpdCBoYWQgZXhpc3RlZCB3aGVuIHRoZSBzY2FuIHN0YXJ0ZWQsIG9yIGZvcgpAQCAtMTA0 MCwxNSArMTM5MSwxNyBAQCBhbXRyYW5zbGF0ZWNtcHR5cGUgKENvbXBhcmVUeXBlIGNtcHR5cGUs IE9pZCBvcGZhbWlseSwgT2lkIG9wY2ludHlwZSk7CiAgICB3aGljaCB0aGUgaW5kZXggcmV0dXJu cyB0aGUgYWN0dWFsIGRhdGEgbm90IGp1c3QgdGhlIFRJRCBvZiB0aGUgaGVhcCB0dXBsZS4KICAg IFRoaXMgd2lsbCBvbmx5IGF2b2lkIEkvTyBpZiB0aGUgdmlzaWJpbGl0eSBtYXAgc2hvd3MgdGhh dCB0aGUgVElEIGlzIG9uIGFuCiAgICBhbGwtdmlzaWJsZSBwYWdlOyBlbHNlIHRoZSBoZWFwIHR1 cGxlIG11c3QgYmUgdmlzaXRlZCBhbnl3YXkgdG8gY2hlY2sKLSAgIE1WQ0MgdmlzaWJpbGl0eS4g IEJ1dCB0aGF0IGlzIG5vIGNvbmNlcm4gb2YgdGhlIGFjY2VzcyBtZXRob2Qncy4KKyAgIE1WQ0Mg dmlzaWJpbGl0eS4gIEJ1dCB0aGF0IGlzIG5vIGNvbmNlcm4gb2YgdGhlIGluZGV4IGFjY2VzcyBt ZXRob2Qncy4KICAgPC9wYXJhPgogCiAgIDxwYXJhPgotICAgSW5zdGVhZCBvZiB1c2luZyA8ZnVu Y3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+LCBhbiBpbmRleCBzY2FuIGNhbiBiZSBkb25lIHdp dGgKLSAgIDxmdW5jdGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+IHRvIGZldGNoIGFsbCB0dXBs ZXMgaW4gb25lIGNhbGwuICBUaGlzIGNhbiBiZQotICAgbm90aWNlYWJseSBtb3JlIGVmZmljaWVu dCB0aGFuIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gYmVjYXVzZSBpdCBhbGxvd3MK LSAgIGF2b2lkaW5nIGxvY2svdW5sb2NrIGN5Y2xlcyB3aXRoaW4gdGhlIGFjY2VzcyBtZXRob2Qu ICBJbiBwcmluY2lwbGUKLSAgIDxmdW5jdGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+IHNob3Vs ZCBoYXZlIHRoZSBzYW1lIGVmZmVjdHMgYXMgcmVwZWF0ZWQKKyAgIEluc3RlYWQgb2YgdXNpbmcg PGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBvcgorICAgPGZ1bmN0aW9uPmFtZ2V0dHVw bGU8L2Z1bmN0aW9uPiwgYW4gaW5kZXggc2NhbiBjYW4gYmUgZG9uZSB3aXRoCisgICA8ZnVuY3Rp b24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiB0byBmZXRjaCBhbGwgdHVwbGVzIGluIG9uZSBjYWxs LiAgVGhpcyBjYW4KKyAgIGJlIG5vdGljZWFibHkgbW9yZSBlZmZpY2llbnQgdGhhbiB3aXRoIGFu IDxxdW90ZT5vcmRlcmVkPC9xdW90ZT4gc2NhbgorICAgYmVjYXVzZSBpdCBhbGxvd3MgZWZmaWNp ZW50IHNlcXVlbnRpYWwgYWNjZXNzIHRvIHRhYmxlIEFNIHBhZ2VzIGNvbnRhaW5pbmcKKyAgIG1h dGNoZXMuICBJbiBwcmluY2lwbGUgPGZ1bmN0aW9uPmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4gc2hv dWxkIGhhdmUgdGhlCisgICBzYW1lIGVmZmVjdHMgYXMgcmVwZWF0ZWQgPGZ1bmN0aW9uPmFtZ2V0 YmF0Y2g8L2Z1bmN0aW9uPiBvcgogICAgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBj YWxscywgYnV0IHdlIGltcG9zZSBzZXZlcmFsIHJlc3RyaWN0aW9ucyB0bwogICAgc2ltcGxpZnkg bWF0dGVycy4gIEZpcnN0IG9mIGFsbCwgPGZ1bmN0aW9uPmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4g cmV0dXJucyBhbGwKICAgIHR1cGxlcyBhdCBvbmNlIGFuZCBtYXJraW5nIG9yIHJlc3RvcmluZyBz Y2FuIHBvc2l0aW9ucyBpc24ndApAQCAtMTA1OSwxNSArMTQxMiwxNSBAQCBhbXRyYW5zbGF0ZWNt cHR5cGUgKENvbXBhcmVUeXBlIGNtcHR5cGUsIE9pZCBvcGZhbWlseSwgT2lkIG9wY2ludHlwZSk7 CiAgICBBbHNvLCB0aGVyZSBpcyBubyBwcm92aXNpb24gZm9yIGluZGV4LW9ubHkgc2NhbnMgd2l0 aAogICAgPGZ1bmN0aW9uPmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4sIHNpbmNlIHRoZXJlIGlzIG5v IHdheSB0byByZXR1cm4gdGhlIGNvbnRlbnRzIG9mCiAgICBpbmRleCB0dXBsZXMuCi0gICBGaW5h bGx5LCA8ZnVuY3Rpb24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPgotICAgZG9lcyBub3QgZ3VhcmFu dGVlIGFueSBsb2NraW5nIG9mIHRoZSByZXR1cm5lZCB0dXBsZXMsIHdpdGggaW1wbGljYXRpb25z Ci0gICBzcGVsbGVkIG91dCBpbiA8eHJlZiBsaW5rZW5kPSJpbmRleC1sb2NraW5nIi8+LgorICAg RmluYWxseSwgPGZ1bmN0aW9uPmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4gZG9lcyBub3QgaG9sZCBh bnkgaW5kZXggcGFnZSBwaW5zCisgICBhZnRlciBpdCByZXR1cm5zIChzaW1pbGFybHkgdG8gPGZ1 bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBzY2FucyB3aXRoCisgICBhbiBNVkNDIHNuYXBz aG90KSwgYXMgZGVzY3JpYmVkIGluIDx4cmVmIGxpbmtlbmQ9ImluZGV4LWxvY2tpbmciLz4uCiAg IDwvcGFyYT4KIAogICA8cGFyYT4KICAgIE5vdGUgdGhhdCBpdCBpcyBwZXJtaXR0ZWQgZm9yIGFu IGFjY2VzcyBtZXRob2QgdG8gaW1wbGVtZW50IG9ubHkKLSAgIDxmdW5jdGlvbj5hbWdldGJpdG1h cDwvZnVuY3Rpb24+IGFuZCBub3QgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiwgb3Ig dmljZSB2ZXJzYSwKLSAgIGlmIGl0cyBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBpcyB1bnN1aXRl ZCB0byBvbmUgQVBJIG9yIHRoZSBvdGhlci4KKyAgIDxmdW5jdGlvbj5hbWdldGJpdG1hcDwvZnVu Y3Rpb24+IGFuZCBub3QgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPi88ZnVuY3Rpb24+ YW1nZXR0dXBsZTwvZnVuY3Rpb24+LAorICAgb3IgdmljZSB2ZXJzYSwgaWYgaXRzIGludGVybmFs IGltcGxlbWVudGF0aW9uIGlzIHVuc3VpdGVkIHRvIG9uZSBBUEkgb3IgdGhlIG90aGVyLgogICA8 L3BhcmE+CiAKICA8L3NlY3QxPgpAQCAtMTEyMywxMSArMTQ3NiwxNyBAQCBhbXRyYW5zbGF0ZWNt cHR5cGUgKENvbXBhcmVUeXBlIGNtcHR5cGUsIE9pZCBvcGZhbWlseSwgT2lkIG9wY2ludHlwZSk7 CiAgICAgIDwvbGlzdGl0ZW0+CiAgICAgIDxsaXN0aXRlbT4KICAgICAgIDxwYXJhPgotICAgICAg IEFuIGluZGV4IHNjYW4gbXVzdCBtYWludGFpbiBhIHBpbgotICAgICAgIG9uIHRoZSBpbmRleCBw YWdlIGhvbGRpbmcgdGhlIGl0ZW0gbGFzdCByZXR1cm5lZCBieQotICAgICAgIDxmdW5jdGlvbj5h bWdldHR1cGxlPC9mdW5jdGlvbj4sIGFuZCA8ZnVuY3Rpb24+YW1idWxrZGVsZXRlPC9mdW5jdGlv bj4gY2Fubm90IGRlbGV0ZQotICAgICAgIGVudHJpZXMgZnJvbSBwYWdlcyB0aGF0IGFyZSBwaW5u ZWQgYnkgb3RoZXIgYmFja2VuZHMuICBUaGUgbmVlZAotICAgICAgIGZvciB0aGlzIHJ1bGUgaXMg ZXhwbGFpbmVkIGJlbG93LgorICAgICAgIEEgcGluIG11c3QgYmUgaGVsZCBvbiBhbnkgaW5kZXgg cGFnZSB3aG9zZSBpdGVtcyBtaWdodCBzdGlsbCBuZWVkIHRvCisgICAgICAgYmUgZm9sbG93ZWQs IGFuZCA8ZnVuY3Rpb24+YW1idWxrZGVsZXRlPC9mdW5jdGlvbj4gbXVzdCBhY3F1aXJlIGEKKyAg ICAgICBjbGVhbnVwIGxvY2sgb24gZWFjaCBpbmRleCBwYWdlLCB3aGljaCB3aWxsIGJsb2NrIGlm IGFueSBvdGhlcgorICAgICAgIGJhY2tlbmQgaG9sZHMgYSBwaW4gb24gdGhhdCBwYWdlLgorICAg ICAgIEZvciA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IHNjYW5zLCB0aGUgaW5kZXgg YWNjZXNzIG1ldGhvZAorICAgICAgIG1hbmFnZXMgdGhpcyBwaW4gZGlyZWN0bHkuCisgICAgICAg Rm9yIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gc2NhbnMsIHRoZSBpbmRleCBBTSBo b2xkcyBhIGJ1ZmZlcgorICAgICAgIHBpbiBvbiBlYWNoIGJhdGNoJ3MgaW5kZXggbGVhZiBwYWdl IChpbiBpdHMgcGVyLWJhdGNoIG9wYXF1ZSBhcmVhKSwKKyAgICAgICB3aGlsZSB0aGUgdGFibGUg QU0gY29udHJvbHMgd2hlbiB0aGUgaW50ZXJsb2NrIGlzIGRyb3BwZWQgdmlhCisgICAgICAgPGZ1 bmN0aW9uPmFtdW5ndWFyZGJhdGNoPC9mdW5jdGlvbj4uCisgICAgICAgVGhlIG5lZWQgZm9yIHRo aXMgcnVsZSBpcyBleHBsYWluZWQgYmVsb3cuCiAgICAgICA8L3BhcmE+CiAgICAgIDwvbGlzdGl0 ZW0+CiAgICAgPC9pdGVtaXplZGxpc3Q+CkBAIC0xMTM4LDM5ICsxNDk3LDk0IEBAIGFtdHJhbnNs YXRlY21wdHlwZSAoQ29tcGFyZVR5cGUgY21wdHlwZSwgT2lkIG9wZmFtaWx5LCBPaWQgb3BjaW50 eXBlKTsKICAgIDxjb21tYW5kPlZBQ1VVTTwvY29tbWFuZD4uCiAgICBUaGlzIGNyZWF0ZXMgbm8g c2VyaW91cyBwcm9ibGVtcyBpZiB0aGF0IGl0ZW0KICAgIG51bWJlciBpcyBzdGlsbCB1bnVzZWQg d2hlbiB0aGUgcmVhZGVyIHJlYWNoZXMgaXQsIHNpbmNlIGFuIGVtcHR5Ci0gICBpdGVtIHNsb3Qg d2lsbCBiZSBpZ25vcmVkIGJ5IDxmdW5jdGlvbj5oZWFwX2ZldGNoKCk8L2Z1bmN0aW9uPi4gIEJ1 dCB3aGF0IGlmIGEKKyAgIGl0ZW0gc2xvdCB3aWxsIHNpbXBseSBiZSB0cmVhdGVkIGFzIG5vdC12 aXNpYmxlLiAgQnV0IHdoYXQgaWYgYQogICAgdGhpcmQgYmFja2VuZCBoYXMgYWxyZWFkeSByZS11 c2VkIHRoZSBpdGVtIHNsb3QgZm9yIHNvbWV0aGluZyBlbHNlPwogICAgV2hlbiB1c2luZyBhbiBN VkNDLWNvbXBsaWFudCBzbmFwc2hvdCwgdGhlcmUgaXMgbm8gcHJvYmxlbSBiZWNhdXNlCiAgICB0 aGUgbmV3IG9jY3VwYW50IG9mIHRoZSBzbG90IGlzIGNlcnRhaW4gdG8gYmUgdG9vIG5ldyB0byBw YXNzIHRoZQogICAgc25hcHNob3QgdGVzdC4gIEhvd2V2ZXIsIHdpdGggYSBub24tTVZDQy1jb21w bGlhbnQgc25hcHNob3QgKHN1Y2ggYXMKICAgIDxsaXRlcmFsPlNuYXBzaG90QW55PC9saXRlcmFs PiksIGl0IHdvdWxkIGJlIHBvc3NpYmxlIHRvIGFjY2VwdCBhbmQgcmV0dXJuCi0gICBhIHJvdyB0 aGF0IGRvZXMgbm90IGluIGZhY3QgbWF0Y2ggdGhlIHNjYW4ga2V5cy4gIFdlIGNvdWxkIGRlZmVu ZAotICAgYWdhaW5zdCB0aGlzIHNjZW5hcmlvIGJ5IHJlcXVpcmluZyB0aGUgc2NhbiBrZXlzIHRv IGJlIHJlY2hlY2tlZAotICAgYWdhaW5zdCB0aGUgaGVhcCByb3cgaW4gYWxsIGNhc2VzLCBidXQg dGhhdCBpcyB0b28gZXhwZW5zaXZlLiAgSW5zdGVhZCwKLSAgIHdlIHVzZSBhIHBpbiBvbiBhbiBp bmRleCBwYWdlIGFzIGEgcHJveHkgdG8gaW5kaWNhdGUgdGhhdCB0aGUgcmVhZGVyCi0gICBtaWdo dCBzdGlsbCBiZSA8cXVvdGU+aW4gZmxpZ2h0PC9xdW90ZT4gZnJvbSB0aGUgaW5kZXggZW50cnkg dG8gdGhlIG1hdGNoaW5nCi0gICBoZWFwIGVudHJ5LiAgTWFraW5nIDxmdW5jdGlvbj5hbWJ1bGtk ZWxldGU8L2Z1bmN0aW9uPiBibG9jayBvbiBzdWNoIGEgcGluIGVuc3VyZXMKLSAgIHRoYXQgPGNv bW1hbmQ+VkFDVVVNPC9jb21tYW5kPiBjYW5ub3QgZGVsZXRlIHRoZSBoZWFwIGVudHJ5IGJlZm9y ZSB0aGUgcmVhZGVyCi0gICBpcyBkb25lIHdpdGggaXQuICBUaGlzIHNvbHV0aW9uIGNvc3RzIGxp dHRsZSBpbiBydW4gdGltZSwgYW5kIGFkZHMgYmxvY2tpbmcKLSAgIG92ZXJoZWFkIG9ubHkgaW4g dGhlIHJhcmUgY2FzZXMgd2hlcmUgdGhlcmUgYWN0dWFsbHkgaXMgYSBjb25mbGljdC4KKyAgIGEg d2hvbGx5IHVucmVsYXRlZCByb3cgKG9uZSB0aGF0IGRvZXMgbm90IG5lY2Vzc2FyaWx5IHNhdGlz ZnkgdGhlIHNjYW4KKyAgIGtleXMpLiAgV2UgY2FuIG9wdGlvbmFsbHkgdXNlIGEgcGluIG9uIGFu IGluZGV4IHBhZ2UgYXMgYSBwcm94eSB0byBpbmRpY2F0ZQorICAgdGhhdCB0aGUgcmVhZGVyIG1p Z2h0IHN0aWxsIGJlIDxxdW90ZT5pbiBmbGlnaHQ8L3F1b3RlPiBmcm9tIHRoZSBpbmRleAorICAg ZW50cnkgdG8gdGhlIG1hdGNoaW5nIGhlYXAgZW50cnkuICBNYWtpbmcgPGZ1bmN0aW9uPmFtYnVs a2RlbGV0ZTwvZnVuY3Rpb24+CisgICBibG9jayBvbiBzdWNoIGEgcGluIGVuc3VyZXMgdGhhdCA8 Y29tbWFuZD5WQUNVVU08L2NvbW1hbmQ+IGNhbm5vdCBkZWxldGUKKyAgIHRoZSBoZWFwIGVudHJ5 IGJlZm9yZSB0aGUgcmVhZGVyIGlzIGRvbmUgd2l0aCBpdC4gIFRoaXMgc29sdXRpb24gY29zdHMK KyAgIGxpdHRsZSBpbiBydW4gdGltZSwgYW5kIGFkZHMgYmxvY2tpbmcgb3ZlcmhlYWQgb25seSBp biB0aGUgcmFyZSBjYXNlcyB3aGVyZQorICAgdGhlcmUgYWN0dWFsbHkgaXMgYSBjb25mbGljdC4g IEZvciBwbGFpbiBpbmRleCBzY2FucyB0aGF0IHVzZSBhbgorICAgTVZDQy1jb21wbGlhbnQgc25h cHNob3QsIGhvbGRpbmcgdGhlIHBpbiBpcyB1bm5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBzY2FuCisg ICB3aWxsIGFsd2F5cyB2aXNpdCB0aGUgaGVhcCBwYWdlLCB3aGVyZSB0aGUgc25hcHNob3QgaXRz ZWxmIHdpbGwgcmVqZWN0IGFueQorICAgcmVjeWNsZWQgVElEJ3MgbmV3IG9jY3VwYW50LiAgKElu ZGV4LW9ubHkgc2NhbnMgYXJlIGEgc3BlY2lhbCBjYXNlLCBhcworICAgZGlzY3Vzc2VkIGJlbG93 LikKICAgPC9wYXJhPgogCiAgIDxwYXJhPgotICAgVGhpcyBzb2x1dGlvbiByZXF1aXJlcyB0aGF0 IGluZGV4IHNjYW5zIGJlIDxxdW90ZT5zeW5jaHJvbm91czwvcXVvdGU+OiB3ZSBoYXZlCi0gICB0 byBmZXRjaCBlYWNoIGhlYXAgdHVwbGUgaW1tZWRpYXRlbHkgYWZ0ZXIgc2Nhbm5pbmcgdGhlIGNv cnJlc3BvbmRpbmcgaW5kZXgKLSAgIGVudHJ5LiAgVGhpcyBpcyBleHBlbnNpdmUgZm9yIGEgbnVt YmVyIG9mIHJlYXNvbnMuICBBbgotICAgPHF1b3RlPmFzeW5jaHJvbm91czwvcXVvdGU+IHNjYW4g aW4gd2hpY2ggd2UgY29sbGVjdCBtYW55IFRJRHMgZnJvbSB0aGUgaW5kZXgsCi0gICBhbmQgb25s eSB2aXNpdCB0aGUgaGVhcCB0dXBsZXMgc29tZXRpbWUgbGF0ZXIsIHJlcXVpcmVzIG11Y2ggbGVz cyBpbmRleAotICAgbG9ja2luZyBvdmVyaGVhZCBhbmQgY2FuIGFsbG93IGEgbW9yZSBlZmZpY2ll bnQgaGVhcCBhY2Nlc3MgcGF0dGVybi4KLSAgIFBlciB0aGUgYWJvdmUgYW5hbHlzaXMsIHdlIG11 c3QgdXNlIHRoZSBzeW5jaHJvbm91cyBhcHByb2FjaCBmb3IKLSAgIG5vbi1NVkNDLWNvbXBsaWFu dCBzbmFwc2hvdHMsIGJ1dCBhbiBhc3luY2hyb25vdXMgc2NhbiBpcyB3b3JrYWJsZQotICAgZm9y IGEgcXVlcnkgdXNpbmcgYW4gTVZDQyBzbmFwc2hvdC4KKyAgIFRoaXMgc29sdXRpb24gcmVxdWly ZXMgdGhhdCA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IGluZGV4IHNjYW5zIGJlCisg ICA8cXVvdGU+c3luY2hyb25vdXM8L3F1b3RlPjogdGhlIHRhYmxlIEFNIG11c3QgZmV0Y2ggZWFj aCBoZWFwIHR1cGxlCisgICBpbW1lZGlhdGVseSBhZnRlciBzY2FubmluZyB0aGUgY29ycmVzcG9u ZGluZyBpbmRleCBlbnRyeS4gIFRoaXMgaXMKKyAgIGV4cGVuc2l2ZSBmb3IgYSBudW1iZXIgb2Yg cmVhc29ucy4gIFRoZQorICAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBpbnRlcmZh Y2UsIGJ5IGNvbnRyYXN0LCB3YXMgZGVzaWduZWQgdG8KKyAgIGFsbG93IHNjYW5zIHRvIGJlIDxx dW90ZT5hc3luY2hyb25vdXM8L3F1b3RlPi4KICAgPC9wYXJhPgogCiAgIDxwYXJhPgotICAgSW4g YW4gPGZ1bmN0aW9uPmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4gaW5kZXggc2NhbiwgdGhlIGFjY2Vz cyBtZXRob2QgZG9lcyBub3QKLSAgIGtlZXAgYW4gaW5kZXggcGluIG9uIGFueSBvZiB0aGUgcmV0 dXJuZWQgdHVwbGVzLiAgVGhlcmVmb3JlCi0gICBpdCBpcyBvbmx5IHNhZmUgdG8gdXNlIHN1Y2gg c2NhbnMgd2l0aCBNVkNDLWNvbXBsaWFudCBzbmFwc2hvdHMuCisgICBXaGV0aGVyIGEgYmF0Y2gn cyBUSUQgcmVjeWNsaW5nIGludGVybG9jayAodHlwaWNhbGx5IGFuIGluZGV4IHBhZ2UgYnVmZmVy CisgICBwaW4pIGlzIGRyb3BwZWQgaW1tZWRpYXRlbHkgb3IgZGVmZXJyZWQgaXMgY29udHJvbGxl ZCBieSBhIGdlbmVyaWMsCisgICBzY2FuLWxldmVsIHBvbGljeSB0aGF0IGlzIGRldGVybWluZWQg d2hlbiB0aGUgc2NhbiBpcyBvcGVuZWQgJm1kYXNoOyBpdCBpcworICAgbm90IHVuZGVyIHRoZSBj b250cm9sIG9mIGVpdGhlciB0aGUgaW5kZXggQU0gb3IgdGhlIHRhYmxlIEFNLiAgVGhlIHNjYW4n cworICAgPHN0cnVjdGZpZWxkPmJhdGNoSW1tZWRpYXRlVW5ndWFyZDwvc3RydWN0ZmllbGQ+IGZs YWcgZW5jb2RlcyB0aGlzIHBvbGljeS4KKyAgIEl0IGlzIHNldCBiYXNlZCBvbiB0d28gY3JpdGVy aWEgdGhhdCBhcmUga25vd24gdG8gdGhlIGNvcmUgc2NhbiBtYWNoaW5lcnk6CisgICB3aGV0aGVy IHRoZSBzY2FuIHVzZXMgYW4gTVZDQy1jb21wbGlhbnQgc25hcHNob3QsIGFuZCB3aGV0aGVyIGl0 IGlzIGFuCisgICBpbmRleC1vbmx5IHNjYW4uICBTcGVjaWZpY2FsbHksCisgICA8c3RydWN0Zmll bGQ+YmF0Y2hJbW1lZGlhdGVVbmd1YXJkPC9zdHJ1Y3RmaWVsZD4gaXMgdHJ1ZSB3aGVuIHRoZSBz Y2FuIHVzZXMKKyAgIGFuIE1WQ0Mgc25hcHNob3QgYW5kIGlzIDxlbXBoYXNpcz5ub3Q8L2VtcGhh c2lzPiBhbiBpbmRleC1vbmx5IHNjYW4uCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFdoZW4g PHN0cnVjdGZpZWxkPmJhdGNoSW1tZWRpYXRlVW5ndWFyZDwvc3RydWN0ZmllbGQ+IGlzIHRydWUs IHRoZQorICAgaW50ZXJsb2NrIGlzIGRyb3BwZWQgaW5zaWRlCisgICA8ZnVuY3Rpb24+aW5kZXhh bV91dGlsX3VubG9ja19iYXRjaDwvZnVuY3Rpb24+IChiZWZvcmUgdGhlIGJhdGNoIGlzIGV2ZW4K KyAgIHJldHVybmVkIHRvIHRoZSB0YWJsZSBBTSksIGJlY2F1c2UgYSBwbGFpbiBpbmRleCBzY2Fu IHdpdGggYW4gTVZDQworICAgc25hcHNob3Qgd2lsbCBhbHdheXMgdmlzaXQgdGhlIGhlYXAgcGFn ZSwgd2hlcmUgdGhlIE1WQ0MgdmlzaWJpbGl0eSBjaGVjaworICAgaXMgYXV0aG9yaXRhdGl2ZSAm bWRhc2g7IGV2ZW4gaWYgPGNvbW1hbmQ+VkFDVVVNPC9jb21tYW5kPiByZWN5Y2xlcyBhIFRJRCwK KyAgIHRoZSBuZXcgb2NjdXBhbnQgY2Fubm90IHBhc3MgdGhlIHNuYXBzaG90IHRlc3QuCisgIDwv cGFyYT4KKworICA8cGFyYT4KKyAgIFdoZW4gPHN0cnVjdGZpZWxkPmJhdGNoSW1tZWRpYXRlVW5n dWFyZDwvc3RydWN0ZmllbGQ+IGlzIGZhbHNlLCB0aGUKKyAgIGludGVybG9jayBpcyByZXRhaW5l ZCB1bnRpbCB0aGUgdGFibGUgQU0gZXhwbGljaXRseSBjYWxscworICAgPGZ1bmN0aW9uPmFtdW5n dWFyZGJhdGNoPC9mdW5jdGlvbj4sIGJlY2F1c2UgdGhlIHNjYW4gY2Fubm90IHJlbHkgb24gdGhh dAorICAgaGVhcCBwYWdlIE1WQ0MgYmFja3N0b3AuICBGb3Igbm9uLU1WQ0Mgc2NhbnMsIHRoZXJl IGlzIG5vIE1WQ0Mgc25hcHNob3QgdG8KKyAgIHJlamVjdCBhIHJlY3ljbGVkIFRJRCdzIG5ldyBv Y2N1cGFudCBhdCBhbGwuICBGb3IgaW5kZXgtb25seSBzY2FucywgZXZlbgorICAgd2l0aCBhbiBN VkNDIHNuYXBzaG90LCB0aGUgc2NhbiB0eXBpY2FsbHkgYXZvaWRzIHZpc2l0aW5nIHRoZSBoZWFw IHBhZ2UKKyAgIGFsdG9nZXRoZXIgKHVzaW5nIHRoZSB2aXNpYmlsaXR5IG1hcCBpbnN0ZWFkKSwg c28gdGhlIE1WQ0MgY2hlY2sgdGhhdCB3b3VsZAorICAgY2F0Y2ggYSByZWN5Y2xlZCBUSUQgdXN1 YWxseSBuZXZlciBydW5zLiAgSW4gYm90aCBjYXNlcyB0aGUgaW50ZXJsb2NrIG9uCisgICB0aGUg aW5kZXggcGFnZSBpcyB3aGF0IHByZXZlbnRzIDxjb21tYW5kPlZBQ1VVTTwvY29tbWFuZD4gZnJv bSByZWN5Y2xpbmcKKyAgIFRJRHMgd2hpbGUgdGhlIHNjYW4gaXMgc3RpbGwgaW4gZmxpZ2h0Lgor ICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBXaGVuIDxzdHJ1Y3RmaWVsZD5iYXRjaEltbWVkaWF0 ZVVuZ3VhcmQ8L3N0cnVjdGZpZWxkPiBpcyBmYWxzZSwgdGhlIHRhYmxlCisgICBBTSBkZWNpZGVz IDxlbXBoYXNpcz53aGVuPC9lbXBoYXNpcz4gdG8gY2FsbAorICAgPGZ1bmN0aW9uPmFtdW5ndWFy ZGJhdGNoPC9mdW5jdGlvbj47IHRoZSBpbmRleCBBTSBkZWNpZGVzCisgICA8ZW1waGFzaXM+d2hh dDwvZW1waGFzaXM+IHRvIHJlbGVhc2UuICBXaGVuCisgICA8c3RydWN0ZmllbGQ+YmF0Y2hJbW1l ZGlhdGVVbmd1YXJkPC9zdHJ1Y3RmaWVsZD4gaXMgdHJ1ZSwgdGhlIGluZGV4IEFNCisgICBkcm9w cyB0aGUgaW50ZXJsb2NrIGl0c2VsZiAoaW5zaWRlCisgICA8ZnVuY3Rpb24+aW5kZXhhbV91dGls X3VubG9ja19iYXRjaDwvZnVuY3Rpb24+KSwgYW5kCisgICA8ZnVuY3Rpb24+YW11bmd1YXJkYmF0 Y2g8L2Z1bmN0aW9uPiBpcyBuZXZlciBjYWxsZWQuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAg IFNpbWlsYXJseSwgYW4gPGZ1bmN0aW9uPmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4gaW5kZXggc2Nh biBpcyBpbmhlcmVudGx5CisgICBhc3luY2hyb25vdXM6IGFsbCBtYXRjaGluZyBUSURzIGFyZSBj b2xsZWN0ZWQgaW50byBhIGJpdG1hcCBiZWZvcmUgYW55IGhlYXAKKyAgIGFjY2VzcyBiZWdpbnMu ICBTdWNoIHNjYW5zIHRoZXJlZm9yZSByZXF1aXJlIGFuIE1WQ0MtY29tcGxpYW50IHNuYXBzaG90 LAorICAgYW5kIHRoZXJlIGlzIG5vIG5lZWQgZm9yIHRoZSBhY2Nlc3MgbWV0aG9kIHRvIGhvbGQg aW5kZXggcGFnZSBwaW5zLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBJbmRleCBhY2Nlc3Mg bWV0aG9kcyB0aGF0IHVzZSA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IG11c3QgbWFu YWdlCisgICBwaW4gbGlmZXRpbWUgdGhlbXNlbHZlcywgc2luY2UgdGhlcmUgaXMgbm8gdGFibGUg QU0gaW50ZXJtZWRpYXJ5ICh1bmxpa2UKKyAgIHdpdGggPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1 bmN0aW9uPikuICBUaGUgaW5kZXggQU0gbXVzdCBob2xkIGEgcGluIG9uIHRoZQorICAgY3VycmVu dCBpbmRleCBwYWdlIHVudGlsIHRoZSBzY2FuIG1vdmVzIHRvIGEgZGlmZmVyZW50IHBhZ2Ugb3Ig ZW5kcy4KICAgPC9wYXJhPgogCiAgIDxwYXJhPgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3Jl Zi9jcmVhdGVfdGFibGUuc2dtbCBiL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3RhYmxlLnNnbWwK aW5kZXggODA4MjliMjM5Li4xOGRlOTg0ZDIgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYv Y3JlYXRlX3RhYmxlLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfdGFibGUuc2dt bApAQCAtMTE3MywxMiArMTE3MywxMyBAQCBXSVRIICggTU9EVUxVUyA8cmVwbGFjZWFibGUgY2xh c3M9InBhcmFtZXRlciI+bnVtZXJpY19saXRlcmFsPC9yZXBsYWNlYWJsZT4sIFJFTQogICAgICA8 L3BhcmE+CiAKICAgICAgPHBhcmE+Ci0gICAgICBUaGUgYWNjZXNzIG1ldGhvZCBtdXN0IHN1cHBv cnQgPGxpdGVyYWw+YW1nZXR0dXBsZTwvbGl0ZXJhbD4gKHNlZSA8eHJlZgotICAgICAgbGlua2Vu ZD0iaW5kZXhhbSIvPik7IGF0IHByZXNlbnQgdGhpcyBtZWFucyA8YWNyb255bT5HSU48L2Fjcm9u eW0+Ci0gICAgICBjYW5ub3QgYmUgdXNlZC4gIEFsdGhvdWdoIGl0J3MgYWxsb3dlZCwgdGhlcmUg aXMgbGl0dGxlIHBvaW50IGluIHVzaW5nCi0gICAgICBCLXRyZWUgb3IgaGFzaCBpbmRleGVzIHdp dGggYW4gZXhjbHVzaW9uIGNvbnN0cmFpbnQsIGJlY2F1c2UgdGhpcwotICAgICAgZG9lcyBub3Ro aW5nIHRoYXQgYW4gb3JkaW5hcnkgdW5pcXVlIGNvbnN0cmFpbnQgZG9lc24ndCBkbyBiZXR0ZXIu Ci0gICAgICBTbyBpbiBwcmFjdGljZSB0aGUgYWNjZXNzIG1ldGhvZCB3aWxsIGFsd2F5cyBiZSA8 YWNyb255bT5HaVNUPC9hY3JvbnltPiBvcgorICAgICAgVGhlIGFjY2VzcyBtZXRob2QgbXVzdCBz dXBwb3J0IGVpdGhlciA8bGl0ZXJhbD5hbWdldGJhdGNoPC9saXRlcmFsPgorICAgICAgb3IgPGxp dGVyYWw+YW1nZXR0dXBsZTwvbGl0ZXJhbD4gKHNlZSA8eHJlZiBsaW5rZW5kPSJpbmRleGFtIi8+ KTsgYXQKKyAgICAgIHByZXNlbnQgdGhpcyBtZWFucyA8YWNyb255bT5HSU48L2Fjcm9ueW0+IGNh bm5vdCBiZSB1c2VkLiAgQWx0aG91Z2gKKyAgICAgIGl0J3MgYWxsb3dlZCwgdGhlcmUgaXMgbGl0 dGxlIHBvaW50IGluIHVzaW5nIEItdHJlZSBvciBoYXNoIGluZGV4ZXMKKyAgICAgIHdpdGggYW4g ZXhjbHVzaW9uIGNvbnN0cmFpbnQsIGJlY2F1c2UgdGhpcyBkb2VzIG5vdGhpbmcgdGhhdCBhbgor ICAgICAgb3JkaW5hcnkgdW5pcXVlIGNvbnN0cmFpbnQgZG9lc24ndCBkbyBiZXR0ZXIuICBTbyBp biBwcmFjdGljZSB0aGUKKyAgICAgIGFjY2VzcyBtZXRob2Qgd2lsbCBhbHdheXMgYmUgPGFjcm9u eW0+R2lTVDwvYWNyb255bT4gb3IKICAgICAgIDxhY3JvbnltPlNQLUdpU1Q8L2Fjcm9ueW0+Lgog ICAgICA8L3BhcmE+CiAKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvZHVtbXlfaW5kZXhf YW0vZHVtbXlfaW5kZXhfYW0uYyBiL3NyYy90ZXN0L21vZHVsZXMvZHVtbXlfaW5kZXhfYW0vZHVt bXlfaW5kZXhfYW0uYwppbmRleCAzMWY4ZDJiODEuLmE5NzU2ZjY1ZSAxMDA2NDQKLS0tIGEvc3Jj L3Rlc3QvbW9kdWxlcy9kdW1teV9pbmRleF9hbS9kdW1teV9pbmRleF9hbS5jCisrKyBiL3NyYy90 ZXN0L21vZHVsZXMvZHVtbXlfaW5kZXhfYW0vZHVtbXlfaW5kZXhfYW0uYwpAQCAtMzM0LDEwICsz MzQsMTIgQEAgZGloYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCS5hbWJlZ2luc2NhbiA9IGRp YmVnaW5zY2FuLAogCQkuYW1yZXNjYW4gPSBkaXJlc2NhbiwKIAkJLmFtZ2V0dHVwbGUgPSBOVUxM LAorCQkuYW1nZXRiYXRjaCA9IE5VTEwsCisJCS5hbXVuZ3VhcmRiYXRjaCA9IE5VTEwsCisJCS5h bWtpbGxpdGVtc2JhdGNoID0gTlVMTCwKIAkJLmFtZ2V0Yml0bWFwID0gTlVMTCwKIAkJLmFtZW5k c2NhbiA9IGRpZW5kc2NhbiwKLQkJLmFtbWFya3BvcyA9IE5VTEwsCi0JCS5hbXJlc3RycG9zID0g TlVMTCwKKwkJLmFtcG9zcmVzZXQgPSBOVUxMLAogCQkuYW1lc3RpbWF0ZXBhcmFsbGVsc2NhbiA9 IE5VTEwsCiAJCS5hbWluaXRwYXJhbGxlbHNjYW4gPSBOVUxMLAogCQkuYW1wYXJhbGxlbHJlc2Nh biA9IE5VTEwsCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBi L3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IGU5NDMwZTA3Yi4uMGZlNzhk MDA4IDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9z cmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtMjA4LDYgKzIwOCw3IEBAIEJPT0wK IEJPT0xFQU4KIEJPWAogQlRBcnJheUtleUluZm8KK0JUQmF0Y2hEYXRhCiBCVEJ1aWxkU3RhdGUK IEJUQ2FsbGJhY2tTdGF0ZQogQlRDeWNsZUlkCkBAIC0yMzUsOCArMjM2LDYgQEAgQlRTY2FuSW5z ZXJ0RGF0YQogQlRTY2FuS2V5UHJlcHJvYwogQlRTY2FuT3BhcXVlCiBCVFNjYW5PcGFxdWVEYXRh Ci1CVFNjYW5Qb3NEYXRhCi1CVFNjYW5Qb3NJdGVtCiBCVFNoYXJlZAogQlRTb3J0QXJyYXlDb250 ZXh0CiBCVFNwb29sCkBAIC0yNjUsNiArMjY0LDkgQEAgQmFzZUJhY2t1cENtZAogQmFzZUJhY2t1 cFRhcmdldEhhbmRsZQogQmFzZUJhY2t1cFRhcmdldFR5cGUKIEJhdGNoTVZDQ1N0YXRlCitCYXRj aE1hdGNoaW5nSXRlbQorQmF0Y2hSaW5nQnVmZmVyCitCYXRjaFJpbmdJdGVtUG9zCiBCZWdpbkRp cmVjdE1vZGlmeV9mdW5jdGlvbgogQmVnaW5Gb3JlaWduSW5zZXJ0X2Z1bmN0aW9uCiBCZWdpbkZv cmVpZ25Nb2RpZnlfZnVuY3Rpb24KQEAgLTEyNDgsNiArMTI1MCw3IEBAIEhiYUxpbmUKIEhlYWRs aW5lSnNvblN0YXRlCiBIZWFkbGluZVBhcnNlZFRleHQKIEhlYWRsaW5lV29yZEVudHJ5CitIZWFw QmF0Y2hEYXRhCiBIZWFwQ2hlY2tDb250ZXh0CiBIZWFwQ2hlY2tSZWFkU3RyZWFtRGF0YQogSGVh cFBhZ2VGcmVlemUKQEAgLTEzMjcsNiArMTMzMCw4IEBAIEluZGV4T3JkZXJCeURpc3RhbmNlCiBJ bmRleFBhdGgKIEluZGV4UnVudGltZUtleUluZm8KIEluZGV4U2NhbgorSW5kZXhTY2FuQmF0Y2gK K0luZGV4U2NhbkJhdGNoRGF0YQogSW5kZXhTY2FuRGVzYwogSW5kZXhTY2FuRGVzY0RhdGEKIElu ZGV4U2Nhbkluc3RydW1lbnRhdGlvbgpAQCAtMzU1MCwxOCArMzU1NSwxNyBAQCBhbWNhbnJldHVy bl9mdW5jdGlvbgogYW1jb3N0ZXN0aW1hdGVfZnVuY3Rpb24KIGFtZW5kc2Nhbl9mdW5jdGlvbgog YW1lc3RpbWF0ZXBhcmFsbGVsc2Nhbl9mdW5jdGlvbgorYW1nZXRiYXRjaF9mdW5jdGlvbgogYW1n ZXRiaXRtYXBfZnVuY3Rpb24KIGFtZ2V0dHJlZWhlaWdodF9mdW5jdGlvbgogYW1nZXR0dXBsZV9m dW5jdGlvbgogYW1pbml0cGFyYWxsZWxzY2FuX2Z1bmN0aW9uCiBhbWluc2VydF9mdW5jdGlvbgog YW1pbnNlcnRjbGVhbnVwX2Z1bmN0aW9uCi1hbW1hcmtwb3NfZnVuY3Rpb24KIGFtb3B0aW9uc19m dW5jdGlvbgogYW1wYXJhbGxlbHJlc2Nhbl9mdW5jdGlvbgogYW1wcm9wZXJ0eV9mdW5jdGlvbgog YW1yZXNjYW5fZnVuY3Rpb24KLWFtcmVzdHJwb3NfZnVuY3Rpb24KIGFtdHJhbnNsYXRlX2NtcHR5 cGVfZnVuY3Rpb24KIGFtdHJhbnNsYXRlX3N0cmF0ZWd5X2Z1bmN0aW9uCiBhbXZhY3V1bWNsZWFu dXBfZnVuY3Rpb24KLS0gCjIuNTMuMAoK --0000000000002eda15064ecc7bcf Content-Type: application/octet-stream; name="v24-0005-heapam-Add-index-scan-I-O-prefetching.patch" Content-Disposition: attachment; filename="v24-0005-heapam-Add-index-scan-I-O-prefetching.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnncq2514 RnJvbSAwZmM1ODZjYmI2YWNhYzk3YzZmZTVlMWMyNDhjMGQ3NTM3ZTQ3ZDJhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFdl ZCwgMjUgTWFyIDIwMjYgMTY6NTg6MDkgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyNCA1LzhdIGhl YXBhbTogQWRkIGluZGV4IHNjYW4gSS9PIHByZWZldGNoaW5nLgoKVGhpcyBjb21taXQgaW1wbGVt ZW50cyBJL08gcHJlZmV0Y2hpbmcgZm9yIGluZGV4IHNjYW5zIChhbmQgaW5kZXgtb25seQpzY2Fu cyB0aGF0IHJlcXVpcmUgaGVhcCBmZXRjaGVzKS4gVGhpcyB3YXMgbWFkZSBwb3NzaWJsZSBieSB0 aGUgcmVjZW50CmFkZGl0aW9uIG9mIGJhdGNoaW5nIGludGVyZmFjZXMgdG8gYm90aCB0aGUgdGFi bGUgQU0gYW5kIGluZGV4IEFNIEFQSXMuCgpUaGUgYW1nZXRiYXRjaCBpbmRleCBBTSBpbnRlcmZh Y2UgcHJvdmlkZXMgYmF0Y2hlcyBvZiBtYXRjaGluZyBUSURzCihyYXRoZXIgdGhhbiBvbmUgdHVw bGUgYXQgYSB0aW1lKSwgZWFjaCBvZiB3aGljaCBtdXN0IGJlIHRha2VuIGZyb20KaW5kZXggdHVw bGVzIHRoYXQgYXBwZWFyIHRvZ2V0aGVyIG9uIGEgc2luZ2xlIGluZGV4IHBhZ2UuICBUaGlzIGFs bG93cwptdWx0aXBsZSBiYXRjaGVzIHRvIGJlIGhlbGQgb3BlbiBzaW11bHRhbmVvdXNseS4gIEdp dmluZyB0aGUgdGFibGUgQU0gYW4KZXhwbGljaXQgdW5kZXJzdGFuZGluZyBvZiBpbmRleCBBTSBj b25jZXB0cy9pbmRleCBwYWdlIGJvdW5kYXJpZXMgYWxsb3dzCml0IHRvIGNvbnNpZGVyIGFsbCBv ZiB0aGUgcmVsZXZhbnQgY29zdHMgYW5kIGJlbmVmaXRzLgoKUHJlZmV0Y2hpbmcgaXMgaW1wbGVt ZW50ZWQgdXNpbmcgYSBwcmVmZXRjaGluZyBwb3NpdGlvbiB1bmRlciB0aGUKY29udHJvbCBvZiB0 aGUgdGFibGUgQU0gYW5kIGNvcmUgY29kZS4gIFRoaXMgaXMgY2xvc2VseSByZWxhdGVkIHRvIHRo ZQpzY2FuIHBvc2l0aW9uIGFkZGVkIGJ5IGNvbW1pdCBGSVhNRSwgd2hpY2ggaW50cm9kdWNlZCB0 aGUgYW1nZXRiYXRjaAppbnRlcmZhY2UuICBBIHJlYWQgc3RyZWFtIGNhbGxiYWNrIGFkdmFuY2Vz IHRoZSByZWFkIHN0cmVhbSBhcyBuZWVkZWQgdG8KcHJvdmlkZSBzdWZmaWNpZW50bHkgbWFueSBo ZWFwIGJsb2NrIG51bWJlcnMgdG8gbWFpbnRhaW4gdGhlIHJlYWQKc3RyZWFtJ3MgdGFyZ2V0IHBy ZWZldGNoIGRpc3RhbmNlLgoKVGVzdGluZyBoYXMgc2hvd24gdGhhdCBpbmRleCBwcmVmZXRjaGlu ZyBjYW4gbWFrZSBpbmRleCBzY2FucyBtdWNoCmZhc3Rlci4gIExhcmdlIHJhbmdlIHNjYW5zIHRo YXQgcmV0dXJuIG1hbnkgdHVwbGVzIGNhbiBiZSBhcyBtdWNoIGFzIDMweApmYXN0ZXIgd2l0aCBs b2NhbCBTU0RzIHdoZW4gYnVmZmVyZWQgSS9PIGlzIHVzZWQsIGFuZCA1MHggZmFzdGVyIG9yIG1v cmUKd2l0aCBoaWdoZXItbGF0ZW5jeSBzdG9yYWdlIHN1Y2ggYXMgbmV0d29yay1hdHRhY2hlZCBi bG9jayBkZXZpY2VzLAp3aGVyZSB0aGUgYmVuZWZpdCBvZiBoaWRpbmcgSS9PIGxhdGVuY3kgdGhy b3VnaCBwcmVmZXRjaGluZyBpcyBldmVuCmdyZWF0ZXIuCgpBIG5ldyBHVUMgKGVuYWJsZV9pbmRl eHNjYW5fcHJlZmV0Y2gpIGNvbnRyb2xzIHRoZSB1c2Ugb2YgaW5kZXgKcHJlZmV0Y2hpbmcuICBU aGUgZGVmYXVsdCBzZXR0aW5nIGlzICdvbicsIHNvIGFsbCBwbGFpbiBpbmRleCBzY2FucyB1c2UK cHJlZmV0Y2hpbmcgd2hlcmUgc3VwcG9ydCBleGlzdHMuICBBbGwgaW5kZXgtb25seSBzY2FucyB3 aWxsIGFsc28gdXNlCnByZWZldGNoaW5nIGF1dG9tYXRpY2FsbHkgd2hlcmUgc3VwcG9ydGVkIChv bmNlIHRoZSBzY2FuIHN0YXJ0cyB0bwpyZXF1aXJlIGEgc2lnbmlmaWNhbnQgbnVtYmVyIG9mIGhl YXAgZmV0Y2hlcykuCgpBbiBpbXBvcnRhbnQgZ29hbCBvZiB0aGUgYW1nZXRiYXRjaCBkZXNpZ24g aXMgdG8gZW5hYmxlIHRoZSB0YWJsZSBBTSdzCnJlYWQgc3RyZWFtIGNhbGxiYWNrIHRvIGFkdmFu Y2UgaXRzIHByZWZldGNoIHBvc2l0aW9uIHVzaW5nIFRJRHMgdGhhdAphcHBlYXIgb24gYSBsZWFm IHBhZ2UgdGhhdCdzIGFoZWFkIG9mIHRoZSBjdXJyZW50IHNjYW4gcG9zaXRpb24ncyBsZWFmCnBh Z2UuICBUaGlzIGlzIGNydWNpYWwgd2l0aCBzY2FucyBvZiBpbmRleGVzIHdoZXJlIGVhY2ggbGVh ZiBwYWdlCmhhcHBlbnMgdG8gaGF2ZSByZWxhdGl2ZWx5IGZldyBkaXN0aW5jdCBoZWFwIGJsb2Nr cyBhbW9uZyBpdHMgbWF0Y2hpbmcKVElEcyAoYXMgd2VsbCBhcyB3aXRoIHNjYW5zIHdpdGggbGVh ZiBwYWdlcyB0aGF0IGhhdmUgcmVsYXRpdmVseSBmZXcKdG90YWwgbWF0Y2hpbmcgaXRlbXMpLiAg SW5kZXggc2NhbnMgY2FuIGhhdmUgYXMgbWFueSBhcyA2NCBvcGVuIGJhdGNoZXMsCndoaWNoIHRl c3RpbmcgaGFzIHNob3duIHRvIGJlIGFib3V0IHRoZSBtYXhpbXVtIG51bWJlciB0aGF0IGNhbiBl dmVyIGJlCnVzZWZ1bC4gIEJhdGNoZXMgYXJlIG1haW50YWluZWQgaW4gc2NhbiBvcmRlciB1c2lu ZyBhIHNpbXBsZSByaW5nIGJ1ZmZlcgpkYXRhIHN0cnVjdHVyZS4KCkluIHJhcmUgY2FzZXMgd2hl cmUgdGhlIHNjYW4gZXhjZWVkcyB0aGlzIHF1YXNpLWFyYml0cmFyeSBsaW1pdCBvZiA2NCwKdGhl IHJlYWQgc3RyZWFtIGlzIHRlbXBvcmFyaWx5IHBhdXNlZCB1c2luZyB0aGUgcmVhZCBzdHJlYW0g cGF1c2luZwptZWNoYW5pc20gYWRkZWQgYnkgY29tbWl0IDM4MjI5Y2I5LiAgUHJlZmV0Y2hpbmcg KHZpYSB0aGUgcmVhZCBzdHJlYW0pCmlzIHJlc3VtZWQgb25seSBhZnRlciB0aGUgc2NhbiBwb3Np dGlvbiBhZHZhbmNlcyBiZXlvbmQgaXRzIGN1cnJlbnQgb3BlbgpiYXRjaCBhbmQgdGhlbiBmcmVl cyBhbmQgcmVtb3ZlcyB0aGUgYmF0Y2ggZnJvbSB0aGUgc2NhbidzIGJhdGNoIHJpbmcKYnVmZmVy LiAgVGVzdGluZyBoYXMgc2hvd24gdGhhdCBpdCBpc24ndCB2ZXJ5IGNvbW1vbiBmb3Igc2NhbnMg dG8gaG9sZApvcGVuIG1vcmUgdGhhbiBhYm91dCAxMCBiYXRjaGVzIHRvIGdldCB0aGUgZGVzaXJl ZCBJL08gcHJlZmV0Y2gKZGlzdGFuY2UuCgpUaGUgaGV1cmlzdGljIHVzZWQgdG8gZGVjaWRlIHdo ZW4gdG8gYmVnaW4gcHJlZmV0Y2hpbmcgZGVsYXlzCmluaXRpYWxpemF0aW9uIG9mIHRoZSBzY2Fu J3MgcmVhZCBzdHJlYW0gdW50aWwgdGhlIHNjYW4gdHJhbnNpdGlvbnMgZnJvbQppdHMgZmlyc3Qg YmF0Y2ggdG8gaXRzIHNlY29uZCBiYXRjaC4gIEVhY2ggYmF0Y2ggY29ycmVzcG9uZHMgdG8gbWF0 Y2hpbmcKVElEcyBmcm9tIGEgc2luZ2xlIGluZGV4IGxlYWYgcGFnZSwgc28gcHJlZmV0Y2hpbmcg b25seSBiZWdpbnMgb25jZSB0aGUKc2NhbiByZWFkcyBmcm9tIGl0cyBzZWNvbmQgbGVhZiBwYWdl IGNvbnRhaW5pbmcgYXQgbGVhc3Qgb25lIG1hdGNoaW5nCml0ZW0uICBBIHNlbGVjdGl2ZSBpbmRl eCBzY2FuIHRoYXQgdG91Y2hlcyBvbmx5IG9uZSBsZWFmIHBhZ2UgbmV2ZXIKcmVhY2hlcyB0aGUg c2Vjb25kIGJhdGNoLCBzbyB0aGUgaGV1cmlzdGljIGNvcnJlY3RseSBhdm9pZHMgcHJlZmV0Y2hp bmcKb3ZlcmhlYWQuICBUaGUgcGljdHVyZSBmb3IgbW9yZSBjb21wbGljYXRlZCBjYXNlcyBpcyBt aXhlZC4KClRoZSBzYW1lIHByaW5jaXBsZSBhcHBsaWVzIHRvIG5lc3Rsb29wIGlubmVyIGluZGV4 IHNjYW5zIHdpdGggdmVyeSB0aWdodApsaW1pdHMgKGUuZy4sIGEgY29ycmVsYXRlZCBzdWJxdWVy eSB3aXRoIExJTUlUIDEpLCB3aGVyZSBlYWNoIHJlc2NhbgpyZWFkcyBmcm9tIG9ubHkgYSBzaW5n bGUgbGVhZiBwYWdlOiB0aGUgaGV1cmlzdGljIGF2b2lkcyB0aGUgY29zdCBvZgpyZXBlYXRlZGx5 IHJlc2V0dGluZyBhIHJlYWQgc3RyZWFtIGFjcm9zcyBtYW55IHJlc2NhbnMuICBPbiB0aGUgb3Ro ZXIKaGFuZCwgc29tZSBzZWxlY3RpdmUgc2NhbnMgdGhhdCBhY2Nlc3MgcmFuZG9tbHktb3JkZXJl ZCBoZWFwIHBhZ2VzIHdvdWxkCmdlbnVpbmVseSBiZW5lZml0IGZyb20gcHJlZmV0Y2hpbmcsIGJ1 dCBuZXZlciBnZXQgYXMgZmFyIGFzIHJlYWNoaW5nCnRoZWlyIHNlY29uZCBiYXRjaCAtLSBhIG1p c3NlZCBvcHBvcnR1bml0eSwgd2hlcmUgdGhlIGhldXJpc3RpYyBpcwpvdmVybHkgY2F1dGlvdXMu CgpDb252ZXJzZWx5LCB0aGUgaGV1cmlzdGljIGlzIG5vdCBjYXV0aW91cyBlbm91Z2ggd2l0aCBz bGlnaHRseSBsZXNzCnNlbGVjdGl2ZSBuZXN0bG9vcCBpbm5lciBzY2FucyAoZS5nLiwgTElNSVQg MyB3aXRoaW4gYSBMQVRFUkFMIGpvaW4pLgpUaGVzZSByZXNjYW5zIG1heSBzcGFuIHR3byBsZWFm IHBhZ2VzLCBqdXN0IGJhcmVseSBjcm9zc2luZyB0aGUKc2Vjb25kLWJhdGNoIHRocmVzaG9sZCwg d2hpbGUgc3RpbGwgb25seSBuZWVkaW5nIHRvIGZldGNoIHR3byBvciB0aHJlZQpoZWFwIHBhZ2Vz IC0tIG5vdCBlbm91Z2ggZm9yIHByZWZldGNoaW5nIHRvIHJlYWxpc3RpY2FsbHkgaGVscCBvciBw YXkKZm9yIGl0c2VsZiBvbiBhbnkgaW5kaXZpZHVhbCByZXNjYW4uICBTdWNoIHF1ZXJpZXMgYXJl IHJlZ3Jlc3NlZCBieSB0aGUKd29yayBmcm9tIHRoaXMgY29tbWl0IChyZWxhdGl2ZSB0byBQb3N0 Z3JlU1FMIDE4KSwgdGhvdWdoIG9ubHkgd2hlbiB0aGUKc2NhbiBoYXMgdG8gcmVhZCBoZWFwIHBh Z2VzIGZyb20gc3RvcmFnZS4KCkFkZGluZyBhIHNtYXJ0ZXIgaGV1cmlzdGljIHRoYXQgYWRkcmVz c2VzIGJvdGggc2hvcnRjb21pbmdzIHJlbWFpbnMgYXMKd29yayBmb3IgYSBmdXR1cmUgcmVsZWFz ZS4gIFBhc3NpbmcgZG93biBhbiBFeGVjU2V0VHVwbGVCb3VuZCBzdHlsZSBoaW50CmFuZCB1c2lu ZyB0aGF0IGhpbnQgdG8gaW5mbHVlbmNlIGhvdyB0aGUgcmVhZCBzdHJlYW0gcmFtcHMgdXAgaXRz CmRpc3RhbmNlIHNlZW1zIGxpa2UgYSBwcm9taXNpbmcgYXBwcm9hY2guCgpBdXRob3I6IFRvbWFz IFZvbmRyYSA8dG9tYXNAdm9uZHJhLm1lPgpBdXRob3I6IFBldGVyIEdlb2doZWdhbiA8cGdAYm93 dC5pZT4KUmV2aWV3ZWQtQnk6IEFuZHJlcyBGcmV1bmQgPGFuZHJlc0BhbmFyYXplbC5kZT4KUmV2 aWV3ZWQtQnk6IFRob21hcyBNdW5ybyA8dGhvbWFzLm11bnJvQGdtYWlsLmNvbT4KRGlzY3Vzc2lv bjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9jZjg1ZjQ2Zi1iMDJmLTA1YjItNTI0OC01MDAwYjg5NGVi YWJAZW50ZXJwcmlzZWRiLmNvbQotLS0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaCAgICAg ICAgICAgICAgICAgICB8ICAxMyArCiBzcmMvaW5jbHVkZS9hY2Nlc3MvaW5kZXhiYXRjaC5oICAg ICAgICAgICAgICAgfCAgIDkgKy0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmggICAgICAg ICAgICAgICAgICB8ICAzNyArKwogc3JjL2luY2x1ZGUvb3B0aW1pemVyL2Nvc3QuaCAgICAgICAg ICAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9pbmRleHNj YW4uYyAgICB8IDQ2NCArKysrKysrKysrKysrKysrKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9pbmRl eC9pbmRleGJhdGNoLmMgICAgICAgICB8ICAzNiArLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3Bh dGgvY29zdHNpemUuYyAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3Vj X3BhcmFtZXRlcnMuZGF0ICAgICB8ICAgNyArCiBzcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3Rn cmVzcWwuY29uZi5zYW1wbGUgfCAgIDEgKwogZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sICAgICAg ICAgICAgICAgICAgICAgIHwgIDE2ICsKIGRvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwgICAgICAg ICAgICAgICAgICAgICB8ICA4NCArKystCiBkb2Mvc3JjL3NnbWwvdGFibGVhbS5zZ21sICAgICAg ICAgICAgICAgICAgICAgfCAgIDggKwogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zeXN2aWV3 cy5vdXQgICAgICAgIHwgICAzICstCiAxMyBmaWxlcyBjaGFuZ2VkLCA2NjMgaW5zZXJ0aW9ucygr KSwgMTcgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBh bS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCmluZGV4IDkyODFkODY0NS4uZGFhMDA5 NzIwIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKKysrIGIvc3JjL2lu Y2x1ZGUvYWNjZXNzL2hlYXBhbS5oCkBAIC0xMzQsNiArMTM0LDE5IEBAIHR5cGVkZWYgc3RydWN0 IEluZGV4RmV0Y2hIZWFwRGF0YQogCiAJLyogUGxhaW4gaW5kZXggc2NhbiB4c19sYXN0aW5ibG9j ayBvcHRpbWl6YXRpb24gKi8KIAlib29sCQl4c19sYXN0aW5ibG9jazsgLyogbGFzdCBUSUQgb24g dGhpcyBibG9jayBpbiBjdXJyZW50IGJhdGNoPyAqLworCisJLyoKKwkgKiBSZWFkIHN0cmVhbSBz dGF0ZSBmb3IgcHJlZmV0Y2hpbmcgKG9ubHkgdXNlZCBkdXJpbmcgYW1nZXRiYXRjaCBzY2Fucyku CisJICoKKwkgKiBUaGUgcmVhZCBzdHJlYW0gbW92ZXMgYWhlYWQgb2YgdGhlIHNjYW4ncyBjdXJy ZW50IHBvc2l0aW9uIHVzaW5nIGl0cworCSAqIG93biBwcmVmZXRjaGluZyBwb3NpdGlvbiAocGVy IGNvbnZlbnRpb25zIHN1cHBvcnRlZCBieSBpbmRleGJhdGNoLmMpLgorCSAqIFRoZSByZWFkIHN0 cmVhbSBpcyBhbGxvY2F0ZWQgZWFybHkgaW4gdGhlIHNjYW4sIGFuZCByZXNldCBvbiByZXNjYW4K KwkgKiAoYW5kIHdoZW4gdGhlIHNjYW4gZGlyZWN0aW9uIGNoYW5nZXMpLgorCSAqLworCWJvb2wJ CXhzX3BhdXNlZDsJCS8qIHBhdXNlZCB1bnRpbCBuZXh0IGJhdGNoIGlzIHJlYWQ/ICovCisJU2Nh bkRpcmVjdGlvbiB4c19yZWFkX3N0cmVhbV9kaXI7CS8qIGluZGV4IHNjYW4gZGlyZWN0aW9uICov CisJQmxvY2tOdW1iZXIgeHNfcHJlZmV0Y2hfYmxvY2s7CS8qIGxhc3QgYmxvY2sgcmV0dXJuZWQg dG8geHNfcmVhZF9zdHJlYW0gKi8KKwlSZWFkU3RyZWFtICp4c19yZWFkX3N0cmVhbTsgLyogcHJl ZmV0Y2hpbmcgcmVhZCBzdHJlYW0gKi8KIH0gSW5kZXhGZXRjaEhlYXBEYXRhOwogCiAvKiBSZXN1 bHQgY29kZXMgZm9yIEhlYXBUdXBsZVNhdGlzZmllc1ZhY3V1bSAqLwpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvYWNjZXNzL2luZGV4YmF0Y2guaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9pbmRleGJh dGNoLmgKaW5kZXggZGYwYmU4YzlmLi4yOTE3N2UyMDcgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L2FjY2Vzcy9pbmRleGJhdGNoLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2luZGV4YmF0Y2gu aApAQCAtNDQsNiArNDQsNyBAQCB0YWJsZWFtX3V0aWxfYmF0Y2hzY2FuX2luaXQoSW5kZXhTY2Fu RGVzYyBzY2FuKQogCUFzc2VydChzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1nZXRi YXRjaCAhPSBOVUxMKTsKIAogCXNjYW4tPmJhdGNocmluZ2J1Zi5zY2FuUG9zLnZhbGlkID0gZmFs c2U7CisJc2Nhbi0+YmF0Y2hyaW5nYnVmLnByZWZldGNoUG9zLnZhbGlkID0gZmFsc2U7CiAJc2Nh bi0+YmF0Y2hyaW5nYnVmLm1hcmtQb3MudmFsaWQgPSBmYWxzZTsKIAogCXNjYW4tPmJhdGNocmlu Z2J1Zi5tYXJrQmF0Y2ggPSBOVUxMOwpAQCAtNjUsMTYgKzY2LDE2IEBAIGV4dGVybiB2b2lkIHRh YmxlYW1fdXRpbF91bmd1YXJkX2JhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0 Y2ggYmF0Y2gpCiAvKgogICogRmV0Y2ggdGhlIG5leHQgYmF0Y2ggb2YgbWF0Y2hpbmcgaXRlbXMg Zm9yIHRoZSBzY2FuIChvciB0aGUgZmlyc3QpLgogICoKLSAqIENhbGxlZCB3aGVuIGNhbGxlcidz IGN1cnJlbnQgYmF0Y2ggKHBhc3NlZCB0byB1cyBhcyBwcmlvckJhdGNoKSBoYXMgbm8gbW9yZQot ICogbWF0Y2hpbmcgaXRlbXMgaW4gdGhlIGdpdmVuIHNjYW4gZGlyZWN0aW9uLiAgQ2FsbGVyIHBh c3NlcyBhIE5VTEwKLSAqIHByaW9yQmF0Y2ggb24gdGhlIGZpcnN0IGNhbGwgaGVyZSBmb3IgdGhl IHNjYW4uCisgKiBDYWxsZWQgd2hlbiBjYWxsZXIncyBjdXJyZW50IHNjYW5CYXRjaC9wcmVmZXRj aEJhdGNoIChwYXNzZWQgdG8gdXMgYXMKKyAqIHByaW9yQmF0Y2gpIGhhcyBubyBtb3JlIG1hdGNo aW5nIGl0ZW1zIGluIHRoZSBnaXZlbiBzY2FuIGRpcmVjdGlvbi4gIENhbGxlcgorICogcGFzc2Vz IGEgTlVMTCBwcmlvckJhdGNoIG9uIHRoZSBmaXJzdCBjYWxsIGhlcmUgZm9yIHRoZSBzY2FuLgog ICoKICAqIFJldHVybnMgdGhlIG5leHQgYmF0Y2ggdG8gYmUgcHJvY2Vzc2VkIGJ5IGNhbGxlciBp biB0aGUgZ2l2ZW4gc2NhbgogICogZGlyZWN0aW9uLCBvciBOVUxMIHdoZW4gdGhlcmUgYXJlIG5v IG1vcmUgbWF0Y2hlcyBpbiB0aGF0IGRpcmVjdGlvbi4KICAqCiAgKiBUaGlzIGlzIHdoZXJlIGJh dGNoZXMgYXJlIGFwcGVuZGVkIHRvIHRoZSBzY2FuJ3MgcmluZyBidWZmZXIuICBXZSBkb24ndAog ICogZnJlZSBhbnkgYmF0Y2hlcyBoZXJlLCB0aG91Z2g7IHRoYXQgaXMgbGVmdCB1cCB0byB0aGUg Y2FsbGVyLiAgVGhlIGNhbGxlcgotICogaXMgYWxzbyByZXNwb25zaWJsZSBmb3IgYWR2YW5jaW5n IHRoZWlyIHBvc2l0aW9uLgorICogaXMgYWxzbyByZXNwb25zaWJsZSBmb3IgYWR2YW5jaW5nIHRo ZWlyIHNjYW5Qb3MvcHJlZmV0Y2hQb3MgcG9zaXRpb24uCiAgKi8KIHN0YXRpYyBwZ19hdHRyaWJ1 dGVfYWx3YXlzX2lubGluZSBJbmRleFNjYW5CYXRjaAogdGFibGVhbV91dGlsX2ZldGNoX25leHRf YmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3Mv cmVsc2Nhbi5oCmluZGV4IDNjYzU3OGUzYy4uNzc1ODEyMTEzIDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS9hY2Nlc3MvcmVsc2Nhbi5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmgK QEAgLTIxNSw2ICsyMTUsMTAgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuQmF0Y2hEYXRhCiAJ ICogVGhpcyBhbGxvd3MgdGFibGUgQU1zIHRvIGF2b2lkIHJlZHVuZGFudCBhbWdldGJhdGNoIGNh bGxzIHdpdGggdGhlIHNhbWUKIAkgKiBwcmlvcmJhdGNoIC0tIHRoZSBpbmRleCBBTSBtaWdodCBu ZWVkIHRvIHJlYWQgYWRkaXRpb25hbCBpbmRleCBwYWdlcyB0bwogCSAqIGRldGVybWluZSB0aGVy ZSBhcmUgbm8gbW9yZSBtYXRjaGluZyBpdGVtcyBiZXlvbmQgY2FsbGVyJ3MgcHJpb3JiYXRjaC4K KwkgKiBJbiBwYXJ0aWN1bGFyLCBkdXJpbmcgcHJlZmV0Y2hpbmcgdGhlIHJlYWQgc3RyZWFtIGNh bGxiYWNrIGRpc2NvdmVycworCSAqIHRoZSBlbmQtb2Ytc2NhbiB2aWEgcHJlZmV0Y2hCYXRjaC4g IHRhYmxlYW1fdXRpbF9mZXRjaF9uZXh0X2JhdGNoKCkKKwkgKiBjaGVja3MgdGhlc2UgZmxhZ3Mg c28gdGhhdCB0aGUgc2NhbiBzaWRlIGRvZXNuJ3QgcmVwZWF0IHRoZSBzYW1lCisJICogYW1nZXRi YXRjaCBjYWxsIHdoZW4gaXQgbGF0ZXIgcmVhY2hlcyB0aGF0IGJhdGNoIGFzIHNjYW5CYXRjaC4K IAkgKi8KIAlib29sCQlrbm93bkVuZEJhY2t3YXJkOwogCWJvb2wJCWtub3duRW5kRm9yd2FyZDsK QEAgLTI2NiwxMSArMjcwLDE0IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4U2NhbkJhdGNoRGF0YSAq SW5kZXhTY2FuQmF0Y2g7CiAgKiBjdXJyZW50IHJlYWQgcG9zaXRpb24gYnkgX211bHRpcGxlXyBi YXRjaGVzL2luZGV4IHBhZ2VzLiAgVGhlIGZ1cnRoZXIgb3V0CiAgKiB0aGUgdGFibGUgQU0gcmVh ZHMgYWhlYWQgbGlrZSB0aGlzLCB0aGUgZnVydGhlciBpdCBjYW4gc2VlIGludG8gdGhlIGZ1dHVy ZS4KICAqIFRoYXQgd2F5IHRoZSB0YWJsZSBBTSBpcyBhYmxlIHRvIHJlb3JkZXIgd29yayBhcyBh Z2dyZXNzaXZlbHkgYXMgZGVzaXJlZC4KKyAqIEluZGV4IHNjYW5zIHNvbWV0aW1lcyBuZWVkIHRv IHJlYWRhaGVhZCBieSBzZXZlcmFsIGRvemVuIGJhdGNoZXMgaW4gb3JkZXIKKyAqIHRvIG1haW50 YWluIGFuIG9wdGltYWwgSS9PIHByZWZldGNoIGRpc3RhbmNlIChmb3IgcmVhZGluZyB0YWJsZSBi bG9ja3MpLgogICovCiB0eXBlZGVmIHN0cnVjdCBCYXRjaFJpbmdCdWZmZXIKIHsKIAkvKiBjdXJy ZW50IHBvc2l0aW9ucyBpbiBJbmRleFNjYW5EZXNjRGF0YS5iYXRjaGJ1ZltdIGZvciBzY2FuICov CiAJQmF0Y2hSaW5nSXRlbVBvcyBzY2FuUG9zOwkvKiBzY2FuJ3MgcmVhZCBwb3NpdGlvbiAqLwor CUJhdGNoUmluZ0l0ZW1Qb3MgcHJlZmV0Y2hQb3M7CS8qIHByZWZldGNoaW5nIHBvc2l0aW9uICov CiAJQmF0Y2hSaW5nSXRlbVBvcyBtYXJrUG9zOwkvKiBtYXJrL3Jlc3RvcmUgcG9zaXRpb24gKi8K IAogCS8qIG1hcmtQb3MncyBiYXRjaCAobm90IGluIHJpbmcgYnVmZmVyIHdoZW4gbWFya0JhdGNo ICE9IHNjYW5CYXRjaCkgKi8KQEAgLTUyNiw2ICs1MzMsMzYgQEAgaW5kZXhfc2Nhbl9iYXRjaF90 YWJsZV9hcmVhKEluZGV4U2NhbkRlc2NEYXRhICpzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCkK IAlyZXR1cm4gaW5kZXhfc2Nhbl9iYXRjaF9iYXNlKHNjYW4sIGJhdGNoKTsKIH0KIAorLyoKKyAq IENvbXBhcmUgdHdvIGJhdGNoIHJpbmcgcG9zaXRpb25zIGluIHRoZSBnaXZlbiBzY2FuIGRpcmVj dGlvbi4KKyAqCisgKiBSZXR1cm5zIG5lZ2F0aXZlIGlmIHBvczEgaXMgYmVoaW5kIHBvczIsIDAg aWYgZXF1YWwsIHBvc2l0aXZlIGlmIHBvczEgaXMKKyAqIGFoZWFkIG9mIHBvczIuCisgKi8KK3N0 YXRpYyBpbmxpbmUgaW50CitpbmRleF9zY2FuX3Bvc19jbXAoQmF0Y2hSaW5nSXRlbVBvcyAqcG9z MSwgQmF0Y2hSaW5nSXRlbVBvcyAqcG9zMiwKKwkJCQkgICBTY2FuRGlyZWN0aW9uIGRpcmVjdGlv bikKK3sKKwlpbnQ4CQliYXRjaGRpZmY7CisKKwlBc3NlcnQocG9zMS0+dmFsaWQgJiYgcG9zMi0+ dmFsaWQpOworCisJYmF0Y2hkaWZmID0gKGludDgpIChwb3MxLT5iYXRjaCAtIHBvczItPmJhdGNo KTsKKwlpZiAoYmF0Y2hkaWZmICE9IDApCisJeworCQkvKiBSZXNvbHZlIGNvbXBhcmlzb24gdXNp bmcgZGlmZmVyaW5nIGJhdGNoIG9mZnNldHMgKi8KKwkJcmV0dXJuIGJhdGNoZGlmZjsKKwl9CisK KwkvKgorCSAqIFJlc29sdmUgY29tcGFyaXNvbiB1c2luZyBpdGVtc1tdLXdpc2UgaW5kZXhlcyBm cm9tIGNhbGxlcidzIHBvc2l0aW9ucywKKwkgKiBzaW5jZSBib3RoIHBvc2l0aW9ucyBwb2ludCB0 byB0aGUgc2FtZSByaW5nIGJ1ZmZlciBiYXRjaAorCSAqLworCWlmIChTY2FuRGlyZWN0aW9uSXNG b3J3YXJkKGRpcmVjdGlvbikpCisJCXJldHVybiBwb3MxLT5pdGVtIC0gcG9zMi0+aXRlbTsKKwll bHNlCisJCXJldHVybiBwb3MyLT5pdGVtIC0gcG9zMS0+aXRlbTsKK30KIAogLyoKICAqIEFkdmFu Y2UgcG9zaXRpb24gdG8gaXRzIG5leHQgaXRlbSBpbiB0aGUgYmF0Y2guCmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS9vcHRpbWl6ZXIvY29zdC5oIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL2Nvc3Qu aAppbmRleCBmMmZkNWQzMTUuLjQxOTMwMGE2YiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvb3B0 aW1pemVyL2Nvc3QuaAorKysgYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvY29zdC5oCkBAIC01Miw2 ICs1Miw3IEBAIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVy X2dhdGhlcjsKIGV4dGVybiBQR0RMTElNUE9SVCBib29sIGVuYWJsZV9zZXFzY2FuOwogZXh0ZXJu IFBHRExMSU1QT1JUIGJvb2wgZW5hYmxlX2luZGV4c2NhbjsKIGV4dGVybiBQR0RMTElNUE9SVCBi b29sIGVuYWJsZV9pbmRleG9ubHlzY2FuOworZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgZW5hYmxl X2luZGV4c2Nhbl9wcmVmZXRjaDsKIGV4dGVybiBQR0RMTElNUE9SVCBib29sIGVuYWJsZV9iaXRt YXBzY2FuOwogZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgZW5hYmxlX3RpZHNjYW47CiBleHRlcm4g UEdETExJTVBPUlQgYm9vbCBlbmFibGVfc29ydDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9oZWFwL2hlYXBhbV9pbmRleHNjYW4uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hl YXBhbV9pbmRleHNjYW4uYwppbmRleCBjMDk0MGYyZDEuLjQyZGYyMDYzYSAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2luZGV4c2Nhbi5jCisrKyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9pbmRleHNjYW4uYwpAQCAtMTksNiArMTksNyBAQAogI2lu Y2x1ZGUgImFjY2Vzcy9pbmRleGJhdGNoLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3JlbHNjYW4uaCIK ICNpbmNsdWRlICJhY2Nlc3MvdmlzaWJpbGl0eW1hcC5oIgorI2luY2x1ZGUgIm9wdGltaXplci9j b3N0LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcmVkaWNhdGUuaCIKICNpbmNsdWRlICJ1dGlscy9w Z3N0YXRfaW50ZXJuYWwuaCIKIApAQCAtNDAsNiArNDEsOSBAQCB0eXBlZGVmIHN0cnVjdCBIZWFw QmF0Y2hEYXRhCiAjZGVmaW5lIEhFQVBfQkFUQ0hfVklTX0NIRUNLRUQJCTB4MDEJLyogY2hlY2tl ZCBpdGVtIGluIFZNPyAqLwogI2RlZmluZSBIRUFQX0JBVENIX1ZJU19BTExfVklTSUJMRQkweDAy CS8qIGJsb2NrIGlzIGtub3duIGFsbC12aXNpYmxlPyAqLwogCitzdGF0aWMgcGdfbm9pbmxpbmUg dm9pZCBoZWFwYW1faW5kZXhfZGlyY2hhbmdlX3Jlc2V0KEluZGV4RmV0Y2hIZWFwRGF0YSAqaHNj YW4sCisJCQkJCQkJCQkJCQkJIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJCQkJCQkJ CSBCYXRjaFJpbmdCdWZmZXIgKmJhdGNocmluZ2J1Zik7CiBzdGF0aWMgaW5saW5lIEl0ZW1Qb2lu dGVyIGhlYXBhbV9pbmRleF9yZXR1cm5fc2NhbnBvc190aWQoSW5kZXhTY2FuRGVzYyBzY2FuLAog CQkJCQkJCQkJCQkJCQkgIEluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4sCiAJCQkJCQkJCQkJCQkJ CSAgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCkBAIC01MSw2ICs1NSw5IEBAIHN0YXRpYyB2b2lk IGhlYXBhbV9pbmRleF9iYXRjaF9wb3NfdmlzaWJpbGl0eShJbmRleFNjYW5EZXNjIHNjYW4sCiAJ CQkJCQkJCQkJCSAgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gsCiAJCQkJCQkJCQkJCSAgSGVhcEJhdGNo RGF0YSAqaGJhdGNoLAogCQkJCQkJCQkJCQkgIEJhdGNoUmluZ0l0ZW1Qb3MgKnBvcyk7CitzdGF0 aWMgQmxvY2tOdW1iZXIgaGVhcGFtX2luZGV4X3ByZWZldGNoX25leHRfYmxvY2soUmVhZFN0cmVh bSAqc3RyZWFtLAorCQkJCQkJCQkJCQkJCXZvaWQgKmNhbGxiYWNrX3ByaXZhdGVfZGF0YSwKKwkJ CQkJCQkJCQkJCQl2b2lkICpwZXJfYnVmZmVyX2RhdGEpOwogc3RhdGljIGJvb2wgaGVhcGFtX2lu ZGV4X3BsYWluX2JhdGNoX2dldG5leHRfc2xvdChJbmRleFNjYW5EZXNjIHNjYW4sCiAJCQkJCQkJ CQkJCQkgIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAogCQkJCQkJCQkJCQkJICBUdXBsZVRhYmxl U2xvdCAqc2xvdCk7CkBAIC0xMzAsNiArMTM3LDEwIEBAIGhlYXBhbV9pbmRleF9mZXRjaF9iZWdp bihJbmRleFNjYW5EZXNjIHNjYW4sIHVpbnQzMiBmbGFncykKIAkvKiB4c19sYXN0aW5ibG9jayBv cHRpbWl6YXRpb24gc3RhdGUgKi8KIAlBc3NlcnQoIWhzY2FuLT54c19sYXN0aW5ibG9jayk7CiAK KwkvKiBSZWFkIHN0cmVhbSBzdGF0ZSAob3RoZXIgZmllbGRzIGluaXRpYWxpemVkIGJ5IGNhbGxi YWNrKSAqLworCUFzc2VydChoc2Nhbi0+eHNfcmVhZF9zdHJlYW1fZGlyID09IE5vTW92ZW1lbnRT Y2FuRGlyZWN0aW9uKTsKKwlBc3NlcnQoaHNjYW4tPnhzX3JlYWRfc3RyZWFtID09IE5VTEwpOwor CiAJLyogUmVzb2x2ZSB3aGljaCB4c19nZXRuZXh0X3Nsb3QgaW1wbGVtZW50YXRpb24gdG8gdXNl IGZvciB0aGlzIHNjYW4gKi8KIAlpZiAoc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFt Z2V0YmF0Y2ggIT0gTlVMTCkKIAl7CkBAIC0xOTksNiArMjEwLDE1IEBAIGhlYXBhbV9pbmRleF9m ZXRjaF9yZXNldChJbmRleFNjYW5EZXNjIHNjYW4pCiAJLyogUmVzY2FucyBzaG91bGQgYXZvaWQg YW4gZXhjZXNzaXZlIG51bWJlciBvZiBWTSBsb29rdXBzICovCiAJaHNjYW4tPnhzX3ZtX2l0ZW1z ID0gMTsKIAorCS8qIERlZmVuc2l2ZWx5IGRvIGFuIHVuY29uZGl0aW9uYWwgcmVhZCBzdHJlYW0g ZGlyZWN0aW9uIHJlc2V0ICovCisJaHNjYW4tPnhzX3JlYWRfc3RyZWFtX2RpciA9IE5vTW92ZW1l bnRTY2FuRGlyZWN0aW9uOworCisJaWYgKGhzY2FuLT54c19yZWFkX3N0cmVhbSkKKwl7CisJCWhz Y2FuLT54c19wYXVzZWQgPSBmYWxzZTsKKwkJcmVhZF9zdHJlYW1fcmVzZXQoaHNjYW4tPnhzX3Jl YWRfc3RyZWFtKTsKKwl9CisKIAkvKiBSZXNldCBiYXRjaCByaW5nIGJ1ZmZlciBzdGF0ZSAqLwog CWlmIChzY2FuLT51c2ViYXRjaHJpbmcpCiAJCXRhYmxlYW1fdXRpbF9iYXRjaHNjYW5fcmVzZXQo c2NhbiwgZmFsc2UpOwpAQCAtMjIzLDYgKzI0Myw5IEBAIGhlYXBhbV9pbmRleF9mZXRjaF9lbmQo SW5kZXhTY2FuRGVzYyBzY2FuKQogCWlmIChCdWZmZXJJc1ZhbGlkKGhzY2FuLT54c192bWJ1ZmZl cikpCiAJCVJlbGVhc2VCdWZmZXIoaHNjYW4tPnhzX3ZtYnVmZmVyKTsKIAorCWlmIChoc2Nhbi0+ eHNfcmVhZF9zdHJlYW0pCisJCXJlYWRfc3RyZWFtX2VuZChoc2Nhbi0+eHNfcmVhZF9zdHJlYW0p OworCiAJLyogRnJlZSBhbGwgYmF0Y2ggcmVsYXRlZCByZXNvdXJjZXMgKi8KIAlpZiAoc2Nhbi0+ dXNlYmF0Y2hyaW5nKQogCQl0YWJsZWFtX3V0aWxfYmF0Y2hzY2FuX2VuZChzY2FuKTsKQEAgLTI0 Nyw4ICsyNzAsMTYgQEAgaGVhcGFtX2luZGV4X2ZldGNoX21hcmtwb3MoSW5kZXhTY2FuRGVzYyBz Y2FuKQogdm9pZAogaGVhcGFtX2luZGV4X2ZldGNoX3Jlc3RycG9zKEluZGV4U2NhbkRlc2Mgc2Nh bikKIHsKKwlJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuID0gKEluZGV4RmV0Y2hIZWFwRGF0YSAq KSBzY2FuLT54c19oZWFwZmV0Y2g7CisKIAlBc3NlcnQoc2Nhbi0+dXNlYmF0Y2hyaW5nKTsKIAor CWlmIChoc2Nhbi0+eHNfcmVhZF9zdHJlYW0pCisJeworCQloc2Nhbi0+eHNfcGF1c2VkID0gZmFs c2U7CisJCXJlYWRfc3RyZWFtX3Jlc2V0KGhzY2FuLT54c19yZWFkX3N0cmVhbSk7CisJfQorCiAJ dGFibGVhbV91dGlsX2JhdGNoc2Nhbl9yZXN0b3JlX3BvcyhzY2FuKTsKIH0KIApAQCAtNDUwLDcg KzQ4MSwxNCBAQCBoZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGUoUmVsYXRpb24gcmVsLAogCQlpZiAo QnVmZmVySXNWYWxpZChoc2Nhbi0+eHNfY2J1ZikpCiAJCQlSZWxlYXNlQnVmZmVyKGhzY2FuLT54 c19jYnVmKTsKIAotCQloc2Nhbi0+eHNfY2J1ZiA9IFJlYWRCdWZmZXIocmVsLCBoc2Nhbi0+eHNf YmxrKTsKKwkJLyoKKwkJICogV2hlbiB1c2luZyBhIHJlYWQgc3RyZWFtLCB0aGUgc3RyZWFtIHdp bGwgYWxyZWFkeSBrbm93IHdoaWNoIGJsb2NrCisJCSAqIG51bWJlciBjb21lcyBuZXh0ICh0aG91 Z2ggYW4gYXNzZXJ0aW9uIHdpbGwgdmVyaWZ5IGEgbWF0Y2ggYmVsb3cpCisJCSAqLworCQlpZiAo aHNjYW4tPnhzX3JlYWRfc3RyZWFtKQorCQkJaHNjYW4tPnhzX2NidWYgPSByZWFkX3N0cmVhbV9u ZXh0X2J1ZmZlcihoc2Nhbi0+eHNfcmVhZF9zdHJlYW0sIE5VTEwpOworCQllbHNlCisJCQloc2Nh bi0+eHNfY2J1ZiA9IFJlYWRCdWZmZXIocmVsLCBoc2Nhbi0+eHNfYmxrKTsKIAogCQkvKgogCQkg KiBQcnVuZSBwYWdlIHdoZW4gaXQgaXMgcGlubmVkIGZvciB0aGUgZmlyc3QgdGltZQpAQCAtNTc0 LDYgKzYxMiw2OSBAQCBoZWFwYW1faW5kZXhfZmV0Y2hfaGVhcF9pdGVtKEluZGV4U2NhbkRlc2Mg c2NhbiwgSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiwKIAlyZXR1cm4gZm91bmQ7CiB9CiAKKy8q CisgKiBIYW5kbGUgYSBjaGFuZ2UgaW4gaW5kZXggc2NhbiBkaXJlY3Rpb24gKGF0IHRoZSB0dXBs ZSBncmFudWxhcml0eSkuCisgKgorICogUmVzZXRzIHRoZSByZWFkIHN0cmVhbSwgc2luY2Ugd2Ug Y2FuJ3QgcmVseSBvbiBzY2FuUG9zIGNvbnRpbnVpbmcgdG8gYWdyZWUKKyAqIHdpdGggdGhlIGJs b2NrcyB0aGF0IHJlYWQgc3RyZWFtIGFscmVhZHkgY29uc3VtZWQgdXNpbmcgcHJlZmV0Y2hQb3Mu CisgKgorICogTm90ZTogaWZmIHRoZSBzY2FuIF9jb250aW51ZXNfIGluIHRoaXMgbmV3IGRpcmVj dGlvbiwgYW5kIGFjdHVhbGx5IHN0ZXBzCisgKiBvZmYgc2NhbkJhdGNoIHRvIGFuIGVhcmxpZXIg aW5kZXggcGFnZSwgdGFibGVhbV91dGlsX2ZldGNoX25leHRfYmF0Y2ggd2lsbAorICogZGVhbCB3 aXRoIGl0LiAgQnV0IHRoYXQgbWlnaHQgbmV2ZXIgaGFwcGVuOyB0aGUgc2NhbiBtaWdodCB5ZXQg Y2hhbmdlCisgKiBkaXJlY3Rpb24gYWdhaW4gKG9yIGp1c3QgZW5kIGJlZm9yZSByZXR1cm5pbmcg bW9yZSBpdGVtcykuCisgKi8KK3N0YXRpYyBwZ19ub2lubGluZSB2b2lkCitoZWFwYW1faW5kZXhf ZGlyY2hhbmdlX3Jlc2V0KEluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4sCisJCQkJCQkJIFNjYW5E aXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJCSBCYXRjaFJpbmdCdWZmZXIgKmJhdGNocmluZ2J1 ZikKK3sKKwkvKiBSZXNldCByZWFkIHN0cmVhbSBzdGF0ZSAqLworCWJhdGNocmluZ2J1Zi0+cHJl ZmV0Y2hQb3MudmFsaWQgPSBmYWxzZTsKKwloc2Nhbi0+eHNfcGF1c2VkID0gZmFsc2U7CisJaHNj YW4tPnhzX3JlYWRfc3RyZWFtX2RpciA9IGRpcmVjdGlvbjsKKworCS8qIFJlc2V0IHJlYWQgc3Ry ZWFtIGl0c2VsZiAqLworCWlmIChoc2Nhbi0+eHNfcmVhZF9zdHJlYW0pCisJCXJlYWRfc3RyZWFt X3Jlc2V0KGhzY2FuLT54c19yZWFkX3N0cmVhbSk7Cit9CisKKy8qCisgKiBEZWNpZGUgd2hldGhl ciB0byBzdGFydCBhIHJlYWQgc3RyZWFtIGZvciBoZWFwIGJsb2NrIHByZWZldGNoaW5nIGR1cmlu ZyBhbgorICogaW5kZXggc2Nhbi4KKyAqCisgKiBDYWxsZWQgZWFjaCB0aW1lIGEgbmV3IGJhdGNo IGlzIG9idGFpbmVkIGZyb20gdGhlIGluZGV4IEFNLCBiYXJyaW5nIHRoZQorICogZmlyc3QgdGlt ZSB0aGF0IGhhcHBlbnMuICBXZSBkZWxheSBpbml0aWFsaXppbmcgdGhlIHN0cmVhbSB1bnRpbCBy ZWFkaW5nCisgKiBmcm9tIHRoZSBzY2FuJ3Mgc2Vjb25kIGJhdGNoLiAgVGhpcyBoZXVyaXN0aWMg YXZvaWRzIHdhc3RpbmcgY3ljbGVzIG9uCisgKiBzdGFydGluZyBhIHJlYWQgc3RyZWFtIGZvciB2 ZXJ5IHNlbGVjdGl2ZSBpbmRleCBzY2Fucy4KKyAqCisgKiBXZSBhdm9pZCBwcmVmZXRjaGluZyBk dXJpbmcgc2NhbnMgd2hlcmUgd2UncmUgdW5hYmxlIHRvIHVuZ3VhcmQgKHVucGluKQorICogZWFj aCBiYXRjaCdzIGJ1ZmZlcnMgcmlnaHQgYXdheSAobm9uLU1WQ0Mgc25hcHNob3Qgc2NhbnMpLiAg V2UgYXJlIG5vdAorICogcHJlcGFyZWQgdG8gc2Vuc2libHkgbGltaXQgdGhlIHRvdGFsIG51bWJl ciBvZiBidWZmZXIgcGlucyBoZWxkIChyZWFkCisgKiBzdHJlYW0gaGFuZGxlcyBhbGwgcGluIHJl c291cmNlIG1hbmFnZW1lbnQgZm9yIHVzLCBhbmQga25vd3Mgbm90aGluZworICogYWJvdXQgcGlu cyBoZWxkIG9uIGluZGV4IHBhZ2VzL3dpdGhpbiBiYXRjaGVzKS4KKyAqCisgKiBXZSBhbHNvIGRl bGF5IGNyZWF0aW5nIGEgcmVhZCBzdHJlYW0gZHVyaW5nIGluZGV4LW9ubHkgc2NhbnMgdGhhdCBo YXZlbid0CisgKiBkb25lIGFueSBoZWFwIGZldGNoZXMgeWV0LiAgV2UgZG9uJ3Qgd2FudCB0byB3 YXN0ZSBhbnkgY3ljbGVzIG9uCisgKiBhbGxvY2F0aW5nIGEgcmVhZCBzdHJlYW0gdW50aWwgd2Ug aGF2ZSBhIGRlbW9uc3RyYXRlZCBuZWVkIHRvIHBlcmZvcm0KKyAqIGhlYXAgZmV0Y2hlcy4KKyAq Lworc3RhdGljIHBnX2F0dHJpYnV0ZV9hbHdheXNfaW5saW5lIHZvaWQKK2hlYXBhbV9pbmRleF9j b25zaWRlcl9wcmVmZXRjaGluZyhJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCSAgSW5kZXhG ZXRjaEhlYXBEYXRhICpoc2NhbikKK3sKKwlBc3NlcnQoIWhzY2FuLT54c19yZWFkX3N0cmVhbSk7 CisJQXNzZXJ0KCFzY2FuLT5iYXRjaHJpbmdidWYucHJlZmV0Y2hQb3MudmFsaWQpOworCisJaWYg KHNjYW4tPk1WQ0NTY2FuICYmIGVuYWJsZV9pbmRleHNjYW5fcHJlZmV0Y2ggJiYKKwkJaHNjYW4t PnhzX2JsayAhPSBJbnZhbGlkQmxvY2tOdW1iZXIpCS8qIGZvciBpbmRleC1vbmx5IHNjYW5zICov CisJCWhzY2FuLT54c19yZWFkX3N0cmVhbSA9CisJCQlyZWFkX3N0cmVhbV9iZWdpbl9yZWxhdGlv bihSRUFEX1NUUkVBTV9ERUZBVUxULCBOVUxMLAorCQkJCQkJCQkJICAgc2Nhbi0+aGVhcFJlbGF0 aW9uLCBNQUlOX0ZPUktOVU0sCisJCQkJCQkJCQkgICBoZWFwYW1faW5kZXhfcHJlZmV0Y2hfbmV4 dF9ibG9jaywKKwkJCQkJCQkJCSAgIHNjYW4sIDApOworCS8qIGVsc2UgZG9uJ3Qgc3RhcnQgYSBy ZWFkIHN0cmVhbSBmb3IgcHJlZmV0Y2hpbmcgKG5vdCB5ZXQsIGF0IGxlYXN0KSAqLworfQorCiAv KgogICogR2V0IG5leHQgVElEIGZyb20gYmF0Y2ggcmluZyBidWZmZXIsIG1vdmluZyBpbiB0aGUg Z2l2ZW4gc2NhbiBkaXJlY3Rpb24uCiAgKiBBbHNvIHNldHMgKmFsbF92aXNpYmxlIGZvciBpdGVt IHdoZW4gY2FsbGVyIHBhc3NlcyBhIG5vbi1OVUxMIGFyZy4KQEAgLTU5MSw2ICs2OTIsMTIgQEAg aGVhcGFtX2luZGV4X2dldG5leHRfc2NhbmJhdGNoX3BvcyhJbmRleFNjYW5EZXNjIHNjYW4sIElu ZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4KIAlBc3NlcnQoc2NhblBvcy0+dmFsaWQgfHwgaW5kZXhf c2Nhbl9iYXRjaF9jb3VudChzY2FuKSA9PSAwKTsKIAlBc3NlcnQoYWxsX3Zpc2libGUgPT0gTlVM TCB8fCBzY2FuLT54c193YW50X2l0dXApOwogCisJLyogSGFuZGxlIHJlc2V0dGluZyB0aGUgcmVh ZCBzdHJlYW0gd2hlbiBzY2FuIGRpcmVjdGlvbiBjaGFuZ2VzICovCisJaWYgKGhzY2FuLT54c19y ZWFkX3N0cmVhbV9kaXIgPT0gTm9Nb3ZlbWVudFNjYW5EaXJlY3Rpb24pCisJCWhzY2FuLT54c19y ZWFkX3N0cmVhbV9kaXIgPSBkaXJlY3Rpb247CS8qIGZpcnN0IGNhbGwgKi8KKwllbHNlIGlmICh1 bmxpa2VseShoc2Nhbi0+eHNfcmVhZF9zdHJlYW1fZGlyICE9IGRpcmVjdGlvbikpCisJCWhlYXBh bV9pbmRleF9kaXJjaGFuZ2VfcmVzZXQoaHNjYW4sIGRpcmVjdGlvbiwgYmF0Y2hyaW5nYnVmKTsK KwogCS8qCiAJICogQ2hlY2sgaWYgdGhlcmUncyBhbiBleGlzdGluZyBsb2FkZWQgc2NhbkJhdGNo IGZvciB1cyB0byByZXR1cm4gdGhlIG5leHQKIAkgKiBtYXRjaGluZyBpdGVtJ3MgVElEL2luZGV4 IHR1cGxlIGZyb20KQEAgLTYwMCw3ICs3MDcsNyBAQCBoZWFwYW1faW5kZXhfZ2V0bmV4dF9zY2Fu YmF0Y2hfcG9zKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhGZXRjaEhlYXBEYXRhICpoc2Nhbgog CXsKIAkJLyoKIAkJICogc2NhblBvcyBpcyB2YWxpZCwgc28gc2NhbkJhdGNoIG11c3QgYWxyZWFk eSBiZSBsb2FkZWQgaW4gYmF0Y2ggcmluZwotCQkgKiBidWZmZXIuICBXZSByZWx5IG9uIHRoYXQg aGVyZS4KKwkJICogYnVmZmVyLiAgV2UgcmVseSBvbiB0aGF0IGhlcmUgKGNhbid0IGRvIHRoaXMg d2l0aCBwcmVmZXRjaEJhdGNoKS4KIAkJICovCiAJCXBnX2Fzc3VtZShiYXRjaHJpbmdidWYtPmhl YWRCYXRjaCA9PSBzY2FuUG9zLT5iYXRjaCk7CiAKQEAgLTYzMSw2ICs3MzgsMTcgQEAgaGVhcGFt X2luZGV4X2dldG5leHRfc2NhbmJhdGNoX3BvcyhJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4RmV0 Y2hIZWFwRGF0YSAqaHNjYW4KIAkJcmV0dXJuIE5VTEw7CiAJfQogCisJaWYgKGhhZEV4aXN0aW5n U2NhbkJhdGNoICYmICFoc2Nhbi0+eHNfcmVhZF9zdHJlYW0pCisJeworCQlBc3NlcnQoIXNjYW4t PmJhdGNocmluZ2J1Zi5wcmVmZXRjaFBvcy52YWxpZCk7CisKKwkJLyoKKwkJICogTm90IHVzaW5n IGEgcmVhZCBzdHJlYW0gdG8gZG8gaW5kZXggcHJlZmV0Y2hpbmcuICBEZWNpZGUgd2hldGhlciB0 bworCQkgKiBzdGFydCBvbmUgbm93LgorCQkgKi8KKwkJaGVhcGFtX2luZGV4X2NvbnNpZGVyX3By ZWZldGNoaW5nKHNjYW4sIGhzY2FuKTsKKwl9CisKIAkvKgogCSAqIEFkdmFuY2VkIHNjYW5CYXRj aC4gIE5vdyBwb3NpdGlvbiBzY2FuUG9zIHRvIHRoZSBzdGFydCBvZiBuZXcKIAkgKiBzY2FuQmF0 Y2guCkBAIC02NDYsNiArNzY0LDcgQEAgaGVhcGFtX2luZGV4X2dldG5leHRfc2NhbmJhdGNoX3Bv cyhJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4KIAl7CiAJCUlu ZGV4U2NhbkJhdGNoIGhlYWRCYXRjaCA9IGluZGV4X3NjYW5fYmF0Y2goc2NhbiwKIAkJCQkJCQkJ CQkJCQliYXRjaHJpbmdidWYtPmhlYWRCYXRjaCk7CisJCUJhdGNoUmluZ0l0ZW1Qb3MgKnByZWZl dGNoUG9zID0gJmJhdGNocmluZ2J1Zi0+cHJlZmV0Y2hQb3M7CiAKIAkJQXNzZXJ0KGhlYWRCYXRj aCAhPSBzY2FuQmF0Y2gpOwogCQlBc3NlcnQoYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2ggIT0gc2Nh blBvcy0+YmF0Y2gpOwpAQCAtNjUzLDEyICs3NzIsNDggQEAgaGVhcGFtX2luZGV4X2dldG5leHRf c2NhbmJhdGNoX3BvcyhJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4RmV0Y2hIZWFwRGF0YSAqaHNj YW4KIAkJLyogZnJlZSBvYnNvbGVzY2VudCBoZWFkIGJhdGNoICh1bmxlc3MgaXQgaXMgc2Nhbidz IG1hcmtCYXRjaCkgKi8KIAkJdGFibGVhbV91dGlsX3JlbGVhc2VfYmF0Y2goc2NhbiwgaGVhZEJh dGNoKTsKIAorCQkvKgorCQkgKiBJZiB3ZSdyZSBhYm91dCB0byByZWxlYXNlIHRoZSBiYXRjaCB0 aGF0IHByZWZldGNoUG9zIGN1cnJlbnRseQorCQkgKiBwb2ludHMgdG8sIGp1c3QgaW52YWxpZGF0 ZSBwcmVmZXRjaFBvcy4gIFNlZSB0aGUgY29tbWVudHMgYWJvdXQKKwkJICogcHJlZmV0Y2hQb3Mv c2NhblBvcyB3aXRoaW4gaGVhcGFtX2luZGV4X3ByZWZldGNoX25leHRfYmxvY2sgZm9yIGFuCisJ CSAqIGV4cGxhbmF0aW9uLgorCQkgKgorCQkgKiBUaGlzIGhhbmRsaW5nIGlzIGFwcHJveGltYXRl bHkgdGhlIG9wcG9zaXRlIG9mIHJlc3VtaW5nIGEgcGF1c2VkCisJCSAqIHJlYWQgc3RyZWFtOiB0 aGlzIGhlbHBzIHRoZSBzY2FuIGRlYWwgd2l0aCBwcmVmZXRjaFBvcyBmYWxsaW5nCisJCSAqIGJl aGluZCBzY2FuUG9zLCB3aGVyZWFzIHBhdXNpbmcgaXMgdXNlZCB3aGVuIHNjYW5Qb3MgaGFzIGZh bGxlbgorCQkgKiBiZWhpbmQgKHZlcnkgZmFyIGJlaGluZCkgcHJlZmV0Y2hQb3MuCisJCSAqLwor CQlpZiAocHJlZmV0Y2hQb3MtPnZhbGlkICYmCisJCQlwcmVmZXRjaFBvcy0+YmF0Y2ggPT0gYmF0 Y2hyaW5nYnVmLT5oZWFkQmF0Y2gpCisJCQlwcmVmZXRjaFBvcy0+dmFsaWQgPSBmYWxzZTsKKwog CQkvKiBSZW1vdmUgdGhlIGJhdGNoIGZyb20gdGhlIHJpbmcgYnVmZmVyIChldmVuIGlmIGl0J3Mg bWFya0JhdGNoKSAqLwogCQliYXRjaHJpbmdidWYtPmhlYWRCYXRjaCsrOworCisJCWlmICh1bmxp a2VseShoc2Nhbi0+eHNfcGF1c2VkKSkKKwkJeworCQkJLyoKKwkJCSAqIGhlYXBhbV9pbmRleF9w cmVmZXRjaF9uZXh0X2Jsb2NrIHBhdXNlZCB0aGUgc2NhbidzIHJlYWQgc3RyZWFtCisJCQkgKiBk dWUgdG8gb3VyIHJ1bm5pbmcgb3V0IG9mIGZyZWUgYmF0Y2ggc2xvdHMuICBOb3cgdGhhdCB3ZSd2 ZQorCQkJICogZnJlZWQgdXAgb25lIHN1Y2ggc2xvdCwgd2UgY2FuIHJlc3VtZSB0aGUgcmVhZCBz dHJlYW0gKHNpbmNlCisJCQkgKiB0aGVyZSdzIG5vdyBzcGFjZSBmb3IgaGVhcGFtX2luZGV4X3By ZWZldGNoX25leHRfYmxvY2sgdG8gc3RvcmUKKwkJCSAqIG9uZSBtb3JlIGJhdGNoKS4KKwkJCSAq CisJCQkgKiBOb3RlOiBJdCdzIGp1c3QgYWJvdXQgcG9zc2libGUgdGhhdCBwcmVmZXRjaFBvcyB3 YXMganVzdCAob3IgaXMKKwkJCSAqIGp1c3QgYWJvdXQgdG8gYmUpIGludmFsaWRhdGVkIHdpdGgg bG93IElOREVYX1NDQU5fTUFYX0JBVENIRVMuCisJCQkgKi8KKwkJCUFzc2VydCghcHJlZmV0Y2hQ b3MtPnZhbGlkIHx8CisJCQkJICAgaW5kZXhfc2Nhbl9iYXRjaF9sb2FkZWQoc2NhbiwgcHJlZmV0 Y2hQb3MtPmJhdGNoKSk7CisJCQlBc3NlcnQoIWluZGV4X3NjYW5fYmF0Y2hfZnVsbChzY2FuKSk7 CisKKwkJCXJlYWRfc3RyZWFtX3Jlc3VtZShoc2Nhbi0+eHNfcmVhZF9zdHJlYW0pOworCQkJaHNj YW4tPnhzX3BhdXNlZCA9IGZhbHNlOworCQl9CiAJfQogCiAJLyogSW4gcHJhY3RpY2Ugc2NhbkJh dGNoIHdpbGwgYWx3YXlzIGJlIHRoZSByaW5nIGJ1ZmZlcidzIGhlYWRCYXRjaCAqLwogCUFzc2Vy dChiYXRjaHJpbmdidWYtPmhlYWRCYXRjaCA9PSBzY2FuUG9zLT5iYXRjaCk7CisJQXNzZXJ0KCFo c2Nhbi0+eHNfcGF1c2VkKTsKIAogCXJldHVybiBoZWFwYW1faW5kZXhfcmV0dXJuX3NjYW5wb3Nf dGlkKHNjYW4sIGhzY2FuLCBkaXJlY3Rpb24sCiAJCQkJCQkJCQkJICAgc2NhbkJhdGNoLCBzY2Fu UG9zLCBhbGxfdmlzaWJsZSk7CkBAIC03NjMsNiArOTE4LDEzIEBAIGhlYXBhbV9pbmRleF9yZXR1 cm5fc2NhbnBvc190aWQoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleEZldGNoSGVhcERhdGEgKmhz Y2FuLAogICogKGltcG9ydGFudCBmb3IgaW5uZXIgaW5kZXggc2NhbnMgb2YgYW50aS1qb2lucyBh bmQgc2VtaS1qb2lucyksIGFuZCB0aGUKICAqIG5lZWQgdG8gdW5ndWFyZCBiYXRjaGVzIHByb21w dGx5LgogICoKKyAqIEluIG5vIGV2ZW50IHdpbGwgdGhlIHNjYW4gYmUgYWxsb3dlZCB0byBndWFy ZCBtb3JlIHRoYW4gb25lIGJhdGNoIGF0IGEKKyAqIHRpbWUuICBUaGUgcHJpbWFyeSByZWFzb24g Zm9yIHRoaXMgcmVzdHJpY3Rpb24gaXMgdG8gYXZvaWQgdW5pbnRlbmRlZAorICogaW50ZXJhY3Rp b25zIHdpdGggdGhlIHJlYWQgc3RyZWFtLCB3aGljaCBoYXMgaXRzIG93biBzdHJhdGVneSBmb3Ig a2VlcGluZworICogdGhlIG51bWJlciBvZiBwaW5zIGhlbGQgYnkgdGhlIGJhY2tlbmQgdW5kZXIg Y29udHJvbC4gIChVbmd1YXJkaW5nIHZpYQorICogdGhlIGFtdW5ndWFyZGJhdGNoIGNhbGxiYWNr IG9mdGVuIG1lYW5zIHJlbGVhc2luZyBhIGJ1ZmZlciBwaW4gb24gYW4KKyAqIGluZGV4IHBhZ2Us IHdoaWNoIGNvdW50cyBhZ2FpbnN0IHRoZSBzYW1lIHNoYXJlZCBwaW4gbGltaXQuKQorICoKICAq IE9uY2Ugd2UndmUgcmVzb2x2ZWQgdmlzaWJpbGl0eSBmb3IgYWxsIGl0ZW1zIGluIGEgYmF0Y2gs IHdlIGNhbiBzYWZlbHkKICAqIHVuZ3VhcmQgaXQgYnkgY2FsbGluZyBhbXVuZ3VhcmRiYXRjaC4g IFRoaXMgaXMgc2FmZSB3aXRoIHJlc3BlY3QgdG8KICAqIGNvbmN1cnJlbnQgVkFDVVVNIGJlY2F1 c2UgdGhlIGJhdGNoJ3MgZ3VhcmQgKHR5cGljYWxseSBhIGJ1ZmZlciBwaW4gb24gdGhlCkBAIC05 MDAsMTEgKzEwNjIsMzA3IEBAIGhlYXBhbV9pbmRleF9iYXRjaF9wb3NfdmlzaWJpbGl0eShJbmRl eFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAogCQloc2Nhbi0+eHNfdm1f aXRlbXMgPSBzY2FuLT5tYXhpdGVtc2JhdGNoOwogfQogCisvKgorICogUmV0dXJuIHRoZSBuZXh0 IGJsb2NrIHRvIHRoZSByZWFkIHN0cmVhbSB3aGVuIHBlcmZvcm1pbmcgaW5kZXggcHJlZmV0Y2hp bmcuCisgKgorICogVGhlIGluaXRpYWwgYmF0Y2ggaXMgYWx3YXlzIGxvYWRlZCBieSBoZWFwYW1f aW5kZXhfZ2V0bmV4dF9zY2FuYmF0Y2hfcG9zLgorICogV2UgZG9uJ3QgZ2V0IGNhbGxlZCB1bnRp bCB0aGUgZmlyc3QgcmVhZF9zdHJlYW1fbmV4dF9idWZmZXIgY2FsbCwgd2hlbiBhCisgKiBoZWFw IGJsb2NrIGlzIHJlcXVlc3RlZCBmcm9tIHRoZSBzY2FuJ3Mgc3RyZWFtIGZvciB0aGUgZmlyc3Qg dGltZS4KKyAqCisgKiBUaGUgcG9zaXRpb24gb2YgdGhlIHJlYWRfc3RyZWFtIGlzIHN0b3JlZCBp biBwcmVmZXRjaFBvcy4gIEl0IGlzIHR5cGljYWwKKyAqIGZvciBwcmVmZXRjaFBvcyB0byBjb25z aXN0ZW50bHkgc3RheSBhaGVhZCBvZiB0aGUgc2NhblBvcyBwb3NpdGlvbiB0aGF0J3MKKyAqIHVz ZWQgdG8gdHJhY2sgdGhlIG5leHQgVElEIGhlYXBhbV9pbmRleF9nZXRuZXh0X3NjYW5iYXRjaF9w b3Mgd2lsbCByZXR1cm4KKyAqIHRvIHRoZSBzY2FuIChhZnRlciB0aGUgZmlyc3QgdGltZSB3ZSBn ZXQgY2FsbGVkKS4gIEhvd2V2ZXIsIHRoYXQgaXNuJ3QgYQorICogc3RyaWN0IHByZWNvbmRpdGlv biAodGhvdWdoIGFzIGV4cGxhaW5lZCBiZWxvdyB3ZSBpbXBsZW1lbnQgYSBzY2hlbWUKKyAqIGVz c2VudGlhbGx5IGVxdWl2YWxlbnQgdG8gbWFraW5nIGl0IGEgc3RyaWN0IHByZWNvbmRpdGlvbiku ICBUaGVyZSBpcyBhCisgKiB0cnVlIHN0cmljdCBwb3N0Y29uZGl0aW9uLCB0aG91Z2g6IHdoZW4g d2UgcmV0dXJuIHdlJ2xsIGFsd2F5cyBsZWF2ZQorICogc2NhblBvcyA8PSBwcmVmZXRjaFBvcy4K KyAqLworc3RhdGljIEJsb2NrTnVtYmVyCitoZWFwYW1faW5kZXhfcHJlZmV0Y2hfbmV4dF9ibG9j ayhSZWFkU3RyZWFtICpzdHJlYW0sCisJCQkJCQkJCSB2b2lkICpjYWxsYmFja19wcml2YXRlX2Rh dGEsCisJCQkJCQkJCSB2b2lkICpwZXJfYnVmZmVyX2RhdGEpCit7CisJSW5kZXhTY2FuRGVzYyBz Y2FuID0gKEluZGV4U2NhbkRlc2MpIGNhbGxiYWNrX3ByaXZhdGVfZGF0YTsKKwlJbmRleEZldGNo SGVhcERhdGEgKmhzY2FuID0gKEluZGV4RmV0Y2hIZWFwRGF0YSAqKSBzY2FuLT54c19oZWFwZmV0 Y2g7CisJQmF0Y2hSaW5nQnVmZmVyICpiYXRjaHJpbmdidWYgPSAmc2Nhbi0+YmF0Y2hyaW5nYnVm OworCUJhdGNoUmluZ0l0ZW1Qb3MgKnNjYW5Qb3MgPSAmYmF0Y2hyaW5nYnVmLT5zY2FuUG9zOwor CUJhdGNoUmluZ0l0ZW1Qb3MgKnByZWZldGNoUG9zID0gJmJhdGNocmluZ2J1Zi0+cHJlZmV0Y2hQ b3M7CisJU2NhbkRpcmVjdGlvbiB4c19yZWFkX3N0cmVhbV9kaXIgPSBoc2Nhbi0+eHNfcmVhZF9z dHJlYW1fZGlyOworCUluZGV4U2NhbkJhdGNoIHByZWZldGNoQmF0Y2g7CisJYm9vbAkJZnJvbVNj YW5Qb3MgPSBmYWxzZTsKKworCS8qCisJICogc2NhblBvcyBtdXN0IGFsd2F5cyBiZSB2YWxpZCB3 aGVuIHByZWZldGNoaW5nIHRha2VzIHBsYWNlLiAgVGhlcmUgaGFzCisJICogdG8gYmUgYXQgbGVh c3Qgb25lIGJhdGNoLCBsb2FkZWQgYXMgb3VyIHNjYW5CYXRjaC4gIFRoZSBzY2FuIGRpcmVjdGlv bgorCSAqIG11c3QgYmUgZXN0YWJsaXNoZWQsIHRvby4KKwkgKi8KKwlBc3NlcnQoaW5kZXhfc2Nh bl9iYXRjaF9jb3VudChzY2FuKSA+IDApOworCUFzc2VydChzY2FuUG9zLT52YWxpZCAmJiBpbmRl eF9zY2FuX2JhdGNoX2xvYWRlZChzY2FuLCBzY2FuUG9zLT5iYXRjaCkpOworCUFzc2VydChzY2Fu LT5NVkNDU2Nhbik7CisJQXNzZXJ0KCFoc2Nhbi0+eHNfcGF1c2VkKTsKKwlBc3NlcnQoeHNfcmVh ZF9zdHJlYW1fZGlyICE9IE5vTW92ZW1lbnRTY2FuRGlyZWN0aW9uKTsKKworCS8qCisJICogSGFu ZGxlIGluaXRpYWxpemF0aW9uIG9uIHRoZSBmaXJzdCBjYWxsIGhlcmUsIHdoZW4gcHJlZmV0Y2hQ b3MgaXNuJ3QKKwkgKiB5ZXQgdmFsaWQgKGFsc28gaGFuZGxlcyB0aGUgcHJlZmV0Y2hQb3MgPCBz Y2FuUG9zIGVkZ2UgY2FzZSkuCisJICoKKwkgKiBJZiBwcmVmZXRjaFBvcyBoYXMgbm90IGJlZW4g aW5pdGlhbGl6ZWQgeWV0LCB0aGF0IHR5cGljYWxseSBpbmRpY2F0ZXMKKwkgKiB0aGF0IHRoaXMg aXMgdGhlIGZpcnN0IGNhbGwgaGVyZSBmb3IgdGhlIGVudGlyZSBzY2FuLiAgV2UgaW5pdGlhbGl6 ZQorCSAqIHByZWZldGNoUG9zIHVzaW5nIHRoZSBjdXJyZW50IHNjYW5Qb3MsIHNpbmNlIHRoZSBj dXJyZW50IHNjYW5CYXRjaAorCSAqIGl0ZW0ncyBUSUQgc2hvdWxkIGhhdmUgaXRzIGJsb2NrIG51 bWJlciByZXR1cm5lZCBieSB0aGUgcmVhZCBzdHJlYW0KKwkgKiBmaXJzdC4gIFdoZW4gdGhpcyBo YXBwZW5zLCBpdCdzIGxpa2VseSB0aGF0IHByZWZldGNoUG9zIHdpbGwgZ2V0IGFoZWFkCisJICog b2Ygc2NhblBvcyB2ZXJ5IHNvb24sIGFmdGVyIHRoZSBfbmV4dF8gY2FsbCBoZXJlIHJldHVybnMu CisJICoKKwkgKiBUaGVyZSdzIGFsc28gYW4gZWRnZSBjYXNlIHRoYXQgd2UgaGFuZGxlIHVzaW5n IGV4YWN0bHkgdGhlIHNhbWUgc3RlcHMuCisJICogSXQncyBwb3NzaWJsZSBmb3IgcHJlZmV0Y2hQ b3MgdG8gImZhbGwgYmVoaW5kIiBzY2FuUG9zLCBhdCBsZWFzdCBpbiBhCisJICogdHJpdmlhbCBz ZW5zZTogaWYgbWFueSBhZGphY2VudCBtYXRjaGluZyBpdGVtcyBjb250YWluIFRJRHMgdGhhdCBh bGwKKwkgKiBwb2ludCB0byB0aGUgc2FtZSBoZWFwIGJsb2NrLCBzY2FuUG9zIGNhbiBhY3R1YWxs eSBvdmVydGFrZSBwcmVmZXRjaFBvcworCSAqIChwcmVmZXRjaFBvcyBjYW4ndCBhZHZhbmNlIHVu dGlsIHdlJ3JlIGFjdHVhbGx5IGNhbGxlZCkuICBBIHNpbWlsYXIKKwkgKiBpc3N1ZSBhcmlzZXMg ZHVyaW5nIGluZGV4LW9ubHkgc2NhbnMgdGhhdCByZXF1aXJlIG9ubHkgYSBmZXcgaGVhcAorCSAq IGZldGNoZXM6IHdlJ2xsIHRlbmQgdG8gYmUgY2FsbGVkIGZhciBsZXNzIG9mdGVuIHRoYW4gd2Un ZCBiZSBjYWxsZWQKKwkgKiBkdXJpbmcgYW4gZXF1aXZhbGVudCBwbGFpbiBpbmRleCBzY2FuIGR1 ZSB0byBhbGwtdmlzaWJsZSBpdGVtcy4gIEFuCisJICogYWxsLXZpc2libGUgaXRlbSB3aWxsIGFk dmFuY2Ugc2NhblBvcywgYnV0IGNhbid0IHRyaWdnZXIgYSBjYWxsIHRvIGhlcmUKKwkgKiAoanVz dCBsaWtlIGFuIGl0ZW0gdGhhdCBwb2ludHMgdG8gdGhlIHNhbWUgaGVhcCBibG9jayB0aGF0IHRo ZSBwcmV2aW91cworCSAqIGl0ZW0gYWxzbyBwb2ludGVkIHRvKS4KKwkgKgorCSAqIFRoaXMgc2No ZW1lIHByb2R1Y2VzIGV4YWN0bHkgdGhlIHNhbWUgYmxvY2sgcHJlZmV0Y2ggcmVxdWVzdHMgYXMg YQorCSAqIHNjaGVtZSB0aGF0IHJlcXVpcmVzIGhlYXBhbV9pbmRleF9nZXRuZXh0X3NjYW5iYXRj aF9wb3MgdG8gYWN0aXZlbHkKKwkgKiBlbnN1cmUgdGhhdCAicHJlZmV0Y2hQb3MgPCBzY2FuUG9z IiBjYW4gbmV2ZXIgaGFwcGVuLiAgVGhhdCBpc24ndCBhCisJICogc3RyaWN0IHByZWNvbmRpdGlv biBmb3IgdGhpcyBmdW5jdGlvbiBiZWNhdXNlIG1ha2luZyBpdCBleHBsaWNpdCB3b3VsZAorCSAq IGltcG9zZSBhIHBlcmZvcm1hbmNlIHBlbmFsdHkgb24gaGVhcGFtX2luZGV4X2dldG5leHRfc2Nh bmJhdGNoX3Bvcy4KKwkgKgorCSAqIE5vdGU6IHdoZW4gaGVhcGFtX2luZGV4X2dldG5leHRfc2Nh bmJhdGNoX3BvcyBmcmVlcyBhIGJhdGNoIHRoYXQKKwkgKiBwcmVmZXRjaFBvcyBwb2ludHMgdG8s IGl0J2xsIGF0IGxlYXN0IGludmFsaWRhdGUgcHJlZmV0Y2hQb3MgZm9yIHVzLgorCSAqIFRoaXMg cmVtb3ZlcyBhbnkgZGFuZ2VyIG9mIHByZWZldGNoUG9zLmJhdGNoIGZhbGxpbmcgc28gZmFyIGJl aGluZAorCSAqIHNjYW5Qb3MuYmF0Y2ggdGhhdCBpdCB3cmFwcyBhcm91bmQgKGFuZCBhcHBlYXJz IHRvIGJlIGFoZWFkIG9mIHNjYW5Qb3MKKwkgKiBpbnN0ZWFkIG9mIGJlaGluZCBpdCkuICBJbiBv dGhlciB3b3JkcywgaW4gYSBjZXJ0YWluIHNlbnNlIHdlIGFjdHVhbGx5CisJICogX2Nhbl8gdHJ1 c3QgaGVhcGFtX2luZGV4X2dldG5leHRfc2NhbmJhdGNoX3BvcyB0byBub3QgbGV0IHByZWZldGNo UG9zCisJICogZmFsbCBiZWhpbmQgc2NhblBvczogaXQgY2FuJ3QgaGFwcGVuIGF0IHRoZSBiYXRj aCBncmFudWxhcml0eSAob25seSBhdAorCSAqIHRoZSBpdGVtL3R1cGxlIGdyYW51bGFyaXR5LCB3 aGljaCB3ZSBjYW4gYWx3YXlzIGNvcGUgd2l0aCBoZXJlKS4KKwkgKi8KKwlpZiAoIXByZWZldGNo UG9zLT52YWxpZCB8fAorCQlpbmRleF9zY2FuX3Bvc19jbXAocHJlZmV0Y2hQb3MsIHNjYW5Qb3Ms IHhzX3JlYWRfc3RyZWFtX2RpcikgPCAwKQorCXsKKwkJaHNjYW4tPnhzX3ByZWZldGNoX2Jsb2Nr ID0gSW52YWxpZEJsb2NrTnVtYmVyOworCQkqcHJlZmV0Y2hQb3MgPSAqc2NhblBvczsKKwkJZnJv bVNjYW5Qb3MgPSB0cnVlOworCisJCS8qCisJCSAqIFdlIG11c3QgYXZvaWQga2VlcGluZyBhbnkg YmF0Y2ggZ3VhcmRlZCBmb3IgbW9yZSB0aGFuIGFuIGluc3RhbnQsCisJCSAqIHRvIGF2b2lkIHVu ZGVzaXJhYmxlIGludGVyYWN0aW9ucyB3aXRoIHRoZSBzY2FuJ3MgcmVhZCBzdHJlYW0uIFNlZQor CQkgKiBjb21tZW50IGFuZCBhc3NlcnRpb24gYXQgdGhlIHRvcCBvZiB0aGUgbG9vcCBiZWxvdy4K KwkJICovCisJCWlmIChzY2FuLT54c193YW50X2l0dXApCisJCXsKKwkJCS8qCisJCQkgKiBNYWtl IGhlYXBhbV9pbmRleF9iYXRjaF9wb3NfdmlzaWJpbGl0eSByZWxlYXNlIHJlc291cmNlcworCQkJ ICogZWFnZXJseQorCQkJICovCisJCQloc2Nhbi0+eHNfdm1faXRlbXMgPSBzY2FuLT5tYXhpdGVt c2JhdGNoOworCisJCQkvKiBNYWtlIHN1cmUgdGhhdCB0aGlzIG5ldyBwcmVmZXRjaEJhdGNoIGlz IHVuZ3VhcmRlZCAqLworCQkJcHJlZmV0Y2hCYXRjaCA9IGluZGV4X3NjYW5fYmF0Y2goc2Nhbiwg cHJlZmV0Y2hQb3MtPmJhdGNoKTsKKwkJCWlmIChwcmVmZXRjaEJhdGNoLT5pc0d1YXJkZWQpCisJ CQl7CisJCQkJSGVhcEJhdGNoRGF0YSAqaGJhdGNoID0gaW5kZXhfc2Nhbl9iYXRjaF90YWJsZV9h cmVhKHNjYW4sCisJCQkJCQkJCQkJCQkJCQkJCXByZWZldGNoQmF0Y2gpOworCisJCQkJLyogU2V0 IHZpc2liaWxpdHkgaW5mbyBub3Qgc2V0IHRocm91Z2ggc2NhbkJhdGNoICovCisJCQkJaGVhcGFt X2luZGV4X2JhdGNoX3Bvc192aXNpYmlsaXR5KHNjYW4sIHhzX3JlYWRfc3RyZWFtX2RpciwKKwkJ CQkJCQkJCQkJCSAgcHJlZmV0Y2hCYXRjaCwgaGJhdGNoLAorCQkJCQkJCQkJCQkJICBwcmVmZXRj aFBvcyk7CisJCQl9CisJCX0KKwl9CisKKwlwcmVmZXRjaEJhdGNoID0gaW5kZXhfc2Nhbl9iYXRj aChzY2FuLCBwcmVmZXRjaFBvcy0+YmF0Y2gpOworCisJLyoKKwkgKiBJZiBwcmVmZXRjaFBvcyB3 YXNuJ3QganVzdCBpbml0aWFsaXplZCB1c2luZyBzY2FuUG9zLCB3ZSdyZSBkaXJlY3RseQorCSAq IHBpY2tpbmcgdXAgcHJlZmV0Y2hpbmcgd2hlcmUgdGhlIGxhc3QgY2FsbCBoZXJlIGxlZnQgb2Zm LiAgQXNzZXJ0IHRoYXQKKwkgKiB4c19wcmVmZXRjaF9ibG9jayBtYXRjaGVzIHRoZSBsYXN0IGl0 ZW0gd2UgcmV0dXJuZWQgYXMgZXhwZWN0ZWQuCisJICoKKwkgKiBOb3RlOiB3ZSBkb24ndCBhY3R1 YWxseSBuZWVkIGEgeHNfcHJlZmV0Y2hfYmxvY2sgZmllbGQgYXQgYWxsOyB3ZSBjb3VsZAorCSAq IGp1c3QgdGFrZSB0aGUgbGFzdCBibG9jayB3ZSByZXR1cm5lZCBmcm9tIHByZWZldGNoUG9zIGRp cmVjdGx5IGluc3RlYWQuCisJICogQnV0IG1haW50YWluaW5nIHhzX3ByZWZldGNoX2Jsb2NrIGV4 cGxpY2l0bHkgaXMgc2xpZ2h0bHkgbW9yZSByb2J1c3QuCisJICogSXQgZ2l2ZXMgdXMgYSB3YXkg dG8gbWFrZSBzdXJlIHRoYXQgdGhlIGxhc3QgY2FsbCBoZXJlIGxlZnQgcHJlZmV0Y2hQb3MKKwkg KiBpbiBhIGNvbnNpc3RlbnQgc3RhdGUgKGUuZy4sIHdoZW4gdGhlIHJlYWQgc3RyZWFtIGhhZCB0 byBiZSBwYXVzZWQpLgorCSAqLworI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKKwlpZiAoIWZy b21TY2FuUG9zKQorCXsKKwkJQmF0Y2hNYXRjaGluZ0l0ZW0gKmxhc3RpdGVtID0gJnByZWZldGNo QmF0Y2gtPml0ZW1zW3ByZWZldGNoUG9zLT5pdGVtXTsKKwkJQmxvY2tOdW1iZXIgbGFzdF9ibG9j ayA9IEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIoJmxhc3RpdGVtLT50YWJsZVRpZCk7CisKKwkJ QXNzZXJ0KGxhc3RfYmxvY2sgPT0gaHNjYW4tPnhzX3ByZWZldGNoX2Jsb2NrKTsKKwl9CisjZW5k aWYKKworCWZvciAoOzspCisJeworCQlCYXRjaE1hdGNoaW5nSXRlbSAqaXRlbTsKKwkJQmxvY2tO dW1iZXIgcHJlZmV0Y2hfYmxvY2s7CisKKwkJLyoKKwkJICogV2UgbmV2ZXIgY2FsbCBhbWdldGJh dGNoIHdpdGhvdXQgaW1tZWRpYXRlbHkgdW5ndWFyZGluZyB0aGUgYmF0Y2gsCisJCSAqIGVpdGhl ciB3aXRoaW4gdGhlIGluZGV4IEFNIG9yIGhlcmUgKHdoZW4gd2UgZWFnZXJseSBsb2FkIGFsbCBv ZiB0aGUKKwkJICogYmF0Y2gncyB2aXNpYmlsaXR5IGluZm9ybWF0aW9uIGR1cmluZyBhbiBpbmRl eC1vbmx5IHNjYW4pLiAgVGhlCisJCSAqIGluZGV4IEFNIHdvbid0IGhvbGQgb250byBUSUQgaW50 ZXJsb2NrIGJ1ZmZlciBwaW5zLCBrZWVwaW5nIHRoZQorCQkgKiBhYnNvbHV0ZSBudW1iZXIgb2Yg cGlucyBoZWxkIHRvIGEgbWluaW11bS4KKwkJICoKKwkJICogVGhpcyBpcyBkZWZlbnNpdmUuICBU aGUgcmVhZCBzdHJlYW0gdHJpZXMgdG8gYmUgY2FyZWZ1bCBhYm91dCBub3QKKwkJICogcGlubmlu ZyB0b28gbWFueSBidWZmZXJzLCBhbmQgdGhhdCdzIGhhcmRlciB0byBkbyByZWxpYWJseSBpZiB0 aGVyZQorCQkgKiBhcmUgdmFyaWFibGUgbnVtYmVycyBvZiBwaW5zIHRha2VuIHdpdGhvdXQgc3Vj aCBjYXJlLgorCQkgKi8KKwkJQXNzZXJ0KCFwcmVmZXRjaEJhdGNoLT5pc0d1YXJkZWQpOworCQlp ZiAoZnJvbVNjYW5Qb3MpCisJCXsKKwkJCS8qCisJCQkgKiBEb24ndCBpbmNyZW1lbnQgaXRlbSB3 aGVuIHByZWZldGNoUG9zIHdhcyBqdXN0IGluaXRpYWxpemVkCisJCQkgKiB1c2luZyBzY2FuUG9z LiAgV2UnbGwgcmV0dXJuIHRoZSBzY2FuUG9zIGl0ZW0ncyBoZWFwIGJsb2NrCisJCQkgKiBkaXJl Y3RseSBvbiB0aGUgZmlyc3QgY2FsbCBoZXJlLiAgSW4gb3RoZXIgd29yZHMsIHdlJ2xsIHJldHVy bgorCQkJICogdGhlIGhlYXAgYmxvY2sgZnJvbSBUSUQgcGFzc2VkIHRvIGhlYXBhbV9pbmRleF9m ZXRjaF90dXBsZSBhdAorCQkJICogdGhlIHBvaW50IHdoZXJlIGl0IGNhbGxlZCByZWFkX3N0cmVh bV9uZXh0X2J1ZmZlciBmb3IgdGhlIGZpcnN0CisJCQkgKiB0aW1lIGR1cmluZyB0aGUgc2Nhbi4g KEFzIGV4cGxhaW5lZCBhYm92ZSwgd2UgYWxzbyBlbmQgdXAgaGVyZQorCQkJICogZHVyaW5nIHRo ZSBmaXJzdCBjYWxsIHRvIHJlYWRfc3RyZWFtX25leHRfYnVmZmVyIGZvbGxvd2luZworCQkJICog cHJlZmV0Y2hQb3MgZmFsbGluZyBiZWhpbmQgc2NhblBvcy9iZWluZyBpbnZhbGlkYXRlZCBmb3Ig dXMuKQorCQkJICovCisJCQlmcm9tU2NhblBvcyA9IGZhbHNlOworCQl9CisJCWVsc2UgaWYgKCFp bmRleF9zY2FuX3Bvc19hZHZhbmNlKHhzX3JlYWRfc3RyZWFtX2RpciwKKwkJCQkJCQkJCQkgcHJl ZmV0Y2hCYXRjaCwgcHJlZmV0Y2hQb3MpKQorCQl7CisJCQkvKgorCQkJICogUmFuIG91dCBvZiBp dGVtcyBmcm9tIHByZWZldGNoQmF0Y2guICBUcnkgdG8gYWR2YW5jZSB0byB0aGUKKwkJCSAqIHNj YW4ncyBuZXh0IGJhdGNoLgorCQkJICovCisJCQlpZiAodW5saWtlbHkoaW5kZXhfc2Nhbl9iYXRj aF9mdWxsKHNjYW4pKSkKKwkJCXsKKwkJCQkvKgorCQkJCSAqIENhbid0IGFkdmFuY2UgcHJlZmV0 Y2hCYXRjaCBiZWNhdXNlIGFsbCBhdmFpbGFibGUKKwkJCQkgKiBiYXRjaHJpbmdidWYgYmF0Y2gg c2xvdHMgYXJlIGN1cnJlbnRseSBpbiB1c2UuCisJCQkJICoKKwkJCQkgKiBEZWFsIHdpdGggdGhp cyBieSBtb21lbnRhcmlseSBwYXVzaW5nIHRoZSByZWFkIHN0cmVhbS4KKwkJCQkgKiBoZWFwYW1f aW5kZXhfZ2V0bmV4dF9zY2FuYmF0Y2hfcG9zIHdpbGwgcmVzdW1lIHRoZSByZWFkCisJCQkJICog c3RyZWFtIGxhdGVyLCB0aG91Z2ggb25seSBhZnRlciBzY2FuUG9zIGhhcyBjb25zdW1lZCBhbGwK KwkJCQkgKiByZW1haW5pbmcgaXRlbXMgZnJvbSBzY2FuQmF0Y2ggKGF0IHdoaWNoIHBvaW50IHRo ZSBjdXJyZW50CisJCQkJICogaGVhZCBiYXRjaCB3aWxsIGJlIGZyZWVkLCBtYWtpbmcgYSBzbG90 IGF2YWlsYWJsZSBmb3IgcmV1c2UKKwkJCQkgKiBoZXJlIGJ5IHVzKS4KKwkJCQkgKgorCQkJCSAq IEluIHByYWN0aWNlIHdlIGhhcmRseSBldmVyIG5lZWQgdG8gZG8gdGhpcy4gIEl0IHdvdWxkIGJl CisJCQkJICogcG9zc2libGUgdG8gYXZvaWQgdGhlIG5lZWQgdG8gcGF1c2UgdGhlIHJlYWQgc3Ry ZWFtIGJ5CisJCQkJICogZHluYW1pY2FsbHkgYWxsb2NhdGluZyBzbG90cywgYnV0IHRoYXQgd291 bGQgYWRkIGNvbXBsZXhpdHkKKwkJCQkgKiBmb3Igbm8gcmVhbCBiZW5lZml0LiAgSXQgYWxzbyBz ZWVtcyBsaWtlIGEgZ29vZCBpZGVhIHRvCisJCQkJICogaW1wb3NlIHNvbWUgaGFyZCBsaW1pdCBv biB0aGUgbnVtYmVyIG9mIGJhdGNoZXMgdGhhdAorCQkJCSAqIHByZWZldGNoUG9zIGNhbiBnZXQg YWhlYWQgb2Ygc2NhblBvcyBieSAoZXNwZWNpYWxseSBpbiB0aGUKKwkJCQkgKiBjYXNlIG9mIGlu ZGV4LW9ubHkgc2NhbnMsIHdoZXJlIHdlIG9mdGVuIHdvbid0IGhhdmUgYW55CisJCQkJICogaGVh cCBibG9jayB0byByZXR1cm4gZnJvbSBtb3N0IG9mIHRoZSBzY2FuJ3MgYmF0Y2hlcykuCisJCQkJ ICovCisJCQkJaHNjYW4tPnhzX3BhdXNlZCA9IHRydWU7CisKKwkJCQkvKgorCQkJCSAqIEJlZm9y ZSByZXR1cm5pbmcsIGFkdmFuY2UgcHJlZmV0Y2hQb3MgaW4gdGhlIG9wcG9zaXRlCisJCQkJICog ZGlyZWN0aW9uIHRvIHRoZSBvbmUgdXNlZCBieSB0aGUgc2Nhbi4gIFRoaXMgdW5kb2VzIHRoZQor CQkJCSAqIGVmZmVjdHMgb2YgdGhlIG1vc3QgcmVjZW50IGFkdmFuY2UuICBXZSdyZSBub3QgZ29p bmcgdG8KKwkJCQkgKiByZXR1cm4gYW55IGJsb2NrLCBzbyBpdCBzZWVtcyBsaWtlIGEgZ29vZCBp ZGVhIHRvIGxlYXZlCisJCQkJICogcHJlZmV0Y2hQb3MgaW4gYSBzdGF0ZSBjb25zaXN0ZW50IHdp dGggdGhhdC4KKwkJCQkgKi8KKwkJCQlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZCh4c19yZWFk X3N0cmVhbV9kaXIpKQorCQkJCXsKKwkJCQkJQXNzZXJ0KHByZWZldGNoUG9zLT5pdGVtID09IHBy ZWZldGNoQmF0Y2gtPmxhc3RJdGVtICsgMSk7CisJCQkJCXByZWZldGNoUG9zLT5pdGVtID0gcHJl ZmV0Y2hCYXRjaC0+bGFzdEl0ZW07CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCUFzc2Vy dChwcmVmZXRjaFBvcy0+aXRlbSA9PSBwcmVmZXRjaEJhdGNoLT5maXJzdEl0ZW0gLSAxKTsKKwkJ CQkJcHJlZmV0Y2hQb3MtPml0ZW0gPSBwcmVmZXRjaEJhdGNoLT5maXJzdEl0ZW07CisJCQkJfQor CisJCQkJcmV0dXJuIHJlYWRfc3RyZWFtX3BhdXNlKHN0cmVhbSk7CisJCQl9CisKKwkJCXByZWZl dGNoQmF0Y2ggPSB0YWJsZWFtX3V0aWxfZmV0Y2hfbmV4dF9iYXRjaChzY2FuLAorCQkJCQkJCQkJ CQkJCQkgIHhzX3JlYWRfc3RyZWFtX2RpciwKKwkJCQkJCQkJCQkJCQkJICBwcmVmZXRjaEJhdGNo LAorCQkJCQkJCQkJCQkJCQkgIHByZWZldGNoUG9zKTsKKwkJCWlmICghcHJlZmV0Y2hCYXRjaCkK KwkJCXsKKwkJCQkvKgorCQkJCSAqIE5vIG1vcmUgYmF0Y2hlcyBpbiB0aGlzIGRpcmVjdGlvbiwg c28gYWxsIHRoZSBiYXRjaGVzIHRoYXQKKwkJCQkgKiB0aGUgc2NhbiB3aWxsIGV2ZXIgcmVxdWly ZSBoYXZlIG5vdyBiZWVuIHJldHVybmVkCisJCQkJICovCisJCQkJcmV0dXJuIEludmFsaWRCbG9j a051bWJlcjsKKwkJCX0KKworCQkJLyogUG9zaXRpb24gcHJlZmV0Y2hQb3MgdG8gdGhlIHN0YXJ0 IG9mIG5ldyBwcmVmZXRjaEJhdGNoICovCisJCQlpbmRleF9zY2FuX3Bvc19uZXh0YmF0Y2goeHNf cmVhZF9zdHJlYW1fZGlyLAorCQkJCQkJCQkJIHByZWZldGNoQmF0Y2gsIHByZWZldGNoUG9zKTsK KworCQkJaWYgKHNjYW4tPnhzX3dhbnRfaXR1cCkKKwkJCXsKKwkJCQlIZWFwQmF0Y2hEYXRhICpo YmF0Y2ggPSBpbmRleF9zY2FuX2JhdGNoX3RhYmxlX2FyZWEoc2NhbiwKKwkJCQkJCQkJCQkJCQkJ CQkJcHJlZmV0Y2hCYXRjaCk7CisKKwkJCQkvKiBtYWtlIHN1cmUgd2UgaGF2ZSB2aXNpYmlsaXR5 IGluZm8gZm9yIHRoZSBlbnRpcmUgYmF0Y2ggKi8KKwkJCQlBc3NlcnQoaHNjYW4tPnhzX3ZtX2l0 ZW1zID09IHNjYW4tPm1heGl0ZW1zYmF0Y2gpOworCQkJCWhlYXBhbV9pbmRleF9iYXRjaF9wb3Nf dmlzaWJpbGl0eShzY2FuLCB4c19yZWFkX3N0cmVhbV9kaXIsCisJCQkJCQkJCQkJCQkgIHByZWZl dGNoQmF0Y2gsIGhiYXRjaCwKKwkJCQkJCQkJCQkJCSAgcHJlZmV0Y2hQb3MpOworCQkJfQorCQl9 CisKKwkJLyoKKwkJICogcHJlZmV0Y2hQb3Mgbm93IHBvaW50cyB0byB0aGUgbmV4dCBpdGVtIHdo b3NlIFRJRCdzIGhlYXAgYmxvY2sKKwkJICogbnVtYmVyIG1pZ2h0IG5lZWQgdG8gYmUgcHJlZmV0 Y2hlZAorCQkgKi8KKwkJQXNzZXJ0KGluZGV4X3NjYW5fYmF0Y2goc2NhbiwgcHJlZmV0Y2hQb3Mt PmJhdGNoKSA9PSBwcmVmZXRjaEJhdGNoKTsKKwkJQXNzZXJ0KHByZWZldGNoUG9zLT5pdGVtID49 IHByZWZldGNoQmF0Y2gtPmZpcnN0SXRlbSAmJgorCQkJICAgcHJlZmV0Y2hQb3MtPml0ZW0gPD0g cHJlZmV0Y2hCYXRjaC0+bGFzdEl0ZW0pOworCQkvKiBzY2FuUG9zIGlzIGFsd2F5cyA8PSBwcmVm ZXRjaFBvcyB3aGVuIHdlIHJldHVybiAqLworCQlBc3NlcnQoaW5kZXhfc2Nhbl9wb3NfY21wKHNj YW5Qb3MsIHByZWZldGNoUG9zLCB4c19yZWFkX3N0cmVhbV9kaXIpIDw9IDApOworCisJCWlmIChz Y2FuLT54c193YW50X2l0dXApCisJCXsKKwkJCUhlYXBCYXRjaERhdGEgKmhiYXRjaCA9IGluZGV4 X3NjYW5fYmF0Y2hfdGFibGVfYXJlYShzY2FuLAorCQkJCQkJCQkJCQkJCQkJCXByZWZldGNoQmF0 Y2gpOworCisJCQlBc3NlcnQoaGJhdGNoLT52aXNJbmZvW3ByZWZldGNoUG9zLT5pdGVtXSAmIEhF QVBfQkFUQ0hfVklTX0NIRUNLRUQpOworCQkJaWYgKGhiYXRjaC0+dmlzSW5mb1twcmVmZXRjaFBv cy0+aXRlbV0gJiBIRUFQX0JBVENIX1ZJU19BTExfVklTSUJMRSkKKwkJCXsKKwkJCQkvKiBpdGVt IGlzIGtub3duIHRvIGJlIGFsbC12aXNpYmxlIC0tIGRvbid0IHByZWZldGNoICovCisJCQkJY29u dGludWU7CisJCQl9CisJCX0KKworCQlpdGVtID0gJnByZWZldGNoQmF0Y2gtPml0ZW1zW3ByZWZl dGNoUG9zLT5pdGVtXTsKKwkJcHJlZmV0Y2hfYmxvY2sgPSBJdGVtUG9pbnRlckdldEJsb2NrTnVt YmVyKCZpdGVtLT50YWJsZVRpZCk7CisKKwkJaWYgKHByZWZldGNoX2Jsb2NrID09IGhzY2FuLT54 c19wcmVmZXRjaF9ibG9jaykKKwkJeworCQkJLyoKKwkJCSAqIHByZWZldGNoX2Jsb2NrIG1hdGNo ZXMgdGhlIGxhc3QgcHJlZmV0Y2hQb3MgaXRlbSdzIFRJRCdzIGhlYXAKKwkJCSAqIGJsb2NrIG51 bWJlcjsgd2UgbXVzdCBub3QgcmV0dXJuIHRoZSBzYW1lIHByZWZldGNoX2Jsb2NrIHR3aWNlCisJ CQkgKiAodHdpY2UgaW4gc3VjY2Vzc2lvbikKKwkJCSAqLworCQkJY29udGludWU7CisJCX0KKwor CQkvKiBXZSBoYXZlIGEgbmV3IGhlYXAgYmxvY2sgbnVtYmVyIHRvIHJldHVybiB0byByZWFkIHN0 cmVhbSAqLworCQloc2Nhbi0+eHNfcHJlZmV0Y2hfYmxvY2sgPSBwcmVmZXRjaF9ibG9jazsKKwkJ cmV0dXJuIHByZWZldGNoX2Jsb2NrOworCX0KKworCXJldHVybiBJbnZhbGlkQmxvY2tOdW1iZXI7 Cit9CisKIC8qCiAgKiBDb21tb24gaW1wbGVtZW50YXRpb24gZm9yIGFsbCBmb3VyIGhlYXBhbV9p bmRleF8qX2dldG5leHRfc2xvdCB2YXJpYW50cy4KICAqCiAgKiBUaGUgcmVzdWx0IGlzIHRydWUg aWYgYSB0dXBsZSBzYXRpc2Z5aW5nIHRoZSBzY2FuIGtleXMgYW5kIHRoZSBzbmFwc2hvdCB3YXMK LSAqIGZvdW5kLCBmYWxzZSBvdGhlcndpc2UuICBUaGUgdHVwbGUgaXMgc3RvcmVkIGluIHRoZSBz cGVjaWZpZWQgc2xvdC4KKyAqIGZvdW5kLCBmYWxzZSBvdGhlcndpc2UuICBGb3IgcGxhaW4gaW5k ZXggc2NhbnMgdGhlIHR1cGxlIGlzIHN0b3JlZCBpbiB0aGUKKyAqIHNwZWNpZmllZCBzbG90OyBm b3IgaW5kZXgtb25seSBzY2FucyBvbmx5IHhzX2l0dXAveHNfaGl0dXAgaXMgbWVhbmluZ2Z1bAor ICogKHRoZSBzbG90IGlzIGNsZWFyZWQpLgogICoKICAqIE9uIHN1Y2Nlc3MsIHJlc291cmNlcyAo bGlrZSBidWZmZXIgcGlucykgYXJlIGxpa2VseSB0byBiZSBoZWxkLCBhbmQgd2lsbCBiZQogICog ZHJvcHBlZCBieSBhIGZ1dHVyZSBjYWxsIGhlcmUgKG9yIGJ5IGEgbGF0ZXIgY2FsbCB0byBoZWFw YW1faW5kZXhfZmV0Y2hfZW5kCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgv aW5kZXhiYXRjaC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YmF0Y2guYwppbmRl eCBjNjYxYjcwZTUuLmY3MWE4OWNlMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2lu ZGV4L2luZGV4YmF0Y2guYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhiYXRj aC5jCkBAIC01LDE1ICs1LDIyIEBACiAgKgogICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgdGhlIGNv cmUgaW5mcmFzdHJ1Y3R1cmUgZm9yIGJhdGNoLWJhc2VkIGluZGV4IHNjYW5zLAogICogd2hpY2gg YWxsb3cgaW5kZXggQU1zIHRvIHJldHVybiBtdWx0aXBsZSBtYXRjaGluZyBUSURzIHBlciBwYWdl IGluIGEgc2luZ2xlCi0gKiBjYWxsLiAgVGhlIGJhdGNoIHJpbmcgYnVmZmVyIGlzIG93bmVkIGJ5 IHRoZSB0YWJsZSBBTS4KKyAqIGNhbGwuICBUaGUgYmF0Y2ggcmluZyBidWZmZXIgaXMgb3duZWQg YnkgdGhlIHRhYmxlIEFNLCB0eXBpY2FsbHkgbWFpbnRhaW5lZAorICogYWxvbmdzaWRlIGEgcmVh ZCBzdHJlYW0gdXNlZCBmb3IgcHJlZmV0Y2hpbmcgdGFibGUgYmxvY2tzLgogICoKLSAqIFRoZSBy aW5nIGJ1ZmZlciBsb2FkcyBiYXRjaGVzIGluIGluZGV4IGtleSBzcGFjZS9pbmRleCBzY2FuIG9y ZGVyLgorICogVGhlIHJpbmcgYnVmZmVyIGxvYWRzIGJhdGNoZXMgaW4gaW5kZXgga2V5IHNwYWNl L2luZGV4IHNjYW4gb3JkZXIuICBUaGlzCisgKiBhbGxvd3MgdGhlIHRhYmxlIEFNIHRvIG1haW50 YWluIGFuIGFkZXF1YXRlIHByZWZldGNoIGRpc3RhbmNlOiBpdHMgcmVhZAorICogc3RyZWFtIGNh bGxiYWNrIGlzIHRoZXJlYnkgYWJsZSB0byByZXF1ZXN0IHRhYmxlIGJsb2NrcyByZWZlcmVuY2Vk IGJ5IGluZGV4CisgKiBwYWdlcyB0aGF0IGFyZSB3ZWxsIGFoZWFkIG9mIHRoZSBjdXJyZW50IHNj YW4gcG9zaXRpb24ncyBpbmRleCBwYWdlLgogICoKICAqIE1vc3QgZnVuY3Rpb25zIGhlcmUgYXJl IHRhYmxlIEFNIHV0aWxpdGllcyAodGFibGVhbV91dGlsXyopLCBjYWxsZWQgYnkKICAqIHRhYmxl IEFNcyBkdXJpbmcgYW1nZXRiYXRjaCBpbmRleCBzY2Fucy4gIFRoZXNlIG1hbmFnZSB0aGUgYmF0 Y2ggcmluZwogICogYnVmZmVyJ3MgbGlmZWN5Y2xlIGFuZCBwb3NpdGlvbmFsIHN0YXRlLCBhbmQg aGVscCB3aXRoIGNlcnRhaW4gYXNwZWN0cyBvZgogICogcmVzb3VyY2UgbWFuYWdlbWVudC4gIFRo ZSB0YWJsZSBBTSB1c2VzIHNjYW5Qb3MgKGFuZCBpdHMgc2NhbkJhdGNoIGJhdGNoKQotICogdG8g cmV0dXJuIGl0ZW1zIGZyb20gYmF0Y2hlcyByZXR1cm5lZCBieSBhbWdldGJhdGNoLgorICogdG8g cmV0dXJuIGl0ZW1zIGZyb20gYmF0Y2hlcyByZXR1cm5lZCBieSBhbWdldGJhdGNoLiAgVGFibGUg QU1zIHRoYXQKKyAqIHN1cHBvcnQgaW5kZXggSS9PIHByZWZldGNoaW5nIHVzZSBwcmVmZXRjaFBv cyAoYW5kIGl0cyBwcmVmZXRjaEJhdGNoIGJhdGNoKQorICogYnkgaW1wbGVtZW50aW5nIGEgcmVh ZCBzdHJlYW0gY2FsbGJhY2sgdGhhdCBjb25zdW1lcyBpdGVtcyB3ZWxsIGFoZWFkIG9mCisgKiBz Y2FuUG9zLgogICoKICAqIFRoZXJlIGFyZSBhbHNvIHNvbWUgaW5kZXggQU0gdXRpbGl0aWVzIChp bmRleGFtX3V0aWxfKiksIGNhbGxlZCBieSBpbmRleAogICogQU1zIHRoYXQgaW1wbGVtZW50IHRo ZSBhbWdldGJhdGNoIGludGVyZmFjZSwgdG8gaGVscCBtYW5hZ2UgcmVzb3VyY2VzIGxpa2UKQEAg LTU1LDYgKzYyLDcgQEAgdGFibGVhbV91dGlsX2JhdGNoc2Nhbl9yZXNldChJbmRleFNjYW5EZXNj IHNjYW4sIGJvb2wgZW5kc2NhbikKIAlib29sCQltYXJrQmF0Y2hGcmVlZCA9IGZhbHNlOwogCiAJ YmF0Y2hyaW5nYnVmLT5zY2FuUG9zLnZhbGlkID0gZmFsc2U7CisJYmF0Y2hyaW5nYnVmLT5wcmVm ZXRjaFBvcy52YWxpZCA9IGZhbHNlOwogCWJhdGNocmluZ2J1Zi0+bWFya1Bvcy52YWxpZCA9IGZh bHNlOwogCiAJZm9yICh1aW50OCBpID0gYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2g7IGkgIT0gYmF0 Y2hyaW5nYnVmLT5uZXh0QmF0Y2g7IGkrKykKQEAgLTE2NCw3ICsxNzIsMTIgQEAgdGFibGVhbV91 dGlsX2JhdGNoc2Nhbl9tYXJrX3BvcyhJbmRleFNjYW5EZXNjIHNjYW4pCiAgKiB0aGUgY3VycmVu dCBzY2FuQmF0Y2ggd2hlbiBuZWVkZWQuCiAgKgogICogV2UganVzdCBkaXNjYXJkIGFsbCBiYXRj aGVzIChvdGhlciB0aGFuIG1hcmtCYXRjaC9yZXN0b3JlZCBzY2FuQmF0Y2gpLAotICogZXhjZXB0 IHdoZW4gbWFya0JhdGNoIGlzIGFscmVhZHkgdGhlIHNjYW4ncyBjdXJyZW50IHNjYW5CYXRjaC4K KyAqIGV4Y2VwdCB3aGVuIG1hcmtCYXRjaCBpcyBhbHJlYWR5IHRoZSBzY2FuJ3MgY3VycmVudCBz Y2FuQmF0Y2guICBXZSBhbHdheXMKKyAqIGludmFsaWRhdGUgcHJlZmV0Y2hQb3MuICBUaGUgcmVh ZCBzdHJlYW0gYW5kIHJlbGF0ZWQgcHJlZmV0Y2hpbmcgc3RhdGUgYXJlCisgKiByZXNldCBieSB0 aGUgY2FsbGVyICh3aGljaCBjYWxscyB0aGlzIGZ1bmN0aW9uIGFzIGl0IHJlc2V0cyB0aGF0IHN0 YXRlKS4KKyAqIFRoaXMgYXBwcm9hY2gga2VlcHMgdGhpbmdzIHNpbXBsZSBmb3IgdGFibGUgQU1z OiBtb3N0IGNvZGUgdGhhdCBkZWFscyB3aXRoCisgKiBiYXRjaGVzIGlzIHRoZXJlYnkgYWJsZSB0 byBhc3N1bWUgdGhhdCB0aGUgY29tbW9uIGNhc2Ugd2hlcmUgc2NhbiBkaXJlY3Rpb24KKyAqIG5l dmVyIGNoYW5nZXMgaXMgdGhlIG9ubHkgY2FzZS4KICAqLwogdm9pZAogdGFibGVhbV91dGlsX2Jh dGNoc2Nhbl9yZXN0b3JlX3BvcyhJbmRleFNjYW5EZXNjIHNjYW4pCkBAIC0xNzksNiArMTkyLDE0 IEBAIHRhYmxlYW1fdXRpbF9iYXRjaHNjYW5fcmVzdG9yZV9wb3MoSW5kZXhTY2FuRGVzYyBzY2Fu KQogCUFzc2VydChzY2FuLT54c19oZWFwZmV0Y2gpOwogCUFzc2VydChtYXJrUG9zLT52YWxpZCk7 CiAKKwkvKgorCSAqIFJlc3RvcmluZyBhIG1hcmsgYWx3YXlzIHJlcXVpcmVzIHN0b3BwaW5nIHBy ZWZldGNoaW5nLiAgVGhpcyBpcyBzaW1pbGFyCisJICogdG8gdGhlIGhhbmRsaW5nIHRhYmxlIEFN cyBpbXBsZW1lbnQgdG8gZGVhbCB3aXRoIGEgdHVwbGUtbGV2ZWwgY2hhbmdlCisJICogaW4gdGhl IHNjYW4ncyBkaXJlY3Rpb24uICBUaGUgcmVhZCBzdHJlYW0gbXVzdCBoYXZlIGFscmVhZHkgYmVl biByZXNldAorCSAqIGJ5IHRoZSBjYWxsZXIgKHZpYSB0YWJsZV9pbmRleF9mZXRjaF9yZXNldCku CisJICovCisJYmF0Y2hyaW5nYnVmLT5wcmVmZXRjaFBvcy52YWxpZCA9IGZhbHNlOworCiAJaWYg KHNjYW5CYXRjaCA9PSBtYXJrQmF0Y2gpCiAJewogCQkvKiBtYXJrQmF0Y2ggaXMgYWxyZWFkeSBz Y2FuQmF0Y2g7IG5lZWRuJ3QgY2hhbmdlIGJhdGNocmluZ2J1ZiAqLwpAQCAtMjQzLDYgKzI2NCwx MyBAQCB0YWJsZWFtX3V0aWxfYmF0Y2hzY2FuX3Jlc3RvcmVfcG9zKEluZGV4U2NhbkRlc2Mgc2Nh bikKICAqIHRvIGRldGVybWluZSB3aGljaCBiYXRjaCBjb21lcyBuZXh0IGluIHRoZSBuZXcgc2Nh biBkaXJlY3Rpb24uICBUaGlzCiAgKiBhcHByb2FjaCBpc24ndCBwYXJ0aWN1bGFybHkgZWZmaWNp ZW50LCBidXQgaXQgd29ya3Mgd2VsbCBlbm91Z2ggZm9yIHdoYXQKICAqIG91Z2h0IHRvIGJlIGEg cmVsYXRpdmVseSByYXJlIG9jY3VycmVuY2UuCisgKgorICogQ2FsbGVyIG11c3QgaGF2ZSByZXNl dCB0aGUgc2NhbidzIHJlYWQgc3RyZWFtIGJlZm9yZSBjYWxsaW5nIGhlcmUuICBUaGF0CisgKiBu ZWVkcyB0byBoYXBwZW4gYXMgc29vbiBhcyB0aGUgc2NhbiByZXF1ZXN0cyBhIHR1cGxlIGluIHdo YXRldmVyIHNjYW4KKyAqIGRpcmVjdGlvbiBpcyBvcHBvc2l0ZS10by1jdXJyZW50LiAgV2Ugb25s eSBkZWFsIHdpdGggdGhlIGNhc2Ugd2hlcmUgdGhlCisgKiBzY2FuIGJhY2tzIHVwIGJ5IGVub3Vn aCBpdGVtcyB0byBjcm9zcyBhIGJhdGNoIGJvdW5kYXJ5ICh3aGVuIHRoZSBzY2FuCisgKiByZXN1 bWVzIHNjYW5uaW5nIGluIGl0cyBvcmlnaW5hbCBkaXJlY3Rpb24vZW5kcyBiZWZvcmUgY3Jvc3Np bmcgYSBib3VuZGFyeSwKKyAqIHRoZXJlIGlzbid0IGFueSBuZWVkIHRvIGNhbGwgaGVyZSkuCiAg Ki8KIHZvaWQKIHRhYmxlYW1fdXRpbF9zY2FuYmF0Y2hfZGlyY2hhbmdlKEluZGV4U2NhbkRlc2Mg c2NhbikKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMg Yi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jCmluZGV4IDFjNTc1ZTU2Zi4u NmZjYjgxNWY3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6 ZS5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMKQEAgLTE0Niw2 ICsxNDYsNyBAQCBpbnQJCQltYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMjsKIGJv b2wJCWVuYWJsZV9zZXFzY2FuID0gdHJ1ZTsKIGJvb2wJCWVuYWJsZV9pbmRleHNjYW4gPSB0cnVl OwogYm9vbAkJZW5hYmxlX2luZGV4b25seXNjYW4gPSB0cnVlOworYm9vbAkJZW5hYmxlX2luZGV4 c2Nhbl9wcmVmZXRjaCA9IHRydWU7CiBib29sCQllbmFibGVfYml0bWFwc2NhbiA9IHRydWU7CiBi b29sCQllbmFibGVfdGlkc2NhbiA9IHRydWU7CiBib29sCQllbmFibGVfc29ydCA9IHRydWU7CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdCBiL3Ny Yy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0CmluZGV4IDdhOGE1ZDA3Ni4u YTk3YmVkZmM0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0 ZXJzLmRhdAorKysgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdApA QCAtOTMyLDYgKzkzMiwxMyBAQAogICBib290X3ZhbCA9PiAndHJ1ZScsCiB9LAogCit7IG5hbWUg PT4gJ2VuYWJsZV9pbmRleHNjYW5fcHJlZmV0Y2gnLCB0eXBlID0+ICdib29sJywgY29udGV4dCA9 PiAnUEdDX1VTRVJTRVQnLCBncm91cCA9PiAnUVVFUllfVFVOSU5HX01FVEhPRCcsCisgIHNob3J0 X2Rlc2MgPT4gJ0VuYWJsZXMgcHJlZmV0Y2hpbmcgZm9yIGluZGV4IHNjYW5zIGFuZCBpbmRleC1v bmx5IHNjYW5zLicsCisgIGZsYWdzID0+ICdHVUNfRVhQTEFJTicsCisgIHZhcmlhYmxlID0+ICdl bmFibGVfaW5kZXhzY2FuX3ByZWZldGNoJywKKyAgYm9vdF92YWwgPT4gJ3RydWUnLAorfSwKKwog eyBuYW1lID0+ICdlbmFibGVfbWF0ZXJpYWwnLCB0eXBlID0+ICdib29sJywgY29udGV4dCA9PiAn UEdDX1VTRVJTRVQnLCBncm91cCA9PiAnUVVFUllfVFVOSU5HX01FVEhPRCcsCiAgIHNob3J0X2Rl c2MgPT4gJ0VuYWJsZXMgdGhlIHBsYW5uZXJcJ3MgdXNlIG9mIG1hdGVyaWFsaXphdGlvbi4nLAog ICBmbGFncyA9PiAnR1VDX0VYUExBSU4nLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMv bWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0 Z3Jlc3FsLmNvbmYuc2FtcGxlCmluZGV4IDEwYTI4MWRmZC4uZjQyMTljYzM2IDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKKysrIGIvc3Jj L2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCkBAIC00MjEsNiArNDIx LDcgQEAKICNlbmFibGVfaW5jcmVtZW50YWxfc29ydCA9IG9uCiAjZW5hYmxlX2luZGV4c2NhbiA9 IG9uCiAjZW5hYmxlX2luZGV4b25seXNjYW4gPSBvbgorI2VuYWJsZV9pbmRleHNjYW5fcHJlZmV0 Y2ggPSBvbgogI2VuYWJsZV9tYXRlcmlhbCA9IG9uCiAjZW5hYmxlX21lbW9pemUgPSBvbgogI2Vu YWJsZV9tZXJnZWpvaW4gPSBvbgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21s IGIvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sCmluZGV4IGI0NDIzMWEzNi4uY2MwOTFhMjllIDEw MDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2Nv bmZpZy5zZ21sCkBAIC01NzU0LDYgKzU3NTQsMjIgQEAgQU5ZIDxyZXBsYWNlYWJsZSBjbGFzcz0i cGFyYW1ldGVyIj5udW1fc3luYzwvcmVwbGFjZWFibGU+ICggPHJlcGxhY2VhYmxlIGNsYXNzPSIK ICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgIDwvdmFybGlzdGVudHJ5PgogCisgICAgIDx2YXJsaXN0 ZW50cnkgaWQ9Imd1Yy1lbmFibGUtaW5kZXhzY2FuLXByZWZldGNoIiB4cmVmbGFiZWw9ImVuYWJs ZV9pbmRleHNjYW5fcHJlZmV0Y2giPgorICAgICAgPHRlcm0+PHZhcm5hbWU+ZW5hYmxlX2luZGV4 c2Nhbl9wcmVmZXRjaDwvdmFybmFtZT4gKDx0eXBlPmJvb2xlYW48L3R5cGU+KQorICAgICAgPGlu ZGV4dGVybT4KKyAgICAgICA8cHJpbWFyeT48dmFybmFtZT5lbmFibGVfaW5kZXhzY2FuX3ByZWZl dGNoPC92YXJuYW1lPiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgIDwv aW5kZXh0ZXJtPgorICAgICAgPC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJh PgorICAgICAgICBFbmFibGVzIG9yIGRpc2FibGVzIHByZWZldGNoaW5nIGZvciBpbmRleCBzY2Fu IGFuZCBpbmRleC1vbmx5IHNjYW4KKyAgICAgICAgcGxhbiB0eXBlcy4gIFByZWZldGNoaW5nIGNh biBpbXByb3ZlIHBlcmZvcm1hbmNlIGJ5IHJlYWRpbmcgdGFibGUgQU0KKyAgICAgICAgcGFnZXMg YWhlYWQgb2Ygd2hlbiB0aGV5IGFyZSBuZWVkZWQgZHVyaW5nIGluZGV4IHNjYW5zLiAgVGhlIGRl ZmF1bHQKKyAgICAgICAgaXMgPGxpdGVyYWw+b248L2xpdGVyYWw+LgorICAgICAgIDwvcGFyYT4K KyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5PgorCiAgICAgIDx2YXJsaXN0 ZW50cnkgaWQ9Imd1Yy1lbmFibGUtbWF0ZXJpYWwiIHhyZWZsYWJlbD0iZW5hYmxlX21hdGVyaWFs Ij4KICAgICAgIDx0ZXJtPjx2YXJuYW1lPmVuYWJsZV9tYXRlcmlhbDwvdmFybmFtZT4gKDx0eXBl PmJvb2xlYW48L3R5cGU+KQogICAgICAgPGluZGV4dGVybT4KZGlmZiAtLWdpdCBhL2RvYy9zcmMv c2dtbC9pbmRleGFtLnNnbWwgYi9kb2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21sCmluZGV4IDE4OGY4 NjdiZC4uMmY0M2M2YTY5IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21sCisr KyBiL2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwKQEAgLTgxMCw5ICs4MTAsMTIgQEAgYW1nZXRi YXRjaCAoSW5kZXhTY2FuRGVzYyBzY2FuLAogICA8cGFyYT4KICAgIFRoZSA8ZnVuY3Rpb24+YW1n ZXRiYXRjaDwvZnVuY3Rpb24+IGludGVyZmFjZSBpcyBhbiBhbHRlcm5hdGl2ZSB0bwogICAgPGZ1 bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiB0aGF0IHJldHVybnMgbWF0Y2hpbmcgaW5kZXgg ZW50cmllcyBpbiBiYXRjaGVzCi0gICByYXRoZXIgdGhhbiBvbmUgYXQgYSB0aW1lLiAgQnkgcmV0 dXJuaW5nIGFsbCBtYXRjaGluZyBpbmRleCBlbnRyaWVzIGZyb20gYQotICAgc2luZ2xlIGluZGV4 IHBhZ2UgdG9nZXRoZXIsIHRoZSB0YWJsZSBBTSBnYWlucyB2aXNpYmlsaXR5IGludG8gd2hpY2gg dGFibGUKLSAgIGJsb2NrcyB3aWxsIGJlIG5lZWRlZCBpbiB0aGUgbmVhciBmdXR1cmUuCisgICBy YXRoZXIgdGhhbiBvbmUgYXQgYSB0aW1lLiBUaGlzIGVuYWJsZXMgdGhlIHRhYmxlIGFjY2VzcyBt ZXRob2QgdG8KKyAgIG9wdGltaXplIHRhYmxlIGJsb2NrIGFjY2VzcyBwYXR0ZXJucyBhbmQgcGVy Zm9ybSBJL08gcHJlZmV0Y2hpbmcuCisgICBCeSByZXR1cm5pbmcgYWxsIG1hdGNoaW5nIGluZGV4 IGVudHJpZXMgZnJvbSBhIHNpbmdsZSBpbmRleCBwYWdlIHRvZ2V0aGVyLAorICAgdGhlIHRhYmxl IEFNIGNhbiByZWFkYWhlYWQgdGhyb3VnaCB0aGUgaW5kZXggYW5kIGlkZW50aWZ5IHdoaWNoIHRh YmxlCisgICBibG9ja3Mgd2lsbCBiZSBuZWVkZWQsIGFsbG93aW5nIHByZWZldGNoaW5nIG9mIHRh YmxlIEFNIHBhZ2VzIGR1cmluZworICAgb3JkZXJlZCBpbmRleCBzY2Fucy4KICAgPC9wYXJhPgog CiAgIDxwYXJhPgpAQCAtOTM2LDcgKzkzOSw5IEBAIGFtdW5ndWFyZGJhdGNoIChJbmRleFNjYW5E ZXNjIHNjYW4sCiAgICAgdG8gZnJlZSB0aGUgcGlucyBhdCBhbiBvcHBvcnR1bmUgcG9pbnQgKGF0 IGEgbWluaW11bSB3aGVuZXZlcgogICAgIDxmdW5jdGlvbj5hbWVuZHNjYW48L2Z1bmN0aW9uPiBp cyBjYWxsZWQsIGFuZCB0eXBpY2FsbHkgd2hlbgogICAgIDxmdW5jdGlvbj5hbXJlc2NhbjwvZnVu Y3Rpb24+IGlzIGNhbGxlZCkuICBJdCBtdXN0IGFsc28ga2VlcCB0aGUgbnVtYmVyIG9mCi0gICAg cmV0YWluZWQgcGlucyBmaXhlZCBhbmQgc21hbGwuCisgICAgcmV0YWluZWQgcGlucyBmaXhlZCBh bmQgc21hbGwsIHRvIGF2b2lkIGV4aGF1c3RpbmcgdGhlIGJhY2tlbmQncyBidWZmZXIKKyAgICBw aW4gbGltaXQgKHdoaWNoIGlzIHNoYXJlZCB3aXRoIHRoZSB0YWJsZSBBTSdzIHJlYWQgc3RyZWFt IGZvciBpbmRleCBzY2FuCisgICAgcHJlZmV0Y2hpbmcpLgogICAgPC9wYXJhPgogICA8L25vdGU+ CiAKQEAgLTE0MjUsNiArMTQzMCw2MCBAQCBhbXRyYW5zbGF0ZWNtcHR5cGUgKENvbXBhcmVUeXBl IGNtcHR5cGUsIE9pZCBvcGZhbWlseSwgT2lkIG9wY2ludHlwZSk7CiAgICBvciB2aWNlIHZlcnNh LCBpZiBpdHMgaW50ZXJuYWwgaW1wbGVtZW50YXRpb24gaXMgdW5zdWl0ZWQgdG8gb25lIEFQSSBv ciB0aGUgb3RoZXIuCiAgIDwvcGFyYT4KIAorICA8c2VjdDIgaWQ9ImluZGV4LXNjYW5uaW5nLWJh dGNoZXMiPgorICAgPHRpdGxlPlRhYmxlIEFNIENvbnNpZGVyYXRpb25zIGZvciBCYXRjaCBTY2Fu bmluZzwvdGl0bGU+CisKKyAgIDxwYXJhPgorICAgIFRoaXMgc2VjdGlvbiBpcyBwcmltYXJpbHkg cmVsZXZhbnQgdG8gPGxpbmsgbGlua2VuZD0idGFibGVhbSI+dGFibGUgYWNjZXNzCisgICAgIG1l dGhvZDwvbGluaz4gYXV0aG9ycy4KKyAgIDwvcGFyYT4KKworICAgPHBhcmE+CisgICAgV2hlbiBh biBpbmRleCBzY2FuIHVzZXMgdGhlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaW50 ZXJmYWNlLCB0aGUKKyAgICB0YWJsZSBBTSBoYXMgc29sZSBjb250cm9sIG92ZXIgdGhlIDxzdHJ1 Y3RuYW1lPkluZGV4U2NhbkRlc2M8L3N0cnVjdG5hbWU+J3MKKyAgICA8c3RydWN0ZmllbGQ+YmF0 Y2hyaW5nYnVmPC9zdHJ1Y3RmaWVsZD4sIGluY2x1ZGluZyBjcmVhdGluZywgcmVzZXR0aW5nLAor ICAgIGFuZCBlbmRpbmcgdGhlIGJhdGNoIHJpbmcgYnVmZmVyIHdpdGhpbiB0aGUgYXBwcm9wcmlh dGUgdGFibGUgQU0KKyAgICBjYWxsYmFja3MsIGFuZCBtYW5hZ2luZyBwb3NpdGlvbmFsIHN0YXRl IGFuZCBUSUQgcmVjeWNsaW5nIGludGVybG9ja2luZworICAgICh0aGF0IGlzLCBkZXRlcm1pbmlu ZyB3aGVuIHRvIHVuZ3VhcmQgZWFjaCBiYXRjaCwgd2hpY2ggd2lsbCB0eXBpY2FsbHkKKyAgICBy ZWxlYXNlIGFuIGluZGV4IHBhZ2UgYnVmZmVyIHBpbiBhc3NvY2lhdGVkIHdpdGggdGhlIGJhdGNo KS4gIEluZGV4IGFjY2VzcworICAgIG1ldGhvZHMgc2hvdWxkIG5vdCBhY2Nlc3Mgb3IgbWFuaXB1 bGF0ZSB0aGVzZSBmaWVsZHMuICBTZWUgdGhlCisgICAgPGZpbGVuYW1lPnNyYy9iYWNrZW5kL2Fj Y2Vzcy9oZWFwL2hlYXBhbV9pbmRleHNjYW4uYzwvZmlsZW5hbWU+CisgICAgaW1wbGVtZW50YXRp b24gZm9yIGEgcmVmZXJlbmNlIGV4YW1wbGUuCisgICA8L3BhcmE+CisKKyAgIDxwYXJhPgorICAg IFRoZSA8c3RydWN0ZmllbGQ+c2NhblBvczwvc3RydWN0ZmllbGQ+IGZpZWxkIHdpdGhpbgorICAg IDxzdHJ1Y3RmaWVsZD5iYXRjaHJpbmdidWY8L3N0cnVjdGZpZWxkPiB0cmFja3Mgd2hpY2ggYmF0 Y2ggYW5kIGl0ZW0gd2l0aGluCisgICAgdGhhdCBiYXRjaCB3aWxsIGJlIHJldHVybmVkIG5leHQg dG8gdGhlIGV4ZWN1dG9yLiAgVGhlIHRhYmxlIEFNIG11c3QgYWR2YW5jZQorICAgIDxzdHJ1Y3Rm aWVsZD5zY2FuUG9zPC9zdHJ1Y3RmaWVsZD4gYXMgdHVwbGVzIGFyZSByZXR1cm5lZCBieQorICAg IDxmdW5jdGlvbj50YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Q8L2Z1bmN0aW9uPiwgYW5kIG11c3Qg YWxzbyBtb2RpZnkgdGhpcworICAgIGZpZWxkIHdoZW4gcmVzdG9yaW5nIGEgc2F2ZWQgbWFyay4K KyAgIDwvcGFyYT4KKworICAgPHBhcmE+CisgICAgVGhlIDxzdHJ1Y3RmaWVsZD5wcmVmZXRjaFBv czwvc3RydWN0ZmllbGQ+IGZpZWxkIHRyYWNrcyB0aGUgcG9zaXRpb24gdXNlZAorICAgIGZvciBJ L08gcHJlZmV0Y2hpbmcuICBJdCBpcyBnZW5lcmFsbHkgYWR2YW5jZWQgYnkgaW5pdGlhbGl6aW5n IGl0IGZyb20KKyAgICA8c3RydWN0ZmllbGQ+c2NhblBvczwvc3RydWN0ZmllbGQ+IHdpdGhpbiBh IHJlYWQgc3RyZWFtIGNhbGxiYWNrLCBhbGxvd2luZworICAgIHRoZSB0YWJsZSBBTSB0byBwcmVm ZXRjaCB0YWJsZSBibG9ja3MgcG9pbnRlZCB0byBieSBpdGVtcyB0aGF0IGFyZSB3ZWxsCisgICAg YWhlYWQgb2YgdGhlIGN1cnJlbnQgc2NhbiBwb3NpdGlvbi4gIEluaXRpYWxseQorICAgIDxzdHJ1 Y3RmaWVsZD5wcmVmZXRjaFBvczwvc3RydWN0ZmllbGQ+IHN0YXJ0cyBhdAorICAgIDxzdHJ1Y3Rm aWVsZD5zY2FuUG9zPC9zdHJ1Y3RmaWVsZD4sIGJ1dCBhcyB0aGUgcmVhZCBzdHJlYW0gcmFtcHMg dXAgaXQgY2FuCisgICAgZ2V0IGZhciBhaGVhZCAmbWRhc2g7IHNwYW5uaW5nIG11bHRpcGxlIGlu ZGV4IHBhZ2VzIGlmIG5lY2Vzc2FyeSB0bworICAgIG1haW50YWluIGFuIG9wdGltYWwgSS9PIHBy ZWZldGNoIGRpc3RhbmNlIGZvciB0YWJsZSBibG9jayByZWFkcy4gIEEgbWFqb3IKKyAgICBnb2Fs IG9mIHRoZSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGludGVyZmFjZSBpcyB0byBh bGxvdyB0aGUKKyAgICB0YWJsZSBBTSB0byBwcmVmZXRjaCB3aXRob3V0IGJlaW5nIGxpbWl0ZWQg dG8gaXRlbXMgZnJvbSB0aGUgY3VycmVudAorICAgIDxzdHJ1Y3RmaWVsZD5zY2FuUG9zPC9zdHJ1 Y3RmaWVsZD4gYmF0Y2gncyBpbmRleCBsZWFmIHBhZ2UuCisgICA8L3BhcmE+CisKKyAgIDxwYXJh PgorICAgIEZvciBkZXRhaWxzIG9uIHRoZSBUSUQgcmVjeWNsaW5nIGludGVybG9jayBkdXJpbmcg YmF0Y2ggc2NhbnMsIGluY2x1ZGluZworICAgIHRoZSA8c3RydWN0ZmllbGQ+YmF0Y2hJbW1lZGlh dGVVbmd1YXJkPC9zdHJ1Y3RmaWVsZD4gcG9saWN5IGFuZCB0aGUKKyAgICA8ZnVuY3Rpb24+YW11 bmd1YXJkYmF0Y2g8L2Z1bmN0aW9uPiBjYWxsYmFjaywgc2VlCisgICAgPHhyZWYgbGlua2VuZD0i aW5kZXgtbG9ja2luZyIvPi4KKyAgIDwvcGFyYT4KKworICA8L3NlY3QyPgorCiAgPC9zZWN0MT4K IAogIDxzZWN0MSBpZD0iaW5kZXgtbG9ja2luZyI+CkBAIC0xNTI1LDcgKzE1ODQsMjIgQEAgYW10 cmFuc2xhdGVjbXB0eXBlIChDb21wYXJlVHlwZSBjbXB0eXBlLCBPaWQgb3BmYW1pbHksIE9pZCBv cGNpbnR5cGUpOwogICAgaW1tZWRpYXRlbHkgYWZ0ZXIgc2Nhbm5pbmcgdGhlIGNvcnJlc3BvbmRp bmcgaW5kZXggZW50cnkuICBUaGlzIGlzCiAgICBleHBlbnNpdmUgZm9yIGEgbnVtYmVyIG9mIHJl YXNvbnMuICBUaGUKICAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaW50ZXJmYWNl LCBieSBjb250cmFzdCwgd2FzIGRlc2lnbmVkIHRvCi0gICBhbGxvdyBzY2FucyB0byBiZSA8cXVv dGU+YXN5bmNocm9ub3VzPC9xdW90ZT4uCisgICBhbGxvdyBzY2FucyB0byBiZSA8cXVvdGU+YXN5 bmNocm9ub3VzPC9xdW90ZT46IGJ5IGNvbGxlY3RpbmcgYmF0Y2hlcyBvZgorICAgVElEcyBmcm9t IG11bHRpcGxlIGluZGV4IHBhZ2VzLCB0aGUgdGFibGUgQU0gY2FuIHByZWZldGNoIHRoZSBjb3Jy ZXNwb25kaW5nCisgICB0YWJsZSBibG9ja3Mgd2VsbCBhaGVhZCBvZiB0aGUgY3VycmVudCBzY2Fu IHBvc2l0aW9uICh1c2luZyBhc3luY2hyb25vdXMKKyAgIEkvTyB3aGVuIGF2YWlsYWJsZSksIGFs bG93aW5nIGEgbW9yZSBlZmZpY2llbnQgaGVhcCBhY2Nlc3MgcGF0dGVybi4gIE5vdAorICAgYWxs IHNjYW5zIGVuZCB1cCBiZWluZyBhc3luY2hyb25vdXMgaW4gcHJhY3RpY2UsIGJ1dCB0aGUgaW50 ZXJmYWNlIGlzCisgICBkZXNpZ25lZCB0byBhbGxvdyBpdC4gIFBlciB0aGUgYWJvdmUgYW5hbHlz aXMsIHdlIG11c3QgdXNlIHRoZSBzeW5jaHJvbm91cworICAgYXBwcm9hY2ggZm9yIG5vbi1NVkND LWNvbXBsaWFudCBzbmFwc2hvdHMsIGJ1dCBhbiBhc3luY2hyb25vdXMgc2NhbiBpcworICAgd29y a2FibGUgZm9yIHBsYWluIGluZGV4IHNjYW5zIHRoYXQgdXNlIGFuIE1WQ0Mgc25hcHNob3QuCisg IDwvcGFyYT4KKworICA8cGFyYT4KKyAgIEJlY2F1c2UgdGhlIHRhYmxlIEFNIHJlYWRzIG11bHRp cGxlIGluZGV4IGxlYWYgcGFnZXMgYWhlYWQgdmlhCisgICA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwv ZnVuY3Rpb24+IHRvIGZhY2lsaXRhdGUgdGhpcyBwcmVmZXRjaGluZywgaXQgY2Fubm90CisgICBw cmFjdGljYWxseSBob2xkIHBpbnMgb24gYWxsIHRob3NlIHBhZ2VzIHNpbXVsdGFuZW91c2x5LiAg VGhlcmVmb3JlLCBJL08KKyAgIHByZWZldGNoaW5nIHdpdGggPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8 L2Z1bmN0aW9uPiBpcyBvbmx5IHBvc3NpYmxlIHdoZW4gYW4KKyAgIE1WQ0MtY29tcGxpYW50IHNu YXBzaG90IGlzIGluIHVzZS4KICAgPC9wYXJhPgogCiAgIDxwYXJhPgpkaWZmIC0tZ2l0IGEvZG9j L3NyYy9zZ21sL3RhYmxlYW0uc2dtbCBiL2RvYy9zcmMvc2dtbC90YWJsZWFtLnNnbWwKaW5kZXgg OWNjZjViNzM5Li40NTQyZTAwYjQgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC90YWJsZWFtLnNn bWwKKysrIGIvZG9jL3NyYy9zZ21sL3RhYmxlYW0uc2dtbApAQCAtMTI5LDYgKzEyOSwxNCBAQCBt eV90YWJsZWFtX2hhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKICAgb3B0aW9uYWwpLCB0aGUgYmxv Y2sgbnVtYmVyIG5lZWRzIHRvIHByb3ZpZGUgbG9jYWxpdHkuCiAgPC9wYXJhPgogCisgPHBhcmE+ CisgIFRhYmxlIGFjY2VzcyBtZXRob2RzIG11c3Qgc3VwcG9ydCBvcmRlcmVkIGluZGV4IHNjYW5z IHVzaW5nIHRoZQorICA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGludGVyZmFjZS4g U2VlIGFsc28KKyAgPHhyZWYgbGlua2VuZD0iaW5kZXgtc2Nhbm5pbmctYmF0Y2hlcyIvPiBmb3Ig ZGV0YWlscyBvbiBpbnRlcmZhY2luZyB3aXRoCisgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5j dGlvbj4gaW5kZXggYWNjZXNzIG1ldGhvZHMsIGFuZCBtYW5hZ2luZyB0aGUKKyAgc2NhbidzIHBv c2l0aW9uLgorIDwvcGFyYT4KKwogIDxwYXJhPgogICBGb3IgY3Jhc2ggc2FmZXR5LCBhbiBBTSBj YW4gdXNlIHBvc3RncmVzJyA8bGluawogICBsaW5rZW5kPSJ3YWwiPjxhY3JvbnltPldBTDwvYWNy b255bT48L2xpbms+LCBvciBhIGN1c3RvbSBpbXBsZW1lbnRhdGlvbi4KZGlmZiAtLWdpdCBhL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9zeXN2aWV3cy5vdXQKaW5kZXggMTMyYjU2YTU4Li4zMmJjM2RkM2UgMTAwNjQ0Ci0t LSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0CisrKyBiL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0CkBAIC0xNjYsNiArMTY2LDcgQEAgc2VsZWN0 IG5hbWUsIHNldHRpbmcgZnJvbSBwZ19zZXR0aW5ncyB3aGVyZSBuYW1lIGxpa2UgJ2VuYWJsZSUn OwogIGVuYWJsZV9pbmNyZW1lbnRhbF9zb3J0ICAgICAgICB8IG9uCiAgZW5hYmxlX2luZGV4b25s eXNjYW4gICAgICAgICAgIHwgb24KICBlbmFibGVfaW5kZXhzY2FuICAgICAgICAgICAgICAgfCBv bgorIGVuYWJsZV9pbmRleHNjYW5fcHJlZmV0Y2ggICAgICB8IG9uCiAgZW5hYmxlX21hdGVyaWFs ICAgICAgICAgICAgICAgIHwgb24KICBlbmFibGVfbWVtb2l6ZSAgICAgICAgICAgICAgICAgfCBv bgogIGVuYWJsZV9tZXJnZWpvaW4gICAgICAgICAgICAgICB8IG9uCkBAIC0xODAsNyArMTgxLDcg QEAgc2VsZWN0IG5hbWUsIHNldHRpbmcgZnJvbSBwZ19zZXR0aW5ncyB3aGVyZSBuYW1lIGxpa2Ug J2VuYWJsZSUnOwogIGVuYWJsZV9zZXFzY2FuICAgICAgICAgICAgICAgICB8IG9uCiAgZW5hYmxl X3NvcnQgICAgICAgICAgICAgICAgICAgIHwgb24KICBlbmFibGVfdGlkc2NhbiAgICAgICAgICAg ICAgICAgfCBvbgotKDI1IHJvd3MpCisoMjYgcm93cykKIAogLS0gVGhlcmUgYXJlIGFsd2F5cyB3 YWl0IGV2ZW50IGRlc2NyaXB0aW9ucyBmb3IgdmFyaW91cyB0eXBlcy4gIEluamVjdGlvblBvaW50 CiAtLSBtYXkgYmUgcHJlc2VudCBvciBhYnNlbnQsIGRlcGVuZGluZyBvbiBoaXN0b3J5IHNpbmNl IGxhc3QgcG9zdG1hc3RlciBzdGFydC4KLS0gCjIuNTMuMAoK --0000000000002eda15064ecc7bcf--