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 1w84Oh-000BOK-0Q for pgsql-hackers@arkaria.postgresql.org; Wed, 01 Apr 2026 22:50:52 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w84Og-002e6Y-02 for pgsql-hackers@arkaria.postgresql.org; Wed, 01 Apr 2026 22:50:50 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w84Oe-002e6K-36 for pgsql-hackers@lists.postgresql.org; Wed, 01 Apr 2026 22:50:49 +0000 Received: from mail-wr1-x42b.google.com ([2a00:1450:4864:20::42b]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w84Oa-000000005l6-26zl for pgsql-hackers@lists.postgresql.org; Wed, 01 Apr 2026 22:50:49 +0000 Received: by mail-wr1-x42b.google.com with SMTP id ffacd0b85a97d-43d0deb7ad5so249814f8f.2 for ; Wed, 01 Apr 2026 15:50:44 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1775083844; cv=none; d=google.com; s=arc-20240605; b=Vj6rjnpzLFeFZ1UBoqe0kpib5pUx3F7x3+B0mxu5rZ77FaNRAlF88gkE9j+/RVNZJy pk9CvuaZGAWOxAXWTqCjn3pcO81XLOsAG02hapy7eJGZ7KmNd5q3RZr1PAh3kP7HyBYz QlZYSxc8SC75d7o3r4k4D0Dx0xhrLYEgqtf8dlm/ZA8GHb4WNfB9wLxqyquP2ms/xmV+ kxhLnI6QVxkS9gT9ZHGniZUu8BSwS7Nm6Tn76G88Ay7OyYvq1mVOrglFQ56ITIHTv7+Z fePkQH+iICLzfAZMzn/VYYNExG9qXxpJbQaJWHi998zqvem+pm3gdSKiedPN0un7f+3Z JH2g== 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=4WXqe5A89OBzIJ/QyYnxIeRhUGLF9LhNMKeG57vtvfo=; fh=r+ljmwa9i/tQnL0O6pqENKed4OcFOJvpbIRiPyB7MEU=; b=NnlWMWasr+CimlJGlLyXsnFcD+w2jBAj4Q5tbB6lXzku0m6KIEIi43TO3puavC7nWn vjJDSku+maiTG3qWSmshi5UwdDnxIL8y3SroaFAJstK7fYrlThmH1e3ZE5TnU4BvgRQ7 /5oXPxjGt69OywOnBIFMQ2h4hpnE2YcP1tNa8GADeJgqB3USJnCFQrg3JQFATO/LMDSY wgpvqorFmVXr4mTbqvUp9DkM6rQ0mYcIr2wIabO48JcUpDqlE/fr7PpEaCdZ+8q8VpzU GI6+4u7ly1ulwwRt+fkOfIfKkV0l91+CFRoMNoKhh4jJ3P/c/mPZpXbeYF+0wdBcr9UF uxcA==; 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.20230601.gappssmtp.com; s=20230601; t=1775083844; x=1775688644; 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=4WXqe5A89OBzIJ/QyYnxIeRhUGLF9LhNMKeG57vtvfo=; b=JpGjd2ctOJWSiLk3nWRRo6ddI0t7yZbpe+P4lMxWdSZeIp9Pu+sl/Uny9vmAy8XwVW NmLp5j9vra2tV9pJgKCDKIQ08H7wGd7UVdqeqGcNNXCkbSDBvwaSe/XsKw0x0O2LM8l4 pMHQ8tk1lAHx/vrR+qtqh0a/rS2wa0bfuZ+A5TENFvmdHBgsdVdUA2/RGKubFXJ6kxnr pAERVmHKovoeBRqj0O3dCDYlncoa7hAG/dbPwhTQlIoJVCdYR/aO7lNXcRffiWoRv6cB bBAh3M3Sm44G+8tC5PnA2/roelcfcHXaoiVqhasd0O7Vg7ZXrB3Xf99o72putc32dCv3 Iosg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775083844; x=1775688644; 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=4WXqe5A89OBzIJ/QyYnxIeRhUGLF9LhNMKeG57vtvfo=; b=nuSzjZj1I35VUs8R6gEEGIrZ+3ACWE7GsIxoFLyMQgLSn7pqwW+awhA9xZ4bvqJSHg QH4CQ4Y5lDIB1EGeOo3/hhply5n3qP2M88eU6q7HOxoAMXDFOXSBrT5zpuLXMnKqfUPc N0KuIjvisj9sitXdYfkcaIJGcH0Ywes/5dYDgSiyji21KyR4AaYJQ2q5Qp7Eh9hwWk6K sk6frAywCMAoxJ4QvZurOFPTkJxMbKom8l1JrBmTBTytP6VO38ESW3/Z9UaSlRzblsvM nPXpkJVKV/8jevcfEe1fncoLPG1KOkeuLI4IzEvp122qEvZQniK/Se+r/Qg/HsdK0Z30 TBgQ== X-Forwarded-Encrypted: i=1; AJvYcCWemScHFS7d5YoPoDlW1w2mXPW9TGdJy+4aeXJn17/y0EA0/26p0+TovJvnPjXEbdFlkBCdLTj+7wbaOw+B@lists.postgresql.org X-Gm-Message-State: AOJu0Yzi4wdRvYUTOQJs9YwGDTB8/XrC2wYVyc+RIo8BZeA4ijxQP5GB ZepkQ3U9tJKbvpSN4pn/j8Ciqr7FcJcPBiyk0wc5g/LXNntZ0P6+o1Z80SIHLCecqzvHqFUlNPO EaZ/e8P0Zsa5TjnoBi6l0vlKIezHLi8BSGuQnjfPqEsB+zuRAglcjWEs= X-Gm-Gg: ATEYQzzObYMqU83dBLY2evN3x1D7l9WysafaRzG3RUmBMX1t+sdlKU6v2TbZyIxbh54 CKVmdRQp9n3P/SUqhPO/9bW23xkfbLh7jR4eA4NhsXZgRa/Rl13M5AIwhOoUwQFcaD5bnJEXG5S pm1WUgT58gpC/InDrTpzpABRuFHE3FSzdx0nd87T5NHsQLOueN24alQJPtUAss5uG4HrYcIJRld QWbdunH1FObw8obuZj5UIJEQgKLv726AGkV1wY1vn9vRXFnhUcTnDK8erDa6HiltpN4yu7lqdUs TOhj/LcY7ryAFt22nlv3ztEHOvfJJPcMS8gZWrhG/GqSKzwpFP454JWuynYJhNqa X-Received: by 2002:a5d:5d08:0:b0:43c:fe7a:491e with SMTP id ffacd0b85a97d-43d150e8307mr10299641f8f.32.1775083843624; Wed, 01 Apr 2026 15:50:43 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Peter Geoghegan Date: Wed, 1 Apr 2026 18:50:15 -0400 X-Gm-Features: AQROBzAIbVSOmD3gUAFCrQJvsm9AjX92kza7dXg5wrvyWyjJFcpek0e0sFw8XaQ 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="000000000000f287f9064e6de93c" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000f287f9064e6de93c Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, Apr 1, 2026 at 11:51=E2=80=AFAM Peter Geoghegan wrote: > I plan on clarifying things in this area for v20. It will fully > embrace the idea that IndexFetchTableData is just the table AM > specific part of IndexScanDescData. This will allow me to move most of > the batch-related calls currently in indexam.c over to heapam/the > table AM. That will make it very clear that the table AM fully owns > the batch ring buffer (there'll continue to be indexam.c calls to do > things like take a mark, since that is implemented in a way that's > already table AM agnostic). Attached is v20, which does things this way. Now it's completely clear that the scan's batch ring buffer is fully controlled by the table AM. There are now only 2 remaining indexbatch.c functions that get called from indexam.c. Since these are both trivial, highly generic functions, restructuring things so that heapam would call these two seemed unnecessary. > One problem with the current design is that it still treats > IndexFetchTableData as not just the table AM piece of > IndexScanDescData. I now realize that it works that way purely so we > can avoid changing anything about index_fetch_tuple. But, as you say, > we really *should* do that anyway -- it shouldn't need its own > IndexFetchTableData (or its own IndexScanDescData), since it literally > doesn't have anything to do with index scans. v20 also repurposes and renames index_fetch_tuple (the new name is fetch_tid). This clarifies that it's a specialized function used only by callers that inherently need to pass their own TID (the 2 remaining constraint enforcement callers). These callers don't really perform an index scan at all (the TID might come from an index, but clearly _bt_check_unique isn't performing an index scan, by any reasonable definition). IndexFetchTableData is no longer used by fetch_tid or its callers. As discussed, this change makes it possible to pass an IndexScanDescData pointer (not a IndexFetchTableData pointer) through to heapam functions like heapam_index_fetch_reset and heapam_index_fetch_end (since doing so won't break index_fetch_tuple/fetch_tid, now that their dependency on IndexFetchTableData has been broken). One consequence of this refactoring is that we can no longer just call heapam_index_fetch_reset from indexam.c when restoring a mark -- that will reset the scan's batchringbuf, which isn't appropriate here (we usually don't change the batchringbuf at all, in the happy path we only need to override scanPos with markPos). indexam.c now calls a new heapam_index_fetch_restrpos function (through its table AM shim) instead -- heapam handles restoring the mark on its behalf. The addition of this new heapam_index_fetch_restrpos function seems strictly better to me. Restoring a mark in v19 meant resetting xs_vm_items back to 1 -- which is only appropriate during a true rescan. As in many other areas, the table AM can fully see what's going on (it has all the relevant context), which allows it to do exactly the right thing (layering that obscures useful information about what's really going on is generally something we want to avoid IMV). -- Peter Geoghegan --000000000000f287f9064e6de93c Content-Type: application/octet-stream; name="v20-0016-aio-Fix-pgaio_io_wait-for-staged-IOs-B.patch" Content-Disposition: attachment; filename="v20-0016-aio-Fix-pgaio_io_wait-for-staged-IOs-B.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mngmwp5f2 RnJvbSAzMWVlYjk0ZjMwMmMyZTE0MWMxY2FmYzYyZTUwNjQ0M2M1ODE2YzgwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFN1biwgMjIgTWFyIDIwMjYgMTU6MTI6NDEgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyMCAx Ni8xN10gYWlvOiBGaXggcGdhaW9faW9fd2FpdCgpIGZvciBzdGFnZWQgSU9zIChCKS4KClByZXZp b3VzbHksIHBnYWlvX2lvX3dhaXQoKSdzIGNhc2VzIGZvciBQR0FJT19IU19ERUZJTkVEIGFuZApQ R0FJT19IU19TVEFHRUQgZmVsbCB0aHJvdWdoIHRvIHdhaXRpbmcgZm9yIGNvbXBsZXRpb24uICBU aGUgb3duZXIgb25seQpwcm9taXNlcyB0byBhZHZhbmNlIGl0IHRvIFBHQUlPX0hTX1NVQk1JVFRF RC4gIFRoZSB3YWl0ZXIgbmVlZHMgdG8gYmUKcHJlcGFyZWQgdG8gY2FsbCAtPndhaXRfb25lKCkg aXRzZWxmIG9uY2UgdGhlIElPIGlzIHN1Ym1pdHRlZCBpbiBvcmRlcgp0byBndWFyYW50ZWUgcHJv Z3Jlc3MgYW5kIGF2b2lkIGRlYWRsb2NrcyBvbiBJTyBtZXRob2RzIHRoYXQgcHJvdmlkZQotPndh aXRfb25lKCkuCgpJbnRyb2R1Y2UgYSBuZXcgcGVyLWJhY2tlbmQgY29uZGl0aW9uIHZhcmlhYmxl IHN1Ym1pdF9jdiwgd29rZW4gYnkgYnkKcGdhaW9fc3VibWl0X3N0YWdlKCksIGFuZCB1c2UgaXQg dG8gd2FpdCBmb3IgdGhlIHN0YXRlIHRvIGFkdmFuY2UuICBUaGUKbmV3IGJyb2FkY2FzdCBkb2Vz bid0IHNlZW0gdG8gY2F1c2UgYW55IG1lYXN1cmFibGUgc2xvd2Rvd24sIHNvIGlkZWFzCmZvciBv cHRpbWl6aW5nIHRoZSBjb21tb24gbm8td2FpdGVycyBjYXNlIHdlcmUgYWJhbmRvbmVkIGZvciBu b3cuCgpJdCBtYXkgbm90IGJlIHBvc3NpYmxlIHRvIHJlYWNoIGFueSByZWFsIGRlYWRsb2NrIHdp dGggZXhpc3RpbmcgQUlPCnVzZXJzLCBidXQgdGhhdCBzaXR1YXRpb24gY291bGQgY2hhbmdlLiAg VGhlcmUncyBhbHNvIG5vIHJlYXNvbiB0aGUKd2FpdGVyIHNob3VsZG4ndCBiZWdpbiB0byB3YWl0 IHZpYSB0aGUgSU8gbWV0aG9kIGFzIHNvb24gYXMgcG9zc2libGUKZXZlbiB3aXRob3V0IGEgZGVh ZGxvY2suCgpQaWNrZWQgdXAgYnkgdGVzdGluZyBhIHByb3Bvc2VkIElPIG1ldGhvZCB0aGF0IGhh cyAtPndhaXRfb25lKCksIGxpa2UKaW9fbWV0aG9kPWlvX3VyaW5nLCBhbmQgY29kZSByZXZpZXcu CgpCYWNrcGF0Y2gtdGhyb3VnaDogMTgKUmV2aWV3ZWQtYnk6IEFuZHJlcyBGcmV1bmQgPGFuZHJl c0BhbmFyYXplbC5kZT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQSUyQmhVS0cl MkJtWllyU2RuaGstWHJCWU8xOEg4MjlLNzdTOWdNS1VzeWtPaVRKdHFCNDNnJTQwbWFpbC5nbWFp bC5jb20KLS0tCiBzcmMvaW5jbHVkZS9zdG9yYWdlL2Fpb19pbnRlcm5hbC5oICAgICAgICAgICAg fCAgNyArKysKIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL2Fpby5jICAgICAgICAgICAgICAgICB8 IDUwICsrKysrKysrKysrKysrKystLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL2Fpb19pbml0 LmMgICAgICAgICAgICB8ICAxICsKIC4uLi91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50X25hbWVz LnR4dCAgICAgICB8ICAxICsKIDQgZmlsZXMgY2hhbmdlZCwgNTEgaW5zZXJ0aW9ucygrKSwgOCBk ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2Fpb19pbnRlcm5h bC5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9haW9faW50ZXJuYWwuaAppbmRleCAzM2UxZTJkYzAu LmRlZWM4M2JkMCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9haW9faW50ZXJuYWwu aAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2Fpb19pbnRlcm5hbC5oCkBAIC0yMTQsNiArMjE0 LDEzIEBAIHR5cGVkZWYgc3RydWN0IFBnQWlvQmFja2VuZAogCXVpbnQxNgkJbnVtX3N0YWdlZF9p b3M7CiAJUGdBaW9IYW5kbGUgKnN0YWdlZF9pb3NbUEdBSU9fU1VCTUlUX0JBVENIX1NJWkVdOwog CisJLyoKKwkgKiBPdGhlciBiYWNrZW5kcyBzb21ldGltZXMgbmVlZCB0byB3YWl0IGZvciB0aGUg b3duaW5nIGJhY2tlbmQgdG8gc3VibWl0LgorCSAqIFRoZSBwZXItSU8gQ1Ygd291bGQgd29yayBm b3IgdGhhdCBwdXJwb3NlLCBidXQgYSBwZXItYmFja2VuZCBDViBhbGxvd3MKKwkgKiBmb3IganVz dCBvbmUgYnJvYWRjYXN0IHBlciBzdWJtaXR0ZWQgYmF0Y2guCisJICovCisJQ29uZGl0aW9uVmFy aWFibGUgc3VibWl0X2N2OworCiAJLyoKIAkgKiBMaXN0IG9mIGluLWZsaWdodCBJT3MuIEFsc28g Y29udGFpbnMgSU9zIHRoYXQgYXJlbid0IHN0cmljdGx5IHNwZWFraW5nCiAJICogaW4tZmxpZ2h0 IGFueW1vcmUsIGJ1dCBoYXZlIGJlZW4gd2FpdGVkLWZvciBhbmQgY29tcGxldGVkIGJ5IGFub3Ro ZXIKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL2Fpby5jIGIvc3JjL2JhY2tl bmQvc3RvcmFnZS9haW8vYWlvLmMKaW5kZXggMWE5NmE4YTlhLi5mMGI0YTY1MjIgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL2Fpby5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3Jh Z2UvYWlvL2Fpby5jCkBAIC01NzEsNiArNTcxLDE2IEBAIHBnYWlvX2lvX3dhc19yZWN5Y2xlZChQ Z0Fpb0hhbmRsZSAqaW9oLCB1aW50NjQgcmVmX2dlbmVyYXRpb24sIFBnQWlvSGFuZGxlU3RhdGUK IAlyZXR1cm4gaW9oLT5nZW5lcmF0aW9uICE9IHJlZl9nZW5lcmF0aW9uOwogfQogCisvKgorICog V2hldGhlciB3ZSBuZWVkIHRvIHdhaXQgdmlhIHRoZSBJTyBtZXRob2QuIERvbid0IGNoZWNrIHZp YSB0aGUgSU8gbWV0aG9kIGlmCisgKiB0aGUgaXNzdWluZyBiYWNrZW5kIGlzIGV4ZWN1dGluZyB0 aGUgSU8gc3luY2hyb25vdXNseS4KKyAqLworc3RhdGljIGJvb2wKK3BnYWlvX2lvX25lZWRzX3dh aXRfb25lKFBnQWlvSGFuZGxlICppb2gpCit7CisJcmV0dXJuIHBnYWlvX21ldGhvZF9vcHMtPndh aXRfb25lICYmICEoaW9oLT5mbGFncyAmIFBHQUlPX0hGX1NZTkNIUk9OT1VTKTsKK30KKwogLyoK ICAqIFdhaXQgZm9yIElPIHRvIGNvbXBsZXRlLiBFeHRlcm5hbCBjb2RlIHNob3VsZCBuZXZlciB1 c2UgdGhpcywgb3V0c2lkZSBvZgogICogdGhlIEFJTyBzdWJzeXN0ZW0gd2FpdHMgYXJlIG9ubHkg YWxsb3dlZCB2aWEgcGdhaW9fd3JlZl93YWl0KCkuCkBAIC02MTAsMjMgKzYyMCwzOCBAQCBwZ2Fp b19pb193YWl0KFBnQWlvSGFuZGxlICppb2gsIHVpbnQ2NCByZWZfZ2VuZXJhdGlvbikKIAkJCQll bG9nKEVSUk9SLCAiSU8gaW4gd3Jvbmcgc3RhdGU6ICVkIiwgc3RhdGUpOwogCQkJCWJyZWFrOwog Ci0JCQljYXNlIFBHQUlPX0hTX1NVQk1JVFRFRDoKKwkJCWNhc2UgUEdBSU9fSFNfREVGSU5FRDoK KwkJCWNhc2UgUEdBSU9fSFNfU1RBR0VEOgogCiAJCQkJLyoKLQkJCQkgKiBJZiB3ZSBuZWVkIHRv IHdhaXQgdmlhIHRoZSBJTyBtZXRob2QsIGRvIHNvIG5vdy4gRG9uJ3QKLQkJCQkgKiBjaGVjayB2 aWEgdGhlIElPIG1ldGhvZCBpZiB0aGUgaXNzdWluZyBiYWNrZW5kIGlzIGV4ZWN1dGluZwotCQkJ CSAqIHRoZSBJTyBzeW5jaHJvbm91c2x5LgorCQkJCSAqIFRoZSBvd25lciBoYXNuJ3Qgc3VibWl0 dGVkIHRoZSBJTyB5ZXQuIElmIHdlIG5lZWQgdG8gd2FpdAorCQkJCSAqIHZpYSB0aGUgSU8gbWV0 aG9kLCB3YWl0IGZvciBzdWJtaXNzaW9uLCBnaXZpbmcgdGhpcyBiYWNrZW5kCisJCQkJICogdGhl IGNoYW5jZSB0byBjYWxsIC0+d2FpdF9vbmUoKS4KIAkJCQkgKi8KLQkJCQlpZiAocGdhaW9fbWV0 aG9kX29wcy0+d2FpdF9vbmUgJiYgIShpb2gtPmZsYWdzICYgUEdBSU9fSEZfU1lOQ0hST05PVVMp KQorCQkJCWlmIChwZ2Fpb19pb19uZWVkc193YWl0X29uZShpb2gpKQorCQkJCXsKKwkJCQkJUGdB aW9CYWNrZW5kICpiYWNrZW5kID0gJnBnYWlvX2N0bC0+YmFja2VuZF9zdGF0ZVtpb2gtPm93bmVy X3Byb2Nub107CisKKwkJCQkJQ29uZGl0aW9uVmFyaWFibGVQcmVwYXJlVG9TbGVlcCgmYmFja2Vu ZC0+c3VibWl0X2N2KTsKKwkJCQkJd2hpbGUgKCFwZ2Fpb19pb193YXNfcmVjeWNsZWQoaW9oLCBy ZWZfZ2VuZXJhdGlvbiwgJnN0YXRlKSAmJgorCQkJCQkJICAgKHN0YXRlID09IFBHQUlPX0hTX0RF RklORUQgfHwKKwkJCQkJCQlzdGF0ZSA9PSBQR0FJT19IU19TVEFHRUQpKQorCQkJCQkJQ29uZGl0 aW9uVmFyaWFibGVTbGVlcCgmYmFja2VuZC0+c3VibWl0X2N2LCBXQUlUX0VWRU5UX0FJT19JT19T VUJNSVQpOworCQkJCQlDb25kaXRpb25WYXJpYWJsZUNhbmNlbFNsZWVwKCk7CisJCQkJCWNvbnRp bnVlOworCQkJCX0KKwkJCQlwZ19mYWxsdGhyb3VnaDsKKworCQkJY2FzZSBQR0FJT19IU19TVUJN SVRURUQ6CisKKwkJCQkvKiBJZiB3ZSBuZWVkIHRvIHdhaXQgdmlhIHRoZSBJTyBtZXRob2QsIGRv IHNvIG5vdy4gKi8KKwkJCQlpZiAocGdhaW9faW9fbmVlZHNfd2FpdF9vbmUoaW9oKSkKIAkJCQl7 CiAJCQkJCXBnYWlvX21ldGhvZF9vcHMtPndhaXRfb25lKGlvaCwgcmVmX2dlbmVyYXRpb24pOwog CQkJCQljb250aW51ZTsKIAkJCQl9CiAJCQkJcGdfZmFsbHRocm91Z2g7CiAKLQkJCQkvKiB3YWl0 aW5nIGZvciBvd25lciB0byBzdWJtaXQgKi8KLQkJCWNhc2UgUEdBSU9fSFNfREVGSU5FRDoKLQkJ CWNhc2UgUEdBSU9fSFNfU1RBR0VEOgogCQkJCS8qIHdhaXRpbmcgZm9yIHJlYXBlciB0byBjb21w bGV0ZSAqLwogCQkJCS8qIGZhbGx0aHJvdWdoICovCiAJCQljYXNlIFBHQUlPX0hTX0NPTVBMRVRF RF9JTzoKQEAgLTExNzksNiArMTIwNCwxNSBAQCBwZ2Fpb19zdWJtaXRfc3RhZ2VkKHZvaWQpCiAK IAlwZ2Fpb19teV9iYWNrZW5kLT5udW1fc3RhZ2VkX2lvcyA9IDA7CiAKKwkvKgorCSAqIFdha2Ug YW55IGJhY2tlbmQgdGhhdCBzdGFydGVkIHdhaXRpbmcgZm9yIGFueSBvZiB0aGVzZSBJT3MgYmVm b3JlCisJICogc3VibWlzc2lvbiwgaWYgaXQgaXMgbmVjZXNzYXJ5IHRvIGNhbGwgLT53YWl0X29u ZSgpIHRvIGd1YXJhbnRlZQorCSAqIHByb2dyZXNzIHdpdGggdGhlIGNvbmZpZ3VyZWQgSU8gbWV0 aG9kLiAgT24gaXRzIHNpZGUsIHBnYWlvX2lvX3dhaXQoKQorCSAqIG9ubHkgd2FpdHMgZm9yIHN1 Ym1pdF9jdiBvbiBJTyBtZXRob2RzIG5lZWRpbmcgdGhhdC4KKwkgKi8KKwlpZiAocGdhaW9fbWV0 aG9kX29wcy0+d2FpdF9vbmUpCisJCUNvbmRpdGlvblZhcmlhYmxlQnJvYWRjYXN0KCZwZ2Fpb19t eV9iYWNrZW5kLT5zdWJtaXRfY3YpOworCiAJcGdhaW9fZGVidWcoREVCVUc0LAogCQkJCSJhaW86 IHN1Ym1pdHRlZCAlZCBJT3MiLAogCQkJCXRvdGFsX3N1Ym1pdHRlZCk7CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9zdG9yYWdlL2Fpby9haW9faW5pdC5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9h aW8vYWlvX2luaXQuYwppbmRleCBkM2M2OGQ4YjAuLmMyMDk1ZWY3NyAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvc3RvcmFnZS9haW8vYWlvX2luaXQuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdl L2Fpby9haW9faW5pdC5jCkBAIC0xODQsNiArMTg0LDcgQEAgQWlvU2htZW1Jbml0KHZvaWQpCiAK IAkJZGNsaXN0X2luaXQoJmJzLT5pZGxlX2lvcyk7CiAJCW1lbXNldChicy0+c3RhZ2VkX2lvcywg MCwgc2l6ZW9mKFBnQWlvSGFuZGxlICopICogUEdBSU9fU1VCTUlUX0JBVENIX1NJWkUpOworCQlD b25kaXRpb25WYXJpYWJsZUluaXQoJmJzLT5zdWJtaXRfY3YpOwogCQlkY2xpc3RfaW5pdCgmYnMt PmluX2ZsaWdodF9pb3MpOwogCiAJCS8qIGluaXRpYWxpemUgcGVyLWJhY2tlbmQgSU9zICovCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50X25hbWVzLnR4 dCBiL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnRfbmFtZXMudHh0CmluZGV4 IDZiZTgwZDJkYS4uOTQ3MTM1YTRiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hY3Rp dml0eS93YWl0X2V2ZW50X25hbWVzLnR4dAorKysgYi9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0 eS93YWl0X2V2ZW50X25hbWVzLnR4dApAQCAtMTk3LDYgKzE5Nyw3IEBAIEFCSV9jb21wYXRpYmls aXR5OgogU2VjdGlvbjogQ2xhc3NOYW1lIC0gV2FpdEV2ZW50SU8KIAogQUlPX0lPX0NPTVBMRVRJ T04JIldhaXRpbmcgZm9yIGFub3RoZXIgcHJvY2VzcyB0byBjb21wbGV0ZSBJTy4iCitBSU9fSU9f U1VCTUlUCSJXYWl0aW5nIGZvciBhbm90aGVyIHByb2Nlc3MgdG8gc3VibWl0IElPLiIKIEFJT19J T19VUklOR19TVUJNSVQJIldhaXRpbmcgZm9yIElPIHN1Ym1pc3Npb24gdmlhIGlvX3VyaW5nLiIK IEFJT19JT19VUklOR19FWEVDVVRJT04JIldhaXRpbmcgZm9yIElPIGV4ZWN1dGlvbiB2aWEgaW9f dXJpbmcuIgogQkFTRUJBQ0tVUF9SRUFECSJXYWl0aW5nIGZvciBiYXNlIGJhY2t1cCB0byByZWFk IGZyb20gYSBmaWxlLiIKLS0gCjIuNTMuMAoK --000000000000f287f9064e6de93c Content-Type: application/octet-stream; name="v20-0015-WIP-read-stream-Split-decision-about-look-ahead-.patch" Content-Disposition: attachment; filename="v20-0015-WIP-read-stream-Split-decision-about-look-ahead-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mngmwp5i3 RnJvbSBiMGE4MDdkMjU0MzVlYmU3MmExMmFiNTQzYjViNzI1N2Q4NjdmMmFkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IE1vbiwgMzAgTWFyIDIwMjYgMTI6MjU6MDcgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyMCAx NS8xN10gV0lQOiByZWFkIHN0cmVhbTogU3BsaXQgZGVjaXNpb24gYWJvdXQgbG9vayBhaGVhZAog Zm9yIEFJTyBhbmQgY29tYmluaW5nCgpQcmV2aW91cyBjb21taXRzIGNhdXNlZCBhIHJlZ3Jlc3Np b24gZHVlIHRvIHRoZSB0aGlzIGNvbmZsYXRpb24uIFRoaXMgaXMgYQpmaXJzdCBhdHRlbXB0IGF0 IGZpeGluZyB0aGUgcHJvYmxlbS4gIE5lZWRzIHNpZ25pZmljYW50IHJlb3JkZXJpbmcgYW5kCnNw bGl0dGluZyBpZiBpdCB3b3JrcyBvdXQuCgpBdXRob3I6ClJldmlld2VkLWJ5OgpEaXNjdXNzaW9u OiBodHRwczovL3Bvc3Rnci5lcy9tLwpCYWNrcGF0Y2g6Ci0tLQogc3JjL2JhY2tlbmQvc3RvcmFn ZS9haW8vcmVhZF9zdHJlYW0uYyB8IDI0MiArKysrKysrKysrKysrKysrKysrKystLS0tLQogMSBm aWxlIGNoYW5nZWQsIDE5NSBpbnNlcnRpb25zKCspLCA0NyBkZWxldGlvbnMoLSkKCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9yZWFkX3N0cmVhbS5jIGIvc3JjL2JhY2tlbmQv c3RvcmFnZS9haW8vcmVhZF9zdHJlYW0uYwppbmRleCAxNDRiMzYxM2MuLjFjMzc1ZWRhZCAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vcmVhZF9zdHJlYW0uYworKysgYi9zcmMv YmFja2VuZC9zdG9yYWdlL2Fpby9yZWFkX3N0cmVhbS5jCkBAIC05OCwxMCArOTgsMTQgQEAgc3Ry dWN0IFJlYWRTdHJlYW0KIAlpbnQxNgkJbWF4X3Bpbm5lZF9idWZmZXJzOwogCWludDE2CQlmb3J3 YXJkZWRfYnVmZmVyczsKIAlpbnQxNgkJcGlubmVkX2J1ZmZlcnM7Ci0JaW50MTYJCWRpc3RhbmNl OworCS8qIGxpbWl0IG9mIGhvdyBmYXIgdG8gcmVhZCBhaGVhZCBmb3IgSU8gY29tYmluaW5nICov CisJaW50MTYJCWNvbWJpbmVfZGlzdGFuY2U7CisJLyogbGltaXQgb2YgaG93IGZhciB0byByZWFk IGFoZWFkIGZvciBzdGFydGluZyBJTyBlYXJseSAqLworCWludDE2CQlyZWFkYWhlYWRfZGlzdGFu Y2U7CiAJdWludDE2CQlkaXN0YW5jZV9kZWNheV9ob2xkb2ZmOwogCWludDE2CQlpbml0aWFsaXpl ZF9idWZmZXJzOwotCWludDE2CQlyZXN1bWVfZGlzdGFuY2U7CisJaW50MTYJCXJlc3VtZV9yZWFk YWhlYWRfZGlzdGFuY2U7CisJaW50MTYJCXJlc3VtZV9jb21iaW5lX2Rpc3RhbmNlOwogCWludAkJ CXJlYWRfYnVmZmVyc19mbGFnczsKIAlib29sCQlzeW5jX21vZGU7CQkvKiB1c2luZyBpb19tZXRo b2Q9c3luYyAqLwogCWJvb2wJCWJhdGNoX21vZGU7CQkvKiBSRUFEX1NUUkVBTV9VU0VfQkFUQ0hJ TkcgKi8KQEAgLTMzMiw4ICszMzYsOCBAQCByZWFkX3N0cmVhbV9zdGFydF9wZW5kaW5nX3JlYWQo UmVhZFN0cmVhbSAqc3RyZWFtKQogCiAJCS8qIFNocmluayBkaXN0YW5jZTogbm8gbW9yZSBsb29r LWFoZWFkIHVudGlsIGJ1ZmZlcnMgYXJlIHJlbGVhc2VkLiAqLwogCQluZXdfZGlzdGFuY2UgPSBz dHJlYW0tPnBpbm5lZF9idWZmZXJzICsgYnVmZmVyX2xpbWl0OwotCQlpZiAoc3RyZWFtLT5kaXN0 YW5jZSA+IG5ld19kaXN0YW5jZSkKLQkJCXN0cmVhbS0+ZGlzdGFuY2UgPSBuZXdfZGlzdGFuY2U7 CisJCWlmIChzdHJlYW0tPnJlYWRhaGVhZF9kaXN0YW5jZSA+IG5ld19kaXN0YW5jZSkKKwkJCXN0 cmVhbS0+cmVhZGFoZWFkX2Rpc3RhbmNlID0gbmV3X2Rpc3RhbmNlOwogCiAJCS8qIFVubGVzcyB3 ZSBoYXZlIG5vdGhpbmcgdG8gZ2l2ZSB0aGUgY29uc3VtZXIsIHN0b3AgaGVyZS4gKi8KIAkJaWYg KHN0cmVhbS0+cGlubmVkX2J1ZmZlcnMgPiAwKQpAQCAtMzc0LDEyICszNzgsMjMgQEAgcmVhZF9z dHJlYW1fc3RhcnRfcGVuZGluZ19yZWFkKFJlYWRTdHJlYW0gKnN0cmVhbSkKIAkJICogcGVyZm9y bSBJTyBhc3luY2hyb25vdXNseSB3aGVuIHN0YXJ0aW5nIG91dCB3aXRoIGEgc21hbGwgbG9vay1h aGVhZAogCQkgKiBkaXN0YW5jZS4KIAkJICovCi0JCWlmIChzdHJlYW0tPmRpc3RhbmNlID4gMSAm JiBzdHJlYW0tPmlvc19pbl9wcm9ncmVzcyA9PSAwKQorCQlpZiAoc3RyZWFtLT5pb3NfaW5fcHJv Z3Jlc3MgPT0gMCkKIAkJewotCQkJaWYgKHN0cmVhbS0+ZGlzdGFuY2VfZGVjYXlfaG9sZG9mZiA9 PSAwKQotCQkJCXN0cmVhbS0+ZGlzdGFuY2UtLTsKLQkJCWVsc2UKKwkJCWlmIChzdHJlYW0tPmRp c3RhbmNlX2RlY2F5X2hvbGRvZmYgPiAwKQogCQkJCXN0cmVhbS0+ZGlzdGFuY2VfZGVjYXlfaG9s ZG9mZi0tOworCQkJZWxzZQorCQkJeworCQkJCWlmIChzdHJlYW0tPnJlYWRhaGVhZF9kaXN0YW5j ZSA+IDEpCisJCQkJCXN0cmVhbS0+cmVhZGFoZWFkX2Rpc3RhbmNlLS07CisKKwkJCQkvKgorCQkJ CSAqIFhYWDogU2hvdWxkIHdlIGFjdHVhbGx5IHJlZHVjZSB0aGlzIGF0IGFueSB0aW1lIG90aGVy IHRoYW4KKwkJCQkgKiBhIHJlc2V0PyBGb3Igbm93IHdlIGhhdmUgdG8sIGFzIHRoaXMgaXMgYWxz byBhIGNvbmRpdGlvbgorCQkJCSAqIGZvciByZS1lbmFibGluZyBmYXN0X3BhdGguCisJCQkJICov CisJCQkJaWYgKHN0cmVhbS0+Y29tYmluZV9kaXN0YW5jZSA+IDEpCisJCQkJCXN0cmVhbS0+Y29t YmluZV9kaXN0YW5jZS0tOworCQkJfQogCQl9CiAJfQogCWVsc2UKQEAgLTQ0MCw2ICs0NTUsMTAx IEBAIHJlYWRfc3RyZWFtX3N0YXJ0X3BlbmRpbmdfcmVhZChSZWFkU3RyZWFtICpzdHJlYW0pCiAJ cmV0dXJuIHRydWU7CiB9CiAKKy8qCisgKiBTaG91bGQgd2UgY29udGludWUgdG8gcGVyZm9ybSBs b29rIGFoZWFkPyAgVGhlIGxvb2sgYWhlYWQgbWF5IGFsbG93IHVzIHRvCisgKiBtYWtlIHRoZSBw ZW5kaW5nIElPIGxhcmdlciB2aWEgSU8gY29tYmluaW5nIG9yIHRvIGlzc3VlIG1vcmUgcmVhZCBh aGVhZC4KKyAqLworc3RhdGljIGJvb2wKK3JlYWRfc3RyZWFtX3Nob3VsZF9sb29rX2FoZWFkKFJl YWRTdHJlYW0gKnN0cmVhbSkKK3sKKwkvKiBuZXZlciBzdGFydCBtb3JlIElPcyB0aGFuIG91ciBj YXAgKi8KKwlpZiAoc3RyZWFtLT5pb3NfaW5fcHJvZ3Jlc3MgPj0gc3RyZWFtLT5tYXhfaW9zKQor CQlyZXR1cm4gZmFsc2U7CisKKwkvKiBJZiB0aGUgY2FsbGJhY2sgaGFzIHNpZ25hbGVkIGVuZC1v Zi1zdHJlYW0sIHdlJ3JlIGRvbmUgKi8KKwlpZiAoc3RyZWFtLT5yZWFkYWhlYWRfZGlzdGFuY2Ug PD0gMCkKKwkJcmV0dXJuIGZhbHNlOworCisJLyogbmV2ZXIgcGluIG1vcmUgYnVmZmVycyB0aGFu IGFsbG93ZWQgKi8KKwlpZiAoc3RyZWFtLT5waW5uZWRfYnVmZmVycyArIHN0cmVhbS0+cGVuZGlu Z19yZWFkX25ibG9ja3MgPj0gc3RyZWFtLT5tYXhfcGlubmVkX2J1ZmZlcnMpCisJCXJldHVybiBm YWxzZTsKKworCS8qCisJICogQWxsb3cgbG9va2luZyBmdXJ0aGVyIGFoZWFkIGlmIHdlIGhhdmUg YW4gdGhlIHByb2Nlc3Mgb2YgYnVpbGRpbmcgYQorCSAqIGxhcmdlciBJTywgdGhlIElPIGlzIG5v dCB5ZXQgYmlnIGVub3VnaCBhbmQgd2UgZG9uJ3QgeWV0IGhhdmUgSU8gaW4KKwkgKiBmbGlnaHQu ICBOb3RlIHRoYXQgdGhpcyBpcyBhbGxvd2VkIGV2ZW4gaWYgd2UgYXJlIHJlYWNoaW5nIHRoZQor CSAqIHJlYWRhaGVhZCBsaW1pdCAoYnV0IG5vdCB0aGUgYnVmZmVyIHBpbiBsaW1pdCkuCisJICoK KwkgKiBUaGlzIGlzIGltcG9ydGFudCBmb3IgY2FzZXMgd2hlcmUgZWl0aGVyIGVmZmVjdGl2ZV9p b19jb25jdXJyZW5jeSBpcworCSAqIGxvdyBvciB3ZSBuZXZlciBuZWVkIHRvIHdhaXQgZm9yIElP IGFuZCB0aHVzIGFyZSBub3QgaW5jcmVhc2luZyB0aGUKKwkgKiBkaXN0YW5jZS4gV2l0aG91dCB0 aGlzIHdlIHdvdWxkIGVuZCB1cCB3aXRoIGxvdHMgb2Ygc21hbGwgSU9zLgorCSAqLworCWlmIChz dHJlYW0tPnBlbmRpbmdfcmVhZF9uYmxvY2tzID4gMCAmJgorCQlzdHJlYW0tPnBpbm5lZF9idWZm ZXJzID09IDAgJiYKKwkJc3RyZWFtLT5wZW5kaW5nX3JlYWRfbmJsb2NrcyA8IHN0cmVhbS0+Y29t YmluZV9kaXN0YW5jZSkKKwkJcmV0dXJuIHRydWU7CisKKwkvKgorCSAqIERvbid0IHN0YXJ0IG1v cmUgcmVhZGFoZWFkIGlmIHRoYXQnZCBwdXQgdXMgb3ZlciB0aGUgbGltaXQgZm9yIGRvaW5nCisJ ICogcmVhZGFoZWFkLgorCSAqLworCWlmIChzdHJlYW0tPnBpbm5lZF9idWZmZXJzICsgc3RyZWFt LT5wZW5kaW5nX3JlYWRfbmJsb2NrcyA+PSBzdHJlYW0tPnJlYWRhaGVhZF9kaXN0YW5jZSkKKwkJ cmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHRydWU7Cit9CisKKworLyoKKyAqIFdlIGRvbid0IHN0 YXJ0IHRoZSBwZW5kaW5nIHJlYWQganVzdCBiZWNhdXNlIHdlJ3ZlIGhpdCB0aGUgZGlzdGFuY2Ug bGltaXQsCisgKiBwcmVmZXJyaW5nIHRvIGdpdmUgaXQgYW5vdGhlciBjaGFuY2UgdG8gZ3JvdyB0 byBmdWxsIGlvX2NvbWJpbmVfbGltaXQgc2l6ZQorICogb25jZSBtb3JlIGJ1ZmZlcnMgaGF2ZSBi ZWVuIGNvbnN1bWVkLiAgQnV0IHRoaXMgaXMgbm90IGRlc2lyYWJsZSBpbiBhbGwKKyAqIHNpdHVh dGlvbnMgLSBzZWUgYmVsb3cuCisgKi8KK3N0YXRpYyBib29sCityZWFkX3N0cmVhbV9zaG91bGRf aXNzdWVfbm93KFJlYWRTdHJlYW0gKnN0cmVhbSkKK3sKKwlpbnQxNgkJcGVuZGluZ19yZWFkX25i bG9ja3MgPSBzdHJlYW0tPnBlbmRpbmdfcmVhZF9uYmxvY2tzOworCisJLyogbm8gSU8gdG8gaXNz dWUgKi8KKwlpZiAocGVuZGluZ19yZWFkX25ibG9ja3MgPT0gMCkKKwkJcmV0dXJuIGZhbHNlOwor CisJLyogbmV2ZXIgc3RhcnQgbW9yZSBJT3MgdGhhbiBvdXIgY2FwICovCisJaWYgKHN0cmVhbS0+ aW9zX2luX3Byb2dyZXNzID49IHN0cmVhbS0+bWF4X2lvcykKKwkJcmV0dXJuIGZhbHNlOworCisJ LyoKKwkgKiBJZiB0aGUgY2FsbGJhY2sgaGFzIHNpZ25hbGVkIGVuZC1vZi1zdHJlYW0sIHN0YXJ0 IHRoZSByZWFkCisJICogaW1tZWRpYXRlbHkuIFRoZXJlJ3Mgbm8gZGVmZXJyaW5nIGl0IGZvciBs YXRlci4KKwkgKi8KKwlpZiAoc3RyZWFtLT5yZWFkYWhlYWRfZGlzdGFuY2UgPD0gMCkKKwkJcmV0 dXJuIHRydWU7CisKKwkvKgorCSAqIElmIHdlJ3ZlIGFscmVhZHkgcmVhY2hlZCBpb19jb21iaW5l X2xpbWl0LCB0aGVyZSdzIG5vIGNoYW5jZSBvZiBncm93aW5nCisJICogdGhlIHJlYWQgZnVydGhl ci4KKwkgKi8KKwlpZiAocGVuZGluZ19yZWFkX25ibG9ja3MgPj0gc3RyZWFtLT5pb19jb21iaW5l X2xpbWl0KQorCQlyZXR1cm4gdHJ1ZTsKKworCS8qIHNhbWUgaWYgY2FwcGVkIG5vdCBieSBpb19j b21iaW5lX2xpbWl0IGJ1dCBjb21iaW5lX2Rpc3RhbmNlICovCisJaWYgKHN0cmVhbS0+Y29tYmlu ZV9kaXN0YW5jZSA+IDAgJiYKKwkJcGVuZGluZ19yZWFkX25ibG9ja3MgPj0gc3RyZWFtLT5jb21i aW5lX2Rpc3RhbmNlKQorCQlyZXR1cm4gdHJ1ZTsKKworCS8qCisJICogSWYgd2UgY3VycmVudGx5 IGhhdmUgbm8gcmVhZHMgaW4gZmxpZ2h0IG9yIHByZXBhcmVkLCBpc3N1ZSB0aGUgSU8gb25jZQor CSAqIHdlIHN0b3BwZWQgbG9va2luZyBhaGVhZC4gVGhpcyBlbnN1cmVzIHRoZXJlJ3MgYWx3YXlz IGF0IGxlYXN0IG9uZSBJTworCSAqIHByZXBhcmVkLgorCSAqLworCWlmIChzdHJlYW0tPnBpbm5l ZF9idWZmZXJzID09IDAgJiYKKwkJIXJlYWRfc3RyZWFtX3Nob3VsZF9sb29rX2FoZWFkKHN0cmVh bSkpCisJCXJldHVybiB0cnVlOworCisJcmV0dXJuIGZhbHNlOworfQorCiBzdGF0aWMgdm9pZAog cmVhZF9zdHJlYW1fbG9va19haGVhZChSZWFkU3RyZWFtICpzdHJlYW0pCiB7CkBAIC00NTIsMTQg KzU2MiwxMyBAQCByZWFkX3N0cmVhbV9sb29rX2FoZWFkKFJlYWRTdHJlYW0gKnN0cmVhbSkKIAlp ZiAoc3RyZWFtLT5iYXRjaF9tb2RlKQogCQlwZ2Fpb19lbnRlcl9iYXRjaG1vZGUoKTsKIAotCXdo aWxlIChzdHJlYW0tPmlvc19pbl9wcm9ncmVzcyA8IHN0cmVhbS0+bWF4X2lvcyAmJgotCQkgICBz dHJlYW0tPnBpbm5lZF9idWZmZXJzICsgc3RyZWFtLT5wZW5kaW5nX3JlYWRfbmJsb2NrcyA8IHN0 cmVhbS0+ZGlzdGFuY2UpCisJd2hpbGUgKHJlYWRfc3RyZWFtX3Nob3VsZF9sb29rX2FoZWFkKHN0 cmVhbSkpCiAJewogCQlCbG9ja051bWJlciBibG9ja251bTsKIAkJaW50MTYJCWJ1ZmZlcl9pbmRl eDsKIAkJdm9pZAkgICAqcGVyX2J1ZmZlcl9kYXRhOwogCi0JCWlmIChzdHJlYW0tPnBlbmRpbmdf cmVhZF9uYmxvY2tzID09IHN0cmVhbS0+aW9fY29tYmluZV9saW1pdCkKKwkJaWYgKHJlYWRfc3Ry ZWFtX3Nob3VsZF9pc3N1ZV9ub3coc3RyZWFtKSkKIAkJewogCQkJcmVhZF9zdHJlYW1fc3RhcnRf cGVuZGluZ19yZWFkKHN0cmVhbSk7CiAJCQljb250aW51ZTsKQEAgLTQ3OSw3ICs1ODgsOCBAQCBy ZWFkX3N0cmVhbV9sb29rX2FoZWFkKFJlYWRTdHJlYW0gKnN0cmVhbSkKIAkJaWYgKGJsb2NrbnVt ID09IEludmFsaWRCbG9ja051bWJlcikKIAkJewogCQkJLyogRW5kIG9mIHN0cmVhbS4gKi8KLQkJ CXN0cmVhbS0+ZGlzdGFuY2UgPSAwOworCQkJc3RyZWFtLT5yZWFkYWhlYWRfZGlzdGFuY2UgPSAw OworCQkJc3RyZWFtLT5jb21iaW5lX2Rpc3RhbmNlID0gMDsKIAkJCWJyZWFrOwogCQl9CiAKQEAg LTUxMSwyMSArNjIxLDEzIEBAIHJlYWRfc3RyZWFtX2xvb2tfYWhlYWQoUmVhZFN0cmVhbSAqc3Ry ZWFtKQogCX0KIAogCS8qCi0JICogV2UgZG9uJ3Qgc3RhcnQgdGhlIHBlbmRpbmcgcmVhZCBqdXN0 IGJlY2F1c2Ugd2UndmUgaGl0IHRoZSBkaXN0YW5jZQotCSAqIGxpbWl0LCBwcmVmZXJyaW5nIHRv IGdpdmUgaXQgYW5vdGhlciBjaGFuY2UgdG8gZ3JvdyB0byBmdWxsCi0JICogaW9fY29tYmluZV9s aW1pdCBzaXplIG9uY2UgbW9yZSBidWZmZXJzIGhhdmUgYmVlbiBjb25zdW1lZC4gIEhvd2V2ZXIs Ci0JICogaWYgd2UndmUgYWxyZWFkeSByZWFjaGVkIGlvX2NvbWJpbmVfbGltaXQsIG9yIHdlJ3Zl IHJlYWNoZWQgdGhlCi0JICogZGlzdGFuY2UgbGltaXQgYW5kIHRoZXJlIGlzbid0IGFueXRoaW5n IHBpbm5lZCB5ZXQsIG9yIHRoZSBjYWxsYmFjayBoYXMKLQkgKiBzaWduYWxlZCBlbmQtb2Ytc3Ry ZWFtLCB3ZSBzdGFydCB0aGUgcmVhZCBpbW1lZGlhdGVseS4gIE5vdGUgdGhhdCB0aGUKLQkgKiBw ZW5kaW5nIHJlYWQgY2FuIGV4Y2VlZCB0aGUgZGlzdGFuY2UgZ29hbCwgaWYgdGhlIGxhdHRlciB3 YXMgcmVkdWNlZAotCSAqIGFmdGVyIGhpdHRpbmcgdGhlIHBlci1iYWNrZW5kIGJ1ZmZlciBsaW1p dC4KKwkgKiBDaGVjayBpZiB0aGUgcGVuZGluZyByZWFkIHNob3VsZCBiZSBpc3N1ZWQgbm93LCBv ciBpZiB3ZSBzaG91bGQgZ2l2ZSBpdAorCSAqIGFub3RoZXIgY2hhbmNlIHRvIGdyb3cgdG8gdGhl IGZ1bGwgc2l6ZS4KKwkgKgorCSAqIE5vdGUgdGhhdCB0aGUgcGVuZGluZyByZWFkIGNhbiBleGNl ZWQgdGhlIGRpc3RhbmNlIGdvYWwsIGlmIHRoZSBsYXR0ZXIKKwkgKiB3YXMgcmVkdWNlZCBhZnRl ciBoaXR0aW5nIHRoZSBwZXItYmFja2VuZCBidWZmZXIgbGltaXQuCiAJICovCi0JaWYgKHN0cmVh bS0+cGVuZGluZ19yZWFkX25ibG9ja3MgPiAwICYmCi0JCShzdHJlYW0tPnBlbmRpbmdfcmVhZF9u YmxvY2tzID09IHN0cmVhbS0+aW9fY29tYmluZV9saW1pdCB8fAotCQkgKHN0cmVhbS0+cGVuZGlu Z19yZWFkX25ibG9ja3MgPj0gc3RyZWFtLT5kaXN0YW5jZSAmJgotCQkgIHN0cmVhbS0+cGlubmVk X2J1ZmZlcnMgPT0gMCkgfHwKLQkJIHN0cmVhbS0+ZGlzdGFuY2UgPD0gMCkgJiYKLQkJc3RyZWFt LT5pb3NfaW5fcHJvZ3Jlc3MgPCBzdHJlYW0tPm1heF9pb3MpCisJaWYgKHJlYWRfc3RyZWFtX3No b3VsZF9pc3N1ZV9ub3coc3RyZWFtKSkKIAkJcmVhZF9zdHJlYW1fc3RhcnRfcGVuZGluZ19yZWFk KHN0cmVhbSk7CiAKIAkvKgpAQCAtNTM0LDcgKzYzNiw3IEBAIHJlYWRfc3RyZWFtX2xvb2tfYWhl YWQoUmVhZFN0cmVhbSAqc3RyZWFtKQogCSAqIHN0cmVhbS4gIEluIHRoZSB3b3JzdCBjYXNlIHdl IGNhbiBhbHdheXMgbWFrZSBwcm9ncmVzcyBvbmUgYnVmZmVyIGF0IGEKIAkgKiB0aW1lLgogCSAq LwotCUFzc2VydChzdHJlYW0tPnBpbm5lZF9idWZmZXJzID4gMCB8fCBzdHJlYW0tPmRpc3RhbmNl IDw9IDApOworCUFzc2VydChzdHJlYW0tPnBpbm5lZF9idWZmZXJzID4gMCB8fCBzdHJlYW0tPnJl YWRhaGVhZF9kaXN0YW5jZSA8PSAwKTsKIAogCWlmIChzdHJlYW0tPmJhdGNoX21vZGUpCiAJCXBn YWlvX2V4aXRfYmF0Y2htb2RlKCk7CkBAIC03MjQsMTAgKzgyNiwxNyBAQCByZWFkX3N0cmVhbV9i ZWdpbl9pbXBsKGludCBmbGFncywKIAkgKiBkb2luZyBmdWxsIGlvX2NvbWJpbmVfbGltaXQgc2l6 ZWQgcmVhZHMuCiAJICovCiAJaWYgKGZsYWdzICYgUkVBRF9TVFJFQU1fRlVMTCkKLQkJc3RyZWFt LT5kaXN0YW5jZSA9IE1pbihtYXhfcGlubmVkX2J1ZmZlcnMsIHN0cmVhbS0+aW9fY29tYmluZV9s aW1pdCk7CisJeworCQlzdHJlYW0tPnJlYWRhaGVhZF9kaXN0YW5jZSA9IE1pbihtYXhfcGlubmVk X2J1ZmZlcnMsIHN0cmVhbS0+aW9fY29tYmluZV9saW1pdCk7CisJCXN0cmVhbS0+Y29tYmluZV9k aXN0YW5jZSA9IHN0cmVhbS0+aW9fY29tYmluZV9saW1pdDsKKwl9CiAJZWxzZQotCQlzdHJlYW0t PmRpc3RhbmNlID0gMTsKLQlzdHJlYW0tPnJlc3VtZV9kaXN0YW5jZSA9IHN0cmVhbS0+ZGlzdGFu Y2U7CisJeworCQlzdHJlYW0tPnJlYWRhaGVhZF9kaXN0YW5jZSA9IDE7CisJCXN0cmVhbS0+Y29t YmluZV9kaXN0YW5jZSA9IDE7CisJfQorCXN0cmVhbS0+cmVzdW1lX3JlYWRhaGVhZF9kaXN0YW5j ZSA9IHN0cmVhbS0+cmVhZGFoZWFkX2Rpc3RhbmNlOworCXN0cmVhbS0+cmVzdW1lX2NvbWJpbmVf ZGlzdGFuY2UgPSBzdHJlYW0tPmNvbWJpbmVfZGlzdGFuY2U7CiAKIAkvKgogCSAqIFNpbmNlIHdl IGFsd2F5cyBhY2Nlc3MgdGhlIHNhbWUgcmVsYXRpb24sIHdlIGNhbiBpbml0aWFsaXplIHBhcnRz IG9mCkBAIC04MjYsNyArOTM1LDcgQEAgcmVhZF9zdHJlYW1fbmV4dF9idWZmZXIoUmVhZFN0cmVh bSAqc3RyZWFtLCB2b2lkICoqcGVyX2J1ZmZlcl9kYXRhKQogCQlBc3NlcnQoc3RyZWFtLT5pb3Nf aW5fcHJvZ3Jlc3MgPT0gMCk7CiAJCUFzc2VydChzdHJlYW0tPmZvcndhcmRlZF9idWZmZXJzID09 IDApOwogCQlBc3NlcnQoc3RyZWFtLT5waW5uZWRfYnVmZmVycyA9PSAxKTsKLQkJQXNzZXJ0KHN0 cmVhbS0+ZGlzdGFuY2UgPT0gMSk7CisJCUFzc2VydChzdHJlYW0tPnJlYWRhaGVhZF9kaXN0YW5j ZSA9PSAxKTsKIAkJQXNzZXJ0KHN0cmVhbS0+cGVuZGluZ19yZWFkX25ibG9ja3MgPT0gMCk7CiAJ CUFzc2VydChzdHJlYW0tPnBlcl9idWZmZXJfZGF0YV9zaXplID09IDApOwogCQlBc3NlcnQoc3Ry ZWFtLT5pbml0aWFsaXplZF9idWZmZXJzID4gc3RyZWFtLT5vbGRlc3RfYnVmZmVyX2luZGV4KTsK QEAgLTkwMCw3ICsxMDA5LDcgQEAgcmVhZF9zdHJlYW1fbmV4dF9idWZmZXIoUmVhZFN0cmVhbSAq c3RyZWFtLCB2b2lkICoqcGVyX2J1ZmZlcl9kYXRhKQogCQllbHNlCiAJCXsKIAkJCS8qIE5vIG1v cmUgYmxvY2tzLCBlbmQgb2Ygc3RyZWFtLiAqLwotCQkJc3RyZWFtLT5kaXN0YW5jZSA9IDA7CisJ CQlzdHJlYW0tPnJlYWRhaGVhZF9kaXN0YW5jZSA9IDA7CiAJCQlzdHJlYW0tPm9sZGVzdF9idWZm ZXJfaW5kZXggPSBzdHJlYW0tPm5leHRfYnVmZmVyX2luZGV4OwogCQkJc3RyZWFtLT5waW5uZWRf YnVmZmVycyA9IDA7CiAJCQlzdHJlYW0tPmJ1ZmZlcnNbb2xkZXN0X2J1ZmZlcl9pbmRleF0gPSBJ bnZhbGlkQnVmZmVyOwpAQCAtOTE2LDcgKzEwMjUsNyBAQCByZWFkX3N0cmVhbV9uZXh0X2J1ZmZl cihSZWFkU3RyZWFtICpzdHJlYW0sIHZvaWQgKipwZXJfYnVmZmVyX2RhdGEpCiAJCUFzc2VydChz dHJlYW0tPm9sZGVzdF9idWZmZXJfaW5kZXggPT0gc3RyZWFtLT5uZXh0X2J1ZmZlcl9pbmRleCk7 CiAKIAkJLyogRW5kIG9mIHN0cmVhbSByZWFjaGVkPyAgKi8KLQkJaWYgKHN0cmVhbS0+ZGlzdGFu Y2UgPD0gMCkKKwkJaWYgKHN0cmVhbS0+cmVhZGFoZWFkX2Rpc3RhbmNlIDw9IDApCiAJCQlyZXR1 cm4gSW52YWxpZEJ1ZmZlcjsKIAogCQkvKgpAQCAtOTMwLDcgKzEwMzksNyBAQCByZWFkX3N0cmVh bV9uZXh0X2J1ZmZlcihSZWFkU3RyZWFtICpzdHJlYW0sIHZvaWQgKipwZXJfYnVmZmVyX2RhdGEp CiAJCS8qIEVuZCBvZiBzdHJlYW0gcmVhY2hlZD8gKi8KIAkJaWYgKHN0cmVhbS0+cGlubmVkX2J1 ZmZlcnMgPT0gMCkKIAkJewotCQkJQXNzZXJ0KHN0cmVhbS0+ZGlzdGFuY2UgPD0gMCk7CisJCQlB c3NlcnQoc3RyZWFtLT5yZWFkYWhlYWRfZGlzdGFuY2UgPD0gMCk7CiAJCQlyZXR1cm4gSW52YWxp ZEJ1ZmZlcjsKIAkJfQogCX0KQEAgLTk1MSw3ICsxMDYwLDYgQEAgcmVhZF9zdHJlYW1fbmV4dF9i dWZmZXIoUmVhZFN0cmVhbSAqc3RyZWFtLCB2b2lkICoqcGVyX2J1ZmZlcl9kYXRhKQogCQlzdHJl YW0tPmlvc1tzdHJlYW0tPm9sZGVzdF9pb19pbmRleF0uYnVmZmVyX2luZGV4ID09IG9sZGVzdF9i dWZmZXJfaW5kZXgpCiAJewogCQlpbnQxNgkJaW9faW5kZXggPSBzdHJlYW0tPm9sZGVzdF9pb19p bmRleDsKLQkJaW50MzIJCWRpc3RhbmNlOwkvKiB3aWRlciB0ZW1wb3JhcnkgdmFsdWUsIGNsYW1w ZWQgYmVsb3cgKi8KIAkJYm9vbAkJbmVlZGVkX3dhaXQ7CiAKIAkJLyogU2FuaXR5IGNoZWNrIHRo YXQgd2Ugc3RpbGwgYWdyZWUgb24gdGhlIGJ1ZmZlcnMuICovCkBAIC05NjIsNyArMTA3MCw3IEBA IHJlYWRfc3RyZWFtX25leHRfYnVmZmVyKFJlYWRTdHJlYW0gKnN0cmVhbSwgdm9pZCAqKnBlcl9i dWZmZXJfZGF0YSkKIAkJICogSWYgdGhlIHN0cmVhbSBoYXMgYmVlbiByZXNldCwgZG9uJ3QgZXZl biB3YWl0IGZvciB0aGUgSU8sIGp1c3QKIAkJICogZGlzY2FyZCBpdC4KIAkJICovCi0JCWlmIChz dHJlYW0tPmRpc3RhbmNlIDwgMCkKKwkJaWYgKHN0cmVhbS0+cmVhZGFoZWFkX2Rpc3RhbmNlIDwg MCkKIAkJewogCQkJaWYgKHBnYWlvX3dyZWZfdmFsaWQoJnN0cmVhbS0+aW9zW2lvX2luZGV4XS5v cC5pb193cmVmKSAmJgogCQkJCSFzdHJlYW0tPmlvc1tpb19pbmRleF0ub3AuZm9yZWlnbl9pbykK QEAgLTEwMTEsMTEgKzExMTksMzggQEAgcmVhZF9zdHJlYW1fbmV4dF9idWZmZXIoUmVhZFN0cmVh bSAqc3RyZWFtLCB2b2lkICoqcGVyX2J1ZmZlcl9kYXRhKQogCQkgKiB0aGUgc3RyZWFtLCBhcyBz dHJlYW0tPmRpc3RhbmNlID09IDAgaXMgdXNlZCB0byBrZWVwIHRyYWNrIG9mCiAJCSAqIGhhdmlu ZyByZWFjaGVkIHRoZSBlbmQuCiAJCSAqLwotCQlpZiAoc3RyZWFtLT5kaXN0YW5jZSA+IDAgJiYg bmVlZGVkX3dhaXQpCisJCWlmIChzdHJlYW0tPnJlYWRhaGVhZF9kaXN0YW5jZSA+IDAgJiYgbmVl ZGVkX3dhaXQpCiAJCXsKLQkJCWRpc3RhbmNlID0gc3RyZWFtLT5kaXN0YW5jZSAqIDI7Ci0JCQlk aXN0YW5jZSA9IE1pbihkaXN0YW5jZSwgc3RyZWFtLT5tYXhfcGlubmVkX2J1ZmZlcnMpOwotCQkJ c3RyZWFtLT5kaXN0YW5jZSA9IGRpc3RhbmNlOworCQkJLyogd2lkZXIgdGVtcG9yYXJ5IHZhbHVl LCBkdWUgdG8gb3ZlZmxvdyByaXNrICovCisJCQlpbnQzMgkJcmVhZGFoZWFkX2Rpc3RhbmNlOwor CisJCQlyZWFkYWhlYWRfZGlzdGFuY2UgPSBzdHJlYW0tPnJlYWRhaGVhZF9kaXN0YW5jZSAqIDI7 CisJCQlyZWFkYWhlYWRfZGlzdGFuY2UgPSBNaW4ocmVhZGFoZWFkX2Rpc3RhbmNlLCBzdHJlYW0t Pm1heF9waW5uZWRfYnVmZmVycyk7CisJCQlzdHJlYW0tPnJlYWRhaGVhZF9kaXN0YW5jZSA9IHJl YWRhaGVhZF9kaXN0YW5jZTsKKwkJfQorCisJCS8qCisJCSAqIFdoZXRoZXIgd2UgbmVlZGVkIHRv IHdhaXQgb3Igbm90LCBhbGxvdyBmb3IgbW9yZSBJTyBjb21iaW5pbmcgaWYgd2UKKwkJICogbmVl ZGVkIHRvIGRvIElPLiBUaGUgcmVhc29uIHRvIGRvIHNvIGluZGVwZW5kZW50IG9mIG5lZWRpbmcg dG8gd2FpdAorCQkgKiBpcyB0aGF0IHdoZW4gdGhlIGRhdGEgaXMgcmVzaWRlbnQgaW4gdGhlIGtl cm5lbCBwYWdlIGNhY2hlLCBJTworCQkgKiBjb21iaW5pbmcgcmVkdWNlcyB0aGUgc3lzY2FsbCAv IGRpc3BhdGNoIG92ZXJoZWFkLCBtYWtpbmcgaXQKKwkJICogd29ydGh3aGlsZSByZWdhcmRsZXNz IG9mIG5lZWRpbmcgdG8gd2FpdC4KKwkJICoKKwkJICogSXQgaXMgYWxzbyBpbXBvcnRhbnQgd2l0 aCBpb191cmluZyBhcyBpdCB3aWxsIG5ldmVyIHNpZ25hbCB0aGUgbmVlZAorCQkgKiB0byB3YWl0 IGZvciByZWFkcyBpZiBhbGwgdGhlIGRhdGEgaXMgaW4gdGhlIHBhZ2UgY2FjaGUuIFRoZXJlIGFy ZQorCQkgKiBoZXVyaXN0aWNzIHRvIGRlYWwgd2l0aCB0aGF0IGluIG1ldGhvZF9pb191cmluZy5j LCBidXQgdGhleSBvbmx5CisJCSAqIHdvcmsgd2hlbiB0aGUgSU8gZ2V0cyBsYXJnZSBlbm91Z2gu CisJCSAqLworCQlpZiAoc3RyZWFtLT5jb21iaW5lX2Rpc3RhbmNlID4gMCAmJgorCQkJc3RyZWFt LT5jb21iaW5lX2Rpc3RhbmNlIDwgc3RyZWFtLT5pb19jb21iaW5lX2xpbWl0KQorCQl7CisJCQkv KiB3aWRlciB0ZW1wb3JhcnkgdmFsdWUsIGR1ZSB0byBvdmVmbG93IHJpc2sgKi8KKwkJCWludDMy CQljb21iaW5lX2Rpc3RhbmNlOworCisJCQljb21iaW5lX2Rpc3RhbmNlID0gc3RyZWFtLT5jb21i aW5lX2Rpc3RhbmNlICogMjsKKwkJCWNvbWJpbmVfZGlzdGFuY2UgPSBNaW4oY29tYmluZV9kaXN0 YW5jZSwgc3RyZWFtLT5pb19jb21iaW5lX2xpbWl0KTsKKwkJCWNvbWJpbmVfZGlzdGFuY2UgPSBN aW4oY29tYmluZV9kaXN0YW5jZSwgc3RyZWFtLT5tYXhfcGlubmVkX2J1ZmZlcnMpOworCQkJc3Ry ZWFtLT5jb21iaW5lX2Rpc3RhbmNlID0gY29tYmluZV9kaXN0YW5jZTsKIAkJfQogCiAJCS8qCkBA IC0xMDk0LDEwICsxMjI5LDE4IEBAIHJlYWRfc3RyZWFtX25leHRfYnVmZmVyKFJlYWRTdHJlYW0g KnN0cmVhbSwgdm9pZCAqKnBlcl9idWZmZXJfZGF0YSkKIAogI2lmbmRlZiBSRUFEX1NUUkVBTV9E SVNBQkxFX0ZBU1RfUEFUSAogCS8qIFNlZSBpZiB3ZSBjYW4gdGFrZSB0aGUgZmFzdCBwYXRoIGZv ciBhbGwtY2FjaGVkIHNjYW5zIG5leHQgdGltZS4gKi8KKwkvKgorCSAqIEZJWE1FOiBJdCdzIHdh eSB0b28gZWFzeSB0byB3cm9uZ2x5IGZhc3QgcGF0aC4gSSdtIHByZXR0eSBzdXJlIHRoZXJlJ3MK KwkgKiBzZXZlcmFsIHByZS1leGlzdGluZyBjYXNlcyB3aGVyZSBpdCB0cmlnZ2VycyBiZWNhdXNl IHdlIGFyZSBub3QgaXNzdWluZworCSAqIGFkZGl0aW9uYWwgcHJlZmV0Y2hpbmcgKGUuZy4gYmVj YXVzZSBvZiBhIHNtYWxsCisJICogZWZmZWN0aXZlX2lvX2NvbmN1cnJlbmN5KSBhbmQgdGh1cyBz dHJlYW0tPnBpbm5lZF9idWZmZXJzIHN0YXlzIGF0IDEKKwkgKiBhZnRlciByZWFkX3N0cmVhbV9s b29rX2FoZWFkKCkuCisJICovCiAJaWYgKHN0cmVhbS0+aW9zX2luX3Byb2dyZXNzID09IDAgJiYK IAkJc3RyZWFtLT5mb3J3YXJkZWRfYnVmZmVycyA9PSAwICYmCiAJCXN0cmVhbS0+cGlubmVkX2J1 ZmZlcnMgPT0gMSAmJgotCQlzdHJlYW0tPmRpc3RhbmNlID09IDEgJiYKKwkJc3RyZWFtLT5yZWFk YWhlYWRfZGlzdGFuY2UgPT0gMSAmJgorCQlzdHJlYW0tPmNvbWJpbmVfZGlzdGFuY2UgPT0gMSAm JgogCQlzdHJlYW0tPnBlbmRpbmdfcmVhZF9uYmxvY2tzID09IDAgJiYKIAkJc3RyZWFtLT5wZXJf YnVmZmVyX2RhdGFfc2l6ZSA9PSAwKQogCXsKQEAgLTExNDMsOCArMTI4Niw5IEBAIHJlYWRfc3Ry ZWFtX25leHRfYmxvY2soUmVhZFN0cmVhbSAqc3RyZWFtLCBCdWZmZXJBY2Nlc3NTdHJhdGVneSAq c3RyYXRlZ3kpCiBCbG9ja051bWJlcgogcmVhZF9zdHJlYW1fcGF1c2UoUmVhZFN0cmVhbSAqc3Ry ZWFtKQogewotCXN0cmVhbS0+cmVzdW1lX2Rpc3RhbmNlID0gc3RyZWFtLT5kaXN0YW5jZTsKLQlz dHJlYW0tPmRpc3RhbmNlID0gMDsKKwlzdHJlYW0tPnJlc3VtZV9yZWFkYWhlYWRfZGlzdGFuY2Ug PSBzdHJlYW0tPnJlYWRhaGVhZF9kaXN0YW5jZTsKKwlzdHJlYW0tPnJlc3VtZV9jb21iaW5lX2Rp c3RhbmNlID0gc3RyZWFtLT5jb21iaW5lX2Rpc3RhbmNlOworCXN0cmVhbS0+cmVhZGFoZWFkX2Rp c3RhbmNlID0gMDsKIAlyZXR1cm4gSW52YWxpZEJsb2NrTnVtYmVyOwogfQogCkBAIC0xMTU2LDcg KzEzMDAsOCBAQCByZWFkX3N0cmVhbV9wYXVzZShSZWFkU3RyZWFtICpzdHJlYW0pCiB2b2lkCiBy ZWFkX3N0cmVhbV9yZXN1bWUoUmVhZFN0cmVhbSAqc3RyZWFtKQogewotCXN0cmVhbS0+ZGlzdGFu Y2UgPSBzdHJlYW0tPnJlc3VtZV9kaXN0YW5jZTsKKwlzdHJlYW0tPnJlYWRhaGVhZF9kaXN0YW5j ZSA9IHN0cmVhbS0+cmVzdW1lX3JlYWRhaGVhZF9kaXN0YW5jZTsKKwlzdHJlYW0tPmNvbWJpbmVf ZGlzdGFuY2UgPSBzdHJlYW0tPnJlc3VtZV9jb21iaW5lX2Rpc3RhbmNlOwogfQogCiAvKgpAQCAt MTE3Miw3ICsxMzE3LDggQEAgcmVhZF9zdHJlYW1fcmVzZXQoUmVhZFN0cmVhbSAqc3RyZWFtKQog CUJ1ZmZlcgkJYnVmZmVyOwogCiAJLyogU3RvcCBsb29raW5nIGFoZWFkLiAqLwotCXN0cmVhbS0+ ZGlzdGFuY2UgPSAtMTsKKwlzdHJlYW0tPnJlYWRhaGVhZF9kaXN0YW5jZSA9IC0xOworCXN0cmVh bS0+Y29tYmluZV9kaXN0YW5jZSA9IC0xOwogCiAJLyogRm9yZ2V0IGJ1ZmZlcmVkIGJsb2NrIG51 bWJlciBhbmQgZmFzdCBwYXRoIHN0YXRlLiAqLwogCXN0cmVhbS0+YnVmZmVyZWRfYmxvY2tudW0g PSBJbnZhbGlkQmxvY2tOdW1iZXI7CkBAIC0xMjA0LDggKzEzNTAsMTAgQEAgcmVhZF9zdHJlYW1f cmVzZXQoUmVhZFN0cmVhbSAqc3RyZWFtKQogCUFzc2VydChzdHJlYW0tPmlvc19pbl9wcm9ncmVz cyA9PSAwKTsKIAogCS8qIFN0YXJ0IG9mZiBhc3N1bWluZyBkYXRhIGlzIGNhY2hlZC4gKi8KLQlz dHJlYW0tPmRpc3RhbmNlID0gMTsKLQlzdHJlYW0tPnJlc3VtZV9kaXN0YW5jZSA9IHN0cmVhbS0+ ZGlzdGFuY2U7CisJc3RyZWFtLT5yZWFkYWhlYWRfZGlzdGFuY2UgPSAxOworCXN0cmVhbS0+Y29t YmluZV9kaXN0YW5jZSA9IDE7CisJc3RyZWFtLT5yZXN1bWVfcmVhZGFoZWFkX2Rpc3RhbmNlID0g c3RyZWFtLT5yZWFkYWhlYWRfZGlzdGFuY2U7CisJc3RyZWFtLT5yZXN1bWVfY29tYmluZV9kaXN0 YW5jZSA9IHN0cmVhbS0+Y29tYmluZV9kaXN0YW5jZTsKIAlzdHJlYW0tPmRpc3RhbmNlX2RlY2F5 X2hvbGRvZmYgPSAwOwogfQogCi0tIAoyLjUzLjAKCg== --000000000000f287f9064e6de93c Content-Type: application/octet-stream; name="v20-0001-Rename-heapam_index_fetch_tuple-argument-for-cla.patch" Content-Disposition: attachment; filename="v20-0001-Rename-heapam_index_fetch_tuple-argument-for-cla.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mngmwp570 RnJvbSBkNzUwYzA3ZTUzMjIyMTg4NGUyOWExNzdlNjc3OWEyYTRkYzlmOTg2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFdl ZCwgMSBBcHIgMjAyNiAxNzo0NDo1NCAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggdjIwIDAxLzE3XSBS ZW5hbWUgaGVhcGFtX2luZGV4X2ZldGNoX3R1cGxlIGFyZ3VtZW50IGZvcgogY2xhcml0eS4KClJl bmFtZSBoZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGUncyBjYWxsX2FnYWluIGFyZ3VtZW50IHRvIGhl YXBfY29udGludWUsCmZvciBjb25zaXN0ZW5jeSB3aXRoIHRoZSBwb2ludGVkLXRvIHZhcmlhYmxl IG5hbWUgKEluZGV4U2NhbkRlc2NEYXRhJ3MKeHNfaGVhcF9jb250aW51ZSBmaWVsZCkuCgpQcmVw YXJhdGlvbiBmb3IgYW4gdXBjb21pbmcgY29tbWl0IHRoYXQgd2lsbCBtb3ZlIGluZGV4IHNjYW4g cmVsYXRlZApoZWFwYW0gZnVuY3Rpb25zIGludG8gdGhlaXIgb3duIGZpbGUuCgpBdXRob3I6IFBl dGVyIEdlb2doZWdhbiA8cGdAYm93dC5pZT4KUmV2aWV3ZWQtQnk6IEFuZHJlcyBGcmV1bmQgPGFu ZHJlc0BhbmFyYXplbC5kZT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9ibWJya2l5 anhvYWw2bzV4YWR6djVidmVveW5ydDN4Mzd3cWNoN3czam53dW1rcTJ5b0BiNHptdG5yZnM0bWgK LS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jIHwgMTAgKysrKyst LS0tLQogMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYwppbmRleCAxYmU4ZWE0ODQuLmRj N2RiNTg4NSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRs ZXIuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCkBAIC0x MjYsNyArMTI2LDcgQEAgaGVhcGFtX2luZGV4X2ZldGNoX3R1cGxlKHN0cnVjdCBJbmRleEZldGNo VGFibGVEYXRhICpzY2FuLAogCQkJCQkJIEl0ZW1Qb2ludGVyIHRpZCwKIAkJCQkJCSBTbmFwc2hv dCBzbmFwc2hvdCwKIAkJCQkJCSBUdXBsZVRhYmxlU2xvdCAqc2xvdCwKLQkJCQkJCSBib29sICpj YWxsX2FnYWluLCBib29sICphbGxfZGVhZCkKKwkJCQkJCSBib29sICpoZWFwX2NvbnRpbnVlLCBi b29sICphbGxfZGVhZCkKIHsKIAlJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuID0gKEluZGV4RmV0 Y2hIZWFwRGF0YSAqKSBzY2FuOwogCUJ1ZmZlckhlYXBUdXBsZVRhYmxlU2xvdCAqYnNsb3QgPSAo QnVmZmVySGVhcFR1cGxlVGFibGVTbG90ICopIHNsb3Q7CkBAIC0xMzUsNyArMTM1LDcgQEAgaGVh cGFtX2luZGV4X2ZldGNoX3R1cGxlKHN0cnVjdCBJbmRleEZldGNoVGFibGVEYXRhICpzY2FuLAog CUFzc2VydChUVFNfSVNfQlVGRkVSVFVQTEUoc2xvdCkpOwogCiAJLyogV2UgY2FuIHNraXAgdGhl IGJ1ZmZlci1zd2l0Y2hpbmcgbG9naWMgaWYgd2UncmUgaW4gbWlkLUhPVCBjaGFpbi4gKi8KLQlp ZiAoISpjYWxsX2FnYWluKQorCWlmICghKmhlYXBfY29udGludWUpCiAJewogCQkvKiBTd2l0Y2gg dG8gY29ycmVjdCBidWZmZXIgaWYgd2UgZG9uJ3QgaGF2ZSBpdCBhbHJlYWR5ICovCiAJCUJ1ZmZl cgkJcHJldl9idWYgPSBoc2Nhbi0+eHNfY2J1ZjsKQEAgLTE2MSw3ICsxNjEsNyBAQCBoZWFwYW1f aW5kZXhfZmV0Y2hfdHVwbGUoc3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4sCiAJCQkJ CQkJCQkJCXNuYXBzaG90LAogCQkJCQkJCQkJCQkmYnNsb3QtPmJhc2UudHVwZGF0YSwKIAkJCQkJ CQkJCQkJYWxsX2RlYWQsCi0JCQkJCQkJCQkJCSEqY2FsbF9hZ2Fpbik7CisJCQkJCQkJCQkJCSEq aGVhcF9jb250aW51ZSk7CiAJYnNsb3QtPmJhc2UudHVwZGF0YS50X3NlbGYgPSAqdGlkOwogCUxv Y2tCdWZmZXIoaHNjYW4tPnhzX2NidWYsIEJVRkZFUl9MT0NLX1VOTE9DSyk7CiAKQEAgLTE3MSw3 ICsxNzEsNyBAQCBoZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGUoc3RydWN0IEluZGV4RmV0Y2hUYWJs ZURhdGEgKnNjYW4sCiAJCSAqIE9ubHkgaW4gYSBub24tTVZDQyBzbmFwc2hvdCBjYW4gbW9yZSB0 aGFuIG9uZSBtZW1iZXIgb2YgdGhlIEhPVAogCQkgKiBjaGFpbiBiZSB2aXNpYmxlLgogCQkgKi8K LQkJKmNhbGxfYWdhaW4gPSAhSXNNVkNDTGlrZVNuYXBzaG90KHNuYXBzaG90KTsKKwkJKmhlYXBf Y29udGludWUgPSAhSXNNVkNDTGlrZVNuYXBzaG90KHNuYXBzaG90KTsKIAogCQlzbG90LT50dHNf dGFibGVPaWQgPSBSZWxhdGlvbkdldFJlbGlkKHNjYW4tPnJlbCk7CiAJCUV4ZWNTdG9yZUJ1ZmZl ckhlYXBUdXBsZSgmYnNsb3QtPmJhc2UudHVwZGF0YSwgc2xvdCwgaHNjYW4tPnhzX2NidWYpOwpA QCAtMTc5LDcgKzE3OSw3IEBAIGhlYXBhbV9pbmRleF9mZXRjaF90dXBsZShzdHJ1Y3QgSW5kZXhG ZXRjaFRhYmxlRGF0YSAqc2NhbiwKIAllbHNlCiAJewogCQkvKiBXZSd2ZSByZWFjaGVkIHRoZSBl bmQgb2YgdGhlIEhPVCBjaGFpbi4gKi8KLQkJKmNhbGxfYWdhaW4gPSBmYWxzZTsKKwkJKmhlYXBf Y29udGludWUgPSBmYWxzZTsKIAl9CiAKIAlyZXR1cm4gZ290X2hlYXBfdHVwbGU7Ci0tIAoyLjUz LjAKCg== --000000000000f287f9064e6de93c Content-Type: application/octet-stream; name="v20-0017-WIP-aio-bufmgr-Fix-race-condition-leading-to-dea.patch" Content-Disposition: attachment; filename="v20-0017-WIP-aio-bufmgr-Fix-race-condition-leading-to-dea.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mngmwp5c1 RnJvbSA1OTE0ODk2MDgyMTc5YzQ5NjFmNmNiOTg1ZWVmYmEyYzk3OGQzODI2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFN1biwgMjIgTWFyIDIwMjYgMTU6MTk6MDggLTA0MDAKU3ViamVjdDogW1BBVENIIHYyMCAx Ny8xN10gV0lQOiBhaW86IGJ1Zm1ncjogRml4IHJhY2UgY29uZGl0aW9uIGxlYWRpbmcgdG8KIGRl YWRsb2NrcyB3aXRoIGlvX3VyaW5nCgpJZiBiYWNrZW5kIEEgaXMgaW4gdGhlIHByb2Nlc3Mgb2Yg c3RhcnRpbmcgSU8gZm9yIGEgYnVmZmVyLCB0aGVyZSBpcyBhIHNob3J0CnBlcmlvZCBpbiB3aGlj aCB0aGUgYnVmZmVyIGlzIG1hcmtlZCBhcyBJT19JTl9QUk9HUkVTUyB3aXRob3V0IGhhdmluZyBh bgphc3NvY2lhdGVkIEFJTyB3YWl0IHJlZmVyZW5jZS4gSWYgYSBiYWNrZW5kIEIgZG9lcyBXYWl0 SU8oKSBvbiB0aGF0IGJ1ZmZlciwKaXQnbGwgd2FpdCBmb3IgdGhlIGJ1ZmZlcidzIElPIGNvbmRp dGlvbiB2YXJpYWJsZSB0byBiZSBzZXQuIE1vc3Qgb2YgdGhlIHRpbWUKdGhhdCBpcyBPSywgd2hl biB0aGUgSU8gb24gdGhlIGJ1ZmZlciBmaW5pc2hlcywgdGhlIENWIHdpbGwgYmUgc2lnbmFsbGVk LgpIb3dldmVyLCB3aXRoIGlvX3VyaW5nLCBpdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBpc3N1ZXIg KEEpIG9mIHRoZSBJTyBuZXZlcgpnZXRzIGFyb3VuZCB0byBkb2luZyBzbywgZS5nLiBiZWNhdXNl IGl0IGlzIHdhaXRpbmcgZm9yIHNvbWV0aGluZyBkb25lIGJ5IEIuCgpUbyBmaXggdGhhdCwgd2Ug bmVlZCB0byBzaWduYWwgdGhlIENWIHdoZW4gc3RhZ2luZyBJTy4gVGhhdCdzIGFubm95aW5nIGFz IENWCmJyb2FkY2FzdHMgYXJlIG5vdCBjaGVhcC4gU28gd2UgYXQgbGVhc3QgYXZvaWQgaXQgZm9y IHRoZSBjb21tb24gY2FzZSBvZiBJTwpiZWluZyBleGVjdXRlZCBzeW5jaHJvbm91c2x5LgoKSSBo b3BlIHRoYXQgZXZlbnR1YWxseSB3ZSBjYW4gZ2V0IGF3YXkgZnJvbSBuZWVkaW5nIG11bHRpcGxl IHN5c3RlbXMgZm9yCnNpZ25hbGxpbmcgSU8gY29tcGxldGlvbiwgYnV0IHdlIGFyZSBjbGVhcmx5 IG5vdCB0aGVyZSB5ZXQuCi0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMg fCAyMiArKysrKysrKysrKysrKysrKysrLS0tCiAxIGZpbGUgY2hhbmdlZCwgMTkgaW5zZXJ0aW9u cygrKSwgMyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1 ZmZlci9idWZtZ3IuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jCmluZGV4 IDVjNjQ1NzAwMi4uNWRiYzUwNTQyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1 ZmZlci9idWZtZ3IuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYwpA QCAtODI3OCw3ICs4Mjc4LDcgQEAgTWFya0RpcnR5QWxsVW5waW5uZWRCdWZmZXJzKGludDMyICpi dWZmZXJzX2RpcnRpZWQsCiAgKiByZXBsYWNlZCB3aGlsZSBJTyBpcyBvbmdvaW5nLgogICovCiBz dGF0aWMgcGdfYXR0cmlidXRlX2Fsd2F5c19pbmxpbmUgdm9pZAotYnVmZmVyX3N0YWdlX2NvbW1v bihQZ0Fpb0hhbmRsZSAqaW9oLCBib29sIGlzX3dyaXRlLCBib29sIGlzX3RlbXApCitidWZmZXJf c3RhZ2VfY29tbW9uKFBnQWlvSGFuZGxlICppb2gsIHVpbnQ4IGNiX2RhdGEsIGJvb2wgaXNfd3Jp dGUsIGJvb2wgaXNfdGVtcCkKIHsKIAl1aW50NjQJICAgKmlvX2RhdGE7CiAJdWludDgJCWhhbmRs ZV9kYXRhX2xlbjsKQEAgLTgzNzcsNyArODM3NywyMyBAQCBidWZmZXJfc3RhZ2VfY29tbW9uKFBn QWlvSGFuZGxlICppb2gsIGJvb2wgaXNfd3JpdGUsIGJvb2wgaXNfdGVtcCkKIAkJICoga2VlcHMg dHJhY2suCiAJCSAqLwogCQlpZiAoIWlzX3RlbXApCisJCXsKIAkJCVJlc291cmNlT3duZXJGb3Jn ZXRCdWZmZXJJTyhDdXJyZW50UmVzb3VyY2VPd25lciwgYnVmZmVyKTsKKworCQkJLyoKKwkJCSAq IEEgYmFja2VuZCBtaWdodCBoYXZlIHN0YXJ0ZWQgd2FpdGluZyBmb3IgdGhlIElPIHVzaW5nIHRo ZQorCQkJICogYnVmZmVyJ3MgY29uZGl0aW9uIHZhcmlhYmxlLCBidXQgb25jZSB0aGUgSU8gaXMg c3VibWl0dGVkLCBpdAorCQkJICogc2hvdWxkIHdhaXQgdmlhIHRoZSBBSU8gc3Vic3lzdGVtLCBh cyBhIHdhaXRlciBtaWdodCBuZWVkIHRvCisJCQkgKiBjb21wbGV0ZSB0aGUgSU8uCisJCQkgKgor CQkJICogSG93ZXZlciwgZG9pbmcgYnJvYWRjYXN0cyBpcyBub3QgZnJlZSwgc28gd2UgbGlrZSB0 byBhdm9pZCBpdAorCQkJICogd2hlbiBub3QgbmVjZXNzYXJ5LiBJZiB0aGUgSU8gaXMgYmVpbmcg ZXhlY3V0ZWQgc3luY2hyb25vdXNseSwKKwkJCSAqIHRoaXMgYmFja2VuZCB3aWxsIGFsd2F5cyBl bmQgdXAgc2lnbmFsbGluZyB0aGUgSU9DViB3aXRob3V0CisJCQkgKiBmdXJ0aGVyIHdhaXRpbmcs IHRoZXJlZm9yZSBhdm9pZCBkb2luZyBzbyBoZXJlLgorCQkJICovCisJCQlpZiAoIShjYl9kYXRh ICYgUkVBRF9CVUZGRVJTX1NZTkNIUk9OT1VTTFkpKQorCQkJCUNvbmRpdGlvblZhcmlhYmxlQnJv YWRjYXN0KEJ1ZmZlckRlc2NyaXB0b3JHZXRJT0NWKGJ1Zl9oZHIpKTsKKwkJfQogCX0KIH0KIApA QCAtODg2Niw3ICs4ODgyLDcgQEAgYnVmZmVyX3JlYWR2X3JlcG9ydChQZ0Fpb1Jlc3VsdCByZXN1 bHQsIGNvbnN0IFBnQWlvVGFyZ2V0RGF0YSAqdGQsCiBzdGF0aWMgdm9pZAogc2hhcmVkX2J1ZmZl cl9yZWFkdl9zdGFnZShQZ0Fpb0hhbmRsZSAqaW9oLCB1aW50OCBjYl9kYXRhKQogewotCWJ1ZmZl cl9zdGFnZV9jb21tb24oaW9oLCBmYWxzZSwgZmFsc2UpOworCWJ1ZmZlcl9zdGFnZV9jb21tb24o aW9oLCBjYl9kYXRhLCBmYWxzZSwgZmFsc2UpOwogfQogCiBzdGF0aWMgUGdBaW9SZXN1bHQKQEAg LTg5MTcsNyArODkzMyw3IEBAIHNoYXJlZF9idWZmZXJfcmVhZHZfY29tcGxldGVfbG9jYWwoUGdB aW9IYW5kbGUgKmlvaCwgUGdBaW9SZXN1bHQgcHJpb3JfcmVzdWx0LAogc3RhdGljIHZvaWQKIGxv Y2FsX2J1ZmZlcl9yZWFkdl9zdGFnZShQZ0Fpb0hhbmRsZSAqaW9oLCB1aW50OCBjYl9kYXRhKQog ewotCWJ1ZmZlcl9zdGFnZV9jb21tb24oaW9oLCBmYWxzZSwgdHJ1ZSk7CisJYnVmZmVyX3N0YWdl X2NvbW1vbihpb2gsIGNiX2RhdGEsIGZhbHNlLCB0cnVlKTsKIH0KIAogc3RhdGljIFBnQWlvUmVz dWx0Ci0tIAoyLjUzLjAKCg== --000000000000f287f9064e6de93c Content-Type: application/octet-stream; name="v20-0014-Hacky-implementation-of-making-read_stream_reset.patch" Content-Disposition: attachment; filename="v20-0014-Hacky-implementation-of-making-read_stream_reset.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mngmwp5o4 RnJvbSBkY2FhYWY3MGY1YTNlYTc4NDlkMjhiMjA0YmEyYjk3NTdkMDQ4NTg3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFRodSwgMTkgTWFyIDIwMjYgMjM6MDY6NTggLTA0MDAKU3ViamVjdDogW1BBVENIIHYyMCAx NC8xN10gSGFja3kgaW1wbGVtZW50YXRpb24gb2YgbWFraW5nCiByZWFkX3N0cmVhbV9yZXNldCgp L2VuZCgpIG5vdCB3YWl0IGZvciBJTwoKTm90IHdhaXRpbmcgZm9yIElPIGR1cmluZyByZWFkX3N0 cmVhbV9yZXNldCgpIGNhbiBiZSBpbXBvcnRhbnQgZm9yIHBlcmZvcm1hbmNlCmluIGNhc2VzIHdo ZXJlIHJlYWQgc3RyZWFtcyBhcmUgZnJlcXVlbnRseSByZXNldCBiZWZvcmUgdGhlIGVuZCBpcwpy ZWFjaGVkLiBDdXJyZW50IHVzZXJzIGRvIG5vdCBjb21tb25seSBkbyB0aGF0LCBidXQgdGhlIHVw Y29taW5nIHdvcmsgdG8gdXNlIGEKcmVhZCBzdHJlYW0gdG8gcHJlZmV0Y2ggdGFibGUgYmxvY2tz IGFzIHBhcnQgb2YgaW5kZXggc2NhbnMgY2FuIGRvIHNvCmZyZXF1ZW50bHkgaW4gc29tZSBxdWVy eSBwYXR0ZXJucy4gRS5nLiBpZiB0aGVyZSBpcyBhbiBpbmRleCBzY2FuIG9uIHRoZSBpbm5lcgpz aWRlIG9mIGEgbmVzdGVkIGxvb3AuCgpGSVhNRTogVGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBwcm9i bGVtYXRpYyB0aG91Z2gsIGFzIHRoZXJlIGlzIG5vdGhpbmcgZm9yY2luZwp0aGUgZGlzY2FyZGVk IElPcyB0byBldmVyIGJlIGNvbXBsZXRlZCBpZiB0aGUgYmFja2VuZCBnb2VzIGlkbGUuIFRoYXQn cyBhdCB0aGUKdmVyeSBsZWFzdCBwcm9ibGVtYXRpYyBiZWNhdXNlIGl0IGxlYWRzIHRvIHRoZSB1 bmRlcmx5aW5nIGJ1ZmZlcnMgY29udGludWluZwp0byBiZSBwaW5uZWQgYW5kIHRoZSBJT3Mgc2hv d2luZyB1cCBpbiB0aGUgcGdfYWlvcyB2aWV3LgoKQXV0aG9yOgpSZXZpZXdlZC1ieToKRGlzY3Vz c2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS8KQmFja3BhdGNoOgotLS0KIHNyYy9pbmNsdWRlL3N0 b3JhZ2UvYWlvLmggICAgICAgICAgICAgfCAgMSArCiBzcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9h aW8uYyAgICAgICAgIHwgMjcgKysrKysrKysrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvc3Rv cmFnZS9haW8vcmVhZF9zdHJlYW0uYyB8IDMyICsrKysrKysrKysrKysrKysrKysrKystLS0tLQog MyBmaWxlcyBjaGFuZ2VkLCA1NCBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQoKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYWlvLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2Fp by5oCmluZGV4IGVjNTQzYjc4NC4uYzE4NGU5N2E5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9z dG9yYWdlL2Fpby5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYWlvLmgKQEAgLTMyOCw2ICsz MjgsNyBAQCBleHRlcm4gaW50CXBnYWlvX3dyZWZfZ2V0X2lkKFBnQWlvV2FpdFJlZiAqaW93KTsK IGV4dGVybiB2b2lkIHBnYWlvX3dyZWZfd2FpdChQZ0Fpb1dhaXRSZWYgKmlvdyk7CiBleHRlcm4g Ym9vbCBwZ2Fpb193cmVmX2NoZWNrX2RvbmUoUGdBaW9XYWl0UmVmICppb3cpOwogCitleHRlcm4g dm9pZCBwZ2Fpb193cmVmX2Rpc2NhcmRfcmVzdWx0KFBnQWlvV2FpdFJlZiAqaW93KTsKIAogCiAv KiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFn ZS9haW8vYWlvLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9haW8uYwppbmRleCA4ZjdlMjY2 MDcuLjFhOTZhOGE5YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vYWlvLmMK KysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vYWlvLmMKQEAgLTEwNTAsNiArMTA1MCwzMyBA QCBwZ2Fpb193cmVmX2NoZWNrX2RvbmUoUGdBaW9XYWl0UmVmICppb3cpCiAJcmV0dXJuIGZhbHNl OwogfQogCit2b2lkCitwZ2Fpb193cmVmX2Rpc2NhcmRfcmVzdWx0KFBnQWlvV2FpdFJlZiAqaW93 KQoreworCXVpbnQ2NAkJcmVmX2dlbmVyYXRpb247CisJYm9vbAkJYW1fb3duZXI7CisJUGdBaW9I YW5kbGUgKmlvaDsKKwlQZ0Fpb0hhbmRsZVN0YXRlIHN0YXRlOworCisJaW9oID0gcGdhaW9faW9f ZnJvbV93cmVmKGlvdywgJnJlZl9nZW5lcmF0aW9uKTsKKworCWFtX293bmVyID0gaW9oLT5vd25l cl9wcm9jbm8gPT0gTXlQcm9jTnVtYmVyOworCisJaWYgKCFhbV9vd25lcikKKwkJZWxvZyhFUlJP UiwgIm5vdCB5b3UiKTsKKworCWlmIChwZ2Fpb19pb193YXNfcmVjeWNsZWQoaW9oLCByZWZfZ2Vu ZXJhdGlvbiwgJnN0YXRlKSkKKwkJcmV0dXJuOworCisJcGdhaW9fZGVidWdfaW8oREVCVUcyLCBp b2gsCisJCQkJICAgImRpc2NhcmRpbmcgcmVzdWx0ICVwIiwKKwkJCQkgICBpb2gtPnJlcG9ydF9y ZXR1cm4pOworCisJaWYgKGlvaC0+cmVzb3duZXIpCisJCXBnYWlvX2lvX3JlbGVhc2VfcmVzb3du ZXIoJmlvaC0+cmVzb3duZXJfbm9kZSwgZmFsc2UpOworfQorCisKIAogCiAvKiAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vcmVhZF9z dHJlYW0uYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3RyZWFtLmMKaW5kZXggNDk5 NzE4MzNkLi4xNDRiMzYxM2MgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3Jl YWRfc3RyZWFtLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vcmVhZF9zdHJlYW0uYwpA QCAtNTI0LDcgKzUyNCw3IEBAIHJlYWRfc3RyZWFtX2xvb2tfYWhlYWQoUmVhZFN0cmVhbSAqc3Ry ZWFtKQogCQkoc3RyZWFtLT5wZW5kaW5nX3JlYWRfbmJsb2NrcyA9PSBzdHJlYW0tPmlvX2NvbWJp bmVfbGltaXQgfHwKIAkJIChzdHJlYW0tPnBlbmRpbmdfcmVhZF9uYmxvY2tzID49IHN0cmVhbS0+ ZGlzdGFuY2UgJiYKIAkJICBzdHJlYW0tPnBpbm5lZF9idWZmZXJzID09IDApIHx8Ci0JCSBzdHJl YW0tPmRpc3RhbmNlID09IDApICYmCisJCSBzdHJlYW0tPmRpc3RhbmNlIDw9IDApICYmCiAJCXN0 cmVhbS0+aW9zX2luX3Byb2dyZXNzIDwgc3RyZWFtLT5tYXhfaW9zKQogCQlyZWFkX3N0cmVhbV9z dGFydF9wZW5kaW5nX3JlYWQoc3RyZWFtKTsKIApAQCAtNTM0LDcgKzUzNCw3IEBAIHJlYWRfc3Ry ZWFtX2xvb2tfYWhlYWQoUmVhZFN0cmVhbSAqc3RyZWFtKQogCSAqIHN0cmVhbS4gIEluIHRoZSB3 b3JzdCBjYXNlIHdlIGNhbiBhbHdheXMgbWFrZSBwcm9ncmVzcyBvbmUgYnVmZmVyIGF0IGEKIAkg KiB0aW1lLgogCSAqLwotCUFzc2VydChzdHJlYW0tPnBpbm5lZF9idWZmZXJzID4gMCB8fCBzdHJl YW0tPmRpc3RhbmNlID09IDApOworCUFzc2VydChzdHJlYW0tPnBpbm5lZF9idWZmZXJzID4gMCB8 fCBzdHJlYW0tPmRpc3RhbmNlIDw9IDApOwogCiAJaWYgKHN0cmVhbS0+YmF0Y2hfbW9kZSkKIAkJ cGdhaW9fZXhpdF9iYXRjaG1vZGUoKTsKQEAgLTkxNiw3ICs5MTYsNyBAQCByZWFkX3N0cmVhbV9u ZXh0X2J1ZmZlcihSZWFkU3RyZWFtICpzdHJlYW0sIHZvaWQgKipwZXJfYnVmZmVyX2RhdGEpCiAJ CUFzc2VydChzdHJlYW0tPm9sZGVzdF9idWZmZXJfaW5kZXggPT0gc3RyZWFtLT5uZXh0X2J1ZmZl cl9pbmRleCk7CiAKIAkJLyogRW5kIG9mIHN0cmVhbSByZWFjaGVkPyAgKi8KLQkJaWYgKHN0cmVh bS0+ZGlzdGFuY2UgPT0gMCkKKwkJaWYgKHN0cmVhbS0+ZGlzdGFuY2UgPD0gMCkKIAkJCXJldHVy biBJbnZhbGlkQnVmZmVyOwogCiAJCS8qCkBAIC05MzAsNyArOTMwLDcgQEAgcmVhZF9zdHJlYW1f bmV4dF9idWZmZXIoUmVhZFN0cmVhbSAqc3RyZWFtLCB2b2lkICoqcGVyX2J1ZmZlcl9kYXRhKQog CQkvKiBFbmQgb2Ygc3RyZWFtIHJlYWNoZWQ/ICovCiAJCWlmIChzdHJlYW0tPnBpbm5lZF9idWZm ZXJzID09IDApCiAJCXsKLQkJCUFzc2VydChzdHJlYW0tPmRpc3RhbmNlID09IDApOworCQkJQXNz ZXJ0KHN0cmVhbS0+ZGlzdGFuY2UgPD0gMCk7CiAJCQlyZXR1cm4gSW52YWxpZEJ1ZmZlcjsKIAkJ fQogCX0KQEAgLTk1OCw3ICs5NTgsMjcgQEAgcmVhZF9zdHJlYW1fbmV4dF9idWZmZXIoUmVhZFN0 cmVhbSAqc3RyZWFtLCB2b2lkICoqcGVyX2J1ZmZlcl9kYXRhKQogCQlBc3NlcnQoc3RyZWFtLT5p b3NbaW9faW5kZXhdLm9wLmJ1ZmZlcnMgPT0KIAkJCSAgICZzdHJlYW0tPmJ1ZmZlcnNbb2xkZXN0 X2J1ZmZlcl9pbmRleF0pOwogCi0JCW5lZWRlZF93YWl0ID0gV2FpdFJlYWRCdWZmZXJzKCZzdHJl YW0tPmlvc1tpb19pbmRleF0ub3ApOworCQkvKgorCQkgKiBJZiB0aGUgc3RyZWFtIGhhcyBiZWVu IHJlc2V0LCBkb24ndCBldmVuIHdhaXQgZm9yIHRoZSBJTywganVzdAorCQkgKiBkaXNjYXJkIGl0 LgorCQkgKi8KKwkJaWYgKHN0cmVhbS0+ZGlzdGFuY2UgPCAwKQorCQl7CisJCQlpZiAocGdhaW9f d3JlZl92YWxpZCgmc3RyZWFtLT5pb3NbaW9faW5kZXhdLm9wLmlvX3dyZWYpICYmCisJCQkJIXN0 cmVhbS0+aW9zW2lvX2luZGV4XS5vcC5mb3JlaWduX2lvKQorCQkJeworCQkJCXBnYWlvX3dyZWZf ZGlzY2FyZF9yZXN1bHQoJnN0cmVhbS0+aW9zW2lvX2luZGV4XS5vcC5pb193cmVmKTsKKwkJCQlw Z2Fpb193cmVmX2NsZWFyKCZzdHJlYW0tPmlvc1tpb19pbmRleF0ub3AuaW9fd3JlZik7CisJCQl9 CisJCQllbHNlCisJCQkJV2FpdFJlYWRCdWZmZXJzKCZzdHJlYW0tPmlvc1tpb19pbmRleF0ub3Ap OworCisJCQluZWVkZWRfd2FpdCA9IGZhbHNlOworCQl9CisJCWVsc2UKKwkJeworCQkJbmVlZGVk X3dhaXQgPSBXYWl0UmVhZEJ1ZmZlcnMoJnN0cmVhbS0+aW9zW2lvX2luZGV4XS5vcCk7CisJCX0K IAogCQlBc3NlcnQoc3RyZWFtLT5pb3NfaW5fcHJvZ3Jlc3MgPiAwKTsKIAkJc3RyZWFtLT5pb3Nf aW5fcHJvZ3Jlc3MtLTsKQEAgLTExNTIsNyArMTE3Miw3IEBAIHJlYWRfc3RyZWFtX3Jlc2V0KFJl YWRTdHJlYW0gKnN0cmVhbSkKIAlCdWZmZXIJCWJ1ZmZlcjsKIAogCS8qIFN0b3AgbG9va2luZyBh aGVhZC4gKi8KLQlzdHJlYW0tPmRpc3RhbmNlID0gMDsKKwlzdHJlYW0tPmRpc3RhbmNlID0gLTE7 CiAKIAkvKiBGb3JnZXQgYnVmZmVyZWQgYmxvY2sgbnVtYmVyIGFuZCBmYXN0IHBhdGggc3RhdGUu ICovCiAJc3RyZWFtLT5idWZmZXJlZF9ibG9ja251bSA9IEludmFsaWRCbG9ja051bWJlcjsKLS0g CjIuNTMuMAoK --000000000000f287f9064e6de93c Content-Type: application/octet-stream; name="v20-0013-read_stream-Only-increase-distance-when-waiting-.patch" Content-Disposition: attachment; filename="v20-0013-read_stream-Only-increase-distance-when-waiting-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mngmwp5s5 RnJvbSBiZGM2NzRhZDMyZjE0ZmE5MGIxMGRiNWZiMzMyN2U3NjdiNTQxMjE5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFR1ZSwgMyBNYXIgMjAyNiAxODowMDo1MyAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjIwIDEz LzE3XSByZWFkX3N0cmVhbTogT25seSBpbmNyZWFzZSBkaXN0YW5jZSB3aGVuIHdhaXRpbmcKIGZv ciBJTwoKVGhpcyBhdm9pZHMgaW5jcmVhc2luZyB0aGUgZGlzdGFuY2UgdG8gdGhlIG1heGltdW0g aW4gY2FzZXMgd2hlcmUgdGhlIElPCnN1YnN5c3RlbSBpcyBhbHJlYWR5IGtlZXBpbmcgdXAuIFRo aXMgdHVybnMgb3V0IHRvIGJlIGltcG9ydGFudCBmb3IKcGVyZm9ybWFuY2UgZm9yIHR3byByZWFz b25zOgoKLSBQaW5uaW5nIGEgbG90IG9mIGJ1ZmZlcnMgaXMgbm90IGNoZWFwLiBJZiBhZGRpdGlv bmFsIHBpbnMgYWxsb3cgdXMgdG8gYXZvaWQKICBJTyB3YWl0cywgaXQncyBkZWZpbml0ZWx5IHdv cnRoIGl0LCBidXQgaWYgd2UgY2FuIGFscmVhZHkgZG8gYWxsIHRoZQogIG5lY2Vzc2FyeSByZWFk YWhlYWQgYXQgYSBkaXN0YW5jZSBvZiAxNiwgcmVhZGluZyBhaGVhZCA1MTIgYnVmZmVycyBjYW4K ICBpbmNyZWFzZSB0aGUgQ1BVIG92ZXJoZWFkIHN1YnN0YW50aWFsbHkuICBUaGlzIGlzIHBhcnRp Y3VsYXJseSBub3RpY2VhYmxlCiAgd2hlbiB0aGUgdG8tYmUtcmVhZCBibG9ja3MgYXJlIGFscmVh ZHkgaW4gdGhlIGtlcm5lbCBwYWdlIGNhY2hlLgoKLSBJZiB0aGUgcmVhZCBzdHJlYW0gaXMgcmVh ZCB0byBjb21wbGV0aW9uLCByZWFkaW5nIGluIGRhdGEgZWFybGllciB0aGFuCiAgbmVlZGVkIGlz IG9mIGxpbWl0ZWQgY29uc2VxdWVuY2VzLCBsZWF2aW5nIGFzaWRlIHRoZSBDUFUgY29zdHMgbWVu dGlvbmVkCiAgYWJvdmUuIEJ1dCBpZiB0aGUgcmVhZCBzdHJlYW0gd2lsbCBub3QgYmUgZnVsbHkg Y29uc3VtZWQsIGUuZy4gYmVjYXVzZSBpdCBpcwogIG9uIHRoZSBpbm5lciBzaWRlIG9mIGEgbmVz dGVkIGxvb3Agam9pbiwgdGhlIGFkZGl0aW9uYWwgSU8gY2FuIGJlIGEgc2VyaW91cwogIHBlcmZv cm1hbmNlIGlzc3VlLiBUaGlzIGlzIG5vdCB0aGF0IGNvbW1vbmx5IGEgcHJvYmxlbSBmb3IgY3Vy cmVudCByZWFkCiAgc3RyZWFtIHVzZXJzLCBidXQgdGhlIHVwY29taW5nIHdvcmssIHRvIHVzZSBh IHJlYWQgc3RyZWFtIHRvIGZldGNoIHRhYmxlCiAgcGFnZXMgYXMgcGFydCBvZiBhbiBpbmRleCBz Y2FuLCBmcmVxdWVudGx5IGVuY291bnRlcnMgdGhpcy4KCk5vdGUgdGhhdCB0aGlzIGNvbW1pdCB3 b3VsZCBoYXZlIHN1YnN0YW50aWFsIHBlcmZvcm1hbmNlIGRvd25zaWRlcyB3aXRob3V0CmVhcmxp ZXIgY29tbWl0cy4gSW4gcGFydGljdWxhciB0aGUgZWFybGllciBjb21taXQgdG8gYXZvaWQgZGVj cmVhc2luZyB0aGUKcmVhZGFoZWFkIGRpc3RhbmNlIHdoZW4gdGhlcmUgd2FzIHJlY2VudCBJTyBp cyBjcnVjaWFsLCBhcyBvdGhlcndpc2Ugd2UgdmVyeQpvZnRlbiB3b3VsZCBlbmQgdXAgbm90IHJl YWRpbmcgYWhlYWQgYWdncmVzc2l2ZWx5IGVub3VnaCBhbnltb3JlIHdpdGggdGhpcwpjb21taXQs IGR1ZSB0byBpbmNyZWFzaW5nIHRoZSBkaXN0YW5jZSBsZXNzIG9mdGVuLgoKQXV0aG9yOgpSZXZp ZXdlZC1ieToKRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS8KQmFja3BhdGNoOgotLS0K IHNyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3RyZWFtLmMgfCAzOSArKysrKysrKysrKysr KysrKysrKysrKy0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAzNCBpbnNlcnRpb25zKCspLCA1IGRlbGV0 aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3RyZWFt LmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9yZWFkX3N0cmVhbS5jCmluZGV4IGZhMjdlYzc5 Mi4uNDk5NzE4MzNkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9yZWFkX3N0 cmVhbS5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3RyZWFtLmMKQEAgLTk1 MiwyMiArOTUyLDUxIEBAIHJlYWRfc3RyZWFtX25leHRfYnVmZmVyKFJlYWRTdHJlYW0gKnN0cmVh bSwgdm9pZCAqKnBlcl9idWZmZXJfZGF0YSkKIAl7CiAJCWludDE2CQlpb19pbmRleCA9IHN0cmVh bS0+b2xkZXN0X2lvX2luZGV4OwogCQlpbnQzMgkJZGlzdGFuY2U7CS8qIHdpZGVyIHRlbXBvcmFy eSB2YWx1ZSwgY2xhbXBlZCBiZWxvdyAqLworCQlib29sCQluZWVkZWRfd2FpdDsKIAogCQkvKiBT YW5pdHkgY2hlY2sgdGhhdCB3ZSBzdGlsbCBhZ3JlZSBvbiB0aGUgYnVmZmVycy4gKi8KIAkJQXNz ZXJ0KHN0cmVhbS0+aW9zW2lvX2luZGV4XS5vcC5idWZmZXJzID09CiAJCQkgICAmc3RyZWFtLT5i dWZmZXJzW29sZGVzdF9idWZmZXJfaW5kZXhdKTsKIAotCQlXYWl0UmVhZEJ1ZmZlcnMoJnN0cmVh bS0+aW9zW2lvX2luZGV4XS5vcCk7CisJCW5lZWRlZF93YWl0ID0gV2FpdFJlYWRCdWZmZXJzKCZz dHJlYW0tPmlvc1tpb19pbmRleF0ub3ApOwogCiAJCUFzc2VydChzdHJlYW0tPmlvc19pbl9wcm9n cmVzcyA+IDApOwogCQlzdHJlYW0tPmlvc19pbl9wcm9ncmVzcy0tOwogCQlpZiAoKytzdHJlYW0t Pm9sZGVzdF9pb19pbmRleCA9PSBzdHJlYW0tPm1heF9pb3MpCiAJCQlzdHJlYW0tPm9sZGVzdF9p b19pbmRleCA9IDA7CiAKLQkJLyogTG9vay1haGVhZCBkaXN0YW5jZSByYW1wcyB1cCByYXBpZGx5 IGFmdGVyIHdlIGRvIEkvTy4gKi8KLQkJZGlzdGFuY2UgPSBzdHJlYW0tPmRpc3RhbmNlICogMjsK LQkJZGlzdGFuY2UgPSBNaW4oZGlzdGFuY2UsIHN0cmVhbS0+bWF4X3Bpbm5lZF9idWZmZXJzKTsK LQkJc3RyZWFtLT5kaXN0YW5jZSA9IGRpc3RhbmNlOworCQkvKgorCQkgKiBJZiB0aGUgSU8gd2Fz IGV4ZWN1dGVkIHN5bmNocm9ub3VzbHksIHdlIHdpbGwgbmV2ZXIgc2VlCisJCSAqIFdhaXRSZWFk QnVmZmVycygpIGJsb2NrLiBUaGlzIGlzIHBhcnRpY3VsYXJseSBjcnVjaWFsIHdoZW4KKwkJICog ZWZmZWN0aXZlX2lvX2NvbmN1cnJlbmN5PTAgaXMgdXNlZCwgYXMgYWxsIElPIHdpbGwgYmUKKwkJ ICogc3luY2hyb25vdXMuIFdpdGhvdXQgdHJlYXRpbmcgc3luY2hyb25vdXMgSU8gYXMgaGF2aW5n IHdhaXRlZCwgd2UnZAorCQkgKiBuZXZlciBhbGxvdyB0aGUgZGlzdGFuY2UgdG8gZ2V0IGxhcmdl IGVub3VnaCB0byBhbGxvdyBmb3IgSU8KKwkJICogY29tYmluaW5nLCByZXN1bHRpbmcgaW4gYmFk IHBlcmZvcm1hbmNlLgorCQkgKi8KKwkJaWYgKHN0cmVhbS0+aW9zW2lvX2luZGV4XS5vcC5mbGFn cyAmIFJFQURfQlVGRkVSU19TWU5DSFJPTk9VU0xZKQorCQkJbmVlZGVkX3dhaXQgPSB0cnVlOwor CisJCS8qCisJCSAqIEhhdmUgdGhlIGxvb2stYWhlYWQgZGlzdGFuY2UgcmFtcCB1cCByYXBpZGx5 IGFmdGVyIHdlIG5lZWRlZCB0bworCQkgKiB3YWl0IGZvciBJTy4gV2Ugb25seSBpbmNyZWFzZSB0 aGUgZGlzdGFuY2Ugd2hlbiB3ZSBuZWVkZWQgdG8gd2FpdCwKKwkJICogdG8gYXZvaWQgaW5jcmVh c2luZyB0aGUgZGlzdGFuY2UgZnVydGhlciB0aGFuIG5lY2Vzc2FyeSwgYXMgbG9va2luZworCQkg KiBhaGVhZCB0b28gZmFyIGNhbiBiZSBjb3N0bHksIGJvdGggZHVlIHRvIHRoZSBjb3N0IG9mIHVu bmVjZXNzYXJpbHkKKwkJICogcGlubmluZyBtYW55IGJ1ZmZlcnMgYW5kIGR1ZSB0byBkb2luZyBJ T3MgdGhhdCBtYXkgbmV2ZXIgYmUKKwkJICogY29uc3VtZWQgaWYgdGhlIHN0cmVhbSBpcyBlbmRl ZC9yZXNldCBiZWZvcmUgY29tcGxldGlvbi4KKwkJICoKKwkJICogSWYgd2UgZGlkIG5vdCBuZWVk IHRvIHdhaXQsIHRoZSBjdXJyZW50IGRpc3RhbmNlIHdhcyBldmlkZW50bHkKKwkJICogc3VmZmlj aWVudC4KKwkJICoKKwkJICogTkI6IE1heSBub3QgaW5jcmVhc2UgdGhlIGRpc3RhbmNlIGlmIHdl IGFscmVhZHkgcmVhY2hlZCB0aGUgZW5kIG9mCisJCSAqIHRoZSBzdHJlYW0sIGFzIHN0cmVhbS0+ ZGlzdGFuY2UgPT0gMCBpcyB1c2VkIHRvIGtlZXAgdHJhY2sgb2YKKwkJICogaGF2aW5nIHJlYWNo ZWQgdGhlIGVuZC4KKwkJICovCisJCWlmIChzdHJlYW0tPmRpc3RhbmNlID4gMCAmJiBuZWVkZWRf d2FpdCkKKwkJeworCQkJZGlzdGFuY2UgPSBzdHJlYW0tPmRpc3RhbmNlICogMjsKKwkJCWRpc3Rh bmNlID0gTWluKGRpc3RhbmNlLCBzdHJlYW0tPm1heF9waW5uZWRfYnVmZmVycyk7CisJCQlzdHJl YW0tPmRpc3RhbmNlID0gZGlzdGFuY2U7CisJCX0KIAogCQkvKgogCQkgKiBBcyB3ZSBuZWVkZWQg SU8sIHByZXZlbnQgZGlzdGFuY2UgZnJvbSBiZWluZyByZWR1Y2VkIHdpdGhpbiBvdXIKLS0gCjIu NTMuMAoK --000000000000f287f9064e6de93c Content-Type: application/octet-stream; name="v20-0010-read_stream-Issue-IO-synchronously-while-in-fast.patch" Content-Disposition: attachment; filename="v20-0010-read_stream-Issue-IO-synchronously-while-in-fast.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mngmwp5z8 RnJvbSAyZmE3YjdiN2Y5MjgzNmY0MDBiZWEzNWJjOTA4OTkwZWZlNWZhMmRiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFR1ZSwgMyBNYXIgMjAyNiAxNjoyNTo0MSAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjIwIDEw LzE3XSByZWFkX3N0cmVhbTogSXNzdWUgSU8gc3luY2hyb25vdXNseSB3aGlsZSBpbiBmYXN0CiBw YXRoCgpXaGlsZSBpbiBmYXN0LXBhdGgsIGV4ZWN1dGUgYW55IElPIHRoYXQgd2UgbWlnaHQgZW5j b3VudGVyIHN5bmNocm9ub3VzbHkuCkJlY2F1c2Ugd2UgYXJlLCBpbiB0aGF0IG1vbWVudCwgbm90 IHJlYWRpbmcgYWhlYWQsIGRpc3BhdGNoaW5nIGFueSBvY2Nhc2lvbmFsCklPIHRvIHdvcmtlcnMg aGFzIHRoZSBkaXNwYXRjaCBvdmVyaGVhZCwgd2l0aG91dCBhbnkgcmVhbGlzdGljIGNoYW5jZSBv ZiB0aGUKSU8gY29tcGxldGluZyBiZWZvcmUgd2UgbmVlZCBpdC4KClRoaXMgaGVscHMgaW9fbWV0 aG9kPXdvcmtlciBwZXJmb3JtYW5jZSBmb3Igd29ya2xvYWRzIHRoYXQgaGF2ZSBvbmx5Cm9jY2Fz aW9uYWwgY2FjaGUgbWlzc2VzLCBidXQgd2hlcmUgdGhvc2Ugb2NjYXNpb25hbCBtaXNzZXMgc3Rp bGwgdGFrZSBsb25nCmVub3VnaCB0byBtYXR0ZXIuICBJdCBpcyBsaWtlbHkgdGhpcyBpcyBvbmx5 IG1lYXN1cmFibGUgd2l0aCBmYXN0IGxvY2FsCnN0b3JhZ2Ugb3Igd29ya2xvYWRzIHdpdGggdGhl IGRhdGEgaW4gdGhlIGtlcm5lbCBwYWdlIGNhY2hlLCBhcyB3aXRoIHJlbW90ZQpzdG9yYWdlIHRo ZSBJTyBsYXRlbmN5LCBub3QgdGhlIGRpc3BhdGNoLXRvLXdvcmtlciBsYXRlbmN5LCBpcyB0aGUg ZGV0ZXJtaW5pbmcKZmFjdG9yLgoKQXV0aG9yOgpSZXZpZXdlZC1ieToKRGlzY3Vzc2lvbjogaHR0 cHM6Ly9wb3N0Z3IuZXMvbS8KQmFja3BhdGNoOgotLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYWlv L3JlYWRfc3RyZWFtLmMgfCAyMSArKysrKysrKysrKysrKysrKysrKysKIDEgZmlsZSBjaGFuZ2Vk LCAyMSBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8v cmVhZF9zdHJlYW0uYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3RyZWFtLmMKaW5k ZXggY2Q1NGMxYTc0Li43ODkzZmRmMDMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv YWlvL3JlYWRfc3RyZWFtLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vcmVhZF9zdHJl YW0uYwpAQCAtODMzLDYgKzgzMywyMSBAQCByZWFkX3N0cmVhbV9uZXh0X2J1ZmZlcihSZWFkU3Ry ZWFtICpzdHJlYW0sIHZvaWQgKipwZXJfYnVmZmVyX2RhdGEpCiAJCQlpZiAoc3RyZWFtLT5hZHZp Y2VfZW5hYmxlZCkKIAkJCQlmbGFncyB8PSBSRUFEX0JVRkZFUlNfSVNTVUVfQURWSUNFOwogCisJ CQkvKgorCQkJICogV2hpbGUgaW4gZmFzdC1wYXRoLCBleGVjdXRlIGFueSBJTyB0aGF0IHdlIG1p Z2h0IGVuY291bnRlcgorCQkJICogc3luY2hyb25vdXNseS4gQmVjYXVzZSB3ZSBhcmUsIHJpZ2h0 IG5vdywgb25seSBsb29raW5nIG9uZQorCQkJICogYmxvY2sgYWhlYWQsIGRpc3BhdGNoaW5nIGFu eSBvY2Nhc2lvbmFsIElPIHRvIHdvcmtlcnMgd291bGQKKwkJCSAqIGhhdmUgdGhlIG92ZXJoZWFk IG9mIGRpc3BhdGNoaW5nIHRvIHdvcmtlcnMsIHdpdGhvdXQgYW55CisJCQkgKiByZWFsaXN0aWMg Y2hhbmNlIG9mIHRoZSBJTyBjb21wbGV0aW5nIGJlZm9yZSB3ZSBuZWVkIGl0LiBXZQorCQkJICog d2lsbCBzd2l0Y2ggdG8gbm9uLXN5bmNocm9ub3VzIElPIGFmdGVyIHRoaXMuCisJCQkgKgorCQkJ ICogQXJndWFibHkgd2Ugc2hvdWxkIGRvIHNvIG9ubHkgZm9yIHdvcmtlciwgYXMgdGhlcmUncyBm YXIgbGVzcworCQkJICogZGlzcGF0Y2ggb3ZlcmhlYWQgd2l0aCBpb191cmluZy4gSG93ZXZlciwg dGVzdHMgc28gZmFyIGhhdmUgbm90CisJCQkgKiBzaG93biBhIGNsZWFyIGRvd25zaWRlIGFuZCBh ZGRpdGlvbmFsIGlvX21ldGhvZCBhd2FyZW5lc3MgaGVyZQorCQkJICogc2VlbXMgbm90IGdyZWF0 IGZyb20gYW4gYWJzdHJhY3Rpb24gUE9WLgorCQkJICovCisJCQlmbGFncyB8PSBSRUFEX0JVRkZF UlNfU1lOQ0hST05PVVNMWTsKKwogCQkJLyoKIAkJCSAqIFBpbiBhIGJ1ZmZlciBmb3IgdGhlIG5l eHQgY2FsbC4gIFNhbWUgYnVmZmVyIGVudHJ5LCBhbmQKIAkJCSAqIGFyYml0cmFyeSBJL08gZW50 cnkgKHRoZXkncmUgYWxsIGZyZWUpLiAgV2UgZG9uJ3QgaGF2ZSB0bwpAQCAtODYwLDYgKzg3NSwx MiBAQCByZWFkX3N0cmVhbV9uZXh0X2J1ZmZlcihSZWFkU3RyZWFtICpzdHJlYW0sIHZvaWQgKipw ZXJfYnVmZmVyX2RhdGEpCiAJCQlzdHJlYW0tPmlvc19pbl9wcm9ncmVzcyA9IDE7CiAJCQlzdHJl YW0tPmlvc1swXS5idWZmZXJfaW5kZXggPSBvbGRlc3RfYnVmZmVyX2luZGV4OwogCQkJc3RyZWFt LT5zZXFfYmxvY2tudW0gPSBuZXh0X2Jsb2NrbnVtICsgMTsKKworCQkJLyoKKwkJCSAqIFhYWDog SXQgbWlnaHQgYmUgd29ydGggdHJpZ2dlcmluZyBhZGRpdGlvbmFsIHJlYWRhaGVhZCBoZXJlLCB0 bworCQkJICogYXZvaWQgaGF2aW5nIHRvIGVmZmVjdGl2ZWx5IGRvIGFub3RoZXIgc3luY2hyb25v dXMgSU8gZm9yIHRoZQorCQkJICogbmV4dCBibG9jayAoaWYgaXQgd2VyZSBhbHNvIGEgbWlzcyku CisJCQkgKi8KIAkJfQogCQllbHNlCiAJCXsKLS0gCjIuNTMuMAoK --000000000000f287f9064e6de93c Content-Type: application/octet-stream; name="v20-0012-aio-io_uring-Trigger-async-processing-for-large-.patch" Content-Disposition: attachment; filename="v20-0012-aio-io_uring-Trigger-async-processing-for-large-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mngmwp5v6 RnJvbSA5NWJmNjE0ZmU1NWNmNTA5YzAzZWMyY2JlN2UxOTFiZjBlMjcwYTUxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFR1ZSwgMyBNYXIgMjAyNiAyMDoyMzo1NSAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjIwIDEy LzE3XSBhaW86IGlvX3VyaW5nOiBUcmlnZ2VyIGFzeW5jIHByb2Nlc3NpbmcgZm9yIGxhcmdlCiBJ T3MKCmlvX21ldGhvZD1pb191cmluZyBoYXMgYSBoZXVyaXN0aWMgdG8gdHJpZ2dlciBhc3luY2hy b25vdXMgcHJvY2Vzc2luZyBvZiBJT3MKb25jZSB0aGUgSU8gZGVwdGguIFRoYXQgaGV1cmlzdGlj IGlzIGltcG9ydGFudCB3aGVuIGRvaW5nIGJ1ZmZlcmVkIElPIGZyb20gdGhlCmtlcm5lbCBwYWdl IGNhY2hlLCB0byBhbGxvdyBwYXJhbGxlbGl6aW5nIG9mIHRoZSBtZW1vcnkgY29weSwgYXMgb3Ro ZXJ3aXNlCmlvX21ldGhvZD1pb191cmluZyB3b3VsZCBiZSBhIGxvdCBzbG93ZXIgdGhhbiBpb19t ZXRob2Q9d29ya2VyIGluIHRoYXQgY2FzZS4KCkFuIHVwY29taW5nIGNvbW1pdCB3aWxsIG1ha2Ug cmVhZF9zdHJlYW0uYyBvbmx5IGluY3JlYXNlIHRoZSByZWFkYWhlYWQKZGlzdGFuY2UgaWYgd2Ug bmVlZGVkIHRvIHdhaXQgZm9yIElPIHRvIGNvbXBsZXRlLiBJZiB0by1iZS1yZWFkIGRhdGEgaXMg aW4gdGhlCmtlcm5lbCBwYWdlIGNhY2hlLCBpb191cmluZyB3aWxsIHN5bmNocm9ub3VzbHkgZXhl Y3V0ZSBJTywgdW5sZXNzIHRoZSBJTyBpcwpmbGFnZ2VkIGFzIGFzeW5jLiAgVGhlcmVmb3JlIHRo ZSBhZm9yZW1lbnRpb25lZCBjaGFuZ2UgaW4gcmVhZF9zdHJlYW0uYwpoZXVyaXN0aWMgd291bGQg bGVhZCB0byBhIHN1YnN0YW50aWFsIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gd2l0aCBpb191cmlu Zwp3aGVuIGRhdGEgaXMgaW4gdGhlIHBhZ2UgY2FjaGUsIGFzIHdlIHdvdWxkIG5ldmVyIHJlYWNo IGEgZGVlcCBlbm91Z2ggcXVldWUgdG8KYWN0dWFsbHkgdHJpZ2dlciB0aGUgZXhpc3RpbmcgaGV1 cmlzdGljLgoKUGFyYWxsZWxpemluZyB0aGUgY29weSBmcm9tIHRoZSBwYWdlIGNhY2hlIGlzIG1h aW5seSBpbXBvcnRhbnQgd2hlbiBkb2luZyBhCmxvdCBvZiBJTywgd2hpY2ggY29tbW9ubHkgaXMg b25seSBwb3NzaWJsZSB3aGVuIGRvaW5nIGxhcmdlbHkgc2VxdWVudGlhbCBJTy4KClRoZSByZWFz b24gd2UgZG9uJ3QganVzdCBtYXJrIGFsbCBpb191cmluZyBJT3MgYXMgYXN5bmNocm9ub3VzIGlz IHRoYXQgdGhlCmRpc3BhdGNoIHRvIGEga2VybmVsIHRocmVhZCBoYXMgb3ZlcmhlYWQuIFRoaXMg b3ZlcmhlYWQgaXMgbW9zdGx5IG5vdGljZWFibGUKd2l0aCBzbWFsbCByYW5kb20gSU9zIHdpdGgg YSBsb3cgcXVldWUgZGVwdGgsIGFzIGluIHRoYXQgY2FzZSB0aGUgZ2FpbiBmcm9tCnBhcmFsbGVs aXppbmcgdGhlIG1lbW9yeSBjb3B5IGlzIHNtYWxsIGFuZCB0aGUgbGF0ZW5jeSBjb3N0IGhpZ2gu CgpUaGUgZmFjdHMgZnJvbSB0aGUgdHdvIHByaW9yIHBhcmFncmFwaHMgc2hvdyBhIHdheSBvdXQ6 IFVzZSB0aGUgc2l6ZSBvZiB0aGUgSU8KaW4gYWRkaXRpb24gdG8gdGhlIGRlcHRoIG9mIHRoZSBx dWV1ZSB0byB0cmlnZ2VyIGFzeW5jaHJvbm91cyBwcm9jZXNzaW5nLgoKT25lIG1pZ2h0IHRoaW5r IHRoYXQganVzdCB1c2luZyB0aGUgSU8gc2l6ZSBtaWdodCBiZSBlbm91Z2gsIGJ1dApleHBlcmlt ZW50YXRpb24gaGFzIHNob3duIHRoYXQgbm90IHRvIGJlIHRoZSBjYXNlIC0gd2l0aCBkZWVwIGxv b2stYWhlYWQKZGlzdGFuY2VzIGJlaW5nIGFibGUgdG8gcGFyYWxsZWxpemUgdGhlIG1lbW9yeSBj b3B5IGlzIGltcG9ydGFudCBldmVuIHdpdGgKc21hbGxlciBJT3MuCgpBdXRob3I6ClJldmlld2Vk LWJ5OgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tLwpCYWNrcGF0Y2g6Ci0tLQogc3Jj L2JhY2tlbmQvc3RvcmFnZS9haW8vbWV0aG9kX2lvX3VyaW5nLmMgfCA5MCArKysrKysrKysrKysr KysrKy0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDY4IGluc2VydGlvbnMoKyksIDIyIGRlbGV0aW9u cygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL21ldGhvZF9pb191cmlu Zy5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vbWV0aG9kX2lvX3VyaW5nLmMKaW5kZXggMzk5 ODRkZjMxLi4wYzhmZTQ1OTggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL21l dGhvZF9pb191cmluZy5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL21ldGhvZF9pb191 cmluZy5jCkBAIC00MDksNyArNDA5LDYgQEAgc3RhdGljIGludAogcGdhaW9fdXJpbmdfc3VibWl0 KHVpbnQxNiBudW1fc3RhZ2VkX2lvcywgUGdBaW9IYW5kbGUgKipzdGFnZWRfaW9zKQogewogCXN0 cnVjdCBpb191cmluZyAqdXJpbmdfaW5zdGFuY2UgPSAmcGdhaW9fbXlfdXJpbmdfY29udGV4dC0+ aW9fdXJpbmdfcmluZzsKLQlpbnQJCQlpbl9mbGlnaHRfYmVmb3JlID0gZGNsaXN0X2NvdW50KCZw Z2Fpb19teV9iYWNrZW5kLT5pbl9mbGlnaHRfaW9zKTsKIAogCUFzc2VydChudW1fc3RhZ2VkX2lv cyA8PSBQR0FJT19TVUJNSVRfQkFUQ0hfU0laRSk7CiAKQEAgLTQyNSwyNyArNDI0LDYgQEAgcGdh aW9fdXJpbmdfc3VibWl0KHVpbnQxNiBudW1fc3RhZ2VkX2lvcywgUGdBaW9IYW5kbGUgKipzdGFn ZWRfaW9zKQogCiAJCXBnYWlvX2lvX3ByZXBhcmVfc3VibWl0KGlvaCk7CiAJCXBnYWlvX3VyaW5n X3NxX2Zyb21faW8oaW9oLCBzcWUpOwotCi0JCS8qCi0JCSAqIGlvX3VyaW5nIGV4ZWN1dGVzIElP IGluIHByb2Nlc3MgY29udGV4dCBpZiBwb3NzaWJsZS4gVGhhdCdzCi0JCSAqIGdlbmVyYWxseSBn b29kLCBhcyBpdCByZWR1Y2VzIGNvbnRleHQgc3dpdGNoaW5nLiBXaGVuIHBlcmZvcm1pbmcgYQot CQkgKiBsb3Qgb2YgYnVmZmVyZWQgSU8gdGhhdCBtZWFucyB0aGF0IGNvcHlpbmcgYmV0d2VlbiBw YWdlIGNhY2hlIGFuZAotCQkgKiB1c2Vyc3BhY2UgbWVtb3J5IGhhcHBlbnMgaW4gdGhlIGZvcmVn cm91bmQsIGFzIGl0IGNhbid0IGJlCi0JCSAqIG9mZmxvYWRlZCB0byBETUEgaGFyZHdhcmUgYXMg aXMgcG9zc2libGUgd2hlbiB1c2luZyBkaXJlY3QgSU8uIFdoZW4KLQkJICogZXhlY3V0aW5nIGEg bG90IG9mIGJ1ZmZlcmVkIElPIHRoaXMgY2F1c2VzIGlvX3VyaW5nIHRvIGJlIHNsb3dlcgotCQkg KiB0aGFuIHdvcmtlciBtb2RlLCBhcyB3b3JrZXIgbW9kZSBwYXJhbGxlbGl6ZXMgdGhlIGNvcHlp bmcuIGlvX3VyaW5nCi0JCSAqIGNhbiBiZSB0b2xkIHRvIG9mZmxvYWQgd29yayB0byB3b3JrZXIg dGhyZWFkcyBpbnN0ZWFkLgotCQkgKgotCQkgKiBJZiBhbiBJTyBpcyBidWZmZXJlZCBJTyBhbmQg d2UgYWxyZWFkeSBoYXZlIElPcyBpbiBmbGlnaHQgb3IKLQkJICogbXVsdGlwbGUgSU9zIGFyZSBi ZWluZyBzdWJtaXR0ZWQsIHdlIHRodXMgdGVsbCBpb191cmluZyB0byBleGVjdXRlCi0JCSAqIHRo ZSBJTyBpbiB0aGUgYmFja2dyb3VuZC4gV2UgZG9uJ3QgZG8gc28gZm9yIHRoZSBmaXJzdCBmZXcg SU9zCi0JCSAqIGJlaW5nIHN1Ym1pdHRlZCBhcyBleGVjdXRpbmcgaW4gdGhpcyBwcm9jZXNzJyBj b250ZXh0IGhhcyBsb3dlcgotCQkgKiBsYXRlbmN5LgotCQkgKi8KLQkJaWYgKGluX2ZsaWdodF9i ZWZvcmUgPiA0ICYmIChpb2gtPmZsYWdzICYgUEdBSU9fSEZfQlVGRkVSRUQpKQotCQkJaW9fdXJp bmdfc3FlX3NldF9mbGFncyhzcWUsIElPU1FFX0FTWU5DKTsKLQotCQlpbl9mbGlnaHRfYmVmb3Jl Kys7CiAJfQogCiAJd2hpbGUgKHRydWUpCkBAIC03MDEsMTAgKzY3OSw2NCBAQCBwZ2Fpb191cmlu Z19jaGVja19vbmUoUGdBaW9IYW5kbGUgKmlvaCwgdWludDY0IHJlZl9nZW5lcmF0aW9uKQogCUxX TG9ja1JlbGVhc2UoJm93bmVyX2NvbnRleHQtPmNvbXBsZXRpb25fbG9jayk7CiB9CiAKKy8qCisg KiBpb191cmluZyBleGVjdXRlcyBJTyBpbiBwcm9jZXNzIGNvbnRleHQgaWYgcG9zc2libGUuIFRo YXQncyBnZW5lcmFsbHkgZ29vZCwKKyAqIGFzIGl0IHJlZHVjZXMgY29udGV4dCBzd2l0Y2hpbmcu IFdoZW4gcGVyZm9ybWluZyBhIGxvdCBvZiBidWZmZXJlZCBJTyB0aGF0CisgKiBtZWFucyB0aGF0 IGNvcHlpbmcgYmV0d2VlbiBwYWdlIGNhY2hlIGFuZCB1c2Vyc3BhY2UgbWVtb3J5IGhhcHBlbnMg aW4gdGhlCisgKiBmb3JlZ3JvdW5kLCBhcyBpdCBjYW4ndCBiZSBvZmZsb2FkZWQgdG8gRE1BIGhh cmR3YXJlIGFzIGlzIHBvc3NpYmxlIHdoZW4KKyAqIHVzaW5nIGRpcmVjdCBJTy4gV2hlbiBleGVj dXRpbmcgYSBsb3Qgb2YgYnVmZmVyZWQgSU8gdGhpcyBjYXVzZXMgaW9fdXJpbmcKKyAqIHRvIGJl IHNsb3dlciB0aGFuIHdvcmtlciBtb2RlLCBhcyB3b3JrZXIgbW9kZSBwYXJhbGxlbGl6ZXMgdGhl CisgKiBjb3B5aW5nLiBpb191cmluZyBjYW4gYmUgdG9sZCB0byBvZmZsb2FkIHdvcmsgdG8gd29y a2VyIHRocmVhZHMgaW5zdGVhZC4KKyAqCisgKiBJZiB0aGUgSU9zIGFyZSBzbWFsbCwgd2Ugb25s eSBiZW5lZml0IGZyb20gZm9yY2luZyB0aGluZ3MgaW50byB0aGUKKyAqIGJhY2tncm91bmQgaWYg dGhlcmUgaXMgYSBsb3Qgb2YgSU8sIGFzIG90aGVyd2lzZSB0aGUgb3ZlcmhlYWQgZnJvbSBjb250 ZXh0CisgKiBzd2l0Y2hpbmcgaXMgaGlnaGVyIHRoYW4gdGhlIGdhaW4uCisgKgorICogSWYgSU9z IGFyZSBsYXJnZSwgdGhlcmUgaXMgYmVuZWZpdCBmcm9tIGFzeW5jaHJvbm91cyBwcm9jZXNzaW5n IGF0IGxvd2VyCisgKiBxdWV1ZSBkZXB0aHMsIGFzIElPIGxhdGVuY3kgaXMgbGVzcyBvZiBhIGNy dWNpYWwgZmFjdG9yIGFuZCBwYXJhbGxlbGl6aW5nCisgKiBtZW1vcnkgY29waWVzIGlzIG1vcmUg aW1wb3J0YW50LiAgSW4gYWRkaXRpb24sIGl0IGlzIGltcG9ydGFudCB0byB0cmlnZ2VyCisgKiBh c3luY2hyb25vdXMgcHJvY2Vzc2luZyBldmVuIGF0IGxvdyBxdWV1ZSBkZXB0aCwgYXMgd2l0aCBm b3JlZ3JvdW5kCisgKiBwcm9jZXNzaW5nIHdlIG1pZ2h0IG5ldmVyIGFjdHVhbGx5IHJlYWNoIGRl ZXAgZW5vdWdoIElPIGRlcHRocyB0byB0cmlnZ2VyCisgKiBhc3luY2hyb25vdXMgcHJvY2Vzc2lu Zywgd2hpY2ggaW4gdHVybiB3b3VsZCBkZXByaXZlIHJlYWRhaGVhZCBjb250cm9sCisgKiBsb2dp YyBvZiBpbmZvcm1hdGlvbiBhYm91dCB3aGV0aGVyIGEgZGVlcGVyIGxvb2stYWhlYWQgZGlzdGFu Y2Ugd291bGQgYmUKKyAqIGFkdmFudGFnZW91cy4KKyAqCisgKiBXZSBoYXZlIGRvbmUgc29tZSBi YXNpYyBiZW5jaG1hcmtpbmcgdG8gdmFsaWRhdGUgdGhlIHRocmVzaG9sZHMgdXNlZCwgYnV0Cisg KiBpdCdzIHF1aXRlIHBsYXVzaWJsZSB0aGF0IHRoZXJlIGFyZSBiZXR0ZXIgdmFsdWVzLgorICov CitzdGF0aWMgYm9vbAorcGdhaW9fdXJpbmdfc2hvdWxkX3VzZV9hc3luYyhQZ0Fpb0hhbmRsZSAq aW9oLCBzaXplX3QgaW9fc2l6ZSkKK3sKKwkvKgorCSAqIFdpdGggRElPIHRoZXJlJ3Mgbm8gYmVu ZWZpdCBmcm9tIGZvcmNpbmcgYXN5bmNocm9ub3VzIHByb2Nlc3NpbmcsIGFzCisJICogaW9fdXJp bmcgd2lsbCBuZXZlciBwcm9jZXNzIElPIGNvbXBsZXRpb25zIGluIHRoZSBmb3JlZ3JvdW5kLiBU aGUKKwkgKiBrZXJuZWwgd2lsbCB1c2Ugd29ya2VyIHRocmVhZHMgd2hlcmUgYXBwcm9wcmlhdGUu CisJICovCisJaWYgKCEoaW9oLT5mbGFncyAmIFBHQUlPX0hGX0JVRkZFUkVEKSkKKwkJcmV0dXJu IGZhbHNlOworCisJLyoKKwkgKiBPbmNlIHRoZSBJTyBxdWV1ZSBkZXB0aCBpcyBub3QgdGhhdCBz aGFsbG93IGFueW1vcmUsIHRoZSBvdmVyaGVhZCBvZgorCSAqIGRpc3BhdGNoaW5nIHRvIHRoZSBi YWNrZ3JvdW5kIGlzIGEgbGVzcyBzaWduaWZpY2FudCBmYWN0b3IuCisJICovCisJaWYgKGRjbGlz dF9jb3VudCgmcGdhaW9fbXlfYmFja2VuZC0+aW5fZmxpZ2h0X2lvcykgPiA0KQorCQlyZXR1cm4g dHJ1ZTsKKworCS8qCisJICogSWYgdGhlIElPIGlzIGxhcmdlciwgdGhlIGdhaW5zIGZyb20gcGFy YWxsZWxpemluZyB0aGUgbWVtb3J5IGNvcHkgYXJlCisJICogbGFyZ2VyIGFuZCB0eXBpY2FsbHkg dGhlIGltcGFjdCBvZiB0aGUgbGF0ZW5jeSBpcyBzbWFsbGVyLgorCSAqLworCWlmIChpb19zaXpl ID49IChCTENLU1ogKiA0KSkKKwkJcmV0dXJuIHRydWU7CisKKwlyZXR1cm4gZmFsc2U7Cit9CisK IHN0YXRpYyB2b2lkCiBwZ2Fpb191cmluZ19zcV9mcm9tX2lvKFBnQWlvSGFuZGxlICppb2gsIHN0 cnVjdCBpb191cmluZ19zcWUgKnNxZSkKIHsKIAlzdHJ1Y3QgaW92ZWMgKmlvdjsKKwlzaXplX3QJ CWlvX3NpemUgPSAwOwogCiAJc3dpdGNoICgoUGdBaW9PcCkgaW9oLT5vcCkKIAl7CkBAIC03MTcs NiArNzQ5LDggQEAgcGdhaW9fdXJpbmdfc3FfZnJvbV9pbyhQZ0Fpb0hhbmRsZSAqaW9oLCBzdHJ1 Y3QgaW9fdXJpbmdfc3FlICpzcWUpCiAJCQkJCQkJCSAgIGlvdi0+aW92X2Jhc2UsCiAJCQkJCQkJ CSAgIGlvdi0+aW92X2xlbiwKIAkJCQkJCQkJICAgaW9oLT5vcF9kYXRhLnJlYWQub2Zmc2V0KTsK KworCQkJCWlvX3NpemUgPSBpb3YtPmlvdl9sZW47CiAJCQl9CiAJCQllbHNlCiAJCQl7CkBAIC03 MjYsNyArNzYwLDEzIEBAIHBnYWlvX3VyaW5nX3NxX2Zyb21faW8oUGdBaW9IYW5kbGUgKmlvaCwg c3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKQogCQkJCQkJCQkJaW9oLT5vcF9kYXRhLnJlYWQuaW92 X2xlbmd0aCwKIAkJCQkJCQkJCWlvaC0+b3BfZGF0YS5yZWFkLm9mZnNldCk7CiAKKwkJCQlmb3Ig KGludCBpID0gMDsgaSA8IGlvaC0+b3BfZGF0YS5yZWFkLmlvdl9sZW5ndGg7IGkrKywgaW92Kysp CisJCQkJCWlvX3NpemUgKz0gaW92LT5pb3ZfbGVuOwogCQkJfQorCisJCQlpZiAocGdhaW9fdXJp bmdfc2hvdWxkX3VzZV9hc3luYyhpb2gsIGlvX3NpemUpKQorCQkJCWlvX3VyaW5nX3NxZV9zZXRf ZmxhZ3Moc3FlLCBJT1NRRV9BU1lOQyk7CisKIAkJCWJyZWFrOwogCiAJCWNhc2UgUEdBSU9fT1Bf V1JJVEVWOgpAQCAtNzQ3LDYgKzc4NywxMiBAQCBwZ2Fpb191cmluZ19zcV9mcm9tX2lvKFBnQWlv SGFuZGxlICppb2gsIHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSkKIAkJCQkJCQkJCSBpb2gtPm9w X2RhdGEud3JpdGUuaW92X2xlbmd0aCwKIAkJCQkJCQkJCSBpb2gtPm9wX2RhdGEud3JpdGUub2Zm c2V0KTsKIAkJCX0KKworCQkJLyoKKwkJCSAqIEZvciBub3cgZG9uJ3QgdHJpZ2dlciB1c2Ugb2Yg SU9TUUVfQVNZTkMgZm9yIHdyaXRlcywgaXQncyBub3QKKwkJCSAqIGNsZWFyIHRoZXJlIGlzIGEg cGVyZm9ybWFuY2UgYmVuZWZpdCBpbiBkb2luZyBzby4KKwkJCSAqLworCiAJCQlicmVhazsKIAog CQljYXNlIFBHQUlPX09QX0lOVkFMSUQ6Ci0tIAoyLjUzLjAKCg== --000000000000f287f9064e6de93c Content-Type: application/octet-stream; name="v20-0011-read_stream-Prevent-distance-from-decaying-too-q.patch" Content-Disposition: attachment; filename="v20-0011-read_stream-Prevent-distance-from-decaying-too-q.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mngmwp5x7 RnJvbSA2NmJiZTI1Y2NkN2YyYWYzMzU5NzBhMTFlODA4ZGE5Y2M5YWM5Yjg1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFNhdCwgMjggTWFyIDIwMjYgMTA6NTE6NDQgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyMCAx MS8xN10gcmVhZF9zdHJlYW06IFByZXZlbnQgZGlzdGFuY2UgZnJvbSBkZWNheWluZyB0b28KIHF1 aWNrbHkKClVudGlsIG5vdyB3ZSByZWR1Y2VkIHRoZSBsb29rLWFoZWFkIGRpc3RhbmNlIGJ5IDEg b24gZXZlcnkgaGl0LCBhbmQgZG91YmxlZCBpdApvbiBldmVyeSBtaXNzLiBUaGF0IGlzIHByb2Js ZW1hdGljIGJlY2F1c2UgdGhlcmUgYXJlIHZlcnkgY29tbW9uIElPIHBhdHRlcm5zCndoZXJlIHRo aXMgcHJldmVudHMgdXMgZnJvbSBldmVyIHJlYWNoaW5nIGEgc3VmZmljaWVudGx5IGhpZ2ggZGlz dGFuY2UgKGUuZy4gYQptaXNzIGZvbGxvd2VkIGJ5IGEgaGl0IHdpbGwgbmV2ZXIgaGF2ZSB0aGUg ZGlzdGFuY2UgZ3JvdyBiZXlvbmQgMikuIEluIG1hbnkKc3VjaCBjYXNlcywgaWYgd2UgaGFkIGV2 ZXIgcmVhY2hlZCBhIHN1ZmZpY2llbnQgbG9vay1haGVhZCBkaXN0YW5jZSwgdGhpbmdzCndvdWxk IGhhdmUgYmVlbiBmaW5lLCBiZWNhdXNlIHdlIGdyb3cgdGhlIGRpc3RhbmNlIGZhc3RlciB0aGFu IHdlIGRlY3JlYXNlIGl0LgoKT25lIG1pZ2h0IHRoaW5rIHRoYXQgdGhlIG1vc3Qgb2J2aW91cyBh bnN3ZXIgdG8gdGhpcyBwcm9ibGVtIHdvdWxkIGJlIHRvIG5ldmVyCnJlZHVjZSB0aGUgZGlzdGFu Y2UuIEhvd2V2ZXIsIHRoYXQgd291bGQgbm90IHdvcmsgd2VsbCwgYXMgKHBhcnRpY3VsYXJseSB3 aXRoCnVwY29taW5nIHVzZXJzIG9mIHJlYWQgc3RyZWFtcyksIGl0IGlzIHJlYXNvbmFibHkgY29t bW9uIHRvIGF0IGZpcnN0IGhhdmUgYQpsb3Qgb2YgbWlzc2VzIGFuZCB0aGVuIHRvIHRyYW5zaXRp b24gdG8gYSBmdWxseSBjYWNoZWQgd29ya2xvYWQsIGUuZy4gYmVjYXVzZQp0aGUgc2FtZSBibG9j a3MgYXJlIG5lZWRlZCByZXBlYXRlZGx5IHdpdGhpbiBvbmUgc3RyZWFtLiBEb2luZyB1bm5lY2Vz c2FyaWx5CmRlZXAgcmVhZGFoZWFkIGNhbiBiZSBjb3N0bHksIGR1ZSB0byBoYXZpbmcgdG8gcGlu IGEgbG90IG1vcmUgYnVmZmVycywgd2hpY2gKaW5jcmVhc2VzIENQVSBvdmVyaGVhZC4KCkJlY2F1 c2UgdGhlIGNvc3Qgb2YgYSBzeW5jaHJvbm91c2x5IGhhbmRsZWQgbWlzcyBjYW4gYmUgdmVyeSBo aWdoIChtdWx0aXBsZQptaWxsaXNlY29uZHMgZm9yIGV2ZXJ5IElPIHdpdGggY29tbW9ubHkgdXNl ZCBzdG9yYWdlKSBjb21wYXJlZCB0byB0aGUgQ1BVCm92ZXJoZWFkIG9mIGtlZXBpbmcgdGhlIGRp c3RhbmNlIHRvbyBoaWdoLCB3ZSB3YW50IHRvIGVyciBvbiB0aGUgc2lkZSBvZiBub3QKcmVkdWNp bmcgdGhlIGRpc3RhbmNlIHRvbyBlYXJseS4KClRoZSBpbnNpZ2h0IHRoYXQgYSBkZWNyZWFzZSBv ZiB0aGUgZGlzdGFuY2UgYnkgMSBhdCBldmVyIGhpdCBtYXkgYmUgb2sgYXQKbGFyZ2UgZGlzdGFu Y2VzLCBidXQgbm90IGF0IGxvdyBkaXN0YW5jZXMsIHNob3dzIGEgd2F5IG91dDogSWYgd2Ugb25s eSBhbGxvdwpkZWNyZWFzaW5nIHRoZSBkaXN0YW5jZSBvbmNlIHRoZXJlIHdlcmUgbm8gbWlzc2Vz IGZvciBvdXIgbWF4aW11bSBsb29rLWFoZWFkCmRpc3RhbmNlLCB3ZSB3aWxsIGtlZXAgdGhlIGRp c3RhbmNlIGhpZ2ggYXMgbG9uZyBhcyByZWFkYWhlYWQgaGFzIGEgY2hhbmNlIHRvCmRvIElPIGFz eW5jaHJvbm91c2x5LCBidXQgbm90IGNvbW1vbmx5IHdoZW4gbm90LgoKU2V2ZXJhbCBmb2xrcyBo YXZlIHdyaXR0ZW4gdmFyaWFudHMgb2YgdGhpcyBwYXRjaCwgYXQgbGVhc3QgVGhvbWFzIE11bnJv LApNZWxhbmllIFBsYWdlbWFuIGFuZCBJIGFsbCBoYXZlIHdyaXR0ZW4gdmFyaWFudHMgb2YgdGhp cy4KCkF1dGhvcjoKUmV2aWV3ZWQtYnk6CkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20v CkJhY2twYXRjaDoKLS0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9yZWFkX3N0cmVhbS5jIHwg MzYgKysrKysrKysrKysrKysrKysrKysrKysrLS0tCiAxIGZpbGUgY2hhbmdlZCwgMzMgaW5zZXJ0 aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdl L2Fpby9yZWFkX3N0cmVhbS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vcmVhZF9zdHJlYW0u YwppbmRleCA3ODkzZmRmMDMuLmZhMjdlYzc5MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3Rv cmFnZS9haW8vcmVhZF9zdHJlYW0uYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9yZWFk X3N0cmVhbS5jCkBAIC05OSw2ICs5OSw3IEBAIHN0cnVjdCBSZWFkU3RyZWFtCiAJaW50MTYJCWZv cndhcmRlZF9idWZmZXJzOwogCWludDE2CQlwaW5uZWRfYnVmZmVyczsKIAlpbnQxNgkJZGlzdGFu Y2U7CisJdWludDE2CQlkaXN0YW5jZV9kZWNheV9ob2xkb2ZmOwogCWludDE2CQlpbml0aWFsaXpl ZF9idWZmZXJzOwogCWludDE2CQlyZXN1bWVfZGlzdGFuY2U7CiAJaW50CQkJcmVhZF9idWZmZXJz X2ZsYWdzOwpAQCAtMzY0LDkgKzM2NSwyMiBAQCByZWFkX3N0cmVhbV9zdGFydF9wZW5kaW5nX3Jl YWQoUmVhZFN0cmVhbSAqc3RyZWFtKQogCS8qIFJlbWVtYmVyIHdoZXRoZXIgd2UgbmVlZCB0byB3 YWl0IGJlZm9yZSByZXR1cm5pbmcgdGhpcyBidWZmZXIuICovCiAJaWYgKCFuZWVkX3dhaXQpCiAJ ewotCQkvKiBMb29rLWFoZWFkIGRpc3RhbmNlIGRlY2F5cywgbm8gSS9PIG5lY2Vzc2FyeS4gKi8K LQkJaWYgKHN0cmVhbS0+ZGlzdGFuY2UgPiAxKQotCQkJc3RyZWFtLT5kaXN0YW5jZS0tOworCQkv KgorCQkgKiBJZiB0aGVyZSBjdXJyZW50bHkgaXMgbm8gSU8gaW4gcHJvZ3Jlc3MsIGFuZCB3ZSBo YXZlIG5vdCBuZWVkZWQgdG8KKwkJICogaXNzdWUgSU8gcmVjZW50bHksIGRlY2F5IHRoZSBsb29r LWFoZWFkIGRpc3RhbmNlLiAgV2UgZGV0ZWN0IGlmIHdlCisJCSAqIGhhZCB0byBpc3N1ZSBJTyBy ZWNlbnRseSBieSBoYXZpbmcgYSBkZWNheSBob2xkb2ZmIHRoYXQncyBzZXQgdG8KKwkJICogdGhl IG1heCBsb29rLWFoZWFkIGRpc3RhbmNlIHdoZW5ldmVyIHdlIG5lZWQgdG8gZG8gSU8uICBUaGlz IGlzCisJCSAqIGltcG9ydGFudCB0byBlbnN1cmUgd2UgZXZlbnR1YWxseSByZWFjaCBhIGhpZ2gg ZW5vdWdoIGRpc3RhbmNlIHRvCisJCSAqIHBlcmZvcm0gSU8gYXN5bmNocm9ub3VzbHkgd2hlbiBz dGFydGluZyBvdXQgd2l0aCBhIHNtYWxsIGxvb2stYWhlYWQKKwkJICogZGlzdGFuY2UuCisJCSAq LworCQlpZiAoc3RyZWFtLT5kaXN0YW5jZSA+IDEgJiYgc3RyZWFtLT5pb3NfaW5fcHJvZ3Jlc3Mg PT0gMCkKKwkJeworCQkJaWYgKHN0cmVhbS0+ZGlzdGFuY2VfZGVjYXlfaG9sZG9mZiA9PSAwKQor CQkJCXN0cmVhbS0+ZGlzdGFuY2UtLTsKKwkJCWVsc2UKKwkJCQlzdHJlYW0tPmRpc3RhbmNlX2Rl Y2F5X2hvbGRvZmYtLTsKKwkJfQogCX0KIAllbHNlCiAJewpAQCAtNzAyLDYgKzcxNiw3IEBAIHJl YWRfc3RyZWFtX2JlZ2luX2ltcGwoaW50IGZsYWdzLAogCXN0cmVhbS0+c2VxX2Jsb2NrbnVtID0g SW52YWxpZEJsb2NrTnVtYmVyOwogCXN0cmVhbS0+c2VxX3VudGlsX3Byb2Nlc3NlZCA9IEludmFs aWRCbG9ja051bWJlcjsKIAlzdHJlYW0tPnRlbXBvcmFyeSA9IFNtZ3JJc1RlbXAoc21ncik7CisJ c3RyZWFtLT5kaXN0YW5jZV9kZWNheV9ob2xkb2ZmID0gMDsKIAogCS8qCiAJICogU2tpcCB0aGUg aW5pdGlhbCByYW1wLXVwIHBoYXNlIGlmIHRoZSBjYWxsZXIgc2F5cyB3ZSdyZSBnb2luZyB0byBi ZQpAQCAtOTU0LDYgKzk2OSwyMCBAQCByZWFkX3N0cmVhbV9uZXh0X2J1ZmZlcihSZWFkU3RyZWFt ICpzdHJlYW0sIHZvaWQgKipwZXJfYnVmZmVyX2RhdGEpCiAJCWRpc3RhbmNlID0gTWluKGRpc3Rh bmNlLCBzdHJlYW0tPm1heF9waW5uZWRfYnVmZmVycyk7CiAJCXN0cmVhbS0+ZGlzdGFuY2UgPSBk aXN0YW5jZTsKIAorCQkvKgorCQkgKiBBcyB3ZSBuZWVkZWQgSU8sIHByZXZlbnQgZGlzdGFuY2Ug ZnJvbSBiZWluZyByZWR1Y2VkIHdpdGhpbiBvdXIKKwkJICogbWF4aW11bSBsb29rLWFoZWFkIHdp bmRvdy4gVGhpcyBhdm9pZHMgaGF2aW5nIGRpc3RhbmNlIGNvbGxhcHNlIHRvbworCQkgKiBxdWlj a2x5IGluIHdvcmtsb2FkcyB3aGVyZSBtb3N0IG9mIHRoZSByZXF1aXJlZCBibG9ja3MgYXJlIGNh Y2hlZCwKKwkJICogYnV0IHdoZXJlIHRoZSByZW1haW5pbmcgSU9zIGFyZSBhIHN1ZmZpY2llbnQg ZW5vdWdoIGZhY3RvciB0byBjYXVzZQorCQkgKiBhIHN1YnN0YW50aWFsIHNsb3dkb3duIGlmIGV4 ZWN1dGVkIHN5bmNocm9ub3VzbHkuCisJCSAqCisJCSAqIFRoZXJlIGFyZSB2YWxpZCBhcmd1bWVu dHMgZm9yIHByZXZlbnRpbmcgZGVjYXkgZm9yIG1heF9pb3Mgb3IgZm9yCisJCSAqIG1heF9waW5u ZWRfYnVmZmVycy4gIEJ1dCB0aGUgYXJndW1lbnQgZm9yIG1heF9waW5uZWRfYnVmZmVycyBzZWVt cworCQkgKiBjbGVhcmVyIC0gaWYgd2UgY2FuJ3Qgc2VlIGFueSBtaXNzZXMgd2l0aGluIHRoZSBt YXhpbXVtIGxvb2stYWhlYWQKKwkJICogZGlzdGFuY2UsIHdlIGNhbid0IGRvIGFueSB1c2VmdWwg cmVhZGFoZWFkLgorCQkgKi8KKwkJc3RyZWFtLT5kaXN0YW5jZV9kZWNheV9ob2xkb2ZmID0gc3Ry ZWFtLT5tYXhfcGlubmVkX2J1ZmZlcnM7CisKIAkJLyoKIAkJICogSWYgd2UndmUgcmVhY2hlZCB0 aGUgZmlyc3QgYmxvY2sgb2YgYSBzZXF1ZW50aWFsIHJlZ2lvbiB3ZSdyZQogCQkgKiBpc3N1aW5n IGFkdmljZSBmb3IsIGNhbmNlbCB0aGF0IHVudGlsIHRoZSBuZXh0IGp1bXAuICBUaGUga2VybmVs CkBAIC0xMTI4LDYgKzExNTcsNyBAQCByZWFkX3N0cmVhbV9yZXNldChSZWFkU3RyZWFtICpzdHJl YW0pCiAJLyogU3RhcnQgb2ZmIGFzc3VtaW5nIGRhdGEgaXMgY2FjaGVkLiAqLwogCXN0cmVhbS0+ ZGlzdGFuY2UgPSAxOwogCXN0cmVhbS0+cmVzdW1lX2Rpc3RhbmNlID0gc3RyZWFtLT5kaXN0YW5j ZTsKKwlzdHJlYW0tPmRpc3RhbmNlX2RlY2F5X2hvbGRvZmYgPSAwOwogfQogCiAvKgotLSAKMi41 My4wCgo= --000000000000f287f9064e6de93c Content-Type: application/octet-stream; name="v20-0009-Make-hash-index-AM-use-amgetbatch-interface.patch" Content-Disposition: attachment; filename="v20-0009-Make-hash-index-AM-use-amgetbatch-interface.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mngmwp629 RnJvbSBlZmNhOWExMTY0MDkwZDZlNjliNjNiYTIzODczMWY5ZTcyYTMyOWYzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFR1 ZSwgMjUgTm92IDIwMjUgMTg6MDM6MTUgLTA1MDAKU3ViamVjdDogW1BBVENIIHYyMCAwOS8xN10g TWFrZSBoYXNoIGluZGV4IEFNIHVzZSBhbWdldGJhdGNoIGludGVyZmFjZS4KClJlcGxhY2UgaGFz aGdldHR1cGxlIHdpdGggaGFzaGdldGJhdGNoLCBhIGZ1bmN0aW9uIHRoYXQgaW1wbGVtZW50cyB0 aGUKbmV3IGFtZ2V0YmF0Y2ggaW50ZXJmYWNlIGFkZGVkIGJ5IGNvbW1pdCBGSVhNRS4gIFBsYWlu IGluZGV4IHNjYW5zIG9mCmhhc2ggaW5kZXhlcyBub3cgcmV0dXJuIG1hdGNoaW5nIGl0ZW1zIGlu IGJhdGNoZXMgY29uc2lzdGluZyBvZiBhbGwgb2YKdGhlIG1hdGNoZXMgZnJvbSBhIGdpdmVuIGJ1 Y2tldCBvciBvdmVyZmxvdyBwYWdlLiAgVGhpcyBnaXZlcyB0aGUgdGFibGUKQU0gdGhlIGFiaWxp dHkgdG8gcGVyZm9ybSBvcHRpbWl6YXRpb25zIGxpa2UgaW5kZXggcHJlZmV0Y2hpbmcgZHVyaW5n Cmhhc2ggaW5kZXggc2NhbnMuCgpiYXRjaEltbWVkaWF0ZVVuZ3VhcmQgaXMgYWx3YXlzIHRydWUg ZHVyaW5nIGhhc2ggaW5kZXggc2NhbnMgKHNpbmNlIGhhc2gKZG9lc24ndCBzdXBwb3J0IGluZGV4 LW9ubHkgc2NhbnMgYW5kIGFsd2F5cyB1c2VzIGFuIE1WQ0Mgc25hcHNob3QpLCBzbwp0aGUgYnVm ZmVyIHBpbiBpbnRlcmxvY2sgaGVsZCBvbiBlYWNoIGJhdGNoIGlzIGFsd2F5cyBkcm9wcGVkIGF0 IHVubG9jawp0aW1lIC0tIGJlZm9yZSB0aGUgYmF0Y2ggaXMgZXZlbiByZXR1cm5lZCB0byB0aGUg dGFibGUgQU0uICBUaGlzIGRpZmZlcnMKZnJvbSBoYXNoJ3MgcHJldmlvdXMgYXBwcm9hY2ggb2Yg aG9sZGluZyBvbiB0byBhIHBpbiBmb3IgYXQgbGVhc3QgYXMKbG9uZyBhcyB0aGUgc2NhbiB3YXMg c3RvcHBlZCBvbiB0aGUgcGlubmVkIGluZGV4IHBhZ2UuCgpHdWFyYW50ZWVpbmcgdGhhdCByZXR1 cm5lZCBiYXRjaGVzIGhvbGQgbm8gYnVmZmVyIHBpbnMgb24gaW5kZXggcGFnZXMKZ3JlYXRseSBz aW1wbGlmaWVzIHJlc291cmNlIG1hbmFnZW1lbnQgZHVyaW5nIGluZGV4IHByZWZldGNoaW5nLCB3 aGVyZQp0aGUgcmVhZCBzdHJlYW0gaXMgZXhwZWN0ZWQgdG8gaG9sZCBtYW55IHBpbnMgb24gaGVh cCBwYWdlcy4gIFRoZQphbWdldGJhdGNoIGludGVyZmFjZSByZXF1aXJlcyB0aGF0IGluZGV4IEFN cyB0YWtlIHRoZSBzYW1lIHN0YW5kYXJkaXplZAphcHByb2FjaCB0byBwaW4gbWFuYWdlbWVudCBm b3IgcGlucyB0aGF0IGFyZSB1c2VkIHRvIHByZXZlbnQgdW5zYWZlCmNvbmN1cnJlbnQgVElEIHJl Y3ljbGluZyBieSBWQUNVVU0gKHRoYXQgd2F5IHByZWZldGNoaW5nIGNhbiBob2xkIG9wZW4KbXVs dGlwbGUgYmF0Y2hlcyB3aXRob3V0IGl0IGFmZmVjdGluZyB0aGUgcmVhZCBzdHJlYW0pLiAgTm90 ZSwgaG93ZXZlciwKdGhhdCBoYXNoIHN0aWxsIGhvbGRzIG9uIHRvIHBpbnMgbmVlZGVkIGZvciBp dHMgb3duIGludGVybmFsIHB1cnBvc2VzCihlLmcuLCBpdCdsbCBzdGlsbCBob2xkIG9udG8gYSBw aW4gZHVyaW5nIGEgYnVja2V0IHNwbGl0KS4KCmhhc2hraWxsaXRlbXNiYXRjaCAodGhlIGhhc2gg aW1wbGVtZW50YXRpb24gb2YgdGhlIG5ldyBhbWtpbGxpdGVtc2JhdGNoCmludGVyZmFjZSkgcGVy Zm9ybXMgTFBfREVBRCBtYXJraW5nIG9mIGRlYWQgaW5kZXggZW50cmllcywgd2hpbGUKZm9sbG93 aW5nIHNsaWdodGx5IGRpZmZlcmVudCBydWxlcyB0byB0aGUgb2xkIGFwcHJvYWNoLiAgSXQgcmVs aWVzIG9uCmNvbXBhcmluZyB0aGUgYmF0Y2gncyBzYXZlZCBMU04gYWdhaW5zdCB0aGUgY3VycmVu dCBwYWdlIExTTiB0byBkZXRlY3QKY29uY3VycmVudCBwYWdlIG1vZGlmaWNhdGlvbnMsIHdoaWNo IGluIHR1cm4gcmVxdWlyZXMgZmFrZSBMU04gc3VwcG9ydApmb3IgdW5sb2dnZWQgcmVsYXRpb25z LiAgUHJlcGFyYXRvcnkgY29tbWl0IGU1ODM2ZjdiIGFkZGVkIHRoYXQgc3VwcG9ydAp0byB0aGUg aGFzaCBpbmRleCBBTS4KCmhhc2h1bmd1YXJkYmF0Y2ggaXMgYWxzbyBwcm92aWRlZCwgZXZlbiB0 aG91Z2ggaXQgaXMgbm90IGN1cnJlbnRseQpleGVyY2lzZWQ6IGhhc2ggZG9lcyBub3Qgc3VwcG9y dCBpbmRleC1vbmx5IHNjYW5zIChhbmQgYWx3YXlzIHVzZXMgYW4KTVZDQyBzbmFwc2hvdCksIHNv IGJhdGNoSW1tZWRpYXRlVW5ndWFyZCBpcyBhbHdheXMgdHJ1ZSBmb3IgaGFzaCBpbmRleApzY2Fu cyB3aXRoIGhlYXBhbSAoYXMgbm90ZWQgYWxyZWFkeSwgaW4gcHJhY3RpY2UgZXZlcnkgYmF0Y2gn cyBsb2NrIGFuZApwaW4gYXJlIHJlbGVhc2VkIGF0IHVubG9jayB0aW1lIGR1cmluZyBoYXNoIHNj YW5zKS4gIFRoZSBjYWxsYmFjayBpcyBhCnJlcXVpcmVtZW50IGZvciBhbWdldGJhdGNoIGluZGV4 IEFNcy4KCkF1dGhvcjogUGV0ZXIgR2VvZ2hlZ2FuIDxwZ0Bib3d0LmllPgpSZXZpZXdlZC1CeTog VG9tYXMgVm9uZHJhIDx0b21hc0B2b25kcmEubWU+ClJldmlld2VkLUJ5OiBBbmRyZXMgRnJldW5k IDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vQ0FI Mi1Xem1ZcWhhY0JIMTYxcGVBV2I1ZUY9SmE3Q0ZBUSswalNFTXE9cW5mTFZUT09nQG1haWwuZ21h aWwuY29tCi0tLQogc3JjL2luY2x1ZGUvYWNjZXNzL2hhc2guaCAgICAgICAgICAgIHwgIDgxICsr LS0tLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL1JFQURNRSAgICAgICB8ICAzMSArLS0KIHNy Yy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2guYyAgICAgICB8IDIxMCArKysrKysrKysrLS0tLS0t CiBzcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoX3hsb2cuYyAgfCAgIDQgKy0KIHNyYy9iYWNr ZW5kL2FjY2Vzcy9oYXNoL2hhc2hwYWdlLmMgICB8ICAyMSArLQogc3JjL2JhY2tlbmQvYWNjZXNz L2hhc2gvaGFzaHNlYXJjaC5jIHwgMzQ1ICsrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLQogc3Jj L2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHV0aWwuYyAgIHwgMTI5ICstLS0tLS0tLS0KIGRvYy9z cmMvc2dtbC9pbmRleGFtLnNnbWwgICAgICAgICAgICB8ICAyMSArLQogc3JjL3Rvb2xzL3BnaW5k ZW50L3R5cGVkZWZzLmxpc3QgICAgIHwgICAzICstCiA5IGZpbGVzIGNoYW5nZWQsIDMzOSBpbnNl cnRpb25zKCspLCA1MDYgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNj ZXNzL2hhc2guaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9oYXNoLmgKaW5kZXggYTg3MDJmMGU1Li5l OWVkNzk1ZjQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oYXNoLmgKKysrIGIvc3Jj L2luY2x1ZGUvYWNjZXNzL2hhc2guaApAQCAtMTgsNiArMTgsNyBAQAogI2RlZmluZSBIQVNIX0gK IAogI2luY2x1ZGUgImFjY2Vzcy9hbWFwaS5oIgorI2luY2x1ZGUgImFjY2Vzcy9pbmRleGJhdGNo LmgiCiAjaW5jbHVkZSAiYWNjZXNzL2l0dXAuaCIKICNpbmNsdWRlICJhY2Nlc3Mvc2Rpci5oIgog I2luY2x1ZGUgImNhdGFsb2cvcGdfYW1fZC5oIgpAQCAtMTAwLDU3ICsxMDEsMTggQEAgdHlwZWRl ZiBIYXNoUGFnZU9wYXF1ZURhdGEgKkhhc2hQYWdlT3BhcXVlOwogICovCiAjZGVmaW5lIEhBU0hP X1BBR0VfSUQJCTB4RkY4MAogCi10eXBlZGVmIHN0cnVjdCBIYXNoU2NhblBvc0l0ZW0JLyogd2hh dCB3ZSByZW1lbWJlciBhYm91dCBlYWNoIG1hdGNoICovCisvKiBQZXItYmF0Y2ggZGF0YSBwcml2 YXRlIHRvIHRoZSBoYXNoIGluZGV4IEFNICovCit0eXBlZGVmIHN0cnVjdCBIYXNoQmF0Y2hEYXRh CiB7Ci0JSXRlbVBvaW50ZXJEYXRhIGhlYXBUaWQ7CS8qIFRJRCBvZiByZWZlcmVuY2VkIGhlYXAg aXRlbSAqLwotCU9mZnNldE51bWJlciBpbmRleE9mZnNldDsJLyogaW5kZXggaXRlbSdzIGxvY2F0 aW9uIHdpdGhpbiBwYWdlICovCi19IEhhc2hTY2FuUG9zSXRlbTsKKwlCdWZmZXIJCWJ1ZjsJCQkv KiBpbmRleCBwYWdlIGJ1ZmZlciBwaW4gKi8KKwlCbG9ja051bWJlciBjdXJyUGFnZTsJCS8qIGlu ZGV4IHBhZ2Ugd2l0aCBtYXRjaGluZyBpdGVtcyAqLworCUJsb2NrTnVtYmVyIHByZXZQYWdlOwkJ LyogY3VyclBhZ2UncyBsZWZ0IGxpbmsgKi8KKwlCbG9ja051bWJlciBuZXh0UGFnZTsJCS8qIGN1 cnJQYWdlJ3MgcmlnaHQgbGluayAqLworfSBIYXNoQmF0Y2hEYXRhOwogCi10eXBlZGVmIHN0cnVj dCBIYXNoU2NhblBvc0RhdGEKLXsKLQlCdWZmZXIJCWJ1ZjsJCQkvKiBpZiB2YWxpZCwgdGhlIGJ1 ZmZlciBpcyBwaW5uZWQgKi8KLQlCbG9ja051bWJlciBjdXJyUGFnZTsJCS8qIGN1cnJlbnQgaGFz aCBpbmRleCBwYWdlICovCi0JQmxvY2tOdW1iZXIgbmV4dFBhZ2U7CQkvKiBuZXh0IG92ZXJmbG93 IHBhZ2UgKi8KLQlCbG9ja051bWJlciBwcmV2UGFnZTsJCS8qIHByZXYgb3ZlcmZsb3cgb3IgYnVj a2V0IHBhZ2UgKi8KLQotCS8qCi0JICogVGhlIGl0ZW1zIGFycmF5IGlzIGFsd2F5cyBvcmRlcmVk IGluIGluZGV4IG9yZGVyIChpZSwgaW5jcmVhc2luZwotCSAqIGluZGV4b2Zmc2V0KS4gIFdoZW4g c2Nhbm5pbmcgYmFja3dhcmRzIGl0IGlzIGNvbnZlbmllbnQgdG8gZmlsbCB0aGUKLQkgKiBhcnJh eSBiYWNrLXRvLWZyb250LCBzbyB3ZSBzdGFydCBhdCB0aGUgbGFzdCBzbG90IGFuZCBmaWxsIGRv d253YXJkcy4KLQkgKiBIZW5jZSB3ZSBuZWVkIGJvdGggYSBmaXJzdC12YWxpZC1lbnRyeSBhbmQg YSBsYXN0LXZhbGlkLWVudHJ5IGNvdW50ZXIuCi0JICogaXRlbUluZGV4IGlzIGEgY3Vyc29yIHNo b3dpbmcgd2hpY2ggZW50cnkgd2FzIGxhc3QgcmV0dXJuZWQgdG8gY2FsbGVyLgotCSAqLwotCWlu dAkJCWZpcnN0SXRlbTsJCS8qIGZpcnN0IHZhbGlkIGluZGV4IGluIGl0ZW1zW10gKi8KLQlpbnQJ CQlsYXN0SXRlbTsJCS8qIGxhc3QgdmFsaWQgaW5kZXggaW4gaXRlbXNbXSAqLwotCWludAkJCWl0 ZW1JbmRleDsJCS8qIGN1cnJlbnQgaW5kZXggaW4gaXRlbXNbXSAqLwotCi0JSGFzaFNjYW5Qb3NJ dGVtIGl0ZW1zW01heEluZGV4VHVwbGVzUGVyUGFnZV07CS8qIE1VU1QgQkUgTEFTVCAqLwotfSBI YXNoU2NhblBvc0RhdGE7Ci0KLSNkZWZpbmUgSGFzaFNjYW5Qb3NJc1Bpbm5lZChzY2FucG9zKSBc Ci0oIFwKLQlBc3NlcnRNYWNybyhCbG9ja051bWJlcklzVmFsaWQoKHNjYW5wb3MpLmN1cnJQYWdl KSB8fCBcCi0JCQkJIUJ1ZmZlcklzVmFsaWQoKHNjYW5wb3MpLmJ1ZikpLCBcCi0JQnVmZmVySXNW YWxpZCgoc2NhbnBvcykuYnVmKSBcCi0pCi0KLSNkZWZpbmUgSGFzaFNjYW5Qb3NJc1ZhbGlkKHNj YW5wb3MpIFwKLSggXAotCUFzc2VydE1hY3JvKEJsb2NrTnVtYmVySXNWYWxpZCgoc2NhbnBvcyku Y3VyclBhZ2UpIHx8IFwKLQkJCQkhQnVmZmVySXNWYWxpZCgoc2NhbnBvcykuYnVmKSksIFwKLQlC bG9ja051bWJlcklzVmFsaWQoKHNjYW5wb3MpLmN1cnJQYWdlKSBcCi0pCi0KLSNkZWZpbmUgSGFz aFNjYW5Qb3NJbnZhbGlkYXRlKHNjYW5wb3MpIFwKLQlkbyB7IFwKLQkJKHNjYW5wb3MpLmJ1ZiA9 IEludmFsaWRCdWZmZXI7IFwKLQkJKHNjYW5wb3MpLmN1cnJQYWdlID0gSW52YWxpZEJsb2NrTnVt YmVyOyBcCi0JCShzY2FucG9zKS5uZXh0UGFnZSA9IEludmFsaWRCbG9ja051bWJlcjsgXAotCQko c2NhbnBvcykucHJldlBhZ2UgPSBJbnZhbGlkQmxvY2tOdW1iZXI7IFwKLQkJKHNjYW5wb3MpLmZp cnN0SXRlbSA9IDA7IFwKLQkJKHNjYW5wb3MpLmxhc3RJdGVtID0gMDsgXAotCQkoc2NhbnBvcyku aXRlbUluZGV4ID0gMDsgXAotCX0gd2hpbGUgKDApCisvKiBBY2Nlc3MgdGhlIGhhc2gtcHJpdmF0 ZSBwZXItYmF0Y2ggZGF0YSBmcm9tIGFuIEluZGV4U2NhbkJhdGNoIHBvaW50ZXIgKi8KKyNkZWZp bmUgSGFzaEJhdGNoR2V0RGF0YShzY2FuLCBiYXRjaCkgXAorCWluZGV4YW1fdXRpbF9iYXRjaF9n ZXRfYW1kYXRhKHNjYW4sIGJhdGNoLCBIYXNoQmF0Y2hEYXRhKQogCiAvKgogICoJSGFzaFNjYW5P cGFxdWVEYXRhIGlzIHByaXZhdGUgc3RhdGUgZm9yIGEgaGFzaCBpbmRleCBzY2FuLgpAQCAtMTc4 LDE1ICsxNDAsNiBAQCB0eXBlZGVmIHN0cnVjdCBIYXNoU2Nhbk9wYXF1ZURhdGEKIAkgKiByZWZl cnJlZCBvbmx5IHdoZW4gaGFzaHNvX2J1Y19wb3B1bGF0ZWQgaXMgdHJ1ZS4KIAkgKi8KIAlib29s CQloYXNoc29fYnVjX3NwbGl0OwotCS8qIGluZm8gYWJvdXQga2lsbGVkIGl0ZW1zIGlmIGFueSAo a2lsbGVkSXRlbXMgaXMgTlVMTCBpZiBuZXZlciB1c2VkKSAqLwotCWludAkJICAgKmtpbGxlZEl0 ZW1zOwkvKiBjdXJyUG9zLml0ZW1zIGluZGV4ZXMgb2Yga2lsbGVkIGl0ZW1zICovCi0JaW50CQkJ bnVtS2lsbGVkOwkJLyogbnVtYmVyIG9mIGN1cnJlbnRseSBzdG9yZWQgaXRlbXMgKi8KLQotCS8q Ci0JICogSWRlbnRpZnkgYWxsIHRoZSBtYXRjaGluZyBpdGVtcyBvbiBhIHBhZ2UgYW5kIHNhdmUg dGhlbSBpbgotCSAqIEhhc2hTY2FuUG9zRGF0YQotCSAqLwotCUhhc2hTY2FuUG9zRGF0YSBjdXJy UG9zOwkvKiBjdXJyZW50IHBvc2l0aW9uIGRhdGEgKi8KIH0gSGFzaFNjYW5PcGFxdWVEYXRhOwog CiB0eXBlZGVmIEhhc2hTY2FuT3BhcXVlRGF0YSAqSGFzaFNjYW5PcGFxdWU7CkBAIC0zNjgsMTEg KzMyMSwxNSBAQCBleHRlcm4gYm9vbCBoYXNoaW5zZXJ0KFJlbGF0aW9uIHJlbCwgRGF0dW0gKnZh bHVlcywgYm9vbCAqaXNudWxsLAogCQkJCQkgICBJbmRleFVuaXF1ZUNoZWNrIGNoZWNrVW5pcXVl LAogCQkJCQkgICBib29sIGluZGV4VW5jaGFuZ2VkLAogCQkJCQkgICBzdHJ1Y3QgSW5kZXhJbmZv ICppbmRleEluZm8pOwotZXh0ZXJuIGJvb2wgaGFzaGdldHR1cGxlKEluZGV4U2NhbkRlc2Mgc2Nh biwgU2NhbkRpcmVjdGlvbiBkaXIpOworZXh0ZXJuIEluZGV4U2NhbkJhdGNoIGhhc2hnZXRiYXRj aChJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCSAgIEluZGV4U2NhbkJhdGNoIHByaW9yYmF0 Y2gsCisJCQkJCQkJCSAgIFNjYW5EaXJlY3Rpb24gZGlyKTsKIGV4dGVybiBpbnQ2NCBoYXNoZ2V0 Yml0bWFwKEluZGV4U2NhbkRlc2Mgc2NhbiwgVElEQml0bWFwICp0Ym0pOwogZXh0ZXJuIEluZGV4 U2NhbkRlc2MgaGFzaGJlZ2luc2NhbihSZWxhdGlvbiByZWwsIGludCBua2V5cywgaW50IG5vcmRl cmJ5cyk7CiBleHRlcm4gdm9pZCBoYXNocmVzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2Nhbktl eSBzY2Fua2V5LCBpbnQgbnNjYW5rZXlzLAogCQkJCQkgICBTY2FuS2V5IG9yZGVyYnlzLCBpbnQg bm9yZGVyYnlzKTsKK2V4dGVybiB2b2lkIGhhc2hraWxsaXRlbXNiYXRjaChJbmRleFNjYW5EZXNj IHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKK2V4dGVybiB2b2lkIGhhc2h1bmd1YXJkYmF0 Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCk7CiBleHRlcm4gdm9p ZCBoYXNoZW5kc2NhbihJbmRleFNjYW5EZXNjIHNjYW4pOwogZXh0ZXJuIEluZGV4QnVsa0RlbGV0 ZVJlc3VsdCAqaGFzaGJ1bGtkZWxldGUoSW5kZXhWYWN1dW1JbmZvICppbmZvLAogCQkJCQkJCQkJ CQkgSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICpzdGF0cywKQEAgLTQ0NSw4ICs0MDIsOSBAQCBleHRl cm4gdm9pZCBfaGFzaF9maW5pc2hfc3BsaXQoUmVsYXRpb24gcmVsLCBCdWZmZXIgbWV0YWJ1Ziwg QnVmZmVyIG9idWYsCiAJCQkJCQkJICAgdWludDMyIGxvd21hc2spOwogCiAvKiBoYXNoc2VhcmNo LmMgKi8KLWV4dGVybiBib29sIF9oYXNoX25leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGly ZWN0aW9uIGRpcik7Ci1leHRlcm4gYm9vbCBfaGFzaF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4s IFNjYW5EaXJlY3Rpb24gZGlyKTsKK2V4dGVybiBJbmRleFNjYW5CYXRjaCBfaGFzaF9uZXh0KElu ZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsCisJCQkJCQkJCSBJbmRleFNjYW5C YXRjaCBwcmlvcmJhdGNoKTsKK2V4dGVybiBJbmRleFNjYW5CYXRjaCBfaGFzaF9maXJzdChJbmRl eFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsKIAogLyogaGFzaHNvcnQuYyAqLwog dHlwZWRlZiBzdHJ1Y3QgSFNwb29sIEhTcG9vbDsJLyogb3BhcXVlIHN0cnVjdCBpbiBoYXNoc29y dC5jICovCkBAIC00NzYsNyArNDM0LDYgQEAgZXh0ZXJuIEJsb2NrTnVtYmVyIF9oYXNoX2dldF9v bGRibG9ja19mcm9tX25ld2J1Y2tldChSZWxhdGlvbiByZWwsIEJ1Y2tldCBuZXdfYnUKIGV4dGVy biBCbG9ja051bWJlciBfaGFzaF9nZXRfbmV3YmxvY2tfZnJvbV9vbGRidWNrZXQoUmVsYXRpb24g cmVsLCBCdWNrZXQgb2xkX2J1Y2tldCk7CiBleHRlcm4gQnVja2V0IF9oYXNoX2dldF9uZXdidWNr ZXRfZnJvbV9vbGRidWNrZXQoUmVsYXRpb24gcmVsLCBCdWNrZXQgb2xkX2J1Y2tldCwKIAkJCQkJ CQkJCQkJCSB1aW50MzIgbG93bWFzaywgdWludDMyIG1heGJ1Y2tldCk7Ci1leHRlcm4gdm9pZCBf aGFzaF9raWxsX2l0ZW1zKEluZGV4U2NhbkRlc2Mgc2Nhbik7CiAKIC8qIGhhc2guYyAqLwogZXh0 ZXJuIHZvaWQgaGFzaGJ1Y2tldGNsZWFudXAoUmVsYXRpb24gcmVsLCBCdWNrZXQgY3VyX2J1Y2tl dCwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL1JFQURNRSBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9oYXNoL1JFQURNRQppbmRleCBmYzkwMzExMTcuLjk3MmJiNjY2YiAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvUkVBRE1FCisrKyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9oYXNoL1JFQURNRQpAQCAtMjU1LDI4ICsyNTUsMjkgQEAgVGhlIHJlYWRlciBhbGdvcml0 aG0gaXM6CiAJCXJldGFrZSB0aGUgYnVmZmVyIGNvbnRlbnQgbG9jayBvbiBuZXcgYnVja2V0CiAJ CWFycmFuZ2UgdG8gc2NhbiB0aGUgb2xkIGJ1Y2tldCBub3JtYWxseSBhbmQgdGhlIG5ldyBidWNr ZXQgZm9yCiAgICAgICAgICB0dXBsZXMgd2hpY2ggYXJlIG5vdCBtb3ZlZC1ieS1zcGxpdAotLS0g dGhlbiwgcGVyIHJlYWQgcmVxdWVzdDoKKy0tIHRoZW4sIHBlciBiYXRjaCAocGFnZSkgcmVxdWVz dDoKIAlyZWFjcXVpcmUgY29udGVudCBsb2NrIG9uIGN1cnJlbnQgcGFnZQogCXN0ZXAgdG8gbmV4 dCBwYWdlIGlmIG5lY2Vzc2FyeSAobm8gY2hhaW5pbmcgb2YgY29udGVudCBsb2NrcywgYnV0IGtl ZXAKIAl0aGUgcGluIG9uIHRoZSBwcmltYXJ5IGJ1Y2tldCB0aHJvdWdob3V0IHRoZSBzY2FuKQot CXNhdmUgYWxsIHRoZSBtYXRjaGluZyB0dXBsZXMgZnJvbSBjdXJyZW50IGluZGV4IHBhZ2UgaW50 byBhbiBpdGVtcyBhcnJheQotCXJlbGVhc2UgcGluIGFuZCBjb250ZW50IGxvY2sgKGJ1dCBpZiBp dCBpcyBwcmltYXJ5IGJ1Y2tldCBwYWdlIHJldGFpbgotCWl0cyBwaW4gdGlsbCB0aGUgZW5kIG9m IHRoZSBzY2FuKQotCWdldCB0dXBsZSBmcm9tIGFuIGl0ZW0gYXJyYXkKKwlzYXZlIGFsbCB0aGUg bWF0Y2hpbmcgdHVwbGVzIGZyb20gY3VycmVudCBpbmRleCBwYWdlIGludG8gYSBiYXRjaAorCXJl bGVhc2UgY29udGVudCBsb2NrIG9uIGN1cnJlbnQgcGFnZSByZXR1cm4gYmF0Y2ggdG8gdGFibGUg QU0gKHRhYmxlIEFNCisJd2lsbCBkcm9wIGJhdGNoJ3MgYnVmZmVyIHBpbiwgdGhvdWdoIHByaW1h cnkgYnVja2V0IHBhZ2UgcGluIGlzIGtlcHQKKwl1bnRpbCB0aGUgZW5kIG9mIHRoZSBzY2FuKQog LS0gYXQgc2NhbiBzaHV0ZG93bjoKLQlyZWxlYXNlIGFsbCBwaW5zIHN0aWxsIGhlbGQKKwlyZWxl YXNlIHNjYW4tb3duZWQgcGlucyAoZS5nLiwgcHJpbWFyeSBidWNrZXQgcGFnZSBwaW4pIGFzIG5l ZWRlZAogCiBIb2xkaW5nIHRoZSBidWZmZXIgcGluIG9uIHRoZSBwcmltYXJ5IGJ1Y2tldCBwYWdl IGZvciB0aGUgd2hvbGUgc2NhbiBwcmV2ZW50cwotdGhlIHJlYWRlcidzIGN1cnJlbnQtdHVwbGUg cG9pbnRlciBmcm9tIGJlaW5nIGludmFsaWRhdGVkIGJ5IHNwbGl0cyBvcgotY29tcGFjdGlvbnMu ICAoT2YgY291cnNlLCBvdGhlciBidWNrZXRzIGNhbiBzdGlsbCBiZSBzcGxpdCBvciBjb21wYWN0 ZWQuKQordGhlIGJ1Y2tldCBmcm9tIGJlaW5nIHJlb3JnYW5pemVkIGJ5IHNwbGl0cyBvciBjb21w YWN0aW9ucyB3aGlsZSB0aGUgc2NhbiBpcworaW4gcHJvZ3Jlc3MuICAoT2YgY291cnNlLCBvdGhl ciBidWNrZXRzIGNhbiBzdGlsbCBiZSBzcGxpdCBvciBjb21wYWN0ZWQuKQogCi1UbyBtaW5pbWl6 ZSBsb2NrL3VubG9jayB0cmFmZmljLCBoYXNoIGluZGV4IHNjYW4gYWx3YXlzIHNlYXJjaGVzIHRo ZSBlbnRpcmUKLWhhc2ggcGFnZSB0byBpZGVudGlmeSBhbGwgdGhlIG1hdGNoaW5nIGl0ZW1zIGF0 IG9uY2UsIGNvcHlpbmcgdGhlaXIgaGVhcCB0dXBsZQotSURzIGludG8gYmFja2VuZC1sb2NhbCBz dG9yYWdlLiBUaGUgaGVhcCB0dXBsZSBJRHMgYXJlIHRoZW4gcHJvY2Vzc2VkIHdoaWxlIG5vdAot aG9sZGluZyBhbnkgcGFnZSBsb2NrIHdpdGhpbiB0aGUgaW5kZXggdGhlcmVieSwgYWxsb3dpbmcg Y29uY3VycmVudCBpbnNlcnRpb24KLXRvIGhhcHBlbiBvbiB0aGUgc2FtZSBpbmRleCBwYWdlIHdp dGhvdXQgYW55IHJlcXVpcmVtZW50IG9mIHJlLWZpbmRpbmcgdGhlCi1jdXJyZW50IHNjYW4gcG9z aXRpb24gZm9yIHRoZSByZWFkZXIuIFdlIGRvIGNvbnRpbnVlIHRvIGhvbGQgYSBwaW4gb24gdGhl Ci1idWNrZXQgcGFnZSwgdG8gcHJvdGVjdCBhZ2FpbnN0IGNvbmN1cnJlbnQgZGVsZXRpb25zIGFu ZCBidWNrZXQgc3BsaXQuCitUbyBtaW5pbWl6ZSBsb2NrL3VubG9jayB0cmFmZmljLCBoYXNoIGlu ZGV4IHNjYW5zIGFsd2F5cyBzZWFyY2ggdGhlIGVudGlyZQoraGFzaCBwYWdlIHRvIGlkZW50aWZ5 IGFsbCB0aGUgbWF0Y2hpbmcgaXRlbXMgYXQgb25jZSwgcmV0dXJuaW5nIHRoZW0gaW4KK2JhdGNo ZXMgdG8gdGhlIHRhYmxlIEFNLiAgVGhlIHRhYmxlIEFNIHByb2Nlc3NlcyBiYXRjaGVzIHdoaWxl IG5vIHBhZ2UgbG9jaworaXMgaGVsZCB3aXRoaW4gdGhlIGluZGV4LCBhbGxvd2luZyBjb25jdXJy ZW50IGluc2VydGlvbiB0byBoYXBwZW4gb24gdGhlCitzYW1lIGluZGV4IHBhZ2Ugd2l0aG91dCBh bnkgcmVxdWlyZW1lbnQgb2YgcmUtZmluZGluZyB0aGUgY3VycmVudCBzY2FuCitwb3NpdGlvbiBm b3IgdGhlIHJlYWRlci4gIFRoZSB0YWJsZSBBTSBjb250cm9scyB3aGVuIGJhdGNoIGJ1ZmZlciBw aW5zIGFyZQorZHJvcHBlZC4gIFdlIGRvIGNvbnRpbnVlIHRvIGhvbGQgYSBwaW4gb24gdGhlIHBy aW1hcnkgYnVja2V0IHBhZ2UsIHRvCitwcm90ZWN0IGFnYWluc3QgY29uY3VycmVudCBidWNrZXQg c3BsaXRzLgogCiBUbyBhbGxvdyBmb3Igc2NhbnMgZHVyaW5nIGEgYnVja2V0IHNwbGl0LCBpZiBh dCB0aGUgc3RhcnQgb2YgdGhlIHNjYW4sIHRoZQogYnVja2V0IGlzIG1hcmtlZCBhcyBidWNrZXQt YmVpbmctcG9wdWxhdGVkLCBpdCBzY2FuIGFsbCB0aGUgdHVwbGVzIGluIHRoYXQKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2guYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9o YXNoL2hhc2guYwppbmRleCAyZTMyYmUyMzMuLjY1ZjM4YzkzZSAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hh c2guYwpAQCAtMTEzLDEwICsxMTMsMTAgQEAgaGFzaGhhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykK IAkJLmFtYWRqdXN0bWVtYmVycyA9IGhhc2hhZGp1c3RtZW1iZXJzLAogCQkuYW1iZWdpbnNjYW4g PSBoYXNoYmVnaW5zY2FuLAogCQkuYW1yZXNjYW4gPSBoYXNocmVzY2FuLAotCQkuYW1nZXR0dXBs ZSA9IGhhc2hnZXR0dXBsZSwKLQkJLmFtZ2V0YmF0Y2ggPSBOVUxMLAotCQkuYW1raWxsaXRlbXNi YXRjaCA9IE5VTEwsCi0JCS5hbXVuZ3VhcmRiYXRjaCA9IE5VTEwsCisJCS5hbWdldHR1cGxlID0g TlVMTCwKKwkJLmFtZ2V0YmF0Y2ggPSBoYXNoZ2V0YmF0Y2gsCisJCS5hbWtpbGxpdGVtc2JhdGNo ID0gaGFzaGtpbGxpdGVtc2JhdGNoLAorCQkuYW11bmd1YXJkYmF0Y2ggPSBoYXNodW5ndWFyZGJh dGNoLAogCQkuYW1nZXRiaXRtYXAgPSBoYXNoZ2V0Yml0bWFwLAogCQkuYW1lbmRzY2FuID0gaGFz aGVuZHNjYW4sCiAJCS5hbXBvc3Jlc2V0ID0gTlVMTCwKQEAgLTI5OSw1MyArMjk5LDI4IEBAIGhh c2hpbnNlcnQoUmVsYXRpb24gcmVsLCBEYXR1bSAqdmFsdWVzLCBib29sICppc251bGwsCiAKIAog LyoKLSAqCWhhc2hnZXR0dXBsZSgpIC0tIEdldCB0aGUgbmV4dCB0dXBsZSBpbiB0aGUgc2Nhbi4K KyAqCWhhc2hnZXRiYXRjaCgpIC0tIEdldCB0aGUgZmlyc3Qgb3IgbmV4dCBiYXRjaCBvZiB0dXBs ZXMgaW4gdGhlIHNjYW4KICAqLwotYm9vbAotaGFzaGdldHR1cGxlKEluZGV4U2NhbkRlc2Mgc2Nh biwgU2NhbkRpcmVjdGlvbiBkaXIpCitJbmRleFNjYW5CYXRjaAoraGFzaGdldGJhdGNoKEluZGV4 U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggcHJpb3JiYXRjaCwgU2NhbkRpcmVjdGlvbiBk aXIpCiB7CiAJSGFzaFNjYW5PcGFxdWUgc28gPSAoSGFzaFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1 ZTsKLQlib29sCQlyZXM7CiAKIAkvKiBIYXNoIGluZGV4ZXMgYXJlIGFsd2F5cyBsb3NzeSBzaW5j ZSB3ZSBzdG9yZSBvbmx5IHRoZSBoYXNoIGNvZGUgKi8KIAlzY2FuLT54c19yZWNoZWNrID0gdHJ1 ZTsKIAotCS8qCi0JICogSWYgd2UndmUgYWxyZWFkeSBpbml0aWFsaXplZCB0aGlzIHNjYW4sIHdl IGNhbiBqdXN0IGFkdmFuY2UgaXQgaW4gdGhlCi0JICogYXBwcm9wcmlhdGUgZGlyZWN0aW9uLiAg SWYgd2UgaGF2ZW4ndCBkb25lIHNvIHlldCwgd2UgY2FsbCBhIHJvdXRpbmUgdG8KLQkgKiBnZXQg dGhlIGZpcnN0IGl0ZW0gaW4gdGhlIHNjYW4uCi0JICovCi0JaWYgKCFIYXNoU2NhblBvc0lzVmFs aWQoc28tPmN1cnJQb3MpKQotCQlyZXMgPSBfaGFzaF9maXJzdChzY2FuLCBkaXIpOwotCWVsc2UK KwlpZiAocHJpb3JiYXRjaCA9PSBOVUxMKQogCXsKLQkJLyoKLQkJICogQ2hlY2sgdG8gc2VlIGlm IHdlIHNob3VsZCBraWxsIHRoZSBwcmV2aW91c2x5LWZldGNoZWQgdHVwbGUuCi0JCSAqLwotCQlp ZiAoc2Nhbi0+a2lsbF9wcmlvcl90dXBsZSkKLQkJewotCQkJLyoKLQkJCSAqIFllcywgc28gcmVt ZW1iZXIgaXQgZm9yIGxhdGVyLiAoV2UnbGwgZGVhbCB3aXRoIGFsbCBzdWNoIHR1cGxlcwotCQkJ ICogYXQgb25jZSByaWdodCBhZnRlciBsZWF2aW5nIHRoZSBpbmRleCBwYWdlIG9yIGF0IGVuZCBv ZiBzY2FuLikKLQkJCSAqIEluIGNhc2UgaWYgY2FsbGVyIHJldmVyc2VzIHRoZSBpbmRleHNjYW4g ZGlyZWN0aW9uIGl0IGlzIHF1aXRlCi0JCQkgKiBwb3NzaWJsZSB0aGF0IHRoZSBzYW1lIGl0ZW0g bWlnaHQgZ2V0IGVudGVyZWQgbXVsdGlwbGUgdGltZXMuCi0JCQkgKiBCdXQsIHdlIGRvbid0IGRl dGVjdCB0aGF0OyBpbnN0ZWFkLCB3ZSBqdXN0IGZvcmdldCBhbnkgZXhjZXNzCi0JCQkgKiBlbnRy aWVzLgotCQkJICovCi0JCQlpZiAoc28tPmtpbGxlZEl0ZW1zID09IE5VTEwpCi0JCQkJc28tPmtp bGxlZEl0ZW1zID0gcGFsbG9jX2FycmF5KGludCwgTWF4SW5kZXhUdXBsZXNQZXJQYWdlKTsKKwkJ UmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKIAotCQkJaWYgKHNvLT5udW1LaWxs ZWQgPCBNYXhJbmRleFR1cGxlc1BlclBhZ2UpCi0JCQkJc28tPmtpbGxlZEl0ZW1zW3NvLT5udW1L aWxsZWQrK10gPSBzby0+Y3VyclBvcy5pdGVtSW5kZXg7Ci0JCX0KKwkJX2hhc2hfZHJvcHNjYW5i dWYocmVsLCBzbyk7CiAKLQkJLyoKLQkJICogTm93IGNvbnRpbnVlIHRoZSBzY2FuLgotCQkgKi8K LQkJcmVzID0gX2hhc2hfbmV4dChzY2FuLCBkaXIpOworCQkvKiBJbml0aWFsaXplIHRoZSBzY2Fu LCBhbmQgcmV0dXJuIGZpcnN0IGJhdGNoIG9mIG1hdGNoaW5nIGl0ZW1zICovCisJCXJldHVybiBf aGFzaF9maXJzdChzY2FuLCBkaXIpOwogCX0KIAotCXJldHVybiByZXM7CisJLyogUmV0dXJuIGJh dGNoIHBvc2l0aW9uZWQgYWZ0ZXIgY2FsbGVyJ3MgYmF0Y2ggKGluIGRpcmVjdGlvbiAnZGlyJykg Ki8KKwlyZXR1cm4gX2hhc2hfbmV4dChzY2FuLCBkaXIsIHByaW9yYmF0Y2gpOwogfQogCiAKQEAg LTM1NSwyNiArMzMwLDI2IEBAIGhhc2hnZXR0dXBsZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5E aXJlY3Rpb24gZGlyKQogaW50NjQKIGhhc2hnZXRiaXRtYXAoSW5kZXhTY2FuRGVzYyBzY2FuLCBU SURCaXRtYXAgKnRibSkKIHsKLQlIYXNoU2Nhbk9wYXF1ZSBzbyA9IChIYXNoU2Nhbk9wYXF1ZSkg c2Nhbi0+b3BhcXVlOwotCWJvb2wJCXJlczsKKwlJbmRleFNjYW5CYXRjaCBiYXRjaDsKIAlpbnQ2 NAkJbnRpZHMgPSAwOwotCUhhc2hTY2FuUG9zSXRlbSAqY3Vyckl0ZW07CiAKLQlyZXMgPSBfaGFz aF9maXJzdChzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbik7CisJYmF0Y2ggPSBfaGFzaF9maXJz dChzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbik7CiAKLQl3aGlsZSAocmVzKQorCXdoaWxlIChi YXRjaCAhPSBOVUxMKQogCXsKLQkJY3Vyckl0ZW0gPSAmc28tPmN1cnJQb3MuaXRlbXNbc28tPmN1 cnJQb3MuaXRlbUluZGV4XTsKKwkJZm9yIChpbnQgaXRlbUluZGV4ID0gYmF0Y2gtPmZpcnN0SXRl bTsKKwkJCSBpdGVtSW5kZXggPD0gYmF0Y2gtPmxhc3RJdGVtOworCQkJIGl0ZW1JbmRleCsrKQor CQl7CisJCQl0Ym1fYWRkX3R1cGxlcyh0Ym0sICZiYXRjaC0+aXRlbXNbaXRlbUluZGV4XS50YWJs ZVRpZCwgMSwgdHJ1ZSk7CisJCQludGlkcysrOworCQl9CiAKIAkJLyoKLQkJICogX2hhc2hfZmly c3QgYW5kIF9oYXNoX25leHQgaGFuZGxlIGVsaW1pbmF0ZSBkZWFkIGluZGV4IGVudHJpZXMKLQkJ ICogd2hlbmV2ZXIgc2Nhbi0+aWdub3JlX2tpbGxlZF90dXBsZXMgaXMgdHJ1ZS4gIFRoZXJlZm9y ZSwgdGhlcmUncwotCQkgKiBub3RoaW5nIHRvIGRvIGhlcmUgZXhjZXB0IGFkZCB0aGUgcmVzdWx0 cyB0byB0aGUgVElEQml0bWFwLgorCQkgKiBfaGFzaF9uZXh0IHJlbGVhc2VzIHRoZSBwcmlvciBi YXRjaCBmb3IgYml0bWFwIGNhbGxlcnMgYmVmb3JlCisJCSAqIGFsbG9jYXRpbmcgdGhlIG5leHQg b25lLCBzbyBvbmx5IG9uZSBiYXRjaCBpcyBldmVyIHVzZWQgYXQgYSB0aW1lCiAJCSAqLwotCQl0 Ym1fYWRkX3R1cGxlcyh0Ym0sICYoY3Vyckl0ZW0tPmhlYXBUaWQpLCAxLCB0cnVlKTsKLQkJbnRp ZHMrKzsKLQotCQlyZXMgPSBfaGFzaF9uZXh0KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uKTsK KwkJYmF0Y2ggPSBfaGFzaF9uZXh0KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBiYXRjaCk7 CiAJfQogCiAJcmV0dXJuIG50aWRzOwpAQCAtMzk2LDE3ICszNzEsMTYgQEAgaGFzaGJlZ2luc2Nh bihSZWxhdGlvbiByZWwsIGludCBua2V5cywgaW50IG5vcmRlcmJ5cykKIAlzY2FuID0gUmVsYXRp b25HZXRJbmRleFNjYW4ocmVsLCBua2V5cywgbm9yZGVyYnlzKTsKIAogCXNvID0gKEhhc2hTY2Fu T3BhcXVlKSBwYWxsb2Nfb2JqZWN0KEhhc2hTY2FuT3BhcXVlRGF0YSk7Ci0JSGFzaFNjYW5Qb3NJ bnZhbGlkYXRlKHNvLT5jdXJyUG9zKTsKIAlzby0+aGFzaHNvX2J1Y2tldF9idWYgPSBJbnZhbGlk QnVmZmVyOwogCXNvLT5oYXNoc29fc3BsaXRfYnVja2V0X2J1ZiA9IEludmFsaWRCdWZmZXI7CiAK IAlzby0+aGFzaHNvX2J1Y19wb3B1bGF0ZWQgPSBmYWxzZTsKIAlzby0+aGFzaHNvX2J1Y19zcGxp dCA9IGZhbHNlOwogCi0Jc28tPmtpbGxlZEl0ZW1zID0gTlVMTDsKLQlzby0+bnVtS2lsbGVkID0g MDsKLQogCXNjYW4tPm9wYXF1ZSA9IHNvOworCXNjYW4tPm1heGl0ZW1zYmF0Y2ggPSBNYXhJbmRl eFR1cGxlc1BlclBhZ2U7CisJc2Nhbi0+YmF0Y2hfaW5kZXhfb3BhcXVlX3NpemUgPSBNQVhBTElH TihzaXplb2YoSGFzaEJhdGNoRGF0YSkpOworCXNjYW4tPmJhdGNoX3R1cGxlc193b3Jrc3BhY2Ug PSAwOwogCiAJcmV0dXJuIHNjYW47CiB9CkBAIC00MjEsMTggKzM5NSw4IEBAIGhhc2hyZXNjYW4o SW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuS2V5IHNjYW5rZXksIGludCBuc2NhbmtleXMsCiAJSGFz aFNjYW5PcGFxdWUgc28gPSAoSGFzaFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKIAlSZWxhdGlv bglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOwogCi0JaWYgKEhhc2hTY2FuUG9zSXNWYWxpZChz by0+Y3VyclBvcykpCi0JewotCQkvKiBCZWZvcmUgbGVhdmluZyBjdXJyZW50IHBhZ2UsIGRlYWwg d2l0aCBhbnkga2lsbGVkIGl0ZW1zICovCi0JCWlmIChzby0+bnVtS2lsbGVkID4gMCkKLQkJCV9o YXNoX2tpbGxfaXRlbXMoc2Nhbik7Ci0JfQotCiAJX2hhc2hfZHJvcHNjYW5idWYocmVsLCBzbyk7 CiAKLQkvKiBzZXQgcG9zaXRpb24gaW52YWxpZCAodGhpcyB3aWxsIGNhdXNlIF9oYXNoX2ZpcnN0 IGNhbGwpICovCi0JSGFzaFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5jdXJyUG9zKTsKLQogCS8qIFVw ZGF0ZSBzY2FuIGtleSwgaWYgYSBuZXcgb25lIGlzIGdpdmVuICovCiAJaWYgKHNjYW5rZXkgJiYg c2Nhbi0+bnVtYmVyT2ZLZXlzID4gMCkKIAkJbWVtY3B5KHNjYW4tPmtleURhdGEsIHNjYW5rZXks IHNjYW4tPm51bWJlck9mS2V5cyAqIHNpemVvZihTY2FuS2V5RGF0YSkpOwpAQCAtNDQxLDYgKzQw NSwxMTEgQEAgaGFzaHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5LZXkgc2NhbmtleSwg aW50IG5zY2Fua2V5cywKIAlzby0+aGFzaHNvX2J1Y19zcGxpdCA9IGZhbHNlOwogfQogCisvKgor ICoJaGFzaGtpbGxpdGVtc2JhdGNoKCkgLS0gTWFyayBkZWFkIGl0ZW1zJyBpbmRleCB0dXBsZXMg TFBfREVBRAorICovCit2b2lkCitoYXNoa2lsbGl0ZW1zYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2Fu LCBJbmRleFNjYW5CYXRjaCBiYXRjaCkKK3sKKwlSZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRleFJl bGF0aW9uOworCUhhc2hCYXRjaERhdGEgKmhhc2hiYXRjaCA9IEhhc2hCYXRjaEdldERhdGEoc2Nh biwgYmF0Y2gpOworCUJ1ZmZlcgkJYnVmOworCVBhZ2UJCXBhZ2U7CisJSGFzaFBhZ2VPcGFxdWUg b3BhcXVlOworCU9mZnNldE51bWJlciBvZmZudW0sCisJCQkJbWF4b2ZmOworCWJvb2wJCWtpbGxl ZHNvbWV0aGluZyA9IGZhbHNlOworCVhMb2dSZWNQdHIJbGF0ZXN0bHNuOworCisJQXNzZXJ0KGJh dGNoLT5udW1EZWFkID4gMCk7CisKKwlidWYgPSBfaGFzaF9nZXRidWYocmVsLCBoYXNoYmF0Y2gt PmN1cnJQYWdlLCBIQVNIX1JFQUQsCisJCQkJCSAgIExIX0JVQ0tFVF9QQUdFIHwgTEhfT1ZFUkZM T1dfUEFHRSk7CisKKwlsYXRlc3Rsc24gPSBCdWZmZXJHZXRMU05BdG9taWMoYnVmKTsKKwlBc3Nl cnQoYmF0Y2gtPmxzbiA8PSBsYXRlc3Rsc24pOworCWlmIChiYXRjaC0+bHNuICE9IGxhdGVzdGxz bikKKwl7CisJCS8qIE1vZGlmaWVkLCBnaXZlIHVwIG9uIGhpbnRpbmcgKi8KKwkJX2hhc2hfcmVs YnVmKHJlbCwgYnVmKTsKKwkJcmV0dXJuOworCX0KKworCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGJ1 Zik7CisJb3BhcXVlID0gSGFzaFBhZ2VHZXRPcGFxdWUocGFnZSk7CisJbWF4b2ZmID0gUGFnZUdl dE1heE9mZnNldE51bWJlcihwYWdlKTsKKworCS8qIEl0ZXJhdGUgdGhyb3VnaCBiYXRjaC0+ZGVh ZEl0ZW1zW10gaW4gaW5kZXggcGFnZSBvcmRlciAqLworCWZvciAoaW50IGkgPSAwOyBpIDwgYmF0 Y2gtPm51bURlYWQ7IGkrKykKKwl7CisJCWludAkJCWl0ZW1JbmRleCA9IGJhdGNoLT5kZWFkSXRl bXNbaV07CisJCUJhdGNoTWF0Y2hpbmdJdGVtICpjdXJySXRlbSA9ICZiYXRjaC0+aXRlbXNbaXRl bUluZGV4XTsKKworCQlvZmZudW0gPSBjdXJySXRlbS0+aW5kZXhPZmZzZXQ7CisKKwkJQXNzZXJ0 KGl0ZW1JbmRleCA+PSBiYXRjaC0+Zmlyc3RJdGVtICYmCisJCQkgICBpdGVtSW5kZXggPD0gYmF0 Y2gtPmxhc3RJdGVtKTsKKworCQl3aGlsZSAob2ZmbnVtIDw9IG1heG9mZikKKwkJeworCQkJSXRl bUlkCQlpaWQgPSBQYWdlR2V0SXRlbUlkKHBhZ2UsIG9mZm51bSk7CisJCQlJbmRleFR1cGxlCWl0 dXBsZSA9IChJbmRleFR1cGxlKSBQYWdlR2V0SXRlbShwYWdlLCBpaWQpOworCisJCQlpZiAoSXRl bVBvaW50ZXJFcXVhbHMoJml0dXBsZS0+dF90aWQsICZjdXJySXRlbS0+dGFibGVUaWQpKQorCQkJ eworCQkJCWlmICgha2lsbGVkc29tZXRoaW5nKQorCQkJCXsKKwkJCQkJLyoKKwkJCQkJICogVXNl IHRoZSBoaW50IGJpdCBpbmZyYXN0cnVjdHVyZSB0byBjaGVjayBpZiB3ZSBjYW4KKwkJCQkJICog dXBkYXRlIHRoZSBwYWdlIHdoaWxlIGp1c3QgaG9sZGluZyBhIHNoYXJlIGxvY2suIElmIHdlCisJ CQkJCSAqIGFyZSBub3QgYWxsb3dlZCwgdGhlcmUncyBubyBwb2ludCBjb250aW51aW5nLgorCQkJ CQkgKi8KKwkJCQkJaWYgKCFCdWZmZXJCZWdpblNldEhpbnRCaXRzKGJ1ZikpCisJCQkJCQlnb3Rv IHVubG9ja19wYWdlOworCQkJCX0KKworCQkJCS8qIGZvdW5kIHRoZSBpdGVtICovCisJCQkJSXRl bUlkTWFya0RlYWQoaWlkKTsKKwkJCQlraWxsZWRzb21ldGhpbmcgPSB0cnVlOworCQkJCWJyZWFr OwkJCS8qIG91dCBvZiBpbm5lciBzZWFyY2ggbG9vcCAqLworCQkJfQorCQkJb2ZmbnVtID0gT2Zm c2V0TnVtYmVyTmV4dChvZmZudW0pOworCQl9CisJfQorCisJLyoKKwkgKiBTaW5jZSB0aGlzIGNh biBiZSByZWRvbmUgbGF0ZXIgaWYgbmVlZGVkLCBtYXJrIGFzIGRpcnR5IGhpbnQuIFdoZW5ldmVy CisJICogd2UgbWFyayBhbnl0aGluZyBMUF9ERUFELCB3ZSBhbHNvIHNldCB0aGUgcGFnZSdzCisJ ICogTEhfUEFHRV9IQVNfREVBRF9UVVBMRVMgZmxhZywgd2hpY2ggaXMgbGlrZXdpc2UganVzdCBh IGhpbnQuCisJICovCisJaWYgKGtpbGxlZHNvbWV0aGluZykKKwl7CisJCW9wYXF1ZS0+aGFzaG9f ZmxhZyB8PSBMSF9QQUdFX0hBU19ERUFEX1RVUExFUzsKKwkJQnVmZmVyRmluaXNoU2V0SGludEJp dHMoYnVmLCB0cnVlLCB0cnVlKTsKKwl9CisKK3VubG9ja19wYWdlOgorCV9oYXNoX3JlbGJ1Zihy ZWwsIGJ1Zik7Cit9CisKKy8qCisgKgloYXNodW5ndWFyZGJhdGNoKCkgLS0gRHJvcCBiYXRjaCdz IFRJRCByZWN5Y2xpbmcgaW50ZXJsb2NrIChidWZmZXIgcGluKQorICoKKyAqIENhbGxlZCBieSB0 aGUgdGFibGUgQU0gd2hlbiBpdCdzIHNhZmUgdG8gZHJvcCB0aGUgYnVmZmVyIHBpbiBoZWxkIHRv CisgKiBwcmV2ZW50IGNvbmN1cnJlbnQgVElEIHJlY3ljbGluZyBieSBWQUNVVU0uCisgKi8KK3Zv aWQKK2hhc2h1bmd1YXJkYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBi YXRjaCkKK3sKKwlIYXNoQmF0Y2hEYXRhICpoYXNoYmF0Y2ggPSBIYXNoQmF0Y2hHZXREYXRhKHNj YW4sIGJhdGNoKTsKKworCS8qIFNob3VsZCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGlmZiAhYmF0 Y2hJbW1lZGlhdGVVbmd1YXJkICovCisJQXNzZXJ0KCFzY2FuLT5iYXRjaEltbWVkaWF0ZVVuZ3Vh cmQpOworCUFzc2VydChiYXRjaC0+aXNHdWFyZGVkKTsKKworCVJlbGVhc2VCdWZmZXIoaGFzaGJh dGNoLT5idWYpOworfQorCiAvKgogICoJaGFzaGVuZHNjYW4oKSAtLSBjbG9zZSBkb3duIGEgc2Nh bgogICovCkBAIC00NTAsMTcgKzUxOSw4IEBAIGhhc2hlbmRzY2FuKEluZGV4U2NhbkRlc2Mgc2Nh bikKIAlIYXNoU2Nhbk9wYXF1ZSBzbyA9IChIYXNoU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwog CVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247CiAKLQlpZiAoSGFzaFNjYW5Qb3NJ c1ZhbGlkKHNvLT5jdXJyUG9zKSkKLQl7Ci0JCS8qIEJlZm9yZSBsZWF2aW5nIGN1cnJlbnQgcGFn ZSwgZGVhbCB3aXRoIGFueSBraWxsZWQgaXRlbXMgKi8KLQkJaWYgKHNvLT5udW1LaWxsZWQgPiAw KQotCQkJX2hhc2hfa2lsbF9pdGVtcyhzY2FuKTsKLQl9Ci0KIAlfaGFzaF9kcm9wc2NhbmJ1Zihy ZWwsIHNvKTsKIAotCWlmIChzby0+a2lsbGVkSXRlbXMgIT0gTlVMTCkKLQkJcGZyZWUoc28tPmtp bGxlZEl0ZW1zKTsKIAlwZnJlZShzbyk7CiAJc2Nhbi0+b3BhcXVlID0gTlVMTDsKIH0KZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hfeGxvZy5jIGIvc3JjL2JhY2tlbmQv YWNjZXNzL2hhc2gvaGFzaF94bG9nLmMKaW5kZXggMjA2MDYyMGM3Li5lMjZlZThiYjkgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hfeGxvZy5jCisrKyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9oYXNoL2hhc2hfeGxvZy5jCkBAIC0xMTQxLDE0ICsxMTQxLDE0IEBAIGhhc2hf bWFzayhjaGFyICpwYWdlZGF0YSwgQmxvY2tOdW1iZXIgYmxrbm8pCiAJCS8qCiAJCSAqIEluIGhh c2ggYnVja2V0IGFuZCBvdmVyZmxvdyBwYWdlcywgaXQgaXMgcG9zc2libGUgdG8gbW9kaWZ5IHRo ZQogCQkgKiBMUF9GTEFHUyB3aXRob3V0IGVtaXR0aW5nIGFueSBXQUwgcmVjb3JkLiBIZW5jZSwg bWFzayB0aGUgbGluZQotCQkgKiBwb2ludGVyIGZsYWdzLiBTZWUgaGFzaGdldHR1cGxlKCksIF9o YXNoX2tpbGxfaXRlbXMoKSBmb3IgZGV0YWlscy4KKwkJICogcG9pbnRlciBmbGFncy4gU2VlIGhh c2hraWxsaXRlbXNiYXRjaCgpIGZvciBkZXRhaWxzLgogCQkgKi8KIAkJbWFza19scF9mbGFncyhw YWdlKTsKIAl9CiAKIAkvKgogCSAqIEl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlIGhpbnQgYml0IExI X1BBR0VfSEFTX0RFQURfVFVQTEVTIG1heSByZW1haW4KLQkgKiB1bmxvZ2dlZC4gU28sIG1hc2sg aXQuIFNlZSBfaGFzaF9raWxsX2l0ZW1zKCkgZm9yIGRldGFpbHMuCisJICogdW5sb2dnZWQuIFNv LCBtYXNrIGl0LiBTZWUgaGFzaGtpbGxpdGVtc2JhdGNoKCkgZm9yIGRldGFpbHMuCiAJICovCiAJ b3BhcXVlLT5oYXNob19mbGFnICY9IH5MSF9QQUdFX0hBU19ERUFEX1RVUExFUzsKIH0KZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hwYWdlLmMgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvaGFzaC9oYXNocGFnZS5jCmluZGV4IDgwOTliMGQwMi4uMTFlM2RiNDcyIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNocGFnZS5jCisrKyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy9oYXNoL2hhc2hwYWdlLmMKQEAgLTI4MCwzMSArMjgwLDI0IEBAIF9oYXNoX2Ryb3Bi dWYoUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVmKQogfQogCiAvKgotICoJX2hhc2hfZHJvcHNjYW5i dWYoKSAtLSByZWxlYXNlIGJ1ZmZlcnMgdXNlZCBpbiBzY2FuLgorICoJX2hhc2hfZHJvcHNjYW5i dWYoKSAtLSByZWxlYXNlIGJ1ZmZlcnMgb3duZWQgYnkgc2Nhbi4KICAqCi0gKiBUaGlzIHJvdXRp bmUgdW5waW5zIHRoZSBidWZmZXJzIHVzZWQgZHVyaW5nIHNjYW4gb24gd2hpY2ggd2UKLSAqIGhv bGQgbm8gbG9jay4KKyAqIFRoaXMgcm91dGluZSB1bnBpbnMgdGhlIGJ1ZmZlcnMgZm9yIHRoZSBw cmltYXJ5IGJ1Y2tldCBwYWdlIGFuZCBmb3IgdGhlCisgKiBidWNrZXQgcGFnZSBvZiBhIGJ1Y2tl dCBiZWluZyBzcGxpdCBhcyBuZWVkZWQuCiAgKi8KIHZvaWQKIF9oYXNoX2Ryb3BzY2FuYnVmKFJl bGF0aW9uIHJlbCwgSGFzaFNjYW5PcGFxdWUgc28pCiB7Ci0JLyogcmVsZWFzZSBwaW4gd2UgaG9s ZCBvbiBwcmltYXJ5IGJ1Y2tldCBwYWdlICovCi0JaWYgKEJ1ZmZlcklzVmFsaWQoc28tPmhhc2hz b19idWNrZXRfYnVmKSAmJgotCQlzby0+aGFzaHNvX2J1Y2tldF9idWYgIT0gc28tPmN1cnJQb3Mu YnVmKQorCS8qIHJlbGVhc2UgcGluIGhlbGQgb24gcHJpbWFyeSBidWNrZXQgcGFnZSAqLworCWlm IChCdWZmZXJJc1ZhbGlkKHNvLT5oYXNoc29fYnVja2V0X2J1ZikpCiAJCV9oYXNoX2Ryb3BidWYo cmVsLCBzby0+aGFzaHNvX2J1Y2tldF9idWYpOwogCXNvLT5oYXNoc29fYnVja2V0X2J1ZiA9IElu dmFsaWRCdWZmZXI7CiAKLQkvKiByZWxlYXNlIHBpbiB3ZSBob2xkIG9uIHByaW1hcnkgYnVja2V0 IHBhZ2UgIG9mIGJ1Y2tldCBiZWluZyBzcGxpdCAqLwotCWlmIChCdWZmZXJJc1ZhbGlkKHNvLT5o YXNoc29fc3BsaXRfYnVja2V0X2J1ZikgJiYKLQkJc28tPmhhc2hzb19zcGxpdF9idWNrZXRfYnVm ICE9IHNvLT5jdXJyUG9zLmJ1ZikKKwkvKiByZWxlYXNlIHBpbiBoZWxkIG9uIHByaW1hcnkgYnVj a2V0IHBhZ2Ugb2YgYnVja2V0IGJlaW5nIHNwbGl0ICovCisJaWYgKEJ1ZmZlcklzVmFsaWQoc28t Pmhhc2hzb19zcGxpdF9idWNrZXRfYnVmKSkKIAkJX2hhc2hfZHJvcGJ1ZihyZWwsIHNvLT5oYXNo c29fc3BsaXRfYnVja2V0X2J1Zik7CiAJc28tPmhhc2hzb19zcGxpdF9idWNrZXRfYnVmID0gSW52 YWxpZEJ1ZmZlcjsKIAotCS8qIHJlbGVhc2UgYW55IHBpbiB3ZSBzdGlsbCBob2xkICovCi0JaWYg KEJ1ZmZlcklzVmFsaWQoc28tPmN1cnJQb3MuYnVmKSkKLQkJX2hhc2hfZHJvcGJ1ZihyZWwsIHNv LT5jdXJyUG9zLmJ1Zik7Ci0Jc28tPmN1cnJQb3MuYnVmID0gSW52YWxpZEJ1ZmZlcjsKLQogCS8q IHJlc2V0IHNwbGl0IHNjYW4gKi8KIAlzby0+aGFzaHNvX2J1Y19wb3B1bGF0ZWQgPSBmYWxzZTsK IAlzby0+aGFzaHNvX2J1Y19zcGxpdCA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv YWNjZXNzL2hhc2gvaGFzaHNlYXJjaC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHNl YXJjaC5jCmluZGV4IDg5ZDFjNWJjNi4uYTY4MTJjNmEyIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvaGFzaC9oYXNoc2VhcmNoLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gv aGFzaHNlYXJjaC5jCkBAIC0yMiwxMDUgKzIyLDk0IEBACiAjaW5jbHVkZSAic3RvcmFnZS9wcmVk aWNhdGUuaCIKICNpbmNsdWRlICJ1dGlscy9yZWwuaCIKIAotc3RhdGljIGJvb2wgX2hhc2hfcmVh ZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBCdWZmZXIgKmJ1ZlAsCi0JCQkJCQkgICBTY2FuRGly ZWN0aW9uIGRpcik7CitzdGF0aWMgYm9vbCBfaGFzaF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNj YW4sIEJ1ZmZlciBidWYsIFNjYW5EaXJlY3Rpb24gZGlyLAorCQkJCQkJICAgSW5kZXhTY2FuQmF0 Y2ggYmF0Y2gpOwogc3RhdGljIGludAlfaGFzaF9sb2FkX3F1YWxpZmllZF9pdGVtcyhJbmRleFNj YW5EZXNjIHNjYW4sIFBhZ2UgcGFnZSwKLQkJCQkJCQkJCSAgIE9mZnNldE51bWJlciBvZmZudW0s IFNjYW5EaXJlY3Rpb24gZGlyKTsKLXN0YXRpYyBpbmxpbmUgdm9pZCBfaGFzaF9zYXZlaXRlbShI YXNoU2Nhbk9wYXF1ZSBzbywgaW50IGl0ZW1JbmRleCwKKwkJCQkJCQkJCSAgIE9mZnNldE51bWJl ciBvZmZudW0sIFNjYW5EaXJlY3Rpb24gZGlyLAorCQkJCQkJCQkJICAgSW5kZXhTY2FuQmF0Y2gg YmF0Y2gpOworc3RhdGljIGlubGluZSB2b2lkIF9oYXNoX3NhdmVpdGVtKEluZGV4U2NhbkJhdGNo IGJhdGNoLCBpbnQgaXRlbUluZGV4LAogCQkJCQkJCQkgIE9mZnNldE51bWJlciBvZmZudW0sIElu ZGV4VHVwbGUgaXR1cCk7CiBzdGF0aWMgdm9pZCBfaGFzaF9yZWFkbmV4dChJbmRleFNjYW5EZXNj IHNjYW4sIEJ1ZmZlciAqYnVmcCwKIAkJCQkJCSAgIFBhZ2UgKnBhZ2VwLCBIYXNoUGFnZU9wYXF1 ZSAqb3BhcXVlcCk7CiAKIC8qCi0gKglfaGFzaF9uZXh0KCkgLS0gR2V0IHRoZSBuZXh0IGl0ZW0g aW4gYSBzY2FuLgorICoJX2hhc2hfbmV4dCgpIC0tIEdldCB0aGUgbmV4dCBiYXRjaCBvZiBpdGVt cyBpbiBhIHNjYW4uCiAgKgotICoJCU9uIGVudHJ5LCBzby0+Y3VyclBvcyBkZXNjcmliZXMgdGhl IGN1cnJlbnQgcGFnZSwgd2hpY2ggbWF5Ci0gKgkJYmUgcGlubmVkIGJ1dCBub3QgbG9ja2VkLCBh bmQgc28tPmN1cnJQb3MuaXRlbUluZGV4IGlkZW50aWZpZXMKLSAqCQl3aGljaCBpdGVtIHdhcyBw cmV2aW91c2x5IHJldHVybmVkLgorICoJCU9uIGVudHJ5LCBwcmlvcmJhdGNoIGRlc2NyaWJlcyB0 aGUgY3VycmVudCBwYWdlIGJhdGNoIHdpdGggaXRlbXMKKyAqCQlhbHJlYWR5IHJldHVybmVkLgog ICoKLSAqCQlPbiBzdWNjZXNzZnVsIGV4aXQsIHNjYW4tPnhzX2hlYXB0aWQgaXMgc2V0IHRvIHRo ZSBUSUQgb2YgdGhlIG5leHQKLSAqCQloZWFwIHR1cGxlLiAgc28tPmN1cnJQb3MgaXMgdXBkYXRl ZCBhcyBuZWVkZWQuCisgKgkJT24gc3VjY2Vzc2Z1bCBleGl0LCByZXR1cm5zIGEgYmF0Y2ggY29u dGFpbmluZyBtYXRjaGluZyBpdGVtcyBmcm9tCisgKgkJbmV4dCBwYWdlLiAgT3RoZXJ3aXNlIHJl dHVybnMgTlVMTCwgaW5kaWNhdGluZyB0aGF0IHRoZXJlIGFyZSBubworICoJCWZ1cnRoZXIgbWF0 Y2hlcy4gIE5vIGxvY2tzIGFyZSBldmVyIGhlbGQgd2hlbiB3ZSByZXR1cm4uCiAgKgotICoJCU9u IGZhaWx1cmUgZXhpdCAobm8gbW9yZSB0dXBsZXMpLCB3ZSByZXR1cm4gZmFsc2Ugd2l0aCBwaW4K LSAqCQloZWxkIG9uIGJ1Y2tldCBwYWdlIGJ1dCBubyBwaW5zIG9yIGxvY2tzIGhlbGQgb24gb3Zl cmZsb3cKLSAqCQlwYWdlLgorICoJCVJldGFpbnMgcGlucyBhY2NvcmRpbmcgdG8gdGhlIHNhbWUg cnVsZXMgYXMgX2hhc2hfZmlyc3QuCiAgKi8KLWJvb2wKLV9oYXNoX25leHQoSW5kZXhTY2FuRGVz YyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKK0luZGV4U2NhbkJhdGNoCitfaGFzaF9uZXh0KElu ZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIEluZGV4U2NhbkJhdGNoIHByaW9y YmF0Y2gpCiB7CiAJUmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKIAlIYXNoU2Nh bk9wYXF1ZSBzbyA9IChIYXNoU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwotCUhhc2hTY2FuUG9z SXRlbSAqY3Vyckl0ZW07CisJSGFzaEJhdGNoRGF0YSAqaGFzaHByaW9yYmF0Y2ggPSBIYXNoQmF0 Y2hHZXREYXRhKHNjYW4sIHByaW9yYmF0Y2gpOwogCUJsb2NrTnVtYmVyIGJsa25vOwogCUJ1ZmZl cgkJYnVmOwotCWJvb2wJCWVuZF9vZl9zY2FuID0gZmFsc2U7CisJSW5kZXhTY2FuQmF0Y2ggYmF0 Y2g7CiAKIAkvKgotCSAqIEFkdmFuY2UgdG8gdGhlIG5leHQgdHVwbGUgb24gdGhlIGN1cnJlbnQg cGFnZTsgb3IgaWYgZG9uZSwgdHJ5IHRvIHJlYWQKLQkgKiBkYXRhIGZyb20gdGhlIG5leHQgb3Ig cHJldmlvdXMgcGFnZSBiYXNlZCBvbiB0aGUgc2NhbiBkaXJlY3Rpb24uIEJlZm9yZQotCSAqIG1v dmluZyB0byB0aGUgbmV4dCBvciBwcmV2aW91cyBwYWdlIG1ha2Ugc3VyZSB0aGF0IHdlIGRlYWwg d2l0aCBhbGwgdGhlCi0JICoga2lsbGVkIGl0ZW1zLgorCSAqIFRoZSBjb3JlIGNvZGUgbXVzdCBk ZWFsIHdpdGggY3Jvc3MtYmF0Y2ggc2NhbiBkaXJlY3Rpb24gY2hhbmdlcyBmb3IgdXMuCisJICog QSBiYXRjaCBtYW5hZ2VtZW50IHJvdXRpbmUgdGhhdCBmbGlwcyBwcmlvcmJhdGNoJ3Mgc2NhbiBk aXJlY3Rpb24gaXMKKwkgKiB1c2VkIGZvciB0aGlzLgorCSAqLworCUFzc2VydChwcmlvcmJhdGNo LT5kaXIgPT0gZGlyKTsKKworCS8qCisJICogRGV0ZXJtaW5lIHdoaWNoIHBhZ2UgdG8gcmVhZCBu ZXh0IGJhc2VkIG9uIHNjYW4gZGlyZWN0aW9uIGFuZCBkZXRhaWxzCisJICogdGFrZW4gZnJvbSB0 aGUgcHJpb3IgYmF0Y2gKIAkgKi8KIAlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpKQot CXsKLQkJaWYgKCsrc28tPmN1cnJQb3MuaXRlbUluZGV4ID4gc28tPmN1cnJQb3MubGFzdEl0ZW0p Ci0JCXsKLQkJCWlmIChzby0+bnVtS2lsbGVkID4gMCkKLQkJCQlfaGFzaF9raWxsX2l0ZW1zKHNj YW4pOworCQlibGtubyA9IGhhc2hwcmlvcmJhdGNoLT5uZXh0UGFnZTsKKwllbHNlCisJCWJsa25v ID0gaGFzaHByaW9yYmF0Y2gtPnByZXZQYWdlOwogCi0JCQlibGtubyA9IHNvLT5jdXJyUG9zLm5l eHRQYWdlOwotCQkJaWYgKEJsb2NrTnVtYmVySXNWYWxpZChibGtubykpCi0JCQl7Ci0JCQkJYnVm ID0gX2hhc2hfZ2V0YnVmKHJlbCwgYmxrbm8sIEhBU0hfUkVBRCwgTEhfT1ZFUkZMT1dfUEFHRSk7 Ci0JCQkJaWYgKCFfaGFzaF9yZWFkcGFnZShzY2FuLCAmYnVmLCBkaXIpKQotCQkJCQllbmRfb2Zf c2NhbiA9IHRydWU7Ci0JCQl9Ci0JCQllbHNlCi0JCQkJZW5kX29mX3NjYW4gPSB0cnVlOwotCQl9 Ci0JfQorCS8qCisJICogRm9yIGJpdG1hcCBzY2FuIGNhbGxlcnMsIHJlbGVhc2UgdGhlIHByaW9y IGJhdGNoIG5vdyBzbyB0aGF0IHRoZQorCSAqIGFsbG9jYXRpb24gYmVsb3cgY2FuIHJldXNlIGl0 cyBtZW1vcnkuICBUaGF0IHdheSBiaXRtYXAgc2NhbnMgbmV2ZXIKKwkgKiBuZWVkIG1vcmUgdGhh biBvbmUgYmF0Y2ggYWxsb2NhdGlvbi4KKwkgKi8KKwlpZiAoIXNjYW4tPnVzZWJhdGNocmluZykK KwkJaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2Uoc2NhbiwgcHJpb3JiYXRjaCk7CisKKwlpZiAo IUJsb2NrTnVtYmVySXNWYWxpZChibGtubykpCisJCXJldHVybiBOVUxMOworCisJLyogQWxsb2Nh dGUgc3BhY2UgZm9yIG5leHQgYmF0Y2ggKi8KKwliYXRjaCA9IGluZGV4YW1fdXRpbF9iYXRjaF9h bGxvYyhzY2FuKTsKKworCS8qIEdldCB0aGUgYnVmZmVyIGZvciBuZXh0IGJhdGNoICovCisJaWYg KFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKKwkJYnVmID0gX2hhc2hfZ2V0YnVmKHJlbCwg Ymxrbm8sIEhBU0hfUkVBRCwgTEhfT1ZFUkZMT1dfUEFHRSk7CiAJZWxzZQogCXsKLQkJaWYgKC0t c28tPmN1cnJQb3MuaXRlbUluZGV4IDwgc28tPmN1cnJQb3MuZmlyc3RJdGVtKQotCQl7Ci0JCQlp ZiAoc28tPm51bUtpbGxlZCA+IDApCi0JCQkJX2hhc2hfa2lsbF9pdGVtcyhzY2FuKTsKKwkJYnVm ID0gX2hhc2hfZ2V0YnVmKHJlbCwgYmxrbm8sIEhBU0hfUkVBRCwKKwkJCQkJCSAgIExIX0JVQ0tF VF9QQUdFIHwgTEhfT1ZFUkZMT1dfUEFHRSk7CiAKLQkJCWJsa25vID0gc28tPmN1cnJQb3MucHJl dlBhZ2U7Ci0JCQlpZiAoQmxvY2tOdW1iZXJJc1ZhbGlkKGJsa25vKSkKLQkJCXsKLQkJCQlidWYg PSBfaGFzaF9nZXRidWYocmVsLCBibGtubywgSEFTSF9SRUFELAotCQkJCQkJCQkgICBMSF9CVUNL RVRfUEFHRSB8IExIX09WRVJGTE9XX1BBR0UpOwotCi0JCQkJLyoKLQkJCQkgKiBXZSBhbHdheXMg bWFpbnRhaW4gdGhlIHBpbiBvbiBidWNrZXQgcGFnZSBmb3Igd2hvbGUgc2NhbgotCQkJCSAqIG9w ZXJhdGlvbiwgc28gcmVsZWFzaW5nIHRoZSBhZGRpdGlvbmFsIHBpbiB3ZSBoYXZlIGFjcXVpcmVk Ci0JCQkJICogaGVyZS4KLQkJCQkgKi8KLQkJCQlpZiAoYnVmID09IHNvLT5oYXNoc29fYnVja2V0 X2J1ZiB8fAotCQkJCQlidWYgPT0gc28tPmhhc2hzb19zcGxpdF9idWNrZXRfYnVmKQotCQkJCQlf aGFzaF9kcm9wYnVmKHJlbCwgYnVmKTsKLQotCQkJCWlmICghX2hhc2hfcmVhZHBhZ2Uoc2Nhbiwg JmJ1ZiwgZGlyKSkKLQkJCQkJZW5kX29mX3NjYW4gPSB0cnVlOwotCQkJfQotCQkJZWxzZQotCQkJ CWVuZF9vZl9zY2FuID0gdHJ1ZTsKLQkJfQorCQkvKgorCQkgKiBXZSBhbHdheXMgbWFpbnRhaW4g dGhlIHBpbiBvbiBidWNrZXQgcGFnZSBmb3Igd2hvbGUgc2NhbiBvcGVyYXRpb24sCisJCSAqIHNv IHJlbGVhc2luZyB0aGUgYWRkaXRpb25hbCBwaW4gd2UgaGF2ZSBhY3F1aXJlZCBoZXJlLgorCQkg Ki8KKwkJaWYgKGJ1ZiA9PSBzby0+aGFzaHNvX2J1Y2tldF9idWYgfHwKKwkJCWJ1ZiA9PSBzby0+ aGFzaHNvX3NwbGl0X2J1Y2tldF9idWYpCisJCQlfaGFzaF9kcm9wYnVmKHJlbCwgYnVmKTsKIAl9 CiAKLQlpZiAoZW5kX29mX3NjYW4pCisJLyogUmVhZCB0aGUgbmV4dCBwYWdlIGFuZCBsb2FkIGl0 ZW1zIGludG8gYWxsb2NhdGVkIGJhdGNoICovCisJaWYgKCFfaGFzaF9yZWFkcGFnZShzY2FuLCBi dWYsIGRpciwgYmF0Y2gpKQogCXsKLQkJX2hhc2hfZHJvcHNjYW5idWYocmVsLCBzbyk7Ci0JCUhh c2hTY2FuUG9zSW52YWxpZGF0ZShzby0+Y3VyclBvcyk7Ci0JCXJldHVybiBmYWxzZTsKKwkJaW5k ZXhhbV91dGlsX2JhdGNoX3JlbGVhc2Uoc2NhbiwgYmF0Y2gpOworCQlyZXR1cm4gTlVMTDsKIAl9 CiAKLQkvKiBPSywgaXRlbUluZGV4IHNheXMgd2hhdCB0byByZXR1cm4gKi8KLQljdXJySXRlbSA9 ICZzby0+Y3VyclBvcy5pdGVtc1tzby0+Y3VyclBvcy5pdGVtSW5kZXhdOwotCXNjYW4tPnhzX2hl YXB0aWQgPSBjdXJySXRlbS0+aGVhcFRpZDsKLQotCXJldHVybiB0cnVlOworCS8qIFJldHVybiB0 aGUgYmF0Y2ggY29udGFpbmluZyBtYXRjaGVkIGl0ZW1zIGZyb20gbmV4dCBwYWdlICovCisJcmV0 dXJuIGJhdGNoOwogfQogCiAvKgpAQCAtMjcwLDIyICsyNTksMjAgQEAgX2hhc2hfcmVhZHByZXYo SW5kZXhTY2FuRGVzYyBzY2FuLAogfQogCiAvKgotICoJX2hhc2hfZmlyc3QoKSAtLSBGaW5kIHRo ZSBmaXJzdCBpdGVtIGluIGEgc2Nhbi4KKyAqCV9oYXNoX2ZpcnN0KCkgLS0gRmluZCB0aGUgZmly c3QgYmF0Y2ggb2YgaXRlbXMgaW4gYSBzY2FuLgogICoKLSAqCQlXZSBmaW5kIHRoZSBmaXJzdCBp dGVtIChvciwgaWYgYmFja3dhcmQgc2NhbiwgdGhlIGxhc3QgaXRlbSkgaW4gdGhlCi0gKgkJaW5k ZXggdGhhdCBzYXRpc2ZpZXMgdGhlIHF1YWxpZmljYXRpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBz Y2FuCi0gKgkJZGVzY3JpcHRvci4KKyAqCQlXZSBmaW5kIHRoZSBmaXJzdCBiYXRjaCBvZiBpdGVt cyAob3IsIGlmIGJhY2t3YXJkIHNjYW4sIHRoZSBsYXN0CisgKgkJYmF0Y2gpIGluIHRoZSBpbmRl eCB0aGF0IHNhdGlzZmllcyB0aGUgcXVhbGlmaWNhdGlvbiBhc3NvY2lhdGVkIHdpdGgKKyAqCQl0 aGUgc2NhbiBkZXNjcmlwdG9yLgogICoKLSAqCQlPbiBzdWNjZXNzZnVsIGV4aXQsIGlmIHRoZSBw YWdlIGNvbnRhaW5pbmcgY3VycmVudCBpbmRleCB0dXBsZSBpcyBhbgotICoJCW92ZXJmbG93IHBh Z2UsIGJvdGggcGluIGFuZCBsb2NrIGFyZSByZWxlYXNlZCB3aGVyZWFzIGlmIGl0IGlzIGEgYnVj a2V0Ci0gKgkJcGFnZSB0aGVuIGl0IGlzIHBpbm5lZCBidXQgbm90IGxvY2tlZCBhbmQgZGF0YSBh Ym91dCB0aGUgbWF0Y2hpbmcKLSAqCQl0dXBsZShzKSBvbiB0aGUgcGFnZSBoYXMgYmVlbiBsb2Fk ZWQgaW50byBzby0+Y3VyclBvcywKLSAqCQlzY2FuLT54c19oZWFwdGlkIGlzIHNldCB0byB0aGUg aGVhcCBUSUQgb2YgdGhlIGN1cnJlbnQgdHVwbGUuCisgKgkJT24gc3VjY2Vzc2Z1bCBleGl0LCBy ZXR1cm5zIGEgYmF0Y2ggY29udGFpbmluZyBtYXRjaGluZyBpdGVtcy4KKyAqCQlPdGhlcndpc2Ug cmV0dXJucyBOVUxMLCBpbmRpY2F0aW5nIHRoYXQgdGhlcmUgYXJlIG5vIGZ1cnRoZXIgbWF0Y2hl cy4KKyAqCQlObyBsb2NrcyBhcmUgZXZlciBoZWxkIHdoZW4gd2UgcmV0dXJuLgogICoKLSAqCQlP biBmYWlsdXJlIGV4aXQgKG5vIG1vcmUgdHVwbGVzKSwgd2UgcmV0dXJuIGZhbHNlLCB3aXRoIHBp biBoZWxkIG9uCi0gKgkJYnVja2V0IHBhZ2UgYnV0IG5vIHBpbnMgb3IgbG9ja3MgaGVsZCBvbiBv dmVyZmxvdyBwYWdlLgorICoJCVdlIGFsd2F5cyByZXRhaW4gb3VyIG93biBwaW4gb24gdGhlIGJ1 Y2tldCBwYWdlLiAgV2hlbiB3ZSByZXR1cm4gYQorICoJCWJhdGNoIHdpdGggYSBidWNrZXQgcGFn ZSwgaXQgd2lsbCByZXRhaW4gaXRzIG93biByZWZlcmVuY2UgcGluLgogICovCi1ib29sCitJbmRl eFNjYW5CYXRjaAogX2hhc2hfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9u IGRpcikKIHsKIAlSZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOwpAQCAtMjk2LDcg KzI4Myw3IEBAIF9oYXNoX2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBk aXIpCiAJQnVmZmVyCQlidWY7CiAJUGFnZQkJcGFnZTsKIAlIYXNoUGFnZU9wYXF1ZSBvcGFxdWU7 Ci0JSGFzaFNjYW5Qb3NJdGVtICpjdXJySXRlbTsKKwlJbmRleFNjYW5CYXRjaCBiYXRjaDsKIAog CXBnc3RhdF9jb3VudF9pbmRleF9zY2FuKHJlbCk7CiAJaWYgKHNjYW4tPmluc3RydW1lbnQpCkBA IC0zMjYsNyArMzEzLDcgQEAgX2hhc2hfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGly ZWN0aW9uIGRpcikKIAkgKiBpdGVtcyBpbiB0aGUgaW5kZXguCiAJICovCiAJaWYgKGN1ci0+c2tf ZmxhZ3MgJiBTS19JU05VTEwpCi0JCXJldHVybiBmYWxzZTsKKwkJcmV0dXJuIE5VTEw7CiAKIAkv KgogCSAqIE9rYXkgdG8gY29tcHV0ZSB0aGUgaGFzaCBrZXkuICBXZSB3YW50IHRvIGRvIHRoaXMg YmVmb3JlIGFjcXVpcmluZyBhbnkKQEAgLTQxOSwxOTEgKzQwNiwxNTIgQEAgX2hhc2hfZmlyc3Qo SW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAkJCV9oYXNoX3JlYWRuZXh0 KHNjYW4sICZidWYsICZwYWdlLCAmb3BhcXVlKTsKIAl9CiAKLQkvKiByZW1lbWJlciB3aGljaCBi dWZmZXIgd2UgaGF2ZSBwaW5uZWQsIGlmIGFueSAqLwotCUFzc2VydChCdWZmZXJJc0ludmFsaWQo c28tPmN1cnJQb3MuYnVmKSk7Ci0Jc28tPmN1cnJQb3MuYnVmID0gYnVmOworCS8qIEFsbG9jYXRl IHNwYWNlIGZvciBmaXJzdCBiYXRjaCAqLworCWJhdGNoID0gaW5kZXhhbV91dGlsX2JhdGNoX2Fs bG9jKHNjYW4pOwogCi0JLyogTm93IGZpbmQgYWxsIHRoZSB0dXBsZXMgc2F0aXNmeWluZyB0aGUg cXVhbGlmaWNhdGlvbiBmcm9tIGEgcGFnZSAqLwotCWlmICghX2hhc2hfcmVhZHBhZ2Uoc2Nhbiwg JmJ1ZiwgZGlyKSkKLQkJcmV0dXJuIGZhbHNlOworCS8qIFJlYWQgdGhlIGZpcnN0IHBhZ2UgYW5k IGxvYWQgaXRlbXMgaW50byBhbGxvY2F0ZWQgYmF0Y2ggKi8KKwlpZiAoIV9oYXNoX3JlYWRwYWdl KHNjYW4sIGJ1ZiwgZGlyLCBiYXRjaCkpCisJeworCQlpbmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFz ZShzY2FuLCBiYXRjaCk7CisJCXJldHVybiBOVUxMOworCX0KIAotCS8qIE9LLCBpdGVtSW5kZXgg c2F5cyB3aGF0IHRvIHJldHVybiAqLwotCWN1cnJJdGVtID0gJnNvLT5jdXJyUG9zLml0ZW1zW3Nv LT5jdXJyUG9zLml0ZW1JbmRleF07Ci0Jc2Nhbi0+eHNfaGVhcHRpZCA9IGN1cnJJdGVtLT5oZWFw VGlkOwotCi0JLyogaWYgd2UncmUgaGVyZSwgX2hhc2hfcmVhZHBhZ2UgZm91bmQgYSB2YWxpZCB0 dXBsZXMgKi8KLQlyZXR1cm4gdHJ1ZTsKKwkvKiBSZXR1cm4gdGhlIGJhdGNoIGNvbnRhaW5pbmcg bWF0Y2hlZCBpdGVtcyAqLworCXJldHVybiBiYXRjaDsKIH0KIAogLyoKLSAqCV9oYXNoX3JlYWRw YWdlKCkgLS0gTG9hZCBkYXRhIGZyb20gY3VycmVudCBpbmRleCBwYWdlIGludG8gc28tPmN1cnJQ b3MKKyAqCV9oYXNoX3JlYWRwYWdlKCkgLS0gTG9hZCBkYXRhIGZyb20gY3VycmVudCBpbmRleCBw YWdlIGludG8gYmF0Y2gKICAqCiAgKglXZSBzY2FuIGFsbCB0aGUgaXRlbXMgaW4gdGhlIGN1cnJl bnQgaW5kZXggcGFnZSBhbmQgc2F2ZSB0aGVtIGludG8KLSAqCXNvLT5jdXJyUG9zIGlmIGl0IHNh dGlzZmllcyB0aGUgcXVhbGlmaWNhdGlvbi4gSWYgbm8gbWF0Y2hpbmcgaXRlbXMKKyAqCXRoZSBi YXRjaCBpZiB0aGV5IHNhdGlzZnkgdGhlIHF1YWxpZmljYXRpb24uIElmIG5vIG1hdGNoaW5nIGl0 ZW1zCiAgKglhcmUgZm91bmQgaW4gdGhlIGN1cnJlbnQgcGFnZSwgd2UgbW92ZSB0byB0aGUgbmV4 dCBvciBwcmV2aW91cyBwYWdlCiAgKglpbiBhIGJ1Y2tldCBjaGFpbiBhcyBpbmRpY2F0ZWQgYnkg dGhlIGRpcmVjdGlvbi4KICAqCiAgKglSZXR1cm4gdHJ1ZSBpZiBhbnkgbWF0Y2hpbmcgaXRlbXMg YXJlIGZvdW5kIGVsc2UgcmV0dXJuIGZhbHNlLgogICovCiBzdGF0aWMgYm9vbAotX2hhc2hfcmVh ZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBCdWZmZXIgKmJ1ZlAsIFNjYW5EaXJlY3Rpb24gZGly KQorX2hhc2hfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBCdWZmZXIgYnVmLCBTY2FuRGly ZWN0aW9uIGRpciwKKwkJCSAgIEluZGV4U2NhbkJhdGNoIGJhdGNoKQogewogCVJlbGF0aW9uCXJl bCA9IHNjYW4tPmluZGV4UmVsYXRpb247CiAJSGFzaFNjYW5PcGFxdWUgc28gPSAoSGFzaFNjYW5P cGFxdWUpIHNjYW4tPm9wYXF1ZTsKLQlCdWZmZXIJCWJ1ZjsKKwlIYXNoQmF0Y2hEYXRhICpoYXNo YmF0Y2ggPSBIYXNoQmF0Y2hHZXREYXRhKHNjYW4sIGJhdGNoKTsKIAlQYWdlCQlwYWdlOwogCUhh c2hQYWdlT3BhcXVlIG9wYXF1ZTsKIAlPZmZzZXROdW1iZXIgb2ZmbnVtOwogCXVpbnQxNgkJaXRl bUluZGV4OwogCi0JYnVmID0gKmJ1ZlA7CiAJQXNzZXJ0KEJ1ZmZlcklzVmFsaWQoYnVmKSk7CiAJ X2hhc2hfY2hlY2twYWdlKHJlbCwgYnVmLCBMSF9CVUNLRVRfUEFHRSB8IExIX09WRVJGTE9XX1BB R0UpOwogCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGJ1Zik7CiAJb3BhcXVlID0gSGFzaFBhZ2VHZXRP cGFxdWUocGFnZSk7CiAKLQlzby0+Y3VyclBvcy5idWYgPSBidWY7Ci0Jc28tPmN1cnJQb3MuY3Vy clBhZ2UgPSBCdWZmZXJHZXRCbG9ja051bWJlcihidWYpOworCWhhc2hiYXRjaC0+YnVmID0gYnVm OworCWhhc2hiYXRjaC0+Y3VyclBhZ2UgPSBCdWZmZXJHZXRCbG9ja051bWJlcihidWYpOworCWJh dGNoLT5kaXIgPSBkaXI7CiAKIAlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpKQogCXsK LQkJQmxvY2tOdW1iZXIgcHJldl9ibGtubyA9IEludmFsaWRCbG9ja051bWJlcjsKLQogCQlmb3Ig KDs7KQogCQl7CiAJCQkvKiBuZXcgcGFnZSwgbG9jYXRlIHN0YXJ0aW5nIHBvc2l0aW9uIGJ5IGJp bmFyeSBzZWFyY2ggKi8KIAkJCW9mZm51bSA9IF9oYXNoX2JpbnNlYXJjaChwYWdlLCBzby0+aGFz aHNvX3NrX2hhc2gpOwogCi0JCQlpdGVtSW5kZXggPSBfaGFzaF9sb2FkX3F1YWxpZmllZF9pdGVt cyhzY2FuLCBwYWdlLCBvZmZudW0sIGRpcik7CisJCQlpdGVtSW5kZXggPSBfaGFzaF9sb2FkX3F1 YWxpZmllZF9pdGVtcyhzY2FuLCBwYWdlLCBvZmZudW0sIGRpciwKKwkJCQkJCQkJCQkJCSAgIGJh dGNoKTsKIAogCQkJaWYgKGl0ZW1JbmRleCAhPSAwKQogCQkJCWJyZWFrOwogCiAJCQkvKgotCQkJ ICogQ291bGQgbm90IGZpbmQgYW55IG1hdGNoaW5nIHR1cGxlcyBpbiB0aGUgY3VycmVudCBwYWdl LCBtb3ZlIHRvCi0JCQkgKiB0aGUgbmV4dCBwYWdlLiBCZWZvcmUgbGVhdmluZyB0aGUgY3VycmVu dCBwYWdlLCBkZWFsIHdpdGggYW55Ci0JCQkgKiBraWxsZWQgaXRlbXMuCisJCQkgKiBDb3VsZCBu b3QgZmluZCBhbnkgbWF0Y2hpbmcgdHVwbGVzIGluIHRoZSBjdXJyZW50IHBhZ2UsIHRyeSB0bwor CQkJICogbW92ZSB0byB0aGUgbmV4dCBwYWdlCiAJCQkgKi8KLQkJCWlmIChzby0+bnVtS2lsbGVk ID4gMCkKLQkJCQlfaGFzaF9raWxsX2l0ZW1zKHNjYW4pOwotCi0JCQkvKgotCQkJICogSWYgdGhp cyBpcyBhIHByaW1hcnkgYnVja2V0IHBhZ2UsIGhhc2hvX3ByZXZibGtubyBpcyBub3QgYSByZWFs Ci0JCQkgKiBibG9jayBudW1iZXIuCi0JCQkgKi8KLQkJCWlmIChzby0+Y3VyclBvcy5idWYgPT0g c28tPmhhc2hzb19idWNrZXRfYnVmIHx8Ci0JCQkJc28tPmN1cnJQb3MuYnVmID09IHNvLT5oYXNo c29fc3BsaXRfYnVja2V0X2J1ZikKLQkJCQlwcmV2X2Jsa25vID0gSW52YWxpZEJsb2NrTnVtYmVy OwotCQkJZWxzZQotCQkJCXByZXZfYmxrbm8gPSBvcGFxdWUtPmhhc2hvX3ByZXZibGtubzsKLQog CQkJX2hhc2hfcmVhZG5leHQoc2NhbiwgJmJ1ZiwgJnBhZ2UsICZvcGFxdWUpOwotCQkJaWYgKEJ1 ZmZlcklzVmFsaWQoYnVmKSkKLQkJCXsKLQkJCQlzby0+Y3VyclBvcy5idWYgPSBidWY7Ci0JCQkJ c28tPmN1cnJQb3MuY3VyclBhZ2UgPSBCdWZmZXJHZXRCbG9ja051bWJlcihidWYpOwotCQkJfQot CQkJZWxzZQotCQkJewotCQkJCS8qCi0JCQkJICogUmVtZW1iZXIgbmV4dCBhbmQgcHJldmlvdXMg YmxvY2sgbnVtYmVycyBmb3Igc2Nyb2xsYWJsZQotCQkJCSAqIGN1cnNvcnMgdG8ga25vdyB0aGUg c3RhcnQgcG9zaXRpb24gYW5kIHJldHVybiBmYWxzZQotCQkJCSAqIGluZGljYXRpbmcgdGhhdCBu byBtb3JlIG1hdGNoaW5nIHR1cGxlcyB3ZXJlIGZvdW5kLiBBbHNvLAotCQkJCSAqIGRvbid0IHJl c2V0IGN1cnJQYWdlIG9yIGxzbiwgYmVjYXVzZSB3ZSBleHBlY3QKLQkJCQkgKiBfaGFzaF9raWxs X2l0ZW1zIHRvIGJlIGNhbGxlZCBmb3IgdGhlIG9sZCBwYWdlIGFmdGVyIHRoaXMKLQkJCQkgKiBm dW5jdGlvbiByZXR1cm5zLgotCQkJCSAqLwotCQkJCXNvLT5jdXJyUG9zLnByZXZQYWdlID0gcHJl dl9ibGtubzsKLQkJCQlzby0+Y3VyclBvcy5uZXh0UGFnZSA9IEludmFsaWRCbG9ja051bWJlcjsK LQkJCQlzby0+Y3VyclBvcy5idWYgPSBidWY7CisJCQlpZiAoIUJ1ZmZlcklzVmFsaWQoYnVmKSkK IAkJCQlyZXR1cm4gZmFsc2U7Ci0JCQl9CisKKwkJCWhhc2hiYXRjaC0+YnVmID0gYnVmOworCQkJ aGFzaGJhdGNoLT5jdXJyUGFnZSA9IEJ1ZmZlckdldEJsb2NrTnVtYmVyKGJ1Zik7CiAJCX0KIAot CQlzby0+Y3VyclBvcy5maXJzdEl0ZW0gPSAwOwotCQlzby0+Y3VyclBvcy5sYXN0SXRlbSA9IGl0 ZW1JbmRleCAtIDE7Ci0JCXNvLT5jdXJyUG9zLml0ZW1JbmRleCA9IDA7CisJCWJhdGNoLT5maXJz dEl0ZW0gPSAwOworCQliYXRjaC0+bGFzdEl0ZW0gPSBpdGVtSW5kZXggLSAxOwogCX0KIAllbHNl CiAJewotCQlCbG9ja051bWJlciBuZXh0X2Jsa25vID0gSW52YWxpZEJsb2NrTnVtYmVyOwotCiAJ CWZvciAoOzspCiAJCXsKIAkJCS8qIG5ldyBwYWdlLCBsb2NhdGUgc3RhcnRpbmcgcG9zaXRpb24g YnkgYmluYXJ5IHNlYXJjaCAqLwogCQkJb2ZmbnVtID0gX2hhc2hfYmluc2VhcmNoX2xhc3QocGFn ZSwgc28tPmhhc2hzb19za19oYXNoKTsKIAotCQkJaXRlbUluZGV4ID0gX2hhc2hfbG9hZF9xdWFs aWZpZWRfaXRlbXMoc2NhbiwgcGFnZSwgb2ZmbnVtLCBkaXIpOworCQkJaXRlbUluZGV4ID0gX2hh c2hfbG9hZF9xdWFsaWZpZWRfaXRlbXMoc2NhbiwgcGFnZSwgb2ZmbnVtLCBkaXIsCisJCQkJCQkJ CQkJCQkgICBiYXRjaCk7CiAKIAkJCWlmIChpdGVtSW5kZXggIT0gTWF4SW5kZXhUdXBsZXNQZXJQ YWdlKQogCQkJCWJyZWFrOwogCiAJCQkvKgotCQkJICogQ291bGQgbm90IGZpbmQgYW55IG1hdGNo aW5nIHR1cGxlcyBpbiB0aGUgY3VycmVudCBwYWdlLCBtb3ZlIHRvCi0JCQkgKiB0aGUgcHJldmlv dXMgcGFnZS4gQmVmb3JlIGxlYXZpbmcgdGhlIGN1cnJlbnQgcGFnZSwgZGVhbCB3aXRoCi0JCQkg KiBhbnkga2lsbGVkIGl0ZW1zLgorCQkJICogQ291bGQgbm90IGZpbmQgYW55IG1hdGNoaW5nIHR1 cGxlcyBpbiB0aGUgY3VycmVudCBwYWdlLCB0cnkgdG8KKwkJCSAqIG1vdmUgdG8gdGhlIHByZXZp b3VzIHBhZ2UKIAkJCSAqLwotCQkJaWYgKHNvLT5udW1LaWxsZWQgPiAwKQotCQkJCV9oYXNoX2tp bGxfaXRlbXMoc2Nhbik7Ci0KLQkJCWlmIChzby0+Y3VyclBvcy5idWYgPT0gc28tPmhhc2hzb19i dWNrZXRfYnVmIHx8Ci0JCQkJc28tPmN1cnJQb3MuYnVmID09IHNvLT5oYXNoc29fc3BsaXRfYnVj a2V0X2J1ZikKLQkJCQluZXh0X2Jsa25vID0gb3BhcXVlLT5oYXNob19uZXh0Ymxrbm87Ci0KIAkJ CV9oYXNoX3JlYWRwcmV2KHNjYW4sICZidWYsICZwYWdlLCAmb3BhcXVlKTsKLQkJCWlmIChCdWZm ZXJJc1ZhbGlkKGJ1ZikpCi0JCQl7Ci0JCQkJc28tPmN1cnJQb3MuYnVmID0gYnVmOwotCQkJCXNv LT5jdXJyUG9zLmN1cnJQYWdlID0gQnVmZmVyR2V0QmxvY2tOdW1iZXIoYnVmKTsKLQkJCX0KLQkJ CWVsc2UKLQkJCXsKLQkJCQkvKgotCQkJCSAqIFJlbWVtYmVyIG5leHQgYW5kIHByZXZpb3VzIGJs b2NrIG51bWJlcnMgZm9yIHNjcm9sbGFibGUKLQkJCQkgKiBjdXJzb3JzIHRvIGtub3cgdGhlIHN0 YXJ0IHBvc2l0aW9uIGFuZCByZXR1cm4gZmFsc2UKLQkJCQkgKiBpbmRpY2F0aW5nIHRoYXQgbm8g bW9yZSBtYXRjaGluZyB0dXBsZXMgd2VyZSBmb3VuZC4gQWxzbywKLQkJCQkgKiBkb24ndCByZXNl dCBjdXJyUGFnZSBvciBsc24sIGJlY2F1c2Ugd2UgZXhwZWN0Ci0JCQkJICogX2hhc2hfa2lsbF9p dGVtcyB0byBiZSBjYWxsZWQgZm9yIHRoZSBvbGQgcGFnZSBhZnRlciB0aGlzCi0JCQkJICogZnVu Y3Rpb24gcmV0dXJucy4KLQkJCQkgKi8KLQkJCQlzby0+Y3VyclBvcy5wcmV2UGFnZSA9IEludmFs aWRCbG9ja051bWJlcjsKLQkJCQlzby0+Y3VyclBvcy5uZXh0UGFnZSA9IG5leHRfYmxrbm87Ci0J CQkJc28tPmN1cnJQb3MuYnVmID0gYnVmOworCQkJaWYgKCFCdWZmZXJJc1ZhbGlkKGJ1ZikpCiAJ CQkJcmV0dXJuIGZhbHNlOwotCQkJfQorCisJCQloYXNoYmF0Y2gtPmJ1ZiA9IGJ1ZjsKKwkJCWhh c2hiYXRjaC0+Y3VyclBhZ2UgPSBCdWZmZXJHZXRCbG9ja051bWJlcihidWYpOwogCQl9CiAKLQkJ c28tPmN1cnJQb3MuZmlyc3RJdGVtID0gaXRlbUluZGV4OwotCQlzby0+Y3VyclBvcy5sYXN0SXRl bSA9IE1heEluZGV4VHVwbGVzUGVyUGFnZSAtIDE7Ci0JCXNvLT5jdXJyUG9zLml0ZW1JbmRleCA9 IE1heEluZGV4VHVwbGVzUGVyUGFnZSAtIDE7CisJCWJhdGNoLT5maXJzdEl0ZW0gPSBpdGVtSW5k ZXg7CisJCWJhdGNoLT5sYXN0SXRlbSA9IE1heEluZGV4VHVwbGVzUGVyUGFnZSAtIDE7CiAJfQog Ci0JaWYgKHNvLT5jdXJyUG9zLmJ1ZiA9PSBzby0+aGFzaHNvX2J1Y2tldF9idWYgfHwKLQkJc28t PmN1cnJQb3MuYnVmID09IHNvLT5oYXNoc29fc3BsaXRfYnVja2V0X2J1ZikKKwkvKgorCSAqIFNh dmVkIGF0IGxlYXN0IG9uZSBtYXRjaCBpbiBiYXRjaC5pdGVtc1tdLiAgUHJlcGFyZSBmb3IgaGFz aGdldGJhdGNoIHRvCisJICogcmV0dXJuIGl0IGJ5IGluaXRpYWxpemluZyByZW1haW5pbmcgdW5p bml0aWFsaXplZCBmaWVsZHMuCisJICovCisJaWYgKGhhc2hiYXRjaC0+YnVmID09IHNvLT5oYXNo c29fYnVja2V0X2J1ZiB8fAorCQloYXNoYmF0Y2gtPmJ1ZiA9PSBzby0+aGFzaHNvX3NwbGl0X2J1 Y2tldF9idWYpCiAJewotCQlzby0+Y3VyclBvcy5wcmV2UGFnZSA9IEludmFsaWRCbG9ja051bWJl cjsKLQkJc28tPmN1cnJQb3MubmV4dFBhZ2UgPSBvcGFxdWUtPmhhc2hvX25leHRibGtubzsKLQkJ TG9ja0J1ZmZlcihzby0+Y3VyclBvcy5idWYsIEJVRkZFUl9MT0NLX1VOTE9DSyk7CisJCS8qCisJ CSAqIEJhdGNoJ3MgYnVmZmVyIGlzIGVpdGhlciB0aGUgcHJpbWFyeSBidWNrZXQsIG9yIGEgYnVj a2V0IGJlaW5nCisJCSAqIHBvcHVsYXRlZCBkdWUgdG8gYSBzcGxpdC4KKwkJICoKKwkJICogSW5j cmVtZW50IGxvY2FsIHJlZmVyZW5jZSBjb3VudCBzbyB0aGF0IGJhdGNoIGdldHMgYW4gaW5kZXBl bmRlbnQKKwkJICogYnVmZmVyIHJlZmVyZW5jZSB0aGF0IGNhbiBiZSByZWxlYXNlZCAoYnkgdGhl IGNvcmUgY29kZS90YWJsZSBBTSkKKwkJICogYmVmb3JlIHRoZSBoYXNoc29fYnVja2V0X2J1Zi9o YXNoc29fc3BsaXRfYnVja2V0X2J1ZiByZWZlcmVuY2VzIGFyZQorCQkgKiByZWxlYXNlZC4KKwkJ ICovCisJCUluY3JCdWZmZXJSZWZDb3VudChoYXNoYmF0Y2gtPmJ1Zik7CisKKwkJLyogQ2FuIG9u bHkgdXNlIG9wYXF1ZS0+aGFzaG9fbmV4dGJsa25vICovCisJCWhhc2hiYXRjaC0+cHJldlBhZ2Ug PSBJbnZhbGlkQmxvY2tOdW1iZXI7CisJCWhhc2hiYXRjaC0+bmV4dFBhZ2UgPSBvcGFxdWUtPmhh c2hvX25leHRibGtubzsKIAl9CiAJZWxzZQogCXsKLQkJc28tPmN1cnJQb3MucHJldlBhZ2UgPSBv cGFxdWUtPmhhc2hvX3ByZXZibGtubzsKLQkJc28tPmN1cnJQb3MubmV4dFBhZ2UgPSBvcGFxdWUt Pmhhc2hvX25leHRibGtubzsKLQkJX2hhc2hfcmVsYnVmKHJlbCwgc28tPmN1cnJQb3MuYnVmKTsK LQkJc28tPmN1cnJQb3MuYnVmID0gSW52YWxpZEJ1ZmZlcjsKKwkJLyogQ2FuIHVzZSBvcGFxdWUt Pmhhc2hvX3ByZXZibGtubyBhbmQgb3BhcXVlLT5oYXNob19uZXh0Ymxrbm8gKi8KKwkJaGFzaGJh dGNoLT5wcmV2UGFnZSA9IG9wYXF1ZS0+aGFzaG9fcHJldmJsa25vOworCQloYXNoYmF0Y2gtPm5l eHRQYWdlID0gb3BhcXVlLT5oYXNob19uZXh0Ymxrbm87CiAJfQogCi0JQXNzZXJ0KHNvLT5jdXJy UG9zLmZpcnN0SXRlbSA8PSBzby0+Y3VyclBvcy5sYXN0SXRlbSk7CisJLyogd2Ugc2F2ZWQgb25l IG9yIG1vcmUgbWF0Y2hlcyBpbiBiYXRjaC5pdGVtc1tdICovCisJaW5kZXhhbV91dGlsX2JhdGNo X3VubG9jayhzY2FuLCBiYXRjaCwgaGFzaGJhdGNoLT5idWYpOworCisJQXNzZXJ0KGJhdGNoLT5m aXJzdEl0ZW0gPD0gYmF0Y2gtPmxhc3RJdGVtKTsKIAlyZXR1cm4gdHJ1ZTsKIH0KIAogLyoKICAq IExvYWQgYWxsIHRoZSBxdWFsaWZpZWQgaXRlbXMgZnJvbSBhIGN1cnJlbnQgaW5kZXggcGFnZQot ICogaW50byBzby0+Y3VyclBvcy4gSGVscGVyIGZ1bmN0aW9uIGZvciBfaGFzaF9yZWFkcGFnZS4K KyAqIGludG8gYmF0Y2guIEhlbHBlciBmdW5jdGlvbiBmb3IgX2hhc2hfcmVhZHBhZ2UuCiAgKi8K IHN0YXRpYyBpbnQKIF9oYXNoX2xvYWRfcXVhbGlmaWVkX2l0ZW1zKEluZGV4U2NhbkRlc2Mgc2Nh biwgUGFnZSBwYWdlLAotCQkJCQkJICAgT2Zmc2V0TnVtYmVyIG9mZm51bSwgU2NhbkRpcmVjdGlv biBkaXIpCisJCQkJCQkgICBPZmZzZXROdW1iZXIgb2ZmbnVtLCBTY2FuRGlyZWN0aW9uIGRpciwK KwkJCQkJCSAgIEluZGV4U2NhbkJhdGNoIGJhdGNoKQogewogCUhhc2hTY2FuT3BhcXVlIHNvID0g KEhhc2hTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CiAJSW5kZXhUdXBsZQlpdHVwOwpAQCAtNjQw LDcgKzU4OCw3IEBAIF9oYXNoX2xvYWRfcXVhbGlmaWVkX2l0ZW1zKEluZGV4U2NhbkRlc2Mgc2Nh biwgUGFnZSBwYWdlLAogCQkJCV9oYXNoX2NoZWNrcXVhbChzY2FuLCBpdHVwKSkKIAkJCXsKIAkJ CQkvKiB0dXBsZSBpcyBxdWFsaWZpZWQsIHNvIHJlbWVtYmVyIGl0ICovCi0JCQkJX2hhc2hfc2F2 ZWl0ZW0oc28sIGl0ZW1JbmRleCwgb2ZmbnVtLCBpdHVwKTsKKwkJCQlfaGFzaF9zYXZlaXRlbShi YXRjaCwgaXRlbUluZGV4LCBvZmZudW0sIGl0dXApOwogCQkJCWl0ZW1JbmRleCsrOwogCQkJfQog CQkJZWxzZQpAQCAtNjg3LDcgKzYzNSw3IEBAIF9oYXNoX2xvYWRfcXVhbGlmaWVkX2l0ZW1zKElu ZGV4U2NhbkRlc2Mgc2NhbiwgUGFnZSBwYWdlLAogCQkJewogCQkJCWl0ZW1JbmRleC0tOwogCQkJ CS8qIHR1cGxlIGlzIHF1YWxpZmllZCwgc28gcmVtZW1iZXIgaXQgKi8KLQkJCQlfaGFzaF9zYXZl aXRlbShzbywgaXRlbUluZGV4LCBvZmZudW0sIGl0dXApOworCQkJCV9oYXNoX3NhdmVpdGVtKGJh dGNoLCBpdGVtSW5kZXgsIG9mZm51bSwgaXR1cCk7CiAJCQl9CiAJCQllbHNlCiAJCQl7CkBAIC03 MDYsMTMgKzY1NCwxNCBAQCBfaGFzaF9sb2FkX3F1YWxpZmllZF9pdGVtcyhJbmRleFNjYW5EZXNj IHNjYW4sIFBhZ2UgcGFnZSwKIAl9CiB9CiAKLS8qIFNhdmUgYW4gaW5kZXggaXRlbSBpbnRvIHNv LT5jdXJyUG9zLml0ZW1zW2l0ZW1JbmRleF0gKi8KKy8qIFNhdmUgYW4gaW5kZXggaXRlbSBpbnRv IGJhdGNoLT5pdGVtc1tpdGVtSW5kZXhdICovCiBzdGF0aWMgaW5saW5lIHZvaWQKLV9oYXNoX3Nh dmVpdGVtKEhhc2hTY2FuT3BhcXVlIHNvLCBpbnQgaXRlbUluZGV4LAorX2hhc2hfc2F2ZWl0ZW0o SW5kZXhTY2FuQmF0Y2ggYmF0Y2gsIGludCBpdGVtSW5kZXgsCiAJCQkgICBPZmZzZXROdW1iZXIg b2ZmbnVtLCBJbmRleFR1cGxlIGl0dXApCiB7Ci0JSGFzaFNjYW5Qb3NJdGVtICpjdXJySXRlbSA9 ICZzby0+Y3VyclBvcy5pdGVtc1tpdGVtSW5kZXhdOworCUJhdGNoTWF0Y2hpbmdJdGVtICpjdXJy SXRlbSA9ICZiYXRjaC0+aXRlbXNbaXRlbUluZGV4XTsKIAotCWN1cnJJdGVtLT5oZWFwVGlkID0g aXR1cC0+dF90aWQ7CisJY3Vyckl0ZW0tPnRhYmxlVGlkID0gaXR1cC0+dF90aWQ7CiAJY3Vyckl0 ZW0tPmluZGV4T2Zmc2V0ID0gb2ZmbnVtOworCWN1cnJJdGVtLT50dXBsZU9mZnNldCA9IDA7CiB9 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNodXRpbC5jIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL2hhc2gvaGFzaHV0aWwuYwppbmRleCAwODFhZGJjODguLjMzMWQ1ZjRkYSAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHV0aWwuYworKysgYi9zcmMv YmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNodXRpbC5jCkBAIC0xNiw3ICsxNiw2IEBACiAKICNpbmNs dWRlICJhY2Nlc3MvaGFzaC5oIgogI2luY2x1ZGUgImFjY2Vzcy9yZWxvcHRpb25zLmgiCi0jaW5j bHVkZSAiYWNjZXNzL3JlbHNjYW4uaCIKICNpbmNsdWRlICJwb3J0L3BnX2JpdHV0aWxzLmgiCiAj aW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsLmgiCkBAIC0z Myw3ICszMiw3IEBAIF9oYXNoX2NoZWNrcXVhbChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4VHVw bGUgaXR1cCkKIAkvKgogCSAqIEN1cnJlbnRseSwgd2UgY2FuJ3QgY2hlY2sgYW55IG9mIHRoZSBz Y2FuIGNvbmRpdGlvbnMgc2luY2Ugd2UgZG8gbm90CiAJICogaGF2ZSB0aGUgb3JpZ2luYWwgaW5k ZXggZW50cnkgdmFsdWUgdG8gc3VwcGx5IHRvIHRoZSBza19mdW5jLiBBbHdheXMKLQkgKiByZXR1 cm4gdHJ1ZTsgd2UgZXhwZWN0IHRoYXQgaGFzaGdldHR1cGxlIGFscmVhZHkgc2V0IHRoZSByZWNo ZWNrIGZsYWcKKwkgKiByZXR1cm4gdHJ1ZTsgd2UgZXhwZWN0IHRoYXQgaGFzaGdldGJhdGNoIGFs cmVhZHkgc2V0IHRoZSByZWNoZWNrIGZsYWcKIAkgKiB0byBtYWtlIHRoZSBtYWluIGluZGV4c2Nh biBjb2RlIGRvIGl0LgogCSAqLwogI2lmZGVmIE5PVF9VU0VECkBAIC01MDUsMTI5ICs1MDQsMyBA QCBfaGFzaF9nZXRfbmV3YnVja2V0X2Zyb21fb2xkYnVja2V0KFJlbGF0aW9uIHJlbCwgQnVja2V0 IG9sZF9idWNrZXQsCiAKIAlyZXR1cm4gbmV3X2J1Y2tldDsKIH0KLQotLyoKLSAqIF9oYXNoX2tp bGxfaXRlbXMgLSBzZXQgTFBfREVBRCBzdGF0ZSBmb3IgaXRlbXMgYW4gaW5kZXhzY2FuIGNhbGxl ciBoYXMKLSAqIHRvbGQgdXMgd2VyZSBraWxsZWQuCi0gKgotICogc2Nhbi0+b3BhcXVlLCByZWZl cmVuY2VkIGxvY2FsbHkgdGhyb3VnaCBzbywgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhl Ci0gKiBjdXJyZW50IHBhZ2UgYW5kIGtpbGxlZCB0dXBsZXMgdGhlcmVvbiAoZ2VuZXJhbGx5LCB0 aGlzIHNob3VsZCBvbmx5IGJlCi0gKiBjYWxsZWQgaWYgc28tPm51bUtpbGxlZCA+IDApLgotICoK LSAqIFRoZSBjYWxsZXIgZG9lcyBub3QgaGF2ZSBhIGxvY2sgb24gdGhlIHBhZ2UgYW5kIG1heSBv ciBtYXkgbm90IGhhdmUgdGhlCi0gKiBwYWdlIHBpbm5lZCBpbiBhIGJ1ZmZlci4gIE5vdGUgdGhh dCByZWFkLWxvY2sgaXMgc3VmZmljaWVudCBmb3Igc2V0dGluZwotICogTFBfREVBRCBzdGF0dXMg KHdoaWNoIGlzIG9ubHkgYSBoaW50KS4KLSAqCi0gKiBUaGUgY2FsbGVyIG11c3QgaGF2ZSBwaW4g b24gYnVja2V0IGJ1ZmZlciwgYnV0IG1heSBvciBtYXkgbm90IGhhdmUgcGluCi0gKiBvbiBvdmVy ZmxvdyBidWZmZXIsIGFzIGluZGljYXRlZCBieSBIYXNoU2NhblBvc0lzUGlubmVkKHNvLT5jdXJy UG9zKS4KLSAqCi0gKiBXZSBtYXRjaCBpdGVtcyBieSBoZWFwIFRJRCBiZWZvcmUgYXNzdW1pbmcg dGhleSBhcmUgdGhlIHJpZ2h0IG9uZXMgdG8KLSAqIGRlbGV0ZS4KLSAqCi0gKiBUaGVyZSBhcmUg bmV2ZXIgYW55IHNjYW5zIGFjdGl2ZSBpbiBhIGJ1Y2tldCBhdCB0aGUgdGltZSBWQUNVVU0gYmVn aW5zLAotICogYmVjYXVzZSBWQUNVVU0gdGFrZXMgYSBjbGVhbnVwIGxvY2sgb24gdGhlIHByaW1h cnkgYnVja2V0IHBhZ2UgYW5kIHNjYW5zCi0gKiBob2xkIGEgcGluLiAgQSBzY2FuIGNhbiBiZWdp biBhZnRlciBWQUNVVU0gbGVhdmVzIHRoZSBwcmltYXJ5IGJ1Y2tldCBwYWdlCi0gKiBidXQgYmVm b3JlIGl0IGZpbmlzaGVzIHRoZSBlbnRpcmUgYnVja2V0LCBidXQgaXQgY2FuIG5ldmVyIHBhc3Mg VkFDVVVNLAotICogYmVjYXVzZSBWQUNVVU0gYWx3YXlzIGxvY2tzIHRoZSBuZXh0IHBhZ2UgYmVm b3JlIHJlbGVhc2luZyB0aGUgbG9jayBvbgotICogdGhlIHByZXZpb3VzIG9uZS4gIFRoZXJlZm9y ZSwgd2UgZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCBhY2NpZGVudGFsbHkKLSAqIGtpbGxpbmcg YSBUSUQgdGhhdCBoYXMgYmVlbiByZXVzZWQgZm9yIGFuIHVucmVsYXRlZCB0dXBsZS4KLSAqLwot dm9pZAotX2hhc2hfa2lsbF9pdGVtcyhJbmRleFNjYW5EZXNjIHNjYW4pCi17Ci0JSGFzaFNjYW5P cGFxdWUgc28gPSAoSGFzaFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKLQlSZWxhdGlvbglyZWwg PSBzY2FuLT5pbmRleFJlbGF0aW9uOwotCUJsb2NrTnVtYmVyIGJsa25vOwotCUJ1ZmZlcgkJYnVm OwotCVBhZ2UJCXBhZ2U7Ci0JSGFzaFBhZ2VPcGFxdWUgb3BhcXVlOwotCU9mZnNldE51bWJlciBv ZmZudW0sCi0JCQkJbWF4b2ZmOwotCWludAkJCW51bUtpbGxlZCA9IHNvLT5udW1LaWxsZWQ7Ci0J aW50CQkJaTsKLQlib29sCQlraWxsZWRzb21ldGhpbmcgPSBmYWxzZTsKLQlib29sCQloYXZlUGlu ID0gZmFsc2U7Ci0KLQlBc3NlcnQoc28tPm51bUtpbGxlZCA+IDApOwotCUFzc2VydChzby0+a2ls bGVkSXRlbXMgIT0gTlVMTCk7Ci0JQXNzZXJ0KEhhc2hTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBv cykpOwotCi0JLyoKLQkgKiBBbHdheXMgcmVzZXQgdGhlIHNjYW4gc3RhdGUsIHNvIHdlIGRvbid0 IGxvb2sgZm9yIHNhbWUgaXRlbXMgb24gb3RoZXIKLQkgKiBwYWdlcy4KLQkgKi8KLQlzby0+bnVt S2lsbGVkID0gMDsKLQotCWJsa25vID0gc28tPmN1cnJQb3MuY3VyclBhZ2U7Ci0JaWYgKEhhc2hT Y2FuUG9zSXNQaW5uZWQoc28tPmN1cnJQb3MpKQotCXsKLQkJLyoKLQkJICogV2UgYWxyZWFkeSBo YXZlIHBpbiBvbiB0aGlzIGJ1ZmZlciwgc28sIGFsbCB3ZSBuZWVkIHRvIGRvIGlzCi0JCSAqIGFj cXVpcmUgbG9jayBvbiBpdC4KLQkJICovCi0JCWhhdmVQaW4gPSB0cnVlOwotCQlidWYgPSBzby0+ Y3VyclBvcy5idWY7Ci0JCUxvY2tCdWZmZXIoYnVmLCBCVUZGRVJfTE9DS19TSEFSRSk7Ci0JfQot CWVsc2UKLQkJYnVmID0gX2hhc2hfZ2V0YnVmKHJlbCwgYmxrbm8sIEhBU0hfUkVBRCwgTEhfT1ZF UkZMT1dfUEFHRSk7Ci0KLQlwYWdlID0gQnVmZmVyR2V0UGFnZShidWYpOwotCW9wYXF1ZSA9IEhh c2hQYWdlR2V0T3BhcXVlKHBhZ2UpOwotCW1heG9mZiA9IFBhZ2VHZXRNYXhPZmZzZXROdW1iZXIo cGFnZSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnVtS2lsbGVkOyBpKyspCi0JewotCQlpbnQJCQlp dGVtSW5kZXggPSBzby0+a2lsbGVkSXRlbXNbaV07Ci0JCUhhc2hTY2FuUG9zSXRlbSAqY3Vyckl0 ZW0gPSAmc28tPmN1cnJQb3MuaXRlbXNbaXRlbUluZGV4XTsKLQotCQlvZmZudW0gPSBjdXJySXRl bS0+aW5kZXhPZmZzZXQ7Ci0KLQkJQXNzZXJ0KGl0ZW1JbmRleCA+PSBzby0+Y3VyclBvcy5maXJz dEl0ZW0gJiYKLQkJCSAgIGl0ZW1JbmRleCA8PSBzby0+Y3VyclBvcy5sYXN0SXRlbSk7Ci0KLQkJ d2hpbGUgKG9mZm51bSA8PSBtYXhvZmYpCi0JCXsKLQkJCUl0ZW1JZAkJaWlkID0gUGFnZUdldEl0 ZW1JZChwYWdlLCBvZmZudW0pOwotCQkJSW5kZXhUdXBsZQlpdHVwbGUgPSAoSW5kZXhUdXBsZSkg UGFnZUdldEl0ZW0ocGFnZSwgaWlkKTsKLQotCQkJaWYgKEl0ZW1Qb2ludGVyRXF1YWxzKCZpdHVw bGUtPnRfdGlkLCAmY3Vyckl0ZW0tPmhlYXBUaWQpKQotCQkJewotCQkJCWlmICgha2lsbGVkc29t ZXRoaW5nKQotCQkJCXsKLQkJCQkJLyoKLQkJCQkJICogVXNlIHRoZSBoaW50IGJpdCBpbmZyYXN0 cnVjdHVyZSB0byBjaGVjayBpZiB3ZSBjYW4KLQkJCQkJICogdXBkYXRlIHRoZSBwYWdlIHdoaWxl IGp1c3QgaG9sZGluZyBhIHNoYXJlIGxvY2suIElmIHdlCi0JCQkJCSAqIGFyZSBub3QgYWxsb3dl ZCwgdGhlcmUncyBubyBwb2ludCBjb250aW51aW5nLgotCQkJCQkgKi8KLQkJCQkJaWYgKCFCdWZm ZXJCZWdpblNldEhpbnRCaXRzKGJ1ZikpCi0JCQkJCQlnb3RvIHVubG9ja19wYWdlOwotCQkJCX0K LQotCQkJCS8qIGZvdW5kIHRoZSBpdGVtICovCi0JCQkJSXRlbUlkTWFya0RlYWQoaWlkKTsKLQkJ CQlraWxsZWRzb21ldGhpbmcgPSB0cnVlOwotCQkJCWJyZWFrOwkJCS8qIG91dCBvZiBpbm5lciBz ZWFyY2ggbG9vcCAqLwotCQkJfQotCQkJb2ZmbnVtID0gT2Zmc2V0TnVtYmVyTmV4dChvZmZudW0p OwotCQl9Ci0JfQotCi0JLyoKLQkgKiBTaW5jZSB0aGlzIGNhbiBiZSByZWRvbmUgbGF0ZXIgaWYg bmVlZGVkLCBtYXJrIGFzIGRpcnR5IGhpbnQuIFdoZW5ldmVyCi0JICogd2UgbWFyayBhbnl0aGlu ZyBMUF9ERUFELCB3ZSBhbHNvIHNldCB0aGUgcGFnZSdzCi0JICogTEhfUEFHRV9IQVNfREVBRF9U VVBMRVMgZmxhZywgd2hpY2ggaXMgbGlrZXdpc2UganVzdCBhIGhpbnQuCi0JICovCi0JaWYgKGtp bGxlZHNvbWV0aGluZykKLQl7Ci0JCW9wYXF1ZS0+aGFzaG9fZmxhZyB8PSBMSF9QQUdFX0hBU19E RUFEX1RVUExFUzsKLQkJQnVmZmVyRmluaXNoU2V0SGludEJpdHMoYnVmLCB0cnVlLCB0cnVlKTsK LQl9Ci0KLXVubG9ja19wYWdlOgotCWlmIChzby0+aGFzaHNvX2J1Y2tldF9idWYgPT0gc28tPmN1 cnJQb3MuYnVmIHx8Ci0JCWhhdmVQaW4pCi0JCUxvY2tCdWZmZXIoc28tPmN1cnJQb3MuYnVmLCBC VUZGRVJfTE9DS19VTkxPQ0spOwotCWVsc2UKLQkJX2hhc2hfcmVsYnVmKHJlbCwgYnVmKTsKLX0K ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwgYi9kb2Mvc3JjL3NnbWwvaW5k ZXhhbS5zZ21sCmluZGV4IDM3Yjc1MzYxZS4uOGRkMDhkMjU2IDEwMDY0NAotLS0gYS9kb2Mvc3Jj L3NnbWwvaW5kZXhhbS5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwKQEAgLTg0 NSw3ICs4NDUsOCBAQCBhbWdldGJhdGNoIChJbmRleFNjYW5EZXNjIHNjYW4sCiAgICA8ZnVuY3Rp b24+dGFibGVhbV91dGlsX2ZyZWVfYmF0Y2g8L2Z1bmN0aW9uPikuICBOb3RlIGFsc28gdGhhdAog ICAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBmdW5jdGlvbnMgbXVzdCBuZXZlciBt b2RpZnkgdGhlCiAgICA8c3RydWN0ZmllbGQ+cHJpb3JiYXRjaDwvc3RydWN0ZmllbGQ+IHBhcmFt ZXRlci4gIFRoZSBjb3JlCi0gICA8ZmlsZW5hbWU+c3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS88 L2ZpbGVuYW1lPiBpbXBsZW1lbnRhdGlvbiBwcm92aWRlcyBhCisgICA8ZmlsZW5hbWU+c3JjL2Jh Y2tlbmQvYWNjZXNzL25idHJlZS88L2ZpbGVuYW1lPiBhbmQKKyAgIDxmaWxlbmFtZT5zcmMvYmFj a2VuZC9hY2Nlc3MvaGFzaC88L2ZpbGVuYW1lPiBpbXBsZW1lbnRhdGlvbnMgcHJvdmlkZQogICAg cmVmZXJlbmNlIGV4YW1wbGVzIG9mIHRoZSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+ IGludGVyZmFjZS4KICAgPC9wYXJhPgogCkBAIC05MjEsOCArOTIyLDggQEAgYW1raWxsaXRlbXNi YXRjaCAoSW5kZXhTY2FuRGVzYyBzY2FuLAogICA8cGFyYT4KICAgIFdoaWxlIGltcGxlbWVudGlu ZyA8ZnVuY3Rpb24+YW1raWxsaXRlbXNiYXRjaDwvZnVuY3Rpb24+IGlzIG9wdGlvbmFsLAogICAg ZG9pbmcgc28gaXMgcmVjb21tZW5kZWQgZm9yIHBlcmZvcm1hbmNlLCBhcyBpdCBhbGxvd3MgZnV0 dXJlIHNjYW5zIHRvIHNraXAKLSAgIGtub3duLWRlYWQgaW5kZXggZW50cmllcy4gIFRoZSBjb3Jl IGluZGV4IGFjY2VzcyBtZXRob2QgdGhhdCBjdXJyZW50bHkKLSAgIHN1cHBvcnQgPGZ1bmN0aW9u PmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiAoQi10cmVlKSBpbXBsZW1lbnRzCisgICBrbm93bi1kZWFk IGluZGV4IGVudHJpZXMuICBCb3RoIGNvcmUgaW5kZXggYWNjZXNzIG1ldGhvZHMgdGhhdCBjdXJy ZW50bHkKKyAgIHN1cHBvcnQgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiAoQi10cmVl IGFuZCBoYXNoKSBpbXBsZW1lbnQKICAgIDxsaXRlcmFsPkxQX0RFQUQ8L2xpdGVyYWw+IG1hcmtp bmcsIHRob3VnaCB0aGlyZC1wYXJ0eSBpbmRleCBhY2Nlc3MgbWV0aG9kcwogICAgYXJlIGZyZWUg dG8gY2hvb3NlIHdoZXRoZXIgdG8gaW1wbGVtZW50IHRoaXMgZmVhdHVyZS4KICAgIFRoZSB0YWJs ZSBBTSBtYXkgY2FsbApAQCAtOTY1LDggKzk2Niw4IEBAIGFta2lsbGl0ZW1zYmF0Y2ggKEluZGV4 U2NhbkRlc2Mgc2NhbiwKICAgIGFsd2F5cyBzYWZlIHRvIHNraXAgaXQuICBOb3RlIHRoYXQgdGhp cyBMU04gY29tcGFyaXNvbiB0ZWNobmlxdWUgcmVxdWlyZXMKICAgIHRoZSBpbmRleCBBTSB0byB1 c2UgZmFrZSAobW9ub3RvbmljYWxseSBpbmNyZWFzaW5nKSBMU05zIG9uIGl0cyBwYWdlcyBmb3IK ICAgIHJlbGF0aW9ucyB3aGVyZSBXQUwgaXMgbm90IGdlbmVyYXRlZCwgc2luY2UgcmVhbCBMU05z IGFyZSBub3QgYXZhaWxhYmxlIGluCi0gICB0aGF0IGNhc2UuICBTZWUgdGhlIEItdHJlZSBpbmRl eCBpbXBsZW1lbnRhdGlvbiBmb3IgYSByZWZlcmVuY2UKLSAgIGV4YW1wbGUgb2YgdGhpcyB0ZWNo bmlxdWUuICBBbiBpbmRleCBBTSB0aGF0IGRvZXMgbm90IGltcGxlbWVudCBmYWtlIExTTnMKKyAg IHRoYXQgY2FzZS4gIFNlZSB0aGUgQi10cmVlIGFuZCBoYXNoIGluZGV4IGltcGxlbWVudGF0aW9u cyBmb3IgcmVmZXJlbmNlCisgICBleGFtcGxlcyBvZiB0aGlzIHRlY2huaXF1ZS4gIEFuIGluZGV4 IEFNIHRoYXQgZG9lcyBub3QgaW1wbGVtZW50IGZha2UgTFNOcwogICAgY2FuIHN0aWxsIHByb3Zp ZGUgPGZ1bmN0aW9uPmFta2lsbGl0ZW1zYmF0Y2g8L2Z1bmN0aW9uPiwgYnV0IHNob3VsZCBzaW1w bHkKICAgIGRvIG5vdGhpbmcgd2hlbiB0aGUgcmVsYXRpb24gZG9lcyBub3QgZ2VuZXJhdGUgV0FM IChpLmUuLCB3aGVuCiAgICA8ZnVuY3Rpb24+UmVsYXRpb25OZWVkc1dBTCgpPC9mdW5jdGlvbj4g aXMgZmFsc2UpLCBzaW5jZSB0aGUgTFNOIGNvbXBhcmlzb24KQEAgLTk5Myw5ICs5OTQsOSBAQCBh bXVuZ3VhcmRiYXRjaCAoSW5kZXhTY2FuRGVzYyBzY2FuLAogICAgbGVhZiBwYWdlLCB3aGljaCBw cmV2ZW50cyBjb25jdXJyZW50IFRJRCByZWN5Y2xpbmcgYnkKICAgIDxjb21tYW5kPlZBQ1VVTTwv Y29tbWFuZD4uCiAgICBGb3JtYWxseSwgYW4gaW5kZXggQU0gbWF5IGhvbGQgYSBkaWZmZXJlbnQg a2luZCBvZiBpbnRlcmxvY2ssIG9yIG11bHRpcGxlCi0gICBpbnRlcmxvY2tzLCBpbiBpdHMgcGVy LWJhdGNoIG9wYXF1ZSBhcmVhLCBidXQgaW4gcHJhY3RpY2UgdGhlIGJ1aWx0LWluCi0gICBpbmRl eCBBTSB0aGF0IHN1cHBvcnRzIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gJm1kYXNo OyBCLXRyZWUKLSAgICZtZGFzaDsgaG9sZHMgYSBzaW5nbGUgYnVmZmVyIHBpbi4gIFNlZSA8eHJl ZiBsaW5rZW5kPSJpbmRleC1sb2NraW5nIi8+CisgICBpbnRlcmxvY2tzLCBpbiBpdHMgcGVyLWJh dGNoIG9wYXF1ZSBhcmVhLCBidXQgaW4gcHJhY3RpY2UgYm90aCBidWlsdC1pbgorICAgaW5kZXgg QU1zIHRoYXQgc3VwcG9ydCA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+ICZtZGFzaDsg Qi10cmVlIGFuZAorICAgaGFzaCAmbWRhc2g7IGhvbGQgYSBzaW5nbGUgYnVmZmVyIHBpbi4gIFNl ZSA8eHJlZiBsaW5rZW5kPSJpbmRleC1sb2NraW5nIi8+CiAgICBmb3IgZGV0YWlscyBvbiBidWZm ZXIgcGluIG1hbmFnZW1lbnQgZHVyaW5nIGluZGV4IHNjYW5zLiAgVGhpcyBmdW5jdGlvbgogICAg d2lsbCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGZvciBlYWNoIGd1YXJkZWQgYmF0Y2guCiAgIDwv cGFyYT4KQEAgLTEwNjUsOCArMTA2Niw4IEBAIGFtZ2V0Yml0bWFwIChJbmRleFNjYW5EZXNjIHNj YW4sCiAgICA8ZnVuY3Rpb24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiBzY2FuczsgZHVyaW5nIDxm dW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4KICAgIHNjYW5zIHRoZSA8bGl0ZXJhbD5wcmlv cmJhdGNoPC9saXRlcmFsPiBpcyBzdHJpY3RseSBvd25lZCBieSB0aGUgdGFibGUgQU0KICAgIGFu ZCBjb3JlIGNvZGUsIGFuZCB0aGUgaW5kZXggQU0gbXVzdCBuZXZlciByZWxlYXNlIGl0LiAgU2Vl Ci0gICA8ZnVuY3Rpb24+X2J0X25leHQ8L2Z1bmN0aW9uPiBmb3IgYQotICAgcmVmZXJlbmNlIGV4 YW1wbGUuICBUaGUgcmVsZWFzZWQgYmF0Y2ggaXMgY2FjaGVkIGludGVybmFsbHkgYW5kIHJldXNl ZCBieQorICAgPGZ1bmN0aW9uPl9idF9uZXh0PC9mdW5jdGlvbj4gYW5kIDxmdW5jdGlvbj5faGFz aF9uZXh0PC9mdW5jdGlvbj4gZm9yCisgICByZWZlcmVuY2UgZXhhbXBsZXMuICBUaGUgcmVsZWFz ZWQgYmF0Y2ggaXMgY2FjaGVkIGludGVybmFsbHkgYW5kIHJldXNlZCBieQogICAgdGhlIG5leHQg PGZ1bmN0aW9uPmluZGV4YW1fdXRpbF9iYXRjaF9hbGxvYzwvZnVuY3Rpb24+IGNhbGwsIGF2b2lk aW5nCiAgICByZXBlYXRlZCBtZW1vcnkgYWxsb2NhdGlvbiBkdXJpbmcgdGhlIGJpdG1hcCBzY2Fu LgogICA8L3BhcmE+CmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlz dCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDIzZTA0M2NjMC4uMmVl NmQ1ODBlIDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysg Yi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtMTIxMCw2ICsxMjEwLDcgQEAg SGFzaAogSGFzaEFnZ0JhdGNoCiBIYXNoQWdnU3BpbGwKIEhhc2hBbGxvY0Z1bmMKK0hhc2hCYXRj aERhdGEKIEhhc2hCdWlsZFN0YXRlCiBIYXNoQnVsa0RlbGV0ZVN0cmVhbVByaXZhdGUKIEhhc2hD b21wYXJlRnVuYwpAQCAtMTIzMSw4ICsxMjMyLDYgQEAgSGFzaFBhZ2VTdGF0CiBIYXNoUGF0aAog SGFzaFNjYW5PcGFxdWUKIEhhc2hTY2FuT3BhcXVlRGF0YQotSGFzaFNjYW5Qb3NEYXRhCi1IYXNo U2NhblBvc0l0ZW0KIEhhc2hTa2V3QnVja2V0CiBIYXNoU3RhdGUKIEhhc2hWYWx1ZUZ1bmMKLS0g CjIuNTMuMAoK --000000000000f287f9064e6de93c Content-Type: application/octet-stream; name="v20-0008-heapam-Add-index-scan-I-O-prefetching.patch" Content-Disposition: attachment; filename="v20-0008-heapam-Add-index-scan-I-O-prefetching.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mngmwp6310 RnJvbSA3OTg1MTJiNzk3MmU2NzE5YjY5NDIyMzUwZmI5NmE4MmI1NWQ2MzljIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFdl ZCwgMjUgTWFyIDIwMjYgMTY6NTg6MDkgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyMCAwOC8xN10g aGVhcGFtOiBBZGQgaW5kZXggc2NhbiBJL08gcHJlZmV0Y2hpbmcuCgpUaGlzIGNvbW1pdCBpbXBs ZW1lbnRzIEkvTyBwcmVmZXRjaGluZyBmb3IgaW5kZXggc2NhbnMgKGFuZCBpbmRleC1vbmx5CnNj YW5zIHRoYXQgcmVxdWlyZSBoZWFwIGZldGNoZXMpLiBUaGlzIHdhcyBtYWRlIHBvc3NpYmxlIGJ5 IHRoZSByZWNlbnQKYWRkaXRpb24gb2YgYmF0Y2hpbmcgaW50ZXJmYWNlcyB0byBib3RoIHRoZSB0 YWJsZSBBTSBhbmQgaW5kZXggQU0gQVBJcy4KClRoZSBhbWdldGJhdGNoIGluZGV4IEFNIGludGVy ZmFjZSBwcm92aWRlcyBiYXRjaGVzIG9mIG1hdGNoaW5nIFRJRHMKKHJhdGhlciB0aGFuIG9uZSB0 dXBsZSBhdCBhIHRpbWUpLCBlYWNoIG9mIHdoaWNoIG11c3QgYmUgdGFrZW4gZnJvbQppbmRleCB0 dXBsZXMgdGhhdCBhcHBlYXIgdG9nZXRoZXIgb24gYSBzaW5nbGUgaW5kZXggcGFnZS4gIFRoaXMg YWxsb3dzCm11bHRpcGxlIGJhdGNoZXMgdG8gYmUgaGVsZCBvcGVuIHNpbXVsdGFuZW91c2x5LiAg R2l2aW5nIHRoZSB0YWJsZSBBTSBhbgpleHBsaWNpdCB1bmRlcnN0YW5kaW5nIG9mIGluZGV4IEFN IGNvbmNlcHRzL2luZGV4IHBhZ2UgYm91bmRhcmllcyBhbGxvd3MKaXQgdG8gY29uc2lkZXIgYWxs IG9mIHRoZSByZWxldmFudCBjb3N0cyBhbmQgYmVuZWZpdHMuCgpQcmVmZXRjaGluZyBpcyBpbXBs ZW1lbnRlZCB1c2luZyBhIHByZWZldGNoaW5nIHBvc2l0aW9uIHVuZGVyIHRoZQpjb250cm9sIG9m IHRoZSB0YWJsZSBBTSBhbmQgY29yZSBjb2RlLiAgVGhpcyBpcyBjbG9zZWx5IHJlbGF0ZWQgdG8g dGhlCnNjYW4gcG9zaXRpb24gYWRkZWQgYnkgY29tbWl0IEZJWE1FLCB3aGljaCBpbnRyb2R1Y2Vk IHRoZSBhbWdldGJhdGNoCmludGVyZmFjZS4gIEEgcmVhZCBzdHJlYW0gY2FsbGJhY2sgYWR2YW5j ZXMgdGhlIHJlYWQgc3RyZWFtIGFzIG5lZWRlZCB0bwpwcm92aWRlIHN1ZmZpY2llbnRseSBtYW55 IGhlYXAgYmxvY2sgbnVtYmVycyB0byBtYWludGFpbiB0aGUgcmVhZApzdHJlYW0ncyB0YXJnZXQg cHJlZmV0Y2ggZGlzdGFuY2UuCgpUZXN0aW5nIGhhcyBzaG93biB0aGF0IGluZGV4IHByZWZldGNo aW5nIGNhbiBtYWtlIGluZGV4IHNjYW5zIG11Y2gKZmFzdGVyLiAgTGFyZ2UgcmFuZ2Ugc2NhbnMg dGhhdCByZXR1cm4gbWFueSB0dXBsZXMgY2FuIGJlIGFzIG11Y2ggYXMgMzB4CmZhc3RlciB3aXRo IGxvY2FsIFNTRHMgd2hlbiBidWZmZXJlZCBJL08gaXMgdXNlZCwgYW5kIDUweCBmYXN0ZXIgb3Ig bW9yZQp3aXRoIGhpZ2hlci1sYXRlbmN5IHN0b3JhZ2Ugc3VjaCBhcyBuZXR3b3JrLWF0dGFjaGVk IGJsb2NrIGRldmljZXMsCndoZXJlIHRoZSBiZW5lZml0IG9mIGhpZGluZyBJL08gbGF0ZW5jeSB0 aHJvdWdoIHByZWZldGNoaW5nIGlzIGV2ZW4KZ3JlYXRlci4KCkEgbmV3IEdVQyAoZW5hYmxlX2lu ZGV4c2Nhbl9wcmVmZXRjaCkgY29udHJvbHMgdGhlIHVzZSBvZiBpbmRleApwcmVmZXRjaGluZy4g IFRoZSBkZWZhdWx0IHNldHRpbmcgaXMgJ29uJywgc28gYWxsIHBsYWluIGluZGV4IHNjYW5zIHVz ZQpwcmVmZXRjaGluZyB3aGVyZSBzdXBwb3J0IGV4aXN0cy4gIEFsbCBpbmRleC1vbmx5IHNjYW5z IHdpbGwgYWxzbyB1c2UKcHJlZmV0Y2hpbmcgYXV0b21hdGljYWxseSB3aGVyZSBzdXBwb3J0ZWQg KG9uY2UgdGhlIHNjYW4gc3RhcnRzIHRvCnJlcXVpcmUgYSBzaWduaWZpY2FudCBudW1iZXIgb2Yg aGVhcCBmZXRjaGVzKS4KCkFuIGltcG9ydGFudCBnb2FsIG9mIHRoZSBhbWdldGJhdGNoIGRlc2ln biBpcyB0byBlbmFibGUgdGhlIHRhYmxlIEFNJ3MKcmVhZCBzdHJlYW0gY2FsbGJhY2sgdG8gYWR2 YW5jZSBpdHMgcHJlZmV0Y2ggcG9zaXRpb24gdXNpbmcgVElEcyB0aGF0CmFwcGVhciBvbiBhIGxl YWYgcGFnZSB0aGF0J3MgYWhlYWQgb2YgdGhlIGN1cnJlbnQgc2NhbiBwb3NpdGlvbidzIGxlYWYK cGFnZS4gIFRoaXMgaXMgY3J1Y2lhbCB3aXRoIHNjYW5zIG9mIGluZGV4ZXMgd2hlcmUgZWFjaCBs ZWFmIHBhZ2UKaGFwcGVucyB0byBoYXZlIHJlbGF0aXZlbHkgZmV3IGRpc3RpbmN0IGhlYXAgYmxv Y2tzIGFtb25nIGl0cyBtYXRjaGluZwpUSURzIChhcyB3ZWxsIGFzIHdpdGggc2NhbnMgd2l0aCBs ZWFmIHBhZ2VzIHRoYXQgaGF2ZSByZWxhdGl2ZWx5IGZldwp0b3RhbCBtYXRjaGluZyBpdGVtcyku ICBJbmRleCBzY2FucyBjYW4gaGF2ZSBhcyBtYW55IGFzIDY0IG9wZW4gYmF0Y2hlcywKd2hpY2gg dGVzdGluZyBoYXMgc2hvd24gdG8gYmUgYWJvdXQgdGhlIG1heGltdW0gbnVtYmVyIHRoYXQgY2Fu IGV2ZXIgYmUKdXNlZnVsLiAgQmF0Y2hlcyBhcmUgbWFpbnRhaW5lZCBpbiBzY2FuIG9yZGVyIHVz aW5nIGEgc2ltcGxlIHJpbmcgYnVmZmVyCmRhdGEgc3RydWN0dXJlLgoKSW4gcmFyZSBjYXNlcyB3 aGVyZSB0aGUgc2NhbiBleGNlZWRzIHRoaXMgcXVhc2ktYXJiaXRyYXJ5IGxpbWl0IG9mIDY0LAp0 aGUgcmVhZCBzdHJlYW0gaXMgdGVtcG9yYXJpbHkgcGF1c2VkIHVzaW5nIHRoZSByZWFkIHN0cmVh bSBwYXVzaW5nCm1lY2hhbmlzbSBhZGRlZCBieSBjb21taXQgMzgyMjljYjkuICBQcmVmZXRjaGlu ZyAodmlhIHRoZSByZWFkIHN0cmVhbSkKaXMgcmVzdW1lZCBvbmx5IGFmdGVyIHRoZSBzY2FuIHBv c2l0aW9uIGFkdmFuY2VzIGJleW9uZCBpdHMgY3VycmVudCBvcGVuCmJhdGNoIGFuZCB0aGVuIGZy ZWVzIGFuZCByZW1vdmVzIHRoZSBiYXRjaCBmcm9tIHRoZSBzY2FuJ3MgYmF0Y2ggcmluZwpidWZm ZXIuICBUZXN0aW5nIGhhcyBzaG93biB0aGF0IGl0IGlzbid0IHZlcnkgY29tbW9uIGZvciBzY2Fu cyB0byBob2xkCm9wZW4gbW9yZSB0aGFuIGFib3V0IDEwIGJhdGNoZXMgdG8gZ2V0IHRoZSBkZXNp cmVkIEkvTyBwcmVmZXRjaApkaXN0YW5jZS4KClRoZSBoZXVyaXN0aWMgdXNlZCB0byBkZWNpZGUg d2hlbiB0byBiZWdpbiBwcmVmZXRjaGluZyBkZWxheXMKaW5pdGlhbGl6YXRpb24gb2YgdGhlIHNj YW4ncyByZWFkIHN0cmVhbSB1bnRpbCB0aGUgc2NhbiB0cmFuc2l0aW9ucyBmcm9tCml0cyBmaXJz dCBiYXRjaCB0byBpdHMgc2Vjb25kIGJhdGNoLiAgRWFjaCBiYXRjaCBjb3JyZXNwb25kcyB0byBt YXRjaGluZwpUSURzIGZyb20gYSBzaW5nbGUgaW5kZXggbGVhZiBwYWdlLCBzbyBwcmVmZXRjaGlu ZyBvbmx5IGJlZ2lucyBvbmNlIHRoZQpzY2FuIHJlYWRzIGZyb20gaXRzIHNlY29uZCBsZWFmIHBh Z2UgY29udGFpbmluZyBhdCBsZWFzdCBvbmUgbWF0Y2hpbmcKaXRlbS4gIEEgc2VsZWN0aXZlIGlu ZGV4IHNjYW4gdGhhdCB0b3VjaGVzIG9ubHkgb25lIGxlYWYgcGFnZSBuZXZlcgpyZWFjaGVzIHRo ZSBzZWNvbmQgYmF0Y2gsIHNvIHRoZSBoZXVyaXN0aWMgY29ycmVjdGx5IGF2b2lkcyBwcmVmZXRj aGluZwpvdmVyaGVhZC4gIFRoZSBwaWN0dXJlIGZvciBtb3JlIGNvbXBsaWNhdGVkIGNhc2VzIGlz IG1peGVkLgoKVGhlIHNhbWUgcHJpbmNpcGxlIGFwcGxpZXMgdG8gbmVzdGxvb3AgaW5uZXIgaW5k ZXggc2NhbnMgd2l0aCB2ZXJ5IHRpZ2h0CmxpbWl0cyAoZS5nLiwgYSBjb3JyZWxhdGVkIHN1YnF1 ZXJ5IHdpdGggTElNSVQgMSksIHdoZXJlIGVhY2ggcmVzY2FuCnJlYWRzIGZyb20gb25seSBhIHNp bmdsZSBsZWFmIHBhZ2U6IHRoZSBoZXVyaXN0aWMgYXZvaWRzIHRoZSBjb3N0IG9mCnJlcGVhdGVk bHkgcmVzZXR0aW5nIGEgcmVhZCBzdHJlYW0gYWNyb3NzIG1hbnkgcmVzY2Fucy4gIE9uIHRoZSBv dGhlcgpoYW5kLCBzb21lIHNlbGVjdGl2ZSBzY2FucyB0aGF0IGFjY2VzcyByYW5kb21seS1vcmRl cmVkIGhlYXAgcGFnZXMgd291bGQKZ2VudWluZWx5IGJlbmVmaXQgZnJvbSBwcmVmZXRjaGluZywg YnV0IG5ldmVyIGdldCBhcyBmYXIgYXMgcmVhY2hpbmcKdGhlaXIgc2Vjb25kIGJhdGNoIC0tIGEg bWlzc2VkIG9wcG9ydHVuaXR5LCB3aGVyZSB0aGUgaGV1cmlzdGljIGlzCm92ZXJseSBjYXV0aW91 cy4KCkNvbnZlcnNlbHksIHRoZSBoZXVyaXN0aWMgaXMgbm90IGNhdXRpb3VzIGVub3VnaCB3aXRo IHNsaWdodGx5IGxlc3MKc2VsZWN0aXZlIG5lc3Rsb29wIGlubmVyIHNjYW5zIChlLmcuLCBMSU1J VCAzIHdpdGhpbiBhIExBVEVSQUwgam9pbikuClRoZXNlIHJlc2NhbnMgbWF5IHNwYW4gdHdvIGxl YWYgcGFnZXMsIGp1c3QgYmFyZWx5IGNyb3NzaW5nIHRoZQpzZWNvbmQtYmF0Y2ggdGhyZXNob2xk LCB3aGlsZSBzdGlsbCBvbmx5IG5lZWRpbmcgdG8gZmV0Y2ggdHdvIG9yIHRocmVlCmhlYXAgcGFn ZXMgLS0gbm90IGVub3VnaCBmb3IgcHJlZmV0Y2hpbmcgdG8gcmVhbGlzdGljYWxseSBoZWxwIG9y IHBheQpmb3IgaXRzZWxmIG9uIGFueSBpbmRpdmlkdWFsIHJlc2Nhbi4gIFN1Y2ggcXVlcmllcyBh cmUgcmVncmVzc2VkIGJ5IHRoZQp3b3JrIGZyb20gdGhpcyBjb21taXQgKHJlbGF0aXZlIHRvIFBv c3RncmVTUUwgMTgpLCB0aG91Z2ggb25seSB3aGVuIHRoZQpzY2FuIGhhcyB0byByZWFkIGhlYXAg cGFnZXMgZnJvbSBzdG9yYWdlLgoKQWRkaW5nIGEgc21hcnRlciBoZXVyaXN0aWMgdGhhdCBhZGRy ZXNzZXMgYm90aCBzaG9ydGNvbWluZ3MgcmVtYWlucyBhcwp3b3JrIGZvciBhIGZ1dHVyZSByZWxl YXNlLiAgUGFzc2luZyBkb3duIGFuIEV4ZWNTZXRUdXBsZUJvdW5kIHN0eWxlIGhpbnQKYW5kIHVz aW5nIHRoYXQgaGludCB0byBpbmZsdWVuY2UgaG93IHRoZSByZWFkIHN0cmVhbSByYW1wcyB1cCBp dHMKZGlzdGFuY2Ugc2VlbXMgbGlrZSBhIHByb21pc2luZyBhcHByb2FjaC4KCkF1dGhvcjogVG9t YXMgVm9uZHJhIDx0b21hc0B2b25kcmEubWU+CkF1dGhvcjogUGV0ZXIgR2VvZ2hlZ2FuIDxwZ0Bi b3d0LmllPgpSZXZpZXdlZC1CeTogQW5kcmVzIEZyZXVuZCA8YW5kcmVzQGFuYXJhemVsLmRlPgpS ZXZpZXdlZC1CeTogVGhvbWFzIE11bnJvIDx0aG9tYXMubXVucm9AZ21haWwuY29tPgpEaXNjdXNz aW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL2NmODVmNDZmLWIwMmYtMDViMi01MjQ4LTUwMDBiODk0 ZWJhYkBlbnRlcnByaXNlZGIuY29tCi0tLQogc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oICAg ICAgICAgICAgICAgICAgIHwgIDEwICsKIHNyYy9pbmNsdWRlL2FjY2Vzcy9pbmRleGJhdGNoLmgg ICAgICAgICAgICAgICB8ICAgOCArLQogc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaCAgICAg ICAgICAgICAgICAgIHwgIDQ0ICsrCiBzcmMvaW5jbHVkZS9vcHRpbWl6ZXIvY29zdC5oICAgICAg ICAgICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2luZGV4 c2Nhbi5jICAgIHwgNDYzICsrKysrKysrKysrKysrKysrLQogc3JjL2JhY2tlbmQvYWNjZXNzL2lu ZGV4L2luZGV4YmF0Y2guYyAgICAgICAgIHwgIDI2ICstCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIv cGF0aC9jb3N0c2l6ZS5jICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9n dWNfcGFyYW1ldGVycy5kYXQgICAgIHwgICA3ICsKIHNyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9z dGdyZXNxbC5jb25mLnNhbXBsZSB8ICAgMSArCiBkb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwgICAg ICAgICAgICAgICAgICAgICAgfCAgMTYgKwogZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbCAgICAg ICAgICAgICAgICAgICAgIHwgIDY2ICsrLQogZG9jL3NyYy9zZ21sL3RhYmxlYW0uc2dtbCAgICAg ICAgICAgICAgICAgICAgIHwgICA4ICsKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmll d3Mub3V0ICAgICAgICB8ICAgMyArLQogMTMgZmlsZXMgY2hhbmdlZCwgNjQxIGluc2VydGlvbnMo KyksIDEzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFw YW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaAppbmRleCBjM2JiODk1MzguLjdkN2Iw Nzc2NyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCisrKyBiL3NyYy9p bmNsdWRlL2FjY2Vzcy9oZWFwYW0uaApAQCAtMTM1LDYgKzEzNSwxNiBAQCB0eXBlZGVmIHN0cnVj dCBJbmRleEZldGNoSGVhcERhdGEKIAkvKiBQbGFpbiBpbmRleCBzY2FuIHhzX2xhc3RpbmJsb2Nr IG9wdGltaXphdGlvbiAqLwogCWJvb2wJCXhzX2xhc3RpbmJsb2NrOyAvKiBsYXN0IFRJRCBvbiB0 aGlzIGJsb2NrIGluIGN1cnJlbnQgYmF0Y2g/ICovCiAKKwkvKgorCSAqIFRoZSByZWFkIHN0cmVh bSBpcyBhbGxvY2F0ZWQgZWFybHkgaW4gdGhlIHNjYW4sIGFuZCByZXNldCBvbiByZXNjYW4uCisJ ICogVGhpcyByZXNldCBwcm9jZXNzIHJlbGVhc2VzIGFsbCBwZW5kaW5nIHBpbm5lZCBidWZmZXJz LiAgVGhlIHJlYWQKKwkgKiBzdHJlYW0gaXMgYWxzbyByZXNldCB3aGVuIHdlIGRldGVjdCBhIHNj YW4gZGlyZWN0aW9uIGNoYW5nZS4KKwkgKi8KKwlib29sCQl4c19wYXVzZWQ7CQkvKiBwYXVzZWQg dW50aWwgbmV4dCBiYXRjaCBpcyByZWFkPyAqLworCVNjYW5EaXJlY3Rpb24geHNfcmVhZF9zdHJl YW1fZGlyOwkvKiBpbmRleCBzY2FuIGRpcmVjdGlvbiAqLworCUJsb2NrTnVtYmVyIHhzX3ByZWZl dGNoX2Jsb2NrOwkvKiBsYXN0IGJsb2NrIHJldHVybmVkIHRvIHhzX3JlYWRfc3RyZWFtICovCisJ UmVhZFN0cmVhbSAqeHNfcmVhZF9zdHJlYW07IC8qIHByZWZldGNoaW5nIHJlYWQgc3RyZWFtICov CisKIH0gSW5kZXhGZXRjaEhlYXBEYXRhOwogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv YWNjZXNzL2luZGV4YmF0Y2guaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9pbmRleGJhdGNoLmgKaW5k ZXggNDI2NWFkN2RlLi4yNjUzNzkyODggMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9p bmRleGJhdGNoLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2luZGV4YmF0Y2guaApAQCAtNDgs MTYgKzQ4LDE2IEBAIGV4dGVybiB2b2lkIHRhYmxlYW1fdXRpbF91bmd1YXJkX2JhdGNoKEluZGV4 U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCiAvKgogICogRmV0Y2ggdGhlIG5l eHQgYmF0Y2ggb2YgbWF0Y2hpbmcgaXRlbXMgZm9yIHRoZSBzY2FuIChvciB0aGUgZmlyc3QpLgog ICoKLSAqIENhbGxlZCB3aGVuIGNhbGxlcidzIGN1cnJlbnQgYmF0Y2ggKHBhc3NlZCB0byB1cyBh cyBwcmlvckJhdGNoKSBoYXMgbm8gbW9yZQotICogbWF0Y2hpbmcgaXRlbXMgaW4gdGhlIGdpdmVu IHNjYW4gZGlyZWN0aW9uLiAgQ2FsbGVyIHBhc3NlcyBhIE5VTEwKLSAqIHByaW9yQmF0Y2ggb24g dGhlIGZpcnN0IGNhbGwgaGVyZSBmb3IgdGhlIHNjYW4uCisgKiBDYWxsZWQgd2hlbiBjYWxsZXIn cyBjdXJyZW50IHNjYW5CYXRjaC9wcmVmZXRjaEJhdGNoIChwYXNzZWQgdG8gdXMgYXMKKyAqIHBy aW9yQmF0Y2gpIGhhcyBubyBtb3JlIG1hdGNoaW5nIGl0ZW1zIGluIHRoZSBnaXZlbiBzY2FuIGRp cmVjdGlvbi4gIENhbGxlcgorICogcGFzc2VzIGEgTlVMTCBwcmlvckJhdGNoIG9uIHRoZSBmaXJz dCBjYWxsIGhlcmUgZm9yIHRoZSBzY2FuLgogICoKICAqIFJldHVybnMgdGhlIG5leHQgYmF0Y2gg dG8gYmUgcHJvY2Vzc2VkIGJ5IGNhbGxlciBpbiB0aGUgZ2l2ZW4gc2NhbgogICogZGlyZWN0aW9u LCBvciBOVUxMIHdoZW4gdGhlcmUgYXJlIG5vIG1vcmUgbWF0Y2hlcyBpbiB0aGF0IGRpcmVjdGlv bi4KICAqCiAgKiBUaGlzIGlzIHdoZXJlIGJhdGNoZXMgYXJlIGFwcGVuZGVkIHRvIHRoZSBzY2Fu J3MgcmluZyBidWZmZXIuICBXZSBkb24ndAogICogZnJlZSBhbnkgYmF0Y2hlcyBoZXJlLCB0aG91 Z2g7IHRoYXQgaXMgbGVmdCB1cCB0byB0aGUgY2FsbGVyLiAgVGhlIGNhbGxlcgotICogaXMgYWxz byByZXNwb25zaWJsZSBmb3IgYWR2YW5jaW5nIHRoZWlyIHBvc2l0aW9uLgorICogaXMgYWxzbyBy ZXNwb25zaWJsZSBmb3IgYWR2YW5jaW5nIHRoZWlyIHNjYW5Qb3MvcHJlZmV0Y2hQb3MgcG9zaXRp b24uCiAgKi8KIHN0YXRpYyBwZ19hdHRyaWJ1dGVfYWx3YXlzX2lubGluZSBJbmRleFNjYW5CYXRj aAogdGFibGVhbV91dGlsX2ZldGNoX25leHRfYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2Fu RGlyZWN0aW9uIGRpcmVjdGlvbiwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxz Y2FuLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oCmluZGV4IGUyMzU0MDg1MS4uYmEz MzMzZmYyIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oCisrKyBiL3Ny Yy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmgKQEAgLTIxNCw2ICsyMTQsMTAgQEAgdHlwZWRlZiBz dHJ1Y3QgSW5kZXhTY2FuQmF0Y2hEYXRhCiAJICogVGhpcyBhbGxvd3MgdGFibGUgQU1zIHRvIGF2 b2lkIHJlZHVuZGFudCBhbWdldGJhdGNoIGNhbGxzIHdpdGggdGhlIHNhbWUKIAkgKiBwcmlvcmJh dGNoIC0tIHRoZSBpbmRleCBBTSBtaWdodCBuZWVkIHRvIHJlYWQgYWRkaXRpb25hbCBpbmRleCBw YWdlcyB0bwogCSAqIGRldGVybWluZSB0aGVyZSBhcmUgbm8gbW9yZSBtYXRjaGluZyBpdGVtcyBi ZXlvbmQgY2FsbGVyJ3MgcHJpb3JiYXRjaC4KKwkgKiBJbiBwYXJ0aWN1bGFyLCBkdXJpbmcgcHJl ZmV0Y2hpbmcgdGhlIHJlYWQgc3RyZWFtIGNhbGxiYWNrIGRpc2NvdmVycworCSAqIHRoZSBlbmQt b2Ytc2NhbiB2aWEgcHJlZmV0Y2hCYXRjaC4gIHRhYmxlYW1fdXRpbF9mZXRjaF9uZXh0X2JhdGNo KCkKKwkgKiBjaGVja3MgdGhlc2UgZmxhZ3Mgc28gdGhhdCB0aGUgc2NhbiBzaWRlIGRvZXNuJ3Qg cmVwZWF0IHRoZSBzYW1lCisJICogYW1nZXRiYXRjaCBjYWxsIHdoZW4gaXQgbGF0ZXIgcmVhY2hl cyB0aGF0IGJhdGNoIGFzIHNjYW5CYXRjaC4KIAkgKi8KIAlib29sCQlrbm93bkVuZEJhY2t3YXJk OwogCWJvb2wJCWtub3duRW5kRm9yd2FyZDsKQEAgLTI2OCwxMSArMjcyLDIwIEBAIHR5cGVkZWYg c3RydWN0IEluZGV4U2NhbkJhdGNoRGF0YSAqSW5kZXhTY2FuQmF0Y2g7CiAgKiB0byBmZXRjaCB0 YWJsZSB0dXBsZXMgaW4gd2hhdGV2ZXIgb3JkZXIgaXMgbW9zdCBjb252ZW5pZW50IC0tIHByb3Zp ZGVkIHRoYXQKICAqIHN1Y2ggcmVvcmRlcmluZyBjYW5ub3QgYWZmZWN0IHRoZSBvcmRlciB0aGF0 IHRhYmxlX2luZGV4X2dldG5leHRfc2xvdCBsYXRlcgogICogcmV0dXJucyB0dXBsZXMgaW4uCisg KgorICogVGhpcyBkYXRhIHN0cnVjdHVyZSBhbHNvIHByb3ZpZGVzIHRhYmxlIEFNcyB3aXRoIGEg d2F5IHRvIHJlYWQgYWhlYWQgb2YgdGhlCisgKiBjdXJyZW50IHJlYWQgcG9zaXRpb24gYnkgX211 bHRpcGxlXyBiYXRjaGVzL2luZGV4IHBhZ2VzLiAgVGhlIGZ1cnRoZXIgb3V0CisgKiB0aGUgdGFi bGUgQU0gcmVhZHMgYWhlYWQgbGlrZSB0aGlzLCB0aGUgZnVydGhlciBpdCBjYW4gc2VlIGludG8g dGhlIGZ1dHVyZS4KKyAqIFRoYXQgd2F5IHRoZSB0YWJsZSBBTSBpcyBhYmxlIHRvIHJlb3JkZXIg d29yayBhcyBhZ2dyZXNzaXZlbHkgYXMgZGVzaXJlZC4KKyAqIEZvciBleGFtcGxlLCBpbmRleCBz Y2FucyBzb21ldGltZXMgbmVlZCB0byByZWFkYWhlYWQgYnkgYXMgbWFueSBhcyBhIGZldworICog ZG96ZW4gYW1nZXRiYXRjaCBiYXRjaGVzIGluIG9yZGVyIHRvIG1haW50YWluIGFuIG9wdGltYWwg SS9PIHByZWZldGNoCisgKiBkaXN0YW5jZSAoZGlzdGFuY2UgZm9yIHJlYWRpbmcgdGFibGUgYmxv Y2tzL2ZldGNoaW5nIHRhYmxlIHR1cGxlcykuCiAgKi8KIHR5cGVkZWYgc3RydWN0IEJhdGNoUmlu Z0J1ZmZlcgogewogCS8qIGN1cnJlbnQgcG9zaXRpb25zIGluIEluZGV4U2NhbkRlc2NEYXRhLmJh dGNoYnVmW10gZm9yIHNjYW4gKi8KIAlCYXRjaFJpbmdJdGVtUG9zIHNjYW5Qb3M7CS8qIHNjYW4n cyByZWFkIHBvc2l0aW9uICovCisJQmF0Y2hSaW5nSXRlbVBvcyBwcmVmZXRjaFBvczsJLyogcHJl ZmV0Y2hpbmcgcG9zaXRpb24gKi8KIAlCYXRjaFJpbmdJdGVtUG9zIG1hcmtQb3M7CS8qIG1hcmsv cmVzdG9yZSBwb3NpdGlvbiAqLwogCiAJLyogbWFya1BvcydzIGJhdGNoIChub3QgaW4gcmluZyBi dWZmZXIgd2hlbiBtYXJrQmF0Y2ggIT0gc2NhbkJhdGNoKSAqLwpAQCAtNTA4LDYgKzUyMSwzNyBA QCBpbmRleF9zY2FuX2JhdGNoX2FwcGVuZChJbmRleFNjYW5EZXNjRGF0YSAqc2NhbiwgSW5kZXhT Y2FuQmF0Y2ggYmF0Y2gpCiAJcmluZ2J1Zi0+bmV4dEJhdGNoKys7CiB9CiAKKy8qCisgKiBDb21w YXJlIHR3byBiYXRjaCByaW5nIHBvc2l0aW9ucyBpbiB0aGUgZ2l2ZW4gc2NhbiBkaXJlY3Rpb24u CisgKgorICogUmV0dXJucyBuZWdhdGl2ZSBpZiBwb3MxIGlzIGJlaGluZCBwb3MyLCAwIGlmIGVx dWFsLCBwb3NpdGl2ZSBpZiBwb3MxIGlzCisgKiBhaGVhZCBvZiBwb3MyLgorICovCitzdGF0aWMg aW5saW5lIGludAoraW5kZXhfc2Nhbl9wb3NfY21wKEJhdGNoUmluZ0l0ZW1Qb3MgKnBvczEsIEJh dGNoUmluZ0l0ZW1Qb3MgKnBvczIsCisJCQkJICAgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pCit7 CisJaW50OAkJYmF0Y2hkaWZmOworCisJQXNzZXJ0KHBvczEtPnZhbGlkICYmIHBvczItPnZhbGlk KTsKKworCWJhdGNoZGlmZiA9IChpbnQ4KSAocG9zMS0+YmF0Y2ggLSBwb3MyLT5iYXRjaCk7CisJ aWYgKGJhdGNoZGlmZiAhPSAwKQorCXsKKwkJLyogUmVzb2x2ZSBjb21wYXJpc29uIHVzaW5nIGRp ZmZlcmluZyBiYXRjaCBvZmZzZXRzICovCisJCXJldHVybiBiYXRjaGRpZmY7CisJfQorCisJLyoK KwkgKiBSZXNvbHZlIGNvbXBhcmlzb24gdXNpbmcgaXRlbXNbXS13aXNlIGluZGV4ZXMgZnJvbSBj YWxsZXIncyBwb3NpdGlvbnMsCisJICogc2luY2UgYm90aCBwb3NpdGlvbnMgcG9pbnQgdG8gdGhl IHNhbWUgcmluZyBidWZmZXIgYmF0Y2gKKwkgKi8KKwlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2Fy ZChkaXJlY3Rpb24pKQorCQlyZXR1cm4gcG9zMS0+aXRlbSAtIHBvczItPml0ZW07CisJZWxzZQor CQlyZXR1cm4gcG9zMi0+aXRlbSAtIHBvczEtPml0ZW07Cit9CisKIC8qCiAgKiBBZHZhbmNlIHBv c2l0aW9uIHRvIGl0cyBuZXh0IGl0ZW0gaW4gdGhlIGJhdGNoLgogICoKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL29wdGltaXplci9jb3N0LmggYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvY29zdC5o CmluZGV4IGYyZmQ1ZDMxNS4uNDE5MzAwYTZiIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9vcHRp bWl6ZXIvY29zdC5oCisrKyBiL3NyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmgKQEAgLTUyLDYg KzUyLDcgQEAgZXh0ZXJuIFBHRExMSU1QT1JUIGludCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJf Z2F0aGVyOwogZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgZW5hYmxlX3NlcXNjYW47CiBleHRlcm4g UEdETExJTVBPUlQgYm9vbCBlbmFibGVfaW5kZXhzY2FuOwogZXh0ZXJuIFBHRExMSU1QT1JUIGJv b2wgZW5hYmxlX2luZGV4b25seXNjYW47CitleHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVf aW5kZXhzY2FuX3ByZWZldGNoOwogZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgZW5hYmxlX2JpdG1h cHNjYW47CiBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVfdGlkc2NhbjsKIGV4dGVybiBQ R0RMTElNUE9SVCBib29sIGVuYWJsZV9zb3J0OwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNj ZXNzL2hlYXAvaGVhcGFtX2luZGV4c2Nhbi5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVh cGFtX2luZGV4c2Nhbi5jCmluZGV4IDdhNmI0OWVlNS4uOWQ0ZmE1NTgzIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faW5kZXhzY2FuLmMKKysrIGIvc3JjL2JhY2tl bmQvYWNjZXNzL2hlYXAvaGVhcGFtX2luZGV4c2Nhbi5jCkBAIC0xOSw2ICsxOSw3IEBACiAjaW5j bHVkZSAiYWNjZXNzL2luZGV4YmF0Y2guaCIKICNpbmNsdWRlICJhY2Nlc3MvcmVsc2Nhbi5oIgog I2luY2x1ZGUgImFjY2Vzcy92aXNpYmlsaXR5bWFwLmgiCisjaW5jbHVkZSAib3B0aW1pemVyL2Nv c3QuaCIKICNpbmNsdWRlICJzdG9yYWdlL3ByZWRpY2F0ZS5oIgogI2luY2x1ZGUgInV0aWxzL3Bn c3RhdF9pbnRlcm5hbC5oIgogCkBAIC01NSw2ICs1NiwxNCBAQCBzdGF0aWMgdm9pZCBoZWFwYW1f aW5kZXhfYmF0Y2hfcG9zX3Zpc2liaWxpdHkoSW5kZXhTY2FuRGVzYyBzY2FuLAogCQkJCQkJCQkJ CQkgIEluZGV4U2NhbkJhdGNoIGJhdGNoLAogCQkJCQkJCQkJCQkgIEhlYXBCYXRjaERhdGEgKmhi YXRjaCwKIAkJCQkJCQkJCQkJICBCYXRjaFJpbmdJdGVtUG9zICpwb3MpOworc3RhdGljIHBnX25v aW5saW5lIHZvaWQgaGVhcGFtX2luZGV4X2RpcmNoYW5nZV9yZXNldChJbmRleEZldGNoSGVhcERh dGEgKmhzY2FuLAorCQkJCQkJCQkJCQkJCSBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQkJ CQkJCQkJCQkgQmF0Y2hSaW5nQnVmZmVyICpiYXRjaHJpbmdidWYpOworc3RhdGljIHBnX2F0dHJp YnV0ZV9hbHdheXNfaW5saW5lIHZvaWQgaGVhcGFtX2luZGV4X2NvbnNpZGVyX3ByZWZldGNoaW5n KEluZGV4U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCQkJCQkJCQkJCQkJCSBJbmRleEZldGNoSGVhcERh dGEgKmhzY2FuKTsKK3N0YXRpYyBCbG9ja051bWJlciBoZWFwYW1faW5kZXhfcHJlZmV0Y2hfbmV4 dF9ibG9jayhSZWFkU3RyZWFtICpzdHJlYW0sCisJCQkJCQkJCQkJCQkJdm9pZCAqY2FsbGJhY2tf cHJpdmF0ZV9kYXRhLAorCQkJCQkJCQkJCQkJCXZvaWQgKnBlcl9idWZmZXJfZGF0YSk7CiAKIC8q IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQogICogSW5kZXggU2NhbiBDYWxsYmFja3MgZm9yIGhlYXAgQU0KQEAg LTgxLDYgKzkwLDEwIEBAIGhlYXBhbV9pbmRleF9mZXRjaF9iZWdpbihSZWxhdGlvbiByZWwsIHVp bnQzMiBmbGFncykKIAkvKiB4c19sYXN0aW5ibG9jayBvcHRpbWl6YXRpb24gc3RhdGUgKi8KIAlB c3NlcnQoIWhzY2FuLT54c19sYXN0aW5ibG9jayk7CiAKKwkvKiBSZWFkIHN0cmVhbSBzdGF0ZSAo b3RoZXIgZmllbGRzIGluaXRpYWxpemVkIGJ5IGNhbGxiYWNrKSAqLworCUFzc2VydChoc2Nhbi0+ eHNfcmVhZF9zdHJlYW1fZGlyID09IE5vTW92ZW1lbnRTY2FuRGlyZWN0aW9uKTsKKwlBc3NlcnQo aHNjYW4tPnhzX3JlYWRfc3RyZWFtID09IE5VTEwpOworCiAJLyoKIAkgKiBSZXR1cm4gb3BhcXVl IHN0YXRlLCB3aGljaCB3ZSdsbCBhY2Nlc3MgdGhyb3VnaCB0aGUgc2NhbidzIHhzX2hlYXBmZXRj aAogCSAqIGZpZWxkIGxhdGVyIG9uLgpAQCAtOTgsNiArMTExLDE4IEBAIGhlYXBhbV9pbmRleF9m ZXRjaF9yZXNldChJbmRleFNjYW5EZXNjIHNjYW4pCiAJLyogUmVzY2FucyBzaG91bGQgYXZvaWQg YW4gZXhjZXNzaXZlIG51bWJlciBvZiBWTSBsb29rdXBzICovCiAJaHNjYW4tPnhzX3ZtX2l0ZW1z ID0gMTsKIAorCS8qIERlZmVuc2l2ZWx5IGRvIGFuIHVuY29uZGl0aW9uYWwgcmVhZCBzdHJlYW0g ZGlyZWN0aW9uIHJlc2V0ICovCisJaHNjYW4tPnhzX3JlYWRfc3RyZWFtX2RpciA9IE5vTW92ZW1l bnRTY2FuRGlyZWN0aW9uOworCisJLyoKKwkgKiBSZXNldCByZWFkIHN0cmVhbSBpdHNlbGYsIGFu ZCBvdGhlciBhc3NvY2lhdGVkIHN0YXRlLgorCSAqLworCWlmIChoc2Nhbi0+eHNfcmVhZF9zdHJl YW0pCisJeworCQloc2Nhbi0+eHNfcGF1c2VkID0gZmFsc2U7CisJCXJlYWRfc3RyZWFtX3Jlc2V0 KGhzY2FuLT54c19yZWFkX3N0cmVhbSk7CisJfQorCiAJLyogUmVzZXQgYmF0Y2ggcmluZyBidWZm ZXIgc3RhdGUgKi8KIAlpZiAoc2Nhbi0+dXNlYmF0Y2hyaW5nKQogCQl0YWJsZWFtX3V0aWxfYmF0 Y2hzY2FuX3Jlc2V0KHNjYW4sIGZhbHNlKTsKQEAgLTExNCw3ICsxMzksMTQgQEAgaGVhcGFtX2lu ZGV4X2ZldGNoX3Jlc3RycG9zKEluZGV4U2NhbkRlc2Mgc2NhbikKIHsKIAlJbmRleEZldGNoSGVh cERhdGEgKmhzY2FuID0gKEluZGV4RmV0Y2hIZWFwRGF0YSAqKSBzY2FuLT54c19oZWFwZmV0Y2g7 CiAKLQkodm9pZCkgaHNjYW47CisJLyoKKwkgKiBSZXNldCByZWFkIHN0cmVhbSBpdHNlbGYsIGFu ZCBvdGhlciBhc3NvY2lhdGVkIHN0YXRlLgorCSAqLworCWlmIChoc2Nhbi0+eHNfcmVhZF9zdHJl YW0pCisJeworCQloc2Nhbi0+eHNfcGF1c2VkID0gZmFsc2U7CisJCXJlYWRfc3RyZWFtX3Jlc2V0 KGhzY2FuLT54c19yZWFkX3N0cmVhbSk7CisJfQogCiAJLyogUmVzdG9yZSBiYXRjaCByaW5nIHRv IHByZXZpb3VzbHkgc2F2ZWQgbWFyayAqLwogCXRhYmxlYW1fdXRpbF9iYXRjaHNjYW5fcmVzdG9y ZV9wb3Moc2Nhbik7CkBAIC0xMzMsNiArMTY1LDkgQEAgaGVhcGFtX2luZGV4X2ZldGNoX2VuZChJ bmRleFNjYW5EZXNjIHNjYW4pCiAJaWYgKEJ1ZmZlcklzVmFsaWQoaHNjYW4tPnhzX3ZtYnVmZmVy KSkKIAkJUmVsZWFzZUJ1ZmZlcihoc2Nhbi0+eHNfdm1idWZmZXIpOwogCisJaWYgKGhzY2FuLT54 c19yZWFkX3N0cmVhbSkKKwkJcmVhZF9zdHJlYW1fZW5kKGhzY2FuLT54c19yZWFkX3N0cmVhbSk7 CisKIAkvKiBGcmVlIGFsbCBiYXRjaCByZWxhdGVkIHJlc291cmNlcyAqLwogCWlmIChzY2FuLT51 c2ViYXRjaHJpbmcpCiAJCXRhYmxlYW1fdXRpbF9iYXRjaHNjYW5fZW5kKHNjYW4pOwpAQCAtNDU5 LDcgKzQ5NCwxNCBAQCBoZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGVfaW1wbChSZWxhdGlvbiByZWws CiAJCWlmIChCdWZmZXJJc1ZhbGlkKGhzY2FuLT54c19jYnVmKSkKIAkJCVJlbGVhc2VCdWZmZXIo aHNjYW4tPnhzX2NidWYpOwogCi0JCWhzY2FuLT54c19jYnVmID0gUmVhZEJ1ZmZlcihyZWwsIGhz Y2FuLT54c19ibGspOworCQkvKgorCQkgKiBXaGVuIHVzaW5nIGEgcmVhZCBzdHJlYW0sIHRoZSBz dHJlYW0gd2lsbCBhbHJlYWR5IGtub3cgd2hpY2ggYmxvY2sKKwkJICogbnVtYmVyIGNvbWVzIG5l eHQgKHRob3VnaCBhbiBhc3NlcnRpb24gd2lsbCB2ZXJpZnkgYSBtYXRjaCBiZWxvdykKKwkJICov CisJCWlmIChoc2Nhbi0+eHNfcmVhZF9zdHJlYW0pCisJCQloc2Nhbi0+eHNfY2J1ZiA9IHJlYWRf c3RyZWFtX25leHRfYnVmZmVyKGhzY2FuLT54c19yZWFkX3N0cmVhbSwgTlVMTCk7CisJCWVsc2UK KwkJCWhzY2FuLT54c19jYnVmID0gUmVhZEJ1ZmZlcihyZWwsIGhzY2FuLT54c19ibGspOwogCiAJ CS8qCiAJCSAqIFBydW5lIHBhZ2Ugd2hlbiBpdCBpcyBwaW5uZWQgZm9yIHRoZSBmaXJzdCB0aW1l CkBAIC03MzYsNiArNzc4LDEyIEBAIGhlYXBhbV9pbmRleF9nZXRuZXh0X3NjYW5iYXRjaF9wb3Mo SW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuCiAJQXNzZXJ0KHNj YW5Qb3MtPnZhbGlkIHx8IGluZGV4X3NjYW5fYmF0Y2hfY291bnQoc2NhbikgPT0gMCk7CiAJQXNz ZXJ0KGFsbF92aXNpYmxlID09IE5VTEwgfHwgc2Nhbi0+eHNfd2FudF9pdHVwKTsKIAorCS8qIEhh bmRsZSByZXNldHRpbmcgdGhlIHJlYWQgc3RyZWFtIHdoZW4gc2NhbiBkaXJlY3Rpb24gY2hhbmdl cyAqLworCWlmIChoc2Nhbi0+eHNfcmVhZF9zdHJlYW1fZGlyID09IE5vTW92ZW1lbnRTY2FuRGly ZWN0aW9uKQorCQloc2Nhbi0+eHNfcmVhZF9zdHJlYW1fZGlyID0gZGlyZWN0aW9uOwkvKiBmaXJz dCBjYWxsICovCisJZWxzZSBpZiAodW5saWtlbHkoaHNjYW4tPnhzX3JlYWRfc3RyZWFtX2RpciAh PSBkaXJlY3Rpb24pKQorCQloZWFwYW1faW5kZXhfZGlyY2hhbmdlX3Jlc2V0KGhzY2FuLCBkaXJl Y3Rpb24sIGJhdGNocmluZ2J1Zik7CisKIAkvKgogCSAqIENoZWNrIGlmIHRoZXJlJ3MgYW4gZXhp c3RpbmcgbG9hZGVkIHNjYW5CYXRjaCBmb3IgdXMgdG8gcmV0dXJuIHRoZSBuZXh0CiAJICogbWF0 Y2hpbmcgaXRlbSdzIFRJRC9pbmRleCB0dXBsZSBmcm9tCkBAIC03NDUsNyArNzkzLDcgQEAgaGVh cGFtX2luZGV4X2dldG5leHRfc2NhbmJhdGNoX3BvcyhJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4 RmV0Y2hIZWFwRGF0YSAqaHNjYW4KIAl7CiAJCS8qCiAJCSAqIHNjYW5Qb3MgaXMgdmFsaWQsIHNv IHNjYW5CYXRjaCBtdXN0IGFscmVhZHkgYmUgbG9hZGVkIGluIGJhdGNoIHJpbmcKLQkJICogYnVm ZmVyLiAgV2UgcmVseSBvbiB0aGF0IGhlcmUuCisJCSAqIGJ1ZmZlci4gIFdlIHJlbHkgb24gdGhh dCBoZXJlIChjYW4ndCBkbyB0aGlzIHdpdGggcHJlZmV0Y2hCYXRjaCkuCiAJCSAqLwogCQlwZ19h c3N1bWUoYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2ggPT0gc2NhblBvcy0+YmF0Y2gpOwogCkBAIC03 NzYsNiArODI0LDE3IEBAIGhlYXBhbV9pbmRleF9nZXRuZXh0X3NjYW5iYXRjaF9wb3MoSW5kZXhT Y2FuRGVzYyBzY2FuLCBJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuCiAJCXJldHVybiBOVUxMOwog CX0KIAorCWlmIChoYWRFeGlzdGluZ1NjYW5CYXRjaCAmJiAhaHNjYW4tPnhzX3JlYWRfc3RyZWFt KQorCXsKKwkJQXNzZXJ0KCFzY2FuLT5iYXRjaHJpbmdidWYucHJlZmV0Y2hQb3MudmFsaWQpOwor CisJCS8qCisJCSAqIE5vdCB1c2luZyBhIHJlYWQgc3RyZWFtIHRvIGRvIGluZGV4IHByZWZldGNo aW5nLiAgRGVjaWRlIHdoZXRoZXIgdG8KKwkJICogc3RhcnQgb25lIG5vdy4KKwkJICovCisJCWhl YXBhbV9pbmRleF9jb25zaWRlcl9wcmVmZXRjaGluZyhzY2FuLCBoc2Nhbik7CisJfQorCiAJLyoK IAkgKiBBZHZhbmNlZCBzY2FuQmF0Y2guICBOb3cgcG9zaXRpb24gc2NhblBvcyB0byB0aGUgc3Rh cnQgb2YgbmV3CiAJICogc2NhbkJhdGNoLgpAQCAtNzkxLDYgKzg1MCw3IEBAIGhlYXBhbV9pbmRl eF9nZXRuZXh0X3NjYW5iYXRjaF9wb3MoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleEZldGNoSGVh cERhdGEgKmhzY2FuCiAJewogCQlJbmRleFNjYW5CYXRjaCBoZWFkQmF0Y2ggPSBpbmRleF9zY2Fu X2JhdGNoKHNjYW4sCiAJCQkJCQkJCQkJCQkJYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2gpOworCQlC YXRjaFJpbmdJdGVtUG9zICpwcmVmZXRjaFBvcyA9ICZiYXRjaHJpbmdidWYtPnByZWZldGNoUG9z OwogCiAJCUFzc2VydChoZWFkQmF0Y2ggIT0gc2NhbkJhdGNoKTsKIAkJQXNzZXJ0KGJhdGNocmlu Z2J1Zi0+aGVhZEJhdGNoICE9IHNjYW5Qb3MtPmJhdGNoKTsKQEAgLTc5OCwxMiArODU4LDQ3IEBA IGhlYXBhbV9pbmRleF9nZXRuZXh0X3NjYW5iYXRjaF9wb3MoSW5kZXhTY2FuRGVzYyBzY2FuLCBJ bmRleEZldGNoSGVhcERhdGEgKmhzY2FuCiAJCS8qIGZyZWUgb2Jzb2xlc2NlbnQgaGVhZCBiYXRj aCAodW5sZXNzIGl0IGlzIHNjYW4ncyBtYXJrQmF0Y2gpICovCiAJCXRhYmxlYW1fdXRpbF9mcmVl X2JhdGNoKHNjYW4sIGhlYWRCYXRjaCk7CiAKKwkJLyoKKwkJICogSWYgd2UncmUgYWJvdXQgdG8g cmVsZWFzZSB0aGUgYmF0Y2ggdGhhdCBwcmVmZXRjaFBvcyBjdXJyZW50bHkKKwkJICogcG9pbnRz IHRvLCBqdXN0IGludmFsaWRhdGUgcHJlZmV0Y2hQb3MuICBTZWUgdGhlIGNvbW1lbnRzIGFib3V0 CisJCSAqIHByZWZldGNoUG9zL3NjYW5Qb3Mgd2l0aGluIGhlYXBhbV9pbmRleF9wcmVmZXRjaF9u ZXh0X2Jsb2NrIGZvciBhbgorCQkgKiBleHBsYW5hdGlvbi4KKwkJICoKKwkJICogVGhpcyBoYW5k bGluZyBpcyBhcHByb3hpbWF0ZWx5IHRoZSBvcHBvc2l0ZSBvZiByZXN1bWluZyBhIHBhdXNlZAor CQkgKiByZWFkIHN0cmVhbTogdGhpcyBoZWxwcyB0aGUgc2NhbiBkZWFsIHdpdGggcHJlZmV0Y2hQ b3MgZmFsbGluZworCQkgKiBiZWhpbmQgc2NhblBvcywgd2hlcmVhcyBwYXVzaW5nIGlzIHVzZWQg d2hlbiBzY2FuUG9zIGhhcyBmYWxsZW4KKwkJICogYmVoaW5kICh2ZXJ5IGZhciBiZWhpbmQpIHBy ZWZldGNoUG9zLgorCQkgKi8KKwkJaWYgKHByZWZldGNoUG9zLT52YWxpZCAmJgorCQkJcHJlZmV0 Y2hQb3MtPmJhdGNoID09IGJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoKQorCQkJcHJlZmV0Y2hQb3Mt PnZhbGlkID0gZmFsc2U7CisKIAkJLyogUmVtb3ZlIHRoZSBiYXRjaCBmcm9tIHRoZSByaW5nIGJ1 ZmZlciAoZXZlbiBpZiBpdCdzIG1hcmtCYXRjaCkgKi8KIAkJYmF0Y2hyaW5nYnVmLT5oZWFkQmF0 Y2grKzsKKworCQlpZiAodW5saWtlbHkoaHNjYW4tPnhzX3BhdXNlZCkpCisJCXsKKwkJCS8qCisJ CQkgKiBoZWFwYW1faW5kZXhfcHJlZmV0Y2hfbmV4dF9ibG9jayBwYXVzZWQgdGhlIHNjYW4ncyBy ZWFkIHN0cmVhbQorCQkJICogZHVlIHRvIG91ciBydW5uaW5nIG91dCBvZiBmcmVlIGJhdGNoIHNs b3RzLiAgTm93IHRoYXQgd2UndmUKKwkJCSAqIGZyZWVkIHVwIG9uZSBzdWNoIHNsb3QsIHdlIGNh biByZXN1bWUgdGhlIHJlYWQgc3RyZWFtIChzaW5jZQorCQkJICogdGhlcmUncyBub3cgc3BhY2Ug Zm9yIGhlYXBhbV9pbmRleF9wcmVmZXRjaF9uZXh0X2Jsb2NrIHRvIHN0b3JlCisJCQkgKiBvbmUg bW9yZSBiYXRjaCkuCisJCQkgKi8KKwkJCUFzc2VydChwcmVmZXRjaFBvcy0+YmF0Y2ggIT0gc2Nh blBvcy0+YmF0Y2gpOworCQkJQXNzZXJ0KHByZWZldGNoUG9zLT52YWxpZCAmJgorCQkJCSAgIGlu ZGV4X3NjYW5fYmF0Y2hfbG9hZGVkKHNjYW4sIHByZWZldGNoUG9zLT5iYXRjaCkpOworCQkJQXNz ZXJ0KGluZGV4X3NjYW5fcG9zX2NtcChwcmVmZXRjaFBvcywgc2NhblBvcywgZGlyZWN0aW9uKSA+ IDApOworCQkJQXNzZXJ0KCFpbmRleF9zY2FuX2JhdGNoX2Z1bGwoc2NhbikpOworCisJCQlyZWFk X3N0cmVhbV9yZXN1bWUoaHNjYW4tPnhzX3JlYWRfc3RyZWFtKTsKKwkJCWhzY2FuLT54c19wYXVz ZWQgPSBmYWxzZTsKKwkJfQogCX0KIAogCS8qIEluIHByYWN0aWNlIHNjYW5CYXRjaCB3aWxsIGFs d2F5cyBiZSB0aGUgcmluZyBidWZmZXIncyBoZWFkQmF0Y2ggKi8KIAlBc3NlcnQoYmF0Y2hyaW5n YnVmLT5oZWFkQmF0Y2ggPT0gc2NhblBvcy0+YmF0Y2gpOworCUFzc2VydCghaHNjYW4tPnhzX3Bh dXNlZCk7CiAKIAlyZXR1cm4gaGVhcGFtX2luZGV4X3JldHVybl9zY2FucG9zX3RpZChzY2FuLCBo c2NhbiwgZGlyZWN0aW9uLAogCQkJCQkJCQkJCSAgIHNjYW5CYXRjaCwgc2NhblBvcywgYWxsX3Zp c2libGUpOwpAQCAtOTEwLDYgKzEwMDUsMTMgQEAgaGVhcGFtX2luZGV4X3JldHVybl9zY2FucG9z X3RpZChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4sCiAgKiAo aW1wb3J0YW50IGZvciBpbm5lciBpbmRleCBzY2FucyBvZiBhbnRpLWpvaW5zIGFuZCBzZW1pLWpv aW5zKSwgYW5kIHRoZQogICogbmVlZCB0byB1bmd1YXJkIGJhdGNoZXMgcHJvbXB0bHkuCiAgKgor ICogSW4gbm8gZXZlbnQgd2lsbCB0aGUgc2NhbiBiZSBhbGxvd2VkIHRvIGd1YXJkIG1vcmUgdGhh biBvbmUgYmF0Y2ggYXQgYQorICogdGltZS4gIFRoZSBwcmltYXJ5IHJlYXNvbiBmb3IgdGhpcyBy ZXN0cmljdGlvbiBpcyB0byBhdm9pZCB1bmludGVuZGVkCisgKiBpbnRlcmFjdGlvbnMgd2l0aCB0 aGUgcmVhZCBzdHJlYW0sIHdoaWNoIGhhcyBpdHMgb3duIHN0cmF0ZWd5IGZvciBrZWVwaW5nCisg KiB0aGUgbnVtYmVyIG9mIHBpbnMgaGVsZCBieSB0aGUgYmFja2VuZCB1bmRlciBjb250cm9sLiAg KFVuZ3VhcmRpbmcgdmlhCisgKiB0aGUgYW11bmd1YXJkYmF0Y2ggY2FsbGJhY2sgb2Z0ZW4gbWVh bnMgcmVsZWFzaW5nIGEgYnVmZmVyIHBpbiBvbiBhbgorICogaW5kZXggcGFnZSwgd2hpY2ggY291 bnRzIGFnYWluc3QgdGhlIHNhbWUgc2hhcmVkIHBpbiBsaW1pdC4pCisgKgogICogT25jZSB3ZSd2 ZSByZXNvbHZlZCB2aXNpYmlsaXR5IGZvciBhbGwgaXRlbXMgaW4gYSBiYXRjaCwgd2UgY2FuIHNh ZmVseQogICogdW5ndWFyZCBpdCBieSBjYWxsaW5nIGFtdW5ndWFyZGJhdGNoLiAgVGhpcyBpcyBz YWZlIHdpdGggcmVzcGVjdCB0bwogICogY29uY3VycmVudCBWQUNVVU0gYmVjYXVzZSB0aGUgYmF0 Y2gncyBndWFyZCAodHlwaWNhbGx5IGEgYnVmZmVyIHBpbiBvbiB0aGUKQEAgLTEwMzYsMyArMTEz OCwzNTggQEAgaGVhcGFtX2luZGV4X2JhdGNoX3Bvc192aXNpYmlsaXR5KEluZGV4U2NhbkRlc2Mg c2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCiAJZWxzZQogCQloc2Nhbi0+eHNfdm1faXRl bXMgPSBzY2FuLT5tYXhpdGVtc2JhdGNoOwogfQorCisvKgorICogSGFuZGxlIGEgY2hhbmdlIGlu IGluZGV4IHNjYW4gZGlyZWN0aW9uIChhdCB0aGUgdHVwbGUgZ3JhbnVsYXJpdHkpLgorICoKKyAq IFJlc2V0cyB0aGUgcmVhZCBzdHJlYW0sIHNpbmNlIHdlIGNhbid0IHJlbHkgb24gc2NhblBvcyBj b250aW51aW5nIHRvIGFncmVlCisgKiB3aXRoIHRoZSBibG9ja3MgdGhhdCByZWFkIHN0cmVhbSBh bHJlYWR5IGNvbnN1bWVkIHVzaW5nIHByZWZldGNoUG9zLgorICoKKyAqIE5vdGU6IGlmZiB0aGUg c2NhbiBfY29udGludWVzXyBpbiB0aGlzIG5ldyBkaXJlY3Rpb24sIGFuZCBhY3R1YWxseSBzdGVw cworICogb2ZmIHNjYW5CYXRjaCB0byBhbiBlYXJsaWVyIGluZGV4IHBhZ2UsIHRhYmxlYW1fdXRp bF9mZXRjaF9uZXh0X2JhdGNoIHdpbGwKKyAqIGRlYWwgd2l0aCBpdC4gIEJ1dCB0aGF0IG1pZ2h0 IG5ldmVyIGhhcHBlbjsgdGhlIHNjYW4gbWlnaHQgeWV0IGNoYW5nZQorICogZGlyZWN0aW9uIGFn YWluIChvciBqdXN0IGVuZCBiZWZvcmUgcmV0dXJuaW5nIG1vcmUgaXRlbXMpLgorICovCitzdGF0 aWMgcGdfbm9pbmxpbmUgdm9pZAoraGVhcGFtX2luZGV4X2RpcmNoYW5nZV9yZXNldChJbmRleEZl dGNoSGVhcERhdGEgKmhzY2FuLAorCQkJCQkJCSBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJ CQkJCQkgQmF0Y2hSaW5nQnVmZmVyICpiYXRjaHJpbmdidWYpCit7CisJLyogUmVzZXQgcmVhZCBz dHJlYW0gc3RhdGUgKi8KKwliYXRjaHJpbmdidWYtPnByZWZldGNoUG9zLnZhbGlkID0gZmFsc2U7 CisJaHNjYW4tPnhzX3BhdXNlZCA9IGZhbHNlOworCWhzY2FuLT54c19yZWFkX3N0cmVhbV9kaXIg PSBkaXJlY3Rpb247CisKKwkvKiBSZXNldCByZWFkIHN0cmVhbSBpdHNlbGYgKi8KKwlpZiAoaHNj YW4tPnhzX3JlYWRfc3RyZWFtKQorCQlyZWFkX3N0cmVhbV9yZXNldChoc2Nhbi0+eHNfcmVhZF9z dHJlYW0pOworfQorCisvKgorICogRGVjaWRlIHdoZXRoZXIgdG8gc3RhcnQgYSByZWFkIHN0cmVh bSBmb3IgaGVhcCBibG9jayBwcmVmZXRjaGluZyBkdXJpbmcgYW4KKyAqIGluZGV4IHNjYW4uCisg KgorICogQ2FsbGVkIGVhY2ggdGltZSBhIG5ldyBiYXRjaCBpcyBvYnRhaW5lZCBmcm9tIHRoZSBp bmRleCBBTSwgYmFycmluZyB0aGUKKyAqIGZpcnN0IHRpbWUgdGhhdCBoYXBwZW5zLiAgV2UgZGVs YXkgaW5pdGlhbGl6aW5nIHRoZSBzdHJlYW0gdW50aWwgcmVhZGluZworICogZnJvbSB0aGUgc2Nh bidzIHNlY29uZCBiYXRjaC4gIFRoaXMgaGV1cmlzdGljIGF2b2lkcyB3YXN0aW5nIGN5Y2xlcyBv bgorICogc3RhcnRpbmcgYSByZWFkIHN0cmVhbSBmb3IgdmVyeSBzZWxlY3RpdmUgaW5kZXggc2Nh bnMuCisgKgorICogV2UgYXZvaWQgcHJlZmV0Y2hpbmcgZHVyaW5nIHNjYW5zIHdoZXJlIHdlJ3Jl IHVuYWJsZSB0byB1bmd1YXJkICh1bnBpbikKKyAqIGVhY2ggYmF0Y2gncyBidWZmZXJzIHJpZ2h0 IGF3YXkgKG5vbi1NVkNDIHNuYXBzaG90IHNjYW5zKS4gIFdlIGFyZSBub3QKKyAqIHByZXBhcmVk IHRvIHNlbnNpYmx5IGxpbWl0IHRoZSB0b3RhbCBudW1iZXIgb2YgYnVmZmVyIHBpbnMgaGVsZCAo cmVhZAorICogc3RyZWFtIGhhbmRsZXMgYWxsIHBpbiByZXNvdXJjZSBtYW5hZ2VtZW50IGZvciB1 cywgYW5kIGtub3dzIG5vdGhpbmcKKyAqIGFib3V0IHBpbnMgaGVsZCBvbiBpbmRleCBwYWdlcy93 aXRoaW4gYmF0Y2hlcykuCisgKgorICogV2UgYWxzbyBkZWxheSBjcmVhdGluZyBhIHJlYWQgc3Ry ZWFtIGR1cmluZyBpbmRleC1vbmx5IHNjYW5zIHRoYXQgaGF2ZW4ndAorICogZG9uZSBhbnkgaGVh cCBmZXRjaGVzIHlldC4gIFdlIGRvbid0IHdhbnQgdG8gd2FzdGUgYW55IGN5Y2xlcyBvbgorICog YWxsb2NhdGluZyBhIHJlYWQgc3RyZWFtIHVudGlsIHdlIGhhdmUgYSBkZW1vbnN0cmF0ZWQgbmVl ZCB0byBwZXJmb3JtCisgKiBoZWFwIGZldGNoZXMuCisgKi8KK3N0YXRpYyBwZ19hdHRyaWJ1dGVf YWx3YXlzX2lubGluZSB2b2lkCitoZWFwYW1faW5kZXhfY29uc2lkZXJfcHJlZmV0Y2hpbmcoSW5k ZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkgIEluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4pCit7 CisJQXNzZXJ0KCFoc2Nhbi0+eHNfcmVhZF9zdHJlYW0pOworCUFzc2VydCghc2Nhbi0+YmF0Y2hy aW5nYnVmLnByZWZldGNoUG9zLnZhbGlkKTsKKworCWlmIChzY2FuLT5NVkNDU2NhbiAmJiBlbmFi bGVfaW5kZXhzY2FuX3ByZWZldGNoICYmCisJCWhzY2FuLT54c19ibGsgIT0gSW52YWxpZEJsb2Nr TnVtYmVyKQkvKiBmb3IgaW5kZXgtb25seSBzY2FucyAqLworCQloc2Nhbi0+eHNfcmVhZF9zdHJl YW0gPQorCQkJcmVhZF9zdHJlYW1fYmVnaW5fcmVsYXRpb24oUkVBRF9TVFJFQU1fREVGQVVMVCwg TlVMTCwKKwkJCQkJCQkJCSAgIHNjYW4tPmhlYXBSZWxhdGlvbiwgTUFJTl9GT1JLTlVNLAorCQkJ CQkJCQkJICAgaGVhcGFtX2luZGV4X3ByZWZldGNoX25leHRfYmxvY2ssCisJCQkJCQkJCQkgICBz Y2FuLCAwKTsKKwkvKiBlbHNlIGRvbid0IHN0YXJ0IGEgcmVhZCBzdHJlYW0gZm9yIHByZWZldGNo aW5nIChub3QgeWV0LCBhdCBsZWFzdCkgKi8KK30KKworLyoKKyAqIFJldHVybiB0aGUgbmV4dCBi bG9jayB0byB0aGUgcmVhZCBzdHJlYW0gd2hlbiBwZXJmb3JtaW5nIGluZGV4IHByZWZldGNoaW5n LgorICoKKyAqIFRoZSBpbml0aWFsIGJhdGNoIGlzIGFsd2F5cyBsb2FkZWQgYnkgaGVhcGFtX2lu ZGV4X2dldG5leHRfc2NhbmJhdGNoX3Bvcy4KKyAqIFdlIGRvbid0IGdldCBjYWxsZWQgdW50aWwg dGhlIGZpcnN0IHJlYWRfc3RyZWFtX25leHRfYnVmZmVyIGNhbGwsIHdoZW4gYQorICogaGVhcCBi bG9jayBpcyByZXF1ZXN0ZWQgZnJvbSB0aGUgc2NhbidzIHN0cmVhbSBmb3IgdGhlIGZpcnN0IHRp bWUuCisgKgorICogVGhlIHBvc2l0aW9uIG9mIHRoZSByZWFkX3N0cmVhbSBpcyBzdG9yZWQgaW4g cHJlZmV0Y2hQb3MuICBJdCBpcyB0eXBpY2FsCisgKiBmb3IgcHJlZmV0Y2hQb3MgdG8gY29uc2lz dGVudGx5IHN0YXkgYWhlYWQgb2YgdGhlIHNjYW5Qb3MgcG9zaXRpb24gdGhhdCdzCisgKiB1c2Vk IHRvIHRyYWNrIHRoZSBuZXh0IFRJRCBoZWFwYW1faW5kZXhfZ2V0bmV4dF9zY2FuYmF0Y2hfcG9z IHdpbGwgcmV0dXJuCisgKiB0byB0aGUgc2NhbiAoYWZ0ZXIgdGhlIGZpcnN0IHRpbWUgd2UgZ2V0 IGNhbGxlZCkuICBIb3dldmVyLCB0aGF0IGlzbid0IGEKKyAqIHN0cmljdCBwcmVjb25kaXRpb24g KHRob3VnaCBhcyBleHBsYWluZWQgYmVsb3cgd2UgaW1wbGVtZW50IGEgc2NoZW1lCisgKiBlc3Nl bnRpYWxseSBlcXVpdmFsZW50IHRvIG1ha2luZyBpdCBhIHN0cmljdCBwcmVjb25kaXRpb24pLiAg VGhlcmUgaXMgYQorICogdHJ1ZSBzdHJpY3QgcG9zdGNvbmRpdGlvbiwgdGhvdWdoOiB3aGVuIHdl IHJldHVybiB3ZSdsbCBhbHdheXMgbGVhdmUKKyAqIHNjYW5Qb3MgPD0gcHJlZmV0Y2hQb3MuCisg Ki8KK3N0YXRpYyBCbG9ja051bWJlcgoraGVhcGFtX2luZGV4X3ByZWZldGNoX25leHRfYmxvY2so UmVhZFN0cmVhbSAqc3RyZWFtLAorCQkJCQkJCQkgdm9pZCAqY2FsbGJhY2tfcHJpdmF0ZV9kYXRh LAorCQkJCQkJCQkgdm9pZCAqcGVyX2J1ZmZlcl9kYXRhKQoreworCUluZGV4U2NhbkRlc2Mgc2Nh biA9IChJbmRleFNjYW5EZXNjKSBjYWxsYmFja19wcml2YXRlX2RhdGE7CisJSW5kZXhGZXRjaEhl YXBEYXRhICpoc2NhbiA9IChJbmRleEZldGNoSGVhcERhdGEgKikgc2Nhbi0+eHNfaGVhcGZldGNo OworCUJhdGNoUmluZ0J1ZmZlciAqYmF0Y2hyaW5nYnVmID0gJnNjYW4tPmJhdGNocmluZ2J1ZjsK KwlCYXRjaFJpbmdJdGVtUG9zICpzY2FuUG9zID0gJmJhdGNocmluZ2J1Zi0+c2NhblBvczsKKwlC YXRjaFJpbmdJdGVtUG9zICpwcmVmZXRjaFBvcyA9ICZiYXRjaHJpbmdidWYtPnByZWZldGNoUG9z OworCVNjYW5EaXJlY3Rpb24geHNfcmVhZF9zdHJlYW1fZGlyID0gaHNjYW4tPnhzX3JlYWRfc3Ry ZWFtX2RpcjsKKwlJbmRleFNjYW5CYXRjaCBwcmVmZXRjaEJhdGNoOworCWJvb2wJCWZyb21TY2Fu UG9zID0gZmFsc2U7CisKKwkvKgorCSAqIHNjYW5Qb3MgbXVzdCBhbHdheXMgYmUgdmFsaWQgd2hl biBwcmVmZXRjaGluZyB0YWtlcyBwbGFjZS4gIFRoZXJlIGhhcworCSAqIHRvIGJlIGF0IGxlYXN0 IG9uZSBiYXRjaCwgbG9hZGVkIGFzIG91ciBzY2FuQmF0Y2guICBUaGUgc2NhbiBkaXJlY3Rpb24K KwkgKiBtdXN0IGJlIGVzdGFibGlzaGVkLCB0b28uCisJICovCisJQXNzZXJ0KGluZGV4X3NjYW5f YmF0Y2hfY291bnQoc2NhbikgPiAwKTsKKwlBc3NlcnQoc2NhblBvcy0+dmFsaWQgJiYgaW5kZXhf c2Nhbl9iYXRjaF9sb2FkZWQoc2Nhbiwgc2NhblBvcy0+YmF0Y2gpKTsKKwlBc3NlcnQoc2Nhbi0+ TVZDQ1NjYW4pOworCUFzc2VydCghaHNjYW4tPnhzX3BhdXNlZCk7CisJQXNzZXJ0KHhzX3JlYWRf c3RyZWFtX2RpciAhPSBOb01vdmVtZW50U2NhbkRpcmVjdGlvbik7CisKKwkvKgorCSAqIEhhbmRs ZSBpbml0aWFsaXphdGlvbiBvbiB0aGUgZmlyc3QgY2FsbCBoZXJlLCB3aGVuIHByZWZldGNoUG9z IGlzbid0CisJICogeWV0IHZhbGlkIChhbHNvIGhhbmRsZXMgdGhlIHByZWZldGNoUG9zIDwgc2Nh blBvcyBlZGdlIGNhc2UpLgorCSAqCisJICogSWYgcHJlZmV0Y2hQb3MgaGFzIG5vdCBiZWVuIGlu aXRpYWxpemVkIHlldCwgdGhhdCB0eXBpY2FsbHkgaW5kaWNhdGVzCisJICogdGhhdCB0aGlzIGlz IHRoZSBmaXJzdCBjYWxsIGhlcmUgZm9yIHRoZSBlbnRpcmUgc2Nhbi4gIFdlIGluaXRpYWxpemUK KwkgKiBwcmVmZXRjaFBvcyB1c2luZyB0aGUgY3VycmVudCBzY2FuUG9zLCBzaW5jZSB0aGUgY3Vy cmVudCBzY2FuQmF0Y2gKKwkgKiBpdGVtJ3MgVElEIHNob3VsZCBoYXZlIGl0cyBibG9jayBudW1i ZXIgcmV0dXJuZWQgYnkgdGhlIHJlYWQgc3RyZWFtCisJICogZmlyc3QuICBXaGVuIHRoaXMgaGFw cGVucywgaXQncyBsaWtlbHkgdGhhdCBwcmVmZXRjaFBvcyB3aWxsIGdldCBhaGVhZAorCSAqIG9m IHNjYW5Qb3MgdmVyeSBzb29uLCBhZnRlciB0aGUgX25leHRfIGNhbGwgaGVyZSByZXR1cm5zLgor CSAqCisJICogVGhlcmUncyBhbHNvIGFuIGVkZ2UgY2FzZSB0aGF0IHdlIGhhbmRsZSB1c2luZyBl eGFjdGx5IHRoZSBzYW1lIHN0ZXBzLgorCSAqIEl0J3MgcG9zc2libGUgZm9yIHByZWZldGNoUG9z IHRvICJmYWxsIGJlaGluZCIgc2NhblBvcywgYXQgbGVhc3QgaW4gYQorCSAqIHRyaXZpYWwgc2Vu c2U6IGlmIG1hbnkgYWRqYWNlbnQgbWF0Y2hpbmcgaXRlbXMgY29udGFpbiBUSURzIHRoYXQgYWxs CisJICogcG9pbnQgdG8gdGhlIHNhbWUgaGVhcCBibG9jaywgc2NhblBvcyBjYW4gYWN0dWFsbHkg b3ZlcnRha2UgcHJlZmV0Y2hQb3MKKwkgKiAocHJlZmV0Y2hQb3MgY2FuJ3QgYWR2YW5jZSB1bnRp bCB3ZSdyZSBhY3R1YWxseSBjYWxsZWQpLiAgQSBzaW1pbGFyCisJICogaXNzdWUgYXJpc2VzIGR1 cmluZyBpbmRleC1vbmx5IHNjYW5zIHRoYXQgcmVxdWlyZSBvbmx5IGEgZmV3IGhlYXAKKwkgKiBm ZXRjaGVzOiB3ZSdsbCB0ZW5kIHRvIGJlIGNhbGxlZCBmYXIgbGVzcyBvZnRlbiB0aGFuIHdlJ2Qg YmUgY2FsbGVkCisJICogZHVyaW5nIGFuIGVxdWl2YWxlbnQgcGxhaW4gaW5kZXggc2NhbiBkdWUg dG8gYWxsLXZpc2libGUgaXRlbXMuICBBbgorCSAqIGFsbC12aXNpYmxlIGl0ZW0gd2lsbCBhZHZh bmNlIHNjYW5Qb3MsIGJ1dCBjYW4ndCB0cmlnZ2VyIGEgY2FsbCB0byBoZXJlCisJICogKGp1c3Qg bGlrZSBhbiBpdGVtIHRoYXQgcG9pbnRzIHRvIHRoZSBzYW1lIGhlYXAgYmxvY2sgdGhhdCB0aGUg cHJldmlvdXMKKwkgKiBpdGVtIGFsc28gcG9pbnRlZCB0bykuCisJICoKKwkgKiBUaGlzIHNjaGVt ZSBwcm9kdWNlcyBleGFjdGx5IHRoZSBzYW1lIGJsb2NrIHByZWZldGNoIHJlcXVlc3RzIGFzIGEK KwkgKiBzY2hlbWUgdGhhdCByZXF1aXJlcyBoZWFwYW1faW5kZXhfZ2V0bmV4dF9zY2FuYmF0Y2hf cG9zIHRvIGFjdGl2ZWx5CisJICogZW5zdXJlIHRoYXQgInByZWZldGNoUG9zIDwgc2NhblBvcyIg Y2FuIG5ldmVyIGhhcHBlbi4gIFRoYXQgaXNuJ3QgYQorCSAqIHN0cmljdCBwcmVjb25kaXRpb24g Zm9yIHRoaXMgZnVuY3Rpb24gYmVjYXVzZSBtYWtpbmcgaXQgZXhwbGljaXQgd291bGQKKwkgKiBp bXBvc2UgYSBwZXJmb3JtYW5jZSBwZW5hbHR5IG9uIGhlYXBhbV9pbmRleF9nZXRuZXh0X3NjYW5i YXRjaF9wb3MuCisJICoKKwkgKiBOb3RlOiB3aGVuIGhlYXBhbV9pbmRleF9nZXRuZXh0X3NjYW5i YXRjaF9wb3MgZnJlZXMgYSBiYXRjaCB0aGF0CisJICogcHJlZmV0Y2hQb3MgcG9pbnRzIHRvLCBp dCdsbCBhdCBsZWFzdCBpbnZhbGlkYXRlIHByZWZldGNoUG9zIGZvciB1cy4KKwkgKiBUaGlzIHJl bW92ZXMgYW55IGRhbmdlciBvZiBwcmVmZXRjaFBvcy5iYXRjaCBmYWxsaW5nIHNvIGZhciBiZWhp bmQKKwkgKiBzY2FuUG9zLmJhdGNoIHRoYXQgaXQgd3JhcHMgYXJvdW5kIChhbmQgYXBwZWFycyB0 byBiZSBhaGVhZCBvZiBzY2FuUG9zCisJICogaW5zdGVhZCBvZiBiZWhpbmQgaXQpLiAgSW4gb3Ro ZXIgd29yZHMsIGluIGEgY2VydGFpbiBzZW5zZSB3ZSBhY3R1YWxseQorCSAqIF9jYW5fIHRydXN0 IGhlYXBhbV9pbmRleF9nZXRuZXh0X3NjYW5iYXRjaF9wb3MgdG8gbm90IGxldCBwcmVmZXRjaFBv cworCSAqIGZhbGwgYmVoaW5kIHNjYW5Qb3M6IGl0IGNhbid0IGhhcHBlbiBhdCB0aGUgYmF0Y2gg Z3JhbnVsYXJpdHkgKG9ubHkgYXQKKwkgKiB0aGUgaXRlbS90dXBsZSBncmFudWxhcml0eSwgd2hp Y2ggd2UgY2FuIGFsd2F5cyBjb3BlIHdpdGggaGVyZSkuCisJICovCisJaWYgKCFwcmVmZXRjaFBv cy0+dmFsaWQgfHwKKwkJaW5kZXhfc2Nhbl9wb3NfY21wKHByZWZldGNoUG9zLCBzY2FuUG9zLCB4 c19yZWFkX3N0cmVhbV9kaXIpIDwgMCkKKwl7CisJCWhzY2FuLT54c19wcmVmZXRjaF9ibG9jayA9 IEludmFsaWRCbG9ja051bWJlcjsKKwkJKnByZWZldGNoUG9zID0gKnNjYW5Qb3M7CisJCWZyb21T Y2FuUG9zID0gdHJ1ZTsKKworCQkvKgorCQkgKiBXZSBtdXN0IGF2b2lkIGtlZXBpbmcgYW55IGJh dGNoIGd1YXJkZWQgZm9yIG1vcmUgdGhhbiBhbiBpbnN0YW50LAorCQkgKiB0byBhdm9pZCB1bmRl c2lyYWJsZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgc2NhbidzIHJlYWQgc3RyZWFtLiBTZWUKKwkJ ICogY29tbWVudCBhbmQgYXNzZXJ0aW9uIGF0IHRoZSB0b3Agb2YgdGhlIGxvb3AgYmVsb3cuCisJ CSAqLworCQlpZiAoc2Nhbi0+eHNfd2FudF9pdHVwKQorCQl7CisJCQkvKgorCQkJICogTWFrZSBo ZWFwYW1faW5kZXhfYmF0Y2hfcG9zX3Zpc2liaWxpdHkgcmVsZWFzZSByZXNvdXJjZXMKKwkJCSAq IGVhZ2VybHkKKwkJCSAqLworCQkJaHNjYW4tPnhzX3ZtX2l0ZW1zID0gc2Nhbi0+bWF4aXRlbXNi YXRjaDsKKworCQkJLyogTWFrZSBzdXJlIHRoYXQgdGhpcyBuZXcgcHJlZmV0Y2hCYXRjaCBpcyB1 bmd1YXJkZWQgKi8KKwkJCXByZWZldGNoQmF0Y2ggPSBpbmRleF9zY2FuX2JhdGNoKHNjYW4sIHBy ZWZldGNoUG9zLT5iYXRjaCk7CisJCQlpZiAocHJlZmV0Y2hCYXRjaC0+aXNHdWFyZGVkKQorCQkJ eworCQkJCUhlYXBCYXRjaERhdGEgKmhiYXRjaCA9IGhlYXBfYmF0Y2hfZGF0YShzY2FuLCBwcmVm ZXRjaEJhdGNoKTsKKworCQkJCS8qIFNldCB2aXNpYmlsaXR5IGluZm8gbm90IHNldCB0aHJvdWdo IHNjYW5CYXRjaCAqLworCQkJCWhlYXBhbV9pbmRleF9iYXRjaF9wb3NfdmlzaWJpbGl0eShzY2Fu LCB4c19yZWFkX3N0cmVhbV9kaXIsCisJCQkJCQkJCQkJCQkgIHByZWZldGNoQmF0Y2gsIGhiYXRj aCwKKwkJCQkJCQkJCQkJCSAgcHJlZmV0Y2hQb3MpOworCQkJfQorCQl9CisJfQorCisJcHJlZmV0 Y2hCYXRjaCA9IGluZGV4X3NjYW5fYmF0Y2goc2NhbiwgcHJlZmV0Y2hQb3MtPmJhdGNoKTsKKwor CS8qCisJICogSWYgcHJlZmV0Y2hQb3Mgd2Fzbid0IGp1c3QgaW5pdGlhbGl6ZWQgdXNpbmcgc2Nh blBvcywgd2UncmUgZGlyZWN0bHkKKwkgKiBwaWNraW5nIHVwIHByZWZldGNoaW5nIHdoZXJlIHRo ZSBsYXN0IGNhbGwgaGVyZSBsZWZ0IG9mZi4gIEFzc2VydCB0aGF0CisJICogeHNfcHJlZmV0Y2hf YmxvY2sgbWF0Y2hlcyB0aGUgbGFzdCBpdGVtIHdlIHJldHVybmVkIGFzIGV4cGVjdGVkLgorCSAq CisJICogTm90ZTogd2UgZG9uJ3QgYWN0dWFsbHkgbmVlZCBhIHhzX3ByZWZldGNoX2Jsb2NrIGZp ZWxkIGF0IGFsbDsgd2UgY291bGQKKwkgKiBqdXN0IHRha2UgdGhlIGxhc3QgYmxvY2sgd2UgcmV0 dXJuZWQgZnJvbSBwcmVmZXRjaFBvcyBkaXJlY3RseSBpbnN0ZWFkLgorCSAqIEJ1dCBtYWludGFp bmluZyB4c19wcmVmZXRjaF9ibG9jayBleHBsaWNpdGx5IGlzIHNsaWdodGx5IG1vcmUgcm9idXN0 LgorCSAqIEl0IGdpdmVzIHVzIGEgd2F5IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBsYXN0IGNhbGwg aGVyZSBsZWZ0IHByZWZldGNoUG9zCisJICogaW4gYSBjb25zaXN0ZW50IHN0YXRlIChlLmcuLCB3 aGVuIHRoZSByZWFkIHN0cmVhbSBoYWQgdG8gYmUgcGF1c2VkKS4KKwkgKi8KKyNpZmRlZiBVU0Vf QVNTRVJUX0NIRUNLSU5HCisJaWYgKCFmcm9tU2NhblBvcykKKwl7CisJCUJhdGNoTWF0Y2hpbmdJ dGVtICpsYXN0aXRlbSA9ICZwcmVmZXRjaEJhdGNoLT5pdGVtc1twcmVmZXRjaFBvcy0+aXRlbV07 CisJCUJsb2NrTnVtYmVyIGxhc3RfYmxvY2sgPSBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKCZs YXN0aXRlbS0+dGFibGVUaWQpOworCisJCUFzc2VydChsYXN0X2Jsb2NrID09IGhzY2FuLT54c19w cmVmZXRjaF9ibG9jayk7CisJfQorI2VuZGlmCisKKwlmb3IgKDs7KQorCXsKKwkJQmF0Y2hNYXRj aGluZ0l0ZW0gKml0ZW07CisJCUJsb2NrTnVtYmVyIHByZWZldGNoX2Jsb2NrOworCisJCS8qCisJ CSAqIFdlIG5ldmVyIGNhbGwgYW1nZXRiYXRjaCB3aXRob3V0IGltbWVkaWF0ZWx5IHVuZ3VhcmRp bmcgdGhlIGJhdGNoLAorCQkgKiBlaXRoZXIgd2l0aGluIHRoZSBpbmRleCBBTSBvciBoZXJlICh3 aGVuIHdlIGVhZ2VybHkgbG9hZCBhbGwgb2YgdGhlCisJCSAqIGJhdGNoJ3MgdmlzaWJpbGl0eSBp bmZvcm1hdGlvbiBkdXJpbmcgYW4gaW5kZXgtb25seSBzY2FuKS4gIFRoZQorCQkgKiBpbmRleCBB TSB3b24ndCBob2xkIG9udG8gVElEIGludGVybG9jayBidWZmZXIgcGlucywga2VlcGluZyB0aGUK KwkJICogYWJzb2x1dGUgbnVtYmVyIG9mIHBpbnMgaGVsZCB0byBhIG1pbmltdW0uCisJCSAqCisJ CSAqIFRoaXMgaXMgZGVmZW5zaXZlLiAgVGhlIHJlYWQgc3RyZWFtIHRyaWVzIHRvIGJlIGNhcmVm dWwgYWJvdXQgbm90CisJCSAqIHBpbm5pbmcgdG9vIG1hbnkgYnVmZmVycywgYW5kIHRoYXQncyBo YXJkZXIgdG8gZG8gcmVsaWFibHkgaWYgdGhlcmUKKwkJICogYXJlIHZhcmlhYmxlIG51bWJlcnMg b2YgcGlucyB0YWtlbiB3aXRob3V0IHN1Y2ggY2FyZS4KKwkJICovCisJCUFzc2VydCghcHJlZmV0 Y2hCYXRjaC0+aXNHdWFyZGVkKTsKKwkJaWYgKGZyb21TY2FuUG9zKQorCQl7CisJCQkvKgorCQkJ ICogRG9uJ3QgaW5jcmVtZW50IGl0ZW0gd2hlbiBwcmVmZXRjaFBvcyB3YXMganVzdCBpbml0aWFs aXplZAorCQkJICogdXNpbmcgc2NhblBvcy4gIFdlJ2xsIHJldHVybiB0aGUgc2NhblBvcyBpdGVt J3MgaGVhcCBibG9jaworCQkJICogZGlyZWN0bHkgb24gdGhlIGZpcnN0IGNhbGwgaGVyZS4gIElu IG90aGVyIHdvcmRzLCB3ZSdsbCByZXR1cm4KKwkJCSAqIHRoZSBoZWFwIGJsb2NrIGZyb20gVElE IHBhc3NlZCB0byBoZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGVfaW1wbAorCQkJICogYXQgdGhlIHBv aW50IHdoZXJlIGl0IGNhbGxlZCByZWFkX3N0cmVhbV9uZXh0X2J1ZmZlciBmb3IgdGhlCisJCQkg KiBmaXJzdCB0aW1lIGR1cmluZyB0aGUgc2Nhbi4gKEFzIGV4cGxhaW5lZCBhYm92ZSwgd2UgYWxz byBlbmQgdXAKKwkJCSAqIGhlcmUgZHVyaW5nIHRoZSBmaXJzdCBjYWxsIHRvIHJlYWRfc3RyZWFt X25leHRfYnVmZmVyIGZvbGxvd2luZworCQkJICogcHJlZmV0Y2hQb3MgZmFsbGluZyBiZWhpbmQg c2NhblBvcy9iZWluZyBpbnZhbGlkYXRlZCBmb3IgdXMuKQorCQkJICovCisJCQlmcm9tU2NhblBv cyA9IGZhbHNlOworCQl9CisJCWVsc2UgaWYgKCFpbmRleF9zY2FuX3Bvc19hZHZhbmNlKHhzX3Jl YWRfc3RyZWFtX2RpciwKKwkJCQkJCQkJCQkgcHJlZmV0Y2hCYXRjaCwgcHJlZmV0Y2hQb3MpKQor CQl7CisJCQkvKgorCQkJICogUmFuIG91dCBvZiBpdGVtcyBmcm9tIHByZWZldGNoQmF0Y2guICBU cnkgdG8gYWR2YW5jZSB0byB0aGUKKwkJCSAqIHNjYW4ncyBuZXh0IGJhdGNoLgorCQkJICovCisJ CQlpZiAodW5saWtlbHkoaW5kZXhfc2Nhbl9iYXRjaF9mdWxsKHNjYW4pKSkKKwkJCXsKKwkJCQkv KgorCQkJCSAqIENhbid0IGFkdmFuY2UgcHJlZmV0Y2hCYXRjaCBiZWNhdXNlIGFsbCBhdmFpbGFi bGUKKwkJCQkgKiBiYXRjaHJpbmdidWYgYmF0Y2ggc2xvdHMgYXJlIGN1cnJlbnRseSBpbiB1c2Uu CisJCQkJICoKKwkJCQkgKiBEZWFsIHdpdGggdGhpcyBieSBtb21lbnRhcmlseSBwYXVzaW5nIHRo ZSByZWFkIHN0cmVhbS4KKwkJCQkgKiBoZWFwYW1faW5kZXhfZ2V0bmV4dF9zY2FuYmF0Y2hfcG9z IHdpbGwgcmVzdW1lIHRoZSByZWFkCisJCQkJICogc3RyZWFtIGxhdGVyLCB0aG91Z2ggb25seSBh ZnRlciBzY2FuUG9zIGhhcyBjb25zdW1lZCBhbGwKKwkJCQkgKiByZW1haW5pbmcgaXRlbXMgZnJv bSBzY2FuQmF0Y2ggKGF0IHdoaWNoIHBvaW50IHRoZSBjdXJyZW50CisJCQkJICogaGVhZCBiYXRj aCB3aWxsIGJlIGZyZWVkLCBtYWtpbmcgYSBzbG90IGF2YWlsYWJsZSBmb3IgcmV1c2UKKwkJCQkg KiBoZXJlIGJ5IHVzKS4KKwkJCQkgKgorCQkJCSAqIEluIHByYWN0aWNlIHdlIGhhcmRseSBldmVy IG5lZWQgdG8gZG8gdGhpcy4gIEl0IHdvdWxkIGJlCisJCQkJICogcG9zc2libGUgdG8gYXZvaWQg dGhlIG5lZWQgdG8gcGF1c2UgdGhlIHJlYWQgc3RyZWFtIGJ5CisJCQkJICogZHluYW1pY2FsbHkg YWxsb2NhdGluZyBzbG90cywgYnV0IHRoYXQgd291bGQgYWRkIGNvbXBsZXhpdHkKKwkJCQkgKiBm b3Igbm8gcmVhbCBiZW5lZml0LiAgSXQgYWxzbyBzZWVtcyBsaWtlIGEgZ29vZCBpZGVhIHRvCisJ CQkJICogaW1wb3NlIHNvbWUgaGFyZCBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mIGJhdGNoZXMgdGhh dAorCQkJCSAqIHByZWZldGNoUG9zIGNhbiBnZXQgYWhlYWQgb2Ygc2NhblBvcyBieSAoZXNwZWNp YWxseSBpbiB0aGUKKwkJCQkgKiBjYXNlIG9mIGluZGV4LW9ubHkgc2NhbnMsIHdoZXJlIHdlIG9m dGVuIHdvbid0IGhhdmUgYW55CisJCQkJICogaGVhcCBibG9jayB0byByZXR1cm4gZnJvbSBtb3N0 IG9mIHRoZSBzY2FuJ3MgYmF0Y2hlcykuCisJCQkJICovCisJCQkJaHNjYW4tPnhzX3BhdXNlZCA9 IHRydWU7CisKKwkJCQkvKgorCQkJCSAqIEJlZm9yZSByZXR1cm5pbmcsIGFkdmFuY2UgcHJlZmV0 Y2hQb3MgaW4gdGhlIG9wcG9zaXRlCisJCQkJICogZGlyZWN0aW9uIHRvIHRoZSBvbmUgdXNlZCBi eSB0aGUgc2Nhbi4gIFRoaXMgdW5kb2VzIHRoZQorCQkJCSAqIGVmZmVjdHMgb2YgdGhlIG1vc3Qg cmVjZW50IGFkdmFuY2UuICBXZSdyZSBub3QgZ29pbmcgdG8KKwkJCQkgKiByZXR1cm4gYW55IGJs b2NrLCBzbyBpdCBzZWVtcyBsaWtlIGEgZ29vZCBpZGVhIHRvIGxlYXZlCisJCQkJICogcHJlZmV0 Y2hQb3MgaW4gYSBzdGF0ZSBjb25zaXN0ZW50IHdpdGggdGhhdC4KKwkJCQkgKi8KKwkJCQlpZiAo U2NhbkRpcmVjdGlvbklzRm9yd2FyZCh4c19yZWFkX3N0cmVhbV9kaXIpKQorCQkJCXsKKwkJCQkJ QXNzZXJ0KHByZWZldGNoUG9zLT5pdGVtID09IHByZWZldGNoQmF0Y2gtPmxhc3RJdGVtICsgMSk7 CisJCQkJCXByZWZldGNoUG9zLT5pdGVtID0gcHJlZmV0Y2hCYXRjaC0+bGFzdEl0ZW07CisJCQkJ fQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCUFzc2VydChwcmVmZXRjaFBvcy0+aXRlbSA9PSBwcmVm ZXRjaEJhdGNoLT5maXJzdEl0ZW0gLSAxKTsKKwkJCQkJcHJlZmV0Y2hQb3MtPml0ZW0gPSBwcmVm ZXRjaEJhdGNoLT5maXJzdEl0ZW07CisJCQkJfQorCisJCQkJcmV0dXJuIHJlYWRfc3RyZWFtX3Bh dXNlKHN0cmVhbSk7CisJCQl9CisKKwkJCXByZWZldGNoQmF0Y2ggPSB0YWJsZWFtX3V0aWxfZmV0 Y2hfbmV4dF9iYXRjaChzY2FuLAorCQkJCQkJCQkJCQkJCQkgIHhzX3JlYWRfc3RyZWFtX2RpciwK KwkJCQkJCQkJCQkJCQkJICBwcmVmZXRjaEJhdGNoLAorCQkJCQkJCQkJCQkJCQkgIHByZWZldGNo UG9zKTsKKwkJCWlmICghcHJlZmV0Y2hCYXRjaCkKKwkJCXsKKwkJCQkvKgorCQkJCSAqIE5vIG1v cmUgYmF0Y2hlcyBpbiB0aGlzIGRpcmVjdGlvbiwgc28gYWxsIHRoZSBiYXRjaGVzIHRoYXQKKwkJ CQkgKiB0aGUgc2NhbiB3aWxsIGV2ZXIgcmVxdWlyZSAoYmFycmluZyBhIGNoYW5nZSBpbiBzY2Fu CisJCQkJICogZGlyZWN0aW9uKSBhcmUgbm93IGxvYWRlZAorCQkJCSAqLworCQkJCXJldHVybiBJ bnZhbGlkQmxvY2tOdW1iZXI7CisJCQl9CisKKwkJCS8qIFBvc2l0aW9uIHByZWZldGNoUG9zIHRv IHRoZSBzdGFydCBvZiBuZXcgcHJlZmV0Y2hCYXRjaCAqLworCQkJaW5kZXhfc2Nhbl9wb3NfbmV4 dGJhdGNoKHhzX3JlYWRfc3RyZWFtX2RpciwKKwkJCQkJCQkJCSBwcmVmZXRjaEJhdGNoLCBwcmVm ZXRjaFBvcyk7CisKKwkJCWlmIChzY2FuLT54c193YW50X2l0dXApCisJCQl7CisJCQkJSGVhcEJh dGNoRGF0YSAqaGJhdGNoID0gaGVhcF9iYXRjaF9kYXRhKHNjYW4sIHByZWZldGNoQmF0Y2gpOwor CisJCQkJLyogbWFrZSBzdXJlIHdlIGhhdmUgdmlzaWJpbGl0eSBpbmZvIGZvciB0aGUgZW50aXJl IGJhdGNoICovCisJCQkJQXNzZXJ0KGhzY2FuLT54c192bV9pdGVtcyA9PSBzY2FuLT5tYXhpdGVt c2JhdGNoKTsKKwkJCQloZWFwYW1faW5kZXhfYmF0Y2hfcG9zX3Zpc2liaWxpdHkoc2NhbiwgeHNf cmVhZF9zdHJlYW1fZGlyLAorCQkJCQkJCQkJCQkJICBwcmVmZXRjaEJhdGNoLCBoYmF0Y2gsCisJ CQkJCQkJCQkJCQkgIHByZWZldGNoUG9zKTsKKwkJCX0KKwkJfQorCisJCS8qCisJCSAqIHByZWZl dGNoUG9zIG5vdyBwb2ludHMgdG8gdGhlIG5leHQgaXRlbSB3aG9zZSBUSUQncyBoZWFwIGJsb2Nr CisJCSAqIG51bWJlciBtaWdodCBuZWVkIHRvIGJlIHByZWZldGNoZWQKKwkJICovCisJCUFzc2Vy dChpbmRleF9zY2FuX2JhdGNoKHNjYW4sIHByZWZldGNoUG9zLT5iYXRjaCkgPT0gcHJlZmV0Y2hC YXRjaCk7CisJCUFzc2VydChwcmVmZXRjaFBvcy0+aXRlbSA+PSBwcmVmZXRjaEJhdGNoLT5maXJz dEl0ZW0gJiYKKwkJCSAgIHByZWZldGNoUG9zLT5pdGVtIDw9IHByZWZldGNoQmF0Y2gtPmxhc3RJ dGVtKTsKKwkJLyogc2NhblBvcyBpcyBhbHdheXMgPD0gcHJlZmV0Y2hQb3Mgd2hlbiB3ZSByZXR1 cm4gKi8KKwkJQXNzZXJ0KGluZGV4X3NjYW5fcG9zX2NtcChzY2FuUG9zLCBwcmVmZXRjaFBvcywg eHNfcmVhZF9zdHJlYW1fZGlyKSA8PSAwKTsKKworCQlpZiAoc2Nhbi0+eHNfd2FudF9pdHVwKQor CQl7CisJCQlIZWFwQmF0Y2hEYXRhICpoYmF0Y2ggPSBoZWFwX2JhdGNoX2RhdGEoc2NhbiwgcHJl ZmV0Y2hCYXRjaCk7CisKKwkJCUFzc2VydChoYmF0Y2gtPnZpc0luZm9bcHJlZmV0Y2hQb3MtPml0 ZW1dICYgSEVBUF9CQVRDSF9WSVNfQ0hFQ0tFRCk7CisJCQlpZiAoaGJhdGNoLT52aXNJbmZvW3By ZWZldGNoUG9zLT5pdGVtXSAmIEhFQVBfQkFUQ0hfVklTX0FMTF9WSVNJQkxFKQorCQkJeworCQkJ CS8qIGl0ZW0gaXMga25vd24gdG8gYmUgYWxsLXZpc2libGUgLS0gZG9uJ3QgcHJlZmV0Y2ggKi8K KwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQorCisJCWl0ZW0gPSAmcHJlZmV0Y2hCYXRjaC0+aXRl bXNbcHJlZmV0Y2hQb3MtPml0ZW1dOworCQlwcmVmZXRjaF9ibG9jayA9IEl0ZW1Qb2ludGVyR2V0 QmxvY2tOdW1iZXIoJml0ZW0tPnRhYmxlVGlkKTsKKworCQlpZiAocHJlZmV0Y2hfYmxvY2sgPT0g aHNjYW4tPnhzX3ByZWZldGNoX2Jsb2NrKQorCQl7CisJCQkvKgorCQkJICogcHJlZmV0Y2hfYmxv Y2sgbWF0Y2hlcyB0aGUgbGFzdCBwcmVmZXRjaFBvcyBpdGVtJ3MgVElEJ3MgaGVhcAorCQkJICog YmxvY2sgbnVtYmVyOyB3ZSBtdXN0IG5vdCByZXR1cm4gdGhlIHNhbWUgcHJlZmV0Y2hfYmxvY2sg dHdpY2UKKwkJCSAqICh0d2ljZSBpbiBzdWNjZXNzaW9uKQorCQkJICovCisJCQljb250aW51ZTsK KwkJfQorCisJCS8qIFdlIGhhdmUgYSBuZXcgaGVhcCBibG9jayBudW1iZXIgdG8gcmV0dXJuIHRv IHJlYWQgc3RyZWFtICovCisJCWhzY2FuLT54c19wcmVmZXRjaF9ibG9jayA9IHByZWZldGNoX2Js b2NrOworCQlyZXR1cm4gcHJlZmV0Y2hfYmxvY2s7CisJfQorCisJcmV0dXJuIEludmFsaWRCbG9j a051bWJlcjsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGJh dGNoLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhiYXRjaC5jCmluZGV4IDQ2ODc2 MzQ0Yi4uODEzYzI4OTBlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5k ZXhiYXRjaC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGJhdGNoLmMKQEAg LTY5LDYgKzY5LDcgQEAgYmF0Y2hzY2FuX2luaXQoSW5kZXhTY2FuRGVzYyBzY2FuKQogCUFzc2Vy dChzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1nZXRiYXRjaCAhPSBOVUxMKTsKIAog CXNjYW4tPmJhdGNocmluZ2J1Zi5zY2FuUG9zLnZhbGlkID0gZmFsc2U7CisJc2Nhbi0+YmF0Y2hy aW5nYnVmLnByZWZldGNoUG9zLnZhbGlkID0gZmFsc2U7CiAJc2Nhbi0+YmF0Y2hyaW5nYnVmLm1h cmtQb3MudmFsaWQgPSBmYWxzZTsKIAogCXNjYW4tPmJhdGNocmluZ2J1Zi5tYXJrQmF0Y2ggPSBO VUxMOwpAQCAtMTQ5LDcgKzE1MCwxNCBAQCBiYXRjaHNjYW5fbWFya19wb3MoSW5kZXhTY2FuRGVz YyBzY2FuKQogICogY3VycmVudCBzY2FuQmF0Y2ggd2hlbiBuZWVkZWQuCiAgKgogICogV2UganVz dCBkaXNjYXJkIGFsbCBiYXRjaGVzIChvdGhlciB0aGFuIG1hcmtCYXRjaC9yZXN0b3JlZCBzY2Fu QmF0Y2gpLAotICogZXhjZXB0IHdoZW4gbWFya0JhdGNoIGlzIGFscmVhZHkgdGhlIHNjYW4ncyBj dXJyZW50IHNjYW5CYXRjaC4KKyAqIGV4Y2VwdCB3aGVuIG1hcmtCYXRjaCBpcyBhbHJlYWR5IHRo ZSBzY2FuJ3MgY3VycmVudCBzY2FuQmF0Y2guICBXZSBhbHdheXMKKyAqIGludmFsaWRhdGUgcHJl ZmV0Y2hQb3MuICBUaGUgcmVhZCBzdHJlYW0gYW5kIHJlbGF0ZWQgcHJlZmV0Y2hpbmcgc3RhdGUg YXJlCisgKiByZXNldCBieSB0aGUgdGFibGUgQU0ncyBpbmRleF9mZXRjaF9yZXN0cnBvcyBjYWxs YmFjayAod2hpY2ggY2FsbHMgdGhpcworICogZnVuY3Rpb24gYWZ0ZXIgcmVzZXR0aW5nIGl0cyBv d24gc3RhdGUpLiAgVGhpcyBhcHByb2FjaCBrZWVwcyB0aGluZ3Mgc2ltcGxlCisgKiBmb3IgdGFi bGUgQU1zOiBtb3N0IGNvZGUgdGhhdCBkZWFscyB3aXRoIGJhdGNoZXMgaXMgdGhlcmVieSBhYmxl IHRvIGFzc3VtZQorICogdGhhdCB0aGUgY29tbW9uIGNhc2Ugd2hlcmUgc2NhbiBkaXJlY3Rpb24g bmV2ZXIgY2hhbmdlcyBpcyB0aGUgb25seSBjYXNlCisgKiAodGFibGVhbV91dGlsX3NjYW5iYXRj aF9kaXJjaGFuZ2UgdGFrZXMgYSBzaW1pbGFyIGFwcHJvYWNoIHRvIGhhbmRsaW5nIGEKKyAqIGNy b3NzLWJhdGNoIGNoYW5nZSBpbiBzY2FuIGRpcmVjdGlvbikuCiAgKi8KIHZvaWQKIHRhYmxlYW1f dXRpbF9iYXRjaHNjYW5fcmVzdG9yZV9wb3MoSW5kZXhTY2FuRGVzYyBzY2FuKQpAQCAtMTY0LDYg KzE3MiwxNCBAQCB0YWJsZWFtX3V0aWxfYmF0Y2hzY2FuX3Jlc3RvcmVfcG9zKEluZGV4U2NhbkRl c2Mgc2NhbikKIAlBc3NlcnQoc2Nhbi0+eHNfaGVhcGZldGNoKTsKIAlBc3NlcnQobWFya1Bvcy0+ dmFsaWQpOwogCisJLyoKKwkgKiBSZXN0b3JpbmcgYSBtYXJrIGFsd2F5cyByZXF1aXJlcyBzdG9w cGluZyBwcmVmZXRjaGluZy4gIFRoaXMgaXMgc2ltaWxhcgorCSAqIHRvIHRoZSBoYW5kbGluZyB0 YWJsZSBBTXMgaW1wbGVtZW50IHRvIGRlYWwgd2l0aCBhIHR1cGxlLWxldmVsIGNoYW5nZQorCSAq IGluIHRoZSBzY2FuJ3MgZGlyZWN0aW9uLiAgVGhlIHJlYWQgc3RyZWFtIG11c3QgaGF2ZSBhbHJl YWR5IGJlZW4gcmVzZXQKKwkgKiBieSB0aGUgY2FsbGVyICh2aWEgdGFibGVfaW5kZXhfZmV0Y2hf cmVzZXQpLgorCSAqLworCWJhdGNocmluZ2J1Zi0+cHJlZmV0Y2hQb3MudmFsaWQgPSBmYWxzZTsK KwogCWlmIChzY2FuQmF0Y2ggPT0gbWFya0JhdGNoKQogCXsKIAkJLyogbWFya0JhdGNoIGlzIGFs cmVhZHkgc2NhbkJhdGNoOyBuZWVkbid0IGNoYW5nZSBiYXRjaHJpbmdidWYgKi8KQEAgLTIyNiw2 ICsyNDIsNyBAQCB0YWJsZWFtX3V0aWxfYmF0Y2hzY2FuX3Jlc2V0KEluZGV4U2NhbkRlc2Mgc2Nh biwgYm9vbCBlbmRzY2FuKQogCWJvb2wJCW1hcmtCYXRjaEZyZWVkID0gZmFsc2U7CiAKIAliYXRj aHJpbmdidWYtPnNjYW5Qb3MudmFsaWQgPSBmYWxzZTsKKwliYXRjaHJpbmdidWYtPnByZWZldGNo UG9zLnZhbGlkID0gZmFsc2U7CiAJYmF0Y2hyaW5nYnVmLT5tYXJrUG9zLnZhbGlkID0gZmFsc2U7 CiAKIAkvKiBFbnN1cmUgYmF0Y2hfZnJlZSB3b24ndCBza2lwIHRoZSBvbGQgbWFya0JhdGNoIGlu IHRoZSBsb29wIGJlbG93ICovCkBAIC0yODYsNiArMzAzLDEzIEBAIHRhYmxlYW1fdXRpbF9iYXRj aHNjYW5fZW5kKEluZGV4U2NhbkRlc2Mgc2NhbikKICAqIHRvIGRldGVybWluZSB3aGljaCBiYXRj aCBjb21lcyBuZXh0IGluIHRoZSBuZXcgc2NhbiBkaXJlY3Rpb24uICBUaGlzCiAgKiBhcHByb2Fj aCBpc24ndCBwYXJ0aWN1bGFybHkgZWZmaWNpZW50LCBidXQgaXQgd29ya3Mgd2VsbCBlbm91Z2gg Zm9yIHdoYXQKICAqIG91Z2h0IHRvIGJlIGEgcmVsYXRpdmVseSByYXJlIG9jY3VycmVuY2UuCisg KgorICogQ2FsbGVyIG11c3QgaGF2ZSByZXNldCB0aGUgc2NhbidzIHJlYWQgc3RyZWFtIGJlZm9y ZSBjYWxsaW5nIGhlcmUuICBUaGF0CisgKiBuZWVkcyB0byBoYXBwZW4gYXMgc29vbiBhcyB0aGUg c2NhbiByZXF1ZXN0cyBhIHR1cGxlIGluIHdoYXRldmVyIHNjYW4KKyAqIGRpcmVjdGlvbiBpcyBv cHBvc2l0ZS10by1jdXJyZW50LiAgV2Ugb25seSBkZWFsIHdpdGggdGhlIGNhc2Ugd2hlcmUgdGhl CisgKiBzY2FuIGJhY2tzIHVwIGJ5IGVub3VnaCBpdGVtcyB0byBjcm9zcyBhIGJhdGNoIGJvdW5k YXJ5ICh3aGVuIHRoZSBzY2FuCisgKiByZXN1bWVzIHNjYW5uaW5nIGluIGl0cyBvcmlnaW5hbCBk aXJlY3Rpb24vZW5kcyBiZWZvcmUgY3Jvc3NpbmcgYSBib3VuZGFyeSwKKyAqIHRoZXJlIGlzbid0 IGFueSBuZWVkIHRvIGNhbGwgaGVyZSkuCiAgKi8KIHZvaWQKIHRhYmxlYW1fdXRpbF9zY2FuYmF0 Y2hfZGlyY2hhbmdlKEluZGV4U2NhbkRlc2Mgc2NhbikKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9j b3N0c2l6ZS5jCmluZGV4IDFjNTc1ZTU2Zi4uNmZjYjgxNWY3IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXpl ci9wYXRoL2Nvc3RzaXplLmMKQEAgLTE0Niw2ICsxNDYsNyBAQCBpbnQJCQltYXhfcGFyYWxsZWxf d29ya2Vyc19wZXJfZ2F0aGVyID0gMjsKIGJvb2wJCWVuYWJsZV9zZXFzY2FuID0gdHJ1ZTsKIGJv b2wJCWVuYWJsZV9pbmRleHNjYW4gPSB0cnVlOwogYm9vbAkJZW5hYmxlX2luZGV4b25seXNjYW4g PSB0cnVlOworYm9vbAkJZW5hYmxlX2luZGV4c2Nhbl9wcmVmZXRjaCA9IHRydWU7CiBib29sCQll bmFibGVfYml0bWFwc2NhbiA9IHRydWU7CiBib29sCQllbmFibGVfdGlkc2NhbiA9IHRydWU7CiBi b29sCQllbmFibGVfc29ydCA9IHRydWU7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9t aXNjL2d1Y19wYXJhbWV0ZXJzLmRhdCBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFt ZXRlcnMuZGF0CmluZGV4IDBhODYyNjkzZi4uMmI1NjIwZjljIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdAorKysgYi9zcmMvYmFja2VuZC91dGls cy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdApAQCAtOTMxLDYgKzkzMSwxMyBAQAogICBib290X3Zh bCA9PiAndHJ1ZScsCiB9LAogCit7IG5hbWUgPT4gJ2VuYWJsZV9pbmRleHNjYW5fcHJlZmV0Y2gn LCB0eXBlID0+ICdib29sJywgY29udGV4dCA9PiAnUEdDX1VTRVJTRVQnLCBncm91cCA9PiAnUVVF UllfVFVOSU5HX01FVEhPRCcsCisgIHNob3J0X2Rlc2MgPT4gJ0VuYWJsZXMgcHJlZmV0Y2hpbmcg Zm9yIGluZGV4IHNjYW5zIGFuZCBpbmRleC1vbmx5IHNjYW5zLicsCisgIGZsYWdzID0+ICdHVUNf RVhQTEFJTicsCisgIHZhcmlhYmxlID0+ICdlbmFibGVfaW5kZXhzY2FuX3ByZWZldGNoJywKKyAg Ym9vdF92YWwgPT4gJ3RydWUnLAorfSwKKwogeyBuYW1lID0+ICdlbmFibGVfbWF0ZXJpYWwnLCB0 eXBlID0+ICdib29sJywgY29udGV4dCA9PiAnUEdDX1VTRVJTRVQnLCBncm91cCA9PiAnUVVFUllf VFVOSU5HX01FVEhPRCcsCiAgIHNob3J0X2Rlc2MgPT4gJ0VuYWJsZXMgdGhlIHBsYW5uZXJcJ3Mg dXNlIG9mIG1hdGVyaWFsaXphdGlvbi4nLAogICBmbGFncyA9PiAnR1VDX0VYUExBSU4nLApkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlIGIv c3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCmluZGV4IGNmMTU1 OTczOC4uMjEzNWVhNTI0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3Rn cmVzcWwuY29uZi5zYW1wbGUKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3Fs LmNvbmYuc2FtcGxlCkBAIC00MjAsNiArNDIwLDcgQEAKICNlbmFibGVfaW5jcmVtZW50YWxfc29y dCA9IG9uCiAjZW5hYmxlX2luZGV4c2NhbiA9IG9uCiAjZW5hYmxlX2luZGV4b25seXNjYW4gPSBv bgorI2VuYWJsZV9pbmRleHNjYW5fcHJlZmV0Y2ggPSBvbgogI2VuYWJsZV9tYXRlcmlhbCA9IG9u CiAjZW5hYmxlX21lbW9pemUgPSBvbgogI2VuYWJsZV9tZXJnZWpvaW4gPSBvbgpkaWZmIC0tZ2l0 IGEvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sIGIvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sCmlu ZGV4IDIyOWY0MTM1My4uMzM2YzYyMWQ1IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvY29uZmln LnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sCkBAIC01NzEyLDYgKzU3MTIsMjIg QEAgQU5ZIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5udW1fc3luYzwvcmVwbGFjZWFi bGU+ICggPHJlcGxhY2VhYmxlIGNsYXNzPSIKICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgIDwvdmFy bGlzdGVudHJ5PgogCisgICAgIDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy1lbmFibGUtaW5kZXhzY2Fu LXByZWZldGNoIiB4cmVmbGFiZWw9ImVuYWJsZV9pbmRleHNjYW5fcHJlZmV0Y2giPgorICAgICAg PHRlcm0+PHZhcm5hbWU+ZW5hYmxlX2luZGV4c2Nhbl9wcmVmZXRjaDwvdmFybmFtZT4gKDx0eXBl PmJvb2xlYW48L3R5cGU+KQorICAgICAgPGluZGV4dGVybT4KKyAgICAgICA8cHJpbWFyeT48dmFy bmFtZT5lbmFibGVfaW5kZXhzY2FuX3ByZWZldGNoPC92YXJuYW1lPiBjb25maWd1cmF0aW9uIHBh cmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgIDwvaW5kZXh0ZXJtPgorICAgICAgPC90ZXJtPgorICAg ICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBFbmFibGVzIG9yIGRpc2FibGVz IHByZWZldGNoaW5nIGZvciBpbmRleCBzY2FuIGFuZCBpbmRleC1vbmx5IHNjYW4KKyAgICAgICAg cGxhbiB0eXBlcy4gIFByZWZldGNoaW5nIGNhbiBpbXByb3ZlIHBlcmZvcm1hbmNlIGJ5IHJlYWRp bmcgdGFibGUgQU0KKyAgICAgICAgcGFnZXMgYWhlYWQgb2Ygd2hlbiB0aGV5IGFyZSBuZWVkZWQg ZHVyaW5nIGluZGV4IHNjYW5zLiAgVGhlIGRlZmF1bHQKKyAgICAgICAgaXMgPGxpdGVyYWw+b248 L2xpdGVyYWw+LgorICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFy bGlzdGVudHJ5PgorCiAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy1lbmFibGUtbWF0ZXJpYWwi IHhyZWZsYWJlbD0iZW5hYmxlX21hdGVyaWFsIj4KICAgICAgIDx0ZXJtPjx2YXJuYW1lPmVuYWJs ZV9tYXRlcmlhbDwvdmFybmFtZT4gKDx0eXBlPmJvb2xlYW48L3R5cGU+KQogICAgICAgPGluZGV4 dGVybT4KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwgYi9kb2Mvc3JjL3Nn bWwvaW5kZXhhbS5zZ21sCmluZGV4IDJiNDg3MjhjNS4uMzdiNzUzNjFlIDEwMDY0NAotLS0gYS9k b2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwK QEAgLTgwNyw5ICs4MDcsMTIgQEAgYW1nZXRiYXRjaCAoSW5kZXhTY2FuRGVzYyBzY2FuLAogICA8 cGFyYT4KICAgIFRoZSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGludGVyZmFjZSBp cyBhbiBhbHRlcm5hdGl2ZSB0bwogICAgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiB0 aGF0IHJldHVybnMgbWF0Y2hpbmcgaW5kZXggZW50cmllcyBpbiBiYXRjaGVzCi0gICByYXRoZXIg dGhhbiBvbmUgYXQgYSB0aW1lLiAgQnkgcmV0dXJuaW5nIGFsbCBtYXRjaGluZyBpbmRleCBlbnRy aWVzIGZyb20gYQotICAgc2luZ2xlIGluZGV4IHBhZ2UgdG9nZXRoZXIsIHRoZSB0YWJsZSBBTSBn YWlucyB2aXNpYmlsaXR5IGludG8gd2hpY2ggdGFibGUKLSAgIGJsb2NrcyB3aWxsIGJlIG5lZWRl ZCBpbiB0aGUgbmVhciBmdXR1cmUuCisgICByYXRoZXIgdGhhbiBvbmUgYXQgYSB0aW1lLiBUaGlz IGVuYWJsZXMgdGhlIHRhYmxlIGFjY2VzcyBtZXRob2QgdG8KKyAgIG9wdGltaXplIHRhYmxlIGJs b2NrIGFjY2VzcyBwYXR0ZXJucyBhbmQgcGVyZm9ybSBJL08gcHJlZmV0Y2hpbmcuCisgICBCeSBy ZXR1cm5pbmcgYWxsIG1hdGNoaW5nIGluZGV4IGVudHJpZXMgZnJvbSBhIHNpbmdsZSBpbmRleCBw YWdlIHRvZ2V0aGVyLAorICAgdGhlIHRhYmxlIEFNIGNhbiByZWFkYWhlYWQgdGhyb3VnaCB0aGUg aW5kZXggYW5kIGlkZW50aWZ5IHdoaWNoIHRhYmxlCisgICBibG9ja3Mgd2lsbCBiZSBuZWVkZWQs IGFsbG93aW5nIHByZWZldGNoaW5nIG9mIHRhYmxlIEFNIHBhZ2VzIGR1cmluZworICAgb3JkZXJl ZCBpbmRleCBzY2Fucy4KICAgPC9wYXJhPgogCiAgIDxwYXJhPgpAQCAtMTAwNSw3ICsxMDA4LDgg QEAgYW11bmd1YXJkYmF0Y2ggKEluZGV4U2NhbkRlc2Mgc2NhbiwKICAgIGZyZWUgdGhlIHBpbnMg YXQgYW4gb3Bwb3J0dW5lIHBvaW50IChmb3IgZXhhbXBsZSB3aGVuIDxmdW5jdGlvbj5hbXJlc2Nh bjwvZnVuY3Rpb24+CiAgICBhbmQvb3IgPGZ1bmN0aW9uPmFtZW5kc2NhbjwvZnVuY3Rpb24+IGFy ZSBjYWxsZWQpLiAgSXQgbXVzdCBhbHNvIGtlZXAgdGhlCiAgICBudW1iZXIgb2YgcmV0YWluZWQg cGlucyBmaXhlZCBhbmQgc21hbGwsIHRvIGF2b2lkIGV4aGF1c3RpbmcgdGhlIGJhY2tlbmQncwot ICAgYnVmZmVyIHBpbiBsaW1pdC4KKyAgIGJ1ZmZlciBwaW4gbGltaXQgKHdoaWNoIGlzIHNoYXJl ZCB3aXRoIHRoZSB0YWJsZSBBTSdzIHJlYWQgc3RyZWFtCisgICBmb3IgaW5kZXggc2NhbiBwcmVm ZXRjaGluZykuCiAgIDwvcGFyYT4KIAogICA8cGFyYT4KQEAgLTEzODAsNiArMTM4NCw2MCBAQCBh bXRyYW5zbGF0ZWNtcHR5cGUgKENvbXBhcmVUeXBlIGNtcHR5cGUsIE9pZCBvcGZhbWlseSwgT2lk IG9wY2ludHlwZSk7CiAgICBvciB2aWNlIHZlcnNhLCBpZiBpdHMgaW50ZXJuYWwgaW1wbGVtZW50 YXRpb24gaXMgdW5zdWl0ZWQgdG8gb25lIEFQSSBvciB0aGUgb3RoZXIuCiAgIDwvcGFyYT4KIAor ICA8c2VjdDIgaWQ9ImluZGV4LXNjYW5uaW5nLWJhdGNoZXMiPgorICAgPHRpdGxlPlRhYmxlIEFN IENvbnNpZGVyYXRpb25zIGZvciBCYXRjaCBTY2FubmluZzwvdGl0bGU+CisKKyAgIDxwYXJhPgor ICAgIFRoaXMgc2VjdGlvbiBpcyBwcmltYXJpbHkgcmVsZXZhbnQgdG8KKyAgICA8bGluayBsaW5r ZW5kPSJ0YWJsZWFtIj50YWJsZSBhY2Nlc3MgbWV0aG9kPC9saW5rPiBhdXRob3JzLgorICAgIFdo ZW4gYW4gaW5kZXggc2NhbiB1c2VzIHRoZSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+ IGludGVyZmFjZSwKKyAgICB0aGUgdGFibGUgQU0gaXMgcmVzcG9uc2libGUgZm9yIG1hbmFnaW5n IHBvc2l0aW9uIHN0YXRlIHdpdGhpbiB0aGUKKyAgICA8c3RydWN0bmFtZT5JbmRleFNjYW5EZXNj PC9zdHJ1Y3RuYW1lPidzCisgICAgPHN0cnVjdGZpZWxkPmJhdGNocmluZ2J1Zjwvc3RydWN0Zmll bGQ+IGFuZCBmb3IgY29udHJvbGxpbmcgd2hlbgorICAgIGJ1ZmZlciBwaW5zIG9uIGluZGV4IHBh Z2VzIGFyZSByZWxlYXNlZC4KKyAgIDwvcGFyYT4KKworICAgPHBhcmE+CisgICAgVGhlIDxzdHJ1 Y3RmaWVsZD5zY2FuUG9zPC9zdHJ1Y3RmaWVsZD4gZmllbGQgd2l0aGluCisgICAgPHN0cnVjdGZp ZWxkPmJhdGNocmluZ2J1Zjwvc3RydWN0ZmllbGQ+IHRyYWNrcyB3aGljaCBiYXRjaCBhbmQgaXRl bSB3aXRoaW4KKyAgICB0aGF0IGJhdGNoIHdpbGwgYmUgcmV0dXJuZWQgbmV4dCB0byB0aGUgZXhl Y3V0b3IuICBUaGUgdGFibGUgQU0gbXVzdCBhZHZhbmNlCisgICAgPHN0cnVjdGZpZWxkPnNjYW5Q b3M8L3N0cnVjdGZpZWxkPiBhcyB0dXBsZXMgYXJlIHJldHVybmVkIGJ5CisgICAgPGZ1bmN0aW9u PnRhYmxlX2luZGV4X2dldG5leHRfc2xvdDwvZnVuY3Rpb24+LiAgVGhlIGNvcmUgY29kZSBtYXkg YWxzbworICAgIG1vZGlmeSB0aGlzIGZpZWxkIGR1cmluZyBvcGVyYXRpb25zIHN1Y2ggYXMgbWFy ay9yZXN0b3JlLgorICAgPC9wYXJhPgorCisgICA8cGFyYT4KKyAgICBUaGUgPHN0cnVjdGZpZWxk PnByZWZldGNoUG9zPC9zdHJ1Y3RmaWVsZD4gZmllbGQgdHJhY2tzIHRoZSBwb3NpdGlvbiB1c2Vk CisgICAgZm9yIEkvTyBwcmVmZXRjaGluZy4gIEl0IGlzIGdlbmVyYWxseSBhZHZhbmNlZCBieSBp bml0aWFsaXppbmcgaXQgZnJvbQorICAgIDxzdHJ1Y3RmaWVsZD5zY2FuUG9zPC9zdHJ1Y3RmaWVs ZD4gd2l0aGluIGEgcmVhZCBzdHJlYW0gY2FsbGJhY2ssIGFsbG93aW5nCisgICAgdGhlIHRhYmxl IEFNIHRvIHByZWZldGNoIHRhYmxlIGJsb2NrcyBwb2ludGVkIHRvIGJ5IGl0ZW1zIHRoYXQgYXJl IHdlbGwKKyAgICBhaGVhZCBvZiB0aGUgY3VycmVudCBzY2FuIHBvc2l0aW9uLiAgSW5pdGlhbGx5 CisgICAgPHN0cnVjdGZpZWxkPnByZWZldGNoUG9zPC9zdHJ1Y3RmaWVsZD4gc3RhcnRzIGF0Cisg ICAgPHN0cnVjdGZpZWxkPnNjYW5Qb3M8L3N0cnVjdGZpZWxkPiwgYnV0IGFzIHRoZSByZWFkIHN0 cmVhbSByYW1wcyB1cCBpdCBjYW4KKyAgICBnZXQgZmFyIGFoZWFkICZtZGFzaDsgc3Bhbm5pbmcg bXVsdGlwbGUgaW5kZXggcGFnZXMgaWYgbmVjZXNzYXJ5IHRvCisgICAgbWFpbnRhaW4gYW4gb3B0 aW1hbCBJL08gcHJlZmV0Y2ggZGlzdGFuY2UgZm9yIHRhYmxlIGJsb2NrIHJlYWRzLiAgQSBtYWpv cgorICAgIGdvYWwgb2YgdGhlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaW50ZXJm YWNlIGlzIHRvIGFsbG93IHRoZQorICAgIHRhYmxlIEFNIHRvIHByZWZldGNoIHdpdGhvdXQgYmVp bmcgbGltaXRlZCB0byBpdGVtcyBmcm9tIHRoZSBjdXJyZW50CisgICAgPHN0cnVjdGZpZWxkPnNj YW5Qb3M8L3N0cnVjdGZpZWxkPiBiYXRjaCdzIGluZGV4IGxlYWYgcGFnZS4KKyAgIDwvcGFyYT4K KworICAgPHBhcmE+CisgICAgQm90aCA8c3RydWN0ZmllbGQ+c2NhblBvczwvc3RydWN0ZmllbGQ+ IGFuZAorICAgIDxzdHJ1Y3RmaWVsZD5wcmVmZXRjaFBvczwvc3RydWN0ZmllbGQ+IGFyZSBjb250 cm9sbGVkIGJ5IHRoZSB0YWJsZSBBTSBhbmQKKyAgICBjb3JlIGNvZGU7IGluZGV4IGFjY2VzcyBt ZXRob2RzIHNob3VsZCBub3QgYWNjZXNzIG9yIG1hbmlwdWxhdGUgdGhlc2UKKyAgICBmaWVsZHMu ICBTZWUgdGhlIDxmaWxlbmFtZT5zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC88L2ZpbGVuYW1lPgor ICAgIGltcGxlbWVudGF0aW9uIGZvciBhIHJlZmVyZW5jZSBleGFtcGxlLgorICAgPC9wYXJhPgor CisgICA8cGFyYT4KKyAgICBGb3IgZGV0YWlscyBvbiBidWZmZXIgcGluIG1hbmFnZW1lbnQgZHVy aW5nIGJhdGNoIHNjYW5zLCBpbmNsdWRpbmcgdGhlCisgICAgPHN0cnVjdGZpZWxkPmJhdGNoSW1t ZWRpYXRlVW5ndWFyZDwvc3RydWN0ZmllbGQ+IHBvbGljeSBhbmQgdGhlCisgICAgPGZ1bmN0aW9u PmFtdW5ndWFyZGJhdGNoPC9mdW5jdGlvbj4gY2FsbGJhY2ssIHNlZQorICAgIDx4cmVmIGxpbmtl bmQ9ImluZGV4LWxvY2tpbmciLz4uCisgICA8L3BhcmE+CisKKyAgPC9zZWN0Mj4KKwogIDwvc2Vj dDE+CiAKICA8c2VjdDEgaWQ9ImluZGV4LWxvY2tpbmciPgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9z Z21sL3RhYmxlYW0uc2dtbCBiL2RvYy9zcmMvc2dtbC90YWJsZWFtLnNnbWwKaW5kZXggOWNjZjVi NzM5Li44ZTcwYTYxOTYgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC90YWJsZWFtLnNnbWwKKysr IGIvZG9jL3NyYy9zZ21sL3RhYmxlYW0uc2dtbApAQCAtMTI5LDYgKzEyOSwxNCBAQCBteV90YWJs ZWFtX2hhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKICAgb3B0aW9uYWwpLCB0aGUgYmxvY2sgbnVt YmVyIG5lZWRzIHRvIHByb3ZpZGUgbG9jYWxpdHkuCiAgPC9wYXJhPgogCisgPHBhcmE+CisgIFRh YmxlIGFjY2VzcyBtZXRob2RzIGNhbiBzdXBwb3J0IG9yZGVyZWQgaW5kZXggc2NhbnMgdXNpbmcg dGhlCisgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaW50ZXJmYWNlLiBTZWUgYWxz bworICA8eHJlZiBsaW5rZW5kPSJpbmRleC1zY2FubmluZy1iYXRjaGVzIi8+IGZvciBkZXRhaWxz IG9uIGludGVyZmFjaW5nIHdpdGgKKyAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBp bmRleCBhY2Nlc3MgbWV0aG9kcywgYW5kIG1hbmFnaW5nIHRoZQorICBzY2FuJ3MgcG9zaXRpb24u CisgPC9wYXJhPgorCiAgPHBhcmE+CiAgIEZvciBjcmFzaCBzYWZldHksIGFuIEFNIGNhbiB1c2Ug cG9zdGdyZXMnIDxsaW5rCiAgIGxpbmtlbmQ9IndhbCI+PGFjcm9ueW0+V0FMPC9hY3JvbnltPjwv bGluaz4sIG9yIGEgY3VzdG9tIGltcGxlbWVudGF0aW9uLgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9zeXN2aWV3cy5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L3N5c3ZpZXdzLm91dAppbmRleCAxMzJiNTZhNTguLjMyYmMzZGQzZSAxMDA2NDQKLS0tIGEvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zeXN2aWV3cy5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9zeXN2aWV3cy5vdXQKQEAgLTE2Niw2ICsxNjYsNyBAQCBzZWxlY3QgbmFtZSwg c2V0dGluZyBmcm9tIHBnX3NldHRpbmdzIHdoZXJlIG5hbWUgbGlrZSAnZW5hYmxlJSc7CiAgZW5h YmxlX2luY3JlbWVudGFsX3NvcnQgICAgICAgIHwgb24KICBlbmFibGVfaW5kZXhvbmx5c2NhbiAg ICAgICAgICAgfCBvbgogIGVuYWJsZV9pbmRleHNjYW4gICAgICAgICAgICAgICB8IG9uCisgZW5h YmxlX2luZGV4c2Nhbl9wcmVmZXRjaCAgICAgIHwgb24KICBlbmFibGVfbWF0ZXJpYWwgICAgICAg ICAgICAgICAgfCBvbgogIGVuYWJsZV9tZW1vaXplICAgICAgICAgICAgICAgICB8IG9uCiAgZW5h YmxlX21lcmdlam9pbiAgICAgICAgICAgICAgIHwgb24KQEAgLTE4MCw3ICsxODEsNyBAQCBzZWxl Y3QgbmFtZSwgc2V0dGluZyBmcm9tIHBnX3NldHRpbmdzIHdoZXJlIG5hbWUgbGlrZSAnZW5hYmxl JSc7CiAgZW5hYmxlX3NlcXNjYW4gICAgICAgICAgICAgICAgIHwgb24KICBlbmFibGVfc29ydCAg ICAgICAgICAgICAgICAgICAgfCBvbgogIGVuYWJsZV90aWRzY2FuICAgICAgICAgICAgICAgICB8 IG9uCi0oMjUgcm93cykKKygyNiByb3dzKQogCiAtLSBUaGVyZSBhcmUgYWx3YXlzIHdhaXQgZXZl bnQgZGVzY3JpcHRpb25zIGZvciB2YXJpb3VzIHR5cGVzLiAgSW5qZWN0aW9uUG9pbnQKIC0tIG1h eSBiZSBwcmVzZW50IG9yIGFic2VudCwgZGVwZW5kaW5nIG9uIGhpc3Rvcnkgc2luY2UgbGFzdCBw b3N0bWFzdGVyIHN0YXJ0LgotLSAKMi41My4wCgo= --000000000000f287f9064e6de93c Content-Type: application/octet-stream; name="v20-0005-heapam-Keep-buffer-pins-across-index-rescans.patch" Content-Disposition: attachment; filename="v20-0005-heapam-Keep-buffer-pins-across-index-rescans.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mngmwp6b13 RnJvbSBhYzQ5YmMyODgwNDNhMjhlMTdkMWQwNTUzZjJhM2Y0Mzg4MTY5ZmFkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFRo dSwgMjYgTWFyIDIwMjYgMTg6NDU6MjcgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyMCAwNS8xN10g aGVhcGFtOiBLZWVwIGJ1ZmZlciBwaW5zIGFjcm9zcyBpbmRleCByZXNjYW5zLgoKQXZvaWQgZHJv cHBpbmcgdGhlIGhlYXAgcGFnZSBwaW4gKHhzX2NidWYpIGFuZCB2aXNpYmlsaXR5IG1hcCBwaW4K KHhzX3ZtYnVmZmVyKSBkdXJpbmcgaGVhcGFtX2luZGV4X2ZldGNoX3Jlc2V0LiAgUmV0YWluaW5n IHRoZXNlIHBpbnMKc2F2ZXMgY3ljbGVzIGR1cmluZyB0aWdodCBuZXN0ZWQgbG9vcCBqb2lucyBh bmQgbWVyZ2Ugam9pbnMgdGhhdApmcmVxdWVudGx5IHJlc3RvcmUgYSBzYXZlZCBtYXJrLCBzaW5j ZSB0aGUgbmV4dCB0dXBsZSBmZXRjaGVkIGFmdGVyIGEKcmVzY2FuIG9mdGVuIGZhbGxzIG9uIHRo ZSBzYW1lIGhlYXAgcGFnZS4gIEl0IGNhbiBhbHNvIGF2b2lkIHJlcGVhdGVkCnBpbm5pbmcgYW5k IHVucGlubmluZyBvZiB0aGUgc2FtZSBidWZmZXIgd2hlbiByZXNjYW5zIGhhcHBlbiB0byByZXZp c2l0CnRoZSBzYW1lIHBhZ2UuCgpOb3RlIHRoYXQgbm90IGRyb3BwaW5nIHhzX3ZtYnVmZmVyIG9u IGEgcmVzY2FuIGlzbid0IGEgbmV3IGJlaGF2aW9yCihpdCdzIGFsd2F5cyB3b3JrZWQgdGhpcyB3 YXkpLiAgUmVjZW50IGNvbW1pdCBYWFgsIHdoaWNoIGFkZGVkIGEgbmV3CnNsb3QtYmFzZWQgaW50 ZXJmYWNlLCBjaGFuZ2VkIHRoYXQgYmVoYXZpb3Igd2hlbiBpdCBtb3ZlZCBWTSBwaW4KbWFuYWdl bWVudCBvdXQgb2YgdGhlIGNvcmUgZXhlY3V0b3IuICBUaGlzIGNvbW1pdCByZXN0b3JlcyB0aGF0 IGJlaGF2aW9yCihhbmQgaGFzIGhlYXBhbSB0cmVhdCBoZWFwIHBhZ2UgcGlucyBpbiB0aGUgc2Ft ZSB3YXksIHdoaWNoIF9pc18gYSBuZXcKYmVoYXZpb3IpLgoKUHJlcGFyYXRpb24gZm9yIGFuIHVw Y29taW5nIHBhdGNoIHRoYXQgd2lsbCBhZGQgdGhlIGFtZ2V0YmF0Y2gKaW50ZXJmYWNlIHRvIGVu YWJsZSBvcHRpbWl6YXRpb25zIHN1Y2ggYXMgSS9PIHByZWZldGNoaW5nLgoKQXV0aG9yOiBQZXRl ciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+ClJldmlld2VkLUJ5OiBBbmRyZXMgRnJldW5kIDxhbmRy ZXNAYW5hcmF6ZWwuZGU+CkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vQ0FIMi1Xej1n PUpUU3lEQjRVdEI1c3UyWmN2c1M3VmJQK1pNdnZhRzZBQm9DYitzOEx3QG1haWwuZ21haWwuY29t Ci0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2luZGV4c2Nhbi5jIHwgMjYgKysr KysrKysrKysrLS0tLS0tLS0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYyAg ICAgICAgIHwgIDYgKystLS0KIDIgZmlsZXMgY2hhbmdlZCwgMTcgaW5zZXJ0aW9ucygrKSwgMTUg ZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFt X2luZGV4c2Nhbi5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2luZGV4c2Nhbi5j CmluZGV4IDQ1OWI2OWVlZS4uYjI2OWI4MDJlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nl c3MvaGVhcC9oZWFwYW1faW5kZXhzY2FuLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAv aGVhcGFtX2luZGV4c2Nhbi5jCkBAIC02NSwxOCArNjUsMTQgQEAgaGVhcGFtX2luZGV4X2ZldGNo X3Jlc2V0KEluZGV4U2NhbkRlc2Mgc2NhbikKIHsKIAlJbmRleEZldGNoSGVhcERhdGEgKmhzY2Fu ID0gKEluZGV4RmV0Y2hIZWFwRGF0YSAqKSBzY2FuLT54c19oZWFwZmV0Y2g7CiAKLQlpZiAoQnVm ZmVySXNWYWxpZChoc2Nhbi0+eHNfY2J1ZikpCi0JewotCQlSZWxlYXNlQnVmZmVyKGhzY2FuLT54 c19jYnVmKTsKLQkJaHNjYW4tPnhzX2NidWYgPSBJbnZhbGlkQnVmZmVyOwotCQloc2Nhbi0+eHNf YmxrID0gSW52YWxpZEJsb2NrTnVtYmVyOwotCX0KKwkvKiBSZXNldHMgYXJlIGEgbm8tb3AgKi8K Kwkodm9pZCkgaHNjYW47CiAKLQlpZiAoQnVmZmVySXNWYWxpZChoc2Nhbi0+eHNfdm1idWZmZXIp KQotCXsKLQkJUmVsZWFzZUJ1ZmZlcihoc2Nhbi0+eHNfdm1idWZmZXIpOwotCQloc2Nhbi0+eHNf dm1idWZmZXIgPSBJbnZhbGlkQnVmZmVyOwotCX0KKwkvKgorCSAqIERlbGliZXJhdGVseSBhdm9p ZCBkcm9wcGluZyBwaW5zIG5vdyBoZWxkIGluIHhzX2NidWYgYW5kIHhzX3ZtYnVmZmVyLgorCSAq IFRoaXMgc2F2ZXMgY3ljbGVzIGR1cmluZyBjZXJ0YWluIHRpZ2h0IG5lc3RlZCBsb29wIGpvaW5z IChpdCBjYW4gYXZvaWQKKwkgKiByZXBlYXRlZCBwaW5uaW5nIGFuZCB1bnBpbm5pbmcgb2YgdGhl IHNhbWUgYnVmZmVyIGFjcm9zcyByZXNjYW5zKS4KKwkgKi8KIH0KIAogdm9pZApAQCAtODQsNyAr ODAsMTMgQEAgaGVhcGFtX2luZGV4X2ZldGNoX2VuZChJbmRleFNjYW5EZXNjIHNjYW4pCiB7CiAJ SW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiA9IChJbmRleEZldGNoSGVhcERhdGEgKikgc2Nhbi0+ eHNfaGVhcGZldGNoOwogCi0JaGVhcGFtX2luZGV4X2ZldGNoX3Jlc2V0KHNjYW4pOworCS8qIGRy b3AgcGluIGlmIHRoZXJlJ3MgYSBwaW5uZWQgaGVhcCBwYWdlICovCisJaWYgKEJ1ZmZlcklzVmFs aWQoaHNjYW4tPnhzX2NidWYpKQorCQlSZWxlYXNlQnVmZmVyKGhzY2FuLT54c19jYnVmKTsKKwor CS8qIGRyb3AgcGluIGlmIHRoZXJlJ3MgYSBwaW5uZWQgdmlzaWJpbGl0eSBtYXAgcGFnZSAqLwor CWlmIChCdWZmZXJJc1ZhbGlkKGhzY2FuLT54c192bWJ1ZmZlcikpCisJCVJlbGVhc2VCdWZmZXIo aHNjYW4tPnhzX3ZtYnVmZmVyKTsKIAogCXBmcmVlKGhzY2FuKTsKIH0KZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5k ZXgvaW5kZXhhbS5jCmluZGV4IDVkNWU2YjZhOS4uZjA4YmM5NmJkIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9p bmRleC9pbmRleGFtLmMKQEAgLTM5MCw3ICszOTAsNyBAQCBpbmRleF9yZXNjYW4oSW5kZXhTY2Fu RGVzYyBzY2FuLAogCUFzc2VydChua2V5cyA9PSBzY2FuLT5udW1iZXJPZktleXMpOwogCUFzc2Vy dChub3JkZXJieXMgPT0gc2Nhbi0+bnVtYmVyT2ZPcmRlckJ5cyk7CiAKLQkvKiBSZWxlYXNlIHJl c291cmNlcyAobGlrZSBidWZmZXIgcGlucykgZnJvbSB0YWJsZSBhY2Nlc3NlcyAqLworCS8qIHJl c2V0IHRhYmxlIEFNIHN0YXRlIGZvciByZXNjYW4gKi8KIAlpZiAoc2Nhbi0+eHNfaGVhcGZldGNo KQogCQl0YWJsZV9pbmRleF9mZXRjaF9yZXNldChzY2FuKTsKIApAQCAtNDY3LDcgKzQ2Nyw3IEBA IGluZGV4X3Jlc3RycG9zKEluZGV4U2NhbkRlc2Mgc2NhbikKIAlTQ0FOX0NIRUNLUzsKIAlDSEVD S19TQ0FOX1BST0NFRFVSRShhbXJlc3RycG9zKTsKIAotCS8qIHJlbGVhc2UgcmVzb3VyY2VzIChs aWtlIGJ1ZmZlciBwaW5zKSBmcm9tIHRhYmxlIGFjY2Vzc2VzICovCisJLyogcmVzZXQgdGFibGUg QU0gc3RhdGUgZm9yIHJlc3RvcmluZyB0aGUgbWFya2VkIHBvc2l0aW9uICovCiAJaWYgKHNjYW4t PnhzX2hlYXBmZXRjaCkKIAkJdGFibGVfaW5kZXhfZmV0Y2hfcmVzZXQoc2Nhbik7CiAKQEAgLTY2 Nyw3ICs2NjcsNyBAQCBpbmRleF9nZXRuZXh0X3RpZChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5E aXJlY3Rpb24gZGlyZWN0aW9uKQogCS8qIElmIHdlJ3JlIG91dCBvZiBpbmRleCBlbnRyaWVzLCB3 ZSdyZSBkb25lICovCiAJaWYgKCFmb3VuZCkKIAl7Ci0JCS8qIHJlbGVhc2UgcmVzb3VyY2VzIChs aWtlIGJ1ZmZlciBwaW5zKSBmcm9tIHRhYmxlIGFjY2Vzc2VzICovCisJCS8qIHJlc2V0IHRhYmxl IEFNIHN0YXRlICovCiAJCWlmIChzY2FuLT54c19oZWFwZmV0Y2gpCiAJCQl0YWJsZV9pbmRleF9m ZXRjaF9yZXNldChzY2FuKTsKIAotLSAKMi41My4wCgo= --000000000000f287f9064e6de93c Content-Type: application/octet-stream; name="v20-0006-Add-interfaces-that-enable-index-prefetching.patch" Content-Disposition: attachment; filename="v20-0006-Add-interfaces-that-enable-index-prefetching.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mngmwp6812 RnJvbSA5MjhhYTk2NjRiYzRkZWFjYTI1ZmE4NDBmOGM2N2YwYjM4MTZmZWIzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFdl ZCwgMjUgTWFyIDIwMjYgMTY6NDg6NDMgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyMCAwNi8xN10g QWRkIGludGVyZmFjZXMgdGhhdCBlbmFibGUgaW5kZXggcHJlZmV0Y2hpbmcuCgpBZGQgYSBuZXcg YW1nZXRiYXRjaCBpbmRleCBBTSBpbnRlcmZhY2UgdGhhdCBhbGxvd3MgaW5kZXggYWNjZXNzIG1l dGhvZHMKdG8gaW1wbGVtZW50IHBsYWluIGluZGV4IHNjYW5zIGFuZCBpbmRleC1vbmx5IHNjYW5z IHRoYXQgcmV0dXJuIGluZGV4CmVudHJpZXMgaW4gYmF0Y2hlcyBjb21wcmlzaW5nIGFsbCBtYXRj aGluZyBpdGVtcyBmcm9tIGFuIGluZGV4IHBhZ2UsCnJhdGhlciB0aGFuIG9uZSBtYXRjaCBhdCBh IHRpbWUuICBBbHNvIHN3aXRjaCBuYnRyZWUgb3ZlciBmcm9tCmFtZ2V0dHVwbGUgdG8gdGhlIG5l dyBhbWdldGJhdGNoIGludGVyZmFjZS4KClRoaXMgZXhwYW5kcyB0aGUgc2xvdC1iYXNlZCB0YWJs ZSBBTSBpbnRlcmZhY2UgYWRkZWQgYnkgY29tbWl0IEZJWE1FCmZyb20gdHdvIGNhbGxiYWNrcyAo Zm9yIGFtZ2V0dHVwbGUgcGxhaW4gYW5kIGluZGV4LW9ubHkgc2NhbnMpIHRvIGZvdXIsCmFkZGlu ZyBhbWdldGJhdGNoIHZhcmlhbnRzIGZvciBib3RoIHNjYW4gdHlwZXMuICBUaGUgYW1nZXRiYXRj aAppbnRlcmZhY2UgaXMgdGlnaHRseSBjb3VwbGVkIHdpdGggdGhpcyBhcHByb2FjaCB0byBpbmRl eCBzY2FuczogdGhlCnRhYmxlIEFNIGNhbiBhcHBseSBrbm93bGVkZ2Ugb2Ygd2hpY2ggVElEcyB3 aWxsIGJlIHJldHVybmVkIHRvIHRoZSBzY2FuCmluIHRoZSBuZWFyIGZ1dHVyZSB0byBwZXJmb3Jt IEkvTyBwcmVmZXRjaGluZy4gIFByZWZldGNoaW5nIHdpbGwgYmUKYWRkZWQgYnkgYW4gdXBjb21p bmcgY29tbWl0LgoKV2l0aCBhbWdldGJhdGNoLCBhIHNjYW4tbGV2ZWwgcG9saWN5IGRldGVybWlu ZXMgd2hldGhlciBlYWNoIGJhdGNoJ3MKaW5kZXggcGFnZSBidWZmZXIgcGluIGlzIGRyb3BwZWQg ZWFnZXJseSBieSB0aGUgaW5kZXggQU0gKGZvciBwbGFpbgpzY2FucyB3aXRoIGFuIE1WQ0Mgc25h cHNob3QsIHdoZXJlIHRoZSBzbmFwc2hvdCBpdHNlbGYgcHJldmVudHMgVElECnJlY3ljbGluZyBw cm9ibGVtcykgb3IgcmV0YWluZWQgYXMgYW4gaW50ZXJsb2NrIGFnYWluc3QgY29uY3VycmVudCBU SUQKcmVjeWNsaW5nIGJ5IFZBQ1VVTS4gIFRoZSBpbnRlcmxvY2sgaXMgcmV0YWluZWQgZm9yIG5v bi1NVkNDIHNjYW5zIGFuZApmb3IgaW5kZXgtb25seSBzY2FucywgYW5kIGlzIGRyb3BwZWQgYnkg dGhlIHRhYmxlIEFNIHZpYSB0aGUgbmV3CmFtdW5ndWFyZGJhdGNoIGNhbGxiYWNrIHdoZW4gaXQg aXMgc2FmZSB0byBkbyBzby4gKEFjdHVhbGx5LCBpbmRleCBBTXMKYXJlIHVzdWFsbHkgYWJsZSB0 byBkcm9wIHRoZSBwaW4gYXQgdGhlIHNhbWUgdGltZSB0aGF0IHRoZXkgcmVsZWFzZSB0aGUKbG9j ay4gIEluIHByYWN0aWNlLCB0aGUgYW11bmd1YXJkYmF0Y2ggY2FsbGJhY2sgaXMgb25seSByZWFs bHkgbmVlZGVkCmR1cmluZyBpbmRleC1vbmx5IHNjYW5zLCB3aGVyZSBkcm9wcGluZyB0aGUgcGlu IGludGVybG9jayBtaWdodCBuZWVkIHRvCmJlIGRlbGF5ZWQgZXZlciBzbyBzbGlnaHRseSwgYXMg ZXhwbGFpbmVkIGJlbG93LikKClRoaXMgZXh0ZW5kcyB0aGUgZHJvcFBpbiBtZWNoYW5pc20gYWRk ZWQgdG8gbmJ0cmVlIGJ5IGNvbW1pdCAyZWQ1Yjg3ZiwKYW5kIGdlbmVyYWxpemVzIGl0IHRvIHdv cmsgd2l0aCBhbGwgaW5kZXggQU1zIHRoYXQgc3VwcG9ydCB0aGUgbmV3CmFtZ2V0YmF0Y2ggaW50 ZXJmYWNlIChMUF9ERUFEIG1hcmtpbmcgb2YgaW5kZXggZW50cmllcyBtdXN0IGJlIHBlcmZvcm1l ZApieSBpbXBsZW1lbnRpbmcgdGhlIG5ldyBhbWtpbGxpdGVtc2JhdGNoIGNhbGxiYWNrLCB3aGlj aCBoYXMgYQpkb2N1bWVudGVkIGNvbnRyYWN0IGRlc2NyaWJpbmcgaG93IGluZGV4IEFNcyBtdXN0 IHJlYXNvbiBhYm91dApjb25jdXJyZW50IFRJRCByZWN5Y2xpbmcpLiAgU2NhbnMgY2FuIGFsd2F5 cyBzYWZlbHkgZHJvcCBpbmRleCBwYWdlIHBpbnMKZWFnZXJseSwgcHJvdmlkZWQgdGhlIHNjYW4g dXNlcyBhbiBNVkNDIHNuYXBzaG90ICh1bmxpa2UgdGhlIG5idHJlZQpkcm9wUGluIG9wdGltaXph dGlvbiwgd2hpY2ggaGFkIG5vIHdheSBvZiBkb2luZyB0aGlzIHNhZmVseSBkdXJpbmcKaW5kZXgt b25seSBzY2FucyBkdWUgdG8gaG93IGFtZ2V0dHVwbGUgd29ya3MsIGFuZCBvbmx5IGdhaW5lZCBz dXBwb3J0CmZvciBzY2FucyBvZiB1bmxvZ2dlZCByZWxhdGlvbnMgaW4gcmVjZW50IGNvbW1pdCA4 YTg3OTExOSkuCgpUaGUgb2xkIGFtbWFya3BvcyBhbmQgYW1yZXN0cnBvcyBpbmRleCBBTSBjYWxs YmFja3MgYXJlIHJlbW92ZWQuICBXaXRoCmFtZ2V0YmF0Y2gsIG1hcmsvcmVzdG9yZSBvZiBzY2Fu IHBvc2l0aW9ucyBpcyBtYW5hZ2VkIGJ5IHRoZSB0YWJsZSBBTSwKd2l0aCBjb29wZXJhdGlvbiBm cm9tIGluZGV4YmF0Y2guYyB1dGlsaXR5IGZ1bmN0aW9ucywgcmF0aGVyIHRoYW4gYmVpbmcKZGVs ZWdhdGVkIHRvIHRoZSBpbmRleCBBTS4gIEFsbCBhbWdldGJhdGNoLWNhcGFibGUgaW5kZXggQU1z IGluaGVyZW50bHkKc3VwcG9ydCBtYXJrL3Jlc3RvcmUgd2l0aG91dCBuZWVkaW5nIHRvIGltcGxl bWVudCBpdCB0aGVtc2VsdmVzLiAgVGFibGUKQU1zIGFyZSByZXF1aXJlZCB0byBzdXBwb3J0IHRo ZSBuZXcgdGFibGVfaW5kZXhfZmV0Y2hfcmVzdHJwb3MgaW50ZXJmYWNlLgoKQW4gdXBjb21pbmcg Y29tbWl0IHRoYXQgd2lsbCBhZGQgaW5kZXggcHJlZmV0Y2hpbmcgd2lsbCB1c2UgYSByZWFkCnN0 cmVhbSB0byByZWFkIGhlYXAgcGFnZXMgZHVyaW5nIGluZGV4IHNjYW5zLiAgUmVhZCBzdHJlYW0g aXMgY2FyZWZ1bCB0bwpsaW1pdCBob3cgbWFueSB0aGluZ3MgaXQgcGlucywgbGVzdCB3ZSBydW4g aW50byBwcm9ibGVtcyBkdWUgdG8gaGF2aW5nCnRvbyBtYW55IGJ1ZmZlcnMgcGlubmVkLiAgU2lt cGx5IG5ldmVyIGhvbGRpbmcgb24gdG8gaW5kZXggcGFnZSBidWZmZXIKcGlucyBncmVhdGx5IHNp bXBsaWZpZXMgcmVzb3VyY2UgbWFuYWdlbWVudCBmb3IgaW5kZXggcHJlZmV0Y2hpbmc7CnRoZXJl J3Mgbm8gcmlzayBvZiB1bmludGVuZGVkIGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoZSByZWFkIHN0 cmVhbSBhbmQKaW5kZXggQU0uICBUaGUgb25seSBkb3duc2lkZSBpcyB0aGF0IHdlIGNhbm5vdCBz dXBwb3J0IHByZWZldGNoaW5nCmR1cmluZyBzY2FucyB0aGF0IHVzZSBhIG5vbi1NVkNDIHNuYXBz aG90LCB3aGljaCBzZWVtcyBxdWl0ZSBhY2NlcHRhYmxlLgoKSW4gcHJhY3RpY2UsIGhlYXBhbSBk b2Vzbid0IGRyb3AgZWFjaCBiYXRjaCdzIGluZGV4IHBhZ2UgYnVmZmVyIHBpbiBhdAp0aGUgZWFy bGllc3Qgb3Bwb3J0dW5pdHkgZHVyaW5nIGluZGV4LW9ubHkgc2NhbnMuICBUaGlzIHdhcyBkZWVt ZWQKbmVjZXNzYXJ5IHRvIGF2b2lkIHJlZ3Jlc3NpbmcgaW5kZXgtb25seSBzY2FucyB3aXRoIGEg TElNSVQsIGluCnBhcnRpY3VsYXIgd2l0aCBuZXN0bG9vcCBhbnRpLWpvaW5zIGFuZCBuZXN0bG9v cCBzZW1pLWpvaW5zOyBlYWdlcmx5CmxvYWRpbmcgYWxsIHRoZSB2aXNpYmlsaXR5IGluZm9ybWF0 aW9uIHVwIGZyb250IHJlZ3Jlc3NlZCBzdWNoIHF1ZXJpZXMuClRoZSBuZXcgYW1nZXRiYXRjaCBp bnRlcmZhY2UgZ2l2ZXMgdGFibGUgQU1zIHRoZSBhdXRob3JpdHkgdG8gZGVjaWRlCndoZW4gdG8g ZHJvcCBpbmRleCBwYWdlIHBpbnMvdW5ndWFyZCBiYXRjaGVzLCBzbyB0aGlzIGNhbiBiZSBjb25z aWRlcmVkCmEgaGVhcGFtIGltcGxlbWVudGF0aW9uIGRldGFpbCAoaW5kZXggQU1zIGRvbid0IG5l ZWQgdG8ga25vdyBhYm91dCBpdCkuClRoaXMgc2NoZW1lIHN0aWxsIGFsbG93cyBpbmRleCBwcmVm ZXRjaGluZyB0byBjb25zaXN0ZW50bHkgaG9sZCBubyBtb3JlCnRoYW4gb25lIGJhdGNoIGluZGV4 IHBhZ2UgcGluIGF0IGEgdGltZSwgZXZlbiB3aGVuIGFuIGluZGV4LW9ubHkgc2NhbgoodGhhdCBt dXN0IHBlcmZvcm0gc29tZSBoZWFwIGZldGNoZXMpIGhvbGRzIG9wZW4gc2V2ZXJhbCBpbmRleCBi YXRjaGVzCmF0IG9uY2UgaW4gb3JkZXIgdG8gbWFpbnRhaW4gYW4gYWRlcXVhdGUgcHJlZmV0Y2gg ZGlzdGFuY2UuCgpJbmRleCBhY2Nlc3MgbWV0aG9kcyB0aGF0IHN1cHBvcnQgcGxhaW4gaW5kZXgg c2NhbnMgbXVzdCBub3cgaW1wbGVtZW50CmVpdGhlciB0aGUgYW1nZXRiYXRjaCBpbnRlcmZhY2Ug b3IgdGhlIGFtZ2V0dHVwbGUgaW50ZXJmYWNlIChub3QgYm90aCkuCkFuIHVwY29taW5nIHBhdGNo IHdpbGwgYWRkIHN1cHBvcnQgZm9yIGFtZ2V0YmF0Y2ggdG8gdGhlIGhhc2ggaW5kZXggQU0uCkJ1 dCB0aGUgYW1nZXR0dXBsZSBpbnRlcmZhY2Ugd2lsbCBzdGlsbCBiZSB1c2VkIGJ5IHRoZSBHaVNU IGFuZCBTUC1HaVNUCmluZGV4IEFNcyBmb3Igbm93LiAgQm90aCBzaGFyZSBhIHNldCBvZiBwcm9i bGVtcyB0aGF0IG1ha2UgaXQgdW5jbGVhcgpob3cgdG8gZ28gYWJvdXQgYWRkaW5nIHN1cHBvcnQu CgpCb3RoIEFNcyByZWNvbnN0cnVjdCBpbmRleCBkYXRhIGFzIEhlYXBUdXBsZXMgdmlhIGhlYXBf Zm9ybV90dXBsZSBkdXJpbmcKaW5kZXgtb25seSBzY2FucywgcGVyZm9ybWluZyByZXRhaWwgcGFs bG9jIGFsbG9jYXRpb25zIHRoYXQgYXJlCmluY29tcGF0aWJsZSB3aXRoIHRoZSBmbGF0LCBmaXhl ZC1zaXplLCByZWN5Y2xhYmxlIHBlci1iYXRjaCBtZW1vcnkKbW9kZWwgdGhhdCBhbWdldGJhdGNo J3MgY3VyclR1cGxlcyB3b3Jrc3BhY2UgcmVxdWlyZXMuICBNb3Jlb3ZlciwgYm90aApBTXMgaGF2 ZSBrbm93biBidWdzIGludm9sdmluZyBidWZmZXIgcGluIG1hbmFnZW1lbnQgZHVyaW5nIGluZGV4 LW9ubHkKc2NhbnM6IHRoZXkgcmVsZWFzZSBpbmRleCBsZWFmIHBhZ2UgcGlucyBpbW1lZGlhdGVs eSwgcmF0aGVyIHRoYW4KaG9sZGluZyB0aGVtIGFzIGFuIGludGVybG9jayBhZ2FpbnN0IGNvbmN1 cnJlbnQgVElEIHJlY3ljbGluZyBieSBWQUNVVU0sCmNyZWF0aW5nIGEgcmFjZSBjb25kaXRpb24g aW4gd2hpY2ggVkFDVVVNIGNhbiByZW1vdmUgYSBoZWFwIHR1cGxlIGFuZAp0aGVuIG1hcmsgaXRz IHBhZ2UgYWxsLXZpc2libGUgd2hpbGUgdGhlIGluZGV4LW9ubHkgc2NhbiBzdGlsbCBob2xkcyBh CnJlZmVyZW5jZSB0byB0aGUgbm93LXJlY3ljbGVkIFRJRCBbMV0uICBUaGVzZSBpbmRleCBBTXMg Y2Fubm90IGFkb3B0CmFtZ2V0YmF0Y2ggd2l0aG91dCBmaXJzdCBmaXhpbmcgdGhlIHBpbi1oYW5k bGluZyBkZWZpY2llbmN5IHRoYXQgdGhleQphbHJlYWR5IGhhdmUgdW5kZXIgYW1nZXR0dXBsZSAo aXQncyBub3QgY2xlYXIgaG93IHRvIGZpeCB0aGUgcHJvYmxlbQp3aXRoaW4gdGhlIGNvbmZpbmVz IG9mIHRoZSBjdXJyZW50IGFtZ2V0dHVwbGUgZGVzaWduLCBsZXQgYWxvbmUgaW4gYSB3YXkKdGhh dCdzIGNvbXBhdGlibGUgd2l0aCBhbWdldGJhdGNoKS4KClsxXSBodHRwczovL3Bvc3Rnci5lcy9t L0NBSDItV3olM0RqamlOTDlGQ2g4QzFMLUdVSDE1ZjRXRlRXdWIyeCUyQl9OdWNuZ2NERGNIS3cl NDBtYWlsLmdtYWlsLmNvbQoKQXV0aG9yOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K QXV0aG9yOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+ClJldmlld2VkLUJ5OiBBbmRyZXMg RnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+ClJldmlld2VkLUJ5OiBUaG9tYXMgTXVucm8gPHRo b21hcy5tdW5yb0BnbWFpbC5jb20+CkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vY2Y4 NWY0NmYtYjAyZi0wNWIyLTUyNDgtNTAwMGI4OTRlYmFiQGVudGVycHJpc2VkYi5jb20KRGlzY3Vz c2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9lZmFjMzIzOC02ZjM0LTQxZWEtYTM5My0yNmNjMDQ0 MWI1MDYlNDB2b25kcmEubWUKLS0tCiBzcmMvaW5jbHVkZS9hY2Nlc3MvYW1hcGkuaCAgICAgICAg ICAgICAgICAgICAgfCAgMjcgKy0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5oICAgICAgICAg ICAgICAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmggICAgICAgICAg ICAgICAgICAgfCAgNDQgKy0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9pbmRleGJhdGNoLmggICAgICAg ICAgICAgICB8IDE3NSArKysrCiBzcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmggICAgICAgICAg ICAgICAgICAgfCAxODQgKystLS0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmggICAgICAg ICAgICAgICAgICB8IDM0NiArKysrKysrLQogc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaCAg ICAgICAgICAgICAgICAgIHwgIDcxICstCiBzcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCAg ICAgICAgICAgICAgICAgfCAgIDYgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW4uYyAg ICAgICAgICAgICAgICB8ICAgNiArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW5nZXQuYyAg ICAgICAgICAgICAgIHwgICA2ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbnV0aWwuYyAg ICAgICAgICAgICAgfCAgIDYgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3QuYyAgICAg ICAgICAgICAgICB8ICAgNiArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jICAgICAg ICAgICAgICAgIHwgICA2ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxl ci5jICAgICAgfCAgIDQgKwogc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2luZGV4c2Nh bi5jICAgIHwgNDcyICsrKysrKysrKystCiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvTWFrZWZp bGUgICAgICAgICAgICAgfCAgIDMgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9hbWFwaS5j ICAgICAgICAgICAgICB8ICAgNSArCiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYyAg ICAgICAgICAgICAgfCAgIDUgKwogc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYyAg ICAgICAgICAgIHwgIDU0ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhiYXRjaC5j ICAgICAgICAgfCA3NzEgKysrKysrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5k ZXgvbWVzb24uYnVpbGQgICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvYWNjZXNzL25idHJl ZS9SRUFETUUgICAgICAgICAgICAgIHwgIDc0ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVl L25idHBhZ2UuYyAgICAgICAgICAgfCAgMTMgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUv bmJ0cmVhZHBhZ2UuYyAgICAgICB8IDIwNyArKystLQogc3JjL2JhY2tlbmQvYWNjZXNzL25idHJl ZS9uYnRyZWUuYyAgICAgICAgICAgIHwgNDY5ICsrKysrKy0tLS0tCiBzcmMvYmFja2VuZC9hY2Nl c3MvbmJ0cmVlL25idHNlYXJjaC5jICAgICAgICAgfCA1NjcgKysrKysrLS0tLS0tLQogc3JjL2Jh Y2tlbmQvYWNjZXNzL25idHJlZS9uYnR1dGlscy5jICAgICAgICAgIHwgMjQ1IC0tLS0tLQogc3Jj L2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnR4bG9nLmMgICAgICAgICAgIHwgICA2ICstCiBzcmMv YmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3V0aWxzLmMgICAgICAgICAgfCAgIDYgKy0KIHNyYy9i YWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtYXBpLmMgICAgICAgICB8ICAgNCArCiBzcmMvYmFj a2VuZC9jb21tYW5kcy9pbmRleGNtZHMuYyAgICAgICAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNr ZW5kL2V4ZWN1dG9yL2V4ZWNBbWkuYyAgICAgICAgICAgICAgICB8ICAgMiArLQogc3JjL2JhY2tl bmQvZXhlY3V0b3Ivbm9kZU1lcmdlam9pbi5jICAgICAgICAgIHwgICA0ICstCiBzcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvcGF0aC9pbmR4cGF0aC5jICAgICAgICAgfCAgIDYgKy0KIHNyYy9iYWNrZW5k L29wdGltaXplci91dGlsL3BsYW5jYXQuYyAgICAgICAgICB8ICAgOCArLQogc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vbG9naWNhbC9yZWxhdGlvbi5jICAgIHwgICA5ICstCiBzcmMvYmFja2VuZC91 dGlscy9hZHQvYW11dGlscy5jICAgICAgICAgICAgICAgfCAgIDggKy0KIGNvbnRyaWIvYmxvb20v Ymx1dGlscy5jICAgICAgICAgICAgICAgICAgICAgICB8ICAgNiArLQogZG9jL3NyYy9zZ21sL2lu ZGV4YW0uc2dtbCAgICAgICAgICAgICAgICAgICAgIHwgNTI0ICsrKysrKysrKystLQogZG9jL3Ny Yy9zZ21sL3JlZi9jcmVhdGVfdGFibGUuc2dtbCAgICAgICAgICAgIHwgIDEzICstCiAuLi4vbW9k dWxlcy9kdW1teV9pbmRleF9hbS9kdW1teV9pbmRleF9hbS5jICAgfCAgIDYgKy0KIHNyYy90b29s cy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgICAgICAgICAgICB8ICAxMiArLQogNDIgZmlsZXMg Y2hhbmdlZCwgMzA5MiBpbnNlcnRpb25zKCspLCAxMjk4IGRlbGV0aW9ucygtKQogY3JlYXRlIG1v ZGUgMTAwNjQ0IHNyYy9pbmNsdWRlL2FjY2Vzcy9pbmRleGJhdGNoLmgKIGNyZWF0ZSBtb2RlIDEw MDY0NCBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhiYXRjaC5jCgpkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvYWNjZXNzL2FtYXBpLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvYW1hcGkuaApp bmRleCBlY2ZiZDAxN2QuLjliZDMxNDFmYyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNz L2FtYXBpLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2FtYXBpLmgKQEAgLTE5OCw2ICsxOTgs MTkgQEAgdHlwZWRlZiB2b2lkICgqYW1yZXNjYW5fZnVuY3Rpb24pIChJbmRleFNjYW5EZXNjIHNj YW4sCiB0eXBlZGVmIGJvb2wgKCphbWdldHR1cGxlX2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBz Y2FuLAogCQkJCQkJCQkJIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uKTsKIAorLyogbmV4dCBiYXRj aCBvZiB2YWxpZCB0dXBsZXMgKi8KK3R5cGVkZWYgSW5kZXhTY2FuQmF0Y2ggKCphbWdldGJhdGNo X2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJCQkgICBJbmRleFNjYW5C YXRjaCBwcmlvcmJhdGNoLAorCQkJCQkJCQkJCQkgICBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbik7 CisKKy8qIG1hcmsgZGVhZCBpdGVtcyBpbiBpbmRleCBwYWdlICovCit0eXBlZGVmIHZvaWQgKCph bWtpbGxpdGVtc2JhdGNoX2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJ CSAgIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKKworLyogZHJvcCBUSUQgcmVjeWNsaW5nIGludGVy bG9jayBoZWxkIHRvIHByZXZlbnQgY29uY3VycmVudCBWQUNVVU0gcmVjeWNsaW5nICovCit0eXBl ZGVmIHZvaWQgKCphbXVuZ3VhcmRiYXRjaF9mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2NhbiwK KwkJCQkJCQkJCQkgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpOworCiAvKiBmZXRjaCBhbGwgdmFsaWQg dHVwbGVzICovCiB0eXBlZGVmIGludDY0ICgqYW1nZXRiaXRtYXBfZnVuY3Rpb24pIChJbmRleFNj YW5EZXNjIHNjYW4sCiAJCQkJCQkJCQkgICBUSURCaXRtYXAgKnRibSk7CkBAIC0yMDUsMTEgKzIx OCw5IEBAIHR5cGVkZWYgaW50NjQgKCphbWdldGJpdG1hcF9mdW5jdGlvbikgKEluZGV4U2NhbkRl c2Mgc2NhbiwKIC8qIGVuZCBpbmRleCBzY2FuICovCiB0eXBlZGVmIHZvaWQgKCphbWVuZHNjYW5f ZnVuY3Rpb24pIChJbmRleFNjYW5EZXNjIHNjYW4pOwogCi0vKiBtYXJrIGN1cnJlbnQgc2NhbiBw b3NpdGlvbiAqLwotdHlwZWRlZiB2b2lkICgqYW1tYXJrcG9zX2Z1bmN0aW9uKSAoSW5kZXhTY2Fu RGVzYyBzY2FuKTsKLQotLyogcmVzdG9yZSBtYXJrZWQgc2NhbiBwb3NpdGlvbiAqLwotdHlwZWRl ZiB2b2lkICgqYW1yZXN0cnBvc19mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2Nhbik7CisvKiBp bnZhbGlkYXRlIGluZGV4IEFNIHN0YXRlIHRoYXQgaW5kZXBlbmRlbnRseSB0cmFja3Mgc2Nhbidz IHBvc2l0aW9uICovCit0eXBlZGVmIHZvaWQgKCphbXBvc3Jlc2V0X2Z1bmN0aW9uKSAoSW5kZXhT Y2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKIAogLyoKICAq IENhbGxiYWNrIGZ1bmN0aW9uIHNpZ25hdHVyZXMgLSBmb3IgcGFyYWxsZWwgaW5kZXggc2NhbnMu CkBAIC0zMDksMTAgKzMyMCwxMiBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleEFtUm91dGluZQogCWFt YmVnaW5zY2FuX2Z1bmN0aW9uIGFtYmVnaW5zY2FuOwogCWFtcmVzY2FuX2Z1bmN0aW9uIGFtcmVz Y2FuOwogCWFtZ2V0dHVwbGVfZnVuY3Rpb24gYW1nZXR0dXBsZTsgLyogY2FuIGJlIE5VTEwgKi8K KwlhbWdldGJhdGNoX2Z1bmN0aW9uIGFtZ2V0YmF0Y2g7IC8qIGNhbiBiZSBOVUxMICovCisJYW1r aWxsaXRlbXNiYXRjaF9mdW5jdGlvbiBhbWtpbGxpdGVtc2JhdGNoOyAvKiBjYW4gYmUgTlVMTCAq LworCWFtdW5ndWFyZGJhdGNoX2Z1bmN0aW9uIGFtdW5ndWFyZGJhdGNoOyAvKiBjYW4gYmUgTlVM TCAqLwogCWFtZ2V0Yml0bWFwX2Z1bmN0aW9uIGFtZ2V0Yml0bWFwOwkvKiBjYW4gYmUgTlVMTCAq LwogCWFtZW5kc2Nhbl9mdW5jdGlvbiBhbWVuZHNjYW47Ci0JYW1tYXJrcG9zX2Z1bmN0aW9uIGFt bWFya3BvczsJLyogY2FuIGJlIE5VTEwgKi8KLQlhbXJlc3RycG9zX2Z1bmN0aW9uIGFtcmVzdHJw b3M7IC8qIGNhbiBiZSBOVUxMICovCisJYW1wb3NyZXNldF9mdW5jdGlvbiBhbXBvc3Jlc2V0OyAv KiBjYW4gYmUgTlVMTCAqLwogCiAJLyogaW50ZXJmYWNlIGZ1bmN0aW9ucyB0byBzdXBwb3J0IHBh cmFsbGVsIGluZGV4IHNjYW5zICovCiAJYW1lc3RpbWF0ZXBhcmFsbGVsc2Nhbl9mdW5jdGlvbiBh bWVzdGltYXRlcGFyYWxsZWxzY2FuOyAvKiBjYW4gYmUgTlVMTCAqLwpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvYWNjZXNzL2dlbmFtLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2VuYW0uaAppbmRl eCBkYjYyZTBjYTEuLmFlNTg3ZjhkZSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL2dl bmFtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFtLmgKQEAgLTk2LDYgKzk2LDcgQEAg dHlwZWRlZiBib29sICgqSW5kZXhCdWxrRGVsZXRlQ2FsbGJhY2spIChJdGVtUG9pbnRlciBpdGVt cHRyLCB2b2lkICpzdGF0ZSk7CiAKIC8qIHN0cnVjdCBkZWZpbml0aW9ucyBhcHBlYXIgaW4gcmVs c2Nhbi5oICovCiB0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5EZXNjRGF0YSAqSW5kZXhTY2FuRGVz YzsKK3R5cGVkZWYgc3RydWN0IEluZGV4U2NhbkJhdGNoRGF0YSAqSW5kZXhTY2FuQmF0Y2g7CiB0 eXBlZGVmIHN0cnVjdCBTeXNTY2FuRGVzY0RhdGEgKlN5c1NjYW5EZXNjOwogCiB0eXBlZGVmIHN0 cnVjdCBQYXJhbGxlbEluZGV4U2NhbkRlc2NEYXRhICpQYXJhbGxlbEluZGV4U2NhbkRlc2M7CmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmggYi9zcmMvaW5jbHVkZS9hY2Nl c3MvaGVhcGFtLmgKaW5kZXggYTc4ZmMwZGYyLi4xYzU1NzBhYzAgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL2FjY2Vzcy9oZWFwYW0uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgK QEAgLTEyOCwxMCArMTI4LDQwIEBAIHR5cGVkZWYgc3RydWN0IEluZGV4RmV0Y2hIZWFwRGF0YQog CUJ1ZmZlcgkJeHNfY2J1ZjsKIAlCbG9ja051bWJlciB4c19ibGs7CiAKLQkvKiBDdXJyZW50IGhl YXAgYmxvY2sncyBjb3JyZXNwb25kaW5nIHBhZ2UgaW4gdGhlIHZpc2liaWxpdHkgbWFwICovCi0J QnVmZmVyCQl4c192bWJ1ZmZlcjsKKwkvKiBGb3IgdmlzaWJpbGl0eSBtYXAgY2hlY2tzIChpbmRl eC1vbmx5IHNjYW5zIGFuZCBvbi1hY2Nlc3MgcHJ1bmluZykgKi8KKwlCdWZmZXIJCXhzX3ZtYnVm ZmVyOwkvKiB2aXNpYmlsaXR5IG1hcCBidWZmZXIgKi8KKwlpbnQJCQl4c192bV9pdGVtczsJLyog IyBpdGVtcyB0byByZXNvbHZlIHZpc2liaWxpdHkgaW5mbyBmb3IgKi8KKwogfSBJbmRleEZldGNo SGVhcERhdGE7CiAKKy8qCisgKiBQZXItYmF0Y2ggZGF0YSBwcml2YXRlIHRvIHRoZSBoZWFwIHRh YmxlIEFNLgorICoKKyAqIFN0b3JlZCBhdCBhIG5lZ2F0aXZlIG9mZnNldCBmcm9tIHRoZSBJbmRl eFNjYW5CYXRjaCBwb2ludGVyLCBpbiB0aGUKKyAqIGZpeGVkLXNpemUgdGFibGUgQU0gb3BhcXVl IGFyZWEgb2YgZWFjaCBiYXRjaCBhbGxvY2F0aW9uLgorICovCit0eXBlZGVmIHN0cnVjdCBIZWFw QmF0Y2hEYXRhCit7CisJdWludDgJICAgKnZpc0luZm87CQkvKiBwZXItaXRlbSB2aXNpYmlsaXR5 IGZsYWdzLCBvciBOVUxMICovCit9IEhlYXBCYXRjaERhdGE7CisKKy8qCisgKiBQZXItaXRlbSB2 aXNpYmlsaXR5IGZsYWdzIHN0b3JlZCBpbiBIZWFwQmF0Y2hEYXRhLnZpc0luZm8gYXJyYXkKKyAq LworI2RlZmluZSBIRUFQX0JBVENIX1ZJU19DSEVDS0VECQkweDAxCS8qIGNoZWNrZWQgaXRlbSBp biBWTT8gKi8KKyNkZWZpbmUgSEVBUF9CQVRDSF9WSVNfQUxMX1ZJU0lCTEUJMHgwMgkvKiBibG9j ayBpcyBrbm93biBhbGwtdmlzaWJsZT8gKi8KKworLyoKKyAqIEFjY2VzcyB0aGUgaGVhcC1wcml2 YXRlIGZpeGVkLXNpemUgZGF0YSBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgYW4gYWxsb2NhdGVkCisg KiBJbmRleFNjYW5CYXRjaCwgdXNpbmcgY2FsbGVyJ3MgSW5kZXhTY2FuQmF0Y2ggcG9pbnRlcgor ICovCitzdGF0aWMgaW5saW5lIEhlYXBCYXRjaERhdGEgKgoraGVhcF9iYXRjaF9kYXRhKEluZGV4 U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCit7CisJLyogaGVhcGFtJ3MgZml4 ZWQtc2l6ZSBzcGFjZSBpcyBhdCB0aGUgc3RhcnQgb2YgdGhlIHBhbGxvYydkIGFyZWEgKi8KKwly ZXR1cm4gKEhlYXBCYXRjaERhdGEgKikgYmF0Y2hfYWxsb2NfYmFzZShzY2FuLCBiYXRjaCk7Cit9 CisKIC8qIFJlc3VsdCBjb2RlcyBmb3IgSGVhcFR1cGxlU2F0aXNmaWVzVmFjdXVtICovCiB0eXBl ZGVmIGVudW0KIHsKQEAgLTQzMiwxMCArNDYyLDIwIEBAIGV4dGVybiBUcmFuc2FjdGlvbklkIGhl YXBfaW5kZXhfZGVsZXRlX3R1cGxlcyhSZWxhdGlvbiByZWwsCiAvKiBpbiBoZWFwL2hlYXBhbV9p bmRleHNjYW4uYyAqLwogZXh0ZXJuIEluZGV4RmV0Y2hUYWJsZURhdGEgKmhlYXBhbV9pbmRleF9m ZXRjaF9iZWdpbihSZWxhdGlvbiByZWwsIHVpbnQzMiBmbGFncyk7CiBleHRlcm4gdm9pZCBoZWFw YW1faW5kZXhfZmV0Y2hfcmVzZXQoSW5kZXhTY2FuRGVzYyBzY2FuKTsKK2V4dGVybiB2b2lkIGhl YXBhbV9pbmRleF9mZXRjaF9yZXN0cnBvcyhJbmRleFNjYW5EZXNjIHNjYW4pOwogZXh0ZXJuIHZv aWQgaGVhcGFtX2luZGV4X2ZldGNoX2VuZChJbmRleFNjYW5EZXNjIHNjYW4pOworZXh0ZXJuIHZv aWQgaGVhcGFtX2luZGV4X2ZldGNoX2JhdGNoX2luaXQoSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJ CQkJCQkJCSAgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gsCisJCQkJCQkJCQkJICBib29sIG5ld19hbGxv Yyk7CiBleHRlcm4gYm9vbCBoZWFwX2hvdF9zZWFyY2hfYnVmZmVyKEl0ZW1Qb2ludGVyIHRpZCwg UmVsYXRpb24gcmVsYXRpb24sCiAJCQkJCQkJCSAgIEJ1ZmZlciBidWZmZXIsIFNuYXBzaG90IHNu YXBzaG90LCBIZWFwVHVwbGUgaGVhcFR1cGxlLAogCQkJCQkJCQkgICBib29sICphbGxfZGVhZCwg Ym9vbCBmaXJzdF9jYWxsKTsKK2V4dGVybiBib29sIGhlYXBhbV9pbmRleF9wbGFpbl9hbWdldGJh dGNoX25leHQoSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJCQkgICBTY2FuRGlyZWN0aW9u IGRpcmVjdGlvbiwKKwkJCQkJCQkJCQkJICAgVHVwbGVUYWJsZVNsb3QgKnNsb3QpOworZXh0ZXJu IGJvb2wgaGVhcGFtX2luZGV4X29ubHlfYW1nZXRiYXRjaF9uZXh0KEluZGV4U2NhbkRlc2Mgc2Nh biwKKwkJCQkJCQkJCQkJICBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQkJCQkJCQkJICBU dXBsZVRhYmxlU2xvdCAqc2xvdCk7CiBleHRlcm4gYm9vbCBoZWFwYW1faW5kZXhfcGxhaW5fYW1n ZXR0dXBsZV9uZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwKIAkJCQkJCQkJCQkJICAgU2NhbkRpcmVj dGlvbiBkaXJlY3Rpb24sCiAJCQkJCQkJCQkJCSAgIFR1cGxlVGFibGVTbG90ICpzbG90KTsKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9pbmRleGJhdGNoLmggYi9zcmMvaW5jbHVkZS9h Y2Nlc3MvaW5kZXhiYXRjaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMC4u NDI2NWFkN2RlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2luZGV4YmF0 Y2guaApAQCAtMCwwICsxLDE3NSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogaW5kZXhi YXRjaC5oCisgKgkgIEJhdGNoLWJhc2VkIGluZGV4IHNjYW4gaW5mcmFzdHJ1Y3R1cmUgZm9yIHRo ZSBhbWdldGJhdGNoIGludGVyZmFjZS4KKyAqCisgKiBQcm92aWRlcyBmdW5jdGlvbnMgdXNlZCBi eSB0YWJsZSBBTXMgdG8gbWFuYWdlIGFuIGluZGV4IHNjYW4ncyBwb3NpdGlvbmFsCisgKiBzdGF0 ZSAoc3RvcmVkIGluIEluZGV4U2NhbkRlc2MuYmF0Y2hyaW5nYnVmKSwgYW5kIHRvIG1hbmFnZSB1 bmRlcmx5aW5nCisgKiByZXNvdXJjZXMgc3VjaCBhcyBtZW1vcnkgYW5kIGJ1ZmZlciBwaW5zLiAg QWxzbyBwcm92aWRlcyB2YXJpb3VzIHV0aWxpdHkKKyAqIGZ1bmN0aW9ucyB1c2VkIGJ5IGluZGV4 IEFNcyBmb3IgYmF0Y2ggcmVzb3VyY2UgbWFuYWdlbWVudC4KKyAqCisgKiBUaGlzIG1vZHVsZSBk b2VzIG5vdCBwcm92aWRlIGVsZW1lbnRhcnkgb3BlcmF0aW9ucyBmb3IgbWFuaXB1bGF0aW5nIHRo ZQorICogc2NhbidzIHJpbmcgYnVmZmVyIChlLmcuLCBmb3IgYXBwZW5kaW5nIGEgYmF0Y2gpLiAg VGhvc2UgYXJlIGltcGxlbWVudGVkIGFzCisgKiBpbmxpbmUgZnVuY3Rpb25zIGRlZmluZWQgYmVz aWRlIEluZGV4U2NhbkRlc2MgYW5kIEluZGV4U2NhbkJhdGNoLgorICoKKyAqIFBvcnRpb25zIENv cHlyaWdodCAoYykgMTk5Ni0yMDI2LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91 cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJz aXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKiBzcmMvaW5jbHVkZS9hY2Nlc3MvaW5kZXhiYXRjaC5o CisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgSU5ERVhCQVRDSF9ICisjZGVm aW5lIElOREVYQkFUQ0hfSAorCisjaW5jbHVkZSAiYWNjZXNzL2FtYXBpLmgiCisjaW5jbHVkZSAi YWNjZXNzL2dlbmFtLmgiCisjaW5jbHVkZSAiYWNjZXNzL3JlbHNjYW4uaCIKKyNpbmNsdWRlICJz dG9yYWdlL2J1Zi5oIgorI2luY2x1ZGUgInV0aWxzL3JlbC5oIgorCisvKgorICogdXRpbGl0aWVz IGNhbGxlZCBieSBpbmRleGFtLmMgb24gYmVoYWxmIG9mIHRhYmxlIEFNcworICovCitleHRlcm4g dm9pZCBiYXRjaHNjYW5faW5pdChJbmRleFNjYW5EZXNjIHNjYW4pOworZXh0ZXJuIHZvaWQgYmF0 Y2hzY2FuX21hcmtfcG9zKEluZGV4U2NhbkRlc2Mgc2Nhbik7CisKKy8qCisgKiB1dGlsaXRpZXMg Y2FsbGVkIGJ5IHRhYmxlIEFNcworICovCitleHRlcm4gdm9pZCB0YWJsZWFtX3V0aWxfYmF0Y2hz Y2FuX3Jlc3RvcmVfcG9zKEluZGV4U2NhbkRlc2Mgc2Nhbik7CitleHRlcm4gdm9pZCB0YWJsZWFt X3V0aWxfYmF0Y2hzY2FuX3Jlc2V0KEluZGV4U2NhbkRlc2Mgc2NhbiwgYm9vbCBlbmRzY2FuKTsK K2V4dGVybiB2b2lkIHRhYmxlYW1fdXRpbF9iYXRjaHNjYW5fZW5kKEluZGV4U2NhbkRlc2Mgc2Nh bik7CitleHRlcm4gdm9pZCB0YWJsZWFtX3V0aWxfc2NhbmJhdGNoX2RpcmNoYW5nZShJbmRleFNj YW5EZXNjIHNjYW4pOworZXh0ZXJuIHZvaWQgdGFibGVhbV91dGlsX3NjYW5wb3Nfa2lsbGl0ZW0o SW5kZXhTY2FuRGVzYyBzY2FuKTsKK2V4dGVybiB2b2lkIHRhYmxlYW1fdXRpbF9mcmVlX2JhdGNo KEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpOworZXh0ZXJuIHZvaWQg dGFibGVhbV91dGlsX3VuZ3VhcmRfYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5C YXRjaCBiYXRjaCk7CisKKy8qCisgKiBGZXRjaCB0aGUgbmV4dCBiYXRjaCBvZiBtYXRjaGluZyBp dGVtcyBmb3IgdGhlIHNjYW4gKG9yIHRoZSBmaXJzdCkuCisgKgorICogQ2FsbGVkIHdoZW4gY2Fs bGVyJ3MgY3VycmVudCBiYXRjaCAocGFzc2VkIHRvIHVzIGFzIHByaW9yQmF0Y2gpIGhhcyBubyBt b3JlCisgKiBtYXRjaGluZyBpdGVtcyBpbiB0aGUgZ2l2ZW4gc2NhbiBkaXJlY3Rpb24uICBDYWxs ZXIgcGFzc2VzIGEgTlVMTAorICogcHJpb3JCYXRjaCBvbiB0aGUgZmlyc3QgY2FsbCBoZXJlIGZv ciB0aGUgc2Nhbi4KKyAqCisgKiBSZXR1cm5zIHRoZSBuZXh0IGJhdGNoIHRvIGJlIHByb2Nlc3Nl ZCBieSBjYWxsZXIgaW4gdGhlIGdpdmVuIHNjYW4KKyAqIGRpcmVjdGlvbiwgb3IgTlVMTCB3aGVu IHRoZXJlIGFyZSBubyBtb3JlIG1hdGNoZXMgaW4gdGhhdCBkaXJlY3Rpb24uCisgKgorICogVGhp cyBpcyB3aGVyZSBiYXRjaGVzIGFyZSBhcHBlbmRlZCB0byB0aGUgc2NhbidzIHJpbmcgYnVmZmVy LiAgV2UgZG9uJ3QKKyAqIGZyZWUgYW55IGJhdGNoZXMgaGVyZSwgdGhvdWdoOyB0aGF0IGlzIGxl ZnQgdXAgdG8gdGhlIGNhbGxlci4gIFRoZSBjYWxsZXIKKyAqIGlzIGFsc28gcmVzcG9uc2libGUg Zm9yIGFkdmFuY2luZyB0aGVpciBwb3NpdGlvbi4KKyAqLworc3RhdGljIHBnX2F0dHJpYnV0ZV9h bHdheXNfaW5saW5lIEluZGV4U2NhbkJhdGNoCit0YWJsZWFtX3V0aWxfZmV0Y2hfbmV4dF9iYXRj aChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJCSAg SW5kZXhTY2FuQmF0Y2ggcHJpb3JCYXRjaCwgQmF0Y2hSaW5nSXRlbVBvcyAqcG9zKQoreworCUlu ZGV4U2NhbkJhdGNoIGJhdGNoID0gTlVMTDsKKwlCYXRjaFJpbmdCdWZmZXIgKmJhdGNocmluZ2J1 ZiBQR19VU0VEX0ZPUl9BU1NFUlRTX09OTFkgPSAmc2Nhbi0+YmF0Y2hyaW5nYnVmOworCisJaWYg KCFwcmlvckJhdGNoKQorCXsKKwkJLyogRmlyc3QgY2FsbCBmb3IgdGhlIHNjYW4gKi8KKwkJQXNz ZXJ0KHBvcyA9PSAmYmF0Y2hyaW5nYnVmLT5zY2FuUG9zKTsKKwl9CisJZWxzZSBpZiAodW5saWtl bHkocHJpb3JCYXRjaC0+ZGlyICE9IGRpcmVjdGlvbikpCisJeworCQkvKgorCQkgKiBXZSBkZXRl Y3RlZCBhIGNoYW5nZSBpbiBzY2FuIGRpcmVjdGlvbiBhY3Jvc3MgYmF0Y2hlcy4gIFByZXBhcmUK KwkJICogc2NhbidzIGJhdGNocmluZ2J1ZiBzdGF0ZSBmb3IgdXMgdG8gZ2V0IHRoZSBuZXh0IGJh dGNoIGZvciB0aGUKKwkJICogb3Bwb3NpdGUgc2NhbiBkaXJlY3Rpb24gdG8gdGhlIG9uZSB1c2Vk IHdoZW4gcHJpb3JCYXRjaCB3YXMKKwkJICogcmV0dXJuZWQgYnkgYW1nZXRiYXRjaC4KKwkJICov CisJCXRhYmxlYW1fdXRpbF9zY2FuYmF0Y2hfZGlyY2hhbmdlKHNjYW4pOworCisJCS8qIHByaW9y QmF0Y2ggaXMgbm93IGJhdGNocmluZ2J1ZidzIG9ubHkgYmF0Y2ggKi8KKwkJQXNzZXJ0KHBvcy0+ YmF0Y2ggPT0gYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2gpOworCQlBc3NlcnQoaW5kZXhfc2Nhbl9i YXRjaF9jb3VudChzY2FuKSA9PSAxKTsKKwl9CisJZWxzZSBpZiAoaW5kZXhfc2Nhbl9iYXRjaF9s b2FkZWQoc2NhbiwgcG9zLT5iYXRjaCArIDEpKQorCXsKKwkJLyogTmV4dCBiYXRjaCBhbHJlYWR5 IGxvYWRlZCBmb3IgdXMgKi8KKwkJYmF0Y2ggPSBpbmRleF9zY2FuX2JhdGNoKHNjYW4sIHBvcy0+ YmF0Y2ggKyAxKTsKKworCQlBc3NlcnQocHJpb3JCYXRjaC0+ZGlyID09IGRpcmVjdGlvbik7CisJ CUFzc2VydChiYXRjaC0+ZGlyID09IGRpcmVjdGlvbik7CisJCUFzc2VydChiYXRjaC0+Zmlyc3RJ dGVtIDw9IGJhdGNoLT5sYXN0SXRlbSk7CisJCXJldHVybiBiYXRjaDsKKwl9CisKKwkvKgorCSAq IEFzc2VydCBwcmVjb25kaXRpb25zIGZvciBjYWxsaW5nIGFtZ2V0YmF0Y2guCisJICoKKwkgKiBw cmlvckJhdGNoIGhhZCBiZXR0ZXIgYmUgZm9yIHRoZSBsYXN0IHZhbGlkIGJhdGNoIGN1cnJlbnRs eSBpbiB0aGUgcmluZworCSAqIGJ1ZmZlciAoYmF0Y2hlcyBtdXN0IHN0YXkgaW4gc2NhbiBvcmRl cikuICBJZiBpdCBpc24ndCB0aGVuIHdlIHNob3VsZAorCSAqIGhhdmUgYWxyZWFkeSByZXR1cm5l ZCBzb21lIGV4aXN0aW5nIGxvYWRlZCBiYXRjaCBlYXJsaWVyLgorCSAqLworCUFzc2VydCghaW5k ZXhfc2Nhbl9iYXRjaF9mdWxsKHNjYW4pKTsKKwlBc3NlcnQoIXByaW9yQmF0Y2ggfHwKKwkJICAg KGluZGV4X3NjYW5fYmF0Y2hfY291bnQoc2NhbikgPiAwICYmIHByaW9yQmF0Y2gtPmRpciA9PSBk aXJlY3Rpb24gJiYKKwkJCWluZGV4X3NjYW5fYmF0Y2goc2NhbiwgYmF0Y2hyaW5nYnVmLT5uZXh0 QmF0Y2ggLSAxKSA9PSBwcmlvckJhdGNoKSk7CisKKwkvKgorCSAqIEJlZm9yZSB3ZSBjYWxsIGFt Z2V0YmF0Y2ggYWdhaW4sIGNoZWNrIGlmIHByaW9yQmF0Y2ggaXMgYWxyZWFkeSBrbm93bgorCSAq IHRvIGJlIHRoZSBsYXN0IGJhdGNoIHdpdGggbWF0Y2hpbmcgaXRlbXMgaW4gdGhpcyBzY2FuIGRp cmVjdGlvbgorCSAqLworCWlmIChwcmlvckJhdGNoICYmCisJCShTY2FuRGlyZWN0aW9uSXNGb3J3 YXJkKGRpcmVjdGlvbikgPworCQkgcHJpb3JCYXRjaC0+a25vd25FbmRGb3J3YXJkIDoKKwkJIHBy aW9yQmF0Y2gtPmtub3duRW5kQmFja3dhcmQpKQorCQlyZXR1cm4gTlVMTDsKKworCWJhdGNoID0g c2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtZ2V0YmF0Y2goc2NhbiwgcHJpb3JCYXRj aCwKKwkJCQkJCQkJCQkJCQkgIGRpcmVjdGlvbik7CisJaWYgKGJhdGNoKQorCXsKKwkJLyogV2Ug Z290IHRoZSBiYXRjaCBmcm9tIHRoZSBpbmRleCBBTSAqLworCQlBc3NlcnQoYmF0Y2gtPmRpciA9 PSBkaXJlY3Rpb24pOworCQlBc3NlcnQoYmF0Y2gtPmZpcnN0SXRlbSA8PSBiYXRjaC0+bGFzdEl0 ZW0pOworCisJCS8qIEFwcGVuZCBiYXRjaCB0byB0aGUgZW5kIG9mIHJpbmcgYnVmZmVyL3dyaXRl IGl0IHRvIGJ1ZmZlciBpbmRleCAqLworCQlpbmRleF9zY2FuX2JhdGNoX2FwcGVuZChzY2FuLCBi YXRjaCk7CisJfQorCWVsc2UKKwl7CisJCS8qIGFtZ2V0YmF0Y2ggcmV0dXJuZWQgTlVMTCAqLwor CQlpZiAocHJpb3JCYXRjaCkKKwkJeworCQkJLyoKKwkJCSAqIFRoZXJlIGFyZSBubyBmdXJ0aGVy IG1hdGNoZXMgdG8gYmUgZm91bmQgaW4gdGhlIGN1cnJlbnQgc2NhbgorCQkJICogZGlyZWN0aW9u LCBmb2xsb3dpbmcgcHJpb3JCYXRjaC4gIFJlbWVtYmVyIHRoYXQgcHJpb3JCYXRjaCBpcworCQkJ ICogdGhlIGxhc3QgYmF0Y2ggd2l0aCBtYXRjaGluZyBpdGVtcy4KKwkJCSAqLworCQkJaWYgKFNj YW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyZWN0aW9uKSkKKwkJCQlwcmlvckJhdGNoLT5rbm93bkVu ZEZvcndhcmQgPSB0cnVlOworCQkJZWxzZQorCQkJCXByaW9yQmF0Y2gtPmtub3duRW5kQmFja3dh cmQgPSB0cnVlOworCQl9CisJfQorCisJLyogeHNfaGl0dXAgaXNuJ3QgY3VycmVudGx5IHN1cHBv cnRlZCBieSBhbWdldGJhdGNoIHNjYW5zICovCisJQXNzZXJ0KCFzY2FuLT54c19oaXR1cCk7CisK KwlyZXR1cm4gYmF0Y2g7Cit9CisKKy8qCisgKiB1dGlsaXRpZXMgY2FsbGVkIGJ5IGluZGV4IEFN cworICovCitleHRlcm4gdm9pZCBpbmRleGFtX3V0aWxfYmF0Y2hfdW5sb2NrKEluZGV4U2NhbkRl c2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gsCisJCQkJCQkJCQkgIEJ1ZmZlciBidWYpOwor ZXh0ZXJuIEluZGV4U2NhbkJhdGNoIGluZGV4YW1fdXRpbF9iYXRjaF9hbGxvYyhJbmRleFNjYW5E ZXNjIHNjYW4pOworZXh0ZXJuIHZvaWQgaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2UoSW5kZXhT Y2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCk7CisKKy8qCisgKiBVdGlsaXR5IG1h Y3JvIGZvciBhY2Nlc3NpbmcgdGhlIGluZGV4IEFNJ3MgcGVyLWJhdGNoIG9wYXF1ZSBkYXRhLgor ICoKKyAqIEVhY2ggYmF0Y2ggYWxsb2NhdGlvbiBwbGFjZXMgdGhlIGluZGV4IEFNIG9wYXF1ZSBh cmVhIGF0IGEgZml4ZWQgbmVnYXRpdmUKKyAqIG9mZnNldCBmcm9tIHRoZSBJbmRleFNjYW5CYXRj aCBwb2ludGVyIChzZWUgaW5kZXhhbV91dGlsX2JhdGNoX2FsbG9jKS4KKyAqIFRoaXMgbWFjcm8g cmV0dXJucyBhIHR5cGVkIHBvaW50ZXIgdG8gdGhhdCBhcmVhLCBhc3NlcnRpbmcgdGhhdCBldmVy eWJvZHkKKyAqIGhhcyB0aGUgc2FtZSBpZGVhIGFib3V0IHdoZXJlIHRoZSBpbmRleCBBTSBvcGFx dWUgYXJlYSBpcyBpbiBwYXNzaW5nLgorICovCisjZGVmaW5lIGluZGV4YW1fdXRpbF9iYXRjaF9n ZXRfYW1kYXRhKHNjYW4sIGJhdGNoLCB0eXBlKSBcCisJKEFzc2VydE1hY3JvKChzY2FuKS0+YmF0 Y2hfaW5kZXhfb3BhcXVlX3NpemUgPT0gTUFYQUxJR04oc2l6ZW9mKHR5cGUpKSksIFwKKwkgKCh0 eXBlICopICgoY2hhciAqKSAoYmF0Y2gpIC0gTUFYQUxJR04oc2l6ZW9mKHR5cGUpKSkpKQorCisj ZW5kaWYJCQkJCQkJLyogSU5ERVhCQVRDSF9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9h Y2Nlc3MvbmJ0cmVlLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmgKaW5kZXggZGE3NTAz YzU3Li4yY2RjZGVmYTIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9uYnRyZWUuaAor KysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmgKQEAgLTE1LDYgKzE1LDcgQEAKICNkZWZp bmUgTkJUUkVFX0gKIAogI2luY2x1ZGUgImFjY2Vzcy9hbWFwaS5oIgorI2luY2x1ZGUgImFjY2Vz cy9pbmRleGJhdGNoLmgiCiAjaW5jbHVkZSAiYWNjZXNzL2l0dXAuaCIKICNpbmNsdWRlICJhY2Nl c3Mvc2Rpci5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfYW1fZC5oIgpAQCAtOTI0LDExMSArOTI1 LDIwIEBAIHR5cGVkZWYgc3RydWN0IEJUVmFjdXVtUG9zdGluZ0RhdGEKIAogdHlwZWRlZiBCVFZh Y3V1bVBvc3RpbmdEYXRhICpCVFZhY3V1bVBvc3Rpbmc7CiAKLS8qCi0gKiBCVFNjYW5PcGFxdWVE YXRhIGlzIHRoZSBidHJlZS1wcml2YXRlIHN0YXRlIG5lZWRlZCBmb3IgYW4gaW5kZXhzY2FuLgot ICogVGhpcyBjb25zaXN0cyBvZiBwcmVwcm9jZXNzZWQgc2NhbiBrZXlzIChzZWUgX2J0X3ByZXBy b2Nlc3Nfa2V5cygpIGZvcgotICogZGV0YWlscyBvZiB0aGUgcHJlcHJvY2Vzc2luZyksIGluZm9y bWF0aW9uIGFib3V0IHRoZSBjdXJyZW50IGxvY2F0aW9uCi0gKiBvZiB0aGUgc2NhbiwgYW5kIGlu Zm9ybWF0aW9uIGFib3V0IHRoZSBtYXJrZWQgbG9jYXRpb24sIGlmIGFueS4gIChXZSB1c2UKLSAq IEJUU2NhblBvc0RhdGEgdG8gcmVwcmVzZW50IHRoZSBkYXRhIG5lZWRlZCBmb3IgZWFjaCBvZiBj dXJyZW50IGFuZCBtYXJrZWQKLSAqIGxvY2F0aW9ucy4pCUluIGFkZGl0aW9uIHdlIGNhbiByZW1l bWJlciBzb21lIGtub3duLWtpbGxlZCBpbmRleCBlbnRyaWVzCi0gKiB0aGF0IG11c3QgYmUgbWFy a2VkIGJlZm9yZSB3ZSBjYW4gbW92ZSBvZmYgdGhlIGN1cnJlbnQgcGFnZS4KLSAqCi0gKiBJbmRl eCBzY2FucyB3b3JrIGEgcGFnZSBhdCBhIHRpbWU6IHdlIHBpbiBhbmQgcmVhZC1sb2NrIHRoZSBw YWdlLCBpZGVudGlmeQotICogYWxsIHRoZSBtYXRjaGluZyBpdGVtcyBvbiB0aGUgcGFnZSBhbmQg c2F2ZSB0aGVtIGluIEJUU2NhblBvc0RhdGEsIHRoZW4KLSAqIHJlbGVhc2UgdGhlIHJlYWQtbG9j ayB3aGlsZSByZXR1cm5pbmcgdGhlIGl0ZW1zIHRvIHRoZSBjYWxsZXIgZm9yCi0gKiBwcm9jZXNz aW5nLiAgVGhpcyBhcHByb2FjaCBtaW5pbWl6ZXMgbG9jay91bmxvY2sgdHJhZmZpYy4gIFdlIG11 c3QgYWx3YXlzCi0gKiBkcm9wIHRoZSBsb2NrIHRvIG1ha2UgaXQgb2theSBmb3IgY2FsbGVyIHRv IHByb2Nlc3MgdGhlIHJldHVybmVkIGl0ZW1zLgotICogV2hldGhlciBvciBub3Qgd2UgY2FuIGFs c28gcmVsZWFzZSB0aGUgcGluIGR1cmluZyB0aGlzIHdpbmRvdyB3aWxsIHZhcnkuCi0gKiBXZSBk cm9wIHRoZSBwaW4gKHdoZW4gc28tPmRyb3BQaW4pIHRvIGF2b2lkIGJsb2NraW5nIHByb2dyZXNz IGJ5IFZBQ1VVTQotICogKHNlZSBuYnRyZWUvUkVBRE1FIHNlY3Rpb24gYWJvdXQgbWFraW5nIGNv bmN1cnJlbnQgVElEIHJlY3ljbGluZyBzYWZlKS4KLSAqIFdlJ2xsIGFsd2F5cyByZWxlYXNlIGJv dGggdGhlIGxvY2sgYW5kIHRoZSBwaW4gb24gdGhlIGN1cnJlbnQgcGFnZSBiZWZvcmUKLSAqIG1v dmluZyBvbiB0byBpdHMgc2libGluZyBwYWdlLgotICoKLSAqIElmIHdlIGFyZSBkb2luZyBhbiBp bmRleC1vbmx5IHNjYW4sIHdlIHNhdmUgdGhlIGVudGlyZSBJbmRleFR1cGxlIGZvciBlYWNoCi0g KiBtYXRjaGVkIGl0ZW0sIG90aGVyd2lzZSBvbmx5IGl0cyBoZWFwIFRJRCBhbmQgb2Zmc2V0LiAg VGhlIEluZGV4VHVwbGVzIGdvCi0gKiBpbnRvIGEgc2VwYXJhdGUgd29ya3NwYWNlIGFycmF5OyBl YWNoIEJUU2NhblBvc0l0ZW0gc3RvcmVzIGl0cyB0dXBsZSdzCi0gKiBvZmZzZXQgd2l0aGluIHRo YXQgYXJyYXkuICBQb3N0aW5nIGxpc3QgdHVwbGVzIHN0b3JlIGEgImJhc2UiIHR1cGxlIG9uY2Us Ci0gKiBhbGxvd2luZyB0aGUgc2FtZSBrZXkgdG8gYmUgcmV0dXJuZWQgZm9yIGVhY2ggVElEIGlu IHRoZSBwb3N0aW5nIGxpc3QKLSAqIHR1cGxlLgotICovCi0KLXR5cGVkZWYgc3RydWN0IEJUU2Nh blBvc0l0ZW0JLyogd2hhdCB3ZSByZW1lbWJlciBhYm91dCBlYWNoIG1hdGNoICovCisvKiBQZXIt YmF0Y2ggZGF0YSBwcml2YXRlIHRvIHRoZSBidHJlZSBpbmRleCBBTSAqLwordHlwZWRlZiBzdHJ1 Y3QgQlRCYXRjaERhdGEKIHsKLQlJdGVtUG9pbnRlckRhdGEgaGVhcFRpZDsJLyogVElEIG9mIHJl ZmVyZW5jZWQgaGVhcCBpdGVtICovCi0JT2Zmc2V0TnVtYmVyIGluZGV4T2Zmc2V0OwkvKiBpbmRl eCBpdGVtJ3MgbG9jYXRpb24gd2l0aGluIHBhZ2UgKi8KLQlMb2NhdGlvbkluZGV4IHR1cGxlT2Zm c2V0OwkvKiBJbmRleFR1cGxlJ3Mgb2Zmc2V0IGluIHdvcmtzcGFjZSwgaWYgYW55ICovCi19IEJU U2NhblBvc0l0ZW07CisJQnVmZmVyCQlidWY7CQkJLyogaW5kZXggcGFnZSBidWZmZXIgcGluICov CisJQmxvY2tOdW1iZXIgY3VyclBhZ2U7CQkvKiBpbmRleCBwYWdlIHdpdGggbWF0Y2hpbmcgaXRl bXMgKi8KKwlCbG9ja051bWJlciBwcmV2UGFnZTsJCS8qIGN1cnJQYWdlJ3MgbGVmdCBzaWJsaW5n ICovCisJQmxvY2tOdW1iZXIgbmV4dFBhZ2U7CQkvKiBjdXJyUGFnZSdzIHJpZ2h0IHNpYmxpbmcg Ki8KKwlib29sCQltb3JlTGVmdDsJCS8qIG1vcmUgbWF0Y2hpbmcgcGFnZXMgdG8gdGhlIGxlZnQ/ ICovCisJYm9vbAkJbW9yZVJpZ2h0OwkJLyogbW9yZSBtYXRjaGluZyBwYWdlcyB0byB0aGUgcmln aHQ/ICovCit9IEJUQmF0Y2hEYXRhOwogCi10eXBlZGVmIHN0cnVjdCBCVFNjYW5Qb3NEYXRhCi17 Ci0JQnVmZmVyCQlidWY7CQkJLyogY3VyclBhZ2UgYnVmIChpbnZhbGlkIG1lYW5zIHVucGlubmVk KSAqLwotCi0JLyogcGFnZSBkZXRhaWxzIGFzIG9mIHRoZSBzYXZlZCBwb3NpdGlvbidzIGNhbGwg dG8gX2J0X3JlYWRwYWdlICovCi0JQmxvY2tOdW1iZXIgY3VyclBhZ2U7CQkvKiBwYWdlIHJlZmVy ZW5jZWQgYnkgaXRlbXMgYXJyYXkgKi8KLQlCbG9ja051bWJlciBwcmV2UGFnZTsJCS8qIGN1cnJQ YWdlJ3MgbGVmdCBsaW5rICovCi0JQmxvY2tOdW1iZXIgbmV4dFBhZ2U7CQkvKiBjdXJyUGFnZSdz IHJpZ2h0IGxpbmsgKi8KLQlYTG9nUmVjUHRyCWxzbjsJCQkvKiBjdXJyUGFnZSdzIExTTiAod2hl biBzby0+ZHJvcFBpbikgKi8KLQotCS8qIHNjYW4gZGlyZWN0aW9uIGZvciB0aGUgc2F2ZWQgcG9z aXRpb24ncyBjYWxsIHRvIF9idF9yZWFkcGFnZSAqLwotCVNjYW5EaXJlY3Rpb24gZGlyOwotCi0J LyoKLQkgKiBJZiB3ZSBhcmUgZG9pbmcgYW4gaW5kZXgtb25seSBzY2FuLCBuZXh0VHVwbGVPZmZz ZXQgaXMgdGhlIGZpcnN0IGZyZWUKLQkgKiBsb2NhdGlvbiBpbiB0aGUgYXNzb2NpYXRlZCB0dXBs ZSBzdG9yYWdlIHdvcmtzcGFjZS4KLQkgKi8KLQlpbnQJCQluZXh0VHVwbGVPZmZzZXQ7Ci0KLQkv KgotCSAqIG1vcmVMZWZ0IGFuZCBtb3JlUmlnaHQgdHJhY2sgd2hldGhlciB3ZSB0aGluayB0aGVy ZSBtYXkgYmUgbWF0Y2hpbmcKLQkgKiBpbmRleCBlbnRyaWVzIHRvIHRoZSBsZWZ0IGFuZCByaWdo dCBvZiB0aGUgY3VycmVudCBwYWdlLCByZXNwZWN0aXZlbHkuCi0JICovCi0JYm9vbAkJbW9yZUxl ZnQ7Ci0JYm9vbAkJbW9yZVJpZ2h0OwotCi0JLyoKLQkgKiBUaGUgaXRlbXMgYXJyYXkgaXMgYWx3 YXlzIG9yZGVyZWQgaW4gaW5kZXggb3JkZXIgKGllLCBpbmNyZWFzaW5nCi0JICogaW5kZXhvZmZz ZXQpLiAgV2hlbiBzY2FubmluZyBiYWNrd2FyZHMgaXQgaXMgY29udmVuaWVudCB0byBmaWxsIHRo ZQotCSAqIGFycmF5IGJhY2stdG8tZnJvbnQsIHNvIHdlIHN0YXJ0IGF0IHRoZSBsYXN0IHNsb3Qg YW5kIGZpbGwgZG93bndhcmRzLgotCSAqIEhlbmNlIHdlIG5lZWQgYm90aCBhIGZpcnN0LXZhbGlk LWVudHJ5IGFuZCBhIGxhc3QtdmFsaWQtZW50cnkgY291bnRlci4KLQkgKiBpdGVtSW5kZXggaXMg YSBjdXJzb3Igc2hvd2luZyB3aGljaCBlbnRyeSB3YXMgbGFzdCByZXR1cm5lZCB0byBjYWxsZXIu Ci0JICovCi0JaW50CQkJZmlyc3RJdGVtOwkJLyogZmlyc3QgdmFsaWQgaW5kZXggaW4gaXRlbXNb XSAqLwotCWludAkJCWxhc3RJdGVtOwkJLyogbGFzdCB2YWxpZCBpbmRleCBpbiBpdGVtc1tdICov Ci0JaW50CQkJaXRlbUluZGV4OwkJLyogY3VycmVudCBpbmRleCBpbiBpdGVtc1tdICovCi0KLQlC VFNjYW5Qb3NJdGVtIGl0ZW1zW01heFRJRHNQZXJCVHJlZVBhZ2VdOwkvKiBNVVNUIEJFIExBU1Qg Ki8KLX0gQlRTY2FuUG9zRGF0YTsKLQotdHlwZWRlZiBCVFNjYW5Qb3NEYXRhICpCVFNjYW5Qb3M7 Ci0KLSNkZWZpbmUgQlRTY2FuUG9zSXNQaW5uZWQoc2NhbnBvcykgXAotKCBcCi0JQXNzZXJ0TWFj cm8oQmxvY2tOdW1iZXJJc1ZhbGlkKChzY2FucG9zKS5jdXJyUGFnZSkgfHwgXAotCQkJCSFCdWZm ZXJJc1ZhbGlkKChzY2FucG9zKS5idWYpKSwgXAotCUJ1ZmZlcklzVmFsaWQoKHNjYW5wb3MpLmJ1 ZikgXAotKQotI2RlZmluZSBCVFNjYW5Qb3NVbnBpbihzY2FucG9zKSBcCi0JZG8geyBcCi0JCVJl bGVhc2VCdWZmZXIoKHNjYW5wb3MpLmJ1Zik7IFwKLQkJKHNjYW5wb3MpLmJ1ZiA9IEludmFsaWRC dWZmZXI7IFwKLQl9IHdoaWxlICgwKQotI2RlZmluZSBCVFNjYW5Qb3NVbnBpbklmUGlubmVkKHNj YW5wb3MpIFwKLQlkbyB7IFwKLQkJaWYgKEJUU2NhblBvc0lzUGlubmVkKHNjYW5wb3MpKSBcCi0J CQlCVFNjYW5Qb3NVbnBpbihzY2FucG9zKTsgXAotCX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgQlRT Y2FuUG9zSXNWYWxpZChzY2FucG9zKSBcCi0oIFwKLQlBc3NlcnRNYWNybyhCbG9ja051bWJlcklz VmFsaWQoKHNjYW5wb3MpLmN1cnJQYWdlKSB8fCBcCi0JCQkJIUJ1ZmZlcklzVmFsaWQoKHNjYW5w b3MpLmJ1ZikpLCBcCi0JQmxvY2tOdW1iZXJJc1ZhbGlkKChzY2FucG9zKS5jdXJyUGFnZSkgXAot KQotI2RlZmluZSBCVFNjYW5Qb3NJbnZhbGlkYXRlKHNjYW5wb3MpIFwKLQlkbyB7IFwKLQkJKHNj YW5wb3MpLmJ1ZiA9IEludmFsaWRCdWZmZXI7IFwKLQkJKHNjYW5wb3MpLmN1cnJQYWdlID0gSW52 YWxpZEJsb2NrTnVtYmVyOyBcCi0JfSB3aGlsZSAoMCkKKy8qIEFjY2VzcyB0aGUgYnRyZWUtcHJp dmF0ZSBwZXItYmF0Y2ggZGF0YSBmcm9tIGFuIEluZGV4U2NhbkJhdGNoIHBvaW50ZXIgKi8KKyNk ZWZpbmUgQlRCYXRjaEdldERhdGEoc2NhbiwgYmF0Y2gpIFwKKwlpbmRleGFtX3V0aWxfYmF0Y2hf Z2V0X2FtZGF0YShzY2FuLCBiYXRjaCwgQlRCYXRjaERhdGEpCiAKIC8qIFdlIG5lZWQgb25lIG9m IHRoZXNlIGZvciBlYWNoIGVxdWFsaXR5LXR5cGUgU0tfU0VBUkNIQVJSQVkgc2NhbiBrZXkgKi8K IHR5cGVkZWYgc3RydWN0IEJUQXJyYXlLZXlJbmZvCkBAIC0xMDUwLDYgKzk2MCwyOCBAQCB0eXBl ZGVmIHN0cnVjdCBCVEFycmF5S2V5SW5mbwogCVNjYW5LZXkJCWhpZ2hfY29tcGFyZTsJLyogYXJy YXkncyA8IG9yIDw9IHVwcGVyIGJvdW5kICovCiB9IEJUQXJyYXlLZXlJbmZvOwogCisvKgorICog QlRTY2FuT3BhcXVlRGF0YSBpcyB0aGUgYnRyZWUtcHJpdmF0ZSBzdGF0ZSBuZWVkZWQgZm9yIGFu IGluZGV4c2Nhbi4KKyAqIFRoaXMgY29uc2lzdHMgb2YgcHJlcHJvY2Vzc2VkIHNjYW4ga2V5cyAo c2VlIF9idF9wcmVwcm9jZXNzX2tleXMoKSBmb3IKKyAqIGRldGFpbHMgb2YgdGhlIHByZXByb2Nl c3NpbmcpLCBhbmQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQgYXJyYXkKKyAqIGtleXMu ICBUaGVyZSBhcmUgYXNzdW1wdGlvbnMgYWJvdXQgaG93IHRoZSBjdXJyZW50IGFycmF5IGtleXMg dHJhY2sgdGhlCisgKiBwcm9ncmVzcyBvZiB0aGUgaW5kZXggc2NhbiB0aHJvdWdoIHRoZSBpbmRl eCdzIGtleSBzcGFjZSAoc2VlIF9idF9yZWFkcGFnZQorICogYW5kIF9idF9hZHZhbmNlX2FycmF5 X2tleXMpLCBidXQgd2UgZG9uJ3QgYWN0dWFsbHkgdHJhY2sgYW55dGhpbmcgYWJvdXQgdGhlCisg KiBjdXJyZW50IHNjYW4gcG9zaXRpb24gaW4gdGhpcyBvcGFxdWUgc3RydWN0LgorICoKKyAqIElu ZGV4IHNjYW5zIHdvcmsgYSBwYWdlIGF0IGEgdGltZSwgYXMgcmVxdWlyZWQgYnkgdGhlIGFtZ2V0 YmF0Y2ggY29udHJhY3Q6CisgKiB3ZSBwaW4gYW5kIHJlYWQtbG9jayB0aGUgcGFnZSwgaWRlbnRp ZnkgYWxsIHRoZSBtYXRjaGluZyBpdGVtcyBvbiB0aGUgcGFnZQorICogYW5kIHJldHVybiB0aGVt IGluIGEgbmV3bHkgYWxsb2NhdGVkIGJhdGNoLiAgV2UgdGhlbiByZWxlYXNlIHRoZSByZWFkLWxv Y2sKKyAqIHVzaW5nIGFtZ2V0YmF0Y2ggdXRpbGl0eSByb3V0aW5lcy4gIFRoaXMgYXBwcm9hY2gg bWluaW1pemVzIGxvY2svdW5sb2NrCisgKiB0cmFmZmljLiBfYnRfbmV4dCBpcyBwYXNzZWQgcHJp b3JiYXRjaCwgd2hpY2ggY29udGFpbnMgZGV0YWlscyBvZiB3aGljaAorICogcGFnZSBpcyBuZXh0 IGluIGxpbmUgdG8gYmUgcmVhZCAocHJpb3JiYXRjaCBpcyBwcm92aWRlZCBhcyBhbiBhcmd1bWVu dCB0bworICogYnRnZXRiYXRjaCBieSBjb3JlIGNvZGUpLgorICoKKyAqIElmIHdlIGFyZSBkb2lu ZyBhbiBpbmRleC1vbmx5IHNjYW4sIHdlIHNhdmUgdGhlIGVudGlyZSBJbmRleFR1cGxlIGZvciBl YWNoCisgKiBtYXRjaGVkIGl0ZW0sIG90aGVyd2lzZSBvbmx5IGl0cyBoZWFwIFRJRCBhbmQgb2Zm c2V0LiAgVGhpcyBpcyBhbHNvIHBlciB0aGUKKyAqIGFtZ2V0YmF0Y2ggY29udHJhY3QuICBQb3N0 aW5nIGxpc3QgdHVwbGVzIHN0b3JlIGEgImJhc2UiIHR1cGxlIG9uY2UsCisgKiBhbGxvd2luZyB0 aGUgc2FtZSBrZXkgdG8gYmUgcmV0dXJuZWQgZm9yIGVhY2ggVElEIGluIHRoZSBwb3N0aW5nIGxp c3QuCisgKi8KIHR5cGVkZWYgc3RydWN0IEJUU2Nhbk9wYXF1ZURhdGEKIHsKIAkvKiB0aGVzZSBm aWVsZHMgYXJlIHNldCBieSBfYnRfcHJlcHJvY2Vzc19rZXlzKCk6ICovCkBAIC0xMDY2LDMyICs5 OTgsNiBAQCB0eXBlZGVmIHN0cnVjdCBCVFNjYW5PcGFxdWVEYXRhCiAJQlRBcnJheUtleUluZm8g KmFycmF5S2V5czsJLyogaW5mbyBhYm91dCBlYWNoIGVxdWFsaXR5LXR5cGUgYXJyYXkga2V5ICov CiAJRm1nckluZm8gICAqb3JkZXJQcm9jczsJCS8qIE9SREVSIHByb2NzIGZvciByZXF1aXJlZCBl cXVhbGl0eSBrZXlzICovCiAJTWVtb3J5Q29udGV4dCBhcnJheUNvbnRleHQ7IC8qIHNjYW4tbGlm ZXNwYW4gY29udGV4dCBmb3IgYXJyYXkgZGF0YSAqLwotCi0JLyogaW5mbyBhYm91dCBraWxsZWQg aXRlbXMgaWYgYW55IChraWxsZWRJdGVtcyBpcyBOVUxMIGlmIG5ldmVyIHVzZWQpICovCi0JaW50 CQkgICAqa2lsbGVkSXRlbXM7CS8qIGN1cnJQb3MuaXRlbXMgaW5kZXhlcyBvZiBraWxsZWQgaXRl bXMgKi8KLQlpbnQJCQludW1LaWxsZWQ7CQkvKiBudW1iZXIgb2YgY3VycmVudGx5IHN0b3JlZCBp dGVtcyAqLwotCWJvb2wJCWRyb3BQaW47CQkvKiBkcm9wIGxlYWYgcGluIGJlZm9yZSBidGdldHR1 cGxlIHJldHVybnM/ICovCi0KLQkvKgotCSAqIElmIHdlIGFyZSBkb2luZyBhbiBpbmRleC1vbmx5 IHNjYW4sIHRoZXNlIGFyZSB0aGUgdHVwbGUgc3RvcmFnZQotCSAqIHdvcmtzcGFjZXMgZm9yIHRo ZSBjdXJyUG9zIGFuZCBtYXJrUG9zIHJlc3BlY3RpdmVseS4gIEVhY2ggaXMgb2Ygc2l6ZQotCSAq IEJMQ0tTWiwgc28gaXQgY2FuIGhvbGQgYXMgbXVjaCBhcyBhIGZ1bGwgcGFnZSdzIHdvcnRoIG9m IHR1cGxlcy4KLQkgKi8KLQljaGFyCSAgICpjdXJyVHVwbGVzOwkJLyogdHVwbGUgc3RvcmFnZSBm b3IgY3VyclBvcyAqLwotCWNoYXIJICAgKm1hcmtUdXBsZXM7CQkvKiB0dXBsZSBzdG9yYWdlIGZv ciBtYXJrUG9zICovCi0KLQkvKgotCSAqIElmIHRoZSBtYXJrZWQgcG9zaXRpb24gaXMgb24gdGhl IHNhbWUgcGFnZSBhcyBjdXJyZW50IHBvc2l0aW9uLCB3ZQotCSAqIGRvbid0IHVzZSBtYXJrUG9z LCBidXQganVzdCBrZWVwIHRoZSBtYXJrZWQgaXRlbUluZGV4IGluIG1hcmtJdGVtSW5kZXgKLQkg KiAoYWxsIHRoZSByZXN0IG9mIGN1cnJQb3MgaXMgdmFsaWQgZm9yIHRoZSBtYXJrIHBvc2l0aW9u KS4gSGVuY2UsIHRvCi0JICogZGV0ZXJtaW5lIGlmIHRoZXJlIGlzIGEgbWFyaywgZmlyc3QgbG9v ayBhdCBtYXJrSXRlbUluZGV4LCB0aGVuIGF0Ci0JICogbWFya1Bvcy4KLQkgKi8KLQlpbnQJCQlt YXJrSXRlbUluZGV4OwkvKiBpdGVtSW5kZXgsIG9yIC0xIGlmIG5vdCB2YWxpZCAqLwotCi0JLyog a2VlcCB0aGVzZSBsYXN0IGluIHN0cnVjdCBmb3IgZWZmaWNpZW5jeSAqLwotCUJUU2NhblBvc0Rh dGEgY3VyclBvczsJCS8qIGN1cnJlbnQgcG9zaXRpb24gZGF0YSAqLwotCUJUU2NhblBvc0RhdGEg bWFya1BvczsJCS8qIG1hcmtlZCBwb3NpdGlvbiwgaWYgYW55ICovCiB9IEJUU2Nhbk9wYXF1ZURh dGE7CiAKIHR5cGVkZWYgQlRTY2FuT3BhcXVlRGF0YSAqQlRTY2FuT3BhcXVlOwpAQCAtMTE2MCwx NCArMTA2NiwxNyBAQCBleHRlcm4gYm9vbCBidGluc2VydChSZWxhdGlvbiByZWwsIERhdHVtICp2 YWx1ZXMsIGJvb2wgKmlzbnVsbCwKIGV4dGVybiBJbmRleFNjYW5EZXNjIGJ0YmVnaW5zY2FuKFJl bGF0aW9uIHJlbCwgaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzKTsKIGV4dGVybiBTaXplIGJ0ZXN0 aW1hdGVwYXJhbGxlbHNjYW4oUmVsYXRpb24gcmVsLCBpbnQgbmtleXMsIGludCBub3JkZXJieXMp OwogZXh0ZXJuIHZvaWQgYnRpbml0cGFyYWxsZWxzY2FuKHZvaWQgKnRhcmdldCk7Ci1leHRlcm4g Ym9vbCBidGdldHR1cGxlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpOwor ZXh0ZXJuIEluZGV4U2NhbkJhdGNoIGJ0Z2V0YmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJ CQkJCQkgSW5kZXhTY2FuQmF0Y2ggcHJpb3JiYXRjaCwKKwkJCQkJCQkJIFNjYW5EaXJlY3Rpb24g ZGlyKTsKIGV4dGVybiBpbnQ2NCBidGdldGJpdG1hcChJbmRleFNjYW5EZXNjIHNjYW4sIFRJREJp dG1hcCAqdGJtKTsKIGV4dGVybiB2b2lkIGJ0cmVzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2Nh bktleSBzY2Fua2V5LCBpbnQgbnNjYW5rZXlzLAogCQkJCQkgU2NhbktleSBvcmRlcmJ5cywgaW50 IG5vcmRlcmJ5cyk7CitleHRlcm4gdm9pZCBidGtpbGxpdGVtc2JhdGNoKEluZGV4U2NhbkRlc2Mg c2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpOworZXh0ZXJuIHZvaWQgYnR1bmd1YXJkYmF0Y2go SW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCk7CiBleHRlcm4gdm9pZCBi dHBhcmFsbGVscmVzY2FuKEluZGV4U2NhbkRlc2Mgc2Nhbik7CiBleHRlcm4gdm9pZCBidGVuZHNj YW4oSW5kZXhTY2FuRGVzYyBzY2FuKTsKLWV4dGVybiB2b2lkIGJ0bWFya3BvcyhJbmRleFNjYW5E ZXNjIHNjYW4pOwotZXh0ZXJuIHZvaWQgYnRyZXN0cnBvcyhJbmRleFNjYW5EZXNjIHNjYW4pOwor ZXh0ZXJuIHZvaWQgYnRwb3NyZXNldChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNo IGJhdGNoKTsKIGV4dGVybiBJbmRleEJ1bGtEZWxldGVSZXN1bHQgKmJ0YnVsa2RlbGV0ZShJbmRl eFZhY3V1bUluZm8gKmluZm8sCiAJCQkJCQkJCQkJICAgSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICpz dGF0cywKIAkJCQkJCQkJCQkgICBJbmRleEJ1bGtEZWxldGVDYWxsYmFjayBjYWxsYmFjaywKQEAg LTEyNzEsOCArMTE4MCw5IEBAIGV4dGVybiB2b2lkIF9idF9wcmVwcm9jZXNzX2tleXMoSW5kZXhT Y2FuRGVzYyBzY2FuKTsKIC8qCiAgKiBwcm90b3R5cGVzIGZvciBmdW5jdGlvbnMgaW4gbmJ0cmVh ZHBhZ2UuYwogICovCi1leHRlcm4gYm9vbCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2Fu LCBTY2FuRGlyZWN0aW9uIGRpciwKLQkJCQkJCSBPZmZzZXROdW1iZXIgb2ZmbnVtLCBib29sIGZp cnN0cGFnZSk7CitleHRlcm4gYm9vbCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBJ bmRleFNjYW5CYXRjaCBuZXdiYXRjaCwKKwkJCQkJCSBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0 TnVtYmVyIG9mZm51bSwKKwkJCQkJCSBib29sIGZpcnN0cGFnZSk7CiBleHRlcm4gdm9pZCBfYnRf c3RhcnRfYXJyYXlfa2V5cyhJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsK IGV4dGVybiBpbnQJX2J0X2JpbnNyY2hfYXJyYXlfc2tleShGbWdySW5mbyAqb3JkZXJwcm9jLAog CQkJCQkJCQkgICBib29sIGN1cl9lbGVtX3RyaWcsIFNjYW5EaXJlY3Rpb24gZGlyLApAQCAtMTI4 NywxNSArMTE5NywxNSBAQCBleHRlcm4gQlRTdGFjayBfYnRfc2VhcmNoKFJlbGF0aW9uIHJlbCwg UmVsYXRpb24gaGVhcHJlbCwgQlRTY2FuSW5zZXJ0IGtleSwKIAkJCQkJCSAgQnVmZmVyICpidWZQ LCBpbnQgYWNjZXNzLCBib29sIHJldHVybnN0YWNrKTsKIGV4dGVybiBPZmZzZXROdW1iZXIgX2J0 X2JpbnNyY2hfaW5zZXJ0KFJlbGF0aW9uIHJlbCwgQlRJbnNlcnRTdGF0ZSBpbnNlcnRzdGF0ZSk7 CiBleHRlcm4gaW50MzIgX2J0X2NvbXBhcmUoUmVsYXRpb24gcmVsLCBCVFNjYW5JbnNlcnQga2V5 LCBQYWdlIHBhZ2UsIE9mZnNldE51bWJlciBvZmZudW0pOwotZXh0ZXJuIGJvb2wgX2J0X2ZpcnN0 KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpOwotZXh0ZXJuIGJvb2wgX2J0 X25leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcik7CitleHRlcm4gSW5k ZXhTY2FuQmF0Y2ggX2J0X2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBk aXIpOworZXh0ZXJuIEluZGV4U2NhbkJhdGNoIF9idF9uZXh0KEluZGV4U2NhbkRlc2Mgc2Nhbiwg U2NhbkRpcmVjdGlvbiBkaXIsCisJCQkJCQkJICAgSW5kZXhTY2FuQmF0Y2ggcHJpb3JiYXRjaCk7 CiBleHRlcm4gQnVmZmVyIF9idF9nZXRfZW5kcG9pbnQoUmVsYXRpb24gcmVsLCB1aW50MzIgbGV2 ZWwsIGJvb2wgcmlnaHRtb3N0KTsKIAogLyoKICAqIHByb3RvdHlwZXMgZm9yIGZ1bmN0aW9ucyBp biBuYnR1dGlscy5jCiAgKi8KIGV4dGVybiBCVFNjYW5JbnNlcnQgX2J0X21rc2NhbmtleShSZWxh dGlvbiByZWwsIEluZGV4VHVwbGUgaXR1cCk7Ci1leHRlcm4gdm9pZCBfYnRfa2lsbGl0ZW1zKElu ZGV4U2NhbkRlc2Mgc2Nhbik7CiBleHRlcm4gQlRDeWNsZUlkIF9idF92YWN1dW1fY3ljbGVpZChS ZWxhdGlvbiByZWwpOwogZXh0ZXJuIEJUQ3ljbGVJZCBfYnRfc3RhcnRfdmFjdXVtKFJlbGF0aW9u IHJlbCk7CiBleHRlcm4gdm9pZCBfYnRfZW5kX3ZhY3V1bShSZWxhdGlvbiByZWwpOwpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9y ZWxzY2FuLmgKaW5kZXggMGZmMTU4ZDVkLi5lMjM1NDA4NTEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL2FjY2Vzcy9yZWxzY2FuLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaApA QCAtMTI2LDYgKzEyNiwxMiBAQCB0eXBlZGVmIHN0cnVjdCBQYXJhbGxlbEJsb2NrVGFibGVTY2Fu V29ya2VyRGF0YSAqUGFyYWxsZWxCbG9ja1RhYmxlU2NhbldvcmtlcjsKICAqLwogdHlwZWRlZiBz dHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YQogeworCS8qIFRhYmxlIEFNIHBlci1iYXRjaCBvcGFx dWUgYXJlYSBzaXplIChNQVhBTElHTidkKSwgc2V0IGJ5IEFNICovCisJdWludDE2CQliYXRjaF9v cGFxdWVfc2l6ZTsKKworCS8qIFBlci1pdGVtIHRyYWlsaW5nIGRhdGEgc2l6ZSBpbiBlYWNoIGJh dGNoICovCisJdWludDE2CQliYXRjaF9wZXJfaXRlbV9zaXplOworCiAJLyoKIAkgKiBCaXRtYXNr IG9mIFNjYW5PcHRpb25zIGFmZmVjdGluZyB0aGUgcmVsYXRpb24uIE5vIFNPX0lOVEVSTkFMX0ZM QUdTIGFyZQogCSAqIHBlcm1pdHRlZC4KQEAgLTEzMywxMyArMTM5LDE4NiBAQCB0eXBlZGVmIHN0 cnVjdCBJbmRleEZldGNoVGFibGVEYXRhCiAJdWludDMyCQlmbGFnczsKIH0gSW5kZXhGZXRjaFRh YmxlRGF0YTsKIAorLyoKKyAqIExvY2F0aW9uIG9mIGEgQmF0Y2hNYXRjaGluZ0l0ZW0gd2l0aGlu IHRoZSBzY2FuJ3MgcmluZyBidWZmZXIKKyAqLwordHlwZWRlZiBzdHJ1Y3QgQmF0Y2hSaW5nSXRl bVBvcworeworCS8qIFBvc2l0aW9uIHJlZmVyZW5jZXMgYSB2YWxpZCBJbmRleFNjYW5EZXNjRGF0 YS5iYXRjaGJ1ZltdIGVudHJ5PyAqLworCWJvb2wJCXZhbGlkOworCisJLyogSW5kZXhTY2FuRGVz Y0RhdGEuYmF0Y2hidWZbXS13aXNlIGluZGV4IHRvIHJlbGV2YW50IEluZGV4U2NhbkJhdGNoICov CisJdWludDgJCWJhdGNoOworCisJLyogSW5kZXhTY2FuQmF0Y2guaXRlbXNbXS13aXNlIGluZGV4 IHRvIHJlbGV2YW50IEJhdGNoTWF0Y2hpbmdJdGVtICovCisJaW50CQkJaXRlbTsKKworfSBCYXRj aFJpbmdJdGVtUG9zOworCisvKgorICogTWF0Y2hpbmcgaXRlbSByZXR1cm5lZCBieSBhbWdldGJh dGNoIChpbiByZXR1cm5lZCBJbmRleFNjYW5CYXRjaCkgZHVyaW5nIGFuCisgKiBpbmRleCBzY2Fu LiAgVXNlZCBieSB0YWJsZSBBTSB0byBsb2NhdGUgcmVsZXZhbnQgbWF0Y2hpbmcgdGFibGUgdHVw bGUuCisgKi8KK3R5cGVkZWYgc3RydWN0IEJhdGNoTWF0Y2hpbmdJdGVtCit7CisJSXRlbVBvaW50 ZXJEYXRhIHRhYmxlVGlkOwkvKiBUSUQgb2YgcmVmZXJlbmNlZCB0YWJsZSBpdGVtICovCisJT2Zm c2V0TnVtYmVyIGluZGV4T2Zmc2V0OwkvKiBpbmRleCBpdGVtJ3MgbG9jYXRpb24gd2l0aGluIHBh Z2UgKi8KKwlMb2NhdGlvbkluZGV4IHR1cGxlT2Zmc2V0OwkvKiBpbmRleCB0dXBsZSdzIGN1cnJU dXBsZXMgb2Zmc2V0LCBpZiBhbnkgKi8KK30gQmF0Y2hNYXRjaGluZ0l0ZW07CisKKy8qCisgKiBE YXRhIGFib3V0IG9uZSBiYXRjaCBvZiBpdGVtcyByZXR1cm5lZCBieSAoYW5kIHBhc3NlZCB0bykg YW1nZXRiYXRjaCBkdXJpbmcKKyAqIGluZGV4IHNjYW5zLgorICoKKyAqIEVhY2ggYmF0Y2ggYWxs b2NhdGlvbiBoYXMgdGhlIGZvbGxvd2luZyBtZW1vcnkgbGF5b3V0OgorICoKKyAqICAgW3RhYmxl IEFNIG9wYXF1ZSBhcmVhXSAgICA8LSBmaXhlZC1zaXplLCAtKGJhdGNoX3RhYmxlX29mZnNldCkg ZnJvbSBiYXNlCisgKiAgIFtpbmRleCBBTSBvcGFxdWUgYXJlYV0gICAgPC0gYXQgLShiYXRjaF9p bmRleF9vcGFxdWVfc2l6ZSkgZnJvbSBiYXNlCisgKiAgIFtJbmRleFNjYW5CYXRjaERhdGFdICAg ICAgPC0gYmFzZSBwb2ludGVyLCByZXR1cm5lZCBieSBhbWdldGJhdGNoCisgKiAgIFtpdGVtc1tt YXhpdGVtc2JhdGNoXV0KKyAqICAgW3RhYmxlIEFNIHRyYWlsaW5nIGRhdGFdICA8LSBwZXItaXRl bSBhcmVhIChlLmcuLCBmb3IgdmlzaWJpbGl0eSBpbmZvKQorICogICBbY3VyclR1cGxlcyB3b3Jr c3BhY2VdICAgIDwtIGluZGV4IEFNIHN0b3JlcyBpbmRleCB0dXBsZXMgaGVyZSBmb3IKKyAqICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleC1vbmx5IHNjYW5zIChiYXRjaF90dXBs ZXNfd29ya3NwYWNlKQorICoKKyAqIGJhdGNoX3RhYmxlX29mZnNldCBjb21iaW5lcyBib3RoIEFN IG9wYXF1ZSBzaXplcyBpbnRvIGEgc2luZ2xlIG9mZnNldCBmcm9tCisgKiB0aGUgYmF0Y2ggcG9p bnRlciB0byB0aGUgdHJ1ZSBhbGxvY2F0aW9uIGJhc2UuICBXZSB1c2UgYmF0Y2hfYWxsb2NfYmFz ZSB0bworICogcGZyZWUgYSBiYXRjaC4gIFdlIHJlbHkgb24gdGhlIGFzc3VtcHRpb24gdGhhdCBi YXRjaGVzIGhhdmUgYSBmaXhlZCBsYXlvdXQKKyAqIGZvciB0aGUgZHVyYXRpb24gb2YgYW4gaW5k ZXggc2NhbiAoc2luY2UgYmF0Y2hlcyBhcmUgY2FjaGVkIGZvciByZXVzZSkuCisgKgorICogVGhl IHRhYmxlIEFNIGNhbiBvdmVybGF5IGEgc21hbGwgZml4ZWQtc2l6ZSBzdHJ1Y3QgYXQgdGhlIHN0 YXJ0IG9mIHRoZQorICogYWxsb2NhdGVkIHNwYWNlLCB3aGljaCBpdCBhY2Nlc3NlcyB1c2luZyBh IGJhdGNoX2FsbG9jX2Jhc2Ugc2hpbSBhY2Nlc3NvcgorICogZnVuY3Rpb24uICBDb252ZW50aW9u IGZvciB0YWJsZSBBTXMgaXMgdG8gc3RvcmUgYSBwb2ludGVyIHRvIGl0cyBwZXItaXRlbQorICog YXJlYSBpbiB0aGlzIGZpeGVkLXNpemUgYXJlYSAoZS5nLiwgaGVhcGFtIHN0b3JlcyBhIHZpc0lu Zm8gcG9pbnRlciBoZXJlKSwKKyAqIGluIGFkZGl0aW9uIHRvIGFueXRoaW5nIGVsc2UgdGhhdCBn ZXRzIHRyYWNrZWQgYXQgdGhlIGJhdGNoIGxldmVsLgorICoKKyAqIFRoZSBpbmRleCBBTSBvcGFx dWUgYXJlYSBpcyBhY2Nlc3NlZCB2aWEgYSBjdXN0b20gYWNjZXNzb3IgdGhhdCB1c2VzIGEKKyAq IGZpeGVkIGNvbXBpbGUtdGltZSBjb25zdGFudCBvZmZzZXQgZm9yIGVmZmljaWVuY3kgKGEgY29u c3RhbnQgdGhhdCBpcworICogdHJhY2tlZCBpbiB0aGUgc2NhbiBkZXNjcmlwdG9yIGFzIGJhdGNo X2luZGV4X29wYXF1ZV9zaXplKS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuQmF0Y2hE YXRhCit7CisJLyogSW5kZXggcGFnZSdzIExTTiwgb3B0aW9uYWxseSB1c2VkIGJ5IGFta2lsbGl0 ZW1zYmF0Y2ggcm91dGluZXMgKi8KKwlYTG9nUmVjUHRyCWxzbjsKKworCS8qIHNjYW4gZGlyZWN0 aW9uIHdoZW4gdGhlIGluZGV4IHBhZ2Ugd2FzIHJlYWQgKi8KKwlTY2FuRGlyZWN0aW9uIGRpcjsK KworCS8qCisJICoga25vd25FbmRCYWNrd2FyZCBhbmQga25vd25FbmRGb3J3YXJkIGluZGljYXRl IHRoYXQgdGhpcyBiYXRjaCBpcyB0aGUKKwkgKiBsYXN0IG9uZSB3aXRoIG1hdGNoaW5nIGl0ZW1z IGluIHRoZSByZWxldmFudCBzY2FuIGRpcmVjdGlvbi4gIFdoZW4KKwkgKiBhbWdldGJhdGNoIHJl dHVybnMgTlVMTCBmb3IgYSBnaXZlbiBkaXJlY3Rpb24sIHRoZSBjb3JyZXNwb25kaW5nIGZsYWcK KwkgKiBpcyBzZXQgb24gdGhlIHByaW9yYmF0Y2ggdGhhdCB3YXMgcGFzc2VkIHRvIHRoYXQgY2Fs bC4gIFdlIGNhbm5vdCBrbm93CisJICogdGhpcyB3aGVuIGEgYmF0Y2ggaXMgZmlyc3QgcmV0dXJu ZWQgYnkgYW1nZXRiYXRjaDsgaXQgb25seSBiZWNvbWVzCisJICogYXBwYXJlbnQgd2hlbiB3ZSB0 cnkgYW5kIGZhaWwgdG8gY29udGludWUgdGhlIHNjYW4gcGFzdCBpdC4KKwkgKgorCSAqIFRoaXMg YWxsb3dzIHRhYmxlIEFNcyB0byBhdm9pZCByZWR1bmRhbnQgYW1nZXRiYXRjaCBjYWxscyB3aXRo IHRoZSBzYW1lCisJICogcHJpb3JiYXRjaCAtLSB0aGUgaW5kZXggQU0gbWlnaHQgbmVlZCB0byBy ZWFkIGFkZGl0aW9uYWwgaW5kZXggcGFnZXMgdG8KKwkgKiBkZXRlcm1pbmUgdGhlcmUgYXJlIG5v IG1vcmUgbWF0Y2hpbmcgaXRlbXMgYmV5b25kIGNhbGxlcidzIHByaW9yYmF0Y2guCisJICovCisJ Ym9vbAkJa25vd25FbmRCYWNrd2FyZDsKKwlib29sCQlrbm93bkVuZEZvcndhcmQ7CisKKwkvKgor CSAqIEJhdGNoIHN0aWxsIGhvbGRzIFRJRCByZWN5Y2xpbmcgaW50ZXJsb2NrPworCSAqLworCWJv b2wJCWlzR3VhcmRlZDsKKworCS8qCisJICogTWF0Y2hpbmcgaXRlbXMgc3RhdGUgZm9yIHRoaXMg YmF0Y2guICBPdXRwdXQgYnkgaW5kZXggQU0gZm9yIHRhYmxlIEFNLgorCSAqCisJICogVGhlIGl0 ZW1zIGFycmF5IGlzIGFsd2F5cyBvcmRlcmVkIGluIGluZGV4IG9yZGVyIChpZSwgYnkgaW5jcmVh c2luZworCSAqIGluZGV4b2Zmc2V0KS4gIFdoZW4gc2Nhbm5pbmcgYmFja3dhcmRzIGl0IGlzIGNv bnZlbmllbnQgZm9yIGluZGV4IEFNcworCSAqIHRvIGZpbGwgdGhlIGFycmF5IGJhY2stdG8tZnJv bnQsIHN0YXJ0aW5nIGF0IHRoZSBsYXN0IGl0ZW0gc2xvdCBhbmQKKwkgKiBmaWxsaW5nIGRvd253 YXJkcy4gIFRoaXMgaXMgd2h5IHdlIG5lZWQgYm90aCBhIGZpcnN0LXZhbGlkLWVudHJ5IGFuZCBh CisJICogbGFzdC12YWxpZC1lbnRyeSBjb3VudGVyLgorCSAqCisJICogTm90ZTogdGhlc2UgYXJl IHNpZ25lZCBiZWNhdXNlIGl0J3Mgc29tZXRpbWVzIGNvbnZlbmllbnQgdG8gdXNlIC0xIHRvCisJ ICogcmVwcmVzZW50IGFuIG91dC1vZi1ib3VuZHMgc3BhY2UganVzdCBiZWZvcmUgZmlyc3RJdGVt ICh3aGVuIGl0J3MgMCkuCisJICovCisJaW50CQkJZmlyc3RJdGVtOwkJLyogZmlyc3QgdmFsaWQg aW5kZXggaW4gaXRlbXNbXSAqLworCWludAkJCWxhc3RJdGVtOwkJLyogbGFzdCB2YWxpZCBpbmRl eCBpbiBpdGVtc1tdICovCisKKwkvKiBpbmZvIGFib3V0IGRlYWQgaXRlbXMsIGlmIGFueSAocGFs bG9jJ2Qgc2VwYXJhdGVseSwgTlVMTCBpZiB1bnVzZWQpICovCisJaW50CQkJbnVtRGVhZDsJCS8q IG51bWJlciBvZiBjdXJyZW50bHkgc3RvcmVkIGl0ZW1zICovCisJaW50CQkgICAqZGVhZEl0ZW1z OwkJLyogaXRlbXNbXS13aXNlIGluZGV4ZXMgb2YgZGVhZCBpdGVtcyAqLworCisJLyoKKwkgKiBJ ZiB3ZSBhcmUgZG9pbmcgYW4gaW5kZXgtb25seSBzY2FuLCB0aGlzIGlzIHRoZSB0dXBsZSBzdG9y YWdlIHdvcmtzcGFjZQorCSAqIGZvciB0aGUgbWF0Y2hpbmcgdHVwbGVzICh0dXBsZXMgcmVmZXJl bmNlZCBieSBpdGVtc1tdKS4gIFRoZSB3b3Jrc3BhY2UKKwkgKiBzaXplIGlzIGRldGVybWluZWQg YnkgdGhlIGluZGV4IEFNIChiYXRjaF90dXBsZXNfd29ya3NwYWNlKS4KKwkgKgorCSAqIGN1cnJU dXBsZXMgcG9pbnRzIGludG8gdGhlIHRyYWlsaW5nIHBvcnRpb24gb2YgdGhpcyBhbGxvY2F0aW9u LCBwYXN0CisJICogaXRlbXNbXSBhbmQgYW55IHRhYmxlIEFNIHRyYWlsaW5nIGRhdGEuICBJdCBp cyBOVUxMIGZvciBwbGFpbiBpbmRleAorCSAqIHNjYW5zLgorCSAqLworCWNoYXIJICAgKmN1cnJU dXBsZXM7CQkvKiB0dXBsZSBzdG9yYWdlIGZvciBpdGVtc1tdICovCisJQmF0Y2hNYXRjaGluZ0l0 ZW0gaXRlbXNbRkxFWElCTEVfQVJSQVlfTUVNQkVSXTsgLyogbWF0Y2hpbmcgaXRlbXMgKi8KK30g SW5kZXhTY2FuQmF0Y2hEYXRhOworCit0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5CYXRjaERhdGEg KkluZGV4U2NhbkJhdGNoOworCisvKgorICogU3RhdGUgdXNlZCBieSB0YWJsZSBBTXMgdG8gbWFu YWdlIGFuIGluZGV4IHNjYW4gdGhhdCB1c2VzIHRoZSBhbWdldGJhdGNoCisgKiBpbnRlcmZhY2Uu ICBTY2FucyB1c2UgYSByaW5nIGJ1ZmZlciBvZiBiYXRjaGVzIHJldHVybmVkIGJ5IGFtZ2V0YmF0 Y2guCisgKgorICogQmF0Y2hlcyBhcmUga2VwdCBpbiB0aGUgb3JkZXIgdGhhdCB0aGV5IHdlcmUg cmV0dXJuZWQgaW4gYnkgYW1nZXRiYXRjaCwKKyAqIHdoaWNoIGlzIHRoZSBuYXR1cmFsIG9yZGVy IGZvciB0aGUgaW5kZXggQU0gYW5kIHRoZSBvcmRlciB0aGF0IHdlIHJlcXVpcmUKKyAqIG1hdGNo ZXMgdG8gYmUgcmV0dXJuZWQgaW4uICBUaGlzIGlzIGFsc28gdGhlIG9yZGVyIHRoYXQKKyAqIHRh YmxlX2luZGV4X2dldG5leHRfc2xvdCByZXR1cm5zIG1hdGNoZXMgaW4uICBIb3dldmVyLCB0YWJs ZSBBTXMgYXJlIGZyZWUKKyAqIHRvIGZldGNoIHRhYmxlIHR1cGxlcyBpbiB3aGF0ZXZlciBvcmRl ciBpcyBtb3N0IGNvbnZlbmllbnQgLS0gcHJvdmlkZWQgdGhhdAorICogc3VjaCByZW9yZGVyaW5n IGNhbm5vdCBhZmZlY3QgdGhlIG9yZGVyIHRoYXQgdGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90IGxh dGVyCisgKiByZXR1cm5zIHR1cGxlcyBpbi4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgQmF0Y2hSaW5n QnVmZmVyCit7CisJLyogY3VycmVudCBwb3NpdGlvbnMgaW4gSW5kZXhTY2FuRGVzY0RhdGEuYmF0 Y2hidWZbXSBmb3Igc2NhbiAqLworCUJhdGNoUmluZ0l0ZW1Qb3Mgc2NhblBvczsJLyogc2Nhbidz IHJlYWQgcG9zaXRpb24gKi8KKwlCYXRjaFJpbmdJdGVtUG9zIG1hcmtQb3M7CS8qIG1hcmsvcmVz dG9yZSBwb3NpdGlvbiAqLworCisJLyogbWFya1BvcydzIGJhdGNoIChub3QgaW4gcmluZyBidWZm ZXIgd2hlbiBtYXJrQmF0Y2ggIT0gc2NhbkJhdGNoKSAqLworCUluZGV4U2NhbkJhdGNoIG1hcmtC YXRjaDsKKworCS8qCisJICogaGVhZEJhdGNoIGlzIGFuIGluZGV4IHRvIHRoZSBlYXJsaWVzdCBz dGlsbC12YWxpZCByaW5nIGJ1ZmZlciBiYXRjaAorCSAqIHNsb3QgaW4gYmF0Y2hidWZbXS4gIFRo ZSBhY3R1YWwgYXJyYXkgcG9zaXRpb24gZm9yIGl0cyBJbmRleFNjYW5CYXRjaAorCSAqIGlzIGhl YWRCYXRjaCAmIChJTkRFWF9TQ0FOX01BWF9CQVRDSEVTIC0gMSksIHNpbmNlIHRoZXNlIGluZGV4 ZXMgdXNlCisJICogdW5zaWduZWQgd3JhcHBpbmcgYXJpdGhtZXRpYy4gIGhlYWRCYXRjaCBtdXN0 IGJlIHRoZSBzY2FuJ3MgY3VycmVudAorCSAqIHNjYW5CYXRjaCAoaS5lLiB0aGUgY3VycmVudCBz Y2FuUG9zIGJhdGNoKS4KKwkgKi8KKwl1aW50OAkJaGVhZEJhdGNoOworCisJLyoKKwkgKiBuZXh0 QmF0Y2ggaXMgYW4gaW5kZXggdG8gdGhlIG5leHQgX2VtcHR5XyByaW5nIGJ1ZmZlciBiYXRjaCBz bG90IGluCisJICogYmF0Y2hidWZbXS4gIEFzIHdpdGggaGVhZEJhdGNoLCB0aGUgYWN0dWFsIGJh dGNoYnVmW10gYXJyYXkgcG9zaXRpb24gaXMKKwkgKiBuZXh0QmF0Y2ggJiAoSU5ERVhfU0NBTl9N QVhfQkFUQ0hFUyAtIDEpLiAgQSBuZXcgYmF0Y2ggY2FuIG9ubHkgYmUKKwkgKiBhcHBlbmRlZCB0 byB0aGlzIHBvc2l0aW9uL3Nsb3Qgd2hlbiAhaW5kZXhfc2Nhbl9iYXRjaF9mdWxsKCkuCisJICoK KwkgKiBOb3RlOiB0aGUgc2NhbidzIG1vc3QgcmVjZW50bHkgYXBwZW5kZWQgYmF0Y2ggKGl0cyB0 YWlsIGJhdGNoKSBpcworCSAqIGFsd2F5cyBsb2NhdGVkIGF0IChuZXh0QmF0Y2ggLSAxKSAmIChJ TkRFWF9TQ0FOX01BWF9CQVRDSEVTIC0gMSkuCisJICovCisJdWludDgJCW5leHRCYXRjaDsKK30g QmF0Y2hSaW5nQnVmZmVyOworCiBzdHJ1Y3QgSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uOwogCiAv KgogICogV2UgdXNlIHRoZSBzYW1lIEluZGV4U2NhbkRlc2NEYXRhIHN0cnVjdHVyZSBmb3IgYm90 aCBhbWdldHR1cGxlLWJhc2VkCiAgKiBhbmQgYW1nZXRiaXRtYXAtYmFzZWQgaW5kZXggc2NhbnMu ICBTb21lIGZpZWxkcyBhcmUgb25seSByZWxldmFudCBpbgotICogYW1nZXR0dXBsZS1iYXNlZCBz Y2Fucy4KKyAqIGFtZ2V0dHVwbGUtYmFzZWQgc2NhbnMuICBPdGhlcnMgYXJlIG9ubHkgdXNlZCBp biBhbWdldGJhdGNoLWJhc2VkIHNjYW5zLgorICoKKyAqIFRoZSByaW5nIGJ1ZmZlciB1c2VkIGJ5 IGFtZ2V0YmF0Y2ggc2NhbnMgaXMgc3RvcmVkIGhlcmUgYXMgYSBmaXhlZCBhcnJheSBvZgorICog cG9pbnRlcnMgdG8gYmF0Y2hlcy4gIFdlIG5lZWQgYSBtaW5pbXVtIG9mIHR3byAoYnV0IHVzZQor ICogSU5ERVhfU0NBTl9NQVhfQkFUQ0hFUyksIHNpbmNlIHdlJ2xsIG9ubHkgY29uc2lkZXIgcmVs ZWFzaW5nIG9uZSBiYXRjaAorICogd2hlbiBhbm90aGVyIGlzIHJlYWQuCiAgKi8KKyNkZWZpbmUg SU5ERVhfU0NBTl9DQUNIRV9CQVRDSEVTCTIKKyNkZWZpbmUgSU5ERVhfU0NBTl9NQVhfQkFUQ0hF UwkJNjQKKworU3RhdGljQXNzZXJ0RGVjbChJTkRFWF9TQ0FOX01BWF9CQVRDSEVTIDw9IFBHX1VJ TlQ4X01BWCArIDEsCisJCQkJICJJTkRFWF9TQ0FOX01BWF9CQVRDSEVTIG11c3QgZml0IGluIHVp bnQ4IHJpbmcgYnVmZmVyIGluZGV4ZXMiKTsKK1N0YXRpY0Fzc2VydERlY2woKElOREVYX1NDQU5f TUFYX0JBVENIRVMgJiAoSU5ERVhfU0NBTl9NQVhfQkFUQ0hFUyAtIDEpKSA9PSAwLAorCQkJCSAi SU5ERVhfU0NBTl9NQVhfQkFUQ0hFUyBtdXN0IGJlIGEgcG93ZXIgb2YgMiIpOworCiB0eXBlZGVm IHN0cnVjdCBJbmRleFNjYW5EZXNjRGF0YQogewogCS8qIHNjYW4gcGFyYW1ldGVycyAqLwpAQCAt MTUwLDYgKzMyOSwyNiBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5EZXNjRGF0YQogCWludAkJ CW51bWJlck9mT3JkZXJCeXM7CS8qIG51bWJlciBvZiBvcmRlcmluZyBvcGVyYXRvcnMgKi8KIAlz dHJ1Y3QgU2NhbktleURhdGEgKmtleURhdGE7CS8qIGFycmF5IG9mIGluZGV4IHF1YWxpZmllciBk ZXNjcmlwdG9ycyAqLwogCXN0cnVjdCBTY2FuS2V5RGF0YSAqb3JkZXJCeURhdGE7CS8qIGFycmF5 IG9mIG9yZGVyaW5nIG9wIGRlc2NyaXB0b3JzICovCisKKwkvKiBpbmRleCBhY2Nlc3MgbWV0aG9k J3MgcHJpdmF0ZSBzdGF0ZSAqLworCXZvaWQJICAgKm9wYXF1ZTsJCQkvKiBhY2Nlc3MtbWV0aG9k LXNwZWNpZmljIGluZm8gKi8KKworCS8qIHNjYW4ncyBhbWdldGJhdGNoIHN0YXRlIChvbmx5IHVz ZWQgYnkgYW1nZXRiYXRjaC91c2ViYXRjaHJpbmcgc2NhbnMpICovCisJQmF0Y2hSaW5nQnVmZmVy IGJhdGNocmluZ2J1ZjsKKworCS8qCisJICogQXJyYXkgb2YgcG9pbnRlcnMgdG8gcmVjeWNsYWJs ZSBiYXRjaGVzLCB1c2VkIGJ5IGFsbCBhbWdldGJhdGNoIHNjYW5zCisJICogYW5kIGJ5IGFtZ2V0 Yml0bWFwIHNjYW5zIG9mIGFuIGluZGV4IEFNIHRoYXQgc3VwcG9ydHMgYW1nZXRiYXRjaAorCSAq LworCUluZGV4U2NhbkJhdGNoIGJhdGNoY2FjaGVbSU5ERVhfU0NBTl9DQUNIRV9CQVRDSEVTXTsK KworCS8qIEFycmF5IG9mIHBvaW50ZXJzIHRvIGJhdGNoZXMsIHJlZmVyZW5jZWQgd2l0aGluIGJh dGNocmluZ2J1ZiAqLworCUluZGV4U2NhbkJhdGNoIGJhdGNoYnVmW0lOREVYX1NDQU5fTUFYX0JB VENIRVNdOworCisJYm9vbAkJdXNlYmF0Y2hyaW5nOwkvKiBzY2FuIHVzZXMgYW1nZXRiYXRjaC9i YXRjaHJpbmdidWY/ICovCisJYm9vbAkJYmF0Y2hJbW1lZGlhdGVVbmd1YXJkOwkvKiBlYWdlcmx5 IGRyb3AgVElEIHJlY3ljbGluZworCQkJCQkJCQkJCSAqIGludGVybG9jaz8gKi8KKwogCWJvb2wJ CXhzX3dhbnRfaXR1cDsJLyogY2FsbGVyIHJlcXVlc3RzIGluZGV4IHR1cGxlcyAqLwogCWJvb2wJ CXhzX3RlbXBfc25hcDsJLyogdW5yZWdpc3RlciBzbmFwc2hvdCBhdCBzY2FuIGVuZD8gKi8KIApA QCAtMTU4LDkgKzM1Nyw4IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4U2NhbkRlc2NEYXRhCiAJYm9v bAkJaWdub3JlX2tpbGxlZF90dXBsZXM7CS8qIGRvIG5vdCByZXR1cm4ga2lsbGVkIGVudHJpZXMg Ki8KIAlib29sCQl4YWN0U3RhcnRlZEluUmVjb3Zlcnk7CS8qIHByZXZlbnRzIGtpbGxpbmcvc2Vl aW5nIGtpbGxlZAogCQkJCQkJCQkJCSAqIHR1cGxlcyAqLwotCi0JLyogaW5kZXggYWNjZXNzIG1l dGhvZCdzIHByaXZhdGUgc3RhdGUgKi8KLQl2b2lkCSAgICpvcGFxdWU7CQkJLyogYWNjZXNzLW1l dGhvZC1zcGVjaWZpYyBpbmZvICovCisJLyogeHNfc25hcHNob3QgdXNlcyBhbiBNVkNDIHNuYXBz aG90PyAqLworCWJvb2wJCU1WQ0NTY2FuOwogCiAJLyoKIAkgKiBJbnN0cnVtZW50YXRpb24gY291 bnRlcnMgbWFpbnRhaW5lZCBieSBhbGwgaW5kZXggQU1zIGR1cmluZyBib3RoCkBAIC0xOTEsNiAr Mzg5LDE0IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4U2NhbkRlc2NEYXRhCiAKIAlib29sCQl4c19y ZWNoZWNrOwkJLyogVCBtZWFucyBzY2FuIGtleXMgbXVzdCBiZSByZWNoZWNrZWQgKi8KIAorCS8q IGJhdGNoIHNpemUgaW5mb3JtYXRpb24sIHNldCBvbmNlIGJ5IGluZGV4IEFNIGluIGFtYmVnaW5z Y2FuICovCisJdWludDE2CQltYXhpdGVtc2JhdGNoOwkvKiBzaXplIG9mIGVhY2ggYmF0Y2gncyBp dGVtc1tdIGFycmF5ICovCisJdWludDE2CQliYXRjaF9pbmRleF9vcGFxdWVfc2l6ZTsJLyogTUFY QUxJR04nZCBpbmRleCBBTSBvcGFxdWUgc2l6ZSAqLworCXVpbnQxNgkJYmF0Y2hfdHVwbGVzX3dv cmtzcGFjZTsgLyogY3VyclR1cGxlcyB3b3Jrc3BhY2Ugc2l6ZSAqLworCisJLyogQ29tcHV0ZWQg b2Zmc2V0LCB1c2VkIHRvIGdldCB0YWJsZSBBTSdzIG9wYXF1ZSBhcmVhIGZyb20gYSBiYXRjaCAq LworCXVpbnQxNgkJYmF0Y2hfdGFibGVfb2Zmc2V0OworCiAJLyoKIAkgKiBXaGVuIGZldGNoaW5n IHdpdGggYW4gb3JkZXJpbmcgb3BlcmF0b3IsIHRoZSB2YWx1ZXMgb2YgdGhlIE9SREVSIEJZCiAJ ICogZXhwcmVzc2lvbnMgb2YgdGhlIGxhc3QgcmV0dXJuZWQgdHVwbGUsIGFjY29yZGluZyB0byB0 aGUgaW5kZXguICBJZgpAQCAtMjM0LDQgKzQ0MCwxMzYgQEAgdHlwZWRlZiBzdHJ1Y3QgU3lzU2Nh bkRlc2NEYXRhCiAJc3RydWN0IFR1cGxlVGFibGVTbG90ICpzbG90OwogfSBTeXNTY2FuRGVzY0Rh dGE7CiAKKy8qCisgKiBSZXR1cm4gdGhlIHRydWUgYWxsb2NhdGlvbiBiYXNlIG9mIGEgYmF0Y2gg KGFjY291bnRpbmcgZm9yIEFNIG9wYXF1ZSBhcmVhcworICogc3RvcmVkIGJlZm9yZSB0aGUgSW5k ZXhTY2FuQmF0Y2hEYXRhIHBvaW50ZXIpLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgKgorYmF0 Y2hfYWxsb2NfYmFzZShJbmRleFNjYW5EZXNjRGF0YSAqc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0 Y2gpCit7CisJcmV0dXJuIChjaGFyICopIGJhdGNoIC0gc2Nhbi0+YmF0Y2hfdGFibGVfb2Zmc2V0 OworfQorCisvKgorICogQ291bnQgaG93IG1hbnkgYmF0Y2hlcyBhcmUgY3VycmVudGx5IGxvYWRl ZCBpbiB0aGUgcmluZyBidWZmZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgdWludDgKK2luZGV4X3Nj YW5fYmF0Y2hfY291bnQoSW5kZXhTY2FuRGVzY0RhdGEgKnNjYW4pCit7CisJcmV0dXJuICh1aW50 OCkgKHNjYW4tPmJhdGNocmluZ2J1Zi5uZXh0QmF0Y2ggLQorCQkJCQlzY2FuLT5iYXRjaHJpbmdi dWYuaGVhZEJhdGNoKTsKK30KKworLyoKKyAqIERvIHdlIGFscmVhZHkgaGF2ZSBhIGJhdGNoIGxv YWRlZCBhdCAnaWR4JyBvZmZzZXQgaW4gc2NhbidzIHJpbmcgYnVmZmVyPworICoKKyAqIE5PVEU6 IGEgc3RhbGUgYmF0Y2ggaWR4IGNhbiBhbGlhcyBhIGN1cnJlbnRseS1sb2FkZWQgcmFuZ2UgYWZ0 ZXIgdWludDgKKyAqIG92ZXJmbG93LCBwcm9kdWNpbmcgYSBmYWxzZSBwb3NpdGl2ZS4gIEZhbHNl IG5lZ2F0aXZlcyBhcmUgbm90IHBvc3NpYmxlLgorICovCitzdGF0aWMgaW5saW5lIGJvb2wKK2lu ZGV4X3NjYW5fYmF0Y2hfbG9hZGVkKEluZGV4U2NhbkRlc2NEYXRhICpzY2FuLCB1aW50OCBpZHgp Cit7CisJcmV0dXJuIChpbnQ4KSAoaWR4IC0gc2Nhbi0+YmF0Y2hyaW5nYnVmLmhlYWRCYXRjaCkg Pj0gMCAmJgorCQkoaW50OCkgKGlkeCAtIHNjYW4tPmJhdGNocmluZ2J1Zi5uZXh0QmF0Y2gpIDwg MDsKK30KKworLyoKKyAqIEhhdmUgd2UgbG9hZGVkIHRoZSBtYXhpbXVtIG51bWJlciBvZiBiYXRj aGVzPworICovCitzdGF0aWMgaW5saW5lIGJvb2wKK2luZGV4X3NjYW5fYmF0Y2hfZnVsbChJbmRl eFNjYW5EZXNjRGF0YSAqc2NhbikKK3sKKwlyZXR1cm4gaW5kZXhfc2Nhbl9iYXRjaF9jb3VudChz Y2FuKSA9PSBJTkRFWF9TQ0FOX01BWF9CQVRDSEVTOworfQorCisvKgorICogUmV0dXJuIGJhdGNo IGZvciB0aGUgcHJvdmlkZWQgaW5kZXguCisgKi8KK3N0YXRpYyBpbmxpbmUgSW5kZXhTY2FuQmF0 Y2gKK2luZGV4X3NjYW5fYmF0Y2goSW5kZXhTY2FuRGVzY0RhdGEgKnNjYW4sIHVpbnQ4IGlkeCkK K3sKKwlBc3NlcnQoaW5kZXhfc2Nhbl9iYXRjaF9sb2FkZWQoc2NhbiwgaWR4KSk7CisKKwlyZXR1 cm4gc2Nhbi0+YmF0Y2hidWZbaWR4ICYgKElOREVYX1NDQU5fTUFYX0JBVENIRVMgLSAxKV07Cit9 CisKKy8qCisgKiBBcHBlbmQgZ2l2ZW4gYmF0Y2ggdG8gc2NhbidzIGJhdGNoIHJpbmcgYnVmZmVy LgorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK2luZGV4X3NjYW5fYmF0Y2hfYXBwZW5kKEluZGV4 U2NhbkRlc2NEYXRhICpzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCkKK3sKKwlCYXRjaFJpbmdC dWZmZXIgKnJpbmdidWYgPSAmc2Nhbi0+YmF0Y2hyaW5nYnVmOworCXVpbnQ4CQluZXh0QmF0Y2gg PSByaW5nYnVmLT5uZXh0QmF0Y2g7CisKKwlBc3NlcnQoIWluZGV4X3NjYW5fYmF0Y2hfZnVsbChz Y2FuKSk7CisKKwlzY2FuLT5iYXRjaGJ1ZltuZXh0QmF0Y2ggJiAoSU5ERVhfU0NBTl9NQVhfQkFU Q0hFUyAtIDEpXSA9IGJhdGNoOworCXJpbmdidWYtPm5leHRCYXRjaCsrOworfQorCisvKgorICog QWR2YW5jZSBwb3NpdGlvbiB0byBpdHMgbmV4dCBpdGVtIGluIHRoZSBiYXRjaC4KKyAqCisgKiBB ZHZhbmNlIHRvIHRoZSBuZXh0IGl0ZW0gd2l0aGluIHRoZSBwcm92aWRlZCBiYXRjaCAob3IgdG8g dGhlIHByZXZpb3VzIGl0ZW0sCisgKiB3aGVuIHNjYW5uaW5nIGJhY2t3YXJkcykuCisgKgorICog UmV0dXJucyB0cnVlIGlmIHRoZSBwb3NpdGlvbiBjb3VsZCBiZSBhZHZhbmNlZC4gIFJldHVybnMg ZmFsc2Ugd2hlbiB0aGVyZQorICogYXJlIG5vIG1vcmUgaXRlbXMgZnJvbSB0aGUgYmF0Y2ggcmVt YWluaW5nIGluIHRoZSBnaXZlbiBzY2FuIGRpcmVjdGlvbi4KKyAqLworc3RhdGljIGlubGluZSBi b29sCitpbmRleF9zY2FuX3Bvc19hZHZhbmNlKFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJ CQkgICBJbmRleFNjYW5CYXRjaCBiYXRjaCwgQmF0Y2hSaW5nSXRlbVBvcyAqcG9zKQoreworCUFz c2VydChwb3MtPnZhbGlkKTsKKworCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcmVjdGlv bikpCisJeworCQlpZiAoKytwb3MtPml0ZW0gPiBiYXRjaC0+bGFzdEl0ZW0pCisJCQlyZXR1cm4g ZmFsc2U7CisJfQorCWVsc2UJCQkJCQkvKiBTY2FuRGlyZWN0aW9uSXNCYWNrd2FyZCAqLworCXsK KwkJaWYgKC0tcG9zLT5pdGVtIDwgYmF0Y2gtPmZpcnN0SXRlbSkKKwkJCXJldHVybiBmYWxzZTsK Kwl9CisKKwkvKiBBZHZhbmNlZCB3aXRoaW4gYmF0Y2ggKi8KKwlyZXR1cm4gdHJ1ZTsKK30KKwor LyoKKyAqIEFkdmFuY2UgYmF0Y2ggcG9zaXRpb24gdG8gdGhlIHN0YXJ0IG9mIGl0cyBuZXcgYmF0 Y2guCisgKgorICogV2hlbiB3ZSdyZSBjYWxsZWQsIHRoaXMgcG9zaXRpb24gc2hvdWxkIHBvaW50 IHRvIGEgYmF0Y2ggdGhhdCBjYWxsZXIganVzdAorICogZmluaXNoZWQgY29uc3VtaW5nIGZyb20u ICBXaGVuIHdlIHJldHVybiwgdGhpcyBwb3NpdGlvbiB3aWxsIHBvaW50IHRvCisgKiBuZXh0QmF0 Y2gsIHRoZSBuZXh0IGJhdGNoIGZyb20gdGhlIHJpbmcgYnVmZmVyLiAgV2UnbGwgaGF2ZSBhbHNv IHNldCB0aGUKKyAqIHBvc2l0aW9uJ3MgaXRlbSBvZmZzZXQgdG8gbmV4dEJhdGNoJ3MgZmlyc3Qg aXRlbSBpbiB0aGUgZ2l2ZW4gZGlyZWN0aW9uCisgKiAod2hpY2ggaXMgYWN0dWFsbHkgbmV4dEJh dGNoJ3MgX2xhc3RfIGl0ZW0gd2hlbiBzY2FubmluZyBiYWNrd2FyZHMpLgorICoKKyAqIG5leHRC YXRjaCBkb2Vzbid0IGhhdmUgdG8gYmUgKGFuZCBvZnRlbiBpc24ndCkgdGhlIG1vc3QgcmVjZW50 bHkgYXBwZW5kZWQKKyAqIGJhdGNoIGluIHRoZSBzY2FuJ3MgcmluZyBidWZmZXIuICBJdCBpcyBt ZXJlbHkgdGhlIG5leHQgYmF0Y2ggaW4gbGluZSB0byBiZQorICogY29uc3VtZWQgZnJvbSB0aGUg cG9pbnQgb2YgdmlldyBvZiBvdXIgY2FsbGVyLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK2lu ZGV4X3NjYW5fcG9zX25leHRiYXRjaChTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQkJCSBJ bmRleFNjYW5CYXRjaCBuZXh0QmF0Y2gsIEJhdGNoUmluZ0l0ZW1Qb3MgKnBvcykKK3sKKwlBc3Nl cnQobmV4dEJhdGNoLT5kaXIgPT0gZGlyZWN0aW9uKTsKKwlBc3NlcnQobmV4dEJhdGNoLT5maXJz dEl0ZW0gPD0gbmV4dEJhdGNoLT5sYXN0SXRlbSk7CisKKwkvKiBJbmNyZW1lbnQgYmF0Y2ggKG1p Z2h0IHdyYXApLCBvciBpbml0aWFsaXplIGl0IHRvIHplcm8gKi8KKwlpZiAocG9zLT52YWxpZCkK KwkJcG9zLT5iYXRjaCsrOworCWVsc2UKKwkJcG9zLT5iYXRjaCA9IDA7CisKKwlwb3MtPnZhbGlk ID0gdHJ1ZTsKKworCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcmVjdGlvbikpCisJCXBv cy0+aXRlbSA9IG5leHRCYXRjaC0+Zmlyc3RJdGVtOworCWVsc2UKKwkJcG9zLT5pdGVtID0gbmV4 dEJhdGNoLT5sYXN0SXRlbTsKK30KKwogI2VuZGlmCQkJCQkJCS8qIFJFTFNDQU5fSCAqLwpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vz cy90YWJsZWFtLmgKaW5kZXggNDg3NWQ3MGFkLi41MzI5MjNkYmIgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0u aApAQCAtNDQzLDE2ICs0NDMsMjIgQEAgdHlwZWRlZiBzdHJ1Y3QgVGFibGVBbVJvdXRpbmUKIAkg Ki8KIAogCS8qCi0JICogUHJlcGFyZSB0byBmZXRjaCB0dXBsZXMgZnJvbSB0aGUgcmVsYXRpb24s IGFzIG5lZWRlZCB3aGVuIGZldGNoaW5nCi0JICogdHVwbGVzIGZvciBhbiBpbmRleCBzY2FuLiAg VGhlIGNhbGxiYWNrIGhhcyB0byByZXR1cm4gYW4KLQkgKiBJbmRleEZldGNoVGFibGVEYXRhLCB3 aGljaCB0aGUgQU0gd2lsbCB0eXBpY2FsbHkgZW1iZWQgaW4gYSBsYXJnZXIKLQkgKiBzdHJ1Y3R1 cmUgd2l0aCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLgorCSAqIFByZXBhcmUgdG8gZmV0Y2ggdHVw bGVzLCBhcyBuZWVkZWQgd2hlbiBmZXRjaGluZyB0dXBsZXMgZm9yIGFuIGluZGV4CisJICogc2Nh bi4gIFRoZSBjYWxsYmFjayBoYXMgdG8gcmV0dXJuIGFuIEluZGV4RmV0Y2hUYWJsZURhdGEsIHdo aWNoIHRoZSBBTQorCSAqIHdpbGwgdHlwaWNhbGx5IGVtYmVkIGluIGEgbGFyZ2VyIHN0cnVjdHVy ZSB3aXRoIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCiAJICoKIAkgKiBmbGFncyBpcyBhIGJpdG1h c2sgb2YgU2Nhbk9wdGlvbnMgYWZmZWN0aW5nIHVuZGVybHlpbmcgdGFibGUgc2NhbgogCSAqIGJl aGF2aW9yLiBTZWUgc2Nhbl9iZWdpbigpIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHBhc3Npbmcg dGhlc2UuCiAJICoKLQkgKiBUdXBsZXMgZm9yIGFuIGluZGV4IHNjYW4gY2FuIHRoZW4gYmUgZmV0 Y2hlZCB2aWEgb25lIG9mIHRoZQorCSAqIFR1cGxlcyBmb3IgYW4gaW5kZXggc2NhbiBjYW4gdGhl biBiZSBmZXRjaGVkIHZpYSBvbmUgb2YgdGhlIGZvdXIKIAkgKiBzbG90LWJhc2VkIGNhbGxiYWNr cyBjYWxsZWQgdGhyb3VnaCB0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3QuCisJICoKKwkgKiBDYWxs YmFjayBtdXN0IGluaXRpYWxpemUgdGhlIGJhdGNoX29wYXF1ZV9zaXplIGFuZCBiYXRjaF9wZXJf aXRlbV9zaXplCisJICogZmllbGRzIGluIHRoZSByZXR1cm5lZCBzdHJ1Y3QsIHRvIGxldCB0aGUg Y29yZSBjb2RlIGtub3cgaG93IG11Y2gKKwkgKiBtZW1vcnkgd2lsbCBiZSByZXF1aXJlZCBpbiB0 aGUgb3BhcXVlIHRhYmxlIEFNIHBvcnRpb25zIG9mIGVhY2ggYmF0Y2gKKwkgKiBhbGxvY2F0aW9u LiAgVGhlc2UgYXJlIHRoZSBiYXRjaGVzIHVzZWQgZHVyaW5nIGFtZ2V0YmF0Y2ggaW5kZXggc2Nh bnMsCisJICogd2hpY2ggdGFibGUgQU1zIGNhbiB1c2UgdG8gY2FjaGUgdGhpbmdzIGxpa2UgcGVy LWl0ZW0gdmlzaWJpbGl0eQorCSAqIGluZm9ybWF0aW9uLgogCSAqLwogCXN0cnVjdCBJbmRleEZl dGNoVGFibGVEYXRhICooKmluZGV4X2ZldGNoX2JlZ2luKSAoUmVsYXRpb24gcmVsLCB1aW50MzIg ZmxhZ3MpOwogCkBAIC00NjcsMTQgKzQ3MywzNCBAQCB0eXBlZGVmIHN0cnVjdCBUYWJsZUFtUm91 dGluZQogCSAqLwogCXZvaWQJCSgqaW5kZXhfZmV0Y2hfZW5kKSAoSW5kZXhTY2FuRGVzYyBzY2Fu KTsKIAorCS8qCisJICogSW5pdGlhbGl6ZSB0YWJsZSBBTSdzIHBlci1iYXRjaCBvcGFxdWUgYXJl YSB3aXRoaW4gYSBiYXRjaCBhbGxvY2F0aW9uLgorCSAqCisJICogQ2FsbGVkIGJ5IGluZGV4YW1f dXRpbF9iYXRjaF9hbGxvYyBmb3IgZWFjaCBuZXcgb3IgcmVjeWNsZWQgYmF0Y2guCisJICogVGFi bGUgQU1zIHNob3VsZCBzZXQgdXAgaXRzIG9wYXF1ZSBhcmVhIChhdCBhIG5lZ2F0aXZlIG9mZnNl dCBmcm9tIHRoZQorCSAqIGJhdGNoIHBvaW50ZXIpIGFuZCBhbnkgdHJhaWxpbmcgcGVyLWl0ZW0g ZGF0YSAoZS5nLiB2aXNpYmlsaXR5IGZsYWdzKS4KKwkgKgorCSAqICduZXdfYWxsb2MnIGlzIHRy dWUgZm9yIGZyZXNobHkgcGFsbG9jJ2QgYmF0Y2hlcywgZmFsc2UgZm9yIGJhdGNoZXMKKwkgKiBy ZWN5Y2xlZCBmcm9tIHRoZSBjYWNoZS4KKwkgKi8KKwl2b2lkCQkoKmluZGV4X2ZldGNoX2JhdGNo X2luaXQpIChJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCQkJICAgSW5kZXhTY2FuQmF0Y2gg YmF0Y2gsCisJCQkJCQkJCQkJICAgYm9vbCBuZXdfYWxsb2MpOworCiAJLyoKIAkgKiBGZXRjaCB0 aGUgbmV4dCB0dXBsZSBmcm9tIGFuIGluZGV4IHNjYW4sIHNjYW5uaW5nIGluIHRoZSBzcGVjaWZp ZWQKIAkgKiBkaXJlY3Rpb24sIGFuZCByZXR1cm4gdHJ1ZSBpZiBhIHR1cGxlIHdhcyBmb3VuZCwg ZmFsc2Ugb3RoZXJ3aXNlLgogCSAqCi0JICogVHdvIHZhcmlhbnRzIGNvdmVyIHtwbGFpbiwgaW5k ZXgtb25seX0gaW5kZXggc2NhbnMgdGhhdCB1c2UgYW1nZXR0dXBsZS4KLQkgKiBpbmRleF9iZWdp bnNjYW4gcmVzb2x2ZXMgd2hpY2ggdmFyaWFudCB0byB1c2UuICBDYWxsZXJzIHVzZQorCSAqIEZv dXIgdmFyaWFudHMgY292ZXIgdGhlIHtwbGFpbiwgaW5kZXgtb25seX0geCB7YW1nZXRiYXRjaCwg YW1nZXR0dXBsZX0KKwkgKiBtYXRyaXguICBpbmRleF9iZWdpbnNjYW4gcmVzb2x2ZXMgd2hpY2gg dmFyaWFudCB0byB1c2UuICBDYWxsZXJzIHVzZQogCSAqIHRhYmxlX2luZGV4X2dldG5leHRfc2xv dCgpLCB3aGljaCBjYWxscyB0aHJvdWdoIHRoYXQgcG9pbnRlciBkaXJlY3RseS4KIAkgKi8KKwli b29sCQkoKmluZGV4X3BsYWluX2FtZ2V0YmF0Y2hfbmV4dCkgKEluZGV4U2NhbkRlc2Mgc2NhbiwK KwkJCQkJCQkJCQkJCVNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJCQkJCQkJVHVwbGVU YWJsZVNsb3QgKnNsb3QpOworCWJvb2wJCSgqaW5kZXhfb25seV9hbWdldGJhdGNoX25leHQpIChJ bmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCQkJCSAgIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9u LAorCQkJCQkJCQkJCQkgICBUdXBsZVRhYmxlU2xvdCAqc2xvdCk7CiAJYm9vbAkJKCppbmRleF9w bGFpbl9hbWdldHR1cGxlX25leHQpIChJbmRleFNjYW5EZXNjIHNjYW4sCiAJCQkJCQkJCQkJCQlT Y2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKIAkJCQkJCQkJCQkJCVR1cGxlVGFibGVTbG90ICpzbG90 KTsKQEAgLTUwNSw2ICs1MzEsMTEgQEAgdHlwZWRlZiBzdHJ1Y3QgVGFibGVBbVJvdXRpbmUKIAkJ CQkJCQkgIFR1cGxlVGFibGVTbG90ICpzbG90LAogCQkJCQkJCSAgYm9vbCAqYWxsX2RlYWQpOwog CisJLyoKKwkgKiBSZXN0b3JlIGEgcHJldmlvdXNseSBtYXJrZWQgc2NhbiBwb3NpdGlvbgorCSAq LworCXZvaWQJCSgqaW5kZXhfZmV0Y2hfcmVzdHJwb3MpIChJbmRleFNjYW5EZXNjIHNjYW4pOwor CiAKIAkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAkgKiBDYWxsYmFja3MgZm9yIG5vbi1tb2RpZnlpbmcg b3BlcmF0aW9ucyBvbiBpbmRpdmlkdWFsIHR1cGxlcwpAQCAtMTI3OSw2ICsxMzEwLDE3IEBAIHRh YmxlX2luZGV4X2ZldGNoX3Jlc2V0KEluZGV4U2NhbkRlc2Mgc2NhbikKIAlzY2FuLT5oZWFwUmVs YXRpb24tPnJkX3RhYmxlYW0tPmluZGV4X2ZldGNoX3Jlc2V0KHNjYW4pOwogfQogCisvKgorICog UmVzdG9yZSBhIHByZXZpb3VzbHkgbWFya2VkIHNjYW4gcG9zaXRpb24KKyAqLworc3RhdGljIGlu bGluZSB2b2lkCit0YWJsZV9pbmRleF9mZXRjaF9yZXN0cnBvcyhJbmRleFNjYW5EZXNjIHNjYW4p Cit7CisJQXNzZXJ0KHNjYW4tPnhzX2hlYXBmZXRjaCk7CisKKwlzY2FuLT5oZWFwUmVsYXRpb24t PnJkX3RhYmxlYW0tPmluZGV4X2ZldGNoX3Jlc3RycG9zKHNjYW4pOworfQorCiAvKgogICogUmVs ZWFzZSByZXNvdXJjZXMgYW5kIGRlYWxsb2NhdGUgaW5kZXggZmV0Y2ggaGVsZCBpbiB0aGUgc2Nh bidzIHVuZGVybHlpbmcKICAqIEluZGV4RmV0Y2hUYWJsZURhdGEuCkBAIC0xMjkxLDYgKzEzMzMs MjEgQEAgdGFibGVfaW5kZXhfZmV0Y2hfZW5kKEluZGV4U2NhbkRlc2Mgc2NhbikKIAlzY2FuLT5o ZWFwUmVsYXRpb24tPnJkX3RhYmxlYW0tPmluZGV4X2ZldGNoX2VuZChzY2FuKTsKIH0KIAorLyoK KyAqIEluaXRpYWxpemUgdGFibGUgQU0ncyBwZXItYmF0Y2ggb3BhcXVlIGFyZWEgd2l0aGluIGEg YmF0Y2ggYWxsb2NhdGlvbi4KKyAqCisgKiBDYWxsZWQgYnkgaW5kZXhhbV91dGlsX2JhdGNoX2Fs bG9jIGZvciBlYWNoIG5ldyBvciByZWN5Y2xlZCBiYXRjaC4KKyAqLworc3RhdGljIGlubGluZSB2 b2lkCit0YWJsZV9pbmRleF9mZXRjaF9iYXRjaF9pbml0KEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5k ZXhTY2FuQmF0Y2ggYmF0Y2gsCisJCQkJCQkJIGJvb2wgbmV3X2FsbG9jKQoreworCUFzc2VydChz Y2FuLT54c19oZWFwZmV0Y2gpOworCisJc2Nhbi0+aGVhcFJlbGF0aW9uLT5yZF90YWJsZWFtLT5p bmRleF9mZXRjaF9iYXRjaF9pbml0KHNjYW4sIGJhdGNoLAorCQkJCQkJCQkJCQkJCQkgICBuZXdf YWxsb2MpOworfQorCiAvKgogICogRmV0Y2ggdGhlIG5leHQgdHVwbGUgZnJvbSBhbiBpbmRleCBz Y2FuIGludG8gYHNsb3RgLCBzY2FubmluZyBpbiB0aGUKICAqIHNwZWNpZmllZCBkaXJlY3Rpb24u ICBSZXR1cm5zIHRydWUgaWYgYSB0dXBsZSBzYXRpc2Z5aW5nIHRoZSBzY2FuIGtleXMgYW5kCmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCBiL3NyYy9pbmNsdWRlL25v ZGVzL3BhdGhub2Rlcy5oCmluZGV4IDY5M2I4NzlmNy4uODU5OTFkNDQ3IDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRo bm9kZXMuaApAQCAtMTQzNywxMiArMTQzNywxMiBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleE9wdElu Zm8KIAlib29sCQlhbW9wdGlvbmFsa2V5OwogCWJvb2wJCWFtc2VhcmNoYXJyYXk7CiAJYm9vbAkJ YW1zZWFyY2hudWxsczsKLQkvKiBkb2VzIEFNIGhhdmUgYW1nZXR0dXBsZSBpbnRlcmZhY2U/ICov Ci0JYm9vbAkJYW1oYXNnZXR0dXBsZTsKKwkvKiBkb2VzIEFNIGhhdmUgYW1nZXRiYXRjaCAob3Ig Z2V0dHVwbGUpIGludGVyZmFjZT8gKi8KKwlib29sCQlhbWNhbnBsYWluc2NhbjsKIAkvKiBkb2Vz IEFNIGhhdmUgYW1nZXRiaXRtYXAgaW50ZXJmYWNlPyAqLwogCWJvb2wJCWFtaGFzZ2V0Yml0bWFw OwogCWJvb2wJCWFtY2FucGFyYWxsZWw7Ci0JLyogZG9lcyBBTSBoYXZlIGFtbWFya3BvcyBpbnRl cmZhY2U/ICovCisJLyogaXMgQU0gcHJlcGFyZWQgZm9yIHVzIHRvIHJlc3RvcmUgYSBtYXJrPyAq LwogCWJvb2wJCWFtY2FubWFya3BvczsKIAkvKiBBTSdzIGNvc3QgZXN0aW1hdG9yICovCiAJLyog UmF0aGVyIHRoYW4gaW5jbHVkZSBhbWFwaS5oIGhlcmUsIHdlIGRlY2xhcmUgYW1jb3N0ZXN0aW1h dGUgbGlrZSB0aGlzICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmlu LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmluLmMKaW5kZXggYmRiMzA3NTJlLi42MmE4 MjZkNGYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW4uYworKysgYi9z cmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmluLmMKQEAgLTI5OCwxMCArMjk4LDEyIEBAIGJyaW5o YW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCS5hbWJlZ2luc2NhbiA9IGJyaW5iZWdpbnNjYW4s CiAJCS5hbXJlc2NhbiA9IGJyaW5yZXNjYW4sCiAJCS5hbWdldHR1cGxlID0gTlVMTCwKKwkJLmFt Z2V0YmF0Y2ggPSBOVUxMLAorCQkuYW1raWxsaXRlbXNiYXRjaCA9IE5VTEwsCisJCS5hbXVuZ3Vh cmRiYXRjaCA9IE5VTEwsCiAJCS5hbWdldGJpdG1hcCA9IGJyaW5nZXRiaXRtYXAsCiAJCS5hbWVu ZHNjYW4gPSBicmluZW5kc2NhbiwKLQkJLmFtbWFya3BvcyA9IE5VTEwsCi0JCS5hbXJlc3RycG9z ID0gTlVMTCwKKwkJLmFtcG9zcmVzZXQgPSBOVUxMLAogCQkuYW1lc3RpbWF0ZXBhcmFsbGVsc2Nh biA9IE5VTEwsCiAJCS5hbWluaXRwYXJhbGxlbHNjYW4gPSBOVUxMLAogCQkuYW1wYXJhbGxlbHJl c2NhbiA9IE5VTEwsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbmdldC5j IGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW5nZXQuYwppbmRleCA2YjE0OGU2OWEuLjhmNzAz M2Q2MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW5nZXQuYworKysgYi9z cmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbmdldC5jCkBAIC0xOTUzLDkgKzE5NTMsOSBAQCBnaW5n ZXRiaXRtYXAoSW5kZXhTY2FuRGVzYyBzY2FuLCBUSURCaXRtYXAgKnRibSkKIAkgKiBpbnRvIHRo ZSBtYWluIGluZGV4LCBhbmQgc28gd2UgbWlnaHQgdmlzaXQgaXQgYSBzZWNvbmQgdGltZSBkdXJp bmcgdGhlCiAJICogbWFpbiBzY2FuLiAgVGhpcyBpcyBva2F5IGJlY2F1c2Ugd2UnbGwganVzdCBy ZS1zZXQgdGhlIHNhbWUgYml0IGluIHRoZQogCSAqIGJpdG1hcC4gIChUaGUgcG9zc2liaWxpdHkg b2YgZHVwbGljYXRlIHZpc2l0cyBpcyBhIG1ham9yIHJlYXNvbiB3aHkgR0lOCi0JICogY2FuJ3Qg c3VwcG9ydCB0aGUgYW1nZXR0dXBsZSBBUEksIGhvd2V2ZXIuKSBOb3RlIHRoYXQgaXQgd291bGQg bm90IGRvCi0JICogdG8gc2NhbiB0aGUgbWFpbiBpbmRleCBiZWZvcmUgdGhlIHBlbmRpbmcgbGlz dCwgc2luY2UgY29uY3VycmVudAotCSAqIGNsZWFudXAgY291bGQgdGhlbiBtYWtlIHVzIG1pc3Mg ZW50cmllcyBlbnRpcmVseS4KKwkgKiBjYW4ndCBzdXBwb3J0IGVpdGhlciB0aGUgYW1nZXR0dXBs ZSBvciBhbWdldGJhdGNoIEFQSS4pIE5vdGUgdGhhdCBpdAorCSAqIHdvdWxkIG5vdCBkbyB0byBz Y2FuIHRoZSBtYWluIGluZGV4IGJlZm9yZSB0aGUgcGVuZGluZyBsaXN0LCBzaW5jZQorCSAqIGNv bmN1cnJlbnQgY2xlYW51cCBjb3VsZCB0aGVuIG1ha2UgdXMgbWlzcyBlbnRyaWVzIGVudGlyZWx5 LgogCSAqLwogCXNjYW5QZW5kaW5nSW5zZXJ0KHNjYW4sIHRibSwgJm50aWRzKTsKIApkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW51dGlsLmMgYi9zcmMvYmFja2VuZC9hY2Nl c3MvZ2luL2dpbnV0aWwuYwppbmRleCBmZTdiOTg0ZmYuLjcxMGYzZjljMiAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW51dGlsLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L2dpbi9naW51dGlsLmMKQEAgLTgyLDEwICs4MiwxMiBAQCBnaW5oYW5kbGVyKFBHX0ZVTkNUSU9O X0FSR1MpCiAJCS5hbWJlZ2luc2NhbiA9IGdpbmJlZ2luc2NhbiwKIAkJLmFtcmVzY2FuID0gZ2lu cmVzY2FuLAogCQkuYW1nZXR0dXBsZSA9IE5VTEwsCisJCS5hbWdldGJhdGNoID0gTlVMTCwKKwkJ LmFta2lsbGl0ZW1zYmF0Y2ggPSBOVUxMLAorCQkuYW11bmd1YXJkYmF0Y2ggPSBOVUxMLAogCQku YW1nZXRiaXRtYXAgPSBnaW5nZXRiaXRtYXAsCiAJCS5hbWVuZHNjYW4gPSBnaW5lbmRzY2FuLAot CQkuYW1tYXJrcG9zID0gTlVMTCwKLQkJLmFtcmVzdHJwb3MgPSBOVUxMLAorCQkuYW1wb3NyZXNl dCA9IE5VTEwsCiAJCS5hbWVzdGltYXRlcGFyYWxsZWxzY2FuID0gTlVMTCwKIAkJLmFtaW5pdHBh cmFsbGVsc2NhbiA9IE5VTEwsCiAJCS5hbXBhcmFsbGVscmVzY2FuID0gTlVMTCwKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3QuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9n aXN0L2dpc3QuYwppbmRleCA4NTY1ZTIyNWIuLmE0ODRjOGIyYSAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL2dpc3QvZ2lzdC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dp c3QuYwpAQCAtMTAzLDEwICsxMDMsMTIgQEAgZ2lzdGhhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykK IAkJLmFtYmVnaW5zY2FuID0gZ2lzdGJlZ2luc2NhbiwKIAkJLmFtcmVzY2FuID0gZ2lzdHJlc2Nh biwKIAkJLmFtZ2V0dHVwbGUgPSBnaXN0Z2V0dHVwbGUsCisJCS5hbWdldGJhdGNoID0gTlVMTCwK KwkJLmFta2lsbGl0ZW1zYmF0Y2ggPSBOVUxMLAorCQkuYW11bmd1YXJkYmF0Y2ggPSBOVUxMLAog CQkuYW1nZXRiaXRtYXAgPSBnaXN0Z2V0Yml0bWFwLAogCQkuYW1lbmRzY2FuID0gZ2lzdGVuZHNj YW4sCi0JCS5hbW1hcmtwb3MgPSBOVUxMLAotCQkuYW1yZXN0cnBvcyA9IE5VTEwsCisJCS5hbXBv c3Jlc2V0ID0gTlVMTCwKIAkJLmFtZXN0aW1hdGVwYXJhbGxlbHNjYW4gPSBOVUxMLAogCQkuYW1p bml0cGFyYWxsZWxzY2FuID0gTlVMTCwKIAkJLmFtcGFyYWxsZWxyZXNjYW4gPSBOVUxMLApkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL2hhc2gvaGFzaC5jCmluZGV4IDhkOGNkMzBkYy4uMmUzMmJlMjMzIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hh c2gvaGFzaC5jCkBAIC0xMTQsMTAgKzExNCwxMiBAQCBoYXNoaGFuZGxlcihQR19GVU5DVElPTl9B UkdTKQogCQkuYW1iZWdpbnNjYW4gPSBoYXNoYmVnaW5zY2FuLAogCQkuYW1yZXNjYW4gPSBoYXNo cmVzY2FuLAogCQkuYW1nZXR0dXBsZSA9IGhhc2hnZXR0dXBsZSwKKwkJLmFtZ2V0YmF0Y2ggPSBO VUxMLAorCQkuYW1raWxsaXRlbXNiYXRjaCA9IE5VTEwsCisJCS5hbXVuZ3VhcmRiYXRjaCA9IE5V TEwsCiAJCS5hbWdldGJpdG1hcCA9IGhhc2hnZXRiaXRtYXAsCiAJCS5hbWVuZHNjYW4gPSBoYXNo ZW5kc2NhbiwKLQkJLmFtbWFya3BvcyA9IE5VTEwsCi0JCS5hbXJlc3RycG9zID0gTlVMTCwKKwkJ LmFtcG9zcmVzZXQgPSBOVUxMLAogCQkuYW1lc3RpbWF0ZXBhcmFsbGVsc2NhbiA9IE5VTEwsCiAJ CS5hbWluaXRwYXJhbGxlbHNjYW4gPSBOVUxMLAogCQkuYW1wYXJhbGxlbHJlc2NhbiA9IE5VTEws CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jIGIv c3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYwppbmRleCBmOTZiNDI3MDku LmE5NDM5ZDAyZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hh bmRsZXIuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCkBA IC0yNTU3LDggKzI1NTcsMTIgQEAgc3RhdGljIGNvbnN0IFRhYmxlQW1Sb3V0aW5lIGhlYXBhbV9t ZXRob2RzID0gewogCS5pbmRleF9mZXRjaF9iZWdpbiA9IGhlYXBhbV9pbmRleF9mZXRjaF9iZWdp biwKIAkuaW5kZXhfZmV0Y2hfcmVzZXQgPSBoZWFwYW1faW5kZXhfZmV0Y2hfcmVzZXQsCiAJLmlu ZGV4X2ZldGNoX2VuZCA9IGhlYXBhbV9pbmRleF9mZXRjaF9lbmQsCisJLmluZGV4X2ZldGNoX2Jh dGNoX2luaXQgPSBoZWFwYW1faW5kZXhfZmV0Y2hfYmF0Y2hfaW5pdCwKKwkuaW5kZXhfcGxhaW5f YW1nZXRiYXRjaF9uZXh0ID0gaGVhcGFtX2luZGV4X3BsYWluX2FtZ2V0YmF0Y2hfbmV4dCwKKwku aW5kZXhfb25seV9hbWdldGJhdGNoX25leHQgPSBoZWFwYW1faW5kZXhfb25seV9hbWdldGJhdGNo X25leHQsCiAJLmluZGV4X3BsYWluX2FtZ2V0dHVwbGVfbmV4dCA9IGhlYXBhbV9pbmRleF9wbGFp bl9hbWdldHR1cGxlX25leHQsCiAJLmluZGV4X29ubHlfYW1nZXR0dXBsZV9uZXh0ID0gaGVhcGFt X2luZGV4X29ubHlfYW1nZXR0dXBsZV9uZXh0LAorCS5pbmRleF9mZXRjaF9yZXN0cnBvcyA9IGhl YXBhbV9pbmRleF9mZXRjaF9yZXN0cnBvcywKIAkuZmV0Y2hfdGlkID0gaGVhcGFtX2ZldGNoX3Rp ZCwKIAogCS50dXBsZV9pbnNlcnQgPSBoZWFwYW1fdHVwbGVfaW5zZXJ0LApkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2luZGV4c2Nhbi5jIGIvc3JjL2JhY2tlbmQv YWNjZXNzL2hlYXAvaGVhcGFtX2luZGV4c2Nhbi5jCmluZGV4IGIyNjliODAyZS4uODg1YzI1YzY3 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faW5kZXhzY2FuLmMK KysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2luZGV4c2Nhbi5jCkBAIC0xNiw2 ICsxNiw3IEBACiAKICNpbmNsdWRlICJhY2Nlc3MvYW1hcGkuaCIKICNpbmNsdWRlICJhY2Nlc3Mv aGVhcGFtLmgiCisjaW5jbHVkZSAiYWNjZXNzL2luZGV4YmF0Y2guaCIKICNpbmNsdWRlICJhY2Nl c3MvcmVsc2Nhbi5oIgogI2luY2x1ZGUgImFjY2Vzcy92aXNpYmlsaXR5bWFwLmgiCiAjaW5jbHVk ZSAic3RvcmFnZS9wcmVkaWNhdGUuaCIKQEAgLTMyLDExICszMywyOCBAQCBzdGF0aWMgcGdfYXR0 cmlidXRlX2Fsd2F5c19pbmxpbmUgYm9vbCBoZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGVfaW1wbChS ZWxhdGlvbiByZQogc3RhdGljIHBnX2F0dHJpYnV0ZV9hbHdheXNfaW5saW5lIGJvb2wgaGVhcGFt X2luZGV4X2dldG5leHRfc2xvdChJbmRleFNjYW5EZXNjIHNjYW4sCiAJCQkJCQkJCQkJCQkJCQkJ IFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAogCQkJCQkJCQkJCQkJCQkJCSBUdXBsZVRhYmxlU2xv dCAqc2xvdCwKLQkJCQkJCQkJCQkJCQkJCQkgYm9vbCBpbmRleF9vbmx5KTsKKwkJCQkJCQkJCQkJ CQkJCQkgYm9vbCBpbmRleF9vbmx5LAorCQkJCQkJCQkJCQkJCQkJCSBib29sIGFtZ2V0YmF0Y2gp Owogc3RhdGljIHBnX2F0dHJpYnV0ZV9hbHdheXNfaW5saW5lIGJvb2wgaGVhcGFtX2luZGV4X2Zl dGNoX2hlYXAoSW5kZXhTY2FuRGVzYyBzY2FuLAogCQkJCQkJCQkJCQkJCQkJICAgSW5kZXhGZXRj aEhlYXBEYXRhICpoc2NhbiwKIAkJCQkJCQkJCQkJCQkJCSAgIFR1cGxlVGFibGVTbG90ICpzbG90 LAotCQkJCQkJCQkJCQkJCQkJICAgYm9vbCAqaGVhcF9jb250aW51ZSk7CisJCQkJCQkJCQkJCQkJ CQkgICBib29sICpoZWFwX2NvbnRpbnVlLAorCQkJCQkJCQkJCQkJCQkJICAgYm9vbCBhbWdldGJh dGNoKTsKK3N0YXRpYyBwZ19hdHRyaWJ1dGVfYWx3YXlzX2lubGluZSBJdGVtUG9pbnRlciBoZWFw YW1faW5kZXhfZ2V0bmV4dF9zY2FuYmF0Y2hfcG9zKEluZGV4U2NhbkRlc2Mgc2NhbiwKKwkJCQkJ CQkJCQkJCQkJCQkJCQkJIEluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4sCisJCQkJCQkJCQkJCQkJ CQkJCQkJCSBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQkJCQkJCQkJCQkJCQkJCQkJIGJv b2wgKmFsbF92aXNpYmxlKTsKK3N0YXRpYyBpbmxpbmUgSXRlbVBvaW50ZXIgaGVhcGFtX2luZGV4 X3JldHVybl9zY2FucG9zX3RpZChJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCQkJCQkJCSAg SW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiwKKwkJCQkJCQkJCQkJCQkJICBTY2FuRGlyZWN0aW9u IGRpcmVjdGlvbiwKKwkJCQkJCQkJCQkJCQkJICBJbmRleFNjYW5CYXRjaCBzY2FuQmF0Y2gsCisJ CQkJCQkJCQkJCQkJCSAgQmF0Y2hSaW5nSXRlbVBvcyAqc2NhblBvcywKKwkJCQkJCQkJCQkJCQkJ ICBib29sICphbGxfdmlzaWJsZSk7CitzdGF0aWMgdm9pZCBoZWFwYW1faW5kZXhfYmF0Y2hfcG9z X3Zpc2liaWxpdHkoSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJCQkgIFNjYW5EaXJlY3Rp b24gZGlyZWN0aW9uLAorCQkJCQkJCQkJCQkgIEluZGV4U2NhbkJhdGNoIGJhdGNoLAorCQkJCQkJ CQkJCQkgIEhlYXBCYXRjaERhdGEgKmhiYXRjaCwKKwkJCQkJCQkJCQkJICBCYXRjaFJpbmdJdGVt UG9zICpwb3MpOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIEluZGV4IFNjYW4gQ2FsbGJhY2tz IGZvciBoZWFwIEFNCkBAIC00OCwxNCArNjYsMjMgQEAgaGVhcGFtX2luZGV4X2ZldGNoX2JlZ2lu KFJlbGF0aW9uIHJlbCwgdWludDMyIGZsYWdzKQogewogCUluZGV4RmV0Y2hIZWFwRGF0YSAqaHNj YW4gPSBwYWxsb2MwX29iamVjdChJbmRleEZldGNoSGVhcERhdGEpOwogCisJaHNjYW4tPnhzX2Jh c2UuYmF0Y2hfb3BhcXVlX3NpemUgPSBNQVhBTElHTihzaXplb2YoSGVhcEJhdGNoRGF0YSkpOwor CWhzY2FuLT54c19iYXNlLmJhdGNoX3Blcl9pdGVtX3NpemUgPSBzaXplb2YodWludDgpOyAvKiB2 aXNJbmZvIGVsZW1lbnQgc2l6ZSAqLwogCWhzY2FuLT54c19iYXNlLmZsYWdzID0gZmxhZ3M7Ci0J aHNjYW4tPnhzX2NidWYgPSBJbnZhbGlkQnVmZmVyOworCisJLyogQ3VycmVudCBoZWFwIGJsb2Nr IHN0YXRlICovCisJQXNzZXJ0KGhzY2FuLT54c19jYnVmID09IEludmFsaWRCdWZmZXIpOwogCWhz Y2FuLT54c19ibGsgPSBJbnZhbGlkQmxvY2tOdW1iZXI7Ci0JaHNjYW4tPnhzX3ZtYnVmZmVyID0g SW52YWxpZEJ1ZmZlcjsKKworCS8qIFZNIHJlbGF0ZWQgc3RhdGUgKi8KKwlBc3NlcnQoaHNjYW4t PnhzX3ZtYnVmZmVyID09IEludmFsaWRCdWZmZXIpOworCWhzY2FuLT54c192bV9pdGVtcyA9IDE7 CiAKIAkvKgogCSAqIFJldHVybiBvcGFxdWUgc3RhdGUsIHdoaWNoIHdlJ2xsIGFjY2VzcyB0aHJv dWdoIHRoZSBzY2FuJ3MgeHNfaGVhcGZldGNoCi0JICogZmllbGQgbGF0ZXIgb24KKwkgKiBmaWVs ZCBsYXRlciBvbi4KKwkgKgorCSAqIE5vdGU6IGluZGV4YW0uYyB3aWxsIGNhbGwgYmF0Y2hzY2Fu X2luaXQgZm9yIHVzLgogCSAqLwogCXJldHVybiAmaHNjYW4tPnhzX2Jhc2U7CiB9CkBAIC02NSw4 ICs5MiwxMiBAQCBoZWFwYW1faW5kZXhfZmV0Y2hfcmVzZXQoSW5kZXhTY2FuRGVzYyBzY2FuKQog ewogCUluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4gPSAoSW5kZXhGZXRjaEhlYXBEYXRhICopIHNj YW4tPnhzX2hlYXBmZXRjaDsKIAotCS8qIFJlc2V0cyBhcmUgYSBuby1vcCAqLwotCSh2b2lkKSBo c2NhbjsKKwkvKiBSZXNjYW5zIHNob3VsZCBhdm9pZCBhbiBleGNlc3NpdmUgbnVtYmVyIG9mIFZN IGxvb2t1cHMgKi8KKwloc2Nhbi0+eHNfdm1faXRlbXMgPSAxOworCisJLyogUmVzZXQgYmF0Y2gg cmluZyBidWZmZXIgc3RhdGUgKi8KKwlpZiAoc2Nhbi0+dXNlYmF0Y2hyaW5nKQorCQl0YWJsZWFt X3V0aWxfYmF0Y2hzY2FuX3Jlc2V0KHNjYW4sIGZhbHNlKTsKIAogCS8qCiAJICogRGVsaWJlcmF0 ZWx5IGF2b2lkIGRyb3BwaW5nIHBpbnMgbm93IGhlbGQgaW4geHNfY2J1ZiBhbmQgeHNfdm1idWZm ZXIuCkBAIC03NSw2ICsxMDYsMTcgQEAgaGVhcGFtX2luZGV4X2ZldGNoX3Jlc2V0KEluZGV4U2Nh bkRlc2Mgc2NhbikKIAkgKi8KIH0KIAordm9pZAoraGVhcGFtX2luZGV4X2ZldGNoX3Jlc3RycG9z KEluZGV4U2NhbkRlc2Mgc2NhbikKK3sKKwlJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuID0gKElu ZGV4RmV0Y2hIZWFwRGF0YSAqKSBzY2FuLT54c19oZWFwZmV0Y2g7CisKKwkodm9pZCkgaHNjYW47 CisKKwkvKiBSZXN0b3JlIGJhdGNoIHJpbmcgdG8gcHJldmlvdXNseSBzYXZlZCBtYXJrICovCisJ dGFibGVhbV91dGlsX2JhdGNoc2Nhbl9yZXN0b3JlX3BvcyhzY2FuKTsKK30KKwogdm9pZAogaGVh cGFtX2luZGV4X2ZldGNoX2VuZChJbmRleFNjYW5EZXNjIHNjYW4pCiB7CkBAIC04OCw5ICsxMzAs NTIgQEAgaGVhcGFtX2luZGV4X2ZldGNoX2VuZChJbmRleFNjYW5EZXNjIHNjYW4pCiAJaWYgKEJ1 ZmZlcklzVmFsaWQoaHNjYW4tPnhzX3ZtYnVmZmVyKSkKIAkJUmVsZWFzZUJ1ZmZlcihoc2Nhbi0+ eHNfdm1idWZmZXIpOwogCisJLyogRnJlZSBhbGwgYmF0Y2ggcmVsYXRlZCByZXNvdXJjZXMgKi8K KwlpZiAoc2Nhbi0+dXNlYmF0Y2hyaW5nKQorCQl0YWJsZWFtX3V0aWxfYmF0Y2hzY2FuX2VuZChz Y2FuKTsKKwogCXBmcmVlKGhzY2FuKTsKIH0KIAorLyoKKyAqIEluaXRpYWxpemUgdGhlIGhlYXAg dGFibGUgQU0ncyBwZXItYmF0Y2ggb3BhcXVlIGFyZWEgKEhlYXBCYXRjaERhdGEpLgorICoKKyAq IENhbGxlZCBieSBpbmRleGFtX3V0aWxfYmF0Y2hfYWxsb2MgZm9yIGVhY2ggbmV3IG9yIHJlY3lj bGVkIGJhdGNoLgorICogU2V0cyB1cCB0aGUgdmlzSW5mbyBwb2ludGVyIGZvciBpbmRleC1vbmx5 IHNjYW5zLCBvciBOVUxMIG90aGVyd2lzZS4KKyAqLwordm9pZAoraGVhcGFtX2luZGV4X2ZldGNo X2JhdGNoX2luaXQoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCwKKwkJ CQkJCQkgIGJvb2wgbmV3X2FsbG9jKQoreworCUhlYXBCYXRjaERhdGEgKmhiYXRjaCA9IGhlYXBf YmF0Y2hfZGF0YShzY2FuLCBiYXRjaCk7CisKKwlpZiAoc2Nhbi0+eHNfd2FudF9pdHVwKQorCXsK KwkJaWYgKG5ld19hbGxvYykKKwkJeworCQkJLyoKKwkJCSAqIFRoZSB2aXNJbmZvIHBvaW50ZXIg aXMgc3RvcmVkIGF0IHRoZSB2ZXJ5IHN0YXJ0IG9mIHRoZSBwYWxsb2MnZAorCQkJICogc3BhY2Us IGluIHRoZSBmaXhlZC1zaXplZCB0YWJsZSBBTSBvcGFxdWUgYXJlYS4gIHZpc0luZm8gcG9pbnRz CisJCQkgKiB0byBqdXN0IHBhc3QgdGhlIGVuZCBvZiB0aGUgdmFyaWFibGUtc2l6ZWQgaXRlbXNb bWF4aXRlbXNiYXRjaF0KKwkJCSAqIGFycmF5ICh0byBhIHNwYWNlIHRoYXQgaXMgYWxzbyBzaXpl ZCBhY2NvcmRpbmcgdG8gd2hhdGV2ZXIgdGhlCisJCQkgKiBpbmRleCBBTSBzZXQgbWF4aXRlbXNi YXRjaCB0bykuCisJCQkgKi8KKwkJCVNpemUJCWl0ZW1zRW5kOworCisJCQlpdGVtc0VuZCA9IE1B WEFMSUdOKG9mZnNldG9mKEluZGV4U2NhbkJhdGNoRGF0YSwgaXRlbXMpICsKKwkJCQkJCQkJc2l6 ZW9mKEJhdGNoTWF0Y2hpbmdJdGVtKSAqIHNjYW4tPm1heGl0ZW1zYmF0Y2gpOworCQkJaGJhdGNo LT52aXNJbmZvID0gKHVpbnQ4ICopICgoY2hhciAqKSBiYXRjaCArIGl0ZW1zRW5kKTsKKwkJfQor CisJCS8qIENsZWFyIHZpc2liaWxpdHkgZmxhZ3MgKG5lZWRlZCBmb3IgYm90aCBuZXcgYW5kIHJl Y3ljbGVkIGJhdGNoZXMpICovCisJCW1lbXNldChoYmF0Y2gtPnZpc0luZm8sIDAsIHNjYW4tPm1h eGl0ZW1zYmF0Y2gpOworCX0KKwllbHNlCisJeworCQloYmF0Y2gtPnZpc0luZm8gPSBOVUxMOwor CX0KK30KKwogLyoKICAqCWhlYXBfaG90X3NlYXJjaF9idWZmZXIJLSBzZWFyY2ggSE9UIGNoYWlu IGZvciB0dXBsZSBzYXRpc2Z5aW5nIHNuYXBzaG90CiAgKgpAQCAtMjUzLDE2ICszMzgsNDAgQEAg aGVhcF9ob3Rfc2VhcmNoX2J1ZmZlcihJdGVtUG9pbnRlciB0aWQsIFJlbGF0aW9uIHJlbGF0aW9u LCBCdWZmZXIgYnVmZmVyLAogCXJldHVybiBmYWxzZTsKIH0KIAorLyogdGFibGVfaW5kZXhfZ2V0 bmV4dF9zbG90IGNhbGxiYWNrOiBhbWdldGJhdGNoLCBwbGFpbiBpbmRleCBzY2FuICovCitwZ19h dHRyaWJ1dGVfaG90IGJvb2wKK2hlYXBhbV9pbmRleF9wbGFpbl9hbWdldGJhdGNoX25leHQoSW5k ZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkgICBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJ CQkJCQkJICAgVHVwbGVUYWJsZVNsb3QgKnNsb3QpCit7CisJQXNzZXJ0KCFzY2FuLT54c193YW50 X2l0dXAgJiYgc2Nhbi0+dXNlYmF0Y2hyaW5nKTsKKwlBc3NlcnQoc2Nhbi0+aW5kZXhSZWxhdGlv bi0+cmRfaW5kYW0tPmFtZ2V0YmF0Y2ggIT0gTlVMTCk7CisKKwlyZXR1cm4gaGVhcGFtX2luZGV4 X2dldG5leHRfc2xvdChzY2FuLCBkaXJlY3Rpb24sIHNsb3QsIGZhbHNlLCB0cnVlKTsKK30KKwor LyogdGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90IGNhbGxiYWNrOiBhbWdldGJhdGNoLCBpbmRleC1v bmx5IHNjYW4gKi8KK3BnX2F0dHJpYnV0ZV9ob3QgYm9vbAoraGVhcGFtX2luZGV4X29ubHlfYW1n ZXRiYXRjaF9uZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCQkJICBTY2FuRGlyZWN0aW9u IGRpcmVjdGlvbiwKKwkJCQkJCQkJICBUdXBsZVRhYmxlU2xvdCAqc2xvdCkKK3sKKwlBc3NlcnQo c2Nhbi0+eHNfd2FudF9pdHVwICYmIHNjYW4tPnVzZWJhdGNocmluZyk7CisJQXNzZXJ0KHNjYW4t PmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbWdldGJhdGNoICE9IE5VTEwpOworCisJcmV0dXJu IGhlYXBhbV9pbmRleF9nZXRuZXh0X3Nsb3Qoc2NhbiwgZGlyZWN0aW9uLCBzbG90LCB0cnVlLCB0 cnVlKTsKK30KKwogLyogdGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90IGNhbGxiYWNrOiBhbWdldHR1 cGxlLCBwbGFpbiBpbmRleCBzY2FuICovCiBwZ19hdHRyaWJ1dGVfaG90IGJvb2wKIGhlYXBhbV9p bmRleF9wbGFpbl9hbWdldHR1cGxlX25leHQoSW5kZXhTY2FuRGVzYyBzY2FuLAogCQkJCQkJCQkg ICBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKIAkJCQkJCQkJICAgVHVwbGVUYWJsZVNsb3QgKnNs b3QpCiB7Ci0JQXNzZXJ0KCFzY2FuLT54c193YW50X2l0dXApOworCUFzc2VydCghc2Nhbi0+eHNf d2FudF9pdHVwICYmICFzY2FuLT51c2ViYXRjaHJpbmcpOwogCUFzc2VydChzY2FuLT5pbmRleFJl bGF0aW9uLT5yZF9pbmRhbS0+YW1nZXR0dXBsZSAhPSBOVUxMKTsKIAotCXJldHVybiBoZWFwYW1f aW5kZXhfZ2V0bmV4dF9zbG90KHNjYW4sIGRpcmVjdGlvbiwgc2xvdCwgZmFsc2UpOworCXJldHVy biBoZWFwYW1faW5kZXhfZ2V0bmV4dF9zbG90KHNjYW4sIGRpcmVjdGlvbiwgc2xvdCwgZmFsc2Us IGZhbHNlKTsKIH0KIAogLyogdGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90IGNhbGxiYWNrOiBhbWdl dHR1cGxlLCBpbmRleC1vbmx5IHNjYW4gKi8KQEAgLTI3MSwxMCArMzgwLDEwIEBAIGhlYXBhbV9p bmRleF9vbmx5X2FtZ2V0dHVwbGVfbmV4dChJbmRleFNjYW5EZXNjIHNjYW4sCiAJCQkJCQkJCSAg U2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCiAJCQkJCQkJCSAgVHVwbGVUYWJsZVNsb3QgKnNsb3Qp CiB7Ci0JQXNzZXJ0KHNjYW4tPnhzX3dhbnRfaXR1cCk7CisJQXNzZXJ0KHNjYW4tPnhzX3dhbnRf aXR1cCAmJiAhc2Nhbi0+dXNlYmF0Y2hyaW5nKTsKIAlBc3NlcnQoc2Nhbi0+aW5kZXhSZWxhdGlv bi0+cmRfaW5kYW0tPmFtZ2V0dHVwbGUgIT0gTlVMTCk7CiAKLQlyZXR1cm4gaGVhcGFtX2luZGV4 X2dldG5leHRfc2xvdChzY2FuLCBkaXJlY3Rpb24sIHNsb3QsIHRydWUpOworCXJldHVybiBoZWFw YW1faW5kZXhfZ2V0bmV4dF9zbG90KHNjYW4sIGRpcmVjdGlvbiwgc2xvdCwgdHJ1ZSwgZmFsc2Up OwogfQogCiAvKgpAQCAtMzg1LDcgKzQ5NCw3IEBAIGhlYXBhbV9pbmRleF9mZXRjaF90dXBsZV9p bXBsKFJlbGF0aW9uIHJlbCwKIH0KIAogLyoKLSAqIENvbW1vbiBpbXBsZW1lbnRhdGlvbiBmb3Ig Ym90aCBoZWFwYW1faW5kZXhfKl9nZXRuZXh0X3Nsb3QgdmFyaWFudHMuCisgKiBDb21tb24gaW1w bGVtZW50YXRpb24gZm9yIGFsbCBmb3VyIGhlYXBhbV9pbmRleF8qX2dldG5leHRfc2xvdCB2YXJp YW50cy4KICAqCiAgKiBUaGUgcmVzdWx0IGlzIHRydWUgaWYgYSB0dXBsZSBzYXRpc2Z5aW5nIHRo ZSBzY2FuIGtleXMgYW5kIHRoZSBzbmFwc2hvdCB3YXMKICAqIGZvdW5kLCBmYWxzZSBvdGhlcndp c2UuICBUaGUgdHVwbGUgaXMgc3RvcmVkIGluIHRoZSBzcGVjaWZpZWQgc2xvdC4KQEAgLTM5NCwx MiArNTAzLDEzIEBAIGhlYXBhbV9pbmRleF9mZXRjaF90dXBsZV9pbXBsKFJlbGF0aW9uIHJlbCwK ICAqIGRyb3BwZWQgYnkgYSBmdXR1cmUgY2FsbCBoZXJlIChvciBieSBhIGxhdGVyIGNhbGwgdG8g aGVhcGFtX2luZGV4X2ZldGNoX2VuZAogICogdGhyb3VnaCBpbmRleF9lbmRzY2FuKS4KICAqCi0g KiBUaGUgaW5kZXhfb25seSBwYXJhbWV0ZXIgaXMgYSBjb21waWxlLXRpbWUgY29uc3RhbnQgYXQg ZWFjaCBjYWxsIHNpdGUsCi0gKiBhbGxvd2luZyB0aGUgY29tcGlsZXIgdG8gc3BlY2lhbGl6ZSB0 aGUgY29kZSBmb3IgZWFjaCB2YXJpYW50LgorICogVGhlIGluZGV4X29ubHkgYW5kIGFtZ2V0YmF0 Y2ggcGFyYW1ldGVycyBhcmUgY29tcGlsZS10aW1lIGNvbnN0YW50cyBhdCBlYWNoCisgKiBjYWxs IHNpdGUsIGFsbG93aW5nIHRoZSBjb21waWxlciB0byBzcGVjaWFsaXplIHRoZSBjb2RlIGZvciBl YWNoIHZhcmlhbnQ6CiAgKi8KIHN0YXRpYyBwZ19hdHRyaWJ1dGVfYWx3YXlzX2lubGluZSBib29s CiBoZWFwYW1faW5kZXhfZ2V0bmV4dF9zbG90KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVj dGlvbiBkaXJlY3Rpb24sCi0JCQkJCQkgIFR1cGxlVGFibGVTbG90ICpzbG90LCBib29sIGluZGV4 X29ubHkpCisJCQkJCQkgIFR1cGxlVGFibGVTbG90ICpzbG90LCBib29sIGluZGV4X29ubHksCisJ CQkJCQkgIGJvb2wgYW1nZXRiYXRjaCkKIHsKIAlJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuID0g KEluZGV4RmV0Y2hIZWFwRGF0YSAqKSBzY2FuLT54c19oZWFwZmV0Y2g7CiAJYm9vbAkgICAqaGVh cF9jb250aW51ZSA9ICZzY2FuLT54c19oZWFwX2NvbnRpbnVlOwpAQCAtNDEzLDE0ICs1MjMsMjAg QEAgaGVhcGFtX2luZGV4X2dldG5leHRfc2xvdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJl Y3Rpb24gZGlyZWN0aW9uLAogCQlpZiAoISpoZWFwX2NvbnRpbnVlKQogCQl7CiAJCQkvKiBHZXQg dGhlIG5leHQgVElEIGZyb20gdGhlIGluZGV4ICovCi0JCQl0aWQgPSBpbmRleF9nZXRuZXh0X3Rp ZChzY2FuLCBkaXJlY3Rpb24pOworCQkJaWYgKGFtZ2V0YmF0Y2gpCisJCQkJdGlkID0gaGVhcGFt X2luZGV4X2dldG5leHRfc2NhbmJhdGNoX3BvcyhzY2FuLCBoc2NhbiwKKwkJCQkJCQkJCQkJCQkJ IGRpcmVjdGlvbiwKKwkJCQkJCQkJCQkJCQkJIGluZGV4X29ubHkgPworCQkJCQkJCQkJCQkJCQkg JmFsbF92aXNpYmxlIDogTlVMTCk7CisJCQllbHNlCisJCQkJdGlkID0gaW5kZXhfZ2V0bmV4dF90 aWQoc2NhbiwgZGlyZWN0aW9uKTsKIAogCQkJLyogSWYgd2UncmUgb3V0IG9mIGluZGV4IGVudHJp ZXMsIHdlJ3JlIGRvbmUgKi8KIAkJCWlmICh0aWQgPT0gTlVMTCkKIAkJCQlicmVhazsKIAotCQkJ LyogRm9yIGluZGV4LW9ubHkgc2NhbnMsIGNoZWNrIHRoZSB2aXNpYmlsaXR5IG1hcCAqLwotCQkJ aWYgKGluZGV4X29ubHkpCisJCQkvKiBGb3Igbm9uLWJhdGNoIGluZGV4LW9ubHkgc2NhbnMsIGNo ZWNrIHRoZSB2aXNpYmlsaXR5IG1hcCAqLworCQkJaWYgKGluZGV4X29ubHkgJiYgIWFtZ2V0YmF0 Y2gpCiAJCQkJYWxsX3Zpc2libGUgPSBWTV9BTExfVklTSUJMRShzY2FuLT5oZWFwUmVsYXRpb24s CiAJCQkJCQkJCQkJCSBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCksCiAJCQkJCQkJCQkJ CSAmaHNjYW4tPnhzX3ZtYnVmZmVyKTsKQEAgLTQ0NSw3ICs1NjEsNyBAQCBoZWFwYW1faW5kZXhf Z2V0bmV4dF9zbG90KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24s CiAJCQkJCXNjYW4tPmluc3RydW1lbnQtPm50YWJsZWZldGNoZXMrKzsKIAogCQkJCWlmICghaGVh cGFtX2luZGV4X2ZldGNoX2hlYXAoc2NhbiwgaHNjYW4sIHNsb3QsCi0JCQkJCQkJCQkJCSBoZWFw X2NvbnRpbnVlKSkKKwkJCQkJCQkJCQkJIGhlYXBfY29udGludWUsIGFtZ2V0YmF0Y2gpKQogCQkJ CXsKIAkJCQkJLyoKIAkJCQkJICogTm8gdmlzaWJsZSB0dXBsZS4gIElmIGNhbGxlciBzZXQgYSB2 aXNpdGVkLXBhZ2VzIGxpbWl0CkBAIC00NzcsNyArNTkzLDcgQEAgaGVhcGFtX2luZGV4X2dldG5l eHRfc2xvdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAogCQkJ CSAqIHdhbnQgdXMgdG8gYXNzdW1lIHRoYXQganVzdCBoYXZpbmcgb25lIHZpc2libGUgdHVwbGUg aW4gdGhlCiAJCQkJICogaG90IGNoYWluIGlzIGFsd2F5cyBnb29kIGVub3VnaC4KIAkJCQkgKi8K LQkJCQlBc3NlcnQoISgqaGVhcF9jb250aW51ZSAmJiBJc01WQ0NTbmFwc2hvdChzY2FuLT54c19z bmFwc2hvdCkpKTsKKwkJCQlBc3NlcnQoISgqaGVhcF9jb250aW51ZSAmJiBzY2FuLT5NVkNDU2Nh bikpOwogCQkJfQogCQkJZWxzZQogCQkJewpAQCAtNTA0LDcgKzYyMCw4IEBAIGhlYXBhbV9pbmRl eF9nZXRuZXh0X3Nsb3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlv biwKIAkJCSAqIGVudHJ5LiAgSWYgd2UgZG9uJ3QgZmluZCBhbnl0aGluZywgbG9vcCBhcm91bmQg YW5kIGdyYWIgdGhlCiAJCQkgKiBuZXh0IFRJRCBmcm9tIHRoZSBpbmRleC4KIAkJCSAqLwotCQkJ aWYgKGhlYXBhbV9pbmRleF9mZXRjaF9oZWFwKHNjYW4sIGhzY2FuLCBzbG90LCBoZWFwX2NvbnRp bnVlKSkKKwkJCWlmIChoZWFwYW1faW5kZXhfZmV0Y2hfaGVhcChzY2FuLCBoc2Nhbiwgc2xvdCwg aGVhcF9jb250aW51ZSwKKwkJCQkJCQkJCQlhbWdldGJhdGNoKSkKIAkJCQlyZXR1cm4gdHJ1ZTsK IAkJfQogCX0KQEAgLTUyNiw3ICs2NDMsOCBAQCBoZWFwYW1faW5kZXhfZ2V0bmV4dF9zbG90KElu ZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCiAgKi8KIHN0YXRpYyBw Z19hdHRyaWJ1dGVfYWx3YXlzX2lubGluZSBib29sCiBoZWFwYW1faW5kZXhfZmV0Y2hfaGVhcChJ bmRleFNjYW5EZXNjIHNjYW4sIEluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4sCi0JCQkJCQlUdXBs ZVRhYmxlU2xvdCAqc2xvdCwgYm9vbCAqaGVhcF9jb250aW51ZSkKKwkJCQkJCVR1cGxlVGFibGVT bG90ICpzbG90LCBib29sICpoZWFwX2NvbnRpbnVlLAorCQkJCQkJYm9vbCBhbWdldGJhdGNoKQog ewogCWJvb2wJCWFsbF9kZWFkID0gZmFsc2U7CiAJYm9vbAkJZm91bmQ7CkBAIC01NDAsMTQgKzY1 OCwzMTIgQEAgaGVhcGFtX2luZGV4X2ZldGNoX2hlYXAoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRl eEZldGNoSGVhcERhdGEgKmhzY2FuLAogCQlwZ3N0YXRfY291bnRfaGVhcF9mZXRjaChzY2FuLT5p bmRleFJlbGF0aW9uKTsKIAogCS8qCi0JICogSWYgd2Ugc2Nhbm5lZCBhIHdob2xlIEhPVCBjaGFp biBhbmQgZm91bmQgb25seSBkZWFkIHR1cGxlcywgdGVsbCBpbmRleAotCSAqIEFNIHRvIGtpbGwg aXRzIGVudHJ5IGZvciB0aGF0IFRJRCAodGhpcyB3aWxsIHRha2UgZWZmZWN0IGluIHRoZSBuZXh0 Ci0JICogYW1nZXR0dXBsZSBjYWxsLCBpbiBpbmRleF9nZXRuZXh0X3RpZCkuICBXZSBkbyBub3Qg ZG8gdGhpcyB3aGVuIGluCi0JICogcmVjb3ZlcnkgYmVjYXVzZSBpdCBtYXkgdmlvbGF0ZSBNVkND IHRvIGRvIHNvLiAgU2VlIGNvbW1lbnRzIGluCi0JICogUmVsYXRpb25HZXRJbmRleFNjYW4oKS4K KwkgKiBJZiB3ZSBzY2FubmVkIGEgd2hvbGUgSE9UIGNoYWluIGFuZCBmb3VuZCBvbmx5IGRlYWQg dHVwbGVzLCByZW1lbWJlciBpdAorCSAqIGZvciBsYXRlci4gIFdlIGRvIG5vdCBkbyB0aGlzIHdo ZW4gaW4gcmVjb3ZlcnkgYmVjYXVzZSBpdCBtYXkgdmlvbGF0ZQorCSAqIE1WQ0MgdG8gZG8gc28u ICBTZWUgY29tbWVudHMgaW4gUmVsYXRpb25HZXRJbmRleFNjYW4oKS4KIAkgKi8KIAlpZiAoIXNj YW4tPnhhY3RTdGFydGVkSW5SZWNvdmVyeSkKLQkJc2Nhbi0+a2lsbF9wcmlvcl90dXBsZSA9IGFs bF9kZWFkOworCXsKKwkJaWYgKGFtZ2V0YmF0Y2gpCisJCXsKKwkJCWlmIChhbGxfZGVhZCkKKwkJ CQl0YWJsZWFtX3V0aWxfc2NhbnBvc19raWxsaXRlbShzY2FuKTsKKwkJfQorCQllbHNlCisJCXsK KwkJCS8qCisJCQkgKiBUZWxsIGFtZ2V0dHVwbGUtYmFzZWQgaW5kZXggQU0gdG8ga2lsbCBpdHMg ZW50cnkgZm9yIHRoYXQgVElECisJCQkgKiAodGhpcyB3aWxsIHRha2UgZWZmZWN0IGluIHRoZSBu ZXh0IGNhbGwsIGluIGluZGV4X2dldG5leHRfdGlkKQorCQkJICovCisJCQlzY2FuLT5raWxsX3By aW9yX3R1cGxlID0gYWxsX2RlYWQ7CisJCX0KKwl9CiAKIAlyZXR1cm4gZm91bmQ7CiB9CisKKy8q CisgKiBHZXQgbmV4dCBUSUQgZnJvbSBiYXRjaCByaW5nIGJ1ZmZlciwgbW92aW5nIGluIHRoZSBn aXZlbiBzY2FuIGRpcmVjdGlvbi4KKyAqIEFsc28gc2V0cyAqYWxsX3Zpc2libGUgZm9yIGl0ZW0g d2hlbiBjYWxsZXIgcGFzc2VzIGEgbm9uLU5VTEwgYXJnLgorICovCitzdGF0aWMgcGdfYXR0cmli dXRlX2Fsd2F5c19pbmxpbmUgSXRlbVBvaW50ZXIKK2hlYXBhbV9pbmRleF9nZXRuZXh0X3NjYW5i YXRjaF9wb3MoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuLAor CQkJCQkJCQkgICBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwgYm9vbCAqYWxsX3Zpc2libGUpCit7 CisJQmF0Y2hSaW5nQnVmZmVyICpiYXRjaHJpbmdidWYgPSAmc2Nhbi0+YmF0Y2hyaW5nYnVmOwor CUJhdGNoUmluZ0l0ZW1Qb3MgKnNjYW5Qb3MgPSAmYmF0Y2hyaW5nYnVmLT5zY2FuUG9zOworCUlu ZGV4U2NhbkJhdGNoIHNjYW5CYXRjaCA9IE5VTEw7CisJYm9vbAkJaGFkRXhpc3RpbmdTY2FuQmF0 Y2g7CisKKwlBc3NlcnQoIXNjYW5Qb3MtPnZhbGlkIHx8IGJhdGNocmluZ2J1Zi0+aGVhZEJhdGNo ID09IHNjYW5Qb3MtPmJhdGNoKTsKKwlBc3NlcnQoc2NhblBvcy0+dmFsaWQgfHwgaW5kZXhfc2Nh bl9iYXRjaF9jb3VudChzY2FuKSA9PSAwKTsKKwlBc3NlcnQoYWxsX3Zpc2libGUgPT0gTlVMTCB8 fCBzY2FuLT54c193YW50X2l0dXApOworCisJLyoKKwkgKiBDaGVjayBpZiB0aGVyZSdzIGFuIGV4 aXN0aW5nIGxvYWRlZCBzY2FuQmF0Y2ggZm9yIHVzIHRvIHJldHVybiB0aGUgbmV4dAorCSAqIG1h dGNoaW5nIGl0ZW0ncyBUSUQvaW5kZXggdHVwbGUgZnJvbQorCSAqLworCWhhZEV4aXN0aW5nU2Nh bkJhdGNoID0gc2NhblBvcy0+dmFsaWQ7CisJaWYgKHNjYW5Qb3MtPnZhbGlkKQorCXsKKwkJLyoK KwkJICogc2NhblBvcyBpcyB2YWxpZCwgc28gc2NhbkJhdGNoIG11c3QgYWxyZWFkeSBiZSBsb2Fk ZWQgaW4gYmF0Y2ggcmluZworCQkgKiBidWZmZXIuICBXZSByZWx5IG9uIHRoYXQgaGVyZS4KKwkJ ICovCisJCXBnX2Fzc3VtZShiYXRjaHJpbmdidWYtPmhlYWRCYXRjaCA9PSBzY2FuUG9zLT5iYXRj aCk7CisKKwkJc2NhbkJhdGNoID0gaW5kZXhfc2Nhbl9iYXRjaChzY2FuLCBzY2FuUG9zLT5iYXRj aCk7CisKKwkJaWYgKGluZGV4X3NjYW5fcG9zX2FkdmFuY2UoZGlyZWN0aW9uLCBzY2FuQmF0Y2gs IHNjYW5Qb3MpKQorCQkJcmV0dXJuIGhlYXBhbV9pbmRleF9yZXR1cm5fc2NhbnBvc190aWQoc2Nh biwgaHNjYW4sIGRpcmVjdGlvbiwKKwkJCQkJCQkJCQkJCSAgIHNjYW5CYXRjaCwgc2NhblBvcywK KwkJCQkJCQkJCQkJCSAgIGFsbF92aXNpYmxlKTsKKwl9CisKKwkvKgorCSAqIEVpdGhlciByYW4g b3V0IG9mIGl0ZW1zIGZyb20gb3VyIGV4aXN0aW5nIHNjYW5CYXRjaCwgb3IgaXQgaGFzbid0IGJl ZW4KKwkgKiBsb2FkZWQgeWV0IChiZWNhdXNlIHRoaXMgaXMgdGhlIGZpcnN0IGNhbGwgaGVyZSBm b3IgdGhlIGVudGlyZSBzY2FuKS4KKwkgKiBUcnkgdG8gYWR2YW5jZSBzY2FuQmF0Y2ggdG8gdGhl IG5leHQgYmF0Y2ggKG9yIGdldCB0aGUgZmlyc3QgYmF0Y2gpLgorCSAqLworCXNjYW5CYXRjaCA9 IHRhYmxlYW1fdXRpbF9mZXRjaF9uZXh0X2JhdGNoKHNjYW4sIGRpcmVjdGlvbiwKKwkJCQkJCQkJ CQkJICBzY2FuQmF0Y2gsIHNjYW5Qb3MpOworCisJaWYgKCFzY2FuQmF0Y2gpCisJeworCQkvKgor CQkgKiBXZSdyZSBkb25lOyBubyBtb3JlIGJhdGNoZXMgaW4gdGhlIGN1cnJlbnQgc2NhbiBkaXJl Y3Rpb24uCisJCSAqCisJCSAqIE5vdGU6IHNjYW5Qb3MgaXMgZ2VuZXJhbGx5IHN0aWxsIHZhbGlk IGF0IHRoaXMgcG9pbnQuICBUaGUgc2NhbgorCQkgKiBtaWdodCBzdGlsbCBiYWNrIHVwIGluIHRo ZSBvdGhlciBkaXJlY3Rpb24uCisJCSAqLworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvKgorCSAq IEFkdmFuY2VkIHNjYW5CYXRjaC4gIE5vdyBwb3NpdGlvbiBzY2FuUG9zIHRvIHRoZSBzdGFydCBv ZiBuZXcKKwkgKiBzY2FuQmF0Y2guCisJICovCisJaW5kZXhfc2Nhbl9wb3NfbmV4dGJhdGNoKGRp cmVjdGlvbiwgc2NhbkJhdGNoLCBzY2FuUG9zKTsKKwlBc3NlcnQoaW5kZXhfc2Nhbl9iYXRjaChz Y2FuLCBzY2FuUG9zLT5iYXRjaCkgPT0gc2NhbkJhdGNoKTsKKworCS8qCisJICogUmVtb3ZlIHRo ZSBoZWFkIGJhdGNoIGZyb20gdGhlIGJhdGNoIHJpbmcgYnVmZmVyIChleGNlcHQgd2hlbiB0aGlz IG5ldworCSAqIHNjYW5CYXRjaCBpcyBvdXIgb25seSBvbmUpCisJICovCisJaWYgKGhhZEV4aXN0 aW5nU2NhbkJhdGNoKQorCXsKKwkJSW5kZXhTY2FuQmF0Y2ggaGVhZEJhdGNoID0gaW5kZXhfc2Nh bl9iYXRjaChzY2FuLAorCQkJCQkJCQkJCQkJCWJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoKTsKKwor CQlBc3NlcnQoaGVhZEJhdGNoICE9IHNjYW5CYXRjaCk7CisJCUFzc2VydChiYXRjaHJpbmdidWYt PmhlYWRCYXRjaCAhPSBzY2FuUG9zLT5iYXRjaCk7CisKKwkJLyogZnJlZSBvYnNvbGVzY2VudCBo ZWFkIGJhdGNoICh1bmxlc3MgaXQgaXMgc2NhbidzIG1hcmtCYXRjaCkgKi8KKwkJdGFibGVhbV91 dGlsX2ZyZWVfYmF0Y2goc2NhbiwgaGVhZEJhdGNoKTsKKworCQkvKiBSZW1vdmUgdGhlIGJhdGNo IGZyb20gdGhlIHJpbmcgYnVmZmVyIChldmVuIGlmIGl0J3MgbWFya0JhdGNoKSAqLworCQliYXRj aHJpbmdidWYtPmhlYWRCYXRjaCsrOworCX0KKworCS8qIEluIHByYWN0aWNlIHNjYW5CYXRjaCB3 aWxsIGFsd2F5cyBiZSB0aGUgcmluZyBidWZmZXIncyBoZWFkQmF0Y2ggKi8KKwlBc3NlcnQoYmF0 Y2hyaW5nYnVmLT5oZWFkQmF0Y2ggPT0gc2NhblBvcy0+YmF0Y2gpOworCisJcmV0dXJuIGhlYXBh bV9pbmRleF9yZXR1cm5fc2NhbnBvc190aWQoc2NhbiwgaHNjYW4sIGRpcmVjdGlvbiwKKwkJCQkJ CQkJCQkgICBzY2FuQmF0Y2gsIHNjYW5Qb3MsIGFsbF92aXNpYmxlKTsKK30KKworLyoKKyAqIFNh dmUgdGhlIGN1cnJlbnQgc2NhblBvcy9zY2FuQmF0Y2ggaXRlbSdzIFRJRCBpbiBzY2FuJ3MgeHNf aGVhcHRpZCwgYW5kCisgKiByZXR1cm4gYSBwb2ludGVyIHRvIHRoYXQgVElELiAgV2hlbiBhbGxf dmlzaWJsZSBpc24ndCBOVUxMIChkdXJpbmcgYW4KKyAqIGluZGV4LW9ubHkgc2NhbiksIGFsc28g c2V0cyBpdGVtJ3MgdmlzaWJpbGl0eSBzdGF0dXMgaW4gKmFsbF92aXNpYmxlLgorICoKKyAqIGhl YXBhbV9pbmRleF9nZXRuZXh0X3NjYW5iYXRjaF9wb3MgaGVscGVyIGZ1bmN0aW9uLgorICovCitz dGF0aWMgaW5saW5lIEl0ZW1Qb2ludGVyCitoZWFwYW1faW5kZXhfcmV0dXJuX3NjYW5wb3NfdGlk KEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiwKKwkJCQkJCQkJ U2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJCQkJCUluZGV4U2NhbkJhdGNoIHNjYW5CYXRj aCwKKwkJCQkJCQkJQmF0Y2hSaW5nSXRlbVBvcyAqc2NhblBvcywKKwkJCQkJCQkJYm9vbCAqYWxs X3Zpc2libGUpCit7CisJSGVhcEJhdGNoRGF0YSAqaGJhdGNoOworCisJcGdzdGF0X2NvdW50X2lu ZGV4X3R1cGxlcyhzY2FuLT5pbmRleFJlbGF0aW9uLCAxKTsKKworCS8qIFNldCB4c19oZWFwdGlk LCB3aGljaCBjYWxsZXIgKGFuZCBjb3JlIGV4ZWN1dG9yKSB3aWxsIG5lZWQgKi8KKwlzY2FuLT54 c19oZWFwdGlkID0gc2NhbkJhdGNoLT5pdGVtc1tzY2FuUG9zLT5pdGVtXS50YWJsZVRpZDsKKwor CWlmIChhbGxfdmlzaWJsZSA9PSBOVUxMKQorCXsKKwkJLyoKKwkJICogUGxhaW4gaW5kZXggc2Nh bi4KKwkJICovCisJCUFzc2VydCghc2Nhbi0+eHNfd2FudF9pdHVwKTsKKwkJcmV0dXJuICZzY2Fu LT54c19oZWFwdGlkOworCX0KKworCS8qCisJICogSW5kZXgtb25seSBzY2FuLgorCSAqCisJICog QWxzbyBzZXQgeHNfaXR1cCwgd2hpY2ggY2FsbGVyIGFsc28gbmVlZHMuCisJICovCisJQXNzZXJ0 KHNjYW4tPnhzX3dhbnRfaXR1cCk7CisJc2Nhbi0+eHNfaXR1cCA9IChJbmRleFR1cGxlKSAoc2Nh bkJhdGNoLT5jdXJyVHVwbGVzICsKKwkJCQkJCQkJICBzY2FuQmF0Y2gtPml0ZW1zW3NjYW5Qb3Mt Pml0ZW1dLnR1cGxlT2Zmc2V0KTsKKworCS8qCisJICogU2V0IHZpc2liaWxpdHkgaW5mbyBmb3Ig dGhlIGN1cnJlbnQgc2NhblBvcyBpdGVtIChwbHVzIHBvc3NpYmx5IHNvbWUKKwkgKiBhZGRpdGlv bmFsIGl0ZW1zIGluIHRoZSBjdXJyZW50IHNjYW4gZGlyZWN0aW9uKSBhcyBuZWVkZWQKKwkgKi8K KwloYmF0Y2ggPSBoZWFwX2JhdGNoX2RhdGEoc2Nhbiwgc2NhbkJhdGNoKTsKKwlpZiAoIShoYmF0 Y2gtPnZpc0luZm9bc2NhblBvcy0+aXRlbV0gJiBIRUFQX0JBVENIX1ZJU19DSEVDS0VEKSkKKwkJ aGVhcGFtX2luZGV4X2JhdGNoX3Bvc192aXNpYmlsaXR5KHNjYW4sIGRpcmVjdGlvbiwgc2NhbkJh dGNoLCBoYmF0Y2gsCisJCQkJCQkJCQkJICBzY2FuUG9zKTsKKworCS8qIEZpbmFsbHksIHNldCBh bGxfdmlzaWJsZSBmb3IgY2FsbGVyICovCisJKmFsbF92aXNpYmxlID0KKwkJKGhiYXRjaC0+dmlz SW5mb1tzY2FuUG9zLT5pdGVtXSAmIEhFQVBfQkFUQ0hfVklTX0FMTF9WSVNJQkxFKSAhPSAwOwor CisJcmV0dXJuICZzY2FuLT54c19oZWFwdGlkOworfQorCisvKgorICogT2J0YWluIHZpc2liaWxp dHkgaW5mb3JtYXRpb24gZm9yIGEgVElEIGZyb20gY2FsbGVyJ3MgYmF0Y2guCisgKgorICogQ2Fs bGVkIGR1cmluZyBhbWdldGJhdGNoIGluZGV4LW9ubHkgc2NhbnMuICBXZSBhbHdheXMgY2hlY2sg dGhlIHZpc2liaWxpdHkKKyAqIG9mIGNhbGxlcidzIGl0ZW0gKGFuIG9mZnNldCBpbnRvIGNhbGxl cidzIGJhdGNoLT5pdGVtc1tdIGFycmF5KS4gIFdlIG1pZ2h0CisgKiBhbHNvIHNldCB2aXNpYmls aXR5IGluZm8gZm9yIG90aGVyIGl0ZW1zIGZyb20gY2FsbGVyJ3MgYmF0Y2ggbW9yZQorICogcHJv YWN0aXZlbHkgd2hlbiB0aGF0IG1ha2VzIHNlbnNlLgorICoKKyAqIFdlIGtlZXAgdHdvIGNvbXBl dGluZyBjb25zaWRlcmF0aW9ucyBpbiBiYWxhbmNlIHdoZW4gZGV0ZXJtaW5pbmcgd2hldGhlciB0 bworICogY2hlY2sgYWRkaXRpb25hbCBpdGVtczogdGhlIG5lZWQgdG8ga2VlcCB0aGUgY29zdCBv ZiB2aXNpYmlsaXR5IG1hcCBhY2Nlc3MKKyAqIHVuZGVyIGNvbnRyb2wgd2hlbiBtb3N0IGl0ZW1z IHdpbGwgbmV2ZXIgYmUgcmV0dXJuZWQgYnkgdGhlIHNjYW4gYW55d2F5CisgKiAoaW1wb3J0YW50 IGZvciBpbm5lciBpbmRleCBzY2FucyBvZiBhbnRpLWpvaW5zIGFuZCBzZW1pLWpvaW5zKSwgYW5k IHRoZQorICogbmVlZCB0byB1bmd1YXJkIGJhdGNoZXMgcHJvbXB0bHkuCisgKgorICogT25jZSB3 ZSd2ZSByZXNvbHZlZCB2aXNpYmlsaXR5IGZvciBhbGwgaXRlbXMgaW4gYSBiYXRjaCwgd2UgY2Fu IHNhZmVseQorICogdW5ndWFyZCBpdCBieSBjYWxsaW5nIGFtdW5ndWFyZGJhdGNoLiAgVGhpcyBp cyBzYWZlIHdpdGggcmVzcGVjdCB0bworICogY29uY3VycmVudCBWQUNVVU0gYmVjYXVzZSB0aGUg YmF0Y2gncyBndWFyZCAodHlwaWNhbGx5IGEgYnVmZmVyIHBpbiBvbiB0aGUKKyAqIG9yaWdpbmF0 aW5nIGluZGV4IHBhZ2UpIGJsb2NrcyBWQUNVVU0gZnJvbSBhY3F1aXJpbmcgYSBjb25mbGljdGlu ZyBjbGVhbnVwCisgKiBsb2NrIG9uIHRoYXQgcGFnZS4gIENvcHlpbmcgdGhlIHJlbGV2YW50IHZp c2liaWxpdHkgbWFwIGRhdGEgaW50byBvdXIgbG9jYWwKKyAqIGNhY2hlIHN1ZmZpY2VzIHRvIHBy ZXZlbnQgdW5zYWZlIGNvbmN1cnJlbnQgVElEIHJlY3ljbGluZzogaWYgYW55IG9mIHRoZXNlCisg KiBUSURzIHBvaW50IHRvIGRlYWQgaGVhcCB0dXBsZXMsIFZBQ1VVTSBjYW5ub3QgcG9zc2libHkg cmV0dXJuIGZyb20KKyAqIGFtYnVsa2RlbGV0ZSBhbmQgbWFyayB0aGUgcG9pbnRlZC10byBoZWFw IHBhZ2VzIGFzIGFsbC12aXNpYmxlLiAgVkFDVVVNCisgKiBfY2FuXyBkbyBzbyBvbmNlIHRoZSBi YXRjaCBpcyB1bmd1YXJkZWQsIGJ1dCB0aGF0J3Mgb2theTsgd2UnbGwgYmUgd29ya2luZworICog b2ZmIG9mIGNhY2hlZCB2aXNpYmlsaXR5IGluZm8gdGhhdCBpbmRpY2F0ZXMgdGhhdCB0aGUgZGVh ZCBUSURzIGFyZSBOT1QKKyAqIGFsbC12aXNpYmxlLgorICoKKyAqIFdoYXQgYWJvdXQgdGhlIG9w cG9zaXRlIGNhc2UsIHdoZXJlIGEgcGFnZSB3YXMgYWxsLXZpc2libGUgd2hlbiB3ZSBjYWNoZWQK KyAqIHRoZSBWTSBiaXRzIGJ1dCB0dXBsZXMgb24gaXQgYXJlIGRlbGV0ZWQgYWZ0ZXJ3YXJkcz8g IFRoYXQgaXMgc2FmZSB0b286IGFueQorICogdHVwbGUgdGhhdCB3YXMgdmlzaWJsZSB0byBhbGwg d2hlbiB3ZSByZWFkIHRoZSBWTSBtdXN0IGFsc28gYmUgdmlzaWJsZSB0bworICogb3VyIE1WQ0Mg c25hcHNob3QsIHNvIGl0IGlzIGNvcnJlY3QgdG8gc2tpcCB0aGUgaGVhcCBmZXRjaCBmb3IgdGhv c2UgVElEcy4KKyAqLworc3RhdGljIHZvaWQKK2hlYXBhbV9pbmRleF9iYXRjaF9wb3NfdmlzaWJp bGl0eShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJ CQkgIEluZGV4U2NhbkJhdGNoIGJhdGNoLCBIZWFwQmF0Y2hEYXRhICpoYmF0Y2gsCisJCQkJCQkJ CSAgQmF0Y2hSaW5nSXRlbVBvcyAqcG9zKQoreworCUluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4g PSAoSW5kZXhGZXRjaEhlYXBEYXRhICopIHNjYW4tPnhzX2hlYXBmZXRjaDsKKwlpbnQJCQlwb3NJ dGVtID0gcG9zLT5pdGVtOworCWJvb2wJCWFsbGJhdGNoaXRlbXN2aXNpYmxlOworCUJsb2NrTnVt YmVyIGN1cnZtaGVhcGJsa25vID0gSW52YWxpZEJsb2NrTnVtYmVyOworCXVpbnQ4CQljdXJ2bWhl YXBibGtmbGFncyA9IDA7CisKKwlBc3NlcnQoaGJhdGNoID09IGhlYXBfYmF0Y2hfZGF0YShzY2Fu LCBiYXRjaCkpOworCisJLyoKKwkgKiBUaGUgYmF0Y2ggbXVzdCBzdGlsbCBiZSBndWFyZGVkIChh bXVuZ3VhcmRiYXRjaCBoYXMgbm90IGJlZW4gY2FsbGVkCisJICogeWV0KSwgc28gdGhlIFRJRCBy ZWN5Y2xpbmcgaW50ZXJsb2NrIGlzIHN0aWxsIGluIGVmZmVjdC4KKwkgKi8KKwlBc3NlcnQoIXNj YW4tPmJhdGNoSW1tZWRpYXRlVW5ndWFyZCk7CisKKwkvKgorCSAqIFNldCB2aXNpYmlsaXR5IGlu Zm8gZm9yIGEgcmFuZ2Ugb2YgaXRlbXMsIGluIHNjYW4gb3JkZXIuCisJICoKKwkgKiBOb3RlOiB2 aXNpYmlsaXR5bWFwX2dldF9zdGF0dXMgZG9lcyBub3QgbG9jayB0aGUgdmlzaWJpbGl0eSBtYXAg YnVmZmVyLAorCSAqIHNvIHRoZSByZXN1bHQgY291bGQgYmUgc2xpZ2h0bHkgc3RhbGUuICBTZWUg dGhlICJNZW1vcnkgb3JkZXJpbmcKKwkgKiBlZmZlY3RzIiBkaXNjdXNzaW9uIGFib3ZlIHZpc2li aWxpdHltYXBfZ2V0X3N0YXR1cyBmb3IgYW4gZXhwbGFuYXRpb24KKwkgKiBvZiB3aHkgdGhpcyBp cyBva2F5LgorCSAqLworCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcmVjdGlvbikpCisJ eworCQlpbnQJCQlsYXN0U2V0SXRlbSA9IE1pbihiYXRjaC0+bGFzdEl0ZW0sCisJCQkJCQkJCQkg IHBvc0l0ZW0gKyBoc2Nhbi0+eHNfdm1faXRlbXMgLSAxKTsKKworCQlmb3IgKGludCBzZXRJdGVt ID0gcG9zSXRlbTsgc2V0SXRlbSA8PSBsYXN0U2V0SXRlbTsgc2V0SXRlbSsrKQorCQl7CisJCQlJ dGVtUG9pbnRlciB0aWQgPSAmYmF0Y2gtPml0ZW1zW3NldEl0ZW1dLnRhYmxlVGlkOworCQkJQmxv Y2tOdW1iZXIgaGVhcGJsa25vID0gSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcih0aWQpOworCQkJ dWludDgJCWZsYWdzOworCisJCQlpZiAoaGVhcGJsa25vID09IGN1cnZtaGVhcGJsa25vKQorCQkJ eworCQkJCWhiYXRjaC0+dmlzSW5mb1tzZXRJdGVtXSA9IGN1cnZtaGVhcGJsa2ZsYWdzOworCQkJ CWNvbnRpbnVlOworCQkJfQorCisJCQlmbGFncyA9IEhFQVBfQkFUQ0hfVklTX0NIRUNLRUQ7CisJ CQlpZiAoVk1fQUxMX1ZJU0lCTEUoc2Nhbi0+aGVhcFJlbGF0aW9uLCBoZWFwYmxrbm8sICZoc2Nh bi0+eHNfdm1idWZmZXIpKQorCQkJCWZsYWdzIHw9IEhFQVBfQkFUQ0hfVklTX0FMTF9WSVNJQkxF OworCisJCQloYmF0Y2gtPnZpc0luZm9bc2V0SXRlbV0gPSBjdXJ2bWhlYXBibGtmbGFncyA9IGZs YWdzOworCQkJY3Vydm1oZWFwYmxrbm8gPSBoZWFwYmxrbm87CisJCX0KKworCQlhbGxiYXRjaGl0 ZW1zdmlzaWJsZSA9IGxhc3RTZXRJdGVtID49IGJhdGNoLT5sYXN0SXRlbSAmJgorCQkJKHBvc0l0 ZW0gPT0gYmF0Y2gtPmZpcnN0SXRlbSB8fAorCQkJIChoYmF0Y2gtPnZpc0luZm9bYmF0Y2gtPmZp cnN0SXRlbV0gJiBIRUFQX0JBVENIX1ZJU19DSEVDS0VEKSk7CisJfQorCWVsc2UKKwl7CisJCWlu dAkJCWxhc3RTZXRJdGVtID0gTWF4KGJhdGNoLT5maXJzdEl0ZW0sCisJCQkJCQkJCQkgIHBvc0l0 ZW0gLSBoc2Nhbi0+eHNfdm1faXRlbXMgKyAxKTsKKworCQlmb3IgKGludCBzZXRJdGVtID0gcG9z SXRlbTsgc2V0SXRlbSA+PSBsYXN0U2V0SXRlbTsgc2V0SXRlbS0tKQorCQl7CisJCQlJdGVtUG9p bnRlciB0aWQgPSAmYmF0Y2gtPml0ZW1zW3NldEl0ZW1dLnRhYmxlVGlkOworCQkJQmxvY2tOdW1i ZXIgaGVhcGJsa25vID0gSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcih0aWQpOworCQkJdWludDgJ CWZsYWdzOworCisJCQlpZiAoaGVhcGJsa25vID09IGN1cnZtaGVhcGJsa25vKQorCQkJeworCQkJ CWhiYXRjaC0+dmlzSW5mb1tzZXRJdGVtXSA9IGN1cnZtaGVhcGJsa2ZsYWdzOworCQkJCWNvbnRp bnVlOworCQkJfQorCisJCQlmbGFncyA9IEhFQVBfQkFUQ0hfVklTX0NIRUNLRUQ7CisJCQlpZiAo Vk1fQUxMX1ZJU0lCTEUoc2Nhbi0+aGVhcFJlbGF0aW9uLCBoZWFwYmxrbm8sICZoc2Nhbi0+eHNf dm1idWZmZXIpKQorCQkJCWZsYWdzIHw9IEhFQVBfQkFUQ0hfVklTX0FMTF9WSVNJQkxFOworCisJ CQloYmF0Y2gtPnZpc0luZm9bc2V0SXRlbV0gPSBjdXJ2bWhlYXBibGtmbGFncyA9IGZsYWdzOwor CQkJY3Vydm1oZWFwYmxrbm8gPSBoZWFwYmxrbm87CisJCX0KKworCQlhbGxiYXRjaGl0ZW1zdmlz aWJsZSA9IGxhc3RTZXRJdGVtIDw9IGJhdGNoLT5maXJzdEl0ZW0gJiYKKwkJCShwb3NJdGVtID09 IGJhdGNoLT5sYXN0SXRlbSB8fAorCQkJIChoYmF0Y2gtPnZpc0luZm9bYmF0Y2gtPmxhc3RJdGVt XSAmIEhFQVBfQkFUQ0hfVklTX0NIRUNLRUQpKTsKKwl9CisKKwkvKgorCSAqIEl0J3Mgc2FmZSB0 byB1bmd1YXJkIHRoZSBiYXRjaCAodmlhIGFtdW5ndWFyZGJhdGNoKSBhcyBzb29uIGFzIHdlJ3Zl CisJICogcmVzb2x2ZWQgdGhlIHZpc2liaWxpdHkgc3RhdHVzIG9mIGFsbCBvZiBpdHMgaXRlbXMg KHVubGVzcyB0aGlzIGlzIGEKKwkgKiBub24tTVZDQyBzY2FuKQorCSAqLworCWlmIChhbGxiYXRj aGl0ZW1zdmlzaWJsZSkKKwl7CisJCUFzc2VydChoYmF0Y2gtPnZpc0luZm9bYmF0Y2gtPmZpcnN0 SXRlbV0gJiBIRUFQX0JBVENIX1ZJU19DSEVDS0VEKTsKKwkJQXNzZXJ0KGhiYXRjaC0+dmlzSW5m b1tiYXRjaC0+bGFzdEl0ZW1dICYgSEVBUF9CQVRDSF9WSVNfQ0hFQ0tFRCk7CisKKwkJaWYgKGJh dGNoLT5pc0d1YXJkZWQgJiYgc2Nhbi0+TVZDQ1NjYW4pCisJCQl0YWJsZWFtX3V0aWxfdW5ndWFy ZF9iYXRjaChzY2FuLCBiYXRjaCk7CisJfQorCisJLyoKKwkgKiBFbHNlIGNoZWNrIHZpc2liaWxp dHkgZm9yIHR3aWNlIGFzIG1hbnkgaXRlbXMgbmV4dCB0aW1lLCBvciBhbGwgaXRlbXMuCisJICog V2UgY2hlY2sgYWxsIGl0ZW1zIGluIG9uZSBnbyBvbmNlIHdlJ3JlIHBhc3NlZCB0aGUgc2Nhbidz IGZpcnN0IGJhdGNoLgorCSAqLworCWVsc2UgaWYgKGhzY2FuLT54c192bV9pdGVtcyA8IChiYXRj aC0+bGFzdEl0ZW0gLSBiYXRjaC0+Zmlyc3RJdGVtKSkKKwkJaHNjYW4tPnhzX3ZtX2l0ZW1zICo9 IDI7CisJZWxzZQorCQloc2Nhbi0+eHNfdm1faXRlbXMgPSBzY2FuLT5tYXhpdGVtc2JhdGNoOwor fQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L01ha2VmaWxlIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL2luZGV4L01ha2VmaWxlCmluZGV4IDZmMmUzMDYxYS4uZTZkNjgxYjQwIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvTWFrZWZpbGUKKysrIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL2luZGV4L01ha2VmaWxlCkBAIC0xNiw2ICsxNiw3IEBAIE9CSlMgPSBcCiAJ YW1hcGkubyBcCiAJYW12YWxpZGF0ZS5vIFwKIAlnZW5hbS5vIFwKLQlpbmRleGFtLm8KKwlpbmRl eGFtLm8gXAorCWluZGV4YmF0Y2gubwogCiBpbmNsdWRlICQodG9wX3NyY2Rpcikvc3JjL2JhY2tl bmQvY29tbW9uLm1rCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvYW1hcGku YyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9hbWFwaS5jCmluZGV4IGVmYTAwNzAzMC4uYWJh OWUyYjQ2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvYW1hcGkuYworKysg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvYW1hcGkuYwpAQCAtNTUsNiArNTUsMTEgQEAgR2V0 SW5kZXhBbVJvdXRpbmUoT2lkIGFtaGFuZGxlcikKIAlBc3NlcnQocm91dGluZS0+YW1yZXNjYW4g IT0gTlVMTCk7CiAJQXNzZXJ0KHJvdXRpbmUtPmFtZW5kc2NhbiAhPSBOVUxMKTsKIAorCS8qIEFz c2VydCB0aGF0IEFNIGRvZXNuJ3QgaGF2ZSBhbiBpbnZhbGlkIGNvbWJpbmF0aW9uIG9mIGNhbGxi YWNrcyAqLworCUFzc2VydChyb3V0aW5lLT5hbWtpbGxpdGVtc2JhdGNoID09IE5VTEwgfHwgcm91 dGluZS0+YW1nZXRiYXRjaCAhPSBOVUxMKTsKKwlBc3NlcnQoKHJvdXRpbmUtPmFtZ2V0YmF0Y2gg IT0gTlVMTCkgPT0gKHJvdXRpbmUtPmFtdW5ndWFyZGJhdGNoICE9IE5VTEwpKTsKKwlBc3NlcnQo cm91dGluZS0+YW1nZXRiYXRjaCAhPSBOVUxMIHx8IHJvdXRpbmUtPmFtcG9zcmVzZXQgPT0gTlVM TCk7CisKIAlyZXR1cm4gcm91dGluZTsKIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNj ZXNzL2luZGV4L2dlbmFtLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYwppbmRl eCBhY2M5ZjNlNmEuLjE3ZWE5M2I0ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2lu ZGV4L2dlbmFtLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMKQEAgLTg5 LDYgKzg5LDggQEAgUmVsYXRpb25HZXRJbmRleFNjYW4oUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwg aW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzKQogCXNjYW4tPnhzX3NuYXBzaG90ID0gSW52YWxpZFNu YXBzaG90OwkvKiBjYWxsZXIgbXVzdCBpbml0aWFsaXplIHRoaXMgKi8KIAlzY2FuLT5udW1iZXJP ZktleXMgPSBua2V5czsKIAlzY2FuLT5udW1iZXJPZk9yZGVyQnlzID0gbm9yZGVyYnlzOworCXNj YW4tPnVzZWJhdGNocmluZyA9IGZhbHNlOyAvKiBzZXQgbGF0ZXIgZm9yIGFtZ2V0YmF0Y2ggY2Fs bGVycyAqLworCW1lbXNldCgmc2Nhbi0+YmF0Y2hjYWNoZSwgMCwgc2l6ZW9mKHNjYW4tPmJhdGNo Y2FjaGUpKTsKIAogCS8qCiAJICogV2UgYWxsb2NhdGUga2V5IHdvcmtzcGFjZSBoZXJlLCBidXQg aXQgd29uJ3QgZ2V0IGZpbGxlZCB1bnRpbCBhbXJlc2Nhbi4KQEAgLTEyNiw2ICsxMjgsOSBAQCBS ZWxhdGlvbkdldEluZGV4U2NhbihSZWxhdGlvbiBpbmRleFJlbGF0aW9uLCBpbnQgbmtleXMsIGlu dCBub3JkZXJieXMpCiAJc2Nhbi0+eHNfaGl0dXAgPSBOVUxMOwogCXNjYW4tPnhzX2hpdHVwZGVz YyA9IE5VTEw7CiAKKwlzY2FuLT5iYXRjaF9pbmRleF9vcGFxdWVfc2l6ZSA9IDA7CisJc2Nhbi0+ YmF0Y2hfdHVwbGVzX3dvcmtzcGFjZSA9IDA7CisJc2Nhbi0+YmF0Y2hfdGFibGVfb2Zmc2V0ID0g MDsKIAlzY2FuLT54c192aXNpdGVkX3BhZ2VzX2xpbWl0ID0gMDsKIAogCXJldHVybiBzY2FuOwpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMKaW5kZXggZjA4YmM5NmJkLi5kYzRjMDhhNzIgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMKKysrIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYwpAQCAtMTMsNyArMTMsNyBAQAogICogSU5URVJG QUNFIFJPVVRJTkVTCiAgKgkJaW5kZXhfb3BlbgkJLSBvcGVuIGFuIGluZGV4IHJlbGF0aW9uIGJ5 IHJlbGF0aW9uIE9JRAogICoJCWluZGV4X2Nsb3NlCQktIGNsb3NlIGFuIGluZGV4IHJlbGF0aW9u Ci0gKgkJaW5kZXhfYmVnaW5zY2FuIC0gc3RhcnQgYSBzY2FuIG9mIGFuIGluZGV4IHdpdGggYW1n ZXR0dXBsZQorICoJCWluZGV4X2JlZ2luc2NhbiAtIHN0YXJ0IGEgc2NhbiBvZiBhbiBpbmRleCB3 aXRoIGFtZ2V0YmF0Y2gvYW1nZXR0dXBsZQogICoJCWluZGV4X2JlZ2luc2Nhbl9iaXRtYXAgLSBz dGFydCBhIHNjYW4gb2YgYW4gaW5kZXggd2l0aCBhbWdldGJpdG1hcAogICoJCWluZGV4X3Jlc2Nh bgktIHJlc3RhcnQgYSBzY2FuIG9mIGFuIGluZGV4CiAgKgkJaW5kZXhfZW5kc2NhbgktIGVuZCBh IHNjYW4KQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgogCiAjaW5jbHVk ZSAiYWNjZXNzL2FtYXBpLmgiCisjaW5jbHVkZSAiYWNjZXNzL2luZGV4YmF0Y2guaCIKICNpbmNs dWRlICJhY2Nlc3MvcmVsYXRpb24uaCIKICNpbmNsdWRlICJhY2Nlc3MvcmVsb3B0aW9ucy5oIgog I2luY2x1ZGUgImFjY2Vzcy9yZWxzY2FuLmgiCkBAIC0yNTQsNyArMjU1LDcgQEAgaW5kZXhfaW5z ZXJ0X2NsZWFudXAoUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwKIH0KIAogLyoKLSAqIGluZGV4X2Jl Z2luc2NhbiAtIHN0YXJ0IGEgc2NhbiBvZiBhbiBpbmRleCB3aXRoIGFtZ2V0dHVwbGUKKyAqIGlu ZGV4X2JlZ2luc2NhbiAtIHN0YXJ0IGEgc2NhbiBvZiBhbiBpbmRleCB3aXRoIGFtZ2V0YmF0Y2gv YW1nZXR0dXBsZQogICoKICAqIENhbGxlciBtdXN0IGJlIGhvbGRpbmcgc3VpdGFibGUgbG9ja3Mg b24gdGhlIGhlYXAgYW5kIHRoZSBpbmRleC4KICAqLwpAQCAtMzA3LDcgKzMwOCw3IEBAIGluZGV4 X2JlZ2luc2Nhbl9iaXRtYXAoUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwKICAqIGluZGV4X2JlZ2lu c2Nhbl9pbnRlcm5hbCAtLS0gY29tbW9uIGNvZGUgZm9yIGluZGV4X2JlZ2luc2NhbiB2YXJpYW50 cwogICoKICAqIFdoZW4gaGVhcFJlbGF0aW9uIGlzIG5vdCBOVUxMLCBhbHNvIGluaXRpYWxpemVz IGhlYXAtc2lkZSBzY2FuIHN0YXRlOgotICogZ2V0bmV4dF9zbG90IHJlc29sdXRpb24gYW5kIHRh YmxlIGZldGNoIGluaXRpYWxpemF0aW9uLgorICogYmF0Y2ggcmluZyBzZXR1cCwgZ2V0bmV4dF9z bG90IHJlc29sdXRpb24sIGFuZCB0YWJsZSBmZXRjaCBpbml0aWFsaXphdGlvbi4KICAqLwogc3Rh dGljIHBnX2F0dHJpYnV0ZV9hbHdheXNfaW5saW5lIEluZGV4U2NhbkRlc2MKIGluZGV4X2JlZ2lu c2Nhbl9pbnRlcm5hbChSZWxhdGlvbiBpbmRleFJlbGF0aW9uLApAQCAtMzQwLDYgKzM0MSw3IEBA IGluZGV4X2JlZ2luc2Nhbl9pbnRlcm5hbChSZWxhdGlvbiBpbmRleFJlbGF0aW9uLAogCXNjYW4t PnhzX3RlbXBfc25hcCA9IHRlbXBfc25hcDsKIAogCXNjYW4tPnhzX3NuYXBzaG90ID0gc25hcHNo b3Q7CisJc2Nhbi0+TVZDQ1NjYW4gPSBJc01WQ0NMaWtlU25hcHNob3Qoc25hcHNob3QpOwogCXNj YW4tPmluc3RydW1lbnQgPSBpbnN0cnVtZW50OwogCiAJLyoKQEAgLTM1MSwxMyArMzUzLDE5IEBA IGluZGV4X2JlZ2luc2Nhbl9pbnRlcm5hbChSZWxhdGlvbiBpbmRleFJlbGF0aW9uLAogCQlzY2Fu LT5oZWFwUmVsYXRpb24gPSBoZWFwUmVsYXRpb247CiAJCXNjYW4tPnhzX3dhbnRfaXR1cCA9IGlu ZGV4X29ubHlfc2NhbjsKIAkJc2Nhbi0+eHNfaGVhcF9jb250aW51ZSA9IGZhbHNlOworCQlzY2Fu LT5iYXRjaEltbWVkaWF0ZVVuZ3VhcmQgPSAoc2Nhbi0+TVZDQ1NjYW4gJiYgIWluZGV4X29ubHlf c2Nhbik7CisKKwkJaWYgKGluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbWdldGJhdGNoICE9IE5V TEwpCisJCQliYXRjaHNjYW5faW5pdChzY2FuKTsKIAogCQkvKiBSZXNvbHZlIHdoaWNoIGdldG5l eHRfc2xvdCBpbXBsZW1lbnRhdGlvbiB0byB1c2UgZm9yIHRoaXMgc2NhbiAqLwogCQlpZiAoaW5k ZXhfb25seV9zY2FuKQotCQkJc2Nhbi0+eHNfZ2V0bmV4dF9zbG90ID0KKwkJCXNjYW4tPnhzX2dl dG5leHRfc2xvdCA9IHNjYW4tPnVzZWJhdGNocmluZyA/CisJCQkJaGVhcFJlbGF0aW9uLT5yZF90 YWJsZWFtLT5pbmRleF9vbmx5X2FtZ2V0YmF0Y2hfbmV4dCA6CiAJCQkJaGVhcFJlbGF0aW9uLT5y ZF90YWJsZWFtLT5pbmRleF9vbmx5X2FtZ2V0dHVwbGVfbmV4dDsKIAkJZWxzZQotCQkJc2Nhbi0+ eHNfZ2V0bmV4dF9zbG90ID0KKwkJCXNjYW4tPnhzX2dldG5leHRfc2xvdCA9IHNjYW4tPnVzZWJh dGNocmluZyA/CisJCQkJaGVhcFJlbGF0aW9uLT5yZF90YWJsZWFtLT5pbmRleF9wbGFpbl9hbWdl dGJhdGNoX25leHQgOgogCQkJCWhlYXBSZWxhdGlvbi0+cmRfdGFibGVhbS0+aW5kZXhfcGxhaW5f YW1nZXR0dXBsZV9uZXh0OwogCiAJCS8qIHByZXBhcmUgdG8gZmV0Y2ggaW5kZXggbWF0Y2hlcyBm cm9tIHRhYmxlICovCkBAIC00MTEsNiArNDE5LDE3IEBAIGluZGV4X2VuZHNjYW4oSW5kZXhTY2Fu RGVzYyBzY2FuKQogCVNDQU5fQ0hFQ0tTOwogCUNIRUNLX1NDQU5fUFJPQ0VEVVJFKGFtZW5kc2Nh bik7CiAKKwkvKgorCSAqIGFtZ2V0Yml0bWFwIHNjYW5zIG9mIGFuIGluZGV4IEFNIHRoYXQgc3Vw cG9ydHMgYW1nZXRiYXRjaCBtYWtlIGxpbWl0ZWQKKwkgKiB1c2Ugb2YgdGhlIHNjYW4ncyBiYXRj aCBjYWNoZS4gIENoZWNrIGZvciB0aGF0LgorCSAqLworCWlmICghc2Nhbi0+dXNlYmF0Y2hyaW5n ICYmIHNjYW4tPmJhdGNoY2FjaGVbMF0gIT0gTlVMTCkKKwl7CisJCUFzc2VydChzY2FuLT5oZWFw UmVsYXRpb24gPT0gTlVMTCk7CisJCUFzc2VydChzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRh bS0+YW1nZXRiYXRjaCAhPSBOVUxMKTsKKwkJcGZyZWUoYmF0Y2hfYWxsb2NfYmFzZShzY2FuLCBz Y2FuLT5iYXRjaGNhY2hlWzBdKSk7CisJfQorCiAJLyogUmVsZWFzZSByZXNvdXJjZXMgKGxpa2Ug YnVmZmVyIHBpbnMpIGZyb20gdGFibGUgYWNjZXNzZXMgKi8KIAlpZiAoc2Nhbi0+eHNfaGVhcGZl dGNoKQogCXsKQEAgLTQzOSwyNCArNDU4LDI0IEBAIHZvaWQKIGluZGV4X21hcmtwb3MoSW5kZXhT Y2FuRGVzYyBzY2FuKQogewogCVNDQU5fQ0hFQ0tTOwotCUNIRUNLX1NDQU5fUFJPQ0VEVVJFKGFt bWFya3Bvcyk7CisJQ0hFQ0tfU0NBTl9QUk9DRURVUkUoYW1nZXRiYXRjaCk7CiAKLQlzY2FuLT5p bmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1tYXJrcG9zKHNjYW4pOworCWJhdGNoc2Nhbl9tYXJr X3BvcyhzY2FuKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLQogICoJCWluZGV4X3Jlc3RycG9z CS0gcmVzdG9yZSBhIHNjYW4gcG9zaXRpb24KICAqCi0gKiBOT1RFOiB0aGlzIG9ubHkgcmVzdG9y ZXMgdGhlIGludGVybmFsIHNjYW4gc3RhdGUgb2YgdGhlIGluZGV4IEFNLiAgU2VlCisgKiBOT1RF OiB0aGlzIG9ubHkgcmVzdG9yZXMgdGhlIGJhdGNoIHBvc2l0aW9uYWwgc3RhdGUgb2YgdGhlIHRh YmxlIEFNLiAgU2VlCiAgKiBjb21tZW50cyBmb3IgRXhlY1Jlc3RyUG9zKCkuCiAgKgogICogTk9U RTogRm9yIGhlYXAsIGluIHRoZSBwcmVzZW5jZSBvZiBIT1QgY2hhaW5zLCBtYXJrL3Jlc3RvcmUg b25seSB3b3JrcwogICogY29ycmVjdGx5IGlmIHRoZSBzY2FuJ3Mgc25hcHNob3QgaXMgTVZDQy1z YWZlOyB0aGF0IGVuc3VyZXMgdGhhdCB0aGVyZSdzIGF0CiAgKiBtb3N0IG9uZSByZXR1cm5hYmxl IHR1cGxlIGluIGVhY2ggSE9UIGNoYWluLCBhbmQgc28gcmVzdG9yaW5nIHRoZSBwcmlvcgotICog c3RhdGUgYXQgdGhlIGdyYW51bGFyaXR5IG9mIHRoZSBpbmRleCBBTSBpcyBzdWZmaWNpZW50LiAg U2luY2UgdGhlIG9ubHkKLSAqIGN1cnJlbnQgdXNlciBvZiBtYXJrL3Jlc3RvcmUgZnVuY3Rpb25h bGl0eSBpcyBub2RlTWVyZ2Vqb2luLmMsIHRoaXMKLSAqIGVmZmVjdGl2ZWx5IG1lYW5zIHRoYXQg bWVyZ2Utam9pbiBwbGFucyBvbmx5IHdvcmsgZm9yIE1WQ0Mgc25hcHNob3RzLiAgVGhpcwotICog Y291bGQgYmUgZml4ZWQgaWYgbmVjZXNzYXJ5LCBidXQgZm9yIG5vdyBpdCBzZWVtcyB1bmltcG9y dGFudC4KKyAqIHN0YXRlIGF0IHRoZSBzY2FuIGl0ZW0gZ3JhbnVsYXJpdHkgaXMgc3VmZmljaWVu dC4gIFNpbmNlIHRoZSBvbmx5IGN1cnJlbnQKKyAqIHVzZXIgb2YgbWFyay9yZXN0b3JlIGZ1bmN0 aW9uYWxpdHkgaXMgbm9kZU1lcmdlam9pbi5jLCB0aGlzIGVmZmVjdGl2ZWx5CisgKiBtZWFucyB0 aGF0IG1lcmdlLWpvaW4gcGxhbnMgb25seSB3b3JrIGZvciBNVkNDIHNuYXBzaG90cy4gIFRoaXMg Y291bGQgYmUKKyAqIGZpeGVkIGlmIG5lY2Vzc2FyeSwgYnV0IGZvciBub3cgaXQgc2VlbXMgdW5p bXBvcnRhbnQuCiAgKiAtLS0tLS0tLS0tLS0tLS0tCiAgKi8KIHZvaWQKQEAgLTQ2NSwxNiArNDg0 LDEyIEBAIGluZGV4X3Jlc3RycG9zKEluZGV4U2NhbkRlc2Mgc2NhbikKIAlBc3NlcnQoSXNNVkND TGlrZVNuYXBzaG90KHNjYW4tPnhzX3NuYXBzaG90KSk7CiAKIAlTQ0FOX0NIRUNLUzsKLQlDSEVD S19TQ0FOX1BST0NFRFVSRShhbXJlc3RycG9zKTsKKwlDSEVDS19TQ0FOX1BST0NFRFVSRShhbWdl dGJhdGNoKTsKIAotCS8qIHJlc2V0IHRhYmxlIEFNIHN0YXRlIGZvciByZXN0b3JpbmcgdGhlIG1h cmtlZCBwb3NpdGlvbiAqLwotCWlmIChzY2FuLT54c19oZWFwZmV0Y2gpCi0JCXRhYmxlX2luZGV4 X2ZldGNoX3Jlc2V0KHNjYW4pOwotCi0Jc2Nhbi0+a2lsbF9wcmlvcl90dXBsZSA9IGZhbHNlOyAv KiBmb3Igc2FmZXR5ICovCiAJc2Nhbi0+eHNfaGVhcF9jb250aW51ZSA9IGZhbHNlOwogCi0Jc2Nh bi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtcmVzdHJwb3Moc2Nhbik7CisJLyogdGFibGUg QU0gcmVzdG9yZXMgdGhlIG1hcmtlZCBwb3NpdGlvbiBmb3IgdXMgKi8KKwl0YWJsZV9pbmRleF9m ZXRjaF9yZXN0cnBvcyhzY2FuKTsKIH0KIAogLyoKQEAgLTY0OCw2ICs2NjMsNyBAQCBpbmRleF9n ZXRuZXh0X3RpZChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uKQog CiAJU0NBTl9DSEVDS1M7CiAJQ0hFQ0tfU0NBTl9QUk9DRURVUkUoYW1nZXR0dXBsZSk7CisJQXNz ZXJ0KCFzY2FuLT51c2ViYXRjaHJpbmcpOwogCiAJLyogWFhYOiB3ZSBzaG91bGQgYXNzZXJ0IHRo YXQgYSBzbmFwc2hvdCBpcyBwdXNoZWQgb3IgcmVnaXN0ZXJlZCAqLwogCUFzc2VydChUcmFuc2Fj dGlvbklkSXNWYWxpZChSZWNlbnRYbWluKSk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nl c3MvaW5kZXgvaW5kZXhiYXRjaC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YmF0 Y2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAuLjQ2ODc2MzQ0YgotLS0g L2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGJhdGNoLmMKQEAg LTAsMCArMSw3NzEgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGluZGV4YmF0Y2guYwor ICoJICBCYXRjaC1iYXNlZCBpbmRleCBzY2FuIGluZnJhc3RydWN0dXJlIGZvciB0aGUgYW1nZXRi YXRjaCBpbnRlcmZhY2UuCisgKgorICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgdGhlIGNvcmUgaW5m cmFzdHJ1Y3R1cmUgZm9yIGJhdGNoLWJhc2VkIGluZGV4IHNjYW5zLAorICogd2hpY2ggYWxsb3cg aW5kZXggQU1zIHRvIHJldHVybiBtdWx0aXBsZSBtYXRjaGluZyBUSURzIHBlciBwYWdlIGluIGEg c2luZ2xlCisgKiBjYWxsLiAgVGhlIGJhdGNoIHJpbmcgYnVmZmVyIGlzIG93bmVkIGJ5IHRoZSB0 YWJsZSBBTSwgdHlwaWNhbGx5IG1haW50YWluZWQKKyAqIGFsb25nc2lkZSBhIHJlYWQgc3RyZWFt IHVzZWQgZm9yIHByZWZldGNoaW5nIHRhYmxlIGJsb2Nrcy4KKyAqCisgKiBUaGUgcmluZyBidWZm ZXIgbG9hZHMgYmF0Y2hlcyBpbiBpbmRleCBrZXkgc3BhY2UvaW5kZXggc2NhbiBvcmRlci4gIFRo aXMKKyAqIGFsbG93cyB0aGUgdGFibGUgQU0gdG8gbWFpbnRhaW4gYW4gYWRlcXVhdGUgcHJlZmV0 Y2ggZGlzdGFuY2U6IGl0cyByZWFkCisgKiBzdHJlYW0gY2FsbGJhY2sgaXMgdGhlcmVieSBhYmxl IHRvIHJlcXVlc3QgdGFibGUgYmxvY2tzIHJlZmVyZW5jZWQgYnkgaW5kZXgKKyAqIHBhZ2VzIHRo YXQgYXJlIHdlbGwgYWhlYWQgb2YgdGhlIGN1cnJlbnQgc2NhbiBwb3NpdGlvbidzIGluZGV4IHBh Z2UuCisgKgorICogVGhlcmUncyB0aHJlZSB0eXBlcyBvZiBmdW5jdGlvbnMgaW4gdGhpcyBtb2R1 bGU6CisgKgorICogMS4gQ29yZSBiYXRjaCBzY2FuIGxpZmVjeWNsZSAoaW5kZXhfYmF0Y2hzY2Fu XyopOiBGdW5jdGlvbnMgY2FsbGVkIGJ5CisgKiAgICBpbmRleGFtLmMgdG8gbWFuYWdlIGJhdGNo IHNjYW4gc3RhdGUuICBDdXJyZW50bHkganVzdCBpbml0aWFsaXphdGlvbgorICogICAgYW5kIHRo ZSBtYXJrIG9wZXJhdGlvbiBuZWVkZWQgZm9yIG1lcmdlIGpvaW5zLiAgKFJlc3RvcmluZyBhIG1h cmsgaXMgYQorICogICAgbW9yZSBjb21wbGljYXRlZCBwcm9jZXNzIHdoaWNoIHJlcXVpcmVzIG1v ZGlmeWluZyB0YWJsZSBBTSBvcGFxdWUgc3RhdGUsCisgKiAgICBzbyB0aGUgY29ycmVzcG9uZGlu ZyByZXN0b3JlIGZ1bmN0aW9uIGlzIGluIGNhdGVnb3J5IDIuKQorICoKKyAqIDIuIFRhYmxlIEFN IHV0aWxpdGllcyAodGFibGVhbV91dGlsXyopOiBIZWxwZXIgZnVuY3Rpb25zIGNhbGxlZCBieSB0 YWJsZQorICogICAgQU1zIGR1cmluZyBhbWdldGJhdGNoIGluZGV4IHNjYW5zLiAgVGhlc2UgbWFu YWdlIHRoZSBzY2FuJ3MgcG9zaXRpb25hbAorICogICAgc3RhdGUsIGFuZCBoZWxwIHdpdGggY2Vy dGFpbiBhc3BlY3RzIG9mIHJlc291cmNlIG1hbmFnZW1lbnQuCisgKgorICogMy4gSW5kZXggQU0g dXRpbGl0aWVzIChpbmRleGFtX3V0aWxfKik6IEhlbHBlciBmdW5jdGlvbnMgY2FsbGVkIGJ5IGlu ZGV4CisgKiAgICBBTXMgdGhhdCBpbXBsZW1lbnQgdGhlIGFtZ2V0YmF0Y2ggaW50ZXJmYWNlLiAg SGVscHMgaW5kZXggQU0gbWFuYWdlCisgKiAgICByZXNvdXJjZXMgbGlrZSBtZW1vcnksIGxvY2tz LCBhbmQgYnVmZmVyIHBpbnMuCisgKgorICogVGhlIHRhYmxlIEFNIGNhbGxzIHRoZSB0YWJsZSBB TSB1dGlsaXR5IGZ1bmN0aW9ucyBkaXJlY3RseSwgYW5kIHVzZXMKKyAqIHNjYW5Qb3Mvc2NhbkJh dGNoIGFuZCBwcmVmZXRjaFBvcy9wcmVmZXRjaEJhdGNoIGluIGEgc3RhbmRhcmRpemVkIHdheSAo c2VlCisgKiBoZWFwYW1faW5kZXhzY2FuLmMgZm9yIHRoZSByZWZlcmVuY2UgaW1wbGVtZW50YXRp b24pLCB3aGlsZSBpbmRleCBBTXMgZnJlZQorICogYW5kIHVubG9jayBiYXRjaGVzIGFzIGRlc2Ny aWJlZCBpbiBpbmRleGFtLnNnbWwuCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2 LTIwMjYsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBD b3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5p YQorICoKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICBzcmMvYmFja2VuZC9hY2Nlc3MvaW5k ZXgvaW5kZXhiYXRjaC5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2luY2x1ZGUg InBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJhY2Nlc3MvYW1hcGkuaCIKKyNpbmNsdWRlICJhY2Nl c3MvaW5kZXhiYXRjaC5oIgorI2luY2x1ZGUgImFjY2Vzcy90YWJsZWFtLmgiCisjaW5jbHVkZSAi Y29tbW9uL2ludC5oIgorI2luY2x1ZGUgImxpYi9xdW5pcXVlLmgiCisKK3N0YXRpYyB2b2lkIGJh dGNoX2ZyZWUoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCwKKwkJCQkJ ICAgYm9vbCBhbGxvd19jYWNoZSk7CitzdGF0aWMgaW5saW5lIGJvb2wgYmF0Y2hfY2FjaGVfc3Rv cmUoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCk7CitzdGF0aWMgaW50 CWJhdGNoX2NvbXBhcmVfaW50KGNvbnN0IHZvaWQgKnZhLCBjb25zdCB2b2lkICp2Yik7CisKKy8q CisgKiBTZXRzIHVwIHRoZSBiYXRjaCByaW5nIGJ1ZmZlciBzdHJ1Y3R1cmUgZm9yIHVzZSBieSBh biBpbmRleCBzY2FuLgorICoKKyAqIE9ubHkgY2FsbCBoZXJlIHdoZW4gYWxsIG9mIHRoZSBpbmRl eCByZWxhdGVkIGZpZWxkcyBpbiAnc2Nhbicgd2VyZSBhbHJlYWR5CisgKiBpbml0aWFsaXplZC4K KyAqLwordm9pZAorYmF0Y2hzY2FuX2luaXQoSW5kZXhTY2FuRGVzYyBzY2FuKQoreworCUFzc2Vy dChzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1nZXRiYXRjaCAhPSBOVUxMKTsKKwor CXNjYW4tPmJhdGNocmluZ2J1Zi5zY2FuUG9zLnZhbGlkID0gZmFsc2U7CisJc2Nhbi0+YmF0Y2hy aW5nYnVmLm1hcmtQb3MudmFsaWQgPSBmYWxzZTsKKworCXNjYW4tPmJhdGNocmluZ2J1Zi5tYXJr QmF0Y2ggPSBOVUxMOworCXNjYW4tPmJhdGNocmluZ2J1Zi5oZWFkQmF0Y2ggPSAwOworCXNjYW4t PmJhdGNocmluZ2J1Zi5uZXh0QmF0Y2ggPSAwOworCisJc2Nhbi0+dXNlYmF0Y2hyaW5nID0gdHJ1 ZTsKK30KKworLyoKKyAqIFNldCBhIG1hcmsgZnJvbSBzY2FuUG9zIHBvc2l0aW9uCisgKgorICog U2F2ZXMgdGhlIGN1cnJlbnQgc2NhbiBwb3NpdGlvbiBhbmQgYXNzb2NpYXRlZCBiYXRjaCBzbyB0 aGF0IHRoZSBzY2FuIGNhbgorICogYmUgcmVzdG9yZWQgdG8gdGhpcyBwb2ludCBsYXRlciwgdmlh IHRhYmxlYW1fdXRpbF9iYXRjaF9yZXN0b3JlX3BvcyBmcm9tCisgKiB0aGUgdGFibGUgQU0uICBU aGUgbWFya2VkIGJhdGNoIGlzIHJldGFpbmVkIGFuZCBub3QgZnJlZWQgdW50aWwgYSBuZXcgbWFy aworICogaXMgc2V0IG9yIHRoZSBzY2FuIGVuZHMgKG9yIHVudGlsIHRoZSBtYXJrIGlzIHJlc3Rv cmVkKS4KKyAqLwordm9pZAorYmF0Y2hzY2FuX21hcmtfcG9zKEluZGV4U2NhbkRlc2Mgc2NhbikK K3sKKwlCYXRjaFJpbmdCdWZmZXIgKmJhdGNocmluZ2J1ZiA9ICZzY2FuLT5iYXRjaHJpbmdidWY7 CisJQmF0Y2hSaW5nSXRlbVBvcyAqc2NhblBvcyA9ICZzY2FuLT5iYXRjaHJpbmdidWYuc2NhblBv czsKKwlCYXRjaFJpbmdJdGVtUG9zICptYXJrUG9zID0gJmJhdGNocmluZ2J1Zi0+bWFya1BvczsK KwlJbmRleFNjYW5CYXRjaCBzY2FuQmF0Y2ggPSBpbmRleF9zY2FuX2JhdGNoKHNjYW4sIHNjYW5Q b3MtPmJhdGNoKTsKKwlJbmRleFNjYW5CYXRjaCBtYXJrQmF0Y2ggPSBiYXRjaHJpbmdidWYtPm1h cmtCYXRjaDsKKwlib29sCQlmcmVlTWFya0JhdGNoOworCisJQXNzZXJ0KHNjYW4tPk1WQ0NTY2Fu KTsKKworCS8qCisJICogRnJlZSB0aGUgcHJldmlvdXMgbWFyayBiYXRjaCAoaWYgYW55KSAtLSBi dXQgb25seSBpZiBpdCBpc24ndCBvdXIKKwkgKiBzY2FuQmF0Y2ggKGRlZmVuc2l2ZWx5IG1ha2Ug c3VyZSB0aGF0IG1hcmtCYXRjaCBpc24ndCBzb21lIGxhdGVyCisJICogc3RpbGwtbmVlZGVkIGJh dGNoLCB0b28pCisJICovCisJaWYgKCFtYXJrQmF0Y2ggfHwgbWFya0JhdGNoID09IHNjYW5CYXRj aCkKKwl7CisJCS8qIERlZmluaXRlbHkgbm8gbWFya0JhdGNoIHRoYXQgd2Ugc2hvdWxkIGZyZWUg bm93ICovCisJCWZyZWVNYXJrQmF0Y2ggPSBmYWxzZTsKKwl9CisJZWxzZSBpZiAobGlrZWx5KCFp bmRleF9zY2FuX2JhdGNoX2xvYWRlZChzY2FuLCBtYXJrUG9zLT5iYXRjaCkpKQorCXsKKwkJLyog RGVmaW5pdGVseSBoYXZlIGEgbm8tbG9uZ2VyLWxvYWRlZCBtYXJrQmF0Y2ggdG8gZnJlZSAqLwor CQlmcmVlTWFya0JhdGNoID0gdHJ1ZTsKKwl9CisJZWxzZQorCXsKKwkJLyoKKwkJICogaW5kZXhf c2Nhbl9iYXRjaF9sb2FkZWQgaW5kaWNhdGVzIHRoYXQgbWFya1Bvcy0+YmF0Y2ggaXMgbG9hZGVk LAorCQkgKiBidXQgYWZ0ZXIgdWludDggb3ZlcmZsb3cgYSBzdGFsZSBiYXRjaCBvZmZzZXQgY2Fu IGFsaWFzIGEKKwkJICogY3VycmVudGx5LWxvYWRlZCByYW5nZSAoZmFsc2UgcG9zaXRpdmUpLiAg Q29uZmlybSBieSBjaGVja2luZworCQkgKiB3aGV0aGVyIHRoZSBiYXRjaCBwb2ludGVyIGluIG1h cmtQb3MtPmJhdGNoJ3Mgc2xvdCBzdGlsbCBtYXRjaGVzLgorCQkgKi8KKwkJZnJlZU1hcmtCYXRj aCA9IChpbmRleF9zY2FuX2JhdGNoKHNjYW4sIG1hcmtQb3MtPmJhdGNoKSAhPSBtYXJrQmF0Y2gp OworCX0KKworCWlmIChmcmVlTWFya0JhdGNoKQorCXsKKwkJLyogRnJlZSBtYXJrQmF0Y2gsIHNp bmNlIGl0IGlzbid0IGxvYWRlZC9uZWVkZWQgZm9yIGJhdGNocmluZ2J1ZiAqLworCQliYXRjaHJp bmdidWYtPm1hcmtCYXRjaCA9IE5VTEw7IC8qIGVsc2UgY2FsbCB3b24ndCBmcmVlIG1hcmtCYXRj aCAqLworCQl0YWJsZWFtX3V0aWxfZnJlZV9iYXRjaChzY2FuLCBtYXJrQmF0Y2gpOworCX0KKwor CS8qIGNvcHkgdGhlIHNjYW4ncyBwb3NpdGlvbiAqLworCWJhdGNocmluZ2J1Zi0+bWFya1BvcyA9 ICpzY2FuUG9zOworCWJhdGNocmluZ2J1Zi0+bWFya0JhdGNoID0gc2NhbkJhdGNoOworfQorCisv KiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgKgkJCXV0aWxpdHkgZnVuY3Rpb25zIGNhbGxlZCBieSB0YWJsZSBBTXMKKyAq IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAqLworCisvKgorICogUmVzdG9yZSBtYXJrIHRvIHNjYW5Qb3MgcG9zaXRpb24K KyAqCisgKiBSZXN0b3JlcyB0aGUgc2NhbiB0byBhIHBvc2l0aW9uIHNhdmVkIGJ5IGJhdGNoc2Nh bl9tYXJrX3BvcyBlYXJsaWVyLiAgVGhlCisgKiBzY2FuJ3MgbWFya1BvcyBiZWNvbWVzIGl0cyBz Y2FuUG9zLiAgVGhlIG1hcmtlZCBiYXRjaCBpcyByZXN0b3JlZCBhcyB0aGUKKyAqIGN1cnJlbnQg c2NhbkJhdGNoIHdoZW4gbmVlZGVkLgorICoKKyAqIFdlIGp1c3QgZGlzY2FyZCBhbGwgYmF0Y2hl cyAob3RoZXIgdGhhbiBtYXJrQmF0Y2gvcmVzdG9yZWQgc2NhbkJhdGNoKSwKKyAqIGV4Y2VwdCB3 aGVuIG1hcmtCYXRjaCBpcyBhbHJlYWR5IHRoZSBzY2FuJ3MgY3VycmVudCBzY2FuQmF0Y2guCisg Ki8KK3ZvaWQKK3RhYmxlYW1fdXRpbF9iYXRjaHNjYW5fcmVzdG9yZV9wb3MoSW5kZXhTY2FuRGVz YyBzY2FuKQoreworCUJhdGNoUmluZ0J1ZmZlciAqYmF0Y2hyaW5nYnVmID0gJnNjYW4tPmJhdGNo cmluZ2J1ZjsKKwlCYXRjaFJpbmdJdGVtUG9zICpzY2FuUG9zID0gJnNjYW4tPmJhdGNocmluZ2J1 Zi5zY2FuUG9zOworCUJhdGNoUmluZ0l0ZW1Qb3MgKm1hcmtQb3MgPSAmYmF0Y2hyaW5nYnVmLT5t YXJrUG9zOworCUluZGV4U2NhbkJhdGNoIG1hcmtCYXRjaCA9IGJhdGNocmluZ2J1Zi0+bWFya0Jh dGNoOworCUluZGV4U2NhbkJhdGNoIHNjYW5CYXRjaCA9IGluZGV4X3NjYW5fYmF0Y2goc2Nhbiwg c2NhblBvcy0+YmF0Y2gpOworCisJQXNzZXJ0KHNjYW4tPk1WQ0NTY2FuKTsKKwlBc3NlcnQoc2Nh bi0+eHNfaGVhcGZldGNoKTsKKwlBc3NlcnQobWFya1Bvcy0+dmFsaWQpOworCisJaWYgKHNjYW5C YXRjaCA9PSBtYXJrQmF0Y2gpCisJeworCQkvKiBtYXJrQmF0Y2ggaXMgYWxyZWFkeSBzY2FuQmF0 Y2g7IG5lZWRuJ3QgY2hhbmdlIGJhdGNocmluZ2J1ZiAqLworCQlBc3NlcnQoc2NhblBvcy0+YmF0 Y2ggPT0gbWFya1Bvcy0+YmF0Y2gpOworCisJCXNjYW5Qb3MtPml0ZW0gPSBtYXJrUG9zLT5pdGVt OworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBtYXJrQmF0Y2ggaXMgYmVoaW5kIHNjYW5CYXRj aCwgYW5kIHNvIG11c3Qgbm90IGJlIHNhdmVkIGluIHJpbmcgYnVmZmVyCisJICogYW55bW9yZS4g IFdlIGhhdmUgdG8gZGVhbCB3aXRoIHJlc3RvcmluZyB0aGUgbWFyayB0aGUgaGFyZCB3YXk6IGJ5 CisJICogaW52YWxpZGF0aW5nIGFsbCBvdGhlciBsb2FkZWQgYmF0Y2hlcy4gIFRoaXMgaXMgc2lt aWxhciB0byB0aGUgY2FzZQorCSAqIHdoZXJlIHRoZSBzY2FuIGRpcmVjdGlvbiBjaGFuZ2VzIGFu ZCB0aGUgc2NhbiBhY3R1YWxseSBjcm9zc2VzCisJICogYmF0Y2gvaW5kZXggcGFnZSBib3VuZGFy aWVzIChzZWUgdGFibGVhbV91dGlsX3NjYW5iYXRjaF9kaXJjaGFuZ2UpLgorCSAqCisJICogRmly c3QsIGZyZWUgYWxsIGJhdGNoZXMgdGhhdCBhcmUgc3RpbGwgaW4gdGhlIHJpbmcgYnVmZmVyLgor CSAqLworCWZvciAodWludDggaSA9IGJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoOyBpICE9IGJhdGNo cmluZ2J1Zi0+bmV4dEJhdGNoOyBpKyspCisJeworCQlJbmRleFNjYW5CYXRjaCBiYXRjaCA9IGlu ZGV4X3NjYW5fYmF0Y2goc2NhbiwgaSk7CisKKwkJQXNzZXJ0KGJhdGNoICE9IG1hcmtCYXRjaCk7 CisKKwkJdGFibGVhbV91dGlsX2ZyZWVfYmF0Y2goc2NhbiwgYmF0Y2gpOworCX0KKworCS8qCisJ ICogTmV4dCAiYXBwZW5kIiBzdGFuZGFsb25lIG1hcmtCYXRjaCwgd2hpY2ggd2lsbCBiZWNvbWUg c2NhbkJhdGNoCisJICogKHNjYW5CYXRjaCBpcyBhbHdheXMgdGhlIHJpbmcgYnVmZmVyJ3MgaGVh ZEJhdGNoKQorCSAqLworCW1hcmtQb3MtPmJhdGNoID0gMDsKKwliYXRjaHJpbmdidWYtPnNjYW5Q b3MgPSAqbWFya1BvczsKKwliYXRjaHJpbmdidWYtPm5leHRCYXRjaCA9IGJhdGNocmluZ2J1Zi0+ aGVhZEJhdGNoID0gbWFya1Bvcy0+YmF0Y2g7CisJaW5kZXhfc2Nhbl9iYXRjaF9hcHBlbmQoc2Nh biwgbWFya0JhdGNoKTsKKwlBc3NlcnQoaW5kZXhfc2Nhbl9iYXRjaChzY2FuLCBiYXRjaHJpbmdi dWYtPnNjYW5Qb3MuYmF0Y2gpID09IG1hcmtCYXRjaCk7CisKKwkvKgorCSAqIEZpbmFsbHksIGNh bGwgYW1wb3NyZXNldCB0byBsZXQgaW5kZXggQU0ga25vdyB0byBpbnZhbGlkYXRlIGFueSBwcml2 YXRlCisJICogc3RhdGUgdGhhdCBpbmRlcGVuZGVudGx5IHRyYWNrcyB0aGUgc2NhbidzIHByb2dy ZXNzCisJICovCisJaWYgKHNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbXBvc3Jlc2V0 KQorCQlzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1wb3NyZXNldChzY2FuLCBtYXJr QmF0Y2gpOworCisJLyoKKwkgKiBOb3RlOiBtYXJrQmF0Y2guZGVhZEl0ZW1zW10gbWlnaHQgYWxy ZWFkeSBjb250YWluIGRlYWQgaXRlbXMsIGFuZCBtaWdodAorCSAqIHlldCBoYXZlIG1vcmUgZGVh ZCBpdGVtcyBzYXZlZC4gIHRhYmxlYW1fdXRpbF9mcmVlX2JhdGNoIGlzIHByZXBhcmVkCisJICog Zm9yIHRoYXQuCisJICovCit9CisKKy8qCisgKiBSZXNldCBzdGF0ZSB1c2VkIGZvciBhIGJhdGNo IGluZGV4IHNjYW4KKyAqLwordm9pZAordGFibGVhbV91dGlsX2JhdGNoc2Nhbl9yZXNldChJbmRl eFNjYW5EZXNjIHNjYW4sIGJvb2wgZW5kc2NhbikKK3sKKwlCYXRjaFJpbmdCdWZmZXIgKmJhdGNo cmluZ2J1ZiA9ICZzY2FuLT5iYXRjaHJpbmdidWY7CisJSW5kZXhTY2FuQmF0Y2ggbWFya0JhdGNo ID0gYmF0Y2hyaW5nYnVmLT5tYXJrQmF0Y2g7CisJYm9vbAkJbWFya0JhdGNoRnJlZWQgPSBmYWxz ZTsKKworCWJhdGNocmluZ2J1Zi0+c2NhblBvcy52YWxpZCA9IGZhbHNlOworCWJhdGNocmluZ2J1 Zi0+bWFya1Bvcy52YWxpZCA9IGZhbHNlOworCisJLyogRW5zdXJlIGJhdGNoX2ZyZWUgd29uJ3Qg c2tpcCB0aGUgb2xkIG1hcmtCYXRjaCBpbiB0aGUgbG9vcCBiZWxvdyAqLworCWJhdGNocmluZ2J1 Zi0+bWFya0JhdGNoID0gTlVMTDsKKworCWZvciAodWludDggaSA9IGJhdGNocmluZ2J1Zi0+aGVh ZEJhdGNoOyBpICE9IGJhdGNocmluZ2J1Zi0+bmV4dEJhdGNoOyBpKyspCisJeworCQlJbmRleFNj YW5CYXRjaCBiYXRjaCA9IGluZGV4X3NjYW5fYmF0Y2goc2NhbiwgaSk7CisKKwkJaWYgKGJhdGNo ID09IG1hcmtCYXRjaCkKKwkJCW1hcmtCYXRjaEZyZWVkID0gdHJ1ZTsKKworCQliYXRjaF9mcmVl KHNjYW4sIGJhdGNoLCAhZW5kc2Nhbik7CisJfQorCisJaWYgKCFtYXJrQmF0Y2hGcmVlZCAmJiB1 bmxpa2VseShtYXJrQmF0Y2gpKQorCQliYXRjaF9mcmVlKHNjYW4sIG1hcmtCYXRjaCwgIWVuZHNj YW4pOworCisJYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2ggPSAwOworCWJhdGNocmluZ2J1Zi0+bmV4 dEJhdGNoID0gMDsKK30KKworLyoKKyAqIEZyZWUgcmVzb3VyY2VzIGF0IGVuZCBvZiBiYXRjaCBp bmRleCBzY2FuCisgKgorICogQ2FsbGVkIHdoZW4gYW4gaW5kZXggc2NhbiBpcyBiZWluZyBlbmRl ZCwgcmlnaHQgYmVmb3JlIHRoZSBvd25pbmcgc2NhbgorICogZGVzY3JpcHRvciBnb2VzIGF3YXku ICBDbGVhbnMgdXAgYWxsIGJhdGNoIHJlbGF0ZWQgcmVzb3VyY2VzLgorICovCit2b2lkCit0YWJs ZWFtX3V0aWxfYmF0Y2hzY2FuX2VuZChJbmRleFNjYW5EZXNjIHNjYW4pCit7CisJLyogRnJlZSBh bGwgcmVtYWluaW5nIGxvYWRlZCBiYXRjaGVzIChldmVuIG1hcmtCYXRjaCksIGJ5cGFzc2luZyBj YWNoZSAqLworCXRhYmxlYW1fdXRpbF9iYXRjaHNjYW5fcmVzZXQoc2NhbiwgdHJ1ZSk7CisKKwlm b3IgKGludCBpID0gMDsgaSA8IElOREVYX1NDQU5fQ0FDSEVfQkFUQ0hFUzsgaSsrKQorCXsKKwkJ SW5kZXhTY2FuQmF0Y2ggY2FjaGVkID0gc2Nhbi0+YmF0Y2hjYWNoZVtpXTsKKworCQlpZiAoY2Fj aGVkID09IE5VTEwpCisJCQljb250aW51ZTsKKworCQlpZiAoY2FjaGVkLT5kZWFkSXRlbXMpCisJ CQlwZnJlZShjYWNoZWQtPmRlYWRJdGVtcyk7CisJCXBmcmVlKGJhdGNoX2FsbG9jX2Jhc2Uoc2Nh biwgY2FjaGVkKSk7CisJfQorfQorCisvKgorICogSGFuZGxlIGNyb3NzLWJhdGNoIGNoYW5nZSBp biBzY2FuIGRpcmVjdGlvbgorICoKKyAqIENhbGxlZCBieSB0YWJsZSBBTSB3aGVuIGl0cyBzY2Fu IGNoYW5nZXMgZGlyZWN0aW9uIGluIGEgd2F5IHRoYXQKKyAqIG5lY2Vzc2l0YXRlcyBiYWNraW5n IHRoZSBzY2FuIHVwIHRvIGFuIGluZGV4IHBhZ2Ugb3JpZ2luYWxseSBhc3NvY2lhdGVkCisgKiB3 aXRoIGEgbm93LWZyZWVkIGJhdGNoLgorICoKKyAqIFdoZW4gd2UgcmV0dXJuLCBiYXRjaHJpbmdi dWYgd2lsbCBvbmx5IGNvbnRhaW4gb25lIGJhdGNoICh0aGUgY3VycmVudAorICogaGVhZEJhdGNo L3NjYW5CYXRjaCkgYW5kIHdpbGwgbG9vayBhcyBpZiB0aGUgbmV3IHNjYW4gZGlyZWN0aW9uIGhh ZCBiZWVuCisgKiB1c2VkIGZyb20gdGhlIHN0YXJ0LiAgQ2FsbGVyIGNhbiB0aGVuIHNhZmVseSBw YXNzIHRoaXMgYmF0Y2ggdG8gYW1nZXRiYXRjaAorICogdG8gZGV0ZXJtaW5lIHdoaWNoIGJhdGNo IGNvbWVzIG5leHQgaW4gdGhlIG5ldyBzY2FuIGRpcmVjdGlvbi4gIFRoaXMKKyAqIGFwcHJvYWNo IGlzbid0IHBhcnRpY3VsYXJseSBlZmZpY2llbnQsIGJ1dCBpdCB3b3JrcyB3ZWxsIGVub3VnaCBm b3Igd2hhdAorICogb3VnaHQgdG8gYmUgYSByZWxhdGl2ZWx5IHJhcmUgb2NjdXJyZW5jZS4KKyAq Lwordm9pZAordGFibGVhbV91dGlsX3NjYW5iYXRjaF9kaXJjaGFuZ2UoSW5kZXhTY2FuRGVzYyBz Y2FuKQoreworCUJhdGNoUmluZ0J1ZmZlciAqYmF0Y2hyaW5nYnVmID0gJnNjYW4tPmJhdGNocmlu Z2J1ZjsKKwlJbmRleFNjYW5CYXRjaCBzY2FuQmF0Y2g7CisKKwkvKgorCSAqIFJlbGVhc2UgYmF0 Y2hlcyBzdGFydGluZyBmcm9tIHRoZSBjdXJyZW50ICJ0YWlsIiBiYXRjaCwgd29ya2luZworCSAq IGJhY2t3YXJkcyB1bnRpbCB0aGUgY3VycmVudCBoZWFkIGJhdGNoICh3aGljaCBpcyBhbHNvIHRo ZSBjdXJyZW50CisJICogc2NhbkJhdGNoKSBpcyB0aGUgb25seSBiYXRjaCBoYXNuJ3QgYmVlbiBm cmVlZAorCSAqLworCXdoaWxlIChpbmRleF9zY2FuX2JhdGNoX2NvdW50KHNjYW4pID4gMSkKKwl7 CisJCXVpbnQ4CQl0YWlsaWR4ID0gYmF0Y2hyaW5nYnVmLT5uZXh0QmF0Y2ggLSAxOworCQlJbmRl eFNjYW5CYXRjaCB0YWlsID0gaW5kZXhfc2Nhbl9iYXRjaChzY2FuLCB0YWlsaWR4KTsKKworCQlB c3NlcnQodGFpbGlkeCAhPSBiYXRjaHJpbmdidWYtPnNjYW5Qb3MuYmF0Y2gpOworCisJCXRhYmxl YW1fdXRpbF9mcmVlX2JhdGNoKHNjYW4sIHRhaWwpOworCQliYXRjaHJpbmdidWYtPm5leHRCYXRj aC0tOworCX0KKworCS8qIHNjYW5CYXRjaCBpcyBub3cgdGhlIG9ubHkgYmF0Y2ggc3RpbGwgbG9h ZGVkICovCisJQXNzZXJ0KGJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoID09IGJhdGNocmluZ2J1Zi0+ c2NhblBvcy5iYXRjaCk7CisJc2NhbkJhdGNoID0gaW5kZXhfc2Nhbl9iYXRjaChzY2FuLCBiYXRj aHJpbmdidWYtPmhlYWRCYXRjaCk7CisKKwkvKgorCSAqIEZsaXAgc2NhbkJhdGNoJ3Mgc2NhbiBk aXJlY3Rpb24gdG8gcmVmbGVjdCB0aGUgcmV2ZXJzYWwuICBBbHNvIHJlc2V0CisJICogYW55IGlu ZGV4IEFNIHN0YXRlIHRoYXQgaW5kZXBlbmRlbnRseSB0cmFja3Mgc2NhbiBwcm9ncmVzcy4KKwkg Ki8KKwlzY2FuQmF0Y2gtPmRpciA9IC1zY2FuQmF0Y2gtPmRpcjsKKwlpZiAoc2Nhbi0+aW5kZXhS ZWxhdGlvbi0+cmRfaW5kYW0tPmFtcG9zcmVzZXQpCisJCXNjYW4tPmluZGV4UmVsYXRpb24tPnJk X2luZGFtLT5hbXBvc3Jlc2V0KHNjYW4sIHNjYW5CYXRjaCk7Cit9CisKKy8qCisgKiBSZWNvcmQg dGhhdCBzY2FuUG9zIGl0ZW0gaXMgZGVhZAorICoKKyAqIFJlY29yZHMgYW4gb2Zmc2V0IHRvIHRo ZSBjdXJyZW50IHNjYW5CYXRjaC9zY2FuUG9zIGl0ZW0sIHNhdmluZyBpdCBpbgorICogc2NhbkJh dGNoJ3MgZGVhZEl0ZW1zIGFycmF5LiAgVGhlIGl0ZW1zJyBpbmRleCB0dXBsZXMgd2lsbCBsYXRl ciBiZQorICogbWFya2VkIExQX0RFQUQgd2hlbiBjdXJyZW50IHNjYW5CYXRjaCBpcyBmcmVlZC4K KyAqLwordm9pZAordGFibGVhbV91dGlsX3NjYW5wb3Nfa2lsbGl0ZW0oSW5kZXhTY2FuRGVzYyBz Y2FuKQoreworCUJhdGNoUmluZ0l0ZW1Qb3MgKnNjYW5Qb3MgPSAmc2Nhbi0+YmF0Y2hyaW5nYnVm LnNjYW5Qb3M7CisJSW5kZXhTY2FuQmF0Y2ggc2NhbkJhdGNoID0gaW5kZXhfc2Nhbl9iYXRjaChz Y2FuLCBzY2FuUG9zLT5iYXRjaCk7CisKKwlpZiAoc2NhbkJhdGNoLT5kZWFkSXRlbXMgPT0gTlVM TCkKKwkJc2NhbkJhdGNoLT5kZWFkSXRlbXMgPSBwYWxsb2NfYXJyYXkoaW50LCBzY2FuLT5tYXhp dGVtc2JhdGNoKTsKKwlpZiAoc2NhbkJhdGNoLT5udW1EZWFkIDwgc2Nhbi0+bWF4aXRlbXNiYXRj aCkKKwkJc2NhbkJhdGNoLT5kZWFkSXRlbXNbc2NhbkJhdGNoLT5udW1EZWFkKytdID0gc2NhblBv cy0+aXRlbTsKK30KKworLyoKKyAqIFJlbGVhc2UgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBh IGJhdGNoCisgKgorICogQ2FsbGVkIGJ5IHRhYmxlIEFNJ3Mgb3JkZXJlZCBpbmRleCBzY2FuIGlt cGxlbWVudGF0aW9uIHdoZW4gaXQgaXMgZmluaXNoZWQKKyAqIHdpdGggYSBiYXRjaCBhbmQgd2lz aGVzIHRvIHJlbGVhc2UgaXRzIHJlc291cmNlcy4KKyAqCisgKiBXZSBjYWxsIGFtdW5ndWFyZGJh dGNoIHRvIGRyb3AgdGhlIFRJRCByZWN5Y2xpbmcgaW50ZXJsb2NrIChlLmcuIGJ1ZmZlcgorICog cGluKSB3aGVuIGl0IGhhc24ndCBiZWVuIGRyb3BwZWQgeWV0LiAgRm9yIHBsYWluIE1WQ0Mgc2Nh bnMgKHdoZXJlCisgKiBiYXRjaEltbWVkaWF0ZVVuZ3VhcmQgaXMgc2V0KSwgdGhlIGludGVybG9j ayB3YXMgYWxyZWFkeSBkcm9wcGVkIGVhZ2VybHkKKyAqIGluIGluZGV4YW1fdXRpbF9iYXRjaF91 bmxvY2ssIHNvIHdlIHNraXAgdGhlIGFtdW5ndWFyZGJhdGNoIGNhbGwgaGVyZS4KKyAqIEluZGV4 LW9ubHkgc2NhbnMgbXVzdCBkZWxheSBkcm9wcGluZyB0aGUgaW50ZXJsb2NrIHVudGlsIHZpc2li aWxpdHkgaXMKKyAqIHJlc29sdmVkIGZvciBhbGwgaXRlbXMgaW4gdGhlIGJhdGNoLCBzbyBhbXVu Z3VhcmRiYXRjaCBtYXkgc3RpbGwgbmVlZCB0bworICogYWN0IGhlcmUuICBGb3Igbm9uLU1WQ0Mg c25hcHNob3Qgc2NhbnMsIHRoZSBpbnRlcmxvY2sgaXMgYWx3YXlzIGhlbGQKKyAqIHVudGlsIGFt dW5ndWFyZGJhdGNoIGRyb3BzIGl0IGhlcmUgLS0gdGhpcyBpcyB0aGUgb25seSBwbGFjZSB3aWxs aW5nIHRvCisgKiB1bmd1YXJkIGEgbm9uLU1WQ0Mgc2NhbidzIGJhdGNoLgorICoKKyAqIFdoZW4g dGhlIGJhdGNoIGhhcyBkZWFkIGl0ZW1zIChudW1EZWFkID4gMCkgYW5kIHRoZSBpbmRleCBBTSBw cm92aWRlcyBhbgorICogYW1raWxsaXRlbXNiYXRjaCBjYWxsYmFjaywgd2UgY2FsbCBpdCB0byBz ZXQgTFBfREVBRCBiaXRzIGluIHRoZSBpbmRleAorICogcGFnZS4gIFdlIGFsd2F5cyByZWN5Y2xl IHRoZSBiYXRjaCBtZW1vcnkgdmlhIGluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlLgorICoKKyAq IE5vdGU6IENhbGxpbmcgaGVyZSB3aGVuICdiYXRjaCcgaXMgYWxzbyBiYXRjaHJpbmdidWYubWFy a0JhdGNoIGlzIGEgbm8tb3AuCisgKiBDYWxsZXJzIHRoYXQgZG9uJ3Qgd2FudCB0aGlzIHNob3Vs ZCBzZXQgYmF0Y2hyaW5nYnVmLm1hcmtCYXRjaCB0byBOVUxMCisgKiBiZWZvcmUgY2FsbGluZyB1 cy4gIE5vdGUgdGhhdCBtYXJrQmF0Y2ggaGFzIHRvIGJlIGV4cGxpY2l0bHkgZnJlZWQuCisgKi8K K3ZvaWQKK3RhYmxlYW1fdXRpbF9mcmVlX2JhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhT Y2FuQmF0Y2ggYmF0Y2gpCit7CisJLyogUGFzcyB0aHJvdWdoIHRvIGltcGxlbWVudGF0aW9uIGZ1 bmN0aW9uLCB3aXRoIGFsbG93X2NhY2hlPXRydWUgKi8KKwliYXRjaF9mcmVlKHNjYW4sIGJhdGNo LCB0cnVlKTsKK30KKworLyoKKyAqIEZyZWUgYSBiYXRjaCwgb3B0aW9uYWxseSBjYWNoaW5nIGl0 IGZvciByZXVzZS4KKyAqCisgKiB0YWJsZWFtX3V0aWxfZnJlZV9iYXRjaCBpbXBsZW1lbnRhdGlv biBmdW5jdGlvbi4gIFdlIHNwbGl0IG91dCB0aGUKKyAqIGltcGxlbWVudGF0aW9uIGxpa2UgdGhp cyBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gZ2l2ZSBleHRlcm5hbCB0YWJsZSBBTQorICogY2Fs bGVycyB0aGUgb3B0aW9uIG9mIHBhc3NpbmcgYWxsb3dfY2FjaGU9ZmFsc2UuCisgKgorICogV2hl biBhbGxvd19jYWNoZSBpcyB0cnVlLCB3ZSB0cnkgdG8gc3RvcmUgdGhlIGJhdGNoIGluIHRoZSBz Y2FuJ3MgYmF0Y2gKKyAqIGNhY2hlIGZvciBsYXRlciByZXVzZS4gIFdoZW4gYWxsb3dfY2FjaGUg aXMgZmFsc2UgKHR5cGljYWxseSBiZWNhdXNlIHRoZQorICogc2NhbiBpcyBzaHV0dGluZyBkb3du KSwgd2UgcGZyZWUgdGhlIGNhbGxlcidzIGJhdGNoIHVuY29uZGl0aW9uYWxseS4KKyAqLworc3Rh dGljIHZvaWQKK2JhdGNoX2ZyZWUoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBi YXRjaCwgYm9vbCBhbGxvd19jYWNoZSkKK3sKKwlBc3NlcnQoIShzY2FuLT5iYXRjaEltbWVkaWF0 ZVVuZ3VhcmQgJiYgYmF0Y2gtPmlzR3VhcmRlZCkpOworCUFzc2VydChiYXRjaC0+aXNHdWFyZGVk IHx8IHNjYW4tPk1WQ0NTY2FuKTsKKworCS8qIGRvbid0IGZyZWUgY2FsbGVyJ3MgYmF0Y2ggaWYg aXQgaXMgc2NhbidzIGN1cnJlbnQgbWFya0JhdGNoICovCisJaWYgKGJhdGNoID09IHNjYW4tPmJh dGNocmluZ2J1Zi5tYXJrQmF0Y2gpCisJCXJldHVybjsKKworCS8qIERyb3AgVElEIHJlY3ljbGlu ZyBpbnRlcmxvY2sgdmlhIGFtdW5ndWFyZGJhdGNoIGFzIG5lZWRlZCAqLworCWlmICghc2Nhbi0+ YmF0Y2hJbW1lZGlhdGVVbmd1YXJkICYmIGJhdGNoLT5pc0d1YXJkZWQpCisJCXRhYmxlYW1fdXRp bF91bmd1YXJkX2JhdGNoKHNjYW4sIGJhdGNoKTsKKworCS8qCisJICogTGV0IHRoZSBpbmRleCBB TSBzZXQgTFBfREVBRCBiaXRzIGluIHRoZSBpbmRleCBwYWdlLCBpZiBhcHBsaWNhYmxlLgorCSAq CisJICogYmF0Y2guZGVhZEl0ZW1zW10gaXMgbm93IGluIHdoYXRldmVyIG9yZGVyIHRoZSBzY2Fu IHJldHVybmVkIGl0ZW1zIGluLgorCSAqIFdlIG1pZ2h0IGhhdmUgZXZlbiBzYXZlZCB0aGUgc2Ft ZSBpdGVtL1RJRCB0d2ljZS4KKwkgKgorCSAqIFNvcnQgYW5kIHVuaXF1ZS1pZnkgZGVhZEl0ZW1z W10uICBUaGF0IHdheSB0aGUgaW5kZXggQU0gY2FuIHNhZmVseQorCSAqIGFzc3VtZSB0aGF0IGl0 ZW1zIHdpbGwgYWx3YXlzIGJlIGluIHRoZWlyIG9yaWdpbmFsIGluZGV4IHBhZ2Ugb3JkZXIuCisJ ICovCisJaWYgKGJhdGNoLT5udW1EZWFkID4gMCAmJgorCQlzY2FuLT5pbmRleFJlbGF0aW9uLT5y ZF9pbmRhbS0+YW1raWxsaXRlbXNiYXRjaCAhPSBOVUxMKQorCXsKKwkJaWYgKGJhdGNoLT5udW1E ZWFkID4gMSkKKwkJeworCQkJcXNvcnQoYmF0Y2gtPmRlYWRJdGVtcywgYmF0Y2gtPm51bURlYWQs IHNpemVvZihpbnQpLAorCQkJCSAgYmF0Y2hfY29tcGFyZV9pbnQpOworCQkJYmF0Y2gtPm51bURl YWQgPSBxdW5pcXVlKGJhdGNoLT5kZWFkSXRlbXMsIGJhdGNoLT5udW1EZWFkLAorCQkJCQkJCQkJ IHNpemVvZihpbnQpLCBiYXRjaF9jb21wYXJlX2ludCk7CisJCX0KKworCQlzY2FuLT5pbmRleFJl bGF0aW9uLT5yZF9pbmRhbS0+YW1raWxsaXRlbXNiYXRjaChzY2FuLCBiYXRjaCk7CisJfQorCisJ LyoKKwkgKiBUcnkgdG8gc3RvcmUgY2FsbGVyJ3MgYmF0Y2ggaW4gdGhpcyBhbWdldGJhdGNoIHNj YW4ncyBjYWNoZSBvZgorCSAqIHByZXZpb3VzbHkgcmVsZWFzZWQgYmF0Y2hlcyBmaXJzdCAod2hl biBjYWxsZXIgcmVxdWVzdHMgaXQpCisJICovCisJaWYgKGFsbG93X2NhY2hlICYmIGJhdGNoX2Nh Y2hlX3N0b3JlKHNjYW4sIGJhdGNoKSkKKwkJcmV0dXJuOworCisJLyoganVzdCBwZnJlZSB0aGUg Y2FsbGVyJ3MgYmF0Y2ggKHBsdXMgYmF0Y2gncyBkZWFkSXRlbXMsIGlmIGFueSkgKi8KKwlpZiAo YmF0Y2gtPmRlYWRJdGVtcykKKwkJcGZyZWUoYmF0Y2gtPmRlYWRJdGVtcyk7CisJcGZyZWUoYmF0 Y2hfYWxsb2NfYmFzZShzY2FuLCBiYXRjaCkpOworfQorCisvKgorICogRHJvcCB0aGUgYmF0Y2gn cyBUSUQgcmVjeWNsaW5nIGludGVybG9jayB2aWEgYW11bmd1YXJkYmF0Y2gKKyAqCisgKiBDYWxs ZWQgYnkgdGhlIHRhYmxlIEFNIHdoZW4gaXQncyBzYWZlIHRvIGRyb3Agd2hhdGV2ZXIgaW50ZXJs b2NrIHRoZSBpbmRleAorICogQU0gaG9sZHMgdG8gcHJldmVudCB1bnNhZmUgY29uY3VycmVudCBU SUQgcmVjeWNsaW5nIGJ5IFZBQ1VVTSAodHlwaWNhbGx5IGEKKyAqIGJ1ZmZlciBwaW4gb24gdGhl IGJhdGNoJ3MgaW5kZXggcGFnZSBpbiBiYXRjaCdzIG9wYXF1ZSBhcmVhKS4KKyAqLwordm9pZAor dGFibGVhbV91dGlsX3VuZ3VhcmRfYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5C YXRjaCBiYXRjaCkKK3sKKwkvKiBTaG91bGQgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBpZmYgIWJh dGNoSW1tZWRpYXRlVW5ndWFyZCAqLworCUFzc2VydCghc2Nhbi0+YmF0Y2hJbW1lZGlhdGVVbmd1 YXJkKTsKKwlBc3NlcnQoYmF0Y2gtPmlzR3VhcmRlZCk7CisKKwlzY2FuLT5pbmRleFJlbGF0aW9u LT5yZF9pbmRhbS0+YW11bmd1YXJkYmF0Y2goc2NhbiwgYmF0Y2gpOworCisJYmF0Y2gtPmlzR3Vh cmRlZCA9IGZhbHNlOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgkJCXV0aWxpdHkgZnVuY3Rpb25zIGNh bGxlZCBieSBhbWdldGJhdGNoIGluZGV4IEFNcworICoKKyAqIFRoZXNlIGZ1bmN0aW9ucyBtYW5h Z2UgYmF0Y2ggYWxsb2NhdGlvbiwgdW5sb2NrL3BpbiBtYW5hZ2VtZW50LCBhbmQgYmF0Y2gKKyAq IHJlc291cmNlIHJlY3ljbGluZy4KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisvKgorICogVW5sb2NrIGJh dGNoJ3MgaW5kZXggcGFnZSBidWZmZXIgbG9jaworICoKKyAqIFVubG9ja3MgdGhlIGdpdmVuIGJ1 ZmZlciBpbiBwcmVwYXJhdGlvbiBmb3IgYW1nZXRiYXRjaCByZXR1cm5pbmcgaXRlbXMKKyAqIHNh dmVkIGluIHRoYXQgYmF0Y2guICBQZXJmb3JtcyBleHRyYSBzdGVwcyByZXF1aXJlZCBieSBhbWdl dGJhdGNoIGNhbGxlcnMKKyAqIGluIHBhc3NpbmcuCisgKgorICogT25seSBjYWxsIGhlcmUgd2hl biBhIGJhdGNoIGhhcyBvbmUgb3IgbW9yZSBtYXRjaGluZyBpdGVtcyB0byByZXR1cm4gdXNpbmcK KyAqIGFtZ2V0YmF0Y2ggKG9yIGZvciBhbWdldGJpdG1hcCB0byBsb2FkIGludG8gaXRzIGJpdG1h cCBvZiBtYXRjaGluZyBUSURzKS4KKyAqIFdoZW4gYW4gaW5kZXggcGFnZSBoYXMgbm8gbWF0Y2hl cywgaXQncyBhbHdheXMgc2FmZSBmb3IgaW5kZXggQU1zIHRvIGRyb3AKKyAqIGJvdGggdGhlIGxv Y2sgYW5kIHRoZSBwaW4gZm9yIHRoZW1zZWx2ZXMuCisgKgorICogTm90ZTogSXQgaXMgY29udmVu aWVudCBmb3IgaW5kZXggQU1zIHRoYXQgaW1wbGVtZW50IGJvdGggYW1nZXRiYXRjaCBhbmQKKyAq IGFtZ2V0Yml0bWFwIHRvIGNvbnNpc3RlbnRseSB1c2UgdGhlIHNhbWUgYmF0Y2ggbWFuYWdlbWVu dCBhcHByb2FjaCwgc2luY2UKKyAqIHRoYXQgYXZvaWRzIGludHJvZHVjaW5nIHNwZWNpYWwgY2Fz ZXMgdG8gbG93ZXItbGV2ZWwgY29kZS4gIFdlIGRyb3AgYm90aAorICogdGhlIGxvY2sgYW5kIHRo ZSBwaW4gb24gYmF0Y2gncyBwYWdlIG9uIGJlaGFsZiBvZiBhbWdldGJpdG1hcCBjYWxsZXJzLgor ICoKKyAqIEZvciBhbWdldGJhdGNoIGNhbGxlcnMsIHdoZW4gYmF0Y2hJbW1lZGlhdGVVbmd1YXJk IGlzIHNldCAocGxhaW4gTVZDQworICogc2NhbnMpLCB3ZSBhbHNvIHJlbGVhc2UgdGhlIHBpbiBo ZXJlICh0aGUgVElEIHJlY3ljbGluZyBpbnRlcmxvY2spLCBzbworICogdGhhdCBubyBsYXRlciBh bXVuZ3VhcmRiYXRjaCBjYWxsYmFjayB3aWxsIGJlIG5lZWRlZC4gIE90aGVyd2lzZSB0aGUgdGFi bGUKKyAqIEFNIHdpbGwgY2FsbCBhbXVuZ3VhcmRiYXRjaCBsYXRlciB3aGVuIGl0J3Mgc2FmZSB0 byBkcm9wIHRoZSBpbnRlcmxvY2suCisgKgorICogSW5kZXggQU1zIHdob3NlIFRJRCByZWN5Y2xp bmcgaW50ZXJsb2NrIGlzIG5vdCBqdXN0IGEgYnVmZmVyIHBpbiwgb3Igd2hvc2UKKyAqIGFtdW5n dWFyZGJhdGNoIGRvZXMgbm90IHNpbXBseSByZWxlYXNlIGEgcGluLCBhcmUgbm90IG9ibGlnYXRl ZCB0byB1c2UgdGhpcworICogZnVuY3Rpb24uICBUaGV5IGNhbiBpbXBsZW1lbnQgdGhlaXIgb3du IGVxdWl2YWxlbnQuICBTdWNoIGluZGV4IEFNcyBhcmUgYWxzbworICogZnJlZSB0byB1c2UgdGhl IGJhdGNoIExTTiBmaWVsZCB0aGVtc2VsdmVzOyB0aGVpciBhbWtpbGxpdGVtc2JhdGNoIHJvdXRp bmUKKyAqIGNhbiB1c2UgdGhhdCBMU04gaW4gdGhlIHVzdWFsIHdheSwgb3IgaW4gd2hhdGV2ZXIg d2F5IHRoZSBBTSBkZWVtcyBuZWNlc3NhcnkKKyAqIChjb3JlIGNvZGUgd2lsbCBub3QgdXNlIGl0 IGZvciBhbnkgb3RoZXIgcHVycG9zZSkuCisgKi8KK3ZvaWQKK2luZGV4YW1fdXRpbF9iYXRjaF91 bmxvY2soSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCwgQnVmZmVyIGJ1 ZikKK3sKKwkvKiBiYXRjaCBtdXN0IGhhdmUgb25lIG9yIG1vcmUgbWF0Y2hpbmcgaXRlbXMgcmV0 dXJuZWQgYnkgaW5kZXggQU0gKi8KKwlBc3NlcnQoYmF0Y2gtPmZpcnN0SXRlbSA+PSAwICYmIGJh dGNoLT5maXJzdEl0ZW0gPD0gYmF0Y2gtPmxhc3RJdGVtKTsKKworCWlmIChzY2FuLT51c2ViYXRj aHJpbmcpCisJeworCQkvKiBhbWdldGJhdGNoIChub3QgYW1nZXRiaXRtYXApIGNhbGxlciAqLwor CQlBc3NlcnQoc2Nhbi0+aGVhcFJlbGF0aW9uICE9IE5VTEwpOworCisJCS8qCisJCSAqIEhhdmUg dG8gc2V0IGJhdGNoLT5sc24gc28gdGhhdCBhbWtpbGxpdGVtc2JhdGNoIGhhcyBhIHdheSB0byBk ZXRlY3QKKwkJICogd2hlbiBjb25jdXJyZW50IGhlYXAgVElEIHJlY3ljbGluZyBieSBWQUNVVU0g bWlnaHQgaGF2ZSB0YWtlbgorCQkgKiBwbGFjZS4gIEl0J2xsIG9ubHkgYmUgc2FmZSB0byBzZXQg YW55IGluZGV4IHR1cGxlIExQX0RFQUQgYml0cyB3aGVuCisJCSAqIHRoZSBwYWdlIExTTiBoYXNu J3QgYWR2YW5jZWQuCisJCSAqCisJCSAqIFBsYWluIE1WQ0Mgc2NhbnMgKGJhdGNoSW1tZWRpYXRl VW5ndWFyZCkgYWxzbyByZWxlYXNlIHRoZSBwaW4gbm93LAorCQkgKiBkcm9wcGluZyB0aGUgVElE IHJlY3ljbGluZyBpbnRlcmxvY2sgc28gdGhhdCBubyBhbXVuZ3VhcmRiYXRjaAorCQkgKiBjYWxs YmFjayB3aWxsIGJlIG5lZWRlZCBsYXRlci4gIFRoZSBpbmRleCBBTSBjYWxsZXIgbXVzdCBjbGVh ciBpdHMKKwkJICogb3duIG9wYXF1ZSBidWYgZmllbGQgYWZ0ZXIgd2UgcmV0dXJuLgorCQkgKgor CQkgKiBOb24taW1tZWRpYXRlLXVuZ3VhcmQgc2NhbnMgcmV0YWluIHRoZSBwaW47IHRoZSB0YWJs ZSBBTSB3aWxsIGNhbGwKKwkJICogYW11bmd1YXJkYmF0Y2ggdG8gZHJvcCB0aGUgaW50ZXJsb2Nr IHdoZW4gcmVhZHkuCisJCSAqLworCQliYXRjaC0+bHNuID0gQnVmZmVyR2V0TFNOQXRvbWljKGJ1 Zik7CisJCWlmIChzY2FuLT5iYXRjaEltbWVkaWF0ZVVuZ3VhcmQpCisJCXsKKwkJCS8qIGRyb3Ag Ym90aCB0aGUgbG9jayBhbmQgdGhlIHBpbiAqLworCQkJVW5sb2NrUmVsZWFzZUJ1ZmZlcihidWYp OworCQl9CisJCWVsc2UKKwkJeworCQkJLyoganVzdCBkcm9wIHRoZSBsb2NrIChob2xkIG9uIHRv IGludGVybG9jayBwaW4pICovCisJCQlVbmxvY2tCdWZmZXIoYnVmKTsKKwkJfQorCisJCS8qIElm IHdlIHJlbGVhc2VkIGJ1ZmZlciBwaW4sIGJhdGNoIGlzIG5vdyB1bmd1YXJkZWQgKi8KKwkJYmF0 Y2gtPmlzR3VhcmRlZCA9ICFzY2FuLT5iYXRjaEltbWVkaWF0ZVVuZ3VhcmQ7CisJfQorCWVsc2UK Kwl7CisJCS8qIGFtZ2V0Yml0bWFwIChub3QgYW1nZXRiYXRjaCkgY2FsbGVyICovCisJCUFzc2Vy dChzY2FuLT5oZWFwUmVsYXRpb24gPT0gTlVMTCk7CisKKwkJLyogZHJvcCBib3RoIHRoZSBsb2Nr IGFuZCB0aGUgcGluICovCisJCVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmKTsKKwl9Cit9CisKKy8q CisgKiBBbGxvY2F0ZSBhIG5ldyBiYXRjaAorICoKKyAqIFVzZWQgYnkgaW5kZXggQU1zIHRoYXQg c3VwcG9ydCBhbWdldGJhdGNoIGludGVyZmFjZSAoYm90aCBkdXJpbmcgYW1nZXRiYXRjaAorICog YW5kIGFtZ2V0Yml0bWFwIHNjYW5zKS4KKyAqCisgKiBSZXR1cm5zIEluZGV4U2NhbkJhdGNoIHdp dGggc3BhY2UgdG8gZml0IHNjYW4tPm1heGl0ZW1zYmF0Y2gtbWFueQorICogQmF0Y2hNYXRjaGlu Z0l0ZW0gZW50cmllcy4gIFRoaXMgd2lsbCBlaXRoZXIgYmUgYSBuZXdseSBhbGxvY2F0ZWQgYmF0 Y2gsIG9yCisgKiBhIGJhdGNoIHJlY3ljbGVkIGZyb20gdGhlIGNhY2hlIG1hbmFnZWQgYnkgaW5k ZXhhbV91dGlsX2JhdGNoX3JlbGVhc2UuICBTZWUKKyAqIGNvbW1lbnRzIGFib3ZlIGluZGV4YW1f dXRpbF9iYXRjaF9yZWxlYXNlLgorICoKKyAqIEhvdXNla2VlcGluZyBmaWVsZHMgKGJ1Ziwga25v d25FbmRCYWNrd2FyZC9Gb3J3YXJkLCBmaXJzdEl0ZW0sIGxhc3RJdGVtLAorICogbnVtRGVhZCwg ZGVhZEl0ZW1zLCBjdXJyVHVwbGVzKSBhcmUgaW5pdGlhbGl6ZWQgaGVyZS4gIFRoZSB0YWJsZSBB TSdzCisgKiBiYXRjaF9pbml0IGNhbGxiYWNrIGlzIGludm9rZWQgaGVyZSB0byBpbml0aWFsaXpl IHRoZSB0YWJsZSBBTSBvcGFxdWUgYXJlYS4KKyAqIFRoZSBpbmRleCBBTSBjYWxsZXIgaXMgcmVz cG9uc2libGUgZm9yIGZpbGxpbmcgaW4gaXRzIHBlci1iYXRjaCBvcGFxdWUKKyAqIGZpZWxkcyBh bmQgdGhlIG1hdGNoaW5nIGl0ZW1zW10gYXJyYXkuCisgKgorICogT25jZSB0aGUgYmF0Y2ggaGFz IHRoZSByZXF1aXJlZCBtYXRjaGluZyBpdGVtcywgY2FsbGVyIHNob3VsZCBnZW5lcmFsbHkKKyAq IHBhc3MgaXQgdG8gaW5kZXhhbV91dGlsX2JhdGNoX3VubG9jaywgYWhlYWQgb2YgaXQgYmVpbmcg cmV0dXJuZWQgdGhyb3VnaAorICogaW5kZXggQU0ncyBhbWdldGJhdGNoIHJvdXRpbmUuICBJZiBp dCB0dXJucyBvdXQgdGhhdCB0aGUgYmF0Y2ggd29uJ3QgbmVlZAorICogdG8gYmUgcmV0dXJuZWQg bGlrZSB0aGlzIChlLmcuLCBkdWUgdG8gdGhlIHNjYW4gaGF2aW5nIG5vIG1vcmUgbWF0Y2hlcyks CisgKiBjYWxsZXIgc2hvdWxkIHBhc3MgaXRzIGVtcHR5L3VudXNlZCBiYXRjaCB0byBpbmRleGFt X3V0aWxfYmF0Y2hfcmVsZWFzZS4KKyAqLworSW5kZXhTY2FuQmF0Y2gKK2luZGV4YW1fdXRpbF9i YXRjaF9hbGxvYyhJbmRleFNjYW5EZXNjIHNjYW4pCit7CisJSW5kZXhTY2FuQmF0Y2ggYmF0Y2gg PSBOVUxMOworCWJvb2wJCW5ld19hbGxvYyA9IGZhbHNlOworCisJLyoKKwkgKiBMYXppbHkgY29t cHV0ZSBiYXRjaF90YWJsZV9vZmZzZXQgb24gZmlyc3QgYWxsb2NhdGlvbi4gIFRoaXMgY29tYmlu ZXMKKwkgKiB0aGUgdGFibGUgQU0gYW5kIGluZGV4IEFNIG9wYXF1ZSBzaXplcyBpbnRvIGEgc2lu Z2xlIG9mZnNldCB0aGF0IGNhbiBiZQorCSAqIHVzZWQgdG8gZmluZCB0aGUgdGFibGUgQU0gb3Bh cXVlIGFyZWEgKGFuZCB0aGUgdHJ1ZSBhbGxvY2F0aW9uIGJhc2UpCisJICogZnJvbSB0aGUgYmF0 Y2ggcG9pbnRlci4KKwkgKi8KKwlpZiAoc2Nhbi0+YmF0Y2hfdGFibGVfb2Zmc2V0ID09IDAgJiYK KwkJKHNjYW4tPmJhdGNoX2luZGV4X29wYXF1ZV9zaXplID4gMCB8fAorCQkgKHNjYW4tPnhzX2hl YXBmZXRjaCAmJiBzY2FuLT54c19oZWFwZmV0Y2gtPmJhdGNoX29wYXF1ZV9zaXplID4gMCkpKQor CXsKKwkJdWludDE2CQl0YWJsZV9vcGFxdWUgPSBzY2FuLT54c19oZWFwZmV0Y2ggPworCQkJc2Nh bi0+eHNfaGVhcGZldGNoLT5iYXRjaF9vcGFxdWVfc2l6ZSA6IDA7CisKKwkJc2Nhbi0+YmF0Y2hf dGFibGVfb2Zmc2V0ID0gdGFibGVfb3BhcXVlICsKKwkJCXNjYW4tPmJhdGNoX2luZGV4X29wYXF1 ZV9zaXplOworCX0KKworCS8qIEZpcnN0IGxvb2sgZm9yIGFuIGV4aXN0aW5nIGJhdGNoIGZyb20g dGhlIGNhY2hlICovCisJaWYgKHNjYW4tPnVzZWJhdGNocmluZykKKwl7CisJCWZvciAoaW50IGkg PSAwOyBpIDwgSU5ERVhfU0NBTl9DQUNIRV9CQVRDSEVTOyBpKyspCisJCXsKKwkJCWlmIChzY2Fu LT5iYXRjaGNhY2hlW2ldICE9IE5VTEwpCisJCQl7CisJCQkJLyogUmV0dXJuIGNhY2hlZCB1bnJl ZmVyZW5jZWQgYmF0Y2ggKi8KKwkJCQliYXRjaCA9IHNjYW4tPmJhdGNoY2FjaGVbaV07CisJCQkJ c2Nhbi0+YmF0Y2hjYWNoZVtpXSA9IE5VTEw7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisJ ZWxzZSBpZiAoc2Nhbi0+YmF0Y2hjYWNoZVswXSAhPSBOVUxMKQorCXsKKwkJLyoKKwkJICogUmV1 c2UgY2FjaGVkIGJhdGNoIGZyb20gcHJpb3IgYW1nZXRiaXRtYXAgaXRlcmF0aW9uLiAgVGhpcyBw YXRoIGlzCisJCSAqIGhpdCBvbiBldmVyeSBhbWdldGJpdG1hcCBjYWxsIGhlcmUgYWZ0ZXIgdGhl IHNjYW4ncyBmaXJzdC4KKwkJICovCisJCWJhdGNoID0gc2Nhbi0+YmF0Y2hjYWNoZVswXTsKKwkJ c2Nhbi0+YmF0Y2hjYWNoZVswXSA9IE5VTEw7CisJfQorCisJaWYgKCFiYXRjaCkKKwl7CisJCVNp emUJCXByZWZpeF9zejsKKwkJU2l6ZQkJYmFzZV9zejsKKwkJU2l6ZQkJdHJhaWxpbmdfc3o7CisJ CVNpemUJCWFsbG9jc3o7CisJCWNoYXIJICAgKnJhdzsKKworCQkvKiBBTSBvcGFxdWUgYXJlYXMg YmVmb3JlIHRoZSBiYXRjaCBwb2ludGVyICovCisJCXByZWZpeF9zeiA9IHNjYW4tPmJhdGNoX3Rh YmxlX29mZnNldDsKKworCQkvKiBJbmRleFNjYW5CYXRjaERhdGEgaGVhZGVyICsgaXRlbXNbXSAq LworCQliYXNlX3N6ID0gb2Zmc2V0b2YoSW5kZXhTY2FuQmF0Y2hEYXRhLCBpdGVtcykgKworCQkJ c2l6ZW9mKEJhdGNoTWF0Y2hpbmdJdGVtKSAqIHNjYW4tPm1heGl0ZW1zYmF0Y2g7CisKKwkJLyoK KwkJICogVHJhaWxpbmcgZGF0YSBhZnRlciBpdGVtc1tdOiBwZXItaXRlbSBkYXRhIChvd25lZCBi eSB0YWJsZSBBTSksCisJCSAqIHRoZW4gY3VyclR1cGxlcyB3b3Jrc3BhY2UgKG93bmVkIGJ5IGlu ZGV4IEFNLCByZWFkIGJ5IHRhYmxlIEFNKQorCQkgKi8KKwkJdHJhaWxpbmdfc3ogPSAwOworCQlp ZiAoc2Nhbi0+eHNfd2FudF9pdHVwKQorCQl7CisJCQlpZiAoc2Nhbi0+eHNfaGVhcGZldGNoICYm CisJCQkJc2Nhbi0+eHNfaGVhcGZldGNoLT5iYXRjaF9wZXJfaXRlbV9zaXplID4gMCkKKwkJCQl0 cmFpbGluZ19zeiArPSBNQVhBTElHTihzY2FuLT54c19oZWFwZmV0Y2gtPmJhdGNoX3Blcl9pdGVt X3NpemUgKgorCQkJCQkJCQkJCXNjYW4tPm1heGl0ZW1zYmF0Y2gpOworCQkJdHJhaWxpbmdfc3og Kz0gc2Nhbi0+YmF0Y2hfdHVwbGVzX3dvcmtzcGFjZTsKKwkJfQorCisJCWFsbG9jc3ogPSBwcmVm aXhfc3ogKyBNQVhBTElHTihiYXNlX3N6KSArIHRyYWlsaW5nX3N6OworCQlyYXcgPSBwYWxsb2Mo YWxsb2Nzeik7CisJCWJhdGNoID0gKEluZGV4U2NhbkJhdGNoKSAocmF3ICsgcHJlZml4X3N6KTsK KworCQkvKiBTZXQgdXAgY3VyclR1cGxlcyBwb2ludGVyIGZvciBpbmRleC1vbmx5IHNjYW5zICov CisJCWlmIChzY2FuLT54c193YW50X2l0dXAgJiYgc2Nhbi0+YmF0Y2hfdHVwbGVzX3dvcmtzcGFj ZSA+IDApCisJCXsKKwkJCVNpemUJCWl0ZW1zRW5kID0gTUFYQUxJR04oYmFzZV9zeik7CisJCQlT aXplCQl0YWJsZVRyYWlsaW5nID0gMDsKKworCQkJaWYgKHNjYW4tPnhzX2hlYXBmZXRjaCAmJgor CQkJCXNjYW4tPnhzX2hlYXBmZXRjaC0+YmF0Y2hfcGVyX2l0ZW1fc2l6ZSA+IDApCisJCQkJdGFi bGVUcmFpbGluZyA9IE1BWEFMSUdOKHNjYW4tPnhzX2hlYXBmZXRjaC0+YmF0Y2hfcGVyX2l0ZW1f c2l6ZSAqCisJCQkJCQkJCQkJIHNjYW4tPm1heGl0ZW1zYmF0Y2gpOworCQkJYmF0Y2gtPmN1cnJU dXBsZXMgPSAoY2hhciAqKSBiYXRjaCArIGl0ZW1zRW5kICsgdGFibGVUcmFpbGluZzsKKwkJfQor CQllbHNlCisJCQliYXRjaC0+Y3VyclR1cGxlcyA9IE5VTEw7CisKKwkJLyoKKwkJICogQmF0Y2hl cyBhbGxvY2F0ZSBkZWFkSXRlbXMgbGF6aWx5ICh0aG91Z2ggbm90ZSB0aGF0IGNhY2hlZCBiYXRj aGVzCisJCSAqIGtlZXAgdGhlaXIgZGVhZEl0ZW1zIGFsbG9jYXRpb24gd2hlbiByZWN5Y2xlZCkK KwkJICovCisJCWJhdGNoLT5kZWFkSXRlbXMgPSBOVUxMOworCQluZXdfYWxsb2MgPSB0cnVlOwor CX0KKworCS8qIHhzX3dhbnRfaXR1cCBzY2FucyBtdXN0IGdldCBhIGN1cnJUdXBsZXMgc3BhY2Ug Ki8KKwlBc3NlcnQoIShzY2FuLT54c193YW50X2l0dXAgJiYgc2Nhbi0+YmF0Y2hfdHVwbGVzX3dv cmtzcGFjZSA+IDAgJiYKKwkJCSBiYXRjaC0+Y3VyclR1cGxlcyA9PSBOVUxMKSk7CisKKwkvKiBM ZXQgdGhlIHRhYmxlIEFNIGluaXRpYWxpemUgaXRzIHBlci1iYXRjaCBvcGFxdWUgYXJlYSAqLwor CWlmIChzY2FuLT54c19oZWFwZmV0Y2gpCisJCXRhYmxlX2luZGV4X2ZldGNoX2JhdGNoX2luaXQo c2NhbiwgYmF0Y2gsIG5ld19hbGxvYyk7CisKKwkvKiBzaGFyZWQgaW5pdGlhbGl6YXRpb24gKi8K KwliYXRjaC0+a25vd25FbmRCYWNrd2FyZCA9IGZhbHNlOworCWJhdGNoLT5rbm93bkVuZEZvcndh cmQgPSBmYWxzZTsKKwliYXRjaC0+aXNHdWFyZGVkID0gZmFsc2U7CisJYmF0Y2gtPmZpcnN0SXRl bSA9IC0xOworCWJhdGNoLT5sYXN0SXRlbSA9IC0xOworCWJhdGNoLT5udW1EZWFkID0gMDsKKwor CXJldHVybiBiYXRjaDsKK30KKworLyoKKyAqIFJlbGVhc2UgYWxsb2NhdGVkIGJhdGNoCisgKgor ICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgaW5kZXggQU1zIHRvIHJlbGVhc2UgYSBiYXRj aCBhbGxvY2F0ZWQgYnkKKyAqIGluZGV4YW1fdXRpbF9iYXRjaF9hbGxvYy4gIEJhdGNoZXMgYXJl IGNhY2hlZCBoZXJlIGZvciByZXVzZSB0byByZWR1Y2UKKyAqIHBhbGxvYy9wZnJlZSBvdmVyaGVh ZC4KKyAqCisgKiBJdCdzIHNhZmUgdG8gcmVsZWFzZSBhIGJhdGNoIGltbWVkaWF0ZWx5IHdoZW4g aXQgd2FzIHVzZWQgdG8gcmVhZCBhIHBhZ2UKKyAqIHRoYXQgcmV0dXJuZWQgbm8gbWF0Y2hlcyB0 byB0aGUgc2Nhbi4gIEJhdGNoZXMgYWN0dWFsbHkgcmV0dXJuZWQgYnkgaW5kZXgKKyAqIEFNJ3Mg YW1nZXRiYXRjaCByb3V0aW5lIChpLmUuIGJhdGNoZXMgZm9yIHBhZ2VzIHdpdGggb25lIG9yIG1v cmUgbWF0Y2hlcykKKyAqIG11c3QgYmUgcmVsZWFzZWQgYnkgdGFibGVhbV91dGlsX2ZyZWVfYmF0 Y2gsIHdoaWNoIGNhbGxzIGhlcmUgYWZ0ZXIgdGhlCisgKiBpbmRleCBBTSdzIGFta2lsbGl0ZW1z YmF0Y2ggcm91dGluZSAoaWYgYW55KS4gIEluZGV4IEFNcyB0aGF0IHVzZSBiYXRjaGVzCisgKiBz aG91bGQgY2FsbCBoZXJlIHRvIHJlbGVhc2UgYSBiYXRjaCBmcm9tIHRoZWlyIGFtZ2V0YmF0Y2gg b3IgYW1nZXRiaXRtYXAKKyAqIHJvdXRpbmVzLgorICoKKyAqIFRoZSBydWxlcyBmb3IgYmF0Y2gg b3duZXJzaGlwIGRpZmZlciBzbGlnaHRseSBmb3IgYW1nZXRiaXRtYXAgc2NhbnM7IHNlZQorICog dGhlIGFtZ2V0Yml0bWFwIGRvY3VtZW50YXRpb24gaW4gZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dt bCBmb3IgZGV0YWlscy4KKyAqLwordm9pZAoraW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2UoSW5k ZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCkKK3sKKwlpZiAoIXNjYW4tPnVz ZWJhdGNocmluZykKKwl7CisJCS8qCisJCSAqIGFtZ2V0Yml0bWFwIHNjYW4gY2FsbGVyLgorCQkg KgorCQkgKiBhbWdldGJpdG1hcCByb3V0aW5lcyBhcmUgcmVxdWlyZWQgdG8gYWxsb2NhdGUgbm8g bW9yZSB0aGFuIG9uZQorCQkgKiBiYXRjaCBhdCBhIHRpbWUsIHNvIHdlJ2xsIGFsd2F5cyBoYXZl IGEgZnJlZSBzbG90LgorCQkgKi8KKwkJQXNzZXJ0KHNjYW4tPmJhdGNoY2FjaGVbMF0gPT0gTlVM TCk7CisJCUFzc2VydChzY2FuLT5oZWFwUmVsYXRpb24gPT0gTlVMTCk7CisJCUFzc2VydChiYXRj aC0+ZGVhZEl0ZW1zID09IE5VTEwpOworCQlBc3NlcnQoYmF0Y2gtPmN1cnJUdXBsZXMgPT0gTlVM TCk7CisKKwkJc2Nhbi0+YmF0Y2hjYWNoZVswXSA9IGJhdGNoOworCQlyZXR1cm47CisJfQorCisJ LyogYW1nZXRiYXRjaCBzY2FuIGNhbGxlciAqLworCUFzc2VydChzY2FuLT5oZWFwUmVsYXRpb24g IT0gTlVMTCk7CisKKwkvKgorCSAqIFRyeSB0byBzdG9yZSBjYWxsZXIncyBiYXRjaCBpbiB0aGlz IGFtZ2V0YmF0Y2ggc2NhbidzIGNhY2hlIG9mCisJICogcHJldmlvdXNseSByZWxlYXNlZCBiYXRj aGVzIGZpcnN0CisJICovCisJaWYgKGJhdGNoX2NhY2hlX3N0b3JlKHNjYW4sIGJhdGNoKSkKKwkJ cmV0dXJuOworCisJLyogQ2FjaGUgZnVsbDsganVzdCBmcmVlIHRoZSBjYWxsZXIncyBiYXRjaCAq LworCWlmIChiYXRjaC0+ZGVhZEl0ZW1zKQorCQlwZnJlZShiYXRjaC0+ZGVhZEl0ZW1zKTsKKwlw ZnJlZShiYXRjaF9hbGxvY19iYXNlKHNjYW4sIGJhdGNoKSk7Cit9CisKKy8qCisgKiBUcnkgdG8g c3RvcmUgYSBiYXRjaCBpbiB0aGUgc2NhbidzIGJhdGNoIGNhY2hlLgorICoKKyAqIFJldHVybnMg dHJ1ZSBpZiBhIGZyZWUgc2xvdCB3YXMgZm91bmQsIGZhbHNlIGlmIHRoZSBjYWNoZSBpcyBmdWxs LgorICovCitzdGF0aWMgaW5saW5lIGJvb2wKK2JhdGNoX2NhY2hlX3N0b3JlKEluZGV4U2NhbkRl c2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCit7CisJZm9yIChpbnQgaSA9IDA7IGkgPCBJ TkRFWF9TQ0FOX0NBQ0hFX0JBVENIRVM7IGkrKykKKwl7CisJCWlmIChzY2FuLT5iYXRjaGNhY2hl W2ldID09IE5VTEwpCisJCXsKKwkJCXNjYW4tPmJhdGNoY2FjaGVbaV0gPSBiYXRjaDsKKwkJCXJl dHVybiB0cnVlOworCQl9CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCisvKgorICogcXNvcnQg Y29tcGFyaXNvbiBmdW5jdGlvbiBmb3IgaW50IGFycmF5cworICovCitzdGF0aWMgaW50CitiYXRj aF9jb21wYXJlX2ludChjb25zdCB2b2lkICp2YSwgY29uc3Qgdm9pZCAqdmIpCit7CisJaW50CQkJ YSA9ICooKGNvbnN0IGludCAqKSB2YSk7CisJaW50CQkJYiA9ICooKGNvbnN0IGludCAqKSB2Yik7 CisKKwlyZXR1cm4gcGdfY21wX3MzMihhLCBiKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2FjY2Vzcy9pbmRleC9tZXNvbi5idWlsZCBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9tZXNv bi5idWlsZAppbmRleCBkYTY0Y2I1OTUuLjgzZGZhM2YyYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvYWNjZXNzL2luZGV4L21lc29uLmJ1aWxkCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRl eC9tZXNvbi5idWlsZApAQCAtNSw0ICs1LDUgQEAgYmFja2VuZF9zb3VyY2VzICs9IGZpbGVzKAog ICAnYW12YWxpZGF0ZS5jJywKICAgJ2dlbmFtLmMnLAogICAnaW5kZXhhbS5jJywKKyAgJ2luZGV4 YmF0Y2guYycsCiApCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL1JFQURN RSBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvUkVBRE1FCmluZGV4IGNiOTIxY2EyZS4uYTM3 ODY5YjcxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL1JFQURNRQorKysg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL1JFQURNRQpAQCAtMTc5LDE4ICsxNzksMTUgQEAg aG9sZCBvbiB0byB0aGUgcGluICh1c2VkIHdoZW4gcmVhZGluZyBmcm9tIHRoZSBsZWFmIHBhZ2Up IHVudGlsIF9hZnRlcl8KIHRoZXkncmUgZG9uZSB2aXNpdGluZyB0aGUgaGVhcCAoZm9yIFRJRHMg ZnJvbSBwaW5uZWQgbGVhZiBwYWdlKSBwcmV2ZW50cwogY29uY3VycmVudCBUSUQgcmVjeWNsaW5n LiAgVkFDVVVNIGNhbm5vdCBnZXQgYSBjb25mbGljdGluZyBjbGVhbnVwIGxvY2sKIHVudGlsIHRo ZSBpbmRleCBzY2FuIGlzIHRvdGFsbHkgZmluaXNoZWQgcHJvY2Vzc2luZyBpdHMgbGVhZiBwYWdl LgorVGhpcyBpcyByZXF1aXJlZCBieSBhbnkgaW5kZXggQU0gdGhhdCBpbXBsZW1lbnRzIHRoZSBh bWdldGJhdGNoCitpbnRlcmZhY2UuICAoU2VlIGFsc28sIGRvYy9zcmMvc2dtbC9pbmRleGFtLnNn bWwpLgogCi1UaGlzIGFwcHJvYWNoIGlzIGZhaXJseSBjb2Fyc2UsIHNvIHdlIGF2b2lkIGl0IHdo ZW5ldmVyIHBvc3NpYmxlLiAgSW4KLXByYWN0aWNlIG1vc3QgaW5kZXggc2NhbnMgd29uJ3QgaG9s ZCBvbnRvIHRoZWlyIHBpbiwgYW5kIHNvIHdvbid0IGJsb2NrCi1WQUNVVU0uICBUaGVzZSBpbmRl eCBzY2FucyBtdXN0IGRlYWwgd2l0aCBUSUQgcmVjeWNsaW5nIGRpcmVjdGx5LCB3aGljaCBpcwot bW9yZSBjb21wbGljYXRlZCBhbmQgbm90IGFsd2F5cyBwb3NzaWJsZS4gIFNlZSBsYXRlciBzZWN0 aW9uIG9uIG1ha2luZwotY29uY3VycmVudCBUSUQgcmVjeWNsaW5nIHNhZmUuCi0KLU9wcG9ydHVu aXN0aWMgaW5kZXggdHVwbGUgZGVsZXRpb24gcGVyZm9ybXMgYWxtb3N0IHRoZSBzYW1lIHBhZ2Ut bGV2ZWwKLW1vZGlmaWNhdGlvbnMgd2hpbGUgb25seSBob2xkaW5nIGFuIGV4Y2x1c2l2ZSBsb2Nr LiAgVGhpcyBpcyBzYWZlIGJlY2F1c2UKLXRoZXJlIGlzIG5vIHF1ZXN0aW9uIG9mIFRJRCByZWN5 Y2xpbmcgdGFraW5nIHBsYWNlIGxhdGVyIG9uIC0tIG9ubHkgVkFDVVVNCi1jYW4gbWFrZSBUSURz IHJlY3ljbGFibGUuICBTZWUgYWxzbyBzaW1wbGUgZGVsZXRpb24gYW5kIGJvdHRvbS11cAotZGVs ZXRpb24sIGJlbG93LgorT3Bwb3J0dW5pc3RpYyBpbmRleCB0dXBsZSBkZWxldGlvbiBwZXJmb3Jt cyB0aGUgc2FtZSBwYWdlLWxldmVsCittb2RpZmljYXRpb25zIGFzIFZBQ1VVTSwgd2hpbGUgb25s eSBob2xkaW5nIGFuIGV4Y2x1c2l2ZSBsb2NrLiAgVGhpcyBpcworc2FmZSBiZWNhdXNlIHRoZXJl IGlzIG5vIHF1ZXN0aW9uIG9mIFRJRCByZWN5Y2xpbmcgdGFraW5nIHBsYWNlIC0tIG9ubHkKK1ZB Q1VVTSBjYW4gbWFrZSBUSURzIHJlY3ljbGFibGUuICBJbiBvdGhlciB3b3JkcywgVkFDVVVNJ3Mg Y2xlYW51cCBsb2NrCitzZXJ2ZXMgdG8gcHJvdGVjdCBub24tTVZDQyBzbmFwc2hvdCBzY2FucyBm cm9tIGNvbmN1cnJlbnQgVElEIHJlY3ljbGluZworaGF6YXJkczsgaXQgZG9lc24ndCBwcm90ZWN0 IHRoZSBCLVRyZWUgc3RydWN0dXJlIGl0c2VsZi4KIAogQmVjYXVzZSBhIHBpbiBpcyBub3QgYWx3 YXlzIGhlbGQsIGFuZCBhIHBhZ2UgY2FuIGJlIHNwbGl0IGV2ZW4gd2hpbGUKIHNvbWVvbmUgZG9l cyBob2xkIGEgcGluIG9uIGl0LCBpdCBpcyBwb3NzaWJsZSB0aGF0IGFuIGluZGV4c2NhbiB3aWxs CkBAIC00NDAsNTQgKzQzNyw2IEBAIHdoZW5ldmVyIGl0IGlzIHN1YnNlcXVlbnRseSB0YWtlbiBm cm9tIHRoZSBGU00gZm9yIHJldXNlLiAgVGhlIGRlbGV0ZWQKIHBhZ2UncyBjb250ZW50cyB3aWxs IGJlIG92ZXJ3cml0dGVuIGJ5IHRoZSBzcGxpdCBvcGVyYXRpb24gKGl0IHdpbGwgYmVjb21lCiB0 aGUgbmV3IHJpZ2h0IHNpYmxpbmcgcGFnZSkuCiAKLU1ha2luZyBjb25jdXJyZW50IFRJRCByZWN5 Y2xpbmcgc2FmZQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUFzIGV4 cGxhaW5lZCBpbiB0aGUgZWFybGllciBzZWN0aW9uIGFib3V0IGRlbGV0aW5nIGluZGV4IHR1cGxl cyBkdXJpbmcKLVZBQ1VVTSwgd2UgaW1wbGVtZW50IGEgbG9ja2luZyBwcm90b2NvbCB0aGF0IGFs bG93cyBpbmRpdmlkdWFsIGluZGV4IHNjYW5zCi10byBhdm9pZCBjb25jdXJyZW50IFRJRCByZWN5 Y2xpbmcuICBJbmRleCBzY2FucyBvcHQtb3V0IChhbmQgc28gZHJvcCB0aGVpcgotbGVhZiBwYWdl IHBpbiB3aGVuIHZpc2l0aW5nIHRoZSBoZWFwKSB3aGVuZXZlciBpdCdzIHNhZmUgdG8gZG8gc28s IHRob3VnaC4KLURyb3BwaW5nIHRoZSBwaW4gZWFybHkgaXMgdXNlZnVsIGJlY2F1c2UgaXQgYXZv aWRzIGJsb2NraW5nIHByb2dyZXNzIGJ5Ci1WQUNVVU0uICBUaGlzIGlzIHBhcnRpY3VsYXJseSBp bXBvcnRhbnQgd2l0aCBpbmRleCBzY2FucyB1c2VkIGJ5IGN1cnNvcnMsCi1zaW5jZSBpZGxlIGN1 cnNvcnMgc29tZXRpbWVzIHN0b3AgZm9yIHJlbGF0aXZlbHkgbG9uZyBwZXJpb2RzIG9mIHRpbWUu ICBJbgotZXh0cmVtZSBjYXNlcywgYSBjbGllbnQgYXBwbGljYXRpb24gbWF5IGhvbGQgb24gdG8g YW4gaWRsZSBjdXJzb3JzIGZvcgotaG91cnMgb3IgZXZlbiBkYXlzLiAgQmxvY2tpbmcgVkFDVVVN IGZvciB0aGF0IGxvbmcgY291bGQgYmUgZGlzYXN0cm91cy4KLQotSW5kZXggc2NhbnMgdGhhdCBk b24ndCBob2xkIG9uIHRvIGEgYnVmZmVyIHBpbiBhcmUgcHJvdGVjdGVkIGJ5IGhvbGRpbmcgYW4K LU1WQ0Mgc25hcHNob3QgaW5zdGVhZC4gIFRoaXMgbW9yZSBsaW1pdGVkIGludGVybG9jayBwcmV2 ZW50cyB3cm9uZyBhbnN3ZXJzCi10byBxdWVyaWVzLCBidXQgaXQgZG9lcyBub3QgcHJldmVudCBj b25jdXJyZW50IFRJRCByZWN5Y2xpbmcgaXRzZWxmIChvbmx5Ci1ob2xkaW5nIG9udG8gdGhlIGxl YWYgcGFnZSBwaW4gd2hpbGUgYWNjZXNzaW5nIHRoZSBoZWFwIGVuc3VyZXMgdGhhdCkuCi0KLUlu ZGV4LW9ubHkgc2NhbnMgY2FuIG5ldmVyIGRyb3AgdGhlaXIgYnVmZmVyIHBpbiwgc2luY2UgdGhl eSBhcmUgdW5hYmxlIHRvCi10b2xlcmF0ZSBoYXZpbmcgYSByZWZlcmVuY2VkIFRJRCBiZWNvbWUg cmVjeWNsYWJsZS4gIEluZGV4LW9ubHkgc2NhbnMKLXR5cGljYWxseSBqdXN0IHZpc2l0IHRoZSB2 aXNpYmlsaXR5IG1hcCAobm90IHRoZSBoZWFwIHByb3BlciksIGFuZCBzbyB3aWxsCi1ub3QgcmVs aWFibHkgbm90aWNlIHRoYXQgYW55IHN0YWxlIFRJRCByZWZlcmVuY2UgKGZvciBhIFRJRCB0aGF0 IHBvaW50ZWQKLXRvIGEgZGVhZC10by1hbGwgaGVhcCBpdGVtIGF0IGZpcnN0KSB3YXMgY29uY3Vy cmVudGx5IG1hcmtlZCBMUF9VTlVTRUQgaW4KLXRoZSBoZWFwIGJ5IFZBQ1VVTS4gIFRoaXMgY291 bGQgZWFzaWx5IGFsbG93IFZBQ1VVTSB0byBzZXQgdGhlIHdob2xlIGhlYXAKLXBhZ2UgdG8gYWxs LXZpc2libGUgaW4gdGhlIHZpc2liaWxpdHkgbWFwIGltbWVkaWF0ZWx5IGFmdGVyd2FyZHMuICBB biBNVkNDCi1zbmFwc2hvdCBpcyBvbmx5IHN1ZmZpY2llbnQgdG8gYXZvaWQgcHJvYmxlbXMgZHVy aW5nIHBsYWluIGluZGV4IHNjYW5zCi1iZWNhdXNlIHRoZXkgbXVzdCBhY2Nlc3MgZ3JhbnVsYXIg dmlzaWJpbGl0eSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBoZWFwCi1wcm9wZXIuICBBIHBsYWluIGlu ZGV4IHNjYW4gd2lsbCBldmVuIHJlY29nbml6ZSBMUF9VTlVTRUQgaXRlbXMgaW4gdGhlCi1oZWFw IChpdGVtcyB0aGF0IGNvdWxkIGJlIHJlY3ljbGVkIGJ1dCBoYXZlbid0IGJlZW4ganVzdCB5ZXQp IGFzICJub3QKLXZpc2libGUiIC0tIGV2ZW4gd2hlbiB0aGUgaGVhcCBwYWdlIGlzIGdlbmVyYWxs eSBjb25zaWRlcmVkIGFsbC12aXNpYmxlLgotCi1MUF9ERUFEIHNldHRpbmcgb2YgaW5kZXggdHVw bGVzIGJ5IHRoZSBraWxsX3ByaW9yX3R1cGxlIG9wdGltaXphdGlvbgotKGRlc2NyaWJlZCBpbiBm dWxsIGluIHNpbXBsZSBkZWxldGlvbiwgYmVsb3cpIGlzIGFsc28gbW9yZSBjb21wbGljYXRlZCBm b3IKLWluZGV4IHNjYW5zIHRoYXQgZHJvcCB0aGVpciBsZWFmIHBhZ2UgcGlucy4gIFdlIG11c3Qg YmUgY2FyZWZ1bCB0byBhdm9pZAotTFBfREVBRC1tYXJraW5nIGFueSBuZXcgaW5kZXggdHVwbGUg dGhhdCBsb29rcyBsaWtlIGEga25vd24tZGVhZCBpbmRleAotdHVwbGUgYmVjYXVzZSBpdCBoYXBw ZW5zIHRvIHNoYXJlIHRoZSBzYW1lIFRJRCwgZm9sbG93aW5nIGNvbmN1cnJlbnQgVElECi1yZWN5 Y2xpbmcuICBJdCdzIGp1c3QgYWJvdXQgcG9zc2libGUgdGhhdCBzb21lIG90aGVyIHNlc3Npb24g aW5zZXJ0ZWQgYQotbmV3LCB1bnJlbGF0ZWQgaW5kZXggdHVwbGUsIG9uIHRoZSBzYW1lIGxlYWYg cGFnZSwgd2hpY2ggaGFzIHRoZSBzYW1lCi1vcmlnaW5hbCBUSUQuICBJdCB3b3VsZCBiZSB0b3Rh bGx5IHdyb25nIHRvIExQX0RFQUQtc2V0IHRoaXMgbmV3LAotdW5yZWxhdGVkIGluZGV4IHR1cGxl LgotCi1XZSBoYW5kbGUgdGhpcyBraWxsX3ByaW9yX3R1cGxlIHJhY2UgY29uZGl0aW9uIGJ5IGhh dmluZyBhZmZlY3RlZCBpbmRleAotc2NhbnMgY29uc2VydmF0aXZlbHkgYXNzdW1lIHRoYXQgYW55 IGNoYW5nZSB0byB0aGUgbGVhZiBwYWdlIGF0IGFsbAotaW1wbGllcyB0aGF0IGl0IHdhcyByZWFj aGVkIGJ5IGJ0YnVsa2RlbGV0ZSBpbiB0aGUgaW50ZXJpbSBwZXJpb2Qgd2hlbiBubwotYnVmZmVy IHBpbiB3YXMgaGVsZC4gIFRoaXMgaXMgaW1wbGVtZW50ZWQgYnkgbm90IHNldHRpbmcgYW55IExQ X0RFQUQgYml0cwotb24gdGhlIGxlYWYgcGFnZSBhdCBhbGwgd2hlbiB0aGUgcGFnZSdzIExTTiBo YXMgY2hhbmdlZC4gIChUaGlzIGlzIHdoeSB3ZQotaW1wbGVtZW50ICJmYWtlIiBMU05zIGZvciB1 bmxvZ2dlZCBpbmRleCByZWxhdGlvbnMuKQotCiBGYXN0cGF0aCBGb3IgSW5kZXggSW5zZXJ0aW9u CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTczNCw3ICs2ODMsNyBAQCBvZiBy ZWFkZXJzIGNvdWxkIHN0aWxsIG1vdmUgcmlnaHQgdG8gcmVjb3ZlciBpZiB3ZSBkaWRuJ3QgY291 cGxlCiBzYW1lLWxldmVsIGxvY2tzKSwgYnV0IHdlIHByZWZlciB0byBiZSBjb25zZXJ2YXRpdmUg aGVyZS4KIAogRHVyaW5nIHJlY292ZXJ5IGFsbCBpbmRleCBzY2FucyBzdGFydCB3aXRoIGlnbm9y ZV9raWxsZWRfdHVwbGVzID0gZmFsc2UKLWFuZCB3ZSBuZXZlciBzZXQga2lsbF9wcmlvcl90dXBs ZS4gV2UgZG8gdGhpcyBiZWNhdXNlIHRoZSBvbGRlc3QgeG1pbgorYW5kIHdlIG5ldmVyIExQX0RF QUQtbWFyayB0dXBsZXMuIFdlIGRvIHRoaXMgYmVjYXVzZSB0aGUgb2xkZXN0IHhtaW4KIG9uIHRo ZSBzdGFuZGJ5IHNlcnZlciBjYW4gYmUgb2xkZXIgdGhhbiB0aGUgb2xkZXN0IHhtaW4gb24gdGhl IHByaW1hcnkKIHNlcnZlciwgd2hpY2ggbWVhbnMgdHVwbGVzIGNhbiBiZSBtYXJrZWQgTFBfREVB RCBldmVuIHdoZW4gdGhleSBhcmUKIHN0aWxsIHZpc2libGUgb24gdGhlIHN0YW5kYnkuIFdlIGRv bid0IFdBTCBsb2cgdHVwbGUgTFBfREVBRCBiaXRzLCBidXQKQEAgLTc1Niw5ICs3MDUsOCBAQCBu b24tTVZDQyBzY2FucyBpcyBub3QgcmVxdWlyZWQgb24gc3RhbmRieSBub2Rlcy4gV2Ugc3RpbGwg Z2V0IGEgZnVsbAogY2xlYW51cCBsb2NrIHdoZW4gcmVwbGF5aW5nIFZBQ1VVTSByZWNvcmRzIGR1 cmluZyByZWNvdmVyeSwgYnV0IHJlY292ZXJ5CiBkb2VzIG5vdCBuZWVkIHRvIGxvY2sgZXZlcnkg bGVhZiBwYWdlIChvbmx5IHRob3NlIGxlYWYgcGFnZXMgdGhhdCBoYXZlCiBpdGVtcyB0byBkZWxl dGUpIC0tIHRoYXQncyBzdWZmaWNpZW50IHRvIGF2b2lkIGJyZWFraW5nIGluZGV4LW9ubHkgc2Nh bnMKLWR1cmluZyByZWNvdmVyeSAoc2VlIHNlY3Rpb24gYWJvdmUgYWJvdXQgbWFraW5nIFRJRCBy ZWN5Y2xpbmcgc2FmZSkuIFRoYXQKLWxlYXZlcyBjb25jZXJuIG9ubHkgZm9yIHBsYWluIGluZGV4 IHNjYW5zLiAoWFhYOiBOb3QgYWN0dWFsbHkgY2xlYXIgd2h5Ci10aGlzIGlzIHRvdGFsbHkgdW5u ZWNlc3NhcnkgZHVyaW5nIHJlY292ZXJ5LikKK2R1cmluZyByZWNvdmVyeS4gVGhhdCBsZWF2ZXMg Y29uY2VybiBvbmx5IGZvciBwbGFpbiBpbmRleCBzY2Fucy4KKyhYWFg6IE5vdCBhY3R1YWxseSBj bGVhciB3aHkgdGhpcyBpcyB0b3RhbGx5IHVubmVjZXNzYXJ5IGR1cmluZyByZWNvdmVyeS4pCiAK IE1WQ0Mgc25hcHNob3QgcGxhaW4gaW5kZXggc2NhbnMgYXJlIGFsd2F5cyBzYWZlLCBmb3IgdGhl IHNhbWUgcmVhc29ucyB0aGF0CiB0aGV5J3JlIHNhZmUgZHVyaW5nIG9yaWdpbmFsIGV4ZWN1dGlv bi4gIEhlYXBUdXBsZVNhdGlzZmllc1RvYXN0KCkgZG9lc24ndApkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL25idHJlZS9uYnRwYWdlLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVl L25idHBhZ2UuYwppbmRleCAwNTQ3MDM4NjEuLjAwNDZjODRkMSAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL25idHJlZS9uYnRwYWdlLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25i dHJlZS9uYnRwYWdlLmMKQEAgLTEwNjAsNiArMTA2MCw5IEBAIF9idF9yZWxidWYoUmVsYXRpb24g cmVsLCBCdWZmZXIgYnVmKQogICogTG9jayBpcyBhY3F1aXJlZCB3aXRob3V0IGFjcXVpcmluZyBh bm90aGVyIHBpbi4gIFRoaXMgaXMgbGlrZSBhIHJhdwogICogTG9ja0J1ZmZlcigpIGNhbGwsIGJ1 dCBwZXJmb3JtcyBleHRyYSBzdGVwcyBuZWVkZWQgYnkgVmFsZ3JpbmQuCiAgKgorICogTm90ZTog X2J0X2JhdGNoX3VubG9jayBpbiBuYnRzZWFyY2guYyAoaW5kZXhhbV91dGlsX2JhdGNoX3VubG9j ayB3cmFwcGVyCisgKiBmdW5jdGlvbikgaGFzIG1hdGNoaW5nIFZhbGdyaW5kIGJ1ZmZlciBsb2Nr IGluc3RydW1lbnRhdGlvbi4KKyAqCiAgKiBOb3RlOiBDYWxsZXIgbWF5IG5lZWQgdG8gY2FsbCBf YnRfY2hlY2twYWdlKCkgd2l0aCBidWYgd2hlbiBwaW4gb24gYnVmCiAgKiB3YXNuJ3Qgb3JpZ2lu YWxseSBhY3F1aXJlZCBpbiBfYnRfZ2V0YnVmKCkgb3IgX2J0X3JlbGFuZGdldGJ1ZigpLgogICov CkBAIC0xMTAxLDEzICsxMTA0LDE5IEBAIF9idF91bmxvY2tidWYoUmVsYXRpb24gcmVsLCBCdWZm ZXIgYnVmKQogCSAqIEJ1ZmZlciBpcyBwaW5uZWQgYW5kIGxvY2tlZCwgd2hpY2ggbWVhbnMgdGhh dCBpdCBpcyBleHBlY3RlZCB0byBiZQogCSAqIGRlZmluZWQgYW5kIGFkZHJlc3NhYmxlLiAgQ2hl Y2sgdGhhdCBwcm9hY3RpdmVseS4KIAkgKi8KLQlWQUxHUklORF9DSEVDS19NRU1fSVNfREVGSU5F RChCdWZmZXJHZXRQYWdlKGJ1ZiksIEJMQ0tTWik7CisjaWYgZGVmaW5lZChVU0VfVkFMR1JJTkQp CisJUGFnZQkJcGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnVmKTsKKworCVZBTEdSSU5EX0NIRUNLX01F TV9JU19ERUZJTkVEKHBhZ2UsIEJMQ0tTWik7CisjZW5kaWYKIAogCS8qIExvY2tCdWZmZXIoKSBh c3NlcnRzIHRoYXQgcGluIGlzIGhlbGQgYnkgdGhpcyBiYWNrZW5kICovCiAJTG9ja0J1ZmZlcihi dWYsIEJVRkZFUl9MT0NLX1VOTE9DSyk7CiAKKyNpZiBkZWZpbmVkKFVTRV9WQUxHUklORCkKIAlp ZiAoIVJlbGF0aW9uVXNlc0xvY2FsQnVmZmVycyhyZWwpKQotCQlWQUxHUklORF9NQUtFX01FTV9O T0FDQ0VTUyhCdWZmZXJHZXRQYWdlKGJ1ZiksIEJMQ0tTWik7CisJCVZBTEdSSU5EX01BS0VfTUVN X05PQUNDRVNTKHBhZ2UsIEJMQ0tTWik7CisjZW5kaWYKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVhZHBhZ2UuYyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9uYnRyZWUvbmJ0cmVhZHBhZ2UuYwppbmRleCAyYmExY2E2NjAuLjM5YzY2MTQ5OCAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWFkcGFnZS5jCisrKyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVhZHBhZ2UuYwpAQCAtMzIsNiArMzIsNyBAQCB0eXBl ZGVmIHN0cnVjdCBCVFJlYWRQYWdlU3RhdGUKIHsKIAkvKiBJbnB1dCBwYXJhbWV0ZXJzLCBzZXQg YnkgX2J0X3JlYWRwYWdlIGZvciBfYnRfY2hlY2trZXlzICovCiAJU2NhbkRpcmVjdGlvbiBkaXI7 CQkJLyogY3VycmVudCBzY2FuIGRpcmVjdGlvbiAqLworCUJsb2NrTnVtYmVyIGN1cnJwYWdlOwkJ LyogY3VycmVudCBwYWdlIGJlaW5nIHJlYWQgKi8KIAlPZmZzZXROdW1iZXIgbWlub2ZmOwkJLyog TG93ZXN0IG5vbi1waXZvdCB0dXBsZSdzIG9mZnNldCAqLwogCU9mZnNldE51bWJlciBtYXhvZmY7 CQkvKiBIaWdoZXN0IG5vbi1waXZvdCB0dXBsZSdzIG9mZnNldCAqLwogCUluZGV4VHVwbGUJZmlu YWx0dXA7CQkvKiBOZWVkZWQgYnkgc2NhbnMgd2l0aCBhcnJheSBrZXlzICovCkBAIC02MywxNCAr NjQsMTMgQEAgc3RhdGljIGJvb2wgX2J0X3NjYW5iZWhpbmRfY2hlY2trZXlzKEluZGV4U2NhbkRl c2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsCiAJCQkJCQkJCQkgSW5kZXhUdXBsZSBmaW5hbHR1 cCk7CiBzdGF0aWMgYm9vbCBfYnRfb3Bwb2Rpcl9jaGVja2tleXMoSW5kZXhTY2FuRGVzYyBzY2Fu LCBTY2FuRGlyZWN0aW9uIGRpciwKIAkJCQkJCQkJICBJbmRleFR1cGxlIGZpbmFsdHVwKTsKLXN0 YXRpYyB2b2lkIF9idF9zYXZlaXRlbShCVFNjYW5PcGFxdWUgc28sIGludCBpdGVtSW5kZXgsCi0J CQkJCQkgT2Zmc2V0TnVtYmVyIG9mZm51bSwgSW5kZXhUdXBsZSBpdHVwKTsKLXN0YXRpYyBpbnQJ X2J0X3NldHVwcG9zdGluZ2l0ZW1zKEJUU2Nhbk9wYXF1ZSBzbywgaW50IGl0ZW1JbmRleCwKLQkJ CQkJCQkJICBPZmZzZXROdW1iZXIgb2ZmbnVtLCBjb25zdCBJdGVtUG9pbnRlckRhdGEgKmhlYXBU aWQsCi0JCQkJCQkJCSAgSW5kZXhUdXBsZSBpdHVwKTsKLXN0YXRpYyBpbmxpbmUgdm9pZCBfYnRf c2F2ZXBvc3RpbmdpdGVtKEJUU2Nhbk9wYXF1ZSBzbywgaW50IGl0ZW1JbmRleCwKLQkJCQkJCQkJ CSAgIE9mZnNldE51bWJlciBvZmZudW0sCi0JCQkJCQkJCQkgICBJdGVtUG9pbnRlciBoZWFwVGlk LCBpbnQgdHVwbGVPZmZzZXQpOworc3RhdGljIHZvaWQgX2J0X3NhdmVpdGVtKEluZGV4U2NhbkJh dGNoIG5ld2JhdGNoLCBpbnQgaXRlbUluZGV4LCBPZmZzZXROdW1iZXIgb2ZmbnVtLAorCQkJCQkJ IEluZGV4VHVwbGUgaXR1cCwgaW50ICp0dXBsZU9mZnNldCk7CitzdGF0aWMgaW50CV9idF9zZXR1 cHBvc3RpbmdpdGVtcyhJbmRleFNjYW5CYXRjaCBuZXdiYXRjaCwgaW50IGl0ZW1JbmRleCwKKwkJ CQkJCQkJICBPZmZzZXROdW1iZXIgb2ZmbnVtLCBjb25zdCBJdGVtUG9pbnRlckRhdGEgKnRhYmxl VGlkLAorCQkJCQkJCQkgIEluZGV4VHVwbGUgaXR1cCwgaW50ICp0dXBsZU9mZnNldCk7CitzdGF0 aWMgaW5saW5lIHZvaWQgX2J0X3NhdmVwb3N0aW5naXRlbShJbmRleFNjYW5CYXRjaCBuZXdiYXRj aCwgaW50IGl0ZW1JbmRleCwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKKwkJCQkJCQkJCSAgIEl0ZW1Q b2ludGVyIHRhYmxlVGlkLCBpbnQgYmFzZU9mZnNldCk7CiBzdGF0aWMgYm9vbCBfYnRfY2hlY2tr ZXlzKEluZGV4U2NhbkRlc2Mgc2NhbiwgQlRSZWFkUGFnZVN0YXRlICpwc3RhdGUsIGJvb2wgYXJy YXlLZXlzLAogCQkJCQkJICBJbmRleFR1cGxlIHR1cGxlLCBpbnQgdHVwbmF0dHMpOwogc3RhdGlj IGJvb2wgX2J0X2NoZWNrX2NvbXBhcmUoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9u IGRpciwKQEAgLTExMSwxNSArMTExLDE1IEBAIHN0YXRpYyBib29sIF9idF92ZXJpZnlfa2V5c193 aXRoX2FycmF5a2V5cyhJbmRleFNjYW5EZXNjIHNjYW4pOwogCiAKIC8qCi0gKglfYnRfcmVhZHBh Z2UoKSAtLSBMb2FkIGRhdGEgZnJvbSBjdXJyZW50IGluZGV4IHBhZ2UgaW50byBzby0+Y3VyclBv cworICoJX2J0X3JlYWRwYWdlKCkgLS0gTG9hZCBkYXRhIGZyb20gY3VycmVudCBpbmRleCBwYWdl IGludG8gbmV3YmF0Y2guCiAgKgotICogQ2FsbGVyIG11c3QgaGF2ZSBwaW5uZWQgYW5kIHJlYWQt bG9ja2VkIHNvLT5jdXJyUG9zLmJ1ZjsgdGhlIGJ1ZmZlcidzIHN0YXRlCi0gKiBpcyBub3QgY2hh bmdlZCBoZXJlLiAgQWxzbywgY3VyclBvcy5tb3JlTGVmdCBhbmQgbW9yZVJpZ2h0IG11c3QgYmUg dmFsaWQ7Ci0gKiB0aGV5IGFyZSB1cGRhdGVkIGFzIGFwcHJvcHJpYXRlLiAgQWxsIG90aGVyIGZp ZWxkcyBvZiBzby0+Y3VyclBvcyBhcmUKKyAqIENhbGxlciBtdXN0IGhhdmUgcGlubmVkIGFuZCBy ZWFkLWxvY2tlZCBuZXdiYXRjaC5idWY7IHRoZSBidWZmZXIncyBzdGF0ZSBpcworICogbm90IGNo YW5nZWQgaGVyZS4gIEFsc28sIG5ld2JhdGNoJ3MgbW9yZUxlZnQgYW5kIG1vcmVSaWdodCBtdXN0 IGJlIHZhbGlkOworICogdGhleSBhcmUgdXBkYXRlZCBhcyBhcHByb3ByaWF0ZS4gIEFsbCBvdGhl ciBmaWVsZHMgb2YgbmV3YmF0Y2ggYXJlCiAgKiBpbml0aWFsaXplZCBmcm9tIHNjcmF0Y2ggaGVy ZS4KICAqCiAgKiBXZSBzY2FuIHRoZSBjdXJyZW50IHBhZ2Ugc3RhcnRpbmcgYXQgb2ZmbnVtIGFu ZCBtb3ZpbmcgaW4gdGhlIGluZGljYXRlZAotICogZGlyZWN0aW9uLiAgQWxsIGl0ZW1zIG1hdGNo aW5nIHRoZSBzY2FuIGtleXMgYXJlIGxvYWRlZCBpbnRvIGN1cnJQb3MuaXRlbXMuCisgKiBkaXJl Y3Rpb24uICBBbGwgaXRlbXMgbWF0Y2hpbmcgdGhlIHNjYW4ga2V5cyBhcmUgc2F2ZWQgaW4gbmV3 YmF0Y2guaXRlbXMuCiAgKiBtb3JlTGVmdCBvciBtb3JlUmlnaHQgKGFzIGFwcHJvcHJpYXRlKSBp cyBjbGVhcmVkIGlmIF9idF9jaGVja2tleXMgcmVwb3J0cwogICogdGhhdCB0aGVyZSBjYW4gYmUg bm8gbW9yZSBtYXRjaGluZyB0dXBsZXMgaW4gdGhlIGN1cnJlbnQgc2NhbiBkaXJlY3Rpb24KICAq IChjb3VsZCBqdXN0IGJlIGZvciB0aGUgY3VycmVudCBwcmltaXRpdmUgaW5kZXggc2NhbiB3aGVu IHNjYW4gaGFzIGFycmF5cykuCkBAIC0xMzEsMTEgKzEzMSwxMiBAQCBzdGF0aWMgYm9vbCBfYnRf dmVyaWZ5X2tleXNfd2l0aF9hcnJheWtleXMoSW5kZXhTY2FuRGVzYyBzY2FuKTsKICAqIFJldHVy bnMgdHJ1ZSBpZiBhbnkgbWF0Y2hpbmcgaXRlbXMgZm91bmQgb24gdGhlIHBhZ2UsIGZhbHNlIGlm IG5vbmUuCiAgKi8KIGJvb2wKLV9idF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5E aXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtLAotCQkJIGJvb2wgZmlyc3RwYWdlKQor X2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggbmV3YmF0Y2gs IFNjYW5EaXJlY3Rpb24gZGlyLAorCQkJIE9mZnNldE51bWJlciBvZmZudW0sIGJvb2wgZmlyc3Rw YWdlKQogewogCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247CiAJQlRTY2FuT3Bh cXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOworCUJUQmF0Y2hEYXRhICpidG5l d2JhdGNoID0gQlRCYXRjaEdldERhdGEoc2NhbiwgbmV3YmF0Y2gpOwogCVBhZ2UJCXBhZ2U7CiAJ QlRQYWdlT3BhcXVlIG9wYXF1ZTsKIAlPZmZzZXROdW1iZXIgbWlub2ZmOwpAQCAtMTQ0LDIzICsx NDUsMjAgQEAgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBk aXIsIE9mZnNldE51bWJlciBvZmZudW0sCiAJYm9vbAkJYXJyYXlLZXlzLAogCQkJCWlnbm9yZV9r aWxsZWRfdHVwbGVzID0gc2Nhbi0+aWdub3JlX2tpbGxlZF90dXBsZXM7CiAJaW50CQkJaXRlbUlu ZGV4LAorCQkJCXR1cGxlT2Zmc2V0ID0gMCwKIAkJCQlpbmRuYXR0czsKIAogCS8qIHNhdmUgdGhl IHBhZ2UvYnVmZmVyIGJsb2NrIG51bWJlciwgYWxvbmcgd2l0aCBpdHMgc2libGluZyBsaW5rcyAq LwotCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKHNvLT5jdXJyUG9zLmJ1Zik7CisJcGFnZSA9IEJ1ZmZl ckdldFBhZ2UoYnRuZXdiYXRjaC0+YnVmKTsKIAlvcGFxdWUgPSBCVFBhZ2VHZXRPcGFxdWUocGFn ZSk7Ci0Jc28tPmN1cnJQb3MuY3VyclBhZ2UgPSBCdWZmZXJHZXRCbG9ja051bWJlcihzby0+Y3Vy clBvcy5idWYpOwotCXNvLT5jdXJyUG9zLnByZXZQYWdlID0gb3BhcXVlLT5idHBvX3ByZXY7Ci0J c28tPmN1cnJQb3MubmV4dFBhZ2UgPSBvcGFxdWUtPmJ0cG9fbmV4dDsKLQkvKiBkZWxheSBzZXR0 aW5nIHNvLT5jdXJyUG9zLmxzbiB1bnRpbCBfYnRfZHJvcF9sb2NrX2FuZF9tYXliZV9waW4gKi8K LQlwc3RhdGUuZGlyID0gc28tPmN1cnJQb3MuZGlyID0gZGlyOwotCXNvLT5jdXJyUG9zLm5leHRU dXBsZU9mZnNldCA9IDA7CisJcHN0YXRlLmN1cnJwYWdlID0gYnRuZXdiYXRjaC0+Y3VyclBhZ2Ug PSBCdWZmZXJHZXRCbG9ja051bWJlcihidG5ld2JhdGNoLT5idWYpOworCWJ0bmV3YmF0Y2gtPnBy ZXZQYWdlID0gb3BhcXVlLT5idHBvX3ByZXY7CisJYnRuZXdiYXRjaC0+bmV4dFBhZ2UgPSBvcGFx dWUtPmJ0cG9fbmV4dDsKKwlwc3RhdGUuZGlyID0gbmV3YmF0Y2gtPmRpciA9IGRpcjsKIAogCS8q IGVpdGhlciBtb3JlUmlnaHQgb3IgbW9yZUxlZnQgc2hvdWxkIGJlIHNldCBub3cgKG1heSBiZSB1 bnNldCBsYXRlcikgKi8KLQlBc3NlcnQoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpID8gc28t PmN1cnJQb3MubW9yZVJpZ2h0IDoKLQkJICAgc28tPmN1cnJQb3MubW9yZUxlZnQpOworCUFzc2Vy dChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikgPyBidG5ld2JhdGNoLT5tb3JlUmlnaHQgOiBi dG5ld2JhdGNoLT5tb3JlTGVmdCk7CiAJQXNzZXJ0KCFQX0lHTk9SRShvcGFxdWUpKTsKLQlBc3Nl cnQoQlRTY2FuUG9zSXNQaW5uZWQoc28tPmN1cnJQb3MpKTsKIAlBc3NlcnQoIXNvLT5uZWVkUHJp bVNjYW4pOwogCiAJLyogaW5pdGlhbGl6ZSBsb2NhbCB2YXJpYWJsZXMgKi8KQEAgLTE4OCwxNCAr MTg2LDE0IEBAIF9idF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24g ZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtLAogCXsKIAkJLyogYWxsb3cgbmV4dC9wcmV2IHBhZ2Ug dG8gYmUgcmVhZCBieSBvdGhlciB3b3JrZXIgd2l0aG91dCBkZWxheSAqLwogCQlpZiAoU2NhbkRp cmVjdGlvbklzRm9yd2FyZChkaXIpKQotCQkJX2J0X3BhcmFsbGVsX3JlbGVhc2Uoc2Nhbiwgc28t PmN1cnJQb3MubmV4dFBhZ2UsCi0JCQkJCQkJCSBzby0+Y3VyclBvcy5jdXJyUGFnZSk7CisJCQlf YnRfcGFyYWxsZWxfcmVsZWFzZShzY2FuLCBidG5ld2JhdGNoLT5uZXh0UGFnZSwKKwkJCQkJCQkJ IGJ0bmV3YmF0Y2gtPmN1cnJQYWdlKTsKIAkJZWxzZQotCQkJX2J0X3BhcmFsbGVsX3JlbGVhc2Uo c2Nhbiwgc28tPmN1cnJQb3MucHJldlBhZ2UsCi0JCQkJCQkJCSBzby0+Y3VyclBvcy5jdXJyUGFn ZSk7CisJCQlfYnRfcGFyYWxsZWxfcmVsZWFzZShzY2FuLCBidG5ld2JhdGNoLT5wcmV2UGFnZSwK KwkJCQkJCQkJIGJ0bmV3YmF0Y2gtPmN1cnJQYWdlKTsKIAl9CiAKLQlQcmVkaWNhdGVMb2NrUGFn ZShyZWwsIHNvLT5jdXJyUG9zLmN1cnJQYWdlLCBzY2FuLT54c19zbmFwc2hvdCk7CisJUHJlZGlj YXRlTG9ja1BhZ2UocmVsLCBwc3RhdGUuY3VycnBhZ2UsIHNjYW4tPnhzX3NuYXBzaG90KTsKIAog CWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCiAJewpAQCAtMjEyLDExICsyMTAsMTEg QEAgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIE9m ZnNldE51bWJlciBvZmZudW0sCiAJCQkJCSFfYnRfc2NhbmJlaGluZF9jaGVja2tleXMoc2Nhbiwg ZGlyLCBwc3RhdGUuZmluYWx0dXApKQogCQkJCXsKIAkJCQkJLyogU2NoZWR1bGUgYW5vdGhlciBw cmltaXRpdmUgaW5kZXggc2NhbiBhZnRlciBhbGwgKi8KLQkJCQkJc28tPmN1cnJQb3MubW9yZVJp Z2h0ID0gZmFsc2U7CisJCQkJCWJ0bmV3YmF0Y2gtPm1vcmVSaWdodCA9IGZhbHNlOwogCQkJCQlz by0+bmVlZFByaW1TY2FuID0gdHJ1ZTsKIAkJCQkJaWYgKHNjYW4tPnBhcmFsbGVsX3NjYW4pCiAJ CQkJCQlfYnRfcGFyYWxsZWxfcHJpbXNjYW5fc2NoZWR1bGUoc2NhbiwKLQkJCQkJCQkJCQkJCQkg ICBzby0+Y3VyclBvcy5jdXJyUGFnZSk7CisJCQkJCQkJCQkJCQkJICAgYnRuZXdiYXRjaC0+Y3Vy clBhZ2UpOwogCQkJCQlyZXR1cm4gZmFsc2U7CiAJCQkJfQogCQkJfQpAQCAtMjgwLDI2ICsyNzgs MjYgQEAgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIs IE9mZnNldE51bWJlciBvZmZudW0sCiAJCQkJaWYgKCFCVHJlZVR1cGxlSXNQb3N0aW5nKGl0dXAp KQogCQkJCXsKIAkJCQkJLyogUmVtZW1iZXIgaXQgKi8KLQkJCQkJX2J0X3NhdmVpdGVtKHNvLCBp dGVtSW5kZXgsIG9mZm51bSwgaXR1cCk7CisJCQkJCV9idF9zYXZlaXRlbShuZXdiYXRjaCwgaXRl bUluZGV4LCBvZmZudW0sIGl0dXAsICZ0dXBsZU9mZnNldCk7CiAJCQkJCWl0ZW1JbmRleCsrOwog CQkJCX0KIAkJCQllbHNlCiAJCQkJewotCQkJCQlpbnQJCQl0dXBsZU9mZnNldDsKKwkJCQkJaW50 CQkJYmFzZU9mZnNldDsKIAogCQkJCQkvKiBTZXQgdXAgcG9zdGluZyBsaXN0IHN0YXRlIChhbmQg cmVtZW1iZXIgZmlyc3QgVElEKSAqLwotCQkJCQl0dXBsZU9mZnNldCA9Ci0JCQkJCQlfYnRfc2V0 dXBwb3N0aW5naXRlbXMoc28sIGl0ZW1JbmRleCwgb2ZmbnVtLAorCQkJCQliYXNlT2Zmc2V0ID0K KwkJCQkJCV9idF9zZXR1cHBvc3RpbmdpdGVtcyhuZXdiYXRjaCwgaXRlbUluZGV4LCBvZmZudW0s CiAJCQkJCQkJCQkJCSAgQlRyZWVUdXBsZUdldFBvc3RpbmdOKGl0dXAsIDApLAotCQkJCQkJCQkJ CQkgIGl0dXApOworCQkJCQkJCQkJCQkgIGl0dXAsICZ0dXBsZU9mZnNldCk7CiAJCQkJCWl0ZW1J bmRleCsrOwogCiAJCQkJCS8qIFJlbWVtYmVyIGFsbCBsYXRlciBUSURzIChtdXN0IGJlIGF0IGxl YXN0IG9uZSkgKi8KIAkJCQkJZm9yIChpbnQgaSA9IDE7IGkgPCBCVHJlZVR1cGxlR2V0TlBvc3Rp bmcoaXR1cCk7IGkrKykKIAkJCQkJewotCQkJCQkJX2J0X3NhdmVwb3N0aW5naXRlbShzbywgaXRl bUluZGV4LCBvZmZudW0sCisJCQkJCQlfYnRfc2F2ZXBvc3RpbmdpdGVtKG5ld2JhdGNoLCBpdGVt SW5kZXgsIG9mZm51bSwKIAkJCQkJCQkJCQkJQlRyZWVUdXBsZUdldFBvc3RpbmdOKGl0dXAsIGkp LAotCQkJCQkJCQkJCQl0dXBsZU9mZnNldCk7CisJCQkJCQkJCQkJCWJhc2VPZmZzZXQpOwogCQkJ CQkJaXRlbUluZGV4Kys7CiAJCQkJCX0KIAkJCQl9CkBAIC0zMzksMTIgKzMzNywxMSBAQCBfYnRf cmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVt YmVyIG9mZm51bSwKIAkJfQogCiAJCWlmICghcHN0YXRlLmNvbnRpbnVlc2NhbikKLQkJCXNvLT5j dXJyUG9zLm1vcmVSaWdodCA9IGZhbHNlOworCQkJYnRuZXdiYXRjaC0+bW9yZVJpZ2h0ID0gZmFs c2U7CiAKIAkJQXNzZXJ0KGl0ZW1JbmRleCA8PSBNYXhUSURzUGVyQlRyZWVQYWdlKTsKLQkJc28t PmN1cnJQb3MuZmlyc3RJdGVtID0gMDsKLQkJc28tPmN1cnJQb3MubGFzdEl0ZW0gPSBpdGVtSW5k ZXggLSAxOwotCQlzby0+Y3VyclBvcy5pdGVtSW5kZXggPSAwOworCQluZXdiYXRjaC0+Zmlyc3RJ dGVtID0gMDsKKwkJbmV3YmF0Y2gtPmxhc3RJdGVtID0gaXRlbUluZGV4IC0gMTsKIAl9CiAJZWxz ZQogCXsKQEAgLTM2MSwxMSArMzU4LDExIEBAIF9idF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNj YW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtLAogCQkJCQkhX2J0X3Nj YW5iZWhpbmRfY2hlY2trZXlzKHNjYW4sIGRpciwgcHN0YXRlLmZpbmFsdHVwKSkKIAkJCQl7CiAJ CQkJCS8qIFNjaGVkdWxlIGFub3RoZXIgcHJpbWl0aXZlIGluZGV4IHNjYW4gYWZ0ZXIgYWxsICov Ci0JCQkJCXNvLT5jdXJyUG9zLm1vcmVMZWZ0ID0gZmFsc2U7CisJCQkJCWJ0bmV3YmF0Y2gtPm1v cmVMZWZ0ID0gZmFsc2U7CiAJCQkJCXNvLT5uZWVkUHJpbVNjYW4gPSB0cnVlOwogCQkJCQlpZiAo c2Nhbi0+cGFyYWxsZWxfc2NhbikKIAkJCQkJCV9idF9wYXJhbGxlbF9wcmltc2Nhbl9zY2hlZHVs ZShzY2FuLAotCQkJCQkJCQkJCQkJCSAgIHNvLT5jdXJyUG9zLmN1cnJQYWdlKTsKKwkJCQkJCQkJ CQkJCQkgICBidG5ld2JhdGNoLT5jdXJyUGFnZSk7CiAJCQkJCXJldHVybiBmYWxzZTsKIAkJCQl9 CiAJCQl9CkBAIC00NjYsMjcgKzQ2MywyNyBAQCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBz Y2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKIAkJCQl7CiAJCQkJ CS8qIFJlbWVtYmVyIGl0ICovCiAJCQkJCWl0ZW1JbmRleC0tOwotCQkJCQlfYnRfc2F2ZWl0ZW0o c28sIGl0ZW1JbmRleCwgb2ZmbnVtLCBpdHVwKTsKKwkJCQkJX2J0X3NhdmVpdGVtKG5ld2JhdGNo LCBpdGVtSW5kZXgsIG9mZm51bSwgaXR1cCwgJnR1cGxlT2Zmc2V0KTsKIAkJCQl9CiAJCQkJZWxz ZQogCQkJCXsKIAkJCQkJdWludDE2CQluaXRlbXMgPSBCVHJlZVR1cGxlR2V0TlBvc3RpbmcoaXR1 cCk7Ci0JCQkJCWludAkJCXR1cGxlT2Zmc2V0OworCQkJCQlpbnQJCQliYXNlT2Zmc2V0OwogCiAJ CQkJCS8qIFNldCB1cCBwb3N0aW5nIGxpc3Qgc3RhdGUgKGFuZCByZW1lbWJlciBsYXN0IFRJRCkg Ki8KIAkJCQkJaXRlbUluZGV4LS07Ci0JCQkJCXR1cGxlT2Zmc2V0ID0KLQkJCQkJCV9idF9zZXR1 cHBvc3RpbmdpdGVtcyhzbywgaXRlbUluZGV4LCBvZmZudW0sCisJCQkJCWJhc2VPZmZzZXQgPQor CQkJCQkJX2J0X3NldHVwcG9zdGluZ2l0ZW1zKG5ld2JhdGNoLCBpdGVtSW5kZXgsIG9mZm51bSwK IAkJCQkJCQkJCQkJICBCVHJlZVR1cGxlR2V0UG9zdGluZ04oaXR1cCwgbml0ZW1zIC0gMSksCi0J CQkJCQkJCQkJCSAgaXR1cCk7CisJCQkJCQkJCQkJCSAgaXR1cCwgJnR1cGxlT2Zmc2V0KTsKIAog CQkJCQkvKiBSZW1lbWJlciBhbGwgcHJpb3IgVElEcyAobXVzdCBiZSBhdCBsZWFzdCBvbmUpICov CiAJCQkJCWZvciAoaW50IGkgPSBuaXRlbXMgLSAyOyBpID49IDA7IGktLSkKIAkJCQkJewogCQkJ CQkJaXRlbUluZGV4LS07Ci0JCQkJCQlfYnRfc2F2ZXBvc3RpbmdpdGVtKHNvLCBpdGVtSW5kZXgs IG9mZm51bSwKKwkJCQkJCV9idF9zYXZlcG9zdGluZ2l0ZW0obmV3YmF0Y2gsIGl0ZW1JbmRleCwg b2ZmbnVtLAogCQkJCQkJCQkJCQlCVHJlZVR1cGxlR2V0UG9zdGluZ04oaXR1cCwgaSksCi0JCQkJ CQkJCQkJCXR1cGxlT2Zmc2V0KTsKKwkJCQkJCQkJCQkJYmFzZU9mZnNldCk7CiAJCQkJCX0KIAkJ CQl9CiAJCQl9CkBAIC01MDIsMTIgKzQ5OSwxMSBAQCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVz YyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKIAkJICogYmUg Zm91bmQgdGhlcmUKIAkJICovCiAJCWlmICghcHN0YXRlLmNvbnRpbnVlc2NhbikKLQkJCXNvLT5j dXJyUG9zLm1vcmVMZWZ0ID0gZmFsc2U7CisJCQlidG5ld2JhdGNoLT5tb3JlTGVmdCA9IGZhbHNl OwogCiAJCUFzc2VydChpdGVtSW5kZXggPj0gMCk7Ci0JCXNvLT5jdXJyUG9zLmZpcnN0SXRlbSA9 IGl0ZW1JbmRleDsKLQkJc28tPmN1cnJQb3MubGFzdEl0ZW0gPSBNYXhUSURzUGVyQlRyZWVQYWdl IC0gMTsKLQkJc28tPmN1cnJQb3MuaXRlbUluZGV4ID0gTWF4VElEc1BlckJUcmVlUGFnZSAtIDE7 CisJCW5ld2JhdGNoLT5maXJzdEl0ZW0gPSBpdGVtSW5kZXg7CisJCW5ld2JhdGNoLT5sYXN0SXRl bSA9IE1heFRJRHNQZXJCVHJlZVBhZ2UgLSAxOwogCX0KIAogCS8qCkBAIC01MjQsNyArNTIwLDcg QEAgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIE9m ZnNldE51bWJlciBvZmZudW0sCiAJICovCiAJQXNzZXJ0KCFwc3RhdGUuZm9yY2Vub25yZXF1aXJl ZCk7CiAKLQlyZXR1cm4gKHNvLT5jdXJyUG9zLmZpcnN0SXRlbSA8PSBzby0+Y3VyclBvcy5sYXN0 SXRlbSk7CisJcmV0dXJuIChuZXdiYXRjaC0+Zmlyc3RJdGVtIDw9IG5ld2JhdGNoLT5sYXN0SXRl bSk7CiB9CiAKIC8qCkBAIC0xMDI3LDkwICsxMDIzLDkxIEBAIF9idF9vcHBvZGlyX2NoZWNra2V5 cyhJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLAogCXJldHVybiB0cnVlOwog fQogCi0vKiBTYXZlIGFuIGluZGV4IGl0ZW0gaW50byBzby0+Y3VyclBvcy5pdGVtc1tpdGVtSW5k ZXhdICovCisvKiBTYXZlIGFuIGluZGV4IGl0ZW0gaW50byBuZXdiYXRjaC5pdGVtc1tpdGVtSW5k ZXhdICovCiBzdGF0aWMgdm9pZAotX2J0X3NhdmVpdGVtKEJUU2Nhbk9wYXF1ZSBzbywgaW50IGl0 ZW1JbmRleCwKLQkJCSBPZmZzZXROdW1iZXIgb2ZmbnVtLCBJbmRleFR1cGxlIGl0dXApCitfYnRf c2F2ZWl0ZW0oSW5kZXhTY2FuQmF0Y2ggbmV3YmF0Y2gsIGludCBpdGVtSW5kZXgsIE9mZnNldE51 bWJlciBvZmZudW0sCisJCQkgSW5kZXhUdXBsZSBpdHVwLCBpbnQgKnR1cGxlT2Zmc2V0KQogewot CUJUU2NhblBvc0l0ZW0gKmN1cnJJdGVtID0gJnNvLT5jdXJyUG9zLml0ZW1zW2l0ZW1JbmRleF07 Ci0KIAlBc3NlcnQoIUJUcmVlVHVwbGVJc1Bpdm90KGl0dXApICYmICFCVHJlZVR1cGxlSXNQb3N0 aW5nKGl0dXApKTsKIAotCWN1cnJJdGVtLT5oZWFwVGlkID0gaXR1cC0+dF90aWQ7Ci0JY3Vyckl0 ZW0tPmluZGV4T2Zmc2V0ID0gb2ZmbnVtOwotCWlmIChzby0+Y3VyclR1cGxlcykKKwluZXdiYXRj aC0+aXRlbXNbaXRlbUluZGV4XS50YWJsZVRpZCA9IGl0dXAtPnRfdGlkOworCW5ld2JhdGNoLT5p dGVtc1tpdGVtSW5kZXhdLmluZGV4T2Zmc2V0ID0gb2ZmbnVtOworCisJaWYgKG5ld2JhdGNoLT5j dXJyVHVwbGVzKQogCXsKIAkJU2l6ZQkJaXR1cHN6ID0gSW5kZXhUdXBsZVNpemUoaXR1cCk7CiAK LQkJY3Vyckl0ZW0tPnR1cGxlT2Zmc2V0ID0gc28tPmN1cnJQb3MubmV4dFR1cGxlT2Zmc2V0Owot CQltZW1jcHkoc28tPmN1cnJUdXBsZXMgKyBzby0+Y3VyclBvcy5uZXh0VHVwbGVPZmZzZXQsIGl0 dXAsIGl0dXBzeik7Ci0JCXNvLT5jdXJyUG9zLm5leHRUdXBsZU9mZnNldCArPSBNQVhBTElHTihp dHVwc3opOworCQluZXdiYXRjaC0+aXRlbXNbaXRlbUluZGV4XS50dXBsZU9mZnNldCA9ICp0dXBs ZU9mZnNldDsKKwkJbWVtY3B5KG5ld2JhdGNoLT5jdXJyVHVwbGVzICsgKnR1cGxlT2Zmc2V0LCBp dHVwLCBpdHVwc3opOworCQkqdHVwbGVPZmZzZXQgKz0gTUFYQUxJR04oaXR1cHN6KTsKIAl9CiB9 CiAKIC8qCiAgKiBTZXR1cCBzdGF0ZSB0byBzYXZlIFRJRHMvaXRlbXMgZnJvbSBhIHNpbmdsZSBw b3N0aW5nIGxpc3QgdHVwbGUuCiAgKgotICogU2F2ZXMgYW4gaW5kZXggaXRlbSBpbnRvIHNvLT5j dXJyUG9zLml0ZW1zW2l0ZW1JbmRleF0gZm9yIFRJRCB0aGF0IGlzCi0gKiByZXR1cm5lZCB0byBz Y2FuIGZpcnN0LiAgU2Vjb25kIG9yIHN1YnNlcXVlbnQgVElEcyBmb3IgcG9zdGluZyBsaXN0IHNo b3VsZAotICogYmUgc2F2ZWQgYnkgY2FsbGluZyBfYnRfc2F2ZXBvc3RpbmdpdGVtKCkuCisgKiBT YXZlcyBhbiBpbmRleCBpdGVtIGludG8gbmV3YmF0Y2guaXRlbXNbaXRlbUluZGV4XSBmb3IgVElE IHRoYXQgaXMgcmV0dXJuZWQKKyAqIHRvIHNjYW4gZmlyc3QuICBTZWNvbmQgb3Igc3Vic2VxdWVu dCBUSURzIGZvciBwb3N0aW5nIGxpc3Qgc2hvdWxkIGJlIHNhdmVkCisgKiBieSBjYWxsaW5nIF9i dF9zYXZlcG9zdGluZ2l0ZW0oKS4KICAqCi0gKiBSZXR1cm5zIGFuIG9mZnNldCBpbnRvIHR1cGxl IHN0b3JhZ2Ugc3BhY2UgdGhhdCBtYWluIHR1cGxlIGlzIHN0b3JlZCBhdCBpZgotICogbmVlZGVk LgorICogUmV0dXJucyBiYXNlT2Zmc2V0LCBhbiBvZmZzZXQgaW50byB0dXBsZSBzdG9yYWdlIHNw YWNlIHRoYXQgbWFpbiB0dXBsZSBpcworICogc3RvcmVkIGF0IGlmIG5lZWRlZC4KICAqLwogc3Rh dGljIGludAotX2J0X3NldHVwcG9zdGluZ2l0ZW1zKEJUU2Nhbk9wYXF1ZSBzbywgaW50IGl0ZW1J bmRleCwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKLQkJCQkJICBjb25zdCBJdGVtUG9pbnRlckRhdGEg KmhlYXBUaWQsIEluZGV4VHVwbGUgaXR1cCkKK19idF9zZXR1cHBvc3RpbmdpdGVtcyhJbmRleFNj YW5CYXRjaCBuZXdiYXRjaCwgaW50IGl0ZW1JbmRleCwKKwkJCQkJICBPZmZzZXROdW1iZXIgb2Zm bnVtLCBjb25zdCBJdGVtUG9pbnRlckRhdGEgKnRhYmxlVGlkLAorCQkJCQkgIEluZGV4VHVwbGUg aXR1cCwgaW50ICp0dXBsZU9mZnNldCkKIHsKLQlCVFNjYW5Qb3NJdGVtICpjdXJySXRlbSA9ICZz by0+Y3VyclBvcy5pdGVtc1tpdGVtSW5kZXhdOworCUJhdGNoTWF0Y2hpbmdJdGVtICppdGVtID0g Jm5ld2JhdGNoLT5pdGVtc1tpdGVtSW5kZXhdOwogCiAJQXNzZXJ0KEJUcmVlVHVwbGVJc1Bvc3Rp bmcoaXR1cCkpOwogCi0JY3Vyckl0ZW0tPmhlYXBUaWQgPSAqaGVhcFRpZDsKLQljdXJySXRlbS0+ aW5kZXhPZmZzZXQgPSBvZmZudW07Ci0JaWYgKHNvLT5jdXJyVHVwbGVzKQorCWl0ZW0tPnRhYmxl VGlkID0gKnRhYmxlVGlkOworCWl0ZW0tPmluZGV4T2Zmc2V0ID0gb2ZmbnVtOworCisJaWYgKG5l d2JhdGNoLT5jdXJyVHVwbGVzKQogCXsKIAkJLyogU2F2ZSBiYXNlIEluZGV4VHVwbGUgKHRydW5j YXRlIHBvc3RpbmcgbGlzdCkgKi8KIAkJSW5kZXhUdXBsZQliYXNlOwogCQlTaXplCQlpdHVwc3og PSBCVHJlZVR1cGxlR2V0UG9zdGluZ09mZnNldChpdHVwKTsKIAogCQlpdHVwc3ogPSBNQVhBTElH TihpdHVwc3opOwotCQljdXJySXRlbS0+dHVwbGVPZmZzZXQgPSBzby0+Y3VyclBvcy5uZXh0VHVw bGVPZmZzZXQ7Ci0JCWJhc2UgPSAoSW5kZXhUdXBsZSkgKHNvLT5jdXJyVHVwbGVzICsgc28tPmN1 cnJQb3MubmV4dFR1cGxlT2Zmc2V0KTsKKwkJaXRlbS0+dHVwbGVPZmZzZXQgPSAqdHVwbGVPZmZz ZXQ7CisJCWJhc2UgPSAoSW5kZXhUdXBsZSkgKG5ld2JhdGNoLT5jdXJyVHVwbGVzICsgKnR1cGxl T2Zmc2V0KTsKIAkJbWVtY3B5KGJhc2UsIGl0dXAsIGl0dXBzeik7CiAJCS8qIERlZmVuc2l2ZWx5 IHJlZHVjZSB3b3JrIGFyZWEgaW5kZXggdHVwbGUgaGVhZGVyIHNpemUgKi8KIAkJYmFzZS0+dF9p bmZvICY9IH5JTkRFWF9TSVpFX01BU0s7CiAJCWJhc2UtPnRfaW5mbyB8PSBpdHVwc3o7Ci0JCXNv LT5jdXJyUG9zLm5leHRUdXBsZU9mZnNldCArPSBpdHVwc3o7CisJCSp0dXBsZU9mZnNldCArPSBp dHVwc3o7CiAKLQkJcmV0dXJuIGN1cnJJdGVtLT50dXBsZU9mZnNldDsKKwkJcmV0dXJuIGl0ZW0t PnR1cGxlT2Zmc2V0OwogCX0KIAogCXJldHVybiAwOwogfQogCiAvKgotICogU2F2ZSBhbiBpbmRl eCBpdGVtIGludG8gc28tPmN1cnJQb3MuaXRlbXNbaXRlbUluZGV4XSBmb3IgY3VycmVudCBwb3N0 aW5nCisgKiBTYXZlIGFuIGluZGV4IGl0ZW0gaW50byBuZXdiYXRjaC5pdGVtc1tpdGVtSW5kZXhd IGZvciBjdXJyZW50IHBvc3RpbmcKICAqIHR1cGxlLgogICoKICAqIEFzc3VtZXMgdGhhdCBfYnRf c2V0dXBwb3N0aW5naXRlbXMoKSBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZCBmb3IgY3VycmVudAot ICogcG9zdGluZyBsaXN0IHR1cGxlLiAgQ2FsbGVyIHBhc3NlcyBpdHMgcmV0dXJuIHZhbHVlIGFz IHR1cGxlT2Zmc2V0LgorICogcG9zdGluZyBsaXN0IHR1cGxlLiAgQ2FsbGVyIHBhc3NlcyBpdHMg cmV0dXJuIHZhbHVlIGFzIGJhc2VPZmZzZXQuCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZAotX2J0 X3NhdmVwb3N0aW5naXRlbShCVFNjYW5PcGFxdWUgc28sIGludCBpdGVtSW5kZXgsIE9mZnNldE51 bWJlciBvZmZudW0sCi0JCQkJCUl0ZW1Qb2ludGVyIGhlYXBUaWQsIGludCB0dXBsZU9mZnNldCkK K19idF9zYXZlcG9zdGluZ2l0ZW0oSW5kZXhTY2FuQmF0Y2ggbmV3YmF0Y2gsIGludCBpdGVtSW5k ZXgsIE9mZnNldE51bWJlciBvZmZudW0sCisJCQkJCUl0ZW1Qb2ludGVyIHRhYmxlVGlkLCBpbnQg YmFzZU9mZnNldCkKIHsKLQlCVFNjYW5Qb3NJdGVtICpjdXJySXRlbSA9ICZzby0+Y3VyclBvcy5p dGVtc1tpdGVtSW5kZXhdOworCUJhdGNoTWF0Y2hpbmdJdGVtICppdGVtID0gJm5ld2JhdGNoLT5p dGVtc1tpdGVtSW5kZXhdOwogCi0JY3Vyckl0ZW0tPmhlYXBUaWQgPSAqaGVhcFRpZDsKLQljdXJy SXRlbS0+aW5kZXhPZmZzZXQgPSBvZmZudW07CisJaXRlbS0+dGFibGVUaWQgPSAqdGFibGVUaWQ7 CisJaXRlbS0+aW5kZXhPZmZzZXQgPSBvZmZudW07CiAKIAkvKgogCSAqIEhhdmUgaW5kZXgtb25s eSBzY2FucyByZXR1cm4gdGhlIHNhbWUgYmFzZSBJbmRleFR1cGxlIGZvciBldmVyeSBUSUQKIAkg KiB0aGF0IG9yaWdpbmF0ZXMgZnJvbSB0aGUgc2FtZSBwb3N0aW5nIGxpc3QKIAkgKi8KLQlpZiAo c28tPmN1cnJUdXBsZXMpCi0JCWN1cnJJdGVtLT50dXBsZU9mZnNldCA9IHR1cGxlT2Zmc2V0Owor CWlmIChuZXdiYXRjaC0+Y3VyclR1cGxlcykKKwkJaXRlbS0+dHVwbGVPZmZzZXQgPSBiYXNlT2Zm c2V0OwogfQogCiAjZGVmaW5lIExPT0tfQUhFQURfUkVRVUlSRURfUkVDSEVDS1MgCTMKQEAgLTI4 MjEsMTQgKzI4MTgsMTUgQEAgbmV3X3ByaW1fc2NhbjoKIAkgKgogCSAqIE5vdGU6IFdlIG1ha2Ug YSBzb2Z0IGFzc3VtcHRpb24gdGhhdCB0aGUgY3VycmVudCBzY2FuIGRpcmVjdGlvbiB3aWxsCiAJ ICogYWxzbyBiZSB1c2VkIHdpdGhpbiBfYnRfbmV4dCwgd2hlbiBpdCBpcyBhc2tlZCB0byBzdGVw IG9mZiB0aGlzIHBhZ2UuCi0JICogSXQgaXMgdXAgdG8gX2J0X25leHQgdG8gY2FuY2VsIHRoaXMg c2NoZWR1bGVkIHByaW1pdGl2ZSBpbmRleCBzY2FuCi0JICogd2hlbmV2ZXIgaXQgc3RlcHMgdG8g YSBwYWdlIGluIHRoZSBkaXJlY3Rpb24gb3Bwb3NpdGUgY3VyclBvcy5kaXIuCisJICogVGhlIHNj YW4gZGlyZWN0aW9uIG1pZ2h0IGJlIHJldmVyc2VkIGR1cmluZyB0aGUgbmV4dCBhbWdldGJhdGNo IGNhbGwsCisJICogYnV0IG5vdCBiZWZvcmUgYSBjYWxsIHRvIGJ0cG9zcmVzZXQgdGhhdCByZXNl dHMgdGhlIGFycmF5IGtleXMgdG8gdGhlCisJICogZmlyc3QgcG9zaXRpb25zL2VsZW1lbnRzIHVz ZWQgd2hlbiBzY2FubmluZyBpbiB0aGlzIG90aGVyIGRpcmVjdGlvbi4KIAkgKi8KIAlwc3RhdGUt PmNvbnRpbnVlc2NhbiA9IGZhbHNlOwkvKiBUZWxsIF9idF9yZWFkcGFnZSB3ZSdyZSBkb25lLi4u ICovCiAJc28tPm5lZWRQcmltU2NhbiA9IHRydWU7CS8qIC4uLmJ1dCBjYWxsIF9idF9maXJzdCBh Z2FpbiAqLwogCiAJaWYgKHNjYW4tPnBhcmFsbGVsX3NjYW4pCi0JCV9idF9wYXJhbGxlbF9wcmlt c2Nhbl9zY2hlZHVsZShzY2FuLCBzby0+Y3VyclBvcy5jdXJyUGFnZSk7CisJCV9idF9wYXJhbGxl bF9wcmltc2Nhbl9zY2hlZHVsZShzY2FuLCBwc3RhdGUtPmN1cnJwYWdlKTsKIAogCS8qIENhbGxl cidzIHR1cGxlIGRvZXNuJ3QgbWF0Y2ggdGhlIG5ldyBxdWFsICovCiAJcmV0dXJuIGZhbHNlOwpA QCAtMjg0MSw5ICsyODM5LDggQEAgZW5kX3RvcGxldmVsX3NjYW46CiAJICogVGhpcyBlbmRzIHRo ZSBlbnRpcmUgdG9wLWxldmVsIHNjYW4gaW4gdGhlIGN1cnJlbnQgc2NhbiBkaXJlY3Rpb24uCiAJ ICoKIAkgKiBOb3RlOiBUaGUgc2NhbidzIGFycmF5cyAoaW5jbHVkaW5nIGFueSBub24tcmVxdWly ZWQgYXJyYXlzKSBhcmUgbm93IGluCi0JICogdGhlaXIgZmluYWwgcG9zaXRpb25zIGZvciB0aGUg Y3VycmVudCBzY2FuIGRpcmVjdGlvbi4gIElmIHRoZSBzY2FuCi0JICogZGlyZWN0aW9uIGhhcHBl bnMgdG8gY2hhbmdlLCB0aGVuIHRoZSBhcnJheXMgd2lsbCBhbHJlYWR5IGJlIGluIHRoZWlyCi0J ICogZmlyc3QgcG9zaXRpb25zIGZvciB3aGF0IHdpbGwgdGhlbiBiZSB0aGUgY3VycmVudCBzY2Fu IGRpcmVjdGlvbi4KKwkgKiB0aGVpciBmaW5hbCBwb3NpdGlvbnMgZm9yIHRoZSBjdXJyZW50IHNj YW4gZGlyZWN0aW9uLiAgVGhpcyBpcyBqdXN0CisJICogZGVmZW5zaXZlLgogCSAqLwogCXBzdGF0 ZS0+Y29udGludWVzY2FuID0gZmFsc2U7CS8qIFRlbGwgX2J0X3JlYWRwYWdlIHdlJ3JlIGRvbmUu Li4gKi8KIAlzby0+bmVlZFByaW1TY2FuID0gZmFsc2U7CS8qIC4uLmFuZCBkb24ndCBjYWxsIF9i dF9maXJzdCBhZ2FpbiAqLwpAQCAtMjkxMCwxNyArMjkwNyw5IEBAIF9idF9hZHZhbmNlX2FycmF5 X2tleXNfaW5jcmVtZW50KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsCiAJ LyoKIAkgKiBUaGUgYXJyYXkga2V5cyBhcmUgbm93IGV4aGF1c3RlZC4KIAkgKgotCSAqIFJlc3Rv cmUgdGhlIGFycmF5IGtleXMgdG8gdGhlIHN0YXRlIHRoZXkgd2VyZSBpbiBpbW1lZGlhdGVseSBi ZWZvcmUgd2UKLQkgKiB3ZXJlIGNhbGxlZC4gIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBhcnJheXMg b25seSBldmVyIHJhdGNoZXQgaW4gdGhlCi0JICogY3VycmVudCBzY2FuIGRpcmVjdGlvbi4KLQkg KgotCSAqIFdpdGhvdXQgdGhpcywgc2NhbnMgY291bGQgb3Zlcmxvb2sgbWF0Y2hpbmcgdHVwbGVz IHdoZW4gdGhlIHNjYW4KLQkgKiBkaXJlY3Rpb24gZ2V0cyByZXZlcnNlZCBqdXN0IGJlZm9yZSBi dGdldHR1cGxlIHJ1bnMgb3V0IG9mIGl0ZW1zIHRvCi0JICogcmV0dXJuLCBidXQganVzdCBhZnRl ciBfYnRfcmVhZHBhZ2UgcHJlcGFyZXMgYWxsIHRoZSBpdGVtcyBmcm9tIHRoZQotCSAqIHNjYW4n cyBmaW5hbCBwYWdlIGluIHNvLT5jdXJyUG9zLiAgV2hlbiB3ZSdyZSBvbiB0aGUgZmluYWwgcGFn ZSBpdCBpcwotCSAqIHR5cGljYWwgZm9yIHNvLT5jdXJyUG9zIHRvIGdldCBpbnZhbGlkYXRlZCBv bmNlIGJ0Z2V0dHVwbGUgZmluYWxseQotCSAqIHJldHVybnMgZmFsc2UsIHdoaWNoJ2xsIGVmZmVj dGl2ZWx5IGludmFsaWRhdGUgdGhlIHNjYW4ncyBhcnJheSBrZXlzLgotCSAqIFRoYXQgaGFzbid0 IGhhcHBlbmVkIHlldCwgdGhvdWdoIC0tIGFuZCBpbiBnZW5lcmFsIGl0IG1heSBuZXZlciBoYXBw ZW4uCisJICogRGVmZW5zaXZlbHkgcmVzdG9yZSB0aGUgYXJyYXkga2V5cyB0byB0aGUgcG9zaXRp b25zIHRoZXkgd2VyZSBpbgorCSAqIGltbWVkaWF0ZWx5IGJlZm9yZSB3ZSB3ZXJlIGNhbGxlZCAo aS5lLiB0byB0aGVpciBmaW5hbCBwb3NpdGlvbnMgZm9yCisJICogdGhlIGN1cnJlbnQgc2NhbiBk aXJlY3Rpb24pLgogCSAqLwogCV9idF9zdGFydF9hcnJheV9rZXlzKHNjYW4sIC1kaXIpOwogCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jIGIvc3JjL2JhY2tl bmQvYWNjZXNzL25idHJlZS9uYnRyZWUuYwppbmRleCA2ZDg3MGU0ZWIuLjc3YWYwOWY0YyAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWUuYworKysgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jCkBAIC0xNjEsMTEgKzE2MSwxMyBAQCBidGhhbmRs ZXIoUEdfRlVOQ1RJT05fQVJHUykKIAkJLmFtYWRqdXN0bWVtYmVycyA9IGJ0YWRqdXN0bWVtYmVy cywKIAkJLmFtYmVnaW5zY2FuID0gYnRiZWdpbnNjYW4sCiAJCS5hbXJlc2NhbiA9IGJ0cmVzY2Fu LAotCQkuYW1nZXR0dXBsZSA9IGJ0Z2V0dHVwbGUsCisJCS5hbWdldHR1cGxlID0gTlVMTCwKKwkJ LmFtZ2V0YmF0Y2ggPSBidGdldGJhdGNoLAorCQkuYW1raWxsaXRlbXNiYXRjaCA9IGJ0a2lsbGl0 ZW1zYmF0Y2gsCisJCS5hbXVuZ3VhcmRiYXRjaCA9IGJ0dW5ndWFyZGJhdGNoLAogCQkuYW1nZXRi aXRtYXAgPSBidGdldGJpdG1hcCwKIAkJLmFtZW5kc2NhbiA9IGJ0ZW5kc2NhbiwKLQkJLmFtbWFy a3BvcyA9IGJ0bWFya3BvcywKLQkJLmFtcmVzdHJwb3MgPSBidHJlc3RycG9zLAorCQkuYW1wb3Ny ZXNldCA9IGJ0cG9zcmVzZXQsCiAJCS5hbWVzdGltYXRlcGFyYWxsZWxzY2FuID0gYnRlc3RpbWF0 ZXBhcmFsbGVsc2NhbiwKIAkJLmFtaW5pdHBhcmFsbGVsc2NhbiA9IGJ0aW5pdHBhcmFsbGVsc2Nh biwKIAkJLmFtcGFyYWxsZWxyZXNjYW4gPSBidHBhcmFsbGVscmVzY2FuLApAQCAtMjI0LDEzICsy MjYsMTMgQEAgYnRpbnNlcnQoUmVsYXRpb24gcmVsLCBEYXR1bSAqdmFsdWVzLCBib29sICppc251 bGwsCiB9CiAKIC8qCi0gKglidGdldHR1cGxlKCkgLS0gR2V0IHRoZSBuZXh0IHR1cGxlIGluIHRo ZSBzY2FuLgorICoJYnRnZXRiYXRjaCgpIC0tIEdldCB0aGUgZmlyc3Qgb3IgbmV4dCBiYXRjaCBv ZiB0dXBsZXMgaW4gdGhlIHNjYW4KICAqLwotYm9vbAotYnRnZXR0dXBsZShJbmRleFNjYW5EZXNj IHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQorSW5kZXhTY2FuQmF0Y2gKK2J0Z2V0YmF0Y2goSW5k ZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBwcmlvcmJhdGNoLCBTY2FuRGlyZWN0aW9u IGRpcikKIHsKIAlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7 Ci0JYm9vbAkJcmVzOworCUluZGV4U2NhbkJhdGNoIGJhdGNoID0gcHJpb3JiYXRjaDsKIAogCUFz c2VydChzY2FuLT5oZWFwUmVsYXRpb24gIT0gTlVMTCk7CiAKQEAgLTI0Myw0NSArMjQ1LDIwIEBA IGJ0Z2V0dHVwbGUoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAkJLyoK IAkJICogSWYgd2UndmUgYWxyZWFkeSBpbml0aWFsaXplZCB0aGlzIHNjYW4sIHdlIGNhbiBqdXN0 IGFkdmFuY2UgaXQgaW4KIAkJICogdGhlIGFwcHJvcHJpYXRlIGRpcmVjdGlvbi4gIElmIHdlIGhh dmVuJ3QgZG9uZSBzbyB5ZXQsIHdlIGNhbGwKLQkJICogX2J0X2ZpcnN0KCkgdG8gZ2V0IHRoZSBm aXJzdCBpdGVtIGluIHRoZSBzY2FuLgorCQkgKiBfYnRfZmlyc3QoKSB0byBnZXQgdGhlIGZpcnN0 IGJhdGNoIGluIHRoZSBzY2FuLgogCQkgKi8KLQkJaWYgKCFCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5j dXJyUG9zKSkKLQkJCXJlcyA9IF9idF9maXJzdChzY2FuLCBkaXIpOworCQlpZiAoYmF0Y2ggPT0g TlVMTCkKKwkJCWJhdGNoID0gX2J0X2ZpcnN0KHNjYW4sIGRpcik7CiAJCWVsc2UKLQkJewotCQkJ LyoKLQkJCSAqIENoZWNrIHRvIHNlZSBpZiB3ZSBzaG91bGQga2lsbCB0aGUgcHJldmlvdXNseS1m ZXRjaGVkIHR1cGxlLgotCQkJICovCi0JCQlpZiAoc2Nhbi0+a2lsbF9wcmlvcl90dXBsZSkKLQkJ CXsKLQkJCQkvKgotCQkJCSAqIFllcywgcmVtZW1iZXIgaXQgZm9yIGxhdGVyLiAoV2UnbGwgZGVh bCB3aXRoIGFsbCBzdWNoCi0JCQkJICogdHVwbGVzIGF0IG9uY2UgcmlnaHQgYmVmb3JlIGxlYXZp bmcgdGhlIGluZGV4IHBhZ2UuKSAgVGhlCi0JCQkJICogdGVzdCBmb3IgbnVtS2lsbGVkIG92ZXJy dW4gaXMgbm90IGp1c3QgcGFyYW5vaWE6IGlmIHRoZQotCQkJCSAqIGNhbGxlciByZXZlcnNlcyBk aXJlY3Rpb24gaW4gdGhlIGluZGV4c2NhbiB0aGVuIHRoZSBzYW1lCi0JCQkJICogaXRlbSBtaWdo dCBnZXQgZW50ZXJlZCBtdWx0aXBsZSB0aW1lcy4gSXQncyBub3Qgd29ydGgKLQkJCQkgKiB0cnlp bmcgdG8gb3B0aW1pemUgdGhhdCwgc28gd2UgZG9uJ3QgZGV0ZWN0IGl0LCBidXQgaW5zdGVhZAot CQkJCSAqIGp1c3QgZm9yZ2V0IGFueSBleGNlc3MgZW50cmllcy4KLQkJCQkgKi8KLQkJCQlpZiAo c28tPmtpbGxlZEl0ZW1zID09IE5VTEwpCi0JCQkJCXNvLT5raWxsZWRJdGVtcyA9IHBhbGxvY19h cnJheShpbnQsIE1heFRJRHNQZXJCVHJlZVBhZ2UpOwotCQkJCWlmIChzby0+bnVtS2lsbGVkIDwg TWF4VElEc1BlckJUcmVlUGFnZSkKLQkJCQkJc28tPmtpbGxlZEl0ZW1zW3NvLT5udW1LaWxsZWQr K10gPSBzby0+Y3VyclBvcy5pdGVtSW5kZXg7Ci0JCQl9CisJCQliYXRjaCA9IF9idF9uZXh0KHNj YW4sIGRpciwgYmF0Y2gpOwogCi0JCQkvKgotCQkJICogTm93IGNvbnRpbnVlIHRoZSBzY2FuLgot CQkJICovCi0JCQlyZXMgPSBfYnRfbmV4dChzY2FuLCBkaXIpOwotCQl9Ci0KLQkJLyogSWYgd2Ug aGF2ZSBhIHR1cGxlLCByZXR1cm4gaXQgLi4uICovCi0JCWlmIChyZXMpCisJCS8qIElmIHdlIGhh dmUgYSBiYXRjaCwgcmV0dXJuIGl0IC4uLiAqLworCQlpZiAoYmF0Y2gpCiAJCQlicmVhazsKIAkJ LyogLi4uIG90aGVyd2lzZSBzZWUgaWYgd2UgbmVlZCBhbm90aGVyIHByaW1pdGl2ZSBpbmRleCBz Y2FuICovCiAJfSB3aGlsZSAoc28tPm51bUFycmF5S2V5cyAmJiBfYnRfc3RhcnRfcHJpbV9zY2Fu KHNjYW4pKTsKIAotCXJldHVybiByZXM7CisJcmV0dXJuIGJhdGNoOwogfQogCiAvKgpAQCAtMjkx LDM4ICsyNjgsNDMgQEAgaW50NjQKIGJ0Z2V0Yml0bWFwKEluZGV4U2NhbkRlc2Mgc2NhbiwgVElE Qml0bWFwICp0Ym0pCiB7CiAJQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+ b3BhcXVlOworCUluZGV4U2NhbkJhdGNoIGJhdGNoOwogCWludDY0CQludGlkcyA9IDA7Ci0JSXRl bVBvaW50ZXIgaGVhcFRpZDsKKwlJdGVtUG9pbnRlciB0YWJsZVRpZDsKIAogCUFzc2VydChzY2Fu LT5oZWFwUmVsYXRpb24gPT0gTlVMTCk7CiAKIAkvKiBFYWNoIGxvb3AgaXRlcmF0aW9uIHBlcmZv cm1zIGFub3RoZXIgcHJpbWl0aXZlIGluZGV4IHNjYW4gKi8KIAlkbwogCXsKLQkJLyogRmV0Y2gg dGhlIGZpcnN0IHBhZ2UgJiB0dXBsZSAqLwotCQlpZiAoX2J0X2ZpcnN0KHNjYW4sIEZvcndhcmRT Y2FuRGlyZWN0aW9uKSkKKwkJLyogRmV0Y2ggdGhlIGZpcnN0IGJhdGNoICovCisJCWlmICgoYmF0 Y2ggPSBfYnRfZmlyc3Qoc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24pKSkKIAkJewotCQkJLyog U2F2ZSB0dXBsZSBJRCwgYW5kIGNvbnRpbnVlIHNjYW5uaW5nICovCi0JCQloZWFwVGlkID0gJnNj YW4tPnhzX2hlYXB0aWQ7Ci0JCQl0Ym1fYWRkX3R1cGxlcyh0Ym0sIGhlYXBUaWQsIDEsIGZhbHNl KTsKKwkJCWludAkJCWl0ZW1JbmRleCA9IDA7CisKKwkJCS8qIFNhdmUgZmlyc3QgdHVwbGUncyBU SUQgKi8KKwkJCXRhYmxlVGlkID0gJmJhdGNoLT5pdGVtc1tpdGVtSW5kZXhdLnRhYmxlVGlkOwor CQkJdGJtX2FkZF90dXBsZXModGJtLCB0YWJsZVRpZCwgMSwgZmFsc2UpOwogCQkJbnRpZHMrKzsK IAogCQkJZm9yICg7OykKIAkJCXsKLQkJCQkvKgotCQkJCSAqIEFkdmFuY2UgdG8gbmV4dCB0dXBs ZSB3aXRoaW4gcGFnZS4gIFRoaXMgaXMgdGhlIHNhbWUgYXMgdGhlCi0JCQkJICogZWFzeSBjYXNl IGluIF9idF9uZXh0KCkuCi0JCQkJICovCi0JCQkJaWYgKCsrc28tPmN1cnJQb3MuaXRlbUluZGV4 ID4gc28tPmN1cnJQb3MubGFzdEl0ZW0pCisJCQkJLyogQWR2YW5jZSB0byBuZXh0IFRJRCB3aXRo aW4gcGFnZS1zaXplZCBiYXRjaCAqLworCQkJCWlmICgrK2l0ZW1JbmRleCA+IGJhdGNoLT5sYXN0 SXRlbSkKIAkJCQl7Ci0JCQkJCS8qIGxldCBfYnRfbmV4dCBkbyB0aGUgaGVhdnkgbGlmdGluZyAq LwotCQkJCQlpZiAoIV9idF9uZXh0KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uKSkKKwkJCQkJ LyoKKwkJCQkJICogX2J0X25leHQgcmVsZWFzZXMgdGhlIHByaW9yIGJhdGNoIGZvciBiaXRtYXAg Y2FsbGVycworCQkJCQkgKiBiZWZvcmUgYWxsb2NhdGluZyB0aGUgbmV4dCBvbmUsIHNvIG9ubHkg b25lIGJhdGNoIGlzCisJCQkJCSAqIGV2ZXIgdXNlZCBhdCBhIHRpbWUKKwkJCQkJICovCisJCQkJ CWl0ZW1JbmRleCA9IDA7CisJCQkJCWJhdGNoID0gX2J0X25leHQoc2NhbiwgRm9yd2FyZFNjYW5E aXJlY3Rpb24sIGJhdGNoKTsKKwkJCQkJaWYgKCFiYXRjaCkKIAkJCQkJCWJyZWFrOwogCQkJCX0K IAotCQkJCS8qIFNhdmUgdHVwbGUgSUQsIGFuZCBjb250aW51ZSBzY2FubmluZyAqLwotCQkJCWhl YXBUaWQgPSAmc28tPmN1cnJQb3MuaXRlbXNbc28tPmN1cnJQb3MuaXRlbUluZGV4XS5oZWFwVGlk OwotCQkJCXRibV9hZGRfdHVwbGVzKHRibSwgaGVhcFRpZCwgMSwgZmFsc2UpOworCQkJCXRhYmxl VGlkID0gJmJhdGNoLT5pdGVtc1tpdGVtSW5kZXhdLnRhYmxlVGlkOworCQkJCXRibV9hZGRfdHVw bGVzKHRibSwgdGFibGVUaWQsIDEsIGZhbHNlKTsKIAkJCQludGlkcysrOwogCQkJfQogCQl9CkBA IC0zNDksOCArMzMxLDYgQEAgYnRiZWdpbnNjYW4oUmVsYXRpb24gcmVsLCBpbnQgbmtleXMsIGlu dCBub3JkZXJieXMpCiAKIAkvKiBhbGxvY2F0ZSBwcml2YXRlIHdvcmtzcGFjZSAqLwogCXNvID0g cGFsbG9jX29iamVjdChCVFNjYW5PcGFxdWVEYXRhKTsKLQlCVFNjYW5Qb3NJbnZhbGlkYXRlKHNv LT5jdXJyUG9zKTsKLQlCVFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5tYXJrUG9zKTsKIAlpZiAoc2Nh bi0+bnVtYmVyT2ZLZXlzID4gMCkKIAkJc28tPmtleURhdGEgPSAoU2NhbktleSkgcGFsbG9jKHNj YW4tPm51bWJlck9mS2V5cyAqIHNpemVvZihTY2FuS2V5RGF0YSkpOwogCWVsc2UKQEAgLTM2NCwx OSArMzQ0LDExIEBAIGJ0YmVnaW5zY2FuKFJlbGF0aW9uIHJlbCwgaW50IG5rZXlzLCBpbnQgbm9y ZGVyYnlzKQogCXNvLT5vcmRlclByb2NzID0gTlVMTDsKIAlzby0+YXJyYXlDb250ZXh0ID0gTlVM TDsKIAotCXNvLT5raWxsZWRJdGVtcyA9IE5VTEw7CQkvKiB1bnRpbCBuZWVkZWQgKi8KLQlzby0+ bnVtS2lsbGVkID0gMDsKLQotCS8qCi0JICogV2UgZG9uJ3Qga25vdyB5ZXQgd2hldGhlciB0aGUg c2NhbiB3aWxsIGJlIGluZGV4LW9ubHksIHNvIHdlIGRvIG5vdAotCSAqIGFsbG9jYXRlIHRoZSB0 dXBsZSB3b3Jrc3BhY2UgYXJyYXlzIHVudGlsIGJ0cmVzY2FuLiAgSG93ZXZlciwgd2Ugc2V0IHVw Ci0JICogc2Nhbi0+eHNfaXR1cGRlc2Mgd2hldGhlciB3ZSdsbCBuZWVkIGl0IG9yIG5vdCwgc2lu Y2UgdGhhdCdzIHNvIGNoZWFwLgotCSAqLwotCXNvLT5jdXJyVHVwbGVzID0gc28tPm1hcmtUdXBs ZXMgPSBOVUxMOwotCi0Jc2Nhbi0+eHNfaXR1cGRlc2MgPSBSZWxhdGlvbkdldERlc2NyKHJlbCk7 Ci0KIAlzY2FuLT5vcGFxdWUgPSBzbzsKKwlzY2FuLT54c19pdHVwZGVzYyA9IFJlbGF0aW9uR2V0 RGVzY3IocmVsKTsKKwlzY2FuLT5tYXhpdGVtc2JhdGNoID0gTWF4VElEc1BlckJUcmVlUGFnZTsK KwlzY2FuLT5iYXRjaF9pbmRleF9vcGFxdWVfc2l6ZSA9IE1BWEFMSUdOKHNpemVvZihCVEJhdGNo RGF0YSkpOworCXNjYW4tPmJhdGNoX3R1cGxlc193b3Jrc3BhY2UgPSBCTENLU1o7CiAKIAlyZXR1 cm4gc2NhbjsKIH0KQEAgLTM5MCw2NCArMzYyLDE4NSBAQCBidHJlc2NhbihJbmRleFNjYW5EZXNj IHNjYW4sIFNjYW5LZXkgc2NhbmtleSwgaW50IG5zY2Fua2V5cywKIHsKIAlCVFNjYW5PcGFxdWUg c28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CiAKLQkvKiB3ZSBhcmVuJ3QgaG9sZGlu ZyBhbnkgcmVhZCBsb2NrcywgYnV0IGdvdHRhIGRyb3AgdGhlIHBpbnMgKi8KLQlpZiAoQlRTY2Fu UG9zSXNWYWxpZChzby0+Y3VyclBvcykpCi0JewotCQkvKiBCZWZvcmUgbGVhdmluZyBjdXJyZW50 IHBhZ2UsIGRlYWwgd2l0aCBhbnkga2lsbGVkIGl0ZW1zICovCi0JCWlmIChzby0+bnVtS2lsbGVk ID4gMCkKLQkJCV9idF9raWxsaXRlbXMoc2Nhbik7Ci0JCUJUU2NhblBvc1VucGluSWZQaW5uZWQo c28tPmN1cnJQb3MpOwotCQlCVFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5jdXJyUG9zKTsKLQl9Ci0K LQkvKgotCSAqIFdlIHByZWZlciB0byBlYWdlcmx5IGRyb3AgbGVhZiBwYWdlIHBpbnMgYmVmb3Jl IGJ0Z2V0dHVwbGUgcmV0dXJucy4KLQkgKiBUaGlzIGF2b2lkcyBtYWtpbmcgVkFDVVVNIHdhaXQg dG8gYWNxdWlyZSBhIGNsZWFudXAgbG9jayBvbiB0aGUgcGFnZS4KLQkgKgotCSAqIFdlIGNhbm5v dCBzYWZlbHkgZHJvcCBsZWFmIHBhZ2UgcGlucyBkdXJpbmcgaW5kZXgtb25seSBzY2FucyBkdWUg dG8gYQotCSAqIHJhY2UgY29uZGl0aW9uIGludm9sdmluZyBWQUNVVU0gc2V0dGluZyBwYWdlcyBh bGwtdmlzaWJsZSBpbiB0aGUgVk0uCi0JICogSXQncyBhbHNvIHVuc2FmZSBmb3IgcGxhaW4gaW5k ZXggc2NhbnMgdGhhdCB1c2UgYSBub24tTVZDQyBzbmFwc2hvdC4KLQkgKgotCSAqIEFsc28gb3B0 IG91dCBvZiBkcm9wcGluZyBsZWFmIHBhZ2UgcGlucyBlYWdlcmx5IGR1cmluZyBiaXRtYXAgc2Nh bnMuCi0JICogUGlucyBjYW5ub3QgYmUgaGVsZCBmb3IgbW9yZSB0aGFuIGFuIGluc3RhbnQgZHVy aW5nIGJpdG1hcCBzY2FucyBlaXRoZXIKLQkgKiB3YXksIHNvIHdlIG1pZ2h0IGFzIHdlbGwgYXZv aWQgd2FzdGluZyBjeWNsZXMgb24gYWNxdWlyaW5nIHBhZ2UgTFNOcy4KLQkgKgotCSAqIFNlZSBu YnRyZWUvUkVBRE1FIHNlY3Rpb24gb24gbWFraW5nIGNvbmN1cnJlbnQgVElEIHJlY3ljbGluZyBz YWZlLgotCSAqCi0JICogTm90ZTogc28tPmRyb3BQaW4gc2hvdWxkIG5ldmVyIGNoYW5nZSBhY3Jv c3MgcmVzY2Fucy4KLQkgKi8KLQlzby0+ZHJvcFBpbiA9ICghc2Nhbi0+eHNfd2FudF9pdHVwICYm Ci0JCQkJICAgSXNNVkNDTGlrZVNuYXBzaG90KHNjYW4tPnhzX3NuYXBzaG90KSAmJgotCQkJCSAg IHNjYW4tPmhlYXBSZWxhdGlvbiAhPSBOVUxMKTsKLQotCXNvLT5tYXJrSXRlbUluZGV4ID0gLTE7 Ci0Jc28tPm5lZWRQcmltU2NhbiA9IGZhbHNlOwotCXNvLT5zY2FuQmVoaW5kID0gZmFsc2U7Ci0J c28tPm9wcG9zaXRlRGlyQ2hlY2sgPSBmYWxzZTsKLQlCVFNjYW5Qb3NVbnBpbklmUGlubmVkKHNv LT5tYXJrUG9zKTsKLQlCVFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5tYXJrUG9zKTsKLQotCS8qCi0J ICogQWxsb2NhdGUgdHVwbGUgd29ya3NwYWNlIGFycmF5cywgaWYgbmVlZGVkIGZvciBhbiBpbmRl eC1vbmx5IHNjYW4gYW5kCi0JICogbm90IGFscmVhZHkgZG9uZSBpbiBhIHByZXZpb3VzIHJlc2Nh biBjYWxsLiAgVG8gc2F2ZSBvbiBwYWxsb2MKLQkgKiBvdmVyaGVhZCwgYm90aCB3b3Jrc3BhY2Vz IGFyZSBhbGxvY2F0ZWQgYXMgb25lIHBhbGxvYyBibG9jazsgb25seSB0aGlzCi0JICogZnVuY3Rp b24gYW5kIGJ0ZW5kc2NhbiBrbm93IHRoYXQuCi0JICovCi0JaWYgKHNjYW4tPnhzX3dhbnRfaXR1 cCAmJiBzby0+Y3VyclR1cGxlcyA9PSBOVUxMKQotCXsKLQkJc28tPmN1cnJUdXBsZXMgPSAoY2hh ciAqKSBwYWxsb2MoQkxDS1NaICogMik7Ci0JCXNvLT5tYXJrVHVwbGVzID0gc28tPmN1cnJUdXBs ZXMgKyBCTENLU1o7Ci0JfQotCiAJLyoKIAkgKiBSZXNldCB0aGUgc2NhbiBrZXlzCiAJICovCiAJ aWYgKHNjYW5rZXkgJiYgc2Nhbi0+bnVtYmVyT2ZLZXlzID4gMCkKIAkJbWVtY3B5KHNjYW4tPmtl eURhdGEsIHNjYW5rZXksIHNjYW4tPm51bWJlck9mS2V5cyAqIHNpemVvZihTY2FuS2V5RGF0YSkp OworCXNvLT5uZWVkUHJpbVNjYW4gPSBmYWxzZTsKKwlzby0+c2NhbkJlaGluZCA9IGZhbHNlOwor CXNvLT5vcHBvc2l0ZURpckNoZWNrID0gZmFsc2U7CiAJc28tPm51bWJlck9mS2V5cyA9IDA7CQkv KiB1bnRpbCBfYnRfcHJlcHJvY2Vzc19rZXlzIHNldHMgaXQgKi8KIAlzby0+bnVtQXJyYXlLZXlz ID0gMDsJCS8qIGRpdHRvICovCiB9CiAKKy8qCisgKglidGtpbGxpdGVtc2JhdGNoKCkgLS0gTWFy ayBkZWFkIGl0ZW1zJyBpbmRleCB0dXBsZXMgTFBfREVBRAorICovCit2b2lkCitidGtpbGxpdGVt c2JhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCit7CisJUmVs YXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKKwlCVEJhdGNoRGF0YSAqYnRiYXRjaCA9 IEJUQmF0Y2hHZXREYXRhKHNjYW4sIGJhdGNoKTsKKwlQYWdlCQlwYWdlOworCUJUUGFnZU9wYXF1 ZSBvcGFxdWU7CisJT2Zmc2V0TnVtYmVyIG1pbm9mZjsKKwlPZmZzZXROdW1iZXIgbWF4b2ZmOwor CWJvb2wJCWtpbGxlZHNvbWV0aGluZyA9IGZhbHNlOworCUJ1ZmZlcgkJYnVmOworCVhMb2dSZWNQ dHIJbGF0ZXN0bHNuOworCisJLyogVGFibGUgQU0gc2hvdWxkIGhhdmUgYWxyZWFkeSByZWxlYXNl ZCBiYXRjaCBwYWdlJ3MgcGluIGJ5IG5vdyAqLworCUFzc2VydChiYXRjaC0+bnVtRGVhZCA+IDAp OworCisJYnVmID0gX2J0X2dldGJ1ZihyZWwsIGJ0YmF0Y2gtPmN1cnJQYWdlLCBCVF9SRUFEKTsK KworCWxhdGVzdGxzbiA9IEJ1ZmZlckdldExTTkF0b21pYyhidWYpOworCUFzc2VydChiYXRjaC0+ bHNuIDw9IGxhdGVzdGxzbik7CisJaWYgKGJhdGNoLT5sc24gIT0gbGF0ZXN0bHNuKQorCXsKKwkJ LyogTW9kaWZpZWQsIGdpdmUgdXAgb24gaGludGluZyAqLworCQlfYnRfcmVsYnVmKHJlbCwgYnVm KTsKKwkJcmV0dXJuOworCX0KKworCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGJ1Zik7CisJb3BhcXVl ID0gQlRQYWdlR2V0T3BhcXVlKHBhZ2UpOworCW1pbm9mZiA9IFBfRklSU1REQVRBS0VZKG9wYXF1 ZSk7CisJbWF4b2ZmID0gUGFnZUdldE1heE9mZnNldE51bWJlcihwYWdlKTsKKworCS8qIEl0ZXJh dGUgdGhyb3VnaCBiYXRjaC0+ZGVhZEl0ZW1zW10gaW4gbGVhZiBwYWdlIG9yZGVyICovCisJZm9y IChpbnQgaSA9IDA7IGkgPCBiYXRjaC0+bnVtRGVhZDsgaSsrKQorCXsKKwkJaW50CQkJaXRlbUlu ZGV4ID0gYmF0Y2gtPmRlYWRJdGVtc1tpXTsKKwkJQmF0Y2hNYXRjaGluZ0l0ZW0gKmtpdGVtID0g JmJhdGNoLT5pdGVtc1tpdGVtSW5kZXhdOworCQlPZmZzZXROdW1iZXIgb2ZmbnVtID0ga2l0ZW0t PmluZGV4T2Zmc2V0OworCisJCUFzc2VydChpdGVtSW5kZXggPj0gYmF0Y2gtPmZpcnN0SXRlbSAm JiBpdGVtSW5kZXggPD0gYmF0Y2gtPmxhc3RJdGVtKTsKKwkJQXNzZXJ0KGkgPT0gMCB8fAorCQkJ ICAgb2ZmbnVtID49IGJhdGNoLT5pdGVtc1tiYXRjaC0+ZGVhZEl0ZW1zW2kgLSAxXV0uaW5kZXhP ZmZzZXQpOworCisJCWlmIChvZmZudW0gPCBtaW5vZmYpCisJCQljb250aW51ZTsJCQkvKiBwdXJl IHBhcmFub2lhICovCisJCXdoaWxlIChvZmZudW0gPD0gbWF4b2ZmKQorCQl7CisJCQlJdGVtSWQJ CWlpZCA9IFBhZ2VHZXRJdGVtSWQocGFnZSwgb2ZmbnVtKTsKKwkJCUluZGV4VHVwbGUJaXR1cGxl ID0gKEluZGV4VHVwbGUpIFBhZ2VHZXRJdGVtKHBhZ2UsIGlpZCk7CisJCQlib29sCQlraWxsdHVw bGUgPSBmYWxzZTsKKworCQkJaWYgKEJUcmVlVHVwbGVJc1Bvc3RpbmcoaXR1cGxlKSkKKwkJCXsK KwkJCQlpbnQJCQlwaSA9IGkgKyAxOworCQkJCWludAkJCW5wb3N0aW5nID0gQlRyZWVUdXBsZUdl dE5Qb3N0aW5nKGl0dXBsZSk7CisJCQkJaW50CQkJajsKKworCQkJCWZvciAoaiA9IDA7IGogPCBu cG9zdGluZzsgaisrKQorCQkJCXsKKwkJCQkJSXRlbVBvaW50ZXIgaXRlbSA9IEJUcmVlVHVwbGVH ZXRQb3N0aW5nTihpdHVwbGUsIGopOworCisJCQkJCWlmICghSXRlbVBvaW50ZXJFcXVhbHMoaXRl bSwgJmtpdGVtLT50YWJsZVRpZCkpCisJCQkJCQlicmVhazsJLyogb3V0IG9mIHBvc3RpbmcgbGlz dCBsb29wICovCisKKwkJCQkJQXNzZXJ0KGtpdGVtLT5pbmRleE9mZnNldCA9PSBvZmZudW0pOwor CisJCQkJCS8qCisJCQkJCSAqIFJlYWQtYWhlYWQgdG8gbGF0ZXIga2l0ZW1zIGhlcmUuCisJCQkJ CSAqCisJCQkJCSAqIFdlIHJlbHkgb24gdGhlIGFzc3VtcHRpb24gdGhhdCBub3QgYWR2YW5jaW5n IGtpdGVtIGhlcmUKKwkJCQkJICogd2lsbCBwcmV2ZW50IHVzIGZyb20gY29uc2lkZXJpbmcgdGhl IHBvc3RpbmcgbGlzdCB0dXBsZQorCQkJCQkgKiBmdWxseSBkZWFkIGJ5IG5vdCBtYXRjaGluZyBp dHMgbmV4dCBoZWFwIFRJRCBpbiBuZXh0CisJCQkJCSAqIGxvb3AgaXRlcmF0aW9uLgorCQkJCQkg KgorCQkJCQkgKiBJZiwgb24gdGhlIG90aGVyIGhhbmQsIHRoaXMgaXMgdGhlIGZpbmFsIGhlYXAg VElEIGluCisJCQkJCSAqIHRoZSBwb3N0aW5nIGxpc3QgdHVwbGUsIHRoZW4gdHVwbGUgZ2V0cyBr aWxsZWQKKwkJCQkJICogcmVnYXJkbGVzcyAoaS5lLiB3ZSBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUg dGhlIGxhc3QKKwkJCQkJICoga2l0ZW0gaXMgYWxzbyB0aGUgbGFzdCBoZWFwIFRJRCBpbiB0aGUg bGFzdCBpbmRleCB0dXBsZQorCQkJCQkgKiBjb3JyZWN0bHkgLS0gcG9zdGluZyB0dXBsZSBzdGls bCBnZXRzIGtpbGxlZCkuCisJCQkJCSAqLworCQkJCQlpZiAocGkgPCBiYXRjaC0+bnVtRGVhZCkK KwkJCQkJCWtpdGVtID0gJmJhdGNoLT5pdGVtc1tiYXRjaC0+ZGVhZEl0ZW1zW3BpKytdXTsKKwkJ CQl9CisKKwkJCQkvKgorCQkJCSAqIERvbid0IGJvdGhlciBhZHZhbmNpbmcgdGhlIG91dGVybW9z dCBsb29wJ3MgaW50IGl0ZXJhdG9yIHRvCisJCQkJICogYXZvaWQgcHJvY2Vzc2luZyBkZWFkIGl0 ZW1zIHRoYXQgcmVsYXRlIHRvIHRoZSBzYW1lCisJCQkJICogb2ZmbnVtL3Bvc3RpbmcgbGlzdCB0 dXBsZS4gIFRoaXMgbWljcm8tb3B0aW1pemF0aW9uIGhhcmRseQorCQkJCSAqIHNlZW1zIHdvcnRo IGl0LiAgKEZ1cnRoZXIgaXRlcmF0aW9ucyBvZiB0aGUgb3V0ZXJtb3N0IGxvb3AKKwkJCQkgKiB3 aWxsIGZhaWwgdG8gbWF0Y2ggb24gdGhpcyBzYW1lIHBvc3RpbmcgbGlzdCdzIGZpcnN0IGhlYXAK KwkJCQkgKiBUSUQgaW5zdGVhZCwgc28gd2UnbGwgYWR2YW5jZSB0byB0aGUgbmV4dCBvZmZudW0v aW5kZXgKKwkJCQkgKiB0dXBsZSBwcmV0dHkgcXVpY2tseS4pCisJCQkJICovCisJCQkJaWYgKGog PT0gbnBvc3RpbmcpCisJCQkJCWtpbGx0dXBsZSA9IHRydWU7CisJCQl9CisJCQllbHNlIGlmIChJ dGVtUG9pbnRlckVxdWFscygmaXR1cGxlLT50X3RpZCwgJmtpdGVtLT50YWJsZVRpZCkpCisJCQkJ a2lsbHR1cGxlID0gdHJ1ZTsKKworCQkJLyoKKwkJCSAqIE1hcmsgaW5kZXggaXRlbSBhcyBkZWFk LCBpZiBpdCBpc24ndCBhbHJlYWR5LiAgU2luY2UgdGhpcworCQkJICogaGFwcGVucyB3aGlsZSBo b2xkaW5nIGEgc2hhcmVkIGJ1ZmZlciBsb2NrLCBpdCdzIHBvc3NpYmxlIHRoYXQKKwkJCSAqIG11 bHRpcGxlIHByb2Nlc3NlcyBhdHRlbXB0IHRvIGRvIHRoaXMgc2ltdWx0YW5lb3VzbHksIGxlYWRp bmcKKwkJCSAqIHRvIG11bHRpcGxlIGZ1bGwtcGFnZSBpbWFnZXMgYmVpbmcgc2VudCB0byBXQUwg KGlmCisJCQkgKiB3YWxfbG9nX2hpbnRzIG9yIGRhdGEgY2hlY2tzdW1zIGFyZSBlbmFibGVkKSwg d2hpY2ggaXMKKwkJCSAqIHVuZGVzaXJhYmxlLgorCQkJICovCisJCQlpZiAoa2lsbHR1cGxlICYm ICFJdGVtSWRJc0RlYWQoaWlkKSkKKwkJCXsKKwkJCQlpZiAoIWtpbGxlZHNvbWV0aGluZykKKwkJ CQl7CisJCQkJCS8qCisJCQkJCSAqIFVzZSB0aGUgaGludCBiaXQgaW5mcmFzdHJ1Y3R1cmUgdG8g Y2hlY2sgaWYgd2UgY2FuCisJCQkJCSAqIHVwZGF0ZSB0aGUgcGFnZSB3aGlsZSBqdXN0IGhvbGRp bmcgYSBzaGFyZSBsb2NrLiBJZiB3ZQorCQkJCQkgKiBhcmUgbm90IGFsbG93ZWQsIHRoZXJlJ3Mg bm8gcG9pbnQgY29udGludWluZy4KKwkJCQkJICovCisJCQkJCWlmICghQnVmZmVyQmVnaW5TZXRI aW50Qml0cyhidWYpKQorCQkJCQkJZ290byB1bmxvY2tfcGFnZTsKKwkJCQl9CisKKwkJCQkvKiBm b3VuZCB0aGUgaXRlbS9hbGwgcG9zdGluZyBsaXN0IGl0ZW1zICovCisJCQkJSXRlbUlkTWFya0Rl YWQoaWlkKTsKKwkJCQlraWxsZWRzb21ldGhpbmcgPSB0cnVlOworCQkJCWJyZWFrOwkJCS8qIG91 dCBvZiBpbm5lciBzZWFyY2ggbG9vcCAqLworCQkJfQorCQkJb2ZmbnVtID0gT2Zmc2V0TnVtYmVy TmV4dChvZmZudW0pOworCQl9CisJfQorCisJLyoKKwkgKiBTaW5jZSB0aGlzIGNhbiBiZSByZWRv bmUgbGF0ZXIgaWYgbmVlZGVkLCBtYXJrIGFzIGRpcnR5IGhpbnQuCisJICoKKwkgKiBXaGVuZXZl ciB3ZSBtYXJrIGFueXRoaW5nIExQX0RFQUQsIHdlIGFsc28gc2V0IHRoZSBwYWdlJ3MKKwkgKiBC VFBfSEFTX0dBUkJBR0UgZmxhZywgd2hpY2ggaXMgbGlrZXdpc2UganVzdCBhIGhpbnQuICAoTm90 ZSB0aGF0IHdlCisJICogb25seSByZWx5IG9uIHRoZSBwYWdlLWxldmVsIGZsYWcgaW4gIWhlYXBr ZXlzcGFjZSBpbmRleGVzLikKKwkgKi8KKwlpZiAoa2lsbGVkc29tZXRoaW5nKQorCXsKKwkJb3Bh cXVlLT5idHBvX2ZsYWdzIHw9IEJUUF9IQVNfR0FSQkFHRTsKKwkJQnVmZmVyRmluaXNoU2V0SGlu dEJpdHMoYnVmLCB0cnVlLCB0cnVlKTsKKwl9CisKK3VubG9ja19wYWdlOgorCV9idF9yZWxidWYo cmVsLCBidWYpOworfQorCisvKgorICoJYnR1bmd1YXJkYmF0Y2goKSAtLSBEcm9wIGJhdGNoJ3Mg VElEIHJlY3ljbGluZyBpbnRlcmxvY2sgKGJ1ZmZlciBwaW4pCisgKgorICogQ2FsbGVkIGJ5IHRo ZSB0YWJsZSBBTSB3aGVuIGl0J3Mgc2FmZSB0byBkcm9wIHRoZSBidWZmZXIgcGluIGhlbGQgdG8K KyAqIHByZXZlbnQgY29uY3VycmVudCBUSUQgcmVjeWNsaW5nIGJ5IFZBQ1VVTS4KKyAqLwordm9p ZAorYnR1bmd1YXJkYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRj aCkKK3sKKwlCVEJhdGNoRGF0YSAqYnRiYXRjaCA9IEJUQmF0Y2hHZXREYXRhKHNjYW4sIGJhdGNo KTsKKworCS8qIFNob3VsZCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGlmZiAhYmF0Y2hJbW1lZGlh dGVVbmd1YXJkICovCisJQXNzZXJ0KCFzY2FuLT5iYXRjaEltbWVkaWF0ZVVuZ3VhcmQpOworCUFz c2VydChiYXRjaC0+aXNHdWFyZGVkKTsKKworCVJlbGVhc2VCdWZmZXIoYnRiYXRjaC0+YnVmKTsK K30KKwogLyoKICAqCWJ0ZW5kc2NhbigpIC0tIGNsb3NlIGRvd24gYSBzY2FuCiAgKi8KQEAgLTQ1 NiwxMTYgKzU0OSw2MyBAQCBidGVuZHNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuKQogewogCUJUU2Nh bk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKIAotCS8qIHdlIGFyZW4n dCBob2xkaW5nIGFueSByZWFkIGxvY2tzLCBidXQgZ290dGEgZHJvcCB0aGUgcGlucyAqLwotCWlm IChCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSkKLQl7Ci0JCS8qIEJlZm9yZSBsZWF2aW5n IGN1cnJlbnQgcGFnZSwgZGVhbCB3aXRoIGFueSBraWxsZWQgaXRlbXMgKi8KLQkJaWYgKHNvLT5u dW1LaWxsZWQgPiAwKQotCQkJX2J0X2tpbGxpdGVtcyhzY2FuKTsKLQkJQlRTY2FuUG9zVW5waW5J ZlBpbm5lZChzby0+Y3VyclBvcyk7Ci0JfQotCi0Jc28tPm1hcmtJdGVtSW5kZXggPSAtMTsKLQlC VFNjYW5Qb3NVbnBpbklmUGlubmVkKHNvLT5tYXJrUG9zKTsKLQotCS8qIE5vIG5lZWQgdG8gaW52 YWxpZGF0ZSBwb3NpdGlvbnMsIHRoZSBSQU0gaXMgYWJvdXQgdG8gYmUgZnJlZWQuICovCi0KIAkv KiBSZWxlYXNlIHN0b3JhZ2UgKi8KIAlpZiAoc28tPmtleURhdGEgIT0gTlVMTCkKIAkJcGZyZWUo c28tPmtleURhdGEpOwogCS8qIHNvLT5hcnJheUtleXMgYW5kIHNvLT5vcmRlclByb2NzIGFyZSBp biBhcnJheUNvbnRleHQgKi8KIAlpZiAoc28tPmFycmF5Q29udGV4dCAhPSBOVUxMKQogCQlNZW1v cnlDb250ZXh0RGVsZXRlKHNvLT5hcnJheUNvbnRleHQpOwotCWlmIChzby0+a2lsbGVkSXRlbXMg IT0gTlVMTCkKLQkJcGZyZWUoc28tPmtpbGxlZEl0ZW1zKTsKLQlpZiAoc28tPmN1cnJUdXBsZXMg IT0gTlVMTCkKLQkJcGZyZWUoc28tPmN1cnJUdXBsZXMpOwotCS8qIHNvLT5tYXJrVHVwbGVzIHNo b3VsZCBub3QgYmUgcGZyZWUnZCwgc2VlIGJ0cmVzY2FuICovCiAJcGZyZWUoc28pOwogfQogCiAv KgotICoJYnRtYXJrcG9zKCkgLS0gc2F2ZSBjdXJyZW50IHNjYW4gcG9zaXRpb24KKyAqCWJ0cG9z cmVzZXQoKSAtLSByZXNldCBhcnJheSBrZXkgc3RhdGUgZm9yIHNjYW4gcG9zaXRpb24gY2hhbmdl CisgKgorICogQ2FsbGVkIGJ5IHRoZSBjb3JlIHN5c3RlbSB3aGVuIHRoZSBzY2FuJ3MgbG9naWNh bCBwb3NpdGlvbiBpcyBhYm91dCB0bworICogY2hhbmdlIGluIGEgd2F5IHRoYXQgaW52YWxpZGF0 ZXMgb3VyIGFycmF5IGtleSBzdGF0ZS4gIFRoaXMgaGFwcGVucyB3aGVuCisgKiByZXN0b3Jpbmcg YSBtYXJrZWQgcG9zaXRpb24sIG9yIHdoZW4gdGhlIHNjYW4gY3Jvc3NlcyBhIGJhdGNoIGJvdW5k YXJ5CisgKiB3aGlsZSBtb3ZpbmcgaW4gdGhlIG9wcG9zaXRlIGRpcmVjdGlvbiB0byB0aGUgb25l IG9yaWdpbmFsbHkgdXNlZC4KKyAqCisgKiBGb3IgZGlyZWN0aW9uIGNoYW5nZXMsIHRoZSBjb3Jl IHN5c3RlbSB3aWxsIGhhdmUgYWxyZWFkeSBmbGlwcGVkIHRoZQorICogYmF0Y2gncyBkaXIgZmll bGQgYmVmb3JlIGNhbGxpbmcgaGVyZTsgd2UgdXNlIHRoaXMgdXBkYXRlZCBkaXJlY3Rpb24gd2hl bgorICogcmVzZXR0aW5nIG91ciBhcnJheSBrZXlzLiAgRm9yIG1hcmsgcmVzdG9yYXRpb24sIHRo ZSBiYXRjaCdzIGRpciB3aWxsCisgKiByZXRhaW4gaXRzIG9yaWdpbmFsIHZhbHVlIChmcm9tIHdo ZW4gYnRnZXRiYXRjaCByZXR1cm5lZCBpdCkuCiAgKi8KIHZvaWQKLWJ0bWFya3BvcyhJbmRleFNj YW5EZXNjIHNjYW4pCitidHBvc3Jlc2V0KEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0 Y2ggYmF0Y2gpCiB7CiAJQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3Bh cXVlOworCUJUQmF0Y2hEYXRhICpidGJhdGNoID0gQlRCYXRjaEdldERhdGEoc2NhbiwgYmF0Y2gp OwogCi0JLyogVGhlcmUgbWF5IGJlIGFuIG9sZCBtYXJrIHdpdGggYSBwaW4gKGJ1dCBubyBsb2Nr KS4gKi8KLQlCVFNjYW5Qb3NVbnBpbklmUGlubmVkKHNvLT5tYXJrUG9zKTsKKwlpZiAoIXNvLT5u dW1BcnJheUtleXMpCisJCXJldHVybjsKIAogCS8qCi0JICogSnVzdCByZWNvcmQgdGhlIGN1cnJl bnQgaXRlbUluZGV4LiAgSWYgd2UgbGF0ZXIgc3RlcCB0byBuZXh0IHBhZ2UKLQkgKiBiZWZvcmUg cmVsZWFzaW5nIHRoZSBtYXJrZWQgcG9zaXRpb24sIF9idF9zdGVwcGFnZSBtYWtlcyBhIGZ1bGwg Y29weSBvZgotCSAqIHRoZSBjdXJyUG9zIHN0cnVjdCBpbiBtYXJrUG9zLiAgSWYgKGFzIG9mdGVu IGhhcHBlbnMpIHRoZSBtYXJrIGlzIG1vdmVkCi0JICogYmVmb3JlIHdlIGxlYXZlIHRoZSBwYWdl LCB3ZSBkb24ndCBoYXZlIHRvIGRvIHRoYXQgd29yay4KKwkgKiBSZXNldCBhcnJheSBrZXlzIHRv IGluaXRpYWwgc3RhdGUgZm9yIHRoZSBiYXRjaCdzIHNjYW4gZGlyZWN0aW9uLiAgQWxzbworCSAq IGNsZWFyIG5lZWRQcmltU2NhbiBhbmQgcmVsYXRlZCBmbGFncy4gIFRoZXNlIHdlcmUgc2V0IGJh c2VkIG9uIHRoZSBzb2Z0CisJICogYXNzdW1wdGlvbiB0aGF0IHRoZSBzY2FuIHdvdWxkIGFsd2F5 cyBwcm9jZWVkIGluIHRoZSBzYW1lIGRpcmVjdGlvbi4KKwkgKgorCSAqIFRoZXNlIHN0ZXBzIHdv cmsgYXJvdW5kIHRoZSBzb2Z0IGFzc3VtcHRpb24gYmVpbmcgdmlvbGF0ZWQ6IHRoZXkgZm9yY2UK KwkgKiB0aGUgc2NhbiB0byBzdGVwIHRvIHRoZSBuZXh0L3ByZXZpb3VzIHBhZ2UsIG1ha2luZyB0 aGUgYXJyYXlzIHJlY292ZXIuCisJICogV2hlbiB3ZSBnbyB0byByZWFkIHRoYXQgcGFnZSwgX2J0 X3JlYWRwYWdlIHdpbGwgcmVsaWFibHkgZGV0ZXJtaW5lIGlmIGEKKwkgKiBwcmltaXRpdmUgc2Nh biByZWFsbHkgaXMgbmVlZGVkIGJhc2VkIG9uIHRoZSBwYWdlJ3MgdHVwbGVzLiAgSWYgdGhlcmUn cworCSAqIGEgcHJpbWl0aXZlIHNjYW4sIGl0IHdpbGwgcmVwb3NpdGlvbiB0aGUgc2NhbiB1c2lu ZyBuZXcgYXJyYXkgdmFsdWVzCisJICogKGJhc2VkIG9uIHRoZSB0dXBsZXMgZnJvbSB0aGUgbmVp Z2hib3JpbmcgcGFnZSB3ZSdsbCBzdGVwIG9uIHRvKS4KKwkgKgorCSAqIFdlIG5lZWQgdG8gcmVz ZXQgdGhlIGFycmF5IGtleSBzdGF0ZSBpbiB0aGUgY29ycmVjdCBkaXJlY3Rpb24gc28gdGhhdAor CSAqIHdlIHdvbid0IGdldCBjb25mdXNlZC4gIFdoZW4gdGhlIGFycmF5IGtleXMgYXJlIGJlaGlu ZCB0aGUga2V5IHNwYWNlCisJICogZm9yIHRoZSBwYWdlIHdlJ3JlIHN0ZXBwaW5nIG9uIHRvIChi ZWhpbmQgaW4gdGVybXMgb2YgdGhlIHNjYW4gZGlyKSwKKwkgKiB0aGV5IHdpbGwgY2F0Y2ggdXAg YXV0b21hdGljYWxseS4gIEJ1dCB3aGVuIHRoZXkncmUgYWhlYWQgb2YgdGhhdAorCSAqIHBhZ2Un cyBrZXkgc3BhY2UsIHRoZSBzY2FuIGNvdWxkIG1pc3MgbWF0Y2hpbmcgdHVwbGVzLgogCSAqLwot CWlmIChCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSkKLQkJc28tPm1hcmtJdGVtSW5kZXgg PSBzby0+Y3VyclBvcy5pdGVtSW5kZXg7CisJX2J0X3N0YXJ0X2FycmF5X2tleXMoc2NhbiwgYmF0 Y2gtPmRpcik7CisJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoYmF0Y2gtPmRpcikpCisJCWJ0 YmF0Y2gtPm1vcmVSaWdodCA9IHRydWU7CiAJZWxzZQotCXsKLQkJQlRTY2FuUG9zSW52YWxpZGF0 ZShzby0+bWFya1Bvcyk7Ci0JCXNvLT5tYXJrSXRlbUluZGV4ID0gLTE7Ci0JfQotfQotCi0vKgot ICoJYnRyZXN0cnBvcygpIC0tIHJlc3RvcmUgc2NhbiB0byBsYXN0IHNhdmVkIHBvc2l0aW9uCi0g Ki8KLXZvaWQKLWJ0cmVzdHJwb3MoSW5kZXhTY2FuRGVzYyBzY2FuKQotewotCUJUU2Nhbk9wYXF1 ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKLQotCWlmIChzby0+bWFya0l0ZW1J bmRleCA+PSAwKQotCXsKLQkJLyoKLQkJICogVGhlIHNjYW4gaGFzIG5ldmVyIG1vdmVkIHRvIGEg bmV3IHBhZ2Ugc2luY2UgdGhlIGxhc3QgbWFyay4gIEp1c3QKLQkJICogcmVzdG9yZSB0aGUgaXRl bUluZGV4LgotCQkgKgotCQkgKiBOQjogSW4gdGhpcyBjYXNlIHdlIGNhbid0IGNvdW50IG9uIGFu eXRoaW5nIGluIHNvLT5tYXJrUG9zIHRvIGJlCi0JCSAqIGFjY3VyYXRlLgotCQkgKi8KLQkJc28t PmN1cnJQb3MuaXRlbUluZGV4ID0gc28tPm1hcmtJdGVtSW5kZXg7Ci0JfQotCWVsc2UKLQl7Ci0J CS8qCi0JCSAqIFRoZSBzY2FuIG1vdmVkIHRvIGEgbmV3IHBhZ2UgYWZ0ZXIgbGFzdCBtYXJrIG9y IHJlc3RvcmUsIGFuZCB3ZSBhcmUKLQkJICogbm93IHJlc3RvcmluZyB0byB0aGUgbWFya2VkIHBh Z2UuICBXZSBhcmVuJ3QgaG9sZGluZyBhbnkgcmVhZAotCQkgKiBsb2NrcywgYnV0IGlmIHdlJ3Jl IHN0aWxsIGhvbGRpbmcgdGhlIHBpbiBmb3IgdGhlIGN1cnJlbnQgcG9zaXRpb24sCi0JCSAqIHdl IG11c3QgZHJvcCBpdC4KLQkJICovCi0JCWlmIChCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9z KSkKLQkJewotCQkJLyogQmVmb3JlIGxlYXZpbmcgY3VycmVudCBwYWdlLCBkZWFsIHdpdGggYW55 IGtpbGxlZCBpdGVtcyAqLwotCQkJaWYgKHNvLT5udW1LaWxsZWQgPiAwKQotCQkJCV9idF9raWxs aXRlbXMoc2Nhbik7Ci0JCQlCVFNjYW5Qb3NVbnBpbklmUGlubmVkKHNvLT5jdXJyUG9zKTsKLQkJ fQotCi0JCWlmIChCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5tYXJrUG9zKSkKLQkJewotCQkJLyogYnVt cCBwaW4gb24gbWFyayBidWZmZXIgZm9yIGFzc2lnbm1lbnQgdG8gY3VycmVudCBidWZmZXIgKi8K LQkJCWlmIChCVFNjYW5Qb3NJc1Bpbm5lZChzby0+bWFya1BvcykpCi0JCQkJSW5jckJ1ZmZlclJl ZkNvdW50KHNvLT5tYXJrUG9zLmJ1Zik7Ci0JCQltZW1jcHkoJnNvLT5jdXJyUG9zLCAmc28tPm1h cmtQb3MsCi0JCQkJICAgb2Zmc2V0b2YoQlRTY2FuUG9zRGF0YSwgaXRlbXNbMV0pICsKLQkJCQkg ICBzby0+bWFya1Bvcy5sYXN0SXRlbSAqIHNpemVvZihCVFNjYW5Qb3NJdGVtKSk7Ci0JCQlpZiAo c28tPmN1cnJUdXBsZXMpCi0JCQkJbWVtY3B5KHNvLT5jdXJyVHVwbGVzLCBzby0+bWFya1R1cGxl cywKLQkJCQkJICAgc28tPm1hcmtQb3MubmV4dFR1cGxlT2Zmc2V0KTsKLQkJCS8qIFJlc2V0IHRo ZSBzY2FuJ3MgYXJyYXkga2V5cyAoc2VlIF9idF9zdGVwcGFnZSBmb3Igd2h5KSAqLwotCQkJaWYg KHNvLT5udW1BcnJheUtleXMpCi0JCQl7Ci0JCQkJX2J0X3N0YXJ0X2FycmF5X2tleXMoc2Nhbiwg c28tPmN1cnJQb3MuZGlyKTsKLQkJCQlzby0+bmVlZFByaW1TY2FuID0gZmFsc2U7Ci0JCQl9Ci0J CX0KLQkJZWxzZQotCQkJQlRTY2FuUG9zSW52YWxpZGF0ZShzby0+Y3VyclBvcyk7Ci0JfQorCQli dGJhdGNoLT5tb3JlTGVmdCA9IHRydWU7CisJc28tPm5lZWRQcmltU2NhbiA9IGZhbHNlOworCXNv LT5zY2FuQmVoaW5kID0gZmFsc2U7CisJc28tPm9wcG9zaXRlRGlyQ2hlY2sgPSBmYWxzZTsKIH0K IAogLyoKQEAgLTg4MSwxNSArOTIxLDYgQEAgX2J0X3BhcmFsbGVsX3NlaXplKEluZGV4U2NhbkRl c2Mgc2NhbiwgQmxvY2tOdW1iZXIgKm5leHRfc2Nhbl9wYWdlLAogCSpuZXh0X3NjYW5fcGFnZSA9 IEludmFsaWRCbG9ja051bWJlcjsKIAkqbGFzdF9jdXJyX3BhZ2UgPSBJbnZhbGlkQmxvY2tOdW1i ZXI7CiAKLQkvKgotCSAqIFJlc2V0IHNvLT5jdXJyUG9zLCBhbmQgaW5pdGlhbGl6ZSBtb3JlTGVm dC9tb3JlUmlnaHQgc3VjaCB0aGF0IHRoZSBuZXh0Ci0JICogY2FsbCB0byBfYnRfcmVhZG5leHRw YWdlIHRyZWF0cyB0aGlzIGJhY2tlbmQgc2ltaWxhcmx5IHRvIGEgc2VyaWFsCi0JICogYmFja2Vu ZCB0aGF0IHN0ZXBzIGZyb20gKmxhc3RfY3Vycl9wYWdlIHRvICpuZXh0X3NjYW5fcGFnZSAodW5s ZXNzIHRoaXMKLQkgKiBiYWNrZW5kJ3Mgc28tPmN1cnJQb3MgaXMgaW5pdGlhbGl6ZWQgYnkgX2J0 X3JlYWRmaXJzdHBhZ2UgYmVmb3JlIHRoZW4pLgotCSAqLwotCUJUU2NhblBvc0ludmFsaWRhdGUo c28tPmN1cnJQb3MpOwotCXNvLT5jdXJyUG9zLm1vcmVMZWZ0ID0gc28tPmN1cnJQb3MubW9yZVJp Z2h0ID0gdHJ1ZTsKLQogCWlmIChmaXJzdCkKIAl7CiAJCS8qCkBAIC0xMDM5LDggKzEwNzAsNiBA QCBfYnRfcGFyYWxsZWxfZG9uZShJbmRleFNjYW5EZXNjIHNjYW4pCiAJQlRQYXJhbGxlbFNjYW5E ZXNjIGJ0c2NhbjsKIAlib29sCQlzdGF0dXNfY2hhbmdlZCA9IGZhbHNlOwogCi0JQXNzZXJ0KCFC VFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSk7Ci0KIAkvKiBEbyBub3RoaW5nLCBmb3Igbm9u LXBhcmFsbGVsIHNjYW5zICovCiAJaWYgKHBhcmFsbGVsX3NjYW4gPT0gTlVMTCkKIAkJcmV0dXJu OwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzZWFyY2guYyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2VhcmNoLmMKaW5kZXggYWFlNmFjYjdmLi5jMDg5 ZWMzOGQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2VhcmNoLmMK KysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzZWFyY2guYwpAQCAtMjMsNTMgKzIz LDQ5IEBACiAjaW5jbHVkZSAicGdzdGF0LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcmVkaWNhdGUu aCIKICNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKKyNpbmNsdWRlICJ1dGlscy9tZW1kZWJ1 Zy5oIgogI2luY2x1ZGUgInV0aWxzL3JlbC5oIgogCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfYnRf ZHJvcF9sb2NrX2FuZF9tYXliZV9waW4oUmVsYXRpb24gcmVsLCBCVFNjYW5PcGFxdWUgc28pOwor c3RhdGljIGlubGluZSB2b2lkIF9idF9iYXRjaF91bmxvY2soSW5kZXhTY2FuRGVzYyBzY2FuLCBJ bmRleFNjYW5CYXRjaCBiYXRjaCwKKwkJCQkJCQkJCUJ1ZmZlciBidWYpOwogc3RhdGljIEJ1ZmZl ciBfYnRfbW92ZXJpZ2h0KFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcHJlbCwgQlRTY2FuSW5z ZXJ0IGtleSwKIAkJCQkJCQlCdWZmZXIgYnVmLCBib29sIGZvcnVwZGF0ZSwgQlRTdGFjayBzdGFj aywKIAkJCQkJCQlpbnQgYWNjZXNzKTsKIHN0YXRpYyBPZmZzZXROdW1iZXIgX2J0X2JpbnNyY2go UmVsYXRpb24gcmVsLCBCVFNjYW5JbnNlcnQga2V5LCBCdWZmZXIgYnVmKTsKIHN0YXRpYyBpbnQJ X2J0X2JpbnNyY2hfcG9zdGluZyhCVFNjYW5JbnNlcnQga2V5LCBQYWdlIHBhZ2UsCiAJCQkJCQkJ CU9mZnNldE51bWJlciBvZmZudW0pOwotc3RhdGljIGlubGluZSB2b2lkIF9idF9yZXR1cm5pdGVt KEluZGV4U2NhbkRlc2Mgc2NhbiwgQlRTY2FuT3BhcXVlIHNvKTsKLXN0YXRpYyBib29sIF9idF9z dGVwcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsKLXN0YXRpYyBi b29sIF9idF9yZWFkZmlyc3RwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgT2Zmc2V0TnVtYmVyIG9m Zm51bSwKLQkJCQkJCQkgIFNjYW5EaXJlY3Rpb24gZGlyKTsKLXN0YXRpYyBib29sIF9idF9yZWFk bmV4dHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBCbG9ja051bWJlciBibGtubywKLQkJCQkJCQkg QmxvY2tOdW1iZXIgbGFzdGN1cnJibGtubywgU2NhbkRpcmVjdGlvbiBkaXIsCi0JCQkJCQkJIGJv b2wgc2VpemVkKTsKK3N0YXRpYyBJbmRleFNjYW5CYXRjaCBfYnRfcmVhZGZpcnN0cGFnZShJbmRl eFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGZpcnN0YmF0Y2gsCisJCQkJCQkJCQkJT2Zm c2V0TnVtYmVyIG9mZm51bSwgU2NhbkRpcmVjdGlvbiBkaXIpOworc3RhdGljIEluZGV4U2NhbkJh dGNoIF9idF9yZWFkbmV4dHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBCbG9ja051bWJlciBibGtu bywKKwkJCQkJCQkJCSAgIEJsb2NrTnVtYmVyIGxhc3RjdXJyYmxrbm8sCisJCQkJCQkJCQkgICBT Y2FuRGlyZWN0aW9uIGRpciwgYm9vbCBmaXJzdHBhZ2UpOwogc3RhdGljIEJ1ZmZlciBfYnRfbG9j a19hbmRfdmFsaWRhdGVfbGVmdChSZWxhdGlvbiByZWwsIEJsb2NrTnVtYmVyICpibGtubywKIAkJ CQkJCQkJCQkgQmxvY2tOdW1iZXIgbGFzdGN1cnJibGtubyk7Ci1zdGF0aWMgYm9vbCBfYnRfZW5k cG9pbnQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcik7CitzdGF0aWMgSW5k ZXhTY2FuQmF0Y2ggX2J0X2VuZHBvaW50KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlv biBkaXIsCisJCQkJCQkJCSAgIEluZGV4U2NhbkJhdGNoIGZpcnN0YmF0Y2gpOwogCiAKIC8qCi0g KglfYnRfZHJvcF9sb2NrX2FuZF9tYXliZV9waW4oKQorICogX2J0X2JhdGNoX3VubG9jaygpIC0t IG5idHJlZSB3cmFwcGVyIGZvciBpbmRleGFtX3V0aWxfYmF0Y2hfdW5sb2NrLgogICoKLSAqIFVu bG9jayBzby0+Y3VyclBvcy5idWYuICBJZiBzY2FuIGlzIHNvLT5kcm9wUGluLCBkcm9wIHRoZSBw aW4sIHRvby4KLSAqIERyb3BwaW5nIHRoZSBwaW4gcHJldmVudHMgVkFDVVVNIGZyb20gYmxvY2tp bmcgb24gYWNxdWlyaW5nIGEgY2xlYW51cCBsb2NrLgorICogUGVyZm9ybXMgdGhlIHNhbWUgVmFs Z3JpbmQgaW5zdHJ1bWVudGF0aW9uIGFzIF9idF91bmxvY2tidWYuCiAgKi8KIHN0YXRpYyBpbmxp bmUgdm9pZAotX2J0X2Ryb3BfbG9ja19hbmRfbWF5YmVfcGluKFJlbGF0aW9uIHJlbCwgQlRTY2Fu T3BhcXVlIHNvKQorX2J0X2JhdGNoX3VubG9jayhJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2Nh bkJhdGNoIGJhdGNoLCBCdWZmZXIgYnVmKQogewotCWlmICghc28tPmRyb3BQaW4pCi0JewotCQkv KiBKdXN0IGRyb3AgdGhlIGxvY2sgKG5vdCB0aGUgcGluKSAqLwotCQlfYnRfdW5sb2NrYnVmKHJl bCwgc28tPmN1cnJQb3MuYnVmKTsKLQkJcmV0dXJuOwotCX0KKyNpZiBkZWZpbmVkKFVTRV9WQUxH UklORCkKKwlQYWdlCQlwYWdlID0gQnVmZmVyR2V0UGFnZShidWYpOwogCi0JLyoKLQkgKiBEcm9w IGJvdGggdGhlIGxvY2sgYW5kIHRoZSBwaW4uCi0JICoKLQkgKiBIYXZlIHRvIHNldCBzby0+Y3Vy clBvcy5sc24gc28gdGhhdCBfYnRfa2lsbGl0ZW1zIGhhcyBhIHdheSB0byBkZXRlY3QKLQkgKiB3 aGVuIGNvbmN1cnJlbnQgaGVhcCBUSUQgcmVjeWNsaW5nIGJ5IFZBQ1VVTSBtaWdodCBoYXZlIHRh a2VuIHBsYWNlLgotCSAqLwotCXNvLT5jdXJyUG9zLmxzbiA9IEJ1ZmZlckdldExTTkF0b21pYyhz by0+Y3VyclBvcy5idWYpOwotCV9idF9yZWxidWYocmVsLCBzby0+Y3VyclBvcy5idWYpOwotCXNv LT5jdXJyUG9zLmJ1ZiA9IEludmFsaWRCdWZmZXI7CisJVkFMR1JJTkRfQ0hFQ0tfTUVNX0lTX0RF RklORUQocGFnZSwgQkxDS1NaKTsKKyNlbmRpZgorCisJaW5kZXhhbV91dGlsX2JhdGNoX3VubG9j ayhzY2FuLCBiYXRjaCwgYnVmKTsKKworI2lmIGRlZmluZWQoVVNFX1ZBTEdSSU5EKQorCWlmICgh UmVsYXRpb25Vc2VzTG9jYWxCdWZmZXJzKHNjYW4tPmluZGV4UmVsYXRpb24pKQorCQlWQUxHUklO RF9NQUtFX01FTV9OT0FDQ0VTUyhwYWdlLCBCTENLU1opOworI2VuZGlmCiB9CiAKIC8qCkBAIC04 NjAsMjYgKzg1NiwyNSBAQCBfYnRfY29tcGFyZShSZWxhdGlvbiByZWwsCiB9CiAKIC8qCi0gKglf YnRfZmlyc3QoKSAtLSBGaW5kIHRoZSBmaXJzdCBpdGVtIGluIGEgc2Nhbi4KKyAqCV9idF9maXJz dCgpIC0tIEZpbmQgdGhlIGZpcnN0IGJhdGNoIGluIGEgc2Nhbi4KICAqCiAgKgkJV2UgbmVlZCB0 byBiZSBjbGV2ZXIgYWJvdXQgdGhlIGRpcmVjdGlvbiBvZiBzY2FuLCB0aGUgc2VhcmNoCi0gKgkJ Y29uZGl0aW9ucywgYW5kIHRoZSB0cmVlIG9yZGVyaW5nLiAgV2UgZmluZCB0aGUgZmlyc3QgaXRl bSAob3IsCi0gKgkJaWYgYmFja3dhcmRzIHNjYW4sIHRoZSBsYXN0IGl0ZW0pIGluIHRoZSB0cmVl IHRoYXQgc2F0aXNmaWVzIHRoZQotICoJCXF1YWxpZmljYXRpb25zIGluIHRoZSBzY2FuIGtleS4g IE9uIHN1Y2Nlc3MgZXhpdCwgZGF0YSBhYm91dCB0aGUKLSAqCQltYXRjaGluZyB0dXBsZShzKSBv biB0aGUgcGFnZSBoYXMgYmVlbiBsb2FkZWQgaW50byBzby0+Y3VyclBvcy4gIFdlJ2xsCi0gKgkJ ZHJvcCBhbGwgbG9ja3MgYW5kIGhvbGQgb250byBhIHBpbiBvbiBwYWdlJ3MgYnVmZmVyLCBleGNl cHQgZHVyaW5nCi0gKgkJc28tPmRyb3BQaW4gc2NhbnMsIHdoZW4gd2UgZHJvcCBib3RoIHRoZSBs b2NrIGFuZCB0aGUgcGluLgotICoJCV9idF9yZXR1cm5pdGVtIHNldHMgdGhlIG5leHQgaXRlbSB0 byByZXR1cm4gdG8gc2NhbiBvbiBzdWNjZXNzIGV4aXQuCisgKgkJY29uZGl0aW9ucywgYW5kIHRo ZSB0cmVlIG9yZGVyaW5nLiAgV2UgZmluZCB0aGUgZmlyc3QgbGVhZiBwYWdlIChvcgorICoJCXRo ZSBsYXN0IGxlYWYgcGFnZSwgd2hlbiBzY2FubmluZyBiYWNrd2FyZHMpIGluIHRoZSB0cmVlIHdp dGggYXQgbGVhc3QKKyAqCQlvbmUgdHVwbGUgdGhhdCBzYXRpc2ZpZXMgdGhlIHF1YWxpZmljYXRp b25zIGluIHRoZSBzY2FuIGtleS4gIE9uCisgKgkJc3VjY2VzcyBleGl0LCB3ZSByZXR1cm4gYSBu ZXcgYmF0Y2ggd2l0aCB0aGF0IHBhZ2UncyBtYXRjaGluZyBpdGVtcy4KICAqCi0gKiBJZiB0aGVy ZSBhcmUgbm8gbWF0Y2hpbmcgaXRlbXMgaW4gdGhlIGluZGV4LCB3ZSByZXR1cm4gZmFsc2UsIHdp dGggbm8KLSAqIHBpbnMgb3IgbG9ja3MgaGVsZC4gIHNvLT5jdXJyUG9zIHdpbGwgcmVtYWluIGlu dmFsaWQuCisgKiBJZiB0aGVyZSBhcmUgbm8gbWF0Y2hpbmcgaXRlbXMgaW4gdGhlIGluZGV4IChp biB0aGUgZ2l2ZW4gc2NhbiBkaXJlY3Rpb24pLAorICogd2UganVzdCByZXR1cm4gTlVMTC4gIE5v dGUgdGhhdCByZXR1cm5pbmcgTlVMTCBkb2Vzbid0IG5lY2Vzc2FyaWx5IG1lYW4gdGhlCisgKiBl bmQgb2YgdGhlIHRvcC1sZXZlbCBzY2FuOyBjYWxsZXIgc2hvdWxkIGNoZWNrIHNvLT5uZWVkUHJp bVNjYW4gdG8KKyAqIGRldGVybWluZSBpZiBhbm90aGVyIHByaW1pdGl2ZSBpbmRleCBzY2FuIGlz IHJlcXVpcmVkLgogICoKICAqIE5vdGUgdGhhdCBzY2FuLT5rZXlEYXRhW10sIGFuZCB0aGUgc28t PmtleURhdGFbXSBzY2Fua2V5IGJ1aWx0IGZyb20gaXQsCiAgKiBhcmUgYm90aCBzZWFyY2gtdHlw ZSBzY2Fua2V5cyAoc2VlIG5idHJlZS9SRUFETUUgZm9yIG1vcmUgYWJvdXQgdGhpcykuCiAgKiBX aXRoaW4gdGhpcyByb3V0aW5lLCB3ZSBidWlsZCBhIHRlbXBvcmFyeSBpbnNlcnRpb24tdHlwZSBz Y2Fua2V5IHRvIHVzZQogICogaW4gbG9jYXRpbmcgdGhlIHNjYW4gc3RhcnQgcG9zaXRpb24uCiAg Ki8KLWJvb2wKK0luZGV4U2NhbkJhdGNoCiBfYnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBT Y2FuRGlyZWN0aW9uIGRpcikKIHsKIAlSZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9u OwpAQCAtODkyLDggKzg4NywxMiBAQCBfYnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2Fu RGlyZWN0aW9uIGRpcikKIAlTdHJhdGVneU51bWJlciBzdHJhdF90b3RhbCA9IEludmFsaWRTdHJh dGVneTsKIAlCbG9ja051bWJlciBibGtubyA9IEludmFsaWRCbG9ja051bWJlciwKIAkJCQlsYXN0 Y3VycmJsa25vOworCUluZGV4U2NhbkJhdGNoIGZpcnN0YmF0Y2g7CisJQlRCYXRjaERhdGEgKmJ0 Zmlyc3RiYXRjaDsKIAotCUFzc2VydCghQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpOwor CS8qIEFsbG9jYXRlIHNwYWNlIGZvciBmaXJzdCBiYXRjaCAqLworCWZpcnN0YmF0Y2ggPSBpbmRl eGFtX3V0aWxfYmF0Y2hfYWxsb2Moc2Nhbik7CisJYnRmaXJzdGJhdGNoID0gQlRCYXRjaEdldERh dGEoc2NhbiwgZmlyc3RiYXRjaCk7CiAKIAkvKgogCSAqIEV4YW1pbmUgdGhlIHNjYW4ga2V5cyBh bmQgZWxpbWluYXRlIGFueSByZWR1bmRhbnQga2V5czsgYWxzbyBtYXJrIHRoZQpAQCAtOTA5LDcg KzkwOCw4IEBAIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGly KQogCXsKIAkJQXNzZXJ0KCFzby0+bmVlZFByaW1TY2FuKTsKIAkJX2J0X3BhcmFsbGVsX2RvbmUo c2Nhbik7Ci0JCXJldHVybiBmYWxzZTsKKwkJaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2Uoc2Nh biwgZmlyc3RiYXRjaCk7CisJCXJldHVybiBOVUxMOwogCX0KIAogCS8qCkBAIC05MTgsNyArOTE4 LDEwIEBAIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQog CSAqLwogCWlmIChzY2FuLT5wYXJhbGxlbF9zY2FuICE9IE5VTEwgJiYKIAkJIV9idF9wYXJhbGxl bF9zZWl6ZShzY2FuLCAmYmxrbm8sICZsYXN0Y3VycmJsa25vLCB0cnVlKSkKLQkJcmV0dXJuIGZh bHNlOworCXsKKwkJaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2Uoc2NhbiwgZmlyc3RiYXRjaCk7 CisJCXJldHVybiBOVUxMOwkJCS8qIGRlZmluaXRlbHkgZG9uZSAoc28tPm5lZWRQcmltU2NhbiBp cyB1bnNldCkgKi8KKwl9CiAKIAkvKgogCSAqIEluaXRpYWxpemUgdGhlIHNjYW4ncyBhcnJheXMg KGlmIGFueSkgZm9yIHRoZSBjdXJyZW50IHNjYW4gZGlyZWN0aW9uCkBAIC05MzgsMTEgKzk0MSw5 IEBAIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCQlB c3NlcnQoIXNvLT5uZWVkUHJpbVNjYW4pOwogCQlBc3NlcnQoYmxrbm8gIT0gUF9OT05FKTsKIAot CQlpZiAoIV9idF9yZWFkbmV4dHBhZ2Uoc2NhbiwgYmxrbm8sIGxhc3RjdXJyYmxrbm8sIGRpciwg dHJ1ZSkpCi0JCQlyZXR1cm4gZmFsc2U7CisJCWluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlKHNj YW4sIGZpcnN0YmF0Y2gpOwogCi0JCV9idF9yZXR1cm5pdGVtKHNjYW4sIHNvKTsKLQkJcmV0dXJu IHRydWU7CisJCXJldHVybiBfYnRfcmVhZG5leHRwYWdlKHNjYW4sIGJsa25vLCBsYXN0Y3VycmJs a25vLCBkaXIsIHRydWUpOwogCX0KIAogCS8qCkBAIC0xMjQyLDcgKzEyNDMsNyBAQCBfYnRfZmly c3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAkgKiBOb3RlOiBjYWxs cyBfYnRfcmVhZGZpcnN0cGFnZSBmb3IgdXMsIHdoaWNoIHJlbGVhc2VzIHRoZSBwYXJhbGxlbCBz Y2FuLgogCSAqLwogCWlmIChrZXlzeiA9PSAwKQotCQlyZXR1cm4gX2J0X2VuZHBvaW50KHNjYW4s IGRpcik7CisJCXJldHVybiBfYnRfZW5kcG9pbnQoc2NhbiwgZGlyLCBmaXJzdGJhdGNoKTsKIAog CS8qCiAJICogV2Ugd2FudCB0byBzdGFydCB0aGUgc2NhbiBzb21ld2hlcmUgd2l0aGluIHRoZSBp bmRleC4gIFNldCB1cCBhbgpAQCAtMTUwMiw3ICsxNTAzLDcgQEAgX2J0X2ZpcnN0KEluZGV4U2Nh bkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJCWRlZmF1bHQ6CiAJCQkvKiBjYW4ndCBn ZXQgaGVyZSwgYnV0IGtlZXAgY29tcGlsZXIgcXVpZXQgKi8KIAkJCWVsb2coRVJST1IsICJ1bnJl Y29nbml6ZWQgc3RyYXRfdG90YWw6ICVkIiwgKGludCkgc3RyYXRfdG90YWwpOwotCQkJcmV0dXJu IGZhbHNlOworCQkJcmV0dXJuIE5VTEw7CiAJfQogCiAJLyoKQEAgLTE1MTAsOSArMTUxMSw5IEBA IF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCSAqIHBv c2l0aW9uIG91cnNlbHZlcyBvbiB0aGUgdGFyZ2V0IGxlYWYgcGFnZS4KIAkgKi8KIAlBc3NlcnQo U2NhbkRpcmVjdGlvbklzQmFja3dhcmQoZGlyKSA9PSBpbnNrZXkuYmFja3dhcmQpOwotCV9idF9z ZWFyY2gocmVsLCBOVUxMLCAmaW5za2V5LCAmc28tPmN1cnJQb3MuYnVmLCBCVF9SRUFELCBmYWxz ZSk7CisJX2J0X3NlYXJjaChyZWwsIE5VTEwsICZpbnNrZXksICZidGZpcnN0YmF0Y2gtPmJ1Ziwg QlRfUkVBRCwgZmFsc2UpOwogCi0JaWYgKCFCdWZmZXJJc1ZhbGlkKHNvLT5jdXJyUG9zLmJ1Zikp CisJaWYgKHVubGlrZWx5KCFCdWZmZXJJc1ZhbGlkKGJ0Zmlyc3RiYXRjaC0+YnVmKSkpCiAJewog CQlBc3NlcnQoIXNvLT5uZWVkUHJpbVNjYW4pOwogCkBAIC0xNTI4LDIyICsxNTI5LDIzIEBAIF9i dF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCQlpZiAoSXNv bGF0aW9uSXNTZXJpYWxpemFibGUoKSkKIAkJewogCQkJUHJlZGljYXRlTG9ja1JlbGF0aW9uKHJl bCwgc2Nhbi0+eHNfc25hcHNob3QpOwotCQkJX2J0X3NlYXJjaChyZWwsIE5VTEwsICZpbnNrZXks ICZzby0+Y3VyclBvcy5idWYsIEJUX1JFQUQsIGZhbHNlKTsKKwkJCV9idF9zZWFyY2gocmVsLCBO VUxMLCAmaW5za2V5LCAmYnRmaXJzdGJhdGNoLT5idWYsIEJUX1JFQUQsIGZhbHNlKTsKIAkJfQog Ci0JCWlmICghQnVmZmVySXNWYWxpZChzby0+Y3VyclBvcy5idWYpKQorCQlpZiAoIUJ1ZmZlcklz VmFsaWQoYnRmaXJzdGJhdGNoLT5idWYpKQogCQl7CiAJCQlfYnRfcGFyYWxsZWxfZG9uZShzY2Fu KTsKLQkJCXJldHVybiBmYWxzZTsKKwkJCWluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlKHNjYW4s IGZpcnN0YmF0Y2gpOworCQkJcmV0dXJuIE5VTEw7CiAJCX0KIAl9CiAKIAkvKiBwb3NpdGlvbiB0 byB0aGUgcHJlY2lzZSBpdGVtIG9uIHRoZSBwYWdlICovCi0Jb2ZmbnVtID0gX2J0X2JpbnNyY2go cmVsLCAmaW5za2V5LCBzby0+Y3VyclBvcy5idWYpOworCW9mZm51bSA9IF9idF9iaW5zcmNoKHJl bCwgJmluc2tleSwgYnRmaXJzdGJhdGNoLT5idWYpOwogCiAJLyoKIAkgKiBOb3cgbG9hZCBkYXRh IGZyb20gdGhlIGZpcnN0IHBhZ2Ugb2YgdGhlIHNjYW4gKHVzdWFsbHkgdGhlIHBhZ2UKLQkgKiBj dXJyZW50bHkgaW4gc28tPmN1cnJQb3MuYnVmKS4KKwkgKiBjdXJyZW50bHkgaW4gZmlyc3RiYXRj aC5idWYpLgogCSAqCiAJICogSWYgaW5za2V5Lm5leHRrZXkgPSBmYWxzZSBhbmQgaW5za2V5LmJh Y2t3YXJkID0gZmFsc2UsIG9mZm51bSBpcwogCSAqIHBvc2l0aW9uZWQgYXQgdGhlIGZpcnN0IG5v bi1waXZvdCB0dXBsZSA+PSBpbnNrZXkuc2NhbmtleXMuCkBAIC0xNTYxLDE2NCArMTU2Myw3MiBA QCBfYnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAkgKiBm b3IgdGhlIHBhZ2UuICBGb3IgZXhhbXBsZSwgd2hlbiBpbnNrZXkgaXMgYm90aCA8IHRoZSBsZWFm IHBhZ2UncyBoaWdoCiAJICoga2V5IGFuZCA+IGFsbCBvZiBpdHMgbm9uLXBpdm90IHR1cGxlcywg b2ZmbnVtIHdpbGwgYmUgIm1heG9mZiArIDEiLgogCSAqLwotCWlmICghX2J0X3JlYWRmaXJzdHBh Z2Uoc2Nhbiwgb2ZmbnVtLCBkaXIpKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlfYnRfcmV0dXJuaXRl bShzY2FuLCBzbyk7Ci0JcmV0dXJuIHRydWU7CisJcmV0dXJuIF9idF9yZWFkZmlyc3RwYWdlKHNj YW4sIGZpcnN0YmF0Y2gsIG9mZm51bSwgZGlyKTsKIH0KIAogLyoKLSAqCV9idF9uZXh0KCkgLS0g R2V0IHRoZSBuZXh0IGl0ZW0gaW4gYSBzY2FuLgorICoJX2J0X25leHQoKSAtLSBHZXQgdGhlIG5l eHQgYmF0Y2ggaW4gYSBzY2FuLgogICoKLSAqCQlPbiBlbnRyeSwgc28tPmN1cnJQb3MgZGVzY3Jp YmVzIHRoZSBjdXJyZW50IHBhZ2UsIHdoaWNoIG1heSBiZSBwaW5uZWQKLSAqCQlidXQgaXMgbm90 IGxvY2tlZCwgYW5kIHNvLT5jdXJyUG9zLml0ZW1JbmRleCBpZGVudGlmaWVzIHdoaWNoIGl0ZW0g d2FzCi0gKgkJcHJldmlvdXNseSByZXR1cm5lZC4KKyAqCQlPbiBlbnRyeSwgcHJpb3JiYXRjaCBk ZXNjcmliZXMgdGhlIGJhdGNoIHRoYXQgd2FzIGxhc3QgcmV0dXJuZWQgYnkKKyAqCQlidGdldGJh dGNoLiAgV2UnbGwgdXNlIHRoZSBwcmlvciBiYXRjaCdzIHBvc2l0aW9uaW5nIGluZm9ybWF0aW9u IHRvCisgKgkJZGVjaWRlIHdoaWNoIGxlYWYgcGFnZSB0byByZWFkIG5leHQuCiAgKgotICoJCU9u IHN1Y2Nlc3MgZXhpdCwgc28tPmN1cnJQb3MgaXMgdXBkYXRlZCBhcyBuZWVkZWQsIGFuZCBfYnRf cmV0dXJuaXRlbQotICoJCXNldHMgdGhlIG5leHQgaXRlbSB0byByZXR1cm4gdG8gdGhlIHNjYW4u ICBzby0+Y3VyclBvcyByZW1haW5zIHZhbGlkLgotICoKLSAqCQlPbiBmYWlsdXJlIGV4aXQgKG5v IG1vcmUgdHVwbGVzKSwgd2UgaW52YWxpZGF0ZSBzby0+Y3VyclBvcy4gIEl0J2xsCi0gKgkJc3Rp bGwgYmUgcG9zc2libGUgZm9yIHRoZSBzY2FuIHRvIHJldHVybiB0dXBsZXMgYnkgY2hhbmdpbmcg ZGlyZWN0aW9uLAotICoJCXRob3VnaCB3ZSdsbCBuZWVkIHRvIGNhbGwgX2J0X2ZpcnN0IGFuZXcg aW4gdGhhdCBvdGhlciBkaXJlY3Rpb24uCisgKgkJT24gc3VjY2VzcyBleGl0LCByZXR1cm5zIHRo ZSBuZXh0IGJhdGNoLiAgVGhlcmUgbXVzdCBiZSBhdCBsZWFzdCBvbmUKKyAqCQltYXRjaGluZyB0 dXBsZSBvbiBhbnkgcmV0dXJuZWQgYmF0Y2ggKGVsc2Ugd2UnZCBqdXN0IHJldHVybiBOVUxMKS4K KyAqCQlOb3RlIHRoYXQgcmV0dXJuaW5nIE5VTEwgZG9lc24ndCBuZWNlc3NhcmlseSBtZWFuIHRo ZSBlbmQgb2YgdGhlCisgKgkJdG9wLWxldmVsIHNjYW47IGNhbGxlciBzaG91bGQgY2hlY2sgc28t Pm5lZWRQcmltU2NhbiB0byBkZXRlcm1pbmUKKyAqCQlpZiBhbm90aGVyIHByaW1pdGl2ZSBpbmRl eCBzY2FuIGlzIHJlcXVpcmVkLgogICovCi1ib29sCi1fYnRfbmV4dChJbmRleFNjYW5EZXNjIHNj YW4sIFNjYW5EaXJlY3Rpb24gZGlyKQorSW5kZXhTY2FuQmF0Y2gKK19idF9uZXh0KEluZGV4U2Nh bkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIEluZGV4U2NhbkJhdGNoIHByaW9yYmF0Y2gp CiB7Ci0JQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwotCi0J QXNzZXJ0KEJUU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKTsKLQotCS8qCi0JICogQWR2YW5j ZSB0byBuZXh0IHR1cGxlIG9uIGN1cnJlbnQgcGFnZTsgb3IgaWYgdGhlcmUncyBubyBtb3JlLCB0 cnkgdG8KLQkgKiBzdGVwIHRvIHRoZSBuZXh0IHBhZ2Ugd2l0aCBkYXRhLgotCSAqLwotCWlmIChT Y2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCi0JewotCQlpZiAoKytzby0+Y3VyclBvcy5pdGVt SW5kZXggPiBzby0+Y3VyclBvcy5sYXN0SXRlbSkKLQkJewotCQkJaWYgKCFfYnRfc3RlcHBhZ2Uo c2NhbiwgZGlyKSkKLQkJCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQl9Ci0JZWxzZQotCXsKLQkJaWYg KC0tc28tPmN1cnJQb3MuaXRlbUluZGV4IDwgc28tPmN1cnJQb3MuZmlyc3RJdGVtKQotCQl7Ci0J CQlpZiAoIV9idF9zdGVwcGFnZShzY2FuLCBkaXIpKQotCQkJCXJldHVybiBmYWxzZTsKLQkJfQot CX0KLQotCV9idF9yZXR1cm5pdGVtKHNjYW4sIHNvKTsKLQlyZXR1cm4gdHJ1ZTsKLX0KLQotLyoK LSAqIFJldHVybiB0aGUgaW5kZXggaXRlbSBmcm9tIHNvLT5jdXJyUG9zLml0ZW1zW3NvLT5jdXJy UG9zLml0ZW1JbmRleF0gdG8gdGhlCi0gKiBpbmRleCBzY2FuIGJ5IHNldHRpbmcgdGhlIHJlbGV2 YW50IGZpZWxkcyBpbiBjYWxsZXIncyBpbmRleCBzY2FuIGRlc2NyaXB0b3IKLSAqLwotc3RhdGlj IGlubGluZSB2b2lkCi1fYnRfcmV0dXJuaXRlbShJbmRleFNjYW5EZXNjIHNjYW4sIEJUU2Nhbk9w YXF1ZSBzbykKLXsKLQlCVFNjYW5Qb3NJdGVtICpjdXJySXRlbSA9ICZzby0+Y3VyclBvcy5pdGVt c1tzby0+Y3VyclBvcy5pdGVtSW5kZXhdOwotCi0JLyogTW9zdCByZWNlbnQgX2J0X3JlYWRwYWdl IG11c3QgaGF2ZSBzdWNjZWVkZWQgKi8KLQlBc3NlcnQoQlRTY2FuUG9zSXNWYWxpZChzby0+Y3Vy clBvcykpOwotCUFzc2VydChzby0+Y3VyclBvcy5pdGVtSW5kZXggPj0gc28tPmN1cnJQb3MuZmly c3RJdGVtKTsKLQlBc3NlcnQoc28tPmN1cnJQb3MuaXRlbUluZGV4IDw9IHNvLT5jdXJyUG9zLmxh c3RJdGVtKTsKLQotCS8qIFJldHVybiBuZXh0IGl0ZW0sIHBlciBhbWdldHR1cGxlIGNvbnRyYWN0 ICovCi0Jc2Nhbi0+eHNfaGVhcHRpZCA9IGN1cnJJdGVtLT5oZWFwVGlkOwotCWlmIChzby0+Y3Vy clR1cGxlcykKLQkJc2Nhbi0+eHNfaXR1cCA9IChJbmRleFR1cGxlKSAoc28tPmN1cnJUdXBsZXMg KyBjdXJySXRlbS0+dHVwbGVPZmZzZXQpOwotfQotCi0vKgotICoJX2J0X3N0ZXBwYWdlKCkgLS0g U3RlcCB0byBuZXh0IHBhZ2UgY29udGFpbmluZyB2YWxpZCBkYXRhIGZvciBzY2FuCi0gKgotICog V3JhcHBlciBvbiBfYnRfcmVhZG5leHRwYWdlIHRoYXQgcGVyZm9ybXMgZmluYWwgc3RlcHMgZm9y IHRoZSBjdXJyZW50IHBhZ2UuCi0gKgotICogT24gZW50cnksIHNvLT5jdXJyUG9zIG11c3QgYmUg dmFsaWQuICBJdHMgYnVmZmVyIHdpbGwgYmUgcGlubmVkLCB0aG91Z2gKLSAqIG5ldmVyIGxvY2tl ZC4gKEFjdHVhbGx5LCB3aGVuIHNvLT5kcm9wUGluIHRoZXJlIHdvbid0IGV2ZW4gYmUgYSBwaW4g aGVsZCwKLSAqIHRob3VnaCBzby0+Y3VyclBvcy5jdXJyUGFnZSBtdXN0IHN0aWxsIGJlIHNldCB0 byBhIHZhbGlkIGJsb2NrIG51bWJlci4pCi0gKi8KLXN0YXRpYyBib29sCi1fYnRfc3RlcHBhZ2Uo SW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKLXsKLQlCVFNjYW5PcGFxdWUg c28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CisJQlRCYXRjaERhdGEgKmJ0cHJpb3Ji YXRjaCA9IEJUQmF0Y2hHZXREYXRhKHNjYW4sIHByaW9yYmF0Y2gpOwogCUJsb2NrTnVtYmVyIGJs a25vLAogCQkJCWxhc3RjdXJyYmxrbm87Ci0KLQlBc3NlcnQoQlRTY2FuUG9zSXNWYWxpZChzby0+ Y3VyclBvcykpOwotCi0JLyogQmVmb3JlIGxlYXZpbmcgY3VycmVudCBwYWdlLCBkZWFsIHdpdGgg YW55IGtpbGxlZCBpdGVtcyAqLwotCWlmIChzby0+bnVtS2lsbGVkID4gMCkKLQkJX2J0X2tpbGxp dGVtcyhzY2FuKTsKKwlib29sCQltb3JlSW5EaXI7CiAKIAkvKgotCSAqIEJlZm9yZSB3ZSBtb2Rp ZnkgY3VyclBvcywgbWFrZSBhIGNvcHkgb2YgdGhlIHBhZ2UgZGF0YSBpZiB0aGVyZSB3YXMgYQot CSAqIG1hcmsgcG9zaXRpb24gdGhhdCBuZWVkcyBpdC4KKwkgKiBUaGUgY29yZSBjb2RlIG11c3Qg ZGVhbCB3aXRoIGNyb3NzLWJhdGNoIHNjYW4gZGlyZWN0aW9uIGNoYW5nZXMgZm9yIHVzLgorCSAq IEEgYmF0Y2ggbWFuYWdlbWVudCByb3V0aW5lIHRoYXQgZmxpcHMgcHJpb3JiYXRjaCdzIHNjYW4g ZGlyZWN0aW9uIChhbmQKKwkgKiBjYWxscyBidHBvc3Jlc2V0IHRvIGRlYWwgd2l0aCB0aGUgc2Nh bidzIGFycmF5IGtleXMpIGlzIHVzZWQgZm9yIHRoaXMuCiAJICovCi0JaWYgKHNvLT5tYXJrSXRl bUluZGV4ID49IDApCi0JewotCQkvKiBidW1wIHBpbiBvbiBjdXJyZW50IGJ1ZmZlciBmb3IgYXNz aWdubWVudCB0byBtYXJrIGJ1ZmZlciAqLwotCQlpZiAoQlRTY2FuUG9zSXNQaW5uZWQoc28tPmN1 cnJQb3MpKQotCQkJSW5jckJ1ZmZlclJlZkNvdW50KHNvLT5jdXJyUG9zLmJ1Zik7Ci0JCW1lbWNw eSgmc28tPm1hcmtQb3MsICZzby0+Y3VyclBvcywKLQkJCSAgIG9mZnNldG9mKEJUU2NhblBvc0Rh dGEsIGl0ZW1zWzFdKSArCi0JCQkgICBzby0+Y3VyclBvcy5sYXN0SXRlbSAqIHNpemVvZihCVFNj YW5Qb3NJdGVtKSk7Ci0JCWlmIChzby0+bWFya1R1cGxlcykKLQkJCW1lbWNweShzby0+bWFya1R1 cGxlcywgc28tPmN1cnJUdXBsZXMsCi0JCQkJICAgc28tPmN1cnJQb3MubmV4dFR1cGxlT2Zmc2V0 KTsKLQkJc28tPm1hcmtQb3MuaXRlbUluZGV4ID0gc28tPm1hcmtJdGVtSW5kZXg7Ci0JCXNvLT5t YXJrSXRlbUluZGV4ID0gLTE7Ci0KLQkJLyoKLQkJICogSWYgd2UncmUganVzdCBhYm91dCB0byBz dGFydCB0aGUgbmV4dCBwcmltaXRpdmUgaW5kZXggc2NhbgotCQkgKiAocG9zc2libGUgd2l0aCBh IHNjYW4gdGhhdCBoYXMgYXJyYXlzIGtleXMsIGFuZCBuZWVkcyB0byBza2lwIHRvCi0JCSAqIGNv bnRpbnVlIGluIHRoZSBjdXJyZW50IHNjYW4gZGlyZWN0aW9uKSwgbW9yZUxlZnQvbW9yZVJpZ2h0 IG9ubHkKLQkJICogaW5kaWNhdGUgdGhlIGVuZCBvZiB0aGUgY3VycmVudCBwcmltaXRpdmUgaW5k ZXggc2Nhbi4gIFRoZXkgbXVzdAotCQkgKiBuZXZlciBiZSB0YWtlbiB0byBpbmRpY2F0ZSB0aGF0 IHRoZSB0b3AtbGV2ZWwgaW5kZXggc2NhbiBoYXMgZW5kZWQKLQkJICogKHRoYXQgd291bGQgYmUg d3JvbmcpLgotCQkgKgotCQkgKiBXZSBjb3VsZCBoYW5kbGUgdGhpcyBjYXNlIGJ5IHRyZWF0aW5n IHRoZSBjdXJyZW50IGFycmF5IGtleXMgYXMKLQkJICogbWFya1BvcyBzdGF0ZS4gIEJ1dCBkZXBl bmRpbmcgb24gdGhlIGN1cnJlbnQgYXJyYXkgc3RhdGUgbGlrZSB0aGlzCi0JCSAqIHdvdWxkIGFk ZCBjb21wbGV4aXR5LiAgSW5zdGVhZCwgd2UganVzdCB1bnNldCBtYXJrUG9zJ3MgY29weSBvZgot CQkgKiBtb3JlUmlnaHQgb3IgbW9yZUxlZnQgKHdoaWNoZXZlciBtaWdodCBiZSBhZmZlY3RlZCks IHdoaWxlIG1ha2luZwotCQkgKiBidHJlc3RycG9zIHJlc2V0IHRoZSBzY2FuJ3MgYXJyYXlzIHRv IHRoZWlyIGluaXRpYWwgc2NhbiBwb3NpdGlvbnMuCi0JCSAqIEluIGVmZmVjdCwgYnRyZXN0cnBv cyBsZWF2ZXMgYWR2YW5jaW5nIHRoZSBhcnJheXMgdXAgdG8gdGhlIGZpcnN0Ci0JCSAqIF9idF9y ZWFkcGFnZSBjYWxsICh0aGF0IHRha2VzIHBsYWNlIGFmdGVyIGl0IGhhcyByZXN0b3JlZCBtYXJr UG9zKS4KLQkJICovCi0JCWlmIChzby0+bmVlZFByaW1TY2FuKQotCQl7Ci0JCQlpZiAoU2NhbkRp cmVjdGlvbklzRm9yd2FyZChzby0+Y3VyclBvcy5kaXIpKQotCQkJCXNvLT5tYXJrUG9zLm1vcmVS aWdodCA9IHRydWU7Ci0JCQllbHNlCi0JCQkJc28tPm1hcmtQb3MubW9yZUxlZnQgPSB0cnVlOwot CQl9Ci0KLQkJLyogbWFyay9yZXN0b3JlIG5vdCBzdXBwb3J0ZWQgYnkgcGFyYWxsZWwgc2NhbnMg Ki8KLQkJQXNzZXJ0KCFzY2FuLT5wYXJhbGxlbF9zY2FuKTsKLQl9Ci0KLQlCVFNjYW5Qb3NVbnBp bklmUGlubmVkKHNvLT5jdXJyUG9zKTsKKwlBc3NlcnQocHJpb3JiYXRjaC0+ZGlyID09IGRpcik7 CiAKIAkvKiBXYWxrIHRvIHRoZSBuZXh0IHBhZ2Ugd2l0aCBkYXRhICovCiAJaWYgKFNjYW5EaXJl Y3Rpb25Jc0ZvcndhcmQoZGlyKSkKLQkJYmxrbm8gPSBzby0+Y3VyclBvcy5uZXh0UGFnZTsKKwkJ Ymxrbm8gPSBidHByaW9yYmF0Y2gtPm5leHRQYWdlOwogCWVsc2UKLQkJYmxrbm8gPSBzby0+Y3Vy clBvcy5wcmV2UGFnZTsKLQlsYXN0Y3VycmJsa25vID0gc28tPmN1cnJQb3MuY3VyclBhZ2U7CisJ CWJsa25vID0gYnRwcmlvcmJhdGNoLT5wcmV2UGFnZTsKKwlsYXN0Y3VycmJsa25vID0gYnRwcmlv cmJhdGNoLT5jdXJyUGFnZTsKKwltb3JlSW5EaXIgPSBTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRp cikgPworCQlidHByaW9yYmF0Y2gtPm1vcmVSaWdodCA6IGJ0cHJpb3JiYXRjaC0+bW9yZUxlZnQ7 CiAKIAkvKgotCSAqIENhbmNlbCBwcmltaXRpdmUgaW5kZXggc2NhbnMgdGhhdCB3ZXJlIHNjaGVk dWxlZCB3aGVuIHRoZSBjYWxsIHRvCi0JICogX2J0X3JlYWRwYWdlIGZvciBjdXJyUG9zIGhhcHBl bmVkIHRvIHVzZSB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uIHRvIHRoZQotCSAqIG9uZSB0aGF0IHdl J3JlIHN0ZXBwaW5nIGluIG5vdy4gIChJdCdzIG9rYXkgdG8gbGVhdmUgdGhlIHNjYW4ncyBhcnJh eQotCSAqIGtleXMgYXMtaXMsIHNpbmNlIHRoZSBuZXh0IF9idF9yZWFkcGFnZSB3aWxsIGFkdmFu Y2UgdGhlbS4pCisJICogRm9yIGJpdG1hcCBzY2FuIGNhbGxlcnMsIHJlbGVhc2UgdGhlIHByaW9y IGJhdGNoIG5vdyBzbyB0aGF0CisJICogX2J0X3JlYWRuZXh0cGFnZSBjYW4gcmV1c2UgaXRzIG1l bW9yeS4gIFRoYXQgd2F5IGJpdG1hcCBzY2FucyBuZXZlcgorCSAqIG5lZWQgbW9yZSB0aGFuIG9u ZSBiYXRjaCBhbGxvY2F0aW9uLgogCSAqLwotCWlmIChzby0+Y3VyclBvcy5kaXIgIT0gZGlyKQot CQlzby0+bmVlZFByaW1TY2FuID0gZmFsc2U7CisJaWYgKCFzY2FuLT51c2ViYXRjaHJpbmcpCisJ CWluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlKHNjYW4sIHByaW9yYmF0Y2gpOworCisJaWYgKGJs a25vID09IFBfTk9ORSB8fCAhbW9yZUluRGlyKQorCXsKKwkJLyoKKwkJICogcHJpb3JiYXRjaCdz IHBhZ2UgaXMga25vd24gdG8gYmUgdGhlIGZpbmFsIGxlYWYgcGFnZSB3aXRoIG1hdGNoZXMKKwkJ ICogaW4gdGhpcyBzY2FuIGRpcmVjdGlvbiAoaXRzIF9idF9yZWFkcGFnZSBjYWxsIGZpZ3VyZWQg dGhhdCBvdXQpLgorCQkgKgorCQkgKiBOb3RlOiBpZiBzby0+bmVlZFByaW1TY2FuIGlzIHNldCwg dGhlbiBwcmlvcmJhdGNoJ3MgbGVhZiBwYWdlIGlzCisJCSAqIGFjdHVhbGx5IGp1c3QgdGhlIGZp bmFsIHBhZ2UgZm9yIHRoZSBjdXJyZW50IHByaW1pdGl2ZSBpbmRleCBzY2FuCisJCSAqIGluIHRo aXMgc2NhbiBkaXJlY3Rpb24gKHRoZSBzY2FuIHdpbGwgY29udGludWUgaW4gX2J0X2ZpcnN0KS4K KwkJICovCisJCV9idF9wYXJhbGxlbF9kb25lKHNjYW4pOworCQlyZXR1cm4gTlVMTDsKKwl9CisK KwkvKiBwYXJhbGxlbCBzY2FuIG11c3Qgc2VpemUgdGhlIHNjYW4gdG8gZ2V0IG5leHQgYmxrbm8g Ki8KKwlpZiAoc2Nhbi0+cGFyYWxsZWxfc2NhbiAhPSBOVUxMICYmCisJCSFfYnRfcGFyYWxsZWxf c2VpemUoc2NhbiwgJmJsa25vLCAmbGFzdGN1cnJibGtubywgZmFsc2UpKQorCQlyZXR1cm4gTlVM TDsJCQkvKiBkb25lIGlmZiBzby0+bmVlZFByaW1TY2FuIHdhc24ndCBzZXQgKi8KIAogCXJldHVy biBfYnRfcmVhZG5leHRwYWdlKHNjYW4sIGJsa25vLCBsYXN0Y3VycmJsa25vLCBkaXIsIGZhbHNl KTsKIH0KQEAgLTE3MzIsMTc4ICsxNjQyLDE2OSBAQCBfYnRfc3RlcHBhZ2UoSW5kZXhTY2FuRGVz YyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKICAqIHRvIHN0b3AgdGhlIHNjYW4gb24gdGhpcyBw YWdlIGJ5IGNhbGxpbmcgX2J0X2NoZWNra2V5cyBhZ2FpbnN0IHRoZSBoaWdoCiAgKiBrZXkuICBT ZWUgX2J0X3JlYWRwYWdlIGZvciBmdWxsIGRldGFpbHMuCiAgKgotICogT24gZW50cnksIHNvLT5j dXJyUG9zIG11c3QgYmUgcGlubmVkIGFuZCBsb2NrZWQgKHNvIG9mZm51bSBzdGF5cyB2YWxpZCku CisgKiBPbiBlbnRyeSwgZmlyc3RiYXRjaCBtdXN0IGJlIHBpbm5lZCBhbmQgbG9ja2VkIChzbyBv ZmZudW0gc3RheXMgdmFsaWQpLgogICogUGFyYWxsZWwgc2NhbiBjYWxsZXJzIG11c3QgaGF2ZSBz ZWl6ZWQgdGhlIHNjYW4gYmVmb3JlIGNhbGxpbmcgaGVyZS4KICAqCi0gKiBPbiBleGl0LCB3ZSds bCBoYXZlIHVwZGF0ZWQgc28tPmN1cnJQb3MgYW5kIHJldGFpbmVkIGxvY2tzIGFuZCBwaW5zCi0g KiBhY2NvcmRpbmcgdG8gdGhlIHNhbWUgcnVsZXMgYXMgdGhvc2UgbGFpZCBvdXQgZm9yIF9idF9y ZWFkbmV4dHBhZ2UgZXhpdC4KLSAqIExpa2UgX2J0X3JlYWRuZXh0cGFnZSwgb3VyIHJldHVybiB2 YWx1ZSBpbmRpY2F0ZXMgaWYgdGhlcmUgYXJlIGFueSBtYXRjaGluZwotICogcmVjb3JkcyBpbiB0 aGUgZ2l2ZW4gZGlyZWN0aW9uLgorICogT24gc3VjY2VzcyBleGl0LCByZXR1cm5zIHVubG9ja2Vk IGJhdGNoIGNvbnRhaW5pbmcgZGF0YSBmcm9tIHRoZSBuZXh0IHBhZ2UKKyAqIHRoYXQgaGFzIGF0 IGxlYXN0IG9uZSBtYXRjaGluZyBpdGVtLiAgSWYgdGhlcmUgYXJlIG5vIG1hdGNoaW5nIGl0ZW1z IGluIHRoZQorICogZ2l2ZW4gc2NhbiBkaXJlY3Rpb24sIHdlIGp1c3QgcmV0dXJuIE5VTEwuICBO b3RlIHRoYXQgcmV0dXJuaW5nIE5VTEwKKyAqIGRvZXNuJ3QgbmVjZXNzYXJpbHkgbWVhbiB0aGUg ZW5kIG9mIHRoZSB0b3AtbGV2ZWwgc2NhbjsgYnRnZXRiYXRjaCBhbmQKKyAqIGJ0Z2V0Yml0bWFw IGNoZWNrIHNvLT5uZWVkUHJpbVNjYW4gdG8gZGV0ZXJtaW5lIGlmIGFub3RoZXIgcHJpbWl0aXZl IGluZGV4CisgKiBzY2FuIGlzIHJlcXVpcmVkLgogICoKICAqIFdlIGFsd2F5cyByZWxlYXNlIHRo ZSBzY2FuIGZvciBhIHBhcmFsbGVsIHNjYW4gY2FsbGVyLCByZWdhcmRsZXNzIG9mCiAgKiBzdWNj ZXNzIG9yIGZhaWx1cmU7IHdlJ2xsIGNhbGwgX2J0X3BhcmFsbGVsX3JlbGVhc2UgYXMgc29vbiBh cyBwb3NzaWJsZS4KICAqLwotc3RhdGljIGJvb2wKLV9idF9yZWFkZmlyc3RwYWdlKEluZGV4U2Nh bkRlc2Mgc2NhbiwgT2Zmc2V0TnVtYmVyIG9mZm51bSwgU2NhbkRpcmVjdGlvbiBkaXIpCitzdGF0 aWMgSW5kZXhTY2FuQmF0Y2gKK19idF9yZWFkZmlyc3RwYWdlKEluZGV4U2NhbkRlc2Mgc2Nhbiwg SW5kZXhTY2FuQmF0Y2ggZmlyc3RiYXRjaCwKKwkJCQkgIE9mZnNldE51bWJlciBvZmZudW0sIFNj YW5EaXJlY3Rpb24gZGlyKQogewogCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNj YW4tPm9wYXF1ZTsKKwlCVEJhdGNoRGF0YSAqYnRmaXJzdGJhdGNoID0gQlRCYXRjaEdldERhdGEo c2NhbiwgZmlyc3RiYXRjaCk7CisJQmxvY2tOdW1iZXIgYmxrbm8sCisJCQkJbGFzdGN1cnJibGtu bzsKKwlib29sCQltb3JlSW5EaXI7CiAKLQlzby0+bnVtS2lsbGVkID0gMDsJCQkvKiBqdXN0IHBh cmFub2lhICovCi0Jc28tPm1hcmtJdGVtSW5kZXggPSAtMTsJCS8qIGRpdHRvICovCi0KLQkvKiBJ bml0aWFsaXplIHNvLT5jdXJyUG9zIGZvciB0aGUgZmlyc3QgcGFnZSAocGFnZSBpbiBzby0+Y3Vy clBvcy5idWYpICovCisJLyogSW5pdGlhbGl6ZSBmaXJzdGJhdGNoJ3MgcG9zaXRpb24gZm9yIHRo ZSBmaXJzdCBwYWdlICovCiAJaWYgKHNvLT5uZWVkUHJpbVNjYW4pCiAJewogCQlBc3NlcnQoc28t Pm51bUFycmF5S2V5cyk7CiAKLQkJc28tPmN1cnJQb3MubW9yZUxlZnQgPSB0cnVlOwotCQlzby0+ Y3VyclBvcy5tb3JlUmlnaHQgPSB0cnVlOworCQlidGZpcnN0YmF0Y2gtPm1vcmVMZWZ0ID0gdHJ1 ZTsKKwkJYnRmaXJzdGJhdGNoLT5tb3JlUmlnaHQgPSB0cnVlOwogCQlzby0+bmVlZFByaW1TY2Fu ID0gZmFsc2U7CiAJfQogCWVsc2UgaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKIAl7 Ci0JCXNvLT5jdXJyUG9zLm1vcmVMZWZ0ID0gZmFsc2U7Ci0JCXNvLT5jdXJyUG9zLm1vcmVSaWdo dCA9IHRydWU7CisJCWJ0Zmlyc3RiYXRjaC0+bW9yZUxlZnQgPSBmYWxzZTsKKwkJYnRmaXJzdGJh dGNoLT5tb3JlUmlnaHQgPSB0cnVlOwogCX0KIAllbHNlCiAJewotCQlzby0+Y3VyclBvcy5tb3Jl TGVmdCA9IHRydWU7Ci0JCXNvLT5jdXJyUG9zLm1vcmVSaWdodCA9IGZhbHNlOworCQlidGZpcnN0 YmF0Y2gtPm1vcmVMZWZ0ID0gdHJ1ZTsKKwkJYnRmaXJzdGJhdGNoLT5tb3JlUmlnaHQgPSBmYWxz ZTsKIAl9CiAKIAkvKgogCSAqIEF0dGVtcHQgdG8gbG9hZCBtYXRjaGluZyB0dXBsZXMgZnJvbSB0 aGUgZmlyc3QgcGFnZS4KIAkgKgotCSAqIE5vdGUgdGhhdCBfYnRfcmVhZHBhZ2Ugd2lsbCBmaW5p c2ggaW5pdGlhbGl6aW5nIHRoZSBzby0+Y3VyclBvcyBmaWVsZHMuCisJICogTm90ZSB0aGF0IF9i dF9yZWFkcGFnZSB3aWxsIGZpbmlzaCBpbml0aWFsaXppbmcgdGhlIGZpcnN0YmF0Y2ggZmllbGRz LgogCSAqIF9idF9yZWFkcGFnZSBhbHNvIHJlbGVhc2VzIHBhcmFsbGVsIHNjYW4gKGV2ZW4gd2hl biBpdCByZXR1cm5zIGZhbHNlKS4KIAkgKi8KLQlpZiAoX2J0X3JlYWRwYWdlKHNjYW4sIGRpciwg b2ZmbnVtLCB0cnVlKSkKKwlpZiAoX2J0X3JlYWRwYWdlKHNjYW4sIGZpcnN0YmF0Y2gsIGRpciwg b2ZmbnVtLCB0cnVlKSkKIAl7Ci0JCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247 Ci0KLQkJLyoKLQkJICogX2J0X3JlYWRwYWdlIHN1Y2NlZWRlZC4gIERyb3AgdGhlIGxvY2sgKGFu ZCBtYXliZSB0aGUgcGluKSBvbgotCQkgKiBzby0+Y3VyclBvcy5idWYgaW4gcHJlcGFyYXRpb24g Zm9yIGJ0Z2V0dHVwbGUgcmV0dXJuaW5nIHR1cGxlcy4KLQkJICovCi0JCUFzc2VydChCVFNjYW5Q b3NJc1Bpbm5lZChzby0+Y3VyclBvcykpOwotCQlfYnRfZHJvcF9sb2NrX2FuZF9tYXliZV9waW4o cmVsLCBzbyk7Ci0JCXJldHVybiB0cnVlOworCQkvKiBfYnRfcmVhZHBhZ2Ugc2F2ZWQgb25lIG9y IG1vcmUgbWF0Y2hlcyBpbiBmaXJzdGJhdGNoLml0ZW1zW10gKi8KKwkJX2J0X2JhdGNoX3VubG9j ayhzY2FuLCBmaXJzdGJhdGNoLCBidGZpcnN0YmF0Y2gtPmJ1Zik7CisJCXJldHVybiBmaXJzdGJh dGNoOwogCX0KIAotCS8qIFRoZXJlJ3Mgbm8gYWN0dWFsbHktbWF0Y2hpbmcgZGF0YSBvbiB0aGUg cGFnZSBpbiBzby0+Y3VyclBvcy5idWYgKi8KLQlfYnRfdW5sb2NrYnVmKHNjYW4tPmluZGV4UmVs YXRpb24sIHNvLT5jdXJyUG9zLmJ1Zik7CisJLyogVGhlcmUncyBubyBhY3R1YWxseS1tYXRjaGlu ZyBkYXRhIG9uIHRoZSBwYWdlIHJldHVybmVkIGJ5IF9idF9zZWFyY2ggKi8KKwlfYnRfcmVsYnVm KHNjYW4tPmluZGV4UmVsYXRpb24sIGJ0Zmlyc3RiYXRjaC0+YnVmKTsKIAotCS8qIENhbGwgX2J0 X3JlYWRuZXh0cGFnZSB1c2luZyBpdHMgX2J0X3N0ZXBwYWdlIHdyYXBwZXIgZnVuY3Rpb24gKi8K LQlpZiAoIV9idF9zdGVwcGFnZShzY2FuLCBkaXIpKQotCQlyZXR1cm4gZmFsc2U7CisJLyogV2Fs ayB0byB0aGUgbmV4dCBwYWdlIHdpdGggZGF0YSAqLworCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3 YXJkKGRpcikpCisJCWJsa25vID0gYnRmaXJzdGJhdGNoLT5uZXh0UGFnZTsKKwllbHNlCisJCWJs a25vID0gYnRmaXJzdGJhdGNoLT5wcmV2UGFnZTsKKwlsYXN0Y3VycmJsa25vID0gYnRmaXJzdGJh dGNoLT5jdXJyUGFnZTsKKwltb3JlSW5EaXIgPSBTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikg PworCQlidGZpcnN0YmF0Y2gtPm1vcmVSaWdodCA6IGJ0Zmlyc3RiYXRjaC0+bW9yZUxlZnQ7CiAK LQkvKiBfYnRfcmVhZHBhZ2UgZm9yIGEgbGF0ZXIgcGFnZSAobm93IGluIHNvLT5jdXJyUG9zKSBz dWNjZWVkZWQgKi8KLQlyZXR1cm4gdHJ1ZTsKKwkvKiBSZWxlYXNlIGZpcnN0YmF0Y2ggKHdpbGwg YmUgcmVjeWNsZWQgaWYgd2UgcmVhY2ggX2J0X3JlYWRuZXh0cGFnZSkgKi8KKwlpbmRleGFtX3V0 aWxfYmF0Y2hfcmVsZWFzZShzY2FuLCBmaXJzdGJhdGNoKTsKKworCWlmIChibGtubyA9PSBQX05P TkUgfHwgIW1vcmVJbkRpcikKKwl7CisJCS8qCisJCSAqIGZpcnN0YmF0Y2ggX2J0X3JlYWRwYWdl IGNhbGwgZW5kZWQgc2NhbiBpbiB0aGlzIGRpcmVjdGlvbiAodGhvdWdoCisJCSAqIGlmIHNvLT5u ZWVkUHJpbVNjYW4gd2FzIHNldCB0aGUgc2NhbiB3aWxsIGNvbnRpbnVlIGluIF9idF9maXJzdCkK KwkJICovCisJCV9idF9wYXJhbGxlbF9kb25lKHNjYW4pOworCQlyZXR1cm4gTlVMTDsKKwl9CisK KwkvKiBwYXJhbGxlbCBzY2FuIG11c3Qgc2VpemUgdGhlIHNjYW4gdG8gZ2V0IG5leHQgYmxrbm8g Ki8KKwlpZiAoc2Nhbi0+cGFyYWxsZWxfc2NhbiAhPSBOVUxMICYmCisJCSFfYnRfcGFyYWxsZWxf c2VpemUoc2NhbiwgJmJsa25vLCAmbGFzdGN1cnJibGtubywgZmFsc2UpKQorCQlyZXR1cm4gTlVM TDsJCQkvKiBkb25lIGlmZiBzby0+bmVlZFByaW1TY2FuIHdhc24ndCBzZXQgKi8KKworCXJldHVy biBfYnRfcmVhZG5leHRwYWdlKHNjYW4sIGJsa25vLCBsYXN0Y3VycmJsa25vLCBkaXIsIGZhbHNl KTsKIH0KIAogLyoKICAqCV9idF9yZWFkbmV4dHBhZ2UoKSAtLSBSZWFkIG5leHQgcGFnZSBjb250 YWluaW5nIHZhbGlkIGRhdGEgZm9yIF9idF9uZXh0CiAgKgotICogQ2FsbGVyJ3MgYmxrbm8gaXMg dGhlIG5leHQgaW50ZXJlc3RpbmcgcGFnZSdzIGxpbmssIHRha2VuIGZyb20gZWl0aGVyIHRoZQot ICogcHJldmlvdXNseS1zYXZlZCByaWdodCBsaW5rIG9yIGxlZnQgbGluay4gIGxhc3RjdXJyYmxr bm8gaXMgdGhlIHBhZ2UgdGhhdAotICogd2FzIGN1cnJlbnQgYXQgdGhlIHBvaW50IHdoZXJlIHRo ZSBibGtubyBsaW5rIHdhcyBzYXZlZCwgd2hpY2ggd2UgdXNlIHRvCi0gKiByZWFzb24gYWJvdXQg Y29uY3VycmVudCBwYWdlIHNwbGl0cy9wYWdlIGRlbGV0aW9ucyBkdXJpbmcgYmFja3dhcmRzIHNj YW5zLgotICogSW4gdGhlIGNvbW1vbiBjYXNlIHdoZXJlIHNlaXplZD1mYWxzZSwgYmxrbm8gaXMg ZWl0aGVyIHNvLT5jdXJyUG9zLm5leHRQYWdlCi0gKiBvciBzby0+Y3VyclBvcy5wcmV2UGFnZSwg YW5kIGxhc3RjdXJyYmxrbm8gaXMgc28tPmN1cnJQb3MuY3VyclBhZ2UuCisgKiBDYWxsZXIncyBi bGtubyBpcyB0aGUgcHJpb3IgYmF0Y2gncyBuZXh0UGFnZSBvciBwcmV2UGFnZSAoZGVwZW5kaW5n IG9uIHRoZQorICogY3VycmVudCBzY2FuIGRpcmVjdGlvbiksIGFuZCBsYXN0Y3VycmJsa25vIGlz IHRoZSBwcmlvciBiYXRjaCdzIGN1cnJQYWdlLgorICogV2UgdXNlIGxhc3RjdXJyYmxrbm8gdG8g cmVhc29uIGFib3V0IGNvbmN1cnJlbnQgcGFnZSBzcGxpdHMvcGFnZSBkZWxldGlvbnMKKyAqIGR1 cmluZyBiYWNrd2FyZHMgc2NhbnMuCiAgKgotICogT24gZW50cnksIHNvLT5jdXJyUG9zIHNob3Vs ZG4ndCBiZSBsb2NrZWQgYnkgY2FsbGVyLiAgc28tPmN1cnJQb3MuYnVmIG11c3QKLSAqIGJlIElu dmFsaWRCdWZmZXIvdW5waW5uZWQgYXMgbmVlZGVkIGJ5IGNhbGxlciAobm90ZSB0aGF0IGxhc3Rj dXJyYmxrbm8KLSAqIHdvbid0IG5lZWQgdG8gYmUgcmVhZCBhZ2FpbiBpbiBhbG1vc3QgYWxsIGNh c2VzKS4gIFBhcmFsbGVsIHNjYW4gY2FsbGVycwotICogdGhhdCBzZWl6ZWQgdGhlIHNjYW4gYmVm b3JlIGNhbGxpbmcgaGVyZSBzaG91bGQgcGFzcyBzZWl6ZWQ9dHJ1ZTsgc3VjaCBhCi0gKiBjYWxs ZXIncyBibGtubyBhbmQgbGFzdGN1cnJibGtubyBhcmd1bWVudHMgY29tZSBmcm9tIHRoZSBzZWl6 ZWQgc2Nhbi4KLSAqIHNlaXplZD1mYWxzZSBjYWxsZXJzIGp1c3QgcGFzcyB1cyB0aGUgYmxrbm8v bGFzdGN1cnJibGtubyB0YWtlbiBmcm9tIHRoZWlyCi0gKiBzby0+Y3VyclBvcywgd2hpY2ggKGFs b25nIHdpdGggc28tPmN1cnJQb3MgaXRzZWxmKSBjYW4gYmUgdXNlZCB0byBlbmQgdGhlCi0gKiBz Y2FuLiAgQSBzZWl6ZWQ9ZmFsc2UgY2FsbGVyJ3MgYmxrbm8gY2FuIG5ldmVyIGJlIGFzc3VtZWQg dG8gYmUgdGhlIHBhZ2UKLSAqIHRoYXQgbXVzdCBiZSByZWFkIG5leHQgZHVyaW5nIGEgcGFyYWxs ZWwgc2NhbiwgdGhvdWdoLiAgV2UgbXVzdCBmaWd1cmUgdGhhdAotICogcGFydCBvdXQgZm9yIG91 cnNlbHZlcyBieSBzZWl6aW5nIHRoZSBzY2FuICh0aGUgY29ycmVjdCBwYWdlIHRvIHJlYWQgbWln aHQKLSAqIGFscmVhZHkgYmUgYmV5b25kIHRoZSBzZWl6ZWQ9ZmFsc2UgY2FsbGVyJ3MgYmxrbm8g ZHVyaW5nIGEgcGFyYWxsZWwgc2NhbiwKLSAqIHVubGVzcyBibGtuby9zby0+Y3VyclBvcy5uZXh0 UGFnZS9zby0+Y3VyclBvcy5wcmV2UGFnZSBpcyBhbHJlYWR5IFBfTk9ORSwKLSAqIG9yIHVubGVz cyBzby0+Y3VyclBvcy5tb3JlUmlnaHQvc28tPmN1cnJQb3MubW9yZUxlZnQgaXMgYWxyZWFkeSB1 bnNldCkuCisgKiBPbiBlbnRyeSwgbm8gcGFnZSBzaG91bGQgYmUgbG9ja2VkIGJ5IGNhbGxlci4K ICAqCi0gKiBPbiBzdWNjZXNzIGV4aXQsIHNvLT5jdXJyUG9zIGlzIHVwZGF0ZWQgdG8gY29udGFp biBkYXRhIGZyb20gdGhlIG5leHQKLSAqIGludGVyZXN0aW5nIHBhZ2UsIGFuZCB3ZSByZXR1cm4g dHJ1ZS4gIFdlIGhvbGQgYSBwaW4gb24gdGhlIGJ1ZmZlciBvbgotICogc3VjY2VzcyBleGl0IChl eGNlcHQgZHVyaW5nIHNvLT5kcm9wUGluIGluZGV4IHNjYW5zLCB3aGVuIHdlIGRyb3AgdGhlIHBp bgotICogZWFnZXJseSB0byBhdm9pZCBibG9ja2luZyBWQUNVVU0pLgorICogT24gc3VjY2VzcyBl eGl0LCByZXR1cm5zIHVubG9ja2VkIGJhdGNoIGNvbnRhaW5pbmcgZGF0YSBmcm9tIHRoZSBuZXh0 IHBhZ2UKKyAqIHRoYXQgaGFzIGF0IGxlYXN0IG9uZSBtYXRjaGluZyBpdGVtLiAgSWYgdGhlcmUg YXJlIG5vIG1vcmUgbWF0Y2hpbmcgaXRlbXMKKyAqIGluIHRoZSBnaXZlbiBzY2FuIGRpcmVjdGlv biwgd2UganVzdCByZXR1cm4gTlVMTC4gIE5vdGUgdGhhdCByZXR1cm5pbmcgTlVMTAorICogZG9l c24ndCBuZWNlc3NhcmlseSBtZWFuIHRoZSBlbmQgb2YgdGhlIHRvcC1sZXZlbCBzY2FuOyBidGdl dGJhdGNoIGFuZAorICogYnRnZXRiaXRtYXAgY2hlY2sgc28tPm5lZWRQcmltU2NhbiB0byBkZXRl cm1pbmUgaWYgYW5vdGhlciBwcmltaXRpdmUgaW5kZXgKKyAqIHNjYW4gaXMgcmVxdWlyZWQuCiAg KgotICogSWYgdGhlcmUgYXJlIG5vIG1vcmUgbWF0Y2hpbmcgcmVjb3JkcyBpbiB0aGUgZ2l2ZW4g ZGlyZWN0aW9uLCB3ZSBpbnZhbGlkYXRlCi0gKiBzby0+Y3VyclBvcyAod2hpbGUgZW5zdXJpbmcg aXQgcmV0YWlucyBubyBsb2NrcyBvciBwaW5zKSwgYW5kIHJldHVybiBmYWxzZS4KLSAqCi0gKiBX ZSBhbHdheXMgcmVsZWFzZSB0aGUgc2NhbiBmb3IgYSBwYXJhbGxlbCBzY2FuIGNhbGxlciwgcmVn YXJkbGVzcyBvZgotICogc3VjY2VzcyBvciBmYWlsdXJlOyB3ZSdsbCBjYWxsIF9idF9wYXJhbGxl bF9yZWxlYXNlIGFzIHNvb24gYXMgcG9zc2libGUuCisgKiBQYXJhbGxlbCBzY2FuIGNhbGxlcnMg bXVzdCBzZWl6ZSB0aGUgc2NhbiBiZWZvcmUgY2FsbGluZyBoZXJlLiAgYmxrbm8gYW5kCisgKiBs YXN0Y3VycmJsa25vIHNob3VsZCBjb21lIGZyb20gdGhlIHNlaXplZCBzY2FuLiAgV2UnbGwgcmVs ZWFzZSB0aGUgc2NhbiBhcworICogc29vbiBhcyBwb3NzaWJsZS4KICAqLwotc3RhdGljIGJvb2wK K3N0YXRpYyBJbmRleFNjYW5CYXRjaAogX2J0X3JlYWRuZXh0cGFnZShJbmRleFNjYW5EZXNjIHNj YW4sIEJsb2NrTnVtYmVyIGJsa25vLAotCQkJCSBCbG9ja051bWJlciBsYXN0Y3VycmJsa25vLCBT Y2FuRGlyZWN0aW9uIGRpciwgYm9vbCBzZWl6ZWQpCisJCQkJIEJsb2NrTnVtYmVyIGxhc3RjdXJy Ymxrbm8sIFNjYW5EaXJlY3Rpb24gZGlyLCBib29sIGZpcnN0cGFnZSkKIHsKIAlSZWxhdGlvbgly ZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOwotCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFx dWUpIHNjYW4tPm9wYXF1ZTsKKwlJbmRleFNjYW5CYXRjaCBuZXdiYXRjaDsKKwlCVEJhdGNoRGF0 YSAqYnRuZXdiYXRjaDsKIAotCUFzc2VydChzby0+Y3VyclBvcy5jdXJyUGFnZSA9PSBsYXN0Y3Vy cmJsa25vIHx8IHNlaXplZCk7Ci0JQXNzZXJ0KCEoYmxrbm8gPT0gUF9OT05FICYmIHNlaXplZCkp OwotCUFzc2VydCghQlRTY2FuUG9zSXNQaW5uZWQoc28tPmN1cnJQb3MpKTsKKwkvKiBBbGxvY2F0 ZSBzcGFjZSBmb3IgbmV3IGJhdGNoICovCisJbmV3YmF0Y2ggPSBpbmRleGFtX3V0aWxfYmF0Y2hf YWxsb2Moc2Nhbik7CisJYnRuZXdiYXRjaCA9IEJUQmF0Y2hHZXREYXRhKHNjYW4sIG5ld2JhdGNo KTsKIAogCS8qCi0JICogUmVtZW1iZXIgdGhhdCB0aGUgc2NhbiBhbHJlYWR5IHJlYWQgbGFzdGN1 cnJibGtubywgYSBwYWdlIHRvIHRoZSBsZWZ0Ci0JICogb2YgYmxrbm8gKG9yIHJlbWVtYmVyIHJl YWRpbmcgYSBwYWdlIHRvIHRoZSByaWdodCwgZm9yIGJhY2t3YXJkcyBzY2FucykKKwkgKiBuZXdi YXRjaCB3aWxsIGJlIHRoZSBiYXRjaCBmb3IgYmxrbm8sIGEgcGFnZSB0byB0aGUgcmlnaHQgb2YK KwkgKiBsYXN0Y3VycmJsa25vIChvciB0byB0aGUgbGVmdCwgd2hlbiB0aGUgc2NhbiBpcyBtb3Zp bmcgYmFja3dhcmRzKS4KKwkgKgorCSAqIE5vdGU6IGNhbGxlcidzIGJsa25vIGlzIHRlbnRhdGl2 ZS4gIG5ld2JhdGNoIGFjdHVhbGx5IHN0b3JlcyBtYXRjaGVzCisJICogZnJvbSB0aGUgbmV4dCBs ZWFmIHBhZ2UgaW4gdGhpcyBzY2FuIGRpcmVjdGlvbiB0aGF0IGhhcyBhdCBsZWFzdCBvbmUKKwkg KiBtYXRjaGluZyBpdGVtLiAgVGhpcyBpcyB1c3VhbGx5IGNhbGxlcidzIGJsa25vIHBhZ2UsIGJ1 dCBtaWdodCBiZSBzb21lCisJICogb3RoZXIgcGFnZSB0byBpdHMgcmlnaHQgKG9yIHRvIGl0cyBs ZWZ0KSBpbnN0ZWFkLgogCSAqLwotCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCi0J CXNvLT5jdXJyUG9zLm1vcmVMZWZ0ID0gdHJ1ZTsKLQllbHNlCi0JCXNvLT5jdXJyUG9zLm1vcmVS aWdodCA9IHRydWU7CisJYnRuZXdiYXRjaC0+bW9yZUxlZnQgPSB0cnVlOwkvKiBmb3IgbGFzdGN1 cnJibGtubyAob3IgdGVudGF0aXZlKSAqLworCWJ0bmV3YmF0Y2gtPm1vcmVSaWdodCA9IHRydWU7 CS8qIHRlbnRhdGl2ZSAob3IgZm9yIGxhc3RjdXJyYmxrbm8pICovCiAKIAlmb3IgKDs7KQogCXsK IAkJUGFnZQkJcGFnZTsKIAkJQlRQYWdlT3BhcXVlIG9wYXF1ZTsKIAotCQlpZiAoYmxrbm8gPT0g UF9OT05FIHx8Ci0JCQkoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpID8KLQkJCSAhc28tPmN1 cnJQb3MubW9yZVJpZ2h0IDogIXNvLT5jdXJyUG9zLm1vcmVMZWZ0KSkKLQkJewotCQkJLyogbW9z dCByZWNlbnQgX2J0X3JlYWRwYWdlIGNhbGwgKGZvciBsYXN0Y3VycmJsa25vKSBlbmRlZCBzY2Fu ICovCi0JCQlBc3NlcnQoc28tPmN1cnJQb3MuY3VyclBhZ2UgPT0gbGFzdGN1cnJibGtubyAmJiAh c2VpemVkKTsKLQkJCUJUU2NhblBvc0ludmFsaWRhdGUoc28tPmN1cnJQb3MpOwotCQkJX2J0X3Bh cmFsbGVsX2RvbmUoc2Nhbik7CS8qIGlmZiAhc28tPm5lZWRQcmltU2NhbiAqLwotCQkJcmV0dXJu IGZhbHNlOwotCQl9Ci0KLQkJQXNzZXJ0KCFzby0+bmVlZFByaW1TY2FuKTsKLQotCQkvKiBwYXJh bGxlbCBzY2FuIG11c3QgbmV2ZXIgYWN0dWFsbHkgdmlzaXQgc28tPmN1cnJQb3MgYmxrbm8gKi8K LQkJaWYgKCFzZWl6ZWQgJiYgc2Nhbi0+cGFyYWxsZWxfc2NhbiAhPSBOVUxMICYmCi0JCQkhX2J0 X3BhcmFsbGVsX3NlaXplKHNjYW4sICZibGtubywgJmxhc3RjdXJyYmxrbm8sIGZhbHNlKSkKLQkJ ewotCQkJLyogd2hvbGUgc2NhbiBpcyBub3cgZG9uZSAob3IgYW5vdGhlciBwcmltaXRpdmUgc2Nh biByZXF1aXJlZCkgKi8KLQkJCUJUU2NhblBvc0ludmFsaWRhdGUoc28tPmN1cnJQb3MpOwotCQkJ cmV0dXJuIGZhbHNlOwotCQl9CisJCUFzc2VydCghKChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1 ZSktPm5lZWRQcmltU2Nhbik7CisJCUFzc2VydChibGtubyAhPSBQX05PTkUgJiYgbGFzdGN1cnJi bGtubyAhPSBQX05PTkUpOwogCiAJCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCiAJ CXsKIAkJCS8qIHJlYWQgYmxrbm8sIGJ1dCBjaGVjayBmb3IgaW50ZXJydXB0cyBmaXJzdCAqLwog CQkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKLQkJCXNvLT5jdXJyUG9zLmJ1ZiA9IF9idF9nZXRi dWYocmVsLCBibGtubywgQlRfUkVBRCk7CisJCQlidG5ld2JhdGNoLT5idWYgPSBfYnRfZ2V0YnVm KHJlbCwgYmxrbm8sIEJUX1JFQUQpOwogCQl9CiAJCWVsc2UKIAkJewogCQkJLyogcmVhZCBibGtu bywgYXZvaWRpbmcgcmFjZSAoYWxzbyBjaGVja3MgZm9yIGludGVycnVwdHMpICovCi0JCQlzby0+ Y3VyclBvcy5idWYgPSBfYnRfbG9ja19hbmRfdmFsaWRhdGVfbGVmdChyZWwsICZibGtubywKKwkJ CWJ0bmV3YmF0Y2gtPmJ1ZiA9IF9idF9sb2NrX2FuZF92YWxpZGF0ZV9sZWZ0KHJlbCwgJmJsa25v LAogCQkJCQkJCQkJCQkJCQkgbGFzdGN1cnJibGtubyk7Ci0JCQlpZiAoc28tPmN1cnJQb3MuYnVm ID09IEludmFsaWRCdWZmZXIpCisJCQlpZiAoYnRuZXdiYXRjaC0+YnVmID09IEludmFsaWRCdWZm ZXIpCiAJCQl7CiAJCQkJLyogbXVzdCBoYXZlIGJlZW4gYSBjb25jdXJyZW50IGRlbGV0aW9uIG9m IGxlZnRtb3N0IHBhZ2UgKi8KLQkJCQlCVFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5jdXJyUG9zKTsK IAkJCQlfYnRfcGFyYWxsZWxfZG9uZShzY2FuKTsKLQkJCQlyZXR1cm4gZmFsc2U7CisJCQkJaW5k ZXhhbV91dGlsX2JhdGNoX3JlbGVhc2Uoc2NhbiwgbmV3YmF0Y2gpOworCQkJCXJldHVybiBOVUxM OwogCQkJfQogCQl9CiAKLQkJcGFnZSA9IEJ1ZmZlckdldFBhZ2Uoc28tPmN1cnJQb3MuYnVmKTsK KwkJcGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnRuZXdiYXRjaC0+YnVmKTsKIAkJb3BhcXVlID0gQlRQ YWdlR2V0T3BhcXVlKHBhZ2UpOwogCQlsYXN0Y3VycmJsa25vID0gYmxrbm87CiAJCWlmIChsaWtl bHkoIVBfSUdOT1JFKG9wYXF1ZSkpKQpAQCAtMTkxMSwxNyArMTgxMiwxNyBAQCBfYnRfcmVhZG5l eHRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmxvY2tOdW1iZXIgYmxrbm8sCiAJCQkvKiBzZWUg aWYgdGhlcmUgYXJlIGFueSBtYXRjaGVzIG9uIHRoaXMgcGFnZSAqLwogCQkJaWYgKFNjYW5EaXJl Y3Rpb25Jc0ZvcndhcmQoZGlyKSkKIAkJCXsKLQkJCQkvKiBub3RlIHRoYXQgdGhpcyB3aWxsIGNs ZWFyIG1vcmVSaWdodCBpZiB3ZSBjYW4gc3RvcCAqLwotCQkJCWlmIChfYnRfcmVhZHBhZ2Uoc2Nh biwgZGlyLCBQX0ZJUlNUREFUQUtFWShvcGFxdWUpLCBzZWl6ZWQpKQorCQkJCWlmIChfYnRfcmVh ZHBhZ2Uoc2NhbiwgbmV3YmF0Y2gsIGRpciwKKwkJCQkJCQkJIFBfRklSU1REQVRBS0VZKG9wYXF1 ZSksIGZpcnN0cGFnZSkpCiAJCQkJCWJyZWFrOwotCQkJCWJsa25vID0gc28tPmN1cnJQb3MubmV4 dFBhZ2U7CisJCQkJYmxrbm8gPSBidG5ld2JhdGNoLT5uZXh0UGFnZTsKIAkJCX0KIAkJCWVsc2UK IAkJCXsKLQkJCQkvKiBub3RlIHRoYXQgdGhpcyB3aWxsIGNsZWFyIG1vcmVMZWZ0IGlmIHdlIGNh biBzdG9wICovCi0JCQkJaWYgKF9idF9yZWFkcGFnZShzY2FuLCBkaXIsIFBhZ2VHZXRNYXhPZmZz ZXROdW1iZXIocGFnZSksIHNlaXplZCkpCisJCQkJaWYgKF9idF9yZWFkcGFnZShzY2FuLCBuZXdi YXRjaCwgZGlyLAorCQkJCQkJCQkgUGFnZUdldE1heE9mZnNldE51bWJlcihwYWdlKSwgZmlyc3Rw YWdlKSkKIAkJCQkJYnJlYWs7Ci0JCQkJYmxrbm8gPSBzby0+Y3VyclBvcy5wcmV2UGFnZTsKKwkJ CQlibGtubyA9IGJ0bmV3YmF0Y2gtPnByZXZQYWdlOwogCQkJfQogCQl9CiAJCWVsc2UKQEAgLTE5 MzYsMTkgKzE4MzcsMzggQEAgX2J0X3JlYWRuZXh0cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIEJs b2NrTnVtYmVyIGJsa25vLAogCQl9CiAKIAkJLyogbm8gbWF0Y2hpbmcgdHVwbGVzIG9uIHRoaXMg cGFnZSAqLwotCQlfYnRfcmVsYnVmKHJlbCwgc28tPmN1cnJQb3MuYnVmKTsKLQkJc2VpemVkID0g ZmFsc2U7CQkJLyogcmVsZWFzZWQgYnkgX2J0X3JlYWRwYWdlIChvciBieSB1cykgKi8KKwkJX2J0 X3JlbGJ1ZihyZWwsIGJ0bmV3YmF0Y2gtPmJ1Zik7CisKKwkJLyogQ29udGludWUgdGhlIHNjYW4g aW4gdGhpcyBkaXJlY3Rpb24/ICovCisJCWlmIChibGtubyA9PSBQX05PTkUgfHwKKwkJCShTY2Fu RGlyZWN0aW9uSXNGb3J3YXJkKGRpcikgPworCQkJICFidG5ld2JhdGNoLT5tb3JlUmlnaHQgOiAh YnRuZXdiYXRjaC0+bW9yZUxlZnQpKQorCQl7CisJCQkvKgorCQkJICogYmxrbm8gX2J0X3JlYWRw YWdlIGNhbGwgZW5kZWQgc2NhbiBpbiB0aGlzIGRpcmVjdGlvbiAodGhvdWdoIGlmCisJCQkgKiBz by0+bmVlZFByaW1TY2FuIHdhcyBzZXQgdGhlIHNjYW4gd2lsbCBjb250aW51ZSBpbiBfYnRfZmly c3QpCisJCQkgKi8KKwkJCV9idF9wYXJhbGxlbF9kb25lKHNjYW4pOworCQkJaW5kZXhhbV91dGls X2JhdGNoX3JlbGVhc2Uoc2NhbiwgbmV3YmF0Y2gpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwor CQkvKiBwYXJhbGxlbCBzY2FuIG11c3Qgc2VpemUgdGhlIHNjYW4gdG8gZ2V0IG5leHQgYmxrbm8g Ki8KKwkJaWYgKHNjYW4tPnBhcmFsbGVsX3NjYW4gIT0gTlVMTCAmJgorCQkJIV9idF9wYXJhbGxl bF9zZWl6ZShzY2FuLCAmYmxrbm8sICZsYXN0Y3VycmJsa25vLCBmYWxzZSkpCisJCXsKKwkJCWlu ZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlKHNjYW4sIG5ld2JhdGNoKTsKKwkJCXJldHVybiBOVUxM OwkJLyogZG9uZSBpZmYgc28tPm5lZWRQcmltU2NhbiB3YXNuJ3Qgc2V0ICovCisJCX0KKworCQlm aXJzdHBhZ2UgPSBmYWxzZTsJCS8qIG5leHQgcGFnZSBjYW5ub3QgYmUgZmlyc3QgKi8KIAl9CiAK LQkvKgotCSAqIF9idF9yZWFkcGFnZSBzdWNjZWVkZWQuICBEcm9wIHRoZSBsb2NrIChhbmQgbWF5 YmUgdGhlIHBpbikgb24KLQkgKiBzby0+Y3VyclBvcy5idWYgaW4gcHJlcGFyYXRpb24gZm9yIGJ0 Z2V0dHVwbGUgcmV0dXJuaW5nIHR1cGxlcy4KLQkgKi8KLQlBc3NlcnQoc28tPmN1cnJQb3MuY3Vy clBhZ2UgPT0gYmxrbm8pOwotCUFzc2VydChCVFNjYW5Qb3NJc1Bpbm5lZChzby0+Y3VyclBvcykp OwotCV9idF9kcm9wX2xvY2tfYW5kX21heWJlX3BpbihyZWwsIHNvKTsKKwkvKiBfYnRfcmVhZHBh Z2Ugc2F2ZWQgb25lIG9yIG1vcmUgbWF0Y2hlcyBpbiBuZXdiYXRjaC5pdGVtc1tdICovCisJQXNz ZXJ0KGJ0bmV3YmF0Y2gtPmN1cnJQYWdlID09IGJsa25vKTsKKwlfYnRfYmF0Y2hfdW5sb2NrKHNj YW4sIG5ld2JhdGNoLCBidG5ld2JhdGNoLT5idWYpOwogCi0JcmV0dXJuIHRydWU7CisJcmV0dXJu IG5ld2JhdGNoOwogfQogCiAvKgpAQCAtMjE3NCwyNSArMjA5NCwyNCBAQCBfYnRfZ2V0X2VuZHBv aW50KFJlbGF0aW9uIHJlbCwgdWludDMyIGxldmVsLCBib29sIHJpZ2h0bW9zdCkKICAqIFBhcmFs bGVsIHNjYW4gY2FsbGVycyBtdXN0IGhhdmUgc2VpemVkIHRoZSBzY2FuIGJlZm9yZSBjYWxsaW5n IGhlcmUuCiAgKiBFeGl0IGNvbmRpdGlvbnMgYXJlIHRoZSBzYW1lIGFzIGZvciBfYnRfZmlyc3Qo KS4KICAqLwotc3RhdGljIGJvb2wKLV9idF9lbmRwb2ludChJbmRleFNjYW5EZXNjIHNjYW4sIFNj YW5EaXJlY3Rpb24gZGlyKQorc3RhdGljIEluZGV4U2NhbkJhdGNoCitfYnRfZW5kcG9pbnQoSW5k ZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgSW5kZXhTY2FuQmF0Y2ggZmlyc3Ri YXRjaCkKIHsKIAlSZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOwotCUJUU2Nhbk9w YXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKKwlCVEJhdGNoRGF0YSAqYnRm aXJzdGJhdGNoID0gQlRCYXRjaEdldERhdGEoc2NhbiwgZmlyc3RiYXRjaCk7CiAJUGFnZQkJcGFn ZTsKIAlCVFBhZ2VPcGFxdWUgb3BhcXVlOwogCU9mZnNldE51bWJlciBzdGFydDsKIAotCUFzc2Vy dCghQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpOwotCUFzc2VydCghc28tPm5lZWRQcmlt U2Nhbik7CisJQXNzZXJ0KCEoKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlKS0+bmVlZFByaW1T Y2FuKTsKIAogCS8qCiAJICogU2NhbiBkb3duIHRvIHRoZSBsZWZ0bW9zdCBvciByaWdodG1vc3Qg bGVhZiBwYWdlLiAgVGhpcyBpcyBhIHNpbXBsaWZpZWQKIAkgKiB2ZXJzaW9uIG9mIF9idF9zZWFy Y2goKS4KIAkgKi8KLQlzby0+Y3VyclBvcy5idWYgPSBfYnRfZ2V0X2VuZHBvaW50KHJlbCwgMCwg U2NhbkRpcmVjdGlvbklzQmFja3dhcmQoZGlyKSk7CisJYnRmaXJzdGJhdGNoLT5idWYgPSBfYnRf Z2V0X2VuZHBvaW50KHJlbCwgMCwgU2NhbkRpcmVjdGlvbklzQmFja3dhcmQoZGlyKSk7CiAKLQlp ZiAoIUJ1ZmZlcklzVmFsaWQoc28tPmN1cnJQb3MuYnVmKSkKKwlpZiAoIUJ1ZmZlcklzVmFsaWQo YnRmaXJzdGJhdGNoLT5idWYpKQogCXsKIAkJLyoKIAkJICogRW1wdHkgaW5kZXguIExvY2sgdGhl IHdob2xlIHJlbGF0aW9uLCBhcyBub3RoaW5nIGZpbmVyIHRvIGxvY2sKQEAgLTIyMDAsMTAgKzIx MTksMTAgQEAgX2J0X2VuZHBvaW50KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBk aXIpCiAJCSAqLwogCQlQcmVkaWNhdGVMb2NrUmVsYXRpb24ocmVsLCBzY2FuLT54c19zbmFwc2hv dCk7CiAJCV9idF9wYXJhbGxlbF9kb25lKHNjYW4pOwotCQlyZXR1cm4gZmFsc2U7CisJCXJldHVy biBOVUxMOwogCX0KIAotCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKHNvLT5jdXJyUG9zLmJ1Zik7CisJ cGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnRmaXJzdGJhdGNoLT5idWYpOwogCW9wYXF1ZSA9IEJUUGFn ZUdldE9wYXF1ZShwYWdlKTsKIAlBc3NlcnQoUF9JU0xFQUYob3BhcXVlKSk7CiAKQEAgLTIyMjks OSArMjE0OCw1IEBAIF9idF9lbmRwb2ludChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rp b24gZGlyKQogCS8qCiAJICogTm93IGxvYWQgZGF0YSBmcm9tIHRoZSBmaXJzdCBwYWdlIG9mIHRo ZSBzY2FuLgogCSAqLwotCWlmICghX2J0X3JlYWRmaXJzdHBhZ2Uoc2Nhbiwgc3RhcnQsIGRpcikp Ci0JCXJldHVybiBmYWxzZTsKLQotCV9idF9yZXR1cm5pdGVtKHNjYW4sIHNvKTsKLQlyZXR1cm4g dHJ1ZTsKKwlyZXR1cm4gX2J0X3JlYWRmaXJzdHBhZ2Uoc2NhbiwgZmlyc3RiYXRjaCwgc3RhcnQs IGRpcik7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHV0aWxz LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHV0aWxzLmMKaW5kZXggNzMyYmM3NTBj Li40MTVlMmExYzAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0dXRp bHMuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHV0aWxzLmMKQEAgLTE5LDEw ICsxOSw3IEBACiAKICNpbmNsdWRlICJhY2Nlc3MvbmJ0cmVlLmgiCiAjaW5jbHVkZSAiYWNjZXNz L3JlbG9wdGlvbnMuaCIKLSNpbmNsdWRlICJhY2Nlc3MvcmVsc2Nhbi5oIgogI2luY2x1ZGUgImNv bW1hbmRzL3Byb2dyZXNzLmgiCi0jaW5jbHVkZSAiY29tbW9uL2ludC5oIgotI2luY2x1ZGUgImxp Yi9xdW5pcXVlLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9s d2xvY2suaCIKICNpbmNsdWRlICJ1dGlscy9kYXR1bS5oIgpAQCAtMzAsNyArMjcsNiBAQAogI2lu Y2x1ZGUgInV0aWxzL3JlbC5oIgogCiAKLXN0YXRpYyBpbnQJX2J0X2NvbXBhcmVfaW50KGNvbnN0 IHZvaWQgKnZhLCBjb25zdCB2b2lkICp2Yik7CiBzdGF0aWMgaW50CV9idF9rZWVwX25hdHRzKFJl bGF0aW9uIHJlbCwgSW5kZXhUdXBsZSBsYXN0bGVmdCwKIAkJCQkJCSAgIEluZGV4VHVwbGUgZmly c3RyaWdodCwgQlRTY2FuSW5zZXJ0IGl0dXBfa2V5KTsKIApAQCAtMTQ1LDI0NyArMTQxLDYgQEAg X2J0X21rc2NhbmtleShSZWxhdGlvbiByZWwsIEluZGV4VHVwbGUgaXR1cCkKIAlyZXR1cm4ga2V5 OwogfQogCi0vKgotICogcXNvcnQgY29tcGFyaXNvbiBmdW5jdGlvbiBmb3IgaW50IGFycmF5cwot ICovCi1zdGF0aWMgaW50Ci1fYnRfY29tcGFyZV9pbnQoY29uc3Qgdm9pZCAqdmEsIGNvbnN0IHZv aWQgKnZiKQotewotCWludAkJCWEgPSAqKChjb25zdCBpbnQgKikgdmEpOwotCWludAkJCWIgPSAq KChjb25zdCBpbnQgKikgdmIpOwotCi0JcmV0dXJuIHBnX2NtcF9zMzIoYSwgYik7Ci19Ci0KLS8q Ci0gKiBfYnRfa2lsbGl0ZW1zIC0gc2V0IExQX0RFQUQgc3RhdGUgZm9yIGl0ZW1zIGFuIGluZGV4 c2NhbiBjYWxsZXIgaGFzCi0gKiB0b2xkIHVzIHdlcmUga2lsbGVkCi0gKgotICogc2Nhbi0+b3Bh cXVlLCByZWZlcmVuY2VkIGxvY2FsbHkgdGhyb3VnaCBzbywgY29udGFpbnMgaW5mb3JtYXRpb24g YWJvdXQgdGhlCi0gKiBjdXJyZW50IHBhZ2UgYW5kIGtpbGxlZCB0dXBsZXMgdGhlcmVvbiAoZ2Vu ZXJhbGx5LCB0aGlzIHNob3VsZCBvbmx5IGJlCi0gKiBjYWxsZWQgaWYgc28tPm51bUtpbGxlZCA+ IDApLgotICoKLSAqIENhbGxlciBzaG91bGQgbm90IGhhdmUgYSBsb2NrIG9uIHRoZSBzby0+Y3Vy clBvcyBwYWdlLCBidXQgbXVzdCBob2xkIGEKLSAqIGJ1ZmZlciBwaW4gd2hlbiAhc28tPmRyb3BQ aW4uICBXaGVuIHdlIHJldHVybiwgaXQgc3RpbGwgd29uJ3QgYmUgbG9ja2VkLgotICogSXQnbGwg Y29udGludWUgdG8gaG9sZCB3aGF0ZXZlciBwaW5zIHdlcmUgaGVsZCBiZWZvcmUgY2FsbGluZyBo ZXJlLgotICoKLSAqIFdlIG1hdGNoIGl0ZW1zIGJ5IGhlYXAgVElEIGJlZm9yZSBhc3N1bWluZyB0 aGV5IGFyZSB0aGUgcmlnaHQgb25lcyB0byBzZXQKLSAqIExQX0RFQUQuICBJZiB0aGUgc2NhbiBp cyBvbmUgdGhhdCBob2xkcyBhIGJ1ZmZlciBwaW4gb24gdGhlIHRhcmdldCBwYWdlCi0gKiBjb250 aW51b3VzbHkgZnJvbSBpbml0aWFsbHkgcmVhZGluZyB0aGUgaXRlbXMgdW50aWwgYXBwbHlpbmcg dGhpcyBmdW5jdGlvbgotICogKGlmIGl0IGlzIGEgIXNvLT5kcm9wUGluIHNjYW4pLCBWQUNVVU0g Y2Fubm90IGhhdmUgZGVsZXRlZCBhbnkgaXRlbXMgb24gdGhlCi0gKiBwYWdlLCBzbyB0aGUgcGFn ZSdzIFRJRHMgY2FuJ3QgaGF2ZSBiZWVuIHJlY3ljbGVkIGJ5IG5vdy4gIFRoZXJlJ3Mgbm8gcmlz awotICogdGhhdCB3ZSdsbCBjb25mdXNlIGEgbmV3IGluZGV4IHR1cGxlIHRoYXQgaGFwcGVucyB0 byB1c2UgYSByZWN5Y2xlZCBUSUQKLSAqIHdpdGggYSBub3ctcmVtb3ZlZCB0dXBsZSB3aXRoIHRo ZSBzYW1lIFRJRCAodGhhdCB1c2VkIHRvIGJlIG9uIHRoaXMgc2FtZQotICogcGFnZSkuICBXZSBj YW4ndCByZWx5IG9uIHRoYXQgZHVyaW5nIHNjYW5zIHRoYXQgZHJvcCBidWZmZXIgcGlucyBlYWdl cmx5Ci0gKiAoc28tPmRyb3BQaW4gc2NhbnMpLCB0aG91Z2gsIHNvIHdlIG11c3QgY29uZGl0aW9u IHNldHRpbmcgTFBfREVBRCBiaXRzIG9uCi0gKiB0aGUgcGFnZSBMU04gaGF2aW5nIG5vdCBjaGFu Z2VkIHNpbmNlIGJhY2sgd2hlbiBfYnRfcmVhZHBhZ2Ugc2F3IHRoZSBwYWdlLgotICogV2UgdG90 YWxseSBnaXZlIHVwIG9uIHNldHRpbmcgTFBfREVBRCBiaXRzIHdoZW4gdGhlIHBhZ2UgTFNOIGNo YW5nZWQuCi0gKgotICogV2UgZ2l2ZSB1cCBtdWNoIGxlc3Mgb2Z0ZW4gZHVyaW5nICFzby0+ZHJv cFBpbiBzY2FucywgYnV0IGl0IHN0aWxsIGhhcHBlbnMuCi0gKiBXZSBjb3BlIHdpdGggY2FzZXMg d2hlcmUgaXRlbXMgaGF2ZSBtb3ZlZCByaWdodCBkdWUgdG8gaW5zZXJ0aW9ucy4gIElmIGFuCi0g KiBpdGVtIGhhcyBtb3ZlZCBvZmYgdGhlIGN1cnJlbnQgcGFnZSBkdWUgdG8gYSBzcGxpdCwgd2Un bGwgZmFpbCB0byBmaW5kIGl0Ci0gKiBhbmQganVzdCBnaXZlIHVwIG9uIGl0LgotICovCi12b2lk Ci1fYnRfa2lsbGl0ZW1zKEluZGV4U2NhbkRlc2Mgc2NhbikKLXsKLQlSZWxhdGlvbglyZWwgPSBz Y2FuLT5pbmRleFJlbGF0aW9uOwotCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNj YW4tPm9wYXF1ZTsKLQlQYWdlCQlwYWdlOwotCUJUUGFnZU9wYXF1ZSBvcGFxdWU7Ci0JT2Zmc2V0 TnVtYmVyIG1pbm9mZjsKLQlPZmZzZXROdW1iZXIgbWF4b2ZmOwotCWludAkJCW51bUtpbGxlZCA9 IHNvLT5udW1LaWxsZWQ7Ci0JYm9vbAkJa2lsbGVkc29tZXRoaW5nID0gZmFsc2U7Ci0JQnVmZmVy CQlidWY7Ci0KLQlBc3NlcnQobnVtS2lsbGVkID4gMCk7Ci0JQXNzZXJ0KEJUU2NhblBvc0lzVmFs aWQoc28tPmN1cnJQb3MpKTsKLQlBc3NlcnQoc2Nhbi0+aGVhcFJlbGF0aW9uICE9IE5VTEwpOyAv KiBjYW4ndCBiZSBhIGJpdG1hcCBpbmRleCBzY2FuICovCi0KLQkvKiBBbHdheXMgaW52YWxpZGF0 ZSBzby0+a2lsbGVkSXRlbXNbXSBiZWZvcmUgbGVhdmluZyBzby0+Y3VyclBvcyAqLwotCXNvLT5u dW1LaWxsZWQgPSAwOwotCi0JLyoKLQkgKiBXZSBuZWVkIHRvIGl0ZXJhdGUgdGhyb3VnaCBzby0+ a2lsbGVkSXRlbXNbXSBpbiBsZWFmIHBhZ2Ugb3JkZXI7IHRoZQotCSAqIGxvb3AgYmVsb3cgZXhw ZWN0cyB0aGlzICh3aGVuIG1hcmtpbmcgcG9zdGluZyBsaXN0IHR1cGxlcywgYXQgbGVhc3QpLgot CSAqIHNvLT5raWxsZWRJdGVtc1tdIGlzIG5vdyBpbiB3aGF0ZXZlciBvcmRlciB0aGUgc2NhbiBy ZXR1cm5lZCBpdGVtcyBpbi4KLQkgKiBTY3JvbGxhYmxlIGN1cnNvciBzY2FucyBtaWdodCBoYXZl IGV2ZW4gc2F2ZWQgdGhlIHNhbWUgaXRlbS9USUQgdHdpY2UuCi0JICoKLQkgKiBTb3J0IGFuZCB1 bmlxdWUtaWZ5IHNvLT5raWxsZWRJdGVtc1tdIHRvIGRlYWwgd2l0aCBhbGwgdGhpcy4KLQkgKi8K LQlpZiAobnVtS2lsbGVkID4gMSkKLQl7Ci0JCXFzb3J0KHNvLT5raWxsZWRJdGVtcywgbnVtS2ls bGVkLCBzaXplb2YoaW50KSwgX2J0X2NvbXBhcmVfaW50KTsKLQkJbnVtS2lsbGVkID0gcXVuaXF1 ZShzby0+a2lsbGVkSXRlbXMsIG51bUtpbGxlZCwgc2l6ZW9mKGludCksCi0JCQkJCQkJX2J0X2Nv bXBhcmVfaW50KTsKLQl9Ci0KLQlpZiAoIXNvLT5kcm9wUGluKQotCXsKLQkJLyoKLQkJICogV2Ug aGF2ZSBoZWxkIHRoZSBwaW4gb24gdGhpcyBwYWdlIHNpbmNlIHdlIHJlYWQgdGhlIGluZGV4IHR1 cGxlcywKLQkJICogc28gYWxsIHdlIG5lZWQgdG8gZG8gaXMgbG9jayBpdC4gIFRoZSBwaW4gd2ls bCBoYXZlIHByZXZlbnRlZAotCQkgKiBjb25jdXJyZW50IFZBQ1VVTXMgZnJvbSByZWN5Y2xpbmcg YW55IG9mIHRoZSBUSURzIG9uIHRoZSBwYWdlLgotCQkgKi8KLQkJQXNzZXJ0KEJUU2NhblBvc0lz UGlubmVkKHNvLT5jdXJyUG9zKSk7Ci0JCWJ1ZiA9IHNvLT5jdXJyUG9zLmJ1ZjsKLQkJX2J0X2xv Y2tidWYocmVsLCBidWYsIEJUX1JFQUQpOwotCX0KLQllbHNlCi0JewotCQlYTG9nUmVjUHRyCWxh dGVzdGxzbjsKLQotCQlBc3NlcnQoIUJUU2NhblBvc0lzUGlubmVkKHNvLT5jdXJyUG9zKSk7Ci0J CWJ1ZiA9IF9idF9nZXRidWYocmVsLCBzby0+Y3VyclBvcy5jdXJyUGFnZSwgQlRfUkVBRCk7Ci0K LQkJbGF0ZXN0bHNuID0gQnVmZmVyR2V0TFNOQXRvbWljKGJ1Zik7Ci0JCUFzc2VydChzby0+Y3Vy clBvcy5sc24gPD0gbGF0ZXN0bHNuKTsKLQkJaWYgKHNvLT5jdXJyUG9zLmxzbiAhPSBsYXRlc3Rs c24pCi0JCXsKLQkJCS8qIE1vZGlmaWVkLCBnaXZlIHVwIG9uIGhpbnRpbmcgKi8KLQkJCV9idF9y ZWxidWYocmVsLCBidWYpOwotCQkJcmV0dXJuOwotCQl9Ci0KLQkJLyogVW5tb2RpZmllZCwgaGlu dGluZyBpcyBzYWZlICovCi0JfQotCi0JcGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnVmKTsKLQlvcGFx dWUgPSBCVFBhZ2VHZXRPcGFxdWUocGFnZSk7Ci0JbWlub2ZmID0gUF9GSVJTVERBVEFLRVkob3Bh cXVlKTsKLQltYXhvZmYgPSBQYWdlR2V0TWF4T2Zmc2V0TnVtYmVyKHBhZ2UpOwotCi0JLyogSXRl cmF0ZSB0aHJvdWdoIHNvLT5raWxsZWRJdGVtc1tdIGluIGxlYWYgcGFnZSBvcmRlciAqLwotCWZv ciAoaW50IGkgPSAwOyBpIDwgbnVtS2lsbGVkOyBpKyspCi0JewotCQlpbnQJCQlpdGVtSW5kZXgg PSBzby0+a2lsbGVkSXRlbXNbaV07Ci0JCUJUU2NhblBvc0l0ZW0gKmtpdGVtID0gJnNvLT5jdXJy UG9zLml0ZW1zW2l0ZW1JbmRleF07Ci0JCU9mZnNldE51bWJlciBvZmZudW0gPSBraXRlbS0+aW5k ZXhPZmZzZXQ7Ci0KLQkJQXNzZXJ0KGl0ZW1JbmRleCA+PSBzby0+Y3VyclBvcy5maXJzdEl0ZW0g JiYKLQkJCSAgIGl0ZW1JbmRleCA8PSBzby0+Y3VyclBvcy5sYXN0SXRlbSk7Ci0JCUFzc2VydChp ID09IDAgfHwKLQkJCSAgIG9mZm51bSA+PSBzby0+Y3VyclBvcy5pdGVtc1tzby0+a2lsbGVkSXRl bXNbaSAtIDFdXS5pbmRleE9mZnNldCk7Ci0KLQkJaWYgKG9mZm51bSA8IG1pbm9mZikKLQkJCWNv bnRpbnVlOwkJCS8qIHB1cmUgcGFyYW5vaWEgKi8KLQkJd2hpbGUgKG9mZm51bSA8PSBtYXhvZmYp Ci0JCXsKLQkJCUl0ZW1JZAkJaWlkID0gUGFnZUdldEl0ZW1JZChwYWdlLCBvZmZudW0pOwotCQkJ SW5kZXhUdXBsZQlpdHVwbGUgPSAoSW5kZXhUdXBsZSkgUGFnZUdldEl0ZW0ocGFnZSwgaWlkKTsK LQkJCWJvb2wJCWtpbGx0dXBsZSA9IGZhbHNlOwotCi0JCQlpZiAoQlRyZWVUdXBsZUlzUG9zdGlu ZyhpdHVwbGUpKQotCQkJewotCQkJCWludAkJCXBpID0gaSArIDE7Ci0JCQkJaW50CQkJbnBvc3Rp bmcgPSBCVHJlZVR1cGxlR2V0TlBvc3RpbmcoaXR1cGxlKTsKLQkJCQlpbnQJCQlqOwotCi0JCQkJ LyoKLQkJCQkgKiBOb3RlIHRoYXQgdGhlIHBhZ2UgbWF5IGhhdmUgYmVlbiBtb2RpZmllZCBpbiBh bG1vc3QgYW55IHdheQotCQkJCSAqIHNpbmNlIHdlIGZpcnN0IHJlYWQgaXQgKGluIHRoZSAhc28t PmRyb3BQaW4gY2FzZSksIHNvIGl0J3MKLQkJCQkgKiBwb3NzaWJsZSB0aGF0IHRoaXMgcG9zdGlu ZyBsaXN0IHR1cGxlIHdhc24ndCBhIHBvc3RpbmcgbGlzdAotCQkJCSAqIHR1cGxlIHdoZW4gd2Ug Zmlyc3QgZW5jb3VudGVyZWQgaXRzIGhlYXAgVElEcy4KLQkJCQkgKi8KLQkJCQlmb3IgKGogPSAw OyBqIDwgbnBvc3Rpbmc7IGorKykKLQkJCQl7Ci0JCQkJCUl0ZW1Qb2ludGVyIGl0ZW0gPSBCVHJl ZVR1cGxlR2V0UG9zdGluZ04oaXR1cGxlLCBqKTsKLQotCQkJCQlpZiAoIUl0ZW1Qb2ludGVyRXF1 YWxzKGl0ZW0sICZraXRlbS0+aGVhcFRpZCkpCi0JCQkJCQlicmVhazsJLyogb3V0IG9mIHBvc3Rp bmcgbGlzdCBsb29wICovCi0KLQkJCQkJLyoKLQkJCQkJICoga2l0ZW0gbXVzdCBoYXZlIG1hdGNo aW5nIG9mZm51bSB3aGVuIGhlYXAgVElEcyBtYXRjaCwKLQkJCQkJICogdGhvdWdoIG9ubHkgaW4g dGhlIGNvbW1vbiBjYXNlIHdoZXJlIHRoZSBwYWdlIGNhbid0Ci0JCQkJCSAqIGhhdmUgYmVlbiBj b25jdXJyZW50bHkgbW9kaWZpZWQKLQkJCQkJICovCi0JCQkJCUFzc2VydChraXRlbS0+aW5kZXhP ZmZzZXQgPT0gb2ZmbnVtIHx8ICFzby0+ZHJvcFBpbik7Ci0KLQkJCQkJLyoKLQkJCQkJICogUmVh ZC1haGVhZCB0byBsYXRlciBraXRlbXMgaGVyZS4KLQkJCQkJICoKLQkJCQkJICogV2UgcmVseSBv biB0aGUgYXNzdW1wdGlvbiB0aGF0IG5vdCBhZHZhbmNpbmcga2l0ZW0gaGVyZQotCQkJCQkgKiB3 aWxsIHByZXZlbnQgdXMgZnJvbSBjb25zaWRlcmluZyB0aGUgcG9zdGluZyBsaXN0IHR1cGxlCi0J CQkJCSAqIGZ1bGx5IGRlYWQgYnkgbm90IG1hdGNoaW5nIGl0cyBuZXh0IGhlYXAgVElEIGluIG5l eHQKLQkJCQkJICogbG9vcCBpdGVyYXRpb24uCi0JCQkJCSAqCi0JCQkJCSAqIElmLCBvbiB0aGUg b3RoZXIgaGFuZCwgdGhpcyBpcyB0aGUgZmluYWwgaGVhcCBUSUQgaW4KLQkJCQkJICogdGhlIHBv c3RpbmcgbGlzdCB0dXBsZSwgdGhlbiB0dXBsZSBnZXRzIGtpbGxlZAotCQkJCQkgKiByZWdhcmRs ZXNzIChpLmUuIHdlIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUgbGFzdAotCQkJCQkgKiBraXRl bSBpcyBhbHNvIHRoZSBsYXN0IGhlYXAgVElEIGluIHRoZSBsYXN0IGluZGV4IHR1cGxlCi0JCQkJ CSAqIGNvcnJlY3RseSAtLSBwb3N0aW5nIHR1cGxlIHN0aWxsIGdldHMga2lsbGVkKS4KLQkJCQkJ ICovCi0JCQkJCWlmIChwaSA8IG51bUtpbGxlZCkKLQkJCQkJCWtpdGVtID0gJnNvLT5jdXJyUG9z Lml0ZW1zW3NvLT5raWxsZWRJdGVtc1twaSsrXV07Ci0JCQkJfQotCi0JCQkJLyoKLQkJCQkgKiBE b24ndCBib3RoZXIgYWR2YW5jaW5nIHRoZSBvdXRlcm1vc3QgbG9vcCdzIGludCBpdGVyYXRvciB0 bwotCQkJCSAqIGF2b2lkIHByb2Nlc3Npbmcga2lsbGVkIGl0ZW1zIHRoYXQgcmVsYXRlIHRvIHRo ZSBzYW1lCi0JCQkJICogb2ZmbnVtL3Bvc3RpbmcgbGlzdCB0dXBsZS4gIFRoaXMgbWljcm8tb3B0 aW1pemF0aW9uIGhhcmRseQotCQkJCSAqIHNlZW1zIHdvcnRoIGl0LiAgKEZ1cnRoZXIgaXRlcmF0 aW9ucyBvZiB0aGUgb3V0ZXJtb3N0IGxvb3AKLQkJCQkgKiB3aWxsIGZhaWwgdG8gbWF0Y2ggb24g dGhpcyBzYW1lIHBvc3RpbmcgbGlzdCdzIGZpcnN0IGhlYXAKLQkJCQkgKiBUSUQgaW5zdGVhZCwg c28gd2UnbGwgYWR2YW5jZSB0byB0aGUgbmV4dCBvZmZudW0vaW5kZXgKLQkJCQkgKiB0dXBsZSBw cmV0dHkgcXVpY2tseS4pCi0JCQkJICovCi0JCQkJaWYgKGogPT0gbnBvc3RpbmcpCi0JCQkJCWtp bGx0dXBsZSA9IHRydWU7Ci0JCQl9Ci0JCQllbHNlIGlmIChJdGVtUG9pbnRlckVxdWFscygmaXR1 cGxlLT50X3RpZCwgJmtpdGVtLT5oZWFwVGlkKSkKLQkJCQlraWxsdHVwbGUgPSB0cnVlOwotCi0J CQkvKgotCQkJICogTWFyayBpbmRleCBpdGVtIGFzIGRlYWQsIGlmIGl0IGlzbid0IGFscmVhZHku ICBTaW5jZSB0aGlzCi0JCQkgKiBoYXBwZW5zIHdoaWxlIGhvbGRpbmcgYSBidWZmZXIgbG9jayBw b3NzaWJseSBpbiBzaGFyZWQgbW9kZSwKLQkJCSAqIGl0J3MgcG9zc2libGUgdGhhdCBtdWx0aXBs ZSBwcm9jZXNzZXMgYXR0ZW1wdCB0byBkbyB0aGlzCi0JCQkgKiBzaW11bHRhbmVvdXNseSwgbGVh ZGluZyB0byBtdWx0aXBsZSBmdWxsLXBhZ2UgaW1hZ2VzIGJlaW5nIHNlbnQKLQkJCSAqIHRvIFdB TCAoaWYgd2FsX2xvZ19oaW50cyBvciBkYXRhIGNoZWNrc3VtcyBhcmUgZW5hYmxlZCksIHdoaWNo Ci0JCQkgKiBpcyB1bmRlc2lyYWJsZS4KLQkJCSAqLwotCQkJaWYgKGtpbGx0dXBsZSAmJiAhSXRl bUlkSXNEZWFkKGlpZCkpCi0JCQl7Ci0JCQkJaWYgKCFraWxsZWRzb21ldGhpbmcpCi0JCQkJewot CQkJCQkvKgotCQkJCQkgKiBVc2UgdGhlIGhpbnQgYml0IGluZnJhc3RydWN0dXJlIHRvIGNoZWNr IGlmIHdlIGNhbgotCQkJCQkgKiB1cGRhdGUgdGhlIHBhZ2Ugd2hpbGUganVzdCBob2xkaW5nIGEg c2hhcmUgbG9jay4gSWYgd2UKLQkJCQkJICogYXJlIG5vdCBhbGxvd2VkLCB0aGVyZSdzIG5vIHBv aW50IGNvbnRpbnVpbmcuCi0JCQkJCSAqLwotCQkJCQlpZiAoIUJ1ZmZlckJlZ2luU2V0SGludEJp dHMoYnVmKSkKLQkJCQkJCWdvdG8gdW5sb2NrX3BhZ2U7Ci0JCQkJfQotCi0JCQkJLyogZm91bmQg dGhlIGl0ZW0vYWxsIHBvc3RpbmcgbGlzdCBpdGVtcyAqLwotCQkJCUl0ZW1JZE1hcmtEZWFkKGlp ZCk7Ci0JCQkJa2lsbGVkc29tZXRoaW5nID0gdHJ1ZTsKLQkJCQlicmVhazsJCQkvKiBvdXQgb2Yg aW5uZXIgc2VhcmNoIGxvb3AgKi8KLQkJCX0KLQkJCW9mZm51bSA9IE9mZnNldE51bWJlck5leHQo b2ZmbnVtKTsKLQkJfQotCX0KLQotCS8qCi0JICogU2luY2UgdGhpcyBjYW4gYmUgcmVkb25lIGxh dGVyIGlmIG5lZWRlZCwgbWFyayBhcyBkaXJ0eSBoaW50LgotCSAqCi0JICogV2hlbmV2ZXIgd2Ug bWFyayBhbnl0aGluZyBMUF9ERUFELCB3ZSBhbHNvIHNldCB0aGUgcGFnZSdzCi0JICogQlRQX0hB U19HQVJCQUdFIGZsYWcsIHdoaWNoIGlzIGxpa2V3aXNlIGp1c3QgYSBoaW50LiAgKE5vdGUgdGhh dCB3ZQotCSAqIG9ubHkgcmVseSBvbiB0aGUgcGFnZS1sZXZlbCBmbGFnIGluICFoZWFwa2V5c3Bh Y2UgaW5kZXhlcy4pCi0JICovCi0JaWYgKGtpbGxlZHNvbWV0aGluZykKLQl7Ci0JCW9wYXF1ZS0+ YnRwb19mbGFncyB8PSBCVFBfSEFTX0dBUkJBR0U7Ci0JCUJ1ZmZlckZpbmlzaFNldEhpbnRCaXRz KGJ1ZiwgdHJ1ZSwgdHJ1ZSk7Ci0JfQotCi11bmxvY2tfcGFnZToKLQlpZiAoIXNvLT5kcm9wUGlu KQotCQlfYnRfdW5sb2NrYnVmKHJlbCwgYnVmKTsKLQllbHNlCi0JCV9idF9yZWxidWYocmVsLCBi dWYpOwotfQotCi0KIC8qCiAgKiBUaGUgZm9sbG93aW5nIHJvdXRpbmVzIG1hbmFnZSBhIHNoYXJl ZC1tZW1vcnkgYXJlYSBpbiB3aGljaCB3ZSB0cmFjawogICogYXNzaWdubWVudCBvZiAidmFjdXVt IGN5Y2xlIElEcyIgdG8gY3VycmVudGx5LWFjdGl2ZSBidHJlZSB2YWN1dW1pbmcKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0eGxvZy5jIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL25idHJlZS9uYnR4bG9nLmMKaW5kZXggZGZmN2QyODZmLi4zYmM1ZTVjY2QgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0eGxvZy5jCisrKyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy9uYnRyZWUvbmJ0eGxvZy5jCkBAIC0xMDk1LDE1ICsxMDk1LDE1IEBAIGJ0cmVlX21h c2soY2hhciAqcGFnZWRhdGEsIEJsb2NrTnVtYmVyIGJsa25vKQogCQkvKgogCQkgKiBJbiBidHJl ZSBsZWFmIHBhZ2VzLCBpdCBpcyBwb3NzaWJsZSB0byBtb2RpZnkgdGhlIExQX0ZMQUdTIHdpdGhv dXQKIAkJICogZW1pdHRpbmcgYW55IFdBTCByZWNvcmQuIEhlbmNlLCBtYXNrIHRoZSBsaW5lIHBv aW50ZXIgZmxhZ3MuIFNlZQotCQkgKiBfYnRfa2lsbGl0ZW1zKCksIF9idF9jaGVja191bmlxdWUo KSBmb3IgZGV0YWlscy4KKwkJICogYnRraWxsaXRlbXNiYXRjaCgpLCBfYnRfY2hlY2tfdW5pcXVl KCkgZm9yIGRldGFpbHMuCiAJCSAqLwogCQltYXNrX2xwX2ZsYWdzKHBhZ2UpOwogCX0KIAogCS8q CiAJICogQlRQX0hBU19HQVJCQUdFIGlzIGp1c3QgYW4gdW4tbG9nZ2VkIGhpbnQgYml0LiBTbywg bWFzayBpdC4gU2VlCi0JICogX2J0X2RlbGV0ZV9vcl9kZWR1cF9vbmVfcGFnZSgpLCBfYnRfa2ls bGl0ZW1zKCksIGFuZCBfYnRfY2hlY2tfdW5pcXVlKCkKLQkgKiBmb3IgZGV0YWlscy4KKwkgKiBf YnRfZGVsZXRlX29yX2RlZHVwX29uZV9wYWdlKCksIGJ0a2lsbGl0ZW1zYmF0Y2goKSwgYW5kCisJ ICogX2J0X2NoZWNrX3VuaXF1ZSgpIGZvciBkZXRhaWxzLgogCSAqLwogCW1hc2tvcGFxLT5idHBv X2ZsYWdzICY9IH5CVFBfSEFTX0dBUkJBR0U7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9zcGdpc3Qvc3BndXRpbHMuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BndXRp bHMuYwppbmRleCBmMmVlMzMzZjYuLjMzYWQ0MzUzNiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv YWNjZXNzL3NwZ2lzdC9zcGd1dGlscy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qv c3BndXRpbHMuYwpAQCAtODgsMTAgKzg4LDEyIEBAIHNwZ2hhbmRsZXIoUEdfRlVOQ1RJT05fQVJH UykKIAkJLmFtYmVnaW5zY2FuID0gc3BnYmVnaW5zY2FuLAogCQkuYW1yZXNjYW4gPSBzcGdyZXNj YW4sCiAJCS5hbWdldHR1cGxlID0gc3BnZ2V0dHVwbGUsCisJCS5hbWdldGJhdGNoID0gTlVMTCwK KwkJLmFta2lsbGl0ZW1zYmF0Y2ggPSBOVUxMLAorCQkuYW11bmd1YXJkYmF0Y2ggPSBOVUxMLAog CQkuYW1nZXRiaXRtYXAgPSBzcGdnZXRiaXRtYXAsCiAJCS5hbWVuZHNjYW4gPSBzcGdlbmRzY2Fu LAotCQkuYW1tYXJrcG9zID0gTlVMTCwKLQkJLmFtcmVzdHJwb3MgPSBOVUxMLAorCQkuYW1wb3Ny ZXNldCA9IE5VTEwsCiAJCS5hbWVzdGltYXRlcGFyYWxsZWxzY2FuID0gTlVMTCwKIAkJLmFtaW5p dHBhcmFsbGVsc2NhbiA9IE5VTEwsCiAJCS5hbXBhcmFsbGVscmVzY2FuID0gTlVMTCwKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtYXBpLmMgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvdGFibGUvdGFibGVhbWFwaS5jCmluZGV4IDk3Y2U4MWViNS4uOTRlY2EwMTgxIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbWFwaS5jCisrKyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtYXBpLmMKQEAgLTUzLDkgKzUzLDEzIEBAIEdl dFRhYmxlQW1Sb3V0aW5lKE9pZCBhbWhhbmRsZXIpCiAJQXNzZXJ0KHJvdXRpbmUtPmluZGV4X2Zl dGNoX2JlZ2luICE9IE5VTEwpOwogCUFzc2VydChyb3V0aW5lLT5pbmRleF9mZXRjaF9yZXNldCAh PSBOVUxMKTsKIAlBc3NlcnQocm91dGluZS0+aW5kZXhfZmV0Y2hfZW5kICE9IE5VTEwpOworCUFz c2VydChyb3V0aW5lLT5pbmRleF9mZXRjaF9iYXRjaF9pbml0ICE9IE5VTEwpOworCUFzc2VydChy b3V0aW5lLT5pbmRleF9wbGFpbl9hbWdldGJhdGNoX25leHQgIT0gTlVMTCk7CisJQXNzZXJ0KHJv dXRpbmUtPmluZGV4X29ubHlfYW1nZXRiYXRjaF9uZXh0ICE9IE5VTEwpOwogCUFzc2VydChyb3V0 aW5lLT5pbmRleF9wbGFpbl9hbWdldHR1cGxlX25leHQgIT0gTlVMTCk7CiAJQXNzZXJ0KHJvdXRp bmUtPmluZGV4X29ubHlfYW1nZXR0dXBsZV9uZXh0ICE9IE5VTEwpOwogCUFzc2VydChyb3V0aW5l LT5mZXRjaF90aWQgIT0gTlVMTCk7CisJQXNzZXJ0KHJvdXRpbmUtPmluZGV4X2ZldGNoX3Jlc3Ry cG9zICE9IE5VTEwpOwogCiAJQXNzZXJ0KHJvdXRpbmUtPnR1cGxlX2ZldGNoX3Jvd192ZXJzaW9u ICE9IE5VTEwpOwogCUFzc2VydChyb3V0aW5lLT50dXBsZV90aWRfdmFsaWQgIT0gTlVMTCk7CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9pbmRleGNtZHMuYyBiL3NyYy9iYWNrZW5k L2NvbW1hbmRzL2luZGV4Y21kcy5jCmluZGV4IDM3M2U4MjM0Ny4uODQyMmU2NWIwIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9pbmRleGNtZHMuYworKysgYi9zcmMvYmFja2VuZC9j b21tYW5kcy9pbmRleGNtZHMuYwpAQCAtODg1LDcgKzg4NSw3IEBAIERlZmluZUluZGV4KFBhcnNl U3RhdGUgKnBzdGF0ZSwKIAkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRF RCksCiAJCQkJIGVycm1zZygiYWNjZXNzIG1ldGhvZCBcIiVzXCIgZG9lcyBub3Qgc3VwcG9ydCBt dWx0aWNvbHVtbiBpbmRleGVzIiwKIAkJCQkJCWFjY2Vzc01ldGhvZE5hbWUpKSk7Ci0JaWYgKGV4 Y2x1c2lvbiAmJiBhbVJvdXRpbmUtPmFtZ2V0dHVwbGUgPT0gTlVMTCkKKwlpZiAoZXhjbHVzaW9u ICYmIGFtUm91dGluZS0+YW1nZXR0dXBsZSA9PSBOVUxMICYmIGFtUm91dGluZS0+YW1nZXRiYXRj aCA9PSBOVUxMKQogCQllcmVwb3J0KEVSUk9SLAogCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVS RV9OT1RfU1VQUE9SVEVEKSwKIAkJCQkgZXJybXNnKCJhY2Nlc3MgbWV0aG9kIFwiJXNcIiBkb2Vz IG5vdCBzdXBwb3J0IGV4Y2x1c2lvbiBjb25zdHJhaW50cyIsCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9leGVjdXRvci9leGVjQW1pLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjQW1pLmMK aW5kZXggMzdmZTAzZmRjLi45NzlhODUyZmUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL2V4ZWNBbWkuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjQW1pLmMKQEAgLTQy OSw3ICs0MjksNyBAQCBFeGVjU3VwcG9ydHNNYXJrUmVzdG9yZShQYXRoICpwYXRobm9kZSkKIAkJ Y2FzZSBUX0luZGV4T25seVNjYW46CiAKIAkJCS8qCi0JCQkgKiBOb3QgYWxsIGluZGV4IHR5cGVz IHN1cHBvcnQgbWFyay9yZXN0b3JlLgorCQkJICogTm90IGFsbCBpbmRleCB0eXBlcyBzdXBwb3J0 IHJlc3RvcmluZyBhIG1hcmsKIAkJCSAqLwogCQkJcmV0dXJuIGNhc3ROb2RlKEluZGV4UGF0aCwg cGF0aG5vZGUpLT5pbmRleGluZm8tPmFtY2FubWFya3BvczsKIApkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlam9pbi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9k ZU1lcmdlam9pbi5jCmluZGV4IGY4NDIxYTc0Yy4uM2ZmNzgxZjJhIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9leGVjdXRvci9ub2RlTWVyZ2Vqb2luLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0 b3Ivbm9kZU1lcmdlam9pbi5jCkBAIC01NCw4ICs1NCw4IEBACiAgKgkJdGhlIGlubmVyICI1J3Mi LiBUaGlzIHJlcXVpcmVzIHJlcG9zaXRpb25pbmcgdGhlIGlubmVyICJjdXJzb3IiCiAgKgkJdG8g cG9pbnQgYXQgdGhlIGZpcnN0IGlubmVyICI1Ii4gVGhpcyBpcyBkb25lIGJ5ICJtYXJraW5nIiB0 aGUKICAqCQlmaXJzdCBpbm5lciA1IHNvIHdlIGNhbiByZXN0b3JlIHRoZSAiY3Vyc29yIiB0byBp dCBiZWZvcmUgam9pbmluZwotICoJCXdpdGggdGhlIHNlY29uZCBvdXRlciA1LiBUaGUgYWNjZXNz IG1ldGhvZCBpbnRlcmZhY2UgcHJvdmlkZXMKLSAqCQlyb3V0aW5lcyB0byBtYXJrIGFuZCByZXN0 b3JlIHRvIGEgdHVwbGUuCisgKgkJd2l0aCB0aGUgc2Vjb25kIG91dGVyIDUuIFRoZSBpbmRleGJh dGNoLmggaW50ZXJmYWNlIHByb3ZpZGVzCisgKgkJcm91dGluZXMgdG8gbWFyayBhbmQgcmVzdG9y ZSB0byBhIHR1cGxlIGR1cmluZyBpbmRleCBzY2Fucy4KICAqCiAgKgogICoJCUVzc2VudGlhbCBv cGVyYXRpb24gb2YgdGhlIG1lcmdlIGpvaW4gYWxnb3JpdGhtIGlzIGFzIGZvbGxvd3M6CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9pbmR4cGF0aC5jIGIvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3BhdGgvaW5keHBhdGguYwppbmRleCA2N2Q5ZGMzNWYuLmVkYzdlNDczNiAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvaW5keHBhdGguYworKysgYi9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9pbmR4cGF0aC5jCkBAIC00Myw3ICs0Myw3IEBACiAv KiBXaGV0aGVyIHdlIGFyZSBsb29raW5nIGZvciBwbGFpbiBpbmRleHNjYW4sIGJpdG1hcCBzY2Fu LCBvciBlaXRoZXIgKi8KIHR5cGVkZWYgZW51bQogewotCVNUX0lOREVYU0NBTiwJCQkJLyogbXVz dCBzdXBwb3J0IGFtZ2V0dHVwbGUgKi8KKwlTVF9JTkRFWFNDQU4sCQkJCS8qIG11c3Qgc3VwcG9y dCBhbWdldHR1cGxlIG9yIGFtZ2V0YmF0Y2ggKi8KIAlTVF9CSVRNQVBTQ0FOLAkJCQkvKiBtdXN0 IHN1cHBvcnQgYW1nZXRiaXRtYXAgKi8KIAlTVF9BTllTQ0FOLAkJCQkJLyogZWl0aGVyIGlzIG9r YXkgKi8KIH0gU2NhblR5cGVDb250cm9sOwpAQCAtNzQ3LDcgKzc0Nyw3IEBAIGdldF9pbmRleF9w YXRocyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCXsKIAkJSW5kZXhQYXRo ICAqaXBhdGggPSAoSW5kZXhQYXRoICopIGxmaXJzdChsYyk7CiAKLQkJaWYgKGluZGV4LT5hbWhh c2dldHR1cGxlKQorCQlpZiAoaW5kZXgtPmFtY2FucGxhaW5zY2FuKQogCQkJYWRkX3BhdGgocmVs LCAoUGF0aCAqKSBpcGF0aCk7CiAKIAkJaWYgKGluZGV4LT5hbWhhc2dldGJpdG1hcCAmJgpAQCAt ODM1LDcgKzgzNSw3IEBAIGJ1aWxkX2luZGV4X3BhdGhzKFBsYW5uZXJJbmZvICpyb290LCBSZWxP cHRJbmZvICpyZWwsCiAJc3dpdGNoIChzY2FudHlwZSkKIAl7CiAJCWNhc2UgU1RfSU5ERVhTQ0FO OgotCQkJaWYgKCFpbmRleC0+YW1oYXNnZXR0dXBsZSkKKwkJCWlmICghaW5kZXgtPmFtY2FucGxh aW5zY2FuKQogCQkJCXJldHVybiBOSUw7CiAJCQlicmVhazsKIAkJY2FzZSBTVF9CSVRNQVBTQ0FO OgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGxhbmNhdC5jIGIvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGxhbmNhdC5jCmluZGV4IDdjNGJlMTc0OC4uMDZhMmU5 NDlkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMKKysr IGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGxhbmNhdC5jCkBAIC0zMTAsMTEgKzMxMCwx MSBAQCBnZXRfcmVsYXRpb25faW5mbyhQbGFubmVySW5mbyAqcm9vdCwgT2lkIHJlbGF0aW9uT2Jq ZWN0SWQsIGJvb2wgaW5ocGFyZW50LAogCQkJCWluZm8tPmFtc2VhcmNoYXJyYXkgPSBhbXJvdXRp bmUtPmFtc2VhcmNoYXJyYXk7CiAJCQkJaW5mby0+YW1zZWFyY2hudWxscyA9IGFtcm91dGluZS0+ YW1zZWFyY2hudWxsczsKIAkJCQlpbmZvLT5hbWNhbnBhcmFsbGVsID0gYW1yb3V0aW5lLT5hbWNh bnBhcmFsbGVsOwotCQkJCWluZm8tPmFtaGFzZ2V0dHVwbGUgPSAoYW1yb3V0aW5lLT5hbWdldHR1 cGxlICE9IE5VTEwpOworCQkJCWluZm8tPmFtY2FucGxhaW5zY2FuID0gKGFtcm91dGluZS0+YW1n ZXRiYXRjaCAhPSBOVUxMIHx8CisJCQkJCQkJCQkJYW1yb3V0aW5lLT5hbWdldHR1cGxlICE9IE5V TEwpOwogCQkJCWluZm8tPmFtaGFzZ2V0Yml0bWFwID0gYW1yb3V0aW5lLT5hbWdldGJpdG1hcCAh PSBOVUxMICYmCiAJCQkJCXJlbGF0aW9uLT5yZF90YWJsZWFtLT5zY2FuX2JpdG1hcF9uZXh0X3R1 cGxlICE9IE5VTEw7Ci0JCQkJaW5mby0+YW1jYW5tYXJrcG9zID0gKGFtcm91dGluZS0+YW1tYXJr cG9zICE9IE5VTEwgJiYKLQkJCQkJCQkJCSAgYW1yb3V0aW5lLT5hbXJlc3RycG9zICE9IE5VTEwp OworCQkJCWluZm8tPmFtY2FubWFya3BvcyA9IGFtcm91dGluZS0+YW1nZXRiYXRjaCAhPSBOVUxM OwogCQkJCWluZm8tPmFtY29zdGVzdGltYXRlID0gYW1yb3V0aW5lLT5hbWNvc3Rlc3RpbWF0ZTsK IAkJCQlBc3NlcnQoaW5mby0+YW1jb3N0ZXN0aW1hdGUgIT0gTlVMTCk7CiAKQEAgLTQxMSw3ICs0 MTEsNyBAQCBnZXRfcmVsYXRpb25faW5mbyhQbGFubmVySW5mbyAqcm9vdCwgT2lkIHJlbGF0aW9u T2JqZWN0SWQsIGJvb2wgaW5ocGFyZW50LAogCQkJCWluZm8tPmFtc2VhcmNoYXJyYXkgPSBmYWxz ZTsKIAkJCQlpbmZvLT5hbXNlYXJjaG51bGxzID0gZmFsc2U7CiAJCQkJaW5mby0+YW1jYW5wYXJh bGxlbCA9IGZhbHNlOwotCQkJCWluZm8tPmFtaGFzZ2V0dHVwbGUgPSBmYWxzZTsKKwkJCQlpbmZv LT5hbWNhbnBsYWluc2NhbiA9IGZhbHNlOwogCQkJCWluZm8tPmFtaGFzZ2V0Yml0bWFwID0gZmFs c2U7CiAJCQkJaW5mby0+YW1jYW5tYXJrcG9zID0gZmFsc2U7CiAJCQkJaW5mby0+YW1jb3N0ZXN0 aW1hdGUgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNh bC9yZWxhdGlvbi5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZWxhdGlvbi5j CmluZGV4IDBiMWQ4MGI1Yi4uMGQwYmQ0NjhmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9sb2dpY2FsL3JlbGF0aW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v bG9naWNhbC9yZWxhdGlvbi5jCkBAIC04MzYsNiArODM2LDcgQEAgSXNJbmRleFVzYWJsZUZvclJl cGxpY2FJZGVudGl0eUZ1bGwoUmVsYXRpb24gaWR4cmVsLCBBdHRyTWFwICphdHRybWFwKQogewog CUF0dHJOdW1iZXIJa2V5Y29sOwogCW9pZHZlY3RvciAgKmluZGNsYXNzOworCWNvbnN0IEluZGV4 QW1Sb3V0aW5lICphbXJvdXRpbmU7CiAKIAkvKiBUaGUgaW5kZXggbXVzdCBub3QgYmUgYSBwYXJ0 aWFsIGluZGV4ICovCiAJaWYgKCFoZWFwX2F0dGlzbnVsbChpZHhyZWwtPnJkX2luZGV4dHVwbGUs IEFudW1fcGdfaW5kZXhfaW5kcHJlZCwgTlVMTCkpCkBAIC04ODcsMTAgKzg4OCwxMiBAQCBJc0lu ZGV4VXNhYmxlRm9yUmVwbGljYUlkZW50aXR5RnVsbChSZWxhdGlvbiBpZHhyZWwsIEF0dHJNYXAg KmF0dHJtYXApCiAJCXJldHVybiBmYWxzZTsKIAogCS8qCi0JICogVGhlIGdpdmVuIGluZGV4IGFj Y2VzcyBtZXRob2QgbXVzdCBpbXBsZW1lbnQgImFtZ2V0dHVwbGUiLCB3aGljaCB3aWxsCi0JICog YmUgdXNlZCBsYXRlciB0byBmZXRjaCB0aGUgdHVwbGVzLiAgU2VlIFJlbGF0aW9uRmluZFJlcGxU dXBsZUJ5SW5kZXgoKS4KKwkgKiBUaGUgZ2l2ZW4gaW5kZXggYWNjZXNzIG1ldGhvZCBtdXN0IGlt cGxlbWVudCAiYW1nZXR0dXBsZSIgb3IKKwkgKiAiYW1nZXRiYXRjaCIsIHdoaWNoIHdpbGwgYmUg dXNlZCBsYXRlciB0byBmZXRjaCB0aGUgdHVwbGVzLiAgU2VlCisJICogUmVsYXRpb25GaW5kUmVw bFR1cGxlQnlJbmRleCgpLgogCSAqLwotCWlmIChHZXRJbmRleEFtUm91dGluZUJ5QW1JZChpZHhy ZWwtPnJkX3JlbC0+cmVsYW0sIGZhbHNlKS0+YW1nZXR0dXBsZSA9PSBOVUxMKQorCWFtcm91dGlu ZSA9IEdldEluZGV4QW1Sb3V0aW5lQnlBbUlkKGlkeHJlbC0+cmRfcmVsLT5yZWxhbSwgZmFsc2Up OworCWlmIChhbXJvdXRpbmUtPmFtZ2V0dHVwbGUgPT0gTlVMTCAmJiBhbXJvdXRpbmUtPmFtZ2V0 YmF0Y2ggPT0gTlVMTCkKIAkJcmV0dXJuIGZhbHNlOwogCiAJcmV0dXJuIHRydWU7CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvYW11dGlscy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMv YWR0L2FtdXRpbHMuYwppbmRleCBjODFmYjYxYTAuLmRkZmQxYjU1YyAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L2FtdXRpbHMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQv YW11dGlscy5jCkBAIC0zNjMsMTAgKzM2MywxMSBAQCBpbmRleGFtX3Byb3BlcnR5KEZ1bmN0aW9u Q2FsbEluZm8gZmNpbmZvLAogCQkJCVBHX1JFVFVSTl9CT09MKHJvdXRpbmUtPmFtY2x1c3RlcmFi bGUpOwogCiAJCQljYXNlIEFNUFJPUF9JTkRFWF9TQ0FOOgotCQkJCVBHX1JFVFVSTl9CT09MKHJv dXRpbmUtPmFtZ2V0dHVwbGUgPyB0cnVlIDogZmFsc2UpOworCQkJCVBHX1JFVFVSTl9CT09MKHJv dXRpbmUtPmFtZ2V0dHVwbGUgIT0gTlVMTCB8fAorCQkJCQkJCSAgIHJvdXRpbmUtPmFtZ2V0YmF0 Y2ggIT0gTlVMTCk7CiAKIAkJCWNhc2UgQU1QUk9QX0JJVE1BUF9TQ0FOOgotCQkJCVBHX1JFVFVS Tl9CT09MKHJvdXRpbmUtPmFtZ2V0Yml0bWFwID8gdHJ1ZSA6IGZhbHNlKTsKKwkJCQlQR19SRVRV Uk5fQk9PTChyb3V0aW5lLT5hbWdldGJpdG1hcCAhPSBOVUxMKTsKIAogCQkJY2FzZSBBTVBST1Bf QkFDS1dBUkRfU0NBTjoKIAkJCQlQR19SRVRVUk5fQk9PTChyb3V0aW5lLT5hbWNhbmJhY2t3YXJk KTsKQEAgLTM5Miw3ICszOTMsOCBAQCBpbmRleGFtX3Byb3BlcnR5KEZ1bmN0aW9uQ2FsbEluZm8g ZmNpbmZvLAogCQkJUEdfUkVUVVJOX0JPT0wocm91dGluZS0+YW1jYW5tdWx0aWNvbCk7CiAKIAkJ Y2FzZSBBTVBST1BfQ0FOX0VYQ0xVREU6Ci0JCQlQR19SRVRVUk5fQk9PTChyb3V0aW5lLT5hbWdl dHR1cGxlID8gdHJ1ZSA6IGZhbHNlKTsKKwkJCVBHX1JFVFVSTl9CT09MKHJvdXRpbmUtPmFtZ2V0 dHVwbGUgIT0gTlVMTCB8fAorCQkJCQkJICAgcm91dGluZS0+YW1nZXRiYXRjaCAhPSBOVUxMKTsK IAogCQljYXNlIEFNUFJPUF9DQU5fSU5DTFVERToKIAkJCVBHX1JFVFVSTl9CT09MKHJvdXRpbmUt PmFtY2FuaW5jbHVkZSk7CmRpZmYgLS1naXQgYS9jb250cmliL2Jsb29tL2JsdXRpbHMuYyBiL2Nv bnRyaWIvYmxvb20vYmx1dGlscy5jCmluZGV4IDUxMTFjZGM2ZC4uNDc2YjY0ZThiIDEwMDY0NAot LS0gYS9jb250cmliL2Jsb29tL2JsdXRpbHMuYworKysgYi9jb250cmliL2Jsb29tL2JsdXRpbHMu YwpAQCAtMTQ2LDEwICsxNDYsMTIgQEAgYmxoYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCS5h bWJlZ2luc2NhbiA9IGJsYmVnaW5zY2FuLAogCQkuYW1yZXNjYW4gPSBibHJlc2NhbiwKIAkJLmFt Z2V0dHVwbGUgPSBOVUxMLAorCQkuYW1nZXRiYXRjaCA9IE5VTEwsCisJCS5hbWtpbGxpdGVtc2Jh dGNoID0gTlVMTCwKKwkJLmFtdW5ndWFyZGJhdGNoID0gTlVMTCwKIAkJLmFtZ2V0Yml0bWFwID0g YmxnZXRiaXRtYXAsCiAJCS5hbWVuZHNjYW4gPSBibGVuZHNjYW4sCi0JCS5hbW1hcmtwb3MgPSBO VUxMLAotCQkuYW1yZXN0cnBvcyA9IE5VTEwsCisJCS5hbXBvc3Jlc2V0ID0gTlVMTCwKIAkJLmFt ZXN0aW1hdGVwYXJhbGxlbHNjYW4gPSBOVUxMLAogCQkuYW1pbml0cGFyYWxsZWxzY2FuID0gTlVM TCwKIAkJLmFtcGFyYWxsZWxyZXNjYW4gPSBOVUxMLApkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21s L2luZGV4YW0uc2dtbCBiL2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwKaW5kZXggZjQ4ZGEzMTg1 Li4yYjQ4NzI4YzUgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwKKysrIGIv ZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbApAQCAtMTY3LDEwICsxNjcsMTIgQEAgdHlwZWRlZiBz dHJ1Y3QgSW5kZXhBbVJvdXRpbmUKICAgICBhbWJlZ2luc2Nhbl9mdW5jdGlvbiBhbWJlZ2luc2Nh bjsKICAgICBhbXJlc2Nhbl9mdW5jdGlvbiBhbXJlc2NhbjsKICAgICBhbWdldHR1cGxlX2Z1bmN0 aW9uIGFtZ2V0dHVwbGU7ICAgICAvKiBjYW4gYmUgTlVMTCAqLworICAgIGFtZ2V0YmF0Y2hfZnVu Y3Rpb24gYW1nZXRiYXRjaDsgLyogY2FuIGJlIE5VTEwgKi8KKyAgICBhbWtpbGxpdGVtc2JhdGNo X2Z1bmN0aW9uIGFta2lsbGl0ZW1zYmF0Y2g7CS8qIGNhbiBiZSBOVUxMICovCisgICAgYW11bmd1 YXJkYmF0Y2hfZnVuY3Rpb24gYW11bmd1YXJkYmF0Y2g7IC8qIGNhbiBiZSBOVUxMICovCiAgICAg YW1nZXRiaXRtYXBfZnVuY3Rpb24gYW1nZXRiaXRtYXA7ICAgLyogY2FuIGJlIE5VTEwgKi8KICAg ICBhbWVuZHNjYW5fZnVuY3Rpb24gYW1lbmRzY2FuOwotICAgIGFtbWFya3Bvc19mdW5jdGlvbiBh bW1hcmtwb3M7ICAgICAgIC8qIGNhbiBiZSBOVUxMICovCi0gICAgYW1yZXN0cnBvc19mdW5jdGlv biBhbXJlc3RycG9zOyAgICAgLyogY2FuIGJlIE5VTEwgKi8KKyAgICBhbXBvc3Jlc2V0X2Z1bmN0 aW9uIGFtcG9zcmVzZXQ7IC8qIGNhbiBiZSBOVUxMICovCiAKICAgICAvKiBpbnRlcmZhY2UgZnVu Y3Rpb25zIHRvIHN1cHBvcnQgcGFyYWxsZWwgaW5kZXggc2NhbnMgKi8KICAgICBhbWVzdGltYXRl cGFyYWxsZWxzY2FuX2Z1bmN0aW9uIGFtZXN0aW1hdGVwYXJhbGxlbHNjYW47ICAgIC8qIGNhbiBi ZSBOVUxMICovCkBAIC02NzYsOCArNjc4LDM4IEBAIGFtYmVnaW5zY2FuIChSZWxhdGlvbiBpbmRl eFJlbGF0aW9uLAogICAgPGVtcGhhc2lzPm11c3Q8L2VtcGhhc2lzPiBjcmVhdGUgdGhpcyBzdHJ1 Y3QgYnkgY2FsbGluZwogICAgPGZ1bmN0aW9uPlJlbGF0aW9uR2V0SW5kZXhTY2FuKCk8L2Z1bmN0 aW9uPi4gIEluIG1vc3QgY2FzZXMKICAgIDxmdW5jdGlvbj5hbWJlZ2luc2NhbjwvZnVuY3Rpb24+ IGRvZXMgbGl0dGxlIGJleW9uZCBtYWtpbmcgdGhhdCBjYWxsIGFuZCBwZXJoYXBzCi0gICBhY3F1 aXJpbmcgbG9ja3M7CisgICBhY3F1aXJpbmcgbG9ja3MgYW5kIGluaXRpYWxpemluZyBzdGFuZGFy ZCA8c3RydWN0bmFtZT5JbmRleFNjYW5EZXNjPC9zdHJ1Y3RuYW1lPiBmaWVsZHM7CiAgICB0aGUg aW50ZXJlc3RpbmcgcGFydHMgb2YgaW5kZXgtc2NhbiBzdGFydHVwIGFyZSBpbiA8ZnVuY3Rpb24+ YW1yZXNjYW48L2Z1bmN0aW9uPi4KKyAgIEluZGV4IGFjY2VzcyBtZXRob2RzIHRoYXQgdXNlIHRo ZSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGludGVyZmFjZQorICAgbXVzdCBhbHNv IHNldCB0aGUgZm9sbG93aW5nIGZpZWxkcyBpbiB0aGUgc2NhbiBkZXNjcmlwdG9yOgorICAgPGl0 ZW1pemVkbGlzdD4KKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgPGxpdGVyYWw+ c2Nhbi0mZ3Q7bWF4aXRlbXNiYXRjaDwvbGl0ZXJhbD46IHRoZSBtYXhpbXVtIG51bWJlciBvZiBp dGVtcworICAgICAgdGhhdCBjYW4gYXBwZWFyIGluIGEgc2luZ2xlIGJhdGNoICh0eXBpY2FsbHkg ZGVyaXZlZCBmcm9tIHRoZSBpbmRleCBwYWdlCisgICAgICBzaXplLCBlLmcuLCA8bGl0ZXJhbD5N YXhJbmRleFR1cGxlc1BlclBhZ2U8L2xpdGVyYWw+KS4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlz dGl0ZW0+CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIDxsaXRlcmFsPnNjYW4t Jmd0O2JhdGNoX2luZGV4X29wYXF1ZV9zaXplPC9saXRlcmFsPjogdGhlCisgICAgICA8ZnVuY3Rp b24+TUFYQUxJR048L2Z1bmN0aW9uPidkIHNpemUgb2YgdGhlIGluZGV4IEFNJ3MgcGVyLWJhdGNo IG9wYXF1ZQorICAgICAgYXJlYS4gIEVhY2ggYmF0Y2ggYWxsb2NhdGlvbiByZXNlcnZlcyB0aGlz IG11Y2ggc3BhY2UgaW1tZWRpYXRlbHkgYmVmb3JlCisgICAgICB0aGUgPHN0cnVjdG5hbWU+SW5k ZXhTY2FuQmF0Y2hEYXRhPC9zdHJ1Y3RuYW1lPiBwb2ludGVyLCBmb3IgdXNlIGJ5IHRoZQorICAg ICAgaW5kZXggQU0gdG8gc3RvcmUgcGVyLXBhZ2UgbmF2aWdhdGlvbiBzdGF0ZSAoZS5nLiwgYmF0 Y2ggaW5kZXggcGFnZSdzCisgICAgICBidWZmZXIgcGluIGFuZCBzaWJsaW5nIHBhZ2UgbGlua3Mp LgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+CisgICAgIDxw YXJhPgorICAgICAgPGxpdGVyYWw+c2Nhbi0mZ3Q7YmF0Y2hfdHVwbGVzX3dvcmtzcGFjZTwvbGl0 ZXJhbD46IHRoZSBzaXplIGluIGJ5dGVzCisgICAgICBvZiB0aGUgcGVyLWJhdGNoIHR1cGxlIHN0 b3JhZ2Ugd29ya3NwYWNlIHVzZWQgZm9yIGluZGV4LW9ubHkgc2NhbnMKKyAgICAgICh0eXBpY2Fs bHkgPGxpdGVyYWw+QkxDS1NaPC9saXRlcmFsPiksIG9yIDAgaWYgdGhlIGluZGV4IEFNIGRvZXMg bm90CisgICAgICBzdXBwb3J0IGluZGV4LW9ubHkgc2NhbnMuICBUaGUgd29ya3NwYWNlIGlzIGFj Y2Vzc2libGUgdmlhCisgICAgICA8c3RydWN0ZmllbGQ+YmF0Y2gtJmd0O2N1cnJUdXBsZXM8L3N0 cnVjdGZpZWxkPi4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L2l0ZW1pemVk bGlzdD4KICAgPC9wYXJhPgogCiAgIDxwYXJhPgpAQCAtNzQ5LDYgKzc4MSwyMzcgQEAgYW1nZXR0 dXBsZSAoSW5kZXhTY2FuRGVzYyBzY2FuLAogICAgPHN0cnVjdGZpZWxkPmFtZ2V0dHVwbGU8L3N0 cnVjdGZpZWxkPiBmaWVsZCBpbiBpdHMgPHN0cnVjdG5hbWU+SW5kZXhBbVJvdXRpbmU8L3N0cnVj dG5hbWU+CiAgICBzdHJ1Y3QgbXVzdCBiZSBzZXQgdG8gTlVMTC4KICAgPC9wYXJhPgorICA8bm90 ZT4KKyAgIDxwYXJhPgorICAgIEFzIG9mIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0 bmFtZT4gdmVyc2lvbiAxOSwgcG9zaXRpb24gbWFya2luZworICAgIGFuZCByZXN0b3JhdGlvbiBv ZiBzY2FucyBpcyBubyBsb25nZXIgc3VwcG9ydGVkIGZvciB0aGUKKyAgICA8ZnVuY3Rpb24+YW1n ZXR0dXBsZTwvZnVuY3Rpb24+IGludGVyZmFjZTsgb25seSB0aGUKKyAgICA8ZnVuY3Rpb24+YW1n ZXRiYXRjaDwvZnVuY3Rpb24+IGludGVyZmFjZSBzdXBwb3J0cyB0aGlzIGZlYXR1cmUuCisgICA8 L3BhcmE+CisgIDwvbm90ZT4KKworICA8cGFyYT4KKzxwcm9ncmFtbGlzdGluZz4KK0luZGV4U2Nh bkJhdGNoCithbWdldGJhdGNoIChJbmRleFNjYW5EZXNjIHNjYW4sCisgICAgICAgICAgICBJbmRl eFNjYW5CYXRjaCBwcmlvcmJhdGNoLAorICAgICAgICAgICAgU2NhbkRpcmVjdGlvbiBkaXJlY3Rp b24pOworPC9wcm9ncmFtbGlzdGluZz4KKyAgIFJldHVybiB0aGUgbmV4dCBiYXRjaCBvZiBpbmRl eCB0dXBsZXMgaW4gdGhlIGdpdmVuIHNjYW4sIG1vdmluZyBpbiB0aGUKKyAgIGdpdmVuIGRpcmVj dGlvbiAoZm9yd2FyZCBvciBiYWNrd2FyZCBpbiB0aGUgaW5kZXgpLiAgUmV0dXJucyBhbiBpbnN0 YW5jZSBvZgorICAgPHR5cGU+SW5kZXhTY2FuQmF0Y2g8L3R5cGU+IHdpdGggaW5kZXggdHVwbGVz IGxvYWRlZCwgb3IKKyAgIDxsaXRlcmFsPk5VTEw8L2xpdGVyYWw+IGlmIHRoZXJlIGFyZSBubyBt b3JlIGluZGV4IHR1cGxlcyBpbiB0aGUgZ2l2ZW4KKyAgIHNjYW4gZGlyZWN0aW9uLgorICA8L3Bh cmE+CisKKyAgPHBhcmE+CisgICBUaGUgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBp bnRlcmZhY2UgaXMgYW4gYWx0ZXJuYXRpdmUgdG8KKyAgIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9m dW5jdGlvbj4gdGhhdCByZXR1cm5zIG1hdGNoaW5nIGluZGV4IGVudHJpZXMgaW4gYmF0Y2hlcwor ICAgcmF0aGVyIHRoYW4gb25lIGF0IGEgdGltZS4gIEJ5IHJldHVybmluZyBhbGwgbWF0Y2hpbmcg aW5kZXggZW50cmllcyBmcm9tIGEKKyAgIHNpbmdsZSBpbmRleCBwYWdlIHRvZ2V0aGVyLCB0aGUg dGFibGUgQU0gZ2FpbnMgdmlzaWJpbGl0eSBpbnRvIHdoaWNoIHRhYmxlCisgICBibG9ja3Mgd2ls bCBiZSBuZWVkZWQgaW4gdGhlIG5lYXIgZnV0dXJlLgorICA8L3BhcmE+CisKKyAgPHBhcmE+Cisg ICBUaGUgdGFibGUgQU0gcGFzc2VzIDxsaXRlcmFsPnByaW9yYmF0Y2g8L2xpdGVyYWw+IHRvIGlu ZGljYXRlIHdoZXJlIHRoZQorICAgaW5kZXggQU0gc2hvdWxkIGNvbnRpbnVlIHNjYW5uaW5nIGZy b20gKG9yIDxsaXRlcmFsPk5VTEw8L2xpdGVyYWw+IG9uIHRoZQorICAgZmlyc3QgY2FsbCBmb3Ig dGhlIHNjYW4pLiAgVGhlIGluZGV4IEFNIHVzZXMgaW5mb3JtYXRpb24gZnJvbQorICAgPGxpdGVy YWw+cHJpb3JiYXRjaDwvbGl0ZXJhbD4gdG8gZGV0ZXJtaW5lIHdoaWNoIGluZGV4IHBhZ2UgdG8g cmVhZCBuZXh0LgorICAgVW5saWtlIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4sIHdo ZXJlIHRoZSBpbmRleCBBTSBtYWludGFpbnMgaXRzCisgICBvd24gc2NhbiBwb3NpdGlvbiwgd2l0 aCA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGl0IGlzIHRoZSBjYWxsZXIKKyAgIHRo YXQgY29udHJvbHMgdGhlIHByb2dyZXNzIG9mIHRoZSBzY2FuIHRocm91Z2ggdGhlIGluZGV4LiAg VGhlIGNhbGxlcgorICAgd2lsbCB0eXBpY2FsbHkgcGFzcyB0aGUgbW9zdCByZWNlbnRseSByZXR1 cm5lZCBiYXRjaCwgYnV0IHRoaXMgaXMgbm90CisgICBndWFyYW50ZWVkICZtZGFzaDsgZm9yIGV4 YW1wbGUsIGR1cmluZyBtYXJrL3Jlc3RvcmUgYSBwcmV2aW91c2x5CisgICByZXR1cm5lZCBiYXRj aCBtYXkgYmUgcGFzc2VkIGluc3RlYWQuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIEEgYmF0 Y2ggcmV0dXJuZWQgYnkgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBpcyBhc3NvY2lh dGVkIHdpdGggYW4KKyAgIGluZGV4IHBhZ2UgY29udGFpbmluZyBhdCBsZWFzdCBvbmUgbWF0Y2hp bmcgaXRlbS90dXBsZS4gIEEgYnVmZmVyCisgICBwaW4gY2FuIGJlIGhlbGQgb250byBieSB0aGUg dGFibGUgQU0gYXMgYW4gaW50ZXJsb2NrIGFnYWluc3QgY29uY3VycmVudCBUSUQKKyAgIHJlY3lj bGluZyBieSA8Y29tbWFuZD5WQUNVVU08L2NvbW1hbmQ+LiAgVGhlIHRhYmxlIEFNIGRyb3BzIHRo aXMgaW50ZXJsb2NrCisgICBieSBjYWxsaW5nIDxmdW5jdGlvbj5hbXVuZ3VhcmRiYXRjaDwvZnVu Y3Rpb24+IHdoZW4gaXQgaXMgc2FmZSB0byBkbyBzby4KKyAgIFNlZSA8eHJlZiBsaW5rZW5kPSJp bmRleC1sb2NraW5nIi8+IGZvciBkZXRhaWxzIG9uIGJ1ZmZlciBwaW4gbWFuYWdlbWVudAorICAg ZHVyaW5nIGluZGV4IHNjYW5zLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBBIDx0eXBlPklu ZGV4U2NhbkJhdGNoPC90eXBlPiB0aGF0IGlzIHJldHVybmVkIGJ5CisgICA8ZnVuY3Rpb24+YW1n ZXRiYXRjaDwvZnVuY3Rpb24+IGlzIG5vIGxvbmdlciBtYW5hZ2VkIGJ5IHRoZSBhY2Nlc3MgbWV0 aG9kLgorICAgSXQgaXMgdXAgdG8gdGhlIHRhYmxlIEFNIGNhbGxlciB0byBkZWNpZGUgd2hlbiBp dCBzaG91bGQgYmUgZnJlZWQgKHZpYQorICAgPGZ1bmN0aW9uPnRhYmxlYW1fdXRpbF9mcmVlX2Jh dGNoPC9mdW5jdGlvbj4pLiAgTm90ZSBhbHNvIHRoYXQKKyAgIDxmdW5jdGlvbj5hbWdldGJhdGNo PC9mdW5jdGlvbj4gZnVuY3Rpb25zIG11c3QgbmV2ZXIgbW9kaWZ5IHRoZQorICAgPHN0cnVjdGZp ZWxkPnByaW9yYmF0Y2g8L3N0cnVjdGZpZWxkPiBwYXJhbWV0ZXIuICBUaGUgY29yZQorICAgPGZp bGVuYW1lPnNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvPC9maWxlbmFtZT4gaW1wbGVtZW50YXRp b24gcHJvdmlkZXMgYQorICAgcmVmZXJlbmNlIGV4YW1wbGVzIG9mIHRoZSA8ZnVuY3Rpb24+YW1n ZXRiYXRjaDwvZnVuY3Rpb24+IGludGVyZmFjZS4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAg VGhlIHNhbWUgY2F2ZWF0cyBkZXNjcmliZWQgZm9yIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5j dGlvbj4gYXBwbHkgaGVyZQorICAgdG9vOiBhbiBlbnRyeSBpbiB0aGUgcmV0dXJuZWQgYmF0Y2gg bWVhbnMgb25seSB0aGF0IHRoZSBpbmRleCBjb250YWlucworICAgYW4gZW50cnkgdGhhdCBtYXRj aGVzIHRoZSBzY2FuIGtleXMsIG5vdCB0aGF0IHRoZSB0dXBsZSBuZWNlc3NhcmlseSBzdGlsbAor ICAgZXhpc3RzIGluIHRoZSBoZWFwIG9yIHdpbGwgcGFzcyB0aGUgY2FsbGVyJ3Mgc25hcHNob3Qg dGVzdC4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgSW5kZXggYWNjZXNzIG1ldGhvZHMgdXNp bmcgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBtdXN0IHNldAorICAgPGxpdGVyYWw+ c2Nhbi0mZ3Q7eHNfcmVjaGVjazwvbGl0ZXJhbD4gdG8gaW5kaWNhdGUgd2hldGhlciByZWNoZWNr aW5nIG9mCisgICBzY2FuIGtleXMgaXMgcmVxdWlyZWQsIGluIHRoZSBzYW1lIHdheSBhcyA8ZnVu Y3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+CisgICBkb2VzLiBIb3dldmVyLCA8bGl0ZXJhbD5z Y2FuLSZndDt4c19yZWNoZWNrPC9saXRlcmFsPiBtdXN0IGJlIHNldCBjb25zaXN0ZW50bHkKKyAg IGZvciBhbiBlbnRpcmUgc2NhbiByYXRoZXIgdGhhbiB2YXJ5aW5nIG9uIGEgcGVyLXR1cGxlIGJh c2lzLiBUaGlzIGlzIGEga2V5CisgICBkaWZmZXJlbmNlIGZyb20gPGZ1bmN0aW9uPmFtZ2V0dHVw bGU8L2Z1bmN0aW9uPiwgd2hpY2ggY2FuIHNldAorICAgPGxpdGVyYWw+c2Nhbi0mZ3Q7eHNfcmVj aGVjazwvbGl0ZXJhbD4gaW5kZXBlbmRlbnRseSBmb3IgZWFjaCB0dXBsZSBpdCByZXR1cm5zLgor ICAgSW5kZXggYWNjZXNzIG1ldGhvZHMgdGhhdCByZXF1aXJlIGdyYW51bGFyIGNvbnRyb2wgb3Zl cgorICAgPGxpdGVyYWw+c2Nhbi0mZ3Q7eHNfcmVjaGVjazwvbGl0ZXJhbD4gbXVzdCB1c2UgdGhl IDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4KKyAgIGludGVyZmFjZSBpbnN0ZWFkIG9m IDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4uCisgIDwvcGFyYT4KKworICA8cGFyYT4K KyAgIFNpbWlsYXJseSwgdGhlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaW50ZXJm YWNlIGRvZXMgbm90IGN1cnJlbnRseQorICAgc3VwcG9ydCBpbmRleC1vbmx5IHNjYW5zIHRoYXQg cmV0dXJuIGRhdGEgaW4gdGhlIGZvcm0gb2YgYQorICAgPHN0cnVjdG5hbWU+SGVhcFR1cGxlPC9z dHJ1Y3RuYW1lPiBwb2ludGVyLiAgSW5kZXgtb25seSBzY2FucyB3b3JrIGJ5CisgICBjb3B5aW5n IDxzdHJ1Y3RuYW1lPkluZGV4VHVwbGU8L3N0cnVjdG5hbWU+IHJlY29yZHMgZnJvbSBpbmRleCBw YWdlcyBpbnRvIGEKKyAgIGxvY2FsIGJ1ZmZlciBhc3NvY2lhdGVkIHdpdGggZWFjaCBiYXRjaC4g IDxsaXRlcmFsPnhzX2l0dXBkZXNjPC9saXRlcmFsPgorICAgd29ya3MgaW4gdGhlIHNhbWUgd2F5 IGFzIGFscmVhZHkgZGVzY3JpYmVkIGZvciA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+ LgorICAgVGhlIGluZGV4IGFjY2VzcyBtZXRob2QgbXVzdCBub3Qgc2V0IHRoZSA8bGl0ZXJhbD5z Y2FuLSZndDt4c19pdHVwPC9saXRlcmFsPgorICAgZmllbGQgaXRzZWxmLgorICAgV2l0aCA8ZnVu Y3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+LCB0aGUgaW5kZXggQU0gc2V0cworICAgPGxpdGVy YWw+c2Nhbi0mZ3Q7eHNfaGl0dXA8L2xpdGVyYWw+IHRvIHBvaW50IHRvIGEgcmVjb25zdHJ1Y3Rl ZAorICAgPHN0cnVjdG5hbWU+SGVhcFR1cGxlPC9zdHJ1Y3RuYW1lPiB3aG9zZSBsaWZldGltZSBl eHRlbmRzIHVudGlsIHRoZSBuZXh0CisgICA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+ IGNhbGwgJm1kYXNoOyBvbmx5IG9uZSB0dXBsZSBpcyB2YWxpZCBhdCBhCisgICB0aW1lLiAgV2l0 aCA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+LCBtdWx0aXBsZSBiYXRjaGVzIGFyZSBo ZWxkIG9wZW4KKyAgIHNpbXVsdGFuZW91c2x5IGFuZCBpdGVtcyBhcmUgY29uc3VtZWQgYXN5bmNo cm9ub3VzbHkgYnkgdGhlIHRhYmxlIEFNLCBzbworICAgdGhlcmUgaXMgbm8gZXF1aXZhbGVudCBz aW5nbGUtdHVwbGUgbGlmZXRpbWUgZm9yIHBlci1pdGVtCisgICA8c3RydWN0bmFtZT5IZWFwVHVw bGU8L3N0cnVjdG5hbWU+IHBvaW50ZXJzLiAgVGhlIGJhdGNoIGluZnJhc3RydWN0dXJlCisgICBw cm92aWRlcyBwZXItYmF0Y2ggc3RvcmFnZSBmb3IgPHN0cnVjdG5hbWU+SW5kZXhUdXBsZTwvc3Ry dWN0bmFtZT4gY29waWVzLAorICAgYnV0IGhhcyBubyBhbmFsb2dvdXMgbWVjaGFuaXNtIGZvciA8 c3RydWN0bmFtZT5IZWFwVHVwbGU8L3N0cnVjdG5hbWU+IGRhdGEKKyAgICh1c2VkIGJ5IGluZGV4 IEFNcyBzdWNoIGFzIDxhY3JvbnltPkdpU1Q8L2Fjcm9ueW0+IGFuZAorICAgPGFjcm9ueW0+U1At R2lTVDwvYWNyb255bT4gZm9yIHJlY29uc3RydWN0ZWQgdHVwbGVzIHRoYXQgbWlnaHQgbm90IGZp dCBpbgorICAgPHN0cnVjdG5hbWU+SW5kZXhUdXBsZTwvc3RydWN0bmFtZT4gZm9ybWF0KS4gIFRo aXMgbGltaXRhdGlvbiBjb3VsZCBiZQorICAgYWRkcmVzc2VkIGluIGEgZnV0dXJlIHZlcnNpb24g b2YgPHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPi4KKyAgPC9wYXJhPgorCisg IDxwYXJhPgorICAgVGhlIGluZGV4IGFjY2VzcyBtZXRob2QgbXVzdCBwcm92aWRlIGVpdGhlciA8 ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+CisgICBvciA8ZnVuY3Rpb24+YW1nZXRiYXRj aDwvZnVuY3Rpb24+LCBidXQgbm90IGJvdGguCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFRo ZSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGZ1bmN0aW9uIG5lZWQgb25seSBiZSBw cm92aWRlZCBpZiB0aGUKKyAgIGFjY2VzcyBtZXRob2Qgc3VwcG9ydHMgPHF1b3RlPnBsYWluPC9x dW90ZT4gaW5kZXggc2NhbnMuICBJZiBpdCBkb2Vzbid0LAorICAgdGhlIDxmdW5jdGlvbj5hbWdl dGJhdGNoPC9mdW5jdGlvbj4gZmllbGQgaW4gaXRzCisgICA8c3RydWN0bmFtZT5JbmRleEFtUm91 dGluZTwvc3RydWN0bmFtZT4gc3RydWN0IG11c3QgYmUgc2V0IHRvIE5VTEwuCisgIDwvcGFyYT4K KworICA8cGFyYT4KKzxwcm9ncmFtbGlzdGluZz4KK3ZvaWQKK2Fta2lsbGl0ZW1zYmF0Y2ggKElu ZGV4U2NhbkRlc2Mgc2NhbiwKKyAgICAgICAgICAgICAgICAgIEluZGV4U2NhbkJhdGNoIGJhdGNo KTsKKzwvcHJvZ3JhbWxpc3Rpbmc+CisgICBDYWxsZWQgYnkgdGhlIHRhYmxlIEFNIHdoZW4gaXQg aGFzIGZpbmlzaGVkIHByb2Nlc3NpbmcgYSBiYXRjaCB0aGF0CisgICBjb250YWlucyBkZWFkIGl0 ZW1zLCB0byBzZXQgPGxpdGVyYWw+TFBfREVBRDwvbGl0ZXJhbD4gYml0cyBpbiB0aGUgYmF0Y2gn cworICAgaW5kZXggcGFnZS4gIFRoZSBiYXRjaCdzIGluZGV4IHBhZ2Ugd2lsbCBub3QgYmUgbG9j a2VkIGJ5IHRoZSBjYWxsZXI7IHRoZQorICAgaW5kZXggQU0gbXVzdCBhY3F1aXJlIGFuZCByZWxl YXNlIGl0cyBvd24gbG9jayAoYW5kIHBpbikgb24gdGhlIGluZGV4IHBhZ2UuCisgIDwvcGFyYT4K KworICA8cGFyYT4KKyAgIFdoaWxlIGltcGxlbWVudGluZyA8ZnVuY3Rpb24+YW1raWxsaXRlbXNi YXRjaDwvZnVuY3Rpb24+IGlzIG9wdGlvbmFsLAorICAgZG9pbmcgc28gaXMgcmVjb21tZW5kZWQg Zm9yIHBlcmZvcm1hbmNlLCBhcyBpdCBhbGxvd3MgZnV0dXJlIHNjYW5zIHRvIHNraXAKKyAgIGtu b3duLWRlYWQgaW5kZXggZW50cmllcy4gIFRoZSBjb3JlIGluZGV4IGFjY2VzcyBtZXRob2QgdGhh dCBjdXJyZW50bHkKKyAgIHN1cHBvcnQgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiAo Qi10cmVlKSBpbXBsZW1lbnRzCisgICA8bGl0ZXJhbD5MUF9ERUFEPC9saXRlcmFsPiBtYXJraW5n LCB0aG91Z2ggdGhpcmQtcGFydHkgaW5kZXggYWNjZXNzIG1ldGhvZHMKKyAgIGFyZSBmcmVlIHRv IGNob29zZSB3aGV0aGVyIHRvIGltcGxlbWVudCB0aGlzIGZlYXR1cmUuCisgICBUaGUgdGFibGUg QU0gbWF5IGNhbGwKKyAgIDxmdW5jdGlvbj50YWJsZWFtX3V0aWxfc2NhbnBvc19raWxsaXRlbTwv ZnVuY3Rpb24+IHRvIG1hcmsgZGVhZCBpdGVtcyBhcworICAgdGhlIHNjYW4gcHJvZ3Jlc3Nlcy4g IElmIHRoZSBiYXRjaCBjb250YWlucyBhbnkgc3VjaCBkZWFkIGl0ZW1zLCB0aGUgYmF0Y2gncwor ICAgPHN0cnVjdGZpZWxkPmRlYWRJdGVtczwvc3RydWN0ZmllbGQ+IGFycmF5IHdpbGwgaGF2ZSBi ZWVuIHNvcnRlZCBhbmQKKyAgIGRlZHVwbGljYXRlZCBiZWZvcmUgPGZ1bmN0aW9uPmFta2lsbGl0 ZW1zYmF0Y2g8L2Z1bmN0aW9uPiBpcyBjYWxsZWQsIHdpdGgKKyAgIGl0ZW0gb2Zmc2V0cyBhcHBl YXJpbmcgaW4gYXNjZW5kaW5nIG9yZGVyICh0aGF0IGlzLCBpbiBpbmRleCBwYWdlIG9yZGVyLAor ICAgd2hpY2ggaXMgYWxzbyBiYXRjaCBvcmRlcikgYW5kIG5vIG9mZnNldCBhcHBlYXJpbmcgbW9y ZSB0aGFuIG9uY2UuICBJbmRleAorICAgYWNjZXNzIG1ldGhvZHMgY2FuIHJlbHkgb24gdGhpcyBv cmRlcmluZyB3aGVuIHByb2Nlc3NpbmcgZGVhZCBpdGVtczogdGhlCisgICA8c3RydWN0ZmllbGQ+ ZGVhZEl0ZW1zPC9zdHJ1Y3RmaWVsZD4gYXJyYXkgY2FuIGJlIHdhbGtlZCBpbiBsb2Nrc3RlcCB3 aXRoCisgICB0aGUgaW5kZXggcGFnZSdzIGl0ZW0gcG9pbnRlcnMsIHNpbmNlIGJvdGggYXJlIGlu IGFzY2VuZGluZyBvZmZzZXQgb3JkZXIuCisgICBUaGlzIGFsc28gbWVhbnMgdGhlIHRhYmxlIEFN IG5lZWQgbm90IGNhbGwKKyAgIDxmdW5jdGlvbj50YWJsZWFtX3V0aWxfc2NhbnBvc19raWxsaXRl bTwvZnVuY3Rpb24+IGluIGFueSBwYXJ0aWN1bGFyIG9yZGVyLgorICAgKEluZGV4IGFjY2VzcyBt ZXRob2RzIHVzaW5nIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gcmVseSBvbiB0aGUK KyAgIDxzdHJ1Y3RmaWVsZD5raWxsX3ByaW9yX3R1cGxlPC9zdHJ1Y3RmaWVsZD4gbWVjaGFuaXNt IGluc3RlYWQgdG8gbWFyayBkZWFkCisgICB0dXBsZXM7IHRoZSA8ZmlsZW5hbWU+c3JjL2JhY2tl bmQvYWNjZXNzL2dpc3QvPC9maWxlbmFtZT4gaW1wbGVtZW50YXRpb24KKyAgIHByb3ZpZGVzIGEg cmVmZXJlbmNlIGV4YW1wbGUuKQorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBXaGVuIGltcGxl bWVudGluZyA8ZnVuY3Rpb24+YW1raWxsaXRlbXNiYXRjaDwvZnVuY3Rpb24+LCB0aGUgaW5kZXgg QU0KKyAgIHNob3VsZCB2ZXJpZnkgdGhhdCB0aGUgaW5kZXggcGFnZSBoYXMgbm90IGJlZW4gbW9k aWZpZWQgc2luY2UgdGhlIGJhdGNoIHdhcworICAgb3JpZ2luYWxseSByZWFkLiAgVGhlIGJhdGNo J3MgPHN0cnVjdGZpZWxkPmxzbjwvc3RydWN0ZmllbGQ+IGZpZWxkIHJlY29yZHMKKyAgIHRoZSBw YWdlIExTTiBhdCB0aGUgdGltZSB0aGUgaW5kZXggcGFnZSBsb2NrIHdhcyByZWxlYXNlZCBieQor ICAgPGZ1bmN0aW9uPmluZGV4YW1fdXRpbF9iYXRjaF91bmxvY2s8L2Z1bmN0aW9uPiAoc2V0IGF1 dG9tYXRpY2FsbHkgYnkgdGhlCisgICBjb3JlIGNvZGUsIHRob3VnaCBpbmRleCBBTXMgd2hvc2Ug VElEIHJlY3ljbGluZyBpbnRlcmxvY2sgaXMgbm90IGp1c3QgYQorICAgYnVmZmVyIHBpbiBhcmUg bm90IG9ibGlnYXRlZCB0byB1c2UKKyAgIDxmdW5jdGlvbj5pbmRleGFtX3V0aWxfYmF0Y2hfdW5s b2NrPC9mdW5jdGlvbj4gJm1kYXNoOyB0aGV5IGNhbiBpbXBsZW1lbnQKKyAgIHRoZWlyIG93biBl cXVpdmFsZW50LCBhbmQgYXJlIGZyZWUgdG8gdXNlIHRoZSBiYXRjaAorICAgPHN0cnVjdGZpZWxk Pmxzbjwvc3RydWN0ZmllbGQ+IGZpZWxkIGluIHdoYXRldmVyIHdheSB0aGV5IGRlZW0KKyAgIG5l Y2Vzc2FyeSkuICBUaGUgaW5kZXggQU0gc2hvdWxkCisgICByZS1yZWFkIHRoZSBwYWdlLCBjb21w YXJlIHRoZSBjdXJyZW50IHBhZ2UgTFNOIGFnYWluc3QKKyAgIDxzdHJ1Y3RmaWVsZD5iYXRjaC0m Z3Q7bHNuPC9zdHJ1Y3RmaWVsZD4sIGFuZCBnaXZlIHVwIG9uIHNldHRpbmcKKyAgIDxsaXRlcmFs PkxQX0RFQUQ8L2xpdGVyYWw+IGJpdHMgaWYgdGhlIExTTiBoYXMgYWR2YW5jZWQuICBBbiBhZHZh bmNlZCBMU04KKyAgIGluZGljYXRlcyB0aGF0IHRoZSBwYWdlIHdhcyBtb2RpZmllZCAmbWRhc2g7 IHBvc3NpYmx5IGJ5CisgICA8Y29tbWFuZD5WQUNVVU08L2NvbW1hbmQ+IHJlY3ljbGluZyBoZWFw IFRJRHMgJm1kYXNoOyBzbyBpdCB3b3VsZCBiZSB1bnNhZmUKKyAgIHRvIGFzc3VtZSB0aGF0IGlu ZGV4IGVudHJpZXMgc3RpbGwgcG9pbnQgdG8gdGhlIHNhbWUgaGVhcCB0dXBsZXMuICBTaW5jZQor ICAgPGxpdGVyYWw+TFBfREVBRDwvbGl0ZXJhbD4gbWFya2luZyBpcyBvbmx5IGFuIG9wdGltaXph dGlvbiBoaW50LCBpdCBpcworICAgYWx3YXlzIHNhZmUgdG8gc2tpcCBpdC4gIE5vdGUgdGhhdCB0 aGlzIExTTiBjb21wYXJpc29uIHRlY2huaXF1ZSByZXF1aXJlcworICAgdGhlIGluZGV4IEFNIHRv IHVzZSBmYWtlIChtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcpIExTTnMgb24gaXRzIHBhZ2VzIGZv cgorICAgcmVsYXRpb25zIHdoZXJlIFdBTCBpcyBub3QgZ2VuZXJhdGVkLCBzaW5jZSByZWFsIExT TnMgYXJlIG5vdCBhdmFpbGFibGUgaW4KKyAgIHRoYXQgY2FzZS4gIFNlZSB0aGUgQi10cmVlIGlu ZGV4IGltcGxlbWVudGF0aW9uIGZvciBhIHJlZmVyZW5jZQorICAgZXhhbXBsZSBvZiB0aGlzIHRl Y2huaXF1ZS4gIEFuIGluZGV4IEFNIHRoYXQgZG9lcyBub3QgaW1wbGVtZW50IGZha2UgTFNOcwor ICAgY2FuIHN0aWxsIHByb3ZpZGUgPGZ1bmN0aW9uPmFta2lsbGl0ZW1zYmF0Y2g8L2Z1bmN0aW9u PiwgYnV0IHNob3VsZCBzaW1wbHkKKyAgIGRvIG5vdGhpbmcgd2hlbiB0aGUgcmVsYXRpb24gZG9l cyBub3QgZ2VuZXJhdGUgV0FMIChpLmUuLCB3aGVuCisgICA8ZnVuY3Rpb24+UmVsYXRpb25OZWVk c1dBTCgpPC9mdW5jdGlvbj4gaXMgZmFsc2UpLCBzaW5jZSB0aGUgTFNOIGNvbXBhcmlzb24KKyAg IHdvdWxkIGJlIHVucmVsaWFibGUuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFRoZSA8ZnVu Y3Rpb24+YW1raWxsaXRlbXNiYXRjaDwvZnVuY3Rpb24+IGZ1bmN0aW9uIGlzIG9wdGlvbmFsLiAg SW5kZXgKKyAgIGFjY2VzcyBtZXRob2RzIHRoYXQgd2FudCB0byBtYXJrIGRlYWQgaW5kZXggdHVw bGVzIHdpdGgKKyAgIDxsaXRlcmFsPkxQX0RFQUQ8L2xpdGVyYWw+IGJpdHMgc2hvdWxkIHByb3Zp ZGUgaXQ7IHRob3NlIHRoYXQgZG9uJ3QgY2FuCisgICBsZWF2ZSBpdCBzZXQgdG8gPGxpdGVyYWw+ TlVMTDwvbGl0ZXJhbD4gZXZlbiB3aGVuIHRoZXkgcHJvdmlkZQorICAgPGZ1bmN0aW9uPmFtZ2V0 YmF0Y2g8L2Z1bmN0aW9uPi4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorPHByb2dyYW1saXN0aW5n Pgordm9pZAorYW11bmd1YXJkYmF0Y2ggKEluZGV4U2NhbkRlc2Mgc2NhbiwKKyAgICAgICAgICAg ICAgICBJbmRleFNjYW5CYXRjaCBiYXRjaCk7Cis8L3Byb2dyYW1saXN0aW5nPgorICAgQ2FsbGVk IGJ5IHRoZSB0YWJsZSBBTSAodmlhCisgICA8ZnVuY3Rpb24+dGFibGVhbV91dGlsX3VuZ3VhcmRf YmF0Y2g8L2Z1bmN0aW9uPikgd2hlbiBpdCBpcyBzYWZlIHRvIGRyb3AKKyAgIHRoZSBUSUQgcmVj eWNsaW5nIGludGVybG9jayB0aGF0IHRoZSBpbmRleCBBTSBob2xkcyBvbiB0aGUgYmF0Y2gncyBp bmRleAorICAgbGVhZiBwYWdlLCB3aGljaCBwcmV2ZW50cyBjb25jdXJyZW50IFRJRCByZWN5Y2xp bmcgYnkKKyAgIDxjb21tYW5kPlZBQ1VVTTwvY29tbWFuZD4uCisgICBGb3JtYWxseSwgYW4gaW5k ZXggQU0gbWF5IGhvbGQgYSBkaWZmZXJlbnQga2luZCBvZiBpbnRlcmxvY2ssIG9yIG11bHRpcGxl CisgICBpbnRlcmxvY2tzLCBpbiBpdHMgcGVyLWJhdGNoIG9wYXF1ZSBhcmVhLCBidXQgaW4gcHJh Y3RpY2UgdGhlIGJ1aWx0LWluCisgICBpbmRleCBBTSB0aGF0IHN1cHBvcnRzIDxmdW5jdGlvbj5h bWdldGJhdGNoPC9mdW5jdGlvbj4gJm1kYXNoOyBCLXRyZWUKKyAgICZtZGFzaDsgaG9sZHMgYSBz aW5nbGUgYnVmZmVyIHBpbi4gIFNlZSA8eHJlZiBsaW5rZW5kPSJpbmRleC1sb2NraW5nIi8+Cisg ICBmb3IgZGV0YWlscyBvbiBidWZmZXIgcGluIG1hbmFnZW1lbnQgZHVyaW5nIGluZGV4IHNjYW5z LiAgVGhpcyBmdW5jdGlvbgorICAgd2lsbCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGZvciBlYWNo IGd1YXJkZWQgYmF0Y2guCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFRoZSBpbmRleCBBTSBt YXkgY2hvb3NlIHRvIHJldGFpbiBpdHMgb3duIGJ1ZmZlciBwaW5zIHdoZW4gdGhpcyBzZXJ2ZXMg YW4KKyAgIGludGVybmFsIHB1cnBvc2UgKGZvciBleGFtcGxlLCBtYWludGFpbmluZyBhIGRlc2Nl bnQgc3RhY2sgb2YgcGlubmVkIGluZGV4CisgICBwYWdlcyBmb3IgcmV1c2UgYWNyb3NzIDxmdW5j dGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gY2FsbHMpLiAgSG93ZXZlciwKKyAgIGFueSBzY2hl bWUgdGhhdCByZXRhaW5zIGJ1ZmZlciBwaW5zIG1hbmFnZWQgYnkgdGhlIGluZGV4IEFNIG11c3Qg YmUgc3VyZSB0bworICAgZnJlZSB0aGUgcGlucyBhdCBhbiBvcHBvcnR1bmUgcG9pbnQgKGZvciBl eGFtcGxlIHdoZW4gPGZ1bmN0aW9uPmFtcmVzY2FuPC9mdW5jdGlvbj4KKyAgIGFuZC9vciA8ZnVu Y3Rpb24+YW1lbmRzY2FuPC9mdW5jdGlvbj4gYXJlIGNhbGxlZCkuICBJdCBtdXN0IGFsc28ga2Vl cCB0aGUKKyAgIG51bWJlciBvZiByZXRhaW5lZCBwaW5zIGZpeGVkIGFuZCBzbWFsbCwgdG8gYXZv aWQgZXhoYXVzdGluZyB0aGUgYmFja2VuZCdzCisgICBidWZmZXIgcGluIGxpbWl0LgorICA8L3Bh cmE+CisKKyAgPHBhcmE+CisgICBUaGUgPGZ1bmN0aW9uPmFtdW5ndWFyZGJhdGNoPC9mdW5jdGlv bj4gZnVuY3Rpb24gaXMgcmVxdWlyZWQgZm9yIGFueSBpbmRleAorICAgYWNjZXNzIG1ldGhvZCB0 aGF0IHByb3ZpZGVzIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4uCisgIDwvcGFyYT4K IAogICA8cGFyYT4KIDxwcm9ncmFtbGlzdGluZz4KQEAgLTc2OCw4ICsxMDMxLDggQEAgYW1nZXRi aXRtYXAgKEluZGV4U2NhbkRlc2Mgc2NhbiwKICAgIGl0c2VsZiwgYW5kIHRoZXJlZm9yZSBjYWxs ZXJzIHJlY2hlY2sgYm90aCB0aGUgc2NhbiBjb25kaXRpb25zIGFuZCB0aGUKICAgIHBhcnRpYWwg aW5kZXggcHJlZGljYXRlIChpZiBhbnkpIGZvciByZWNoZWNrYWJsZSB0dXBsZXMuICBUaGF0IG1p Z2h0IG5vdAogICAgYWx3YXlzIGJlIHRydWUsIGhvd2V2ZXIuCi0gICA8ZnVuY3Rpb24+YW1nZXRi aXRtYXA8L2Z1bmN0aW9uPiBhbmQKLSAgIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4g Y2Fubm90IGJlIHVzZWQgaW4gdGhlIHNhbWUgaW5kZXggc2NhbjsgdGhlcmUKKyAgIE9ubHkgb25l IG9mIDxmdW5jdGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+LCA8ZnVuY3Rpb24+YW1nZXR0dXBs ZTwvZnVuY3Rpb24+LAorICAgb3IgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBjYW4g YmUgdXNlZCBpbiBhbnkgZ2l2ZW4gaW5kZXggc2NhbjsgdGhlcmUKICAgIGFyZSBvdGhlciByZXN0 cmljdGlvbnMgdG9vIHdoZW4gdXNpbmcgPGZ1bmN0aW9uPmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4s IGFzIGV4cGxhaW5lZAogICAgaW4gPHhyZWYgbGlua2VuZD0iaW5kZXgtc2Nhbm5pbmciLz4uCiAg IDwvcGFyYT4KQEAgLTc4MSw2ICsxMDQ0LDI5IEBAIGFtZ2V0Yml0bWFwIChJbmRleFNjYW5EZXNj IHNjYW4sCiAgICBzdHJ1Y3QgbXVzdCBiZSBzZXQgdG8gTlVMTC4KICAgPC9wYXJhPgogCisgIDxw YXJhPgorICAgSW5kZXggYWNjZXNzIG1ldGhvZHMgdGhhdCB1c2UgdGhlIDxmdW5jdGlvbj5hbWdl dGJhdGNoPC9mdW5jdGlvbj4gaW50ZXJmYWNlCisgICB3aWxsIGdlbmVyYWxseSBhbHNvIHdhbnQg dG8gdXNlIHRoZSBiYXRjaCBhbGxvY2F0aW9uIGluZnJhc3RydWN0dXJlCisgICAoPGZ1bmN0aW9u PmluZGV4YW1fdXRpbF9iYXRjaF9hbGxvYzwvZnVuY3Rpb24+IGFuZAorICAgPGZ1bmN0aW9uPmlu ZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlPC9mdW5jdGlvbj4pIHdpdGhpbiB0aGVpcgorICAgPGZ1 bmN0aW9uPmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4gaW1wbGVtZW50YXRpb24uICBUaGUgY29udmVu dGlvbiBpcyB0aGF0IG9ubHkKKyAgIG9uZSBiYXRjaCBpcyBhbGxvY2F0ZWQgYXQgYSB0aW1lIGR1 cmluZyA8ZnVuY3Rpb24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiwKKyAgIHVubGlrZSA8ZnVuY3Rp b24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IHdoZXJlIHNldmVyYWwgYmF0Y2hlcyBtYXkgYmUKKyAg IG91dHN0YW5kaW5nIGluIHRoZSBiYXRjaCByaW5nIGJ1ZmZlciBjb25jdXJyZW50bHkuICBUbyBt YWludGFpbiB0aGlzCisgICBvbmUtYmF0Y2gtYXQtYS10aW1lIGludmFyaWFudCwgdGhlIGluZGV4 IEFNIGl0c2VsZiByZWxlYXNlcyBpdHMgcHJpb3IgYmF0Y2gKKyAgIHZpYSA8ZnVuY3Rpb24+aW5k ZXhhbV91dGlsX2JhdGNoX3JlbGVhc2U8L2Z1bmN0aW9uPiBqdXN0IGFzIHRoZSBzY2FuIGxlYXZl cworICAgdGhhdCBiYXRjaCdzIGluZGV4IHBhZ2UgYW5kIGlzIGFib3V0IHRvIGdlbmVyYXRlIHRo ZSBuZXh0IGJhdGNoICZtZGFzaDsgdGhlCisgICBzYW1lIHBvaW50IHdoZXJlIGl0IGV4dHJhY3Rz IG5hdmlnYXRpb24gc3RhdGUgKHN1Y2ggYXMgc2libGluZy1wYWdlIGxpbmtzKQorICAgZnJvbSA8 bGl0ZXJhbD5wcmlvcmJhdGNoPC9saXRlcmFsPi4gIFRoaXMgZWFybHkgcmVsZWFzZSBpcyBzcGVj aWZpYyB0bworICAgPGZ1bmN0aW9uPmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4gc2NhbnM7IGR1cmlu ZyA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+CisgICBzY2FucyB0aGUgPGxpdGVyYWw+ cHJpb3JiYXRjaDwvbGl0ZXJhbD4gaXMgc3RyaWN0bHkgb3duZWQgYnkgdGhlIHRhYmxlIEFNCisg ICBhbmQgY29yZSBjb2RlLCBhbmQgdGhlIGluZGV4IEFNIG11c3QgbmV2ZXIgcmVsZWFzZSBpdC4g IFNlZQorICAgPGZ1bmN0aW9uPl9idF9uZXh0PC9mdW5jdGlvbj4gZm9yIGEKKyAgIHJlZmVyZW5j ZSBleGFtcGxlLiAgVGhlIHJlbGVhc2VkIGJhdGNoIGlzIGNhY2hlZCBpbnRlcm5hbGx5IGFuZCBy ZXVzZWQgYnkKKyAgIHRoZSBuZXh0IDxmdW5jdGlvbj5pbmRleGFtX3V0aWxfYmF0Y2hfYWxsb2M8 L2Z1bmN0aW9uPiBjYWxsLCBhdm9pZGluZworICAgcmVwZWF0ZWQgbWVtb3J5IGFsbG9jYXRpb24g ZHVyaW5nIHRoZSBiaXRtYXAgc2Nhbi4KKyAgPC9wYXJhPgorCiAgIDxwYXJhPgogPHByb2dyYW1s aXN0aW5nPgogdm9pZApAQCAtNzk1LDMyICsxMDgxLDQ0IEBAIGFtZW5kc2NhbiAoSW5kZXhTY2Fu RGVzYyBzY2FuKTsKICAgPHBhcmE+CiA8cHJvZ3JhbWxpc3Rpbmc+CiB2b2lkCi1hbW1hcmtwb3Mg KEluZGV4U2NhbkRlc2Mgc2Nhbik7CithbXBvc3Jlc2V0IChJbmRleFNjYW5EZXNjIHNjYW4sCisg ICAgICAgICAgICBJbmRleFNjYW5CYXRjaCBiYXRjaCk7CiA8L3Byb2dyYW1saXN0aW5nPgotICAg TWFyayBjdXJyZW50IHNjYW4gcG9zaXRpb24uICBUaGUgYWNjZXNzIG1ldGhvZCBuZWVkIG9ubHkg c3VwcG9ydCBvbmUKLSAgIHJlbWVtYmVyZWQgc2NhbiBwb3NpdGlvbiBwZXIgc2Nhbi4KKyAgIE5v dGlmeSB0aGUgaW5kZXggQU0gdGhhdCB0aGUgdGFibGUgQU0gaXMgYWJvdXQgdG8gY2hhbmdlIHRo ZSBzY2FuJ3MKKyAgIGxvZ2ljYWwgcG9zaXRpb24gaW4gYSB3YXkgdGhhdCByZXF1aXJlcyB0aGUg aW5kZXggQU0gdG8gcmVzZXQgYW55IHN0YXRlCisgICB0aGF0IGluZGVwZW5kZW50bHkgdHJhY2tz IHRoZSBzY2FuJ3MgcHJvZ3Jlc3MuICBGb3IgZXhhbXBsZSwgQi10cmVlIG11c3QKKyAgIHJlc2V0 IHRoZSBhcnJheSBrZXlzIHVzZWQgYnkgPGxpdGVyYWw+U2NhbGFyQXJyYXlPcEV4cHI8L2xpdGVy YWw+IHF1YWwKKyAgIGV2YWx1YXRpb24gd2hlbiB0aGUgc2NhbiBwb3NpdGlvbiBjaGFuZ2VzLiAg VGhpcyBjYWxsYmFjayBpcyBpbnZva2VkIHdoZW4KKyAgIHRoZSB0YWJsZSBBTSBpcyBhYm91dCB0 byBwcm9jZXNzIGEgYmF0Y2ggaW4gYSBkaWZmZXJlbnQgZGlyZWN0aW9uIHRoYW4KKyAgIHdhcyB1 c2VkIHdoZW4gdGhlIGJhdGNoIHdhcyBvcmlnaW5hbGx5IHJldHVybmVkIGJ5CisgICA8ZnVuY3Rp b24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+LCBhbmQgYWxzbyB3aGVuIGEgbWFya2VkIHNjYW4gcG9z aXRpb24gaXMKKyAgIGFib3V0IHRvIGJlIHJlc3RvcmVkLgogICA8L3BhcmE+CiAKICAgPHBhcmE+ Ci0gICBUaGUgPGZ1bmN0aW9uPmFtbWFya3BvczwvZnVuY3Rpb24+IGZ1bmN0aW9uIG5lZWQgb25s eSBiZSBwcm92aWRlZCBpZiB0aGUgYWNjZXNzCi0gICBtZXRob2Qgc3VwcG9ydHMgb3JkZXJlZCBz Y2Fucy4gIElmIGl0IGRvZXNuJ3QsCi0gICB0aGUgPHN0cnVjdGZpZWxkPmFtbWFya3Bvczwvc3Ry dWN0ZmllbGQ+IGZpZWxkIGluIGl0cyA8c3RydWN0bmFtZT5JbmRleEFtUm91dGluZTwvc3RydWN0 bmFtZT4KLSAgIHN0cnVjdCBtYXkgYmUgc2V0IHRvIE5VTEwuCisgICBXaGVuIDxmdW5jdGlvbj5h bXBvc3Jlc2V0PC9mdW5jdGlvbj4gaXMgY2FsbGVkIGR1ZSB0byBhIGNyb3NzLWJhdGNoCisgICBk aXJlY3Rpb24gY2hhbmdlLCB0aGUgY29yZSBzeXN0ZW0gd2lsbCBoYXZlIGFscmVhZHkgZmxpcHBl ZCB0aGUgYmF0Y2gncworICAgPHN0cnVjdGZpZWxkPmRpcjwvc3RydWN0ZmllbGQ+IGZpZWxkIHRv IHJlZmxlY3QgdGhlIG5ldyBzY2FuIGRpcmVjdGlvbgorICAgYmVmb3JlIG1ha2luZyB0aGUgY2Fs bC4gIFRoZSBpbmRleCBBTSBzaG91bGQgdXNlIHRoaXMgdXBkYXRlZCBkaXJlY3Rpb24KKyAgIHdo ZW4gcmVzZXR0aW5nIGFueSBzdGF0ZSB0aGF0IGRlcGVuZHMgb24ga25vd2luZyB3aGljaCB3YXkg dGhlIHNjYW4gaXMKKyAgIHByb2NlZWRpbmcuICBXaGVuIGNhbGxlZCB0byByZXN0b3JlIGEgbWFy a2VkIHBvc2l0aW9uLCB0aGUgYmF0Y2gncworICAgPHN0cnVjdGZpZWxkPmRpcjwvc3RydWN0Zmll bGQ+IGlzIG5vdCBtb2RpZmllZDsgaXQgcmV0YWlucyB0aGUgZGlyZWN0aW9uCisgICBmcm9tIHdo ZW4gdGhlIGJhdGNoIHdhcyBvcmlnaW5hbGx5IHJldHVybmVkLiAgSW4gYm90aCBjYXNlcywgdGhl IGJhdGNoCisgICBwYXNzZWQgdG8gPGZ1bmN0aW9uPmFtcG9zcmVzZXQ8L2Z1bmN0aW9uPiBpcyB0 aGUgYmF0Y2ggdGhhdCB3aWxsIGJlIHVzZWQKKyAgIHRvIGNvbnRpbnVlIHRoZSBzY2FuLgogICA8 L3BhcmE+CiAKICAgPHBhcmE+Ci08cHJvZ3JhbWxpc3Rpbmc+Ci12b2lkCi1hbXJlc3RycG9zIChJ bmRleFNjYW5EZXNjIHNjYW4pOwotPC9wcm9ncmFtbGlzdGluZz4KLSAgIFJlc3RvcmUgdGhlIHNj YW4gdG8gdGhlIG1vc3QgcmVjZW50bHkgbWFya2VkIHBvc2l0aW9uLgotICA8L3BhcmE+Ci0KLSAg PHBhcmE+Ci0gICBUaGUgPGZ1bmN0aW9uPmFtcmVzdHJwb3M8L2Z1bmN0aW9uPiBmdW5jdGlvbiBu ZWVkIG9ubHkgYmUgcHJvdmlkZWQgaWYgdGhlIGFjY2VzcwotICAgbWV0aG9kIHN1cHBvcnRzIG9y ZGVyZWQgc2NhbnMuICBJZiBpdCBkb2Vzbid0LAotICAgdGhlIDxzdHJ1Y3RmaWVsZD5hbXJlc3Ry cG9zPC9zdHJ1Y3RmaWVsZD4gZmllbGQgaW4gaXRzIDxzdHJ1Y3RuYW1lPkluZGV4QW1Sb3V0aW5l PC9zdHJ1Y3RuYW1lPgotICAgc3RydWN0IG1heSBiZSBzZXQgdG8gTlVMTC4KKyAgIEluZGV4IGFj Y2VzcyBtZXRob2RzIHRoYXQgaGF2ZSBwcml2YXRlIHN0YXRlIHdoaWNoIG11c3QgYmUgcmVzZXQg d2hlbiB0aGUKKyAgIHNjYW4gcG9zaXRpb24gY2hhbmdlcyBtdXN0IHByb3ZpZGUgYW4gPGZ1bmN0 aW9uPmFtcG9zcmVzZXQ8L2Z1bmN0aW9uPgorICAgaW1wbGVtZW50YXRpb24uICBJbmRleCBBTXMg d2l0aCBubyBzdWNoIHN0YXRlIG1heSBzZXQKKyAgIDxzdHJ1Y3RmaWVsZD5hbXBvc3Jlc2V0PC9z dHJ1Y3RmaWVsZD4gdG8gTlVMTC4KKyAgIFRoZSA8ZnVuY3Rpb24+YW1wb3NyZXNldDwvZnVuY3Rp b24+IGZ1bmN0aW9uIGNhbiBvbmx5IGJlIHByb3ZpZGVkIHdoZW4gdGhlCisgICBhY2Nlc3MgbWV0 aG9kIHN1cHBvcnRzIG9yZGVyZWQgc2NhbnMgdGhyb3VnaCB0aGUgPGZ1bmN0aW9uPmFtZ2V0YmF0 Y2g8L2Z1bmN0aW9uPgorICAgaW50ZXJmYWNlLiAgKE5vdGUgdGhhdCB3aGVuIDxzdHJ1Y3RmaWVs ZD5hbWNhbmJhY2t3YXJkPC9zdHJ1Y3RmaWVsZD4gaXMKKyAgIGZhbHNlLCB0aGUgc2NhbiBkaXJl Y3Rpb24gY2Fubm90IGNoYW5nZSwgc28KKyAgIDxmdW5jdGlvbj5hbXBvc3Jlc2V0PC9mdW5jdGlv bj4gd2lsbCBvbmx5IGJlIGNhbGxlZCBkdWUgdG8gbWFyay9yZXN0b3JlCisgICBpbiB0aGF0IGNh c2UuKQogICA8L3BhcmE+CiAKICAgPHBhcmE+CkBAIC05NzUsNiArMTI3Myw4IEBAIGFtdHJhbnNs YXRlY21wdHlwZSAoQ29tcGFyZVR5cGUgY21wdHlwZSwgT2lkIG9wZmFtaWx5LCBPaWQgb3BjaW50 eXBlKTsKICAgICAgICBBY2Nlc3MgbWV0aG9kcyB0aGF0IGFsd2F5cyByZXR1cm4gZW50cmllcyBp biB0aGUgbmF0dXJhbCBvcmRlcmluZwogICAgICAgIG9mIHRoZWlyIGRhdGEgKHN1Y2ggYXMgYnRy ZWUpIHNob3VsZCBzZXQKICAgICAgICA8c3RydWN0ZmllbGQ+YW1jYW5vcmRlcjwvc3RydWN0Zmll bGQ+IHRvIHRydWUuCisgICAgICAgQm90aCA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+ IGFuZCA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+CisgICAgICAgc2NhbnMgc3VwcG9y dCB0aGlzIGNhcGFiaWxpdHkuCiAgICAgICAgQ3VycmVudGx5LCBzdWNoIGFjY2VzcyBtZXRob2Rz IG11c3QgdXNlIGJ0cmVlLWNvbXBhdGlibGUgc3RyYXRlZ3kKICAgICAgICBudW1iZXJzIGZvciB0 aGVpciBlcXVhbGl0eSBhbmQgb3JkZXJpbmcgb3BlcmF0b3JzLgogICAgICAgPC9wYXJhPgpAQCAt OTk0LDM0ICsxMjk0LDQyIEBAIGFtdHJhbnNsYXRlY21wdHlwZSAoQ29tcGFyZVR5cGUgY21wdHlw ZSwgT2lkIG9wZmFtaWx5LCBPaWQgb3BjaW50eXBlKTsKICAgPC9wYXJhPgogCiAgIDxwYXJhPgot ICAgVGhlIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gZnVuY3Rpb24gaGFzIGEgPGxp dGVyYWw+ZGlyZWN0aW9uPC9saXRlcmFsPiBhcmd1bWVudCwKKyAgIE5vdGUgdGhhdCA8ZnVuY3Rp b24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IHNjYW5zIGRvIG5vdCBjdXJyZW50bHkgc3VwcG9ydAor ICAgb3JkZXJpbmcgb3BlcmF0b3JzLiAgVGhlIGNvcmUgZXhlY3V0b3IgZXhwZWN0cyA8ZnVuY3Rp b24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+CisgICB0byBzZXQgPHN0cnVjdGZpZWxkPnhzX29yZGVy Ynl2YWxzPC9zdHJ1Y3RmaWVsZD4gZm9yIGVhY2ggcmV0dXJuZWQgdHVwbGUsCisgICBidXQgdGhl cmUgaXMgY3VycmVudGx5IG5vIG1lY2hhbmlzbSB0byBhc3NvY2lhdGUgcGVyLWl0ZW0gb3JkZXJp bmcgdmFsdWVzCisgICB3aXRoIGluZGl2aWR1YWwgaXRlbXMgd2l0aGluIGEgYmF0Y2guICBUaGlz IHdvdWxkIHJlcXVpcmUgYW4gYWRkaXRpb25hbAorICAgbGF5ZXIgb2YgaW5kaXJlY3Rpb24gdGhh dCBkb2VzIG5vdCB5ZXQgZXhpc3QsIGJ1dCBjb3VsZCBiZSBhZGRlZCBpbiBhCisgICBmdXR1cmUg dmVyc2lvbiBvZiA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+LgorICA8L3Bh cmE+CisKKyAgPHBhcmE+CisgICBUaGUgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBm dW5jdGlvbiBoYXMgYSA8bGl0ZXJhbD5kaXJlY3Rpb248L2xpdGVyYWw+IGFyZ3VtZW50LAogICAg d2hpY2ggY2FuIGJlIGVpdGhlciA8bGl0ZXJhbD5Gb3J3YXJkU2NhbkRpcmVjdGlvbjwvbGl0ZXJh bD4gKHRoZSBub3JtYWwgY2FzZSkKICAgIG9yICA8bGl0ZXJhbD5CYWNrd2FyZFNjYW5EaXJlY3Rp b248L2xpdGVyYWw+LiAgSWYgdGhlIGZpcnN0IGNhbGwgYWZ0ZXIKICAgIDxmdW5jdGlvbj5hbXJl c2NhbjwvZnVuY3Rpb24+IHNwZWNpZmllcyA8bGl0ZXJhbD5CYWNrd2FyZFNjYW5EaXJlY3Rpb248 L2xpdGVyYWw+LCB0aGVuIHRoZQotICAgc2V0IG9mIG1hdGNoaW5nIGluZGV4IGVudHJpZXMgaXMg dG8gYmUgc2Nhbm5lZCBiYWNrLXRvLWZyb250IHJhdGhlciB0aGFuIGluCi0gICB0aGUgbm9ybWFs IGZyb250LXRvLWJhY2sgZGlyZWN0aW9uLCBzbyA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rp b24+IG11c3QgcmV0dXJuCi0gICB0aGUgbGFzdCBtYXRjaGluZyB0dXBsZSBpbiB0aGUgaW5kZXgs IHJhdGhlciB0aGFuIHRoZSBmaXJzdCBvbmUgYXMgaXQKLSAgIG5vcm1hbGx5IHdvdWxkLiAgKFRo aXMgd2lsbCBvbmx5IG9jY3VyIGZvciBhY2Nlc3MKLSAgIG1ldGhvZHMgdGhhdCBzZXQgPHN0cnVj dGZpZWxkPmFtY2Fub3JkZXI8L3N0cnVjdGZpZWxkPiB0byB0cnVlLikgIEFmdGVyIHRoZQotICAg Zmlyc3QgY2FsbCwgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBtdXN0IGJlIHByZXBh cmVkIHRvIGFkdmFuY2UgdGhlIHNjYW4gaW4KKyAgIHJldHVybmVkIGJhdGNoIG11c3QgYmUgdGhl IGJhdGNoIGNvbnRhaW5pbmcgdGhlIGxhc3QgbWF0Y2hpbmcgaXRlbShzKSwKKyAgIHJhdGhlciB0 aGFuIHRoZSBiYXRjaCBjb250YWluaW5nIHRoZSBmaXJzdCBtYXRjaGluZyBpdGVtKHMpLgorICAg PGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBtdXN0IGJlIHByZXBhcmVkIHRvIGFkdmFu Y2UgdGhlIHNjYW4gaW4KICAgIGVpdGhlciBkaXJlY3Rpb24gZnJvbSB0aGUgbW9zdCByZWNlbnRs eSByZXR1cm5lZCBlbnRyeS4gIChCdXQgaWYKICAgIDxzdHJ1Y3RmaWVsZD5hbWNhbmJhY2t3YXJk PC9zdHJ1Y3RmaWVsZD4gaXMgZmFsc2UsIGFsbCBzdWJzZXF1ZW50CiAgICBjYWxscyB3aWxsIGhh dmUgdGhlIHNhbWUgZGlyZWN0aW9uIGFzIHRoZSBmaXJzdCBvbmUuKQogICA8L3BhcmE+CiAKICAg PHBhcmE+Ci0gICBBY2Nlc3MgbWV0aG9kcyB0aGF0IHN1cHBvcnQgb3JkZXJlZCBzY2FucyBtdXN0 IHN1cHBvcnQgPHF1b3RlPm1hcmtpbmc8L3F1b3RlPiBhCi0gICBwb3NpdGlvbiBpbiBhIHNjYW4g YW5kIGxhdGVyIHJldHVybmluZyB0byB0aGUgbWFya2VkIHBvc2l0aW9uLiAgVGhlIHNhbWUKLSAg IHBvc2l0aW9uIG1pZ2h0IGJlIHJlc3RvcmVkIG11bHRpcGxlIHRpbWVzLiAgSG93ZXZlciwgb25s eSBvbmUgcG9zaXRpb24gbmVlZAotICAgYmUgcmVtZW1iZXJlZCBwZXIgc2NhbjsgYSBuZXcgPGZ1 bmN0aW9uPmFtbWFya3BvczwvZnVuY3Rpb24+IGNhbGwgb3ZlcnJpZGVzIHRoZQotICAgcHJldmlv dXNseSBtYXJrZWQgcG9zaXRpb24uICBBbiBhY2Nlc3MgbWV0aG9kIHRoYXQgZG9lcyBub3Qgc3Vw cG9ydCBvcmRlcmVkCi0gICBzY2FucyBuZWVkIG5vdCBwcm92aWRlIDxmdW5jdGlvbj5hbW1hcmtw b3M8L2Z1bmN0aW9uPiBhbmQgPGZ1bmN0aW9uPmFtcmVzdHJwb3M8L2Z1bmN0aW9uPgotICAgZnVu Y3Rpb25zIGluIDxzdHJ1Y3RuYW1lPkluZGV4QW1Sb3V0aW5lPC9zdHJ1Y3RuYW1lPjsgc2V0IHRo b3NlIHBvaW50ZXJzIHRvIE5VTEwKLSAgIGluc3RlYWQuCisgICBTY2FucyB1c2luZyB0aGUgPGZ1 bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBpbnRlcmZhY2Ugc3VwcG9ydAorICAgPHF1b3Rl Pm1hcmtpbmc8L3F1b3RlPiBhIHBvc2l0aW9uIGluIGEgc2NhbiBhbmQgbGF0ZXIgcmV0dXJuaW5n IHRvIHRoZQorICAgbWFya2VkIHBvc2l0aW9uLiAgVGhlIGNvcmUgZXhlY3V0b3IgbWFuYWdlcyB0 aGUgcHJvY2VzcyBvZiBzYXZpbmcgYW5kCisgICByZXN0b3JpbmcgYmF0Y2ggcG9zaXRpb25hbCBz dGF0ZSB3aXRob3V0IGV4cGxpY2l0IGNvb3JkaW5hdGluZyB3aXRoIHRoZQorICAgdGFibGUgQU0u ICBIb3dldmVyLCBpdCB3aWxsIGNhbGwgdGhlIGluZGV4IEFNJ3MgPGZ1bmN0aW9uPmFtcG9zcmVz ZXQ8L2Z1bmN0aW9uPgorICAgY2FsbGJhY2sgYXMgbmVlZGVkIHdoZW4gcmVzdG9yaW5nIGEgbWFy aywgdG8gaW52YWxpZGF0ZSBhbnkgaW5kZXggQU0gc3RhdGUKKyAgIHRoYXQgaW5kZXBlbmRlbnRs eSB0cmFja3MgdGhlIHByb2dyZXNzIG9mIHRoZSBzY2FuIChzdWNoIGFzIGFycmF5IGtleQorICAg c3RhdGUpLiAgU2VlIHRoZSBkZXNjcmlwdGlvbiBvZiA8ZnVuY3Rpb24+YW1wb3NyZXNldDwvZnVu Y3Rpb24+IGluCisgICA8eHJlZiBsaW5rZW5kPSJpbmRleC1mdW5jdGlvbnMiLz4gZm9yIGRldGFp bHMuCiAgIDwvcGFyYT4KIAogICA8cGFyYT4KLSAgIEJvdGggdGhlIHNjYW4gcG9zaXRpb24gYW5k IHRoZSBtYXJrIHBvc2l0aW9uIChpZiBhbnkpIG11c3QgYmUgbWFpbnRhaW5lZAorICAgVGhlIHNj YW4gcG9zaXRpb24gKGlmIGFueSkgbXVzdCBiZSBtYWludGFpbmVkIGJ5IHRoZSB0YWJsZSBBTSBh bmQgaW5kZXggQU0KICAgIGNvbnNpc3RlbnRseSBpbiB0aGUgZmFjZSBvZiBjb25jdXJyZW50IGlu c2VydGlvbnMgb3IgZGVsZXRpb25zIGluIHRoZQogICAgaW5kZXguICBJdCBpcyBPSyBpZiBhIGZy ZXNobHktaW5zZXJ0ZWQgZW50cnkgaXMgbm90IHJldHVybmVkIGJ5IGEgc2NhbiB0aGF0CiAgICB3 b3VsZCBoYXZlIGZvdW5kIHRoZSBlbnRyeSBpZiBpdCBoYWQgZXhpc3RlZCB3aGVuIHRoZSBzY2Fu IHN0YXJ0ZWQsIG9yIGZvcgpAQCAtMTA0NCwxMiArMTM1MiwxNCBAQCBhbXRyYW5zbGF0ZWNtcHR5 cGUgKENvbXBhcmVUeXBlIGNtcHR5cGUsIE9pZCBvcGZhbWlseSwgT2lkIG9wY2ludHlwZSk7CiAg IDwvcGFyYT4KIAogICA8cGFyYT4KLSAgIEluc3RlYWQgb2YgdXNpbmcgPGZ1bmN0aW9uPmFtZ2V0 dHVwbGU8L2Z1bmN0aW9uPiwgYW4gaW5kZXggc2NhbiBjYW4gYmUgZG9uZSB3aXRoCi0gICA8ZnVu Y3Rpb24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiB0byBmZXRjaCBhbGwgdHVwbGVzIGluIG9uZSBj YWxsLiAgVGhpcyBjYW4gYmUKLSAgIG5vdGljZWFibHkgbW9yZSBlZmZpY2llbnQgdGhhbiA8ZnVu Y3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IGJlY2F1c2UgaXQgYWxsb3dzCi0gICBhdm9pZGlu ZyBsb2NrL3VubG9jayBjeWNsZXMgd2l0aGluIHRoZSBhY2Nlc3MgbWV0aG9kLiAgSW4gcHJpbmNp cGxlCi0gICA8ZnVuY3Rpb24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiBzaG91bGQgaGF2ZSB0aGUg c2FtZSBlZmZlY3RzIGFzIHJlcGVhdGVkCi0gICA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rp b24+IGNhbGxzLCBidXQgd2UgaW1wb3NlIHNldmVyYWwgcmVzdHJpY3Rpb25zIHRvCisgICBJbnN0 ZWFkIG9mIHVzaW5nIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gb3IKKyAgIDxmdW5j dGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4sIGFuIGluZGV4IHNjYW4gY2FuIGJlIGRvbmUgd2l0 aAorICAgPGZ1bmN0aW9uPmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4gdG8gZmV0Y2ggYWxsIHR1cGxl cyBpbiBvbmUgY2FsbC4gIFRoaXMgY2FuCisgICBiZSBub3RpY2VhYmx5IG1vcmUgZWZmaWNpZW50 IHRoYW4gd2l0aCBhbiA8cXVvdGU+b3JkZXJlZDwvcXVvdGU+IHNjYW4KKyAgIGJlY2F1c2UgaXQg YWxsb3dzIGVmZmljaWVudCBzZXF1ZW50aWFsIGFjY2VzcyB0byB0YWJsZSBBTSBwYWdlcyBjb250 YWluaW5nCisgICBtYXRjaGVzLiAgSW4gcHJpbmNpcGxlIDxmdW5jdGlvbj5hbWdldGJpdG1hcDwv ZnVuY3Rpb24+IHNob3VsZCBoYXZlIHRoZQorICAgc2FtZSBlZmZlY3RzIGFzIHJlcGVhdGVkIDxm dW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gb3IKKyAgIDxmdW5jdGlvbj5hbWdldGJhdGNo PC9mdW5jdGlvbj4gY2FsbHMsIGJ1dCB3ZSBpbXBvc2Ugc2V2ZXJhbCByZXN0cmljdGlvbnMgdG8K ICAgIHNpbXBsaWZ5IG1hdHRlcnMuICBGaXJzdCBvZiBhbGwsIDxmdW5jdGlvbj5hbWdldGJpdG1h cDwvZnVuY3Rpb24+IHJldHVybnMgYWxsCiAgICB0dXBsZXMgYXQgb25jZSBhbmQgbWFya2luZyBv ciByZXN0b3Jpbmcgc2NhbiBwb3NpdGlvbnMgaXNuJ3QKICAgIHN1cHBvcnRlZC4gU2Vjb25kbHks IHRoZSB0dXBsZXMgYXJlIHJldHVybmVkIGluIGEgYml0bWFwIHdoaWNoIGRvZXNuJ3QKQEAgLTEw NTksMTUgKzEzNjksMTUgQEAgYW10cmFuc2xhdGVjbXB0eXBlIChDb21wYXJlVHlwZSBjbXB0eXBl LCBPaWQgb3BmYW1pbHksIE9pZCBvcGNpbnR5cGUpOwogICAgQWxzbywgdGhlcmUgaXMgbm8gcHJv dmlzaW9uIGZvciBpbmRleC1vbmx5IHNjYW5zIHdpdGgKICAgIDxmdW5jdGlvbj5hbWdldGJpdG1h cDwvZnVuY3Rpb24+LCBzaW5jZSB0aGVyZSBpcyBubyB3YXkgdG8gcmV0dXJuIHRoZSBjb250ZW50 cyBvZgogICAgaW5kZXggdHVwbGVzLgotICAgRmluYWxseSwgPGZ1bmN0aW9uPmFtZ2V0Yml0bWFw PC9mdW5jdGlvbj4KLSAgIGRvZXMgbm90IGd1YXJhbnRlZSBhbnkgbG9ja2luZyBvZiB0aGUgcmV0 dXJuZWQgdHVwbGVzLCB3aXRoIGltcGxpY2F0aW9ucwotICAgc3BlbGxlZCBvdXQgaW4gPHhyZWYg bGlua2VuZD0iaW5kZXgtbG9ja2luZyIvPi4KKyAgIEZpbmFsbHksIDxmdW5jdGlvbj5hbWdldGJp dG1hcDwvZnVuY3Rpb24+IGRvZXMgbm90IGhvbGQgYW55IGluZGV4IHBhZ2UgcGlucworICAgYWZ0 ZXIgaXQgcmV0dXJucyAoc2ltaWxhcmx5IHRvIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlv bj4gc2NhbnMgd2l0aAorICAgYW4gTVZDQyBzbmFwc2hvdCksIGFzIGRlc2NyaWJlZCBpbiA8eHJl ZiBsaW5rZW5kPSJpbmRleC1sb2NraW5nIi8+LgogICA8L3BhcmE+CiAKICAgPHBhcmE+CiAgICBO b3RlIHRoYXQgaXQgaXMgcGVybWl0dGVkIGZvciBhbiBhY2Nlc3MgbWV0aG9kIHRvIGltcGxlbWVu dCBvbmx5Ci0gICA8ZnVuY3Rpb24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiBhbmQgbm90IDxmdW5j dGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4sIG9yIHZpY2UgdmVyc2EsCi0gICBpZiBpdHMgaW50 ZXJuYWwgaW1wbGVtZW50YXRpb24gaXMgdW5zdWl0ZWQgdG8gb25lIEFQSSBvciB0aGUgb3RoZXIu CisgICA8ZnVuY3Rpb24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiBhbmQgbm90IDxmdW5jdGlvbj5h bWdldHR1cGxlPC9mdW5jdGlvbj4vPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiwKKyAg IG9yIHZpY2UgdmVyc2EsIGlmIGl0cyBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBpcyB1bnN1aXRl ZCB0byBvbmUgQVBJIG9yIHRoZSBvdGhlci4KICAgPC9wYXJhPgogCiAgPC9zZWN0MT4KQEAgLTEx MjMsMTEgKzE0MzMsMTcgQEAgYW10cmFuc2xhdGVjbXB0eXBlIChDb21wYXJlVHlwZSBjbXB0eXBl LCBPaWQgb3BmYW1pbHksIE9pZCBvcGNpbnR5cGUpOwogICAgICA8L2xpc3RpdGVtPgogICAgICA8 bGlzdGl0ZW0+CiAgICAgICA8cGFyYT4KLSAgICAgICBBbiBpbmRleCBzY2FuIG11c3QgbWFpbnRh aW4gYSBwaW4KLSAgICAgICBvbiB0aGUgaW5kZXggcGFnZSBob2xkaW5nIHRoZSBpdGVtIGxhc3Qg cmV0dXJuZWQgYnkKLSAgICAgICA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+LCBhbmQg PGZ1bmN0aW9uPmFtYnVsa2RlbGV0ZTwvZnVuY3Rpb24+IGNhbm5vdCBkZWxldGUKLSAgICAgICBl bnRyaWVzIGZyb20gcGFnZXMgdGhhdCBhcmUgcGlubmVkIGJ5IG90aGVyIGJhY2tlbmRzLiAgVGhl IG5lZWQKLSAgICAgICBmb3IgdGhpcyBydWxlIGlzIGV4cGxhaW5lZCBiZWxvdy4KKyAgICAgICBB IHBpbiBtdXN0IGJlIGhlbGQgb24gYW55IGluZGV4IHBhZ2Ugd2hvc2UgaXRlbXMgbWlnaHQgc3Rp bGwgbmVlZCB0bworICAgICAgIGJlIGZvbGxvd2VkLCBhbmQgPGZ1bmN0aW9uPmFtYnVsa2RlbGV0 ZTwvZnVuY3Rpb24+IG11c3QgYWNxdWlyZSBhCisgICAgICAgY2xlYW51cCBsb2NrIG9uIGVhY2gg aW5kZXggcGFnZSwgd2hpY2ggd2lsbCBibG9jayBpZiBhbnkgb3RoZXIKKyAgICAgICBiYWNrZW5k IGhvbGRzIGEgcGluIG9uIHRoYXQgcGFnZS4KKyAgICAgICBGb3IgPGZ1bmN0aW9uPmFtZ2V0dHVw bGU8L2Z1bmN0aW9uPiBzY2FucywgdGhlIGluZGV4IGFjY2VzcyBtZXRob2QKKyAgICAgICBtYW5h Z2VzIHRoaXMgcGluIGRpcmVjdGx5LgorICAgICAgIEZvciA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwv ZnVuY3Rpb24+IHNjYW5zLCB0aGUgaW5kZXggQU0gaG9sZHMgYSBidWZmZXIKKyAgICAgICBwaW4g b24gZWFjaCBiYXRjaCdzIGluZGV4IGxlYWYgcGFnZSAoaW4gaXRzIHBlci1iYXRjaCBvcGFxdWUg YXJlYSksCisgICAgICAgd2hpbGUgdGhlIHRhYmxlIEFNIGNvbnRyb2xzIHdoZW4gdGhlIGludGVy bG9jayBpcyBkcm9wcGVkIHZpYQorICAgICAgIDxmdW5jdGlvbj5hbXVuZ3VhcmRiYXRjaDwvZnVu Y3Rpb24+LgorICAgICAgIFRoZSBuZWVkIGZvciB0aGlzIHJ1bGUgaXMgZXhwbGFpbmVkIGJlbG93 LgogICAgICAgPC9wYXJhPgogICAgICA8L2xpc3RpdGVtPgogICAgIDwvaXRlbWl6ZWRsaXN0PgpA QCAtMTEzOCwzOSArMTQ1NCw5MSBAQCBhbXRyYW5zbGF0ZWNtcHR5cGUgKENvbXBhcmVUeXBlIGNt cHR5cGUsIE9pZCBvcGZhbWlseSwgT2lkIG9wY2ludHlwZSk7CiAgICA8Y29tbWFuZD5WQUNVVU08 L2NvbW1hbmQ+LgogICAgVGhpcyBjcmVhdGVzIG5vIHNlcmlvdXMgcHJvYmxlbXMgaWYgdGhhdCBp dGVtCiAgICBudW1iZXIgaXMgc3RpbGwgdW51c2VkIHdoZW4gdGhlIHJlYWRlciByZWFjaGVzIGl0 LCBzaW5jZSBhbiBlbXB0eQotICAgaXRlbSBzbG90IHdpbGwgYmUgaWdub3JlZCBieSA8ZnVuY3Rp b24+aGVhcF9mZXRjaCgpPC9mdW5jdGlvbj4uICBCdXQgd2hhdCBpZiBhCisgICBpdGVtIHNsb3Qg d2lsbCBzaW1wbHkgYmUgdHJlYXRlZCBhcyBub3QtdmlzaWJsZS4gIEJ1dCB3aGF0IGlmIGEKICAg IHRoaXJkIGJhY2tlbmQgaGFzIGFscmVhZHkgcmUtdXNlZCB0aGUgaXRlbSBzbG90IGZvciBzb21l dGhpbmcgZWxzZT8KICAgIFdoZW4gdXNpbmcgYW4gTVZDQy1jb21wbGlhbnQgc25hcHNob3QsIHRo ZXJlIGlzIG5vIHByb2JsZW0gYmVjYXVzZQogICAgdGhlIG5ldyBvY2N1cGFudCBvZiB0aGUgc2xv dCBpcyBjZXJ0YWluIHRvIGJlIHRvbyBuZXcgdG8gcGFzcyB0aGUKICAgIHNuYXBzaG90IHRlc3Qu ICBIb3dldmVyLCB3aXRoIGEgbm9uLU1WQ0MtY29tcGxpYW50IHNuYXBzaG90IChzdWNoIGFzCiAg ICA8bGl0ZXJhbD5TbmFwc2hvdEFueTwvbGl0ZXJhbD4pLCBpdCB3b3VsZCBiZSBwb3NzaWJsZSB0 byBhY2NlcHQgYW5kIHJldHVybgotICAgYSByb3cgdGhhdCBkb2VzIG5vdCBpbiBmYWN0IG1hdGNo IHRoZSBzY2FuIGtleXMuICBXZSBjb3VsZCBkZWZlbmQKLSAgIGFnYWluc3QgdGhpcyBzY2VuYXJp byBieSByZXF1aXJpbmcgdGhlIHNjYW4ga2V5cyB0byBiZSByZWNoZWNrZWQKLSAgIGFnYWluc3Qg dGhlIGhlYXAgcm93IGluIGFsbCBjYXNlcywgYnV0IHRoYXQgaXMgdG9vIGV4cGVuc2l2ZS4gIElu c3RlYWQsCi0gICB3ZSB1c2UgYSBwaW4gb24gYW4gaW5kZXggcGFnZSBhcyBhIHByb3h5IHRvIGlu ZGljYXRlIHRoYXQgdGhlIHJlYWRlcgotICAgbWlnaHQgc3RpbGwgYmUgPHF1b3RlPmluIGZsaWdo dDwvcXVvdGU+IGZyb20gdGhlIGluZGV4IGVudHJ5IHRvIHRoZSBtYXRjaGluZwotICAgaGVhcCBl bnRyeS4gIE1ha2luZyA8ZnVuY3Rpb24+YW1idWxrZGVsZXRlPC9mdW5jdGlvbj4gYmxvY2sgb24g c3VjaCBhIHBpbiBlbnN1cmVzCi0gICB0aGF0IDxjb21tYW5kPlZBQ1VVTTwvY29tbWFuZD4gY2Fu bm90IGRlbGV0ZSB0aGUgaGVhcCBlbnRyeSBiZWZvcmUgdGhlIHJlYWRlcgotICAgaXMgZG9uZSB3 aXRoIGl0LiAgVGhpcyBzb2x1dGlvbiBjb3N0cyBsaXR0bGUgaW4gcnVuIHRpbWUsIGFuZCBhZGRz IGJsb2NraW5nCi0gICBvdmVyaGVhZCBvbmx5IGluIHRoZSByYXJlIGNhc2VzIHdoZXJlIHRoZXJl IGFjdHVhbGx5IGlzIGEgY29uZmxpY3QuCisgICBhIHdob2xseSB1bnJlbGF0ZWQgcm93IChvbmUg dGhhdCBkb2VzIG5vdCBuZWNlc3NhcmlseSBzYXRpc2Z5IHRoZSBzY2FuCisgICBrZXlzKS4gIFdl IGNhbiBvcHRpb25hbGx5IHVzZSBhIHBpbiBvbiBhbiBpbmRleCBwYWdlIGFzIGEgcHJveHkgdG8g aW5kaWNhdGUKKyAgIHRoYXQgdGhlIHJlYWRlciBtaWdodCBzdGlsbCBiZSA8cXVvdGU+aW4gZmxp Z2h0PC9xdW90ZT4gZnJvbSB0aGUgaW5kZXgKKyAgIGVudHJ5IHRvIHRoZSBtYXRjaGluZyBoZWFw IGVudHJ5LiAgTWFraW5nIDxmdW5jdGlvbj5hbWJ1bGtkZWxldGU8L2Z1bmN0aW9uPgorICAgYmxv Y2sgb24gc3VjaCBhIHBpbiBlbnN1cmVzIHRoYXQgPGNvbW1hbmQ+VkFDVVVNPC9jb21tYW5kPiBj YW5ub3QgZGVsZXRlCisgICB0aGUgaGVhcCBlbnRyeSBiZWZvcmUgdGhlIHJlYWRlciBpcyBkb25l IHdpdGggaXQuICBUaGlzIHNvbHV0aW9uIGNvc3RzCisgICBsaXR0bGUgaW4gcnVuIHRpbWUsIGFu ZCBhZGRzIGJsb2NraW5nIG92ZXJoZWFkIG9ubHkgaW4gdGhlIHJhcmUgY2FzZXMgd2hlcmUKKyAg IHRoZXJlIGFjdHVhbGx5IGlzIGEgY29uZmxpY3QuICBXaGVuIHRoZSBzY2FuIHVzZXMgYW4gTVZD Qy1jb21wbGlhbnQKKyAgIHNuYXBzaG90LCBob2xkaW5nIHRoZSBwaW4gaXMgdW5uZWNlc3Nhcnkg YmVjYXVzZSB0aGUgc25hcHNob3QgaXRzZWxmIHdpbGwKKyAgIHJlamVjdCBhbnkgcmVjeWNsZWQg VElEJ3MgbmV3IG9jY3VwYW50IChzZWUgYmVsb3cpLgogICA8L3BhcmE+CiAKICAgPHBhcmE+Ci0g ICBUaGlzIHNvbHV0aW9uIHJlcXVpcmVzIHRoYXQgaW5kZXggc2NhbnMgYmUgPHF1b3RlPnN5bmNo cm9ub3VzPC9xdW90ZT46IHdlIGhhdmUKLSAgIHRvIGZldGNoIGVhY2ggaGVhcCB0dXBsZSBpbW1l ZGlhdGVseSBhZnRlciBzY2FubmluZyB0aGUgY29ycmVzcG9uZGluZyBpbmRleAotICAgZW50cnku ICBUaGlzIGlzIGV4cGVuc2l2ZSBmb3IgYSBudW1iZXIgb2YgcmVhc29ucy4gIEFuCi0gICA8cXVv dGU+YXN5bmNocm9ub3VzPC9xdW90ZT4gc2NhbiBpbiB3aGljaCB3ZSBjb2xsZWN0IG1hbnkgVElE cyBmcm9tIHRoZSBpbmRleCwKLSAgIGFuZCBvbmx5IHZpc2l0IHRoZSBoZWFwIHR1cGxlcyBzb21l dGltZSBsYXRlciwgcmVxdWlyZXMgbXVjaCBsZXNzIGluZGV4Ci0gICBsb2NraW5nIG92ZXJoZWFk IGFuZCBjYW4gYWxsb3cgYSBtb3JlIGVmZmljaWVudCBoZWFwIGFjY2VzcyBwYXR0ZXJuLgotICAg UGVyIHRoZSBhYm92ZSBhbmFseXNpcywgd2UgbXVzdCB1c2UgdGhlIHN5bmNocm9ub3VzIGFwcHJv YWNoIGZvcgotICAgbm9uLU1WQ0MtY29tcGxpYW50IHNuYXBzaG90cywgYnV0IGFuIGFzeW5jaHJv bm91cyBzY2FuIGlzIHdvcmthYmxlCi0gICBmb3IgYSBxdWVyeSB1c2luZyBhbiBNVkNDIHNuYXBz aG90LgorICAgVGhpcyBzb2x1dGlvbiByZXF1aXJlcyB0aGF0IDxmdW5jdGlvbj5hbWdldHR1cGxl PC9mdW5jdGlvbj4gaW5kZXggc2NhbnMgYmUKKyAgIDxxdW90ZT5zeW5jaHJvbm91czwvcXVvdGU+ OiB0aGUgdGFibGUgQU0gbXVzdCBmZXRjaCBlYWNoIGhlYXAgdHVwbGUKKyAgIGltbWVkaWF0ZWx5 IGFmdGVyIHNjYW5uaW5nIHRoZSBjb3JyZXNwb25kaW5nIGluZGV4IGVudHJ5LiAgVGhpcyBpcwor ICAgZXhwZW5zaXZlIGZvciBhIG51bWJlciBvZiByZWFzb25zLiAgVGhlCisgICA8ZnVuY3Rpb24+ YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGludGVyZmFjZSwgYnkgY29udHJhc3QsIHdhcyBkZXNpZ25l ZCB0bworICAgYWxsb3cgc2NhbnMgdG8gYmUgPHF1b3RlPmFzeW5jaHJvbm91czwvcXVvdGU+OiBi eSBjb2xsZWN0aW5nIGJhdGNoZXMgb2YKKyAgIFRJRHMgZnJvbSBtdWx0aXBsZSBpbmRleCBwYWdl cywgdGhlIHRhYmxlIEFNIGNhbiBwcmVmZXRjaCB0aGUgY29ycmVzcG9uZGluZworICAgdGFibGUg YmxvY2tzIHdlbGwgYWhlYWQgb2YgdGhlIGN1cnJlbnQgc2NhbiBwb3NpdGlvbiAodXNpbmcgYXN5 bmNocm9ub3VzCisgICBJL08gd2hlbiBhdmFpbGFibGUpLCBhbGxvd2luZyBhIG1vcmUgZWZmaWNp ZW50IGhlYXAgYWNjZXNzIHBhdHRlcm4uICBOb3QKKyAgIGFsbCBzY2FucyBlbmQgdXAgYmVpbmcg YXN5bmNocm9ub3VzIGluIHByYWN0aWNlLCBidXQgdGhlIGludGVyZmFjZSBpcworICAgZGVzaWdu ZWQgdG8gYWxsb3cgaXQuICBQZXIgdGhlIGFib3ZlIGFuYWx5c2lzLCB3ZSBtdXN0IHVzZSB0aGUg c3luY2hyb25vdXMKKyAgIGFwcHJvYWNoIGZvciBub24tTVZDQy1jb21wbGlhbnQgc25hcHNob3Rz LCBidXQgYW4gYXN5bmNocm9ub3VzIHNjYW4gaXMKKyAgIHdvcmthYmxlIGZvciBhIHF1ZXJ5IHVz aW5nIGFuIE1WQ0Mgc25hcHNob3QuCiAgIDwvcGFyYT4KIAogICA8cGFyYT4KLSAgIEluIGFuIDxm dW5jdGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+IGluZGV4IHNjYW4sIHRoZSBhY2Nlc3MgbWV0 aG9kIGRvZXMgbm90Ci0gICBrZWVwIGFuIGluZGV4IHBpbiBvbiBhbnkgb2YgdGhlIHJldHVybmVk IHR1cGxlcy4gIFRoZXJlZm9yZQotICAgaXQgaXMgb25seSBzYWZlIHRvIHVzZSBzdWNoIHNjYW5z IHdpdGggTVZDQy1jb21wbGlhbnQgc25hcHNob3RzLgorICAgQmVjYXVzZSB0aGUgdGFibGUgQU0g cmVhZHMgbXVsdGlwbGUgaW5kZXggbGVhZiBwYWdlcyBhaGVhZCB2aWEKKyAgIDxmdW5jdGlvbj5h bWdldGJhdGNoPC9mdW5jdGlvbj4gdG8gZmFjaWxpdGF0ZSB0aGlzIHByZWZldGNoaW5nLCBpdCBj YW5ub3QKKyAgIHByYWN0aWNhbGx5IGhvbGQgcGlucyBvbiBhbGwgdGhvc2UgcGFnZXMgc2ltdWx0 YW5lb3VzbHkuICBUaGVyZWZvcmUsCisgICBJL08gcHJlZmV0Y2hpbmcgd2l0aAorICAgPGZ1bmN0 aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBpcyBvbmx5IHBvc3NpYmxlIHdoZW4gYW4gTVZDQy1j b21wbGlhbnQKKyAgIHNuYXBzaG90IGlzIGluIHVzZS4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgor ICAgV2hldGhlciBhIGJhdGNoJ3MgVElEIHJlY3ljbGluZyBpbnRlcmxvY2sgKHR5cGljYWxseSBh biBpbmRleCBwYWdlIGJ1ZmZlcgorICAgcGluKSBpcyBkcm9wcGVkIGltbWVkaWF0ZWx5IG9yIGRl ZmVycmVkIGlzIGNvbnRyb2xsZWQgYnkgYSBnZW5lcmljLAorICAgc2Nhbi1sZXZlbCBwb2xpY3kg dGhhdCBpcyBkZXRlcm1pbmVkIHdoZW4gdGhlIHNjYW4gaXMgb3BlbmVkICZtZGFzaDsgaXQgaXMK KyAgIG5vdCB1bmRlciB0aGUgY29udHJvbCBvZiBlaXRoZXIgdGhlIGluZGV4IEFNIG9yIHRoZSB0 YWJsZSBBTS4gIFRoZSBzY2FuJ3MKKyAgIDxzdHJ1Y3RmaWVsZD5iYXRjaEltbWVkaWF0ZVVuZ3Vh cmQ8L3N0cnVjdGZpZWxkPiBmbGFnIGVuY29kZXMgdGhpcyBwb2xpY3kuCisgICBJdCBpcyBzZXQg YmFzZWQgb24gdHdvIGNyaXRlcmlhIHRoYXQgYXJlIGtub3duIHRvIHRoZSBjb3JlIHNjYW4gbWFj aGluZXJ5OgorICAgd2hldGhlciB0aGUgc2NhbiB1c2VzIGFuIE1WQ0MtY29tcGxpYW50IHNuYXBz aG90LCBhbmQgd2hldGhlciBpdCBpcyBhbgorICAgaW5kZXgtb25seSBzY2FuLiAgU3BlY2lmaWNh bGx5LAorICAgPHN0cnVjdGZpZWxkPmJhdGNoSW1tZWRpYXRlVW5ndWFyZDwvc3RydWN0ZmllbGQ+ IGlzIHRydWUgd2hlbiB0aGUgc2NhbiB1c2VzCisgICBhbiBNVkNDIHNuYXBzaG90IGFuZCBpcyA8 ZW1waGFzaXM+bm90PC9lbXBoYXNpcz4gYW4gaW5kZXgtb25seSBzY2FuLiAgV2hlbgorICAgPHN0 cnVjdGZpZWxkPmJhdGNoSW1tZWRpYXRlVW5ndWFyZDwvc3RydWN0ZmllbGQ+IGlzIHRydWUsIHRo ZSBpbnRlcmxvY2sgaXMKKyAgIGRyb3BwZWQgaW5zaWRlIDxmdW5jdGlvbj5pbmRleGFtX3V0aWxf YmF0Y2hfdW5sb2NrPC9mdW5jdGlvbj4gKGJlZm9yZSB0aGUKKyAgIGJhdGNoIGlzIGV2ZW4gcmV0 dXJuZWQgdG8gdGhlIHRhYmxlIEFNKSwgYmVjYXVzZSBhIHBsYWluIGluZGV4IHNjYW4gd2l0aCBh bgorICAgTVZDQyBzbmFwc2hvdCB3aWxsIGFsd2F5cyB2aXNpdCB0aGUgaGVhcCBwYWdlLCB3aGVy ZSB0aGUgTVZDQyB2aXNpYmlsaXR5CisgICBjaGVjayBpcyBhdXRob3JpdGF0aXZlICZtZGFzaDsg ZXZlbiBpZiA8Y29tbWFuZD5WQUNVVU08L2NvbW1hbmQ+IHJlY3ljbGVzIGEKKyAgIFRJRCwgdGhl IG5ldyBvY2N1cGFudCBjYW5ub3QgcGFzcyB0aGUgc25hcHNob3QgdGVzdC4gIFdoZW4gaXQgaXMg ZmFsc2UsIHRoZQorICAgaW50ZXJsb2NrIGlzIHJldGFpbmVkIHVudGlsIHRoZSB0YWJsZSBBTSBl eHBsaWNpdGx5IGNhbGxzCisgICA8ZnVuY3Rpb24+YW11bmd1YXJkYmF0Y2g8L2Z1bmN0aW9uPiwg YmVjYXVzZSB0aGUgc2NhbiBjYW5ub3QgcmVseSBvbiB0aGF0CisgICBoZWFwIHBhZ2UgTVZDQyBi YWNrc3RvcC4gIEZvciBub24tTVZDQyBzY2FucywgdGhlcmUgaXMgbm8gTVZDQyBzbmFwc2hvdCB0 bworICAgcmVqZWN0IGEgcmVjeWNsZWQgVElEJ3MgbmV3IG9jY3VwYW50IGF0IGFsbC4gIEZvciBp bmRleC1vbmx5IHNjYW5zLCBldmVuCisgICB3aXRoIGFuIE1WQ0Mgc25hcHNob3QsIHRoZSBzY2Fu IHR5cGljYWxseSBhdm9pZHMgdmlzaXRpbmcgdGhlIGhlYXAgcGFnZQorICAgYWx0b2dldGhlciAo dXNpbmcgdGhlIHZpc2liaWxpdHkgbWFwIGluc3RlYWQpLCBzbyB0aGUgTVZDQyBjaGVjayB0aGF0 IHdvdWxkCisgICBjYXRjaCBhIHJlY3ljbGVkIFRJRCB1c3VhbGx5IG5ldmVyIHJ1bnMuICBJbiBi b3RoIGNhc2VzIHRoZSBpbnRlcmxvY2sgb24KKyAgIHRoZSBpbmRleCBwYWdlIGlzIHdoYXQgcHJl dmVudHMgPGNvbW1hbmQ+VkFDVVVNPC9jb21tYW5kPiBmcm9tIHJlY3ljbGluZworICAgVElEcyB3 aGlsZSB0aGUgc2NhbiBpcyBzdGlsbCBpbiBmbGlnaHQuICBJbiBhbGwgY2FzZXMsIHRoZSB0YWJs ZSBBTSBkZWNpZGVzCisgICA8ZW1waGFzaXM+d2hlbjwvZW1waGFzaXM+IHRvIGNhbGwgPGZ1bmN0 aW9uPmFtdW5ndWFyZGJhdGNoPC9mdW5jdGlvbj47IHRoZQorICAgaW5kZXggQU0gZGVjaWRlcyA8 ZW1waGFzaXM+d2hhdDwvZW1waGFzaXM+IHRvIHJlbGVhc2UuCisgIDwvcGFyYT4KKworICA8cGFy YT4KKyAgIFNpbWlsYXJseSwgYW4gPGZ1bmN0aW9uPmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4gaW5k ZXggc2NhbiBpcyBpbmhlcmVudGx5CisgICBhc3luY2hyb25vdXM6IGFsbCBtYXRjaGluZyBUSURz IGFyZSBjb2xsZWN0ZWQgaW50byBhIGJpdG1hcCBiZWZvcmUgYW55IGhlYXAKKyAgIGFjY2VzcyBi ZWdpbnMuICBTdWNoIHNjYW5zIHRoZXJlZm9yZSByZXF1aXJlIGFuIE1WQ0MtY29tcGxpYW50IHNu YXBzaG90LAorICAgYW5kIHRoZXJlIGlzIG5vIG5lZWQgZm9yIHRoZSBhY2Nlc3MgbWV0aG9kIHRv IGhvbGQgaW5kZXggcGFnZSBwaW5zLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBJbmRleCBh Y2Nlc3MgbWV0aG9kcyB0aGF0IHVzZSA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IG11 c3QgbWFuYWdlCisgICBwaW4gbGlmZXRpbWUgdGhlbXNlbHZlcywgc2luY2UgdGhlcmUgaXMgbm8g dGFibGUgQU0gaW50ZXJtZWRpYXJ5ICh1bmxpa2UKKyAgIHdpdGggPGZ1bmN0aW9uPmFtZ2V0YmF0 Y2g8L2Z1bmN0aW9uPikuICBUaGUgaW5kZXggQU0gbXVzdCBob2xkIGEgcGluIG9uIHRoZQorICAg Y3VycmVudCBpbmRleCBwYWdlIHVudGlsIHRoZSBzY2FuIG1vdmVzIHRvIGEgZGlmZmVyZW50IHBh Z2Ugb3IgZW5kcy4KICAgPC9wYXJhPgogCiAgIDxwYXJhPgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9z Z21sL3JlZi9jcmVhdGVfdGFibGUuc2dtbCBiL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3RhYmxl LnNnbWwKaW5kZXggODA4MjliMjM5Li5jZjBiYTViMGMgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dt bC9yZWYvY3JlYXRlX3RhYmxlLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfdGFi bGUuc2dtbApAQCAtMTE3MywxMiArMTE3MywxMyBAQCBXSVRIICggTU9EVUxVUyA8cmVwbGFjZWFi bGUgY2xhc3M9InBhcmFtZXRlciI+bnVtZXJpY19saXRlcmFsPC9yZXBsYWNlYWJsZT4sIFJFTQog ICAgICA8L3BhcmE+CiAKICAgICAgPHBhcmE+Ci0gICAgICBUaGUgYWNjZXNzIG1ldGhvZCBtdXN0 IHN1cHBvcnQgPGxpdGVyYWw+YW1nZXR0dXBsZTwvbGl0ZXJhbD4gKHNlZSA8eHJlZgotICAgICAg bGlua2VuZD0iaW5kZXhhbSIvPik7IGF0IHByZXNlbnQgdGhpcyBtZWFucyA8YWNyb255bT5HSU48 L2Fjcm9ueW0+Ci0gICAgICBjYW5ub3QgYmUgdXNlZC4gIEFsdGhvdWdoIGl0J3MgYWxsb3dlZCwg dGhlcmUgaXMgbGl0dGxlIHBvaW50IGluIHVzaW5nCi0gICAgICBCLXRyZWUgb3IgaGFzaCBpbmRl eGVzIHdpdGggYW4gZXhjbHVzaW9uIGNvbnN0cmFpbnQsIGJlY2F1c2UgdGhpcwotICAgICAgZG9l cyBub3RoaW5nIHRoYXQgYW4gb3JkaW5hcnkgdW5pcXVlIGNvbnN0cmFpbnQgZG9lc24ndCBkbyBi ZXR0ZXIuCi0gICAgICBTbyBpbiBwcmFjdGljZSB0aGUgYWNjZXNzIG1ldGhvZCB3aWxsIGFsd2F5 cyBiZSA8YWNyb255bT5HaVNUPC9hY3JvbnltPiBvcgorICAgICAgVGhlIGFjY2VzcyBtZXRob2Qg bXVzdCBzdXBwb3J0IGVpdGhlciA8bGl0ZXJhbD5hbWdldHR1cGxlPC9saXRlcmFsPgorICAgICAg b3IgPGxpdGVyYWw+YW1nZXRiYXRjaDwvbGl0ZXJhbD4gKHNlZSA8eHJlZiBsaW5rZW5kPSJpbmRl eGFtIi8+KTsgYXQKKyAgICAgIHByZXNlbnQgdGhpcyBtZWFucyA8YWNyb255bT5HSU48L2Fjcm9u eW0+IGNhbm5vdCBiZSB1c2VkLiAgQWx0aG91Z2gKKyAgICAgIGl0J3MgYWxsb3dlZCwgdGhlcmUg aXMgbGl0dGxlIHBvaW50IGluIHVzaW5nIEItdHJlZSBvciBoYXNoIGluZGV4ZXMKKyAgICAgIHdp dGggYW4gZXhjbHVzaW9uIGNvbnN0cmFpbnQsIGJlY2F1c2UgdGhpcyBkb2VzIG5vdGhpbmcgdGhh dCBhbgorICAgICAgb3JkaW5hcnkgdW5pcXVlIGNvbnN0cmFpbnQgZG9lc24ndCBkbyBiZXR0ZXIu ICBTbyBpbiBwcmFjdGljZSB0aGUKKyAgICAgIGFjY2VzcyBtZXRob2Qgd2lsbCBhbHdheXMgYmUg PGFjcm9ueW0+R2lTVDwvYWNyb255bT4gb3IKICAgICAgIDxhY3JvbnltPlNQLUdpU1Q8L2Fjcm9u eW0+LgogICAgICA8L3BhcmE+CiAKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvZHVtbXlf aW5kZXhfYW0vZHVtbXlfaW5kZXhfYW0uYyBiL3NyYy90ZXN0L21vZHVsZXMvZHVtbXlfaW5kZXhf YW0vZHVtbXlfaW5kZXhfYW0uYwppbmRleCAzMWY4ZDJiODEuLmUyYjg2NWZiNCAxMDA2NDQKLS0t IGEvc3JjL3Rlc3QvbW9kdWxlcy9kdW1teV9pbmRleF9hbS9kdW1teV9pbmRleF9hbS5jCisrKyBi L3NyYy90ZXN0L21vZHVsZXMvZHVtbXlfaW5kZXhfYW0vZHVtbXlfaW5kZXhfYW0uYwpAQCAtMzM0 LDEwICszMzQsMTIgQEAgZGloYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCS5hbWJlZ2luc2Nh biA9IGRpYmVnaW5zY2FuLAogCQkuYW1yZXNjYW4gPSBkaXJlc2NhbiwKIAkJLmFtZ2V0dHVwbGUg PSBOVUxMLAorCQkuYW1nZXRiYXRjaCA9IE5VTEwsCisJCS5hbWtpbGxpdGVtc2JhdGNoID0gTlVM TCwKKwkJLmFtdW5ndWFyZGJhdGNoID0gTlVMTCwKIAkJLmFtZ2V0Yml0bWFwID0gTlVMTCwKIAkJ LmFtZW5kc2NhbiA9IGRpZW5kc2NhbiwKLQkJLmFtbWFya3BvcyA9IE5VTEwsCi0JCS5hbXJlc3Ry cG9zID0gTlVMTCwKKwkJLmFtcG9zcmVzZXQgPSBOVUxMLAogCQkuYW1lc3RpbWF0ZXBhcmFsbGVs c2NhbiA9IE5VTEwsCiAJCS5hbWluaXRwYXJhbGxlbHNjYW4gPSBOVUxMLAogCQkuYW1wYXJhbGxl bHJlc2NhbiA9IE5VTEwsCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMu bGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDViYzUxNzYwMi4u MjNlMDQzY2MwIDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAor KysgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtMjA2LDYgKzIwNiw3IEBA IEJPT0wKIEJPT0xFQU4KIEJPWAogQlRBcnJheUtleUluZm8KK0JUQmF0Y2hEYXRhCiBCVEJ1aWxk U3RhdGUKIEJUQ2FsbGJhY2tTdGF0ZQogQlRDeWNsZUlkCkBAIC0yMzMsOCArMjM0LDYgQEAgQlRT Y2FuSW5zZXJ0RGF0YQogQlRTY2FuS2V5UHJlcHJvYwogQlRTY2FuT3BhcXVlCiBCVFNjYW5PcGFx dWVEYXRhCi1CVFNjYW5Qb3NEYXRhCi1CVFNjYW5Qb3NJdGVtCiBCVFNoYXJlZAogQlRTb3J0QXJy YXlDb250ZXh0CiBCVFNwb29sCkBAIC0yNjMsNiArMjYyLDkgQEAgQmFzZUJhY2t1cENtZAogQmFz ZUJhY2t1cFRhcmdldEhhbmRsZQogQmFzZUJhY2t1cFRhcmdldFR5cGUKIEJhdGNoTVZDQ1N0YXRl CitCYXRjaE1hdGNoaW5nSXRlbQorQmF0Y2hSaW5nQnVmZmVyCitCYXRjaFJpbmdJdGVtUG9zCiBC ZWdpbkRpcmVjdE1vZGlmeV9mdW5jdGlvbgogQmVnaW5Gb3JlaWduSW5zZXJ0X2Z1bmN0aW9uCiBC ZWdpbkZvcmVpZ25Nb2RpZnlfZnVuY3Rpb24KQEAgLTEyMzgsNiArMTI0MCw3IEBAIEhiYUxpbmUK IEhlYWRsaW5lSnNvblN0YXRlCiBIZWFkbGluZVBhcnNlZFRleHQKIEhlYWRsaW5lV29yZEVudHJ5 CitIZWFwQmF0Y2hEYXRhCiBIZWFwQ2hlY2tDb250ZXh0CiBIZWFwQ2hlY2tSZWFkU3RyZWFtRGF0 YQogSGVhcFBhZ2VGcmVlemUKQEAgLTEzMTcsNiArMTMyMCw4IEBAIEluZGV4T3JkZXJCeURpc3Rh bmNlCiBJbmRleFBhdGgKIEluZGV4UnVudGltZUtleUluZm8KIEluZGV4U2NhbgorSW5kZXhTY2Fu QmF0Y2gKK0luZGV4U2NhbkJhdGNoRGF0YQogSW5kZXhTY2FuRGVzYwogSW5kZXhTY2FuRGVzY0Rh dGEKIEluZGV4U2Nhbkluc3RydW1lbnRhdGlvbgpAQCAtMzUzMSwxOCArMzUzNiwxNyBAQCBhbWNh bnJldHVybl9mdW5jdGlvbgogYW1jb3N0ZXN0aW1hdGVfZnVuY3Rpb24KIGFtZW5kc2Nhbl9mdW5j dGlvbgogYW1lc3RpbWF0ZXBhcmFsbGVsc2Nhbl9mdW5jdGlvbgorYW1nZXRiYXRjaF9mdW5jdGlv bgogYW1nZXRiaXRtYXBfZnVuY3Rpb24KIGFtZ2V0dHJlZWhlaWdodF9mdW5jdGlvbgogYW1nZXR0 dXBsZV9mdW5jdGlvbgogYW1pbml0cGFyYWxsZWxzY2FuX2Z1bmN0aW9uCiBhbWluc2VydF9mdW5j dGlvbgogYW1pbnNlcnRjbGVhbnVwX2Z1bmN0aW9uCi1hbW1hcmtwb3NfZnVuY3Rpb24KIGFtb3B0 aW9uc19mdW5jdGlvbgogYW1wYXJhbGxlbHJlc2Nhbl9mdW5jdGlvbgogYW1wcm9wZXJ0eV9mdW5j dGlvbgogYW1yZXNjYW5fZnVuY3Rpb24KLWFtcmVzdHJwb3NfZnVuY3Rpb24KIGFtdHJhbnNsYXRl X2NtcHR5cGVfZnVuY3Rpb24KIGFtdHJhbnNsYXRlX3N0cmF0ZWd5X2Z1bmN0aW9uCiBhbXZhY3V1 bWNsZWFudXBfZnVuY3Rpb24KLS0gCjIuNTMuMAoK --000000000000f287f9064e6de93c Content-Type: application/octet-stream; name="v20-0007-heapam-Optimize-pin-transfers-during-index-scans.patch" Content-Disposition: attachment; filename="v20-0007-heapam-Optimize-pin-transfers-during-index-scans.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mngmwp6611 RnJvbSAzOWVhYjRlMjk4NDcxYmMyMjM3NjU0OWYxYjJhNjM4ZmQ3NjZkNDg4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFN1 biwgMjIgTWFyIDIwMjYgMDI6MjI6MDYgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyMCAwNy8xN10g aGVhcGFtOiBPcHRpbWl6ZSBwaW4gdHJhbnNmZXJzIGR1cmluZyBpbmRleCBzY2Fucy4KCkFkZCBh biB4c19sYXN0aW5ibG9jayBmbGFnIHRvIEluZGV4RmV0Y2hIZWFwRGF0YSB0aGF0IHRyYWNrcyB3 aGV0aGVyIHRoZQpjdXJyZW50IFRJRCBpcyB0aGUgbGFzdCBvbmUgb24gaXRzIGhlYXAgYmxvY2sg d2l0aGluIHRoZSBjdXJyZW50IGJhdGNoLgpXaGVuIGl0IGlzLCBoZWFwYW1faW5kZXhfZmV0Y2hf dHVwbGUgY2FuIHRyYW5zZmVyIGl0cyBidWZmZXIgcGluIHRvIHRoZQpzbG90ICh2aWEgRXhlY1N0 b3JlUGlubmVkQnVmZmVySGVhcFR1cGxlKSBpbnN0ZWFkIG9mIGluY3JlbWVudGluZyB0aGUKcGlu IGNvdW50LCBzYXZpbmcgYSBwYWlyIG9mIEluY3JCdWZmZXJSZWZDb3VudC9SZWxlYXNlQnVmZmVy IGNhbGxzLgpUaGlzIG9wdGltaXphdGlvbiBpcyBub3QgdXNlZCBmb3IgaW5kZXgtb25seSBzY2Fu cyBiZWNhdXNlIGFsbC12aXNpYmxlCml0ZW1zIGNhbiBiZSBza2lwcGVkLCB3aGljaCB3b3VsZCBi cmVhayBibG9jayBkZWR1cGxpY2F0aW9uIHN5bW1ldHJ5CmJldHdlZW4gdGhlIHNjYW4gYW5kIHRo ZSByZWFkIHN0cmVhbSAoYmVzaWRlcywgdGhlIHBlcmZvcm1hbmNlIG9mIHRoaXMKY29kZSBwYXRo IGNhbiBvbmx5IG1hdHRlciB3aGVuIG1hbnkgaGVhcCBmZXRjaGVzIGFyZSByZXF1aXJlZCwgd2hp Y2ggaXMKaG9wZWZ1bGx5IHJhcmUgZHVyaW5nIGluZGV4LW9ubHkgc2NhbnMpLgoKQWxzbyBhZGQg YW4gZXhwbGljaXQgRXhlY0NsZWFyVHVwbGUgdG8gdGhlIGJsb2NrLXN3aXRjaCBwYXRoIGluCmhl YXBhbV9pbmRleF9mZXRjaF90dXBsZV9pbXBsIHRvIHJlbGVhc2UgdGhlIHBpbiB0cmFuc2ZlcnJl ZCB0byB0aGUgc2xvdApvbiB0aGUgcHJldmlvdXMgY2FsbCAoanVzdCBiZWZvcmUgY2FsbGluZyBS ZWxlYXNlQnVmZmVyIGFzIHBhcnQgb2YKbW92aW5nIG9uIHRvIHRoZSBzY2FuJ3MgbmV4dCBibG9j aykuICBUaGlzIGZpeGVzIGEgcGVyZm9ybWFuY2UgcHJvYmxlbQp3aGVyZSB0aGUgY29kZSBwYXRo IGluIHF1ZXN0aW9uIHRyaWdnZXJzIEdldFByaXZhdGVSZWZDb3VudEVudHJ5U2xvdwpjYWxscyBt b3JlIG9mdGVuIHRoYW4gb25lIHdvdWxkIGhvcGUuICBUaGUgdW5kZXJseWluZyBpc3N1ZSBoYXMg YmVlbgp0aWVkIHRvIHRoZSBwaW4gaW4gdGhlIHNsb3QgYmVpbmcgaGVsZCwgZXZlbiBpZiB3ZSBk ZWNpZGUgdG8gcmVsZWFzZSB0aGUKYnVmZmVyIGFuZCBtb3ZlIG9uOiBFeGVjU3RvcmVCdWZmZXJI ZWFwVHVwbGUgd2lsbCBmaXJzdCBmYWlsIHRvIGhpdCB0aGUKYmFja2VuZC1sb2NhbCBjYWNoZSBm b3IgdGhlIHJlbGVhc2Ugb2YgdGhlIG9sZCBwaW4gKGJlY2F1c2Ugd2UganVzdApwaW5uZWQgYW5k IGxvY2tlZCB0aGUgbmV3IGJ1ZmZlciksIGNhdXNpbmcgYSBjYWNoZSBtaXNzIGluc2lkZQpJbmNy QnVmZmVyUmVmQ291bnQuCgpBdXRob3I6IFBldGVyIEdlb2doZWdhbiA8cGdAYm93dC5pZT4KU3Vn Z2VzdGVkLWJ5OiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+ClJldmlld2VkLUJ5 OiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRpc2N1c3Npb246IGh0dHBzOi8v cG9zdGdyLmVzL20vQ0FIMi1Xej1ENExydTlCa3ZxYVJuRlJQRGFaYmZUT2RXY3h3MTN6eUc2R1ZG VHR6X3Z3QG1haWwuZ21haWwuY29tCi0tLQogc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oICAg ICAgICAgICAgICAgIHwgIDMgKwogc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2luZGV4 c2Nhbi5jIHwgNzMgKysrKysrKysrKysrKysrKysrKysrLQogMiBmaWxlcyBjaGFuZ2VkLCA3NCBp bnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2Fj Y2Vzcy9oZWFwYW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaAppbmRleCAxYzU1NzBh YzAuLmMzYmI4OTUzOCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCisr KyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaApAQCAtMTMyLDYgKzEzMiw5IEBAIHR5cGVk ZWYgc3RydWN0IEluZGV4RmV0Y2hIZWFwRGF0YQogCUJ1ZmZlcgkJeHNfdm1idWZmZXI7CS8qIHZp c2liaWxpdHkgbWFwIGJ1ZmZlciAqLwogCWludAkJCXhzX3ZtX2l0ZW1zOwkvKiAjIGl0ZW1zIHRv IHJlc29sdmUgdmlzaWJpbGl0eSBpbmZvIGZvciAqLwogCisJLyogUGxhaW4gaW5kZXggc2NhbiB4 c19sYXN0aW5ibG9jayBvcHRpbWl6YXRpb24gKi8KKwlib29sCQl4c19sYXN0aW5ibG9jazsgLyog bGFzdCBUSUQgb24gdGhpcyBibG9jayBpbiBjdXJyZW50IGJhdGNoPyAqLworCiB9IEluZGV4RmV0 Y2hIZWFwRGF0YTsKIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hl YXBhbV9pbmRleHNjYW4uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9pbmRleHNj YW4uYwppbmRleCA4ODVjMjVjNjcuLjdhNmI0OWVlNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv YWNjZXNzL2hlYXAvaGVhcGFtX2luZGV4c2Nhbi5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9o ZWFwL2hlYXBhbV9pbmRleHNjYW4uYwpAQCAtNzgsNiArNzgsOSBAQCBoZWFwYW1faW5kZXhfZmV0 Y2hfYmVnaW4oUmVsYXRpb24gcmVsLCB1aW50MzIgZmxhZ3MpCiAJQXNzZXJ0KGhzY2FuLT54c192 bWJ1ZmZlciA9PSBJbnZhbGlkQnVmZmVyKTsKIAloc2Nhbi0+eHNfdm1faXRlbXMgPSAxOwogCisJ LyogeHNfbGFzdGluYmxvY2sgb3B0aW1pemF0aW9uIHN0YXRlICovCisJQXNzZXJ0KCFoc2Nhbi0+ eHNfbGFzdGluYmxvY2spOworCiAJLyoKIAkgKiBSZXR1cm4gb3BhcXVlIHN0YXRlLCB3aGljaCB3 ZSdsbCBhY2Nlc3MgdGhyb3VnaCB0aGUgc2NhbidzIHhzX2hlYXBmZXRjaAogCSAqIGZpZWxkIGxh dGVyIG9uLgpAQCAtNDQ1LDYgKzQ0OCwxNCBAQCBoZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGVfaW1w bChSZWxhdGlvbiByZWwsCiAJCS8qIFJlbWVtYmVyIHRoaXMgYnVmZmVyJ3MgYmxvY2sgbnVtYmVy IGZvciBuZXh0IHRpbWUgKi8KIAkJaHNjYW4tPnhzX2JsayA9IEl0ZW1Qb2ludGVyR2V0QmxvY2tO dW1iZXIodGlkKTsKIAorCQkvKgorCQkgKiBEcm9wIHRoZSB4c19ibGsgcGluIGluZGVwZW5kZW50 bHkgaGVsZCBvbiBieSBzbG90IChpZiBhbnkpIG5vdywKKwkJICogYmVmb3JlIGNhbGxpbmcgUmVs ZWFzZUJ1ZmZlci4gIFRoaXMgYXZvaWRzIGV4cGVuc2l2ZSBjYWxscyB0bworCQkgKiBHZXRQcml2 YXRlUmVmQ291bnRFbnRyeVNsb3cgY2F1c2VkIGJ5IEV4ZWNTdG9yZUJ1ZmZlckhlYXBUdXBsZQor CQkgKiBmYWlsaW5nIHRvIGhpdCB0aGUgYmFja2VuZCdzIGNhY2hlIGZvciB0aGUgcmVsZWFzZSBv ZiB0aGUgb2xkIHBpbi4KKwkJICovCisJCUV4ZWNDbGVhclR1cGxlKHNsb3QpOworCiAJCWlmIChC dWZmZXJJc1ZhbGlkKGhzY2FuLT54c19jYnVmKSkKIAkJCVJlbGVhc2VCdWZmZXIoaHNjYW4tPnhz X2NidWYpOwogCkBAIC00ODIsNyArNDkzLDMzIEBAIGhlYXBhbV9pbmRleF9mZXRjaF90dXBsZV9p bXBsKFJlbGF0aW9uIHJlbCwKIAkJKmhlYXBfY29udGludWUgPSAhSXNNVkNDTGlrZVNuYXBzaG90 KHNuYXBzaG90KTsKIAogCQlzbG90LT50dHNfdGFibGVPaWQgPSBSZWxhdGlvbkdldFJlbGlkKHJl bCk7Ci0JCUV4ZWNTdG9yZUJ1ZmZlckhlYXBUdXBsZSgmYnNsb3QtPmJhc2UudHVwZGF0YSwgc2xv dCwgaHNjYW4tPnhzX2NidWYpOworCisJCS8qCisJCSAqIElmIHRoaXMgaXMgdGhlIGxhc3QgVElE IG9uIHRoZSBjdXJyZW50IGhlYXAgYmxvY2sgd2l0aGluIHRoZSBiYXRjaCwKKwkJICogdHJhbnNm ZXIgb3VyIGJ1ZmZlciBwaW4gdG8gdGhlIHNsb3QgcmF0aGVyIHRoYW4gaGF2aW5nIHRoZSBzbG90 CisJCSAqIGluY3JlbWVudCB0aGUgcGluIGNvdW50LiAgVGhpcyBzYXZlcyBhIHBhaXIgb2YgSW5j ckJ1ZmZlclJlZkNvdW50CisJCSAqIGFuZCBSZWxlYXNlQnVmZmVyIGNhbGxzLCBzaW5jZSB0aGUg Y2FsbGVyIHdvdWxkIGp1c3QgcmVsZWFzZSBpdHMKKwkJICogcGluIG9uIHhzX2NidWYgd2hlbiBz d2l0Y2hpbmcgdG8gdGhlIG5leHQgYmxvY2sgYW55d2F5LgorCQkgKgorCQkgKiBXZSBjYW4gb25s eSBkbyB0aGlzIHdoZW4gaGVhcF9jb250aW51ZSBpcyBmYWxzZSwgc2luY2Ugb3RoZXJ3aXNlCisJ CSAqIHRoZSBjYWxsZXIgd2lsbCBuZWVkIHhzX2NidWYgdG8gcmVtYWluIHZhbGlkIGZvciB0aGUg bmV4dCBjYWxsLgorCQkgKi8KKwkJaWYgKGhzY2FuLT54c19sYXN0aW5ibG9jayAmJiAhKmhlYXBf Y29udGludWUpCisJCXsKKwkJCUV4ZWNTdG9yZVBpbm5lZEJ1ZmZlckhlYXBUdXBsZSgmYnNsb3Qt PmJhc2UudHVwZGF0YSwgc2xvdCwKKwkJCQkJCQkJCQkgICBoc2Nhbi0+eHNfY2J1Zik7CisJCQlo c2Nhbi0+eHNfY2J1ZiA9IEludmFsaWRCdWZmZXI7CisJCQloc2Nhbi0+eHNfYmxrID0gSW52YWxp ZEJsb2NrTnVtYmVyOworCisJCQkvKgorCQkJICogTm90ZTogdGhlIHBpbiBub3cgb3duZWQgYnkg dGhlIHNsb3QgaXMgZXhwZWN0ZWQgdG8gYmUgcmVsZWFzZWQKKwkJCSAqIG9uIHRoZSBuZXh0IGNh bGwgaGVyZSwgdmlhIGFuIGV4cGxpY2l0IEV4ZWNDbGVhclR1cGxlLiAgVGhpcworCQkJICogYXZv aWRzIGNodXJuIGluIHRoZSBiYWNrZW5kJ3MgcHJpdmF0ZSByZWZjb3VudCBjYWNoZS4KKwkJCSAq LworCQl9CisJCWVsc2UKKwkJCUV4ZWNTdG9yZUJ1ZmZlckhlYXBUdXBsZSgmYnNsb3QtPmJhc2Uu dHVwZGF0YSwgc2xvdCwKKwkJCQkJCQkJCSBoc2Nhbi0+eHNfY2J1Zik7CiAJfQogCWVsc2UKIAl7 CkBAIC03OTUsMTAgKzgzMiw0MiBAQCBoZWFwYW1faW5kZXhfcmV0dXJuX3NjYW5wb3NfdGlkKElu ZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiwKIAogCWlmIChhbGxf dmlzaWJsZSA9PSBOVUxMKQogCXsKKwkJaW50CQkJbmV4dEl0ZW07CisJCWJvb2wJCWhhc05leHQ7 CisKIAkJLyoKIAkJICogUGxhaW4gaW5kZXggc2Nhbi4KKwkJICoKKwkJICogRGV0ZXJtaW5lIGlm IHRoZSBuZXh0IGl0ZW0gaW4gdGhlIGN1cnJlbnQgc2NhbiBkaXJlY3Rpb24gaXMgb24gYQorCQkg KiBkaWZmZXJlbnQgaGVhcCBibG9jay4gIFdoZW4gaXQgaXMsIGhlYXBhbV9pbmRleF9mZXRjaF90 dXBsZV9pbXBsCisJCSAqIGNhbiB0cmFuc2ZlciBpdHMgYnVmZmVyIHBpbiB0byB0aGUgc2xvdCBp bnN0ZWFkIG9mIGluY3JlbWVudGluZyB0aGUKKwkJICogcGluIGNvdW50LCBzYXZpbmcgYSBwYWly IG9mIEluY3JCdWZmZXJSZWZDb3VudC9SZWxlYXNlQnVmZmVyIGNhbGxzLgorCQkgKgorCQkgKiBO b3RlOiBXZSBjYW5ub3QgZG8gdGhpcyBmb3IgaW5kZXgtb25seSBzY2FucyBiZWNhdXNlIGFsbC12 aXNpYmxlCisJCSAqIGl0ZW1zIGFyZSBza2lwcGVkIGJ5IGJvdGggdGhlIHNjYW4gYW5kIHRoZSBy ZWFkIHN0cmVhbSBjYWxsYmFjay4gSXQKKwkJICogZG9lc24ndCBzZWVtIHdvcnRoIHRoZSB0cm91 YmxlIG9mIHJlYXNvbmluZyBhYm91dCB0aGVzZSBpc3N1ZXMsCisJCSAqIHNpbmNlIHRoZSBvcHRp bWl6YXRpb24gb25seSBoZWxwcyB3aGVuIGhlYXAgZmV0Y2hlcyBhcmUgcmVxdWlyZWQuCisJCSAq CisJCSAqIE5vdGU6IFdlIGRlbGliZXJhdGVseSBkb24ndCBjb25zaWRlciB0aGUgYmF0Y2ggYWZ0 ZXIgc2NhbkJhdGNoLAorCQkgKiBiZWNhdXNlIGRvaW5nIHNvIHdvdWxkIGFkZCBjb21wbGV4aXR5 IGZvciBsaXR0bGUgYmVuZWZpdC4gIEl0J3MKKwkJICogb2theSBpZiB4c19sYXN0aW5ibG9jayBp cyBzcHVyaW91c2x5IHNldCB0byBmYWxzZS4KIAkJICovCiAJCUFzc2VydCghc2Nhbi0+eHNfd2Fu dF9pdHVwKTsKKwkJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyZWN0aW9uKSkKKwkJewor CQkJbmV4dEl0ZW0gPSBzY2FuUG9zLT5pdGVtICsgMTsKKwkJCWhhc05leHQgPSAobmV4dEl0ZW0g PD0gc2NhbkJhdGNoLT5sYXN0SXRlbSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQluZXh0SXRlbSA9 IHNjYW5Qb3MtPml0ZW0gLSAxOworCQkJaGFzTmV4dCA9IChuZXh0SXRlbSA+PSBzY2FuQmF0Y2gt PmZpcnN0SXRlbSk7CisJCX0KKworCQloc2Nhbi0+eHNfbGFzdGluYmxvY2sgPSBoYXNOZXh0ICYm CisJCQlJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKCZzY2FuQmF0Y2gtPml0ZW1zW25leHRJdGVt XS50YWJsZVRpZCkgIT0KKwkJCUl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIoJnNjYW4tPnhzX2hl YXB0aWQpOworCiAJCXJldHVybiAmc2Nhbi0+eHNfaGVhcHRpZDsKIAl9CiAKQEAgLTgwNyw3ICs4 NzYsNyBAQCBoZWFwYW1faW5kZXhfcmV0dXJuX3NjYW5wb3NfdGlkKEluZGV4U2NhbkRlc2Mgc2Nh biwgSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiwKIAkgKgogCSAqIEFsc28gc2V0IHhzX2l0dXAs IHdoaWNoIGNhbGxlciBhbHNvIG5lZWRzLgogCSAqLwotCUFzc2VydChzY2FuLT54c193YW50X2l0 dXApOworCUFzc2VydChzY2FuLT54c193YW50X2l0dXAgJiYgIWhzY2FuLT54c19sYXN0aW5ibG9j ayk7CiAJc2Nhbi0+eHNfaXR1cCA9IChJbmRleFR1cGxlKSAoc2NhbkJhdGNoLT5jdXJyVHVwbGVz ICsKIAkJCQkJCQkJICBzY2FuQmF0Y2gtPml0ZW1zW3NjYW5Qb3MtPml0ZW1dLnR1cGxlT2Zmc2V0 KTsKIAotLSAKMi41My4wCgo= --000000000000f287f9064e6de93c Content-Type: application/octet-stream; name="v20-0004-heapam-Track-heap-block-in-IndexFetchHeapData.patch" Content-Disposition: attachment; filename="v20-0004-heapam-Track-heap-block-in-IndexFetchHeapData.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mngmwp6d14 RnJvbSBlMTU5ZDBhNGJkMzU3MTkxMWY3YzY3ODdjZGU1MWRhOTkzYTRhN2E3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFR1 ZSwgMTAgTWFyIDIwMjYgMTQ6NDA6MzUgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyMCAwNC8xN10g aGVhcGFtOiBUcmFjayBoZWFwIGJsb2NrIGluIEluZGV4RmV0Y2hIZWFwRGF0YS4KCkFkZCBhbiBl eHBsaWNpdCBCbG9ja051bWJlciBmaWVsZCAoeHNfYmxrKSB0byBJbmRleEZldGNoSGVhcERhdGEg dGhhdAp0cmFja3Mgd2hpY2ggaGVhcCBibG9jayBpcyBjdXJyZW50bHkgcGlubmVkIGluIHhzX2Ni dWYuCgpoZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGUgbm93IHVzZXMgeHNfYmxrIHRvIGRldGVybWlu ZSB3aGVuIGJ1ZmZlcgpzd2l0Y2hpbmcgaXMgbmVlZGVkLCByZXBsYWNpbmcgdGhlIHByZXZpb3Vz IGFwcHJvYWNoIHRoYXQgY29tcGFyZWQKYnVmZmVyIGlkZW50aXRpZXMgdmlhIFJlbGVhc2VBbmRS ZWFkQnVmZmVyIG9uIGV2ZXJ5IG5vbi1IT1QtY2hhaW4gY2FsbC4KClRoaXMgaXMgcHJlcGFyYXRv cnkgd29yayBmb3IgYW4gdXBjb21pbmcgY29tbWl0IHRoYXQgd2lsbCBhZGQgaW5kZXgKcHJlZmV0 Y2hpbmcgdXNpbmcgYSByZWFkIHN0cmVhbS4gIERlbGVnYXRpbmcgdGhlIHJlbGVhc2Ugb2YgYSBj dXJyZW50bHkKcGlubmVkIGJ1ZmZlciB0byBSZWxlYXNlQW5kUmVhZEJ1ZmZlciB3b24ndCB3b3Jr IGFueW1vcmUgLS0gYXQgbGVhc3Qgbm90CndoZW4gdGhlIG5leHQgYnVmZmVyIHRoYXQgdGhlIHNj YW4gbmVlZHMgdG8gcGluIGlzIG9uZSByZXR1cm5lZCBieQpyZWFkX3N0cmVhbV9uZXh0X2J1ZmZl ciAobm90IGEgYnVmZmVyIHJldHVybmVkIGJ5IFJlYWRCdWZmZXIpLgoKQXV0aG9yOiBQZXRlciBH ZW9naGVnYW4gPHBnQGJvd3QuaWU+ClJldmlld2VkLUJ5OiBBbmRyZXMgRnJldW5kIDxhbmRyZXNA YW5hcmF6ZWwuZGU+CkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vQ0FIMi1Xej1nPUpU U3lEQjRVdEI1c3UyWmN2c1M3VmJQK1pNdnZhRzZBQm9DYitzOEx3QG1haWwuZ21haWwuY29tCi0t LQogc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oICAgICAgICAgICAgICAgIHwgIDUgKystLQog c3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2luZGV4c2Nhbi5jIHwgMzUgKysrKysrKysr KysrKystLS0tLS0tLQogMiBmaWxlcyBjaGFuZ2VkLCAyNSBpbnNlcnRpb25zKCspLCAxNSBkZWxl dGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmggYi9zcmMv aW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKaW5kZXggZDc2ZDNlN2ZkLi5hNzhmYzBkZjIgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nl c3MvaGVhcGFtLmgKQEAgLTEyMiwxMCArMTIyLDExIEBAIHR5cGVkZWYgc3RydWN0IEluZGV4RmV0 Y2hIZWFwRGF0YQogCUluZGV4RmV0Y2hUYWJsZURhdGEgeHNfYmFzZTsJLyogQU0gaW5kZXBlbmRl bnQgcGFydCBvZiB0aGUgZGVzY3JpcHRvciAqLwogCiAJLyoKLQkgKiBDdXJyZW50IGhlYXAgYnVm ZmVyIGluIHNjYW4sIGlmIGFueS4gTkI6IGlmIHhzX2NidWYgaXMgbm90Ci0JICogSW52YWxpZEJ1 ZmZlciwgd2UgaG9sZCBhIHBpbiBvbiB0aGF0IGJ1ZmZlci4KKwkgKiBDdXJyZW50IGhlYXAgYnVm ZmVyIGluIHNjYW4gKGFuZCBpdHMgYmxvY2sgbnVtYmVyKSwgaWYgYW55LiAgTkI6IGlmCisJICog eHNfYmxrIGlzIG5vdCBJbnZhbGlkQmxvY2tOdW1iZXIsIHdlIGhvbGQgYSBwaW4gaW4geHNfY2J1 Zi4KIAkgKi8KIAlCdWZmZXIJCXhzX2NidWY7CisJQmxvY2tOdW1iZXIgeHNfYmxrOwogCiAJLyog Q3VycmVudCBoZWFwIGJsb2NrJ3MgY29ycmVzcG9uZGluZyBwYWdlIGluIHRoZSB2aXNpYmlsaXR5 IG1hcCAqLwogCUJ1ZmZlcgkJeHNfdm1idWZmZXI7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9h Y2Nlc3MvaGVhcC9oZWFwYW1faW5kZXhzY2FuLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9o ZWFwYW1faW5kZXhzY2FuLmMKaW5kZXggMjM2MzViNmJjLi40NTliNjllZWUgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9pbmRleHNjYW4uYworKysgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faW5kZXhzY2FuLmMKQEAgLTUwLDYgKzUwLDcgQEAgaGVh cGFtX2luZGV4X2ZldGNoX2JlZ2luKFJlbGF0aW9uIHJlbCwgdWludDMyIGZsYWdzKQogCiAJaHNj YW4tPnhzX2Jhc2UuZmxhZ3MgPSBmbGFnczsKIAloc2Nhbi0+eHNfY2J1ZiA9IEludmFsaWRCdWZm ZXI7CisJaHNjYW4tPnhzX2JsayA9IEludmFsaWRCbG9ja051bWJlcjsKIAloc2Nhbi0+eHNfdm1i dWZmZXIgPSBJbnZhbGlkQnVmZmVyOwogCiAJLyoKQEAgLTY4LDYgKzY5LDcgQEAgaGVhcGFtX2lu ZGV4X2ZldGNoX3Jlc2V0KEluZGV4U2NhbkRlc2Mgc2NhbikKIAl7CiAJCVJlbGVhc2VCdWZmZXIo aHNjYW4tPnhzX2NidWYpOwogCQloc2Nhbi0+eHNfY2J1ZiA9IEludmFsaWRCdWZmZXI7CisJCWhz Y2FuLT54c19ibGsgPSBJbnZhbGlkQmxvY2tOdW1iZXI7CiAJfQogCiAJaWYgKEJ1ZmZlcklzVmFs aWQoaHNjYW4tPnhzX3ZtYnVmZmVyKSkKQEAgLTMyNCwyMyArMzI2LDMwIEBAIGhlYXBhbV9pbmRl eF9mZXRjaF90dXBsZV9pbXBsKFJlbGF0aW9uIHJlbCwKIAogCUFzc2VydChUVFNfSVNfQlVGRkVS VFVQTEUoc2xvdCkpOwogCi0JLyogV2UgY2FuIHNraXAgdGhlIGJ1ZmZlci1zd2l0Y2hpbmcgbG9n aWMgaWYgd2UncmUgaW4gbWlkLUhPVCBjaGFpbi4gKi8KLQlpZiAoISpoZWFwX2NvbnRpbnVlKQor CS8qIFdlIGNhbiBza2lwIHRoZSBidWZmZXItc3dpdGNoaW5nIGxvZ2ljIGlmIHdlJ3JlIG9uIHRo ZSBzYW1lIHBhZ2UuICovCisJaWYgKGhzY2FuLT54c19ibGsgIT0gSXRlbVBvaW50ZXJHZXRCbG9j a051bWJlcih0aWQpKQogCXsKLQkJLyogU3dpdGNoIHRvIGNvcnJlY3QgYnVmZmVyIGlmIHdlIGRv bid0IGhhdmUgaXQgYWxyZWFkeSAqLwotCQlCdWZmZXIJCXByZXZfYnVmID0gaHNjYW4tPnhzX2Ni dWY7CisJCUFzc2VydCghKmhlYXBfY29udGludWUpOwogCi0JCWhzY2FuLT54c19jYnVmID0gUmVs ZWFzZUFuZFJlYWRCdWZmZXIoaHNjYW4tPnhzX2NidWYsIHJlbCwKLQkJCQkJCQkJCQkJICBJdGVt UG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCkpOworCQkvKiBSZW1lbWJlciB0aGlzIGJ1ZmZlcidz IGJsb2NrIG51bWJlciBmb3IgbmV4dCB0aW1lICovCisJCWhzY2FuLT54c19ibGsgPSBJdGVtUG9p bnRlckdldEJsb2NrTnVtYmVyKHRpZCk7CisKKwkJaWYgKEJ1ZmZlcklzVmFsaWQoaHNjYW4tPnhz X2NidWYpKQorCQkJUmVsZWFzZUJ1ZmZlcihoc2Nhbi0+eHNfY2J1Zik7CisKKwkJaHNjYW4tPnhz X2NidWYgPSBSZWFkQnVmZmVyKHJlbCwgaHNjYW4tPnhzX2Jsayk7CiAKIAkJLyoKLQkJICogUHJ1 bmUgcGFnZSwgYnV0IG9ubHkgaWYgd2Ugd2VyZW4ndCBhbHJlYWR5IG9uIHRoaXMgcGFnZQorCQkg KiBQcnVuZSBwYWdlIHdoZW4gaXQgaXMgcGlubmVkIGZvciB0aGUgZmlyc3QgdGltZQogCQkgKi8K LQkJaWYgKHByZXZfYnVmICE9IGhzY2FuLT54c19jYnVmKQotCQkJaGVhcF9wYWdlX3BydW5lX29w dChyZWwsIGhzY2FuLT54c19jYnVmLCAmaHNjYW4tPnhzX3ZtYnVmZmVyLAotCQkJCQkJCQloc2Nh bi0+eHNfYmFzZS5mbGFncyAmIFNPX0hJTlRfUkVMX1JFQURfT05MWSk7CisJCWhlYXBfcGFnZV9w cnVuZV9vcHQocmVsLCBoc2Nhbi0+eHNfY2J1ZiwKKwkJCQkJCQkmaHNjYW4tPnhzX3ZtYnVmZmVy LAorCQkJCQkJCWhzY2FuLT54c19iYXNlLmZsYWdzICYgU09fSElOVF9SRUxfUkVBRF9PTkxZKTsK IAl9CiAKKwlBc3NlcnQoQnVmZmVyR2V0QmxvY2tOdW1iZXIoaHNjYW4tPnhzX2NidWYpID09IGhz Y2FuLT54c19ibGspOworCUFzc2VydChoc2Nhbi0+eHNfYmxrID09IEl0ZW1Qb2ludGVyR2V0Qmxv Y2tOdW1iZXIodGlkKSk7CisKIAkvKiBPYnRhaW4gc2hhcmUtbG9jayBvbiB0aGUgYnVmZmVyIHNv IHdlIGNhbiBleGFtaW5lIHZpc2liaWxpdHkgKi8KIAlMb2NrQnVmZmVyKGhzY2FuLT54c19jYnVm LCBCVUZGRVJfTE9DS19TSEFSRSk7CiAJZ290X2hlYXBfdHVwbGUgPSBoZWFwX2hvdF9zZWFyY2hf YnVmZmVyKHRpZCwKQEAgLTQ0MywxMSArNDUyLDExIEBAIGhlYXBhbV9pbmRleF9nZXRuZXh0X3Ns b3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKIAkJCQkJICov CiAJCQkJCWlmICh1bmxpa2VseShzY2FuLT54c192aXNpdGVkX3BhZ2VzX2xpbWl0ID4gMCkpCiAJ CQkJCXsKLQkJCQkJCUJsb2NrTnVtYmVyIGJsayA9IEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIo dGlkKTsKKwkJCQkJCUFzc2VydChoc2Nhbi0+eHNfYmxrID09IEl0ZW1Qb2ludGVyR2V0QmxvY2tO dW1iZXIodGlkKSk7CiAKLQkJCQkJCWlmIChibGsgIT0gbGFzdF92aXNpdGVkX2Jsb2NrKQorCQkJ CQkJaWYgKGhzY2FuLT54c19ibGsgIT0gbGFzdF92aXNpdGVkX2Jsb2NrKQogCQkJCQkJewotCQkJ CQkJCWxhc3RfdmlzaXRlZF9ibG9jayA9IGJsazsKKwkJCQkJCQlsYXN0X3Zpc2l0ZWRfYmxvY2sg PSBoc2Nhbi0+eHNfYmxrOwogCQkJCQkJCWlmICgrK25fdmlzaXRlZF9wYWdlcyA+IHNjYW4tPnhz X3Zpc2l0ZWRfcGFnZXNfbGltaXQpCiAJCQkJCQkJCXJldHVybiBmYWxzZTsJLyogZ2l2ZSB1cCAq LwogCQkJCQkJfQotLSAKMi41My4wCgo= --000000000000f287f9064e6de93c Content-Type: application/octet-stream; name="v20-0003-Add-slot-based-table-AM-index-scan-interface.patch" Content-Disposition: attachment; filename="v20-0003-Add-slot-based-table-AM-index-scan-interface.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mngmwp6f15 RnJvbSA5ZmFlZGU1NDExZGUwNjg1ODdjNjQ0ODlmOWFiOTViYzcwMzM1MjEzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFN1 biwgMjIgTWFyIDIwMjYgMDI6MzY6NTcgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyMCAwMy8xN10g QWRkIHNsb3QtYmFzZWQgdGFibGUgQU0gaW5kZXggc2NhbiBpbnRlcmZhY2UuCgpBZGQgdGFibGVf aW5kZXhfZ2V0bmV4dF9zbG90LCBhIG5ldyB0YWJsZSBBTSBjYWxsYmFjayB0aGF0IHdyYXBzIGJv dGgKcGxhaW4gYW5kIGluZGV4LW9ubHkgaW5kZXggc2NhbnMgdGhhdCB1c2UgYW1nZXR0dXBsZS4g IFR3byBuZXcKVGFibGVBbVJvdXRpbmUgY2FsbGJhY2tzIGFyZSBpbnRyb2R1Y2VkIC0tIG9uZSBm b3IgcGxhaW4gc2NhbnMgYW5kIG9uZQpmb3IgaW5kZXgtb25seSBzY2FucyAtLSB3aGljaCBhbiB1 cGNvbWluZyBjb21taXQgdGhhdCBhZGRzIHRoZQphbWdldGJhdGNoIGludGVyZmFjZSB3aWxsIGV4 cGFuZCB0byBmb3VyLiAgVGhlIGFwcHJvcHJpYXRlIGNhbGxiYWNrIGlzCnJlc29sdmVkIG9uY2Ug aW4gaW5kZXhfYmVnaW5zY2FuLCBhbmQgY2FsbGVkIHRocm91Z2ggYSBmdW5jdGlvbiBwb2ludGVy Cih4c19nZXRuZXh0X3Nsb3QpIG9uIHRoZSBJbmRleFNjYW5EZXNjIHdoZW4gdGhlIHRhYmxlX2lu ZGV4X2dldG5leHRfc2xvdApzaGltIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIGV4ZWN1dG9yIG5v ZGVzLgoKVGhpcyBtb3ZlcyBWTSBjaGVja3MgZm9yIGluZGV4LW9ubHkgc2NhbnMgb3V0IG9mIHRo ZSBleGVjdXRvciBhbmQgaW50bwpoZWFwYW0sIGVuYWJsaW5nIGJhdGNoaW5nIG9mIHZpc2liaWxp dHkgbWFwIGxvb2t1cHMgKHRob3VnaCBmb3Igbm93IHdlCmNvbnRpbnVlIHRvIGp1c3QgcGVyZm9y bSByZXRhaWwgbG9va3VwcykuICBVc2luZyB0aGUgbmV3IGhpZ2hlciBsZXZlbApzbG90LWJhc2Vk IGludGVyZmFjZSBncmVhdGx5IHNpbXBsaWZpZXMgbm9kZUluZGV4b25seXNjYW4uYywgd2hpY2gg bm8KbG9uZ2VyIGhhcyB0byBkZWFsIHdpdGggdGhlIHZpc2liaWxpdHkgbWFwIGRpcmVjdGx5LiAg TW9yZSBpbXBvcnRhbnRseSwKdGhpcyBpcyBhIHNpZ25pZmljYW50bHkgYXJjaGl0ZWN0dXJhbCBp bXByb3ZlbWVudDogdGFibGUgQU1zIGNhbiBub3cKaW1wbGVtZW50IGluZGV4LW9ubHkgc2NhbnMg dGhhdCBhcmUgbm90IHRpZWQgdG8gaGVhcGFtJ3MgdmlzaWJpbGl0eSBtYXAuCgpBIHNtYWxsIG1p bm9yaXR5IG9mIGNhbGxlcnMgKDIgY2FsbGVycyBpbiB0b3RhbCkgZnVuZGFtZW50YWxseSBuZWVk IHRvCnBhc3MgYSBUSUQgdG8gdGhlIHRhYmxlIEFNIChib3RoIHBlcmZvcm0gY29uc3RyYWludCBl bmZvcmNlbWVudCkuICBUaGVzZQpjYWxsZXJzIGRvbid0IGFjdHVhbGx5IHBlcmZvcm0gaW5kZXgg c2NhbnMgKGV2ZW4gaWYgdGhlaXIgVElEcyBhcmUgdGFrZW4KZnJvbSBhbiBpbmRleCksIGFuZCBo YXZlIG5vIG5lZWQgZm9yIG1vc3Qgb2YgdGhlIGluZGV4IHNjYW4gbWFjaGluZXJ5LgpTd2l0Y2gg dGhlc2UgY2FsbGVycyBvdmVyIHRvIHRoZSBuZXcgZmV0Y2hfdGlkIGludGVyZmFjZSAod2hpY2gg cmVwbGFjZXMKdGhlIHByZXZpb3VzIFRJRC1iYXNlZCBpbmRleF9mZXRjaF90dXBsZSBpbnRlcmZh Y2UpLiAgQWxsIGluZGV4IHNjYW4KY2FsbGVycyBub3cgdXNlIHRoZSBuZXcgc2xvdC1iYXNlZCBp bnRlcmZhY2UgKHRhYmxlX2luZGV4X2dldG5leHRfc2xvdCkuCgpJbmRleC1vbmx5IHNjYW4gY2Fs bGVycyBwYXNzIHRhYmxlX2luZGV4X2dldG5leHRfc2xvdCBhIFR1cGxlVGFibGVTbG90Cih3aGlj aCB0aGUgdGFibGUgQU0gbmVlZHMgaW50ZXJuYWxseSBmb3IgaGVhcCBmZXRjaGVzKSwgYnV0IGNv bnRpbnVlIHRvCnJlYWQgdGhlaXIgcmVzdWx0cyBmcm9tIEluZGV4U2NhbkRlc2NEYXRhIGZpZWxk cyBzdWNoIGFzIHhzX2l0dXAgKHJhdGhlcgp0aGFuIGZyb20gdGhlIHNsb3QgaXRzZWxmKS4gIEFs bCBjYWxsZXJzIGNhbiBjb250aW51ZSB0byByZWx5IG9uIHRoZQpzY2FuIGRlc2NyaXB0b3IncyB4 c19oZWFwdGlkIGZpZWxkIGJlaW5nIHNldCBvbiBlYWNoIGNhbGwuCgpUaGUgVklTSVRFRF9QQUdF U19MSU1JVCBtZWNoYW5pc20gdXNlZCBieSBnZXRfYWN0dWFsX3ZhcmlhYmxlX3JhbmdlIHRvCmNh cCBzY2FuIG92ZXJoZWFkIGR1cmluZyBwbGFubmluZyBpcyByZXdvcmtlZCB0byBnbyB0aHJvdWdo IGEgbmV3IHNjYW4KZGVzY3JpcHRvciBpbnRlcmZhY2UgKHhzX3Zpc2l0ZWRfcGFnZXNfbGltaXQp LCByYXRoZXIgdGhhbiB0cmFja2luZyB0aGUKY29zdHMgZGlyZWN0bHkgYW5kIHRlcm1pbmF0aW5n IHRoZSBzY2FuIGl0c2VsZiwgaW4gYW4gYWQtaG9jIHdheS4gIFRoaXMKaXMgbmVjZXNzYXJ5IGJl Y2F1c2UgY2FsbGVycyB0aGF0IHVzZSB0aGUgbmV3IHNsb3QtYmFzZWQgaW50ZXJmYWNlIG5vCmxv bmdlciBoYXZlIGRpcmVjdCBhY2Nlc3MgdG8gd2hpY2ggaGVhcCBibG9ja3Mgd2VyZSBmZXRjaGVk IGJ5IHRoZSB0YWJsZQpBTS4gIFNpbWlsYXJseSwgbm9kZUluZGV4b25seXNjYW4uYyBjYW4gbm8g bG9uZ2VyIHVzZSBJbnN0ckNvdW50VHVwbGVzMgp0byBjb3VudCBoZWFwIGZldGNoZXMgZHVyaW5n IGFuIEVYUExBSU4gQU5BTFlaRS4gIEluc3RlYWQgaXQgcmVsaWVzIG9uCmhlYXBhbSBtYWludGFp bmluZyBhIG5ldyBJbmRleFNjYW5JbnN0cnVtZW50YXRpb24ubnRhYmxlZmV0Y2hlcyBmaWVsZC4K ClRob3VnaCBpbmRlcGVuZGVudGx5IHVzZWZ1bCwgdGhpcyBjb21taXQgaXMgcHJlcGFyYXRvcnkg d29yayBmb3IgYW4KdXBjb21pbmcgY29tbWl0IHRoYXQgd2lsbCBhZGQgYW4gYW1nZXRiYXRjaCBp bmRleCBBTSBpbnRlcmZhY2UsIHdoZXJlCnRoZSB0YWJsZSBBTSB0YWtlcyBmdWxsIHJlc3BvbnNp YmlsaXR5IGZvciBtYW5hZ2luZyB0aGUgcHJvZ3Jlc3Mgb2YKaW5kZXggc2NhbnMuICBUaGF0IHdp bGwgbW92ZSBtb3N0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBzY3JvbGxhYmxlCmN1cnNvcnMg b3V0IG9mIGluZGV4IEFNcyBhbmQgaW50byB0YWJsZSBBTXMsIG1ha2luZyBpdCBlc3NlbnRpYWwg dGhhdApleGVjdXRvciBub2RlcyBwYXNzIHRoZSBjdXJyZW50IHNjYW4gZGlyZWN0aW9uIGRvd24g dG8gdGhlIHRhYmxlIEFNLgoKVGhlIGhlYXBhbSBpbXBsZW1lbnRhdGlvbnMgbWFrZSBhZ2dyZXNz aXZlIHVzZSBvZiBmb3JjZWQgaW5saW5pbmcgdG8KZW5zdXJlIHRoYXQgcGxhaW4gYW5kIGluZGV4 LW9ubHkgY29kZSBwYXRocyBhcmUgZnVsbHkgc3BlY2lhbGl6ZWQgYXQKY29tcGlsZSB0aW1lIGRl c3BpdGUgc2hhcmluZyBhIGNvbW1vbiBpbXBsZW1lbnRhdGlvbi4gIFRlc3RpbmcgaGFzIHNob3du CnRoaXMgaXMgbmVjZXNzYXJ5IHRvIGtlZXAgaWNhY2hlIG1pc3NlcyB0byBhIG1pbmltdW0sIGF0 IGxlYXN0IHdpdGggdGhlCnR3byB1cGNvbWluZyBhbWdldGJhdGNoIHZhcmlhbnRzLgoKQXV0aG9y OiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+ClJldmlld2VkLUJ5OiBBbmRyZXMgRnJldW5k IDxhbmRyZXNAYW5hcmF6ZWwuZGU+ClJldmlld2VkLUJ5OiBUb21hcyBWb25kcmEgPHRvbWFzQHZv bmRyYS5tZT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQUgyLVd6bVlxaGFjQkgx NjFwZUFXYjVlRj1KYTdDRkFRKzBqU0VNcT1xbmZMVlRPT2dAbWFpbC5nbWFpbC5jb20KLS0tCiBz cmMvaW5jbHVkZS9hY2Nlc3MvZ2VuYW0uaCAgICAgICAgICAgICAgICAgfCAgIDUgKy0KIHNyYy9p bmNsdWRlL2FjY2Vzcy9oZWFwYW0uaCAgICAgICAgICAgICAgICB8ICAxNiArLQogc3JjL2luY2x1 ZGUvYWNjZXNzL3JlbHNjYW4uaCAgICAgICAgICAgICAgIHwgIDMxICsrLQogc3JjL2luY2x1ZGUv YWNjZXNzL3RhYmxlYW0uaCAgICAgICAgICAgICAgIHwgMTUyICsrKysrKystLS0tCiBzcmMvaW5j bHVkZS9leGVjdXRvci9pbnN0cnVtZW50X25vZGUuaCAgICAgfCAgIDUgKwogc3JjL2luY2x1ZGUv bm9kZXMvZXhlY25vZGVzLmggICAgICAgICAgICAgIHwgICAyIC0KIHNyYy9iYWNrZW5kL2FjY2Vz cy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMgICB8ICAxMSArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hl YXAvaGVhcGFtX2luZGV4c2Nhbi5jIHwgMjg2ICsrKysrKysrKysrKysrKysrKystLQogc3JjL2Jh Y2tlbmQvYWNjZXNzL2hlYXAvdmlzaWJpbGl0eW1hcC5jICAgIHwgIDI3ICstCiBzcmMvYmFja2Vu ZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYyAgICAgICAgICAgfCAgMTEgKy0KIHNyYy9iYWNrZW5kL2Fj Y2Vzcy9pbmRleC9pbmRleGFtLmMgICAgICAgICB8IDIxMyArKysrKy0tLS0tLS0tLS0KIHNyYy9i YWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0aW5zZXJ0LmMgICAgICB8ICAxMCArLQogc3JjL2JhY2tl bmQvYWNjZXNzL3RhYmxlL3RhYmxlYW0uYyAgICAgICAgIHwgIDIzICstCiBzcmMvYmFja2VuZC9h Y2Nlc3MvdGFibGUvdGFibGVhbWFwaS5jICAgICAgfCAgIDQgKy0KIHNyYy9iYWNrZW5kL2NvbW1h bmRzL2NvbnN0cmFpbnQuYyAgICAgICAgICB8ICAyOCArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMv ZXhwbGFpbi5jICAgICAgICAgICAgIHwgIDIzICstCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVj SW5kZXhpbmcuYyAgICAgICAgfCAgIDggKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNSZXBs aWNhdGlvbi5jICAgICB8ICAxMiArLQogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUJpdG1hcElu ZGV4c2Nhbi5jIHwgICAxICsKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleG9ubHlzY2Fu LmMgICB8IDEwOSArLS0tLS0tLQogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5j ICAgICAgIHwgIDEzICstCiBzcmMvYmFja2VuZC91dGlscy9hZHQvcmlfdHJpZ2dlcnMuYyAgICAg ICAgfCAgIDQgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5jICAgICAgICAgICB8 ICA2MSArLS0tLQogMjMgZmlsZXMgY2hhbmdlZCwgNTg2IGluc2VydGlvbnMoKyksIDQ2OSBkZWxl dGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2VuYW0uaCBiL3NyYy9p bmNsdWRlL2FjY2Vzcy9nZW5hbS5oCmluZGV4IGI2OTMyMGE3Zi4uZGI2MmUwY2ExIDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2VuYW0uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3Mv Z2VuYW0uaApAQCAtMTU2LDYgKzE1Niw3IEBAIGV4dGVybiB2b2lkIGluZGV4X2luc2VydF9jbGVh bnVwKFJlbGF0aW9uIGluZGV4UmVsYXRpb24sCiAKIGV4dGVybiBJbmRleFNjYW5EZXNjIGluZGV4 X2JlZ2luc2NhbihSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJCQkJCQkJCQkgUmVsYXRpb24gaW5k ZXhSZWxhdGlvbiwKKwkJCQkJCQkJCSBib29sIGluZGV4X29ubHlfc2NhbiwKIAkJCQkJCQkJCSBT bmFwc2hvdCBzbmFwc2hvdCwKIAkJCQkJCQkJCSBJbmRleFNjYW5JbnN0cnVtZW50YXRpb24gKmlu c3RydW1lbnQsCiAJCQkJCQkJCQkgaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzLApAQCAtMTgzLDE1 ICsxODQsMTMgQEAgZXh0ZXJuIHZvaWQgaW5kZXhfcGFyYWxsZWxzY2FuX2luaXRpYWxpemUoUmVs YXRpb24gaGVhcFJlbGF0aW9uLAogZXh0ZXJuIHZvaWQgaW5kZXhfcGFyYWxsZWxyZXNjYW4oSW5k ZXhTY2FuRGVzYyBzY2FuKTsKIGV4dGVybiBJbmRleFNjYW5EZXNjIGluZGV4X2JlZ2luc2Nhbl9w YXJhbGxlbChSZWxhdGlvbiBoZWFwcmVsLAogCQkJCQkJCQkJCQkgIFJlbGF0aW9uIGluZGV4cmVs LAorCQkJCQkJCQkJCQkgIGJvb2wgaW5kZXhfb25seV9zY2FuLAogCQkJCQkJCQkJCQkgIEluZGV4 U2Nhbkluc3RydW1lbnRhdGlvbiAqaW5zdHJ1bWVudCwKIAkJCQkJCQkJCQkJICBpbnQgbmtleXMs IGludCBub3JkZXJieXMsCiAJCQkJCQkJCQkJCSAgUGFyYWxsZWxJbmRleFNjYW5EZXNjIHBzY2Fu LAogCQkJCQkJCQkJCQkgIHVpbnQzMiBmbGFncyk7CiBleHRlcm4gSXRlbVBvaW50ZXIgaW5kZXhf Z2V0bmV4dF90aWQoSW5kZXhTY2FuRGVzYyBzY2FuLAogCQkJCQkJCQkJIFNjYW5EaXJlY3Rpb24g ZGlyZWN0aW9uKTsKLWV4dGVybiBib29sIGluZGV4X2ZldGNoX2hlYXAoSW5kZXhTY2FuRGVzYyBz Y2FuLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCk7Ci1leHRlcm4gYm9vbCBpbmRleF9nZXRuZXh0X3Ns b3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKLQkJCQkJCQkg ICBUdXBsZVRhYmxlU2xvdCAqc2xvdCk7CiBleHRlcm4gaW50NjQgaW5kZXhfZ2V0Yml0bWFwKElu ZGV4U2NhbkRlc2Mgc2NhbiwgVElEQml0bWFwICpiaXRtYXApOwogCiBleHRlcm4gSW5kZXhCdWxr RGVsZXRlUmVzdWx0ICppbmRleF9idWxrX2RlbGV0ZShJbmRleFZhY3V1bUluZm8gKmluZm8sCmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmggYi9zcmMvaW5jbHVkZS9hY2Nl c3MvaGVhcGFtLmgKaW5kZXggY2M5MGM4MjFiLi5kNzZkM2U3ZmQgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL2FjY2Vzcy9oZWFwYW0uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgK QEAgLTQzMCwxNSArNDMwLDE5IEBAIGV4dGVybiBUcmFuc2FjdGlvbklkIGhlYXBfaW5kZXhfZGVs ZXRlX3R1cGxlcyhSZWxhdGlvbiByZWwsCiAKIC8qIGluIGhlYXAvaGVhcGFtX2luZGV4c2Nhbi5j ICovCiBleHRlcm4gSW5kZXhGZXRjaFRhYmxlRGF0YSAqaGVhcGFtX2luZGV4X2ZldGNoX2JlZ2lu KFJlbGF0aW9uIHJlbCwgdWludDMyIGZsYWdzKTsKLWV4dGVybiB2b2lkIGhlYXBhbV9pbmRleF9m ZXRjaF9yZXNldChJbmRleEZldGNoVGFibGVEYXRhICpzY2FuKTsKLWV4dGVybiB2b2lkIGhlYXBh bV9pbmRleF9mZXRjaF9lbmQoSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2Nhbik7CitleHRlcm4gdm9p ZCBoZWFwYW1faW5kZXhfZmV0Y2hfcmVzZXQoSW5kZXhTY2FuRGVzYyBzY2FuKTsKK2V4dGVybiB2 b2lkIGhlYXBhbV9pbmRleF9mZXRjaF9lbmQoSW5kZXhTY2FuRGVzYyBzY2FuKTsKIGV4dGVybiBi b29sIGhlYXBfaG90X3NlYXJjaF9idWZmZXIoSXRlbVBvaW50ZXIgdGlkLCBSZWxhdGlvbiByZWxh dGlvbiwKIAkJCQkJCQkJICAgQnVmZmVyIGJ1ZmZlciwgU25hcHNob3Qgc25hcHNob3QsIEhlYXBU dXBsZSBoZWFwVHVwbGUsCiAJCQkJCQkJCSAgIGJvb2wgKmFsbF9kZWFkLCBib29sIGZpcnN0X2Nh bGwpOwotZXh0ZXJuIGJvb2wgaGVhcGFtX2luZGV4X2ZldGNoX3R1cGxlKHN0cnVjdCBJbmRleEZl dGNoVGFibGVEYXRhICpzY2FuLAotCQkJCQkJCQkJIEl0ZW1Qb2ludGVyIHRpZCwgU25hcHNob3Qg c25hcHNob3QsCi0JCQkJCQkJCQkgVHVwbGVUYWJsZVNsb3QgKnNsb3QsIGJvb2wgKmhlYXBfY29u dGludWUsCi0JCQkJCQkJCQkgYm9vbCAqYWxsX2RlYWQpOworZXh0ZXJuIGJvb2wgaGVhcGFtX2lu ZGV4X3BsYWluX2FtZ2V0dHVwbGVfbmV4dChJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCQkJ CSAgIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJCQkJCQkgICBUdXBsZVRhYmxlU2xv dCAqc2xvdCk7CitleHRlcm4gYm9vbCBoZWFwYW1faW5kZXhfb25seV9hbWdldHR1cGxlX25leHQo SW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJCQkgIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9u LAorCQkJCQkJCQkJCQkgIFR1cGxlVGFibGVTbG90ICpzbG90KTsKK2V4dGVybiBib29sIGhlYXBh bV9mZXRjaF90aWQoUmVsYXRpb24gcmVsLCBJdGVtUG9pbnRlciB0aWQsIFNuYXBzaG90IHNuYXBz aG90LAorCQkJCQkJCSBUdXBsZVRhYmxlU2xvdCAqc2xvdCwgYm9vbCAqYWxsX2RlYWQpOwogCiAv KiBpbiBoZWFwL3BydW5laGVhcC5jICovCiBleHRlcm4gdm9pZCBoZWFwX3BhZ2VfcHJ1bmVfb3B0 KFJlbGF0aW9uIHJlbGF0aW9uLCBCdWZmZXIgYnVmZmVyLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvYWNjZXNzL3JlbHNjYW4uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmgKaW5kZXgg OTYwYWJmNmMyLi4wZmYxNThkNWQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxz Y2FuLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaApAQCAtMTYsNiArMTYsNyBA QAogCiAjaW5jbHVkZSAiYWNjZXNzL2h0dXBfZGV0YWlscy5oIgogI2luY2x1ZGUgImFjY2Vzcy9p dHVwLmgiCisjaW5jbHVkZSAiYWNjZXNzL3NkaXIuaCIKICNpbmNsdWRlICJub2Rlcy90aWRiaXRt YXAuaCIKICNpbmNsdWRlICJwb3J0L2F0b21pY3MuaCIKICNpbmNsdWRlICJzdG9yYWdlL3JlbGZp bGVsb2NhdG9yLmgiCkBAIC0yNCw2ICsyNSw3IEBACiAKIAogc3RydWN0IFBhcmFsbGVsVGFibGVT Y2FuRGVzY0RhdGE7CitzdHJ1Y3QgVHVwbGVUYWJsZVNsb3Q7CiAKIC8qCiAgKiBHZW5lcmljIGRl c2NyaXB0b3IgZm9yIHRhYmxlIHNjYW5zLiBUaGlzIGlzIHRoZSBiYXNlLWNsYXNzIGZvciB0YWJs ZSBzY2FucywKQEAgLTExNywxMiArMTE5LDEzIEBAIHR5cGVkZWYgc3RydWN0IFBhcmFsbGVsQmxv Y2tUYWJsZVNjYW5Xb3JrZXJEYXRhICpQYXJhbGxlbEJsb2NrVGFibGVTY2FuV29ya2VyOwogLyoK ICAqIEJhc2UgY2xhc3MgZm9yIGZldGNoZXMgZnJvbSBhIHRhYmxlIHZpYSBhbiBpbmRleC4gVGhp cyBpcyB0aGUgYmFzZS1jbGFzcwogICogZm9yIHN1Y2ggc2NhbnMsIHdoaWNoIG5lZWRzIHRvIGJl IGVtYmVkZGVkIGluIHRoZSByZXNwZWN0aXZlIHN0cnVjdCBmb3IKLSAqIGluZGl2aWR1YWwgQU1z LgorICogaW5kaXZpZHVhbCB0YWJsZSBBTXMuCisgKgorICogVGhpcyBpcyBlc3NlbnRpYWxseSB0 aGUgdGFibGUgQU0gc3BlY2lmaWMgcG9ydGlvbiBvZiBJbmRleFNjYW5EZXNjRGF0YSwKKyAqIGFj Y2Vzc2VkIHRocm91Z2ggaXRzIHhzX2hlYXBmZXRjaCBmaWVsZC4KICAqLwogdHlwZWRlZiBzdHJ1 Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YQogewotCVJlbGF0aW9uCXJlbDsKLQogCS8qCiAJICogQml0 bWFzayBvZiBTY2FuT3B0aW9ucyBhZmZlY3RpbmcgdGhlIHJlbGF0aW9uLiBObyBTT19JTlRFUk5B TF9GTEFHUyBhcmUKIAkgKiBwZXJtaXR0ZWQuCkBAIC0xNjYsMTAgKzE2OSwxMCBAQCB0eXBlZGVm IHN0cnVjdCBJbmRleFNjYW5EZXNjRGF0YQogCXN0cnVjdCBJbmRleFNjYW5JbnN0cnVtZW50YXRp b24gKmluc3RydW1lbnQ7CiAKIAkvKgotCSAqIEluIGFuIGluZGV4LW9ubHkgc2NhbiwgYSBzdWNj ZXNzZnVsIGFtZ2V0dHVwbGUgY2FsbCBtdXN0IGZpbGwgZWl0aGVyCi0JICogeHNfaXR1cCAoYW5k IHhzX2l0dXBkZXNjKSBvciB4c19oaXR1cCAoYW5kIHhzX2hpdHVwZGVzYykgdG8gcHJvdmlkZSB0 aGUKLQkgKiBkYXRhIHJldHVybmVkIGJ5IHRoZSBzY2FuLiAgSXQgY2FuIGZpbGwgYm90aCwgaW4g d2hpY2ggY2FzZSB0aGUgaGVhcAotCSAqIGZvcm1hdCB3aWxsIGJlIHVzZWQuCisJICogSW4gYW4g aW5kZXgtb25seSBzY2FuLCBhIHN1Y2Nlc3NmdWwgdGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90IGNh bGwgbXVzdAorCSAqIGZpbGwgZWl0aGVyIHhzX2l0dXAgKGFuZCB4c19pdHVwZGVzYykgb3IgeHNf aGl0dXAgKGFuZCB4c19oaXR1cGRlc2MpIHRvCisJICogcHJvdmlkZSB0aGUgZGF0YSByZXR1cm5l ZCBieSB0aGUgc2Nhbi4gIEl0IGNhbiBmaWxsIGJvdGgsIGluIHdoaWNoIGNhc2UKKwkgKiB0aGUg aGVhcCBmb3JtYXQgd2lsbCBiZSB1c2VkLgogCSAqLwogCUluZGV4VHVwbGUJeHNfaXR1cDsJCS8q IGluZGV4IHR1cGxlIHJldHVybmVkIGJ5IEFNICovCiAJc3RydWN0IFR1cGxlRGVzY0RhdGEgKnhz X2l0dXBkZXNjOwkvKiByb3d0eXBlIGRlc2NyaXB0b3Igb2YgeHNfaXR1cCAqLwpAQCAtMTgxLDYg KzE4NCwxMSBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5EZXNjRGF0YQogCQkJCQkJCQkJICog ZnVydGhlciByZXN1bHRzICovCiAJSW5kZXhGZXRjaFRhYmxlRGF0YSAqeHNfaGVhcGZldGNoOwog CisJLyogUmVzb2x2ZWQgaW5kZXhfKl9uZXh0IGltcGxlbWVudGF0aW9uLCBzZXQgYnkgaW5kZXhf YmVnaW5zY2FuICovCisJYm9vbAkJKCp4c19nZXRuZXh0X3Nsb3QpIChzdHJ1Y3QgSW5kZXhTY2Fu RGVzY0RhdGEgKnNjYW4sCisJCQkJCQkJCQlTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQkJ CQkJCXN0cnVjdCBUdXBsZVRhYmxlU2xvdCAqc2xvdCk7CisKIAlib29sCQl4c19yZWNoZWNrOwkJ LyogVCBtZWFucyBzY2FuIGtleXMgbXVzdCBiZSByZWNoZWNrZWQgKi8KIAogCS8qCkBAIC0xOTQs NiArMjAyLDEzIEBAIHR5cGVkZWYgc3RydWN0IEluZGV4U2NhbkRlc2NEYXRhCiAJYm9vbAkgICAq eHNfb3JkZXJieW51bGxzOwogCWJvb2wJCXhzX3JlY2hlY2tvcmRlcmJ5OwogCisJLyoKKwkgKiBB biBhcHByb3hpbWF0ZSBsaW1pdCBvbiB0aGUgYW1vdW50IG9mIHdvcmssIG1lYXN1cmVkIGluIHBh Z2VzIHRvdWNoZWQsCisJICogaW1wb3NlZCBvbiB0aGUgaW5kZXggc2Nhbi4gIFRoZSBkZWZhdWx0 LCAwLCBtZWFucyBubyBsaW1pdC4gIFVzZWQgYnkKKwkgKiBzZWxmdW5jcy5jIHRvIGJvdW5kIHRo ZSBjb3N0IG9mIGdldF9hY3R1YWxfdmFyaWFibGVfZW5kcG9pbnQoKS4KKwkgKi8KKwl1aW50OAkJ eHNfdmlzaXRlZF9wYWdlc19saW1pdDsKKwogCS8qIHBhcmFsbGVsIGluZGV4IHNjYW4gaW5mb3Jt YXRpb24sIGluIHNoYXJlZCBtZW1vcnkgKi8KIAlzdHJ1Y3QgUGFyYWxsZWxJbmRleFNjYW5EZXNj RGF0YSAqcGFyYWxsZWxfc2NhbjsKIH0gSW5kZXhTY2FuRGVzY0RhdGE7CkBAIC0yMDgsOCArMjIz LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgUGFyYWxsZWxJbmRleFNjYW5EZXNjRGF0YQogCWNoYXIJCXBz X3NuYXBzaG90X2RhdGFbRkxFWElCTEVfQVJSQVlfTUVNQkVSXTsKIH0JCQlQYXJhbGxlbEluZGV4 U2NhbkRlc2NEYXRhOwogCi1zdHJ1Y3QgVHVwbGVUYWJsZVNsb3Q7Ci0KIC8qIFN0cnVjdCBmb3Ig c3RvcmFnZS1vci1pbmRleCBzY2FucyBvZiBzeXN0ZW0gdGFibGVzICovCiB0eXBlZGVmIHN0cnVj dCBTeXNTY2FuRGVzY0RhdGEKIHsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJs ZWFtLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oCmluZGV4IDQ2NDc3ODVmZC4uNDg3 NWQ3MGFkIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oCisrKyBiL3Ny Yy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgKQEAgLTE3LDYgKzE3LDcgQEAKICNpZm5kZWYgVEFC TEVBTV9ICiAjZGVmaW5lIFRBQkxFQU1fSAogCisjaW5jbHVkZSAiYWNjZXNzL2dlbmFtLmgiCiAj aW5jbHVkZSAiYWNjZXNzL3JlbHNjYW4uaCIKICNpbmNsdWRlICJhY2Nlc3Mvc2Rpci5oIgogI2lu Y2x1ZGUgImFjY2Vzcy94YWN0LmgiCkBAIC00NTAsNDYgKzQ1MSw1OSBAQCB0eXBlZGVmIHN0cnVj dCBUYWJsZUFtUm91dGluZQogCSAqIGZsYWdzIGlzIGEgYml0bWFzayBvZiBTY2FuT3B0aW9ucyBh ZmZlY3RpbmcgdW5kZXJseWluZyB0YWJsZSBzY2FuCiAJICogYmVoYXZpb3IuIFNlZSBzY2FuX2Jl Z2luKCkgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gcGFzc2luZyB0aGVzZS4KIAkgKgotCSAqIFR1 cGxlcyBmb3IgYW4gaW5kZXggc2NhbiBjYW4gdGhlbiBiZSBmZXRjaGVkIHZpYSBpbmRleF9mZXRj aF90dXBsZS4KKwkgKiBUdXBsZXMgZm9yIGFuIGluZGV4IHNjYW4gY2FuIHRoZW4gYmUgZmV0Y2hl ZCB2aWEgb25lIG9mIHRoZQorCSAqIHNsb3QtYmFzZWQgY2FsbGJhY2tzIGNhbGxlZCB0aHJvdWdo IHRhYmxlX2luZGV4X2dldG5leHRfc2xvdC4KIAkgKi8KIAlzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxl RGF0YSAqKCppbmRleF9mZXRjaF9iZWdpbikgKFJlbGF0aW9uIHJlbCwgdWludDMyIGZsYWdzKTsK IAogCS8qCi0JICogUmVzZXQgaW5kZXggZmV0Y2guIFR5cGljYWxseSB0aGlzIHdpbGwgcmVsZWFz ZSBjcm9zcyBpbmRleCBmZXRjaAotCSAqIHJlc291cmNlcyBoZWxkIGluIEluZGV4RmV0Y2hUYWJs ZURhdGEuCisJICogUmVzZXQgaW5kZXggZmV0Y2ggZm9yIGEgcmVzY2FuLiAgUmVsZWFzZXMgY3Jv c3MtZmV0Y2ggcmVzb3VyY2VzIGhlbGQgaW4KKwkgKiBJbmRleEZldGNoVGFibGVEYXRhLgogCSAq LwotCXZvaWQJCSgqaW5kZXhfZmV0Y2hfcmVzZXQpIChzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0 YSAqZGF0YSk7CisJdm9pZAkJKCppbmRleF9mZXRjaF9yZXNldCkgKEluZGV4U2NhbkRlc2Mgc2Nh bik7CiAKIAkvKgogCSAqIFJlbGVhc2UgcmVzb3VyY2VzIGFuZCBkZWFsbG9jYXRlIGluZGV4IGZl dGNoLgogCSAqLwotCXZvaWQJCSgqaW5kZXhfZmV0Y2hfZW5kKSAoc3RydWN0IEluZGV4RmV0Y2hU YWJsZURhdGEgKmRhdGEpOworCXZvaWQJCSgqaW5kZXhfZmV0Y2hfZW5kKSAoSW5kZXhTY2FuRGVz YyBzY2FuKTsKKworCS8qCisJICogRmV0Y2ggdGhlIG5leHQgdHVwbGUgZnJvbSBhbiBpbmRleCBz Y2FuLCBzY2FubmluZyBpbiB0aGUgc3BlY2lmaWVkCisJICogZGlyZWN0aW9uLCBhbmQgcmV0dXJu IHRydWUgaWYgYSB0dXBsZSB3YXMgZm91bmQsIGZhbHNlIG90aGVyd2lzZS4KKwkgKgorCSAqIFR3 byB2YXJpYW50cyBjb3ZlciB7cGxhaW4sIGluZGV4LW9ubHl9IGluZGV4IHNjYW5zIHRoYXQgdXNl IGFtZ2V0dHVwbGUuCisJICogaW5kZXhfYmVnaW5zY2FuIHJlc29sdmVzIHdoaWNoIHZhcmlhbnQg dG8gdXNlLiAgQ2FsbGVycyB1c2UKKwkgKiB0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3QoKSwgd2hp Y2ggY2FsbHMgdGhyb3VnaCB0aGF0IHBvaW50ZXIgZGlyZWN0bHkuCisJICovCisJYm9vbAkJKCpp bmRleF9wbGFpbl9hbWdldHR1cGxlX25leHQpIChJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJ CQkJCQlTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQkJCQkJCQkJCVR1cGxlVGFibGVTbG90 ICpzbG90KTsKKwlib29sCQkoKmluZGV4X29ubHlfYW1nZXR0dXBsZV9uZXh0KSAoSW5kZXhTY2Fu RGVzYyBzY2FuLAorCQkJCQkJCQkJCQkgICBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQkJ CQkJCQkJICAgVHVwbGVUYWJsZVNsb3QgKnNsb3QpOwogCiAJLyoKIAkgKiBGZXRjaCB0dXBsZSBh dCBgdGlkYCBpbnRvIGBzbG90YCwgYWZ0ZXIgZG9pbmcgYSB2aXNpYmlsaXR5IHRlc3QKIAkgKiBh Y2NvcmRpbmcgdG8gYHNuYXBzaG90YC4gSWYgYSB0dXBsZSB3YXMgZm91bmQgYW5kIHBhc3NlZCB0 aGUgdmlzaWJpbGl0eQogCSAqIHRlc3QsIHJldHVybiB0cnVlLCBmYWxzZSBvdGhlcndpc2UuCiAJ ICoKKwkgKiBUaGlzIGlzIGEgbG93ZXItbGV2ZWwgY2FsbGJhY2sgZm9yIHNpbmdsZS1zaG90IFRJ RCBsb29rdXBzIHVzZWQgYnkKKwkgKiBjb25zdHJhaW50IGVuZm9yY2VtZW50IGNvZGUgKHVuaXF1 ZSBjaGVja3MgYW5kIHNpbWlsYXIpLgorCSAqCiAJICogTm90ZSB0aGF0IEFNcyB0aGF0IGRvIG5v dCBuZWNlc3NhcmlseSB1cGRhdGUgaW5kZXhlcyB3aGVuIGluZGV4ZWQKIAkgKiBjb2x1bW5zIGRv IG5vdCBjaGFuZ2UsIG5lZWQgdG8gcmV0dXJuIHRoZSBjdXJyZW50L2NvcnJlY3QgdmVyc2lvbiBv ZgogCSAqIHRoZSB0dXBsZSB0aGF0IGlzIHZpc2libGUgdG8gdGhlIHNuYXBzaG90LCBldmVuIGlm IHRoZSB0aWQgcG9pbnRzIHRvIGFuCiAJICogb2xkZXIgdmVyc2lvbiBvZiB0aGUgdHVwbGUuCiAJ ICoKLQkgKiAqY2FsbF9hZ2FpbiBpcyBmYWxzZSBvbiB0aGUgZmlyc3QgY2FsbCB0byBpbmRleF9m ZXRjaF90dXBsZSBmb3IgYSB0aWQuCi0JICogSWYgdGhlcmUgcG90ZW50aWFsbHkgaXMgYW5vdGhl ciB0dXBsZSBtYXRjaGluZyB0aGUgdGlkLCAqY2FsbF9hZ2FpbgotCSAqIG5lZWRzIHRvIGJlIHNl dCB0byB0cnVlIGJ5IGluZGV4X2ZldGNoX3R1cGxlLCBzaWduYWxpbmcgdG8gdGhlIGNhbGxlcgot CSAqIHRoYXQgaW5kZXhfZmV0Y2hfdHVwbGUgc2hvdWxkIGJlIGNhbGxlZCBhZ2FpbiBmb3IgdGhl IHNhbWUgdGlkLgotCSAqCi0JICogKmFsbF9kZWFkLCBpZiBhbGxfZGVhZCBpcyBub3QgTlVMTCwg c2hvdWxkIGJlIHNldCB0byB0cnVlIGJ5Ci0JICogaW5kZXhfZmV0Y2hfdHVwbGUgaWZmIGl0IGlz IGd1YXJhbnRlZWQgdGhhdCBubyBiYWNrZW5kIG5lZWRzIHRvIHNlZQotCSAqIHRoYXQgdHVwbGUu IEluZGV4IEFNcyBjYW4gdXNlIHRoYXQgdG8gYXZvaWQgcmV0dXJuaW5nIHRoYXQgdGlkIGluCi0J ICogZnV0dXJlIHNlYXJjaGVzLgorCSAqICphbGxfZGVhZCwgaWYgYWxsX2RlYWQgaXMgbm90IE5V TEwsIHNob3VsZCBiZSBzZXQgdG8gdHJ1ZSBieSBmZXRjaF90aWQKKwkgKiBpZmYgaXQgaXMgZ3Vh cmFudGVlZCB0aGF0IG5vIGJhY2tlbmQgbmVlZHMgdG8gc2VlIHRoYXQgdHVwbGUuIEluZGV4IEFN cworCSAqIGNhbiB1c2UgdGhhdCB0byBhdm9pZCByZXR1cm5pbmcgdGhhdCB0aWQgaW4gZnV0dXJl IHNlYXJjaGVzLgogCSAqLwotCWJvb2wJCSgqaW5kZXhfZmV0Y2hfdHVwbGUpIChzdHJ1Y3QgSW5k ZXhGZXRjaFRhYmxlRGF0YSAqc2NhbiwKLQkJCQkJCQkJCSAgSXRlbVBvaW50ZXIgdGlkLAotCQkJ CQkJCQkJICBTbmFwc2hvdCBzbmFwc2hvdCwKLQkJCQkJCQkJCSAgVHVwbGVUYWJsZVNsb3QgKnNs b3QsCi0JCQkJCQkJCQkgIGJvb2wgKmNhbGxfYWdhaW4sIGJvb2wgKmFsbF9kZWFkKTsKKwlib29s CQkoKmZldGNoX3RpZCkgKFJlbGF0aW9uIHJlbCwKKwkJCQkJCQkgIEl0ZW1Qb2ludGVyIHRpZCwK KwkJCQkJCQkgIFNuYXBzaG90IHNuYXBzaG90LAorCQkJCQkJCSAgVHVwbGVUYWJsZVNsb3QgKnNs b3QsCisJCQkJCQkJICBib29sICphbGxfZGVhZCk7CiAKIAogCS8qIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpA QCAtMTIzNSw3ICsxMjQ5LDcgQEAgdGFibGVfcGFyYWxsZWxzY2FuX3JlaW5pdGlhbGl6ZShSZWxh dGlvbiByZWwsIFBhcmFsbGVsVGFibGVTY2FuRGVzYyBwc2NhbikKICAqCiAgKiBmbGFncyBpcyBh IGJpdG1hc2sgb2YgU2Nhbk9wdGlvbnMuIE5vIFNPX0lOVEVSTkFMX0ZMQUdTIGFyZSBwZXJtaXR0 ZWQuCiAgKgotICogVHVwbGVzIGZvciBhbiBpbmRleCBzY2FuIGNhbiB0aGVuIGJlIGZldGNoZWQg dmlhIHRhYmxlX2luZGV4X2ZldGNoX3R1cGxlKCkuCisgKiBUdXBsZXMgZm9yIGFuIGluZGV4IHNj YW4gY2FuIHRoZW4gYmUgZmV0Y2hlZCB2aWEgdGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90KCkuCiAg Ki8KIHN0YXRpYyBpbmxpbmUgSW5kZXhGZXRjaFRhYmxlRGF0YSAqCiB0YWJsZV9pbmRleF9mZXRj aF9iZWdpbihSZWxhdGlvbiByZWwsIHVpbnQzMiBmbGFncykKQEAgLTEyNTUsMzkgKzEyNjksNjMg QEAgdGFibGVfaW5kZXhfZmV0Y2hfYmVnaW4oUmVsYXRpb24gcmVsLCB1aW50MzIgZmxhZ3MpCiAK IC8qCiAgKiBSZXNldCBpbmRleCBmZXRjaC4gVHlwaWNhbGx5IHRoaXMgd2lsbCByZWxlYXNlIGNy b3NzIGluZGV4IGZldGNoIHJlc291cmNlcwotICogaGVsZCBpbiBJbmRleEZldGNoVGFibGVEYXRh LgorICogaGVsZCBpbiB0aGUgc2NhbidzIHVuZGVybHlpbmcgSW5kZXhGZXRjaFRhYmxlRGF0YS4K ICAqLwogc3RhdGljIGlubGluZSB2b2lkCi10YWJsZV9pbmRleF9mZXRjaF9yZXNldChzdHJ1Y3Qg SW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbikKK3RhYmxlX2luZGV4X2ZldGNoX3Jlc2V0KEluZGV4 U2NhbkRlc2Mgc2NhbikKIHsKLQlzY2FuLT5yZWwtPnJkX3RhYmxlYW0tPmluZGV4X2ZldGNoX3Jl c2V0KHNjYW4pOworCUFzc2VydChzY2FuLT54c19oZWFwZmV0Y2gpOworCisJc2Nhbi0+aGVhcFJl bGF0aW9uLT5yZF90YWJsZWFtLT5pbmRleF9mZXRjaF9yZXNldChzY2FuKTsKIH0KIAogLyoKLSAq IFJlbGVhc2UgcmVzb3VyY2VzIGFuZCBkZWFsbG9jYXRlIGluZGV4IGZldGNoLgorICogUmVsZWFz ZSByZXNvdXJjZXMgYW5kIGRlYWxsb2NhdGUgaW5kZXggZmV0Y2ggaGVsZCBpbiB0aGUgc2Nhbidz IHVuZGVybHlpbmcKKyAqIEluZGV4RmV0Y2hUYWJsZURhdGEuCiAgKi8KIHN0YXRpYyBpbmxpbmUg dm9pZAotdGFibGVfaW5kZXhfZmV0Y2hfZW5kKHN0cnVjdCBJbmRleEZldGNoVGFibGVEYXRhICpz Y2FuKQordGFibGVfaW5kZXhfZmV0Y2hfZW5kKEluZGV4U2NhbkRlc2Mgc2NhbikKIHsKLQlzY2Fu LT5yZWwtPnJkX3RhYmxlYW0tPmluZGV4X2ZldGNoX2VuZChzY2FuKTsKKwlBc3NlcnQoc2Nhbi0+ eHNfaGVhcGZldGNoKTsKKworCXNjYW4tPmhlYXBSZWxhdGlvbi0+cmRfdGFibGVhbS0+aW5kZXhf ZmV0Y2hfZW5kKHNjYW4pOwogfQogCiAvKgotICogRmV0Y2hlcywgYXMgcGFydCBvZiBhbiBpbmRl eCBzY2FuLCB0dXBsZSBhdCBgdGlkYCBpbnRvIGBzbG90YCwgYWZ0ZXIgZG9pbmcKLSAqIGEgdmlz aWJpbGl0eSB0ZXN0IGFjY29yZGluZyB0byBgc25hcHNob3RgLiBJZiBhIHR1cGxlIHdhcyBmb3Vu ZCBhbmQgcGFzc2VkCi0gKiB0aGUgdmlzaWJpbGl0eSB0ZXN0LCByZXR1cm5zIHRydWUsIGZhbHNl IG90aGVyd2lzZS4gTm90ZSB0aGF0ICp0aWQgbWF5IGJlCi0gKiBtb2RpZmllZCB3aGVuIHdlIHJl dHVybiB0cnVlIChzZWUgbGF0ZXIgcmVtYXJrcyBvbiBtdWx0aXBsZSByb3cgdmVyc2lvbnMKLSAq IHJlYWNoYWJsZSB2aWEgYSBzaW5nbGUgaW5kZXggZW50cnkpLgorICogRmV0Y2ggdGhlIG5leHQg dHVwbGUgZnJvbSBhbiBpbmRleCBzY2FuIGludG8gYHNsb3RgLCBzY2FubmluZyBpbiB0aGUKKyAq IHNwZWNpZmllZCBkaXJlY3Rpb24uICBSZXR1cm5zIHRydWUgaWYgYSB0dXBsZSBzYXRpc2Z5aW5n IHRoZSBzY2FuIGtleXMgYW5kCisgKiB0aGUgc25hcHNob3Qgd2FzIGZvdW5kLCBmYWxzZSBvdGhl cndpc2UuICBUaGUgdHVwbGUgaXMgc3RvcmVkIGluIHRoZQorICogc3BlY2lmaWVkIHNsb3QuCiAg KgotICogKmNhbGxfYWdhaW4gbmVlZHMgdG8gYmUgZmFsc2Ugb24gdGhlIGZpcnN0IGNhbGwgdG8g dGFibGVfaW5kZXhfZmV0Y2hfdHVwbGUoKSBmb3IKLSAqIGEgdGlkLiBJZiB0aGVyZSBwb3RlbnRp YWxseSBpcyBhbm90aGVyIHR1cGxlIG1hdGNoaW5nIHRoZSB0aWQsICpjYWxsX2FnYWluCi0gKiB3 aWxsIGJlIHNldCB0byB0cnVlLCBzaWduYWxpbmcgdGhhdCB0YWJsZV9pbmRleF9mZXRjaF90dXBs ZSgpIHNob3VsZCBiZSBjYWxsZWQKLSAqIGFnYWluIGZvciB0aGUgc2FtZSB0aWQuCisgKiBEaXNw YXRjaGVzIHRocm91Z2ggc2Nhbi0+eHNfZ2V0bmV4dF9zbG90LCB3aGljaCBpcyByZXNvbHZlZCBv bmNlIGJ5CisgKiBpbmRleF9iZWdpbnNjYW4uCiAgKgotICogKmFsbF9kZWFkLCBpZiBhbGxfZGVh ZCBpcyBub3QgTlVMTCwgd2lsbCBiZSBzZXQgdG8gdHJ1ZSBieQotICogdGFibGVfaW5kZXhfZmV0 Y2hfdHVwbGUoKSBpZmYgaXQgaXMgZ3VhcmFudGVlZCB0aGF0IG5vIGJhY2tlbmQgbmVlZHMgdG8g c2VlCi0gKiB0aGF0IHR1cGxlLiBJbmRleCBBTXMgY2FuIHVzZSB0aGF0IHRvIGF2b2lkIHJldHVy bmluZyB0aGF0IHRpZCBpbiBmdXR1cmUKLSAqIHNlYXJjaGVzLgorICogT24gc3VjY2VzcywgcmVz b3VyY2VzIChsaWtlIGJ1ZmZlciBwaW5zKSBhcmUgbGlrZWx5IHRvIGJlIGhlbGQsIGFuZCB3aWxs IGJlCisgKiByZWxlYXNlZCBieSBhIGZ1dHVyZSB0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Qgb3Ig aW5kZXhfZW5kc2NhbiBjYWxsLgorICoKKyAqIE5vdGU6IGNhbGxlciBtdXN0IGNoZWNrIHNjYW4t PnhzX3JlY2hlY2ssIGFuZCBwZXJmb3JtIHJlY2hlY2tpbmcgb2YgdGhlCisgKiBzY2FuIGtleXMg aWYgcmVxdWlyZWQuICBXZSBkbyBub3QgZG8gdGhhdCBoZXJlIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2 ZQorICogZW5vdWdoIGluZm9ybWF0aW9uIHRvIGRvIGl0IGVmZmljaWVudGx5IGluIHRoZSBnZW5l cmFsIGNhc2UuCisgKgorICogRm9yIGluZGV4LW9ubHkgc2NhbnMsIHRoZSBjYWxsYmFjayBhbHNv IGZpbGxzIHhzX2l0dXAveHNfaXR1cGRlc2Mgb3IKKyAqIHhzX2hpdHVwL3hzX2hpdHVwZGVzYyAo b3IgYm90aCkgc28gdGhhdCBpbmRleCBkYXRhIGNhbiBiZSByZXR1cm5lZCB3aXRob3V0CisgKiBh IGhlYXAgZmV0Y2guCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbAordGFibGVfaW5kZXhfZ2V0bmV4 dF9zbG90KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJ CQkgVHVwbGVUYWJsZVNsb3QgKnNsb3QpCit7CisJQXNzZXJ0KHNjYW4tPnhzX2hlYXBmZXRjaCk7 CisKKwlyZXR1cm4gc2Nhbi0+eHNfZ2V0bmV4dF9zbG90KHNjYW4sIGRpcmVjdGlvbiwgc2xvdCk7 Cit9CisKKy8qCisgKiBGZXRjaCB0dXBsZSBhdCBgdGlkYCBpbnRvIGBzbG90YCwgYWZ0ZXIgZG9p bmcgYSB2aXNpYmlsaXR5IHRlc3QgYWNjb3JkaW5nCisgKiB0byBgc25hcHNob3RgLiBJZiBhIHR1 cGxlIHdhcyBmb3VuZCBhbmQgcGFzc2VkIHRoZSB2aXNpYmlsaXR5IHRlc3QsIHJldHVybnMKKyAq IHRydWUsIGZhbHNlIG90aGVyd2lzZS4gTm90ZSB0aGF0ICp0aWQgbWF5IGJlIG1vZGlmaWVkIHdo ZW4gd2UgcmV0dXJuIHRydWUKKyAqIChzZWUgbGF0ZXIgcmVtYXJrcyBvbiBtdWx0aXBsZSByb3cg dmVyc2lvbnMgcmVhY2hhYmxlIHZpYSBhIHNpbmdsZSBpbmRleAorICogZW50cnkpLgogICoKICAq IFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhpcyBmdW5jdGlvbiBhbmQgdGFibGVfdHVwbGVfZmV0 Y2hfcm93X3ZlcnNpb24oKQogICogaXMgdGhhdCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGN1 cnJlbnRseSB2aXNpYmxlIHZlcnNpb24gb2YgYSByb3cgaWYKQEAgLTEyOTUsMjkgKzEzMzMsMzUg QEAgdGFibGVfaW5kZXhfZmV0Y2hfZW5kKHN0cnVjdCBJbmRleEZldGNoVGFibGVEYXRhICpzY2Fu KQogICogZW50cnkgKGxpa2UgaGVhcCdzIEhPVCkuIFdoZXJlYXMgdGFibGVfdHVwbGVfZmV0Y2hf cm93X3ZlcnNpb24oKSBvbmx5CiAgKiBldmFsdWF0ZXMgdGhlIHR1cGxlIGV4YWN0bHkgYXQgYHRp ZGAuIE91dHNpZGUgb2YgaW5kZXggZW50cnkgLT50YWJsZSB0dXBsZQogICogbG9va3VwcywgdGFi bGVfdHVwbGVfZmV0Y2hfcm93X3ZlcnNpb24oKSBpcyB3aGF0J3MgdXN1YWxseSBuZWVkZWQuCisg KgorICogKmFsbF9kZWFkLCBpZiBhbGxfZGVhZCBpcyBub3QgTlVMTCwgd2lsbCBiZSBzZXQgdG8g dHJ1ZSBieQorICogdGFibGVfZmV0Y2hfdGlkKCkgaWZmIGl0IGlzIGd1YXJhbnRlZWQgdGhhdCBu byBiYWNrZW5kIG5lZWRzIHRvIHNlZSB0aGF0CisgKiB0dXBsZS4gSW5kZXggQU1zIGNhbiB1c2Ug dGhhdCB0byBhdm9pZCByZXR1cm5pbmcgdGhhdCB0aWQgaW4gZnV0dXJlCisgKiBzZWFyY2hlcy4K KyAqCisgKiBUaGlzIGlzIGEgbG93ZXItbGV2ZWwgaW50ZXJmYWNlIGZvciBzaW5nbGUtc2hvdCBU SUQgbG9va3VwcyB1c2VkIGJ5CisgKiBjb25zdHJhaW50IGVuZm9yY2VtZW50IGNvZGUuCiAgKi8K IHN0YXRpYyBpbmxpbmUgYm9vbAotdGFibGVfaW5kZXhfZmV0Y2hfdHVwbGUoc3RydWN0IEluZGV4 RmV0Y2hUYWJsZURhdGEgKnNjYW4sCi0JCQkJCQlJdGVtUG9pbnRlciB0aWQsCi0JCQkJCQlTbmFw c2hvdCBzbmFwc2hvdCwKLQkJCQkJCVR1cGxlVGFibGVTbG90ICpzbG90LAotCQkJCQkJYm9vbCAq Y2FsbF9hZ2FpbiwgYm9vbCAqYWxsX2RlYWQpCit0YWJsZV9mZXRjaF90aWQoUmVsYXRpb24gcmVs LAorCQkJCUl0ZW1Qb2ludGVyIHRpZCwKKwkJCQlTbmFwc2hvdCBzbmFwc2hvdCwKKwkJCQlUdXBs ZVRhYmxlU2xvdCAqc2xvdCwKKwkJCQlib29sICphbGxfZGVhZCkKIHsKLQlyZXR1cm4gc2Nhbi0+ cmVsLT5yZF90YWJsZWFtLT5pbmRleF9mZXRjaF90dXBsZShzY2FuLCB0aWQsIHNuYXBzaG90LAot CQkJCQkJCQkJCQkJCXNsb3QsIGNhbGxfYWdhaW4sCi0JCQkJCQkJCQkJCQkJYWxsX2RlYWQpOwor CXJldHVybiByZWwtPnJkX3RhYmxlYW0tPmZldGNoX3RpZChyZWwsIHRpZCwgc25hcHNob3QsIHNs b3QsIGFsbF9kZWFkKTsKIH0KIAogLyoKLSAqIFRoaXMgaXMgYSBjb252ZW5pZW5jZSB3cmFwcGVy IGFyb3VuZCB0YWJsZV9pbmRleF9mZXRjaF90dXBsZSgpIHdoaWNoCisgKiBUaGlzIGlzIGEgY29u dmVuaWVuY2Ugd3JhcHBlciBhcm91bmQgdGFibGVfZmV0Y2hfdGlkKCkgd2hpY2gKICAqIHJldHVy bnMgd2hldGhlciB0aGVyZSBhcmUgdGFibGUgdHVwbGUgaXRlbXMgY29ycmVzcG9uZGluZyB0byBh biBpbmRleAogICogZW50cnkuICBUaGlzIGxpa2VseSBpcyBvbmx5IHVzZWZ1bCB0byB2ZXJpZnkg aWYgdGhlcmUncyBhIGNvbmZsaWN0IGluIGEKICAqIHVuaXF1ZSBpbmRleC4KICAqLwotZXh0ZXJu IGJvb2wgdGFibGVfaW5kZXhfZmV0Y2hfdHVwbGVfY2hlY2soUmVsYXRpb24gcmVsLAotCQkJCQkJ CQkJCSAgSXRlbVBvaW50ZXIgdGlkLAotCQkJCQkJCQkJCSAgU25hcHNob3Qgc25hcHNob3QsCi0J CQkJCQkJCQkJICBib29sICphbGxfZGVhZCk7CitleHRlcm4gYm9vbCB0YWJsZV9mZXRjaF90aWRf Y2hlY2soUmVsYXRpb24gcmVsLAorCQkJCQkJCQkgIEl0ZW1Qb2ludGVyIHRpZCwKKwkJCQkJCQkJ ICBTbmFwc2hvdCBzbmFwc2hvdCwKKwkJCQkJCQkJICBib29sICphbGxfZGVhZCk7CiAKIAogLyog LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCkBAIC0xMzMxLDggKzEzNzUsOCBAQCBleHRlcm4gYm9vbCB0YWJsZV9p bmRleF9mZXRjaF90dXBsZV9jaGVjayhSZWxhdGlvbiByZWwsCiAgKiBgc25hcHNob3RgLiBJZiBh IHR1cGxlIHdhcyBmb3VuZCBhbmQgcGFzc2VkIHRoZSB2aXNpYmlsaXR5IHRlc3QsIHJldHVybnMK ICAqIHRydWUsIGZhbHNlIG90aGVyd2lzZS4KICAqCi0gKiBTZWUgdGFibGVfaW5kZXhfZmV0Y2hf dHVwbGUncyBjb21tZW50IGFib3V0IHdoYXQgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbgotICogdGhl c2UgZnVuY3Rpb25zIGlzLiBJdCBpcyBjb3JyZWN0IHRvIHVzZSB0aGlzIGZ1bmN0aW9uIG91dHNp ZGUgb2YgaW5kZXgKKyAqIFNlZSB0YWJsZV9mZXRjaF90aWQncyBjb21tZW50IGFib3V0IHdoYXQg dGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGVzZQorICogZnVuY3Rpb25zIGlzLiBJdCBpcyBjb3Jy ZWN0IHRvIHVzZSB0aGlzIGZ1bmN0aW9uIG91dHNpZGUgb2YgaW5kZXgKICAqIGVudHJ5LT50YWJs ZSB0dXBsZSBsb29rdXBzLgogICovCiBzdGF0aWMgaW5saW5lIGJvb2wKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL2V4ZWN1dG9yL2luc3RydW1lbnRfbm9kZS5oIGIvc3JjL2luY2x1ZGUvZXhlY3V0 b3IvaW5zdHJ1bWVudF9ub2RlLmgKaW5kZXggMmEwZmYzNzdhLi5jY2MwN2JjZGEgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2luc3RydW1lbnRfbm9kZS5oCisrKyBiL3NyYy9pbmNs dWRlL2V4ZWN1dG9yL2luc3RydW1lbnRfbm9kZS5oCkBAIC00OCw2ICs0OCwxMSBAQCB0eXBlZGVm IHN0cnVjdCBJbmRleFNjYW5JbnN0cnVtZW50YXRpb24KIHsKIAkvKiBJbmRleCBzZWFyY2ggY291 bnQgKGluY3JlbWVudGVkIHdpdGggcGdzdGF0X2NvdW50X2luZGV4X3NjYW4gY2FsbCkgKi8KIAl1 aW50NjQJCW5zZWFyY2hlczsKKworCS8qCisJICogdGFibGUgYmxvY2tzIGZldGNoZWQgY291bnQg KGluY3JlbWVudGVkIGR1cmluZyBpbmRleC1vbmx5IHNjYW5zKQorCSAqLworCXVpbnQ2NAkJbnRh YmxlZmV0Y2hlczsKIH0gSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uOwogCiAvKgpkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVj bm9kZXMuaAppbmRleCAwOTBjZmNjZjYuLjBiMThlNzRjYSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvbm9kZXMvZXhlY25vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgK QEAgLTE3ODUsNyArMTc4NSw2IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4U2NhblN0YXRlCiAgKgkJ SW5zdHJ1bWVudAkJICAgbG9jYWwgaW5kZXggc2NhbiBpbnN0cnVtZW50YXRpb24KICAqCQlTaGFy ZWRJbmZvCQkgICBwYXJhbGxlbCB3b3JrZXIgaW5zdHJ1bWVudGF0aW9uIChubyBsZWFkZXIgZW50 cnkpCiAgKgkJVGFibGVTbG90CQkgICBzbG90IGZvciBob2xkaW5nIHR1cGxlcyBmZXRjaGVkIGZy b20gdGhlIHRhYmxlCi0gKgkJVk1CdWZmZXIJCSAgIGJ1ZmZlciBpbiB1c2UgZm9yIHZpc2liaWxp dHkgbWFwIHRlc3RpbmcsIGlmIGFueQogICoJCVBzY2FuTGVuCQkgICBzaXplIG9mIHBhcmFsbGVs IGluZGV4LW9ubHkgc2NhbiBkZXNjcmlwdG9yCiAgKgkJTmFtZUNTdHJpbmdBdHROdW1zIGF0dG51 bXMgb2YgbmFtZSB0eXBlZCBjb2x1bW5zIHRvIHBhZCB0byBOQU1FREFUQUxFTgogICoJCU5hbWVD U3RyaW5nQ291bnQgICBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIE5hbWVDU3RyaW5nQXR0TnVt cyBhcnJheQpAQCAtMTgwOCw3ICsxODA3LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhPbmx5U2Nh blN0YXRlCiAJSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uICppb3NzX0luc3RydW1lbnQ7CiAJU2hh cmVkSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uICppb3NzX1NoYXJlZEluZm87CiAJVHVwbGVUYWJs ZVNsb3QgKmlvc3NfVGFibGVTbG90OwotCUJ1ZmZlcgkJaW9zc19WTUJ1ZmZlcjsKIAlTaXplCQlp b3NzX1BzY2FuTGVuOwogCUF0dHJOdW1iZXIgKmlvc3NfTmFtZUNTdHJpbmdBdHROdW1zOwogCWlu dAkJCWlvc3NfTmFtZUNTdHJpbmdDb3VudDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vz cy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1f aGFuZGxlci5jCmluZGV4IDA3ZjA3MTg4ZC4uZjk2YjQyNzA5IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKQEAgLTY1Nyw4ICs2NTcsOCBAQCBoZWFwYW1fcmVsYXRp b25fY29weV9mb3JfY2x1c3RlcihSZWxhdGlvbiBPbGRIZWFwLCBSZWxhdGlvbiBOZXdIZWFwLAog CiAJCXRhYmxlU2NhbiA9IE5VTEw7CiAJCWhlYXBTY2FuID0gTlVMTDsKLQkJaW5kZXhTY2FuID0g aW5kZXhfYmVnaW5zY2FuKE9sZEhlYXAsIE9sZEluZGV4LCBTbmFwc2hvdEFueSwgTlVMTCwgMCwg MCwKLQkJCQkJCQkJCVNPX05PTkUpOworCQlpbmRleFNjYW4gPSBpbmRleF9iZWdpbnNjYW4oT2xk SGVhcCwgT2xkSW5kZXgsIGZhbHNlLCBTbmFwc2hvdEFueSwKKwkJCQkJCQkJCU5VTEwsIDAsIDAs IFNPX05PTkUpOwogCQlpbmRleF9yZXNjYW4oaW5kZXhTY2FuLCBOVUxMLCAwLCBOVUxMLCAwKTsK IAl9CiAJZWxzZQpAQCAtNjk2LDcgKzY5Niw4IEBAIGhlYXBhbV9yZWxhdGlvbl9jb3B5X2Zvcl9j bHVzdGVyKFJlbGF0aW9uIE9sZEhlYXAsIFJlbGF0aW9uIE5ld0hlYXAsCiAKIAkJaWYgKGluZGV4 U2NhbiAhPSBOVUxMKQogCQl7Ci0JCQlpZiAoIWluZGV4X2dldG5leHRfc2xvdChpbmRleFNjYW4s IEZvcndhcmRTY2FuRGlyZWN0aW9uLCBzbG90KSkKKwkJCWlmICghdGFibGVfaW5kZXhfZ2V0bmV4 dF9zbG90KGluZGV4U2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24sCisJCQkJCQkJCQkJICBzbG90 KSkKIAkJCQlicmVhazsKIAogCQkJLyogU2luY2Ugd2UgdXNlZCBubyBzY2FuIGtleXMsIHNob3Vs ZCBuZXZlciBuZWVkIHRvIHJlY2hlY2sgKi8KQEAgLTI1NTYsNyArMjU1Nyw5IEBAIHN0YXRpYyBj b25zdCBUYWJsZUFtUm91dGluZSBoZWFwYW1fbWV0aG9kcyA9IHsKIAkuaW5kZXhfZmV0Y2hfYmVn aW4gPSBoZWFwYW1faW5kZXhfZmV0Y2hfYmVnaW4sCiAJLmluZGV4X2ZldGNoX3Jlc2V0ID0gaGVh cGFtX2luZGV4X2ZldGNoX3Jlc2V0LAogCS5pbmRleF9mZXRjaF9lbmQgPSBoZWFwYW1faW5kZXhf ZmV0Y2hfZW5kLAotCS5pbmRleF9mZXRjaF90dXBsZSA9IGhlYXBhbV9pbmRleF9mZXRjaF90dXBs ZSwKKwkuaW5kZXhfcGxhaW5fYW1nZXR0dXBsZV9uZXh0ID0gaGVhcGFtX2luZGV4X3BsYWluX2Ft Z2V0dHVwbGVfbmV4dCwKKwkuaW5kZXhfb25seV9hbWdldHR1cGxlX25leHQgPSBoZWFwYW1faW5k ZXhfb25seV9hbWdldHR1cGxlX25leHQsCisJLmZldGNoX3RpZCA9IGhlYXBhbV9mZXRjaF90aWQs CiAKIAkudHVwbGVfaW5zZXJ0ID0gaGVhcGFtX3R1cGxlX2luc2VydCwKIAkudHVwbGVfaW5zZXJ0 X3NwZWN1bGF0aXZlID0gaGVhcGFtX3R1cGxlX2luc2VydF9zcGVjdWxhdGl2ZSwKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9pbmRleHNjYW4uYyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9pbmRleHNjYW4uYwppbmRleCBjMzZiODA0ZDEuLjIzNjM1 YjZiYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2luZGV4c2Nh bi5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9pbmRleHNjYW4uYwpAQCAt MTQsMTEgKzE0LDMwIEBACiAgKi8KICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgogCisjaW5jbHVkZSAi YWNjZXNzL2FtYXBpLmgiCiAjaW5jbHVkZSAiYWNjZXNzL2hlYXBhbS5oIgogI2luY2x1ZGUgImFj Y2Vzcy9yZWxzY2FuLmgiCisjaW5jbHVkZSAiYWNjZXNzL3Zpc2liaWxpdHltYXAuaCIKICNpbmNs dWRlICJzdG9yYWdlL3ByZWRpY2F0ZS5oIgorI2luY2x1ZGUgInV0aWxzL3Bnc3RhdF9pbnRlcm5h bC5oIgogCiAKK3N0YXRpYyBwZ19hdHRyaWJ1dGVfYWx3YXlzX2lubGluZSBib29sIGhlYXBhbV9p bmRleF9mZXRjaF90dXBsZV9pbXBsKFJlbGF0aW9uIHJlbCwKKwkJCQkJCQkJCQkJCQkJCQkJIElu ZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4sCisJCQkJCQkJCQkJCQkJCQkJCSBJdGVtUG9pbnRlciB0 aWQsCisJCQkJCQkJCQkJCQkJCQkJCSBTbmFwc2hvdCBzbmFwc2hvdCwKKwkJCQkJCQkJCQkJCQkJ CQkJIFR1cGxlVGFibGVTbG90ICpzbG90LAorCQkJCQkJCQkJCQkJCQkJCQkgYm9vbCAqaGVhcF9j b250aW51ZSwKKwkJCQkJCQkJCQkJCQkJCQkJIGJvb2wgKmFsbF9kZWFkKTsKK3N0YXRpYyBwZ19h dHRyaWJ1dGVfYWx3YXlzX2lubGluZSBib29sIGhlYXBhbV9pbmRleF9nZXRuZXh0X3Nsb3QoSW5k ZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJCQkJCQkJCSBTY2FuRGlyZWN0aW9uIGRpcmVjdGlv biwKKwkJCQkJCQkJCQkJCQkJCQkgVHVwbGVUYWJsZVNsb3QgKnNsb3QsCisJCQkJCQkJCQkJCQkJ CQkJIGJvb2wgaW5kZXhfb25seSk7CitzdGF0aWMgcGdfYXR0cmlidXRlX2Fsd2F5c19pbmxpbmUg Ym9vbCBoZWFwYW1faW5kZXhfZmV0Y2hfaGVhcChJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJ CQkJCQkJCQkgICBJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuLAorCQkJCQkJCQkJCQkJCQkJICAg VHVwbGVUYWJsZVNsb3QgKnNsb3QsCisJCQkJCQkJCQkJCQkJCQkgICBib29sICpoZWFwX2NvbnRp bnVlKTsKKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBJbmRleCBTY2FuIENhbGxiYWNrcyBmb3Ig aGVhcCBBTQogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yOSwxOCArNDgsMjEgQEAgaGVhcGFtX2lu ZGV4X2ZldGNoX2JlZ2luKFJlbGF0aW9uIHJlbCwgdWludDMyIGZsYWdzKQogewogCUluZGV4RmV0 Y2hIZWFwRGF0YSAqaHNjYW4gPSBwYWxsb2MwX29iamVjdChJbmRleEZldGNoSGVhcERhdGEpOwog Ci0JaHNjYW4tPnhzX2Jhc2UucmVsID0gcmVsOwogCWhzY2FuLT54c19iYXNlLmZsYWdzID0gZmxh Z3M7CiAJaHNjYW4tPnhzX2NidWYgPSBJbnZhbGlkQnVmZmVyOwogCWhzY2FuLT54c192bWJ1ZmZl ciA9IEludmFsaWRCdWZmZXI7CiAKKwkvKgorCSAqIFJldHVybiBvcGFxdWUgc3RhdGUsIHdoaWNo IHdlJ2xsIGFjY2VzcyB0aHJvdWdoIHRoZSBzY2FuJ3MgeHNfaGVhcGZldGNoCisJICogZmllbGQg bGF0ZXIgb24KKwkgKi8KIAlyZXR1cm4gJmhzY2FuLT54c19iYXNlOwogfQogCiB2b2lkCi1oZWFw YW1faW5kZXhfZmV0Y2hfcmVzZXQoSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbikKK2hlYXBhbV9p bmRleF9mZXRjaF9yZXNldChJbmRleFNjYW5EZXNjIHNjYW4pCiB7Ci0JSW5kZXhGZXRjaEhlYXBE YXRhICpoc2NhbiA9IChJbmRleEZldGNoSGVhcERhdGEgKikgc2NhbjsKKwlJbmRleEZldGNoSGVh cERhdGEgKmhzY2FuID0gKEluZGV4RmV0Y2hIZWFwRGF0YSAqKSBzY2FuLT54c19oZWFwZmV0Y2g7 CiAKIAlpZiAoQnVmZmVySXNWYWxpZChoc2Nhbi0+eHNfY2J1ZikpCiAJewpAQCAtNTYsOSArNzgs OSBAQCBoZWFwYW1faW5kZXhfZmV0Y2hfcmVzZXQoSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbikK IH0KIAogdm9pZAotaGVhcGFtX2luZGV4X2ZldGNoX2VuZChJbmRleEZldGNoVGFibGVEYXRhICpz Y2FuKQoraGVhcGFtX2luZGV4X2ZldGNoX2VuZChJbmRleFNjYW5EZXNjIHNjYW4pCiB7Ci0JSW5k ZXhGZXRjaEhlYXBEYXRhICpoc2NhbiA9IChJbmRleEZldGNoSGVhcERhdGEgKikgc2NhbjsKKwlJ bmRleEZldGNoSGVhcERhdGEgKmhzY2FuID0gKEluZGV4RmV0Y2hIZWFwRGF0YSAqKSBzY2FuLT54 c19oZWFwZmV0Y2g7CiAKIAloZWFwYW1faW5kZXhfZmV0Y2hfcmVzZXQoc2Nhbik7CiAKQEAgLTIy NywxNCArMjQ5LDc2IEBAIGhlYXBfaG90X3NlYXJjaF9idWZmZXIoSXRlbVBvaW50ZXIgdGlkLCBS ZWxhdGlvbiByZWxhdGlvbiwgQnVmZmVyIGJ1ZmZlciwKIAlyZXR1cm4gZmFsc2U7CiB9CiAKLWJv b2wKLWhlYXBhbV9pbmRleF9mZXRjaF90dXBsZShzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAq c2NhbiwKLQkJCQkJCSBJdGVtUG9pbnRlciB0aWQsCi0JCQkJCQkgU25hcHNob3Qgc25hcHNob3Qs Ci0JCQkJCQkgVHVwbGVUYWJsZVNsb3QgKnNsb3QsCi0JCQkJCQkgYm9vbCAqaGVhcF9jb250aW51 ZSwgYm9vbCAqYWxsX2RlYWQpCisvKiB0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3QgY2FsbGJhY2s6 IGFtZ2V0dHVwbGUsIHBsYWluIGluZGV4IHNjYW4gKi8KK3BnX2F0dHJpYnV0ZV9ob3QgYm9vbAor aGVhcGFtX2luZGV4X3BsYWluX2FtZ2V0dHVwbGVfbmV4dChJbmRleFNjYW5EZXNjIHNjYW4sCisJ CQkJCQkJCSAgIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJCQkgICBUdXBsZVRhYmxl U2xvdCAqc2xvdCkKK3sKKwlBc3NlcnQoIXNjYW4tPnhzX3dhbnRfaXR1cCk7CisJQXNzZXJ0KHNj YW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbWdldHR1cGxlICE9IE5VTEwpOworCisJcmV0 dXJuIGhlYXBhbV9pbmRleF9nZXRuZXh0X3Nsb3Qoc2NhbiwgZGlyZWN0aW9uLCBzbG90LCBmYWxz ZSk7Cit9CisKKy8qIHRhYmxlX2luZGV4X2dldG5leHRfc2xvdCBjYWxsYmFjazogYW1nZXR0dXBs ZSwgaW5kZXgtb25seSBzY2FuICovCitwZ19hdHRyaWJ1dGVfaG90IGJvb2wKK2hlYXBhbV9pbmRl eF9vbmx5X2FtZ2V0dHVwbGVfbmV4dChJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCSAgU2Nh bkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJCQkJCSAgVHVwbGVUYWJsZVNsb3QgKnNsb3QpCit7 CisJQXNzZXJ0KHNjYW4tPnhzX3dhbnRfaXR1cCk7CisJQXNzZXJ0KHNjYW4tPmluZGV4UmVsYXRp b24tPnJkX2luZGFtLT5hbWdldHR1cGxlICE9IE5VTEwpOworCisJcmV0dXJuIGhlYXBhbV9pbmRl eF9nZXRuZXh0X3Nsb3Qoc2NhbiwgZGlyZWN0aW9uLCBzbG90LCB0cnVlKTsKK30KKworLyoKKyAq IFNpbXBsZSwgc2luZ2xlLXNob3QgVElEIGxvb2t1cCBmb3IgY29uc3RyYWludCBlbmZvcmNlbWVu dCBjb2RlICh1bmlxdWUKKyAqIGNoZWNrcyBhbmQgc2ltaWxhcikuICBUaGlzIGlzIGVzc2VudGlh bGx5IGp1c3QgYSBoZWFwX2hvdF9zZWFyY2hfYnVmZmVyCisgKiB3cmFwcGVyLgorICoKKyAqIFRo aXMgZG9lc24ndCBhY3R1YWxseSBwZXJmb3JtIGluZGV4IHNjYW5zLiAgQnV0IHRoaXMgaXMganVz dCBhcyBnb29kIGEKKyAqIHBsYWNlIGZvciBpdCBhcyBhbnkgb3RoZXIuCisgKi8KK2Jvb2wKK2hl YXBhbV9mZXRjaF90aWQoUmVsYXRpb24gcmVsLCBJdGVtUG9pbnRlciB0aWQsIFNuYXBzaG90IHNu YXBzaG90LAorCQkJCSBUdXBsZVRhYmxlU2xvdCAqc2xvdCwgYm9vbCAqYWxsX2RlYWQpCit7CisJ QnVmZmVySGVhcFR1cGxlVGFibGVTbG90ICpic2xvdCA9IChCdWZmZXJIZWFwVHVwbGVUYWJsZVNs b3QgKikgc2xvdDsKKwlCdWZmZXIJCWJ1ZjsKKwlib29sCQlmb3VuZDsKKworCUFzc2VydChUVFNf SVNfQlVGRkVSVFVQTEUoc2xvdCkpOworCisJYnVmID0gUmVhZEJ1ZmZlcihyZWwsIEl0ZW1Qb2lu dGVyR2V0QmxvY2tOdW1iZXIodGlkKSk7CisKKwlMb2NrQnVmZmVyKGJ1ZiwgQlVGRkVSX0xPQ0tf U0hBUkUpOworCWZvdW5kID0gaGVhcF9ob3Rfc2VhcmNoX2J1ZmZlcih0aWQsIHJlbCwgYnVmLCBz bmFwc2hvdCwKKwkJCQkJCQkJICAgJmJzbG90LT5iYXNlLnR1cGRhdGEsIGFsbF9kZWFkLCB0cnVl KTsKKwlic2xvdC0+YmFzZS50dXBkYXRhLnRfc2VsZiA9ICp0aWQ7CisJTG9ja0J1ZmZlcihidWYs IEJVRkZFUl9MT0NLX1VOTE9DSyk7CisKKwlpZiAoZm91bmQpCisJeworCQlzbG90LT50dHNfdGFi bGVPaWQgPSBSZWxhdGlvbkdldFJlbGlkKHJlbCk7CisJCUV4ZWNTdG9yZVBpbm5lZEJ1ZmZlckhl YXBUdXBsZSgmYnNsb3QtPmJhc2UudHVwZGF0YSwgc2xvdCwKKwkJCQkJCQkJCSAgIGJ1Zik7CisJ fQorCWVsc2UKKwkJUmVsZWFzZUJ1ZmZlcihidWYpOworCisJcmV0dXJuIGZvdW5kOworfQorCitz dGF0aWMgcGdfYXR0cmlidXRlX2Fsd2F5c19pbmxpbmUgYm9vbAoraGVhcGFtX2luZGV4X2ZldGNo X3R1cGxlX2ltcGwoUmVsYXRpb24gcmVsLAorCQkJCQkJCSAgSW5kZXhGZXRjaEhlYXBEYXRhICpo c2NhbiwKKwkJCQkJCQkgIEl0ZW1Qb2ludGVyIHRpZCwKKwkJCQkJCQkgIFNuYXBzaG90IHNuYXBz aG90LAorCQkJCQkJCSAgVHVwbGVUYWJsZVNsb3QgKnNsb3QsCisJCQkJCQkJICBib29sICpoZWFw X2NvbnRpbnVlLCBib29sICphbGxfZGVhZCkKIHsKLQlJbmRleEZldGNoSGVhcERhdGEgKmhzY2Fu ID0gKEluZGV4RmV0Y2hIZWFwRGF0YSAqKSBzY2FuOwogCUJ1ZmZlckhlYXBUdXBsZVRhYmxlU2xv dCAqYnNsb3QgPSAoQnVmZmVySGVhcFR1cGxlVGFibGVTbG90ICopIHNsb3Q7CiAJYm9vbAkJZ290 X2hlYXBfdHVwbGU7CiAKQEAgLTI0NiwyMyArMzMwLDIxIEBAIGhlYXBhbV9pbmRleF9mZXRjaF90 dXBsZShzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbiwKIAkJLyogU3dpdGNoIHRvIGNv cnJlY3QgYnVmZmVyIGlmIHdlIGRvbid0IGhhdmUgaXQgYWxyZWFkeSAqLwogCQlCdWZmZXIJCXBy ZXZfYnVmID0gaHNjYW4tPnhzX2NidWY7CiAKLQkJaHNjYW4tPnhzX2NidWYgPSBSZWxlYXNlQW5k UmVhZEJ1ZmZlcihoc2Nhbi0+eHNfY2J1ZiwKLQkJCQkJCQkJCQkJICBoc2Nhbi0+eHNfYmFzZS5y ZWwsCisJCWhzY2FuLT54c19jYnVmID0gUmVsZWFzZUFuZFJlYWRCdWZmZXIoaHNjYW4tPnhzX2Ni dWYsIHJlbCwKIAkJCQkJCQkJCQkJICBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCkpOwog CiAJCS8qCiAJCSAqIFBydW5lIHBhZ2UsIGJ1dCBvbmx5IGlmIHdlIHdlcmVuJ3QgYWxyZWFkeSBv biB0aGlzIHBhZ2UKIAkJICovCiAJCWlmIChwcmV2X2J1ZiAhPSBoc2Nhbi0+eHNfY2J1ZikKLQkJ CWhlYXBfcGFnZV9wcnVuZV9vcHQoaHNjYW4tPnhzX2Jhc2UucmVsLCBoc2Nhbi0+eHNfY2J1ZiwK LQkJCQkJCQkJJmhzY2FuLT54c192bWJ1ZmZlciwKKwkJCWhlYXBfcGFnZV9wcnVuZV9vcHQocmVs LCBoc2Nhbi0+eHNfY2J1ZiwgJmhzY2FuLT54c192bWJ1ZmZlciwKIAkJCQkJCQkJaHNjYW4tPnhz X2Jhc2UuZmxhZ3MgJiBTT19ISU5UX1JFTF9SRUFEX09OTFkpOwogCX0KIAogCS8qIE9idGFpbiBz aGFyZS1sb2NrIG9uIHRoZSBidWZmZXIgc28gd2UgY2FuIGV4YW1pbmUgdmlzaWJpbGl0eSAqLwog CUxvY2tCdWZmZXIoaHNjYW4tPnhzX2NidWYsIEJVRkZFUl9MT0NLX1NIQVJFKTsKIAlnb3RfaGVh cF90dXBsZSA9IGhlYXBfaG90X3NlYXJjaF9idWZmZXIodGlkLAotCQkJCQkJCQkJCQloc2Nhbi0+ eHNfYmFzZS5yZWwsCisJCQkJCQkJCQkJCXJlbCwKIAkJCQkJCQkJCQkJaHNjYW4tPnhzX2NidWYs CiAJCQkJCQkJCQkJCXNuYXBzaG90LAogCQkJCQkJCQkJCQkmYnNsb3QtPmJhc2UudHVwZGF0YSwK QEAgLTI3OSw3ICszNjEsNyBAQCBoZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGUoc3RydWN0IEluZGV4 RmV0Y2hUYWJsZURhdGEgKnNjYW4sCiAJCSAqLwogCQkqaGVhcF9jb250aW51ZSA9ICFJc01WQ0NM aWtlU25hcHNob3Qoc25hcHNob3QpOwogCi0JCXNsb3QtPnR0c190YWJsZU9pZCA9IFJlbGF0aW9u R2V0UmVsaWQoc2Nhbi0+cmVsKTsKKwkJc2xvdC0+dHRzX3RhYmxlT2lkID0gUmVsYXRpb25HZXRS ZWxpZChyZWwpOwogCQlFeGVjU3RvcmVCdWZmZXJIZWFwVHVwbGUoJmJzbG90LT5iYXNlLnR1cGRh dGEsIHNsb3QsIGhzY2FuLT54c19jYnVmKTsKIAl9CiAJZWxzZQpAQCAtMjkwLDMgKzM3MiwxNzEg QEAgaGVhcGFtX2luZGV4X2ZldGNoX3R1cGxlKHN0cnVjdCBJbmRleEZldGNoVGFibGVEYXRhICpz Y2FuLAogCiAJcmV0dXJuIGdvdF9oZWFwX3R1cGxlOwogfQorCisvKgorICogQ29tbW9uIGltcGxl bWVudGF0aW9uIGZvciBib3RoIGhlYXBhbV9pbmRleF8qX2dldG5leHRfc2xvdCB2YXJpYW50cy4K KyAqCisgKiBUaGUgcmVzdWx0IGlzIHRydWUgaWYgYSB0dXBsZSBzYXRpc2Z5aW5nIHRoZSBzY2Fu IGtleXMgYW5kIHRoZSBzbmFwc2hvdCB3YXMKKyAqIGZvdW5kLCBmYWxzZSBvdGhlcndpc2UuICBU aGUgdHVwbGUgaXMgc3RvcmVkIGluIHRoZSBzcGVjaWZpZWQgc2xvdC4KKyAqCisgKiBPbiBzdWNj ZXNzLCByZXNvdXJjZXMgKGxpa2UgYnVmZmVyIHBpbnMpIGFyZSBsaWtlbHkgdG8gYmUgaGVsZCwg YW5kIHdpbGwgYmUKKyAqIGRyb3BwZWQgYnkgYSBmdXR1cmUgY2FsbCBoZXJlIChvciBieSBhIGxh dGVyIGNhbGwgdG8gaGVhcGFtX2luZGV4X2ZldGNoX2VuZAorICogdGhyb3VnaCBpbmRleF9lbmRz Y2FuKS4KKyAqCisgKiBUaGUgaW5kZXhfb25seSBwYXJhbWV0ZXIgaXMgYSBjb21waWxlLXRpbWUg Y29uc3RhbnQgYXQgZWFjaCBjYWxsIHNpdGUsCisgKiBhbGxvd2luZyB0aGUgY29tcGlsZXIgdG8g c3BlY2lhbGl6ZSB0aGUgY29kZSBmb3IgZWFjaCB2YXJpYW50LgorICovCitzdGF0aWMgcGdfYXR0 cmlidXRlX2Fsd2F5c19pbmxpbmUgYm9vbAoraGVhcGFtX2luZGV4X2dldG5leHRfc2xvdChJbmRl eFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJICBUdXBsZVRh YmxlU2xvdCAqc2xvdCwgYm9vbCBpbmRleF9vbmx5KQoreworCUluZGV4RmV0Y2hIZWFwRGF0YSAq aHNjYW4gPSAoSW5kZXhGZXRjaEhlYXBEYXRhICopIHNjYW4tPnhzX2hlYXBmZXRjaDsKKwlib29s CSAgICpoZWFwX2NvbnRpbnVlID0gJnNjYW4tPnhzX2hlYXBfY29udGludWU7CisJYm9vbAkJYWxs X3Zpc2libGUgPSBmYWxzZTsKKwlCbG9ja051bWJlciBsYXN0X3Zpc2l0ZWRfYmxvY2sgPSBJbnZh bGlkQmxvY2tOdW1iZXI7CisJdWludDgJCW5fdmlzaXRlZF9wYWdlcyA9IDA7CisJSXRlbVBvaW50 ZXIgdGlkID0gTlVMTDsKKworCWZvciAoOzspCisJeworCQlpZiAoISpoZWFwX2NvbnRpbnVlKQor CQl7CisJCQkvKiBHZXQgdGhlIG5leHQgVElEIGZyb20gdGhlIGluZGV4ICovCisJCQl0aWQgPSBp bmRleF9nZXRuZXh0X3RpZChzY2FuLCBkaXJlY3Rpb24pOworCisJCQkvKiBJZiB3ZSdyZSBvdXQg b2YgaW5kZXggZW50cmllcywgd2UncmUgZG9uZSAqLworCQkJaWYgKHRpZCA9PSBOVUxMKQorCQkJ CWJyZWFrOworCisJCQkvKiBGb3IgaW5kZXgtb25seSBzY2FucywgY2hlY2sgdGhlIHZpc2liaWxp dHkgbWFwICovCisJCQlpZiAoaW5kZXhfb25seSkKKwkJCQlhbGxfdmlzaWJsZSA9IFZNX0FMTF9W SVNJQkxFKHNjYW4tPmhlYXBSZWxhdGlvbiwKKwkJCQkJCQkJCQkJIEl0ZW1Qb2ludGVyR2V0Qmxv Y2tOdW1iZXIodGlkKSwKKwkJCQkJCQkJCQkJICZoc2Nhbi0+eHNfdm1idWZmZXIpOworCQl9CisK KwkJQXNzZXJ0KEl0ZW1Qb2ludGVySXNWYWxpZCgmc2Nhbi0+eHNfaGVhcHRpZCkpOworCisJCWlm IChpbmRleF9vbmx5KQorCQl7CisJCQkvKgorCQkJICogV2UgY2FuIHNraXAgdGhlIGhlYXAgZmV0 Y2ggaWYgdGhlIFRJRCByZWZlcmVuY2VzIGEgaGVhcCBwYWdlIG9uCisJCQkgKiB3aGljaCBhbGwg dHVwbGVzIGFyZSBrbm93biB2aXNpYmxlIHRvIGV2ZXJ5Ym9keS4gIEluIGFueSBjYXNlLAorCQkJ ICogd2UnbGwgdXNlIHRoZSBpbmRleCB0dXBsZSBub3QgdGhlIGhlYXAgdHVwbGUgYXMgdGhlIGRh dGEKKwkJCSAqIHNvdXJjZS4KKwkJCSAqLworCQkJaWYgKCFhbGxfdmlzaWJsZSkKKwkJCXsKKwkJ CQkvKgorCQkJCSAqIFJhdHMsIHdlIGhhdmUgdG8gdmlzaXQgdGhlIGhlYXAgdG8gY2hlY2sgdmlz aWJpbGl0eS4KKwkJCQkgKi8KKwkJCQlpZiAoc2Nhbi0+aW5zdHJ1bWVudCkKKwkJCQkJc2Nhbi0+ aW5zdHJ1bWVudC0+bnRhYmxlZmV0Y2hlcysrOworCisJCQkJaWYgKCFoZWFwYW1faW5kZXhfZmV0 Y2hfaGVhcChzY2FuLCBoc2Nhbiwgc2xvdCwKKwkJCQkJCQkJCQkJIGhlYXBfY29udGludWUpKQor CQkJCXsKKwkJCQkJLyoKKwkJCQkJICogTm8gdmlzaWJsZSB0dXBsZS4gIElmIGNhbGxlciBzZXQg YSB2aXNpdGVkLXBhZ2VzIGxpbWl0CisJCQkJCSAqIChvbmx5IHNlbGZ1bmNzLmMgZG9lcyB0aGlz KSwgY291bnQgZGlzdGluY3QgaGVhcCBwYWdlcworCQkJCQkgKiBhbmQgZ2l2ZSB1cCBvbmNlIHdl J3ZlIHZpc2l0ZWQgdG9vIG1hbnkuCisJCQkJCSAqLworCQkJCQlpZiAodW5saWtlbHkoc2Nhbi0+ eHNfdmlzaXRlZF9wYWdlc19saW1pdCA+IDApKQorCQkJCQl7CisJCQkJCQlCbG9ja051bWJlciBi bGsgPSBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCk7CisKKwkJCQkJCWlmIChibGsgIT0g bGFzdF92aXNpdGVkX2Jsb2NrKQorCQkJCQkJeworCQkJCQkJCWxhc3RfdmlzaXRlZF9ibG9jayA9 IGJsazsKKwkJCQkJCQlpZiAoKytuX3Zpc2l0ZWRfcGFnZXMgPiBzY2FuLT54c192aXNpdGVkX3Bh Z2VzX2xpbWl0KQorCQkJCQkJCQlyZXR1cm4gZmFsc2U7CS8qIGdpdmUgdXAgKi8KKwkJCQkJCX0K KwkJCQkJfQorCQkJCQljb250aW51ZTsJLyogbm8gdmlzaWJsZSB0dXBsZSwgdHJ5IG5leHQgaW5k ZXggZW50cnkgKi8KKwkJCQl9CisKKwkJCQkvKiBXZSBkb24ndCBhY3R1YWxseSBuZWVkIHRoZSBo ZWFwIHR1cGxlIGZvciBhbnl0aGluZyAqLworCQkJCUV4ZWNDbGVhclR1cGxlKHNsb3QpOworCisJ CQkJLyoKKwkJCQkgKiBPbmx5IE1WQ0Mgc25hcHNob3RzIGFyZSBzdXBwb3J0ZWQgd2l0aCBzdGFu ZGFyZCBpbmRleC1vbmx5CisJCQkJICogc2NhbnMsIHNvIHRoZXJlIHNob3VsZCBiZSBubyBuZWVk IHRvIGtlZXAgZm9sbG93aW5nIHRoZSBIT1QKKwkJCQkgKiBjaGFpbiBvbmNlIGEgdmlzaWJsZSBl bnRyeSBoYXMgYmVlbiBmb3VuZC4gIE90aGVyIGNhbGxlcnMKKwkJCQkgKiAoY3VycmVudGx5IG9u bHkgc2VsZnVuY3MuYykgdXNlIFNuYXBzaG90Tm9uVmFjdXVtYWJsZSwgYW5kCisJCQkJICogd2Fu dCB1cyB0byBhc3N1bWUgdGhhdCBqdXN0IGhhdmluZyBvbmUgdmlzaWJsZSB0dXBsZSBpbiB0aGUK KwkJCQkgKiBob3QgY2hhaW4gaXMgYWx3YXlzIGdvb2QgZW5vdWdoLgorCQkJCSAqLworCQkJCUFz c2VydCghKCpoZWFwX2NvbnRpbnVlICYmIElzTVZDQ1NuYXBzaG90KHNjYW4tPnhzX3NuYXBzaG90 KSkpOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCS8qCisJCQkJICogV2UgZGlkbid0IGFjY2Vz cyB0aGUgaGVhcCwgc28gd2UnbGwgbmVlZCB0byB0YWtlIGEKKwkJCQkgKiBwcmVkaWNhdGUgbG9j ayBleHBsaWNpdGx5LCBhcyBpZiB3ZSBoYWQuICBGb3Igbm93IHdlIGRvCisJCQkJICogdGhhdCBh dCBwYWdlIGxldmVsLgorCQkJCSAqLworCQkJCVByZWRpY2F0ZUxvY2tQYWdlKHNjYW4tPmhlYXBS ZWxhdGlvbiwKKwkJCQkJCQkJICBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCksCisJCQkJ CQkJCSAgc2Nhbi0+eHNfc25hcHNob3QpOworCQkJfQorCisJCQkvKgorCQkJICogUmV0dXJuIG1h dGNoaW5nIGluZGV4IHR1cGxlIG5vdyBzZXQgaW4gc2Nhbi0+eHNfaXR1cCAob3IgcmV0dXJuCisJ CQkgKiBtYXRjaGluZyBoZWFwIHR1cGxlIG5vdyBzZXQgaW4gc2Nhbi0+eHNfaGl0dXApCisJCQkg Ki8KKwkJCXJldHVybiB0cnVlOworCQl9CisJCWVsc2UKKwkJeworCQkJLyoKKwkJCSAqIEZldGNo IHRoZSBuZXh0IChvciBvbmx5KSB2aXNpYmxlIGhlYXAgdHVwbGUgZm9yIHRoaXMgaW5kZXgKKwkJ CSAqIGVudHJ5LiAgSWYgd2UgZG9uJ3QgZmluZCBhbnl0aGluZywgbG9vcCBhcm91bmQgYW5kIGdy YWIgdGhlCisJCQkgKiBuZXh0IFRJRCBmcm9tIHRoZSBpbmRleC4KKwkJCSAqLworCQkJaWYgKGhl YXBhbV9pbmRleF9mZXRjaF9oZWFwKHNjYW4sIGhzY2FuLCBzbG90LCBoZWFwX2NvbnRpbnVlKSkK KwkJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCX0KKworCXJldHVybiBmYWxzZTsKK30KKworLyoKKyAq IEdldCB0aGUgc2NhbidzIG5leHQgaGVhcCB0dXBsZS4KKyAqCisgKiBUaGUgcmVzdWx0IGlzIGEg dmlzaWJsZSBoZWFwIHR1cGxlIGFzc29jaWF0ZWQgd2l0aCB0aGUgaW5kZXggVElEIG1vc3QKKyAq IHJlY2VudGx5IGZldGNoZWQgYnkgb3VyIGNhbGxlciBpbiBzY2FuLT54c19oZWFwdGlkLCBvciBO VUxMIGlmIG5vIG1vcmUKKyAqIG1hdGNoaW5nIHR1cGxlcyBleGlzdC4gIChUaGVyZSBjYW4gYmUg bW9yZSB0aGFuIG9uZSBtYXRjaGluZyB0dXBsZSBiZWNhdXNlCisgKiBvZiBIT1QgY2hhaW5zLCBh bHRob3VnaCB3aGVuIHVzaW5nIGFuIE1WQ0Mgc25hcHNob3QgaXQgc2hvdWxkIGJlIGltcG9zc2li bGUKKyAqIGZvciBtb3JlIHRoYW4gb25lIHN1Y2ggdHVwbGUgdG8gZXhpc3QuKQorICoKKyAqIE9u IHN1Y2Nlc3MsIHRoZSBidWZmZXIgY29udGFpbmluZyB0aGUgaGVhcCB0dXAgaXMgcGlubmVkLiAg VGhlIHBpbiBtdXN0IGJlCisgKiBkcm9wcGVkIGVsc2V3aGVyZS4KKyAqLworc3RhdGljIHBnX2F0 dHJpYnV0ZV9hbHdheXNfaW5saW5lIGJvb2wKK2hlYXBhbV9pbmRleF9mZXRjaF9oZWFwKEluZGV4 U2NhbkRlc2Mgc2NhbiwgSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiwKKwkJCQkJCVR1cGxlVGFi bGVTbG90ICpzbG90LCBib29sICpoZWFwX2NvbnRpbnVlKQoreworCWJvb2wJCWFsbF9kZWFkID0g ZmFsc2U7CisJYm9vbAkJZm91bmQ7CisKKwlmb3VuZCA9IGhlYXBhbV9pbmRleF9mZXRjaF90dXBs ZV9pbXBsKHNjYW4tPmhlYXBSZWxhdGlvbiwgaHNjYW4sCisJCQkJCQkJCQkJICAmc2Nhbi0+eHNf aGVhcHRpZCwKKwkJCQkJCQkJCQkgIHNjYW4tPnhzX3NuYXBzaG90LCBzbG90LAorCQkJCQkJCQkJ CSAgaGVhcF9jb250aW51ZSwgJmFsbF9kZWFkKTsKKworCWlmIChmb3VuZCkKKwkJcGdzdGF0X2Nv dW50X2hlYXBfZmV0Y2goc2Nhbi0+aW5kZXhSZWxhdGlvbik7CisKKwkvKgorCSAqIElmIHdlIHNj YW5uZWQgYSB3aG9sZSBIT1QgY2hhaW4gYW5kIGZvdW5kIG9ubHkgZGVhZCB0dXBsZXMsIHRlbGwg aW5kZXgKKwkgKiBBTSB0byBraWxsIGl0cyBlbnRyeSBmb3IgdGhhdCBUSUQgKHRoaXMgd2lsbCB0 YWtlIGVmZmVjdCBpbiB0aGUgbmV4dAorCSAqIGFtZ2V0dHVwbGUgY2FsbCwgaW4gaW5kZXhfZ2V0 bmV4dF90aWQpLiAgV2UgZG8gbm90IGRvIHRoaXMgd2hlbiBpbgorCSAqIHJlY292ZXJ5IGJlY2F1 c2UgaXQgbWF5IHZpb2xhdGUgTVZDQyB0byBkbyBzby4gIFNlZSBjb21tZW50cyBpbgorCSAqIFJl bGF0aW9uR2V0SW5kZXhTY2FuKCkuCisJICovCisJaWYgKCFzY2FuLT54YWN0U3RhcnRlZEluUmVj b3ZlcnkpCisJCXNjYW4tPmtpbGxfcHJpb3JfdHVwbGUgPSBhbGxfZGVhZDsKKworCXJldHVybiBm b3VuZDsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3Zpc2liaWxpdHlt YXAuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3Zpc2liaWxpdHltYXAuYwppbmRleCA0ZmQ0 NzA3MDIuLjRiYTlmNDhlOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvdmlz aWJpbGl0eW1hcC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3Zpc2liaWxpdHltYXAu YwpAQCAtMzEzLDcgKzMxMywzMiBAQCB2aXNpYmlsaXR5bWFwX3NldChCbG9ja051bWJlciBoZWFw QmxrLAogICogc2luY2Ugd2UgZG9uJ3QgbG9jayB0aGUgdmlzaWJpbGl0eSBtYXAgcGFnZSBlaXRo ZXIsIGl0J3MgZXZlbiBwb3NzaWJsZSB0aGF0CiAgKiBzb21lb25lIGVsc2UgY291bGQgaGF2ZSBj aGFuZ2VkIHRoZSBiaXQganVzdCBiZWZvcmUgd2UgbG9vayBhdCBpdCwgYnV0IHlldAogICogd2Ug bWlnaHQgc2VlIHRoZSBvbGQgdmFsdWUuICBJdCBpcyB0aGUgY2FsbGVyJ3MgcmVzcG9uc2liaWxp dHkgdG8gZGVhbCB3aXRoCi0gKiBhbGwgY29uY3VycmVuY3kgaXNzdWVzIQorICogYWxsIGNvbmN1 cnJlbmN5IGlzc3VlcyEgIEluIHByYWN0aWNlIGl0IGNhbid0IGJlIHN0YWxlIGVub3VnaCB0byBt YXR0ZXIgZm9yCisgKiB0aGUgcHJpbWFyeSB1c2UgY2FzZTogaW5kZXgtb25seSBzY2FucyB0aGF0 IGNoZWNrIHdoZXRoZXIgYSBoZWFwIGZldGNoIGNhbgorICogYmUgc2tpcHBlZC4KKyAqCisgKiBU aGUgYXJndW1lbnQgZm9yIHdoeSBpdCBjYW4ndCBiZSBzdGFsZSBlbm91Z2ggdG8gbWF0dGVyIGZv ciB0aGUgcHJpbWFyeSB1c2UKKyAqIGNhc2UgaXMgYXMgZm9sbG93czoKKyAqCisgKiBJbnNlcnRz OiB3ZSBuZWVkIHRvIGRldGVjdCB0aGF0IGEgVk0gYml0IHdhcyBjbGVhcmVkIGJ5IGFuIGluc2Vy dCByaWdodAorICogYXdheSwgYmVjYXVzZSB0aGUgbmV3IHR1cGxlIGlzIHByZXNlbnQgaW4gdGhl IGluZGV4IGJ1dCBub3QgeWV0IHZpc2libGUuCisgKiBSZWFkaW5nIHRoZSBUSUQgZnJvbSB0aGUg aW5kZXggcGFnZSAodW5kZXIgYSBzaGFyZWQgbG9jayBvbiB0aGUgaW5kZXgKKyAqIGJ1ZmZlcikg aXMgc2VyaWFsaXplZCB3aXRoIHRoZSBpbnNlcnRpb24gb2YgdGhlIFRJRCBpbnRvIHRoZSBpbmRl eCAodW5kZXIKKyAqIGFuIGV4Y2x1c2l2ZSBsb2NrIG9uIHRoZSBzYW1lIGluZGV4IGJ1ZmZlciku ICBCZWNhdXNlIHRoZSBWTSBiaXQgaXMgY2xlYXJlZAorICogYmVmb3JlIHRoZSBpbmRleCBpcyB1 cGRhdGVkLCBhbmQgbG9ja2luZy91bmxvY2tpbmcgb2YgdGhlIGluZGV4IHBhZ2UgYWN0cworICog YXMgYSBmdWxsIG1lbW9yeSBiYXJyaWVyLCB3ZSBhcmUgc3VyZSB0byBzZWUgdGhlIGNsZWFyZWQg Yml0IHdoZW5ldmVyIHdlCisgKiBzZWUgYSByZWNlbnRseS1pbnNlcnRlZCBUSUQuCisgKgorICog RGVsZXRlczogdGhlIGNsZWFyaW5nIG9mIHRoZSBWTSBiaXQgYnkgYSBkZWxldGUgaXMgTk9UIHNl cmlhbGl6ZWQgd2l0aCB0aGUKKyAqIGluZGV4IHBhZ2UgYWNjZXNzLCBiZWNhdXNlIGRlbGV0ZXMg ZG8gbm90IHVwZGF0ZSB0aGUgaW5kZXggcGFnZSAob25seQorICogVkFDVVVNIHJlbW92ZXMgdGhl IGluZGV4IFRJRCkuICBTbyB3ZSBtYXkgc2VlIGEgc2lnbmlmaWNhbnRseSBzdGFsZSB2YWx1ZS4K KyAqIEhvd2V2ZXIsIHdlIGRvbid0IG5lZWQgdG8gZGV0ZWN0IHRoZSBkZWxldGUgcmlnaHQgYXdh eSwgYmVjYXVzZSB0aGUgdHVwbGUKKyAqIHJlbWFpbnMgdmlzaWJsZSB1bnRpbCB0aGUgZGVsZXRp bmcgdHJhbnNhY3Rpb24gY29tbWl0cyBvciB0aGUgc3RhdGVtZW50CisgKiBlbmRzIChpZiBpdCdz IG91ciBvd24gdHJhbnNhY3Rpb24pLiAgSW4gZWl0aGVyIGNhc2UsIHRoZSBsb2NrIG9uIHRoZSBW TQorICogYnVmZmVyIHdpbGwgaGF2ZSBiZWVuIHJlbGVhc2VkIChhY3RpbmcgYXMgYSB3cml0ZSBi YXJyaWVyKSBhZnRlciBjbGVhcmluZworICogdGhlIGJpdC4gIEFuZCBmb3IgdXMgdG8gaGF2ZSBh IHNuYXBzaG90IHRoYXQgaW5jbHVkZXMgdGhlIGRlbGV0aW5nCisgKiB0cmFuc2FjdGlvbiAobWFr aW5nIHRoZSB0dXBsZSBpbnZpc2libGUpLCB3ZSBtdXN0IGhhdmUgYWNxdWlyZWQKKyAqIFByb2NB cnJheUxvY2sgYWZ0ZXIgdGhhdCB0aW1lLCBhY3RpbmcgYXMgYSByZWFkIGJhcnJpZXIuCiAgKi8K IHVpbnQ4CiB2aXNpYmlsaXR5bWFwX2dldF9zdGF0dXMoUmVsYXRpb24gcmVsLCBCbG9ja051bWJl ciBoZWFwQmxrLCBCdWZmZXIgKnZtYnVmKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNz L2luZGV4L2dlbmFtLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYwppbmRleCAx NDA4OTg5YzUuLmFjYzlmM2U2YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4 L2dlbmFtLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMKQEAgLTEyNiw2 ICsxMjYsOCBAQCBSZWxhdGlvbkdldEluZGV4U2NhbihSZWxhdGlvbiBpbmRleFJlbGF0aW9uLCBp bnQgbmtleXMsIGludCBub3JkZXJieXMpCiAJc2Nhbi0+eHNfaGl0dXAgPSBOVUxMOwogCXNjYW4t PnhzX2hpdHVwZGVzYyA9IE5VTEw7CiAKKwlzY2FuLT54c192aXNpdGVkX3BhZ2VzX2xpbWl0ID0g MDsKKwogCXJldHVybiBzY2FuOwogfQogCkBAIC00NTQsNyArNDU2LDcgQEAgc3lzdGFibGVfYmVn aW5zY2FuKFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKIAkJCQllbG9nKEVSUk9SLCAiY29sdW1uIGlz IG5vdCBpbiBpbmRleCIpOwogCQl9CiAKLQkJc3lzc2Nhbi0+aXNjYW4gPSBpbmRleF9iZWdpbnNj YW4oaGVhcFJlbGF0aW9uLCBpcmVsLAorCQlzeXNzY2FuLT5pc2NhbiA9IGluZGV4X2JlZ2luc2Nh bihoZWFwUmVsYXRpb24sIGlyZWwsIGZhbHNlLAogCQkJCQkJCQkJCSBzbmFwc2hvdCwgTlVMTCwg bmtleXMsIDAsCiAJCQkJCQkJCQkJIFNPX05PTkUpOwogCQlpbmRleF9yZXNjYW4oc3lzc2Nhbi0+ aXNjYW4sIGlkeGtleSwgbmtleXMsIE5VTEwsIDApOwpAQCAtNTE4LDcgKzUyMCw4IEBAIHN5c3Rh YmxlX2dldG5leHQoU3lzU2NhbkRlc2Mgc3lzc2NhbikKIAogCWlmIChzeXNzY2FuLT5pcmVsKQog CXsKLQkJaWYgKGluZGV4X2dldG5leHRfc2xvdChzeXNzY2FuLT5pc2NhbiwgRm9yd2FyZFNjYW5E aXJlY3Rpb24sIHN5c3NjYW4tPnNsb3QpKQorCQlpZiAodGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90 KHN5c3NjYW4tPmlzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwKKwkJCQkJCQkJCSBzeXNzY2Fu LT5zbG90KSkKIAkJewogCQkJYm9vbAkJc2hvdWxkRnJlZTsKIApAQCAtNzE2LDcgKzcxOSw3IEBA IHN5c3RhYmxlX2JlZ2luc2Nhbl9vcmRlcmVkKFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKIAlpZiAo VHJhbnNhY3Rpb25JZElzVmFsaWQoQ2hlY2tYaWRBbGl2ZSkpCiAJCWJzeXNzY2FuID0gdHJ1ZTsK IAotCXN5c3NjYW4tPmlzY2FuID0gaW5kZXhfYmVnaW5zY2FuKGhlYXBSZWxhdGlvbiwgaW5kZXhS ZWxhdGlvbiwKKwlzeXNzY2FuLT5pc2NhbiA9IGluZGV4X2JlZ2luc2NhbihoZWFwUmVsYXRpb24s IGluZGV4UmVsYXRpb24sIGZhbHNlLAogCQkJCQkJCQkJIHNuYXBzaG90LCBOVUxMLCBua2V5cywg MCwKIAkJCQkJCQkJCSBTT19OT05FKTsKIAlpbmRleF9yZXNjYW4oc3lzc2Nhbi0+aXNjYW4sIGlk eGtleSwgbmtleXMsIE5VTEwsIDApOwpAQCAtNzM2LDcgKzczOSw3IEBAIHN5c3RhYmxlX2dldG5l eHRfb3JkZXJlZChTeXNTY2FuRGVzYyBzeXNzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbikK IAlIZWFwVHVwbGUJaHR1cCA9IE5VTEw7CiAKIAlBc3NlcnQoc3lzc2Nhbi0+aXJlbCk7Ci0JaWYg KGluZGV4X2dldG5leHRfc2xvdChzeXNzY2FuLT5pc2NhbiwgZGlyZWN0aW9uLCBzeXNzY2FuLT5z bG90KSkKKwlpZiAodGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90KHN5c3NjYW4tPmlzY2FuLCBkaXJl Y3Rpb24sIHN5c3NjYW4tPnNsb3QpKQogCQlodHVwID0gRXhlY0ZldGNoU2xvdEhlYXBUdXBsZShz eXNzY2FuLT5zbG90LCBmYWxzZSwgTlVMTCk7CiAKIAkvKiBTZWUgbm90ZXMgaW4gc3lzdGFibGVf Z2V0bmV4dCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0u YyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMKaW5kZXggNDQ0OTZhZTA5Li41 ZDVlNmI2YTkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMK KysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYwpAQCAtMjQsOSArMjQsNyBA QAogICoJCWluZGV4X3BhcmFsbGVsc2Nhbl9pbml0aWFsaXplIC0gaW5pdGlhbGl6ZSBwYXJhbGxl bCBzY2FuCiAgKgkJaW5kZXhfcGFyYWxsZWxyZXNjYW4gIC0gKHJlKXN0YXJ0IGEgcGFyYWxsZWwg c2NhbiBvZiBhbiBpbmRleAogICoJCWluZGV4X2JlZ2luc2Nhbl9wYXJhbGxlbCAtIGpvaW4gcGFy YWxsZWwgaW5kZXggc2NhbgotICoJCWluZGV4X2dldG5leHRfdGlkCS0gZ2V0IHRoZSBuZXh0IFRJ RCBmcm9tIGEgc2NhbgotICoJCWluZGV4X2ZldGNoX2hlYXAJCS0gZ2V0IHRoZSBzY2FuJ3MgbmV4 dCBoZWFwIHR1cGxlCi0gKgkJaW5kZXhfZ2V0bmV4dF9zbG90CS0gZ2V0IHRoZSBuZXh0IHR1cGxl IGZyb20gYSBzY2FuCisgKgkJaW5kZXhfZ2V0bmV4dF90aWQJLSBhbWdldHR1cGxlIHRhYmxlIEFN IGhlbHBlciByb3V0aW5lCiAgKgkJaW5kZXhfZ2V0Yml0bWFwIC0gZ2V0IGFsbCB0dXBsZXMgZnJv bSBhIHNjYW4KICAqCQlpbmRleF9idWxrX2RlbGV0ZQktIGJ1bGsgZGVsZXRpb24gb2YgaW5kZXgg dHVwbGVzCiAgKgkJaW5kZXhfdmFjdXVtX2NsZWFudXAJLSBwb3N0LWRlbGV0aW9uIGNsZWFudXAg b2YgYW4gaW5kZXgKQEAgLTEwNSw5ICsxMDMsMTYgQEAgZG8geyBcCiAJCQkgQ3BwQXNTdHJpbmco cG5hbWUpLCBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShzY2FuLT5pbmRleFJlbGF0aW9uKSk7IFwK IH0gd2hpbGUoMCkKIAotc3RhdGljIEluZGV4U2NhbkRlc2MgaW5kZXhfYmVnaW5zY2FuX2ludGVy bmFsKFJlbGF0aW9uIGluZGV4UmVsYXRpb24sCi0JCQkJCQkJCQkJCSAgaW50IG5rZXlzLCBpbnQg bm9yZGVyYnlzLCBTbmFwc2hvdCBzbmFwc2hvdCwKLQkJCQkJCQkJCQkJICBQYXJhbGxlbEluZGV4 U2NhbkRlc2MgcHNjYW4sIGJvb2wgdGVtcF9zbmFwKTsKK3N0YXRpYyBwZ19hdHRyaWJ1dGVfYWx3 YXlzX2lubGluZSBJbmRleFNjYW5EZXNjIGluZGV4X2JlZ2luc2Nhbl9pbnRlcm5hbChSZWxhdGlv biBpbmRleFJlbGF0aW9uLAorCQkJCQkJCQkJCQkJCQkJCQkJIGludCBua2V5cywKKwkJCQkJCQkJ CQkJCQkJCQkJCSBpbnQgbm9yZGVyYnlzLAorCQkJCQkJCQkJCQkJCQkJCQkJIFNuYXBzaG90IHNu YXBzaG90LAorCQkJCQkJCQkJCQkJCQkJCQkJIFBhcmFsbGVsSW5kZXhTY2FuRGVzYyBwc2NhbiwK KwkJCQkJCQkJCQkJCQkJCQkJCSBib29sIHRlbXBfc25hcCwKKwkJCQkJCQkJCQkJCQkJCQkJCSBS ZWxhdGlvbiBoZWFwUmVsYXRpb24sCisJCQkJCQkJCQkJCQkJCQkJCQkgYm9vbCBpbmRleF9vbmx5 X3NjYW4sCisJCQkJCQkJCQkJCQkJCQkJCQkgSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uICppbnN0 cnVtZW50LAorCQkJCQkJCQkJCQkJCQkJCQkJIHVpbnQzMiBmbGFncyk7CiBzdGF0aWMgaW5saW5l IHZvaWQgdmFsaWRhdGVfcmVsYXRpb25fYXNfaW5kZXgoUmVsYXRpb24gcik7CiAKIApAQCAtMjU2 LDEzICsyNjEsMTIgQEAgaW5kZXhfaW5zZXJ0X2NsZWFudXAoUmVsYXRpb24gaW5kZXhSZWxhdGlv biwKIEluZGV4U2NhbkRlc2MKIGluZGV4X2JlZ2luc2NhbihSZWxhdGlvbiBoZWFwUmVsYXRpb24s CiAJCQkJUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwKKwkJCQlib29sIGluZGV4X29ubHlfc2NhbiwK IAkJCQlTbmFwc2hvdCBzbmFwc2hvdCwKIAkJCQlJbmRleFNjYW5JbnN0cnVtZW50YXRpb24gKmlu c3RydW1lbnQsCiAJCQkJaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzLAogCQkJCXVpbnQzMiBmbGFn cykKIHsKLQlJbmRleFNjYW5EZXNjIHNjYW47Ci0KIAlBc3NlcnQoc25hcHNob3QgIT0gSW52YWxp ZFNuYXBzaG90KTsKIAogCS8qIENoZWNrIHRoYXQgYSBoaXN0b3JpYyBzbmFwc2hvdCBpcyBub3Qg dXNlZCBmb3Igbm9uLWNhdGFsb2cgdGFibGVzICovCkBAIC0yNzUsMjAgKzI3OSw5IEBAIGluZGV4 X2JlZ2luc2NhbihSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJCQkJCQlSZWxhdGlvbkdldFJlbGF0 aW9uTmFtZShoZWFwUmVsYXRpb24pKSkpOwogCX0KIAotCXNjYW4gPSBpbmRleF9iZWdpbnNjYW5f aW50ZXJuYWwoaW5kZXhSZWxhdGlvbiwgbmtleXMsIG5vcmRlcmJ5cywgc25hcHNob3QsIE5VTEws IGZhbHNlKTsKLQotCS8qCi0JICogU2F2ZSBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgaW50byB0aGUg c2NhbmRlc2MuICBFdmVyeXRoaW5nIGVsc2Ugd2FzIHNldAotCSAqIHVwIGJ5IFJlbGF0aW9uR2V0 SW5kZXhTY2FuLgotCSAqLwotCXNjYW4tPmhlYXBSZWxhdGlvbiA9IGhlYXBSZWxhdGlvbjsKLQlz Y2FuLT54c19zbmFwc2hvdCA9IHNuYXBzaG90OwotCXNjYW4tPmluc3RydW1lbnQgPSBpbnN0cnVt ZW50OwotCi0JLyogcHJlcGFyZSB0byBmZXRjaCBpbmRleCBtYXRjaGVzIGZyb20gdGFibGUgKi8K LQlzY2FuLT54c19oZWFwZmV0Y2ggPSB0YWJsZV9pbmRleF9mZXRjaF9iZWdpbihoZWFwUmVsYXRp b24sIGZsYWdzKTsKLQotCXJldHVybiBzY2FuOworCXJldHVybiBpbmRleF9iZWdpbnNjYW5faW50 ZXJuYWwoaW5kZXhSZWxhdGlvbiwgbmtleXMsIG5vcmRlcmJ5cywgc25hcHNob3QsCisJCQkJCQkJ CQlOVUxMLCBmYWxzZSwgaGVhcFJlbGF0aW9uLAorCQkJCQkJCQkJaW5kZXhfb25seV9zY2FuLCBp bnN0cnVtZW50LCBmbGFncyk7CiB9CiAKIC8qCkBAIC0zMDMsMjkgKzI5NiwyNiBAQCBpbmRleF9i ZWdpbnNjYW5fYml0bWFwKFJlbGF0aW9uIGluZGV4UmVsYXRpb24sCiAJCQkJCSAgIEluZGV4U2Nh bkluc3RydW1lbnRhdGlvbiAqaW5zdHJ1bWVudCwKIAkJCQkJICAgaW50IG5rZXlzKQogewotCUlu ZGV4U2NhbkRlc2Mgc2NhbjsKLQogCUFzc2VydChzbmFwc2hvdCAhPSBJbnZhbGlkU25hcHNob3Qp OworCUFzc2VydChJc01WQ0NMaWtlU25hcHNob3Qoc25hcHNob3QpKTsKIAotCXNjYW4gPSBpbmRl eF9iZWdpbnNjYW5faW50ZXJuYWwoaW5kZXhSZWxhdGlvbiwgbmtleXMsIDAsIHNuYXBzaG90LCBO VUxMLCBmYWxzZSk7Ci0KLQkvKgotCSAqIFNhdmUgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIGludG8g dGhlIHNjYW5kZXNjLiAgRXZlcnl0aGluZyBlbHNlIHdhcyBzZXQKLQkgKiB1cCBieSBSZWxhdGlv bkdldEluZGV4U2Nhbi4KLQkgKi8KLQlzY2FuLT54c19zbmFwc2hvdCA9IHNuYXBzaG90OwotCXNj YW4tPmluc3RydW1lbnQgPSBpbnN0cnVtZW50OwotCi0JcmV0dXJuIHNjYW47CisJcmV0dXJuIGlu ZGV4X2JlZ2luc2Nhbl9pbnRlcm5hbChpbmRleFJlbGF0aW9uLCBua2V5cywgMCwgc25hcHNob3Qs IE5VTEwsCisJCQkJCQkJCQlmYWxzZSwgTlVMTCwgZmFsc2UsIGluc3RydW1lbnQsIFNPX05PTkUp OwogfQogCiAvKgogICogaW5kZXhfYmVnaW5zY2FuX2ludGVybmFsIC0tLSBjb21tb24gY29kZSBm b3IgaW5kZXhfYmVnaW5zY2FuIHZhcmlhbnRzCisgKgorICogV2hlbiBoZWFwUmVsYXRpb24gaXMg bm90IE5VTEwsIGFsc28gaW5pdGlhbGl6ZXMgaGVhcC1zaWRlIHNjYW4gc3RhdGU6CisgKiBnZXRu ZXh0X3Nsb3QgcmVzb2x1dGlvbiBhbmQgdGFibGUgZmV0Y2ggaW5pdGlhbGl6YXRpb24uCiAgKi8K LXN0YXRpYyBJbmRleFNjYW5EZXNjCitzdGF0aWMgcGdfYXR0cmlidXRlX2Fsd2F5c19pbmxpbmUg SW5kZXhTY2FuRGVzYwogaW5kZXhfYmVnaW5zY2FuX2ludGVybmFsKFJlbGF0aW9uIGluZGV4UmVs YXRpb24sCiAJCQkJCQkgaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzLCBTbmFwc2hvdCBzbmFwc2hv dCwKLQkJCQkJCSBQYXJhbGxlbEluZGV4U2NhbkRlc2MgcHNjYW4sIGJvb2wgdGVtcF9zbmFwKQor CQkJCQkJIFBhcmFsbGVsSW5kZXhTY2FuRGVzYyBwc2NhbiwgYm9vbCB0ZW1wX3NuYXAsCisJCQkJ CQkgUmVsYXRpb24gaGVhcFJlbGF0aW9uLCBib29sIGluZGV4X29ubHlfc2NhbiwKKwkJCQkJCSBJ bmRleFNjYW5JbnN0cnVtZW50YXRpb24gKmluc3RydW1lbnQsCisJCQkJCQkgdWludDMyIGZsYWdz KQogewogCUluZGV4U2NhbkRlc2Mgc2NhbjsKIApAQCAtMzQ5LDYgKzMzOSwzMSBAQCBpbmRleF9i ZWdpbnNjYW5faW50ZXJuYWwoUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwKIAlzY2FuLT5wYXJhbGxl bF9zY2FuID0gcHNjYW47CiAJc2Nhbi0+eHNfdGVtcF9zbmFwID0gdGVtcF9zbmFwOwogCisJc2Nh bi0+eHNfc25hcHNob3QgPSBzbmFwc2hvdDsKKwlzY2FuLT5pbnN0cnVtZW50ID0gaW5zdHJ1bWVu dDsKKworCS8qCisJICogSW5pdGlhbGl6ZSBoZWFwLXNpZGUgc2NhbiBzdGF0ZSB3aGVuIGEgaGVh cCByZWxhdGlvbiBpcyBwcm92aWRlZC4KKwkgKiBCaXRtYXAgaW5kZXggc2NhbnMgZG9uJ3QgcHJv dmlkZSBvbmUuCisJICovCisJaWYgKGhlYXBSZWxhdGlvbiAhPSBOVUxMKQorCXsKKwkJc2Nhbi0+ aGVhcFJlbGF0aW9uID0gaGVhcFJlbGF0aW9uOworCQlzY2FuLT54c193YW50X2l0dXAgPSBpbmRl eF9vbmx5X3NjYW47CisJCXNjYW4tPnhzX2hlYXBfY29udGludWUgPSBmYWxzZTsKKworCQkvKiBS ZXNvbHZlIHdoaWNoIGdldG5leHRfc2xvdCBpbXBsZW1lbnRhdGlvbiB0byB1c2UgZm9yIHRoaXMg c2NhbiAqLworCQlpZiAoaW5kZXhfb25seV9zY2FuKQorCQkJc2Nhbi0+eHNfZ2V0bmV4dF9zbG90 ID0KKwkJCQloZWFwUmVsYXRpb24tPnJkX3RhYmxlYW0tPmluZGV4X29ubHlfYW1nZXR0dXBsZV9u ZXh0OworCQllbHNlCisJCQlzY2FuLT54c19nZXRuZXh0X3Nsb3QgPQorCQkJCWhlYXBSZWxhdGlv bi0+cmRfdGFibGVhbS0+aW5kZXhfcGxhaW5fYW1nZXR0dXBsZV9uZXh0OworCisJCS8qIHByZXBh cmUgdG8gZmV0Y2ggaW5kZXggbWF0Y2hlcyBmcm9tIHRhYmxlICovCisJCXNjYW4tPnhzX2hlYXBm ZXRjaCA9IHRhYmxlX2luZGV4X2ZldGNoX2JlZ2luKGhlYXBSZWxhdGlvbiwgZmxhZ3MpOworCX0K KwogCXJldHVybiBzY2FuOwogfQogCkBAIC0zNzcsNyArMzkyLDcgQEAgaW5kZXhfcmVzY2FuKElu ZGV4U2NhbkRlc2Mgc2NhbiwKIAogCS8qIFJlbGVhc2UgcmVzb3VyY2VzIChsaWtlIGJ1ZmZlciBw aW5zKSBmcm9tIHRhYmxlIGFjY2Vzc2VzICovCiAJaWYgKHNjYW4tPnhzX2hlYXBmZXRjaCkKLQkJ dGFibGVfaW5kZXhfZmV0Y2hfcmVzZXQoc2Nhbi0+eHNfaGVhcGZldGNoKTsKKwkJdGFibGVfaW5k ZXhfZmV0Y2hfcmVzZXQoc2Nhbik7CiAKIAlzY2FuLT5raWxsX3ByaW9yX3R1cGxlID0gZmFsc2U7 IC8qIGZvciBzYWZldHkgKi8KIAlzY2FuLT54c19oZWFwX2NvbnRpbnVlID0gZmFsc2U7CkBAIC0z OTksNyArNDE0LDcgQEAgaW5kZXhfZW5kc2NhbihJbmRleFNjYW5EZXNjIHNjYW4pCiAJLyogUmVs ZWFzZSByZXNvdXJjZXMgKGxpa2UgYnVmZmVyIHBpbnMpIGZyb20gdGFibGUgYWNjZXNzZXMgKi8K IAlpZiAoc2Nhbi0+eHNfaGVhcGZldGNoKQogCXsKLQkJdGFibGVfaW5kZXhfZmV0Y2hfZW5kKHNj YW4tPnhzX2hlYXBmZXRjaCk7CisJCXRhYmxlX2luZGV4X2ZldGNoX2VuZChzY2FuKTsKIAkJc2Nh bi0+eHNfaGVhcGZldGNoID0gTlVMTDsKIAl9CiAKQEAgLTQ1NCw3ICs0NjksNyBAQCBpbmRleF9y ZXN0cnBvcyhJbmRleFNjYW5EZXNjIHNjYW4pCiAKIAkvKiByZWxlYXNlIHJlc291cmNlcyAobGlr ZSBidWZmZXIgcGlucykgZnJvbSB0YWJsZSBhY2Nlc3NlcyAqLwogCWlmIChzY2FuLT54c19oZWFw ZmV0Y2gpCi0JCXRhYmxlX2luZGV4X2ZldGNoX3Jlc2V0KHNjYW4tPnhzX2hlYXBmZXRjaCk7CisJ CXRhYmxlX2luZGV4X2ZldGNoX3Jlc2V0KHNjYW4pOwogCiAJc2Nhbi0+a2lsbF9wcmlvcl90dXBs ZSA9IGZhbHNlOyAvKiBmb3Igc2FmZXR5ICovCiAJc2Nhbi0+eHNfaGVhcF9jb250aW51ZSA9IGZh bHNlOwpAQCAtNTc5LDcgKzU5NCw3IEBAIGluZGV4X3BhcmFsbGVscmVzY2FuKEluZGV4U2NhbkRl c2Mgc2NhbikKIAlTQ0FOX0NIRUNLUzsKIAogCWlmIChzY2FuLT54c19oZWFwZmV0Y2gpCi0JCXRh YmxlX2luZGV4X2ZldGNoX3Jlc2V0KHNjYW4tPnhzX2hlYXBmZXRjaCk7CisJCXRhYmxlX2luZGV4 X2ZldGNoX3Jlc2V0KHNjYW4pOwogCiAJLyogYW1wYXJhbGxlbHJlc2NhbiBpcyBvcHRpb25hbDsg YXNzdW1lIG5vLW9wIGlmIG5vdCBwcm92aWRlZCBieSBBTSAqLwogCWlmIChzY2FuLT5pbmRleFJl bGF0aW9uLT5yZF9pbmRhbS0+YW1wYXJhbGxlbHJlc2NhbiAhPSBOVUxMKQpAQCAtNTk2LDQxICs2 MTEsMzQgQEAgaW5kZXhfcGFyYWxsZWxyZXNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuKQogICovCiBJ bmRleFNjYW5EZXNjCiBpbmRleF9iZWdpbnNjYW5fcGFyYWxsZWwoUmVsYXRpb24gaGVhcHJlbCwg UmVsYXRpb24gaW5kZXhyZWwsCisJCQkJCQkgYm9vbCBpbmRleF9vbmx5X3NjYW4sCiAJCQkJCQkg SW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uICppbnN0cnVtZW50LAogCQkJCQkJIGludCBua2V5cywg aW50IG5vcmRlcmJ5cywKIAkJCQkJCSBQYXJhbGxlbEluZGV4U2NhbkRlc2MgcHNjYW4sCiAJCQkJ CQkgdWludDMyIGZsYWdzKQogewogCVNuYXBzaG90CXNuYXBzaG90OwotCUluZGV4U2NhbkRlc2Mg c2NhbjsKIAogCUFzc2VydChSZWxGaWxlTG9jYXRvckVxdWFscyhoZWFwcmVsLT5yZF9sb2NhdG9y LCBwc2Nhbi0+cHNfbG9jYXRvcikpOwogCUFzc2VydChSZWxGaWxlTG9jYXRvckVxdWFscyhpbmRl eHJlbC0+cmRfbG9jYXRvciwgcHNjYW4tPnBzX2luZGV4bG9jYXRvcikpOwogCiAJc25hcHNob3Qg PSBSZXN0b3JlU25hcHNob3QocHNjYW4tPnBzX3NuYXBzaG90X2RhdGEpOwogCVJlZ2lzdGVyU25h cHNob3Qoc25hcHNob3QpOwotCXNjYW4gPSBpbmRleF9iZWdpbnNjYW5faW50ZXJuYWwoaW5kZXhy ZWwsIG5rZXlzLCBub3JkZXJieXMsIHNuYXBzaG90LAotCQkJCQkJCQkJcHNjYW4sIHRydWUpOwog Ci0JLyoKLQkgKiBTYXZlIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBpbnRvIHRoZSBzY2FuZGVzYy4g IEV2ZXJ5dGhpbmcgZWxzZSB3YXMgc2V0Ci0JICogdXAgYnkgaW5kZXhfYmVnaW5zY2FuX2ludGVy bmFsLgotCSAqLwotCXNjYW4tPmhlYXBSZWxhdGlvbiA9IGhlYXByZWw7Ci0Jc2Nhbi0+eHNfc25h cHNob3QgPSBzbmFwc2hvdDsKLQlzY2FuLT5pbnN0cnVtZW50ID0gaW5zdHJ1bWVudDsKLQotCS8q IHByZXBhcmUgdG8gZmV0Y2ggaW5kZXggbWF0Y2hlcyBmcm9tIHRhYmxlICovCi0Jc2Nhbi0+eHNf aGVhcGZldGNoID0gdGFibGVfaW5kZXhfZmV0Y2hfYmVnaW4oaGVhcHJlbCwgZmxhZ3MpOwotCi0J cmV0dXJuIHNjYW47CisJcmV0dXJuIGluZGV4X2JlZ2luc2Nhbl9pbnRlcm5hbChpbmRleHJlbCwg bmtleXMsIG5vcmRlcmJ5cywgc25hcHNob3QsCisJCQkJCQkJCQlwc2NhbiwgdHJ1ZSwgaGVhcHJl bCwgaW5kZXhfb25seV9zY2FuLAorCQkJCQkJCQkJaW5zdHJ1bWVudCwgZmxhZ3MpOwogfQogCiAv KiAtLS0tLS0tLS0tLS0tLS0tCi0gKiBpbmRleF9nZXRuZXh0X3RpZCAtIGdldCB0aGUgbmV4dCBU SUQgZnJvbSBhIHNjYW4KKyAqIGluZGV4X2dldG5leHRfdGlkIC0gYW1nZXR0dXBsZSBpbnRlcmZh Y2UKICAqCiAgKiBUaGUgcmVzdWx0IGlzIHRoZSBuZXh0IFRJRCBzYXRpc2Z5aW5nIHRoZSBzY2Fu IGtleXMsCiAgKiBvciBOVUxMIGlmIG5vIG1vcmUgbWF0Y2hpbmcgdHVwbGVzIGV4aXN0LgorICoK KyAqIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJ5IHRhYmxlIEFNJ3MgaW5kZXhfZ2V0bmV4 dF9zbG90IGltcGxlbWVudGF0aW9uLAorICogYW5kIG9ubHkgZ2l2ZW4gYW4gaW5kZXggQU0gdGhh dCBzdXBwb3J0cyB0aGUgc2luZ2xlLXR1cGxlIGFtZ2V0dHVwbGUKKyAqIGludGVyZmFjZS4KICAq IC0tLS0tLS0tLS0tLS0tLS0KICAqLwogSXRlbVBvaW50ZXIKQEAgLTY2MSw3ICs2NjksNyBAQCBp bmRleF9nZXRuZXh0X3RpZChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0 aW9uKQogCXsKIAkJLyogcmVsZWFzZSByZXNvdXJjZXMgKGxpa2UgYnVmZmVyIHBpbnMpIGZyb20g dGFibGUgYWNjZXNzZXMgKi8KIAkJaWYgKHNjYW4tPnhzX2hlYXBmZXRjaCkKLQkJCXRhYmxlX2lu ZGV4X2ZldGNoX3Jlc2V0KHNjYW4tPnhzX2hlYXBmZXRjaCk7CisJCQl0YWJsZV9pbmRleF9mZXRj aF9yZXNldChzY2FuKTsKIAogCQlyZXR1cm4gTlVMTDsKIAl9CkBAIC02NzMsOTcgKzY4MSw2IEBA IGluZGV4X2dldG5leHRfdGlkKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJl Y3Rpb24pCiAJcmV0dXJuICZzY2FuLT54c19oZWFwdGlkOwogfQogCi0vKiAtLS0tLS0tLS0tLS0t LS0tCi0gKgkJaW5kZXhfZmV0Y2hfaGVhcCAtIGdldCB0aGUgc2NhbidzIG5leHQgaGVhcCB0dXBs ZQotICoKLSAqIFRoZSByZXN1bHQgaXMgYSB2aXNpYmxlIGhlYXAgdHVwbGUgYXNzb2NpYXRlZCB3 aXRoIHRoZSBpbmRleCBUSUQgbW9zdAotICogcmVjZW50bHkgZmV0Y2hlZCBieSBpbmRleF9nZXRu ZXh0X3RpZCwgb3IgTlVMTCBpZiBubyBtb3JlIG1hdGNoaW5nIHR1cGxlcwotICogZXhpc3QuICAo VGhlcmUgY2FuIGJlIG1vcmUgdGhhbiBvbmUgbWF0Y2hpbmcgdHVwbGUgYmVjYXVzZSBvZiBIT1Qg Y2hhaW5zLAotICogYWx0aG91Z2ggd2hlbiB1c2luZyBhbiBNVkNDIHNuYXBzaG90IGl0IHNob3Vs ZCBiZSBpbXBvc3NpYmxlIGZvciBtb3JlIHRoYW4KLSAqIG9uZSBzdWNoIHR1cGxlIHRvIGV4aXN0 LikKLSAqCi0gKiBPbiBzdWNjZXNzLCB0aGUgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIGhlYXAgdHVw IGlzIHBpbm5lZCAodGhlIHBpbiB3aWxsIGJlCi0gKiBkcm9wcGVkIGluIGEgZnV0dXJlIGluZGV4 X2dldG5leHRfdGlkLCBpbmRleF9mZXRjaF9oZWFwIG9yIGluZGV4X2VuZHNjYW4KLSAqIGNhbGwp LgotICoKLSAqIE5vdGU6IGNhbGxlciBtdXN0IGNoZWNrIHNjYW4tPnhzX3JlY2hlY2ssIGFuZCBw ZXJmb3JtIHJlY2hlY2tpbmcgb2YgdGhlCi0gKiBzY2FuIGtleXMgaWYgcmVxdWlyZWQuICBXZSBk byBub3QgZG8gdGhhdCBoZXJlIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZQotICogZW5vdWdoIGluZm9y bWF0aW9uIHRvIGRvIGl0IGVmZmljaWVudGx5IGluIHRoZSBnZW5lcmFsIGNhc2UuCi0gKiAtLS0t LS0tLS0tLS0tLS0tCi0gKi8KLWJvb2wKLWluZGV4X2ZldGNoX2hlYXAoSW5kZXhTY2FuRGVzYyBz Y2FuLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCkKLXsKLQlib29sCQlhbGxfZGVhZCA9IGZhbHNlOwot CWJvb2wJCWZvdW5kOwotCi0JZm91bmQgPSB0YWJsZV9pbmRleF9mZXRjaF90dXBsZShzY2FuLT54 c19oZWFwZmV0Y2gsICZzY2FuLT54c19oZWFwdGlkLAotCQkJCQkJCQkJc2Nhbi0+eHNfc25hcHNo b3QsIHNsb3QsCi0JCQkJCQkJCQkmc2Nhbi0+eHNfaGVhcF9jb250aW51ZSwgJmFsbF9kZWFkKTsK LQotCWlmIChmb3VuZCkKLQkJcGdzdGF0X2NvdW50X2hlYXBfZmV0Y2goc2Nhbi0+aW5kZXhSZWxh dGlvbik7Ci0KLQkvKgotCSAqIElmIHdlIHNjYW5uZWQgYSB3aG9sZSBIT1QgY2hhaW4gYW5kIGZv dW5kIG9ubHkgZGVhZCB0dXBsZXMsIHRlbGwgaW5kZXgKLQkgKiBBTSB0byBraWxsIGl0cyBlbnRy eSBmb3IgdGhhdCBUSUQgKHRoaXMgd2lsbCB0YWtlIGVmZmVjdCBpbiB0aGUgbmV4dAotCSAqIGFt Z2V0dHVwbGUgY2FsbCwgaW4gaW5kZXhfZ2V0bmV4dF90aWQpLiAgV2UgZG8gbm90IGRvIHRoaXMg d2hlbiBpbgotCSAqIHJlY292ZXJ5IGJlY2F1c2UgaXQgbWF5IHZpb2xhdGUgTVZDQyB0byBkbyBz by4gIFNlZSBjb21tZW50cyBpbgotCSAqIFJlbGF0aW9uR2V0SW5kZXhTY2FuKCkuCi0JICovCi0J aWYgKCFzY2FuLT54YWN0U3RhcnRlZEluUmVjb3ZlcnkpCi0JCXNjYW4tPmtpbGxfcHJpb3JfdHVw bGUgPSBhbGxfZGVhZDsKLQotCXJldHVybiBmb3VuZDsKLX0KLQotLyogLS0tLS0tLS0tLS0tLS0t LQotICoJCWluZGV4X2dldG5leHRfc2xvdCAtIGdldCB0aGUgbmV4dCB0dXBsZSBmcm9tIGEgc2Nh bgotICoKLSAqIFRoZSByZXN1bHQgaXMgdHJ1ZSBpZiBhIHR1cGxlIHNhdGlzZnlpbmcgdGhlIHNj YW4ga2V5cyBhbmQgdGhlIHNuYXBzaG90IHdhcwotICogZm91bmQsIGZhbHNlIG90aGVyd2lzZS4g IFRoZSB0dXBsZSBpcyBzdG9yZWQgaW4gdGhlIHNwZWNpZmllZCBzbG90LgotICoKLSAqIE9uIHN1 Y2Nlc3MsIHJlc291cmNlcyAobGlrZSBidWZmZXIgcGlucykgYXJlIGxpa2VseSB0byBiZSBoZWxk LCBhbmQgd2lsbCBiZQotICogZHJvcHBlZCBieSBhIGZ1dHVyZSBpbmRleF9nZXRuZXh0X3RpZCwg aW5kZXhfZmV0Y2hfaGVhcCBvciBpbmRleF9lbmRzY2FuCi0gKiBjYWxsKS4KLSAqCi0gKiBOb3Rl OiBjYWxsZXIgbXVzdCBjaGVjayBzY2FuLT54c19yZWNoZWNrLCBhbmQgcGVyZm9ybSByZWNoZWNr aW5nIG9mIHRoZQotICogc2NhbiBrZXlzIGlmIHJlcXVpcmVkLiAgV2UgZG8gbm90IGRvIHRoYXQg aGVyZSBiZWNhdXNlIHdlIGRvbid0IGhhdmUKLSAqIGVub3VnaCBpbmZvcm1hdGlvbiB0byBkbyBp dCBlZmZpY2llbnRseSBpbiB0aGUgZ2VuZXJhbCBjYXNlLgotICogLS0tLS0tLS0tLS0tLS0tLQot ICovCi1ib29sCi1pbmRleF9nZXRuZXh0X3Nsb3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGly ZWN0aW9uIGRpcmVjdGlvbiwgVHVwbGVUYWJsZVNsb3QgKnNsb3QpCi17Ci0JZm9yICg7OykKLQl7 Ci0JCWlmICghc2Nhbi0+eHNfaGVhcF9jb250aW51ZSkKLQkJewotCQkJSXRlbVBvaW50ZXIgdGlk OwotCi0JCQkvKiBUaW1lIHRvIGZldGNoIHRoZSBuZXh0IFRJRCBmcm9tIHRoZSBpbmRleCAqLwot CQkJdGlkID0gaW5kZXhfZ2V0bmV4dF90aWQoc2NhbiwgZGlyZWN0aW9uKTsKLQotCQkJLyogSWYg d2UncmUgb3V0IG9mIGluZGV4IGVudHJpZXMsIHdlJ3JlIGRvbmUgKi8KLQkJCWlmICh0aWQgPT0g TlVMTCkKLQkJCQlicmVhazsKLQotCQkJQXNzZXJ0KEl0ZW1Qb2ludGVyRXF1YWxzKHRpZCwgJnNj YW4tPnhzX2hlYXB0aWQpKTsKLQkJfQotCi0JCS8qCi0JCSAqIEZldGNoIHRoZSBuZXh0IChvciBv bmx5KSB2aXNpYmxlIGhlYXAgdHVwbGUgZm9yIHRoaXMgaW5kZXggZW50cnkuCi0JCSAqIElmIHdl IGRvbid0IGZpbmQgYW55dGhpbmcsIGxvb3AgYXJvdW5kIGFuZCBncmFiIHRoZSBuZXh0IFRJRCBm cm9tCi0JCSAqIHRoZSBpbmRleC4KLQkJICovCi0JCUFzc2VydChJdGVtUG9pbnRlcklzVmFsaWQo JnNjYW4tPnhzX2hlYXB0aWQpKTsKLQkJaWYgKGluZGV4X2ZldGNoX2hlYXAoc2Nhbiwgc2xvdCkp Ci0JCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQlyZXR1cm4gZmFsc2U7Ci19Ci0KIC8qIC0tLS0tLS0t LS0tLS0tLS0KICAqCQlpbmRleF9nZXRiaXRtYXAgLSBnZXQgYWxsIHR1cGxlcyBhdCBvbmNlIGZy b20gYW4gaW5kZXggc2NhbgogICoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRy ZWUvbmJ0aW5zZXJ0LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idGluc2VydC5jCmlu ZGV4IGM4YWY5N2RkMi4uZjFiNTVmYjIwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mv bmJ0cmVlL25idGluc2VydC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0aW5z ZXJ0LmMKQEAgLTU2MCw5ICs1NjAsOSBAQCBfYnRfY2hlY2tfdW5pcXVlKFJlbGF0aW9uIHJlbCwg QlRJbnNlcnRTdGF0ZSBpbnNlcnRzdGF0ZSwgUmVsYXRpb24gaGVhcFJlbCwKIAkJCQkgKiB3aXRo IG9wdGltaXphdGlvbnMgbGlrZSBoZWFwJ3MgSE9ULCB3ZSBoYXZlIGp1c3QgYSBzaW5nbGUKIAkJ CQkgKiBpbmRleCBlbnRyeSBmb3IgdGhlIGVudGlyZSBjaGFpbi4KIAkJCQkgKi8KLQkJCQllbHNl IGlmICh0YWJsZV9pbmRleF9mZXRjaF90dXBsZV9jaGVjayhoZWFwUmVsLCAmaHRpZCwKLQkJCQkJ CQkJCQkJCQkgICAmU25hcHNob3REaXJ0eSwKLQkJCQkJCQkJCQkJCQkgICAmYWxsX2RlYWQpKQor CQkJCWVsc2UgaWYgKHRhYmxlX2ZldGNoX3RpZF9jaGVjayhoZWFwUmVsLCAmaHRpZCwKKwkJCQkJ CQkJCQkJICAgJlNuYXBzaG90RGlydHksCisJCQkJCQkJCQkJCSAgICZhbGxfZGVhZCkpCiAJCQkJ ewogCQkJCQlUcmFuc2FjdGlvbklkIHh3YWl0OwogCkBAIC02MTgsOCArNjE4LDggQEAgX2J0X2No ZWNrX3VuaXF1ZShSZWxhdGlvbiByZWwsIEJUSW5zZXJ0U3RhdGUgaW5zZXJ0c3RhdGUsIFJlbGF0 aW9uIGhlYXBSZWwsCiAJCQkJCSAqIGVudHJ5LgogCQkJCQkgKi8KIAkJCQkJaHRpZCA9IGl0dXAt PnRfdGlkOwotCQkJCQlpZiAodGFibGVfaW5kZXhfZmV0Y2hfdHVwbGVfY2hlY2soaGVhcFJlbCwg Jmh0aWQsCi0JCQkJCQkJCQkJCQkJICBTbmFwc2hvdFNlbGYsIE5VTEwpKQorCQkJCQlpZiAodGFi bGVfZmV0Y2hfdGlkX2NoZWNrKGhlYXBSZWwsICZodGlkLAorCQkJCQkJCQkJCQkgIFNuYXBzaG90 U2VsZiwgTlVMTCkpCiAJCQkJCXsKIAkJCQkJCS8qIE5vcm1hbCBjYXNlIC0tLSBpdCdzIHN0aWxs IGxpdmUgKi8KIAkJCQkJfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3Rh YmxlYW0uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtLmMKaW5kZXggNjhmZjA5 NjZmLi5hY2YxYjBmYWEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJs ZWFtLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW0uYwpAQCAtMjI4LDMy ICsyMjgsMjUgQEAgdGFibGVfYmVnaW5zY2FuX3BhcmFsbGVsX3RpZHJhbmdlKFJlbGF0aW9uIHJl bGF0aW9uLAogICovCiAKIC8qCi0gKiBUbyBwZXJmb3JtIHRoYXQgY2hlY2sgc2ltcGx5IHN0YXJ0 IGFuIGluZGV4IHNjYW4sIGNyZWF0ZSB0aGUgbmVjZXNzYXJ5Ci0gKiBzbG90LCBkbyB0aGUgaGVh cCBsb29rdXAsIGFuZCBzaHV0IGV2ZXJ5dGhpbmcgZG93biBhZ2Fpbi4gVGhpcyBjb3VsZCBiZQot ICogb3B0aW1pemVkLCBidXQgaXMgdW5saWtlbHkgdG8gbWF0dGVyIGZyb20gYSBwZXJmb3JtYW5j ZSBQT1YuIElmIHRoZXJlCi0gKiBmcmVxdWVudGx5IGFyZSBsaXZlIGluZGV4IHBvaW50ZXJzIGFs c28gbWF0Y2hpbmcgYSB1bmlxdWUgaW5kZXgga2V5LCB0aGUKLSAqIENQVSBvdmVyaGVhZCBvZiB0 aGlzIHJvdXRpbmUgaXMgdW5saWtlbHkgdG8gbWF0dGVyLgorICogQ29udmVuaWVuY2Ugd3JhcHBl ciBhcm91bmQgdGFibGVfZmV0Y2hfdGlkKCkgZm9yIGNhbGxlcnMgdGhhdCBvbmx5IG5lZWQgdG8K KyAqIGtub3cgd2hldGhlciBhIGxpdmUgdGFibGUgdHVwbGUgZXhpc3RzIGZvciBhIGdpdmVuIFRJ RC4gIFRoaXMgaXMgdXNlZCB0bworICogdmVyaWZ5IGlmIHRoZXJlJ3MgYSBjb25mbGljdCBpbiBh IHVuaXF1ZSBpbmRleC4KICAqCiAgKiBOb3RlIHRoYXQgKnRpZCBtYXkgYmUgbW9kaWZpZWQgd2hl biB3ZSByZXR1cm4gdHJ1ZSBpZiB0aGUgQU0gc3VwcG9ydHMKICAqIHN0b3JpbmcgbXVsdGlwbGUg cm93IHZlcnNpb25zIHJlYWNoYWJsZSB2aWEgYSBzaW5nbGUgaW5kZXggZW50cnkgKGxpa2UKICAq IGhlYXAncyBIT1QpLgogICovCiBib29sCi10YWJsZV9pbmRleF9mZXRjaF90dXBsZV9jaGVjayhS ZWxhdGlvbiByZWwsCi0JCQkJCQkJICBJdGVtUG9pbnRlciB0aWQsCi0JCQkJCQkJICBTbmFwc2hv dCBzbmFwc2hvdCwKLQkJCQkJCQkgIGJvb2wgKmFsbF9kZWFkKQordGFibGVfZmV0Y2hfdGlkX2No ZWNrKFJlbGF0aW9uIHJlbCwKKwkJCQkJICBJdGVtUG9pbnRlciB0aWQsCisJCQkJCSAgU25hcHNo b3Qgc25hcHNob3QsCisJCQkJCSAgYm9vbCAqYWxsX2RlYWQpCiB7Ci0JSW5kZXhGZXRjaFRhYmxl RGF0YSAqc2NhbjsKIAlUdXBsZVRhYmxlU2xvdCAqc2xvdDsKLQlib29sCQljYWxsX2FnYWluID0g ZmFsc2U7CiAJYm9vbAkJZm91bmQ7CiAKIAlzbG90ID0gdGFibGVfc2xvdF9jcmVhdGUocmVsLCBO VUxMKTsKLQlzY2FuID0gdGFibGVfaW5kZXhfZmV0Y2hfYmVnaW4ocmVsLCBTT19OT05FKTsKLQlm b3VuZCA9IHRhYmxlX2luZGV4X2ZldGNoX3R1cGxlKHNjYW4sIHRpZCwgc25hcHNob3QsIHNsb3Qs ICZjYWxsX2FnYWluLAotCQkJCQkJCQkJYWxsX2RlYWQpOwotCXRhYmxlX2luZGV4X2ZldGNoX2Vu ZChzY2FuKTsKKwlmb3VuZCA9IHRhYmxlX2ZldGNoX3RpZChyZWwsIHRpZCwgc25hcHNob3QsIHNs b3QsIGFsbF9kZWFkKTsKIAlFeGVjRHJvcFNpbmdsZVR1cGxlVGFibGVTbG90KHNsb3QpOwogCiAJ cmV0dXJuIGZvdW5kOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxl YW1hcGkuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtYXBpLmMKaW5kZXggNTQ1 MGEyN2ZhLi45N2NlODFlYjUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90 YWJsZWFtYXBpLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW1hcGkuYwpA QCAtNTMsNyArNTMsOSBAQCBHZXRUYWJsZUFtUm91dGluZShPaWQgYW1oYW5kbGVyKQogCUFzc2Vy dChyb3V0aW5lLT5pbmRleF9mZXRjaF9iZWdpbiAhPSBOVUxMKTsKIAlBc3NlcnQocm91dGluZS0+ aW5kZXhfZmV0Y2hfcmVzZXQgIT0gTlVMTCk7CiAJQXNzZXJ0KHJvdXRpbmUtPmluZGV4X2ZldGNo X2VuZCAhPSBOVUxMKTsKLQlBc3NlcnQocm91dGluZS0+aW5kZXhfZmV0Y2hfdHVwbGUgIT0gTlVM TCk7CisJQXNzZXJ0KHJvdXRpbmUtPmluZGV4X3BsYWluX2FtZ2V0dHVwbGVfbmV4dCAhPSBOVUxM KTsKKwlBc3NlcnQocm91dGluZS0+aW5kZXhfb25seV9hbWdldHR1cGxlX25leHQgIT0gTlVMTCk7 CisJQXNzZXJ0KHJvdXRpbmUtPmZldGNoX3RpZCAhPSBOVUxMKTsKIAogCUFzc2VydChyb3V0aW5l LT50dXBsZV9mZXRjaF9yb3dfdmVyc2lvbiAhPSBOVUxMKTsKIAlBc3NlcnQocm91dGluZS0+dHVw bGVfdGlkX3ZhbGlkICE9IE5VTEwpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMv Y29uc3RyYWludC5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29uc3RyYWludC5jCmluZGV4IDQy MWQ4YzM1OS4uN2FmZjQ4MTI0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb25z dHJhaW50LmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29uc3RyYWludC5jCkBAIC0xMDUs MjMgKzEwNSwxNCBAQCB1bmlxdWVfa2V5X3JlY2hlY2soUEdfRlVOQ1RJT05fQVJHUykKIAkgKiBy ZW1vdmVkLgogCSAqLwogCXRtcHRpZCA9IGNoZWNrdGlkOworCWlmICghdGFibGVfZmV0Y2hfdGlk KHRyaWdkYXRhLT50Z19yZWxhdGlvbiwgJnRtcHRpZCwgU25hcHNob3RTZWxmLAorCQkJCQkJIHNs b3QsIE5VTEwpKQogCXsKLQkJSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbiA9IHRhYmxlX2luZGV4 X2ZldGNoX2JlZ2luKHRyaWdkYXRhLT50Z19yZWxhdGlvbiwKLQkJCQkJCQkJCQkJCQkJCVNPX05P TkUpOwotCQlib29sCQljYWxsX2FnYWluID0gZmFsc2U7Ci0KLQkJaWYgKCF0YWJsZV9pbmRleF9m ZXRjaF90dXBsZShzY2FuLCAmdG1wdGlkLCBTbmFwc2hvdFNlbGYsIHNsb3QsCi0JCQkJCQkJCQkg JmNhbGxfYWdhaW4sIE5VTEwpKQotCQl7Ci0JCQkvKgotCQkJICogQWxsIHJvd3MgcmVmZXJlbmNl ZCBieSB0aGUgaW5kZXggZW50cnkgYXJlIGRlYWQsIHNvIHNraXAgdGhlCi0JCQkgKiBjaGVjay4K LQkJCSAqLwotCQkJRXhlY0Ryb3BTaW5nbGVUdXBsZVRhYmxlU2xvdChzbG90KTsKLQkJCXRhYmxl X2luZGV4X2ZldGNoX2VuZChzY2FuKTsKLQkJCXJldHVybiBQb2ludGVyR2V0RGF0dW0oTlVMTCk7 Ci0JCX0KLQkJdGFibGVfaW5kZXhfZmV0Y2hfZW5kKHNjYW4pOworCQkvKgorCQkgKiBBbGwgcm93 cyByZWZlcmVuY2VkIGJ5IHRoZSBpbmRleCBlbnRyeSBhcmUgZGVhZCwgc28gc2tpcCB0aGUgY2hl Y2sKKwkJICovCisJCUV4ZWNEcm9wU2luZ2xlVHVwbGVUYWJsZVNsb3Qoc2xvdCk7CisJCXJldHVy biBQb2ludGVyR2V0RGF0dW0oTlVMTCk7CiAJfQogCiAJLyoKQEAgLTE2OCw5ICsxNTksOCBAQCB1 bmlxdWVfa2V5X3JlY2hlY2soUEdfRlVOQ1RJT05fQVJHUykKIAkJLyoKIAkJICogTm90ZTogdGhp cyBpcyBub3QgYSByZWFsIGluc2VydDsgaXQgaXMgYSBjaGVjayB0aGF0IHRoZSBpbmRleCBlbnRy eQogCQkgKiB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gaW5zZXJ0ZWQgaXMgdW5pcXVlLiAgUGFzc2lu ZyB0aGUgdHVwbGUncyB0aWQKLQkJICogKGkuZS4gdW5tb2RpZmllZCBieSB0YWJsZV9pbmRleF9m ZXRjaF90dXBsZSgpKSBpcyBjb3JyZWN0IGV2ZW4gaWYKLQkJICogdGhlIHJvdyBpcyBub3cgZGVh ZCwgYmVjYXVzZSB0aGF0IGlzIHRoZSBUSUQgdGhlIGluZGV4IHdpbGwga25vdwotCQkgKiBhYm91 dC4KKwkJICogKGkuZS4gdW5tb2RpZmllZCBieSB0YWJsZV9mZXRjaF90aWQoKSkgaXMgY29ycmVj dCBldmVuIGlmIHRoZSByb3cKKwkJICogaXMgbm93IGRlYWQsIGJlY2F1c2UgdGhhdCBpcyB0aGUg VElEIHRoZSBpbmRleCB3aWxsIGtub3cgYWJvdXQuCiAJCSAqLwogCQlpbmRleF9pbnNlcnQoaW5k ZXhSZWwsIHZhbHVlcywgaXNudWxsLCAmY2hlY2t0aWQsCiAJCQkJCSB0cmlnZGF0YS0+dGdfcmVs YXRpb24sIFVOSVFVRV9DSEVDS19FWElTVElORywKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL2V4cGxhaW4uYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYwppbmRleCBl NGI3MDE2NmIuLmNhNzU5YjBhYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhw bGFpbi5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYwpAQCAtMTM2LDcgKzEz Niw3IEBAIHN0YXRpYyB2b2lkIHNob3dfcmVjdXJzaXZlX3VuaW9uX2luZm8oUmVjdXJzaXZlVW5p b25TdGF0ZSAqcnN0YXRlLAogc3RhdGljIHZvaWQgc2hvd19tZW1vaXplX2luZm8oTWVtb2l6ZVN0 YXRlICptc3RhdGUsIExpc3QgKmFuY2VzdG9ycywKIAkJCQkJCQkgIEV4cGxhaW5TdGF0ZSAqZXMp Owogc3RhdGljIHZvaWQgc2hvd19oYXNoYWdnX2luZm8oQWdnU3RhdGUgKmFnZ3N0YXRlLCBFeHBs YWluU3RhdGUgKmVzKTsKLXN0YXRpYyB2b2lkIHNob3dfaW5kZXhzZWFyY2hlc19pbmZvKFBsYW5T dGF0ZSAqcGxhbnN0YXRlLCBFeHBsYWluU3RhdGUgKmVzKTsKK3N0YXRpYyB2b2lkIHNob3dfaW5k ZXhzY2FuX2luZm8oUGxhblN0YXRlICpwbGFuc3RhdGUsIEV4cGxhaW5TdGF0ZSAqZXMpOwogc3Rh dGljIHZvaWQgc2hvd190aWRiaXRtYXBfaW5mbyhCaXRtYXBIZWFwU2NhblN0YXRlICpwbGFuc3Rh dGUsCiAJCQkJCQkJCUV4cGxhaW5TdGF0ZSAqZXMpOwogc3RhdGljIHZvaWQgc2hvd19pbnN0cnVt ZW50YXRpb25fY291bnQoY29uc3QgY2hhciAqcWxhYmVsLCBpbnQgd2hpY2gsCkBAIC0xOTc0LDcg KzE5NzQsNyBAQCBFeHBsYWluTm9kZShQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgTGlzdCAqYW5jZXN0 b3JzLAogCQkJaWYgKHBsYW4tPnF1YWwpCiAJCQkJc2hvd19pbnN0cnVtZW50YXRpb25fY291bnQo IlJvd3MgUmVtb3ZlZCBieSBGaWx0ZXIiLCAxLAogCQkJCQkJCQkJCSAgIHBsYW5zdGF0ZSwgZXMp OwotCQkJc2hvd19pbmRleHNlYXJjaGVzX2luZm8ocGxhbnN0YXRlLCBlcyk7CisJCQlzaG93X2lu ZGV4c2Nhbl9pbmZvKHBsYW5zdGF0ZSwgZXMpOwogCQkJYnJlYWs7CiAJCWNhc2UgVF9JbmRleE9u bHlTY2FuOgogCQkJc2hvd19zY2FuX3F1YWwoKChJbmRleE9ubHlTY2FuICopIHBsYW4pLT5pbmRl eHF1YWwsCkBAIC0xOTg4LDE1ICsxOTg4LDEyIEBAIEV4cGxhaW5Ob2RlKFBsYW5TdGF0ZSAqcGxh bnN0YXRlLCBMaXN0ICphbmNlc3RvcnMsCiAJCQlpZiAocGxhbi0+cXVhbCkKIAkJCQlzaG93X2lu c3RydW1lbnRhdGlvbl9jb3VudCgiUm93cyBSZW1vdmVkIGJ5IEZpbHRlciIsIDEsCiAJCQkJCQkJ CQkJICAgcGxhbnN0YXRlLCBlcyk7Ci0JCQlpZiAoZXMtPmFuYWx5emUpCi0JCQkJRXhwbGFpblBy b3BlcnR5RmxvYXQoIkhlYXAgRmV0Y2hlcyIsIE5VTEwsCi0JCQkJCQkJCQkgcGxhbnN0YXRlLT5p bnN0cnVtZW50LT5udHVwbGVzMiwgMCwgZXMpOwotCQkJc2hvd19pbmRleHNlYXJjaGVzX2luZm8o cGxhbnN0YXRlLCBlcyk7CisJCQlzaG93X2luZGV4c2Nhbl9pbmZvKHBsYW5zdGF0ZSwgZXMpOwog CQkJYnJlYWs7CiAJCWNhc2UgVF9CaXRtYXBJbmRleFNjYW46CiAJCQlzaG93X3NjYW5fcXVhbCgo KEJpdG1hcEluZGV4U2NhbiAqKSBwbGFuKS0+aW5kZXhxdWFsb3JpZywKIAkJCQkJCSAgICJJbmRl eCBDb25kIiwgcGxhbnN0YXRlLCBhbmNlc3RvcnMsIGVzKTsKLQkJCXNob3dfaW5kZXhzZWFyY2hl c19pbmZvKHBsYW5zdGF0ZSwgZXMpOworCQkJc2hvd19pbmRleHNjYW5faW5mbyhwbGFuc3RhdGUs IGVzKTsKIAkJCWJyZWFrOwogCQljYXNlIFRfQml0bWFwSGVhcFNjYW46CiAJCQlzaG93X3NjYW5f cXVhbCgoKEJpdG1hcEhlYXBTY2FuICopIHBsYW4pLT5iaXRtYXBxdWFsb3JpZywKQEAgLTM4NjAs MTUgKzM4NTcsMTYgQEAgc2hvd19oYXNoYWdnX2luZm8oQWdnU3RhdGUgKmFnZ3N0YXRlLCBFeHBs YWluU3RhdGUgKmVzKQogfQogCiAvKgotICogU2hvdyB0aGUgdG90YWwgbnVtYmVyIG9mIGluZGV4 IHNlYXJjaGVzIGZvciBhCisgKiBTaG93IGluZGV4IHNjYW4gcmVsYXRlZCBleGVjdXRvciBpbnN0 cnVtZW50YXRpb24gZm9yIGEKICAqIEluZGV4U2Nhbi9JbmRleE9ubHlTY2FuL0JpdG1hcEluZGV4 U2NhbiBub2RlCiAgKi8KIHN0YXRpYyB2b2lkCi1zaG93X2luZGV4c2VhcmNoZXNfaW5mbyhQbGFu U3RhdGUgKnBsYW5zdGF0ZSwgRXhwbGFpblN0YXRlICplcykKK3Nob3dfaW5kZXhzY2FuX2luZm8o UGxhblN0YXRlICpwbGFuc3RhdGUsIEV4cGxhaW5TdGF0ZSAqZXMpCiB7CiAJUGxhbgkgICAqcGxh biA9IHBsYW5zdGF0ZS0+cGxhbjsKIAlTaGFyZWRJbmRleFNjYW5JbnN0cnVtZW50YXRpb24gKlNo YXJlZEluZm8gPSBOVUxMOwotCXVpbnQ2NAkJbnNlYXJjaGVzID0gMDsKKwl1aW50NjQJCW5zZWFy Y2hlcyA9IDAsCisJCQkJbnRhYmxlZmV0Y2hlcyA9IDA7CiAKIAlpZiAoIWVzLT5hbmFseXplKQog CQlyZXR1cm47CkBAIC0zODg5LDYgKzM4ODcsNyBAQCBzaG93X2luZGV4c2VhcmNoZXNfaW5mbyhQ bGFuU3RhdGUgKnBsYW5zdGF0ZSwgRXhwbGFpblN0YXRlICplcykKIAkJCQlJbmRleE9ubHlTY2Fu U3RhdGUgKmluZGV4c3RhdGUgPSAoKEluZGV4T25seVNjYW5TdGF0ZSAqKSBwbGFuc3RhdGUpOwog CiAJCQkJbnNlYXJjaGVzID0gaW5kZXhzdGF0ZS0+aW9zc19JbnN0cnVtZW50LT5uc2VhcmNoZXM7 CisJCQkJbnRhYmxlZmV0Y2hlcyA9IGluZGV4c3RhdGUtPmlvc3NfSW5zdHJ1bWVudC0+bnRhYmxl ZmV0Y2hlczsKIAkJCQlTaGFyZWRJbmZvID0gaW5kZXhzdGF0ZS0+aW9zc19TaGFyZWRJbmZvOwog CQkJCWJyZWFrOwogCQkJfQpAQCAtMzkxMiw5ICszOTExLDEzIEBAIHNob3dfaW5kZXhzZWFyY2hl c19pbmZvKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBFeHBsYWluU3RhdGUgKmVzKQogCQkJSW5kZXhT Y2FuSW5zdHJ1bWVudGF0aW9uICp3aW5zdHJ1bWVudCA9ICZTaGFyZWRJbmZvLT53aW5zdHJ1bWVu dFtpXTsKIAogCQkJbnNlYXJjaGVzICs9IHdpbnN0cnVtZW50LT5uc2VhcmNoZXM7CisJCQludGFi bGVmZXRjaGVzICs9IHdpbnN0cnVtZW50LT5udGFibGVmZXRjaGVzOwogCQl9CiAJfQogCisJaWYg KG5vZGVUYWcocGxhbikgPT0gVF9JbmRleE9ubHlTY2FuKQorCQlFeHBsYWluUHJvcGVydHlVSW50 ZWdlcigiSGVhcCBGZXRjaGVzIiwgTlVMTCwgbnRhYmxlZmV0Y2hlcywgZXMpOworCiAJRXhwbGFp blByb3BlcnR5VUludGVnZXIoIkluZGV4IFNlYXJjaGVzIiwgTlVMTCwgbnNlYXJjaGVzLCBlcyk7 CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5jIGIv c3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMKaW5kZXggNDM2M2UxNTRjLi5jZjc5 MmE4ZGQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5jCisr KyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5jCkBAIC04MTUsMTIgKzgxNSwx MiBAQCBjaGVja19leGNsdXNpb25fb3JfdW5pcXVlX2NvbnN0cmFpbnQoUmVsYXRpb24gaGVhcCwg UmVsYXRpb24gaW5kZXgsCiByZXRyeToKIAljb25mbGljdCA9IGZhbHNlOwogCWZvdW5kX3NlbGYg PSBmYWxzZTsKLQlpbmRleF9zY2FuID0gaW5kZXhfYmVnaW5zY2FuKGhlYXAsIGluZGV4LAotCQkJ CQkJCQkgJkRpcnR5U25hcHNob3QsIE5VTEwsIGluZG5rZXlhdHRzLCAwLAotCQkJCQkJCQkgU09f Tk9ORSk7CisJaW5kZXhfc2NhbiA9IGluZGV4X2JlZ2luc2NhbihoZWFwLCBpbmRleCwgZmFsc2Us ICZEaXJ0eVNuYXBzaG90LCBOVUxMLAorCQkJCQkJCQkgaW5kbmtleWF0dHMsIDAsIFNPX05PTkUp OwogCWluZGV4X3Jlc2NhbihpbmRleF9zY2FuLCBzY2Fua2V5cywgaW5kbmtleWF0dHMsIE5VTEws IDApOwogCi0Jd2hpbGUgKGluZGV4X2dldG5leHRfc2xvdChpbmRleF9zY2FuLCBGb3J3YXJkU2Nh bkRpcmVjdGlvbiwgZXhpc3Rpbmdfc2xvdCkpCisJd2hpbGUgKHRhYmxlX2luZGV4X2dldG5leHRf c2xvdChpbmRleF9zY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwKKwkJCQkJCQkJCWV4aXN0aW5n X3Nsb3QpKQogCXsKIAkJVHJhbnNhY3Rpb25JZCB4d2FpdDsKIAkJWExUV19PcGVyCXJlYXNvbl93 YWl0OwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1JlcGxpY2F0aW9uLmMg Yi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUmVwbGljYXRpb24uYwppbmRleCBiMmNhNWNiZjEu LmM4NzNiY2Q4MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1JlcGxpY2F0 aW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1JlcGxpY2F0aW9uLmMKQEAgLTIw NSw4ICsyMDUsOCBAQCBSZWxhdGlvbkZpbmRSZXBsVHVwbGVCeUluZGV4KFJlbGF0aW9uIHJlbCwg T2lkIGlkeG9pZCwKIAlza2V5X2F0dG9mZiA9IGJ1aWxkX3JlcGxpbmRleF9zY2FuX2tleShza2V5 LCByZWwsIGlkeHJlbCwgc2VhcmNoc2xvdCk7CiAKIAkvKiBTdGFydCBhbiBpbmRleCBzY2FuLiAq LwotCXNjYW4gPSBpbmRleF9iZWdpbnNjYW4ocmVsLCBpZHhyZWwsCi0JCQkJCQkgICAmc25hcCwg TlVMTCwgc2tleV9hdHRvZmYsIDAsIFNPX05PTkUpOworCXNjYW4gPSBpbmRleF9iZWdpbnNjYW4o cmVsLCBpZHhyZWwsIGZhbHNlLCAmc25hcCwgTlVMTCwgc2tleV9hdHRvZmYsIDAsCisJCQkJCQkg ICBTT19OT05FKTsKIAogcmV0cnk6CiAJZm91bmQgPSBmYWxzZTsKQEAgLTIxNCw3ICsyMTQsNyBA QCByZXRyeToKIAlpbmRleF9yZXNjYW4oc2Nhbiwgc2tleSwgc2tleV9hdHRvZmYsIE5VTEwsIDAp OwogCiAJLyogVHJ5IHRvIGZpbmQgdGhlIHR1cGxlICovCi0Jd2hpbGUgKGluZGV4X2dldG5leHRf c2xvdChzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgb3V0c2xvdCkpCisJd2hpbGUgKHRhYmxl X2luZGV4X2dldG5leHRfc2xvdChzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgb3V0c2xvdCkp CiAJewogCQkvKgogCQkgKiBBdm9pZCBleHBlbnNpdmUgZXF1YWxpdHkgY2hlY2sgaWYgdGhlIGlu ZGV4IGlzIHByaW1hcnkga2V5IG9yCkBAIC02NjksMTMgKzY2OSwxMyBAQCBSZWxhdGlvbkZpbmRE ZWxldGVkVHVwbGVJbmZvQnlJbmRleChSZWxhdGlvbiByZWwsIE9pZCBpZHhvaWQsCiAJICogbm90 IHlldCBjb21taXR0ZWQgb3IgdGhvc2UganVzdCBjb21taXR0ZWQgcHJpb3IgdG8gdGhlIHNjYW4g YXJlCiAJICogZXhjbHVkZWQgaW4gdXBkYXRlX21vc3RfcmVjZW50X2RlbGV0aW9uX2luZm8oKS4K IAkgKi8KLQlzY2FuID0gaW5kZXhfYmVnaW5zY2FuKHJlbCwgaWR4cmVsLAotCQkJCQkJICAgU25h cHNob3RBbnksIE5VTEwsIHNrZXlfYXR0b2ZmLCAwLCBTT19OT05FKTsKKwlzY2FuID0gaW5kZXhf YmVnaW5zY2FuKHJlbCwgaWR4cmVsLCBmYWxzZSwgU25hcHNob3RBbnksIE5VTEwsCisJCQkJCQkg ICBza2V5X2F0dG9mZiwgMCwgU09fTk9ORSk7CiAKIAlpbmRleF9yZXNjYW4oc2Nhbiwgc2tleSwg c2tleV9hdHRvZmYsIE5VTEwsIDApOwogCiAJLyogVHJ5IHRvIGZpbmQgdGhlIHR1cGxlICovCi0J d2hpbGUgKGluZGV4X2dldG5leHRfc2xvdChzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgc2Nh bnNsb3QpKQorCXdoaWxlICh0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Qoc2NhbiwgRm9yd2FyZFNj YW5EaXJlY3Rpb24sIHNjYW5zbG90KSkKIAl7CiAJCS8qCiAJCSAqIEF2b2lkIGV4cGVuc2l2ZSBl cXVhbGl0eSBjaGVjayBpZiB0aGUgaW5kZXggaXMgcHJpbWFyeSBrZXkgb3IKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVCaXRtYXBJbmRleHNjYW4uYyBiL3NyYy9iYWNrZW5k L2V4ZWN1dG9yL25vZGVCaXRtYXBJbmRleHNjYW4uYwppbmRleCA3MGM1NWVlNmQuLjcwNDVlNThl ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUJpdG1hcEluZGV4c2Nhbi5j CisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVCaXRtYXBJbmRleHNjYW4uYwpAQCAtMjA0 LDYgKzIwNCw3IEBAIEV4ZWNFbmRCaXRtYXBJbmRleFNjYW4oQml0bWFwSW5kZXhTY2FuU3RhdGUg Km5vZGUpCiAJCSAqIHdoaWNoIHdpbGwgaGF2ZSBhIG5ldyBCaXRtYXBJbmRleFNjYW5TdGF0ZSBh bmQgemVyb2VkIHN0YXRzLgogCQkgKi8KIAkJd2luc3RydW1lbnQtPm5zZWFyY2hlcyArPSBub2Rl LT5iaXNzX0luc3RydW1lbnQtPm5zZWFyY2hlczsKKwkJQXNzZXJ0KG5vZGUtPmJpc3NfSW5zdHJ1 bWVudC0+bnRhYmxlZmV0Y2hlcyA9PSAwKTsKIAl9CiAKIAkvKgpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9y L25vZGVJbmRleG9ubHlzY2FuLmMKaW5kZXggZGU2MTU0ZmQ1Li43MjlhOGEzZTUgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleG9ubHlzY2FuLmMKKysrIGIvc3JjL2Jh Y2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYwpAQCAtMzQsNyArMzQsNiBAQAogI2lu Y2x1ZGUgImFjY2Vzcy9yZWxzY2FuLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3RhYmxlYW0uaCIKICNp bmNsdWRlICJhY2Nlc3MvdHVwZGVzYy5oIgotI2luY2x1ZGUgImFjY2Vzcy92aXNpYmlsaXR5bWFw LmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ190eXBlLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3IvZXhl Y3V0b3IuaCIKICNpbmNsdWRlICJleGVjdXRvci9pbnN0cnVtZW50LmgiCkBAIC00Miw3ICs0MSw2 IEBACiAjaW5jbHVkZSAiZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5oIgogI2luY2x1ZGUgIm1pc2Nh ZG1pbi5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmbWdyLmgiCi0jaW5jbHVkZSAic3RvcmFnZS9w cmVkaWNhdGUuaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUgInV0aWxz L3JlbC5oIgogCkBAIC02Niw3ICs2NCw2IEBAIEluZGV4T25seU5leHQoSW5kZXhPbmx5U2NhblN0 YXRlICpub2RlKQogCVNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uOwogCUluZGV4U2NhbkRlc2Mgc2Nh bmRlc2M7CiAJVHVwbGVUYWJsZVNsb3QgKnNsb3Q7Ci0JSXRlbVBvaW50ZXIgdGlkOwogCiAJLyoK IAkgKiBleHRyYWN0IG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiBmcm9tIGluZGV4IHNjYW4gbm9kZQpA QCAtOTEsNyArODgsNyBAQCBJbmRleE9ubHlOZXh0KEluZGV4T25seVNjYW5TdGF0ZSAqbm9kZSkK IAkJICogcGFyYWxsZWwuCiAJCSAqLwogCQlzY2FuZGVzYyA9IGluZGV4X2JlZ2luc2Nhbihub2Rl LT5zcy5zc19jdXJyZW50UmVsYXRpb24sCi0JCQkJCQkJCSAgIG5vZGUtPmlvc3NfUmVsYXRpb25E ZXNjLAorCQkJCQkJCQkgICBub2RlLT5pb3NzX1JlbGF0aW9uRGVzYywgdHJ1ZSwKIAkJCQkJCQkJ ICAgZXN0YXRlLT5lc19zbmFwc2hvdCwKIAkJCQkJCQkJICAgbm9kZS0+aW9zc19JbnN0cnVtZW50 LAogCQkJCQkJCQkgICBub2RlLT5pb3NzX051bVNjYW5LZXlzLApAQCAtMTAwLDExICs5Nyw3IEBA IEluZGV4T25seU5leHQoSW5kZXhPbmx5U2NhblN0YXRlICpub2RlKQogCQkJCQkJCQkgICBTT19I SU5UX1JFTF9SRUFEX09OTFkgOiBTT19OT05FKTsKIAogCQlub2RlLT5pb3NzX1NjYW5EZXNjID0g c2NhbmRlc2M7Ci0KLQotCQkvKiBTZXQgaXQgdXAgZm9yIGluZGV4LW9ubHkgc2NhbiAqLwotCQlu b2RlLT5pb3NzX1NjYW5EZXNjLT54c193YW50X2l0dXAgPSB0cnVlOwotCQlub2RlLT5pb3NzX1ZN QnVmZmVyID0gSW52YWxpZEJ1ZmZlcjsKKwkJQXNzZXJ0KG5vZGUtPmlvc3NfU2NhbkRlc2MtPnhz X3dhbnRfaXR1cCk7CiAKIAkJLyoKIAkJICogSWYgbm8gcnVuLXRpbWUga2V5cyB0byBjYWxjdWxh dGUgb3IgdGhleSBhcmUgcmVhZHksIGdvIGFoZWFkIGFuZApAQCAtMTIxLDc4ICsxMTQsMTEgQEAg SW5kZXhPbmx5TmV4dChJbmRleE9ubHlTY2FuU3RhdGUgKm5vZGUpCiAJLyoKIAkgKiBPSywgbm93 IHRoYXQgd2UgaGF2ZSB3aGF0IHdlIG5lZWQsIGZldGNoIHRoZSBuZXh0IHR1cGxlLgogCSAqLwot CXdoaWxlICgodGlkID0gaW5kZXhfZ2V0bmV4dF90aWQoc2NhbmRlc2MsIGRpcmVjdGlvbikpICE9 IE5VTEwpCisJd2hpbGUgKHRhYmxlX2luZGV4X2dldG5leHRfc2xvdChzY2FuZGVzYywgZGlyZWN0 aW9uLAorCQkJCQkJCQkJbm9kZS0+aW9zc19UYWJsZVNsb3QpKQogCXsKLQkJYm9vbAkJdHVwbGVf ZnJvbV9oZWFwID0gZmFsc2U7Ci0KIAkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKIAotCQkvKgot CQkgKiBXZSBjYW4gc2tpcCB0aGUgaGVhcCBmZXRjaCBpZiB0aGUgVElEIHJlZmVyZW5jZXMgYSBo ZWFwIHBhZ2Ugb24KLQkJICogd2hpY2ggYWxsIHR1cGxlcyBhcmUga25vd24gdmlzaWJsZSB0byBl dmVyeWJvZHkuICBJbiBhbnkgY2FzZSwKLQkJICogd2UnbGwgdXNlIHRoZSBpbmRleCB0dXBsZSBu b3QgdGhlIGhlYXAgdHVwbGUgYXMgdGhlIGRhdGEgc291cmNlLgotCQkgKgotCQkgKiBOb3RlIG9u IE1lbW9yeSBPcmRlcmluZyBFZmZlY3RzOiB2aXNpYmlsaXR5bWFwX2dldF9zdGF0dXMgZG9lcyBu b3QKLQkJICogbG9jayB0aGUgdmlzaWJpbGl0eSBtYXAgYnVmZmVyLCBhbmQgdGhlcmVmb3JlIHRo ZSByZXN1bHQgd2UgcmVhZAotCQkgKiBoZXJlIGNvdWxkIGJlIHNsaWdodGx5IHN0YWxlLiAgSG93 ZXZlciwgaXQgY2FuJ3QgYmUgc3RhbGUgZW5vdWdoIHRvCi0JCSAqIG1hdHRlci4KLQkJICoKLQkJ ICogV2UgbmVlZCB0byBkZXRlY3QgY2xlYXJpbmcgYSBWTSBiaXQgZHVlIHRvIGFuIGluc2VydCBy aWdodCBhd2F5LAotCQkgKiBiZWNhdXNlIHRoZSB0dXBsZSBpcyBwcmVzZW50IGluIHRoZSBpbmRl eCBwYWdlIGJ1dCBub3QgdmlzaWJsZS4gVGhlCi0JCSAqIHJlYWRpbmcgb2YgdGhlIFRJRCBieSB0 aGlzIHNjYW4gKHVzaW5nIGEgc2hhcmVkIGxvY2sgb24gdGhlIGluZGV4Ci0JCSAqIGJ1ZmZlcikg aXMgc2VyaWFsaXplZCB3aXRoIHRoZSBpbnNlcnQgb2YgdGhlIFRJRCBpbnRvIHRoZSBpbmRleAot CQkgKiAodXNpbmcgYW4gZXhjbHVzaXZlIGxvY2sgb24gdGhlIGluZGV4IGJ1ZmZlcikuIEJlY2F1 c2UgdGhlIFZNIGJpdAotCQkgKiBpcyBjbGVhcmVkIGJlZm9yZSB1cGRhdGluZyB0aGUgaW5kZXgs IGFuZCBsb2NraW5nL3VubG9ja2luZyBvZiB0aGUKLQkJICogaW5kZXggcGFnZSBhY3RzIGFzIGEg ZnVsbCBtZW1vcnkgYmFycmllciwgd2UgYXJlIHN1cmUgdG8gc2VlIHRoZQotCQkgKiBjbGVhcmVk IGJpdCBpZiB3ZSBzZWUgYSByZWNlbnRseS1pbnNlcnRlZCBUSUQuCi0JCSAqCi0JCSAqIERlbGV0 ZXMgZG8gbm90IHVwZGF0ZSB0aGUgaW5kZXggcGFnZSAob25seSBWQUNVVU0gd2lsbCBjbGVhciBv dXQKLQkJICogdGhlIFRJRCksIHNvIHRoZSBjbGVhcmluZyBvZiB0aGUgVk0gYml0IGJ5IGEgZGVs ZXRlIGlzIG5vdAotCQkgKiBzZXJpYWxpemVkIHdpdGggdGhpcyB0ZXN0IGJlbG93LCBhbmQgd2Ug bWF5IHNlZSBhIHZhbHVlIHRoYXQgaXMKLQkJICogc2lnbmlmaWNhbnRseSBzdGFsZS4gSG93ZXZl ciwgd2UgZG9uJ3QgY2FyZSBhYm91dCB0aGUgZGVsZXRlIHJpZ2h0Ci0JCSAqIGF3YXksIGJlY2F1 c2UgdGhlIHR1cGxlIGlzIHN0aWxsIHZpc2libGUgdW50aWwgdGhlIGRlbGV0aW5nCi0JCSAqIHRy YW5zYWN0aW9uIGNvbW1pdHMgb3IgdGhlIHN0YXRlbWVudCBlbmRzIChpZiBpdCdzIG91cgotCQkg KiB0cmFuc2FjdGlvbikuIEluIGVpdGhlciBjYXNlLCB0aGUgbG9jayBvbiB0aGUgVk0gYnVmZmVy IHdpbGwgaGF2ZQotCQkgKiBiZWVuIHJlbGVhc2VkIChhY3RpbmcgYXMgYSB3cml0ZSBiYXJyaWVy KSBhZnRlciBjbGVhcmluZyB0aGUgYml0LgotCQkgKiBBbmQgZm9yIHVzIHRvIGhhdmUgYSBzbmFw c2hvdCB0aGF0IGluY2x1ZGVzIHRoZSBkZWxldGluZwotCQkgKiB0cmFuc2FjdGlvbiAobWFraW5n IHRoZSB0dXBsZSBpbnZpc2libGUpLCB3ZSBtdXN0IGhhdmUgYWNxdWlyZWQKLQkJICogUHJvY0Fy cmF5TG9jayBhZnRlciB0aGF0IHRpbWUsIGFjdGluZyBhcyBhIHJlYWQgYmFycmllci4KLQkJICoK LQkJICogSXQncyB3b3J0aCBnb2luZyB0aHJvdWdoIHRoaXMgY29tcGxleGl0eSB0byBhdm9pZCBu ZWVkaW5nIHRvIGxvY2sKLQkJICogdGhlIFZNIGJ1ZmZlciwgd2hpY2ggY291bGQgY2F1c2Ugc2ln bmlmaWNhbnQgY29udGVudGlvbi4KLQkJICovCi0JCWlmICghVk1fQUxMX1ZJU0lCTEUoc2NhbmRl c2MtPmhlYXBSZWxhdGlvbiwKLQkJCQkJCQlJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCks Ci0JCQkJCQkJJm5vZGUtPmlvc3NfVk1CdWZmZXIpKQotCQl7Ci0JCQkvKgotCQkJICogUmF0cywg d2UgaGF2ZSB0byB2aXNpdCB0aGUgaGVhcCB0byBjaGVjayB2aXNpYmlsaXR5LgotCQkJICovCi0J CQlJbnN0ckNvdW50VHVwbGVzMihub2RlLCAxKTsKLQkJCWlmICghaW5kZXhfZmV0Y2hfaGVhcChz Y2FuZGVzYywgbm9kZS0+aW9zc19UYWJsZVNsb3QpKQotCQkJCWNvbnRpbnVlOwkJLyogbm8gdmlz aWJsZSB0dXBsZSwgdHJ5IG5leHQgaW5kZXggZW50cnkgKi8KLQotCQkJRXhlY0NsZWFyVHVwbGUo bm9kZS0+aW9zc19UYWJsZVNsb3QpOwotCi0JCQkvKgotCQkJICogT25seSBNVkNDIHNuYXBzaG90 cyBhcmUgc3VwcG9ydGVkIGhlcmUsIHNvIHRoZXJlIHNob3VsZCBiZSBubwotCQkJICogbmVlZCB0 byBrZWVwIGZvbGxvd2luZyB0aGUgSE9UIGNoYWluIG9uY2UgYSB2aXNpYmxlIGVudHJ5IGhhcwot CQkJICogYmVlbiBmb3VuZC4gIElmIHdlIGRpZCB3YW50IHRvIGFsbG93IHRoYXQsIHdlJ2QgbmVl ZCB0byBrZWVwCi0JCQkgKiBtb3JlIHN0YXRlIHRvIHJlbWVtYmVyIG5vdCB0byBjYWxsIGluZGV4 X2dldG5leHRfdGlkIG5leHQgdGltZS4KLQkJCSAqLwotCQkJaWYgKHNjYW5kZXNjLT54c19oZWFw X2NvbnRpbnVlKQotCQkJCWVsb2coRVJST1IsICJub24tTVZDQyBzbmFwc2hvdHMgYXJlIG5vdCBz dXBwb3J0ZWQgaW4gaW5kZXgtb25seSBzY2FucyIpOwotCi0JCQkvKgotCQkJICogTm90ZTogYXQg dGhpcyBwb2ludCB3ZSBhcmUgaG9sZGluZyBhIHBpbiBvbiB0aGUgaGVhcCBwYWdlLCBhcwotCQkJ ICogcmVjb3JkZWQgaW4gc2NhbmRlc2MtPnhzX2NidWYuICBXZSBjb3VsZCByZWxlYXNlIHRoYXQg cGluIG5vdywKLQkJCSAqIGJ1dCBpdCdzIG5vdCBjbGVhciB3aGV0aGVyIGl0J3MgYSB3aW4gdG8g ZG8gc28uICBUaGUgbmV4dCBpbmRleAotCQkJICogZW50cnkgbWlnaHQgcmVxdWlyZSBhIHZpc2l0 IHRvIHRoZSBzYW1lIGhlYXAgcGFnZS4KLQkJCSAqLwotCi0JCQl0dXBsZV9mcm9tX2hlYXAgPSB0 cnVlOwotCQl9Ci0KIAkJLyoKIAkJICogRmlsbCB0aGUgc2NhbiB0dXBsZSBzbG90IHdpdGggZGF0 YSBmcm9tIHRoZSBpbmRleC4gIFRoaXMgbWlnaHQgYmUKIAkJICogcHJvdmlkZWQgaW4gZWl0aGVy IEhlYXBUdXBsZSBvciBJbmRleFR1cGxlIGZvcm1hdC4gIENvbmNlaXZhYmx5IGFuCkBAIC0yNDEs MTYgKzE2Nyw2IEBAIEluZGV4T25seU5leHQoSW5kZXhPbmx5U2NhblN0YXRlICpub2RlKQogCQkJ ZXJlcG9ydChFUlJPUiwKIAkJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JU RUQpLAogCQkJCQkgZXJybXNnKCJsb3NzeSBkaXN0YW5jZSBmdW5jdGlvbnMgYXJlIG5vdCBzdXBw b3J0ZWQgaW4gaW5kZXgtb25seSBzY2FucyIpKSk7Ci0KLQkJLyoKLQkJICogSWYgd2UgZGlkbid0 IGFjY2VzcyB0aGUgaGVhcCwgdGhlbiB3ZSdsbCBuZWVkIHRvIHRha2UgYSBwcmVkaWNhdGUKLQkJ ICogbG9jayBleHBsaWNpdGx5LCBhcyBpZiB3ZSBoYWQuICBGb3Igbm93IHdlIGRvIHRoYXQgYXQg cGFnZSBsZXZlbC4KLQkJICovCi0JCWlmICghdHVwbGVfZnJvbV9oZWFwKQotCQkJUHJlZGljYXRl TG9ja1BhZ2Uoc2NhbmRlc2MtPmhlYXBSZWxhdGlvbiwKLQkJCQkJCQkgIEl0ZW1Qb2ludGVyR2V0 QmxvY2tOdW1iZXIodGlkKSwKLQkJCQkJCQkgIGVzdGF0ZS0+ZXNfc25hcHNob3QpOwotCiAJCXJl dHVybiBzbG90OwogCX0KIApAQCAtNDEwLDEzICszMjYsNiBAQCBFeGVjRW5kSW5kZXhPbmx5U2Nh bihJbmRleE9ubHlTY2FuU3RhdGUgKm5vZGUpCiAJaW5kZXhSZWxhdGlvbkRlc2MgPSBub2RlLT5p b3NzX1JlbGF0aW9uRGVzYzsKIAlpbmRleFNjYW5EZXNjID0gbm9kZS0+aW9zc19TY2FuRGVzYzsK IAotCS8qIFJlbGVhc2UgVk0gYnVmZmVyIHBpbiwgaWYgYW55LiAqLwotCWlmIChub2RlLT5pb3Nz X1ZNQnVmZmVyICE9IEludmFsaWRCdWZmZXIpCi0JewotCQlSZWxlYXNlQnVmZmVyKG5vZGUtPmlv c3NfVk1CdWZmZXIpOwotCQlub2RlLT5pb3NzX1ZNQnVmZmVyID0gSW52YWxpZEJ1ZmZlcjsKLQl9 Ci0KIAkvKgogCSAqIFdoZW4gZW5kaW5nIGEgcGFyYWxsZWwgd29ya2VyLCBjb3B5IHRoZSBzdGF0 aXN0aWNzIGdhdGhlcmVkIGJ5IHRoZQogCSAqIHdvcmtlciBiYWNrIGludG8gc2hhcmVkIG1lbW9y eSBzbyB0aGF0IGl0IGNhbiBiZSBwaWNrZWQgdXAgYnkgdGhlIG1haW4KQEAgLTQzNiw2ICszNDUs NyBAQCBFeGVjRW5kSW5kZXhPbmx5U2NhbihJbmRleE9ubHlTY2FuU3RhdGUgKm5vZGUpCiAJCSAq IHdoaWNoIHdpbGwgaGF2ZSBhIG5ldyBJbmRleE9ubHlTY2FuU3RhdGUgYW5kIHplcm9lZCBzdGF0 cy4KIAkJICovCiAJCXdpbnN0cnVtZW50LT5uc2VhcmNoZXMgKz0gbm9kZS0+aW9zc19JbnN0cnVt ZW50LT5uc2VhcmNoZXM7CisJCXdpbnN0cnVtZW50LT5udGFibGVmZXRjaGVzICs9IG5vZGUtPmlv c3NfSW5zdHJ1bWVudC0+bnRhYmxlZmV0Y2hlczsKIAl9CiAKIAkvKgpAQCAtNzkyLDE1ICs3MDIs MTQgQEAgRXhlY0luZGV4T25seVNjYW5Jbml0aWFsaXplRFNNKEluZGV4T25seVNjYW5TdGF0ZSAq bm9kZSwKIAogCW5vZGUtPmlvc3NfU2NhbkRlc2MgPQogCQlpbmRleF9iZWdpbnNjYW5fcGFyYWxs ZWwobm9kZS0+c3Muc3NfY3VycmVudFJlbGF0aW9uLAotCQkJCQkJCQkgbm9kZS0+aW9zc19SZWxh dGlvbkRlc2MsCisJCQkJCQkJCSBub2RlLT5pb3NzX1JlbGF0aW9uRGVzYywgdHJ1ZSwKIAkJCQkJ CQkJIG5vZGUtPmlvc3NfSW5zdHJ1bWVudCwKIAkJCQkJCQkJIG5vZGUtPmlvc3NfTnVtU2Nhbktl eXMsCiAJCQkJCQkJCSBub2RlLT5pb3NzX051bU9yZGVyQnlLZXlzLAogCQkJCQkJCQkgcGlzY2Fu LAogCQkJCQkJCQkgU2NhblJlbElzUmVhZE9ubHkoJm5vZGUtPnNzKSA/CiAJCQkJCQkJCSBTT19I SU5UX1JFTF9SRUFEX09OTFkgOiBTT19OT05FKTsKLQlub2RlLT5pb3NzX1NjYW5EZXNjLT54c193 YW50X2l0dXAgPSB0cnVlOwotCW5vZGUtPmlvc3NfVk1CdWZmZXIgPSBJbnZhbGlkQnVmZmVyOwor CUFzc2VydChub2RlLT5pb3NzX1NjYW5EZXNjLT54c193YW50X2l0dXApOwogCiAJLyoKIAkgKiBJ ZiBubyBydW4tdGltZSBrZXlzIHRvIGNhbGN1bGF0ZSBvciB0aGV5IGFyZSByZWFkeSwgZ28gYWhl YWQgYW5kIHBhc3MKQEAgLTg2MCwxNCArNzY5LDE0IEBAIEV4ZWNJbmRleE9ubHlTY2FuSW5pdGlh bGl6ZVdvcmtlcihJbmRleE9ubHlTY2FuU3RhdGUgKm5vZGUsCiAKIAlub2RlLT5pb3NzX1NjYW5E ZXNjID0KIAkJaW5kZXhfYmVnaW5zY2FuX3BhcmFsbGVsKG5vZGUtPnNzLnNzX2N1cnJlbnRSZWxh dGlvbiwKLQkJCQkJCQkJIG5vZGUtPmlvc3NfUmVsYXRpb25EZXNjLAorCQkJCQkJCQkgbm9kZS0+ aW9zc19SZWxhdGlvbkRlc2MsIHRydWUsCiAJCQkJCQkJCSBub2RlLT5pb3NzX0luc3RydW1lbnQs CiAJCQkJCQkJCSBub2RlLT5pb3NzX051bVNjYW5LZXlzLAogCQkJCQkJCQkgbm9kZS0+aW9zc19O dW1PcmRlckJ5S2V5cywKIAkJCQkJCQkJIHBpc2NhbiwKIAkJCQkJCQkJIFNjYW5SZWxJc1JlYWRP bmx5KCZub2RlLT5zcykgPwogCQkJCQkJCQkgU09fSElOVF9SRUxfUkVBRF9PTkxZIDogU09fTk9O RSk7Ci0Jbm9kZS0+aW9zc19TY2FuRGVzYy0+eHNfd2FudF9pdHVwID0gdHJ1ZTsKKwlBc3NlcnQo bm9kZS0+aW9zc19TY2FuRGVzYy0+eHNfd2FudF9pdHVwKTsKIAogCS8qCiAJICogSWYgbm8gcnVu LXRpbWUga2V5cyB0byBjYWxjdWxhdGUgb3IgdGhleSBhcmUgcmVhZHksIGdvIGFoZWFkIGFuZCBw YXNzCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhzY2FuLmMgYi9z cmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhzY2FuLmMKaW5kZXggMTYyMGQxNDYwLi40OWFj OWZkMmMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleHNjYW4uYwor KysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhzY2FuLmMKQEAgLTEwOSw3ICsxMDks NyBAQCBJbmRleE5leHQoSW5kZXhTY2FuU3RhdGUgKm5vZGUpCiAJCSAqIHNlcmlhbGx5IGV4ZWN1 dGluZyBhbiBpbmRleCBzY2FuIHRoYXQgd2FzIHBsYW5uZWQgdG8gYmUgcGFyYWxsZWwuCiAJCSAq LwogCQlzY2FuZGVzYyA9IGluZGV4X2JlZ2luc2Nhbihub2RlLT5zcy5zc19jdXJyZW50UmVsYXRp b24sCi0JCQkJCQkJCSAgIG5vZGUtPmlzc19SZWxhdGlvbkRlc2MsCisJCQkJCQkJCSAgIG5vZGUt Pmlzc19SZWxhdGlvbkRlc2MsIGZhbHNlLAogCQkJCQkJCQkgICBlc3RhdGUtPmVzX3NuYXBzaG90 LAogCQkJCQkJCQkgICBub2RlLT5pc3NfSW5zdHJ1bWVudCwKIAkJCQkJCQkJICAgbm9kZS0+aXNz X051bVNjYW5LZXlzLApAQCAtMTMyLDcgKzEzMiw3IEBAIEluZGV4TmV4dChJbmRleFNjYW5TdGF0 ZSAqbm9kZSkKIAkvKgogCSAqIG9rLCBub3cgdGhhdCB3ZSBoYXZlIHdoYXQgd2UgbmVlZCwgZmV0 Y2ggdGhlIG5leHQgdHVwbGUuCiAJICovCi0Jd2hpbGUgKGluZGV4X2dldG5leHRfc2xvdChzY2Fu ZGVzYywgZGlyZWN0aW9uLCBzbG90KSkKKwl3aGlsZSAodGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90 KHNjYW5kZXNjLCBkaXJlY3Rpb24sIHNsb3QpKQogCXsKIAkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMo KTsKIApAQCAtMjA3LDcgKzIwNyw3IEBAIEluZGV4TmV4dFdpdGhSZW9yZGVyKEluZGV4U2NhblN0 YXRlICpub2RlKQogCQkgKiBzZXJpYWxseSBleGVjdXRpbmcgYW4gaW5kZXggc2NhbiB0aGF0IHdh cyBwbGFubmVkIHRvIGJlIHBhcmFsbGVsLgogCQkgKi8KIAkJc2NhbmRlc2MgPSBpbmRleF9iZWdp bnNjYW4obm9kZS0+c3Muc3NfY3VycmVudFJlbGF0aW9uLAotCQkJCQkJCQkgICBub2RlLT5pc3Nf UmVsYXRpb25EZXNjLAorCQkJCQkJCQkgICBub2RlLT5pc3NfUmVsYXRpb25EZXNjLCBmYWxzZSwK IAkJCQkJCQkJICAgZXN0YXRlLT5lc19zbmFwc2hvdCwKIAkJCQkJCQkJICAgbm9kZS0+aXNzX0lu c3RydW1lbnQsCiAJCQkJCQkJCSAgIG5vZGUtPmlzc19OdW1TY2FuS2V5cywKQEAgLTI2Niw3ICsy NjYsNyBAQCBJbmRleE5leHRXaXRoUmVvcmRlcihJbmRleFNjYW5TdGF0ZSAqbm9kZSkKIAkJICog RmV0Y2ggbmV4dCB0dXBsZSBmcm9tIHRoZSBpbmRleC4KIAkJICovCiBuZXh0X2luZGV4dHVwbGU6 Ci0JCWlmICghaW5kZXhfZ2V0bmV4dF9zbG90KHNjYW5kZXNjLCBGb3J3YXJkU2NhbkRpcmVjdGlv biwgc2xvdCkpCisJCWlmICghdGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90KHNjYW5kZXNjLCBGb3J3 YXJkU2NhbkRpcmVjdGlvbiwgc2xvdCkpCiAJCXsKIAkJCS8qCiAJCQkgKiBObyBtb3JlIHR1cGxl cyBmcm9tIHRoZSBpbmRleC4gIEJ1dCB3ZSBzdGlsbCBuZWVkIHRvIGRyYWluIGFueQpAQCAtODE4 LDYgKzgxOCw3IEBAIEV4ZWNFbmRJbmRleFNjYW4oSW5kZXhTY2FuU3RhdGUgKm5vZGUpCiAJCSAq IHdoaWNoIHdpbGwgaGF2ZSBhIG5ldyBJbmRleE9ubHlTY2FuU3RhdGUgYW5kIHplcm9lZCBzdGF0 cy4KIAkJICovCiAJCXdpbnN0cnVtZW50LT5uc2VhcmNoZXMgKz0gbm9kZS0+aXNzX0luc3RydW1l bnQtPm5zZWFyY2hlczsKKwkJQXNzZXJ0KG5vZGUtPmlzc19JbnN0cnVtZW50LT5udGFibGVmZXRj aGVzID09IDApOwogCX0KIAogCS8qCkBAIC0xNzMwLDcgKzE3MzEsNyBAQCBFeGVjSW5kZXhTY2Fu SW5pdGlhbGl6ZURTTShJbmRleFNjYW5TdGF0ZSAqbm9kZSwKIAogCW5vZGUtPmlzc19TY2FuRGVz YyA9CiAJCWluZGV4X2JlZ2luc2Nhbl9wYXJhbGxlbChub2RlLT5zcy5zc19jdXJyZW50UmVsYXRp b24sCi0JCQkJCQkJCSBub2RlLT5pc3NfUmVsYXRpb25EZXNjLAorCQkJCQkJCQkgbm9kZS0+aXNz X1JlbGF0aW9uRGVzYywgZmFsc2UsCiAJCQkJCQkJCSBub2RlLT5pc3NfSW5zdHJ1bWVudCwKIAkJ CQkJCQkJIG5vZGUtPmlzc19OdW1TY2FuS2V5cywKIAkJCQkJCQkJIG5vZGUtPmlzc19OdW1PcmRl ckJ5S2V5cywKQEAgLTE3OTYsNyArMTc5Nyw3IEBAIEV4ZWNJbmRleFNjYW5Jbml0aWFsaXplV29y a2VyKEluZGV4U2NhblN0YXRlICpub2RlLAogCiAJbm9kZS0+aXNzX1NjYW5EZXNjID0KIAkJaW5k ZXhfYmVnaW5zY2FuX3BhcmFsbGVsKG5vZGUtPnNzLnNzX2N1cnJlbnRSZWxhdGlvbiwKLQkJCQkJ CQkJIG5vZGUtPmlzc19SZWxhdGlvbkRlc2MsCisJCQkJCQkJCSBub2RlLT5pc3NfUmVsYXRpb25E ZXNjLCBmYWxzZSwKIAkJCQkJCQkJIG5vZGUtPmlzc19JbnN0cnVtZW50LAogCQkJCQkJCQkgbm9k ZS0+aXNzX051bVNjYW5LZXlzLAogCQkJCQkJCQkgbm9kZS0+aXNzX051bU9yZGVyQnlLZXlzLApk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3JpX3RyaWdnZXJzLmMgYi9zcmMvYmFj a2VuZC91dGlscy9hZHQvcmlfdHJpZ2dlcnMuYwppbmRleCAyZGUwOGRhNjUuLjM2NmE5YzFkYSAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3JpX3RyaWdnZXJzLmMKKysrIGIvc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L3JpX3RyaWdnZXJzLmMKQEAgLTI3MjMsNyArMjcyMyw3IEBAIHJp X0Zhc3RQYXRoQ2hlY2soY29uc3QgUklfQ29uc3RyYWludEluZm8gKnJpaW5mbywKIAlpZHhfcmVs ID0gaW5kZXhfb3BlbihyaWluZm8tPmNvbmluZGlkLCBBY2Nlc3NTaGFyZUxvY2spOwogCiAJc2xv dCA9IHRhYmxlX3Nsb3RfY3JlYXRlKHBrX3JlbCwgTlVMTCk7Ci0Jc2NhbmRlc2MgPSBpbmRleF9i ZWdpbnNjYW4ocGtfcmVsLCBpZHhfcmVsLAorCXNjYW5kZXNjID0gaW5kZXhfYmVnaW5zY2FuKHBr X3JlbCwgaWR4X3JlbCwgZmFsc2UsCiAJCQkJCQkJICAgc25hcHNob3QsIE5VTEwsCiAJCQkJCQkJ ICAgcmlpbmZvLT5ua2V5cywgMCwKIAkJCQkJCQkgICBTT19OT05FKTsKQEAgLTI3NzksNyArMjc3 OSw3IEBAIHJpX0Zhc3RQYXRoUHJvYmVPbmUoUmVsYXRpb24gcGtfcmVsLCBSZWxhdGlvbiBpZHhf cmVsLAogCiAJaW5kZXhfcmVzY2FuKHNjYW5kZXNjLCBza2V5LCBua2V5cywgTlVMTCwgMCk7CiAK LQlpZiAoaW5kZXhfZ2V0bmV4dF9zbG90KHNjYW5kZXNjLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwg c2xvdCkpCisJaWYgKHRhYmxlX2luZGV4X2dldG5leHRfc2xvdChzY2FuZGVzYywgRm9yd2FyZFNj YW5EaXJlY3Rpb24sIHNsb3QpKQogCXsKIAkJYm9vbAkJY29uY3VycmVudGx5X3VwZGF0ZWQ7CiAK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5jIGIvc3JjL2JhY2tl bmQvdXRpbHMvYWR0L3NlbGZ1bmNzLmMKaW5kZXggNDE2MGQyZDZlLi42YTFkZmFiNTEgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5k L3V0aWxzL2FkdC9zZWxmdW5jcy5jCkBAIC0xMDIsNyArMTAyLDYgQEAKICNpbmNsdWRlICJhY2Nl c3MvZ2luLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3RhYmxlLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3Rh YmxlYW0uaCIKLSNpbmNsdWRlICJhY2Nlc3MvdmlzaWJpbGl0eW1hcC5oIgogI2luY2x1ZGUgImNh dGFsb2cvcGdfY29sbGF0aW9uLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19vcGVyYXRvci5oIgog I2luY2x1ZGUgImNhdGFsb2cvcGdfc3RhdGlzdGljLmgiCkBAIC03MTIxLDEwICs3MTIwLDYgQEAg Z2V0X2FjdHVhbF92YXJpYWJsZV9lbmRwb2ludChSZWxhdGlvbiBoZWFwUmVsLAogCWJvb2wJCWhh dmVfZGF0YSA9IGZhbHNlOwogCVNuYXBzaG90RGF0YSBTbmFwc2hvdE5vblZhY3V1bWFibGU7CiAJ SW5kZXhTY2FuRGVzYyBpbmRleF9zY2FuOwotCUJ1ZmZlcgkJdm1idWZmZXIgPSBJbnZhbGlkQnVm ZmVyOwotCUJsb2NrTnVtYmVyIGxhc3RfaGVhcF9ibG9jayA9IEludmFsaWRCbG9ja051bWJlcjsK LQlpbnQJCQluX3Zpc2l0ZWRfaGVhcF9wYWdlcyA9IDA7Ci0JSXRlbVBvaW50ZXIgdGlkOwogCURh dHVtCQl2YWx1ZXNbSU5ERVhfTUFYX0tFWVNdOwogCWJvb2wJCWlzbnVsbFtJTkRFWF9NQVhfS0VZ U107CiAJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OwpAQCAtNzE3Miw2MiArNzE2NywyNiBAQCBn ZXRfYWN0dWFsX3ZhcmlhYmxlX2VuZHBvaW50KFJlbGF0aW9uIGhlYXBSZWwsCiAJICogYSBodWdl IGFtb3VudCBvZiB0aW1lIGhlcmUsIHNvIHdlIGdpdmUgdXAgb25jZSB3ZSd2ZSByZWFkIHRvbyBt YW55IGhlYXAKIAkgKiBwYWdlcy4gIFdoZW4gd2UgZmFpbCBmb3IgdGhhdCByZWFzb24sIHRoZSBj YWxsZXIgd2lsbCBlbmQgdXAgdXNpbmcKIAkgKiB3aGF0ZXZlciBleHRyZW1hbCB2YWx1ZSBpcyBy ZWNvcmRlZCBpbiBwZ19zdGF0aXN0aWMuCisJICoKKwkgKiBXZSBzZXQgeHNfdmlzaXRlZF9wYWdl c19saW1pdCB0byB0ZWxsIHRoZSB0YWJsZSBBTSB0byBjb3VudCBkaXN0aW5jdAorCSAqIGhlYXAg cGFnZXMgdmlzaXRlZCBmb3Igbm9uLXZpc2libGUgdHVwbGVzIGFuZCBnaXZlIHVwIGFmdGVyIHRo ZSBsaW1pdAorCSAqIGlzIGV4Y2VlZGVkLgogCSAqLworI2RlZmluZSBWSVNJVEVEX1BBR0VTX0xJ TUlUIDEwMAogCUluaXROb25WYWN1dW1hYmxlU25hcHNob3QoU25hcHNob3ROb25WYWN1dW1hYmxl LAogCQkJCQkJCSAgR2xvYmFsVmlzVGVzdEZvcihoZWFwUmVsKSk7CiAKLQlpbmRleF9zY2FuID0g aW5kZXhfYmVnaW5zY2FuKGhlYXBSZWwsIGluZGV4UmVsLAorCWluZGV4X3NjYW4gPSBpbmRleF9i ZWdpbnNjYW4oaGVhcFJlbCwgaW5kZXhSZWwsIHRydWUsCiAJCQkJCQkJCSAmU25hcHNob3ROb25W YWN1dW1hYmxlLCBOVUxMLAogCQkJCQkJCQkgMSwgMCwKIAkJCQkJCQkJIFNPX05PTkUpOwotCS8q IFNldCBpdCB1cCBmb3IgaW5kZXgtb25seSBzY2FuICovCi0JaW5kZXhfc2Nhbi0+eHNfd2FudF9p dHVwID0gdHJ1ZTsKKwlBc3NlcnQoaW5kZXhfc2Nhbi0+eHNfd2FudF9pdHVwKTsKKwlpbmRleF9z Y2FuLT54c192aXNpdGVkX3BhZ2VzX2xpbWl0ID0gVklTSVRFRF9QQUdFU19MSU1JVDsKIAlpbmRl eF9yZXNjYW4oaW5kZXhfc2Nhbiwgc2NhbmtleXMsIDEsIE5VTEwsIDApOwogCiAJLyogRmV0Y2gg Zmlyc3QvbmV4dCB0dXBsZSBpbiBzcGVjaWZpZWQgZGlyZWN0aW9uICovCi0Jd2hpbGUgKCh0aWQg PSBpbmRleF9nZXRuZXh0X3RpZChpbmRleF9zY2FuLCBpbmRleHNjYW5kaXIpKSAhPSBOVUxMKQor CXdoaWxlICh0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3QoaW5kZXhfc2NhbiwgaW5kZXhzY2FuZGly LCB0YWJsZXNsb3QpKQogCXsKLQkJQmxvY2tOdW1iZXIgYmxvY2sgPSBJdGVtUG9pbnRlckdldEJs b2NrTnVtYmVyKHRpZCk7Ci0KLQkJaWYgKCFWTV9BTExfVklTSUJMRShoZWFwUmVsLAotCQkJCQkJ CWJsb2NrLAotCQkJCQkJCSZ2bWJ1ZmZlcikpCi0JCXsKLQkJCS8qIFJhdHMsIHdlIGhhdmUgdG8g dmlzaXQgdGhlIGhlYXAgdG8gY2hlY2sgdmlzaWJpbGl0eSAqLwotCQkJaWYgKCFpbmRleF9mZXRj aF9oZWFwKGluZGV4X3NjYW4sIHRhYmxlc2xvdCkpCi0JCQl7Ci0JCQkJLyoKLQkJCQkgKiBObyB2 aXNpYmxlIHR1cGxlIGZvciB0aGlzIGluZGV4IGVudHJ5LCBzbyB3ZSBuZWVkIHRvCi0JCQkJICog YWR2YW5jZSB0byB0aGUgbmV4dCBlbnRyeS4gIEJlZm9yZSBkb2luZyBzbywgY291bnQgaGVhcAot CQkJCSAqIHBhZ2UgZmV0Y2hlcyBhbmQgZ2l2ZSB1cCBpZiB3ZSd2ZSBkb25lIHRvbyBtYW55Lgot CQkJCSAqCi0JCQkJICogV2UgZG9uJ3QgY2hhcmdlIGEgcGFnZSBmZXRjaCBpZiB0aGlzIGlzIHRo ZSBzYW1lIGhlYXAgcGFnZQotCQkJCSAqIGFzIHRoZSBwcmV2aW91cyB0dXBsZS4gIFRoaXMgaXMg b24gdGhlIGNvbnNlcnZhdGl2ZSBzaWRlLAotCQkJCSAqIHNpbmNlIG90aGVyIHJlY2VudGx5LWFj Y2Vzc2VkIHBhZ2VzIGFyZSBwcm9iYWJseSBzdGlsbCBpbgotCQkJCSAqIGJ1ZmZlcnMgdG9vOyBi dXQgaXQncyBnb29kIGVub3VnaCBmb3IgdGhpcyBoZXVyaXN0aWMuCi0JCQkJICovCi0jZGVmaW5l IFZJU0lURURfUEFHRVNfTElNSVQgMTAwCi0KLQkJCQlpZiAoYmxvY2sgIT0gbGFzdF9oZWFwX2Js b2NrKQotCQkJCXsKLQkJCQkJbGFzdF9oZWFwX2Jsb2NrID0gYmxvY2s7Ci0JCQkJCW5fdmlzaXRl ZF9oZWFwX3BhZ2VzKys7Ci0JCQkJCWlmIChuX3Zpc2l0ZWRfaGVhcF9wYWdlcyA+IFZJU0lURURf UEFHRVNfTElNSVQpCi0JCQkJCQlicmVhazsKLQkJCQl9Ci0KLQkJCQljb250aW51ZTsJCS8qIG5v IHZpc2libGUgdHVwbGUsIHRyeSBuZXh0IGluZGV4IGVudHJ5ICovCi0JCQl9Ci0KLQkJCS8qIFdl IGRvbid0IGFjdHVhbGx5IG5lZWQgdGhlIGhlYXAgdHVwbGUgZm9yIGFueXRoaW5nICovCi0JCQlF eGVjQ2xlYXJUdXBsZSh0YWJsZXNsb3QpOwotCi0JCQkvKgotCQkJICogV2UgZG9uJ3QgY2FyZSB3 aGV0aGVyIHRoZXJlJ3MgbW9yZSB0aGFuIG9uZSB2aXNpYmxlIHR1cGxlIGluCi0JCQkgKiB0aGUg SE9UIGNoYWluOyBpZiBhbnkgYXJlIHZpc2libGUsIHRoYXQncyBnb29kIGVub3VnaC4KLQkJCSAq LwotCQl9Ci0KIAkJLyoKIAkJICogV2UgZXhwZWN0IHRoYXQgdGhlIGluZGV4IHdpbGwgcmV0dXJu IGRhdGEgaW4gSW5kZXhUdXBsZSBub3QKIAkJICogSGVhcFR1cGxlIGZvcm1hdC4KQEAgLTcyNTks OCArNzIxOCw2IEBAIGdldF9hY3R1YWxfdmFyaWFibGVfZW5kcG9pbnQoUmVsYXRpb24gaGVhcFJl bCwKIAkJYnJlYWs7CiAJfQogCi0JaWYgKHZtYnVmZmVyICE9IEludmFsaWRCdWZmZXIpCi0JCVJl bGVhc2VCdWZmZXIodm1idWZmZXIpOwogCWluZGV4X2VuZHNjYW4oaW5kZXhfc2Nhbik7CiAKIAly ZXR1cm4gaGF2ZV9kYXRhOwotLSAKMi41My4wCgo= --000000000000f287f9064e6de93c Content-Type: application/octet-stream; name="v20-0002-Move-heapam_handler.c-index-scan-code-to-new-fil.patch" Content-Disposition: attachment; filename="v20-0002-Move-heapam_handler.c-index-scan-code-to-new-fil.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mngmwp6i16 RnJvbSBlODIwNTliMDk0NGM5N2UyMmViNmM1ZDg4NGYyMjRiMmE4MDdiZWQxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFdl ZCwgMjUgTWFyIDIwMjYgMDA6MjI6MTcgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyMCAwMi8xN10g TW92ZSBoZWFwYW1faGFuZGxlci5jIGluZGV4IHNjYW4gY29kZSB0byBuZXcgZmlsZS4KCk1vdmUg dGhlIGhlYXBhbSBpbmRleCBmZXRjaCBjYWxsYmFja3MgKGluZGV4X2ZldGNoX2JlZ2luLAppbmRl eF9mZXRjaF9yZXNldCwgaW5kZXhfZmV0Y2hfZW5kLCBhbmQgaW5kZXhfZmV0Y2hfdHVwbGUpIGlu dG8gYSBuZXcKZGVkaWNhdGVkIGZpbGUuICBBbHNvIG1vdmUgaGVhcF9ob3Rfc2VhcmNoX2J1ZmZl ciBvdmVyLiAgVGhpcyBpcyBhCnB1cmVseSBtZWNoYW5pY2FsIG1vdmUgd2l0aCBubyBmdW5jdGlv bmFsIGltcGFjdC4KClVwY29taW5nIHdvcmsgdG8gYWRkIGEgc2xvdC1iYXNlZCB0YWJsZSBBTSBp bnRlcmZhY2UgZm9yIGluZGV4IHNjYW5zCndpbGwgc3Vic3RhbnRpYWxseSBleHBhbmQgdGhpcyBj b2RlLiAgS2VlcGluZyBpdCBpbiBoZWFwYW1faGFuZGxlci5jCndvdWxkIGNsdXR0ZXIgYSBmaWxl IHdob3NlIHByaW1hcnkgcm9sZSBpcyB0byB3aXJlIHVwIHRoZSBUYWJsZUFtUm91dGluZQpjYWxs YmFja3MuICBCaXRtYXAgaGVhcCBzY2FucyBhbmQgc2VxdWVudGlhbCBzY2FucyB3b3VsZCBiZW5l Zml0IGZyb20Kc2ltaWxhciBzZXBhcmF0aW9uIGluIHRoZSBmdXR1cmUuCgpBdXRob3I6IFBldGVy IEdlb2doZWdhbiA8cGdAYm93dC5pZT4KUmV2aWV3ZWQtQnk6IEFuZHJlcyBGcmV1bmQgPGFuZHJl c0BhbmFyYXplbC5kZT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9ibWJya2l5anhv YWw2bzV4YWR6djVidmVveW5ydDN4Mzd3cWNoN3czam53dW1rcTJ5b0BiNHptdG5yZnM0bWgKLS0t CiBzcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmggICAgICAgICAgICAgICAgfCAgMTUgKy0KIHNy Yy9iYWNrZW5kL2FjY2Vzcy9oZWFwL01ha2VmaWxlICAgICAgICAgICB8ICAgMSArCiBzcmMvYmFj a2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW0uYyAgICAgICAgICAgfCAxNjEgLS0tLS0tLS0tLS0tCiBz cmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jICAgfCAxMTEgLS0tLS0tLS0K IHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9pbmRleHNjYW4uYyB8IDI5MiArKysrKysr KysrKysrKysrKysrKysKIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL21lc29uLmJ1aWxkICAgICAg ICB8ICAgMSArCiA2IGZpbGVzIGNoYW5nZWQsIDMwNiBpbnNlcnRpb25zKCspLCAyNzUgZGVsZXRp b25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFt X2luZGV4c2Nhbi5jCgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oIGIv c3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCmluZGV4IDU0MDY3YjgyOC4uY2M5MGM4MjFiIDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKKysrIGIvc3JjL2luY2x1ZGUv YWNjZXNzL2hlYXBhbS5oCkBAIC0zNjYsOSArMzY2LDYgQEAgZXh0ZXJuIGJvb2wgaGVhcF9nZXRu ZXh0c2xvdF90aWRyYW5nZShUYWJsZVNjYW5EZXNjIHNzY2FuLAogCQkJCQkJCQkJICBUdXBsZVRh YmxlU2xvdCAqc2xvdCk7CiBleHRlcm4gYm9vbCBoZWFwX2ZldGNoKFJlbGF0aW9uIHJlbGF0aW9u LCBTbmFwc2hvdCBzbmFwc2hvdCwKIAkJCQkJICAgSGVhcFR1cGxlIHR1cGxlLCBCdWZmZXIgKnVz ZXJidWYsIGJvb2wga2VlcF9idWYpOwotZXh0ZXJuIGJvb2wgaGVhcF9ob3Rfc2VhcmNoX2J1ZmZl cihJdGVtUG9pbnRlciB0aWQsIFJlbGF0aW9uIHJlbGF0aW9uLAotCQkJCQkJCQkgICBCdWZmZXIg YnVmZmVyLCBTbmFwc2hvdCBzbmFwc2hvdCwgSGVhcFR1cGxlIGhlYXBUdXBsZSwKLQkJCQkJCQkJ ICAgYm9vbCAqYWxsX2RlYWQsIGJvb2wgZmlyc3RfY2FsbCk7CiAKIGV4dGVybiB2b2lkIGhlYXBf Z2V0X2xhdGVzdF90aWQoVGFibGVTY2FuRGVzYyBzc2NhbiwgSXRlbVBvaW50ZXIgdGlkKTsKIApA QCAtNDMxLDYgKzQyOCwxOCBAQCBleHRlcm4gdm9pZCBzaW1wbGVfaGVhcF91cGRhdGUoUmVsYXRp b24gcmVsYXRpb24sIGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAqb3RpZCwKIGV4dGVybiBUcmFuc2Fj dGlvbklkIGhlYXBfaW5kZXhfZGVsZXRlX3R1cGxlcyhSZWxhdGlvbiByZWwsCiAJCQkJCQkJCQkJ CSAgVE1fSW5kZXhEZWxldGVPcCAqZGVsc3RhdGUpOwogCisvKiBpbiBoZWFwL2hlYXBhbV9pbmRl eHNjYW4uYyAqLworZXh0ZXJuIEluZGV4RmV0Y2hUYWJsZURhdGEgKmhlYXBhbV9pbmRleF9mZXRj aF9iZWdpbihSZWxhdGlvbiByZWwsIHVpbnQzMiBmbGFncyk7CitleHRlcm4gdm9pZCBoZWFwYW1f aW5kZXhfZmV0Y2hfcmVzZXQoSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2Nhbik7CitleHRlcm4gdm9p ZCBoZWFwYW1faW5kZXhfZmV0Y2hfZW5kKEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4pOworZXh0 ZXJuIGJvb2wgaGVhcF9ob3Rfc2VhcmNoX2J1ZmZlcihJdGVtUG9pbnRlciB0aWQsIFJlbGF0aW9u IHJlbGF0aW9uLAorCQkJCQkJCQkgICBCdWZmZXIgYnVmZmVyLCBTbmFwc2hvdCBzbmFwc2hvdCwg SGVhcFR1cGxlIGhlYXBUdXBsZSwKKwkJCQkJCQkJICAgYm9vbCAqYWxsX2RlYWQsIGJvb2wgZmly c3RfY2FsbCk7CitleHRlcm4gYm9vbCBoZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGUoc3RydWN0IElu ZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4sCisJCQkJCQkJCQkgSXRlbVBvaW50ZXIgdGlkLCBTbmFw c2hvdCBzbmFwc2hvdCwKKwkJCQkJCQkJCSBUdXBsZVRhYmxlU2xvdCAqc2xvdCwgYm9vbCAqaGVh cF9jb250aW51ZSwKKwkJCQkJCQkJCSBib29sICphbGxfZGVhZCk7CisKIC8qIGluIGhlYXAvcHJ1 bmVoZWFwLmMgKi8KIGV4dGVybiB2b2lkIGhlYXBfcGFnZV9wcnVuZV9vcHQoUmVsYXRpb24gcmVs YXRpb24sIEJ1ZmZlciBidWZmZXIsCiAJCQkJCQkJCUJ1ZmZlciAqdm1idWZmZXIsIGJvb2wgcmVs X3JlYWRfb25seSk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9NYWtlZmls ZSBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL01ha2VmaWxlCmluZGV4IDM5NDUzNDE3Mi4uMWQy N2NjYjkxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9NYWtlZmlsZQorKysg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9NYWtlZmlsZQpAQCAtMTUsNiArMTUsNyBAQCBpbmNs dWRlICQodG9wX2J1aWxkZGlyKS9zcmMvTWFrZWZpbGUuZ2xvYmFsCiBPQkpTID0gXAogCWhlYXBh bS5vIFwKIAloZWFwYW1faGFuZGxlci5vIFwKKwloZWFwYW1faW5kZXhzY2FuLm8gXAogCWhlYXBh bV92aXNpYmlsaXR5Lm8gXAogCWhlYXBhbV94bG9nLm8gXAogCWhlYXB0b2FzdC5vIFwKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL2hlYXAvaGVhcGFtLmMKaW5kZXggNmJmZjAwMzJkLi5lMDZjZTJkYjIgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9oZWFwL2hlYXBhbS5jCkBAIC0xNzY0LDE2NyArMTc2NCw2IEBAIGhlYXBfZmV0Y2goUmVsYXRp b24gcmVsYXRpb24sCiAJcmV0dXJuIGZhbHNlOwogfQogCi0vKgotICoJaGVhcF9ob3Rfc2VhcmNo X2J1ZmZlcgktIHNlYXJjaCBIT1QgY2hhaW4gZm9yIHR1cGxlIHNhdGlzZnlpbmcgc25hcHNob3QK LSAqCi0gKiBPbiBlbnRyeSwgKnRpZCBpcyB0aGUgVElEIG9mIGEgdHVwbGUgKGVpdGhlciBhIHNp bXBsZSB0dXBsZSwgb3IgdGhlIHJvb3QKLSAqIG9mIGEgSE9UIGNoYWluKSwgYW5kIGJ1ZmZlciBp cyB0aGUgYnVmZmVyIGhvbGRpbmcgdGhpcyB0dXBsZS4gIFdlIHNlYXJjaAotICogZm9yIHRoZSBm aXJzdCBjaGFpbiBtZW1iZXIgc2F0aXNmeWluZyB0aGUgZ2l2ZW4gc25hcHNob3QuICBJZiBvbmUg aXMKLSAqIGZvdW5kLCB3ZSB1cGRhdGUgKnRpZCB0byByZWZlcmVuY2UgdGhhdCB0dXBsZSdzIG9m ZnNldCBudW1iZXIsIGFuZAotICogcmV0dXJuIHRydWUuICBJZiBubyBtYXRjaCwgcmV0dXJuIGZh bHNlIHdpdGhvdXQgbW9kaWZ5aW5nICp0aWQuCi0gKgotICogaGVhcFR1cGxlIGlzIGEgY2FsbGVy LXN1cHBsaWVkIGJ1ZmZlci4gIFdoZW4gYSBtYXRjaCBpcyBmb3VuZCwgd2UgcmV0dXJuCi0gKiB0 aGUgdHVwbGUgaGVyZSwgaW4gYWRkaXRpb24gdG8gdXBkYXRpbmcgKnRpZC4gIElmIG5vIG1hdGNo IGlzIGZvdW5kLCB0aGUKLSAqIGNvbnRlbnRzIG9mIHRoaXMgYnVmZmVyIG9uIHJldHVybiBhcmUg dW5kZWZpbmVkLgotICoKLSAqIElmIGFsbF9kZWFkIGlzIG5vdCBOVUxMLCB3ZSBjaGVjayBub24t dmlzaWJsZSB0dXBsZXMgdG8gc2VlIGlmIHRoZXkgYXJlCi0gKiBnbG9iYWxseSBkZWFkOyAqYWxs X2RlYWQgaXMgc2V0IHRydWUgaWYgYWxsIG1lbWJlcnMgb2YgdGhlIEhPVCBjaGFpbgotICogYXJl IHZhY3V1bWFibGUsIGZhbHNlIGlmIG5vdC4KLSAqCi0gKiBVbmxpa2UgaGVhcF9mZXRjaCwgdGhl IGNhbGxlciBtdXN0IGFscmVhZHkgaGF2ZSBwaW4gYW5kIChhdCBsZWFzdCkgc2hhcmUKLSAqIGxv Y2sgb24gdGhlIGJ1ZmZlcjsgaXQgaXMgc3RpbGwgcGlubmVkL2xvY2tlZCBhdCBleGl0LgotICov Ci1ib29sCi1oZWFwX2hvdF9zZWFyY2hfYnVmZmVyKEl0ZW1Qb2ludGVyIHRpZCwgUmVsYXRpb24g cmVsYXRpb24sIEJ1ZmZlciBidWZmZXIsCi0JCQkJCSAgIFNuYXBzaG90IHNuYXBzaG90LCBIZWFw VHVwbGUgaGVhcFR1cGxlLAotCQkJCQkgICBib29sICphbGxfZGVhZCwgYm9vbCBmaXJzdF9jYWxs KQotewotCVBhZ2UJCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGJ1ZmZlcik7Ci0JVHJhbnNhY3Rpb25J ZCBwcmV2X3htYXggPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKLQlCbG9ja051bWJlciBibGtubzsK LQlPZmZzZXROdW1iZXIgb2ZmbnVtOwotCWJvb2wJCWF0X2NoYWluX3N0YXJ0OwotCWJvb2wJCXZh bGlkOwotCWJvb2wJCXNraXA7Ci0JR2xvYmFsVmlzU3RhdGUgKnZpc3Rlc3QgPSBOVUxMOwotCi0J LyogSWYgdGhpcyBpcyBub3QgdGhlIGZpcnN0IGNhbGwsIHByZXZpb3VzIGNhbGwgcmV0dXJuZWQg YSAobGl2ZSEpIHR1cGxlICovCi0JaWYgKGFsbF9kZWFkKQotCQkqYWxsX2RlYWQgPSBmaXJzdF9j YWxsOwotCi0JYmxrbm8gPSBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCk7Ci0Jb2ZmbnVt ID0gSXRlbVBvaW50ZXJHZXRPZmZzZXROdW1iZXIodGlkKTsKLQlhdF9jaGFpbl9zdGFydCA9IGZp cnN0X2NhbGw7Ci0Jc2tpcCA9ICFmaXJzdF9jYWxsOwotCi0JLyogWFhYOiB3ZSBzaG91bGQgYXNz ZXJ0IHRoYXQgYSBzbmFwc2hvdCBpcyBwdXNoZWQgb3IgcmVnaXN0ZXJlZCAqLwotCUFzc2VydChU cmFuc2FjdGlvbklkSXNWYWxpZChSZWNlbnRYbWluKSk7Ci0JQXNzZXJ0KEJ1ZmZlckdldEJsb2Nr TnVtYmVyKGJ1ZmZlcikgPT0gYmxrbm8pOwotCi0JLyogU2NhbiB0aHJvdWdoIHBvc3NpYmxlIG11 bHRpcGxlIG1lbWJlcnMgb2YgSE9ULWNoYWluICovCi0JZm9yICg7OykKLQl7Ci0JCUl0ZW1JZAkJ bHA7Ci0KLQkJLyogY2hlY2sgZm9yIGJvZ3VzIFRJRCAqLwotCQlpZiAob2ZmbnVtIDwgRmlyc3RP ZmZzZXROdW1iZXIgfHwgb2ZmbnVtID4gUGFnZUdldE1heE9mZnNldE51bWJlcihwYWdlKSkKLQkJ CWJyZWFrOwotCi0JCWxwID0gUGFnZUdldEl0ZW1JZChwYWdlLCBvZmZudW0pOwotCi0JCS8qIGNo ZWNrIGZvciB1bnVzZWQsIGRlYWQsIG9yIHJlZGlyZWN0ZWQgaXRlbXMgKi8KLQkJaWYgKCFJdGVt SWRJc05vcm1hbChscCkpCi0JCXsKLQkJCS8qIFdlIHNob3VsZCBvbmx5IHNlZSBhIHJlZGlyZWN0 IGF0IHN0YXJ0IG9mIGNoYWluICovCi0JCQlpZiAoSXRlbUlkSXNSZWRpcmVjdGVkKGxwKSAmJiBh dF9jaGFpbl9zdGFydCkKLQkJCXsKLQkJCQkvKiBGb2xsb3cgdGhlIHJlZGlyZWN0ICovCi0JCQkJ b2ZmbnVtID0gSXRlbUlkR2V0UmVkaXJlY3QobHApOwotCQkJCWF0X2NoYWluX3N0YXJ0ID0gZmFs c2U7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQkvKiBlbHNlIG11c3QgYmUgZW5kIG9mIGNoYWlu ICovCi0JCQlicmVhazsKLQkJfQotCi0JCS8qCi0JCSAqIFVwZGF0ZSBoZWFwVHVwbGUgdG8gcG9p bnQgdG8gdGhlIGVsZW1lbnQgb2YgdGhlIEhPVCBjaGFpbiB3ZSdyZQotCQkgKiBjdXJyZW50bHkg aW52ZXN0aWdhdGluZy4gSGF2aW5nIHRfc2VsZiBzZXQgY29ycmVjdGx5IGlzIGltcG9ydGFudAot CQkgKiBiZWNhdXNlIHRoZSBTU0kgY2hlY2tzIGFuZCB0aGUgKlNhdGlzZmllcyByb3V0aW5lIGZv ciBoaXN0b3JpY2FsCi0JCSAqIE1WQ0Mgc25hcHNob3RzIG5lZWQgdGhlIGNvcnJlY3QgdGlkIHRv IGRlY2lkZSBhYm91dCB0aGUgdmlzaWJpbGl0eS4KLQkJICovCi0JCWhlYXBUdXBsZS0+dF9kYXRh ID0gKEhlYXBUdXBsZUhlYWRlcikgUGFnZUdldEl0ZW0ocGFnZSwgbHApOwotCQloZWFwVHVwbGUt PnRfbGVuID0gSXRlbUlkR2V0TGVuZ3RoKGxwKTsKLQkJaGVhcFR1cGxlLT50X3RhYmxlT2lkID0g UmVsYXRpb25HZXRSZWxpZChyZWxhdGlvbik7Ci0JCUl0ZW1Qb2ludGVyU2V0KCZoZWFwVHVwbGUt PnRfc2VsZiwgYmxrbm8sIG9mZm51bSk7Ci0KLQkJLyoKLQkJICogU2hvdWxkbid0IHNlZSBhIEhF QVBfT05MWSB0dXBsZSBhdCBjaGFpbiBzdGFydC4KLQkJICovCi0JCWlmIChhdF9jaGFpbl9zdGFy dCAmJiBIZWFwVHVwbGVJc0hlYXBPbmx5KGhlYXBUdXBsZSkpCi0JCQlicmVhazsKLQotCQkvKgot CQkgKiBUaGUgeG1pbiBzaG91bGQgbWF0Y2ggdGhlIHByZXZpb3VzIHhtYXggdmFsdWUsIGVsc2Ug Y2hhaW4gaXMKLQkJICogYnJva2VuLgotCQkgKi8KLQkJaWYgKFRyYW5zYWN0aW9uSWRJc1ZhbGlk KHByZXZfeG1heCkgJiYKLQkJCSFUcmFuc2FjdGlvbklkRXF1YWxzKHByZXZfeG1heCwKLQkJCQkJ CQkJIEhlYXBUdXBsZUhlYWRlckdldFhtaW4oaGVhcFR1cGxlLT50X2RhdGEpKSkKLQkJCWJyZWFr OwotCi0JCS8qCi0JCSAqIFdoZW4gZmlyc3RfY2FsbCBpcyB0cnVlIChhbmQgdGh1cywgc2tpcCBp cyBpbml0aWFsbHkgZmFsc2UpIHdlJ2xsCi0JCSAqIHJldHVybiB0aGUgZmlyc3QgdHVwbGUgd2Ug ZmluZC4gIEJ1dCBvbiBsYXRlciBwYXNzZXMsIGhlYXBUdXBsZQotCQkgKiB3aWxsIGluaXRpYWxs eSBiZSBwb2ludGluZyB0byB0aGUgdHVwbGUgd2UgcmV0dXJuZWQgbGFzdCB0aW1lLgotCQkgKiBS ZXR1cm5pbmcgaXQgYWdhaW4gd291bGQgYmUgaW5jb3JyZWN0IChhbmQgd291bGQgbG9vcCBmb3Jl dmVyKSwgc28KLQkJICogd2Ugc2tpcCBpdCBhbmQgcmV0dXJuIHRoZSBuZXh0IG1hdGNoIHdlIGZp bmQuCi0JCSAqLwotCQlpZiAoIXNraXApCi0JCXsKLQkJCS8qIElmIGl0J3MgdmlzaWJsZSBwZXIg dGhlIHNuYXBzaG90LCB3ZSBtdXN0IHJldHVybiBpdCAqLwotCQkJdmFsaWQgPSBIZWFwVHVwbGVT YXRpc2ZpZXNWaXNpYmlsaXR5KGhlYXBUdXBsZSwgc25hcHNob3QsIGJ1ZmZlcik7Ci0JCQlIZWFw Q2hlY2tGb3JTZXJpYWxpemFibGVDb25mbGljdE91dCh2YWxpZCwgcmVsYXRpb24sIGhlYXBUdXBs ZSwKLQkJCQkJCQkJCQkJCWJ1ZmZlciwgc25hcHNob3QpOwotCi0JCQlpZiAodmFsaWQpCi0JCQl7 Ci0JCQkJSXRlbVBvaW50ZXJTZXRPZmZzZXROdW1iZXIodGlkLCBvZmZudW0pOwotCQkJCVByZWRp Y2F0ZUxvY2tUSUQocmVsYXRpb24sICZoZWFwVHVwbGUtPnRfc2VsZiwgc25hcHNob3QsCi0JCQkJ CQkJCSBIZWFwVHVwbGVIZWFkZXJHZXRYbWluKGhlYXBUdXBsZS0+dF9kYXRhKSk7Ci0JCQkJaWYg KGFsbF9kZWFkKQotCQkJCQkqYWxsX2RlYWQgPSBmYWxzZTsKLQkJCQlyZXR1cm4gdHJ1ZTsKLQkJ CX0KLQkJfQotCQlza2lwID0gZmFsc2U7Ci0KLQkJLyoKLQkJICogSWYgd2UgY2FuJ3Qgc2VlIGl0 LCBtYXliZSBubyBvbmUgZWxzZSBjYW4gZWl0aGVyLiAgQXQgY2FsbGVyCi0JCSAqIHJlcXVlc3Qs IGNoZWNrIHdoZXRoZXIgYWxsIGNoYWluIG1lbWJlcnMgYXJlIGRlYWQgdG8gYWxsCi0JCSAqIHRy YW5zYWN0aW9ucy4KLQkJICoKLQkJICogTm90ZTogaWYgeW91IGNoYW5nZSB0aGUgY3JpdGVyaW9u IGhlcmUgZm9yIHdoYXQgaXMgImRlYWQiLCBmaXggdGhlCi0JCSAqIHBsYW5uZXIncyBnZXRfYWN0 dWFsX3ZhcmlhYmxlX3JhbmdlKCkgZnVuY3Rpb24gdG8gbWF0Y2guCi0JCSAqLwotCQlpZiAoYWxs X2RlYWQgJiYgKmFsbF9kZWFkKQotCQl7Ci0JCQlpZiAoIXZpc3Rlc3QpCi0JCQkJdmlzdGVzdCA9 IEdsb2JhbFZpc1Rlc3RGb3IocmVsYXRpb24pOwotCi0JCQlpZiAoIUhlYXBUdXBsZUlzU3VyZWx5 RGVhZChoZWFwVHVwbGUsIHZpc3Rlc3QpKQotCQkJCSphbGxfZGVhZCA9IGZhbHNlOwotCQl9Ci0K LQkJLyoKLQkJICogQ2hlY2sgdG8gc2VlIGlmIEhPVCBjaGFpbiBjb250aW51ZXMgcGFzdCB0aGlz IHR1cGxlOyBpZiBzbyBmZXRjaAotCQkgKiB0aGUgbmV4dCBvZmZudW0gYW5kIGxvb3AgYXJvdW5k LgotCQkgKi8KLQkJaWYgKEhlYXBUdXBsZUlzSG90VXBkYXRlZChoZWFwVHVwbGUpKQotCQl7Ci0J CQlBc3NlcnQoSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcigmaGVhcFR1cGxlLT50X2RhdGEtPnRf Y3RpZCkgPT0KLQkJCQkgICBibGtubyk7Ci0JCQlvZmZudW0gPSBJdGVtUG9pbnRlckdldE9mZnNl dE51bWJlcigmaGVhcFR1cGxlLT50X2RhdGEtPnRfY3RpZCk7Ci0JCQlhdF9jaGFpbl9zdGFydCA9 IGZhbHNlOwotCQkJcHJldl94bWF4ID0gSGVhcFR1cGxlSGVhZGVyR2V0VXBkYXRlWGlkKGhlYXBU dXBsZS0+dF9kYXRhKTsKLQkJfQotCQllbHNlCi0JCQlicmVhazsJCQkJLyogZW5kIG9mIGNoYWlu ICovCi0JfQotCi0JcmV0dXJuIGZhbHNlOwotfQotCiAvKgogICoJaGVhcF9nZXRfbGF0ZXN0X3Rp ZCAtICBnZXQgdGhlIGxhdGVzdCB0aWQgb2YgYSBzcGVjaWZpZWQgdHVwbGUKICAqCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jIGIvc3JjL2JhY2tl bmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYwppbmRleCBkYzdkYjU4ODUuLjA3ZjA3MTg4 ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYwor KysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCkBAIC03NSwxMTcg Kzc1LDYgQEAgaGVhcGFtX3Nsb3RfY2FsbGJhY2tzKFJlbGF0aW9uIHJlbGF0aW9uKQogfQogCiAK LS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQotICogSW5kZXggU2NhbiBDYWxsYmFja3MgZm9yIGhlYXAgQU0K LSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi0KLXN0YXRpYyBJbmRleEZldGNoVGFibGVEYXRhICoK LWhlYXBhbV9pbmRleF9mZXRjaF9iZWdpbihSZWxhdGlvbiByZWwsIHVpbnQzMiBmbGFncykKLXsK LQlJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuID0gcGFsbG9jMF9vYmplY3QoSW5kZXhGZXRjaEhl YXBEYXRhKTsKLQotCWhzY2FuLT54c19iYXNlLnJlbCA9IHJlbDsKLQloc2Nhbi0+eHNfYmFzZS5m bGFncyA9IGZsYWdzOwotCWhzY2FuLT54c19jYnVmID0gSW52YWxpZEJ1ZmZlcjsKLQloc2Nhbi0+ eHNfdm1idWZmZXIgPSBJbnZhbGlkQnVmZmVyOwotCi0JcmV0dXJuICZoc2Nhbi0+eHNfYmFzZTsK LX0KLQotc3RhdGljIHZvaWQKLWhlYXBhbV9pbmRleF9mZXRjaF9yZXNldChJbmRleEZldGNoVGFi bGVEYXRhICpzY2FuKQotewotCUluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4gPSAoSW5kZXhGZXRj aEhlYXBEYXRhICopIHNjYW47Ci0KLQlpZiAoQnVmZmVySXNWYWxpZChoc2Nhbi0+eHNfY2J1Zikp Ci0JewotCQlSZWxlYXNlQnVmZmVyKGhzY2FuLT54c19jYnVmKTsKLQkJaHNjYW4tPnhzX2NidWYg PSBJbnZhbGlkQnVmZmVyOwotCX0KLQotCWlmIChCdWZmZXJJc1ZhbGlkKGhzY2FuLT54c192bWJ1 ZmZlcikpCi0JewotCQlSZWxlYXNlQnVmZmVyKGhzY2FuLT54c192bWJ1ZmZlcik7Ci0JCWhzY2Fu LT54c192bWJ1ZmZlciA9IEludmFsaWRCdWZmZXI7Ci0JfQotfQotCi1zdGF0aWMgdm9pZAotaGVh cGFtX2luZGV4X2ZldGNoX2VuZChJbmRleEZldGNoVGFibGVEYXRhICpzY2FuKQotewotCUluZGV4 RmV0Y2hIZWFwRGF0YSAqaHNjYW4gPSAoSW5kZXhGZXRjaEhlYXBEYXRhICopIHNjYW47Ci0KLQlo ZWFwYW1faW5kZXhfZmV0Y2hfcmVzZXQoc2Nhbik7Ci0KLQlwZnJlZShoc2Nhbik7Ci19Ci0KLXN0 YXRpYyBib29sCi1oZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGUoc3RydWN0IEluZGV4RmV0Y2hUYWJs ZURhdGEgKnNjYW4sCi0JCQkJCQkgSXRlbVBvaW50ZXIgdGlkLAotCQkJCQkJIFNuYXBzaG90IHNu YXBzaG90LAotCQkJCQkJIFR1cGxlVGFibGVTbG90ICpzbG90LAotCQkJCQkJIGJvb2wgKmhlYXBf Y29udGludWUsIGJvb2wgKmFsbF9kZWFkKQotewotCUluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4g PSAoSW5kZXhGZXRjaEhlYXBEYXRhICopIHNjYW47Ci0JQnVmZmVySGVhcFR1cGxlVGFibGVTbG90 ICpic2xvdCA9IChCdWZmZXJIZWFwVHVwbGVUYWJsZVNsb3QgKikgc2xvdDsKLQlib29sCQlnb3Rf aGVhcF90dXBsZTsKLQotCUFzc2VydChUVFNfSVNfQlVGRkVSVFVQTEUoc2xvdCkpOwotCi0JLyog V2UgY2FuIHNraXAgdGhlIGJ1ZmZlci1zd2l0Y2hpbmcgbG9naWMgaWYgd2UncmUgaW4gbWlkLUhP VCBjaGFpbi4gKi8KLQlpZiAoISpoZWFwX2NvbnRpbnVlKQotCXsKLQkJLyogU3dpdGNoIHRvIGNv cnJlY3QgYnVmZmVyIGlmIHdlIGRvbid0IGhhdmUgaXQgYWxyZWFkeSAqLwotCQlCdWZmZXIJCXBy ZXZfYnVmID0gaHNjYW4tPnhzX2NidWY7Ci0KLQkJaHNjYW4tPnhzX2NidWYgPSBSZWxlYXNlQW5k UmVhZEJ1ZmZlcihoc2Nhbi0+eHNfY2J1ZiwKLQkJCQkJCQkJCQkJICBoc2Nhbi0+eHNfYmFzZS5y ZWwsCi0JCQkJCQkJCQkJCSAgSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcih0aWQpKTsKLQotCQkv KgotCQkgKiBQcnVuZSBwYWdlLCBidXQgb25seSBpZiB3ZSB3ZXJlbid0IGFscmVhZHkgb24gdGhp cyBwYWdlCi0JCSAqLwotCQlpZiAocHJldl9idWYgIT0gaHNjYW4tPnhzX2NidWYpCi0JCQloZWFw X3BhZ2VfcHJ1bmVfb3B0KGhzY2FuLT54c19iYXNlLnJlbCwgaHNjYW4tPnhzX2NidWYsCi0JCQkJ CQkJCSZoc2Nhbi0+eHNfdm1idWZmZXIsCi0JCQkJCQkJCWhzY2FuLT54c19iYXNlLmZsYWdzICYg U09fSElOVF9SRUxfUkVBRF9PTkxZKTsKLQl9Ci0KLQkvKiBPYnRhaW4gc2hhcmUtbG9jayBvbiB0 aGUgYnVmZmVyIHNvIHdlIGNhbiBleGFtaW5lIHZpc2liaWxpdHkgKi8KLQlMb2NrQnVmZmVyKGhz Y2FuLT54c19jYnVmLCBCVUZGRVJfTE9DS19TSEFSRSk7Ci0JZ290X2hlYXBfdHVwbGUgPSBoZWFw X2hvdF9zZWFyY2hfYnVmZmVyKHRpZCwKLQkJCQkJCQkJCQkJaHNjYW4tPnhzX2Jhc2UucmVsLAot CQkJCQkJCQkJCQloc2Nhbi0+eHNfY2J1ZiwKLQkJCQkJCQkJCQkJc25hcHNob3QsCi0JCQkJCQkJ CQkJCSZic2xvdC0+YmFzZS50dXBkYXRhLAotCQkJCQkJCQkJCQlhbGxfZGVhZCwKLQkJCQkJCQkJ CQkJISpoZWFwX2NvbnRpbnVlKTsKLQlic2xvdC0+YmFzZS50dXBkYXRhLnRfc2VsZiA9ICp0aWQ7 Ci0JTG9ja0J1ZmZlcihoc2Nhbi0+eHNfY2J1ZiwgQlVGRkVSX0xPQ0tfVU5MT0NLKTsKLQotCWlm IChnb3RfaGVhcF90dXBsZSkKLQl7Ci0JCS8qCi0JCSAqIE9ubHkgaW4gYSBub24tTVZDQyBzbmFw c2hvdCBjYW4gbW9yZSB0aGFuIG9uZSBtZW1iZXIgb2YgdGhlIEhPVAotCQkgKiBjaGFpbiBiZSB2 aXNpYmxlLgotCQkgKi8KLQkJKmhlYXBfY29udGludWUgPSAhSXNNVkNDTGlrZVNuYXBzaG90KHNu YXBzaG90KTsKLQotCQlzbG90LT50dHNfdGFibGVPaWQgPSBSZWxhdGlvbkdldFJlbGlkKHNjYW4t PnJlbCk7Ci0JCUV4ZWNTdG9yZUJ1ZmZlckhlYXBUdXBsZSgmYnNsb3QtPmJhc2UudHVwZGF0YSwg c2xvdCwgaHNjYW4tPnhzX2NidWYpOwotCX0KLQllbHNlCi0JewotCQkvKiBXZSd2ZSByZWFjaGVk IHRoZSBlbmQgb2YgdGhlIEhPVCBjaGFpbi4gKi8KLQkJKmhlYXBfY29udGludWUgPSBmYWxzZTsK LQl9Ci0KLQlyZXR1cm4gZ290X2hlYXBfdHVwbGU7Ci19Ci0KLQogLyogLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CiAgKiBDYWxsYmFja3MgZm9yIG5vbi1tb2RpZnlpbmcgb3BlcmF0aW9ucyBvbiBpbmRpdmlkdWFs IHR1cGxlcyBmb3IgaGVhcCBBTQogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faW5kZXhzY2FuLmMgYi9zcmMvYmFja2VuZC9hY2Nl c3MvaGVhcC9oZWFwYW1faW5kZXhzY2FuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwLi5jMzZiODA0ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv aGVhcC9oZWFwYW1faW5kZXhzY2FuLmMKQEAgLTAsMCArMSwyOTIgQEAKKy8qLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorICoKKyAqIGhlYXBhbV9pbmRleHNjYW4uYworICoJICBoZWFwIHRhYmxlIHBsYWluIGlu ZGV4IHNjYW4gYW5kIGluZGV4LW9ubHkgc2NhbiBjb2RlCisgKgorICogUG9ydGlvbnMgQ29weXJp Z2h0IChjKSAxOTk2LTIwMjYsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisg KiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkg b2YgQ2FsaWZvcm5pYQorICoKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICBzcmMvYmFja2Vu ZC9hY2Nlc3MvaGVhcC9oZWFwYW1faW5kZXhzY2FuLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAqLworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJhY2Nlc3MvaGVhcGFtLmgi CisjaW5jbHVkZSAiYWNjZXNzL3JlbHNjYW4uaCIKKyNpbmNsdWRlICJzdG9yYWdlL3ByZWRpY2F0 ZS5oIgorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSW5kZXggU2NhbiBDYWxsYmFja3MgZm9y IGhlYXAgQU0KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKK0luZGV4RmV0Y2hUYWJsZURhdGEg KgoraGVhcGFtX2luZGV4X2ZldGNoX2JlZ2luKFJlbGF0aW9uIHJlbCwgdWludDMyIGZsYWdzKQor eworCUluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4gPSBwYWxsb2MwX29iamVjdChJbmRleEZldGNo SGVhcERhdGEpOworCisJaHNjYW4tPnhzX2Jhc2UucmVsID0gcmVsOworCWhzY2FuLT54c19iYXNl LmZsYWdzID0gZmxhZ3M7CisJaHNjYW4tPnhzX2NidWYgPSBJbnZhbGlkQnVmZmVyOworCWhzY2Fu LT54c192bWJ1ZmZlciA9IEludmFsaWRCdWZmZXI7CisKKwlyZXR1cm4gJmhzY2FuLT54c19iYXNl OworfQorCit2b2lkCitoZWFwYW1faW5kZXhfZmV0Y2hfcmVzZXQoSW5kZXhGZXRjaFRhYmxlRGF0 YSAqc2NhbikKK3sKKwlJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuID0gKEluZGV4RmV0Y2hIZWFw RGF0YSAqKSBzY2FuOworCisJaWYgKEJ1ZmZlcklzVmFsaWQoaHNjYW4tPnhzX2NidWYpKQorCXsK KwkJUmVsZWFzZUJ1ZmZlcihoc2Nhbi0+eHNfY2J1Zik7CisJCWhzY2FuLT54c19jYnVmID0gSW52 YWxpZEJ1ZmZlcjsKKwl9CisKKwlpZiAoQnVmZmVySXNWYWxpZChoc2Nhbi0+eHNfdm1idWZmZXIp KQorCXsKKwkJUmVsZWFzZUJ1ZmZlcihoc2Nhbi0+eHNfdm1idWZmZXIpOworCQloc2Nhbi0+eHNf dm1idWZmZXIgPSBJbnZhbGlkQnVmZmVyOworCX0KK30KKwordm9pZAoraGVhcGFtX2luZGV4X2Zl dGNoX2VuZChJbmRleEZldGNoVGFibGVEYXRhICpzY2FuKQoreworCUluZGV4RmV0Y2hIZWFwRGF0 YSAqaHNjYW4gPSAoSW5kZXhGZXRjaEhlYXBEYXRhICopIHNjYW47CisKKwloZWFwYW1faW5kZXhf ZmV0Y2hfcmVzZXQoc2Nhbik7CisKKwlwZnJlZShoc2Nhbik7Cit9CisKKy8qCisgKgloZWFwX2hv dF9zZWFyY2hfYnVmZmVyCS0gc2VhcmNoIEhPVCBjaGFpbiBmb3IgdHVwbGUgc2F0aXNmeWluZyBz bmFwc2hvdAorICoKKyAqIE9uIGVudHJ5LCAqdGlkIGlzIHRoZSBUSUQgb2YgYSB0dXBsZSAoZWl0 aGVyIGEgc2ltcGxlIHR1cGxlLCBvciB0aGUgcm9vdAorICogb2YgYSBIT1QgY2hhaW4pLCBhbmQg YnVmZmVyIGlzIHRoZSBidWZmZXIgaG9sZGluZyB0aGlzIHR1cGxlLiAgV2Ugc2VhcmNoCisgKiBm b3IgdGhlIGZpcnN0IGNoYWluIG1lbWJlciBzYXRpc2Z5aW5nIHRoZSBnaXZlbiBzbmFwc2hvdC4g IElmIG9uZSBpcworICogZm91bmQsIHdlIHVwZGF0ZSAqdGlkIHRvIHJlZmVyZW5jZSB0aGF0IHR1 cGxlJ3Mgb2Zmc2V0IG51bWJlciwgYW5kCisgKiByZXR1cm4gdHJ1ZS4gIElmIG5vIG1hdGNoLCBy ZXR1cm4gZmFsc2Ugd2l0aG91dCBtb2RpZnlpbmcgKnRpZC4KKyAqCisgKiBoZWFwVHVwbGUgaXMg YSBjYWxsZXItc3VwcGxpZWQgYnVmZmVyLiAgV2hlbiBhIG1hdGNoIGlzIGZvdW5kLCB3ZSByZXR1 cm4KKyAqIHRoZSB0dXBsZSBoZXJlLCBpbiBhZGRpdGlvbiB0byB1cGRhdGluZyAqdGlkLiAgSWYg bm8gbWF0Y2ggaXMgZm91bmQsIHRoZQorICogY29udGVudHMgb2YgdGhpcyBidWZmZXIgb24gcmV0 dXJuIGFyZSB1bmRlZmluZWQuCisgKgorICogSWYgYWxsX2RlYWQgaXMgbm90IE5VTEwsIHdlIGNo ZWNrIG5vbi12aXNpYmxlIHR1cGxlcyB0byBzZWUgaWYgdGhleSBhcmUKKyAqIGdsb2JhbGx5IGRl YWQ7ICphbGxfZGVhZCBpcyBzZXQgdHJ1ZSBpZiBhbGwgbWVtYmVycyBvZiB0aGUgSE9UIGNoYWlu CisgKiBhcmUgdmFjdXVtYWJsZSwgZmFsc2UgaWYgbm90LgorICoKKyAqIFVubGlrZSBoZWFwX2Zl dGNoLCB0aGUgY2FsbGVyIG11c3QgYWxyZWFkeSBoYXZlIHBpbiBhbmQgKGF0IGxlYXN0KSBzaGFy ZQorICogbG9jayBvbiB0aGUgYnVmZmVyOyBpdCBpcyBzdGlsbCBwaW5uZWQvbG9ja2VkIGF0IGV4 aXQuCisgKi8KK2Jvb2wKK2hlYXBfaG90X3NlYXJjaF9idWZmZXIoSXRlbVBvaW50ZXIgdGlkLCBS ZWxhdGlvbiByZWxhdGlvbiwgQnVmZmVyIGJ1ZmZlciwKKwkJCQkJICAgU25hcHNob3Qgc25hcHNo b3QsIEhlYXBUdXBsZSBoZWFwVHVwbGUsCisJCQkJCSAgIGJvb2wgKmFsbF9kZWFkLCBib29sIGZp cnN0X2NhbGwpCit7CisJUGFnZQkJcGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnVmZmVyKTsKKwlUcmFu c2FjdGlvbklkIHByZXZfeG1heCA9IEludmFsaWRUcmFuc2FjdGlvbklkOworCUJsb2NrTnVtYmVy IGJsa25vOworCU9mZnNldE51bWJlciBvZmZudW07CisJYm9vbAkJYXRfY2hhaW5fc3RhcnQ7CisJ Ym9vbAkJdmFsaWQ7CisJYm9vbAkJc2tpcDsKKwlHbG9iYWxWaXNTdGF0ZSAqdmlzdGVzdCA9IE5V TEw7CisKKwkvKiBJZiB0aGlzIGlzIG5vdCB0aGUgZmlyc3QgY2FsbCwgcHJldmlvdXMgY2FsbCBy ZXR1cm5lZCBhIChsaXZlISkgdHVwbGUgKi8KKwlpZiAoYWxsX2RlYWQpCisJCSphbGxfZGVhZCA9 IGZpcnN0X2NhbGw7CisKKwlibGtubyA9IEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKTsK KwlvZmZudW0gPSBJdGVtUG9pbnRlckdldE9mZnNldE51bWJlcih0aWQpOworCWF0X2NoYWluX3N0 YXJ0ID0gZmlyc3RfY2FsbDsKKwlza2lwID0gIWZpcnN0X2NhbGw7CisKKwkvKiBYWFg6IHdlIHNo b3VsZCBhc3NlcnQgdGhhdCBhIHNuYXBzaG90IGlzIHB1c2hlZCBvciByZWdpc3RlcmVkICovCisJ QXNzZXJ0KFRyYW5zYWN0aW9uSWRJc1ZhbGlkKFJlY2VudFhtaW4pKTsKKwlBc3NlcnQoQnVmZmVy R2V0QmxvY2tOdW1iZXIoYnVmZmVyKSA9PSBibGtubyk7CisKKwkvKiBTY2FuIHRocm91Z2ggcG9z c2libGUgbXVsdGlwbGUgbWVtYmVycyBvZiBIT1QtY2hhaW4gKi8KKwlmb3IgKDs7KQorCXsKKwkJ SXRlbUlkCQlscDsKKworCQkvKiBjaGVjayBmb3IgYm9ndXMgVElEICovCisJCWlmIChvZmZudW0g PCBGaXJzdE9mZnNldE51bWJlciB8fCBvZmZudW0gPiBQYWdlR2V0TWF4T2Zmc2V0TnVtYmVyKHBh Z2UpKQorCQkJYnJlYWs7CisKKwkJbHAgPSBQYWdlR2V0SXRlbUlkKHBhZ2UsIG9mZm51bSk7CisK KwkJLyogY2hlY2sgZm9yIHVudXNlZCwgZGVhZCwgb3IgcmVkaXJlY3RlZCBpdGVtcyAqLworCQlp ZiAoIUl0ZW1JZElzTm9ybWFsKGxwKSkKKwkJeworCQkJLyogV2Ugc2hvdWxkIG9ubHkgc2VlIGEg cmVkaXJlY3QgYXQgc3RhcnQgb2YgY2hhaW4gKi8KKwkJCWlmIChJdGVtSWRJc1JlZGlyZWN0ZWQo bHApICYmIGF0X2NoYWluX3N0YXJ0KQorCQkJeworCQkJCS8qIEZvbGxvdyB0aGUgcmVkaXJlY3Qg Ki8KKwkJCQlvZmZudW0gPSBJdGVtSWRHZXRSZWRpcmVjdChscCk7CisJCQkJYXRfY2hhaW5fc3Rh cnQgPSBmYWxzZTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCS8qIGVsc2UgbXVzdCBiZSBlbmQg b2YgY2hhaW4gKi8KKwkJCWJyZWFrOworCQl9CisKKwkJLyoKKwkJICogVXBkYXRlIGhlYXBUdXBs ZSB0byBwb2ludCB0byB0aGUgZWxlbWVudCBvZiB0aGUgSE9UIGNoYWluIHdlJ3JlCisJCSAqIGN1 cnJlbnRseSBpbnZlc3RpZ2F0aW5nLiBIYXZpbmcgdF9zZWxmIHNldCBjb3JyZWN0bHkgaXMgaW1w b3J0YW50CisJCSAqIGJlY2F1c2UgdGhlIFNTSSBjaGVja3MgYW5kIHRoZSAqU2F0aXNmaWVzIHJv dXRpbmUgZm9yIGhpc3RvcmljYWwKKwkJICogTVZDQyBzbmFwc2hvdHMgbmVlZCB0aGUgY29ycmVj dCB0aWQgdG8gZGVjaWRlIGFib3V0IHRoZSB2aXNpYmlsaXR5LgorCQkgKi8KKwkJaGVhcFR1cGxl LT50X2RhdGEgPSAoSGVhcFR1cGxlSGVhZGVyKSBQYWdlR2V0SXRlbShwYWdlLCBscCk7CisJCWhl YXBUdXBsZS0+dF9sZW4gPSBJdGVtSWRHZXRMZW5ndGgobHApOworCQloZWFwVHVwbGUtPnRfdGFi bGVPaWQgPSBSZWxhdGlvbkdldFJlbGlkKHJlbGF0aW9uKTsKKwkJSXRlbVBvaW50ZXJTZXQoJmhl YXBUdXBsZS0+dF9zZWxmLCBibGtubywgb2ZmbnVtKTsKKworCQkvKgorCQkgKiBTaG91bGRuJ3Qg c2VlIGEgSEVBUF9PTkxZIHR1cGxlIGF0IGNoYWluIHN0YXJ0LgorCQkgKi8KKwkJaWYgKGF0X2No YWluX3N0YXJ0ICYmIEhlYXBUdXBsZUlzSGVhcE9ubHkoaGVhcFR1cGxlKSkKKwkJCWJyZWFrOwor CisJCS8qCisJCSAqIFRoZSB4bWluIHNob3VsZCBtYXRjaCB0aGUgcHJldmlvdXMgeG1heCB2YWx1 ZSwgZWxzZSBjaGFpbiBpcworCQkgKiBicm9rZW4uCisJCSAqLworCQlpZiAoVHJhbnNhY3Rpb25J ZElzVmFsaWQocHJldl94bWF4KSAmJgorCQkJIVRyYW5zYWN0aW9uSWRFcXVhbHMocHJldl94bWF4 LAorCQkJCQkJCQkgSGVhcFR1cGxlSGVhZGVyR2V0WG1pbihoZWFwVHVwbGUtPnRfZGF0YSkpKQor CQkJYnJlYWs7CisKKwkJLyoKKwkJICogV2hlbiBmaXJzdF9jYWxsIGlzIHRydWUgKGFuZCB0aHVz LCBza2lwIGlzIGluaXRpYWxseSBmYWxzZSkgd2UnbGwKKwkJICogcmV0dXJuIHRoZSBmaXJzdCB0 dXBsZSB3ZSBmaW5kLiAgQnV0IG9uIGxhdGVyIHBhc3NlcywgaGVhcFR1cGxlCisJCSAqIHdpbGwg aW5pdGlhbGx5IGJlIHBvaW50aW5nIHRvIHRoZSB0dXBsZSB3ZSByZXR1cm5lZCBsYXN0IHRpbWUu CisJCSAqIFJldHVybmluZyBpdCBhZ2FpbiB3b3VsZCBiZSBpbmNvcnJlY3QgKGFuZCB3b3VsZCBs b29wIGZvcmV2ZXIpLCBzbworCQkgKiB3ZSBza2lwIGl0IGFuZCByZXR1cm4gdGhlIG5leHQgbWF0 Y2ggd2UgZmluZC4KKwkJICovCisJCWlmICghc2tpcCkKKwkJeworCQkJLyogSWYgaXQncyB2aXNp YmxlIHBlciB0aGUgc25hcHNob3QsIHdlIG11c3QgcmV0dXJuIGl0ICovCisJCQl2YWxpZCA9IEhl YXBUdXBsZVNhdGlzZmllc1Zpc2liaWxpdHkoaGVhcFR1cGxlLCBzbmFwc2hvdCwgYnVmZmVyKTsK KwkJCUhlYXBDaGVja0ZvclNlcmlhbGl6YWJsZUNvbmZsaWN0T3V0KHZhbGlkLCByZWxhdGlvbiwg aGVhcFR1cGxlLAorCQkJCQkJCQkJCQkJYnVmZmVyLCBzbmFwc2hvdCk7CisKKwkJCWlmICh2YWxp ZCkKKwkJCXsKKwkJCQlJdGVtUG9pbnRlclNldE9mZnNldE51bWJlcih0aWQsIG9mZm51bSk7CisJ CQkJUHJlZGljYXRlTG9ja1RJRChyZWxhdGlvbiwgJmhlYXBUdXBsZS0+dF9zZWxmLCBzbmFwc2hv dCwKKwkJCQkJCQkJIEhlYXBUdXBsZUhlYWRlckdldFhtaW4oaGVhcFR1cGxlLT50X2RhdGEpKTsK KwkJCQlpZiAoYWxsX2RlYWQpCisJCQkJCSphbGxfZGVhZCA9IGZhbHNlOworCQkJCXJldHVybiB0 cnVlOworCQkJfQorCQl9CisJCXNraXAgPSBmYWxzZTsKKworCQkvKgorCQkgKiBJZiB3ZSBjYW4n dCBzZWUgaXQsIG1heWJlIG5vIG9uZSBlbHNlIGNhbiBlaXRoZXIuICBBdCBjYWxsZXIKKwkJICog cmVxdWVzdCwgY2hlY2sgd2hldGhlciBhbGwgY2hhaW4gbWVtYmVycyBhcmUgZGVhZCB0byBhbGwK KwkJICogdHJhbnNhY3Rpb25zLgorCQkgKgorCQkgKiBOb3RlOiBpZiB5b3UgY2hhbmdlIHRoZSBj cml0ZXJpb24gaGVyZSBmb3Igd2hhdCBpcyAiZGVhZCIsIGZpeCB0aGUKKwkJICogcGxhbm5lcidz IGdldF9hY3R1YWxfdmFyaWFibGVfcmFuZ2UoKSBmdW5jdGlvbiB0byBtYXRjaC4KKwkJICovCisJ CWlmIChhbGxfZGVhZCAmJiAqYWxsX2RlYWQpCisJCXsKKwkJCWlmICghdmlzdGVzdCkKKwkJCQl2 aXN0ZXN0ID0gR2xvYmFsVmlzVGVzdEZvcihyZWxhdGlvbik7CisKKwkJCWlmICghSGVhcFR1cGxl SXNTdXJlbHlEZWFkKGhlYXBUdXBsZSwgdmlzdGVzdCkpCisJCQkJKmFsbF9kZWFkID0gZmFsc2U7 CisJCX0KKworCQkvKgorCQkgKiBDaGVjayB0byBzZWUgaWYgSE9UIGNoYWluIGNvbnRpbnVlcyBw YXN0IHRoaXMgdHVwbGU7IGlmIHNvIGZldGNoCisJCSAqIHRoZSBuZXh0IG9mZm51bSBhbmQgbG9v cCBhcm91bmQuCisJCSAqLworCQlpZiAoSGVhcFR1cGxlSXNIb3RVcGRhdGVkKGhlYXBUdXBsZSkp CisJCXsKKwkJCUFzc2VydChJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKCZoZWFwVHVwbGUtPnRf ZGF0YS0+dF9jdGlkKSA9PQorCQkJCSAgIGJsa25vKTsKKwkJCW9mZm51bSA9IEl0ZW1Qb2ludGVy R2V0T2Zmc2V0TnVtYmVyKCZoZWFwVHVwbGUtPnRfZGF0YS0+dF9jdGlkKTsKKwkJCWF0X2NoYWlu X3N0YXJ0ID0gZmFsc2U7CisJCQlwcmV2X3htYXggPSBIZWFwVHVwbGVIZWFkZXJHZXRVcGRhdGVY aWQoaGVhcFR1cGxlLT50X2RhdGEpOworCQl9CisJCWVsc2UKKwkJCWJyZWFrOwkJCQkvKiBlbmQg b2YgY2hhaW4gKi8KKworCX0KKworCXJldHVybiBmYWxzZTsKK30KKworYm9vbAoraGVhcGFtX2lu ZGV4X2ZldGNoX3R1cGxlKHN0cnVjdCBJbmRleEZldGNoVGFibGVEYXRhICpzY2FuLAorCQkJCQkJ IEl0ZW1Qb2ludGVyIHRpZCwKKwkJCQkJCSBTbmFwc2hvdCBzbmFwc2hvdCwKKwkJCQkJCSBUdXBs ZVRhYmxlU2xvdCAqc2xvdCwKKwkJCQkJCSBib29sICpoZWFwX2NvbnRpbnVlLCBib29sICphbGxf ZGVhZCkKK3sKKwlJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuID0gKEluZGV4RmV0Y2hIZWFwRGF0 YSAqKSBzY2FuOworCUJ1ZmZlckhlYXBUdXBsZVRhYmxlU2xvdCAqYnNsb3QgPSAoQnVmZmVySGVh cFR1cGxlVGFibGVTbG90ICopIHNsb3Q7CisJYm9vbAkJZ290X2hlYXBfdHVwbGU7CisKKwlBc3Nl cnQoVFRTX0lTX0JVRkZFUlRVUExFKHNsb3QpKTsKKworCS8qIFdlIGNhbiBza2lwIHRoZSBidWZm ZXItc3dpdGNoaW5nIGxvZ2ljIGlmIHdlJ3JlIGluIG1pZC1IT1QgY2hhaW4uICovCisJaWYgKCEq aGVhcF9jb250aW51ZSkKKwl7CisJCS8qIFN3aXRjaCB0byBjb3JyZWN0IGJ1ZmZlciBpZiB3ZSBk b24ndCBoYXZlIGl0IGFscmVhZHkgKi8KKwkJQnVmZmVyCQlwcmV2X2J1ZiA9IGhzY2FuLT54c19j YnVmOworCisJCWhzY2FuLT54c19jYnVmID0gUmVsZWFzZUFuZFJlYWRCdWZmZXIoaHNjYW4tPnhz X2NidWYsCisJCQkJCQkJCQkJCSAgaHNjYW4tPnhzX2Jhc2UucmVsLAorCQkJCQkJCQkJCQkgIEl0 ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKSk7CisKKwkJLyoKKwkJICogUHJ1bmUgcGFnZSwg YnV0IG9ubHkgaWYgd2Ugd2VyZW4ndCBhbHJlYWR5IG9uIHRoaXMgcGFnZQorCQkgKi8KKwkJaWYg KHByZXZfYnVmICE9IGhzY2FuLT54c19jYnVmKQorCQkJaGVhcF9wYWdlX3BydW5lX29wdChoc2Nh bi0+eHNfYmFzZS5yZWwsIGhzY2FuLT54c19jYnVmLAorCQkJCQkJCQkmaHNjYW4tPnhzX3ZtYnVm ZmVyLAorCQkJCQkJCQloc2Nhbi0+eHNfYmFzZS5mbGFncyAmIFNPX0hJTlRfUkVMX1JFQURfT05M WSk7CisJfQorCisJLyogT2J0YWluIHNoYXJlLWxvY2sgb24gdGhlIGJ1ZmZlciBzbyB3ZSBjYW4g ZXhhbWluZSB2aXNpYmlsaXR5ICovCisJTG9ja0J1ZmZlcihoc2Nhbi0+eHNfY2J1ZiwgQlVGRkVS X0xPQ0tfU0hBUkUpOworCWdvdF9oZWFwX3R1cGxlID0gaGVhcF9ob3Rfc2VhcmNoX2J1ZmZlcih0 aWQsCisJCQkJCQkJCQkJCWhzY2FuLT54c19iYXNlLnJlbCwKKwkJCQkJCQkJCQkJaHNjYW4tPnhz X2NidWYsCisJCQkJCQkJCQkJCXNuYXBzaG90LAorCQkJCQkJCQkJCQkmYnNsb3QtPmJhc2UudHVw ZGF0YSwKKwkJCQkJCQkJCQkJYWxsX2RlYWQsCisJCQkJCQkJCQkJCSEqaGVhcF9jb250aW51ZSk7 CisJYnNsb3QtPmJhc2UudHVwZGF0YS50X3NlbGYgPSAqdGlkOworCUxvY2tCdWZmZXIoaHNjYW4t PnhzX2NidWYsIEJVRkZFUl9MT0NLX1VOTE9DSyk7CisKKwlpZiAoZ290X2hlYXBfdHVwbGUpCisJ eworCQkvKgorCQkgKiBPbmx5IGluIGEgbm9uLU1WQ0Mgc25hcHNob3QgY2FuIG1vcmUgdGhhbiBv bmUgbWVtYmVyIG9mIHRoZSBIT1QKKwkJICogY2hhaW4gYmUgdmlzaWJsZS4KKwkJICovCisJCSpo ZWFwX2NvbnRpbnVlID0gIUlzTVZDQ0xpa2VTbmFwc2hvdChzbmFwc2hvdCk7CisKKwkJc2xvdC0+ dHRzX3RhYmxlT2lkID0gUmVsYXRpb25HZXRSZWxpZChzY2FuLT5yZWwpOworCQlFeGVjU3RvcmVC dWZmZXJIZWFwVHVwbGUoJmJzbG90LT5iYXNlLnR1cGRhdGEsIHNsb3QsIGhzY2FuLT54c19jYnVm KTsKKwl9CisJZWxzZQorCXsKKwkJLyogV2UndmUgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBIT1Qg Y2hhaW4uICovCisJCSpoZWFwX2NvbnRpbnVlID0gZmFsc2U7CisJfQorCisJcmV0dXJuIGdvdF9o ZWFwX3R1cGxlOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvbWVzb24u YnVpbGQgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9tZXNvbi5idWlsZAppbmRleCA5MmFiOGJl M2QuLjAwZWMwN2Q3ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvbWVzb24u YnVpbGQKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvbWVzb24uYnVpbGQKQEAgLTMsNiAr Myw3IEBACiBiYWNrZW5kX3NvdXJjZXMgKz0gZmlsZXMoCiAgICdoZWFwYW0uYycsCiAgICdoZWFw YW1faGFuZGxlci5jJywKKyAgJ2hlYXBhbV9pbmRleHNjYW4uYycsCiAgICdoZWFwYW1fdmlzaWJp bGl0eS5jJywKICAgJ2hlYXBhbV94bG9nLmMnLAogICAnaGVhcHRvYXN0LmMnLAotLSAKMi41My4w Cgo= --000000000000f287f9064e6de93c--