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 1vlyhE-005vcV-2I for pgsql-hackers@arkaria.postgresql.org; Sat, 31 Jan 2026 00:18:41 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vlyhA-006hUT-37 for pgsql-hackers@arkaria.postgresql.org; Sat, 31 Jan 2026 00:18:37 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vlyh9-006hT6-20 for pgsql-hackers@lists.postgresql.org; Sat, 31 Jan 2026 00:18:37 +0000 Received: from mail-wr1-x42c.google.com ([2a00:1450:4864:20::42c]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vlyh5-000F78-1g for pgsql-hackers@lists.postgresql.org; Sat, 31 Jan 2026 00:18:35 +0000 Received: by mail-wr1-x42c.google.com with SMTP id ffacd0b85a97d-42fed090e5fso2144507f8f.1 for ; Fri, 30 Jan 2026 16:18:31 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1769818709; cv=none; d=google.com; s=arc-20240605; b=I281eQWD4rmxoR43Oiayte0z1g0Hwr0RikgoLGU5HNGYd+KJhznQPAVAYY8wD5V2s3 ZsjZ4BVrEwstCZnh9evf1uBMbqkUNuSNyZ0UjyZNb4t0rV1d+BL4Jkf0eFz+0l6f7Ha1 0FNIXt+61hkpLJx6uFMC5BirJieIah94rExdPH+p6ZPwnbTDXBcJvDmdumoyubnxkq2f 2Ehc1WEZSwABLofHCUXYDUKjWWtjHKFboQIhR1EEsK/QSqrJZ49h1pQaO6Oe/SIcC6Wx mhrlm3lsZuyDzAxBUOwv6hkAnFleIbMnCjyizCb83QS7//SjEp7NN1GbMVm7eyNEheM+ NfFQ== 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=0CbgVuP9DFD3Q/RmJ1o00TySG4FZ6yOKuANKzEsxQno=; fh=5o4HJja8I7nxJGQ+atgfPJ1VXSTmnnA/Fpxpi0+OlJI=; b=ajJ7yKg3jdJ64hrQJ92OcsE3BJtwutxmQhFTOu2qaCEh1vVmJk13k86YgyP8cuTXgB x9seKpAzF5TYLi3z4lV1FKEcBqlmYyxc2dTg+AtyJ0a84XMTz0pEmeEOdnu0JlWbsjiO 99BHiPhjblDPnPxxh6vubafsABb3+HWVvFB+LHmm1jFi3OdkUWb+xmPzlJj6IPN6gHeD s4kxor4LD0g9gU0Vvm5c+DO/hkmbYKM31k/V0KhZyVqS++XL8xNsCcnmDqZNSXFFvYNC gzLSC1d/vxd1PcDe+KvxUEDAUNPdb78iXaE1t1K2zhWmKSFt686N+dGKgTrEBV+Ze/to JxLg==; 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=1769818709; x=1770423509; 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=0CbgVuP9DFD3Q/RmJ1o00TySG4FZ6yOKuANKzEsxQno=; b=ZElID1KCeQotn53l+etrRJD9WYYk0IGVqTbHFxJhSb/moD51bpn68o4fFQ11hPhJgA Ty+SJCDKJRu7YgbW5t1mzhYHzTRPAl9nJ6S61BwG2yQujlGqrykxgjq7jE53ZO4x510s QVJyAuLBx2joWNGCDflmkBtfKswm4L6By3alJhzidk5P1ATPqgtz9oUE4VRd9HEvNgtl vq+SweZRV2h3I1Q5suZkel+OiR9QaOCuVRMMf3TKtCv7pEVBeHPuR26nfvs8tpo6IS2a uHeCcNel322oQDstKOxilxAll/QNxYNjjn8B7SbxJGPNpabPJA78e5c7DddxBBGLLUwC q5dg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769818709; x=1770423509; 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=0CbgVuP9DFD3Q/RmJ1o00TySG4FZ6yOKuANKzEsxQno=; b=r03nuhVbxic6xW0+h2AZ3fueqiVqkcmSJSoK32OUp3qlZEiFsljqtkY5a3MEpF6/Yu JTx506R+hpQD2tAkzxk4b4Bax6c70a/EqhYscV1jqAvNV4G4AqAclyJSvJ2eIrzzlZIn ucc/IBIiuKNVeVk9lxBw0oh3VwWaE9FkcE2W7v4F7RPuix/sbg+JZQBeNkIBst9yICkI Z5AEVRpBD/qjtZ2YYzQkvehXJu0JPMicLkJsrBLRR8uvHE7ogzi6hHeRXFHdSfVfiRAT ap59PGra1RaXoUixDS5Qrb2Vc1udELBAvOl2o8Rl59OhbEpBffS0oXT8NYWZzxGE6D7d JPMA== X-Forwarded-Encrypted: i=1; AJvYcCWGsp8bM1Rg/v3/pO5Zomd15CeEJeB9gV+xU0tu8gKw0+NlFdj5IGzWKnjb0Nw5wMutnrqZ67zRIrfkER1i@lists.postgresql.org X-Gm-Message-State: AOJu0YwFM57KnRVy9KUiN8ySSowdaFG769z4G+2qZ15MNdy5Iy0DnHJD pl2hpVS7oirckSy4nKwx7T8RXNFqPryKWYToxRIuaTnynan6eS8uOUg0owPWkYkBBhZzz4TuHXq Rsn05Be3WGE71iNU4G9gcaRuSkwBtYYGdX4qzv90nwg== X-Gm-Gg: AZuq6aJuTZBIg7GAkPdTQzbKDM0sUFDqXzJhM15DaD4NhKW66HEuw0yPSJMWa9/EhcQ 05P2c2iZ75cG/+gU/C4KT4W1du62E5kfuOZmf3dDQ2OJ64T/ISjv8/EZvehY7K3a7Kvre4w2Igl bI1B/NHlDTR82qtpQKbMCebwE5rZl1D60rf0xQ0SEofYKRohA6h9HRo3G76Tg1ZwOdT4zGoX8HF e6croFf+Ti5DigTLgGyPLkcNOHZAJQmoGAkMcIG+7KSipm0zZH/TYsQwWZK8quDenHxUD0= X-Received: by 2002:a05:6000:2004:b0:42b:3131:5437 with SMTP id ffacd0b85a97d-435f3aaff84mr5784878f8f.34.1769818708842; Fri, 30 Jan 2026 16:18:28 -0800 (PST) MIME-Version: 1.0 References: <6d59c277-c440-4d1f-a46e-157958c06a5f@vondra.me> <5pltwb73d7cynsxo2yb54ygjk7haviatkrx43mnzihc6kkield@ahnstpgof46i> <931afce3-8c86-4c96-9861-0ffa17c6560f@vondra.me> <4zeu5yb73byiquvf3eefsunnrydyqfxy3eup66jrliutrtd4xl@5iifjey4n5m5> In-Reply-To: From: Peter Geoghegan Date: Fri, 30 Jan 2026 19:18:02 -0500 X-Gm-Features: AZwV_Qh8h5-9AtxZvXYeo6kB6_5SIlRNxTJZBFEQ9_h67H-MGvOGM-egAx6gJcg Message-ID: Subject: Re: index prefetching To: Tomas Vondra Cc: Andres Freund , Thomas Munro , Nazir Bilal Yavuz , Robert Haas , Melanie Plageman , PostgreSQL Hackers , Georgios , Konstantin Knizhnik , Dilip Kumar Content-Type: multipart/mixed; boundary="0000000000007589150649a4074c" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000007589150649a4074c Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Sun, Jan 18, 2026 at 6:51=E2=80=AFPM Peter Geoghegan wrote: > Attached is v8. A lot has changed in just the past week. We're feeling > optimistic about getting I/O prefetching into Postgres 19, and so > we've decided to fully commit ourselves to that. Attached is v9. v8 just stopped applying against HEAD. But there have been a few notable developments since v8. > Dropping leaf page buffer pins during index-only scans > ------------------------------------------------------ > > I realized (following a point made by Matthias van de Meent during a > private call) that it simply isn't necessary for index pages to hold > on to buffer pins, in general. We haven't actually done that with > nbtree plain index scans with MVCC snapshots since 2015's commit > 2ed5b87f, which added what we now call nbtree's dropPin optimization. > What if we could find a way to teach *every* amgetbatch-supporting > index AM to do the same trick for *all* scans (barring non-MVCC > snapshot scans)? Including index-only scans and scans of unlogged > relations? Then we'd have zero chance of unintended interactions with > the read stream; there'd simply be no extra buffer pins that might > confuse the read stream in the first place! Changes in v9, compared to v8: * It turns out that this "always set all items all-visible up front" approach can be too aggressive with certain kinds of queries -- we need to be less aggressive with dropping leaf page pins during index only scans. It's always correct, but it wastes cycles in certain kinds of queries. Things like nestloop anti-joins with an inner index scan will generally only need to access the first item's VM info; wasting cycles on eagerly setting all the cached VM info up front regresses such queries unacceptably (like maybe 30%; way too much). Tomas wrote code that works around the problem, by only dropping a leaf page buffer pin (during an index only scan) when all of the batch's items visibility info has been looked by the VM. At the same time we still make strong guarantees about holding on to no more than one such pin at a time. Which is all we really need to keep the pin resource management problems (read stream pin interactions) simple during scans that use prefetching. * Separately, there's a new experimental patch that passes down a hint from ExecSetTupleBound to index scans. This allows us to be cleverer about avoiding starting a read stream in queries that use nestloop joins with inner index scans that can end early/on the first tuple (and also with simple ORDER BY ... LIMIT N index scans). In other words, it fixes regressions with queries rather like the ones we were concerned about with the previous VM caching change. Though this second enhancement isn't just helpful when it's an index-only scan on the inner side. * Much simpler heapam_batch_getnext_tid logic, particularly for dealing with changes in scan direction for a scrollable cursor. The new design makes a clean separation between the need to invalidate/disable our read stream due to a tuple-level change in the scan's direction, and the need to deal with a change in scan direction that actually crosses a boundary between 2 adjoining batches/index pages. In the former case we need to avoid allowing the scan to read the now-wrong heap blocks from the read stream, whereas in the latter case we need to be careful about keeping the batch ring buffer state consistent. Notice that these are 2 distinct (albeit conceptually close) problems. Cursor scans that (for whatever reason) don't use a read stream never have the first problem, but might still run into the second. OTOH a scan can easily need to deal with invalidating this way, without ever getting as far as crossing a batch boundary (the scan could just end, the scan direction to change back, and then we don't have to change anything about batchringbuf state). Also improved the ring buffer data structure. It now uses uint8 offsets that wrap as needed. This is more idiomatic, and seems easier to test. selfuncs.c problem ------------------ Also worth noting that we recently found a problem with selfuncs.c: the VISITED_PAGES_LIMIT stuff in selfuncs.c is broken right now. v9 tears that code out, pending adding back a real fix (earlier versions of the patch had VISITED_PAGES_LIMIT, but it didn't work). The underlying problem is that the existing VISITED_PAGES_LIMIT design is incompatible with our new table_index_getnext_slot interface. The new interface doesn't stop scanning until it is able to at least return 1 tuple. But VISITED_PAGES_LIMIT was invented precisely because get_actual_variable_endpoint's index scans took far too long, even though they're only ever required to locate 1 tuple. So that just won't work. We'll need to invent some kind of API that directly acknowledges the needs of the selfuncs.c caller, and others like it. Doing it in an ad-hoc way just doesn't seem possible anymore. That will have to wait for the next revision, though (or the one after that). --=20 Peter Geoghegan --0000000000007589150649a4074c Content-Type: application/octet-stream; name="v9-0008-Don-t-wait-for-already-in-progress-IO.patch" Content-Disposition: attachment; filename="v9-0008-Don-t-wait-for-already-in-progress-IO.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ml1k3l3d3 RnJvbSBmOGYyMWY0MWY1MmM4MWZkN2UyYjk3NzRiMDAxZDY0YTY5YmZmMGNjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNZWxhbmllIFBsYWdlbWFuIDxtZWxhbmllcGxhZ2VtYW5AZ21h aWwuY29tPgpEYXRlOiBGcmksIDIzIEphbiAyMDI2IDE0OjAwOjMxIC0wNTAwClN1YmplY3Q6IFtQ QVRDSCB2OSAwOC8xMF0gRG9uJ3Qgd2FpdCBmb3IgYWxyZWFkeSBpbi1wcm9ncmVzcyBJTwpNSU1F LVZlcnNpb246IDEuMApDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKQ29u dGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAoKV2hlbiBhIGJhY2tlbmQgYXR0ZW1wdHMgdG8g c3RhcnQgYSByZWFkIG9uIGEgYnVmZmVyIGFuZCBmaW5kcyB0aGF0IEkvTwppcyBhbHJlYWR5IGlu IHByb2dyZXNzLCBpdCBwcmV2aW91c2x5IHdhaXRlZCBmb3IgdGhhdCBJL08gdG8gY29tcGxldGUK YmVmb3JlIGluaXRpYXRpbmcgcmVhZHMgZm9yIGFueSBvdGhlciBidWZmZXJzLiBBbHRob3VnaCB0 aGUgYmFja2VuZCBtdXN0CnN0aWxsIHdhaXQgZm9yIHRoZSBJL08gdG8gZmluaXNoIHdoZW4gbGF0 ZXIgYWNxdWlyaW5nIHRoZSBidWZmZXIsIGl0CnNob3VsZCBub3QgbmVlZCB0byB3YWl0IGF0IHJl YWQgc3RhcnQgdGltZS4gT3RoZXIgYnVmZmVycyBtYXkgYmUKYXZhaWxhYmxlIGZvciBJL08sIGFu ZCBpbiBzb21lIHdvcmtsb2FkcyB0aGlzIHdhaXRpbmcgc2lnbmlmaWNhbnRseQpyZWR1Y2VzIGNv bmN1cnJlbmN5LgoKRm9yIGV4YW1wbGUsIGluZGV4IHNjYW5zIG1heSByZXBlYXRlZGx5IHJlcXVl c3QgdGhlIHNhbWUgaGVhcCBibG9jay4gSWYKdGhlIGJhY2tlbmQgd2FpdHMgZWFjaCB0aW1lIGl0 IGVuY291bnRlcnMgYW4gaW4tcHJvZ3Jlc3MgcmVhZCwgdGhlCmFjY2VzcyBwYXR0ZXJuIGVmZmVj dGl2ZWx5IGRlZ2VuZXJhdGVzIGludG8gc3luY2hyb25vdXMgSS9PLiBCeQppbnRyb2R1Y2luZyB0 aGUgY29uY2VwdCBvZiBmb3JlaWduIEkvTyBvcGVyYXRpb25zLCBhIGJhY2tlbmQgY2FuIHJlY29y ZAp0aGUgYnVmZmVy4oCZcyB3YWl0IHJlZmVyZW5jZSBhbmQgZGVmZXIgd2FpdGluZyB1bnRpbCBX YWl0UmVhZEJ1ZmZlcnMoKQp3aGVuIGl0IGFjdHVhbGx5IGFjcXVpcmVzIHRoZSBidWZmZXIuCgpJ biByYXJlIGNhc2VzLCBhIGJhY2tlbmQgbWF5IHN0aWxsIG5lZWQgdG8gd2FpdCB3aGVuIHN0YXJ0 aW5nIGEgcmVhZCBpZgppdCBlbmNvdW50ZXJzIGEgYnVmZmVyIGFmdGVyIGFub3RoZXIgYmFja2Vu ZCBoYXMgc2V0IEJNX0lPX0lOX1BST0dSRVNTCmJ1dCBiZWZvcmUgdGhlIGJ1ZmZlciBkZXNjcmlw dG9y4oCZcyB3YWl0IHJlZmVyZW5jZSBoYXMgYmVlbiBzZXQuIFN1Y2gKd2luZG93cyBzaG91bGQg YmUgYnJpZWYgYW5kIHVuY29tbW9uLgotLS0KIHNyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmgg ICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jIHwgNDkx ICsrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0KIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVm cy5saXN0ICAgIHwgICAxICsKIDMgZmlsZXMgY2hhbmdlZCwgMzI1IGluc2VydGlvbnMoKyksIDE2 OCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5o IGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3IuaAppbmRleCBhNDBhZGY2YjIuLjEzNThmYzdm YSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3IuaAorKysgYi9zcmMvaW5j bHVkZS9zdG9yYWdlL2J1Zm1nci5oCkBAIC0xNDcsNiArMTQ3LDcgQEAgc3RydWN0IFJlYWRCdWZm ZXJzT3BlcmF0aW9uCiAJaW50CQkJZmxhZ3M7CiAJaW50MTYJCW5ibG9ja3M7CiAJaW50MTYJCW5i bG9ja3NfZG9uZTsKKwlib29sCQlmb3JlaWduX2lvOwogCVBnQWlvV2FpdFJlZiBpb193cmVmOwog CVBnQWlvUmV0dXJuIGlvX3JldHVybjsKIH07CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9y YWdlL2J1ZmZlci9idWZtZ3IuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5j CmluZGV4IDRhOGY0MGRhYS4uYjhmMDhjMWQzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9y YWdlL2J1ZmZlci9idWZtZ3IuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZt Z3IuYwpAQCAtMTY5LDYgKzE2OSwyMSBAQCB0eXBlZGVmIHN0cnVjdCBTTWdyU29ydEFycmF5CiAJ U01nclJlbGF0aW9uIHNyZWw7CiB9IFNNZ3JTb3J0QXJyYXk7CiAKKworLyoKKyAqIEluIEFzeW5j UmVhZEJ1ZmZlcnMoKSwgd2hlbiBwcmVwYXJpbmcgYSBidWZmZXIgZm9yIHJlYWRpbmcgYW5kIHNl dHRpbmcKKyAqIEJNX0lPX0lOX1BST0dSRVNTLCB0aGUgYnVmZmVyIG1heSBhbHJlYWR5IGhhdmUg SS9PIGluIHByb2dyZXNzIG9yIG1heQorICogYWxyZWFkeSBjb250YWluIHRoZSBkZXNpcmVkIGJs b2NrLiBBc3luY1JlYWRCdWZmZXJzKCkgbXVzdCBkaXN0aW5ndWlzaAorICogYmV0d2VlbiB0aGVz ZSBjYXNlcyAoYW5kIHRoZSBjYXNlIHdoZXJlIGl0IHNob3VsZCBpbml0aWF0ZSBJL08pIHNvIGl0 IGNhbgorICogbWFyayBhbiBpbi1wcm9ncmVzcyBidWZmZXIgYXMgZm9yZWlnbiBJL08gcmF0aGVy IHRoYW4gd2FpdGluZyBvbiBpdC4KKyAqLwordHlwZWRlZiBlbnVtIFByZXBhcmVSZWFkQnVmZmVy X1N0YXR1cworeworCVJFQURfQlVGRkVSX0FMUkVBRFlfRE9ORSwKKwlSRUFEX0JVRkZFUl9JTl9Q Uk9HUkVTUywKKwlSRUFEX0JVRkZFUl9SRUFEWV9GT1JfSU8sCit9IFByZXBhcmVSZWFkQnVmZmVy X1N0YXR1czsKKwogLyogR1VDIHZhcmlhYmxlcyAqLwogYm9vbAkJemVyb19kYW1hZ2VkX3BhZ2Vz ID0gZmFsc2U7CiBpbnQJCQliZ3dyaXRlcl9scnVfbWF4cGFnZXMgPSAxMDA7CkBAIC0xNjE4LDQ1 ICsxNjMzLDYgQEAgQ2hlY2tSZWFkQnVmZmVyc09wZXJhdGlvbihSZWFkQnVmZmVyc09wZXJhdGlv biAqb3BlcmF0aW9uLCBib29sIGlzX2NvbXBsZXRlKQogI2VuZGlmCiB9CiAKLS8qIGhlbHBlciBm b3IgUmVhZEJ1ZmZlcnNDYW5TdGFydElPKCksIHRvIGF2b2lkIHJlcGV0aXRpb24gKi8KLXN0YXRp YyBpbmxpbmUgYm9vbAotUmVhZEJ1ZmZlcnNDYW5TdGFydElPT25jZShCdWZmZXIgYnVmZmVyLCBi b29sIG5vd2FpdCkKLXsKLQlpZiAoQnVmZmVySXNMb2NhbChidWZmZXIpKQotCQlyZXR1cm4gU3Rh cnRMb2NhbEJ1ZmZlcklPKEdldExvY2FsQnVmZmVyRGVzY3JpcHRvcigtYnVmZmVyIC0gMSksCi0J CQkJCQkJCSAgdHJ1ZSwgbm93YWl0KTsKLQllbHNlCi0JCXJldHVybiBTdGFydEJ1ZmZlcklPKEdl dEJ1ZmZlckRlc2NyaXB0b3IoYnVmZmVyIC0gMSksIHRydWUsIG5vd2FpdCk7Ci19Ci0KLS8qCi0g KiBIZWxwZXIgZm9yIEFzeW5jUmVhZEJ1ZmZlcnMgdGhhdCB0cmllcyB0byBnZXQgdGhlIGJ1ZmZl ciByZWFkeSBmb3IgSU8uCi0gKi8KLXN0YXRpYyBpbmxpbmUgYm9vbAotUmVhZEJ1ZmZlcnNDYW5T dGFydElPKEJ1ZmZlciBidWZmZXIsIGJvb2wgbm93YWl0KQotewotCS8qCi0JICogSWYgdGhpcyBi YWNrZW5kIGN1cnJlbnRseSBoYXMgc3RhZ2VkIElPLCB3ZSBuZWVkIHRvIHN1Ym1pdCB0aGUgcGVu ZGluZwotCSAqIElPIGJlZm9yZSB3YWl0aW5nIGZvciB0aGUgcmlnaHQgdG8gaXNzdWUgSU8sIHRv IGF2b2lkIHRoZSBwb3RlbnRpYWwgZm9yCi0JICogZGVhZGxvY2tzIChhbmQsIG1vcmUgY29tbW9u bHksIHVubmVjZXNzYXJ5IGRlbGF5cyBmb3Igb3RoZXIgYmFja2VuZHMpLgotCSAqLwotCWlmICgh bm93YWl0ICYmIHBnYWlvX2hhdmVfc3RhZ2VkKCkpCi0JewotCQlpZiAoUmVhZEJ1ZmZlcnNDYW5T dGFydElPT25jZShidWZmZXIsIHRydWUpKQotCQkJcmV0dXJuIHRydWU7Ci0KLQkJLyoKLQkJICog VW5mb3J0dW5hdGVseSBTdGFydEJ1ZmZlcklPKCkgcmV0dXJuaW5nIGZhbHNlIGRvZXNuJ3QgYWxs b3cgdG8KLQkJICogZGlzdGluZ3Vpc2ggYmV0d2VlbiB0aGUgYnVmZmVyIGFscmVhZHkgYmVpbmcg dmFsaWQgYW5kIElPIGFscmVhZHkKLQkJICogYmVpbmcgaW4gcHJvZ3Jlc3MuIFNpbmNlIElPIGFs cmVhZHkgYmVpbmcgaW4gcHJvZ3Jlc3MgaXMgcXVpdGUKLQkJICogcmFyZSwgdGhpcyBhcHByb2Fj aCBzZWVtcyBmaW5lLgotCQkgKi8KLQkJcGdhaW9fc3VibWl0X3N0YWdlZCgpOwotCX0KLQotCXJl dHVybiBSZWFkQnVmZmVyc0NhblN0YXJ0SU9PbmNlKGJ1ZmZlciwgbm93YWl0KTsKLX0KLQogLyoK ICAqIFdlIHRyYWNrIHZhcmlvdXMgc3RhdHMgcmVsYXRlZCB0byBidWZmZXIgaGl0cy4gQmVjYXVz ZSB0aGlzIGlzIGRvbmUgaW4gYQogICogZmV3IHNlcGFyYXRlIHBsYWNlcywgdGhpcyBoZWxwZXIg ZXhpc3RzIGZvciBjb252ZW5pZW5jZS4KQEAgLTE4MDYsNyArMTc4Miw3IEBAIFdhaXRSZWFkQnVm ZmVycyhSZWFkQnVmZmVyc09wZXJhdGlvbiAqb3BlcmF0aW9uKQogCQkJICoKIAkJCSAqIHdlIGZp cnN0IGNoZWNrIGlmIHdlIGFscmVhZHkga25vdyB0aGUgSU8gaXMgY29tcGxldGUuCiAJCQkgKi8K LQkJCWlmIChhaW9fcmV0LT5yZXN1bHQuc3RhdHVzID09IFBHQUlPX1JTX1VOS05PV04gJiYKKwkJ CWlmICgob3BlcmF0aW9uLT5mb3JlaWduX2lvIHx8IGFpb19yZXQtPnJlc3VsdC5zdGF0dXMgPT0g UEdBSU9fUlNfVU5LTk9XTikgJiYKIAkJCQkhcGdhaW9fd3JlZl9jaGVja19kb25lKCZvcGVyYXRp b24tPmlvX3dyZWYpKQogCQkJewogCQkJCWluc3RyX3RpbWUJaW9fc3RhcnQgPSBwZ3N0YXRfcHJl cGFyZV9pb190aW1lKHRyYWNrX2lvX3RpbWluZyk7CkBAIC0xODI1LDExICsxODAxLDMzIEBAIFdh aXRSZWFkQnVmZmVycyhSZWFkQnVmZmVyc09wZXJhdGlvbiAqb3BlcmF0aW9uKQogCQkJCUFzc2Vy dChwZ2Fpb193cmVmX2NoZWNrX2RvbmUoJm9wZXJhdGlvbi0+aW9fd3JlZikpOwogCQkJfQogCi0J CQkvKgotCQkJICogV2Ugbm93IGFyZSBzdXJlIHRoZSBJTyBjb21wbGV0ZWQuIENoZWNrIHRoZSBy ZXN1bHRzLiBUaGlzCi0JCQkgKiBpbmNsdWRlcyByZXBvcnRpbmcgb24gZXJyb3JzIGlmIHRoZXJl IHdlcmUgYW55LgotCQkJICovCi0JCQlQcm9jZXNzUmVhZEJ1ZmZlcnNSZXN1bHQob3BlcmF0aW9u KTsKKwkJCWlmICh1bmxpa2VseShvcGVyYXRpb24tPmZvcmVpZ25faW8pKQorCQkJeworCQkJCUJ1 ZmZlcgkJYnVmZmVyID0gb3BlcmF0aW9uLT5idWZmZXJzW29wZXJhdGlvbi0+bmJsb2Nrc19kb25l XTsKKwkJCQlCdWZmZXJEZXNjICpkZXNjID0gQnVmZmVySXNMb2NhbChidWZmZXIpID8KKwkJCQkJ R2V0TG9jYWxCdWZmZXJEZXNjcmlwdG9yKC1idWZmZXIgLSAxKSA6CisJCQkJCUdldEJ1ZmZlckRl c2NyaXB0b3IoYnVmZmVyIC0gMSk7CisJCQkJdWludDMyCQlidWZfc3RhdGUgPSBwZ19hdG9taWNf cmVhZF91NjQoJmRlc2MtPnN0YXRlKTsKKworCQkJCWlmIChidWZfc3RhdGUgJiBCTV9WQUxJRCkK KwkJCQl7CisJCQkJCW9wZXJhdGlvbi0+bmJsb2Nrc19kb25lICs9IDE7CisJCQkJCUFzc2VydChv cGVyYXRpb24tPm5ibG9ja3NfZG9uZSA8PSBvcGVyYXRpb24tPm5ibG9ja3MpOworCisJCQkJCVBy b2Nlc3NCdWZmZXJIaXQob3BlcmF0aW9uLT5zdHJhdGVneSwKKwkJCQkJCQkJCSBvcGVyYXRpb24t PnJlbCwgb3BlcmF0aW9uLT5wZXJzaXN0ZW5jZSwKKwkJCQkJCQkJCSBvcGVyYXRpb24tPnNtZ3Is IG9wZXJhdGlvbi0+Zm9ya251bSwKKwkJCQkJCQkJCSBvcGVyYXRpb24tPmJsb2NrbnVtICsgb3Bl cmF0aW9uLT5uYmxvY2tzX2RvbmUpOworCQkJCX0KKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQkv KgorCQkJCSAqIFdlIG5vdyBhcmUgc3VyZSB0aGUgSU8gY29tcGxldGVkLiBDaGVjayB0aGUgcmVz dWx0cy4gVGhpcworCQkJCSAqIGluY2x1ZGVzIHJlcG9ydGluZyBvbiBlcnJvcnMgaWYgdGhlcmUg d2VyZSBhbnkuCisJCQkJICovCisJCQkJUHJvY2Vzc1JlYWRCdWZmZXJzUmVzdWx0KG9wZXJhdGlv bik7CisJCQl9CiAJCX0KIAogCQkvKgpAQCAtMTg2MCw2ICsxODU4LDE1OSBAQCBXYWl0UmVhZEJ1 ZmZlcnMoUmVhZEJ1ZmZlcnNPcGVyYXRpb24gKm9wZXJhdGlvbikKIAkvKiBOQjogUkVBRF9ET05F IHRyYWNlcG9pbnQgd2FzIGFscmVhZHkgZXhlY3V0ZWQgaW4gY29tcGxldGlvbiBjYWxsYmFjayAq LwogfQogCisvKgorICogTG9jYWwgdmVyc2lvbiBvZiBQcmVwYXJlTmV3UmVhZEJ1ZmZlcklPKCku IEhlcmUgaW5zdGVhZCBvZiBsb2NhbGJ1Zi5jIHRvCisgKiBhdm9pZCBhbiBleHRlcm5hbCBmdW5j dGlvbiBjYWxsLgorICovCitzdGF0aWMgUHJlcGFyZVJlYWRCdWZmZXJfU3RhdHVzCitQcmVwYXJl TmV3TG9jYWxSZWFkQnVmZmVySU8oUmVhZEJ1ZmZlcnNPcGVyYXRpb24gKm9wZXJhdGlvbiwKKwkJ CQkJCQlCdWZmZXIgYnVmZmVyKQoreworCUJ1ZmZlckRlc2MgKmRlc2MgPSBHZXRMb2NhbEJ1ZmZl ckRlc2NyaXB0b3IoLWJ1ZmZlciAtIDEpOworCXVpbnQ2NAkJYnVmX3N0YXRlID0gcGdfYXRvbWlj X3JlYWRfdTY0KCZkZXNjLT5zdGF0ZSk7CisKKwkvKiBBbHJlYWR5IHZhbGlkLCBubyB3b3JrIHRv IGRvICovCisJaWYgKGJ1Zl9zdGF0ZSAmIEJNX1ZBTElEKQorCXsKKwkJcGdhaW9fd3JlZl9jbGVh cigmb3BlcmF0aW9uLT5pb193cmVmKTsKKwkJcmV0dXJuIFJFQURfQlVGRkVSX0FMUkVBRFlfRE9O RTsKKwl9CisKKwlwZ2Fpb19zdWJtaXRfc3RhZ2VkKCk7CisKKwlpZiAocGdhaW9fd3JlZl92YWxp ZCgmZGVzYy0+aW9fd3JlZikpCisJeworCQlvcGVyYXRpb24tPmlvX3dyZWYgPSBkZXNjLT5pb193 cmVmOworCQlvcGVyYXRpb24tPmZvcmVpZ25faW8gPSB0cnVlOworCQlyZXR1cm4gUkVBRF9CVUZG RVJfSU5fUFJPR1JFU1M7CisJfQorCisJcmV0dXJuIFJFQURfQlVGRkVSX1JFQURZX0ZPUl9JTzsK K30KKworLyoKKyAqIFRyeSB0byBzdGFydCBJTyBvbiB0aGUgZmlyc3QgYnVmZmVyIGluIGEgbmV3 IHJ1biBvZiBibG9ja3MuIElmIEFJTyBpcyBpbgorICogcHJvZ3Jlc3MsIGJlIGl0IGluIHRoaXMg YmFja2VuZCBvciBhbm90aGVyIGJhY2tlbmQsIHdlIGp1c3QgYXNzb2NpYXRlIHRoZQorICogd2Fp dCByZWZlcmVuY2Ugd2l0aCB0aGUgb3BlcmF0aW9uIGFuZCB3YWl0IGluIFdhaXRSZWFkQnVmZmVy cygpLiBUaGlzIHR1cm5zCisgKiBvdXQgdG8gYmUgaW1wb3J0YW50IGZvciBwZXJmb3JtYW5jZSBp biB0d28gd29ya2xvYWRzOgorICoKKyAqIDEpIEEgcmVhZCBzdHJlYW0gdGhhdCBoYXMgdG8gcmVh ZCB0aGUgc2FtZSBibG9jayBtdWx0aXBsZSB0aW1lcyB3aXRoaW4gdGhlCisgKiAgICByZWFkYWhl YWQgZGlzdGFuY2UuIFRoaXMgY2FuIGhhcHBlbiBlLmcuIGZvciB0aGUgdGFibGUgYWNjZXNzZXMg b2YgYW4KKyAqICAgIGluZGV4IHNjYW4uCisgKgorICogMikgQ29uY3VycmVudCBzY2FucyBieSBt dWx0aXBsZSBiYWNrZW5kcyBvbiB0aGUgc2FtZSByZWxhdGlvbi4KKyAqCisgKiBJZiB3ZSB3ZXJl IHRvIHN5bmNocm9ub3VzbHkgd2FpdCBmb3IgdGhlIGluLXByb2dyZXNzIElPLCB3ZSdkIG5vdCBi ZSBhYmxlCisgKiB0byBrZWVwIGVub3VnaCBJL08gaW4gZmxpZ2h0LgorICoKKyAqIElmIHdlIGRv IGZpbmQgdGhlcmUgaXMgb25nb2luZyBJL08gZm9yIHRoZSBidWZmZXIsIHdlIHNldCB1cCBhIDEt YmxvY2sKKyAqIFJlYWRCdWZmZXJzT3BlcmF0aW9uIHRoYXQgV2FpdFJlYWRCdWZmZXJzIHRoZW4g Y2FuIHdhaXQgb24uCisgKgorICogSXQncyBwb3NzaWJsZSB0aGF0IGFub3RoZXIgYmFja2VuZCBo YXMgc3RhcnRlZCBJTyBvbiB0aGUgYnVmZmVyIGJ1dCBub3QgeWV0CisgKiBzZXQgaXRzIHdhaXQg cmVmZXJlbmNlLiBJbiB0aGlzIGNhc2UsIHdlIGhhdmUgbm8gY2hvaWNlIGJ1dCB0byB3YWl0IGZv cgorICogZWl0aGVyIHRoZSB3YWl0IHJlZmVyZW5jZSB0byBiZSB2YWxpZCBvciB0aGUgSU8gdG8g YmUgZG9uZS4KKyAqLworc3RhdGljIFByZXBhcmVSZWFkQnVmZmVyX1N0YXR1cworUHJlcGFyZU5l d1JlYWRCdWZmZXJJTyhSZWFkQnVmZmVyc09wZXJhdGlvbiAqb3BlcmF0aW9uLAorCQkJCQkgICBC dWZmZXIgYnVmZmVyKQoreworCXVpbnQ2NAkJYnVmX3N0YXRlOworCUJ1ZmZlckRlc2MgKmRlc2M7 CisKKwlpZiAoQnVmZmVySXNMb2NhbChidWZmZXIpKQorCQlyZXR1cm4gUHJlcGFyZU5ld0xvY2Fs UmVhZEJ1ZmZlcklPKG9wZXJhdGlvbiwgYnVmZmVyKTsKKworCVJlc291cmNlT3duZXJFbmxhcmdl KEN1cnJlbnRSZXNvdXJjZU93bmVyKTsKKwlkZXNjID0gR2V0QnVmZmVyRGVzY3JpcHRvcihidWZm ZXIgLSAxKTsKKworCWZvciAoOzspCisJeworCQlidWZfc3RhdGUgPSBMb2NrQnVmSGRyKGRlc2Mp OworCisJCS8qIEFscmVhZHkgdmFsaWQsIG5vIHdvcmsgdG8gZG8gKi8KKwkJaWYgKGJ1Zl9zdGF0 ZSAmIEJNX1ZBTElEKQorCQl7CisJCQlVbmxvY2tCdWZIZHIoZGVzYyk7CisJCQlwZ2Fpb193cmVm X2NsZWFyKCZvcGVyYXRpb24tPmlvX3dyZWYpOworCQkJcmV0dXJuIFJFQURfQlVGRkVSX0FMUkVB RFlfRE9ORTsKKwkJfQorCisJCWlmIChidWZfc3RhdGUgJiBCTV9JT19JTl9QUk9HUkVTUykKKwkJ eworCQkJLyogSm9pbiBleGlzdGluZyByZWFkICovCisJCQlpZiAocGdhaW9fd3JlZl92YWxpZCgm ZGVzYy0+aW9fd3JlZikpCisJCQl7CisJCQkJb3BlcmF0aW9uLT5pb193cmVmID0gZGVzYy0+aW9f d3JlZjsKKwkJCQlvcGVyYXRpb24tPmZvcmVpZ25faW8gPSB0cnVlOworCQkJCVVubG9ja0J1Zkhk cihkZXNjKTsKKwkJCQlyZXR1cm4gUkVBRF9CVUZGRVJfSU5fUFJPR1JFU1M7CisJCQl9CisKKwkJ CS8qCisJCQkgKiBJZiB0aGUgd2FpdCByZWYgaXMgbm90IHZhbGlkIGJ1dCB0aGUgSU8gaXMgaW4g cHJvZ3Jlc3MsIHNvbWVvbmUKKwkJCSAqIGVsc2Ugc3RhcnRlZCBJTyBidXQgaGFzbid0IHNldCB0 aGUgd2FpdCByZWYgeWV0LiBXZSBoYXZlIG5vCisJCQkgKiBjaG9pY2UgYnV0IHRvIHdhaXQgdW50 aWwgdGhlIHdhaXQgcmVmIGlzIHNldCBvciB0aGUgSU8KKwkJCSAqIGNvbXBsZXRlcy4KKwkJCSAq LworCQkJVW5sb2NrQnVmSGRyKGRlc2MpOworCQkJcGdhaW9fc3VibWl0X3N0YWdlZCgpOworCQkJ V2FpdElPKGRlc2MpOworCQkJY29udGludWU7CisJCX0KKworCQkvKgorCQkgKiBObyBJTyBpbiBw cm9ncmVzcyBhbmQgbm90IGFscmVhZHkgdmFsaWQ7IFdlIHdpbGwgc3RhcnQgSU8uIEl0J3MKKwkJ ICogcG9zc2libGUgdGhhdCB0aGUgSU8gd2FzIGluIHByb2dyZXNzIGFuZCBuZXZlciBiZWNhbWUg dmFsaWQgYmVjYXVzZQorCQkgKiB0aGUgSU8gZXJyb3JlZCBvdXQuIFdlJ2xsIGRvIHRoZSBJTyBv dXJzZWx2ZXMuCisJCSAqLworCQlVbmxvY2tCdWZIZHJFeHQoZGVzYywgYnVmX3N0YXRlLCBCTV9J T19JTl9QUk9HUkVTUywgMCwgMCk7CisJCVJlc291cmNlT3duZXJSZW1lbWJlckJ1ZmZlcklPKEN1 cnJlbnRSZXNvdXJjZU93bmVyLAorCQkJCQkJCQkJICBCdWZmZXJEZXNjcmlwdG9yR2V0QnVmZmVy KGRlc2MpKTsKKworCQlyZXR1cm4gUkVBRF9CVUZGRVJfUkVBRFlfRk9SX0lPOworCX0KK30KKwor CisvKgorICogV2hlbiBidWlsZGluZyBhIG5ldyBJTyBmcm9tIG11bHRpcGxlIGJ1ZmZlcnMsIHdl IHdvbid0IGluY2x1ZGUgYnVmZmVycworICogdGhhdCBhcmUgYWxyZWFkeSB2YWxpZCBvciBhbHJl YWR5IGluIHByb2dyZXNzLiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBvbmx5IGJlCisgKiB1c2VkIGZv ciBhZGRpdGlvbmFsIGFkamFjZW50IGJ1ZmZlcnMgZm9sbG93aW5nIHRoZSBoZWFkIGJ1ZmZlciBp biBhIG5ldyBJTy4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGJ1ZmZlciB3YXMgc3VjY2Vz c2Z1bGx5IHByZXBhcmVkIGZvciBJTyBhbmQgZmFsc2UgaWYgaXQKKyAqIGlzIHJlamVjdGVkIGFu ZCB0aGUgcmVhZCBJTyBzaG91bGQgbm90IGluY2x1ZGUgdGhpcyBidWZmZXIuCisqLworc3RhdGlj IGJvb2wKK1ByZXBhcmVBZGRpdGlvbmFsUmVhZEJ1ZmZlcihCdWZmZXIgYnVmZmVyKQoreworCXVp bnQ2NAkJYnVmX3N0YXRlOworCUJ1ZmZlckRlc2MgKmRlc2M7CisKKwlpZiAoQnVmZmVySXNMb2Nh bChidWZmZXIpKQorCXsKKwkJZGVzYyA9IEdldExvY2FsQnVmZmVyRGVzY3JpcHRvcigtYnVmZmVy IC0gMSk7CisJCWJ1Zl9zdGF0ZSA9IHBnX2F0b21pY19yZWFkX3U2NCgmZGVzYy0+c3RhdGUpOwor CQkvKiBMb2NhbCBidWZmZXJzIGRvbid0IHVzZSBCTV9JT19JTl9QUk9HUkVTUyAqLworCQlpZiAo YnVmX3N0YXRlICYgQk1fVkFMSUQgfHwgcGdhaW9fd3JlZl92YWxpZCgmZGVzYy0+aW9fd3JlZikp CisJCQlyZXR1cm4gZmFsc2U7CisJfQorCWVsc2UKKwl7CisJCVJlc291cmNlT3duZXJFbmxhcmdl KEN1cnJlbnRSZXNvdXJjZU93bmVyKTsKKwkJZGVzYyA9IEdldEJ1ZmZlckRlc2NyaXB0b3IoYnVm ZmVyIC0gMSk7CisJCWJ1Zl9zdGF0ZSA9IExvY2tCdWZIZHIoZGVzYyk7CisJCWlmIChidWZfc3Rh dGUgJiAoQk1fVkFMSUQgfCBCTV9JT19JTl9QUk9HUkVTUykpCisJCXsKKwkJCVVubG9ja0J1Zkhk cihkZXNjKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCQlVbmxvY2tCdWZIZHJFeHQoZGVzYywg YnVmX3N0YXRlLCBCTV9JT19JTl9QUk9HUkVTUywgMCwgMCk7CisJCVJlc291cmNlT3duZXJSZW1l bWJlckJ1ZmZlcklPKEN1cnJlbnRSZXNvdXJjZU93bmVyLCBidWZmZXIpOworCX0KKworCXJldHVy biB0cnVlOworfQorCiAvKgogICogSW5pdGlhdGUgSU8gZm9yIHRoZSBSZWFkQnVmZmVyc09wZXJh dGlvbgogICoKQEAgLTE4OTMsNyArMjA0NCw3NSBAQCBBc3luY1JlYWRCdWZmZXJzKFJlYWRCdWZm ZXJzT3BlcmF0aW9uICpvcGVyYXRpb24sIGludCAqbmJsb2Nrc19wcm9ncmVzcykKIAl2b2lkCSAg ICppb19wYWdlc1tNQVhfSU9fQ09NQklORV9MSU1JVF07CiAJSU9Db250ZXh0CWlvX2NvbnRleHQ7 CiAJSU9PYmplY3QJaW9fb2JqZWN0OwotCWJvb2wJCWRpZF9zdGFydF9pbzsKKwlpbnN0cl90aW1l CWlvX3N0YXJ0OworCVByZXBhcmVSZWFkQnVmZmVyX1N0YXR1cyBzdGF0dXM7CisKKwkvKgorCSAq IFdlIG11c3QgZ2V0IGFuIElPIGhhbmRsZSBiZWZvcmUgU3RhcnROZXdCdWZmZXJSZWFkSU8oKSwg YXMKKwkgKiBwZ2Fpb19pb19hY3F1aXJlKCkgbWlnaHQgYmxvY2ssIHdoaWNoIHdlIGRvbid0IHdh bnQgYWZ0ZXIgc2V0dGluZworCSAqIElPX0lOX1BST0dSRVNTLiBJZiB3ZSBkb24ndCBuZWVkIHRv IGRvIHRoZSBJTywgd2UnbGwgcmVsZWFzZSB0aGUKKwkgKiBoYW5kbGUuCisJICoKKwkgKiBJZiB3 ZSBuZWVkIHRvIHdhaXQgZm9yIElPIGJlZm9yZSB3ZSBjYW4gZ2V0IGEgaGFuZGxlLCBzdWJtaXQK KwkgKiBhbHJlYWR5LXN0YWdlZCBJTyBmaXJzdCwgc28gdGhhdCBvdGhlciBiYWNrZW5kcyBkb24n dCBuZWVkIHRvIHdhaXQuCisJICogVGhlcmUgd291bGRuJ3QgYmUgYSBkZWFkbG9jayByaXNrLCBh cyBwZ2Fpb19pb19hY3F1aXJlKCkganVzdCBuZWVkcyB0bworCSAqIHdhaXQgZm9yIGFscmVhZHkg c3VibWl0dGVkIElPLCB3aGljaCBkb2Vzbid0IHJlcXVpcmUgYWRkaXRpb25hbCBsb2NrcywKKwkg KiBidXQgaXQgY291bGQgc3RpbGwgY2F1c2UgdW5kZXNpcmFibGUgd2FpdHMuCisJICoKKwkgKiBB IHNlY29uZGFyeSBiZW5lZml0IGlzIHRoYXQgdGhpcyB3b3VsZCBhbGxvdyB1cyB0byBtZWFzdXJl IHRoZSB0aW1lIGluCisJICogcGdhaW9faW9fYWNxdWlyZSgpIHdpdGhvdXQgY2F1c2luZyB1bmR1 ZSB0aW1lciBvdmVyaGVhZCBpbiB0aGUgY29tbW9uLAorCSAqIG5vbi1ibG9ja2luZywgY2FzZS4g IEhvd2V2ZXIsIGN1cnJlbnRseSB0aGUgcGdzdGF0cyBpbmZyYXN0cnVjdHVyZQorCSAqIGRvZXNu J3QgcmVhbGx5IGFsbG93IHRoYXQsIGFzIGl0IGEpIGFzc2VydHMgdGhhdCBhbiBvcGVyYXRpb24g Y2FuJ3QKKwkgKiBoYXZlIHRpbWUgd2l0aG91dCBvcGVyYXRpb25zIGIpIGRvZXNuJ3QgaGF2ZSBh biBBUEkgdG8gcmVwb3J0CisJICogImFjY3VtdWxhdGVkIiB0aW1lLgorCSAqLworCWlvaCA9IHBn YWlvX2lvX2FjcXVpcmVfbmIoQ3VycmVudFJlc291cmNlT3duZXIsICZvcGVyYXRpb24tPmlvX3Jl dHVybik7CisJaWYgKHVubGlrZWx5KCFpb2gpKQorCXsKKwkJcGdhaW9fc3VibWl0X3N0YWdlZCgp OworCQlpb2ggPSBwZ2Fpb19pb19hY3F1aXJlKEN1cnJlbnRSZXNvdXJjZU93bmVyLCAmb3BlcmF0 aW9uLT5pb19yZXR1cm4pOworCX0KKworCW9wZXJhdGlvbi0+Zm9yZWlnbl9pbyA9IGZhbHNlOwor CisJLyogQ2hlY2sgaWYgd2UgY2FuIHN0YXJ0IElPIG9uIHRoZSBmaXJzdCB0by1iZS1yZWFkIGJ1 ZmZlciAqLworCWlmICgoc3RhdHVzID0gUHJlcGFyZU5ld1JlYWRCdWZmZXJJTyhvcGVyYXRpb24s IGJ1ZmZlcnNbbmJsb2Nrc19kb25lXSkpIDwKKwkJUkVBRF9CVUZGRVJfUkVBRFlfRk9SX0lPKQor CXsKKwkJcGdhaW9faW9fcmVsZWFzZShpb2gpOworCQkqbmJsb2Nrc19wcm9ncmVzcyA9IDE7CisJ CWlmIChzdGF0dXMgPT0gUkVBRF9CVUZGRVJfQUxSRUFEWV9ET05FKQorCQl7CisJCQkvKgorCQkJ ICogU29tZW9uZSBlbHNlIGhhcyBhbHJlYWR5IGNvbXBsZXRlZCB0aGlzIGJsb2NrLCB3ZSdyZSBk b25lLgorCQkJICoKKwkJCSAqIFdoZW4gSU8gaXMgbmVjZXNzYXJ5LCAtPm5ibG9ja3NfZG9uZSBp cyB1cGRhdGVkIGluCisJCQkgKiBQcm9jZXNzUmVhZEJ1ZmZlcnNSZXN1bHQoKSwgYnV0IHRoYXQg aXMgbm90IGNhbGxlZCBpZiBubyBJTyBpcworCQkJICogbmVjZXNzYXJ5LiBUaHVzIHVwZGF0ZSBo ZXJlLgorCQkJICovCisJCQlvcGVyYXRpb24tPm5ibG9ja3NfZG9uZSArPSAxOworCQkJQXNzZXJ0 KG9wZXJhdGlvbi0+bmJsb2Nrc19kb25lIDw9IG9wZXJhdGlvbi0+bmJsb2Nrcyk7CisKKwkJCS8q CisJCQkgKiBSZXBvcnQgYW5kIHRyYWNrIHRoaXMgYXMgYSAnaGl0JyBmb3IgdGhpcyBiYWNrZW5k LCBldmVuIHRob3VnaAorCQkJICogaXQgbXVzdCBoYXZlIHN0YXJ0ZWQgb3V0IGFzIGEgbWlzcyBp biBQaW5CdWZmZXJGb3JCbG9jaygpLiBUaGUKKwkJCSAqIG90aGVyIGJhY2tlbmQgd2lsbCB0cmFj ayB0aGlzIGFzIGEgJ3JlYWQnLgorCQkJICovCisJCQlQcm9jZXNzQnVmZmVySGl0KG9wZXJhdGlv bi0+c3RyYXRlZ3ksCisJCQkJCQkJIG9wZXJhdGlvbi0+cmVsLCBvcGVyYXRpb24tPnBlcnNpc3Rl bmNlLAorCQkJCQkJCSBvcGVyYXRpb24tPnNtZ3IsIG9wZXJhdGlvbi0+Zm9ya251bSwKKwkJCQkJ CQkgb3BlcmF0aW9uLT5ibG9ja251bSArIG9wZXJhdGlvbi0+bmJsb2Nrc19kb25lKTsKKwkJCXJl dHVybiBmYWxzZTsKKwkJfQorCisJCS8qIFRoZSBJTyBpcyBhbHJlYWR5IGluLXByb2dyZXNzICov CisJCUFzc2VydChzdGF0dXMgPT0gUkVBRF9CVUZGRVJfSU5fUFJPR1JFU1MpOworCQlDaGVja1Jl YWRCdWZmZXJzT3BlcmF0aW9uKG9wZXJhdGlvbiwgZmFsc2UpOworCQlyZXR1cm4gdHJ1ZTsKKwl9 CisKKwkvKiBXZSBjYW4gcmVhZCBpbiBhdCBsZWFzdCB0aGUgaGVhZCBidWZmZXIgLiAqLworCUFz c2VydChzdGF0dXMgPT0gUkVBRF9CVUZGRVJfUkVBRFlfRk9SX0lPKTsKIAogCS8qCiAJICogV2hl biB0aGlzIElPIGlzIGV4ZWN1dGVkIHN5bmNocm9ub3VzbHksIGVpdGhlciBiZWNhdXNlIHRoZSBj YWxsZXIgd2lsbApAQCAtMTk0NCwxMzggKzIxNjMsNzQgQEAgQXN5bmNSZWFkQnVmZmVycyhSZWFk QnVmZmVyc09wZXJhdGlvbiAqb3BlcmF0aW9uLCBpbnQgKm5ibG9ja3NfcHJvZ3Jlc3MpCiAJICov CiAJcGdzdGF0X3ByZXBhcmVfcmVwb3J0X2NoZWNrc3VtX2ZhaWx1cmUob3BlcmF0aW9uLT5zbWdy LT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IuZGJPaWQpOwogCi0JLyoKLQkgKiBHZXQgSU8gaGFuZGxl IGJlZm9yZSBSZWFkQnVmZmVyc0NhblN0YXJ0SU8oKSwgYXMgcGdhaW9faW9fYWNxdWlyZSgpCi0J ICogbWlnaHQgYmxvY2ssIHdoaWNoIHdlIGRvbid0IHdhbnQgYWZ0ZXIgc2V0dGluZyBJT19JTl9Q Uk9HUkVTUy4KLQkgKgotCSAqIElmIHdlIG5lZWQgdG8gd2FpdCBmb3IgSU8gYmVmb3JlIHdlIGNh biBnZXQgYSBoYW5kbGUsIHN1Ym1pdAotCSAqIGFscmVhZHktc3RhZ2VkIElPIGZpcnN0LCBzbyB0 aGF0IG90aGVyIGJhY2tlbmRzIGRvbid0IG5lZWQgdG8gd2FpdC4KLQkgKiBUaGVyZSB3b3VsZG4n dCBiZSBhIGRlYWRsb2NrIHJpc2ssIGFzIHBnYWlvX2lvX2FjcXVpcmUoKSBqdXN0IG5lZWRzIHRv Ci0JICogd2FpdCBmb3IgYWxyZWFkeSBzdWJtaXR0ZWQgSU8sIHdoaWNoIGRvZXNuJ3QgcmVxdWly ZSBhZGRpdGlvbmFsIGxvY2tzLAotCSAqIGJ1dCBpdCBjb3VsZCBzdGlsbCBjYXVzZSB1bmRlc2ly YWJsZSB3YWl0cy4KLQkgKgotCSAqIEEgc2Vjb25kYXJ5IGJlbmVmaXQgaXMgdGhhdCB0aGlzIHdv dWxkIGFsbG93IHVzIHRvIG1lYXN1cmUgdGhlIHRpbWUgaW4KLQkgKiBwZ2Fpb19pb19hY3F1aXJl KCkgd2l0aG91dCBjYXVzaW5nIHVuZHVlIHRpbWVyIG92ZXJoZWFkIGluIHRoZSBjb21tb24sCi0J ICogbm9uLWJsb2NraW5nLCBjYXNlLiAgSG93ZXZlciwgY3VycmVudGx5IHRoZSBwZ3N0YXRzIGlu ZnJhc3RydWN0dXJlCi0JICogZG9lc24ndCByZWFsbHkgYWxsb3cgdGhhdCwgYXMgaXQgYSkgYXNz ZXJ0cyB0aGF0IGFuIG9wZXJhdGlvbiBjYW4ndAotCSAqIGhhdmUgdGltZSB3aXRob3V0IG9wZXJh dGlvbnMgYikgZG9lc24ndCBoYXZlIGFuIEFQSSB0byByZXBvcnQKLQkgKiAiYWNjdW11bGF0ZWQi IHRpbWUuCi0JICovCi0JaW9oID0gcGdhaW9faW9fYWNxdWlyZV9uYihDdXJyZW50UmVzb3VyY2VP d25lciwgJm9wZXJhdGlvbi0+aW9fcmV0dXJuKTsKLQlpZiAodW5saWtlbHkoIWlvaCkpCi0Jewot CQlwZ2Fpb19zdWJtaXRfc3RhZ2VkKCk7Ci0KLQkJaW9oID0gcGdhaW9faW9fYWNxdWlyZShDdXJy ZW50UmVzb3VyY2VPd25lciwgJm9wZXJhdGlvbi0+aW9fcmV0dXJuKTsKLQl9CisJQXNzZXJ0KGlv X2J1ZmZlcnNbMF0gPT0gYnVmZmVyc1tuYmxvY2tzX2RvbmVdKTsKKwlpb19wYWdlc1swXSA9IEJ1 ZmZlckdldEJsb2NrKGJ1ZmZlcnNbbmJsb2Nrc19kb25lXSk7CisJaW9fYnVmZmVyc19sZW4gPSAx OwogCiAJLyoKLQkgKiBDaGVjayBpZiB3ZSBjYW4gc3RhcnQgSU8gb24gdGhlIGZpcnN0IHRvLWJl LXJlYWQgYnVmZmVyLgotCSAqCi0JICogSWYgYW4gSS9PIGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3Mg aW4gYW5vdGhlciBiYWNrZW5kLCB3ZSB3YW50IHRvIHdhaXQKLQkgKiBmb3IgdGhlIG91dGNvbWU6 IGVpdGhlciBkb25lLCBvciBzb21ldGhpbmcgd2VudCB3cm9uZyBhbmQgd2Ugd2lsbAotCSAqIHJl dHJ5LgorCSAqIEhvdyBtYW55IG5laWdoYm9yaW5nLW9uLWRpc2sgYmxvY2tzIGNhbiB3ZSBzY2F0 dGVyLXJlYWQgaW50byBvdGhlcgorCSAqIGJ1ZmZlcnMgYXQgdGhlIHNhbWUgdGltZT8gIEluIHRo aXMgY2FzZSB3ZSBkb24ndCB3YWl0IGlmIHdlIHNlZSBhbiBJL08KKwkgKiBhbHJlYWR5IGluIHBy b2dyZXNzLiAgV2UgYWxyZWFkeSBzZXQgQk1fSU9fSU5fUFJPR1JFU1MgZm9yIHRoZSBoZWFkCisJ ICogYmxvY2ssIHNvIHdlIHNob3VsZCBnZXQgb24gd2l0aCB0aGF0IEkvTyBhcyBzb29uIGFzIHBv c3NpYmxlLgogCSAqLwotCWlmICghUmVhZEJ1ZmZlcnNDYW5TdGFydElPKGJ1ZmZlcnNbbmJsb2Nr c19kb25lXSwgZmFsc2UpKQorCWZvciAoaW50IGkgPSBuYmxvY2tzX2RvbmUgKyAxOyBpIDwgb3Bl cmF0aW9uLT5uYmxvY2tzOyBpKyspCiAJewotCQkvKgotCQkgKiBTb21lb25lIGVsc2UgaGFzIGFs cmVhZHkgY29tcGxldGVkIHRoaXMgYmxvY2ssIHdlJ3JlIGRvbmUuCi0JCSAqCi0JCSAqIFdoZW4g SU8gaXMgbmVjZXNzYXJ5LCAtPm5ibG9ja3NfZG9uZSBpcyB1cGRhdGVkIGluCi0JCSAqIFByb2Nl c3NSZWFkQnVmZmVyc1Jlc3VsdCgpLCBidXQgdGhhdCBpcyBub3QgY2FsbGVkIGlmIG5vIElPIGlz Ci0JCSAqIG5lY2Vzc2FyeS4gVGh1cyB1cGRhdGUgaGVyZS4KLQkJICovCi0JCW9wZXJhdGlvbi0+ bmJsb2Nrc19kb25lICs9IDE7Ci0JCSpuYmxvY2tzX3Byb2dyZXNzID0gMTsKKwkJaWYgKCFQcmVw YXJlQWRkaXRpb25hbFJlYWRCdWZmZXIoYnVmZmVyc1tpXSkpCisJCQlicmVhazsKKwkJLyogTXVz dCBiZSBjb25zZWN1dGl2ZSBibG9jayBudW1iZXJzLiAqLworCQlBc3NlcnQoQnVmZmVyR2V0Qmxv Y2tOdW1iZXIoYnVmZmVyc1tpIC0gMV0pID09CisJCQkgICBCdWZmZXJHZXRCbG9ja051bWJlcihi dWZmZXJzW2ldKSAtIDEpOworCQlBc3NlcnQoaW9fYnVmZmVyc1tpb19idWZmZXJzX2xlbl0gPT0g YnVmZmVyc1tpXSk7CiAKLQkJcGdhaW9faW9fcmVsZWFzZShpb2gpOwotCQlwZ2Fpb193cmVmX2Ns ZWFyKCZvcGVyYXRpb24tPmlvX3dyZWYpOwotCQlkaWRfc3RhcnRfaW8gPSBmYWxzZTsKLQotCQkv KgotCQkgKiBSZXBvcnQgYW5kIHRyYWNrIHRoaXMgYXMgYSAnaGl0JyBmb3IgdGhpcyBiYWNrZW5k LCBldmVuIHRob3VnaCBpdAotCQkgKiBtdXN0IGhhdmUgc3RhcnRlZCBvdXQgYXMgYSBtaXNzIGlu IFBpbkJ1ZmZlckZvckJsb2NrKCkuIFRoZSBvdGhlcgotCQkgKiBiYWNrZW5kIHdpbGwgdHJhY2sg dGhpcyBhcyBhICdyZWFkJy4KLQkJICovCi0JCVByb2Nlc3NCdWZmZXJIaXQob3BlcmF0aW9uLT5z dHJhdGVneSwgb3BlcmF0aW9uLT5yZWwsIHBlcnNpc3RlbmNlLAotCQkJCQkJIG9wZXJhdGlvbi0+ c21nciwgZm9ya251bSwKLQkJCQkJCSBibG9ja251bSArIG9wZXJhdGlvbi0+bmJsb2Nrc19kb25l KTsKKwkJaW9fcGFnZXNbaW9fYnVmZmVyc19sZW4rK10gPSBCdWZmZXJHZXRCbG9jayhidWZmZXJz W2ldKTsKIAl9CisKKwkvKiBnZXQgYSByZWZlcmVuY2UgdG8gd2FpdCBmb3IgaW4gV2FpdFJlYWRC dWZmZXJzKCkgKi8KKwlwZ2Fpb19pb19nZXRfd3JlZihpb2gsICZvcGVyYXRpb24tPmlvX3dyZWYp OworCisJLyogcHJvdmlkZSB0aGUgbGlzdCBvZiBidWZmZXJzIHRvIHRoZSBjb21wbGV0aW9uIGNh bGxiYWNrcyAqLworCXBnYWlvX2lvX3NldF9oYW5kbGVfZGF0YV8zMihpb2gsICh1aW50MzIgKikg aW9fYnVmZmVycywgaW9fYnVmZmVyc19sZW4pOworCisJcGdhaW9faW9fcmVnaXN0ZXJfY2FsbGJh Y2tzKGlvaCwKKwkJCQkJCQkJcGVyc2lzdGVuY2UgPT0gUkVMUEVSU0lTVEVOQ0VfVEVNUCA/CisJ CQkJCQkJCVBHQUlPX0hDQl9MT0NBTF9CVUZGRVJfUkVBRFYgOgorCQkJCQkJCQlQR0FJT19IQ0Jf U0hBUkVEX0JVRkZFUl9SRUFEViwKKwkJCQkJCQkJZmxhZ3MpOworCisJcGdhaW9faW9fc2V0X2Zs YWcoaW9oLCBpb2hfZmxhZ3MpOworCisJLyogLS0tCisJKiBFdmVuIHRob3VnaCB3ZSdyZSB0cnlp bmcgdG8gaXNzdWUgSU8gYXN5bmNocm9ub3VzbHksIHRyYWNrIHRoZSB0aW1lCisJKiBpbiBzbWdy c3RhcnRyZWFkdigpOgorCSogLSBpZiBpb19tZXRob2QgPT0gSU9NRVRIT0RfU1lOQywgd2Ugd2ls bCBhbHdheXMgcGVyZm9ybSB0aGUgSU8KKwkqICAgaW1tZWRpYXRlbHkKKwkqIC0gdGhlIGlvIG1l dGhvZCBtaWdodCBub3Qgc3VwcG9ydCB0aGUgSU8gKGUuZy4gd29ya2VyIElPIGZvciBhIHRlbXAK KwkqICAgdGFibGUpCisJKiAtLS0KKwkqLworCWlvX3N0YXJ0ID0gcGdzdGF0X3ByZXBhcmVfaW9f dGltZSh0cmFja19pb190aW1pbmcpOworCXNtZ3JzdGFydHJlYWR2KGlvaCwgb3BlcmF0aW9uLT5z bWdyLCBmb3JrbnVtLAorCQkJCSAgIGJsb2NrbnVtICsgbmJsb2Nrc19kb25lLAorCQkJCSAgIGlv X3BhZ2VzLCBpb19idWZmZXJzX2xlbik7CisJcGdzdGF0X2NvdW50X2lvX29wX3RpbWUoaW9fb2Jq ZWN0LCBpb19jb250ZXh0LCBJT09QX1JFQUQsCisJCQkJCQkJaW9fc3RhcnQsIDEsIGlvX2J1ZmZl cnNfbGVuICogQkxDS1NaKTsKKworCWlmIChwZXJzaXN0ZW5jZSA9PSBSRUxQRVJTSVNURU5DRV9U RU1QKQorCQlwZ0J1ZmZlclVzYWdlLmxvY2FsX2Jsa3NfcmVhZCArPSBpb19idWZmZXJzX2xlbjsK IAllbHNlCi0JewotCQlpbnN0cl90aW1lCWlvX3N0YXJ0OworCQlwZ0J1ZmZlclVzYWdlLnNoYXJl ZF9ibGtzX3JlYWQgKz0gaW9fYnVmZmVyc19sZW47CiAKLQkJLyogV2UgZm91bmQgYSBidWZmZXIg dGhhdCB3ZSBuZWVkIHRvIHJlYWQgaW4uICovCi0JCUFzc2VydChpb19idWZmZXJzWzBdID09IGJ1 ZmZlcnNbbmJsb2Nrc19kb25lXSk7Ci0JCWlvX3BhZ2VzWzBdID0gQnVmZmVyR2V0QmxvY2soYnVm ZmVyc1tuYmxvY2tzX2RvbmVdKTsKLQkJaW9fYnVmZmVyc19sZW4gPSAxOworCS8qCisJICogVHJh Y2sgdmFjdXVtIGNvc3Qgd2hlbiBpc3N1aW5nIElPLCBub3QgYWZ0ZXIgd2FpdGluZyBmb3IgaXQu IE90aGVyd2lzZQorCSAqIHdlIGNvdWxkIGVuZCB1cCBpc3N1aW5nIGEgbG90IG9mIElPIGluIGEg c2hvcnQgdGltZXNwYW4sIGRlc3BpdGUgYSBsb3cKKwkgKiBjb3N0IGxpbWl0LgorCSAqLworCWlm IChWYWN1dW1Db3N0QWN0aXZlKQorCQlWYWN1dW1Db3N0QmFsYW5jZSArPSBWYWN1dW1Db3N0UGFn ZU1pc3MgKiBpb19idWZmZXJzX2xlbjsKIAotCQkvKgotCQkgKiBIb3cgbWFueSBuZWlnaGJvcmlu Zy1vbi1kaXNrIGJsb2NrcyBjYW4gd2Ugc2NhdHRlci1yZWFkIGludG8gb3RoZXIKLQkJICogYnVm ZmVycyBhdCB0aGUgc2FtZSB0aW1lPyAgSW4gdGhpcyBjYXNlIHdlIGRvbid0IHdhaXQgaWYgd2Ug c2VlIGFuCi0JCSAqIEkvTyBhbHJlYWR5IGluIHByb2dyZXNzLiAgV2UgYWxyZWFkeSBzZXQgQk1f SU9fSU5fUFJPR1JFU1MgZm9yIHRoZQotCQkgKiBoZWFkIGJsb2NrLCBzbyB3ZSBzaG91bGQgZ2V0 IG9uIHdpdGggdGhhdCBJL08gYXMgc29vbiBhcyBwb3NzaWJsZS4KLQkJICovCi0JCWZvciAoaW50 IGkgPSBuYmxvY2tzX2RvbmUgKyAxOyBpIDwgb3BlcmF0aW9uLT5uYmxvY2tzOyBpKyspCi0JCXsK LQkJCWlmICghUmVhZEJ1ZmZlcnNDYW5TdGFydElPKGJ1ZmZlcnNbaV0sIHRydWUpKQotCQkJCWJy ZWFrOwotCQkJLyogTXVzdCBiZSBjb25zZWN1dGl2ZSBibG9jayBudW1iZXJzLiAqLwotCQkJQXNz ZXJ0KEJ1ZmZlckdldEJsb2NrTnVtYmVyKGJ1ZmZlcnNbaSAtIDFdKSA9PQotCQkJCSAgIEJ1ZmZl ckdldEJsb2NrTnVtYmVyKGJ1ZmZlcnNbaV0pIC0gMSk7Ci0JCQlBc3NlcnQoaW9fYnVmZmVyc1tp b19idWZmZXJzX2xlbl0gPT0gYnVmZmVyc1tpXSk7CisJKm5ibG9ja3NfcHJvZ3Jlc3MgPSBpb19i dWZmZXJzX2xlbjsKIAotCQkJaW9fcGFnZXNbaW9fYnVmZmVyc19sZW4rK10gPSBCdWZmZXJHZXRC bG9jayhidWZmZXJzW2ldKTsKLQkJfQotCi0JCS8qIGdldCBhIHJlZmVyZW5jZSB0byB3YWl0IGZv ciBpbiBXYWl0UmVhZEJ1ZmZlcnMoKSAqLwotCQlwZ2Fpb19pb19nZXRfd3JlZihpb2gsICZvcGVy YXRpb24tPmlvX3dyZWYpOwotCi0JCS8qIHByb3ZpZGUgdGhlIGxpc3Qgb2YgYnVmZmVycyB0byB0 aGUgY29tcGxldGlvbiBjYWxsYmFja3MgKi8KLQkJcGdhaW9faW9fc2V0X2hhbmRsZV9kYXRhXzMy KGlvaCwgKHVpbnQzMiAqKSBpb19idWZmZXJzLCBpb19idWZmZXJzX2xlbik7Ci0KLQkJcGdhaW9f aW9fcmVnaXN0ZXJfY2FsbGJhY2tzKGlvaCwKLQkJCQkJCQkJCXBlcnNpc3RlbmNlID09IFJFTFBF UlNJU1RFTkNFX1RFTVAgPwotCQkJCQkJCQkJUEdBSU9fSENCX0xPQ0FMX0JVRkZFUl9SRUFEViA6 Ci0JCQkJCQkJCQlQR0FJT19IQ0JfU0hBUkVEX0JVRkZFUl9SRUFEViwKLQkJCQkJCQkJCWZsYWdz KTsKLQotCQlwZ2Fpb19pb19zZXRfZmxhZyhpb2gsIGlvaF9mbGFncyk7Ci0KLQkJLyogLS0tCi0J CSAqIEV2ZW4gdGhvdWdoIHdlJ3JlIHRyeWluZyB0byBpc3N1ZSBJTyBhc3luY2hyb25vdXNseSwg dHJhY2sgdGhlIHRpbWUKLQkJICogaW4gc21ncnN0YXJ0cmVhZHYoKToKLQkJICogLSBpZiBpb19t ZXRob2QgPT0gSU9NRVRIT0RfU1lOQywgd2Ugd2lsbCBhbHdheXMgcGVyZm9ybSB0aGUgSU8KLQkJ ICogICBpbW1lZGlhdGVseQotCQkgKiAtIHRoZSBpbyBtZXRob2QgbWlnaHQgbm90IHN1cHBvcnQg dGhlIElPIChlLmcuIHdvcmtlciBJTyBmb3IgYSB0ZW1wCi0JCSAqICAgdGFibGUpCi0JCSAqIC0t LQotCQkgKi8KLQkJaW9fc3RhcnQgPSBwZ3N0YXRfcHJlcGFyZV9pb190aW1lKHRyYWNrX2lvX3Rp bWluZyk7Ci0JCXNtZ3JzdGFydHJlYWR2KGlvaCwgb3BlcmF0aW9uLT5zbWdyLCBmb3JrbnVtLAot CQkJCQkgICBibG9ja251bSArIG5ibG9ja3NfZG9uZSwKLQkJCQkJICAgaW9fcGFnZXMsIGlvX2J1 ZmZlcnNfbGVuKTsKLQkJcGdzdGF0X2NvdW50X2lvX29wX3RpbWUoaW9fb2JqZWN0LCBpb19jb250 ZXh0LCBJT09QX1JFQUQsCi0JCQkJCQkJCWlvX3N0YXJ0LCAxLCBpb19idWZmZXJzX2xlbiAqIEJM Q0tTWik7Ci0KLQkJaWYgKHBlcnNpc3RlbmNlID09IFJFTFBFUlNJU1RFTkNFX1RFTVApCi0JCQlw Z0J1ZmZlclVzYWdlLmxvY2FsX2Jsa3NfcmVhZCArPSBpb19idWZmZXJzX2xlbjsKLQkJZWxzZQot CQkJcGdCdWZmZXJVc2FnZS5zaGFyZWRfYmxrc19yZWFkICs9IGlvX2J1ZmZlcnNfbGVuOwotCi0J CS8qCi0JCSAqIFRyYWNrIHZhY3V1bSBjb3N0IHdoZW4gaXNzdWluZyBJTywgbm90IGFmdGVyIHdh aXRpbmcgZm9yIGl0LgotCQkgKiBPdGhlcndpc2Ugd2UgY291bGQgZW5kIHVwIGlzc3VpbmcgYSBs b3Qgb2YgSU8gaW4gYSBzaG9ydCB0aW1lc3BhbiwKLQkJICogZGVzcGl0ZSBhIGxvdyBjb3N0IGxp bWl0LgotCQkgKi8KLQkJaWYgKFZhY3V1bUNvc3RBY3RpdmUpCi0JCQlWYWN1dW1Db3N0QmFsYW5j ZSArPSBWYWN1dW1Db3N0UGFnZU1pc3MgKiBpb19idWZmZXJzX2xlbjsKLQotCQkqbmJsb2Nrc19w cm9ncmVzcyA9IGlvX2J1ZmZlcnNfbGVuOwotCQlkaWRfc3RhcnRfaW8gPSB0cnVlOwotCX0KLQot CXJldHVybiBkaWRfc3RhcnRfaW87CisJcmV0dXJuIHRydWU7CiB9CiAKIC8qCmRpZmYgLS1naXQg YS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90 eXBlZGVmcy5saXN0CmluZGV4IDYwMTFiZTc2My4uNmU0ZTQ0YTQ5IDEwMDY0NAotLS0gYS9zcmMv dG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlw ZWRlZnMubGlzdApAQCAtMjM0Myw2ICsyMzQzLDcgQEAgUHJlZGljYXRlTG9ja0RhdGEKIFByZWRp Y2F0ZUxvY2tUYXJnZXRUeXBlCiBQcmVmZXRjaEJ1ZmZlclJlc3VsdAogUHJlcFBhcmFsbGVsUmVz dG9yZVB0clR5cGUKK1ByZXBhcmVSZWFkQnVmZmVyX1N0YXR1cwogUHJlcGFyZVN0bXQKIFByZXBh cmVkU3RhdGVtZW50CiBQcmVzb3J0ZWRLZXlEYXRhCi0tIAoyLjUxLjAKCg== --0000000000007589150649a4074c Content-Type: application/octet-stream; name="v9-0010-Make-hash-index-AM-use-amgetbatch-interface.patch" Content-Disposition: attachment; filename="v9-0010-Make-hash-index-AM-use-amgetbatch-interface.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ml1k3l341 RnJvbSA2ZmY5NTJlOTI4Njc4MzM3MjFmNTQwZjE5YTJjMDQ5NzBlMWY4Njk4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFR1 ZSwgMjUgTm92IDIwMjUgMTg6MDM6MTUgLTA1MDAKU3ViamVjdDogW1BBVENIIHY5IDEwLzEwXSBN YWtlIGhhc2ggaW5kZXggQU0gdXNlIGFtZ2V0YmF0Y2ggaW50ZXJmYWNlLgoKUmVwbGFjZSBoYXNo Z2V0dHVwbGUgd2l0aCBoYXNoZ2V0YmF0Y2gsIGEgZnVuY3Rpb24gdGhhdCBpbXBsZW1lbnRzIHRo ZQpuZXcgYW1nZXRiYXRjaCBpbnRlcmZhY2UuICBQbGFpbiBpbmRleCBzY2FucyBvZiBoYXNoIGlu ZGV4ZXMgbm93IHJldHVybgptYXRjaGluZyBpdGVtcyBpbiBiYXRjaGVzIGNvbnNpc3Rpbmcgb2Yg YWxsIG9mIHRoZSBtYXRjaGVzIGZyb20gYSBnaXZlbgpidWNrZXQgb3Igb3ZlcmZsb3cgcGFnZS4g IFRoaXMgZ2l2ZXMgdGhlIGNvcmUgZXhlY3V0b3IgdGhlIGFiaWxpdHkgdG8KcGVyZm9ybSBvcHRp bWl6YXRpb25zIGxpa2UgaW5kZXggcHJlZmV0Y2hpbmcgZHVyaW5nIGhhc2ggaW5kZXggc2NhbnMu CgpOb3RlIHRoYXQgaGFzaCBpbmRleCBzY2FucyB3aWxsIG5vdyBkcm9wIGluZGV4IHBhZ2UgYnVm ZmVyIHBpbnMgZWFnZXJseQooYWN0dWFsbHksIHRoZSB0YWJsZSBBTSB3aWxsIGRvIHNvIG9uIGJl aGFsZiBvZiB0aGUgaGFzaCBpbmRleCBBTSkuClRoaXMgaXMgYSBoYXJkIHJlcXVpcmVtZW50IGZv ciBhbnkgaW5kZXggQU0gdGhhdCBhZG9wdHMgdGhlIG5ldwphbWdldGJhdGNoIGludGVyZmFjZS4g IEd1YXJhbnRlZWluZyB0aGF0IG9wZW4gYmF0Y2hlcyB3b24ndCBob2xkIGJ1ZmZlcgpwaW5zIG9u IGluZGV4IHBhZ2VzIGdyZWF0bHkgc2ltcGxpZmllcyByZXNvdXJjZSBtYW5hZ2VtZW50IGR1cmlu ZyBpbmRleApwcmVmZXRjaGluZywgd2hlcmUgdGhlIHJlYWQgc3RyZWFtIGlzIGV4cGVjdGVkIHRv IGhvbGQgbWFueSBwaW5zIG9uIGhlYXAKcGFnZXMgKHRoYXQncyB3aHkgYW1nZXRiYXRjaCBtYWtl cyB0aGlzIGEgaGFyZCByZXF1aXJlbWVudCkuCgpBbHNvIGFkZCBWYWxncmluZCBidWZmZXIgbG9j ayBpbnN0cnVtZW50YXRpb24gdG8gaGFzaCwgYnJpbmdpbmcgaXQgaW4KbGluZSB3aXRoIG5idHJl ZSBmb2xsb3dpbmcgY29tbWl0IDRhNzBmODI5LiAgVGhpcyBpcyBhbm90aGVyIHJlcXVpcmVtZW50 CndoZW4gdXNpbmcgdGhlIGFtZ2V0YmF0Y2ggaW50ZXJmYWNlLgoKQXV0aG9yOiBQZXRlciBHZW9n aGVnYW4gPHBnQGJvd3QuaWU+ClJldmlld2VkLUJ5OiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRy YS5tZT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQUgyLVd6bVlxaGFjQkgxNjFw ZUFXYjVlRj1KYTdDRkFRKzBqU0VNcT1xbmZMVlRPT2dAbWFpbC5nbWFpbC5jb20KLS0tCiBzcmMv aW5jbHVkZS9hY2Nlc3MvaGFzaC5oICAgICAgICAgICAgfCAgNzMgKy0tLS0tCiBzcmMvYmFja2Vu ZC9hY2Nlc3MvaGFzaC9SRUFETUUgICAgICAgfCAgMzEgKy0tCiBzcmMvYmFja2VuZC9hY2Nlc3Mv aGFzaC9oYXNoLmMgICAgICAgfCAxMTcgKysrKy0tLS0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hh c2gvaGFzaF94bG9nLmMgIHwgICAyICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNocGFn ZS5jICAgfCAgMjYgKy0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoc2VhcmNoLmMgfCAz MzIgKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9o YXNodXRpbC5jICAgfCAgODUgKysrLS0tLQogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxp c3QgICAgIHwgICAyIC0KIDggZmlsZXMgY2hhbmdlZCwgMjQ4IGluc2VydGlvbnMoKyksIDQyMCBk ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGFzaC5oIGIvc3Jj L2luY2x1ZGUvYWNjZXNzL2hhc2guaAppbmRleCBhODcwMmYwZTUuLmZjNjY0NjVhMiAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hhc2guaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3Mv aGFzaC5oCkBAIC0xMDAsNTggKzEwMCw2IEBAIHR5cGVkZWYgSGFzaFBhZ2VPcGFxdWVEYXRhICpI YXNoUGFnZU9wYXF1ZTsKICAqLwogI2RlZmluZSBIQVNIT19QQUdFX0lECQkweEZGODAKIAotdHlw ZWRlZiBzdHJ1Y3QgSGFzaFNjYW5Qb3NJdGVtCS8qIHdoYXQgd2UgcmVtZW1iZXIgYWJvdXQgZWFj aCBtYXRjaCAqLwotewotCUl0ZW1Qb2ludGVyRGF0YSBoZWFwVGlkOwkvKiBUSUQgb2YgcmVmZXJl bmNlZCBoZWFwIGl0ZW0gKi8KLQlPZmZzZXROdW1iZXIgaW5kZXhPZmZzZXQ7CS8qIGluZGV4IGl0 ZW0ncyBsb2NhdGlvbiB3aXRoaW4gcGFnZSAqLwotfSBIYXNoU2NhblBvc0l0ZW07Ci0KLXR5cGVk ZWYgc3RydWN0IEhhc2hTY2FuUG9zRGF0YQotewotCUJ1ZmZlcgkJYnVmOwkJCS8qIGlmIHZhbGlk LCB0aGUgYnVmZmVyIGlzIHBpbm5lZCAqLwotCUJsb2NrTnVtYmVyIGN1cnJQYWdlOwkJLyogY3Vy cmVudCBoYXNoIGluZGV4IHBhZ2UgKi8KLQlCbG9ja051bWJlciBuZXh0UGFnZTsJCS8qIG5leHQg b3ZlcmZsb3cgcGFnZSAqLwotCUJsb2NrTnVtYmVyIHByZXZQYWdlOwkJLyogcHJldiBvdmVyZmxv dyBvciBidWNrZXQgcGFnZSAqLwotCi0JLyoKLQkgKiBUaGUgaXRlbXMgYXJyYXkgaXMgYWx3YXlz IG9yZGVyZWQgaW4gaW5kZXggb3JkZXIgKGllLCBpbmNyZWFzaW5nCi0JICogaW5kZXhvZmZzZXQp LiAgV2hlbiBzY2FubmluZyBiYWNrd2FyZHMgaXQgaXMgY29udmVuaWVudCB0byBmaWxsIHRoZQot CSAqIGFycmF5IGJhY2stdG8tZnJvbnQsIHNvIHdlIHN0YXJ0IGF0IHRoZSBsYXN0IHNsb3QgYW5k IGZpbGwgZG93bndhcmRzLgotCSAqIEhlbmNlIHdlIG5lZWQgYm90aCBhIGZpcnN0LXZhbGlkLWVu dHJ5IGFuZCBhIGxhc3QtdmFsaWQtZW50cnkgY291bnRlci4KLQkgKiBpdGVtSW5kZXggaXMgYSBj dXJzb3Igc2hvd2luZyB3aGljaCBlbnRyeSB3YXMgbGFzdCByZXR1cm5lZCB0byBjYWxsZXIuCi0J ICovCi0JaW50CQkJZmlyc3RJdGVtOwkJLyogZmlyc3QgdmFsaWQgaW5kZXggaW4gaXRlbXNbXSAq LwotCWludAkJCWxhc3RJdGVtOwkJLyogbGFzdCB2YWxpZCBpbmRleCBpbiBpdGVtc1tdICovCi0J aW50CQkJaXRlbUluZGV4OwkJLyogY3VycmVudCBpbmRleCBpbiBpdGVtc1tdICovCi0KLQlIYXNo U2NhblBvc0l0ZW0gaXRlbXNbTWF4SW5kZXhUdXBsZXNQZXJQYWdlXTsJLyogTVVTVCBCRSBMQVNU ICovCi19IEhhc2hTY2FuUG9zRGF0YTsKLQotI2RlZmluZSBIYXNoU2NhblBvc0lzUGlubmVkKHNj YW5wb3MpIFwKLSggXAotCUFzc2VydE1hY3JvKEJsb2NrTnVtYmVySXNWYWxpZCgoc2NhbnBvcyku Y3VyclBhZ2UpIHx8IFwKLQkJCQkhQnVmZmVySXNWYWxpZCgoc2NhbnBvcykuYnVmKSksIFwKLQlC dWZmZXJJc1ZhbGlkKChzY2FucG9zKS5idWYpIFwKLSkKLQotI2RlZmluZSBIYXNoU2NhblBvc0lz VmFsaWQoc2NhbnBvcykgXAotKCBcCi0JQXNzZXJ0TWFjcm8oQmxvY2tOdW1iZXJJc1ZhbGlkKChz Y2FucG9zKS5jdXJyUGFnZSkgfHwgXAotCQkJCSFCdWZmZXJJc1ZhbGlkKChzY2FucG9zKS5idWYp KSwgXAotCUJsb2NrTnVtYmVySXNWYWxpZCgoc2NhbnBvcykuY3VyclBhZ2UpIFwKLSkKLQotI2Rl ZmluZSBIYXNoU2NhblBvc0ludmFsaWRhdGUoc2NhbnBvcykgXAotCWRvIHsgXAotCQkoc2NhbnBv cykuYnVmID0gSW52YWxpZEJ1ZmZlcjsgXAotCQkoc2NhbnBvcykuY3VyclBhZ2UgPSBJbnZhbGlk QmxvY2tOdW1iZXI7IFwKLQkJKHNjYW5wb3MpLm5leHRQYWdlID0gSW52YWxpZEJsb2NrTnVtYmVy OyBcCi0JCShzY2FucG9zKS5wcmV2UGFnZSA9IEludmFsaWRCbG9ja051bWJlcjsgXAotCQkoc2Nh bnBvcykuZmlyc3RJdGVtID0gMDsgXAotCQkoc2NhbnBvcykubGFzdEl0ZW0gPSAwOyBcCi0JCShz Y2FucG9zKS5pdGVtSW5kZXggPSAwOyBcCi0JfSB3aGlsZSAoMCkKLQogLyoKICAqCUhhc2hTY2Fu T3BhcXVlRGF0YSBpcyBwcml2YXRlIHN0YXRlIGZvciBhIGhhc2ggaW5kZXggc2Nhbi4KICAqLwpA QCAtMTc4LDE1ICsxMjYsNiBAQCB0eXBlZGVmIHN0cnVjdCBIYXNoU2Nhbk9wYXF1ZURhdGEKIAkg KiByZWZlcnJlZCBvbmx5IHdoZW4gaGFzaHNvX2J1Y19wb3B1bGF0ZWQgaXMgdHJ1ZS4KIAkgKi8K IAlib29sCQloYXNoc29fYnVjX3NwbGl0OwotCS8qIGluZm8gYWJvdXQga2lsbGVkIGl0ZW1zIGlm IGFueSAoa2lsbGVkSXRlbXMgaXMgTlVMTCBpZiBuZXZlciB1c2VkKSAqLwotCWludAkJICAgKmtp bGxlZEl0ZW1zOwkvKiBjdXJyUG9zLml0ZW1zIGluZGV4ZXMgb2Yga2lsbGVkIGl0ZW1zICovCi0J aW50CQkJbnVtS2lsbGVkOwkJLyogbnVtYmVyIG9mIGN1cnJlbnRseSBzdG9yZWQgaXRlbXMgKi8K LQotCS8qCi0JICogSWRlbnRpZnkgYWxsIHRoZSBtYXRjaGluZyBpdGVtcyBvbiBhIHBhZ2UgYW5k IHNhdmUgdGhlbSBpbgotCSAqIEhhc2hTY2FuUG9zRGF0YQotCSAqLwotCUhhc2hTY2FuUG9zRGF0 YSBjdXJyUG9zOwkvKiBjdXJyZW50IHBvc2l0aW9uIGRhdGEgKi8KIH0gSGFzaFNjYW5PcGFxdWVE YXRhOwogCiB0eXBlZGVmIEhhc2hTY2FuT3BhcXVlRGF0YSAqSGFzaFNjYW5PcGFxdWU7CkBAIC0z NjgsMTEgKzMwNywxNCBAQCBleHRlcm4gYm9vbCBoYXNoaW5zZXJ0KFJlbGF0aW9uIHJlbCwgRGF0 dW0gKnZhbHVlcywgYm9vbCAqaXNudWxsLAogCQkJCQkgICBJbmRleFVuaXF1ZUNoZWNrIGNoZWNr VW5pcXVlLAogCQkJCQkgICBib29sIGluZGV4VW5jaGFuZ2VkLAogCQkJCQkgICBzdHJ1Y3QgSW5k ZXhJbmZvICppbmRleEluZm8pOwotZXh0ZXJuIGJvb2wgaGFzaGdldHR1cGxlKEluZGV4U2NhbkRl c2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpOworZXh0ZXJuIEluZGV4U2NhbkJhdGNoIGhhc2hn ZXRiYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCSAgIEluZGV4U2NhbkJhdGNoIHBy aW9yYmF0Y2gsCisJCQkJCQkJCSAgIFNjYW5EaXJlY3Rpb24gZGlyKTsKIGV4dGVybiBpbnQ2NCBo YXNoZ2V0Yml0bWFwKEluZGV4U2NhbkRlc2Mgc2NhbiwgVElEQml0bWFwICp0Ym0pOwogZXh0ZXJu IEluZGV4U2NhbkRlc2MgaGFzaGJlZ2luc2NhbihSZWxhdGlvbiByZWwsIGludCBua2V5cywgaW50 IG5vcmRlcmJ5cyk7CiBleHRlcm4gdm9pZCBoYXNocmVzY2FuKEluZGV4U2NhbkRlc2Mgc2Nhbiwg U2NhbktleSBzY2Fua2V5LCBpbnQgbnNjYW5rZXlzLAogCQkJCQkgICBTY2FuS2V5IG9yZGVyYnlz LCBpbnQgbm9yZGVyYnlzKTsKK2V4dGVybiB2b2lkIGhhc2hmcmVlYmF0Y2goSW5kZXhTY2FuRGVz YyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCk7CiBleHRlcm4gdm9pZCBoYXNoZW5kc2NhbihJ bmRleFNjYW5EZXNjIHNjYW4pOwogZXh0ZXJuIEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAqaGFzaGJ1 bGtkZWxldGUoSW5kZXhWYWN1dW1JbmZvICppbmZvLAogCQkJCQkJCQkJCQkgSW5kZXhCdWxrRGVs ZXRlUmVzdWx0ICpzdGF0cywKQEAgLTQ0NSw4ICszODcsOSBAQCBleHRlcm4gdm9pZCBfaGFzaF9m aW5pc2hfc3BsaXQoUmVsYXRpb24gcmVsLCBCdWZmZXIgbWV0YWJ1ZiwgQnVmZmVyIG9idWYsCiAJ CQkJCQkJICAgdWludDMyIGxvd21hc2spOwogCiAvKiBoYXNoc2VhcmNoLmMgKi8KLWV4dGVybiBi b29sIF9oYXNoX25leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcik7Ci1l eHRlcm4gYm9vbCBfaGFzaF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24g ZGlyKTsKK2V4dGVybiBJbmRleFNjYW5CYXRjaCBfaGFzaF9uZXh0KEluZGV4U2NhbkRlc2Mgc2Nh biwgU2NhbkRpcmVjdGlvbiBkaXIsCisJCQkJCQkJCSBJbmRleFNjYW5CYXRjaCBwcmlvcmJhdGNo KTsKK2V4dGVybiBJbmRleFNjYW5CYXRjaCBfaGFzaF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4s IFNjYW5EaXJlY3Rpb24gZGlyKTsKIAogLyogaGFzaHNvcnQuYyAqLwogdHlwZWRlZiBzdHJ1Y3Qg SFNwb29sIEhTcG9vbDsJLyogb3BhcXVlIHN0cnVjdCBpbiBoYXNoc29ydC5jICovCkBAIC00NzYs NyArNDE5LDcgQEAgZXh0ZXJuIEJsb2NrTnVtYmVyIF9oYXNoX2dldF9vbGRibG9ja19mcm9tX25l d2J1Y2tldChSZWxhdGlvbiByZWwsIEJ1Y2tldCBuZXdfYnUKIGV4dGVybiBCbG9ja051bWJlciBf aGFzaF9nZXRfbmV3YmxvY2tfZnJvbV9vbGRidWNrZXQoUmVsYXRpb24gcmVsLCBCdWNrZXQgb2xk X2J1Y2tldCk7CiBleHRlcm4gQnVja2V0IF9oYXNoX2dldF9uZXdidWNrZXRfZnJvbV9vbGRidWNr ZXQoUmVsYXRpb24gcmVsLCBCdWNrZXQgb2xkX2J1Y2tldCwKIAkJCQkJCQkJCQkJCSB1aW50MzIg bG93bWFzaywgdWludDMyIG1heGJ1Y2tldCk7Ci1leHRlcm4gdm9pZCBfaGFzaF9raWxsX2l0ZW1z KEluZGV4U2NhbkRlc2Mgc2Nhbik7CitleHRlcm4gdm9pZCBfaGFzaF9raWxsX2l0ZW1zKEluZGV4 U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpOwogCiAvKiBoYXNoLmMgKi8KIGV4 dGVybiB2b2lkIGhhc2hidWNrZXRjbGVhbnVwKFJlbGF0aW9uIHJlbCwgQnVja2V0IGN1cl9idWNr ZXQsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9SRUFETUUgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvaGFzaC9SRUFETUUKaW5kZXggZmM5MDMxMTE3Li45NzJiYjY2NmIgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL1JFQURNRQorKysgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvaGFzaC9SRUFETUUKQEAgLTI1NSwyOCArMjU1LDI5IEBAIFRoZSByZWFkZXIgYWxnb3Jp dGhtIGlzOgogCQlyZXRha2UgdGhlIGJ1ZmZlciBjb250ZW50IGxvY2sgb24gbmV3IGJ1Y2tldAog CQlhcnJhbmdlIHRvIHNjYW4gdGhlIG9sZCBidWNrZXQgbm9ybWFsbHkgYW5kIHRoZSBuZXcgYnVj a2V0IGZvcgogICAgICAgICAgdHVwbGVzIHdoaWNoIGFyZSBub3QgbW92ZWQtYnktc3BsaXQKLS0t IHRoZW4sIHBlciByZWFkIHJlcXVlc3Q6CistLSB0aGVuLCBwZXIgYmF0Y2ggKHBhZ2UpIHJlcXVl c3Q6CiAJcmVhY3F1aXJlIGNvbnRlbnQgbG9jayBvbiBjdXJyZW50IHBhZ2UKIAlzdGVwIHRvIG5l eHQgcGFnZSBpZiBuZWNlc3NhcnkgKG5vIGNoYWluaW5nIG9mIGNvbnRlbnQgbG9ja3MsIGJ1dCBr ZWVwCiAJdGhlIHBpbiBvbiB0aGUgcHJpbWFyeSBidWNrZXQgdGhyb3VnaG91dCB0aGUgc2NhbikK LQlzYXZlIGFsbCB0aGUgbWF0Y2hpbmcgdHVwbGVzIGZyb20gY3VycmVudCBpbmRleCBwYWdlIGlu dG8gYW4gaXRlbXMgYXJyYXkKLQlyZWxlYXNlIHBpbiBhbmQgY29udGVudCBsb2NrIChidXQgaWYg aXQgaXMgcHJpbWFyeSBidWNrZXQgcGFnZSByZXRhaW4KLQlpdHMgcGluIHRpbGwgdGhlIGVuZCBv ZiB0aGUgc2NhbikKLQlnZXQgdHVwbGUgZnJvbSBhbiBpdGVtIGFycmF5CisJc2F2ZSBhbGwgdGhl IG1hdGNoaW5nIHR1cGxlcyBmcm9tIGN1cnJlbnQgaW5kZXggcGFnZSBpbnRvIGEgYmF0Y2gKKwly ZWxlYXNlIGNvbnRlbnQgbG9jayBvbiBjdXJyZW50IHBhZ2UgcmV0dXJuIGJhdGNoIHRvIHRhYmxl IEFNICh0YWJsZSBBTQorCXdpbGwgZHJvcCBiYXRjaCdzIGJ1ZmZlciBwaW4sIHRob3VnaCBwcmlt YXJ5IGJ1Y2tldCBwYWdlIHBpbiBpcyBrZXB0CisJdW50aWwgdGhlIGVuZCBvZiB0aGUgc2NhbikK IC0tIGF0IHNjYW4gc2h1dGRvd246Ci0JcmVsZWFzZSBhbGwgcGlucyBzdGlsbCBoZWxkCisJcmVs ZWFzZSBzY2FuLW93bmVkIHBpbnMgKGUuZy4sIHByaW1hcnkgYnVja2V0IHBhZ2UgcGluKSBhcyBu ZWVkZWQKIAogSG9sZGluZyB0aGUgYnVmZmVyIHBpbiBvbiB0aGUgcHJpbWFyeSBidWNrZXQgcGFn ZSBmb3IgdGhlIHdob2xlIHNjYW4gcHJldmVudHMKLXRoZSByZWFkZXIncyBjdXJyZW50LXR1cGxl IHBvaW50ZXIgZnJvbSBiZWluZyBpbnZhbGlkYXRlZCBieSBzcGxpdHMgb3IKLWNvbXBhY3Rpb25z LiAgKE9mIGNvdXJzZSwgb3RoZXIgYnVja2V0cyBjYW4gc3RpbGwgYmUgc3BsaXQgb3IgY29tcGFj dGVkLikKK3RoZSBidWNrZXQgZnJvbSBiZWluZyByZW9yZ2FuaXplZCBieSBzcGxpdHMgb3IgY29t cGFjdGlvbnMgd2hpbGUgdGhlIHNjYW4gaXMKK2luIHByb2dyZXNzLiAgKE9mIGNvdXJzZSwgb3Ro ZXIgYnVja2V0cyBjYW4gc3RpbGwgYmUgc3BsaXQgb3IgY29tcGFjdGVkLikKIAotVG8gbWluaW1p emUgbG9jay91bmxvY2sgdHJhZmZpYywgaGFzaCBpbmRleCBzY2FuIGFsd2F5cyBzZWFyY2hlcyB0 aGUgZW50aXJlCi1oYXNoIHBhZ2UgdG8gaWRlbnRpZnkgYWxsIHRoZSBtYXRjaGluZyBpdGVtcyBh dCBvbmNlLCBjb3B5aW5nIHRoZWlyIGhlYXAgdHVwbGUKLUlEcyBpbnRvIGJhY2tlbmQtbG9jYWwg c3RvcmFnZS4gVGhlIGhlYXAgdHVwbGUgSURzIGFyZSB0aGVuIHByb2Nlc3NlZCB3aGlsZSBub3QK LWhvbGRpbmcgYW55IHBhZ2UgbG9jayB3aXRoaW4gdGhlIGluZGV4IHRoZXJlYnksIGFsbG93aW5n IGNvbmN1cnJlbnQgaW5zZXJ0aW9uCi10byBoYXBwZW4gb24gdGhlIHNhbWUgaW5kZXggcGFnZSB3 aXRob3V0IGFueSByZXF1aXJlbWVudCBvZiByZS1maW5kaW5nIHRoZQotY3VycmVudCBzY2FuIHBv c2l0aW9uIGZvciB0aGUgcmVhZGVyLiBXZSBkbyBjb250aW51ZSB0byBob2xkIGEgcGluIG9uIHRo ZQotYnVja2V0IHBhZ2UsIHRvIHByb3RlY3QgYWdhaW5zdCBjb25jdXJyZW50IGRlbGV0aW9ucyBh bmQgYnVja2V0IHNwbGl0LgorVG8gbWluaW1pemUgbG9jay91bmxvY2sgdHJhZmZpYywgaGFzaCBp bmRleCBzY2FucyBhbHdheXMgc2VhcmNoIHRoZSBlbnRpcmUKK2hhc2ggcGFnZSB0byBpZGVudGlm eSBhbGwgdGhlIG1hdGNoaW5nIGl0ZW1zIGF0IG9uY2UsIHJldHVybmluZyB0aGVtIGluCitiYXRj aGVzIHRvIHRoZSB0YWJsZSBBTS4gIFRoZSB0YWJsZSBBTSBwcm9jZXNzZXMgYmF0Y2hlcyB3aGls ZSBubyBwYWdlIGxvY2sKK2lzIGhlbGQgd2l0aGluIHRoZSBpbmRleCwgYWxsb3dpbmcgY29uY3Vy cmVudCBpbnNlcnRpb24gdG8gaGFwcGVuIG9uIHRoZQorc2FtZSBpbmRleCBwYWdlIHdpdGhvdXQg YW55IHJlcXVpcmVtZW50IG9mIHJlLWZpbmRpbmcgdGhlIGN1cnJlbnQgc2NhbgorcG9zaXRpb24g Zm9yIHRoZSByZWFkZXIuICBUaGUgdGFibGUgQU0gY29udHJvbHMgd2hlbiBiYXRjaCBidWZmZXIg cGlucyBhcmUKK2Ryb3BwZWQuICBXZSBkbyBjb250aW51ZSB0byBob2xkIGEgcGluIG9uIHRoZSBw cmltYXJ5IGJ1Y2tldCBwYWdlLCB0bworcHJvdGVjdCBhZ2FpbnN0IGNvbmN1cnJlbnQgYnVja2V0 IHNwbGl0cy4KIAogVG8gYWxsb3cgZm9yIHNjYW5zIGR1cmluZyBhIGJ1Y2tldCBzcGxpdCwgaWYg YXQgdGhlIHN0YXJ0IG9mIHRoZSBzY2FuLCB0aGUKIGJ1Y2tldCBpcyBtYXJrZWQgYXMgYnVja2V0 LWJlaW5nLXBvcHVsYXRlZCwgaXQgc2NhbiBhbGwgdGhlIHR1cGxlcyBpbiB0aGF0CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv aGFzaC9oYXNoLmMKaW5kZXggZDc0MmRhYmNkLi5lZWRkYzA5ZjUgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2guYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9o YXNoLmMKQEAgLTEwMSw5ICsxMDEsOSBAQCBoYXNoaGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQog CQkuYW1hZGp1c3RtZW1iZXJzID0gaGFzaGFkanVzdG1lbWJlcnMsCiAJCS5hbWJlZ2luc2NhbiA9 IGhhc2hiZWdpbnNjYW4sCiAJCS5hbXJlc2NhbiA9IGhhc2hyZXNjYW4sCi0JCS5hbWdldHR1cGxl ID0gaGFzaGdldHR1cGxlLAotCQkuYW1nZXRiYXRjaCA9IE5VTEwsCi0JCS5hbWZyZWViYXRjaCA9 IE5VTEwsCisJCS5hbWdldHR1cGxlID0gTlVMTCwKKwkJLmFtZ2V0YmF0Y2ggPSBoYXNoZ2V0YmF0 Y2gsCisJCS5hbWZyZWViYXRjaCA9IGhhc2hmcmVlYmF0Y2gsCiAJCS5hbWdldGJpdG1hcCA9IGhh c2hnZXRiaXRtYXAsCiAJCS5hbWVuZHNjYW4gPSBoYXNoZW5kc2NhbiwKIAkJLmFtcG9zcmVzZXQg PSBOVUxMLApAQCAtMjg2LDUzICsyODYsMjcgQEAgaGFzaGluc2VydChSZWxhdGlvbiByZWwsIERh dHVtICp2YWx1ZXMsIGJvb2wgKmlzbnVsbCwKIAogCiAvKgotICoJaGFzaGdldHR1cGxlKCkgLS0g R2V0IHRoZSBuZXh0IHR1cGxlIGluIHRoZSBzY2FuLgorICoJaGFzaGdldGJhdGNoKCkgLS0gR2V0 IHRoZSBmaXJzdCBvciBuZXh0IGJhdGNoIG9mIHR1cGxlcyBpbiB0aGUgc2NhbgogICovCi1ib29s Ci1oYXNoZ2V0dHVwbGUoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKK0lu ZGV4U2NhbkJhdGNoCitoYXNoZ2V0YmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5C YXRjaCBwcmlvcmJhdGNoLCBTY2FuRGlyZWN0aW9uIGRpcikKIHsKIAlIYXNoU2Nhbk9wYXF1ZSBz byA9IChIYXNoU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwotCWJvb2wJCXJlczsKKwlSZWxhdGlv bglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOwogCiAJLyogSGFzaCBpbmRleGVzIGFyZSBhbHdh eXMgbG9zc3kgc2luY2Ugd2Ugc3RvcmUgb25seSB0aGUgaGFzaCBjb2RlICovCiAJc2Nhbi0+eHNf cmVjaGVjayA9IHRydWU7CiAKLQkvKgotCSAqIElmIHdlJ3ZlIGFscmVhZHkgaW5pdGlhbGl6ZWQg dGhpcyBzY2FuLCB3ZSBjYW4ganVzdCBhZHZhbmNlIGl0IGluIHRoZQotCSAqIGFwcHJvcHJpYXRl IGRpcmVjdGlvbi4gIElmIHdlIGhhdmVuJ3QgZG9uZSBzbyB5ZXQsIHdlIGNhbGwgYSByb3V0aW5l IHRvCi0JICogZ2V0IHRoZSBmaXJzdCBpdGVtIGluIHRoZSBzY2FuLgotCSAqLwotCWlmICghSGFz aFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSkKLQkJcmVzID0gX2hhc2hfZmlyc3Qoc2Nhbiwg ZGlyKTsKLQllbHNlCisJaWYgKHByaW9yYmF0Y2ggPT0gTlVMTCkKIAl7Ci0JCS8qCi0JCSAqIENo ZWNrIHRvIHNlZSBpZiB3ZSBzaG91bGQga2lsbCB0aGUgcHJldmlvdXNseS1mZXRjaGVkIHR1cGxl LgotCQkgKi8KLQkJaWYgKHNjYW4tPmtpbGxfcHJpb3JfdHVwbGUpCi0JCXsKLQkJCS8qCi0JCQkg KiBZZXMsIHNvIHJlbWVtYmVyIGl0IGZvciBsYXRlci4gKFdlJ2xsIGRlYWwgd2l0aCBhbGwgc3Vj aCB0dXBsZXMKLQkJCSAqIGF0IG9uY2UgcmlnaHQgYWZ0ZXIgbGVhdmluZyB0aGUgaW5kZXggcGFn ZSBvciBhdCBlbmQgb2Ygc2Nhbi4pCi0JCQkgKiBJbiBjYXNlIGlmIGNhbGxlciByZXZlcnNlcyB0 aGUgaW5kZXhzY2FuIGRpcmVjdGlvbiBpdCBpcyBxdWl0ZQotCQkJICogcG9zc2libGUgdGhhdCB0 aGUgc2FtZSBpdGVtIG1pZ2h0IGdldCBlbnRlcmVkIG11bHRpcGxlIHRpbWVzLgotCQkJICogQnV0 LCB3ZSBkb24ndCBkZXRlY3QgdGhhdDsgaW5zdGVhZCwgd2UganVzdCBmb3JnZXQgYW55IGV4Y2Vz cwotCQkJICogZW50cmllcy4KLQkJCSAqLwotCQkJaWYgKHNvLT5raWxsZWRJdGVtcyA9PSBOVUxM KQotCQkJCXNvLT5raWxsZWRJdGVtcyA9IHBhbGxvY19hcnJheShpbnQsIE1heEluZGV4VHVwbGVz UGVyUGFnZSk7CisJCV9oYXNoX2Ryb3BzY2FuYnVmKHJlbCwgc28pOwogCi0JCQlpZiAoc28tPm51 bUtpbGxlZCA8IE1heEluZGV4VHVwbGVzUGVyUGFnZSkKLQkJCQlzby0+a2lsbGVkSXRlbXNbc28t Pm51bUtpbGxlZCsrXSA9IHNvLT5jdXJyUG9zLml0ZW1JbmRleDsKLQkJfQotCi0JCS8qCi0JCSAq IE5vdyBjb250aW51ZSB0aGUgc2Nhbi4KLQkJICovCi0JCXJlcyA9IF9oYXNoX25leHQoc2Nhbiwg ZGlyKTsKKwkJLyogSW5pdGlhbGl6ZSB0aGUgc2NhbiwgYW5kIHJldHVybiBmaXJzdCBiYXRjaCBv ZiBtYXRjaGluZyBpdGVtcyAqLworCQlyZXR1cm4gX2hhc2hfZmlyc3Qoc2NhbiwgZGlyKTsKIAl9 CiAKLQlyZXR1cm4gcmVzOworCS8qIFJldHVybiBiYXRjaCBwb3NpdGlvbmVkIGFmdGVyIGNhbGxl cidzIGJhdGNoIChpbiBkaXJlY3Rpb24gJ2RpcicpICovCisJcmV0dXJuIF9oYXNoX25leHQoc2Nh biwgZGlyLCBwcmlvcmJhdGNoKTsKIH0KIAogCkBAIC0zNDIsMjYgKzMxNiwyMiBAQCBoYXNoZ2V0 dHVwbGUoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIGludDY0CiBoYXNo Z2V0Yml0bWFwKEluZGV4U2NhbkRlc2Mgc2NhbiwgVElEQml0bWFwICp0Ym0pCiB7Ci0JSGFzaFNj YW5PcGFxdWUgc28gPSAoSGFzaFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKLQlib29sCQlyZXM7 CisJSW5kZXhTY2FuQmF0Y2ggYmF0Y2g7CiAJaW50NjQJCW50aWRzID0gMDsKLQlIYXNoU2NhblBv c0l0ZW0gKmN1cnJJdGVtOwogCi0JcmVzID0gX2hhc2hfZmlyc3Qoc2NhbiwgRm9yd2FyZFNjYW5E aXJlY3Rpb24pOworCWJhdGNoID0gX2hhc2hfZmlyc3Qoc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rp b24pOwogCi0Jd2hpbGUgKHJlcykKKwl3aGlsZSAoYmF0Y2ggIT0gTlVMTCkKIAl7Ci0JCWN1cnJJ dGVtID0gJnNvLT5jdXJyUG9zLml0ZW1zW3NvLT5jdXJyUG9zLml0ZW1JbmRleF07CisJCWZvciAo aW50IGl0ZW1JbmRleCA9IGJhdGNoLT5maXJzdEl0ZW07CisJCQkgaXRlbUluZGV4IDw9IGJhdGNo LT5sYXN0SXRlbTsKKwkJCSBpdGVtSW5kZXgrKykKKwkJeworCQkJdGJtX2FkZF90dXBsZXModGJt LCAmYmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF0uaGVhcFRpZCwgMSwgdHJ1ZSk7CisJCQludGlkcysr OworCQl9CiAKLQkJLyoKLQkJICogX2hhc2hfZmlyc3QgYW5kIF9oYXNoX25leHQgaGFuZGxlIGVs aW1pbmF0ZSBkZWFkIGluZGV4IGVudHJpZXMKLQkJICogd2hlbmV2ZXIgc2Nhbi0+aWdub3JlX2tp bGxlZF90dXBsZXMgaXMgdHJ1ZS4gIFRoZXJlZm9yZSwgdGhlcmUncwotCQkgKiBub3RoaW5nIHRv IGRvIGhlcmUgZXhjZXB0IGFkZCB0aGUgcmVzdWx0cyB0byB0aGUgVElEQml0bWFwLgotCQkgKi8K LQkJdGJtX2FkZF90dXBsZXModGJtLCAmKGN1cnJJdGVtLT5oZWFwVGlkKSwgMSwgdHJ1ZSk7Ci0J CW50aWRzKys7Ci0KLQkJcmVzID0gX2hhc2hfbmV4dChzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlv bik7CisJCWJhdGNoID0gX2hhc2hfbmV4dChzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgYmF0 Y2gpOwogCX0KIAogCXJldHVybiBudGlkczsKQEAgLTM4MywxNyArMzUzLDE0IEBAIGhhc2hiZWdp bnNjYW4oUmVsYXRpb24gcmVsLCBpbnQgbmtleXMsIGludCBub3JkZXJieXMpCiAJc2NhbiA9IFJl bGF0aW9uR2V0SW5kZXhTY2FuKHJlbCwgbmtleXMsIG5vcmRlcmJ5cyk7CiAKIAlzbyA9IChIYXNo U2Nhbk9wYXF1ZSkgcGFsbG9jX29iamVjdChIYXNoU2Nhbk9wYXF1ZURhdGEpOwotCUhhc2hTY2Fu UG9zSW52YWxpZGF0ZShzby0+Y3VyclBvcyk7CiAJc28tPmhhc2hzb19idWNrZXRfYnVmID0gSW52 YWxpZEJ1ZmZlcjsKIAlzby0+aGFzaHNvX3NwbGl0X2J1Y2tldF9idWYgPSBJbnZhbGlkQnVmZmVy OwogCiAJc28tPmhhc2hzb19idWNfcG9wdWxhdGVkID0gZmFsc2U7CiAJc28tPmhhc2hzb19idWNf c3BsaXQgPSBmYWxzZTsKIAotCXNvLT5raWxsZWRJdGVtcyA9IE5VTEw7Ci0Jc28tPm51bUtpbGxl ZCA9IDA7Ci0KIAlzY2FuLT5vcGFxdWUgPSBzbzsKKwlzY2FuLT5tYXhpdGVtc2JhdGNoID0gTWF4 SW5kZXhUdXBsZXNQZXJQYWdlOwogCiAJcmV0dXJuIHNjYW47CiB9CkBAIC00MDgsMTggKzM3NSw4 IEBAIGhhc2hyZXNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuS2V5IHNjYW5rZXksIGludCBu c2NhbmtleXMsCiAJSGFzaFNjYW5PcGFxdWUgc28gPSAoSGFzaFNjYW5PcGFxdWUpIHNjYW4tPm9w YXF1ZTsKIAlSZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOwogCi0JaWYgKEhhc2hT Y2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpCi0JewotCQkvKiBCZWZvcmUgbGVhdmluZyBjdXJy ZW50IHBhZ2UsIGRlYWwgd2l0aCBhbnkga2lsbGVkIGl0ZW1zICovCi0JCWlmIChzby0+bnVtS2ls bGVkID4gMCkKLQkJCV9oYXNoX2tpbGxfaXRlbXMoc2Nhbik7Ci0JfQotCiAJX2hhc2hfZHJvcHNj YW5idWYocmVsLCBzbyk7CiAKLQkvKiBzZXQgcG9zaXRpb24gaW52YWxpZCAodGhpcyB3aWxsIGNh dXNlIF9oYXNoX2ZpcnN0IGNhbGwpICovCi0JSGFzaFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5jdXJy UG9zKTsKLQogCS8qIFVwZGF0ZSBzY2FuIGtleSwgaWYgYSBuZXcgb25lIGlzIGdpdmVuICovCiAJ aWYgKHNjYW5rZXkgJiYgc2Nhbi0+bnVtYmVyT2ZLZXlzID4gMCkKIAkJbWVtY3B5KHNjYW4tPmtl eURhdGEsIHNjYW5rZXksIHNjYW4tPm51bWJlck9mS2V5cyAqIHNpemVvZihTY2FuS2V5RGF0YSkp OwpAQCAtNDI4LDYgKzM4NSwyMSBAQCBoYXNocmVzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2Nh bktleSBzY2Fua2V5LCBpbnQgbnNjYW5rZXlzLAogCXNvLT5oYXNoc29fYnVjX3NwbGl0ID0gZmFs c2U7CiB9CiAKKy8qCisgKgloYXNoZnJlZWJhdGNoKCkgLS0gRnJlZSBiYXRjaCByZXNvdXJjZXMK KyAqLwordm9pZAoraGFzaGZyZWViYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJh dGNoIGJhdGNoKQoreworCS8qIFRhYmxlIEFNIHNob3VsZCBoYXZlIGFscmVhZHkgcmVsZWFzZWQg YmF0Y2ggcGFnZSdzIHBpbiBieSBub3cgKi8KKwlBc3NlcnQoIUJ1ZmZlcklzVmFsaWQoYmF0Y2gt PmJ1ZikpOworCisJaWYgKGJhdGNoLT5udW1LaWxsZWQgPiAwKQorCQlfaGFzaF9raWxsX2l0ZW1z KHNjYW4sIGJhdGNoKTsKKworCWluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlKHNjYW4sIGJhdGNo KTsKK30KKwogLyoKICAqCWhhc2hlbmRzY2FuKCkgLS0gY2xvc2UgZG93biBhIHNjYW4KICAqLwpA QCAtNDM3LDE3ICs0MDksOCBAQCBoYXNoZW5kc2NhbihJbmRleFNjYW5EZXNjIHNjYW4pCiAJSGFz aFNjYW5PcGFxdWUgc28gPSAoSGFzaFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKIAlSZWxhdGlv bglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOwogCi0JaWYgKEhhc2hTY2FuUG9zSXNWYWxpZChz by0+Y3VyclBvcykpCi0JewotCQkvKiBCZWZvcmUgbGVhdmluZyBjdXJyZW50IHBhZ2UsIGRlYWwg d2l0aCBhbnkga2lsbGVkIGl0ZW1zICovCi0JCWlmIChzby0+bnVtS2lsbGVkID4gMCkKLQkJCV9o YXNoX2tpbGxfaXRlbXMoc2Nhbik7Ci0JfQotCiAJX2hhc2hfZHJvcHNjYW5idWYocmVsLCBzbyk7 CiAKLQlpZiAoc28tPmtpbGxlZEl0ZW1zICE9IE5VTEwpCi0JCXBmcmVlKHNvLT5raWxsZWRJdGVt cyk7CiAJcGZyZWUoc28pOwogCXNjYW4tPm9wYXF1ZSA9IE5VTEw7CiB9CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoX3hsb2cuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9o YXNoL2hhc2hfeGxvZy5jCmluZGV4IDIwNjA2MjBjNy4uMDE1N2VlNDUxIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoX3hsb2cuYworKysgYi9zcmMvYmFja2VuZC9hY2Nl c3MvaGFzaC9oYXNoX3hsb2cuYwpAQCAtMTE0MSw3ICsxMTQxLDcgQEAgaGFzaF9tYXNrKGNoYXIg KnBhZ2VkYXRhLCBCbG9ja051bWJlciBibGtubykKIAkJLyoKIAkJICogSW4gaGFzaCBidWNrZXQg YW5kIG92ZXJmbG93IHBhZ2VzLCBpdCBpcyBwb3NzaWJsZSB0byBtb2RpZnkgdGhlCiAJCSAqIExQ X0ZMQUdTIHdpdGhvdXQgZW1pdHRpbmcgYW55IFdBTCByZWNvcmQuIEhlbmNlLCBtYXNrIHRoZSBs aW5lCi0JCSAqIHBvaW50ZXIgZmxhZ3MuIFNlZSBoYXNoZ2V0dHVwbGUoKSwgX2hhc2hfa2lsbF9p dGVtcygpIGZvciBkZXRhaWxzLgorCQkgKiBwb2ludGVyIGZsYWdzLiBTZWUgX2hhc2hfa2lsbF9p dGVtcygpIGZvciBkZXRhaWxzLgogCQkgKi8KIAkJbWFza19scF9mbGFncyhwYWdlKTsKIAl9CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNocGFnZS5jIGIvc3JjL2JhY2tl bmQvYWNjZXNzL2hhc2gvaGFzaHBhZ2UuYwppbmRleCAyNjNiYzczZjEuLjJiYzhiZWEyMiAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHBhZ2UuYworKysgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvaGFzaC9oYXNocGFnZS5jCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAi cG9ydC9wZ19iaXR1dGlscy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJlZGljYXRlLmgiCiAjaW5j bHVkZSAic3RvcmFnZS9zbWdyLmgiCisjaW5jbHVkZSAidXRpbHMvbWVtZGVidWcuaCIKICNpbmNs dWRlICJ1dGlscy9yZWwuaCIKIAogc3RhdGljIGJvb2wgX2hhc2hfYWxsb2NfYnVja2V0cyhSZWxh dGlvbiByZWwsIEJsb2NrTnVtYmVyIGZpcnN0YmxvY2ssCkBAIC03OSw2ICs4MCw5IEBAIF9oYXNo X2dldGJ1ZihSZWxhdGlvbiByZWwsIEJsb2NrTnVtYmVyIGJsa25vLCBpbnQgYWNjZXNzLCBpbnQg ZmxhZ3MpCiAJaWYgKGFjY2VzcyAhPSBIQVNIX05PTE9DSykKIAkJTG9ja0J1ZmZlcihidWYsIGFj Y2Vzcyk7CiAKKwlpZiAoIVJlbGF0aW9uVXNlc0xvY2FsQnVmZmVycyhyZWwpKQorCQlWQUxHUklO RF9NQUtFX01FTV9ERUZJTkVEKEJ1ZmZlckdldFBhZ2UoYnVmKSwgQkxDS1NaKTsKKwogCS8qIHJl ZiBjb3VudCBhbmQgbG9jayB0eXBlIGFyZSBjb3JyZWN0ICovCiAKIAlfaGFzaF9jaGVja3BhZ2Uo cmVsLCBidWYsIGZsYWdzKTsKQEAgLTEwOCw2ICsxMTIsOSBAQCBfaGFzaF9nZXRidWZfd2l0aF9j b25kbG9ja19jbGVhbnVwKFJlbGF0aW9uIHJlbCwgQmxvY2tOdW1iZXIgYmxrbm8sIGludCBmbGFn cykKIAkJcmV0dXJuIEludmFsaWRCdWZmZXI7CiAJfQogCisJaWYgKCFSZWxhdGlvblVzZXNMb2Nh bEJ1ZmZlcnMocmVsKSkKKwkJVkFMR1JJTkRfTUFLRV9NRU1fREVGSU5FRChCdWZmZXJHZXRQYWdl KGJ1ZiksIEJMQ0tTWik7CisKIAkvKiByZWYgY291bnQgYW5kIGxvY2sgdHlwZSBhcmUgY29ycmVj dCAqLwogCiAJX2hhc2hfY2hlY2twYWdlKHJlbCwgYnVmLCBmbGFncyk7CkBAIC0yODAsMzEgKzI4 NywyNCBAQCBfaGFzaF9kcm9wYnVmKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGJ1ZikKIH0KIAogLyoK LSAqCV9oYXNoX2Ryb3BzY2FuYnVmKCkgLS0gcmVsZWFzZSBidWZmZXJzIHVzZWQgaW4gc2Nhbi4K KyAqCV9oYXNoX2Ryb3BzY2FuYnVmKCkgLS0gcmVsZWFzZSBidWZmZXJzIG93bmVkIGJ5IHNjYW4u CiAgKgotICogVGhpcyByb3V0aW5lIHVucGlucyB0aGUgYnVmZmVycyB1c2VkIGR1cmluZyBzY2Fu IG9uIHdoaWNoIHdlCi0gKiBob2xkIG5vIGxvY2suCisgKiBUaGlzIHJvdXRpbmUgdW5waW5zIHRo ZSBidWZmZXJzIGZvciB0aGUgcHJpbWFyeSBidWNrZXQgcGFnZSBhbmQgZm9yIHRoZQorICogYnVj a2V0IHBhZ2Ugb2YgYSBidWNrZXQgYmVpbmcgc3BsaXQgYXMgbmVlZGVkLgogICovCiB2b2lkCiBf aGFzaF9kcm9wc2NhbmJ1ZihSZWxhdGlvbiByZWwsIEhhc2hTY2FuT3BhcXVlIHNvKQogewogCS8q IHJlbGVhc2UgcGluIHdlIGhvbGQgb24gcHJpbWFyeSBidWNrZXQgcGFnZSAqLwotCWlmIChCdWZm ZXJJc1ZhbGlkKHNvLT5oYXNoc29fYnVja2V0X2J1ZikgJiYKLQkJc28tPmhhc2hzb19idWNrZXRf YnVmICE9IHNvLT5jdXJyUG9zLmJ1ZikKKwlpZiAoQnVmZmVySXNWYWxpZChzby0+aGFzaHNvX2J1 Y2tldF9idWYpKQogCQlfaGFzaF9kcm9wYnVmKHJlbCwgc28tPmhhc2hzb19idWNrZXRfYnVmKTsK IAlzby0+aGFzaHNvX2J1Y2tldF9idWYgPSBJbnZhbGlkQnVmZmVyOwogCi0JLyogcmVsZWFzZSBw aW4gd2UgaG9sZCBvbiBwcmltYXJ5IGJ1Y2tldCBwYWdlICBvZiBidWNrZXQgYmVpbmcgc3BsaXQg Ki8KLQlpZiAoQnVmZmVySXNWYWxpZChzby0+aGFzaHNvX3NwbGl0X2J1Y2tldF9idWYpICYmCi0J CXNvLT5oYXNoc29fc3BsaXRfYnVja2V0X2J1ZiAhPSBzby0+Y3VyclBvcy5idWYpCisJLyogcmVs ZWFzZSBwaW4gaGVsZCBvbiBwcmltYXJ5IGJ1Y2tldCBwYWdlIG9mIGJ1Y2tldCBiZWluZyBzcGxp dCAqLworCWlmIChCdWZmZXJJc1ZhbGlkKHNvLT5oYXNoc29fc3BsaXRfYnVja2V0X2J1ZikpCiAJ CV9oYXNoX2Ryb3BidWYocmVsLCBzby0+aGFzaHNvX3NwbGl0X2J1Y2tldF9idWYpOwogCXNvLT5o YXNoc29fc3BsaXRfYnVja2V0X2J1ZiA9IEludmFsaWRCdWZmZXI7CiAKLQkvKiByZWxlYXNlIGFu eSBwaW4gd2Ugc3RpbGwgaG9sZCAqLwotCWlmIChCdWZmZXJJc1ZhbGlkKHNvLT5jdXJyUG9zLmJ1 ZikpCi0JCV9oYXNoX2Ryb3BidWYocmVsLCBzby0+Y3VyclBvcy5idWYpOwotCXNvLT5jdXJyUG9z LmJ1ZiA9IEludmFsaWRCdWZmZXI7Ci0KIAkvKiByZXNldCBzcGxpdCBzY2FuICovCiAJc28tPmhh c2hzb19idWNfcG9wdWxhdGVkID0gZmFsc2U7CiAJc28tPmhhc2hzb19idWNfc3BsaXQgPSBmYWxz ZTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hzZWFyY2guYyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hzZWFyY2guYwppbmRleCA4OWQxYzViYzYuLmE0NWNl MzA2YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHNlYXJjaC5jCisr KyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hzZWFyY2guYwpAQCAtMjIsMTA1ICsyMiw4 MyBAQAogI2luY2x1ZGUgInN0b3JhZ2UvcHJlZGljYXRlLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVs LmgiCiAKLXN0YXRpYyBib29sIF9oYXNoX3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQnVm ZmVyICpidWZQLAotCQkJCQkJICAgU2NhbkRpcmVjdGlvbiBkaXIpOworc3RhdGljIGJvb2wgX2hh c2hfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBCdWZmZXIgYnVmLCBTY2FuRGlyZWN0aW9u IGRpciwKKwkJCQkJCSAgIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKIHN0YXRpYyBpbnQJX2hhc2hf bG9hZF9xdWFsaWZpZWRfaXRlbXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBQYWdlIHBhZ2UsCi0JCQkJ CQkJCQkgICBPZmZzZXROdW1iZXIgb2ZmbnVtLCBTY2FuRGlyZWN0aW9uIGRpcik7Ci1zdGF0aWMg aW5saW5lIHZvaWQgX2hhc2hfc2F2ZWl0ZW0oSGFzaFNjYW5PcGFxdWUgc28sIGludCBpdGVtSW5k ZXgsCisJCQkJCQkJCQkgICBPZmZzZXROdW1iZXIgb2ZmbnVtLCBTY2FuRGlyZWN0aW9uIGRpciwK KwkJCQkJCQkJCSAgIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBf aGFzaF9zYXZlaXRlbShJbmRleFNjYW5CYXRjaCBiYXRjaCwgaW50IGl0ZW1JbmRleCwKIAkJCQkJ CQkJICBPZmZzZXROdW1iZXIgb2ZmbnVtLCBJbmRleFR1cGxlIGl0dXApOwogc3RhdGljIHZvaWQg X2hhc2hfcmVhZG5leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBCdWZmZXIgKmJ1ZnAsCiAJCQkJCQkg ICBQYWdlICpwYWdlcCwgSGFzaFBhZ2VPcGFxdWUgKm9wYXF1ZXApOwogCiAvKgotICoJX2hhc2hf bmV4dCgpIC0tIEdldCB0aGUgbmV4dCBpdGVtIGluIGEgc2Nhbi4KKyAqCV9oYXNoX25leHQoKSAt LSBHZXQgdGhlIG5leHQgYmF0Y2ggb2YgaXRlbXMgaW4gYSBzY2FuLgogICoKLSAqCQlPbiBlbnRy eSwgc28tPmN1cnJQb3MgZGVzY3JpYmVzIHRoZSBjdXJyZW50IHBhZ2UsIHdoaWNoIG1heQotICoJ CWJlIHBpbm5lZCBidXQgbm90IGxvY2tlZCwgYW5kIHNvLT5jdXJyUG9zLml0ZW1JbmRleCBpZGVu dGlmaWVzCi0gKgkJd2hpY2ggaXRlbSB3YXMgcHJldmlvdXNseSByZXR1cm5lZC4KKyAqCQlPbiBl bnRyeSwgcHJpb3JiYXRjaCBkZXNjcmliZXMgdGhlIGN1cnJlbnQgcGFnZSBiYXRjaCB3aXRoIGl0 ZW1zCisgKgkJYWxyZWFkeSByZXR1cm5lZC4KICAqCi0gKgkJT24gc3VjY2Vzc2Z1bCBleGl0LCBz Y2FuLT54c19oZWFwdGlkIGlzIHNldCB0byB0aGUgVElEIG9mIHRoZSBuZXh0Ci0gKgkJaGVhcCB0 dXBsZS4gIHNvLT5jdXJyUG9zIGlzIHVwZGF0ZWQgYXMgbmVlZGVkLgorICoJCU9uIHN1Y2Nlc3Nm dWwgZXhpdCwgcmV0dXJucyBhIGJhdGNoIGNvbnRhaW5pbmcgbWF0Y2hpbmcgaXRlbXMgZnJvbQor ICoJCW5leHQgcGFnZS4gIE90aGVyd2lzZSByZXR1cm5zIE5VTEwsIGluZGljYXRpbmcgdGhhdCB0 aGVyZSBhcmUgbm8KKyAqCQlmdXJ0aGVyIG1hdGNoZXMuICBObyBsb2NrcyBhcmUgZXZlciBoZWxk IHdoZW4gd2UgcmV0dXJuLgogICoKLSAqCQlPbiBmYWlsdXJlIGV4aXQgKG5vIG1vcmUgdHVwbGVz KSwgd2UgcmV0dXJuIGZhbHNlIHdpdGggcGluCi0gKgkJaGVsZCBvbiBidWNrZXQgcGFnZSBidXQg bm8gcGlucyBvciBsb2NrcyBoZWxkIG9uIG92ZXJmbG93Ci0gKgkJcGFnZS4KKyAqCQlSZXRhaW5z IHBpbnMgYWNjb3JkaW5nIHRvIHRoZSBzYW1lIHJ1bGVzIGFzIF9oYXNoX2ZpcnN0LgogICovCi1i b29sCi1faGFzaF9uZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCitJ bmRleFNjYW5CYXRjaAorX2hhc2hfbmV4dChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rp b24gZGlyLCBJbmRleFNjYW5CYXRjaCBwcmlvcmJhdGNoKQogewogCVJlbGF0aW9uCXJlbCA9IHNj YW4tPmluZGV4UmVsYXRpb247CiAJSGFzaFNjYW5PcGFxdWUgc28gPSAoSGFzaFNjYW5PcGFxdWUp IHNjYW4tPm9wYXF1ZTsKLQlIYXNoU2NhblBvc0l0ZW0gKmN1cnJJdGVtOwogCUJsb2NrTnVtYmVy IGJsa25vOwogCUJ1ZmZlcgkJYnVmOwotCWJvb2wJCWVuZF9vZl9zY2FuID0gZmFsc2U7CisJSW5k ZXhTY2FuQmF0Y2ggYmF0Y2g7CiAKIAkvKgotCSAqIEFkdmFuY2UgdG8gdGhlIG5leHQgdHVwbGUg b24gdGhlIGN1cnJlbnQgcGFnZTsgb3IgaWYgZG9uZSwgdHJ5IHRvIHJlYWQKLQkgKiBkYXRhIGZy b20gdGhlIG5leHQgb3IgcHJldmlvdXMgcGFnZSBiYXNlZCBvbiB0aGUgc2NhbiBkaXJlY3Rpb24u IEJlZm9yZQotCSAqIG1vdmluZyB0byB0aGUgbmV4dCBvciBwcmV2aW91cyBwYWdlIG1ha2Ugc3Vy ZSB0aGF0IHdlIGRlYWwgd2l0aCBhbGwgdGhlCi0JICoga2lsbGVkIGl0ZW1zLgorCSAqIERldGVy bWluZSB3aGljaCBwYWdlIHRvIHJlYWQgbmV4dCBiYXNlZCBvbiBzY2FuIGRpcmVjdGlvbiBhbmQg ZGV0YWlscworCSAqIHRha2VuIGZyb20gdGhlIHByaW9yIGJhdGNoCiAJICovCiAJaWYgKFNjYW5E aXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKIAl7Ci0JCWlmICgrK3NvLT5jdXJyUG9zLml0ZW1JbmRl eCA+IHNvLT5jdXJyUG9zLmxhc3RJdGVtKQotCQl7Ci0JCQlpZiAoc28tPm51bUtpbGxlZCA+IDAp Ci0JCQkJX2hhc2hfa2lsbF9pdGVtcyhzY2FuKTsKLQotCQkJYmxrbm8gPSBzby0+Y3VyclBvcy5u ZXh0UGFnZTsKLQkJCWlmIChCbG9ja051bWJlcklzVmFsaWQoYmxrbm8pKQotCQkJewotCQkJCWJ1 ZiA9IF9oYXNoX2dldGJ1ZihyZWwsIGJsa25vLCBIQVNIX1JFQUQsIExIX09WRVJGTE9XX1BBR0Up OwotCQkJCWlmICghX2hhc2hfcmVhZHBhZ2Uoc2NhbiwgJmJ1ZiwgZGlyKSkKLQkJCQkJZW5kX29m X3NjYW4gPSB0cnVlOwotCQkJfQotCQkJZWxzZQotCQkJCWVuZF9vZl9zY2FuID0gdHJ1ZTsKLQkJ fQorCQlibGtubyA9IHByaW9yYmF0Y2gtPm5leHRQYWdlOworCQlpZiAoIUJsb2NrTnVtYmVySXNW YWxpZChibGtubykgfHwgIXByaW9yYmF0Y2gtPm1vcmVSaWdodCkKKwkJCXJldHVybiBOVUxMOwog CX0KIAllbHNlCiAJewotCQlpZiAoLS1zby0+Y3VyclBvcy5pdGVtSW5kZXggPCBzby0+Y3VyclBv cy5maXJzdEl0ZW0pCi0JCXsKLQkJCWlmIChzby0+bnVtS2lsbGVkID4gMCkKLQkJCQlfaGFzaF9r aWxsX2l0ZW1zKHNjYW4pOwotCi0JCQlibGtubyA9IHNvLT5jdXJyUG9zLnByZXZQYWdlOwotCQkJ aWYgKEJsb2NrTnVtYmVySXNWYWxpZChibGtubykpCi0JCQl7Ci0JCQkJYnVmID0gX2hhc2hfZ2V0 YnVmKHJlbCwgYmxrbm8sIEhBU0hfUkVBRCwKLQkJCQkJCQkJICAgTEhfQlVDS0VUX1BBR0UgfCBM SF9PVkVSRkxPV19QQUdFKTsKLQotCQkJCS8qCi0JCQkJICogV2UgYWx3YXlzIG1haW50YWluIHRo ZSBwaW4gb24gYnVja2V0IHBhZ2UgZm9yIHdob2xlIHNjYW4KLQkJCQkgKiBvcGVyYXRpb24sIHNv IHJlbGVhc2luZyB0aGUgYWRkaXRpb25hbCBwaW4gd2UgaGF2ZSBhY3F1aXJlZAotCQkJCSAqIGhl cmUuCi0JCQkJICovCi0JCQkJaWYgKGJ1ZiA9PSBzby0+aGFzaHNvX2J1Y2tldF9idWYgfHwKLQkJ CQkJYnVmID09IHNvLT5oYXNoc29fc3BsaXRfYnVja2V0X2J1ZikKLQkJCQkJX2hhc2hfZHJvcGJ1 ZihyZWwsIGJ1Zik7Ci0KLQkJCQlpZiAoIV9oYXNoX3JlYWRwYWdlKHNjYW4sICZidWYsIGRpcikp Ci0JCQkJCWVuZF9vZl9zY2FuID0gdHJ1ZTsKLQkJCX0KLQkJCWVsc2UKLQkJCQllbmRfb2Zfc2Nh biA9IHRydWU7Ci0JCX0KKwkJYmxrbm8gPSBwcmlvcmJhdGNoLT5wcmV2UGFnZTsKKwkJaWYgKCFC bG9ja051bWJlcklzVmFsaWQoYmxrbm8pIHx8ICFwcmlvcmJhdGNoLT5tb3JlTGVmdCkKKwkJCXJl dHVybiBOVUxMOwogCX0KIAotCWlmIChlbmRfb2Zfc2NhbikKKwkvKiBBbGxvY2F0ZSBzcGFjZSBm b3IgbmV4dCBiYXRjaCAqLworCWJhdGNoID0gaW5kZXhhbV91dGlsX2JhdGNoX2FsbG9jKHNjYW4p OworCisJLyogR2V0IHRoZSBidWZmZXIgZm9yIG5leHQgYmF0Y2ggKi8KKwlpZiAoU2NhbkRpcmVj dGlvbklzRm9yd2FyZChkaXIpKQorCQlidWYgPSBfaGFzaF9nZXRidWYocmVsLCBibGtubywgSEFT SF9SRUFELCBMSF9PVkVSRkxPV19QQUdFKTsKKwllbHNlCiAJewotCQlfaGFzaF9kcm9wc2NhbmJ1 ZihyZWwsIHNvKTsKLQkJSGFzaFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5jdXJyUG9zKTsKLQkJcmV0 dXJuIGZhbHNlOworCQlidWYgPSBfaGFzaF9nZXRidWYocmVsLCBibGtubywgSEFTSF9SRUFELAor CQkJCQkJICAgTEhfQlVDS0VUX1BBR0UgfCBMSF9PVkVSRkxPV19QQUdFKTsKKworCQkvKgorCQkg KiBXZSBhbHdheXMgbWFpbnRhaW4gdGhlIHBpbiBvbiBidWNrZXQgcGFnZSBmb3Igd2hvbGUgc2Nh biBvcGVyYXRpb24sCisJCSAqIHNvIHJlbGVhc2luZyB0aGUgYWRkaXRpb25hbCBwaW4gd2UgaGF2 ZSBhY3F1aXJlZCBoZXJlLgorCQkgKi8KKwkJaWYgKGJ1ZiA9PSBzby0+aGFzaHNvX2J1Y2tldF9i dWYgfHwKKwkJCWJ1ZiA9PSBzby0+aGFzaHNvX3NwbGl0X2J1Y2tldF9idWYpCisJCQlfaGFzaF9k cm9wYnVmKHJlbCwgYnVmKTsKIAl9CiAKLQkvKiBPSywgaXRlbUluZGV4IHNheXMgd2hhdCB0byBy ZXR1cm4gKi8KLQljdXJySXRlbSA9ICZzby0+Y3VyclBvcy5pdGVtc1tzby0+Y3VyclBvcy5pdGVt SW5kZXhdOwotCXNjYW4tPnhzX2hlYXB0aWQgPSBjdXJySXRlbS0+aGVhcFRpZDsKKwkvKiBSZWFk IHRoZSBuZXh0IHBhZ2UgYW5kIGxvYWQgaXRlbXMgaW50byBhbGxvY2F0ZWQgYmF0Y2ggKi8KKwlp ZiAoIV9oYXNoX3JlYWRwYWdlKHNjYW4sIGJ1ZiwgZGlyLCBiYXRjaCkpCisJeworCQlpbmRleGFt X3V0aWxfYmF0Y2hfcmVsZWFzZShzY2FuLCBiYXRjaCk7CisJCXJldHVybiBOVUxMOworCX0KIAot CXJldHVybiB0cnVlOworCS8qIFJldHVybiB0aGUgYmF0Y2ggY29udGFpbmluZyBtYXRjaGVkIGl0 ZW1zIGZyb20gbmV4dCBwYWdlICovCisJcmV0dXJuIGJhdGNoOwogfQogCiAvKgpAQCAtMjcwLDIy ICsyNDgsMjAgQEAgX2hhc2hfcmVhZHByZXYoSW5kZXhTY2FuRGVzYyBzY2FuLAogfQogCiAvKgot ICoJX2hhc2hfZmlyc3QoKSAtLSBGaW5kIHRoZSBmaXJzdCBpdGVtIGluIGEgc2Nhbi4KKyAqCV9o YXNoX2ZpcnN0KCkgLS0gRmluZCB0aGUgZmlyc3QgYmF0Y2ggb2YgaXRlbXMgaW4gYSBzY2FuLgog ICoKLSAqCQlXZSBmaW5kIHRoZSBmaXJzdCBpdGVtIChvciwgaWYgYmFja3dhcmQgc2NhbiwgdGhl IGxhc3QgaXRlbSkgaW4gdGhlCi0gKgkJaW5kZXggdGhhdCBzYXRpc2ZpZXMgdGhlIHF1YWxpZmlj YXRpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBzY2FuCi0gKgkJZGVzY3JpcHRvci4KKyAqCQlXZSBm aW5kIHRoZSBmaXJzdCBiYXRjaCBvZiBpdGVtcyAob3IsIGlmIGJhY2t3YXJkIHNjYW4sIHRoZSBs YXN0CisgKgkJYmF0Y2gpIGluIHRoZSBpbmRleCB0aGF0IHNhdGlzZmllcyB0aGUgcXVhbGlmaWNh dGlvbiBhc3NvY2lhdGVkIHdpdGgKKyAqCQl0aGUgc2NhbiBkZXNjcmlwdG9yLgogICoKLSAqCQlP biBzdWNjZXNzZnVsIGV4aXQsIGlmIHRoZSBwYWdlIGNvbnRhaW5pbmcgY3VycmVudCBpbmRleCB0 dXBsZSBpcyBhbgotICoJCW92ZXJmbG93IHBhZ2UsIGJvdGggcGluIGFuZCBsb2NrIGFyZSByZWxl YXNlZCB3aGVyZWFzIGlmIGl0IGlzIGEgYnVja2V0Ci0gKgkJcGFnZSB0aGVuIGl0IGlzIHBpbm5l ZCBidXQgbm90IGxvY2tlZCBhbmQgZGF0YSBhYm91dCB0aGUgbWF0Y2hpbmcKLSAqCQl0dXBsZShz KSBvbiB0aGUgcGFnZSBoYXMgYmVlbiBsb2FkZWQgaW50byBzby0+Y3VyclBvcywKLSAqCQlzY2Fu LT54c19oZWFwdGlkIGlzIHNldCB0byB0aGUgaGVhcCBUSUQgb2YgdGhlIGN1cnJlbnQgdHVwbGUu CisgKgkJT24gc3VjY2Vzc2Z1bCBleGl0LCByZXR1cm5zIGEgYmF0Y2ggY29udGFpbmluZyBtYXRj aGluZyBpdGVtcy4KKyAqCQlPdGhlcndpc2UgcmV0dXJucyBOVUxMLCBpbmRpY2F0aW5nIHRoYXQg dGhlcmUgYXJlIG5vIGZ1cnRoZXIgbWF0Y2hlcy4KKyAqCQlObyBsb2NrcyBhcmUgZXZlciBoZWxk IHdoZW4gd2UgcmV0dXJuLgogICoKLSAqCQlPbiBmYWlsdXJlIGV4aXQgKG5vIG1vcmUgdHVwbGVz KSwgd2UgcmV0dXJuIGZhbHNlLCB3aXRoIHBpbiBoZWxkIG9uCi0gKgkJYnVja2V0IHBhZ2UgYnV0 IG5vIHBpbnMgb3IgbG9ja3MgaGVsZCBvbiBvdmVyZmxvdyBwYWdlLgorICoJCVdlIGFsd2F5cyBy ZXRhaW4gb3VyIG93biBwaW4gb24gdGhlIGJ1Y2tldCBwYWdlLiAgV2hlbiB3ZSByZXR1cm4gYQor ICoJCWJhdGNoIHdpdGggYSBidWNrZXQgcGFnZSwgaXQgd2lsbCByZXRhaW4gaXRzIG93biByZWZl cmVuY2UgcGluLgogICovCi1ib29sCitJbmRleFNjYW5CYXRjaAogX2hhc2hfZmlyc3QoSW5kZXhT Y2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIHsKIAlSZWxhdGlvbglyZWwgPSBzY2Fu LT5pbmRleFJlbGF0aW9uOwpAQCAtMjk2LDcgKzI3Miw3IEBAIF9oYXNoX2ZpcnN0KEluZGV4U2Nh bkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJQnVmZmVyCQlidWY7CiAJUGFnZQkJcGFn ZTsKIAlIYXNoUGFnZU9wYXF1ZSBvcGFxdWU7Ci0JSGFzaFNjYW5Qb3NJdGVtICpjdXJySXRlbTsK KwlJbmRleFNjYW5CYXRjaCBiYXRjaDsKIAogCXBnc3RhdF9jb3VudF9pbmRleF9zY2FuKHJlbCk7 CiAJaWYgKHNjYW4tPmluc3RydW1lbnQpCkBAIC0zMjYsNyArMzAyLDcgQEAgX2hhc2hfZmlyc3Qo SW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAkgKiBpdGVtcyBpbiB0aGUg aW5kZXguCiAJICovCiAJaWYgKGN1ci0+c2tfZmxhZ3MgJiBTS19JU05VTEwpCi0JCXJldHVybiBm YWxzZTsKKwkJcmV0dXJuIE5VTEw7CiAKIAkvKgogCSAqIE9rYXkgdG8gY29tcHV0ZSB0aGUgaGFz aCBrZXkuICBXZSB3YW50IHRvIGRvIHRoaXMgYmVmb3JlIGFjcXVpcmluZyBhbnkKQEAgLTQxOSwx OTEgKzM5NSwxNjAgQEAgX2hhc2hfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0 aW9uIGRpcikKIAkJCV9oYXNoX3JlYWRuZXh0KHNjYW4sICZidWYsICZwYWdlLCAmb3BhcXVlKTsK IAl9CiAKLQkvKiByZW1lbWJlciB3aGljaCBidWZmZXIgd2UgaGF2ZSBwaW5uZWQsIGlmIGFueSAq LwotCUFzc2VydChCdWZmZXJJc0ludmFsaWQoc28tPmN1cnJQb3MuYnVmKSk7Ci0Jc28tPmN1cnJQ b3MuYnVmID0gYnVmOworCS8qIEFsbG9jYXRlIHNwYWNlIGZvciBmaXJzdCBiYXRjaCAqLworCWJh dGNoID0gaW5kZXhhbV91dGlsX2JhdGNoX2FsbG9jKHNjYW4pOwogCi0JLyogTm93IGZpbmQgYWxs IHRoZSB0dXBsZXMgc2F0aXNmeWluZyB0aGUgcXVhbGlmaWNhdGlvbiBmcm9tIGEgcGFnZSAqLwot CWlmICghX2hhc2hfcmVhZHBhZ2Uoc2NhbiwgJmJ1ZiwgZGlyKSkKLQkJcmV0dXJuIGZhbHNlOwor CS8qIFJlYWQgdGhlIGZpcnN0IHBhZ2UgYW5kIGxvYWQgaXRlbXMgaW50byBhbGxvY2F0ZWQgYmF0 Y2ggKi8KKwlpZiAoIV9oYXNoX3JlYWRwYWdlKHNjYW4sIGJ1ZiwgZGlyLCBiYXRjaCkpCisJewor CQlpbmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFzZShzY2FuLCBiYXRjaCk7CisJCXJldHVybiBOVUxM OworCX0KIAotCS8qIE9LLCBpdGVtSW5kZXggc2F5cyB3aGF0IHRvIHJldHVybiAqLwotCWN1cnJJ dGVtID0gJnNvLT5jdXJyUG9zLml0ZW1zW3NvLT5jdXJyUG9zLml0ZW1JbmRleF07Ci0Jc2Nhbi0+ eHNfaGVhcHRpZCA9IGN1cnJJdGVtLT5oZWFwVGlkOwotCi0JLyogaWYgd2UncmUgaGVyZSwgX2hh c2hfcmVhZHBhZ2UgZm91bmQgYSB2YWxpZCB0dXBsZXMgKi8KLQlyZXR1cm4gdHJ1ZTsKKwkvKiBS ZXR1cm4gdGhlIGJhdGNoIGNvbnRhaW5pbmcgbWF0Y2hlZCBpdGVtcyAqLworCXJldHVybiBiYXRj aDsKIH0KIAogLyoKLSAqCV9oYXNoX3JlYWRwYWdlKCkgLS0gTG9hZCBkYXRhIGZyb20gY3VycmVu dCBpbmRleCBwYWdlIGludG8gc28tPmN1cnJQb3MKKyAqCV9oYXNoX3JlYWRwYWdlKCkgLS0gTG9h ZCBkYXRhIGZyb20gY3VycmVudCBpbmRleCBwYWdlIGludG8gYmF0Y2gKICAqCiAgKglXZSBzY2Fu IGFsbCB0aGUgaXRlbXMgaW4gdGhlIGN1cnJlbnQgaW5kZXggcGFnZSBhbmQgc2F2ZSB0aGVtIGlu dG8KLSAqCXNvLT5jdXJyUG9zIGlmIGl0IHNhdGlzZmllcyB0aGUgcXVhbGlmaWNhdGlvbi4gSWYg bm8gbWF0Y2hpbmcgaXRlbXMKKyAqCXRoZSBiYXRjaCBpZiB0aGV5IHNhdGlzZnkgdGhlIHF1YWxp ZmljYXRpb24uIElmIG5vIG1hdGNoaW5nIGl0ZW1zCiAgKglhcmUgZm91bmQgaW4gdGhlIGN1cnJl bnQgcGFnZSwgd2UgbW92ZSB0byB0aGUgbmV4dCBvciBwcmV2aW91cyBwYWdlCiAgKglpbiBhIGJ1 Y2tldCBjaGFpbiBhcyBpbmRpY2F0ZWQgYnkgdGhlIGRpcmVjdGlvbi4KICAqCiAgKglSZXR1cm4g dHJ1ZSBpZiBhbnkgbWF0Y2hpbmcgaXRlbXMgYXJlIGZvdW5kIGVsc2UgcmV0dXJuIGZhbHNlLgog ICovCiBzdGF0aWMgYm9vbAotX2hhc2hfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBCdWZm ZXIgKmJ1ZlAsIFNjYW5EaXJlY3Rpb24gZGlyKQorX2hhc2hfcmVhZHBhZ2UoSW5kZXhTY2FuRGVz YyBzY2FuLCBCdWZmZXIgYnVmLCBTY2FuRGlyZWN0aW9uIGRpciwKKwkJCSAgIEluZGV4U2NhbkJh dGNoIGJhdGNoKQogewogCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247CiAJSGFz aFNjYW5PcGFxdWUgc28gPSAoSGFzaFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKLQlCdWZmZXIJ CWJ1ZjsKIAlQYWdlCQlwYWdlOwogCUhhc2hQYWdlT3BhcXVlIG9wYXF1ZTsKIAlPZmZzZXROdW1i ZXIgb2ZmbnVtOwogCXVpbnQxNgkJaXRlbUluZGV4OwogCi0JYnVmID0gKmJ1ZlA7CiAJQXNzZXJ0 KEJ1ZmZlcklzVmFsaWQoYnVmKSk7CiAJX2hhc2hfY2hlY2twYWdlKHJlbCwgYnVmLCBMSF9CVUNL RVRfUEFHRSB8IExIX09WRVJGTE9XX1BBR0UpOwogCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGJ1Zik7 CiAJb3BhcXVlID0gSGFzaFBhZ2VHZXRPcGFxdWUocGFnZSk7CiAKLQlzby0+Y3VyclBvcy5idWYg PSBidWY7Ci0Jc28tPmN1cnJQb3MuY3VyclBhZ2UgPSBCdWZmZXJHZXRCbG9ja051bWJlcihidWYp OworCWJhdGNoLT5idWYgPSBidWY7CisJYmF0Y2gtPmN1cnJQYWdlID0gQnVmZmVyR2V0QmxvY2tO dW1iZXIoYnVmKTsKKwliYXRjaC0+ZGlyID0gZGlyOwogCiAJaWYgKFNjYW5EaXJlY3Rpb25Jc0Zv cndhcmQoZGlyKSkKIAl7Ci0JCUJsb2NrTnVtYmVyIHByZXZfYmxrbm8gPSBJbnZhbGlkQmxvY2tO dW1iZXI7Ci0KIAkJZm9yICg7OykKIAkJewogCQkJLyogbmV3IHBhZ2UsIGxvY2F0ZSBzdGFydGlu ZyBwb3NpdGlvbiBieSBiaW5hcnkgc2VhcmNoICovCiAJCQlvZmZudW0gPSBfaGFzaF9iaW5zZWFy Y2gocGFnZSwgc28tPmhhc2hzb19za19oYXNoKTsKIAotCQkJaXRlbUluZGV4ID0gX2hhc2hfbG9h ZF9xdWFsaWZpZWRfaXRlbXMoc2NhbiwgcGFnZSwgb2ZmbnVtLCBkaXIpOworCQkJaXRlbUluZGV4 ID0gX2hhc2hfbG9hZF9xdWFsaWZpZWRfaXRlbXMoc2NhbiwgcGFnZSwgb2ZmbnVtLCBkaXIsCisJ CQkJCQkJCQkJCQkgICBiYXRjaCk7CiAKIAkJCWlmIChpdGVtSW5kZXggIT0gMCkKIAkJCQlicmVh azsKIAogCQkJLyoKLQkJCSAqIENvdWxkIG5vdCBmaW5kIGFueSBtYXRjaGluZyB0dXBsZXMgaW4g dGhlIGN1cnJlbnQgcGFnZSwgbW92ZSB0bwotCQkJICogdGhlIG5leHQgcGFnZS4gQmVmb3JlIGxl YXZpbmcgdGhlIGN1cnJlbnQgcGFnZSwgZGVhbCB3aXRoIGFueQotCQkJICoga2lsbGVkIGl0ZW1z LgorCQkJICogQ291bGQgbm90IGZpbmQgYW55IG1hdGNoaW5nIHR1cGxlcyBpbiB0aGUgY3VycmVu dCBwYWdlLCB0cnkgdG8KKwkJCSAqIG1vdmUgdG8gdGhlIG5leHQgcGFnZQogCQkJICovCi0JCQlp ZiAoc28tPm51bUtpbGxlZCA+IDApCi0JCQkJX2hhc2hfa2lsbF9pdGVtcyhzY2FuKTsKLQotCQkJ LyoKLQkJCSAqIElmIHRoaXMgaXMgYSBwcmltYXJ5IGJ1Y2tldCBwYWdlLCBoYXNob19wcmV2Ymxr bm8gaXMgbm90IGEgcmVhbAotCQkJICogYmxvY2sgbnVtYmVyLgotCQkJICovCi0JCQlpZiAoc28t PmN1cnJQb3MuYnVmID09IHNvLT5oYXNoc29fYnVja2V0X2J1ZiB8fAotCQkJCXNvLT5jdXJyUG9z LmJ1ZiA9PSBzby0+aGFzaHNvX3NwbGl0X2J1Y2tldF9idWYpCi0JCQkJcHJldl9ibGtubyA9IElu dmFsaWRCbG9ja051bWJlcjsKLQkJCWVsc2UKLQkJCQlwcmV2X2Jsa25vID0gb3BhcXVlLT5oYXNo b19wcmV2Ymxrbm87Ci0KIAkJCV9oYXNoX3JlYWRuZXh0KHNjYW4sICZidWYsICZwYWdlLCAmb3Bh cXVlKTsKLQkJCWlmIChCdWZmZXJJc1ZhbGlkKGJ1ZikpCisJCQlpZiAoIUJ1ZmZlcklzVmFsaWQo YnVmKSkKIAkJCXsKLQkJCQlzby0+Y3VyclBvcy5idWYgPSBidWY7Ci0JCQkJc28tPmN1cnJQb3Mu Y3VyclBhZ2UgPSBCdWZmZXJHZXRCbG9ja051bWJlcihidWYpOwotCQkJfQotCQkJZWxzZQotCQkJ ewotCQkJCS8qCi0JCQkJICogUmVtZW1iZXIgbmV4dCBhbmQgcHJldmlvdXMgYmxvY2sgbnVtYmVy cyBmb3Igc2Nyb2xsYWJsZQotCQkJCSAqIGN1cnNvcnMgdG8ga25vdyB0aGUgc3RhcnQgcG9zaXRp b24gYW5kIHJldHVybiBmYWxzZQotCQkJCSAqIGluZGljYXRpbmcgdGhhdCBubyBtb3JlIG1hdGNo aW5nIHR1cGxlcyB3ZXJlIGZvdW5kLiBBbHNvLAotCQkJCSAqIGRvbid0IHJlc2V0IGN1cnJQYWdl IG9yIGxzbiwgYmVjYXVzZSB3ZSBleHBlY3QKLQkJCQkgKiBfaGFzaF9raWxsX2l0ZW1zIHRvIGJl IGNhbGxlZCBmb3IgdGhlIG9sZCBwYWdlIGFmdGVyIHRoaXMKLQkJCQkgKiBmdW5jdGlvbiByZXR1 cm5zLgotCQkJCSAqLwotCQkJCXNvLT5jdXJyUG9zLnByZXZQYWdlID0gcHJldl9ibGtubzsKLQkJ CQlzby0+Y3VyclBvcy5uZXh0UGFnZSA9IEludmFsaWRCbG9ja051bWJlcjsKLQkJCQlzby0+Y3Vy clBvcy5idWYgPSBidWY7CisJCQkJYmF0Y2gtPmJ1ZiA9IEludmFsaWRCdWZmZXI7CiAJCQkJcmV0 dXJuIGZhbHNlOwogCQkJfQorCisJCQliYXRjaC0+YnVmID0gYnVmOworCQkJYmF0Y2gtPmN1cnJQ YWdlID0gQnVmZmVyR2V0QmxvY2tOdW1iZXIoYnVmKTsKIAkJfQogCi0JCXNvLT5jdXJyUG9zLmZp cnN0SXRlbSA9IDA7Ci0JCXNvLT5jdXJyUG9zLmxhc3RJdGVtID0gaXRlbUluZGV4IC0gMTsKLQkJ c28tPmN1cnJQb3MuaXRlbUluZGV4ID0gMDsKKwkJYmF0Y2gtPmZpcnN0SXRlbSA9IDA7CisJCWJh dGNoLT5sYXN0SXRlbSA9IGl0ZW1JbmRleCAtIDE7CiAJfQogCWVsc2UKIAl7Ci0JCUJsb2NrTnVt YmVyIG5leHRfYmxrbm8gPSBJbnZhbGlkQmxvY2tOdW1iZXI7Ci0KIAkJZm9yICg7OykKIAkJewog CQkJLyogbmV3IHBhZ2UsIGxvY2F0ZSBzdGFydGluZyBwb3NpdGlvbiBieSBiaW5hcnkgc2VhcmNo ICovCiAJCQlvZmZudW0gPSBfaGFzaF9iaW5zZWFyY2hfbGFzdChwYWdlLCBzby0+aGFzaHNvX3Nr X2hhc2gpOwogCi0JCQlpdGVtSW5kZXggPSBfaGFzaF9sb2FkX3F1YWxpZmllZF9pdGVtcyhzY2Fu LCBwYWdlLCBvZmZudW0sIGRpcik7CisJCQlpdGVtSW5kZXggPSBfaGFzaF9sb2FkX3F1YWxpZmll ZF9pdGVtcyhzY2FuLCBwYWdlLCBvZmZudW0sIGRpciwKKwkJCQkJCQkJCQkJCSAgIGJhdGNoKTsK IAogCQkJaWYgKGl0ZW1JbmRleCAhPSBNYXhJbmRleFR1cGxlc1BlclBhZ2UpCiAJCQkJYnJlYWs7 CiAKIAkJCS8qCi0JCQkgKiBDb3VsZCBub3QgZmluZCBhbnkgbWF0Y2hpbmcgdHVwbGVzIGluIHRo ZSBjdXJyZW50IHBhZ2UsIG1vdmUgdG8KLQkJCSAqIHRoZSBwcmV2aW91cyBwYWdlLiBCZWZvcmUg bGVhdmluZyB0aGUgY3VycmVudCBwYWdlLCBkZWFsIHdpdGgKLQkJCSAqIGFueSBraWxsZWQgaXRl bXMuCisJCQkgKiBDb3VsZCBub3QgZmluZCBhbnkgbWF0Y2hpbmcgdHVwbGVzIGluIHRoZSBjdXJy ZW50IHBhZ2UsIHRyeSB0bworCQkJICogbW92ZSB0byB0aGUgcHJldmlvdXMgcGFnZQogCQkJICov Ci0JCQlpZiAoc28tPm51bUtpbGxlZCA+IDApCi0JCQkJX2hhc2hfa2lsbF9pdGVtcyhzY2FuKTsK LQotCQkJaWYgKHNvLT5jdXJyUG9zLmJ1ZiA9PSBzby0+aGFzaHNvX2J1Y2tldF9idWYgfHwKLQkJ CQlzby0+Y3VyclBvcy5idWYgPT0gc28tPmhhc2hzb19zcGxpdF9idWNrZXRfYnVmKQotCQkJCW5l eHRfYmxrbm8gPSBvcGFxdWUtPmhhc2hvX25leHRibGtubzsKLQogCQkJX2hhc2hfcmVhZHByZXYo c2NhbiwgJmJ1ZiwgJnBhZ2UsICZvcGFxdWUpOwotCQkJaWYgKEJ1ZmZlcklzVmFsaWQoYnVmKSkK KwkJCWlmICghQnVmZmVySXNWYWxpZChidWYpKQogCQkJewotCQkJCXNvLT5jdXJyUG9zLmJ1ZiA9 IGJ1ZjsKLQkJCQlzby0+Y3VyclBvcy5jdXJyUGFnZSA9IEJ1ZmZlckdldEJsb2NrTnVtYmVyKGJ1 Zik7Ci0JCQl9Ci0JCQllbHNlCi0JCQl7Ci0JCQkJLyoKLQkJCQkgKiBSZW1lbWJlciBuZXh0IGFu ZCBwcmV2aW91cyBibG9jayBudW1iZXJzIGZvciBzY3JvbGxhYmxlCi0JCQkJICogY3Vyc29ycyB0 byBrbm93IHRoZSBzdGFydCBwb3NpdGlvbiBhbmQgcmV0dXJuIGZhbHNlCi0JCQkJICogaW5kaWNh dGluZyB0aGF0IG5vIG1vcmUgbWF0Y2hpbmcgdHVwbGVzIHdlcmUgZm91bmQuIEFsc28sCi0JCQkJ ICogZG9uJ3QgcmVzZXQgY3VyclBhZ2Ugb3IgbHNuLCBiZWNhdXNlIHdlIGV4cGVjdAotCQkJCSAq IF9oYXNoX2tpbGxfaXRlbXMgdG8gYmUgY2FsbGVkIGZvciB0aGUgb2xkIHBhZ2UgYWZ0ZXIgdGhp cwotCQkJCSAqIGZ1bmN0aW9uIHJldHVybnMuCi0JCQkJICovCi0JCQkJc28tPmN1cnJQb3MucHJl dlBhZ2UgPSBJbnZhbGlkQmxvY2tOdW1iZXI7Ci0JCQkJc28tPmN1cnJQb3MubmV4dFBhZ2UgPSBu ZXh0X2Jsa25vOwotCQkJCXNvLT5jdXJyUG9zLmJ1ZiA9IGJ1ZjsKKwkJCQliYXRjaC0+YnVmID0g SW52YWxpZEJ1ZmZlcjsKIAkJCQlyZXR1cm4gZmFsc2U7CiAJCQl9CisKKwkJCWJhdGNoLT5idWYg PSBidWY7CisJCQliYXRjaC0+Y3VyclBhZ2UgPSBCdWZmZXJHZXRCbG9ja051bWJlcihidWYpOwog CQl9CiAKLQkJc28tPmN1cnJQb3MuZmlyc3RJdGVtID0gaXRlbUluZGV4OwotCQlzby0+Y3VyclBv cy5sYXN0SXRlbSA9IE1heEluZGV4VHVwbGVzUGVyUGFnZSAtIDE7Ci0JCXNvLT5jdXJyUG9zLml0 ZW1JbmRleCA9IE1heEluZGV4VHVwbGVzUGVyUGFnZSAtIDE7CisJCWJhdGNoLT5maXJzdEl0ZW0g PSBpdGVtSW5kZXg7CisJCWJhdGNoLT5sYXN0SXRlbSA9IE1heEluZGV4VHVwbGVzUGVyUGFnZSAt IDE7CiAJfQogCi0JaWYgKHNvLT5jdXJyUG9zLmJ1ZiA9PSBzby0+aGFzaHNvX2J1Y2tldF9idWYg fHwKLQkJc28tPmN1cnJQb3MuYnVmID09IHNvLT5oYXNoc29fc3BsaXRfYnVja2V0X2J1ZikKKwkv KgorCSAqIFNhdmVkIGF0IGxlYXN0IG9uZSBtYXRjaCBpbiBiYXRjaC5pdGVtc1tdLiAgUHJlcGFy ZSBmb3IgaGFzaGdldGJhdGNoIHRvCisJICogcmV0dXJuIGl0IGJ5IGluaXRpYWxpemluZyByZW1h aW5pbmcgdW5pbml0aWFsaXplZCBmaWVsZHMuCisJICovCisJaWYgKGJhdGNoLT5idWYgPT0gc28t Pmhhc2hzb19idWNrZXRfYnVmIHx8CisJCWJhdGNoLT5idWYgPT0gc28tPmhhc2hzb19zcGxpdF9i dWNrZXRfYnVmKQogCXsKLQkJc28tPmN1cnJQb3MucHJldlBhZ2UgPSBJbnZhbGlkQmxvY2tOdW1i ZXI7Ci0JCXNvLT5jdXJyUG9zLm5leHRQYWdlID0gb3BhcXVlLT5oYXNob19uZXh0Ymxrbm87Ci0J CUxvY2tCdWZmZXIoc28tPmN1cnJQb3MuYnVmLCBCVUZGRVJfTE9DS19VTkxPQ0spOworCQkvKgor CQkgKiBCYXRjaCdzIGJ1ZmZlciBpcyBlaXRoZXIgdGhlIHByaW1hcnkgYnVja2V0LCBvciBhIGJ1 Y2tldCBiZWluZworCQkgKiBwb3B1bGF0ZWQgZHVlIHRvIGEgc3BsaXQuCisJCSAqCisJCSAqIElu Y3JlbWVudCBsb2NhbCByZWZlcmVuY2UgY291bnQgc28gdGhhdCBiYXRjaCBnZXRzIGFuIGluZGVw ZW5kZW50CisJCSAqIGJ1ZmZlciByZWZlcmVuY2UgdGhhdCBjYW4gYmUgcmVsZWFzZWQgKGJ5IHRo ZSBjb3JlIGNvZGUvdGFibGUgQU0pCisJCSAqIGJlZm9yZSB0aGUgaGFzaHNvX2J1Y2tldF9idWYv aGFzaHNvX3NwbGl0X2J1Y2tldF9idWYgcmVmZXJlbmNlcyBhcmUKKwkJICogcmVsZWFzZWQuCisJ CSAqLworCQlJbmNyQnVmZmVyUmVmQ291bnQoYmF0Y2gtPmJ1Zik7CisKKwkJLyogQ2FuIG9ubHkg dXNlIG9wYXF1ZS0+aGFzaG9fbmV4dGJsa25vICovCisJCWJhdGNoLT5wcmV2UGFnZSA9IEludmFs aWRCbG9ja051bWJlcjsKKwkJYmF0Y2gtPm5leHRQYWdlID0gb3BhcXVlLT5oYXNob19uZXh0Ymxr bm87CiAJfQogCWVsc2UKIAl7Ci0JCXNvLT5jdXJyUG9zLnByZXZQYWdlID0gb3BhcXVlLT5oYXNo b19wcmV2Ymxrbm87Ci0JCXNvLT5jdXJyUG9zLm5leHRQYWdlID0gb3BhcXVlLT5oYXNob19uZXh0 Ymxrbm87Ci0JCV9oYXNoX3JlbGJ1ZihyZWwsIHNvLT5jdXJyUG9zLmJ1Zik7Ci0JCXNvLT5jdXJy UG9zLmJ1ZiA9IEludmFsaWRCdWZmZXI7CisJCS8qIENhbiB1c2Ugb3BhcXVlLT5oYXNob19wcmV2 Ymxrbm8gYW5kIG9wYXF1ZS0+aGFzaG9fbmV4dGJsa25vICovCisJCWJhdGNoLT5wcmV2UGFnZSA9 IG9wYXF1ZS0+aGFzaG9fcHJldmJsa25vOworCQliYXRjaC0+bmV4dFBhZ2UgPSBvcGFxdWUtPmhh c2hvX25leHRibGtubzsKIAl9CiAKLQlBc3NlcnQoc28tPmN1cnJQb3MuZmlyc3RJdGVtIDw9IHNv LT5jdXJyUG9zLmxhc3RJdGVtKTsKKwliYXRjaC0+bW9yZUxlZnQgPSBCbG9ja051bWJlcklzVmFs aWQoYmF0Y2gtPnByZXZQYWdlKTsKKwliYXRjaC0+bW9yZVJpZ2h0ID0gQmxvY2tOdW1iZXJJc1Zh bGlkKGJhdGNoLT5uZXh0UGFnZSk7CisKKwkvKiBVbmxvY2sgKGFuZCBsaWtlbHkgdW5waW4pIGJ1 ZmZlciwgcGVyIGFtZ2V0YmF0Y2ggY29udHJhY3QgKi8KKwlpbmRleGFtX3V0aWxfYmF0Y2hfdW5s b2NrKHNjYW4sIGJhdGNoKTsKKworCUFzc2VydChiYXRjaC0+Zmlyc3RJdGVtIDw9IGJhdGNoLT5s YXN0SXRlbSk7CiAJcmV0dXJuIHRydWU7CiB9CiAKIC8qCiAgKiBMb2FkIGFsbCB0aGUgcXVhbGlm aWVkIGl0ZW1zIGZyb20gYSBjdXJyZW50IGluZGV4IHBhZ2UKLSAqIGludG8gc28tPmN1cnJQb3Mu IEhlbHBlciBmdW5jdGlvbiBmb3IgX2hhc2hfcmVhZHBhZ2UuCisgKiBpbnRvIGJhdGNoLiBIZWxw ZXIgZnVuY3Rpb24gZm9yIF9oYXNoX3JlYWRwYWdlLgogICovCiBzdGF0aWMgaW50CiBfaGFzaF9s b2FkX3F1YWxpZmllZF9pdGVtcyhJbmRleFNjYW5EZXNjIHNjYW4sIFBhZ2UgcGFnZSwKLQkJCQkJ CSAgIE9mZnNldE51bWJlciBvZmZudW0sIFNjYW5EaXJlY3Rpb24gZGlyKQorCQkJCQkJICAgT2Zm c2V0TnVtYmVyIG9mZm51bSwgU2NhbkRpcmVjdGlvbiBkaXIsCisJCQkJCQkgICBJbmRleFNjYW5C YXRjaCBiYXRjaCkKIHsKIAlIYXNoU2Nhbk9wYXF1ZSBzbyA9IChIYXNoU2Nhbk9wYXF1ZSkgc2Nh bi0+b3BhcXVlOwogCUluZGV4VHVwbGUJaXR1cDsKQEAgLTY0MCw3ICs1ODUsNyBAQCBfaGFzaF9s b2FkX3F1YWxpZmllZF9pdGVtcyhJbmRleFNjYW5EZXNjIHNjYW4sIFBhZ2UgcGFnZSwKIAkJCQlf aGFzaF9jaGVja3F1YWwoc2NhbiwgaXR1cCkpCiAJCQl7CiAJCQkJLyogdHVwbGUgaXMgcXVhbGlm aWVkLCBzbyByZW1lbWJlciBpdCAqLwotCQkJCV9oYXNoX3NhdmVpdGVtKHNvLCBpdGVtSW5kZXgs IG9mZm51bSwgaXR1cCk7CisJCQkJX2hhc2hfc2F2ZWl0ZW0oYmF0Y2gsIGl0ZW1JbmRleCwgb2Zm bnVtLCBpdHVwKTsKIAkJCQlpdGVtSW5kZXgrKzsKIAkJCX0KIAkJCWVsc2UKQEAgLTY4Nyw3ICs2 MzIsNyBAQCBfaGFzaF9sb2FkX3F1YWxpZmllZF9pdGVtcyhJbmRleFNjYW5EZXNjIHNjYW4sIFBh Z2UgcGFnZSwKIAkJCXsKIAkJCQlpdGVtSW5kZXgtLTsKIAkJCQkvKiB0dXBsZSBpcyBxdWFsaWZp ZWQsIHNvIHJlbWVtYmVyIGl0ICovCi0JCQkJX2hhc2hfc2F2ZWl0ZW0oc28sIGl0ZW1JbmRleCwg b2ZmbnVtLCBpdHVwKTsKKwkJCQlfaGFzaF9zYXZlaXRlbShiYXRjaCwgaXRlbUluZGV4LCBvZmZu dW0sIGl0dXApOwogCQkJfQogCQkJZWxzZQogCQkJewpAQCAtNzA2LDEzICs2NTEsMTYgQEAgX2hh c2hfbG9hZF9xdWFsaWZpZWRfaXRlbXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBQYWdlIHBhZ2UsCiAJ fQogfQogCi0vKiBTYXZlIGFuIGluZGV4IGl0ZW0gaW50byBzby0+Y3VyclBvcy5pdGVtc1tpdGVt SW5kZXhdICovCisvKiBTYXZlIGFuIGluZGV4IGl0ZW0gaW50byBiYXRjaC0+aXRlbXNbaXRlbUlu ZGV4XSAqLwogc3RhdGljIGlubGluZSB2b2lkCi1faGFzaF9zYXZlaXRlbShIYXNoU2Nhbk9wYXF1 ZSBzbywgaW50IGl0ZW1JbmRleCwKK19oYXNoX3NhdmVpdGVtKEluZGV4U2NhbkJhdGNoIGJhdGNo LCBpbnQgaXRlbUluZGV4LAogCQkJICAgT2Zmc2V0TnVtYmVyIG9mZm51bSwgSW5kZXhUdXBsZSBp dHVwKQogewotCUhhc2hTY2FuUG9zSXRlbSAqY3Vyckl0ZW0gPSAmc28tPmN1cnJQb3MuaXRlbXNb aXRlbUluZGV4XTsKKwlCYXRjaE1hdGNoaW5nSXRlbSAqY3Vyckl0ZW0gPSAmYmF0Y2gtPml0ZW1z W2l0ZW1JbmRleF07CiAKIAljdXJySXRlbS0+aGVhcFRpZCA9IGl0dXAtPnRfdGlkOwogCWN1cnJJ dGVtLT5pbmRleE9mZnNldCA9IG9mZm51bTsKKwljdXJySXRlbS0+dHVwbGVPZmZzZXQgPSAwOwor CWN1cnJJdGVtLT5jaGVja2VkVmlzaWJsZSA9IGZhbHNlOworCWN1cnJJdGVtLT5hbGxWaXNpYmxl ID0gZmFsc2U7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNodXRp bC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHV0aWwuYwppbmRleCBjZjdmMGI5MDEu LjJjMTc1OTE3YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHV0aWwu YworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNodXRpbC5jCkBAIC0zMyw3ICszMyw3 IEBAIF9oYXNoX2NoZWNrcXVhbChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4VHVwbGUgaXR1cCkK IAkvKgogCSAqIEN1cnJlbnRseSwgd2UgY2FuJ3QgY2hlY2sgYW55IG9mIHRoZSBzY2FuIGNvbmRp dGlvbnMgc2luY2Ugd2UgZG8gbm90CiAJICogaGF2ZSB0aGUgb3JpZ2luYWwgaW5kZXggZW50cnkg dmFsdWUgdG8gc3VwcGx5IHRvIHRoZSBza19mdW5jLiBBbHdheXMKLQkgKiByZXR1cm4gdHJ1ZTsg d2UgZXhwZWN0IHRoYXQgaGFzaGdldHR1cGxlIGFscmVhZHkgc2V0IHRoZSByZWNoZWNrIGZsYWcK KwkgKiByZXR1cm4gdHJ1ZTsgd2UgZXhwZWN0IHRoYXQgaGFzaGdldGJhdGNoIGFscmVhZHkgc2V0 IHRoZSByZWNoZWNrIGZsYWcKIAkgKiB0byBtYWtlIHRoZSBtYWluIGluZGV4c2NhbiBjb2RlIGRv IGl0LgogCSAqLwogI2lmZGVmIE5PVF9VU0VECkBAIC01MTAsODEgKzUxMCw1OSBAQCBfaGFzaF9n ZXRfbmV3YnVja2V0X2Zyb21fb2xkYnVja2V0KFJlbGF0aW9uIHJlbCwgQnVja2V0IG9sZF9idWNr ZXQsCiAgKiBfaGFzaF9raWxsX2l0ZW1zIC0gc2V0IExQX0RFQUQgc3RhdGUgZm9yIGl0ZW1zIGFu IGluZGV4c2NhbiBjYWxsZXIgaGFzCiAgKiB0b2xkIHVzIHdlcmUga2lsbGVkLgogICoKLSAqIHNj YW4tPm9wYXF1ZSwgcmVmZXJlbmNlZCBsb2NhbGx5IHRocm91Z2ggc28sIGNvbnRhaW5zIGluZm9y bWF0aW9uIGFib3V0IHRoZQotICogY3VycmVudCBwYWdlIGFuZCBraWxsZWQgdHVwbGVzIHRoZXJl b24gKGdlbmVyYWxseSwgdGhpcyBzaG91bGQgb25seSBiZQotICogY2FsbGVkIGlmIHNvLT5udW1L aWxsZWQgPiAwKS4KKyAqIFRoZSBiYXRjaCBwYXJhbWV0ZXIgY29udGFpbnMgaW5mb3JtYXRpb24g YWJvdXQgdGhlIGN1cnJlbnQgcGFnZSBhbmQga2lsbGVkCisgKiB0dXBsZXMgdGhlcmVvbiAodGhp cyBzaG91bGQgb25seSBiZSBjYWxsZWQgaWYgYmF0Y2gtPm51bUtpbGxlZCA+IDApLgogICoKLSAq IFRoZSBjYWxsZXIgZG9lcyBub3QgaGF2ZSBhIGxvY2sgb24gdGhlIHBhZ2UgYW5kIG1heSBvciBt YXkgbm90IGhhdmUgdGhlCi0gKiBwYWdlIHBpbm5lZCBpbiBhIGJ1ZmZlci4gIE5vdGUgdGhhdCBy ZWFkLWxvY2sgaXMgc3VmZmljaWVudCBmb3Igc2V0dGluZwotICogTFBfREVBRCBzdGF0dXMgKHdo aWNoIGlzIG9ubHkgYSBoaW50KS4KKyAqIENhbGxlciBzaG91bGQgbm90IGhhdmUgYSBsb2NrIG9u IHRoZSBiYXRjaCBwb3NpdGlvbidzIHBhZ2UuICBXaGVuIHdlCisgKiByZXR1cm4sIGl0IHN0aWxs IHdvbid0IGJlIGxvY2tlZC4gIEl0J2xsIGNvbnRpbnVlIHRvIGhvbGQgd2hhdGV2ZXIgcGlucwor ICogd2VyZSBoZWxkIGJlZm9yZSBjYWxsaW5nIGhlcmUuCiAgKgotICogVGhlIGNhbGxlciBtdXN0 IGhhdmUgcGluIG9uIGJ1Y2tldCBidWZmZXIsIGJ1dCBtYXkgb3IgbWF5IG5vdCBoYXZlIHBpbgot ICogb24gb3ZlcmZsb3cgYnVmZmVyLCBhcyBpbmRpY2F0ZWQgYnkgSGFzaFNjYW5Qb3NJc1Bpbm5l ZChzby0+Y3VyclBvcykuCi0gKgotICogV2UgbWF0Y2ggaXRlbXMgYnkgaGVhcCBUSUQgYmVmb3Jl IGFzc3VtaW5nIHRoZXkgYXJlIHRoZSByaWdodCBvbmVzIHRvCi0gKiBkZWxldGUuCi0gKgotICog VGhlcmUgYXJlIG5ldmVyIGFueSBzY2FucyBhY3RpdmUgaW4gYSBidWNrZXQgYXQgdGhlIHRpbWUg VkFDVVVNIGJlZ2lucywKLSAqIGJlY2F1c2UgVkFDVVVNIHRha2VzIGEgY2xlYW51cCBsb2NrIG9u IHRoZSBwcmltYXJ5IGJ1Y2tldCBwYWdlIGFuZCBzY2FucwotICogaG9sZCBhIHBpbi4gIEEgc2Nh biBjYW4gYmVnaW4gYWZ0ZXIgVkFDVVVNIGxlYXZlcyB0aGUgcHJpbWFyeSBidWNrZXQgcGFnZQot ICogYnV0IGJlZm9yZSBpdCBmaW5pc2hlcyB0aGUgZW50aXJlIGJ1Y2tldCwgYnV0IGl0IGNhbiBu ZXZlciBwYXNzIFZBQ1VVTSwKLSAqIGJlY2F1c2UgVkFDVVVNIGFsd2F5cyBsb2NrcyB0aGUgbmV4 dCBwYWdlIGJlZm9yZSByZWxlYXNpbmcgdGhlIGxvY2sgb24KLSAqIHRoZSBwcmV2aW91cyBvbmUu ICBUaGVyZWZvcmUsIHdlIGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgYWNjaWRlbnRhbGx5Ci0g KiBraWxsaW5nIGEgVElEIHRoYXQgaGFzIGJlZW4gcmV1c2VkIGZvciBhbiB1bnJlbGF0ZWQgdHVw bGUuCisgKiBXZSBtYXRjaCBpdGVtcyBieSBoZWFwIFRJRCBiZWZvcmUgYXNzdW1pbmcgdGhleSBh cmUgdGhlIHJpZ2h0IG9uZXMgdG8gc2V0CisgKiBMUF9ERUFELiAgV2UgbXVzdCBjb25kaXRpb24g c2V0dGluZyBMUF9ERUFEIGJpdHMgb24gdGhlIHBhZ2UgTFNOIGhhdmluZyBub3QKKyAqIGNoYW5n ZWQgc2luY2UgYmFjayB3aGVuIF9oYXNoX3JlYWRwYWdlIHNhdyB0aGUgcGFnZS4gIFdlIHRvdGFs bHkgZ2l2ZSB1cCBvbgorICogc2V0dGluZyBMUF9ERUFEIGJpdHMgd2hlbiB0aGUgcGFnZSBMU04g Y2hhbmdlZC4KICAqLwogdm9pZAotX2hhc2hfa2lsbF9pdGVtcyhJbmRleFNjYW5EZXNjIHNjYW4p CitfaGFzaF9raWxsX2l0ZW1zKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0 Y2gpCiB7Ci0JSGFzaFNjYW5PcGFxdWUgc28gPSAoSGFzaFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1 ZTsKIAlSZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOwotCUJsb2NrTnVtYmVyIGJs a25vOwogCUJ1ZmZlcgkJYnVmOwogCVBhZ2UJCXBhZ2U7CiAJSGFzaFBhZ2VPcGFxdWUgb3BhcXVl OwogCU9mZnNldE51bWJlciBvZmZudW0sCiAJCQkJbWF4b2ZmOwotCWludAkJCW51bUtpbGxlZCA9 IHNvLT5udW1LaWxsZWQ7Ci0JaW50CQkJaTsKIAlib29sCQlraWxsZWRzb21ldGhpbmcgPSBmYWxz ZTsKLQlib29sCQloYXZlUGluID0gZmFsc2U7CisJWExvZ1JlY1B0cglsYXRlc3Rsc247CiAKLQlB c3NlcnQoc28tPm51bUtpbGxlZCA+IDApOwotCUFzc2VydChzby0+a2lsbGVkSXRlbXMgIT0gTlVM TCk7Ci0JQXNzZXJ0KEhhc2hTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpOworCUFzc2VydChi YXRjaC0+bnVtS2lsbGVkID4gMCk7CisJQXNzZXJ0KEJsb2NrTnVtYmVySXNWYWxpZChiYXRjaC0+ Y3VyclBhZ2UpKTsKIAotCS8qCi0JICogQWx3YXlzIHJlc2V0IHRoZSBzY2FuIHN0YXRlLCBzbyB3 ZSBkb24ndCBsb29rIGZvciBzYW1lIGl0ZW1zIG9uIG90aGVyCi0JICogcGFnZXMuCi0JICovCi0J c28tPm51bUtpbGxlZCA9IDA7CisJYnVmID0gX2hhc2hfZ2V0YnVmKHJlbCwgYmF0Y2gtPmN1cnJQ YWdlLCBIQVNIX1JFQUQsCisJCQkJCSAgIExIX0JVQ0tFVF9QQUdFIHwgTEhfT1ZFUkZMT1dfUEFH RSk7CiAKLQlibGtubyA9IHNvLT5jdXJyUG9zLmN1cnJQYWdlOwotCWlmIChIYXNoU2NhblBvc0lz UGlubmVkKHNvLT5jdXJyUG9zKSkKKwlsYXRlc3Rsc24gPSBCdWZmZXJHZXRMU05BdG9taWMoYnVm KTsKKwlBc3NlcnQoYmF0Y2gtPmxzbiA8PSBsYXRlc3Rsc24pOworCWlmIChiYXRjaC0+bHNuICE9 IGxhdGVzdGxzbikKIAl7Ci0JCS8qCi0JCSAqIFdlIGFscmVhZHkgaGF2ZSBwaW4gb24gdGhpcyBi dWZmZXIsIHNvLCBhbGwgd2UgbmVlZCB0byBkbyBpcwotCQkgKiBhY3F1aXJlIGxvY2sgb24gaXQu Ci0JCSAqLwotCQloYXZlUGluID0gdHJ1ZTsKLQkJYnVmID0gc28tPmN1cnJQb3MuYnVmOwotCQlM b2NrQnVmZmVyKGJ1ZiwgQlVGRkVSX0xPQ0tfU0hBUkUpOworCQkvKiBNb2RpZmllZCwgZ2l2ZSB1 cCBvbiBoaW50aW5nICovCisJCV9oYXNoX3JlbGJ1ZihyZWwsIGJ1Zik7CisJCXJldHVybjsKIAl9 Ci0JZWxzZQotCQlidWYgPSBfaGFzaF9nZXRidWYocmVsLCBibGtubywgSEFTSF9SRUFELCBMSF9P VkVSRkxPV19QQUdFKTsKIAogCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGJ1Zik7CiAJb3BhcXVlID0g SGFzaFBhZ2VHZXRPcGFxdWUocGFnZSk7CiAJbWF4b2ZmID0gUGFnZUdldE1heE9mZnNldE51bWJl cihwYWdlKTsKIAotCWZvciAoaSA9IDA7IGkgPCBudW1LaWxsZWQ7IGkrKykKKwkvKiBJdGVyYXRl IHRocm91Z2ggYmF0Y2gtPmtpbGxlZEl0ZW1zW10gaW4gaW5kZXggcGFnZSBvcmRlciAqLworCWZv ciAoaW50IGkgPSAwOyBpIDwgYmF0Y2gtPm51bUtpbGxlZDsgaSsrKQogCXsKLQkJaW50CQkJaXRl bUluZGV4ID0gc28tPmtpbGxlZEl0ZW1zW2ldOwotCQlIYXNoU2NhblBvc0l0ZW0gKmN1cnJJdGVt ID0gJnNvLT5jdXJyUG9zLml0ZW1zW2l0ZW1JbmRleF07CisJCWludAkJCWl0ZW1JbmRleCA9IGJh dGNoLT5raWxsZWRJdGVtc1tpXTsKKwkJQmF0Y2hNYXRjaGluZ0l0ZW0gKmN1cnJJdGVtID0gJmJh dGNoLT5pdGVtc1tpdGVtSW5kZXhdOwogCiAJCW9mZm51bSA9IGN1cnJJdGVtLT5pbmRleE9mZnNl dDsKIAotCQlBc3NlcnQoaXRlbUluZGV4ID49IHNvLT5jdXJyUG9zLmZpcnN0SXRlbSAmJgotCQkJ ICAgaXRlbUluZGV4IDw9IHNvLT5jdXJyUG9zLmxhc3RJdGVtKTsKKwkJQXNzZXJ0KGl0ZW1JbmRl eCA+PSBiYXRjaC0+Zmlyc3RJdGVtICYmCisJCQkgICBpdGVtSW5kZXggPD0gYmF0Y2gtPmxhc3RJ dGVtKTsKIAogCQl3aGlsZSAob2ZmbnVtIDw9IG1heG9mZikKIAkJewpAQCAtNTk0LDYgKzU3Miw3 IEBAIF9oYXNoX2tpbGxfaXRlbXMoSW5kZXhTY2FuRGVzYyBzY2FuKQogCQkJaWYgKEl0ZW1Qb2lu dGVyRXF1YWxzKCZpdHVwbGUtPnRfdGlkLCAmY3Vyckl0ZW0tPmhlYXBUaWQpKQogCQkJewogCQkJ CS8qIGZvdW5kIHRoZSBpdGVtICovCisJCQkJQXNzZXJ0KCFjdXJySXRlbS0+YWxsVmlzaWJsZSk7 CiAJCQkJSXRlbUlkTWFya0RlYWQoaWlkKTsKIAkJCQlraWxsZWRzb21ldGhpbmcgPSB0cnVlOwog CQkJCWJyZWFrOwkJCS8qIG91dCBvZiBpbm5lciBzZWFyY2ggbG9vcCAqLwpAQCAtNjEzLDkgKzU5 Miw1IEBAIF9oYXNoX2tpbGxfaXRlbXMoSW5kZXhTY2FuRGVzYyBzY2FuKQogCQlNYXJrQnVmZmVy RGlydHlIaW50KGJ1ZiwgdHJ1ZSk7CiAJfQogCi0JaWYgKHNvLT5oYXNoc29fYnVja2V0X2J1ZiA9 PSBzby0+Y3VyclBvcy5idWYgfHwKLQkJaGF2ZVBpbikKLQkJTG9ja0J1ZmZlcihzby0+Y3VyclBv cy5idWYsIEJVRkZFUl9MT0NLX1VOTE9DSyk7Ci0JZWxzZQotCQlfaGFzaF9yZWxidWYocmVsLCBi dWYpOworCV9oYXNoX3JlbGJ1ZihyZWwsIGJ1Zik7CiB9CmRpZmYgLS1naXQgYS9zcmMvdG9vbHMv cGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0 CmluZGV4IDZlNGU0NGE0OS4uY2VmYzFiMzEwIDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRl bnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApA QCAtMTIwMSw4ICsxMjAxLDYgQEAgSGFzaFBhZ2VTdGF0CiBIYXNoUGF0aAogSGFzaFNjYW5PcGFx dWUKIEhhc2hTY2FuT3BhcXVlRGF0YQotSGFzaFNjYW5Qb3NEYXRhCi1IYXNoU2NhblBvc0l0ZW0K IEhhc2hTa2V3QnVja2V0CiBIYXNoU3RhdGUKIEhhc2hWYWx1ZUZ1bmMKLS0gCjIuNTEuMAoK --0000000000007589150649a4074c Content-Type: application/octet-stream; name="v9-0009-Add-fake-LSN-support-to-hash-index-AM.patch" Content-Disposition: attachment; filename="v9-0009-Add-fake-LSN-support-to-hash-index-AM.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ml1k3l3a2 RnJvbSBjMDY2NGI1OWY0ODgxYTU2YjI5Y2U2M2JiMTg5YTFmMDYwMGRjN2Q3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFN1 biwgMTggSmFuIDIwMjYgMTE6MzI6NTIgLTA1MDAKU3ViamVjdDogW1BBVENIIHY5IDA5LzEwXSBB ZGQgZmFrZSBMU04gc3VwcG9ydCB0byBoYXNoIGluZGV4IEFNLgoKVGhpcyBpcyBwcmVwYXJhdGlv biBmb3IgYW4gdXBjb21pbmcgcGF0Y2ggdGhhdCB3aWxsIGFkZCB0aGUgYW1nZXRiYXRjaAppbnRl cmZhY2UgYW5kIHN3aXRjaCBoYXNoIG92ZXIgdG8gaXQgKGZyb20gYW1nZXR0dXBsZSkuICBXZSBu ZWVkIGZha2UKTFNOcyB0byBtYWtlIGl0IHNhZmUgdG8gYXBwbHkgYmVoYXZpb3IgdGhhdCBpcyBl cXVpdmFsZW50IHRvIG5idHJlZSdzCnByZXZpb3VzIGRyb3BQaW4gYmVoYXZpb3IgdGhhdCB3b3Jr cyB3aXRoIHVubG9nZ2VkIGhhc2ggaW5kZXggc2NhbnMuCgpUaGUgY29tbWl0IHRoYXQgd2lsbCBh ZGQgaGFzaGdldGJhdGNoIG1ha2VzIHRoZSByZXF1aXJlZCBjaGFuZ2VzIHRvCl9oYXNoX2tpbGxf aXRlbXMgdGhhdCBhY3R1YWxseSByZWxpZXMgb24gaGFzaCBnZW5lcmF0aW5nIGZha2UgTFNOcy4K CkF1dGhvcjogUGV0ZXIgR2VvZ2hlZ2FuIDxwZ0Bib3d0LmllPgpEaXNjdXNzaW9uOiBodHRwczov L3Bvc3Rnci5lcy9tL0NBSDItV3prZWh1aHh5dUE4cXVjN3JSTjNFdE5YcGlLc2pQZk84bWhiKzBE cjJLMER0Z0BtYWlsLmdtYWlsLmNvbQotLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2gu YyAgICAgICB8ICAyMSArKystLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaGluc2VydC5j IHwgIDIwICsrKy0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNob3ZmbC5jICAgfCAxMTEg KysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNo cGFnZS5jICAgfCAgMjIgKysrLS0tCiA0IGZpbGVzIGNoYW5nZWQsIDEwNSBpbnNlcnRpb25zKCsp LCA2OSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9o YXNoLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMKaW5kZXggNmEyMGI2N2Y2Li5k NzQyZGFiY2QgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2guYworKysg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMKQEAgLTQ3Niw2ICs0NzYsNyBAQCBoYXNo YnVsa2RlbGV0ZShJbmRleFZhY3V1bUluZm8gKmluZm8sIEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAq c3RhdHMsCiAJQnVmZmVyCQltZXRhYnVmID0gSW52YWxpZEJ1ZmZlcjsKIAlIYXNoTWV0YVBhZ2Ug bWV0YXA7CiAJSGFzaE1ldGFQYWdlIGNhY2hlZG1ldGFwOworCVhMb2dSZWNQdHIJcmVjcHRyOwog CiAJdHVwbGVzX3JlbW92ZWQgPSAwOwogCW51bV9pbmRleF90dXBsZXMgPSAwOwpAQCAtNjE1LDcg KzYxNiw2IEBAIGxvb3BfdG9wOgogCWlmIChSZWxhdGlvbk5lZWRzV0FMKHJlbCkpCiAJewogCQl4 bF9oYXNoX3VwZGF0ZV9tZXRhX3BhZ2UgeGxyZWM7Ci0JCVhMb2dSZWNQdHIJcmVjcHRyOwogCiAJ CXhscmVjLm50dXBsZXMgPSBtZXRhcC0+aGFzaG1fbnR1cGxlczsKIApAQCAtNjI1LDggKzYyNSwx MSBAQCBsb29wX3RvcDoKIAkJWExvZ1JlZ2lzdGVyQnVmZmVyKDAsIG1ldGFidWYsIFJFR0JVRl9T VEFOREFSRCk7CiAKIAkJcmVjcHRyID0gWExvZ0luc2VydChSTV9IQVNIX0lELCBYTE9HX0hBU0hf VVBEQVRFX01FVEFfUEFHRSk7Ci0JCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShtZXRhYnVmKSwg cmVjcHRyKTsKIAl9CisJZWxzZQorCQlyZWNwdHIgPSBYTG9nR2V0RmFrZUxTTihyZWwpOworCisJ UGFnZVNldExTTihCdWZmZXJHZXRQYWdlKG1ldGFidWYpLCByZWNwdHIpOwogCiAJRU5EX0NSSVRf U0VDVElPTigpOwogCkBAIC02OTksNiArNzAyLDcgQEAgaGFzaGJ1Y2tldGNsZWFudXAoUmVsYXRp b24gcmVsLCBCdWNrZXQgY3VyX2J1Y2tldCwgQnVmZmVyIGJ1Y2tldF9idWYsCiAJQnVmZmVyCQli dWY7CiAJQnVja2V0CQluZXdfYnVja2V0IFBHX1VTRURfRk9SX0FTU0VSVFNfT05MWSA9IEludmFs aWRCdWNrZXQ7CiAJYm9vbAkJYnVja2V0X2RpcnR5ID0gZmFsc2U7CisJWExvZ1JlY1B0cglyZWNw dHI7CiAKIAlibGtubyA9IGJ1Y2tldF9ibGtubzsKIAlidWYgPSBidWNrZXRfYnVmOwpAQCAtODIx LDcgKzgyNSw2IEBAIGhhc2hidWNrZXRjbGVhbnVwKFJlbGF0aW9uIHJlbCwgQnVja2V0IGN1cl9i dWNrZXQsIEJ1ZmZlciBidWNrZXRfYnVmLAogCQkJaWYgKFJlbGF0aW9uTmVlZHNXQUwocmVsKSkK IAkJCXsKIAkJCQl4bF9oYXNoX2RlbGV0ZSB4bHJlYzsKLQkJCQlYTG9nUmVjUHRyCXJlY3B0cjsK IAogCQkJCXhscmVjLmNsZWFyX2RlYWRfbWFya2luZyA9IGNsZWFyX2RlYWRfbWFya2luZzsKIAkJ CQl4bHJlYy5pc19wcmltYXJ5X2J1Y2tldF9wYWdlID0gKGJ1ZiA9PSBidWNrZXRfYnVmKTsKQEAg LTg0Niw4ICs4NDksMTEgQEAgaGFzaGJ1Y2tldGNsZWFudXAoUmVsYXRpb24gcmVsLCBCdWNrZXQg Y3VyX2J1Y2tldCwgQnVmZmVyIGJ1Y2tldF9idWYsCiAJCQkJCQkJCQluZGVsZXRhYmxlICogc2l6 ZW9mKE9mZnNldE51bWJlcikpOwogCiAJCQkJcmVjcHRyID0gWExvZ0luc2VydChSTV9IQVNIX0lE LCBYTE9HX0hBU0hfREVMRVRFKTsKLQkJCQlQYWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2UoYnVmKSwg cmVjcHRyKTsKIAkJCX0KKwkJCWVsc2UKKwkJCQlyZWNwdHIgPSBYTG9nR2V0RmFrZUxTTihyZWwp OworCisJCQlQYWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2UoYnVmKSwgcmVjcHRyKTsKIAogCQkJRU5E X0NSSVRfU0VDVElPTigpOwogCQl9CkBAIC05MDYsMTQgKzkxMiwxNSBAQCBoYXNoYnVja2V0Y2xl YW51cChSZWxhdGlvbiByZWwsIEJ1Y2tldCBjdXJfYnVja2V0LCBCdWZmZXIgYnVja2V0X2J1ZiwK IAkJLyogWExPRyBzdHVmZiAqLwogCQlpZiAoUmVsYXRpb25OZWVkc1dBTChyZWwpKQogCQl7Ci0J CQlYTG9nUmVjUHRyCXJlY3B0cjsKLQogCQkJWExvZ0JlZ2luSW5zZXJ0KCk7CiAJCQlYTG9nUmVn aXN0ZXJCdWZmZXIoMCwgYnVja2V0X2J1ZiwgUkVHQlVGX1NUQU5EQVJEKTsKIAogCQkJcmVjcHRy ID0gWExvZ0luc2VydChSTV9IQVNIX0lELCBYTE9HX0hBU0hfU1BMSVRfQ0xFQU5VUCk7Ci0JCQlQ YWdlU2V0TFNOKHBhZ2UsIHJlY3B0cik7CiAJCX0KKwkJZWxzZQorCQkJcmVjcHRyID0gWExvZ0dl dEZha2VMU04ocmVsKTsKKworCQlQYWdlU2V0TFNOKHBhZ2UsIHJlY3B0cik7CiAKIAkJRU5EX0NS SVRfU0VDVElPTigpOwogCX0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hh c2hpbnNlcnQuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hpbnNlcnQuYwppbmRleCAw Y2VmYmFjYzkuLjMzOTViYmMxMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gv aGFzaGluc2VydC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hpbnNlcnQuYwpA QCAtNTAsNiArNTAsNyBAQCBfaGFzaF9kb2luc2VydChSZWxhdGlvbiByZWwsIEluZGV4VHVwbGUg aXR1cCwgUmVsYXRpb24gaGVhcFJlbCwgYm9vbCBzb3J0ZWQpCiAJdWludDMyCQloYXNoa2V5Owog CUJ1Y2tldAkJYnVja2V0OwogCU9mZnNldE51bWJlciBpdHVwX29mZjsKKwlYTG9nUmVjUHRyCXJl Y3B0cjsKIAogCS8qCiAJICogR2V0IHRoZSBoYXNoIGtleSBmb3IgdGhlIGl0ZW0gKGl0J3Mgc3Rv cmVkIGluIHRoZSBpbmRleCB0dXBsZSBpdHNlbGYpLgpAQCAtMjE2LDcgKzIxNyw2IEBAIHJlc3Rh cnRfaW5zZXJ0OgogCWlmIChSZWxhdGlvbk5lZWRzV0FMKHJlbCkpCiAJewogCQl4bF9oYXNoX2lu c2VydCB4bHJlYzsKLQkJWExvZ1JlY1B0cglyZWNwdHI7CiAKIAkJeGxyZWMub2ZmbnVtID0gaXR1 cF9vZmY7CiAKQEAgLTIyOSwxMCArMjI5LDEyIEBAIHJlc3RhcnRfaW5zZXJ0OgogCQlYTG9nUmVn aXN0ZXJCdWZEYXRhKDAsIGl0dXAsIEluZGV4VHVwbGVTaXplKGl0dXApKTsKIAogCQlyZWNwdHIg PSBYTG9nSW5zZXJ0KFJNX0hBU0hfSUQsIFhMT0dfSEFTSF9JTlNFUlQpOwotCi0JCVBhZ2VTZXRM U04oQnVmZmVyR2V0UGFnZShidWYpLCByZWNwdHIpOwotCQlQYWdlU2V0TFNOKEJ1ZmZlckdldFBh Z2UobWV0YWJ1ZiksIHJlY3B0cik7CiAJfQorCWVsc2UKKwkJcmVjcHRyID0gWExvZ0dldEZha2VM U04ocmVsKTsKKworCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShidWYpLCByZWNwdHIpOworCVBh Z2VTZXRMU04oQnVmZmVyR2V0UGFnZShtZXRhYnVmKSwgcmVjcHRyKTsKIAogCUVORF9DUklUX1NF Q1RJT04oKTsKIApAQCAtMzcyLDYgKzM3NCw3IEBAIF9oYXNoX3ZhY3V1bV9vbmVfcGFnZShSZWxh dGlvbiByZWwsIFJlbGF0aW9uIGhyZWwsIEJ1ZmZlciBtZXRhYnVmLCBCdWZmZXIgYnVmKQogCVBh Z2UJCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGJ1Zik7CiAJSGFzaFBhZ2VPcGFxdWUgcGFnZW9wYXF1 ZTsKIAlIYXNoTWV0YVBhZ2UgbWV0YXA7CisJWExvZ1JlY1B0cglyZWNwdHI7CiAKIAkvKiBTY2Fu IGVhY2ggdHVwbGUgaW4gcGFnZSB0byBzZWUgaWYgaXQgaXMgbWFya2VkIGFzIExQX0RFQUQgKi8K IAltYXhvZmYgPSBQYWdlR2V0TWF4T2Zmc2V0TnVtYmVyKHBhZ2UpOwpAQCAtNDI0LDcgKzQyNyw2 IEBAIF9oYXNoX3ZhY3V1bV9vbmVfcGFnZShSZWxhdGlvbiByZWwsIFJlbGF0aW9uIGhyZWwsIEJ1 ZmZlciBtZXRhYnVmLCBCdWZmZXIgYnVmKQogCQlpZiAoUmVsYXRpb25OZWVkc1dBTChyZWwpKQog CQl7CiAJCQl4bF9oYXNoX3ZhY3V1bV9vbmVfcGFnZSB4bHJlYzsKLQkJCVhMb2dSZWNQdHIJcmVj cHRyOwogCiAJCQl4bHJlYy5pc0NhdGFsb2dSZWwgPSBSZWxhdGlvbklzQWNjZXNzaWJsZUluTG9n aWNhbERlY29kaW5nKGhyZWwpOwogCQkJeGxyZWMuc25hcHNob3RDb25mbGljdEhvcml6b24gPSBz bmFwc2hvdENvbmZsaWN0SG9yaXpvbjsKQEAgLTQ0NSwxMCArNDQ3LDEyIEBAIF9oYXNoX3ZhY3V1 bV9vbmVfcGFnZShSZWxhdGlvbiByZWwsIFJlbGF0aW9uIGhyZWwsIEJ1ZmZlciBtZXRhYnVmLCBC dWZmZXIgYnVmKQogCQkJWExvZ1JlZ2lzdGVyQnVmZmVyKDEsIG1ldGFidWYsIFJFR0JVRl9TVEFO REFSRCk7CiAKIAkJCXJlY3B0ciA9IFhMb2dJbnNlcnQoUk1fSEFTSF9JRCwgWExPR19IQVNIX1ZB Q1VVTV9PTkVfUEFHRSk7Ci0KLQkJCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShidWYpLCByZWNw dHIpOwotCQkJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKG1ldGFidWYpLCByZWNwdHIpOwogCQl9 CisJCWVsc2UKKwkJCXJlY3B0ciA9IFhMb2dHZXRGYWtlTFNOKHJlbCk7CisKKwkJUGFnZVNldExT TihCdWZmZXJHZXRQYWdlKGJ1ZiksIHJlY3B0cik7CisJCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFn ZShtZXRhYnVmKSwgcmVjcHRyKTsKIAogCQlFTkRfQ1JJVF9TRUNUSU9OKCk7CiAKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hvdmZsLmMgYi9zcmMvYmFja2VuZC9hY2Nl c3MvaGFzaC9oYXNob3ZmbC5jCmluZGV4IDhjZmI2Y2U3NS4uYWJkMWY5MWZhIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNob3ZmbC5jCisrKyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9oYXNoL2hhc2hvdmZsLmMKQEAgLTEzMiw2ICsxMzIsNyBAQCBfaGFzaF9hZGRvdmZscGFn ZShSZWxhdGlvbiByZWwsIEJ1ZmZlciBtZXRhYnVmLCBCdWZmZXIgYnVmLCBib29sIHJldGFpbl9w aW4pCiAJdWludDMyCQlpLAogCQkJCWo7CiAJYm9vbAkJcGFnZV9mb3VuZCA9IGZhbHNlOworCVhM b2dSZWNQdHIJcmVjcHRyOwogCiAJLyoKIAkgKiBXcml0ZS1sb2NrIHRoZSB0YWlsIHBhZ2UuICBI ZXJlLCB3ZSBuZWVkIHRvIG1haW50YWluIGxvY2tpbmcgb3JkZXIgc3VjaApAQCAtMzgxLDcgKzM4 Miw2IEBAIGZvdW5kOgogCS8qIFhMT0cgc3R1ZmYgKi8KIAlpZiAoUmVsYXRpb25OZWVkc1dBTChy ZWwpKQogCXsKLQkJWExvZ1JlY1B0cglyZWNwdHI7CiAJCXhsX2hhc2hfYWRkX292ZmxfcGFnZSB4 bHJlYzsKIAogCQl4bHJlYy5ibXBhZ2VfZm91bmQgPSBwYWdlX2ZvdW5kOwpAQCAtNDA4LDE4ICs0 MDgsMjAgQEAgZm91bmQ6CiAJCVhMb2dSZWdpc3RlckJ1ZkRhdGEoNCwgJm1ldGFwLT5oYXNobV9m aXJzdGZyZWUsIHNpemVvZih1aW50MzIpKTsKIAogCQlyZWNwdHIgPSBYTG9nSW5zZXJ0KFJNX0hB U0hfSUQsIFhMT0dfSEFTSF9BRERfT1ZGTF9QQUdFKTsKLQotCQlQYWdlU2V0TFNOKEJ1ZmZlckdl dFBhZ2Uob3ZmbGJ1ZiksIHJlY3B0cik7Ci0JCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShidWYp LCByZWNwdHIpOwotCi0JCWlmIChCdWZmZXJJc1ZhbGlkKG1hcGJ1ZikpCi0JCQlQYWdlU2V0TFNO KEJ1ZmZlckdldFBhZ2UobWFwYnVmKSwgcmVjcHRyKTsKLQotCQlpZiAoQnVmZmVySXNWYWxpZChu ZXdtYXBidWYpKQotCQkJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKG5ld21hcGJ1ZiksIHJlY3B0 cik7Ci0KLQkJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKG1ldGFidWYpLCByZWNwdHIpOwogCX0K KwllbHNlCisJCXJlY3B0ciA9IFhMb2dHZXRGYWtlTFNOKHJlbCk7CisKKwlQYWdlU2V0TFNOKEJ1 ZmZlckdldFBhZ2Uob3ZmbGJ1ZiksIHJlY3B0cik7CisJUGFnZVNldExTTihCdWZmZXJHZXRQYWdl KGJ1ZiksIHJlY3B0cik7CisKKwlpZiAoQnVmZmVySXNWYWxpZChtYXBidWYpKQorCQlQYWdlU2V0 TFNOKEJ1ZmZlckdldFBhZ2UobWFwYnVmKSwgcmVjcHRyKTsKKworCWlmIChCdWZmZXJJc1ZhbGlk KG5ld21hcGJ1ZikpCisJCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShuZXdtYXBidWYpLCByZWNw dHIpOworCisJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKG1ldGFidWYpLCByZWNwdHIpOwogCiAJ RU5EX0NSSVRfU0VDVElPTigpOwogCkBAIC01MTAsNyArNTEyLDExIEBAIF9oYXNoX2ZyZWVvdmZs cGFnZShSZWxhdGlvbiByZWwsIEJ1ZmZlciBidWNrZXRidWYsIEJ1ZmZlciBvdmZsYnVmLAogCUJ1 Y2tldAkJYnVja2V0IFBHX1VTRURfRk9SX0FTU0VSVFNfT05MWTsKIAlCdWZmZXIJCXByZXZidWYg PSBJbnZhbGlkQnVmZmVyOwogCUJ1ZmZlcgkJbmV4dGJ1ZiA9IEludmFsaWRCdWZmZXI7Ci0JYm9v bAkJdXBkYXRlX21ldGFwID0gZmFsc2U7CisJYm9vbAkJdXBkYXRlX21ldGFwID0gZmFsc2UsCisJ CQkJbW9kX3didWYsCisJCQkJaXNfcHJpbV9idWNrZXRfc2FtZV93cnQsCisJCQkJaXNfcHJldl9i dWNrZXRfc2FtZV93cnQ7CisJWExvZ1JlY1B0cglyZWNwdHI7CiAKIAkvKiBHZXQgaW5mb3JtYXRp b24gZnJvbSB0aGUgZG9vbWVkIHBhZ2UgKi8KIAlfaGFzaF9jaGVja3BhZ2UocmVsLCBvdmZsYnVm LCBMSF9PVkVSRkxPV19QQUdFKTsKQEAgLTY0MSwxOSArNjQ3LDIxIEBAIF9oYXNoX2ZyZWVvdmZs cGFnZShSZWxhdGlvbiByZWwsIEJ1ZmZlciBidWNrZXRidWYsIEJ1ZmZlciBvdmZsYnVmLAogCQlN YXJrQnVmZmVyRGlydHkobWV0YWJ1Zik7CiAJfQogCisJLyogRGV0ZXJtaW5lIHdoaWNoIHBhZ2Vz IFdBTCByZWNvcmQgbW9kaWZpZXMgKi8KKwltb2Rfd2J1ZiA9IGZhbHNlOworCWlzX3ByaW1fYnVj a2V0X3NhbWVfd3J0ID0gKHdidWYgPT0gYnVja2V0YnVmKTsKKwlpc19wcmV2X2J1Y2tldF9zYW1l X3dydCA9ICh3YnVmID09IHByZXZidWYpOworCiAJLyogWExPRyBzdHVmZiAqLwogCWlmIChSZWxh dGlvbk5lZWRzV0FMKHJlbCkpCiAJewogCQl4bF9oYXNoX3NxdWVlemVfcGFnZSB4bHJlYzsKLQkJ WExvZ1JlY1B0cglyZWNwdHI7Ci0JCWludAkJCWk7Ci0JCWJvb2wJCW1vZF93YnVmID0gZmFsc2U7 CiAKIAkJeGxyZWMucHJldmJsa25vID0gcHJldmJsa25vOwogCQl4bHJlYy5uZXh0Ymxrbm8gPSBu ZXh0Ymxrbm87CiAJCXhscmVjLm50dXBzID0gbml0dXBzOwotCQl4bHJlYy5pc19wcmltX2J1Y2tl dF9zYW1lX3dydCA9ICh3YnVmID09IGJ1Y2tldGJ1Zik7Ci0JCXhscmVjLmlzX3ByZXZfYnVja2V0 X3NhbWVfd3J0ID0gKHdidWYgPT0gcHJldmJ1Zik7CisJCXhscmVjLmlzX3ByaW1fYnVja2V0X3Nh bWVfd3J0ID0gaXNfcHJpbV9idWNrZXRfc2FtZV93cnQ7CisJCXhscmVjLmlzX3ByZXZfYnVja2V0 X3NhbWVfd3J0ID0gaXNfcHJldl9idWNrZXRfc2FtZV93cnQ7CiAKIAkJWExvZ0JlZ2luSW5zZXJ0 KCk7CiAJCVhMb2dSZWdpc3RlckRhdGEoJnhscmVjLCBTaXplT2ZIYXNoU3F1ZWV6ZVBhZ2UpOwpA QCAtNjYyLDE0ICs2NzAsMTQgQEAgX2hhc2hfZnJlZW92ZmxwYWdlKFJlbGF0aW9uIHJlbCwgQnVm ZmVyIGJ1Y2tldGJ1ZiwgQnVmZmVyIG92ZmxidWYsCiAJCSAqIGJ1Y2tldCBidWZmZXIgd2FzIG5v dCBjaGFuZ2VkLCBidXQgc3RpbGwgbmVlZHMgdG8gYmUgcmVnaXN0ZXJlZCB0bwogCQkgKiBlbnN1 cmUgdGhhdCB3ZSBjYW4gYWNxdWlyZSBhIGNsZWFudXAgbG9jayBvbiBpdCBkdXJpbmcgcmVwbGF5 LgogCQkgKi8KLQkJaWYgKCF4bHJlYy5pc19wcmltX2J1Y2tldF9zYW1lX3dydCkKKwkJaWYgKCFp c19wcmltX2J1Y2tldF9zYW1lX3dydCkKIAkJewogCQkJdWludDgJCWZsYWdzID0gUkVHQlVGX1NU QU5EQVJEIHwgUkVHQlVGX05PX0lNQUdFIHwgUkVHQlVGX05PX0NIQU5HRTsKIAogCQkJWExvZ1Jl Z2lzdGVyQnVmZmVyKDAsIGJ1Y2tldGJ1ZiwgZmxhZ3MpOwogCQl9CiAKLQkJaWYgKHhscmVjLm50 dXBzID4gMCkKKwkJaWYgKG5pdHVwcyA+IDApCiAJCXsKIAkJCVhMb2dSZWdpc3RlckJ1ZmZlcigx LCB3YnVmLCBSRUdCVUZfU1RBTkRBUkQpOwogCkBAIC02NzgsMTAgKzY4NiwxMCBAQCBfaGFzaF9m cmVlb3ZmbHBhZ2UoUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVja2V0YnVmLCBCdWZmZXIgb3ZmbGJ1 ZiwKIAogCQkJWExvZ1JlZ2lzdGVyQnVmRGF0YSgxLCBpdHVwX29mZnNldHMsCiAJCQkJCQkJCW5p dHVwcyAqIHNpemVvZihPZmZzZXROdW1iZXIpKTsKLQkJCWZvciAoaSA9IDA7IGkgPCBuaXR1cHM7 IGkrKykKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgbml0dXBzOyBpKyspCiAJCQkJWExvZ1JlZ2lz dGVyQnVmRGF0YSgxLCBpdHVwc1tpXSwgdHVwc19zaXplW2ldKTsKIAkJfQotCQllbHNlIGlmICh4 bHJlYy5pc19wcmltX2J1Y2tldF9zYW1lX3dydCB8fCB4bHJlYy5pc19wcmV2X2J1Y2tldF9zYW1l X3dydCkKKwkJZWxzZSBpZiAoaXNfcHJpbV9idWNrZXRfc2FtZV93cnQgfHwgaXNfcHJldl9idWNr ZXRfc2FtZV93cnQpCiAJCXsKIAkJCXVpbnQ4CQl3YnVmX2ZsYWdzOwogCkBAIC02OTEsMTAgKzY5 OSwxMCBAQCBfaGFzaF9mcmVlb3ZmbHBhZ2UoUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVja2V0YnVm LCBCdWZmZXIgb3ZmbGJ1ZiwKIAkJCSAqIGlmIGl0IGlzIHRoZSBzYW1lIGFzIHByaW1hcnkgYnVj a2V0IGJ1ZmZlciBvciB1cGRhdGUgdGhlCiAJCQkgKiBuZXh0Ymxrbm8gaWYgaXQgaXMgc2FtZSBh cyB0aGUgcHJldmlvdXMgYnVja2V0IGJ1ZmZlci4KIAkJCSAqLwotCQkJQXNzZXJ0KHhscmVjLm50 dXBzID09IDApOworCQkJQXNzZXJ0KG5pdHVwcyA9PSAwKTsKIAogCQkJd2J1Zl9mbGFncyA9IFJF R0JVRl9TVEFOREFSRDsKLQkJCWlmICgheGxyZWMuaXNfcHJldl9idWNrZXRfc2FtZV93cnQpCisJ CQlpZiAoIWlzX3ByZXZfYnVja2V0X3NhbWVfd3J0KQogCQkJewogCQkJCXdidWZfZmxhZ3MgfD0g UkVHQlVGX05PX0NIQU5HRTsKIAkJCX0KQEAgLTcxNCw3ICs3MjIsNyBAQCBfaGFzaF9mcmVlb3Zm bHBhZ2UoUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVja2V0YnVmLCBCdWZmZXIgb3ZmbGJ1ZiwKIAkJ ICogcHJldnBhZ2UuICBEdXJpbmcgcmVwbGF5LCB3ZSBjYW4gZGlyZWN0bHkgdXBkYXRlIHRoZSBu ZXh0YmxvY2sgaW4KIAkJICogd3JpdGVwYWdlLgogCQkgKi8KLQkJaWYgKEJ1ZmZlcklzVmFsaWQo cHJldmJ1ZikgJiYgIXhscmVjLmlzX3ByZXZfYnVja2V0X3NhbWVfd3J0KQorCQlpZiAoQnVmZmVy SXNWYWxpZChwcmV2YnVmKSAmJiAhaXNfcHJldl9idWNrZXRfc2FtZV93cnQpCiAJCQlYTG9nUmVn aXN0ZXJCdWZmZXIoMywgcHJldmJ1ZiwgUkVHQlVGX1NUQU5EQVJEKTsKIAogCQlpZiAoQnVmZmVy SXNWYWxpZChuZXh0YnVmKSkKQEAgLTczMCwyMyArNzM4LDMzIEBAIF9oYXNoX2ZyZWVvdmZscGFn ZShSZWxhdGlvbiByZWwsIEJ1ZmZlciBidWNrZXRidWYsIEJ1ZmZlciBvdmZsYnVmLAogCQl9CiAK IAkJcmVjcHRyID0gWExvZ0luc2VydChSTV9IQVNIX0lELCBYTE9HX0hBU0hfU1FVRUVaRV9QQUdF KTsKLQotCQkvKiBTZXQgTFNOIGlmZiB3YnVmIGlzIG1vZGlmaWVkLiAqLwotCQlpZiAobW9kX3di dWYpCi0JCQlQYWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2Uod2J1ZiksIHJlY3B0cik7Ci0KLQkJUGFn ZVNldExTTihCdWZmZXJHZXRQYWdlKG92ZmxidWYpLCByZWNwdHIpOwotCi0JCWlmIChCdWZmZXJJ c1ZhbGlkKHByZXZidWYpICYmICF4bHJlYy5pc19wcmV2X2J1Y2tldF9zYW1lX3dydCkKLQkJCVBh Z2VTZXRMU04oQnVmZmVyR2V0UGFnZShwcmV2YnVmKSwgcmVjcHRyKTsKLQkJaWYgKEJ1ZmZlcklz VmFsaWQobmV4dGJ1ZikpCi0JCQlQYWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2UobmV4dGJ1ZiksIHJl Y3B0cik7Ci0KLQkJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKG1hcGJ1ZiksIHJlY3B0cik7Ci0K LQkJaWYgKHVwZGF0ZV9tZXRhcCkKLQkJCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShtZXRhYnVm KSwgcmVjcHRyKTsKIAl9CisJZWxzZQkJCQkJCS8qICFSZWxhdGlvbk5lZWRzV0FMKHJlbCkgKi8K Kwl7CisJCXJlY3B0ciA9IFhMb2dHZXRGYWtlTFNOKHJlbCk7CisKKwkJLyogRGV0ZXJtaW5lIGlm IHdidWYgaXMgbW9kaWZpZWQgKi8KKwkJaWYgKG5pdHVwcyA+IDApCisJCQltb2Rfd2J1ZiA9IHRy dWU7CisJCWVsc2UgaWYgKGlzX3ByZXZfYnVja2V0X3NhbWVfd3J0KQorCQkJbW9kX3didWYgPSB0 cnVlOworCX0KKworCS8qIFNldCBMU04gaWZmIHdidWYgaXMgbW9kaWZpZWQuICovCisJaWYgKG1v ZF93YnVmKQorCQlQYWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2Uod2J1ZiksIHJlY3B0cik7CisKKwlQ YWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2Uob3ZmbGJ1ZiksIHJlY3B0cik7CisKKwlpZiAoQnVmZmVy SXNWYWxpZChwcmV2YnVmKSAmJiAhaXNfcHJldl9idWNrZXRfc2FtZV93cnQpCisJCVBhZ2VTZXRM U04oQnVmZmVyR2V0UGFnZShwcmV2YnVmKSwgcmVjcHRyKTsKKwlpZiAoQnVmZmVySXNWYWxpZChu ZXh0YnVmKSkKKwkJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKG5leHRidWYpLCByZWNwdHIpOwor CisJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKG1hcGJ1ZiksIHJlY3B0cik7CisKKwlpZiAodXBk YXRlX21ldGFwKQorCQlQYWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2UobWV0YWJ1ZiksIHJlY3B0cik7 CiAKIAlFTkRfQ1JJVF9TRUNUSU9OKCk7CiAKQEAgLTk1OSw2ICs5NzcsOCBAQCByZWFkcGFnZToK IAogCQkJCWlmIChuaXR1cHMgPiAwKQogCQkJCXsKKwkJCQkJWExvZ1JlY1B0cglyZWNwdHI7CisK IAkJCQkJQXNzZXJ0KG5pdHVwcyA9PSBuZGVsZXRhYmxlKTsKIAogCQkJCQkvKgpAQCAtOTg2LDcg KzEwMDYsNiBAQCByZWFkcGFnZToKIAkJCQkJLyogWExPRyBzdHVmZiAqLwogCQkJCQlpZiAoUmVs YXRpb25OZWVkc1dBTChyZWwpKQogCQkJCQl7Ci0JCQkJCQlYTG9nUmVjUHRyCXJlY3B0cjsKIAkJ CQkJCXhsX2hhc2hfbW92ZV9wYWdlX2NvbnRlbnRzIHhscmVjOwogCiAJCQkJCQl4bHJlYy5udHVw cyA9IG5pdHVwczsKQEAgLTEwMTgsMTAgKzEwMzcsMTIgQEAgcmVhZHBhZ2U6CiAJCQkJCQkJCQkJ CW5kZWxldGFibGUgKiBzaXplb2YoT2Zmc2V0TnVtYmVyKSk7CiAKIAkJCQkJCXJlY3B0ciA9IFhM b2dJbnNlcnQoUk1fSEFTSF9JRCwgWExPR19IQVNIX01PVkVfUEFHRV9DT05URU5UUyk7Ci0KLQkJ CQkJCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZSh3YnVmKSwgcmVjcHRyKTsKLQkJCQkJCVBhZ2VT ZXRMU04oQnVmZmVyR2V0UGFnZShyYnVmKSwgcmVjcHRyKTsKIAkJCQkJfQorCQkJCQllbHNlCisJ CQkJCQlyZWNwdHIgPSBYTG9nR2V0RmFrZUxTTihyZWwpOworCisJCQkJCVBhZ2VTZXRMU04oQnVm ZmVyR2V0UGFnZSh3YnVmKSwgcmVjcHRyKTsKKwkJCQkJUGFnZVNldExTTihCdWZmZXJHZXRQYWdl KHJidWYpLCByZWNwdHIpOwogCiAJCQkJCUVORF9DUklUX1NFQ1RJT04oKTsKIApkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHBhZ2UuYyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9oYXNoL2hhc2hwYWdlLmMKaW5kZXggOGUyMjBhM2FlLi4yNjNiYzczZjEgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hwYWdlLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL2hhc2gvaGFzaHBhZ2UuYwpAQCAtNjMwLDYgKzYzMCw3IEBAIF9oYXNoX2V4cGFuZHRhYmxl KFJlbGF0aW9uIHJlbCwgQnVmZmVyIG1ldGFidWYpCiAJdWludDMyCQlsb3dtYXNrOwogCWJvb2wJ CW1ldGFwX3VwZGF0ZV9tYXNrcyA9IGZhbHNlOwogCWJvb2wJCW1ldGFwX3VwZGF0ZV9zcGxpdHBv aW50ID0gZmFsc2U7CisJWExvZ1JlY1B0cglyZWNwdHI7CiAKIHJlc3RhcnRfZXhwYW5kOgogCkBA IC05MDAsNyArOTAxLDYgQEAgcmVzdGFydF9leHBhbmQ6CiAJaWYgKFJlbGF0aW9uTmVlZHNXQUwo cmVsKSkKIAl7CiAJCXhsX2hhc2hfc3BsaXRfYWxsb2NhdGVfcGFnZSB4bHJlYzsKLQkJWExvZ1Jl Y1B0cglyZWNwdHI7CiAKIAkJeGxyZWMubmV3X2J1Y2tldCA9IG1heGJ1Y2tldDsKIAkJeGxyZWMu b2xkX2J1Y2tldF9mbGFnID0gb29wYXF1ZS0+aGFzaG9fZmxhZzsKQEAgLTkzMywxMSArOTMzLDEz IEBAIHJlc3RhcnRfZXhwYW5kOgogCQlYTG9nUmVnaXN0ZXJEYXRhKCZ4bHJlYywgU2l6ZU9mSGFz aFNwbGl0QWxsb2NQYWdlKTsKIAogCQlyZWNwdHIgPSBYTG9nSW5zZXJ0KFJNX0hBU0hfSUQsIFhM T0dfSEFTSF9TUExJVF9BTExPQ0FURV9QQUdFKTsKLQotCQlQYWdlU2V0TFNOKEJ1ZmZlckdldFBh Z2UoYnVmX29ibGtubyksIHJlY3B0cik7Ci0JCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShidWZf bmJsa25vKSwgcmVjcHRyKTsKLQkJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKG1ldGFidWYpLCBy ZWNwdHIpOwogCX0KKwllbHNlCisJCXJlY3B0ciA9IFhMb2dHZXRGYWtlTFNOKHJlbCk7CisKKwlQ YWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2UoYnVmX29ibGtubyksIHJlY3B0cik7CisJUGFnZVNldExT TihCdWZmZXJHZXRQYWdlKGJ1Zl9uYmxrbm8pLCByZWNwdHIpOworCVBhZ2VTZXRMU04oQnVmZmVy R2V0UGFnZShtZXRhYnVmKSwgcmVjcHRyKTsKIAogCUVORF9DUklUX1NFQ1RJT04oKTsKIApAQCAt MTA5Miw2ICsxMDk0LDcgQEAgX2hhc2hfc3BsaXRidWNrZXQoUmVsYXRpb24gcmVsLAogCVNpemUJ CWFsbF90dXBzX3NpemUgPSAwOwogCWludAkJCWk7CiAJdWludDE2CQluaXR1cHMgPSAwOworCVhM b2dSZWNQdHIJcmVjcHRyOwogCiAJYnVja2V0X29idWYgPSBvYnVmOwogCW9wYWdlID0gQnVmZmVy R2V0UGFnZShvYnVmKTsKQEAgLTEyOTYsNyArMTI5OSw2IEBAIF9oYXNoX3NwbGl0YnVja2V0KFJl bGF0aW9uIHJlbCwKIAogCWlmIChSZWxhdGlvbk5lZWRzV0FMKHJlbCkpCiAJewotCQlYTG9nUmVj UHRyCXJlY3B0cjsKIAkJeGxfaGFzaF9zcGxpdF9jb21wbGV0ZSB4bHJlYzsKIAogCQl4bHJlYy5v bGRfYnVja2V0X2ZsYWcgPSBvb3BhcXVlLT5oYXNob19mbGFnOwpAQCAtMTMxMCwxMCArMTMxMiwx MiBAQCBfaGFzaF9zcGxpdGJ1Y2tldChSZWxhdGlvbiByZWwsCiAJCVhMb2dSZWdpc3RlckJ1ZmZl cigxLCBidWNrZXRfbmJ1ZiwgUkVHQlVGX1NUQU5EQVJEKTsKIAogCQlyZWNwdHIgPSBYTG9nSW5z ZXJ0KFJNX0hBU0hfSUQsIFhMT0dfSEFTSF9TUExJVF9DT01QTEVURSk7Ci0KLQkJUGFnZVNldExT TihCdWZmZXJHZXRQYWdlKGJ1Y2tldF9vYnVmKSwgcmVjcHRyKTsKLQkJUGFnZVNldExTTihCdWZm ZXJHZXRQYWdlKGJ1Y2tldF9uYnVmKSwgcmVjcHRyKTsKIAl9CisJZWxzZQorCQlyZWNwdHIgPSBY TG9nR2V0RmFrZUxTTihyZWwpOworCisJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKGJ1Y2tldF9v YnVmKSwgcmVjcHRyKTsKKwlQYWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2UoYnVja2V0X25idWYpLCBy ZWNwdHIpOwogCiAJRU5EX0NSSVRfU0VDVElPTigpOwogCi0tIAoyLjUxLjAKCg== --0000000000007589150649a4074c Content-Type: application/octet-stream; name="v9-0001-Extract-fake-LSN-infrastructure-from-GiST-index-A.patch" Content-Disposition: attachment; filename="v9-0001-Extract-fake-LSN-infrastructure-from-GiST-index-A.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ml1k3l2i0 RnJvbSBjYzE1NzJlMmE0YmMyNjYyOTQ1ODViMDQxY2Y2YWI2ZmUxOGI5ZDdlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFN1 biwgMTggSmFuIDIwMjYgMTE6MTg6MTEgLTA1MDAKU3ViamVjdDogW1BBVENIIHY5IDAxLzEwXSBF eHRyYWN0IGZha2UgTFNOIGluZnJhc3RydWN0dXJlIGZyb20gR2lTVCBpbmRleCBBTS4KCkV4dHJh Y3QgdXRpbGl0eSBmdW5jdGlvbnMgdXNlZCBieSBHaVNUIHRvIGdlbmVyYXRlIGZha2UgTFNOcyBz byB0aGF0Cm90aGVyIGluZGV4IEFNcyBjYW4gcmV1c2UgdGhpcyBpbmZyYXN0cnVjdHVyZSB0byBn ZW5lcmF0ZSBmYWtlIExTTnMuCgpQcmVwYXJhdGlvbiBmb3IgYW4gdXBjb21pbmcgY29tbWl0IHRo YXQgd2lsbCBjaGFuZ2UgdGhlIHJ1bGVzIGFyb3VuZApob2xkaW5nIG9uIHRvIGJ1ZmZlciBwaW5z IG9uIGxlYWYgcGFnZXMgaW4gdW5sb2dnZWQgbmJ0cmVlIGluZGV4ZXMKKGFjdHVhbGx5LCBpbiBh bGwgY2FzZXMgYmFycmluZyBzY2FucyB0aGF0IHVzZSBhIG5vbi1NVkNDIHNuYXBzaG90KS4KVGhp cyBpcyB0aGUgcGF0Y2ggdGhhdCB3aWxsIGFkZCB0aGUgbmV3IGFtZ2V0YmF0Y2ggaW50ZXJmYWNl LiAgQW5vdGhlcgpwcmVwYXJhdG9yeSBjb21taXQgd2lsbCBhZGQgZmFrZSBMU04gc3VwcG9ydCB0 byBuYnRyZWUgYWhlYWQgb2YgdGhlCmFtZ2V0YmF0Y2ggY29tbWl0LgoKQnVtcCBYTE9HX1BBR0Vf TUFHSUMgZHVlIHRvIFhMT0dfR0lTVF9BU1NJR05fTFNOIGJlY29taW5nClhMT0dfQVNTSUdOX0xT Ti4KCkF1dGhvcjogUGV0ZXIgR2VvZ2hlZ2FuIDxwZ0Bib3d0LmllPgpEaXNjdXNzaW9uOiBodHRw czovL3Bvc3Rnci5lcy9tL0NBSDItV3prZWh1aHh5dUE4cXVjN3JSTjNFdE5YcGlLc2pQZk84bWhi KzBEcjJLMER0Z0BtYWlsLmdtYWlsLmNvbQotLS0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9naXN0X3By aXZhdGUuaCAgICAgICB8ICA0IC0tCiBzcmMvaW5jbHVkZS9hY2Nlc3MvZ2lzdHhsb2cuaCAgICAg ICAgICAgfCAgMiArLQogc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2cuaCAgICAgICAgICAgICAgIHwg IDEgKwogc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2dpbnNlcnQuaCAgICAgICAgIHwgIDIgKwogc3Jj L2luY2x1ZGUvY2F0YWxvZy9wZ19jb250cm9sLmggICAgICAgIHwgIDIgKy0KIHNyYy9iYWNrZW5k L2FjY2Vzcy9naXN0L2dpc3QuYyAgICAgICAgICB8ICA2ICstLQogc3JjL2JhY2tlbmQvYWNjZXNz L2dpc3QvZ2lzdHV0aWwuYyAgICAgIHwgNTAgLS0tLS0tLS0tLS0tLS0tLS0tLQogc3JjL2JhY2tl bmQvYWNjZXNzL2dpc3QvZ2lzdHZhY3V1bS5jICAgIHwgIDggKy0tCiBzcmMvYmFja2VuZC9hY2Nl c3MvZ2lzdC9naXN0eGxvZy5jICAgICAgfCAyMSAtLS0tLS0tLQogc3JjL2JhY2tlbmQvYWNjZXNz L3JtZ3JkZXNjL2dpc3RkZXNjLmMgIHwgIDYgLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRl c2MveGxvZ2Rlc2MuYyAgfCAgNyArKysKIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cu YyAgICAgICB8IDI5ICsrKysrKysrKysrCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9n aW5zZXJ0LmMgfCA2NSArKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9zdG9y YWdlL2J1ZmZlci9idWZtZ3IuYyAgICAgfCAxNCArKystLS0KIDE0IGZpbGVzIGNoYW5nZWQsIDEy MCBpbnNlcnRpb25zKCspLCA5NyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9hY2Nlc3MvZ2lzdF9wcml2YXRlLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2lzdF9wcml2YXRl LmgKaW5kZXggNTUyZjYwNWMwLi40NDUxNGYxY2IgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2Fj Y2Vzcy9naXN0X3ByaXZhdGUuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2lzdF9wcml2YXRl LmgKQEAgLTQ1Nyw4ICs0NTcsNiBAQCBleHRlcm4gWExvZ1JlY1B0ciBnaXN0WExvZ1NwbGl0KGJv b2wgcGFnZV9pc19sZWFmLAogCQkJCQkJCQlCbG9ja051bWJlciBvcmlncmxpbmssIEdpc3ROU04g b3JpZ25zbiwKIAkJCQkJCQkJQnVmZmVyIGxlZnRjaGlsZGJ1ZiwgYm9vbCBtYXJrZm9sbG93cmln aHQpOwogCi1leHRlcm4gWExvZ1JlY1B0ciBnaXN0WExvZ0Fzc2lnbkxTTih2b2lkKTsKLQogLyog Z2lzdGdldC5jICovCiBleHRlcm4gYm9vbCBnaXN0Z2V0dHVwbGUoSW5kZXhTY2FuRGVzYyBzY2Fu LCBTY2FuRGlyZWN0aW9uIGRpcik7CiBleHRlcm4gaW50NjQgZ2lzdGdldGJpdG1hcChJbmRleFNj YW5EZXNjIHNjYW4sIFRJREJpdG1hcCAqdGJtKTsKQEAgLTUzMSw4ICs1MjksNiBAQCBleHRlcm4g dm9pZCBnaXN0TWFrZVVuaW9uS2V5KEdJU1RTVEFURSAqZ2lzdHN0YXRlLCBpbnQgYXR0bm8sCiAJ CQkJCQkJIEdJU1RFTlRSWSAqZW50cnkyLCBib29sIGlzbnVsbDIsCiAJCQkJCQkJIERhdHVtICpk c3QsIGJvb2wgKmRzdGlzbnVsbCk7CiAKLWV4dGVybiBYTG9nUmVjUHRyIGdpc3RHZXRGYWtlTFNO KFJlbGF0aW9uIHJlbCk7Ci0KIC8qIGdpc3R2YWN1dW0uYyAqLwogZXh0ZXJuIEluZGV4QnVsa0Rl bGV0ZVJlc3VsdCAqZ2lzdGJ1bGtkZWxldGUoSW5kZXhWYWN1dW1JbmZvICppbmZvLAogCQkJCQkJ CQkJCQkgSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICpzdGF0cywKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL2FjY2Vzcy9naXN0eGxvZy5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2dpc3R4bG9nLmgKaW5k ZXggZDNkMWM2NTQ5Li4xYzJjZjZlODEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9n aXN0eGxvZy5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9naXN0eGxvZy5oCkBAIC0yNiw3ICsy Niw3IEBACiAgLyogI2RlZmluZSBYTE9HX0dJU1RfSU5TRVJUX0NPTVBMRVRFCSAweDQwICovCS8q IG5vdCB1c2VkIGFueW1vcmUgKi8KICAvKiAjZGVmaW5lIFhMT0dfR0lTVF9DUkVBVEVfSU5ERVgJ CSAweDUwICovCS8qIG5vdCB1c2VkIGFueW1vcmUgKi8KICNkZWZpbmUgWExPR19HSVNUX1BBR0Vf REVMRVRFCQkweDYwCi0jZGVmaW5lIFhMT0dfR0lTVF9BU1NJR05fTFNOCQkweDcwCS8qIG5vcCwg YXNzaWduIG5ldyBMU04gKi8KKyAvKiAjZGVmaW5lIFhMT0dfR0lTVF9BU1NJR05fTFNOCQkgMHg3 MCAqLwkvKiBub3QgdXNlZCBhbnltb3JlICovCiAKIC8qCiAgKiBCYWNrdXAgQmxrIDA6IHVwZGF0 ZWQgcGFnZS4KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy94bG9nLmggYi9zcmMvaW5j bHVkZS9hY2Nlc3MveGxvZy5oCmluZGV4IGZkZmI1NzI0Ni4uNTUzZDZmYzljIDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9hY2Nlc3MveGxvZy5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy94bG9n LmgKQEAgLTI1OCw2ICsyNTgsNyBAQCBleHRlcm4gYm9vbCBDcmVhdGVSZXN0YXJ0UG9pbnQoaW50 IGZsYWdzKTsKIGV4dGVybiBXQUxBdmFpbGFiaWxpdHkgR2V0V0FMQXZhaWxhYmlsaXR5KFhMb2dS ZWNQdHIgdGFyZ2V0TFNOKTsKIGV4dGVybiB2b2lkIFhMb2dQdXROZXh0T2lkKE9pZCBuZXh0T2lk KTsKIGV4dGVybiBYTG9nUmVjUHRyIFhMb2dSZXN0b3JlUG9pbnQoY29uc3QgY2hhciAqcnBOYW1l KTsKK2V4dGVybiBYTG9nUmVjUHRyIFhMb2dBc3NpZ25MU04odm9pZCk7CiBleHRlcm4gdm9pZCBV cGRhdGVGdWxsUGFnZVdyaXRlcyh2b2lkKTsKIGV4dGVybiB2b2lkIEdldEZ1bGxQYWdlV3JpdGVJ bmZvKFhMb2dSZWNQdHIgKlJlZG9SZWNQdHJfcCwgYm9vbCAqZG9QYWdlV3JpdGVzX3ApOwogZXh0 ZXJuIFhMb2dSZWNQdHIgR2V0UmVkb1JlY1B0cih2b2lkKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL2FjY2Vzcy94bG9naW5zZXJ0LmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MveGxvZ2luc2VydC5o CmluZGV4IDE2ZWJjNzZlNy4uOTFkZmJkNTYyIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nl c3MveGxvZ2luc2VydC5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy94bG9naW5zZXJ0LmgKQEAg LTY0LDYgKzY0LDggQEAgZXh0ZXJuIHZvaWQgbG9nX25ld3BhZ2VfcmFuZ2UoUmVsYXRpb24gcmVs LCBGb3JrTnVtYmVyIGZvcmtudW0sCiAJCQkJCQkJICBCbG9ja051bWJlciBzdGFydGJsaywgQmxv Y2tOdW1iZXIgZW5kYmxrLCBib29sIHBhZ2Vfc3RkKTsKIGV4dGVybiBYTG9nUmVjUHRyIFhMb2dT YXZlQnVmZmVyRm9ySGludChCdWZmZXIgYnVmZmVyLCBib29sIGJ1ZmZlcl9zdGQpOwogCitleHRl cm4gWExvZ1JlY1B0ciBYTG9nR2V0RmFrZUxTTihSZWxhdGlvbiByZWwpOworCiBleHRlcm4gdm9p ZCBJbml0WExvZ0luc2VydCh2b2lkKTsKIAogI2VuZGlmCQkJCQkJCS8qIFhMT0dJTlNFUlRfSCAq LwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19jb250cm9sLmggYi9zcmMvaW5j bHVkZS9jYXRhbG9nL3BnX2NvbnRyb2wuaAppbmRleCA3NTAzZGIxYWYuLjc3YTY2MWU4MSAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19jb250cm9sLmgKKysrIGIvc3JjL2luY2x1 ZGUvY2F0YWxvZy9wZ19jb250cm9sLmgKQEAgLTc4LDcgKzc4LDcgQEAgdHlwZWRlZiBzdHJ1Y3Qg Q2hlY2tQb2ludAogI2RlZmluZSBYTE9HX0VORF9PRl9SRUNPVkVSWQkJCTB4OTAKICNkZWZpbmUg WExPR19GUElfRk9SX0hJTlQJCQkJMHhBMAogI2RlZmluZSBYTE9HX0ZQSQkJCQkJCTB4QjAKLS8q IDB4QzAgaXMgdXNlZCBpbiBQb3N0Z3JlcyA5LjUtMTEgKi8KKyNkZWZpbmUgWExPR19BU1NJR05f TFNOCQkJCQkweEMwCiAjZGVmaW5lIFhMT0dfT1ZFUldSSVRFX0NPTlRSRUNPUkQJCTB4RDAKICNk ZWZpbmUgWExPR19DSEVDS1BPSU5UX1JFRE8JCQkweEUwCiAjZGVmaW5lIFhMT0dfTE9HSUNBTF9E RUNPRElOR19TVEFUVVNfQ0hBTkdFCTB4RjAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vz cy9naXN0L2dpc3QuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3QuYwppbmRleCBkZmZm Y2UzZTMuLjg1NjVlMjI1YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lz dC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3QuYwpAQCAtNTE3LDcgKzUxNyw3 IEBAIGdpc3RwbGFjZXRvcGFnZShSZWxhdGlvbiByZWwsIFNpemUgZnJlZXNwYWNlLCBHSVNUU1RB VEUgKmdpc3RzdGF0ZSwKIAkJCQkJCQkJCSAgIGRpc3QsIG9sZHJsaW5rLCBvbGRuc24sIGxlZnRj aGlsZGJ1ZiwKIAkJCQkJCQkJCSAgIG1hcmtmb2xsb3dyaWdodCk7CiAJCQllbHNlCi0JCQkJcmVj cHRyID0gZ2lzdEdldEZha2VMU04ocmVsKTsKKwkJCQlyZWNwdHIgPSBYTG9nR2V0RmFrZUxTTihy ZWwpOwogCQl9CiAKIAkJZm9yIChwdHIgPSBkaXN0OyBwdHI7IHB0ciA9IHB0ci0+bmV4dCkKQEAg LTU5NCw3ICs1OTQsNyBAQCBnaXN0cGxhY2V0b3BhZ2UoUmVsYXRpb24gcmVsLCBTaXplIGZyZWVz cGFjZSwgR0lTVFNUQVRFICpnaXN0c3RhdGUsCiAJCQkJCQkJCQkJbGVmdGNoaWxkYnVmKTsKIAkJ CX0KIAkJCWVsc2UKLQkJCQlyZWNwdHIgPSBnaXN0R2V0RmFrZUxTTihyZWwpOworCQkJCXJlY3B0 ciA9IFhMb2dHZXRGYWtlTFNOKHJlbCk7CiAJCX0KIAkJUGFnZVNldExTTihwYWdlLCByZWNwdHIp OwogCkBAIC0xNzMzLDcgKzE3MzMsNyBAQCBnaXN0cHJ1bmVwYWdlKFJlbGF0aW9uIHJlbCwgUGFn ZSBwYWdlLCBCdWZmZXIgYnVmZmVyLCBSZWxhdGlvbiBoZWFwUmVsKQogCQkJUGFnZVNldExTTihw YWdlLCByZWNwdHIpOwogCQl9CiAJCWVsc2UKLQkJCVBhZ2VTZXRMU04ocGFnZSwgZ2lzdEdldEZh a2VMU04ocmVsKSk7CisJCQlQYWdlU2V0TFNOKHBhZ2UsIFhMb2dHZXRGYWtlTFNOKHJlbCkpOwog CiAJCUVORF9DUklUX1NFQ1RJT04oKTsKIAl9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nl c3MvZ2lzdC9naXN0dXRpbC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdHV0aWwuYwpp bmRleCAyNzk3MmZhZDIuLjBmNThmNjE4NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNz L2dpc3QvZ2lzdHV0aWwuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0dXRpbC5j CkBAIC0xMDA3LDU2ICsxMDA3LDYgQEAgZ2lzdHByb3BlcnR5KE9pZCBpbmRleF9vaWQsIGludCBh dHRubywKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotLyoKLSAqIFNvbWUgaW5kZXhlcyBhcmUgbm90IFdB TC1sb2dnZWQsIGJ1dCB3ZSBuZWVkIExTTnMgdG8gZGV0ZWN0IGNvbmN1cnJlbnQgcGFnZQotICog c3BsaXRzIGFueXdheS4gVGhpcyBmdW5jdGlvbiBwcm92aWRlcyBhIGZha2Ugc2VxdWVuY2Ugb2Yg TFNOcyBmb3IgdGhhdAotICogcHVycG9zZS4KLSAqLwotWExvZ1JlY1B0cgotZ2lzdEdldEZha2VM U04oUmVsYXRpb24gcmVsKQotewotCWlmIChyZWwtPnJkX3JlbC0+cmVscGVyc2lzdGVuY2UgPT0g UkVMUEVSU0lTVEVOQ0VfVEVNUCkKLQl7Ci0JCS8qCi0JCSAqIFRlbXBvcmFyeSByZWxhdGlvbnMg YXJlIG9ubHkgYWNjZXNzaWJsZSBpbiBvdXIgc2Vzc2lvbiwgc28gYSBzaW1wbGUKLQkJICogYmFj a2VuZC1sb2NhbCBjb3VudGVyIHdpbGwgZG8uCi0JCSAqLwotCQlzdGF0aWMgWExvZ1JlY1B0ciBj b3VudGVyID0gRmlyc3ROb3JtYWxVbmxvZ2dlZExTTjsKLQotCQlyZXR1cm4gY291bnRlcisrOwot CX0KLQllbHNlIGlmIChSZWxhdGlvbklzUGVybWFuZW50KHJlbCkpCi0JewotCQkvKgotCQkgKiBX QUwtbG9nZ2luZyBvbiB0aGlzIHJlbGF0aW9uIHdpbGwgc3RhcnQgYWZ0ZXIgY29tbWl0LCBzbyBp dHMgTFNOcwotCQkgKiBtdXN0IGJlIGRpc3RpbmN0IG51bWJlcnMgc21hbGxlciB0aGFuIHRoZSBM U04gYXQgdGhlIG5leHQgY29tbWl0LgotCQkgKiBFbWl0IGEgZHVtbXkgV0FMIHJlY29yZCBpZiBp bnNlcnQtTFNOIGhhc24ndCBhZHZhbmNlZCBhZnRlciB0aGUKLQkJICogbGFzdCBjYWxsLgotCQkg Ki8KLQkJc3RhdGljIFhMb2dSZWNQdHIgbGFzdGxzbiA9IEludmFsaWRYTG9nUmVjUHRyOwotCQlY TG9nUmVjUHRyCWN1cnJsc24gPSBHZXRYTG9nSW5zZXJ0UmVjUHRyKCk7Ci0KLQkJLyogU2hvdWxk bid0IGJlIGNhbGxlZCBmb3IgV0FMLWxvZ2dpbmcgcmVsYXRpb25zICovCi0JCUFzc2VydCghUmVs YXRpb25OZWVkc1dBTChyZWwpKTsKLQotCQkvKiBObyBuZWVkIGZvciBhbiBhY3R1YWwgcmVjb3Jk IGlmIHdlIGFscmVhZHkgaGF2ZSBhIGRpc3RpbmN0IExTTiAqLwotCQlpZiAoWExvZ1JlY1B0cklz VmFsaWQobGFzdGxzbikgJiYgbGFzdGxzbiA9PSBjdXJybHNuKQotCQkJY3VycmxzbiA9IGdpc3RY TG9nQXNzaWduTFNOKCk7Ci0KLQkJbGFzdGxzbiA9IGN1cnJsc247Ci0JCXJldHVybiBjdXJybHNu OwotCX0KLQllbHNlCi0JewotCQkvKgotCQkgKiBVbmxvZ2dlZCByZWxhdGlvbnMgYXJlIGFjY2Vz c2libGUgZnJvbSBvdGhlciBiYWNrZW5kcywgYW5kIHN1cnZpdmUKLQkJICogKGNsZWFuKSByZXN0 YXJ0cy4gR2V0RmFrZUxTTkZvclVubG9nZ2VkUmVsKCkgaGFuZGxlcyB0aGF0IGZvciB1cy4KLQkJ ICovCi0JCUFzc2VydChyZWwtPnJkX3JlbC0+cmVscGVyc2lzdGVuY2UgPT0gUkVMUEVSU0lTVEVO Q0VfVU5MT0dHRUQpOwotCQlyZXR1cm4gR2V0RmFrZUxTTkZvclVubG9nZ2VkUmVsKCk7Ci0JfQot fQotCiAvKgogICogVGhpcyBpcyBhIHN0cmF0bnVtIHRyYW5zbGF0aW9uIHN1cHBvcnQgZnVuY3Rp b24gZm9yIEdpU1Qgb3BjbGFzc2VzIHRoYXQgdXNlCiAgKiB0aGUgUlQqU3RyYXRlZ3lOdW1iZXIg Y29uc3RhbnRzLgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdHZhY3V1 bS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdHZhY3V1bS5jCmluZGV4IDllNzE0OTgw ZC4uNjg2YTA0MTgwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0dmFj dXVtLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdHZhY3V1bS5jCkBAIC0xNiw3 ICsxNiw3IEBACiAKICNpbmNsdWRlICJhY2Nlc3MvZ2VuYW0uaCIKICNpbmNsdWRlICJhY2Nlc3Mv Z2lzdF9wcml2YXRlLmgiCi0jaW5jbHVkZSAiYWNjZXNzL3RyYW5zYW0uaCIKKyNpbmNsdWRlICJh Y2Nlc3MveGxvZ2luc2VydC5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3ZhY3V1bS5oIgogI2luY2x1 ZGUgImxpYi9pbnRlZ2Vyc2V0LmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCkBAIC0xODIsNyAr MTgyLDcgQEAgZ2lzdHZhY3V1bXNjYW4oSW5kZXhWYWN1dW1JbmZvICppbmZvLCBJbmRleEJ1bGtE ZWxldGVSZXN1bHQgKnN0YXRzLAogCWlmIChSZWxhdGlvbk5lZWRzV0FMKHJlbCkpCiAJCXZzdGF0 ZS5zdGFydE5TTiA9IEdldEluc2VydFJlY1B0cigpOwogCWVsc2UKLQkJdnN0YXRlLnN0YXJ0TlNO ID0gZ2lzdEdldEZha2VMU04ocmVsKTsKKwkJdnN0YXRlLnN0YXJ0TlNOID0gWExvZ0dldEZha2VM U04ocmVsKTsKIAogCS8qCiAJICogVGhlIG91dGVyIGxvb3AgaXRlcmF0ZXMgb3ZlciBhbGwgaW5k ZXggcGFnZXMsIGluIHBoeXNpY2FsIG9yZGVyICh3ZQpAQCAtNDEzLDcgKzQxMyw3IEBAIHJlc3Rh cnQ6CiAJCQkJUGFnZVNldExTTihwYWdlLCByZWNwdHIpOwogCQkJfQogCQkJZWxzZQotCQkJCVBh Z2VTZXRMU04ocGFnZSwgZ2lzdEdldEZha2VMU04ocmVsKSk7CisJCQkJUGFnZVNldExTTihwYWdl LCBYTG9nR2V0RmFrZUxTTihyZWwpKTsKIAogCQkJRU5EX0NSSVRfU0VDVElPTigpOwogCkBAIC03 MDcsNyArNzA3LDcgQEAgZ2lzdGRlbGV0ZXBhZ2UoSW5kZXhWYWN1dW1JbmZvICppbmZvLCBJbmRl eEJ1bGtEZWxldGVSZXN1bHQgKnN0YXRzLAogCWlmIChSZWxhdGlvbk5lZWRzV0FMKGluZm8tPmlu ZGV4KSkKIAkJcmVjcHRyID0gZ2lzdFhMb2dQYWdlRGVsZXRlKGxlYWZCdWZmZXIsIHR4aWQsIHBh cmVudEJ1ZmZlciwgZG93bmxpbmspOwogCWVsc2UKLQkJcmVjcHRyID0gZ2lzdEdldEZha2VMU04o aW5mby0+aW5kZXgpOworCQlyZWNwdHIgPSBYTG9nR2V0RmFrZUxTTihpbmZvLT5pbmRleCk7CiAJ UGFnZVNldExTTihwYXJlbnRQYWdlLCByZWNwdHIpOwogCVBhZ2VTZXRMU04obGVhZlBhZ2UsIHJl Y3B0cik7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3R4bG9nLmMg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0eGxvZy5jCmluZGV4IGM3ODM4Mzg0OS4uYWU1 MzhkYzgxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0eGxvZy5jCisr KyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3R4bG9nLmMKQEAgLTQyMSw5ICs0MjEsNiBA QCBnaXN0X3JlZG8oWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCiAJCWNhc2UgWExPR19HSVNUX1BB R0VfREVMRVRFOgogCQkJZ2lzdFJlZG9QYWdlRGVsZXRlKHJlY29yZCk7CiAJCQlicmVhazsKLQkJ Y2FzZSBYTE9HX0dJU1RfQVNTSUdOX0xTTjoKLQkJCS8qIG5vcC4gU2VlIGdpc3RHZXRGYWtlTFNO KCkuICovCi0JCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWVsb2coUEFOSUMsICJnaXN0X3JlZG86 IHVua25vd24gb3AgY29kZSAldSIsIGluZm8pOwogCX0KQEAgLTU2NywyNCArNTY0LDYgQEAgZ2lz dFhMb2dQYWdlRGVsZXRlKEJ1ZmZlciBidWZmZXIsIEZ1bGxUcmFuc2FjdGlvbklkIHhpZCwKIAly ZXR1cm4gcmVjcHRyOwogfQogCi0vKgotICogV3JpdGUgYW4gZW1wdHkgWExPRyByZWNvcmQgdG8g YXNzaWduIGEgZGlzdGluY3QgTFNOLgotICovCi1YTG9nUmVjUHRyCi1naXN0WExvZ0Fzc2lnbkxT Tih2b2lkKQotewotCWludAkJCWR1bW15ID0gMDsKLQotCS8qCi0JICogUmVjb3JkcyBvdGhlciB0 aGFuIFhMT0dfU1dJVENIIG11c3QgaGF2ZSBjb250ZW50LiBXZSB1c2UgYW4gaW50ZWdlciAwCi0J ICogdG8gZm9sbG93IHRoZSByZXN0cmljdGlvbi4KLQkgKi8KLQlYTG9nQmVnaW5JbnNlcnQoKTsK LQlYTG9nU2V0UmVjb3JkRmxhZ3MoWExPR19NQVJLX1VOSU1QT1JUQU5UKTsKLQlYTG9nUmVnaXN0 ZXJEYXRhKCZkdW1teSwgc2l6ZW9mKGR1bW15KSk7Ci0JcmV0dXJuIFhMb2dJbnNlcnQoUk1fR0lT VF9JRCwgWExPR19HSVNUX0FTU0lHTl9MU04pOwotfQotCiAvKgogICogV3JpdGUgWExPRyByZWNv cmQgYWJvdXQgcmV1c2Ugb2YgYSBkZWxldGVkIHBhZ2UuCiAgKi8KZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9naXN0ZGVzYy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3Jt Z3JkZXNjL2dpc3RkZXNjLmMKaW5kZXggNzlhODM5Y2MyLi42Nzc4OWUwMjUgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9naXN0ZGVzYy5jCisrKyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy9ybWdyZGVzYy9naXN0ZGVzYy5jCkBAIC04MCw5ICs4MCw2IEBAIGdpc3RfZGVzYyhT dHJpbmdJbmZvIGJ1ZiwgWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCiAJCWNhc2UgWExPR19HSVNU X1BBR0VfREVMRVRFOgogCQkJb3V0X2dpc3R4bG9nUGFnZURlbGV0ZShidWYsIChnaXN0eGxvZ1Bh Z2VEZWxldGUgKikgcmVjKTsKIAkJCWJyZWFrOwotCQljYXNlIFhMT0dfR0lTVF9BU1NJR05fTFNO OgotCQkJLyogTm8gZGV0YWlscyB0byB3cml0ZSBvdXQgKi8KLQkJCWJyZWFrOwogCX0KIH0KIApA QCAtMTA4LDkgKzEwNSw2IEBAIGdpc3RfaWRlbnRpZnkodWludDggaW5mbykKIAkJY2FzZSBYTE9H X0dJU1RfUEFHRV9ERUxFVEU6CiAJCQlpZCA9ICJQQUdFX0RFTEVURSI7CiAJCQlicmVhazsKLQkJ Y2FzZSBYTE9HX0dJU1RfQVNTSUdOX0xTTjoKLQkJCWlkID0gIkFTU0lHTl9MU04iOwotCQkJYnJl YWs7CiAJfQogCiAJcmV0dXJuIGlkOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3Jt Z3JkZXNjL3hsb2dkZXNjLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MveGxvZ2Rlc2Mu YwppbmRleCBmZjA3OGYyMjIuLjkwNDRiOTUyMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNj ZXNzL3JtZ3JkZXNjL3hsb2dkZXNjLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNj L3hsb2dkZXNjLmMKQEAgLTE3NSw2ICsxNzUsMTAgQEAgeGxvZ19kZXNjKFN0cmluZ0luZm8gYnVm LCBYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCkKIAkJbWVtY3B5KCZlbmFibGVkLCByZWMsIHNpemVv Zihib29sKSk7CiAJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCBlbmFibGVkID8gInRydWUi IDogImZhbHNlIik7CiAJfQorCWVsc2UgaWYgKGluZm8gPT0gWExPR19BU1NJR05fTFNOKQorCXsK KwkJLyogbm8gZnVydGhlciBpbmZvcm1hdGlvbiB0byBwcmludCAqLworCX0KIH0KIAogY29uc3Qg Y2hhciAqCkBAIC0yMjksNiArMjMzLDkgQEAgeGxvZ19pZGVudGlmeSh1aW50OCBpbmZvKQogCQlj YXNlIFhMT0dfTE9HSUNBTF9ERUNPRElOR19TVEFUVVNfQ0hBTkdFOgogCQkJaWQgPSAiTE9HSUNB TF9ERUNPRElOR19TVEFUVVNfQ0hBTkdFIjsKIAkJCWJyZWFrOworCQljYXNlIFhMT0dfQVNTSUdO X0xTTjoKKwkJCWlkID0gIkFTU0lHTl9MU04iOworCQkJYnJlYWs7CiAJfQogCiAJcmV0dXJuIGlk OwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jCmluZGV4IDEzZWM2MjI1Yi4uYWVhMTJhZTgzIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMKKysrIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jCkBAIC04MjMwLDYgKzgyMzAsMzEgQEAgWExvZ1Jl c3RvcmVQb2ludChjb25zdCBjaGFyICpycE5hbWUpCiAJcmV0dXJuIFJlY1B0cjsKIH0KIAorLyoK KyAqIFdyaXRlIGFuIGVtcHR5IFhMT0cgcmVjb3JkIHRvIGFzc2lnbiBhIGRpc3RpbmN0IExTTi4K KyAqCisgKiBUaGlzIGlzIHVzZWQgYnkgaW5kZXggQU1zIChuYnRyZWUsIGhhc2gsIEdpU1QpIHdo ZW4gYnVpbGRpbmcgaW5kZXhlcyBvbgorICogcGVybWFuZW50IHJlbGF0aW9ucyB3aXRoIHdhbF9s ZXZlbD1taW5pbWFsLiAgSW4gdGhhdCBzY2VuYXJpbywgV0FMLWxvZ2dpbmcKKyAqIHdpbGwgc3Rh cnQgYWZ0ZXIgY29tbWl0LCBidXQgdGhlIGluZGV4IEFNIG5lZWRzIGRpc3RpbmN0IExTTnMgdG8g ZGV0ZWN0CisgKiBjb25jdXJyZW50IHBhZ2UgbW9kaWZpY2F0aW9ucy4gIFdoZW4gdGhlIGN1cnJl bnQgV0FMIGluc2VydCBwb3NpdGlvbiBoYXNuJ3QKKyAqIGFkdmFuY2VkIHNpbmNlIHRoZSBsYXN0 IGNhbGwsIHdlIGVtaXQgdGhpcyBkdW1teSByZWNvcmQgdG8gZW5zdXJlIHdlIGdldCBhCisgKiBu ZXcsIGRpc3RpbmN0IExTTi4KKyAqLworWExvZ1JlY1B0cgorWExvZ0Fzc2lnbkxTTih2b2lkKQor eworCWludAkJCWR1bW15ID0gMDsKKworCS8qCisJICogUmVjb3JkcyBvdGhlciB0aGFuIFhMT0df U1dJVENIIG11c3QgaGF2ZSBjb250ZW50LiAgV2UgdXNlIGFuIGludGVnZXIgMAorCSAqIHRvIHNh dGlzZnkgdGhpcyByZXN0cmljdGlvbi4KKwkgKi8KKwlYTG9nQmVnaW5JbnNlcnQoKTsKKwlYTG9n U2V0UmVjb3JkRmxhZ3MoWExPR19NQVJLX1VOSU1QT1JUQU5UKTsKKwlYTG9nUmVnaXN0ZXJEYXRh KCZkdW1teSwgc2l6ZW9mKGR1bW15KSk7CisJcmV0dXJuIFhMb2dJbnNlcnQoUk1fWExPR19JRCwg WExPR19BU1NJR05fTFNOKTsKK30KKwogLyoKICAqIENoZWNrIGlmIGFueSBvZiB0aGUgR1VDIHBh cmFtZXRlcnMgdGhhdCBhcmUgY3JpdGljYWwgZm9yIGhvdCBzdGFuZGJ5CiAgKiBoYXZlIGNoYW5n ZWQsIGFuZCB1cGRhdGUgdGhlIHZhbHVlIGluIHBnX2NvbnRyb2wgZmlsZSBpZiBuZWNlc3Nhcnku CkBAIC04NTk3LDYgKzg2MjIsMTAgQEAgeGxvZ19yZWRvKFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3Jk KQogCXsKIAkJLyogbm90aGluZyB0byBkbyBoZXJlLCBoYW5kbGVkIGluIHhsb2dyZWNvdmVyeS5j ICovCiAJfQorCWVsc2UgaWYgKGluZm8gPT0gWExPR19BU1NJR05fTFNOKQorCXsKKwkJLyogbm90 aGluZyB0byBkbyBoZXJlLCBzZWUgWExvZ0dldEZha2VMU04oKSAqLworCX0KIAllbHNlIGlmIChp bmZvID09IFhMT0dfRlBJIHx8IGluZm8gPT0gWExPR19GUElfRk9SX0hJTlQpCiAJewogCQkvKgpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ2luc2VydC5jIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ2luc2VydC5jCmluZGV4IGQzYWNhYTYzNi4uYjEw N2U0NGFjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9naW5zZXJ0 LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ2luc2VydC5jCkBAIC01NDcs NiArNTQ3LDcxIEBAIFhMb2dTaW1wbGVJbnNlcnRJbnQ2NChSbWdySWQgcm1pZCwgdWludDggaW5m bywgaW50NjQgdmFsdWUpCiAJcmV0dXJuIFhMb2dJbnNlcnQocm1pZCwgaW5mbyk7CiB9CiAKKy8q CisgKiBYTG9nR2V0RmFrZUxTTiAtIGdldCBhIGZha2UgTFNOIGZvciBhbiBpbmRleCBwYWdlIHRo YXQgaXNuJ3QgV0FMLWxvZ2dlZC4KKyAqCisgKiBTb21lIGluZGV4IEFNcyAobmJ0cmVlLCBoYXNo LCBHaVNUKSB1c2UgTFNOcyB0byBkZXRlY3QgY29uY3VycmVudCBwYWdlCisgKiBtb2RpZmljYXRp b25zLCBidXQgbm90IGFsbCBpbmRleCBwYWdlcyBhcmUgV0FMLWxvZ2dlZC4gIFRoaXMgZnVuY3Rp b24KKyAqIHByb3ZpZGVzIGEgc2VxdWVuY2Ugb2YgZmFrZSBMU05zIGZvciB0aGF0IHB1cnBvc2Uu CisgKgorICogVGhlIGJlaGF2aW9yIGRlcGVuZHMgb24gdGhlIHJlbGF0aW9uJ3MgcGVyc2lzdGVu Y2U6CisgKgorICogLSBGb3IgdGVtcG9yYXJ5IHJlbGF0aW9ucywgd2UgdXNlIGEgc2ltcGxlIGJh Y2tlbmQtbG9jYWwgY291bnRlciBzaW5jZQorICogICB0ZW1wb3JhcnkgcmVsYXRpb25zIGFyZSBv bmx5IGFjY2Vzc2libGUgd2l0aGluIG91ciBzZXNzaW9uLgorICoKKyAqIC0gRm9yIHBlcm1hbmVu dCByZWxhdGlvbnMgd2hlbiBXQUwtbG9nZ2luZyBpcyBkaXNhYmxlZCAoZS5nLiwgZHVyaW5nIGlu ZGV4CisgKiAgIGNyZWF0aW9uIHdpdGggd2FsX2xldmVsPW1pbmltYWwpLCB3ZSB1c2UgdGhlIGN1 cnJlbnQgV0FMIGluc2VydCBwb3NpdGlvbi4KKyAqICAgSWYgdGhlIGluc2VydCBwb3NpdGlvbiBo YXNuJ3QgYWR2YW5jZWQgc2luY2UgdGhlIGxhc3QgY2FsbCwgd2UgZW1pdCBhCisgKiAgIGR1bW15 IFdBTCByZWNvcmQgdmlhIFhMb2dBc3NpZ25MU04oKSB0byBlbnN1cmUgd2UgZ2V0IGEgZGlzdGlu Y3QgTFNOLgorICoKKyAqIC0gRm9yIHVubG9nZ2VkIHJlbGF0aW9ucywgd2UgdXNlIHRoZSBnbG9i YWwgZmFrZSBMU04gY291bnRlciBtYWludGFpbmVkCisgKiAgIGJ5IEdldEZha2VMU05Gb3JVbmxv Z2dlZFJlbCgpLgorICovCitYTG9nUmVjUHRyCitYTG9nR2V0RmFrZUxTTihSZWxhdGlvbiByZWwp Cit7CisJaWYgKHJlbC0+cmRfcmVsLT5yZWxwZXJzaXN0ZW5jZSA9PSBSRUxQRVJTSVNURU5DRV9U RU1QKQorCXsKKwkJLyoKKwkJICogVGVtcG9yYXJ5IHJlbGF0aW9ucyBhcmUgb25seSBhY2Nlc3Np YmxlIGluIG91ciBzZXNzaW9uLCBzbyBhIHNpbXBsZQorCQkgKiBiYWNrZW5kLWxvY2FsIGNvdW50 ZXIgd2lsbCBkby4KKwkJICovCisJCXN0YXRpYyBYTG9nUmVjUHRyIGNvdW50ZXIgPSBGaXJzdE5v cm1hbFVubG9nZ2VkTFNOOworCisJCXJldHVybiBjb3VudGVyKys7CisJfQorCWVsc2UgaWYgKFJl bGF0aW9uSXNQZXJtYW5lbnQocmVsKSkKKwl7CisJCS8qCisJCSAqIFdBTC1sb2dnaW5nIG9uIHRo aXMgcmVsYXRpb24gd2lsbCBzdGFydCBhZnRlciBjb21taXQsIHNvIGl0cyBMU05zCisJCSAqIG11 c3QgYmUgZGlzdGluY3QgbnVtYmVycyBzbWFsbGVyIHRoYW4gdGhlIExTTiBhdCB0aGUgbmV4dCBj b21taXQuCisJCSAqIEVtaXQgYSBkdW1teSBXQUwgcmVjb3JkIGlmIGluc2VydC1MU04gaGFzbid0 IGFkdmFuY2VkIGFmdGVyIHRoZQorCQkgKiBsYXN0IGNhbGwuCisJCSAqLworCQlzdGF0aWMgWExv Z1JlY1B0ciBsYXN0bHNuID0gSW52YWxpZFhMb2dSZWNQdHI7CisJCVhMb2dSZWNQdHIJY3Vycmxz biA9IEdldFhMb2dJbnNlcnRSZWNQdHIoKTsKKworCQkvKiBTaG91bGRuJ3QgYmUgY2FsbGVkIGZv ciBXQUwtbG9nZ2luZyByZWxhdGlvbnMgKi8KKwkJQXNzZXJ0KCFSZWxhdGlvbk5lZWRzV0FMKHJl bCkpOworCisJCS8qIE5vIG5lZWQgZm9yIGFuIGFjdHVhbCByZWNvcmQgaWYgd2UgYWxyZWFkeSBo YXZlIGEgZGlzdGluY3QgTFNOICovCisJCWlmIChYTG9nUmVjUHRySXNWYWxpZChsYXN0bHNuKSAm JiBsYXN0bHNuID09IGN1cnJsc24pCisJCQljdXJybHNuID0gWExvZ0Fzc2lnbkxTTigpOworCisJ CWxhc3Rsc24gPSBjdXJybHNuOworCQlyZXR1cm4gY3VycmxzbjsKKwl9CisJZWxzZQorCXsKKwkJ LyoKKwkJICogVW5sb2dnZWQgcmVsYXRpb25zIGFyZSBhY2Nlc3NpYmxlIGZyb20gb3RoZXIgYmFj a2VuZHMsIGFuZCBzdXJ2aXZlCisJCSAqIChjbGVhbikgcmVzdGFydHMuICBHZXRGYWtlTFNORm9y VW5sb2dnZWRSZWwoKSBoYW5kbGVzIHRoYXQgZm9yIHVzLgorCQkgKi8KKwkJQXNzZXJ0KHJlbC0+ cmRfcmVsLT5yZWxwZXJzaXN0ZW5jZSA9PSBSRUxQRVJTSVNURU5DRV9VTkxPR0dFRCk7CisJCXJl dHVybiBHZXRGYWtlTFNORm9yVW5sb2dnZWRSZWwoKTsKKwl9Cit9CisKIC8qCiAgKiBBc3NlbWJs ZSBhIFdBTCByZWNvcmQgZnJvbSB0aGUgcmVnaXN0ZXJlZCBkYXRhIGFuZCBidWZmZXJzIGludG8g YW4KICAqIFhMb2dSZWNEYXRhIGNoYWluLCByZWFkeSBmb3IgaW5zZXJ0aW9uIHdpdGggWExvZ0lu c2VydFJlY29yZCgpLgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVm bWdyLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYwppbmRleCA3MjQxNDc3 Y2EuLjU1MWEwZWViMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVm bWdyLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKQEAgLTQ0Njks MTMgKzQ0NjksMTMgQEAgRmx1c2hCdWZmZXIoQnVmZmVyRGVzYyAqYnVmLCBTTWdyUmVsYXRpb24g cmVsbiwgSU9PYmplY3QgaW9fb2JqZWN0LAogCSAqIGxvc3QgYWZ0ZXIgYSBjcmFzaCBhbnl3YXku ICBNb3N0IHVubG9nZ2VkIHJlbGF0aW9uIHBhZ2VzIGRvIG5vdCBiZWFyCiAJICogTFNOcyBzaW5j ZSB3ZSBuZXZlciBlbWl0IFdBTCByZWNvcmRzIGZvciB0aGVtLCBhbmQgdGhlcmVmb3JlIGZsdXNo aW5nCiAJICogdXAgdGhyb3VnaCB0aGUgYnVmZmVyIExTTiB3b3VsZCBiZSB1c2VsZXNzLCBidXQg aGFybWxlc3MuICBIb3dldmVyLAotCSAqIEdpU1QgaW5kZXhlcyB1c2UgTFNOcyBpbnRlcm5hbGx5 IHRvIHRyYWNrIHBhZ2Utc3BsaXRzLCBhbmQgdGhlcmVmb3JlCi0JICogdW5sb2dnZWQgR2lTVCBw YWdlcyBiZWFyICJmYWtlIiBMU05zIGdlbmVyYXRlZCBieQotCSAqIEdldEZha2VMU05Gb3JVbmxv Z2dlZFJlbC4gIEl0IGlzIHVubGlrZWx5IGJ1dCBwb3NzaWJsZSB0aGF0IHRoZSBmYWtlCi0JICog TFNOIGNvdW50ZXIgY291bGQgYWR2YW5jZSBwYXN0IHRoZSBXQUwgaW5zZXJ0aW9uIHBvaW50OyBh bmQgaWYgaXQgZGlkCi0JICogaGFwcGVuLCBhdHRlbXB0aW5nIHRvIGZsdXNoIFdBTCB0aHJvdWdo IHRoYXQgbG9jYXRpb24gd291bGQgZmFpbCwgd2l0aAotCSAqIGRpc2FzdHJvdXMgc3lzdGVtLXdp ZGUgY29uc2VxdWVuY2VzLiAgVG8gbWFrZSBzdXJlIHRoYXQgY2FuJ3QgaGFwcGVuLAotCSAqIHNr aXAgdGhlIGZsdXNoIGlmIHRoZSBidWZmZXIgaXNuJ3QgcGVybWFuZW50LgorCSAqIHNvbWUgaW5k ZXggQU1zIChuYnRyZWUsIGhhc2gsIEdpU1QpIHVzZSBMU05zIGludGVybmFsbHkgdG8gZGV0ZWN0 CisJICogY29uY3VycmVudCBwYWdlIG1vZGlmaWNhdGlvbnMsIGFuZCB0aGVyZWZvcmUgdW5sb2dn ZWQgaW5kZXggcGFnZXMgYmVhcgorCSAqICJmYWtlIiBMU05zIGdlbmVyYXRlZCBieSBYTG9nR2V0 RmFrZUxTTi4gIEl0IGlzIHVubGlrZWx5IGJ1dCBwb3NzaWJsZQorCSAqIHRoYXQgdGhlIGZha2Ug TFNOIGNvdW50ZXIgY291bGQgYWR2YW5jZSBwYXN0IHRoZSBXQUwgaW5zZXJ0aW9uIHBvaW50Owor CSAqIGFuZCBpZiBpdCBkaWQgaGFwcGVuLCBhdHRlbXB0aW5nIHRvIGZsdXNoIFdBTCB0aHJvdWdo IHRoYXQgbG9jYXRpb24KKwkgKiB3b3VsZCBmYWlsLCB3aXRoIGRpc2FzdHJvdXMgc3lzdGVtLXdp ZGUgY29uc2VxdWVuY2VzLiAgVG8gbWFrZSBzdXJlCisJICogdGhhdCBjYW4ndCBoYXBwZW4sIHNr aXAgdGhlIGZsdXNoIGlmIHRoZSBidWZmZXIgaXNuJ3QgcGVybWFuZW50LgogCSAqLwogCWlmIChi dWZfc3RhdGUgJiBCTV9QRVJNQU5FTlQpCiAJCVhMb2dGbHVzaChyZWNwdHIpOwotLSAKMi41MS4w Cgo= --0000000000007589150649a4074c Content-Type: application/octet-stream; name="v9-0007-Make-buffer-hit-helper.patch" Content-Disposition: attachment; filename="v9-0007-Make-buffer-hit-helper.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ml1k3l3g4 RnJvbSAyMDg5NTE1ZGUyNDUyYmI1YmFlOTIxNmU2MjgyN2JmOWZhNzBhMGNjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNZWxhbmllIFBsYWdlbWFuIDxtZWxhbmllcGxhZ2VtYW5AZ21h aWwuY29tPgpEYXRlOiBGcmksIDIzIEphbiAyMDI2IDEzOjU0OjAyIC0wNTAwClN1YmplY3Q6IFtQ QVRDSCB2OSAwNy8xMF0gTWFrZSBidWZmZXIgaGl0IGhlbHBlcgoKQWxyZWFkeSB0d28gcGxhY2Vz IGNvdW50IGJ1ZmZlciBoaXRzLCByZXF1aXJpbmcgcXVpdGUgYSBmZXcgbGluZXMgb2YKY29kZSBz aW5jZSB3ZSBkbyBhY2NvdW50aW5nIGluIHNvIG1hbnkgcGxhY2VzLiBGdXR1cmUgY29tbWl0cyB3 aWxsIGFkZAptb3JlIGxvY2F0aW9ucywgc28gcmVmYWN0b3IgaW50byBhIGhlbHBlci4KLS0tCiBz cmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYyB8IDExMSArKysrKysrKysrKysrKy0t LS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgNTYgaW5zZXJ0aW9ucygrKSwgNTUgZGVsZXRp b25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMg Yi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYwppbmRleCA1NTFhMGVlYjMuLjRh OGY0MGRhYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMK KysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKQEAgLTYzOCw2ICs2Mzgs MTAgQEAgc3RhdGljIGlubGluZSBCdWZmZXJEZXNjICpCdWZmZXJBbGxvYyhTTWdyUmVsYXRpb24g c21nciwKIAkJCQkJCQkJCSAgYm9vbCAqZm91bmRQdHIsIElPQ29udGV4dCBpb19jb250ZXh0KTsK IHN0YXRpYyBib29sIEFzeW5jUmVhZEJ1ZmZlcnMoUmVhZEJ1ZmZlcnNPcGVyYXRpb24gKm9wZXJh dGlvbiwgaW50ICpuYmxvY2tzX3Byb2dyZXNzKTsKIHN0YXRpYyB2b2lkIENoZWNrUmVhZEJ1ZmZl cnNPcGVyYXRpb24oUmVhZEJ1ZmZlcnNPcGVyYXRpb24gKm9wZXJhdGlvbiwgYm9vbCBpc19jb21w bGV0ZSk7CisKK3N0YXRpYyB2b2lkIFByb2Nlc3NCdWZmZXJIaXQoQnVmZmVyQWNjZXNzU3RyYXRl Z3kgc3RyYXRlZ3ksCisJCQkJCQkJIFJlbGF0aW9uIHJlbCwgY2hhciBwZXJzaXN0ZW5jZSwgU01n clJlbGF0aW9uIHNtZ3IsCisJCQkJCQkJIEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIg YmxvY2tudW0pOwogc3RhdGljIEJ1ZmZlciBHZXRWaWN0aW1CdWZmZXIoQnVmZmVyQWNjZXNzU3Ry YXRlZ3kgc3RyYXRlZ3ksIElPQ29udGV4dCBpb19jb250ZXh0KTsKIHN0YXRpYyB2b2lkIEZsdXNo VW5sb2NrZWRCdWZmZXIoQnVmZmVyRGVzYyAqYnVmLCBTTWdyUmVsYXRpb24gcmVsbiwKIAkJCQkJ CQkJSU9PYmplY3QgaW9fb2JqZWN0LCBJT0NvbnRleHQgaW9fY29udGV4dCk7CkBAIC0xMjE2LDgg KzEyMjAsNiBAQCBQaW5CdWZmZXJGb3JCbG9jayhSZWxhdGlvbiByZWwsCiAJCQkJICBib29sICpm b3VuZFB0cikKIHsKIAlCdWZmZXJEZXNjICpidWZIZHI7Ci0JSU9Db250ZXh0CWlvX2NvbnRleHQ7 Ci0JSU9PYmplY3QJaW9fb2JqZWN0OwogCiAJQXNzZXJ0KGJsb2NrTnVtICE9IFBfTkVXKTsKIApA QCAtMTIyNiwxNyArMTIyOCw2IEBAIFBpbkJ1ZmZlckZvckJsb2NrKFJlbGF0aW9uIHJlbCwKIAkJ CXBlcnNpc3RlbmNlID09IFJFTFBFUlNJU1RFTkNFX1BFUk1BTkVOVCB8fAogCQkJcGVyc2lzdGVu Y2UgPT0gUkVMUEVSU0lTVEVOQ0VfVU5MT0dHRUQpKTsKIAotCWlmIChwZXJzaXN0ZW5jZSA9PSBS RUxQRVJTSVNURU5DRV9URU1QKQotCXsKLQkJaW9fY29udGV4dCA9IElPQ09OVEVYVF9OT1JNQUw7 Ci0JCWlvX29iamVjdCA9IElPT0JKRUNUX1RFTVBfUkVMQVRJT047Ci0JfQotCWVsc2UKLQl7Ci0J CWlvX2NvbnRleHQgPSBJT0NvbnRleHRGb3JTdHJhdGVneShzdHJhdGVneSk7Ci0JCWlvX29iamVj dCA9IElPT0JKRUNUX1JFTEFUSU9OOwotCX0KLQogCVRSQUNFX1BPU1RHUkVTUUxfQlVGRkVSX1JF QURfU1RBUlQoZm9ya051bSwgYmxvY2tOdW0sCiAJCQkJCQkJCQkgICBzbWdyLT5zbWdyX3Jsb2Nh dG9yLmxvY2F0b3Iuc3BjT2lkLAogCQkJCQkJCQkJICAgc21nci0+c21ncl9ybG9jYXRvci5sb2Nh dG9yLmRiT2lkLApAQCAtMTI0NCwxOCArMTIzNSwxMSBAQCBQaW5CdWZmZXJGb3JCbG9jayhSZWxh dGlvbiByZWwsCiAJCQkJCQkJCQkgICBzbWdyLT5zbWdyX3Jsb2NhdG9yLmJhY2tlbmQpOwogCiAJ aWYgKHBlcnNpc3RlbmNlID09IFJFTFBFUlNJU1RFTkNFX1RFTVApCi0JewogCQlidWZIZHIgPSBM b2NhbEJ1ZmZlckFsbG9jKHNtZ3IsIGZvcmtOdW0sIGJsb2NrTnVtLCBmb3VuZFB0cik7Ci0JCWlm ICgqZm91bmRQdHIpCi0JCQlwZ0J1ZmZlclVzYWdlLmxvY2FsX2Jsa3NfaGl0Kys7Ci0JfQogCWVs c2UKLQl7CiAJCWJ1ZkhkciA9IEJ1ZmZlckFsbG9jKHNtZ3IsIHBlcnNpc3RlbmNlLCBmb3JrTnVt LCBibG9ja051bSwKLQkJCQkJCQkgc3RyYXRlZ3ksIGZvdW5kUHRyLCBpb19jb250ZXh0KTsKLQkJ aWYgKCpmb3VuZFB0cikKLQkJCXBnQnVmZmVyVXNhZ2Uuc2hhcmVkX2Jsa3NfaGl0Kys7Ci0JfQor CQkJCQkJCSBzdHJhdGVneSwgZm91bmRQdHIsIElPQ29udGV4dEZvclN0cmF0ZWd5KHN0cmF0ZWd5 KSk7CisKIAlpZiAocmVsKQogCXsKIAkJLyoKQEAgLTEyNjQsMjIgKzEyNDgsMTAgQEAgUGluQnVm ZmVyRm9yQmxvY2soUmVsYXRpb24gcmVsLAogCQkgKiB6ZXJvZWQgaW5zdGVhZCksIHRoZSBwZXIt cmVsYXRpb24gc3RhdHMgYWx3YXlzIGNvdW50IHRoZW0uCiAJCSAqLwogCQlwZ3N0YXRfY291bnRf YnVmZmVyX3JlYWQocmVsKTsKLQkJaWYgKCpmb3VuZFB0cikKLQkJCXBnc3RhdF9jb3VudF9idWZm ZXJfaGl0KHJlbCk7CiAJfQotCWlmICgqZm91bmRQdHIpCi0JewotCQlwZ3N0YXRfY291bnRfaW9f b3AoaW9fb2JqZWN0LCBpb19jb250ZXh0LCBJT09QX0hJVCwgMSwgMCk7Ci0JCWlmIChWYWN1dW1D b3N0QWN0aXZlKQotCQkJVmFjdXVtQ29zdEJhbGFuY2UgKz0gVmFjdXVtQ29zdFBhZ2VIaXQ7CiAK LQkJVFJBQ0VfUE9TVEdSRVNRTF9CVUZGRVJfUkVBRF9ET05FKGZvcmtOdW0sIGJsb2NrTnVtLAot CQkJCQkJCQkJCSAgc21nci0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnNwY09pZCwKLQkJCQkJCQkJ CQkgIHNtZ3ItPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5kYk9pZCwKLQkJCQkJCQkJCQkgIHNtZ3It PnNtZ3JfcmxvY2F0b3IubG9jYXRvci5yZWxOdW1iZXIsCi0JCQkJCQkJCQkJICBzbWdyLT5zbWdy X3Jsb2NhdG9yLmJhY2tlbmQsCi0JCQkJCQkJCQkJICB0cnVlKTsKLQl9CisJaWYgKCpmb3VuZFB0 cikKKwkJUHJvY2Vzc0J1ZmZlckhpdChzdHJhdGVneSwgcmVsLCBwZXJzaXN0ZW5jZSwgc21nciwg Zm9ya051bSwgYmxvY2tOdW0pOwogCiAJcmV0dXJuIEJ1ZmZlckRlc2NyaXB0b3JHZXRCdWZmZXIo YnVmSGRyKTsKIH0KQEAgLTE2ODUsNiArMTY1Nyw1MSBAQCBSZWFkQnVmZmVyc0NhblN0YXJ0SU8o QnVmZmVyIGJ1ZmZlciwgYm9vbCBub3dhaXQpCiAJcmV0dXJuIFJlYWRCdWZmZXJzQ2FuU3RhcnRJ T09uY2UoYnVmZmVyLCBub3dhaXQpOwogfQogCisvKgorICogV2UgdHJhY2sgdmFyaW91cyBzdGF0 cyByZWxhdGVkIHRvIGJ1ZmZlciBoaXRzLiBCZWNhdXNlIHRoaXMgaXMgZG9uZSBpbiBhCisgKiBm ZXcgc2VwYXJhdGUgcGxhY2VzLCB0aGlzIGhlbHBlciBleGlzdHMgZm9yIGNvbnZlbmllbmNlLgor ICovCitzdGF0aWMgdm9pZAorUHJvY2Vzc0J1ZmZlckhpdChCdWZmZXJBY2Nlc3NTdHJhdGVneSBz dHJhdGVneSwKKwkJCQkgUmVsYXRpb24gcmVsLCBjaGFyIHBlcnNpc3RlbmNlLCBTTWdyUmVsYXRp b24gc21nciwKKwkJCQkgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBibG9ja251bSkK K3sKKwlJT0NvbnRleHQJaW9fY29udGV4dDsKKwlJT09iamVjdAlpb19vYmplY3Q7CisKKwlpZiAo cGVyc2lzdGVuY2UgPT0gUkVMUEVSU0lTVEVOQ0VfVEVNUCkKKwl7CisJCWlvX2NvbnRleHQgPSBJ T0NPTlRFWFRfTk9STUFMOworCQlpb19vYmplY3QgPSBJT09CSkVDVF9URU1QX1JFTEFUSU9OOwor CX0KKwllbHNlCisJeworCQlpb19jb250ZXh0ID0gSU9Db250ZXh0Rm9yU3RyYXRlZ3koc3RyYXRl Z3kpOworCQlpb19vYmplY3QgPSBJT09CSkVDVF9SRUxBVElPTjsKKwl9CisKKwlUUkFDRV9QT1NU R1JFU1FMX0JVRkZFUl9SRUFEX0RPTkUoZm9ya251bSwKKwkJCQkJCQkJCSAgYmxvY2tudW0sCisJ CQkJCQkJCQkgIHNtZ3ItPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5zcGNPaWQsCisJCQkJCQkJCQkg IHNtZ3ItPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5kYk9pZCwKKwkJCQkJCQkJCSAgc21nci0+c21n cl9ybG9jYXRvci5sb2NhdG9yLnJlbE51bWJlciwKKwkJCQkJCQkJCSAgc21nci0+c21ncl9ybG9j YXRvci5iYWNrZW5kLAorCQkJCQkJCQkJICB0cnVlKTsKKworCWlmIChwZXJzaXN0ZW5jZSA9PSBS RUxQRVJTSVNURU5DRV9URU1QKQorCQlwZ0J1ZmZlclVzYWdlLmxvY2FsX2Jsa3NfaGl0ICs9IDE7 CisJZWxzZQorCQlwZ0J1ZmZlclVzYWdlLnNoYXJlZF9ibGtzX2hpdCArPSAxOworCisJaWYgKHJl bCkKKwkJcGdzdGF0X2NvdW50X2J1ZmZlcl9oaXQocmVsKTsKKworCXBnc3RhdF9jb3VudF9pb19v cChpb19vYmplY3QsIGlvX2NvbnRleHQsIElPT1BfSElULCAxLCAwKTsKKworCWlmIChWYWN1dW1D b3N0QWN0aXZlKQorCQlWYWN1dW1Db3N0QmFsYW5jZSArPSBWYWN1dW1Db3N0UGFnZUhpdDsKK30K KwogLyoKICAqIEhlbHBlciBmb3IgV2FpdFJlYWRCdWZmZXJzKCkgdGhhdCBwcm9jZXNzZXMgdGhl IHJlc3VsdHMgb2YgYSByZWFkdgogICogb3BlcmF0aW9uLCByYWlzaW5nIGFuIGVycm9yIGlmIG5l Y2Vzc2FyeS4KQEAgLTE5ODAsMjUgKzE5OTcsOSBAQCBBc3luY1JlYWRCdWZmZXJzKFJlYWRCdWZm ZXJzT3BlcmF0aW9uICpvcGVyYXRpb24sIGludCAqbmJsb2Nrc19wcm9ncmVzcykKIAkJICogbXVz dCBoYXZlIHN0YXJ0ZWQgb3V0IGFzIGEgbWlzcyBpbiBQaW5CdWZmZXJGb3JCbG9jaygpLiBUaGUg b3RoZXIKIAkJICogYmFja2VuZCB3aWxsIHRyYWNrIHRoaXMgYXMgYSAncmVhZCcuCiAJCSAqLwot CQlUUkFDRV9QT1NUR1JFU1FMX0JVRkZFUl9SRUFEX0RPTkUoZm9ya251bSwgYmxvY2tudW0gKyBv cGVyYXRpb24tPm5ibG9ja3NfZG9uZSwKLQkJCQkJCQkJCQkgIG9wZXJhdGlvbi0+c21nci0+c21n cl9ybG9jYXRvci5sb2NhdG9yLnNwY09pZCwKLQkJCQkJCQkJCQkgIG9wZXJhdGlvbi0+c21nci0+ c21ncl9ybG9jYXRvci5sb2NhdG9yLmRiT2lkLAotCQkJCQkJCQkJCSAgb3BlcmF0aW9uLT5zbWdy LT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IucmVsTnVtYmVyLAotCQkJCQkJCQkJCSAgb3BlcmF0aW9u LT5zbWdyLT5zbWdyX3Jsb2NhdG9yLmJhY2tlbmQsCi0JCQkJCQkJCQkJICB0cnVlKTsKLQotCQlp ZiAocGVyc2lzdGVuY2UgPT0gUkVMUEVSU0lTVEVOQ0VfVEVNUCkKLQkJCXBnQnVmZmVyVXNhZ2Uu bG9jYWxfYmxrc19oaXQgKz0gMTsKLQkJZWxzZQotCQkJcGdCdWZmZXJVc2FnZS5zaGFyZWRfYmxr c19oaXQgKz0gMTsKLQotCQlpZiAob3BlcmF0aW9uLT5yZWwpCi0JCQlwZ3N0YXRfY291bnRfYnVm ZmVyX2hpdChvcGVyYXRpb24tPnJlbCk7Ci0KLQkJcGdzdGF0X2NvdW50X2lvX29wKGlvX29iamVj dCwgaW9fY29udGV4dCwgSU9PUF9ISVQsIDEsIDApOwotCi0JCWlmIChWYWN1dW1Db3N0QWN0aXZl KQotCQkJVmFjdXVtQ29zdEJhbGFuY2UgKz0gVmFjdXVtQ29zdFBhZ2VIaXQ7CisJCVByb2Nlc3NC dWZmZXJIaXQob3BlcmF0aW9uLT5zdHJhdGVneSwgb3BlcmF0aW9uLT5yZWwsIHBlcnNpc3RlbmNl LAorCQkJCQkJIG9wZXJhdGlvbi0+c21nciwgZm9ya251bSwKKwkJCQkJCSBibG9ja251bSArIG9w ZXJhdGlvbi0+bmJsb2Nrc19kb25lKTsKIAl9CiAJZWxzZQogCXsKLS0gCjIuNTEuMAoK --0000000000007589150649a4074c Content-Type: application/octet-stream; name="v9-0006-Use-ExecSetTupleBound-hint-during-index-scans.patch" Content-Disposition: attachment; filename="v9-0006-Use-ExecSetTupleBound-hint-during-index-scans.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ml1k3l3k5 RnJvbSA5YmIyMmE1MjE2YzYwZTkzMzhlOGQwOWZhODM5NDMzZjU4MDJiYTQ0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFRo dSwgMjIgSmFuIDIwMjYgMTM6MDc6MTMgLTA1MDAKU3ViamVjdDogW1BBVENIIHY5IDA2LzEwXSBV c2UgRXhlY1NldFR1cGxlQm91bmQgaGludCBkdXJpbmcgaW5kZXggc2NhbnMuCgpUaGlzIGdpdmVz IGluZGV4IHNjYW5zIGEgd2F5IHRvIGF2b2lkIHVzaW5nIGEgcmVhZCBzdHJlYW0gZHVyaW5nIGNl cnRhaW4Ka2luZHMgb2YgcXVlcmllcyB0aGF0IGFyZSB2ZXJ5IHVubGlrZWx5IHRvIGJlbmVmaXQg ZnJvbSBwcmVmZXRjaGluZzoKcXVlcmllcyB3aG9zZSBwbGFuIGludm9sdmVzIGEgTElNSVQgbm9k ZSB0aGF0IGlzIGNvbnN1bWVzIHR1cGxlcyBmcm9tIGFuCmluZGV4IHNjYW4gKG9yIGluZGV4LW9u bHkgc2Nhbikgbm9kZS4KClRlc3RpbmcgaGFzIHNob3duIHRoaXMgdG8gYmUgcGFydGljdWxhcmx5 IGltcG9ydGFudCB3aXRoIG5lc3RlZCBsb29wCmpvaW5zIHdpdGggYSBMSU1JVCBvbiBhbiBpbm5l ciBpbmRleCBzY2FuLiAgVGhpcyBpcyB0eXBpY2FsIG9mIG5lc3RlZApsb29wIGFudGktam9pbnMs IGFuZCBuZXN0ZWQgbG9vcCBzZW1pLWpvaW5zLgoKWFhYIFRoaXMgaXMgc3RpbGwgdmVyeSBtdWNo IGEgV0lQLgoKQXV0aG9yOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+ClJldmlld2VkLUJ5 OiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4KLS0tCiBzcmMvaW5jbHVkZS9hY2Nlc3Mv cmVsc2Nhbi5oICAgICAgICAgICAgIHwgIDIgKysKIHNyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rl cy5oICAgICAgICAgICAgfCAgNCArKysrCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1f aGFuZGxlci5jIHwgIDEgKwogc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMgICAgICAg ICB8ICAyICsrCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjUHJvY25vZGUuYyAgICAgIHwgMjkg KysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhv bmx5c2Nhbi5jIHwgMTAgKysrKysrKysKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleHNj YW4uYyAgICAgfCAxMyArKysrKysrKysrKwogNyBmaWxlcyBjaGFuZ2VkLCA2MSBpbnNlcnRpb25z KCspCgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaCBiL3NyYy9pbmNs dWRlL2FjY2Vzcy9yZWxzY2FuLmgKaW5kZXggMTE4M2JkMDFiLi4wMzg5NWE0NTcgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNz L3JlbHNjYW4uaApAQCAtNDAxLDYgKzQwMSw4IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4U2NhbkRl c2NEYXRhCiAKIAkvKiBwYXJhbGxlbCBpbmRleCBzY2FuIGluZm9ybWF0aW9uLCBpbiBzaGFyZWQg bWVtb3J5ICovCiAJc3RydWN0IFBhcmFsbGVsSW5kZXhTY2FuRGVzY0RhdGEgKnBhcmFsbGVsX3Nj YW47CisKKwlpbnQ2NAkJdHVwbGVzX25lZWRlZDsKIH0gSW5kZXhTY2FuRGVzY0RhdGE7CiAKIC8q IEdlbmVyaWMgc3RydWN0dXJlIGZvciBwYXJhbGxlbCBzY2FucyAqLwpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMu aAppbmRleCA3OTNiMWEzYzYuLjQ2OTNiMGZkNyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9k ZXMvZXhlY25vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKQEAgLTE2 OTYsNiArMTY5Niw3IEBAIHR5cGVkZWYgc3RydWN0CiAgKgkJU2NhbkRlc2MJCSAgIGluZGV4IHNj YW4gZGVzY3JpcHRvcgogICoJCUluc3RydW1lbnQJCSAgIGxvY2FsIGluZGV4IHNjYW4gaW5zdHJ1 bWVudGF0aW9uCiAgKgkJU2hhcmVkSW5mbwkJICAgcGFyYWxsZWwgd29ya2VyIGluc3RydW1lbnRh dGlvbiAobm8gbGVhZGVyIGVudHJ5KQorICoJCVR1cGxlc05lZWRlZAkgICB0dXBsZSBib3VuZCwg c2VlIEV4ZWNTZXRUdXBsZUJvdW5kCiAgKgogICoJCVJlb3JkZXJRdWV1ZQkgICB0dXBsZXMgdGhh dCBuZWVkIHJlb3JkZXJpbmcgZHVlIHRvIHJlLWNoZWNrCiAgKgkJUmVhY2hlZEVuZAkJICAgaGF2 ZSB3ZSBmZXRjaGVkIGFsbCB0dXBsZXMgZnJvbSBpbmRleCBhbHJlYWR5PwpAQCAtMTcyNCw2ICsx NzI1LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuU3RhdGUKIAlzdHJ1Y3QgSW5kZXhTY2Fu RGVzY0RhdGEgKmlzc19TY2FuRGVzYzsKIAlJbmRleFNjYW5JbnN0cnVtZW50YXRpb24gaXNzX0lu c3RydW1lbnQ7CiAJU2hhcmVkSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uICppc3NfU2hhcmVkSW5m bzsKKwlpbnQ2NAkJaXNzX1R1cGxlc05lZWRlZDsKIAogCS8qIFRoZXNlIGFyZSBuZWVkZWQgZm9y IHJlLWNoZWNraW5nIE9SREVSIEJZIGV4cHIgb3JkZXJpbmcgKi8KIAlwYWlyaW5naGVhcCAqaXNz X1Jlb3JkZXJRdWV1ZTsKQEAgLTE3NTIsNiArMTc1NCw3IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4 U2NhblN0YXRlCiAgKgkJU2NhbkRlc2MJCSAgIGluZGV4IHNjYW4gZGVzY3JpcHRvcgogICoJCUlu c3RydW1lbnQJCSAgIGxvY2FsIGluZGV4IHNjYW4gaW5zdHJ1bWVudGF0aW9uCiAgKgkJU2hhcmVk SW5mbwkJICAgcGFyYWxsZWwgd29ya2VyIGluc3RydW1lbnRhdGlvbiAobm8gbGVhZGVyIGVudHJ5 KQorICoJCVR1cGxlc05lZWRlZAkgICB0dXBsZSBib3VuZCwgc2VlIEV4ZWNTZXRUdXBsZUJvdW5k CiAgKgkJVGFibGVTbG90CQkgICBzbG90IGZvciBob2xkaW5nIHR1cGxlcyBmZXRjaGVkIGZyb20g dGhlIHRhYmxlCiAgKgkJUHNjYW5MZW4JCSAgIHNpemUgb2YgcGFyYWxsZWwgaW5kZXgtb25seSBz Y2FuIGRlc2NyaXB0b3IKICAqCQlOYW1lQ1N0cmluZ0F0dE51bXMgYXR0bnVtcyBvZiBuYW1lIHR5 cGVkIGNvbHVtbnMgdG8gcGFkIHRvIE5BTUVEQVRBTEVOCkBAIC0xNzc0LDYgKzE3NzcsNyBAQCB0 eXBlZGVmIHN0cnVjdCBJbmRleE9ubHlTY2FuU3RhdGUKIAlzdHJ1Y3QgSW5kZXhTY2FuRGVzY0Rh dGEgKmlvc3NfU2NhbkRlc2M7CiAJSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uIGlvc3NfSW5zdHJ1 bWVudDsKIAlTaGFyZWRJbmRleFNjYW5JbnN0cnVtZW50YXRpb24gKmlvc3NfU2hhcmVkSW5mbzsK KwlpbnQ2NAkJaW9zc19UdXBsZXNOZWVkZWQ7CiAJVHVwbGVUYWJsZVNsb3QgKmlvc3NfVGFibGVT bG90OwogCVNpemUJCWlvc3NfUHNjYW5MZW47CiAJQXR0ck51bWJlciAqaW9zc19OYW1lQ1N0cmlu Z0F0dE51bXM7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFu ZGxlci5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYwppbmRleCBk ZTcxZTQ3ZWEuLjIzZjFiNzRkNiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAv aGVhcGFtX2hhbmRsZXIuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFu ZGxlci5jCkBAIC01MDYsNiArNTA2LDcgQEAgaGVhcGFtX2JhdGNoX2dldG5leHQoSW5kZXhTY2Fu RGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKIAkJICogbm90aGluZyBhYm91dCBw aW5zIGhlbGQgb24gaW5kZXggcGFnZXMvd2l0aGluIGJhdGNoZXMpLgogCQkgKi8KIAkJaWYgKCFz Y2FuLT54c19oZWFwZmV0Y2gtPnJzICYmIHByaW9yQmF0Y2ggJiYgc2Nhbi0+TVZDQ1NjYW4gJiYK KwkJCShzY2FuLT50dXBsZXNfbmVlZGVkID09IC0xIHx8IHNjYW4tPnR1cGxlc19uZWVkZWQgPiAx MCkgJiYKIAkJCWVuYWJsZV9pbmRleHNjYW5fcHJlZmV0Y2gpCiAJCXsKIAkJCUFzc2VydCghYmF0 Y2hyaW5nYnVmLT5wcmVmZXRjaFBvcy52YWxpZCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9h Y2Nlc3MvaW5kZXgvZ2VuYW0uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9nZW5hbS5jCmlu ZGV4IDE4ZGNjZDNjOS4uYzU2YTlmMDUyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mv aW5kZXgvZ2VuYW0uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYwpAQCAt MTI2LDYgKzEyNiw4IEBAIFJlbGF0aW9uR2V0SW5kZXhTY2FuKFJlbGF0aW9uIGluZGV4UmVsYXRp b24sIGludCBua2V5cywgaW50IG5vcmRlcmJ5cykKIAlzY2FuLT54c19oaXR1cCA9IE5VTEw7CiAJ c2Nhbi0+eHNfaGl0dXBkZXNjID0gTlVMTDsKIAorCXNjYW4tPnR1cGxlc19uZWVkZWQgPSAtMTsJ Lyogbm8gbGltaXQgKi8KKwogCXJldHVybiBzY2FuOwogfQogCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9leGVjdXRvci9leGVjUHJvY25vZGUuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQ cm9jbm9kZS5jCmluZGV4IDdlNDBiODUyNS4uZjU4ODk3MjZlIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9leGVjdXRvci9leGVjUHJvY25vZGUuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9l eGVjUHJvY25vZGUuYwpAQCAtNzIsNiArNzIsNyBAQAogICovCiAjaW5jbHVkZSAicG9zdGdyZXMu aCIKIAorI2luY2x1ZGUgImFjY2Vzcy9yZWxzY2FuLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3IvZXhl Y3V0b3IuaCIKICNpbmNsdWRlICJleGVjdXRvci9ub2RlQWdnLmgiCiAjaW5jbHVkZSAiZXhlY3V0 b3Ivbm9kZUFwcGVuZC5oIgpAQCAtOTc3LDYgKzk3OCwzNCBAQCBFeGVjU2V0VHVwbGVCb3VuZChp bnQ2NCB0dXBsZXNfbmVlZGVkLCBQbGFuU3RhdGUgKmNoaWxkX25vZGUpCiAKIAkJRXhlY1NldFR1 cGxlQm91bmQodHVwbGVzX25lZWRlZCwgb3V0ZXJQbGFuU3RhdGUoY2hpbGRfbm9kZSkpOwogCX0K KwllbHNlIGlmIChJc0EoY2hpbGRfbm9kZSwgSW5kZXhTY2FuU3RhdGUpKQorCXsKKwkJLyoKKwkJ ICogSWYgaXQgaXMgYW4gSW5kZXhTY2FuLCBzYXZlIHRoZSB0dXBsZXNfbmVlZGVkIGluIHRoZSBz dGF0ZSBzbyBpdAorCQkgKiBjYW4gYmUgcHJvcGFnYXRlZCB0byB0aGUgSW5kZXhTY2FuRGVzYyB3 aGVuIHRoZSBzY2FuIGlzIHN0YXJ0ZWQuCisJCSAqCisJCSAqIE5vdGU6IEFzIHdpdGggU29ydCwg dGhlIGluZGV4IHNjYW4gbm9kZSBpcyByZXNwb25zaWJsZSBmb3IgcmVhY3RpbmcKKwkJICogcHJv cGVybHkgdG8gY2hhbmdlcyB0byB0aGlzIHBhcmFtZXRlci4KKwkJICovCisJCUluZGV4U2NhblN0 YXRlICppc3N0YXRlID0gKEluZGV4U2NhblN0YXRlICopIGNoaWxkX25vZGU7CisKKwkJaXNzdGF0 ZS0+aXNzX1R1cGxlc05lZWRlZCA9IHR1cGxlc19uZWVkZWQ7CisKKwkJLyogSWYgc2NhbiBhbHJl YWR5IHN0YXJ0ZWQsIHVwZGF0ZSB0aGUgSW5kZXhTY2FuRGVzYyB0b28gKi8KKwkJaWYgKGlzc3Rh dGUtPmlzc19TY2FuRGVzYykKKwkJCWlzc3RhdGUtPmlzc19TY2FuRGVzYy0+dHVwbGVzX25lZWRl ZCA9IHR1cGxlc19uZWVkZWQ7CisJfQorCWVsc2UgaWYgKElzQShjaGlsZF9ub2RlLCBJbmRleE9u bHlTY2FuU3RhdGUpKQorCXsKKwkJLyogU2FtZSBjb21tZW50cyBhcyBmb3IgSW5kZXhTY2FuICov CisJCUluZGV4T25seVNjYW5TdGF0ZSAqaW9zc3RhdGUgPSAoSW5kZXhPbmx5U2NhblN0YXRlICop IGNoaWxkX25vZGU7CisKKwkJaW9zc3RhdGUtPmlvc3NfVHVwbGVzTmVlZGVkID0gdHVwbGVzX25l ZWRlZDsKKworCQkvKiBJZiBzY2FuIGFscmVhZHkgc3RhcnRlZCwgdXBkYXRlIHRoZSBJbmRleFNj YW5EZXNjIHRvbyAqLworCQlpZiAoaW9zc3RhdGUtPmlvc3NfU2NhbkRlc2MpCisJCQlpb3NzdGF0 ZS0+aW9zc19TY2FuRGVzYy0+dHVwbGVzX25lZWRlZCA9IHR1cGxlc19uZWVkZWQ7CisJfQogCiAJ LyoKIAkgKiBJbiBwcmluY2lwbGUgd2UgY291bGQgZGVzY2VuZCB0aHJvdWdoIGFueSBwbGFuIG5v ZGUgdHlwZSB0aGF0IGlzCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5k ZXhvbmx5c2Nhbi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYwpp bmRleCBmZjNlOGYzMDIuLjhhMDY4NjM0YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0 b3Ivbm9kZUluZGV4b25seXNjYW4uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5k ZXhvbmx5c2Nhbi5jCkBAIC05Niw2ICs5Niw5IEBAIEluZGV4T25seU5leHQoSW5kZXhPbmx5U2Nh blN0YXRlICpub2RlKQogCQlub2RlLT5pb3NzX1NjYW5EZXNjID0gc2NhbmRlc2M7CiAJCUFzc2Vy dChub2RlLT5pb3NzX1NjYW5EZXNjLT54c193YW50X2l0dXApOwogCisJCS8qIFBhc3MgZG93biBh bnkgdHVwbGUgYm91bmQgKi8KKwkJc2NhbmRlc2MtPnR1cGxlc19uZWVkZWQgPSBub2RlLT5pb3Nz X1R1cGxlc05lZWRlZDsKKwogCQkvKgogCQkgKiBJZiBubyBydW4tdGltZSBrZXlzIHRvIGNhbGN1 bGF0ZSBvciB0aGV5IGFyZSByZWFkeSwgZ28gYWhlYWQgYW5kCiAJCSAqIHBhc3MgdGhlIHNjYW5r ZXlzIHRvIHRoZSBpbmRleCBBTS4KQEAgLTUyNCw2ICs1MjcsNyBAQCBFeGVjSW5pdEluZGV4T25s eVNjYW4oSW5kZXhPbmx5U2NhbiAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJ aW5kZXhzdGF0ZS0+aW9zc19SdW50aW1lS2V5c1JlYWR5ID0gZmFsc2U7CiAJaW5kZXhzdGF0ZS0+ aW9zc19SdW50aW1lS2V5cyA9IE5VTEw7CiAJaW5kZXhzdGF0ZS0+aW9zc19OdW1SdW50aW1lS2V5 cyA9IDA7CisJaW5kZXhzdGF0ZS0+aW9zc19UdXBsZXNOZWVkZWQgPSAtMTsKIAogCS8qCiAJICog YnVpbGQgdGhlIGluZGV4IHNjYW4ga2V5cyBmcm9tIHRoZSBpbmRleCBxdWFsaWZpY2F0aW9uCkBA IC03MDAsNiArNzA0LDkgQEAgRXhlY0luZGV4T25seVNjYW5Jbml0aWFsaXplRFNNKEluZGV4T25s eVNjYW5TdGF0ZSAqbm9kZSwKIAkJCQkJCQkJIHBpc2Nhbik7CiAJQXNzZXJ0KG5vZGUtPmlvc3Nf U2NhbkRlc2MtPnhzX3dhbnRfaXR1cCk7CiAKKwkvKiBQYXNzIGRvd24gYW55IHR1cGxlIGJvdW5k ICovCisJbm9kZS0+aW9zc19TY2FuRGVzYy0+dHVwbGVzX25lZWRlZCA9IG5vZGUtPmlvc3NfVHVw bGVzTmVlZGVkOworCiAJLyoKIAkgKiBJZiBubyBydW4tdGltZSBrZXlzIHRvIGNhbGN1bGF0ZSBv ciB0aGV5IGFyZSByZWFkeSwgZ28gYWhlYWQgYW5kIHBhc3MKIAkgKiB0aGUgc2NhbmtleXMgdG8g dGhlIGluZGV4IEFNLgpAQCAtNzY1LDYgKzc3Miw5IEBAIEV4ZWNJbmRleE9ubHlTY2FuSW5pdGlh bGl6ZVdvcmtlcihJbmRleE9ubHlTY2FuU3RhdGUgKm5vZGUsCiAJCQkJCQkJCSBwaXNjYW4pOwog CUFzc2VydChub2RlLT5pb3NzX1NjYW5EZXNjLT54c193YW50X2l0dXApOwogCisJLyogUGFzcyBk b3duIGFueSB0dXBsZSBib3VuZCAqLworCW5vZGUtPmlvc3NfU2NhbkRlc2MtPnR1cGxlc19uZWVk ZWQgPSBub2RlLT5pb3NzX1R1cGxlc05lZWRlZDsKKwogCS8qCiAJICogSWYgbm8gcnVuLXRpbWUg a2V5cyB0byBjYWxjdWxhdGUgb3IgdGhleSBhcmUgcmVhZHksIGdvIGFoZWFkIGFuZCBwYXNzCiAJ ICogdGhlIHNjYW5rZXlzIHRvIHRoZSBpbmRleCBBTS4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2V4ZWN1dG9yL25vZGVJbmRleHNjYW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRl eHNjYW4uYwppbmRleCBhMjVlNDBlMWYuLjc2NDFhZGMxNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25v ZGVJbmRleHNjYW4uYwpAQCAtMTE1LDYgKzExNSw5IEBAIEluZGV4TmV4dChJbmRleFNjYW5TdGF0 ZSAqbm9kZSkKIAogCQlub2RlLT5pc3NfU2NhbkRlc2MgPSBzY2FuZGVzYzsKIAorCQkvKiBQYXNz IGRvd24gYW55IHR1cGxlIGJvdW5kICovCisJCXNjYW5kZXNjLT50dXBsZXNfbmVlZGVkID0gbm9k ZS0+aXNzX1R1cGxlc05lZWRlZDsKKwogCQkvKgogCQkgKiBJZiBubyBydW4tdGltZSBrZXlzIHRv IGNhbGN1bGF0ZSBvciB0aGV5IGFyZSByZWFkeSwgZ28gYWhlYWQgYW5kCiAJCSAqIHBhc3MgdGhl IHNjYW5rZXlzIHRvIHRoZSBpbmRleCBBTS4KQEAgLTIxMSw2ICsyMTQsOSBAQCBJbmRleE5leHRX aXRoUmVvcmRlcihJbmRleFNjYW5TdGF0ZSAqbm9kZSkKIAogCQlub2RlLT5pc3NfU2NhbkRlc2Mg PSBzY2FuZGVzYzsKIAorCQkvKiBQYXNzIGRvd24gYW55IHR1cGxlIGJvdW5kICovCisJCXNjYW5k ZXNjLT50dXBsZXNfbmVlZGVkID0gbm9kZS0+aXNzX1R1cGxlc05lZWRlZDsKKwogCQkvKgogCQkg KiBJZiBubyBydW4tdGltZSBrZXlzIHRvIGNhbGN1bGF0ZSBvciB0aGV5IGFyZSByZWFkeSwgZ28g YWhlYWQgYW5kCiAJCSAqIHBhc3MgdGhlIHNjYW5rZXlzIHRvIHRoZSBpbmRleCBBTS4KQEAgLTk4 Miw2ICs5ODgsNyBAQCBFeGVjSW5pdEluZGV4U2NhbihJbmRleFNjYW4gKm5vZGUsIEVTdGF0ZSAq ZXN0YXRlLCBpbnQgZWZsYWdzKQogCWluZGV4c3RhdGUtPmlzc19SdW50aW1lS2V5c1JlYWR5ID0g ZmFsc2U7CiAJaW5kZXhzdGF0ZS0+aXNzX1J1bnRpbWVLZXlzID0gTlVMTDsKIAlpbmRleHN0YXRl LT5pc3NfTnVtUnVudGltZUtleXMgPSAwOworCWluZGV4c3RhdGUtPmlzc19UdXBsZXNOZWVkZWQg PSAtMTsKIAogCS8qCiAJICogYnVpbGQgdGhlIGluZGV4IHNjYW4ga2V5cyBmcm9tIHRoZSBpbmRl eCBxdWFsaWZpY2F0aW9uCkBAIC0xNzI2LDYgKzE3MzMsOSBAQCBFeGVjSW5kZXhTY2FuSW5pdGlh bGl6ZURTTShJbmRleFNjYW5TdGF0ZSAqbm9kZSwKIAkJCQkJCQkJIG5vZGUtPmlzc19OdW1PcmRl ckJ5S2V5cywKIAkJCQkJCQkJIHBpc2Nhbik7CiAKKwkvKiBQYXNzIGRvd24gYW55IHR1cGxlIGJv dW5kICovCisJbm9kZS0+aXNzX1NjYW5EZXNjLT50dXBsZXNfbmVlZGVkID0gbm9kZS0+aXNzX1R1 cGxlc05lZWRlZDsKKwogCS8qCiAJICogSWYgbm8gcnVuLXRpbWUga2V5cyB0byBjYWxjdWxhdGUg b3IgdGhleSBhcmUgcmVhZHksIGdvIGFoZWFkIGFuZCBwYXNzCiAJICogdGhlIHNjYW5rZXlzIHRv IHRoZSBpbmRleCBBTS4KQEAgLTE3OTAsNiArMTgwMCw5IEBAIEV4ZWNJbmRleFNjYW5Jbml0aWFs aXplV29ya2VyKEluZGV4U2NhblN0YXRlICpub2RlLAogCQkJCQkJCQkgbm9kZS0+aXNzX051bU9y ZGVyQnlLZXlzLAogCQkJCQkJCQkgcGlzY2FuKTsKIAorCS8qIFBhc3MgZG93biBhbnkgdHVwbGUg Ym91bmQgKi8KKwlub2RlLT5pc3NfU2NhbkRlc2MtPnR1cGxlc19uZWVkZWQgPSBub2RlLT5pc3Nf VHVwbGVzTmVlZGVkOworCiAJLyoKIAkgKiBJZiBubyBydW4tdGltZSBrZXlzIHRvIGNhbGN1bGF0 ZSBvciB0aGV5IGFyZSByZWFkeSwgZ28gYWhlYWQgYW5kIHBhc3MKIAkgKiB0aGUgc2NhbmtleXMg dG8gdGhlIGluZGV4IEFNLgotLSAKMi41MS4wCgo= --0000000000007589150649a4074c Content-Type: application/octet-stream; name="v9-0005-Add-prefetching-to-index-scans-using-batch-interf.patch" Content-Disposition: attachment; filename="v9-0005-Add-prefetching-to-index-scans-using-batch-interf.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ml1k3l3o6 RnJvbSAyMTY2ZmM3MTc1MDAzMzViYTZkYzBjYmU4MTdjNzU4MTdjN2M0MThlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFNh dCwgMTUgTm92IDIwMjUgMTQ6MDM6NTggLTA1MDAKU3ViamVjdDogW1BBVENIIHY5IDA1LzEwXSBB ZGQgcHJlZmV0Y2hpbmcgdG8gaW5kZXggc2NhbnMgdXNpbmcgYmF0Y2gKIGludGVyZmFjZXMuCgpU aGlzIGNvbW1pdCBpbXBsZW1lbnRzIEkvTyBwcmVmZXRjaGluZyBmb3IgaW5kZXggc2NhbnMsIG1h ZGUgcG9zc2libGUgYnkKdGhlIHJlY2VudCBhZGRpdGlvbiBvZiBiYXRjaGluZyBpbnRlcmZhY2Vz IHRvIGJvdGggdGhlIHRhYmxlIEFNIGFuZAppbmRleCBBTSBBUElzLgoKVGhlIGFtZ2V0YmF0Y2gg aW5kZXggQU0gaW50ZXJmYWNlIHByb3ZpZGVzIGJhdGNoZXMgb2YgbWF0Y2hpbmcgVElEcwoocmF0 aGVyIHRoYW4gb25lIHR1cGxlIGF0IGEgdGltZSksIGVhY2ggb2Ygd2hpY2ggbXVzdCBiZSB0YWtl biBmcm9tCmluZGV4IHR1cGxlcyB0aGF0IGFwcGVhciB0b2dldGhlciBvbiBhIHNpbmdsZSBpbmRl eCBwYWdlLiAgVGhpcyBhbGxvd3MKbXVsdGlwbGUgYmF0Y2hlcyB0byBiZSBoZWxkIG9wZW4gc2lt dWx0YW5lb3VzbHkuICBHaXZpbmcgdGhlIHRhYmxlIEFNIGFuCmV4cGxpY2l0IHVuZGVyc3RhbmRp bmcgb2YgaW5kZXggQU0gY29uY2VwdHMvaW5kZXggcGFnZSBib3VuZGFyaWVzIGFsbG93cwppdCB0 byBjb25zaWRlciBhbGwgb2YgdGhlIHJlbGV2YW50IGNvc3RzIGFuZCBiZW5lZml0cy4KClByZWZl dGNoaW5nIGlzIGltcGxlbWVudGVkIHVzaW5nIGEgcHJlZmV0Y2hpbmcgcG9zaXRpb24gdW5kZXIg dGhlCmNvbnRyb2wgb2YgdGhlIHRhYmxlIEFNIGFuZCBjb3JlIGNvZGUuICBUaGlzIGlzIGNsb3Nl bHkgcmVsYXRlZCB0byB0aGUKc2NhbiBwb3NpdGlvbiBhZGRlZCBieSBjb21taXQgRklYTUUsIHdo aWNoIGludHJvZHVjZWQgdGhlIGFtZ2V0YmF0Y2gKaW50ZXJmYWNlLiAgQSByZWFkIHN0cmVhbSBj YWxsYmFjayBhZHZhbmNlcyB0aGUgcmVhZCBzdHJlYW0gYXMgbmVlZGVkIHRvCnByb3ZpZGUgc3Vm ZmljaWVudGx5IG1hbnkgaGVhcCBibG9jayBudW1iZXJzIHRvIG1haW50YWluIHRoZSByZWFkCnN0 cmVhbSdzIHRhcmdldCBwcmVmZXRjaCBkaXN0YW5jZS4KClRlc3RpbmcgaGFzIHNob3duIHRoYXQg aW5kZXggcHJlZmV0Y2hpbmcgY2FuIG1ha2UgaW5kZXggc2NhbnMgbXVjaApmYXN0ZXIuICBMYXJn ZSByYW5nZSBzY2FucyB0aGF0IHJldHVybiBtYW55IHR1cGxlcyBjYW4gYmUgYXMgbXVjaCBhcyAz NXgKZmFzdGVyLgoKQW4gaW1wb3J0YW50IGdvYWwgb2YgdGhlIGFtZ2V0YmF0Y2ggZGVzaWduIGlz IHRvIGVuYWJsZSB0aGUgdGFibGUgQU0ncwpyZWFkIHN0cmVhbSBjYWxsYmFjayB0byBhZHZhbmNl IGl0cyBwcmVmZXRjaCBwb3NpdGlvbiB1c2luZyBUSURzIHRoYXQKYXBwZWFyIG9uIGEgbGVhZiBw YWdlIHRoYXQncyBhaGVhZCBvZiB0aGUgY3VycmVudCBzY2FuIHBvc2l0aW9uJ3MgbGVhZgpwYWdl LiAgVGhpcyBpcyBjcnVjaWFsIHdpdGggc2NhbnMgb2YgaW5kZXhlcyB3aGVyZSBlYWNoIGxlYWYg cGFnZQpoYXBwZW5zIHRvIGhhdmUgcmVsYXRpdmVseSBmZXcgZGlzdGluY3QgaGVhcCBibG9ja3Mg YW1vbmcgaXRzIG1hdGNoaW5nClRJRHMgKGFzIHdlbGwgYXMgd2l0aCBzY2FucyB3aXRoIGxlYWYg cGFnZXMgdGhhdCBoYXZlIHJlbGF0aXZlbHkgZmV3CnRvdGFsIG1hdGNoaW5nIGl0ZW1zKS4gIElu ZGV4IHNjYW5zIGNhbiBoYXZlIGFzIG1hbnkgYXMgNjQgb3BlbiBiYXRjaGVzLAp3aGljaCB0ZXN0 aW5nIGhhcyBzaG93biB0byBiZSBhYm91dCB0aGUgbWF4aW11bSBudW1iZXIgdGhhdCBjYW4gZXZl ciBiZQp1c2VmdWwuICBCYXRjaGVzIGFyZSBtYWludGFpbmVkIGluIHNjYW4gb3JkZXIgdXNpbmcg YSBzaW1wbGUgcmluZyBidWZmZXIKZGF0YSBzdHJ1Y3R1cmUuCgpJbiByYXJlIGNhc2VzIHdoZXJl IHRoZSBzY2FuIGV4Y2VlZHMgdGhpcyBxdWFzaS1hcmJpdHJhcnkgbGltaXQgb2YgNjQsCnRoZSBy ZWFkIHN0cmVhbSBpcyB0ZW1wb3JhcmlseSBwYXVzZWQuICBQcmVmZXRjaGluZyAodmlhIHRoZSBy ZWFkCnN0cmVhbSkgaXMgcmVzdW1lZCBvbmx5IGFmdGVyIHRoZSBzY2FuIHBvc2l0aW9uIGFkdmFu Y2VzIGJleW9uZCBpdHMKY3VycmVudCBvcGVuIGJhdGNoIGFuZCB0aGVuIGZyZWVzIGl0IGJ5IGNh bGxpbmcgYW1mcmVlYmF0Y2ggYW5kIHJlbW92aW5nCml0IGZyb20gdGhlIHNjYW4ncyBiYXRjaCBy aW5nIGJ1ZmZlci4gIFRlc3RpbmcgaGFzIHNob3duIHRoYXQgaXQgaXNuJ3QKdmVyeSBjb21tb24g Zm9yIHNjYW5zIHRvIGhvbGQgb3BlbiBtb3JlIHRoYW4gYWJvdXQgMTAgYmF0Y2hlcyB0byBnZXQg dGhlCmRlc2lyZWQgSS9PIHByZWZldGNoIGRpc3RhbmNlLgoKQXV0aG9yOiBUb21hcyBWb25kcmEg PHRvbWFzQHZvbmRyYS5tZT4KQXV0aG9yOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+ClJl dmlld2VkLUJ5OiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+ClJldmlld2VkLUJ5 OiBUaG9tYXMgTXVucm8gPHRob21hcy5tdW5yb0BnbWFpbC5jb20+CkRpc2N1c3Npb246IGh0dHBz Oi8vcG9zdGdyLmVzL20vY2Y4NWY0NmYtYjAyZi0wNWIyLTUyNDgtNTAwMGI4OTRlYmFiQGVudGVy cHJpc2VkYi5jb20KLS0tCiBzcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oICAgICAgICAgICAg ICAgICAgfCAgNDIgKy0KIHNyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmggICAgICAgICAgICAg ICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jICAg ICAgfCAzMjggKysrKysrKysrKysrKystCiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhi YXRjaC5jICAgICAgICAgfCAgNTQgKystCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL1JFQURN RSAgICAgICAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3Rz aXplLmMgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0 ZXJzLmRhdCAgICAgfCAgIDcgKwogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNv bmYuc2FtcGxlIHwgICAxICsKIGRvYy9zcmMvc2dtbC9jb25maWcuc2dtbCAgICAgICAgICAgICAg ICAgICAgICB8ICAxNiArCiBkb2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21sICAgICAgICAgICAgICAg ICAgICAgfCAzODIgKysrKysrKysrKysrKysrLS0tCiBkb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV90 YWJsZS5zZ21sICAgICAgICAgICAgfCAgMTMgKy0KIGRvYy9zcmMvc2dtbC90YWJsZWFtLnNnbWwg ICAgICAgICAgICAgICAgICAgICB8ICAgOCArCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5 c3ZpZXdzLm91dCAgICAgICAgfCAgIDMgKy0KIDEzIGZpbGVzIGNoYW5nZWQsIDc5NyBpbnNlcnRp b25zKCspLCA2MSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3Mv cmVsc2Nhbi5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaAppbmRleCA1OWMzMzk3OWUu LjExODNiZDAxYiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaAorKysg Yi9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVk ZSAibm9kZXMvdGlkYml0bWFwLmgiCiAjaW5jbHVkZSAicG9ydC9hdG9taWNzLmgiCiAjaW5jbHVk ZSAic3RvcmFnZS9idWYuaCIKKyNpbmNsdWRlICJzdG9yYWdlL3JlYWRfc3RyZWFtLmgiCiAjaW5j bHVkZSAic3RvcmFnZS9yZWxmaWxlbG9jYXRvci5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc3Bpbi5o IgogI2luY2x1ZGUgInV0aWxzL3JlbGNhY2hlLmgiCkBAIC0xMjQsNiArMTI1LDcgQEAgdHlwZWRl ZiBzdHJ1Y3QgUGFyYWxsZWxCbG9ja1RhYmxlU2NhbldvcmtlckRhdGEgKlBhcmFsbGVsQmxvY2tU YWJsZVNjYW5Xb3JrZXI7CiB0eXBlZGVmIHN0cnVjdCBJbmRleEZldGNoVGFibGVEYXRhCiB7CiAJ UmVsYXRpb24JcmVsOworCVJlYWRTdHJlYW0gKnJzOwogfSBJbmRleEZldGNoVGFibGVEYXRhOwog CiAvKgpAQCAtMjMzLDggKzIzNSwxNCBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5CYXRjaERh dGEgKkluZGV4U2NhbkJhdGNoOwogICogTWF4aW11bSBudW1iZXIgb2YgYmF0Y2hlcyAobGVhZiBw YWdlcykgd2UgY2FuIGtlZXAgaW4gbWVtb3J5LiAgV2UgbmVlZCBhCiAgKiBtaW5pbXVtIG9mIHR3 bywgc2luY2Ugd2UnbGwgb25seSBjb25zaWRlciByZWxlYXNpbmcgb25lIGJhdGNoIHdoZW4gYW5v dGhlcgogICogaXMgcmVhZC4KKyAqCisgKiBUaGUgY2hvaWNlIG9mIDY0IGJhdGNoZXMgaXMgYXJi aXRyYXJ5LiAgSXQncyBhYm91dCAxTUIgb2YgZGF0YSB3aXRoIDhLQgorICogcGFnZXMgKDUxMmtC IGZvciBwYWdlcywgYW5kIHRoZW4gYSBiaXQgb2Ygb3ZlcmhlYWQpLiBXZSBzaG91bGQgbm90IHJl YWxseQorICogbmVlZCB0aGlzIG1hbnkgYmF0Y2hlcyBpbiBtb3N0IGNhc2VzLCB0aG91Z2guIFRo ZSByZWFkIHN0cmVhbSBsb29rcyBhaGVhZAorICoganVzdCBlbm91Z2ggdG8gcXVldWUgZW5vdWdo IElPcywgYWRqdXN0aW5nIHRoZSBkaXN0YW5jZSAoVElEcywgYnV0CisgKiB1bHRpbWF0ZWx5IHRo ZSBudW1iZXIgb2YgZnV0dXJlIGJhdGNoZXMpIHRvIG1lZXQgdGhhdC4KICAqLwotI2RlZmluZSBJ TkRFWF9TQ0FOX01BWF9CQVRDSEVTCQkyCisjZGVmaW5lIElOREVYX1NDQU5fTUFYX0JBVENIRVMJ CTY0CiAjZGVmaW5lIElOREVYX1NDQU5fQ0FDSEVfQkFUQ0hFUwkyCiAKIC8qCkBAIC0yNDYsMTIg KzI1NCwyNCBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5CYXRjaERhdGEgKkluZGV4U2NhbkJh dGNoOwogICogbWF0Y2hlcyBpbi4gIEhvd2V2ZXIsIHRhYmxlIEFNcyBhcmUgZnJlZSB0byBmZXRj aCB0YWJsZSB0dXBsZXMgaW4gd2hhdGV2ZXIKICAqIG9yZGVyIGlzIG1vc3QgY29udmVuaWVudC9l ZmZpY2llbnQgLS0gcHJvdmlkZWQgdGhhdCBzdWNoIHJlb3JkZXJpbmcgY2Fubm90CiAgKiBhZmZl Y3QgdGhlIG9yZGVyIHRoYXQgdGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90IGxhdGVyIHJldHVybnMg dHVwbGVzIGluLgorICoKKyAqIFRoaXMgZGF0YSBzdHJ1Y3R1cmUgYWxzbyBwcm92aWRlcyB0YWJs ZSBBTXMgd2l0aCBhIHdheSB0byByZWFkIGFoZWFkIG9mIHRoZQorICogY3VycmVudCByZWFkIHBv c2l0aW9uIGJ5IF9tdWx0aXBsZV8gYmF0Y2hlcy9pbmRleCBwYWdlcy4gIFRoZSBmdXJ0aGVyIG91 dAorICogdGhlIHRhYmxlIEFNIHJlYWRzIGFoZWFkIGxpa2UgdGhpcywgdGhlIGZ1cnRoZXIgaXQg Y2FuIHNlZSBpbnRvIHRoZSBmdXR1cmUuCisgKiBUaGF0IHdheSB0aGUgdGFibGUgQU0gaXMgYWJs ZSB0byByZW9yZGVyIHdvcmsgYXMgYWdncmVzc2l2ZWx5IGFzIGRlc2lyZWQuCisgKiBGb3IgZXhh bXBsZSwgaW5kZXggc2NhbnMgc29tZXRpbWVzIG5lZWQgdG8gcmVhZGFoZWFkIGJ5IGFzIG1hbnkg YXMgYSBmZXcKKyAqIGRvemVuIGFtZ2V0YmF0Y2ggYmF0Y2hlcyBpbiBvcmRlciB0byBtYWludGFp biBhbiBvcHRpbWFsIEkvTyBwcmVmZXRjaAorICogZGlzdGFuY2UgKGRpc3RhbmNlIGZvciByZWFk aW5nIHRhYmxlIGJsb2Nrcy9mZXRjaGluZyB0YWJsZSB0dXBsZXMpLgogICovCiB0eXBlZGVmIHN0 cnVjdCBCYXRjaFJpbmdCdWZmZXIKIHsKKwkvKiBDdXJyZW50IGRpcmVjdGlvbiwgaGVscHMgZGV0 ZXJtaW5lIHdoZW4gdG8gaW52YWxpZGF0ZSByZWFkIHN0cmVhbSAqLworCVNjYW5EaXJlY3Rpb24g ZGlyZWN0aW9uOworCiAJLyogY3VycmVudCBwb3NpdGlvbnMgaW4gYmF0Y2hlc1tdIGZvciBzY2Fu ICovCiAJQmF0Y2hSaW5nSXRlbVBvcyBzY2FuUG9zOwkvKiBzY2FuJ3MgcmVhZCBwb3NpdGlvbiAq LwogCUJhdGNoUmluZ0l0ZW1Qb3MgbWFya1BvczsJLyogbWFyay9yZXN0b3JlIHBvc2l0aW9uICov CisJQmF0Y2hSaW5nSXRlbVBvcyBwcmVmZXRjaFBvczsJLyogcHJlZmV0Y2hpbmcgcG9zaXRpb24g Ki8KIAogCUluZGV4U2NhbkJhdGNoIG1hcmtCYXRjaDsKIApAQCAtMjgwLDYgKzMwMCwyNiBAQCB0 eXBlZGVmIHN0cnVjdCBCYXRjaFJpbmdCdWZmZXIKIAkgKi8KIAlJbmRleFNjYW5CYXRjaCBiYXRj aGVzW0lOREVYX1NDQU5fTUFYX0JBVENIRVNdOwogCisJLyoKKwkgKiBQcmVmZXRjaGluZyByZWxh dGVkIHN0YXRlLgorCSAqCisJICogWFhYIFNob3VsZCB3ZSBtb3ZlIHRoaXMgdG8gYSBoZWFwYW0g c3RydWN0LCBzdWNoIGFzIEluZGV4RmV0Y2hIZWFwRGF0YT8KKwkgKgorCSAqIGN1cnJlbnRQcmVm ZXRjaEJsb2NrIGlzIHRoZSB0YWJsZSBBTSBibG9jayBudW1iZXIgdGhhdCB3YXMgcmV0dXJuZWQg YnkKKwkgKiBpdHMgcmVhZCBzdHJlYW0gY2FsbGJhY2sgbW9zdCByZWNlbnRseS4gIFVzZWQgdG8g c3VwcHJlc3MgZHVwbGljYXRlCisJICogc3VjY2Vzc2l2ZSByZWFkIHN0cmVhbSBibG9jayByZXF1 ZXN0cy4KKwkgKgorCSAqIE9jY2FzaW9uYWxseSwgdGhlIHJlYWQgc3RyZWFtIGNhbGxiYWNrIHdp bGwgcmVxdWVzdCBhbm90aGVyIHRhYmxlIGJsb2NrCisJICogd2hlbiB0aGUgc2NhbiBoYXMgYWxy ZWFkeSBzdG9yZWQgSU5ERVhfU0NBTl9NQVhfQkFUQ0hFUy1tYW55IGJhdGNoZXMuCisJICogVGhl IHBhdXNlZCBmbGFnIGNhbiBzZXQgdG8gcmVtZW1iZXIgdGhhdCB0aGUgY2FsbGJhY2sgaGFkIHRv IHJldHVybgorCSAqIHJlYWRfc3RyZWFtX3BhdXNlKCkgKHJhdGhlciB0aGFuIHRoZSBuZXh0IGJs b2NrIGluIGxpbmUgdG8gYmUgcmVhZCkuCisJICogV2hlbiB0aGUgc2NhbiBjYW4gc3Vic2VxdWVu dGx5IGNvbnN1bWVzIGVub3VnaCBzY2FuUG9zIGl0ZW1zIHRvIG1ha2UgaXQKKwkgKiBzYWZlIHRv IGZyZWUgYW5vdGhlciBiYXRjaCwgaXQgbXVzdCBjaGVjayB0aGlzIGZsYWcuICBJZiB0aGUgZmxh ZyBpcworCSAqIHNldCwgdGhlbiB0aGUgc2NhbiBzaG91bGQgY2FsbCByZWFkX3N0cmVhbV9yZXN1 bWUgKGFuZCB1bnNldCB0aGUgZmxhZykuCisJICovCisJQmxvY2tOdW1iZXIgY3VycmVudFByZWZl dGNoQmxvY2s7CisJYm9vbAkJcGF1c2VkOworCiAJLyogbnVtYmVyIG9mIGl0ZW1zIHRvIHJlc29s dmUgZHVyaW5nIHZpc2liaWxpdHkgY2hlY2tzICovCiAJaW50CQkJdm1JdGVtczsKIApkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL2Nvc3QuaCBiL3NyYy9pbmNsdWRlL29wdGltaXpl ci9jb3N0LmgKaW5kZXggZjJmZDVkMzE1Li40MTkzMDBhNmIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL29wdGltaXplci9jb3N0LmgKKysrIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL2Nvc3QuaApA QCAtNTIsNiArNTIsNyBAQCBleHRlcm4gUEdETExJTVBPUlQgaW50IG1heF9wYXJhbGxlbF93b3Jr ZXJzX3Blcl9nYXRoZXI7CiBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVfc2Vxc2NhbjsK IGV4dGVybiBQR0RMTElNUE9SVCBib29sIGVuYWJsZV9pbmRleHNjYW47CiBleHRlcm4gUEdETExJ TVBPUlQgYm9vbCBlbmFibGVfaW5kZXhvbmx5c2NhbjsKK2V4dGVybiBQR0RMTElNUE9SVCBib29s IGVuYWJsZV9pbmRleHNjYW5fcHJlZmV0Y2g7CiBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFi bGVfYml0bWFwc2NhbjsKIGV4dGVybiBQR0RMTElNUE9SVCBib29sIGVuYWJsZV90aWRzY2FuOwog ZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgZW5hYmxlX3NvcnQ7CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hl YXAvaGVhcGFtX2hhbmRsZXIuYwppbmRleCBlZjRkYjY5YjMuLmRlNzFlNDdlYSAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYworKysgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCkBAIC0zNyw2ICszNyw3IEBACiAjaW5j bHVkZSAiY29tbWFuZHMvcHJvZ3Jlc3MuaCIKICNpbmNsdWRlICJleGVjdXRvci9leGVjdXRvci5o IgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1ZGUgIm9wdGltaXplci9jb3N0LmgiCiAj aW5jbHVkZSAicGdzdGF0LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9idWZtZ3IuaCIKICNpbmNsdWRl ICJzdG9yYWdlL2J1ZnBhZ2UuaCIKQEAgLTYwLDYgKzYxLDkgQEAgc3RhdGljIEJsb2NrTnVtYmVy IGhlYXBhbV9zY2FuX2dldF9ibG9ja3NfZG9uZShIZWFwU2NhbkRlc2MgaHNjYW4pOwogc3RhdGlj IGJvb2wgQml0bWFwSGVhcFNjYW5OZXh0QmxvY2soVGFibGVTY2FuRGVzYyBzY2FuLAogCQkJCQkJ CQkJYm9vbCAqcmVjaGVjaywKIAkJCQkJCQkJCXVpbnQ2NCAqbG9zc3lfcGFnZXMsIHVpbnQ2NCAq ZXhhY3RfcGFnZXMpOworc3RhdGljIEJsb2NrTnVtYmVyIGhlYXBhbV9nZXRuZXh0X3N0cmVhbShS ZWFkU3RyZWFtICpzdHJlYW0sCisJCQkJCQkJCQkJIHZvaWQgKmNhbGxiYWNrX3ByaXZhdGVfZGF0 YSwKKwkJCQkJCQkJCQkgdm9pZCAqcGVyX2J1ZmZlcl9kYXRhKTsKIAogCiAvKiAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KQEAgLTg1LDYgKzg5LDcgQEAgaGVhcGFtX2luZGV4X2ZldGNoX2JlZ2luKFJlbGF0aW9u IHJlbCkKIAlJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuID0gcGFsbG9jX29iamVjdChJbmRleEZl dGNoSGVhcERhdGEpOwogCiAJaHNjYW4tPnhzX2Jhc2UucmVsID0gcmVsOworCWhzY2FuLT54c19i YXNlLnJzID0gTlVMTDsKIAloc2Nhbi0+eHNfY2J1ZiA9IEludmFsaWRCdWZmZXI7CiAJaHNjYW4t PnhzX2JsayA9IEludmFsaWRCbG9ja051bWJlcjsKIAloc2Nhbi0+dm1idWYgPSBJbnZhbGlkQnVm ZmVyOwpAQCAtOTcsNiArMTAyLDkgQEAgaGVhcGFtX2luZGV4X2ZldGNoX3Jlc2V0KEluZGV4RmV0 Y2hUYWJsZURhdGEgKnNjYW4pCiB7CiAJSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiA9IChJbmRl eEZldGNoSGVhcERhdGEgKikgc2NhbjsKIAorCWlmIChzY2FuLT5ycykKKwkJcmVhZF9zdHJlYW1f cmVzZXQoc2Nhbi0+cnMpOworCiAJLyogZGVsaWJlcmF0ZWx5IGRvbid0IGRyb3AgVk0gYnVmZmVy IHBpbiBoZXJlICovCiAJaWYgKEJ1ZmZlcklzVmFsaWQoaHNjYW4tPnhzX2NidWYpKQogCXsKQEAg LTExMyw2ICsxMjEsOSBAQCBoZWFwYW1faW5kZXhfZmV0Y2hfZW5kKEluZGV4RmV0Y2hUYWJsZURh dGEgKnNjYW4pCiAKIAloZWFwYW1faW5kZXhfZmV0Y2hfcmVzZXQoc2Nhbik7CiAKKwlpZiAoc2Nh bi0+cnMpCisJCXJlYWRfc3RyZWFtX2VuZChzY2FuLT5ycyk7CisKIAlpZiAoaHNjYW4tPnZtYnVm ICE9IEludmFsaWRCdWZmZXIpCiAJewogCQlSZWxlYXNlQnVmZmVyKGhzY2FuLT52bWJ1Zik7CkBA IC0xNDYsNyArMTU3LDE0IEBAIGhlYXBhbV9pbmRleF9mZXRjaF90dXBsZShzdHJ1Y3QgSW5kZXhG ZXRjaFRhYmxlRGF0YSAqc2NhbiwKIAkJaWYgKEJ1ZmZlcklzVmFsaWQoaHNjYW4tPnhzX2NidWYp KQogCQkJUmVsZWFzZUJ1ZmZlcihoc2Nhbi0+eHNfY2J1Zik7CiAKLQkJaHNjYW4tPnhzX2NidWYg PSBSZWFkQnVmZmVyKGhzY2FuLT54c19iYXNlLnJlbCwgaHNjYW4tPnhzX2Jsayk7CisJCS8qCisJ CSAqIFdoZW4gdXNpbmcgYSByZWFkIHN0cmVhbSwgdGhlIHN0cmVhbSB3aWxsIGFscmVhZHkga25v dyB3aGljaCBibG9jaworCQkgKiBudW1iZXIgY29tZXMgbmV4dCAodGhvdWdoIGFuIGFzc2VydGlv biB3aWxsIHZlcmlmeSBhIG1hdGNoIGJlbG93KQorCQkgKi8KKwkJaWYgKHNjYW4tPnJzKQorCQkJ aHNjYW4tPnhzX2NidWYgPSByZWFkX3N0cmVhbV9uZXh0X2J1ZmZlcihzY2FuLT5ycywgTlVMTCk7 CisJCWVsc2UKKwkJCWhzY2FuLT54c19jYnVmID0gUmVhZEJ1ZmZlcihoc2Nhbi0+eHNfYmFzZS5y ZWwsIGhzY2FuLT54c19ibGspOwogCiAJCS8qCiAJCSAqIFBydW5lIHBhZ2Ugd2hlbiBpdCBpcyBw aW5uZWQgZm9yIHRoZSBmaXJzdCB0aW1lCkBAIC0yMDQsNiArMjIyLDQyIEBAIGhlYXBhbV9pbmRl eF9mZXRjaF90dXBsZShzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbiwKICAqIChpbXBv cnRhbnQgZm9yIGlubmVyIGluZGV4IHNjYW5zIG9mIGFudGktam9pbnMgYW5kIHNlbWktam9pbnMp LCBhbmQgdGhlCiAgKiBuZWVkIHRvIG5vdCBob2xkIG9udG8gaW5kZXggbGVhZiBwYWdlcyBmb3Ig dG9vIGxvbmcuCiAgKgorICogRHJvcHBpbmcgbGVhZiBwYWdlIHBpbnMgZWFybHkKKyAqIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogSW4gbm8gZXZlbnQgd2lsbCB0aGUgc2Nh biBiZSBhbGxvd2VkIHRvIGhvbGQgb250byBtb3JlIHRoYW4gb25lIGJhdGNoJ3MKKyAqIGxlYWYg cGFnZSBwaW4gYXQgYSB0aW1lLiAgVGhlIHByaW1hcnkgcmVhc29uIGZvciB0aGlzIHJlc3RyaWN0 aW9uIGlzIHRvCisgKiBhdm9pZCB1bmludGVuZGVkIGludGVyYWN0aW9ucyB3aXRoIHRoZSByZWFk IHN0cmVhbSwgd2hpY2ggaGFzIGl0cyBvd24KKyAqIHN0cmF0ZWd5IGZvciBrZWVwaW5nIHRoZSBu dW1iZXIgb2YgcGlucyBoZWxkIGJ5IHRoZSBiYWNrZW5kIHVuZGVyIGNvbnRyb2wuCisgKgorICog T25jZSB3ZSd2ZSByZXNvbHZlZCB2aXNpYmlsaXR5IGZvciBhbGwgaXRlbXMgaW4gYSBiYXRjaCwg d2UgY2FuIHNhZmVseSBkcm9wCisgKiBpdHMgbGVhZiBwYWdlIHBpbi4gIFRoaXMgaXMgc2FmZSB3 aXRoIHJlc3BlY3QgdG8gY29uY3VycmVudCBWQUNVVU0gYmVjYXVzZQorICogaW5kZXggdmFjdXVt aW5nIHdpbGwgYmxvY2sgb24gYWNxdWlyaW5nIGEgY29uZmxpY3RpbmcgY2xlYW51cCBsb2NrIG9u IHRoZQorICogYmF0Y2gncyBpbmRleCBwYWdlIGR1ZSB0byBvdXIgaG9sZGluZyBhIHBpbiBvbiB0 aGF0IHNhbWUgcGFnZS4gIENvcHlpbmcgdGhlCisgKiByZWxldmFudCB2aXNpYmlsaXR5IG1hcCBk YXRhIGludG8gb3VyIGxvY2FsIGNhY2hlIHN1ZmZpY2VzIHRvIHByZXZlbnQgdW5zYWZlCisgKiBj b25jdXJyZW50IFRJRCByZWN5Y2xpbmc6IGlmIGFueSBvZiB0aGVzZSBUSURzIHBvaW50IHRvIGRl YWQgaGVhcCB0dXBsZXMsCisgKiBWQUNVVU0gY2Fubm90IHBvc3NpYmx5IHJldHVybiBmcm9tIGFt YnVsa2RlbGV0ZSBhbmQgbWFyayB0aGUgcG9pbnRlZC10bworICogaGVhcCBwYWdlcyBhcyBhbGwt dmlzaWJsZS4gIFZBQ1VVTSBfY2FuXyBkbyBzbyBvbmNlIHdlIHJlbGVhc2UgdGhlIGJhdGNoJ3MK KyAqIHBpbiwgYnV0IHRoYXQncyBva2F5OyB3ZSdsbCBiZSB3b3JraW5nIG9mZiBvZiBjYWNoZWQg dmlzaWJpbGl0eSBpbmZvIHRoYXQKKyAqIGluZGljYXRlcyB0aGF0IHRoZSBkZWFkIFRJRHMgYXJl IE5PVCBhbGwtdmlzaWJsZS4KKyAqCisgKiBOb3RlOiBXZSBjYW5ub3QgZHJvcCB0aGUgcGluIGVh cmx5IHdoZW4gdGhlIHNjYW4gdXNlcyBhIG5vbi1NVkNDIHNuYXBzaG90OworICogd2UgbXVzdCBk ZWxheSBpdCB1bnRpbCBhbGwgaGVhcCBmZXRjaGVzIGZvciB0aGUgbG9hZGVkIGJhdGNoIGhhdmUg dGFrZW4KKyAqIHBsYWNlLiAgVGhpcyBpcyB3aHkgd2UgZG9uJ3Qgc3VwcG9ydCBwcmVmZXRjaGlu ZyBkdXJpbmcgc3VjaCBzY2Fucy4gIFNlZQorICogZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbC4K KyAqCisgKiBSZWFkIHN0cmVhbSBhZ3JlZW1lbnQKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICoKKyAqIGhlYXBhbV9iYXRjaF9nZXRuZXh0X3RpZCBtdXN0IHJlbGlhYmx5IGFncmVlIHdpdGgg aGVhcGFtX2dldG5leHRfc3RyZWFtCisgKiBhYm91dCB3aGljaCBoZWFwIGJsb2Nrcy9USURzIHdp bGwgcmVxdWlyZSBhIGhlYXAgZmV0Y2ggKGFuZCB3aGljaCBUSURzCisgKiB3b24ndCBkdWUgdG8g cG9pbnRpbmcgdG8gYW4gYWxsLXZpc2libGUgaGVhcCBwYWdlKS4gIE90aGVyd2lzZSB3ZSByaXNr CisgKiBhbGxvd2luZyB0aGUgcmVhZCBzdHJlYW0gdG8gcmV0dXJuIHVuZXhwZWN0ZWQgaGVhcCBi dWZmZXJzL3BhZ2VzLgorICoKKyAqIENhY2hpbmcgdmlzaWJpbGl0eSBpbmZvcm1hdGlvbiB1cCBm cm9udCBhdm9pZHMgdGhhdCBwcm9ibGVtLiAgSWYgYSBWTSBiaXQKKyAqIGlzIGNvbmN1cnJlbnRs eSBzZXQgKG9yIHVuc2V0KSwgaXQgY2FuJ3QgbWF0dGVyLCBzaW5jZSBldmVyeWJvZHkgd2lsbCB3 b3JrCisgKiBvZmYgb2YgdGhpcyBpbW11dGFibGUgbG9jYWwgY2FjaGUuCisgKgogICogTm90ZSBv biBNZW1vcnkgT3JkZXJpbmcgRWZmZWN0cwogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQogICoKQEAgLTM0OCw2ICs0MDIsNyBAQCBoZWFwYW1fYmF0Y2hfZ2V0bmV4dChJbmRleFNj YW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAogCiAJLyogWFhYOiB3ZSBzaG91 bGQgYXNzZXJ0IHRoYXQgYSBzbmFwc2hvdCBpcyBwdXNoZWQgb3IgcmVnaXN0ZXJlZCAqLwogCUFz c2VydChUcmFuc2FjdGlvbklkSXNWYWxpZChSZWNlbnRYbWluKSk7CisJQXNzZXJ0KGRpcmVjdGlv biA9PSBiYXRjaHJpbmdidWYtPmRpcmVjdGlvbik7CiAKIAlpZiAoIXByaW9yQmF0Y2gpCiAJewpA QCAtMzc0LDYgKzQyOSwxMiBAQCBoZWFwYW1fYmF0Y2hfZ2V0bmV4dChJbmRleFNjYW5EZXNjIHNj YW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAogCXsKIAkJLyoKIAkJICogTmV4dCBiYXRjaCBh bHJlYWR5IGxvYWRlZCBmb3IgdXMuCisJCSAqCisJCSAqIFRoaXMgdXN1YWxseSBoYXBwZW5zIHdo ZW4gaGVhcGFtX2JhdGNoX2dldG5leHRfdGlkIGNhbGxlciBmaW5kcworCQkgKiB0aGF0IGhlYXBh bV9nZXRuZXh0X3N0cmVhbSBhbHJlYWR5IGxvYWRlZCB0aGUgbmV4dCByZXF1aXJlZCBiYXRjaC4K KwkJICogQnV0IHRoZXJlIGFyZSBhbHNvIGNvcm5lciBjYXNlcyB3aGVyZSBpdCB3b3JrcyB0aGUg b3RoZXIgd2F5IGFyb3VuZAorCQkgKiAoY2FzZXMgd2hlcmUgaGVhcGFtX2dldG5leHRfc3RyZWFt J3MgcHJlZmV0Y2hQb3MgaXMgc2xpZ2h0bHkgYmVoaW5kCisJCSAqIGhlYXBhbV9nZXRuZXh0X3N0 cmVhbSdzIHNjYW5Qb3MsIGFuZCBjYXRjaGVzIHVwIGhlcmUpLgogCQkgKi8KIAkJYmF0Y2ggPSBp bmRleF9zY2FuX2JhdGNoKHNjYW4sIHBvcy0+YmF0Y2ggKyAxKTsKIApAQCAtMzk0LDYgKzQ1NSw3 IEBAIGhlYXBhbV9iYXRjaF9nZXRuZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlv biBkaXJlY3Rpb24sCiAJICogYnVmZmVyIChiYXRjaGVzIG11c3Qgc3RheSBpbiBzY2FuIG9yZGVy KS4gIElmIGl0IGlzbid0IHRoZW4gd2Ugc2hvdWxkCiAJICogaGF2ZSBhbHJlYWR5IHJldHVybmVk IHNvbWUgZXhpc3RpbmcgbG9hZGVkIGJhdGNoIGVhcmxpZXIuCiAJICovCisJQXNzZXJ0KCFiYXRj aHJpbmdidWYtPnBhdXNlZCk7CiAJQXNzZXJ0KCFpbmRleF9zY2FuX2JhdGNoX2Z1bGwoc2Nhbikp OwogCUFzc2VydCghcHJpb3JCYXRjaCB8fAogCQkgICAoaW5kZXhfc2Nhbl9iYXRjaF9jb3VudChz Y2FuKSA+IDAgJiYgcHJpb3JCYXRjaC0+ZGlyID09IGRpcmVjdGlvbiAmJgpAQCAtNDMwLDYgKzQ5 Miw0MyBAQCBoZWFwYW1fYmF0Y2hfZ2V0bmV4dChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJl Y3Rpb24gZGlyZWN0aW9uLAogCQkJUmVsZWFzZUJ1ZmZlcihiYXRjaC0+YnVmKTsKIAkJCWJhdGNo LT5idWYgPSBJbnZhbGlkQnVmZmVyOwogCQl9CisKKwkJLyoKKwkJICogRGVsYXkgaW5pdGlhbGl6 aW5nIHN0cmVhbSB1bnRpbCByZWFkaW5nIGZyb20gc2NhbidzIHNlY29uZCBiYXRjaC4KKwkJICog VGhpcyBoZXVyaXN0aWMgYXZvaWRzIHdhc3RpbmcgY3ljbGVzIG9uIHN0YXJ0aW5nIGEgcmVhZCBz dHJlYW0gZm9yCisJCSAqIHZlcnkgc2VsZWN0aXZlIGluZGV4IHNjYW5zLiAgV2UgY2FuIGxpa2Vs eSBpbXByb3ZlIHVwb24gdGhpcywgYnV0CisJCSAqIGl0IHdvcmtzIHdlbGwgZW5vdWdoIGZvciBu b3cuCisJCSAqCisJCSAqIEFsc28gYXZvaWQgcHJlZmV0Y2hpbmcgZHVyaW5nIHNjYW5zIHdoZXJl IHdlJ3JlIHVuYWJsZSB0byBkcm9wIGVhY2gKKwkJICogYmF0Y2gncyBidWZmZXIgcGluIHJpZ2h0 IGF3YXkgKG5vbi1NVkNDIHNuYXBzaG90IHNjYW5zKS4gIFdlIGFyZQorCQkgKiBub3QgcHJlcGFy ZWQgdG8gc2Vuc2libHkgbGltaXQgdGhlIHRvdGFsIG51bWJlciBvZiBidWZmZXIgcGlucyBoZWxk CisJCSAqIChyZWFkIHN0cmVhbSBoYW5kbGVzIGFsbCBwaW4gcmVzb3VyY2UgbWFuYWdlbWVudCBm b3IgdXMsIGFuZCBrbm93cworCQkgKiBub3RoaW5nIGFib3V0IHBpbnMgaGVsZCBvbiBpbmRleCBw YWdlcy93aXRoaW4gYmF0Y2hlcykuCisJCSAqLworCQlpZiAoIXNjYW4tPnhzX2hlYXBmZXRjaC0+ cnMgJiYgcHJpb3JCYXRjaCAmJiBzY2FuLT5NVkNDU2NhbiAmJgorCQkJZW5hYmxlX2luZGV4c2Nh bl9wcmVmZXRjaCkKKwkJeworCQkJQXNzZXJ0KCFiYXRjaHJpbmdidWYtPnByZWZldGNoUG9zLnZh bGlkKTsKKworCQkJaWYgKHNjYW4tPnhzX3dhbnRfaXR1cCkKKwkJCXsKKwkJCQlJbmRleEZldGNo SGVhcERhdGEgKmhzY2FuID0gKEluZGV4RmV0Y2hIZWFwRGF0YSAqKSBzY2FuLT54c19oZWFwZmV0 Y2g7CisKKwkJCQlpZiAoaHNjYW4tPnhzX2JsayAhPSBJbnZhbGlkQmxvY2tOdW1iZXIpCisJCQkJ CXNjYW4tPnhzX2hlYXBmZXRjaC0+cnMgPQorCQkJCQkJcmVhZF9zdHJlYW1fYmVnaW5fcmVsYXRp b24oUkVBRF9TVFJFQU1fREVGQVVMVCwgTlVMTCwKKwkJCQkJCQkJCQkJCSAgIHNjYW4tPmhlYXBS ZWxhdGlvbiwgTUFJTl9GT1JLTlVNLAorCQkJCQkJCQkJCQkJICAgaGVhcGFtX2dldG5leHRfc3Ry ZWFtLCBzY2FuLCAwKTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKworCQkJCXNjYW4tPnhzX2hlYXBm ZXRjaC0+cnMgPQorCQkJCQlyZWFkX3N0cmVhbV9iZWdpbl9yZWxhdGlvbihSRUFEX1NUUkVBTV9E RUZBVUxULCBOVUxMLAorCQkJCQkJCQkJCQkgICBzY2FuLT5oZWFwUmVsYXRpb24sIE1BSU5fRk9S S05VTSwKKwkJCQkJCQkJCQkJICAgaGVhcGFtX2dldG5leHRfc3RyZWFtLCBzY2FuLCAwKTsKKwkJ CX0KKwkJfQogCX0KIAllbHNlCiAJewpAQCAtNDY4LDkgKzU2Nyw0MCBAQCBoZWFwYW1fYmF0Y2hf Z2V0bmV4dF90aWQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbikK IAlCYXRjaFJpbmdJdGVtUG9zICpzY2FuUG9zID0gJmJhdGNocmluZ2J1Zi0+c2NhblBvczsKIAlJ bmRleFNjYW5CYXRjaCBzY2FuQmF0Y2ggPSBOVUxMOwogCisJLyogc2NhbiBzaG91bGQgb25seSBi ZSBwYXVzZWQgd2hlbiB0aGVyZSdzIG5vIGZyZWUgYmF0Y2ggc2xvdHMgKi8KKwlBc3NlcnQoIWJh dGNocmluZ2J1Zi0+cGF1c2VkIHx8IGluZGV4X3NjYW5fYmF0Y2hfZnVsbChzY2FuKSk7CiAJQXNz ZXJ0KCFzY2FuUG9zLT52YWxpZCB8fCBiYXRjaHJpbmdidWYtPmhlYWRCYXRjaCA9PSBzY2FuUG9z LT5iYXRjaCk7CiAJQXNzZXJ0KHNjYW5Qb3MtPnZhbGlkIHx8IGluZGV4X3NjYW5fYmF0Y2hfY291 bnQoc2NhbikgPT0gMCk7CiAKKwkvKiBJbml0aWFsaXplIGRpcmVjdGlvbiBvbiBmaXJzdCBjYWxs ICovCisJaWYgKGJhdGNocmluZ2J1Zi0+ZGlyZWN0aW9uID09IE5vTW92ZW1lbnRTY2FuRGlyZWN0 aW9uKQorCQliYXRjaHJpbmdidWYtPmRpcmVjdGlvbiA9IGRpcmVjdGlvbjsKKwllbHNlIGlmICh1 bmxpa2VseShiYXRjaHJpbmdidWYtPmRpcmVjdGlvbiAhPSBkaXJlY3Rpb24pKQorCXsKKwkJLyoK KwkJICogV2UgZGV0ZWN0ZWQgYSBjaGFuZ2UgaW4gc2NhbiBkaXJlY3Rpb24uICBSZWxlYXNlIHJl YWQgc3RyZWFtLCBzaW5jZQorCQkgKiB3ZSBjYW4ndCByZWx5IG9uIHNjYW5Qb3MgY29udGludWlu ZyB0byBhZ3JlZSB3aXRoIHJlYWQgc3RyZWFtLgorCQkgKi8KKwkJaWYgKHNjYW4tPnhzX2hlYXBm ZXRjaC0+cnMpCisJCXsKKwkJCXJlYWRfc3RyZWFtX2VuZChzY2FuLT54c19oZWFwZmV0Y2gtPnJz KTsKKwkJCXNjYW4tPnhzX2hlYXBmZXRjaC0+cnMgPSBOVUxMOworCQl9CisJCWJhdGNocmluZ2J1 Zi0+cHJlZmV0Y2hQb3MudmFsaWQgPSBmYWxzZTsKKwkJYmF0Y2hyaW5nYnVmLT5wYXVzZWQgPSBm YWxzZTsKKworCQkvKgorCQkgKiBSZW1lbWJlciBuZXcgc2NhbiBkaXJlY3Rpb24gKHdlIHNob3Vs ZCBuZXZlciByZWFjaCBoZXJlIG1vcmUgdGhhbgorCQkgKiBvbmNlIHBlciBsb2FkZWQgYmF0Y2gp LgorCQkgKgorCQkgKiBOb3RlOiBpZmYgdGhlIHNjYW4gX2NvbnRpbnVlc18gaW4gdGhpcyBuZXcg ZGlyZWN0aW9uLCBhbmQgYWN0dWFsbHkKKwkJICogc3RlcHMgb2ZmIHNjYW5CYXRjaCB0byBhbiBl YXJsaWVyIGluZGV4IHBhZ2UsIGhlYXBhbV9iYXRjaF9nZXRuZXh0CisJCSAqIHdpbGwgZGVhbCB3 aXRoIGl0LiAgQnV0IHRoYXQgbWlnaHQgbmV2ZXIgaGFwcGVuOyB0aGUgc2NhbiBtaWdodCB5ZXQK KwkJICogY2hhbmdlIGRpcmVjdGlvbiBhZ2FpbiAob3IganVzdCBlbmQgYmVmb3JlIHJldHVybmlu ZyBtb3JlIGl0ZW1zKS4KKwkJICovCisJCWJhdGNocmluZ2J1Zi0+ZGlyZWN0aW9uID0gZGlyZWN0 aW9uOworCX0KKwogCS8qCiAJICogQ2hlY2sgaWYgdGhlcmUncyBhbiBleGlzdGluZyBsb2FkZWQg c2NhbkJhdGNoIGZvciB1cyB0byByZXR1cm4gdGhlIG5leHQKIAkgKiBtYXRjaGluZyBpdGVtJ3Mg VElEL2luZGV4IHR1cGxlIGZyb20KQEAgLTQ3OSw3ICs2MDksNyBAQCBoZWFwYW1fYmF0Y2hfZ2V0 bmV4dF90aWQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbikKIAl7 CiAJCS8qCiAJCSAqIHNjYW5Qb3MgaXMgdmFsaWQsIHNvIHNjYW5CYXRjaCBtdXN0IGFscmVhZHkg YmUgbG9hZGVkIGluIGJhdGNoIHJpbmcKLQkJICogYnVmZmVyLiAgV2UgcmVseSBvbiB0aGF0IGhl cmUuCisJCSAqIGJ1ZmZlci4gIFdlIHJlbHkgb24gdGhhdCBoZXJlIChjYW4ndCBkbyB0aGlzIHdp dGggcHJlZmV0Y2hCYXRjaCkuCiAJCSAqLwogCQlBc3NlcnQoYmF0Y2hyaW5nYnVmLT5oZWFkQmF0 Y2ggPT0gc2NhblBvcy0+YmF0Y2gpOwogCQlBc3NlcnQoaW5kZXhfc2Nhbl9iYXRjaF9sb2FkZWQo c2Nhbiwgc2NhblBvcy0+YmF0Y2gpKTsKQEAgLTUyOSwxNiArNjU5LDIxMCBAQCBoZWFwYW1fYmF0 Y2hfZ2V0bmV4dF90aWQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlv bikKIAogCQkvKiBSZW1vdmUgdGhlIGJhdGNoIGZyb20gdGhlIHJpbmcgYnVmZmVyICovCiAJCWJh dGNocmluZ2J1Zi0+aGVhZEJhdGNoKys7CisKKwkJaWYgKGJhdGNocmluZ2J1Zi0+cGF1c2VkKQor CQl7CisJCQkvKgorCQkJICogVGhlIHNjYW4ncyByZWFkIHN0cmVhbSB3YXMgcGF1c2VkIGJ5IGhl YXBhbV9nZXRuZXh0X3N0cmVhbSBkdWUKKwkJCSAqIHRvIGV4aGF1c3RpbmcgYWxsIGF2YWlsYWJs ZSBmcmVlIGJhdGNoIHNsb3RzLiAgV2UganVzdCBmcmVlZCB1cAorCQkJICogb25lIHN1Y2ggc2xv dCBub3csIHRob3VnaC4gIFJlc3VtZSB0aGUgcmVhZCBzdHJlYW0gdG8gcmUtZW5hYmxlCisJCQkg KiBwcmVmZXRjaGluZy4KKwkJCSAqLworCQkJQXNzZXJ0KCFpbmRleF9zY2FuX2JhdGNoX2Z1bGwo c2NhbikpOworCQkJcmVhZF9zdHJlYW1fcmVzdW1lKHNjYW4tPnhzX2hlYXBmZXRjaC0+cnMpOwor CQkJYmF0Y2hyaW5nYnVmLT5wYXVzZWQgPSBmYWxzZTsKKwkJfQogCX0KIAogCS8qCiAJICogSW4g cHJhY3RpY2Ugc2NhbkJhdGNoIHdpbGwgYWx3YXlzIGJlIHRoZSByaW5nIGJ1ZmZlcidzIGhlYWRC YXRjaC4KKwkgKgorCSAqIE5vdGU6IEl0J3MgcG9zc2libGUgdGhhdCBwcmVmZXRjaFBvcyBzdGls bCBwb2ludHMgdG8gYSBiYXRjaCB0aGF0IHdlJ3ZlCisJICogYWxyZWFkeSBmcmVlZC4gIGhlYXBh bV9nZXRuZXh0X3N0cmVhbSBpcyBwcmVwYXJlZCB0byBkZWFsIHdpdGggdGhhdC4KIAkgKi8KIAlB c3NlcnQoYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2ggPT0gc2NhblBvcy0+YmF0Y2gpOwogCiAJcmV0 dXJuIGhlYXBhbV9iYXRjaF9yZXR1cm5fdGlkKHNjYW4sIHNjYW5CYXRjaCwgc2NhblBvcyk7CiB9 CiAKKy8qCisgKiBoZWFwYW1fZ2V0bmV4dF9zdHJlYW0KKyAqCQlyZXR1cm4gdGhlIG5leHQgYmxv Y2sgdG8gcGFzcyB0byB0aGUgcmVhZCBzdHJlYW0KKyAqCisgKiBUaGUgaW5pdGlhbCBiYXRjaCBp cyBhbHdheXMgbG9hZGVkIGJ5IGhlYXBhbV9iYXRjaF9nZXRuZXh0X3RpZC4gIFdlIGRvbid0Cisg KiBnZXQgY2FsbGVkIHVudGlsIHRoZSBmaXJzdCByZWFkX3N0cmVhbV9uZXh0X2J1ZmZlcigpIGNh bGwsIHdoZW4gYSBoZWFwCisgKiBibG9jayBpcyByZXF1ZXN0ZWQgZnJvbSB0aGUgc2NhbidzIHN0 cmVhbSBmb3IgdGhlIGZpcnN0IHRpbWUuCisgKgorICogVGhlIHBvc2l0aW9uIG9mIHRoZSByZWFk X3N0cmVhbSBpcyBzdG9yZWQgaW4gcHJlZmV0Y2hQb3MuICBJdCBpcyB0eXBpY2FsIGZvcgorICog cHJlZmV0Y2hQb3MgdG8gY29uc2lzdGVudGx5IHN0YXkgYWhlYWQgb2YgdGhlIHNjYW5Qb3MgcG9z aXRpb24gdGhhdCdzIHVzZWQgdG8KKyAqIHRyYWNrIHRoZSBuZXh0IFRJRCB0byBiZSByZXR1cm5l ZCB0byB0aGUgc2NhbiBieSBoZWFwYW1fYmF0Y2hfZ2V0bmV4dF90aWQKKyAqIGFmdGVyIHRoZSBm aXJzdCB0aW1lIHdlIGdldCBjYWxsZWQuICBIb3dldmVyLCB0aGF0IGlzbid0IGEgcHJlY29uZGl0 aW9uLgorICogVGhlcmUgaXMgYSBzdHJpY3QgcG9zdGNvbmRpdGlvbiwgdGhvdWdoOiB3aGVuIHdl IHJldHVybiB3ZSdsbCBhbHdheXMgbGVhdmUKKyAqIHNjYW5Qb3MgPD0gcHJlZmV0Y2hQb3MgKGV4 Y2VwdCBpbiBjYXNlcyB3aGVyZSB3ZSByZXR1cm4gSW52YWxpZEJsb2NrTnVtYmVyKS4KKyAqLwor c3RhdGljIEJsb2NrTnVtYmVyCitoZWFwYW1fZ2V0bmV4dF9zdHJlYW0oUmVhZFN0cmVhbSAqc3Ry ZWFtLCB2b2lkICpjYWxsYmFja19wcml2YXRlX2RhdGEsCisJCQkJCSAgdm9pZCAqcGVyX2J1ZmZl cl9kYXRhKQoreworCUluZGV4U2NhbkRlc2Mgc2NhbiA9IChJbmRleFNjYW5EZXNjKSBjYWxsYmFj a19wcml2YXRlX2RhdGE7CisJQmF0Y2hSaW5nQnVmZmVyICpiYXRjaHJpbmdidWYgPSAmc2Nhbi0+ YmF0Y2hyaW5nYnVmOworCUJhdGNoUmluZ0l0ZW1Qb3MgKnNjYW5Qb3MgPSAmYmF0Y2hyaW5nYnVm LT5zY2FuUG9zOworCUJhdGNoUmluZ0l0ZW1Qb3MgKnByZWZldGNoUG9zID0gJmJhdGNocmluZ2J1 Zi0+cHJlZmV0Y2hQb3M7CisJU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBiYXRjaHJpbmdidWYt PmRpcmVjdGlvbjsKKwlJbmRleFNjYW5CYXRjaCBwcmVmZXRjaEJhdGNoOworCWJvb2wJCWZyb21T Y2FuUG9zID0gZmFsc2U7CisKKwkvKgorCSAqIEl0IGlzIHBvc3NpYmxlIGZvciB0aGUgc2Nhbidz IGRpcmVjdGlvbiB0byBjaGFuZ2UsIGJ1dCB0aGF0J3MgaGFuZGxlZAorCSAqIGVsc2V3aGVyZS4g IFdlIGRvbid0IGtub3cgaG93IHRvIGRlYWwgd2l0aCBhbnkgdmFyaWF0aW9uIGluIHNjYW4KKwkg KiBkaXJlY3Rpb24gaGVyZS4gIFdlIGFzc3VtZSB0aGF0IGFsbCBsb2FkZWQgYW5kIG5ld2x5IHJl cXVlc3RlZCBiYXRjaGVzCisJICogbXVzdCB1c2UgdGhlIHNhbWUgc2NhbiBkaXJlY3Rpb24uCisJ ICovCisJQXNzZXJ0KGRpcmVjdGlvbiAhPSBOb01vdmVtZW50U2NhbkRpcmVjdGlvbik7CisJQXNz ZXJ0KCFiYXRjaHJpbmdidWYtPnBhdXNlZCk7CisKKwkvKgorCSAqIHNjYW5Qb3MgbXVzdCBhbHdh eXMgYmUgdmFsaWQgd2hlbiB3ZSdyZSBjYWxsZWQgLS0gdGhlcmUgaGFzIHRvIGJlIGF0CisJICog bGVhc3Qgb25lIGJhdGNoLCBsb2FkZWQsIGZvciBzY2FuQmF0Y2guICBwcmVmZXRjaFBvcyBtaWdo dCBub3QgeWV0IGJlCisJICogdmFsaWQsIGluIHdoaWNoIGNhc2UgaXQnbGwgYmUgaW5pdGlhbGl6 ZWQgdXNpbmcgc2NhblBvcy4KKwkgKi8KKwlBc3NlcnQoaW5kZXhfc2Nhbl9iYXRjaF9jb3VudChz Y2FuKSA+IDApOworCisJLyoKKwkgKiBJZiBwcmVmZXRjaFBvcyBoYXMgbm90IGJlZW4gaW5pdGlh bGl6ZWQgeWV0LCB0aGF0IHR5cGljYWxseSBpbmRpY2F0ZXMKKwkgKiB0aGF0IHRoaXMgaXMgdGhl IGZpcnN0IGNhbGwgaGVyZSBmb3IgdGhlIGVudGlyZSBzY2FuIChiYXJyaW5nIGNoYW5nZXMKKwkg KiBpbiBzY2FuIGRpcmVjdGlvbiB3aXRoIGEgc2Nyb2xsYWJsZSBjdXJzb3IpLiAgV2UgaW5pdGlh bGl6ZSBwcmVmZXRjaFBvcworCSAqIHVzaW5nIHRoZSBjdXJyZW50IHNjYW5Qb3MsIHNpbmNlIHRo ZSBjdXJyZW50IHNjYW5CYXRjaCBpdGVtJ3MgVElECisJICogc2hvdWxkIGhhdmUgaXRzIGJsb2Nr IG51bWJlciByZXR1cm5lZCBieSB0aGUgcmVhZCBzdHJlYW0gZmlyc3QuICBJdCdzCisJICogbGlr ZWx5IHRoYXQgcHJlZmV0Y2hQb3Mgd2lsbCBnZXQgYWhlYWQgb2Ygc2NhblBvcyBiZWZvcmUgbG9u ZywgYnV0IHRoYXQKKwkgKiBoYXNuJ3QgaGFwcGVuZWQgeWV0LgorCSAqCisJICogSXQncyBhbHNv IHBvc3NpYmxlIGZvciBwcmVmZXRjaFBvcyB0byAiZmFsbCBiZWhpbmQiIHNjYW5Qb3MsIGF0IGxl YXN0CisJICogaW4gYSB0cml2aWFsIHNlbnNlOiBpZiBtYW55IGFkamFjZW50IGl0ZW1zIGFyZSBy ZXR1cm5lZCB0aGF0IGNvbnRhaW4KKwkgKiBUSURzIHRoYXQgcG9pbnQgdG8gdGhlIHNhbWUgaGVh cCBibG9jaywgc2NhblBvcyBjYW4gYWN0dWFsbHkgb3ZlcnRha2UKKwkgKiBwcmVmZXRjaFBvcyAo cHJlZmV0Y2hQb3MgY2FuJ3QgYWR2YW5jZSB1bnRpbCB0aGUgc2NhbiBhY3R1YWxseSBjYWxscwor CSAqIHJlYWRfc3RyZWFtX25leHRfYnVmZmVyKS4gIFVzdWFsbHkgdGhpcyBkb2Vzbid0IHJlcXVp cmUgYW55IHNwZWNpYWwKKwkgKiBoYW5kbGluZzsgdGhlIHN0YW5kYXJkIGN1cnJlbnRQcmVmZXRj aEJsb2NrIHRlc3RzIGluIHRoZSBsb29wIGJlbG93CisJICogd2lsbCBpbmNyZW1lbnQgcHJlZmV0 Y2hQb3MgdW50aWwgaXQgY2F0Y2hlcyB1cCB3aXRoIHNjYW5Qb3Mgb25jZSBhZ2Fpbi4KKwkgKiBI b3dldmVyLCB0aGF0IGNhbid0IHdvcmsgd2hlbiBwcmVmZXRjaFBvcyBmYWxscyBzbyBmYXIgYmVo aW5kIHRoYXQgaXRzCisJICogYmF0Y2ggZ2V0cyBmcmVlZC4gIFdlIGhhbmRsZSB0aGF0IGNhc2Ug aGVyZSwgdG9vLgorCSAqCisJICogVGhpcyAhaW5kZXhfc2Nhbl9iYXRjaF9sb2FkZWQoKSBjYXNl IGNhbiBiZSBoYW5kbGVkIHVzaW5nIHRoZSBzdGFuZGFyZAorCSAqIGFwcHJvYWNoIHRvIGluaXRp YWxpemluZyBwcmVmZXRjaFBvcyBkdXJpbmcgdGhlIHNjYW4ncyBmaXJzdCBjYWxsIGhlcmUuCisJ ICogSW4gZWZmZWN0LCB0aGlzIGlzIGFuIGFsdGVybmF0aXZlIHdheSBmb3IgcHJlZmV0Y2hQb3Mg dG8gY2F0Y2ggdXAgd2l0aAorCSAqIHNjYW5Qb3MgLS0gb25lIHRoYXQgZG9lc24ndCByZWx5IG9u IHByZWZldGNoUG9zLT5iYXRjaCBzdGF5aW5nIGFyb3VuZC4KKwkgKgorCSAqIE5vdGU6IFRoaXMg YXBwcm9hY2ggaXMgcm9idXN0IGFnYWluc3QgdWludDggd3JhcGFyb3VuZCBvZiByaW5nIGJ1ZmZl cgorCSAqIG9mZnNldHM6IHByZWZldGNoUG9zLT5iYXRjaCBjYW5ub3QgcG9zc2libHkgZmFsbCBi ZWhpbmQgc2NhblBvcy0+YmF0Y2gKKwkgKiBieSBtb3JlIHRoYW4gSU5ERVhfU0NBTl9NQVhfQkFU Q0hFUyBhdCBhbnkgdGltZS4gIFdlIHJlbHkgb24gdGhhdCBoZXJlLgorCSAqLworCWlmICghcHJl ZmV0Y2hQb3MtPnZhbGlkIHx8ICFpbmRleF9zY2FuX2JhdGNoX2xvYWRlZChzY2FuLAorCQkJCQkJ CQkJCQkJCQlwcmVmZXRjaFBvcy0+YmF0Y2gpKQorCXsKKwkJYmF0Y2hyaW5nYnVmLT5jdXJyZW50 UHJlZmV0Y2hCbG9jayA9IEludmFsaWRCbG9ja051bWJlcjsKKwkJKnByZWZldGNoUG9zID0gKnNj YW5Qb3M7CisJCWZyb21TY2FuUG9zID0gdHJ1ZTsKKwl9CisKKwlwcmVmZXRjaEJhdGNoID0gaW5k ZXhfc2Nhbl9iYXRjaChzY2FuLCBwcmVmZXRjaFBvcy0+YmF0Y2gpOworCWZvciAoOzspCisJewor CQlCYXRjaE1hdGNoaW5nSXRlbSAqaXRlbTsKKwkJQmxvY2tOdW1iZXIgcHJlZmV0Y2hCbG9jazsK KworCQlpZiAoZnJvbVNjYW5Qb3MpCisJCXsKKwkJCS8qCisJCQkgKiBEb24ndCBpbmNyZW1lbnQg aXRlbSB3aGVuIHByZWZldGNoUG9zIHdhcyBqdXN0IGluaXRpYWxpemVkCisJCQkgKiB1c2luZyBz Y2FuUG9zLiAgV2UnbGwgcmV0dXJuIHRoZSBzY2FuUG9zIGl0ZW0ncyBoZWFwIGJsb2NrCisJCQkg KiBkaXJlY3RseSBvbiB0aGUgZmlyc3QgY2FsbCBoZXJlLiAgSW4gb3RoZXIgd29yZHMsIHdlJ2xs IHJldHVybgorCQkJICogdGhlIGhlYXAgYmxvY2sgZm9yIHRoZSBUSUQgcGFzc2VkIHRvIGhlYXBh bV9pbmRleF9mZXRjaF90dXBsZQorCQkJICogYXQgdGhlIHBvaW50IHdoZXJlIGl0IGNhbGxlZCBy ZWFkX3N0cmVhbV9uZXh0X2J1ZmZlciBmb3IgdGhlCisJCQkgKiBmaXJzdCB0aW1lIGR1cmluZyB0 aGUgc2Nhbi4KKwkJCSAqLworCQkJZnJvbVNjYW5Qb3MgPSBmYWxzZTsKKwkJfQorCQllbHNlIGlm ICghaW5kZXhfc2Nhbl9wb3NfYWR2YW5jZShkaXJlY3Rpb24sIHByZWZldGNoQmF0Y2gsIHByZWZl dGNoUG9zKSkKKwkJeworCQkJLyoKKwkJCSAqIFJhbiBvdXQgb2YgaXRlbXMgZnJvbSBwcmVmZXRj aEJhdGNoLiAgVHJ5IHRvIGFkdmFuY2UgaXQgdG8gbmV4dAorCQkJICogYmF0Y2guCisJCQkgKgor CQkJICogSWYgd2UgYWxyZWFkeSB1c2VkIHRoZSBtYXhpbXVtIG51bWJlciBvZiBiYXRjaCBzbG90 cyBhdmFpbGFibGUsCisJCQkgKiBpdCdzIHBvaW50bGVzcyB0byB0cnkgbG9hZGluZyBhbm90aGVy IG9uZS4gVGhpcyBjYW4gaGFwcGVuIGZvcgorCQkJICogdmFyaW91cyByZWFzb25zLCBlLmcuIGZv ciBpbmRleC1vbmx5IHNjYW5zIG9uIGFsbC12aXNpYmxlCisJCQkgKiB0YWJsZSwgb3Igc2tpcHBp bmcgZHVwbGljYXRlIGJsb2NrcyBvbiBwZXJmZWN0bHkgY29ycmVsYXRlZAorCQkJICogaW5kZXhl cywgZXRjLgorCQkJICovCisJCQlpZiAoaW5kZXhfc2Nhbl9iYXRjaF9mdWxsKHNjYW4pKQorCQkJ eworCQkJCWJhdGNocmluZ2J1Zi0+cGF1c2VkID0gdHJ1ZTsKKwkJCQlyZXR1cm4gcmVhZF9zdHJl YW1fcGF1c2Uoc3RyZWFtKTsKKwkJCX0KKworCQkJcHJlZmV0Y2hCYXRjaCA9IGhlYXBhbV9iYXRj aF9nZXRuZXh0KHNjYW4sIGRpcmVjdGlvbiwKKwkJCQkJCQkJCQkJCSBwcmVmZXRjaEJhdGNoLCBw cmVmZXRjaFBvcyk7CisJCQlpZiAoIXByZWZldGNoQmF0Y2gpCisJCQl7CisJCQkJLyoKKwkJCQkg KiBGYWlsZWQgdG8gbG9hZCBuZXh0IGJhdGNoLCBzbyBhbGwgdGhlIGJhdGNoZXMgdGhhdCB0aGUg c2NhbgorCQkJCSAqIHdpbGwgZXZlciByZXF1aXJlIChiYXJyaW5nIGEgY2hhbmdlIGluIHNjYW4g ZGlyZWN0aW9uKSBhcmUKKwkJCQkgKiBub3cgbG9hZGVkCisJCQkJICovCisJCQkJcmV0dXJuIElu dmFsaWRCbG9ja051bWJlcjsKKwkJCX0KKworCQkJLyogUG9zaXRpb24gcHJlZmV0Y2hQb3MgdG8g dGhlIHN0YXJ0IG9mIG5ldyBwcmVmZXRjaEJhdGNoICovCisJCQlpbmRleF9zY2FuX3Bvc19uZXh0 YmF0Y2goZGlyZWN0aW9uLCBwcmVmZXRjaEJhdGNoLCBwcmVmZXRjaFBvcyk7CisJCX0KKworCQkv KgorCQkgKiBwcmVmZXRjaFBvcyBub3cgcG9pbnRzIHRvIHRoZSBuZXh0IGl0ZW0gd2hvc2UgVElE J3MgaGVhcCBibG9jaworCQkgKiBudW1iZXIgbWlnaHQgbmVlZCB0byBiZSBwcmVmZXRjaGVkCisJ CSAqLworCQlBc3NlcnQoaW5kZXhfc2Nhbl9iYXRjaChzY2FuLCBwcmVmZXRjaFBvcy0+YmF0Y2gp ID09IHByZWZldGNoQmF0Y2gpOworCisJCS8qIHNjYW5Qb3MgaXMgYWx3YXlzIDw9IHByZWZldGNo UG9zIHdoZW4gd2UgcmV0dXJuICovCisJCUFzc2VydCgoaW50OCkgKHNjYW5Qb3MtPmJhdGNoIC0g cHJlZmV0Y2hQb3MtPmJhdGNoKSA8IDAgfHwKKwkJCSAgIChzY2FuUG9zLT5iYXRjaCA9PSBwcmVm ZXRjaFBvcy0+YmF0Y2ggJiYKKwkJCQlTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcmVjdGlvbikg PworCQkJCXNjYW5Qb3MtPml0ZW0gPD0gcHJlZmV0Y2hQb3MtPml0ZW0gOgorCQkJCXNjYW5Qb3Mt Pml0ZW0gPj0gcHJlZmV0Y2hQb3MtPml0ZW0pKTsKKwkJQXNzZXJ0KHByZWZldGNoUG9zLT5pdGVt ID49IHByZWZldGNoQmF0Y2gtPmZpcnN0SXRlbSAmJgorCQkJICAgcHJlZmV0Y2hQb3MtPml0ZW0g PD0gcHJlZmV0Y2hCYXRjaC0+bGFzdEl0ZW0pOworCisJCWl0ZW0gPSAmcHJlZmV0Y2hCYXRjaC0+ aXRlbXNbcHJlZmV0Y2hQb3MtPml0ZW1dOworCQlwcmVmZXRjaEJsb2NrID0gSXRlbVBvaW50ZXJH ZXRCbG9ja051bWJlcigmaXRlbS0+aGVhcFRpZCk7CisKKwkJaWYgKHNjYW4tPnhzX3dhbnRfaXR1 cCkKKwkJeworCQkJLyogbWFrZSBzdXJlIHdlIGhhdmUgdmlzaWJpbGl0eSBpbmZvIGZvciB0aGUg aXRlbSAqLworCQkJaGVhcGFtX2JhdGNoX3Jlc29sdmVfdmlzaWJpbGl0eShzY2FuLCBwcmVmZXRj aEJhdGNoLAorCQkJCQkJCQkJCQlwcmVmZXRjaFBvcy0+aXRlbSk7CisKKwkJCS8qIGl0ZW0gaXMg a25vd24gdG8gYmUgYWxsLXZpc2libGU7IHByZWZldGNoaW5nIGlzbid0IHJlcXVpcmVkICovCisJ CQlpZiAoaXRlbS0+YWxsVmlzaWJsZSkKKwkJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChwcmVm ZXRjaEJsb2NrID09IGJhdGNocmluZ2J1Zi0+Y3VycmVudFByZWZldGNoQmxvY2spCisJCXsKKwkJ CS8qCisJCQkgKiBwcmVmZXRjaEJsb2NrIG1hdGNoZXMgdGhlIGxhc3QgcHJlZmV0Y2hQb3MgaXRl bSdzIFRJRCdzIGhlYXAKKwkJCSAqIGJsb2NrIG51bWJlcjsgd2UgbXVzdCBub3QgcmV0dXJuIHRo ZSBzYW1lIHByZWZldGNoQmxvY2sgdHdpY2UKKwkJCSAqICh0d2ljZSBpbiBzdWNjZXNzaW9uKQor CQkJICovCisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIFdlIGhhdmUgYSBuZXcgaGVhcCBibG9j ayBudW1iZXIgdG8gcmV0dXJuIHRvIHJlYWQgc3RyZWFtICovCisJCWJhdGNocmluZ2J1Zi0+Y3Vy cmVudFByZWZldGNoQmxvY2sgPSBwcmVmZXRjaEJsb2NrOworCQlyZXR1cm4gcHJlZmV0Y2hCbG9j azsKKwl9CisKKwlyZXR1cm4gSW52YWxpZEJsb2NrTnVtYmVyOworfQorCiAvKiAtLS0tLS0tLS0t LS0tLS0tCiAgKgkJaW5kZXhfZmV0Y2hfaGVhcCAtIGdldCB0aGUgc2NhbidzIG5leHQgaGVhcCB0 dXBsZQogICoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGJhdGNo LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhiYXRjaC5jCmluZGV4IDJhNzBjYzcx Yy4uYmEzODc1MDM2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhi YXRjaC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGJhdGNoLmMKQEAgLTEw LDcgKzEwLDEwIEBACiAgKiBhcHByb2FjaCBlbmFibGVzIGVmZmljaWVudCBwcmVmZXRjaGluZyBv ZiB0YWJsZSBBTSBibG9ja3MgZHVyaW5nIG9yZGVyZWQKICAqIGluZGV4IHNjYW5zLgogICoKLSAq IFRoZSByaW5nIGJ1ZmZlciBsb2FkcyBiYXRjaGVzIGluIGluZGV4IGtleSBzcGFjZSBvcmRlci4K KyAqIFRoZSByaW5nIGJ1ZmZlciBsb2FkcyBiYXRjaGVzIGluIGluZGV4IGtleSBzcGFjZSBvcmRl ci4gIFRoaXMgYWxsb3dzIHRoZQorICogdGFibGUgQU0gdG8gbWFpbnRhaW4gYW4gYWRlcXVhdGUg cHJlZmV0Y2ggZGlzdGFuY2U6IGl0cyByZWFkIHN0cmVhbQorICogY2FsbGJhY2sgaXMgdGhlcmVi eSBhYmxlIHRvIHJlcXVlc3QgdGFibGUgYmxvY2tzIHJlZmVyZW5jZWQgYnkgaW5kZXggcGFnZXMK KyAqIHRoYXQgYXJlIHdlbGwgYWhlYWQgb2YgdGhlIGN1cnJlbnQgc2NhbiBwb3NpdGlvbidzIGlu ZGV4IHBhZ2UuCiAgKgogICogVGhlcmUncyB0aHJlZSB0eXBlcyBvZiBmdW5jdGlvbnMgaW4gdGhp cyBtb2R1bGU6CiAgKgpAQCAtMzUsNiArMzgsMjIgQEAKICAqIGJhdGNoZXMgYWNjb3JkaW5nIHRv IHRoZSBjb252ZW50aW9ucyBlc3RhYmxpc2hlZCBoZXJlLiAgU2VlIGluZGV4YW0uc2dtbAogICog Zm9yIHRoZSBmdWxsIHNwZWNpZmljYXRpb24gb2YgdGhlIGFtZ2V0YmF0Y2gvYW1mcmVlYmF0Y2gg Y29udHJhY3QuCiAgKgorICogV2hlbiB0aGUgc2NhbiBkaXJlY3Rpb24gY2hhbmdlcywgdGhlIHRh YmxlIEFNIG11c3QgaW1tZWRpYXRlbHkgc3RvcCBpdHMKKyAqIHJlYWQgc3RyZWFtIC0tIGJsb2Nr cyBhbHJlYWR5IHJlcXVlc3RlZCB2aWEgcHJlZmV0Y2hQb3Mgd2lsbCBubyBsb25nZXIKKyAqIG1h dGNoIHdoYXQgc2NhblBvcyBuZWVkcyB0byByZXR1cm4uICBDcm9zc2luZyBhIGJhdGNoIGJvdW5k YXJ5IGluIGEgbmV3CisgKiBzY2FuIGRpcmVjdGlvbiBpcyBhIHNlcGFyYXRlIHByb2Nlc3MsIGhh bmRsZWQgaGVyZTogdGFibGUgQU1zIGFyZSByZXF1aXJlZAorICogdG8gY2FsbCB0YWJsZWFtX3V0 aWxfYmF0Y2hfZGlyY2hhbmdlIHRvIGxlYXZlIHRoZSBzY2FuJ3MgYmF0Y2ggcmluZyBidWZmZXIK KyAqIGluIGEgY29uc2lzdGVudCBzdGF0ZS4gIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIGhh bmRsZXMgdGhpcyBieSBzaW1wbHkKKyAqIGRpc2NhcmRpbmcgbW9zdCBiYXRjaGVzLiAgVGhlIGtl eSBpbnZhcmlhbnQgaXMgdGhhdCBhbGwgbG9hZGVkIGJhdGNoZXMgbXVzdAorICogYmUgaW4gYSBj b25zaXN0ZW50IHNjYW4gZGlyZWN0aW9uIG9yZGVyLiAgKER1cmluZyBjcm9zcy1iYXRjaCBkaXJl Y3Rpb24KKyAqIGNoYW5nZXMsIHRoZSBjdXJyZW50IHNjYW5CYXRjaCB3aWxsIGhhdmUgaXRzIElu ZGV4U2NhbkJhdGNoRGF0YS5kaXIKKyAqIGZsaXBwZWQsIGJ1dCB3ZSBoYXZlIG5vIHByb3Zpc2lv biBmb3Iga2VlcGluZyBhbGwgb3RoZXIgbG9hZGVkIGJhdGNoZXMuCisgKiBJdCdzIG5vdCBjbGVh ciB0aGF0IGl0J2QgYmUgdXNlZnVsIHRvIGhvbGQgb250byB0aGVtOyB0aGUgc2NhbiBkaXJlY3Rp b24gaXMKKyAqIHVubGlrZWx5IHRvIGNoYW5nZSBiYWNrLiAgVGhlIHNjYW4gYmF0Y2ggZGlyZWN0 aW9uIGludmFyaWFudCBrZWVwcyB0aGluZ3MKKyAqIHNpbXBsZTogaXQgaXMgY29udmVuaWVudCBm b3IgbW9zdCBjb2RlIHRoYXQgZGVhbHMgd2l0aCBiYXRjaGVzIHRvIGJlIGFibGUKKyAqIHRvIGFz c3VtZSB0aGF0IHRoZSBjb21tb24gY2FzZSB3aGVyZSBzY2FuIGRpcmVjdGlvbiBuZXZlciBjaGFu Z2VzIGlzIHRoZQorICogb25seSBjYXNlLikKKyAqCiAgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMp IDE5OTYtMjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKICAqIFBvcnRp b25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxp Zm9ybmlhCiAgKgpAQCAtNjgsMTQgKzg3LDIwIEBAIGluZGV4X2JhdGNoc2Nhbl9pbml0KEluZGV4 U2NhbkRlc2Mgc2NhbikKIAlBc3NlcnQoc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFt Z2V0YmF0Y2ggIT0gTlVMTCk7CiAJQXNzZXJ0KHNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFt LT5hbWZyZWViYXRjaCAhPSBOVUxMKTsKIAorCS8qIFRyYWNrcyBzY2FuIGRpcmVjdGlvbiB1c2Vk IHRvIHJldHVybiBsYXN0IGl0ZW0gKi8KKwlzY2FuLT5iYXRjaHJpbmdidWYuZGlyZWN0aW9uID0g Tm9Nb3ZlbWVudFNjYW5EaXJlY3Rpb247CisKIAlzY2FuLT5iYXRjaHJpbmdidWYuc2NhblBvcy52 YWxpZCA9IGZhbHNlOwogCXNjYW4tPmJhdGNocmluZ2J1Zi5tYXJrUG9zLnZhbGlkID0gZmFsc2U7 CisJc2Nhbi0+YmF0Y2hyaW5nYnVmLnByZWZldGNoUG9zLnZhbGlkID0gZmFsc2U7CiAKIAlzY2Fu LT5iYXRjaHJpbmdidWYubWFya0JhdGNoID0gTlVMTDsKIAlzY2FuLT5iYXRjaHJpbmdidWYuaGVh ZEJhdGNoID0gMDsJLyogaW5pdGlhbCBoZWFkIGJhdGNoICovCiAJc2Nhbi0+YmF0Y2hyaW5nYnVm Lm5leHRCYXRjaCA9IDA7CS8qIGluaXRpYWwgYmF0Y2ggc3RhcnRzIGVtcHR5ICovCiAJc2Nhbi0+ YmF0Y2hyaW5nYnVmLmRvbmUgPSBmYWxzZTsKIAltZW1zZXQoJnNjYW4tPmJhdGNocmluZ2J1Zi5j YWNoZSwgMCwgc2l6ZW9mKHNjYW4tPmJhdGNocmluZ2J1Zi5jYWNoZSkpOworCXNjYW4tPmJhdGNo cmluZ2J1Zi5jdXJyZW50UHJlZmV0Y2hCbG9jayA9IEludmFsaWRCbG9ja051bWJlcjsKKwlzY2Fu LT5iYXRjaHJpbmdidWYucGF1c2VkID0gZmFsc2U7CiAKIAkvKgogCSAqIFN0YXJ0IGJ5IHJlc29s dmluZyB2aXNpYmlsaXR5IGZvciBqdXN0IG9uZSBpdGVtLCB0aGVuIGdyYWR1YWxseSByYW1wIHVw CkBAIC0xMDMsNyArMTI4LDExIEBAIGluZGV4X2JhdGNoc2Nhbl9yZXNldChJbmRleFNjYW5EZXNj IHNjYW4sIGJvb2wgY29tcGxldGUpCiAKIAlBc3NlcnQoc2Nhbi0+eHNfaGVhcGZldGNoKTsKIAor CWlmIChzY2FuLT54c19oZWFwZmV0Y2gtPnJzKQorCQlyZWFkX3N0cmVhbV9yZXNldChzY2FuLT54 c19oZWFwZmV0Y2gtPnJzKTsKKwogCWJhdGNocmluZ2J1Zi0+c2NhblBvcy52YWxpZCA9IGZhbHNl OworCWJhdGNocmluZ2J1Zi0+cHJlZmV0Y2hQb3MudmFsaWQgPSBmYWxzZTsKIAogCS8qCiAJICog V2hlbiBjYWxsZWQgd2l0aCAiY29tcGxldGUiIHdlIG11c3QgbWFrZSBzdXJlIHRoYXQgbWFya0Jh dGNoIGlzIGZyZWVkLApAQCAtMTUzLDYgKzE4Miw5IEBAIGluZGV4X2JhdGNoc2Nhbl9yZXNldChJ bmRleFNjYW5EZXNjIHNjYW4sIGJvb2wgY29tcGxldGUpCiAJYmF0Y2hyaW5nYnVmLT5oZWFkQmF0 Y2ggPSAwOwkvKiBpbml0aWFsIGJhdGNoICovCiAJYmF0Y2hyaW5nYnVmLT5uZXh0QmF0Y2ggPSAw OwkvKiBpbml0aWFsIGJhdGNoIGlzIGVtcHR5ICovCiAKKwliYXRjaHJpbmdidWYtPmN1cnJlbnRQ cmVmZXRjaEJsb2NrID0gSW52YWxpZEJsb2NrTnVtYmVyOworCWJhdGNocmluZ2J1Zi0+cGF1c2Vk ID0gZmFsc2U7CisKIAkvKiByZXNldCB0aGUgdmlzaWJpbGl0eSBjaGVjayBiYXRjaCBzaXplICov CiAJYmF0Y2hyaW5nYnVmLT52bUl0ZW1zID0gMTsKIH0KQEAgLTI4NSw2ICszMTcsMTkgQEAgaW5k ZXhfYmF0Y2hzY2FuX3Jlc3RvcmVfcG9zKEluZGV4U2NhbkRlc2Mgc2NhbikKIAlJbmRleFNjYW5C YXRjaCBtYXJrQmF0Y2ggPSBiYXRjaHJpbmdidWYtPm1hcmtCYXRjaDsKIAlJbmRleFNjYW5CYXRj aCBzY2FuQmF0Y2ggPSBpbmRleF9zY2FuX2JhdGNoKHNjYW4sIHNjYW5Qb3MtPmJhdGNoKTsKIAor CS8qCisJICogUmVzdG9yaW5nIGEgbWFyayBhbHdheXMgcmVxdWlyZWQgc3RvcHBpbmcgcHJlZmV0 Y2hpbmcvdGhhdCB3ZSBzdG9wCisJICogdXNpbmcgc2NhbidzIHJlYWQgc3RyZWFtLiAgVGhpcyBp cyBzaW1pbGFyIHRvIHRoZSBoYW5kbGluZyB0YWJsZSBBTXMKKwkgKiBpbXBsZW1lbnQgdG8gZGVh bCB3aXRoIGEgdHVwbGUtbGV2ZWwgY2hhbmdlIGluIHRoZSBzY2FuJ3MgZGlyZWN0aW9uLgorCSAq LworCWlmIChzY2FuLT54c19oZWFwZmV0Y2gtPnJzKQorCXsKKwkJcmVhZF9zdHJlYW1fZW5kKHNj YW4tPnhzX2hlYXBmZXRjaC0+cnMpOworCQlzY2FuLT54c19oZWFwZmV0Y2gtPnJzID0gTlVMTDsK Kwl9CisJYmF0Y2hyaW5nYnVmLT5wcmVmZXRjaFBvcy52YWxpZCA9IGZhbHNlOworCWJhdGNocmlu Z2J1Zi0+cGF1c2VkID0gZmFsc2U7CisKIAlpZiAoc2NhbkJhdGNoID09IG1hcmtCYXRjaCkKIAl7 CiAJCS8qIG1hcmtCYXRjaCBpcyBhbHJlYWR5IHNjYW5CYXRjaDsgbmVlZG4ndCBjaGFuZ2UgYmF0 Y2hyaW5nYnVmICovCkBAIC0zNDQsNiArMzg5LDEzIEBAIGluZGV4X2JhdGNoc2Nhbl9yZXN0b3Jl X3BvcyhJbmRleFNjYW5EZXNjIHNjYW4pCiAgKiBwb2ludCBvbiBiYXRjaHJpbmdidWYgd2lsbCBs b29rIGFzIGlmIG91ciBuZXcgc2NhbiBkaXJlY3Rpb24gaGFkIGJlZW4gdXNlZAogICogZnJvbSB0 aGUgc3RhcnQuICBUaGlzIGFwcHJvYWNoIGlzbid0IHBhcnRpY3VsYXJseSBlZmZpY2llbnQsIGJ1 dCBpdCB3b3JrcwogICogd2VsbCBlbm91Z2ggZm9yIHdoYXQgb3VnaHQgdG8gYmUgYSByZWxhdGl2 ZWx5IHJhcmUgb2NjdXJyZW5jZS4KKyAqCisgKiBDYWxsZXIgbXVzdCBoYXZlIGludmFsaWRhdGVk IHRoZSBzY2FuJ3MgcmVhZCBzdHJlYW0gYmVmb3JlIGNhbGxpbmcgaGVyZS4KKyAqIFRoYXQgbmVl ZHMgdG8gaGFwcGVuIGFzIHNvb24gYXMgdGhlIHNjYW4gcmVxdWVzdHMgYSB0dXBsZSBpbiB3aGF0 ZXZlciBzY2FuCisgKiBkaXJlY3Rpb24gaXMgb3Bwb3NpdGUtdG8tY3VycmVudC4gIFdlIG9ubHkg ZGVhbCB3aXRoIHRoZSBjYXNlIHdoZXJlIHRoZQorICogc2NhbiBiYWNrcyB1cCBieSBlbm91Z2gg aXRlbXMgdG8gY3Jvc3MgYSBiYXRjaCBib3VuZGFyeSAod2hlbiB0aGUgc2NhbgorICogcmVzdW1l cyBzY2FubmluZyBpbiBpdHMgb3JpZ2luYWwgZGlyZWN0aW9uL2VuZHMgYmVmb3JlIGNyb3NzaW5n IGEgYm91bmRhcnksCisgKiB0aGVyZSBpc24ndCBhbnkgbmVlZCB0byBjYWxsIGhlcmUpLgogICov CiB2b2lkCiB0YWJsZWFtX3V0aWxfYmF0Y2hfZGlyY2hhbmdlKEluZGV4U2NhbkRlc2Mgc2NhbikK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvUkVBRE1FIGIvc3JjL2JhY2tl bmQvYWNjZXNzL25idHJlZS9SRUFETUUKaW5kZXggZTc1NTc3YTdlLi4zOTM5MzkxYWUgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvUkVBRE1FCisrKyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy9uYnRyZWUvUkVBRE1FCkBAIC0xODYsNyArMTg2LDcgQEAgaW50ZXJmYWNlLiAgKFNl ZSBhbHNvLCBkb2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21sKS4KIEJsb2NraW5nIFZBQ1VVTSBsaWtl IHRoaXMgY2FuIGJlIGRpc3J1cHRpdmUsIHNvIHRhYmxlIEFNcyBhdm9pZCBpdCB3aGVuZXZlcgog cG9zc2libGUuICBUaGUgaGVhcCB0YWJsZSBBTSB1c3VhbGx5IGRyb3BzIGxlYWYgcGFnZSBwaW5z IHJpZ2h0IGF3YXksIHRob3VnaAogbm90IGR1cmluZyBzY2FucyB0aGF0IHVzZSBhIG5vbi1NVkND IHNuYXBzaG90LiAgSW5kZXgtb25seSBzY2FucyBtYXkgYWxzbwotcmV0YWluIHBpbnMgaW4gc29t ZSBjYXNlcy4KK3JldGFpbiBwaW5zIGluIHNvbWUgY2FzZXMsIHRob3VnaCBwcmVmZXRjaGluZyBy ZXF1aXJlcyBkcm9wcGluZyB0aGVtLgogCiBPcHBvcnR1bmlzdGljIGluZGV4IHR1cGxlIGRlbGV0 aW9uIHBlcmZvcm1zIHRoZSBzYW1lIHBhZ2UtbGV2ZWwKIG1vZGlmaWNhdGlvbnMgYXMgVkFDVVVN LCB3aGlsZSBvbmx5IGhvbGRpbmcgYW4gZXhjbHVzaXZlIGxvY2suICBUaGlzIGlzCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jIGIvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BhdGgvY29zdHNpemUuYwppbmRleCBjMzBkNmU4NDYuLjllZTIwZjRkYyAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY29zdHNpemUuYworKysgYi9zcmMv YmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jCkBAIC0xNDUsNiArMTQ1LDcgQEAgaW50 CQkJbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDI7CiBib29sCQllbmFibGVfc2Vx c2NhbiA9IHRydWU7CiBib29sCQllbmFibGVfaW5kZXhzY2FuID0gdHJ1ZTsKIGJvb2wJCWVuYWJs ZV9pbmRleG9ubHlzY2FuID0gdHJ1ZTsKK2Jvb2wJCWVuYWJsZV9pbmRleHNjYW5fcHJlZmV0Y2gg PSB0cnVlOwogYm9vbAkJZW5hYmxlX2JpdG1hcHNjYW4gPSB0cnVlOwogYm9vbAkJZW5hYmxlX3Rp ZHNjYW4gPSB0cnVlOwogYm9vbAkJZW5hYmxlX3NvcnQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQgYi9zcmMvYmFja2VuZC91dGls cy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdAppbmRleCBmMDI2MGU2ZTQuLjI2NGYzY2ZkMCAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQKKysrIGIv c3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQKQEAgLTg5MSw2ICs4OTEs MTMgQEAKICAgYm9vdF92YWwgPT4gJ3RydWUnLAogfSwKIAoreyBuYW1lID0+ICdlbmFibGVfaW5k ZXhzY2FuX3ByZWZldGNoJywgdHlwZSA9PiAnYm9vbCcsIGNvbnRleHQgPT4gJ1BHQ19VU0VSU0VU JywgZ3JvdXAgPT4gJ1FVRVJZX1RVTklOR19NRVRIT0QnLAorICBzaG9ydF9kZXNjID0+ICdFbmFi bGVzIHByZWZldGNoaW5nIGZvciBpbmRleCBzY2FucyBhbmQgaW5kZXgtb25seS1zY2Fucy4nLAor ICBmbGFncyA9PiAnR1VDX0VYUExBSU4nLAorICB2YXJpYWJsZSA9PiAnZW5hYmxlX2luZGV4c2Nh bl9wcmVmZXRjaCcsCisgIGJvb3RfdmFsID0+ICd0cnVlJywKK30sCisKIHsgbmFtZSA9PiAnZW5h YmxlX21hdGVyaWFsJywgdHlwZSA9PiAnYm9vbCcsIGNvbnRleHQgPT4gJ1BHQ19VU0VSU0VUJywg Z3JvdXAgPT4gJ1FVRVJZX1RVTklOR19NRVRIT0QnLAogICBzaG9ydF9kZXNjID0+ICdFbmFibGVz IHRoZSBwbGFubmVyXCdzIHVzZSBvZiBtYXRlcmlhbGl6YXRpb24uJywKICAgZmxhZ3MgPT4gJ0dV Q19FWFBMQUlOJywKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNx bC5jb25mLnNhbXBsZSBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNh bXBsZQppbmRleCBjNGY5MmZjZGEuLjVhYTQ2NTg2ZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv dXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxz L21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQpAQCAtNDEyLDYgKzQxMiw3IEBACiAjZW5hYmxl X2luY3JlbWVudGFsX3NvcnQgPSBvbgogI2VuYWJsZV9pbmRleHNjYW4gPSBvbgogI2VuYWJsZV9p bmRleG9ubHlzY2FuID0gb24KKyNlbmFibGVfaW5kZXhzY2FuX3ByZWZldGNoID0gb24KICNlbmFi bGVfbWF0ZXJpYWwgPSBvbgogI2VuYWJsZV9tZW1vaXplID0gb24KICNlbmFibGVfbWVyZ2Vqb2lu ID0gb24KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbCBiL2RvYy9zcmMvc2dt bC9jb25maWcuc2dtbAppbmRleCA1NTYwYjk1ZWUuLjc4OTYwZDRlZSAxMDA2NDQKLS0tIGEvZG9j L3NyYy9zZ21sL2NvbmZpZy5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbApAQCAt NTYzMSw2ICs1NjMxLDIyIEBAIEFOWSA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bnVt X3N5bmM8L3JlcGxhY2VhYmxlPiAoIDxyZXBsYWNlYWJsZSBjbGFzcz0iCiAgICAgICA8L2xpc3Rp dGVtPgogICAgICA8L3Zhcmxpc3RlbnRyeT4KIAorICAgICA8dmFybGlzdGVudHJ5IGlkPSJndWMt ZW5hYmxlLWluZGV4c2Nhbi1wcmVmZXRjaCIgeHJlZmxhYmVsPSJlbmFibGVfaW5kZXhzY2FuX3By ZWZldGNoIj4KKyAgICAgIDx0ZXJtPjx2YXJuYW1lPmVuYWJsZV9pbmRleHNjYW5fcHJlZmV0Y2g8 L3Zhcm5hbWU+ICg8dHlwZT5ib29sZWFuPC90eXBlPikKKyAgICAgIDxpbmRleHRlcm0+CisgICAg ICAgPHByaW1hcnk+PHZhcm5hbWU+ZW5hYmxlX2luZGV4c2Nhbl9wcmVmZXRjaDwvdmFybmFtZT4g Y29uZmlndXJhdGlvbiBwYXJhbWV0ZXI8L3ByaW1hcnk+CisgICAgICA8L2luZGV4dGVybT4KKyAg ICAgIDwvdGVybT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgRW5h YmxlcyBvciBkaXNhYmxlcyBwcmVmZXRjaGluZyBmb3IgaW5kZXgtc2NhbiBhbmQgaW5kZXgtb25s eS1zY2FuCisgICAgICAgIHBsYW4gdHlwZXMuICBQcmVmZXRjaGluZyBjYW4gaW1wcm92ZSBwZXJm b3JtYW5jZSBieSByZWFkaW5nIHRhYmxlIEFNCisgICAgICAgIHBhZ2VzIGFoZWFkIG9mIHdoZW4g dGhleSBhcmUgbmVlZGVkIGR1cmluZyBpbmRleCBzY2Fucy4gIFRoZSBkZWZhdWx0CisgICAgICAg IGlzIDxsaXRlcmFsPm9uPC9saXRlcmFsPi4KKyAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3Rp dGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKwogICAgICA8dmFybGlzdGVudHJ5IGlkPSJndWMt ZW5hYmxlLW1hdGVyaWFsIiB4cmVmbGFiZWw9ImVuYWJsZV9tYXRlcmlhbCI+CiAgICAgICA8dGVy bT48dmFybmFtZT5lbmFibGVfbWF0ZXJpYWw8L3Zhcm5hbWU+ICg8dHlwZT5ib29sZWFuPC90eXBl PikKICAgICAgIDxpbmRleHRlcm0+CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvaW5kZXhhbS5z Z21sIGIvZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbAppbmRleCBmNDhkYTMxODUuLjU5YjJlNTkx OSAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbAorKysgYi9kb2Mvc3JjL3Nn bWwvaW5kZXhhbS5zZ21sCkBAIC0xNjcsMTAgKzE2NywxMSBAQCB0eXBlZGVmIHN0cnVjdCBJbmRl eEFtUm91dGluZQogICAgIGFtYmVnaW5zY2FuX2Z1bmN0aW9uIGFtYmVnaW5zY2FuOwogICAgIGFt cmVzY2FuX2Z1bmN0aW9uIGFtcmVzY2FuOwogICAgIGFtZ2V0dHVwbGVfZnVuY3Rpb24gYW1nZXR0 dXBsZTsgICAgIC8qIGNhbiBiZSBOVUxMICovCisgICAgYW1nZXRiYXRjaF9mdW5jdGlvbiBhbWdl dGJhdGNoOyAvKiBjYW4gYmUgTlVMTCAqLworICAgIGFtZnJlZWJhdGNoX2Z1bmN0aW9uIGFtZnJl ZWJhdGNoOwkvKiBjYW4gYmUgTlVMTCAqLwogICAgIGFtZ2V0Yml0bWFwX2Z1bmN0aW9uIGFtZ2V0 Yml0bWFwOyAgIC8qIGNhbiBiZSBOVUxMICovCiAgICAgYW1lbmRzY2FuX2Z1bmN0aW9uIGFtZW5k c2NhbjsKLSAgICBhbW1hcmtwb3NfZnVuY3Rpb24gYW1tYXJrcG9zOyAgICAgICAvKiBjYW4gYmUg TlVMTCAqLwotICAgIGFtcmVzdHJwb3NfZnVuY3Rpb24gYW1yZXN0cnBvczsgICAgIC8qIGNhbiBi ZSBOVUxMICovCisgICAgYW1wb3NyZXNldF9mdW5jdGlvbiBhbXBvc3Jlc2V0OyAvKiBjYW4gYmUg TlVMTCAqLwogCiAgICAgLyogaW50ZXJmYWNlIGZ1bmN0aW9ucyB0byBzdXBwb3J0IHBhcmFsbGVs IGluZGV4IHNjYW5zICovCiAgICAgYW1lc3RpbWF0ZXBhcmFsbGVsc2Nhbl9mdW5jdGlvbiBhbWVz dGltYXRlcGFyYWxsZWxzY2FuOyAgICAvKiBjYW4gYmUgTlVMTCAqLwpAQCAtNzQ5LDYgKzc1MCwx NzggQEAgYW1nZXR0dXBsZSAoSW5kZXhTY2FuRGVzYyBzY2FuLAogICAgPHN0cnVjdGZpZWxkPmFt Z2V0dHVwbGU8L3N0cnVjdGZpZWxkPiBmaWVsZCBpbiBpdHMgPHN0cnVjdG5hbWU+SW5kZXhBbVJv dXRpbmU8L3N0cnVjdG5hbWU+CiAgICBzdHJ1Y3QgbXVzdCBiZSBzZXQgdG8gTlVMTC4KICAgPC9w YXJhPgorICA8bm90ZT4KKyAgIDxwYXJhPgorICAgIEFzIG9mIDxwcm9kdWN0bmFtZT5Qb3N0Z3Jl U1FMPC9wcm9kdWN0bmFtZT4gdmVyc2lvbiAxOSwgcG9zaXRpb24gbWFya2luZworICAgIGFuZCBy ZXN0b3JhdGlvbiBvZiBzY2FucyBpcyBubyBsb25nZXIgc3VwcG9ydGVkIGZvciB0aGUKKyAgICA8 ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IGludGVyZmFjZTsgb25seSB0aGUKKyAgICA8 ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGludGVyZmFjZSBzdXBwb3J0cyB0aGlzIGZl YXR1cmUuCisgICA8L3BhcmE+CisgIDwvbm90ZT4KKworICA8cGFyYT4KKzxwcm9ncmFtbGlzdGlu Zz4KK0luZGV4U2NhbkJhdGNoCithbWdldGJhdGNoIChJbmRleFNjYW5EZXNjIHNjYW4sCisgICAg ICAgICAgICBJbmRleFNjYW5CYXRjaCBwcmlvcmJhdGNoLAorICAgICAgICAgICAgU2NhbkRpcmVj dGlvbiBkaXJlY3Rpb24pOworPC9wcm9ncmFtbGlzdGluZz4KKyAgIFJldHVybiB0aGUgbmV4dCBi YXRjaCBvZiBpbmRleCB0dXBsZXMgaW4gdGhlIGdpdmVuIHNjYW4sIG1vdmluZyBpbiB0aGUKKyAg IGdpdmVuIGRpcmVjdGlvbiAoZm9yd2FyZCBvciBiYWNrd2FyZCBpbiB0aGUgaW5kZXgpLiAgUmV0 dXJucyBhbiBpbnN0YW5jZSBvZgorICAgPHR5cGU+SW5kZXhTY2FuQmF0Y2g8L3R5cGU+IHdpdGgg aW5kZXggdHVwbGVzIGxvYWRlZCwgb3IKKyAgIDxsaXRlcmFsPk5VTEw8L2xpdGVyYWw+IGlmIHRo ZXJlIGFyZSBubyBtb3JlIGluZGV4IHR1cGxlcyBpbiB0aGUgZ2l2ZW4KKyAgIHNjYW4gZGlyZWN0 aW9uLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBUaGUgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8 L2Z1bmN0aW9uPiBpbnRlcmZhY2UgaXMgYW4gYWx0ZXJuYXRpdmUgdG8KKyAgIDxmdW5jdGlvbj5h bWdldHR1cGxlPC9mdW5jdGlvbj4gdGhhdCByZXR1cm5zIG1hdGNoaW5nIGluZGV4IGVudHJpZXMg aW4gYmF0Y2hlcworICAgcmF0aGVyIHRoYW4gb25lIGF0IGEgdGltZS4gVGhpcyBlbmFibGVzIHRo ZSB0YWJsZSBhY2Nlc3MgbWV0aG9kIHRvCisgICBvcHRpbWl6ZSB0YWJsZSBibG9jayBhY2Nlc3Mg cGF0dGVybnMgYW5kIHBlcmZvcm0gSS9PIHByZWZldGNoaW5nLgorICAgQnkgcmV0dXJuaW5nIGFs bCBtYXRjaGluZyBpbmRleCBlbnRyaWVzIGZyb20gYSBzaW5nbGUgaW5kZXggcGFnZSB0b2dldGhl ciwKKyAgIHRoZSB0YWJsZSBBTSBjYW4gcmVhZGFoZWFkIHRocm91Z2ggdGhlIGluZGV4IGFuZCBp ZGVudGlmeSB3aGljaCB0YWJsZQorICAgYmxvY2tzIHdpbGwgYmUgbmVlZGVkLCBhbGxvd2luZyBw cmVmZXRjaGluZyBvZiB0YWJsZSBBTSBwYWdlcyBkdXJpbmcKKyAgIG9yZGVyZWQgaW5kZXggc2Nh bnMuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFRoZSB0YWJsZSBBTSBwYXNzZXMgdGhlIGJh dGNoIG1vc3QgcmVjZW50bHkgcmV0dXJuZWQgYnkKKyAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9m dW5jdGlvbj4gZm9yIHRoZSBnaXZlbiBzY2FuIGFzCisgICA8bGl0ZXJhbD5wcmlvcmJhdGNoPC9s aXRlcmFsPiAob3IgPGxpdGVyYWw+TlVMTDwvbGl0ZXJhbD4gb24gdGhlIGZpcnN0IGNhbGwKKyAg IGZvciB0aGUgc2NhbikuICBUaGUgaW5kZXggQU0gdXNlcyBpbmZvcm1hdGlvbiBmcm9tIDxsaXRl cmFsPnByaW9yYmF0Y2g8L2xpdGVyYWw+CisgICB0byBkZXRlcm1pbmUgd2hpY2ggaW5kZXggcGFn ZSB0byByZWFkIG5leHQuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIEEgYmF0Y2ggcmV0dXJu ZWQgYnkgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBpcyBhc3NvY2lhdGVkIHdpdGgg YQorICAgcGlubmVkIGluZGV4IHBhZ2UgY29udGFpbmluZyBhdCBsZWFzdCBvbmUgbWF0Y2hpbmcg aXRlbS90dXBsZS4gIFRoZSBidWZmZXIKKyAgIHBpbiBjYW4gYmUgaGVsZCBvbnRvIGJ5IHRoZSB0 YWJsZSBBTSBhcyBhbiBpbnRlcmxvY2sgYWdhaW5zdCBjb25jdXJyZW50IFRJRAorICAgcmVjeWNs aW5nIGJ5IDxjb21tYW5kPlZBQ1VVTTwvY29tbWFuZD4uICBTZWUgPHhyZWYgbGlua2VuZD0iaW5k ZXgtbG9ja2luZyIvPgorICAgZm9yIGRldGFpbHMgb24gYnVmZmVyIHBpbiBtYW5hZ2VtZW50IGR1 cmluZyBpbmRleCBzY2Fucy4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgQSA8dHlwZT5JbmRl eFNjYW5CYXRjaDwvdHlwZT4gdGhhdCBpcyByZXR1cm5lZCBieQorICAgPGZ1bmN0aW9uPmFtZ2V0 YmF0Y2g8L2Z1bmN0aW9uPiBpcyBubyBsb25nZXIgbWFuYWdlZCBieSB0aGUgYWNjZXNzIG1ldGhv ZC4KKyAgIEl0IGlzIHVwIHRvIHRoZSB0YWJsZSBBTSBjYWxsZXIgdG8gZGVjaWRlIHdoZW4gaXQg c2hvdWxkIGJlIGZyZWVkIGJ5CisgICBwYXNzaW5nIGl0IHRvIDxmdW5jdGlvbj5hbWZyZWViYXRj aDwvZnVuY3Rpb24+LiAgTm90ZSBhbHNvIHRoYXQKKyAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9m dW5jdGlvbj4gZnVuY3Rpb25zIG11c3QgbmV2ZXIgbW9kaWZ5IHRoZQorICAgPHN0cnVjdGZpZWxk PnByaW9yYmF0Y2g8L3N0cnVjdGZpZWxkPiBwYXJhbWV0ZXIuICBUaGUgY29yZQorICAgPGZpbGVu YW1lPnNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvPC9maWxlbmFtZT4gYW5kCisgICA8ZmlsZW5h bWU+c3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvPC9maWxlbmFtZT4gaW1wbGVtZW50YXRpb25zIHBy b3ZpZGUKKyAgIHJlZmVyZW5jZSBleGFtcGxlcyBvZiB0aGUgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8 L2Z1bmN0aW9uPiBpbnRlcmZhY2UuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFRoZSBzYW1l IGNhdmVhdHMgZGVzY3JpYmVkIGZvciA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IGFw cGx5IGhlcmUKKyAgIHRvbzogYW4gZW50cnkgaW4gdGhlIHJldHVybmVkIGJhdGNoIG1lYW5zIG9u bHkgdGhhdCB0aGUgaW5kZXggY29udGFpbnMKKyAgIGFuIGVudHJ5IHRoYXQgbWF0Y2hlcyB0aGUg c2NhbiBrZXlzLCBub3QgdGhhdCB0aGUgdHVwbGUgbmVjZXNzYXJpbHkgc3RpbGwKKyAgIGV4aXN0 cyBpbiB0aGUgaGVhcCBvciB3aWxsIHBhc3MgdGhlIGNhbGxlcidzIHNuYXBzaG90IHRlc3QuCisg IDwvcGFyYT4KKworICA8cGFyYT4KKyAgIEluZGV4IGFjY2VzcyBtZXRob2RzIHVzaW5nIDxmdW5j dGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gbXVzdCBzZXQKKyAgIDxsaXRlcmFsPnNjYW4tJmd0 O3hzX3JlY2hlY2s8L2xpdGVyYWw+IHRvIGluZGljYXRlIHdoZXRoZXIgcmVjaGVja2luZyBvZgor ICAgc2NhbiBrZXlzIGlzIHJlcXVpcmVkLCBpbiB0aGUgc2FtZSB3YXkgYXMgPGZ1bmN0aW9uPmFt Z2V0dHVwbGU8L2Z1bmN0aW9uPgorICAgZG9lcy4gSG93ZXZlciwgPGxpdGVyYWw+c2Nhbi0mZ3Q7 eHNfcmVjaGVjazwvbGl0ZXJhbD4gbXVzdCBiZSBzZXQgY29uc2lzdGVudGx5CisgICBmb3IgYW4g ZW50aXJlIHNjYW4gcmF0aGVyIHRoYW4gdmFyeWluZyBvbiBhIHBlci10dXBsZSBiYXNpcy4gVGhp cyBpcyBhIGtleQorICAgZGlmZmVyZW5jZSBmcm9tIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5j dGlvbj4sIHdoaWNoIGNhbiBzZXQKKyAgIDxsaXRlcmFsPnNjYW4tJmd0O3hzX3JlY2hlY2s8L2xp dGVyYWw+IGluZGVwZW5kZW50bHkgZm9yIGVhY2ggdHVwbGUgaXQgcmV0dXJucy4KKyAgIEluZGV4 IGFjY2VzcyBtZXRob2RzIHRoYXQgcmVxdWlyZSBncmFudWxhciBjb250cm9sIG92ZXIKKyAgIDxs aXRlcmFsPnNjYW4tJmd0O3hzX3JlY2hlY2s8L2xpdGVyYWw+IG11c3QgdXNlIHRoZSA8ZnVuY3Rp b24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+CisgICBpbnRlcmZhY2UgaW5zdGVhZCBvZiA8ZnVuY3Rp b24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+LgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBTaW1p bGFybHksIHRoZSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGludGVyZmFjZSBkb2Vz IG5vdCBzdXBwb3J0CisgICBpbmRleC1vbmx5IHNjYW5zIHRoYXQgcmV0dXJuIGRhdGEgaW4gdGhl IGZvcm0gb2YgYQorICAgPHN0cnVjdG5hbWU+SGVhcFR1cGxlPC9zdHJ1Y3RuYW1lPiBwb2ludGVy LiAgSW5kZXgtb25seSBzY2FucyB3b3JrIGJ5CisgICBjb3B5aW5nIDxzdHJ1Y3RuYW1lPkluZGV4 VHVwbGU8L3N0cnVjdG5hbWU+IHJlY29yZHMgZnJvbSBpbmRleCBwYWdlcyBpbnRvIGEKKyAgIGxv Y2FsIGJ1ZmZlciBhc3NvY2lhdGVkIHdpdGggZWFjaCBiYXRjaC4gIDxsaXRlcmFsPnhzX2l0dXBk ZXNjPC9saXRlcmFsPgorICAgd29ya3MgaW4gdGhlIHNhbWUgYXMgYWxyZWFkeSBkZXNjcmliZWQg Zm9yIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4uCisgICBUaGUgYWNjZXNzIG1ldGhv ZCBtdXN0IG5vdCBzZXQgdGhlIDxsaXRlcmFsPnNjYW4tJmd0O3hzX2l0dXA8L2xpdGVyYWw+IG9y CisgICA8bGl0ZXJhbD5zY2FuLSZndDt4c19oaXR1cDwvbGl0ZXJhbD4gZmllbGRzIGl0c2VsZi4K KyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgVGhlIGluZGV4IGFjY2VzcyBtZXRob2QgbXVzdCBw cm92aWRlIGVpdGhlciA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+CisgICBvciA8ZnVu Y3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+LCBidXQgbm90IGJvdGguCisgICBXaGVuIHRoZSBh Y2Nlc3MgbWV0aG9kIHByb3ZpZGVzIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4sIGl0 IG11c3QKKyAgIGFsc28gcHJvdmlkZSA8ZnVuY3Rpb24+YW1mcmVlYmF0Y2g8L2Z1bmN0aW9uPi4K KyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgVGhlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5j dGlvbj4gZnVuY3Rpb24gbmVlZCBvbmx5IGJlIHByb3ZpZGVkIGlmIHRoZQorICAgYWNjZXNzIG1l dGhvZCBzdXBwb3J0cyA8cXVvdGU+cGxhaW48L3F1b3RlPiBpbmRleCBzY2Fucy4gIElmIGl0IGRv ZXNuJ3QsCisgICB0aGUgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBmaWVsZCBpbiBp dHMKKyAgIDxzdHJ1Y3RuYW1lPkluZGV4QW1Sb3V0aW5lPC9zdHJ1Y3RuYW1lPiBzdHJ1Y3QgbXVz dCBiZSBzZXQgdG8gTlVMTC4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorPHByb2dyYW1saXN0aW5n Pgordm9pZAorYW1mcmVlYmF0Y2ggKEluZGV4U2NhbkRlc2Mgc2NhbiwKKyAgICAgICAgICAgICBJ bmRleFNjYW5CYXRjaCBiYXRjaCk7Cis8L3Byb2dyYW1saXN0aW5nPgorICAgRnJlZXMgYSBiYXRj aCByZXR1cm5lZCBieSB0aGUgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBjYWxsYmFj ay4KKyAgIFRoZSA8bGl0ZXJhbD5iYXRjaDwvbGl0ZXJhbD4gYXJndW1lbnQgaXMgYXNzb2NpYXRl ZCB3aXRoIGFuIGluZGV4IHBhZ2UsCisgICB3aGljaCB3aWxsIG5ldmVyIGJlIGxvY2tlZCBvciBw aW5uZWQgd2hlbiA8ZnVuY3Rpb24+YW1mcmVlYmF0Y2g8L2Z1bmN0aW9uPgorICAgaXMgY2FsbGVk LgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICA8ZnVuY3Rpb24+YW1mcmVlYmF0Y2g8L2Z1bmN0 aW9uPiBmcmVlcyBtZW1vcnkgYW5kIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGgKKyAgIHRoZSBi YXRjaC4gIEl0IG11c3QgYWx3YXlzIHJlbGVhc2UgdGhlIGNhbGxlcidzIGJhdGNoIGxhc3QsIGJ5 IHBhc3NpbmcgaXQKKyAgIGFzIGFuIGFyZ3VtZW50IHRvIDxmdW5jdGlvbj5pbmRleGFtX3V0aWxf YmF0Y2hfcmVsZWFzZTwvZnVuY3Rpb24+LgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBUaGlz IGZ1bmN0aW9uIGlzIGNhbGxlZCBleGNsdXNpdmVseSBieSB0YWJsZSBhY2Nlc3MgbWV0aG9kcyAo dmlhIHRoZQorICAgPGZ1bmN0aW9uPnRhYmxlYW1fdXRpbF9mcmVlX2JhdGNoPC9mdW5jdGlvbj4g d3JhcHBlciBmdW5jdGlvbikgdG8gaW5kaWNhdGUKKyAgIHRoYXQgcHJvY2Vzc2luZyBvZiB0aGUg YmF0Y2ggaXMgY29tcGxldGU7IGl0IHNob3VsZCBuZXZlciBiZSBjYWxsZWQgd2l0aGluCisgICB0 aGUgaW5kZXggYWNjZXNzIG1ldGhvZCBpdHNlbGYuICBUaGUgdGFibGUgQU0gaXMgcmVzcG9uc2li bGUgZm9yIHJlbGVhc2luZworICAgdGhlIGJhdGNoJ3MgYnVmZmVyIHBpbiBiZWZvcmUgY2FsbGlu ZyA8ZnVuY3Rpb24+YW1mcmVlYmF0Y2g8L2Z1bmN0aW9uPi4KKyAgPC9wYXJhPgorCisgIDxwYXJh PgorICAgVGhlIGluZGV4IEFNIGhhcyB0aGUgb3B0aW9uIG9mIHNldHRpbmcgPGxpdGVyYWw+TFBf REVBRDwvbGl0ZXJhbD4gYml0cyBpbgorICAgdGhlIGluZGV4IHBhZ2UgdG8gbWFyayBkZWFkIHR1 cGxlcy4gIFdoaWxlIHRoaXMgaXMgb3B0aW9uYWwsIGltcGxlbWVudGluZworICAgaXQgaXMgcmVj b21tZW5kZWQgZm9yIHBlcmZvcm1hbmNlLCBhcyBpdCBhbGxvd3MgZnV0dXJlIHNjYW5zIHRvIHNr aXAKKyAgIGtub3duLWRlYWQgaW5kZXggZW50cmllcy4gIEJvdGggY29yZSBpbmRleCBhY2Nlc3Mg bWV0aG9kcyB0aGF0IGN1cnJlbnRseQorICAgc3VwcG9ydCA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwv ZnVuY3Rpb24+IChCLXRyZWUgYW5kIGhhc2gpIGltcGxlbWVudAorICAgPGxpdGVyYWw+TFBfREVB RDwvbGl0ZXJhbD4gbWFya2luZywgdGhvdWdoIHRoaXJkLXBhcnR5IGluZGV4IGFjY2VzcyBtZXRo b2RzCisgICBhcmUgZnJlZSB0byBjaG9vc2Ugd2hldGhlciB0byBpbXBsZW1lbnQgdGhpcyBmZWF0 dXJlLgorICAgVGhlIHRhYmxlIEFNIG1heSBjYWxsCisgICA8ZnVuY3Rpb24+dGFibGVhbV91dGls X2tpbGxfc2NhbnBvc2l0ZW08L2Z1bmN0aW9uPiB0byBtYXJrIGRlYWQgaXRlbXMgYXMKKyAgIHRo ZSBzY2FuIHByb2dyZXNzZXMuIElmIHRoZSBiYXRjaCBjb250YWlucyBhbnkgc3VjaCBkZWFkIGl0 ZW1zLCB0aGUgYmF0Y2gncworICAgPHN0cnVjdGZpZWxkPmtpbGxlZEl0ZW1zPC9zdHJ1Y3RmaWVs ZD4gYXJyYXkgd2lsbCBoYXZlIGJlZW4gc29ydGVkIGFuZAorICAgZGVkdXBsaWNhdGVkIGJlZm9y ZSA8ZnVuY3Rpb24+YW1mcmVlYmF0Y2g8L2Z1bmN0aW9uPiBpcyBjYWxsZWQsIHdpdGggaXRlbQor ICAgb2Zmc2V0cyBhcHBlYXJpbmcgaW4gYXNjZW5kaW5nIG9yZGVyICh0aGF0IGlzLCBpbiBpbmRl eCBwYWdlIG9yZGVyLCB3aGljaAorICAgaXMgYWxzbyBiYXRjaCBvcmRlcikgYW5kIG5vIG9mZnNl dCBhcHBlYXJpbmcgbW9yZSB0aGFuIG9uY2UuIFRoaXMgc29ydGluZworICAgbWFrZXMgaXQgdW5u ZWNlc3NhcnkgZm9yIHRoZSB0YWJsZSBBTSB0byBjYWxsCisgICA8ZnVuY3Rpb24+dGFibGVhbV91 dGlsX2tpbGxfc2NhbnBvc2l0ZW08L2Z1bmN0aW9uPiBpbiBhbnkgcGFydGljdWxhciBvcmRlci4K KyAgIChJbmRleCBhY2Nlc3MgbWV0aG9kcyB1c2luZyA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVu Y3Rpb24+IHJlbHkgb24gdGhlCisgICA8c3RydWN0ZmllbGQ+a2lsbF9wcmlvcl90dXBsZTwvc3Ry dWN0ZmllbGQ+IG1lY2hhbmlzbSBpbnN0ZWFkIHRvIG1hcmsgZGVhZAorICAgdHVwbGVzOyB0aGUg PGZpbGVuYW1lPnNyYy9iYWNrZW5kL2FjY2Vzcy9naXN0LzwvZmlsZW5hbWU+IGltcGxlbWVudGF0 aW9uCisgICBwcm92aWRlcyBhIHJlZmVyZW5jZSBleGFtcGxlLikKKyAgPC9wYXJhPgorCisgIDxw YXJhPgorICAgVGhlIGluZGV4IEFNIG1heSBjaG9vc2UgdG8gcmV0YWluIGl0cyBvd24gYnVmZmVy IHBpbnMgd2hlbiB0aGlzIHNlcnZlcyBhbgorICAgaW50ZXJuYWwgcHVycG9zZSAoZm9yIGV4YW1w bGUsIG1haW50YWluaW5nIGEgZGVzY2VudCBzdGFjayBvZiBwaW5uZWQgaW5kZXgKKyAgIHBhZ2Vz IGZvciByZXVzZSBhY3Jvc3MgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBjYWxscyku ICBIb3dldmVyLAorICAgYW55IHNjaGVtZSB0aGF0IHJldGFpbnMgYnVmZmVyIHBpbnMgbWFuYWdl ZCBieSB0aGUgaW5kZXggQU0gbXVzdCBiZSBzdXJlIHRvCisgICBmcmVlIHRoZSBwaW5zIGF0IGFu IG9wcG9ydHVuZSBwb2ludCAoZm9yIGV4YW1wbGUgd2hlbiA8ZnVuY3Rpb24+YW1yZXNjYW48L2Z1 bmN0aW9uPgorICAgYW5kL29yIDxmdW5jdGlvbj5hbWVuZHNjYW48L2Z1bmN0aW9uPiBhcmUgY2Fs bGVkKS4gIEl0IG11c3QgYWxzbyBrZWVwIHRoZQorICAgbnVtYmVyIG9mIHJldGFpbmVkIHBpbnMg Zml4ZWQgYW5kIHNtYWxsLCB0byBhdm9pZCBleGhhdXN0aW5nIHRoZSBiYWNrZW5kJ3MKKyAgIGJ1 ZmZlciBwaW4gbGltaXQuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFRoZSA8ZnVuY3Rpb24+ YW1mcmVlYmF0Y2g8L2Z1bmN0aW9uPiBmdW5jdGlvbiBuZWVkIG9ubHkgYmUgcHJvdmlkZWQgaWYg dGhlCisgICBhY2Nlc3MgbWV0aG9kIHByb3ZpZGVzIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5j dGlvbj4uIE90aGVyd2lzZSBpdCBoYXMgdG8KKyAgIHJlbWFpbiBzZXQgdG8gPGxpdGVyYWw+TlVM TDwvbGl0ZXJhbD4uCisgIDwvcGFyYT4KIAogICA8cGFyYT4KIDxwcm9ncmFtbGlzdGluZz4KQEAg LTc2OCw4ICs5NDEsOCBAQCBhbWdldGJpdG1hcCAoSW5kZXhTY2FuRGVzYyBzY2FuLAogICAgaXRz ZWxmLCBhbmQgdGhlcmVmb3JlIGNhbGxlcnMgcmVjaGVjayBib3RoIHRoZSBzY2FuIGNvbmRpdGlv bnMgYW5kIHRoZQogICAgcGFydGlhbCBpbmRleCBwcmVkaWNhdGUgKGlmIGFueSkgZm9yIHJlY2hl Y2thYmxlIHR1cGxlcy4gIFRoYXQgbWlnaHQgbm90CiAgICBhbHdheXMgYmUgdHJ1ZSwgaG93ZXZl ci4KLSAgIDxmdW5jdGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+IGFuZAotICAgPGZ1bmN0aW9u PmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBjYW5ub3QgYmUgdXNlZCBpbiB0aGUgc2FtZSBpbmRleCBz Y2FuOyB0aGVyZQorICAgT25seSBvbmUgb2YgPGZ1bmN0aW9uPmFtZ2V0Yml0bWFwPC9mdW5jdGlv bj4sIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4sCisgICBvciA8ZnVuY3Rpb24+YW1n ZXRiYXRjaDwvZnVuY3Rpb24+IGNhbiBiZSB1c2VkIGluIGFueSBnaXZlbiBpbmRleCBzY2FuOyB0 aGVyZQogICAgYXJlIG90aGVyIHJlc3RyaWN0aW9ucyB0b28gd2hlbiB1c2luZyA8ZnVuY3Rpb24+ YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiwgYXMgZXhwbGFpbmVkCiAgICBpbiA8eHJlZiBsaW5rZW5k PSJpbmRleC1zY2FubmluZyIvPi4KICAgPC9wYXJhPgpAQCAtNzk1LDMyICs5NjgsNTIgQEAgYW1l bmRzY2FuIChJbmRleFNjYW5EZXNjIHNjYW4pOwogICA8cGFyYT4KIDxwcm9ncmFtbGlzdGluZz4K IHZvaWQKLWFtbWFya3BvcyAoSW5kZXhTY2FuRGVzYyBzY2FuKTsKK2FtcG9zcmVzZXQgKEluZGV4 U2NhbkRlc2Mgc2NhbiwKKyAgICAgICAgICAgIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKIDwvcHJv Z3JhbWxpc3Rpbmc+Ci0gICBNYXJrIGN1cnJlbnQgc2NhbiBwb3NpdGlvbi4gIFRoZSBhY2Nlc3Mg bWV0aG9kIG5lZWQgb25seSBzdXBwb3J0IG9uZQotICAgcmVtZW1iZXJlZCBzY2FuIHBvc2l0aW9u IHBlciBzY2FuLgorICAgTm90aWZ5IHRoZSBpbmRleCBBTSB0aGF0IHRoZSB0YWJsZSBBTSBpcyBh Ym91dCB0byBjaGFuZ2UgdGhlIHNjYW4ncworICAgbG9naWNhbCBwb3NpdGlvbiBpbiBhIHdheSB0 aGF0IHJlcXVpcmVzIHRoZSBpbmRleCBBTSB0byByZXNldCBhbnkgc3RhdGUKKyAgIHRoYXQgaW5k ZXBlbmRlbnRseSB0cmFja3MgdGhlIHNjYW4ncyBwcm9ncmVzcy4gIEZvciBleGFtcGxlLCBuYnRy ZWUgbXVzdAorICAgcmVzZXQgdGhlIGFycmF5IGtleXMgdXNlZCBieSA8bGl0ZXJhbD5TY2FsYXJB cnJheU9wRXhwcjwvbGl0ZXJhbD4gcXVhbAorICAgZXZhbHVhdGlvbiB3aGVuIHRoZSBzY2FuIHBv c2l0aW9uIGNoYW5nZXMuICBUaGlzIGNhbGxiYWNrIGlzIGludm9rZWQgd2hlbgorICAgdGhlIHRh YmxlIEFNIGlzIGFib3V0IHRvIHByb2Nlc3MgYSBiYXRjaCBpbiBhIGRpZmZlcmVudCBkaXJlY3Rp b24gdGhhbgorICAgd2FzIHVzZWQgd2hlbiB0aGUgYmF0Y2ggd2FzIG9yaWdpbmFsbHkgcmV0dXJu ZWQgYnkKKyAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4sIGFuZCBhbHNvIHdoZW4g YSBtYXJrZWQgc2NhbiBwb3NpdGlvbiBpcworICAgYWJvdXQgdG8gYmUgcmVzdG9yZWQuCiAgIDwv cGFyYT4KIAogICA8cGFyYT4KLSAgIFRoZSA8ZnVuY3Rpb24+YW1tYXJrcG9zPC9mdW5jdGlvbj4g ZnVuY3Rpb24gbmVlZCBvbmx5IGJlIHByb3ZpZGVkIGlmIHRoZSBhY2Nlc3MKLSAgIG1ldGhvZCBz dXBwb3J0cyBvcmRlcmVkIHNjYW5zLiAgSWYgaXQgZG9lc24ndCwKLSAgIHRoZSA8c3RydWN0Zmll bGQ+YW1tYXJrcG9zPC9zdHJ1Y3RmaWVsZD4gZmllbGQgaW4gaXRzIDxzdHJ1Y3RuYW1lPkluZGV4 QW1Sb3V0aW5lPC9zdHJ1Y3RuYW1lPgotICAgc3RydWN0IG1heSBiZSBzZXQgdG8gTlVMTC4KKyAg IFdoZW4gPGZ1bmN0aW9uPmFtcG9zcmVzZXQ8L2Z1bmN0aW9uPiBpcyBjYWxsZWQgZHVlIHRvIGEg Y3Jvc3MtYmF0Y2gKKyAgIGRpcmVjdGlvbiBjaGFuZ2UsIHRoZSBjb3JlIHN5c3RlbSB3aWxsIGhh dmUgYWxyZWFkeSBmbGlwcGVkIHRoZSBiYXRjaCdzCisgICA8c3RydWN0ZmllbGQ+ZGlyPC9zdHJ1 Y3RmaWVsZD4gZmllbGQgdG8gcmVmbGVjdCB0aGUgbmV3IHNjYW4gZGlyZWN0aW9uCisgICBiZWZv cmUgbWFraW5nIHRoZSBjYWxsLiAgVGhlIGluZGV4IEFNIHNob3VsZCB1c2UgdGhpcyB1cGRhdGVk IGRpcmVjdGlvbgorICAgd2hlbiByZXNldHRpbmcgYW55IHN0YXRlIHRoYXQgZGVwZW5kcyBvbiBr bm93aW5nIHdoaWNoIHdheSB0aGUgc2NhbiBpcworICAgcHJvY2VlZGluZy4gIFdoZW4gY2FsbGVk IHRvIHJlc3RvcmUgYSBtYXJrZWQgcG9zaXRpb24sIHRoZSBiYXRjaCdzCisgICA8c3RydWN0Zmll bGQ+ZGlyPC9zdHJ1Y3RmaWVsZD4gaXMgbm90IG1vZGlmaWVkOyBpdCByZXRhaW5zIHRoZSBkaXJl Y3Rpb24KKyAgIGZyb20gd2hlbiB0aGUgYmF0Y2ggd2FzIG9yaWdpbmFsbHkgcmV0dXJuZWQuICBJ biBib3RoIGNhc2VzLCB0aGUgYmF0Y2gKKyAgIHBhc3NlZCB0byA8ZnVuY3Rpb24+YW1wb3NyZXNl dDwvZnVuY3Rpb24+IGlzIHRoZSBiYXRjaCB0aGF0IHdpbGwgYmUgdXNlZAorICAgdG8gY29udGlu dWUgdGhlIHNjYW4uCiAgIDwvcGFyYT4KIAogICA8cGFyYT4KLTxwcm9ncmFtbGlzdGluZz4KLXZv aWQKLWFtcmVzdHJwb3MgKEluZGV4U2NhbkRlc2Mgc2Nhbik7Ci08L3Byb2dyYW1saXN0aW5nPgot ICAgUmVzdG9yZSB0aGUgc2NhbiB0byB0aGUgbW9zdCByZWNlbnRseSBtYXJrZWQgcG9zaXRpb24u CisgICBJbmRleCBhY2Nlc3MgbWV0aG9kcyB0aGF0IGhhdmUgcHJpdmF0ZSBzdGF0ZSB3aGljaCBt dXN0IGJlIHJlc2V0IHdoZW4gdGhlCisgICBzY2FuIHBvc2l0aW9uIGNoYW5nZXMgbXVzdCBwcm92 aWRlIGFuIDxmdW5jdGlvbj5hbXBvc3Jlc2V0PC9mdW5jdGlvbj4KKyAgIGltcGxlbWVudGF0aW9u LiAgSW5kZXggQU1zIHdpdGggbm8gc3VjaCBzdGF0ZSBtYXkgc2V0CisgICA8c3RydWN0ZmllbGQ+ YW1wb3NyZXNldDwvc3RydWN0ZmllbGQ+IHRvIE5VTEwuCisgICBUaGUgPGZ1bmN0aW9uPmFtcG9z cmVzZXQ8L2Z1bmN0aW9uPiBmdW5jdGlvbiBjYW4gb25seSBiZSBwcm92aWRlZCB3aGVuIHRoZQor ICAgYWNjZXNzIG1ldGhvZCBzdXBwb3J0cyBvcmRlcmVkIHNjYW5zIHRocm91Z2ggdGhlIDxmdW5j dGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4KKyAgIGludGVyZmFjZS4KICAgPC9wYXJhPgogCiAg IDxwYXJhPgotICAgVGhlIDxmdW5jdGlvbj5hbXJlc3RycG9zPC9mdW5jdGlvbj4gZnVuY3Rpb24g bmVlZCBvbmx5IGJlIHByb3ZpZGVkIGlmIHRoZSBhY2Nlc3MKLSAgIG1ldGhvZCBzdXBwb3J0cyBv cmRlcmVkIHNjYW5zLiAgSWYgaXQgZG9lc24ndCwKLSAgIHRoZSA8c3RydWN0ZmllbGQ+YW1yZXN0 cnBvczwvc3RydWN0ZmllbGQ+IGZpZWxkIGluIGl0cyA8c3RydWN0bmFtZT5JbmRleEFtUm91dGlu ZTwvc3RydWN0bmFtZT4KLSAgIHN0cnVjdCBtYXkgYmUgc2V0IHRvIE5VTEwuCisgICBBbGwgaW5k ZXggQU1zIHRoYXQgcHJvdmlkZSB0aGUgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBp bnRlcmZhY2UKKyAgIGFuZCBzZXQgPHN0cnVjdGZpZWxkPmFtY2FuYmFja3dhcmQ8L3N0cnVjdGZp ZWxkPiB0byB0cnVlIG5lZWQgdG8gYmUKKyAgIHByZXBhcmVkIGZvciBzY2FucyB0aGF0IHJlcXVl c3QgYSBiYXRjaCBpbiB0aGUgb3Bwb3NpdGUgc2NhbiBkaXJlY3Rpb24gdG8KKyAgIHRoZSBvbmUg aW5pdGlhbGx5IHVzZWQgdG8gcmV0dXJuIHRoZSBiYXRjaCBpbiBxdWVzdGlvbi4gIExpa2V3aXNl LCBtYXJrIGFuZAorICAgcmVzdG9yZSBmdW5jdGlvbmFsaXR5IGlzIHN1cHBvcnRlZCBieSBhbGwg aW5kZXggYWNjZXNzIG1ldGhvZHMgdGhhdCBwcm92aWRlCisgICB0aGUgPGZ1bmN0aW9uPmFtZ2V0 YmF0Y2g8L2Z1bmN0aW9uPiBpbnRlcmZhY2UuICBJdCBpcyB1cCB0byBpbmRleCBBTXMgdG8KKyAg IGFkZXF1YXRlbHkgYWNjb3VudCBmb3IgaG93IGVpdGhlciBjYXNlIG1pZ2h0IGludmFsaWRhdGUg dGhlaXIgcHJpdmF0ZSBzY2FuCisgICBzdGF0ZS4KICAgPC9wYXJhPgogCiAgIDxwYXJhPgpAQCAt OTc1LDYgKzExNjgsOCBAQCBhbXRyYW5zbGF0ZWNtcHR5cGUgKENvbXBhcmVUeXBlIGNtcHR5cGUs IE9pZCBvcGZhbWlseSwgT2lkIG9wY2ludHlwZSk7CiAgICAgICAgQWNjZXNzIG1ldGhvZHMgdGhh dCBhbHdheXMgcmV0dXJuIGVudHJpZXMgaW4gdGhlIG5hdHVyYWwgb3JkZXJpbmcKICAgICAgICBv ZiB0aGVpciBkYXRhIChzdWNoIGFzIGJ0cmVlKSBzaG91bGQgc2V0CiAgICAgICAgPHN0cnVjdGZp ZWxkPmFtY2Fub3JkZXI8L3N0cnVjdGZpZWxkPiB0byB0cnVlLgorICAgICAgIEJvdGggPGZ1bmN0 aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBhbmQgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0 aW9uPgorICAgICAgIHNjYW5zIHN1cHBvcnQgdGhpcyBjYXBhYmlsaXR5LgogICAgICAgIEN1cnJl bnRseSwgc3VjaCBhY2Nlc3MgbWV0aG9kcyBtdXN0IHVzZSBidHJlZS1jb21wYXRpYmxlIHN0cmF0 ZWd5CiAgICAgICAgbnVtYmVycyBmb3IgdGhlaXIgZXF1YWxpdHkgYW5kIG9yZGVyaW5nIG9wZXJh dG9ycy4KICAgICAgIDwvcGFyYT4KQEAgLTk4Nyw0MSArMTE4Miw0OSBAQCBhbXRyYW5zbGF0ZWNt cHR5cGUgKENvbXBhcmVUeXBlIGNtcHR5cGUsIE9pZCBvcGZhbWlseSwgT2lkIG9wY2ludHlwZSk7 CiAgICAgICAgYW4gb3JkZXIgc2F0aXNmeWluZyA8bGl0ZXJhbD5PUkRFUiBCWTwvbGl0ZXJhbD4g PHJlcGxhY2VhYmxlPmluZGV4X2tleTwvcmVwbGFjZWFibGU+CiAgICAgICAgPHJlcGxhY2VhYmxl Pm9wZXJhdG9yPC9yZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPmNvbnN0YW50PC9yZXBsYWNlYWJs ZT4uICBTY2FuIG1vZGlmaWVycwogICAgICAgIG9mIHRoYXQgZm9ybSBjYW4gYmUgcGFzc2VkIHRv IDxmdW5jdGlvbj5hbXJlc2NhbjwvZnVuY3Rpb24+IGFzIGRlc2NyaWJlZAotICAgICAgIHByZXZp b3VzbHkuCisgICAgICAgcHJldmlvdXNseS4gIE5vdGUgdGhhdCA8ZnVuY3Rpb24+YW1nZXRiYXRj aDwvZnVuY3Rpb24+IHNjYW5zIGRvIG5vdAorICAgICAgIHN1cHBvcnQgb3JkZXJpbmcgb3BlcmF0 b3JzLgogICAgICAgPC9wYXJhPgogICAgICA8L2xpc3RpdGVtPgogICAgIDwvaXRlbWl6ZWRsaXN0 PgogICA8L3BhcmE+CiAKICAgPHBhcmE+Ci0gICBUaGUgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1 bmN0aW9uPiBmdW5jdGlvbiBoYXMgYSA8bGl0ZXJhbD5kaXJlY3Rpb248L2xpdGVyYWw+IGFyZ3Vt ZW50LAorICAgVGhlIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gYW5kIDxmdW5jdGlv bj5hbWdldGJhdGNoPC9mdW5jdGlvbj4KKyAgIGZ1bmN0aW9ucyBoYXZlIGEgPGxpdGVyYWw+ZGly ZWN0aW9uPC9saXRlcmFsPiBhcmd1bWVudCwKICAgIHdoaWNoIGNhbiBiZSBlaXRoZXIgPGxpdGVy YWw+Rm9yd2FyZFNjYW5EaXJlY3Rpb248L2xpdGVyYWw+ICh0aGUgbm9ybWFsIGNhc2UpCiAgICBv ciAgPGxpdGVyYWw+QmFja3dhcmRTY2FuRGlyZWN0aW9uPC9saXRlcmFsPi4gIElmIHRoZSBmaXJz dCBjYWxsIGFmdGVyCiAgICA8ZnVuY3Rpb24+YW1yZXNjYW48L2Z1bmN0aW9uPiBzcGVjaWZpZXMg PGxpdGVyYWw+QmFja3dhcmRTY2FuRGlyZWN0aW9uPC9saXRlcmFsPiwgdGhlbiB0aGUKICAgIHNl dCBvZiBtYXRjaGluZyBpbmRleCBlbnRyaWVzIGlzIHRvIGJlIHNjYW5uZWQgYmFjay10by1mcm9u dCByYXRoZXIgdGhhbiBpbgotICAgdGhlIG5vcm1hbCBmcm9udC10by1iYWNrIGRpcmVjdGlvbiwg c28gPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBtdXN0IHJldHVybgotICAgdGhlIGxh c3QgbWF0Y2hpbmcgdHVwbGUgaW4gdGhlIGluZGV4LCByYXRoZXIgdGhhbiB0aGUgZmlyc3Qgb25l IGFzIGl0Ci0gICBub3JtYWxseSB3b3VsZC4gIChUaGlzIHdpbGwgb25seSBvY2N1ciBmb3IgYWNj ZXNzCi0gICBtZXRob2RzIHRoYXQgc2V0IDxzdHJ1Y3RmaWVsZD5hbWNhbm9yZGVyPC9zdHJ1Y3Rm aWVsZD4gdG8gdHJ1ZS4pICBBZnRlciB0aGUKLSAgIGZpcnN0IGNhbGwsIDxmdW5jdGlvbj5hbWdl dHR1cGxlPC9mdW5jdGlvbj4gbXVzdCBiZSBwcmVwYXJlZCB0byBhZHZhbmNlIHRoZSBzY2FuIGlu CisgICB0aGUgbm9ybWFsIGZyb250LXRvLWJhY2sgZGlyZWN0aW9uLiAgSW4gdGhpcyBjYXNlLAor ICAgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBtdXN0IHJldHVybiB0aGUgbGFzdCBt YXRjaGluZyB0dXBsZSBpbiB0aGUKKyAgIGluZGV4LCByYXRoZXIgdGhhbiB0aGUgZmlyc3Qgb25l IGFzIGl0IG5vcm1hbGx5IHdvdWxkLiAgU2ltaWxhcmx5LAorICAgPGZ1bmN0aW9uPmFtZ2V0YmF0 Y2g8L2Z1bmN0aW9uPiBtdXN0IHJldHVybiB0aGUgbGFzdCBtYXRjaGluZyBiYXRjaCBvZiBpdGVt cworICAgd2hlbiBlaXRoZXIgdGhlIGZpcnN0IGNhbGwgYWZ0ZXIgPGZ1bmN0aW9uPmFtcmVzY2Fu PC9mdW5jdGlvbj4gc3BlY2lmaWVzCisgICA8bGl0ZXJhbD5CYWNrd2FyZFNjYW5EaXJlY3Rpb248 L2xpdGVyYWw+LCBvciBhIHN1YnNlcXVlbnQgY2FsbCBoYXMKKyAgIDxsaXRlcmFsPk5VTEw8L2xp dGVyYWw+IGFzIGl0cyA8c3RydWN0ZmllbGQ+cHJpb3JiYXRjaDwvc3RydWN0ZmllbGQ+IGFyZ3Vt ZW50CisgICAoaW5kaWNhdGluZyBhIGJhY2t3YXJkIHNjYW4gcmVzdGFydCkuICAoVGhpcyBiYWNr d2FyZC1zY2FuIGJlaGF2aW9yIHdpbGwKKyAgIG9ubHkgb2NjdXIgZm9yIGFjY2VzcyBtZXRob2Rz IHRoYXQgc2V0IDxzdHJ1Y3RmaWVsZD5hbWNhbm9yZGVyPC9zdHJ1Y3RmaWVsZD4KKyAgIHRvIHRy dWUuKSAgQWZ0ZXIgdGhlIGZpcnN0IGNhbGwsIGJvdGggPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1 bmN0aW9uPiBhbmQKKyAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gbXVzdCBiZSBw cmVwYXJlZCB0byBhZHZhbmNlIHRoZSBzY2FuIGluCiAgICBlaXRoZXIgZGlyZWN0aW9uIGZyb20g dGhlIG1vc3QgcmVjZW50bHkgcmV0dXJuZWQgZW50cnkuICAoQnV0IGlmCiAgICA8c3RydWN0Zmll bGQ+YW1jYW5iYWNrd2FyZDwvc3RydWN0ZmllbGQ+IGlzIGZhbHNlLCBhbGwgc3Vic2VxdWVudAog ICAgY2FsbHMgd2lsbCBoYXZlIHRoZSBzYW1lIGRpcmVjdGlvbiBhcyB0aGUgZmlyc3Qgb25lLikK ICAgPC9wYXJhPgogCiAgIDxwYXJhPgotICAgQWNjZXNzIG1ldGhvZHMgdGhhdCBzdXBwb3J0IG9y ZGVyZWQgc2NhbnMgbXVzdCBzdXBwb3J0IDxxdW90ZT5tYXJraW5nPC9xdW90ZT4gYQotICAgcG9z aXRpb24gaW4gYSBzY2FuIGFuZCBsYXRlciByZXR1cm5pbmcgdG8gdGhlIG1hcmtlZCBwb3NpdGlv bi4gIFRoZSBzYW1lCi0gICBwb3NpdGlvbiBtaWdodCBiZSByZXN0b3JlZCBtdWx0aXBsZSB0aW1l cy4gIEhvd2V2ZXIsIG9ubHkgb25lIHBvc2l0aW9uIG5lZWQKLSAgIGJlIHJlbWVtYmVyZWQgcGVy IHNjYW47IGEgbmV3IDxmdW5jdGlvbj5hbW1hcmtwb3M8L2Z1bmN0aW9uPiBjYWxsIG92ZXJyaWRl cyB0aGUKLSAgIHByZXZpb3VzbHkgbWFya2VkIHBvc2l0aW9uLiAgQW4gYWNjZXNzIG1ldGhvZCB0 aGF0IGRvZXMgbm90IHN1cHBvcnQgb3JkZXJlZAotICAgc2NhbnMgbmVlZCBub3QgcHJvdmlkZSA8 ZnVuY3Rpb24+YW1tYXJrcG9zPC9mdW5jdGlvbj4gYW5kIDxmdW5jdGlvbj5hbXJlc3RycG9zPC9m dW5jdGlvbj4KLSAgIGZ1bmN0aW9ucyBpbiA8c3RydWN0bmFtZT5JbmRleEFtUm91dGluZTwvc3Ry dWN0bmFtZT47IHNldCB0aG9zZSBwb2ludGVycyB0byBOVUxMCi0gICBpbnN0ZWFkLgorICAgQWNj ZXNzIG1ldGhvZHMgdXNpbmcgdGhlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaW50 ZXJmYWNlCisgICBzdXBwb3J0IDxxdW90ZT5tYXJraW5nPC9xdW90ZT4gYSBwb3NpdGlvbiBpbiBh IHNjYW4gYW5kIGxhdGVyIHJldHVybmluZyB0bworICAgdGhlIG1hcmtlZCBwb3NpdGlvbi4gIFdo ZW4gYSBiYXRjaCBpcyBwcm9jZXNzZWQgaW4gYSBkaWZmZXJlbnQgZGlyZWN0aW9uCisgICB0aGFu IGl0IHdhcyBvcmlnaW5hbGx5IGZldGNoZWQsIG9yIHdoZW4gYSBtYXJrZWQgcG9zaXRpb24gaXMg cmVzdG9yZWQsIHRoZQorICAgaW5kZXggQU0gaXMgbm90aWZpZWQgdmlhIHRoZSA8ZnVuY3Rpb24+ YW1wb3NyZXNldDwvZnVuY3Rpb24+IGNhbGxiYWNrIChpZgorICAgcHJvdmlkZWQpIHNvIGl0IGNh biByZXNldCBhbnkgcHJpdmF0ZSBzdGF0ZSB0aGF0IGluZGVwZW5kZW50bHkgdHJhY2tzIHRoZQor ICAgc2NhbidzIHByb2dyZXNzIChzdWNoIGFzIGFycmF5IGtleSBzdGF0ZSkuICBTZWUgdGhlCisg ICA8ZnVuY3Rpb24+YW1wb3NyZXNldDwvZnVuY3Rpb24+IGZ1bmN0aW9uIGRlc2NyaXB0aW9uIGZv ciBkZXRhaWxzLgogICA8L3BhcmE+CiAKICAgPHBhcmE+Ci0gICBCb3RoIHRoZSBzY2FuIHBvc2l0 aW9uIGFuZCB0aGUgbWFyayBwb3NpdGlvbiAoaWYgYW55KSBtdXN0IGJlIG1haW50YWluZWQKKyAg IFRoZSBzY2FuIHBvc2l0aW9uIChpZiBhbnkpIG11c3QgYmUgbWFpbnRhaW5lZCBieSB0aGUgdGFi bGUgQU0gYW5kIGluZGV4IEFNCiAgICBjb25zaXN0ZW50bHkgaW4gdGhlIGZhY2Ugb2YgY29uY3Vy cmVudCBpbnNlcnRpb25zIG9yIGRlbGV0aW9ucyBpbiB0aGUKICAgIGluZGV4LiAgSXQgaXMgT0sg aWYgYSBmcmVzaGx5LWluc2VydGVkIGVudHJ5IGlzIG5vdCByZXR1cm5lZCBieSBhIHNjYW4gdGhh dAogICAgd291bGQgaGF2ZSBmb3VuZCB0aGUgZW50cnkgaWYgaXQgaGFkIGV4aXN0ZWQgd2hlbiB0 aGUgc2NhbiBzdGFydGVkLCBvciBmb3IKQEAgLTEwNDQsMTIgKzEyNDcsMTQgQEAgYW10cmFuc2xh dGVjbXB0eXBlIChDb21wYXJlVHlwZSBjbXB0eXBlLCBPaWQgb3BmYW1pbHksIE9pZCBvcGNpbnR5 cGUpOwogICA8L3BhcmE+CiAKICAgPHBhcmE+Ci0gICBJbnN0ZWFkIG9mIHVzaW5nIDxmdW5jdGlv bj5hbWdldHR1cGxlPC9mdW5jdGlvbj4sIGFuIGluZGV4IHNjYW4gY2FuIGJlIGRvbmUgd2l0aAot ICAgPGZ1bmN0aW9uPmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4gdG8gZmV0Y2ggYWxsIHR1cGxlcyBp biBvbmUgY2FsbC4gIFRoaXMgY2FuIGJlCi0gICBub3RpY2VhYmx5IG1vcmUgZWZmaWNpZW50IHRo YW4gPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBiZWNhdXNlIGl0IGFsbG93cwotICAg YXZvaWRpbmcgbG9jay91bmxvY2sgY3ljbGVzIHdpdGhpbiB0aGUgYWNjZXNzIG1ldGhvZC4gIElu IHByaW5jaXBsZQotICAgPGZ1bmN0aW9uPmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4gc2hvdWxkIGhh dmUgdGhlIHNhbWUgZWZmZWN0cyBhcyByZXBlYXRlZAotICAgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8 L2Z1bmN0aW9uPiBjYWxscywgYnV0IHdlIGltcG9zZSBzZXZlcmFsIHJlc3RyaWN0aW9ucyB0bwor ICAgSW5zdGVhZCBvZiB1c2luZyA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IG9yCisg ICA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+LCBhbiBpbmRleCBzY2FuIGNhbiBiZSBk b25lIHdpdGgKKyAgIDxmdW5jdGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+IHRvIGZldGNoIGFs bCB0dXBsZXMgaW4gb25lIGNhbGwuICBUaGlzIGNhbgorICAgYmUgbm90aWNlYWJseSBtb3JlIGVm ZmljaWVudCB0aGFuIHdpdGggYW4gPHF1b3RlPm9yZGVyZWQ8L3F1b3RlPiBzY2FuCisgICBiZWNh dXNlIGl0IGFsbG93cyBlZmZpY2llbnQgc2VxdWVudGlhbCBhY2Nlc3MgdG8gdGFibGUgQU0gcGFn ZXMgY29udGFpbmluZworICAgbWF0Y2hlcy4gIEluIHByaW5jaXBsZSA8ZnVuY3Rpb24+YW1nZXRi aXRtYXA8L2Z1bmN0aW9uPiBzaG91bGQgaGF2ZSB0aGUKKyAgIHNhbWUgZWZmZWN0cyBhcyByZXBl YXRlZCA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IG9yCisgICA8ZnVuY3Rpb24+YW1n ZXRiYXRjaDwvZnVuY3Rpb24+IGNhbGxzLCBidXQgd2UgaW1wb3NlIHNldmVyYWwgcmVzdHJpY3Rp b25zIHRvCiAgICBzaW1wbGlmeSBtYXR0ZXJzLiAgRmlyc3Qgb2YgYWxsLCA8ZnVuY3Rpb24+YW1n ZXRiaXRtYXA8L2Z1bmN0aW9uPiByZXR1cm5zIGFsbAogICAgdHVwbGVzIGF0IG9uY2UgYW5kIG1h cmtpbmcgb3IgcmVzdG9yaW5nIHNjYW4gcG9zaXRpb25zIGlzbid0CiAgICBzdXBwb3J0ZWQuIFNl Y29uZGx5LCB0aGUgdHVwbGVzIGFyZSByZXR1cm5lZCBpbiBhIGJpdG1hcCB3aGljaCBkb2Vzbid0 CkBAIC0xMDY2LDEwICsxMjcxLDYyIEBAIGFtdHJhbnNsYXRlY21wdHlwZSAoQ29tcGFyZVR5cGUg Y21wdHlwZSwgT2lkIG9wZmFtaWx5LCBPaWQgb3BjaW50eXBlKTsKIAogICA8cGFyYT4KICAgIE5v dGUgdGhhdCBpdCBpcyBwZXJtaXR0ZWQgZm9yIGFuIGFjY2VzcyBtZXRob2QgdG8gaW1wbGVtZW50 IG9ubHkKLSAgIDxmdW5jdGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+IGFuZCBub3QgPGZ1bmN0 aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiwgb3IgdmljZSB2ZXJzYSwKLSAgIGlmIGl0cyBpbnRl cm5hbCBpbXBsZW1lbnRhdGlvbiBpcyB1bnN1aXRlZCB0byBvbmUgQVBJIG9yIHRoZSBvdGhlci4K KyAgIDxmdW5jdGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+IGFuZCBub3QgPGZ1bmN0aW9uPmFt Z2V0dHVwbGU8L2Z1bmN0aW9uPi88ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+LAorICAg b3IgdmljZSB2ZXJzYSwgaWYgaXRzIGludGVybmFsIGltcGxlbWVudGF0aW9uIGlzIHVuc3VpdGVk IHRvIG9uZSBBUEkgb3IgdGhlIG90aGVyLgogICA8L3BhcmE+CiAKKyAgPHNlY3QyIGlkPSJpbmRl eC1zY2FubmluZy1iYXRjaGVzIj4KKyAgIDx0aXRsZT5UYWJsZSBBTSBDb25zaWRlcmF0aW9ucyBm b3IgQmF0Y2ggU2Nhbm5pbmc8L3RpdGxlPgorCisgICA8cGFyYT4KKyAgICBUaGlzIHNlY3Rpb24g aXMgcHJpbWFyaWx5IHJlbGV2YW50IHRvCisgICAgPGxpbmsgbGlua2VuZD0idGFibGVhbSI+dGFi bGUgYWNjZXNzIG1ldGhvZDwvbGluaz4gYXV0aG9ycy4KKyAgICBXaGVuIGFuIGluZGV4IHNjYW4g dXNlcyB0aGUgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBpbnRlcmZhY2UsCisgICAg dGhlIHRhYmxlIEFNIGlzIHJlc3BvbnNpYmxlIGZvciBtYW5hZ2luZyBwb3NpdGlvbiBzdGF0ZSB3 aXRoaW4KKyAgICA8c3RydWN0ZmllbGQ+c2Nhbi0mZ3Q7YmF0Y2hyaW5nYnVmPC9zdHJ1Y3RmaWVs ZD4gYW5kIGZvciBjb250cm9sbGluZyB3aGVuCisgICAgYnVmZmVyIHBpbnMgb24gaW5kZXggcGFn ZXMgYXJlIHJlbGVhc2VkLgorICAgPC9wYXJhPgorCisgICA8cGFyYT4KKyAgICBUaGUgPHN0cnVj dGZpZWxkPnNjYW4tJmd0O2JhdGNocmluZ2J1Zi5zY2FuUG9zPC9zdHJ1Y3RmaWVsZD4gZmllbGQg dHJhY2tzCisgICAgdGhlIGN1cnJlbnQgcmVhZCBwb3NpdGlvbiB3aXRoaW4gdGhlIHJpbmcgYnVm ZmVyIG9mIGJhdGNoZXMuICBUaGUgdGFibGUgQU0KKyAgICBtdXN0IGFkdmFuY2UgPHN0cnVjdGZp ZWxkPnNjYW5Qb3M8L3N0cnVjdGZpZWxkPiBhcyB0dXBsZXMgYXJlIHJldHVybmVkIGJ5CisgICAg PGZ1bmN0aW9uPnRhYmxlX2luZGV4X2dldG5leHRfc2xvdDwvZnVuY3Rpb24+LiAgVGhlIGNvcmUg Y29kZSBtYXkgYWxzbworICAgIG1vZGlmeSB0aGlzIGZpZWxkIGR1cmluZyBvcGVyYXRpb25zIHN1 Y2ggYXMgbWFyay9yZXN0b3JlLgorICAgPC9wYXJhPgorCisgICA8cGFyYT4KKyAgICBUaGUgPHN0 cnVjdGZpZWxkPnNjYW4tJmd0O2JhdGNocmluZ2J1Zi5wcmVmZXRjaFBvczwvc3RydWN0ZmllbGQ+ IGZpZWxkCisgICAgdHJhY2tzIHRoZSBwb3NpdGlvbiBmb3IgSS9PIHByZWZldGNoaW5nLiAgSXQg aXMgZ2VuZXJhbGx5IGFkdmFuY2VkIGJ5CisgICAgaW5pdGlhbGl6aW5nIGl0IGZyb20gPHN0cnVj dGZpZWxkPnNjYW5Qb3M8L3N0cnVjdGZpZWxkPiB3aXRoaW4gYSByZWFkCisgICAgc3RyZWFtIGNh bGxiYWNrLCBhbGxvd2luZyB0aGUgdGFibGUgQU0gdG8gcHJlZmV0Y2ggdGFibGUgYmxvY2tzIHBv aW50ZWQgdG8KKyAgICBieSBpdGVtcyB0aGF0IGFyZSB3ZWxsIGFoZWFkIG9mIHRoZSBjdXJyZW50 IHNjYW4gcG9zaXRpb24uICBJbml0aWFsbHkKKyAgICA8c3RydWN0ZmllbGQ+cHJlZmV0Y2hQb3M8 L3N0cnVjdGZpZWxkPiBzdGFydHMgYXQKKyAgICA8c3RydWN0ZmllbGQ+c2NhblBvczwvc3RydWN0 ZmllbGQ+LCBidXQgYXMgdGhlIHJlYWQgc3RyZWFtIHJhbXBzIHVwIGl0IGNhbgorICAgIGdldCBm YXIgYWhlYWQgJm1kYXNoOyBzcGFubmluZyBtdWx0aXBsZSBpbmRleCBwYWdlcyBpZiBuZWNlc3Nh cnkgdG8KKyAgICBtYWludGFpbiBhbiBvcHRpbWFsIEkvTyBwcmVmZXRjaCBkaXN0YW5jZSBmb3Ig dGFibGUgYmxvY2sgcmVhZHMuICBBIG1ham9yCisgICAgZ29hbCBvZiB0aGUgPGZ1bmN0aW9uPmFt Z2V0YmF0Y2g8L2Z1bmN0aW9uPiBpbnRlcmZhY2UgaXMgdG8gYWxsb3cgdGhlCisgICAgdGFibGUg QU0gdG8gcHJlZmV0Y2ggd2l0aG91dCBiZWluZyBsaW1pdGVkIHRvIGl0ZW1zIGZyb20gdGhlIGN1 cnJlbnQKKyAgICA8c3RydWN0ZmllbGQ+c2NhblBvczwvc3RydWN0ZmllbGQ+IGluZGV4IGxlYWYg cGFnZS4KKyAgIDwvcGFyYT4KKworICAgPHBhcmE+CisgICAgQm90aCA8c3RydWN0ZmllbGQ+c2Nh blBvczwvc3RydWN0ZmllbGQ+IGFuZAorICAgIDxzdHJ1Y3RmaWVsZD5wcmVmZXRjaFBvczwvc3Ry dWN0ZmllbGQ+IGFyZSBjb250cm9sbGVkIGJ5IHRoZSB0YWJsZSBBTSBhbmQKKyAgICBjb3JlIGNv ZGU7IGluZGV4IGFjY2VzcyBtZXRob2RzIHNob3VsZCBub3QgYWNjZXNzIG9yIG1hbmlwdWxhdGUg dGhlc2UKKyAgICBmaWVsZHMuICBTZWUgdGhlIDxmaWxlbmFtZT5zcmMvYmFja2VuZC9hY2Nlc3Mv aGVhcC88L2ZpbGVuYW1lPgorICAgIGltcGxlbWVudGF0aW9uIGZvciBhIHJlZmVyZW5jZSBleGFt cGxlLgorICAgPC9wYXJhPgorCisgICA8cGFyYT4KKyAgICBCdWZmZXIgcGlucyBvbiBpbmRleCBw YWdlcyByZXR1cm5lZCBieSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGFyZQorICAg IG1hbmFnZWQgYnkgdGhlIHRhYmxlIEFNLiAgU2VlIHRoZSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwv ZnVuY3Rpb24+IGFuZAorICAgIDxmdW5jdGlvbj5hbWZyZWViYXRjaDwvZnVuY3Rpb24+IGRlc2Ny aXB0aW9ucyBpbiA8eHJlZiBsaW5rZW5kPSJpbmRleC1mdW5jdGlvbnMiLz4KKyAgICBmb3IgZGV0 YWlscy4KKyAgIDwvcGFyYT4KKworICA8L3NlY3QyPgorCiAgPC9zZWN0MT4KIAogIDxzZWN0MSBp ZD0iaW5kZXgtbG9ja2luZyI+CkBAIC0xMTIzLDExICsxMzgwLDEzIEBAIGFtdHJhbnNsYXRlY21w dHlwZSAoQ29tcGFyZVR5cGUgY21wdHlwZSwgT2lkIG9wZmFtaWx5LCBPaWQgb3BjaW50eXBlKTsK ICAgICAgPC9saXN0aXRlbT4KICAgICAgPGxpc3RpdGVtPgogICAgICAgPHBhcmE+Ci0gICAgICAg QW4gaW5kZXggc2NhbiBtdXN0IG1haW50YWluIGEgcGluCi0gICAgICAgb24gdGhlIGluZGV4IHBh Z2UgaG9sZGluZyB0aGUgaXRlbSBsYXN0IHJldHVybmVkIGJ5Ci0gICAgICAgPGZ1bmN0aW9uPmFt Z2V0dHVwbGU8L2Z1bmN0aW9uPiwgYW5kIDxmdW5jdGlvbj5hbWJ1bGtkZWxldGU8L2Z1bmN0aW9u PiBjYW5ub3QgZGVsZXRlCi0gICAgICAgZW50cmllcyBmcm9tIHBhZ2VzIHRoYXQgYXJlIHBpbm5l ZCBieSBvdGhlciBiYWNrZW5kcy4gIFRoZSBuZWVkCi0gICAgICAgZm9yIHRoaXMgcnVsZSBpcyBl eHBsYWluZWQgYmVsb3cuCisgICAgICAgRm9yIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlv bj4gc2NhbnMsIHRoZSBpbmRleCBhY2Nlc3MgbWV0aG9kIG11c3QKKyAgICAgICBtYWludGFpbiBh IHBpbiBvbiB0aGUgaW5kZXggcGFnZSBob2xkaW5nIHRoZSBpdGVtIGxhc3QgcmV0dXJuZWQsIGFu ZAorICAgICAgIDxmdW5jdGlvbj5hbWJ1bGtkZWxldGU8L2Z1bmN0aW9uPiBjYW5ub3QgZGVsZXRl IGVudHJpZXMgZnJvbSBwYWdlcyB0aGF0CisgICAgICAgYXJlIHBpbm5lZCBieSBvdGhlciBiYWNr ZW5kcy4gIEZvciA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IHNjYW5zLAorICAgICAg IHRoZSB0YWJsZSBhY2Nlc3MgbWV0aG9kIGNvbnRyb2xzIHdoZW4gcGlucyBhcmUgZHJvcHBlZCAo c2VlCisgICAgICAgPHhyZWYgbGlua2VuZD0iaW5kZXgtc2Nhbm5pbmctYmF0Y2hlcyIvPikuICBU aGUgbmVlZCBmb3IgdGhpcyBydWxlIGlzCisgICAgICAgZXhwbGFpbmVkIGJlbG93LgogICAgICAg PC9wYXJhPgogICAgICA8L2xpc3RpdGVtPgogICAgIDwvaXRlbWl6ZWRsaXN0PgpAQCAtMTE3Myw2 ICsxNDMyLDMxIEBAIGFtdHJhbnNsYXRlY21wdHlwZSAoQ29tcGFyZVR5cGUgY21wdHlwZSwgT2lk IG9wZmFtaWx5LCBPaWQgb3BjaW50eXBlKTsKICAgIGl0IGlzIG9ubHkgc2FmZSB0byB1c2Ugc3Vj aCBzY2FucyB3aXRoIE1WQ0MtY29tcGxpYW50IHNuYXBzaG90cy4KICAgPC9wYXJhPgogCisgIDxw YXJhPgorICAgVGhlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaW50ZXJmYWNlIHBy b3ZpZGVzIGEgZGlmZmVyZW50IGFwcHJvYWNoOgorICAgdGhlIHRhYmxlIGFjY2VzcyBtZXRob2Qg cmVjZWl2ZXMgYmF0Y2hlcyBvZiBUSURzIGFuZCBjb250cm9scyB3aGVuIGluZGV4CisgICBwYWdl IHBpbnMgYXJlIGRyb3BwZWQuICBCZWNhdXNlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlv bj4gcmVhZHMKKyAgIG11bHRpcGxlIGluZGV4IGxlYWYgcGFnZXMgYWhlYWQgdG8gZmFjaWxpdGF0 ZSBJL08gcHJlZmV0Y2hpbmcgb2YgdGFibGUKKyAgIGJsb2NrcywgaXQgY2Fubm90IHByYWN0aWNh bGx5IGhvbGQgcGlucyBvbiBhbGwgdGhvc2UgcGFnZXMgc2ltdWx0YW5lb3VzbHkuCisgICBUaGVy ZWZvcmUsIGxpa2UgPGZ1bmN0aW9uPmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4sIEkvTyBwcmVmZXRj aGluZyB3aXRoCisgICA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGlzIG9ubHkgcG9z c2libGUgd2hlbiBhbiBNVkNDLWNvbXBsaWFudAorICAgc25hcHNob3QgaXMgaW4gdXNlLiAgSW4g cHJhY3RpY2UsIHRoZSBoZWFwIHRhYmxlIEFNIChhbmQgYW55IHRhYmxlIEFNCisgICB3aXRoIHNp bWlsYXIgY29uY3VycmVuY3kgcnVsZXMpIHVzdWFsbHkgZHJvcHMgcGlucyBlYWdlcmx5IGZvciBN VkNDCisgICBzbmFwc2hvdCBzY2FucywgYnV0IHJldGFpbnMgcGlucyBmb3Igbm9uLU1WQ0Mgc25h cHNob3Qgc2NhbnMuICBJbmRleC1vbmx5CisgICBzY2FucyBtYXkgcmV0YWluIHBpbnMgaW4gc29t ZSBjYXNlcywgd2hpbGUgcGxhaW4gaW5kZXggc2NhbnMgdGhhdCB1c2UgYW4KKyAgIE1WQ0Mgc25h cHNob3QgYWx3YXlzIGRyb3AgdGhlaXIgcGlucyBlYWdlcmx5LiAgSW5kZXggYWNjZXNzIG1ldGhv ZHMgdGhhdAorICAgaW1wbGVtZW50IDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gZG8g bm90IGNvbnRyb2wgd2hlbiBwaW5zIGFyZQorICAgZHJvcHBlZDsgdGhhdCBkZWNpc2lvbiBpcyBk ZWxlZ2F0ZWQgdG8gdGhlIHRhYmxlIEFNLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBJbmRl eCBhY2Nlc3MgbWV0aG9kcyB0aGF0IHVzZSA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+ IG11c3QgaW1wbGVtZW50CisgICB0aGUgcGluLWhvbGRpbmcgYmVoYXZpb3IgdGhlbXNlbHZlcy4g IFN1Y2ggaW5kZXggQU1zIGFyZSBleHBlY3RlZCB0byBob2xkCisgICBvbnRvIHRoZSBsZWFmIHBh Z2UgYnVmZmVyIHBpbiBmb3Igbm9uLU1WQ0Mgc25hcHNob3Qgc2NhbnMsIHJlcGxpY2F0aW5nCisg ICB0aGUgYmVoYXZpb3IgdGhhdCB0aGUgaGVhcCB0YWJsZSBBTSB3b3VsZCB1c2Ugd2l0aAorICAg PGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPi4KKyAgPC9wYXJhPgorCiAgIDxwYXJhPgog ICAgV2hlbiB0aGUgPHN0cnVjdGZpZWxkPmFtcHJlZGxvY2tzPC9zdHJ1Y3RmaWVsZD4gZmxhZyBp cyBub3Qgc2V0LCBhbnkgc2NhbiB1c2luZyB0aGF0CiAgICBpbmRleCBhY2Nlc3MgbWV0aG9kIHdp dGhpbiBhIHNlcmlhbGl6YWJsZSB0cmFuc2FjdGlvbiB3aWxsIGFjcXVpcmUgYQpkaWZmIC0tZ2l0 IGEvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfdGFibGUuc2dtbCBiL2RvYy9zcmMvc2dtbC9yZWYv Y3JlYXRlX3RhYmxlLnNnbWwKaW5kZXggNzdjNWE3NjNkLi41NWI3MjIyZTkgMTAwNjQ0Ci0tLSBh L2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3RhYmxlLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3Jl Zi9jcmVhdGVfdGFibGUuc2dtbApAQCAtMTE1MiwxMiArMTE1MiwxMyBAQCBXSVRIICggTU9EVUxV UyA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bnVtZXJpY19saXRlcmFsPC9yZXBsYWNl YWJsZT4sIFJFTQogICAgICA8L3BhcmE+CiAKICAgICAgPHBhcmE+Ci0gICAgICBUaGUgYWNjZXNz IG1ldGhvZCBtdXN0IHN1cHBvcnQgPGxpdGVyYWw+YW1nZXR0dXBsZTwvbGl0ZXJhbD4gKHNlZSA8 eHJlZgotICAgICAgbGlua2VuZD0iaW5kZXhhbSIvPik7IGF0IHByZXNlbnQgdGhpcyBtZWFucyA8 YWNyb255bT5HSU48L2Fjcm9ueW0+Ci0gICAgICBjYW5ub3QgYmUgdXNlZC4gIEFsdGhvdWdoIGl0 J3MgYWxsb3dlZCwgdGhlcmUgaXMgbGl0dGxlIHBvaW50IGluIHVzaW5nCi0gICAgICBCLXRyZWUg b3IgaGFzaCBpbmRleGVzIHdpdGggYW4gZXhjbHVzaW9uIGNvbnN0cmFpbnQsIGJlY2F1c2UgdGhp cwotICAgICAgZG9lcyBub3RoaW5nIHRoYXQgYW4gb3JkaW5hcnkgdW5pcXVlIGNvbnN0cmFpbnQg ZG9lc24ndCBkbyBiZXR0ZXIuCi0gICAgICBTbyBpbiBwcmFjdGljZSB0aGUgYWNjZXNzIG1ldGhv ZCB3aWxsIGFsd2F5cyBiZSA8YWNyb255bT5HaVNUPC9hY3JvbnltPiBvcgorICAgICAgVGhlIGFj Y2VzcyBtZXRob2QgbXVzdCBzdXBwb3J0IGVpdGhlciA8bGl0ZXJhbD5hbWdldHR1cGxlPC9saXRl cmFsPgorICAgICAgb3IgPGxpdGVyYWw+YW1nZXRiYXRjaDwvbGl0ZXJhbD4gKHNlZSA8eHJlZiBs aW5rZW5kPSJpbmRleGFtIi8+KTsgYXQKKyAgICAgIHByZXNlbnQgdGhpcyBtZWFucyA8YWNyb255 bT5HSU48L2Fjcm9ueW0+IGNhbm5vdCBiZSB1c2VkLiAgQWx0aG91Z2gKKyAgICAgIGl0J3MgYWxs b3dlZCwgdGhlcmUgaXMgbGl0dGxlIHBvaW50IGluIHVzaW5nIEItdHJlZSBvciBoYXNoIGluZGV4 ZXMKKyAgICAgIHdpdGggYW4gZXhjbHVzaW9uIGNvbnN0cmFpbnQsIGJlY2F1c2UgdGhpcyBkb2Vz IG5vdGhpbmcgdGhhdCBhbgorICAgICAgb3JkaW5hcnkgdW5pcXVlIGNvbnN0cmFpbnQgZG9lc24n dCBkbyBiZXR0ZXIuICBTbyBpbiBwcmFjdGljZSB0aGUKKyAgICAgIGFjY2VzcyBtZXRob2Qgd2ls bCBhbHdheXMgYmUgPGFjcm9ueW0+R2lTVDwvYWNyb255bT4gb3IKICAgICAgIDxhY3JvbnltPlNQ LUdpU1Q8L2Fjcm9ueW0+LgogICAgICA8L3BhcmE+CiAKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dt bC90YWJsZWFtLnNnbWwgYi9kb2Mvc3JjL3NnbWwvdGFibGVhbS5zZ21sCmluZGV4IDljY2Y1Yjcz OS4uOGU3MGE2MTk2IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvdGFibGVhbS5zZ21sCisrKyBi L2RvYy9zcmMvc2dtbC90YWJsZWFtLnNnbWwKQEAgLTEyOSw2ICsxMjksMTQgQEAgbXlfdGFibGVh bV9oYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAgIG9wdGlvbmFsKSwgdGhlIGJsb2NrIG51bWJl ciBuZWVkcyB0byBwcm92aWRlIGxvY2FsaXR5LgogIDwvcGFyYT4KIAorIDxwYXJhPgorICBUYWJs ZSBhY2Nlc3MgbWV0aG9kcyBjYW4gc3VwcG9ydCBvcmRlcmVkIGluZGV4IHNjYW5zIHVzaW5nIHRo ZQorICA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGludGVyZmFjZS4gU2VlIGFsc28K KyAgPHhyZWYgbGlua2VuZD0iaW5kZXgtc2Nhbm5pbmctYmF0Y2hlcyIvPiBmb3IgZGV0YWlscyBv biBpbnRlcmZhY2luZyB3aXRoCisgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaW5k ZXggYWNjZXNzIG1ldGhvZHMsIGFuZCBtYW5hZ2luZyB0aGUKKyAgc2NhbidzIHBvc2l0aW9uLgor IDwvcGFyYT4KKwogIDxwYXJhPgogICBGb3IgY3Jhc2ggc2FmZXR5LCBhbiBBTSBjYW4gdXNlIHBv c3RncmVzJyA8bGluawogICBsaW5rZW5kPSJ3YWwiPjxhY3JvbnltPldBTDwvYWNyb255bT48L2xp bms+LCBvciBhIGN1c3RvbSBpbXBsZW1lbnRhdGlvbi4KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9z eXN2aWV3cy5vdXQKaW5kZXggM2RkNjNmZDg4Li5iNTYyODczNmIgMTAwNjQ0Ci0tLSBhL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvc3lzdmlld3Mub3V0CkBAIC0xNTksNiArMTU5LDcgQEAgc2VsZWN0IG5hbWUsIHNl dHRpbmcgZnJvbSBwZ19zZXR0aW5ncyB3aGVyZSBuYW1lIGxpa2UgJ2VuYWJsZSUnOwogIGVuYWJs ZV9pbmNyZW1lbnRhbF9zb3J0ICAgICAgICB8IG9uCiAgZW5hYmxlX2luZGV4b25seXNjYW4gICAg ICAgICAgIHwgb24KICBlbmFibGVfaW5kZXhzY2FuICAgICAgICAgICAgICAgfCBvbgorIGVuYWJs ZV9pbmRleHNjYW5fcHJlZmV0Y2ggICAgICB8IG9uCiAgZW5hYmxlX21hdGVyaWFsICAgICAgICAg ICAgICAgIHwgb24KICBlbmFibGVfbWVtb2l6ZSAgICAgICAgICAgICAgICAgfCBvbgogIGVuYWJs ZV9tZXJnZWpvaW4gICAgICAgICAgICAgICB8IG9uCkBAIC0xNzMsNyArMTc0LDcgQEAgc2VsZWN0 IG5hbWUsIHNldHRpbmcgZnJvbSBwZ19zZXR0aW5ncyB3aGVyZSBuYW1lIGxpa2UgJ2VuYWJsZSUn OwogIGVuYWJsZV9zZXFzY2FuICAgICAgICAgICAgICAgICB8IG9uCiAgZW5hYmxlX3NvcnQgICAg ICAgICAgICAgICAgICAgIHwgb24KICBlbmFibGVfdGlkc2NhbiAgICAgICAgICAgICAgICAgfCBv bgotKDI1IHJvd3MpCisoMjYgcm93cykKIAogLS0gVGhlcmUgYXJlIGFsd2F5cyB3YWl0IGV2ZW50 IGRlc2NyaXB0aW9ucyBmb3IgdmFyaW91cyB0eXBlcy4gIEluamVjdGlvblBvaW50CiAtLSBtYXkg YmUgcHJlc2VudCBvciBhYnNlbnQsIGRlcGVuZGluZyBvbiBoaXN0b3J5IHNpbmNlIGxhc3QgcG9z dG1hc3RlciBzdGFydC4KLS0gCjIuNTEuMAoK --0000000000007589150649a4074c Content-Type: application/octet-stream; name="v9-0002-Use-fake-LSNs-to-improve-nbtree-dropPin-behavior.patch" Content-Disposition: attachment; filename="v9-0002-Use-fake-LSNs-to-improve-nbtree-dropPin-behavior.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ml1k3l3y9 RnJvbSA0NTc4OTQ0YzJiZGVkYjExZmY1ZDhlNmViMTlkYjAwOTA3Y2I2MjY1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFN1 biwgMTggSmFuIDIwMjYgMTE6MTQ6MzYgLTA1MDAKU3ViamVjdDogW1BBVENIIHY5IDAyLzEwXSBV c2UgZmFrZSBMU05zIHRvIGltcHJvdmUgbmJ0cmVlIGRyb3BQaW4gYmVoYXZpb3IuCgpQcmV2aW91 c2x5IHVubG9nZ2VkIG5idHJlZSBpbmRleGVzIG5lZWRlZCB0byBob2xkIG9uIHRvIGEgbGVhZiBw YWdlCmJ1ZmZlciBwaW4gd2hlbiBzdG9wcGVkIG9uIHRoYXQgbGVhZiBwYWdlLCBwdXJlbHkgc28g dGhhdCB0aGUKX2J0X2tpbGxpdGVtcyBwcm9jZXNzIGhhZCBhIHdheSB0byBiZSBzdXJlIHRoYXQg dGhlcmUgd2Fzbid0IGFueSB1bnNhZmUKY29uY3VycmVudCBUSUQgcmVjeWNsaW5nIGJ5IFZBQ1VV TS4gIFRoZSBfYnRfa2lsbGl0ZW1zJyBkcm9wUGluIHN0cmF0ZWd5CmNvdWxkbid0IGJlIHVzZWQg YmVmb3JlIG5vdywgc2luY2UgaXQgd29ya3MgYnkgY2hlY2tpbmcgaWYgdGhlIHBhZ2UgTFNOCmhh cyBjaGFuZ2VkIGluIHRoZSBwZXJpb2QgYWZ0ZXIgX2J0X3JlYWRwYWdlIHJlYWQgdGhlIHBhZ2Un cyBpdGVtcywgYnV0CmJlZm9yZSBfYnRfa2lsbGl0ZW1zIHdhcyBjYWxsZWQuICBXZSBub3cgdXNl IHRoZSBzYW1lIExTTiB0cmljayB3aXRoCnVubG9nZ2VkIGluZGV4ZXMsIGJyaW5naW5nIHRoZSBz YW1lIGJlbmVmaXRzIHRvIHRoZXNlIHNjYW5zIHRoYXQgY29tbWl0CjJlZDViODdmIGJyb3VnaHQg dG8gc2NhbnMgb2YgbG9nZ2VkIHJlbGF0aW9ucy4KClRoaXMgaXMgcHJlcGFyYXRpb24gZm9yIGFu IHVwY29taW5nIGNvbW1pdCB0aGF0IHdpbGwgYWRkIHRoZSBhbWdldGJhdGNoCmludGVyZmFjZSBh bmQgc3dpdGNoIG5idHJlZSBvdmVyIHRvIGl0IChmcm9tIGFtZ2V0dHVwbGUpLiAgVGhhdCB3aWxs IGdvCmZ1cnRoZXIgYnkgY29tcGxldGVseSBvYnZpYXRpbmcgdGhlIG5lZWQgZm9yIGFtZ2V0YmF0 Y2ggc2NhbnMgdG8gaGFuZyBvbgp0byBidWZmZXIgcGlucyAoYmFycmluZyBzY2FucyBpbnZvbHZp bmcgYSBub24tTVZDQyBzbmFwc2hvdCkuCgpBdXRob3I6IFBldGVyIEdlb2doZWdhbiA8cGdAYm93 dC5pZT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQUgyLVd6a2VodWh4eXVBOHF1 YzdyUk4zRXROWHBpS3NqUGZPOG1oYiswRHIySzBEdGdAbWFpbC5nbWFpbC5jb20KLS0tCiBzcmMv YmFja2VuZC9hY2Nlc3MvbmJ0cmVlL1JFQURNRSAgICAgIHwgIDUgKy0KIHNyYy9iYWNrZW5kL2Fj Y2Vzcy9uYnRyZWUvbmJ0ZGVkdXAuYyAgfCAgOCArKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRy ZWUvbmJ0aW5zZXJ0LmMgfCA0OCArKysrKysrKystLS0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3Mv bmJ0cmVlL25idHBhZ2UuYyAgIHwgODIgKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tCiBzcmMv YmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jICAgIHwgIDggLS0tCiBzcmMvYmFja2VuZC9h Y2Nlc3MvbmJ0cmVlL25idHNlYXJjaC5jIHwgIDEgLQogc3JjL2JhY2tlbmQvYWNjZXNzL25idHJl ZS9uYnR1dGlscy5jICB8ICAxIC0KIDcgZmlsZXMgY2hhbmdlZCwgODAgaW5zZXJ0aW9ucygrKSwg NzMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9S RUFETUUgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL1JFQURNRQppbmRleCA1M2Q0YTYxZGMu LmNiOTIxY2EyZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9SRUFETUUK KysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9SRUFETUUKQEAgLTQ4NSw5ICs0ODUsOCBA QCBXZSBoYW5kbGUgdGhpcyBraWxsX3ByaW9yX3R1cGxlIHJhY2UgY29uZGl0aW9uIGJ5IGhhdmlu ZyBhZmZlY3RlZCBpbmRleAogc2NhbnMgY29uc2VydmF0aXZlbHkgYXNzdW1lIHRoYXQgYW55IGNo YW5nZSB0byB0aGUgbGVhZiBwYWdlIGF0IGFsbAogaW1wbGllcyB0aGF0IGl0IHdhcyByZWFjaGVk IGJ5IGJ0YnVsa2RlbGV0ZSBpbiB0aGUgaW50ZXJpbSBwZXJpb2Qgd2hlbiBubwogYnVmZmVyIHBp biB3YXMgaGVsZC4gIFRoaXMgaXMgaW1wbGVtZW50ZWQgYnkgbm90IHNldHRpbmcgYW55IExQX0RF QUQgYml0cwotb24gdGhlIGxlYWYgcGFnZSBhdCBhbGwgd2hlbiB0aGUgcGFnZSdzIExTTiBoYXMg Y2hhbmdlZC4gIChUaGF0IHdvbid0IHdvcmsKLXdpdGggYW4gdW5sb2dnZWQgaW5kZXgsIHNvIGZv ciBub3cgd2UgZG9uJ3QgZXZlciBhcHBseSB0aGUgImRvbid0IGhvbGQKLW9udG8gcGluIiBvcHRp bWl6YXRpb24gdGhlcmUuKQorb24gdGhlIGxlYWYgcGFnZSBhdCBhbGwgd2hlbiB0aGUgcGFnZSdz IExTTiBoYXMgY2hhbmdlZC4gIChUaGlzIGlzIHdoeSB3ZQoraW1wbGVtZW50ICJmYWtlIiBMU05z IGZvciB1bmxvZ2dlZCBpbmRleCByZWxhdGlvbnMuKQogCiBGYXN0cGF0aCBGb3IgSW5kZXggSW5z ZXJ0aW9uCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9hY2Nlc3MvbmJ0cmVlL25idGRlZHVwLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVl L25idGRlZHVwLmMKaW5kZXggOTViZTBiMTc5Li5hZjdhZmZkZjQgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0ZGVkdXAuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv bmJ0cmVlL25idGRlZHVwLmMKQEAgLTY5LDYgKzY5LDcgQEAgX2J0X2RlZHVwX3Bhc3MoUmVsYXRp b24gcmVsLCBCdWZmZXIgYnVmLCBJbmRleFR1cGxlIG5ld2l0ZW0sIFNpemUgbmV3aXRlbXN6LAog CVNpemUJCXBhZ2VzYXZpbmcgUEdfVVNFRF9GT1JfQVNTRVJUU19PTkxZID0gMDsKIAlib29sCQlz aW5nbGV2YWxzdHJhdCA9IGZhbHNlOwogCWludAkJCW5rZXlhdHRzID0gSW5kZXhSZWxhdGlvbkdl dE51bWJlck9mS2V5QXR0cmlidXRlcyhyZWwpOworCVhMb2dSZWNQdHIJcmVjcHRyOwogCiAJLyog UGFzc2VkLWluIG5ld2l0ZW1zeiBpcyBNQVhBTElHTkVEIGJ1dCBkb2VzIG5vdCBpbmNsdWRlIGxp bmUgcG9pbnRlciAqLwogCW5ld2l0ZW1zeiArPSBzaXplb2YoSXRlbUlkRGF0YSk7CkBAIC0yNDUs NyArMjQ2LDYgQEAgX2J0X2RlZHVwX3Bhc3MoUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVmLCBJbmRl eFR1cGxlIG5ld2l0ZW0sIFNpemUgbmV3aXRlbXN6LAogCS8qIFhMT0cgc3R1ZmYgKi8KIAlpZiAo UmVsYXRpb25OZWVkc1dBTChyZWwpKQogCXsKLQkJWExvZ1JlY1B0cglyZWNwdHI7CiAJCXhsX2J0 cmVlX2RlZHVwIHhscmVjX2RlZHVwOwogCiAJCXhscmVjX2RlZHVwLm5pbnRlcnZhbHMgPSBzdGF0 ZS0+bmludGVydmFsczsKQEAgLTI2Myw5ICsyNjMsMTEgQEAgX2J0X2RlZHVwX3Bhc3MoUmVsYXRp b24gcmVsLCBCdWZmZXIgYnVmLCBJbmRleFR1cGxlIG5ld2l0ZW0sIFNpemUgbmV3aXRlbXN6LAog CQkJCQkJCXN0YXRlLT5uaW50ZXJ2YWxzICogc2l6ZW9mKEJURGVkdXBJbnRlcnZhbCkpOwogCiAJ CXJlY3B0ciA9IFhMb2dJbnNlcnQoUk1fQlRSRUVfSUQsIFhMT0dfQlRSRUVfREVEVVApOwotCi0J CVBhZ2VTZXRMU04ocGFnZSwgcmVjcHRyKTsKIAl9CisJZWxzZQorCQlyZWNwdHIgPSBYTG9nR2V0 RmFrZUxTTihyZWwpOworCisJUGFnZVNldExTTihwYWdlLCByZWNwdHIpOwogCiAJRU5EX0NSSVRf U0VDVElPTigpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idGlu c2VydC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRpbnNlcnQuYwppbmRleCBkMTdh YWE1YWEuLmNjNzk4OTRkMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9u YnRpbnNlcnQuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idGluc2VydC5jCkBA IC0xMTI1LDYgKzExMjUsNyBAQCBfYnRfaW5zZXJ0b25wZyhSZWxhdGlvbiByZWwsCiAJSW5kZXhU dXBsZQlvcG9zdGluZyA9IE5VTEw7CiAJSW5kZXhUdXBsZQlvcmlnaXR1cCA9IE5VTEw7CiAJSW5k ZXhUdXBsZQlucG9zdGluZyA9IE5VTEw7CisJWExvZ1JlY1B0cglyZWNwdHI7CiAKIAlwYWdlID0g QnVmZmVyR2V0UGFnZShidWYpOwogCW9wYXF1ZSA9IEJUUGFnZUdldE9wYXF1ZShwYWdlKTsKQEAg LTEzMjIsNyArMTMyMyw2IEBAIF9idF9pbnNlcnRvbnBnKFJlbGF0aW9uIHJlbCwKIAkJCXhsX2J0 cmVlX2luc2VydCB4bHJlYzsKIAkJCXhsX2J0cmVlX21ldGFkYXRhIHhsbWV0YTsKIAkJCXVpbnQ4 CQl4bGluZm87Ci0JCQlYTG9nUmVjUHRyCXJlY3B0cjsKIAkJCXVpbnQxNgkJdXBvc3RpbmdvZmY7 CiAKIAkJCXhscmVjLm9mZm51bSA9IG5ld2l0ZW1vZmY7CkBAIC0xMzk1LDE0ICsxMzk1LDE2IEBA IF9idF9pbnNlcnRvbnBnKFJlbGF0aW9uIHJlbCwKIAkJCX0KIAogCQkJcmVjcHRyID0gWExvZ0lu c2VydChSTV9CVFJFRV9JRCwgeGxpbmZvKTsKLQotCQkJaWYgKEJ1ZmZlcklzVmFsaWQobWV0YWJ1 ZikpCi0JCQkJUGFnZVNldExTTihtZXRhcGcsIHJlY3B0cik7Ci0JCQlpZiAoIWlzbGVhZikKLQkJ CQlQYWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2UoY2J1ZiksIHJlY3B0cik7Ci0KLQkJCVBhZ2VTZXRM U04ocGFnZSwgcmVjcHRyKTsKIAkJfQorCQllbHNlCisJCQlyZWNwdHIgPSBYTG9nR2V0RmFrZUxT TihyZWwpOworCisJCWlmIChCdWZmZXJJc1ZhbGlkKG1ldGFidWYpKQorCQkJUGFnZVNldExTTiht ZXRhcGcsIHJlY3B0cik7CisJCWlmICghaXNsZWFmKQorCQkJUGFnZVNldExTTihCdWZmZXJHZXRQ YWdlKGNidWYpLCByZWNwdHIpOworCisJCVBhZ2VTZXRMU04ocGFnZSwgcmVjcHRyKTsKIAogCQlF TkRfQ1JJVF9TRUNUSU9OKCk7CiAKQEAgLTE1MDQsNiArMTUwNiw3IEBAIF9idF9zcGxpdChSZWxh dGlvbiByZWwsIFJlbGF0aW9uIGhlYXByZWwsIEJUU2Nhbkluc2VydCBpdHVwX2tleSwgQnVmZmVy IGJ1ZiwKIAlib29sCQluZXdpdGVtb25sZWZ0LAogCQkJCWlzbGVhZiwKIAkJCQlpc3JpZ2h0bW9z dDsKKwlYTG9nUmVjUHRyCXJlY3B0cjsKIAogCS8qCiAJICogb3JpZ3BhZ2UgaXMgdGhlIG9yaWdp bmFsIHBhZ2UgdG8gYmUgc3BsaXQuICBsZWZ0cGFnZSBpcyBhIHRlbXBvcmFyeQpAQCAtMTk4Myw3 ICsxOTg2LDYgQEAgX2J0X3NwbGl0KFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcHJlbCwgQlRT Y2FuSW5zZXJ0IGl0dXBfa2V5LCBCdWZmZXIgYnVmLAogCXsKIAkJeGxfYnRyZWVfc3BsaXQgeGxy ZWM7CiAJCXVpbnQ4CQl4bGluZm87Ci0JCVhMb2dSZWNQdHIJcmVjcHRyOwogCiAJCXhscmVjLmxl dmVsID0gcm9wYXF1ZS0+YnRwb19sZXZlbDsKIAkJLyogU2VlIGNvbW1lbnRzIGJlbG93IG9uIG5l d2l0ZW0sIG9yaWduZXdpdGVtLCBhbmQgcG9zdGluZyBsaXN0cyAqLwpAQCAtMjA2NywxNCArMjA2 OSwxNiBAQCBfYnRfc3BsaXQoUmVsYXRpb24gcmVsLCBSZWxhdGlvbiBoZWFwcmVsLCBCVFNjYW5J bnNlcnQgaXR1cF9rZXksIEJ1ZmZlciBidWYsCiAKIAkJeGxpbmZvID0gbmV3aXRlbW9ubGVmdCA/ IFhMT0dfQlRSRUVfU1BMSVRfTCA6IFhMT0dfQlRSRUVfU1BMSVRfUjsKIAkJcmVjcHRyID0gWExv Z0luc2VydChSTV9CVFJFRV9JRCwgeGxpbmZvKTsKLQotCQlQYWdlU2V0TFNOKG9yaWdwYWdlLCBy ZWNwdHIpOwotCQlQYWdlU2V0TFNOKHJpZ2h0cGFnZSwgcmVjcHRyKTsKLQkJaWYgKCFpc3JpZ2h0 bW9zdCkKLQkJCVBhZ2VTZXRMU04oc3BhZ2UsIHJlY3B0cik7Ci0JCWlmICghaXNsZWFmKQotCQkJ UGFnZVNldExTTihCdWZmZXJHZXRQYWdlKGNidWYpLCByZWNwdHIpOwogCX0KKwllbHNlCisJCXJl Y3B0ciA9IFhMb2dHZXRGYWtlTFNOKHJlbCk7CisKKwlQYWdlU2V0TFNOKG9yaWdwYWdlLCByZWNw dHIpOworCVBhZ2VTZXRMU04ocmlnaHRwYWdlLCByZWNwdHIpOworCWlmICghaXNyaWdodG1vc3Qp CisJCVBhZ2VTZXRMU04oc3BhZ2UsIHJlY3B0cik7CisJaWYgKCFpc2xlYWYpCisJCVBhZ2VTZXRM U04oQnVmZmVyR2V0UGFnZShjYnVmKSwgcmVjcHRyKTsKIAogCUVORF9DUklUX1NFQ1RJT04oKTsK IApAQCAtMjQ3Niw2ICsyNDgwLDcgQEAgX2J0X25ld2xldmVsKFJlbGF0aW9uIHJlbCwgUmVsYXRp b24gaGVhcHJlbCwgQnVmZmVyIGxidWYsIEJ1ZmZlciByYnVmKQogCUJ1ZmZlcgkJbWV0YWJ1ZjsK IAlQYWdlCQltZXRhcGc7CiAJQlRNZXRhUGFnZURhdGEgKm1ldGFkOworCVhMb2dSZWNQdHIJcmVj cHRyOwogCiAJbGJrbm8gPSBCdWZmZXJHZXRCbG9ja051bWJlcihsYnVmKTsKIAlyYmtubyA9IEJ1 ZmZlckdldEJsb2NrTnVtYmVyKHJidWYpOwpAQCAtMjU3MSw3ICsyNTc2LDYgQEAgX2J0X25ld2xl dmVsKFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcHJlbCwgQnVmZmVyIGxidWYsIEJ1ZmZlciBy YnVmKQogCWlmIChSZWxhdGlvbk5lZWRzV0FMKHJlbCkpCiAJewogCQl4bF9idHJlZV9uZXdyb290 IHhscmVjOwotCQlYTG9nUmVjUHRyCXJlY3B0cjsKIAkJeGxfYnRyZWVfbWV0YWRhdGEgbWQ7CiAK IAkJeGxyZWMucm9vdGJsayA9IHJvb3RibGtudW07CkBAIC0yNjA1LDExICsyNjA5LDEzIEBAIF9i dF9uZXdsZXZlbChSZWxhdGlvbiByZWwsIFJlbGF0aW9uIGhlYXByZWwsIEJ1ZmZlciBsYnVmLCBC dWZmZXIgcmJ1ZikKIAkJCQkJCQkoKFBhZ2VIZWFkZXIpIHJvb3RwYWdlKS0+cGRfdXBwZXIpOwog CiAJCXJlY3B0ciA9IFhMb2dJbnNlcnQoUk1fQlRSRUVfSUQsIFhMT0dfQlRSRUVfTkVXUk9PVCk7 Ci0KLQkJUGFnZVNldExTTihscGFnZSwgcmVjcHRyKTsKLQkJUGFnZVNldExTTihyb290cGFnZSwg cmVjcHRyKTsKLQkJUGFnZVNldExTTihtZXRhcGcsIHJlY3B0cik7CiAJfQorCWVsc2UKKwkJcmVj cHRyID0gWExvZ0dldEZha2VMU04ocmVsKTsKKworCVBhZ2VTZXRMU04obHBhZ2UsIHJlY3B0cik7 CisJUGFnZVNldExTTihyb290cGFnZSwgcmVjcHRyKTsKKwlQYWdlU2V0TFNOKG1ldGFwZywgcmVj cHRyKTsKIAogCUVORF9DUklUX1NFQ1RJT04oKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv YWNjZXNzL25idHJlZS9uYnRwYWdlLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHBh Z2UuYwppbmRleCA0MTI1YzE4NWUuLjcwYjUyNGRmZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv YWNjZXNzL25idHJlZS9uYnRwYWdlLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9u YnRwYWdlLmMKQEAgLTIzNSw2ICsyMzUsNyBAQCBfYnRfc2V0X2NsZWFudXBfaW5mbyhSZWxhdGlv biByZWwsIEJsb2NrTnVtYmVyIG51bV9kZWxwYWdlcykKIAlCdWZmZXIJCW1ldGFidWY7CiAJUGFn ZQkJbWV0YXBnOwogCUJUTWV0YVBhZ2VEYXRhICptZXRhZDsKKwlYTG9nUmVjUHRyCXJlY3B0cjsK IAogCS8qCiAJICogT24tZGlzayBjb21wYXRpYmlsaXR5IG5vdGU6IFRoZSBidG1fbGFzdF9jbGVh bnVwX251bV9kZWxwYWdlcyBtZXRhcGFnZQpAQCAtMjg2LDcgKzI4Nyw2IEBAIF9idF9zZXRfY2xl YW51cF9pbmZvKFJlbGF0aW9uIHJlbCwgQmxvY2tOdW1iZXIgbnVtX2RlbHBhZ2VzKQogCWlmIChS ZWxhdGlvbk5lZWRzV0FMKHJlbCkpCiAJewogCQl4bF9idHJlZV9tZXRhZGF0YSBtZDsKLQkJWExv Z1JlY1B0cglyZWNwdHI7CiAKIAkJWExvZ0JlZ2luSW5zZXJ0KCk7CiAJCVhMb2dSZWdpc3RlckJ1 ZmZlcigwLCBtZXRhYnVmLCBSRUdCVUZfV0lMTF9JTklUIHwgUkVHQlVGX1NUQU5EQVJEKTsKQEAg LTMwMyw5ICszMDMsMTEgQEAgX2J0X3NldF9jbGVhbnVwX2luZm8oUmVsYXRpb24gcmVsLCBCbG9j a051bWJlciBudW1fZGVscGFnZXMpCiAJCVhMb2dSZWdpc3RlckJ1ZkRhdGEoMCwgJm1kLCBzaXpl b2YoeGxfYnRyZWVfbWV0YWRhdGEpKTsKIAogCQlyZWNwdHIgPSBYTG9nSW5zZXJ0KFJNX0JUUkVF X0lELCBYTE9HX0JUUkVFX01FVEFfQ0xFQU5VUCk7Ci0KLQkJUGFnZVNldExTTihtZXRhcGcsIHJl Y3B0cik7CiAJfQorCWVsc2UKKwkJcmVjcHRyID0gWExvZ0dldEZha2VMU04ocmVsKTsKKworCVBh Z2VTZXRMU04obWV0YXBnLCByZWNwdHIpOwogCiAJRU5EX0NSSVRfU0VDVElPTigpOwogCkBAIC0z NTEsNiArMzUzLDcgQEAgX2J0X2dldHJvb3QoUmVsYXRpb24gcmVsLCBSZWxhdGlvbiBoZWFwcmVs LCBpbnQgYWNjZXNzKQogCUJsb2NrTnVtYmVyIHJvb3RibGtubzsKIAl1aW50MzIJCXJvb3RsZXZl bDsKIAlCVE1ldGFQYWdlRGF0YSAqbWV0YWQ7CisJWExvZ1JlY1B0cglyZWNwdHI7CiAKIAlBc3Nl cnQoYWNjZXNzID09IEJUX1JFQUQgfHwgaGVhcHJlbCAhPSBOVUxMKTsKIApAQCAtNDczLDcgKzQ3 Niw2IEBAIF9idF9nZXRyb290KFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcHJlbCwgaW50IGFj Y2VzcykKIAkJaWYgKFJlbGF0aW9uTmVlZHNXQUwocmVsKSkKIAkJewogCQkJeGxfYnRyZWVfbmV3 cm9vdCB4bHJlYzsKLQkJCVhMb2dSZWNQdHIJcmVjcHRyOwogCQkJeGxfYnRyZWVfbWV0YWRhdGEg bWQ7CiAKIAkJCVhMb2dCZWdpbkluc2VydCgpOwpAQCAtNDk3LDEwICs0OTksMTIgQEAgX2J0X2dl dHJvb3QoUmVsYXRpb24gcmVsLCBSZWxhdGlvbiBoZWFwcmVsLCBpbnQgYWNjZXNzKQogCQkJWExv Z1JlZ2lzdGVyRGF0YSgmeGxyZWMsIFNpemVPZkJ0cmVlTmV3cm9vdCk7CiAKIAkJCXJlY3B0ciA9 IFhMb2dJbnNlcnQoUk1fQlRSRUVfSUQsIFhMT0dfQlRSRUVfTkVXUk9PVCk7Ci0KLQkJCVBhZ2VT ZXRMU04ocm9vdHBhZ2UsIHJlY3B0cik7Ci0JCQlQYWdlU2V0TFNOKG1ldGFwZywgcmVjcHRyKTsK IAkJfQorCQllbHNlCisJCQlyZWNwdHIgPSBYTG9nR2V0RmFrZUxTTihyZWwpOworCisJCVBhZ2VT ZXRMU04ocm9vdHBhZ2UsIHJlY3B0cik7CisJCVBhZ2VTZXRMU04obWV0YXBnLCByZWNwdHIpOwog CiAJCUVORF9DUklUX1NFQ1RJT04oKTsKIApAQCAtMTE2Miw2ICsxMTY2LDcgQEAgX2J0X2RlbGl0 ZW1zX3ZhY3V1bShSZWxhdGlvbiByZWwsIEJ1ZmZlciBidWYsCiAJY2hhcgkgICAqdXBkYXRlZGJ1 ZiA9IE5VTEw7CiAJU2l6ZQkJdXBkYXRlZGJ1ZmxlbiA9IDA7CiAJT2Zmc2V0TnVtYmVyIHVwZGF0 ZWRvZmZzZXRzW01heEluZGV4VHVwbGVzUGVyUGFnZV07CisJWExvZ1JlY1B0cglyZWNwdHI7CiAK IAkvKiBTaG91bGRuJ3QgYmUgY2FsbGVkIHVubGVzcyB0aGVyZSdzIHNvbWV0aGluZyB0byBkbyAq LwogCUFzc2VydChuZGVsZXRhYmxlID4gMCB8fCBudXBkYXRhYmxlID4gMCk7CkBAIC0xMjI2LDcg KzEyMzEsNiBAQCBfYnRfZGVsaXRlbXNfdmFjdXVtKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGJ1ZiwK IAkvKiBYTE9HIHN0dWZmICovCiAJaWYgKG5lZWRzd2FsKQogCXsKLQkJWExvZ1JlY1B0cglyZWNw dHI7CiAJCXhsX2J0cmVlX3ZhY3V1bSB4bHJlY192YWN1dW07CiAKIAkJeGxyZWNfdmFjdXVtLm5k ZWxldGVkID0gbmRlbGV0YWJsZTsKQEAgLTEyNDgsOSArMTI1MiwxMSBAQCBfYnRfZGVsaXRlbXNf dmFjdXVtKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGJ1ZiwKIAkJfQogCiAJCXJlY3B0ciA9IFhMb2dJ bnNlcnQoUk1fQlRSRUVfSUQsIFhMT0dfQlRSRUVfVkFDVVVNKTsKLQotCQlQYWdlU2V0TFNOKHBh Z2UsIHJlY3B0cik7CiAJfQorCWVsc2UKKwkJcmVjcHRyID0gWExvZ0dldEZha2VMU04ocmVsKTsK KworCVBhZ2VTZXRMU04ocGFnZSwgcmVjcHRyKTsKIAogCUVORF9DUklUX1NFQ1RJT04oKTsKIApA QCAtMTI5Miw2ICsxMjk4LDcgQEAgX2J0X2RlbGl0ZW1zX2RlbGV0ZShSZWxhdGlvbiByZWwsIEJ1 ZmZlciBidWYsCiAJY2hhcgkgICAqdXBkYXRlZGJ1ZiA9IE5VTEw7CiAJU2l6ZQkJdXBkYXRlZGJ1 ZmxlbiA9IDA7CiAJT2Zmc2V0TnVtYmVyIHVwZGF0ZWRvZmZzZXRzW01heEluZGV4VHVwbGVzUGVy UGFnZV07CisJWExvZ1JlY1B0cglyZWNwdHI7CiAKIAkvKiBTaG91bGRuJ3QgYmUgY2FsbGVkIHVu bGVzcyB0aGVyZSdzIHNvbWV0aGluZyB0byBkbyAqLwogCUFzc2VydChuZGVsZXRhYmxlID4gMCB8 fCBudXBkYXRhYmxlID4gMCk7CkBAIC0xMzQyLDcgKzEzNDksNiBAQCBfYnRfZGVsaXRlbXNfZGVs ZXRlKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGJ1ZiwKIAkvKiBYTE9HIHN0dWZmICovCiAJaWYgKG5l ZWRzd2FsKQogCXsKLQkJWExvZ1JlY1B0cglyZWNwdHI7CiAJCXhsX2J0cmVlX2RlbGV0ZSB4bHJl Y19kZWxldGU7CiAKIAkJeGxyZWNfZGVsZXRlLnNuYXBzaG90Q29uZmxpY3RIb3Jpem9uID0gc25h cHNob3RDb25mbGljdEhvcml6b247CkBAIC0xMzY2LDkgKzEzNzIsMTEgQEAgX2J0X2RlbGl0ZW1z X2RlbGV0ZShSZWxhdGlvbiByZWwsIEJ1ZmZlciBidWYsCiAJCX0KIAogCQlyZWNwdHIgPSBYTG9n SW5zZXJ0KFJNX0JUUkVFX0lELCBYTE9HX0JUUkVFX0RFTEVURSk7Ci0KLQkJUGFnZVNldExTTihw YWdlLCByZWNwdHIpOwogCX0KKwllbHNlCisJCXJlY3B0ciA9IFhMb2dHZXRGYWtlTFNOKHJlbCk7 CisKKwlQYWdlU2V0TFNOKHBhZ2UsIHJlY3B0cik7CiAKIAlFTkRfQ1JJVF9TRUNUSU9OKCk7CiAK QEAgLTIxMDMsNiArMjExMSw3IEBAIF9idF9tYXJrX3BhZ2VfaGFsZmRlYWQoUmVsYXRpb24gcmVs LCBSZWxhdGlvbiBoZWFwcmVsLCBCdWZmZXIgbGVhZmJ1ZiwKIAlPZmZzZXROdW1iZXIgbmV4dG9m ZnNldDsKIAlJbmRleFR1cGxlCWl0dXA7CiAJSW5kZXhUdXBsZURhdGEgdHJ1bmN0dXBsZTsKKwlY TG9nUmVjUHRyCXJlY3B0cjsKIAogCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGxlYWZidWYpOwogCW9w YXF1ZSA9IEJUUGFnZUdldE9wYXF1ZShwYWdlKTsKQEAgLTIyNTMsNyArMjI2Miw2IEBAIF9idF9t YXJrX3BhZ2VfaGFsZmRlYWQoUmVsYXRpb24gcmVsLCBSZWxhdGlvbiBoZWFwcmVsLCBCdWZmZXIg bGVhZmJ1ZiwKIAlpZiAoUmVsYXRpb25OZWVkc1dBTChyZWwpKQogCXsKIAkJeGxfYnRyZWVfbWFy a19wYWdlX2hhbGZkZWFkIHhscmVjOwotCQlYTG9nUmVjUHRyCXJlY3B0cjsKIAogCQl4bHJlYy5w b2Zmc2V0ID0gcG9mZnNldDsKIAkJeGxyZWMubGVhZmJsayA9IGxlYWZibGtubzsKQEAgLTIyNzQs MTIgKzIyODIsMTQgQEAgX2J0X21hcmtfcGFnZV9oYWxmZGVhZChSZWxhdGlvbiByZWwsIFJlbGF0 aW9uIGhlYXByZWwsIEJ1ZmZlciBsZWFmYnVmLAogCQlYTG9nUmVnaXN0ZXJEYXRhKCZ4bHJlYywg U2l6ZU9mQnRyZWVNYXJrUGFnZUhhbGZEZWFkKTsKIAogCQlyZWNwdHIgPSBYTG9nSW5zZXJ0KFJN X0JUUkVFX0lELCBYTE9HX0JUUkVFX01BUktfUEFHRV9IQUxGREVBRCk7Ci0KLQkJcGFnZSA9IEJ1 ZmZlckdldFBhZ2Uoc3VidHJlZXBhcmVudCk7Ci0JCVBhZ2VTZXRMU04ocGFnZSwgcmVjcHRyKTsK LQkJcGFnZSA9IEJ1ZmZlckdldFBhZ2UobGVhZmJ1Zik7Ci0JCVBhZ2VTZXRMU04ocGFnZSwgcmVj cHRyKTsKIAl9CisJZWxzZQorCQlyZWNwdHIgPSBYTG9nR2V0RmFrZUxTTihyZWwpOworCisJcGFn ZSA9IEJ1ZmZlckdldFBhZ2Uoc3VidHJlZXBhcmVudCk7CisJUGFnZVNldExTTihwYWdlLCByZWNw dHIpOworCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGxlYWZidWYpOworCVBhZ2VTZXRMU04ocGFnZSwg cmVjcHRyKTsKIAogCUVORF9DUklUX1NFQ1RJT04oKTsKIApAQCAtMjMzNyw2ICsyMzQ3LDcgQEAg X2J0X3VubGlua19oYWxmZGVhZF9wYWdlKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGxlYWZidWYsIEJs b2NrTnVtYmVyIHNjYW5ibGtubywKIAl1aW50MzIJCXRhcmdldGxldmVsOwogCUluZGV4VHVwbGUJ bGVhZmhpa2V5OwogCUJsb2NrTnVtYmVyIGxlYWZ0b3BwYXJlbnQ7CisJWExvZ1JlY1B0cglyZWNw dHI7CiAKIAlwYWdlID0gQnVmZmVyR2V0UGFnZShsZWFmYnVmKTsKIAlvcGFxdWUgPSBCVFBhZ2VH ZXRPcGFxdWUocGFnZSk7CkBAIC0yNjc2LDcgKzI2ODcsNiBAQCBfYnRfdW5saW5rX2hhbGZkZWFk X3BhZ2UoUmVsYXRpb24gcmVsLCBCdWZmZXIgbGVhZmJ1ZiwgQmxvY2tOdW1iZXIgc2NhbmJsa25v LAogCQl4bF9idHJlZV91bmxpbmtfcGFnZSB4bHJlYzsKIAkJeGxfYnRyZWVfbWV0YWRhdGEgeGxt ZXRhOwogCQl1aW50OAkJeGxpbmZvOwotCQlYTG9nUmVjUHRyCXJlY3B0cjsKIAogCQlYTG9nQmVn aW5JbnNlcnQoKTsKIApAQCAtMjcyMCwyNSArMjczMCwyNSBAQCBfYnRfdW5saW5rX2hhbGZkZWFk X3BhZ2UoUmVsYXRpb24gcmVsLCBCdWZmZXIgbGVhZmJ1ZiwgQmxvY2tOdW1iZXIgc2NhbmJsa25v LAogCQkJeGxpbmZvID0gWExPR19CVFJFRV9VTkxJTktfUEFHRTsKIAogCQlyZWNwdHIgPSBYTG9n SW5zZXJ0KFJNX0JUUkVFX0lELCB4bGluZm8pOworCX0KKwllbHNlCisJCXJlY3B0ciA9IFhMb2dH ZXRGYWtlTFNOKHJlbCk7CiAKLQkJaWYgKEJ1ZmZlcklzVmFsaWQobWV0YWJ1ZikpCi0JCXsKLQkJ CVBhZ2VTZXRMU04obWV0YXBnLCByZWNwdHIpOwotCQl9Ci0JCXBhZ2UgPSBCdWZmZXJHZXRQYWdl KHJidWYpOworCWlmIChCdWZmZXJJc1ZhbGlkKG1ldGFidWYpKQorCQlQYWdlU2V0TFNOKG1ldGFw ZywgcmVjcHRyKTsKKwlwYWdlID0gQnVmZmVyR2V0UGFnZShyYnVmKTsKKwlQYWdlU2V0TFNOKHBh Z2UsIHJlY3B0cik7CisJcGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnVmKTsKKwlQYWdlU2V0TFNOKHBh Z2UsIHJlY3B0cik7CisJaWYgKEJ1ZmZlcklzVmFsaWQobGJ1ZikpCisJeworCQlwYWdlID0gQnVm ZmVyR2V0UGFnZShsYnVmKTsKIAkJUGFnZVNldExTTihwYWdlLCByZWNwdHIpOwotCQlwYWdlID0g QnVmZmVyR2V0UGFnZShidWYpOworCX0KKwlpZiAodGFyZ2V0ICE9IGxlYWZibGtubykKKwl7CisJ CXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGxlYWZidWYpOwogCQlQYWdlU2V0TFNOKHBhZ2UsIHJlY3B0 cik7Ci0JCWlmIChCdWZmZXJJc1ZhbGlkKGxidWYpKQotCQl7Ci0JCQlwYWdlID0gQnVmZmVyR2V0 UGFnZShsYnVmKTsKLQkJCVBhZ2VTZXRMU04ocGFnZSwgcmVjcHRyKTsKLQkJfQotCQlpZiAodGFy Z2V0ICE9IGxlYWZibGtubykKLQkJewotCQkJcGFnZSA9IEJ1ZmZlckdldFBhZ2UobGVhZmJ1Zik7 Ci0JCQlQYWdlU2V0TFNOKHBhZ2UsIHJlY3B0cik7Ci0JCX0KIAl9CiAKIAlFTkRfQ1JJVF9TRUNU SU9OKCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jIGIv c3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWUuYwppbmRleCAzZGVjMWVlNjUuLjhkNjM2 ZDk4NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWUuYworKysg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jCkBAIC00MDYsMTMgKzQwNiw2IEBA IGJ0cmVzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbktleSBzY2Fua2V5LCBpbnQgbnNjYW5r ZXlzLAogCSAqIHJhY2UgY29uZGl0aW9uIGludm9sdmluZyBWQUNVVU0gc2V0dGluZyBwYWdlcyBh bGwtdmlzaWJsZSBpbiB0aGUgVk0uCiAJICogSXQncyBhbHNvIHVuc2FmZSBmb3IgcGxhaW4gaW5k ZXggc2NhbnMgdGhhdCB1c2UgYSBub24tTVZDQyBzbmFwc2hvdC4KIAkgKgotCSAqIFdoZW4gd2Ug ZHJvcCBwaW5zIGVhZ2VybHksIHRoZSBtZWNoYW5pc20gdGhhdCBtYXJrcyBzby0+a2lsbGVkSXRl bXNbXQotCSAqIGluZGV4IHR1cGxlcyBMUF9ERUFEIGhhcyB0byBkZWFsIHdpdGggY29uY3VycmVu dCBUSUQgcmVjeWNsaW5nIHJhY2VzLgotCSAqIFRoZSBzY2hlbWUgdXNlZCB0byBkZXRlY3QgdW5z YWZlIFRJRCByZWN5Y2xpbmcgd29uJ3Qgd29yayB3aGVuIHNjYW5uaW5nCi0JICogdW5sb2dnZWQg cmVsYXRpb25zIChzaW5jZSBpdCBpbnZvbHZlcyBzYXZpbmcgYW4gYWZmZWN0ZWQgcGFnZSdzIExT TikuCi0JICogT3B0IG91dCBvZiBlYWdlciBwaW4gZHJvcHBpbmcgZHVyaW5nIHVubG9nZ2VkIHJl bGF0aW9uIHNjYW5zIGZvciBub3cKLQkgKiAodGhpcyBpcyBwcmVmZXJhYmxlIHRvIG9wdGluZyBv dXQgb2Yga2lsbF9wcmlvcl90dXBsZSBMUF9ERUFEIHNldHRpbmcpLgotCSAqCiAJICogQWxzbyBv cHQgb3V0IG9mIGRyb3BwaW5nIGxlYWYgcGFnZSBwaW5zIGVhZ2VybHkgZHVyaW5nIGJpdG1hcCBz Y2Fucy4KIAkgKiBQaW5zIGNhbm5vdCBiZSBoZWxkIGZvciBtb3JlIHRoYW4gYW4gaW5zdGFudCBk dXJpbmcgYml0bWFwIHNjYW5zIGVpdGhlcgogCSAqIHdheSwgc28gd2UgbWlnaHQgYXMgd2VsbCBh dm9pZCB3YXN0aW5nIGN5Y2xlcyBvbiBhY3F1aXJpbmcgcGFnZSBMU05zLgpAQCAtNDIzLDcgKzQx Niw2IEBAIGJ0cmVzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbktleSBzY2Fua2V5LCBpbnQg bnNjYW5rZXlzLAogCSAqLwogCXNvLT5kcm9wUGluID0gKCFzY2FuLT54c193YW50X2l0dXAgJiYK IAkJCQkgICBJc01WQ0NTbmFwc2hvdChzY2FuLT54c19zbmFwc2hvdCkgJiYKLQkJCQkgICBSZWxh dGlvbk5lZWRzV0FMKHNjYW4tPmluZGV4UmVsYXRpb24pICYmCiAJCQkJICAgc2Nhbi0+aGVhcFJl bGF0aW9uICE9IE5VTEwpOwogCiAJc28tPm1hcmtJdGVtSW5kZXggPSAtMTsKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2VhcmNoLmMgYi9zcmMvYmFja2VuZC9hY2Nl c3MvbmJ0cmVlL25idHNlYXJjaC5jCmluZGV4IDMyYWUwYmRhOC4uMGNlZDdiMDJjIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNlYXJjaC5jCisrKyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2VhcmNoLmMKQEAgLTY3LDcgKzY3LDYgQEAgX2J0X2Ryb3Bf bG9ja19hbmRfbWF5YmVfcGluKFJlbGF0aW9uIHJlbCwgQlRTY2FuT3BhcXVlIHNvKQogCSAqIEhh dmUgdG8gc2V0IHNvLT5jdXJyUG9zLmxzbiBzbyB0aGF0IF9idF9raWxsaXRlbXMgaGFzIGEgd2F5 IHRvIGRldGVjdAogCSAqIHdoZW4gY29uY3VycmVudCBoZWFwIFRJRCByZWN5Y2xpbmcgYnkgVkFD VVVNIG1pZ2h0IGhhdmUgdGFrZW4gcGxhY2UuCiAJICovCi0JQXNzZXJ0KFJlbGF0aW9uTmVlZHNX QUwocmVsKSk7CiAJc28tPmN1cnJQb3MubHNuID0gQnVmZmVyR2V0TFNOQXRvbWljKHNvLT5jdXJy UG9zLmJ1Zik7CiAJX2J0X3JlbGJ1ZihyZWwsIHNvLT5jdXJyUG9zLmJ1Zik7CiAJc28tPmN1cnJQ b3MuYnVmID0gSW52YWxpZEJ1ZmZlcjsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9u YnRyZWUvbmJ0dXRpbHMuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0dXRpbHMuYwpp bmRleCA1YzUwZjBkZDEuLmZjMzAyYzJhZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNz L25idHJlZS9uYnR1dGlscy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0dXRp bHMuYwpAQCAtMjUyLDcgKzI1Miw2IEBAIF9idF9raWxsaXRlbXMoSW5kZXhTY2FuRGVzYyBzY2Fu KQogCQlYTG9nUmVjUHRyCWxhdGVzdGxzbjsKIAogCQlBc3NlcnQoIUJUU2NhblBvc0lzUGlubmVk KHNvLT5jdXJyUG9zKSk7Ci0JCUFzc2VydChSZWxhdGlvbk5lZWRzV0FMKHJlbCkpOwogCQlidWYg PSBfYnRfZ2V0YnVmKHJlbCwgc28tPmN1cnJQb3MuY3VyclBhZ2UsIEJUX1JFQUQpOwogCiAJCWxh dGVzdGxzbiA9IEJ1ZmZlckdldExTTkF0b21pYyhidWYpOwotLSAKMi41MS4wCgo= --0000000000007589150649a4074c Content-Type: application/octet-stream; name="v9-0004-Introduce-read_stream_-pause-resume-yield.patch" Content-Disposition: attachment; filename="v9-0004-Introduce-read_stream_-pause-resume-yield.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ml1k3l3s7 RnJvbSBlOGU0M2E4ZWNhNDhmMzE3ZTdjNzZjYzZjYmYxNDcwNjYwZGQwYTMxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUaG9tYXMgTXVucm8gPHRob21hcy5tdW5yb0BnbWFpbC5jb20+ CkRhdGU6IFR1ZSwgMTMgSmFuIDIwMjYgMjA6NDQ6MTQgKzAxMDAKU3ViamVjdDogW1BBVENIIHY5 IDA0LzEwXSBJbnRyb2R1Y2UgcmVhZF9zdHJlYW1fe3BhdXNlLHJlc3VtZSx5aWVsZH0oKS4KCkF1 dGhvcjogVGhvbWFzIE11bnJvIDx0aG9tYXMubXVucm9AZ21haWwuY29tPgpEaXNjdXNzaW9uOiBo dHRwczovL3Bvc3Rnci5lcy9tL0NBJTJCaFVLR0pMVDJKdldMRWlCWE1ia1NTYzVzb19ZNyUzRE4l MkJTMmNlN25wakx3OFFMM2Q1dyU0MG1haWwuZ21haWwuY29tCi0tLQogc3JjL2luY2x1ZGUvc3Rv cmFnZS9yZWFkX3N0cmVhbS5oICAgICAgICAgICAgfCAgIDMgKwogc3JjL2JhY2tlbmQvc3RvcmFn ZS9haW8vcmVhZF9zdHJlYW0uYyAgICAgICAgfCAgNTAgKysrKy0KIHNyYy90ZXN0L21vZHVsZXMv dGVzdF9haW8vTWFrZWZpbGUgICAgICAgICAgIHwgICAzICstCiBzcmMvdGVzdC9tb2R1bGVzL3Rl c3RfYWlvL21lc29uLmJ1aWxkICAgICAgICB8ICAgMSArCiBzcmMvdGVzdC9tb2R1bGVzL3Rlc3Rf YWlvL3QvMDAxX2Fpby5wbCAgICAgICB8ICAzMCArKysKIHNyYy90ZXN0L21vZHVsZXMvdGVzdF9h aW8vdGVzdF9haW8tLTEuMC5zcWwgIHwgIDEzICsrCiBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlv L3Rlc3RfcmVhZF9zdHJlYW0uYyB8IDE4MSArKysrKysrKysrKysrKysrKysrCiBzcmMvdG9vbHMv cGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICAgICAgICAgICB8ICAgMSArCiA4IGZpbGVzIGNoYW5n ZWQsIDI4MCBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0 IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9haW8vdGVzdF9yZWFkX3N0cmVhbS5jCgpkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9yZWFkX3N0cmVhbS5oIGIvc3JjL2luY2x1ZGUvc3RvcmFn ZS9yZWFkX3N0cmVhbS5oCmluZGV4IGYyYTBjYzc5Yy4uZTNiNmJiMmYzIDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9zdG9yYWdlL3JlYWRfc3RyZWFtLmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFn ZS9yZWFkX3N0cmVhbS5oCkBAIC05OSw2ICs5OSw5IEBAIGV4dGVybiBSZWFkU3RyZWFtICpyZWFk X3N0cmVhbV9iZWdpbl9zbWdyX3JlbGF0aW9uKGludCBmbGFncywKIAkJCQkJCQkJCQkJCSAgIFJl YWRTdHJlYW1CbG9ja051bWJlckNCIGNhbGxiYWNrLAogCQkJCQkJCQkJCQkJICAgdm9pZCAqY2Fs bGJhY2tfcHJpdmF0ZV9kYXRhLAogCQkJCQkJCQkJCQkJICAgc2l6ZV90IHBlcl9idWZmZXJfZGF0 YV9zaXplKTsKK2V4dGVybiBCbG9ja051bWJlciByZWFkX3N0cmVhbV9wYXVzZShSZWFkU3RyZWFt ICpzdHJlYW0pOworZXh0ZXJuIHZvaWQgcmVhZF9zdHJlYW1fcmVzdW1lKFJlYWRTdHJlYW0gKnN0 cmVhbSk7CitleHRlcm4gQmxvY2tOdW1iZXIgcmVhZF9zdHJlYW1feWllbGQoUmVhZFN0cmVhbSAq c3RyZWFtKTsKIGV4dGVybiB2b2lkIHJlYWRfc3RyZWFtX3Jlc2V0KFJlYWRTdHJlYW0gKnN0cmVh bSk7CiBleHRlcm4gdm9pZCByZWFkX3N0cmVhbV9lbmQoUmVhZFN0cmVhbSAqc3RyZWFtKTsKIApk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vcmVhZF9zdHJlYW0uYyBiL3NyYy9i YWNrZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3RyZWFtLmMKaW5kZXggODg3MTdjMmZmLi4wZGJlYzJh YmIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3RyZWFtLmMKKysr IGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vcmVhZF9zdHJlYW0uYwpAQCAtMTAwLDExICsxMDAs MTMgQEAgc3RydWN0IFJlYWRTdHJlYW0KIAlpbnQxNgkJcGlubmVkX2J1ZmZlcnM7CiAJaW50MTYJ CWRpc3RhbmNlOwogCWludDE2CQlpbml0aWFsaXplZF9idWZmZXJzOworCWludDE2CQlyZXN1bWVf ZGlzdGFuY2U7CiAJaW50CQkJcmVhZF9idWZmZXJzX2ZsYWdzOwogCWJvb2wJCXN5bmNfbW9kZTsJ CS8qIHVzaW5nIGlvX21ldGhvZD1zeW5jICovCiAJYm9vbAkJYmF0Y2hfbW9kZTsJCS8qIFJFQURf U1RSRUFNX1VTRV9CQVRDSElORyAqLwogCWJvb2wJCWFkdmljZV9lbmFibGVkOwogCWJvb2wJCXRl bXBvcmFyeTsKKwlib29sCQl5aWVsZGVkOwogCiAJLyoKIAkgKiBPbmUtYmxvY2sgYnVmZmVyIHRv IHN1cHBvcnQgJ3VuZ2V0dGluZycgYSBibG9jayBudW1iZXIsIHRvIHJlc29sdmUgZmxvdwpAQCAt ODc5LDcgKzg4MSwxNSBAQCByZWFkX3N0cmVhbV9uZXh0X2J1ZmZlcihSZWFkU3RyZWFtICpzdHJl YW0sIHZvaWQgKipwZXJfYnVmZmVyX2RhdGEpCiAKIAkJLyogRW5kIG9mIHN0cmVhbSByZWFjaGVk PyAgKi8KIAkJaWYgKHN0cmVhbS0+ZGlzdGFuY2UgPT0gMCkKLQkJCXJldHVybiBJbnZhbGlkQnVm ZmVyOworCQl7CisJCQlpZiAoIXN0cmVhbS0+eWllbGRlZCkKKwkJCQlyZXR1cm4gSW52YWxpZEJ1 ZmZlcjsKKworCQkJLyogVGhlIGNhbGxiYWNrIHlpZWxkZWQuICBSZXN1bWUuICovCisJCQlzdHJl YW0tPnlpZWxkZWQgPSBmYWxzZTsKKwkJCXJlYWRfc3RyZWFtX3Jlc3VtZShzdHJlYW0pOworCQkJ QXNzZXJ0KHN0cmVhbS0+ZGlzdGFuY2UgIT0gMCk7CisJCX0KIAogCQkvKgogCQkgKiBUaGUgdXN1 YWwgb3JkZXIgb2Ygb3BlcmF0aW9ucyBpcyB0aGF0IHdlIGxvb2sgYWhlYWQgYXQgdGhlIGJvdHRv bQpAQCAtMTAzNCw2ICsxMDQ0LDQ0IEBAIHJlYWRfc3RyZWFtX25leHRfYmxvY2soUmVhZFN0cmVh bSAqc3RyZWFtLCBCdWZmZXJBY2Nlc3NTdHJhdGVneSAqc3RyYXRlZ3kpCiAJcmV0dXJuIHJlYWRf c3RyZWFtX2dldF9ibG9jayhzdHJlYW0sIE5VTEwpOwogfQogCisvKgorICogVGVtcG9yYXJpbHkg c3RvcCBjb25zdW1pbmcgYmxvY2sgbnVtYmVycyBmcm9tIHRoZSBibG9jayBudW1iZXIgY2FsbGJh Y2suICBJZgorICogY2FsbGVkIGluc2lkZSB0aGUgYmxvY2sgbnVtYmVyIGNhbGxiYWNrLCBpdHMg cmV0dXJuIHZhbHVlIHNob3VsZCBiZQorICogcmV0dXJuZWQgYnkgdGhlIGNhbGxiYWNrLgorICov CitCbG9ja051bWJlcgorcmVhZF9zdHJlYW1fcGF1c2UoUmVhZFN0cmVhbSAqc3RyZWFtKQorewor CXN0cmVhbS0+cmVzdW1lX2Rpc3RhbmNlID0gc3RyZWFtLT5kaXN0YW5jZTsKKwlzdHJlYW0tPmRp c3RhbmNlID0gMDsKKwlyZXR1cm4gSW52YWxpZEJsb2NrTnVtYmVyOworfQorCisvKgorICogUmVz dW1lIGxvb2tpbmcgYWhlYWQgYWZ0ZXIgdGhlIGJsb2NrIG51bWJlciBjYWxsYmFjayByZXBvcnRl ZCBlbmQtb2Ytc3RyZWFtLgorICogVGhpcyBpcyB1c2VmdWwgZm9yIHN0cmVhbXMgb2Ygc2VsZi1y ZWZlcmVudGlhbCBibG9ja3MsIGFmdGVyIGEgYnVmZmVyIG5lZWRlZAorICogdG8gYmUgY29uc3Vt ZWQgYW5kIGV4YW1pbmVkIHRvIGZpbmQgbW9yZSBibG9jayBudW1iZXJzLgorICovCit2b2lkCity ZWFkX3N0cmVhbV9yZXN1bWUoUmVhZFN0cmVhbSAqc3RyZWFtKQoreworCXN0cmVhbS0+ZGlzdGFu Y2UgPSBzdHJlYW0tPnJlc3VtZV9kaXN0YW5jZTsKK30KKworLyoKKyAqIENhbGxlZCBmcm9tIGlu c2lkZSBhIGJsb2NrIG51bWJlciBjYWxsYmFjaywgdG8gcmV0dXJuIGNvbnRyb2wgdG8gdGhlIGNh bGxlcgorICogb2YgcmVhZF9zdHJlYW1fbmV4dF9idWZmZXIoKSB3aXRob3V0IGxvb2tpbmcgZnVy dGhlciBhaGVhZC4gIEl0cyByZXR1cm4KKyAqIHZhbHVlIHNob3VsZCBiZSByZXR1cm5lZCBieSB0 aGUgY2FsbGJhY2suICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gcGF1c2luZyBhbmQKKyAqIHJlc3Vt aW5nIGF1dG9tYXRpY2FsbHkgYXQgdGhlIG5leHQgY2FsbCB0byByZWFkX3N0cmVhbV9uZXh0X2J1 ZmZlcigpLgorICovCitCbG9ja051bWJlcgorcmVhZF9zdHJlYW1feWllbGQoUmVhZFN0cmVhbSAq c3RyZWFtKQoreworCXJlYWRfc3RyZWFtX3BhdXNlKHN0cmVhbSk7CisJc3RyZWFtLT55aWVsZGVk ID0gdHJ1ZTsKKwlyZXR1cm4gSW52YWxpZEJsb2NrTnVtYmVyOworfQorCiAvKgogICogUmVzZXQg YSByZWFkIHN0cmVhbSBieSByZWxlYXNpbmcgYW55IHF1ZXVlZCB1cCBidWZmZXJzLCBhbGxvd2lu ZyB0aGUgc3RyZWFtCiAgKiB0byBiZSB1c2VkIGFnYWluIGZvciBkaWZmZXJlbnQgYmxvY2tzLiAg VGhpcyBjYW4gYmUgdXNlZCB0byBjbGVhciBhbgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxl cy90ZXN0X2Fpby9NYWtlZmlsZSBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9haW8vTWFrZWZpbGUK aW5kZXggZjUzY2M2NDY3Li40NjVlYjA5ZWUgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMv dGVzdF9haW8vTWFrZWZpbGUKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby9NYWtlZmls ZQpAQCAtNSw3ICs1LDggQEAgUEdGSUxFREVTQyA9ICJ0ZXN0X2FpbyAtIHRlc3QgY29kZSBmb3Ig QUlPIgogTU9EVUxFX2JpZyA9IHRlc3RfYWlvCiBPQkpTID0gXAogCSQoV0lOMzJSRVMpIFwKLQl0 ZXN0X2Fpby5vCisJdGVzdF9haW8ubyBcCisJdGVzdF9yZWFkX3N0cmVhbS5vCiAKIEVYVEVOU0lP TiA9IHRlc3RfYWlvCiBEQVRBID0gdGVzdF9haW8tLTEuMC5zcWwKZGlmZiAtLWdpdCBhL3NyYy90 ZXN0L21vZHVsZXMvdGVzdF9haW8vbWVzb24uYnVpbGQgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3Rf YWlvL21lc29uLmJ1aWxkCmluZGV4IGZlZmEyNWJjNS4uZDEzZmRhMjE5IDEwMDY0NAotLS0gYS9z cmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL21lc29uLmJ1aWxkCisrKyBiL3NyYy90ZXN0L21vZHVs ZXMvdGVzdF9haW8vbWVzb24uYnVpbGQKQEAgLTIsNiArMiw3IEBACiAKIHRlc3RfYWlvX3NvdXJj ZXMgPSBmaWxlcygKICAgJ3Rlc3RfYWlvLmMnLAorICAndGVzdF9yZWFkX3N0cmVhbS5jJywKICkK IAogaWYgaG9zdF9zeXN0ZW0gPT0gJ3dpbmRvd3MnCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1 bGVzL3Rlc3RfYWlvL3QvMDAxX2Fpby5wbCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9haW8vdC8w MDFfYWlvLnBsCmluZGV4IDVjNjM0ZWMzYy4uNWFmNTU4YmY0IDEwMDY0NAotLS0gYS9zcmMvdGVz dC9tb2R1bGVzL3Rlc3RfYWlvL3QvMDAxX2Fpby5wbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rl c3RfYWlvL3QvMDAxX2Fpby5wbApAQCAtMTQ4OSw2ICsxNDg5LDM1IEBAIFNFTEVDVCByZWFkX3Jl bF9ibG9ja19sbCgndGJsX2NzX2ZhaWwnLCAzLCBuYmxvY2tzPT4xLCB6ZXJvX29uX2Vycm9yPT50 cnVlKTspLAogCSRwc3FsLT5xdWl0KCk7CiB9CiAKKyMgUmVhZCBzdHJlYW0gdGVzdHMKK3N1YiB0 ZXN0X3JlYWRfc3RyZWFtCit7CisJbXkgJGlvX21ldGhvZCA9IHNoaWZ0OworCW15ICRub2RlID0g c2hpZnQ7CisJbXkgKCRyZXQsICRvdXRwdXQpOworCisJbXkgJHBzcWwgPSAkbm9kZS0+YmFja2dy b3VuZF9wc3FsKCdwb3N0Z3JlcycsIG9uX2Vycm9yX3N0b3AgPT4gMCk7CisKKwkkcHNxbC0+cXVl cnlfc2FmZSgKKwkJcXEoCitDUkVBVEUgVEVNUE9SQVJZIFRBQkxFIHRtcF9yZWFkX3N0cmVhbShk YXRhIGludCBub3QgbnVsbCk7CitJTlNFUlQgSU5UTyB0bXBfcmVhZF9zdHJlYW0gU0VMRUNUIGdl bmVyYXRlX3NlcmllcygxLCAxMDAwMCk7CitTRUxFQ1QgdGVzdF9yZWFkX3N0cmVhbV9yZXN1bWUo J3RtcF9yZWFkX3N0cmVhbScsIDApOworRFJPUCBUQUJMRSB0bXBfcmVhZF9zdHJlYW07CispKTsK KworCSRwc3FsLT5xdWVyeV9zYWZlKAorCQlxcSgKK0NSRUFURSBURU1QT1JBUlkgVEFCTEUgdG1w X3JlYWRfc3RyZWFtKGRhdGEgaW50IG5vdCBudWxsKTsKK0lOU0VSVCBJTlRPIHRtcF9yZWFkX3N0 cmVhbSBTRUxFQ1QgZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMDAwKTsKK1NFTEVDVCB0ZXN0X3JlYWRf c3RyZWFtX3lpZWxkKCd0bXBfcmVhZF9zdHJlYW0nLCAwKTsKK0RST1AgVEFCTEUgdG1wX3JlYWRf c3RyZWFtOworKSk7CisKKwkkcHNxbC0+cXVpdCgpOworfQorCisKIAogIyBSdW4gYWxsIHRlc3Rz IHRoYXQgYXJlIHN1cHBvcnRlZCBmb3IgYWxsIGlvX21ldGhvZHMKIHN1YiB0ZXN0X2dlbmVyaWMK QEAgLTE1MjUsNiArMTU1NCw3IEBAIENIRUNLUE9JTlQ7CiAJdGVzdF9jaGVja3N1bSgkaW9fbWV0 aG9kLCAkbm9kZSk7CiAJdGVzdF9pZ25vcmVfY2hlY2tzdW0oJGlvX21ldGhvZCwgJG5vZGUpOwog CXRlc3RfY2hlY2tzdW1fY3JlYXRlZGIoJGlvX21ldGhvZCwgJG5vZGUpOworCXRlc3RfcmVhZF9z dHJlYW0oJGlvX21ldGhvZCwgJG5vZGUpOwogCiAgIFNLSVA6CiAJewpkaWZmIC0tZ2l0IGEvc3Jj L3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90ZXN0X2Fpby0tMS4wLnNxbCBiL3NyYy90ZXN0L21vZHVs ZXMvdGVzdF9haW8vdGVzdF9haW8tLTEuMC5zcWwKaW5kZXggZTQ5NTQ4MWM0Li5lMzc4MTBiNzIg MTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9haW8vdGVzdF9haW8tLTEuMC5zcWwK KysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90ZXN0X2Fpby0tMS4wLnNxbApAQCAtMTA2 LDMgKzEwNiwxNiBAQCBBUyAnTU9EVUxFX1BBVEhOQU1FJyBMQU5HVUFHRSBDOwogQ1JFQVRFIEZV TkNUSU9OIGlual9pb19yZW9wZW5fZGV0YWNoKCkKIFJFVFVSTlMgcGdfY2F0YWxvZy52b2lkIFNU UklDVAogQVMgJ01PRFVMRV9QQVRITkFNRScgTEFOR1VBR0UgQzsKKworCisKKy8qCisgKiBSZWFk IHN0cmVhbSByZWxhdGVkIGZ1bmN0aW9ucworICovCitDUkVBVEUgRlVOQ1RJT04gdGVzdF9yZWFk X3N0cmVhbV9yZXN1bWUocmVsIHJlZ2NsYXNzLCBibG9ja25vIGludDQpCitSRVRVUk5TIHBnX2Nh dGFsb2cudm9pZCBTVFJJQ1QKK0FTICdNT0RVTEVfUEFUSE5BTUUnIExBTkdVQUdFIEM7CisKK0NS RUFURSBGVU5DVElPTiB0ZXN0X3JlYWRfc3RyZWFtX3lpZWxkKHJlbCByZWdjbGFzcywgYmxvY2tu byBpbnQ0KQorUkVUVVJOUyBwZ19jYXRhbG9nLnZvaWQgU1RSSUNUCitBUyAnTU9EVUxFX1BBVEhO QU1FJyBMQU5HVUFHRSBDOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90 ZXN0X3JlYWRfc3RyZWFtLmMgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3Rlc3RfcmVhZF9z dHJlYW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAuLmQxZDQzNmE5MAot LS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9haW8vdGVzdF9yZWFkX3N0 cmVhbS5jCkBAIC0wLDAgKzEsMTgxIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiB0ZXN0 X3JlYWRfc3RyZWFtLmMKKyAqCQlIZWxwZXJzIHRvIHdyaXRlIHRlc3RzIGZvciByZWFkX3N0cmVh bS5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDIwLTIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERl dmVsb3BtZW50IEdyb3VwCisgKgorICogSURFTlRJRklDQVRJT04KKyAqCSAgc3JjL3Rlc3QvbW9k dWxlcy90ZXN0X2Fpby90ZXN0X3JlYWRfc3RyZWFtLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAqLworCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgImFjY2Vzcy9yZWxhdGlv bi5oIgorI2luY2x1ZGUgImZtZ3IuaCIKKyNpbmNsdWRlICJzdG9yYWdlL2J1Zm1nci5oIgorI2lu Y2x1ZGUgInN0b3JhZ2UvcmVhZF9zdHJlYW0uaCIKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlCbG9j a051bWJlciBibGtubzsKKwlpbnQJCQljb3VudDsKK30gdGVzdF9yZWFkX3N0cmVhbV9yZXN1bWVf c3RhdGU7CisKK3N0YXRpYyBCbG9ja051bWJlcgordGVzdF9yZWFkX3N0cmVhbV9yZXN1bWVfY2Io UmVhZFN0cmVhbSAqc3RyZWFtLAorCQkJCQkJICAgdm9pZCAqY2FsbGJhY2tfcHJpdmF0ZV9kYXRh LAorCQkJCQkJICAgdm9pZCAqcGVyX2J1ZmZlcl9kYXRhKQoreworCXRlc3RfcmVhZF9zdHJlYW1f cmVzdW1lX3N0YXRlICpzdGF0ZSA9IGNhbGxiYWNrX3ByaXZhdGVfZGF0YTsKKworCS8qIFBlcmlv ZGljIGVuZC1vZi1zdHJlYW0uICovCisJaWYgKCsrc3RhdGUtPmNvdW50ICUgMyA9PSAwKQorCQly ZXR1cm4gcmVhZF9zdHJlYW1fcGF1c2Uoc3RyZWFtKTsKKworCXJldHVybiBzdGF0ZS0+Ymxrbm87 Cit9CisKKy8qCisgKiBUZXN0IHJlYWRfc3RyZWFtX3Jlc3VtZSgpLCBhbGxvd2luZyBhIHN0cmVh bSB0byBlbmQgdGVtcG9yYXJpbHkgYW5kIHRoZW4KKyAqIGNvbnRpbnVlIHdoZXJlIGl0IGxlZnQg b2ZmLgorICovCitQR19GVU5DVElPTl9JTkZPX1YxKHRlc3RfcmVhZF9zdHJlYW1fcmVzdW1lKTsK K0RhdHVtCit0ZXN0X3JlYWRfc3RyZWFtX3Jlc3VtZShQR19GVU5DVElPTl9BUkdTKQoreworCU9p ZAkJCXJlbGlkID0gUEdfR0VUQVJHX09JRCgwKTsKKwlCbG9ja051bWJlciBibGtubyA9IFBHX0dF VEFSR19VSU5UMzIoMSk7CisJUmVsYXRpb24JcmVsOworCUJ1ZmZlcgkJYnVmOworCVJlYWRTdHJl YW0gKnN0cmVhbTsKKwl0ZXN0X3JlYWRfc3RyZWFtX3Jlc3VtZV9zdGF0ZSBzdGF0ZSA9IHsuYmxr bm8gPSBibGtub307CisKKwlyZWwgPSByZWxhdGlvbl9vcGVuKHJlbGlkLCBBY2Nlc3NTaGFyZUxv Y2spOworCXN0cmVhbSA9IHJlYWRfc3RyZWFtX2JlZ2luX3JlbGF0aW9uKFJFQURfU1RSRUFNX0RF RkFVTFQsCisJCQkJCQkJCQkJTlVMTCwKKwkJCQkJCQkJCQlyZWwsCisJCQkJCQkJCQkJTUFJTl9G T1JLTlVNLAorCQkJCQkJCQkJCXRlc3RfcmVhZF9zdHJlYW1fcmVzdW1lX2NiLAorCQkJCQkJCQkJ CSZzdGF0ZSwKKwkJCQkJCQkJCQkwKTsKKworCWZvciAoaW50IGkgPSAwOyBpIDwgMzsgKytpKQor CXsKKwkJLyogU2FtZSBibG9jayB0d2ljZS4gKi8KKwkJYnVmID0gcmVhZF9zdHJlYW1fbmV4dF9i dWZmZXIoc3RyZWFtLCBOVUxMKTsKKwkJQXNzZXJ0KEJ1ZmZlckdldEJsb2NrTnVtYmVyKGJ1Zikg PT0gYmxrbm8pOworCQlSZWxlYXNlQnVmZmVyKGJ1Zik7CisJCWJ1ZiA9IHJlYWRfc3RyZWFtX25l eHRfYnVmZmVyKHN0cmVhbSwgTlVMTCk7CisJCUFzc2VydChCdWZmZXJHZXRCbG9ja051bWJlcihi dWYpID09IGJsa25vKTsKKwkJUmVsZWFzZUJ1ZmZlcihidWYpOworCisJCS8qIEVuZC1vZi1zdHJl YW0uICovCisJCWJ1ZiA9IHJlYWRfc3RyZWFtX25leHRfYnVmZmVyKHN0cmVhbSwgTlVMTCk7CisJ CUFzc2VydChidWYgPT0gSW52YWxpZEJ1ZmZlcik7CisJCWJ1ZiA9IHJlYWRfc3RyZWFtX25leHRf YnVmZmVyKHN0cmVhbSwgTlVMTCk7CisJCUFzc2VydChidWYgPT0gSW52YWxpZEJ1ZmZlcik7CisK KwkJLyogUmVzdW1lLiAqLworCQlyZWFkX3N0cmVhbV9yZXN1bWUoc3RyZWFtKTsKKwl9CisKKwly ZWFkX3N0cmVhbV9lbmQoc3RyZWFtKTsKKwlyZWxhdGlvbl9jbG9zZShyZWwsIE5vTG9jayk7CisK KwlQR19SRVRVUk5fVk9JRCgpOworfQorCit0eXBlZGVmIHN0cnVjdAoreworCUJsb2NrTnVtYmVy IGJsa25vOworCWludAkJCWNvdW50OworCWludAkJCXlpZWxkczsKKwlpbnQJCQlibG9ja3M7Cit9 CQkJdGVzdF9yZWFkX3N0cmVhbV95aWVsZF9zdGF0ZTsKKworc3RhdGljIEJsb2NrTnVtYmVyCit0 ZXN0X3JlYWRfc3RyZWFtX3lpZWxkX2NiKFJlYWRTdHJlYW0gKnN0cmVhbSwKKwkJCQkJCSAgdm9p ZCAqY2FsbGJhY2tfcHJpdmF0ZV9kYXRhLAorCQkJCQkJICB2b2lkICpwZXJfYnVmZmVyX2RhdGEp Cit7CisJdGVzdF9yZWFkX3N0cmVhbV95aWVsZF9zdGF0ZSAqc3RhdGUgPSBjYWxsYmFja19wcml2 YXRlX2RhdGE7CisKKwkvKiBZaWVsZCBldmVyeSB0aGlyZCBjYWxsLiAqLworCWlmICgrK3N0YXRl LT5jb3VudCAlIDMgPT0gMikKKwl7CisJCXN0YXRlLT55aWVsZHMrKzsKKwkJcmV0dXJuIHJlYWRf c3RyZWFtX3lpZWxkKHN0cmVhbSk7CisJfQorCisJc3RhdGUtPmJsb2NrcysrOworCXJldHVybiBz dGF0ZS0+Ymxrbm87Cit9CisKKy8qCisgKiBUZXN0IHJlYWRfc3RyZWFtX3lpZWxkKCksIGFsbG93 aW5nIGNvbnRyb2wgdG8gYmUgeWllbGRlZCB0ZW1wb3JhcmlseSBmcm9tCisgKiB0aGUgbG9va2Fo ZWFkIGxvb3AgYW5kIHJldHVybmVkIHRvIHRoZSBjYWxsZXIgb2YgcmVhZF9zdHJlYW1fbmV4dF9i dWZmZXIoKS4KKyAqLworUEdfRlVOQ1RJT05fSU5GT19WMSh0ZXN0X3JlYWRfc3RyZWFtX3lpZWxk KTsKK0RhdHVtCit0ZXN0X3JlYWRfc3RyZWFtX3lpZWxkKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJ T2lkCQkJcmVsaWQgPSBQR19HRVRBUkdfT0lEKDApOworCUJsb2NrTnVtYmVyIGJsa25vID0gUEdf R0VUQVJHX1VJTlQzMigxKTsKKwlSZWxhdGlvbglyZWw7CisJQnVmZmVyCQlidWY7CisJUmVhZFN0 cmVhbSAqc3RyZWFtOworCXRlc3RfcmVhZF9zdHJlYW1feWllbGRfc3RhdGUgc3RhdGUgPSB7LmJs a25vID0gYmxrbm99OworCisJcmVsID0gcmVsYXRpb25fb3BlbihyZWxpZCwgQWNjZXNzU2hhcmVM b2NrKTsKKwlzdHJlYW0gPSByZWFkX3N0cmVhbV9iZWdpbl9yZWxhdGlvbihSRUFEX1NUUkVBTV9E RUZBVUxULAorCQkJCQkJCQkJCU5VTEwsCisJCQkJCQkJCQkJcmVsLAorCQkJCQkJCQkJCU1BSU5f Rk9SS05VTSwKKwkJCQkJCQkJCQl0ZXN0X3JlYWRfc3RyZWFtX3lpZWxkX2NiLAorCQkJCQkJCQkJ CSZzdGF0ZSwKKwkJCQkJCQkJCQkwKTsKKworCWJ1ZiA9IHJlYWRfc3RyZWFtX25leHRfYnVmZmVy KHN0cmVhbSwgTlVMTCk7CisJQXNzZXJ0KEJ1ZmZlckdldEJsb2NrTnVtYmVyKGJ1ZikgPT0gYmxr bm8pOworCVJlbGVhc2VCdWZmZXIoYnVmKTsKKwlBc3NlcnQoc3RhdGUuYmxvY2tzID09IDEpOwor CUFzc2VydChzdGF0ZS55aWVsZHMgPT0gMSk7CisKKwlidWYgPSByZWFkX3N0cmVhbV9uZXh0X2J1 ZmZlcihzdHJlYW0sIE5VTEwpOworCUFzc2VydChCdWZmZXJHZXRCbG9ja051bWJlcihidWYpID09 IGJsa25vKTsKKwlSZWxlYXNlQnVmZmVyKGJ1Zik7CisJQXNzZXJ0KHN0YXRlLmJsb2NrcyA9PSAz KTsKKwlBc3NlcnQoc3RhdGUueWllbGRzID09IDEpOworCisJYnVmID0gcmVhZF9zdHJlYW1fbmV4 dF9idWZmZXIoc3RyZWFtLCBOVUxMKTsKKwlBc3NlcnQoQnVmZmVyR2V0QmxvY2tOdW1iZXIoYnVm KSA9PSBibGtubyk7CisJUmVsZWFzZUJ1ZmZlcihidWYpOworCUFzc2VydChzdGF0ZS5ibG9ja3Mg PT0gMyk7CisJQXNzZXJ0KHN0YXRlLnlpZWxkcyA9PSAyKTsKKworCWJ1ZiA9IHJlYWRfc3RyZWFt X25leHRfYnVmZmVyKHN0cmVhbSwgTlVMTCk7CisJQXNzZXJ0KEJ1ZmZlckdldEJsb2NrTnVtYmVy KGJ1ZikgPT0gYmxrbm8pOworCVJlbGVhc2VCdWZmZXIoYnVmKTsKKwlBc3NlcnQoc3RhdGUuYmxv Y2tzID09IDUpOworCUFzc2VydChzdGF0ZS55aWVsZHMgPT0gMik7CisKKwlidWYgPSByZWFkX3N0 cmVhbV9uZXh0X2J1ZmZlcihzdHJlYW0sIE5VTEwpOworCUFzc2VydChCdWZmZXJHZXRCbG9ja051 bWJlcihidWYpID09IGJsa25vKTsKKwlSZWxlYXNlQnVmZmVyKGJ1Zik7CisJQXNzZXJ0KHN0YXRl LmJsb2NrcyA9PSA1KTsKKwlBc3NlcnQoc3RhdGUueWllbGRzID09IDMpOworCisJYnVmID0gcmVh ZF9zdHJlYW1fbmV4dF9idWZmZXIoc3RyZWFtLCBOVUxMKTsKKwlBc3NlcnQoQnVmZmVyR2V0Qmxv Y2tOdW1iZXIoYnVmKSA9PSBibGtubyk7CisJUmVsZWFzZUJ1ZmZlcihidWYpOworCUFzc2VydChz dGF0ZS5ibG9ja3MgPT0gNyk7CisJQXNzZXJ0KHN0YXRlLnlpZWxkcyA9PSAzKTsKKworCXJlYWRf c3RyZWFtX2VuZChzdHJlYW0pOworCXJlbGF0aW9uX2Nsb3NlKHJlbCwgTm9Mb2NrKTsKKworCVBH X1JFVFVSTl9WT0lEKCk7Cit9CmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRl ZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDNlZTg2NDQ5 YS4uNjAxMWJlNzYzIDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlz dAorKysgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtNDIwMCw2ICs0MjAw LDcgQEAgdGVTZWN0aW9uCiB0ZW1wX3RhYmxlc3BhY2VzX2V4dHJhCiB0ZXN0MTI4CiB0ZXN0X3Jl X2ZsYWdzCit0ZXN0X3JlYWRfc3RyZWFtX3Jlc3VtZV9zdGF0ZQogdGVzdF9yZWdleF9jdHgKIHRl c3Rfc2htX21xX2hlYWRlcgogdGVzdF9zcGVjCi0tIAoyLjUxLjAKCg== --0000000000007589150649a4074c Content-Type: application/octet-stream; name="v9-0003-Add-batching-interfaces-used-by-heapam-and-nbtree.patch" Content-Disposition: attachment; filename="v9-0003-Add-batching-interfaces-used-by-heapam-and-nbtree.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ml1k3l3u8 RnJvbSA0NWIyZjMzNzM4ZThhOTJjYzRiOGI0N2U2ODE5NTFmMTg4YmI1ZWY5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFR1 ZSwgOSBTZXAgMjAyNSAxOTo1MDowMyAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggdjkgMDMvMTBdIEFk ZCBiYXRjaGluZyBpbnRlcmZhY2VzIHVzZWQgYnkgaGVhcGFtIGFuZCBuYnRyZWUuCgpBZGQgYSBu ZXcgYW1nZXRiYXRjaCBpbmRleCBBTSBpbnRlcmZhY2UgdGhhdCBhbGxvd3MgaW5kZXggYWNjZXNz IG1ldGhvZHMKdG8gaW1wbGVtZW50IHBsYWluL29yZGVyZWQgaW5kZXggc2NhbnMgdGhhdCByZXR1 cm4gaW5kZXggZW50cmllcyBpbgpwZXItbGVhZi1wYWdlIGJhdGNoZXMsIHJhdGhlciB0aGFuIG9u ZSBhdCBhIHRpbWUuICBUaGlzIGVuYWJsZXMgYQp2YXJpZXR5IG9mIG9wdGltaXphdGlvbnMgb24g dGhlIHRhYmxlIEFNIHNpZGUsIG1vc3Qgbm90YWJseSBJL08KcHJlZmV0Y2hpbmcgb2YgaGVhcCB0 dXBsZXMgZHVyaW5nIG9yZGVyZWQgaW5kZXggc2NhbnMuICBJdCB3aWxsIGFsc28KZW5hYmxlIGFu IG9wdGltaXphdGlvbiB0aGF0IGhhcyBoZWFwYW0gYXZvaWQgcmVwZWF0ZWRseSBsb2NraW5nIGFu ZAp1bmxvY2tpbmcgdGhlIHNhbWUgaGVhcCBwYWdlJ3MgYnVmZmVyLgoKSW5kZXggYWNjZXNzIG1l dGhvZHMgdGhhdCBzdXBwb3J0IHBsYWluIGluZGV4IHNjYW5zIG11c3Qgbm93IGltcGxlbWVudApl aXRoZXIgdGhlIGFtZ2V0YmF0Y2ggaW50ZXJmYWNlIE9SIHRoZSBhbWdldHR1cGxlIGludGVyZmFj ZS4gIFRoZQphbWdldHR1cGxlIGludGVyZmFjZSB3aWxsIHN0aWxsIGJlIHVzZWQgYnkgaW5kZXgg QU1zIHRoYXQgcmVxdWlyZSBkaXJlY3QKY29udHJvbCBvdmVyIHRoZSBwcm9ncmVzcyBvZiBpbmRl eCBzY2FucyAoZS5nLiwgR2lTVCB3aXRoIEtOTiBvcmRlcmVkCnNjYW5zKS4KClRoaXMgY29tbWl0 IGFsc28gYWRkcyBhIG5ldyB0YWJsZSBBTSBpbnRlcmZhY2UgY2FsbGJhY2ssIGNhbGxlZCBieSB0 aGUKY29yZSBleGVjdXRvciB0aHJvdWdoIHRoZSBuZXcgdGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90 IHNoaW0gZnVuY3Rpb24uClRoaXMgYWxsb3dzIHRoZSB0YWJsZSBBTSB0byBkaXJlY3RseSBtYW5h Z2UgdGhlIHByb2dyZXNzIG9mIGluZGV4IHNjYW5zCnJhdGhlciB0aGFuIGhhdmluZyBpbmRpdmlk dWFsIFRJRHMgcGFzc2VkIGluIGJ5IHRoZSBjYWxsZXIuIFRoZQphbWdldGJhdGNoIGludGVyZmFj ZSBpcyB0aWdodGx5IGNvdXBsZWQgd2l0aCB0aGUgbmV3IGFwcHJvYWNoIHRvIG9yZGVyZWQKaW5k ZXggc2NhbnMgYWRkZWQgdG8gdGhlIHRhYmxlIEFNLiAgVGhlIHRhYmxlIEFNIGNhbiBhcHBseSBr bm93bGVkZ2Ugb2YKd2hpY2ggVElEcyB3aWxsIGJlIHJldHVybmVkIHRvIHNjYW4gaW4gdGhlIG5l YXIgZnV0dXJlIHRvIHBlcmZvcm0gSS9PCnByZWZldGNoaW5nLiAgUHJlZmV0Y2hpbmcgd2lsbCBi ZSBhZGRlZCBieSBhbiB1cGNvbWluZyBjb21taXQuCgpCYXRjaGVzIHJldHVybmVkIGZyb20gYW1n ZXRiYXRjaCBhcmUgZ3VhcmFudGVlZCB0byBiZSBhc3NvY2lhdGVkIHdpdGggYW4KaW5kZXggcGFn ZSBjb250YWluaW5nIGF0IGxlYXN0IG9uZSBtYXRjaGluZyB0dXBsZS4gIFRoZSBhbWdldGJhdGNo CmludGVyZmFjZSByZXR1cm5zIGJhdGNoZXMgdGhhdCBob2xkIGEgYnVmZmVyIHBpbiBvbiBhbiBp bmRleCBwYWdlIHRoYXQKY2FuIGJlIHVzZWQgYnkgdGhlIHRhYmxlIEFNIGFzIGFuIGludGVybG9j ayBhZ2FpbnN0IGNvbmN1cnJlbnQgVElECnJlY3ljbGluZyBieSBWQUNVVU0uICBOb3cgaGVhcGFt IG9ubHkgbmVlZHMgdG8gaG9sZCBvbiB0byBzdWNoIGEgcGluIGZvcgphbiBpbnN0YW50IChleGNl cHQgZHVyaW5nIHNjYW5zIHRoYXQgdXNlIGEgbm9uLU1WQ0Mgc25hcHNob3QsIHdoZXJlIHdlCmNv bnRpbnVlIHRvIG5lZWQgdG8gaG9sZCB0aGUgcGluIHVudGlsIGFsbCBvZiB0aGUgYmF0Y2gncyBU SURzIGhhdmUgYmVlbgpmZXRjaGVkIGZyb20gdGhlIGhlYXApLgoKVGhpcyBleHRlbmRzIHRoZSBk cm9wUGluIG1lY2hhbmlzbSBhZGRlZCB0byBuYnRyZWUgYnkgY29tbWl0IDJlZDViODdmLAphbmQg Z2VuZXJhbGl6ZXMgaXQgdG8gd29yayB3aXRoIGFsbCBpbmRleCBBTXMgdGhhdCBzdXBwb3J0IHRo ZSBuZXcKYW1nZXRiYXRjaCBpbnRlcmZhY2UuICBXZSBjYW4gYWx3YXlzIHNhZmVseSBkcm9wIGlu ZGV4IHBhZ2UgcGlucyBlYWdlcmx5CndpdGggdW5sb2dnZWQgcmVsYXRpb25zIGFuZCBkdXJpbmcg aW5kZXgtb25seSBzY2FucyBub3csIHByb3ZpZGVkIHRoZQpzY2FuIHVzZXMgYW4gTVZDQyBzbmFw c2hvdCAodGhlIG5idHJlZSBkcm9wUGluIGZlYXR1cmUgY291bGQgZG8KbmVpdGhlcikuCgpXZSdy ZSBhYmxlIHRvIGRvIHRoaXMgd2l0aCB1bmxvZ2dlZCByZWxhdGlvbnMgYnkgcmVxdWlyaW5nIHRo YXQKYW1nZXRiYXRjaCBpbmRleCBBTXMgdXNlIGZha2UgTFNOcyAob3IsIGFsdGVybmF0aXZlbHks IG5vdCBzdXBwb3J0CkxQX0RFQUQgbWFya2luZyBkZWFkIGluZGV4IHR1cGxlcyBhdCBhbGwpLgoK V2UncmUgYWJsZSB0byBkbyB0aGlzIGR1cmluZyBpbmRleC1vbmx5IHNjYW5zIGR1ZSB0byBoZWFw YW0gbm93IHNhdmluZwppbmZvcm1hdGlvbiBmcm9tIHRoZSB2aXNpYmlsaXR5IG1hcCB1cCBmcm9u dCwgaW4gYSBwZXItaXRlbSBiYXRjaCBjYWNoZS4KSW5kZXgtb25seSBzY2FucyBzdGlsbCBuZWVk IHRvIGhvbGQgb250byB0aGUgaW5kZXggcGFnZSBwaW4gZm9yIGFzIGxvbmcKYXMgaXQgdGFrZXMg dG8gcG9wdWxhdGUgdGhlIHZpc2liaWxpdHkgY2FjaGUuCgpUaGUgdXBjb21pbmcgY29tbWl0IHRo YXQgYWRkcyBpbmRleCBwcmVmZXRjaGluZyB3aWxsIHVzZSBhIHJlYWQgc3RyZWFtIHRvCnJlYWQg aGVhcCBwYWdlcyBkdXJpbmcgaW5kZXggc2NhbnMuICBSZWFkIHN0cmVhbSBpcyBjYXJlZnVsIHRv IGxpbWl0IGhvdwptYW55IHRoaW5ncyBpdCBwaW5zLCBsZXN0IHdlIGdldCBlcnJvcnMgYWJvdXQg aGF2aW5nIHRvbyBtYW55IGJ1ZmZlcnMKcGlubmVkLiAgU2ltcGx5IG5ldmVyIGhvbGRpbmcgb24g dG8gaW5kZXggcGFnZSBidWZmZXIgcGlucyBncmVhdGx5CnNpbXBsaWZpZXMgcmVzb3VyY2UgbWFu YWdlbWVudCBmb3IgaW5kZXggcHJlZmV0Y2hpbmc7IHRoZXJlJ3Mgbm8gcmlzayBvZgp1bmludGVu ZGVkIGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoZSByZWFkIHN0cmVhbSBhbmQgaW5kZXggQU0uICAo VGhlIG9ubHkKZG93bnNpZGUgaXMgdGhhdCB3ZSBjYW5ub3Qgc3VwcG9ydCBwcmVmZXRjaGluZyBk dXJpbmcgc2NhbnMgdGhhdCB1c2UgYQpub24tTVZDQyBzbmFwc2hvdCwgd2hpY2ggc2VlbXMgcXVp dGUgYWNjZXB0YWJsZS4pCgpJbiBwcmFjdGljZSwgaGVhcGFtIGRvZXNuJ3QgZHJvcCBlYWNoIGJh dGNoJ3MgaW5kZXggcGFnZSBidWZmZXIgcGluIGF0CnRoZSBlYXJsaWVzdCBvcHBvcnR1bml0eSBk dXJpbmcgaW5kZXgtb25seSBzY2Fucy4gIFRoaXMgd2FzIGRlZW1lZApuZWNlc3NhcnkgdG8gYXZv aWQgcmVncmVzc2luZyBpbmRleC1vbmx5IHNjYW5zIHdpdGggYSBMSU1JVCwgaW4KcGFydGljdWxh ciB3aXRoIG5lc3Rsb29wIGFudGktam9pbnMgYW5kIG5lc3Rsb29wIHNlbWktam9pbnMuICBUaGUg bmV3CmFtZ2V0YmF0Y2ggaW50ZXJmYWNlIGdpdmVzIHRhYmxlIEFNcyB0aGUgYXV0aG9yaXR5IHRv IGRlY2lkZSB3aGVuIGFuZAp3aGVyZSB0byBkcm9wIGluZGV4IHBhZ2UgcGlucywgc28gdGhpcyBj YW4gYmUgY29uc2lkZXJlZCBhIGhlYXBhbQppbXBsZW1lbnRhdGlvbiBkZXRhaWwgKGluZGV4IEFN cyBkb24ndCBuZWVkIHRvIGtub3cgYWJvdXQgaXQpLiAgVGhpcwpzY2hlbWUgc3RpbGwgYWxsb3dz IGluZGV4IHByZWZldGNoaW5nIHRvIG9ubHkgaG9sZCBvbnRvIG9uZSBiYXRjaCBpbmRleApwYWdl IHBpbiBhdCBhIHRpbWUsIGV2ZW4gd2hlbiB0aGUgc2NhbiBob2xkcyBvcGVuIG1hbnkgYmF0Y2hl cy4KCkF1dGhvcjogVG9tYXMgVm9uZHJhIDx0b21hc0B2b25kcmEubWU+CkF1dGhvcjogUGV0ZXIg R2VvZ2hlZ2FuIDxwZ0Bib3d0LmllPgpSZXZpZXdlZC1CeTogQW5kcmVzIEZyZXVuZCA8YW5kcmVz QGFuYXJhemVsLmRlPgpSZXZpZXdlZC1CeTogVGhvbWFzIE11bnJvIDx0aG9tYXMubXVucm9AZ21h aWwuY29tPgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL2NmODVmNDZmLWIwMmYtMDVi Mi01MjQ4LTUwMDBiODk0ZWJhYkBlbnRlcnByaXNlZGIuY29tCkRpc2N1c3Npb246IGh0dHBzOi8v cG9zdGdyLmVzL20vZWZhYzMyMzgtNmYzNC00MWVhLWEzOTMtMjZjYzA0NDFiNTA2JTQwdm9uZHJh Lm1lCkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vQ0FIMi1Xems5JTNEeCUzRGEyVGJj cVljWCUyQlhYbURIUXI1JTNEMXY5bTRaX3Y4YS1Ld0YxWm96MEElNDBtYWlsLmdtYWlsLmNvbQot LS0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9hbWFwaS5oICAgICAgICAgICAgICAgICAgICB8ICAyMiAr LQogc3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFtLmggICAgICAgICAgICAgICAgICAgIHwgIDI5ICst CiBzcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmggICAgICAgICAgICAgICAgICAgfCAgIDMgKwog c3JjL2luY2x1ZGUvYWNjZXNzL25idHJlZS5oICAgICAgICAgICAgICAgICAgIHwgMTc2ICstLS0t CiBzcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oICAgICAgICAgICAgICAgICAgfCAyOTUgKysr KysrKy0KIHNyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmggICAgICAgICAgICAgICAgICB8ICA0 MSArKwogc3JjL2luY2x1ZGUvZXhlY3V0b3IvaW5zdHJ1bWVudF9ub2RlLmggICAgICAgIHwgICA2 ICsKIHNyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oICAgICAgICAgICAgICAgICB8ICAgMiAt CiBzcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCAgICAgICAgICAgICAgICAgfCAgIDYgKy0K IHNyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW4uYyAgICAgICAgICAgICAgICB8ICAgNSArLQog c3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW5nZXQuYyAgICAgICAgICAgICAgIHwgICA2ICstCiBz cmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbnV0aWwuYyAgICAgICAgICAgICAgfCAgIDUgKy0KIHNy Yy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3QuYyAgICAgICAgICAgICAgICB8ICAgNSArLQogc3Jj L2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jICAgICAgICAgICAgICAgIHwgICA1ICstCiBzcmMv YmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jICAgICAgfCA1NzggKysrKysrKysr KysrKystCiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvTWFrZWZpbGUgICAgICAgICAgICAgfCAg IDMgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9hbWFwaS5jICAgICAgICAgICAgICB8ICAg NCArCiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYyAgICAgICAgICAgICAgfCAgMTMg Ky0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMgICAgICAgICAgICB8IDE0NyAr Ky0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhiYXRjaC5jICAgICAgICAgfCA2OTYg KysrKysrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvbWVzb24uYnVpbGQg ICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9SRUFETUUgICAgICAg ICAgICAgIHwgIDY2ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHBhZ2UuYyAgICAg ICAgICAgfCAgIDMgKwogc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWFkcGFnZS5jICAg ICAgIHwgMTk4ICsrKy0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jICAgICAg ICAgICAgfCAzMDEgKysrLS0tLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2VhcmNo LmMgICAgICAgICB8IDUyMSArKysrKy0tLS0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVl L25idHV0aWxzLmMgICAgICAgICAgfCAxNDAgKy0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lz dC9zcGd1dGlscy5jICAgICAgICAgIHwgICA1ICstCiBzcmMvYmFja2VuZC9jb21tYW5kcy9leHBs YWluLmMgICAgICAgICAgICAgICAgfCAgMjMgKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4 Y21kcy5jICAgICAgICAgICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0Ft aS5jICAgICAgICAgICAgICAgIHwgICAyICstCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjSW5k ZXhpbmcuYyAgICAgICAgICAgfCAgIDYgKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNSZXBs aWNhdGlvbi5jICAgICAgICB8ICAgOCArLQogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUJpdG1h cEluZGV4c2Nhbi5jICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleG9u bHlzY2FuLmMgICAgICB8IDEwOCArLS0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleHNj YW4uYyAgICAgICAgICB8ICAxMyArLQogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlam9p bi5jICAgICAgICAgIHwgICA0ICstCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9pbmR4cGF0 aC5jICAgICAgICAgfCAgIDYgKy0KIHNyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQu YyAgICAgICAgICB8ICAgOCArLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZWxh dGlvbi5jICAgIHwgICAzICstCiBzcmMvYmFja2VuZC91dGlscy9hZHQvYW11dGlscy5jICAgICAg ICAgICAgICAgfCAgIDggKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5jICAgICAg ICAgICAgICB8ICA2MSArLQogY29udHJpYi9hbWNoZWNrL3ZlcmlmeV9uYnRyZWUuYyAgICAgICAg ICAgICAgIHwgICAyICstCiBjb250cmliL2Jsb29tL2JsdXRpbHMuYyAgICAgICAgICAgICAgICAg ICAgICAgfCAgIDUgKy0KIC4uLi9tb2R1bGVzL2R1bW15X2luZGV4X2FtL2R1bW15X2luZGV4X2Ft LmMgICB8ICAgNSArLQogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAgICAgICAg ICAgIHwgIDEwICstCiA0NiBmaWxlcyBjaGFuZ2VkLCAyMjYzIGluc2VydGlvbnMoKyksIDEyOTQg ZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4 L2luZGV4YmF0Y2guYwoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9hbWFwaS5oIGIv c3JjL2luY2x1ZGUvYWNjZXNzL2FtYXBpLmgKaW5kZXggZWNmYmQwMTdkLi44NWQyNzQ2ZWMgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9hbWFwaS5oCisrKyBiL3NyYy9pbmNsdWRlL2Fj Y2Vzcy9hbWFwaS5oCkBAIC0xOTgsNiArMTk4LDE1IEBAIHR5cGVkZWYgdm9pZCAoKmFtcmVzY2Fu X2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuLAogdHlwZWRlZiBib29sICgqYW1nZXR0dXBs ZV9mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2NhbiwKIAkJCQkJCQkJCSBTY2FuRGlyZWN0aW9u IGRpcmVjdGlvbik7CiAKKy8qIG5leHQgYmF0Y2ggb2YgdmFsaWQgdHVwbGVzICovCit0eXBlZGVm IEluZGV4U2NhbkJhdGNoICgqYW1nZXRiYXRjaF9mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2Nh biwKKwkJCQkJCQkJCQkJICAgSW5kZXhTY2FuQmF0Y2ggcHJpb3JiYXRjaCwKKwkJCQkJCQkJCQkJ ICAgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pOworCisvKiByZWxlYXNlIGJhdGNoIG9mIHZhbGlk IHR1cGxlcyAqLwordHlwZWRlZiB2b2lkICgqYW1mcmVlYmF0Y2hfZnVuY3Rpb24pIChJbmRleFNj YW5EZXNjIHNjYW4sCisJCQkJCQkJCQkgIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKKwogLyogZmV0 Y2ggYWxsIHZhbGlkIHR1cGxlcyAqLwogdHlwZWRlZiBpbnQ2NCAoKmFtZ2V0Yml0bWFwX2Z1bmN0 aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuLAogCQkJCQkJCQkJICAgVElEQml0bWFwICp0Ym0pOwpA QCAtMjA1LDExICsyMTQsOSBAQCB0eXBlZGVmIGludDY0ICgqYW1nZXRiaXRtYXBfZnVuY3Rpb24p IChJbmRleFNjYW5EZXNjIHNjYW4sCiAvKiBlbmQgaW5kZXggc2NhbiAqLwogdHlwZWRlZiB2b2lk ICgqYW1lbmRzY2FuX2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuKTsKIAotLyogbWFyayBj dXJyZW50IHNjYW4gcG9zaXRpb24gKi8KLXR5cGVkZWYgdm9pZCAoKmFtbWFya3Bvc19mdW5jdGlv bikgKEluZGV4U2NhbkRlc2Mgc2Nhbik7Ci0KLS8qIHJlc3RvcmUgbWFya2VkIHNjYW4gcG9zaXRp b24gKi8KLXR5cGVkZWYgdm9pZCAoKmFtcmVzdHJwb3NfZnVuY3Rpb24pIChJbmRleFNjYW5EZXNj IHNjYW4pOworLyogaW52YWxpZGF0ZSBpbmRleCBBTSBzdGF0ZSB0aGF0IGluZGVwZW5kZW50bHkg dHJhY2tzIHNjYW4ncyBwb3NpdGlvbiAqLwordHlwZWRlZiB2b2lkICgqYW1wb3NyZXNldF9mdW5j dGlvbikgKEluZGV4U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCQkJCSBJbmRleFNjYW5CYXRjaCBiYXRj aCk7CiAKIC8qCiAgKiBDYWxsYmFjayBmdW5jdGlvbiBzaWduYXR1cmVzIC0gZm9yIHBhcmFsbGVs IGluZGV4IHNjYW5zLgpAQCAtMzA5LDEwICszMTYsMTEgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhB bVJvdXRpbmUKIAlhbWJlZ2luc2Nhbl9mdW5jdGlvbiBhbWJlZ2luc2NhbjsKIAlhbXJlc2Nhbl9m dW5jdGlvbiBhbXJlc2NhbjsKIAlhbWdldHR1cGxlX2Z1bmN0aW9uIGFtZ2V0dHVwbGU7IC8qIGNh biBiZSBOVUxMICovCisJYW1nZXRiYXRjaF9mdW5jdGlvbiBhbWdldGJhdGNoOyAvKiBjYW4gYmUg TlVMTCAqLworCWFtZnJlZWJhdGNoX2Z1bmN0aW9uIGFtZnJlZWJhdGNoOwkvKiBjYW4gYmUgTlVM TCAqLwogCWFtZ2V0Yml0bWFwX2Z1bmN0aW9uIGFtZ2V0Yml0bWFwOwkvKiBjYW4gYmUgTlVMTCAq LwogCWFtZW5kc2Nhbl9mdW5jdGlvbiBhbWVuZHNjYW47Ci0JYW1tYXJrcG9zX2Z1bmN0aW9uIGFt bWFya3BvczsJLyogY2FuIGJlIE5VTEwgKi8KLQlhbXJlc3RycG9zX2Z1bmN0aW9uIGFtcmVzdHJw b3M7IC8qIGNhbiBiZSBOVUxMICovCisJYW1wb3NyZXNldF9mdW5jdGlvbiBhbXBvc3Jlc2V0OyAv KiBjYW4gYmUgTlVMTCAqLwogCiAJLyogaW50ZXJmYWNlIGZ1bmN0aW9ucyB0byBzdXBwb3J0IHBh cmFsbGVsIGluZGV4IHNjYW5zICovCiAJYW1lc3RpbWF0ZXBhcmFsbGVsc2Nhbl9mdW5jdGlvbiBh bWVzdGltYXRlcGFyYWxsZWxzY2FuOyAvKiBjYW4gYmUgTlVMTCAqLwpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvYWNjZXNzL2dlbmFtLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2VuYW0uaAppbmRl eCA0YzA0MjljYzYuLmUyYzhhYzhmNiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL2dl bmFtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFtLmgKQEAgLTk0LDYgKzk0LDcgQEAg dHlwZWRlZiBib29sICgqSW5kZXhCdWxrRGVsZXRlQ2FsbGJhY2spIChJdGVtUG9pbnRlciBpdGVt cHRyLCB2b2lkICpzdGF0ZSk7CiAKIC8qIHN0cnVjdCBkZWZpbml0aW9ucyBhcHBlYXIgaW4gcmVs c2Nhbi5oICovCiB0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5EZXNjRGF0YSAqSW5kZXhTY2FuRGVz YzsKK3R5cGVkZWYgc3RydWN0IEluZGV4U2NhbkJhdGNoRGF0YSAqSW5kZXhTY2FuQmF0Y2g7CiB0 eXBlZGVmIHN0cnVjdCBTeXNTY2FuRGVzY0RhdGEgKlN5c1NjYW5EZXNjOwogCiB0eXBlZGVmIHN0 cnVjdCBQYXJhbGxlbEluZGV4U2NhbkRlc2NEYXRhICpQYXJhbGxlbEluZGV4U2NhbkRlc2M7CkBA IC0xNTQsNiArMTU1LDcgQEAgZXh0ZXJuIHZvaWQgaW5kZXhfaW5zZXJ0X2NsZWFudXAoUmVsYXRp b24gaW5kZXhSZWxhdGlvbiwKIAogZXh0ZXJuIEluZGV4U2NhbkRlc2MgaW5kZXhfYmVnaW5zY2Fu KFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKIAkJCQkJCQkJCSBSZWxhdGlvbiBpbmRleFJlbGF0aW9u LAorCQkJCQkJCQkJIGJvb2wgeHNfd2FudF9pdHVwLAogCQkJCQkJCQkJIFNuYXBzaG90IHNuYXBz aG90LAogCQkJCQkJCQkJIEluZGV4U2Nhbkluc3RydW1lbnRhdGlvbiAqaW5zdHJ1bWVudCwKIAkJ CQkJCQkJCSBpbnQgbmtleXMsIGludCBub3JkZXJieXMpOwpAQCAtMTgwLDE0ICsxODIsMTIgQEAg ZXh0ZXJuIHZvaWQgaW5kZXhfcGFyYWxsZWxzY2FuX2luaXRpYWxpemUoUmVsYXRpb24gaGVhcFJl bGF0aW9uLAogZXh0ZXJuIHZvaWQgaW5kZXhfcGFyYWxsZWxyZXNjYW4oSW5kZXhTY2FuRGVzYyBz Y2FuKTsKIGV4dGVybiBJbmRleFNjYW5EZXNjIGluZGV4X2JlZ2luc2Nhbl9wYXJhbGxlbChSZWxh dGlvbiBoZWFwcmVsLAogCQkJCQkJCQkJCQkgIFJlbGF0aW9uIGluZGV4cmVsLAorCQkJCQkJCQkJ CQkgIGJvb2wgeHNfd2FudF9pdHVwLAogCQkJCQkJCQkJCQkgIEluZGV4U2Nhbkluc3RydW1lbnRh dGlvbiAqaW5zdHJ1bWVudCwKIAkJCQkJCQkJCQkJICBpbnQgbmtleXMsIGludCBub3JkZXJieXMs CiAJCQkJCQkJCQkJCSAgUGFyYWxsZWxJbmRleFNjYW5EZXNjIHBzY2FuKTsKIGV4dGVybiBJdGVt UG9pbnRlciBpbmRleF9nZXRuZXh0X3RpZChJbmRleFNjYW5EZXNjIHNjYW4sCiAJCQkJCQkJCQkg U2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pOwotZXh0ZXJuIGJvb2wgaW5kZXhfZmV0Y2hfaGVhcChJ bmRleFNjYW5EZXNjIHNjYW4sIFR1cGxlVGFibGVTbG90ICpzbG90KTsKLWV4dGVybiBib29sIGlu ZGV4X2dldG5leHRfc2xvdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0 aW9uLAotCQkJCQkJCSAgIFR1cGxlVGFibGVTbG90ICpzbG90KTsKIGV4dGVybiBpbnQ2NCBpbmRl eF9nZXRiaXRtYXAoSW5kZXhTY2FuRGVzYyBzY2FuLCBUSURCaXRtYXAgKmJpdG1hcCk7CiAKIGV4 dGVybiBJbmRleEJ1bGtEZWxldGVSZXN1bHQgKmluZGV4X2J1bGtfZGVsZXRlKEluZGV4VmFjdXVt SW5mbyAqaW5mbywKQEAgLTI1MSw0ICsyNTEsMjcgQEAgZXh0ZXJuIHZvaWQgc3lzdGFibGVfaW5w bGFjZV91cGRhdGVfYmVnaW4oUmVsYXRpb24gcmVsYXRpb24sCiBleHRlcm4gdm9pZCBzeXN0YWJs ZV9pbnBsYWNlX3VwZGF0ZV9maW5pc2godm9pZCAqc3RhdGUsIEhlYXBUdXBsZSB0dXBsZSk7CiBl eHRlcm4gdm9pZCBzeXN0YWJsZV9pbnBsYWNlX3VwZGF0ZV9jYW5jZWwodm9pZCAqc3RhdGUpOwog CisvKgorICogYW1nZXRiYXRjaCB1dGlsaXRpZXMgY2FsbGVkIGJ5IGluZGV4YW0uYyAoaW4gaW5k ZXhiYXRjaC5jKQorICovCitleHRlcm4gdm9pZCBpbmRleF9iYXRjaHNjYW5faW5pdChJbmRleFNj YW5EZXNjIHNjYW4pOworZXh0ZXJuIHZvaWQgaW5kZXhfYmF0Y2hzY2FuX3Jlc2V0KEluZGV4U2Nh bkRlc2Mgc2NhbiwgYm9vbCBjb21wbGV0ZSk7CitleHRlcm4gdm9pZCBpbmRleF9iYXRjaHNjYW5f ZW5kKEluZGV4U2NhbkRlc2Mgc2Nhbik7CitleHRlcm4gdm9pZCBpbmRleF9iYXRjaHNjYW5fbWFy a19wb3MoSW5kZXhTY2FuRGVzYyBzY2FuKTsKK2V4dGVybiB2b2lkIGluZGV4X2JhdGNoc2Nhbl9y ZXN0b3JlX3BvcyhJbmRleFNjYW5EZXNjIHNjYW4pOworCisvKgorICogYW1nZXRiYXRjaCB1dGls aXRpZXMgY2FsbGVkIGJ5IHRhYmxlIEFNcyAoaW4gaW5kZXhiYXRjaC5jKQorICovCitleHRlcm4g dm9pZCB0YWJsZWFtX3V0aWxfYmF0Y2hfZGlyY2hhbmdlKEluZGV4U2NhbkRlc2Mgc2Nhbik7Citl eHRlcm4gdm9pZCB0YWJsZWFtX3V0aWxfa2lsbF9zY2FucG9zaXRlbShJbmRleFNjYW5EZXNjIHNj YW4pOworZXh0ZXJuIHZvaWQgdGFibGVhbV91dGlsX2ZyZWVfYmF0Y2goSW5kZXhTY2FuRGVzYyBz Y2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCk7CisKKy8qCisgKiBhbWdldGJhdGNoIHV0aWxpdGll cyBjYWxsZWQgYnkgaW5kZXggQU1zIChpbiBpbmRleGJhdGNoLmMpCisgKi8KK2V4dGVybiB2b2lk IGluZGV4YW1fdXRpbF9iYXRjaF91bmxvY2soSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5C YXRjaCBiYXRjaCk7CitleHRlcm4gSW5kZXhTY2FuQmF0Y2ggaW5kZXhhbV91dGlsX2JhdGNoX2Fs bG9jKEluZGV4U2NhbkRlc2Mgc2Nhbik7CitleHRlcm4gdm9pZCBpbmRleGFtX3V0aWxfYmF0Y2hf cmVsZWFzZShJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKKwogI2Vu ZGlmCQkJCQkJCS8qIEdFTkFNX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9o ZWFwYW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaAppbmRleCAzYzA5NjFhYjMuLjQ5 NGYzNmVjYyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCisrKyBiL3Ny Yy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaApAQCAtMTE3LDcgKzExNywxMCBAQCB0eXBlZGVmIHN0 cnVjdCBJbmRleEZldGNoSGVhcERhdGEKIAlJbmRleEZldGNoVGFibGVEYXRhIHhzX2Jhc2U7CS8q IEFNIGluZGVwZW5kZW50IHBhcnQgb2YgdGhlIGRlc2NyaXB0b3IgKi8KIAogCUJ1ZmZlcgkJeHNf Y2J1ZjsJCS8qIGN1cnJlbnQgaGVhcCBidWZmZXIgaW4gc2NhbiwgaWYgYW55ICovCisJQmxvY2tO dW1iZXIgeHNfYmxrOwkJCS8qIHhzX2NidWYncyBibG9jayBudW1iZXIsIGlmIGFueSAqLwogCS8q IE5COiBpZiB4c19jYnVmIGlzIG5vdCBJbnZhbGlkQnVmZmVyLCB3ZSBob2xkIGEgcGluIG9uIHRo YXQgYnVmZmVyICovCisKKwlCdWZmZXIJCXZtYnVmOwkJCS8qIHZpc2liaWxpdHkgbWFwIGJ1ZmZl ciAqLwogfSBJbmRleEZldGNoSGVhcERhdGE7CiAKIC8qIFJlc3VsdCBjb2RlcyBmb3IgSGVhcFR1 cGxlU2F0aXNmaWVzVmFjdXVtICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0 cmVlLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmgKaW5kZXggNzcyMjQ4NTk2Li5kOTFi MjNkYmEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9uYnRyZWUuaAorKysgYi9zcmMv aW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmgKQEAgLTkyNCwxMTIgKzkyNCw2IEBAIHR5cGVkZWYgc3Ry dWN0IEJUVmFjdXVtUG9zdGluZ0RhdGEKIAogdHlwZWRlZiBCVFZhY3V1bVBvc3RpbmdEYXRhICpC VFZhY3V1bVBvc3Rpbmc7CiAKLS8qCi0gKiBCVFNjYW5PcGFxdWVEYXRhIGlzIHRoZSBidHJlZS1w cml2YXRlIHN0YXRlIG5lZWRlZCBmb3IgYW4gaW5kZXhzY2FuLgotICogVGhpcyBjb25zaXN0cyBv ZiBwcmVwcm9jZXNzZWQgc2NhbiBrZXlzIChzZWUgX2J0X3ByZXByb2Nlc3Nfa2V5cygpIGZvcgot ICogZGV0YWlscyBvZiB0aGUgcHJlcHJvY2Vzc2luZyksIGluZm9ybWF0aW9uIGFib3V0IHRoZSBj dXJyZW50IGxvY2F0aW9uCi0gKiBvZiB0aGUgc2NhbiwgYW5kIGluZm9ybWF0aW9uIGFib3V0IHRo ZSBtYXJrZWQgbG9jYXRpb24sIGlmIGFueS4gIChXZSB1c2UKLSAqIEJUU2NhblBvc0RhdGEgdG8g cmVwcmVzZW50IHRoZSBkYXRhIG5lZWRlZCBmb3IgZWFjaCBvZiBjdXJyZW50IGFuZCBtYXJrZWQK LSAqIGxvY2F0aW9ucy4pCUluIGFkZGl0aW9uIHdlIGNhbiByZW1lbWJlciBzb21lIGtub3duLWtp bGxlZCBpbmRleCBlbnRyaWVzCi0gKiB0aGF0IG11c3QgYmUgbWFya2VkIGJlZm9yZSB3ZSBjYW4g bW92ZSBvZmYgdGhlIGN1cnJlbnQgcGFnZS4KLSAqCi0gKiBJbmRleCBzY2FucyB3b3JrIGEgcGFn ZSBhdCBhIHRpbWU6IHdlIHBpbiBhbmQgcmVhZC1sb2NrIHRoZSBwYWdlLCBpZGVudGlmeQotICog YWxsIHRoZSBtYXRjaGluZyBpdGVtcyBvbiB0aGUgcGFnZSBhbmQgc2F2ZSB0aGVtIGluIEJUU2Nh blBvc0RhdGEsIHRoZW4KLSAqIHJlbGVhc2UgdGhlIHJlYWQtbG9jayB3aGlsZSByZXR1cm5pbmcg dGhlIGl0ZW1zIHRvIHRoZSBjYWxsZXIgZm9yCi0gKiBwcm9jZXNzaW5nLiAgVGhpcyBhcHByb2Fj aCBtaW5pbWl6ZXMgbG9jay91bmxvY2sgdHJhZmZpYy4gIFdlIG11c3QgYWx3YXlzCi0gKiBkcm9w IHRoZSBsb2NrIHRvIG1ha2UgaXQgb2theSBmb3IgY2FsbGVyIHRvIHByb2Nlc3MgdGhlIHJldHVy bmVkIGl0ZW1zLgotICogV2hldGhlciBvciBub3Qgd2UgY2FuIGFsc28gcmVsZWFzZSB0aGUgcGlu IGR1cmluZyB0aGlzIHdpbmRvdyB3aWxsIHZhcnkuCi0gKiBXZSBkcm9wIHRoZSBwaW4gKHdoZW4g c28tPmRyb3BQaW4pIHRvIGF2b2lkIGJsb2NraW5nIHByb2dyZXNzIGJ5IFZBQ1VVTQotICogKHNl ZSBuYnRyZWUvUkVBRE1FIHNlY3Rpb24gYWJvdXQgbWFraW5nIGNvbmN1cnJlbnQgVElEIHJlY3lj bGluZyBzYWZlKS4KLSAqIFdlJ2xsIGFsd2F5cyByZWxlYXNlIGJvdGggdGhlIGxvY2sgYW5kIHRo ZSBwaW4gb24gdGhlIGN1cnJlbnQgcGFnZSBiZWZvcmUKLSAqIG1vdmluZyBvbiB0byBpdHMgc2li bGluZyBwYWdlLgotICoKLSAqIElmIHdlIGFyZSBkb2luZyBhbiBpbmRleC1vbmx5IHNjYW4sIHdl IHNhdmUgdGhlIGVudGlyZSBJbmRleFR1cGxlIGZvciBlYWNoCi0gKiBtYXRjaGVkIGl0ZW0sIG90 aGVyd2lzZSBvbmx5IGl0cyBoZWFwIFRJRCBhbmQgb2Zmc2V0LiAgVGhlIEluZGV4VHVwbGVzIGdv Ci0gKiBpbnRvIGEgc2VwYXJhdGUgd29ya3NwYWNlIGFycmF5OyBlYWNoIEJUU2NhblBvc0l0ZW0g c3RvcmVzIGl0cyB0dXBsZSdzCi0gKiBvZmZzZXQgd2l0aGluIHRoYXQgYXJyYXkuICBQb3N0aW5n IGxpc3QgdHVwbGVzIHN0b3JlIGEgImJhc2UiIHR1cGxlIG9uY2UsCi0gKiBhbGxvd2luZyB0aGUg c2FtZSBrZXkgdG8gYmUgcmV0dXJuZWQgZm9yIGVhY2ggVElEIGluIHRoZSBwb3N0aW5nIGxpc3QK LSAqIHR1cGxlLgotICovCi0KLXR5cGVkZWYgc3RydWN0IEJUU2NhblBvc0l0ZW0JLyogd2hhdCB3 ZSByZW1lbWJlciBhYm91dCBlYWNoIG1hdGNoICovCi17Ci0JSXRlbVBvaW50ZXJEYXRhIGhlYXBU aWQ7CS8qIFRJRCBvZiByZWZlcmVuY2VkIGhlYXAgaXRlbSAqLwotCU9mZnNldE51bWJlciBpbmRl eE9mZnNldDsJLyogaW5kZXggaXRlbSdzIGxvY2F0aW9uIHdpdGhpbiBwYWdlICovCi0JTG9jYXRp b25JbmRleCB0dXBsZU9mZnNldDsJLyogSW5kZXhUdXBsZSdzIG9mZnNldCBpbiB3b3Jrc3BhY2Us IGlmIGFueSAqLwotfSBCVFNjYW5Qb3NJdGVtOwotCi10eXBlZGVmIHN0cnVjdCBCVFNjYW5Qb3NE YXRhCi17Ci0JQnVmZmVyCQlidWY7CQkJLyogY3VyclBhZ2UgYnVmIChpbnZhbGlkIG1lYW5zIHVu cGlubmVkKSAqLwotCi0JLyogcGFnZSBkZXRhaWxzIGFzIG9mIHRoZSBzYXZlZCBwb3NpdGlvbidz IGNhbGwgdG8gX2J0X3JlYWRwYWdlICovCi0JQmxvY2tOdW1iZXIgY3VyclBhZ2U7CQkvKiBwYWdl IHJlZmVyZW5jZWQgYnkgaXRlbXMgYXJyYXkgKi8KLQlCbG9ja051bWJlciBwcmV2UGFnZTsJCS8q IGN1cnJQYWdlJ3MgbGVmdCBsaW5rICovCi0JQmxvY2tOdW1iZXIgbmV4dFBhZ2U7CQkvKiBjdXJy UGFnZSdzIHJpZ2h0IGxpbmsgKi8KLQlYTG9nUmVjUHRyCWxzbjsJCQkvKiBjdXJyUGFnZSdzIExT TiAod2hlbiBzby0+ZHJvcFBpbikgKi8KLQotCS8qIHNjYW4gZGlyZWN0aW9uIGZvciB0aGUgc2F2 ZWQgcG9zaXRpb24ncyBjYWxsIHRvIF9idF9yZWFkcGFnZSAqLwotCVNjYW5EaXJlY3Rpb24gZGly OwotCi0JLyoKLQkgKiBJZiB3ZSBhcmUgZG9pbmcgYW4gaW5kZXgtb25seSBzY2FuLCBuZXh0VHVw bGVPZmZzZXQgaXMgdGhlIGZpcnN0IGZyZWUKLQkgKiBsb2NhdGlvbiBpbiB0aGUgYXNzb2NpYXRl ZCB0dXBsZSBzdG9yYWdlIHdvcmtzcGFjZS4KLQkgKi8KLQlpbnQJCQluZXh0VHVwbGVPZmZzZXQ7 Ci0KLQkvKgotCSAqIG1vcmVMZWZ0IGFuZCBtb3JlUmlnaHQgdHJhY2sgd2hldGhlciB3ZSB0aGlu ayB0aGVyZSBtYXkgYmUgbWF0Y2hpbmcKLQkgKiBpbmRleCBlbnRyaWVzIHRvIHRoZSBsZWZ0IGFu ZCByaWdodCBvZiB0aGUgY3VycmVudCBwYWdlLCByZXNwZWN0aXZlbHkuCi0JICovCi0JYm9vbAkJ bW9yZUxlZnQ7Ci0JYm9vbAkJbW9yZVJpZ2h0OwotCi0JLyoKLQkgKiBUaGUgaXRlbXMgYXJyYXkg aXMgYWx3YXlzIG9yZGVyZWQgaW4gaW5kZXggb3JkZXIgKGllLCBpbmNyZWFzaW5nCi0JICogaW5k ZXhvZmZzZXQpLiAgV2hlbiBzY2FubmluZyBiYWNrd2FyZHMgaXQgaXMgY29udmVuaWVudCB0byBm aWxsIHRoZQotCSAqIGFycmF5IGJhY2stdG8tZnJvbnQsIHNvIHdlIHN0YXJ0IGF0IHRoZSBsYXN0 IHNsb3QgYW5kIGZpbGwgZG93bndhcmRzLgotCSAqIEhlbmNlIHdlIG5lZWQgYm90aCBhIGZpcnN0 LXZhbGlkLWVudHJ5IGFuZCBhIGxhc3QtdmFsaWQtZW50cnkgY291bnRlci4KLQkgKiBpdGVtSW5k ZXggaXMgYSBjdXJzb3Igc2hvd2luZyB3aGljaCBlbnRyeSB3YXMgbGFzdCByZXR1cm5lZCB0byBj YWxsZXIuCi0JICovCi0JaW50CQkJZmlyc3RJdGVtOwkJLyogZmlyc3QgdmFsaWQgaW5kZXggaW4g aXRlbXNbXSAqLwotCWludAkJCWxhc3RJdGVtOwkJLyogbGFzdCB2YWxpZCBpbmRleCBpbiBpdGVt c1tdICovCi0JaW50CQkJaXRlbUluZGV4OwkJLyogY3VycmVudCBpbmRleCBpbiBpdGVtc1tdICov Ci0KLQlCVFNjYW5Qb3NJdGVtIGl0ZW1zW01heFRJRHNQZXJCVHJlZVBhZ2VdOwkvKiBNVVNUIEJF IExBU1QgKi8KLX0gQlRTY2FuUG9zRGF0YTsKLQotdHlwZWRlZiBCVFNjYW5Qb3NEYXRhICpCVFNj YW5Qb3M7Ci0KLSNkZWZpbmUgQlRTY2FuUG9zSXNQaW5uZWQoc2NhbnBvcykgXAotKCBcCi0JQXNz ZXJ0TWFjcm8oQmxvY2tOdW1iZXJJc1ZhbGlkKChzY2FucG9zKS5jdXJyUGFnZSkgfHwgXAotCQkJ CSFCdWZmZXJJc1ZhbGlkKChzY2FucG9zKS5idWYpKSwgXAotCUJ1ZmZlcklzVmFsaWQoKHNjYW5w b3MpLmJ1ZikgXAotKQotI2RlZmluZSBCVFNjYW5Qb3NVbnBpbihzY2FucG9zKSBcCi0JZG8geyBc Ci0JCVJlbGVhc2VCdWZmZXIoKHNjYW5wb3MpLmJ1Zik7IFwKLQkJKHNjYW5wb3MpLmJ1ZiA9IElu dmFsaWRCdWZmZXI7IFwKLQl9IHdoaWxlICgwKQotI2RlZmluZSBCVFNjYW5Qb3NVbnBpbklmUGlu bmVkKHNjYW5wb3MpIFwKLQlkbyB7IFwKLQkJaWYgKEJUU2NhblBvc0lzUGlubmVkKHNjYW5wb3Mp KSBcCi0JCQlCVFNjYW5Qb3NVbnBpbihzY2FucG9zKTsgXAotCX0gd2hpbGUgKDApCi0KLSNkZWZp bmUgQlRTY2FuUG9zSXNWYWxpZChzY2FucG9zKSBcCi0oIFwKLQlBc3NlcnRNYWNybyhCbG9ja051 bWJlcklzVmFsaWQoKHNjYW5wb3MpLmN1cnJQYWdlKSB8fCBcCi0JCQkJIUJ1ZmZlcklzVmFsaWQo KHNjYW5wb3MpLmJ1ZikpLCBcCi0JQmxvY2tOdW1iZXJJc1ZhbGlkKChzY2FucG9zKS5jdXJyUGFn ZSkgXAotKQotI2RlZmluZSBCVFNjYW5Qb3NJbnZhbGlkYXRlKHNjYW5wb3MpIFwKLQlkbyB7IFwK LQkJKHNjYW5wb3MpLmJ1ZiA9IEludmFsaWRCdWZmZXI7IFwKLQkJKHNjYW5wb3MpLmN1cnJQYWdl ID0gSW52YWxpZEJsb2NrTnVtYmVyOyBcCi0JfSB3aGlsZSAoMCkKLQogLyogV2UgbmVlZCBvbmUg b2YgdGhlc2UgZm9yIGVhY2ggZXF1YWxpdHktdHlwZSBTS19TRUFSQ0hBUlJBWSBzY2FuIGtleSAq LwogdHlwZWRlZiBzdHJ1Y3QgQlRBcnJheUtleUluZm8KIHsKQEAgLTEwNTAsNiArOTQ0LDMwIEBA IHR5cGVkZWYgc3RydWN0IEJUQXJyYXlLZXlJbmZvCiAJU2NhbktleQkJaGlnaF9jb21wYXJlOwkv KiBhcnJheSdzIDwgb3IgPD0gdXBwZXIgYm91bmQgKi8KIH0gQlRBcnJheUtleUluZm87CiAKKy8q CisgKiBCVFNjYW5PcGFxdWVEYXRhIGlzIHRoZSBidHJlZS1wcml2YXRlIHN0YXRlIG5lZWRlZCBm b3IgYW4gaW5kZXhzY2FuLgorICogVGhpcyBjb25zaXN0cyBvZiBwcmVwcm9jZXNzZWQgc2NhbiBr ZXlzIChzZWUgX2J0X3ByZXByb2Nlc3Nfa2V5cygpIGZvcgorICogZGV0YWlscyBvZiB0aGUgcHJl cHJvY2Vzc2luZyksIGFuZCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY3VycmVudCBhcnJheQorICog a2V5cy4gIFRoZXJlIGFyZSBhc3N1bXB0aW9ucyBhYm91dCBob3cgdGhlIGN1cnJlbnQgYXJyYXkg a2V5cyB0cmFjayB0aGUKKyAqIHByb2dyZXNzIG9mIHRoZSBpbmRleCBzY2FuIHRocm91Z2ggdGhl IGluZGV4J3Mga2V5IHNwYWNlIChzZWUgX2J0X3JlYWRwYWdlCisgKiBhbmQgX2J0X2FkdmFuY2Vf YXJyYXlfa2V5cyksIGJ1dCB3ZSBkb24ndCBhY3R1YWxseSB0cmFjayBhbnl0aGluZyBhYm91dCB0 aGUKKyAqIGN1cnJlbnQgc2NhbiBwb3NpdGlvbiBpbiB0aGlzIG9wYXF1ZSBzdHJ1Y3QuICBUaGF0 IGlzIHRyYWNrZWQgZXh0ZXJuYWxseSwKKyAqIGJ5IGltcGxlbWVudGluZyBhIHJpbmcgYnVmZmVy IG9mICJiYXRjaGVzIiwgd2hlcmUgZWFjaCBiYXRjaCByZXByZXNlbnRzIHRoZQorICogaXRlbXMg cmV0dXJuZWQgYnkgYnRnZXRiYXRjaCB3aXRoaW4gYSBzaW5nbGUgbGVhZiBwYWdlLgorICoKKyAq IEluZGV4IHNjYW5zIHdvcmsgYSBwYWdlIGF0IGEgdGltZSwgYXMgcmVxdWlyZWQgYnkgdGhlIGFt Z2V0YmF0Y2ggY29udHJhY3Q6CisgKiB3ZSBwaW4gYW5kIHJlYWQtbG9jayB0aGUgcGFnZSwgaWRl bnRpZnkgYWxsIHRoZSBtYXRjaGluZyBpdGVtcyBvbiB0aGUgcGFnZQorICogYW5kIHJldHVybiB0 aGVtIGluIGEgbmV3bHkgYWxsb2NhdGVkIGJhdGNoLiAgV2UgdGhlbiByZWxlYXNlIHRoZSByZWFk LWxvY2sKKyAqIHVzaW5nIGFtZ2V0YmF0Y2ggdXRpbGl0eSByb3V0aW5lcy4gIFRoaXMgYXBwcm9h Y2ggbWluaW1pemVzIGxvY2svdW5sb2NrCisgKiB0cmFmZmljLiBfYnRfbmV4dCBpcyBwYXNzZWQg cHJpb3JiYXRjaCwgd2hpY2ggY29udGFpbnMgZGV0YWlscyBvZiB3aGljaAorICogcGFnZSBpcyBu ZXh0IGluIGxpbmUgdG8gYmUgcmVhZCAocHJpb3JiYXRjaCBpcyBwcm92aWRlZCBhcyBhbiBhcmd1 bWVudCB0bworICogYnRnZXRiYXRjaCBieSBjb3JlIGNvZGUpLgorICoKKyAqIElmIHdlIGFyZSBk b2luZyBhbiBpbmRleC1vbmx5IHNjYW4sIHdlIHNhdmUgdGhlIGVudGlyZSBJbmRleFR1cGxlIGZv ciBlYWNoCisgKiBtYXRjaGVkIGl0ZW0sIG90aGVyd2lzZSBvbmx5IGl0cyBoZWFwIFRJRCBhbmQg b2Zmc2V0LiAgVGhpcyBpcyBhbHNvIHBlciB0aGUKKyAqIGFtZ2V0YmF0Y2ggY29udHJhY3QuICBQ b3N0aW5nIGxpc3QgdHVwbGVzIHN0b3JlIGEgImJhc2UiIHR1cGxlIG9uY2UsCisgKiBhbGxvd2lu ZyB0aGUgc2FtZSBrZXkgdG8gYmUgcmV0dXJuZWQgZm9yIGVhY2ggVElEIGluIHRoZSBwb3N0aW5n IGxpc3QuCisgKi8KIHR5cGVkZWYgc3RydWN0IEJUU2Nhbk9wYXF1ZURhdGEKIHsKIAkvKiB0aGVz ZSBmaWVsZHMgYXJlIHNldCBieSBfYnRfcHJlcHJvY2Vzc19rZXlzKCk6ICovCkBAIC0xMDY2LDMy ICs5ODQsNiBAQCB0eXBlZGVmIHN0cnVjdCBCVFNjYW5PcGFxdWVEYXRhCiAJQlRBcnJheUtleUlu Zm8gKmFycmF5S2V5czsJLyogaW5mbyBhYm91dCBlYWNoIGVxdWFsaXR5LXR5cGUgYXJyYXkga2V5 ICovCiAJRm1nckluZm8gICAqb3JkZXJQcm9jczsJCS8qIE9SREVSIHByb2NzIGZvciByZXF1aXJl ZCBlcXVhbGl0eSBrZXlzICovCiAJTWVtb3J5Q29udGV4dCBhcnJheUNvbnRleHQ7IC8qIHNjYW4t bGlmZXNwYW4gY29udGV4dCBmb3IgYXJyYXkgZGF0YSAqLwotCi0JLyogaW5mbyBhYm91dCBraWxs ZWQgaXRlbXMgaWYgYW55IChraWxsZWRJdGVtcyBpcyBOVUxMIGlmIG5ldmVyIHVzZWQpICovCi0J aW50CQkgICAqa2lsbGVkSXRlbXM7CS8qIGN1cnJQb3MuaXRlbXMgaW5kZXhlcyBvZiBraWxsZWQg aXRlbXMgKi8KLQlpbnQJCQludW1LaWxsZWQ7CQkvKiBudW1iZXIgb2YgY3VycmVudGx5IHN0b3Jl ZCBpdGVtcyAqLwotCWJvb2wJCWRyb3BQaW47CQkvKiBkcm9wIGxlYWYgcGluIGJlZm9yZSBidGdl dHR1cGxlIHJldHVybnM/ICovCi0KLQkvKgotCSAqIElmIHdlIGFyZSBkb2luZyBhbiBpbmRleC1v bmx5IHNjYW4sIHRoZXNlIGFyZSB0aGUgdHVwbGUgc3RvcmFnZQotCSAqIHdvcmtzcGFjZXMgZm9y IHRoZSBjdXJyUG9zIGFuZCBtYXJrUG9zIHJlc3BlY3RpdmVseS4gIEVhY2ggaXMgb2Ygc2l6ZQot CSAqIEJMQ0tTWiwgc28gaXQgY2FuIGhvbGQgYXMgbXVjaCBhcyBhIGZ1bGwgcGFnZSdzIHdvcnRo IG9mIHR1cGxlcy4KLQkgKi8KLQljaGFyCSAgICpjdXJyVHVwbGVzOwkJLyogdHVwbGUgc3RvcmFn ZSBmb3IgY3VyclBvcyAqLwotCWNoYXIJICAgKm1hcmtUdXBsZXM7CQkvKiB0dXBsZSBzdG9yYWdl IGZvciBtYXJrUG9zICovCi0KLQkvKgotCSAqIElmIHRoZSBtYXJrZWQgcG9zaXRpb24gaXMgb24g dGhlIHNhbWUgcGFnZSBhcyBjdXJyZW50IHBvc2l0aW9uLCB3ZQotCSAqIGRvbid0IHVzZSBtYXJr UG9zLCBidXQganVzdCBrZWVwIHRoZSBtYXJrZWQgaXRlbUluZGV4IGluIG1hcmtJdGVtSW5kZXgK LQkgKiAoYWxsIHRoZSByZXN0IG9mIGN1cnJQb3MgaXMgdmFsaWQgZm9yIHRoZSBtYXJrIHBvc2l0 aW9uKS4gSGVuY2UsIHRvCi0JICogZGV0ZXJtaW5lIGlmIHRoZXJlIGlzIGEgbWFyaywgZmlyc3Qg bG9vayBhdCBtYXJrSXRlbUluZGV4LCB0aGVuIGF0Ci0JICogbWFya1Bvcy4KLQkgKi8KLQlpbnQJ CQltYXJrSXRlbUluZGV4OwkvKiBpdGVtSW5kZXgsIG9yIC0xIGlmIG5vdCB2YWxpZCAqLwotCi0J Lyoga2VlcCB0aGVzZSBsYXN0IGluIHN0cnVjdCBmb3IgZWZmaWNpZW5jeSAqLwotCUJUU2NhblBv c0RhdGEgY3VyclBvczsJCS8qIGN1cnJlbnQgcG9zaXRpb24gZGF0YSAqLwotCUJUU2NhblBvc0Rh dGEgbWFya1BvczsJCS8qIG1hcmtlZCBwb3NpdGlvbiwgaWYgYW55ICovCiB9IEJUU2Nhbk9wYXF1 ZURhdGE7CiAKIHR5cGVkZWYgQlRTY2FuT3BhcXVlRGF0YSAqQlRTY2FuT3BhcXVlOwpAQCAtMTE2 MCwxNCArMTA1MiwxNiBAQCBleHRlcm4gYm9vbCBidGluc2VydChSZWxhdGlvbiByZWwsIERhdHVt ICp2YWx1ZXMsIGJvb2wgKmlzbnVsbCwKIGV4dGVybiBJbmRleFNjYW5EZXNjIGJ0YmVnaW5zY2Fu KFJlbGF0aW9uIHJlbCwgaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzKTsKIGV4dGVybiBTaXplIGJ0 ZXN0aW1hdGVwYXJhbGxlbHNjYW4oUmVsYXRpb24gcmVsLCBpbnQgbmtleXMsIGludCBub3JkZXJi eXMpOwogZXh0ZXJuIHZvaWQgYnRpbml0cGFyYWxsZWxzY2FuKHZvaWQgKnRhcmdldCk7Ci1leHRl cm4gYm9vbCBidGdldHR1cGxlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIp OworZXh0ZXJuIEluZGV4U2NhbkJhdGNoIGJ0Z2V0YmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLAor CQkJCQkJCQkgSW5kZXhTY2FuQmF0Y2ggcHJpb3JiYXRjaCwKKwkJCQkJCQkJIFNjYW5EaXJlY3Rp b24gZGlyKTsKIGV4dGVybiBpbnQ2NCBidGdldGJpdG1hcChJbmRleFNjYW5EZXNjIHNjYW4sIFRJ REJpdG1hcCAqdGJtKTsKIGV4dGVybiB2b2lkIGJ0cmVzY2FuKEluZGV4U2NhbkRlc2Mgc2Nhbiwg U2NhbktleSBzY2Fua2V5LCBpbnQgbnNjYW5rZXlzLAogCQkJCQkgU2NhbktleSBvcmRlcmJ5cywg aW50IG5vcmRlcmJ5cyk7CitleHRlcm4gdm9pZCBidGZyZWViYXRjaChJbmRleFNjYW5EZXNjIHNj YW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKIGV4dGVybiB2b2lkIGJ0cGFyYWxsZWxyZXNjYW4o SW5kZXhTY2FuRGVzYyBzY2FuKTsKIGV4dGVybiB2b2lkIGJ0ZW5kc2NhbihJbmRleFNjYW5EZXNj IHNjYW4pOwotZXh0ZXJuIHZvaWQgYnRtYXJrcG9zKEluZGV4U2NhbkRlc2Mgc2Nhbik7Ci1leHRl cm4gdm9pZCBidHJlc3RycG9zKEluZGV4U2NhbkRlc2Mgc2Nhbik7CitleHRlcm4gdm9pZCBidHBv c3Jlc2V0KEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpOwogZXh0ZXJu IEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAqYnRidWxrZGVsZXRlKEluZGV4VmFjdXVtSW5mbyAqaW5m bywKIAkJCQkJCQkJCQkgICBJbmRleEJ1bGtEZWxldGVSZXN1bHQgKnN0YXRzLAogCQkJCQkJCQkJ CSAgIEluZGV4QnVsa0RlbGV0ZUNhbGxiYWNrIGNhbGxiYWNrLApAQCAtMTI3MSw4ICsxMTY1LDkg QEAgZXh0ZXJuIHZvaWQgX2J0X3ByZXByb2Nlc3Nfa2V5cyhJbmRleFNjYW5EZXNjIHNjYW4pOwog LyoKICAqIHByb3RvdHlwZXMgZm9yIGZ1bmN0aW9ucyBpbiBuYnRyZWFkcGFnZS5jCiAgKi8KLWV4 dGVybiBib29sIF9idF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24g ZGlyLAotCQkJCQkJIE9mZnNldE51bWJlciBvZmZudW0sIGJvb2wgZmlyc3RwYWdlKTsKK2V4dGVy biBib29sIF9idF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIG5l d2JhdGNoLAorCQkJCQkJIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtLAor CQkJCQkJIGJvb2wgZmlyc3RwYWdlKTsKIGV4dGVybiB2b2lkIF9idF9zdGFydF9hcnJheV9rZXlz KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpOwogZXh0ZXJuIGludAlfYnRf Ymluc3JjaF9hcnJheV9za2V5KEZtZ3JJbmZvICpvcmRlcnByb2MsCiAJCQkJCQkJCSAgIGJvb2wg Y3VyX2VsZW1fdHJpZywgU2NhbkRpcmVjdGlvbiBkaXIsCkBAIC0xMjg3LDggKzExODIsOSBAQCBl eHRlcm4gQlRTdGFjayBfYnRfc2VhcmNoKFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcHJlbCwg QlRTY2FuSW5zZXJ0IGtleSwKIAkJCQkJCSAgQnVmZmVyICpidWZQLCBpbnQgYWNjZXNzKTsKIGV4 dGVybiBPZmZzZXROdW1iZXIgX2J0X2JpbnNyY2hfaW5zZXJ0KFJlbGF0aW9uIHJlbCwgQlRJbnNl cnRTdGF0ZSBpbnNlcnRzdGF0ZSk7CiBleHRlcm4gaW50MzIgX2J0X2NvbXBhcmUoUmVsYXRpb24g cmVsLCBCVFNjYW5JbnNlcnQga2V5LCBQYWdlIHBhZ2UsIE9mZnNldE51bWJlciBvZmZudW0pOwot ZXh0ZXJuIGJvb2wgX2J0X2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBk aXIpOwotZXh0ZXJuIGJvb2wgX2J0X25leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0 aW9uIGRpcik7CitleHRlcm4gSW5kZXhTY2FuQmF0Y2ggX2J0X2ZpcnN0KEluZGV4U2NhbkRlc2Mg c2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpOworZXh0ZXJuIEluZGV4U2NhbkJhdGNoIF9idF9uZXh0 KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsCisJCQkJCQkJICAgSW5kZXhT Y2FuQmF0Y2ggcHJpb3JiYXRjaCk7CiBleHRlcm4gQnVmZmVyIF9idF9nZXRfZW5kcG9pbnQoUmVs YXRpb24gcmVsLCB1aW50MzIgbGV2ZWwsIGJvb2wgcmlnaHRtb3N0KTsKIAogLyoKQEAgLTEyOTYs NyArMTE5Miw3IEBAIGV4dGVybiBCdWZmZXIgX2J0X2dldF9lbmRwb2ludChSZWxhdGlvbiByZWws IHVpbnQzMiBsZXZlbCwgYm9vbCByaWdodG1vc3QpOwogICovCiBleHRlcm4gQlRTY2FuSW5zZXJ0 IF9idF9ta3NjYW5rZXkoUmVsYXRpb24gcmVsLCBJbmRleFR1cGxlIGl0dXApOwogZXh0ZXJuIHZv aWQgX2J0X2ZyZWVzdGFjayhCVFN0YWNrIHN0YWNrKTsKLWV4dGVybiB2b2lkIF9idF9raWxsaXRl bXMoSW5kZXhTY2FuRGVzYyBzY2FuKTsKK2V4dGVybiB2b2lkIF9idF9raWxsaXRlbXMoSW5kZXhT Y2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCk7CiBleHRlcm4gQlRDeWNsZUlkIF9i dF92YWN1dW1fY3ljbGVpZChSZWxhdGlvbiByZWwpOwogZXh0ZXJuIEJUQ3ljbGVJZCBfYnRfc3Rh cnRfdmFjdXVtKFJlbGF0aW9uIHJlbCk7CiBleHRlcm4gdm9pZCBfYnRfZW5kX3ZhY3V1bShSZWxh dGlvbiByZWwpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaCBiL3Ny Yy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmgKaW5kZXggY2UzNDBjMDc2Li41OWMzMzk3OWUgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmgKKysrIGIvc3JjL2luY2x1ZGUv YWNjZXNzL3JlbHNjYW4uaApAQCAtMTYsOCArMTYsMTAgQEAKIAogI2luY2x1ZGUgImFjY2Vzcy9o dHVwX2RldGFpbHMuaCIKICNpbmNsdWRlICJhY2Nlc3MvaXR1cC5oIgorI2luY2x1ZGUgImFjY2Vz cy9zZGlyLmgiCiAjaW5jbHVkZSAibm9kZXMvdGlkYml0bWFwLmgiCiAjaW5jbHVkZSAicG9ydC9h dG9taWNzLmgiCisjaW5jbHVkZSAic3RvcmFnZS9idWYuaCIKICNpbmNsdWRlICJzdG9yYWdlL3Jl bGZpbGVsb2NhdG9yLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9zcGluLmgiCiAjaW5jbHVkZSAidXRp bHMvcmVsY2FjaGUuaCIKQEAgLTEyNCw2ICsxMjYsMTY1IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4 RmV0Y2hUYWJsZURhdGEKIAlSZWxhdGlvbglyZWw7CiB9IEluZGV4RmV0Y2hUYWJsZURhdGE7CiAK Ky8qCisgKiBMb2NhdGlvbiBvZiBhIEJhdGNoTWF0Y2hpbmdJdGVtIHRoYXQgYXBwZWFycyBpbiBh IEluZGV4U2NhbkJhdGNoIHJldHVybmVkCisgKiBieSAoYW5kIHN1YnNlcXVlbnRseSBwYXNzZWQg dG8pIGFuIGFtZ2V0YmF0Y2ggcm91dGluZQorICovCit0eXBlZGVmIHN0cnVjdCBCYXRjaFJpbmdJ dGVtUG9zCit7CisJLyogUG9zaXRpb24gcmVmZXJlbmNlcyBhIHZhbGlkIEJhdGNoUmluZ0J1ZmZl ci5iYXRjaGVzW10gZW50cnk/ICovCisJYm9vbAkJdmFsaWQ7CisKKwkvKiBCYXRjaFJpbmdCdWZm ZXIuYmF0Y2hlc1tdLXdpc2UgaW5kZXggdG8gcmVsZXZhbnQgSW5kZXhTY2FuQmF0Y2ggKi8KKwl1 aW50OAkJYmF0Y2g7CisKKwkvKiBJbmRleFNjYW5CYXRjaC5pdGVtc1tdLXdpc2UgaW5kZXggdG8g cmVsZXZhbnQgQmF0Y2hNYXRjaGluZ0l0ZW0gKi8KKwlpbnQJCQlpdGVtOworCit9IEJhdGNoUmlu Z0l0ZW1Qb3M7CisKKy8qCisgKiBNYXRjaGluZyBpdGVtIHJldHVybmVkIGJ5IGFtZ2V0YmF0Y2gg KGluIHJldHVybmVkIEluZGV4U2NhbkJhdGNoKSBkdXJpbmcgYW4KKyAqIGluZGV4IHNjYW4uICBV c2VkIGJ5IHRhYmxlIEFNIHRvIGxvY2F0ZSByZWxldmFudCBtYXRjaGluZyB0YWJsZSB0dXBsZS4K KyAqLwordHlwZWRlZiBzdHJ1Y3QgQmF0Y2hNYXRjaGluZ0l0ZW0KK3sKKwlJdGVtUG9pbnRlckRh dGEgaGVhcFRpZDsJLyogVElEIG9mIHJlZmVyZW5jZWQgaGVhcCBpdGVtICovCisJT2Zmc2V0TnVt YmVyIGluZGV4T2Zmc2V0OwkvKiBpbmRleCBpdGVtJ3MgbG9jYXRpb24gd2l0aGluIHBhZ2UgKi8K KwlMb2NhdGlvbkluZGV4IHR1cGxlT2Zmc2V0OwkvKiBJbmRleFR1cGxlJ3Mgb2Zmc2V0IGluIHdv cmtzcGFjZSwgaWYgYW55ICovCisJYm9vbAkJY2hlY2tlZFZpc2libGU7IC8qIGNoZWNrZWQgaGVh cFRpZCB0YWJsZSBibG9jaydzIHZpc2liaWxpdHk/ICovCisJYm9vbAkJYWxsVmlzaWJsZTsJCS8q IHRhYmxlIGJsb2NrIGlzIGtub3duIHRvIGJlIGFsbC12aXNpYmxlPyAqLworfSBCYXRjaE1hdGNo aW5nSXRlbTsKKworLyoKKyAqIERhdGEgYWJvdXQgb25lIGJhdGNoIG9mIGl0ZW1zIHJldHVybmVk IGJ5IChhbmQgcGFzc2VkIHRvKSBhbWdldGJhdGNoIGR1cmluZworICogaW5kZXggc2NhbnMKKyAq LwordHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuQmF0Y2hEYXRhCit7CisJLyoKKwkgKiBJbmZvcm1h dGlvbiBvdXRwdXQgYnkgYW1nZXRiYXRjaCBpbmRleCBBTXMgdXBvbiByZXR1cm5pbmcgYSBiYXRj aCB3aXRoCisJICogb25lIG9yIG1vcmUgbWF0Y2hpbmcgaXRlbXMsIGRlc2NyaWJpbmcgZGV0YWls cyBvZiB0aGUgaW5kZXggcGFnZSB3aGVyZQorCSAqIG1hdGNoZXMgd2VyZSBsb2NhdGVkLgorCSAq CisJICogVXNlZCBpbiB0aGUgbmV4dCBhbWdldGJhdGNoIGNhbGwgdG8gZGV0ZXJtaW5lIHdoaWNo IGluZGV4IHBhZ2UgdG8gcmVhZAorCSAqIG5leHQgKG9yIHRvIGRldGVybWluZSBpZiB0aGVyZSdz IG5vIGZ1cnRoZXIgbWF0Y2hlcyBpbiBjdXJyZW50IHNjYW4KKwkgKiBkaXJlY3Rpb24pLgorCSAq LworCUJsb2NrTnVtYmVyIGN1cnJQYWdlOwkJLyogSW5kZXggcGFnZSB3aXRoIG1hdGNoaW5nIGl0 ZW1zICovCisJQmxvY2tOdW1iZXIgcHJldlBhZ2U7CQkvKiBjdXJyUGFnZSdzIGxlZnQgbGluayAq LworCUJsb2NrTnVtYmVyIG5leHRQYWdlOwkJLyogY3VyclBhZ2UncyByaWdodCBsaW5rICovCisK KwlCdWZmZXIJCWJ1ZjsJCQkvKiBjdXJyUGFnZSBidWYgKGludmFsaWQgbWVhbnMgdW5waW5uZWQp ICovCisJWExvZ1JlY1B0cglsc247CQkJLyogY3VyclBhZ2UncyBMU04gKi8KKworCS8qIHNjYW4g ZGlyZWN0aW9uIHdoZW4gdGhlIGluZGV4IHBhZ2Ugd2FzIHJlYWQgKi8KKwlTY2FuRGlyZWN0aW9u IGRpcjsKKworCS8qCisJICoga25vd25FbmRMZWZ0IGFuZCBrbm93bkVuZFJpZ2h0IGFyZSB1c2Vk IGJ5IHRhYmxlIEFNcyB0byB0cmFjayB3aGV0aGVyCisJICogdGhlcmUgbWF5IGJlIG1hdGNoaW5n IGluZGV4IGVudHJpZXMgdG8gdGhlIGxlZnQgYW5kIHJpZ2h0IGN1cnJQYWdlLAorCSAqIHJlc3Bl Y3RpdmVseS4gIFRoaXMgaGVscHMgdGhlbSB0byBhdm9pZCByZXBlYXRlZGx5IGNhbGxpbmcgYW1n ZXRiYXRjaC4KKwkgKi8KKwlib29sCQlrbm93bkVuZExlZnQ7CisJYm9vbAkJa25vd25FbmRSaWdo dDsKKworCS8qCisJICogbW9yZUxlZnQgYW5kIG1vcmVSaWdodCBhcmUgdXNlZCBieSBpbmRleCBB TXMgdG8gdHJhY2sgd2hldGhlciB0aGVyZSBtYXkKKwkgKiBiZSBtYXRjaGluZyBpbmRleCBlbnRy aWVzIHRvIHRoZSBsZWZ0IGFuZCByaWdodCBjdXJyUGFnZSwgcmVzcGVjdGl2ZWx5LgorCSAqCisJ ICogTm90ZTogdGhlIGV4YWN0IGludGVycHJldGF0aW9uIG9mIHRoZXNlIGZpZWxkcyB2YXJpZXMg YWNyb3NzIGluZGV4IEFNcy4KKwkgKiBUYWJsZSBBTXMgbXVzdCBub3QgcmVseSBvbiB0aGVtIGRp cmVjdGx5OyB0aGV5IG11c3QgYWx3YXlzIGNhbGwgaW5kZXgKKwkgKiBBTSdzIGFtZ2V0YmF0Y2gg cm91dGluZSB0byBkZXRlcm1pbmUgaWYgdGhlcmUncyBubyBtb3JlIGJhdGNoZXMgaW4gdGhlCisJ ICogY3VycmVudCBzY2FuIGRpcmVjdGlvbi4KKwkgKi8KKwlib29sCQltb3JlTGVmdDsKKwlib29s CQltb3JlUmlnaHQ7CisKKwkvKgorCSAqIE1hdGNoaW5nIGl0ZW1zIHN0YXRlIGZvciB0aGlzIGJh dGNoLiAgT3V0cHV0IGJ5IGluZGV4IEFNIGZvciB0YWJsZSBBTS4KKwkgKgorCSAqIFRoZSBpdGVt cyBhcnJheSBpcyBhbHdheXMgb3JkZXJlZCBpbiBpbmRleCBvcmRlciAoaWUsIGluY3JlYXNpbmcK KwkgKiBpbmRleG9mZnNldCkuICBXaGVuIHNjYW5uaW5nIGJhY2t3YXJkcyBpdCBpcyBjb252ZW5p ZW50IGZvciBpbmRleCBBTXMKKwkgKiB0byBmaWxsIHRoZSBhcnJheSBiYWNrLXRvLWZyb250LCBz byB3ZSBzdGFydCBhdCB0aGUgbGFzdCBzbG90IGFuZCBmaWxsCisJICogZG93bndhcmRzLiAgSGVu Y2UgdGhleSBuZWVkIGEgZmlyc3QtdmFsaWQtZW50cnkgYW5kIGEgbGFzdC12YWxpZC1lbnRyeQor CSAqIGNvdW50ZXIuCisJICovCisJaW50CQkJZmlyc3RJdGVtOwkJLyogZmlyc3QgdmFsaWQgaW5k ZXggaW4gaXRlbXNbXSAqLworCWludAkJCWxhc3RJdGVtOwkJLyogbGFzdCB2YWxpZCBpbmRleCBp biBpdGVtc1tdICovCisKKwkvKiBpbmZvIGFib3V0IGtpbGxlZCBpdGVtcyBpZiBhbnkgKGtpbGxl ZEl0ZW1zIGlzIE5VTEwgaWYgbmV2ZXIgdXNlZCkgKi8KKwlpbnQJCSAgICpraWxsZWRJdGVtczsJ LyogaW5kZXhlcyBvZiBraWxsZWQgaXRlbXMgKi8KKwlpbnQJCQludW1LaWxsZWQ7CQkvKiBudW1i ZXIgb2YgY3VycmVudGx5IHN0b3JlZCBpdGVtcyAqLworCisJLyoKKwkgKiBJZiB3ZSBhcmUgZG9p bmcgYW4gaW5kZXgtb25seSBzY2FuLCB0aGVzZSBhcmUgdGhlIHR1cGxlIHN0b3JhZ2UKKwkgKiB3 b3Jrc3BhY2VzIGZvciB0aGUgbWF0Y2hpbmcgdHVwbGVzICh0dXBsZXMgcmVmZXJlbmNlZCBieSBp dGVtc1tdKS4gRWFjaAorCSAqIGlzIG9mIHNpemUgQkxDS1NaLCBzbyBpdCBjYW4gaG9sZCBhcyBt dWNoIGFzIGEgZnVsbCBwYWdlJ3Mgd29ydGggb2YKKwkgKiB0dXBsZXMuCisJICovCisJY2hhcgkg ICAqY3VyclR1cGxlczsJCS8qIHR1cGxlIHN0b3JhZ2UgZm9yIGl0ZW1zW10gKi8KKwlCYXRjaE1h dGNoaW5nSXRlbSBpdGVtc1tGTEVYSUJMRV9BUlJBWV9NRU1CRVJdOyAvKiBtYXRjaGluZyBpdGVt cyAqLworfSBJbmRleFNjYW5CYXRjaERhdGE7CisKK3R5cGVkZWYgc3RydWN0IEluZGV4U2NhbkJh dGNoRGF0YSAqSW5kZXhTY2FuQmF0Y2g7CisKKy8qCisgKiBNYXhpbXVtIG51bWJlciBvZiBiYXRj aGVzIChsZWFmIHBhZ2VzKSB3ZSBjYW4ga2VlcCBpbiBtZW1vcnkuICBXZSBuZWVkIGEKKyAqIG1p bmltdW0gb2YgdHdvLCBzaW5jZSB3ZSdsbCBvbmx5IGNvbnNpZGVyIHJlbGVhc2luZyBvbmUgYmF0 Y2ggd2hlbiBhbm90aGVyCisgKiBpcyByZWFkLgorICovCisjZGVmaW5lIElOREVYX1NDQU5fTUFY X0JBVENIRVMJCTIKKyNkZWZpbmUgSU5ERVhfU0NBTl9DQUNIRV9CQVRDSEVTCTIKKworLyoKKyAq IFN0YXRlIHVzZWQgYnkgdGFibGUgQU1zIHRvIG1hbmFnZSBhbiBpbmRleCBzY2FuIHRoYXQgdXNl cyB0aGUgYW1nZXRiYXRjaAorICogaW50ZXJmYWNlLiAgU2NhbnMgdXNlIGEgcmluZyBidWZmZXIg b2YgYmF0Y2hlcyByZXR1cm5lZCBieSBhbWdldGJhdGNoLgorICoKKyAqIEJhdGNoZXMgYXJlIGtl cHQgaW4gdGhlIG9yZGVyIHRoYXQgdGhleSB3ZXJlIHJldHVybmVkIGluIGJ5IGFtZ2V0YmF0Y2gs CisgKiBzaW5jZSB0aGF0IGlzIHRoZSBzYW1lIG9yZGVyIHRoYXQgdGFibGVfaW5kZXhfZ2V0bmV4 dF9zbG90IHdpbGwgcmV0dXJuCisgKiBtYXRjaGVzIGluLiAgSG93ZXZlciwgdGFibGUgQU1zIGFy ZSBmcmVlIHRvIGZldGNoIHRhYmxlIHR1cGxlcyBpbiB3aGF0ZXZlcgorICogb3JkZXIgaXMgbW9z dCBjb252ZW5pZW50L2VmZmljaWVudCAtLSBwcm92aWRlZCB0aGF0IHN1Y2ggcmVvcmRlcmluZyBj YW5ub3QKKyAqIGFmZmVjdCB0aGUgb3JkZXIgdGhhdCB0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Qg bGF0ZXIgcmV0dXJucyB0dXBsZXMgaW4uCisgKi8KK3R5cGVkZWYgc3RydWN0IEJhdGNoUmluZ0J1 ZmZlcgoreworCS8qIGN1cnJlbnQgcG9zaXRpb25zIGluIGJhdGNoZXNbXSBmb3Igc2NhbiAqLwor CUJhdGNoUmluZ0l0ZW1Qb3Mgc2NhblBvczsJLyogc2NhbidzIHJlYWQgcG9zaXRpb24gKi8KKwlC YXRjaFJpbmdJdGVtUG9zIG1hcmtQb3M7CS8qIG1hcmsvcmVzdG9yZSBwb3NpdGlvbiAqLworCisJ SW5kZXhTY2FuQmF0Y2ggbWFya0JhdGNoOworCisJLyoKKwkgKiBoZWFkQmF0Y2ggaXMgYW4gaW5k ZXggdG8gdGhlIGVhcmxpZXN0IHN0aWxsLXZhbGlkIGJhdGNoIGluICdiYXRjaGVzJy4KKwkgKiBJ biBwcmFjdGljZSB0aGlzIG11c3QgYmUgdGhlIHNjYW4ncyBjdXJyZW50IHNjYW5Qb3MgYmF0Y2gg KHNjYW5CYXRjaCkuCisJICovCisJdWludDgJCWhlYWRCYXRjaDsKKworCS8qCisJICogbmV4dEJh dGNoIGlzIGFuIGluZGV4IHRvIHRoZSBuZXh0IGVtcHR5IGJhdGNoIHNsb3QgaW4gJ2JhdGNoZXMn LiAgVGhpcworCSAqIGlzIG9ubHkgYWN0dWFsbHkgdXNhYmxlIHdoZW4gdGhlIHNjYW4gaXMgIWlu ZGV4X3NjYW5fYmF0Y2hfZnVsbCgpLgorCSAqLworCXVpbnQ4CQluZXh0QmF0Y2g7CisKKwlib29s CQlkb25lOworCisJLyogQXJyYXkgb2YgcG9pbnRlcnMgdG8gY2FjaGVkIHJlY3ljbGFibGUgYmF0 Y2hlcyAqLworCUluZGV4U2NhbkJhdGNoIGNhY2hlW0lOREVYX1NDQU5fQ0FDSEVfQkFUQ0hFU107 CisKKwkvKgorCSAqIEFycmF5IG9mIHBvaW50ZXJzIHRvIHJpbmcgYnVmZmVyIGJhdGNoZXMKKwkg KgorCSAqIE5vdGU6IE11c3QgYmUgYWNjZXNzZWQgdXNpbmcgdGhlIGluZGV4X3NjYW5fYmF0Y2gq IGZ1bmN0aW9ucywgd2hpY2gKKwkgKiB3aWxsIGNvcnJlY3RseSBkZWFsIHdpdGggaGVhZEJhdGNo L25leHRCYXRjaCBvdmVyZmxvdy4KKwkgKi8KKwlJbmRleFNjYW5CYXRjaCBiYXRjaGVzW0lOREVY X1NDQU5fTUFYX0JBVENIRVNdOworCisJLyogbnVtYmVyIG9mIGl0ZW1zIHRvIHJlc29sdmUgZHVy aW5nIHZpc2liaWxpdHkgY2hlY2tzICovCisJaW50CQkJdm1JdGVtczsKKworfSBCYXRjaFJpbmdC dWZmZXI7CisKIHN0cnVjdCBJbmRleFNjYW5JbnN0cnVtZW50YXRpb247CiAKIC8qCkBAIC0xNDEs NiArMzAyLDE1IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4U2NhbkRlc2NEYXRhCiAJaW50CQkJbnVt YmVyT2ZPcmRlckJ5czsJLyogbnVtYmVyIG9mIG9yZGVyaW5nIG9wZXJhdG9ycyAqLwogCXN0cnVj dCBTY2FuS2V5RGF0YSAqa2V5RGF0YTsJLyogYXJyYXkgb2YgaW5kZXggcXVhbGlmaWVyIGRlc2Ny aXB0b3JzICovCiAJc3RydWN0IFNjYW5LZXlEYXRhICpvcmRlckJ5RGF0YTsJLyogYXJyYXkgb2Yg b3JkZXJpbmcgb3AgZGVzY3JpcHRvcnMgKi8KKworCS8qIGluZGV4IGFjY2VzcyBtZXRob2QncyBw cml2YXRlIHN0YXRlICovCisJdm9pZAkgICAqb3BhcXVlOwkJCS8qIGFjY2Vzcy1tZXRob2Qtc3Bl Y2lmaWMgaW5mbyAqLworCisJLyogdGFibGUgYWNjZXNzIG1ldGhvZCdzIHByaXZhdGUgYW1nZXRi YXRjaCBzdGF0ZSAqLworCUJhdGNoUmluZ0J1ZmZlciBiYXRjaHJpbmdidWY7CS8qIGFtZ2V0YmF0 Y2ggcmVsYXRlZCBzdGF0ZSAqLworCisJYm9vbAkJdXNlYmF0Y2hyaW5nOwkvKiBzY2FuIHVzZXMg YW1nZXRiYXRjaC9iYXRjaHJpbmdidWY/ICovCisKIAlib29sCQl4c193YW50X2l0dXA7CS8qIGNh bGxlciByZXF1ZXN0cyBpbmRleCB0dXBsZXMgKi8KIAlib29sCQl4c190ZW1wX3NuYXA7CS8qIHVu cmVnaXN0ZXIgc25hcHNob3QgYXQgc2NhbiBlbmQ/ICovCiAKQEAgLTE0OSw5ICszMTksOCBAQCB0 eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5EZXNjRGF0YQogCWJvb2wJCWlnbm9yZV9raWxsZWRfdHVw bGVzOwkvKiBkbyBub3QgcmV0dXJuIGtpbGxlZCBlbnRyaWVzICovCiAJYm9vbAkJeGFjdFN0YXJ0 ZWRJblJlY292ZXJ5OwkvKiBwcmV2ZW50cyBraWxsaW5nL3NlZWluZyBraWxsZWQKIAkJCQkJCQkJ CQkgKiB0dXBsZXMgKi8KLQotCS8qIGluZGV4IGFjY2VzcyBtZXRob2QncyBwcml2YXRlIHN0YXRl ICovCi0Jdm9pZAkgICAqb3BhcXVlOwkJCS8qIGFjY2Vzcy1tZXRob2Qtc3BlY2lmaWMgaW5mbyAq LworCS8qIHhzX3NuYXBzaG90IHVzZXMgYW4gTVZDQyBzbmFwc2hvdD8gKi8KKwlib29sCQlNVkND U2NhbjsKIAogCS8qCiAJICogSW5zdHJ1bWVudGF0aW9uIGNvdW50ZXJzIG1haW50YWluZWQgYnkg YWxsIGluZGV4IEFNcyBkdXJpbmcgYm90aApAQCAtMTYwLDEwICszMjksMTAgQEAgdHlwZWRlZiBz dHJ1Y3QgSW5kZXhTY2FuRGVzY0RhdGEKIAlzdHJ1Y3QgSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9u ICppbnN0cnVtZW50OwogCiAJLyoKLQkgKiBJbiBhbiBpbmRleC1vbmx5IHNjYW4sIGEgc3VjY2Vz c2Z1bCBhbWdldHR1cGxlIGNhbGwgbXVzdCBmaWxsIGVpdGhlcgotCSAqIHhzX2l0dXAgKGFuZCB4 c19pdHVwZGVzYykgb3IgeHNfaGl0dXAgKGFuZCB4c19oaXR1cGRlc2MpIHRvIHByb3ZpZGUgdGhl Ci0JICogZGF0YSByZXR1cm5lZCBieSB0aGUgc2Nhbi4gIEl0IGNhbiBmaWxsIGJvdGgsIGluIHdo aWNoIGNhc2UgdGhlIGhlYXAKLQkgKiBmb3JtYXQgd2lsbCBiZSB1c2VkLgorCSAqIEluIGFuIGlu ZGV4LW9ubHkgc2NhbiwgYSBzdWNjZXNzZnVsIHRhYmxlX2luZGV4X2dldG5leHRfc2xvdCBjYWxs IG11c3QKKwkgKiBmaWxsIGVpdGhlciB4c19pdHVwIChhbmQgeHNfaXR1cGRlc2MpIG9yIHhzX2hp dHVwIChhbmQgeHNfaGl0dXBkZXNjKSB0bworCSAqIHByb3ZpZGUgdGhlIGRhdGEgcmV0dXJuZWQg YnkgdGhlIHNjYW4uICBJdCBjYW4gZmlsbCBib3RoLCBpbiB3aGljaCBjYXNlCisJICogdGhlIGhl YXAgZm9ybWF0IHdpbGwgYmUgdXNlZC4KIAkgKi8KIAlJbmRleFR1cGxlCXhzX2l0dXA7CQkvKiBp bmRleCB0dXBsZSByZXR1cm5lZCBieSBBTSAqLwogCXN0cnVjdCBUdXBsZURlc2NEYXRhICp4c19p dHVwZGVzYzsJLyogcm93dHlwZSBkZXNjcmlwdG9yIG9mIHhzX2l0dXAgKi8KQEAgLTE3Niw2ICsz NDUsOCBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5EZXNjRGF0YQogCUluZGV4RmV0Y2hUYWJs ZURhdGEgKnhzX2hlYXBmZXRjaDsKIAogCWJvb2wJCXhzX3JlY2hlY2s7CQkvKiBUIG1lYW5zIHNj YW4ga2V5cyBtdXN0IGJlIHJlY2hlY2tlZCAqLworCWJvb2wJCXhzX3Zpc2libGU7CQkvKiBUIG1l YW5zIHRoZSBoZWFwIHBhZ2UgaXMgYWxsLXZpc2libGUgKi8KKwl1aW50MTYJCW1heGl0ZW1zYmF0 Y2g7CS8qIHNldCBieSBhbWJlZ2luc2NhbiB3aGVuIGFtZ2V0YmF0Y2ggdXNlZCAqLwogCiAJLyoK IAkgKiBXaGVuIGZldGNoaW5nIHdpdGggYW4gb3JkZXJpbmcgb3BlcmF0b3IsIHRoZSB2YWx1ZXMg b2YgdGhlIE9SREVSIEJZCkBAIC0yMTUsNCArMzg2LDExNCBAQCB0eXBlZGVmIHN0cnVjdCBTeXNT Y2FuRGVzY0RhdGEKIAlzdHJ1Y3QgVHVwbGVUYWJsZVNsb3QgKnNsb3Q7CiB9IFN5c1NjYW5EZXNj RGF0YTsKIAorLyoKKyAqIENvdW50IGhvdyBtYW55IGJhdGNoZXMgYXJlIGN1cnJlbnRseSBsb2Fk ZWQgaW4gdGhlIHJpbmcgYnVmZmVyLgorICovCitzdGF0aWMgaW5saW5lIHVpbnQ4CitpbmRleF9z Y2FuX2JhdGNoX2NvdW50KEluZGV4U2NhbkRlc2NEYXRhICpzY2FuKQoreworCXJldHVybiAodWlu dDgpIChzY2FuLT5iYXRjaHJpbmdidWYubmV4dEJhdGNoIC0KKwkJCQkJc2Nhbi0+YmF0Y2hyaW5n YnVmLmhlYWRCYXRjaCk7Cit9CisKKy8qCisgKiBEaWQgd2UgYWxyZWFkeSBsb2FkIGJhdGNoIHdp dGggdGhlIHJlcXVlc3RlZCBpbmRleD8KKyAqLworc3RhdGljIGlubGluZSBib29sCitpbmRleF9z Y2FuX2JhdGNoX2xvYWRlZChJbmRleFNjYW5EZXNjRGF0YSAqc2NhbiwgdWludDggaWR4KQorewor CXJldHVybiAoaW50OCkgKGlkeCAtIHNjYW4tPmJhdGNocmluZ2J1Zi5oZWFkQmF0Y2gpID49IDAg JiYKKwkJKGludDgpIChpZHggLSBzY2FuLT5iYXRjaHJpbmdidWYubmV4dEJhdGNoKSA8IDA7Cit9 CisKKy8qCisgKiBIYXZlIHdlIGxvYWRlZCB0aGUgbWF4aW11bSBudW1iZXIgb2YgYmF0Y2hlcz8K KyAqLworc3RhdGljIGlubGluZSBib29sCitpbmRleF9zY2FuX2JhdGNoX2Z1bGwoSW5kZXhTY2Fu RGVzY0RhdGEgKnNjYW4pCit7CisJcmV0dXJuIGluZGV4X3NjYW5fYmF0Y2hfY291bnQoc2Nhbikg PT0gSU5ERVhfU0NBTl9NQVhfQkFUQ0hFUzsKK30KKworLyoKKyAqIFJldHVybiBiYXRjaCBmb3Ig dGhlIHByb3ZpZGVkIGluZGV4LgorICovCitzdGF0aWMgaW5saW5lIEluZGV4U2NhbkJhdGNoCitp bmRleF9zY2FuX2JhdGNoKEluZGV4U2NhbkRlc2NEYXRhICpzY2FuLCB1aW50OCBpZHgpCit7CisJ QXNzZXJ0KGluZGV4X3NjYW5fYmF0Y2hfbG9hZGVkKHNjYW4sIGlkeCkpOworCisJcmV0dXJuIHNj YW4tPmJhdGNocmluZ2J1Zi5iYXRjaGVzW2lkeCAmIChJTkRFWF9TQ0FOX01BWF9CQVRDSEVTIC0g MSldOworfQorCisvKgorICogQXBwZW5kIGdpdmVuIGJhdGNoIHRvIHNjYW4ncyBiYXRjaCByaW5n IGJ1ZmZlci4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCitpbmRleF9zY2FuX2JhdGNoX2FwcGVu ZChJbmRleFNjYW5EZXNjRGF0YSAqc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCit7CisJQmF0 Y2hSaW5nQnVmZmVyICpyaW5nYnVmID0gJnNjYW4tPmJhdGNocmluZ2J1ZjsKKwl1aW50OAkJbmV4 dEJhdGNoID0gcmluZ2J1Zi0+bmV4dEJhdGNoOworCisJcmluZ2J1Zi0+YmF0Y2hlc1tuZXh0QmF0 Y2ggJiAoSU5ERVhfU0NBTl9NQVhfQkFUQ0hFUyAtIDEpXSA9IGJhdGNoOworCXJpbmdidWYtPm5l eHRCYXRjaCsrOworfQorCisvKgorICogQWR2YW5jZSBwb3NpdGlvbiB0byBpdHMgbmV4dCBpdGVt IGluIHRoZSBiYXRjaC4KKyAqCisgKiBBZHZhbmNlIHRvIHRoZSBuZXh0IGl0ZW0gd2l0aGluIHRo ZSBwcm92aWRlZCBiYXRjaCAob3IgdG8gdGhlIHByZXZpb3VzIGl0ZW0sCisgKiB3aGVuIHNjYW5u aW5nIGJhY2t3YXJkcykuCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBwb3NpdGlvbiBjb3Vs ZCBiZSBhZHZhbmNlZC4gIFJldHVybnMgZmFsc2Ugd2hlbiB0aGVyZQorICogYXJlIG5vIG1vcmUg aXRlbXMgaW4gdGhlIGJhdGNoIGluIHRoZSBnaXZlbiBkaXJlY3Rpb24uCisgKi8KK3N0YXRpYyBp bmxpbmUgYm9vbAoraW5kZXhfc2Nhbl9wb3NfYWR2YW5jZShTY2FuRGlyZWN0aW9uIGRpcmVjdGlv biwKKwkJCQkJICAgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gsIEJhdGNoUmluZ0l0ZW1Qb3MgKnBvcykK K3sKKwlBc3NlcnQocG9zLT52YWxpZCk7CisKKwlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChk aXJlY3Rpb24pKQorCXsKKwkJaWYgKCsrcG9zLT5pdGVtID4gYmF0Y2gtPmxhc3RJdGVtKQorCQkJ cmV0dXJuIGZhbHNlOworCX0KKwllbHNlCQkJCQkJLyogU2NhbkRpcmVjdGlvbklzQmFja3dhcmQg Ki8KKwl7CisJCWlmICgtLXBvcy0+aXRlbSA8IGJhdGNoLT5maXJzdEl0ZW0pCisJCQlyZXR1cm4g ZmFsc2U7CisJfQorCisJLyogQWR2YW5jZWQgd2l0aGluIGJhdGNoICovCisJcmV0dXJuIHRydWU7 Cit9CisKKy8qCisgKiBBZHZhbmNlIGJhdGNoIHBvc2l0aW9uIHRvIHRoZSBzdGFydCBvZiBpdHMg bmV3IGJhdGNoLgorICoKKyAqIFNldHMgdGhlIGdpdmVuIHBvc2l0aW9uIHRvIHRoZSBmaXN0IGl0 ZW0gaW4gdGhlIGdpdmVuIHNjYW4gZGlyZWN0aW9uIChvciB0bworICogdGhlIGxhc3QgaXRlbSwg d2hlbiBzY2FubmluZyBiYWNrd2FyZHMpLiAgIEFsc28gYWR2YW5jZXMvaW5jcmVtZW50cyBiYXRj aAorICogb2Zmc2V0IGZyb20gcG9zaXRpb24gc3VjaCB0aGF0IGl0IHBvaW50cyB0byBuZXdCYXRj aEZvclBvcy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCitpbmRleF9zY2FuX3Bvc19uZXh0YmF0 Y2goU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJCQkgSW5kZXhTY2FuQmF0Y2ggbmV3QmF0 Y2gsIEJhdGNoUmluZ0l0ZW1Qb3MgKnBvcykKK3sKKwlBc3NlcnQobmV3QmF0Y2gtPmRpciA9PSBk aXJlY3Rpb24pOworCisJLyogSW5jcmVtZW50IGJhdGNoIChvZnRlbiB3cmFwcyB1aW50OCBiYXRj aCBmaWVsZCkgKi8KKwlpZiAocG9zLT52YWxpZCkKKwkJcG9zLT5iYXRjaCsrOworCWVsc2UKKwkJ cG9zLT5iYXRjaCA9IDA7CisKKwlwb3MtPnZhbGlkID0gdHJ1ZTsKKworCWlmIChTY2FuRGlyZWN0 aW9uSXNGb3J3YXJkKGRpcmVjdGlvbikpCisJCXBvcy0+aXRlbSA9IG5ld0JhdGNoLT5maXJzdEl0 ZW07CisJZWxzZQorCQlwb3MtPml0ZW0gPSBuZXdCYXRjaC0+bGFzdEl0ZW07Cit9CisKICNlbmRp ZgkJCQkJCQkvKiBSRUxTQ0FOX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90 YWJsZWFtLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oCmluZGV4IDcyNjBiN2IzZC4u YmJmYjk4YWMyIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oCisrKyBi L3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgKQEAgLTQzMywxMSArNDMzLDI5IEBAIHR5cGVk ZWYgc3RydWN0IFRhYmxlQW1Sb3V0aW5lCiAJICovCiAJdm9pZAkJKCppbmRleF9mZXRjaF9lbmQp IChzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAqZGF0YSk7CiAKKwkvKgorCSAqIEZldGNoIHRo ZSBuZXh0IHR1cGxlIGZyb20gYW4gaW5kZXggc2NhbiBpbnRvIHNsb3QsIHNjYW5uaW5nIGluIHRo ZQorCSAqIHNwZWNpZmllZCBkaXJlY3Rpb24sIGFuZCByZXR1cm4gdHJ1ZSBpZiBhIHR1cGxlIHdh cyBmb3VuZCwgZmFsc2UKKwkgKiBvdGhlcndpc2UuCisJICoKKwkgKiBUaGlzIGNhbGxiYWNrIGFs bG93cyB0aGUgdGFibGUgQU0gdG8gZGlyZWN0bHkgbWFuYWdlIHRoZSBzY2FuIHByb2Nlc3MsCisJ ICogaW5jbHVkaW5nIGludGVyZmFjaW5nIHdpdGggdGhlIGluZGV4IEFNLiBUaGUgY2FsbGVyIHNp bXBseSBzcGVjaWZpZXMKKwkgKiB0aGUgZGlyZWN0aW9uIG9mIHRoZSBzY2FuOyB0aGUgdGFibGUg QU0gdGFrZXMgY2FyZSBvZiByZXRyaWV2aW5nIFRJRHMKKwkgKiBmcm9tIHRoZSBpbmRleCwgcGVy Zm9ybWluZyB2aXNpYmlsaXR5IGNoZWNrcywgYW5kIHJldHVybmluZyB0dXBsZXMgaW4KKwkgKiB0 aGUgc2xvdC4KKwkgKi8KKwlib29sCQkoKmluZGV4X2dldG5leHRfc2xvdCkgKEluZGV4U2NhbkRl c2Mgc2NhbiwKKwkJCQkJCQkJCSAgIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJCQkJ ICAgVHVwbGVUYWJsZVNsb3QgKnNsb3QpOworCiAJLyoKIAkgKiBGZXRjaCB0dXBsZSBhdCBgdGlk YCBpbnRvIGBzbG90YCwgYWZ0ZXIgZG9pbmcgYSB2aXNpYmlsaXR5IHRlc3QKIAkgKiBhY2NvcmRp bmcgdG8gYHNuYXBzaG90YC4gSWYgYSB0dXBsZSB3YXMgZm91bmQgYW5kIHBhc3NlZCB0aGUgdmlz aWJpbGl0eQogCSAqIHRlc3QsIHJldHVybiB0cnVlLCBmYWxzZSBvdGhlcndpc2UuCiAJICoKKwkg KiBUaGlzIGlzIGEgbG93ZXItbGV2ZWwgY2FsbGJhY2sgdGhhdCB0YWtlcyBhIFRJRCBmcm9tIHRo ZSBjYWxsZXIuCisJICogQ2FsbGVycyBzaG91bGQgZmF2b3IgdGhlIGluZGV4X2dldG5leHRfc2xv dCBjYWxsYmFjayB3aGVuZXZlciBwb3NzaWJsZS4KKwkgKgogCSAqIE5vdGUgdGhhdCBBTXMgdGhh dCBkbyBub3QgbmVjZXNzYXJpbHkgdXBkYXRlIGluZGV4ZXMgd2hlbiBpbmRleGVkCiAJICogY29s dW1ucyBkbyBub3QgY2hhbmdlLCBuZWVkIHRvIHJldHVybiB0aGUgY3VycmVudC9jb3JyZWN0IHZl cnNpb24gb2YKIAkgKiB0aGUgdHVwbGUgdGhhdCBpcyB2aXNpYmxlIHRvIHRoZSBzbmFwc2hvdCwg ZXZlbiBpZiB0aGUgdGlkIHBvaW50cyB0byBhbgpAQCAtMTIwOCw2ICsxMjI2LDI2IEBAIHRhYmxl X2luZGV4X2ZldGNoX2VuZChzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbikKIAlzY2Fu LT5yZWwtPnJkX3RhYmxlYW0tPmluZGV4X2ZldGNoX2VuZChzY2FuKTsKIH0KIAorLyoKKyAqIEZl dGNoIHRoZSBuZXh0IHR1cGxlIGZyb20gYW4gaW5kZXggc2NhbiBpbnRvIGBzbG90YCwgc2Nhbm5p bmcgaW4gdGhlCisgKiBzcGVjaWZpZWQgZGlyZWN0aW9uLiBSZXR1cm5zIHRydWUgaWYgYSB0dXBs ZSB3YXMgZm91bmQsIGZhbHNlIG90aGVyd2lzZS4KKyAqCisgKiBUaGUgaW5kZXggc2NhbiBzaG91 bGQgaGF2ZSBiZWVuIHN0YXJ0ZWQgdmlhIHRhYmxlX2luZGV4X2ZldGNoX2JlZ2luKCkuCisgKiBD YWxsZXJzIG11c3QgY2hlY2sgc2Nhbi0+eHNfcmVjaGVjayBhbmQgcmVjaGVjayBzY2FuIGtleXMg aWYgcmVxdWlyZWQuCisgKgorICogSW5kZXgtb25seSBzY2FuIGNhbGxlcnMgKHRoYXQgcGFzcyB4 c193YW50X2l0dXA9dHJ1ZSB0byBpbmRleF9iZWdpbnNjYW4pCisgKiBjYW4gY29uc3VtZSBpbmRl eCB0dXBsZSByZXN1bHRzIGJ5IGV4YW1pbmluZyBJbmRleFNjYW5EZXNjRGF0YSBmaWVsZHMgc3Vj aAorICogYXMgeHNfaXR1cCBhbmQgeHNfaGl0dXAuICBUaGUgdGFibGUgQU0gd29uJ3QgdXN1YWxs eSBmZXRjaCBhIGhlYXAgdHVwbGUKKyAqIGludG8gdGhlIHByb3ZpZGVkIHNsb3QgaW4gdGhlIGNh c2Ugb2YgeHNfd2FudF9pdHVwPXRydWUgY2FsbGVycy4KKyAqLworc3RhdGljIGlubGluZSBib29s Cit0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3QoSW5kZXhTY2FuRGVzYyBpc2NhbiwgU2NhbkRpcmVj dGlvbiBkaXJlY3Rpb24sCisJCQkJCQkgVHVwbGVUYWJsZVNsb3QgKnNsb3QpCit7CisJcmV0dXJu IGlzY2FuLT5oZWFwUmVsYXRpb24tPnJkX3RhYmxlYW0tPmluZGV4X2dldG5leHRfc2xvdChpc2Nh biwKKwkJCQkJCQkJCQkJCQkJCSAgIGRpcmVjdGlvbiwgc2xvdCk7Cit9CisKIC8qCiAgKiBGZXRj aGVzLCBhcyBwYXJ0IG9mIGFuIGluZGV4IHNjYW4sIHR1cGxlIGF0IGB0aWRgIGludG8gYHNsb3Rg LCBhZnRlciBkb2luZwogICogYSB2aXNpYmlsaXR5IHRlc3QgYWNjb3JkaW5nIHRvIGBzbmFwc2hv dGAuIElmIGEgdHVwbGUgd2FzIGZvdW5kIGFuZCBwYXNzZWQKQEAgLTEyMzEsNiArMTI2OSw5IEBA IHRhYmxlX2luZGV4X2ZldGNoX2VuZChzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbikK ICAqIGVudHJ5IChsaWtlIGhlYXAncyBIT1QpLiBXaGVyZWFzIHRhYmxlX3R1cGxlX2ZldGNoX3Jv d192ZXJzaW9uKCkgb25seQogICogZXZhbHVhdGVzIHRoZSB0dXBsZSBleGFjdGx5IGF0IGB0aWRg LiBPdXRzaWRlIG9mIGluZGV4IGVudHJ5IC0+dGFibGUgdHVwbGUKICAqIGxvb2t1cHMsIHRhYmxl X3R1cGxlX2ZldGNoX3Jvd192ZXJzaW9uKCkgaXMgd2hhdCdzIHVzdWFsbHkgbmVlZGVkLgorICoK KyAqIFRoaXMgaXMgYSBsb3dlci1sZXZlbCBpbnRlcmZhY2UgdGhhdCB0YWtlcyBhIFRJRCBmcm9t IHRoZSBjYWxsZXIuICBDYWxsZXJzCisgKiBzaG91bGQgZmF2b3IgdGhlIHRhYmxlX2luZGV4X2dl dG5leHRfc2xvdCBpbnRlcmZhY2Ugd2hlbmV2ZXIgcG9zc2libGUuCiAgKi8KIHN0YXRpYyBpbmxp bmUgYm9vbAogdGFibGVfaW5kZXhfZmV0Y2hfdHVwbGUoc3RydWN0IEluZGV4RmV0Y2hUYWJsZURh dGEgKnNjYW4sCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9leGVjdXRvci9pbnN0cnVtZW50X25v ZGUuaCBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2luc3RydW1lbnRfbm9kZS5oCmluZGV4IDg4NDdk N2Y5NC4uYjViOGY1MDlhIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9leGVjdXRvci9pbnN0cnVt ZW50X25vZGUuaAorKysgYi9zcmMvaW5jbHVkZS9leGVjdXRvci9pbnN0cnVtZW50X25vZGUuaApA QCAtNDgsNiArNDgsMTIgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9u CiB7CiAJLyogSW5kZXggc2VhcmNoIGNvdW50IChpbmNyZW1lbnRlZCB3aXRoIHBnc3RhdF9jb3Vu dF9pbmRleF9zY2FuIGNhbGwpICovCiAJdWludDY0CQluc2VhcmNoZXM7CisKKwkvKgorCSAqIGhl YXAgYmxvY2tzIGZldGNoZWQgY291bnRzIChpbmNyZW1lbnRlZCBieSBpbmRleF9nZXRuZXh0X3Ns b3QgY2FsbHMKKwkgKiB3aXRoaW4gdGFibGUgQU1zLCB0aG91Z2ggb25seSBkdXJpbmcgaW5kZXgt b25seSBzY2FucykKKwkgKi8KKwl1aW50NjQJCW5oZWFwZmV0Y2hlczsKIH0gSW5kZXhTY2FuSW5z dHJ1bWVudGF0aW9uOwogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25v ZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaAppbmRleCBmODA1M2Q5ZTUuLjc5 M2IxYTNjNiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKKysrIGIv c3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKQEAgLTE3NTMsNyArMTc1Myw2IEBAIHR5cGVk ZWYgc3RydWN0IEluZGV4U2NhblN0YXRlCiAgKgkJSW5zdHJ1bWVudAkJICAgbG9jYWwgaW5kZXgg c2NhbiBpbnN0cnVtZW50YXRpb24KICAqCQlTaGFyZWRJbmZvCQkgICBwYXJhbGxlbCB3b3JrZXIg aW5zdHJ1bWVudGF0aW9uIChubyBsZWFkZXIgZW50cnkpCiAgKgkJVGFibGVTbG90CQkgICBzbG90 IGZvciBob2xkaW5nIHR1cGxlcyBmZXRjaGVkIGZyb20gdGhlIHRhYmxlCi0gKgkJVk1CdWZmZXIJ CSAgIGJ1ZmZlciBpbiB1c2UgZm9yIHZpc2liaWxpdHkgbWFwIHRlc3RpbmcsIGlmIGFueQogICoJ CVBzY2FuTGVuCQkgICBzaXplIG9mIHBhcmFsbGVsIGluZGV4LW9ubHkgc2NhbiBkZXNjcmlwdG9y CiAgKgkJTmFtZUNTdHJpbmdBdHROdW1zIGF0dG51bXMgb2YgbmFtZSB0eXBlZCBjb2x1bW5zIHRv IHBhZCB0byBOQU1FREFUQUxFTgogICoJCU5hbWVDU3RyaW5nQ291bnQgICBudW1iZXIgb2YgZWxl bWVudHMgaW4gdGhlIE5hbWVDU3RyaW5nQXR0TnVtcyBhcnJheQpAQCAtMTc3Niw3ICsxNzc1LDYg QEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhPbmx5U2NhblN0YXRlCiAJSW5kZXhTY2FuSW5zdHJ1bWVu dGF0aW9uIGlvc3NfSW5zdHJ1bWVudDsKIAlTaGFyZWRJbmRleFNjYW5JbnN0cnVtZW50YXRpb24g Kmlvc3NfU2hhcmVkSW5mbzsKIAlUdXBsZVRhYmxlU2xvdCAqaW9zc19UYWJsZVNsb3Q7Ci0JQnVm ZmVyCQlpb3NzX1ZNQnVmZmVyOwogCVNpemUJCWlvc3NfUHNjYW5MZW47CiAJQXR0ck51bWJlciAq aW9zc19OYW1lQ1N0cmluZ0F0dE51bXM7CiAJaW50CQkJaW9zc19OYW1lQ1N0cmluZ0NvdW50Owpk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmggYi9zcmMvaW5jbHVkZS9u b2Rlcy9wYXRobm9kZXMuaAppbmRleCBmYjgwODgyM2EuLjA3NTkzZDgwNiAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0 aG5vZGVzLmgKQEAgLTE0MTcsMTIgKzE0MTcsMTIgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhPcHRJ bmZvCiAJYm9vbAkJYW1vcHRpb25hbGtleTsKIAlib29sCQlhbXNlYXJjaGFycmF5OwogCWJvb2wJ CWFtc2VhcmNobnVsbHM7Ci0JLyogZG9lcyBBTSBoYXZlIGFtZ2V0dHVwbGUgaW50ZXJmYWNlPyAq LwotCWJvb2wJCWFtaGFzZ2V0dHVwbGU7CisJLyogZG9lcyBBTSBoYXZlIGFtZ2V0YmF0Y2ggKG9y IGdldHR1cGxlKSBpbnRlcmZhY2U/ICovCisJYm9vbAkJYW1oYXNnZXRiYXRjaDsKIAkvKiBkb2Vz IEFNIGhhdmUgYW1nZXRiaXRtYXAgaW50ZXJmYWNlPyAqLwogCWJvb2wJCWFtaGFzZ2V0Yml0bWFw OwogCWJvb2wJCWFtY2FucGFyYWxsZWw7Ci0JLyogZG9lcyBBTSBoYXZlIGFtbWFya3BvcyBpbnRl cmZhY2U/ICovCisJLyogaXMgQU0gcHJlcGFyZWQgZm9yIHVzIHRvIHJlc3RvcmUgYSBtYXJrPyAq LwogCWJvb2wJCWFtY2FubWFya3BvczsKIAkvKiBBTSdzIGNvc3QgZXN0aW1hdG9yICovCiAJLyog UmF0aGVyIHRoYW4gaW5jbHVkZSBhbWFwaS5oIGhlcmUsIHdlIGRlY2xhcmUgYW1jb3N0ZXN0aW1h dGUgbGlrZSB0aGlzICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmlu LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmluLmMKaW5kZXggNjg4N2U0MjE0Li5kNWQw MWI4NzcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW4uYworKysgYi9z cmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmluLmMKQEAgLTI5NCwxMCArMjk0LDExIEBAIGJyaW5o YW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCS5hbWJlZ2luc2NhbiA9IGJyaW5iZWdpbnNjYW4s CiAJCS5hbXJlc2NhbiA9IGJyaW5yZXNjYW4sCiAJCS5hbWdldHR1cGxlID0gTlVMTCwKKwkJLmFt Z2V0YmF0Y2ggPSBOVUxMLAorCQkuYW1mcmVlYmF0Y2ggPSBOVUxMLAogCQkuYW1nZXRiaXRtYXAg PSBicmluZ2V0Yml0bWFwLAogCQkuYW1lbmRzY2FuID0gYnJpbmVuZHNjYW4sCi0JCS5hbW1hcmtw b3MgPSBOVUxMLAotCQkuYW1yZXN0cnBvcyA9IE5VTEwsCisJCS5hbXBvc3Jlc2V0ID0gTlVMTCwK IAkJLmFtZXN0aW1hdGVwYXJhbGxlbHNjYW4gPSBOVUxMLAogCQkuYW1pbml0cGFyYWxsZWxzY2Fu ID0gTlVMTCwKIAkJLmFtcGFyYWxsZWxyZXNjYW4gPSBOVUxMLApkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL2dpbi9naW5nZXQuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2luZ2V0 LmMKaW5kZXggNmIxNDhlNjlhLi44ZjcwMzNkNjIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9naW4vZ2luZ2V0LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW5nZXQuYwpA QCAtMTk1Myw5ICsxOTUzLDkgQEAgZ2luZ2V0Yml0bWFwKEluZGV4U2NhbkRlc2Mgc2NhbiwgVElE Qml0bWFwICp0Ym0pCiAJICogaW50byB0aGUgbWFpbiBpbmRleCwgYW5kIHNvIHdlIG1pZ2h0IHZp c2l0IGl0IGEgc2Vjb25kIHRpbWUgZHVyaW5nIHRoZQogCSAqIG1haW4gc2Nhbi4gIFRoaXMgaXMg b2theSBiZWNhdXNlIHdlJ2xsIGp1c3QgcmUtc2V0IHRoZSBzYW1lIGJpdCBpbiB0aGUKIAkgKiBi aXRtYXAuICAoVGhlIHBvc3NpYmlsaXR5IG9mIGR1cGxpY2F0ZSB2aXNpdHMgaXMgYSBtYWpvciBy ZWFzb24gd2h5IEdJTgotCSAqIGNhbid0IHN1cHBvcnQgdGhlIGFtZ2V0dHVwbGUgQVBJLCBob3dl dmVyLikgTm90ZSB0aGF0IGl0IHdvdWxkIG5vdCBkbwotCSAqIHRvIHNjYW4gdGhlIG1haW4gaW5k ZXggYmVmb3JlIHRoZSBwZW5kaW5nIGxpc3QsIHNpbmNlIGNvbmN1cnJlbnQKLQkgKiBjbGVhbnVw IGNvdWxkIHRoZW4gbWFrZSB1cyBtaXNzIGVudHJpZXMgZW50aXJlbHkuCisJICogY2FuJ3Qgc3Vw cG9ydCBlaXRoZXIgdGhlIGFtZ2V0dHVwbGUgb3IgYW1nZXRiYXRjaCBBUEkuKSBOb3RlIHRoYXQg aXQKKwkgKiB3b3VsZCBub3QgZG8gdG8gc2NhbiB0aGUgbWFpbiBpbmRleCBiZWZvcmUgdGhlIHBl bmRpbmcgbGlzdCwgc2luY2UKKwkgKiBjb25jdXJyZW50IGNsZWFudXAgY291bGQgdGhlbiBtYWtl IHVzIG1pc3MgZW50cmllcyBlbnRpcmVseS4KIAkgKi8KIAlzY2FuUGVuZGluZ0luc2VydChzY2Fu LCB0Ym0sICZudGlkcyk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2lu dXRpbC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW51dGlsLmMKaW5kZXggZDIwNTA5M2Uy Li4xMjYzZGMxODAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2ludXRpbC5j CisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2ludXRpbC5jCkBAIC04MiwxMCArODIsMTEg QEAgZ2luaGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCQkuYW1iZWdpbnNjYW4gPSBnaW5iZWdp bnNjYW4sCiAJCS5hbXJlc2NhbiA9IGdpbnJlc2NhbiwKIAkJLmFtZ2V0dHVwbGUgPSBOVUxMLAor CQkuYW1nZXRiYXRjaCA9IE5VTEwsCisJCS5hbWZyZWViYXRjaCA9IE5VTEwsCiAJCS5hbWdldGJp dG1hcCA9IGdpbmdldGJpdG1hcCwKIAkJLmFtZW5kc2NhbiA9IGdpbmVuZHNjYW4sCi0JCS5hbW1h cmtwb3MgPSBOVUxMLAotCQkuYW1yZXN0cnBvcyA9IE5VTEwsCisJCS5hbXBvc3Jlc2V0ID0gTlVM TCwKIAkJLmFtZXN0aW1hdGVwYXJhbGxlbHNjYW4gPSBOVUxMLAogCQkuYW1pbml0cGFyYWxsZWxz Y2FuID0gTlVMTCwKIAkJLmFtcGFyYWxsZWxyZXNjYW4gPSBOVUxMLApkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lz dC5jCmluZGV4IDg1NjVlMjI1Yi4uMzc4MDRmNTRiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9h Y2Nlc3MvZ2lzdC9naXN0LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdC5jCkBA IC0xMDMsMTAgKzEwMywxMSBAQCBnaXN0aGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCQkuYW1i ZWdpbnNjYW4gPSBnaXN0YmVnaW5zY2FuLAogCQkuYW1yZXNjYW4gPSBnaXN0cmVzY2FuLAogCQku YW1nZXR0dXBsZSA9IGdpc3RnZXR0dXBsZSwKKwkJLmFtZ2V0YmF0Y2ggPSBOVUxMLAorCQkuYW1m cmVlYmF0Y2ggPSBOVUxMLAogCQkuYW1nZXRiaXRtYXAgPSBnaXN0Z2V0Yml0bWFwLAogCQkuYW1l bmRzY2FuID0gZ2lzdGVuZHNjYW4sCi0JCS5hbW1hcmtwb3MgPSBOVUxMLAotCQkuYW1yZXN0cnBv cyA9IE5VTEwsCisJCS5hbXBvc3Jlc2V0ID0gTlVMTCwKIAkJLmFtZXN0aW1hdGVwYXJhbGxlbHNj YW4gPSBOVUxMLAogCQkuYW1pbml0cGFyYWxsZWxzY2FuID0gTlVMTCwKIAkJLmFtcGFyYWxsZWxy ZXNjYW4gPSBOVUxMLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5j IGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jCmluZGV4IGU4OGRkYjMyYS4uNmEyMGI2 N2Y2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMKKysrIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jCkBAIC0xMDIsMTAgKzEwMiwxMSBAQCBoYXNoaGFu ZGxlcihQR19GVU5DVElPTl9BUkdTKQogCQkuYW1iZWdpbnNjYW4gPSBoYXNoYmVnaW5zY2FuLAog CQkuYW1yZXNjYW4gPSBoYXNocmVzY2FuLAogCQkuYW1nZXR0dXBsZSA9IGhhc2hnZXR0dXBsZSwK KwkJLmFtZ2V0YmF0Y2ggPSBOVUxMLAorCQkuYW1mcmVlYmF0Y2ggPSBOVUxMLAogCQkuYW1nZXRi aXRtYXAgPSBoYXNoZ2V0Yml0bWFwLAogCQkuYW1lbmRzY2FuID0gaGFzaGVuZHNjYW4sCi0JCS5h bW1hcmtwb3MgPSBOVUxMLAotCQkuYW1yZXN0cnBvcyA9IE5VTEwsCisJCS5hbXBvc3Jlc2V0ID0g TlVMTCwKIAkJLmFtZXN0aW1hdGVwYXJhbGxlbHNjYW4gPSBOVUxMLAogCQkuYW1pbml0cGFyYWxs ZWxzY2FuID0gTlVMTCwKIAkJLmFtcGFyYWxsZWxyZXNjYW4gPSBOVUxMLApkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKaW5kZXggY2JlZjczZTVkLi5lZjRkYjY5YjMgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKKysrIGIv c3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYwpAQCAtMTksNiArMTksNyBA QAogICovCiAjaW5jbHVkZSAicG9zdGdyZXMuaCIKIAorI2luY2x1ZGUgImFjY2Vzcy9hbWFwaS5o IgogI2luY2x1ZGUgImFjY2Vzcy9nZW5hbS5oIgogI2luY2x1ZGUgImFjY2Vzcy9oZWFwYW0uaCIK ICNpbmNsdWRlICJhY2Nlc3MvaGVhcHRvYXN0LmgiCkBAIC04MSwxMCArODIsMTIgQEAgaGVhcGFt X3Nsb3RfY2FsbGJhY2tzKFJlbGF0aW9uIHJlbGF0aW9uKQogc3RhdGljIEluZGV4RmV0Y2hUYWJs ZURhdGEgKgogaGVhcGFtX2luZGV4X2ZldGNoX2JlZ2luKFJlbGF0aW9uIHJlbCkKIHsKLQlJbmRl eEZldGNoSGVhcERhdGEgKmhzY2FuID0gcGFsbG9jMF9vYmplY3QoSW5kZXhGZXRjaEhlYXBEYXRh KTsKKwlJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuID0gcGFsbG9jX29iamVjdChJbmRleEZldGNo SGVhcERhdGEpOwogCiAJaHNjYW4tPnhzX2Jhc2UucmVsID0gcmVsOwogCWhzY2FuLT54c19jYnVm ID0gSW52YWxpZEJ1ZmZlcjsKKwloc2Nhbi0+eHNfYmxrID0gSW52YWxpZEJsb2NrTnVtYmVyOwor CWhzY2FuLT52bWJ1ZiA9IEludmFsaWRCdWZmZXI7CiAKIAlyZXR1cm4gJmhzY2FuLT54c19iYXNl OwogfQpAQCAtOTQsMTAgKzk3LDEyIEBAIGhlYXBhbV9pbmRleF9mZXRjaF9yZXNldChJbmRleEZl dGNoVGFibGVEYXRhICpzY2FuKQogewogCUluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4gPSAoSW5k ZXhGZXRjaEhlYXBEYXRhICopIHNjYW47CiAKKwkvKiBkZWxpYmVyYXRlbHkgZG9uJ3QgZHJvcCBW TSBidWZmZXIgcGluIGhlcmUgKi8KIAlpZiAoQnVmZmVySXNWYWxpZChoc2Nhbi0+eHNfY2J1Zikp CiAJewogCQlSZWxlYXNlQnVmZmVyKGhzY2FuLT54c19jYnVmKTsKIAkJaHNjYW4tPnhzX2NidWYg PSBJbnZhbGlkQnVmZmVyOworCQloc2Nhbi0+eHNfYmxrID0gSW52YWxpZEJsb2NrTnVtYmVyOwog CX0KIH0KIApAQCAtMTA4LDYgKzExMywxMiBAQCBoZWFwYW1faW5kZXhfZmV0Y2hfZW5kKEluZGV4 RmV0Y2hUYWJsZURhdGEgKnNjYW4pCiAKIAloZWFwYW1faW5kZXhfZmV0Y2hfcmVzZXQoc2Nhbik7 CiAKKwlpZiAoaHNjYW4tPnZtYnVmICE9IEludmFsaWRCdWZmZXIpCisJeworCQlSZWxlYXNlQnVm ZmVyKGhzY2FuLT52bWJ1Zik7CisJCWhzY2FuLT52bWJ1ZiA9IEludmFsaWRCdWZmZXI7CisJfQor CiAJcGZyZWUoaHNjYW4pOwogfQogCkBAIC0xMjUsMjIgKzEzNiwyNyBAQCBoZWFwYW1faW5kZXhf ZmV0Y2hfdHVwbGUoc3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4sCiAJQXNzZXJ0KFRU U19JU19CVUZGRVJUVVBMRShzbG90KSk7CiAKIAkvKiBXZSBjYW4gc2tpcCB0aGUgYnVmZmVyLXN3 aXRjaGluZyBsb2dpYyBpZiB3ZSdyZSBpbiBtaWQtSE9UIGNoYWluLiAqLwotCWlmICghKmNhbGxf YWdhaW4pCisJaWYgKGhzY2FuLT54c19ibGsgIT0gSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcih0 aWQpKQogCXsKLQkJLyogU3dpdGNoIHRvIGNvcnJlY3QgYnVmZmVyIGlmIHdlIGRvbid0IGhhdmUg aXQgYWxyZWFkeSAqLwotCQlCdWZmZXIJCXByZXZfYnVmID0gaHNjYW4tPnhzX2NidWY7CisJCUFz c2VydCghKmNhbGxfYWdhaW4pOwogCi0JCWhzY2FuLT54c19jYnVmID0gUmVsZWFzZUFuZFJlYWRC dWZmZXIoaHNjYW4tPnhzX2NidWYsCi0JCQkJCQkJCQkJCSAgaHNjYW4tPnhzX2Jhc2UucmVsLAot CQkJCQkJCQkJCQkgIEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKSk7CisJCS8qIFJlbWVt YmVyIHRoaXMgYnVmZmVyJ3MgYmxvY2sgbnVtYmVyIGZvciBuZXh0IHRpbWUgKi8KKwkJaHNjYW4t PnhzX2JsayA9IEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKTsKKworCQlpZiAoQnVmZmVy SXNWYWxpZChoc2Nhbi0+eHNfY2J1ZikpCisJCQlSZWxlYXNlQnVmZmVyKGhzY2FuLT54c19jYnVm KTsKKworCQloc2Nhbi0+eHNfY2J1ZiA9IFJlYWRCdWZmZXIoaHNjYW4tPnhzX2Jhc2UucmVsLCBo c2Nhbi0+eHNfYmxrKTsKIAogCQkvKgotCQkgKiBQcnVuZSBwYWdlLCBidXQgb25seSBpZiB3ZSB3 ZXJlbid0IGFscmVhZHkgb24gdGhpcyBwYWdlCisJCSAqIFBydW5lIHBhZ2Ugd2hlbiBpdCBpcyBw aW5uZWQgZm9yIHRoZSBmaXJzdCB0aW1lCiAJCSAqLwotCQlpZiAocHJldl9idWYgIT0gaHNjYW4t PnhzX2NidWYpCi0JCQloZWFwX3BhZ2VfcHJ1bmVfb3B0KGhzY2FuLT54c19iYXNlLnJlbCwgaHNj YW4tPnhzX2NidWYpOworCQloZWFwX3BhZ2VfcHJ1bmVfb3B0KGhzY2FuLT54c19iYXNlLnJlbCwg aHNjYW4tPnhzX2NidWYpOwogCX0KIAorCUFzc2VydChCdWZmZXJJc1ZhbGlkKGhzY2FuLT54c19j YnVmKSk7CisJQXNzZXJ0KEJ1ZmZlckdldEJsb2NrTnVtYmVyKGhzY2FuLT54c19jYnVmKSA9PSBo c2Nhbi0+eHNfYmxrKTsKKwogCS8qIE9idGFpbiBzaGFyZS1sb2NrIG9uIHRoZSBidWZmZXIgc28g d2UgY2FuIGV4YW1pbmUgdmlzaWJpbGl0eSAqLwogCUxvY2tCdWZmZXIoaHNjYW4tPnhzX2NidWYs IEJVRkZFUl9MT0NLX1NIQVJFKTsKIAlnb3RfaGVhcF90dXBsZSA9IGhlYXBfaG90X3NlYXJjaF9i dWZmZXIodGlkLApAQCAtMTczLDYgKzE4OSw1NDEgQEAgaGVhcGFtX2luZGV4X2ZldGNoX3R1cGxl KHN0cnVjdCBJbmRleEZldGNoVGFibGVEYXRhICpzY2FuLAogCXJldHVybiBnb3RfaGVhcF90dXBs ZTsKIH0KIAorLyoKKyAqIGhlYXBhbV9iYXRjaF9yZXNvbHZlX3Zpc2liaWxpdHkKKyAqCQlPYnRh aW4gdmlzaWJpbGl0eSBpbmZvcm1hdGlvbiBmb3IgYSBUSUQgZnJvbSBjYWxsZXIncyBiYXRjaC4K KyAqCisgKiBDYWxsZWQgZHVyaW5nIGluZGV4LW9ubHkgc2NhbnMuICBXZSBhbHdheXMgY2hlY2sg dGhlIHZpc2liaWxpdHkgb2YgY2FsbGVyJ3MKKyAqIGl0ZW0gKGFuIG9mZnNldCBpbnRvIGNhbGxl cidzIGJhdGNoLT5pdGVtc1tdIGFycmF5KS4gIFdlIG1pZ2h0IGFsc28gc2V0CisgKiB2aXNpYmls aXR5IGluZm8gZm9yIG90aGVyIGl0ZW1zIGZyb20gY2FsbGVyJ3MgYmF0Y2ggbW9yZSBwcm9hY3Rp dmVseSB3aGVuCisgKiB0aGF0IG1ha2VzIHNlbnNlLgorICoKKyAqIFdlIGtlZXAgdHdvIGNvbXBl dGluZyBjb25zaWRlcmF0aW9ucyBpbiBiYWxhbmNlIHdoZW4gZGV0ZXJtaW5pbmcgd2hldGhlciB0 bworICogY2hlY2sgYWRkaXRpb25hbCBpdGVtczogdGhlIG5lZWQgdG8ga2VlcCB0aGUgY29zdCBv ZiB2aXNpYmlsaXR5IG1hcCBhY2Nlc3MKKyAqIHVuZGVyIGNvbnRyb2wgd2hlbiBtb3N0IGl0ZW1z IHdpbGwgbmV2ZXIgYmUgcmV0dXJuZWQgYnkgdGhlIHNjYW4gYW55d2F5CisgKiAoaW1wb3J0YW50 IGZvciBpbm5lciBpbmRleCBzY2FucyBvZiBhbnRpLWpvaW5zIGFuZCBzZW1pLWpvaW5zKSwgYW5k IHRoZQorICogbmVlZCB0byBub3QgaG9sZCBvbnRvIGluZGV4IGxlYWYgcGFnZXMgZm9yIHRvbyBs b25nLgorICoKKyAqIE5vdGUgb24gTWVtb3J5IE9yZGVyaW5nIEVmZmVjdHMKKyAqIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiB2aXNpYmlsaXR5bWFwX2dldF9zdGF0dXMg ZG9lcyBub3QgbG9jayB0aGUgdmlzaWJpbGl0eSBtYXAgYnVmZmVyLCBhbmQKKyAqIHRoZXJlZm9y ZSB0aGUgcmVzdWx0IHdlIHJlYWQgaGVyZSBjb3VsZCBiZSBzbGlnaHRseSBzdGFsZS4gIEhvd2V2 ZXIsIGl0CisgKiBjYW4ndCBiZSBzdGFsZSBlbm91Z2ggdG8gbWF0dGVyLgorICoKKyAqIFdlIG5l ZWQgdG8gZGV0ZWN0IGNsZWFyaW5nIGEgVk0gYml0IGR1ZSB0byBhbiBpbnNlcnQgcmlnaHQgYXdh eSwgYmVjYXVzZQorICogdGhlIHR1cGxlIGlzIHByZXNlbnQgaW4gdGhlIGluZGV4IHBhZ2UgYnV0 IG5vdCB2aXNpYmxlLiAgVGhlIHJlYWRpbmcgb2YgdGhlCisgKiBUSUQgYnkgdGhpcyBzY2FuICh1 c2luZyBhIHNoYXJlZCBsb2NrIG9uIHRoZSBpbmRleCBidWZmZXIpIGlzIHNlcmlhbGl6ZWQKKyAq IHdpdGggdGhlIGluc2VydCBvZiB0aGUgVElEIGludG8gdGhlIGluZGV4ICh1c2luZyBhbiBleGNs dXNpdmUgbG9jayBvbiB0aGUKKyAqIGluZGV4IGJ1ZmZlcikuICBCZWNhdXNlIHRoZSBWTSBiaXQg aXMgY2xlYXJlZCBiZWZvcmUgdXBkYXRpbmcgdGhlIGluZGV4LAorICogYW5kIGxvY2tpbmcvdW5s b2NraW5nIG9mIHRoZSBpbmRleCBwYWdlIGFjdHMgYXMgYSBmdWxsIG1lbW9yeSBiYXJyaWVyLCB3 ZQorICogYXJlIHN1cmUgdG8gc2VlIHRoZSBjbGVhcmVkIGJpdCBpZiB3ZSBzZWUgYSByZWNlbnRs eS1pbnNlcnRlZCBUSUQuCisgKgorICogRGVsZXRlcyBkbyBub3QgdXBkYXRlIHRoZSBpbmRleCBw YWdlIChvbmx5IFZBQ1VVTSB3aWxsIGNsZWFyIG91dCB0aGUgVElEKSwKKyAqIHNvIHRoZSBjbGVh cmluZyBvZiB0aGUgVk0gYml0IGJ5IGEgZGVsZXRlIGlzIG5vdCBzZXJpYWxpemVkIHdpdGggdGhp cyB0ZXN0CisgKiBiZWxvdywgYW5kIHdlIG1heSBzZWUgYSB2YWx1ZSB0aGF0IGlzIHNpZ25pZmlj YW50bHkgc3RhbGUuICBIb3dldmVyLCB3ZQorICogZG9uJ3QgY2FyZSBhYm91dCB0aGUgZGVsZXRl IHJpZ2h0IGF3YXksIGJlY2F1c2UgdGhlIHR1cGxlIGlzIHN0aWxsIHZpc2libGUKKyAqIHVudGls IHRoZSBkZWxldGluZyB0cmFuc2FjdGlvbiBjb21taXRzIG9yIHRoZSBzdGF0ZW1lbnQgZW5kcyAo aWYgaXQncyBvdXIKKyAqIHRyYW5zYWN0aW9uKS4gIEluIGVpdGhlciBjYXNlLCB0aGUgbG9jayBv biB0aGUgVk0gYnVmZmVyIHdpbGwgaGF2ZSBiZWVuCisgKiByZWxlYXNlZCAoYWN0aW5nIGFzIGEg d3JpdGUgYmFycmllcikgYWZ0ZXIgY2xlYXJpbmcgdGhlIGJpdC4gIEFuZCBmb3IgdXMgdG8KKyAq IGhhdmUgYSBzbmFwc2hvdCB0aGF0IGluY2x1ZGVzIHRoZSBkZWxldGluZyB0cmFuc2FjdGlvbiAo bWFraW5nIHRoZSB0dXBsZQorICogaW52aXNpYmxlKSwgd2UgbXVzdCBoYXZlIGFjcXVpcmVkIFBy b2NBcnJheUxvY2sgYWZ0ZXIgdGhhdCB0aW1lLCBhY3RpbmcgYXMKKyAqIGEgcmVhZCBiYXJyaWVy LgorICoKKyAqIEl0J3Mgd29ydGggZ29pbmcgdGhyb3VnaCB0aGlzIGNvbXBsZXhpdHkgdG8gYXZv aWQgbmVlZGluZyB0byBsb2NrIHRoZSBWTQorICogYnVmZmVyLCB3aGljaCBjb3VsZCBjYXVzZSBz aWduaWZpY2FudCBjb250ZW50aW9uLgorICovCitzdGF0aWMgdm9pZAoraGVhcGFtX2JhdGNoX3Jl c29sdmVfdmlzaWJpbGl0eShJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNo LAorCQkJCQkJCQlpbnQgaXRlbSkKK3sKKwlJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuID0gKElu ZGV4RmV0Y2hIZWFwRGF0YSAqKSBzY2FuLT54c19oZWFwZmV0Y2g7CisJQmF0Y2hSaW5nQnVmZmVy ICpiYXRjaHJpbmdidWYgPSAmc2Nhbi0+YmF0Y2hyaW5nYnVmOworCWludAkJCWZpcnN0SXRlbSwK KwkJCQlsYXN0SXRlbTsKKworCS8qIERvIG5vdGhpbmcgaWYgd2UgYWxyZWFkeSByZXNvbHZlZCB2 aXNpYmlsaXR5IGZvciB0aGUgaXRlbS4gKi8KKwlpZiAoYmF0Y2gtPml0ZW1zW2l0ZW1dLmNoZWNr ZWRWaXNpYmxlKQorCQlyZXR1cm47CisKKwkvKiBXZSBiZXR0ZXIgc3RpbGwgaGF2ZSBhIHBpbiBv biBiYXRjaCdzIGluZGV4IGxlYWYgcGFnZSAqLworCUFzc2VydChCdWZmZXJJc1ZhbGlkKGJhdGNo LT5idWYpKTsKKworCS8qIERldGVybWluZSB0aGUgcmFuZ2Ugb2YgaXRlbXMgdG8gc2V0IHZpc2li aWxpdHkgZm9yLiAqLworCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGJhdGNoLT5kaXIpKQor CXsKKwkJZmlyc3RJdGVtID0gaXRlbTsKKwkJbGFzdEl0ZW0gPSBNaW4oYmF0Y2gtPmxhc3RJdGVt LCAoaXRlbSArIGJhdGNocmluZ2J1Zi0+dm1JdGVtcykgLSAxKTsKKwl9CisJZWxzZQorCXsKKwkJ Zmlyc3RJdGVtID0gTWF4KGJhdGNoLT5maXJzdEl0ZW0sIChpdGVtIC0gYmF0Y2hyaW5nYnVmLT52 bUl0ZW1zKSArIDEpOworCQlsYXN0SXRlbSA9IGl0ZW07CisJfQorCisJZm9yIChpbnQgaSA9IGZp cnN0SXRlbTsgaSA8PSBsYXN0SXRlbTsgaSsrKQorCXsKKwkJQmF0Y2hNYXRjaGluZ0l0ZW0gKm1p dGVtID0gJmJhdGNoLT5pdGVtc1tpXTsKKwkJSXRlbVBvaW50ZXIgdGlkID0gJm1pdGVtLT5oZWFw VGlkOworCisJCW1pdGVtLT5jaGVja2VkVmlzaWJsZSA9IHRydWU7CisJCW1pdGVtLT5hbGxWaXNp YmxlID0KKwkJCVZNX0FMTF9WSVNJQkxFKHNjYW4tPmhlYXBSZWxhdGlvbiwKKwkJCQkJCSAgIEl0 ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKSwKKwkJCQkJCSAgICZoc2Nhbi0+dm1idWYpICE9 IDA7CisJfQorCisJLyoKKwkgKiBJdCdzIG5vdyBzYWZlIHRvIGRyb3AgdGhlIGJhdGNoJ3MgYnVm ZmVyIHBpbiwgYXMgd2UndmUgcmVzb2x2ZWQgdGhlCisJICogdmlzaWJpbGl0eSBzdGF0dXMgb2Yg YWxsIG9mIGl0cyBpdGVtcy4KKwkgKgorCSAqIEl0J3MgZW5vdWdoIHRvIGNoZWNrIHRoZSB2aXNp YmlsaXR5IG9mIHRoZSBmaXJzdCBhbmQgbGFzdCBpdGVtLCBhcyBhbGwKKwkgKiB0aGUgaXRlbXMg aW4gYmV0d2VlbiBoYXZlIHRvIGhhdmUgdGhlIHZpc2liaWxpdHkgc2V0IHRvby4KKwkgKi8KKwlp ZiAoYmF0Y2gtPml0ZW1zW2JhdGNoLT5maXJzdEl0ZW1dLmNoZWNrZWRWaXNpYmxlICYmCisJCWJh dGNoLT5pdGVtc1tiYXRjaC0+bGFzdEl0ZW1dLmNoZWNrZWRWaXNpYmxlICYmCisJCXNjYW4tPk1W Q0NTY2FuKQorCXsKKwkJQXNzZXJ0KEJ1ZmZlcklzVmFsaWQoYmF0Y2gtPmJ1ZikpOworCisJCVJl bGVhc2VCdWZmZXIoYmF0Y2gtPmJ1Zik7CisJCWJhdGNoLT5idWYgPSBJbnZhbGlkQnVmZmVyOwor CX0KKworCS8qCisJICogTmV4dCB0aW1lIGNoZWNrIHZpc2liaWxpdHkgZm9yIHR3aWNlIGFzIG1h bnkgaXRlbXMuIEJ1dCBkb24ndCBvdmVyZmxvdworCSAqIHRoZSBudW1iZXIgb2YgaXRlbXMgaW4g dGhpcyBiYXRjaCAoYW5kIHRodXMgZG9uJ3Qgb3ZlcmZsb3cgSU5UX01BWCkuCisJICovCisJaWYg KGJhdGNocmluZ2J1Zi0+dm1JdGVtcyA8IChiYXRjaC0+bGFzdEl0ZW0gLSBiYXRjaC0+Zmlyc3RJ dGVtKSkKKwkJYmF0Y2hyaW5nYnVmLT52bUl0ZW1zICo9IDI7Cit9CisKK3N0YXRpYyBpbmxpbmUg SXRlbVBvaW50ZXIKK2hlYXBhbV9iYXRjaF9yZXR1cm5fdGlkKEluZGV4U2NhbkRlc2Mgc2Nhbiwg SW5kZXhTY2FuQmF0Y2ggc2NhbkJhdGNoLAorCQkJCQkJQmF0Y2hSaW5nSXRlbVBvcyAqc2NhblBv cykKK3sKKwlwZ3N0YXRfY291bnRfaW5kZXhfdHVwbGVzKHNjYW4tPmluZGV4UmVsYXRpb24sIDEp OworCisJaWYgKHNjYW4tPnhzX3dhbnRfaXR1cCkKKwl7CisJCWludAkJCWl0ZW0gPSBzY2FuUG9z LT5pdGVtOworCisJCWhlYXBhbV9iYXRjaF9yZXNvbHZlX3Zpc2liaWxpdHkoc2Nhbiwgc2NhbkJh dGNoLCBpdGVtKTsKKwkJc2Nhbi0+eHNfaXR1cCA9IChJbmRleFR1cGxlKSAoc2NhbkJhdGNoLT5j dXJyVHVwbGVzICsKKwkJCQkJCQkJCSAgc2NhbkJhdGNoLT5pdGVtc1tpdGVtXS50dXBsZU9mZnNl dCk7CisJfQorCisJLyoKKwkgKiBTZXQgeHNfaGVhcHRpZCBhbmQgeHNfdmlzaWJsZSwgd2hpY2gg aGVhcGFtX2luZGV4X2dldG5leHRfc2xvdCBuZWVkcworCSAqICh4c192aXNpYmxlIGlzbid0IG5l ZWRlZCB3aGVuICF4c193YW50X2l0dXAgYnV0IHNldCBpdCBjb25zaXN0ZW50bHkpCisJICovCisJ c2Nhbi0+eHNfaGVhcHRpZCA9IHNjYW5CYXRjaC0+aXRlbXNbc2NhblBvcy0+aXRlbV0uaGVhcFRp ZDsKKwlzY2FuLT54c192aXNpYmxlID0gc2NhbkJhdGNoLT5pdGVtc1tzY2FuUG9zLT5pdGVtXS5h bGxWaXNpYmxlOworCisJcmV0dXJuICZzY2FuLT54c19oZWFwdGlkOworfQorCisvKiAtLS0tLS0t LS0tLS0tLS0tCisgKgkJaGVhcGFtX2JhdGNoX2dldG5leHQgLSBnZXQgdGhlIG5leHQgYmF0Y2gg b2YgVElEcyBmcm9tIGEgc2NhbgorICoKKyAqIENhbGxlZCB3aGVuIHdlIG5lZWQgdG8gbG9hZCB0 aGUgbmV4dCBiYXRjaCBvZiBpbmRleCBlbnRyaWVzIHRvIHByb2Nlc3MgaW4KKyAqIHRoZSBnaXZl biBkaXJlY3Rpb24uICBDYWxsZXIgcGFzc2VzIHVzIGEgYmF0Y2ggYW5kIGEgYmF0Y2ggcG9zaXRp b24sIHdoaWNoCisgKiBoYXMganVzdCBiZWVuIHVzZWQgdG8gcmVhZCBhbGwgaXRlbXMgZnJvbSB0 aGUgYmF0Y2ggaW4gdGhlIGRpcmVjdGlvbiBwYXNzZWQKKyAqIGJ5IGNhbGxlci4KKyAqCisgKiBS ZXR1cm5zIHRoZSBuZXh0IGJhdGNoIHRvIGJlIHByb2Nlc3NlZCBieSB0aGUgaW5kZXggc2Nhbiwg b3IgTlVMTCB3aGVuCisgKiB0aGVyZSBhcmUgbm8gbW9yZSBtYXRjaGVzIGluIHRoZSBnaXZlbiBz Y2FuIGRpcmVjdGlvbi4gIERvZXMgbm90IGFkdmFuY2UKKyAqIGNhbGxlcidzIGJhdGNoIHBvc2l0 aW9uOyB0aGF0IGlzIGxlZnQgdXAgdG8gY2FsbGVyLgorICoKKyAqIFRoaXMgaXMgYWxzbyB3aGVy ZSBiYXRjaGVzIGFyZSBhcHBlbmRlZCB0byB0aGUgc2NhbidzIHJpbmcgYnVmZmVyLiAgV2UKKyAq IGRvbid0IGZyZWUgYW55IGJhdGNoZXMgaGVyZSwgdGhvdWdoOyB0aGF0IGlzIGFsc28gbGVmdCB1 cCB0byBjYWxsZXIuCisgKiAtLS0tLS0tLS0tLS0tLS0tCisgKi8KK3N0YXRpYyBJbmRleFNjYW5C YXRjaAoraGVhcGFtX2JhdGNoX2dldG5leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0 aW9uIGRpcmVjdGlvbiwKKwkJCQkJIEluZGV4U2NhbkJhdGNoIHByaW9yQmF0Y2gsIEJhdGNoUmlu Z0l0ZW1Qb3MgKnBvcykKK3sKKwlJbmRleFNjYW5CYXRjaCBiYXRjaCA9IE5VTEw7CisJQmF0Y2hS aW5nQnVmZmVyICpiYXRjaHJpbmdidWYgUEdfVVNFRF9GT1JfQVNTRVJUU19PTkxZID0gJnNjYW4t PmJhdGNocmluZ2J1ZjsKKworCS8qIFhYWDogd2Ugc2hvdWxkIGFzc2VydCB0aGF0IGEgc25hcHNo b3QgaXMgcHVzaGVkIG9yIHJlZ2lzdGVyZWQgKi8KKwlBc3NlcnQoVHJhbnNhY3Rpb25JZElzVmFs aWQoUmVjZW50WG1pbikpOworCisJaWYgKCFwcmlvckJhdGNoKQorCXsKKwkJLyogRmlyc3QgY2Fs bCBmb3IgdGhlIHNjYW4gKi8KKwkJQXNzZXJ0KHBvcyA9PSAmYmF0Y2hyaW5nYnVmLT5zY2FuUG9z KTsKKwl9CisJZWxzZSBpZiAodW5saWtlbHkocHJpb3JCYXRjaC0+ZGlyICE9IGRpcmVjdGlvbikp CisJeworCQkvKgorCQkgKiBXZSBkZXRlY3RlZCBhIGNoYW5nZSBpbiBzY2FuIGRpcmVjdGlvbiBh Y3Jvc3MgYmF0Y2hlcy4gIFByZXBhcmUKKwkJICogc2NhbidzIGJhdGNocmluZ2J1ZiBzdGF0ZSBm b3IgdXMgdG8gZ2V0IHRoZSBuZXh0IGJhdGNoIGZvciB0aGUKKwkJICogb3Bwb3NpdGUgc2NhbiBk aXJlY3Rpb24gdG8gdGhlIG9uZSB1c2VkIHdoZW4gcHJpb3JCYXRjaCB3YXMKKwkJICogcmV0dXJu ZWQgYnkgYW1nZXRiYXRjaC4KKwkJICovCisJCUFzc2VydChwb3MgPT0gJmJhdGNocmluZ2J1Zi0+ c2NhblBvcyk7CisKKwkJdGFibGVhbV91dGlsX2JhdGNoX2RpcmNoYW5nZShzY2FuKTsKKworCQkv KiBwcmlvckJhdGNoIGlzIG5vdyBiYXRjaHJpbmdidWYncyBvbmx5IGJhdGNoICovCisJCUFzc2Vy dChwb3MtPmJhdGNoID09IGJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoKTsKKwkJQXNzZXJ0KGluZGV4 X3NjYW5fYmF0Y2hfY291bnQoc2NhbikgPT0gMSk7CisJfQorCWVsc2UgaWYgKGluZGV4X3NjYW5f YmF0Y2hfbG9hZGVkKHNjYW4sIHBvcy0+YmF0Y2ggKyAxKSkKKwl7CisJCS8qCisJCSAqIE5leHQg YmF0Y2ggYWxyZWFkeSBsb2FkZWQgZm9yIHVzLgorCQkgKi8KKwkJYmF0Y2ggPSBpbmRleF9zY2Fu X2JhdGNoKHNjYW4sIHBvcy0+YmF0Y2ggKyAxKTsKKworCQkvKgorCQkgKiBCb3RoIGJhdGNoZXMg bXVzdCBoYXZlIGJlZW4gbG9hZGVkIHdoZW4gbW92aW5nIGluIHNhbWUgc2NhbgorCQkgKiBkaXJl Y3Rpb24gKG90aGVyd2lzZSB0YWJsZWFtX3V0aWxfYmF0Y2hfZGlyY2hhbmdlIHNob3VsZCBoYXZl IGJlZW4KKwkJICogY2FsbGVkIGluc3RlYWQgb2YgbG9hZGluZyB0aGlzIG5leHQgYmF0Y2gpCisJ CSAqLworCQlBc3NlcnQocHJpb3JCYXRjaC0+ZGlyID09IGRpcmVjdGlvbik7CisJCUFzc2VydChi YXRjaC0+ZGlyID09IGRpcmVjdGlvbik7CisJCXJldHVybiBiYXRjaDsKKwl9CisKKwkvKgorCSAq IEFzc2VydCBwcmVjb25kaXRpb25zIGZvciBjYWxsaW5nIGFtZ2V0YmF0Y2guCisJICoKKwkgKiBw cmlvckJhdGNoIGhhZCBiZXR0ZXIgYmUgZm9yIHRoZSBsYXN0IHZhbGlkIGJhdGNoIGN1cnJlbnRs eSBpbiB0aGUgcmluZworCSAqIGJ1ZmZlciAoYmF0Y2hlcyBtdXN0IHN0YXkgaW4gc2NhbiBvcmRl cikuICBJZiBpdCBpc24ndCB0aGVuIHdlIHNob3VsZAorCSAqIGhhdmUgYWxyZWFkeSByZXR1cm5l ZCBzb21lIGV4aXN0aW5nIGxvYWRlZCBiYXRjaCBlYXJsaWVyLgorCSAqLworCUFzc2VydCghaW5k ZXhfc2Nhbl9iYXRjaF9mdWxsKHNjYW4pKTsKKwlBc3NlcnQoIXByaW9yQmF0Y2ggfHwKKwkJICAg KGluZGV4X3NjYW5fYmF0Y2hfY291bnQoc2NhbikgPiAwICYmIHByaW9yQmF0Y2gtPmRpciA9PSBk aXJlY3Rpb24gJiYKKwkJCWluZGV4X3NjYW5fYmF0Y2goc2NhbiwgYmF0Y2hyaW5nYnVmLT5uZXh0 QmF0Y2ggLSAxKSA9PSBwcmlvckJhdGNoKSk7CisKKwkvKgorCSAqIEJlZm9yZSB3ZSBjYWxsIGFt Z2V0YmF0Y2ggYWdhaW4sIGNoZWNrIGlmIHByaW9yQmF0Y2ggaXMgYWxyZWFkeSBrbm93bgorCSAq IHRvIGJlIHRoZSBsYXN0IGJhdGNoIHdpdGggbWF0Y2hpbmcgaXRlbXMgaW4gdGhpcyBzY2FuIGRp cmVjdGlvbgorCSAqLworCWlmIChwcmlvckJhdGNoICYmCisJCSgoU2NhbkRpcmVjdGlvbklzRm9y d2FyZChkaXJlY3Rpb24pICYmIHByaW9yQmF0Y2gtPmtub3duRW5kUmlnaHQpIHx8CisJCSAoU2Nh bkRpcmVjdGlvbklzQmFja3dhcmQoZGlyZWN0aW9uKSAmJiBwcmlvckJhdGNoLT5rbm93bkVuZExl ZnQpKSkKKwkJcmV0dXJuIE5VTEw7CisKKwliYXRjaCA9IHNjYW4tPmluZGV4UmVsYXRpb24tPnJk X2luZGFtLT5hbWdldGJhdGNoKHNjYW4sIHByaW9yQmF0Y2gsCisJCQkJCQkJCQkJCQkJICBkaXJl Y3Rpb24pOworCWlmIChiYXRjaCkKKwl7CisJCS8qIFdlIGdvdCB0aGUgYmF0Y2ggZnJvbSB0aGUg QU0gKi8KKwkJQXNzZXJ0KGJhdGNoLT5kaXIgPT0gZGlyZWN0aW9uKTsKKworCQkvKiBBcHBlbmQg YmF0Y2ggdG8gdGhlIGVuZCBvZiByaW5nIGJ1ZmZlci93cml0ZSBpdCB0byBidWZmZXIgaW5kZXgg Ki8KKwkJaW5kZXhfc2Nhbl9iYXRjaF9hcHBlbmQoc2NhbiwgYmF0Y2gpOworCisJCS8qCisJCSAq IERyb3AgYmF0Y2gncyBsZWFmIHBhZ2UgcGluIGZvciBwbGFpbiBpbmRleCBzY2Fucy4gIEluZGV4 LW9ubHkgc2NhbnMKKwkJICogZGVsYXkgZHJvcHBpbmcgdGhlIHBpbiB1bnRpbCBoZWFwYW1fYmF0 Y2hfcmVzb2x2ZV92aXNpYmlsaXR5IGhhcworCQkgKiBjYWNoZWQgYWxsIHZpc2liaWxpdHkgaW5m by4gIFNlZSBoZWFwYW1fYmF0Y2hfcmVzb2x2ZV92aXNpYmlsaXR5CisJCSAqIGhlYWRlciBjb21t ZW50cyBmb3IgYSBmdWxsIGV4cGxhbmF0aW9uIG9mIGVhcmx5IHBpbiBkcm9wcGluZy4KKwkJICov CisJCUFzc2VydChzY2FuLT5NVkNDU2NhbiA9PSBJc01WQ0NTbmFwc2hvdChzY2FuLT54c19zbmFw c2hvdCkpOworCQlpZiAoc2Nhbi0+TVZDQ1NjYW4gJiYgIXNjYW4tPnhzX3dhbnRfaXR1cCkKKwkJ eworCQkJUmVsZWFzZUJ1ZmZlcihiYXRjaC0+YnVmKTsKKwkJCWJhdGNoLT5idWYgPSBJbnZhbGlk QnVmZmVyOworCQl9CisJfQorCWVsc2UKKwl7CisJCS8qIGFtZ2V0YmF0Y2ggcmV0dXJuZWQgTlVM TCAqLworCQlpZiAocHJpb3JCYXRjaCkKKwkJeworCQkJLyoKKwkJCSAqIFRoZXJlIGFyZSBubyBm dXJ0aGVyIG1hdGNoZXMgdG8gYmUgZm91bmQgaW4gdGhlIGN1cnJlbnQgc2NhbgorCQkJICogZGly ZWN0aW9uLCBmb2xsb3dpbmcgcHJpb3JCYXRjaC4gIFJlbWVtYmVyIHRoYXQgcHJpb3JCYXRjaCBp cworCQkJICogdGhlIGxhc3QgYmF0Y2ggd2l0aCBtYXRjaGluZyBpdGVtcy4KKwkJCSAqLworCQkJ aWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyZWN0aW9uKSkKKwkJCQlwcmlvckJhdGNoLT5r bm93bkVuZFJpZ2h0ID0gdHJ1ZTsKKwkJCWVsc2UKKwkJCQlwcmlvckJhdGNoLT5rbm93bkVuZExl ZnQgPSB0cnVlOworCQl9CisJfQorCisJLyogeHNfaGl0dXAgaXMgbm90IHN1cHBvcnRlZCBieSBh bWdldGJhdGNoIHNjYW5zICovCisJQXNzZXJ0KCFzY2FuLT54c19oaXR1cCk7CisKKwlyZXR1cm4g YmF0Y2g7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0KKyAqCQloZWFwYW1fYmF0Y2hfZ2V0bmV4 dF90aWQgLSBnZXQgbmV4dCBUSUQgZnJvbSBiYXRjaCByaW5nIGJ1ZmZlcgorICoKKyAqIEdldCB0 aGUgbmV4dCBUSUQgZnJvbSB0aGUgc2NhbidzIGJhdGNoIHJpbmcgYnVmZmVyLCB3aGVuIG1vdmlu ZyBpbiB0aGUKKyAqIGdpdmVuIHNjYW4gZGlyZWN0aW9uLgorICogLS0tLS0tLS0tLS0tLS0tLQor ICovCitzdGF0aWMgaW5saW5lIEl0ZW1Qb2ludGVyCitoZWFwYW1fYmF0Y2hfZ2V0bmV4dF90aWQo SW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwlCYXRjaFJp bmdCdWZmZXIgKmJhdGNocmluZ2J1ZiA9ICZzY2FuLT5iYXRjaHJpbmdidWY7CisJQmF0Y2hSaW5n SXRlbVBvcyAqc2NhblBvcyA9ICZiYXRjaHJpbmdidWYtPnNjYW5Qb3M7CisJSW5kZXhTY2FuQmF0 Y2ggc2NhbkJhdGNoID0gTlVMTDsKKworCUFzc2VydCghc2NhblBvcy0+dmFsaWQgfHwgYmF0Y2hy aW5nYnVmLT5oZWFkQmF0Y2ggPT0gc2NhblBvcy0+YmF0Y2gpOworCUFzc2VydChzY2FuUG9zLT52 YWxpZCB8fCBpbmRleF9zY2FuX2JhdGNoX2NvdW50KHNjYW4pID09IDApOworCisJLyoKKwkgKiBD aGVjayBpZiB0aGVyZSdzIGFuIGV4aXN0aW5nIGxvYWRlZCBzY2FuQmF0Y2ggZm9yIHVzIHRvIHJl dHVybiB0aGUgbmV4dAorCSAqIG1hdGNoaW5nIGl0ZW0ncyBUSUQvaW5kZXggdHVwbGUgZnJvbQor CSAqLworCWlmIChzY2FuUG9zLT52YWxpZCkKKwl7CisJCS8qCisJCSAqIHNjYW5Qb3MgaXMgdmFs aWQsIHNvIHNjYW5CYXRjaCBtdXN0IGFscmVhZHkgYmUgbG9hZGVkIGluIGJhdGNoIHJpbmcKKwkJ ICogYnVmZmVyLiAgV2UgcmVseSBvbiB0aGF0IGhlcmUuCisJCSAqLworCQlBc3NlcnQoYmF0Y2hy aW5nYnVmLT5oZWFkQmF0Y2ggPT0gc2NhblBvcy0+YmF0Y2gpOworCQlBc3NlcnQoaW5kZXhfc2Nh bl9iYXRjaF9sb2FkZWQoc2Nhbiwgc2NhblBvcy0+YmF0Y2gpKTsKKworCQlzY2FuQmF0Y2ggPSBp bmRleF9zY2FuX2JhdGNoKHNjYW4sIHNjYW5Qb3MtPmJhdGNoKTsKKworCQlpZiAoaW5kZXhfc2Nh bl9wb3NfYWR2YW5jZShkaXJlY3Rpb24sIHNjYW5CYXRjaCwgc2NhblBvcykpCisJCQlyZXR1cm4g aGVhcGFtX2JhdGNoX3JldHVybl90aWQoc2Nhbiwgc2NhbkJhdGNoLCBzY2FuUG9zKTsKKwl9CisK KwkvKgorCSAqIEVpdGhlciByYW4gb3V0IG9mIGl0ZW1zIGZyb20gb3VyIGV4aXN0aW5nIHNjYW5C YXRjaCwgb3IgaXQgaGFzbid0IGJlZW4KKwkgKiBsb2FkZWQgeWV0IChiZWNhdXNlIHRoaXMgaXMg dGhlIGZpcnN0IGNhbGwgaGVyZSBmb3IgdGhlIGVudGlyZSBzY2FuKS4KKwkgKiBUcnkgdG8gYWR2 YW5jZSBzY2FuQmF0Y2ggdG8gdGhlIG5leHQgYmF0Y2ggKG9yIGdldCB0aGUgZmlyc3QgYmF0Y2gp LgorCSAqLworCXNjYW5CYXRjaCA9IGhlYXBhbV9iYXRjaF9nZXRuZXh0KHNjYW4sIGRpcmVjdGlv biwgc2NhbkJhdGNoLCBzY2FuUG9zKTsKKworCWlmICghc2NhbkJhdGNoKQorCXsKKwkJLyoKKwkJ ICogV2UncmUgZG9uZTsgbm8gbW9yZSBiYXRjaGVzIGluIHRoZSBjdXJyZW50IHNjYW4gZGlyZWN0 aW9uLgorCQkgKgorCQkgKiBOb3RlOiBzY2FuUG9zIGlzIGdlbmVyYWxseSBzdGlsbCB2YWxpZCBh dCB0aGlzIHBvaW50LiAgVGhlIHNjYW4KKwkJICogbWlnaHQgc3RpbGwgYmFjayB1cCBpbiB0aGUg b3RoZXIgZGlyZWN0aW9uLgorCQkgKi8KKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyoKKwkgKiBB ZHZhbmNlZCBzY2FuQmF0Y2guICBOb3cgcG9zaXRpb24gc2NhblBvcyB0byB0aGUgc3RhcnQgb2Yg bmV3CisJICogc2NhbkJhdGNoLgorCSAqLworCWluZGV4X3NjYW5fcG9zX25leHRiYXRjaChkaXJl Y3Rpb24sIHNjYW5CYXRjaCwgc2NhblBvcyk7CisJQXNzZXJ0KGluZGV4X3NjYW5fYmF0Y2goc2Nh biwgc2NhblBvcy0+YmF0Y2gpID09IHNjYW5CYXRjaCk7CisKKwkvKgorCSAqIFJlbW92ZSB0aGUg aGVhZCBiYXRjaCBmcm9tIHRoZSBiYXRjaCByaW5nIGJ1ZmZlciAodW5sZXNzIHRoZSBoZWFkIGJh dGNoCisJICogaXMgYWxzbyBvdXIgbmV3IHNjYW5CYXRjaCwgd2hpY2ggaGFwcGVucyBvbiB0aGUg Zmlyc3QgY2FsbCBoZXJlKQorCSAqLworCWlmIChiYXRjaHJpbmdidWYtPmhlYWRCYXRjaCAhPSBz Y2FuUG9zLT5iYXRjaCkKKwl7CisJCUluZGV4U2NhbkJhdGNoIGhlYWRCYXRjaCA9IGluZGV4X3Nj YW5fYmF0Y2goc2NhbiwKKwkJCQkJCQkJCQkJCQliYXRjaHJpbmdidWYtPmhlYWRCYXRjaCk7CisK KwkJLyogQWxzbyBmcmVlIG9ic29sZXNjZW50IGhlYWQgYmF0Y2ggKHVubGVzcyBpdCBpcyBzY2Fu J3MgbWFya0JhdGNoKSAqLworCQl0YWJsZWFtX3V0aWxfZnJlZV9iYXRjaChzY2FuLCBoZWFkQmF0 Y2gpOworCisJCS8qIFJlbW92ZSB0aGUgYmF0Y2ggZnJvbSB0aGUgcmluZyBidWZmZXIgKi8KKwkJ YmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2grKzsKKwl9CisKKwkvKgorCSAqIEluIHByYWN0aWNlIHNj YW5CYXRjaCB3aWxsIGFsd2F5cyBiZSB0aGUgcmluZyBidWZmZXIncyBoZWFkQmF0Y2guCisJICov CisJQXNzZXJ0KGJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoID09IHNjYW5Qb3MtPmJhdGNoKTsKKwor CXJldHVybiBoZWFwYW1fYmF0Y2hfcmV0dXJuX3RpZChzY2FuLCBzY2FuQmF0Y2gsIHNjYW5Qb3Mp OworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tCisgKgkJaW5kZXhfZmV0Y2hfaGVhcCAtIGdldCB0 aGUgc2NhbidzIG5leHQgaGVhcCB0dXBsZQorICoKKyAqIFRoZSByZXN1bHQgaXMgYSB2aXNpYmxl IGhlYXAgdHVwbGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBpbmRleCBUSUQgbW9zdAorICogcmVjZW50 bHkgZmV0Y2hlZCBieSBvdXIgY2FsbGVyIGluIHNjYW4tPnhzX2hlYXB0aWQsIG9yIE5VTEwgaWYg bm8gbW9yZQorICogbWF0Y2hpbmcgdHVwbGVzIGV4aXN0LiAgKFRoZXJlIGNhbiBiZSBtb3JlIHRo YW4gb25lIG1hdGNoaW5nIHR1cGxlIGJlY2F1c2UKKyAqIG9mIEhPVCBjaGFpbnMsIGFsdGhvdWdo IHdoZW4gdXNpbmcgYW4gTVZDQyBzbmFwc2hvdCBpdCBzaG91bGQgYmUgaW1wb3NzaWJsZQorICog Zm9yIG1vcmUgdGhhbiBvbmUgc3VjaCB0dXBsZSB0byBleGlzdC4pCisgKgorICogT24gc3VjY2Vz cywgdGhlIGJ1ZmZlciBjb250YWluaW5nIHRoZSBoZWFwIHR1cCBpcyBwaW5uZWQuICBUaGUgcGlu IG11c3QgYmUKKyAqIGRyb3BwZWQgZWxzZXdoZXJlLgorICogLS0tLS0tLS0tLS0tLS0tLQorICov CitzdGF0aWMgYm9vbAoraW5kZXhfZmV0Y2hfaGVhcChJbmRleFNjYW5EZXNjIHNjYW4sIFR1cGxl VGFibGVTbG90ICpzbG90KQoreworCWJvb2wJCWFsbF9kZWFkID0gZmFsc2U7CisJYm9vbAkJZm91 bmQ7CisKKwlmb3VuZCA9IGhlYXBhbV9pbmRleF9mZXRjaF90dXBsZShzY2FuLT54c19oZWFwZmV0 Y2gsICZzY2FuLT54c19oZWFwdGlkLAorCQkJCQkJCQkJIHNjYW4tPnhzX3NuYXBzaG90LCBzbG90 LAorCQkJCQkJCQkJICZzY2FuLT54c19oZWFwX2NvbnRpbnVlLCAmYWxsX2RlYWQpOworCisJaWYg KGZvdW5kKQorCQlwZ3N0YXRfY291bnRfaGVhcF9mZXRjaChzY2FuLT5pbmRleFJlbGF0aW9uKTsK KworCS8qCisJICogSWYgd2Ugc2Nhbm5lZCBhIHdob2xlIEhPVCBjaGFpbiBhbmQgZm91bmQgb25s eSBkZWFkIHR1cGxlcywgcmVtZW1iZXIgaXQKKwkgKiBmb3IgbGF0ZXIuICBXZSBkbyBub3QgZG8g dGhpcyB3aGVuIGluIHJlY292ZXJ5IGJlY2F1c2UgaXQgbWF5IHZpb2xhdGUKKwkgKiBNVkNDIHRv IGRvIHNvLiAgU2VlIGNvbW1lbnRzIGluIFJlbGF0aW9uR2V0SW5kZXhTY2FuKCkuCisJICovCisJ aWYgKCFzY2FuLT54YWN0U3RhcnRlZEluUmVjb3ZlcnkpCisJeworCQlpZiAoc2Nhbi0+dXNlYmF0 Y2hyaW5nKQorCQl7CisJCQlpZiAoYWxsX2RlYWQpCisJCQkJdGFibGVhbV91dGlsX2tpbGxfc2Nh bnBvc2l0ZW0oc2Nhbik7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKgorCQkJICogVGVsbCBhbWdl dHR1cGxlLWJhc2VkIGluZGV4IEFNIHRvIGtpbGwgaXRzIGVudHJ5IGZvciB0aGF0IFRJRAorCQkJ ICogKHRoaXMgd2lsbCB0YWtlIGVmZmVjdCBpbiB0aGUgbmV4dCBjYWxsLCBpbiBpbmRleF9nZXRu ZXh0X3RpZCkKKwkJCSAqLworCQkJc2Nhbi0+a2lsbF9wcmlvcl90dXBsZSA9IGFsbF9kZWFkOwor CQl9CisJfQorCisJcmV0dXJuIGZvdW5kOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tCisgKgkJ aGVhcGFtX2luZGV4X2dldG5leHRfc2xvdCAtIGdldCB0aGUgbmV4dCB0dXBsZSBmcm9tIGEgc2Nh bgorICoKKyAqIFRoZSByZXN1bHQgaXMgdHJ1ZSBpZiBhIHR1cGxlIHNhdGlzZnlpbmcgdGhlIHNj YW4ga2V5cyBhbmQgdGhlIHNuYXBzaG90IHdhcworICogZm91bmQsIGZhbHNlIG90aGVyd2lzZS4g IFRoZSB0dXBsZSBpcyBzdG9yZWQgaW4gdGhlIHNwZWNpZmllZCBzbG90LgorICoKKyAqIE9uIHN1 Y2Nlc3MsIHJlc291cmNlcyAobGlrZSBidWZmZXIgcGlucykgYXJlIGxpa2VseSB0byBiZSBoZWxk LCBhbmQgd2lsbCBiZQorICogZHJvcHBlZCBieSBhIGZ1dHVyZSBjYWxsIGhlcmUgKG9yIGJ5IGEg bGF0ZXIgY2FsbCB0byBpbmRleF9lbmRzY2FuKS4KKyAqCisgKiBOb3RlOiBjYWxsZXIgbXVzdCBj aGVjayBzY2FuLT54c19yZWNoZWNrLCBhbmQgcGVyZm9ybSByZWNoZWNraW5nIG9mIHRoZQorICog c2NhbiBrZXlzIGlmIHJlcXVpcmVkLiAgV2UgZG8gbm90IGRvIHRoYXQgaGVyZSBiZWNhdXNlIHdl IGRvbid0IGhhdmUKKyAqIGVub3VnaCBpbmZvcm1hdGlvbiB0byBkbyBpdCBlZmZpY2llbnRseSBp biB0aGUgZ2VuZXJhbCBjYXNlLgorICogLS0tLS0tLS0tLS0tLS0tLQorICovCitzdGF0aWMgYm9v bAoraGVhcGFtX2luZGV4X2dldG5leHRfc2xvdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJl Y3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJICBUdXBsZVRhYmxlU2xvdCAqc2xvdCkKK3sKKwlJbmRl eEZldGNoSGVhcERhdGEgKmhzY2FuID0gKEluZGV4RmV0Y2hIZWFwRGF0YSAqKSBzY2FuLT54c19o ZWFwZmV0Y2g7CisJSXRlbVBvaW50ZXIgdGlkID0gTlVMTDsKKworCWZvciAoOzspCisJeworCQlp ZiAoIXNjYW4tPnhzX2hlYXBfY29udGludWUpCisJCXsKKwkJCS8qCisJCQkgKiBTY2FucyB0aGF0 IHVzZSBhbiBhbWdldGJhdGNoIGluZGV4IEFNIGFyZSBtYW5hZ2VkIGJ5IGhlYXBhbSdzCisJCQkg KiBpbmRleCBzY2FuIG1hbmFnZXIuICBUaGlzIGdpdmVzIGhlYXBhbSB0aGUgYWJpbGl0eSB0byBy ZWFkIGhlYXAKKwkJCSAqIHR1cGxlcyBpbiBhIGZsZXhpYmxlIG9yZGVyIHRoYXQgaXMgYXR0dW5l ZCB0byBib3RoIGNvc3RzIGFuZAorCQkJICogYmVuZWZpdHMgb24gdGhlIGhlYXBhbSBhbmQgdGFi bGUgQU0gc2lkZS4KKwkJCSAqCisJCQkgKiBTY2FucyB0aGF0IHVzZSBhbiBhbWdldHR1cGxlIGlu ZGV4IEFNIHNpbXBseSBjYWxsIHRocm91Z2ggdG8KKwkJCSAqIGluZGV4X2dldG5leHRfdGlkIHRv IGdldCB0aGUgbmV4dCBUSUQgcmV0dXJuZWQgYnkgaW5kZXggQU0uIFRoZQorCQkJICogcHJvZ3Jl c3Mgb2YgdGhlIHNjYW4gd2lsbCBiZSB1bmRlciB0aGUgY29udHJvbCBvZiBpbmRleCBBTSAod2UK KwkJCSAqIGp1c3QgcGFzcyBpdCB0aHJvdWdoIGEgZGlyZWN0aW9uIHRvIGdldCB0aGUgbmV4dCB0 dXBsZSBpbiksIHNvCisJCQkgKiB3ZSBjYW5ub3QgcmVvcmRlciBhbnkgd29yay4KKwkJCSAqLwor CQkJaWYgKHNjYW4tPnVzZWJhdGNocmluZykKKwkJCQl0aWQgPSBoZWFwYW1fYmF0Y2hfZ2V0bmV4 dF90aWQoc2NhbiwgZGlyZWN0aW9uKTsKKwkJCWVsc2UKKwkJCXsKKwkJCQl0aWQgPSBpbmRleF9n ZXRuZXh0X3RpZChzY2FuLCBkaXJlY3Rpb24pOworCisJCQkJaWYgKHRpZCAhPSBOVUxMICYmIHNj YW4tPnhzX3dhbnRfaXR1cCkKKwkJCQkJc2Nhbi0+eHNfdmlzaWJsZSA9IFZNX0FMTF9WSVNJQkxF KHNjYW4tPmhlYXBSZWxhdGlvbiwKKwkJCQkJCQkJCQkJCQkgIEl0ZW1Qb2ludGVyR2V0QmxvY2tO dW1iZXIodGlkKSwKKwkJCQkJCQkJCQkJCQkgICZoc2Nhbi0+dm1idWYpOworCQkJfQorCisJCQkv KiBJZiB3ZSdyZSBvdXQgb2YgaW5kZXggZW50cmllcywgd2UncmUgZG9uZSAqLworCQkJaWYgKHRp ZCA9PSBOVUxMKQorCQkJCWJyZWFrOworCQl9CisKKwkJLyoKKwkJICogRmV0Y2ggdGhlIG5leHQg KG9yIG9ubHkpIHZpc2libGUgaGVhcCB0dXBsZSBmb3IgdGhpcyBpbmRleCBlbnRyeS4KKwkJICog SWYgd2UgZG9uJ3QgZmluZCBhbnl0aGluZywgbG9vcCBhcm91bmQgYW5kIGdyYWIgdGhlIG5leHQg VElEIGZyb20KKwkJICogdGhlIGluZGV4LgorCQkgKi8KKwkJQXNzZXJ0KEl0ZW1Qb2ludGVySXNW YWxpZCgmc2Nhbi0+eHNfaGVhcHRpZCkpOworCQlpZiAoIXNjYW4tPnhzX3dhbnRfaXR1cCkKKwkJ eworCQkJLyogUGxhaW4gaW5kZXggc2NhbiAqLworCQkJaWYgKGluZGV4X2ZldGNoX2hlYXAoc2Nh biwgc2xvdCkpCisJCQkJcmV0dXJuIHRydWU7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKgorCQkJ ICogSW5kZXgtb25seSBzY2FuLgorCQkJICoKKwkJCSAqIFdlIGNhbiBza2lwIHRoZSBoZWFwIGZl dGNoIGlmIHRoZSBUSUQgcmVmZXJlbmNlcyBhIGhlYXAgcGFnZSBvbgorCQkJICogd2hpY2ggYWxs IHR1cGxlcyBhcmUga25vd24gdmlzaWJsZSB0byBldmVyeWJvZHkuICBJbiBhbnkgY2FzZSwKKwkJ CSAqIHdlJ2xsIHVzZSB0aGUgaW5kZXggdHVwbGUgbm90IHRoZSBoZWFwIHR1cGxlIGFzIHRoZSBk YXRhCisJCQkgKiBzb3VyY2UuCisJCQkgKi8KKwkJCWlmICghc2Nhbi0+eHNfdmlzaWJsZSkKKwkJ CXsKKwkJCQkvKgorCQkJCSAqIFJhdHMsIHdlIGhhdmUgdG8gdmlzaXQgdGhlIGhlYXAgdG8gY2hl Y2sgdmlzaWJpbGl0eS4KKwkJCQkgKi8KKwkJCQlpZiAoc2Nhbi0+aW5zdHJ1bWVudCkKKwkJCQkJ c2Nhbi0+aW5zdHJ1bWVudC0+bmhlYXBmZXRjaGVzKys7CisKKwkJCQlpZiAoIWluZGV4X2ZldGNo X2hlYXAoc2Nhbiwgc2xvdCkpCisJCQkJCWNvbnRpbnVlOwkvKiBubyB2aXNpYmxlIHR1cGxlLCB0 cnkgbmV4dCBpbmRleCBlbnRyeSAqLworCisJCQkJRXhlY0NsZWFyVHVwbGUoc2xvdCk7CisKKwkJ CQkvKgorCQkJCSAqIE9ubHkgTVZDQyBzbmFwc2hvdHMgYXJlIHN1cHBvcnRlZCB3aXRoIHN0YW5k YXJkIGluZGV4LW9ubHkKKwkJCQkgKiBzY2Fucywgc28gdGhlcmUgc2hvdWxkIGJlIG5vIG5lZWQg dG8ga2VlcCBmb2xsb3dpbmcgdGhlIEhPVAorCQkJCSAqIGNoYWluIG9uY2UgYSB2aXNpYmxlIGVu dHJ5IGhhcyBiZWVuIGZvdW5kLiAgT3RoZXIgY2FsbGVycworCQkJCSAqIChjdXJyZW50bHkgb25s eSBzZWxmdW5jcy5jKSB1c2UgU25hcHNob3ROb25WYWN1dW1hYmxlLCBhbmQKKwkJCQkgKiB3YW50 IHVzIHRvIGFzc3VtZSB0aGF0IGp1c3QgaGF2aW5nIG9uZSB2aXNpYmxlIHR1cGxlIGluIHRoZQor CQkJCSAqIGhvdCBjaGFpbiBpcyBhbHdheXMgZ29vZCBlbm91Z2guCisJCQkJICovCisJCQkJQXNz ZXJ0KCEoc2Nhbi0+eHNfaGVhcF9jb250aW51ZSAmJgorCQkJCQkJIElzTVZDQ1NuYXBzaG90KHNj YW4tPnhzX3NuYXBzaG90KSkpOworCisJCQkJLyoKKwkJCQkgKiBOb3RlOiBhdCB0aGlzIHBvaW50 IHdlIGFyZSBob2xkaW5nIGEgcGluIG9uIHRoZSBoZWFwIHBhZ2UsCisJCQkJICogYXMgcmVjb3Jk ZWQgaW4gSW5kZXhGZXRjaEhlYXBEYXRhLnhzX2NidWYuICBXZSBjb3VsZAorCQkJCSAqIHJlbGVh c2UgdGhhdCBwaW4gbm93LCBidXQgaXQncyBub3QgY2xlYXIgd2hldGhlciBpdCdzIGEgd2luCisJ CQkJICogdG8gZG8gc28uICBUaGUgbmV4dCBpbmRleCBlbnRyeSBtaWdodCByZXF1aXJlIGEgdmlz aXQgdG8KKwkJCQkgKiB0aGUgc2FtZSBoZWFwIHBhZ2UuCisJCQkJICovCisJCQl9CisJCQllbHNl CisJCQl7CisJCQkJLyoKKwkJCQkgKiBXZSBkaWRuJ3QgYWNjZXNzIHRoZSBoZWFwLCBzbyB3ZSds bCBuZWVkIHRvIHRha2UgYQorCQkJCSAqIHByZWRpY2F0ZSBsb2NrIGV4cGxpY2l0bHksIGFzIGlm IHdlIGhhZC4gIEZvciBub3cgd2UgZG8KKwkJCQkgKiB0aGF0IGF0IHBhZ2UgbGV2ZWwuCisJCQkJ ICovCisJCQkJUHJlZGljYXRlTG9ja1BhZ2UoaHNjYW4tPnhzX2Jhc2UucmVsLAorCQkJCQkJCQkg IEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKSwKKwkJCQkJCQkJICBzY2FuLT54c19zbmFw c2hvdCk7CisJCQl9CisKKwkJCS8qCisJCQkgKiBSZXR1cm4gbWF0Y2hpbmcgaW5kZXggdHVwbGUg bm93IHNldCBpbiBzY2FuLT54c19pdHVwIChvciByZXR1cm4KKwkJCSAqIG1hdGNoaW5nIGhlYXAg dHVwbGUgbm93IHNldCBpbiBzY2FuLT54c19oaXR1cCkuCisJCQkgKgorCQkJICogTm90ZTogd2Ug d29uJ3QgdXN1YWxseSBoYXZlIGZldGNoZWQgYSBoZWFwIHR1cGxlIGludG8gY2FsbGVyJ3MKKwkJ CSAqIHRhYmxlIHNsb3QuICBUaGlzIGlzIHBlciB0aGUgdGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90 IGNvbnRyYWN0CisJCQkgKiBmb3Igc2Nhbi0+eHNfd2FudF9pdHVwIGNhbGxlcnMuCisJCQkgKi8K KwkJCXJldHVybiB0cnVlOworCQl9CisJfQorCisJcmV0dXJuIGZhbHNlOworfQogCiAvKiAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KICAqIENhbGxiYWNrcyBmb3Igbm9uLW1vZGlmeWluZyBvcGVyYXRpb25zIG9u IGluZGl2aWR1YWwgdHVwbGVzIGZvciBoZWFwIEFNCkBAIC03NTMsNyArMTMwNCw4IEBAIGhlYXBh bV9yZWxhdGlvbl9jb3B5X2Zvcl9jbHVzdGVyKFJlbGF0aW9uIE9sZEhlYXAsIFJlbGF0aW9uIE5l d0hlYXAsCiAKIAkJdGFibGVTY2FuID0gTlVMTDsKIAkJaGVhcFNjYW4gPSBOVUxMOwotCQlpbmRl eFNjYW4gPSBpbmRleF9iZWdpbnNjYW4oT2xkSGVhcCwgT2xkSW5kZXgsIFNuYXBzaG90QW55LCBO VUxMLCAwLCAwKTsKKwkJaW5kZXhTY2FuID0gaW5kZXhfYmVnaW5zY2FuKE9sZEhlYXAsIE9sZElu ZGV4LCBmYWxzZSwgU25hcHNob3RBbnksCisJCQkJCQkJCQlOVUxMLCAwLCAwKTsKIAkJaW5kZXhf cmVzY2FuKGluZGV4U2NhbiwgTlVMTCwgMCwgTlVMTCwgMCk7CiAJfQogCWVsc2UKQEAgLTc5MCw3 ICsxMzQyLDggQEAgaGVhcGFtX3JlbGF0aW9uX2NvcHlfZm9yX2NsdXN0ZXIoUmVsYXRpb24gT2xk SGVhcCwgUmVsYXRpb24gTmV3SGVhcCwKIAogCQlpZiAoaW5kZXhTY2FuICE9IE5VTEwpCiAJCXsK LQkJCWlmICghaW5kZXhfZ2V0bmV4dF9zbG90KGluZGV4U2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rp b24sIHNsb3QpKQorCQkJaWYgKCFoZWFwYW1faW5kZXhfZ2V0bmV4dF9zbG90KGluZGV4U2Nhbiwg Rm9yd2FyZFNjYW5EaXJlY3Rpb24sCisJCQkJCQkJCQkJICAgc2xvdCkpCiAJCQkJYnJlYWs7CiAK IAkJCS8qIFNpbmNlIHdlIHVzZWQgbm8gc2NhbiBrZXlzLCBzaG91bGQgbmV2ZXIgbmVlZCB0byBy ZWNoZWNrICovCkBAIC0yNjQ3LDYgKzMyMDAsNyBAQCBzdGF0aWMgY29uc3QgVGFibGVBbVJvdXRp bmUgaGVhcGFtX21ldGhvZHMgPSB7CiAJLmluZGV4X2ZldGNoX2JlZ2luID0gaGVhcGFtX2luZGV4 X2ZldGNoX2JlZ2luLAogCS5pbmRleF9mZXRjaF9yZXNldCA9IGhlYXBhbV9pbmRleF9mZXRjaF9y ZXNldCwKIAkuaW5kZXhfZmV0Y2hfZW5kID0gaGVhcGFtX2luZGV4X2ZldGNoX2VuZCwKKwkuaW5k ZXhfZ2V0bmV4dF9zbG90ID0gaGVhcGFtX2luZGV4X2dldG5leHRfc2xvdCwKIAkuaW5kZXhfZmV0 Y2hfdHVwbGUgPSBoZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGUsCiAKIAkudHVwbGVfaW5zZXJ0ID0g aGVhcGFtX3R1cGxlX2luc2VydCwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRl eC9NYWtlZmlsZSBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9NYWtlZmlsZQppbmRleCA2ZjJl MzA2MWEuLmU2ZDY4MWI0MCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L01h a2VmaWxlCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9NYWtlZmlsZQpAQCAtMTYsNiAr MTYsNyBAQCBPQkpTID0gXAogCWFtYXBpLm8gXAogCWFtdmFsaWRhdGUubyBcCiAJZ2VuYW0ubyBc Ci0JaW5kZXhhbS5vCisJaW5kZXhhbS5vIFwKKwlpbmRleGJhdGNoLm8KIAogaW5jbHVkZSAkKHRv cF9zcmNkaXIpL3NyYy9iYWNrZW5kL2NvbW1vbi5tawpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv YWNjZXNzL2luZGV4L2FtYXBpLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvYW1hcGkuYwpp bmRleCBlZmEwMDcwMzAuLjgzYjY2MzM1OSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNz L2luZGV4L2FtYXBpLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2FtYXBpLmMKQEAg LTU1LDYgKzU1LDEwIEBAIEdldEluZGV4QW1Sb3V0aW5lKE9pZCBhbWhhbmRsZXIpCiAJQXNzZXJ0 KHJvdXRpbmUtPmFtcmVzY2FuICE9IE5VTEwpOwogCUFzc2VydChyb3V0aW5lLT5hbWVuZHNjYW4g IT0gTlVMTCk7CiAKKwkvKiBBc3NlcnQgdGhhdCBBTSBkb2Vzbid0IGhhdmUgYW4gaW52YWxpZCBj b21iaW5hdGlvbiBvZiBjYWxsYmFja3MgKi8KKwlBc3NlcnQoKHJvdXRpbmUtPmFtZ2V0YmF0Y2gg IT0gTlVMTCkgPT0gKHJvdXRpbmUtPmFtZnJlZWJhdGNoICE9IE5VTEwpKTsKKwlBc3NlcnQocm91 dGluZS0+YW1nZXRiYXRjaCAhPSBOVUxMIHx8IHJvdXRpbmUtPmFtcG9zcmVzZXQgPT0gTlVMTCk7 CisKIAlyZXR1cm4gcm91dGluZTsKIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNz L2luZGV4L2dlbmFtLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYwppbmRleCA1 ZTg5Yjg2YTYuLjE4ZGNjZDNjOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4 L2dlbmFtLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMKQEAgLTg5LDYg Kzg5LDggQEAgUmVsYXRpb25HZXRJbmRleFNjYW4oUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwgaW50 IG5rZXlzLCBpbnQgbm9yZGVyYnlzKQogCXNjYW4tPnhzX3NuYXBzaG90ID0gSW52YWxpZFNuYXBz aG90OwkvKiBjYWxsZXIgbXVzdCBpbml0aWFsaXplIHRoaXMgKi8KIAlzY2FuLT5udW1iZXJPZktl eXMgPSBua2V5czsKIAlzY2FuLT5udW1iZXJPZk9yZGVyQnlzID0gbm9yZGVyYnlzOworCXNjYW4t PnVzZWJhdGNocmluZyA9IGZhbHNlOyAvKiBzZXQgbGF0ZXIgZm9yIGFtZ2V0YmF0Y2ggY2FsbGVy cyAqLworCXNjYW4tPnhzX3dhbnRfaXR1cCA9IGZhbHNlOyAvKiBjYWxsZXIgbXVzdCBpbml0aWFs aXplIHRoaXMgKi8KIAogCS8qCiAJICogV2UgYWxsb2NhdGUga2V5IHdvcmtzcGFjZSBoZXJlLCBi dXQgaXQgd29uJ3QgZ2V0IGZpbGxlZCB1bnRpbCBhbXJlc2Nhbi4KQEAgLTEwMiw4ICsxMDQsNiBA QCBSZWxhdGlvbkdldEluZGV4U2NhbihSZWxhdGlvbiBpbmRleFJlbGF0aW9uLCBpbnQgbmtleXMs IGludCBub3JkZXJieXMpCiAJZWxzZQogCQlzY2FuLT5vcmRlckJ5RGF0YSA9IE5VTEw7CiAKLQlz Y2FuLT54c193YW50X2l0dXAgPSBmYWxzZTsgLyogbWF5IGJlIHNldCBsYXRlciAqLwotCiAJLyoK IAkgKiBEdXJpbmcgcmVjb3Zlcnkgd2UgaWdub3JlIGtpbGxlZCB0dXBsZXMgYW5kIGRvbid0IGJv dGhlciB0byBraWxsIHRoZW0KIAkgKiBlaXRoZXIuIFdlIGRvIHRoaXMgYmVjYXVzZSB0aGUgeG1p biBvbiB0aGUgcHJpbWFyeSBub2RlIGNvdWxkIGVhc2lseSBiZQpAQCAtNDU0LDcgKzQ1NCw3IEBA IHN5c3RhYmxlX2JlZ2luc2NhbihSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJCQkJZWxvZyhFUlJP UiwgImNvbHVtbiBpcyBub3QgaW4gaW5kZXgiKTsKIAkJfQogCi0JCXN5c3NjYW4tPmlzY2FuID0g aW5kZXhfYmVnaW5zY2FuKGhlYXBSZWxhdGlvbiwgaXJlbCwKKwkJc3lzc2Nhbi0+aXNjYW4gPSBp bmRleF9iZWdpbnNjYW4oaGVhcFJlbGF0aW9uLCBpcmVsLCBmYWxzZSwKIAkJCQkJCQkJCQkgc25h cHNob3QsIE5VTEwsIG5rZXlzLCAwKTsKIAkJaW5kZXhfcmVzY2FuKHN5c3NjYW4tPmlzY2FuLCBp ZHhrZXksIG5rZXlzLCBOVUxMLCAwKTsKIAkJc3lzc2Nhbi0+c2NhbiA9IE5VTEw7CkBAIC01MTcs NyArNTE3LDggQEAgc3lzdGFibGVfZ2V0bmV4dChTeXNTY2FuRGVzYyBzeXNzY2FuKQogCiAJaWYg KHN5c3NjYW4tPmlyZWwpCiAJewotCQlpZiAoaW5kZXhfZ2V0bmV4dF9zbG90KHN5c3NjYW4tPmlz Y2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgc3lzc2Nhbi0+c2xvdCkpCisJCWlmICh0YWJsZV9p bmRleF9nZXRuZXh0X3Nsb3Qoc3lzc2Nhbi0+aXNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLAor CQkJCQkJCQkJIHN5c3NjYW4tPnNsb3QpKQogCQl7CiAJCQlib29sCQlzaG91bGRGcmVlOwogCkBA IC03MTUsNyArNzE2LDcgQEAgc3lzdGFibGVfYmVnaW5zY2FuX29yZGVyZWQoUmVsYXRpb24gaGVh cFJlbGF0aW9uLAogCWlmIChUcmFuc2FjdGlvbklkSXNWYWxpZChDaGVja1hpZEFsaXZlKSkKIAkJ YnN5c3NjYW4gPSB0cnVlOwogCi0Jc3lzc2Nhbi0+aXNjYW4gPSBpbmRleF9iZWdpbnNjYW4oaGVh cFJlbGF0aW9uLCBpbmRleFJlbGF0aW9uLAorCXN5c3NjYW4tPmlzY2FuID0gaW5kZXhfYmVnaW5z Y2FuKGhlYXBSZWxhdGlvbiwgaW5kZXhSZWxhdGlvbiwgZmFsc2UsCiAJCQkJCQkJCQkgc25hcHNo b3QsIE5VTEwsIG5rZXlzLCAwKTsKIAlpbmRleF9yZXNjYW4oc3lzc2Nhbi0+aXNjYW4sIGlkeGtl eSwgbmtleXMsIE5VTEwsIDApOwogCXN5c3NjYW4tPnNjYW4gPSBOVUxMOwpAQCAtNzM0LDcgKzcz NSw3IEBAIHN5c3RhYmxlX2dldG5leHRfb3JkZXJlZChTeXNTY2FuRGVzYyBzeXNzY2FuLCBTY2Fu RGlyZWN0aW9uIGRpcmVjdGlvbikKIAlIZWFwVHVwbGUJaHR1cCA9IE5VTEw7CiAKIAlBc3NlcnQo c3lzc2Nhbi0+aXJlbCk7Ci0JaWYgKGluZGV4X2dldG5leHRfc2xvdChzeXNzY2FuLT5pc2Nhbiwg ZGlyZWN0aW9uLCBzeXNzY2FuLT5zbG90KSkKKwlpZiAodGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90 KHN5c3NjYW4tPmlzY2FuLCBkaXJlY3Rpb24sIHN5c3NjYW4tPnNsb3QpKQogCQlodHVwID0gRXhl Y0ZldGNoU2xvdEhlYXBUdXBsZShzeXNzY2FuLT5zbG90LCBmYWxzZSwgTlVMTCk7CiAKIAkvKiBT ZWUgbm90ZXMgaW4gc3lzdGFibGVfZ2V0bmV4dCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv YWNjZXNzL2luZGV4L2luZGV4YW0uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFt LmMKaW5kZXggNGVkMDUwOGM2Li4wYzRhODZmNWEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9pbmRleC9pbmRleGFtLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4 YW0uYwpAQCAtMjQsOSArMjQsNyBAQAogICoJCWluZGV4X3BhcmFsbGVsc2Nhbl9pbml0aWFsaXpl IC0gaW5pdGlhbGl6ZSBwYXJhbGxlbCBzY2FuCiAgKgkJaW5kZXhfcGFyYWxsZWxyZXNjYW4gIC0g KHJlKXN0YXJ0IGEgcGFyYWxsZWwgc2NhbiBvZiBhbiBpbmRleAogICoJCWluZGV4X2JlZ2luc2Nh bl9wYXJhbGxlbCAtIGpvaW4gcGFyYWxsZWwgaW5kZXggc2NhbgotICoJCWluZGV4X2dldG5leHRf dGlkCS0gZ2V0IHRoZSBuZXh0IFRJRCBmcm9tIGEgc2NhbgotICoJCWluZGV4X2ZldGNoX2hlYXAJ CS0gZ2V0IHRoZSBzY2FuJ3MgbmV4dCBoZWFwIHR1cGxlCi0gKgkJaW5kZXhfZ2V0bmV4dF9zbG90 CS0gZ2V0IHRoZSBuZXh0IHR1cGxlIGZyb20gYSBzY2FuCisgKgkJaW5kZXhfZ2V0bmV4dF90aWQJ LSBhbWdldHR1cGxlIHRhYmxlIEFNIGhlbHBlciByb3V0aW5lCiAgKgkJaW5kZXhfZ2V0Yml0bWFw IC0gZ2V0IGFsbCB0dXBsZXMgZnJvbSBhIHNjYW4KICAqCQlpbmRleF9idWxrX2RlbGV0ZQktIGJ1 bGsgZGVsZXRpb24gb2YgaW5kZXggdHVwbGVzCiAgKgkJaW5kZXhfdmFjdXVtX2NsZWFudXAJLSBw b3N0LWRlbGV0aW9uIGNsZWFudXAgb2YgYW4gaW5kZXgKQEAgLTI1NSw2ICsyNTMsNyBAQCBpbmRl eF9pbnNlcnRfY2xlYW51cChSZWxhdGlvbiBpbmRleFJlbGF0aW9uLAogSW5kZXhTY2FuRGVzYwog aW5kZXhfYmVnaW5zY2FuKFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKIAkJCQlSZWxhdGlvbiBpbmRl eFJlbGF0aW9uLAorCQkJCWJvb2wgeHNfd2FudF9pdHVwLAogCQkJCVNuYXBzaG90IHNuYXBzaG90 LAogCQkJCUluZGV4U2Nhbkluc3RydW1lbnRhdGlvbiAqaW5zdHJ1bWVudCwKIAkJCQlpbnQgbmtl eXMsIGludCBub3JkZXJieXMpCkBAIC0yODEsNyArMjgwLDEzIEBAIGluZGV4X2JlZ2luc2NhbihS ZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJICovCiAJc2Nhbi0+aGVhcFJlbGF0aW9uID0gaGVhcFJl bGF0aW9uOwogCXNjYW4tPnhzX3NuYXBzaG90ID0gc25hcHNob3Q7CisJc2Nhbi0+TVZDQ1NjYW4g PSBJc01WQ0NTbmFwc2hvdChzbmFwc2hvdCk7CiAJc2Nhbi0+aW5zdHJ1bWVudCA9IGluc3RydW1l bnQ7CisJc2Nhbi0+eHNfd2FudF9pdHVwID0geHNfd2FudF9pdHVwOworCXNjYW4tPnVzZWJhdGNo cmluZyA9IGZhbHNlOworCisJaWYgKGluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbWdldGJhdGNo ICE9IE5VTEwpCisJCWluZGV4X2JhdGNoc2Nhbl9pbml0KHNjYW4pOwogCiAJLyogcHJlcGFyZSB0 byBmZXRjaCBpbmRleCBtYXRjaGVzIGZyb20gdGFibGUgKi8KIAlzY2FuLT54c19oZWFwZmV0Y2gg PSB0YWJsZV9pbmRleF9mZXRjaF9iZWdpbihoZWFwUmVsYXRpb24pOwpAQCAtMzEyLDYgKzMxNyw3 IEBAIGluZGV4X2JlZ2luc2Nhbl9iaXRtYXAoUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwKIAkgKiB1 cCBieSBSZWxhdGlvbkdldEluZGV4U2Nhbi4KIAkgKi8KIAlzY2FuLT54c19zbmFwc2hvdCA9IHNu YXBzaG90OworCXNjYW4tPk1WQ0NTY2FuID0gSXNNVkNDU25hcHNob3Qoc25hcHNob3QpOwogCXNj YW4tPmluc3RydW1lbnQgPSBpbnN0cnVtZW50OwogCiAJcmV0dXJuIHNjYW47CkBAIC0zODAsNiAr Mzg2LDkgQEAgaW5kZXhfcmVzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbiwKIAlzY2FuLT5raWxsX3By aW9yX3R1cGxlID0gZmFsc2U7IC8qIGZvciBzYWZldHkgKi8KIAlzY2FuLT54c19oZWFwX2NvbnRp bnVlID0gZmFsc2U7CiAKKwlpZiAoc2Nhbi0+dXNlYmF0Y2hyaW5nKQorCQlpbmRleF9iYXRjaHNj YW5fcmVzZXQoc2NhbiwgdHJ1ZSk7CisKIAlzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+ YW1yZXNjYW4oc2Nhbiwga2V5cywgbmtleXMsCiAJCQkJCQkJCQkJCW9yZGVyYnlzLCBub3JkZXJi eXMpOwogfQpAQCAtMzk0LDYgKzQwMywxMCBAQCBpbmRleF9lbmRzY2FuKEluZGV4U2NhbkRlc2Mg c2NhbikKIAlTQ0FOX0NIRUNLUzsKIAlDSEVDS19TQ0FOX1BST0NFRFVSRShhbWVuZHNjYW4pOwog CisJLyogQ2xlYW51cCBiYXRjaGluZywgc28gdGhhdCB0aGUgQU0gY2FuIHJlbGVhc2UgcGlucyBh bmQgc28gb24uICovCisJaWYgKHNjYW4tPnVzZWJhdGNocmluZykKKwkJaW5kZXhfYmF0Y2hzY2Fu X2VuZChzY2FuKTsKKwogCS8qIFJlbGVhc2UgcmVzb3VyY2VzIChsaWtlIGJ1ZmZlciBwaW5zKSBm cm9tIHRhYmxlIGFjY2Vzc2VzICovCiAJaWYgKHNjYW4tPnhzX2hlYXBmZXRjaCkKIAl7CkBAIC00 MjIsMjQgKzQzNSwyNSBAQCB2b2lkCiBpbmRleF9tYXJrcG9zKEluZGV4U2NhbkRlc2Mgc2NhbikK IHsKIAlTQ0FOX0NIRUNLUzsKLQlDSEVDS19TQ0FOX1BST0NFRFVSRShhbW1hcmtwb3MpOworCUNI RUNLX1NDQU5fUFJPQ0VEVVJFKGFtcG9zcmVzZXQpOwogCi0Jc2Nhbi0+aW5kZXhSZWxhdGlvbi0+ cmRfaW5kYW0tPmFtbWFya3BvcyhzY2FuKTsKKwkvKiBPbmx5IGFtZ2V0YmF0Y2ggaW5kZXggQU1z IHN1cHBvcnQgbWFyayBhbmQgcmVzdG9yZSAqLworCWluZGV4X2JhdGNoc2Nhbl9tYXJrX3Bvcyhz Y2FuKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLQogICoJCWluZGV4X3Jlc3RycG9zCS0gcmVz dG9yZSBhIHNjYW4gcG9zaXRpb24KICAqCi0gKiBOT1RFOiB0aGlzIG9ubHkgcmVzdG9yZXMgdGhl IGludGVybmFsIHNjYW4gc3RhdGUgb2YgdGhlIGluZGV4IEFNLiAgU2VlCi0gKiBjb21tZW50cyBm b3IgRXhlY1Jlc3RyUG9zKCkuCisgKiBOT1RFOiB0aGlzIG9ubHkgcmVzdG9yZXMgdGhlIGJhdGNo IHBvc2l0aW9uYWwgc3RhdGUgc2hhcmVkIGJ5IHRoZSB0YWJsZSBhbmQKKyAqIGluZGV4IEFNcy4g IFNlZSBjb21tZW50cyBmb3IgRXhlY1Jlc3RyUG9zKCkuCiAgKgogICogTk9URTogRm9yIGhlYXAs IGluIHRoZSBwcmVzZW5jZSBvZiBIT1QgY2hhaW5zLCBtYXJrL3Jlc3RvcmUgb25seSB3b3Jrcwog ICogY29ycmVjdGx5IGlmIHRoZSBzY2FuJ3Mgc25hcHNob3QgaXMgTVZDQy1zYWZlOyB0aGF0IGVu c3VyZXMgdGhhdCB0aGVyZSdzIGF0CiAgKiBtb3N0IG9uZSByZXR1cm5hYmxlIHR1cGxlIGluIGVh Y2ggSE9UIGNoYWluLCBhbmQgc28gcmVzdG9yaW5nIHRoZSBwcmlvcgotICogc3RhdGUgYXQgdGhl IGdyYW51bGFyaXR5IG9mIHRoZSBpbmRleCBBTSBpcyBzdWZmaWNpZW50LiAgU2luY2UgdGhlIG9u bHkKLSAqIGN1cnJlbnQgdXNlciBvZiBtYXJrL3Jlc3RvcmUgZnVuY3Rpb25hbGl0eSBpcyBub2Rl TWVyZ2Vqb2luLmMsIHRoaXMKLSAqIGVmZmVjdGl2ZWx5IG1lYW5zIHRoYXQgbWVyZ2Utam9pbiBw bGFucyBvbmx5IHdvcmsgZm9yIE1WQ0Mgc25hcHNob3RzLiAgVGhpcwotICogY291bGQgYmUgZml4 ZWQgaWYgbmVjZXNzYXJ5LCBidXQgZm9yIG5vdyBpdCBzZWVtcyB1bmltcG9ydGFudC4KKyAqIHN0 YXRlIGF0IHRoZSBzY2FuIGl0ZW0gZ3JhbnVsYXJpdHkgaXMgc3VmZmljaWVudC4gIFNpbmNlIHRo ZSBvbmx5IGN1cnJlbnQKKyAqIHVzZXIgb2YgbWFyay9yZXN0b3JlIGZ1bmN0aW9uYWxpdHkgaXMg bm9kZU1lcmdlam9pbi5jLCB0aGlzIGVmZmVjdGl2ZWx5CisgKiBtZWFucyB0aGF0IG1lcmdlLWpv aW4gcGxhbnMgb25seSB3b3JrIGZvciBNVkNDIHNuYXBzaG90cy4gIFRoaXMgY291bGQgYmUKKyAq IGZpeGVkIGlmIG5lY2Vzc2FyeSwgYnV0IGZvciBub3cgaXQgc2VlbXMgdW5pbXBvcnRhbnQuCiAg KiAtLS0tLS0tLS0tLS0tLS0tCiAgKi8KIHZvaWQKQEAgLTQ0OCw3ICs0NjIsOCBAQCBpbmRleF9y ZXN0cnBvcyhJbmRleFNjYW5EZXNjIHNjYW4pCiAJQXNzZXJ0KElzTVZDQ1NuYXBzaG90KHNjYW4t PnhzX3NuYXBzaG90KSk7CiAKIAlTQ0FOX0NIRUNLUzsKLQlDSEVDS19TQ0FOX1BST0NFRFVSRShh bXJlc3RycG9zKTsKKwlDSEVDS19TQ0FOX1BST0NFRFVSRShhbWdldGJhdGNoKTsKKwlDSEVDS19T Q0FOX1BST0NFRFVSRShhbXBvc3Jlc2V0KTsKIAogCS8qIHJlbGVhc2UgcmVzb3VyY2VzIChsaWtl IGJ1ZmZlciBwaW5zKSBmcm9tIHRhYmxlIGFjY2Vzc2VzICovCiAJaWYgKHNjYW4tPnhzX2hlYXBm ZXRjaCkKQEAgLTQ1Nyw3ICs0NzIsNyBAQCBpbmRleF9yZXN0cnBvcyhJbmRleFNjYW5EZXNjIHNj YW4pCiAJc2Nhbi0+a2lsbF9wcmlvcl90dXBsZSA9IGZhbHNlOyAvKiBmb3Igc2FmZXR5ICovCiAJ c2Nhbi0+eHNfaGVhcF9jb250aW51ZSA9IGZhbHNlOwogCi0Jc2Nhbi0+aW5kZXhSZWxhdGlvbi0+ cmRfaW5kYW0tPmFtcmVzdHJwb3Moc2Nhbik7CisJaW5kZXhfYmF0Y2hzY2FuX3Jlc3RvcmVfcG9z KHNjYW4pOwogfQogCiAvKgpAQCAtNTc5LDYgKzU5NCw5IEBAIGluZGV4X3BhcmFsbGVscmVzY2Fu KEluZGV4U2NhbkRlc2Mgc2NhbikKIAlpZiAoc2Nhbi0+eHNfaGVhcGZldGNoKQogCQl0YWJsZV9p bmRleF9mZXRjaF9yZXNldChzY2FuLT54c19oZWFwZmV0Y2gpOwogCisJaWYgKHNjYW4tPnVzZWJh dGNocmluZykKKwkJaW5kZXhfYmF0Y2hzY2FuX3Jlc2V0KHNjYW4sIHRydWUpOworCiAJLyogYW1w YXJhbGxlbHJlc2NhbiBpcyBvcHRpb25hbDsgYXNzdW1lIG5vLW9wIGlmIG5vdCBwcm92aWRlZCBi eSBBTSAqLwogCWlmIChzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1wYXJhbGxlbHJl c2NhbiAhPSBOVUxMKQogCQlzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1wYXJhbGxl bHJlc2NhbihzY2FuKTsKQEAgLTU5MSw2ICs2MDksNyBAQCBpbmRleF9wYXJhbGxlbHJlc2NhbihJ bmRleFNjYW5EZXNjIHNjYW4pCiAgKi8KIEluZGV4U2NhbkRlc2MKIGluZGV4X2JlZ2luc2Nhbl9w YXJhbGxlbChSZWxhdGlvbiBoZWFwcmVsLCBSZWxhdGlvbiBpbmRleHJlbCwKKwkJCQkJCSBib29s IHhzX3dhbnRfaXR1cCwKIAkJCQkJCSBJbmRleFNjYW5JbnN0cnVtZW50YXRpb24gKmluc3RydW1l bnQsCiAJCQkJCQkgaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzLAogCQkJCQkJIFBhcmFsbGVsSW5k ZXhTY2FuRGVzYyBwc2NhbikKQEAgLTYxMiw3ICs2MzEsMTIgQEAgaW5kZXhfYmVnaW5zY2FuX3Bh cmFsbGVsKFJlbGF0aW9uIGhlYXByZWwsIFJlbGF0aW9uIGluZGV4cmVsLAogCSAqLwogCXNjYW4t PmhlYXBSZWxhdGlvbiA9IGhlYXByZWw7CiAJc2Nhbi0+eHNfc25hcHNob3QgPSBzbmFwc2hvdDsK KwlzY2FuLT5NVkNDU2NhbiA9IElzTVZDQ1NuYXBzaG90KHNuYXBzaG90KTsKIAlzY2FuLT5pbnN0 cnVtZW50ID0gaW5zdHJ1bWVudDsKKwlzY2FuLT54c193YW50X2l0dXAgPSB4c193YW50X2l0dXA7 CisKKwlpZiAoaW5kZXhyZWwtPnJkX2luZGFtLT5hbWdldGJhdGNoICE9IE5VTEwpCisJCWluZGV4 X2JhdGNoc2Nhbl9pbml0KHNjYW4pOwogCiAJLyogcHJlcGFyZSB0byBmZXRjaCBpbmRleCBtYXRj aGVzIGZyb20gdGFibGUgKi8KIAlzY2FuLT54c19oZWFwZmV0Y2ggPSB0YWJsZV9pbmRleF9mZXRj aF9iZWdpbihoZWFwcmVsKTsKQEAgLTYyMSwxMCArNjQ1LDE0IEBAIGluZGV4X2JlZ2luc2Nhbl9w YXJhbGxlbChSZWxhdGlvbiBoZWFwcmVsLCBSZWxhdGlvbiBpbmRleHJlbCwKIH0KIAogLyogLS0t LS0tLS0tLS0tLS0tLQotICogaW5kZXhfZ2V0bmV4dF90aWQgLSBnZXQgdGhlIG5leHQgVElEIGZy b20gYSBzY2FuCisgKiBpbmRleF9nZXRuZXh0X3RpZCAtIGFtZ2V0dHVwbGUgaW50ZXJmYWNlCiAg KgogICogVGhlIHJlc3VsdCBpcyB0aGUgbmV4dCBUSUQgc2F0aXNmeWluZyB0aGUgc2NhbiBrZXlz LAogICogb3IgTlVMTCBpZiBubyBtb3JlIG1hdGNoaW5nIHR1cGxlcyBleGlzdC4KKyAqCisgKiBU aGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBieSB0YWJsZSBBTSdzIGluZGV4X2dldG5leHRfc2xv dCBpbXBsZW1lbnRhdGlvbiwKKyAqIGFuZCBvbmx5IGdpdmVuIGFuIGluZGV4IEFNIHRoYXQgc3Vw cG9ydHMgdGhlIHNpbmdsZS10dXBsZSBhbWdldHR1cGxlCisgKiBpbnRlcmZhY2UuCiAgKiAtLS0t LS0tLS0tLS0tLS0tCiAgKi8KIEl0ZW1Qb2ludGVyCkBAIC02NjcsOTcgKzY5NSw2IEBAIGluZGV4 X2dldG5leHRfdGlkKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24p CiAJcmV0dXJuICZzY2FuLT54c19oZWFwdGlkOwogfQogCi0vKiAtLS0tLS0tLS0tLS0tLS0tCi0g KgkJaW5kZXhfZmV0Y2hfaGVhcCAtIGdldCB0aGUgc2NhbidzIG5leHQgaGVhcCB0dXBsZQotICoK LSAqIFRoZSByZXN1bHQgaXMgYSB2aXNpYmxlIGhlYXAgdHVwbGUgYXNzb2NpYXRlZCB3aXRoIHRo ZSBpbmRleCBUSUQgbW9zdAotICogcmVjZW50bHkgZmV0Y2hlZCBieSBpbmRleF9nZXRuZXh0X3Rp ZCwgb3IgTlVMTCBpZiBubyBtb3JlIG1hdGNoaW5nIHR1cGxlcwotICogZXhpc3QuICAoVGhlcmUg Y2FuIGJlIG1vcmUgdGhhbiBvbmUgbWF0Y2hpbmcgdHVwbGUgYmVjYXVzZSBvZiBIT1QgY2hhaW5z LAotICogYWx0aG91Z2ggd2hlbiB1c2luZyBhbiBNVkNDIHNuYXBzaG90IGl0IHNob3VsZCBiZSBp bXBvc3NpYmxlIGZvciBtb3JlIHRoYW4KLSAqIG9uZSBzdWNoIHR1cGxlIHRvIGV4aXN0LikKLSAq Ci0gKiBPbiBzdWNjZXNzLCB0aGUgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIGhlYXAgdHVwIGlzIHBp bm5lZCAodGhlIHBpbiB3aWxsIGJlCi0gKiBkcm9wcGVkIGluIGEgZnV0dXJlIGluZGV4X2dldG5l eHRfdGlkLCBpbmRleF9mZXRjaF9oZWFwIG9yIGluZGV4X2VuZHNjYW4KLSAqIGNhbGwpLgotICoK LSAqIE5vdGU6IGNhbGxlciBtdXN0IGNoZWNrIHNjYW4tPnhzX3JlY2hlY2ssIGFuZCBwZXJmb3Jt IHJlY2hlY2tpbmcgb2YgdGhlCi0gKiBzY2FuIGtleXMgaWYgcmVxdWlyZWQuICBXZSBkbyBub3Qg ZG8gdGhhdCBoZXJlIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZQotICogZW5vdWdoIGluZm9ybWF0aW9u IHRvIGRvIGl0IGVmZmljaWVudGx5IGluIHRoZSBnZW5lcmFsIGNhc2UuCi0gKiAtLS0tLS0tLS0t LS0tLS0tCi0gKi8KLWJvb2wKLWluZGV4X2ZldGNoX2hlYXAoSW5kZXhTY2FuRGVzYyBzY2FuLCBU dXBsZVRhYmxlU2xvdCAqc2xvdCkKLXsKLQlib29sCQlhbGxfZGVhZCA9IGZhbHNlOwotCWJvb2wJ CWZvdW5kOwotCi0JZm91bmQgPSB0YWJsZV9pbmRleF9mZXRjaF90dXBsZShzY2FuLT54c19oZWFw ZmV0Y2gsICZzY2FuLT54c19oZWFwdGlkLAotCQkJCQkJCQkJc2Nhbi0+eHNfc25hcHNob3QsIHNs b3QsCi0JCQkJCQkJCQkmc2Nhbi0+eHNfaGVhcF9jb250aW51ZSwgJmFsbF9kZWFkKTsKLQotCWlm IChmb3VuZCkKLQkJcGdzdGF0X2NvdW50X2hlYXBfZmV0Y2goc2Nhbi0+aW5kZXhSZWxhdGlvbik7 Ci0KLQkvKgotCSAqIElmIHdlIHNjYW5uZWQgYSB3aG9sZSBIT1QgY2hhaW4gYW5kIGZvdW5kIG9u bHkgZGVhZCB0dXBsZXMsIHRlbGwgaW5kZXgKLQkgKiBBTSB0byBraWxsIGl0cyBlbnRyeSBmb3Ig dGhhdCBUSUQgKHRoaXMgd2lsbCB0YWtlIGVmZmVjdCBpbiB0aGUgbmV4dAotCSAqIGFtZ2V0dHVw bGUgY2FsbCwgaW4gaW5kZXhfZ2V0bmV4dF90aWQpLiAgV2UgZG8gbm90IGRvIHRoaXMgd2hlbiBp bgotCSAqIHJlY292ZXJ5IGJlY2F1c2UgaXQgbWF5IHZpb2xhdGUgTVZDQyB0byBkbyBzby4gIFNl ZSBjb21tZW50cyBpbgotCSAqIFJlbGF0aW9uR2V0SW5kZXhTY2FuKCkuCi0JICovCi0JaWYgKCFz Y2FuLT54YWN0U3RhcnRlZEluUmVjb3ZlcnkpCi0JCXNjYW4tPmtpbGxfcHJpb3JfdHVwbGUgPSBh bGxfZGVhZDsKLQotCXJldHVybiBmb3VuZDsKLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLQotICoJ CWluZGV4X2dldG5leHRfc2xvdCAtIGdldCB0aGUgbmV4dCB0dXBsZSBmcm9tIGEgc2NhbgotICoK LSAqIFRoZSByZXN1bHQgaXMgdHJ1ZSBpZiBhIHR1cGxlIHNhdGlzZnlpbmcgdGhlIHNjYW4ga2V5 cyBhbmQgdGhlIHNuYXBzaG90IHdhcwotICogZm91bmQsIGZhbHNlIG90aGVyd2lzZS4gIFRoZSB0 dXBsZSBpcyBzdG9yZWQgaW4gdGhlIHNwZWNpZmllZCBzbG90LgotICoKLSAqIE9uIHN1Y2Nlc3Ms IHJlc291cmNlcyAobGlrZSBidWZmZXIgcGlucykgYXJlIGxpa2VseSB0byBiZSBoZWxkLCBhbmQg d2lsbCBiZQotICogZHJvcHBlZCBieSBhIGZ1dHVyZSBpbmRleF9nZXRuZXh0X3RpZCwgaW5kZXhf ZmV0Y2hfaGVhcCBvciBpbmRleF9lbmRzY2FuCi0gKiBjYWxsKS4KLSAqCi0gKiBOb3RlOiBjYWxs ZXIgbXVzdCBjaGVjayBzY2FuLT54c19yZWNoZWNrLCBhbmQgcGVyZm9ybSByZWNoZWNraW5nIG9m IHRoZQotICogc2NhbiBrZXlzIGlmIHJlcXVpcmVkLiAgV2UgZG8gbm90IGRvIHRoYXQgaGVyZSBi ZWNhdXNlIHdlIGRvbid0IGhhdmUKLSAqIGVub3VnaCBpbmZvcm1hdGlvbiB0byBkbyBpdCBlZmZp Y2llbnRseSBpbiB0aGUgZ2VuZXJhbCBjYXNlLgotICogLS0tLS0tLS0tLS0tLS0tLQotICovCi1i b29sCi1pbmRleF9nZXRuZXh0X3Nsb3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9u IGRpcmVjdGlvbiwgVHVwbGVUYWJsZVNsb3QgKnNsb3QpCi17Ci0JZm9yICg7OykKLQl7Ci0JCWlm ICghc2Nhbi0+eHNfaGVhcF9jb250aW51ZSkKLQkJewotCQkJSXRlbVBvaW50ZXIgdGlkOwotCi0J CQkvKiBUaW1lIHRvIGZldGNoIHRoZSBuZXh0IFRJRCBmcm9tIHRoZSBpbmRleCAqLwotCQkJdGlk ID0gaW5kZXhfZ2V0bmV4dF90aWQoc2NhbiwgZGlyZWN0aW9uKTsKLQotCQkJLyogSWYgd2UncmUg b3V0IG9mIGluZGV4IGVudHJpZXMsIHdlJ3JlIGRvbmUgKi8KLQkJCWlmICh0aWQgPT0gTlVMTCkK LQkJCQlicmVhazsKLQotCQkJQXNzZXJ0KEl0ZW1Qb2ludGVyRXF1YWxzKHRpZCwgJnNjYW4tPnhz X2hlYXB0aWQpKTsKLQkJfQotCi0JCS8qCi0JCSAqIEZldGNoIHRoZSBuZXh0IChvciBvbmx5KSB2 aXNpYmxlIGhlYXAgdHVwbGUgZm9yIHRoaXMgaW5kZXggZW50cnkuCi0JCSAqIElmIHdlIGRvbid0 IGZpbmQgYW55dGhpbmcsIGxvb3AgYXJvdW5kIGFuZCBncmFiIHRoZSBuZXh0IFRJRCBmcm9tCi0J CSAqIHRoZSBpbmRleC4KLQkJICovCi0JCUFzc2VydChJdGVtUG9pbnRlcklzVmFsaWQoJnNjYW4t PnhzX2hlYXB0aWQpKTsKLQkJaWYgKGluZGV4X2ZldGNoX2hlYXAoc2Nhbiwgc2xvdCkpCi0JCQly ZXR1cm4gdHJ1ZTsKLQl9Ci0KLQlyZXR1cm4gZmFsc2U7Ci19Ci0KIC8qIC0tLS0tLS0tLS0tLS0t LS0KICAqCQlpbmRleF9nZXRiaXRtYXAgLSBnZXQgYWxsIHR1cGxlcyBhdCBvbmNlIGZyb20gYW4g aW5kZXggc2NhbgogICoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRl eGJhdGNoLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhiYXRjaC5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMC4uMmE3MGNjNzFjCi0tLSAvZGV2L251bGwKKysr IGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YmF0Y2guYwpAQCAtMCwwICsxLDY5NiBA QAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogaW5kZXhiYXRjaC5jCisgKgkgIEJhdGNoLWJh c2VkIGluZGV4IHNjYW4gaW5mcmFzdHJ1Y3R1cmUgZm9yIHRoZSBhbWdldGJhdGNoIGludGVyZmFj ZS4KKyAqCisgKiBUaGlzIG1vZHVsZSBwcm92aWRlcyB0aGUgY29yZSBpbmZyYXN0cnVjdHVyZSBm b3IgYmF0Y2gtYmFzZWQgaW5kZXggc2NhbnMsCisgKiB3aGljaCBhbGxvdyBpbmRleCBBTXMgdG8g cmV0dXJuIG11bHRpcGxlIG1hdGNoaW5nIFRJRHMgcGVyIHBhZ2UgaW4gYSBzaW5nbGUKKyAqIGNh bGwuICBUaGUgYmF0Y2ggcmluZyBidWZmZXIgaXMgbWFuYWdlZCBieSB0aGUgdGFibGUgQU0sIHdp dGggaGVscCBmcm9tIHVzLAorICogYW5kIHdpdGggaGVscCBmcm9tIHRoZSByaW5nIGJ1ZmZlciBp bmxpbmUgZnVuY3Rpb25zIGluIHJlbHNjYW4uaC4gIFRoaXMKKyAqIGFwcHJvYWNoIGVuYWJsZXMg ZWZmaWNpZW50IHByZWZldGNoaW5nIG9mIHRhYmxlIEFNIGJsb2NrcyBkdXJpbmcgb3JkZXJlZAor ICogaW5kZXggc2NhbnMuCisgKgorICogVGhlIHJpbmcgYnVmZmVyIGxvYWRzIGJhdGNoZXMgaW4g aW5kZXgga2V5IHNwYWNlIG9yZGVyLgorICoKKyAqIFRoZXJlJ3MgdGhyZWUgdHlwZXMgb2YgZnVu Y3Rpb25zIGluIHRoaXMgbW9kdWxlOgorICoKKyAqIDEuIENvcmUgYmF0Y2ggc2NhbiBsaWZlY3lj bGUgKGluZGV4X2JhdGNoc2Nhbl8qKTogRnVuY3Rpb25zIHRoYXQgbWFuYWdlCisgKiAgICBiYXRj aCBzY2FuIHN0YXRlIGluY2x1ZGluZyBpbml0aWFsaXphdGlvbiwgcmVzZXQsIGNsZWFudXAsIGFu ZCB0aGUKKyAqICAgIG1hcmsvcmVzdG9yZSBvcGVyYXRpb25zIG5lZWRlZCBmb3IgbWVyZ2Ugam9p bnMuICBDYWxsZWQgYnkgaW5kZXhhbS5jCisgKiAgICByb3V0aW5lcyB0aGF0IG1hbmFnZSBpbmRl eCBzY2FucyBvbiBiZWhhbGYgb2YgdGhlIGNvcmUgZXhlY3V0b3IuCisgKgorICogMi4gVGFibGUg QU0gdXRpbGl0aWVzICh0YWJsZWFtX3V0aWxfKik6IEhlbHBlciBmdW5jdGlvbnMgY2FsbGVkIGJ5 IHRhYmxlCisgKiAgICBBTXMgZHVyaW5nIGFtZ2V0YmF0Y2ggaW5kZXggc2NhbnMuICBUaGVzZSBo YW5kbGUgY3Jvc3MtYmF0Y2ggZGlyZWN0aW9uCisgKiAgICBjaGFuZ2VzLCByZWNvcmRpbmcgZGVh ZCBpdGVtcyBmb3IgbGF0ZXIgTFBfREVBRCBtYXJraW5nLCBhbmQgZnJlZWluZworICogICAgYmF0 Y2hlcyB3aGVuIHRoZSB0YWJsZSBBTSBpcyBkb25lIHdpdGggdGhlbS4KKyAqCisgKiAzLiBJbmRl eCBBTSB1dGlsaXRpZXMgKGluZGV4YW1fdXRpbF8qKTogSGVscGVyIGZ1bmN0aW9ucyBjYWxsZWQg YnkgaW5kZXgKKyAqICAgIEFNcyB0aGF0IGltcGxlbWVudCB0aGUgYW1nZXRiYXRjaCBpbnRlcmZh Y2UuICBUaGVzZSBtYW5hZ2UgYmF0Y2gKKyAqICAgIGFsbG9jYXRpb24sIGluZGV4IHBhZ2UgYnVm ZmVyIGxvY2sgcmVsZWFzZSwgYW5kIGJhdGNoIG1lbW9yeSByZWN5Y2xpbmcuCisgKgorICogVGhl c2UgdGhyZWUgbGF5ZXJzIGNvb3JkaW5hdGUgd2l0aG91dCBleHBsaWNpdCBjb3VwbGluZzogdGhl IGNvcmUgbGlmZWN5Y2xlCisgKiBmdW5jdGlvbnMgYXNzdW1lIHRoYXQgdGFibGUgQU1zIHVzZSBz Y2FuUG9zL3NjYW5CYXRjaCBhbmQgcHJlZmV0Y2hQb3MvCisgKiBwcmVmZXRjaEJhdGNoIGluIGEg c3RhbmRhcmRpemVkIHdheSAoc2VlIGhlYXBhbV9oYW5kbGVyLmMgZm9yIHRoZSByZWZlcmVuY2UK KyAqIGltcGxlbWVudGF0aW9uKSwgd2hpbGUgdGFibGUgQU1zIGFzc3VtZSB0aGF0IGluZGV4IEFN cyBmcmVlIGFuZCB1bmxvY2sKKyAqIGJhdGNoZXMgYWNjb3JkaW5nIHRvIHRoZSBjb252ZW50aW9u cyBlc3RhYmxpc2hlZCBoZXJlLiAgU2VlIGluZGV4YW0uc2dtbAorICogZm9yIHRoZSBmdWxsIHNw ZWNpZmljYXRpb24gb2YgdGhlIGFtZ2V0YmF0Y2gvYW1mcmVlYmF0Y2ggY29udHJhY3QuCisgKgor ICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjYsIFBvc3RncmVTUUwgR2xvYmFsIERl dmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMg b2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqCisgKiBJREVOVElGSUNBVElP TgorICoJICBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhiYXRjaC5jCisgKgorICotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgKi8KKworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJh Y2Nlc3MvYW1hcGkuaCIKKyNpbmNsdWRlICJhY2Nlc3MvdGFibGVhbS5oIgorI2luY2x1ZGUgImNv bW1vbi9pbnQuaCIKKyNpbmNsdWRlICJsaWIvcXVuaXF1ZS5oIgorI2luY2x1ZGUgInV0aWxzL21l bWRlYnVnLmgiCisKK3N0YXRpYyBpbnQJYmF0Y2hfY29tcGFyZV9pbnQoY29uc3Qgdm9pZCAqdmEs IGNvbnN0IHZvaWQgKnZiKTsKKworLyoKKyAqIFNldHMgdXAgdGhlIGJhdGNoIHJpbmcgYnVmZmVy IHN0cnVjdHVyZSBmb3IgdXNlIGJ5IGFuIGluZGV4IHNjYW4uCisgKgorICogT25seSBjYWxsIGhl cmUgd2hlbiBhbGwgb2YgdGhlIGluZGV4IHJlbGF0ZWQgZmllbGRzIGluICdzY2FuJyB3ZXJlIGFs cmVhZHkKKyAqIGluaXRpYWxpemVkLgorICovCit2b2lkCitpbmRleF9iYXRjaHNjYW5faW5pdChJ bmRleFNjYW5EZXNjIHNjYW4pCit7CisJLyogQm90aCBhbWdldGJhdGNoIGFuZCBhbWZyZWViYXRj aCBtdXN0IGJlIHByZXNlbnQgdG9nZXRoZXIgKi8KKwlBc3NlcnQoc2Nhbi0+aW5kZXhSZWxhdGlv bi0+cmRfaW5kYW0tPmFtZ2V0YmF0Y2ggIT0gTlVMTCk7CisJQXNzZXJ0KHNjYW4tPmluZGV4UmVs YXRpb24tPnJkX2luZGFtLT5hbWZyZWViYXRjaCAhPSBOVUxMKTsKKworCXNjYW4tPmJhdGNocmlu Z2J1Zi5zY2FuUG9zLnZhbGlkID0gZmFsc2U7CisJc2Nhbi0+YmF0Y2hyaW5nYnVmLm1hcmtQb3Mu dmFsaWQgPSBmYWxzZTsKKworCXNjYW4tPmJhdGNocmluZ2J1Zi5tYXJrQmF0Y2ggPSBOVUxMOwor CXNjYW4tPmJhdGNocmluZ2J1Zi5oZWFkQmF0Y2ggPSAwOwkvKiBpbml0aWFsIGhlYWQgYmF0Y2gg Ki8KKwlzY2FuLT5iYXRjaHJpbmdidWYubmV4dEJhdGNoID0gMDsJLyogaW5pdGlhbCBiYXRjaCBz dGFydHMgZW1wdHkgKi8KKwlzY2FuLT5iYXRjaHJpbmdidWYuZG9uZSA9IGZhbHNlOworCW1lbXNl dCgmc2Nhbi0+YmF0Y2hyaW5nYnVmLmNhY2hlLCAwLCBzaXplb2Yoc2Nhbi0+YmF0Y2hyaW5nYnVm LmNhY2hlKSk7CisKKwkvKgorCSAqIFN0YXJ0IGJ5IHJlc29sdmluZyB2aXNpYmlsaXR5IGZvciBq dXN0IG9uZSBpdGVtLCB0aGVuIGdyYWR1YWxseSByYW1wIHVwCisJICogdGhlIG51bWJlciBvZiBp dGVtcyBwcm9jZXNzZWQuCisJICovCisJc2Nhbi0+YmF0Y2hyaW5nYnVmLnZtSXRlbXMgPSAxOwor CisJc2Nhbi0+dXNlYmF0Y2hyaW5nID0gdHJ1ZTsKK30KKworLyoKKyAqIFJlc2V0IHN0YXRlIHVz ZWQgZm9yIGEgYmF0Y2ggaW5kZXggc2NhbgorICoKKyAqIFJlc2V0cyBhbGwgbG9hZGVkIGJhdGNo ZXMgaW4gdGhlIHJpbmcgYnVmZmVyLCBhbmQgcmVzZXRzIHRoZSByZWFkIHBvc2l0aW9uCisgKiB0 byB0aGUgaW5pdGlhbCBzdGF0ZSAob3IganVzdCBpbml0aWFsaXplIHJpbmcgYnVmZmVyIHN0YXRl KS4gIFdoZW4KKyAqICdjb21wbGV0ZScgaXMgdHJ1ZSwgYWxzbyBmcmVlcyB0aGUgc2NhbidzIG1h cmtlZCBiYXRjaCAoaWYgYW55KSwgd2hpY2ggaXMKKyAqIHVzZWZ1bCB3aGVuIGVuZGluZyBhbiBh bWdldGJhdGNoLWJhc2VkIGluZGV4IHNjYW4uCisgKi8KK3ZvaWQKK2luZGV4X2JhdGNoc2Nhbl9y ZXNldChJbmRleFNjYW5EZXNjIHNjYW4sIGJvb2wgY29tcGxldGUpCit7CisJQmF0Y2hSaW5nQnVm ZmVyICpiYXRjaHJpbmdidWYgPSAmc2Nhbi0+YmF0Y2hyaW5nYnVmOworCUluZGV4U2NhbkJhdGNo IG1hcmtCYXRjaCA9IGJhdGNocmluZ2J1Zi0+bWFya0JhdGNoOworCWJvb2wJCW1hcmtCYXRjaEZy ZWVkID0gZmFsc2U7CisKKwlBc3NlcnQoc2Nhbi0+eHNfaGVhcGZldGNoKTsKKworCWJhdGNocmlu Z2J1Zi0+c2NhblBvcy52YWxpZCA9IGZhbHNlOworCisJLyoKKwkgKiBXaGVuIGNhbGxlZCB3aXRo ICJjb21wbGV0ZSIgd2UgbXVzdCBtYWtlIHN1cmUgdGhhdCBtYXJrQmF0Y2ggaXMgZnJlZWQsCisJ ICogYW5kIHRoYXQgYWxsIG1hcmtCYXRjaCByZWxhdGVkIHN0YXRlIGlzIHJlc2V0CisJICovCisJ aWYgKGNvbXBsZXRlICYmIHVubGlrZWx5KG1hcmtCYXRjaCAhPSBOVUxMKSkKKwl7CisJCS8qCisJ CSAqIFdlJ2xsIGZyZWUgbWFya0JhdGNoIGR1cmluZyB0aGlzIGNhbGwuCisJCSAqCisJCSAqIE5v dGU6IHdlIG11c3Qgc2V0IGJhdGNocmluZ2J1Zi5tYXJrQmF0Y2ggdG8gTlVMTCB1cCBmcm9udCBs aWtlIHRoaXMKKwkJICogc28gdGhhdCB0YWJsZWFtX3V0aWxfZnJlZV9iYXRjaCBhY3R1YWxseSBm cmVlcyBtYXJrQmF0Y2ggbGF0ZXIgb24uCisJCSAqLworCQliYXRjaHJpbmdidWYtPm1hcmtCYXRj aCA9IE5VTEw7CisJCWJhdGNocmluZ2J1Zi0+bWFya1Bvcy52YWxpZCA9IGZhbHNlOworCX0KKwor CS8qCisJICogUmVsZWFzZSBhbGwgY3VycmVudGx5IGxvYWRlZCBiYXRjaGVzLCBiZWluZyBzdXJl IHRvIGF2b2lkIGZyZWVpbmcKKwkgKiBtYXJrQmF0Y2ggKHVubGVzcyBjYWxsZWQgd2l0aCBjb21w bGV0ZSwgd2hlcmUgd2UncmUgc3VwcG9zZWQgdG8pCisJICovCisJd2hpbGUgKGluZGV4X3NjYW5f YmF0Y2hfY291bnQoc2NhbikgPiAwKQorCXsKKwkJSW5kZXhTY2FuQmF0Y2ggYmF0Y2ggPSBpbmRl eF9zY2FuX2JhdGNoKHNjYW4sCisJCQkJCQkJCQkJCQliYXRjaHJpbmdidWYtPmhlYWRCYXRjaCk7 CisKKwkJaWYgKGNvbXBsZXRlIHx8IGJhdGNoICE9IG1hcmtCYXRjaCkKKwkJeworCQkJbWFya0Jh dGNoRnJlZWQgPSAoYmF0Y2ggPT0gbWFya0JhdGNoKTsKKwkJCXRhYmxlYW1fdXRpbF9mcmVlX2Jh dGNoKHNjYW4sIGJhdGNoKTsKKwkJfQorCisJCS8qIHVwZGF0ZSB0aGUgdmFsaWQgcmFuZ2UsIHNv IHRoYXQgYXNzZXJ0cyAvIGRlYnVnZ2luZyB3b3JrcyAqLworCQliYXRjaHJpbmdidWYtPmhlYWRC YXRjaCsrOworCX0KKworCWlmIChjb21wbGV0ZSAmJiBtYXJrQmF0Y2ggIT0gTlVMTCAmJiAhbWFy a0JhdGNoRnJlZWQpCisJeworCQkvKgorCQkgKiBXZSBkaWRuJ3QgZnJlZSBtYXJrQmF0Y2ggYmVj YXVzZSBpdCB3YXMgbm8gbG9uZ2VyIGxvYWRlZCBpbiByaW5nCisJCSAqIGJ1ZmZlci4gIERvIHNv IG5vdyBpbnN0ZWFkLgorCQkgKi8KKwkJdGFibGVhbV91dGlsX2ZyZWVfYmF0Y2goc2NhbiwgbWFy a0JhdGNoKTsKKwl9CisKKwkvKiByZXNldCByZWxldmFudCBiYXRjaCBzdGF0ZSBmaWVsZHMgKi8K KwliYXRjaHJpbmdidWYtPmhlYWRCYXRjaCA9IDA7CS8qIGluaXRpYWwgYmF0Y2ggKi8KKwliYXRj aHJpbmdidWYtPm5leHRCYXRjaCA9IDA7CS8qIGluaXRpYWwgYmF0Y2ggaXMgZW1wdHkgKi8KKwor CS8qIHJlc2V0IHRoZSB2aXNpYmlsaXR5IGNoZWNrIGJhdGNoIHNpemUgKi8KKwliYXRjaHJpbmdi dWYtPnZtSXRlbXMgPSAxOworfQorCisvKgorICogRnJlZSByZXNvdXJjZXMgYXQgZW5kIG9mIGJh dGNoIGluZGV4IHNjYW4KKyAqCisgKiBDYWxsZWQgd2hlbiBhbiBpbmRleCBzY2FuIGlzIGJlaW5n IGVuZGVkLCByaWdodCBiZWZvcmUgdGhlIG93bmluZyBzY2FuCisgKiBkZXNjcmlwdG9yIGdvZXMg YXdheS4gIENsZWFucyB1cCBhbGwgYmF0Y2ggcmVsYXRlZCByZXNvdXJjZXMuCisgKi8KK3ZvaWQK K2luZGV4X2JhdGNoc2Nhbl9lbmQoSW5kZXhTY2FuRGVzYyBzY2FuKQoreworCS8qIENhbGwgYW1m cmVlYmF0Y2ggYW5kIGFsbCByZW1haW5pbmcgbG9hZGVkIGJhdGNoZXMgKGV2ZW4gbWFya0JhdGNo KSAqLworCXNjYW4tPmJhdGNocmluZ2J1Zi5kb25lID0gdHJ1ZTsKKwlpbmRleF9iYXRjaHNjYW5f cmVzZXQoc2NhbiwgdHJ1ZSk7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IElOREVYX1NDQU5fQ0FD SEVfQkFUQ0hFUzsgaSsrKQorCXsKKwkJSW5kZXhTY2FuQmF0Y2ggY2FjaGVkID0gc2Nhbi0+YmF0 Y2hyaW5nYnVmLmNhY2hlW2ldOworCisJCWlmIChjYWNoZWQgPT0gTlVMTCkKKwkJCWNvbnRpbnVl OworCisJCWlmIChjYWNoZWQtPmtpbGxlZEl0ZW1zKQorCQkJcGZyZWUoY2FjaGVkLT5raWxsZWRJ dGVtcyk7CisJCWlmIChjYWNoZWQtPmN1cnJUdXBsZXMpCisJCQlwZnJlZShjYWNoZWQtPmN1cnJU dXBsZXMpOworCQlwZnJlZShjYWNoZWQpOworCX0KK30KKworLyoKKyAqIFNldCBhIG1hcmsgZnJv bSBzY2FuUG9zIHBvc2l0aW9uCisgKgorICogU2F2ZXMgdGhlIGN1cnJlbnQgcmVhZCBwb3NpdGlv biBhbmQgYXNzb2NpYXRlZCBiYXRjaCBzbyB0aGF0IHRoZSBzY2FuIGNhbgorICogYmUgcmVzdG9y ZWQgdG8gdGhpcyBwb2ludCBsYXRlciwgdmlhIGEgY2FsbCB0byBpbmRleF9iYXRjaHNjYW5fcmVz dG9yZV9wb3MuCisgKiBUaGUgbWFya2VkIGJhdGNoIGlzIHJldGFpbmVkIGFuZCBub3QgZnJlZWQg dW50aWwgYSBuZXcgbWFyayBpcyBzZXQgb3IgdGhlCisgKiBzY2FuIGVuZHMgKG9yIHVudGlsIHRo ZSBtYXJrIGlzIHJlc3RvcmVkKS4KKyAqLwordm9pZAoraW5kZXhfYmF0Y2hzY2FuX21hcmtfcG9z KEluZGV4U2NhbkRlc2Mgc2NhbikKK3sKKwlCYXRjaFJpbmdCdWZmZXIgKmJhdGNocmluZ2J1ZiA9 ICZzY2FuLT5iYXRjaHJpbmdidWY7CisJQmF0Y2hSaW5nSXRlbVBvcyAqc2NhblBvcyA9ICZzY2Fu LT5iYXRjaHJpbmdidWYuc2NhblBvczsKKwlCYXRjaFJpbmdJdGVtUG9zICptYXJrUG9zID0gJmJh dGNocmluZ2J1Zi0+bWFya1BvczsKKwlJbmRleFNjYW5CYXRjaCBzY2FuQmF0Y2ggPSBpbmRleF9z Y2FuX2JhdGNoKHNjYW4sIHNjYW5Qb3MtPmJhdGNoKTsKKwlJbmRleFNjYW5CYXRjaCBtYXJrQmF0 Y2ggPSBiYXRjaHJpbmdidWYtPm1hcmtCYXRjaDsKKwlib29sCQlmcmVlTWFya0JhdGNoOworCisJ LyoKKwkgKiBGcmVlIHRoZSBwcmV2aW91cyBtYXJrIGJhdGNoIChpZiBhbnkpIC0tIGJ1dCBvbmx5 IGlmIGl0IGlzbid0IG91cgorCSAqIHNjYW5CYXRjaCAoZGVmZW5zaXZlbHkgbWFrZSBzdXJlIHRo YXQgbWFya0JhdGNoIGlzbid0IHNvbWUgbGF0ZXIKKwkgKiBzdGlsbC1uZWVkZWQgYmF0Y2gsIHRv bykKKwkgKi8KKwlpZiAoIW1hcmtCYXRjaCB8fCBtYXJrQmF0Y2ggPT0gc2NhbkJhdGNoKQorCXsK KwkJLyogRGVmaW5pdGVseSBubyBtYXJrQmF0Y2ggdGhhdCB3ZSBzaG91bGQgZnJlZSBub3cgKi8K KwkJZnJlZU1hcmtCYXRjaCA9IGZhbHNlOworCX0KKwllbHNlIGlmIChsaWtlbHkoIWluZGV4X3Nj YW5fYmF0Y2hfbG9hZGVkKHNjYW4sIG1hcmtQb3MtPmJhdGNoKSkpCisJeworCQkvKiBEZWZpbml0 ZWx5IGhhdmUgYSBuby1sb25nZXItbG9hZGVkIG1hcmtCYXRjaCB0byBmcmVlICovCisJCWZyZWVN YXJrQmF0Y2ggPSB0cnVlOworCX0KKwllbHNlCisJeworCQkvKgorCQkgKiBJdCBsb29rcyBsaWtl IG1hcmtCYXRjaCBpcyBsb2FkZWQvc3RpbGwgbmVlZGVkIHdpdGhpbiBiYXRjaHJpbmdidWYuCisJ CSAqCisJCSAqIGluZGV4X3NjYW5fYmF0Y2hfbG9hZGVkIGluZGljYXRlcyB0aGF0IG1hcmtwb3Mt PmJhdGNoIGlzIGxvYWRlZAorCQkgKiBhbHJlYWR5LCBidXQgd2UgY2Fubm90IGZ1bGx5IHRydXN0 IGl0IGhlcmUuICBJdCdzIGp1c3QgYWJvdXQKKwkJICogcG9zc2libGUgdGhhdCBtYXJrcG9zLT5i YXRjaCBmYWxscyB3aXRoaW4gYSBzaW5jZS1yZWN5Y2xlZCByYW5nZSBvZgorCQkgKiBiYXRjaCBv ZmZzZXQgbnVtYmVycyAoZm9sbG93aW5nIHVpbnQ4IG92ZXJmbG93KS4KKwkJICoKKwkJICogTWFr ZSBzdXJlIHRoYXQgbWFya0JhdGNoIHJlYWxseSBpcyBsb2FkZWQgYnkgZGlyZWN0bHkgY29tcGFy aW5nIGl0CisJCSAqIGFnYWluc3QgYWxsIGxvYWRlZCBiYXRjaGVzLiAgV2UgbXVzdCBub3QgZmFp bCB0byByZWxlYXNlIG1hcmtCYXRjaAorCQkgKiB3aGVuIG5vYm9keSBlbHNlIHdpbGwgbGF0ZXIg b24uCisJCSAqCisJCSAqIE5vdGU6IGluIHByYWN0aWNlIHdlJ3JlIHZlcnkgdW5saWtlbHkgdG8g ZW5kIHVwIGhlcmUuICBJdCBpcyB2ZXJ5CisJCSAqIGF0eXBpY2FsIGZvciBhbiBpbmRleCBzY2Fu IG9uIHRoZSBpbm5lciBzaWRlIG9mIGEgbWVyZ2Ugam9pbiB0bworCQkgKiBob2xkIG9uIHRvIGEg bWFyayB0aGF0IHRyYWlscyB0aGUgY3VycmVudCBzY2FuQmF0Y2ggdGhpcyBtdWNoLgorCQkgKi8K KwkJZnJlZU1hcmtCYXRjaCA9IHRydWU7CS8qIGkuZS4gaW5kZXhfc2Nhbl9iYXRjaF9sb2FkZWQg bGllZCB0byB1cyAqLworCisJCWZvciAodWludDggaSA9IGJhdGNocmluZ2J1Zi0+aGVhZEJhdGNo OyBpICE9IGJhdGNocmluZ2J1Zi0+bmV4dEJhdGNoOyBpKyspCisJCXsKKwkJCWlmIChpbmRleF9z Y2FuX2JhdGNoKHNjYW4sIGkpID09IG1hcmtCYXRjaCkKKwkJCXsKKwkJCQkvKiBpbmRleF9zY2Fu X2JhdGNoX2xvYWRlZCB3YXMgcmlnaHQvbm8gb3ZlcmZsb3cgaGFwcGVuZWQgKi8KKwkJCQlmcmVl TWFya0JhdGNoID0gZmFsc2U7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoZnJl ZU1hcmtCYXRjaCkKKwl7CisJCS8qIEZyZWUgbWFya0JhdGNoLCBzaW5jZSBpdCBpc24ndCBsb2Fk ZWQvbmVlZGVkIGZvciBiYXRjaHJpbmdidWYgKi8KKwkJYmF0Y2hyaW5nYnVmLT5tYXJrQmF0Y2gg PSBOVUxMOyAvKiBlbHNlIGNhbGwgd29uJ3QgZnJlZSBtYXJrQmF0Y2ggKi8KKwkJdGFibGVhbV91 dGlsX2ZyZWVfYmF0Y2goc2NhbiwgbWFya0JhdGNoKTsKKwl9CisKKwkvKiBjb3B5IHRoZSBzY2Fu J3MgcG9zaXRpb24gKi8KKwliYXRjaHJpbmdidWYtPm1hcmtQb3MgPSAqc2NhblBvczsKKwliYXRj aHJpbmdidWYtPm1hcmtCYXRjaCA9IHNjYW5CYXRjaDsKK30KKworLyoKKyAqIFJlc3RvcmUgbWFy ayB0byBzY2FuUG9zIHBvc2l0aW9uCisgKgorICogUmVzdG9yZXMgdGhlIHNjYW4gdG8gYSBwb3Np dGlvbiBzYXZlZCBieSBpbmRleF9iYXRjaHNjYW5fbWFya19wb3MgZWFybGllci4KKyAqIFRoZSBz Y2FuJ3MgbWFya1BvcyBiZWNvbWVzIGl0cyBzY2FuUG9zLiAgVGhlIG1hcmtlZCBiYXRjaCBpcyBy ZXN0b3JlZCBhcworICogdGhlIGN1cnJlbnQgc2NhbkJhdGNoIHdoZW4gbmVlZGVkLgorICoKKyAq IFdlIGp1c3QgZGlzY2FyZCBhbGwgYmF0Y2hlcyAob3RoZXIgdGhhbiBtYXJrQmF0Y2gvcmVzdG9y ZWQgc2NhbkJhdGNoKSwKKyAqIGV4Y2VwdCB3aGVuIG1hcmtCYXRjaCBpcyBhbHJlYWR5IHRoZSBz Y2FuJ3MgY3VycmVudCBzY2FuQmF0Y2guICBXZSBhbHdheXMKKyAqIGludmFsaWRhdGUgcHJlZmV0 Y2hQb3MgYW5kIGNsb3NlIHRoZSBzY2FuJ3MgcmVhZCBzdHJlYW0sIGlmIGFueS4gIFRoaXMKKyAq IGFwcHJvYWNoIGtlZXBzIHRoaW5ncyBzaW1wbGUgZm9yIHRhYmxlIEFNczogbW9zdCBjb2RlIHRo YXQgZGVhbHMgd2l0aAorICogYmF0Y2hlcyBpcyB0aGVyZWJ5IGFibGUgdG8gYXNzdW1lIHRoYXQg dGhlIGNvbW1vbiBjYXNlIHdoZXJlIHNjYW4gZGlyZWN0aW9uCisgKiBuZXZlciBjaGFuZ2VzIGlz IHRoZSBvbmx5IGNhc2UgKHRhYmxlYW1fdXRpbF9iYXRjaF9kaXJjaGFuZ2UgdGFrZXMgYQorICog c2ltaWxhciBhcHByb2FjaCB0byBoYW5kbGluZyBhIGNyb3NzLWJhdGNoIGNoYW5nZSBpbiBzY2Fu IGRpcmVjdGlvbikuCisgKi8KK3ZvaWQKK2luZGV4X2JhdGNoc2Nhbl9yZXN0b3JlX3BvcyhJbmRl eFNjYW5EZXNjIHNjYW4pCit7CisJQmF0Y2hSaW5nQnVmZmVyICpiYXRjaHJpbmdidWYgPSAmc2Nh bi0+YmF0Y2hyaW5nYnVmOworCUJhdGNoUmluZ0l0ZW1Qb3MgKnNjYW5Qb3MgPSAmc2Nhbi0+YmF0 Y2hyaW5nYnVmLnNjYW5Qb3M7CisJQmF0Y2hSaW5nSXRlbVBvcyAqbWFya1BvcyA9ICZiYXRjaHJp bmdidWYtPm1hcmtQb3M7CisJSW5kZXhTY2FuQmF0Y2ggbWFya0JhdGNoID0gYmF0Y2hyaW5nYnVm LT5tYXJrQmF0Y2g7CisJSW5kZXhTY2FuQmF0Y2ggc2NhbkJhdGNoID0gaW5kZXhfc2Nhbl9iYXRj aChzY2FuLCBzY2FuUG9zLT5iYXRjaCk7CisKKwlpZiAoc2NhbkJhdGNoID09IG1hcmtCYXRjaCkK Kwl7CisJCS8qIG1hcmtCYXRjaCBpcyBhbHJlYWR5IHNjYW5CYXRjaDsgbmVlZG4ndCBjaGFuZ2Ug YmF0Y2hyaW5nYnVmICovCisJCUFzc2VydChzY2FuUG9zLT5iYXRjaCA9PSBtYXJrUG9zLT5iYXRj aCk7CisKKwkJc2NhblBvcy0+aXRlbSA9IG1hcmtQb3MtPml0ZW07CisJCXJldHVybjsKKwl9CisK KwkvKgorCSAqIG1hcmtCYXRjaCBpcyBiZWhpbmQgc2NhbkJhdGNoLCBhbmQgc28gbXVzdCBub3Qg YmUgbG9hZGVkIGFueW1vcmUuICBXZQorCSAqIGhhdmUgdG8gZGVhbCB3aXRoIHJlc3RvcmluZyB0 aGUgbWFyayB0aGUgaGFyZCB3YXk6IGJ5IGludmFsaWRhdGluZyBhbGwKKwkgKiBvdGhlciBsb2Fk ZWQgYmF0Y2hlcy4gIFRoaXMgaXMgc2ltaWxhciB0byB0aGUgY2FzZSB3aGVyZSB0aGUgc2Nhbgor CSAqIGRpcmVjdGlvbiBjaGFuZ2VzIGFuZCB0aGUgc2NhbiBhY3R1YWxseSBjcm9zc2VzIGJhdGNo L2luZGV4IHBhZ2UKKwkgKiBib3VuZGFyaWVzIChzZWUgdGFibGVhbV91dGlsX2JhdGNoX2RpcmNo YW5nZSkuCisJICoKKwkgKiBDYWxsIGFtcG9zcmVzZXQgdG8gbGV0IGluZGV4IEFNIGtub3cgdG8g aW52YWxpZGF0ZSBhbnkgcHJpdmF0ZSBzdGF0ZQorCSAqIHRoYXQgaW5kZXBlbmRlbnRseSB0cmFj a3MgdGhlIHNjYW4ncyBwcm9ncmVzcy4KKwkgKi8KKwlzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9p bmRhbS0+YW1wb3NyZXNldChzY2FuLCBtYXJrQmF0Y2gpOworCisJLyogUmVtb3ZlIGFsbCBiYXRj aGVzIGZyb20gdGhlIHJpbmcgYnVmZmVyIGV4Y2VwdCBmb3IgdGhlIG1hcmtlZCBiYXRjaCAqLwor CWluZGV4X2JhdGNoc2Nhbl9yZXNldChzY2FuLCBmYWxzZSk7CisKKwkvKgorCSAqICJBcHBlbmQi IG1hcmtCYXRjaCwgbWFraW5nIHRoZSByaW5nIGJ1ZmZlciBhcHBlYXIgYXMgaWYgaXQgd2FzIHRo ZQorCSAqIGZpcnN0IGJhdGNoIGV2ZXIgcmV0dXJuZWQgYnkgYW1nZXRiYXRjaCBmb3IgdGhlIHNj YW4KKwkgKi8KKwltYXJrUG9zLT5iYXRjaCA9IDA7CisJYmF0Y2hyaW5nYnVmLT5zY2FuUG9zID0g Km1hcmtQb3M7CisJYmF0Y2hyaW5nYnVmLT5uZXh0QmF0Y2ggPSBiYXRjaHJpbmdidWYtPmhlYWRC YXRjaCA9IG1hcmtQb3MtPmJhdGNoOworCWluZGV4X3NjYW5fYmF0Y2hfYXBwZW5kKHNjYW4sIG1h cmtCYXRjaCk7CisJQXNzZXJ0KGluZGV4X3NjYW5fYmF0Y2goc2NhbiwgYmF0Y2hyaW5nYnVmLT5z Y2FuUG9zLmJhdGNoKSA9PSBtYXJrQmF0Y2gpOworCisJLyoKKwkgKiBOb3RlOiBtYXJrQmF0Y2gu a2lsbGVkSXRlbXNbXSBtaWdodCBhbHJlYWR5IGNvbnRhaW4gZGVhZCBpdGVtcywgYW5kCisJICog bWlnaHQgeWV0IGhhdmUgbW9yZSBkZWFkIGl0ZW1zIHNhdmVkLiAgdGFibGVhbV91dGlsX2ZyZWVf YmF0Y2ggaXMKKwkgKiBwcmVwYXJlZCBmb3IgdGhhdC4KKwkgKi8KK30KKworLyogLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICoJCQl1dGlsaXR5IGZ1bmN0aW9ucyBjYWxsZWQgYnkgdGFibGUgQU1zCisgKiAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg Ki8KKworLyoKKyAqIEhhbmRsZSBjcm9zcy1iYXRjaCBjaGFuZ2UgaW4gc2NhbiBkaXJlY3Rpb24K KyAqCisgKiBDYWxsZWQgYnkgdGFibGUgQU0gd2hlbiBpdHMgc2NhbiBjaGFuZ2VzIGRpcmVjdGlv biBpbiBhIHdheSB0aGF0CisgKiBuZWNlc3NpdGF0ZXMgYmFja2luZyB0aGUgc2NhbiB1cCB0byBh biBpbmRleCBwYWdlIG9yaWdpbmFsbHkgYXNzb2NpYXRlZAorICogd2l0aCBhIG5vdy1mcmVlZCBi YXRjaC4KKyAqCisgKiBXaGVuIHdlIHJldHVybiwgYmF0Y2hyaW5nYnVmIHdpbGwgb25seSBjb250 YWluIG9uZSBiYXRjaCAodGhlIGN1cnJlbnQKKyAqIGhlYWRCYXRjaC9zY2FuQmF0Y2gpLiAgQ2Fs bGVyIGNhbiB0aGVuIHNhZmVseSBwYXNzIHRoaXMgYmF0Y2ggdG8gYW1nZXRiYXRjaAorICogdG8g ZGV0ZXJtaW5lIHdoaWNoIGJhdGNoIGNvbWVzIG5leHQgaW4gdGhlIG5ldyBzY2FuIGRpcmVjdGlv bi4gIEZyb20gdGhhdAorICogcG9pbnQgb24gYmF0Y2hyaW5nYnVmIHdpbGwgbG9vayBhcyBpZiBv dXIgbmV3IHNjYW4gZGlyZWN0aW9uIGhhZCBiZWVuIHVzZWQKKyAqIGZyb20gdGhlIHN0YXJ0LiAg VGhpcyBhcHByb2FjaCBpc24ndCBwYXJ0aWN1bGFybHkgZWZmaWNpZW50LCBidXQgaXQgd29ya3MK KyAqIHdlbGwgZW5vdWdoIGZvciB3aGF0IG91Z2h0IHRvIGJlIGEgcmVsYXRpdmVseSByYXJlIG9j Y3VycmVuY2UuCisgKi8KK3ZvaWQKK3RhYmxlYW1fdXRpbF9iYXRjaF9kaXJjaGFuZ2UoSW5kZXhT Y2FuRGVzYyBzY2FuKQoreworCUJhdGNoUmluZ0J1ZmZlciAqYmF0Y2hyaW5nYnVmID0gJnNjYW4t PmJhdGNocmluZ2J1ZjsKKwlJbmRleFNjYW5CYXRjaCBoZWFkOworCisJLyoKKwkgKiBSZWxlYXNl IGJhdGNoZXMgc3RhcnRpbmcgZnJvbSB0aGUgY3VycmVudCAidGFpbCIgYmF0Y2gsIHdvcmtpbmcK KwkgKiBiYWNrd2FyZHMgdW50aWwgdGhlIGN1cnJlbnQgaGVhZCBiYXRjaCAod2hpY2ggbXVzdCBh bHNvIGJlIHRoZSBjdXJyZW50CisJICogc2NhbkJhdGNoKSBpcyB0aGUgb25seSBiYXRjaCBoYXNu J3QgYmVlbiBmcmVlZAorCSAqLworCXdoaWxlIChpbmRleF9zY2FuX2JhdGNoX2NvdW50KHNjYW4p ID4gMSkKKwl7CisJCUluZGV4U2NhbkJhdGNoIHRhaWwgPSBpbmRleF9zY2FuX2JhdGNoKHNjYW4s CisJCQkJCQkJCQkJCSAgIGJhdGNocmluZ2J1Zi0+bmV4dEJhdGNoIC0gMSk7CisKKwkJQXNzZXJ0 KCFiYXRjaHJpbmdidWYtPm1hcmtCYXRjaCk7CisJCXRhYmxlYW1fdXRpbF9mcmVlX2JhdGNoKHNj YW4sIHRhaWwpOworCQliYXRjaHJpbmdidWYtPm5leHRCYXRjaC0tOworCX0KKworCS8qIHNjYW5C YXRjaCBpcyBub3cgdGhlIG9ubHkgYmF0Y2ggc3RpbGwgbG9hZGVkICovCisJQXNzZXJ0KGJhdGNo cmluZ2J1Zi0+aGVhZEJhdGNoID09IGJhdGNocmluZ2J1Zi0+c2NhblBvcy5iYXRjaCk7CisKKwkv KgorCSAqIERlYWwgd2l0aCBpbmRleCBBTSBzdGF0ZSB0aGF0IGluZGVwZW5kZW50bHkgdHJhY2tz IHRoZSBwcm9ncmVzcyBvZiB0aGUKKwkgKiBzY2FuLiAgRG8gdGhpcyBieSBmbGlwcGluZyB0aGUg YmF0Y2gtbGV2ZWwgc2NhbiBkaXJlY3Rpb24sIGFuZCB0aGVuCisJICogY2FsbGluZyB0aGUgaW5k ZXggQU0ncyBhbXBvc3Jlc2V0LgorCSAqLworCWhlYWQgPSBpbmRleF9zY2FuX2JhdGNoKHNjYW4s IGJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoKTsKKwloZWFkLT5kaXIgPSAtaGVhZC0+ZGlyOworCWlm IChzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1wb3NyZXNldCkKKwkJc2Nhbi0+aW5k ZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtcG9zcmVzZXQoc2NhbiwgaGVhZCk7Cit9CisKKy8qCisg KiBSZWNvcmQgdGhhdCBzY2FuUG9zIGl0ZW0gaXMgZGVhZAorICoKKyAqIFJlY29yZHMgYW4gb2Zm c2V0IHRvIHRoZSBzY2FuQmF0Y2ggaXRlbSBvZiB0aGUgY3VycmVudGx5LXJlYWQgdHVwbGUsIHNh dmluZworICogaXQgaW4gc2NhbkJhdGNoJ3Mga2lsbGVkSXRlbXMgYXJyYXkuIFRoZSBpdGVtcycg aW5kZXggdHVwbGVzIHdpbGwgbGF0ZXIgYmUKKyAqIG1hcmtlZCBMUF9ERUFEIHdoZW4gY3VycmVu dCBzY2FuQmF0Y2ggaXMgZnJlZWQgYnkgYW1mcmVlYmF0Y2ggcm91dGluZSAoc2VlCisgKiB0YWJs ZWFtX3V0aWxfZnJlZV9iYXRjaCB3cmFwcGVyIGZ1bmN0aW9uKS4KKyAqLwordm9pZAordGFibGVh bV91dGlsX2tpbGxfc2NhbnBvc2l0ZW0oSW5kZXhTY2FuRGVzYyBzY2FuKQoreworCUJhdGNoUmlu Z0l0ZW1Qb3MgKnNjYW5Qb3MgPSAmc2Nhbi0+YmF0Y2hyaW5nYnVmLnNjYW5Qb3M7CisJSW5kZXhT Y2FuQmF0Y2ggc2NhbkJhdGNoID0gaW5kZXhfc2Nhbl9iYXRjaChzY2FuLCBzY2FuUG9zLT5iYXRj aCk7CisKKwlpZiAoc2NhbkJhdGNoLT5raWxsZWRJdGVtcyA9PSBOVUxMKQorCQlzY2FuQmF0Y2gt PmtpbGxlZEl0ZW1zID0gcGFsbG9jX2FycmF5KGludCwgc2Nhbi0+bWF4aXRlbXNiYXRjaCk7CisJ aWYgKHNjYW5CYXRjaC0+bnVtS2lsbGVkIDwgc2Nhbi0+bWF4aXRlbXNiYXRjaCkKKwkJc2NhbkJh dGNoLT5raWxsZWRJdGVtc1tzY2FuQmF0Y2gtPm51bUtpbGxlZCsrXSA9IHNjYW5Qb3MtPml0ZW07 Cit9CisKKy8qCisgKiBSZWxlYXNlIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggYSBiYXRjaAor ICoKKyAqIENhbGxlZCBieSB0YWJsZSBBTSdzIG9yZGVyZWQgaW5kZXggc2NhbiBpbXBsZW1lbnRh dGlvbiB3aGVuIGl0IGlzIGZpbmlzaGVkCisgKiB3aXRoIGEgYmF0Y2ggYW5kIHdpc2hlcyB0byBy ZWxlYXNlIGl0cyByZXNvdXJjZXMuCisgKgorICogV2UgcmVsZWFzZSB0aGUgYmF0Y2gncyBidWZm ZXIgcGluIGlmIHRhYmxlIEFNIGhhc24ndCByZWxlYXNlZCBpdCBhbHJlYWR5LgorICogRm9yIHBs YWluIGluZGV4IHNjYW5zIHdpdGggYW4gTVZDQyBzbmFwc2hvdCwgdGhlIHRhYmxlIEFNIGNhbGxl ciByZWxlYXNlcworICogdGhlIHBpbiBpbW1lZGlhdGVseSwgc28gd2UgbmV2ZXIgcmVsZWFzZSB0 aGUgcGluIGhlcmUuICBJbmRleC1vbmx5IHNjYW5zCisgKiBtdXN0IGRlbGF5IGRyb3BwaW5nIHRo ZSBwaW4gdW50aWwgdmlzaWJpbGl0eSBpcyByZXNvbHZlZCBmb3IgYWxsIGl0ZW1zIGluCisgKiB0 aGUgYmF0Y2gsIHNvIHdlIG1heSBuZWVkIHRvIHJlbGVhc2UgdGhlIHBpbiBoZXJlLiAgRm9yIG5v bi1NVkNDIHNuYXBzaG90CisgKiBzY2FucywgdGhlIHBpbiBpcyBhbHdheXMgaGVsZCB1bnRpbCB0 aGlzIGZ1bmN0aW9uIHJlbGVhc2VzIGl0LgorICoKKyAqIFdlIGFsc28gY2FsbCB0aGUgaW5kZXgg QU0ncyBhbWZyZWViYXRjaCBjYWxsYmFjayB0byByZWxlYXNlIEFNLXNwZWNpZmljCisgKiByZXNv dXJjZXMsIGFuZCB0byBzZXQgTFBfREVBRCBiaXRzIG9uIHRoZSBiYXRjaCdzIGluZGV4IHBhZ2Ug KGluIGluZGV4IEFNcworICogdGhhdCBpbXBsZW1lbnQgdGhhdCBvcHRpbWl6YXRpb24pLiAgRXZl cnkgYW1mcmVlYmF0Y2ggcm91dGluZSBtdXN0IHJlY3ljbGUKKyAqIHRoZSB1bmRlcmx5aW5nIGJh dGNoIG1lbW9yeSBieSBwYXNzaW5nIGl0IHRvIGluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlLgor ICoKKyAqIE5vdGU6IENhbGxpbmcgaGVyZSB3aGVuICdiYXRjaCcgaXMgYWxzbyBiYXRjaHJpbmdi dWYubWFya0JhdGNoIGlzIGEgbm8tb3AuCisgKiBDYWxsZXJzIHRoYXQgZG9uJ3Qgd2FudCB0aGlz IHNob3VsZCBzZXQgYmF0Y2hyaW5nYnVmLm1hcmtCYXRjaCB0byBOVUxMCisgKiBiZWZvcmUgY2Fs bGluZyB1cy4gIE5vdGUgdGhhdCBtYXJrQmF0Y2ggaGFzIHRvIGJlIGV4cGxpY2l0bHkgZnJlZWQu CisgKi8KK3ZvaWQKK3RhYmxlYW1fdXRpbF9mcmVlX2JhdGNoKEluZGV4U2NhbkRlc2Mgc2Nhbiwg SW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCit7CisJQXNzZXJ0KEJ1ZmZlcklzVmFsaWQoYmF0Y2gtPmJ1 ZikgfHwgc2Nhbi0+TVZDQ1NjYW4pOworCisJLyogZG9uJ3QgZnJlZSBjYWxsZXIncyBiYXRjaCBp ZiBpdCBpcyBzY2FuJ3MgY3VycmVudCBtYXJrQmF0Y2ggKi8KKwlpZiAoYmF0Y2ggPT0gc2Nhbi0+ YmF0Y2hyaW5nYnVmLm1hcmtCYXRjaCkKKwkJcmV0dXJuOworCisJaWYgKEJ1ZmZlcklzVmFsaWQo YmF0Y2gtPmJ1ZikpCisJeworCQkvKiB0YWJsZSBBTSBkaWRuJ3QgdW5waW4gcGFnZSBlYXJsaWVy IC0tIGRvIGl0IG5vdyAqLworCQlBc3NlcnQoIXNjYW4tPk1WQ0NTY2FuIHx8IHNjYW4tPnhzX3dh bnRfaXR1cCk7CisKKwkJUmVsZWFzZUJ1ZmZlcihiYXRjaC0+YnVmKTsKKwkJYmF0Y2gtPmJ1ZiA9 IEludmFsaWRCdWZmZXI7CisJfQorI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKKwllbHNlIGlm IChzY2FuLT54c193YW50X2l0dXApCisJeworCQkvKgorCQkgKiBJbmRleC1vbmx5IHNjYW4gdGhh dCBkcm9wcGVkIHRoaXMgYmF0Y2gncyBwaW4gZWFnZXJseS4KKwkJICoKKwkJICogVGFibGUgQU0g bXVzdCBoYXZlIGNoZWNrZWQgdmlzaWJpbGl0eSBmb3IgZXZlcnkgaXRlbSBpbiB0aGUgYmF0Y2gu CisJCSAqLworCQlmb3IgKGludCBpID0gYmF0Y2gtPmZpcnN0SXRlbTsgaSA8PSBiYXRjaC0+bGFz dEl0ZW07IGkrKykKKwkJCUFzc2VydChiYXRjaC0+aXRlbXNbaV0uY2hlY2tlZFZpc2libGUpOwor CX0KKyNlbmRpZgorCisJLyoKKwkgKiBiYXRjaC5raWxsZWRJdGVtc1tdIGlzIG5vdyBpbiB3aGF0 ZXZlciBvcmRlciB0aGUgc2NhbiByZXR1cm5lZCBpdGVtcworCSAqIGluLiAgV2UgbWlnaHQgaGF2 ZSBldmVuIHNhdmVkIHRoZSBzYW1lIGl0ZW0vVElEIHR3aWNlLgorCSAqCisJICogU29ydCBhbmQg dW5pcXVlLWlmeSBraWxsZWRJdGVtc1tdLiAgVGhhdCB3YXkgdGhlIGluZGV4IEFNIGNhbiBzYWZl bHkKKwkgKiBhc3N1bWUgdGhhdCBpdGVtcyB3aWxsIGFsd2F5cyBiZSBpbiB0aGVpciBvcmlnaW5h bCBpbmRleCBwYWdlIG9yZGVyLgorCSAqLworCWlmIChiYXRjaC0+bnVtS2lsbGVkID4gMSkKKwl7 CisJCXFzb3J0KGJhdGNoLT5raWxsZWRJdGVtcywgYmF0Y2gtPm51bUtpbGxlZCwgc2l6ZW9mKGlu dCksCisJCQkgIGJhdGNoX2NvbXBhcmVfaW50KTsKKwkJYmF0Y2gtPm51bUtpbGxlZCA9IHF1bmlx dWUoYmF0Y2gtPmtpbGxlZEl0ZW1zLCBiYXRjaC0+bnVtS2lsbGVkLAorCQkJCQkJCQkgICBzaXpl b2YoaW50KSwgYmF0Y2hfY29tcGFyZV9pbnQpOworCX0KKworCXNjYW4tPmluZGV4UmVsYXRpb24t PnJkX2luZGFtLT5hbWZyZWViYXRjaChzY2FuLCBiYXRjaCk7Cit9CisKKy8qIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAq CQkJdXRpbGl0eSBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFtZ2V0YmF0Y2ggaW5kZXggQU1zCisgKgor ICogVGhlc2UgZnVuY3Rpb25zIG1hbmFnZSBiYXRjaCBhbGxvY2F0aW9uLCB1bmxvY2svcGluIG1h bmFnZW1lbnQsIGFuZCBiYXRjaAorICogcmVzb3VyY2UgcmVjeWNsaW5nLiAgSW5kZXggQU1zIGlt cGxlbWVudGluZyBhbWdldGJhdGNoIHNob3VsZCB1c2UgdGhlc2UKKyAqIHJhdGhlciB0aGFuIG1h bmFnaW5nIGJ1ZmZlcnMgZGlyZWN0bHkuCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworLyoKKyAqIFVubG9j ayBiYXRjaCdzIHNoYXJlZCBidWZmZXIgbG9jaworICoKKyAqIFVubG9ja3MgY2FsbGVyJ3MgYmF0 Y2gtPmJ1ZiBpbiBwcmVwYXJhdGlvbiBmb3IgYW1nZXRiYXRjaCByZXR1cm5pbmcgaXRlbXMKKyAq IHNhdmVkIGluIHRoYXQgYmF0Y2guICBQZXJmb3JtcyBleHRyYSBzdGVwcyByZXF1aXJlZCBieSBh bWdldGJhdGNoIGNhbGxlcnMKKyAqIGluIHBhc3NpbmcuCisgKgorICogT25seSBjYWxsIGhlcmUg d2hlbiBhIGJhdGNoIGhhcyBvbmUgb3IgbW9yZSBtYXRjaGluZyBpdGVtcyB0byByZXR1cm4gdXNp bmcKKyAqIGFtZ2V0YmF0Y2ggKG9yIGZvciBhbWdldGJpdG1hcCB0byBsb2FkIGludG8gaXRzIGJp dG1hcCBvZiBtYXRjaGluZyBUSURzKS4KKyAqIFdoZW4gYW4gaW5kZXggcGFnZSBoYXMgbm8gbWF0 Y2hlcywgaXQncyBhbHdheXMgc2FmZSBmb3IgaW5kZXggQU1zIHRvIGRyb3AKKyAqIGJvdGggdGhl IGxvY2sgYW5kIHRoZSBwaW4gZm9yIHRoZW1zZWx2ZXMuCisgKgorICogTm90ZTogSXQgaXMgY29u dmVuaWVudCBmb3IgaW5kZXggQU1zIHRoYXQgaW1wbGVtZW50IGJvdGggYW1nZXRiYXRjaCBhbmQK KyAqIGFtZ2V0Yml0bWFwIHRvIGNvbnNpc3RlbnRseSB1c2UgdGhlIHNhbWUgYmF0Y2ggbWFuYWdl bWVudCBhcHByb2FjaCwgc2luY2UKKyAqIHRoYXQgYXZvaWRzIGludHJvZHVjaW5nIHNwZWNpYWwg Y2FzZXMgdG8gbG93ZXItbGV2ZWwgY29kZS4gIFdlIGRyb3AgYm90aAorICogdGhlIGxvY2sgYW5k IHRoZSBwaW4gb24gYmF0Y2gncyBwYWdlIG9uIGJlaGFsZiBvZiBhbWdldGJpdG1hcCBjYWxsZXJz LgorICogU3VjaCBhbWdldGJpdG1hcCBjYWxsZXJzIG11c3QgYmUgY2FyZWZ1bCB0byBmcmVlIGFs bCBiYXRjaGVzIHdpdGggbWF0Y2hpbmcKKyAqIGl0ZW1zIG9uY2UgdGhleSdyZSBkb25lIHNhdmlu ZyB0aGUgbWF0Y2hpbmcgVElEcyAodGhlcmUgd2lsbCBuZXZlciBiZSBhbnkKKyAqIGNhbGxzIHRv IGFtZnJlZWJhdGNoLCBzbyBhbWdldGJpdG1hcCBtdXN0IGNhbGwgaW5kZXhhbV91dGlsX2JhdGNo X3JlbGVhc2UKKyAqIGRpcmVjdGx5LCBpbiBsaWV1IG9mIGEgZGVmZXJyZWQgY2FsbCB0byBhbWZy ZWViYXRjaCBmcm9tIGNvcmUgY29kZSkuICBXZQorICogbmV2ZXIgZHJvcCB0aGUgcGluIGZvciBh biBhbWdldGJhdGNoIGNhbGxlciwgdGhvdWdoLgorICovCit2b2lkCitpbmRleGFtX3V0aWxfYmF0 Y2hfdW5sb2NrKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCit7CisJ LyogYmF0Y2ggbXVzdCBoYXZlIG9uZSBvciBtb3JlIG1hdGNoaW5nIGl0ZW1zIHJldHVybmVkIGJ5 IGluZGV4IEFNICovCisJQXNzZXJ0KGJhdGNoLT5maXJzdEl0ZW0gPj0gMCAmJiBiYXRjaC0+Zmly c3RJdGVtIDw9IGJhdGNoLT5sYXN0SXRlbSk7CisKKwlpZiAoc2Nhbi0+dXNlYmF0Y2hyaW5nKQor CXsKKwkJLyogYW1nZXRiYXRjaCAobm90IGFtZ2V0Yml0bWFwKSBjYWxsZXIgKi8KKwkJQXNzZXJ0 KHNjYW4tPmhlYXBSZWxhdGlvbiAhPSBOVUxMKTsKKworCQkvKgorCQkgKiBIYXZlIHRvIHNldCBi YXRjaC0+bHNuIHNvIHRoYXQgYW1mcmVlYmF0Y2ggaGFzIGEgd2F5IHRvIGRldGVjdCB3aGVuCisJ CSAqIGNvbmN1cnJlbnQgaGVhcCBUSUQgcmVjeWNsaW5nIGJ5IFZBQ1VVTSBtaWdodCBoYXZlIHRh a2VuIHBsYWNlLgorCQkgKiBJdCdsbCBvbmx5IGJlIHNhZmUgdG8gc2V0IGFueSBpbmRleCB0dXBs ZSBMUF9ERUFEIGJpdHMgd2hlbiB0aGUKKwkJICogcGFnZSBMU04gaGFzbid0IGFkdmFuY2VkLgor CQkgKi8KKwkJYmF0Y2gtPmxzbiA9IEJ1ZmZlckdldExTTkF0b21pYyhiYXRjaC0+YnVmKTsKKwor CQkvKiBEcm9wIHRoZSBsb2NrICovCisJCUxvY2tCdWZmZXIoYmF0Y2gtPmJ1ZiwgQlVGRkVSX0xP Q0tfVU5MT0NLKTsKKworI2lmZGVmIFVTRV9WQUxHUklORAorCQlpZiAoIVJlbGF0aW9uVXNlc0xv Y2FsQnVmZmVycyhzY2FuLT5pbmRleFJlbGF0aW9uKSkKKwkJCVZBTEdSSU5EX01BS0VfTUVNX05P QUNDRVNTKEJ1ZmZlckdldFBhZ2UoYmF0Y2gtPmJ1ZiksIEJMQ0tTWik7CisjZW5kaWYKKworCQkv KiB0YWJsZSBBTSBkZXRlcm1pbmVzIHdoZW4gaXQnbGwgYmUgc2FmZSB0byBkcm9wIHBpbnMgb24g YmF0Y2hlcyAqLworCX0KKwllbHNlCisJeworCQkvKiBhbWdldGJpdG1hcCAobm90IGFtZ2V0YmF0 Y2gpIGNhbGxlciAqLworCQlBc3NlcnQoc2Nhbi0+aGVhcFJlbGF0aW9uID09IE5VTEwpOworCisJ CS8qIGRyb3AgYm90aCB0aGUgbG9jayBhbmQgdGhlIHBpbiAqLworCQlMb2NrQnVmZmVyKGJhdGNo LT5idWYsIEJVRkZFUl9MT0NLX1VOTE9DSyk7CisKKyNpZmRlZiBVU0VfVkFMR1JJTkQKKwkJaWYg KCFSZWxhdGlvblVzZXNMb2NhbEJ1ZmZlcnMoc2Nhbi0+aW5kZXhSZWxhdGlvbikpCisJCQlWQUxH UklORF9NQUtFX01FTV9OT0FDQ0VTUyhCdWZmZXJHZXRQYWdlKGJhdGNoLT5idWYpLCBCTENLU1op OworI2VuZGlmCisJCVJlbGVhc2VCdWZmZXIoYmF0Y2gtPmJ1Zik7CisJCWJhdGNoLT5idWYgPSBJ bnZhbGlkQnVmZmVyOworCX0KK30KKworLyoKKyAqIEFsbG9jYXRlIGEgbmV3IGJhdGNoCisgKgor ICogVXNlZCBieSBpbmRleCBBTXMgdGhhdCBzdXBwb3J0IGFtZ2V0YmF0Y2ggaW50ZXJmYWNlIChi b3RoIGR1cmluZyBhbWdldGJhdGNoCisgKiBhbmQgYW1nZXRiaXRtYXAgc2NhbnMpLgorICoKKyAq IFJldHVybnMgSW5kZXhTY2FuQmF0Y2ggd2l0aCBzcGFjZSB0byBmaXQgc2Nhbi0+bWF4aXRlbXNi YXRjaC1tYW55CisgKiBCYXRjaE1hdGNoaW5nSXRlbSBlbnRyaWVzLiAgVGhpcyB3aWxsIGVpdGhl ciBiZSBhIG5ld2x5IGFsbG9jYXRlZCBiYXRjaCwgb3IKKyAqIGEgYmF0Y2ggcmVjeWNsZWQgZnJv bSB0aGUgY2FjaGUgbWFuYWdlZCBieSBpbmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFzZS4gIFNlZQor ICogY29tbWVudHMgYWJvdmUgaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2UuCisgKgorICogSW5k ZXggQU1zIHRoYXQgdXNlIGJhdGNoZXMgc2hvdWxkIGNhbGwgdGhpcyBmcm9tIGVpdGhlciB0aGVp ciBhbWdldGJhdGNoIG9yCisgKiBhbWdldGJpdG1hcCByb3V0aW5lcyBvbmx5LiAgTm90ZSBpbiBw YXJ0aWN1bGFyIHRoYXQgaXQgY2Fubm90IHNhZmVseSBiZQorICogY2FsbGVkIGZyb20gYSBhbWZy ZWViYXRjaCByb3V0aW5lLgorICovCitJbmRleFNjYW5CYXRjaAoraW5kZXhhbV91dGlsX2JhdGNo X2FsbG9jKEluZGV4U2NhbkRlc2Mgc2NhbikKK3sKKwlJbmRleFNjYW5CYXRjaCBiYXRjaCA9IE5V TEw7CisKKwkvKiBGaXJzdCBsb29rIGZvciBhbiBleGlzdGluZyBiYXRjaCBmcm9tIHJpbmcgYnVm ZmVyICovCisJaWYgKHNjYW4tPnVzZWJhdGNocmluZykKKwl7CisJCWZvciAoaW50IGkgPSAwOyBp IDwgSU5ERVhfU0NBTl9DQUNIRV9CQVRDSEVTOyBpKyspCisJCXsKKwkJCWlmIChzY2FuLT5iYXRj aHJpbmdidWYuY2FjaGVbaV0gIT0gTlVMTCkKKwkJCXsKKwkJCQkvKiBSZXR1cm4gY2FjaGVkIHVu cmVmZXJlbmNlZCBiYXRjaCAqLworCQkJCWJhdGNoID0gc2Nhbi0+YmF0Y2hyaW5nYnVmLmNhY2hl W2ldOworCQkJCXNjYW4tPmJhdGNocmluZ2J1Zi5jYWNoZVtpXSA9IE5VTEw7CisJCQkJYnJlYWs7 CisJCQl9CisJCX0KKwl9CisKKwlpZiAoIWJhdGNoKQorCXsKKwkJYmF0Y2ggPSBwYWxsb2Mob2Zm c2V0b2YoSW5kZXhTY2FuQmF0Y2hEYXRhLCBpdGVtcykgKworCQkJCQkgICBzaXplb2YoQmF0Y2hN YXRjaGluZ0l0ZW0pICogc2Nhbi0+bWF4aXRlbXNiYXRjaCk7CisKKwkJLyoKKwkJICogSWYgd2Ug YXJlIGRvaW5nIGFuIGluZGV4LW9ubHkgc2Nhbiwgd2UgbmVlZCBhIHR1cGxlIHN0b3JhZ2UKKwkJ ICogd29ya3NwYWNlLiBXZSBhbGxvY2F0ZSBCTENLU1ogZm9yIHRoaXMsIHdoaWNoIHNob3VsZCBh bHdheXMgZ2l2ZQorCQkgKiB0aGUgaW5kZXggQU0gZW5vdWdoIHNwYWNlIHRvIGZpdCBhIGZ1bGwg cGFnZSdzIHdvcnRoIG9mIHR1cGxlcy4KKwkJICovCisJCWJhdGNoLT5jdXJyVHVwbGVzID0gTlVM TDsKKwkJaWYgKHNjYW4tPnhzX3dhbnRfaXR1cCkKKwkJCWJhdGNoLT5jdXJyVHVwbGVzID0gcGFs bG9jKEJMQ0tTWik7CisKKwkJLyoKKwkJICogQmF0Y2hlcyBhbGxvY2F0ZSBraWxsZWRJdGVtcyBs YXppbHkgKHRob3VnaCBub3RlIHRoYXQgY2FjaGVkCisJCSAqIGJhdGNoZXMga2VlcCB0aGVpciBr aWxsZWRJdGVtcyBhbGxvY2F0aW9uIHdoZW4gcmVjeWNsZWQpCisJCSAqLworCQliYXRjaC0+a2ls bGVkSXRlbXMgPSBOVUxMOworCX0KKworCS8qIHhzX3dhbnRfaXR1cCBzY2FucyBtdXN0IGdldCBh IGN1cnJUdXBsZXMgc3BhY2UgKi8KKwlBc3NlcnQoIShzY2FuLT54c193YW50X2l0dXAgJiYgKGJh dGNoLT5jdXJyVHVwbGVzID09IE5VTEwpKSk7CisKKwkvKiBzaGFyZWQgaW5pdGlhbGl6YXRpb24g Ki8KKwliYXRjaC0+YnVmID0gSW52YWxpZEJ1ZmZlcjsKKwliYXRjaC0+a25vd25FbmRMZWZ0ID0g ZmFsc2U7CisJYmF0Y2gtPmtub3duRW5kUmlnaHQgPSBmYWxzZTsKKwliYXRjaC0+Zmlyc3RJdGVt ID0gLTE7CisJYmF0Y2gtPmxhc3RJdGVtID0gLTE7CisJYmF0Y2gtPm51bUtpbGxlZCA9IDA7CisK KwlyZXR1cm4gYmF0Y2g7Cit9CisKKy8qCisgKiBSZWxlYXNlIGFsbG9jYXRlZCBiYXRjaAorICoK KyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IGluZGV4IEFNcyB0byByZWxlYXNlIGEgYmF0 Y2ggYWxsb2NhdGVkIGJ5CisgKiBpbmRleGFtX3V0aWxfYmF0Y2hfYWxsb2MuICBCYXRjaGVzIGFy ZSBjYWNoZWQgaGVyZSBmb3IgcmV1c2UgKHdoZW4gc2NhbgorICogaGFzbid0IGFscmVhZHkgZmlu aXNoZWQpIHRvIHJlZHVjZSBwYWxsb2MvcGZyZWUgb3ZlcmhlYWQuCisgKgorICogSXQncyBzYWZl IHRvIHJlbGVhc2UgYSBiYXRjaCBpbW1lZGlhdGVseSB3aGVuIGl0IHdhcyB1c2VkIHRvIHJlYWQg YSBwYWdlCisgKiB0aGF0IHJldHVybmVkIG5vIG1hdGNoZXMgdG8gdGhlIHNjYW4uICBCYXRjaGVz IGFjdHVhbGx5IHJldHVybmVkIGJ5IGluZGV4CisgKiBBTSdzIGFtZ2V0YmF0Y2ggcm91dGluZSAo aS5lLiBiYXRjaGVzIGZvciBwYWdlcyB3aXRoIG9uZSBvciBtb3JlIG1hdGNoZXMpCisgKiBtdXN0 IGJlIHJlbGVhc2VkIGJ5IGNhbGxpbmcgaGVyZSBhdCB0aGUgZW5kIG9mIHRoZWlyIGFtZnJlZWJh dGNoIHJvdXRpbmUuCisgKiBJbmRleCBBTXMgdGhhdCB1c2VzIGJhdGNoZXMgc2hvdWxkIGNhbGwg aGVyZSB0byByZWxlYXNlIGEgYmF0Y2ggZnJvbSBhbnkgb2YKKyAqIHRoZWlyIGFtZ2V0YmF0Y2gs IGFtZ2V0Yml0bWFwLCBhbmQgYW1mcmVlYmF0Y2ggcm91dGluZXMuCisgKi8KK3ZvaWQKK2luZGV4 YW1fdXRpbF9iYXRjaF9yZWxlYXNlKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2gg YmF0Y2gpCit7CisJQXNzZXJ0KGJhdGNoLT5idWYgPT0gSW52YWxpZEJ1ZmZlcik7CisKKwlpZiAo c2Nhbi0+dXNlYmF0Y2hyaW5nKQorCXsKKwkJLyogYW1nZXRiYXRjaCBzY2FuIGNhbGxlciAqLwor CQlBc3NlcnQoc2Nhbi0+aGVhcFJlbGF0aW9uICE9IE5VTEwpOworCisJCWlmIChzY2FuLT5iYXRj aHJpbmdidWYuZG9uZSkKKwkJeworCQkJLyogRG9uJ3QgYm90aGVyIHVzaW5nIGNhY2hlIHdoZW4g c2NhbiBpcyBlbmRpbmcgKi8KKwkJfQorCQllbHNlCisJCXsKKwkJCS8qCisJCQkgKiBVc2UgY2Fj aGUuICBUaGlzIGlzIGdlbmVyYWxseSBvbmx5IGJlbmVmaWNpYWwgd2hlbiB0aGVyZSBhcmUKKwkJ CSAqIG1hbnkgc21hbGwgcmVzY2FucyBvZiBhbiBpbmRleC4KKwkJCSAqLworCQkJZm9yIChpbnQg aSA9IDA7IGkgPCBJTkRFWF9TQ0FOX0NBQ0hFX0JBVENIRVM7IGkrKykKKwkJCXsKKwkJCQlpZiAo c2Nhbi0+YmF0Y2hyaW5nYnVmLmNhY2hlW2ldID09IE5VTEwpCisJCQkJeworCQkJCQkvKiBmb3Vu ZCBlbXB0eSBzbG90LCB3ZSdyZSBkb25lICovCisJCQkJCXNjYW4tPmJhdGNocmluZ2J1Zi5jYWNo ZVtpXSA9IGJhdGNoOworCQkJCQlyZXR1cm47CisJCQkJfQorCQkJfQorCQl9CisKKwkJLyoKKwkJ ICogRmFpbGVkIHRvIGZpbmQgYSBmcmVlIHNsb3QgZm9yIHRoaXMgYmF0Y2guICBXZSdsbCBqdXN0 IGZyZWUgaXQKKwkJICogb3Vyc2VsdmVzLiAgVGhpcyBpc24ndCByZWFsbHkgZXhwZWN0ZWQ7IGl0 J3MganVzdCBkZWZlbnNpdmUuCisJCSAqLworCQlpZiAoYmF0Y2gtPmtpbGxlZEl0ZW1zKQorCQkJ cGZyZWUoYmF0Y2gtPmtpbGxlZEl0ZW1zKTsKKwkJaWYgKGJhdGNoLT5jdXJyVHVwbGVzKQorCQkJ cGZyZWUoYmF0Y2gtPmN1cnJUdXBsZXMpOworCX0KKwllbHNlCisJeworCQkvKiBhbWdldGJpdG1h cCBzY2FuIGNhbGxlciAqLworCQlBc3NlcnQoc2Nhbi0+aGVhcFJlbGF0aW9uID09IE5VTEwpOwor CQlBc3NlcnQoYmF0Y2gtPmtpbGxlZEl0ZW1zID09IE5VTEwpOworCQlBc3NlcnQoYmF0Y2gtPmN1 cnJUdXBsZXMgPT0gTlVMTCk7CisJfQorCisJLyogbm8gZnJlZSBzbG90IHRvIHNhdmUgdGhpcyBi YXRjaCAoZXhwZWN0ZWQgd2l0aCBhbWdldGJpdG1hcCBjYWxsZXJzKSAqLworCXBmcmVlKGJhdGNo KTsKK30KKworLyoKKyAqIHFzb3J0IGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yIGludCBhcnJheXMK KyAqLworc3RhdGljIGludAorYmF0Y2hfY29tcGFyZV9pbnQoY29uc3Qgdm9pZCAqdmEsIGNvbnN0 IHZvaWQgKnZiKQoreworCWludAkJCWEgPSAqKChjb25zdCBpbnQgKikgdmEpOworCWludAkJCWIg PSAqKChjb25zdCBpbnQgKikgdmIpOworCisJcmV0dXJuIHBnX2NtcF9zMzIoYSwgYik7Cit9CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvbWVzb24uYnVpbGQgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvaW5kZXgvbWVzb24uYnVpbGQKaW5kZXggZGE2NGNiNTk1Li44M2RmYTNmMmIg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9tZXNvbi5idWlsZAorKysgYi9z cmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvbWVzb24uYnVpbGQKQEAgLTUsNCArNSw1IEBAIGJhY2tl bmRfc291cmNlcyArPSBmaWxlcygKICAgJ2FtdmFsaWRhdGUuYycsCiAgICdnZW5hbS5jJywKICAg J2luZGV4YW0uYycsCisgICdpbmRleGJhdGNoLmMnLAogKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvYWNjZXNzL25idHJlZS9SRUFETUUgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL1JFQURN RQppbmRleCBjYjkyMWNhMmUuLmU3NTU3N2E3ZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNj ZXNzL25idHJlZS9SRUFETUUKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9SRUFETUUK QEAgLTE3OSwxOCArMTc5LDIxIEBAIGhvbGQgb24gdG8gdGhlIHBpbiAodXNlZCB3aGVuIHJlYWRp bmcgZnJvbSB0aGUgbGVhZiBwYWdlKSB1bnRpbCBfYWZ0ZXJfCiB0aGV5J3JlIGRvbmUgdmlzaXRp bmcgdGhlIGhlYXAgKGZvciBUSURzIGZyb20gcGlubmVkIGxlYWYgcGFnZSkgcHJldmVudHMKIGNv bmN1cnJlbnQgVElEIHJlY3ljbGluZy4gIFZBQ1VVTSBjYW5ub3QgZ2V0IGEgY29uZmxpY3Rpbmcg Y2xlYW51cCBsb2NrCiB1bnRpbCB0aGUgaW5kZXggc2NhbiBpcyB0b3RhbGx5IGZpbmlzaGVkIHBy b2Nlc3NpbmcgaXRzIGxlYWYgcGFnZS4KK05vdGUgdGhhdCB0aGUgdGFibGUgQU0gZGV0ZXJtaW5l cyB3aGVuIGFuZCB3aGVyZSBpbmRleCBwYWdlIHBpbnMgYXJlCitkcm9wcGVkLiAgVGhpcyBpcyBy ZXF1aXJlZCBieSBhbnkgaW5kZXggQU0gdGhhdCBpbXBsZW1lbnRzIHRoZSBhbWdldGJhdGNoCitp bnRlcmZhY2UuICAoU2VlIGFsc28sIGRvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwpLgogCi1UaGlz IGFwcHJvYWNoIGlzIGZhaXJseSBjb2Fyc2UsIHNvIHdlIGF2b2lkIGl0IHdoZW5ldmVyIHBvc3Np YmxlLiAgSW4KLXByYWN0aWNlIG1vc3QgaW5kZXggc2NhbnMgd29uJ3QgaG9sZCBvbnRvIHRoZWly IHBpbiwgYW5kIHNvIHdvbid0IGJsb2NrCi1WQUNVVU0uICBUaGVzZSBpbmRleCBzY2FucyBtdXN0 IGRlYWwgd2l0aCBUSUQgcmVjeWNsaW5nIGRpcmVjdGx5LCB3aGljaCBpcwotbW9yZSBjb21wbGlj YXRlZCBhbmQgbm90IGFsd2F5cyBwb3NzaWJsZS4gIFNlZSBsYXRlciBzZWN0aW9uIG9uIG1ha2lu ZwotY29uY3VycmVudCBUSUQgcmVjeWNsaW5nIHNhZmUuCitCbG9ja2luZyBWQUNVVU0gbGlrZSB0 aGlzIGNhbiBiZSBkaXNydXB0aXZlLCBzbyB0YWJsZSBBTXMgYXZvaWQgaXQgd2hlbmV2ZXIKK3Bv c3NpYmxlLiAgVGhlIGhlYXAgdGFibGUgQU0gdXN1YWxseSBkcm9wcyBsZWFmIHBhZ2UgcGlucyBy aWdodCBhd2F5LCB0aG91Z2gKK25vdCBkdXJpbmcgc2NhbnMgdGhhdCB1c2UgYSBub24tTVZDQyBz bmFwc2hvdC4gIEluZGV4LW9ubHkgc2NhbnMgbWF5IGFsc28KK3JldGFpbiBwaW5zIGluIHNvbWUg Y2FzZXMuCiAKLU9wcG9ydHVuaXN0aWMgaW5kZXggdHVwbGUgZGVsZXRpb24gcGVyZm9ybXMgYWxt b3N0IHRoZSBzYW1lIHBhZ2UtbGV2ZWwKLW1vZGlmaWNhdGlvbnMgd2hpbGUgb25seSBob2xkaW5n IGFuIGV4Y2x1c2l2ZSBsb2NrLiAgVGhpcyBpcyBzYWZlIGJlY2F1c2UKLXRoZXJlIGlzIG5vIHF1 ZXN0aW9uIG9mIFRJRCByZWN5Y2xpbmcgdGFraW5nIHBsYWNlIGxhdGVyIG9uIC0tIG9ubHkgVkFD VVVNCi1jYW4gbWFrZSBUSURzIHJlY3ljbGFibGUuICBTZWUgYWxzbyBzaW1wbGUgZGVsZXRpb24g YW5kIGJvdHRvbS11cAotZGVsZXRpb24sIGJlbG93LgorT3Bwb3J0dW5pc3RpYyBpbmRleCB0dXBs ZSBkZWxldGlvbiBwZXJmb3JtcyB0aGUgc2FtZSBwYWdlLWxldmVsCittb2RpZmljYXRpb25zIGFz IFZBQ1VVTSwgd2hpbGUgb25seSBob2xkaW5nIGFuIGV4Y2x1c2l2ZSBsb2NrLiAgVGhpcyBpcwor c2FmZSBiZWNhdXNlIHRoZXJlIGlzIG5vIHF1ZXN0aW9uIG9mIFRJRCByZWN5Y2xpbmcgdGFraW5n IHBsYWNlIC0tIG9ubHkKK1ZBQ1VVTSBjYW4gbWFrZSBUSURzIHJlY3ljbGFibGUuICBJbiBvdGhl ciB3b3JkcywgVkFDVVVNJ3MgY2xlYW51cCBsb2NrCitzZXJ2ZXMgdG8gcHJvdGVjdCBub24tTVZD QyBzbmFwc2hvdCBzY2FucyBmcm9tIGNvbmN1cnJlbnQgVElEIHJlY3ljbGluZworaGF6YXJkczsg aXQgZG9lc24ndCBwcm90ZWN0IHRoZSBCLVRyZWUgc3RydWN0dXJlIGl0c2VsZi4KIAogQmVjYXVz ZSBhIHBpbiBpcyBub3QgYWx3YXlzIGhlbGQsIGFuZCBhIHBhZ2UgY2FuIGJlIHNwbGl0IGV2ZW4g d2hpbGUKIHNvbWVvbmUgZG9lcyBob2xkIGEgcGluIG9uIGl0LCBpdCBpcyBwb3NzaWJsZSB0aGF0 IGFuIGluZGV4c2NhbiB3aWxsCkBAIC00NDQsNDQgKzQ0NywyNSBAQCBNYWtpbmcgY29uY3VycmVu dCBUSUQgcmVjeWNsaW5nIHNhZmUKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQogCiBBcyBleHBsYWluZWQgaW4gdGhlIGVhcmxpZXIgc2VjdGlvbiBhYm91dCBkZWxldGluZyBp bmRleCB0dXBsZXMgZHVyaW5nCi1WQUNVVU0sIHdlIGltcGxlbWVudCBhIGxvY2tpbmcgcHJvdG9j b2wgdGhhdCBhbGxvd3MgaW5kaXZpZHVhbCBpbmRleCBzY2FucwotdG8gYXZvaWQgY29uY3VycmVu dCBUSUQgcmVjeWNsaW5nLiAgSW5kZXggc2NhbnMgb3B0LW91dCAoYW5kIHNvIGRyb3AgdGhlaXIK LWxlYWYgcGFnZSBwaW4gd2hlbiB2aXNpdGluZyB0aGUgaGVhcCkgd2hlbmV2ZXIgaXQncyBzYWZl IHRvIGRvIHNvLCB0aG91Z2guCi1Ecm9wcGluZyB0aGUgcGluIGVhcmx5IGlzIHVzZWZ1bCBiZWNh dXNlIGl0IGF2b2lkcyBibG9ja2luZyBwcm9ncmVzcyBieQotVkFDVVVNLiAgVGhpcyBpcyBwYXJ0 aWN1bGFybHkgaW1wb3J0YW50IHdpdGggaW5kZXggc2NhbnMgdXNlZCBieSBjdXJzb3JzLAotc2lu Y2UgaWRsZSBjdXJzb3JzIHNvbWV0aW1lcyBzdG9wIGZvciByZWxhdGl2ZWx5IGxvbmcgcGVyaW9k cyBvZiB0aW1lLiAgSW4KLWV4dHJlbWUgY2FzZXMsIGEgY2xpZW50IGFwcGxpY2F0aW9uIG1heSBo b2xkIG9uIHRvIGFuIGlkbGUgY3Vyc29ycyBmb3IKLWhvdXJzIG9yIGV2ZW4gZGF5cy4gIEJsb2Nr aW5nIFZBQ1VVTSBmb3IgdGhhdCBsb25nIGNvdWxkIGJlIGRpc2FzdHJvdXMuCitWQUNVVU0sIHdl IGltcGxlbWVudCBhIGxvY2tpbmcgcHJvdG9jb2wgdGhhdCBoZWxwcyB0YWJsZSBBTXMgZGVhbCB3 aXRoIFRJRAorcmVjeWNsaW5nIGhhemFyZHMgZHVyaW5nIHNjYW5zIHRoYXQgdXNlIGEgbm9uLU1W Q0Mgc25hcHNob3QuCiAKIEluZGV4IHNjYW5zIHRoYXQgZG9uJ3QgaG9sZCBvbiB0byBhIGJ1ZmZl ciBwaW4gYXJlIHByb3RlY3RlZCBieSBob2xkaW5nIGFuCiBNVkNDIHNuYXBzaG90IGluc3RlYWQu ICBUaGlzIG1vcmUgbGltaXRlZCBpbnRlcmxvY2sgcHJldmVudHMgd3JvbmcgYW5zd2VycwogdG8g cXVlcmllcywgYnV0IGl0IGRvZXMgbm90IHByZXZlbnQgY29uY3VycmVudCBUSUQgcmVjeWNsaW5n IGl0c2VsZiAob25seQogaG9sZGluZyBvbnRvIHRoZSBsZWFmIHBhZ2UgcGluIHdoaWxlIGFjY2Vz c2luZyB0aGUgaGVhcCBlbnN1cmVzIHRoYXQpLgorRm9yIHRoZSBtb3N0IHBhcnQsIGl0IGlzIHVw IHRvIHRoZSB0YWJsZSBBTSB0byBkZWFsIHdpdGggY29uY3VycmVudCBUSUQKK3JlY3ljbGluZyBo YXphcmRzLiAgQnV0IHdlIHN0aWxsIG5lZWQgdG8gZGlyZWN0bHkgY29uc2lkZXIgc3VjaCBoYXph cmRzIHdoZW4KK21hcmtpbmcgYSBrbm93bi1kZWFkIGluZGV4IHR1cGxlIExQX0RFQUQuCiAKLUlu 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 bGx5IHdyb25nIHRvIExQX0RFQUQtc2V0IHRoaXMgbmV3LAorV2UgbXVzdCBhdm9pZCBMUF9ERUFE LW1hcmtpbmcgYW55IG5ldyBpbmRleCB0dXBsZSB0aGF0IGxvb2tzIGxpa2UgYQora25vd24tZGVh ZCBpbmRleCB0dXBsZSBiZWNhdXNlIGl0IGhhcHBlbnMgdG8gc2hhcmUgdGhlIHNhbWUgVElELCBm b2xsb3dpbmcKK2NvbmN1cnJlbnQgVElEIHJlY3ljbGluZy4gIEl0J3MganVzdCBhYm91dCBwb3Nz aWJsZSB0aGF0IHNvbWUgb3RoZXIgc2Vzc2lvbgoraW5zZXJ0ZWQgYSBuZXcsIHVucmVsYXRlZCBp bmRleCB0dXBsZSwgb24gdGhlIHNhbWUgbGVhZiBwYWdlLCB3aGljaCBoYXMgdGhlCitzYW1lIG9y aWdpbmFsIFRJRC4gIEl0IHdvdWxkIGJlIHRvdGFsbHkgd3JvbmcgdG8gTFBfREVBRC1zZXQgdGhp cyBuZXcsCiB1bnJlbGF0ZWQgaW5kZXggdHVwbGUuCiAKLVdlIGhhbmRsZSB0aGlzIGtpbGxfcHJp b3JfdHVwbGUgcmFjZSBjb25kaXRpb24gYnkgaGF2aW5nIGFmZmVjdGVkIGluZGV4CitXZSBoYW5k bGUgdGhpcyBMUF9ERUFEIHNldHRpbmcgcmFjZSBjb25kaXRpb24gYnkgaGF2aW5nIGFsbCBpbmRl eAogc2NhbnMgY29uc2VydmF0aXZlbHkgYXNzdW1lIHRoYXQgYW55IGNoYW5nZSB0byB0aGUgbGVh ZiBwYWdlIGF0IGFsbAogaW1wbGllcyB0aGF0IGl0IHdhcyByZWFjaGVkIGJ5IGJ0YnVsa2RlbGV0 ZSBpbiB0aGUgaW50ZXJpbSBwZXJpb2Qgd2hlbiBubwogYnVmZmVyIHBpbiB3YXMgaGVsZC4gIFRo aXMgaXMgaW1wbGVtZW50ZWQgYnkgbm90IHNldHRpbmcgYW55IExQX0RFQUQgYml0cwpAQCAtNzM0 LDcgKzcxOCw3IEBAIG9mIHJlYWRlcnMgY291bGQgc3RpbGwgbW92ZSByaWdodCB0byByZWNvdmVy IGlmIHdlIGRpZG4ndCBjb3VwbGUKIHNhbWUtbGV2ZWwgbG9ja3MpLCBidXQgd2UgcHJlZmVyIHRv IGJlIGNvbnNlcnZhdGl2ZSBoZXJlLgogCiBEdXJpbmcgcmVjb3ZlcnkgYWxsIGluZGV4IHNjYW5z IHN0YXJ0IHdpdGggaWdub3JlX2tpbGxlZF90dXBsZXMgPSBmYWxzZQotYW5kIHdlIG5ldmVyIHNl dCBraWxsX3ByaW9yX3R1cGxlLiBXZSBkbyB0aGlzIGJlY2F1c2UgdGhlIG9sZGVzdCB4bWluCith bmQgd2UgbmV2ZXIgTFBfREVBRC1tYXJrIHR1cGxlcy4gV2UgZG8gdGhpcyBiZWNhdXNlIHRoZSBv bGRlc3QgeG1pbgogb24gdGhlIHN0YW5kYnkgc2VydmVyIGNhbiBiZSBvbGRlciB0aGFuIHRoZSBv bGRlc3QgeG1pbiBvbiB0aGUgcHJpbWFyeQogc2VydmVyLCB3aGljaCBtZWFucyB0dXBsZXMgY2Fu IGJlIG1hcmtlZCBMUF9ERUFEIGV2ZW4gd2hlbiB0aGV5IGFyZQogc3RpbGwgdmlzaWJsZSBvbiB0 aGUgc3RhbmRieS4gV2UgZG9uJ3QgV0FMIGxvZyB0dXBsZSBMUF9ERUFEIGJpdHMsIGJ1dApkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRwYWdlLmMgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvbmJ0cmVlL25idHBhZ2UuYwppbmRleCA3MGI1MjRkZmUuLjI4NmY5NWQzZSAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRwYWdlLmMKKysrIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL25idHJlZS9uYnRwYWdlLmMKQEAgLTEwMzcsNiArMTAzNyw5IEBAIF9idF9y ZWxidWYoUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVmKQogICogTG9jayBpcyBhY3F1aXJlZCB3aXRo b3V0IGFjcXVpcmluZyBhbm90aGVyIHBpbi4gIFRoaXMgaXMgbGlrZSBhIHJhdwogICogTG9ja0J1 ZmZlcigpIGNhbGwsIGJ1dCBwZXJmb3JtcyBleHRyYSBzdGVwcyBuZWVkZWQgYnkgVmFsZ3JpbmQu CiAgKgorICogTm90ZTogaW5kZXhhbV91dGlsX2JhdGNoX3VubG9jayBoYXMgc2ltaWxhciBWYWxn cmluZCBidWZmZXIgbG9jaworICogaW5zdHJ1bWVudGF0aW9uLCB3aGljaCB3ZSByZWx5IG9uIGhl cmUuCisgKgogICogTm90ZTogQ2FsbGVyIG1heSBuZWVkIHRvIGNhbGwgX2J0X2NoZWNrcGFnZSgp IHdpdGggYnVmIHdoZW4gcGluIG9uIGJ1ZgogICogd2Fzbid0IG9yaWdpbmFsbHkgYWNxdWlyZWQg aW4gX2J0X2dldGJ1ZigpIG9yIF9idF9yZWxhbmRnZXRidWYoKS4KICAqLwpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWFkcGFnZS5jIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL25idHJlZS9uYnRyZWFkcGFnZS5jCmluZGV4IDJiYTFjYTY2MC4uN2IyZGQ0NTMxIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlYWRwYWdlLmMKKysrIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWFkcGFnZS5jCkBAIC0zMiw2ICszMiw3IEBAIHR5 cGVkZWYgc3RydWN0IEJUUmVhZFBhZ2VTdGF0ZQogewogCS8qIElucHV0IHBhcmFtZXRlcnMsIHNl dCBieSBfYnRfcmVhZHBhZ2UgZm9yIF9idF9jaGVja2tleXMgKi8KIAlTY2FuRGlyZWN0aW9uIGRp cjsJCQkvKiBjdXJyZW50IHNjYW4gZGlyZWN0aW9uICovCisJQmxvY2tOdW1iZXIgY3VycnBhZ2U7 CQkvKiBjdXJyZW50IHBhZ2UgYmVpbmcgcmVhZCAqLwogCU9mZnNldE51bWJlciBtaW5vZmY7CQkv KiBMb3dlc3Qgbm9uLXBpdm90IHR1cGxlJ3Mgb2Zmc2V0ICovCiAJT2Zmc2V0TnVtYmVyIG1heG9m ZjsJCS8qIEhpZ2hlc3Qgbm9uLXBpdm90IHR1cGxlJ3Mgb2Zmc2V0ICovCiAJSW5kZXhUdXBsZQlm aW5hbHR1cDsJCS8qIE5lZWRlZCBieSBzY2FucyB3aXRoIGFycmF5IGtleXMgKi8KQEAgLTYzLDE0 ICs2NCwxMyBAQCBzdGF0aWMgYm9vbCBfYnRfc2NhbmJlaGluZF9jaGVja2tleXMoSW5kZXhTY2Fu RGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwKIAkJCQkJCQkJCSBJbmRleFR1cGxlIGZpbmFs dHVwKTsKIHN0YXRpYyBib29sIF9idF9vcHBvZGlyX2NoZWNra2V5cyhJbmRleFNjYW5EZXNjIHNj YW4sIFNjYW5EaXJlY3Rpb24gZGlyLAogCQkJCQkJCQkgIEluZGV4VHVwbGUgZmluYWx0dXApOwot c3RhdGljIHZvaWQgX2J0X3NhdmVpdGVtKEJUU2Nhbk9wYXF1ZSBzbywgaW50IGl0ZW1JbmRleCwK LQkJCQkJCSBPZmZzZXROdW1iZXIgb2ZmbnVtLCBJbmRleFR1cGxlIGl0dXApOwotc3RhdGljIGlu dAlfYnRfc2V0dXBwb3N0aW5naXRlbXMoQlRTY2FuT3BhcXVlIHNvLCBpbnQgaXRlbUluZGV4LAor c3RhdGljIHZvaWQgX2J0X3NhdmVpdGVtKEluZGV4U2NhbkJhdGNoIG5ld2JhdGNoLCBpbnQgaXRl bUluZGV4LCBPZmZzZXROdW1iZXIgb2ZmbnVtLAorCQkJCQkJIEluZGV4VHVwbGUgaXR1cCwgaW50 ICp0dXBsZU9mZnNldCk7CitzdGF0aWMgaW50CV9idF9zZXR1cHBvc3RpbmdpdGVtcyhJbmRleFNj YW5CYXRjaCBuZXdiYXRjaCwgaW50IGl0ZW1JbmRleCwKIAkJCQkJCQkJICBPZmZzZXROdW1iZXIg b2ZmbnVtLCBjb25zdCBJdGVtUG9pbnRlckRhdGEgKmhlYXBUaWQsCi0JCQkJCQkJCSAgSW5kZXhU dXBsZSBpdHVwKTsKLXN0YXRpYyBpbmxpbmUgdm9pZCBfYnRfc2F2ZXBvc3RpbmdpdGVtKEJUU2Nh bk9wYXF1ZSBzbywgaW50IGl0ZW1JbmRleCwKLQkJCQkJCQkJCSAgIE9mZnNldE51bWJlciBvZmZu dW0sCi0JCQkJCQkJCQkgICBJdGVtUG9pbnRlciBoZWFwVGlkLCBpbnQgdHVwbGVPZmZzZXQpOwor CQkJCQkJCQkgIEluZGV4VHVwbGUgaXR1cCwgaW50ICp0dXBsZU9mZnNldCk7CitzdGF0aWMgaW5s aW5lIHZvaWQgX2J0X3NhdmVwb3N0aW5naXRlbShJbmRleFNjYW5CYXRjaCBuZXdiYXRjaCwgaW50 IGl0ZW1JbmRleCwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKKwkJCQkJCQkJCSAgIEl0ZW1Qb2ludGVy IGhlYXBUaWQsIGludCBiYXNlT2Zmc2V0KTsKIHN0YXRpYyBib29sIF9idF9jaGVja2tleXMoSW5k ZXhTY2FuRGVzYyBzY2FuLCBCVFJlYWRQYWdlU3RhdGUgKnBzdGF0ZSwgYm9vbCBhcnJheUtleXMs CiAJCQkJCQkgIEluZGV4VHVwbGUgdHVwbGUsIGludCB0dXBuYXR0cyk7CiBzdGF0aWMgYm9vbCBf YnRfY2hlY2tfY29tcGFyZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLApA QCAtMTExLDE1ICsxMTEsMTUgQEAgc3RhdGljIGJvb2wgX2J0X3ZlcmlmeV9rZXlzX3dpdGhfYXJy YXlrZXlzKEluZGV4U2NhbkRlc2Mgc2Nhbik7CiAKIAogLyoKLSAqCV9idF9yZWFkcGFnZSgpIC0t IExvYWQgZGF0YSBmcm9tIGN1cnJlbnQgaW5kZXggcGFnZSBpbnRvIHNvLT5jdXJyUG9zCisgKglf YnRfcmVhZHBhZ2UoKSAtLSBMb2FkIGRhdGEgZnJvbSBjdXJyZW50IGluZGV4IHBhZ2UgaW50byBu ZXdiYXRjaC4KICAqCi0gKiBDYWxsZXIgbXVzdCBoYXZlIHBpbm5lZCBhbmQgcmVhZC1sb2NrZWQg c28tPmN1cnJQb3MuYnVmOyB0aGUgYnVmZmVyJ3Mgc3RhdGUKLSAqIGlzIG5vdCBjaGFuZ2VkIGhl cmUuICBBbHNvLCBjdXJyUG9zLm1vcmVMZWZ0IGFuZCBtb3JlUmlnaHQgbXVzdCBiZSB2YWxpZDsK LSAqIHRoZXkgYXJlIHVwZGF0ZWQgYXMgYXBwcm9wcmlhdGUuICBBbGwgb3RoZXIgZmllbGRzIG9m IHNvLT5jdXJyUG9zIGFyZQorICogQ2FsbGVyIG11c3QgaGF2ZSBwaW5uZWQgYW5kIHJlYWQtbG9j a2VkIG5ld2JhdGNoLmJ1ZjsgdGhlIGJ1ZmZlcidzIHN0YXRlIGlzCisgKiBub3QgY2hhbmdlZCBo ZXJlLiAgQWxzbywgbmV3YmF0Y2gncyBtb3JlTGVmdCBhbmQgbW9yZVJpZ2h0IG11c3QgYmUgdmFs aWQ7CisgKiB0aGV5IGFyZSB1cGRhdGVkIGFzIGFwcHJvcHJpYXRlLiAgQWxsIG90aGVyIGZpZWxk cyBvZiBuZXdiYXRjaCBhcmUKICAqIGluaXRpYWxpemVkIGZyb20gc2NyYXRjaCBoZXJlLgogICoK ICAqIFdlIHNjYW4gdGhlIGN1cnJlbnQgcGFnZSBzdGFydGluZyBhdCBvZmZudW0gYW5kIG1vdmlu ZyBpbiB0aGUgaW5kaWNhdGVkCi0gKiBkaXJlY3Rpb24uICBBbGwgaXRlbXMgbWF0Y2hpbmcgdGhl IHNjYW4ga2V5cyBhcmUgbG9hZGVkIGludG8gY3VyclBvcy5pdGVtcy4KKyAqIGRpcmVjdGlvbi4g IEFsbCBpdGVtcyBtYXRjaGluZyB0aGUgc2NhbiBrZXlzIGFyZSBzYXZlZCBpbiBuZXdiYXRjaC5p dGVtcy4KICAqIG1vcmVMZWZ0IG9yIG1vcmVSaWdodCAoYXMgYXBwcm9wcmlhdGUpIGlzIGNsZWFy ZWQgaWYgX2J0X2NoZWNra2V5cyByZXBvcnRzCiAgKiB0aGF0IHRoZXJlIGNhbiBiZSBubyBtb3Jl IG1hdGNoaW5nIHR1cGxlcyBpbiB0aGUgY3VycmVudCBzY2FuIGRpcmVjdGlvbgogICogKGNvdWxk IGp1c3QgYmUgZm9yIHRoZSBjdXJyZW50IHByaW1pdGl2ZSBpbmRleCBzY2FuIHdoZW4gc2NhbiBo YXMgYXJyYXlzKS4KQEAgLTEzMSw4ICsxMzEsOCBAQCBzdGF0aWMgYm9vbCBfYnRfdmVyaWZ5X2tl eXNfd2l0aF9hcnJheWtleXMoSW5kZXhTY2FuRGVzYyBzY2FuKTsKICAqIFJldHVybnMgdHJ1ZSBp ZiBhbnkgbWF0Y2hpbmcgaXRlbXMgZm91bmQgb24gdGhlIHBhZ2UsIGZhbHNlIGlmIG5vbmUuCiAg Ki8KIGJvb2wKLV9idF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24g ZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtLAotCQkJIGJvb2wgZmlyc3RwYWdlKQorX2J0X3JlYWRw YWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggbmV3YmF0Y2gsIFNjYW5EaXJl Y3Rpb24gZGlyLAorCQkJIE9mZnNldE51bWJlciBvZmZudW0sIGJvb2wgZmlyc3RwYWdlKQogewog CVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247CiAJQlRTY2FuT3BhcXVlIHNvID0g KEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwpAQCAtMTQ0LDIzICsxNDQsMjAgQEAgX2J0X3Jl YWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNldE51bWJl ciBvZmZudW0sCiAJYm9vbAkJYXJyYXlLZXlzLAogCQkJCWlnbm9yZV9raWxsZWRfdHVwbGVzID0g c2Nhbi0+aWdub3JlX2tpbGxlZF90dXBsZXM7CiAJaW50CQkJaXRlbUluZGV4LAorCQkJCXR1cGxl T2Zmc2V0ID0gMCwKIAkJCQlpbmRuYXR0czsKIAogCS8qIHNhdmUgdGhlIHBhZ2UvYnVmZmVyIGJs b2NrIG51bWJlciwgYWxvbmcgd2l0aCBpdHMgc2libGluZyBsaW5rcyAqLwotCXBhZ2UgPSBCdWZm ZXJHZXRQYWdlKHNvLT5jdXJyUG9zLmJ1Zik7CisJcGFnZSA9IEJ1ZmZlckdldFBhZ2UobmV3YmF0 Y2gtPmJ1Zik7CiAJb3BhcXVlID0gQlRQYWdlR2V0T3BhcXVlKHBhZ2UpOwotCXNvLT5jdXJyUG9z LmN1cnJQYWdlID0gQnVmZmVyR2V0QmxvY2tOdW1iZXIoc28tPmN1cnJQb3MuYnVmKTsKLQlzby0+ Y3VyclBvcy5wcmV2UGFnZSA9IG9wYXF1ZS0+YnRwb19wcmV2OwotCXNvLT5jdXJyUG9zLm5leHRQ YWdlID0gb3BhcXVlLT5idHBvX25leHQ7Ci0JLyogZGVsYXkgc2V0dGluZyBzby0+Y3VyclBvcy5s c24gdW50aWwgX2J0X2Ryb3BfbG9ja19hbmRfbWF5YmVfcGluICovCi0JcHN0YXRlLmRpciA9IHNv LT5jdXJyUG9zLmRpciA9IGRpcjsKLQlzby0+Y3VyclBvcy5uZXh0VHVwbGVPZmZzZXQgPSAwOwor CXBzdGF0ZS5jdXJycGFnZSA9IG5ld2JhdGNoLT5jdXJyUGFnZSA9IEJ1ZmZlckdldEJsb2NrTnVt YmVyKG5ld2JhdGNoLT5idWYpOworCW5ld2JhdGNoLT5wcmV2UGFnZSA9IG9wYXF1ZS0+YnRwb19w cmV2OworCW5ld2JhdGNoLT5uZXh0UGFnZSA9IG9wYXF1ZS0+YnRwb19uZXh0OworCXBzdGF0ZS5k aXIgPSBuZXdiYXRjaC0+ZGlyID0gZGlyOwogCiAJLyogZWl0aGVyIG1vcmVSaWdodCBvciBtb3Jl TGVmdCBzaG91bGQgYmUgc2V0IG5vdyAobWF5IGJlIHVuc2V0IGxhdGVyKSAqLwotCUFzc2VydChT Y2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikgPyBzby0+Y3VyclBvcy5tb3JlUmlnaHQgOgotCQkg ICBzby0+Y3VyclBvcy5tb3JlTGVmdCk7CisJQXNzZXJ0KFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQo ZGlyKSA/IG5ld2JhdGNoLT5tb3JlUmlnaHQgOiBuZXdiYXRjaC0+bW9yZUxlZnQpOwogCUFzc2Vy dCghUF9JR05PUkUob3BhcXVlKSk7Ci0JQXNzZXJ0KEJUU2NhblBvc0lzUGlubmVkKHNvLT5jdXJy UG9zKSk7CiAJQXNzZXJ0KCFzby0+bmVlZFByaW1TY2FuKTsKIAogCS8qIGluaXRpYWxpemUgbG9j YWwgdmFyaWFibGVzICovCkBAIC0xODgsMTQgKzE4NSwxMiBAQCBfYnRfcmVhZHBhZ2UoSW5kZXhT Y2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKIAl7 CiAJCS8qIGFsbG93IG5leHQvcHJldiBwYWdlIHRvIGJlIHJlYWQgYnkgb3RoZXIgd29ya2VyIHdp dGhvdXQgZGVsYXkgKi8KIAkJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKLQkJCV9i dF9wYXJhbGxlbF9yZWxlYXNlKHNjYW4sIHNvLT5jdXJyUG9zLm5leHRQYWdlLAotCQkJCQkJCQkg c28tPmN1cnJQb3MuY3VyclBhZ2UpOworCQkJX2J0X3BhcmFsbGVsX3JlbGVhc2Uoc2NhbiwgbmV3 YmF0Y2gtPm5leHRQYWdlLCBuZXdiYXRjaC0+Y3VyclBhZ2UpOwogCQllbHNlCi0JCQlfYnRfcGFy YWxsZWxfcmVsZWFzZShzY2FuLCBzby0+Y3VyclBvcy5wcmV2UGFnZSwKLQkJCQkJCQkJIHNvLT5j dXJyUG9zLmN1cnJQYWdlKTsKKwkJCV9idF9wYXJhbGxlbF9yZWxlYXNlKHNjYW4sIG5ld2JhdGNo LT5wcmV2UGFnZSwgbmV3YmF0Y2gtPmN1cnJQYWdlKTsKIAl9CiAKLQlQcmVkaWNhdGVMb2NrUGFn ZShyZWwsIHNvLT5jdXJyUG9zLmN1cnJQYWdlLCBzY2FuLT54c19zbmFwc2hvdCk7CisJUHJlZGlj YXRlTG9ja1BhZ2UocmVsLCBwc3RhdGUuY3VycnBhZ2UsIHNjYW4tPnhzX3NuYXBzaG90KTsKIAog CWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCiAJewpAQCAtMjEyLDExICsyMDcsMTAg QEAgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIE9m ZnNldE51bWJlciBvZmZudW0sCiAJCQkJCSFfYnRfc2NhbmJlaGluZF9jaGVja2tleXMoc2Nhbiwg ZGlyLCBwc3RhdGUuZmluYWx0dXApKQogCQkJCXsKIAkJCQkJLyogU2NoZWR1bGUgYW5vdGhlciBw cmltaXRpdmUgaW5kZXggc2NhbiBhZnRlciBhbGwgKi8KLQkJCQkJc28tPmN1cnJQb3MubW9yZVJp Z2h0ID0gZmFsc2U7CisJCQkJCW5ld2JhdGNoLT5tb3JlUmlnaHQgPSBmYWxzZTsKIAkJCQkJc28t Pm5lZWRQcmltU2NhbiA9IHRydWU7CiAJCQkJCWlmIChzY2FuLT5wYXJhbGxlbF9zY2FuKQotCQkJ CQkJX2J0X3BhcmFsbGVsX3ByaW1zY2FuX3NjaGVkdWxlKHNjYW4sCi0JCQkJCQkJCQkJCQkJICAg c28tPmN1cnJQb3MuY3VyclBhZ2UpOworCQkJCQkJX2J0X3BhcmFsbGVsX3ByaW1zY2FuX3NjaGVk dWxlKHNjYW4sIG5ld2JhdGNoLT5jdXJyUGFnZSk7CiAJCQkJCXJldHVybiBmYWxzZTsKIAkJCQl9 CiAJCQl9CkBAIC0yODAsMjYgKzI3NCwyNiBAQCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBz Y2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKIAkJCQlpZiAoIUJU cmVlVHVwbGVJc1Bvc3RpbmcoaXR1cCkpCiAJCQkJewogCQkJCQkvKiBSZW1lbWJlciBpdCAqLwot CQkJCQlfYnRfc2F2ZWl0ZW0oc28sIGl0ZW1JbmRleCwgb2ZmbnVtLCBpdHVwKTsKKwkJCQkJX2J0 X3NhdmVpdGVtKG5ld2JhdGNoLCBpdGVtSW5kZXgsIG9mZm51bSwgaXR1cCwgJnR1cGxlT2Zmc2V0 KTsKIAkJCQkJaXRlbUluZGV4Kys7CiAJCQkJfQogCQkJCWVsc2UKIAkJCQl7Ci0JCQkJCWludAkJ CXR1cGxlT2Zmc2V0OworCQkJCQlpbnQJCQliYXNlT2Zmc2V0OwogCiAJCQkJCS8qIFNldCB1cCBw b3N0aW5nIGxpc3Qgc3RhdGUgKGFuZCByZW1lbWJlciBmaXJzdCBUSUQpICovCi0JCQkJCXR1cGxl T2Zmc2V0ID0KLQkJCQkJCV9idF9zZXR1cHBvc3RpbmdpdGVtcyhzbywgaXRlbUluZGV4LCBvZmZu dW0sCisJCQkJCWJhc2VPZmZzZXQgPQorCQkJCQkJX2J0X3NldHVwcG9zdGluZ2l0ZW1zKG5ld2Jh dGNoLCBpdGVtSW5kZXgsIG9mZm51bSwKIAkJCQkJCQkJCQkJICBCVHJlZVR1cGxlR2V0UG9zdGlu Z04oaXR1cCwgMCksCi0JCQkJCQkJCQkJCSAgaXR1cCk7CisJCQkJCQkJCQkJCSAgaXR1cCwgJnR1 cGxlT2Zmc2V0KTsKIAkJCQkJaXRlbUluZGV4Kys7CiAKIAkJCQkJLyogUmVtZW1iZXIgYWxsIGxh dGVyIFRJRHMgKG11c3QgYmUgYXQgbGVhc3Qgb25lKSAqLwogCQkJCQlmb3IgKGludCBpID0gMTsg aSA8IEJUcmVlVHVwbGVHZXROUG9zdGluZyhpdHVwKTsgaSsrKQogCQkJCQl7Ci0JCQkJCQlfYnRf c2F2ZXBvc3RpbmdpdGVtKHNvLCBpdGVtSW5kZXgsIG9mZm51bSwKKwkJCQkJCV9idF9zYXZlcG9z dGluZ2l0ZW0obmV3YmF0Y2gsIGl0ZW1JbmRleCwgb2ZmbnVtLAogCQkJCQkJCQkJCQlCVHJlZVR1 cGxlR2V0UG9zdGluZ04oaXR1cCwgaSksCi0JCQkJCQkJCQkJCXR1cGxlT2Zmc2V0KTsKKwkJCQkJ CQkJCQkJYmFzZU9mZnNldCk7CiAJCQkJCQlpdGVtSW5kZXgrKzsKIAkJCQkJfQogCQkJCX0KQEAg LTMzOSwxMiArMzMzLDExIEBAIF9idF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5E aXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtLAogCQl9CiAKIAkJaWYgKCFwc3RhdGUu Y29udGludWVzY2FuKQotCQkJc28tPmN1cnJQb3MubW9yZVJpZ2h0ID0gZmFsc2U7CisJCQluZXdi YXRjaC0+bW9yZVJpZ2h0ID0gZmFsc2U7CiAKIAkJQXNzZXJ0KGl0ZW1JbmRleCA8PSBNYXhUSURz UGVyQlRyZWVQYWdlKTsKLQkJc28tPmN1cnJQb3MuZmlyc3RJdGVtID0gMDsKLQkJc28tPmN1cnJQ b3MubGFzdEl0ZW0gPSBpdGVtSW5kZXggLSAxOwotCQlzby0+Y3VyclBvcy5pdGVtSW5kZXggPSAw OworCQluZXdiYXRjaC0+Zmlyc3RJdGVtID0gMDsKKwkJbmV3YmF0Y2gtPmxhc3RJdGVtID0gaXRl bUluZGV4IC0gMTsKIAl9CiAJZWxzZQogCXsKQEAgLTM2MSwxMSArMzU0LDEwIEBAIF9idF9yZWFk cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIg b2ZmbnVtLAogCQkJCQkhX2J0X3NjYW5iZWhpbmRfY2hlY2trZXlzKHNjYW4sIGRpciwgcHN0YXRl LmZpbmFsdHVwKSkKIAkJCQl7CiAJCQkJCS8qIFNjaGVkdWxlIGFub3RoZXIgcHJpbWl0aXZlIGlu ZGV4IHNjYW4gYWZ0ZXIgYWxsICovCi0JCQkJCXNvLT5jdXJyUG9zLm1vcmVMZWZ0ID0gZmFsc2U7 CisJCQkJCW5ld2JhdGNoLT5tb3JlTGVmdCA9IGZhbHNlOwogCQkJCQlzby0+bmVlZFByaW1TY2Fu ID0gdHJ1ZTsKIAkJCQkJaWYgKHNjYW4tPnBhcmFsbGVsX3NjYW4pCi0JCQkJCQlfYnRfcGFyYWxs ZWxfcHJpbXNjYW5fc2NoZWR1bGUoc2NhbiwKLQkJCQkJCQkJCQkJCQkgICBzby0+Y3VyclBvcy5j dXJyUGFnZSk7CisJCQkJCQlfYnRfcGFyYWxsZWxfcHJpbXNjYW5fc2NoZWR1bGUoc2NhbiwgbmV3 YmF0Y2gtPmN1cnJQYWdlKTsKIAkJCQkJcmV0dXJuIGZhbHNlOwogCQkJCX0KIAkJCX0KQEAgLTQ2 NiwyNyArNDU4LDI3IEBAIF9idF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJl Y3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtLAogCQkJCXsKIAkJCQkJLyogUmVtZW1iZXIg aXQgKi8KIAkJCQkJaXRlbUluZGV4LS07Ci0JCQkJCV9idF9zYXZlaXRlbShzbywgaXRlbUluZGV4 LCBvZmZudW0sIGl0dXApOworCQkJCQlfYnRfc2F2ZWl0ZW0obmV3YmF0Y2gsIGl0ZW1JbmRleCwg b2ZmbnVtLCBpdHVwLCAmdHVwbGVPZmZzZXQpOwogCQkJCX0KIAkJCQllbHNlCiAJCQkJewogCQkJ CQl1aW50MTYJCW5pdGVtcyA9IEJUcmVlVHVwbGVHZXROUG9zdGluZyhpdHVwKTsKLQkJCQkJaW50 CQkJdHVwbGVPZmZzZXQ7CisJCQkJCWludAkJCWJhc2VPZmZzZXQ7CiAKIAkJCQkJLyogU2V0IHVw IHBvc3RpbmcgbGlzdCBzdGF0ZSAoYW5kIHJlbWVtYmVyIGxhc3QgVElEKSAqLwogCQkJCQlpdGVt SW5kZXgtLTsKLQkJCQkJdHVwbGVPZmZzZXQgPQotCQkJCQkJX2J0X3NldHVwcG9zdGluZ2l0ZW1z KHNvLCBpdGVtSW5kZXgsIG9mZm51bSwKKwkJCQkJYmFzZU9mZnNldCA9CisJCQkJCQlfYnRfc2V0 dXBwb3N0aW5naXRlbXMobmV3YmF0Y2gsIGl0ZW1JbmRleCwgb2ZmbnVtLAogCQkJCQkJCQkJCQkg IEJUcmVlVHVwbGVHZXRQb3N0aW5nTihpdHVwLCBuaXRlbXMgLSAxKSwKLQkJCQkJCQkJCQkJICBp dHVwKTsKKwkJCQkJCQkJCQkJICBpdHVwLCAmdHVwbGVPZmZzZXQpOwogCiAJCQkJCS8qIFJlbWVt YmVyIGFsbCBwcmlvciBUSURzIChtdXN0IGJlIGF0IGxlYXN0IG9uZSkgKi8KIAkJCQkJZm9yIChp bnQgaSA9IG5pdGVtcyAtIDI7IGkgPj0gMDsgaS0tKQogCQkJCQl7CiAJCQkJCQlpdGVtSW5kZXgt LTsKLQkJCQkJCV9idF9zYXZlcG9zdGluZ2l0ZW0oc28sIGl0ZW1JbmRleCwgb2ZmbnVtLAorCQkJ CQkJX2J0X3NhdmVwb3N0aW5naXRlbShuZXdiYXRjaCwgaXRlbUluZGV4LCBvZmZudW0sCiAJCQkJ CQkJCQkJCUJUcmVlVHVwbGVHZXRQb3N0aW5nTihpdHVwLCBpKSwKLQkJCQkJCQkJCQkJdHVwbGVP ZmZzZXQpOworCQkJCQkJCQkJCQliYXNlT2Zmc2V0KTsKIAkJCQkJfQogCQkJCX0KIAkJCX0KQEAg LTUwMiwxMiArNDk0LDExIEBAIF9idF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5E aXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtLAogCQkgKiBiZSBmb3VuZCB0aGVyZQog CQkgKi8KIAkJaWYgKCFwc3RhdGUuY29udGludWVzY2FuKQotCQkJc28tPmN1cnJQb3MubW9yZUxl ZnQgPSBmYWxzZTsKKwkJCW5ld2JhdGNoLT5tb3JlTGVmdCA9IGZhbHNlOwogCiAJCUFzc2VydChp dGVtSW5kZXggPj0gMCk7Ci0JCXNvLT5jdXJyUG9zLmZpcnN0SXRlbSA9IGl0ZW1JbmRleDsKLQkJ c28tPmN1cnJQb3MubGFzdEl0ZW0gPSBNYXhUSURzUGVyQlRyZWVQYWdlIC0gMTsKLQkJc28tPmN1 cnJQb3MuaXRlbUluZGV4ID0gTWF4VElEc1BlckJUcmVlUGFnZSAtIDE7CisJCW5ld2JhdGNoLT5m aXJzdEl0ZW0gPSBpdGVtSW5kZXg7CisJCW5ld2JhdGNoLT5sYXN0SXRlbSA9IE1heFRJRHNQZXJC VHJlZVBhZ2UgLSAxOwogCX0KIAogCS8qCkBAIC01MjQsNyArNTE1LDcgQEAgX2J0X3JlYWRwYWdl KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNldE51bWJlciBvZmZu dW0sCiAJICovCiAJQXNzZXJ0KCFwc3RhdGUuZm9yY2Vub25yZXF1aXJlZCk7CiAKLQlyZXR1cm4g KHNvLT5jdXJyUG9zLmZpcnN0SXRlbSA8PSBzby0+Y3VyclBvcy5sYXN0SXRlbSk7CisJcmV0dXJu IChuZXdiYXRjaC0+Zmlyc3RJdGVtIDw9IG5ld2JhdGNoLT5sYXN0SXRlbSk7CiB9CiAKIC8qCkBA IC0xMDI3LDkwICsxMDE4LDk5IEBAIF9idF9vcHBvZGlyX2NoZWNra2V5cyhJbmRleFNjYW5EZXNj IHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLAogCXJldHVybiB0cnVlOwogfQogCi0vKiBTYXZlIGFu IGluZGV4IGl0ZW0gaW50byBzby0+Y3VyclBvcy5pdGVtc1tpdGVtSW5kZXhdICovCisvKiBTYXZl IGFuIGluZGV4IGl0ZW0gaW50byBuZXdiYXRjaC5pdGVtc1tpdGVtSW5kZXhdICovCiBzdGF0aWMg dm9pZAotX2J0X3NhdmVpdGVtKEJUU2Nhbk9wYXF1ZSBzbywgaW50IGl0ZW1JbmRleCwKLQkJCSBP ZmZzZXROdW1iZXIgb2ZmbnVtLCBJbmRleFR1cGxlIGl0dXApCitfYnRfc2F2ZWl0ZW0oSW5kZXhT Y2FuQmF0Y2ggbmV3YmF0Y2gsIGludCBpdGVtSW5kZXgsIE9mZnNldE51bWJlciBvZmZudW0sCisJ CQkgSW5kZXhUdXBsZSBpdHVwLCBpbnQgKnR1cGxlT2Zmc2V0KQogewotCUJUU2NhblBvc0l0ZW0g KmN1cnJJdGVtID0gJnNvLT5jdXJyUG9zLml0ZW1zW2l0ZW1JbmRleF07Ci0KIAlBc3NlcnQoIUJU cmVlVHVwbGVJc1Bpdm90KGl0dXApICYmICFCVHJlZVR1cGxlSXNQb3N0aW5nKGl0dXApKTsKIAot CWN1cnJJdGVtLT5oZWFwVGlkID0gaXR1cC0+dF90aWQ7Ci0JY3Vyckl0ZW0tPmluZGV4T2Zmc2V0 ID0gb2ZmbnVtOwotCWlmIChzby0+Y3VyclR1cGxlcykKKwkvKiBjb3B5IHRoZSBwb3B1bGF0ZWQg cGFydCBvZiB0aGUgaXRlbXMgYXJyYXkgKi8KKwluZXdiYXRjaC0+aXRlbXNbaXRlbUluZGV4XS5o ZWFwVGlkID0gaXR1cC0+dF90aWQ7CisJbmV3YmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF0uaW5kZXhP ZmZzZXQgPSBvZmZudW07CisJbmV3YmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF0uY2hlY2tlZFZpc2li bGUgPSBmYWxzZTsKKwluZXdiYXRjaC0+aXRlbXNbaXRlbUluZGV4XS5hbGxWaXNpYmxlID0gZmFs c2U7CisKKwlpZiAobmV3YmF0Y2gtPmN1cnJUdXBsZXMpCiAJewogCQlTaXplCQlpdHVwc3ogPSBJ bmRleFR1cGxlU2l6ZShpdHVwKTsKIAotCQljdXJySXRlbS0+dHVwbGVPZmZzZXQgPSBzby0+Y3Vy clBvcy5uZXh0VHVwbGVPZmZzZXQ7Ci0JCW1lbWNweShzby0+Y3VyclR1cGxlcyArIHNvLT5jdXJy UG9zLm5leHRUdXBsZU9mZnNldCwgaXR1cCwgaXR1cHN6KTsKLQkJc28tPmN1cnJQb3MubmV4dFR1 cGxlT2Zmc2V0ICs9IE1BWEFMSUdOKGl0dXBzeik7CisJCW5ld2JhdGNoLT5pdGVtc1tpdGVtSW5k ZXhdLnR1cGxlT2Zmc2V0ID0gKnR1cGxlT2Zmc2V0OworCQltZW1jcHkobmV3YmF0Y2gtPmN1cnJU dXBsZXMgKyAqdHVwbGVPZmZzZXQsIGl0dXAsIGl0dXBzeik7CisJCSp0dXBsZU9mZnNldCArPSBN QVhBTElHTihpdHVwc3opOwogCX0KIH0KIAogLyoKICAqIFNldHVwIHN0YXRlIHRvIHNhdmUgVElE cy9pdGVtcyBmcm9tIGEgc2luZ2xlIHBvc3RpbmcgbGlzdCB0dXBsZS4KICAqCi0gKiBTYXZlcyBh biBpbmRleCBpdGVtIGludG8gc28tPmN1cnJQb3MuaXRlbXNbaXRlbUluZGV4XSBmb3IgVElEIHRo YXQgaXMKLSAqIHJldHVybmVkIHRvIHNjYW4gZmlyc3QuICBTZWNvbmQgb3Igc3Vic2VxdWVudCBU SURzIGZvciBwb3N0aW5nIGxpc3Qgc2hvdWxkCi0gKiBiZSBzYXZlZCBieSBjYWxsaW5nIF9idF9z YXZlcG9zdGluZ2l0ZW0oKS4KKyAqIFNhdmVzIGFuIGluZGV4IGl0ZW0gaW50byBuZXdiYXRjaC5p dGVtc1tpdGVtSW5kZXhdIGZvciBUSUQgdGhhdCBpcyByZXR1cm5lZAorICogdG8gc2NhbiBmaXJz dC4gIFNlY29uZCBvciBzdWJzZXF1ZW50IFRJRHMgZm9yIHBvc3RpbmcgbGlzdCBzaG91bGQgYmUg c2F2ZWQKKyAqIGJ5IGNhbGxpbmcgX2J0X3NhdmVwb3N0aW5naXRlbSgpLgogICoKLSAqIFJldHVy bnMgYW4gb2Zmc2V0IGludG8gdHVwbGUgc3RvcmFnZSBzcGFjZSB0aGF0IG1haW4gdHVwbGUgaXMg c3RvcmVkIGF0IGlmCi0gKiBuZWVkZWQuCisgKiBSZXR1cm5zIGJhc2VPZmZzZXQsIGFuIG9mZnNl dCBpbnRvIHR1cGxlIHN0b3JhZ2Ugc3BhY2UgdGhhdCBtYWluIHR1cGxlIGlzCisgKiBzdG9yZWQg YXQgaWYgbmVlZGVkLgogICovCiBzdGF0aWMgaW50Ci1fYnRfc2V0dXBwb3N0aW5naXRlbXMoQlRT Y2FuT3BhcXVlIHNvLCBpbnQgaXRlbUluZGV4LCBPZmZzZXROdW1iZXIgb2ZmbnVtLAotCQkJCQkg IGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAqaGVhcFRpZCwgSW5kZXhUdXBsZSBpdHVwKQorX2J0X3Nl dHVwcG9zdGluZ2l0ZW1zKEluZGV4U2NhbkJhdGNoIG5ld2JhdGNoLCBpbnQgaXRlbUluZGV4LAor CQkJCQkgIE9mZnNldE51bWJlciBvZmZudW0sIGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAqaGVhcFRp ZCwKKwkJCQkJICBJbmRleFR1cGxlIGl0dXAsIGludCAqdHVwbGVPZmZzZXQpCiB7Ci0JQlRTY2Fu UG9zSXRlbSAqY3Vyckl0ZW0gPSAmc28tPmN1cnJQb3MuaXRlbXNbaXRlbUluZGV4XTsKKwlCYXRj aE1hdGNoaW5nSXRlbSAqaXRlbSA9ICZuZXdiYXRjaC0+aXRlbXNbaXRlbUluZGV4XTsKIAogCUFz c2VydChCVHJlZVR1cGxlSXNQb3N0aW5nKGl0dXApKTsKIAotCWN1cnJJdGVtLT5oZWFwVGlkID0g KmhlYXBUaWQ7Ci0JY3Vyckl0ZW0tPmluZGV4T2Zmc2V0ID0gb2ZmbnVtOwotCWlmIChzby0+Y3Vy clR1cGxlcykKKwkvKiBjb3B5IHRoZSBwb3B1bGF0ZWQgcGFydCBvZiB0aGUgaXRlbXMgYXJyYXkg Ki8KKwlpdGVtLT5oZWFwVGlkID0gKmhlYXBUaWQ7CisJaXRlbS0+aW5kZXhPZmZzZXQgPSBvZmZu dW07CisJaXRlbS0+Y2hlY2tlZFZpc2libGUgPSBmYWxzZTsKKwlpdGVtLT5hbGxWaXNpYmxlID0g ZmFsc2U7CisKKwlpZiAobmV3YmF0Y2gtPmN1cnJUdXBsZXMpCiAJewogCQkvKiBTYXZlIGJhc2Ug SW5kZXhUdXBsZSAodHJ1bmNhdGUgcG9zdGluZyBsaXN0KSAqLwogCQlJbmRleFR1cGxlCWJhc2U7 CiAJCVNpemUJCWl0dXBzeiA9IEJUcmVlVHVwbGVHZXRQb3N0aW5nT2Zmc2V0KGl0dXApOwogCiAJ CWl0dXBzeiA9IE1BWEFMSUdOKGl0dXBzeik7Ci0JCWN1cnJJdGVtLT50dXBsZU9mZnNldCA9IHNv LT5jdXJyUG9zLm5leHRUdXBsZU9mZnNldDsKLQkJYmFzZSA9IChJbmRleFR1cGxlKSAoc28tPmN1 cnJUdXBsZXMgKyBzby0+Y3VyclBvcy5uZXh0VHVwbGVPZmZzZXQpOworCQlpdGVtLT50dXBsZU9m ZnNldCA9ICp0dXBsZU9mZnNldDsKKwkJYmFzZSA9IChJbmRleFR1cGxlKSAobmV3YmF0Y2gtPmN1 cnJUdXBsZXMgKyAqdHVwbGVPZmZzZXQpOwogCQltZW1jcHkoYmFzZSwgaXR1cCwgaXR1cHN6KTsK IAkJLyogRGVmZW5zaXZlbHkgcmVkdWNlIHdvcmsgYXJlYSBpbmRleCB0dXBsZSBoZWFkZXIgc2l6 ZSAqLwogCQliYXNlLT50X2luZm8gJj0gfklOREVYX1NJWkVfTUFTSzsKIAkJYmFzZS0+dF9pbmZv IHw9IGl0dXBzejsKLQkJc28tPmN1cnJQb3MubmV4dFR1cGxlT2Zmc2V0ICs9IGl0dXBzejsKKwkJ KnR1cGxlT2Zmc2V0ICs9IGl0dXBzejsKIAotCQlyZXR1cm4gY3Vyckl0ZW0tPnR1cGxlT2Zmc2V0 OworCQlyZXR1cm4gaXRlbS0+dHVwbGVPZmZzZXQ7CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKIC8q Ci0gKiBTYXZlIGFuIGluZGV4IGl0ZW0gaW50byBzby0+Y3VyclBvcy5pdGVtc1tpdGVtSW5kZXhd IGZvciBjdXJyZW50IHBvc3RpbmcKKyAqIFNhdmUgYW4gaW5kZXggaXRlbSBpbnRvIG5ld2JhdGNo Lml0ZW1zW2l0ZW1JbmRleF0gZm9yIGN1cnJlbnQgcG9zdGluZwogICogdHVwbGUuCiAgKgogICog QXNzdW1lcyB0aGF0IF9idF9zZXR1cHBvc3RpbmdpdGVtcygpIGhhcyBhbHJlYWR5IGJlZW4gY2Fs bGVkIGZvciBjdXJyZW50Ci0gKiBwb3N0aW5nIGxpc3QgdHVwbGUuICBDYWxsZXIgcGFzc2VzIGl0 cyByZXR1cm4gdmFsdWUgYXMgdHVwbGVPZmZzZXQuCisgKiBwb3N0aW5nIGxpc3QgdHVwbGUuICBD YWxsZXIgcGFzc2VzIGl0cyByZXR1cm4gdmFsdWUgYXMgYmFzZU9mZnNldC4KICAqLwogc3RhdGlj IGlubGluZSB2b2lkCi1fYnRfc2F2ZXBvc3RpbmdpdGVtKEJUU2Nhbk9wYXF1ZSBzbywgaW50IGl0 ZW1JbmRleCwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKLQkJCQkJSXRlbVBvaW50ZXIgaGVhcFRpZCwg aW50IHR1cGxlT2Zmc2V0KQorX2J0X3NhdmVwb3N0aW5naXRlbShJbmRleFNjYW5CYXRjaCBuZXdi YXRjaCwgaW50IGl0ZW1JbmRleCwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKKwkJCQkJSXRlbVBvaW50 ZXIgaGVhcFRpZCwgaW50IGJhc2VPZmZzZXQpCiB7Ci0JQlRTY2FuUG9zSXRlbSAqY3Vyckl0ZW0g PSAmc28tPmN1cnJQb3MuaXRlbXNbaXRlbUluZGV4XTsKKwlCYXRjaE1hdGNoaW5nSXRlbSAqaXRl bSA9ICZuZXdiYXRjaC0+aXRlbXNbaXRlbUluZGV4XTsKIAotCWN1cnJJdGVtLT5oZWFwVGlkID0g KmhlYXBUaWQ7Ci0JY3Vyckl0ZW0tPmluZGV4T2Zmc2V0ID0gb2ZmbnVtOworCWl0ZW0tPmhlYXBU aWQgPSAqaGVhcFRpZDsKKwlpdGVtLT5pbmRleE9mZnNldCA9IG9mZm51bTsKKwlpdGVtLT5jaGVj a2VkVmlzaWJsZSA9IGZhbHNlOworCWl0ZW0tPmFsbFZpc2libGUgPSBmYWxzZTsKIAogCS8qCiAJ ICogSGF2ZSBpbmRleC1vbmx5IHNjYW5zIHJldHVybiB0aGUgc2FtZSBiYXNlIEluZGV4VHVwbGUg Zm9yIGV2ZXJ5IFRJRAogCSAqIHRoYXQgb3JpZ2luYXRlcyBmcm9tIHRoZSBzYW1lIHBvc3Rpbmcg bGlzdAogCSAqLwotCWlmIChzby0+Y3VyclR1cGxlcykKLQkJY3Vyckl0ZW0tPnR1cGxlT2Zmc2V0 ID0gdHVwbGVPZmZzZXQ7CisJaWYgKG5ld2JhdGNoLT5jdXJyVHVwbGVzKQorCQlpdGVtLT50dXBs ZU9mZnNldCA9IGJhc2VPZmZzZXQ7CiB9CiAKICNkZWZpbmUgTE9PS19BSEVBRF9SRVFVSVJFRF9S RUNIRUNLUyAJMwpAQCAtMjgyMiwxMyArMjgyMiwxMyBAQCBuZXdfcHJpbV9zY2FuOgogCSAqIE5v dGU6IFdlIG1ha2UgYSBzb2Z0IGFzc3VtcHRpb24gdGhhdCB0aGUgY3VycmVudCBzY2FuIGRpcmVj dGlvbiB3aWxsCiAJICogYWxzbyBiZSB1c2VkIHdpdGhpbiBfYnRfbmV4dCwgd2hlbiBpdCBpcyBh c2tlZCB0byBzdGVwIG9mZiB0aGlzIHBhZ2UuCiAJICogSXQgaXMgdXAgdG8gX2J0X25leHQgdG8g Y2FuY2VsIHRoaXMgc2NoZWR1bGVkIHByaW1pdGl2ZSBpbmRleCBzY2FuCi0JICogd2hlbmV2ZXIg aXQgc3RlcHMgdG8gYSBwYWdlIGluIHRoZSBkaXJlY3Rpb24gb3Bwb3NpdGUgY3VyclBvcy5kaXIu CisJICogd2hlbmV2ZXIgaXQgc3RlcHMgdG8gYSBwYWdlIGluIHRoZSBkaXJlY3Rpb24gb3Bwb3Np dGUgcHN0YXRlLT5kaXIuCiAJICovCiAJcHN0YXRlLT5jb250aW51ZXNjYW4gPSBmYWxzZTsJLyog VGVsbCBfYnRfcmVhZHBhZ2Ugd2UncmUgZG9uZS4uLiAqLwogCXNvLT5uZWVkUHJpbVNjYW4gPSB0 cnVlOwkvKiAuLi5idXQgY2FsbCBfYnRfZmlyc3QgYWdhaW4gKi8KIAogCWlmIChzY2FuLT5wYXJh bGxlbF9zY2FuKQotCQlfYnRfcGFyYWxsZWxfcHJpbXNjYW5fc2NoZWR1bGUoc2Nhbiwgc28tPmN1 cnJQb3MuY3VyclBhZ2UpOworCQlfYnRfcGFyYWxsZWxfcHJpbXNjYW5fc2NoZWR1bGUoc2Nhbiwg cHN0YXRlLT5jdXJycGFnZSk7CiAKIAkvKiBDYWxsZXIncyB0dXBsZSBkb2Vzbid0IG1hdGNoIHRo ZSBuZXcgcXVhbCAqLwogCXJldHVybiBmYWxzZTsKQEAgLTI5MTMsMTQgKzI5MTMsNiBAQCBfYnRf YWR2YW5jZV9hcnJheV9rZXlzX2luY3JlbWVudChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJl Y3Rpb24gZGlyLAogCSAqIFJlc3RvcmUgdGhlIGFycmF5IGtleXMgdG8gdGhlIHN0YXRlIHRoZXkg d2VyZSBpbiBpbW1lZGlhdGVseSBiZWZvcmUgd2UKIAkgKiB3ZXJlIGNhbGxlZC4gIFRoaXMgZW5z dXJlcyB0aGF0IHRoZSBhcnJheXMgb25seSBldmVyIHJhdGNoZXQgaW4gdGhlCiAJICogY3VycmVu dCBzY2FuIGRpcmVjdGlvbi4KLQkgKgotCSAqIFdpdGhvdXQgdGhpcywgc2NhbnMgY291bGQgb3Zl cmxvb2sgbWF0Y2hpbmcgdHVwbGVzIHdoZW4gdGhlIHNjYW4KLQkgKiBkaXJlY3Rpb24gZ2V0cyBy ZXZlcnNlZCBqdXN0IGJlZm9yZSBidGdldHR1cGxlIHJ1bnMgb3V0IG9mIGl0ZW1zIHRvCi0JICog cmV0dXJuLCBidXQganVzdCBhZnRlciBfYnRfcmVhZHBhZ2UgcHJlcGFyZXMgYWxsIHRoZSBpdGVt cyBmcm9tIHRoZQotCSAqIHNjYW4ncyBmaW5hbCBwYWdlIGluIHNvLT5jdXJyUG9zLiAgV2hlbiB3 ZSdyZSBvbiB0aGUgZmluYWwgcGFnZSBpdCBpcwotCSAqIHR5cGljYWwgZm9yIHNvLT5jdXJyUG9z IHRvIGdldCBpbnZhbGlkYXRlZCBvbmNlIGJ0Z2V0dHVwbGUgZmluYWxseQotCSAqIHJldHVybnMg ZmFsc2UsIHdoaWNoJ2xsIGVmZmVjdGl2ZWx5IGludmFsaWRhdGUgdGhlIHNjYW4ncyBhcnJheSBr ZXlzLgotCSAqIFRoYXQgaGFzbid0IGhhcHBlbmVkIHlldCwgdGhvdWdoIC0tIGFuZCBpbiBnZW5l cmFsIGl0IG1heSBuZXZlciBoYXBwZW4uCiAJICovCiAJX2J0X3N0YXJ0X2FycmF5X2tleXMoc2Nh biwgLWRpcik7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVl LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jCmluZGV4IDhkNjM2ZDk4Ni4u ODU2MTMxNjNhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5j CisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMKQEAgLTE1OSwxMSArMTU5 LDEyIEBAIGJ0aGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCQkuYW1hZGp1c3RtZW1iZXJzID0g YnRhZGp1c3RtZW1iZXJzLAogCQkuYW1iZWdpbnNjYW4gPSBidGJlZ2luc2NhbiwKIAkJLmFtcmVz Y2FuID0gYnRyZXNjYW4sCi0JCS5hbWdldHR1cGxlID0gYnRnZXR0dXBsZSwKKwkJLmFtZ2V0dHVw bGUgPSBOVUxMLAorCQkuYW1nZXRiYXRjaCA9IGJ0Z2V0YmF0Y2gsCisJCS5hbWZyZWViYXRjaCA9 IGJ0ZnJlZWJhdGNoLAogCQkuYW1nZXRiaXRtYXAgPSBidGdldGJpdG1hcCwKIAkJLmFtZW5kc2Nh biA9IGJ0ZW5kc2NhbiwKLQkJLmFtbWFya3BvcyA9IGJ0bWFya3BvcywKLQkJLmFtcmVzdHJwb3Mg PSBidHJlc3RycG9zLAorCQkuYW1wb3NyZXNldCA9IGJ0cG9zcmVzZXQsCiAJCS5hbWVzdGltYXRl cGFyYWxsZWxzY2FuID0gYnRlc3RpbWF0ZXBhcmFsbGVsc2NhbiwKIAkJLmFtaW5pdHBhcmFsbGVs c2NhbiA9IGJ0aW5pdHBhcmFsbGVsc2NhbiwKIAkJLmFtcGFyYWxsZWxyZXNjYW4gPSBidHBhcmFs bGVscmVzY2FuLApAQCAtMjIyLDEzICsyMjMsMTMgQEAgYnRpbnNlcnQoUmVsYXRpb24gcmVsLCBE YXR1bSAqdmFsdWVzLCBib29sICppc251bGwsCiB9CiAKIC8qCi0gKglidGdldHR1cGxlKCkgLS0g R2V0IHRoZSBuZXh0IHR1cGxlIGluIHRoZSBzY2FuLgorICoJYnRnZXRiYXRjaCgpIC0tIEdldCB0 aGUgZmlyc3Qgb3IgbmV4dCBiYXRjaCBvZiB0dXBsZXMgaW4gdGhlIHNjYW4KICAqLwotYm9vbAot YnRnZXR0dXBsZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQorSW5kZXhT Y2FuQmF0Y2gKK2J0Z2V0YmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBw cmlvcmJhdGNoLCBTY2FuRGlyZWN0aW9uIGRpcikKIHsKIAlCVFNjYW5PcGFxdWUgc28gPSAoQlRT Y2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7Ci0JYm9vbAkJcmVzOworCUluZGV4U2NhbkJhdGNoIGJh dGNoID0gcHJpb3JiYXRjaDsKIAogCUFzc2VydChzY2FuLT5oZWFwUmVsYXRpb24gIT0gTlVMTCk7 CiAKQEAgLTI0MSw0NSArMjQyLDIwIEBAIGJ0Z2V0dHVwbGUoSW5kZXhTY2FuRGVzYyBzY2FuLCBT Y2FuRGlyZWN0aW9uIGRpcikKIAkJLyoKIAkJICogSWYgd2UndmUgYWxyZWFkeSBpbml0aWFsaXpl ZCB0aGlzIHNjYW4sIHdlIGNhbiBqdXN0IGFkdmFuY2UgaXQgaW4KIAkJICogdGhlIGFwcHJvcHJp YXRlIGRpcmVjdGlvbi4gIElmIHdlIGhhdmVuJ3QgZG9uZSBzbyB5ZXQsIHdlIGNhbGwKLQkJICog X2J0X2ZpcnN0KCkgdG8gZ2V0IHRoZSBmaXJzdCBpdGVtIGluIHRoZSBzY2FuLgorCQkgKiBfYnRf Zmlyc3QoKSB0byBnZXQgdGhlIGZpcnN0IGJhdGNoIGluIHRoZSBzY2FuLgogCQkgKi8KLQkJaWYg KCFCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSkKLQkJCXJlcyA9IF9idF9maXJzdChzY2Fu LCBkaXIpOworCQlpZiAoYmF0Y2ggPT0gTlVMTCkKKwkJCWJhdGNoID0gX2J0X2ZpcnN0KHNjYW4s IGRpcik7CiAJCWVsc2UKLQkJewotCQkJLyoKLQkJCSAqIENoZWNrIHRvIHNlZSBpZiB3ZSBzaG91 bGQga2lsbCB0aGUgcHJldmlvdXNseS1mZXRjaGVkIHR1cGxlLgotCQkJICovCi0JCQlpZiAoc2Nh bi0+a2lsbF9wcmlvcl90dXBsZSkKLQkJCXsKLQkJCQkvKgotCQkJCSAqIFllcywgcmVtZW1iZXIg aXQgZm9yIGxhdGVyLiAoV2UnbGwgZGVhbCB3aXRoIGFsbCBzdWNoCi0JCQkJICogdHVwbGVzIGF0 IG9uY2UgcmlnaHQgYmVmb3JlIGxlYXZpbmcgdGhlIGluZGV4IHBhZ2UuKSAgVGhlCi0JCQkJICog dGVzdCBmb3IgbnVtS2lsbGVkIG92ZXJydW4gaXMgbm90IGp1c3QgcGFyYW5vaWE6IGlmIHRoZQot CQkJCSAqIGNhbGxlciByZXZlcnNlcyBkaXJlY3Rpb24gaW4gdGhlIGluZGV4c2NhbiB0aGVuIHRo ZSBzYW1lCi0JCQkJICogaXRlbSBtaWdodCBnZXQgZW50ZXJlZCBtdWx0aXBsZSB0aW1lcy4gSXQn cyBub3Qgd29ydGgKLQkJCQkgKiB0cnlpbmcgdG8gb3B0aW1pemUgdGhhdCwgc28gd2UgZG9uJ3Qg ZGV0ZWN0IGl0LCBidXQgaW5zdGVhZAotCQkJCSAqIGp1c3QgZm9yZ2V0IGFueSBleGNlc3MgZW50 cmllcy4KLQkJCQkgKi8KLQkJCQlpZiAoc28tPmtpbGxlZEl0ZW1zID09IE5VTEwpCi0JCQkJCXNv LT5raWxsZWRJdGVtcyA9IHBhbGxvY19hcnJheShpbnQsIE1heFRJRHNQZXJCVHJlZVBhZ2UpOwot CQkJCWlmIChzby0+bnVtS2lsbGVkIDwgTWF4VElEc1BlckJUcmVlUGFnZSkKLQkJCQkJc28tPmtp bGxlZEl0ZW1zW3NvLT5udW1LaWxsZWQrK10gPSBzby0+Y3VyclBvcy5pdGVtSW5kZXg7Ci0JCQl9 CisJCQliYXRjaCA9IF9idF9uZXh0KHNjYW4sIGRpciwgYmF0Y2gpOwogCi0JCQkvKgotCQkJICog Tm93IGNvbnRpbnVlIHRoZSBzY2FuLgotCQkJICovCi0JCQlyZXMgPSBfYnRfbmV4dChzY2FuLCBk aXIpOwotCQl9Ci0KLQkJLyogSWYgd2UgaGF2ZSBhIHR1cGxlLCByZXR1cm4gaXQgLi4uICovCi0J CWlmIChyZXMpCisJCS8qIElmIHdlIGhhdmUgYSBiYXRjaCwgcmV0dXJuIGl0IC4uLiAqLworCQlp ZiAoYmF0Y2gpCiAJCQlicmVhazsKIAkJLyogLi4uIG90aGVyd2lzZSBzZWUgaWYgd2UgbmVlZCBh bm90aGVyIHByaW1pdGl2ZSBpbmRleCBzY2FuICovCiAJfSB3aGlsZSAoc28tPm51bUFycmF5S2V5 cyAmJiBfYnRfc3RhcnRfcHJpbV9zY2FuKHNjYW4pKTsKIAotCXJldHVybiByZXM7CisJcmV0dXJu IGJhdGNoOwogfQogCiAvKgpAQCAtMjg5LDYgKzI2NSw3IEBAIGludDY0CiBidGdldGJpdG1hcChJ bmRleFNjYW5EZXNjIHNjYW4sIFRJREJpdG1hcCAqdGJtKQogewogCUJUU2Nhbk9wYXF1ZSBzbyA9 IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKKwlJbmRleFNjYW5CYXRjaCBiYXRjaDsKIAlp bnQ2NAkJbnRpZHMgPSAwOwogCUl0ZW1Qb2ludGVyIGhlYXBUaWQ7CiAKQEAgLTI5NywyOSArMjc0 LDI5IEBAIGJ0Z2V0Yml0bWFwKEluZGV4U2NhbkRlc2Mgc2NhbiwgVElEQml0bWFwICp0Ym0pCiAJ LyogRWFjaCBsb29wIGl0ZXJhdGlvbiBwZXJmb3JtcyBhbm90aGVyIHByaW1pdGl2ZSBpbmRleCBz Y2FuICovCiAJZG8KIAl7Ci0JCS8qIEZldGNoIHRoZSBmaXJzdCBwYWdlICYgdHVwbGUgKi8KLQkJ aWYgKF9idF9maXJzdChzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbikpCisJCS8qIEZldGNoIHRo ZSBmaXJzdCBiYXRjaCAqLworCQlpZiAoKGJhdGNoID0gX2J0X2ZpcnN0KHNjYW4sIEZvcndhcmRT Y2FuRGlyZWN0aW9uKSkpCiAJCXsKLQkJCS8qIFNhdmUgdHVwbGUgSUQsIGFuZCBjb250aW51ZSBz Y2FubmluZyAqLwotCQkJaGVhcFRpZCA9ICZzY2FuLT54c19oZWFwdGlkOworCQkJaW50CQkJaXRl bUluZGV4ID0gMDsKKworCQkJLyogU2F2ZSBmaXJzdCB0dXBsZSdzIFRJRCAqLworCQkJaGVhcFRp ZCA9ICZiYXRjaC0+aXRlbXNbaXRlbUluZGV4XS5oZWFwVGlkOwogCQkJdGJtX2FkZF90dXBsZXMo dGJtLCBoZWFwVGlkLCAxLCBmYWxzZSk7CiAJCQludGlkcysrOwogCiAJCQlmb3IgKDs7KQogCQkJ ewotCQkJCS8qCi0JCQkJICogQWR2YW5jZSB0byBuZXh0IHR1cGxlIHdpdGhpbiBwYWdlLiAgVGhp cyBpcyB0aGUgc2FtZSBhcyB0aGUKLQkJCQkgKiBlYXN5IGNhc2UgaW4gX2J0X25leHQoKS4KLQkJ CQkgKi8KLQkJCQlpZiAoKytzby0+Y3VyclBvcy5pdGVtSW5kZXggPiBzby0+Y3VyclBvcy5sYXN0 SXRlbSkKKwkJCQkvKiBBZHZhbmNlIHRvIG5leHQgVElEIHdpdGhpbiBwYWdlLXNpemVkIGJhdGNo ICovCisJCQkJaWYgKCsraXRlbUluZGV4ID4gYmF0Y2gtPmxhc3RJdGVtKQogCQkJCXsKIAkJCQkJ LyogbGV0IF9idF9uZXh0IGRvIHRoZSBoZWF2eSBsaWZ0aW5nICovCi0JCQkJCWlmICghX2J0X25l eHQoc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24pKQorCQkJCQlpdGVtSW5kZXggPSAwOworCQkJ CQliYXRjaCA9IF9idF9uZXh0KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBiYXRjaCk7CisJ CQkJCWlmICghYmF0Y2gpCiAJCQkJCQlicmVhazsKIAkJCQl9CiAKLQkJCQkvKiBTYXZlIHR1cGxl IElELCBhbmQgY29udGludWUgc2Nhbm5pbmcgKi8KLQkJCQloZWFwVGlkID0gJnNvLT5jdXJyUG9z Lml0ZW1zW3NvLT5jdXJyUG9zLml0ZW1JbmRleF0uaGVhcFRpZDsKKwkJCQloZWFwVGlkID0gJmJh dGNoLT5pdGVtc1tpdGVtSW5kZXhdLmhlYXBUaWQ7CiAJCQkJdGJtX2FkZF90dXBsZXModGJtLCBo ZWFwVGlkLCAxLCBmYWxzZSk7CiAJCQkJbnRpZHMrKzsKIAkJCX0KQEAgLTM0Nyw4ICszMjQsNiBA QCBidGJlZ2luc2NhbihSZWxhdGlvbiByZWwsIGludCBua2V5cywgaW50IG5vcmRlcmJ5cykKIAog CS8qIGFsbG9jYXRlIHByaXZhdGUgd29ya3NwYWNlICovCiAJc28gPSBwYWxsb2Nfb2JqZWN0KEJU U2Nhbk9wYXF1ZURhdGEpOwotCUJUU2NhblBvc0ludmFsaWRhdGUoc28tPmN1cnJQb3MpOwotCUJU U2NhblBvc0ludmFsaWRhdGUoc28tPm1hcmtQb3MpOwogCWlmIChzY2FuLT5udW1iZXJPZktleXMg PiAwKQogCQlzby0+a2V5RGF0YSA9IChTY2FuS2V5KSBwYWxsb2Moc2Nhbi0+bnVtYmVyT2ZLZXlz ICogc2l6ZW9mKFNjYW5LZXlEYXRhKSk7CiAJZWxzZQpAQCAtMzYyLDE5ICszMzcsOSBAQCBidGJl Z2luc2NhbihSZWxhdGlvbiByZWwsIGludCBua2V5cywgaW50IG5vcmRlcmJ5cykKIAlzby0+b3Jk ZXJQcm9jcyA9IE5VTEw7CiAJc28tPmFycmF5Q29udGV4dCA9IE5VTEw7CiAKLQlzby0+a2lsbGVk SXRlbXMgPSBOVUxMOwkJLyogdW50aWwgbmVlZGVkICovCi0Jc28tPm51bUtpbGxlZCA9IDA7Ci0K LQkvKgotCSAqIFdlIGRvbid0IGtub3cgeWV0IHdoZXRoZXIgdGhlIHNjYW4gd2lsbCBiZSBpbmRl eC1vbmx5LCBzbyB3ZSBkbyBub3QKLQkgKiBhbGxvY2F0ZSB0aGUgdHVwbGUgd29ya3NwYWNlIGFy cmF5cyB1bnRpbCBidHJlc2Nhbi4gIEhvd2V2ZXIsIHdlIHNldCB1cAotCSAqIHNjYW4tPnhzX2l0 dXBkZXNjIHdoZXRoZXIgd2UnbGwgbmVlZCBpdCBvciBub3QsIHNpbmNlIHRoYXQncyBzbyBjaGVh cC4KLQkgKi8KLQlzby0+Y3VyclR1cGxlcyA9IHNvLT5tYXJrVHVwbGVzID0gTlVMTDsKLQotCXNj YW4tPnhzX2l0dXBkZXNjID0gUmVsYXRpb25HZXREZXNjcihyZWwpOwotCiAJc2Nhbi0+b3BhcXVl ID0gc287CisJc2Nhbi0+eHNfaXR1cGRlc2MgPSBSZWxhdGlvbkdldERlc2NyKHJlbCk7CisJc2Nh bi0+bWF4aXRlbXNiYXRjaCA9IE1heFRJRHNQZXJCVHJlZVBhZ2U7CiAKIAlyZXR1cm4gc2NhbjsK IH0KQEAgLTM4OCw2NCArMzUzLDMzIEBAIGJ0cmVzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2Nh bktleSBzY2Fua2V5LCBpbnQgbnNjYW5rZXlzLAogewogCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNj YW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKIAotCS8qIHdlIGFyZW4ndCBob2xkaW5nIGFueSByZWFk IGxvY2tzLCBidXQgZ290dGEgZHJvcCB0aGUgcGlucyAqLwotCWlmIChCVFNjYW5Qb3NJc1ZhbGlk KHNvLT5jdXJyUG9zKSkKLQl7Ci0JCS8qIEJlZm9yZSBsZWF2aW5nIGN1cnJlbnQgcGFnZSwgZGVh bCB3aXRoIGFueSBraWxsZWQgaXRlbXMgKi8KLQkJaWYgKHNvLT5udW1LaWxsZWQgPiAwKQotCQkJ X2J0X2tpbGxpdGVtcyhzY2FuKTsKLQkJQlRTY2FuUG9zVW5waW5JZlBpbm5lZChzby0+Y3VyclBv cyk7Ci0JCUJUU2NhblBvc0ludmFsaWRhdGUoc28tPmN1cnJQb3MpOwotCX0KLQotCS8qCi0JICog V2UgcHJlZmVyIHRvIGVhZ2VybHkgZHJvcCBsZWFmIHBhZ2UgcGlucyBiZWZvcmUgYnRnZXR0dXBs ZSByZXR1cm5zLgotCSAqIFRoaXMgYXZvaWRzIG1ha2luZyBWQUNVVU0gd2FpdCB0byBhY3F1aXJl IGEgY2xlYW51cCBsb2NrIG9uIHRoZSBwYWdlLgotCSAqCi0JICogV2UgY2Fubm90IHNhZmVseSBk cm9wIGxlYWYgcGFnZSBwaW5zIGR1cmluZyBpbmRleC1vbmx5IHNjYW5zIGR1ZSB0byBhCi0JICog cmFjZSBjb25kaXRpb24gaW52b2x2aW5nIFZBQ1VVTSBzZXR0aW5nIHBhZ2VzIGFsbC12aXNpYmxl IGluIHRoZSBWTS4KLQkgKiBJdCdzIGFsc28gdW5zYWZlIGZvciBwbGFpbiBpbmRleCBzY2FucyB0 aGF0IHVzZSBhIG5vbi1NVkNDIHNuYXBzaG90LgotCSAqCi0JICogQWxzbyBvcHQgb3V0IG9mIGRy b3BwaW5nIGxlYWYgcGFnZSBwaW5zIGVhZ2VybHkgZHVyaW5nIGJpdG1hcCBzY2Fucy4KLQkgKiBQ aW5zIGNhbm5vdCBiZSBoZWxkIGZvciBtb3JlIHRoYW4gYW4gaW5zdGFudCBkdXJpbmcgYml0bWFw IHNjYW5zIGVpdGhlcgotCSAqIHdheSwgc28gd2UgbWlnaHQgYXMgd2VsbCBhdm9pZCB3YXN0aW5n IGN5Y2xlcyBvbiBhY3F1aXJpbmcgcGFnZSBMU05zLgotCSAqCi0JICogU2VlIG5idHJlZS9SRUFE TUUgc2VjdGlvbiBvbiBtYWtpbmcgY29uY3VycmVudCBUSUQgcmVjeWNsaW5nIHNhZmUuCi0JICoK LQkgKiBOb3RlOiBzby0+ZHJvcFBpbiBzaG91bGQgbmV2ZXIgY2hhbmdlIGFjcm9zcyByZXNjYW5z LgotCSAqLwotCXNvLT5kcm9wUGluID0gKCFzY2FuLT54c193YW50X2l0dXAgJiYKLQkJCQkgICBJ c01WQ0NTbmFwc2hvdChzY2FuLT54c19zbmFwc2hvdCkgJiYKLQkJCQkgICBzY2FuLT5oZWFwUmVs YXRpb24gIT0gTlVMTCk7Ci0KLQlzby0+bWFya0l0ZW1JbmRleCA9IC0xOwotCXNvLT5uZWVkUHJp bVNjYW4gPSBmYWxzZTsKLQlzby0+c2NhbkJlaGluZCA9IGZhbHNlOwotCXNvLT5vcHBvc2l0ZURp ckNoZWNrID0gZmFsc2U7Ci0JQlRTY2FuUG9zVW5waW5JZlBpbm5lZChzby0+bWFya1Bvcyk7Ci0J QlRTY2FuUG9zSW52YWxpZGF0ZShzby0+bWFya1Bvcyk7Ci0KLQkvKgotCSAqIEFsbG9jYXRlIHR1 cGxlIHdvcmtzcGFjZSBhcnJheXMsIGlmIG5lZWRlZCBmb3IgYW4gaW5kZXgtb25seSBzY2FuIGFu ZAotCSAqIG5vdCBhbHJlYWR5IGRvbmUgaW4gYSBwcmV2aW91cyByZXNjYW4gY2FsbC4gIFRvIHNh dmUgb24gcGFsbG9jCi0JICogb3ZlcmhlYWQsIGJvdGggd29ya3NwYWNlcyBhcmUgYWxsb2NhdGVk IGFzIG9uZSBwYWxsb2MgYmxvY2s7IG9ubHkgdGhpcwotCSAqIGZ1bmN0aW9uIGFuZCBidGVuZHNj YW4ga25vdyB0aGF0LgotCSAqLwotCWlmIChzY2FuLT54c193YW50X2l0dXAgJiYgc28tPmN1cnJU dXBsZXMgPT0gTlVMTCkKLQl7Ci0JCXNvLT5jdXJyVHVwbGVzID0gKGNoYXIgKikgcGFsbG9jKEJM Q0tTWiAqIDIpOwotCQlzby0+bWFya1R1cGxlcyA9IHNvLT5jdXJyVHVwbGVzICsgQkxDS1NaOwot CX0KLQogCS8qCiAJICogUmVzZXQgdGhlIHNjYW4ga2V5cwogCSAqLwogCWlmIChzY2Fua2V5ICYm IHNjYW4tPm51bWJlck9mS2V5cyA+IDApCiAJCW1lbWNweShzY2FuLT5rZXlEYXRhLCBzY2Fua2V5 LCBzY2FuLT5udW1iZXJPZktleXMgKiBzaXplb2YoU2NhbktleURhdGEpKTsKKwlzby0+bmVlZFBy aW1TY2FuID0gZmFsc2U7CisJc28tPnNjYW5CZWhpbmQgPSBmYWxzZTsKKwlzby0+b3Bwb3NpdGVE aXJDaGVjayA9IGZhbHNlOwogCXNvLT5udW1iZXJPZktleXMgPSAwOwkJLyogdW50aWwgX2J0X3By ZXByb2Nlc3Nfa2V5cyBzZXRzIGl0ICovCiAJc28tPm51bUFycmF5S2V5cyA9IDA7CQkvKiBkaXR0 byAqLwogfQogCisvKgorICoJYnRmcmVlYmF0Y2goKSAtLSBGcmVlIGJhdGNoIHJlc291cmNlcwor ICovCit2b2lkCitidGZyZWViYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNo IGJhdGNoKQoreworCS8qIFRhYmxlIEFNIHNob3VsZCBoYXZlIGFscmVhZHkgcmVsZWFzZWQgYmF0 Y2ggcGFnZSdzIHBpbiBieSBub3cgKi8KKwlBc3NlcnQoIUJ1ZmZlcklzVmFsaWQoYmF0Y2gtPmJ1 ZikpOworCisJaWYgKGJhdGNoLT5udW1LaWxsZWQgPiAwKQorCQlfYnRfa2lsbGl0ZW1zKHNjYW4s IGJhdGNoKTsKKworCWluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlKHNjYW4sIGJhdGNoKTsKK30K KwogLyoKICAqCWJ0ZW5kc2NhbigpIC0tIGNsb3NlIGRvd24gYSBzY2FuCiAgKi8KQEAgLTQ1NCwx MTYgKzM4OCw2MiBAQCBidGVuZHNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuKQogewogCUJUU2Nhbk9w YXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKIAotCS8qIHdlIGFyZW4ndCBo b2xkaW5nIGFueSByZWFkIGxvY2tzLCBidXQgZ290dGEgZHJvcCB0aGUgcGlucyAqLwotCWlmIChC VFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSkKLQl7Ci0JCS8qIEJlZm9yZSBsZWF2aW5nIGN1 cnJlbnQgcGFnZSwgZGVhbCB3aXRoIGFueSBraWxsZWQgaXRlbXMgKi8KLQkJaWYgKHNvLT5udW1L aWxsZWQgPiAwKQotCQkJX2J0X2tpbGxpdGVtcyhzY2FuKTsKLQkJQlRTY2FuUG9zVW5waW5JZlBp bm5lZChzby0+Y3VyclBvcyk7Ci0JfQotCi0Jc28tPm1hcmtJdGVtSW5kZXggPSAtMTsKLQlCVFNj YW5Qb3NVbnBpbklmUGlubmVkKHNvLT5tYXJrUG9zKTsKLQotCS8qIE5vIG5lZWQgdG8gaW52YWxp ZGF0ZSBwb3NpdGlvbnMsIHRoZSBSQU0gaXMgYWJvdXQgdG8gYmUgZnJlZWQuICovCi0KIAkvKiBS ZWxlYXNlIHN0b3JhZ2UgKi8KIAlpZiAoc28tPmtleURhdGEgIT0gTlVMTCkKIAkJcGZyZWUoc28t PmtleURhdGEpOwogCS8qIHNvLT5hcnJheUtleXMgYW5kIHNvLT5vcmRlclByb2NzIGFyZSBpbiBh cnJheUNvbnRleHQgKi8KIAlpZiAoc28tPmFycmF5Q29udGV4dCAhPSBOVUxMKQogCQlNZW1vcnlD b250ZXh0RGVsZXRlKHNvLT5hcnJheUNvbnRleHQpOwotCWlmIChzby0+a2lsbGVkSXRlbXMgIT0g TlVMTCkKLQkJcGZyZWUoc28tPmtpbGxlZEl0ZW1zKTsKLQlpZiAoc28tPmN1cnJUdXBsZXMgIT0g TlVMTCkKLQkJcGZyZWUoc28tPmN1cnJUdXBsZXMpOwotCS8qIHNvLT5tYXJrVHVwbGVzIHNob3Vs ZCBub3QgYmUgcGZyZWUnZCwgc2VlIGJ0cmVzY2FuICovCiAJcGZyZWUoc28pOwogfQogCiAvKgot ICoJYnRtYXJrcG9zKCkgLS0gc2F2ZSBjdXJyZW50IHNjYW4gcG9zaXRpb24KKyAqCWJ0cG9zcmVz ZXQoKSAtLSByZXNldCBhcnJheSBrZXkgc3RhdGUgZm9yIHNjYW4gcG9zaXRpb24gY2hhbmdlCisg KgorICogQ2FsbGVkIGJ5IHRoZSBjb3JlIHN5c3RlbSB3aGVuIHRoZSBzY2FuJ3MgbG9naWNhbCBw b3NpdGlvbiBpcyBhYm91dCB0bworICogY2hhbmdlIGluIGEgd2F5IHRoYXQgaW52YWxpZGF0ZXMg b3VyIGFycmF5IGtleSBzdGF0ZS4gIFRoaXMgaGFwcGVucyB3aGVuCisgKiByZXN0b3JpbmcgYSBt YXJrZWQgcG9zaXRpb24sIG9yIHdoZW4gdGhlIHNjYW4gY3Jvc3NlcyBhIGJhdGNoIGJvdW5kYXJ5 CisgKiB3aGlsZSBtb3ZpbmcgaW4gdGhlIG9wcG9zaXRlIGRpcmVjdGlvbiB0byB0aGUgb25lIG9y aWdpbmFsbHkgdXNlZC4KKyAqCisgKiBGb3IgZGlyZWN0aW9uIGNoYW5nZXMsIHRoZSBjb3JlIHN5 c3RlbSB3aWxsIGhhdmUgYWxyZWFkeSBmbGlwcGVkIHRoZQorICogYmF0Y2gncyBkaXIgZmllbGQg YmVmb3JlIGNhbGxpbmcgaGVyZTsgd2UgdXNlIHRoaXMgdXBkYXRlZCBkaXJlY3Rpb24gd2hlbgor ICogcmVzZXR0aW5nIG91ciBhcnJheSBrZXlzLiAgRm9yIG1hcmsgcmVzdG9yYXRpb24sIHRoZSBi YXRjaCdzIGRpciB3aWxsCisgKiByZXRhaW4gaXRzIG9yaWdpbmFsIHZhbHVlIChmcm9tIHdoZW4g YnRnZXRiYXRjaCByZXR1cm5lZCBpdCkuCiAgKi8KIHZvaWQKLWJ0bWFya3BvcyhJbmRleFNjYW5E ZXNjIHNjYW4pCitidHBvc3Jlc2V0KEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2gg YmF0Y2gpCiB7CiAJQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVl 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 Y2gtPmRpcik7CisJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoYmF0Y2gtPmRpcikpCisJCWJh dGNoLT5tb3JlUmlnaHQgPSB0cnVlOwogCWVsc2UKLQl7Ci0JCUJUU2NhblBvc0ludmFsaWRhdGUo c28tPm1hcmtQb3MpOwotCQlzby0+bWFya0l0ZW1JbmRleCA9IC0xOwotCX0KLX0KLQotLyoKLSAq CWJ0cmVzdHJwb3MoKSAtLSByZXN0b3JlIHNjYW4gdG8gbGFzdCBzYXZlZCBwb3NpdGlvbgotICov Ci12b2lkCi1idHJlc3RycG9zKEluZGV4U2NhbkRlc2Mgc2NhbikKLXsKLQlCVFNjYW5PcGFxdWUg c28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7Ci0KLQlpZiAoc28tPm1hcmtJdGVtSW5k ZXggPj0gMCkKLQl7Ci0JCS8qCi0JCSAqIFRoZSBzY2FuIGhhcyBuZXZlciBtb3ZlZCB0byBhIG5l dyBwYWdlIHNpbmNlIHRoZSBsYXN0IG1hcmsuICBKdXN0Ci0JCSAqIHJlc3RvcmUgdGhlIGl0ZW1J bmRleC4KLQkJICoKLQkJICogTkI6IEluIHRoaXMgY2FzZSB3ZSBjYW4ndCBjb3VudCBvbiBhbnl0 aGluZyBpbiBzby0+bWFya1BvcyB0byBiZQotCQkgKiBhY2N1cmF0ZS4KLQkJICovCi0JCXNvLT5j dXJyUG9zLml0ZW1JbmRleCA9IHNvLT5tYXJrSXRlbUluZGV4OwotCX0KLQllbHNlCi0JewotCQkv KgotCQkgKiBUaGUgc2NhbiBtb3ZlZCB0byBhIG5ldyBwYWdlIGFmdGVyIGxhc3QgbWFyayBvciBy ZXN0b3JlLCBhbmQgd2UgYXJlCi0JCSAqIG5vdyByZXN0b3JpbmcgdG8gdGhlIG1hcmtlZCBwYWdl LiAgV2UgYXJlbid0IGhvbGRpbmcgYW55IHJlYWQKLQkJICogbG9ja3MsIGJ1dCBpZiB3ZSdyZSBz dGlsbCBob2xkaW5nIHRoZSBwaW4gZm9yIHRoZSBjdXJyZW50IHBvc2l0aW9uLAotCQkgKiB3ZSBt dXN0IGRyb3AgaXQuCi0JCSAqLwotCQlpZiAoQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykp Ci0JCXsKLQkJCS8qIEJlZm9yZSBsZWF2aW5nIGN1cnJlbnQgcGFnZSwgZGVhbCB3aXRoIGFueSBr aWxsZWQgaXRlbXMgKi8KLQkJCWlmIChzby0+bnVtS2lsbGVkID4gMCkKLQkJCQlfYnRfa2lsbGl0 ZW1zKHNjYW4pOwotCQkJQlRTY2FuUG9zVW5waW5JZlBpbm5lZChzby0+Y3VyclBvcyk7Ci0JCX0K LQotCQlpZiAoQlRTY2FuUG9zSXNWYWxpZChzby0+bWFya1BvcykpCi0JCXsKLQkJCS8qIGJ1bXAg cGluIG9uIG1hcmsgYnVmZmVyIGZvciBhc3NpZ25tZW50IHRvIGN1cnJlbnQgYnVmZmVyICovCi0J CQlpZiAoQlRTY2FuUG9zSXNQaW5uZWQoc28tPm1hcmtQb3MpKQotCQkJCUluY3JCdWZmZXJSZWZD b3VudChzby0+bWFya1Bvcy5idWYpOwotCQkJbWVtY3B5KCZzby0+Y3VyclBvcywgJnNvLT5tYXJr UG9zLAotCQkJCSAgIG9mZnNldG9mKEJUU2NhblBvc0RhdGEsIGl0ZW1zWzFdKSArCi0JCQkJICAg c28tPm1hcmtQb3MubGFzdEl0ZW0gKiBzaXplb2YoQlRTY2FuUG9zSXRlbSkpOwotCQkJaWYgKHNv LT5jdXJyVHVwbGVzKQotCQkJCW1lbWNweShzby0+Y3VyclR1cGxlcywgc28tPm1hcmtUdXBsZXMs Ci0JCQkJCSAgIHNvLT5tYXJrUG9zLm5leHRUdXBsZU9mZnNldCk7Ci0JCQkvKiBSZXNldCB0aGUg c2NhbidzIGFycmF5IGtleXMgKHNlZSBfYnRfc3RlcHBhZ2UgZm9yIHdoeSkgKi8KLQkJCWlmIChz by0+bnVtQXJyYXlLZXlzKQotCQkJewotCQkJCV9idF9zdGFydF9hcnJheV9rZXlzKHNjYW4sIHNv LT5jdXJyUG9zLmRpcik7Ci0JCQkJc28tPm5lZWRQcmltU2NhbiA9IGZhbHNlOwotCQkJfQotCQl9 Ci0JCWVsc2UKLQkJCUJUU2NhblBvc0ludmFsaWRhdGUoc28tPmN1cnJQb3MpOwotCX0KKwkJYmF0 Y2gtPm1vcmVMZWZ0ID0gdHJ1ZTsKKwlzby0+bmVlZFByaW1TY2FuID0gZmFsc2U7CisJc28tPnNj YW5CZWhpbmQgPSBmYWxzZTsKKwlzby0+b3Bwb3NpdGVEaXJDaGVjayA9IGZhbHNlOwogfQogCiAv KgpAQCAtODc5LDE1ICs3NTksNiBAQCBfYnRfcGFyYWxsZWxfc2VpemUoSW5kZXhTY2FuRGVzYyBz Y2FuLCBCbG9ja051bWJlciAqbmV4dF9zY2FuX3BhZ2UsCiAJKm5leHRfc2Nhbl9wYWdlID0gSW52 YWxpZEJsb2NrTnVtYmVyOwogCSpsYXN0X2N1cnJfcGFnZSA9IEludmFsaWRCbG9ja051bWJlcjsK IAotCS8qCi0JICogUmVzZXQgc28tPmN1cnJQb3MsIGFuZCBpbml0aWFsaXplIG1vcmVMZWZ0L21v cmVSaWdodCBzdWNoIHRoYXQgdGhlIG5leHQKLQkgKiBjYWxsIHRvIF9idF9yZWFkbmV4dHBhZ2Ug dHJlYXRzIHRoaXMgYmFja2VuZCBzaW1pbGFybHkgdG8gYSBzZXJpYWwKLQkgKiBiYWNrZW5kIHRo YXQgc3RlcHMgZnJvbSAqbGFzdF9jdXJyX3BhZ2UgdG8gKm5leHRfc2Nhbl9wYWdlICh1bmxlc3Mg dGhpcwotCSAqIGJhY2tlbmQncyBzby0+Y3VyclBvcyBpcyBpbml0aWFsaXplZCBieSBfYnRfcmVh ZGZpcnN0cGFnZSBiZWZvcmUgdGhlbikuCi0JICovCi0JQlRTY2FuUG9zSW52YWxpZGF0ZShzby0+ Y3VyclBvcyk7Ci0Jc28tPmN1cnJQb3MubW9yZUxlZnQgPSBzby0+Y3VyclBvcy5tb3JlUmlnaHQg PSB0cnVlOwotCiAJaWYgKGZpcnN0KQogCXsKIAkJLyoKQEAgLTEwMzcsOCArOTA4LDYgQEAgX2J0 X3BhcmFsbGVsX2RvbmUoSW5kZXhTY2FuRGVzYyBzY2FuKQogCUJUUGFyYWxsZWxTY2FuRGVzYyBi dHNjYW47CiAJYm9vbAkJc3RhdHVzX2NoYW5nZWQgPSBmYWxzZTsKIAotCUFzc2VydCghQlRTY2Fu UG9zSXNWYWxpZChzby0+Y3VyclBvcykpOwotCiAJLyogRG8gbm90aGluZywgZm9yIG5vbi1wYXJh bGxlbCBzY2FucyAqLwogCWlmIChwYXJhbGxlbF9zY2FuID09IE5VTEwpCiAJCXJldHVybjsKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2VhcmNoLmMgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNlYXJjaC5jCmluZGV4IDBjZWQ3YjAyYy4uNmZiZGJjYTRm IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNlYXJjaC5jCisrKyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2VhcmNoLmMKQEAgLTI2LDUyICsyNiwyMyBA QAogI2luY2x1ZGUgInV0aWxzL3JlbC5oIgogCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfYnRfZHJv cF9sb2NrX2FuZF9tYXliZV9waW4oUmVsYXRpb24gcmVsLCBCVFNjYW5PcGFxdWUgc28pOwogc3Rh dGljIEJ1ZmZlciBfYnRfbW92ZXJpZ2h0KFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcHJlbCwg QlRTY2FuSW5zZXJ0IGtleSwKIAkJCQkJCQlCdWZmZXIgYnVmLCBib29sIGZvcnVwZGF0ZSwgQlRT dGFjayBzdGFjaywKIAkJCQkJCQlpbnQgYWNjZXNzKTsKIHN0YXRpYyBPZmZzZXROdW1iZXIgX2J0 X2JpbnNyY2goUmVsYXRpb24gcmVsLCBCVFNjYW5JbnNlcnQga2V5LCBCdWZmZXIgYnVmKTsKIHN0 YXRpYyBpbnQJX2J0X2JpbnNyY2hfcG9zdGluZyhCVFNjYW5JbnNlcnQga2V5LCBQYWdlIHBhZ2Us CiAJCQkJCQkJCU9mZnNldE51bWJlciBvZmZudW0pOwotc3RhdGljIGlubGluZSB2b2lkIF9idF9y ZXR1cm5pdGVtKEluZGV4U2NhbkRlc2Mgc2NhbiwgQlRTY2FuT3BhcXVlIHNvKTsKLXN0YXRpYyBi b29sIF9idF9zdGVwcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsK LXN0YXRpYyBib29sIF9idF9yZWFkZmlyc3RwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgT2Zmc2V0 TnVtYmVyIG9mZm51bSwKLQkJCQkJCQkgIFNjYW5EaXJlY3Rpb24gZGlyKTsKLXN0YXRpYyBib29s IF9idF9yZWFkbmV4dHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBCbG9ja051bWJlciBibGtubywK LQkJCQkJCQkgQmxvY2tOdW1iZXIgbGFzdGN1cnJibGtubywgU2NhbkRpcmVjdGlvbiBkaXIsCi0J CQkJCQkJIGJvb2wgc2VpemVkKTsKK3N0YXRpYyBJbmRleFNjYW5CYXRjaCBfYnRfcmVhZGZpcnN0 cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGZpcnN0YmF0Y2gsCisJCQkJ CQkJCQkJT2Zmc2V0TnVtYmVyIG9mZm51bSwgU2NhbkRpcmVjdGlvbiBkaXIpOworc3RhdGljIElu ZGV4U2NhbkJhdGNoIF9idF9yZWFkbmV4dHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBCbG9ja051 bWJlciBibGtubywKKwkJCQkJCQkJCSAgIEJsb2NrTnVtYmVyIGxhc3RjdXJyYmxrbm8sCisJCQkJ CQkJCQkgICBTY2FuRGlyZWN0aW9uIGRpciwgYm9vbCBmaXJzdHBhZ2UpOwogc3RhdGljIEJ1ZmZl ciBfYnRfbG9ja19hbmRfdmFsaWRhdGVfbGVmdChSZWxhdGlvbiByZWwsIEJsb2NrTnVtYmVyICpi bGtubywKIAkJCQkJCQkJCQkgQmxvY2tOdW1iZXIgbGFzdGN1cnJibGtubyk7Ci1zdGF0aWMgYm9v bCBfYnRfZW5kcG9pbnQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcik7Citz dGF0aWMgSW5kZXhTY2FuQmF0Y2ggX2J0X2VuZHBvaW50KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2Nh bkRpcmVjdGlvbiBkaXIsCisJCQkJCQkJCSAgIEluZGV4U2NhbkJhdGNoIGZpcnN0YmF0Y2gpOwog CiAKLS8qCi0gKglfYnRfZHJvcF9sb2NrX2FuZF9tYXliZV9waW4oKQotICoKLSAqIFVubG9jayBz by0+Y3VyclBvcy5idWYuICBJZiBzY2FuIGlzIHNvLT5kcm9wUGluLCBkcm9wIHRoZSBwaW4sIHRv by4KLSAqIERyb3BwaW5nIHRoZSBwaW4gcHJldmVudHMgVkFDVVVNIGZyb20gYmxvY2tpbmcgb24g YWNxdWlyaW5nIGEgY2xlYW51cCBsb2NrLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQKLV9idF9k cm9wX2xvY2tfYW5kX21heWJlX3BpbihSZWxhdGlvbiByZWwsIEJUU2Nhbk9wYXF1ZSBzbykKLXsK LQlpZiAoIXNvLT5kcm9wUGluKQotCXsKLQkJLyogSnVzdCBkcm9wIHRoZSBsb2NrIChub3QgdGhl IHBpbikgKi8KLQkJX2J0X3VubG9ja2J1ZihyZWwsIHNvLT5jdXJyUG9zLmJ1Zik7Ci0JCXJldHVy bjsKLQl9Ci0KLQkvKgotCSAqIERyb3AgYm90aCB0aGUgbG9jayBhbmQgdGhlIHBpbi4KLQkgKgot CSAqIEhhdmUgdG8gc2V0IHNvLT5jdXJyUG9zLmxzbiBzbyB0aGF0IF9idF9raWxsaXRlbXMgaGFz IGEgd2F5IHRvIGRldGVjdAotCSAqIHdoZW4gY29uY3VycmVudCBoZWFwIFRJRCByZWN5Y2xpbmcg YnkgVkFDVVVNIG1pZ2h0IGhhdmUgdGFrZW4gcGxhY2UuCi0JICovCi0Jc28tPmN1cnJQb3MubHNu ID0gQnVmZmVyR2V0TFNOQXRvbWljKHNvLT5jdXJyUG9zLmJ1Zik7Ci0JX2J0X3JlbGJ1ZihyZWws IHNvLT5jdXJyUG9zLmJ1Zik7Ci0Jc28tPmN1cnJQb3MuYnVmID0gSW52YWxpZEJ1ZmZlcjsKLX0K LQogLyoKICAqCV9idF9zZWFyY2goKSAtLSBTZWFyY2ggdGhlIHRyZWUgZm9yIGEgcGFydGljdWxh ciBzY2Fua2V5LAogICoJCW9yIG1vcmUgcHJlY2lzZWx5IGZvciB0aGUgZmlyc3QgbGVhZiBwYWdl IGl0IGNvdWxkIGJlIG9uLgpAQCAtODU0LDI2ICs4MjUsMjMgQEAgX2J0X2NvbXBhcmUoUmVsYXRp b24gcmVsLAogfQogCiAvKgotICoJX2J0X2ZpcnN0KCkgLS0gRmluZCB0aGUgZmlyc3QgaXRlbSBp biBhIHNjYW4uCisgKglfYnRfZmlyc3QoKSAtLSBGaW5kIHRoZSBmaXJzdCBiYXRjaCBpbiBhIHNj YW4uCiAgKgogICoJCVdlIG5lZWQgdG8gYmUgY2xldmVyIGFib3V0IHRoZSBkaXJlY3Rpb24gb2Yg c2NhbiwgdGhlIHNlYXJjaAotICoJCWNvbmRpdGlvbnMsIGFuZCB0aGUgdHJlZSBvcmRlcmluZy4g IFdlIGZpbmQgdGhlIGZpcnN0IGl0ZW0gKG9yLAotICoJCWlmIGJhY2t3YXJkcyBzY2FuLCB0aGUg bGFzdCBpdGVtKSBpbiB0aGUgdHJlZSB0aGF0IHNhdGlzZmllcyB0aGUKLSAqCQlxdWFsaWZpY2F0 aW9ucyBpbiB0aGUgc2NhbiBrZXkuICBPbiBzdWNjZXNzIGV4aXQsIGRhdGEgYWJvdXQgdGhlCi0g KgkJbWF0Y2hpbmcgdHVwbGUocykgb24gdGhlIHBhZ2UgaGFzIGJlZW4gbG9hZGVkIGludG8gc28t PmN1cnJQb3MuICBXZSdsbAotICoJCWRyb3AgYWxsIGxvY2tzIGFuZCBob2xkIG9udG8gYSBwaW4g b24gcGFnZSdzIGJ1ZmZlciwgZXhjZXB0IGR1cmluZwotICoJCXNvLT5kcm9wUGluIHNjYW5zLCB3 aGVuIHdlIGRyb3AgYm90aCB0aGUgbG9jayBhbmQgdGhlIHBpbi4KLSAqCQlfYnRfcmV0dXJuaXRl bSBzZXRzIHRoZSBuZXh0IGl0ZW0gdG8gcmV0dXJuIHRvIHNjYW4gb24gc3VjY2VzcyBleGl0Lgor ICoJCWNvbmRpdGlvbnMsIGFuZCB0aGUgdHJlZSBvcmRlcmluZy4gIFdlIGZpbmQgdGhlIGZpcnN0 IGxlYWYgcGFnZSAob3IKKyAqCQl0aGUgbGFzdCBsZWFmIHBhZ2UsIHdoZW4gc2Nhbm5pbmcgYmFj a3dhcmRzKSBpbiB0aGUgdHJlZSB3aXRoIGF0IGxlYXN0CisgKgkJb25lIHR1cGxlIHRoYXQgc2F0 aXNmaWVzIHRoZSBxdWFsaWZpY2F0aW9ucyBpbiB0aGUgc2NhbiBrZXkuICBPbgorICoJCXN1Y2Nl c3MgZXhpdCwgd2UgcmV0dXJuIGEgbmV3IGJhdGNoIHdpdGggdGhhdCBwYWdlJ3MgbWF0Y2hpbmcg aXRlbXMuCiAgKgotICogSWYgdGhlcmUgYXJlIG5vIG1hdGNoaW5nIGl0ZW1zIGluIHRoZSBpbmRl eCwgd2UgcmV0dXJuIGZhbHNlLCB3aXRoIG5vCi0gKiBwaW5zIG9yIGxvY2tzIGhlbGQuICBzby0+ Y3VyclBvcyB3aWxsIHJlbWFpbiBpbnZhbGlkLgorICogSWYgdGhlcmUgYXJlIG5vIG1hdGNoaW5n IGl0ZW1zIGluIHRoZSBpbmRleCAoaW4gdGhlIGdpdmVuIHNjYW4gZGlyZWN0aW9uKSwKKyAqIHdl IGp1c3QgcmV0dXJuIE5VTEwuCiAgKgogICogTm90ZSB0aGF0IHNjYW4tPmtleURhdGFbXSwgYW5k IHRoZSBzby0+a2V5RGF0YVtdIHNjYW5rZXkgYnVpbHQgZnJvbSBpdCwKICAqIGFyZSBib3RoIHNl YXJjaC10eXBlIHNjYW5rZXlzIChzZWUgbmJ0cmVlL1JFQURNRSBmb3IgbW9yZSBhYm91dCB0aGlz KS4KICAqIFdpdGhpbiB0aGlzIHJvdXRpbmUsIHdlIGJ1aWxkIGEgdGVtcG9yYXJ5IGluc2VydGlv bi10eXBlIHNjYW5rZXkgdG8gdXNlCiAgKiBpbiBsb2NhdGluZyB0aGUgc2NhbiBzdGFydCBwb3Np dGlvbi4KICAqLwotYm9vbAorSW5kZXhTY2FuQmF0Y2gKIF9idF9maXJzdChJbmRleFNjYW5EZXNj IHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogewogCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4 UmVsYXRpb247CkBAIC04ODcsOCArODU1LDEwIEBAIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNj YW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCVN0cmF0ZWd5TnVtYmVyIHN0cmF0X3RvdGFsID0gSW52 YWxpZFN0cmF0ZWd5OwogCUJsb2NrTnVtYmVyIGJsa25vID0gSW52YWxpZEJsb2NrTnVtYmVyLAog CQkJCWxhc3RjdXJyYmxrbm87CisJSW5kZXhTY2FuQmF0Y2ggZmlyc3RiYXRjaDsKIAotCUFzc2Vy dCghQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpOworCS8qIEFsbG9jYXRlIHNwYWNlIGZv ciBmaXJzdCBiYXRjaCAqLworCWZpcnN0YmF0Y2ggPSBpbmRleGFtX3V0aWxfYmF0Y2hfYWxsb2Mo c2Nhbik7CiAKIAkvKgogCSAqIEV4YW1pbmUgdGhlIHNjYW4ga2V5cyBhbmQgZWxpbWluYXRlIGFu eSByZWR1bmRhbnQga2V5czsgYWxzbyBtYXJrIHRoZQpAQCAtOTA0LDYgKzg3NCw3IEBAIF9idF9m aXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCXsKIAkJQXNzZXJ0 KCFzby0+bmVlZFByaW1TY2FuKTsKIAkJX2J0X3BhcmFsbGVsX2RvbmUoc2Nhbik7CisJCWluZGV4 YW1fdXRpbF9iYXRjaF9yZWxlYXNlKHNjYW4sIGZpcnN0YmF0Y2gpOwogCQlyZXR1cm4gZmFsc2U7 CiAJfQogCkBAIC05MTMsNyArODg0LDEwIEBAIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4s IFNjYW5EaXJlY3Rpb24gZGlyKQogCSAqLwogCWlmIChzY2FuLT5wYXJhbGxlbF9zY2FuICE9IE5V TEwgJiYKIAkJIV9idF9wYXJhbGxlbF9zZWl6ZShzY2FuLCAmYmxrbm8sICZsYXN0Y3VycmJsa25v LCB0cnVlKSkKLQkJcmV0dXJuIGZhbHNlOworCXsKKwkJaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVh c2Uoc2NhbiwgZmlyc3RiYXRjaCk7CisJCXJldHVybiBmYWxzZTsJCQkvKiBkZWZpbml0ZWx5IGRv bmUgKHNvLT5uZWVkUHJpbVNjYW4gaXMgdW5zZXQpICovCisJfQogCiAJLyoKIAkgKiBJbml0aWFs aXplIHRoZSBzY2FuJ3MgYXJyYXlzIChpZiBhbnkpIGZvciB0aGUgY3VycmVudCBzY2FuIGRpcmVj dGlvbgpAQCAtOTMwLDE0ICs5MDQsMTAgQEAgX2J0X2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2Nhbiwg U2NhbkRpcmVjdGlvbiBkaXIpCiAJCSAqIF9idF9yZWFkbmV4dHBhZ2UgcmVsZWFzZXMgdGhlIHNj YW4gZm9yIHVzIChub3QgX2J0X3JlYWRmaXJzdHBhZ2UpLgogCQkgKi8KIAkJQXNzZXJ0KHNjYW4t PnBhcmFsbGVsX3NjYW4gIT0gTlVMTCk7Ci0JCUFzc2VydCghc28tPm5lZWRQcmltU2Nhbik7Ci0J CUFzc2VydChibGtubyAhPSBQX05PTkUpOwogCi0JCWlmICghX2J0X3JlYWRuZXh0cGFnZShzY2Fu LCBibGtubywgbGFzdGN1cnJibGtubywgZGlyLCB0cnVlKSkKLQkJCXJldHVybiBmYWxzZTsKKwkJ aW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2Uoc2NhbiwgZmlyc3RiYXRjaCk7CiAKLQkJX2J0X3Jl dHVybml0ZW0oc2Nhbiwgc28pOwotCQlyZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIF9idF9yZWFkbmV4 dHBhZ2Uoc2NhbiwgYmxrbm8sIGxhc3RjdXJyYmxrbm8sIGRpciwgdHJ1ZSk7CiAJfQogCiAJLyoK QEAgLTEyMzcsNyArMTIwNyw3IEBAIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5E aXJlY3Rpb24gZGlyKQogCSAqIE5vdGU6IGNhbGxzIF9idF9yZWFkZmlyc3RwYWdlIGZvciB1cywg d2hpY2ggcmVsZWFzZXMgdGhlIHBhcmFsbGVsIHNjYW4uCiAJICovCiAJaWYgKGtleXN6ID09IDAp Ci0JCXJldHVybiBfYnRfZW5kcG9pbnQoc2NhbiwgZGlyKTsKKwkJcmV0dXJuIF9idF9lbmRwb2lu dChzY2FuLCBkaXIsIGZpcnN0YmF0Y2gpOwogCiAJLyoKIAkgKiBXZSB3YW50IHRvIHN0YXJ0IHRo ZSBzY2FuIHNvbWV3aGVyZSB3aXRoaW4gdGhlIGluZGV4LiAgU2V0IHVwIGFuCkBAIC0xNTA1LDEy ICsxNDc1LDEyIEBAIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24g ZGlyKQogCSAqIHBvc2l0aW9uIG91cnNlbHZlcyBvbiB0aGUgdGFyZ2V0IGxlYWYgcGFnZS4KIAkg Ki8KIAlBc3NlcnQoU2NhbkRpcmVjdGlvbklzQmFja3dhcmQoZGlyKSA9PSBpbnNrZXkuYmFja3dh cmQpOwotCXN0YWNrID0gX2J0X3NlYXJjaChyZWwsIE5VTEwsICZpbnNrZXksICZzby0+Y3VyclBv cy5idWYsIEJUX1JFQUQpOworCXN0YWNrID0gX2J0X3NlYXJjaChyZWwsIE5VTEwsICZpbnNrZXks ICZmaXJzdGJhdGNoLT5idWYsIEJUX1JFQUQpOwogCiAJLyogZG9uJ3QgbmVlZCB0byBrZWVwIHRo ZSBzdGFjayBhcm91bmQuLi4gKi8KIAlfYnRfZnJlZXN0YWNrKHN0YWNrKTsKIAotCWlmICghQnVm ZmVySXNWYWxpZChzby0+Y3VyclBvcy5idWYpKQorCWlmICh1bmxpa2VseSghQnVmZmVySXNWYWxp ZChmaXJzdGJhdGNoLT5idWYpKSkKIAl7CiAJCUFzc2VydCghc28tPm5lZWRQcmltU2Nhbik7CiAK QEAgLTE1MjYsMjMgKzE0OTYsMjQgQEAgX2J0X2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2Nh bkRpcmVjdGlvbiBkaXIpCiAJCWlmIChJc29sYXRpb25Jc1NlcmlhbGl6YWJsZSgpKQogCQl7CiAJ CQlQcmVkaWNhdGVMb2NrUmVsYXRpb24ocmVsLCBzY2FuLT54c19zbmFwc2hvdCk7Ci0JCQlzdGFj ayA9IF9idF9zZWFyY2gocmVsLCBOVUxMLCAmaW5za2V5LCAmc28tPmN1cnJQb3MuYnVmLCBCVF9S RUFEKTsKKwkJCXN0YWNrID0gX2J0X3NlYXJjaChyZWwsIE5VTEwsICZpbnNrZXksICZmaXJzdGJh dGNoLT5idWYsIEJUX1JFQUQpOwogCQkJX2J0X2ZyZWVzdGFjayhzdGFjayk7CiAJCX0KIAotCQlp ZiAoIUJ1ZmZlcklzVmFsaWQoc28tPmN1cnJQb3MuYnVmKSkKKwkJaWYgKCFCdWZmZXJJc1ZhbGlk KGZpcnN0YmF0Y2gtPmJ1ZikpCiAJCXsKIAkJCV9idF9wYXJhbGxlbF9kb25lKHNjYW4pOworCQkJ aW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2Uoc2NhbiwgZmlyc3RiYXRjaCk7CiAJCQlyZXR1cm4g ZmFsc2U7CiAJCX0KIAl9CiAKIAkvKiBwb3NpdGlvbiB0byB0aGUgcHJlY2lzZSBpdGVtIG9uIHRo ZSBwYWdlICovCi0Jb2ZmbnVtID0gX2J0X2JpbnNyY2gocmVsLCAmaW5za2V5LCBzby0+Y3VyclBv cy5idWYpOworCW9mZm51bSA9IF9idF9iaW5zcmNoKHJlbCwgJmluc2tleSwgZmlyc3RiYXRjaC0+ YnVmKTsKIAogCS8qCiAJICogTm93IGxvYWQgZGF0YSBmcm9tIHRoZSBmaXJzdCBwYWdlIG9mIHRo ZSBzY2FuICh1c3VhbGx5IHRoZSBwYWdlCi0JICogY3VycmVudGx5IGluIHNvLT5jdXJyUG9zLmJ1 ZikuCisJICogY3VycmVudGx5IGluIGZpcnN0YmF0Y2guYnVmKS4KIAkgKgogCSAqIElmIGluc2tl eS5uZXh0a2V5ID0gZmFsc2UgYW5kIGluc2tleS5iYWNrd2FyZCA9IGZhbHNlLCBvZmZudW0gaXMK IAkgKiBwb3NpdGlvbmVkIGF0IHRoZSBmaXJzdCBub24tcGl2b3QgdHVwbGUgPj0gaW5za2V5LnNj YW5rZXlzLgpAQCAtMTU2MCwxNjUgKzE1MzEsNjUgQEAgX2J0X2ZpcnN0KEluZGV4U2NhbkRlc2Mg c2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJICogZm9yIHRoZSBwYWdlLiAgRm9yIGV4YW1wbGUs IHdoZW4gaW5za2V5IGlzIGJvdGggPCB0aGUgbGVhZiBwYWdlJ3MgaGlnaAogCSAqIGtleSBhbmQg PiBhbGwgb2YgaXRzIG5vbi1waXZvdCB0dXBsZXMsIG9mZm51bSB3aWxsIGJlICJtYXhvZmYgKyAx Ii4KIAkgKi8KLQlpZiAoIV9idF9yZWFkZmlyc3RwYWdlKHNjYW4sIG9mZm51bSwgZGlyKSkKLQkJ cmV0dXJuIGZhbHNlOwotCi0JX2J0X3JldHVybml0ZW0oc2Nhbiwgc28pOwotCXJldHVybiB0cnVl OworCXJldHVybiBfYnRfcmVhZGZpcnN0cGFnZShzY2FuLCBmaXJzdGJhdGNoLCBvZmZudW0sIGRp cik7CiB9CiAKIC8qCi0gKglfYnRfbmV4dCgpIC0tIEdldCB0aGUgbmV4dCBpdGVtIGluIGEgc2Nh bi4KKyAqCV9idF9uZXh0KCkgLS0gR2V0IHRoZSBuZXh0IGJhdGNoIGluIGEgc2Nhbi4KICAqCi0g KgkJT24gZW50cnksIHNvLT5jdXJyUG9zIGRlc2NyaWJlcyB0aGUgY3VycmVudCBwYWdlLCB3aGlj aCBtYXkgYmUgcGlubmVkCi0gKgkJYnV0IGlzIG5vdCBsb2NrZWQsIGFuZCBzby0+Y3VyclBvcy5p dGVtSW5kZXggaWRlbnRpZmllcyB3aGljaCBpdGVtIHdhcwotICoJCXByZXZpb3VzbHkgcmV0dXJu ZWQuCisgKgkJT24gZW50cnksIHByaW9yYmF0Y2ggZGVzY3JpYmVzIHRoZSBiYXRjaCB0aGF0IHdh cyBsYXN0IHJldHVybmVkIGJ5CisgKgkJYnRnZXRiYXRjaC4gIFdlJ2xsIHVzZSB0aGUgcHJpb3Ig YmF0Y2gncyBwb3NpdGlvbmluZyBpbmZvcm1hdGlvbiB0bworICoJCWRlY2lkZSB3aGljaCBsZWFm IHBhZ2UgdG8gcmVhZCBuZXh0LgogICoKLSAqCQlPbiBzdWNjZXNzIGV4aXQsIHNvLT5jdXJyUG9z IGlzIHVwZGF0ZWQgYXMgbmVlZGVkLCBhbmQgX2J0X3JldHVybml0ZW0KLSAqCQlzZXRzIHRoZSBu ZXh0IGl0ZW0gdG8gcmV0dXJuIHRvIHRoZSBzY2FuLiAgc28tPmN1cnJQb3MgcmVtYWlucyB2YWxp ZC4KLSAqCi0gKgkJT24gZmFpbHVyZSBleGl0IChubyBtb3JlIHR1cGxlcyksIHdlIGludmFsaWRh dGUgc28tPmN1cnJQb3MuICBJdCdsbAotICoJCXN0aWxsIGJlIHBvc3NpYmxlIGZvciB0aGUgc2Nh biB0byByZXR1cm4gdHVwbGVzIGJ5IGNoYW5naW5nIGRpcmVjdGlvbiwKLSAqCQl0aG91Z2ggd2Un bGwgbmVlZCB0byBjYWxsIF9idF9maXJzdCBhbmV3IGluIHRoYXQgb3RoZXIgZGlyZWN0aW9uLgor ICoJCU9uIHN1Y2Nlc3MgZXhpdCwgcmV0dXJucyB0aGUgbmV4dCBiYXRjaC4gIFRoZXJlIG11c3Qg YmUgYXQgbGVhc3Qgb25lCisgKgkJbWF0Y2hpbmcgdHVwbGUgb24gYW55IHJldHVybmVkIGJhdGNo IChlbHNlIHdlJ2QganVzdCByZXR1cm4gTlVMTCkuCiAgKi8KLWJvb2wKLV9idF9uZXh0KEluZGV4 U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCi17Ci0JQlRTY2FuT3BhcXVlIHNvID0g KEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwotCi0JQXNzZXJ0KEJUU2NhblBvc0lzVmFsaWQo c28tPmN1cnJQb3MpKTsKLQotCS8qCi0JICogQWR2YW5jZSB0byBuZXh0IHR1cGxlIG9uIGN1cnJl bnQgcGFnZTsgb3IgaWYgdGhlcmUncyBubyBtb3JlLCB0cnkgdG8KLQkgKiBzdGVwIHRvIHRoZSBu ZXh0IHBhZ2Ugd2l0aCBkYXRhLgotCSAqLwotCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRp cikpCi0JewotCQlpZiAoKytzby0+Y3VyclBvcy5pdGVtSW5kZXggPiBzby0+Y3VyclBvcy5sYXN0 SXRlbSkKLQkJewotCQkJaWYgKCFfYnRfc3RlcHBhZ2Uoc2NhbiwgZGlyKSkKLQkJCQlyZXR1cm4g ZmFsc2U7Ci0JCX0KLQl9Ci0JZWxzZQotCXsKLQkJaWYgKC0tc28tPmN1cnJQb3MuaXRlbUluZGV4 IDwgc28tPmN1cnJQb3MuZmlyc3RJdGVtKQotCQl7Ci0JCQlpZiAoIV9idF9zdGVwcGFnZShzY2Fu LCBkaXIpKQotCQkJCXJldHVybiBmYWxzZTsKLQkJfQotCX0KLQotCV9idF9yZXR1cm5pdGVtKHNj YW4sIHNvKTsKLQlyZXR1cm4gdHJ1ZTsKLX0KLQotLyoKLSAqIFJldHVybiB0aGUgaW5kZXggaXRl bSBmcm9tIHNvLT5jdXJyUG9zLml0ZW1zW3NvLT5jdXJyUG9zLml0ZW1JbmRleF0gdG8gdGhlCi0g KiBpbmRleCBzY2FuIGJ5IHNldHRpbmcgdGhlIHJlbGV2YW50IGZpZWxkcyBpbiBjYWxsZXIncyBp bmRleCBzY2FuIGRlc2NyaXB0b3IKLSAqLwotc3RhdGljIGlubGluZSB2b2lkCi1fYnRfcmV0dXJu aXRlbShJbmRleFNjYW5EZXNjIHNjYW4sIEJUU2Nhbk9wYXF1ZSBzbykKLXsKLQlCVFNjYW5Qb3NJ dGVtICpjdXJySXRlbSA9ICZzby0+Y3VyclBvcy5pdGVtc1tzby0+Y3VyclBvcy5pdGVtSW5kZXhd OwotCi0JLyogTW9zdCByZWNlbnQgX2J0X3JlYWRwYWdlIG11c3QgaGF2ZSBzdWNjZWVkZWQgKi8K LQlBc3NlcnQoQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpOwotCUFzc2VydChzby0+Y3Vy clBvcy5pdGVtSW5kZXggPj0gc28tPmN1cnJQb3MuZmlyc3RJdGVtKTsKLQlBc3NlcnQoc28tPmN1 cnJQb3MuaXRlbUluZGV4IDw9IHNvLT5jdXJyUG9zLmxhc3RJdGVtKTsKLQotCS8qIFJldHVybiBu ZXh0IGl0ZW0sIHBlciBhbWdldHR1cGxlIGNvbnRyYWN0ICovCi0Jc2Nhbi0+eHNfaGVhcHRpZCA9 IGN1cnJJdGVtLT5oZWFwVGlkOwotCWlmIChzby0+Y3VyclR1cGxlcykKLQkJc2Nhbi0+eHNfaXR1 cCA9IChJbmRleFR1cGxlKSAoc28tPmN1cnJUdXBsZXMgKyBjdXJySXRlbS0+dHVwbGVPZmZzZXQp OwotfQotCi0vKgotICoJX2J0X3N0ZXBwYWdlKCkgLS0gU3RlcCB0byBuZXh0IHBhZ2UgY29udGFp bmluZyB2YWxpZCBkYXRhIGZvciBzY2FuCi0gKgotICogV3JhcHBlciBvbiBfYnRfcmVhZG5leHRw YWdlIHRoYXQgcGVyZm9ybXMgZmluYWwgc3RlcHMgZm9yIHRoZSBjdXJyZW50IHBhZ2UuCi0gKgot ICogT24gZW50cnksIHNvLT5jdXJyUG9zIG11c3QgYmUgdmFsaWQuICBJdHMgYnVmZmVyIHdpbGwg YmUgcGlubmVkLCB0aG91Z2gKLSAqIG5ldmVyIGxvY2tlZC4gKEFjdHVhbGx5LCB3aGVuIHNvLT5k cm9wUGluIHRoZXJlIHdvbid0IGV2ZW4gYmUgYSBwaW4gaGVsZCwKLSAqIHRob3VnaCBzby0+Y3Vy clBvcy5jdXJyUGFnZSBtdXN0IHN0aWxsIGJlIHNldCB0byBhIHZhbGlkIGJsb2NrIG51bWJlci4p Ci0gKi8KLXN0YXRpYyBib29sCi1fYnRfc3RlcHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2Fu RGlyZWN0aW9uIGRpcikKK0luZGV4U2NhbkJhdGNoCitfYnRfbmV4dChJbmRleFNjYW5EZXNjIHNj YW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBJbmRleFNjYW5CYXRjaCBwcmlvcmJhdGNoKQogewogCUJU U2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKIAlCbG9ja051bWJl ciBibGtubywKIAkJCQlsYXN0Y3VycmJsa25vOwogCi0JQXNzZXJ0KEJUU2NhblBvc0lzVmFsaWQo c28tPmN1cnJQb3MpKTsKLQotCS8qIEJlZm9yZSBsZWF2aW5nIGN1cnJlbnQgcGFnZSwgZGVhbCB3 aXRoIGFueSBraWxsZWQgaXRlbXMgKi8KLQlpZiAoc28tPm51bUtpbGxlZCA+IDApCi0JCV9idF9r aWxsaXRlbXMoc2Nhbik7Ci0KLQkvKgotCSAqIEJlZm9yZSB3ZSBtb2RpZnkgY3VyclBvcywgbWFr ZSBhIGNvcHkgb2YgdGhlIHBhZ2UgZGF0YSBpZiB0aGVyZSB3YXMgYQotCSAqIG1hcmsgcG9zaXRp b24gdGhhdCBuZWVkcyBpdC4KLQkgKi8KLQlpZiAoc28tPm1hcmtJdGVtSW5kZXggPj0gMCkKLQl7 Ci0JCS8qIGJ1bXAgcGluIG9uIGN1cnJlbnQgYnVmZmVyIGZvciBhc3NpZ25tZW50IHRvIG1hcmsg YnVmZmVyICovCi0JCWlmIChCVFNjYW5Qb3NJc1Bpbm5lZChzby0+Y3VyclBvcykpCi0JCQlJbmNy QnVmZmVyUmVmQ291bnQoc28tPmN1cnJQb3MuYnVmKTsKLQkJbWVtY3B5KCZzby0+bWFya1Bvcywg JnNvLT5jdXJyUG9zLAotCQkJICAgb2Zmc2V0b2YoQlRTY2FuUG9zRGF0YSwgaXRlbXNbMV0pICsK LQkJCSAgIHNvLT5jdXJyUG9zLmxhc3RJdGVtICogc2l6ZW9mKEJUU2NhblBvc0l0ZW0pKTsKLQkJ aWYgKHNvLT5tYXJrVHVwbGVzKQotCQkJbWVtY3B5KHNvLT5tYXJrVHVwbGVzLCBzby0+Y3VyclR1 cGxlcywKLQkJCQkgICBzby0+Y3VyclBvcy5uZXh0VHVwbGVPZmZzZXQpOwotCQlzby0+bWFya1Bv cy5pdGVtSW5kZXggPSBzby0+bWFya0l0ZW1JbmRleDsKLQkJc28tPm1hcmtJdGVtSW5kZXggPSAt MTsKLQotCQkvKgotCQkgKiBJZiB3ZSdyZSBqdXN0IGFib3V0IHRvIHN0YXJ0IHRoZSBuZXh0IHBy aW1pdGl2ZSBpbmRleCBzY2FuCi0JCSAqIChwb3NzaWJsZSB3aXRoIGEgc2NhbiB0aGF0IGhhcyBh cnJheXMga2V5cywgYW5kIG5lZWRzIHRvIHNraXAgdG8KLQkJICogY29udGludWUgaW4gdGhlIGN1 cnJlbnQgc2NhbiBkaXJlY3Rpb24pLCBtb3JlTGVmdC9tb3JlUmlnaHQgb25seQotCQkgKiBpbmRp Y2F0ZSB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IHByaW1pdGl2ZSBpbmRleCBzY2FuLiAgVGhleSBt dXN0Ci0JCSAqIG5ldmVyIGJlIHRha2VuIHRvIGluZGljYXRlIHRoYXQgdGhlIHRvcC1sZXZlbCBp bmRleCBzY2FuIGhhcyBlbmRlZAotCQkgKiAodGhhdCB3b3VsZCBiZSB3cm9uZykuCi0JCSAqCi0J CSAqIFdlIGNvdWxkIGhhbmRsZSB0aGlzIGNhc2UgYnkgdHJlYXRpbmcgdGhlIGN1cnJlbnQgYXJy YXkga2V5cyBhcwotCQkgKiBtYXJrUG9zIHN0YXRlLiAgQnV0IGRlcGVuZGluZyBvbiB0aGUgY3Vy cmVudCBhcnJheSBzdGF0ZSBsaWtlIHRoaXMKLQkJICogd291bGQgYWRkIGNvbXBsZXhpdHkuICBJ bnN0ZWFkLCB3ZSBqdXN0IHVuc2V0IG1hcmtQb3MncyBjb3B5IG9mCi0JCSAqIG1vcmVSaWdodCBv ciBtb3JlTGVmdCAod2hpY2hldmVyIG1pZ2h0IGJlIGFmZmVjdGVkKSwgd2hpbGUgbWFraW5nCi0J CSAqIGJ0cmVzdHJwb3MgcmVzZXQgdGhlIHNjYW4ncyBhcnJheXMgdG8gdGhlaXIgaW5pdGlhbCBz Y2FuIHBvc2l0aW9ucy4KLQkJICogSW4gZWZmZWN0LCBidHJlc3RycG9zIGxlYXZlcyBhZHZhbmNp bmcgdGhlIGFycmF5cyB1cCB0byB0aGUgZmlyc3QKLQkJICogX2J0X3JlYWRwYWdlIGNhbGwgKHRo YXQgdGFrZXMgcGxhY2UgYWZ0ZXIgaXQgaGFzIHJlc3RvcmVkIG1hcmtQb3MpLgotCQkgKi8KLQkJ aWYgKHNvLT5uZWVkUHJpbVNjYW4pCi0JCXsKLQkJCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJk KHNvLT5jdXJyUG9zLmRpcikpCi0JCQkJc28tPm1hcmtQb3MubW9yZVJpZ2h0ID0gdHJ1ZTsKLQkJ CWVsc2UKLQkJCQlzby0+bWFya1Bvcy5tb3JlTGVmdCA9IHRydWU7Ci0JCX0KLQotCQkvKiBtYXJr L3Jlc3RvcmUgbm90IHN1cHBvcnRlZCBieSBwYXJhbGxlbCBzY2FucyAqLwotCQlBc3NlcnQoIXNj YW4tPnBhcmFsbGVsX3NjYW4pOwotCX0KLQotCUJUU2NhblBvc1VucGluSWZQaW5uZWQoc28tPmN1 cnJQb3MpOworCUFzc2VydChCbG9ja051bWJlcklzVmFsaWQocHJpb3JiYXRjaC0+Y3VyclBhZ2Up KTsKIAogCS8qIFdhbGsgdG8gdGhlIG5leHQgcGFnZSB3aXRoIGRhdGEgKi8KIAlpZiAoU2NhbkRp cmVjdGlvbklzRm9yd2FyZChkaXIpKQotCQlibGtubyA9IHNvLT5jdXJyUG9zLm5leHRQYWdlOwor CQlibGtubyA9IHByaW9yYmF0Y2gtPm5leHRQYWdlOwogCWVsc2UKLQkJYmxrbm8gPSBzby0+Y3Vy clBvcy5wcmV2UGFnZTsKLQlsYXN0Y3VycmJsa25vID0gc28tPmN1cnJQb3MuY3VyclBhZ2U7CisJ CWJsa25vID0gcHJpb3JiYXRjaC0+cHJldlBhZ2U7CisJbGFzdGN1cnJibGtubyA9IHByaW9yYmF0 Y2gtPmN1cnJQYWdlOwogCiAJLyoKLQkgKiBDYW5jZWwgcHJpbWl0aXZlIGluZGV4IHNjYW5zIHRo YXQgd2VyZSBzY2hlZHVsZWQgd2hlbiB0aGUgY2FsbCB0bwotCSAqIF9idF9yZWFkcGFnZSBmb3Ig Y3VyclBvcyBoYXBwZW5lZCB0byB1c2UgdGhlIG9wcG9zaXRlIGRpcmVjdGlvbiB0byB0aGUKLQkg KiBvbmUgdGhhdCB3ZSdyZSBzdGVwcGluZyBpbiBub3cuICAoSXQncyBva2F5IHRvIGxlYXZlIHRo ZSBzY2FuJ3MgYXJyYXkKLQkgKiBrZXlzIGFzLWlzLCBzaW5jZSB0aGUgbmV4dCBfYnRfcmVhZHBh Z2Ugd2lsbCBhZHZhbmNlIHRoZW0uKQorCSAqIENhbmNlbCBwcmltaXRpdmUgaW5kZXggc2NhbnMg dGhhdCB3ZXJlIHNjaGVkdWxlZCB3aGVuIHByaW9yYmF0Y2gncyBjYWxsCisJICogdG8gX2J0X3Jl YWRwYWdlIGhhcHBlbmVkIHRvIHVzZSB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uIHRvIHRoZSBvbmUg dGhhdAorCSAqIHdlJ3JlIHN0ZXBwaW5nIGluIG5vdy4gIChJdCdzIG9rYXkgdG8gbGVhdmUgdGhl IHNjYW4ncyBhcnJheSBrZXlzCisJICogYXMtaXMsIHNpbmNlIHRoZSBuZXh0IF9idF9yZWFkcGFn ZSB3aWxsIGFkdmFuY2UgdGhlbS4pCiAJICovCi0JaWYgKHNvLT5jdXJyUG9zLmRpciAhPSBkaXIp CisJaWYgKHByaW9yYmF0Y2gtPmRpciAhPSBkaXIpCiAJCXNvLT5uZWVkUHJpbVNjYW4gPSBmYWxz ZTsKIAorCWlmIChibGtubyA9PSBQX05PTkUgfHwKKwkJKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQo ZGlyKSA/CisJCSAhcHJpb3JiYXRjaC0+bW9yZVJpZ2h0IDogIXByaW9yYmF0Y2gtPm1vcmVMZWZ0 KSkKKwl7CisJCS8qCisJCSAqIHByaW9yYmF0Y2gncyBwYWdlIGlzIGtub3duIHRvIGJlIHRoZSBm aW5hbCBsZWFmIHBhZ2Ugd2l0aCBtYXRjaGVzCisJCSAqIGluIHRoaXMgc2NhbiBkaXJlY3Rpb24g KGl0cyBfYnRfcmVhZHBhZ2UgY2FsbCBmaWd1cmVkIHRoYXQgb3V0KS4KKwkJICoKKwkJICogTm90 ZTogaWYgc28tPm5lZWRQcmltU2NhbiBpcyBzZXQsIHRoZW4gcHJpb3JiYXRjaCdzIGxlYWYgcGFn ZSBpcworCQkgKiBhY3R1YWxseSBqdXN0IHRoZSBmaW5hbCBwYWdlIGZvciB0aGUgY3VycmVudCBw cmltaXRpdmUgaW5kZXggc2NhbgorCQkgKiBpbiB0aGlzIHNjYW4gZGlyZWN0aW9uICh0aGUgc2Nh biB3aWxsIGNvbnRpbnVlIGluIF9idF9maXJzdCkuCisJCSAqLworCQlfYnRfcGFyYWxsZWxfZG9u ZShzY2FuKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyogcGFyYWxsZWwgc2NhbiBtdXN0IHNl aXplIHRoZSBzY2FuIHRvIGdldCBuZXh0IGJsa25vICovCisJaWYgKHNjYW4tPnBhcmFsbGVsX3Nj YW4gIT0gTlVMTCAmJgorCQkhX2J0X3BhcmFsbGVsX3NlaXplKHNjYW4sICZibGtubywgJmxhc3Rj dXJyYmxrbm8sIGZhbHNlKSkKKwkJcmV0dXJuIE5VTEw7CQkJLyogZG9uZSBpZmYgc28tPm5lZWRQ cmltU2NhbiB3YXNuJ3Qgc2V0ICovCisKIAlyZXR1cm4gX2J0X3JlYWRuZXh0cGFnZShzY2FuLCBi bGtubywgbGFzdGN1cnJibGtubywgZGlyLCBmYWxzZSk7CiB9CiAKQEAgLTE3MzEsNzMgKzE2MDIs OTAgQEAgX2J0X3N0ZXBwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIp CiAgKiB0byBzdG9wIHRoZSBzY2FuIG9uIHRoaXMgcGFnZSBieSBjYWxsaW5nIF9idF9jaGVja2tl eXMgYWdhaW5zdCB0aGUgaGlnaAogICoga2V5LiAgU2VlIF9idF9yZWFkcGFnZSBmb3IgZnVsbCBk ZXRhaWxzLgogICoKLSAqIE9uIGVudHJ5LCBzby0+Y3VyclBvcyBtdXN0IGJlIHBpbm5lZCBhbmQg bG9ja2VkIChzbyBvZmZudW0gc3RheXMgdmFsaWQpLgorICogT24gZW50cnksIGZpcnN0YmF0Y2gg bXVzdCBiZSBwaW5uZWQgYW5kIGxvY2tlZCAoc28gb2ZmbnVtIHN0YXlzIHZhbGlkKS4KICAqIFBh cmFsbGVsIHNjYW4gY2FsbGVycyBtdXN0IGhhdmUgc2VpemVkIHRoZSBzY2FuIGJlZm9yZSBjYWxs aW5nIGhlcmUuCiAgKgotICogT24gZXhpdCwgd2UnbGwgaGF2ZSB1cGRhdGVkIHNvLT5jdXJyUG9z IGFuZCByZXRhaW5lZCBsb2NrcyBhbmQgcGlucworICogT24gZXhpdCwgd2UnbGwgaGF2ZSB1cGRh dGVkIGZpcnN0YmF0Y2ggYW5kIHJldGFpbmVkIGxvY2tzIGFuZCBwaW5zCiAgKiBhY2NvcmRpbmcg dG8gdGhlIHNhbWUgcnVsZXMgYXMgdGhvc2UgbGFpZCBvdXQgZm9yIF9idF9yZWFkbmV4dHBhZ2Ug ZXhpdC4KLSAqIExpa2UgX2J0X3JlYWRuZXh0cGFnZSwgb3VyIHJldHVybiB2YWx1ZSBpbmRpY2F0 ZXMgaWYgdGhlcmUgYXJlIGFueSBtYXRjaGluZwotICogcmVjb3JkcyBpbiB0aGUgZ2l2ZW4gZGly ZWN0aW9uLgogICoKICAqIFdlIGFsd2F5cyByZWxlYXNlIHRoZSBzY2FuIGZvciBhIHBhcmFsbGVs IHNjYW4gY2FsbGVyLCByZWdhcmRsZXNzIG9mCiAgKiBzdWNjZXNzIG9yIGZhaWx1cmU7IHdlJ2xs IGNhbGwgX2J0X3BhcmFsbGVsX3JlbGVhc2UgYXMgc29vbiBhcyBwb3NzaWJsZS4KICAqLwotc3Rh dGljIGJvb2wKLV9idF9yZWFkZmlyc3RwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgT2Zmc2V0TnVt YmVyIG9mZm51bSwgU2NhbkRpcmVjdGlvbiBkaXIpCitzdGF0aWMgSW5kZXhTY2FuQmF0Y2gKK19i dF9yZWFkZmlyc3RwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggZmlyc3Ri YXRjaCwKKwkJCQkgIE9mZnNldE51bWJlciBvZmZudW0sIFNjYW5EaXJlY3Rpb24gZGlyKQogewog CUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKKwlCbG9ja051 bWJlciBibGtubywKKwkJCQlsYXN0Y3VycmJsa25vOwogCi0Jc28tPm51bUtpbGxlZCA9IDA7CQkJ LyoganVzdCBwYXJhbm9pYSAqLwotCXNvLT5tYXJrSXRlbUluZGV4ID0gLTE7CQkvKiBkaXR0byAq LwotCi0JLyogSW5pdGlhbGl6ZSBzby0+Y3VyclBvcyBmb3IgdGhlIGZpcnN0IHBhZ2UgKHBhZ2Ug aW4gc28tPmN1cnJQb3MuYnVmKSAqLworCS8qIEluaXRpYWxpemUgZmlyc3RiYXRjaCdzIHBvc2l0 aW9uIGZvciB0aGUgZmlyc3QgcGFnZSAqLwogCWlmIChzby0+bmVlZFByaW1TY2FuKQogCXsKIAkJ QXNzZXJ0KHNvLT5udW1BcnJheUtleXMpOwogCi0JCXNvLT5jdXJyUG9zLm1vcmVMZWZ0ID0gdHJ1 ZTsKLQkJc28tPmN1cnJQb3MubW9yZVJpZ2h0ID0gdHJ1ZTsKKwkJZmlyc3RiYXRjaC0+bW9yZUxl ZnQgPSB0cnVlOworCQlmaXJzdGJhdGNoLT5tb3JlUmlnaHQgPSB0cnVlOwogCQlzby0+bmVlZFBy aW1TY2FuID0gZmFsc2U7CiAJfQogCWVsc2UgaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGly KSkKIAl7Ci0JCXNvLT5jdXJyUG9zLm1vcmVMZWZ0ID0gZmFsc2U7Ci0JCXNvLT5jdXJyUG9zLm1v cmVSaWdodCA9IHRydWU7CisJCWZpcnN0YmF0Y2gtPm1vcmVMZWZ0ID0gZmFsc2U7CisJCWZpcnN0 YmF0Y2gtPm1vcmVSaWdodCA9IHRydWU7CiAJfQogCWVsc2UKIAl7Ci0JCXNvLT5jdXJyUG9zLm1v cmVMZWZ0ID0gdHJ1ZTsKLQkJc28tPmN1cnJQb3MubW9yZVJpZ2h0ID0gZmFsc2U7CisJCWZpcnN0 YmF0Y2gtPm1vcmVMZWZ0ID0gdHJ1ZTsKKwkJZmlyc3RiYXRjaC0+bW9yZVJpZ2h0ID0gZmFsc2U7 CiAJfQogCiAJLyoKIAkgKiBBdHRlbXB0IHRvIGxvYWQgbWF0Y2hpbmcgdHVwbGVzIGZyb20gdGhl IGZpcnN0IHBhZ2UuCiAJICoKLQkgKiBOb3RlIHRoYXQgX2J0X3JlYWRwYWdlIHdpbGwgZmluaXNo IGluaXRpYWxpemluZyB0aGUgc28tPmN1cnJQb3MgZmllbGRzLgorCSAqIE5vdGUgdGhhdCBfYnRf cmVhZHBhZ2Ugd2lsbCBmaW5pc2ggaW5pdGlhbGl6aW5nIHRoZSBmaXJzdGJhdGNoIGZpZWxkcy4K IAkgKiBfYnRfcmVhZHBhZ2UgYWxzbyByZWxlYXNlcyBwYXJhbGxlbCBzY2FuIChldmVuIHdoZW4g aXQgcmV0dXJucyBmYWxzZSkuCiAJICovCi0JaWYgKF9idF9yZWFkcGFnZShzY2FuLCBkaXIsIG9m Zm51bSwgdHJ1ZSkpCisJaWYgKF9idF9yZWFkcGFnZShzY2FuLCBmaXJzdGJhdGNoLCBkaXIsIG9m Zm51bSwgdHJ1ZSkpCiAJewotCQlSZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOwot Ci0JCS8qCi0JCSAqIF9idF9yZWFkcGFnZSBzdWNjZWVkZWQuICBEcm9wIHRoZSBsb2NrIChhbmQg bWF5YmUgdGhlIHBpbikgb24KLQkJICogc28tPmN1cnJQb3MuYnVmIGluIHByZXBhcmF0aW9uIGZv ciBidGdldHR1cGxlIHJldHVybmluZyB0dXBsZXMuCi0JCSAqLwotCQlBc3NlcnQoQlRTY2FuUG9z SXNQaW5uZWQoc28tPmN1cnJQb3MpKTsKLQkJX2J0X2Ryb3BfbG9ja19hbmRfbWF5YmVfcGluKHJl bCwgc28pOwotCQlyZXR1cm4gdHJ1ZTsKKwkJLyogX2J0X3JlYWRwYWdlIHNhdmVkIG9uZSBvciBt b3JlIG1hdGNoZXMgaW4gZmlyc3RiYXRjaC5pdGVtc1tdICovCisJCWluZGV4YW1fdXRpbF9iYXRj aF91bmxvY2soc2NhbiwgZmlyc3RiYXRjaCk7CisJCXJldHVybiBmaXJzdGJhdGNoOwogCX0KIAot CS8qIFRoZXJlJ3Mgbm8gYWN0dWFsbHktbWF0Y2hpbmcgZGF0YSBvbiB0aGUgcGFnZSBpbiBzby0+ Y3VyclBvcy5idWYgKi8KLQlfYnRfdW5sb2NrYnVmKHNjYW4tPmluZGV4UmVsYXRpb24sIHNvLT5j dXJyUG9zLmJ1Zik7CisJLyogVGhlcmUncyBubyBhY3R1YWxseS1tYXRjaGluZyBkYXRhIG9uIHRo ZSBwYWdlICovCisJX2J0X3JlbGJ1ZihzY2FuLT5pbmRleFJlbGF0aW9uLCBmaXJzdGJhdGNoLT5i dWYpOworCWZpcnN0YmF0Y2gtPmJ1ZiA9IEludmFsaWRCdWZmZXI7CiAKLQkvKiBDYWxsIF9idF9y ZWFkbmV4dHBhZ2UgdXNpbmcgaXRzIF9idF9zdGVwcGFnZSB3cmFwcGVyIGZ1bmN0aW9uICovCi0J aWYgKCFfYnRfc3RlcHBhZ2Uoc2NhbiwgZGlyKSkKLQkJcmV0dXJuIGZhbHNlOworCS8qIFdhbGsg dG8gdGhlIG5leHQgcGFnZSB3aXRoIGRhdGEgKi8KKwlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2Fy ZChkaXIpKQorCQlibGtubyA9IGZpcnN0YmF0Y2gtPm5leHRQYWdlOworCWVsc2UKKwkJYmxrbm8g PSBmaXJzdGJhdGNoLT5wcmV2UGFnZTsKKwlsYXN0Y3VycmJsa25vID0gZmlyc3RiYXRjaC0+Y3Vy clBhZ2U7CiAKLQkvKiBfYnRfcmVhZHBhZ2UgZm9yIGEgbGF0ZXIgcGFnZSAobm93IGluIHNvLT5j dXJyUG9zKSBzdWNjZWVkZWQgKi8KLQlyZXR1cm4gdHJ1ZTsKKwlBc3NlcnQoZmlyc3RiYXRjaC0+ ZGlyID09IGRpcik7CisKKwlpZiAoYmxrbm8gPT0gUF9OT05FIHx8CisJCShTY2FuRGlyZWN0aW9u SXNGb3J3YXJkKGRpcikgPworCQkgIWZpcnN0YmF0Y2gtPm1vcmVSaWdodCA6ICFmaXJzdGJhdGNo LT5tb3JlTGVmdCkpCisJeworCQkvKgorCQkgKiBmaXJzdGJhdGNoIF9idF9yZWFkcGFnZSBjYWxs IGVuZGVkIHNjYW4gaW4gdGhpcyBkaXJlY3Rpb24gKHRob3VnaAorCQkgKiBpZiBzby0+bmVlZFBy aW1TY2FuIHdhcyBzZXQgdGhlIHNjYW4gd2lsbCBjb250aW51ZSBpbiBfYnRfZmlyc3QpCisJCSAq LworCQlpbmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFzZShzY2FuLCBmaXJzdGJhdGNoKTsKKwkJX2J0 X3BhcmFsbGVsX2RvbmUoc2Nhbik7CisJCXJldHVybiBOVUxMOworCX0KKworCWluZGV4YW1fdXRp bF9iYXRjaF9yZWxlYXNlKHNjYW4sIGZpcnN0YmF0Y2gpOworCisJLyogcGFyYWxsZWwgc2NhbiBt dXN0IHNlaXplIHRoZSBzY2FuIHRvIGdldCBuZXh0IGJsa25vICovCisJaWYgKHNjYW4tPnBhcmFs bGVsX3NjYW4gIT0gTlVMTCAmJgorCQkhX2J0X3BhcmFsbGVsX3NlaXplKHNjYW4sICZibGtubywg Jmxhc3RjdXJyYmxrbm8sIGZhbHNlKSkKKwkJcmV0dXJuIE5VTEw7CQkJLyogZG9uZSBpZmYgc28t Pm5lZWRQcmltU2NhbiB3YXNuJ3Qgc2V0ICovCisKKwlyZXR1cm4gX2J0X3JlYWRuZXh0cGFnZShz Y2FuLCBibGtubywgbGFzdGN1cnJibGtubywgZGlyLCBmYWxzZSk7CiB9CiAKIC8qCkBAIC0xODA3 LDEwMiArMTY5NSw2NSBAQCBfYnRfcmVhZGZpcnN0cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIE9m ZnNldE51bWJlciBvZmZudW0sIFNjYW5EaXJlY3Rpb24gZGlyKQogICogcHJldmlvdXNseS1zYXZl ZCByaWdodCBsaW5rIG9yIGxlZnQgbGluay4gIGxhc3RjdXJyYmxrbm8gaXMgdGhlIHBhZ2UgdGhh dAogICogd2FzIGN1cnJlbnQgYXQgdGhlIHBvaW50IHdoZXJlIHRoZSBibGtubyBsaW5rIHdhcyBz YXZlZCwgd2hpY2ggd2UgdXNlIHRvCiAgKiByZWFzb24gYWJvdXQgY29uY3VycmVudCBwYWdlIHNw bGl0cy9wYWdlIGRlbGV0aW9ucyBkdXJpbmcgYmFja3dhcmRzIHNjYW5zLgotICogSW4gdGhlIGNv bW1vbiBjYXNlIHdoZXJlIHNlaXplZD1mYWxzZSwgYmxrbm8gaXMgZWl0aGVyIHNvLT5jdXJyUG9z Lm5leHRQYWdlCi0gKiBvciBzby0+Y3VyclBvcy5wcmV2UGFnZSwgYW5kIGxhc3RjdXJyYmxrbm8g aXMgc28tPmN1cnJQb3MuY3VyclBhZ2UuCisgKiBibGtubyBpcyB0aGUgcHJpb3IgYmF0Y2gncyBu ZXh0UGFnZSBvciBwcmV2UGFnZSAoZGVwZW5kaW5nIG9uIHRoZSBjdXJyZW50CisgKiBzY2FuIGRp cmVjdGlvbiksIGFuZCBsYXN0Y3VycmJsa25vIGlzIHRoZSBwcmlvciBiYXRjaCdzIGN1cnJQYWdl LgogICoKLSAqIE9uIGVudHJ5LCBzby0+Y3VyclBvcyBzaG91bGRuJ3QgYmUgbG9ja2VkIGJ5IGNh bGxlci4gIHNvLT5jdXJyUG9zLmJ1ZiBtdXN0Ci0gKiBiZSBJbnZhbGlkQnVmZmVyL3VucGlubmVk IGFzIG5lZWRlZCBieSBjYWxsZXIgKG5vdGUgdGhhdCBsYXN0Y3VycmJsa25vCi0gKiB3b24ndCBu ZWVkIHRvIGJlIHJlYWQgYWdhaW4gaW4gYWxtb3N0IGFsbCBjYXNlcykuICBQYXJhbGxlbCBzY2Fu IGNhbGxlcnMKLSAqIHRoYXQgc2VpemVkIHRoZSBzY2FuIGJlZm9yZSBjYWxsaW5nIGhlcmUgc2hv dWxkIHBhc3Mgc2VpemVkPXRydWU7IHN1Y2ggYQotICogY2FsbGVyJ3MgYmxrbm8gYW5kIGxhc3Rj dXJyYmxrbm8gYXJndW1lbnRzIGNvbWUgZnJvbSB0aGUgc2VpemVkIHNjYW4uCi0gKiBzZWl6ZWQ9 ZmFsc2UgY2FsbGVycyBqdXN0IHBhc3MgdXMgdGhlIGJsa25vL2xhc3RjdXJyYmxrbm8gdGFrZW4g ZnJvbSB0aGVpcgotICogc28tPmN1cnJQb3MsIHdoaWNoIChhbG9uZyB3aXRoIHNvLT5jdXJyUG9z IGl0c2VsZikgY2FuIGJlIHVzZWQgdG8gZW5kIHRoZQotICogc2Nhbi4gIEEgc2VpemVkPWZhbHNl IGNhbGxlcidzIGJsa25vIGNhbiBuZXZlciBiZSBhc3N1bWVkIHRvIGJlIHRoZSBwYWdlCi0gKiB0 aGF0IG11c3QgYmUgcmVhZCBuZXh0IGR1cmluZyBhIHBhcmFsbGVsIHNjYW4sIHRob3VnaC4gIFdl IG11c3QgZmlndXJlIHRoYXQKLSAqIHBhcnQgb3V0IGZvciBvdXJzZWx2ZXMgYnkgc2VpemluZyB0 aGUgc2NhbiAodGhlIGNvcnJlY3QgcGFnZSB0byByZWFkIG1pZ2h0Ci0gKiBhbHJlYWR5IGJlIGJl eW9uZCB0aGUgc2VpemVkPWZhbHNlIGNhbGxlcidzIGJsa25vIGR1cmluZyBhIHBhcmFsbGVsIHNj YW4sCi0gKiB1bmxlc3MgYmxrbm8vc28tPmN1cnJQb3MubmV4dFBhZ2Uvc28tPmN1cnJQb3MucHJl dlBhZ2UgaXMgYWxyZWFkeSBQX05PTkUsCi0gKiBvciB1bmxlc3Mgc28tPmN1cnJQb3MubW9yZVJp Z2h0L3NvLT5jdXJyUG9zLm1vcmVMZWZ0IGlzIGFscmVhZHkgdW5zZXQpLgorICogT24gZW50cnks IG5vIHBhZ2Ugc2hvdWxkIGJlIGxvY2tlZCBieSBjYWxsZXIuCiAgKgotICogT24gc3VjY2VzcyBl eGl0LCBzby0+Y3VyclBvcyBpcyB1cGRhdGVkIHRvIGNvbnRhaW4gZGF0YSBmcm9tIHRoZSBuZXh0 Ci0gKiBpbnRlcmVzdGluZyBwYWdlLCBhbmQgd2UgcmV0dXJuIHRydWUuICBXZSBob2xkIGEgcGlu IG9uIHRoZSBidWZmZXIgb24KLSAqIHN1Y2Nlc3MgZXhpdCAoZXhjZXB0IGR1cmluZyBzby0+ZHJv cFBpbiBpbmRleCBzY2Fucywgd2hlbiB3ZSBkcm9wIHRoZSBwaW4KLSAqIGVhZ2VybHkgdG8gYXZv aWQgYmxvY2tpbmcgVkFDVVVNKS4KKyAqIE9uIHN1Y2Nlc3MgZXhpdCwgcmV0dXJucyBiYXRjaCBj b250YWluaW5nIGRhdGEgZnJvbSB0aGUgbmV4dCBwYWdlIHRoYXQgaGFzCisgKiBhdCBsZWFzdCBv bmUgbWF0Y2hpbmcgaXRlbS4gIElmIHRoZXJlIGFyZSBubyBtb3JlIG1hdGNoaW5nIGl0ZW1zIGlu IHRoZQorICogZ2l2ZW4gc2NhbiBkaXJlY3Rpb24sIHdlIGp1c3QgcmV0dXJuIE5VTEwuCiAgKgot ICogSWYgdGhlcmUgYXJlIG5vIG1vcmUgbWF0Y2hpbmcgcmVjb3JkcyBpbiB0aGUgZ2l2ZW4gZGly ZWN0aW9uLCB3ZSBpbnZhbGlkYXRlCi0gKiBzby0+Y3VyclBvcyAod2hpbGUgZW5zdXJpbmcgaXQg cmV0YWlucyBubyBsb2NrcyBvciBwaW5zKSwgYW5kIHJldHVybiBmYWxzZS4KLSAqCi0gKiBXZSBh bHdheXMgcmVsZWFzZSB0aGUgc2NhbiBmb3IgYSBwYXJhbGxlbCBzY2FuIGNhbGxlciwgcmVnYXJk bGVzcyBvZgotICogc3VjY2VzcyBvciBmYWlsdXJlOyB3ZSdsbCBjYWxsIF9idF9wYXJhbGxlbF9y ZWxlYXNlIGFzIHNvb24gYXMgcG9zc2libGUuCisgKiBQYXJhbGxlbCBzY2FuIGNhbGxlcnMgbXVz dCBzZWl6ZSB0aGUgc2NhbiBiZWZvcmUgY2FsbGluZyBoZXJlLiAgYmxrbm8gYW5kCisgKiBsYXN0 Y3VycmJsa25vIHNob3VsZCBjb21lIGZyb20gdGhlIHNlaXplZCBzY2FuLiAgV2UnbGwgcmVsZWFz ZSB0aGUgc2NhbiBhcworICogc29vbiBhcyBwb3NzaWJsZS4KICAqLwotc3RhdGljIGJvb2wKK3N0 YXRpYyBJbmRleFNjYW5CYXRjaAogX2J0X3JlYWRuZXh0cGFnZShJbmRleFNjYW5EZXNjIHNjYW4s IEJsb2NrTnVtYmVyIGJsa25vLAotCQkJCSBCbG9ja051bWJlciBsYXN0Y3VycmJsa25vLCBTY2Fu RGlyZWN0aW9uIGRpciwgYm9vbCBzZWl6ZWQpCisJCQkJIEJsb2NrTnVtYmVyIGxhc3RjdXJyYmxr bm8sIFNjYW5EaXJlY3Rpb24gZGlyLCBib29sIGZpcnN0cGFnZSkKIHsKIAlSZWxhdGlvbglyZWwg PSBzY2FuLT5pbmRleFJlbGF0aW9uOwotCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUp IHNjYW4tPm9wYXF1ZTsKKwlJbmRleFNjYW5CYXRjaCBuZXdiYXRjaDsKIAotCUFzc2VydChzby0+ Y3VyclBvcy5jdXJyUGFnZSA9PSBsYXN0Y3VycmJsa25vIHx8IHNlaXplZCk7Ci0JQXNzZXJ0KCEo Ymxrbm8gPT0gUF9OT05FICYmIHNlaXplZCkpOwotCUFzc2VydCghQlRTY2FuUG9zSXNQaW5uZWQo c28tPmN1cnJQb3MpKTsKKwkvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgbmV4dCBiYXRjaCAqLworCW5l d2JhdGNoID0gaW5kZXhhbV91dGlsX2JhdGNoX2FsbG9jKHNjYW4pOwogCiAJLyoKLQkgKiBSZW1l bWJlciB0aGF0IHRoZSBzY2FuIGFscmVhZHkgcmVhZCBsYXN0Y3VycmJsa25vLCBhIHBhZ2UgdG8g dGhlIGxlZnQKLQkgKiBvZiBibGtubyAob3IgcmVtZW1iZXIgcmVhZGluZyBhIHBhZ2UgdG8gdGhl IHJpZ2h0LCBmb3IgYmFja3dhcmRzIHNjYW5zKQorCSAqIG5ld2JhdGNoIHdpbGwgYmUgdGhlIGJh dGNoIGZvciBsYXN0Y3VycmJsa25vLCBhIHBhZ2UgdG8gdGhlIGxlZnQgb2YKKwkgKiBibGtubyAo b3IgdG8gdGhlIHJpZ2h0LCB3aGVuIHRoZSBzY2FuIGlzIG1vdmluZyBiYWNrd2FyZHMpCiAJICov Ci0JaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKLQkJc28tPmN1cnJQb3MubW9yZUxl ZnQgPSB0cnVlOwotCWVsc2UKLQkJc28tPmN1cnJQb3MubW9yZVJpZ2h0ID0gdHJ1ZTsKKwluZXdi YXRjaC0+bW9yZUxlZnQgPSB0cnVlOworCW5ld2JhdGNoLT5tb3JlUmlnaHQgPSB0cnVlOwogCiAJ Zm9yICg7OykKIAl7CiAJCVBhZ2UJCXBhZ2U7CiAJCUJUUGFnZU9wYXF1ZSBvcGFxdWU7CiAKLQkJ aWYgKGJsa25vID09IFBfTk9ORSB8fAotCQkJKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSA/ Ci0JCQkgIXNvLT5jdXJyUG9zLm1vcmVSaWdodCA6ICFzby0+Y3VyclBvcy5tb3JlTGVmdCkpCi0J CXsKLQkJCS8qIG1vc3QgcmVjZW50IF9idF9yZWFkcGFnZSBjYWxsIChmb3IgbGFzdGN1cnJibGtu bykgZW5kZWQgc2NhbiAqLwotCQkJQXNzZXJ0KHNvLT5jdXJyUG9zLmN1cnJQYWdlID09IGxhc3Rj dXJyYmxrbm8gJiYgIXNlaXplZCk7Ci0JCQlCVFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5jdXJyUG9z KTsKLQkJCV9idF9wYXJhbGxlbF9kb25lKHNjYW4pOwkvKiBpZmYgIXNvLT5uZWVkUHJpbVNjYW4g Ki8KLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCi0JCUFzc2VydCghc28tPm5lZWRQcmltU2Nhbik7 Ci0KLQkJLyogcGFyYWxsZWwgc2NhbiBtdXN0IG5ldmVyIGFjdHVhbGx5IHZpc2l0IHNvLT5jdXJy UG9zIGJsa25vICovCi0JCWlmICghc2VpemVkICYmIHNjYW4tPnBhcmFsbGVsX3NjYW4gIT0gTlVM TCAmJgotCQkJIV9idF9wYXJhbGxlbF9zZWl6ZShzY2FuLCAmYmxrbm8sICZsYXN0Y3VycmJsa25v LCBmYWxzZSkpCi0JCXsKLQkJCS8qIHdob2xlIHNjYW4gaXMgbm93IGRvbmUgKG9yIGFub3RoZXIg cHJpbWl0aXZlIHNjYW4gcmVxdWlyZWQpICovCi0JCQlCVFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5j dXJyUG9zKTsKLQkJCXJldHVybiBmYWxzZTsKLQkJfQorCQlBc3NlcnQoISgoQlRTY2FuT3BhcXVl KSBzY2FuLT5vcGFxdWUpLT5uZWVkUHJpbVNjYW4pOworCQlBc3NlcnQoYmxrbm8gIT0gUF9OT05F ICYmIGxhc3RjdXJyYmxrbm8gIT0gUF9OT05FKTsKIAogCQlpZiAoU2NhbkRpcmVjdGlvbklzRm9y d2FyZChkaXIpKQogCQl7CiAJCQkvKiByZWFkIGJsa25vLCBidXQgY2hlY2sgZm9yIGludGVycnVw dHMgZmlyc3QgKi8KIAkJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7Ci0JCQlzby0+Y3VyclBvcy5i dWYgPSBfYnRfZ2V0YnVmKHJlbCwgYmxrbm8sIEJUX1JFQUQpOworCQkJbmV3YmF0Y2gtPmJ1ZiA9 IF9idF9nZXRidWYocmVsLCBibGtubywgQlRfUkVBRCk7CiAJCX0KIAkJZWxzZQogCQl7CiAJCQkv KiByZWFkIGJsa25vLCBhdm9pZGluZyByYWNlIChhbHNvIGNoZWNrcyBmb3IgaW50ZXJydXB0cykg Ki8KLQkJCXNvLT5jdXJyUG9zLmJ1ZiA9IF9idF9sb2NrX2FuZF92YWxpZGF0ZV9sZWZ0KHJlbCwg JmJsa25vLAotCQkJCQkJCQkJCQkJCQkgbGFzdGN1cnJibGtubyk7Ci0JCQlpZiAoc28tPmN1cnJQ b3MuYnVmID09IEludmFsaWRCdWZmZXIpCisJCQluZXdiYXRjaC0+YnVmID0gX2J0X2xvY2tfYW5k X3ZhbGlkYXRlX2xlZnQocmVsLCAmYmxrbm8sCisJCQkJCQkJCQkJCQkJICAgbGFzdGN1cnJibGtu byk7CisJCQlpZiAobmV3YmF0Y2gtPmJ1ZiA9PSBJbnZhbGlkQnVmZmVyKQogCQkJewogCQkJCS8q IG11c3QgaGF2ZSBiZWVuIGEgY29uY3VycmVudCBkZWxldGlvbiBvZiBsZWZ0bW9zdCBwYWdlICov Ci0JCQkJQlRTY2FuUG9zSW52YWxpZGF0ZShzby0+Y3VyclBvcyk7CiAJCQkJX2J0X3BhcmFsbGVs X2RvbmUoc2Nhbik7Ci0JCQkJcmV0dXJuIGZhbHNlOworCQkJCWluZGV4YW1fdXRpbF9iYXRjaF9y ZWxlYXNlKHNjYW4sIG5ld2JhdGNoKTsKKwkJCQlyZXR1cm4gTlVMTDsKIAkJCX0KIAkJfQogCi0J CXBhZ2UgPSBCdWZmZXJHZXRQYWdlKHNvLT5jdXJyUG9zLmJ1Zik7CisJCXBhZ2UgPSBCdWZmZXJH ZXRQYWdlKG5ld2JhdGNoLT5idWYpOwogCQlvcGFxdWUgPSBCVFBhZ2VHZXRPcGFxdWUocGFnZSk7 CiAJCWxhc3RjdXJyYmxrbm8gPSBibGtubzsKIAkJaWYgKGxpa2VseSghUF9JR05PUkUob3BhcXVl KSkpCkBAIC0xOTEwLDE3ICsxNzYxLDE3IEBAIF9idF9yZWFkbmV4dHBhZ2UoSW5kZXhTY2FuRGVz YyBzY2FuLCBCbG9ja051bWJlciBibGtubywKIAkJCS8qIHNlZSBpZiB0aGVyZSBhcmUgYW55IG1h dGNoZXMgb24gdGhpcyBwYWdlICovCiAJCQlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIp KQogCQkJewotCQkJCS8qIG5vdGUgdGhhdCB0aGlzIHdpbGwgY2xlYXIgbW9yZVJpZ2h0IGlmIHdl IGNhbiBzdG9wICovCi0JCQkJaWYgKF9idF9yZWFkcGFnZShzY2FuLCBkaXIsIFBfRklSU1REQVRB S0VZKG9wYXF1ZSksIHNlaXplZCkpCisJCQkJaWYgKF9idF9yZWFkcGFnZShzY2FuLCBuZXdiYXRj aCwgZGlyLAorCQkJCQkJCQkgUF9GSVJTVERBVEFLRVkob3BhcXVlKSwgZmlyc3RwYWdlKSkKIAkJ CQkJYnJlYWs7Ci0JCQkJYmxrbm8gPSBzby0+Y3VyclBvcy5uZXh0UGFnZTsKKwkJCQlibGtubyA9 IG5ld2JhdGNoLT5uZXh0UGFnZTsKIAkJCX0KIAkJCWVsc2UKIAkJCXsKLQkJCQkvKiBub3RlIHRo YXQgdGhpcyB3aWxsIGNsZWFyIG1vcmVMZWZ0IGlmIHdlIGNhbiBzdG9wICovCi0JCQkJaWYgKF9i dF9yZWFkcGFnZShzY2FuLCBkaXIsIFBhZ2VHZXRNYXhPZmZzZXROdW1iZXIocGFnZSksIHNlaXpl ZCkpCisJCQkJaWYgKF9idF9yZWFkcGFnZShzY2FuLCBuZXdiYXRjaCwgZGlyLAorCQkJCQkJCQkg UGFnZUdldE1heE9mZnNldE51bWJlcihwYWdlKSwgZmlyc3RwYWdlKSkKIAkJCQkJYnJlYWs7Ci0J CQkJYmxrbm8gPSBzby0+Y3VyclBvcy5wcmV2UGFnZTsKKwkJCQlibGtubyA9IG5ld2JhdGNoLT5w cmV2UGFnZTsKIAkJCX0KIAkJfQogCQllbHNlCkBAIC0xOTM1LDE5ICsxNzg2LDM5IEBAIF9idF9y ZWFkbmV4dHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBCbG9ja051bWJlciBibGtubywKIAkJfQog CiAJCS8qIG5vIG1hdGNoaW5nIHR1cGxlcyBvbiB0aGlzIHBhZ2UgKi8KLQkJX2J0X3JlbGJ1Zihy ZWwsIHNvLT5jdXJyUG9zLmJ1Zik7Ci0JCXNlaXplZCA9IGZhbHNlOwkJCS8qIHJlbGVhc2VkIGJ5 IF9idF9yZWFkcGFnZSAob3IgYnkgdXMpICovCisJCV9idF9yZWxidWYocmVsLCBuZXdiYXRjaC0+ YnVmKTsKKwkJbmV3YmF0Y2gtPmJ1ZiA9IEludmFsaWRCdWZmZXI7CisKKwkJLyogQ29udGludWUg dGhlIHNjYW4gaW4gdGhpcyBkaXJlY3Rpb24/ICovCisJCWlmIChibGtubyA9PSBQX05PTkUgfHwK KwkJCShTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikgPworCQkJICFuZXdiYXRjaC0+bW9yZVJp Z2h0IDogIW5ld2JhdGNoLT5tb3JlTGVmdCkpCisJCXsKKwkJCS8qCisJCQkgKiBibGtubyBfYnRf cmVhZHBhZ2UgY2FsbCBlbmRlZCBzY2FuIGluIHRoaXMgZGlyZWN0aW9uICh0aG91Z2ggaWYKKwkJ CSAqIHNvLT5uZWVkUHJpbVNjYW4gd2FzIHNldCB0aGUgc2NhbiB3aWxsIGNvbnRpbnVlIGluIF9i dF9maXJzdCkKKwkJCSAqLworCQkJX2J0X3BhcmFsbGVsX2RvbmUoc2Nhbik7CisJCQlpbmRleGFt X3V0aWxfYmF0Y2hfcmVsZWFzZShzY2FuLCBuZXdiYXRjaCk7CisJCQlyZXR1cm4gTlVMTDsKKwkJ fQorCisJCS8qIHBhcmFsbGVsIHNjYW4gbXVzdCBzZWl6ZSB0aGUgc2NhbiB0byBnZXQgbmV4dCBi bGtubyAqLworCQlpZiAoc2Nhbi0+cGFyYWxsZWxfc2NhbiAhPSBOVUxMICYmCisJCQkhX2J0X3Bh cmFsbGVsX3NlaXplKHNjYW4sICZibGtubywgJmxhc3RjdXJyYmxrbm8sIGZhbHNlKSkKKwkJewor CQkJaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2Uoc2NhbiwgbmV3YmF0Y2gpOworCQkJcmV0dXJu IE5VTEw7CQkvKiBkb25lIGlmZiBzby0+bmVlZFByaW1TY2FuIHdhc24ndCBzZXQgKi8KKwkJfQor CisJCWZpcnN0cGFnZSA9IGZhbHNlOwkJLyogbmV4dCBwYWdlIGNhbm5vdCBiZSBmaXJzdCAqLwog CX0KIAotCS8qCi0JICogX2J0X3JlYWRwYWdlIHN1Y2NlZWRlZC4gIERyb3AgdGhlIGxvY2sgKGFu ZCBtYXliZSB0aGUgcGluKSBvbgotCSAqIHNvLT5jdXJyUG9zLmJ1ZiBpbiBwcmVwYXJhdGlvbiBm b3IgYnRnZXR0dXBsZSByZXR1cm5pbmcgdHVwbGVzLgotCSAqLwotCUFzc2VydChzby0+Y3VyclBv cy5jdXJyUGFnZSA9PSBibGtubyk7Ci0JQXNzZXJ0KEJUU2NhblBvc0lzUGlubmVkKHNvLT5jdXJy UG9zKSk7Ci0JX2J0X2Ryb3BfbG9ja19hbmRfbWF5YmVfcGluKHJlbCwgc28pOworCS8qIF9idF9y ZWFkcGFnZSBzYXZlZCBvbmUgb3IgbW9yZSBtYXRjaGVzIGluIG5ld2JhdGNoLml0ZW1zW10gKi8K KwlBc3NlcnQobmV3YmF0Y2gtPmN1cnJQYWdlID09IGJsa25vKTsKKwlpbmRleGFtX3V0aWxfYmF0 Y2hfdW5sb2NrKHNjYW4sIG5ld2JhdGNoKTsKIAotCXJldHVybiB0cnVlOworCXJldHVybiBuZXdi YXRjaDsKIH0KIAogLyoKQEAgLTIxNzMsMjUgKzIwNDQsMjMgQEAgX2J0X2dldF9lbmRwb2ludChS ZWxhdGlvbiByZWwsIHVpbnQzMiBsZXZlbCwgYm9vbCByaWdodG1vc3QpCiAgKiBQYXJhbGxlbCBz Y2FuIGNhbGxlcnMgbXVzdCBoYXZlIHNlaXplZCB0aGUgc2NhbiBiZWZvcmUgY2FsbGluZyBoZXJl LgogICogRXhpdCBjb25kaXRpb25zIGFyZSB0aGUgc2FtZSBhcyBmb3IgX2J0X2ZpcnN0KCkuCiAg Ki8KLXN0YXRpYyBib29sCi1fYnRfZW5kcG9pbnQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGly ZWN0aW9uIGRpcikKK3N0YXRpYyBJbmRleFNjYW5CYXRjaAorX2J0X2VuZHBvaW50KEluZGV4U2Nh bkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIEluZGV4U2NhbkJhdGNoIGZpcnN0YmF0Y2gp CiB7CiAJUmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKLQlCVFNjYW5PcGFxdWUg c28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CiAJUGFnZQkJcGFnZTsKIAlCVFBhZ2VP cGFxdWUgb3BhcXVlOwogCU9mZnNldE51bWJlciBzdGFydDsKIAotCUFzc2VydCghQlRTY2FuUG9z SXNWYWxpZChzby0+Y3VyclBvcykpOwotCUFzc2VydCghc28tPm5lZWRQcmltU2Nhbik7CisJQXNz ZXJ0KCEoKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlKS0+bmVlZFByaW1TY2FuKTsKIAogCS8q CiAJICogU2NhbiBkb3duIHRvIHRoZSBsZWZ0bW9zdCBvciByaWdodG1vc3QgbGVhZiBwYWdlLiAg VGhpcyBpcyBhIHNpbXBsaWZpZWQKIAkgKiB2ZXJzaW9uIG9mIF9idF9zZWFyY2goKS4KIAkgKi8K LQlzby0+Y3VyclBvcy5idWYgPSBfYnRfZ2V0X2VuZHBvaW50KHJlbCwgMCwgU2NhbkRpcmVjdGlv bklzQmFja3dhcmQoZGlyKSk7CisJZmlyc3RiYXRjaC0+YnVmID0gX2J0X2dldF9lbmRwb2ludChy ZWwsIDAsIFNjYW5EaXJlY3Rpb25Jc0JhY2t3YXJkKGRpcikpOwogCi0JaWYgKCFCdWZmZXJJc1Zh bGlkKHNvLT5jdXJyUG9zLmJ1ZikpCisJaWYgKCFCdWZmZXJJc1ZhbGlkKGZpcnN0YmF0Y2gtPmJ1 ZikpCiAJewogCQkvKgogCQkgKiBFbXB0eSBpbmRleC4gTG9jayB0aGUgd2hvbGUgcmVsYXRpb24s IGFzIG5vdGhpbmcgZmluZXIgdG8gbG9jawpAQCAtMjIwMiw3ICsyMDcxLDcgQEAgX2J0X2VuZHBv aW50KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJCXJldHVybiBmYWxz ZTsKIAl9CiAKLQlwYWdlID0gQnVmZmVyR2V0UGFnZShzby0+Y3VyclBvcy5idWYpOworCXBhZ2Ug PSBCdWZmZXJHZXRQYWdlKGZpcnN0YmF0Y2gtPmJ1Zik7CiAJb3BhcXVlID0gQlRQYWdlR2V0T3Bh cXVlKHBhZ2UpOwogCUFzc2VydChQX0lTTEVBRihvcGFxdWUpKTsKIApAQCAtMjIyOCw5ICsyMDk3 LDUgQEAgX2J0X2VuZHBvaW50KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIp CiAJLyoKIAkgKiBOb3cgbG9hZCBkYXRhIGZyb20gdGhlIGZpcnN0IHBhZ2Ugb2YgdGhlIHNjYW4u CiAJICovCi0JaWYgKCFfYnRfcmVhZGZpcnN0cGFnZShzY2FuLCBzdGFydCwgZGlyKSkKLQkJcmV0 dXJuIGZhbHNlOwotCi0JX2J0X3JldHVybml0ZW0oc2Nhbiwgc28pOwotCXJldHVybiB0cnVlOwor CXJldHVybiBfYnRfcmVhZGZpcnN0cGFnZShzY2FuLCBmaXJzdGJhdGNoLCBzdGFydCwgZGlyKTsK IH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0dXRpbHMuYyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0dXRpbHMuYwppbmRleCBmYzMwMmMyYWQuLjlhZWU2 NmNkMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnR1dGlscy5jCisr KyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0dXRpbHMuYwpAQCAtMjEsMTUgKzIxLDEy IEBACiAjaW5jbHVkZSAiYWNjZXNzL3JlbG9wdGlvbnMuaCIKICNpbmNsdWRlICJhY2Nlc3MvcmVs c2Nhbi5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3Byb2dyZXNzLmgiCi0jaW5jbHVkZSAiY29tbW9u L2ludC5oIgotI2luY2x1ZGUgImxpYi9xdW5pcXVlLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgi CiAjaW5jbHVkZSAidXRpbHMvZGF0dW0uaCIKICNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIK ICNpbmNsdWRlICJ1dGlscy9yZWwuaCIKIAogCi1zdGF0aWMgaW50CV9idF9jb21wYXJlX2ludChj b25zdCB2b2lkICp2YSwgY29uc3Qgdm9pZCAqdmIpOwogc3RhdGljIGludAlfYnRfa2VlcF9uYXR0 cyhSZWxhdGlvbiByZWwsIEluZGV4VHVwbGUgbGFzdGxlZnQsCiAJCQkJCQkgICBJbmRleFR1cGxl IGZpcnN0cmlnaHQsIEJUU2Nhbkluc2VydCBpdHVwX2tleSk7CiAKQEAgLTE2MCwxMTAgKzE1Nyw0 NyBAQCBfYnRfZnJlZXN0YWNrKEJUU3RhY2sgc3RhY2spCiAJfQogfQogCi0vKgotICogcXNvcnQg Y29tcGFyaXNvbiBmdW5jdGlvbiBmb3IgaW50IGFycmF5cwotICovCi1zdGF0aWMgaW50Ci1fYnRf Y29tcGFyZV9pbnQoY29uc3Qgdm9pZCAqdmEsIGNvbnN0IHZvaWQgKnZiKQotewotCWludAkJCWEg PSAqKChjb25zdCBpbnQgKikgdmEpOwotCWludAkJCWIgPSAqKChjb25zdCBpbnQgKikgdmIpOwot Ci0JcmV0dXJuIHBnX2NtcF9zMzIoYSwgYik7Ci19Ci0KIC8qCiAgKiBfYnRfa2lsbGl0ZW1zIC0g c2V0IExQX0RFQUQgc3RhdGUgZm9yIGl0ZW1zIGFuIGluZGV4c2NhbiBjYWxsZXIgaGFzCiAgKiB0 b2xkIHVzIHdlcmUga2lsbGVkCiAgKgotICogc2Nhbi0+b3BhcXVlLCByZWZlcmVuY2VkIGxvY2Fs bHkgdGhyb3VnaCBzbywgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlCi0gKiBjdXJyZW50 IHBhZ2UgYW5kIGtpbGxlZCB0dXBsZXMgdGhlcmVvbiAoZ2VuZXJhbGx5LCB0aGlzIHNob3VsZCBv bmx5IGJlCi0gKiBjYWxsZWQgaWYgc28tPm51bUtpbGxlZCA+IDApLgorICogVGhlIGJhdGNoIHBh cmFtZXRlciBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY3VycmVudCBwYWdlIGFuZCBr aWxsZWQKKyAqIHR1cGxlcyB0aGVyZW9uICh0aGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBpZiBi YXRjaC0+bnVtS2lsbGVkID4gMCkuCiAgKgotICogQ2FsbGVyIHNob3VsZCBub3QgaGF2ZSBhIGxv Y2sgb24gdGhlIHNvLT5jdXJyUG9zIHBhZ2UsIGJ1dCBtdXN0IGhvbGQgYQotICogYnVmZmVyIHBp biB3aGVuICFzby0+ZHJvcFBpbi4gIFdoZW4gd2UgcmV0dXJuLCBpdCBzdGlsbCB3b24ndCBiZSBs b2NrZWQuCi0gKiBJdCdsbCBjb250aW51ZSB0byBob2xkIHdoYXRldmVyIHBpbnMgd2VyZSBoZWxk IGJlZm9yZSBjYWxsaW5nIGhlcmUuCisgKiBDYWxsZXIgc2hvdWxkIG5vdCBoYXZlIGEgbG9jayBv biB0aGUgYmF0Y2ggcG9zaXRpb24ncyBwYWdlLiAgV2hlbiB3ZQorICogcmV0dXJuLCBpdCBzdGls bCB3b24ndCBiZSBsb2NrZWQuICBJdCdsbCBjb250aW51ZSB0byBob2xkIHdoYXRldmVyIHBpbnMK KyAqIHdlcmUgaGVsZCBiZWZvcmUgY2FsbGluZyBoZXJlLgogICoKICAqIFdlIG1hdGNoIGl0ZW1z IGJ5IGhlYXAgVElEIGJlZm9yZSBhc3N1bWluZyB0aGV5IGFyZSB0aGUgcmlnaHQgb25lcyB0byBz ZXQKLSAqIExQX0RFQUQuICBJZiB0aGUgc2NhbiBpcyBvbmUgdGhhdCBob2xkcyBhIGJ1ZmZlciBw aW4gb24gdGhlIHRhcmdldCBwYWdlCi0gKiBjb250aW51b3VzbHkgZnJvbSBpbml0aWFsbHkgcmVh ZGluZyB0aGUgaXRlbXMgdW50aWwgYXBwbHlpbmcgdGhpcyBmdW5jdGlvbgotICogKGlmIGl0IGlz IGEgIXNvLT5kcm9wUGluIHNjYW4pLCBWQUNVVU0gY2Fubm90IGhhdmUgZGVsZXRlZCBhbnkgaXRl bXMgb24gdGhlCi0gKiBwYWdlLCBzbyB0aGUgcGFnZSdzIFRJRHMgY2FuJ3QgaGF2ZSBiZWVuIHJl Y3ljbGVkIGJ5IG5vdy4gIFRoZXJlJ3Mgbm8gcmlzawotICogdGhhdCB3ZSdsbCBjb25mdXNlIGEg bmV3IGluZGV4IHR1cGxlIHRoYXQgaGFwcGVucyB0byB1c2UgYSByZWN5Y2xlZCBUSUQKLSAqIHdp dGggYSBub3ctcmVtb3ZlZCB0dXBsZSB3aXRoIHRoZSBzYW1lIFRJRCAodGhhdCB1c2VkIHRvIGJl IG9uIHRoaXMgc2FtZQotICogcGFnZSkuICBXZSBjYW4ndCByZWx5IG9uIHRoYXQgZHVyaW5nIHNj YW5zIHRoYXQgZHJvcCBidWZmZXIgcGlucyBlYWdlcmx5Ci0gKiAoc28tPmRyb3BQaW4gc2NhbnMp LCB0aG91Z2gsIHNvIHdlIG11c3QgY29uZGl0aW9uIHNldHRpbmcgTFBfREVBRCBiaXRzIG9uCi0g KiB0aGUgcGFnZSBMU04gaGF2aW5nIG5vdCBjaGFuZ2VkIHNpbmNlIGJhY2sgd2hlbiBfYnRfcmVh ZHBhZ2Ugc2F3IHRoZSBwYWdlLgotICogV2UgdG90YWxseSBnaXZlIHVwIG9uIHNldHRpbmcgTFBf REVBRCBiaXRzIHdoZW4gdGhlIHBhZ2UgTFNOIGNoYW5nZWQuCi0gKgotICogV2UgZ2l2ZSB1cCBt dWNoIGxlc3Mgb2Z0ZW4gZHVyaW5nICFzby0+ZHJvcFBpbiBzY2FucywgYnV0IGl0IHN0aWxsIGhh cHBlbnMuCi0gKiBXZSBjb3BlIHdpdGggY2FzZXMgd2hlcmUgaXRlbXMgaGF2ZSBtb3ZlZCByaWdo dCBkdWUgdG8gaW5zZXJ0aW9ucy4gIElmIGFuCi0gKiBpdGVtIGhhcyBtb3ZlZCBvZmYgdGhlIGN1 cnJlbnQgcGFnZSBkdWUgdG8gYSBzcGxpdCwgd2UnbGwgZmFpbCB0byBmaW5kIGl0Ci0gKiBhbmQg anVzdCBnaXZlIHVwIG9uIGl0LgorICogTFBfREVBRC4gIFdlIG11c3QgY29uZGl0aW9uIHNldHRp bmcgTFBfREVBRCBiaXRzIG9uIHRoZSBwYWdlIExTTiBoYXZpbmcgbm90CisgKiBjaGFuZ2VkIHNp bmNlIGJhY2sgd2hlbiBfYnRfcmVhZHBhZ2Ugc2F3IHRoZSBwYWdlLiAgV2UgdG90YWxseSBnaXZl IHVwIG9uCisgKiBzZXR0aW5nIExQX0RFQUQgYml0cyB3aGVuIHRoZSBwYWdlIExTTiBjaGFuZ2Vk LgogICovCiB2b2lkCi1fYnRfa2lsbGl0ZW1zKEluZGV4U2NhbkRlc2Mgc2NhbikKK19idF9raWxs aXRlbXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCkKIHsKIAlSZWxh dGlvbglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOwotCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNj YW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKIAlQYWdlCQlwYWdlOwogCUJUUGFnZU9wYXF1ZSBvcGFx dWU7CiAJT2Zmc2V0TnVtYmVyIG1pbm9mZjsKIAlPZmZzZXROdW1iZXIgbWF4b2ZmOwotCWludAkJ CW51bUtpbGxlZCA9IHNvLT5udW1LaWxsZWQ7CiAJYm9vbAkJa2lsbGVkc29tZXRoaW5nID0gZmFs c2U7CiAJQnVmZmVyCQlidWY7CisJWExvZ1JlY1B0cglsYXRlc3Rsc247CiAKLQlBc3NlcnQobnVt S2lsbGVkID4gMCk7Ci0JQXNzZXJ0KEJUU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKTsKKwlB c3NlcnQoYmF0Y2gtPm51bUtpbGxlZCA+IDApOworCUFzc2VydChCbG9ja051bWJlcklzVmFsaWQo YmF0Y2gtPmN1cnJQYWdlKSk7CiAJQXNzZXJ0KHNjYW4tPmhlYXBSZWxhdGlvbiAhPSBOVUxMKTsg LyogY2FuJ3QgYmUgYSBiaXRtYXAgaW5kZXggc2NhbiAqLwogCi0JLyogQWx3YXlzIGludmFsaWRh dGUgc28tPmtpbGxlZEl0ZW1zW10gYmVmb3JlIGxlYXZpbmcgc28tPmN1cnJQb3MgKi8KLQlzby0+ bnVtS2lsbGVkID0gMDsKKwlidWYgPSBfYnRfZ2V0YnVmKHJlbCwgYmF0Y2gtPmN1cnJQYWdlLCBC VF9SRUFEKTsKIAotCS8qCi0JICogV2UgbmVlZCB0byBpdGVyYXRlIHRocm91Z2ggc28tPmtpbGxl ZEl0ZW1zW10gaW4gbGVhZiBwYWdlIG9yZGVyOyB0aGUKLQkgKiBsb29wIGJlbG93IGV4cGVjdHMg dGhpcyAod2hlbiBtYXJraW5nIHBvc3RpbmcgbGlzdCB0dXBsZXMsIGF0IGxlYXN0KS4KLQkgKiBz by0+a2lsbGVkSXRlbXNbXSBpcyBub3cgaW4gd2hhdGV2ZXIgb3JkZXIgdGhlIHNjYW4gcmV0dXJu ZWQgaXRlbXMgaW4uCi0JICogU2Nyb2xsYWJsZSBjdXJzb3Igc2NhbnMgbWlnaHQgaGF2ZSBldmVu IHNhdmVkIHRoZSBzYW1lIGl0ZW0vVElEIHR3aWNlLgotCSAqCi0JICogU29ydCBhbmQgdW5pcXVl LWlmeSBzby0+a2lsbGVkSXRlbXNbXSB0byBkZWFsIHdpdGggYWxsIHRoaXMuCi0JICovCi0JaWYg KG51bUtpbGxlZCA+IDEpCisJbGF0ZXN0bHNuID0gQnVmZmVyR2V0TFNOQXRvbWljKGJ1Zik7CisJ QXNzZXJ0KGJhdGNoLT5sc24gPD0gbGF0ZXN0bHNuKTsKKwlpZiAoYmF0Y2gtPmxzbiAhPSBsYXRl c3Rsc24pCiAJewotCQlxc29ydChzby0+a2lsbGVkSXRlbXMsIG51bUtpbGxlZCwgc2l6ZW9mKGlu dCksIF9idF9jb21wYXJlX2ludCk7Ci0JCW51bUtpbGxlZCA9IHF1bmlxdWUoc28tPmtpbGxlZEl0 ZW1zLCBudW1LaWxsZWQsIHNpemVvZihpbnQpLAotCQkJCQkJCV9idF9jb21wYXJlX2ludCk7Ci0J fQotCi0JaWYgKCFzby0+ZHJvcFBpbikKLQl7Ci0JCS8qCi0JCSAqIFdlIGhhdmUgaGVsZCB0aGUg cGluIG9uIHRoaXMgcGFnZSBzaW5jZSB3ZSByZWFkIHRoZSBpbmRleCB0dXBsZXMsCi0JCSAqIHNv IGFsbCB3ZSBuZWVkIHRvIGRvIGlzIGxvY2sgaXQuICBUaGUgcGluIHdpbGwgaGF2ZSBwcmV2ZW50 ZWQKLQkJICogY29uY3VycmVudCBWQUNVVU1zIGZyb20gcmVjeWNsaW5nIGFueSBvZiB0aGUgVElE cyBvbiB0aGUgcGFnZS4KLQkJICovCi0JCUFzc2VydChCVFNjYW5Qb3NJc1Bpbm5lZChzby0+Y3Vy clBvcykpOwotCQlidWYgPSBzby0+Y3VyclBvcy5idWY7Ci0JCV9idF9sb2NrYnVmKHJlbCwgYnVm LCBCVF9SRUFEKTsKLQl9Ci0JZWxzZQotCXsKLQkJWExvZ1JlY1B0cglsYXRlc3Rsc247Ci0KLQkJ QXNzZXJ0KCFCVFNjYW5Qb3NJc1Bpbm5lZChzby0+Y3VyclBvcykpOwotCQlidWYgPSBfYnRfZ2V0 YnVmKHJlbCwgc28tPmN1cnJQb3MuY3VyclBhZ2UsIEJUX1JFQUQpOwotCi0JCWxhdGVzdGxzbiA9 IEJ1ZmZlckdldExTTkF0b21pYyhidWYpOwotCQlBc3NlcnQoc28tPmN1cnJQb3MubHNuIDw9IGxh dGVzdGxzbik7Ci0JCWlmIChzby0+Y3VyclBvcy5sc24gIT0gbGF0ZXN0bHNuKQotCQl7Ci0JCQkv KiBNb2RpZmllZCwgZ2l2ZSB1cCBvbiBoaW50aW5nICovCi0JCQlfYnRfcmVsYnVmKHJlbCwgYnVm KTsKLQkJCXJldHVybjsKLQkJfQotCi0JCS8qIFVubW9kaWZpZWQsIGhpbnRpbmcgaXMgc2FmZSAq LworCQkvKiBNb2RpZmllZCwgZ2l2ZSB1cCBvbiBoaW50aW5nICovCisJCV9idF9yZWxidWYocmVs LCBidWYpOworCQlyZXR1cm47CiAJfQogCiAJcGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnVmKTsKQEAg LTI3MSwxNyArMjA1LDE2IEBAIF9idF9raWxsaXRlbXMoSW5kZXhTY2FuRGVzYyBzY2FuKQogCW1p bm9mZiA9IFBfRklSU1REQVRBS0VZKG9wYXF1ZSk7CiAJbWF4b2ZmID0gUGFnZUdldE1heE9mZnNl dE51bWJlcihwYWdlKTsKIAotCS8qIEl0ZXJhdGUgdGhyb3VnaCBzby0+a2lsbGVkSXRlbXNbXSBp biBsZWFmIHBhZ2Ugb3JkZXIgKi8KLQlmb3IgKGludCBpID0gMDsgaSA8IG51bUtpbGxlZDsgaSsr KQorCS8qIEl0ZXJhdGUgdGhyb3VnaCBiYXRjaC0+a2lsbGVkSXRlbXNbXSBpbiBsZWFmIHBhZ2Ug b3JkZXIgKi8KKwlmb3IgKGludCBpID0gMDsgaSA8IGJhdGNoLT5udW1LaWxsZWQ7IGkrKykKIAl7 Ci0JCWludAkJCWl0ZW1JbmRleCA9IHNvLT5raWxsZWRJdGVtc1tpXTsKLQkJQlRTY2FuUG9zSXRl bSAqa2l0ZW0gPSAmc28tPmN1cnJQb3MuaXRlbXNbaXRlbUluZGV4XTsKKwkJaW50CQkJaXRlbUlu ZGV4ID0gYmF0Y2gtPmtpbGxlZEl0ZW1zW2ldOworCQlCYXRjaE1hdGNoaW5nSXRlbSAqa2l0ZW0g PSAmYmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF07CiAJCU9mZnNldE51bWJlciBvZmZudW0gPSBraXRl bS0+aW5kZXhPZmZzZXQ7CiAKLQkJQXNzZXJ0KGl0ZW1JbmRleCA+PSBzby0+Y3VyclBvcy5maXJz dEl0ZW0gJiYKLQkJCSAgIGl0ZW1JbmRleCA8PSBzby0+Y3VyclBvcy5sYXN0SXRlbSk7CisJCUFz c2VydChpdGVtSW5kZXggPj0gYmF0Y2gtPmZpcnN0SXRlbSAmJiBpdGVtSW5kZXggPD0gYmF0Y2gt Pmxhc3RJdGVtKTsKIAkJQXNzZXJ0KGkgPT0gMCB8fAotCQkJICAgb2ZmbnVtID49IHNvLT5jdXJy UG9zLml0ZW1zW3NvLT5raWxsZWRJdGVtc1tpIC0gMV1dLmluZGV4T2Zmc2V0KTsKKwkJCSAgIG9m Zm51bSA+PSBiYXRjaC0+aXRlbXNbYmF0Y2gtPmtpbGxlZEl0ZW1zW2kgLSAxXV0uaW5kZXhPZmZz ZXQpOwogCiAJCWlmIChvZmZudW0gPCBtaW5vZmYpCiAJCQljb250aW51ZTsJCQkvKiBwdXJlIHBh cmFub2lhICovCkBAIC0yOTcsMTIgKzIzMCw2IEBAIF9idF9raWxsaXRlbXMoSW5kZXhTY2FuRGVz YyBzY2FuKQogCQkJCWludAkJCW5wb3N0aW5nID0gQlRyZWVUdXBsZUdldE5Qb3N0aW5nKGl0dXBs ZSk7CiAJCQkJaW50CQkJajsKIAotCQkJCS8qCi0JCQkJICogTm90ZSB0aGF0IHRoZSBwYWdlIG1h eSBoYXZlIGJlZW4gbW9kaWZpZWQgaW4gYWxtb3N0IGFueSB3YXkKLQkJCQkgKiBzaW5jZSB3ZSBm aXJzdCByZWFkIGl0IChpbiB0aGUgIXNvLT5kcm9wUGluIGNhc2UpLCBzbyBpdCdzCi0JCQkJICog cG9zc2libGUgdGhhdCB0aGlzIHBvc3RpbmcgbGlzdCB0dXBsZSB3YXNuJ3QgYSBwb3N0aW5nIGxp c3QKLQkJCQkgKiB0dXBsZSB3aGVuIHdlIGZpcnN0IGVuY291bnRlcmVkIGl0cyBoZWFwIFRJRHMu Ci0JCQkJICovCiAJCQkJZm9yIChqID0gMDsgaiA8IG5wb3N0aW5nOyBqKyspCiAJCQkJewogCQkJ CQlJdGVtUG9pbnRlciBpdGVtID0gQlRyZWVUdXBsZUdldFBvc3RpbmdOKGl0dXBsZSwgaik7CkBA IC0zMTAsMTIgKzIzNyw4IEBAIF9idF9raWxsaXRlbXMoSW5kZXhTY2FuRGVzYyBzY2FuKQogCQkJ CQlpZiAoIUl0ZW1Qb2ludGVyRXF1YWxzKGl0ZW0sICZraXRlbS0+aGVhcFRpZCkpCiAJCQkJCQli cmVhazsJLyogb3V0IG9mIHBvc3RpbmcgbGlzdCBsb29wICovCiAKLQkJCQkJLyoKLQkJCQkJICog a2l0ZW0gbXVzdCBoYXZlIG1hdGNoaW5nIG9mZm51bSB3aGVuIGhlYXAgVElEcyBtYXRjaCwKLQkJ CQkJICogdGhvdWdoIG9ubHkgaW4gdGhlIGNvbW1vbiBjYXNlIHdoZXJlIHRoZSBwYWdlIGNhbid0 Ci0JCQkJCSAqIGhhdmUgYmVlbiBjb25jdXJyZW50bHkgbW9kaWZpZWQKLQkJCQkJICovCi0JCQkJ CUFzc2VydChraXRlbS0+aW5kZXhPZmZzZXQgPT0gb2ZmbnVtIHx8ICFzby0+ZHJvcFBpbik7CisJ CQkJCUFzc2VydChraXRlbS0+aW5kZXhPZmZzZXQgPT0gb2ZmbnVtKTsKKwkJCQkJQXNzZXJ0KCFr aXRlbS0+YWxsVmlzaWJsZSk7CiAKIAkJCQkJLyoKIAkJCQkJICogUmVhZC1haGVhZCB0byBsYXRl ciBraXRlbXMgaGVyZS4KQEAgLTMzMSw4ICsyNTQsOCBAQCBfYnRfa2lsbGl0ZW1zKEluZGV4U2Nh bkRlc2Mgc2NhbikKIAkJCQkJICoga2l0ZW0gaXMgYWxzbyB0aGUgbGFzdCBoZWFwIFRJRCBpbiB0 aGUgbGFzdCBpbmRleCB0dXBsZQogCQkJCQkgKiBjb3JyZWN0bHkgLS0gcG9zdGluZyB0dXBsZSBz dGlsbCBnZXRzIGtpbGxlZCkuCiAJCQkJCSAqLwotCQkJCQlpZiAocGkgPCBudW1LaWxsZWQpCi0J CQkJCQlraXRlbSA9ICZzby0+Y3VyclBvcy5pdGVtc1tzby0+a2lsbGVkSXRlbXNbcGkrK11dOwor CQkJCQlpZiAocGkgPCBiYXRjaC0+bnVtS2lsbGVkKQorCQkJCQkJa2l0ZW0gPSAmYmF0Y2gtPml0 ZW1zW2JhdGNoLT5raWxsZWRJdGVtc1twaSsrXV07CiAJCQkJfQogCiAJCQkJLyoKQEAgLTM4Miwx MCArMzA1LDcgQEAgX2J0X2tpbGxpdGVtcyhJbmRleFNjYW5EZXNjIHNjYW4pCiAJCU1hcmtCdWZm ZXJEaXJ0eUhpbnQoYnVmLCB0cnVlKTsKIAl9CiAKLQlpZiAoIXNvLT5kcm9wUGluKQotCQlfYnRf dW5sb2NrYnVmKHJlbCwgYnVmKTsKLQllbHNlCi0JCV9idF9yZWxidWYocmVsLCBidWYpOworCV9i dF9yZWxidWYocmVsLCBidWYpOwogfQogCiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vz cy9zcGdpc3Qvc3BndXRpbHMuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BndXRpbHMu YwppbmRleCA5ZjUzNzliODcuLmExOGEyZmE5ZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNj ZXNzL3NwZ2lzdC9zcGd1dGlscy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3Bn dXRpbHMuYwpAQCAtODgsMTAgKzg4LDExIEBAIHNwZ2hhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykK IAkJLmFtYmVnaW5zY2FuID0gc3BnYmVnaW5zY2FuLAogCQkuYW1yZXNjYW4gPSBzcGdyZXNjYW4s CiAJCS5hbWdldHR1cGxlID0gc3BnZ2V0dHVwbGUsCisJCS5hbWdldGJhdGNoID0gTlVMTCwKKwkJ LmFtZnJlZWJhdGNoID0gTlVMTCwKIAkJLmFtZ2V0Yml0bWFwID0gc3BnZ2V0Yml0bWFwLAogCQku YW1lbmRzY2FuID0gc3BnZW5kc2NhbiwKLQkJLmFtbWFya3BvcyA9IE5VTEwsCi0JCS5hbXJlc3Ry cG9zID0gTlVMTCwKKwkJLmFtcG9zcmVzZXQgPSBOVUxMLAogCQkuYW1lc3RpbWF0ZXBhcmFsbGVs c2NhbiA9IE5VTEwsCiAJCS5hbWluaXRwYXJhbGxlbHNjYW4gPSBOVUxMLAogCQkuYW1wYXJhbGxl bHJlc2NhbiA9IE5VTEwsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWlu LmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKaW5kZXggYjdiYjExMTY4Li5lYTBh ZGQxYzkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYworKysgYi9z cmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKQEAgLTEzNSw3ICsxMzUsNyBAQCBzdGF0aWMg dm9pZCBzaG93X3JlY3Vyc2l2ZV91bmlvbl9pbmZvKFJlY3Vyc2l2ZVVuaW9uU3RhdGUgKnJzdGF0 ZSwKIHN0YXRpYyB2b2lkIHNob3dfbWVtb2l6ZV9pbmZvKE1lbW9pemVTdGF0ZSAqbXN0YXRlLCBM aXN0ICphbmNlc3RvcnMsCiAJCQkJCQkJICBFeHBsYWluU3RhdGUgKmVzKTsKIHN0YXRpYyB2b2lk IHNob3dfaGFzaGFnZ19pbmZvKEFnZ1N0YXRlICphZ2dzdGF0ZSwgRXhwbGFpblN0YXRlICplcyk7 Ci1zdGF0aWMgdm9pZCBzaG93X2luZGV4c2VhcmNoZXNfaW5mbyhQbGFuU3RhdGUgKnBsYW5zdGF0 ZSwgRXhwbGFpblN0YXRlICplcyk7CitzdGF0aWMgdm9pZCBzaG93X2luZGV4c2Nhbl9pbmZvKFBs YW5TdGF0ZSAqcGxhbnN0YXRlLCBFeHBsYWluU3RhdGUgKmVzKTsKIHN0YXRpYyB2b2lkIHNob3df dGlkYml0bWFwX2luZm8oQml0bWFwSGVhcFNjYW5TdGF0ZSAqcGxhbnN0YXRlLAogCQkJCQkJCQlF eHBsYWluU3RhdGUgKmVzKTsKIHN0YXRpYyB2b2lkIHNob3dfaW5zdHJ1bWVudGF0aW9uX2NvdW50 KGNvbnN0IGNoYXIgKnFsYWJlbCwgaW50IHdoaWNoLApAQCAtMTk3Miw3ICsxOTcyLDcgQEAgRXhw bGFpbk5vZGUoUGxhblN0YXRlICpwbGFuc3RhdGUsIExpc3QgKmFuY2VzdG9ycywKIAkJCWlmIChw bGFuLT5xdWFsKQogCQkJCXNob3dfaW5zdHJ1bWVudGF0aW9uX2NvdW50KCJSb3dzIFJlbW92ZWQg YnkgRmlsdGVyIiwgMSwKIAkJCQkJCQkJCQkgICBwbGFuc3RhdGUsIGVzKTsKLQkJCXNob3dfaW5k ZXhzZWFyY2hlc19pbmZvKHBsYW5zdGF0ZSwgZXMpOworCQkJc2hvd19pbmRleHNjYW5faW5mbyhw bGFuc3RhdGUsIGVzKTsKIAkJCWJyZWFrOwogCQljYXNlIFRfSW5kZXhPbmx5U2NhbjoKIAkJCXNo b3dfc2Nhbl9xdWFsKCgoSW5kZXhPbmx5U2NhbiAqKSBwbGFuKS0+aW5kZXhxdWFsLApAQCAtMTk4 NiwxNSArMTk4NiwxMiBAQCBFeHBsYWluTm9kZShQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgTGlzdCAq YW5jZXN0b3JzLAogCQkJaWYgKHBsYW4tPnF1YWwpCiAJCQkJc2hvd19pbnN0cnVtZW50YXRpb25f Y291bnQoIlJvd3MgUmVtb3ZlZCBieSBGaWx0ZXIiLCAxLAogCQkJCQkJCQkJCSAgIHBsYW5zdGF0 ZSwgZXMpOwotCQkJaWYgKGVzLT5hbmFseXplKQotCQkJCUV4cGxhaW5Qcm9wZXJ0eUZsb2F0KCJI ZWFwIEZldGNoZXMiLCBOVUxMLAotCQkJCQkJCQkJIHBsYW5zdGF0ZS0+aW5zdHJ1bWVudC0+bnR1 cGxlczIsIDAsIGVzKTsKLQkJCXNob3dfaW5kZXhzZWFyY2hlc19pbmZvKHBsYW5zdGF0ZSwgZXMp OworCQkJc2hvd19pbmRleHNjYW5faW5mbyhwbGFuc3RhdGUsIGVzKTsKIAkJCWJyZWFrOwogCQlj YXNlIFRfQml0bWFwSW5kZXhTY2FuOgogCQkJc2hvd19zY2FuX3F1YWwoKChCaXRtYXBJbmRleFNj YW4gKikgcGxhbiktPmluZGV4cXVhbG9yaWcsCiAJCQkJCQkgICAiSW5kZXggQ29uZCIsIHBsYW5z dGF0ZSwgYW5jZXN0b3JzLCBlcyk7Ci0JCQlzaG93X2luZGV4c2VhcmNoZXNfaW5mbyhwbGFuc3Rh dGUsIGVzKTsKKwkJCXNob3dfaW5kZXhzY2FuX2luZm8ocGxhbnN0YXRlLCBlcyk7CiAJCQlicmVh azsKIAkJY2FzZSBUX0JpdG1hcEhlYXBTY2FuOgogCQkJc2hvd19zY2FuX3F1YWwoKChCaXRtYXBI ZWFwU2NhbiAqKSBwbGFuKS0+Yml0bWFwcXVhbG9yaWcsCkBAIC0zODU4LDE1ICszODU1LDE2IEBA IHNob3dfaGFzaGFnZ19pbmZvKEFnZ1N0YXRlICphZ2dzdGF0ZSwgRXhwbGFpblN0YXRlICplcykK IH0KIAogLyoKLSAqIFNob3cgdGhlIHRvdGFsIG51bWJlciBvZiBpbmRleCBzZWFyY2hlcyBmb3Ig YQorICogU2hvdyBpbmRleCBzY2FuIHJlbGF0ZWQgZXhlY3V0b3IgaW5zdHJ1bWVudGF0aW9uIGZv ciBhCiAgKiBJbmRleFNjYW4vSW5kZXhPbmx5U2Nhbi9CaXRtYXBJbmRleFNjYW4gbm9kZQogICov CiBzdGF0aWMgdm9pZAotc2hvd19pbmRleHNlYXJjaGVzX2luZm8oUGxhblN0YXRlICpwbGFuc3Rh dGUsIEV4cGxhaW5TdGF0ZSAqZXMpCitzaG93X2luZGV4c2Nhbl9pbmZvKFBsYW5TdGF0ZSAqcGxh bnN0YXRlLCBFeHBsYWluU3RhdGUgKmVzKQogewogCVBsYW4JICAgKnBsYW4gPSBwbGFuc3RhdGUt PnBsYW47CiAJU2hhcmVkSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uICpTaGFyZWRJbmZvID0gTlVM TDsKLQl1aW50NjQJCW5zZWFyY2hlcyA9IDA7CisJdWludDY0CQluc2VhcmNoZXMgPSAwLAorCQkJ CW5oZWFwZmV0Y2hlcyA9IDA7CiAKIAlpZiAoIWVzLT5hbmFseXplKQogCQlyZXR1cm47CkBAIC0z ODg3LDYgKzM4ODUsNyBAQCBzaG93X2luZGV4c2VhcmNoZXNfaW5mbyhQbGFuU3RhdGUgKnBsYW5z dGF0ZSwgRXhwbGFpblN0YXRlICplcykKIAkJCQlJbmRleE9ubHlTY2FuU3RhdGUgKmluZGV4c3Rh dGUgPSAoKEluZGV4T25seVNjYW5TdGF0ZSAqKSBwbGFuc3RhdGUpOwogCiAJCQkJbnNlYXJjaGVz ID0gaW5kZXhzdGF0ZS0+aW9zc19JbnN0cnVtZW50Lm5zZWFyY2hlczsKKwkJCQluaGVhcGZldGNo ZXMgPSBpbmRleHN0YXRlLT5pb3NzX0luc3RydW1lbnQubmhlYXBmZXRjaGVzOwogCQkJCVNoYXJl ZEluZm8gPSBpbmRleHN0YXRlLT5pb3NzX1NoYXJlZEluZm87CiAJCQkJYnJlYWs7CiAJCQl9CkBA IC0zOTEwLDkgKzM5MDksMTMgQEAgc2hvd19pbmRleHNlYXJjaGVzX2luZm8oUGxhblN0YXRlICpw bGFuc3RhdGUsIEV4cGxhaW5TdGF0ZSAqZXMpCiAJCQlJbmRleFNjYW5JbnN0cnVtZW50YXRpb24g KndpbnN0cnVtZW50ID0gJlNoYXJlZEluZm8tPndpbnN0cnVtZW50W2ldOwogCiAJCQluc2VhcmNo ZXMgKz0gd2luc3RydW1lbnQtPm5zZWFyY2hlczsKKwkJCW5oZWFwZmV0Y2hlcyArPSB3aW5zdHJ1 bWVudC0+bmhlYXBmZXRjaGVzOwogCQl9CiAJfQogCisJaWYgKG5vZGVUYWcocGxhbikgPT0gVF9J bmRleE9ubHlTY2FuKQorCQlFeHBsYWluUHJvcGVydHlVSW50ZWdlcigiSGVhcCBGZXRjaGVzIiwg TlVMTCwgbmhlYXBmZXRjaGVzLCBlcyk7CisKIAlFeHBsYWluUHJvcGVydHlVSW50ZWdlcigiSW5k ZXggU2VhcmNoZXMiLCBOVUxMLCBuc2VhcmNoZXMsIGVzKTsKIH0KIApkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvY29tbWFuZHMvaW5kZXhjbWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9pbmRl eGNtZHMuYwppbmRleCA2MzU2NzljYzEuLjU0YzI0MDNkYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvY29tbWFuZHMvaW5kZXhjbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvaW5kZXhj bWRzLmMKQEAgLTg4NCw3ICs4ODQsNyBAQCBEZWZpbmVJbmRleChQYXJzZVN0YXRlICpwc3RhdGUs CiAJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAogCQkJCSBlcnJt c2coImFjY2VzcyBtZXRob2QgXCIlc1wiIGRvZXMgbm90IHN1cHBvcnQgbXVsdGljb2x1bW4gaW5k ZXhlcyIsCiAJCQkJCQlhY2Nlc3NNZXRob2ROYW1lKSkpOwotCWlmIChleGNsdXNpb24gJiYgYW1S b3V0aW5lLT5hbWdldHR1cGxlID09IE5VTEwpCisJaWYgKGV4Y2x1c2lvbiAmJiBhbVJvdXRpbmUt PmFtZ2V0dHVwbGUgPT0gTlVMTCAmJiBhbVJvdXRpbmUtPmFtZ2V0YmF0Y2ggPT0gTlVMTCkKIAkJ ZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRF RCksCiAJCQkJIGVycm1zZygiYWNjZXNzIG1ldGhvZCBcIiVzXCIgZG9lcyBub3Qgc3VwcG9ydCBl eGNsdXNpb24gY29uc3RyYWludHMiLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv ZXhlY0FtaS5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0FtaS5jCmluZGV4IDkwYTY4YzBk MS4uMGRmYjAxMzM3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjQW1pLmMK KysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0FtaS5jCkBAIC00MjgsNyArNDI4LDcgQEAg RXhlY1N1cHBvcnRzTWFya1Jlc3RvcmUoUGF0aCAqcGF0aG5vZGUpCiAJCWNhc2UgVF9JbmRleE9u bHlTY2FuOgogCiAJCQkvKgotCQkJICogTm90IGFsbCBpbmRleCB0eXBlcyBzdXBwb3J0IG1hcmsv cmVzdG9yZS4KKwkJCSAqIE5vdCBhbGwgaW5kZXggdHlwZXMgc3VwcG9ydCByZXN0b3JpbmcgYSBt YXJrCiAJCQkgKi8KIAkJCXJldHVybiBjYXN0Tm9kZShJbmRleFBhdGgsIHBhdGhub2RlKS0+aW5k ZXhpbmZvLT5hbWNhbm1hcmtwb3M7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9y L2V4ZWNJbmRleGluZy5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMKaW5k ZXggNmFlMGY5NTk1Li4zMDQxZDVjNzIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9y L2V4ZWNJbmRleGluZy5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5j CkBAIC04MTYsMTAgKzgxNiwxMiBAQCBjaGVja19leGNsdXNpb25fb3JfdW5pcXVlX2NvbnN0cmFp bnQoUmVsYXRpb24gaGVhcCwgUmVsYXRpb24gaW5kZXgsCiByZXRyeToKIAljb25mbGljdCA9IGZh bHNlOwogCWZvdW5kX3NlbGYgPSBmYWxzZTsKLQlpbmRleF9zY2FuID0gaW5kZXhfYmVnaW5zY2Fu KGhlYXAsIGluZGV4LCAmRGlydHlTbmFwc2hvdCwgTlVMTCwgaW5kbmtleWF0dHMsIDApOworCWlu ZGV4X3NjYW4gPSBpbmRleF9iZWdpbnNjYW4oaGVhcCwgaW5kZXgsIGZhbHNlLCAmRGlydHlTbmFw c2hvdCwgTlVMTCwKKwkJCQkJCQkJIGluZG5rZXlhdHRzLCAwKTsKIAlpbmRleF9yZXNjYW4oaW5k ZXhfc2Nhbiwgc2NhbmtleXMsIGluZG5rZXlhdHRzLCBOVUxMLCAwKTsKIAotCXdoaWxlIChpbmRl eF9nZXRuZXh0X3Nsb3QoaW5kZXhfc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIGV4aXN0aW5n X3Nsb3QpKQorCXdoaWxlICh0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3QoaW5kZXhfc2NhbiwgRm9y d2FyZFNjYW5EaXJlY3Rpb24sCisJCQkJCQkJCQlleGlzdGluZ19zbG90KSkKIAl7CiAJCVRyYW5z YWN0aW9uSWQgeHdhaXQ7CiAJCVhMVFdfT3BlcglyZWFzb25fd2FpdDsKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNSZXBsaWNhdGlvbi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0 b3IvZXhlY1JlcGxpY2F0aW9uLmMKaW5kZXggNzQzYjFlZTJiLi5jNTBhOTdlNTYgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNSZXBsaWNhdGlvbi5jCisrKyBiL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL2V4ZWNSZXBsaWNhdGlvbi5jCkBAIC0yMDUsNyArMjA1LDcgQEAgUmVsYXRp b25GaW5kUmVwbFR1cGxlQnlJbmRleChSZWxhdGlvbiByZWwsIE9pZCBpZHhvaWQsCiAJc2tleV9h dHRvZmYgPSBidWlsZF9yZXBsaW5kZXhfc2Nhbl9rZXkoc2tleSwgcmVsLCBpZHhyZWwsIHNlYXJj aHNsb3QpOwogCiAJLyogU3RhcnQgYW4gaW5kZXggc2Nhbi4gKi8KLQlzY2FuID0gaW5kZXhfYmVn aW5zY2FuKHJlbCwgaWR4cmVsLCAmc25hcCwgTlVMTCwgc2tleV9hdHRvZmYsIDApOworCXNjYW4g PSBpbmRleF9iZWdpbnNjYW4ocmVsLCBpZHhyZWwsIGZhbHNlLCAmc25hcCwgTlVMTCwgc2tleV9h dHRvZmYsIDApOwogCiByZXRyeToKIAlmb3VuZCA9IGZhbHNlOwpAQCAtMjEzLDcgKzIxMyw3IEBA IHJldHJ5OgogCWluZGV4X3Jlc2NhbihzY2FuLCBza2V5LCBza2V5X2F0dG9mZiwgTlVMTCwgMCk7 CiAKIAkvKiBUcnkgdG8gZmluZCB0aGUgdHVwbGUgKi8KLQl3aGlsZSAoaW5kZXhfZ2V0bmV4dF9z bG90KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBvdXRzbG90KSkKKwl3aGlsZSAodGFibGVf aW5kZXhfZ2V0bmV4dF9zbG90KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBvdXRzbG90KSkK IAl7CiAJCS8qCiAJCSAqIEF2b2lkIGV4cGVuc2l2ZSBlcXVhbGl0eSBjaGVjayBpZiB0aGUgaW5k ZXggaXMgcHJpbWFyeSBrZXkgb3IKQEAgLTY2NiwxMiArNjY2LDEyIEBAIFJlbGF0aW9uRmluZERl bGV0ZWRUdXBsZUluZm9CeUluZGV4KFJlbGF0aW9uIHJlbCwgT2lkIGlkeG9pZCwKIAkgKiBub3Qg eWV0IGNvbW1pdHRlZCBvciB0aG9zZSBqdXN0IGNvbW1pdHRlZCBwcmlvciB0byB0aGUgc2NhbiBh cmUKIAkgKiBleGNsdWRlZCBpbiB1cGRhdGVfbW9zdF9yZWNlbnRfZGVsZXRpb25faW5mbygpLgog CSAqLwotCXNjYW4gPSBpbmRleF9iZWdpbnNjYW4ocmVsLCBpZHhyZWwsIFNuYXBzaG90QW55LCBO VUxMLCBza2V5X2F0dG9mZiwgMCk7CisJc2NhbiA9IGluZGV4X2JlZ2luc2NhbihyZWwsIGlkeHJl bCwgZmFsc2UsIFNuYXBzaG90QW55LCBOVUxMLCBza2V5X2F0dG9mZiwgMCk7CiAKIAlpbmRleF9y ZXNjYW4oc2Nhbiwgc2tleSwgc2tleV9hdHRvZmYsIE5VTEwsIDApOwogCiAJLyogVHJ5IHRvIGZp bmQgdGhlIHR1cGxlICovCi0Jd2hpbGUgKGluZGV4X2dldG5leHRfc2xvdChzY2FuLCBGb3J3YXJk U2NhbkRpcmVjdGlvbiwgc2NhbnNsb3QpKQorCXdoaWxlICh0YWJsZV9pbmRleF9nZXRuZXh0X3Ns b3Qoc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIHNjYW5zbG90KSkKIAl7CiAJCS8qCiAJCSAq IEF2b2lkIGV4cGVuc2l2ZSBlcXVhbGl0eSBjaGVjayBpZiB0aGUgaW5kZXggaXMgcHJpbWFyeSBr ZXkgb3IKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVCaXRtYXBJbmRleHNj YW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVCaXRtYXBJbmRleHNjYW4uYwppbmRleCAw NThhNTllZjUuLjI1ODBhMDEzOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9k ZUJpdG1hcEluZGV4c2Nhbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVCaXRtYXBJ bmRleHNjYW4uYwpAQCAtMjAyLDYgKzIwMiw3IEBAIEV4ZWNFbmRCaXRtYXBJbmRleFNjYW4oQml0 bWFwSW5kZXhTY2FuU3RhdGUgKm5vZGUpCiAJCSAqIHdoaWNoIHdpbGwgaGF2ZSBhIG5ldyBCaXRt YXBJbmRleFNjYW5TdGF0ZSBhbmQgemVyb2VkIHN0YXRzLgogCQkgKi8KIAkJd2luc3RydW1lbnQt Pm5zZWFyY2hlcyArPSBub2RlLT5iaXNzX0luc3RydW1lbnQubnNlYXJjaGVzOworCQlBc3NlcnQo bm9kZS0+Ymlzc19JbnN0cnVtZW50Lm5oZWFwZmV0Y2hlcyA9PSAwKTsKIAl9CiAKIAkvKgpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYyBiL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleG9ubHlzY2FuLmMKaW5kZXggYzJkMDkzNzQ1Li5mZjNl OGYzMDIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleG9ubHlzY2Fu LmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYwpAQCAtMzQs MTQgKzM0LDEyIEBACiAjaW5jbHVkZSAiYWNjZXNzL3JlbHNjYW4uaCIKICNpbmNsdWRlICJhY2Nl c3MvdGFibGVhbS5oIgogI2luY2x1ZGUgImFjY2Vzcy90dXBkZXNjLmgiCi0jaW5jbHVkZSAiYWNj ZXNzL3Zpc2liaWxpdHltYXAuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3R5cGUuaCIKICNpbmNs dWRlICJleGVjdXRvci9leGVjdXRvci5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL25vZGVJbmRleG9u bHlzY2FuLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5oIgogI2luY2x1ZGUg Im1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmbWdyLmgiCi0jaW5jbHVkZSAic3Rv cmFnZS9wcmVkaWNhdGUuaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUg InV0aWxzL3JlbC5oIgogCkBAIC02NSw3ICs2Myw2IEBAIEluZGV4T25seU5leHQoSW5kZXhPbmx5 U2NhblN0YXRlICpub2RlKQogCVNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uOwogCUluZGV4U2NhbkRl c2Mgc2NhbmRlc2M7CiAJVHVwbGVUYWJsZVNsb3QgKnNsb3Q7Ci0JSXRlbVBvaW50ZXIgdGlkOwog CiAJLyoKIAkgKiBleHRyYWN0IG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiBmcm9tIGluZGV4IHNjYW4g bm9kZQpAQCAtOTAsMTggKzg3LDE0IEBAIEluZGV4T25seU5leHQoSW5kZXhPbmx5U2NhblN0YXRl ICpub2RlKQogCQkgKiBwYXJhbGxlbC4KIAkJICovCiAJCXNjYW5kZXNjID0gaW5kZXhfYmVnaW5z Y2FuKG5vZGUtPnNzLnNzX2N1cnJlbnRSZWxhdGlvbiwKLQkJCQkJCQkJICAgbm9kZS0+aW9zc19S ZWxhdGlvbkRlc2MsCisJCQkJCQkJCSAgIG5vZGUtPmlvc3NfUmVsYXRpb25EZXNjLCB0cnVlLAog CQkJCQkJCQkgICBlc3RhdGUtPmVzX3NuYXBzaG90LAogCQkJCQkJCQkgICAmbm9kZS0+aW9zc19J bnN0cnVtZW50LAogCQkJCQkJCQkgICBub2RlLT5pb3NzX051bVNjYW5LZXlzLAogCQkJCQkJCQkg ICBub2RlLT5pb3NzX051bU9yZGVyQnlLZXlzKTsKIAogCQlub2RlLT5pb3NzX1NjYW5EZXNjID0g c2NhbmRlc2M7Ci0KLQotCQkvKiBTZXQgaXQgdXAgZm9yIGluZGV4LW9ubHkgc2NhbiAqLwotCQlu b2RlLT5pb3NzX1NjYW5EZXNjLT54c193YW50X2l0dXAgPSB0cnVlOwotCQlub2RlLT5pb3NzX1ZN QnVmZmVyID0gSW52YWxpZEJ1ZmZlcjsKKwkJQXNzZXJ0KG5vZGUtPmlvc3NfU2NhbkRlc2MtPnhz X3dhbnRfaXR1cCk7CiAKIAkJLyoKIAkJICogSWYgbm8gcnVuLXRpbWUga2V5cyB0byBjYWxjdWxh dGUgb3IgdGhleSBhcmUgcmVhZHksIGdvIGFoZWFkIGFuZApAQCAtMTE4LDc4ICsxMTEsMTAgQEAg SW5kZXhPbmx5TmV4dChJbmRleE9ubHlTY2FuU3RhdGUgKm5vZGUpCiAJLyoKIAkgKiBPSywgbm93 IHRoYXQgd2UgaGF2ZSB3aGF0IHdlIG5lZWQsIGZldGNoIHRoZSBuZXh0IHR1cGxlLgogCSAqLwot CXdoaWxlICgodGlkID0gaW5kZXhfZ2V0bmV4dF90aWQoc2NhbmRlc2MsIGRpcmVjdGlvbikpICE9 IE5VTEwpCisJd2hpbGUgKHRhYmxlX2luZGV4X2dldG5leHRfc2xvdChzY2FuZGVzYywgZGlyZWN0 aW9uLCBub2RlLT5pb3NzX1RhYmxlU2xvdCkpCiAJewotCQlib29sCQl0dXBsZV9mcm9tX2hlYXAg PSBmYWxzZTsKLQogCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwogCi0JCS8qCi0JCSAqIFdlIGNh biBza2lwIHRoZSBoZWFwIGZldGNoIGlmIHRoZSBUSUQgcmVmZXJlbmNlcyBhIGhlYXAgcGFnZSBv bgotCQkgKiB3aGljaCBhbGwgdHVwbGVzIGFyZSBrbm93biB2aXNpYmxlIHRvIGV2ZXJ5Ym9keS4g IEluIGFueSBjYXNlLAotCQkgKiB3ZSdsbCB1c2UgdGhlIGluZGV4IHR1cGxlIG5vdCB0aGUgaGVh cCB0dXBsZSBhcyB0aGUgZGF0YSBzb3VyY2UuCi0JCSAqCi0JCSAqIE5vdGUgb24gTWVtb3J5IE9y ZGVyaW5nIEVmZmVjdHM6IHZpc2liaWxpdHltYXBfZ2V0X3N0YXR1cyBkb2VzIG5vdAotCQkgKiBs b2NrIHRoZSB2aXNpYmlsaXR5IG1hcCBidWZmZXIsIGFuZCB0aGVyZWZvcmUgdGhlIHJlc3VsdCB3 ZSByZWFkCi0JCSAqIGhlcmUgY291bGQgYmUgc2xpZ2h0bHkgc3RhbGUuICBIb3dldmVyLCBpdCBj YW4ndCBiZSBzdGFsZSBlbm91Z2ggdG8KLQkJICogbWF0dGVyLgotCQkgKgotCQkgKiBXZSBuZWVk IHRvIGRldGVjdCBjbGVhcmluZyBhIFZNIGJpdCBkdWUgdG8gYW4gaW5zZXJ0IHJpZ2h0IGF3YXks Ci0JCSAqIGJlY2F1c2UgdGhlIHR1cGxlIGlzIHByZXNlbnQgaW4gdGhlIGluZGV4IHBhZ2UgYnV0 IG5vdCB2aXNpYmxlLiBUaGUKLQkJICogcmVhZGluZyBvZiB0aGUgVElEIGJ5IHRoaXMgc2NhbiAo dXNpbmcgYSBzaGFyZWQgbG9jayBvbiB0aGUgaW5kZXgKLQkJICogYnVmZmVyKSBpcyBzZXJpYWxp emVkIHdpdGggdGhlIGluc2VydCBvZiB0aGUgVElEIGludG8gdGhlIGluZGV4Ci0JCSAqICh1c2lu ZyBhbiBleGNsdXNpdmUgbG9jayBvbiB0aGUgaW5kZXggYnVmZmVyKS4gQmVjYXVzZSB0aGUgVk0g Yml0Ci0JCSAqIGlzIGNsZWFyZWQgYmVmb3JlIHVwZGF0aW5nIHRoZSBpbmRleCwgYW5kIGxvY2tp bmcvdW5sb2NraW5nIG9mIHRoZQotCQkgKiBpbmRleCBwYWdlIGFjdHMgYXMgYSBmdWxsIG1lbW9y eSBiYXJyaWVyLCB3ZSBhcmUgc3VyZSB0byBzZWUgdGhlCi0JCSAqIGNsZWFyZWQgYml0IGlmIHdl IHNlZSBhIHJlY2VudGx5LWluc2VydGVkIFRJRC4KLQkJICoKLQkJICogRGVsZXRlcyBkbyBub3Qg dXBkYXRlIHRoZSBpbmRleCBwYWdlIChvbmx5IFZBQ1VVTSB3aWxsIGNsZWFyIG91dAotCQkgKiB0 aGUgVElEKSwgc28gdGhlIGNsZWFyaW5nIG9mIHRoZSBWTSBiaXQgYnkgYSBkZWxldGUgaXMgbm90 Ci0JCSAqIHNlcmlhbGl6ZWQgd2l0aCB0aGlzIHRlc3QgYmVsb3csIGFuZCB3ZSBtYXkgc2VlIGEg dmFsdWUgdGhhdCBpcwotCQkgKiBzaWduaWZpY2FudGx5IHN0YWxlLiBIb3dldmVyLCB3ZSBkb24n dCBjYXJlIGFib3V0IHRoZSBkZWxldGUgcmlnaHQKLQkJICogYXdheSwgYmVjYXVzZSB0aGUgdHVw bGUgaXMgc3RpbGwgdmlzaWJsZSB1bnRpbCB0aGUgZGVsZXRpbmcKLQkJICogdHJhbnNhY3Rpb24g Y29tbWl0cyBvciB0aGUgc3RhdGVtZW50IGVuZHMgKGlmIGl0J3Mgb3VyCi0JCSAqIHRyYW5zYWN0 aW9uKS4gSW4gZWl0aGVyIGNhc2UsIHRoZSBsb2NrIG9uIHRoZSBWTSBidWZmZXIgd2lsbCBoYXZl Ci0JCSAqIGJlZW4gcmVsZWFzZWQgKGFjdGluZyBhcyBhIHdyaXRlIGJhcnJpZXIpIGFmdGVyIGNs ZWFyaW5nIHRoZSBiaXQuCi0JCSAqIEFuZCBmb3IgdXMgdG8gaGF2ZSBhIHNuYXBzaG90IHRoYXQg aW5jbHVkZXMgdGhlIGRlbGV0aW5nCi0JCSAqIHRyYW5zYWN0aW9uIChtYWtpbmcgdGhlIHR1cGxl IGludmlzaWJsZSksIHdlIG11c3QgaGF2ZSBhY3F1aXJlZAotCQkgKiBQcm9jQXJyYXlMb2NrIGFm dGVyIHRoYXQgdGltZSwgYWN0aW5nIGFzIGEgcmVhZCBiYXJyaWVyLgotCQkgKgotCQkgKiBJdCdz IHdvcnRoIGdvaW5nIHRocm91Z2ggdGhpcyBjb21wbGV4aXR5IHRvIGF2b2lkIG5lZWRpbmcgdG8g bG9jawotCQkgKiB0aGUgVk0gYnVmZmVyLCB3aGljaCBjb3VsZCBjYXVzZSBzaWduaWZpY2FudCBj b250ZW50aW9uLgotCQkgKi8KLQkJaWYgKCFWTV9BTExfVklTSUJMRShzY2FuZGVzYy0+aGVhcFJl bGF0aW9uLAotCQkJCQkJCUl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKSwKLQkJCQkJCQkm bm9kZS0+aW9zc19WTUJ1ZmZlcikpCi0JCXsKLQkJCS8qCi0JCQkgKiBSYXRzLCB3ZSBoYXZlIHRv IHZpc2l0IHRoZSBoZWFwIHRvIGNoZWNrIHZpc2liaWxpdHkuCi0JCQkgKi8KLQkJCUluc3RyQ291 bnRUdXBsZXMyKG5vZGUsIDEpOwotCQkJaWYgKCFpbmRleF9mZXRjaF9oZWFwKHNjYW5kZXNjLCBu b2RlLT5pb3NzX1RhYmxlU2xvdCkpCi0JCQkJY29udGludWU7CQkvKiBubyB2aXNpYmxlIHR1cGxl LCB0cnkgbmV4dCBpbmRleCBlbnRyeSAqLwotCi0JCQlFeGVjQ2xlYXJUdXBsZShub2RlLT5pb3Nz X1RhYmxlU2xvdCk7Ci0KLQkJCS8qCi0JCQkgKiBPbmx5IE1WQ0Mgc25hcHNob3RzIGFyZSBzdXBw b3J0ZWQgaGVyZSwgc28gdGhlcmUgc2hvdWxkIGJlIG5vCi0JCQkgKiBuZWVkIHRvIGtlZXAgZm9s bG93aW5nIHRoZSBIT1QgY2hhaW4gb25jZSBhIHZpc2libGUgZW50cnkgaGFzCi0JCQkgKiBiZWVu IGZvdW5kLiAgSWYgd2UgZGlkIHdhbnQgdG8gYWxsb3cgdGhhdCwgd2UnZCBuZWVkIHRvIGtlZXAK LQkJCSAqIG1vcmUgc3RhdGUgdG8gcmVtZW1iZXIgbm90IHRvIGNhbGwgaW5kZXhfZ2V0bmV4dF90 aWQgbmV4dCB0aW1lLgotCQkJICovCi0JCQlpZiAoc2NhbmRlc2MtPnhzX2hlYXBfY29udGludWUp Ci0JCQkJZWxvZyhFUlJPUiwgIm5vbi1NVkNDIHNuYXBzaG90cyBhcmUgbm90IHN1cHBvcnRlZCBp biBpbmRleC1vbmx5IHNjYW5zIik7Ci0KLQkJCS8qCi0JCQkgKiBOb3RlOiBhdCB0aGlzIHBvaW50 IHdlIGFyZSBob2xkaW5nIGEgcGluIG9uIHRoZSBoZWFwIHBhZ2UsIGFzCi0JCQkgKiByZWNvcmRl ZCBpbiBzY2FuZGVzYy0+eHNfY2J1Zi4gIFdlIGNvdWxkIHJlbGVhc2UgdGhhdCBwaW4gbm93LAot CQkJICogYnV0IGl0J3Mgbm90IGNsZWFyIHdoZXRoZXIgaXQncyBhIHdpbiB0byBkbyBzby4gIFRo ZSBuZXh0IGluZGV4Ci0JCQkgKiBlbnRyeSBtaWdodCByZXF1aXJlIGEgdmlzaXQgdG8gdGhlIHNh bWUgaGVhcCBwYWdlLgotCQkJICovCi0KLQkJCXR1cGxlX2Zyb21faGVhcCA9IHRydWU7Ci0JCX0K LQogCQkvKgogCQkgKiBGaWxsIHRoZSBzY2FuIHR1cGxlIHNsb3Qgd2l0aCBkYXRhIGZyb20gdGhl IGluZGV4LiAgVGhpcyBtaWdodCBiZQogCQkgKiBwcm92aWRlZCBpbiBlaXRoZXIgSGVhcFR1cGxl IG9yIEluZGV4VHVwbGUgZm9ybWF0LiAgQ29uY2VpdmFibHkgYW4KQEAgLTIzOCwxNiArMTYzLDYg QEAgSW5kZXhPbmx5TmV4dChJbmRleE9ubHlTY2FuU3RhdGUgKm5vZGUpCiAJCQllcmVwb3J0KEVS Uk9SLAogCQkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCiAJCQkJ CSBlcnJtc2coImxvc3N5IGRpc3RhbmNlIGZ1bmN0aW9ucyBhcmUgbm90IHN1cHBvcnRlZCBpbiBp bmRleC1vbmx5IHNjYW5zIikpKTsKLQotCQkvKgotCQkgKiBJZiB3ZSBkaWRuJ3QgYWNjZXNzIHRo ZSBoZWFwLCB0aGVuIHdlJ2xsIG5lZWQgdG8gdGFrZSBhIHByZWRpY2F0ZQotCQkgKiBsb2NrIGV4 cGxpY2l0bHksIGFzIGlmIHdlIGhhZC4gIEZvciBub3cgd2UgZG8gdGhhdCBhdCBwYWdlIGxldmVs LgotCQkgKi8KLQkJaWYgKCF0dXBsZV9mcm9tX2hlYXApCi0JCQlQcmVkaWNhdGVMb2NrUGFnZShz Y2FuZGVzYy0+aGVhcFJlbGF0aW9uLAotCQkJCQkJCSAgSXRlbVBvaW50ZXJHZXRCbG9ja051bWJl cih0aWQpLAotCQkJCQkJCSAgZXN0YXRlLT5lc19zbmFwc2hvdCk7Ci0KIAkJcmV0dXJuIHNsb3Q7 CiAJfQogCkBAIC00MDcsMTMgKzMyMiw2IEBAIEV4ZWNFbmRJbmRleE9ubHlTY2FuKEluZGV4T25s eVNjYW5TdGF0ZSAqbm9kZSkKIAlpbmRleFJlbGF0aW9uRGVzYyA9IG5vZGUtPmlvc3NfUmVsYXRp b25EZXNjOwogCWluZGV4U2NhbkRlc2MgPSBub2RlLT5pb3NzX1NjYW5EZXNjOwogCi0JLyogUmVs ZWFzZSBWTSBidWZmZXIgcGluLCBpZiBhbnkuICovCi0JaWYgKG5vZGUtPmlvc3NfVk1CdWZmZXIg IT0gSW52YWxpZEJ1ZmZlcikKLQl7Ci0JCVJlbGVhc2VCdWZmZXIobm9kZS0+aW9zc19WTUJ1ZmZl cik7Ci0JCW5vZGUtPmlvc3NfVk1CdWZmZXIgPSBJbnZhbGlkQnVmZmVyOwotCX0KLQogCS8qCiAJ ICogV2hlbiBlbmRpbmcgYSBwYXJhbGxlbCB3b3JrZXIsIGNvcHkgdGhlIHN0YXRpc3RpY3MgZ2F0 aGVyZWQgYnkgdGhlCiAJICogd29ya2VyIGJhY2sgaW50byBzaGFyZWQgbWVtb3J5IHNvIHRoYXQg aXQgY2FuIGJlIHBpY2tlZCB1cCBieSB0aGUgbWFpbgpAQCAtNDMzLDYgKzM0MSw3IEBAIEV4ZWNF bmRJbmRleE9ubHlTY2FuKEluZGV4T25seVNjYW5TdGF0ZSAqbm9kZSkKIAkJICogd2hpY2ggd2ls bCBoYXZlIGEgbmV3IEluZGV4T25seVNjYW5TdGF0ZSBhbmQgemVyb2VkIHN0YXRzLgogCQkgKi8K IAkJd2luc3RydW1lbnQtPm5zZWFyY2hlcyArPSBub2RlLT5pb3NzX0luc3RydW1lbnQubnNlYXJj aGVzOworCQl3aW5zdHJ1bWVudC0+bmhlYXBmZXRjaGVzICs9IG5vZGUtPmlvc3NfSW5zdHJ1bWVu dC5uaGVhcGZldGNoZXM7CiAJfQogCiAJLyoKQEAgLTc4NCwxMyArNjkzLDEyIEBAIEV4ZWNJbmRl eE9ubHlTY2FuSW5pdGlhbGl6ZURTTShJbmRleE9ubHlTY2FuU3RhdGUgKm5vZGUsCiAKIAlub2Rl LT5pb3NzX1NjYW5EZXNjID0KIAkJaW5kZXhfYmVnaW5zY2FuX3BhcmFsbGVsKG5vZGUtPnNzLnNz X2N1cnJlbnRSZWxhdGlvbiwKLQkJCQkJCQkJIG5vZGUtPmlvc3NfUmVsYXRpb25EZXNjLAorCQkJ CQkJCQkgbm9kZS0+aW9zc19SZWxhdGlvbkRlc2MsIHRydWUsCiAJCQkJCQkJCSAmbm9kZS0+aW9z c19JbnN0cnVtZW50LAogCQkJCQkJCQkgbm9kZS0+aW9zc19OdW1TY2FuS2V5cywKIAkJCQkJCQkJ IG5vZGUtPmlvc3NfTnVtT3JkZXJCeUtleXMsCiAJCQkJCQkJCSBwaXNjYW4pOwotCW5vZGUtPmlv c3NfU2NhbkRlc2MtPnhzX3dhbnRfaXR1cCA9IHRydWU7Ci0Jbm9kZS0+aW9zc19WTUJ1ZmZlciA9 IEludmFsaWRCdWZmZXI7CisJQXNzZXJ0KG5vZGUtPmlvc3NfU2NhbkRlc2MtPnhzX3dhbnRfaXR1 cCk7CiAKIAkvKgogCSAqIElmIG5vIHJ1bi10aW1lIGtleXMgdG8gY2FsY3VsYXRlIG9yIHRoZXkg YXJlIHJlYWR5LCBnbyBhaGVhZCBhbmQgcGFzcwpAQCAtODUwLDEyICs3NTgsMTIgQEAgRXhlY0lu ZGV4T25seVNjYW5Jbml0aWFsaXplV29ya2VyKEluZGV4T25seVNjYW5TdGF0ZSAqbm9kZSwKIAog CW5vZGUtPmlvc3NfU2NhbkRlc2MgPQogCQlpbmRleF9iZWdpbnNjYW5fcGFyYWxsZWwobm9kZS0+ c3Muc3NfY3VycmVudFJlbGF0aW9uLAotCQkJCQkJCQkgbm9kZS0+aW9zc19SZWxhdGlvbkRlc2Ms CisJCQkJCQkJCSBub2RlLT5pb3NzX1JlbGF0aW9uRGVzYywgdHJ1ZSwKIAkJCQkJCQkJICZub2Rl LT5pb3NzX0luc3RydW1lbnQsCiAJCQkJCQkJCSBub2RlLT5pb3NzX051bVNjYW5LZXlzLAogCQkJ CQkJCQkgbm9kZS0+aW9zc19OdW1PcmRlckJ5S2V5cywKIAkJCQkJCQkJIHBpc2Nhbik7Ci0Jbm9k ZS0+aW9zc19TY2FuRGVzYy0+eHNfd2FudF9pdHVwID0gdHJ1ZTsKKwlBc3NlcnQobm9kZS0+aW9z c19TY2FuRGVzYy0+eHNfd2FudF9pdHVwKTsKIAogCS8qCiAJICogSWYgbm8gcnVuLXRpbWUga2V5 cyB0byBjYWxjdWxhdGUgb3IgdGhleSBhcmUgcmVhZHksIGdvIGFoZWFkIGFuZCBwYXNzCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhzY2FuLmMgYi9zcmMvYmFja2Vu ZC9leGVjdXRvci9ub2RlSW5kZXhzY2FuLmMKaW5kZXggYTYxNmFiZmYwLi5hMjVlNDBlMWYgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleHNjYW4uYworKysgYi9zcmMv YmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhzY2FuLmMKQEAgLTEwNyw3ICsxMDcsNyBAQCBJbmRl eE5leHQoSW5kZXhTY2FuU3RhdGUgKm5vZGUpCiAJCSAqIHNlcmlhbGx5IGV4ZWN1dGluZyBhbiBp bmRleCBzY2FuIHRoYXQgd2FzIHBsYW5uZWQgdG8gYmUgcGFyYWxsZWwuCiAJCSAqLwogCQlzY2Fu ZGVzYyA9IGluZGV4X2JlZ2luc2Nhbihub2RlLT5zcy5zc19jdXJyZW50UmVsYXRpb24sCi0JCQkJ CQkJCSAgIG5vZGUtPmlzc19SZWxhdGlvbkRlc2MsCisJCQkJCQkJCSAgIG5vZGUtPmlzc19SZWxh dGlvbkRlc2MsIGZhbHNlLAogCQkJCQkJCQkgICBlc3RhdGUtPmVzX3NuYXBzaG90LAogCQkJCQkJ CQkgICAmbm9kZS0+aXNzX0luc3RydW1lbnQsCiAJCQkJCQkJCSAgIG5vZGUtPmlzc19OdW1TY2Fu S2V5cywKQEAgLTEyOCw3ICsxMjgsNyBAQCBJbmRleE5leHQoSW5kZXhTY2FuU3RhdGUgKm5vZGUp CiAJLyoKIAkgKiBvaywgbm93IHRoYXQgd2UgaGF2ZSB3aGF0IHdlIG5lZWQsIGZldGNoIHRoZSBu ZXh0IHR1cGxlLgogCSAqLwotCXdoaWxlIChpbmRleF9nZXRuZXh0X3Nsb3Qoc2NhbmRlc2MsIGRp cmVjdGlvbiwgc2xvdCkpCisJd2hpbGUgKHRhYmxlX2luZGV4X2dldG5leHRfc2xvdChzY2FuZGVz YywgZGlyZWN0aW9uLCBzbG90KSkKIAl7CiAJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CiAKQEAg LTIwMyw3ICsyMDMsNyBAQCBJbmRleE5leHRXaXRoUmVvcmRlcihJbmRleFNjYW5TdGF0ZSAqbm9k ZSkKIAkJICogc2VyaWFsbHkgZXhlY3V0aW5nIGFuIGluZGV4IHNjYW4gdGhhdCB3YXMgcGxhbm5l ZCB0byBiZSBwYXJhbGxlbC4KIAkJICovCiAJCXNjYW5kZXNjID0gaW5kZXhfYmVnaW5zY2FuKG5v ZGUtPnNzLnNzX2N1cnJlbnRSZWxhdGlvbiwKLQkJCQkJCQkJICAgbm9kZS0+aXNzX1JlbGF0aW9u RGVzYywKKwkJCQkJCQkJICAgbm9kZS0+aXNzX1JlbGF0aW9uRGVzYywgZmFsc2UsCiAJCQkJCQkJ CSAgIGVzdGF0ZS0+ZXNfc25hcHNob3QsCiAJCQkJCQkJCSAgICZub2RlLT5pc3NfSW5zdHJ1bWVu dCwKIAkJCQkJCQkJICAgbm9kZS0+aXNzX051bVNjYW5LZXlzLApAQCAtMjYwLDcgKzI2MCw3IEBA IEluZGV4TmV4dFdpdGhSZW9yZGVyKEluZGV4U2NhblN0YXRlICpub2RlKQogCQkgKiBGZXRjaCBu ZXh0IHR1cGxlIGZyb20gdGhlIGluZGV4LgogCQkgKi8KIG5leHRfaW5kZXh0dXBsZToKLQkJaWYg KCFpbmRleF9nZXRuZXh0X3Nsb3Qoc2NhbmRlc2MsIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBzbG90 KSkKKwkJaWYgKCF0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Qoc2NhbmRlc2MsIEZvcndhcmRTY2Fu RGlyZWN0aW9uLCBzbG90KSkKIAkJewogCQkJLyoKIAkJCSAqIE5vIG1vcmUgdHVwbGVzIGZyb20g dGhlIGluZGV4LiAgQnV0IHdlIHN0aWxsIG5lZWQgdG8gZHJhaW4gYW55CkBAIC04MTIsNiArODEy LDcgQEAgRXhlY0VuZEluZGV4U2NhbihJbmRleFNjYW5TdGF0ZSAqbm9kZSkKIAkJICogd2hpY2gg d2lsbCBoYXZlIGEgbmV3IEluZGV4T25seVNjYW5TdGF0ZSBhbmQgemVyb2VkIHN0YXRzLgogCQkg Ki8KIAkJd2luc3RydW1lbnQtPm5zZWFyY2hlcyArPSBub2RlLT5pc3NfSW5zdHJ1bWVudC5uc2Vh cmNoZXM7CisJCUFzc2VydChub2RlLT5pc3NfSW5zdHJ1bWVudC5uaGVhcGZldGNoZXMgPT0gMCk7 CiAJfQogCiAJLyoKQEAgLTE3MTksNyArMTcyMCw3IEBAIEV4ZWNJbmRleFNjYW5Jbml0aWFsaXpl RFNNKEluZGV4U2NhblN0YXRlICpub2RlLAogCiAJbm9kZS0+aXNzX1NjYW5EZXNjID0KIAkJaW5k ZXhfYmVnaW5zY2FuX3BhcmFsbGVsKG5vZGUtPnNzLnNzX2N1cnJlbnRSZWxhdGlvbiwKLQkJCQkJ CQkJIG5vZGUtPmlzc19SZWxhdGlvbkRlc2MsCisJCQkJCQkJCSBub2RlLT5pc3NfUmVsYXRpb25E ZXNjLCBmYWxzZSwKIAkJCQkJCQkJICZub2RlLT5pc3NfSW5zdHJ1bWVudCwKIAkJCQkJCQkJIG5v ZGUtPmlzc19OdW1TY2FuS2V5cywKIAkJCQkJCQkJIG5vZGUtPmlzc19OdW1PcmRlckJ5S2V5cywK QEAgLTE3ODMsNyArMTc4NCw3IEBAIEV4ZWNJbmRleFNjYW5Jbml0aWFsaXplV29ya2VyKEluZGV4 U2NhblN0YXRlICpub2RlLAogCiAJbm9kZS0+aXNzX1NjYW5EZXNjID0KIAkJaW5kZXhfYmVnaW5z Y2FuX3BhcmFsbGVsKG5vZGUtPnNzLnNzX2N1cnJlbnRSZWxhdGlvbiwKLQkJCQkJCQkJIG5vZGUt Pmlzc19SZWxhdGlvbkRlc2MsCisJCQkJCQkJCSBub2RlLT5pc3NfUmVsYXRpb25EZXNjLCBmYWxz ZSwKIAkJCQkJCQkJICZub2RlLT5pc3NfSW5zdHJ1bWVudCwKIAkJCQkJCQkJIG5vZGUtPmlzc19O dW1TY2FuS2V5cywKIAkJCQkJCQkJIG5vZGUtPmlzc19OdW1PcmRlckJ5S2V5cywKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNZXJnZWpvaW4uYyBiL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL25vZGVNZXJnZWpvaW4uYwppbmRleCBjYmNhZTRjNzAuLjliNDNlZDhiNCAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlam9pbi5jCisrKyBiL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL25vZGVNZXJnZWpvaW4uYwpAQCAtNTQsOCArNTQsOCBAQAogICoJCXRoZSBp bm5lciAiNSdzIi4gVGhpcyByZXF1aXJlcyByZXBvc2l0aW9uaW5nIHRoZSBpbm5lciAiY3Vyc29y IgogICoJCXRvIHBvaW50IGF0IHRoZSBmaXJzdCBpbm5lciAiNSIuIFRoaXMgaXMgZG9uZSBieSAi bWFya2luZyIgdGhlCiAgKgkJZmlyc3QgaW5uZXIgNSBzbyB3ZSBjYW4gcmVzdG9yZSB0aGUgImN1 cnNvciIgdG8gaXQgYmVmb3JlIGpvaW5pbmcKLSAqCQl3aXRoIHRoZSBzZWNvbmQgb3V0ZXIgNS4g VGhlIGFjY2VzcyBtZXRob2QgaW50ZXJmYWNlIHByb3ZpZGVzCi0gKgkJcm91dGluZXMgdG8gbWFy ayBhbmQgcmVzdG9yZSB0byBhIHR1cGxlLgorICoJCXdpdGggdGhlIHNlY29uZCBvdXRlciA1LiBU aGUgaW5kZXhiYXRjaC5jIGludGVyZmFjZSBwcm92aWRlcworICoJCXJvdXRpbmVzIHRvIG1hcmsg YW5kIHJlc3RvcmUgdG8gYSB0dXBsZSBkdXJpbmcgaW5kZXggc2NhbnMuCiAgKgogICoKICAqCQlF c3NlbnRpYWwgb3BlcmF0aW9uIG9mIHRoZSBtZXJnZSBqb2luIGFsZ29yaXRobSBpcyBhcyBmb2xs b3dzOgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvaW5keHBhdGguYyBi L3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2luZHhwYXRoLmMKaW5kZXggNjdkOWRjMzVmLi5k NjFjMGI2ZjMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2luZHhwYXRo LmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvaW5keHBhdGguYwpAQCAtNDMsNyAr NDMsNyBAQAogLyogV2hldGhlciB3ZSBhcmUgbG9va2luZyBmb3IgcGxhaW4gaW5kZXhzY2FuLCBi aXRtYXAgc2Nhbiwgb3IgZWl0aGVyICovCiB0eXBlZGVmIGVudW0KIHsKLQlTVF9JTkRFWFNDQU4s CQkJCS8qIG11c3Qgc3VwcG9ydCBhbWdldHR1cGxlICovCisJU1RfSU5ERVhTQ0FOLAkJCQkvKiBt dXN0IHN1cHBvcnQgYW1nZXR0dXBsZSBvciBhbWdldGJhdGNoICovCiAJU1RfQklUTUFQU0NBTiwJ CQkJLyogbXVzdCBzdXBwb3J0IGFtZ2V0Yml0bWFwICovCiAJU1RfQU5ZU0NBTiwJCQkJCS8qIGVp dGhlciBpcyBva2F5ICovCiB9IFNjYW5UeXBlQ29udHJvbDsKQEAgLTc0Nyw3ICs3NDcsNyBAQCBn ZXRfaW5kZXhfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAl7CiAJ CUluZGV4UGF0aCAgKmlwYXRoID0gKEluZGV4UGF0aCAqKSBsZmlyc3QobGMpOwogCi0JCWlmIChp bmRleC0+YW1oYXNnZXR0dXBsZSkKKwkJaWYgKGluZGV4LT5hbWhhc2dldGJhdGNoKQogCQkJYWRk X3BhdGgocmVsLCAoUGF0aCAqKSBpcGF0aCk7CiAKIAkJaWYgKGluZGV4LT5hbWhhc2dldGJpdG1h cCAmJgpAQCAtODM1LDcgKzgzNSw3IEBAIGJ1aWxkX2luZGV4X3BhdGhzKFBsYW5uZXJJbmZvICpy b290LCBSZWxPcHRJbmZvICpyZWwsCiAJc3dpdGNoIChzY2FudHlwZSkKIAl7CiAJCWNhc2UgU1Rf SU5ERVhTQ0FOOgotCQkJaWYgKCFpbmRleC0+YW1oYXNnZXR0dXBsZSkKKwkJCWlmICghaW5kZXgt PmFtaGFzZ2V0YmF0Y2gpCiAJCQkJcmV0dXJuIE5JTDsKIAkJCWJyZWFrOwogCQljYXNlIFNUX0JJ VE1BUFNDQU46CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0 LmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMKaW5kZXggMWIyMGJjODA1 Li5kMjRmZGRkMDIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5j YXQuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMKQEAgLTMxMywx MSArMzEzLDExIEBAIGdldF9yZWxhdGlvbl9pbmZvKFBsYW5uZXJJbmZvICpyb290LCBPaWQgcmVs YXRpb25PYmplY3RJZCwgYm9vbCBpbmhwYXJlbnQsCiAJCQkJaW5mby0+YW1zZWFyY2hhcnJheSA9 IGFtcm91dGluZS0+YW1zZWFyY2hhcnJheTsKIAkJCQlpbmZvLT5hbXNlYXJjaG51bGxzID0gYW1y b3V0aW5lLT5hbXNlYXJjaG51bGxzOwogCQkJCWluZm8tPmFtY2FucGFyYWxsZWwgPSBhbXJvdXRp bmUtPmFtY2FucGFyYWxsZWw7Ci0JCQkJaW5mby0+YW1oYXNnZXR0dXBsZSA9IChhbXJvdXRpbmUt PmFtZ2V0dHVwbGUgIT0gTlVMTCk7CisJCQkJaW5mby0+YW1oYXNnZXRiYXRjaCA9IChhbXJvdXRp bmUtPmFtZ2V0YmF0Y2ggIT0gTlVMTCB8fAorCQkJCQkJCQkJICAgYW1yb3V0aW5lLT5hbWdldHR1 cGxlICE9IE5VTEwpOwogCQkJCWluZm8tPmFtaGFzZ2V0Yml0bWFwID0gYW1yb3V0aW5lLT5hbWdl dGJpdG1hcCAhPSBOVUxMICYmCiAJCQkJCXJlbGF0aW9uLT5yZF90YWJsZWFtLT5zY2FuX2JpdG1h cF9uZXh0X3R1cGxlICE9IE5VTEw7Ci0JCQkJaW5mby0+YW1jYW5tYXJrcG9zID0gKGFtcm91dGlu ZS0+YW1tYXJrcG9zICE9IE5VTEwgJiYKLQkJCQkJCQkJCSAgYW1yb3V0aW5lLT5hbXJlc3RycG9z ICE9IE5VTEwpOworCQkJCWluZm8tPmFtY2FubWFya3BvcyA9IGFtcm91dGluZS0+YW1nZXRiYXRj aCAhPSBOVUxMOwogCQkJCWluZm8tPmFtY29zdGVzdGltYXRlID0gYW1yb3V0aW5lLT5hbWNvc3Rl c3RpbWF0ZTsKIAkJCQlBc3NlcnQoaW5mby0+YW1jb3N0ZXN0aW1hdGUgIT0gTlVMTCk7CiAKQEAg LTQxNCw3ICs0MTQsNyBAQCBnZXRfcmVsYXRpb25faW5mbyhQbGFubmVySW5mbyAqcm9vdCwgT2lk IHJlbGF0aW9uT2JqZWN0SWQsIGJvb2wgaW5ocGFyZW50LAogCQkJCWluZm8tPmFtc2VhcmNoYXJy YXkgPSBmYWxzZTsKIAkJCQlpbmZvLT5hbXNlYXJjaG51bGxzID0gZmFsc2U7CiAJCQkJaW5mby0+ YW1jYW5wYXJhbGxlbCA9IGZhbHNlOwotCQkJCWluZm8tPmFtaGFzZ2V0dHVwbGUgPSBmYWxzZTsK KwkJCQlpbmZvLT5hbWhhc2dldGJhdGNoID0gZmFsc2U7CiAJCQkJaW5mby0+YW1oYXNnZXRiaXRt YXAgPSBmYWxzZTsKIAkJCQlpbmZvLT5hbWNhbm1hcmtwb3MgPSBmYWxzZTsKIAkJCQlpbmZvLT5h bWNvc3Rlc3RpbWF0ZSA9IE5VTEw7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9sb2dpY2FsL3JlbGF0aW9uLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Jl bGF0aW9uLmMKaW5kZXggMGIxZDgwYjViLi43NmIwZDAzNWYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVsYXRpb24uYworKysgYi9zcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9sb2dpY2FsL3JlbGF0aW9uLmMKQEAgLTg5MCw3ICs4OTAsOCBAQCBJc0luZGV4VXNh YmxlRm9yUmVwbGljYUlkZW50aXR5RnVsbChSZWxhdGlvbiBpZHhyZWwsIEF0dHJNYXAgKmF0dHJt YXApCiAJICogVGhlIGdpdmVuIGluZGV4IGFjY2VzcyBtZXRob2QgbXVzdCBpbXBsZW1lbnQgImFt Z2V0dHVwbGUiLCB3aGljaCB3aWxsCiAJICogYmUgdXNlZCBsYXRlciB0byBmZXRjaCB0aGUgdHVw bGVzLiAgU2VlIFJlbGF0aW9uRmluZFJlcGxUdXBsZUJ5SW5kZXgoKS4KIAkgKi8KLQlpZiAoR2V0 SW5kZXhBbVJvdXRpbmVCeUFtSWQoaWR4cmVsLT5yZF9yZWwtPnJlbGFtLCBmYWxzZSktPmFtZ2V0 dHVwbGUgPT0gTlVMTCkKKwlpZiAoR2V0SW5kZXhBbVJvdXRpbmVCeUFtSWQoaWR4cmVsLT5yZF9y ZWwtPnJlbGFtLCBmYWxzZSktPmFtZ2V0dHVwbGUgPT0gTlVMTCAmJgorCQlHZXRJbmRleEFtUm91 dGluZUJ5QW1JZChpZHhyZWwtPnJkX3JlbC0+cmVsYW0sIGZhbHNlKS0+YW1nZXRiYXRjaCA9PSBO VUxMKQogCQlyZXR1cm4gZmFsc2U7CiAKIAlyZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC9hbXV0aWxzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvYW11dGls cy5jCmluZGV4IGM4MWZiNjFhMC4uZGRmZDFiNTVjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91 dGlscy9hZHQvYW11dGlscy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9hbXV0aWxzLmMK QEAgLTM2MywxMCArMzYzLDExIEBAIGluZGV4YW1fcHJvcGVydHkoRnVuY3Rpb25DYWxsSW5mbyBm Y2luZm8sCiAJCQkJUEdfUkVUVVJOX0JPT0wocm91dGluZS0+YW1jbHVzdGVyYWJsZSk7CiAKIAkJ CWNhc2UgQU1QUk9QX0lOREVYX1NDQU46Ci0JCQkJUEdfUkVUVVJOX0JPT0wocm91dGluZS0+YW1n ZXR0dXBsZSA/IHRydWUgOiBmYWxzZSk7CisJCQkJUEdfUkVUVVJOX0JPT0wocm91dGluZS0+YW1n ZXR0dXBsZSAhPSBOVUxMIHx8CisJCQkJCQkJICAgcm91dGluZS0+YW1nZXRiYXRjaCAhPSBOVUxM KTsKIAogCQkJY2FzZSBBTVBST1BfQklUTUFQX1NDQU46Ci0JCQkJUEdfUkVUVVJOX0JPT0wocm91 dGluZS0+YW1nZXRiaXRtYXAgPyB0cnVlIDogZmFsc2UpOworCQkJCVBHX1JFVFVSTl9CT09MKHJv dXRpbmUtPmFtZ2V0Yml0bWFwICE9IE5VTEwpOwogCiAJCQljYXNlIEFNUFJPUF9CQUNLV0FSRF9T Q0FOOgogCQkJCVBHX1JFVFVSTl9CT09MKHJvdXRpbmUtPmFtY2FuYmFja3dhcmQpOwpAQCAtMzky LDcgKzM5Myw4IEBAIGluZGV4YW1fcHJvcGVydHkoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8sCiAJ CQlQR19SRVRVUk5fQk9PTChyb3V0aW5lLT5hbWNhbm11bHRpY29sKTsKIAogCQljYXNlIEFNUFJP UF9DQU5fRVhDTFVERToKLQkJCVBHX1JFVFVSTl9CT09MKHJvdXRpbmUtPmFtZ2V0dHVwbGUgPyB0 cnVlIDogZmFsc2UpOworCQkJUEdfUkVUVVJOX0JPT0wocm91dGluZS0+YW1nZXR0dXBsZSAhPSBO VUxMIHx8CisJCQkJCQkgICByb3V0aW5lLT5hbWdldGJhdGNoICE9IE5VTEwpOwogCiAJCWNhc2Ug QU1QUk9QX0NBTl9JTkNMVURFOgogCQkJUEdfUkVUVVJOX0JPT0wocm91dGluZS0+YW1jYW5pbmNs dWRlKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5jIGIvc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNzLmMKaW5kZXggMjlmZWM2NTU1Li42MTZhY2ZjOTUg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5jCisrKyBiL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5jCkBAIC0xMDIsNyArMTAyLDYgQEAKICNpbmNsdWRl ICJhY2Nlc3MvZ2luLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3RhYmxlLmgiCiAjaW5jbHVkZSAiYWNj ZXNzL3RhYmxlYW0uaCIKLSNpbmNsdWRlICJhY2Nlc3MvdmlzaWJpbGl0eW1hcC5oIgogI2luY2x1 ZGUgImNhdGFsb2cvcGdfY29sbGF0aW9uLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19vcGVyYXRv ci5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfc3RhdGlzdGljLmgiCkBAIC03MTI0LDEwICs3MTIz LDYgQEAgZ2V0X2FjdHVhbF92YXJpYWJsZV9lbmRwb2ludChSZWxhdGlvbiBoZWFwUmVsLAogCWJv b2wJCWhhdmVfZGF0YSA9IGZhbHNlOwogCVNuYXBzaG90RGF0YSBTbmFwc2hvdE5vblZhY3V1bWFi bGU7CiAJSW5kZXhTY2FuRGVzYyBpbmRleF9zY2FuOwotCUJ1ZmZlcgkJdm1idWZmZXIgPSBJbnZh bGlkQnVmZmVyOwotCUJsb2NrTnVtYmVyIGxhc3RfaGVhcF9ibG9jayA9IEludmFsaWRCbG9ja051 bWJlcjsKLQlpbnQJCQluX3Zpc2l0ZWRfaGVhcF9wYWdlcyA9IDA7Ci0JSXRlbVBvaW50ZXIgdGlk OwogCURhdHVtCQl2YWx1ZXNbSU5ERVhfTUFYX0tFWVNdOwogCWJvb2wJCWlzbnVsbFtJTkRFWF9N QVhfS0VZU107CiAJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OwpAQCAtNzE3NSw2MCArNzE3MCwy NiBAQCBnZXRfYWN0dWFsX3ZhcmlhYmxlX2VuZHBvaW50KFJlbGF0aW9uIGhlYXBSZWwsCiAJICog YSBodWdlIGFtb3VudCBvZiB0aW1lIGhlcmUsIHNvIHdlIGdpdmUgdXAgb25jZSB3ZSd2ZSByZWFk IHRvbyBtYW55IGhlYXAKIAkgKiBwYWdlcy4gIFdoZW4gd2UgZmFpbCBmb3IgdGhhdCByZWFzb24s IHRoZSBjYWxsZXIgd2lsbCBlbmQgdXAgdXNpbmcKIAkgKiB3aGF0ZXZlciBleHRyZW1hbCB2YWx1 ZSBpcyByZWNvcmRlZCBpbiBwZ19zdGF0aXN0aWMuCisJICoKKwkgKiBYWFggVGhpcyBjYW4ndCB3 b3JrIHdpdGggdGhlIG5ldyB0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3QgaW50ZXJmYWNlLAorCSAq IHdoaWNoIHNpbXBseSB3b24ndCByZXR1cm4gYSB0dXBsZSB0aGF0IGlzbid0IHZpc2libGUgdG8g b3VyIHNuYXBzaG90LgorCSAqIHRhYmxlX2luZGV4X2dldG5leHRfc2xvdCB3aWxsIG5lZWQgc29t ZSBraW5kIG9mIGNhbGxiYWNrIHRoYXQgcHJvdmlkZXMKKwkgKiBhIHdheSBmb3IgdGhlIHNjYW4g dG8gZ2l2ZSB1cCB3aGVuIHRoZSBjb3N0cyBzdGFydCB0byBnZXQgb3V0IG9mIGhhbmQuCiAJICov CiAJSW5pdE5vblZhY3V1bWFibGVTbmFwc2hvdChTbmFwc2hvdE5vblZhY3V1bWFibGUsCiAJCQkJ CQkJICBHbG9iYWxWaXNUZXN0Rm9yKGhlYXBSZWwpKTsKIAotCWluZGV4X3NjYW4gPSBpbmRleF9i ZWdpbnNjYW4oaGVhcFJlbCwgaW5kZXhSZWwsCisJaW5kZXhfc2NhbiA9IGluZGV4X2JlZ2luc2Nh bihoZWFwUmVsLCBpbmRleFJlbCwgdHJ1ZSwKIAkJCQkJCQkJICZTbmFwc2hvdE5vblZhY3V1bWFi bGUsIE5VTEwsCiAJCQkJCQkJCSAxLCAwKTsKLQkvKiBTZXQgaXQgdXAgZm9yIGluZGV4LW9ubHkg c2NhbiAqLwotCWluZGV4X3NjYW4tPnhzX3dhbnRfaXR1cCA9IHRydWU7CisJQXNzZXJ0KGluZGV4 X3NjYW4tPnhzX3dhbnRfaXR1cCk7CiAJaW5kZXhfcmVzY2FuKGluZGV4X3NjYW4sIHNjYW5rZXlz LCAxLCBOVUxMLCAwKTsKIAogCS8qIEZldGNoIGZpcnN0L25leHQgdHVwbGUgaW4gc3BlY2lmaWVk IGRpcmVjdGlvbiAqLwotCXdoaWxlICgodGlkID0gaW5kZXhfZ2V0bmV4dF90aWQoaW5kZXhfc2Nh biwgaW5kZXhzY2FuZGlyKSkgIT0gTlVMTCkKKwl3aGlsZSAodGFibGVfaW5kZXhfZ2V0bmV4dF9z bG90KGluZGV4X3NjYW4sIGluZGV4c2NhbmRpciwgdGFibGVzbG90KSkKIAl7Ci0JCUJsb2NrTnVt YmVyIGJsb2NrID0gSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcih0aWQpOwotCi0JCWlmICghVk1f QUxMX1ZJU0lCTEUoaGVhcFJlbCwKLQkJCQkJCQlibG9jaywKLQkJCQkJCQkmdm1idWZmZXIpKQot CQl7Ci0JCQkvKiBSYXRzLCB3ZSBoYXZlIHRvIHZpc2l0IHRoZSBoZWFwIHRvIGNoZWNrIHZpc2li aWxpdHkgKi8KLQkJCWlmICghaW5kZXhfZmV0Y2hfaGVhcChpbmRleF9zY2FuLCB0YWJsZXNsb3Qp KQotCQkJewotCQkJCS8qCi0JCQkJICogTm8gdmlzaWJsZSB0dXBsZSBmb3IgdGhpcyBpbmRleCBl bnRyeSwgc28gd2UgbmVlZCB0bwotCQkJCSAqIGFkdmFuY2UgdG8gdGhlIG5leHQgZW50cnkuICBC ZWZvcmUgZG9pbmcgc28sIGNvdW50IGhlYXAKLQkJCQkgKiBwYWdlIGZldGNoZXMgYW5kIGdpdmUg dXAgaWYgd2UndmUgZG9uZSB0b28gbWFueS4KLQkJCQkgKgotCQkJCSAqIFdlIGRvbid0IGNoYXJn ZSBhIHBhZ2UgZmV0Y2ggaWYgdGhpcyBpcyB0aGUgc2FtZSBoZWFwIHBhZ2UKLQkJCQkgKiBhcyB0 aGUgcHJldmlvdXMgdHVwbGUuICBUaGlzIGlzIG9uIHRoZSBjb25zZXJ2YXRpdmUgc2lkZSwKLQkJ CQkgKiBzaW5jZSBvdGhlciByZWNlbnRseS1hY2Nlc3NlZCBwYWdlcyBhcmUgcHJvYmFibHkgc3Rp bGwgaW4KLQkJCQkgKiBidWZmZXJzIHRvbzsgYnV0IGl0J3MgZ29vZCBlbm91Z2ggZm9yIHRoaXMg aGV1cmlzdGljLgotCQkJCSAqLwotI2RlZmluZSBWSVNJVEVEX1BBR0VTX0xJTUlUIDEwMAotCi0J CQkJaWYgKGJsb2NrICE9IGxhc3RfaGVhcF9ibG9jaykKLQkJCQl7Ci0JCQkJCWxhc3RfaGVhcF9i bG9jayA9IGJsb2NrOwotCQkJCQluX3Zpc2l0ZWRfaGVhcF9wYWdlcysrOwotCQkJCQlpZiAobl92 aXNpdGVkX2hlYXBfcGFnZXMgPiBWSVNJVEVEX1BBR0VTX0xJTUlUKQotCQkJCQkJYnJlYWs7Ci0J CQkJfQotCi0JCQkJY29udGludWU7CQkvKiBubyB2aXNpYmxlIHR1cGxlLCB0cnkgbmV4dCBpbmRl eCBlbnRyeSAqLwotCQkJfQotCi0JCQkvKiBXZSBkb24ndCBhY3R1YWxseSBuZWVkIHRoZSBoZWFw IHR1cGxlIGZvciBhbnl0aGluZyAqLwotCQkJRXhlY0NsZWFyVHVwbGUodGFibGVzbG90KTsKLQot CQkJLyoKLQkJCSAqIFdlIGRvbid0IGNhcmUgd2hldGhlciB0aGVyZSdzIG1vcmUgdGhhbiBvbmUg dmlzaWJsZSB0dXBsZSBpbgotCQkJICogdGhlIEhPVCBjaGFpbjsgaWYgYW55IGFyZSB2aXNpYmxl LCB0aGF0J3MgZ29vZCBlbm91Z2guCi0JCQkgKi8KLQkJfQorCQkvKiBXZSBkb24ndCBhY3R1YWxs eSBuZWVkIHRoZSBoZWFwIHR1cGxlIGZvciBhbnl0aGluZyAqLworCQlFeGVjQ2xlYXJUdXBsZSh0 YWJsZXNsb3QpOwogCiAJCS8qCiAJCSAqIFdlIGV4cGVjdCB0aGF0IHRoZSBpbmRleCB3aWxsIHJl dHVybiBkYXRhIGluIEluZGV4VHVwbGUgbm90CkBAIC03MjYxLDggKzcyMjIsNiBAQCBnZXRfYWN0 dWFsX3ZhcmlhYmxlX2VuZHBvaW50KFJlbGF0aW9uIGhlYXBSZWwsCiAJCWJyZWFrOwogCX0KIAot CWlmICh2bWJ1ZmZlciAhPSBJbnZhbGlkQnVmZmVyKQotCQlSZWxlYXNlQnVmZmVyKHZtYnVmZmVy KTsKIAlpbmRleF9lbmRzY2FuKGluZGV4X3NjYW4pOwogCiAJcmV0dXJuIGhhdmVfZGF0YTsKZGlm ZiAtLWdpdCBhL2NvbnRyaWIvYW1jaGVjay92ZXJpZnlfbmJ0cmVlLmMgYi9jb250cmliL2FtY2hl Y2svdmVyaWZ5X25idHJlZS5jCmluZGV4IDM0NDMzZTgxOS4uM2E1YTRiZTM4IDEwMDY0NAotLS0g YS9jb250cmliL2FtY2hlY2svdmVyaWZ5X25idHJlZS5jCisrKyBiL2NvbnRyaWIvYW1jaGVjay92 ZXJpZnlfbmJ0cmVlLmMKQEAgLTM5Myw3ICszOTMsNyBAQCBidF9jaGVja19ldmVyeV9sZXZlbChS ZWxhdGlvbiByZWwsIFJlbGF0aW9uIGhlYXByZWwsIGJvb2wgaGVhcGtleXNwYWNlLAogCQkJIFJl bGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCkpOwogCiAJLyoKLQkgKiBUaGlzIGFzc2VydGlvbiBt YXRjaGVzIHRoZSBvbmUgaW4gaW5kZXhfZ2V0bmV4dF90aWQoKS4gIFNlZSBwYWdlCisJICogVGhp cyBhc3NlcnRpb24gbWF0Y2hlcyB0aGUgb25lIGluIGhlYXBhbV9iYXRjaF9nZXRuZXh0KCkuICBT ZWUgcGFnZQogCSAqIHJlY3ljbGluZy8idmlzaWJsZSB0byBldmVyeW9uZSIgbm90ZXMgaW4gbmJ0 cmVlIFJFQURNRS4KIAkgKi8KIAlBc3NlcnQoVHJhbnNhY3Rpb25JZElzVmFsaWQoUmVjZW50WG1p bikpOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9ibG9vbS9ibHV0aWxzLmMgYi9jb250cmliL2Jsb29t L2JsdXRpbHMuYwppbmRleCA1MTExY2RjNmQuLjdmZDk4ZGJhNiAxMDA2NDQKLS0tIGEvY29udHJp Yi9ibG9vbS9ibHV0aWxzLmMKKysrIGIvY29udHJpYi9ibG9vbS9ibHV0aWxzLmMKQEAgLTE0Niwx MCArMTQ2LDExIEBAIGJsaGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCQkuYW1iZWdpbnNjYW4g PSBibGJlZ2luc2NhbiwKIAkJLmFtcmVzY2FuID0gYmxyZXNjYW4sCiAJCS5hbWdldHR1cGxlID0g TlVMTCwKKwkJLmFtZ2V0YmF0Y2ggPSBOVUxMLAorCQkuYW1mcmVlYmF0Y2ggPSBOVUxMLAogCQku YW1nZXRiaXRtYXAgPSBibGdldGJpdG1hcCwKIAkJLmFtZW5kc2NhbiA9IGJsZW5kc2NhbiwKLQkJ LmFtbWFya3BvcyA9IE5VTEwsCi0JCS5hbXJlc3RycG9zID0gTlVMTCwKKwkJLmFtcG9zcmVzZXQg PSBOVUxMLAogCQkuYW1lc3RpbWF0ZXBhcmFsbGVsc2NhbiA9IE5VTEwsCiAJCS5hbWluaXRwYXJh bGxlbHNjYW4gPSBOVUxMLAogCQkuYW1wYXJhbGxlbHJlc2NhbiA9IE5VTEwsCmRpZmYgLS1naXQg YS9zcmMvdGVzdC9tb2R1bGVzL2R1bW15X2luZGV4X2FtL2R1bW15X2luZGV4X2FtLmMgYi9zcmMv dGVzdC9tb2R1bGVzL2R1bW15X2luZGV4X2FtL2R1bW15X2luZGV4X2FtLmMKaW5kZXggMzFmOGQy YjgxLi42NTU4ODQ4OWYgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvZHVtbXlfaW5kZXhf YW0vZHVtbXlfaW5kZXhfYW0uYworKysgYi9zcmMvdGVzdC9tb2R1bGVzL2R1bW15X2luZGV4X2Ft L2R1bW15X2luZGV4X2FtLmMKQEAgLTMzNCwxMCArMzM0LDExIEBAIGRpaGFuZGxlcihQR19GVU5D VElPTl9BUkdTKQogCQkuYW1iZWdpbnNjYW4gPSBkaWJlZ2luc2NhbiwKIAkJLmFtcmVzY2FuID0g ZGlyZXNjYW4sCiAJCS5hbWdldHR1cGxlID0gTlVMTCwKKwkJLmFtZ2V0YmF0Y2ggPSBOVUxMLAor CQkuYW1mcmVlYmF0Y2ggPSBOVUxMLAogCQkuYW1nZXRiaXRtYXAgPSBOVUxMLAogCQkuYW1lbmRz Y2FuID0gZGllbmRzY2FuLAotCQkuYW1tYXJrcG9zID0gTlVMTCwKLQkJLmFtcmVzdHJwb3MgPSBO VUxMLAorCQkuYW1wb3NyZXNldCA9IE5VTEwsCiAJCS5hbWVzdGltYXRlcGFyYWxsZWxzY2FuID0g TlVMTCwKIAkJLmFtaW5pdHBhcmFsbGVsc2NhbiA9IE5VTEwsCiAJCS5hbXBhcmFsbGVscmVzY2Fu ID0gTlVMTCwKZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIv c3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggOWY1ZWU4ZmQ0Li4zZWU4NjQ0 OWEgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3Ny Yy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0yMjYsOCArMjI2LDYgQEAgQlRTY2Fu SW5zZXJ0RGF0YQogQlRTY2FuS2V5UHJlcHJvYwogQlRTY2FuT3BhcXVlCiBCVFNjYW5PcGFxdWVE YXRhCi1CVFNjYW5Qb3NEYXRhCi1CVFNjYW5Qb3NJdGVtCiBCVFNoYXJlZAogQlRTb3J0QXJyYXlD b250ZXh0CiBCVFNwb29sCkBAIC0yNTYsNiArMjU0LDkgQEAgQmFzZUJhY2t1cENtZAogQmFzZUJh Y2t1cFRhcmdldEhhbmRsZQogQmFzZUJhY2t1cFRhcmdldFR5cGUKIEJhdGNoTVZDQ1N0YXRlCitC YXRjaE1hdGNoaW5nSXRlbQorQmF0Y2hSaW5nQnVmZmVyCitCYXRjaFJpbmdJdGVtUG9zCiBCZWdp bkRpcmVjdE1vZGlmeV9mdW5jdGlvbgogQmVnaW5Gb3JlaWduSW5zZXJ0X2Z1bmN0aW9uCiBCZWdp bkZvcmVpZ25Nb2RpZnlfZnVuY3Rpb24KQEAgLTEyODYsNiArMTI4Nyw4IEBAIEluZGV4T3JkZXJC eURpc3RhbmNlCiBJbmRleFBhdGgKIEluZGV4UnVudGltZUtleUluZm8KIEluZGV4U2NhbgorSW5k ZXhTY2FuQmF0Y2gKK0luZGV4U2NhbkJhdGNoRGF0YQogSW5kZXhTY2FuRGVzYwogSW5kZXhTY2Fu RGVzY0RhdGEKIEluZGV4U2Nhbkluc3RydW1lbnRhdGlvbgpAQCAtMzQ3NCwxOCArMzQ3NywxNyBA QCBhbWNhbnJldHVybl9mdW5jdGlvbgogYW1jb3N0ZXN0aW1hdGVfZnVuY3Rpb24KIGFtZW5kc2Nh bl9mdW5jdGlvbgogYW1lc3RpbWF0ZXBhcmFsbGVsc2Nhbl9mdW5jdGlvbgorYW1nZXRiYXRjaF9m dW5jdGlvbgogYW1nZXRiaXRtYXBfZnVuY3Rpb24KIGFtZ2V0dHJlZWhlaWdodF9mdW5jdGlvbgog YW1nZXR0dXBsZV9mdW5jdGlvbgogYW1pbml0cGFyYWxsZWxzY2FuX2Z1bmN0aW9uCiBhbWluc2Vy dF9mdW5jdGlvbgogYW1pbnNlcnRjbGVhbnVwX2Z1bmN0aW9uCi1hbW1hcmtwb3NfZnVuY3Rpb24K IGFtb3B0aW9uc19mdW5jdGlvbgogYW1wYXJhbGxlbHJlc2Nhbl9mdW5jdGlvbgogYW1wcm9wZXJ0 eV9mdW5jdGlvbgogYW1yZXNjYW5fZnVuY3Rpb24KLWFtcmVzdHJwb3NfZnVuY3Rpb24KIGFtdHJh bnNsYXRlX2NtcHR5cGVfZnVuY3Rpb24KIGFtdHJhbnNsYXRlX3N0cmF0ZWd5X2Z1bmN0aW9uCiBh bXZhY3V1bWNsZWFudXBfZnVuY3Rpb24KLS0gCjIuNTEuMAoK --0000000000007589150649a4074c--