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 1vPseW-000IId-1e for pgsql-hackers@arkaria.postgresql.org; Mon, 01 Dec 2025 01:24:33 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vPseU-00HMk8-39 for pgsql-hackers@arkaria.postgresql.org; Mon, 01 Dec 2025 01:24:31 +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 1vPseT-00HMk0-2X for pgsql-hackers@lists.postgresql.org; Mon, 01 Dec 2025 01:24:30 +0000 Received: from mail-wm1-x334.google.com ([2a00:1450:4864:20::334]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vPseP-002Udm-0u for pgsql-hackers@lists.postgresql.org; Mon, 01 Dec 2025 01:24:28 +0000 Received: by mail-wm1-x334.google.com with SMTP id 5b1f17b1804b1-477a1c28778so41309185e9.3 for ; Sun, 30 Nov 2025 17:24:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bowt-ie.20230601.gappssmtp.com; s=20230601; t=1764552263; x=1765157063; 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=Ce3pQYJKteOQsDvknMbE0RXLgWMIivB536pvTWIKbJo=; b=QB7XKa+izqudN5M3JbNtcTXOANx35EjsSBaZPazWZgwXBPBbVvrXTVYRh0ZmrmSdXa ylvS12+4Cx2UZ9jKPAxXd8mxl7MhCOjHHb16lylHnGK3oEMaitS46UFESJaaGqz/Idj3 vqta0m2b7/85qZGWRZZYzDOTEQRAgcfYFAbiscp07fxdId/+tUcIm40pNEaEWv/YfZdb hJWGxPTvZHTUqeDC8CLF8yDhcZuIbFqgh5Rs8Ev/Uj8HTB+hRvROcOE9aQD+q0dQgq7F yYjTYUHcyXVPAGRucC74iv6jEGAQk/r+hNkBbc0LC4b4v7ml8XPzGe5CIFqfohhbzSNh lJgw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764552263; x=1765157063; 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=Ce3pQYJKteOQsDvknMbE0RXLgWMIivB536pvTWIKbJo=; b=NdJWqT2MHlnCpBBPJ/NvC9AMELIM+W4dNg/03lOjye83DO3r/ET+X1noKaGamBEeZo 6DaCbZENh+s644NZxTwoJGmwrzQmrcC2epJSyIxS9FautVnqfqun7TnD5B1ncy3AneH0 ZMGQqM4/ZXORV/Vb5FAxWapPYB3akmcSwYL6UJCisvCr14wFmU+ojfi6fYO4kHrmXiFD 8SnmIAO/rkM8Vr/yU1DlLAm/BwexasaHmgN7eYpKr0qT3OogjdA9EN8ymwrDNewXzVay 93GBveY6zfTI68sMY3OM8WuJGzDApKLs3D6E7AC7ieXG3HqxaC5bJbKW6rTNikZcHk+X I4oA== X-Forwarded-Encrypted: i=1; AJvYcCXzPL0W+j3ZmZhomqINeiqLaRAbO3O7KipiaotrcQ++NQjuUVRZlfTtFeOCkWuQljj232q0jOsQb1aSo0na@lists.postgresql.org X-Gm-Message-State: AOJu0Yx3wumVykj9zA+0ZV78DzzV0JFD+HmiTtoYwrn3J5cIJ4yrQyDd gRjniDiZ3OG1lxLG3ghvePgMqv+J8QJ8si64d3J+hkj25/UpOeQo9WjA1nQxAM6mYWHDxKPUtj8 SMbgAzhrL71kcJjzB64zejZVEvE2hhrbWj65FSDCMWw== X-Gm-Gg: ASbGnctk0A4AZQIyws7fHqp6/8kFjZAOGrJxgieim47QgUnw6/us8GGvaVh2TA7JRem /TQ873UUPJoecfQF93RzjMf00vem0zn07sQNOYodow1XHqo5/34vY1QKCpB2pHKwBg2N0umsKs3 F1chE2Rh8a2reajmsQl2OdXsX4+Jn5RClpi4+Q053gtn3BvDUWqWFNSVPZgSUIvr3sjNsghg7BQ mDrsw3jKqC5C46bfAk8W5/MdgRjd+rgTeOUe3xcjUJkcPt5xp793jZrbmx07Zlnr5l08BM= X-Google-Smtp-Source: AGHT+IEd9FE5Jf/g+CdQpPite2HQL3Wuz8+PQArlxOHcE3kkzVI1FM+kIgooDIR/8VG+IfNE6XRbWzU94SXBQm7ccos= X-Received: by 2002:a05:600c:4591:b0:475:e067:f23d with SMTP id 5b1f17b1804b1-47904b1fac9mr226251075e9.25.1764552262800; Sun, 30 Nov 2025 17:24:22 -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: Sun, 30 Nov 2025 20:23:56 -0500 X-Gm-Features: AWmQ_bmOHHPvCXE4K4kFlYkpyjYpTsilyxxZlsqT0XvB5wE4YqN_1jhPTLivj_0 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="000000000000d00bb30644d9d645" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000d00bb30644d9d645 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Mon, Nov 10, 2025 at 6:59=E2=80=AFPM Peter Geoghegan wrote: > The new tentative plan is to cut scope by focussing on switching over > to the new index AM + table AM interface from the patch in the short > term, for Postgres 19. Attached patch makes the table AM revisions we talked about. This is a significant change in direction, so I'm adopting a new patch versioning scheme: this new version is v1. (I just find it easier to deal with sequential patch version numbers.) I'm sure that I'll have made numerous mistakes in this new v1. There will certainly be some bugs, and some of the exact details of how I'm doing the layering are likely suboptimal or even wrong. I am nevertheless cautiously optimistic that this will be the last major redesign that will be required for this project. > There is an almost immediate benefit to just > doing that much, unrelated to I/O prefetching for index scans: it > enables batching of heap page buffer locking/unlocking (during the > point where index scans perform heap_hot_search_buffer calls) on the > table AM/heapam side during ordered index scans. Note that this new v1 doesn't yet include the important heapam buffer locking optimization discussed here. It didn't seem worth holding up everything just for that. Plan is to get to it next. (It isn't intrinsically all that complicated to add the optimization with this new table AM orientated structure, but doing so would have made performance validation work/avoiding regressions with simple queries that much harder. So I just put it off for a bit longer.) What's new in v1 (compared to v20251109-*, the prior version): * The first patch in the series is now mostly about changing the table AM and index AM in a complementary way (not just about adding the amgetbatch interface to the index AM). To summarize this point (mostly just a recap of recent discussion on the table AM API on this thread) with its own sub points: - We're now using a slot-based table AM interface that understands scan direction. We now do all VM access for index-only scans on the heapam side, fixing that existing table AM modularity violation once and for all. - Batches returned by amgetbatch are directly managed by heapam, giving it the direct control that it requires to get the best possible performance. Whether that's for adding I/O prefetching, or for other optimizations. - The old table_index_fetch_tuple index scan interface is still needed -- though only barely. The rule going forward for core executor code is that it should always use this new slot-based interface, unless there is a specific need for such a caller to pass *their own* TID, in a way that cannot possibly be delegated to our new high level table AM interface. For example, we still need table_index_fetch_tuple for nbtree's _bt_check_unique; it must pass TIDs to heapam, and get back tuples, without starting any new index scan to do so (the only "index scan" involved in the case of the _bt_check_unique caller takes place in the btinsert that needs to perform unique index enforcement in passing). I think it makes perfect sense that a small handful of special case callers still need to use table_index_fetch_tuple, since there really is no way around the need for these callers to pass their own TID. * Major restructuring of batch management code, to allow it to work with the table AM interface (as well as related improvements and polishing). The parts of batch management that aren't under the direct control of table AMs/heapam (the batch helper functions that all table AMs will use) are no longer in indexam.c; there's a new file for those routines named indexbatch.c. indexbatch.c is also the place where a few other helper functions go. These other functions are called by indexam.c/the core executor, for things like initializing an amgetbatch scan, and informing nbtree that it is taking a mark (for mark/restore). Maybe there are certain remaining problems with the way that indexam.c and heapam_handler.c are coordinating across index scans. Hopefully the structure wasn't accidentally overfitted to heapam/isn't brittle in some other way. * Renamed and made lots of tweaks to batching related functions and structs. I've also integrated code that previously appeared in its own "batch cache" patch into the new main commit in the patch series (the first patch in the new series). The main goal of the tweaks to the data structures was to avoid indirection that previously caused small regressions in my microbenchmarks. We're very sensitive to costs from additional pointer chasing in these code paths. And from even small memory allocations. I think that I've avoided all regressions with just the first patch, at least for my own microbenchmark suite. I did not aim to avoid these regressions with the prefetching patch, since I consider it out of scope now (for Postgres 19). * v1 breaks out prefetching into its own patch, which is now the second patch in the patch series. The new I/O prefetching patch turned out to be surprisingly small. I still feel good about our choice to put that off until Postgres 20, though -- it's definitely where most of the difficulties are. Especially with things like resource management. (The problem with the second patch is that it's too small/doesn't address all the problems, not that it's too big and unwieldy.) Prefetching works at least as well as it did in earlier versions (maybe even slightly better). It's not just an afterthought here. At a minimum, we need to continue to maintain prefetching in a reasonably complete and usable form to keep us honest about the design changes in the table AM and index AM APIs. If the design itself cannot eventually accommodate Postgres 20 work on I/O prefetching (and even later work), then it's no good. Minor caveat about preserving prefetching in good working order: I disabled support for index-only scans that use I/O prefetching for heap accesses in the second patch, at least for now. To recap, IoS support requires a visibility cache so that both readBatch and streamBatch agree on exactly which heap blocks will need to be read, even when the visibility map has some relevant heap page bits concurrently set or unset. It won't be too hard to add something like that back to heapam_handler.c, but I didn't get around to doing so just yet. It might be independently useful to have some kind of visibility cache, even without prefetching; batching VM accesses (say by doing them up front, for a whole batch, right after amgetbatch returns) might work out saving cycles with cached scans. You know, somewhat like how we'll do same-heap-page heap tuple fetches eagerly as a way of minimizing buffer lock/unlock traffic. * There's a new patch that adds amgetbatch support for hash indexes. This demonstrates that the amgetbatch interface is already reasonably general. And that adding support to an index AM doesn't have to be all that invasive. I'm more focussed than ever on the generality of the API now. * Added documentation that attempts to formalize the constraints that index AMs that opt to use amgetbatch are under. I don't think that it makes sense to think of amgettuple as the legacy interface for plain index scans. There will probably always be cases like KNN GiST scans, that legitimately need the index AM to directly control the progress of index scans, a tuple at a time. After all, these scan types give an absurd amount of control over many things to the index AM -- that seems to really make it hard to put the table AM in control of the scan's progress. For example, GiST scans use their own GISTSearchHeapItem struct to manage each item returned to the scan (which has a bunch of extra fields compared to our new AM-generic BatchMatchingItem struct). This GISTSearchHeapItem struct allows GiST to indicate whether or not an index tuple's quals must be rechecked. It works at the tuple granularity (individual GiST opclasses might expect that level of flexibility), which really works against the batching concepts that we're pursuing here. It's true that hash index scans are also lossy, but that's quite different: they're inherently lossy. It's not as if hash index scans are sometimes not lossy. They certainly cannot be lossy for some tuples but not other tuples that all get returned during the same index scan. Not so with GiST scans. Likely the best solution to the problems posed by GiST and SP-GiST will be to choose one of either amgettuple and amgetbatch during planning, according to what the scan actually requires (while having support for both interfaces in both index AMs). I'm still not sure what that should look like, though -- how does the planner know which interface to use, in a world where it has to make a choice with those index AMs that offer both? Obviously the answer depends in part on what actually matters to GiST/where GiST *can* reasonably use amgetbatch, to get benefits such as prefetching. And I don't claim to have a full understanding of that right now. Here are the things that I'd like to ask from reviewers, and from Tomas: * Review of the table AM changes, with a particular emphasis on high level architectural choices. * Most importantly: will the approach in this new v1 avoid painting ourselves into a corner? It can be incomplete, as long as it doesn't block progress on things we're likely to want to do in the next couple of releases. * Help with putting the contract that amgetbatch requires of index AMs on a more rigorous footing. In other words, is amgetbatch itself sufficiently general to accomodate the needs of index AMs in the future? I've made a start on that here (by adding sgml docs about the index AM API, which mentions table AM concerns), but work remains, particularly when it comes to supporting GiST + SP-GiST. I think it makes sense to keep feedback mostly high level for now -- to make it primarily about how the individual API changes fit together, if they're coordinating too much (or not enough), and if the interface we have is able to accommodate future needs. --=20 Peter Geoghegan --000000000000d00bb30644d9d645 Content-Type: application/octet-stream; name="v1-0004-Add-amgetbatch-support-to-hash-index-AM.patch" Content-Disposition: attachment; filename="v1-0004-Add-amgetbatch-support-to-hash-index-AM.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mimg735o1 RnJvbSA2YjQ5NWM2ODA4ZjNiZGZkMTNhNWFjMzQ5NTE4NTA2NDNlZGM0NDU2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFR1 ZSwgMjUgTm92IDIwMjUgMTg6MDM6MTUgLTA1MDAKU3ViamVjdDogW1BBVENIIHYxIDQvNF0gQWRk IGFtZ2V0YmF0Y2ggc3VwcG9ydCB0byBoYXNoIGluZGV4IEFNLgoKVGhpcyBwYXRjaCBzaG91bGQg YmUgY29uc2lkZXJlZCBhIHdvcmsgaW4gcHJvZ3Jlc3MuICBJdCBoYXMgb25seSBiZWVuCmxpZ2h0 bHkgdGVzdGVkLCBhbmQgaXQncyBub3QgY2xlYXIgaWYgSSd2ZSBhY2NvdW50ZWQgZm9yIGFsbCBv ZiB0aGUKaW50cmljYWNpZXMgd2l0aCBidWNrZXQgc3BsaXRzIChhbmQgd2l0aCBwaW5zIHRoYXQg YXJlIGhlbGQgYnkgdGhlCnNjYW4ncyBvcGFxdWUgc3RhdGUgbW9yZSBnZW5lcmFsbHkpLgoKVGhp cyBhdXRvbWF0aWNhbGx5IHN3aXRjaGVkIGhhc2ggaW5kZXhlcyBvdmVyIHRvIHVzaW5nIHRoZSBk cm9wUGluCm9wdGltaXphdGlvbiwgc2luY2UgdGhhdCBpcyBzdGFuZGFyZCB3aGVuIHVzaW5nIHRo ZSBuZXcgYW1nZXRiYXRjaAppbnRlcmZhY2UuICBUaGlzIHdvbid0IGJyaW5nIHNpbWlsYXIgYmVu ZWZpdHMgdG8gaGFzaCBpbmRleCBzY2FucyB0aGF0Cm5idHJlZSBpbmRleCBzY2FucyBnYWluZWQg d2hlbiBjb21taXQgMmVkNWI4N2Ygd2VudCBpbi4gIEhhc2ggaW5kZXgKdmFjdXVtaW5nIGFjcXVp cmVzIGEgY2xlYW51cCBsb2NrIG9uIGJ1Y2tldCBwYWdlcywgYnV0IGNvbmZsaWN0aW5nIHBpbnMK b24gYnVja2V0IHBhZ2VzIGFyZSBzdGlsbCBoZWxkIGZvciB0aGUgZnVsbCBkdXJhdGlvbiBvZiBl YWNoIGluZGV4IHNjYW4uCgpIb3dldmVyLCB0aGVyZSBpcyBzdGlsbCBpbmRlcGVuZGVudCB2YWx1 ZSBpbiBhdm9pZGluZyBob2xkaW5nIG9uIHRvCmJ1ZmZlciBwaW5zIGR1cmluZyBpbmRleCBzY2Fu czogaW5kZXggcHJlZmV0Y2hpbmcgdGVuZHMgdG8gaG9sZCBvcGVuCmFzIG1hbnkgYXMgc2V2ZXJh bCBkb3plbiBiYXRjaGVzIHdpdGggY2VydGFpbiB3b3JrbG9hZHMgKHdvcmtsb2FkcyB3aGVyZQp0 aGUgc3RyZWFtIHBvc2l0aW9uIGhhcyB0byBnZXQgcXVpdGUgZmFyIGFoZWFkIG9mIHRoZSByZWFk IHBvc2l0aW9uIGluCm9yZGVyIHRvIG1haW50YWluIHRoZSBhcHByb3ByaWF0ZSBwcmVmZXRjaCBk aXN0YW5jZSBvbiB0aGUgaGVhcGFtIHNpZGUpLgpHdWFyYW50ZWVpbmcgdGhhdCBvcGVuIGJhdGNo ZXMgd29uJ3QgaG9sZCBidWZmZXIgcGlucyBvbiBpbmRleCBwYWdlcyAoYXQKbGVhc3QgZHVyaW5n IHBsYWluIGluZGV4IHNjYW5zIHRoYXQgdXNlIGFuIE1WQ0Mgc25hcHNob3QsIHBlciB0aGUgcnVs ZXMKZXN0YWJsaXNoZWQgYnkgY29tbWl0IDJlZDViODdmKSBpcyBsaWtlbHkgdG8gbWFrZSBsaWZl IGVhc2llciB3aGVuIHRoZQpyZXNvdXJjZSBtYW5hZ2VtZW50IHJ1bGVzIGZvciBJL08gcHJlZmV0 Y2hpbmcgYXJlIGZ1bGx5IGlyb25lZC1vdXQuCgpOb3RlIHRoYXQgdGhlIGNvZGUgcGF0aCBpbiBf aGFzaF9raWxsX2l0ZW1zIHRoYXQgY2FsbHMgX2hhc2hfZ2V0YnVmCih0aG91Z2ggb25seSB3aXRo IHRoZSBMSF9PVkVSRkxPV19QQUdFIGZsYWcvb3ZlcmZsb3cgcGFnZXMpIGlzIGRlYWQKY29kZS92 ZXN0aWdpYWwgb24gbWFzdGVyIFsxXS4gIEhvd2V2ZXIsIGl0J3Mgbm93IHVzZWZ1bCBhZ2Fpbiwg c2luY2UKX2hhc2hfa2lsbF9pdGVtcyBtaWdodCBub3cgbmVlZCB0byByZWxvY2sgYW5kIHJlcGlu IGFuIG92ZXJmbG93IHBhZ2UKKG5vdCBqdXN0IHJlbG9jayBpdCkgZHVyaW5nIGRyb3BQaW4gc2Nh bnMuCgpbMV0gaHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQUgyLVd6PThtZWZ5OFFVY3NuS0xUZVB1eTR0 RThwZE8rZ1NSUTl5UXdVSG9hZUZURndAbWFpbC5nbWFpbC5jb20KCkF1dGhvcjogUGV0ZXIgR2Vv Z2hlZ2FuIDxwZ0Bib3d0LmllPgotLS0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9oYXNoLmggICAgICAg ICAgICB8ICA3MyArLS0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMgICAgICAg fCAxMjYgKysrKystLS0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNocGFnZS5jICAg fCAgMTkgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hzZWFyY2guYyB8IDI4MiArKysr KysrKysrKystLS0tLS0tLS0tLS0tLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2h1dGls LmMgICB8ICA5OCArKysrKy0tLS0tCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAg ICAgfCAgIDIgLQogNiBmaWxlcyBjaGFuZ2VkLCAyNDAgaW5zZXJ0aW9ucygrKSwgMzYwIGRlbGV0 aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oYXNoLmggYi9zcmMvaW5j bHVkZS9hY2Nlc3MvaGFzaC5oCmluZGV4IDgzOWMzNDMxMi4uMDNmOGJjOWIzIDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGFzaC5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9oYXNo LmgKQEAgLTEwMCw1OCArMTAwLDYgQEAgdHlwZWRlZiBIYXNoUGFnZU9wYXF1ZURhdGEgKkhhc2hQ YWdlT3BhcXVlOwogICovCiAjZGVmaW5lIEhBU0hPX1BBR0VfSUQJCTB4RkY4MAogCi10eXBlZGVm IHN0cnVjdCBIYXNoU2NhblBvc0l0ZW0JLyogd2hhdCB3ZSByZW1lbWJlciBhYm91dCBlYWNoIG1h dGNoICovCi17Ci0JSXRlbVBvaW50ZXJEYXRhIGhlYXBUaWQ7CS8qIFRJRCBvZiByZWZlcmVuY2Vk IGhlYXAgaXRlbSAqLwotCU9mZnNldE51bWJlciBpbmRleE9mZnNldDsJLyogaW5kZXggaXRlbSdz IGxvY2F0aW9uIHdpdGhpbiBwYWdlICovCi19IEhhc2hTY2FuUG9zSXRlbTsKLQotdHlwZWRlZiBz dHJ1Y3QgSGFzaFNjYW5Qb3NEYXRhCi17Ci0JQnVmZmVyCQlidWY7CQkJLyogaWYgdmFsaWQsIHRo ZSBidWZmZXIgaXMgcGlubmVkICovCi0JQmxvY2tOdW1iZXIgY3VyclBhZ2U7CQkvKiBjdXJyZW50 IGhhc2ggaW5kZXggcGFnZSAqLwotCUJsb2NrTnVtYmVyIG5leHRQYWdlOwkJLyogbmV4dCBvdmVy ZmxvdyBwYWdlICovCi0JQmxvY2tOdW1iZXIgcHJldlBhZ2U7CQkvKiBwcmV2IG92ZXJmbG93IG9y IGJ1Y2tldCBwYWdlICovCi0KLQkvKgotCSAqIFRoZSBpdGVtcyBhcnJheSBpcyBhbHdheXMgb3Jk ZXJlZCBpbiBpbmRleCBvcmRlciAoaWUsIGluY3JlYXNpbmcKLQkgKiBpbmRleG9mZnNldCkuICBX aGVuIHNjYW5uaW5nIGJhY2t3YXJkcyBpdCBpcyBjb252ZW5pZW50IHRvIGZpbGwgdGhlCi0JICog YXJyYXkgYmFjay10by1mcm9udCwgc28gd2Ugc3RhcnQgYXQgdGhlIGxhc3Qgc2xvdCBhbmQgZmls bCBkb3dud2FyZHMuCi0JICogSGVuY2Ugd2UgbmVlZCBib3RoIGEgZmlyc3QtdmFsaWQtZW50cnkg YW5kIGEgbGFzdC12YWxpZC1lbnRyeSBjb3VudGVyLgotCSAqIGl0ZW1JbmRleCBpcyBhIGN1cnNv ciBzaG93aW5nIHdoaWNoIGVudHJ5IHdhcyBsYXN0IHJldHVybmVkIHRvIGNhbGxlci4KLQkgKi8K LQlpbnQJCQlmaXJzdEl0ZW07CQkvKiBmaXJzdCB2YWxpZCBpbmRleCBpbiBpdGVtc1tdICovCi0J aW50CQkJbGFzdEl0ZW07CQkvKiBsYXN0IHZhbGlkIGluZGV4IGluIGl0ZW1zW10gKi8KLQlpbnQJ CQlpdGVtSW5kZXg7CQkvKiBjdXJyZW50IGluZGV4IGluIGl0ZW1zW10gKi8KLQotCUhhc2hTY2Fu UG9zSXRlbSBpdGVtc1tNYXhJbmRleFR1cGxlc1BlclBhZ2VdOwkvKiBNVVNUIEJFIExBU1QgKi8K LX0gSGFzaFNjYW5Qb3NEYXRhOwotCi0jZGVmaW5lIEhhc2hTY2FuUG9zSXNQaW5uZWQoc2NhbnBv cykgXAotKCBcCi0JQXNzZXJ0TWFjcm8oQmxvY2tOdW1iZXJJc1ZhbGlkKChzY2FucG9zKS5jdXJy UGFnZSkgfHwgXAotCQkJCSFCdWZmZXJJc1ZhbGlkKChzY2FucG9zKS5idWYpKSwgXAotCUJ1ZmZl cklzVmFsaWQoKHNjYW5wb3MpLmJ1ZikgXAotKQotCi0jZGVmaW5lIEhhc2hTY2FuUG9zSXNWYWxp ZChzY2FucG9zKSBcCi0oIFwKLQlBc3NlcnRNYWNybyhCbG9ja051bWJlcklzVmFsaWQoKHNjYW5w b3MpLmN1cnJQYWdlKSB8fCBcCi0JCQkJIUJ1ZmZlcklzVmFsaWQoKHNjYW5wb3MpLmJ1ZikpLCBc Ci0JQmxvY2tOdW1iZXJJc1ZhbGlkKChzY2FucG9zKS5jdXJyUGFnZSkgXAotKQotCi0jZGVmaW5l IEhhc2hTY2FuUG9zSW52YWxpZGF0ZShzY2FucG9zKSBcCi0JZG8geyBcCi0JCShzY2FucG9zKS5i dWYgPSBJbnZhbGlkQnVmZmVyOyBcCi0JCShzY2FucG9zKS5jdXJyUGFnZSA9IEludmFsaWRCbG9j a051bWJlcjsgXAotCQkoc2NhbnBvcykubmV4dFBhZ2UgPSBJbnZhbGlkQmxvY2tOdW1iZXI7IFwK LQkJKHNjYW5wb3MpLnByZXZQYWdlID0gSW52YWxpZEJsb2NrTnVtYmVyOyBcCi0JCShzY2FucG9z KS5maXJzdEl0ZW0gPSAwOyBcCi0JCShzY2FucG9zKS5sYXN0SXRlbSA9IDA7IFwKLQkJKHNjYW5w b3MpLml0ZW1JbmRleCA9IDA7IFwKLQl9IHdoaWxlICgwKQotCiAvKgogICoJSGFzaFNjYW5PcGFx dWVEYXRhIGlzIHByaXZhdGUgc3RhdGUgZm9yIGEgaGFzaCBpbmRleCBzY2FuLgogICovCkBAIC0x NzgsMTUgKzEyNiw2IEBAIHR5cGVkZWYgc3RydWN0IEhhc2hTY2FuT3BhcXVlRGF0YQogCSAqIHJl ZmVycmVkIG9ubHkgd2hlbiBoYXNoc29fYnVjX3BvcHVsYXRlZCBpcyB0cnVlLgogCSAqLwogCWJv b2wJCWhhc2hzb19idWNfc3BsaXQ7Ci0JLyogaW5mbyBhYm91dCBraWxsZWQgaXRlbXMgaWYgYW55 IChraWxsZWRJdGVtcyBpcyBOVUxMIGlmIG5ldmVyIHVzZWQpICovCi0JaW50CQkgICAqa2lsbGVk SXRlbXM7CS8qIGN1cnJQb3MuaXRlbXMgaW5kZXhlcyBvZiBraWxsZWQgaXRlbXMgKi8KLQlpbnQJ CQludW1LaWxsZWQ7CQkvKiBudW1iZXIgb2YgY3VycmVudGx5IHN0b3JlZCBpdGVtcyAqLwotCi0J LyoKLQkgKiBJZGVudGlmeSBhbGwgdGhlIG1hdGNoaW5nIGl0ZW1zIG9uIGEgcGFnZSBhbmQgc2F2 ZSB0aGVtIGluCi0JICogSGFzaFNjYW5Qb3NEYXRhCi0JICovCi0JSGFzaFNjYW5Qb3NEYXRhIGN1 cnJQb3M7CS8qIGN1cnJlbnQgcG9zaXRpb24gZGF0YSAqLwogfSBIYXNoU2Nhbk9wYXF1ZURhdGE7 CiAKIHR5cGVkZWYgSGFzaFNjYW5PcGFxdWVEYXRhICpIYXNoU2Nhbk9wYXF1ZTsKQEAgLTM2OCwx MSArMzA3LDE0IEBAIGV4dGVybiBib29sIGhhc2hpbnNlcnQoUmVsYXRpb24gcmVsLCBEYXR1bSAq dmFsdWVzLCBib29sICppc251bGwsCiAJCQkJCSAgIEluZGV4VW5pcXVlQ2hlY2sgY2hlY2tVbmlx dWUsCiAJCQkJCSAgIGJvb2wgaW5kZXhVbmNoYW5nZWQsCiAJCQkJCSAgIHN0cnVjdCBJbmRleElu Zm8gKmluZGV4SW5mbyk7Ci1leHRlcm4gYm9vbCBoYXNoZ2V0dHVwbGUoSW5kZXhTY2FuRGVzYyBz Y2FuLCBTY2FuRGlyZWN0aW9uIGRpcik7CitleHRlcm4gQmF0Y2hJbmRleFNjYW4gaGFzaGdldGJh dGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCQkJICAgQmF0Y2hJbmRleFNjYW4gcHJpb3Ji YXRjaCwKKwkJCQkJCQkJICAgU2NhbkRpcmVjdGlvbiBkaXIpOwogZXh0ZXJuIGludDY0IGhhc2hn ZXRiaXRtYXAoSW5kZXhTY2FuRGVzYyBzY2FuLCBUSURCaXRtYXAgKnRibSk7CiBleHRlcm4gSW5k ZXhTY2FuRGVzYyBoYXNoYmVnaW5zY2FuKFJlbGF0aW9uIHJlbCwgaW50IG5rZXlzLCBpbnQgbm9y ZGVyYnlzKTsKIGV4dGVybiB2b2lkIGhhc2hyZXNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2Fu S2V5IHNjYW5rZXksIGludCBuc2NhbmtleXMsCiAJCQkJCSAgIFNjYW5LZXkgb3JkZXJieXMsIGlu dCBub3JkZXJieXMpOworZXh0ZXJuIHZvaWQgaGFzaGZyZWViYXRjaChJbmRleFNjYW5EZXNjIHNj YW4sIEJhdGNoSW5kZXhTY2FuIGJhdGNoKTsKIGV4dGVybiB2b2lkIGhhc2hlbmRzY2FuKEluZGV4 U2NhbkRlc2Mgc2Nhbik7CiBleHRlcm4gSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICpoYXNoYnVsa2Rl bGV0ZShJbmRleFZhY3V1bUluZm8gKmluZm8sCiAJCQkJCQkJCQkJCSBJbmRleEJ1bGtEZWxldGVS ZXN1bHQgKnN0YXRzLApAQCAtNDQ1LDggKzM4Nyw5IEBAIGV4dGVybiB2b2lkIF9oYXNoX2Zpbmlz aF9zcGxpdChSZWxhdGlvbiByZWwsIEJ1ZmZlciBtZXRhYnVmLCBCdWZmZXIgb2J1ZiwKIAkJCQkJ CQkgICB1aW50MzIgbG93bWFzayk7CiAKIC8qIGhhc2hzZWFyY2guYyAqLwotZXh0ZXJuIGJvb2wg X2hhc2hfbmV4dChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsKLWV4dGVy biBib29sIF9oYXNoX2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIp OworZXh0ZXJuIEJhdGNoSW5kZXhTY2FuIF9oYXNoX25leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBT Y2FuRGlyZWN0aW9uIGRpciwKKwkJCQkJCQkJIEJhdGNoSW5kZXhTY2FuIHByaW9yYmF0Y2gpOwor ZXh0ZXJuIEJhdGNoSW5kZXhTY2FuIF9oYXNoX2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2Nh bkRpcmVjdGlvbiBkaXIpOwogCiAvKiBoYXNoc29ydC5jICovCiB0eXBlZGVmIHN0cnVjdCBIU3Bv b2wgSFNwb29sOwkvKiBvcGFxdWUgc3RydWN0IGluIGhhc2hzb3J0LmMgKi8KQEAgLTQ3Niw3ICs0 MTksNyBAQCBleHRlcm4gQmxvY2tOdW1iZXIgX2hhc2hfZ2V0X29sZGJsb2NrX2Zyb21fbmV3YnVj a2V0KFJlbGF0aW9uIHJlbCwgQnVja2V0IG5ld19idQogZXh0ZXJuIEJsb2NrTnVtYmVyIF9oYXNo X2dldF9uZXdibG9ja19mcm9tX29sZGJ1Y2tldChSZWxhdGlvbiByZWwsIEJ1Y2tldCBvbGRfYnVj a2V0KTsKIGV4dGVybiBCdWNrZXQgX2hhc2hfZ2V0X25ld2J1Y2tldF9mcm9tX29sZGJ1Y2tldChS ZWxhdGlvbiByZWwsIEJ1Y2tldCBvbGRfYnVja2V0LAogCQkJCQkJCQkJCQkJIHVpbnQzMiBsb3dt YXNrLCB1aW50MzIgbWF4YnVja2V0KTsKLWV4dGVybiB2b2lkIF9oYXNoX2tpbGxfaXRlbXMoSW5k ZXhTY2FuRGVzYyBzY2FuKTsKK2V4dGVybiB2b2lkIF9oYXNoX2tpbGxfaXRlbXMoSW5kZXhTY2Fu RGVzYyBzY2FuLCBCYXRjaEluZGV4U2NhbiBiYXRjaCk7CiAKIC8qIGhhc2guYyAqLwogZXh0ZXJu IHZvaWQgaGFzaGJ1Y2tldGNsZWFudXAoUmVsYXRpb24gcmVsLCBCdWNrZXQgY3VyX2J1Y2tldCwK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2guYyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy9oYXNoL2hhc2guYwppbmRleCBiNGI0NjA3MjQuLjJmNzk2YWVhYyAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9oYXNoL2hhc2guYwpAQCAtMTAxLDkgKzEwMSw5IEBAIGhhc2hoYW5kbGVyKFBHX0ZVTkNUSU9O X0FSR1MpCiAJYW1yb3V0aW5lLT5hbWFkanVzdG1lbWJlcnMgPSBoYXNoYWRqdXN0bWVtYmVyczsK IAlhbXJvdXRpbmUtPmFtYmVnaW5zY2FuID0gaGFzaGJlZ2luc2NhbjsKIAlhbXJvdXRpbmUtPmFt cmVzY2FuID0gaGFzaHJlc2NhbjsKLQlhbXJvdXRpbmUtPmFtZ2V0dHVwbGUgPSBoYXNoZ2V0dHVw bGU7Ci0JYW1yb3V0aW5lLT5hbWdldGJhdGNoID0gTlVMTDsKLQlhbXJvdXRpbmUtPmFtZnJlZWJh dGNoID0gTlVMTDsKKwlhbXJvdXRpbmUtPmFtZ2V0dHVwbGUgPSBOVUxMOworCWFtcm91dGluZS0+ YW1nZXRiYXRjaCA9IGhhc2hnZXRiYXRjaDsKKwlhbXJvdXRpbmUtPmFtZnJlZWJhdGNoID0gaGFz aGZyZWViYXRjaDsKIAlhbXJvdXRpbmUtPmFtZ2V0Yml0bWFwID0gaGFzaGdldGJpdG1hcDsKIAlh bXJvdXRpbmUtPmFtZW5kc2NhbiA9IGhhc2hlbmRzY2FuOwogCWFtcm91dGluZS0+YW1wb3NyZXNl dCA9IE5VTEw7CkBAIC0yODUsNTQgKzI4NSwyMiBAQCBoYXNoaW5zZXJ0KFJlbGF0aW9uIHJlbCwg RGF0dW0gKnZhbHVlcywgYm9vbCAqaXNudWxsLAogCiAKIC8qCi0gKgloYXNoZ2V0dHVwbGUoKSAt LSBHZXQgdGhlIG5leHQgdHVwbGUgaW4gdGhlIHNjYW4uCisgKgloYXNoZ2V0YmF0Y2goKSAtLSBH ZXQgdGhlIGZpcnN0IG9yIG5leHQgYmF0Y2ggb2YgdHVwbGVzIGluIHRoZSBzY2FuCiAgKi8KLWJv b2wKLWhhc2hnZXR0dXBsZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQor QmF0Y2hJbmRleFNjYW4KK2hhc2hnZXRiYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIEJhdGNoSW5k ZXhTY2FuIHByaW9yYmF0Y2gsIFNjYW5EaXJlY3Rpb24gZGlyKQogewotCUhhc2hTY2FuT3BhcXVl IHNvID0gKEhhc2hTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7Ci0JYm9vbAkJcmVzOwotCiAJLyog SGFzaCBpbmRleGVzIGFyZSBhbHdheXMgbG9zc3kgc2luY2Ugd2Ugc3RvcmUgb25seSB0aGUgaGFz aCBjb2RlICovCiAJc2Nhbi0+eHNfcmVjaGVjayA9IHRydWU7CiAKLQkvKgotCSAqIElmIHdlJ3Zl IGFscmVhZHkgaW5pdGlhbGl6ZWQgdGhpcyBzY2FuLCB3ZSBjYW4ganVzdCBhZHZhbmNlIGl0IGlu IHRoZQotCSAqIGFwcHJvcHJpYXRlIGRpcmVjdGlvbi4gIElmIHdlIGhhdmVuJ3QgZG9uZSBzbyB5 ZXQsIHdlIGNhbGwgYSByb3V0aW5lIHRvCi0JICogZ2V0IHRoZSBmaXJzdCBpdGVtIGluIHRoZSBz Y2FuLgotCSAqLwotCWlmICghSGFzaFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSkKLQkJcmVz ID0gX2hhc2hfZmlyc3Qoc2NhbiwgZGlyKTsKLQllbHNlCisJaWYgKHByaW9yYmF0Y2ggPT0gTlVM TCkKIAl7Ci0JCS8qCi0JCSAqIENoZWNrIHRvIHNlZSBpZiB3ZSBzaG91bGQga2lsbCB0aGUgcHJl dmlvdXNseS1mZXRjaGVkIHR1cGxlLgotCQkgKi8KLQkJaWYgKHNjYW4tPmtpbGxfcHJpb3JfdHVw bGUpCi0JCXsKLQkJCS8qCi0JCQkgKiBZZXMsIHNvIHJlbWVtYmVyIGl0IGZvciBsYXRlci4gKFdl J2xsIGRlYWwgd2l0aCBhbGwgc3VjaCB0dXBsZXMKLQkJCSAqIGF0IG9uY2UgcmlnaHQgYWZ0ZXIg bGVhdmluZyB0aGUgaW5kZXggcGFnZSBvciBhdCBlbmQgb2Ygc2Nhbi4pCi0JCQkgKiBJbiBjYXNl IGlmIGNhbGxlciByZXZlcnNlcyB0aGUgaW5kZXhzY2FuIGRpcmVjdGlvbiBpdCBpcyBxdWl0ZQot CQkJICogcG9zc2libGUgdGhhdCB0aGUgc2FtZSBpdGVtIG1pZ2h0IGdldCBlbnRlcmVkIG11bHRp cGxlIHRpbWVzLgotCQkJICogQnV0LCB3ZSBkb24ndCBkZXRlY3QgdGhhdDsgaW5zdGVhZCwgd2Ug anVzdCBmb3JnZXQgYW55IGV4Y2VzcwotCQkJICogZW50cmllcy4KLQkJCSAqLwotCQkJaWYgKHNv LT5raWxsZWRJdGVtcyA9PSBOVUxMKQotCQkJCXNvLT5raWxsZWRJdGVtcyA9IChpbnQgKikKLQkJ CQkJcGFsbG9jKE1heEluZGV4VHVwbGVzUGVyUGFnZSAqIHNpemVvZihpbnQpKTsKLQotCQkJaWYg KHNvLT5udW1LaWxsZWQgPCBNYXhJbmRleFR1cGxlc1BlclBhZ2UpCi0JCQkJc28tPmtpbGxlZEl0 ZW1zW3NvLT5udW1LaWxsZWQrK10gPSBzby0+Y3VyclBvcy5pdGVtSW5kZXg7Ci0JCX0KLQotCQkv KgotCQkgKiBOb3cgY29udGludWUgdGhlIHNjYW4uCi0JCSAqLwotCQlyZXMgPSBfaGFzaF9uZXh0 KHNjYW4sIGRpcik7CisJCS8qIEluaXRpYWxpemUgdGhlIHNjYW4sIGFuZCByZXR1cm4gZmlyc3Qg YmF0Y2ggb2YgbWF0Y2hpbmcgaXRlbXMgKi8KKwkJcmV0dXJuIF9oYXNoX2ZpcnN0KHNjYW4sIGRp cik7CiAJfQogCi0JcmV0dXJuIHJlczsKKwkvKiBSZXR1cm4gYmF0Y2ggcG9zaXRpb25lZCBhZnRl ciBjYWxsZXIncyBiYXRjaCAoaW4gZGlyZWN0aW9uICdkaXInKSAqLworCXJldHVybiBfaGFzaF9u ZXh0KHNjYW4sIGRpciwgcHJpb3JiYXRjaCk7CiB9CiAKIApAQCAtMzQyLDI2ICszMTAsMjMgQEAg aGFzaGdldHR1cGxlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiBpbnQ2 NAogaGFzaGdldGJpdG1hcChJbmRleFNjYW5EZXNjIHNjYW4sIFRJREJpdG1hcCAqdGJtKQogewot CUhhc2hTY2FuT3BhcXVlIHNvID0gKEhhc2hTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7Ci0JYm9v bAkJcmVzOworCUJhdGNoSW5kZXhTY2FuIGJhdGNoOwogCWludDY0CQludGlkcyA9IDA7Ci0JSGFz aFNjYW5Qb3NJdGVtICpjdXJySXRlbTsKKwlpbnQJCQlpdGVtSW5kZXg7CiAKLQlyZXMgPSBfaGFz aF9maXJzdChzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbik7CisJYmF0Y2ggPSBfaGFzaF9maXJz dChzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbik7CiAKLQl3aGlsZSAocmVzKQorCXdoaWxlIChi YXRjaCAhPSBOVUxMKQogCXsKLQkJY3Vyckl0ZW0gPSAmc28tPmN1cnJQb3MuaXRlbXNbc28tPmN1 cnJQb3MuaXRlbUluZGV4XTsKKwkJZm9yIChpdGVtSW5kZXggPSBiYXRjaC0+Zmlyc3RJdGVtOwor CQkJIGl0ZW1JbmRleCA8PSBiYXRjaC0+bGFzdEl0ZW07CisJCQkgaXRlbUluZGV4KyspCisJCXsK KwkJCXRibV9hZGRfdHVwbGVzKHRibSwgJihiYXRjaC0+aXRlbXNbaXRlbUluZGV4XS5oZWFwVGlk KSwgMSwgdHJ1ZSk7CisJCQludGlkcysrOworCQl9CiAKLQkJLyoKLQkJICogX2hhc2hfZmlyc3Qg YW5kIF9oYXNoX25leHQgaGFuZGxlIGVsaW1pbmF0ZSBkZWFkIGluZGV4IGVudHJpZXMKLQkJICog d2hlbmV2ZXIgc2Nhbi0+aWdub3JlX2tpbGxlZF90dXBsZXMgaXMgdHJ1ZS4gIFRoZXJlZm9yZSwg dGhlcmUncwotCQkgKiBub3RoaW5nIHRvIGRvIGhlcmUgZXhjZXB0IGFkZCB0aGUgcmVzdWx0cyB0 byB0aGUgVElEQml0bWFwLgotCQkgKi8KLQkJdGJtX2FkZF90dXBsZXModGJtLCAmKGN1cnJJdGVt LT5oZWFwVGlkKSwgMSwgdHJ1ZSk7Ci0JCW50aWRzKys7Ci0KLQkJcmVzID0gX2hhc2hfbmV4dChz Y2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbik7CisJCWJhdGNoID0gX2hhc2hfbmV4dChzY2FuLCBG b3J3YXJkU2NhbkRpcmVjdGlvbiwgYmF0Y2gpOwogCX0KIAogCXJldHVybiBudGlkczsKQEAgLTM4 MywxNiArMzQ4LDEyIEBAIGhhc2hiZWdpbnNjYW4oUmVsYXRpb24gcmVsLCBpbnQgbmtleXMsIGlu dCBub3JkZXJieXMpCiAJc2NhbiA9IFJlbGF0aW9uR2V0SW5kZXhTY2FuKHJlbCwgbmtleXMsIG5v cmRlcmJ5cyk7CiAKIAlzbyA9IChIYXNoU2Nhbk9wYXF1ZSkgcGFsbG9jKHNpemVvZihIYXNoU2Nh bk9wYXF1ZURhdGEpKTsKLQlIYXNoU2NhblBvc0ludmFsaWRhdGUoc28tPmN1cnJQb3MpOwogCXNv LT5oYXNoc29fYnVja2V0X2J1ZiA9IEludmFsaWRCdWZmZXI7CiAJc28tPmhhc2hzb19zcGxpdF9i dWNrZXRfYnVmID0gSW52YWxpZEJ1ZmZlcjsKIAogCXNvLT5oYXNoc29fYnVjX3BvcHVsYXRlZCA9 IGZhbHNlOwogCXNvLT5oYXNoc29fYnVjX3NwbGl0ID0gZmFsc2U7CiAKLQlzby0+a2lsbGVkSXRl bXMgPSBOVUxMOwotCXNvLT5udW1LaWxsZWQgPSAwOwotCiAJc2Nhbi0+b3BhcXVlID0gc287CiAK IAlyZXR1cm4gc2NhbjsKQEAgLTQwOCwxOCArMzY5LDggQEAgaGFzaHJlc2NhbihJbmRleFNjYW5E ZXNjIHNjYW4sIFNjYW5LZXkgc2NhbmtleSwgaW50IG5zY2Fua2V5cywKIAlIYXNoU2Nhbk9wYXF1 ZSBzbyA9IChIYXNoU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwogCVJlbGF0aW9uCXJlbCA9IHNj YW4tPmluZGV4UmVsYXRpb247CiAKLQlpZiAoSGFzaFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9z KSkKLQl7Ci0JCS8qIEJlZm9yZSBsZWF2aW5nIGN1cnJlbnQgcGFnZSwgZGVhbCB3aXRoIGFueSBr aWxsZWQgaXRlbXMgKi8KLQkJaWYgKHNvLT5udW1LaWxsZWQgPiAwKQotCQkJX2hhc2hfa2lsbF9p dGVtcyhzY2FuKTsKLQl9Ci0KIAlfaGFzaF9kcm9wc2NhbmJ1ZihyZWwsIHNvKTsKIAotCS8qIHNl dCBwb3NpdGlvbiBpbnZhbGlkICh0aGlzIHdpbGwgY2F1c2UgX2hhc2hfZmlyc3QgY2FsbCkgKi8K LQlIYXNoU2NhblBvc0ludmFsaWRhdGUoc28tPmN1cnJQb3MpOwotCiAJLyogVXBkYXRlIHNjYW4g a2V5LCBpZiBhIG5ldyBvbmUgaXMgZ2l2ZW4gKi8KIAlpZiAoc2NhbmtleSAmJiBzY2FuLT5udW1i ZXJPZktleXMgPiAwKQogCQltZW1jcHkoc2Nhbi0+a2V5RGF0YSwgc2NhbmtleSwgc2Nhbi0+bnVt YmVyT2ZLZXlzICogc2l6ZW9mKFNjYW5LZXlEYXRhKSk7CkBAIC00MjgsNiArMzc5LDI4IEBAIGhh c2hyZXNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuS2V5IHNjYW5rZXksIGludCBuc2Nhbmtl eXMsCiAJc28tPmhhc2hzb19idWNfc3BsaXQgPSBmYWxzZTsKIH0KIAorLyoKKyAqCWhhc2hmcmVl YmF0Y2goKSAtLSBGcmVlIGJhdGNoIHJlc291cmNlcywgaW5jbHVkaW5nIGl0cyBidWZmZXIgcGlu CisgKi8KK3ZvaWQKK2hhc2hmcmVlYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBCYXRjaEluZGV4 U2NhbiBiYXRjaCkKK3sKKwkvKgorCSAqIENoZWNrIGlmIHRoZXJlIGFyZSB0dXBsZXMgdG8ga2ls bCBmcm9tIHRoaXMgYmF0Y2ggKHRoYXQgd2VyZW4ndCBhbHJlYWR5CisJICoga2lsbGVkIGVhcmxp ZXIgb24pCisJICovCisJaWYgKGJhdGNoLT5udW1LaWxsZWQgPiAwKQorCQlfaGFzaF9raWxsX2l0 ZW1zKHNjYW4sIGJhdGNoKTsKKworCWlmICghc2Nhbi0+YmF0Y2hxdWV1ZS0+ZHJvcFBpbikKKwl7 CisJCVJlbGVhc2VCdWZmZXIoYmF0Y2gtPmJ1Zik7CisJCWJhdGNoLT5idWYgPSBJbnZhbGlkQnVm ZmVyOworCX0KKworCWluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlKHNjYW4sIGJhdGNoKTsKK30K KwogLyoKICAqCWhhc2hlbmRzY2FuKCkgLS0gY2xvc2UgZG93biBhIHNjYW4KICAqLwpAQCAtNDM3 LDE3ICs0MTAsOCBAQCBoYXNoZW5kc2NhbihJbmRleFNjYW5EZXNjIHNjYW4pCiAJSGFzaFNjYW5P cGFxdWUgc28gPSAoSGFzaFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKIAlSZWxhdGlvbglyZWwg PSBzY2FuLT5pbmRleFJlbGF0aW9uOwogCi0JaWYgKEhhc2hTY2FuUG9zSXNWYWxpZChzby0+Y3Vy clBvcykpCi0JewotCQkvKiBCZWZvcmUgbGVhdmluZyBjdXJyZW50IHBhZ2UsIGRlYWwgd2l0aCBh bnkga2lsbGVkIGl0ZW1zICovCi0JCWlmIChzby0+bnVtS2lsbGVkID4gMCkKLQkJCV9oYXNoX2tp bGxfaXRlbXMoc2Nhbik7Ci0JfQotCiAJX2hhc2hfZHJvcHNjYW5idWYocmVsLCBzbyk7CiAKLQlp ZiAoc28tPmtpbGxlZEl0ZW1zICE9IE5VTEwpCi0JCXBmcmVlKHNvLT5raWxsZWRJdGVtcyk7CiAJ cGZyZWUoc28pOwogCXNjYW4tPm9wYXF1ZSA9IE5VTEw7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9hY2Nlc3MvaGFzaC9oYXNocGFnZS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFz aHBhZ2UuYwppbmRleCBiOGU1YmQwMDUuLmIwYjBjNTMwYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvYWNjZXNzL2hhc2gvaGFzaHBhZ2UuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9o YXNocGFnZS5jCkBAIC0yODAsMzEgKzI4MCwyNCBAQCBfaGFzaF9kcm9wYnVmKFJlbGF0aW9uIHJl bCwgQnVmZmVyIGJ1ZikKIH0KIAogLyoKLSAqCV9oYXNoX2Ryb3BzY2FuYnVmKCkgLS0gcmVsZWFz ZSBidWZmZXJzIHVzZWQgaW4gc2Nhbi4KKyAqCV9oYXNoX2Ryb3BzY2FuYnVmKCkgLS0gcmVsZWFz ZSBidWZmZXJzIG93bmVkIGJ5IHNjYW4uCiAgKgotICogVGhpcyByb3V0aW5lIHVucGlucyB0aGUg YnVmZmVycyB1c2VkIGR1cmluZyBzY2FuIG9uIHdoaWNoIHdlCi0gKiBob2xkIG5vIGxvY2suCisg KiBUaGlzIHJvdXRpbmUgdW5waW5zIHRoZSBidWZmZXJzIGZvciB0aGUgcHJpbWFyeSBidWNrZXQg cGFnZSBhbmQgZm9yIHRoZQorICogYnVja2V0IHBhZ2Ugb2YgYSBidWNrZXQgYmVpbmcgc3BsaXQg YXMgbmVlZGVkLgogICovCiB2b2lkCiBfaGFzaF9kcm9wc2NhbmJ1ZihSZWxhdGlvbiByZWwsIEhh c2hTY2FuT3BhcXVlIHNvKQogewogCS8qIHJlbGVhc2UgcGluIHdlIGhvbGQgb24gcHJpbWFyeSBi dWNrZXQgcGFnZSAqLwotCWlmIChCdWZmZXJJc1ZhbGlkKHNvLT5oYXNoc29fYnVja2V0X2J1Zikg JiYKLQkJc28tPmhhc2hzb19idWNrZXRfYnVmICE9IHNvLT5jdXJyUG9zLmJ1ZikKKwlpZiAoQnVm ZmVySXNWYWxpZChzby0+aGFzaHNvX2J1Y2tldF9idWYpKQogCQlfaGFzaF9kcm9wYnVmKHJlbCwg c28tPmhhc2hzb19idWNrZXRfYnVmKTsKIAlzby0+aGFzaHNvX2J1Y2tldF9idWYgPSBJbnZhbGlk QnVmZmVyOwogCi0JLyogcmVsZWFzZSBwaW4gd2UgaG9sZCBvbiBwcmltYXJ5IGJ1Y2tldCBwYWdl ICBvZiBidWNrZXQgYmVpbmcgc3BsaXQgKi8KLQlpZiAoQnVmZmVySXNWYWxpZChzby0+aGFzaHNv X3NwbGl0X2J1Y2tldF9idWYpICYmCi0JCXNvLT5oYXNoc29fc3BsaXRfYnVja2V0X2J1ZiAhPSBz by0+Y3VyclBvcy5idWYpCisJLyogcmVsZWFzZSBwaW4gaGVsZCBvbiBwcmltYXJ5IGJ1Y2tldCBw YWdlIG9mIGJ1Y2tldCBiZWluZyBzcGxpdCAqLworCWlmIChCdWZmZXJJc1ZhbGlkKHNvLT5oYXNo c29fc3BsaXRfYnVja2V0X2J1ZikpCiAJCV9oYXNoX2Ryb3BidWYocmVsLCBzby0+aGFzaHNvX3Nw bGl0X2J1Y2tldF9idWYpOwogCXNvLT5oYXNoc29fc3BsaXRfYnVja2V0X2J1ZiA9IEludmFsaWRC dWZmZXI7CiAKLQkvKiByZWxlYXNlIGFueSBwaW4gd2Ugc3RpbGwgaG9sZCAqLwotCWlmIChCdWZm ZXJJc1ZhbGlkKHNvLT5jdXJyUG9zLmJ1ZikpCi0JCV9oYXNoX2Ryb3BidWYocmVsLCBzby0+Y3Vy clBvcy5idWYpOwotCXNvLT5jdXJyUG9zLmJ1ZiA9IEludmFsaWRCdWZmZXI7Ci0KIAkvKiByZXNl dCBzcGxpdCBzY2FuICovCiAJc28tPmhhc2hzb19idWNfcG9wdWxhdGVkID0gZmFsc2U7CiAJc28t Pmhhc2hzb19idWNfc3BsaXQgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vz cy9oYXNoL2hhc2hzZWFyY2guYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hzZWFyY2gu YwppbmRleCA5MmMxNWE2NWIuLmVjZmNmODAxZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNj ZXNzL2hhc2gvaGFzaHNlYXJjaC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hz ZWFyY2guYwpAQCAtMjIsMTA0ICsyMiw3NSBAQAogI2luY2x1ZGUgInV0aWxzL3JlbC5oIgogCiBz dGF0aWMgYm9vbCBfaGFzaF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIEJ1ZmZlciAqYnVm UCwKLQkJCQkJCSAgIFNjYW5EaXJlY3Rpb24gZGlyKTsKKwkJCQkJCSAgIFNjYW5EaXJlY3Rpb24g ZGlyLCBCYXRjaEluZGV4U2NhbiBiYXRjaCk7CiBzdGF0aWMgaW50CV9oYXNoX2xvYWRfcXVhbGlm aWVkX2l0ZW1zKEluZGV4U2NhbkRlc2Mgc2NhbiwgUGFnZSBwYWdlLAotCQkJCQkJCQkJICAgT2Zm c2V0TnVtYmVyIG9mZm51bSwgU2NhbkRpcmVjdGlvbiBkaXIpOwotc3RhdGljIGlubGluZSB2b2lk IF9oYXNoX3NhdmVpdGVtKEhhc2hTY2FuT3BhcXVlIHNvLCBpbnQgaXRlbUluZGV4LAorCQkJCQkJ CQkJICAgT2Zmc2V0TnVtYmVyIG9mZm51bSwgU2NhbkRpcmVjdGlvbiBkaXIsCisJCQkJCQkJCQkg ICBCYXRjaEluZGV4U2NhbiBiYXRjaCk7CitzdGF0aWMgaW5saW5lIHZvaWQgX2hhc2hfc2F2ZWl0 ZW0oQmF0Y2hJbmRleFNjYW4gYmF0Y2gsIGludCBpdGVtSW5kZXgsCiAJCQkJCQkJCSAgT2Zmc2V0 TnVtYmVyIG9mZm51bSwgSW5kZXhUdXBsZSBpdHVwKTsKIHN0YXRpYyB2b2lkIF9oYXNoX3JlYWRu ZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwgQnVmZmVyICpidWZwLAogCQkJCQkJICAgUGFnZSAqcGFn ZXAsIEhhc2hQYWdlT3BhcXVlICpvcGFxdWVwKTsKIAogLyoKLSAqCV9oYXNoX25leHQoKSAtLSBH ZXQgdGhlIG5leHQgaXRlbSBpbiBhIHNjYW4uCisgKglfaGFzaF9uZXh0KCkgLS0gR2V0IHRoZSBu ZXh0IGJhdGNoIG9mIGl0ZW1zIGluIGEgc2Nhbi4KICAqCi0gKgkJT24gZW50cnksIHNvLT5jdXJy UG9zIGRlc2NyaWJlcyB0aGUgY3VycmVudCBwYWdlLCB3aGljaCBtYXkKLSAqCQliZSBwaW5uZWQg YnV0IG5vdCBsb2NrZWQsIGFuZCBzby0+Y3VyclBvcy5pdGVtSW5kZXggaWRlbnRpZmllcwotICoJ CXdoaWNoIGl0ZW0gd2FzIHByZXZpb3VzbHkgcmV0dXJuZWQuCisgKgkJT24gZW50cnksIHByaW9y YmF0Y2ggZGVzY3JpYmVzIHRoZSBjdXJyZW50IHBhZ2UgYmF0Y2ggd2l0aCBpdGVtcworICoJCWFs cmVhZHkgcmV0dXJuZWQuCiAgKgotICoJCU9uIHN1Y2Nlc3NmdWwgZXhpdCwgc2Nhbi0+eHNfaGVh cHRpZCBpcyBzZXQgdG8gdGhlIFRJRCBvZiB0aGUgbmV4dAotICoJCWhlYXAgdHVwbGUuICBzby0+ Y3VyclBvcyBpcyB1cGRhdGVkIGFzIG5lZWRlZC4KKyAqCQlPbiBzdWNjZXNzZnVsIGV4aXQsIHJl dHVybnMgYSBuZXcgYmF0Y2ggY29udGFpbmluZyB0aGUgbmV4dCBpdGVtcyBmcm9tCisgKgkJdGhl IG5leHQgcGFnZSAoZGV0ZXJtaW5lZCBieSBwcmlvcmJhdGNoIG5hdmlnYXRpb24gaW5mbykuCiAg KgotICoJCU9uIGZhaWx1cmUgZXhpdCAobm8gbW9yZSB0dXBsZXMpLCB3ZSByZXR1cm4gZmFsc2Ug d2l0aCBwaW4KKyAqCQlPbiBmYWlsdXJlIGV4aXQgKG5vIG1vcmUgdHVwbGVzKSwgd2UgcmV0dXJu IE5VTEwgd2l0aCBwaW4KICAqCQloZWxkIG9uIGJ1Y2tldCBwYWdlIGJ1dCBubyBwaW5zIG9yIGxv Y2tzIGhlbGQgb24gb3ZlcmZsb3cKICAqCQlwYWdlLgogICovCi1ib29sCi1faGFzaF9uZXh0KElu ZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCitCYXRjaEluZGV4U2NhbgorX2hh c2hfbmV4dChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBCYXRjaEluZGV4 U2NhbiBwcmlvcmJhdGNoKQogewogCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247 CiAJSGFzaFNjYW5PcGFxdWUgc28gPSAoSGFzaFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKLQlI YXNoU2NhblBvc0l0ZW0gKmN1cnJJdGVtOwogCUJsb2NrTnVtYmVyIGJsa25vOwogCUJ1ZmZlcgkJ YnVmOwotCWJvb2wJCWVuZF9vZl9zY2FuID0gZmFsc2U7CisJQmF0Y2hJbmRleFNjYW4gYmF0Y2g7 CiAKIAkvKgotCSAqIEFkdmFuY2UgdG8gdGhlIG5leHQgdHVwbGUgb24gdGhlIGN1cnJlbnQgcGFn ZTsgb3IgaWYgZG9uZSwgdHJ5IHRvIHJlYWQKLQkgKiBkYXRhIGZyb20gdGhlIG5leHQgb3IgcHJl dmlvdXMgcGFnZSBiYXNlZCBvbiB0aGUgc2NhbiBkaXJlY3Rpb24uIEJlZm9yZQotCSAqIG1vdmlu ZyB0byB0aGUgbmV4dCBvciBwcmV2aW91cyBwYWdlIG1ha2Ugc3VyZSB0aGF0IHdlIGRlYWwgd2l0 aCBhbGwgdGhlCi0JICoga2lsbGVkIGl0ZW1zLgorCSAqIERldGVybWluZSB3aGljaCBwYWdlIHRv IHJlYWQgbmV4dCBiYXNlZCBvbiBzY2FuIGRpcmVjdGlvbiBhbmQgZGV0YWlscworCSAqIHRha2Vu IGZyb20gdGhlIHByaW9yIGJhdGNoCiAJICovCiAJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQo ZGlyKSkKIAl7Ci0JCWlmICgrK3NvLT5jdXJyUG9zLml0ZW1JbmRleCA+IHNvLT5jdXJyUG9zLmxh c3RJdGVtKQorCQlibGtubyA9IHByaW9yYmF0Y2gtPm5leHRQYWdlOworCQlpZiAoIUJsb2NrTnVt YmVySXNWYWxpZChibGtubykgfHwgIXByaW9yYmF0Y2gtPm1vcmVSaWdodCkKIAkJewotCQkJaWYg KHNvLT5udW1LaWxsZWQgPiAwKQotCQkJCV9oYXNoX2tpbGxfaXRlbXMoc2Nhbik7Ci0KLQkJCWJs a25vID0gc28tPmN1cnJQb3MubmV4dFBhZ2U7Ci0JCQlpZiAoQmxvY2tOdW1iZXJJc1ZhbGlkKGJs a25vKSkKLQkJCXsKLQkJCQlidWYgPSBfaGFzaF9nZXRidWYocmVsLCBibGtubywgSEFTSF9SRUFE LCBMSF9PVkVSRkxPV19QQUdFKTsKLQkJCQlpZiAoIV9oYXNoX3JlYWRwYWdlKHNjYW4sICZidWYs IGRpcikpCi0JCQkJCWVuZF9vZl9zY2FuID0gdHJ1ZTsKLQkJCX0KLQkJCWVsc2UKLQkJCQllbmRf b2Zfc2NhbiA9IHRydWU7CisJCQlfaGFzaF9kcm9wc2NhbmJ1ZihyZWwsIHNvKTsKKwkJCXJldHVy biBOVUxMOwogCQl9CiAJfQogCWVsc2UKIAl7Ci0JCWlmICgtLXNvLT5jdXJyUG9zLml0ZW1JbmRl eCA8IHNvLT5jdXJyUG9zLmZpcnN0SXRlbSkKKwkJYmxrbm8gPSBwcmlvcmJhdGNoLT5wcmV2UGFn ZTsKKwkJaWYgKCFCbG9ja051bWJlcklzVmFsaWQoYmxrbm8pIHx8ICFwcmlvcmJhdGNoLT5tb3Jl TGVmdCkKIAkJewotCQkJaWYgKHNvLT5udW1LaWxsZWQgPiAwKQotCQkJCV9oYXNoX2tpbGxfaXRl bXMoc2Nhbik7Ci0KLQkJCWJsa25vID0gc28tPmN1cnJQb3MucHJldlBhZ2U7Ci0JCQlpZiAoQmxv Y2tOdW1iZXJJc1ZhbGlkKGJsa25vKSkKLQkJCXsKLQkJCQlidWYgPSBfaGFzaF9nZXRidWYocmVs LCBibGtubywgSEFTSF9SRUFELAotCQkJCQkJCQkgICBMSF9CVUNLRVRfUEFHRSB8IExIX09WRVJG TE9XX1BBR0UpOwotCi0JCQkJLyoKLQkJCQkgKiBXZSBhbHdheXMgbWFpbnRhaW4gdGhlIHBpbiBv biBidWNrZXQgcGFnZSBmb3Igd2hvbGUgc2NhbgotCQkJCSAqIG9wZXJhdGlvbiwgc28gcmVsZWFz aW5nIHRoZSBhZGRpdGlvbmFsIHBpbiB3ZSBoYXZlIGFjcXVpcmVkCi0JCQkJICogaGVyZS4KLQkJ CQkgKi8KLQkJCQlpZiAoYnVmID09IHNvLT5oYXNoc29fYnVja2V0X2J1ZiB8fAotCQkJCQlidWYg PT0gc28tPmhhc2hzb19zcGxpdF9idWNrZXRfYnVmKQotCQkJCQlfaGFzaF9kcm9wYnVmKHJlbCwg YnVmKTsKLQotCQkJCWlmICghX2hhc2hfcmVhZHBhZ2Uoc2NhbiwgJmJ1ZiwgZGlyKSkKLQkJCQkJ ZW5kX29mX3NjYW4gPSB0cnVlOwotCQkJfQotCQkJZWxzZQotCQkJCWVuZF9vZl9zY2FuID0gdHJ1 ZTsKKwkJCV9oYXNoX2Ryb3BzY2FuYnVmKHJlbCwgc28pOworCQkJcmV0dXJuIE5VTEw7CiAJCX0K IAl9CiAKLQlpZiAoZW5kX29mX3NjYW4pCisJLyogQWxsb2NhdGUgc3BhY2UgZm9yIG5leHQgYmF0 Y2ggKi8KKwliYXRjaCA9IGluZGV4YW1fdXRpbF9iYXRjaF9hbGxvYyhzY2FuLCBNYXhJbmRleFR1 cGxlc1BlclBhZ2UsIGZhbHNlKTsKKworCS8qIEdldCB0aGUgYnVmZmVyIGZvciBuZXh0IGJhdGNo ICovCisJYnVmID0gX2hhc2hfZ2V0YnVmKHJlbCwgYmxrbm8sIEhBU0hfUkVBRCwgTEhfT1ZFUkZM T1dfUEFHRSk7CisKKwkvKiBSZWFkIHRoZSBuZXh0IHBhZ2UgYW5kIGxvYWQgaXRlbXMgaW50byBh bGxvY2F0ZWQgYmF0Y2ggKi8KKwlpZiAoIV9oYXNoX3JlYWRwYWdlKHNjYW4sICZidWYsIGRpciwg YmF0Y2gpKQogCXsKLQkJX2hhc2hfZHJvcHNjYW5idWYocmVsLCBzbyk7Ci0JCUhhc2hTY2FuUG9z SW52YWxpZGF0ZShzby0+Y3VyclBvcyk7Ci0JCXJldHVybiBmYWxzZTsKKwkJaW5kZXhhbV91dGls X2JhdGNoX3JlbGVhc2Uoc2NhbiwgYmF0Y2gpOworCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQkvKiBP SywgaXRlbUluZGV4IHNheXMgd2hhdCB0byByZXR1cm4gKi8KLQljdXJySXRlbSA9ICZzby0+Y3Vy clBvcy5pdGVtc1tzby0+Y3VyclBvcy5pdGVtSW5kZXhdOwotCXNjYW4tPnhzX2hlYXB0aWQgPSBj dXJySXRlbS0+aGVhcFRpZDsKLQotCXJldHVybiB0cnVlOworCS8qIFJldHVybiB0aGUgYmF0Y2gg Y29udGFpbmluZyBtYXRjaGVkIGl0ZW1zIGZyb20gbmV4dCBwYWdlICovCisJcmV0dXJuIGJhdGNo OwogfQogCiAvKgpAQCAtMjY5LDIyICsyNDAsMjEgQEAgX2hhc2hfcmVhZHByZXYoSW5kZXhTY2Fu RGVzYyBzY2FuLAogfQogCiAvKgotICoJX2hhc2hfZmlyc3QoKSAtLSBGaW5kIHRoZSBmaXJzdCBp dGVtIGluIGEgc2Nhbi4KKyAqCV9oYXNoX2ZpcnN0KCkgLS0gRmluZCB0aGUgZmlyc3QgYmF0Y2gg b2YgaXRlbXMgaW4gYSBzY2FuLgogICoKLSAqCQlXZSBmaW5kIHRoZSBmaXJzdCBpdGVtIChvciwg aWYgYmFja3dhcmQgc2NhbiwgdGhlIGxhc3QgaXRlbSkgaW4gdGhlCi0gKgkJaW5kZXggdGhhdCBz YXRpc2ZpZXMgdGhlIHF1YWxpZmljYXRpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBzY2FuCi0gKgkJ ZGVzY3JpcHRvci4KKyAqCQlXZSBmaW5kIHRoZSBmaXJzdCBiYXRjaCBvZiBpdGVtcyAob3IsIGlm IGJhY2t3YXJkIHNjYW4sIHRoZSBsYXN0CisgKgkJYmF0Y2gpIGluIHRoZSBpbmRleCB0aGF0IHNh dGlzZmllcyB0aGUgcXVhbGlmaWNhdGlvbiBhc3NvY2lhdGVkIHdpdGgKKyAqCQl0aGUgc2NhbiBk ZXNjcmlwdG9yLgogICoKLSAqCQlPbiBzdWNjZXNzZnVsIGV4aXQsIGlmIHRoZSBwYWdlIGNvbnRh aW5pbmcgY3VycmVudCBpbmRleCB0dXBsZSBpcyBhbgotICoJCW92ZXJmbG93IHBhZ2UsIGJvdGgg cGluIGFuZCBsb2NrIGFyZSByZWxlYXNlZCB3aGVyZWFzIGlmIGl0IGlzIGEgYnVja2V0Ci0gKgkJ cGFnZSB0aGVuIGl0IGlzIHBpbm5lZCBidXQgbm90IGxvY2tlZCBhbmQgZGF0YSBhYm91dCB0aGUg bWF0Y2hpbmcKLSAqCQl0dXBsZShzKSBvbiB0aGUgcGFnZSBoYXMgYmVlbiBsb2FkZWQgaW50byBz by0+Y3VyclBvcywKLSAqCQlzY2FuLT54c19oZWFwdGlkIGlzIHNldCB0byB0aGUgaGVhcCBUSUQg b2YgdGhlIGN1cnJlbnQgdHVwbGUuCisgKgkJT24gc3VjY2Vzc2Z1bCBleGl0LCByZXR1cm5zIGEg YmF0Y2ggY29udGFpbmluZyBtYXRjaGluZyBpdGVtcy4gSWYgdGhlCisgKgkJcGFnZSBpcyBhIGJ1 Y2tldCBwYWdlLCBpdCByZW1haW5zIHBpbm5lZCBidXQgbm90IGxvY2tlZC4gSWYgaXQgaXMgYW4K KyAqCQlvdmVyZmxvdyBwYWdlLCBib3RoIHBpbiBhbmQgbG9jayBhcmUgcmVsZWFzZWQgYW5kIGJh dGNoLT5idWYgaXMKKyAqCQlJbnZhbGlkQnVmZmVyLgogICoKLSAqCQlPbiBmYWlsdXJlIGV4aXQg KG5vIG1vcmUgdHVwbGVzKSwgd2UgcmV0dXJuIGZhbHNlLCB3aXRoIHBpbiBoZWxkIG9uCisgKgkJ T24gZmFpbHVyZSBleGl0IChubyBtYXRjaGluZyBpdGVtcyksIHdlIHJldHVybiBOVUxMLCB3aXRo IHBpbiBoZWxkIG9uCiAgKgkJYnVja2V0IHBhZ2UgYnV0IG5vIHBpbnMgb3IgbG9ja3MgaGVsZCBv biBvdmVyZmxvdyBwYWdlLgogICovCi1ib29sCitCYXRjaEluZGV4U2NhbgogX2hhc2hfZmlyc3Qo SW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIHsKIAlSZWxhdGlvbglyZWwg PSBzY2FuLT5pbmRleFJlbGF0aW9uOwpAQCAtMjk1LDcgKzI2NSw3IEBAIF9oYXNoX2ZpcnN0KElu ZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJQnVmZmVyCQlidWY7CiAJUGFn ZQkJcGFnZTsKIAlIYXNoUGFnZU9wYXF1ZSBvcGFxdWU7Ci0JSGFzaFNjYW5Qb3NJdGVtICpjdXJy SXRlbTsKKwlCYXRjaEluZGV4U2NhbiBiYXRjaDsKIAogCXBnc3RhdF9jb3VudF9pbmRleF9zY2Fu KHJlbCk7CiAJaWYgKHNjYW4tPmluc3RydW1lbnQpCkBAIC0zMjUsNyArMjk1LDcgQEAgX2hhc2hf Zmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAkgKiBpdGVtcyBp biB0aGUgaW5kZXguCiAJICovCiAJaWYgKGN1ci0+c2tfZmxhZ3MgJiBTS19JU05VTEwpCi0JCXJl dHVybiBmYWxzZTsKKwkJcmV0dXJuIE5VTEw7CiAKIAkvKgogCSAqIE9rYXkgdG8gY29tcHV0ZSB0 aGUgaGFzaCBrZXkuICBXZSB3YW50IHRvIGRvIHRoaXMgYmVmb3JlIGFjcXVpcmluZyBhbnkKQEAg LTQxOCwzNCArMzg4LDMzIEBAIF9oYXNoX2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRp cmVjdGlvbiBkaXIpCiAJCQlfaGFzaF9yZWFkbmV4dChzY2FuLCAmYnVmLCAmcGFnZSwgJm9wYXF1 ZSk7CiAJfQogCi0JLyogcmVtZW1iZXIgd2hpY2ggYnVmZmVyIHdlIGhhdmUgcGlubmVkLCBpZiBh bnkgKi8KLQlBc3NlcnQoQnVmZmVySXNJbnZhbGlkKHNvLT5jdXJyUG9zLmJ1ZikpOwotCXNvLT5j dXJyUG9zLmJ1ZiA9IGJ1ZjsKKwkvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgZmlyc3QgYmF0Y2ggKi8K KwliYXRjaCA9IGluZGV4YW1fdXRpbF9iYXRjaF9hbGxvYyhzY2FuLCBNYXhJbmRleFR1cGxlc1Bl clBhZ2UsIGZhbHNlKTsKIAotCS8qIE5vdyBmaW5kIGFsbCB0aGUgdHVwbGVzIHNhdGlzZnlpbmcg dGhlIHF1YWxpZmljYXRpb24gZnJvbSBhIHBhZ2UgKi8KLQlpZiAoIV9oYXNoX3JlYWRwYWdlKHNj YW4sICZidWYsIGRpcikpCi0JCXJldHVybiBmYWxzZTsKKwkvKiBSZWFkIHRoZSBmaXJzdCBwYWdl IGFuZCBsb2FkIGl0ZW1zIGludG8gYWxsb2NhdGVkIGJhdGNoICovCisJaWYgKCFfaGFzaF9yZWFk cGFnZShzY2FuLCAmYnVmLCBkaXIsIGJhdGNoKSkKKwl7CisJCWluZGV4YW1fdXRpbF9iYXRjaF9y ZWxlYXNlKHNjYW4sIGJhdGNoKTsKKwkJcmV0dXJuIE5VTEw7CisJfQogCi0JLyogT0ssIGl0ZW1J bmRleCBzYXlzIHdoYXQgdG8gcmV0dXJuICovCi0JY3Vyckl0ZW0gPSAmc28tPmN1cnJQb3MuaXRl bXNbc28tPmN1cnJQb3MuaXRlbUluZGV4XTsKLQlzY2FuLT54c19oZWFwdGlkID0gY3Vyckl0ZW0t PmhlYXBUaWQ7Ci0KLQkvKiBpZiB3ZSdyZSBoZXJlLCBfaGFzaF9yZWFkcGFnZSBmb3VuZCBhIHZh bGlkIHR1cGxlcyAqLwotCXJldHVybiB0cnVlOworCS8qIFJldHVybiB0aGUgYmF0Y2ggY29udGFp bmluZyBtYXRjaGVkIGl0ZW1zICovCisJcmV0dXJuIGJhdGNoOwogfQogCiAvKgotICoJX2hhc2hf cmVhZHBhZ2UoKSAtLSBMb2FkIGRhdGEgZnJvbSBjdXJyZW50IGluZGV4IHBhZ2UgaW50byBzby0+ Y3VyclBvcworICoJX2hhc2hfcmVhZHBhZ2UoKSAtLSBMb2FkIGRhdGEgZnJvbSBjdXJyZW50IGlu ZGV4IHBhZ2UgaW50byBiYXRjaAogICoKICAqCVdlIHNjYW4gYWxsIHRoZSBpdGVtcyBpbiB0aGUg Y3VycmVudCBpbmRleCBwYWdlIGFuZCBzYXZlIHRoZW0gaW50bwotICoJc28tPmN1cnJQb3MgaWYg aXQgc2F0aXNmaWVzIHRoZSBxdWFsaWZpY2F0aW9uLiBJZiBubyBtYXRjaGluZyBpdGVtcworICoJ dGhlIGJhdGNoIGlmIHRoZXkgc2F0aXNmeSB0aGUgcXVhbGlmaWNhdGlvbi4gSWYgbm8gbWF0Y2hp bmcgaXRlbXMKICAqCWFyZSBmb3VuZCBpbiB0aGUgY3VycmVudCBwYWdlLCB3ZSBtb3ZlIHRvIHRo ZSBuZXh0IG9yIHByZXZpb3VzIHBhZ2UKICAqCWluIGEgYnVja2V0IGNoYWluIGFzIGluZGljYXRl ZCBieSB0aGUgZGlyZWN0aW9uLgogICoKICAqCVJldHVybiB0cnVlIGlmIGFueSBtYXRjaGluZyBp dGVtcyBhcmUgZm91bmQgZWxzZSByZXR1cm4gZmFsc2UuCiAgKi8KIHN0YXRpYyBib29sCi1faGFz aF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIEJ1ZmZlciAqYnVmUCwgU2NhbkRpcmVjdGlv biBkaXIpCitfaGFzaF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIEJ1ZmZlciAqYnVmUCwg U2NhbkRpcmVjdGlvbiBkaXIsCisJCQkgICBCYXRjaEluZGV4U2NhbiBiYXRjaCkKIHsKIAlSZWxh dGlvbglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOwogCUhhc2hTY2FuT3BhcXVlIHNvID0gKEhh c2hTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CkBAIC00NjEsOCArNDMwLDggQEAgX2hhc2hfcmVh ZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBCdWZmZXIgKmJ1ZlAsIFNjYW5EaXJlY3Rpb24gZGly KQogCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGJ1Zik7CiAJb3BhcXVlID0gSGFzaFBhZ2VHZXRPcGFx dWUocGFnZSk7CiAKLQlzby0+Y3VyclBvcy5idWYgPSBidWY7Ci0Jc28tPmN1cnJQb3MuY3VyclBh Z2UgPSBCdWZmZXJHZXRCbG9ja051bWJlcihidWYpOworCWJhdGNoLT5idWYgPSBidWY7CisJYmF0 Y2gtPmN1cnJQYWdlID0gQnVmZmVyR2V0QmxvY2tOdW1iZXIoYnVmKTsKIAogCWlmIChTY2FuRGly ZWN0aW9uSXNGb3J3YXJkKGRpcikpCiAJewpAQCAtNDczLDI1ICs0NDIsMjEgQEAgX2hhc2hfcmVh ZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBCdWZmZXIgKmJ1ZlAsIFNjYW5EaXJlY3Rpb24gZGly KQogCQkJLyogbmV3IHBhZ2UsIGxvY2F0ZSBzdGFydGluZyBwb3NpdGlvbiBieSBiaW5hcnkgc2Vh cmNoICovCiAJCQlvZmZudW0gPSBfaGFzaF9iaW5zZWFyY2gocGFnZSwgc28tPmhhc2hzb19za19o YXNoKTsKIAotCQkJaXRlbUluZGV4ID0gX2hhc2hfbG9hZF9xdWFsaWZpZWRfaXRlbXMoc2Nhbiwg cGFnZSwgb2ZmbnVtLCBkaXIpOworCQkJaXRlbUluZGV4ID0gX2hhc2hfbG9hZF9xdWFsaWZpZWRf aXRlbXMoc2NhbiwgcGFnZSwgb2ZmbnVtLCBkaXIsCisJCQkJCQkJCQkJCQkgICBiYXRjaCk7CiAK IAkJCWlmIChpdGVtSW5kZXggIT0gMCkKIAkJCQlicmVhazsKIAogCQkJLyoKIAkJCSAqIENvdWxk IG5vdCBmaW5kIGFueSBtYXRjaGluZyB0dXBsZXMgaW4gdGhlIGN1cnJlbnQgcGFnZSwgbW92ZSB0 bwotCQkJICogdGhlIG5leHQgcGFnZS4gQmVmb3JlIGxlYXZpbmcgdGhlIGN1cnJlbnQgcGFnZSwg ZGVhbCB3aXRoIGFueQotCQkJICoga2lsbGVkIGl0ZW1zLgotCQkJICovCi0JCQlpZiAoc28tPm51 bUtpbGxlZCA+IDApCi0JCQkJX2hhc2hfa2lsbF9pdGVtcyhzY2FuKTsKLQotCQkJLyoKKwkJCSAq IHRoZSBuZXh0IHBhZ2UuCisJCQkgKgogCQkJICogSWYgdGhpcyBpcyBhIHByaW1hcnkgYnVja2V0 IHBhZ2UsIGhhc2hvX3ByZXZibGtubyBpcyBub3QgYSByZWFsCiAJCQkgKiBibG9jayBudW1iZXIu CiAJCQkgKi8KLQkJCWlmIChzby0+Y3VyclBvcy5idWYgPT0gc28tPmhhc2hzb19idWNrZXRfYnVm IHx8Ci0JCQkJc28tPmN1cnJQb3MuYnVmID09IHNvLT5oYXNoc29fc3BsaXRfYnVja2V0X2J1ZikK KwkJCWlmIChiYXRjaC0+YnVmID09IHNvLT5oYXNoc29fYnVja2V0X2J1ZiB8fAorCQkJCWJhdGNo LT5idWYgPT0gc28tPmhhc2hzb19zcGxpdF9idWNrZXRfYnVmKQogCQkJCXByZXZfYmxrbm8gPSBJ bnZhbGlkQmxvY2tOdW1iZXI7CiAJCQllbHNlCiAJCQkJcHJldl9ibGtubyA9IG9wYXF1ZS0+aGFz aG9fcHJldmJsa25vOwpAQCAtNDk5LDI5ICs0NjQsMjUgQEAgX2hhc2hfcmVhZHBhZ2UoSW5kZXhT Y2FuRGVzYyBzY2FuLCBCdWZmZXIgKmJ1ZlAsIFNjYW5EaXJlY3Rpb24gZGlyKQogCQkJX2hhc2hf cmVhZG5leHQoc2NhbiwgJmJ1ZiwgJnBhZ2UsICZvcGFxdWUpOwogCQkJaWYgKEJ1ZmZlcklzVmFs aWQoYnVmKSkKIAkJCXsKLQkJCQlzby0+Y3VyclBvcy5idWYgPSBidWY7Ci0JCQkJc28tPmN1cnJQ b3MuY3VyclBhZ2UgPSBCdWZmZXJHZXRCbG9ja051bWJlcihidWYpOworCQkJCWJhdGNoLT5idWYg PSBidWY7CisJCQkJYmF0Y2gtPmN1cnJQYWdlID0gQnVmZmVyR2V0QmxvY2tOdW1iZXIoYnVmKTsK IAkJCX0KIAkJCWVsc2UKIAkJCXsKIAkJCQkvKgogCQkJCSAqIFJlbWVtYmVyIG5leHQgYW5kIHBy ZXZpb3VzIGJsb2NrIG51bWJlcnMgZm9yIHNjcm9sbGFibGUKIAkJCQkgKiBjdXJzb3JzIHRvIGtu b3cgdGhlIHN0YXJ0IHBvc2l0aW9uIGFuZCByZXR1cm4gZmFsc2UKLQkJCQkgKiBpbmRpY2F0aW5n IHRoYXQgbm8gbW9yZSBtYXRjaGluZyB0dXBsZXMgd2VyZSBmb3VuZC4gQWxzbywKLQkJCQkgKiBk b24ndCByZXNldCBjdXJyUGFnZSBvciBsc24sIGJlY2F1c2Ugd2UgZXhwZWN0Ci0JCQkJICogX2hh c2hfa2lsbF9pdGVtcyB0byBiZSBjYWxsZWQgZm9yIHRoZSBvbGQgcGFnZSBhZnRlciB0aGlzCi0J CQkJICogZnVuY3Rpb24gcmV0dXJucy4KKwkJCQkgKiBpbmRpY2F0aW5nIHRoYXQgbm8gbW9yZSBt YXRjaGluZyB0dXBsZXMgd2VyZSBmb3VuZAogCQkJCSAqLwotCQkJCXNvLT5jdXJyUG9zLnByZXZQ YWdlID0gcHJldl9ibGtubzsKLQkJCQlzby0+Y3VyclBvcy5uZXh0UGFnZSA9IEludmFsaWRCbG9j a051bWJlcjsKLQkJCQlzby0+Y3VyclBvcy5idWYgPSBidWY7CisJCQkJYmF0Y2gtPnByZXZQYWdl ID0gcHJldl9ibGtubzsKKwkJCQliYXRjaC0+bmV4dFBhZ2UgPSBJbnZhbGlkQmxvY2tOdW1iZXI7 CisJCQkJYmF0Y2gtPmJ1ZiA9IGJ1ZjsKIAkJCQlyZXR1cm4gZmFsc2U7CiAJCQl9CiAJCX0KIAot CQlzby0+Y3VyclBvcy5maXJzdEl0ZW0gPSAwOwotCQlzby0+Y3VyclBvcy5sYXN0SXRlbSA9IGl0 ZW1JbmRleCAtIDE7Ci0JCXNvLT5jdXJyUG9zLml0ZW1JbmRleCA9IDA7CisJCWJhdGNoLT5maXJz dEl0ZW0gPSAwOworCQliYXRjaC0+bGFzdEl0ZW0gPSBpdGVtSW5kZXggLSAxOwogCX0KIAllbHNl CiAJewpAQCAtNTMyLDc3ICs0OTMsOTEgQEAgX2hhc2hfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBz Y2FuLCBCdWZmZXIgKmJ1ZlAsIFNjYW5EaXJlY3Rpb24gZGlyKQogCQkJLyogbmV3IHBhZ2UsIGxv Y2F0ZSBzdGFydGluZyBwb3NpdGlvbiBieSBiaW5hcnkgc2VhcmNoICovCiAJCQlvZmZudW0gPSBf aGFzaF9iaW5zZWFyY2hfbGFzdChwYWdlLCBzby0+aGFzaHNvX3NrX2hhc2gpOwogCi0JCQlpdGVt SW5kZXggPSBfaGFzaF9sb2FkX3F1YWxpZmllZF9pdGVtcyhzY2FuLCBwYWdlLCBvZmZudW0sIGRp cik7CisJCQlpdGVtSW5kZXggPSBfaGFzaF9sb2FkX3F1YWxpZmllZF9pdGVtcyhzY2FuLCBwYWdl LCBvZmZudW0sIGRpciwKKwkJCQkJCQkJCQkJCSAgIGJhdGNoKTsKIAogCQkJaWYgKGl0ZW1JbmRl eCAhPSBNYXhJbmRleFR1cGxlc1BlclBhZ2UpCiAJCQkJYnJlYWs7CiAKIAkJCS8qCiAJCQkgKiBD b3VsZCBub3QgZmluZCBhbnkgbWF0Y2hpbmcgdHVwbGVzIGluIHRoZSBjdXJyZW50IHBhZ2UsIG1v dmUgdG8KLQkJCSAqIHRoZSBwcmV2aW91cyBwYWdlLiBCZWZvcmUgbGVhdmluZyB0aGUgY3VycmVu dCBwYWdlLCBkZWFsIHdpdGgKLQkJCSAqIGFueSBraWxsZWQgaXRlbXMuCisJCQkgKiB0aGUgcHJl dmlvdXMgcGFnZQogCQkJICovCi0JCQlpZiAoc28tPm51bUtpbGxlZCA+IDApCi0JCQkJX2hhc2hf a2lsbF9pdGVtcyhzY2FuKTsKLQotCQkJaWYgKHNvLT5jdXJyUG9zLmJ1ZiA9PSBzby0+aGFzaHNv X2J1Y2tldF9idWYgfHwKLQkJCQlzby0+Y3VyclBvcy5idWYgPT0gc28tPmhhc2hzb19zcGxpdF9i dWNrZXRfYnVmKQorCQkJaWYgKGJhdGNoLT5idWYgPT0gc28tPmhhc2hzb19idWNrZXRfYnVmIHx8 CisJCQkJYmF0Y2gtPmJ1ZiA9PSBzby0+aGFzaHNvX3NwbGl0X2J1Y2tldF9idWYpCiAJCQkJbmV4 dF9ibGtubyA9IG9wYXF1ZS0+aGFzaG9fbmV4dGJsa25vOwogCiAJCQlfaGFzaF9yZWFkcHJldihz Y2FuLCAmYnVmLCAmcGFnZSwgJm9wYXF1ZSk7CiAJCQlpZiAoQnVmZmVySXNWYWxpZChidWYpKQog CQkJewotCQkJCXNvLT5jdXJyUG9zLmJ1ZiA9IGJ1ZjsKLQkJCQlzby0+Y3VyclBvcy5jdXJyUGFn ZSA9IEJ1ZmZlckdldEJsb2NrTnVtYmVyKGJ1Zik7CisJCQkJYmF0Y2gtPmJ1ZiA9IGJ1ZjsKKwkJ CQliYXRjaC0+Y3VyclBhZ2UgPSBCdWZmZXJHZXRCbG9ja051bWJlcihidWYpOwogCQkJfQogCQkJ ZWxzZQogCQkJewogCQkJCS8qCiAJCQkJICogUmVtZW1iZXIgbmV4dCBhbmQgcHJldmlvdXMgYmxv Y2sgbnVtYmVycyBmb3Igc2Nyb2xsYWJsZQogCQkJCSAqIGN1cnNvcnMgdG8ga25vdyB0aGUgc3Rh cnQgcG9zaXRpb24gYW5kIHJldHVybiBmYWxzZQotCQkJCSAqIGluZGljYXRpbmcgdGhhdCBubyBt b3JlIG1hdGNoaW5nIHR1cGxlcyB3ZXJlIGZvdW5kLiBBbHNvLAotCQkJCSAqIGRvbid0IHJlc2V0 IGN1cnJQYWdlIG9yIGxzbiwgYmVjYXVzZSB3ZSBleHBlY3QKLQkJCQkgKiBfaGFzaF9raWxsX2l0 ZW1zIHRvIGJlIGNhbGxlZCBmb3IgdGhlIG9sZCBwYWdlIGFmdGVyIHRoaXMKLQkJCQkgKiBmdW5j dGlvbiByZXR1cm5zLgorCQkJCSAqIGluZGljYXRpbmcgdGhhdCBubyBtb3JlIG1hdGNoaW5nIHR1 cGxlcyB3ZXJlIGZvdW5kCiAJCQkJICovCi0JCQkJc28tPmN1cnJQb3MucHJldlBhZ2UgPSBJbnZh bGlkQmxvY2tOdW1iZXI7Ci0JCQkJc28tPmN1cnJQb3MubmV4dFBhZ2UgPSBuZXh0X2Jsa25vOwot CQkJCXNvLT5jdXJyUG9zLmJ1ZiA9IGJ1ZjsKKwkJCQliYXRjaC0+cHJldlBhZ2UgPSBJbnZhbGlk QmxvY2tOdW1iZXI7CisJCQkJYmF0Y2gtPm5leHRQYWdlID0gbmV4dF9ibGtubzsKKwkJCQliYXRj aC0+YnVmID0gYnVmOwogCQkJCXJldHVybiBmYWxzZTsKIAkJCX0KIAkJfQogCi0JCXNvLT5jdXJy UG9zLmZpcnN0SXRlbSA9IGl0ZW1JbmRleDsKLQkJc28tPmN1cnJQb3MubGFzdEl0ZW0gPSBNYXhJ bmRleFR1cGxlc1BlclBhZ2UgLSAxOwotCQlzby0+Y3VyclBvcy5pdGVtSW5kZXggPSBNYXhJbmRl eFR1cGxlc1BlclBhZ2UgLSAxOworCQliYXRjaC0+Zmlyc3RJdGVtID0gaXRlbUluZGV4OworCQli YXRjaC0+bGFzdEl0ZW0gPSBNYXhJbmRleFR1cGxlc1BlclBhZ2UgLSAxOwogCX0KIAotCWlmIChz by0+Y3VyclBvcy5idWYgPT0gc28tPmhhc2hzb19idWNrZXRfYnVmIHx8Ci0JCXNvLT5jdXJyUG9z LmJ1ZiA9PSBzby0+aGFzaHNvX3NwbGl0X2J1Y2tldF9idWYpCisJLyogU2F2ZWQgYXQgbGVhc3Qg b25lIG1hdGNoIGluIGJhdGNoLml0ZW1zW10sIHNvIHByZXBhcmUgdG8gcmV0dXJuIGl0ICovCisJ aWYgKGJhdGNoLT5idWYgPT0gc28tPmhhc2hzb19idWNrZXRfYnVmIHx8CisJCWJhdGNoLT5idWYg PT0gc28tPmhhc2hzb19zcGxpdF9idWNrZXRfYnVmKQogCXsKLQkJc28tPmN1cnJQb3MucHJldlBh Z2UgPSBJbnZhbGlkQmxvY2tOdW1iZXI7Ci0JCXNvLT5jdXJyUG9zLm5leHRQYWdlID0gb3BhcXVl LT5oYXNob19uZXh0Ymxrbm87Ci0JCUxvY2tCdWZmZXIoc28tPmN1cnJQb3MuYnVmLCBCVUZGRVJf TE9DS19VTkxPQ0spOworCQkvKgorCQkgKiBCYXRjaCdzIGJ1ZmZlciBpcyBlaXRoZXIgdGhlIHBy aW1hcnkgYnVja2V0LCBvciBhIGJ1Y2tldCBiZWluZworCQkgKiBwb3B1bGF0ZWQgZHVlIHRvIGEg c3BsaXQKKwkJICovCisJCWJhdGNoLT5wcmV2UGFnZSA9IEludmFsaWRCbG9ja051bWJlcjsKKwkJ YmF0Y2gtPm5leHRQYWdlID0gb3BhcXVlLT5oYXNob19uZXh0Ymxrbm87CisJCWJhdGNoLT5tb3Jl TGVmdCA9IChTY2FuRGlyZWN0aW9uSXNCYWNrd2FyZChkaXIpICYmCisJCQkJCQkgICBCbG9ja051 bWJlcklzVmFsaWQoYmF0Y2gtPnByZXZQYWdlKSk7CisJCWJhdGNoLT5tb3JlUmlnaHQgPSAoU2Nh bkRpcmVjdGlvbklzRm9yd2FyZChkaXIpICYmCisJCQkJCQkJQmxvY2tOdW1iZXJJc1ZhbGlkKGJh dGNoLT5uZXh0UGFnZSkpOworCisJCS8qCisJCSAqIEluY3JlbWVudCBsb2NhbCByZWZlcmVuY2Ug Y291bnQgc28gdGhhdCBiYXRjaCBnZXRzIGFuIGluZGVwZW5kZW50CisJCSAqIGJ1ZmZlciByZWZl cmVuY2UgdGhhdCBjYW4gYmUgcmVsZWFzZWQgKGJ5IGhhc2hmcmVlYmF0Y2gpIGJlZm9yZSB0aGUK KwkJICogaGFzaHNvX2J1Y2tldF9idWYvaGFzaHNvX3NwbGl0X2J1Y2tldF9idWYgcmVmZXJlbmNl cyBhcmUgcmVsZWFzZWQKKwkJICovCisJCUluY3JCdWZmZXJSZWZDb3VudChiYXRjaC0+YnVmKTsK IAl9CiAJZWxzZQogCXsKLQkJc28tPmN1cnJQb3MucHJldlBhZ2UgPSBvcGFxdWUtPmhhc2hvX3By ZXZibGtubzsKLQkJc28tPmN1cnJQb3MubmV4dFBhZ2UgPSBvcGFxdWUtPmhhc2hvX25leHRibGtu bzsKLQkJX2hhc2hfcmVsYnVmKHJlbCwgc28tPmN1cnJQb3MuYnVmKTsKLQkJc28tPmN1cnJQb3Mu YnVmID0gSW52YWxpZEJ1ZmZlcjsKKwkJYmF0Y2gtPnByZXZQYWdlID0gb3BhcXVlLT5oYXNob19w cmV2Ymxrbm87CisJCWJhdGNoLT5uZXh0UGFnZSA9IG9wYXF1ZS0+aGFzaG9fbmV4dGJsa25vOwor CQliYXRjaC0+bW9yZUxlZnQgPSAoU2NhbkRpcmVjdGlvbklzQmFja3dhcmQoZGlyKSAmJgorCQkJ CQkJICAgQmxvY2tOdW1iZXJJc1ZhbGlkKGJhdGNoLT5wcmV2UGFnZSkpOworCQliYXRjaC0+bW9y ZVJpZ2h0ID0gKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSAmJgorCQkJCQkJCUJsb2NrTnVt YmVySXNWYWxpZChiYXRjaC0+bmV4dFBhZ2UpKTsKIAl9CiAKLQlBc3NlcnQoc28tPmN1cnJQb3Mu Zmlyc3RJdGVtIDw9IHNvLT5jdXJyUG9zLmxhc3RJdGVtKTsKKwkvKiBVbmxvY2sgKGFuZCBsaWtl bHkgdW5waW4pIGJ1ZmZlciwgcGVyIGFtZ2V0YmF0Y2ggY29udHJhY3QgKi8KKwlpbmRleGFtX3V0 aWxfYmF0Y2hfdW5sb2NrKHNjYW4sIGJhdGNoKTsKKworCUFzc2VydChiYXRjaC0+Zmlyc3RJdGVt IDw9IGJhdGNoLT5sYXN0SXRlbSk7CiAJcmV0dXJuIHRydWU7CiB9CiAKIC8qCiAgKiBMb2FkIGFs bCB0aGUgcXVhbGlmaWVkIGl0ZW1zIGZyb20gYSBjdXJyZW50IGluZGV4IHBhZ2UKLSAqIGludG8g c28tPmN1cnJQb3MuIEhlbHBlciBmdW5jdGlvbiBmb3IgX2hhc2hfcmVhZHBhZ2UuCisgKiBpbnRv IGJhdGNoLiBIZWxwZXIgZnVuY3Rpb24gZm9yIF9oYXNoX3JlYWRwYWdlLgogICovCiBzdGF0aWMg aW50CiBfaGFzaF9sb2FkX3F1YWxpZmllZF9pdGVtcyhJbmRleFNjYW5EZXNjIHNjYW4sIFBhZ2Ug cGFnZSwKLQkJCQkJCSAgIE9mZnNldE51bWJlciBvZmZudW0sIFNjYW5EaXJlY3Rpb24gZGlyKQor CQkJCQkJICAgT2Zmc2V0TnVtYmVyIG9mZm51bSwgU2NhbkRpcmVjdGlvbiBkaXIsCisJCQkJCQkg ICBCYXRjaEluZGV4U2NhbiBiYXRjaCkKIHsKIAlIYXNoU2Nhbk9wYXF1ZSBzbyA9IChIYXNoU2Nh bk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwogCUluZGV4VHVwbGUJaXR1cDsKQEAgLTYzOSw3ICs2MTQs NyBAQCBfaGFzaF9sb2FkX3F1YWxpZmllZF9pdGVtcyhJbmRleFNjYW5EZXNjIHNjYW4sIFBhZ2Ug cGFnZSwKIAkJCQlfaGFzaF9jaGVja3F1YWwoc2NhbiwgaXR1cCkpCiAJCQl7CiAJCQkJLyogdHVw bGUgaXMgcXVhbGlmaWVkLCBzbyByZW1lbWJlciBpdCAqLwotCQkJCV9oYXNoX3NhdmVpdGVtKHNv LCBpdGVtSW5kZXgsIG9mZm51bSwgaXR1cCk7CisJCQkJX2hhc2hfc2F2ZWl0ZW0oYmF0Y2gsIGl0 ZW1JbmRleCwgb2ZmbnVtLCBpdHVwKTsKIAkJCQlpdGVtSW5kZXgrKzsKIAkJCX0KIAkJCWVsc2UK QEAgLTY4Niw3ICs2NjEsNyBAQCBfaGFzaF9sb2FkX3F1YWxpZmllZF9pdGVtcyhJbmRleFNjYW5E ZXNjIHNjYW4sIFBhZ2UgcGFnZSwKIAkJCXsKIAkJCQlpdGVtSW5kZXgtLTsKIAkJCQkvKiB0dXBs ZSBpcyBxdWFsaWZpZWQsIHNvIHJlbWVtYmVyIGl0ICovCi0JCQkJX2hhc2hfc2F2ZWl0ZW0oc28s IGl0ZW1JbmRleCwgb2ZmbnVtLCBpdHVwKTsKKwkJCQlfaGFzaF9zYXZlaXRlbShiYXRjaCwgaXRl bUluZGV4LCBvZmZudW0sIGl0dXApOwogCQkJfQogCQkJZWxzZQogCQkJewpAQCAtNzA1LDEzICs2 ODAsMTQgQEAgX2hhc2hfbG9hZF9xdWFsaWZpZWRfaXRlbXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBQ YWdlIHBhZ2UsCiAJfQogfQogCi0vKiBTYXZlIGFuIGluZGV4IGl0ZW0gaW50byBzby0+Y3VyclBv cy5pdGVtc1tpdGVtSW5kZXhdICovCisvKiBTYXZlIGFuIGluZGV4IGl0ZW0gaW50byBiYXRjaC0+ aXRlbXNbaXRlbUluZGV4XSAqLwogc3RhdGljIGlubGluZSB2b2lkCi1faGFzaF9zYXZlaXRlbShI YXNoU2Nhbk9wYXF1ZSBzbywgaW50IGl0ZW1JbmRleCwKK19oYXNoX3NhdmVpdGVtKEJhdGNoSW5k ZXhTY2FuIGJhdGNoLCBpbnQgaXRlbUluZGV4LAogCQkJICAgT2Zmc2V0TnVtYmVyIG9mZm51bSwg SW5kZXhUdXBsZSBpdHVwKQogewotCUhhc2hTY2FuUG9zSXRlbSAqY3Vyckl0ZW0gPSAmc28tPmN1 cnJQb3MuaXRlbXNbaXRlbUluZGV4XTsKKwlCYXRjaE1hdGNoaW5nSXRlbSAqY3Vyckl0ZW0gPSAm YmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF07CiAKIAljdXJySXRlbS0+aGVhcFRpZCA9IGl0dXAtPnRf dGlkOwogCWN1cnJJdGVtLT5pbmRleE9mZnNldCA9IG9mZm51bTsKKwljdXJySXRlbS0+dHVwbGVP ZmZzZXQgPSAwOwkvKiBIYXNoIGRvZXNuJ3Qgc3VwcG9ydCBpbmRleC1vbmx5IHNjYW5zICovCiB9 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNodXRpbC5jIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL2hhc2gvaGFzaHV0aWwuYwppbmRleCBmNDEyMzNmY2QuLmQwMWQzYjdkMiAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHV0aWwuYworKysgYi9zcmMv YmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNodXRpbC5jCkBAIC01MTAsNjcgKzUxMCw3NCBAQCBfaGFz aF9nZXRfbmV3YnVja2V0X2Zyb21fb2xkYnVja2V0KFJlbGF0aW9uIHJlbCwgQnVja2V0IG9sZF9i dWNrZXQsCiAgKiBfaGFzaF9raWxsX2l0ZW1zIC0gc2V0IExQX0RFQUQgc3RhdGUgZm9yIGl0ZW1z IGFuIGluZGV4c2NhbiBjYWxsZXIgaGFzCiAgKiB0b2xkIHVzIHdlcmUga2lsbGVkLgogICoKLSAq IHNjYW4tPm9wYXF1ZSwgcmVmZXJlbmNlZCBsb2NhbGx5IHRocm91Z2ggc28sIGNvbnRhaW5zIGlu Zm9ybWF0aW9uIGFib3V0IHRoZQotICogY3VycmVudCBwYWdlIGFuZCBraWxsZWQgdHVwbGVzIHRo ZXJlb24gKGdlbmVyYWxseSwgdGhpcyBzaG91bGQgb25seSBiZQotICogY2FsbGVkIGlmIHNvLT5u dW1LaWxsZWQgPiAwKS4KKyAqIFRoZSBiYXRjaCBwYXJhbWV0ZXIgY29udGFpbnMgaW5mb3JtYXRp b24gYWJvdXQgdGhlIGN1cnJlbnQgcGFnZSBhbmQga2lsbGVkCisgKiB0dXBsZXMgdGhlcmVvbiAo dGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgaWYgYmF0Y2gtPm51bUtpbGxlZCA+IDApLgogICoK LSAqIFRoZSBjYWxsZXIgZG9lcyBub3QgaGF2ZSBhIGxvY2sgb24gdGhlIHBhZ2UgYW5kIG1heSBv ciBtYXkgbm90IGhhdmUgdGhlCi0gKiBwYWdlIHBpbm5lZCBpbiBhIGJ1ZmZlci4gIE5vdGUgdGhh dCByZWFkLWxvY2sgaXMgc3VmZmljaWVudCBmb3Igc2V0dGluZwotICogTFBfREVBRCBzdGF0dXMg KHdoaWNoIGlzIG9ubHkgYSBoaW50KS4KKyAqIENhbGxlciBzaG91bGQgbm90IGhhdmUgYSBsb2Nr IG9uIHRoZSBiYXRjaCBwb3NpdGlvbidzIHBhZ2UsIGJ1dCBtdXN0IGhvbGQgYQorICogYnVmZmVy IHBpbiB3aGVuICFkcm9wUGluLiAgV2hlbiB3ZSByZXR1cm4sIGl0IHN0aWxsIHdvbid0IGJlIGxv Y2tlZC4gIEl0J2xsCisgKiBjb250aW51ZSB0byBob2xkIHdoYXRldmVyIHBpbnMgd2VyZSBoZWxk IGJlZm9yZSBjYWxsaW5nIGhlcmUuCiAgKgotICogVGhlIGNhbGxlciBtdXN0IGhhdmUgcGluIG9u IGJ1Y2tldCBidWZmZXIsIGJ1dCBtYXkgb3IgbWF5IG5vdCBoYXZlIHBpbgotICogb24gb3ZlcmZs b3cgYnVmZmVyLCBhcyBpbmRpY2F0ZWQgYnkgSGFzaFNjYW5Qb3NJc1Bpbm5lZChzby0+Y3VyclBv cykuCi0gKgotICogV2UgbWF0Y2ggaXRlbXMgYnkgaGVhcCBUSUQgYmVmb3JlIGFzc3VtaW5nIHRo ZXkgYXJlIHRoZSByaWdodCBvbmVzIHRvCi0gKiBkZWxldGUuCi0gKgotICogVGhlcmUgYXJlIG5l dmVyIGFueSBzY2FucyBhY3RpdmUgaW4gYSBidWNrZXQgYXQgdGhlIHRpbWUgVkFDVVVNIGJlZ2lu cywKLSAqIGJlY2F1c2UgVkFDVVVNIHRha2VzIGEgY2xlYW51cCBsb2NrIG9uIHRoZSBwcmltYXJ5 IGJ1Y2tldCBwYWdlIGFuZCBzY2FucwotICogaG9sZCBhIHBpbi4gIEEgc2NhbiBjYW4gYmVnaW4g YWZ0ZXIgVkFDVVVNIGxlYXZlcyB0aGUgcHJpbWFyeSBidWNrZXQgcGFnZQotICogYnV0IGJlZm9y ZSBpdCBmaW5pc2hlcyB0aGUgZW50aXJlIGJ1Y2tldCwgYnV0IGl0IGNhbiBuZXZlciBwYXNzIFZB Q1VVTSwKLSAqIGJlY2F1c2UgVkFDVVVNIGFsd2F5cyBsb2NrcyB0aGUgbmV4dCBwYWdlIGJlZm9y ZSByZWxlYXNpbmcgdGhlIGxvY2sgb24KLSAqIHRoZSBwcmV2aW91cyBvbmUuICBUaGVyZWZvcmUs IHdlIGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgYWNjaWRlbnRhbGx5Ci0gKiBraWxsaW5nIGEg VElEIHRoYXQgaGFzIGJlZW4gcmV1c2VkIGZvciBhbiB1bnJlbGF0ZWQgdHVwbGUuCisgKiBXZSBt YXRjaCBpdGVtcyBieSBoZWFwIFRJRCBiZWZvcmUgYXNzdW1pbmcgdGhleSBhcmUgdGhlIHJpZ2h0 IG9uZXMgdG8gc2V0CisgKiBMUF9ERUFELiAgSWYgdGhlIHNjYW4gaXMgb25lIHRoYXQgaG9sZHMg YSBidWZmZXIgcGluIG9uIHRoZSB0YXJnZXQgcGFnZQorICogY29udGludW91c2x5IGZyb20gaW5p dGlhbGx5IHJlYWRpbmcgdGhlIGl0ZW1zIHVudGlsIGFwcGx5aW5nIHRoaXMgZnVuY3Rpb24KKyAq IChpZiBpdCBpcyBhICFkcm9wUGluIHNjYW4pLCBWQUNVVU0gY2Fubm90IGhhdmUgZGVsZXRlZCBh bnkgaXRlbXMgb24gdGhlCisgKiBwYWdlLCBzbyB0aGUgcGFnZSdzIFRJRHMgY2FuJ3QgaGF2ZSBi ZWVuIHJlY3ljbGVkIGJ5IG5vdy4gIFRoZXJlJ3Mgbm8gcmlzaworICogdGhhdCB3ZSdsbCBjb25m dXNlIGEgbmV3IGluZGV4IHR1cGxlIHRoYXQgaGFwcGVucyB0byB1c2UgYSByZWN5Y2xlZCBUSUQK KyAqIHdpdGggYSBub3ctcmVtb3ZlZCB0dXBsZSB3aXRoIHRoZSBzYW1lIFRJRCAodGhhdCB1c2Vk IHRvIGJlIG9uIHRoaXMgc2FtZQorICogcGFnZSkuICBXZSBjYW4ndCByZWx5IG9uIHRoYXQgZHVy aW5nIHNjYW5zIHRoYXQgZHJvcCBidWZmZXIgcGlucyBlYWdlcmx5CisgKiAoaS5lLiBkcm9wUGlu IHNjYW5zKSwgdGhvdWdoLCBzbyB3ZSBtdXN0IGNvbmRpdGlvbiBzZXR0aW5nIExQX0RFQUQgYml0 cyBvbgorICogdGhlIHBhZ2UgTFNOIGhhdmluZyBub3QgY2hhbmdlZCBzaW5jZSBiYWNrIHdoZW4g X2hhc2hfcmVhZHBhZ2Ugc2F3IHRoZSBwYWdlLgorICogV2UgdG90YWxseSBnaXZlIHVwIG9uIHNl dHRpbmcgTFBfREVBRCBiaXRzIHdoZW4gdGhlIHBhZ2UgTFNOIGNoYW5nZWQuCiAgKi8KIHZvaWQK LV9oYXNoX2tpbGxfaXRlbXMoSW5kZXhTY2FuRGVzYyBzY2FuKQorX2hhc2hfa2lsbF9pdGVtcyhJ bmRleFNjYW5EZXNjIHNjYW4sIEJhdGNoSW5kZXhTY2FuIGJhdGNoKQogewotCUhhc2hTY2FuT3Bh cXVlIHNvID0gKEhhc2hTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CiAJUmVsYXRpb24JcmVsID0g c2Nhbi0+aW5kZXhSZWxhdGlvbjsKLQlCbG9ja051bWJlciBibGtubzsKIAlCdWZmZXIJCWJ1ZjsK IAlQYWdlCQlwYWdlOwogCUhhc2hQYWdlT3BhcXVlIG9wYXF1ZTsKIAlPZmZzZXROdW1iZXIgb2Zm bnVtLAogCQkJCW1heG9mZjsKLQlpbnQJCQludW1LaWxsZWQgPSBzby0+bnVtS2lsbGVkOworCWlu dAkJCW51bUtpbGxlZCA9IGJhdGNoLT5udW1LaWxsZWQ7CiAJaW50CQkJaTsKIAlib29sCQlraWxs ZWRzb21ldGhpbmcgPSBmYWxzZTsKLQlib29sCQloYXZlUGluID0gZmFsc2U7CiAKLQlBc3NlcnQo c28tPm51bUtpbGxlZCA+IDApOwotCUFzc2VydChzby0+a2lsbGVkSXRlbXMgIT0gTlVMTCk7Ci0J QXNzZXJ0KEhhc2hTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpOworCUFzc2VydChudW1LaWxs ZWQgPiAwKTsKKwlBc3NlcnQoYmF0Y2gtPmtpbGxlZEl0ZW1zICE9IE5VTEwpOworCUFzc2VydChC bG9ja051bWJlcklzVmFsaWQoYmF0Y2gtPmN1cnJQYWdlKSk7CiAKLQkvKgotCSAqIEFsd2F5cyBy ZXNldCB0aGUgc2NhbiBzdGF0ZSwgc28gd2UgZG9uJ3QgbG9vayBmb3Igc2FtZSBpdGVtcyBvbiBv dGhlcgotCSAqIHBhZ2VzLgotCSAqLwotCXNvLT5udW1LaWxsZWQgPSAwOworCS8qIEFsd2F5cyBp bnZhbGlkYXRlIGJhdGNoLT5raWxsZWRJdGVtc1tdIGJlZm9yZSBmcmVlaW5nIGJhdGNoICovCisJ YmF0Y2gtPm51bUtpbGxlZCA9IDA7CiAKLQlibGtubyA9IHNvLT5jdXJyUG9zLmN1cnJQYWdlOwot CWlmIChIYXNoU2NhblBvc0lzUGlubmVkKHNvLT5jdXJyUG9zKSkKKwlpZiAoIXNjYW4tPmJhdGNo cXVldWUtPmRyb3BQaW4pCiAJewogCQkvKgotCQkgKiBXZSBhbHJlYWR5IGhhdmUgcGluIG9uIHRo aXMgYnVmZmVyLCBzbywgYWxsIHdlIG5lZWQgdG8gZG8gaXMKLQkJICogYWNxdWlyZSBsb2NrIG9u IGl0LgorCQkgKiBXZSBoYXZlIGhlbGQgdGhlIHBpbiBvbiB0aGlzIHBhZ2Ugc2luY2Ugd2UgcmVh ZCB0aGUgaW5kZXggdHVwbGVzLAorCQkgKiBzbyBhbGwgd2UgbmVlZCB0byBkbyBpcyBsb2NrIGl0 LiAgVGhlIHBpbiB3aWxsIGhhdmUgcHJldmVudGVkCisJCSAqIGNvbmN1cnJlbnQgVkFDVVVNcyBm cm9tIHJlY3ljbGluZyBhbnkgb2YgdGhlIFRJRHMgb24gdGhlIHBhZ2UuCiAJCSAqLwotCQloYXZl UGluID0gdHJ1ZTsKLQkJYnVmID0gc28tPmN1cnJQb3MuYnVmOworCQlidWYgPSBiYXRjaC0+YnVm OwogCQlMb2NrQnVmZmVyKGJ1ZiwgQlVGRkVSX0xPQ0tfU0hBUkUpOwogCX0KIAllbHNlCi0JCWJ1 ZiA9IF9oYXNoX2dldGJ1ZihyZWwsIGJsa25vLCBIQVNIX1JFQUQsIExIX09WRVJGTE9XX1BBR0Up OworCXsKKwkJWExvZ1JlY1B0cglsYXRlc3Rsc247CisKKwkJQXNzZXJ0KFJlbGF0aW9uTmVlZHNX QUwocmVsKSk7CisJCWJ1ZiA9IF9oYXNoX2dldGJ1ZihyZWwsIGJhdGNoLT5jdXJyUGFnZSwgSEFT SF9SRUFELAorCQkJCQkJICAgTEhfQlVDS0VUX1BBR0UgfCBMSF9PVkVSRkxPV19QQUdFKTsKKwor CQlsYXRlc3Rsc24gPSBCdWZmZXJHZXRMU05BdG9taWMoYnVmKTsKKwkJQXNzZXJ0KGJhdGNoLT5s c24gPD0gbGF0ZXN0bHNuKTsKKwkJaWYgKGJhdGNoLT5sc24gIT0gbGF0ZXN0bHNuKQorCQl7CisJ CQkvKiBNb2RpZmllZCwgZ2l2ZSB1cCBvbiBoaW50aW5nICovCisJCQlfaGFzaF9yZWxidWYocmVs LCBidWYpOworCQkJcmV0dXJuOworCQl9CisKKwkJLyogVW5tb2RpZmllZCwgaGludGluZyBpcyBz YWZlICovCisJfQogCiAJcGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnVmKTsKIAlvcGFxdWUgPSBIYXNo UGFnZUdldE9wYXF1ZShwYWdlKTsKQEAgLTU3OCwxMyArNTg1LDEzIEBAIF9oYXNoX2tpbGxfaXRl bXMoSW5kZXhTY2FuRGVzYyBzY2FuKQogCiAJZm9yIChpID0gMDsgaSA8IG51bUtpbGxlZDsgaSsr KQogCXsKLQkJaW50CQkJaXRlbUluZGV4ID0gc28tPmtpbGxlZEl0ZW1zW2ldOwotCQlIYXNoU2Nh blBvc0l0ZW0gKmN1cnJJdGVtID0gJnNvLT5jdXJyUG9zLml0ZW1zW2l0ZW1JbmRleF07CisJCWlu dAkJCWl0ZW1JbmRleCA9IGJhdGNoLT5raWxsZWRJdGVtc1tpXTsKKwkJQmF0Y2hNYXRjaGluZ0l0 ZW0gKmN1cnJJdGVtID0gJmJhdGNoLT5pdGVtc1tpdGVtSW5kZXhdOwogCiAJCW9mZm51bSA9IGN1 cnJJdGVtLT5pbmRleE9mZnNldDsKIAotCQlBc3NlcnQoaXRlbUluZGV4ID49IHNvLT5jdXJyUG9z LmZpcnN0SXRlbSAmJgotCQkJICAgaXRlbUluZGV4IDw9IHNvLT5jdXJyUG9zLmxhc3RJdGVtKTsK KwkJQXNzZXJ0KGl0ZW1JbmRleCA+PSBiYXRjaC0+Zmlyc3RJdGVtICYmCisJCQkgICBpdGVtSW5k ZXggPD0gYmF0Y2gtPmxhc3RJdGVtKTsKIAogCQl3aGlsZSAob2ZmbnVtIDw9IG1heG9mZikKIAkJ ewpAQCAtNjEzLDkgKzYyMCw4IEBAIF9oYXNoX2tpbGxfaXRlbXMoSW5kZXhTY2FuRGVzYyBzY2Fu KQogCQlNYXJrQnVmZmVyRGlydHlIaW50KGJ1ZiwgdHJ1ZSk7CiAJfQogCi0JaWYgKHNvLT5oYXNo c29fYnVja2V0X2J1ZiA9PSBzby0+Y3VyclBvcy5idWYgfHwKLQkJaGF2ZVBpbikKLQkJTG9ja0J1 ZmZlcihzby0+Y3VyclBvcy5idWYsIEJVRkZFUl9MT0NLX1VOTE9DSyk7CisJaWYgKCFzY2FuLT5i YXRjaHF1ZXVlLT5kcm9wUGluKQorCQlMb2NrQnVmZmVyKGJ1ZiwgQlVGRkVSX0xPQ0tfVU5MT0NL KTsKIAllbHNlCiAJCV9oYXNoX3JlbGJ1ZihyZWwsIGJ1Zik7CiB9CmRpZmYgLS1naXQgYS9zcmMv dG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVm cy5saXN0CmluZGV4IDZmMWViYjk1NS4uMjUzZjA4YjQwIDEwMDY0NAotLS0gYS9zcmMvdG9vbHMv cGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMu bGlzdApAQCAtMTE4Myw4ICsxMTgzLDYgQEAgSGFzaFBhZ2VTdGF0CiBIYXNoUGF0aAogSGFzaFNj YW5PcGFxdWUKIEhhc2hTY2FuT3BhcXVlRGF0YQotSGFzaFNjYW5Qb3NEYXRhCi1IYXNoU2NhblBv c0l0ZW0KIEhhc2hTa2V3QnVja2V0CiBIYXNoU3RhdGUKIEhhc2hWYWx1ZUZ1bmMKLS0gCjIuNTEu MAoK --000000000000d00bb30644d9d645 Content-Type: application/octet-stream; name="v1-0001-Add-batching-interfaces-used-by-heapam-and-nbtree.patch" Content-Disposition: attachment; filename="v1-0001-Add-batching-interfaces-used-by-heapam-and-nbtree.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mimg734k0 RnJvbSBiNTdmODgxMjE5NzkwZGZhNzFiNjliNTk1NWRjZDg1ZmFjNzRhMGVlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFR1 ZSwgOSBTZXAgMjAyNSAxOTo1MDowMyAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggdjEgMS80XSBBZGQg YmF0Y2hpbmcgaW50ZXJmYWNlcyB1c2VkIGJ5IGhlYXBhbSBhbmQgbmJ0cmVlLgoKQWRkIGEgbmV3 IGFtZ2V0YmF0Y2ggaW5kZXggQU0gaW50ZXJmYWNlIHRoYXQgYWxsb3dzIGluZGV4IGFjY2VzcyBt ZXRob2RzCnRvIGltcGxlbWVudCBwbGFpbi9vcmRlcmVkIGluZGV4IHNjYW5zIHRoYXQgcmV0dXJu IGluZGV4IGVudHJpZXMgaW4KcGVyLWxlYWYtcGFnZSBiYXRjaGVzLCByYXRoZXIgdGhhbiBvbmUg YXQgYSB0aW1lLiAgVGhpcyBlbmFibGVzIGEKdmFyaWV0eSBvZiBvcHRpbWl6YXRpb25zIG9uIHRo ZSB0YWJsZSBBTSBzaWRlLCBtb3N0IG5vdGFibHkgSS9PCnByZWZldGNoaW5nIG9mIGhlYXAgdHVw bGVzIGR1cmluZyBvcmRlcmVkIGluZGV4IHNjYW5zLiAgSXQgd2lsbCBhbHNvCmVuYWJsZSBhbiBv cHRpbWl6YXRpb24gdGhhdCBoYXMgaGVhcGFtIGF2b2lkIHJlcGVhdGVkbHkgbG9ja2luZyBhbmQK dW5sb2NraW5nIHRoZSBzYW1lIGhlYXAgcGFnZSdzIGJ1ZmZlci4KCkluZGV4IGFjY2VzcyBtZXRo b2RzIHRoYXQgc3VwcG9ydCBwbGFpbiBpbmRleCBzY2FucyBtdXN0IG5vdyBpbXBsZW1lbnQKZWl0 aGVyIHRoZSBhbWdldGJhdGNoIGludGVyZmFjZSBPUiB0aGUgYW1nZXR0dXBsZSBpbnRlcmZhY2Uu ICBUaGUKYW1nZXR0dXBsZSBpbnRlcmZhY2Ugd2lsbCBzdGlsbCBiZSB1c2VkIGJ5IGluZGV4IEFN cyB0aGF0IHJlcXVpcmUgZGlyZWN0CmNvbnRyb2wgb3ZlciB0aGUgcHJvZ3Jlc3Mgb2YgaW5kZXgg c2NhbnMgKGUuZy4sIEdpU1Qgd2l0aCBLTk4gb3JkZXJlZApzY2FucykuCgpUaGlzIGNvbW1pdCBh bHNvIGFkZHMgYSBuZXcgdGFibGUgQU0gaW50ZXJmYWNlIGNhbGxiYWNrLCBjYWxsZWQgYnkgdGhl CmNvcmUgZXhlY3V0b3IgdGhyb3VnaCB0aGUgbmV3IHRhYmxlX2luZGV4X2dldG5leHRfc2xvdCBz aGltIGZ1bmN0aW9uLgpUaGlzIGFsbG93cyB0aGUgdGFibGUgQU0gdG8gZGlyZWN0bHkgbWFuYWdl IHRoZSBwcm9ncmVzcyBvZiBpbmRleCBzY2FucwpyYXRoZXIgdGhhbiBoYXZpbmcgaW5kaXZpZHVh bCBUSURzIHBhc3NlZCBpbiBieSB0aGUgY2FsbGVyLiBUaGUKYW1nZXRiYXRjaCBpbnRlcmZhY2Ug aXMgdGlnaHRseSBjb3VwbGVkIHdpdGggdGhlIG5ldyBhcHByb2FjaCB0byBvcmRlcmVkCmluZGV4 IHNjYW5zIGFkZGVkIHRvIHRoZSB0YWJsZSBBTS4gIFRoZSB0YWJsZSBBTSBjYW4gYXBwbHkga25v d2xlZGdlIG9mCndoaWNoIFRJRHMgd2lsbCBiZSByZXR1cm5lZCB0byBzY2FuIGluIHRoZSBuZWFy IGZ1dHVyZSB0byBvcHRpbWl6ZSBhbmQKYmF0Y2ggdGFibGUgQU0gYmxvY2sgYWNjZXNzZXMsIGFu ZCB0byBwZXJmb3JtIEkvTyBwcmVmZXRjaGluZy4gIFRoZXNlCm9wdGltaXphdGlvbnMgYXJlIGxl ZnQgYXMgd29yayBmb3IgbGF0ZXIgY29tbWl0cy4KClRoZSBvbGRlciBhbWdldHR1cGxlIGludGVy ZmFjZSBjb250aW51ZXMgdG8gd29yayB3aXRoIHRoZSBsb3dlci1sZXZlbAp0YWJsZV9pbmRleF9m ZXRjaF90dXBsZSBjYWxsYmFjaywgd2hlcmUgdGhlIGNhbGxlciBwcm92aWRlcyBUSURzIG9uZSBh dCBhCnRpbWUuIEluZGV4IEFNcyBsaWtlIEdpU1QgdGhhdCByZXF1aXJlIGZpbmUtZ3JhaW5lZCBj b250cm9sIG92ZXIgc2NhbgpvcmRlcmluZyB3aWxsIGNvbnRpbnVlIHRvIHVzZSBhbWdldHR1cGxl IGFuZCB0YWJsZV9pbmRleF9mZXRjaF90dXBsZS4KCkJhdGNoZXMgcmV0dXJuZWQgZnJvbSBhbWdl dGJhdGNoIGFyZSBndWFyYW50ZWVkIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCBhbgppbmRleCBwYWdl IGNvbnRhaW5pbmcgYXQgbGVhc3Qgb25lIG1hdGNoaW5nIHR1cGxlLiAgVGhlIGFtZ2V0YmF0Y2gK aW50ZXJmYWNlIG1heSBob2xkIGJ1ZmZlciBwaW5zIGFzIGludGVybG9ja3MgYWdhaW5zdCBjb25j dXJyZW50IFRJRApyZWN5Y2xpbmcgYnkgVkFDVVVNLiAgVGhpcyBleHRlbmRzL2dlbmVyYWxpemVz IHRoZSBtZWNoYW5pc20gYWRkZWQgdG8KbmJ0cmVlIGJ5IGNvbW1pdCAyZWQ1Yjg3ZiB0byBhbGwg aW5kZXggQU1zIHRoYXQgYWRkIHN1cHBvcnQgZm9yIHRoZSBuZXcKYW1nZXRiYXRjaCBpbnRlcmZh Y2UuCgpBdXRob3I6IFRvbWFzIFZvbmRyYSA8dG9tYXNAdm9uZHJhLm1lPgpBdXRob3I6IFBldGVy IEdlb2doZWdhbiA8cGdAYm93dC5pZT4KUmV2aWV3ZWQtQnk6IEFuZHJlcyBGcmV1bmQgPGFuZHJl c0BhbmFyYXplbC5kZT4KUmV2aWV3ZWQtQnk6IFRob21hcyBNdW5ybyA8dGhvbWFzLm11bnJvQGdt YWlsLmNvbT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9jZjg1ZjQ2Zi1iMDJmLTA1 YjItNTI0OC01MDAwYjg5NGViYWJAZW50ZXJwcmlzZWRiLmNvbQpEaXNjdXNzaW9uOiBodHRwczov L3Bvc3Rnci5lcy9tL2VmYWMzMjM4LTZmMzQtNDFlYS1hMzkzLTI2Y2MwNDQxYjUwNiU0MHZvbmRy YS5tZQpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL0NBSDItV3prOSUzRHglM0RhMlRi Y3FZY1glMkJYWG1ESFFyNSUzRDF2OW00Wl92OGEtS3dGMVpvejBBJTQwbWFpbC5nbWFpbC5jb20K LS0tCiBzcmMvaW5jbHVkZS9hY2Nlc3MvYW1hcGkuaCAgICAgICAgICAgICAgICAgICAgfCAgMjIg Ky0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5oICAgICAgICAgICAgICAgICAgICB8ICAyNyAr LQogc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oICAgICAgICAgICAgICAgICAgIHwgICA1ICsK IHNyYy9pbmNsdWRlL2FjY2Vzcy9uYnRyZWUuaCAgICAgICAgICAgICAgICAgICB8IDE3MyArLS0t LQogc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaCAgICAgICAgICAgICAgICAgIHwgMjA5ICsr KysrCiBzcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oICAgICAgICAgICAgICAgICAgfCAgNTcg Ky0KIHNyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oICAgICAgICAgICAgICAgICB8ICAgMSAt CiBzcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCAgICAgICAgICAgICAgICAgfCAgIDIgKy0K IHNyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW4uYyAgICAgICAgICAgICAgICB8ICAgNSArLQog c3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW5nZXQuYyAgICAgICAgICAgICAgIHwgICA2ICstCiBz cmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbnV0aWwuYyAgICAgICAgICAgICAgfCAgIDUgKy0KIHNy Yy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3QuYyAgICAgICAgICAgICAgICB8ICAgNSArLQogc3Jj L2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jICAgICAgICAgICAgICAgIHwgICA1ICstCiBzcmMv YmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jICAgICAgfCA1NDQgKysrKysrKysr KysrLQogc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L01ha2VmaWxlICAgICAgICAgICAgIHwgICAz ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYyAgICAgICAgICAgICAgfCAgMTAg Ky0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMgICAgICAgICAgICB8IDEzMCAr LS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhiYXRjaC5jICAgICAgICAgfCA2ODMg KysrKysrKysrKysrKysrKysKIHNyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9tZXNvbi5idWlsZCAg ICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHBhZ2UuYyAgICAg ICAgICAgfCAgIDMgKwogc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWUuYyAgICAgICAg ICAgIHwgMzA3ICsrLS0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNlYXJjaC5j ICAgICAgICAgfCA3MTIgKysrKysrKy0tLS0tLS0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0 cmVlL25idHV0aWxzLmMgICAgICAgICAgfCAgNzcgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9zcGdp c3Qvc3BndXRpbHMuYyAgICAgICAgICB8ICAgNSArLQogc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxl L3RhYmxlYW0uYyAgICAgICAgICAgIHwgICAyICstCiBzcmMvYmFja2VuZC9jb21tYW5kcy9jb25z dHJhaW50LmMgICAgICAgICAgICAgfCAgIDMgKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4 Y21kcy5jICAgICAgICAgICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0Ft aS5jICAgICAgICAgICAgICAgIHwgICAyICstCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjSW5k ZXhpbmcuYyAgICAgICAgICAgfCAgIDYgKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNSZXBs aWNhdGlvbi5jICAgICAgICB8ICAgOCArLQogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4 b25seXNjYW4uYyAgICAgIHwgMTAwICstLQogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4 c2Nhbi5jICAgICAgICAgIHwgIDEyICstCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9pbmR4 cGF0aC5jICAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5j YXQuYyAgICAgICAgICB8ICAgNiArLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9y ZWxhdGlvbi5jICAgIHwgICAzICstCiBzcmMvYmFja2VuZC91dGlscy9hZHQvYW11dGlscy5jICAg ICAgICAgICAgICAgfCAgIDQgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5jICAg ICAgICAgICAgICB8ICA1NyArLQogY29udHJpYi9ibG9vbS9ibHV0aWxzLmMgICAgICAgICAgICAg ICAgICAgICAgIHwgICAzICstCiBkb2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21sICAgICAgICAgICAg ICAgICAgICAgfCAzMTAgKysrKysrKy0KIGRvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3RhYmxlLnNn bWwgICAgICAgICAgICB8ICAxMyArLQogLi4uL21vZHVsZXMvZHVtbXlfaW5kZXhfYW0vZHVtbXlf aW5kZXhfYW0uYyAgIHwgICA0ICstCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAg ICAgICAgICAgICAgfCAgIDQgLQogNDIgZmlsZXMgY2hhbmdlZCwgMjM0MyBpbnNlcnRpb25zKCsp LCAxMTk1IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5kL2FjY2Vz cy9pbmRleC9pbmRleGJhdGNoLmMKCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvYW1h cGkuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9hbWFwaS5oCmluZGV4IDYzZGQ0MWMxZi4uYTdlYjMz Y2U5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvYW1hcGkuaAorKysgYi9zcmMvaW5j bHVkZS9hY2Nlc3MvYW1hcGkuaApAQCAtMTk4LDYgKzE5OCwxNSBAQCB0eXBlZGVmIHZvaWQgKCph bXJlc2Nhbl9mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2NhbiwKIHR5cGVkZWYgYm9vbCAoKmFt Z2V0dHVwbGVfZnVuY3Rpb24pIChJbmRleFNjYW5EZXNjIHNjYW4sCiAJCQkJCQkJCQkgU2NhbkRp cmVjdGlvbiBkaXJlY3Rpb24pOwogCisvKiBuZXh0IGJhdGNoIG9mIHZhbGlkIHR1cGxlcyAqLwor dHlwZWRlZiBCYXRjaEluZGV4U2NhbiAoKmFtZ2V0YmF0Y2hfZnVuY3Rpb24pIChJbmRleFNjYW5E ZXNjIHNjYW4sCisJCQkJCQkJCQkJCSAgIEJhdGNoSW5kZXhTY2FuIHByaW9yYmF0Y2gsCisJCQkJ CQkJCQkJCSAgIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uKTsKKworLyogcmVsZWFzZSBiYXRjaCBv ZiB2YWxpZCB0dXBsZXMgKi8KK3R5cGVkZWYgdm9pZCAoKmFtZnJlZWJhdGNoX2Z1bmN0aW9uKSAo SW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJICBCYXRjaEluZGV4U2NhbiBiYXRjaCk7CisK IC8qIGZldGNoIGFsbCB2YWxpZCB0dXBsZXMgKi8KIHR5cGVkZWYgaW50NjQgKCphbWdldGJpdG1h cF9mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2NhbiwKIAkJCQkJCQkJCSAgIFRJREJpdG1hcCAq dGJtKTsKQEAgLTIwNSwxMSArMjE0LDkgQEAgdHlwZWRlZiBpbnQ2NCAoKmFtZ2V0Yml0bWFwX2Z1 bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuLAogLyogZW5kIGluZGV4IHNjYW4gKi8KIHR5cGVk ZWYgdm9pZCAoKmFtZW5kc2Nhbl9mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2Nhbik7CiAKLS8q IG1hcmsgY3VycmVudCBzY2FuIHBvc2l0aW9uICovCi10eXBlZGVmIHZvaWQgKCphbW1hcmtwb3Nf ZnVuY3Rpb24pIChJbmRleFNjYW5EZXNjIHNjYW4pOwotCi0vKiByZXN0b3JlIG1hcmtlZCBzY2Fu IHBvc2l0aW9uICovCi10eXBlZGVmIHZvaWQgKCphbXJlc3RycG9zX2Z1bmN0aW9uKSAoSW5kZXhT Y2FuRGVzYyBzY2FuKTsKKy8qIGludmFsaWRhdGUgaW5kZXggQU0gc3RhdGUgdGhhdCBpbmRlcGVu ZGVudGx5IHRyYWNrcyBzY2FuJ3MgcG9zaXRpb24gKi8KK3R5cGVkZWYgdm9pZCAoKmFtcG9zcmVz ZXRfZnVuY3Rpb24pIChJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCQkgQmF0Y2hJbmRleFNj YW4gYmF0Y2gpOwogCiAvKgogICogQ2FsbGJhY2sgZnVuY3Rpb24gc2lnbmF0dXJlcyAtIGZvciBw YXJhbGxlbCBpbmRleCBzY2Fucy4KQEAgLTMwOSwxMCArMzE2LDExIEBAIHR5cGVkZWYgc3RydWN0 IEluZGV4QW1Sb3V0aW5lCiAJYW1iZWdpbnNjYW5fZnVuY3Rpb24gYW1iZWdpbnNjYW47CiAJYW1y ZXNjYW5fZnVuY3Rpb24gYW1yZXNjYW47CiAJYW1nZXR0dXBsZV9mdW5jdGlvbiBhbWdldHR1cGxl OyAvKiBjYW4gYmUgTlVMTCAqLworCWFtZ2V0YmF0Y2hfZnVuY3Rpb24gYW1nZXRiYXRjaDsgLyog Y2FuIGJlIE5VTEwgKi8KKwlhbWZyZWViYXRjaF9mdW5jdGlvbiBhbWZyZWViYXRjaDsJLyogY2Fu IGJlIE5VTEwgKi8KIAlhbWdldGJpdG1hcF9mdW5jdGlvbiBhbWdldGJpdG1hcDsJLyogY2FuIGJl IE5VTEwgKi8KIAlhbWVuZHNjYW5fZnVuY3Rpb24gYW1lbmRzY2FuOwotCWFtbWFya3Bvc19mdW5j dGlvbiBhbW1hcmtwb3M7CS8qIGNhbiBiZSBOVUxMICovCi0JYW1yZXN0cnBvc19mdW5jdGlvbiBh bXJlc3RycG9zOyAvKiBjYW4gYmUgTlVMTCAqLworCWFtcG9zcmVzZXRfZnVuY3Rpb24gYW1wb3Ny ZXNldDsgLyogY2FuIGJlIE5VTEwgKi8KIAogCS8qIGludGVyZmFjZSBmdW5jdGlvbnMgdG8gc3Vw cG9ydCBwYXJhbGxlbCBpbmRleCBzY2FucyAqLwogCWFtZXN0aW1hdGVwYXJhbGxlbHNjYW5fZnVu Y3Rpb24gYW1lc3RpbWF0ZXBhcmFsbGVsc2NhbjsgLyogY2FuIGJlIE5VTEwgKi8KZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFt LmgKaW5kZXggOTIwMGEyMmJkLi5mMTk4NGU3MDAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2Fj Y2Vzcy9nZW5hbS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5oCkBAIC0xMTUsNiAr MTE1LDcgQEAgdHlwZWRlZiBib29sICgqSW5kZXhCdWxrRGVsZXRlQ2FsbGJhY2spIChJdGVtUG9p bnRlciBpdGVtcHRyLCB2b2lkICpzdGF0ZSk7CiAKIC8qIHN0cnVjdCBkZWZpbml0aW9ucyBhcHBl YXIgaW4gcmVsc2Nhbi5oICovCiB0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5EZXNjRGF0YSAqSW5k ZXhTY2FuRGVzYzsKK3R5cGVkZWYgc3RydWN0IEJhdGNoSW5kZXhTY2FuRGF0YSAqQmF0Y2hJbmRl eFNjYW47CiB0eXBlZGVmIHN0cnVjdCBTeXNTY2FuRGVzY0RhdGEgKlN5c1NjYW5EZXNjOwogCiB0 eXBlZGVmIHN0cnVjdCBQYXJhbGxlbEluZGV4U2NhbkRlc2NEYXRhICpQYXJhbGxlbEluZGV4U2Nh bkRlc2M7CkBAIC0xNzUsNiArMTc2LDcgQEAgZXh0ZXJuIHZvaWQgaW5kZXhfaW5zZXJ0X2NsZWFu dXAoUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwKIAogZXh0ZXJuIEluZGV4U2NhbkRlc2MgaW5kZXhf YmVnaW5zY2FuKFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKIAkJCQkJCQkJCSBSZWxhdGlvbiBpbmRl eFJlbGF0aW9uLAorCQkJCQkJCQkJIFR1cGxlVGFibGVTbG90ICppb3NfdGFibGVzbG90LAogCQkJ CQkJCQkJIFNuYXBzaG90IHNuYXBzaG90LAogCQkJCQkJCQkJIEluZGV4U2Nhbkluc3RydW1lbnRh dGlvbiAqaW5zdHJ1bWVudCwKIAkJCQkJCQkJCSBpbnQgbmtleXMsIGludCBub3JkZXJieXMpOwpA QCAtMjAxLDE0ICsyMDMsMTIgQEAgZXh0ZXJuIHZvaWQgaW5kZXhfcGFyYWxsZWxzY2FuX2luaXRp YWxpemUoUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogZXh0ZXJuIHZvaWQgaW5kZXhfcGFyYWxsZWxy ZXNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuKTsKIGV4dGVybiBJbmRleFNjYW5EZXNjIGluZGV4X2Jl Z2luc2Nhbl9wYXJhbGxlbChSZWxhdGlvbiBoZWFwcmVsLAogCQkJCQkJCQkJCQkgIFJlbGF0aW9u IGluZGV4cmVsLAorCQkJCQkJCQkJCQkgIFR1cGxlVGFibGVTbG90ICppb3NfdGFibGVzbG90LAog CQkJCQkJCQkJCQkgIEluZGV4U2Nhbkluc3RydW1lbnRhdGlvbiAqaW5zdHJ1bWVudCwKIAkJCQkJ CQkJCQkJICBpbnQgbmtleXMsIGludCBub3JkZXJieXMsCiAJCQkJCQkJCQkJCSAgUGFyYWxsZWxJ bmRleFNjYW5EZXNjIHBzY2FuKTsKIGV4dGVybiBJdGVtUG9pbnRlciBpbmRleF9nZXRuZXh0X3Rp ZChJbmRleFNjYW5EZXNjIHNjYW4sCiAJCQkJCQkJCQkgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24p OwotZXh0ZXJuIGJvb2wgaW5kZXhfZmV0Y2hfaGVhcChJbmRleFNjYW5EZXNjIHNjYW4sIFR1cGxl VGFibGVTbG90ICpzbG90KTsKLWV4dGVybiBib29sIGluZGV4X2dldG5leHRfc2xvdChJbmRleFNj YW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAotCQkJCQkJCSAgIFR1cGxlVGFi bGVTbG90ICpzbG90KTsKIGV4dGVybiBpbnQ2NCBpbmRleF9nZXRiaXRtYXAoSW5kZXhTY2FuRGVz YyBzY2FuLCBUSURCaXRtYXAgKmJpdG1hcCk7CiAKIGV4dGVybiBJbmRleEJ1bGtEZWxldGVSZXN1 bHQgKmluZGV4X2J1bGtfZGVsZXRlKEluZGV4VmFjdXVtSW5mbyAqaW5mbywKQEAgLTI3Miw0ICsy NzIsMjUgQEAgZXh0ZXJuIHZvaWQgc3lzdGFibGVfaW5wbGFjZV91cGRhdGVfYmVnaW4oUmVsYXRp b24gcmVsYXRpb24sCiBleHRlcm4gdm9pZCBzeXN0YWJsZV9pbnBsYWNlX3VwZGF0ZV9maW5pc2go dm9pZCAqc3RhdGUsIEhlYXBUdXBsZSB0dXBsZSk7CiBleHRlcm4gdm9pZCBzeXN0YWJsZV9pbnBs YWNlX3VwZGF0ZV9jYW5jZWwodm9pZCAqc3RhdGUpOwogCisvKgorICogYW1nZXRiYXRjaCB1dGls aXRpZXMgY2FsbGVkIGJ5IGluZGV4YW0uYyAoaW4gaW5kZXhiYXRjaC5jKQorICovCitzdHJ1Y3Qg QmF0Y2hRdWV1ZUl0ZW1Qb3M7CitleHRlcm4gdm9pZCBpbmRleF9iYXRjaF9pbml0KEluZGV4U2Nh bkRlc2Mgc2Nhbik7CitleHRlcm4gYm9vbCBiYXRjaF9nZXRuZXh0KEluZGV4U2NhbkRlc2Mgc2Nh biwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pOworZXh0ZXJuIHZvaWQgYmF0Y2hfZnJlZShJbmRl eFNjYW5EZXNjIHNjYW4sIEJhdGNoSW5kZXhTY2FuIGJhdGNoKTsKK2V4dGVybiB2b2lkIGluZGV4 X2JhdGNoX3Jlc2V0KEluZGV4U2NhbkRlc2Mgc2NhbiwgYm9vbCBjb21wbGV0ZSk7CitleHRlcm4g dm9pZCBpbmRleF9iYXRjaF9tYXJrX3BvcyhJbmRleFNjYW5EZXNjIHNjYW4pOworZXh0ZXJuIHZv aWQgaW5kZXhfYmF0Y2hfcmVzdG9yZV9wb3MoSW5kZXhTY2FuRGVzYyBzY2FuKTsKK2V4dGVybiB2 b2lkIGluZGV4X2JhdGNoX2tpbGxfaXRlbShJbmRleFNjYW5EZXNjIHNjYW4pOworZXh0ZXJuIHZv aWQgaW5kZXhfYmF0Y2hfZW5kKEluZGV4U2NhbkRlc2Mgc2Nhbik7CisKKy8qCisgKiBhbWdldGJh dGNoIHV0aWxpdGllcyBjYWxsZWQgYnkgaW5kZXggQU1zIChpbiBpbmRleGJhdGNoLmMpCisgKi8K K2V4dGVybiB2b2lkIGluZGV4YW1fdXRpbF9iYXRjaF91bmxvY2soSW5kZXhTY2FuRGVzYyBzY2Fu LCBCYXRjaEluZGV4U2NhbiBiYXRjaCk7CitleHRlcm4gQmF0Y2hJbmRleFNjYW4gaW5kZXhhbV91 dGlsX2JhdGNoX2FsbG9jKEluZGV4U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCQkJCQkJICAgaW50IG1h eGl0ZW1zLCBib29sIHdhbnRfaXR1cCk7CitleHRlcm4gdm9pZCBpbmRleGFtX3V0aWxfYmF0Y2hf cmVsZWFzZShJbmRleFNjYW5EZXNjIHNjYW4sIEJhdGNoSW5kZXhTY2FuIGJhdGNoKTsKKwogI2Vu ZGlmCQkJCQkJCS8qIEdFTkFNX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9o ZWFwYW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaAppbmRleCA2MzJjNDMzMmEuLmU4 ZDM0N2U0NyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCisrKyBiL3Ny Yy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaApAQCAtMTE4LDYgKzExOCwxMSBAQCB0eXBlZGVmIHN0 cnVjdCBJbmRleEZldGNoSGVhcERhdGEKIAogCUJ1ZmZlcgkJeHNfY2J1ZjsJCS8qIGN1cnJlbnQg aGVhcCBidWZmZXIgaW4gc2NhbiwgaWYgYW55ICovCiAJLyogTkI6IGlmIHhzX2NidWYgaXMgbm90 IEludmFsaWRCdWZmZXIsIHdlIGhvbGQgYSBwaW4gb24gdGhhdCBidWZmZXIgKi8KKworCUJ1ZmZl cgkJdm1idWY7CQkJLyogdmlzaWJpbGl0eSBtYXAgYnVmZmVyICovCisJVHVwbGVUYWJsZVNsb3Qg Kmlvc190YWJsZXNsb3Q7CS8qIHRyYW5zaWVudCBzbG90IGZvciBmZXRjaGluZyB0dXBsZXMgdG8K KwkJCQkJCQkJCSAqIGNoZWNrIHZpc2liaWxpdHkgZHVyaW5nIGluZGV4LW9ubHkKKwkJCQkJCQkJ CSAqIHNjYW5zICovCiB9IEluZGV4RmV0Y2hIZWFwRGF0YTsKIAogLyogUmVzdWx0IGNvZGVzIGZv ciBIZWFwVHVwbGVTYXRpc2ZpZXNWYWN1dW0gKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2Fj Y2Vzcy9uYnRyZWUuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9uYnRyZWUuaAppbmRleCAxNmJlNWM3 YTkuLmRhNTc2NjZkMiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL25idHJlZS5oCisr KyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9uYnRyZWUuaApAQCAtOTI0LDExMiArOTI0LDYgQEAgdHlw ZWRlZiBzdHJ1Y3QgQlRWYWN1dW1Qb3N0aW5nRGF0YQogCiB0eXBlZGVmIEJUVmFjdXVtUG9zdGlu Z0RhdGEgKkJUVmFjdXVtUG9zdGluZzsKIAotLyoKLSAqIEJUU2Nhbk9wYXF1ZURhdGEgaXMgdGhl IGJ0cmVlLXByaXZhdGUgc3RhdGUgbmVlZGVkIGZvciBhbiBpbmRleHNjYW4uCi0gKiBUaGlzIGNv bnNpc3RzIG9mIHByZXByb2Nlc3NlZCBzY2FuIGtleXMgKHNlZSBfYnRfcHJlcHJvY2Vzc19rZXlz KCkgZm9yCi0gKiBkZXRhaWxzIG9mIHRoZSBwcmVwcm9jZXNzaW5nKSwgaW5mb3JtYXRpb24gYWJv dXQgdGhlIGN1cnJlbnQgbG9jYXRpb24KLSAqIG9mIHRoZSBzY2FuLCBhbmQgaW5mb3JtYXRpb24g YWJvdXQgdGhlIG1hcmtlZCBsb2NhdGlvbiwgaWYgYW55LiAgKFdlIHVzZQotICogQlRTY2FuUG9z RGF0YSB0byByZXByZXNlbnQgdGhlIGRhdGEgbmVlZGVkIGZvciBlYWNoIG9mIGN1cnJlbnQgYW5k IG1hcmtlZAotICogbG9jYXRpb25zLikJSW4gYWRkaXRpb24gd2UgY2FuIHJlbWVtYmVyIHNvbWUg a25vd24ta2lsbGVkIGluZGV4IGVudHJpZXMKLSAqIHRoYXQgbXVzdCBiZSBtYXJrZWQgYmVmb3Jl IHdlIGNhbiBtb3ZlIG9mZiB0aGUgY3VycmVudCBwYWdlLgotICoKLSAqIEluZGV4IHNjYW5zIHdv cmsgYSBwYWdlIGF0IGEgdGltZTogd2UgcGluIGFuZCByZWFkLWxvY2sgdGhlIHBhZ2UsIGlkZW50 aWZ5Ci0gKiBhbGwgdGhlIG1hdGNoaW5nIGl0ZW1zIG9uIHRoZSBwYWdlIGFuZCBzYXZlIHRoZW0g aW4gQlRTY2FuUG9zRGF0YSwgdGhlbgotICogcmVsZWFzZSB0aGUgcmVhZC1sb2NrIHdoaWxlIHJl dHVybmluZyB0aGUgaXRlbXMgdG8gdGhlIGNhbGxlciBmb3IKLSAqIHByb2Nlc3NpbmcuICBUaGlz IGFwcHJvYWNoIG1pbmltaXplcyBsb2NrL3VubG9jayB0cmFmZmljLiAgV2UgbXVzdCBhbHdheXMK LSAqIGRyb3AgdGhlIGxvY2sgdG8gbWFrZSBpdCBva2F5IGZvciBjYWxsZXIgdG8gcHJvY2VzcyB0 aGUgcmV0dXJuZWQgaXRlbXMuCi0gKiBXaGV0aGVyIG9yIG5vdCB3ZSBjYW4gYWxzbyByZWxlYXNl IHRoZSBwaW4gZHVyaW5nIHRoaXMgd2luZG93IHdpbGwgdmFyeS4KLSAqIFdlIGRyb3AgdGhlIHBp biAod2hlbiBzby0+ZHJvcFBpbikgdG8gYXZvaWQgYmxvY2tpbmcgcHJvZ3Jlc3MgYnkgVkFDVVVN Ci0gKiAoc2VlIG5idHJlZS9SRUFETUUgc2VjdGlvbiBhYm91dCBtYWtpbmcgY29uY3VycmVudCBU SUQgcmVjeWNsaW5nIHNhZmUpLgotICogV2UnbGwgYWx3YXlzIHJlbGVhc2UgYm90aCB0aGUgbG9j ayBhbmQgdGhlIHBpbiBvbiB0aGUgY3VycmVudCBwYWdlIGJlZm9yZQotICogbW92aW5nIG9uIHRv IGl0cyBzaWJsaW5nIHBhZ2UuCi0gKgotICogSWYgd2UgYXJlIGRvaW5nIGFuIGluZGV4LW9ubHkg c2Nhbiwgd2Ugc2F2ZSB0aGUgZW50aXJlIEluZGV4VHVwbGUgZm9yIGVhY2gKLSAqIG1hdGNoZWQg aXRlbSwgb3RoZXJ3aXNlIG9ubHkgaXRzIGhlYXAgVElEIGFuZCBvZmZzZXQuICBUaGUgSW5kZXhU dXBsZXMgZ28KLSAqIGludG8gYSBzZXBhcmF0ZSB3b3Jrc3BhY2UgYXJyYXk7IGVhY2ggQlRTY2Fu UG9zSXRlbSBzdG9yZXMgaXRzIHR1cGxlJ3MKLSAqIG9mZnNldCB3aXRoaW4gdGhhdCBhcnJheS4g IFBvc3RpbmcgbGlzdCB0dXBsZXMgc3RvcmUgYSAiYmFzZSIgdHVwbGUgb25jZSwKLSAqIGFsbG93 aW5nIHRoZSBzYW1lIGtleSB0byBiZSByZXR1cm5lZCBmb3IgZWFjaCBUSUQgaW4gdGhlIHBvc3Rp bmcgbGlzdAotICogdHVwbGUuCi0gKi8KLQotdHlwZWRlZiBzdHJ1Y3QgQlRTY2FuUG9zSXRlbQkv KiB3aGF0IHdlIHJlbWVtYmVyIGFib3V0IGVhY2ggbWF0Y2ggKi8KLXsKLQlJdGVtUG9pbnRlckRh dGEgaGVhcFRpZDsJLyogVElEIG9mIHJlZmVyZW5jZWQgaGVhcCBpdGVtICovCi0JT2Zmc2V0TnVt YmVyIGluZGV4T2Zmc2V0OwkvKiBpbmRleCBpdGVtJ3MgbG9jYXRpb24gd2l0aGluIHBhZ2UgKi8K LQlMb2NhdGlvbkluZGV4IHR1cGxlT2Zmc2V0OwkvKiBJbmRleFR1cGxlJ3Mgb2Zmc2V0IGluIHdv cmtzcGFjZSwgaWYgYW55ICovCi19IEJUU2NhblBvc0l0ZW07Ci0KLXR5cGVkZWYgc3RydWN0IEJU U2NhblBvc0RhdGEKLXsKLQlCdWZmZXIJCWJ1ZjsJCQkvKiBjdXJyUGFnZSBidWYgKGludmFsaWQg bWVhbnMgdW5waW5uZWQpICovCi0KLQkvKiBwYWdlIGRldGFpbHMgYXMgb2YgdGhlIHNhdmVkIHBv c2l0aW9uJ3MgY2FsbCB0byBfYnRfcmVhZHBhZ2UgKi8KLQlCbG9ja051bWJlciBjdXJyUGFnZTsJ CS8qIHBhZ2UgcmVmZXJlbmNlZCBieSBpdGVtcyBhcnJheSAqLwotCUJsb2NrTnVtYmVyIHByZXZQ YWdlOwkJLyogY3VyclBhZ2UncyBsZWZ0IGxpbmsgKi8KLQlCbG9ja051bWJlciBuZXh0UGFnZTsJ CS8qIGN1cnJQYWdlJ3MgcmlnaHQgbGluayAqLwotCVhMb2dSZWNQdHIJbHNuOwkJCS8qIGN1cnJQ YWdlJ3MgTFNOICh3aGVuIHNvLT5kcm9wUGluKSAqLwotCi0JLyogc2NhbiBkaXJlY3Rpb24gZm9y IHRoZSBzYXZlZCBwb3NpdGlvbidzIGNhbGwgdG8gX2J0X3JlYWRwYWdlICovCi0JU2NhbkRpcmVj dGlvbiBkaXI7Ci0KLQkvKgotCSAqIElmIHdlIGFyZSBkb2luZyBhbiBpbmRleC1vbmx5IHNjYW4s IG5leHRUdXBsZU9mZnNldCBpcyB0aGUgZmlyc3QgZnJlZQotCSAqIGxvY2F0aW9uIGluIHRoZSBh c3NvY2lhdGVkIHR1cGxlIHN0b3JhZ2Ugd29ya3NwYWNlLgotCSAqLwotCWludAkJCW5leHRUdXBs ZU9mZnNldDsKLQotCS8qCi0JICogbW9yZUxlZnQgYW5kIG1vcmVSaWdodCB0cmFjayB3aGV0aGVy IHdlIHRoaW5rIHRoZXJlIG1heSBiZSBtYXRjaGluZwotCSAqIGluZGV4IGVudHJpZXMgdG8gdGhl IGxlZnQgYW5kIHJpZ2h0IG9mIHRoZSBjdXJyZW50IHBhZ2UsIHJlc3BlY3RpdmVseS4KLQkgKi8K LQlib29sCQltb3JlTGVmdDsKLQlib29sCQltb3JlUmlnaHQ7Ci0KLQkvKgotCSAqIFRoZSBpdGVt cyBhcnJheSBpcyBhbHdheXMgb3JkZXJlZCBpbiBpbmRleCBvcmRlciAoaWUsIGluY3JlYXNpbmcK LQkgKiBpbmRleG9mZnNldCkuICBXaGVuIHNjYW5uaW5nIGJhY2t3YXJkcyBpdCBpcyBjb252ZW5p ZW50IHRvIGZpbGwgdGhlCi0JICogYXJyYXkgYmFjay10by1mcm9udCwgc28gd2Ugc3RhcnQgYXQg dGhlIGxhc3Qgc2xvdCBhbmQgZmlsbCBkb3dud2FyZHMuCi0JICogSGVuY2Ugd2UgbmVlZCBib3Ro IGEgZmlyc3QtdmFsaWQtZW50cnkgYW5kIGEgbGFzdC12YWxpZC1lbnRyeSBjb3VudGVyLgotCSAq IGl0ZW1JbmRleCBpcyBhIGN1cnNvciBzaG93aW5nIHdoaWNoIGVudHJ5IHdhcyBsYXN0IHJldHVy bmVkIHRvIGNhbGxlci4KLQkgKi8KLQlpbnQJCQlmaXJzdEl0ZW07CQkvKiBmaXJzdCB2YWxpZCBp bmRleCBpbiBpdGVtc1tdICovCi0JaW50CQkJbGFzdEl0ZW07CQkvKiBsYXN0IHZhbGlkIGluZGV4 IGluIGl0ZW1zW10gKi8KLQlpbnQJCQlpdGVtSW5kZXg7CQkvKiBjdXJyZW50IGluZGV4IGluIGl0 ZW1zW10gKi8KLQotCUJUU2NhblBvc0l0ZW0gaXRlbXNbTWF4VElEc1BlckJUcmVlUGFnZV07CS8q IE1VU1QgQkUgTEFTVCAqLwotfSBCVFNjYW5Qb3NEYXRhOwotCi10eXBlZGVmIEJUU2NhblBvc0Rh dGEgKkJUU2NhblBvczsKLQotI2RlZmluZSBCVFNjYW5Qb3NJc1Bpbm5lZChzY2FucG9zKSBcCi0o IFwKLQlBc3NlcnRNYWNybyhCbG9ja051bWJlcklzVmFsaWQoKHNjYW5wb3MpLmN1cnJQYWdlKSB8 fCBcCi0JCQkJIUJ1ZmZlcklzVmFsaWQoKHNjYW5wb3MpLmJ1ZikpLCBcCi0JQnVmZmVySXNWYWxp ZCgoc2NhbnBvcykuYnVmKSBcCi0pCi0jZGVmaW5lIEJUU2NhblBvc1VucGluKHNjYW5wb3MpIFwK LQlkbyB7IFwKLQkJUmVsZWFzZUJ1ZmZlcigoc2NhbnBvcykuYnVmKTsgXAotCQkoc2NhbnBvcyku YnVmID0gSW52YWxpZEJ1ZmZlcjsgXAotCX0gd2hpbGUgKDApCi0jZGVmaW5lIEJUU2NhblBvc1Vu cGluSWZQaW5uZWQoc2NhbnBvcykgXAotCWRvIHsgXAotCQlpZiAoQlRTY2FuUG9zSXNQaW5uZWQo c2NhbnBvcykpIFwKLQkJCUJUU2NhblBvc1VucGluKHNjYW5wb3MpOyBcCi0JfSB3aGlsZSAoMCkK LQotI2RlZmluZSBCVFNjYW5Qb3NJc1ZhbGlkKHNjYW5wb3MpIFwKLSggXAotCUFzc2VydE1hY3Jv KEJsb2NrTnVtYmVySXNWYWxpZCgoc2NhbnBvcykuY3VyclBhZ2UpIHx8IFwKLQkJCQkhQnVmZmVy SXNWYWxpZCgoc2NhbnBvcykuYnVmKSksIFwKLQlCbG9ja051bWJlcklzVmFsaWQoKHNjYW5wb3Mp LmN1cnJQYWdlKSBcCi0pCi0jZGVmaW5lIEJUU2NhblBvc0ludmFsaWRhdGUoc2NhbnBvcykgXAot CWRvIHsgXAotCQkoc2NhbnBvcykuYnVmID0gSW52YWxpZEJ1ZmZlcjsgXAotCQkoc2NhbnBvcyku Y3VyclBhZ2UgPSBJbnZhbGlkQmxvY2tOdW1iZXI7IFwKLQl9IHdoaWxlICgwKQotCiAvKiBXZSBu ZWVkIG9uZSBvZiB0aGVzZSBmb3IgZWFjaCBlcXVhbGl0eS10eXBlIFNLX1NFQVJDSEFSUkFZIHNj YW4ga2V5ICovCiB0eXBlZGVmIHN0cnVjdCBCVEFycmF5S2V5SW5mbwogewpAQCAtMTA1MCw2ICs5 NDQsMzAgQEAgdHlwZWRlZiBzdHJ1Y3QgQlRBcnJheUtleUluZm8KIAlTY2FuS2V5CQloaWdoX2Nv bXBhcmU7CS8qIGFycmF5J3MgPCBvciA8PSB1cHBlciBib3VuZCAqLwogfSBCVEFycmF5S2V5SW5m bzsKIAorLyoKKyAqIEJUU2Nhbk9wYXF1ZURhdGEgaXMgdGhlIGJ0cmVlLXByaXZhdGUgc3RhdGUg bmVlZGVkIGZvciBhbiBpbmRleHNjYW4uCisgKiBUaGlzIGNvbnNpc3RzIG9mIHByZXByb2Nlc3Nl ZCBzY2FuIGtleXMgKHNlZSBfYnRfcHJlcHJvY2Vzc19rZXlzKCkgZm9yCisgKiBkZXRhaWxzIG9m IHRoZSBwcmVwcm9jZXNzaW5nKSwgYW5kIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50IGFy cmF5CisgKiBrZXlzLiAgVGhlcmUgYXJlIGFzc3VtcHRpb25zIGFib3V0IGhvdyB0aGUgY3VycmVu dCBhcnJheSBrZXlzIHRyYWNrIHRoZQorICogcHJvZ3Jlc3Mgb2YgdGhlIGluZGV4IHNjYW4gdGhy b3VnaCB0aGUgaW5kZXgncyBrZXkgc3BhY2UgKHNlZSBfYnRfcmVhZHBhZ2UKKyAqIGFuZCBfYnRf YWR2YW5jZV9hcnJheV9rZXlzKSwgYnV0IHdlIGRvbid0IGFjdHVhbGx5IHRyYWNrIGFueXRoaW5n IGFib3V0IHRoZQorICogY3VycmVudCBzY2FuIHBvc2l0aW9uIGluIHRoaXMgb3BhcXVlIHN0cnVj dC4gIFRoYXQgaXMgdHJhY2tlZCBleHRlcm5hbGx5LAorICogYnkgaW1wbGVtZW50aW5nIGEgcXVl dWUgb2YgImJhdGNoZXMiLCB3aGVyZSBlYWNoIGJhdGNoIHJlcHJlc2VudHMgdGhlIGl0ZW1zCisg KiByZXR1cm5lZCBieSBidGdldGJhdGNoIHdpdGhpbiBhIHNpbmdsZSBsZWFmIHBhZ2UuCisgKgor ICogSW5kZXggc2NhbnMgd29yayBhIHBhZ2UgYXQgYSB0aW1lLCBhcyByZXF1aXJlZCBieSB0aGUg YW1nZXRiYXRjaCBjb250cmFjdDoKKyAqIHdlIHBpbiBhbmQgcmVhZC1sb2NrIHRoZSBwYWdlLCBp ZGVudGlmeSBhbGwgdGhlIG1hdGNoaW5nIGl0ZW1zIG9uIHRoZSBwYWdlCisgKiBhbmQgcmV0dXJu IHRoZW0gaW4gYSBuZXdseSBhbGxvY2F0ZWQgYmF0Y2guICBXZSB0aGVuIHJlbGVhc2UgdGhlIHJl YWQtbG9jaworICogdXNpbmcgYW1nZXRiYXRjaCB1dGlsaXR5IHJvdXRpbmVzLiAgVGhpcyBhcHBy b2FjaCBtaW5pbWl6ZXMgbG9jay91bmxvY2sKKyAqIHRyYWZmaWMuIF9idF9uZXh0IGlzIHBhc3Nl ZCBwcmlvcmJhdGNoLCB3aGljaCBjb250YWlucyBkZXRhaWxzIG9mIHdoaWNoCisgKiBwYWdlIGlz IG5leHQgaW4gbGluZSB0byBiZSByZWFkIChwcmlvcmJhdGNoIGlzIHByb3ZpZGVkIGFzIGFuIGFy Z3VtZW50IHRvCisgKiBidGdldGJhdGNoIGJ5IGNvcmUgY29kZSkuCisgKgorICogSWYgd2UgYXJl IGRvaW5nIGFuIGluZGV4LW9ubHkgc2Nhbiwgd2Ugc2F2ZSB0aGUgZW50aXJlIEluZGV4VHVwbGUg Zm9yIGVhY2gKKyAqIG1hdGNoZWQgaXRlbSwgb3RoZXJ3aXNlIG9ubHkgaXRzIGhlYXAgVElEIGFu ZCBvZmZzZXQuICBUaGlzIGlzIGFsc28gcGVyIHRoZQorICogYW1nZXRiYXRjaCBjb250cmFjdC4g IFBvc3RpbmcgbGlzdCB0dXBsZXMgc3RvcmUgYSAiYmFzZSIgdHVwbGUgb25jZSwKKyAqIGFsbG93 aW5nIHRoZSBzYW1lIGtleSB0byBiZSByZXR1cm5lZCBmb3IgZWFjaCBUSUQgaW4gdGhlIHBvc3Rp bmcgbGlzdC4KKyAqLwogdHlwZWRlZiBzdHJ1Y3QgQlRTY2FuT3BhcXVlRGF0YQogewogCS8qIHRo ZXNlIGZpZWxkcyBhcmUgc2V0IGJ5IF9idF9wcmVwcm9jZXNzX2tleXMoKTogKi8KQEAgLTEwNjYs MzIgKzk4NCw2IEBAIHR5cGVkZWYgc3RydWN0IEJUU2Nhbk9wYXF1ZURhdGEKIAlCVEFycmF5S2V5 SW5mbyAqYXJyYXlLZXlzOwkvKiBpbmZvIGFib3V0IGVhY2ggZXF1YWxpdHktdHlwZSBhcnJheSBr ZXkgKi8KIAlGbWdySW5mbyAgICpvcmRlclByb2NzOwkJLyogT1JERVIgcHJvY3MgZm9yIHJlcXVp cmVkIGVxdWFsaXR5IGtleXMgKi8KIAlNZW1vcnlDb250ZXh0IGFycmF5Q29udGV4dDsgLyogc2Nh bi1saWZlc3BhbiBjb250ZXh0IGZvciBhcnJheSBkYXRhICovCi0KLQkvKiBpbmZvIGFib3V0IGtp bGxlZCBpdGVtcyBpZiBhbnkgKGtpbGxlZEl0ZW1zIGlzIE5VTEwgaWYgbmV2ZXIgdXNlZCkgKi8K LQlpbnQJCSAgICpraWxsZWRJdGVtczsJLyogY3VyclBvcy5pdGVtcyBpbmRleGVzIG9mIGtpbGxl ZCBpdGVtcyAqLwotCWludAkJCW51bUtpbGxlZDsJCS8qIG51bWJlciBvZiBjdXJyZW50bHkgc3Rv cmVkIGl0ZW1zICovCi0JYm9vbAkJZHJvcFBpbjsJCS8qIGRyb3AgbGVhZiBwaW4gYmVmb3JlIGJ0 Z2V0dHVwbGUgcmV0dXJucz8gKi8KLQotCS8qCi0JICogSWYgd2UgYXJlIGRvaW5nIGFuIGluZGV4 LW9ubHkgc2NhbiwgdGhlc2UgYXJlIHRoZSB0dXBsZSBzdG9yYWdlCi0JICogd29ya3NwYWNlcyBm b3IgdGhlIGN1cnJQb3MgYW5kIG1hcmtQb3MgcmVzcGVjdGl2ZWx5LiAgRWFjaCBpcyBvZiBzaXpl Ci0JICogQkxDS1NaLCBzbyBpdCBjYW4gaG9sZCBhcyBtdWNoIGFzIGEgZnVsbCBwYWdlJ3Mgd29y dGggb2YgdHVwbGVzLgotCSAqLwotCWNoYXIJICAgKmN1cnJUdXBsZXM7CQkvKiB0dXBsZSBzdG9y YWdlIGZvciBjdXJyUG9zICovCi0JY2hhcgkgICAqbWFya1R1cGxlczsJCS8qIHR1cGxlIHN0b3Jh Z2UgZm9yIG1hcmtQb3MgKi8KLQotCS8qCi0JICogSWYgdGhlIG1hcmtlZCBwb3NpdGlvbiBpcyBv biB0aGUgc2FtZSBwYWdlIGFzIGN1cnJlbnQgcG9zaXRpb24sIHdlCi0JICogZG9uJ3QgdXNlIG1h cmtQb3MsIGJ1dCBqdXN0IGtlZXAgdGhlIG1hcmtlZCBpdGVtSW5kZXggaW4gbWFya0l0ZW1JbmRl eAotCSAqIChhbGwgdGhlIHJlc3Qgb2YgY3VyclBvcyBpcyB2YWxpZCBmb3IgdGhlIG1hcmsgcG9z aXRpb24pLiBIZW5jZSwgdG8KLQkgKiBkZXRlcm1pbmUgaWYgdGhlcmUgaXMgYSBtYXJrLCBmaXJz dCBsb29rIGF0IG1hcmtJdGVtSW5kZXgsIHRoZW4gYXQKLQkgKiBtYXJrUG9zLgotCSAqLwotCWlu dAkJCW1hcmtJdGVtSW5kZXg7CS8qIGl0ZW1JbmRleCwgb3IgLTEgaWYgbm90IHZhbGlkICovCi0K LQkvKiBrZWVwIHRoZXNlIGxhc3QgaW4gc3RydWN0IGZvciBlZmZpY2llbmN5ICovCi0JQlRTY2Fu UG9zRGF0YSBjdXJyUG9zOwkJLyogY3VycmVudCBwb3NpdGlvbiBkYXRhICovCi0JQlRTY2FuUG9z RGF0YSBtYXJrUG9zOwkJLyogbWFya2VkIHBvc2l0aW9uLCBpZiBhbnkgKi8KIH0gQlRTY2FuT3Bh cXVlRGF0YTsKIAogdHlwZWRlZiBCVFNjYW5PcGFxdWVEYXRhICpCVFNjYW5PcGFxdWU7CkBAIC0x MTAyLDYgKzk5NCw4IEBAIHR5cGVkZWYgQlRTY2FuT3BhcXVlRGF0YSAqQlRTY2FuT3BhcXVlOwog dHlwZWRlZiBzdHJ1Y3QgQlRSZWFkUGFnZVN0YXRlCiB7CiAJLyogSW5wdXQgcGFyYW1ldGVycywg c2V0IGJ5IF9idF9yZWFkcGFnZSBmb3IgX2J0X2NoZWNra2V5cyAqLworCVNjYW5EaXJlY3Rpb24g ZGlyOwkJCS8qIGN1cnJlbnQgc2NhbiBkaXJlY3Rpb24gKi8KKwlCbG9ja051bWJlciBjdXJycGFn ZTsJCS8qIGN1cnJlbnQgcGFnZSBiZWluZyByZWFkICovCiAJT2Zmc2V0TnVtYmVyIG1pbm9mZjsJ CS8qIExvd2VzdCBub24tcGl2b3QgdHVwbGUncyBvZmZzZXQgKi8KIAlPZmZzZXROdW1iZXIgbWF4 b2ZmOwkJLyogSGlnaGVzdCBub24tcGl2b3QgdHVwbGUncyBvZmZzZXQgKi8KIAlJbmRleFR1cGxl CWZpbmFsdHVwOwkJLyogTmVlZGVkIGJ5IHNjYW5zIHdpdGggYXJyYXkga2V5cyAqLwpAQCAtMTE5 MSwxNCArMTA4NSwxNiBAQCBleHRlcm4gYm9vbCBidGluc2VydChSZWxhdGlvbiByZWwsIERhdHVt ICp2YWx1ZXMsIGJvb2wgKmlzbnVsbCwKIGV4dGVybiBJbmRleFNjYW5EZXNjIGJ0YmVnaW5zY2Fu KFJlbGF0aW9uIHJlbCwgaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzKTsKIGV4dGVybiBTaXplIGJ0 ZXN0aW1hdGVwYXJhbGxlbHNjYW4oUmVsYXRpb24gcmVsLCBpbnQgbmtleXMsIGludCBub3JkZXJi eXMpOwogZXh0ZXJuIHZvaWQgYnRpbml0cGFyYWxsZWxzY2FuKHZvaWQgKnRhcmdldCk7Ci1leHRl cm4gYm9vbCBidGdldHR1cGxlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIp OworZXh0ZXJuIEJhdGNoSW5kZXhTY2FuIGJ0Z2V0YmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLAor CQkJCQkJCQkgQmF0Y2hJbmRleFNjYW4gcHJpb3JiYXRjaCwKKwkJCQkJCQkJIFNjYW5EaXJlY3Rp b24gZGlyKTsKIGV4dGVybiBpbnQ2NCBidGdldGJpdG1hcChJbmRleFNjYW5EZXNjIHNjYW4sIFRJ REJpdG1hcCAqdGJtKTsKIGV4dGVybiB2b2lkIGJ0cmVzY2FuKEluZGV4U2NhbkRlc2Mgc2Nhbiwg U2NhbktleSBzY2Fua2V5LCBpbnQgbnNjYW5rZXlzLAogCQkJCQkgU2NhbktleSBvcmRlcmJ5cywg aW50IG5vcmRlcmJ5cyk7CitleHRlcm4gdm9pZCBidGZyZWViYXRjaChJbmRleFNjYW5EZXNjIHNj YW4sIEJhdGNoSW5kZXhTY2FuIGJhdGNoKTsKIGV4dGVybiB2b2lkIGJ0cGFyYWxsZWxyZXNjYW4o SW5kZXhTY2FuRGVzYyBzY2FuKTsKIGV4dGVybiB2b2lkIGJ0ZW5kc2NhbihJbmRleFNjYW5EZXNj IHNjYW4pOwotZXh0ZXJuIHZvaWQgYnRtYXJrcG9zKEluZGV4U2NhbkRlc2Mgc2Nhbik7Ci1leHRl cm4gdm9pZCBidHJlc3RycG9zKEluZGV4U2NhbkRlc2Mgc2Nhbik7CitleHRlcm4gdm9pZCBidHBv c3Jlc2V0KEluZGV4U2NhbkRlc2Mgc2NhbiwgQmF0Y2hJbmRleFNjYW4gbWFya2JhdGNoKTsKIGV4 dGVybiBJbmRleEJ1bGtEZWxldGVSZXN1bHQgKmJ0YnVsa2RlbGV0ZShJbmRleFZhY3V1bUluZm8g KmluZm8sCiAJCQkJCQkJCQkJICAgSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICpzdGF0cywKIAkJCQkJ CQkJCQkgICBJbmRleEJ1bGtEZWxldGVDYWxsYmFjayBjYWxsYmFjaywKQEAgLTEzMDYsOCArMTIw Miw5IEBAIGV4dGVybiBCVFN0YWNrIF9idF9zZWFyY2goUmVsYXRpb24gcmVsLCBSZWxhdGlvbiBo ZWFwcmVsLCBCVFNjYW5JbnNlcnQga2V5LAogCQkJCQkJICBCdWZmZXIgKmJ1ZlAsIGludCBhY2Nl c3MpOwogZXh0ZXJuIE9mZnNldE51bWJlciBfYnRfYmluc3JjaF9pbnNlcnQoUmVsYXRpb24gcmVs LCBCVEluc2VydFN0YXRlIGluc2VydHN0YXRlKTsKIGV4dGVybiBpbnQzMiBfYnRfY29tcGFyZShS ZWxhdGlvbiByZWwsIEJUU2Nhbkluc2VydCBrZXksIFBhZ2UgcGFnZSwgT2Zmc2V0TnVtYmVyIG9m Zm51bSk7Ci1leHRlcm4gYm9vbCBfYnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGly ZWN0aW9uIGRpcik7Ci1leHRlcm4gYm9vbCBfYnRfbmV4dChJbmRleFNjYW5EZXNjIHNjYW4sIFNj YW5EaXJlY3Rpb24gZGlyKTsKK2V4dGVybiBCYXRjaEluZGV4U2NhbiBfYnRfZmlyc3QoSW5kZXhT Y2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcik7CitleHRlcm4gQmF0Y2hJbmRleFNjYW4g X2J0X25leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwKKwkJCQkJCQkg ICBCYXRjaEluZGV4U2NhbiBwcmlvcmJhdGNoKTsKIGV4dGVybiBCdWZmZXIgX2J0X2dldF9lbmRw b2ludChSZWxhdGlvbiByZWwsIHVpbnQzMiBsZXZlbCwgYm9vbCByaWdodG1vc3QpOwogCiAvKgpA QCAtMTMyNyw3ICsxMjI0LDcgQEAgZXh0ZXJuIGJvb2wgX2J0X2NoZWNra2V5cyhJbmRleFNjYW5E ZXNjIHNjYW4sIEJUUmVhZFBhZ2VTdGF0ZSAqcHN0YXRlLCBib29sIGFycmEKIGV4dGVybiBib29s IF9idF9zY2FuYmVoaW5kX2NoZWNra2V5cyhJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rp b24gZGlyLAogCQkJCQkJCQkJIEluZGV4VHVwbGUgZmluYWx0dXApOwogZXh0ZXJuIHZvaWQgX2J0 X3NldF9zdGFydGlrZXkoSW5kZXhTY2FuRGVzYyBzY2FuLCBCVFJlYWRQYWdlU3RhdGUgKnBzdGF0 ZSk7Ci1leHRlcm4gdm9pZCBfYnRfa2lsbGl0ZW1zKEluZGV4U2NhbkRlc2Mgc2Nhbik7CitleHRl cm4gdm9pZCBfYnRfa2lsbGl0ZW1zKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmF0Y2hJbmRleFNjYW4g YmF0Y2gpOwogZXh0ZXJuIEJUQ3ljbGVJZCBfYnRfdmFjdXVtX2N5Y2xlaWQoUmVsYXRpb24gcmVs KTsKIGV4dGVybiBCVEN5Y2xlSWQgX2J0X3N0YXJ0X3ZhY3V1bShSZWxhdGlvbiByZWwpOwogZXh0 ZXJuIHZvaWQgX2J0X2VuZF92YWN1dW0oUmVsYXRpb24gcmVsKTsKZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oCmlu ZGV4IDg3YThiZTEwNC4uOTEzOWYyOGY4IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3Mv cmVsc2Nhbi5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmgKQEAgLTE2LDYgKzE2 LDcgQEAKIAogI2luY2x1ZGUgImFjY2Vzcy9odHVwX2RldGFpbHMuaCIKICNpbmNsdWRlICJhY2Nl c3MvaXR1cC5oIgorI2luY2x1ZGUgImFjY2Vzcy9zZGlyLmgiCiAjaW5jbHVkZSAibm9kZXMvdGlk Yml0bWFwLmgiCiAjaW5jbHVkZSAicG9ydC9hdG9taWNzLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9i dWYuaCIKQEAgLTEyMyw4ICsxMjQsMTgwIEBAIHR5cGVkZWYgc3RydWN0IFBhcmFsbGVsQmxvY2tU YWJsZVNjYW5Xb3JrZXJEYXRhICpQYXJhbGxlbEJsb2NrVGFibGVTY2FuV29ya2VyOwogdHlwZWRl ZiBzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YQogewogCVJlbGF0aW9uCXJlbDsKKworCWludAkJ CW5oZWFwYWNjZXNzZXM7CS8qIG51bWJlciBvZiBoZWFwIGFjY2Vzc2VzLCBmb3IKKwkJCQkJCQkJ ICogaW5zdHJ1bWVudGF0aW9uL21ldHJpY3MgKi8KIH0gSW5kZXhGZXRjaFRhYmxlRGF0YTsKIAor LyoKKyAqIFF1ZXVlLXdpc2UgbG9jYXRpb24gb2YgYSBCYXRjaE1hdGNoaW5nSXRlbSB0aGF0IGFw cGVhcnMgaW4gYSBCYXRjaEluZGV4U2NhbgorICogcmV0dXJuZWQgYnkgKGFuZCBzdWJzZXF1ZW50 bHkgcGFzc2VkIHRvKSBhbiBhbWdldGJhdGNoIHJvdXRpbmUKKyAqLwordHlwZWRlZiBzdHJ1Y3Qg QmF0Y2hRdWV1ZUl0ZW1Qb3MKK3sKKwkvKiBCYXRjaFF1ZXVlLmJhdGNoZXNbXS13aXNlIGluZGV4 IHRvIHJlbGV2YW50IEJhdGNoSW5kZXhTY2FuICovCisJaW50CQkJYmF0Y2g7CisKKwkvKiBCYXRj aEluZGV4U2Nhbi5pdGVtc1tdLXdpc2UgaW5kZXggdG8gcmVsZXZhbnQgQmF0Y2hNYXRjaGluZ0l0 ZW0gKi8KKwlpbnQJCQlpdGVtOworfSBCYXRjaFF1ZXVlSXRlbVBvczsKKworc3RhdGljIGlubGlu ZSB2b2lkCitiYXRjaF9yZXNldF9wb3MoQmF0Y2hRdWV1ZUl0ZW1Qb3MgKnBvcykKK3sKKwlwb3Mt PmJhdGNoID0gLTE7CisJcG9zLT5pdGVtID0gLTE7Cit9CisKKy8qCisgKiBNYXRjaGluZyBpdGVt IHJldHVybmVkIGJ5IGFtZ2V0YmF0Y2ggKGluIHJldHVybmVkIEJhdGNoSW5kZXhTY2FuKSBkdXJp bmcgYW4KKyAqIGluZGV4IHNjYW4uICBVc2VkIGJ5IHRhYmxlIEFNIHRvIGxvY2F0ZSByZWxldmFu dCBtYXRjaGluZyB0YWJsZSB0dXBsZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgQmF0Y2hNYXRjaGlu Z0l0ZW0KK3sKKwlJdGVtUG9pbnRlckRhdGEgaGVhcFRpZDsJLyogVElEIG9mIHJlZmVyZW5jZWQg aGVhcCBpdGVtICovCisJT2Zmc2V0TnVtYmVyIGluZGV4T2Zmc2V0OwkvKiBpbmRleCBpdGVtJ3Mg bG9jYXRpb24gd2l0aGluIHBhZ2UgKi8KKwlMb2NhdGlvbkluZGV4IHR1cGxlT2Zmc2V0OwkvKiBJ bmRleFR1cGxlJ3Mgb2Zmc2V0IGluIHdvcmtzcGFjZSwgaWYgYW55ICovCit9IEJhdGNoTWF0Y2hp bmdJdGVtOworCisvKgorICogRGF0YSBhYm91dCBvbmUgYmF0Y2ggb2YgaXRlbXMgcmV0dXJuZWQg YnkgKGFuZCBwYXNzZWQgdG8pIGFtZ2V0YmF0Y2ggZHVyaW5nCisgKiBpbmRleCBzY2FucworICov Cit0eXBlZGVmIHN0cnVjdCBCYXRjaEluZGV4U2NhbkRhdGEKK3sKKwkvKgorCSAqIEluZm9ybWF0 aW9uIG91dHB1dCBieSBhbWdldGJhdGNoIGluZGV4IEFNcyB1cG9uIHJldHVybmluZyBhIGJhdGNo IHdpdGgKKwkgKiBvbmUgb3IgbW9yZSBtYXRjaGluZyBpdGVtcywgZGVzY3JpYmluZyBkZXRhaWxz IG9mIHRoZSBpbmRleCBwYWdlIHdoZXJlCisJICogbWF0Y2hlcyB3ZXJlIGxvY2F0ZWQuCisJICoK KwkgKiBVc2VkIGluIHRoZSBuZXh0IGFtZ2V0YmF0Y2ggY2FsbCB0byBkZXRlcm1pbmUgd2hpY2gg aW5kZXggcGFnZSB0byByZWFkCisJICogbmV4dCAob3IgdG8gZGV0ZXJtaW5lIGlmIHRoZXJlJ3Mg bm8gZnVydGhlciBtYXRjaGVzIGluIGN1cnJlbnQgc2NhbgorCSAqIGRpcmVjdGlvbikuCisJICov CisJQmxvY2tOdW1iZXIgY3VyclBhZ2U7CQkvKiBJbmRleCBwYWdlIHdpdGggbWF0Y2hpbmcgaXRl bXMgKi8KKwlCbG9ja051bWJlciBwcmV2UGFnZTsJCS8qIGN1cnJQYWdlJ3MgbGVmdCBsaW5rICov CisJQmxvY2tOdW1iZXIgbmV4dFBhZ2U7CQkvKiBjdXJyUGFnZSdzIHJpZ2h0IGxpbmsgKi8KKwor CUJ1ZmZlcgkJYnVmOwkJCS8qIGN1cnJQYWdlIGJ1ZiAoaW52YWxpZCBtZWFucyB1bnBpbm5lZCkg Ki8KKwlYTG9nUmVjUHRyCWxzbjsJCQkvKiBjdXJyUGFnZSdzIExTTiAod2hlbiBkcm9wUGluKSAq LworCisJLyogc2NhbiBkaXJlY3Rpb24gd2hlbiB0aGUgaW5kZXggcGFnZSB3YXMgcmVhZCAqLwor CVNjYW5EaXJlY3Rpb24gZGlyOworCisJLyoKKwkgKiBtb3JlTGVmdCBhbmQgbW9yZVJpZ2h0IHRy YWNrIHdoZXRoZXIgd2UgdGhpbmsgdGhlcmUgbWF5IGJlIG1hdGNoaW5nCisJICogaW5kZXggZW50 cmllcyB0byB0aGUgbGVmdCBhbmQgcmlnaHQgb2YgdGhlIGN1cnJlbnQgcGFnZSwgcmVzcGVjdGl2 ZWx5CisJICovCisJYm9vbAkJbW9yZUxlZnQ7CisJYm9vbAkJbW9yZVJpZ2h0OworCisJLyoKKwkg KiBUaGUgaXRlbXMgYXJyYXkgaXMgYWx3YXlzIG9yZGVyZWQgaW4gaW5kZXggb3JkZXIgKGllLCBp bmNyZWFzaW5nCisJICogaW5kZXhvZmZzZXQpLiAgV2hlbiBzY2FubmluZyBiYWNrd2FyZHMgaXQg aXMgY29udmVuaWVudCB0byBmaWxsIHRoZQorCSAqIGFycmF5IGJhY2stdG8tZnJvbnQsIHNvIHdl IHN0YXJ0IGF0IHRoZSBsYXN0IHNsb3QgYW5kIGZpbGwgZG93bndhcmRzLgorCSAqIEhlbmNlIHdl IG5lZWQgYm90aCBhIGZpcnN0LXZhbGlkLWVudHJ5IGFuZCBhIGxhc3QtdmFsaWQtZW50cnkgY291 bnRlci4KKwkgKi8KKwlpbnQJCQlmaXJzdEl0ZW07CQkvKiBmaXJzdCB2YWxpZCBpbmRleCBpbiBp dGVtc1tdICovCisJaW50CQkJbGFzdEl0ZW07CQkvKiBsYXN0IHZhbGlkIGluZGV4IGluIGl0ZW1z W10gKi8KKworCS8qIGluZm8gYWJvdXQga2lsbGVkIGl0ZW1zIGlmIGFueSAoa2lsbGVkSXRlbXMg aXMgTlVMTCBpZiBuZXZlciB1c2VkKSAqLworCWludAkJICAgKmtpbGxlZEl0ZW1zOwkvKiBpbmRl eGVzIG9mIGtpbGxlZCBpdGVtcyAqLworCWludAkJCW51bUtpbGxlZDsJCS8qIG51bWJlciBvZiBj dXJyZW50bHkgc3RvcmVkIGl0ZW1zICovCisKKwkvKgorCSAqIE1hdGNoaW5nIGl0ZW1zIHN0YXRl IGZvciB0aGlzIGJhdGNoLgorCSAqCisJICogSWYgd2UgYXJlIGRvaW5nIGFuIGluZGV4LW9ubHkg c2NhbiwgdGhlc2UgYXJlIHRoZSB0dXBsZSBzdG9yYWdlCisJICogd29ya3NwYWNlcyBmb3IgdGhl IG1hdGNoaW5nIHR1cGxlcyAodHVwbGVzIHJlZmVyZW5jZWQgYnkgaXRlbXNbXSkuIEVhY2gKKwkg KiBpcyBvZiBzaXplIEJMQ0tTWiwgc28gaXQgY2FuIGhvbGQgYXMgbXVjaCBhcyBhIGZ1bGwgcGFn ZSdzIHdvcnRoIG9mCisJICogdHVwbGVzLgorCSAqLworCWNoYXIJICAgKmN1cnJUdXBsZXM7CQkv KiB0dXBsZSBzdG9yYWdlIGZvciBpdGVtc1tdICovCisJaW50CQkJbWF4aXRlbXM7CQkvKiBhbGxv Y2F0ZWQgc2l6ZSBvZiBpdGVtc1tdICovCisJQmF0Y2hNYXRjaGluZ0l0ZW0gaXRlbXNbRkxFWElC TEVfQVJSQVlfTUVNQkVSXTsKK30gQmF0Y2hJbmRleFNjYW5EYXRhOworCit0eXBlZGVmIHN0cnVj dCBCYXRjaEluZGV4U2NhbkRhdGEgKkJhdGNoSW5kZXhTY2FuOworCisvKgorICogTWF4aW11bSBu dW1iZXIgb2YgYmF0Y2hlcyAobGVhZiBwYWdlcykgd2UgY2FuIGtlZXAgaW4gbWVtb3J5LiAgV2Ug bmVlZCBhCisgKiBtaW5pbXVtIG9mIHR3bywgc2luY2Ugd2UnbGwgb25seSBjb25zaWRlciByZWxl YXNpbmcgb25lIGJhdGNoIHdoZW4gYW5vdGhlcgorICogaXMgcmVhZC4KKyAqLworI2RlZmluZSBJ TkRFWF9TQ0FOX01BWF9CQVRDSEVTCQkyCisjZGVmaW5lIElOREVYX1NDQU5fQ0FDSEVfQkFUQ0hF UwkyCisjZGVmaW5lIElOREVYX1NDQU5fQkFUQ0hfQ09VTlQoc2NhbikgXAorCSgoc2NhbiktPmJh dGNocXVldWUtPm5leHRCYXRjaCAtIChzY2FuKS0+YmF0Y2hxdWV1ZS0+aGVhZEJhdGNoKQorCisv KiBEaWQgd2UgYWxyZWFkeSBsb2FkIGJhdGNoIHdpdGggdGhlIHJlcXVlc3RlZCBpbmRleD8gKi8K KyNkZWZpbmUgSU5ERVhfU0NBTl9CQVRDSF9MT0FERUQoc2NhbiwgaWR4KSBcCisJKChpZHgpIDwg KHNjYW4pLT5iYXRjaHF1ZXVlLT5uZXh0QmF0Y2gpCisKKy8qIEhhdmUgd2UgbG9hZGVkIHRoZSBt YXhpbXVtIG51bWJlciBvZiBiYXRjaGVzPyAqLworI2RlZmluZSBJTkRFWF9TQ0FOX0JBVENIX0ZV TEwoc2NhbikgXAorCShJTkRFWF9TQ0FOX0JBVENIX0NPVU5UKHNjYW4pID09IHNjYW4tPmJhdGNo cXVldWUtPm1heEJhdGNoZXMpCisKKy8qIFJldHVybiBiYXRjaCBmb3IgdGhlIHByb3ZpZGVkIGlu ZGV4LiAqLworI2RlZmluZSBJTkRFWF9TQ0FOX0JBVENIKHNjYW4sIGlkeCkJXAorCQkoKHNjYW4p LT5iYXRjaHF1ZXVlLT5iYXRjaGVzWyhpZHgpICUgSU5ERVhfU0NBTl9NQVhfQkFUQ0hFU10pCisK Ky8qIElzIHRoZSBwb3NpdGlvbiBpbnZhbGlkL3VuZGVmaW5lZD8gKi8KKyNkZWZpbmUgSU5ERVhf U0NBTl9QT1NfSU5WQUxJRChwb3MpIFwKKwkJKCgocG9zKS0+YmF0Y2ggPT0gLTEpICYmICgocG9z KS0+aXRlbSA9PSAtMSkpCisKKyNpZmRlZiBJTkRFWEFNX0RFQlVHCisjZGVmaW5lIERFQlVHX0xP RyguLi4pIGVsb2coQW1SZWd1bGFyQmFja2VuZFByb2Nlc3MoKSA/IE5PVElDRSA6IERFQlVHMiwg X19WQV9BUkdTX18pCisjZWxzZQorI2RlZmluZSBERUJVR19MT0coLi4uKQorI2VuZGlmCisKKy8q CisgKiBTdGF0ZSB1c2VkIGJ5IGFtZ2V0YmF0Y2ggaW5kZXggQU1zIHRvIG1hbmFnZSBhIHF1ZXVl IG9mIGJhdGNoZXMgb2YgaXRlbXMKKyAqIHdpdGggbWF0Y2hpbmcgaW5kZXggdHVwbGVzLiAgQWxz byB1c2VkIGJ5IGluZGV4YmF0Y2guYyB0byBzdG9yZSBpbmZvcm1hdGlvbgorICogYWJvdXQgdGhl IHByb2dyZXNzIG9mIGFuIGluZGV4IHNjYW4uCisgKi8KK3R5cGVkZWYgc3RydWN0IEJhdGNoUXVl dWUKK3sKKwkvKiBhbWdldGJhdGNoIGNhbiBzYWZlbHkgZHJvcCBwaW5zIG9uIHJldHVybmVkIGJh dGNoJ3MgaW5kZXggcGFnZT8gKi8KKwlib29sCQlkcm9wUGluOworCisJLyoKKwkgKiBEaWQgd2Ug cmVhZCB0aGUgZmluYWwgYmF0Y2ggaW4gdGhpcyBzY2FuIGRpcmVjdGlvbj8gVGhlIGJhdGNoZXMg bWF5IGJlCisJICogbG9hZGVkIGZyb20gbXVsdGlwbGUgcGxhY2VzLCBhbmQgd2UgbmVlZCB0byBy ZW1lbWJlciB3aGVuIHdlIGZhaWwgdG8KKwkgKiBsb2FkIHRoZSBuZXh0IGJhdGNoIGluIGEgZ2l2 ZW4gc2NhbiAod2hpY2ggbWVhbnMgIm5vIG1vcmUgYmF0Y2hlcyIpLgorCSAqIGFtZ2V0YmF0Y2gg bWF5IHJlc3RhcnQgdGhlIHNjYW4gb24gdGhlIGdldCBjYWxsLCBzbyB3ZSBuZWVkIHRvIHJlbWVt YmVyCisJICogaXQncyBvdmVyLgorCSAqLworCWJvb2wJCWZpbmlzaGVkOworCisJLyogQ3VycmVu dCBzY2FuIGRpcmVjdGlvbiwgZm9yIHRoZSBjdXJyZW50bHkgbG9hZGVkIGJhdGNoZXMgKi8KKwlT Y2FuRGlyZWN0aW9uIGRpcmVjdGlvbjsKKworCS8qIGN1cnJlbnQgcG9zaXRpb25zIGluIGJhdGNo ZXNbXSBmb3Igc2NhbiAqLworCUJhdGNoUXVldWVJdGVtUG9zIHJlYWRQb3M7CS8qIHJlYWQgcG9z aXRpb24gKi8KKwlCYXRjaFF1ZXVlSXRlbVBvcyBtYXJrUG9zOwkvKiBtYXJrL3Jlc3RvcmUgcG9z aXRpb24gKi8KKworCUJhdGNoSW5kZXhTY2FuIG1hcmtCYXRjaDsKKworCS8qCisJICogQXJyYXkg b2YgYmF0Y2hlcyByZXR1cm5lZCBieSB0aGUgQU0uIFRoZSBhcnJheSBoYXMgYSBjYXBhY2l0eSAo YnV0IGNhbgorCSAqIGJlIHJlc2l6ZWQgaWYgbmVlZGVkKS4gVGhlIGhlYWRCYXRjaCBpcyBhbiBp bmRleCBvZiB0aGUgYmF0Y2ggd2UncmUKKwkgKiBjdXJyZW50bHkgcmVhZGluZyBmcm9tICh0aGlz IG5lZWRzIHRvIGJlIHRyYW5zbGF0ZWQgYnkgbW9kdWxvCisJICogbWF4QmF0Y2hlcyBpbnRvIGlu ZGV4IGluIHRoZSBiYXRjaGVzIGFycmF5KS4KKwkgKi8KKwlpbnQJCQltYXhCYXRjaGVzOwkJLyog c2l6ZSBvZiB0aGUgYmF0Y2hlcyBhcnJheSAqLworCWludAkJCWhlYWRCYXRjaDsJCS8qIGhlYWQg YmF0Y2ggc2xvdCAqLworCWludAkJCW5leHRCYXRjaDsJCS8qIG5leHQgZW1wdHkgYmF0Y2ggc2xv dCAqLworCisJLyogQXJyYXkgb2YgcG9pbnRlcnMgdG8gY2FjaGVkIHJlY3ljbGFibGUgYmF0Y2hl cyAqLworCUJhdGNoSW5kZXhTY2FuIGNhY2hlW0lOREVYX1NDQU5fQ0FDSEVfQkFUQ0hFU107CisK KwkvKiBBcnJheSBvZiBwb2ludGVycyB0byBxdWV1ZWQgYmF0Y2hlcyAqLworCUJhdGNoSW5kZXhT Y2FuIGJhdGNoZXNbSU5ERVhfU0NBTl9NQVhfQkFUQ0hFU107CisKK30gQmF0Y2hRdWV1ZTsKKwog c3RydWN0IEluZGV4U2Nhbkluc3RydW1lbnRhdGlvbjsKIAogLyoKQEAgLTE0MCw2ICszMTMsOCBA QCB0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5EZXNjRGF0YQogCXN0cnVjdCBTbmFwc2hvdERhdGEg KnhzX3NuYXBzaG90OwkvKiBzbmFwc2hvdCB0byBzZWUgKi8KIAlpbnQJCQludW1iZXJPZktleXM7 CS8qIG51bWJlciBvZiBpbmRleCBxdWFsaWZpZXIgY29uZGl0aW9ucyAqLwogCWludAkJCW51bWJl ck9mT3JkZXJCeXM7CS8qIG51bWJlciBvZiBvcmRlcmluZyBvcGVyYXRvcnMgKi8KKwlCYXRjaFF1 ZXVlICpiYXRjaHF1ZXVlOwkJLyogYW1nZXRiYXRjaCByZWxhdGVkIHN0YXRlICovCisKIAlzdHJ1 Y3QgU2NhbktleURhdGEgKmtleURhdGE7CS8qIGFycmF5IG9mIGluZGV4IHF1YWxpZmllciBkZXNj cmlwdG9ycyAqLwogCXN0cnVjdCBTY2FuS2V5RGF0YSAqb3JkZXJCeURhdGE7CS8qIGFycmF5IG9m IG9yZGVyaW5nIG9wIGRlc2NyaXB0b3JzICovCiAJYm9vbAkJeHNfd2FudF9pdHVwOwkvKiBjYWxs ZXIgcmVxdWVzdHMgaW5kZXggdHVwbGVzICovCkBAIC0yMTYsNCArMzkxLDM4IEBAIHR5cGVkZWYg c3RydWN0IFN5c1NjYW5EZXNjRGF0YQogCXN0cnVjdCBUdXBsZVRhYmxlU2xvdCAqc2xvdDsKIH0J CQlTeXNTY2FuRGVzY0RhdGE7CiAKKy8qCisgKiBDaGVjayB0aGF0IGEgcG9zaXRpb24gKGJhdGNo LGl0ZW0pIGlzIHZhbGlkIHdpdGggcmVzcGVjdCB0byB0aGUgYmF0Y2hlcyB3ZQorICogaGF2ZSBj dXJyZW50bHkgbG9hZGVkLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK2JhdGNoX2Fzc2VydF9w b3NfdmFsaWQoSW5kZXhTY2FuRGVzY0RhdGEgKnNjYW4sIEJhdGNoUXVldWVJdGVtUG9zICpwb3Mp Cit7CisjaWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORworCUJhdGNoUXVldWUgKmJhdGNocXVldWUg PSBzY2FuLT5iYXRjaHF1ZXVlOworCisJLyogbWFrZSBzdXJlIHRoZSBwb3NpdGlvbiBpcyB2YWxp ZCBmb3IgY3VycmVudGx5IGxvYWRlZCBiYXRjaGVzICovCisJQXNzZXJ0KHBvcy0+YmF0Y2ggPj0g YmF0Y2hxdWV1ZS0+aGVhZEJhdGNoKTsKKwlBc3NlcnQocG9zLT5iYXRjaCA8IGJhdGNocXVldWUt Pm5leHRCYXRjaCk7CisjZW5kaWYKK30KKworLyoKKyAqIENoZWNrIGEgc2luZ2xlIGJhdGNoIGlz IHZhbGlkLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK2JhdGNoX2Fzc2VydF9iYXRjaF92YWxp ZChJbmRleFNjYW5EZXNjRGF0YSAqc2NhbiwgQmF0Y2hJbmRleFNjYW4gYmF0Y2gpCit7CisJLyog YmF0Y2ggbXVzdCBoYXZlIG9uZSBvciBtb3JlIG1hdGNoaW5nIGl0ZW1zIHJldHVybmVkIGJ5IGlu ZGV4IEFNICovCisJQXNzZXJ0KGJhdGNoLT5maXJzdEl0ZW0gPj0gMCAmJiBiYXRjaC0+Zmlyc3RJ dGVtIDw9IGJhdGNoLT5sYXN0SXRlbSk7CisJQXNzZXJ0KGJhdGNoLT5pdGVtcyAhPSBOVUxMKTsK KworCS8qCisJICogVGhlIG51bWJlciBvZiBraWxsZWQgaXRlbXMgbXVzdCBiZSB2YWxpZCwgYW5k IHRoZXJlIG11c3QgYmUgYW4gYXJyYXkgb2YKKwkgKiBpbmRleGVzIGlmIHRoZXJlIGFyZSBpdGVt cy4KKwkgKi8KKwlBc3NlcnQoYmF0Y2gtPm51bUtpbGxlZCA+PSAwKTsKKwlBc3NlcnQoIShiYXRj aC0+bnVtS2lsbGVkID4gMCAmJiBiYXRjaC0+a2lsbGVkSXRlbXMgPT0gTlVMTCkpOworfQorCiAj ZW5kaWYJCQkJCQkJLyogUkVMU0NBTl9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nl c3MvdGFibGVhbS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaAppbmRleCAyZmE3OTBi NmIuLjNlOThkODUzNyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaAor KysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oCkBAIC00MjAsNyArNDIwLDggQEAgdHlw ZWRlZiBzdHJ1Y3QgVGFibGVBbVJvdXRpbmUKIAkgKgogCSAqIFR1cGxlcyBmb3IgYW4gaW5kZXgg c2NhbiBjYW4gdGhlbiBiZSBmZXRjaGVkIHZpYSBpbmRleF9mZXRjaF90dXBsZS4KIAkgKi8KLQlz dHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAqKCppbmRleF9mZXRjaF9iZWdpbikgKFJlbGF0aW9u IHJlbCk7CisJc3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEgKigqaW5kZXhfZmV0Y2hfYmVnaW4p IChSZWxhdGlvbiByZWwsCisJCQkJCQkJCQkJCQkJICBUdXBsZVRhYmxlU2xvdCAqaW9zX3RhYmxl c2xvdCk7CiAKIAkvKgogCSAqIFJlc2V0IGluZGV4IGZldGNoLiBUeXBpY2FsbHkgdGhpcyB3aWxs IHJlbGVhc2UgY3Jvc3MgaW5kZXggZmV0Y2gKQEAgLTQzMywxMSArNDM0LDM0IEBAIHR5cGVkZWYg c3RydWN0IFRhYmxlQW1Sb3V0aW5lCiAJICovCiAJdm9pZAkJKCppbmRleF9mZXRjaF9lbmQpIChz dHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAqZGF0YSk7CiAKKwkvKgorCSAqIEZldGNoIHRoZSBu ZXh0IHR1cGxlIGZyb20gYW4gaW5kZXggc2NhbiBpbnRvIHNsb3QsIHNjYW5uaW5nIGluIHRoZQor CSAqIHNwZWNpZmllZCBkaXJlY3Rpb24sIGFuZCByZXR1cm4gdHJ1ZSBpZiBhIHR1cGxlIHdhcyBm b3VuZCwgZmFsc2UKKwkgKiBvdGhlcndpc2UuCisJICoKKwkgKiBUaGlzIGNhbGxiYWNrIGFsbG93 cyB0aGUgdGFibGUgQU0gdG8gZGlyZWN0bHkgbWFuYWdlIHRoZSBzY2FuIHByb2Nlc3MsCisJICog aW5jbHVkaW5nIGludGVyZmFjaW5nIHdpdGggdGhlIGluZGV4IEFNLiBUaGUgY2FsbGVyIHNpbXBs eSBzcGVjaWZpZXMKKwkgKiB0aGUgZGlyZWN0aW9uIG9mIHRoZSBzY2FuOyB0aGUgdGFibGUgQU0g dGFrZXMgY2FyZSBvZiByZXRyaWV2aW5nIFRJRHMKKwkgKiBmcm9tIHRoZSBpbmRleCwgcGVyZm9y bWluZyB2aXNpYmlsaXR5IGNoZWNrcywgYW5kIHJldHVybmluZyB0dXBsZXMgaW4KKwkgKiB0aGUg c2xvdC4gVGhpcyBlbmFibGVzIGltcG9ydGFudCBvcHRpbWl6YXRpb25zIChzdWNoIGFzIHRhYmxl IGJsb2NrIEkvTworCSAqIHByZWZldGNoaW5nKSB0aGF0IHJlcXVpcmUgdGhhdCB0aGUgdGFibGUg QU0gZGlyZWN0bHkgbWFuYWdlcyB0aGUKKwkgKiBwcm9ncmVzcyBvZiB0aGUgaW5kZXggc2Nhbi4K KwkgKgorCSAqIFRhYmxlIEFNcyB0aGF0IGltcGxlbWVudCB0aGlzIGFyZSBleHBlY3RlZCB0byB1 c2UgYmF0Y2hfZ2V0bmV4dCAoYW5kCisJICogb3RoZXIgYmF0Y2ggdXRpbGl0eSByb3V0aW5lcykg dG8gcGVyZm9ybSBhbWdldGJhdGNoIGluZGV4IHNjYW5zLgorCSAqLworCWJvb2wJCSgqaW5kZXhf Z2V0bmV4dF9zbG90KSAoSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJICAgU2NhbkRpcmVj dGlvbiBkaXJlY3Rpb24sCisJCQkJCQkJCQkgICBUdXBsZVRhYmxlU2xvdCAqc2xvdCk7CisKIAkv KgogCSAqIEZldGNoIHR1cGxlIGF0IGB0aWRgIGludG8gYHNsb3RgLCBhZnRlciBkb2luZyBhIHZp c2liaWxpdHkgdGVzdAogCSAqIGFjY29yZGluZyB0byBgc25hcHNob3RgLiBJZiBhIHR1cGxlIHdh cyBmb3VuZCBhbmQgcGFzc2VkIHRoZSB2aXNpYmlsaXR5CiAJICogdGVzdCwgcmV0dXJuIHRydWUs IGZhbHNlIG90aGVyd2lzZS4KIAkgKgorCSAqIFRoaXMgaXMgYSBsb3dlci1sZXZlbCBjYWxsYmFj ayB0aGF0IHRha2VzIGEgVElEIGZyb20gdGhlIGNhbGxlci4KKwkgKiBDYWxsZXJzIHNob3VsZCBm YXZvciB0aGUgaW5kZXhfZ2V0bmV4dF9zbG90IGNhbGxiYWNrIHdoZW5ldmVyIHBvc3NpYmxlLgor CSAqCiAJICogTm90ZSB0aGF0IEFNcyB0aGF0IGRvIG5vdCBuZWNlc3NhcmlseSB1cGRhdGUgaW5k ZXhlcyB3aGVuIGluZGV4ZWQKIAkgKiBjb2x1bW5zIGRvIG5vdCBjaGFuZ2UsIG5lZWQgdG8gcmV0 dXJuIHRoZSBjdXJyZW50L2NvcnJlY3QgdmVyc2lvbiBvZgogCSAqIHRoZSB0dXBsZSB0aGF0IGlz IHZpc2libGUgdG8gdGhlIHNuYXBzaG90LCBldmVuIGlmIHRoZSB0aWQgcG9pbnRzIHRvIGFuCkBA IC00NTksNyArNDgzLDYgQEAgdHlwZWRlZiBzdHJ1Y3QgVGFibGVBbVJvdXRpbmUKIAkJCQkJCQkJ CSAgVHVwbGVUYWJsZVNsb3QgKnNsb3QsCiAJCQkJCQkJCQkgIGJvb2wgKmNhbGxfYWdhaW4sIGJv b2wgKmFsbF9kZWFkKTsKIAotCiAJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAJICogQ2FsbGJhY2tzIGZv ciBub24tbW9kaWZ5aW5nIG9wZXJhdGlvbnMgb24gaW5kaXZpZHVhbCB0dXBsZXMKIAkgKiAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KQEAgLTExNTksMTQgKzExODIsMTUgQEAgdGFibGVfcGFyYWxsZWxzY2FuX3Jl aW5pdGlhbGl6ZShSZWxhdGlvbiByZWwsIFBhcmFsbGVsVGFibGVTY2FuRGVzYyBwc2NhbikKIAog LyoKICAqIFByZXBhcmUgdG8gZmV0Y2ggdHVwbGVzIGZyb20gdGhlIHJlbGF0aW9uLCBhcyBuZWVk ZWQgd2hlbiBmZXRjaGluZyB0dXBsZXMKLSAqIGZvciBhbiBpbmRleCBzY2FuLgorICogZm9yIGFu IGluZGV4IHNjYW4uICBJbmRleC1vbmx5IHNjYW4gY2FsbGVycyBtdXN0IHByb3ZpZGUgaW9zX3Rh Ymxlc2xvdCwKKyAqIHdoaWNoIGlzIGEgc2xvdCBmb3IgaG9sZGluZyB0dXBsZXMgZmV0Y2hlZCBm cm9tIHRoZSB0YWJsZS4KICAqCiAgKiBUdXBsZXMgZm9yIGFuIGluZGV4IHNjYW4gY2FuIHRoZW4g YmUgZmV0Y2hlZCB2aWEgdGFibGVfaW5kZXhfZmV0Y2hfdHVwbGUoKS4KICAqLwogc3RhdGljIGlu bGluZSBJbmRleEZldGNoVGFibGVEYXRhICoKLXRhYmxlX2luZGV4X2ZldGNoX2JlZ2luKFJlbGF0 aW9uIHJlbCkKK3RhYmxlX2luZGV4X2ZldGNoX2JlZ2luKFJlbGF0aW9uIHJlbCwgVHVwbGVUYWJs ZVNsb3QgKmlvc190YWJsZXNsb3QpCiB7Ci0JcmV0dXJuIHJlbC0+cmRfdGFibGVhbS0+aW5kZXhf ZmV0Y2hfYmVnaW4ocmVsKTsKKwlyZXR1cm4gcmVsLT5yZF90YWJsZWFtLT5pbmRleF9mZXRjaF9i ZWdpbihyZWwsIGlvc190YWJsZXNsb3QpOwogfQogCiAvKgpAQCAtMTE4OCw2ICsxMjEyLDI2IEBA IHRhYmxlX2luZGV4X2ZldGNoX2VuZChzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbikK IAlzY2FuLT5yZWwtPnJkX3RhYmxlYW0tPmluZGV4X2ZldGNoX2VuZChzY2FuKTsKIH0KIAorLyoK KyAqIEZldGNoIHRoZSBuZXh0IHR1cGxlIGZyb20gYW4gaW5kZXggc2NhbiBpbnRvIGBzbG90YCwg c2Nhbm5pbmcgaW4gdGhlCisgKiBzcGVjaWZpZWQgZGlyZWN0aW9uLiBSZXR1cm5zIHRydWUgaWYg YSB0dXBsZSB3YXMgZm91bmQsIGZhbHNlIG90aGVyd2lzZS4KKyAqCisgKiBUaGUgaW5kZXggc2Nh biBzaG91bGQgaGF2ZSBiZWVuIHN0YXJ0ZWQgdmlhIHRhYmxlX2luZGV4X2ZldGNoX2JlZ2luKCku CisgKiBDYWxsZXJzIG11c3QgY2hlY2sgc2Nhbi0+eHNfcmVjaGVjayBhbmQgcmVjaGVjayBzY2Fu IGtleXMgaWYgcmVxdWlyZWQuCisgKgorICogSW5kZXgtb25seSBzY2FuIGNhbGxlcnMgbXVzdCBw YXNzIGFuIGluZGV4IHNjYW4gZGVzY3JpcHRvciB0aGF0IHdhcyBjcmVhdGVkCisgKiBieSBwYXNz aW5nIGEgdmFsaWQgaW9zX3RhYmxlc2xvdCB0byBpbmRleF9iZWdpbnNjYW4uICBUaGlzIGlvc190 YWJsZXNsb3QKKyAqIHdpbGwgYmUgcGFzc2VkIGRvd24gdG8gdGFibGVfaW5kZXhfZmV0Y2hfYmVn aW4gYnkgaW5kZXhfYmVnaW5zY2FuLgorICovCitzdGF0aWMgaW5saW5lIGJvb2wKK3RhYmxlX2lu ZGV4X2dldG5leHRfc2xvdChJbmRleFNjYW5EZXNjIGlkeHNjYW4sIFNjYW5EaXJlY3Rpb24gZGly ZWN0aW9uLAorCQkJCQkJIFR1cGxlVGFibGVTbG90ICpzbG90KQoreworCXN0cnVjdCBJbmRleEZl dGNoVGFibGVEYXRhICpzY2FuID0gaWR4c2Nhbi0+eHNfaGVhcGZldGNoOworCisJcmV0dXJuIHNj YW4tPnJlbC0+cmRfdGFibGVhbS0+aW5kZXhfZ2V0bmV4dF9zbG90KGlkeHNjYW4sIGRpcmVjdGlv biwgc2xvdCk7Cit9CisKIC8qCiAgKiBGZXRjaGVzLCBhcyBwYXJ0IG9mIGFuIGluZGV4IHNjYW4s IHR1cGxlIGF0IGB0aWRgIGludG8gYHNsb3RgLCBhZnRlciBkb2luZwogICogYSB2aXNpYmlsaXR5 IHRlc3QgYWNjb3JkaW5nIHRvIGBzbmFwc2hvdGAuIElmIGEgdHVwbGUgd2FzIGZvdW5kIGFuZCBw YXNzZWQKQEAgLTEyMTEsNiArMTI1NSw5IEBAIHRhYmxlX2luZGV4X2ZldGNoX2VuZChzdHJ1Y3Qg SW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbikKICAqIGVudHJ5IChsaWtlIGhlYXAncyBIT1QpLiBX aGVyZWFzIHRhYmxlX3R1cGxlX2ZldGNoX3Jvd192ZXJzaW9uKCkgb25seQogICogZXZhbHVhdGVz IHRoZSB0dXBsZSBleGFjdGx5IGF0IGB0aWRgLiBPdXRzaWRlIG9mIGluZGV4IGVudHJ5IC0+dGFi bGUgdHVwbGUKICAqIGxvb2t1cHMsIHRhYmxlX3R1cGxlX2ZldGNoX3Jvd192ZXJzaW9uKCkgaXMg d2hhdCdzIHVzdWFsbHkgbmVlZGVkLgorICoKKyAqIFRoaXMgaXMgYSBsb3dlci1sZXZlbCBpbnRl cmZhY2UgdGhhdCB0YWtlcyBhIFRJRCBmcm9tIHRoZSBjYWxsZXIuICBDYWxsZXJzCisgKiBzaG91 bGQgZmF2b3IgdGhlIHRhYmxlX2luZGV4X2dldG5leHRfc2xvdCBpbnRlcmZhY2Ugd2hlbmV2ZXIg cG9zc2libGUuCiAgKi8KIHN0YXRpYyBpbmxpbmUgYm9vbAogdGFibGVfaW5kZXhfZmV0Y2hfdHVw bGUoc3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4sCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9ub2Rlcy9leGVjbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCmlu ZGV4IDY0ZmY2OTk2NC4uN2UzNTFhMjEwIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9l eGVjbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaApAQCAtMTc3NCw3 ICsxNzc0LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhPbmx5U2NhblN0YXRlCiAJSW5kZXhTY2Fu SW5zdHJ1bWVudGF0aW9uIGlvc3NfSW5zdHJ1bWVudDsKIAlTaGFyZWRJbmRleFNjYW5JbnN0cnVt ZW50YXRpb24gKmlvc3NfU2hhcmVkSW5mbzsKIAlUdXBsZVRhYmxlU2xvdCAqaW9zc19UYWJsZVNs b3Q7Ci0JQnVmZmVyCQlpb3NzX1ZNQnVmZmVyOwogCVNpemUJCWlvc3NfUHNjYW5MZW47CiAJQXR0 ck51bWJlciAqaW9zc19OYW1lQ1N0cmluZ0F0dE51bXM7CiAJaW50CQkJaW9zc19OYW1lQ1N0cmlu Z0NvdW50OwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmggYi9zcmMv aW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaAppbmRleCA0NmE4NjU1NjIuLjExODA1YmZmOSAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUv bm9kZXMvcGF0aG5vZGVzLmgKQEAgLTEzNDQsNyArMTM0NCw3IEBAIHR5cGVkZWYgc3RydWN0IElu ZGV4T3B0SW5mbwogCS8qIGRvZXMgQU0gaGF2ZSBhbWdldGJpdG1hcCBpbnRlcmZhY2U/ICovCiAJ Ym9vbAkJYW1oYXNnZXRiaXRtYXA7CiAJYm9vbAkJYW1jYW5wYXJhbGxlbDsKLQkvKiBkb2VzIEFN IGhhdmUgYW1tYXJrcG9zIGludGVyZmFjZT8gKi8KKwkvKiBpcyBBTSBwcmVwYXJlZCBmb3IgdXMg dG8gcmVzdG9yZSBhIG1hcms/ICovCiAJYm9vbAkJYW1jYW5tYXJrcG9zOwogCS8qIEFNJ3MgY29z dCBlc3RpbWF0b3IgKi8KIAkvKiBSYXRoZXIgdGhhbiBpbmNsdWRlIGFtYXBpLmggaGVyZSwgd2Ug ZGVjbGFyZSBhbWNvc3Rlc3RpbWF0ZSBsaWtlIHRoaXMgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9icmluL2JyaW4uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW4uYwpp bmRleCBjYjMzMzE5MjEuLmQ1NGM3ODJjYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNz L2JyaW4vYnJpbi5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW4uYwpAQCAtMjk0 LDEwICsyOTQsMTEgQEAgYnJpbmhhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAlhbXJvdXRpbmUt PmFtYmVnaW5zY2FuID0gYnJpbmJlZ2luc2NhbjsKIAlhbXJvdXRpbmUtPmFtcmVzY2FuID0gYnJp bnJlc2NhbjsKIAlhbXJvdXRpbmUtPmFtZ2V0dHVwbGUgPSBOVUxMOworCWFtcm91dGluZS0+YW1n ZXRiYXRjaCA9IE5VTEw7CisJYW1yb3V0aW5lLT5hbWZyZWViYXRjaCA9IE5VTEw7CiAJYW1yb3V0 aW5lLT5hbWdldGJpdG1hcCA9IGJyaW5nZXRiaXRtYXA7CiAJYW1yb3V0aW5lLT5hbWVuZHNjYW4g PSBicmluZW5kc2NhbjsKLQlhbXJvdXRpbmUtPmFtbWFya3BvcyA9IE5VTEw7Ci0JYW1yb3V0aW5l LT5hbXJlc3RycG9zID0gTlVMTDsKKwlhbXJvdXRpbmUtPmFtcG9zcmVzZXQgPSBOVUxMOwogCWFt cm91dGluZS0+YW1lc3RpbWF0ZXBhcmFsbGVsc2NhbiA9IE5VTEw7CiAJYW1yb3V0aW5lLT5hbWlu aXRwYXJhbGxlbHNjYW4gPSBOVUxMOwogCWFtcm91dGluZS0+YW1wYXJhbGxlbHJlc2NhbiA9IE5V TEw7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbmdldC5jIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL2dpbi9naW5nZXQuYwppbmRleCAwZDQxMDhkMDUuLjc0ZWU4OTAzMiAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW5nZXQuYworKysgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvZ2luL2dpbmdldC5jCkBAIC0xOTUzLDkgKzE5NTMsOSBAQCBnaW5nZXRiaXRtYXAo SW5kZXhTY2FuRGVzYyBzY2FuLCBUSURCaXRtYXAgKnRibSkKIAkgKiBpbnRvIHRoZSBtYWluIGlu ZGV4LCBhbmQgc28gd2UgbWlnaHQgdmlzaXQgaXQgYSBzZWNvbmQgdGltZSBkdXJpbmcgdGhlCiAJ ICogbWFpbiBzY2FuLiAgVGhpcyBpcyBva2F5IGJlY2F1c2Ugd2UnbGwganVzdCByZS1zZXQgdGhl IHNhbWUgYml0IGluIHRoZQogCSAqIGJpdG1hcC4gIChUaGUgcG9zc2liaWxpdHkgb2YgZHVwbGlj YXRlIHZpc2l0cyBpcyBhIG1ham9yIHJlYXNvbiB3aHkgR0lOCi0JICogY2FuJ3Qgc3VwcG9ydCB0 aGUgYW1nZXR0dXBsZSBBUEksIGhvd2V2ZXIuKSBOb3RlIHRoYXQgaXQgd291bGQgbm90IGRvCi0J ICogdG8gc2NhbiB0aGUgbWFpbiBpbmRleCBiZWZvcmUgdGhlIHBlbmRpbmcgbGlzdCwgc2luY2Ug Y29uY3VycmVudAotCSAqIGNsZWFudXAgY291bGQgdGhlbiBtYWtlIHVzIG1pc3MgZW50cmllcyBl bnRpcmVseS4KKwkgKiBjYW4ndCBzdXBwb3J0IGVpdGhlciB0aGUgYW1nZXR0dXBsZSBvciBhbWdl dGJhdGNoIEFQSS4pIE5vdGUgdGhhdCBpdAorCSAqIHdvdWxkIG5vdCBkbyB0byBzY2FuIHRoZSBt YWluIGluZGV4IGJlZm9yZSB0aGUgcGVuZGluZyBsaXN0LCBzaW5jZQorCSAqIGNvbmN1cnJlbnQg Y2xlYW51cCBjb3VsZCB0aGVuIG1ha2UgdXMgbWlzcyBlbnRyaWVzIGVudGlyZWx5LgogCSAqLwog CXNjYW5QZW5kaW5nSW5zZXJ0KHNjYW4sIHRibSwgJm50aWRzKTsKIApkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvYWNjZXNzL2dpbi9naW51dGlsLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dp bnV0aWwuYwppbmRleCA3OGY3YjdhMjQuLjliNTVhYjIzMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvYWNjZXNzL2dpbi9naW51dGlsLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW51 dGlsLmMKQEAgLTgyLDEwICs4MiwxMSBAQCBnaW5oYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJ YW1yb3V0aW5lLT5hbWJlZ2luc2NhbiA9IGdpbmJlZ2luc2NhbjsKIAlhbXJvdXRpbmUtPmFtcmVz Y2FuID0gZ2lucmVzY2FuOwogCWFtcm91dGluZS0+YW1nZXR0dXBsZSA9IE5VTEw7CisJYW1yb3V0 aW5lLT5hbWdldGJhdGNoID0gTlVMTDsKKwlhbXJvdXRpbmUtPmFtZnJlZWJhdGNoID0gTlVMTDsK IAlhbXJvdXRpbmUtPmFtZ2V0Yml0bWFwID0gZ2luZ2V0Yml0bWFwOwogCWFtcm91dGluZS0+YW1l bmRzY2FuID0gZ2luZW5kc2NhbjsKLQlhbXJvdXRpbmUtPmFtbWFya3BvcyA9IE5VTEw7Ci0JYW1y b3V0aW5lLT5hbXJlc3RycG9zID0gTlVMTDsKKwlhbXJvdXRpbmUtPmFtcG9zcmVzZXQgPSBOVUxM OwogCWFtcm91dGluZS0+YW1lc3RpbWF0ZXBhcmFsbGVsc2NhbiA9IE5VTEw7CiAJYW1yb3V0aW5l LT5hbWluaXRwYXJhbGxlbHNjYW4gPSBOVUxMOwogCWFtcm91dGluZS0+YW1wYXJhbGxlbHJlc2Nh biA9IE5VTEw7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0LmMgYi9z cmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0LmMKaW5kZXggM2ZiMWExMjg1Li4wZTBiY2MwMzQg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3QuYworKysgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvZ2lzdC9naXN0LmMKQEAgLTEwMywxMCArMTAzLDExIEBAIGdpc3RoYW5kbGVy KFBHX0ZVTkNUSU9OX0FSR1MpCiAJYW1yb3V0aW5lLT5hbWJlZ2luc2NhbiA9IGdpc3RiZWdpbnNj YW47CiAJYW1yb3V0aW5lLT5hbXJlc2NhbiA9IGdpc3RyZXNjYW47CiAJYW1yb3V0aW5lLT5hbWdl dHR1cGxlID0gZ2lzdGdldHR1cGxlOworCWFtcm91dGluZS0+YW1nZXRiYXRjaCA9IE5VTEw7CisJ YW1yb3V0aW5lLT5hbWZyZWViYXRjaCA9IE5VTEw7CiAJYW1yb3V0aW5lLT5hbWdldGJpdG1hcCA9 IGdpc3RnZXRiaXRtYXA7CiAJYW1yb3V0aW5lLT5hbWVuZHNjYW4gPSBnaXN0ZW5kc2NhbjsKLQlh bXJvdXRpbmUtPmFtbWFya3BvcyA9IE5VTEw7Ci0JYW1yb3V0aW5lLT5hbXJlc3RycG9zID0gTlVM TDsKKwlhbXJvdXRpbmUtPmFtcG9zcmVzZXQgPSBOVUxMOwogCWFtcm91dGluZS0+YW1lc3RpbWF0 ZXBhcmFsbGVsc2NhbiA9IE5VTEw7CiAJYW1yb3V0aW5lLT5hbWluaXRwYXJhbGxlbHNjYW4gPSBO VUxMOwogCWFtcm91dGluZS0+YW1wYXJhbGxlbHJlc2NhbiA9IE5VTEw7CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9o YXNoLmMKaW5kZXggNTMwNjFjODE5Li5iNGI0NjA3MjQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2FjY2Vzcy9oYXNoL2hhc2guYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMK QEAgLTEwMiwxMCArMTAyLDExIEBAIGhhc2hoYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJYW1y b3V0aW5lLT5hbWJlZ2luc2NhbiA9IGhhc2hiZWdpbnNjYW47CiAJYW1yb3V0aW5lLT5hbXJlc2Nh biA9IGhhc2hyZXNjYW47CiAJYW1yb3V0aW5lLT5hbWdldHR1cGxlID0gaGFzaGdldHR1cGxlOwor CWFtcm91dGluZS0+YW1nZXRiYXRjaCA9IE5VTEw7CisJYW1yb3V0aW5lLT5hbWZyZWViYXRjaCA9 IE5VTEw7CiAJYW1yb3V0aW5lLT5hbWdldGJpdG1hcCA9IGhhc2hnZXRiaXRtYXA7CiAJYW1yb3V0 aW5lLT5hbWVuZHNjYW4gPSBoYXNoZW5kc2NhbjsKLQlhbXJvdXRpbmUtPmFtbWFya3BvcyA9IE5V TEw7Ci0JYW1yb3V0aW5lLT5hbXJlc3RycG9zID0gTlVMTDsKKwlhbXJvdXRpbmUtPmFtcG9zcmVz ZXQgPSBOVUxMOwogCWFtcm91dGluZS0+YW1lc3RpbWF0ZXBhcmFsbGVsc2NhbiA9IE5VTEw7CiAJ YW1yb3V0aW5lLT5hbWluaXRwYXJhbGxlbHNjYW4gPSBOVUxMOwogCWFtcm91dGluZS0+YW1wYXJh bGxlbHJlc2NhbiA9IE5VTEw7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9o ZWFwYW1faGFuZGxlci5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIu YwppbmRleCBiY2JhYzg0NGIuLmNlYjQwMTVlYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNj ZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9o ZWFwYW1faGFuZGxlci5jCkBAIC03Miw2ICs3MiwzMyBAQCBoZWFwYW1fc2xvdF9jYWxsYmFja3Mo UmVsYXRpb24gcmVsYXRpb24pCiAJcmV0dXJuICZUVFNPcHNCdWZmZXJIZWFwVHVwbGU7CiB9CiAK K3N0YXRpYyB2b2lkCitTdG9yZUluZGV4VHVwbGUoVHVwbGVUYWJsZVNsb3QgKnNsb3QsCisJCQkJ SW5kZXhUdXBsZSBpdHVwLCBUdXBsZURlc2MgaXR1cGRlc2MpCit7CisJLyoKKwkgKiBOb3RlOiB3 ZSBtdXN0IHVzZSB0aGUgdHVwZGVzYyBzdXBwbGllZCBieSB0aGUgQU0gaW4gaW5kZXhfZGVmb3Jt X3R1cGxlLAorCSAqIG5vdCB0aGUgc2xvdCdzIHR1cGRlc2MsIGluIGNhc2UgdGhlIGxhdHRlciBo YXMgZGlmZmVyZW50IGRhdGF0eXBlcworCSAqICh0aGlzIGhhcHBlbnMgZm9yIGJ0cmVlIG5hbWVf b3BzIGluIHBhcnRpY3VsYXIpLiAgVGhleSdkIGJldHRlciBoYXZlCisJICogdGhlIHNhbWUgbnVt YmVyIG9mIGNvbHVtbnMgdGhvdWdoLCBhcyB3ZWxsIGFzIGJlaW5nIGRhdGF0eXBlLWNvbXBhdGli bGUKKwkgKiB3aGljaCBpcyBzb21ldGhpbmcgd2UgY2FuJ3Qgc28gZWFzaWx5IGNoZWNrLgorCSAq LworCUFzc2VydChzbG90LT50dHNfdHVwbGVEZXNjcmlwdG9yLT5uYXR0cyA9PSBpdHVwZGVzYy0+ bmF0dHMpOworCisJRXhlY0NsZWFyVHVwbGUoc2xvdCk7CisJaW5kZXhfZGVmb3JtX3R1cGxlKGl0 dXAsIGl0dXBkZXNjLCBzbG90LT50dHNfdmFsdWVzLCBzbG90LT50dHNfaXNudWxsKTsKKworCS8q CisJICogQ29weSBhbGwgbmFtZSBjb2x1bW5zIHN0b3JlZCBhcyBjc3RyaW5ncyBiYWNrIGludG8g YSBOQU1FREFUQUxFTiBieXRlCisJICogc2l6ZWQgYWxsb2NhdGlvbi4gIFdlIG1hcmsgdGhpcyBi cmFuY2ggYXMgdW5saWtlbHkgYXMgZ2VuZXJhbGx5ICJuYW1lIgorCSAqIGlzIHVzZWQgb25seSBm b3IgdGhlIHN5c3RlbSBjYXRhbG9ncyBhbmQgdGhpcyB3b3VsZCBoYXZlIHRvIGJlIGEgdXNlcgor CSAqIHF1ZXJ5IHJ1bm5pbmcgb24gdGhvc2Ugb3Igc29tZSBvdGhlciB1c2VyIHRhYmxlIHdpdGgg YW4gaW5kZXggb24gYSBuYW1lCisJICogY29sdW1uLgorCSAqLworCisJRXhlY1N0b3JlVmlydHVh bFR1cGxlKHNsb3QpOworfQorCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogSW5kZXggU2NhbiBD YWxsYmFja3MgZm9yIGhlYXAgQU0KQEAgLTc5LDEyICsxMDYsMTcgQEAgaGVhcGFtX3Nsb3RfY2Fs bGJhY2tzKFJlbGF0aW9uIHJlbGF0aW9uKQogICovCiAKIHN0YXRpYyBJbmRleEZldGNoVGFibGVE YXRhICoKLWhlYXBhbV9pbmRleF9mZXRjaF9iZWdpbihSZWxhdGlvbiByZWwpCitoZWFwYW1faW5k ZXhfZmV0Y2hfYmVnaW4oUmVsYXRpb24gcmVsLCBUdXBsZVRhYmxlU2xvdCAqaW9zX3RhYmxlc2xv dCkKIHsKLQlJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuID0gcGFsbG9jMChzaXplb2YoSW5kZXhG ZXRjaEhlYXBEYXRhKSk7CisJSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiA9IHBhbGxvYyhzaXpl b2YoSW5kZXhGZXRjaEhlYXBEYXRhKSk7CiAKIAloc2Nhbi0+eHNfYmFzZS5yZWwgPSByZWw7CisJ aHNjYW4tPnhzX2Jhc2UubmhlYXBhY2Nlc3NlcyA9IDA7CisKKwkvKiBoZWFwYW0gc3BlY2lmaWMg ZmllbGRzICovCiAJaHNjYW4tPnhzX2NidWYgPSBJbnZhbGlkQnVmZmVyOworCWhzY2FuLT52bWJ1 ZiA9IEludmFsaWRCdWZmZXI7CisJaHNjYW4tPmlvc190YWJsZXNsb3QgPSBpb3NfdGFibGVzbG90 OwogCiAJcmV0dXJuICZoc2Nhbi0+eHNfYmFzZTsKIH0KQEAgLTk0LDYgKzEyNiw3IEBAIGhlYXBh bV9pbmRleF9mZXRjaF9yZXNldChJbmRleEZldGNoVGFibGVEYXRhICpzY2FuKQogewogCUluZGV4 RmV0Y2hIZWFwRGF0YSAqaHNjYW4gPSAoSW5kZXhGZXRjaEhlYXBEYXRhICopIHNjYW47CiAKKwkv KiBkZWxpYmVyYXRlbHkgZG9uJ3QgZHJvcCBWTSBidWZmZXIgcGluIGhlcmUgKi8KIAlpZiAoQnVm ZmVySXNWYWxpZChoc2Nhbi0+eHNfY2J1ZikpCiAJewogCQlSZWxlYXNlQnVmZmVyKGhzY2FuLT54 c19jYnVmKTsKQEAgLTEwOCw2ICsxNDEsMTIgQEAgaGVhcGFtX2luZGV4X2ZldGNoX2VuZChJbmRl eEZldGNoVGFibGVEYXRhICpzY2FuKQogCiAJaGVhcGFtX2luZGV4X2ZldGNoX3Jlc2V0KHNjYW4p OwogCisJaWYgKGhzY2FuLT52bWJ1ZiAhPSBJbnZhbGlkQnVmZmVyKQorCXsKKwkJUmVsZWFzZUJ1 ZmZlcihoc2Nhbi0+dm1idWYpOworCQloc2Nhbi0+dm1idWYgPSBJbnZhbGlkQnVmZmVyOworCX0K KwogCXBmcmVlKGhzY2FuKTsKIH0KIApAQCAtMTczLDYgKzIxMiw1MDAgQEAgaGVhcGFtX2luZGV4 X2ZldGNoX3R1cGxlKHN0cnVjdCBJbmRleEZldGNoVGFibGVEYXRhICpzY2FuLAogCXJldHVybiBn b3RfaGVhcF90dXBsZTsKIH0KIAorc3RhdGljIHZvaWQKK2JhdGNoX2Fzc2VydF9iYXRjaGVzX3Zh bGlkKEluZGV4U2NhbkRlc2Mgc2NhbikKK3sKKyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCisJ QmF0Y2hRdWV1ZSAqYmF0Y2hxdWV1ZSA9IHNjYW4tPmJhdGNocXVldWU7CisKKwkvKiB3ZSBzaG91 bGQgaGF2ZSBiYXRjaGVzIGluaXRpYWxpemVkICovCisJQXNzZXJ0KGJhdGNocXVldWUgIT0gTlVM TCk7CisKKwkvKiBXZSBzaG91bGQgbm90IGhhdmUgdG9vIG1hbnkgYmF0Y2hlcy4gKi8KKwlBc3Nl cnQoYmF0Y2hxdWV1ZS0+bWF4QmF0Y2hlcyA+IDAgJiYKKwkJICAgYmF0Y2hxdWV1ZS0+bWF4QmF0 Y2hlcyA8PSBJTkRFWF9TQ0FOX01BWF9CQVRDSEVTKTsKKworCS8qCisJICogVGhlIGhlYWQvbmV4 dCBpbmRleGVzIHNob3VsZCBkZWZpbmUgYSB2YWxpZCByYW5nZSAoaW4gdGhlIGN5Y2xpYworCSAq IGJ1ZmZlciwgYW5kIHNob3VsZCBub3Qgb3ZlcmZsb3cgbWF4QmF0Y2hlcy4KKwkgKi8KKwlBc3Nl cnQoYmF0Y2hxdWV1ZS0+aGVhZEJhdGNoID49IDAgJiYKKwkJICAgYmF0Y2hxdWV1ZS0+aGVhZEJh dGNoIDw9IGJhdGNocXVldWUtPm5leHRCYXRjaCk7CisJQXNzZXJ0KGJhdGNocXVldWUtPm5leHRC YXRjaCAtIGJhdGNocXVldWUtPmhlYWRCYXRjaCA8PQorCQkgICBiYXRjaHF1ZXVlLT5tYXhCYXRj aGVzKTsKKworCS8qIENoZWNrIGFsbCBjdXJyZW50IGJhdGNoZXMgKi8KKwlmb3IgKGludCBpID0g YmF0Y2hxdWV1ZS0+aGVhZEJhdGNoOyBpIDwgYmF0Y2hxdWV1ZS0+bmV4dEJhdGNoOyBpKyspCisJ eworCQlCYXRjaEluZGV4U2NhbiBiYXRjaCA9IElOREVYX1NDQU5fQkFUQ0goc2NhbiwgaSk7CisK KwkJYmF0Y2hfYXNzZXJ0X2JhdGNoX3ZhbGlkKHNjYW4sIGJhdGNoKTsKKwl9CisjZW5kaWYKK30K KworLyoKKyAqIGhlYXBfYmF0Y2hfYWR2YW5jZV9wb3MKKyAqCQlBZHZhbmNlIHRoZSBwb3NpdGlv biB0byB0aGUgbmV4dCBpdGVtLCBkZXBlbmRpbmcgb24gc2NhbiBkaXJlY3Rpb24uCisgKgorICog TW92ZSB0byB0aGUgbmV4dCBpdGVtIHdpdGhpbiB0aGUgYmF0Y2ggcG9pbnRlZCB0byBieSBjYWxs ZXIncyBwb3MuICBUaGlzIGlzCisgKiB1c3VhbGx5IHJlYWRQb3MuICBBZHZhbmNlcyB0aGUgcG9z aXRpb24gdG8gdGhlIG5leHQgaXRlbSwgZWl0aGVyIGluIHRoZQorICogc2FtZSBiYXRjaCBvciB0 aGUgZm9sbG93aW5nIG9uZSAoaWYgYWxyZWFkeSBhdmFpbGFibGUpLgorICoKKyAqIFdlIGNhbiBh ZHZhbmNlIG9ubHkgaWYgd2UgYWxyZWFkeSBoYXZlIHNvbWUgYmF0Y2hlcyBsb2FkZWQsIGFuZCB0 aGVyZSdzCisgKiBlaXRoZXIgZW5vdWdoIGl0ZW1zIGluIHRoZSBjdXJyZW50IGJhdGNoLCBvciBz b21lIG1vcmUgaXRlbXMgaW4gdGhlCisgKiBzdWJzZXF1ZW50IGJhdGNoZXMuCisgKgorICogSWYg dGhpcyBpcyB0aGUgZmlyc3QgYWR2YW5jZSAocmlnaHQgYWZ0ZXIgbG9hZGluZyB0aGUgaW5pdGlh bC9oZWFkIGJhdGNoKSwKKyAqIHBvc2l0aW9uIGlzIHN0aWxsIHVuZGVmaW5lZC4gIE90aGVyd2lz ZSB3ZSBleHBlY3QgdGhlIHBvc2l0aW9uIHRvIGJlIHZhbGlkLgorICoKKyAqIFJldHVybnMgdHJ1 ZSBpZiB0aGUgcG9zaXRpb24gd2FzIGFkdmFuY2VkLCBmYWxzZSBvdGhlcndpc2UuICBUaGUgcG9z aXRpb24KKyAqIGlzIGd1YXJhbnRlZWQgdG8gYmUgdmFsaWQgb25seSBhZnRlciBhIHN1Y2Nlc3Nm dWwgYWR2YW5jZS4KKyAqLworc3RhdGljIGJvb2wKK2hlYXBfYmF0Y2hfYWR2YW5jZV9wb3MoSW5k ZXhTY2FuRGVzYyBzY2FuLCBzdHJ1Y3QgQmF0Y2hRdWV1ZUl0ZW1Qb3MgKnBvcywKKwkJCQkJICAg U2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJQmF0Y2hJbmRleFNjYW4gYmF0Y2g7CisKKwkv KiBtYWtlIHN1cmUgd2UgaGF2ZSBiYXRjaGluZyBpbml0aWFsaXplZCBhbmQgY29uc2lzdGVudCAq LworCWJhdGNoX2Fzc2VydF9iYXRjaGVzX3ZhbGlkKHNjYW4pOworCisJLyogc2hvdWxkIGtub3cg ZGlyZWN0aW9uIGJ5IG5vdyAqLworCUFzc2VydChkaXJlY3Rpb24gPT0gc2Nhbi0+YmF0Y2hxdWV1 ZS0+ZGlyZWN0aW9uKTsKKwlBc3NlcnQoZGlyZWN0aW9uICE9IE5vTW92ZW1lbnRTY2FuRGlyZWN0 aW9uKTsKKworCS8qIFdlIGNhbid0IGFkdmFuY2UgaWYgdGhlcmUgYXJlIG5vIGJhdGNoZXMgYXZh aWxhYmxlLiAqLworCWlmIChJTkRFWF9TQ0FOX0JBVENIX0NPVU5UKHNjYW4pID09IDApCisJCXJl dHVybiBmYWxzZTsKKworCS8qCisJICogSWYgdGhlIHBvc2l0aW9uIGhhcyBub3QgYmVlbiBhZHZh bmNlZCB5ZXQsIGl0IGhhcyB0byBiZSByaWdodCBhZnRlciB3ZQorCSAqIGxvYWRlZCB0aGUgaW5p dGlhbCBiYXRjaCAobXVzdCBiZSB0aGUgaGVhZCBiYXRjaCkuIEluIHRoYXQgY2FzZSBqdXN0CisJ ICogaW5pdGlhbGl6ZSBpdCB0byB0aGUgYmF0Y2gncyBmaXJzdCBpdGVtIChvciBpdHMgbGFzdCBp dGVtLCB3aGVuCisJICogc2Nhbm5pbmcgYmFja3dhcmRzKS4KKwkgKi8KKwlpZiAoSU5ERVhfU0NB Tl9QT1NfSU5WQUxJRChwb3MpKQorCXsKKwkJLyoKKwkJICogV2Ugc2hvdWxkIGhhdmUgbG9hZGVk IHRoZSBzY2FuJ3MgaW5pdGlhbCBiYXRjaCwgb3IgbWF5YmUgd2UgaGF2ZQorCQkgKiBjaGFuZ2Vk IHRoZSBkaXJlY3Rpb24gb2YgdGhlIHNjYW4gYWZ0ZXIgc2Nhbm5pbmcgYWxsIHRoZSB3YXkgdG8g dGhlCisJCSAqIGVuZCAoaW4gd2hpY2ggY2FzZSB0aGUgcG9zaXRpb24gaXMgaW52YWxpZCwgYW5k IHdlIG1ha2UgaXQgbG9vaworCQkgKiBsaWtlIHRoZXJlIGlzIGp1c3Qgb25lIGJhdGNoKS4gV2Ug c2hvdWxkIGhhdmUganVzdCBvbmUgYmF0Y2gsCisJCSAqIHRob3VnaC4KKwkJICovCisJCUFzc2Vy dChJTkRFWF9TQ0FOX0JBVENIX0NPVU5UKHNjYW4pID09IDEpOworCisJCS8qCisJCSAqIEdldCB0 aGUgaW5pdGlhbCBiYXRjaCAod2hpY2ggbXVzdCBiZSB0aGUgaGVhZCksIGFuZCBpbml0aWFsaXpl IHRoZQorCQkgKiBwb3NpdGlvbiB0byB0aGUgYXBwcm9wcmlhdGUgaXRlbSBmb3IgdGhlIGN1cnJl bnQgc2NhbiBkaXJlY3Rpb24KKwkJICovCisJCWJhdGNoID0gSU5ERVhfU0NBTl9CQVRDSChzY2Fu LCBzY2FuLT5iYXRjaHF1ZXVlLT5oZWFkQmF0Y2gpOworCisJCXBvcy0+YmF0Y2ggPSBzY2FuLT5i YXRjaHF1ZXVlLT5oZWFkQmF0Y2g7CisKKwkJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGly ZWN0aW9uKSkKKwkJCXBvcy0+aXRlbSA9IGJhdGNoLT5maXJzdEl0ZW07CisJCWVsc2UKKwkJCXBv cy0+aXRlbSA9IGJhdGNoLT5sYXN0SXRlbTsKKworCQliYXRjaF9hc3NlcnRfcG9zX3ZhbGlkKHNj YW4sIHBvcyk7CisKKwkJcmV0dXJuIHRydWU7CisJfQorCisJLyoKKwkgKiBUaGUgcG9zaXRpb24g aXMgYWxyZWFkeSBkZWZpbmVkLCBzbyB3ZSBzaG91bGQgaGF2ZSBzb21lIGJhdGNoZXMgbG9hZGVk CisJICogYW5kIHRoZSBwb3NpdGlvbiBoYXMgdG8gYmUgdmFsaWQgd2l0aCByZXNwZWN0IHRvIHRo b3NlLgorCSAqLworCWJhdGNoX2Fzc2VydF9wb3NfdmFsaWQoc2NhbiwgcG9zKTsKKworCS8qCisJ ICogQWR2YW5jZSB0byB0aGUgbmV4dCBpdGVtIGluIHRoZSBzYW1lIGJhdGNoLCBpZiB0aGVyZSBh cmUgbW9yZSBpdGVtcy4gSWYKKwkgKiB3ZSdyZSBhdCB0aGUgbGFzdCBpdGVtLCB3ZSdsbCB0cnkg YWR2YW5jaW5nIHRvIHRoZSBuZXh0IGJhdGNoIGxhdGVyLgorCSAqLworCWJhdGNoID0gSU5ERVhf U0NBTl9CQVRDSChzY2FuLCBwb3MtPmJhdGNoKTsKKworCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3 YXJkKGRpcmVjdGlvbikpCisJeworCQlpZiAoKytwb3MtPml0ZW0gPD0gYmF0Y2gtPmxhc3RJdGVt KQorCQl7CisJCQliYXRjaF9hc3NlcnRfcG9zX3ZhbGlkKHNjYW4sIHBvcyk7CisKKwkJCXJldHVy biB0cnVlOworCQl9CisJfQorCWVsc2UJCQkJCQkvKiBTY2FuRGlyZWN0aW9uSXNCYWNrd2FyZCAq LworCXsKKwkJaWYgKC0tcG9zLT5pdGVtID49IGJhdGNoLT5maXJzdEl0ZW0pCisJCXsKKwkJCWJh dGNoX2Fzc2VydF9wb3NfdmFsaWQoc2NhbiwgcG9zKTsKKworCQkJcmV0dXJuIHRydWU7CisJCX0K Kwl9CisKKwkvKgorCSAqIFdlIGNvdWxkbid0IGFkdmFuY2Ugd2l0aGluIHRoZSBzYW1lIGJhdGNo LCB0cnkgYWR2YW5jaW5nIHRvIHRoZSBuZXh0CisJICogYmF0Y2gsIGlmIGl0J3MgYWxyZWFkeSBs b2FkZWQuCisJICovCisJaWYgKElOREVYX1NDQU5fQkFUQ0hfTE9BREVEKHNjYW4sIHBvcy0+YmF0 Y2ggKyAxKSkKKwl7CisJCS8qIGFkdmFuY2UgdG8gdGhlIG5leHQgYmF0Y2ggKi8KKwkJcG9zLT5i YXRjaCsrOworCisJCWJhdGNoID0gSU5ERVhfU0NBTl9CQVRDSChzY2FuLCBwb3MtPmJhdGNoKTsK KwkJQXNzZXJ0KGJhdGNoICE9IE5VTEwpOworCisJCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJk KGRpcmVjdGlvbikpCisJCQlwb3MtPml0ZW0gPSBiYXRjaC0+Zmlyc3RJdGVtOworCQllbHNlCisJ CQlwb3MtPml0ZW0gPSBiYXRjaC0+bGFzdEl0ZW07CisKKwkJYmF0Y2hfYXNzZXJ0X3Bvc192YWxp ZChzY2FuLCBwb3MpOworCisJCXJldHVybiB0cnVlOworCX0KKworCS8qIGNhbid0IGFkdmFuY2Ug Ki8KKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0KKyAqCQloZWFwYW1f YmF0Y2hfZ2V0bmV4dF90aWQgLSBnZXQgbmV4dCBUSUQgZnJvbSBpbmRleCBzY2FuIGJhdGNoIHF1 ZXVlCisgKgorICogVGhpcyBmdW5jdGlvbiBpbXBsZW1lbnRzIGhlYXBhbSdzIHZlcnNpb24gb2Yg Z2V0dGluZyB0aGUgbmV4dCBUSUQgZnJvbSBhbgorICogaW5kZXggc2NhbiB0aGF0IHVzZXMgdGhl IGFtZ2V0YmF0Y2ggaW50ZXJmYWNlLiAgSXQgaXMgaW1wbGVtZW50ZWQgdXNpbmcKKyAqIHZhcmlv dXMgaW5kZXhiYXRjaC5jIHV0aWxpdHkgcm91dGluZXMuCisgKgorICogVGhlIHJvdXRpbmVzIGZy b20gaW5kZXhiYXRjaC5jIGFyZSBzdGF0ZWxlc3MgLS0gdGhleSBqdXN0IGltcGxlbWVudCBiYXRj aAorICogcXVldWUgbWVjaGFuaWNzLiAgaGVhcGFtX2JhdGNoX2dldG5leHRfdGlkIGltcGxlbWVu dHMgdGhlIGhlYXBhbSBwb2xpY3k7IGl0CisgKiBkZWNpZGVzIHdoZW4gdG8gbG9hZC9mcmVlIGJh dGNoZXMsIGFuZCBjb250cm9scyBzY2FuIGRpcmVjdGlvbiBjaGFuZ2VzLgorICogLS0tLS0tLS0t LS0tLS0tLQorICovCitzdGF0aWMgSXRlbVBvaW50ZXIKK2hlYXBhbV9iYXRjaF9nZXRuZXh0X3Rp ZChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCUJhdGNo UXVldWUgKmJhdGNocXVldWUgPSBzY2FuLT5iYXRjaHF1ZXVlOworCUJhdGNoUXVldWVJdGVtUG9z ICpyZWFkUG9zOworCisJLyogc2hvdWxkbid0IGdldCBoZXJlIHdpdGhvdXQgYmF0Y2hpbmcgKi8K KwliYXRjaF9hc3NlcnRfYmF0Y2hlc192YWxpZChzY2FuKTsKKworCS8qIEluaXRpYWxpemUgZGly ZWN0aW9uIG9uIGZpcnN0IGNhbGwgKi8KKwlpZiAoYmF0Y2hxdWV1ZS0+ZGlyZWN0aW9uID09IE5v TW92ZW1lbnRTY2FuRGlyZWN0aW9uKQorCQliYXRjaHF1ZXVlLT5kaXJlY3Rpb24gPSBkaXJlY3Rp b247CisJZWxzZSBpZiAodW5saWtlbHkoYmF0Y2hxdWV1ZS0+ZGlyZWN0aW9uICE9IGRpcmVjdGlv bikpCisJeworCQkvKgorCQkgKiBIYW5kbGUgYSBjaGFuZ2UgaW4gdGhlIHNjYW4ncyBkaXJlY3Rp b24uCisJCSAqCisJCSAqIFJlbGVhc2UgZnV0dXJlIGJhdGNoZXMgcHJvcGVybHksIHRvIG1ha2Ug aXQgbG9vayBsaWtlIHRoZSBjdXJyZW50CisJCSAqIGJhdGNoIGlzIHRoZSBvbmx5IG9uZSB3ZSBs b2FkZWQuCisJCSAqLworCQl3aGlsZSAoYmF0Y2hxdWV1ZS0+bmV4dEJhdGNoID4gYmF0Y2hxdWV1 ZS0+aGVhZEJhdGNoICsgMSkKKwkJeworCQkJLyogcmVsZWFzZSAibGF0ZXIiIGJhdGNoZXMgaW4g cmV2ZXJzZSBvcmRlciAqLworCQkJQmF0Y2hJbmRleFNjYW4gZmJhdGNoOworCisJCQliYXRjaHF1 ZXVlLT5uZXh0QmF0Y2gtLTsKKwkJCWZiYXRjaCA9IElOREVYX1NDQU5fQkFUQ0goc2NhbiwgYmF0 Y2hxdWV1ZS0+bmV4dEJhdGNoKTsKKwkJCWJhdGNoX2ZyZWUoc2NhbiwgZmJhdGNoKTsKKwkJfQor CisJCS8qCisJCSAqIFJlbWVtYmVyIHRoZSBuZXcgZGlyZWN0aW9uLCBhbmQgbWFrZSBzdXJlIHRo ZSBzY2FuIGlzIG5vdCBtYXJrZWQgYXMKKwkJICogImZpbmlzaGVkIiAod2UgbWlnaHQgaGF2ZSBh bHJlYWR5IHJlYWQgdGhlIGxhc3QgYmF0Y2gsIGJ1dCBub3cgd2UKKwkJICogbmVlZCB0byBzdGFy dCBvdmVyKS4KKwkJICovCisJCWJhdGNocXVldWUtPmRpcmVjdGlvbiA9IGRpcmVjdGlvbjsKKwkJ YmF0Y2hxdWV1ZS0+ZmluaXNoZWQgPSBmYWxzZTsKKwl9CisKKwkvKiBzaG9ydGN1dCBmb3IgdGhl IHJlYWQgcG9zaXRpb24sIGZvciBjb252ZW5pZW5jZSAqLworCXJlYWRQb3MgPSAmYmF0Y2hxdWV1 ZS0+cmVhZFBvczsKKworCS8qCisJICogVHJ5IGFkdmFuY2luZyB0aGUgYmF0Y2ggcG9zaXRpb24u IElmIHRoYXQgZG9lc24ndCBzdWNjZWVkLCBpdCBtZWFucyB3ZQorCSAqIGRvbid0IGhhdmUgbW9y ZSBpdGVtcyBpbiB0aGUgY3VycmVudCBiYXRjaCwgYW5kIHRoZXJlJ3Mgbm8gZnV0dXJlIGJhdGNo CisJICogbG9hZGVkLiBTbyB0cnkgbG9hZGluZyBhbm90aGVyIGJhdGNoLCBhbmQgcmV0cnkgaWYg bmVlZGVkLgorCSAqLworCXdoaWxlICh0cnVlKQorCXsKKwkJLyoKKwkJICogSWYgd2UgbWFuYWdl IHRvIGFkdmFuY2UgdG8gdGhlIG5leHQgaXRlbXMsIHJldHVybiBpdCBhbmQgd2UncmUKKwkJICog ZG9uZS4gT3RoZXJ3aXNlIHRyeSBsb2FkaW5nIGFub3RoZXIgYmF0Y2guCisJCSAqLworCQlpZiAo aGVhcF9iYXRjaF9hZHZhbmNlX3BvcyhzY2FuLCByZWFkUG9zLCBkaXJlY3Rpb24pKQorCQl7CisJ CQlCYXRjaEluZGV4U2NhbiByZWFkQmF0Y2ggPSBJTkRFWF9TQ0FOX0JBVENIKHNjYW4sIHJlYWRQ b3MtPmJhdGNoKTsKKworCQkJLyogc2V0IHRoZSBUSUQgLyBpdHVwIGZvciB0aGUgc2NhbiAqLwor CQkJc2Nhbi0+eHNfaGVhcHRpZCA9IHJlYWRCYXRjaC0+aXRlbXNbcmVhZFBvcy0+aXRlbV0uaGVh cFRpZDsKKworCQkJLyogeHNfaGl0dXAgaXMgbm90IHN1cHBvcnRlZCBieSBhbWdldGJhdGNoIHNj YW5zICovCisJCQlBc3NlcnQoIXNjYW4tPnhzX2hpdHVwKTsKKworCQkJaWYgKHNjYW4tPnhzX3dh bnRfaXR1cCkKKwkJCQlzY2FuLT54c19pdHVwID0KKwkJCQkJKEluZGV4VHVwbGUpIChyZWFkQmF0 Y2gtPmN1cnJUdXBsZXMgKworCQkJCQkJCQkgIHJlYWRCYXRjaC0+aXRlbXNbcmVhZFBvcy0+aXRl bV0udHVwbGVPZmZzZXQpOworCisJCQkvKgorCQkJICogSWYgd2UgYWR2YW5jZWQgdG8gdGhlIG5l eHQgYmF0Y2gsIHJlbGVhc2UgdGhlIGJhdGNoIHdlIG5vCisJCQkgKiBsb25nZXIgbmVlZC4gVGhl IHBvc2l0aW9ucyBpcyB0aGUgInJlYWQiIHBvc2l0aW9uLCBhbmQgd2UgY2FuCisJCQkgKiBjb21w YXJlIGl0IHRvIGhlYWRCYXRjaC4KKwkJCSAqLworCQkJaWYgKHVubGlrZWx5KHJlYWRQb3MtPmJh dGNoICE9IGJhdGNocXVldWUtPmhlYWRCYXRjaCkpCisJCQl7CisJCQkJQmF0Y2hJbmRleFNjYW4g aGVhZEJhdGNoID0gSU5ERVhfU0NBTl9CQVRDSChzY2FuLAorCQkJCQkJCQkJCQkJCQkJYmF0Y2hx dWV1ZS0+aGVhZEJhdGNoKTsKKworCQkJCS8qIEZyZWUgdGhlIGhlYWQgYmF0Y2ggKGV4Y2VwdCB3 aGVuIGl0J3MgbWFya0JhdGNoKSAqLworCQkJCWJhdGNoX2ZyZWUoc2NhbiwgaGVhZEJhdGNoKTsK KworCQkJCS8qCisJCQkJICogSW4gYW55IGNhc2UsIHJlbW92ZSB0aGUgYmF0Y2ggZnJvbSB0aGUg cmVndWxhciBxdWV1ZSwgZXZlbgorCQkJCSAqIGlmIHdlIGtlcHQgaXQgZm9yIG1hcmsvcmVzdG9y ZS4KKwkJCQkgKi8KKwkJCQliYXRjaHF1ZXVlLT5oZWFkQmF0Y2grKzsKKworCQkJCS8qIHdlIGNh bid0IHNraXAgYW55IGJhdGNoZXMgKi8KKwkJCQlBc3NlcnQoYmF0Y2hxdWV1ZS0+aGVhZEJhdGNo ID09IHJlYWRQb3MtPmJhdGNoKTsKKwkJCX0KKworCQkJcGdzdGF0X2NvdW50X2luZGV4X3R1cGxl cyhzY2FuLT5pbmRleFJlbGF0aW9uLCAxKTsKKwkJCXJldHVybiAmc2Nhbi0+eHNfaGVhcHRpZDsK KwkJfQorCisJCS8qCisJCSAqIEZhaWxlZCB0byBhZHZhbmNlIHRoZSByZWFkIHBvc2l0aW9uLiAg SGF2ZSBpbmRleGJhdGNoLmMgdXRpbGl0eQorCQkgKiByb3V0aW5lIGxvYWQgYW5vdGhlciBiYXRj aCBpbnRvIG91ciBxdWV1ZSAobmV4dCBpbiB0aGlzIGRpcmVjdGlvbikuCisJCSAqLworCQlpZiAo IWJhdGNoX2dldG5leHQoc2NhbiwgZGlyZWN0aW9uKSkKKwkJeworCQkJLyogd2UncmUgZG9uZSAt LSB0aGVyZSdzIG5vIG1vcmUgYmF0Y2hlcyBpbiB0aGlzIHNjYW4gZGlyZWN0aW9uICovCisJCQli cmVhazsKKwkJfQorCX0KKworCS8qCisJICogSWYgd2UgZ2V0IGhlcmUsIHdlIGZhaWxlZCB0byBh ZHZhbmNlIHRoZSBwb3NpdGlvbiBhbmQgdGhlcmUgYXJlIG5vIG1vcmUKKwkgKiBiYXRjaGVzIHRv IGJlIGxvYWRlZCBpbiB0aGUgY3VycmVudCBzY2FuIGRpcmVjdGlvbi4gIERlZmVuc2l2ZWx5IHJl c2V0CisJICogdGhlIHJlYWQgcG9zaXRpb24uCisJICovCisJYmF0Y2hfcmVzZXRfcG9zKHJlYWRQ b3MpOworCUFzc2VydChzY2FuLT5iYXRjaHF1ZXVlLT5maW5pc2hlZCk7CisKKwlyZXR1cm4gTlVM TDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLQorICoJCWluZGV4X2ZldGNoX2hlYXAgLSBnZXQg dGhlIHNjYW4ncyBuZXh0IGhlYXAgdHVwbGUKKyAqCisgKiBUaGUgcmVzdWx0IGlzIGEgdmlzaWJs ZSBoZWFwIHR1cGxlIGFzc29jaWF0ZWQgd2l0aCB0aGUgaW5kZXggVElEIG1vc3QKKyAqIHJlY2Vu dGx5IGZldGNoZWQgYnkgb3VyIGNhbGxlciBpbiBzY2FuLT54c19oZWFwdGlkLCBvciBOVUxMIGlm IG5vIG1vcmUKKyAqIG1hdGNoaW5nIHR1cGxlcyBleGlzdC4gIChUaGVyZSBjYW4gYmUgbW9yZSB0 aGFuIG9uZSBtYXRjaGluZyB0dXBsZSBiZWNhdXNlCisgKiBvZiBIT1QgY2hhaW5zLCBhbHRob3Vn aCB3aGVuIHVzaW5nIGFuIE1WQ0Mgc25hcHNob3QgaXQgc2hvdWxkIGJlIGltcG9zc2libGUKKyAq IGZvciBtb3JlIHRoYW4gb25lIHN1Y2ggdHVwbGUgdG8gZXhpc3QuKQorICoKKyAqIE9uIHN1Y2Nl c3MsIHRoZSBidWZmZXIgY29udGFpbmluZyB0aGUgaGVhcCB0dXAgaXMgcGlubmVkLiAgVGhlIHBp biBtdXN0IGJlCisgKiBkcm9wcGVkIGVsc2V3aGVyZS4KKyAqIC0tLS0tLS0tLS0tLS0tLS0KKyAq Lworc3RhdGljIGJvb2wKK2luZGV4X2ZldGNoX2hlYXAoSW5kZXhTY2FuRGVzYyBzY2FuLCBUdXBs ZVRhYmxlU2xvdCAqc2xvdCkKK3sKKwlib29sCQlhbGxfZGVhZCA9IGZhbHNlOworCWJvb2wJCWZv dW5kOworCisJZm91bmQgPSBoZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGUoc2Nhbi0+eHNfaGVhcGZl dGNoLCAmc2Nhbi0+eHNfaGVhcHRpZCwKKwkJCQkJCQkJCSBzY2FuLT54c19zbmFwc2hvdCwgc2xv dCwKKwkJCQkJCQkJCSAmc2Nhbi0+eHNfaGVhcF9jb250aW51ZSwgJmFsbF9kZWFkKTsKKworCWlm IChmb3VuZCkKKwkJcGdzdGF0X2NvdW50X2hlYXBfZmV0Y2goc2Nhbi0+aW5kZXhSZWxhdGlvbik7 CisKKwkvKgorCSAqIElmIHdlIHNjYW5uZWQgYSB3aG9sZSBIT1QgY2hhaW4gYW5kIGZvdW5kIG9u bHkgZGVhZCB0dXBsZXMsIHRlbGwgaW5kZXgKKwkgKiBBTSB0byBraWxsIGl0cyBlbnRyeSBmb3Ig dGhhdCBUSUQgKHRoaXMgd2lsbCB0YWtlIGVmZmVjdCBpbiB0aGUgbmV4dAorCSAqIGFtZ2V0dHVw bGUgY2FsbCwgaW4gaW5kZXhfZ2V0bmV4dF90aWQpLiAgV2UgZG8gbm90IGRvIHRoaXMgd2hlbiBp bgorCSAqIHJlY292ZXJ5IGJlY2F1c2UgaXQgbWF5IHZpb2xhdGUgTVZDQyB0byBkbyBzby4gIFNl ZSBjb21tZW50cyBpbgorCSAqIFJlbGF0aW9uR2V0SW5kZXhTY2FuKCkuCisJICoKKwkgKiBYWFgg Rm9yIHNjYW5zIHVzaW5nIGJhdGNoaW5nLCByZWNvcmQgdGhlIGZsYWcgaW4gdGhlIGJhdGNoICh3 ZSB3aWxsCisJICogcGFzcyBpdCB0byB0aGUgQU0gbGF0ZXIsIHdoZW4gZnJlZWluZyBpdCkuIE90 aGVyd2lzZSBqdXN0IHBhc3MgaXQgdG8KKwkgKiB0aGUgQU0gdXNpbmcgdGhlIGtpbGxfcHJpb3Jf dHVwbGUgZmllbGQuCisJICovCisJaWYgKCFzY2FuLT54YWN0U3RhcnRlZEluUmVjb3ZlcnkpCisJ eworCQlpZiAoc2Nhbi0+YmF0Y2hxdWV1ZSA9PSBOVUxMKQorCQkJc2Nhbi0+a2lsbF9wcmlvcl90 dXBsZSA9IGFsbF9kZWFkOworCQllbHNlIGlmIChhbGxfZGVhZCkKKwkJCWluZGV4X2JhdGNoX2tp bGxfaXRlbShzY2FuKTsKKwl9CisKKwlyZXR1cm4gZm91bmQ7Cit9CisKKy8qIC0tLS0tLS0tLS0t LS0tLS0KKyAqCQloZWFwYW1faW5kZXhfZ2V0bmV4dF9zbG90IC0gZ2V0IHRoZSBuZXh0IHR1cGxl IGZyb20gYSBzY2FuCisgKgorICogVGhlIHJlc3VsdCBpcyB0cnVlIGlmIGEgdHVwbGUgc2F0aXNm eWluZyB0aGUgc2NhbiBrZXlzIGFuZCB0aGUgc25hcHNob3Qgd2FzCisgKiBmb3VuZCwgZmFsc2Ug b3RoZXJ3aXNlLiAgVGhlIHR1cGxlIGlzIHN0b3JlZCBpbiB0aGUgc3BlY2lmaWVkIHNsb3QuCisg KgorICogT24gc3VjY2VzcywgcmVzb3VyY2VzIChsaWtlIGJ1ZmZlciBwaW5zKSBhcmUgbGlrZWx5 IHRvIGJlIGhlbGQsIGFuZCB3aWxsIGJlCisgKiBkcm9wcGVkIGJ5IGEgZnV0dXJlIGNhbGwgaGVy ZSAob3IgYnkgYSBsYXRlciBjYWxsIHRvIGluZGV4X2VuZHNjYW4pLgorICoKKyAqIE5vdGU6IGNh bGxlciBtdXN0IGNoZWNrIHNjYW4tPnhzX3JlY2hlY2ssIGFuZCBwZXJmb3JtIHJlY2hlY2tpbmcg b2YgdGhlCisgKiBzY2FuIGtleXMgaWYgcmVxdWlyZWQuICBXZSBkbyBub3QgZG8gdGhhdCBoZXJl IGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZQorICogZW5vdWdoIGluZm9ybWF0aW9uIHRvIGRvIGl0IGVm ZmljaWVudGx5IGluIHRoZSBnZW5lcmFsIGNhc2UuCisgKiAtLS0tLS0tLS0tLS0tLS0tCisgKi8K K3N0YXRpYyBib29sCitoZWFwYW1faW5kZXhfZ2V0bmV4dF9zbG90KEluZGV4U2NhbkRlc2Mgc2Nh biwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJCQkgIFR1cGxlVGFibGVTbG90ICpzbG90 KQoreworCUluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4gPSAoSW5kZXhGZXRjaEhlYXBEYXRhICop IHNjYW4tPnhzX2hlYXBmZXRjaDsKKwlJdGVtUG9pbnRlciB0aWQgPSBOVUxMOworCisJZm9yICg7 OykKKwl7CisJCWlmICghc2Nhbi0+eHNfaGVhcF9jb250aW51ZSkKKwkJeworCQkJLyoKKwkJCSAq IFNjYW5zIHRoYXQgdXNlIGFuIGFtZ2V0YmF0Y2ggaW5kZXggQU0gYXJlIG1hbmFnZWQgYnkgaGVh cGFtJ3MKKwkJCSAqIGluZGV4IHNjYW4gbWFuYWdlci4gIFRoaXMgZ2l2ZXMgaGVhcGFtIHRoZSBh YmlsaXR5IHRvIHJlYWQgaGVhcAorCQkJICogdHVwbGVzIGluIGEgZmxleGlibGUgb3JkZXIgdGhh dCBpcyBhdHR1bmVkIHRvIGJvdGggY29zdHMgYW5kCisJCQkgKiBiZW5lZml0cyBvbiB0aGUgaGVh cGFtIGFuZCB0YWJsZSBBTSBzaWRlLgorCQkJICoKKwkJCSAqIFNjYW5zIHRoYXQgdXNlIGFuIGFt Z2V0dHVwbGUgaW5kZXggQU0gc2ltcGx5IGNhbGwgdGhyb3VnaCB0bworCQkJICogaW5kZXhfZ2V0 bmV4dF90aWQgdG8gZ2V0IHRoZSBuZXh0IFRJRCByZXR1cm5lZCBieSBpbmRleCBBTS4gVGhlCisJ CQkgKiBwcm9ncmVzcyBvZiB0aGUgc2NhbiB3aWxsIGJlIHVuZGVyIHRoZSBjb250cm9sIG9mIGlu ZGV4IEFNICh3ZQorCQkJICoganVzdCBwYXNzIGl0IHRocm91Z2ggYSBkaXJlY3Rpb24gdG8gZ2V0 IHRoZSBuZXh0IHR1cGxlIGluKSwgc28KKwkJCSAqIHdlIGNhbm5vdCByZW9yZGVyIGFueSB3b3Jr LgorCQkJICovCisJCQlpZiAoc2Nhbi0+YmF0Y2hxdWV1ZSAhPSBOVUxMKQorCQkJCXRpZCA9IGhl YXBhbV9iYXRjaF9nZXRuZXh0X3RpZChzY2FuLCBkaXJlY3Rpb24pOworCQkJZWxzZQorCQkJCXRp ZCA9IGluZGV4X2dldG5leHRfdGlkKHNjYW4sIGRpcmVjdGlvbik7CisKKwkJCS8qIElmIHdlJ3Jl IG91dCBvZiBpbmRleCBlbnRyaWVzLCB3ZSdyZSBkb25lICovCisJCQlpZiAodGlkID09IE5VTEwp CisJCQkJYnJlYWs7CisJCX0KKworCQkvKgorCQkgKiBGZXRjaCB0aGUgbmV4dCAob3Igb25seSkg dmlzaWJsZSBoZWFwIHR1cGxlIGZvciB0aGlzIGluZGV4IGVudHJ5LgorCQkgKiBJZiB3ZSBkb24n dCBmaW5kIGFueXRoaW5nLCBsb29wIGFyb3VuZCBhbmQgZ3JhYiB0aGUgbmV4dCBUSUQgZnJvbQor CQkgKiB0aGUgaW5kZXguCisJCSAqLworCQlBc3NlcnQoSXRlbVBvaW50ZXJJc1ZhbGlkKCZzY2Fu LT54c19oZWFwdGlkKSk7CisJCWlmICghc2Nhbi0+eHNfd2FudF9pdHVwKQorCQl7CisJCQkvKiBQ bGFpbiBpbmRleCBzY2FuICovCisJCQlpZiAoaW5kZXhfZmV0Y2hfaGVhcChzY2FuLCBzbG90KSkK KwkJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8qCisJCQkgKiBJbmRleC1v bmx5IHNjYW4uCisJCQkgKgorCQkJICogV2UgY2FuIHNraXAgdGhlIGhlYXAgZmV0Y2ggaWYgdGhl IFRJRCByZWZlcmVuY2VzIGEgaGVhcCBwYWdlIG9uCisJCQkgKiB3aGljaCBhbGwgdHVwbGVzIGFy ZSBrbm93biB2aXNpYmxlIHRvIGV2ZXJ5Ym9keS4gIEluIGFueSBjYXNlLAorCQkJICogd2UnbGwg dXNlIHRoZSBpbmRleCB0dXBsZSBub3QgdGhlIGhlYXAgdHVwbGUgYXMgdGhlIGRhdGEKKwkJCSAq IHNvdXJjZS4KKwkJCSAqCisJCQkgKiBOb3RlIG9uIE1lbW9yeSBPcmRlcmluZyBFZmZlY3RzOiB2 aXNpYmlsaXR5bWFwX2dldF9zdGF0dXMgZG9lcworCQkJICogbm90IGxvY2sgdGhlIHZpc2liaWxp dHkgbWFwIGJ1ZmZlciwgYW5kIHRoZXJlZm9yZSB0aGUgcmVzdWx0IHdlCisJCQkgKiByZWFkIGhl cmUgY291bGQgYmUgc2xpZ2h0bHkgc3RhbGUuICBIb3dldmVyLCBpdCBjYW4ndCBiZSBzdGFsZQor CQkJICogZW5vdWdoIHRvIG1hdHRlci4KKwkJCSAqCisJCQkgKiBXZSBuZWVkIHRvIGRldGVjdCBj bGVhcmluZyBhIFZNIGJpdCBkdWUgdG8gYW4gaW5zZXJ0IHJpZ2h0CisJCQkgKiBhd2F5LCBiZWNh dXNlIHRoZSB0dXBsZSBpcyBwcmVzZW50IGluIHRoZSBpbmRleCBwYWdlIGJ1dCBub3QKKwkJCSAq IHZpc2libGUuIFRoZSByZWFkaW5nIG9mIHRoZSBUSUQgYnkgdGhpcyBzY2FuICh1c2luZyBhIHNo YXJlZAorCQkJICogbG9jayBvbiB0aGUgaW5kZXggYnVmZmVyKSBpcyBzZXJpYWxpemVkIHdpdGgg dGhlIGluc2VydCBvZiB0aGUKKwkJCSAqIFRJRCBpbnRvIHRoZSBpbmRleCAodXNpbmcgYW4gZXhj bHVzaXZlIGxvY2sgb24gdGhlIGluZGV4CisJCQkgKiBidWZmZXIpLiBCZWNhdXNlIHRoZSBWTSBi aXQgaXMgY2xlYXJlZCBiZWZvcmUgdXBkYXRpbmcgdGhlCisJCQkgKiBpbmRleCwgYW5kIGxvY2tp bmcvdW5sb2NraW5nIG9mIHRoZSBpbmRleCBwYWdlIGFjdHMgYXMgYSBmdWxsCisJCQkgKiBtZW1v cnkgYmFycmllciwgd2UgYXJlIHN1cmUgdG8gc2VlIHRoZSBjbGVhcmVkIGJpdCBpZiB3ZSBzZWUg YQorCQkJICogcmVjZW50bHktaW5zZXJ0ZWQgVElELgorCQkJICoKKwkJCSAqIERlbGV0ZXMgZG8g bm90IHVwZGF0ZSB0aGUgaW5kZXggcGFnZSAob25seSBWQUNVVU0gd2lsbCBjbGVhcgorCQkJICog b3V0IHRoZSBUSUQpLCBzbyB0aGUgY2xlYXJpbmcgb2YgdGhlIFZNIGJpdCBieSBhIGRlbGV0ZSBp cyBub3QKKwkJCSAqIHNlcmlhbGl6ZWQgd2l0aCB0aGlzIHRlc3QgYmVsb3csIGFuZCB3ZSBtYXkg c2VlIGEgdmFsdWUgdGhhdCBpcworCQkJICogc2lnbmlmaWNhbnRseSBzdGFsZS4gSG93ZXZlciwg d2UgZG9uJ3QgY2FyZSBhYm91dCB0aGUgZGVsZXRlCisJCQkgKiByaWdodCBhd2F5LCBiZWNhdXNl IHRoZSB0dXBsZSBpcyBzdGlsbCB2aXNpYmxlIHVudGlsIHRoZQorCQkJICogZGVsZXRpbmcgdHJh bnNhY3Rpb24gY29tbWl0cyBvciB0aGUgc3RhdGVtZW50IGVuZHMgKGlmIGl0J3Mgb3VyCisJCQkg KiB0cmFuc2FjdGlvbikuIEluIGVpdGhlciBjYXNlLCB0aGUgbG9jayBvbiB0aGUgVk0gYnVmZmVy IHdpbGwKKwkJCSAqIGhhdmUgYmVlbiByZWxlYXNlZCAoYWN0aW5nIGFzIGEgd3JpdGUgYmFycmll cikgYWZ0ZXIgY2xlYXJpbmcKKwkJCSAqIHRoZSBiaXQuIEFuZCBmb3IgdXMgdG8gaGF2ZSBhIHNu YXBzaG90IHRoYXQgaW5jbHVkZXMgdGhlCisJCQkgKiBkZWxldGluZyB0cmFuc2FjdGlvbiAobWFr aW5nIHRoZSB0dXBsZSBpbnZpc2libGUpLCB3ZSBtdXN0IGhhdmUKKwkJCSAqIGFjcXVpcmVkIFBy b2NBcnJheUxvY2sgYWZ0ZXIgdGhhdCB0aW1lLCBhY3RpbmcgYXMgYSByZWFkCisJCQkgKiBiYXJy aWVyLgorCQkJICoKKwkJCSAqIEl0J3Mgd29ydGggZ29pbmcgdGhyb3VnaCB0aGlzIGNvbXBsZXhp dHkgdG8gYXZvaWQgbmVlZGluZyB0bworCQkJICogbG9jayB0aGUgVk0gYnVmZmVyLCB3aGljaCBj b3VsZCBjYXVzZSBzaWduaWZpY2FudCBjb250ZW50aW9uLgorCQkJICovCisJCQlpZiAoIVZNX0FM TF9WSVNJQkxFKGhzY2FuLT54c19iYXNlLnJlbCwKKwkJCQkJCQkJSXRlbVBvaW50ZXJHZXRCbG9j a051bWJlcih0aWQpLAorCQkJCQkJCQkmaHNjYW4tPnZtYnVmKSkKKwkJCXsKKwkJCQkvKgorCQkJ CSAqIFJhdHMsIHdlIGhhdmUgdG8gdmlzaXQgdGhlIGhlYXAgdG8gY2hlY2sgdmlzaWJpbGl0eS4K KwkJCQkgKi8KKwkJCQloc2Nhbi0+eHNfYmFzZS5uaGVhcGFjY2Vzc2VzKys7CisJCQkJaWYgKCFp bmRleF9mZXRjaF9oZWFwKHNjYW4sIGhzY2FuLT5pb3NfdGFibGVzbG90KSkKKwkJCQkJY29udGlu dWU7CS8qIG5vIHZpc2libGUgdHVwbGUsIHRyeSBuZXh0IGluZGV4IGVudHJ5ICovCisKKwkJCQkv KgorCQkJCSAqIHNlbGZ1bmNzLmMgY2FsbGVyIHVzZXMgU25hcHNob3ROb25WYWN1dW1hYmxlLiAg SnVzdCBhc3N1bWUKKwkJCQkgKiB0aGF0IGl0J3MgZ29vZCBlbm91Z2ggdGhhdCBhbnkgb25lIHR1 cGxlIGZyb20gSE9UIGNoYWluIGlzCisJCQkJICogdmlzaWJsZSBmb3Igc3VjaCBhIGNhbGxlcgor CQkJCSAqLworCQkJCWlmICh1bmxpa2VseSghSXNNVkNDU25hcHNob3Qoc2Nhbi0+eHNfc25hcHNo b3QpKSkKKwkJCQkJcmV0dXJuIHRydWU7CisKKwkJCQlFeGVjQ2xlYXJUdXBsZShoc2Nhbi0+aW9z X3RhYmxlc2xvdCk7CisKKwkJCQkvKgorCQkJCSAqIE9ubHkgTVZDQyBzbmFwc2hvdHMgYXJlIHN1 cHBvcnRlZCBoZXJlLCBzbyB0aGVyZSBzaG91bGQgYmUKKwkJCQkgKiBubyBuZWVkIHRvIGtlZXAg Zm9sbG93aW5nIHRoZSBIT1QgY2hhaW4gb25jZSBhIHZpc2libGUKKwkJCQkgKiBlbnRyeSBoYXMg YmVlbiBmb3VuZC4KKwkJCQkgKi8KKwkJCQlpZiAoc2Nhbi0+eHNfaGVhcF9jb250aW51ZSkKKwkJ CQkJZWxvZyhFUlJPUiwgIm5vbi1NVkNDIHNuYXBzaG90cyBhcmUgbm90IHN1cHBvcnRlZCBpbiBp bmRleC1vbmx5IHNjYW5zIik7CisKKwkJCQkvKgorCQkJCSAqIE5vdGU6IGF0IHRoaXMgcG9pbnQg d2UgYXJlIGhvbGRpbmcgYSBwaW4gb24gdGhlIGhlYXAgcGFnZSwKKwkJCQkgKiBhcyByZWNvcmRl ZCBpbiBJbmRleEZldGNoSGVhcERhdGEueHNfY2J1Zi4gIFdlIGNvdWxkCisJCQkJICogcmVsZWFz ZSB0aGF0IHBpbiBub3csIGJ1dCB3ZSBwcmVmZXIgdG8gaG9sZCBvbiB0byBWTSBwaW5zLgorCQkJ CSAqIGl0J3MgcXVpdGUgcG9zc2libGUgdGhhdCB0aGUgaW5kZXggZW50cnkgd2lsbCByZXF1aXJl IGEKKwkJCQkgKiB2aXNpdCB0byB0aGUgc2FtZSBoZWFwIHBhZ2UuICBJdCdzIGV2ZW4gbW9yZSBs aWtlbHkgdGhhdAorCQkJCSAqIHRoZSBpbmRleCBlbnRyeSB3aWxsIGZvcmNlIHVzIHRvIHBlcmZv cm0gYSBsb29rdXAgdGhhdCB1c2VzCisJCQkJICogdGhlIHNhbWUgYWxyZWFkeS1waW5uZWQgVk0g cGFnZS4KKwkJCQkgKi8KKwkJCQlpZiAoc2Nhbi0+eHNfaXR1cCkKKwkJCQkJU3RvcmVJbmRleFR1 cGxlKHNsb3QsIHNjYW4tPnhzX2l0dXAsIHNjYW4tPnhzX2l0dXBkZXNjKTsKKwkJCX0KKwkJCWVs c2UKKwkJCXsKKwkJCQkvKgorCQkJCSAqIFdlIGRpZG4ndCBhY2Nlc3MgdGhlIGhlYXAsIHNvIHdl J2xsIG5lZWQgdG8gdGFrZSBhCisJCQkJICogcHJlZGljYXRlIGxvY2sgZXhwbGljaXRseSwgYXMg aWYgd2UgaGFkLiAgRm9yIG5vdyB3ZSBkbworCQkJCSAqIHRoYXQgYXQgcGFnZSBsZXZlbC4KKwkJ CQkgKi8KKwkJCQlQcmVkaWNhdGVMb2NrUGFnZShoc2Nhbi0+eHNfYmFzZS5yZWwsCisJCQkJCQkJ CSAgSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcih0aWQpLAorCQkJCQkJCQkgIHNjYW4tPnhzX3Nu YXBzaG90KTsKKwkJCX0KKwkJCXJldHVybiB0cnVlOworCQl9CisJfQorCisJcmV0dXJuIGZhbHNl OworfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIENhbGxiYWNrcyBmb3Igbm9uLW1vZGlmeWlu ZyBvcGVyYXRpb25zIG9uIGluZGl2aWR1YWwgdHVwbGVzIGZvciBoZWFwIEFNCkBAIC03NTMsNyAr MTI4Niw4IEBAIGhlYXBhbV9yZWxhdGlvbl9jb3B5X2Zvcl9jbHVzdGVyKFJlbGF0aW9uIE9sZEhl YXAsIFJlbGF0aW9uIE5ld0hlYXAsCiAKIAkJdGFibGVTY2FuID0gTlVMTDsKIAkJaGVhcFNjYW4g PSBOVUxMOwotCQlpbmRleFNjYW4gPSBpbmRleF9iZWdpbnNjYW4oT2xkSGVhcCwgT2xkSW5kZXgs IFNuYXBzaG90QW55LCBOVUxMLCAwLCAwKTsKKwkJaW5kZXhTY2FuID0gaW5kZXhfYmVnaW5zY2Fu KE9sZEhlYXAsIE9sZEluZGV4LCBOVUxMLCBTbmFwc2hvdEFueSwKKwkJCQkJCQkJCU5VTEwsIDAs IDApOwogCQlpbmRleF9yZXNjYW4oaW5kZXhTY2FuLCBOVUxMLCAwLCBOVUxMLCAwKTsKIAl9CiAJ ZWxzZQpAQCAtNzkwLDcgKzEzMjQsOCBAQCBoZWFwYW1fcmVsYXRpb25fY29weV9mb3JfY2x1c3Rl cihSZWxhdGlvbiBPbGRIZWFwLCBSZWxhdGlvbiBOZXdIZWFwLAogCiAJCWlmIChpbmRleFNjYW4g IT0gTlVMTCkKIAkJewotCQkJaWYgKCFpbmRleF9nZXRuZXh0X3Nsb3QoaW5kZXhTY2FuLCBGb3J3 YXJkU2NhbkRpcmVjdGlvbiwgc2xvdCkpCisJCQlpZiAoIWhlYXBhbV9pbmRleF9nZXRuZXh0X3Ns b3QoaW5kZXhTY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwKKwkJCQkJCQkJCQkgICBzbG90KSkK IAkJCQlicmVhazsKIAogCQkJLyogU2luY2Ugd2UgdXNlZCBubyBzY2FuIGtleXMsIHNob3VsZCBu ZXZlciBuZWVkIHRvIHJlY2hlY2sgKi8KQEAgLTI2MzMsNiArMzE2OCw3IEBAIHN0YXRpYyBjb25z dCBUYWJsZUFtUm91dGluZSBoZWFwYW1fbWV0aG9kcyA9IHsKIAkuaW5kZXhfZmV0Y2hfYmVnaW4g PSBoZWFwYW1faW5kZXhfZmV0Y2hfYmVnaW4sCiAJLmluZGV4X2ZldGNoX3Jlc2V0ID0gaGVhcGFt X2luZGV4X2ZldGNoX3Jlc2V0LAogCS5pbmRleF9mZXRjaF9lbmQgPSBoZWFwYW1faW5kZXhfZmV0 Y2hfZW5kLAorCS5pbmRleF9nZXRuZXh0X3Nsb3QgPSBoZWFwYW1faW5kZXhfZ2V0bmV4dF9zbG90 LAogCS5pbmRleF9mZXRjaF90dXBsZSA9IGhlYXBhbV9pbmRleF9mZXRjaF90dXBsZSwKIAogCS50 dXBsZV9pbnNlcnQgPSBoZWFwYW1fdHVwbGVfaW5zZXJ0LApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvYWNjZXNzL2luZGV4L01ha2VmaWxlIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L01ha2Vm aWxlCmluZGV4IDZmMmUzMDYxYS4uZTZkNjgxYjQwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9h Y2Nlc3MvaW5kZXgvTWFrZWZpbGUKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L01ha2Vm aWxlCkBAIC0xNiw2ICsxNiw3IEBAIE9CSlMgPSBcCiAJYW1hcGkubyBcCiAJYW12YWxpZGF0ZS5v IFwKIAlnZW5hbS5vIFwKLQlpbmRleGFtLm8KKwlpbmRleGFtLm8gXAorCWluZGV4YmF0Y2gubwog CiBpbmNsdWRlICQodG9wX3NyY2Rpcikvc3JjL2JhY2tlbmQvY29tbW9uLm1rCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9p bmRleC9nZW5hbS5jCmluZGV4IDBjYjI3YWYxMy4uYTgyODU0MjkzIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5k ZXgvZ2VuYW0uYwpAQCAtODksNiArODksNyBAQCBSZWxhdGlvbkdldEluZGV4U2NhbihSZWxhdGlv biBpbmRleFJlbGF0aW9uLCBpbnQgbmtleXMsIGludCBub3JkZXJieXMpCiAJc2Nhbi0+eHNfc25h cHNob3QgPSBJbnZhbGlkU25hcHNob3Q7CS8qIGNhbGxlciBtdXN0IGluaXRpYWxpemUgdGhpcyAq LwogCXNjYW4tPm51bWJlck9mS2V5cyA9IG5rZXlzOwogCXNjYW4tPm51bWJlck9mT3JkZXJCeXMg PSBub3JkZXJieXM7CisJc2Nhbi0+YmF0Y2hxdWV1ZSA9IE5VTEw7CS8qIHVzZWQgYnkgYW1nZXRi YXRjaCBpbmRleCBBTXMgKi8KIAogCS8qCiAJICogV2UgYWxsb2NhdGUga2V5IHdvcmtzcGFjZSBo ZXJlLCBidXQgaXQgd29uJ3QgZ2V0IGZpbGxlZCB1bnRpbCBhbXJlc2Nhbi4KQEAgLTQ0Niw3ICs0 NDcsNyBAQCBzeXN0YWJsZV9iZWdpbnNjYW4oUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogCQkJCWVs b2coRVJST1IsICJjb2x1bW4gaXMgbm90IGluIGluZGV4Iik7CiAJCX0KIAotCQlzeXNzY2FuLT5p c2NhbiA9IGluZGV4X2JlZ2luc2NhbihoZWFwUmVsYXRpb24sIGlyZWwsCisJCXN5c3NjYW4tPmlz Y2FuID0gaW5kZXhfYmVnaW5zY2FuKGhlYXBSZWxhdGlvbiwgaXJlbCwgTlVMTCwKIAkJCQkJCQkJ CQkgc25hcHNob3QsIE5VTEwsIG5rZXlzLCAwKTsKIAkJaW5kZXhfcmVzY2FuKHN5c3NjYW4tPmlz Y2FuLCBpZHhrZXksIG5rZXlzLCBOVUxMLCAwKTsKIAkJc3lzc2Nhbi0+c2NhbiA9IE5VTEw7CkBA IC01MTcsNyArNTE4LDggQEAgc3lzdGFibGVfZ2V0bmV4dChTeXNTY2FuRGVzYyBzeXNzY2FuKQog CiAJaWYgKHN5c3NjYW4tPmlyZWwpCiAJewotCQlpZiAoaW5kZXhfZ2V0bmV4dF9zbG90KHN5c3Nj YW4tPmlzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgc3lzc2Nhbi0+c2xvdCkpCisJCWlmICh0 YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Qoc3lzc2Nhbi0+aXNjYW4sIEZvcndhcmRTY2FuRGlyZWN0 aW9uLAorCQkJCQkJCQkJIHN5c3NjYW4tPnNsb3QpKQogCQl7CiAJCQlib29sCQlzaG91bGRGcmVl OwogCkBAIC03MDcsNyArNzA5LDcgQEAgc3lzdGFibGVfYmVnaW5zY2FuX29yZGVyZWQoUmVsYXRp b24gaGVhcFJlbGF0aW9uLAogCQkJZWxvZyhFUlJPUiwgImNvbHVtbiBpcyBub3QgaW4gaW5kZXgi KTsKIAl9CiAKLQlzeXNzY2FuLT5pc2NhbiA9IGluZGV4X2JlZ2luc2NhbihoZWFwUmVsYXRpb24s IGluZGV4UmVsYXRpb24sCisJc3lzc2Nhbi0+aXNjYW4gPSBpbmRleF9iZWdpbnNjYW4oaGVhcFJl bGF0aW9uLCBpbmRleFJlbGF0aW9uLCBOVUxMLAogCQkJCQkJCQkJIHNuYXBzaG90LCBOVUxMLCBu a2V5cywgMCk7CiAJaW5kZXhfcmVzY2FuKHN5c3NjYW4tPmlzY2FuLCBpZHhrZXksIG5rZXlzLCBO VUxMLCAwKTsKIAlzeXNzY2FuLT5zY2FuID0gTlVMTDsKQEAgLTczNCw3ICs3MzYsNyBAQCBzeXN0 YWJsZV9nZXRuZXh0X29yZGVyZWQoU3lzU2NhbkRlc2Mgc3lzc2NhbiwgU2NhbkRpcmVjdGlvbiBk aXJlY3Rpb24pCiAJSGVhcFR1cGxlCWh0dXAgPSBOVUxMOwogCiAJQXNzZXJ0KHN5c3NjYW4tPmly ZWwpOwotCWlmIChpbmRleF9nZXRuZXh0X3Nsb3Qoc3lzc2Nhbi0+aXNjYW4sIGRpcmVjdGlvbiwg c3lzc2Nhbi0+c2xvdCkpCisJaWYgKHRhYmxlX2luZGV4X2dldG5leHRfc2xvdChzeXNzY2FuLT5p c2NhbiwgZGlyZWN0aW9uLCBzeXNzY2FuLT5zbG90KSkKIAkJaHR1cCA9IEV4ZWNGZXRjaFNsb3RI ZWFwVHVwbGUoc3lzc2Nhbi0+c2xvdCwgZmFsc2UsIE5VTEwpOwogCiAJLyogU2VlIG5vdGVzIGlu IHN5c3RhYmxlX2dldG5leHQgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRl eC9pbmRleGFtLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jCmluZGV4IDA0 OTJkOTJkMi4uOWU0ZWQ1YjU1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgv aW5kZXhhbS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMKQEAgLTI0 LDkgKzI0LDcgQEAKICAqCQlpbmRleF9wYXJhbGxlbHNjYW5faW5pdGlhbGl6ZSAtIGluaXRpYWxp emUgcGFyYWxsZWwgc2NhbgogICoJCWluZGV4X3BhcmFsbGVscmVzY2FuICAtIChyZSlzdGFydCBh IHBhcmFsbGVsIHNjYW4gb2YgYW4gaW5kZXgKICAqCQlpbmRleF9iZWdpbnNjYW5fcGFyYWxsZWwg LSBqb2luIHBhcmFsbGVsIGluZGV4IHNjYW4KLSAqCQlpbmRleF9nZXRuZXh0X3RpZAktIGdldCB0 aGUgbmV4dCBUSUQgZnJvbSBhIHNjYW4KLSAqCQlpbmRleF9mZXRjaF9oZWFwCQktIGdldCB0aGUg c2NhbidzIG5leHQgaGVhcCB0dXBsZQotICoJCWluZGV4X2dldG5leHRfc2xvdAktIGdldCB0aGUg bmV4dCB0dXBsZSBmcm9tIGEgc2NhbgorICoJCWluZGV4X2dldG5leHRfdGlkCS0gYW1nZXR0dXBs ZSB0YWJsZSBBTSBoZWxwZXIgcm91dGluZQogICoJCWluZGV4X2dldGJpdG1hcCAtIGdldCBhbGwg dHVwbGVzIGZyb20gYSBzY2FuCiAgKgkJaW5kZXhfYnVsa19kZWxldGUJLSBidWxrIGRlbGV0aW9u IG9mIGluZGV4IHR1cGxlcwogICoJCWluZGV4X3ZhY3V1bV9jbGVhbnVwCS0gcG9zdC1kZWxldGlv biBjbGVhbnVwIG9mIGFuIGluZGV4CkBAIC0yNTUsNiArMjUzLDcgQEAgaW5kZXhfaW5zZXJ0X2Ns ZWFudXAoUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwKIEluZGV4U2NhbkRlc2MKIGluZGV4X2JlZ2lu c2NhbihSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJCQkJUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwK KwkJCQlUdXBsZVRhYmxlU2xvdCAqaW9zX3RhYmxlc2xvdCwKIAkJCQlTbmFwc2hvdCBzbmFwc2hv dCwKIAkJCQlJbmRleFNjYW5JbnN0cnVtZW50YXRpb24gKmluc3RydW1lbnQsCiAJCQkJaW50IG5r ZXlzLCBpbnQgbm9yZGVyYnlzKQpAQCAtMjgzLDggKzI4MiwxMSBAQCBpbmRleF9iZWdpbnNjYW4o UmVsYXRpb24gaGVhcFJlbGF0aW9uLAogCXNjYW4tPnhzX3NuYXBzaG90ID0gc25hcHNob3Q7CiAJ c2Nhbi0+aW5zdHJ1bWVudCA9IGluc3RydW1lbnQ7CiAKKwlpZiAoaW5kZXhSZWxhdGlvbi0+cmRf aW5kYW0tPmFtZ2V0YmF0Y2ggIT0gTlVMTCkKKwkJaW5kZXhfYmF0Y2hfaW5pdChzY2FuKTsKKwog CS8qIHByZXBhcmUgdG8gZmV0Y2ggaW5kZXggbWF0Y2hlcyBmcm9tIHRhYmxlICovCi0Jc2Nhbi0+ eHNfaGVhcGZldGNoID0gdGFibGVfaW5kZXhfZmV0Y2hfYmVnaW4oaGVhcFJlbGF0aW9uKTsKKwlz Y2FuLT54c19oZWFwZmV0Y2ggPSB0YWJsZV9pbmRleF9mZXRjaF9iZWdpbihoZWFwUmVsYXRpb24s IGlvc190YWJsZXNsb3QpOwogCiAJcmV0dXJuIHNjYW47CiB9CkBAIC0zODAsNiArMzgyLDggQEAg aW5kZXhfcmVzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbiwKIAlzY2FuLT5raWxsX3ByaW9yX3R1cGxl ID0gZmFsc2U7IC8qIGZvciBzYWZldHkgKi8KIAlzY2FuLT54c19oZWFwX2NvbnRpbnVlID0gZmFs c2U7CiAKKwlpbmRleF9iYXRjaF9yZXNldChzY2FuLCB0cnVlKTsKKwogCXNjYW4tPmluZGV4UmVs YXRpb24tPnJkX2luZGFtLT5hbXJlc2NhbihzY2FuLCBrZXlzLCBua2V5cywKIAkJCQkJCQkJCQkJ b3JkZXJieXMsIG5vcmRlcmJ5cyk7CiB9CkBAIC0zOTQsNiArMzk4LDkgQEAgaW5kZXhfZW5kc2Nh bihJbmRleFNjYW5EZXNjIHNjYW4pCiAJU0NBTl9DSEVDS1M7CiAJQ0hFQ0tfU0NBTl9QUk9DRURV UkUoYW1lbmRzY2FuKTsKIAorCS8qIENsZWFudXAgYmF0Y2hpbmcsIHNvIHRoYXQgdGhlIEFNIGNh biByZWxlYXNlIHBpbnMgYW5kIHNvIG9uLiAqLworCWluZGV4X2JhdGNoX2VuZChzY2FuKTsKKwog CS8qIFJlbGVhc2UgcmVzb3VyY2VzIChsaWtlIGJ1ZmZlciBwaW5zKSBmcm9tIHRhYmxlIGFjY2Vz c2VzICovCiAJaWYgKHNjYW4tPnhzX2hlYXBmZXRjaCkKIAl7CkBAIC00MjIsOSArNDI5LDEwIEBA IHZvaWQKIGluZGV4X21hcmtwb3MoSW5kZXhTY2FuRGVzYyBzY2FuKQogewogCVNDQU5fQ0hFQ0tT OwotCUNIRUNLX1NDQU5fUFJPQ0VEVVJFKGFtbWFya3Bvcyk7CisJQ0hFQ0tfU0NBTl9QUk9DRURV UkUoYW1wb3NyZXNldCk7CiAKLQlzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1tYXJr cG9zKHNjYW4pOworCS8qIE9ubHkgYW1nZXRiYXRjaCBpbmRleCBBTXMgc3VwcG9ydCBtYXJrIGFu ZCByZXN0b3JlICovCisJcmV0dXJuIGluZGV4X2JhdGNoX21hcmtfcG9zKHNjYW4pOwogfQogCiAv KiAtLS0tLS0tLS0tLS0tLS0tCkBAIC00NDgsNyArNDU2LDggQEAgaW5kZXhfcmVzdHJwb3MoSW5k ZXhTY2FuRGVzYyBzY2FuKQogCUFzc2VydChJc01WQ0NTbmFwc2hvdChzY2FuLT54c19zbmFwc2hv dCkpOwogCiAJU0NBTl9DSEVDS1M7Ci0JQ0hFQ0tfU0NBTl9QUk9DRURVUkUoYW1yZXN0cnBvcyk7 CisJQ0hFQ0tfU0NBTl9QUk9DRURVUkUoYW1nZXRiYXRjaCk7CisJQ0hFQ0tfU0NBTl9QUk9DRURV UkUoYW1wb3NyZXNldCk7CiAKIAkvKiByZWxlYXNlIHJlc291cmNlcyAobGlrZSBidWZmZXIgcGlu cykgZnJvbSB0YWJsZSBhY2Nlc3NlcyAqLwogCWlmIChzY2FuLT54c19oZWFwZmV0Y2gpCkBAIC00 NTcsNyArNDY2LDcgQEAgaW5kZXhfcmVzdHJwb3MoSW5kZXhTY2FuRGVzYyBzY2FuKQogCXNjYW4t PmtpbGxfcHJpb3JfdHVwbGUgPSBmYWxzZTsgLyogZm9yIHNhZmV0eSAqLwogCXNjYW4tPnhzX2hl YXBfY29udGludWUgPSBmYWxzZTsKIAotCXNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5h bXJlc3RycG9zKHNjYW4pOworCWluZGV4X2JhdGNoX3Jlc3RvcmVfcG9zKHNjYW4pOwogfQogCiAv KgpAQCAtNTc5LDYgKzU4OCw4IEBAIGluZGV4X3BhcmFsbGVscmVzY2FuKEluZGV4U2NhbkRlc2Mg c2NhbikKIAlpZiAoc2Nhbi0+eHNfaGVhcGZldGNoKQogCQl0YWJsZV9pbmRleF9mZXRjaF9yZXNl dChzY2FuLT54c19oZWFwZmV0Y2gpOwogCisJaW5kZXhfYmF0Y2hfcmVzZXQoc2NhbiwgdHJ1ZSk7 CisKIAkvKiBhbXBhcmFsbGVscmVzY2FuIGlzIG9wdGlvbmFsOyBhc3N1bWUgbm8tb3AgaWYgbm90 IHByb3ZpZGVkIGJ5IEFNICovCiAJaWYgKHNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5h bXBhcmFsbGVscmVzY2FuICE9IE5VTEwpCiAJCXNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFt LT5hbXBhcmFsbGVscmVzY2FuKHNjYW4pOwpAQCAtNTkxLDYgKzYwMiw3IEBAIGluZGV4X3BhcmFs bGVscmVzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbikKICAqLwogSW5kZXhTY2FuRGVzYwogaW5kZXhf YmVnaW5zY2FuX3BhcmFsbGVsKFJlbGF0aW9uIGhlYXByZWwsIFJlbGF0aW9uIGluZGV4cmVsLAor CQkJCQkJIFR1cGxlVGFibGVTbG90ICppb3NfdGFibGVzbG90LAogCQkJCQkJIEluZGV4U2Nhbklu c3RydW1lbnRhdGlvbiAqaW5zdHJ1bWVudCwKIAkJCQkJCSBpbnQgbmtleXMsIGludCBub3JkZXJi eXMsCiAJCQkJCQkgUGFyYWxsZWxJbmRleFNjYW5EZXNjIHBzY2FuKQpAQCAtNjE0LDE3ICs2MjYs MjQgQEAgaW5kZXhfYmVnaW5zY2FuX3BhcmFsbGVsKFJlbGF0aW9uIGhlYXByZWwsIFJlbGF0aW9u IGluZGV4cmVsLAogCXNjYW4tPnhzX3NuYXBzaG90ID0gc25hcHNob3Q7CiAJc2Nhbi0+aW5zdHJ1 bWVudCA9IGluc3RydW1lbnQ7CiAKKwlpZiAoaW5kZXhyZWwtPnJkX2luZGFtLT5hbWdldGJhdGNo ICE9IE5VTEwpCisJCWluZGV4X2JhdGNoX2luaXQoc2Nhbik7CisKIAkvKiBwcmVwYXJlIHRvIGZl dGNoIGluZGV4IG1hdGNoZXMgZnJvbSB0YWJsZSAqLwotCXNjYW4tPnhzX2hlYXBmZXRjaCA9IHRh YmxlX2luZGV4X2ZldGNoX2JlZ2luKGhlYXByZWwpOworCXNjYW4tPnhzX2hlYXBmZXRjaCA9IHRh YmxlX2luZGV4X2ZldGNoX2JlZ2luKGhlYXByZWwsIGlvc190YWJsZXNsb3QpOwogCiAJcmV0dXJu IHNjYW47CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0KLSAqIGluZGV4X2dldG5leHRfdGlkIC0g Z2V0IHRoZSBuZXh0IFRJRCBmcm9tIGEgc2NhbgorICogaW5kZXhfZ2V0bmV4dF90aWQgLSBhbWdl dHR1cGxlIGludGVyZmFjZQogICoKICAqIFRoZSByZXN1bHQgaXMgdGhlIG5leHQgVElEIHNhdGlz ZnlpbmcgdGhlIHNjYW4ga2V5cywKICAqIG9yIE5VTEwgaWYgbm8gbW9yZSBtYXRjaGluZyB0dXBs ZXMgZXhpc3QuCisgKgorICogVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgYnkgdGFibGUgQU0n cyBpbmRleF9nZXRuZXh0X3Nsb3QgaW1wbGVtZW50YXRpb24sCisgKiBhbmQgb25seSBnaXZlbiBh biBpbmRleCBBTSB0aGF0IHN1cHBvcnRzIHRoZSBzaW5nbGUtdHVwbGUgYW1nZXR0dXBsZQorICog aW50ZXJmYWNlLgogICogLS0tLS0tLS0tLS0tLS0tLQogICovCiBJdGVtUG9pbnRlcgpAQCAtNjY3 LDk3ICs2ODYsNiBAQCBpbmRleF9nZXRuZXh0X3RpZChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5E aXJlY3Rpb24gZGlyZWN0aW9uKQogCXJldHVybiAmc2Nhbi0+eHNfaGVhcHRpZDsKIH0KIAotLyog LS0tLS0tLS0tLS0tLS0tLQotICoJCWluZGV4X2ZldGNoX2hlYXAgLSBnZXQgdGhlIHNjYW4ncyBu ZXh0IGhlYXAgdHVwbGUKLSAqCi0gKiBUaGUgcmVzdWx0IGlzIGEgdmlzaWJsZSBoZWFwIHR1cGxl IGFzc29jaWF0ZWQgd2l0aCB0aGUgaW5kZXggVElEIG1vc3QKLSAqIHJlY2VudGx5IGZldGNoZWQg YnkgaW5kZXhfZ2V0bmV4dF90aWQsIG9yIE5VTEwgaWYgbm8gbW9yZSBtYXRjaGluZyB0dXBsZXMK LSAqIGV4aXN0LiAgKFRoZXJlIGNhbiBiZSBtb3JlIHRoYW4gb25lIG1hdGNoaW5nIHR1cGxlIGJl Y2F1c2Ugb2YgSE9UIGNoYWlucywKLSAqIGFsdGhvdWdoIHdoZW4gdXNpbmcgYW4gTVZDQyBzbmFw c2hvdCBpdCBzaG91bGQgYmUgaW1wb3NzaWJsZSBmb3IgbW9yZSB0aGFuCi0gKiBvbmUgc3VjaCB0 dXBsZSB0byBleGlzdC4pCi0gKgotICogT24gc3VjY2VzcywgdGhlIGJ1ZmZlciBjb250YWluaW5n IHRoZSBoZWFwIHR1cCBpcyBwaW5uZWQgKHRoZSBwaW4gd2lsbCBiZQotICogZHJvcHBlZCBpbiBh IGZ1dHVyZSBpbmRleF9nZXRuZXh0X3RpZCwgaW5kZXhfZmV0Y2hfaGVhcCBvciBpbmRleF9lbmRz Y2FuCi0gKiBjYWxsKS4KLSAqCi0gKiBOb3RlOiBjYWxsZXIgbXVzdCBjaGVjayBzY2FuLT54c19y ZWNoZWNrLCBhbmQgcGVyZm9ybSByZWNoZWNraW5nIG9mIHRoZQotICogc2NhbiBrZXlzIGlmIHJl cXVpcmVkLiAgV2UgZG8gbm90IGRvIHRoYXQgaGVyZSBiZWNhdXNlIHdlIGRvbid0IGhhdmUKLSAq IGVub3VnaCBpbmZvcm1hdGlvbiB0byBkbyBpdCBlZmZpY2llbnRseSBpbiB0aGUgZ2VuZXJhbCBj YXNlLgotICogLS0tLS0tLS0tLS0tLS0tLQotICovCi1ib29sCi1pbmRleF9mZXRjaF9oZWFwKElu ZGV4U2NhbkRlc2Mgc2NhbiwgVHVwbGVUYWJsZVNsb3QgKnNsb3QpCi17Ci0JYm9vbAkJYWxsX2Rl YWQgPSBmYWxzZTsKLQlib29sCQlmb3VuZDsKLQotCWZvdW5kID0gdGFibGVfaW5kZXhfZmV0Y2hf dHVwbGUoc2Nhbi0+eHNfaGVhcGZldGNoLCAmc2Nhbi0+eHNfaGVhcHRpZCwKLQkJCQkJCQkJCXNj YW4tPnhzX3NuYXBzaG90LCBzbG90LAotCQkJCQkJCQkJJnNjYW4tPnhzX2hlYXBfY29udGludWUs ICZhbGxfZGVhZCk7Ci0KLQlpZiAoZm91bmQpCi0JCXBnc3RhdF9jb3VudF9oZWFwX2ZldGNoKHNj YW4tPmluZGV4UmVsYXRpb24pOwotCi0JLyoKLQkgKiBJZiB3ZSBzY2FubmVkIGEgd2hvbGUgSE9U IGNoYWluIGFuZCBmb3VuZCBvbmx5IGRlYWQgdHVwbGVzLCB0ZWxsIGluZGV4Ci0JICogQU0gdG8g a2lsbCBpdHMgZW50cnkgZm9yIHRoYXQgVElEICh0aGlzIHdpbGwgdGFrZSBlZmZlY3QgaW4gdGhl IG5leHQKLQkgKiBhbWdldHR1cGxlIGNhbGwsIGluIGluZGV4X2dldG5leHRfdGlkKS4gIFdlIGRv IG5vdCBkbyB0aGlzIHdoZW4gaW4KLQkgKiByZWNvdmVyeSBiZWNhdXNlIGl0IG1heSB2aW9sYXRl IE1WQ0MgdG8gZG8gc28uICBTZWUgY29tbWVudHMgaW4KLQkgKiBSZWxhdGlvbkdldEluZGV4U2Nh bigpLgotCSAqLwotCWlmICghc2Nhbi0+eGFjdFN0YXJ0ZWRJblJlY292ZXJ5KQotCQlzY2FuLT5r aWxsX3ByaW9yX3R1cGxlID0gYWxsX2RlYWQ7Ci0KLQlyZXR1cm4gZm91bmQ7Ci19Ci0KLS8qIC0t LS0tLS0tLS0tLS0tLS0KLSAqCQlpbmRleF9nZXRuZXh0X3Nsb3QgLSBnZXQgdGhlIG5leHQgdHVw bGUgZnJvbSBhIHNjYW4KLSAqCi0gKiBUaGUgcmVzdWx0IGlzIHRydWUgaWYgYSB0dXBsZSBzYXRp c2Z5aW5nIHRoZSBzY2FuIGtleXMgYW5kIHRoZSBzbmFwc2hvdCB3YXMKLSAqIGZvdW5kLCBmYWxz ZSBvdGhlcndpc2UuICBUaGUgdHVwbGUgaXMgc3RvcmVkIGluIHRoZSBzcGVjaWZpZWQgc2xvdC4K LSAqCi0gKiBPbiBzdWNjZXNzLCByZXNvdXJjZXMgKGxpa2UgYnVmZmVyIHBpbnMpIGFyZSBsaWtl bHkgdG8gYmUgaGVsZCwgYW5kIHdpbGwgYmUKLSAqIGRyb3BwZWQgYnkgYSBmdXR1cmUgaW5kZXhf Z2V0bmV4dF90aWQsIGluZGV4X2ZldGNoX2hlYXAgb3IgaW5kZXhfZW5kc2NhbgotICogY2FsbCku Ci0gKgotICogTm90ZTogY2FsbGVyIG11c3QgY2hlY2sgc2Nhbi0+eHNfcmVjaGVjaywgYW5kIHBl cmZvcm0gcmVjaGVja2luZyBvZiB0aGUKLSAqIHNjYW4ga2V5cyBpZiByZXF1aXJlZC4gIFdlIGRv IG5vdCBkbyB0aGF0IGhlcmUgYmVjYXVzZSB3ZSBkb24ndCBoYXZlCi0gKiBlbm91Z2ggaW5mb3Jt YXRpb24gdG8gZG8gaXQgZWZmaWNpZW50bHkgaW4gdGhlIGdlbmVyYWwgY2FzZS4KLSAqIC0tLS0t LS0tLS0tLS0tLS0KLSAqLwotYm9vbAotaW5kZXhfZ2V0bmV4dF9zbG90KEluZGV4U2NhbkRlc2Mg c2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sIFR1cGxlVGFibGVTbG90ICpzbG90KQotewot CWZvciAoOzspCi0JewotCQlpZiAoIXNjYW4tPnhzX2hlYXBfY29udGludWUpCi0JCXsKLQkJCUl0 ZW1Qb2ludGVyIHRpZDsKLQotCQkJLyogVGltZSB0byBmZXRjaCB0aGUgbmV4dCBUSUQgZnJvbSB0 aGUgaW5kZXggKi8KLQkJCXRpZCA9IGluZGV4X2dldG5leHRfdGlkKHNjYW4sIGRpcmVjdGlvbik7 Ci0KLQkJCS8qIElmIHdlJ3JlIG91dCBvZiBpbmRleCBlbnRyaWVzLCB3ZSdyZSBkb25lICovCi0J CQlpZiAodGlkID09IE5VTEwpCi0JCQkJYnJlYWs7Ci0KLQkJCUFzc2VydChJdGVtUG9pbnRlckVx dWFscyh0aWQsICZzY2FuLT54c19oZWFwdGlkKSk7Ci0JCX0KLQotCQkvKgotCQkgKiBGZXRjaCB0 aGUgbmV4dCAob3Igb25seSkgdmlzaWJsZSBoZWFwIHR1cGxlIGZvciB0aGlzIGluZGV4IGVudHJ5 LgotCQkgKiBJZiB3ZSBkb24ndCBmaW5kIGFueXRoaW5nLCBsb29wIGFyb3VuZCBhbmQgZ3JhYiB0 aGUgbmV4dCBUSUQgZnJvbQotCQkgKiB0aGUgaW5kZXguCi0JCSAqLwotCQlBc3NlcnQoSXRlbVBv aW50ZXJJc1ZhbGlkKCZzY2FuLT54c19oZWFwdGlkKSk7Ci0JCWlmIChpbmRleF9mZXRjaF9oZWFw KHNjYW4sIHNsb3QpKQotCQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JcmV0dXJuIGZhbHNlOwotfQot CiAvKiAtLS0tLS0tLS0tLS0tLS0tCiAgKgkJaW5kZXhfZ2V0Yml0bWFwIC0gZ2V0IGFsbCB0dXBs ZXMgYXQgb25jZSBmcm9tIGFuIGluZGV4IHNjYW4KICAqCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvaW5kZXgvaW5kZXhiYXRjaC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2lu ZGV4YmF0Y2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAuLmYzODE0YWM4 YgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGJhdGNo LmMKQEAgLTAsMCArMSw2ODMgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGluZGV4YmF0 Y2guYworICoJICBhbWdldGJhdGNoIGltcGxlbWVudGF0aW9uIHJvdXRpbmVzCisgKgorICogUG9y dGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3Bt ZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhl IFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJ ICBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhiYXRjaC5jCisgKgorICogSU5URVJGQUNF IFJPVVRJTkVTCisgKgkJaW5kZXhfYmF0Y2hfaW5pdCAtIEluaXRpYWxpemUgZmllbGRzIG5lZWRl ZCBieSBiYXRjaGluZworICoJCWluZGV4X2JhdGNoX3Jlc2V0IC0gcmVzZXQgYSBiYXRjaAorICoJ CWluZGV4X2JhdGNoX21hcmtfcG9zIC0gc2V0IGEgbWFyayBmcm9tIGN1cnJlbnQgYmF0Y2ggcG9z aXRpb24KKyAqCQlpbmRleF9iYXRjaF9yZXN0b3JlX3BvcyAtIHJlc3RvcmUgbWFyayB0byBjdXJy ZW50IGJhdGNoIHBvc2l0aW9uCisgKgkJaW5kZXhfYmF0Y2hfa2lsbF9pdGVtIC0gcmVjb3JkIGRl YWQgaW5kZXggdHVwbGUKKyAqCQlpbmRleF9iYXRjaF9lbmQgLSBlbmQgYmF0Y2gKKyAqCisgKgkJ aW5kZXhhbV91dGlsX2JhdGNoX3VubG9jayAtIHVubG9jayBiYXRjaCdzIGJ1ZmZlciBsb2NrCisg KgkJaW5kZXhhbV91dGlsX2JhdGNoX2FsbG9jIC0gYWxsb2NhdGUgYW5vdGhlciBiYXRjaAorICoJ CWluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlIC0gcmVsZWFzZSBhbGxvY2F0ZWQgYmF0Y2gKKyAq CisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2lu Y2x1ZGUgImFjY2Vzcy9hbWFwaS5oIgorI2luY2x1ZGUgImFjY2Vzcy90YWJsZWFtLmgiCisjaW5j bHVkZSAib3B0aW1pemVyL2Nvc3QuaCIKKyNpbmNsdWRlICJwZ3N0YXQuaCIKKyNpbmNsdWRlICJ1 dGlscy9tZW1kZWJ1Zy5oIgorCisvKiBiYXRjaCBkZWJ1ZyBmdW5jdGlvbnMgKi8KK3N0YXRpYyB2 b2lkIGJhdGNoX2Fzc2VydF9iYXRjaGVzX3ZhbGlkKEluZGV4U2NhbkRlc2Mgc2Nhbik7CitzdGF0 aWMgdm9pZCBiYXRjaF9kZWJ1Z19wcmludF9iYXRjaGVzKGNvbnN0IGNoYXIgKmxhYmVsLCBJbmRl eFNjYW5EZXNjIHNjYW4pOworCisvKgorICogaW5kZXhfYmF0Y2hfaW5pdAorICoJCUluaXRpYWxp emUgdmFyaW91cyBmaWVsZHMgYW5kIGFycmF5cyBuZWVkZWQgYnkgYmF0Y2hpbmcuCisgKgorICog U2V0cyB1cCB0aGUgYmF0Y2ggcXVldWUgc3RydWN0dXJlIGFuZCBpdHMgaW5pdGlhbCByZWFkIHBv c2l0aW9uLiAgQWxzbworICogZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBzY2FuIHdpbGwgZWFnZXJs eSBkcm9wIGluZGV4IHBhZ2UgcGlucy4gIEl0IGlzbid0CisgKiBzYWZlIHRvIGRyb3AgaW5kZXgg cGFnZSBwaW5zIGVhZ2VybHkgd2hlbiBkb2luZyBzbyByaXNrcyBicmVha2luZyBhbgorICogYXNz dW1wdGlvbiAoYWJvdXQgdGFibGUgVElEIHJlY3ljbGluZykgdGhhdCBhbWZyZWViYXRjaCByb3V0 aW5lcyBtYWtlIHdoZW4KKyAqIHNldHRpbmcgTFBfREVBRCBiaXRzIGZvciBrbm93bi1kZWFkIGlu ZGV4IHR1cGxlcy4gIFNwZWNpZmljYWxseSwgYnVmZmVyCisgKiBwaW5zIG9uIGluZGV4IHBhZ2Vz IHNlcnZlIGFzIGludGVybG9ja3MgcHJldmVudGluZyBWQUNVVU0gZnJvbSByZWN5Y2xpbmcKKyAq IFRJRHMgb24gdGhvc2UgcGFnZXMsIHByb3RlY3RpbmcgdGhlIHRhYmxlIEFNIGZyb20gY29uZnVz aW5nIGEgcmVjeWNsZWQgVElECisgKiB3aXRoIHRoZSBvcmlnaW5hbCByb3cgaXQgbWVhbnQgdG8g cmVmZXJlbmNlLgorICovCit2b2lkCitpbmRleF9iYXRjaF9pbml0KEluZGV4U2NhbkRlc2Mgc2Nh bikKK3sKKwkvKiBCb3RoIGFtZ2V0YmF0Y2ggYW5kIGFtZnJlZWJhdGNoIG11c3QgYmUgcHJlc2Vu dCB0b2dldGhlciAqLworCUFzc2VydChzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1n ZXRiYXRjaCAhPSBOVUxMKTsKKwlBc3NlcnQoc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0t PmFtZnJlZWJhdGNoICE9IE5VTEwpOworCisJc2Nhbi0+YmF0Y2hxdWV1ZSA9IHBhbGxvYyhzaXpl b2YoQmF0Y2hRdWV1ZSkpOworCisJLyoKKwkgKiBXZSBwcmVmZXIgdG8gZWFnZXJseSBkcm9wIGxl YWYgcGFnZSBwaW5zIGJlZm9yZSBhbWdldGJhdGNoIHJldHVybnMuCisJICogVGhpcyBhdm9pZHMg bWFraW5nIFZBQ1VVTSB3YWl0IHRvIGFjcXVpcmUgYSBjbGVhbnVwIGxvY2sgb24gdGhlIHBhZ2Uu CisJICoKKwkgKiBXZSBjYW5ub3Qgc2FmZWx5IGRyb3AgbGVhZiBwYWdlIHBpbnMgZHVyaW5nIGlu ZGV4LW9ubHkgc2NhbnMgZHVlIHRvIGEKKwkgKiByYWNlIGNvbmRpdGlvbiBpbnZvbHZpbmcgVkFD VVVNIHNldHRpbmcgcGFnZXMgYWxsLXZpc2libGUgaW4gdGhlIFZNLgorCSAqIEl0J3MgYWxzbyB1 bnNhZmUgZm9yIHBsYWluIGluZGV4IHNjYW5zIHRoYXQgdXNlIGEgbm9uLU1WQ0Mgc25hcHNob3Qu CisJICoKKwkgKiBXaGVuIHdlIGRyb3AgcGlucyBlYWdlcmx5LCB0aGUgbWVjaGFuaXNtIHRoYXQg bWFya3MgaW5kZXggdHVwbGVzIGFzCisJICogTFBfREVBRCBoYXMgdG8gZGVhbCB3aXRoIGNvbmN1 cnJlbnQgVElEIHJlY3ljbGluZyByYWNlcy4gIFRoZSBzY2hlbWUKKwkgKiB1c2VkIHRvIGRldGVj dCB1bnNhZmUgVElEIHJlY3ljbGluZyB3b24ndCB3b3JrIHdoZW4gc2Nhbm5pbmcgdW5sb2dnZWQK KwkgKiByZWxhdGlvbnMgKHNpbmNlIGl0IGludm9sdmVzIHNhdmluZyBhbiBhZmZlY3RlZCBwYWdl J3MgTFNOKS4gIE9wdCBvdXQKKwkgKiBvZiBlYWdlciBwaW4gZHJvcHBpbmcgZHVyaW5nIHVubG9n Z2VkIHJlbGF0aW9uIHNjYW5zIGZvciBub3cuCisJICovCisJc2Nhbi0+YmF0Y2hxdWV1ZS0+ZHJv cFBpbiA9CisJCSghc2Nhbi0+eHNfd2FudF9pdHVwICYmIElzTVZDQ1NuYXBzaG90KHNjYW4tPnhz X3NuYXBzaG90KSAmJgorCQkgUmVsYXRpb25OZWVkc1dBTChzY2FuLT5pbmRleFJlbGF0aW9uKSk7 CisJc2Nhbi0+YmF0Y2hxdWV1ZS0+ZmluaXNoZWQgPSBmYWxzZTsKKwlzY2FuLT5iYXRjaHF1ZXVl LT5kaXJlY3Rpb24gPSBOb01vdmVtZW50U2NhbkRpcmVjdGlvbjsKKworCS8qIHBvc2l0aW9ucyBp biB0aGUgcXVldWUgb2YgYmF0Y2hlcyAqLworCWJhdGNoX3Jlc2V0X3Bvcygmc2Nhbi0+YmF0Y2hx dWV1ZS0+cmVhZFBvcyk7CisJYmF0Y2hfcmVzZXRfcG9zKCZzY2FuLT5iYXRjaHF1ZXVlLT5tYXJr UG9zKTsKKworCXNjYW4tPmJhdGNocXVldWUtPm1hcmtCYXRjaCA9IE5VTEw7CisJc2Nhbi0+YmF0 Y2hxdWV1ZS0+bWF4QmF0Y2hlcyA9IElOREVYX1NDQU5fTUFYX0JBVENIRVM7CisJc2Nhbi0+YmF0 Y2hxdWV1ZS0+aGVhZEJhdGNoID0gMDsJLyogaW5pdGlhbCBoZWFkIGJhdGNoICovCisJc2Nhbi0+ YmF0Y2hxdWV1ZS0+bmV4dEJhdGNoID0gMDsJLyogaW5pdGlhbCBiYXRjaCBzdGFydHMgZW1wdHkg Ki8KKwltZW1zZXQoJnNjYW4tPmJhdGNocXVldWUtPmNhY2hlLCAwLAorCQkgICBzaXplb2Yoc2Nh bi0+YmF0Y2hxdWV1ZS0+Y2FjaGUpKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLQorICoJCWJh dGNoX2dldG5leHQgLSBnZXQgdGhlIG5leHQgYmF0Y2ggb2YgVElEcyBmcm9tIGEgc2NhbgorICoK KyAqIENhbGxlZCBieSB0YWJsZSBBTSdzIG9yZGVyZWQgaW5kZXggc2NhbiBpbXBsZW1lbnRhdGlv biB3aGVuIGl0IG5lZWRzIHRvCisgKiBsb2FkIHRoZSBuZXh0IGJhdGNoIG9mIGluZGV4IGVudHJp ZXMgdG8gcHJvY2VzcyBpbiB0aGUgZ2l2ZW4gZGlyZWN0aW9uLgorICoKKyAqIFRoZSB0YWJsZSBB TSBjb250cm9scyB0aGUgb3ZlcmFsbCBwcm9ncmVzcyBvZiB0aGUgc2NhbiwgZGVjaWRpbmcgd2hl biB0bworICogcmVxdWVzdCBuZXcgYmF0Y2hlcy4gIFRoaXMgZGl2aXNpb24gb2YgbGFib3IgZ2l2 ZXMgdGhlIHRhYmxlIEFNIHRoZSBhYmlsaXR5CisgKiB0byByZW9yZGVyIGZldGNoZXMgb2YgbmVh cmJ5IHRhYmxlIHR1cGxlcyAoZnJvbSB0aGUgc2FtZSBiYXRjaCwgb3IgZnJvbQorICogYWRqYWNl bnQgYmF0Y2hlcykgYmFzZWQgb24gaXRzIG93biBjb25zaWRlcmF0aW9ucy4gIEltcG9ydGFudGx5 LCB0YWJsZSBBTXMKKyAqIGFyZSBfbm90XyByZXF1aXJlZCB0byBmcmVlIGEgYmF0Y2ggYmVmb3Jl IGxvYWRpbmcgdGhlIG5leHQgYmF0Y2ggZHVyaW5nIGFuCisgKiBpbmRleCBzY2FuIG9mIGFuIGlu ZGV4IHRoYXQgdXNlcyB0aGUgYW1nZXRiYXRjaC9hbWZyZWViYXRjaCBpbnRlcmZhY2UuCisgKiAo VGhpcyBpc24ndCBwb3NzaWJsZSB3aXRoIHRoZSBzaW5nbGUtdHVwbGUgYW1nZXR0dXBsZSBpbnRl cmZhY2UsIHdoaWNoIGdpdmVzCisgKiB0aGUgaW5kZXggQU0gZGlyZWN0IGNvbnRyb2wgb3ZlciB0 aGUgcHJvZ3Jlc3Mgb2YgdGhlIGluZGV4IHNjYW4uICBhbWdldHR1cGxlCisgKiBpbmRleCBzY2Fu cyBwZXJmb3JtIHRoZSB3b3JrIHRoYXQgd2UgcGVyZm9ybSBpbiBiYXRjaF9mcmVlIGFzIHRoZSBz Y2FuCisgKiBwcm9ncmVzc2VzLCBhbmQgd2l0aG91dCBub3RpZnlpbmcgdGhlIHRhYmxlIEFNLCB3 aGljaCBtYWtlcyBpdCBpbXBvc3NpYmxlCisgKiB0byBzYWZlbHkgcmVvcmRlciB3b3JrIGluIHRo ZSB3YXkgdGhhdCBvdXIgY2FsbGVycyBjYW4uKQorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB3ZSBt YW5hZ2VkIHRvIHJlYWQgYSBiYXRjaCBvZiBUSURzLCBvciBmYWxzZSBpZiB0aGVyZSBhcmUKKyAq IG5vIG1vcmUgYmF0Y2hlcyBpbiB0aGUgZ2l2ZW4gc2NhbiBkaXJlY3Rpb24uCisgKiAtLS0tLS0t LS0tLS0tLS0tCisgKi8KK2Jvb2wKK2JhdGNoX2dldG5leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBT Y2FuRGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwlCYXRjaFF1ZXVlICpiYXRjaHF1ZXVlID0gc2Nh bi0+YmF0Y2hxdWV1ZTsKKwlCYXRjaEluZGV4U2NhbiBwcmlvcmJhdGNoID0gTlVMTCwKKwkJCQli YXRjaCA9IE5VTEw7CisKKwkvKiBYWFg6IHdlIHNob3VsZCBhc3NlcnQgdGhhdCBhIHNuYXBzaG90 IGlzIHB1c2hlZCBvciByZWdpc3RlcmVkICovCisJQXNzZXJ0KFRyYW5zYWN0aW9uSWRJc1ZhbGlk KFJlY2VudFhtaW4pKTsKKworCS8qIERpZCB3ZSBhbHJlYWR5IHJlYWQgdGhlIGxhc3QgYmF0Y2gg Zm9yIHRoaXMgc2Nhbj8gKi8KKwlpZiAoYmF0Y2hxdWV1ZS0+ZmluaXNoZWQpCisJCXJldHVybiBm YWxzZTsKKworCUFzc2VydCghSU5ERVhfU0NBTl9CQVRDSF9GVUxMKHNjYW4pKTsKKworCWJhdGNo X2RlYnVnX3ByaW50X2JhdGNoZXMoImJhdGNoX2dldG5leHQgLyBzdGFydCIsIHNjYW4pOworCisJ LyoKKwkgKiBHZXQgdGhlIHByZXZpb3VzbHkgcmV0dXJuZWQgYmF0Y2ggdG8gcGFzcyB0byBhbWdl dGJhdGNoLiAgVGhlIGluZGV4IEFNCisJICogdXNlcyB0aGlzIHRvIGRldGVybWluZSB3aGljaCBp bmRleCBwYWdlIHRvIHJlYWQgbmV4dCwgdHlwaWNhbGx5IGJ5CisJICogZm9sbG93aW5nIHBhZ2Ug bGlua3MgZm9yd2FyZCBvciBiYWNrd2FyZC4KKwkgKi8KKwlpZiAoYmF0Y2hxdWV1ZS0+aGVhZEJh dGNoIDwgYmF0Y2hxdWV1ZS0+bmV4dEJhdGNoKQorCQlwcmlvcmJhdGNoID0gSU5ERVhfU0NBTl9C QVRDSChzY2FuLCBiYXRjaHF1ZXVlLT5uZXh0QmF0Y2ggLSAxKTsKKworCWJhdGNoID0gc2Nhbi0+ aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtZ2V0YmF0Y2goc2NhbiwgcHJpb3JiYXRjaCwKKwkJ CQkJCQkJCQkJCQkgIGRpcmVjdGlvbik7CisJaWYgKGJhdGNoICE9IE5VTEwpCisJeworCQkvKiBX ZSBnb3QgdGhlIGJhdGNoIGZyb20gdGhlIEFNIC0tIGFkZCBpdCB0byBvdXIgcXVldWUgKi8KKwkJ aW50CQkJYmF0Y2hJbmRleCA9IGJhdGNocXVldWUtPm5leHRCYXRjaDsKKworCQlJTkRFWF9TQ0FO X0JBVENIKHNjYW4sIGJhdGNoSW5kZXgpID0gYmF0Y2g7CisKKwkJYmF0Y2hxdWV1ZS0+bmV4dEJh dGNoKys7CisKKwkJREVCVUdfTE9HKCJiYXRjaF9nZXRuZXh0IGhlYWRCYXRjaCAlZCBuZXh0QmF0 Y2ggJWQgYmF0Y2ggJXAiLAorCQkJCSAgYmF0Y2hxdWV1ZS0+aGVhZEJhdGNoLCBiYXRjaHF1ZXVl LT5uZXh0QmF0Y2gsIGJhdGNoKTsKKwl9CisJZWxzZQorCQliYXRjaHF1ZXVlLT5maW5pc2hlZCA9 IHRydWU7CisKKwliYXRjaF9hc3NlcnRfYmF0Y2hlc192YWxpZChzY2FuKTsKKworCWJhdGNoX2Rl YnVnX3ByaW50X2JhdGNoZXMoImJhdGNoX2dldG5leHQgLyBlbmQiLCBzY2FuKTsKKworCXJldHVy biAoYmF0Y2ggIT0gTlVMTCk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0KKyAqCQlpbmRleF9i YXRjaF9yZXNldCAtIHJlc2V0IGJhdGNoIHF1ZXVlIGFuZCByZWFkIHBvc2l0aW9uCisgKgorICog UmVzZXRzIGFsbCBsb2FkZWQgYmF0Y2hlcyBpbiB0aGUgcXVldWUsIGFuZCByZXNldHMgdGhlIHJl YWQgcG9zaXRpb24gdG8gdGhlCisgKiBpbml0aWFsIHN0YXRlIChvciBqdXN0IGluaXRpYWxpemUg cXVldWUgc3RhdGUpLiAgV2hlbiAnY29tcGxldGUnIGlzIHRydWUsCisgKiBhbHNvIGZyZWVzIHRo ZSBzY2FuJ3MgbWFya2VkIGJhdGNoIChpZiBhbnkpLCB3aGljaCBpcyB1c2VmdWwgd2hlbiBlbmRp bmcgYW4KKyAqIGFtZ2V0YmF0Y2gtYmFzZWQgaW5kZXggc2Nhbi4KKyAqIC0tLS0tLS0tLS0tLS0t LS0KKyAqLwordm9pZAoraW5kZXhfYmF0Y2hfcmVzZXQoSW5kZXhTY2FuRGVzYyBzY2FuLCBib29s IGNvbXBsZXRlKQoreworCUJhdGNoUXVldWUgKmJhdGNocXVldWUgPSBzY2FuLT5iYXRjaHF1ZXVl OworCisJLyogYmFpbCBvdXQgaWYgYmF0Y2hpbmcgbm90IGVuYWJsZWQgKi8KKwlpZiAoIWJhdGNo cXVldWUpCisJCXJldHVybjsKKworCWJhdGNoX2Fzc2VydF9iYXRjaGVzX3ZhbGlkKHNjYW4pOwor CWJhdGNoX2RlYnVnX3ByaW50X2JhdGNoZXMoImluZGV4X2JhdGNoX3Jlc2V0Iiwgc2Nhbik7CisJ QXNzZXJ0KHNjYW4tPnhzX2hlYXBmZXRjaCk7CisKKwkvKiByZXNldCB0aGUgcG9zaXRpb25zICov CisJYmF0Y2hfcmVzZXRfcG9zKCZiYXRjaHF1ZXVlLT5yZWFkUG9zKTsKKworCS8qCisJICogV2l0 aCAiY29tcGxldGUiIHJlc2V0LCBtYWtlIHN1cmUgdG8gYWxzbyBmcmVlIHRoZSBtYXJrZWQgYmF0 Y2gsIGVpdGhlcgorCSAqIGJ5IGp1c3QgZm9yZ2V0dGluZyBpdCAoaWYgaXQncyBzdGlsbCBpbiB0 aGUgcXVldWUpLCBvciBieSBleHBsaWNpdGx5CisJICogZnJlZWluZyBpdC4KKwkgKi8KKwlpZiAo Y29tcGxldGUgJiYgdW5saWtlbHkoYmF0Y2hxdWV1ZS0+bWFya0JhdGNoICE9IE5VTEwpKQorCXsK KwkJQmF0Y2hRdWV1ZUl0ZW1Qb3MgKm1hcmtQb3MgPSAmYmF0Y2hxdWV1ZS0+bWFya1BvczsKKwkJ QmF0Y2hJbmRleFNjYW4gbWFya0JhdGNoID0gYmF0Y2hxdWV1ZS0+bWFya0JhdGNoOworCisJCS8q IGFsd2F5cyByZXNldCB0aGUgcG9zaXRpb24sIGZvcmdldCB0aGUgbWFya2VkIGJhdGNoICovCisJ CWJhdGNocXVldWUtPm1hcmtCYXRjaCA9IE5VTEw7CisKKwkJLyoKKwkJICogSWYgd2UndmUgYWxy ZWFkeSBtb3ZlZCBwYXN0IHRoZSBtYXJrZWQgYmF0Y2ggKGl0J3Mgbm90IGluIHRoZQorCQkgKiBj dXJyZW50IHF1ZXVlKSwgZnJlZSBpdCBleHBsaWNpdGx5LiBPdGhlcndpc2UgaXQnbGwgYmUgaW4g dGhlIGZyZWVkCisJCSAqIGxhdGVyLgorCQkgKi8KKwkJaWYgKG1hcmtQb3MtPmJhdGNoIDwgYmF0 Y2hxdWV1ZS0+aGVhZEJhdGNoIHx8CisJCQltYXJrUG9zLT5iYXRjaCA+PSBiYXRjaHF1ZXVlLT5u ZXh0QmF0Y2gpCisJCQliYXRjaF9mcmVlKHNjYW4sIG1hcmtCYXRjaCk7CisKKwkJLyogcmVzZXQg cG9zaXRpb24gb25seSBhZnRlciB0aGUgcXVldWUgcmFuZ2UgY2hlY2sgKi8KKwkJYmF0Y2hfcmVz ZXRfcG9zKCZiYXRjaHF1ZXVlLT5tYXJrUG9zKTsKKwl9CisKKwkvKiBub3cgcmVsZWFzZSBhbGwg b3RoZXIgY3VycmVudGx5IGxvYWRlZCBiYXRjaGVzICovCisJd2hpbGUgKGJhdGNocXVldWUtPmhl YWRCYXRjaCA8IGJhdGNocXVldWUtPm5leHRCYXRjaCkKKwl7CisJCUJhdGNoSW5kZXhTY2FuIGJh dGNoID0gSU5ERVhfU0NBTl9CQVRDSChzY2FuLCBiYXRjaHF1ZXVlLT5oZWFkQmF0Y2gpOworCisJ CURFQlVHX0xPRygiZnJlZWluZyBiYXRjaCAlZCAlcCIsIGJhdGNocXVldWUtPmhlYWRCYXRjaCwg YmF0Y2gpOworCisJCWJhdGNoX2ZyZWUoc2NhbiwgYmF0Y2gpOworCisJCS8qIHVwZGF0ZSB0aGUg dmFsaWQgcmFuZ2UsIHNvIHRoYXQgYXNzZXJ0cyAvIGRlYnVnZ2luZyB3b3JrcyAqLworCQliYXRj aHF1ZXVlLT5oZWFkQmF0Y2grKzsKKwl9CisKKwkvKiByZXNldCByZWxldmFudCBiYXRjaCBzdGF0 ZSBmaWVsZHMgKi8KKwlBc3NlcnQoYmF0Y2hxdWV1ZS0+bWF4QmF0Y2hlcyA9PSBJTkRFWF9TQ0FO X01BWF9CQVRDSEVTKTsKKwliYXRjaHF1ZXVlLT5oZWFkQmF0Y2ggPSAwOwkvKiBpbml0aWFsIGJh dGNoICovCisJYmF0Y2hxdWV1ZS0+bmV4dEJhdGNoID0gMDsJLyogaW5pdGlhbCBiYXRjaCBpcyBl bXB0eSAqLworCisJYmF0Y2hxdWV1ZS0+ZmluaXNoZWQgPSBmYWxzZTsKKworCWJhdGNoX2Fzc2Vy dF9iYXRjaGVzX3ZhbGlkKHNjYW4pOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tCisgKgkJaW5k ZXhfYmF0Y2hfbWFya19wb3MgLSBtYXJrIGN1cnJlbnQgcG9zaXRpb24gaW4gc2NhbiBmb3IgcmVz dG9yYXRpb24KKyAqCisgKiBTYXZlcyB0aGUgY3VycmVudCByZWFkIHBvc2l0aW9uIGFuZCBhc3Nv Y2lhdGVkIGJhdGNoIHNvIHRoYXQgdGhlIHNjYW4gY2FuCisgKiBiZSByZXN0b3JlZCB0byB0aGlz IHBvaW50IGxhdGVyLCB2aWEgYSBjYWxsIHRvIGluZGV4X2JhdGNoX3Jlc3RvcmVfcG9zLgorICog VGhlIG1hcmtlZCBiYXRjaCBpcyByZXRhaW5lZCBhbmQgbm90IGZyZWVkIHVudGlsIGEgbmV3IG1h cmsgaXMgc2V0IG9yIHRoZQorICogc2NhbiBlbmRzIChvciB1bnRpbCB0aGUgbWFyayBpcyByZXN0 b3JlZCkuCisgKiAtLS0tLS0tLS0tLS0tLS0tCisgKi8KK3ZvaWQKK2luZGV4X2JhdGNoX21hcmtf cG9zKEluZGV4U2NhbkRlc2Mgc2NhbikKK3sKKwlCYXRjaFF1ZXVlICpiYXRjaHF1ZXVlID0gc2Nh bi0+YmF0Y2hxdWV1ZTsKKwlCYXRjaFF1ZXVlSXRlbVBvcyAqbWFya1BvcyA9ICZiYXRjaHF1ZXVl LT5tYXJrUG9zOworCUJhdGNoSW5kZXhTY2FuIG1hcmtCYXRjaCA9IGJhdGNocXVldWUtPm1hcmtC YXRjaDsKKworCS8qCisJICogRnJlZSB0aGUgcHJldmlvdXMgbWFyayBiYXRjaCAoaWYgYW55KSwg YnV0IG9ubHkgaWYgdGhlIGJhdGNoIGlzIG5vCisJICogbG9uZ2VyIHZhbGlkIChpbiB0aGUgY3Vy cmVudCBoZWFkL25leHQgcmFuZ2UpLiAgTm90ZSB0aGF0IHdlIGRvbid0IGhhdmUKKwkgKiB0byBk byB0aGlzIGluIHRoZSBjb21tb24gY2FzZSB3aGVyZSB3ZSBtYXJrIGEgcG9zaXRpb24gdGhhdCBj b21lcyBmcm9tCisJICogb3VyIGN1cnJlbnQgcmVhZEJhdGNoLgorCSAqLworCWlmIChtYXJrQmF0 Y2ggIT0gTlVMTCAmJiAobWFya1Bvcy0+YmF0Y2ggPCBiYXRjaHF1ZXVlLT5oZWFkQmF0Y2ggfHwK KwkJCQkJCQkgIG1hcmtQb3MtPmJhdGNoID49IGJhdGNocXVldWUtPm5leHRCYXRjaCkpCisJewor CQliYXRjaHF1ZXVlLT5tYXJrQmF0Y2ggPSBOVUxMOworCQliYXRjaF9mcmVlKHNjYW4sIG1hcmtC YXRjaCk7CisJfQorCisJLyogY29weSB0aGUgcmVhZCBwb3NpdGlvbiAqLworCWJhdGNocXVldWUt Pm1hcmtQb3MgPSBiYXRjaHF1ZXVlLT5yZWFkUG9zOworCWJhdGNocXVldWUtPm1hcmtCYXRjaCA9 IElOREVYX1NDQU5fQkFUQ0goc2NhbiwgYmF0Y2hxdWV1ZS0+bWFya1Bvcy5iYXRjaCk7CisKKwkv KiByZWFkUG9zL21hcmtQb3MgbXVzdCBiZSB2YWxpZCAqLworCWJhdGNoX2Fzc2VydF9wb3NfdmFs aWQoc2NhbiwgJmJhdGNocXVldWUtPm1hcmtQb3MpOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0t CisgKgkJaW5kZXhfYmF0Y2hfcmVzdG9yZV9wb3MgLSByZXN0b3JlIHNjYW4gdG8gYSBwcmV2aW91 c2x5IG1hcmtlZCBwb3NpdGlvbgorICoKKyAqIFJlc3RvcmVzIHRoZSBzY2FuIHRvIGEgcG9zaXRp b24gcHJldmlvdXNseSBzYXZlZCBieSBpbmRleF9iYXRjaF9tYXJrX3Bvcy4KKyAqIFRoZSBtYXJr ZWQgYmF0Y2ggaXMgcmVzdG9yZWQgYXMgdGhlIGN1cnJlbnQgYmF0Y2gsIGFsbG93aW5nIHRoZSBz Y2FuIHRvCisgKiByZXN1bWUgZnJvbSB0aGUgbWFya2VkIHBvc2l0aW9uLiAgQWxzbyBub3RpZmll cyB0aGUgaW5kZXggQU0gdmlhIGEgY2FsbCB0bworICogaXRzIGFtcG9zcmVzZXQgcm91dGluZSwg d2hpY2ggYWxsb3dzIGl0IHRvIGludmFsaWRhdGUgYW55IHByaXZhdGUgc3RhdGUKKyAqIHRoYXQg aW5kZXBlbmRlbnRseSB0cmFja3Mgc2NhbiBwcm9ncmVzcyAoc3VjaCBhcyBhcnJheSBrZXkgc3Rh dGUpCisgKgorICogRnVuY3Rpb24gY3VycmVudGx5IGp1c3QgZGlzY2FyZHMgbW9zdCBiYXRjaCBx dWV1ZSBzdGF0ZS4gIEl0IG1pZ2h0IG1ha2UKKyAqIHNlbnNlIHRvIHRlYWNoIGl0IHRvIGhvbGQg b24gdG8gb3RoZXIgbmVhcmJ5IGJhdGNoZXMgKHN0aWxsLWhlbGQgYmF0Y2hlcworICogdGhhdCBh cmUgbGlrZWx5IHRvIGJlIG5lZWRlZCBvbmNlIHRoZSBzY2FuIGZpbmlzaGVzIHJldHVybmluZyBt YXRjaGluZworICogaXRlbXMgZnJvbSB0aGUgcmVzdG9yZWQgYmF0Y2gpIGFzIGFuIG9wdGltaXph dGlvbi4gIFN1Y2ggYSBzY2hlbWUgd291bGQKKyAqIGhhdmUgdGhlIGJlbmVmaXQgb2YgYXZvaWRp bmcgcmVwZWF0IGNhbGxzIHRvIGFtZ2V0YmF0Y2gvcmVwZWF0ZWRseSByZWFkaW5nCisgKiB0aGUg c2FtZSBpbmRleCBwYWdlcy4KKyAqIC0tLS0tLS0tLS0tLS0tLS0KKyAqLwordm9pZAoraW5kZXhf YmF0Y2hfcmVzdG9yZV9wb3MoSW5kZXhTY2FuRGVzYyBzY2FuKQoreworCUJhdGNoUXVldWUgKmJh dGNocXVldWUgPSBzY2FuLT5iYXRjaHF1ZXVlOworCUJhdGNoUXVldWVJdGVtUG9zICptYXJrUG9z ID0gJmJhdGNocXVldWUtPm1hcmtQb3M7CisJQmF0Y2hRdWV1ZUl0ZW1Qb3MgKnJlYWRQb3MgPSAm YmF0Y2hxdWV1ZS0+cmVhZFBvczsKKwlCYXRjaEluZGV4U2NhbiBtYXJrQmF0Y2ggPSBiYXRjaHF1 ZXVlLT5tYXJrQmF0Y2g7CisKKwlpZiAocmVhZFBvcy0+YmF0Y2ggPT0gbWFya1Bvcy0+YmF0Y2gg JiYKKwkJcmVhZFBvcy0+YmF0Y2ggPT0gYmF0Y2hxdWV1ZS0+aGVhZEJhdGNoKQorCXsKKwkJLyoK KwkJICogV2UgZG9uJ3QgaGF2ZSB0byBkaXNjYXJkIHRoZSBzY2FuJ3Mgc3RhdGUgYWZ0ZXIgYWxs LCBzaW5jZSB0aGUKKwkJICogY3VycmVudCBoZWFkQmF0Y2ggaXMgYWxzbyB0aGUgYmF0Y2ggdGhh dCB3ZSdyZSByZXN0b3JpbmcgdG8KKwkJICovCisJCXJlYWRQb3MtPml0ZW0gPSBtYXJrUG9zLT5p dGVtOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBDYWxsIGFtcG9zcmVzZXQgdG8gbGV0IGlu ZGV4IEFNIGtub3cgdG8gaW52YWxpZGF0ZSBhbnkgcHJpdmF0ZSBzdGF0ZQorCSAqIHRoYXQgaW5k ZXBlbmRlbnRseSB0cmFja3MgdGhlIHNjYW4ncyBwcm9ncmVzcworCSAqLworCXNjYW4tPmluZGV4 UmVsYXRpb24tPnJkX2luZGFtLT5hbXBvc3Jlc2V0KHNjYW4sIG1hcmtCYXRjaCk7CisKKwkvKgor CSAqIFJlc2V0IHRoZSBiYXRjaGluZyBzdGF0ZSwgZXhjZXB0IGZvciB0aGUgbWFya2VkIGJhdGNo LCBhbmQgbWFrZSBpdCBsb29rCisJICogbGlrZSB3ZSBoYXZlIGEgc2luZ2xlIGJhdGNoIC0tIHRo ZSBtYXJrZWQgb25lLgorCSAqLworCWluZGV4X2JhdGNoX3Jlc2V0KHNjYW4sIGZhbHNlKTsKKwor CWJhdGNocXVldWUtPnJlYWRQb3MgPSAqbWFya1BvczsKKwliYXRjaHF1ZXVlLT5oZWFkQmF0Y2gg PSBtYXJrUG9zLT5iYXRjaDsKKwliYXRjaHF1ZXVlLT5uZXh0QmF0Y2ggPSBtYXJrUG9zLT5iYXRj aCArIDE7CisKKwlJTkRFWF9TQ0FOX0JBVENIKHNjYW4sIGJhdGNocXVldWUtPm1hcmtQb3MuYmF0 Y2gpID0gbWFya0JhdGNoOworCWJhdGNocXVldWUtPm1hcmtCYXRjaCA9IG1hcmtCYXRjaDsKK30K KworLyoKKyAqIGJhdGNoX2ZyZWUKKyAqCQlSZWxlYXNlIHJlc291cmNlcyBhc3NvY2lhdGVkIHdp dGggYSBiYXRjaCByZXR1cm5lZCBieSB0aGUgaW5kZXggQU0uCisgKgorICogQ2FsbGVkIGJ5IHRh YmxlIEFNJ3Mgb3JkZXJlZCBpbmRleCBzY2FuIGltcGxlbWVudGF0aW9uIHdoZW4gaXQgaXMgZmlu aXNoZWQKKyAqIHdpdGggYSBiYXRjaCBhbmQgd2lzaGVzIHRvIHJlbGVhc2UgaXRzIHJlc291cmNl cy4KKyAqCisgKiBUaGlzIGNhbGxzIHRoZSBpbmRleCBBTSdzIGFtZnJlZWJhdGNoIGNhbGxiYWNr IHRvIHJlbGVhc2UgQU0tc3BlY2lmaWMKKyAqIHJlc291cmNlcywgYW5kIHRvIHNldCBMUF9ERUFE IGJpdHMgb24gdGhlIGJhdGNoJ3MgaW5kZXggcGFnZS4gIEl0IGlzbid0CisgKiBzYWZlIGZvciB0 YWJsZSBBTXMgdG8gZmV0Y2ggdGFibGUgdHVwbGVzIHVzaW5nIFRJRHMgc2F2ZWQgZnJvbSBhIGJh dGNoIHRoYXQKKyAqIHdhcyBhbHJlYWR5IGZyZWVkOiAnZHJvcFBpbicgc2NhbnMgbmVlZCB0aGUg aW5kZXggQU0gdG8gcmV0YWluIGEgcGluIG9uIHRoZQorICogVElEJ3MgaW5kZXggcGFnZSwgYXMg YW4gaW50ZXJsb2NrIGFnYWluc3QgY29uY3VycmVudCBUSUQgcmVjeWNsaW5nLgorICovCit2b2lk CitiYXRjaF9mcmVlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmF0Y2hJbmRleFNjYW4gYmF0Y2gpCit7 CisJYmF0Y2hfYXNzZXJ0X2JhdGNoX3ZhbGlkKHNjYW4sIGJhdGNoKTsKKworCS8qIGRvbid0IGZy ZWUgdGhlIGJhdGNoIHRoYXQgaXMgbWFya2VkICovCisJaWYgKGJhdGNoID09IHNjYW4tPmJhdGNo cXVldWUtPm1hcmtCYXRjaCkKKwkJcmV0dXJuOworCisJc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRf aW5kYW0tPmFtZnJlZWJhdGNoKHNjYW4sIGJhdGNoKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0t LQorICoJCWluZGV4X2JhdGNoX2tpbGxfaXRlbSAtIHJlY29yZCBpdGVtIGZvciBkZWZlcnJlZCBM UF9ERUFEIG1hcmtpbmcKKyAqCisgKiBSZWNvcmRzIHRoZSBpdGVtIGluZGV4IG9mIHRoZSBjdXJy ZW50bHktcmVhZCB0dXBsZSBpbiByZWFkQmF0Y2gncworICoga2lsbGVkSXRlbXMgYXJyYXkuIFRo ZSBpdGVtcycgaW5kZXggdHVwbGVzIHdpbGwgbGF0ZXIgYmUgbWFya2VkIExQX0RFQUQKKyAqIHdo ZW4gY3VycmVudCByZWFkQmF0Y2ggaXMgZnJlZWQgYnkgYW1mcmVlYmF0Y2ggcm91dGluZSAoc2Vl IGJhdGNoX2ZyZWUpLgorICogLS0tLS0tLS0tLS0tLS0tLQorICovCit2b2lkCitpbmRleF9iYXRj aF9raWxsX2l0ZW0oSW5kZXhTY2FuRGVzYyBzY2FuKQoreworCUJhdGNoUXVldWVJdGVtUG9zICpy ZWFkUG9zID0gJnNjYW4tPmJhdGNocXVldWUtPnJlYWRQb3M7CisJQmF0Y2hJbmRleFNjYW4gcmVh ZEJhdGNoID0gSU5ERVhfU0NBTl9CQVRDSChzY2FuLCByZWFkUG9zLT5iYXRjaCk7CisKKwliYXRj aF9hc3NlcnRfcG9zX3ZhbGlkKHNjYW4sIHJlYWRQb3MpOworCisJaWYgKHJlYWRCYXRjaC0+a2ls bGVkSXRlbXMgPT0gTlVMTCkKKwkJcmVhZEJhdGNoLT5raWxsZWRJdGVtcyA9IChpbnQgKikKKwkJ CXBhbGxvYyhyZWFkQmF0Y2gtPm1heGl0ZW1zICogc2l6ZW9mKGludCkpOworCWlmIChyZWFkQmF0 Y2gtPm51bUtpbGxlZCA8IHJlYWRCYXRjaC0+bWF4aXRlbXMpCisJCXJlYWRCYXRjaC0+a2lsbGVk SXRlbXNbcmVhZEJhdGNoLT5udW1LaWxsZWQrK10gPSByZWFkUG9zLT5pdGVtOworfQorCisvKiAt LS0tLS0tLS0tLS0tLS0tCisgKgkJaW5kZXhfYmF0Y2hfZW5kIC0gZW5kIGEgYmF0Y2ggc2NhbiBh bmQgZnJlZSBhbGwgcmVzb3VyY2VzCisgKgorICogQ2FsbGVkIHdoZW4gYW4gaW5kZXggc2NhbiBp cyBiZWluZyBlbmRlZCwgcmlnaHQgYmVmb3JlIHRoZSBvd25pbmcgc2NhbgorICogZGVzY3JpcHRv ciBnb2VzIGF3YXkuICBDbGVhbnMgdXAgYWxsIGJhdGNoIHJlbGF0ZWQgcmVzb3VyY2VzLgorICog LS0tLS0tLS0tLS0tLS0tLQorICovCit2b2lkCitpbmRleF9iYXRjaF9lbmQoSW5kZXhTY2FuRGVz YyBzY2FuKQoreworCWluZGV4X2JhdGNoX3Jlc2V0KHNjYW4sIHRydWUpOworCisJLyogYmFpbCBv dXQgd2l0aG91dCBiYXRjaGluZyAqLworCWlmICghc2Nhbi0+YmF0Y2hxdWV1ZSkKKwkJcmV0dXJu OworCisJZm9yIChpbnQgaSA9IDA7IGkgPCBJTkRFWF9TQ0FOX0NBQ0hFX0JBVENIRVM7IGkrKykK Kwl7CisJCWlmIChzY2FuLT5iYXRjaHF1ZXVlLT5jYWNoZVtpXSA9PSBOVUxMKQorCQkJY29udGlu dWU7CisKKwkJcGZyZWUoc2Nhbi0+YmF0Y2hxdWV1ZS0+Y2FjaGVbaV0pOworCX0KKworCXBmcmVl KHNjYW4tPmJhdGNocXVldWUpOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgkJCXV0aWxpdHkgZnVuY3Rp b25zIGNhbGxlZCBieSBhbWdldGJhdGNoIGluZGV4IEFNcworICoKKyAqIFRoZXNlIGZ1bmN0aW9u cyBtYW5hZ2UgYmF0Y2ggYWxsb2NhdGlvbiwgdW5sb2NrL3BpbiBtYW5hZ2VtZW50LCBhbmQgYmF0 Y2gKKyAqIHJlc291cmNlIHJlY3ljbGluZy4gIEluZGV4IEFNcyBpbXBsZW1lbnRpbmcgYW1nZXRi YXRjaCBzaG91bGQgdXNlIHRoZXNlCisgKiByYXRoZXIgdGhhbiBtYW5hZ2luZyBidWZmZXJzIGRp cmVjdGx5LgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKy8qCisgKiBpbmRleGFtX3V0aWxfYmF0Y2hfdW5s b2NrIC0gRHJvcCBsb2NrIGFuZCBjb25kaXRpb25hbGx5IGRyb3AgcGluIG9uIGJhdGNoIHBhZ2UK KyAqCisgKiBVbmxvY2tzIGNhbGxlcidzIGJhdGNoLT5idWYgaW4gcHJlcGFyYXRpb24gZm9yIGFt Z2V0YmF0Y2ggcmV0dXJuaW5nIGl0ZW1zCisgKiBzYXZlZCBpbiB0aGF0IGJhdGNoLiAgTWFuYWdl cyB0aGUgZGV0YWlscyBvZiBkcm9wcGluZyB0aGUgbG9jayBhbmQgcG9zc2libHkKKyAqIHRoZSBw aW4gZm9yIGluZGV4IEFNIGNhbGxlciAoZHJvcHBpbmcgdGhlIHBpbiBwcmV2ZW50cyBWQUNVVU0g ZnJvbSBibG9ja2luZworICogb24gYWNxdWlyaW5nIGEgY2xlYW51cCBsb2NrLCBidXQgaXNuJ3Qg YWx3YXlzIHNhZmUpLgorICoKKyAqIE9ubHkgY2FsbCBoZXJlIHdoZW4gYSBiYXRjaCBoYXMgb25l IG9yIG1vcmUgbWF0Y2hpbmcgaXRlbXMgdG8gcmV0dXJuIHVzaW5nCisgKiBhbWdldGJhdGNoIChv ciBmb3IgYW1nZXRiaXRtYXAgdG8gbG9hZCBpbnRvIGl0cyBiaXRtYXAgb2YgbWF0Y2hpbmcgVElE cykuCisgKiBXaGVuIGFuIGluZGV4IHBhZ2UgaGFzIG5vIG1hdGNoZXMsIGl0J3MgYWx3YXlzIHNh ZmUgZm9yIGluZGV4IEFNcyB0byBkcm9wCisgKiBib3RoIHRoZSBsb2NrIGFuZCB0aGUgcGluIGZv ciB0aGVtc2VsdmVzLgorICoKKyAqIE5vdGU6IEl0IGlzIGNvbnZlbmllbnQgZm9yIGluZGV4IEFN cyB0aGF0IGltcGxlbWVudCBib3RoIGFtZ2V0Yml0bWFwIGFuZAorICogYW1nZXRiaXRtYXAgdG8g Y29uc2lzdGVudGx5IHVzZSB0aGUgc2FtZSBiYXRjaCBtYW5hZ2VtZW50IGFwcHJvYWNoLCBzaW5j ZQorICogdGhhdCBhdm9pZHMgaW50cm9kdWNpbmcgc3BlY2lhbCBjYXNlcyB0byBsb3dlci1sZXZl bCBjb2RlLiAgV2UgYWx3YXlzIGRyb3AKKyAqIGJvdGggdGhlIGxvY2sgYW5kIHRoZSBwaW4gb24g YmF0Y2gncyBwYWdlIG9uIGJlaGFsZiBvZiBhbWdldGJpdG1hcCBjYWxsZXJzLgorICogU3VjaCBh bWdldGJpdG1hcCBjYWxsZXJzIG11c3QgYmUgY2FyZWZ1bCB0byBmcmVlIGFsbCBiYXRjaGVzIHdp dGggbWF0Y2hpbmcKKyAqIGl0ZW1zIG9uY2UgdGhleSdyZSBkb25lIHNhdmluZyB0aGUgbWF0Y2hp bmcgVElEcyAodGhlcmUgd2lsbCBuZXZlciBiZSBhbnkKKyAqIGNhbGxzIHRvIGFtZnJlZWJhdGNo LCBzbyBhbWdldGJpdG1hcCBtdXN0IGNhbGwgaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2UKKyAq IGRpcmVjdGx5LCBpbiBsaWV1IG9mIGEgZGVmZXJyZWQgY2FsbCB0byBhbWZyZWViYXRjaCBmcm9t IGNvcmUgY29kZSkuCisgKi8KK3ZvaWQKK2luZGV4YW1fdXRpbF9iYXRjaF91bmxvY2soSW5kZXhT Y2FuRGVzYyBzY2FuLCBCYXRjaEluZGV4U2NhbiBiYXRjaCkKK3sKKwlSZWxhdGlvbglyZWwgPSBz Y2FuLT5pbmRleFJlbGF0aW9uOworCWJvb2wJCWRyb3BQaW4gPSAhc2Nhbi0+YmF0Y2hxdWV1ZSB8 fCBzY2FuLT5iYXRjaHF1ZXVlLT5kcm9wUGluOworCisJLyogYmF0Y2ggbXVzdCBoYXZlIG9uZSBv ciBtb3JlIG1hdGNoaW5nIGl0ZW1zIHJldHVybmVkIGJ5IGluZGV4IEFNICovCisJQXNzZXJ0KGJh dGNoLT5maXJzdEl0ZW0gPj0gMCAmJiBiYXRjaC0+Zmlyc3RJdGVtIDw9IGJhdGNoLT5sYXN0SXRl bSk7CisKKwlpZiAoIWRyb3BQaW4pCisJeworCQlpZiAoIVJlbGF0aW9uVXNlc0xvY2FsQnVmZmVy cyhyZWwpKQorCQkJVkFMR1JJTkRfTUFLRV9NRU1fTk9BQ0NFU1MoQnVmZmVyR2V0UGFnZShiYXRj aC0+YnVmKSwgQkxDS1NaKTsKKworCQkvKiBKdXN0IGRyb3AgdGhlIGxvY2sgKG5vdCB0aGUgcGlu KSAqLworCQlMb2NrQnVmZmVyKGJhdGNoLT5idWYsIEJVRkZFUl9MT0NLX1VOTE9DSyk7CisJCXJl dHVybjsKKwl9CisKKwlpZiAoc2Nhbi0+YmF0Y2hxdWV1ZSkKKwl7CisJCS8qIGFtZ2V0YmF0Y2gg KG5vdCBhbWdldGJpdG1hcCkgY2FsbGVyICovCisJCUFzc2VydChzY2FuLT5oZWFwUmVsYXRpb24g IT0gTlVMTCk7CisKKwkJLyoKKwkJICogSGF2ZSB0byBzZXQgYmF0Y2gtPmxzbiBzbyB0aGF0IGFt ZnJlZWJhdGNoIGhhcyBhIHdheSB0byBkZXRlY3Qgd2hlbgorCQkgKiBjb25jdXJyZW50IGhlYXAg VElEIHJlY3ljbGluZyBieSBWQUNVVU0gbWlnaHQgaGF2ZSB0YWtlbiBwbGFjZS4KKwkJICogSXQn bGwgb25seSBiZSBzYWZlIHRvIHNldCBhbnkgaW5kZXggdHVwbGUgTFBfREVBRCBiaXRzIHdoZW4g dGhlCisJCSAqIHBhZ2UgTFNOIGhhc24ndCBhZHZhbmNlZC4KKwkJICovCisJCUFzc2VydChSZWxh dGlvbk5lZWRzV0FMKHJlbCkpOworCQliYXRjaC0+bHNuID0gQnVmZmVyR2V0TFNOQXRvbWljKGJh dGNoLT5idWYpOworCX0KKworCS8qIERyb3AgYm90aCB0aGUgbG9jayBhbmQgdGhlIHBpbiAqLwor CUxvY2tCdWZmZXIoYmF0Y2gtPmJ1ZiwgQlVGRkVSX0xPQ0tfVU5MT0NLKTsKKwlpZiAoIVJlbGF0 aW9uVXNlc0xvY2FsQnVmZmVycyhyZWwpKQorCQlWQUxHUklORF9NQUtFX01FTV9OT0FDQ0VTUyhC dWZmZXJHZXRQYWdlKGJhdGNoLT5idWYpLCBCTENLU1opOworCVJlbGVhc2VCdWZmZXIoYmF0Y2gt PmJ1Zik7CisJYmF0Y2gtPmJ1ZiA9IEludmFsaWRCdWZmZXI7IC8qIGRlZmVuc2l2ZSAqLworfQor CisvKgorICogaW5kZXhhbV91dGlsX2JhdGNoX2FsbG9jCisgKgkJQWxsb2NhdGUgYSBiYXRjaCB0 aGF0IGNhbiBmaXQgbWF4aXRlbXMtbWFueSBCYXRjaE1hdGNoaW5nSXRlbXMuCisgKgorICogUmV0 dXJucyBhIEJhdGNoSW5kZXhTY2FuIHNpemVkIHRvIGNhbGxlcidzIHJlcXVpcmVkIG1heGl0ZW1z IGNhcGFjaXR5LgorICogVGhpcyB3aWxsIGVpdGhlciBiZSBhIG5ld2x5IGFsbG9jYXRlZCBiYXRj aCwgb3IgYSBiYXRjaCByZXVzZWQgZnJvbSBhIGNhY2hlCisgKiBvZiBiYXRjaGVzIGFscmVhZHkg ZnJlZWQgYnkgY2FsbGluZyBpbmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFzZS4gIFNlZQorICogY29t bWVudHMgYWJvdmUgaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2UuCisgKgorICogV2UgYXNzdW1l IHRoYXQgYWxsIGNhbGxzIGhlcmUgZHVyaW5nIHRoZSBzYW1lIGluZGV4IHNjYW4gd2lsbCBhbHdh eXMgdXNlCisgKiB0aGUgc2FtZSBtYXhpdGVtcyBhbmQgd2FudF9pdHVwIGFyZ3VtZW50cy4gIElu ZGV4IEFNcyB0aGF0IHVzZSBiYXRjaGVzCisgKiBzaG91bGQgY2FsbCB0aGlzIGZyb20gZWl0aGVy IHRoZWlyIGFtZ2V0YmF0Y2ggb3IgYW1nZXRiaXRtYXAgcm91dGluZXMuCisgKiBUaGV5IG11c3Qg bm90IGNhbGwgaGVyZSBmcm9tIG90aGVyIHJvdXRpbmVzIChwYXJ0aWN1bGFybHkgbm90IGFtZnJl ZWJhdGNoKS4KKyAqLworQmF0Y2hJbmRleFNjYW4KK2luZGV4YW1fdXRpbF9iYXRjaF9hbGxvYyhJ bmRleFNjYW5EZXNjIHNjYW4sIGludCBtYXhpdGVtcywgYm9vbCB3YW50X2l0dXApCit7CisJQmF0 Y2hJbmRleFNjYW4gYmF0Y2ggPSBOVUxMOworCisJLyogRmlyc3QgbG9vayBmb3IgYW4gZXhpc3Rp bmcgYmF0Y2ggZnJvbSBxdWV1ZSdzIGNhY2hlIG9mIGJhdGNoZXMgKi8KKwlpZiAoc2Nhbi0+YmF0 Y2hxdWV1ZSAhPSBOVUxMKQorCXsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBJTkRFWF9TQ0FOX0NB Q0hFX0JBVENIRVM7IGkrKykKKwkJeworCQkJaWYgKHNjYW4tPmJhdGNocXVldWUtPmNhY2hlW2ld ICE9IE5VTEwpCisJCQl7CisJCQkJLyogUmV0dXJuIGNhY2hlZCB1bnJlZmVyZW5jZWQgYmF0Y2gg Ki8KKwkJCQliYXRjaCA9IHNjYW4tPmJhdGNocXVldWUtPmNhY2hlW2ldOworCQkJCXNjYW4tPmJh dGNocXVldWUtPmNhY2hlW2ldID0gTlVMTDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKwor CWlmICghYmF0Y2gpCisJeworCQliYXRjaCA9IHBhbGxvYyhvZmZzZXRvZihCYXRjaEluZGV4U2Nh bkRhdGEsIGl0ZW1zKSArCisJCQkJCSAgIHNpemVvZihCYXRjaE1hdGNoaW5nSXRlbSkgKiBtYXhp dGVtcyk7CisKKwkJYmF0Y2gtPm1heGl0ZW1zID0gbWF4aXRlbXM7CisKKwkJLyoKKwkJICogSWYg d2UgYXJlIGRvaW5nIGFuIGluZGV4LW9ubHkgc2Nhbiwgd2UgbmVlZCBhIHR1cGxlIHN0b3JhZ2UK KwkJICogd29ya3NwYWNlLiBXZSBhbGxvY2F0ZSBCTENLU1ogZm9yIHRoaXMsIHdoaWNoIHNob3Vs ZCBhbHdheXMgZ2l2ZQorCQkgKiB0aGUgaW5kZXggQU0gZW5vdWdoIHNwYWNlIHRvIGZpdCBhIGZ1 bGwgcGFnZSdzIHdvcnRoIG9mIHR1cGxlcy4KKwkJICovCisJCWJhdGNoLT5jdXJyVHVwbGVzID0g TlVMTDsKKwkJaWYgKHdhbnRfaXR1cCkKKwkJCWJhdGNoLT5jdXJyVHVwbGVzID0gcGFsbG9jKEJM Q0tTWik7CisKKwkJLyoKKwkJICogQmF0Y2hlcyBhbGxvY2F0ZSBraWxsZWRJdGVtcyBsYXppbHkg KHRob3VnaCBub3RlIHRoYXQgY2FjaGVkCisJCSAqIGJhdGNoZXMga2VlcCB0aGVpciBraWxsZWRJ dGVtcyBhbGxvY2F0aW9uIHdoZW4gcmVjeWNsZWQpCisJCSAqLworCQliYXRjaC0+a2lsbGVkSXRl bXMgPSBOVUxMOworCX0KKworCS8qIHdhbnRfaXR1cCBjYWxsZXJzIG11c3QgZ2V0IGEgY3VyclR1 cGxlcyBzcGFjZSAqLworCUFzc2VydChiYXRjaC0+bWF4aXRlbXMgPT0gbWF4aXRlbXMpOworCUFz c2VydCghKHdhbnRfaXR1cCAmJiAoYmF0Y2gtPmN1cnJUdXBsZXMgPT0gTlVMTCkpKTsKKworCS8q IHNoYXJlZCBpbml0aWFsaXphdGlvbiAqLworCWJhdGNoLT5idWYgPSBJbnZhbGlkQnVmZmVyOwor CWJhdGNoLT5maXJzdEl0ZW0gPSAtMTsKKwliYXRjaC0+bGFzdEl0ZW0gPSAtMTsKKwliYXRjaC0+ bnVtS2lsbGVkID0gMDsKKworCXJldHVybiBiYXRjaDsKK30KKworLyoKKyAqIGluZGV4YW1fdXRp bF9iYXRjaF9yZWxlYXNlCisgKgkJRWl0aGVyIHN0YXNoIHRoZSBiYXRjaCBpbiBhIHNtYWxsIGNh Y2hlIGZvciByZXVzZSwgb3IgZnJlZSBpdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxl ZCBieSBpbmRleCBBTXMgdG8gcmVsZWFzZSBhIGJhdGNoIGFsbG9jYXRlZCBieQorICogaW5kZXhh bV91dGlsX2JhdGNoX2FsbG9jLiAgQmF0Y2hlcyBhcmUgY2FjaGVkIGhlcmUgZm9yIHJldXNlICh3 aGVuIHNjYW4KKyAqIGhhc24ndCBhbHJlYWR5IGZpbmlzaGVkKSB0byByZWR1Y2UgcGFsbG9jL3Bm cmVlIG92ZXJoZWFkLgorICoKKyAqIEl0J3Mgc2FmZSB0byByZWxlYXNlIGEgYmF0Y2ggaW1tZWRp YXRlbHkgd2hlbiBpdCB3YXMgdXNlZCB0byByZWFkIGEgcGFnZQorICogdGhhdCByZXR1cm5lZCBu byBtYXRjaGVzIHRvIHRoZSBzY2FuLiAgQmF0Y2hlcyBhY3R1YWxseSByZXR1cm5lZCBieSBpbmRl eAorICogQU0ncyBhbWdldGJhdGNoIHJvdXRpbmUgKGkuZS4gYmF0Y2hlcyBmb3IgcGFnZXMgd2l0 aCBvbmUgb3IgbW9yZSBtYXRjaGVzKQorICogbXVzdCBiZSByZWxlYXNlZCBieSBjYWxsaW5nIGhl cmUgYXQgdGhlIGVuZCBvZiB0aGVpciBhbWZyZWViYXRjaCByb3V0aW5lLgorICogSW5kZXggQU1z IHRoYXQgdXNlcyBiYXRjaGVzIHNob3VsZCBjYWxsIGhlcmUgdG8gcmVsZWFzZSBhIGJhdGNoIGZy b20gYW55IG9mCisgKiB0aGVpciBhbWdldGJhdGNoLCBhbWdldGJpdG1hcCwgYW5kIGFtZnJlZWJh dGNoIHJvdXRpbmVzLgorICovCit2b2lkCitpbmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFzZShJbmRl eFNjYW5EZXNjIHNjYW4sIEJhdGNoSW5kZXhTY2FuIGJhdGNoKQoreworCUFzc2VydChiYXRjaC0+ YnVmID09IEludmFsaWRCdWZmZXIpOworCisJaWYgKHNjYW4tPmJhdGNocXVldWUpCisJeworCQkv KiBhbWdldGJhdGNoIHNjYW4gY2FsbGVyICovCisJCUFzc2VydChzY2FuLT5oZWFwUmVsYXRpb24g IT0gTlVMTCk7CisKKwkJaWYgKHNjYW4tPmJhdGNocXVldWUtPmZpbmlzaGVkKQorCQl7CisJCQkv KiBEb24ndCBib3RoZXIgdXNpbmcgY2FjaGUgd2hlbiBzY2FuIGlzIGVuZGluZyAqLworCQkJcGZy ZWUoYmF0Y2gpOworCQkJcmV0dXJuOworCQl9CisKKwkJLyoKKwkJICogVXNlIGNhY2hlLiAgVGhp cyBpcyBnZW5lcmFsbHkgb25seSBiZW5lZmljaWFsIHdoZW4gdGhlcmUgYXJlIG1hbnkKKwkJICog c21hbGwgcmVzY2FucyBvZiBhbiBpbmRleC4KKwkJICovCisJCWZvciAoaW50IGkgPSAwOyBpIDwg SU5ERVhfU0NBTl9DQUNIRV9CQVRDSEVTOyBpKyspCisJCXsKKwkJCWlmIChzY2FuLT5iYXRjaHF1 ZXVlLT5jYWNoZVtpXSA9PSBOVUxMKQorCQkJeworCQkJCS8qIGZvdW5kIGVtcHR5IHNsb3QsIHdl J3JlIGRvbmUgKi8KKwkJCQlzY2FuLT5iYXRjaHF1ZXVlLT5jYWNoZVtpXSA9IGJhdGNoOworCQkJ CXJldHVybjsKKwkJCX0KKwkJfQorCisJCS8qCisJCSAqIEZhaWxlZCB0byBmaW5kIGEgZnJlZSBz bG90IGZvciB0aGlzIGJhdGNoLiAgV2UnbGwganVzdCBmcmVlIGl0CisJCSAqIG91cnNlbHZlcy4g IFRoaXMgaXNuJ3QgcmVhbGx5IGV4cGVjdGVkOyBpdCdzIGp1c3QgZGVmZW5zaXZlLgorCQkgKi8K KwkJaWYgKGJhdGNoLT5raWxsZWRJdGVtcykKKwkJCXBmcmVlKGJhdGNoLT5raWxsZWRJdGVtcyk7 CisJCWlmIChiYXRjaC0+Y3VyclR1cGxlcykKKwkJCXBmcmVlKGJhdGNoLT5jdXJyVHVwbGVzKTsK Kwl9CisJZWxzZQorCXsKKwkJLyogYW1nZXRiaXRtYXAgc2NhbiBjYWxsZXIgKi8KKwkJQXNzZXJ0 KHNjYW4tPmhlYXBSZWxhdGlvbiA9PSBOVUxMKTsKKwkJQXNzZXJ0KGJhdGNoLT5raWxsZWRJdGVt cyA9PSBOVUxMKTsKKwkJQXNzZXJ0KGJhdGNoLT5jdXJyVHVwbGVzID09IE5VTEwpOworCX0KKwor CS8qIG5vIGZyZWUgc2xvdCB0byBzYXZlIHRoaXMgYmF0Y2ggKGV4cGVjdGVkIHdpdGggYW1nZXRi aXRtYXAgY2FsbGVycykgKi8KKwlwZnJlZShiYXRjaCk7Cit9CisKKy8qCisgKiBDaGVjayBpbnZh cmlhbnRzIG9uIGN1cnJlbnQgYmF0Y2hlcworICoKKyAqIE1ha2VzIHN1cmUgdGhlIGluZGV4ZXMg YXJlIHNldCBhcyBleHBlY3RlZCwgdGhlIGJ1ZmZlciBzaXplIGlzIHdpdGhpbgorICogbGltaXRz LCBhbmQgc28gb24uCisgKi8KK3N0YXRpYyB2b2lkCitiYXRjaF9hc3NlcnRfYmF0Y2hlc192YWxp ZChJbmRleFNjYW5EZXNjIHNjYW4pCit7CisjaWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORworCUJh dGNoUXVldWUgKmJhdGNocXVldWUgPSBzY2FuLT5iYXRjaHF1ZXVlOworCisJLyogd2Ugc2hvdWxk IGhhdmUgYmF0Y2hlcyBpbml0aWFsaXplZCAqLworCUFzc2VydChiYXRjaHF1ZXVlICE9IE5VTEwp OworCisJLyogV2Ugc2hvdWxkIG5vdCBoYXZlIHRvbyBtYW55IGJhdGNoZXMuICovCisJQXNzZXJ0 KGJhdGNocXVldWUtPm1heEJhdGNoZXMgPiAwICYmCisJCSAgIGJhdGNocXVldWUtPm1heEJhdGNo ZXMgPD0gSU5ERVhfU0NBTl9NQVhfQkFUQ0hFUyk7CisKKwkvKgorCSAqIFRoZSBoZWFkL25leHQg aW5kZXhlcyBzaG91bGQgZGVmaW5lIGEgdmFsaWQgcmFuZ2UgKGluIHRoZSBjeWNsaWMKKwkgKiBi dWZmZXIsIGFuZCBzaG91bGQgbm90IG92ZXJmbG93IG1heEJhdGNoZXMuCisJICovCisJQXNzZXJ0 KGJhdGNocXVldWUtPmhlYWRCYXRjaCA+PSAwICYmCisJCSAgIGJhdGNocXVldWUtPmhlYWRCYXRj aCA8PSBiYXRjaHF1ZXVlLT5uZXh0QmF0Y2gpOworCUFzc2VydChiYXRjaHF1ZXVlLT5uZXh0QmF0 Y2ggLSBiYXRjaHF1ZXVlLT5oZWFkQmF0Y2ggPD0KKwkJICAgYmF0Y2hxdWV1ZS0+bWF4QmF0Y2hl cyk7CisKKwkvKiBDaGVjayBhbGwgY3VycmVudCBiYXRjaGVzICovCisJZm9yIChpbnQgaSA9IGJh dGNocXVldWUtPmhlYWRCYXRjaDsgaSA8IGJhdGNocXVldWUtPm5leHRCYXRjaDsgaSsrKQorCXsK KwkJQmF0Y2hJbmRleFNjYW4gYmF0Y2ggPSBJTkRFWF9TQ0FOX0JBVENIKHNjYW4sIGkpOworCisJ CWJhdGNoX2Fzc2VydF9iYXRjaF92YWxpZChzY2FuLCBiYXRjaCk7CisJfQorI2VuZGlmCit9CisK K3N0YXRpYyB2b2lkCitiYXRjaF9kZWJ1Z19wcmludF9iYXRjaGVzKGNvbnN0IGNoYXIgKmxhYmVs LCBJbmRleFNjYW5EZXNjIHNjYW4pCit7CisjaWZkZWYgSU5ERVhBTV9ERUJVRworCUJhdGNoUXVl dWUgKmJhdGNocXVldWUgPSBzY2FuLT5iYXRjaHF1ZXVlOworCisJaWYgKCFzY2FuLT5iYXRjaHF1 ZXVlKQorCQlyZXR1cm47CisKKwlpZiAoIUFtUmVndWxhckJhY2tlbmRQcm9jZXNzKCkpCisJCXJl dHVybjsKKwlpZiAoSXNDYXRhbG9nUmVsYXRpb24oc2Nhbi0+aW5kZXhSZWxhdGlvbikpCisJCXJl dHVybjsKKworCURFQlVHX0xPRygiJXM6IGJhdGNoZXMgaGVhZEJhdGNoICVkIG5leHRCYXRjaCAl ZCBtYXhCYXRjaGVzICVkIiwKKwkJCSAgbGFiZWwsCisJCQkgIGJhdGNocXVldWUtPmhlYWRCYXRj aCwgYmF0Y2hxdWV1ZS0+bmV4dEJhdGNoLCBiYXRjaHF1ZXVlLT5tYXhCYXRjaGVzKTsKKworCWZv ciAoaW50IGkgPSBiYXRjaHF1ZXVlLT5oZWFkQmF0Y2g7IGkgPCBiYXRjaHF1ZXVlLT5uZXh0QmF0 Y2g7IGkrKykKKwl7CisJCUJhdGNoSW5kZXhTY2FuIGJhdGNoID0gSU5ERVhfU0NBTl9CQVRDSChz Y2FuLCBpKTsKKworCQlERUJVR19MT0coIiAgICBiYXRjaCAlZCBjdXJyUGFnZSAldSAlcCBmaXJz dEl0ZW0gJWQgbGFzdEl0ZW0gJWQga2lsbGVkICVkIiwKKwkJCQkgIGksIGJhdGNoLT5jdXJyUGFn ZSwgYmF0Y2gsIGJhdGNoLT5maXJzdEl0ZW0sCisJCQkJICBiYXRjaC0+bGFzdEl0ZW0sIGJhdGNo LT5udW1LaWxsZWQpOworCX0KKyNlbmRpZgorfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNj ZXNzL2luZGV4L21lc29uLmJ1aWxkIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L21lc29uLmJ1 aWxkCmluZGV4IGUyOWMwMzA4OS4uYzAxZmZmNzA4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9h Y2Nlc3MvaW5kZXgvbWVzb24uYnVpbGQKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L21l c29uLmJ1aWxkCkBAIC01LDQgKzUsNSBAQCBiYWNrZW5kX3NvdXJjZXMgKz0gZmlsZXMoCiAgICdh bXZhbGlkYXRlLmMnLAogICAnZ2VuYW0uYycsCiAgICdpbmRleGFtLmMnLAorICAnaW5kZXhiYXRj aC5jJywKICkKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cGFnZS5j IGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRwYWdlLmMKaW5kZXggMzBiNDNhNGRkLi4w MzlmYTE1ZDAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cGFnZS5j CisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cGFnZS5jCkBAIC0xMDMyLDYgKzEw MzIsOSBAQCBfYnRfcmVsYnVmKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGJ1ZikKICAqIExvY2sgaXMg YWNxdWlyZWQgd2l0aG91dCBhY3F1aXJpbmcgYW5vdGhlciBwaW4uICBUaGlzIGlzIGxpa2UgYSBy YXcKICAqIExvY2tCdWZmZXIoKSBjYWxsLCBidXQgcGVyZm9ybXMgZXh0cmEgc3RlcHMgbmVlZGVk IGJ5IFZhbGdyaW5kLgogICoKKyAqIE5vdGU6IGluZGV4YW1fdXRpbF9iYXRjaF91bmxvY2sgaGFz IHNpbWlsYXIgVmFsZ3JpbmQgYnVmZmVyIGxvY2sKKyAqIGluc3RydW1lbnRhdGlvbiwgd2hpY2gg d2UgcmVseSBvbiBoZXJlLgorICoKICAqIE5vdGU6IENhbGxlciBtYXkgbmVlZCB0byBjYWxsIF9i dF9jaGVja3BhZ2UoKSB3aXRoIGJ1ZiB3aGVuIHBpbiBvbiBidWYKICAqIHdhc24ndCBvcmlnaW5h bGx5IGFjcXVpcmVkIGluIF9idF9nZXRidWYoKSBvciBfYnRfcmVsYW5kZ2V0YnVmKCkuCiAgKi8K ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jCmluZGV4IGZkZmY5NjBjMS4uZWVlMmI2OWM1IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jCisrKyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMKQEAgLTE1OCwxMSArMTU4LDEyIEBAIGJ0aGFu ZGxlcihQR19GVU5DVElPTl9BUkdTKQogCWFtcm91dGluZS0+YW1hZGp1c3RtZW1iZXJzID0gYnRh ZGp1c3RtZW1iZXJzOwogCWFtcm91dGluZS0+YW1iZWdpbnNjYW4gPSBidGJlZ2luc2NhbjsKIAlh bXJvdXRpbmUtPmFtcmVzY2FuID0gYnRyZXNjYW47Ci0JYW1yb3V0aW5lLT5hbWdldHR1cGxlID0g YnRnZXR0dXBsZTsKKwlhbXJvdXRpbmUtPmFtZ2V0dHVwbGUgPSBOVUxMOworCWFtcm91dGluZS0+ YW1nZXRiYXRjaCA9IGJ0Z2V0YmF0Y2g7CisJYW1yb3V0aW5lLT5hbWZyZWViYXRjaCA9IGJ0ZnJl ZWJhdGNoOwogCWFtcm91dGluZS0+YW1nZXRiaXRtYXAgPSBidGdldGJpdG1hcDsKIAlhbXJvdXRp bmUtPmFtZW5kc2NhbiA9IGJ0ZW5kc2NhbjsKLQlhbXJvdXRpbmUtPmFtbWFya3BvcyA9IGJ0bWFy a3BvczsKLQlhbXJvdXRpbmUtPmFtcmVzdHJwb3MgPSBidHJlc3RycG9zOworCWFtcm91dGluZS0+ YW1wb3NyZXNldCA9IGJ0cG9zcmVzZXQ7CiAJYW1yb3V0aW5lLT5hbWVzdGltYXRlcGFyYWxsZWxz Y2FuID0gYnRlc3RpbWF0ZXBhcmFsbGVsc2NhbjsKIAlhbXJvdXRpbmUtPmFtaW5pdHBhcmFsbGVs c2NhbiA9IGJ0aW5pdHBhcmFsbGVsc2NhbjsKIAlhbXJvdXRpbmUtPmFtcGFyYWxsZWxyZXNjYW4g PSBidHBhcmFsbGVscmVzY2FuOwpAQCAtMjIwLDEzICsyMjEsMTMgQEAgYnRpbnNlcnQoUmVsYXRp b24gcmVsLCBEYXR1bSAqdmFsdWVzLCBib29sICppc251bGwsCiB9CiAKIC8qCi0gKglidGdldHR1 cGxlKCkgLS0gR2V0IHRoZSBuZXh0IHR1cGxlIGluIHRoZSBzY2FuLgorICoJYnRnZXRiYXRjaCgp IC0tIEdldCB0aGUgZmlyc3Qgb3IgbmV4dCBiYXRjaCBvZiB0dXBsZXMgaW4gdGhlIHNjYW4KICAq LwotYm9vbAotYnRnZXR0dXBsZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGly KQorQmF0Y2hJbmRleFNjYW4KK2J0Z2V0YmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBCYXRjaElu ZGV4U2NhbiBwcmlvcmJhdGNoLCBTY2FuRGlyZWN0aW9uIGRpcikKIHsKIAlCVFNjYW5PcGFxdWUg c28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7Ci0JYm9vbAkJcmVzOworCUJhdGNoSW5k ZXhTY2FuIGJhdGNoID0gcHJpb3JiYXRjaDsKIAogCUFzc2VydChzY2FuLT5oZWFwUmVsYXRpb24g IT0gTlVMTCk7CiAKQEAgLTI0MSw0NCArMjQyLDE4IEBAIGJ0Z2V0dHVwbGUoSW5kZXhTY2FuRGVz YyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAkJICogdGhlIGFwcHJvcHJpYXRlIGRpcmVjdGlv bi4gIElmIHdlIGhhdmVuJ3QgZG9uZSBzbyB5ZXQsIHdlIGNhbGwKIAkJICogX2J0X2ZpcnN0KCkg dG8gZ2V0IHRoZSBmaXJzdCBpdGVtIGluIHRoZSBzY2FuLgogCQkgKi8KLQkJaWYgKCFCVFNjYW5Q b3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSkKLQkJCXJlcyA9IF9idF9maXJzdChzY2FuLCBkaXIpOwor CQlpZiAoYmF0Y2ggPT0gTlVMTCkKKwkJCWJhdGNoID0gX2J0X2ZpcnN0KHNjYW4sIGRpcik7CiAJ CWVsc2UKLQkJewotCQkJLyoKLQkJCSAqIENoZWNrIHRvIHNlZSBpZiB3ZSBzaG91bGQga2lsbCB0 aGUgcHJldmlvdXNseS1mZXRjaGVkIHR1cGxlLgotCQkJICovCi0JCQlpZiAoc2Nhbi0+a2lsbF9w cmlvcl90dXBsZSkKLQkJCXsKLQkJCQkvKgotCQkJCSAqIFllcywgcmVtZW1iZXIgaXQgZm9yIGxh dGVyLiAoV2UnbGwgZGVhbCB3aXRoIGFsbCBzdWNoCi0JCQkJICogdHVwbGVzIGF0IG9uY2Ugcmln aHQgYmVmb3JlIGxlYXZpbmcgdGhlIGluZGV4IHBhZ2UuKSAgVGhlCi0JCQkJICogdGVzdCBmb3Ig bnVtS2lsbGVkIG92ZXJydW4gaXMgbm90IGp1c3QgcGFyYW5vaWE6IGlmIHRoZQotCQkJCSAqIGNh bGxlciByZXZlcnNlcyBkaXJlY3Rpb24gaW4gdGhlIGluZGV4c2NhbiB0aGVuIHRoZSBzYW1lCi0J CQkJICogaXRlbSBtaWdodCBnZXQgZW50ZXJlZCBtdWx0aXBsZSB0aW1lcy4gSXQncyBub3Qgd29y dGgKLQkJCQkgKiB0cnlpbmcgdG8gb3B0aW1pemUgdGhhdCwgc28gd2UgZG9uJ3QgZGV0ZWN0IGl0 LCBidXQgaW5zdGVhZAotCQkJCSAqIGp1c3QgZm9yZ2V0IGFueSBleGNlc3MgZW50cmllcy4KLQkJ CQkgKi8KLQkJCQlpZiAoc28tPmtpbGxlZEl0ZW1zID09IE5VTEwpCi0JCQkJCXNvLT5raWxsZWRJ dGVtcyA9IChpbnQgKikKLQkJCQkJCXBhbGxvYyhNYXhUSURzUGVyQlRyZWVQYWdlICogc2l6ZW9m KGludCkpOwotCQkJCWlmIChzby0+bnVtS2lsbGVkIDwgTWF4VElEc1BlckJUcmVlUGFnZSkKLQkJ CQkJc28tPmtpbGxlZEl0ZW1zW3NvLT5udW1LaWxsZWQrK10gPSBzby0+Y3VyclBvcy5pdGVtSW5k ZXg7Ci0JCQl9CisJCQliYXRjaCA9IF9idF9uZXh0KHNjYW4sIGRpciwgYmF0Y2gpOwogCi0JCQkv KgotCQkJICogTm93IGNvbnRpbnVlIHRoZSBzY2FuLgotCQkJICovCi0JCQlyZXMgPSBfYnRfbmV4 dChzY2FuLCBkaXIpOwotCQl9Ci0KLQkJLyogSWYgd2UgaGF2ZSBhIHR1cGxlLCByZXR1cm4gaXQg Li4uICovCi0JCWlmIChyZXMpCisJCS8qIElmIHdlIGhhdmUgYSBiYXRjaCwgcmV0dXJuIGl0IC4u LiAqLworCQlpZiAoYmF0Y2gpCiAJCQlicmVhazsKIAkJLyogLi4uIG90aGVyd2lzZSBzZWUgaWYg d2UgbmVlZCBhbm90aGVyIHByaW1pdGl2ZSBpbmRleCBzY2FuICovCiAJfSB3aGlsZSAoc28tPm51 bUFycmF5S2V5cyAmJiBfYnRfc3RhcnRfcHJpbV9zY2FuKHNjYW4sIGRpcikpOwogCi0JcmV0dXJu IHJlczsKKwlyZXR1cm4gYmF0Y2g7CiB9CiAKIC8qCkBAIC0yODgsNiArMjYzLDcgQEAgaW50NjQK IGJ0Z2V0Yml0bWFwKEluZGV4U2NhbkRlc2Mgc2NhbiwgVElEQml0bWFwICp0Ym0pCiB7CiAJQlRT Y2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOworCUJhdGNoSW5kZXhT Y2FuIGJhdGNoOwogCWludDY0CQludGlkcyA9IDA7CiAJSXRlbVBvaW50ZXIgaGVhcFRpZDsKIApA QCAtMjk2LDI5ICsyNzIsMjkgQEAgYnRnZXRiaXRtYXAoSW5kZXhTY2FuRGVzYyBzY2FuLCBUSURC aXRtYXAgKnRibSkKIAkvKiBFYWNoIGxvb3AgaXRlcmF0aW9uIHBlcmZvcm1zIGFub3RoZXIgcHJp bWl0aXZlIGluZGV4IHNjYW4gKi8KIAlkbwogCXsKLQkJLyogRmV0Y2ggdGhlIGZpcnN0IHBhZ2Ug JiB0dXBsZSAqLwotCQlpZiAoX2J0X2ZpcnN0KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uKSkK KwkJLyogRmV0Y2ggdGhlIGZpcnN0IGJhdGNoICovCisJCWlmICgoYmF0Y2ggPSBfYnRfZmlyc3Qo c2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24pKSkKIAkJewotCQkJLyogU2F2ZSB0dXBsZSBJRCwg YW5kIGNvbnRpbnVlIHNjYW5uaW5nICovCi0JCQloZWFwVGlkID0gJnNjYW4tPnhzX2hlYXB0aWQ7 CisJCQlpbnQJCQlpdGVtSW5kZXggPSAwOworCisJCQkvKiBTYXZlIGZpcnN0IHR1cGxlJ3MgVElE ICovCisJCQloZWFwVGlkID0gJmJhdGNoLT5pdGVtc1tpdGVtSW5kZXhdLmhlYXBUaWQ7CiAJCQl0 Ym1fYWRkX3R1cGxlcyh0Ym0sIGhlYXBUaWQsIDEsIGZhbHNlKTsKIAkJCW50aWRzKys7CiAKIAkJ CWZvciAoOzspCiAJCQl7Ci0JCQkJLyoKLQkJCQkgKiBBZHZhbmNlIHRvIG5leHQgdHVwbGUgd2l0 aGluIHBhZ2UuICBUaGlzIGlzIHRoZSBzYW1lIGFzIHRoZQotCQkJCSAqIGVhc3kgY2FzZSBpbiBf YnRfbmV4dCgpLgotCQkJCSAqLwotCQkJCWlmICgrK3NvLT5jdXJyUG9zLml0ZW1JbmRleCA+IHNv LT5jdXJyUG9zLmxhc3RJdGVtKQorCQkJCS8qIEFkdmFuY2UgdG8gbmV4dCBUSUQgd2l0aGluIHBh Z2Utc2l6ZWQgYmF0Y2ggKi8KKwkJCQlpZiAoKytpdGVtSW5kZXggPiBiYXRjaC0+bGFzdEl0ZW0p CiAJCQkJewogCQkJCQkvKiBsZXQgX2J0X25leHQgZG8gdGhlIGhlYXZ5IGxpZnRpbmcgKi8KLQkJ CQkJaWYgKCFfYnRfbmV4dChzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbikpCisJCQkJCWl0ZW1J bmRleCA9IDA7CisJCQkJCWJhdGNoID0gX2J0X25leHQoc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rp b24sIGJhdGNoKTsKKwkJCQkJaWYgKCFiYXRjaCkKIAkJCQkJCWJyZWFrOwogCQkJCX0KIAotCQkJ CS8qIFNhdmUgdHVwbGUgSUQsIGFuZCBjb250aW51ZSBzY2FubmluZyAqLwotCQkJCWhlYXBUaWQg PSAmc28tPmN1cnJQb3MuaXRlbXNbc28tPmN1cnJQb3MuaXRlbUluZGV4XS5oZWFwVGlkOworCQkJ CWhlYXBUaWQgPSAmYmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF0uaGVhcFRpZDsKIAkJCQl0Ym1fYWRk X3R1cGxlcyh0Ym0sIGhlYXBUaWQsIDEsIGZhbHNlKTsKIAkJCQludGlkcysrOwogCQkJfQpAQCAt MzQ2LDggKzMyMiw2IEBAIGJ0YmVnaW5zY2FuKFJlbGF0aW9uIHJlbCwgaW50IG5rZXlzLCBpbnQg bm9yZGVyYnlzKQogCiAJLyogYWxsb2NhdGUgcHJpdmF0ZSB3b3Jrc3BhY2UgKi8KIAlzbyA9IChC VFNjYW5PcGFxdWUpIHBhbGxvYyhzaXplb2YoQlRTY2FuT3BhcXVlRGF0YSkpOwotCUJUU2NhblBv c0ludmFsaWRhdGUoc28tPmN1cnJQb3MpOwotCUJUU2NhblBvc0ludmFsaWRhdGUoc28tPm1hcmtQ b3MpOwogCWlmIChzY2FuLT5udW1iZXJPZktleXMgPiAwKQogCQlzby0+a2V5RGF0YSA9IChTY2Fu S2V5KSBwYWxsb2Moc2Nhbi0+bnVtYmVyT2ZLZXlzICogc2l6ZW9mKFNjYW5LZXlEYXRhKSk7CiAJ ZWxzZQpAQCAtMzYxLDE2ICszMzUsNiBAQCBidGJlZ2luc2NhbihSZWxhdGlvbiByZWwsIGludCBu a2V5cywgaW50IG5vcmRlcmJ5cykKIAlzby0+b3JkZXJQcm9jcyA9IE5VTEw7CiAJc28tPmFycmF5 Q29udGV4dCA9IE5VTEw7CiAKLQlzby0+a2lsbGVkSXRlbXMgPSBOVUxMOwkJLyogdW50aWwgbmVl ZGVkICovCi0Jc28tPm51bUtpbGxlZCA9IDA7Ci0KLQkvKgotCSAqIFdlIGRvbid0IGtub3cgeWV0 IHdoZXRoZXIgdGhlIHNjYW4gd2lsbCBiZSBpbmRleC1vbmx5LCBzbyB3ZSBkbyBub3QKLQkgKiBh bGxvY2F0ZSB0aGUgdHVwbGUgd29ya3NwYWNlIGFycmF5cyB1bnRpbCBidHJlc2Nhbi4gIEhvd2V2 ZXIsIHdlIHNldCB1cAotCSAqIHNjYW4tPnhzX2l0dXBkZXNjIHdoZXRoZXIgd2UnbGwgbmVlZCBp dCBvciBub3QsIHNpbmNlIHRoYXQncyBzbyBjaGVhcC4KLQkgKi8KLQlzby0+Y3VyclR1cGxlcyA9 IHNvLT5tYXJrVHVwbGVzID0gTlVMTDsKLQogCXNjYW4tPnhzX2l0dXBkZXNjID0gUmVsYXRpb25H ZXREZXNjcihyZWwpOwogCiAJc2Nhbi0+b3BhcXVlID0gc287CkBAIC0zODcsODIgKzM1MSw0MCBA QCBidHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5LZXkgc2NhbmtleSwgaW50IG5zY2Fu a2V5cywKIHsKIAlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7 CiAKLQkvKiB3ZSBhcmVuJ3QgaG9sZGluZyBhbnkgcmVhZCBsb2NrcywgYnV0IGdvdHRhIGRyb3Ag dGhlIHBpbnMgKi8KLQlpZiAoQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpCi0JewotCQkv KiBCZWZvcmUgbGVhdmluZyBjdXJyZW50IHBhZ2UsIGRlYWwgd2l0aCBhbnkga2lsbGVkIGl0ZW1z ICovCi0JCWlmIChzby0+bnVtS2lsbGVkID4gMCkKLQkJCV9idF9raWxsaXRlbXMoc2Nhbik7Ci0J CUJUU2NhblBvc1VucGluSWZQaW5uZWQoc28tPmN1cnJQb3MpOwotCQlCVFNjYW5Qb3NJbnZhbGlk YXRlKHNvLT5jdXJyUG9zKTsKLQl9Ci0KLQkvKgotCSAqIFdlIHByZWZlciB0byBlYWdlcmx5IGRy b3AgbGVhZiBwYWdlIHBpbnMgYmVmb3JlIGJ0Z2V0dHVwbGUgcmV0dXJucy4KLQkgKiBUaGlzIGF2 b2lkcyBtYWtpbmcgVkFDVVVNIHdhaXQgdG8gYWNxdWlyZSBhIGNsZWFudXAgbG9jayBvbiB0aGUg cGFnZS4KLQkgKgotCSAqIFdlIGNhbm5vdCBzYWZlbHkgZHJvcCBsZWFmIHBhZ2UgcGlucyBkdXJp bmcgaW5kZXgtb25seSBzY2FucyBkdWUgdG8gYQotCSAqIHJhY2UgY29uZGl0aW9uIGludm9sdmlu ZyBWQUNVVU0gc2V0dGluZyBwYWdlcyBhbGwtdmlzaWJsZSBpbiB0aGUgVk0uCi0JICogSXQncyBh bHNvIHVuc2FmZSBmb3IgcGxhaW4gaW5kZXggc2NhbnMgdGhhdCB1c2UgYSBub24tTVZDQyBzbmFw c2hvdC4KLQkgKgotCSAqIFdoZW4gd2UgZHJvcCBwaW5zIGVhZ2VybHksIHRoZSBtZWNoYW5pc20g dGhhdCBtYXJrcyBzby0+a2lsbGVkSXRlbXNbXQotCSAqIGluZGV4IHR1cGxlcyBMUF9ERUFEIGhh cyB0byBkZWFsIHdpdGggY29uY3VycmVudCBUSUQgcmVjeWNsaW5nIHJhY2VzLgotCSAqIFRoZSBz Y2hlbWUgdXNlZCB0byBkZXRlY3QgdW5zYWZlIFRJRCByZWN5Y2xpbmcgd29uJ3Qgd29yayB3aGVu IHNjYW5uaW5nCi0JICogdW5sb2dnZWQgcmVsYXRpb25zIChzaW5jZSBpdCBpbnZvbHZlcyBzYXZp bmcgYW4gYWZmZWN0ZWQgcGFnZSdzIExTTikuCi0JICogT3B0IG91dCBvZiBlYWdlciBwaW4gZHJv cHBpbmcgZHVyaW5nIHVubG9nZ2VkIHJlbGF0aW9uIHNjYW5zIGZvciBub3cKLQkgKiAodGhpcyBp cyBwcmVmZXJhYmxlIHRvIG9wdGluZyBvdXQgb2Yga2lsbF9wcmlvcl90dXBsZSBMUF9ERUFEIHNl dHRpbmcpLgotCSAqCi0JICogQWxzbyBvcHQgb3V0IG9mIGRyb3BwaW5nIGxlYWYgcGFnZSBwaW5z IGVhZ2VybHkgZHVyaW5nIGJpdG1hcCBzY2Fucy4KLQkgKiBQaW5zIGNhbm5vdCBiZSBoZWxkIGZv ciBtb3JlIHRoYW4gYW4gaW5zdGFudCBkdXJpbmcgYml0bWFwIHNjYW5zIGVpdGhlcgotCSAqIHdh eSwgc28gd2UgbWlnaHQgYXMgd2VsbCBhdm9pZCB3YXN0aW5nIGN5Y2xlcyBvbiBhY3F1aXJpbmcg cGFnZSBMU05zLgotCSAqCi0JICogU2VlIG5idHJlZS9SRUFETUUgc2VjdGlvbiBvbiBtYWtpbmcg Y29uY3VycmVudCBUSUQgcmVjeWNsaW5nIHNhZmUuCi0JICoKLQkgKiBOb3RlOiBzby0+ZHJvcFBp biBzaG91bGQgbmV2ZXIgY2hhbmdlIGFjcm9zcyByZXNjYW5zLgotCSAqLwotCXNvLT5kcm9wUGlu ID0gKCFzY2FuLT54c193YW50X2l0dXAgJiYKLQkJCQkgICBJc01WQ0NTbmFwc2hvdChzY2FuLT54 c19zbmFwc2hvdCkgJiYKLQkJCQkgICBSZWxhdGlvbk5lZWRzV0FMKHNjYW4tPmluZGV4UmVsYXRp b24pICYmCi0JCQkJICAgc2Nhbi0+aGVhcFJlbGF0aW9uICE9IE5VTEwpOwotCi0Jc28tPm1hcmtJ dGVtSW5kZXggPSAtMTsKLQlzby0+bmVlZFByaW1TY2FuID0gZmFsc2U7Ci0Jc28tPnNjYW5CZWhp bmQgPSBmYWxzZTsKLQlzby0+b3Bwb3NpdGVEaXJDaGVjayA9IGZhbHNlOwotCUJUU2NhblBvc1Vu cGluSWZQaW5uZWQoc28tPm1hcmtQb3MpOwotCUJUU2NhblBvc0ludmFsaWRhdGUoc28tPm1hcmtQ b3MpOwotCi0JLyoKLQkgKiBBbGxvY2F0ZSB0dXBsZSB3b3Jrc3BhY2UgYXJyYXlzLCBpZiBuZWVk ZWQgZm9yIGFuIGluZGV4LW9ubHkgc2NhbiBhbmQKLQkgKiBub3QgYWxyZWFkeSBkb25lIGluIGEg cHJldmlvdXMgcmVzY2FuIGNhbGwuICBUbyBzYXZlIG9uIHBhbGxvYwotCSAqIG92ZXJoZWFkLCBi b3RoIHdvcmtzcGFjZXMgYXJlIGFsbG9jYXRlZCBhcyBvbmUgcGFsbG9jIGJsb2NrOyBvbmx5IHRo aXMKLQkgKiBmdW5jdGlvbiBhbmQgYnRlbmRzY2FuIGtub3cgdGhhdC4KLQkgKgotCSAqIE5PVEU6 IHRoaXMgZGF0YSBzdHJ1Y3R1cmUgYWxzbyBtYWtlcyBpdCBzYWZlIHRvIHJldHVybiBkYXRhIGZy b20gYQotCSAqICJuYW1lIiBjb2x1bW4sIGV2ZW4gdGhvdWdoIGJ0cmVlIG5hbWVfb3BzIHVzZXMg YW4gdW5kZXJseWluZyBzdG9yYWdlCi0JICogZGF0YXR5cGUgb2YgY3N0cmluZy4gIFRoZSByaXNr IHRoZXJlIGlzIHRoYXQgIm5hbWUiIGlzIHN1cHBvc2VkIHRvIGJlCi0JICogcGFkZGVkIHRvIE5B TUVEQVRBTEVOLCBidXQgdGhlIGFjdHVhbCBpbmRleCB0dXBsZSBpcyBwcm9iYWJseSBzaG9ydGVy LgotCSAqIEhvd2V2ZXIsIHNpbmNlIHdlIG9ubHkgcmV0dXJuIGRhdGEgb3V0IG9mIHR1cGxlcyBz aXR0aW5nIGluIHRoZQotCSAqIGN1cnJUdXBsZXMgYXJyYXksIGEgZmV0Y2ggb2YgTkFNRURBVEFM RU4gYnl0ZXMgY2FuIGF0IHdvcnN0IHB1bGwgc29tZQotCSAqIGRhdGEgb3V0IG9mIHRoZSBtYXJr VHVwbGVzIGFycmF5IC0tLSBydW5uaW5nIG9mZiB0aGUgZW5kIG9mIG1lbW9yeSBmb3IKLQkgKiBh IFNJR1NFR1YgaXMgbm90IHBvc3NpYmxlLiAgWWVhaCwgdGhpcyBpcyB1Z2x5IGFzIHNpbiwgYnV0 IGl0IGJlYXRzCi0JICogYWRkaW5nIHNwZWNpYWwtY2FzZSB0cmVhdG1lbnQgZm9yIG5hbWVfb3Bz IGVsc2V3aGVyZS4KLQkgKi8KLQlpZiAoc2Nhbi0+eHNfd2FudF9pdHVwICYmIHNvLT5jdXJyVHVw bGVzID09IE5VTEwpCi0JewotCQlzby0+Y3VyclR1cGxlcyA9IChjaGFyICopIHBhbGxvYyhCTENL U1ogKiAyKTsKLQkJc28tPm1hcmtUdXBsZXMgPSBzby0+Y3VyclR1cGxlcyArIEJMQ0tTWjsKLQl9 Ci0KIAkvKgogCSAqIFJlc2V0IHRoZSBzY2FuIGtleXMKIAkgKi8KIAlpZiAoc2NhbmtleSAmJiBz Y2FuLT5udW1iZXJPZktleXMgPiAwKQogCQltZW1jcHkoc2Nhbi0+a2V5RGF0YSwgc2NhbmtleSwg c2Nhbi0+bnVtYmVyT2ZLZXlzICogc2l6ZW9mKFNjYW5LZXlEYXRhKSk7CisJc28tPm5lZWRQcmlt U2NhbiA9IGZhbHNlOworCXNvLT5zY2FuQmVoaW5kID0gZmFsc2U7CisJc28tPm9wcG9zaXRlRGly Q2hlY2sgPSBmYWxzZTsKIAlzby0+bnVtYmVyT2ZLZXlzID0gMDsJCS8qIHVudGlsIF9idF9wcmVw cm9jZXNzX2tleXMgc2V0cyBpdCAqLwogCXNvLT5udW1BcnJheUtleXMgPSAwOwkJLyogZGl0dG8g Ki8KIH0KIAorLyoKKyAqCWJ0ZnJlZWJhdGNoKCkgLS0gRnJlZSBiYXRjaCByZXNvdXJjZXMsIGlu Y2x1ZGluZyBpdHMgYnVmZmVyIHBpbgorICovCit2b2lkCitidGZyZWViYXRjaChJbmRleFNjYW5E ZXNjIHNjYW4sIEJhdGNoSW5kZXhTY2FuIGJhdGNoKQoreworCS8qCisJICogQ2hlY2sgaWYgdGhl cmUgYXJlIHR1cGxlcyB0byBraWxsIGZyb20gdGhpcyBiYXRjaCAodGhhdCB3ZXJlbid0IGFscmVh ZHkKKwkgKiBraWxsZWQgZWFybGllciBvbikKKwkgKi8KKwlpZiAoYmF0Y2gtPm51bUtpbGxlZCA+ IDApCisJCV9idF9raWxsaXRlbXMoc2NhbiwgYmF0Y2gpOworCisJaWYgKCFzY2FuLT5iYXRjaHF1 ZXVlLT5kcm9wUGluKQorCXsKKwkJUmVsZWFzZUJ1ZmZlcihiYXRjaC0+YnVmKTsKKwkJYmF0Y2gt PmJ1ZiA9IEludmFsaWRCdWZmZXI7CisJfQorCisJaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2Uo c2NhbiwgYmF0Y2gpOworfQorCiAvKgogICoJYnRlbmRzY2FuKCkgLS0gY2xvc2UgZG93biBhIHNj YW4KICAqLwpAQCAtNDcxLDExNiArMzkzLDQ4IEBAIGJ0ZW5kc2NhbihJbmRleFNjYW5EZXNjIHNj YW4pCiB7CiAJQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwog Ci0JLyogd2UgYXJlbid0IGhvbGRpbmcgYW55IHJlYWQgbG9ja3MsIGJ1dCBnb3R0YSBkcm9wIHRo ZSBwaW5zICovCi0JaWYgKEJUU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKQotCXsKLQkJLyog QmVmb3JlIGxlYXZpbmcgY3VycmVudCBwYWdlLCBkZWFsIHdpdGggYW55IGtpbGxlZCBpdGVtcyAq LwotCQlpZiAoc28tPm51bUtpbGxlZCA+IDApCi0JCQlfYnRfa2lsbGl0ZW1zKHNjYW4pOwotCQlC VFNjYW5Qb3NVbnBpbklmUGlubmVkKHNvLT5jdXJyUG9zKTsKLQl9Ci0KLQlzby0+bWFya0l0ZW1J bmRleCA9IC0xOwotCUJUU2NhblBvc1VucGluSWZQaW5uZWQoc28tPm1hcmtQb3MpOwotCi0JLyog Tm8gbmVlZCB0byBpbnZhbGlkYXRlIHBvc2l0aW9ucywgdGhlIFJBTSBpcyBhYm91dCB0byBiZSBm cmVlZC4gKi8KLQogCS8qIFJlbGVhc2Ugc3RvcmFnZSAqLwogCWlmIChzby0+a2V5RGF0YSAhPSBO VUxMKQogCQlwZnJlZShzby0+a2V5RGF0YSk7CiAJLyogc28tPmFycmF5S2V5cyBhbmQgc28tPm9y ZGVyUHJvY3MgYXJlIGluIGFycmF5Q29udGV4dCAqLwogCWlmIChzby0+YXJyYXlDb250ZXh0ICE9 IE5VTEwpCiAJCU1lbW9yeUNvbnRleHREZWxldGUoc28tPmFycmF5Q29udGV4dCk7Ci0JaWYgKHNv LT5raWxsZWRJdGVtcyAhPSBOVUxMKQotCQlwZnJlZShzby0+a2lsbGVkSXRlbXMpOwotCWlmIChz by0+Y3VyclR1cGxlcyAhPSBOVUxMKQotCQlwZnJlZShzby0+Y3VyclR1cGxlcyk7Ci0JLyogc28t Pm1hcmtUdXBsZXMgc2hvdWxkIG5vdCBiZSBwZnJlZSdkLCBzZWUgYnRyZXNjYW4gKi8KIAlwZnJl ZShzbyk7CiB9CiAKIC8qCi0gKglidG1hcmtwb3MoKSAtLSBzYXZlIGN1cnJlbnQgc2NhbiBwb3Np dGlvbgorICoJYnRwb3NyZXNldCgpIC0tIGludmFsaWRhdGUgc2NhbidzIGFycmF5IGtleXMKICAq Lwogdm9pZAotYnRtYXJrcG9zKEluZGV4U2NhbkRlc2Mgc2NhbikKK2J0cG9zcmVzZXQoSW5kZXhT Y2FuRGVzYyBzY2FuLCBCYXRjaEluZGV4U2NhbiBtYXJrYmF0Y2gpCiB7CiAJQlRTY2FuT3BhcXVl IHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwogCi0JLyogVGhlcmUgbWF5IGJlIGFu IG9sZCBtYXJrIHdpdGggYSBwaW4gKGJ1dCBubyBsb2NrKS4gKi8KLQlCVFNjYW5Qb3NVbnBpbklm UGlubmVkKHNvLT5tYXJrUG9zKTsKKwlpZiAoIXNvLT5udW1BcnJheUtleXMpCisJCXJldHVybjsK IAogCS8qCi0JICogSnVzdCByZWNvcmQgdGhlIGN1cnJlbnQgaXRlbUluZGV4LiAgSWYgd2UgbGF0 ZXIgc3RlcCB0byBuZXh0IHBhZ2UKLQkgKiBiZWZvcmUgcmVsZWFzaW5nIHRoZSBtYXJrZWQgcG9z aXRpb24sIF9idF9zdGVwcGFnZSBtYWtlcyBhIGZ1bGwgY29weSBvZgotCSAqIHRoZSBjdXJyUG9z IHN0cnVjdCBpbiBtYXJrUG9zLiAgSWYgKGFzIG9mdGVuIGhhcHBlbnMpIHRoZSBtYXJrIGlzIG1v dmVkCi0JICogYmVmb3JlIHdlIGxlYXZlIHRoZSBwYWdlLCB3ZSBkb24ndCBoYXZlIHRvIGRvIHRo YXQgd29yay4KKwkgKiBDb3JlIHN5c3RlbSBpcyBhYm91dCB0byByZXN0b3JlIGEgbWFyayBhc3Nv Y2lhdGVkIHdpdGggYSBwcmV2aW91c2x5CisJICogcmV0dXJuZWQgYmF0Y2guICBSZXNldCB0aGUg c2NhbidzIGFycmF5cyB0byBtYWtlIGFsbCB0aGlzIHNhZmUuCiAJICovCi0JaWYgKEJUU2NhblBv c0lzVmFsaWQoc28tPmN1cnJQb3MpKQotCQlzby0+bWFya0l0ZW1JbmRleCA9IHNvLT5jdXJyUG9z Lml0ZW1JbmRleDsKKwlfYnRfc3RhcnRfYXJyYXlfa2V5cyhzY2FuLCBtYXJrYmF0Y2gtPmRpcik7 CisKKwkvKgorCSAqIENvcmUgc3lzdGVtIHdpbGwgaW52YWxpZGF0ZSBhbGwgb3RoZXIgYmF0Y2hl cy4KKwkgKgorCSAqIERlYWwgd2l0aCB0aGlzIGJ5IHVuc2V0dGluZyBuZWVkUHJpbVNjYW4gYXMg d2VsbCBhcyBtb3JlUmlnaHQgKG9yIGFzCisJICogd2VsbCBhcyBtb3JlTGVmdCwgd2hlbiBzY2Fu bmluZyBiYWNrd2FyZHMpLiAgVGhhdCB3YXksIHRoZSBuZXh0IHRpbWUKKwkgKiBfYnRfbmV4dCBp cyBjYWxsZWQgaXQgd2lsbCBzdGVwIHRvIHRoZSByaWdodCAob3IgdG8gdGhlIGxlZnQpLiAgQXQg dGhhdAorCSAqIHBvaW50IF9idF9yZWFkcGFnZSB3aWxsIHJlc3RvcmUgdGhlIHNjYW4ncyBhcnJh eXMgdG8gZWxlbWVudHMgdGhhdAorCSAqIGNvcnJlY3RseSB0cmFjayB0aGUgbmV4dCBwYWdlJ3Mg cG9zaXRpb24gaW4gdGhlIGluZGV4J3Mga2V5IHNwYWNlLgorCSAqLworCWlmIChTY2FuRGlyZWN0 aW9uSXNGb3J3YXJkKG1hcmtiYXRjaC0+ZGlyKSkKKwkJbWFya2JhdGNoLT5tb3JlUmlnaHQgPSB0 cnVlOwogCWVsc2UKLQl7Ci0JCUJUU2NhblBvc0ludmFsaWRhdGUoc28tPm1hcmtQb3MpOwotCQlz by0+bWFya0l0ZW1JbmRleCA9IC0xOwotCX0KLX0KLQotLyoKLSAqCWJ0cmVzdHJwb3MoKSAtLSBy ZXN0b3JlIHNjYW4gdG8gbGFzdCBzYXZlZCBwb3NpdGlvbgotICovCi12b2lkCi1idHJlc3RycG9z KEluZGV4U2NhbkRlc2Mgc2NhbikKLXsKLQlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVl KSBzY2FuLT5vcGFxdWU7Ci0KLQlpZiAoc28tPm1hcmtJdGVtSW5kZXggPj0gMCkKLQl7Ci0JCS8q Ci0JCSAqIFRoZSBzY2FuIGhhcyBuZXZlciBtb3ZlZCB0byBhIG5ldyBwYWdlIHNpbmNlIHRoZSBs YXN0IG1hcmsuICBKdXN0Ci0JCSAqIHJlc3RvcmUgdGhlIGl0ZW1JbmRleC4KLQkJICoKLQkJICog TkI6IEluIHRoaXMgY2FzZSB3ZSBjYW4ndCBjb3VudCBvbiBhbnl0aGluZyBpbiBzby0+bWFya1Bv cyB0byBiZQotCQkgKiBhY2N1cmF0ZS4KLQkJICovCi0JCXNvLT5jdXJyUG9zLml0ZW1JbmRleCA9 IHNvLT5tYXJrSXRlbUluZGV4OwotCX0KLQllbHNlCi0JewotCQkvKgotCQkgKiBUaGUgc2NhbiBt b3ZlZCB0byBhIG5ldyBwYWdlIGFmdGVyIGxhc3QgbWFyayBvciByZXN0b3JlLCBhbmQgd2UgYXJl Ci0JCSAqIG5vdyByZXN0b3JpbmcgdG8gdGhlIG1hcmtlZCBwYWdlLiAgV2UgYXJlbid0IGhvbGRp bmcgYW55IHJlYWQKLQkJICogbG9ja3MsIGJ1dCBpZiB3ZSdyZSBzdGlsbCBob2xkaW5nIHRoZSBw aW4gZm9yIHRoZSBjdXJyZW50IHBvc2l0aW9uLAotCQkgKiB3ZSBtdXN0IGRyb3AgaXQuCi0JCSAq LwotCQlpZiAoQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpCi0JCXsKLQkJCS8qIEJlZm9y ZSBsZWF2aW5nIGN1cnJlbnQgcGFnZSwgZGVhbCB3aXRoIGFueSBraWxsZWQgaXRlbXMgKi8KLQkJ CWlmIChzby0+bnVtS2lsbGVkID4gMCkKLQkJCQlfYnRfa2lsbGl0ZW1zKHNjYW4pOwotCQkJQlRT Y2FuUG9zVW5waW5JZlBpbm5lZChzby0+Y3VyclBvcyk7Ci0JCX0KLQotCQlpZiAoQlRTY2FuUG9z SXNWYWxpZChzby0+bWFya1BvcykpCi0JCXsKLQkJCS8qIGJ1bXAgcGluIG9uIG1hcmsgYnVmZmVy IGZvciBhc3NpZ25tZW50IHRvIGN1cnJlbnQgYnVmZmVyICovCi0JCQlpZiAoQlRTY2FuUG9zSXNQ aW5uZWQoc28tPm1hcmtQb3MpKQotCQkJCUluY3JCdWZmZXJSZWZDb3VudChzby0+bWFya1Bvcy5i dWYpOwotCQkJbWVtY3B5KCZzby0+Y3VyclBvcywgJnNvLT5tYXJrUG9zLAotCQkJCSAgIG9mZnNl dG9mKEJUU2NhblBvc0RhdGEsIGl0ZW1zWzFdKSArCi0JCQkJICAgc28tPm1hcmtQb3MubGFzdEl0 ZW0gKiBzaXplb2YoQlRTY2FuUG9zSXRlbSkpOwotCQkJaWYgKHNvLT5jdXJyVHVwbGVzKQotCQkJ CW1lbWNweShzby0+Y3VyclR1cGxlcywgc28tPm1hcmtUdXBsZXMsCi0JCQkJCSAgIHNvLT5tYXJr UG9zLm5leHRUdXBsZU9mZnNldCk7Ci0JCQkvKiBSZXNldCB0aGUgc2NhbidzIGFycmF5IGtleXMg KHNlZSBfYnRfc3RlcHBhZ2UgZm9yIHdoeSkgKi8KLQkJCWlmIChzby0+bnVtQXJyYXlLZXlzKQot CQkJewotCQkJCV9idF9zdGFydF9hcnJheV9rZXlzKHNjYW4sIHNvLT5jdXJyUG9zLmRpcik7Ci0J CQkJc28tPm5lZWRQcmltU2NhbiA9IGZhbHNlOwotCQkJfQotCQl9Ci0JCWVsc2UKLQkJCUJUU2Nh blBvc0ludmFsaWRhdGUoc28tPmN1cnJQb3MpOwotCX0KKwkJbWFya2JhdGNoLT5tb3JlTGVmdCA9 IHRydWU7CisJc28tPm5lZWRQcmltU2NhbiA9IGZhbHNlOworCXNvLT5zY2FuQmVoaW5kID0gZmFs c2U7CisJc28tPm9wcG9zaXRlRGlyQ2hlY2sgPSBmYWxzZTsKIH0KIAogLyoKQEAgLTgyNywxNSAr NjgxLDYgQEAgX2J0X3BhcmFsbGVsX3NlaXplKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmxvY2tOdW1i ZXIgKm5leHRfc2Nhbl9wYWdlLAogCSpuZXh0X3NjYW5fcGFnZSA9IEludmFsaWRCbG9ja051bWJl cjsKIAkqbGFzdF9jdXJyX3BhZ2UgPSBJbnZhbGlkQmxvY2tOdW1iZXI7CiAKLQkvKgotCSAqIFJl c2V0IHNvLT5jdXJyUG9zLCBhbmQgaW5pdGlhbGl6ZSBtb3JlTGVmdC9tb3JlUmlnaHQgc3VjaCB0 aGF0IHRoZSBuZXh0Ci0JICogY2FsbCB0byBfYnRfcmVhZG5leHRwYWdlIHRyZWF0cyB0aGlzIGJh Y2tlbmQgc2ltaWxhcmx5IHRvIGEgc2VyaWFsCi0JICogYmFja2VuZCB0aGF0IHN0ZXBzIGZyb20g Kmxhc3RfY3Vycl9wYWdlIHRvICpuZXh0X3NjYW5fcGFnZSAodW5sZXNzIHRoaXMKLQkgKiBiYWNr ZW5kJ3Mgc28tPmN1cnJQb3MgaXMgaW5pdGlhbGl6ZWQgYnkgX2J0X3JlYWRmaXJzdHBhZ2UgYmVm b3JlIHRoZW4pLgotCSAqLwotCUJUU2NhblBvc0ludmFsaWRhdGUoc28tPmN1cnJQb3MpOwotCXNv LT5jdXJyUG9zLm1vcmVMZWZ0ID0gc28tPmN1cnJQb3MubW9yZVJpZ2h0ID0gdHJ1ZTsKLQogCWlm IChmaXJzdCkKIAl7CiAJCS8qCkBAIC05ODUsOCArODMwLDYgQEAgX2J0X3BhcmFsbGVsX2RvbmUo SW5kZXhTY2FuRGVzYyBzY2FuKQogCUJUUGFyYWxsZWxTY2FuRGVzYyBidHNjYW47CiAJYm9vbAkJ c3RhdHVzX2NoYW5nZWQgPSBmYWxzZTsKIAotCUFzc2VydCghQlRTY2FuUG9zSXNWYWxpZChzby0+ Y3VyclBvcykpOwotCiAJLyogRG8gbm90aGluZywgZm9yIG5vbi1wYXJhbGxlbCBzY2FucyAqLwog CWlmIChwYXJhbGxlbF9zY2FuID09IE5VTEwpCiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2VhcmNoLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0 cmVlL25idHNlYXJjaC5jCmluZGV4IDA2MDUzNTZlYy4uNzJjNzk4MTMyIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNlYXJjaC5jCisrKyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9uYnRyZWUvbmJ0c2VhcmNoLmMKQEAgLTI1LDYyICsyNSwzMyBAQAogI2luY2x1ZGUgInV0 aWxzL3JlbC5oIgogCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfYnRfZHJvcF9sb2NrX2FuZF9tYXli ZV9waW4oUmVsYXRpb24gcmVsLCBCVFNjYW5PcGFxdWUgc28pOwogc3RhdGljIEJ1ZmZlciBfYnRf bW92ZXJpZ2h0KFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcHJlbCwgQlRTY2FuSW5zZXJ0IGtl eSwKIAkJCQkJCQlCdWZmZXIgYnVmLCBib29sIGZvcnVwZGF0ZSwgQlRTdGFjayBzdGFjaywKIAkJ CQkJCQlpbnQgYWNjZXNzKTsKIHN0YXRpYyBPZmZzZXROdW1iZXIgX2J0X2JpbnNyY2goUmVsYXRp b24gcmVsLCBCVFNjYW5JbnNlcnQga2V5LCBCdWZmZXIgYnVmKTsKIHN0YXRpYyBpbnQJX2J0X2Jp bnNyY2hfcG9zdGluZyhCVFNjYW5JbnNlcnQga2V5LCBQYWdlIHBhZ2UsCiAJCQkJCQkJCU9mZnNl dE51bWJlciBvZmZudW0pOwotc3RhdGljIGJvb2wgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mg c2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsCi0JCQkJCQkgT2Zmc2V0TnVtYmVyIG9mZm51bSwgYm9v bCBmaXJzdHBhZ2UpOwotc3RhdGljIHZvaWQgX2J0X3NhdmVpdGVtKEJUU2Nhbk9wYXF1ZSBzbywg aW50IGl0ZW1JbmRleCwKLQkJCQkJCSBPZmZzZXROdW1iZXIgb2ZmbnVtLCBJbmRleFR1cGxlIGl0 dXApOwotc3RhdGljIGludAlfYnRfc2V0dXBwb3N0aW5naXRlbXMoQlRTY2FuT3BhcXVlIHNvLCBp bnQgaXRlbUluZGV4LAorc3RhdGljIGJvb2wgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2Nh biwgQmF0Y2hJbmRleFNjYW4gbmV3YmF0Y2gsCisJCQkJCQkgU2NhbkRpcmVjdGlvbiBkaXIsIE9m ZnNldE51bWJlciBvZmZudW0sCisJCQkJCQkgYm9vbCBmaXJzdHBhZ2UpOworc3RhdGljIHZvaWQg X2J0X3NhdmVpdGVtKEJhdGNoSW5kZXhTY2FuIG5ld2JhdGNoLCBpbnQgaXRlbUluZGV4LAorCQkJ CQkJIE9mZnNldE51bWJlciBvZmZudW0sIEluZGV4VHVwbGUgaXR1cCwKKwkJCQkJCSBpbnQgKnR1 cGxlT2Zmc2V0KTsKK3N0YXRpYyBpbnQJX2J0X3NldHVwcG9zdGluZ2l0ZW1zKEJhdGNoSW5kZXhT Y2FuIG5ld2JhdGNoLCBpbnQgaXRlbUluZGV4LAogCQkJCQkJCQkgIE9mZnNldE51bWJlciBvZmZu dW0sIGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAqaGVhcFRpZCwKLQkJCQkJCQkJICBJbmRleFR1cGxl IGl0dXApOwotc3RhdGljIGlubGluZSB2b2lkIF9idF9zYXZlcG9zdGluZ2l0ZW0oQlRTY2FuT3Bh cXVlIHNvLCBpbnQgaXRlbUluZGV4LAorCQkJCQkJCQkgIEluZGV4VHVwbGUgaXR1cCwgaW50ICp0 dXBsZU9mZnNldCk7CitzdGF0aWMgaW5saW5lIHZvaWQgX2J0X3NhdmVwb3N0aW5naXRlbShCYXRj aEluZGV4U2NhbiBuZXdiYXRjaCwgaW50IGl0ZW1JbmRleCwKIAkJCQkJCQkJCSAgIE9mZnNldE51 bWJlciBvZmZudW0sCi0JCQkJCQkJCQkgICBJdGVtUG9pbnRlciBoZWFwVGlkLCBpbnQgdHVwbGVP ZmZzZXQpOwotc3RhdGljIGlubGluZSB2b2lkIF9idF9yZXR1cm5pdGVtKEluZGV4U2NhbkRlc2Mg c2NhbiwgQlRTY2FuT3BhcXVlIHNvKTsKLXN0YXRpYyBib29sIF9idF9zdGVwcGFnZShJbmRleFNj YW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsKLXN0YXRpYyBib29sIF9idF9yZWFkZmly c3RwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKLQkJCQkJCQkg IFNjYW5EaXJlY3Rpb24gZGlyKTsKLXN0YXRpYyBib29sIF9idF9yZWFkbmV4dHBhZ2UoSW5kZXhT Y2FuRGVzYyBzY2FuLCBCbG9ja051bWJlciBibGtubywKLQkJCQkJCQkgQmxvY2tOdW1iZXIgbGFz dGN1cnJibGtubywgU2NhbkRpcmVjdGlvbiBkaXIsCi0JCQkJCQkJIGJvb2wgc2VpemVkKTsKKwkJ CQkJCQkJCSAgIEl0ZW1Qb2ludGVyIGhlYXBUaWQsIGludCBiYXNlT2Zmc2V0KTsKK3N0YXRpYyBC YXRjaEluZGV4U2NhbiBfYnRfcmVhZGZpcnN0cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIEJhdGNo SW5kZXhTY2FuIGZpcnN0YmF0Y2gsCisJCQkJCQkJCQkJT2Zmc2V0TnVtYmVyIG9mZm51bSwgU2Nh bkRpcmVjdGlvbiBkaXIpOworc3RhdGljIEJhdGNoSW5kZXhTY2FuIF9idF9yZWFkbmV4dHBhZ2Uo SW5kZXhTY2FuRGVzYyBzY2FuLCBCbG9ja051bWJlciBibGtubywKKwkJCQkJCQkJCSAgIEJsb2Nr TnVtYmVyIGxhc3RjdXJyYmxrbm8sCisJCQkJCQkJCQkgICBTY2FuRGlyZWN0aW9uIGRpciwgYm9v bCBmaXJzdHBhZ2UpOwogc3RhdGljIEJ1ZmZlciBfYnRfbG9ja19hbmRfdmFsaWRhdGVfbGVmdChS ZWxhdGlvbiByZWwsIEJsb2NrTnVtYmVyICpibGtubywKIAkJCQkJCQkJCQkgQmxvY2tOdW1iZXIg bGFzdGN1cnJibGtubyk7Ci1zdGF0aWMgYm9vbCBfYnRfZW5kcG9pbnQoSW5kZXhTY2FuRGVzYyBz Y2FuLCBTY2FuRGlyZWN0aW9uIGRpcik7Ci0KLQotLyoKLSAqCV9idF9kcm9wX2xvY2tfYW5kX21h eWJlX3BpbigpCi0gKgotICogVW5sb2NrIHNvLT5jdXJyUG9zLmJ1Zi4gIElmIHNjYW4gaXMgc28t PmRyb3BQaW4sIGRyb3AgdGhlIHBpbiwgdG9vLgotICogRHJvcHBpbmcgdGhlIHBpbiBwcmV2ZW50 cyBWQUNVVU0gZnJvbSBibG9ja2luZyBvbiBhY3F1aXJpbmcgYSBjbGVhbnVwIGxvY2suCi0gKi8K LXN0YXRpYyBpbmxpbmUgdm9pZAotX2J0X2Ryb3BfbG9ja19hbmRfbWF5YmVfcGluKFJlbGF0aW9u IHJlbCwgQlRTY2FuT3BhcXVlIHNvKQotewotCWlmICghc28tPmRyb3BQaW4pCi0JewotCQkvKiBK dXN0IGRyb3AgdGhlIGxvY2sgKG5vdCB0aGUgcGluKSAqLwotCQlfYnRfdW5sb2NrYnVmKHJlbCwg c28tPmN1cnJQb3MuYnVmKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qCi0JICogRHJvcCBib3RoIHRo ZSBsb2NrIGFuZCB0aGUgcGluLgotCSAqCi0JICogSGF2ZSB0byBzZXQgc28tPmN1cnJQb3MubHNu IHNvIHRoYXQgX2J0X2tpbGxpdGVtcyBoYXMgYSB3YXkgdG8gZGV0ZWN0Ci0JICogd2hlbiBjb25j dXJyZW50IGhlYXAgVElEIHJlY3ljbGluZyBieSBWQUNVVU0gbWlnaHQgaGF2ZSB0YWtlbiBwbGFj ZS4KLQkgKi8KLQlBc3NlcnQoUmVsYXRpb25OZWVkc1dBTChyZWwpKTsKLQlzby0+Y3VyclBvcy5s c24gPSBCdWZmZXJHZXRMU05BdG9taWMoc28tPmN1cnJQb3MuYnVmKTsKLQlfYnRfcmVsYnVmKHJl bCwgc28tPmN1cnJQb3MuYnVmKTsKLQlzby0+Y3VyclBvcy5idWYgPSBJbnZhbGlkQnVmZmVyOwot fQorc3RhdGljIEJhdGNoSW5kZXhTY2FuIF9idF9lbmRwb2ludChJbmRleFNjYW5EZXNjIHNjYW4s IFNjYW5EaXJlY3Rpb24gZGlyLAorCQkJCQkJCQkgICBCYXRjaEluZGV4U2NhbiBmaXJzdGJhdGNo KTsKIAogLyoKICAqCV9idF9zZWFyY2goKSAtLSBTZWFyY2ggdGhlIHRyZWUgZm9yIGEgcGFydGlj dWxhciBzY2Fua2V5LApAQCAtODcwLDIwICs4NDEsMTYgQEAgX2J0X2NvbXBhcmUoUmVsYXRpb24g cmVsLAogICoJCWNvbmRpdGlvbnMsIGFuZCB0aGUgdHJlZSBvcmRlcmluZy4gIFdlIGZpbmQgdGhl IGZpcnN0IGl0ZW0gKG9yLAogICoJCWlmIGJhY2t3YXJkcyBzY2FuLCB0aGUgbGFzdCBpdGVtKSBp biB0aGUgdHJlZSB0aGF0IHNhdGlzZmllcyB0aGUKICAqCQlxdWFsaWZpY2F0aW9ucyBpbiB0aGUg c2NhbiBrZXkuICBPbiBzdWNjZXNzIGV4aXQsIGRhdGEgYWJvdXQgdGhlCi0gKgkJbWF0Y2hpbmcg dHVwbGUocykgb24gdGhlIHBhZ2UgaGFzIGJlZW4gbG9hZGVkIGludG8gc28tPmN1cnJQb3MuICBX ZSdsbAotICoJCWRyb3AgYWxsIGxvY2tzIGFuZCBob2xkIG9udG8gYSBwaW4gb24gcGFnZSdzIGJ1 ZmZlciwgZXhjZXB0IGR1cmluZwotICoJCXNvLT5kcm9wUGluIHNjYW5zLCB3aGVuIHdlIGRyb3Ag Ym90aCB0aGUgbG9jayBhbmQgdGhlIHBpbi4KLSAqCQlfYnRfcmV0dXJuaXRlbSBzZXRzIHRoZSBu ZXh0IGl0ZW0gdG8gcmV0dXJuIHRvIHNjYW4gb24gc3VjY2VzcyBleGl0LgorICoJCW1hdGNoaW5n IHR1cGxlKHMpIG9uIHRoZSBwYWdlIGhhcyBiZWVuIGxvYWRlZCBpbnRvIHRoZSByZXR1cm5lZCBi YXRjaC4KICAqCi0gKiBJZiB0aGVyZSBhcmUgbm8gbWF0Y2hpbmcgaXRlbXMgaW4gdGhlIGluZGV4 LCB3ZSByZXR1cm4gZmFsc2UsIHdpdGggbm8KLSAqIHBpbnMgb3IgbG9ja3MgaGVsZC4gIHNvLT5j dXJyUG9zIHdpbGwgcmVtYWluIGludmFsaWQuCisgKiBJZiB0aGVyZSBhcmUgbm8gbWF0Y2hpbmcg aXRlbXMgaW4gdGhlIGluZGV4LCB3ZSBqdXN0IHJldHVybiBOVUxMLgogICoKICAqIE5vdGUgdGhh dCBzY2FuLT5rZXlEYXRhW10sIGFuZCB0aGUgc28tPmtleURhdGFbXSBzY2Fua2V5IGJ1aWx0IGZy b20gaXQsCiAgKiBhcmUgYm90aCBzZWFyY2gtdHlwZSBzY2Fua2V5cyAoc2VlIG5idHJlZS9SRUFE TUUgZm9yIG1vcmUgYWJvdXQgdGhpcykuCiAgKiBXaXRoaW4gdGhpcyByb3V0aW5lLCB3ZSBidWls ZCBhIHRlbXBvcmFyeSBpbnNlcnRpb24tdHlwZSBzY2Fua2V5IHRvIHVzZQogICogaW4gbG9jYXRp bmcgdGhlIHNjYW4gc3RhcnQgcG9zaXRpb24uCiAgKi8KLWJvb2wKK0JhdGNoSW5kZXhTY2FuCiBf YnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIHsKIAlSZWxh dGlvbglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOwpAQCAtODk3LDggKzg2NCw3IEBAIF9idF9m aXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCVN0cmF0ZWd5TnVt YmVyIHN0cmF0X3RvdGFsID0gSW52YWxpZFN0cmF0ZWd5OwogCUJsb2NrTnVtYmVyIGJsa25vID0g SW52YWxpZEJsb2NrTnVtYmVyLAogCQkJCWxhc3RjdXJyYmxrbm87Ci0KLQlBc3NlcnQoIUJUU2Nh blBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKTsKKwlCYXRjaEluZGV4U2NhbiBmaXJzdGJhdGNoOwog CiAJLyoKIAkgKiBFeGFtaW5lIHRoZSBzY2FuIGtleXMgYW5kIGVsaW1pbmF0ZSBhbnkgcmVkdW5k YW50IGtleXM7IGFsc28gbWFyayB0aGUKQEAgLTkyMyw3ICs4ODksNyBAQCBfYnRfZmlyc3QoSW5k ZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAkgKi8KIAlpZiAoc2Nhbi0+cGFy YWxsZWxfc2NhbiAhPSBOVUxMICYmCiAJCSFfYnRfcGFyYWxsZWxfc2VpemUoc2NhbiwgJmJsa25v LCAmbGFzdGN1cnJibGtubywgdHJ1ZSkpCi0JCXJldHVybiBmYWxzZTsKKwkJcmV0dXJuIGZhbHNl OwkJCS8qIGRlZmluaXRlbHkgZG9uZSAoc28tPm5lZWRQcmltU2NhbiBpcyB1bnNldCkgKi8KIAog CS8qCiAJICogSW5pdGlhbGl6ZSB0aGUgc2NhbidzIGFycmF5cyAoaWYgYW55KSBmb3IgdGhlIGN1 cnJlbnQgc2NhbiBkaXJlY3Rpb24KQEAgLTk0MCwxNCArOTA2LDggQEAgX2J0X2ZpcnN0KEluZGV4 U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJCSAqIF9idF9yZWFkbmV4dHBhZ2Ug cmVsZWFzZXMgdGhlIHNjYW4gZm9yIHVzIChub3QgX2J0X3JlYWRmaXJzdHBhZ2UpLgogCQkgKi8K IAkJQXNzZXJ0KHNjYW4tPnBhcmFsbGVsX3NjYW4gIT0gTlVMTCk7Ci0JCUFzc2VydCghc28tPm5l ZWRQcmltU2Nhbik7Ci0JCUFzc2VydChibGtubyAhPSBQX05PTkUpOwogCi0JCWlmICghX2J0X3Jl YWRuZXh0cGFnZShzY2FuLCBibGtubywgbGFzdGN1cnJibGtubywgZGlyLCB0cnVlKSkKLQkJCXJl dHVybiBmYWxzZTsKLQotCQlfYnRfcmV0dXJuaXRlbShzY2FuLCBzbyk7Ci0JCXJldHVybiB0cnVl OworCQlyZXR1cm4gX2J0X3JlYWRuZXh0cGFnZShzY2FuLCBibGtubywgbGFzdGN1cnJibGtubywg ZGlyLCB0cnVlKTsKIAl9CiAKIAkvKgpAQCAtMTIzOSw2ICsxMTk5LDEwIEBAIF9idF9maXJzdChJ bmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCQl9CiAJfQogCisJLyogQWxs b2NhdGUgc3BhY2UgZm9yIGZpcnN0IGJhdGNoICovCisJZmlyc3RiYXRjaCA9IGluZGV4YW1fdXRp bF9iYXRjaF9hbGxvYyhzY2FuLCBNYXhUSURzUGVyQlRyZWVQYWdlLAorCQkJCQkJCQkJCSAgc2Nh bi0+eHNfd2FudF9pdHVwKTsKKwogCS8qCiAJICogSWYgd2UgZm91bmQgbm8gdXNhYmxlIGJvdW5k YXJ5IGtleXMsIHdlIGhhdmUgdG8gc3RhcnQgZnJvbSBvbmUgZW5kIG9mCiAJICogdGhlIHRyZWUu ICBXYWxrIGRvd24gdGhhdCBlZGdlIHRvIHRoZSBmaXJzdCBvciBsYXN0IGtleSwgYW5kIHNjYW4g ZnJvbQpAQCAtMTI0Nyw3ICsxMjExLDcgQEAgX2J0X2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2Nhbiwg U2NhbkRpcmVjdGlvbiBkaXIpCiAJICogTm90ZTogY2FsbHMgX2J0X3JlYWRmaXJzdHBhZ2UgZm9y IHVzLCB3aGljaCByZWxlYXNlcyB0aGUgcGFyYWxsZWwgc2Nhbi4KIAkgKi8KIAlpZiAoa2V5c3og PT0gMCkKLQkJcmV0dXJuIF9idF9lbmRwb2ludChzY2FuLCBkaXIpOworCQlyZXR1cm4gX2J0X2Vu ZHBvaW50KHNjYW4sIGRpciwgZmlyc3RiYXRjaCk7CiAKIAkvKgogCSAqIFdlIHdhbnQgdG8gc3Rh cnQgdGhlIHNjYW4gc29tZXdoZXJlIHdpdGhpbiB0aGUgaW5kZXguICBTZXQgdXAgYW4KQEAgLTE1 MTUsMTIgKzE0NzksMTIgQEAgX2J0X2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVj dGlvbiBkaXIpCiAJICogcG9zaXRpb24gb3Vyc2VsdmVzIG9uIHRoZSB0YXJnZXQgbGVhZiBwYWdl LgogCSAqLwogCUFzc2VydChTY2FuRGlyZWN0aW9uSXNCYWNrd2FyZChkaXIpID09IGluc2tleS5i YWNrd2FyZCk7Ci0Jc3RhY2sgPSBfYnRfc2VhcmNoKHJlbCwgTlVMTCwgJmluc2tleSwgJnNvLT5j dXJyUG9zLmJ1ZiwgQlRfUkVBRCk7CisJc3RhY2sgPSBfYnRfc2VhcmNoKHJlbCwgTlVMTCwgJmlu c2tleSwgJmZpcnN0YmF0Y2gtPmJ1ZiwgQlRfUkVBRCk7CiAKIAkvKiBkb24ndCBuZWVkIHRvIGtl ZXAgdGhlIHN0YWNrIGFyb3VuZC4uLiAqLwogCV9idF9mcmVlc3RhY2soc3RhY2spOwogCi0JaWYg KCFCdWZmZXJJc1ZhbGlkKHNvLT5jdXJyUG9zLmJ1ZikpCisJaWYgKCFCdWZmZXJJc1ZhbGlkKGZp cnN0YmF0Y2gtPmJ1ZikpCiAJewogCQlBc3NlcnQoIXNvLT5uZWVkUHJpbVNjYW4pOwogCkBAIC0x NTM2LDExICsxNTAwLDExIEBAIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJl Y3Rpb24gZGlyKQogCQlpZiAoSXNvbGF0aW9uSXNTZXJpYWxpemFibGUoKSkKIAkJewogCQkJUHJl ZGljYXRlTG9ja1JlbGF0aW9uKHJlbCwgc2Nhbi0+eHNfc25hcHNob3QpOwotCQkJc3RhY2sgPSBf YnRfc2VhcmNoKHJlbCwgTlVMTCwgJmluc2tleSwgJnNvLT5jdXJyUG9zLmJ1ZiwgQlRfUkVBRCk7 CisJCQlzdGFjayA9IF9idF9zZWFyY2gocmVsLCBOVUxMLCAmaW5za2V5LCAmZmlyc3RiYXRjaC0+ YnVmLCBCVF9SRUFEKTsKIAkJCV9idF9mcmVlc3RhY2soc3RhY2spOwogCQl9CiAKLQkJaWYgKCFC dWZmZXJJc1ZhbGlkKHNvLT5jdXJyUG9zLmJ1ZikpCisJCWlmICghQnVmZmVySXNWYWxpZChmaXJz dGJhdGNoLT5idWYpKQogCQl7CiAJCQlfYnRfcGFyYWxsZWxfZG9uZShzY2FuKTsKIAkJCXJldHVy biBmYWxzZTsKQEAgLTE1NDgsMTEgKzE1MTIsMTEgQEAgX2J0X2ZpcnN0KEluZGV4U2NhbkRlc2Mg c2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJfQogCiAJLyogcG9zaXRpb24gdG8gdGhlIHByZWNp c2UgaXRlbSBvbiB0aGUgcGFnZSAqLwotCW9mZm51bSA9IF9idF9iaW5zcmNoKHJlbCwgJmluc2tl eSwgc28tPmN1cnJQb3MuYnVmKTsKKwlvZmZudW0gPSBfYnRfYmluc3JjaChyZWwsICZpbnNrZXks IGZpcnN0YmF0Y2gtPmJ1Zik7CiAKIAkvKgogCSAqIE5vdyBsb2FkIGRhdGEgZnJvbSB0aGUgZmly c3QgcGFnZSBvZiB0aGUgc2NhbiAodXN1YWxseSB0aGUgcGFnZQotCSAqIGN1cnJlbnRseSBpbiBz by0+Y3VyclBvcy5idWYpLgorCSAqIGN1cnJlbnRseSBpbiBmaXJzdGJhdGNoLmJ1ZikuCiAJICoK IAkgKiBJZiBpbnNrZXkubmV4dGtleSA9IGZhbHNlIGFuZCBpbnNrZXkuYmFja3dhcmQgPSBmYWxz ZSwgb2ZmbnVtIGlzCiAJICogcG9zaXRpb25lZCBhdCB0aGUgZmlyc3Qgbm9uLXBpdm90IHR1cGxl ID49IGluc2tleS5zY2Fua2V5cy4KQEAgLTE1NzAsNjkgKzE1MzQsNzggQEAgX2J0X2ZpcnN0KElu ZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJICogZm9yIHRoZSBwYWdlLiAg Rm9yIGV4YW1wbGUsIHdoZW4gaW5za2V5IGlzIGJvdGggPCB0aGUgbGVhZiBwYWdlJ3MgaGlnaAog CSAqIGtleSBhbmQgPiBhbGwgb2YgaXRzIG5vbi1waXZvdCB0dXBsZXMsIG9mZm51bSB3aWxsIGJl ICJtYXhvZmYgKyAxIi4KIAkgKi8KLQlpZiAoIV9idF9yZWFkZmlyc3RwYWdlKHNjYW4sIG9mZm51 bSwgZGlyKSkKLQkJcmV0dXJuIGZhbHNlOwotCi0JX2J0X3JldHVybml0ZW0oc2Nhbiwgc28pOwot CXJldHVybiB0cnVlOworCXJldHVybiBfYnRfcmVhZGZpcnN0cGFnZShzY2FuLCBmaXJzdGJhdGNo LCBvZmZudW0sIGRpcik7CiB9CiAKIC8qCiAgKglfYnRfbmV4dCgpIC0tIEdldCB0aGUgbmV4dCBp dGVtIGluIGEgc2Nhbi4KICAqCi0gKgkJT24gZW50cnksIHNvLT5jdXJyUG9zIGRlc2NyaWJlcyB0 aGUgY3VycmVudCBwYWdlLCB3aGljaCBtYXkgYmUgcGlubmVkCi0gKgkJYnV0IGlzIG5vdCBsb2Nr ZWQsIGFuZCBzby0+Y3VyclBvcy5pdGVtSW5kZXggaWRlbnRpZmllcyB3aGljaCBpdGVtIHdhcwot ICoJCXByZXZpb3VzbHkgcmV0dXJuZWQuCisgKgkJT24gZW50cnksIHByaW9yYmF0Y2ggZGVzY3Jp YmVzIHRoZSBiYXRjaCB0aGF0IHdhcyBsYXN0IHJldHVybmVkIGJ5CisgKgkJYnRnZXRiYXRjaC4g IFdlJ2xsIHVzZSB0aGUgcHJpb3IgYmF0Y2gncyBwb3NpdGlvbmluZyBpbmZvcm1hdGlvbiB0bwor ICoJCWRlY2lkZSB3aGljaCBwYWdlIHRvIHJlYWQgbmV4dC4KICAqCi0gKgkJT24gc3VjY2VzcyBl eGl0LCBzby0+Y3VyclBvcyBpcyB1cGRhdGVkIGFzIG5lZWRlZCwgYW5kIF9idF9yZXR1cm5pdGVt Ci0gKgkJc2V0cyB0aGUgbmV4dCBpdGVtIHRvIHJldHVybiB0byB0aGUgc2Nhbi4gIHNvLT5jdXJy UG9zIHJlbWFpbnMgdmFsaWQuCisgKgkJT24gc3VjY2VzcyBleGl0LCByZXR1cm5zIHRoZSBuZXh0 IGJhdGNoLiAgVGhlcmUgbXVzdCBiZSBhdCBsZWFzdCBvbmUKKyAqCQltYXRjaGluZyB0dXBsZSBv biBhbnkgcmV0dXJuZWQgYmF0Y2ggKGVsc2Ugd2UnZCBqdXN0IHJldHVybiBOVUxMKS4KICAqCi0g KgkJT24gZmFpbHVyZSBleGl0IChubyBtb3JlIHR1cGxlcyksIHdlIGludmFsaWRhdGUgc28tPmN1 cnJQb3MuICBJdCdsbAotICoJCXN0aWxsIGJlIHBvc3NpYmxlIGZvciB0aGUgc2NhbiB0byByZXR1 cm4gdHVwbGVzIGJ5IGNoYW5naW5nIGRpcmVjdGlvbiwKLSAqCQl0aG91Z2ggd2UnbGwgbmVlZCB0 byBjYWxsIF9idF9maXJzdCBhbmV3IGluIHRoYXQgb3RoZXIgZGlyZWN0aW9uLgorICoJCU9uIGZh aWx1cmUgZXhpdCAobm8gbW9yZSB0dXBsZXMpLCB3ZSByZXR1cm4gTlVMTC4gIEl0J2xsIHN0aWxs IGJlCisgKgkJcG9zc2libGUgZm9yIHRoZSBzY2FuIHRvIHJldHVybiB0dXBsZXMgYnkgY2hhbmdp bmcgZGlyZWN0aW9uLCB0aG91Z2gKKyAqCQl3ZSdsbCBuZWVkIHRvIGNhbGwgX2J0X2ZpcnN0IGFu ZXcgaW4gdGhhdCBvdGhlciBkaXJlY3Rpb24uCiAgKi8KLWJvb2wKLV9idF9uZXh0KEluZGV4U2Nh bkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCitCYXRjaEluZGV4U2NhbgorX2J0X25leHQo SW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgQmF0Y2hJbmRleFNjYW4gcHJp b3JiYXRjaCkKIHsKIAlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFx dWU7CisJQmxvY2tOdW1iZXIgYmxrbm8sCisJCQkJbGFzdGN1cnJibGtubzsKIAotCUFzc2VydChC VFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSk7CisJQXNzZXJ0KEJsb2NrTnVtYmVySXNWYWxp ZChwcmlvcmJhdGNoLT5jdXJyUGFnZSkpOworCisJLyogV2FsayB0byB0aGUgbmV4dCBwYWdlIHdp dGggZGF0YSAqLworCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCisJCWJsa25vID0g cHJpb3JiYXRjaC0+bmV4dFBhZ2U7CisJZWxzZQorCQlibGtubyA9IHByaW9yYmF0Y2gtPnByZXZQ YWdlOworCWxhc3RjdXJyYmxrbm8gPSBwcmlvcmJhdGNoLT5jdXJyUGFnZTsKIAogCS8qCi0JICog QWR2YW5jZSB0byBuZXh0IHR1cGxlIG9uIGN1cnJlbnQgcGFnZTsgb3IgaWYgdGhlcmUncyBubyBt b3JlLCB0cnkgdG8KLQkgKiBzdGVwIHRvIHRoZSBuZXh0IHBhZ2Ugd2l0aCBkYXRhLgorCSAqIENh bmNlbCBwcmltaXRpdmUgaW5kZXggc2NhbnMgdGhhdCB3ZXJlIHNjaGVkdWxlZCB3aGVuIHRoZSBj YWxsIHRvCisJICogX2J0X3JlYWRwYWdlIGZvciBwb3MgaGFwcGVuZWQgdG8gdXNlIHRoZSBvcHBv c2l0ZSBkaXJlY3Rpb24gdG8gdGhlIG9uZQorCSAqIHRoYXQgd2UncmUgc3RlcHBpbmcgaW4gbm93 LiAgKEl0J3Mgb2theSB0byBsZWF2ZSB0aGUgc2NhbidzIGFycmF5IGtleXMKKwkgKiBhcy1pcywg c2luY2UgdGhlIG5leHQgX2J0X3JlYWRwYWdlIHdpbGwgYWR2YW5jZSB0aGVtLikKIAkgKi8KLQlp ZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpKQorCWlmIChwcmlvcmJhdGNoLT5kaXIgIT0g ZGlyKQorCQlzby0+bmVlZFByaW1TY2FuID0gZmFsc2U7CisKKwlpZiAoYmxrbm8gPT0gUF9OT05F IHx8CisJCShTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikgPworCQkgIXByaW9yYmF0Y2gtPm1v cmVSaWdodCA6ICFwcmlvcmJhdGNoLT5tb3JlTGVmdCkpCiAJewotCQlpZiAoKytzby0+Y3VyclBv cy5pdGVtSW5kZXggPiBzby0+Y3VyclBvcy5sYXN0SXRlbSkKLQkJewotCQkJaWYgKCFfYnRfc3Rl cHBhZ2Uoc2NhbiwgZGlyKSkKLQkJCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQl9Ci0JZWxzZQotCXsK LQkJaWYgKC0tc28tPmN1cnJQb3MuaXRlbUluZGV4IDwgc28tPmN1cnJQb3MuZmlyc3RJdGVtKQot CQl7Ci0JCQlpZiAoIV9idF9zdGVwcGFnZShzY2FuLCBkaXIpKQotCQkJCXJldHVybiBmYWxzZTsK LQkJfQorCQkvKgorCQkgKiBwcmlvcmJhdGNoIF9idF9yZWFkcGFnZSBjYWxsIGVuZGVkIHNjYW4g aW4gdGhpcyBkaXJlY3Rpb24gKHRob3VnaAorCQkgKiBpZiBzby0+bmVlZFByaW1TY2FuIHdhcyBz ZXQgdGhlIHNjYW4gd2lsbCBjb250aW51ZSBpbiBfYnRfZmlyc3QpCisJCSAqLworCQlfYnRfcGFy YWxsZWxfZG9uZShzY2FuKTsKKwkJcmV0dXJuIE5VTEw7CiAJfQogCi0JX2J0X3JldHVybml0ZW0o c2Nhbiwgc28pOwotCXJldHVybiB0cnVlOworCS8qIHBhcmFsbGVsIHNjYW4gbXVzdCBzZWl6ZSB0 aGUgc2NhbiB0byBnZXQgbmV4dCBibGtubyAqLworCWlmIChzY2FuLT5wYXJhbGxlbF9zY2FuICE9 IE5VTEwgJiYKKwkJIV9idF9wYXJhbGxlbF9zZWl6ZShzY2FuLCAmYmxrbm8sICZsYXN0Y3VycmJs a25vLCBmYWxzZSkpCisJCXJldHVybiBOVUxMOwkJCS8qIGRvbmUgaWZmIHNvLT5uZWVkUHJpbVNj YW4gd2Fzbid0IHNldCAqLworCisJcmV0dXJuIF9idF9yZWFkbmV4dHBhZ2Uoc2NhbiwgYmxrbm8s IGxhc3RjdXJyYmxrbm8sIGRpciwgZmFsc2UpOwogfQogCiAvKgotICoJX2J0X3JlYWRwYWdlKCkg LS0gTG9hZCBkYXRhIGZyb20gY3VycmVudCBpbmRleCBwYWdlIGludG8gc28tPmN1cnJQb3MKKyAq CV9idF9yZWFkcGFnZSgpIC0tIExvYWQgZGF0YSBmcm9tIGN1cnJlbnQgaW5kZXggcGFnZSBpbnRv IG5ld2JhdGNoLgogICoKLSAqIENhbGxlciBtdXN0IGhhdmUgcGlubmVkIGFuZCByZWFkLWxvY2tl ZCBzby0+Y3VyclBvcy5idWY7IHRoZSBidWZmZXIncyBzdGF0ZQotICogaXMgbm90IGNoYW5nZWQg aGVyZS4gIEFsc28sIGN1cnJQb3MubW9yZUxlZnQgYW5kIG1vcmVSaWdodCBtdXN0IGJlIHZhbGlk OwotICogdGhleSBhcmUgdXBkYXRlZCBhcyBhcHByb3ByaWF0ZS4gIEFsbCBvdGhlciBmaWVsZHMg b2Ygc28tPmN1cnJQb3MgYXJlCi0gKiBpbml0aWFsaXplZCBmcm9tIHNjcmF0Y2ggaGVyZS4KKyAq IENhbGxlciBtdXN0IGhhdmUgcGlubmVkIGFuZCByZWFkLWxvY2tlZCBuZXdiYXRjaC5idWY7IHRo ZSBidWZmZXIncyBzdGF0ZSBpcworICogbm90IGNoYW5nZWQgaGVyZS4gIEFsc28sIHBvcy5tb3Jl TGVmdCBhbmQgbW9yZVJpZ2h0IG11c3QgYmUgdmFsaWQ7IHRoZXkgYXJlCisgKiB1cGRhdGVkIGFz IGFwcHJvcHJpYXRlLiAgQWxsIG90aGVyIGZpZWxkcyBvZiBuZXdiYXRjaCBhcmUgaW5pdGlhbGl6 ZWQgZnJvbQorICogc2NyYXRjaCBoZXJlLgogICoKICAqIFdlIHNjYW4gdGhlIGN1cnJlbnQgcGFn ZSBzdGFydGluZyBhdCBvZmZudW0gYW5kIG1vdmluZyBpbiB0aGUgaW5kaWNhdGVkCi0gKiBkaXJl Y3Rpb24uICBBbGwgaXRlbXMgbWF0Y2hpbmcgdGhlIHNjYW4ga2V5cyBhcmUgbG9hZGVkIGludG8g Y3VyclBvcy5pdGVtcy4KKyAqIGRpcmVjdGlvbi4gIEFsbCBpdGVtcyBtYXRjaGluZyB0aGUgc2Nh biBrZXlzIGFyZSBzYXZlZCBpbiBuZXdiYXRjaC5pdGVtcy4KICAqIG1vcmVMZWZ0IG9yIG1vcmVS aWdodCAoYXMgYXBwcm9wcmlhdGUpIGlzIGNsZWFyZWQgaWYgX2J0X2NoZWNra2V5cyByZXBvcnRz CiAgKiB0aGF0IHRoZXJlIGNhbiBiZSBubyBtb3JlIG1hdGNoaW5nIHR1cGxlcyBpbiB0aGUgY3Vy cmVudCBzY2FuIGRpcmVjdGlvbgogICogKGNvdWxkIGp1c3QgYmUgZm9yIHRoZSBjdXJyZW50IHBy aW1pdGl2ZSBpbmRleCBzY2FuIHdoZW4gc2NhbiBoYXMgYXJyYXlzKS4KQEAgLTE2NDQsOCArMTYx Nyw4IEBAIF9idF9uZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAg KiBSZXR1cm5zIHRydWUgaWYgYW55IG1hdGNoaW5nIGl0ZW1zIGZvdW5kIG9uIHRoZSBwYWdlLCBm YWxzZSBpZiBub25lLgogICovCiBzdGF0aWMgYm9vbAotX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRl c2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNldE51bWJlciBvZmZudW0sCi0JCQkgYm9v bCBmaXJzdHBhZ2UpCitfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBCYXRjaEluZGV4 U2NhbiBuZXdiYXRjaCwgU2NhbkRpcmVjdGlvbiBkaXIsCisJCQkgT2Zmc2V0TnVtYmVyIG9mZm51 bSwgYm9vbCBmaXJzdHBhZ2UpCiB7CiAJUmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlv bjsKIAlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CkBAIC0x NjU2LDM3ICsxNjI5LDMyIEBAIF9idF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5E aXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtLAogCUJUUmVhZFBhZ2VTdGF0ZSBwc3Rh dGU7CiAJYm9vbAkJYXJyYXlLZXlzOwogCWludAkJCWl0ZW1JbmRleCwKKwkJCQl0dXBsZU9mZnNl dCA9IDAsCiAJCQkJaW5kbmF0dHM7CiAKIAkvKiBzYXZlIHRoZSBwYWdlL2J1ZmZlciBibG9jayBu dW1iZXIsIGFsb25nIHdpdGggaXRzIHNpYmxpbmcgbGlua3MgKi8KLQlwYWdlID0gQnVmZmVyR2V0 UGFnZShzby0+Y3VyclBvcy5idWYpOworCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKG5ld2JhdGNoLT5i dWYpOwogCW9wYXF1ZSA9IEJUUGFnZUdldE9wYXF1ZShwYWdlKTsKLQlzby0+Y3VyclBvcy5jdXJy UGFnZSA9IEJ1ZmZlckdldEJsb2NrTnVtYmVyKHNvLT5jdXJyUG9zLmJ1Zik7Ci0Jc28tPmN1cnJQ b3MucHJldlBhZ2UgPSBvcGFxdWUtPmJ0cG9fcHJldjsKLQlzby0+Y3VyclBvcy5uZXh0UGFnZSA9 IG9wYXF1ZS0+YnRwb19uZXh0OwotCS8qIGRlbGF5IHNldHRpbmcgc28tPmN1cnJQb3MubHNuIHVu dGlsIF9idF9kcm9wX2xvY2tfYW5kX21heWJlX3BpbiAqLwotCXNvLT5jdXJyUG9zLmRpciA9IGRp cjsKLQlzby0+Y3VyclBvcy5uZXh0VHVwbGVPZmZzZXQgPSAwOworCW5ld2JhdGNoLT5jdXJyUGFn ZSA9IEJ1ZmZlckdldEJsb2NrTnVtYmVyKG5ld2JhdGNoLT5idWYpOworCW5ld2JhdGNoLT5wcmV2 UGFnZSA9IG9wYXF1ZS0+YnRwb19wcmV2OworCW5ld2JhdGNoLT5uZXh0UGFnZSA9IG9wYXF1ZS0+ YnRwb19uZXh0OworCW5ld2JhdGNoLT5kaXIgPSBkaXI7CiAKIAkvKiBlaXRoZXIgbW9yZVJpZ2h0 IG9yIG1vcmVMZWZ0IHNob3VsZCBiZSBzZXQgbm93IChtYXkgYmUgdW5zZXQgbGF0ZXIpICovCi0J QXNzZXJ0KFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSA/IHNvLT5jdXJyUG9zLm1vcmVSaWdo dCA6Ci0JCSAgIHNvLT5jdXJyUG9zLm1vcmVMZWZ0KTsKKwlBc3NlcnQoU2NhbkRpcmVjdGlvbklz Rm9yd2FyZChkaXIpID8gbmV3YmF0Y2gtPm1vcmVSaWdodCA6IG5ld2JhdGNoLT5tb3JlTGVmdCk7 CiAJQXNzZXJ0KCFQX0lHTk9SRShvcGFxdWUpKTsKLQlBc3NlcnQoQlRTY2FuUG9zSXNQaW5uZWQo c28tPmN1cnJQb3MpKTsKIAlBc3NlcnQoIXNvLT5uZWVkUHJpbVNjYW4pOwogCiAJaWYgKHNjYW4t PnBhcmFsbGVsX3NjYW4pCiAJewogCQkvKiBhbGxvdyBuZXh0L3ByZXYgcGFnZSB0byBiZSByZWFk IGJ5IG90aGVyIHdvcmtlciB3aXRob3V0IGRlbGF5ICovCiAJCWlmIChTY2FuRGlyZWN0aW9uSXNG b3J3YXJkKGRpcikpCi0JCQlfYnRfcGFyYWxsZWxfcmVsZWFzZShzY2FuLCBzby0+Y3VyclBvcy5u ZXh0UGFnZSwKLQkJCQkJCQkJIHNvLT5jdXJyUG9zLmN1cnJQYWdlKTsKKwkJCV9idF9wYXJhbGxl bF9yZWxlYXNlKHNjYW4sIG5ld2JhdGNoLT5uZXh0UGFnZSwgbmV3YmF0Y2gtPmN1cnJQYWdlKTsK IAkJZWxzZQotCQkJX2J0X3BhcmFsbGVsX3JlbGVhc2Uoc2Nhbiwgc28tPmN1cnJQb3MucHJldlBh Z2UsCi0JCQkJCQkJCSBzby0+Y3VyclBvcy5jdXJyUGFnZSk7CisJCQlfYnRfcGFyYWxsZWxfcmVs ZWFzZShzY2FuLCBuZXdiYXRjaC0+cHJldlBhZ2UsIG5ld2JhdGNoLT5jdXJyUGFnZSk7CiAJfQog Ci0JUHJlZGljYXRlTG9ja1BhZ2UocmVsLCBzby0+Y3VyclBvcy5jdXJyUGFnZSwgc2Nhbi0+eHNf c25hcHNob3QpOworCVByZWRpY2F0ZUxvY2tQYWdlKHJlbCwgbmV3YmF0Y2gtPmN1cnJQYWdlLCBz Y2FuLT54c19zbmFwc2hvdCk7CiAKIAkvKiBpbml0aWFsaXplIGxvY2FsIHZhcmlhYmxlcyAqLwog CWluZG5hdHRzID0gSW5kZXhSZWxhdGlvbkdldE51bWJlck9mQXR0cmlidXRlcyhyZWwpOwpAQCAt MTY5NSw2ICsxNjYzLDggQEAgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRp cmVjdGlvbiBkaXIsIE9mZnNldE51bWJlciBvZmZudW0sCiAJbWF4b2ZmID0gUGFnZUdldE1heE9m ZnNldE51bWJlcihwYWdlKTsKIAogCS8qIGluaXRpYWxpemUgcGFnZS1sZXZlbCBzdGF0ZSB0aGF0 IHdlJ2xsIHBhc3MgdG8gX2J0X2NoZWNra2V5cyAqLworCXBzdGF0ZS5kaXIgPSBkaXI7CisJcHN0 YXRlLmN1cnJwYWdlID0gbmV3YmF0Y2gtPmN1cnJQYWdlOwogCXBzdGF0ZS5taW5vZmYgPSBtaW5v ZmY7CiAJcHN0YXRlLm1heG9mZiA9IG1heG9mZjsKIAlwc3RhdGUuZmluYWx0dXAgPSBOVUxMOwpA QCAtMTcyNCwxMSArMTY5NCwxMCBAQCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBT Y2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKIAkJCQkJIV9idF9zY2FuYmVo aW5kX2NoZWNra2V5cyhzY2FuLCBkaXIsIHBzdGF0ZS5maW5hbHR1cCkpCiAJCQkJewogCQkJCQkv KiBTY2hlZHVsZSBhbm90aGVyIHByaW1pdGl2ZSBpbmRleCBzY2FuIGFmdGVyIGFsbCAqLwotCQkJ CQlzby0+Y3VyclBvcy5tb3JlUmlnaHQgPSBmYWxzZTsKKwkJCQkJbmV3YmF0Y2gtPm1vcmVSaWdo dCA9IGZhbHNlOwogCQkJCQlzby0+bmVlZFByaW1TY2FuID0gdHJ1ZTsKIAkJCQkJaWYgKHNjYW4t PnBhcmFsbGVsX3NjYW4pCi0JCQkJCQlfYnRfcGFyYWxsZWxfcHJpbXNjYW5fc2NoZWR1bGUoc2Nh biwKLQkJCQkJCQkJCQkJCQkgICBzby0+Y3VyclBvcy5jdXJyUGFnZSk7CisJCQkJCQlfYnRfcGFy YWxsZWxfcHJpbXNjYW5fc2NoZWR1bGUoc2NhbiwgbmV3YmF0Y2gtPmN1cnJQYWdlKTsKIAkJCQkJ cmV0dXJuIGZhbHNlOwogCQkJCX0KIAkJCX0KQEAgLTE3OTIsMjggKzE3NjEsMjggQEAgX2J0X3Jl YWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNldE51bWJl ciBvZmZudW0sCiAJCQkJaWYgKCFCVHJlZVR1cGxlSXNQb3N0aW5nKGl0dXApKQogCQkJCXsKIAkJ CQkJLyogUmVtZW1iZXIgaXQgKi8KLQkJCQkJX2J0X3NhdmVpdGVtKHNvLCBpdGVtSW5kZXgsIG9m Zm51bSwgaXR1cCk7CisJCQkJCV9idF9zYXZlaXRlbShuZXdiYXRjaCwgaXRlbUluZGV4LCBvZmZu dW0sIGl0dXAsICZ0dXBsZU9mZnNldCk7CiAJCQkJCWl0ZW1JbmRleCsrOwogCQkJCX0KIAkJCQll bHNlCiAJCQkJewotCQkJCQlpbnQJCQl0dXBsZU9mZnNldDsKKwkJCQkJaW50CQkJYmFzZU9mZnNl dDsKIAogCQkJCQkvKgogCQkJCQkgKiBTZXQgdXAgc3RhdGUgdG8gcmV0dXJuIHBvc3RpbmcgbGlz dCwgYW5kIHJlbWVtYmVyIGZpcnN0CiAJCQkJCSAqIFRJRAogCQkJCQkgKi8KLQkJCQkJdHVwbGVP ZmZzZXQgPQotCQkJCQkJX2J0X3NldHVwcG9zdGluZ2l0ZW1zKHNvLCBpdGVtSW5kZXgsIG9mZm51 bSwKKwkJCQkJYmFzZU9mZnNldCA9CisJCQkJCQlfYnRfc2V0dXBwb3N0aW5naXRlbXMobmV3YmF0 Y2gsIGl0ZW1JbmRleCwgb2ZmbnVtLAogCQkJCQkJCQkJCQkgIEJUcmVlVHVwbGVHZXRQb3N0aW5n TihpdHVwLCAwKSwKLQkJCQkJCQkJCQkJICBpdHVwKTsKKwkJCQkJCQkJCQkJICBpdHVwLCAmdHVw bGVPZmZzZXQpOwogCQkJCQlpdGVtSW5kZXgrKzsKIAkJCQkJLyogUmVtZW1iZXIgYWRkaXRpb25h bCBUSURzICovCiAJCQkJCWZvciAoaW50IGkgPSAxOyBpIDwgQlRyZWVUdXBsZUdldE5Qb3N0aW5n KGl0dXApOyBpKyspCiAJCQkJCXsKLQkJCQkJCV9idF9zYXZlcG9zdGluZ2l0ZW0oc28sIGl0ZW1J bmRleCwgb2ZmbnVtLAorCQkJCQkJX2J0X3NhdmVwb3N0aW5naXRlbShuZXdiYXRjaCwgaXRlbUlu ZGV4LCBvZmZudW0sCiAJCQkJCQkJCQkJCUJUcmVlVHVwbGVHZXRQb3N0aW5nTihpdHVwLCBpKSwK LQkJCQkJCQkJCQkJdHVwbGVPZmZzZXQpOworCQkJCQkJCQkJCQliYXNlT2Zmc2V0KTsKIAkJCQkJ CWl0ZW1JbmRleCsrOwogCQkJCQl9CiAJCQkJfQpAQCAtMTg1MywxMiArMTgyMiwxMSBAQCBfYnRf cmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVt YmVyIG9mZm51bSwKIAkJfQogCiAJCWlmICghcHN0YXRlLmNvbnRpbnVlc2NhbikKLQkJCXNvLT5j dXJyUG9zLm1vcmVSaWdodCA9IGZhbHNlOworCQkJbmV3YmF0Y2gtPm1vcmVSaWdodCA9IGZhbHNl OwogCiAJCUFzc2VydChpdGVtSW5kZXggPD0gTWF4VElEc1BlckJUcmVlUGFnZSk7Ci0JCXNvLT5j dXJyUG9zLmZpcnN0SXRlbSA9IDA7Ci0JCXNvLT5jdXJyUG9zLmxhc3RJdGVtID0gaXRlbUluZGV4 IC0gMTsKLQkJc28tPmN1cnJQb3MuaXRlbUluZGV4ID0gMDsKKwkJbmV3YmF0Y2gtPmZpcnN0SXRl bSA9IDA7CisJCW5ld2JhdGNoLT5sYXN0SXRlbSA9IGl0ZW1JbmRleCAtIDE7CiAJfQogCWVsc2UK IAl7CkBAIC0xODc1LDExICsxODQzLDEwIEBAIF9idF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNj YW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtLAogCQkJCQkhX2J0X3Nj YW5iZWhpbmRfY2hlY2trZXlzKHNjYW4sIGRpciwgcHN0YXRlLmZpbmFsdHVwKSkKIAkJCQl7CiAJ CQkJCS8qIFNjaGVkdWxlIGFub3RoZXIgcHJpbWl0aXZlIGluZGV4IHNjYW4gYWZ0ZXIgYWxsICov Ci0JCQkJCXNvLT5jdXJyUG9zLm1vcmVMZWZ0ID0gZmFsc2U7CisJCQkJCW5ld2JhdGNoLT5tb3Jl TGVmdCA9IGZhbHNlOwogCQkJCQlzby0+bmVlZFByaW1TY2FuID0gdHJ1ZTsKIAkJCQkJaWYgKHNj YW4tPnBhcmFsbGVsX3NjYW4pCi0JCQkJCQlfYnRfcGFyYWxsZWxfcHJpbXNjYW5fc2NoZWR1bGUo c2NhbiwKLQkJCQkJCQkJCQkJCQkgICBzby0+Y3VyclBvcy5jdXJyUGFnZSk7CisJCQkJCQlfYnRf cGFyYWxsZWxfcHJpbXNjYW5fc2NoZWR1bGUoc2NhbiwgbmV3YmF0Y2gtPmN1cnJQYWdlKTsKIAkJ CQkJcmV0dXJuIGZhbHNlOwogCQkJCX0KIAkJCX0KQEAgLTE5ODAsMTEgKzE5NDcsMTEgQEAgX2J0 X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNldE51 bWJlciBvZmZudW0sCiAJCQkJewogCQkJCQkvKiBSZW1lbWJlciBpdCAqLwogCQkJCQlpdGVtSW5k ZXgtLTsKLQkJCQkJX2J0X3NhdmVpdGVtKHNvLCBpdGVtSW5kZXgsIG9mZm51bSwgaXR1cCk7CisJ CQkJCV9idF9zYXZlaXRlbShuZXdiYXRjaCwgaXRlbUluZGV4LCBvZmZudW0sIGl0dXAsICZ0dXBs ZU9mZnNldCk7CiAJCQkJfQogCQkJCWVsc2UKIAkJCQl7Ci0JCQkJCWludAkJCXR1cGxlT2Zmc2V0 OworCQkJCQlpbnQJCQliYXNlT2Zmc2V0OwogCiAJCQkJCS8qCiAJCQkJCSAqIFNldCB1cCBzdGF0 ZSB0byByZXR1cm4gcG9zdGluZyBsaXN0LCBhbmQgcmVtZW1iZXIgZmlyc3QKQEAgLTE5OTcsMTcg KzE5NjQsMTcgQEAgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlv biBkaXIsIE9mZnNldE51bWJlciBvZmZudW0sCiAJCQkJCSAqIGFzc29jaWF0ZWQgd2l0aCB0aGUg c2FtZSBwb3N0aW5nIGxpc3QgdHVwbGUuCiAJCQkJCSAqLwogCQkJCQlpdGVtSW5kZXgtLTsKLQkJ CQkJdHVwbGVPZmZzZXQgPQotCQkJCQkJX2J0X3NldHVwcG9zdGluZ2l0ZW1zKHNvLCBpdGVtSW5k ZXgsIG9mZm51bSwKKwkJCQkJYmFzZU9mZnNldCA9CisJCQkJCQlfYnRfc2V0dXBwb3N0aW5naXRl bXMobmV3YmF0Y2gsIGl0ZW1JbmRleCwgb2ZmbnVtLAogCQkJCQkJCQkJCQkgIEJUcmVlVHVwbGVH ZXRQb3N0aW5nTihpdHVwLCAwKSwKLQkJCQkJCQkJCQkJICBpdHVwKTsKKwkJCQkJCQkJCQkJICBp dHVwLCAmdHVwbGVPZmZzZXQpOwogCQkJCQkvKiBSZW1lbWJlciBhZGRpdGlvbmFsIFRJRHMgKi8K IAkJCQkJZm9yIChpbnQgaSA9IDE7IGkgPCBCVHJlZVR1cGxlR2V0TlBvc3RpbmcoaXR1cCk7IGkr KykKIAkJCQkJewogCQkJCQkJaXRlbUluZGV4LS07Ci0JCQkJCQlfYnRfc2F2ZXBvc3RpbmdpdGVt KHNvLCBpdGVtSW5kZXgsIG9mZm51bSwKKwkJCQkJCV9idF9zYXZlcG9zdGluZ2l0ZW0obmV3YmF0 Y2gsIGl0ZW1JbmRleCwgb2ZmbnVtLAogCQkJCQkJCQkJCQlCVHJlZVR1cGxlR2V0UG9zdGluZ04o aXR1cCwgaSksCi0JCQkJCQkJCQkJCXR1cGxlT2Zmc2V0KTsKKwkJCQkJCQkJCQkJYmFzZU9mZnNl dCk7CiAJCQkJCX0KIAkJCQl9CiAJCQl9CkBAIC0yMDIzLDEyICsxOTkwLDExIEBAIF9idF9yZWFk cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIg b2ZmbnVtLAogCQkgKiBiZSBmb3VuZCB0aGVyZQogCQkgKi8KIAkJaWYgKCFwc3RhdGUuY29udGlu dWVzY2FuKQotCQkJc28tPmN1cnJQb3MubW9yZUxlZnQgPSBmYWxzZTsKKwkJCW5ld2JhdGNoLT5t b3JlTGVmdCA9IGZhbHNlOwogCiAJCUFzc2VydChpdGVtSW5kZXggPj0gMCk7Ci0JCXNvLT5jdXJy UG9zLmZpcnN0SXRlbSA9IGl0ZW1JbmRleDsKLQkJc28tPmN1cnJQb3MubGFzdEl0ZW0gPSBNYXhU SURzUGVyQlRyZWVQYWdlIC0gMTsKLQkJc28tPmN1cnJQb3MuaXRlbUluZGV4ID0gTWF4VElEc1Bl ckJUcmVlUGFnZSAtIDE7CisJCW5ld2JhdGNoLT5maXJzdEl0ZW0gPSBpdGVtSW5kZXg7CisJCW5l d2JhdGNoLT5sYXN0SXRlbSA9IE1heFRJRHNQZXJCVHJlZVBhZ2UgLSAxOwogCX0KIAogCS8qCkBA IC0yMDQ1LDIwMiArMjAxMSw5NiBAQCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBT Y2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKIAkgKi8KIAlBc3NlcnQoIXBz dGF0ZS5mb3JjZW5vbnJlcXVpcmVkKTsKIAotCXJldHVybiAoc28tPmN1cnJQb3MuZmlyc3RJdGVt IDw9IHNvLT5jdXJyUG9zLmxhc3RJdGVtKTsKKwlyZXR1cm4gKG5ld2JhdGNoLT5maXJzdEl0ZW0g PD0gbmV3YmF0Y2gtPmxhc3RJdGVtKTsKIH0KIAotLyogU2F2ZSBhbiBpbmRleCBpdGVtIGludG8g c28tPmN1cnJQb3MuaXRlbXNbaXRlbUluZGV4XSAqLworLyogU2F2ZSBhbiBpbmRleCBpdGVtIGlu dG8gbmV3YmF0Y2guaXRlbXNbaXRlbUluZGV4XSAqLwogc3RhdGljIHZvaWQKLV9idF9zYXZlaXRl bShCVFNjYW5PcGFxdWUgc28sIGludCBpdGVtSW5kZXgsCi0JCQkgT2Zmc2V0TnVtYmVyIG9mZm51 bSwgSW5kZXhUdXBsZSBpdHVwKQorX2J0X3NhdmVpdGVtKEJhdGNoSW5kZXhTY2FuIG5ld2JhdGNo LCBpbnQgaXRlbUluZGV4LCBPZmZzZXROdW1iZXIgb2ZmbnVtLAorCQkJIEluZGV4VHVwbGUgaXR1 cCwgaW50ICp0dXBsZU9mZnNldCkKIHsKLQlCVFNjYW5Qb3NJdGVtICpjdXJySXRlbSA9ICZzby0+ Y3VyclBvcy5pdGVtc1tpdGVtSW5kZXhdOwotCiAJQXNzZXJ0KCFCVHJlZVR1cGxlSXNQaXZvdChp dHVwKSAmJiAhQlRyZWVUdXBsZUlzUG9zdGluZyhpdHVwKSk7CiAKLQljdXJySXRlbS0+aGVhcFRp ZCA9IGl0dXAtPnRfdGlkOwotCWN1cnJJdGVtLT5pbmRleE9mZnNldCA9IG9mZm51bTsKLQlpZiAo c28tPmN1cnJUdXBsZXMpCisJLyogY29weSB0aGUgcG9wdWxhdGVkIHBhcnQgb2YgdGhlIGl0ZW1z IGFycmF5ICovCisJbmV3YmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF0uaGVhcFRpZCA9IGl0dXAtPnRf dGlkOworCW5ld2JhdGNoLT5pdGVtc1tpdGVtSW5kZXhdLmluZGV4T2Zmc2V0ID0gb2ZmbnVtOwor CisJaWYgKG5ld2JhdGNoLT5jdXJyVHVwbGVzKQogCXsKIAkJU2l6ZQkJaXR1cHN6ID0gSW5kZXhU dXBsZVNpemUoaXR1cCk7CiAKLQkJY3Vyckl0ZW0tPnR1cGxlT2Zmc2V0ID0gc28tPmN1cnJQb3Mu bmV4dFR1cGxlT2Zmc2V0OwotCQltZW1jcHkoc28tPmN1cnJUdXBsZXMgKyBzby0+Y3VyclBvcy5u ZXh0VHVwbGVPZmZzZXQsIGl0dXAsIGl0dXBzeik7Ci0JCXNvLT5jdXJyUG9zLm5leHRUdXBsZU9m ZnNldCArPSBNQVhBTElHTihpdHVwc3opOworCQluZXdiYXRjaC0+aXRlbXNbaXRlbUluZGV4XS50 dXBsZU9mZnNldCA9ICp0dXBsZU9mZnNldDsKKwkJbWVtY3B5KG5ld2JhdGNoLT5jdXJyVHVwbGVz ICsgKnR1cGxlT2Zmc2V0LCBpdHVwLCBpdHVwc3opOworCQkqdHVwbGVPZmZzZXQgKz0gTUFYQUxJ R04oaXR1cHN6KTsKIAl9CiB9CiAKIC8qCiAgKiBTZXR1cCBzdGF0ZSB0byBzYXZlIFRJRHMvaXRl bXMgZnJvbSBhIHNpbmdsZSBwb3N0aW5nIGxpc3QgdHVwbGUuCiAgKgotICogU2F2ZXMgYW4gaW5k ZXggaXRlbSBpbnRvIHNvLT5jdXJyUG9zLml0ZW1zW2l0ZW1JbmRleF0gZm9yIFRJRCB0aGF0IGlz Ci0gKiByZXR1cm5lZCB0byBzY2FuIGZpcnN0LiAgU2Vjb25kIG9yIHN1YnNlcXVlbnQgVElEcyBm b3IgcG9zdGluZyBsaXN0IHNob3VsZAotICogYmUgc2F2ZWQgYnkgY2FsbGluZyBfYnRfc2F2ZXBv c3RpbmdpdGVtKCkuCisgKiBTYXZlcyBhbiBpbmRleCBpdGVtIGludG8gbmV3YmF0Y2guaXRlbXNb aXRlbUluZGV4XSBmb3IgVElEIHRoYXQgaXMgcmV0dXJuZWQKKyAqIHRvIHNjYW4gZmlyc3QuICBT ZWNvbmQgb3Igc3Vic2VxdWVudCBUSURzIGZvciBwb3N0aW5nIGxpc3Qgc2hvdWxkIGJlIHNhdmVk CisgKiBieSBjYWxsaW5nIF9idF9zYXZlcG9zdGluZ2l0ZW0oKS4KICAqCi0gKiBSZXR1cm5zIGFu IG9mZnNldCBpbnRvIHR1cGxlIHN0b3JhZ2Ugc3BhY2UgdGhhdCBtYWluIHR1cGxlIGlzIHN0b3Jl ZCBhdCBpZgotICogbmVlZGVkLgorICogUmV0dXJucyBiYXNlT2Zmc2V0LCBhbiBvZmZzZXQgaW50 byB0dXBsZSBzdG9yYWdlIHNwYWNlIHRoYXQgbWFpbiB0dXBsZSBpcworICogc3RvcmVkIGF0IGlm IG5lZWRlZC4KICAqLwogc3RhdGljIGludAotX2J0X3NldHVwcG9zdGluZ2l0ZW1zKEJUU2Nhbk9w YXF1ZSBzbywgaW50IGl0ZW1JbmRleCwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKLQkJCQkJICBjb25z dCBJdGVtUG9pbnRlckRhdGEgKmhlYXBUaWQsIEluZGV4VHVwbGUgaXR1cCkKK19idF9zZXR1cHBv c3RpbmdpdGVtcyhCYXRjaEluZGV4U2NhbiBuZXdiYXRjaCwgaW50IGl0ZW1JbmRleCwKKwkJCQkJ ICBPZmZzZXROdW1iZXIgb2ZmbnVtLCBjb25zdCBJdGVtUG9pbnRlckRhdGEgKmhlYXBUaWQsCisJ CQkJCSAgSW5kZXhUdXBsZSBpdHVwLCBpbnQgKnR1cGxlT2Zmc2V0KQogewotCUJUU2NhblBvc0l0 ZW0gKmN1cnJJdGVtID0gJnNvLT5jdXJyUG9zLml0ZW1zW2l0ZW1JbmRleF07CisJQmF0Y2hNYXRj aGluZ0l0ZW0gKml0ZW0gPSAmbmV3YmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF07CiAKIAlBc3NlcnQo QlRyZWVUdXBsZUlzUG9zdGluZyhpdHVwKSk7CiAKLQljdXJySXRlbS0+aGVhcFRpZCA9ICpoZWFw VGlkOwotCWN1cnJJdGVtLT5pbmRleE9mZnNldCA9IG9mZm51bTsKLQlpZiAoc28tPmN1cnJUdXBs ZXMpCisJLyogY29weSB0aGUgcG9wdWxhdGVkIHBhcnQgb2YgdGhlIGl0ZW1zIGFycmF5ICovCisJ aXRlbS0+aGVhcFRpZCA9ICpoZWFwVGlkOworCWl0ZW0tPmluZGV4T2Zmc2V0ID0gb2ZmbnVtOwor CisJaWYgKG5ld2JhdGNoLT5jdXJyVHVwbGVzKQogCXsKIAkJLyogU2F2ZSBiYXNlIEluZGV4VHVw bGUgKHRydW5jYXRlIHBvc3RpbmcgbGlzdCkgKi8KIAkJSW5kZXhUdXBsZQliYXNlOwogCQlTaXpl CQlpdHVwc3ogPSBCVHJlZVR1cGxlR2V0UG9zdGluZ09mZnNldChpdHVwKTsKIAogCQlpdHVwc3og PSBNQVhBTElHTihpdHVwc3opOwotCQljdXJySXRlbS0+dHVwbGVPZmZzZXQgPSBzby0+Y3VyclBv cy5uZXh0VHVwbGVPZmZzZXQ7Ci0JCWJhc2UgPSAoSW5kZXhUdXBsZSkgKHNvLT5jdXJyVHVwbGVz ICsgc28tPmN1cnJQb3MubmV4dFR1cGxlT2Zmc2V0KTsKKwkJaXRlbS0+dHVwbGVPZmZzZXQgPSAq dHVwbGVPZmZzZXQ7CisJCWJhc2UgPSAoSW5kZXhUdXBsZSkgKG5ld2JhdGNoLT5jdXJyVHVwbGVz ICsgKnR1cGxlT2Zmc2V0KTsKIAkJbWVtY3B5KGJhc2UsIGl0dXAsIGl0dXBzeik7CiAJCS8qIERl ZmVuc2l2ZWx5IHJlZHVjZSB3b3JrIGFyZWEgaW5kZXggdHVwbGUgaGVhZGVyIHNpemUgKi8KIAkJ YmFzZS0+dF9pbmZvICY9IH5JTkRFWF9TSVpFX01BU0s7CiAJCWJhc2UtPnRfaW5mbyB8PSBpdHVw c3o7Ci0JCXNvLT5jdXJyUG9zLm5leHRUdXBsZU9mZnNldCArPSBpdHVwc3o7CisJCSp0dXBsZU9m ZnNldCArPSBpdHVwc3o7CiAKLQkJcmV0dXJuIGN1cnJJdGVtLT50dXBsZU9mZnNldDsKKwkJcmV0 dXJuIGl0ZW0tPnR1cGxlT2Zmc2V0OwogCX0KIAogCXJldHVybiAwOwogfQogCiAvKgotICogU2F2 ZSBhbiBpbmRleCBpdGVtIGludG8gc28tPmN1cnJQb3MuaXRlbXNbaXRlbUluZGV4XSBmb3IgY3Vy cmVudCBwb3N0aW5nCisgKiBTYXZlIGFuIGluZGV4IGl0ZW0gaW50byBuZXdiYXRjaC5pdGVtc1tp dGVtSW5kZXhdIGZvciBjdXJyZW50IHBvc3RpbmcKICAqIHR1cGxlLgogICoKICAqIEFzc3VtZXMg dGhhdCBfYnRfc2V0dXBwb3N0aW5naXRlbXMoKSBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZCBmb3Ig Y3VycmVudAotICogcG9zdGluZyBsaXN0IHR1cGxlLiAgQ2FsbGVyIHBhc3NlcyBpdHMgcmV0dXJu IHZhbHVlIGFzIHR1cGxlT2Zmc2V0LgorICogcG9zdGluZyBsaXN0IHR1cGxlLiAgQ2FsbGVyIHBh c3NlcyBpdHMgcmV0dXJuIHZhbHVlIGFzIGJhc2VPZmZzZXQuCiAgKi8KIHN0YXRpYyBpbmxpbmUg dm9pZAotX2J0X3NhdmVwb3N0aW5naXRlbShCVFNjYW5PcGFxdWUgc28sIGludCBpdGVtSW5kZXgs IE9mZnNldE51bWJlciBvZmZudW0sCi0JCQkJCUl0ZW1Qb2ludGVyIGhlYXBUaWQsIGludCB0dXBs ZU9mZnNldCkKK19idF9zYXZlcG9zdGluZ2l0ZW0oQmF0Y2hJbmRleFNjYW4gbmV3YmF0Y2gsIGlu dCBpdGVtSW5kZXgsIE9mZnNldE51bWJlciBvZmZudW0sCisJCQkJCUl0ZW1Qb2ludGVyIGhlYXBU aWQsIGludCBiYXNlT2Zmc2V0KQogewotCUJUU2NhblBvc0l0ZW0gKmN1cnJJdGVtID0gJnNvLT5j dXJyUG9zLml0ZW1zW2l0ZW1JbmRleF07CisJQmF0Y2hNYXRjaGluZ0l0ZW0gKml0ZW0gPSAmbmV3 YmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF07CiAKLQljdXJySXRlbS0+aGVhcFRpZCA9ICpoZWFwVGlk OwotCWN1cnJJdGVtLT5pbmRleE9mZnNldCA9IG9mZm51bTsKKwlpdGVtLT5oZWFwVGlkID0gKmhl YXBUaWQ7CisJaXRlbS0+aW5kZXhPZmZzZXQgPSBvZmZudW07CiAKIAkvKgogCSAqIEhhdmUgaW5k ZXgtb25seSBzY2FucyByZXR1cm4gdGhlIHNhbWUgYmFzZSBJbmRleFR1cGxlIGZvciBldmVyeSBU SUQKIAkgKiB0aGF0IG9yaWdpbmF0ZXMgZnJvbSB0aGUgc2FtZSBwb3N0aW5nIGxpc3QKIAkgKi8K LQlpZiAoc28tPmN1cnJUdXBsZXMpCi0JCWN1cnJJdGVtLT50dXBsZU9mZnNldCA9IHR1cGxlT2Zm c2V0OwotfQotCi0vKgotICogUmV0dXJuIHRoZSBpbmRleCBpdGVtIGZyb20gc28tPmN1cnJQb3Mu aXRlbXNbc28tPmN1cnJQb3MuaXRlbUluZGV4XSB0byB0aGUKLSAqIGluZGV4IHNjYW4gYnkgc2V0 dGluZyB0aGUgcmVsZXZhbnQgZmllbGRzIGluIGNhbGxlcidzIGluZGV4IHNjYW4gZGVzY3JpcHRv cgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQKLV9idF9yZXR1cm5pdGVtKEluZGV4U2NhbkRlc2Mg c2NhbiwgQlRTY2FuT3BhcXVlIHNvKQotewotCUJUU2NhblBvc0l0ZW0gKmN1cnJJdGVtID0gJnNv LT5jdXJyUG9zLml0ZW1zW3NvLT5jdXJyUG9zLml0ZW1JbmRleF07Ci0KLQkvKiBNb3N0IHJlY2Vu dCBfYnRfcmVhZHBhZ2UgbXVzdCBoYXZlIHN1Y2NlZWRlZCAqLwotCUFzc2VydChCVFNjYW5Qb3NJ c1ZhbGlkKHNvLT5jdXJyUG9zKSk7Ci0JQXNzZXJ0KHNvLT5jdXJyUG9zLml0ZW1JbmRleCA+PSBz by0+Y3VyclBvcy5maXJzdEl0ZW0pOwotCUFzc2VydChzby0+Y3VyclBvcy5pdGVtSW5kZXggPD0g c28tPmN1cnJQb3MubGFzdEl0ZW0pOwotCi0JLyogUmV0dXJuIG5leHQgaXRlbSwgcGVyIGFtZ2V0 dHVwbGUgY29udHJhY3QgKi8KLQlzY2FuLT54c19oZWFwdGlkID0gY3Vyckl0ZW0tPmhlYXBUaWQ7 Ci0JaWYgKHNvLT5jdXJyVHVwbGVzKQotCQlzY2FuLT54c19pdHVwID0gKEluZGV4VHVwbGUpIChz by0+Y3VyclR1cGxlcyArIGN1cnJJdGVtLT50dXBsZU9mZnNldCk7Ci19Ci0KLS8qCi0gKglfYnRf c3RlcHBhZ2UoKSAtLSBTdGVwIHRvIG5leHQgcGFnZSBjb250YWluaW5nIHZhbGlkIGRhdGEgZm9y IHNjYW4KLSAqCi0gKiBXcmFwcGVyIG9uIF9idF9yZWFkbmV4dHBhZ2UgdGhhdCBwZXJmb3JtcyBm aW5hbCBzdGVwcyBmb3IgdGhlIGN1cnJlbnQgcGFnZS4KLSAqCi0gKiBPbiBlbnRyeSwgc28tPmN1 cnJQb3MgbXVzdCBiZSB2YWxpZC4gIEl0cyBidWZmZXIgd2lsbCBiZSBwaW5uZWQsIHRob3VnaAot ICogbmV2ZXIgbG9ja2VkLiAoQWN0dWFsbHksIHdoZW4gc28tPmRyb3BQaW4gdGhlcmUgd29uJ3Qg ZXZlbiBiZSBhIHBpbiBoZWxkLAotICogdGhvdWdoIHNvLT5jdXJyUG9zLmN1cnJQYWdlIG11c3Qg c3RpbGwgYmUgc2V0IHRvIGEgdmFsaWQgYmxvY2sgbnVtYmVyLikKLSAqLwotc3RhdGljIGJvb2wK LV9idF9zdGVwcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQotewot CUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKLQlCbG9ja051 bWJlciBibGtubywKLQkJCQlsYXN0Y3VycmJsa25vOwotCi0JQXNzZXJ0KEJUU2NhblBvc0lzVmFs aWQoc28tPmN1cnJQb3MpKTsKLQotCS8qIEJlZm9yZSBsZWF2aW5nIGN1cnJlbnQgcGFnZSwgZGVh bCB3aXRoIGFueSBraWxsZWQgaXRlbXMgKi8KLQlpZiAoc28tPm51bUtpbGxlZCA+IDApCi0JCV9i dF9raWxsaXRlbXMoc2Nhbik7Ci0KLQkvKgotCSAqIEJlZm9yZSB3ZSBtb2RpZnkgY3VyclBvcywg bWFrZSBhIGNvcHkgb2YgdGhlIHBhZ2UgZGF0YSBpZiB0aGVyZSB3YXMgYQotCSAqIG1hcmsgcG9z aXRpb24gdGhhdCBuZWVkcyBpdC4KLQkgKi8KLQlpZiAoc28tPm1hcmtJdGVtSW5kZXggPj0gMCkK LQl7Ci0JCS8qIGJ1bXAgcGluIG9uIGN1cnJlbnQgYnVmZmVyIGZvciBhc3NpZ25tZW50IHRvIG1h cmsgYnVmZmVyICovCi0JCWlmIChCVFNjYW5Qb3NJc1Bpbm5lZChzby0+Y3VyclBvcykpCi0JCQlJ bmNyQnVmZmVyUmVmQ291bnQoc28tPmN1cnJQb3MuYnVmKTsKLQkJbWVtY3B5KCZzby0+bWFya1Bv cywgJnNvLT5jdXJyUG9zLAotCQkJICAgb2Zmc2V0b2YoQlRTY2FuUG9zRGF0YSwgaXRlbXNbMV0p ICsKLQkJCSAgIHNvLT5jdXJyUG9zLmxhc3RJdGVtICogc2l6ZW9mKEJUU2NhblBvc0l0ZW0pKTsK LQkJaWYgKHNvLT5tYXJrVHVwbGVzKQotCQkJbWVtY3B5KHNvLT5tYXJrVHVwbGVzLCBzby0+Y3Vy clR1cGxlcywKLQkJCQkgICBzby0+Y3VyclBvcy5uZXh0VHVwbGVPZmZzZXQpOwotCQlzby0+bWFy a1Bvcy5pdGVtSW5kZXggPSBzby0+bWFya0l0ZW1JbmRleDsKLQkJc28tPm1hcmtJdGVtSW5kZXgg PSAtMTsKLQotCQkvKgotCQkgKiBJZiB3ZSdyZSBqdXN0IGFib3V0IHRvIHN0YXJ0IHRoZSBuZXh0 IHByaW1pdGl2ZSBpbmRleCBzY2FuCi0JCSAqIChwb3NzaWJsZSB3aXRoIGEgc2NhbiB0aGF0IGhh cyBhcnJheXMga2V5cywgYW5kIG5lZWRzIHRvIHNraXAgdG8KLQkJICogY29udGludWUgaW4gdGhl IGN1cnJlbnQgc2NhbiBkaXJlY3Rpb24pLCBtb3JlTGVmdC9tb3JlUmlnaHQgb25seQotCQkgKiBp bmRpY2F0ZSB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IHByaW1pdGl2ZSBpbmRleCBzY2FuLiAgVGhl eSBtdXN0Ci0JCSAqIG5ldmVyIGJlIHRha2VuIHRvIGluZGljYXRlIHRoYXQgdGhlIHRvcC1sZXZl bCBpbmRleCBzY2FuIGhhcyBlbmRlZAotCQkgKiAodGhhdCB3b3VsZCBiZSB3cm9uZykuCi0JCSAq Ci0JCSAqIFdlIGNvdWxkIGhhbmRsZSB0aGlzIGNhc2UgYnkgdHJlYXRpbmcgdGhlIGN1cnJlbnQg YXJyYXkga2V5cyBhcwotCQkgKiBtYXJrUG9zIHN0YXRlLiAgQnV0IGRlcGVuZGluZyBvbiB0aGUg Y3VycmVudCBhcnJheSBzdGF0ZSBsaWtlIHRoaXMKLQkJICogd291bGQgYWRkIGNvbXBsZXhpdHku ICBJbnN0ZWFkLCB3ZSBqdXN0IHVuc2V0IG1hcmtQb3MncyBjb3B5IG9mCi0JCSAqIG1vcmVSaWdo dCBvciBtb3JlTGVmdCAod2hpY2hldmVyIG1pZ2h0IGJlIGFmZmVjdGVkKSwgd2hpbGUgbWFraW5n Ci0JCSAqIGJ0cmVzdHJwb3MgcmVzZXQgdGhlIHNjYW4ncyBhcnJheXMgdG8gdGhlaXIgaW5pdGlh bCBzY2FuIHBvc2l0aW9ucy4KLQkJICogSW4gZWZmZWN0LCBidHJlc3RycG9zIGxlYXZlcyBhZHZh bmNpbmcgdGhlIGFycmF5cyB1cCB0byB0aGUgZmlyc3QKLQkJICogX2J0X3JlYWRwYWdlIGNhbGwg KHRoYXQgdGFrZXMgcGxhY2UgYWZ0ZXIgaXQgaGFzIHJlc3RvcmVkIG1hcmtQb3MpLgotCQkgKi8K LQkJaWYgKHNvLT5uZWVkUHJpbVNjYW4pCi0JCXsKLQkJCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3 YXJkKHNvLT5jdXJyUG9zLmRpcikpCi0JCQkJc28tPm1hcmtQb3MubW9yZVJpZ2h0ID0gdHJ1ZTsK LQkJCWVsc2UKLQkJCQlzby0+bWFya1Bvcy5tb3JlTGVmdCA9IHRydWU7Ci0JCX0KLQotCQkvKiBt YXJrL3Jlc3RvcmUgbm90IHN1cHBvcnRlZCBieSBwYXJhbGxlbCBzY2FucyAqLwotCQlBc3NlcnQo IXNjYW4tPnBhcmFsbGVsX3NjYW4pOwotCX0KLQotCUJUU2NhblBvc1VucGluSWZQaW5uZWQoc28t PmN1cnJQb3MpOwotCi0JLyogV2FsayB0byB0aGUgbmV4dCBwYWdlIHdpdGggZGF0YSAqLwotCWlm IChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCi0JCWJsa25vID0gc28tPmN1cnJQb3MubmV4 dFBhZ2U7Ci0JZWxzZQotCQlibGtubyA9IHNvLT5jdXJyUG9zLnByZXZQYWdlOwotCWxhc3RjdXJy Ymxrbm8gPSBzby0+Y3VyclBvcy5jdXJyUGFnZTsKLQotCS8qCi0JICogQ2FuY2VsIHByaW1pdGl2 ZSBpbmRleCBzY2FucyB0aGF0IHdlcmUgc2NoZWR1bGVkIHdoZW4gdGhlIGNhbGwgdG8KLQkgKiBf YnRfcmVhZHBhZ2UgZm9yIGN1cnJQb3MgaGFwcGVuZWQgdG8gdXNlIHRoZSBvcHBvc2l0ZSBkaXJl Y3Rpb24gdG8gdGhlCi0JICogb25lIHRoYXQgd2UncmUgc3RlcHBpbmcgaW4gbm93LiAgKEl0J3Mg b2theSB0byBsZWF2ZSB0aGUgc2NhbidzIGFycmF5Ci0JICoga2V5cyBhcy1pcywgc2luY2UgdGhl IG5leHQgX2J0X3JlYWRwYWdlIHdpbGwgYWR2YW5jZSB0aGVtLikKLQkgKi8KLQlpZiAoc28tPmN1 cnJQb3MuZGlyICE9IGRpcikKLQkJc28tPm5lZWRQcmltU2NhbiA9IGZhbHNlOwotCi0JcmV0dXJu IF9idF9yZWFkbmV4dHBhZ2Uoc2NhbiwgYmxrbm8sIGxhc3RjdXJyYmxrbm8sIGRpciwgZmFsc2Up OworCWlmIChuZXdiYXRjaC0+Y3VyclR1cGxlcykKKwkJaXRlbS0+dHVwbGVPZmZzZXQgPSBiYXNl T2Zmc2V0OwogfQogCiAvKgpAQCAtMjI1Miw3MyArMjExMiw5MCBAQCBfYnRfc3RlcHBhZ2UoSW5k ZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKICAqIHRvIHN0b3AgdGhlIHNjYW4g b24gdGhpcyBwYWdlIGJ5IGNhbGxpbmcgX2J0X2NoZWNra2V5cyBhZ2FpbnN0IHRoZSBoaWdoCiAg KiBrZXkuICBTZWUgX2J0X3JlYWRwYWdlIGZvciBmdWxsIGRldGFpbHMuCiAgKgotICogT24gZW50 cnksIHNvLT5jdXJyUG9zIG11c3QgYmUgcGlubmVkIGFuZCBsb2NrZWQgKHNvIG9mZm51bSBzdGF5 cyB2YWxpZCkuCisgKiBPbiBlbnRyeSwgZmlyc3RiYXRjaCBtdXN0IGJlIHBpbm5lZCBhbmQgbG9j a2VkIChzbyBvZmZudW0gc3RheXMgdmFsaWQpLgogICogUGFyYWxsZWwgc2NhbiBjYWxsZXJzIG11 c3QgaGF2ZSBzZWl6ZWQgdGhlIHNjYW4gYmVmb3JlIGNhbGxpbmcgaGVyZS4KICAqCi0gKiBPbiBl eGl0LCB3ZSdsbCBoYXZlIHVwZGF0ZWQgc28tPmN1cnJQb3MgYW5kIHJldGFpbmVkIGxvY2tzIGFu ZCBwaW5zCisgKiBPbiBleGl0LCB3ZSdsbCBoYXZlIHVwZGF0ZWQgZmlyc3RiYXRjaCBhbmQgcmV0 YWluZWQgbG9ja3MgYW5kIHBpbnMKICAqIGFjY29yZGluZyB0byB0aGUgc2FtZSBydWxlcyBhcyB0 aG9zZSBsYWlkIG91dCBmb3IgX2J0X3JlYWRuZXh0cGFnZSBleGl0LgotICogTGlrZSBfYnRfcmVh ZG5leHRwYWdlLCBvdXIgcmV0dXJuIHZhbHVlIGluZGljYXRlcyBpZiB0aGVyZSBhcmUgYW55IG1h dGNoaW5nCi0gKiByZWNvcmRzIGluIHRoZSBnaXZlbiBkaXJlY3Rpb24uCiAgKgogICogV2UgYWx3 YXlzIHJlbGVhc2UgdGhlIHNjYW4gZm9yIGEgcGFyYWxsZWwgc2NhbiBjYWxsZXIsIHJlZ2FyZGxl c3Mgb2YKICAqIHN1Y2Nlc3Mgb3IgZmFpbHVyZTsgd2UnbGwgY2FsbCBfYnRfcGFyYWxsZWxfcmVs ZWFzZSBhcyBzb29uIGFzIHBvc3NpYmxlLgogICovCi1zdGF0aWMgYm9vbAotX2J0X3JlYWRmaXJz dHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBPZmZzZXROdW1iZXIgb2ZmbnVtLCBTY2FuRGlyZWN0 aW9uIGRpcikKK3N0YXRpYyBCYXRjaEluZGV4U2NhbgorX2J0X3JlYWRmaXJzdHBhZ2UoSW5kZXhT Y2FuRGVzYyBzY2FuLCBCYXRjaEluZGV4U2NhbiBmaXJzdGJhdGNoLAorCQkJCSAgT2Zmc2V0TnVt YmVyIG9mZm51bSwgU2NhbkRpcmVjdGlvbiBkaXIpCiB7CiAJQlRTY2FuT3BhcXVlIHNvID0gKEJU U2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOworCUJsb2NrTnVtYmVyIGJsa25vLAorCQkJCWxhc3Rj dXJyYmxrbm87CiAKLQlzby0+bnVtS2lsbGVkID0gMDsJCQkvKiBqdXN0IHBhcmFub2lhICovCi0J c28tPm1hcmtJdGVtSW5kZXggPSAtMTsJCS8qIGRpdHRvICovCi0KLQkvKiBJbml0aWFsaXplIHNv LT5jdXJyUG9zIGZvciB0aGUgZmlyc3QgcGFnZSAocGFnZSBpbiBzby0+Y3VyclBvcy5idWYpICov CisJLyogSW5pdGlhbGl6ZSBmaXJzdGJhdGNoJ3MgcG9zaXRpb24gZm9yIHRoZSBmaXJzdCBwYWdl ICovCiAJaWYgKHNvLT5uZWVkUHJpbVNjYW4pCiAJewogCQlBc3NlcnQoc28tPm51bUFycmF5S2V5 cyk7CiAKLQkJc28tPmN1cnJQb3MubW9yZUxlZnQgPSB0cnVlOwotCQlzby0+Y3VyclBvcy5tb3Jl UmlnaHQgPSB0cnVlOworCQlmaXJzdGJhdGNoLT5tb3JlTGVmdCA9IHRydWU7CisJCWZpcnN0YmF0 Y2gtPm1vcmVSaWdodCA9IHRydWU7CiAJCXNvLT5uZWVkUHJpbVNjYW4gPSBmYWxzZTsKIAl9CiAJ ZWxzZSBpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpKQogCXsKLQkJc28tPmN1cnJQb3Mu bW9yZUxlZnQgPSBmYWxzZTsKLQkJc28tPmN1cnJQb3MubW9yZVJpZ2h0ID0gdHJ1ZTsKKwkJZmly c3RiYXRjaC0+bW9yZUxlZnQgPSBmYWxzZTsKKwkJZmlyc3RiYXRjaC0+bW9yZVJpZ2h0ID0gdHJ1 ZTsKIAl9CiAJZWxzZQogCXsKLQkJc28tPmN1cnJQb3MubW9yZUxlZnQgPSB0cnVlOwotCQlzby0+ Y3VyclBvcy5tb3JlUmlnaHQgPSBmYWxzZTsKKwkJZmlyc3RiYXRjaC0+bW9yZUxlZnQgPSB0cnVl OworCQlmaXJzdGJhdGNoLT5tb3JlUmlnaHQgPSBmYWxzZTsKIAl9CiAKIAkvKgogCSAqIEF0dGVt cHQgdG8gbG9hZCBtYXRjaGluZyB0dXBsZXMgZnJvbSB0aGUgZmlyc3QgcGFnZS4KIAkgKgotCSAq IE5vdGUgdGhhdCBfYnRfcmVhZHBhZ2Ugd2lsbCBmaW5pc2ggaW5pdGlhbGl6aW5nIHRoZSBzby0+ Y3VyclBvcyBmaWVsZHMuCisJICogTm90ZSB0aGF0IF9idF9yZWFkcGFnZSB3aWxsIGZpbmlzaCBp bml0aWFsaXppbmcgdGhlIGZpcnN0YmF0Y2ggZmllbGRzLgogCSAqIF9idF9yZWFkcGFnZSBhbHNv IHJlbGVhc2VzIHBhcmFsbGVsIHNjYW4gKGV2ZW4gd2hlbiBpdCByZXR1cm5zIGZhbHNlKS4KIAkg Ki8KLQlpZiAoX2J0X3JlYWRwYWdlKHNjYW4sIGRpciwgb2ZmbnVtLCB0cnVlKSkKKwlpZiAoX2J0 X3JlYWRwYWdlKHNjYW4sIGZpcnN0YmF0Y2gsIGRpciwgb2ZmbnVtLCB0cnVlKSkKIAl7Ci0JCVJl bGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247Ci0KLQkJLyoKLQkJICogX2J0X3JlYWRw YWdlIHN1Y2NlZWRlZC4gIERyb3AgdGhlIGxvY2sgKGFuZCBtYXliZSB0aGUgcGluKSBvbgotCQkg KiBzby0+Y3VyclBvcy5idWYgaW4gcHJlcGFyYXRpb24gZm9yIGJ0Z2V0dHVwbGUgcmV0dXJuaW5n IHR1cGxlcy4KLQkJICovCi0JCUFzc2VydChCVFNjYW5Qb3NJc1Bpbm5lZChzby0+Y3VyclBvcykp OwotCQlfYnRfZHJvcF9sb2NrX2FuZF9tYXliZV9waW4ocmVsLCBzbyk7Ci0JCXJldHVybiB0cnVl OworCQkvKiBfYnRfcmVhZHBhZ2Ugc2F2ZWQgb25lIG9yIG1vcmUgbWF0Y2hlcyBpbiBmaXJzdGJh dGNoLml0ZW1zW10gKi8KKwkJaW5kZXhhbV91dGlsX2JhdGNoX3VubG9jayhzY2FuLCBmaXJzdGJh dGNoKTsKKwkJcmV0dXJuIGZpcnN0YmF0Y2g7CiAJfQogCi0JLyogVGhlcmUncyBubyBhY3R1YWxs eS1tYXRjaGluZyBkYXRhIG9uIHRoZSBwYWdlIGluIHNvLT5jdXJyUG9zLmJ1ZiAqLwotCV9idF91 bmxvY2tidWYoc2Nhbi0+aW5kZXhSZWxhdGlvbiwgc28tPmN1cnJQb3MuYnVmKTsKKwkvKiBUaGVy ZSdzIG5vIGFjdHVhbGx5LW1hdGNoaW5nIGRhdGEgb24gdGhlIHBhZ2UgKi8KKwlfYnRfcmVsYnVm KHNjYW4tPmluZGV4UmVsYXRpb24sIGZpcnN0YmF0Y2gtPmJ1Zik7CisJZmlyc3RiYXRjaC0+YnVm ID0gSW52YWxpZEJ1ZmZlcjsKIAotCS8qIENhbGwgX2J0X3JlYWRuZXh0cGFnZSB1c2luZyBpdHMg X2J0X3N0ZXBwYWdlIHdyYXBwZXIgZnVuY3Rpb24gKi8KLQlpZiAoIV9idF9zdGVwcGFnZShzY2Fu LCBkaXIpKQotCQlyZXR1cm4gZmFsc2U7CisJLyogV2FsayB0byB0aGUgbmV4dCBwYWdlIHdpdGgg ZGF0YSAqLworCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCisJCWJsa25vID0gZmly c3RiYXRjaC0+bmV4dFBhZ2U7CisJZWxzZQorCQlibGtubyA9IGZpcnN0YmF0Y2gtPnByZXZQYWdl OworCWxhc3RjdXJyYmxrbm8gPSBmaXJzdGJhdGNoLT5jdXJyUGFnZTsKIAotCS8qIF9idF9yZWFk cGFnZSBmb3IgYSBsYXRlciBwYWdlIChub3cgaW4gc28tPmN1cnJQb3MpIHN1Y2NlZWRlZCAqLwot CXJldHVybiB0cnVlOworCUFzc2VydChmaXJzdGJhdGNoLT5kaXIgPT0gZGlyKTsKKworCWlmIChi bGtubyA9PSBQX05PTkUgfHwKKwkJKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSA/CisJCSAh Zmlyc3RiYXRjaC0+bW9yZVJpZ2h0IDogIWZpcnN0YmF0Y2gtPm1vcmVMZWZ0KSkKKwl7CisJCS8q CisJCSAqIGZpcnN0YmF0Y2ggX2J0X3JlYWRwYWdlIGNhbGwgZW5kZWQgc2NhbiBpbiB0aGlzIGRp cmVjdGlvbiAodGhvdWdoCisJCSAqIGlmIHNvLT5uZWVkUHJpbVNjYW4gd2FzIHNldCB0aGUgc2Nh biB3aWxsIGNvbnRpbnVlIGluIF9idF9maXJzdCkKKwkJICovCisJCWluZGV4YW1fdXRpbF9iYXRj aF9yZWxlYXNlKHNjYW4sIGZpcnN0YmF0Y2gpOworCQlfYnRfcGFyYWxsZWxfZG9uZShzY2FuKTsK KwkJcmV0dXJuIE5VTEw7CisJfQorCisJaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2Uoc2Nhbiwg Zmlyc3RiYXRjaCk7CisKKwkvKiBwYXJhbGxlbCBzY2FuIG11c3Qgc2VpemUgdGhlIHNjYW4gdG8g Z2V0IG5leHQgYmxrbm8gKi8KKwlpZiAoc2Nhbi0+cGFyYWxsZWxfc2NhbiAhPSBOVUxMICYmCisJ CSFfYnRfcGFyYWxsZWxfc2VpemUoc2NhbiwgJmJsa25vLCAmbGFzdGN1cnJibGtubywgZmFsc2Up KQorCQlyZXR1cm4gTlVMTDsJCQkvKiBkb25lIGlmZiBzby0+bmVlZFByaW1TY2FuIHdhc24ndCBz ZXQgKi8KKworCXJldHVybiBfYnRfcmVhZG5leHRwYWdlKHNjYW4sIGJsa25vLCBsYXN0Y3VycmJs a25vLCBkaXIsIGZhbHNlKTsKIH0KIAogLyoKQEAgLTIzMjgsMTAyICsyMjA1LDY5IEBAIF9idF9y ZWFkZmlyc3RwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgT2Zmc2V0TnVtYmVyIG9mZm51bSwgU2Nh bkRpcmVjdGlvbiBkaXIpCiAgKiBwcmV2aW91c2x5LXNhdmVkIHJpZ2h0IGxpbmsgb3IgbGVmdCBs aW5rLiAgbGFzdGN1cnJibGtubyBpcyB0aGUgcGFnZSB0aGF0CiAgKiB3YXMgY3VycmVudCBhdCB0 aGUgcG9pbnQgd2hlcmUgdGhlIGJsa25vIGxpbmsgd2FzIHNhdmVkLCB3aGljaCB3ZSB1c2UgdG8K ICAqIHJlYXNvbiBhYm91dCBjb25jdXJyZW50IHBhZ2Ugc3BsaXRzL3BhZ2UgZGVsZXRpb25zIGR1 cmluZyBiYWNrd2FyZHMgc2NhbnMuCi0gKiBJbiB0aGUgY29tbW9uIGNhc2Ugd2hlcmUgc2VpemVk PWZhbHNlLCBibGtubyBpcyBlaXRoZXIgc28tPmN1cnJQb3MubmV4dFBhZ2UKLSAqIG9yIHNvLT5j dXJyUG9zLnByZXZQYWdlLCBhbmQgbGFzdGN1cnJibGtubyBpcyBzby0+Y3VyclBvcy5jdXJyUGFn ZS4KKyAqIGJsa25vIGlzIHRoZSBwcmlvciBzY2FuIHBvc2l0aW9uJ3MgbmV4dFBhZ2Ugb3IgcHJl dlBhZ2UgKGRlcGVuZGluZyBvbiBzY2FuCisgKiBkaXJlY3Rpb24pLCBhbmQgbGFzdGN1cnJibGtu byBpcyB0aGUgcHJpb3IgcG9zaXRpb24ncyBjdXJyUGFnZS4KICAqCi0gKiBPbiBlbnRyeSwgc28t PmN1cnJQb3Mgc2hvdWxkbid0IGJlIGxvY2tlZCBieSBjYWxsZXIuICBzby0+Y3VyclBvcy5idWYg bXVzdAotICogYmUgSW52YWxpZEJ1ZmZlci91bnBpbm5lZCBhcyBuZWVkZWQgYnkgY2FsbGVyIChu b3RlIHRoYXQgbGFzdGN1cnJibGtubwotICogd29uJ3QgbmVlZCB0byBiZSByZWFkIGFnYWluIGlu IGFsbW9zdCBhbGwgY2FzZXMpLiAgUGFyYWxsZWwgc2NhbiBjYWxsZXJzCi0gKiB0aGF0IHNlaXpl ZCB0aGUgc2NhbiBiZWZvcmUgY2FsbGluZyBoZXJlIHNob3VsZCBwYXNzIHNlaXplZD10cnVlOyBz dWNoIGEKLSAqIGNhbGxlcidzIGJsa25vIGFuZCBsYXN0Y3VycmJsa25vIGFyZ3VtZW50cyBjb21l IGZyb20gdGhlIHNlaXplZCBzY2FuLgotICogc2VpemVkPWZhbHNlIGNhbGxlcnMganVzdCBwYXNz IHVzIHRoZSBibGtuby9sYXN0Y3VycmJsa25vIHRha2VuIGZyb20gdGhlaXIKLSAqIHNvLT5jdXJy UG9zLCB3aGljaCAoYWxvbmcgd2l0aCBzby0+Y3VyclBvcyBpdHNlbGYpIGNhbiBiZSB1c2VkIHRv IGVuZCB0aGUKLSAqIHNjYW4uICBBIHNlaXplZD1mYWxzZSBjYWxsZXIncyBibGtubyBjYW4gbmV2 ZXIgYmUgYXNzdW1lZCB0byBiZSB0aGUgcGFnZQotICogdGhhdCBtdXN0IGJlIHJlYWQgbmV4dCBk dXJpbmcgYSBwYXJhbGxlbCBzY2FuLCB0aG91Z2guICBXZSBtdXN0IGZpZ3VyZSB0aGF0Ci0gKiBw YXJ0IG91dCBmb3Igb3Vyc2VsdmVzIGJ5IHNlaXppbmcgdGhlIHNjYW4gKHRoZSBjb3JyZWN0IHBh Z2UgdG8gcmVhZCBtaWdodAotICogYWxyZWFkeSBiZSBiZXlvbmQgdGhlIHNlaXplZD1mYWxzZSBj YWxsZXIncyBibGtubyBkdXJpbmcgYSBwYXJhbGxlbCBzY2FuLAotICogdW5sZXNzIGJsa25vL3Nv LT5jdXJyUG9zLm5leHRQYWdlL3NvLT5jdXJyUG9zLnByZXZQYWdlIGlzIGFscmVhZHkgUF9OT05F LAotICogb3IgdW5sZXNzIHNvLT5jdXJyUG9zLm1vcmVSaWdodC9zby0+Y3VyclBvcy5tb3JlTGVm dCBpcyBhbHJlYWR5IHVuc2V0KS4KKyAqIE9uIGVudHJ5LCBubyBwYWdlIHNob3VsZCBiZSBsb2Nr ZWQgYnkgY2FsbGVyLgogICoKLSAqIE9uIHN1Y2Nlc3MgZXhpdCwgc28tPmN1cnJQb3MgaXMgdXBk YXRlZCB0byBjb250YWluIGRhdGEgZnJvbSB0aGUgbmV4dAotICogaW50ZXJlc3RpbmcgcGFnZSwg YW5kIHdlIHJldHVybiB0cnVlLiAgV2UgaG9sZCBhIHBpbiBvbiB0aGUgYnVmZmVyIG9uCi0gKiBz dWNjZXNzIGV4aXQgKGV4Y2VwdCBkdXJpbmcgc28tPmRyb3BQaW4gaW5kZXggc2NhbnMsIHdoZW4g d2UgZHJvcCB0aGUgcGluCi0gKiBlYWdlcmx5IHRvIGF2b2lkIGJsb2NraW5nIFZBQ1VVTSkuCisg KiBPbiBzdWNjZXNzIGV4aXQsIHJldHVybnMgc2NhbiBiYXRjaCBjb250YWluaW5nIGRhdGEgZnJv bSB0aGUgbmV4dAorICogaW50ZXJlc3RpbmcgcGFnZS4gIFdlIGhvbGQgYSBwaW4gb24gdGhlIGJ1 ZmZlciBvbiBzdWNjZXNzIGV4aXQgKGV4Y2VwdAorICogZHVyaW5nIGRyb3BQaW4gcGxhaW4gaW5k ZXggc2NhbnMsIHdoZW4gd2UgZHJvcCB0aGUgcGluIGVhZ2VybHkgdG8gYXZvaWQKKyAqIGJsb2Nr aW5nIFZBQ1VVTSkuICBJZiB0aGVyZSBhcmUgbm8gbW9yZSBtYXRjaGluZyByZWNvcmRzIGluIHRo ZSBnaXZlbgorICogZGlyZWN0aW9uLCB3ZSBqdXN0IHJldHVybiBOVUxMLgogICoKLSAqIElmIHRo ZXJlIGFyZSBubyBtb3JlIG1hdGNoaW5nIHJlY29yZHMgaW4gdGhlIGdpdmVuIGRpcmVjdGlvbiwg d2UgaW52YWxpZGF0ZQotICogc28tPmN1cnJQb3MgKHdoaWxlIGVuc3VyaW5nIGl0IHJldGFpbnMg bm8gbG9ja3Mgb3IgcGlucyksIGFuZCByZXR1cm4gZmFsc2UuCi0gKgotICogV2UgYWx3YXlzIHJl bGVhc2UgdGhlIHNjYW4gZm9yIGEgcGFyYWxsZWwgc2NhbiBjYWxsZXIsIHJlZ2FyZGxlc3Mgb2YK LSAqIHN1Y2Nlc3Mgb3IgZmFpbHVyZTsgd2UnbGwgY2FsbCBfYnRfcGFyYWxsZWxfcmVsZWFzZSBh cyBzb29uIGFzIHBvc3NpYmxlLgorICogUGFyYWxsZWwgc2NhbiBjYWxsZXJzIG11c3Qgc2VpemUg dGhlIHNjYW4gYmVmb3JlIGNhbGxpbmcgaGVyZS4gIGJsa25vIGFuZAorICogbGFzdGN1cnJibGtu byBzaG91bGQgY29tZSBmcm9tIHRoZSBzZWl6ZWQgc2Nhbi4gIFdlJ2xsIHJlbGVhc2UgdGhlIHNj YW4gYXMKKyAqIHNvb24gYXMgcG9zc2libGUuCiAgKi8KLXN0YXRpYyBib29sCitzdGF0aWMgQmF0 Y2hJbmRleFNjYW4KIF9idF9yZWFkbmV4dHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBCbG9ja051 bWJlciBibGtubywKLQkJCQkgQmxvY2tOdW1iZXIgbGFzdGN1cnJibGtubywgU2NhbkRpcmVjdGlv biBkaXIsIGJvb2wgc2VpemVkKQorCQkJCSBCbG9ja051bWJlciBsYXN0Y3VycmJsa25vLCBTY2Fu RGlyZWN0aW9uIGRpciwgYm9vbCBmaXJzdHBhZ2UpCiB7CiAJUmVsYXRpb24JcmVsID0gc2Nhbi0+ aW5kZXhSZWxhdGlvbjsKLQlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5v cGFxdWU7CisJQmF0Y2hJbmRleFNjYW4gbmV3YmF0Y2g7CiAKLQlBc3NlcnQoc28tPmN1cnJQb3Mu Y3VyclBhZ2UgPT0gbGFzdGN1cnJibGtubyB8fCBzZWl6ZWQpOwotCUFzc2VydCghKGJsa25vID09 IFBfTk9ORSAmJiBzZWl6ZWQpKTsKLQlBc3NlcnQoIUJUU2NhblBvc0lzUGlubmVkKHNvLT5jdXJy UG9zKSk7CisJLyogQWxsb2NhdGUgc3BhY2UgZm9yIG5leHQgYmF0Y2ggKi8KKwluZXdiYXRjaCA9 IGluZGV4YW1fdXRpbF9iYXRjaF9hbGxvYyhzY2FuLCBNYXhUSURzUGVyQlRyZWVQYWdlLAorCQkJ CQkJCQkJCXNjYW4tPnhzX3dhbnRfaXR1cCk7CiAKIAkvKgotCSAqIFJlbWVtYmVyIHRoYXQgdGhl IHNjYW4gYWxyZWFkeSByZWFkIGxhc3RjdXJyYmxrbm8sIGEgcGFnZSB0byB0aGUgbGVmdAotCSAq IG9mIGJsa25vIChvciByZW1lbWJlciByZWFkaW5nIGEgcGFnZSB0byB0aGUgcmlnaHQsIGZvciBi YWNrd2FyZHMgc2NhbnMpCisJICogcG9zIGlzIHRoZSBmaXJzdCB2YWxpZCBwYWdlIHRvIHRoZSBy aWdodCAob3IgdG8gdGhlIGxlZnQpIG9mCisJICogbGFzdGN1cnJibGtuby4gIEFsc28gcHJvdmlz aW9uYWxseSBhc3N1bWUgdGhhdCB0aGVyZSdsbCBiZSBhbm90aGVyIHBhZ2UKKwkgKiB3ZSdsbCBu ZWVkIHRvIHRoZSByaWdodCAob3IgdG8gdGhlIGxlZnQpIGFoZWFkIG9mIF9idF9yZWFkcGFnZSBj YWxsLgogCSAqLwotCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCi0JCXNvLT5jdXJy UG9zLm1vcmVMZWZ0ID0gdHJ1ZTsKLQllbHNlCi0JCXNvLT5jdXJyUG9zLm1vcmVSaWdodCA9IHRy dWU7CisJbmV3YmF0Y2gtPm1vcmVMZWZ0ID0gdHJ1ZTsKKwluZXdiYXRjaC0+bW9yZVJpZ2h0ID0g dHJ1ZTsKIAogCWZvciAoOzspCiAJewogCQlQYWdlCQlwYWdlOwogCQlCVFBhZ2VPcGFxdWUgb3Bh cXVlOwogCi0JCWlmIChibGtubyA9PSBQX05PTkUgfHwKLQkJCShTY2FuRGlyZWN0aW9uSXNGb3J3 YXJkKGRpcikgPwotCQkJICFzby0+Y3VyclBvcy5tb3JlUmlnaHQgOiAhc28tPmN1cnJQb3MubW9y ZUxlZnQpKQotCQl7Ci0JCQkvKiBtb3N0IHJlY2VudCBfYnRfcmVhZHBhZ2UgY2FsbCAoZm9yIGxh c3RjdXJyYmxrbm8pIGVuZGVkIHNjYW4gKi8KLQkJCUFzc2VydChzby0+Y3VyclBvcy5jdXJyUGFn ZSA9PSBsYXN0Y3VycmJsa25vICYmICFzZWl6ZWQpOwotCQkJQlRTY2FuUG9zSW52YWxpZGF0ZShz by0+Y3VyclBvcyk7Ci0JCQlfYnRfcGFyYWxsZWxfZG9uZShzY2FuKTsJLyogaWZmICFzby0+bmVl ZFByaW1TY2FuICovCi0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQotCQlBc3NlcnQoIXNvLT5uZWVk UHJpbVNjYW4pOwotCi0JCS8qIHBhcmFsbGVsIHNjYW4gbXVzdCBuZXZlciBhY3R1YWxseSB2aXNp dCBzby0+Y3VyclBvcyBibGtubyAqLwotCQlpZiAoIXNlaXplZCAmJiBzY2FuLT5wYXJhbGxlbF9z Y2FuICE9IE5VTEwgJiYKLQkJCSFfYnRfcGFyYWxsZWxfc2VpemUoc2NhbiwgJmJsa25vLCAmbGFz dGN1cnJibGtubywgZmFsc2UpKQotCQl7Ci0JCQkvKiB3aG9sZSBzY2FuIGlzIG5vdyBkb25lIChv ciBhbm90aGVyIHByaW1pdGl2ZSBzY2FuIHJlcXVpcmVkKSAqLwotCQkJQlRTY2FuUG9zSW52YWxp ZGF0ZShzby0+Y3VyclBvcyk7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KKwkJQXNzZXJ0KCEoKEJU U2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlKS0+bmVlZFByaW1TY2FuKTsKKwkJQXNzZXJ0KGJsa25v ICE9IFBfTk9ORSAmJiBsYXN0Y3VycmJsa25vICE9IFBfTk9ORSk7CiAKIAkJaWYgKFNjYW5EaXJl Y3Rpb25Jc0ZvcndhcmQoZGlyKSkKIAkJewogCQkJLyogcmVhZCBibGtubywgYnV0IGNoZWNrIGZv ciBpbnRlcnJ1cHRzIGZpcnN0ICovCiAJCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwotCQkJc28t PmN1cnJQb3MuYnVmID0gX2J0X2dldGJ1ZihyZWwsIGJsa25vLCBCVF9SRUFEKTsKKwkJCW5ld2Jh dGNoLT5idWYgPSBfYnRfZ2V0YnVmKHJlbCwgYmxrbm8sIEJUX1JFQUQpOwogCQl9CiAJCWVsc2UK IAkJewogCQkJLyogcmVhZCBibGtubywgYXZvaWRpbmcgcmFjZSAoYWxzbyBjaGVja3MgZm9yIGlu dGVycnVwdHMpICovCi0JCQlzby0+Y3VyclBvcy5idWYgPSBfYnRfbG9ja19hbmRfdmFsaWRhdGVf bGVmdChyZWwsICZibGtubywKLQkJCQkJCQkJCQkJCQkJIGxhc3RjdXJyYmxrbm8pOwotCQkJaWYg KHNvLT5jdXJyUG9zLmJ1ZiA9PSBJbnZhbGlkQnVmZmVyKQorCQkJbmV3YmF0Y2gtPmJ1ZiA9IF9i dF9sb2NrX2FuZF92YWxpZGF0ZV9sZWZ0KHJlbCwgJmJsa25vLAorCQkJCQkJCQkJCQkJCSAgIGxh c3RjdXJyYmxrbm8pOworCQkJaWYgKG5ld2JhdGNoLT5idWYgPT0gSW52YWxpZEJ1ZmZlcikKIAkJ CXsKIAkJCQkvKiBtdXN0IGhhdmUgYmVlbiBhIGNvbmN1cnJlbnQgZGVsZXRpb24gb2YgbGVmdG1v c3QgcGFnZSAqLwotCQkJCUJUU2NhblBvc0ludmFsaWRhdGUoc28tPmN1cnJQb3MpOwogCQkJCV9i dF9wYXJhbGxlbF9kb25lKHNjYW4pOwotCQkJCXJldHVybiBmYWxzZTsKKwkJCQlpbmRleGFtX3V0 aWxfYmF0Y2hfcmVsZWFzZShzY2FuLCBuZXdiYXRjaCk7CisJCQkJcmV0dXJuIE5VTEw7CiAJCQl9 CiAJCX0KIAotCQlwYWdlID0gQnVmZmVyR2V0UGFnZShzby0+Y3VyclBvcy5idWYpOworCQlwYWdl ID0gQnVmZmVyR2V0UGFnZShuZXdiYXRjaC0+YnVmKTsKIAkJb3BhcXVlID0gQlRQYWdlR2V0T3Bh cXVlKHBhZ2UpOwogCQlsYXN0Y3VycmJsa25vID0gYmxrbm87CiAJCWlmIChsaWtlbHkoIVBfSUdO T1JFKG9wYXF1ZSkpKQpAQCAtMjQzMSwxNyArMjI3NSwxNyBAQCBfYnRfcmVhZG5leHRwYWdlKElu ZGV4U2NhbkRlc2Mgc2NhbiwgQmxvY2tOdW1iZXIgYmxrbm8sCiAJCQkvKiBzZWUgaWYgdGhlcmUg YXJlIGFueSBtYXRjaGVzIG9uIHRoaXMgcGFnZSAqLwogCQkJaWYgKFNjYW5EaXJlY3Rpb25Jc0Zv cndhcmQoZGlyKSkKIAkJCXsKLQkJCQkvKiBub3RlIHRoYXQgdGhpcyB3aWxsIGNsZWFyIG1vcmVS aWdodCBpZiB3ZSBjYW4gc3RvcCAqLwotCQkJCWlmIChfYnRfcmVhZHBhZ2Uoc2NhbiwgZGlyLCBQ X0ZJUlNUREFUQUtFWShvcGFxdWUpLCBzZWl6ZWQpKQorCQkJCWlmIChfYnRfcmVhZHBhZ2Uoc2Nh biwgbmV3YmF0Y2gsIGRpciwKKwkJCQkJCQkJIFBfRklSU1REQVRBS0VZKG9wYXF1ZSksIGZpcnN0 cGFnZSkpCiAJCQkJCWJyZWFrOwotCQkJCWJsa25vID0gc28tPmN1cnJQb3MubmV4dFBhZ2U7CisJ CQkJYmxrbm8gPSBuZXdiYXRjaC0+bmV4dFBhZ2U7CiAJCQl9CiAJCQllbHNlCiAJCQl7Ci0JCQkJ Lyogbm90ZSB0aGF0IHRoaXMgd2lsbCBjbGVhciBtb3JlTGVmdCBpZiB3ZSBjYW4gc3RvcCAqLwot CQkJCWlmIChfYnRfcmVhZHBhZ2Uoc2NhbiwgZGlyLCBQYWdlR2V0TWF4T2Zmc2V0TnVtYmVyKHBh Z2UpLCBzZWl6ZWQpKQorCQkJCWlmIChfYnRfcmVhZHBhZ2Uoc2NhbiwgbmV3YmF0Y2gsIGRpciwK KwkJCQkJCQkJIFBhZ2VHZXRNYXhPZmZzZXROdW1iZXIocGFnZSksIGZpcnN0cGFnZSkpCiAJCQkJ CWJyZWFrOwotCQkJCWJsa25vID0gc28tPmN1cnJQb3MucHJldlBhZ2U7CisJCQkJYmxrbm8gPSBu ZXdiYXRjaC0+cHJldlBhZ2U7CiAJCQl9CiAJCX0KIAkJZWxzZQpAQCAtMjQ1NiwxOSArMjMwMCwz OSBAQCBfYnRfcmVhZG5leHRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmxvY2tOdW1iZXIgYmxr bm8sCiAJCX0KIAogCQkvKiBubyBtYXRjaGluZyB0dXBsZXMgb24gdGhpcyBwYWdlICovCi0JCV9i dF9yZWxidWYocmVsLCBzby0+Y3VyclBvcy5idWYpOwotCQlzZWl6ZWQgPSBmYWxzZTsJCQkvKiBy ZWxlYXNlZCBieSBfYnRfcmVhZHBhZ2UgKG9yIGJ5IHVzKSAqLworCQlfYnRfcmVsYnVmKHJlbCwg bmV3YmF0Y2gtPmJ1Zik7CisJCW5ld2JhdGNoLT5idWYgPSBJbnZhbGlkQnVmZmVyOworCisJCS8q IENvbnRpbnVlIHRoZSBzY2FuIGluIHRoaXMgZGlyZWN0aW9uPyAqLworCQlpZiAoYmxrbm8gPT0g UF9OT05FIHx8CisJCQkoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpID8KKwkJCSAhbmV3YmF0 Y2gtPm1vcmVSaWdodCA6ICFuZXdiYXRjaC0+bW9yZUxlZnQpKQorCQl7CisJCQkvKgorCQkJICog Ymxrbm8gX2J0X3JlYWRwYWdlIGNhbGwgZW5kZWQgc2NhbiBpbiB0aGlzIGRpcmVjdGlvbiAodGhv dWdoIGlmCisJCQkgKiBzby0+bmVlZFByaW1TY2FuIHdhcyBzZXQgdGhlIHNjYW4gd2lsbCBjb250 aW51ZSBpbiBfYnRfZmlyc3QpCisJCQkgKi8KKwkJCV9idF9wYXJhbGxlbF9kb25lKHNjYW4pOwor CQkJaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2Uoc2NhbiwgbmV3YmF0Y2gpOworCQkJcmV0dXJu IE5VTEw7CisJCX0KKworCQkvKiBwYXJhbGxlbCBzY2FuIG11c3Qgc2VpemUgdGhlIHNjYW4gdG8g Z2V0IG5leHQgYmxrbm8gKi8KKwkJaWYgKHNjYW4tPnBhcmFsbGVsX3NjYW4gIT0gTlVMTCAmJgor CQkJIV9idF9wYXJhbGxlbF9zZWl6ZShzY2FuLCAmYmxrbm8sICZsYXN0Y3VycmJsa25vLCBmYWxz ZSkpCisJCXsKKwkJCWluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlKHNjYW4sIG5ld2JhdGNoKTsK KwkJCXJldHVybiBOVUxMOwkJLyogZG9uZSBpZmYgc28tPm5lZWRQcmltU2NhbiB3YXNuJ3Qgc2V0 ICovCisJCX0KKworCQlmaXJzdHBhZ2UgPSBmYWxzZTsJCS8qIG5leHQgcGFnZSBjYW5ub3QgYmUg Zmlyc3QgKi8KIAl9CiAKLQkvKgotCSAqIF9idF9yZWFkcGFnZSBzdWNjZWVkZWQuICBEcm9wIHRo ZSBsb2NrIChhbmQgbWF5YmUgdGhlIHBpbikgb24KLQkgKiBzby0+Y3VyclBvcy5idWYgaW4gcHJl cGFyYXRpb24gZm9yIGJ0Z2V0dHVwbGUgcmV0dXJuaW5nIHR1cGxlcy4KLQkgKi8KLQlBc3NlcnQo c28tPmN1cnJQb3MuY3VyclBhZ2UgPT0gYmxrbm8pOwotCUFzc2VydChCVFNjYW5Qb3NJc1Bpbm5l ZChzby0+Y3VyclBvcykpOwotCV9idF9kcm9wX2xvY2tfYW5kX21heWJlX3BpbihyZWwsIHNvKTsK KwkvKiBfYnRfcmVhZHBhZ2Ugc2F2ZWQgb25lIG9yIG1vcmUgbWF0Y2hlcyBpbiBuZXdiYXRjaC5p dGVtc1tdICovCisJQXNzZXJ0KG5ld2JhdGNoLT5jdXJyUGFnZSA9PSBibGtubyk7CisJaW5kZXhh bV91dGlsX2JhdGNoX3VubG9jayhzY2FuLCBuZXdiYXRjaCk7CiAKLQlyZXR1cm4gdHJ1ZTsKKwly ZXR1cm4gbmV3YmF0Y2g7CiB9CiAKIC8qCkBAIC0yNjkxLDI1ICsyNTU1LDIzIEBAIF9idF9nZXRf ZW5kcG9pbnQoUmVsYXRpb24gcmVsLCB1aW50MzIgbGV2ZWwsIGJvb2wgcmlnaHRtb3N0KQogICog UGFyYWxsZWwgc2NhbiBjYWxsZXJzIG11c3QgaGF2ZSBzZWl6ZWQgdGhlIHNjYW4gYmVmb3JlIGNh bGxpbmcgaGVyZS4KICAqIEV4aXQgY29uZGl0aW9ucyBhcmUgdGhlIHNhbWUgYXMgZm9yIF9idF9m aXJzdCgpLgogICovCi1zdGF0aWMgYm9vbAotX2J0X2VuZHBvaW50KEluZGV4U2NhbkRlc2Mgc2Nh biwgU2NhbkRpcmVjdGlvbiBkaXIpCitzdGF0aWMgQmF0Y2hJbmRleFNjYW4KK19idF9lbmRwb2lu dChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBCYXRjaEluZGV4U2NhbiBm aXJzdGJhdGNoKQogewogCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247Ci0JQlRT Y2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwogCVBhZ2UJCXBhZ2U7 CiAJQlRQYWdlT3BhcXVlIG9wYXF1ZTsKIAlPZmZzZXROdW1iZXIgc3RhcnQ7CiAKLQlBc3NlcnQo IUJUU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKTsKLQlBc3NlcnQoIXNvLT5uZWVkUHJpbVNj YW4pOworCUFzc2VydCghKChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZSktPm5lZWRQcmltU2Nh bik7CiAKIAkvKgogCSAqIFNjYW4gZG93biB0byB0aGUgbGVmdG1vc3Qgb3IgcmlnaHRtb3N0IGxl YWYgcGFnZS4gIFRoaXMgaXMgYSBzaW1wbGlmaWVkCiAJICogdmVyc2lvbiBvZiBfYnRfc2VhcmNo KCkuCiAJICovCi0Jc28tPmN1cnJQb3MuYnVmID0gX2J0X2dldF9lbmRwb2ludChyZWwsIDAsIFNj YW5EaXJlY3Rpb25Jc0JhY2t3YXJkKGRpcikpOworCWZpcnN0YmF0Y2gtPmJ1ZiA9IF9idF9nZXRf ZW5kcG9pbnQocmVsLCAwLCBTY2FuRGlyZWN0aW9uSXNCYWNrd2FyZChkaXIpKTsKIAotCWlmICgh QnVmZmVySXNWYWxpZChzby0+Y3VyclBvcy5idWYpKQorCWlmICghQnVmZmVySXNWYWxpZChmaXJz dGJhdGNoLT5idWYpKQogCXsKIAkJLyoKIAkJICogRW1wdHkgaW5kZXguIExvY2sgdGhlIHdob2xl IHJlbGF0aW9uLCBhcyBub3RoaW5nIGZpbmVyIHRvIGxvY2sKQEAgLTI3MjAsNyArMjU4Miw3IEBA IF9idF9lbmRwb2ludChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCQly ZXR1cm4gZmFsc2U7CiAJfQogCi0JcGFnZSA9IEJ1ZmZlckdldFBhZ2Uoc28tPmN1cnJQb3MuYnVm KTsKKwlwYWdlID0gQnVmZmVyR2V0UGFnZShmaXJzdGJhdGNoLT5idWYpOwogCW9wYXF1ZSA9IEJU UGFnZUdldE9wYXF1ZShwYWdlKTsKIAlBc3NlcnQoUF9JU0xFQUYob3BhcXVlKSk7CiAKQEAgLTI3 NDYsOSArMjYwOCw1IEBAIF9idF9lbmRwb2ludChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJl Y3Rpb24gZGlyKQogCS8qCiAJICogTm93IGxvYWQgZGF0YSBmcm9tIHRoZSBmaXJzdCBwYWdlIG9m IHRoZSBzY2FuLgogCSAqLwotCWlmICghX2J0X3JlYWRmaXJzdHBhZ2Uoc2Nhbiwgc3RhcnQsIGRp cikpCi0JCXJldHVybiBmYWxzZTsKLQotCV9idF9yZXR1cm5pdGVtKHNjYW4sIHNvKTsKLQlyZXR1 cm4gdHJ1ZTsKKwlyZXR1cm4gX2J0X3JlYWRmaXJzdHBhZ2Uoc2NhbiwgZmlyc3RiYXRjaCwgc3Rh cnQsIGRpcik7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHV0 aWxzLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHV0aWxzLmMKaW5kZXggYWIwZjk4 YjAyLi5iOTJhZGM1YzcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0 dXRpbHMuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHV0aWxzLmMKQEAgLTEw MjIsMTQgKzEwMjIsNiBAQCBfYnRfYWR2YW5jZV9hcnJheV9rZXlzX2luY3JlbWVudChJbmRleFNj YW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLAogCSAqIFJlc3RvcmUgdGhlIGFycmF5IGtl eXMgdG8gdGhlIHN0YXRlIHRoZXkgd2VyZSBpbiBpbW1lZGlhdGVseSBiZWZvcmUgd2UKIAkgKiB3 ZXJlIGNhbGxlZC4gIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBhcnJheXMgb25seSBldmVyIHJhdGNo ZXQgaW4gdGhlCiAJICogY3VycmVudCBzY2FuIGRpcmVjdGlvbi4KLQkgKgotCSAqIFdpdGhvdXQg dGhpcywgc2NhbnMgY291bGQgb3Zlcmxvb2sgbWF0Y2hpbmcgdHVwbGVzIHdoZW4gdGhlIHNjYW4K LQkgKiBkaXJlY3Rpb24gZ2V0cyByZXZlcnNlZCBqdXN0IGJlZm9yZSBidGdldHR1cGxlIHJ1bnMg b3V0IG9mIGl0ZW1zIHRvCi0JICogcmV0dXJuLCBidXQganVzdCBhZnRlciBfYnRfcmVhZHBhZ2Ug cHJlcGFyZXMgYWxsIHRoZSBpdGVtcyBmcm9tIHRoZQotCSAqIHNjYW4ncyBmaW5hbCBwYWdlIGlu IHNvLT5jdXJyUG9zLiAgV2hlbiB3ZSdyZSBvbiB0aGUgZmluYWwgcGFnZSBpdCBpcwotCSAqIHR5 cGljYWwgZm9yIHNvLT5jdXJyUG9zIHRvIGdldCBpbnZhbGlkYXRlZCBvbmNlIGJ0Z2V0dHVwbGUg ZmluYWxseQotCSAqIHJldHVybnMgZmFsc2UsIHdoaWNoJ2xsIGVmZmVjdGl2ZWx5IGludmFsaWRh dGUgdGhlIHNjYW4ncyBhcnJheSBrZXlzLgotCSAqIFRoYXQgaGFzbid0IGhhcHBlbmVkIHlldCwg dGhvdWdoIC0tIGFuZCBpbiBnZW5lcmFsIGl0IG1heSBuZXZlciBoYXBwZW4uCiAJICovCiAJX2J0 X3N0YXJ0X2FycmF5X2tleXMoc2NhbiwgLWRpcik7CiAKQEAgLTEzOTYsNyArMTM4OCw3IEBAIF9i dF9hZHZhbmNlX2FycmF5X2tleXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBCVFJlYWRQYWdlU3RhdGUg KnBzdGF0ZSwKIHsKIAlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFx dWU7CiAJUmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKLQlTY2FuRGlyZWN0aW9u IGRpciA9IHNvLT5jdXJyUG9zLmRpcjsKKwlTY2FuRGlyZWN0aW9uIGRpciA9IHBzdGF0ZSA/IHBz dGF0ZS0+ZGlyIDogRm9yd2FyZFNjYW5EaXJlY3Rpb247CiAJaW50CQkJYXJyYXlpZHggPSAwOwog CWJvb2wJCWJleW9uZF9lbmRfYWR2YW5jZSA9IGZhbHNlLAogCQkJCXNraXBfYXJyYXlfYWR2YW5j ZWQgPSBmYWxzZSwKQEAgLTIwMzMsMTMgKzIwMjUsMTMgQEAgbmV3X3ByaW1fc2NhbjoKIAkgKiBO b3RlOiBXZSBtYWtlIGEgc29mdCBhc3N1bXB0aW9uIHRoYXQgdGhlIGN1cnJlbnQgc2NhbiBkaXJl Y3Rpb24gd2lsbAogCSAqIGFsc28gYmUgdXNlZCB3aXRoaW4gX2J0X25leHQsIHdoZW4gaXQgaXMg YXNrZWQgdG8gc3RlcCBvZmYgdGhpcyBwYWdlLgogCSAqIEl0IGlzIHVwIHRvIF9idF9uZXh0IHRv IGNhbmNlbCB0aGlzIHNjaGVkdWxlZCBwcmltaXRpdmUgaW5kZXggc2NhbgotCSAqIHdoZW5ldmVy IGl0IHN0ZXBzIHRvIGEgcGFnZSBpbiB0aGUgZGlyZWN0aW9uIG9wcG9zaXRlIGN1cnJQb3MuZGly LgorCSAqIHdoZW5ldmVyIGl0IHN0ZXBzIHRvIGEgcGFnZSBpbiB0aGUgZGlyZWN0aW9uIG9wcG9z aXRlIHBzdGF0ZS0+ZGlyLgogCSAqLwogCXBzdGF0ZS0+Y29udGludWVzY2FuID0gZmFsc2U7CS8q IFRlbGwgX2J0X3JlYWRwYWdlIHdlJ3JlIGRvbmUuLi4gKi8KIAlzby0+bmVlZFByaW1TY2FuID0g dHJ1ZTsJLyogLi4uYnV0IGNhbGwgX2J0X2ZpcnN0IGFnYWluICovCiAKIAlpZiAoc2Nhbi0+cGFy YWxsZWxfc2NhbikKLQkJX2J0X3BhcmFsbGVsX3ByaW1zY2FuX3NjaGVkdWxlKHNjYW4sIHNvLT5j dXJyUG9zLmN1cnJQYWdlKTsKKwkJX2J0X3BhcmFsbGVsX3ByaW1zY2FuX3NjaGVkdWxlKHNjYW4s IHBzdGF0ZS0+Y3VycnBhZ2UpOwogCiAJLyogQ2FsbGVyJ3MgdHVwbGUgZG9lc24ndCBtYXRjaCB0 aGUgbmV3IHF1YWwgKi8KIAlyZXR1cm4gZmFsc2U7CkBAIC0yMTUxLDggKzIxNDMsOCBAQCBfYnRf Y2hlY2trZXlzKEluZGV4U2NhbkRlc2Mgc2NhbiwgQlRSZWFkUGFnZVN0YXRlICpwc3RhdGUsIGJv b2wgYXJyYXlLZXlzLAogCQkJICBJbmRleFR1cGxlIHR1cGxlLCBpbnQgdHVwbmF0dHMpCiB7CiAJ VHVwbGVEZXNjCXR1cGRlc2MgPSBSZWxhdGlvbkdldERlc2NyKHNjYW4tPmluZGV4UmVsYXRpb24p OwotCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKLQlTY2Fu RGlyZWN0aW9uIGRpciA9IHNvLT5jdXJyUG9zLmRpcjsKKwlCVFNjYW5PcGFxdWUgc28gUEdfVVNF RF9GT1JfQVNTRVJUU19PTkxZID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOworCVNjYW5E aXJlY3Rpb24gZGlyID0gcHN0YXRlLT5kaXI7CiAJaW50CQkJaWtleSA9IHBzdGF0ZS0+c3RhcnRp a2V5OwogCWJvb2wJCXJlczsKIApAQCAtMzMwMSw4ICszMjkzLDcgQEAgc3RhdGljIHZvaWQKIF9i dF9jaGVja2tleXNfbG9va19haGVhZChJbmRleFNjYW5EZXNjIHNjYW4sIEJUUmVhZFBhZ2VTdGF0 ZSAqcHN0YXRlLAogCQkJCQkJIGludCB0dXBuYXR0cywgVHVwbGVEZXNjIHR1cGRlc2MpCiB7Ci0J QlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwotCVNjYW5EaXJl Y3Rpb24gZGlyID0gc28tPmN1cnJQb3MuZGlyOworCVNjYW5EaXJlY3Rpb24gZGlyID0gcHN0YXRl LT5kaXI7CiAJT2Zmc2V0TnVtYmVyIGFoZWFkb2ZmbnVtOwogCUluZGV4VHVwbGUJYWhlYWQ7CiAK QEAgLTMzNzIsNzMgKzMzNjMsNjkgQEAgX2J0X2NoZWNra2V5c19sb29rX2FoZWFkKEluZGV4U2Nh bkRlc2Mgc2NhbiwgQlRSZWFkUGFnZVN0YXRlICpwc3RhdGUsCiAgKiBfYnRfa2lsbGl0ZW1zIC0g c2V0IExQX0RFQUQgc3RhdGUgZm9yIGl0ZW1zIGFuIGluZGV4c2NhbiBjYWxsZXIgaGFzCiAgKiB0 b2xkIHVzIHdlcmUga2lsbGVkCiAgKgotICogc2Nhbi0+b3BhcXVlLCByZWZlcmVuY2VkIGxvY2Fs bHkgdGhyb3VnaCBzbywgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlCi0gKiBjdXJyZW50 IHBhZ2UgYW5kIGtpbGxlZCB0dXBsZXMgdGhlcmVvbiAoZ2VuZXJhbGx5LCB0aGlzIHNob3VsZCBv bmx5IGJlCi0gKiBjYWxsZWQgaWYgc28tPm51bUtpbGxlZCA+IDApLgorICogVGhlIGJhdGNoIHBh cmFtZXRlciBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY3VycmVudCBwYWdlIGFuZCBr aWxsZWQKKyAqIHR1cGxlcyB0aGVyZW9uICh0aGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBpZiBi YXRjaC0+bnVtS2lsbGVkID4gMCkuCiAgKgotICogQ2FsbGVyIHNob3VsZCBub3QgaGF2ZSBhIGxv Y2sgb24gdGhlIHNvLT5jdXJyUG9zIHBhZ2UsIGJ1dCBtdXN0IGhvbGQgYQotICogYnVmZmVyIHBp biB3aGVuICFzby0+ZHJvcFBpbi4gIFdoZW4gd2UgcmV0dXJuLCBpdCBzdGlsbCB3b24ndCBiZSBs b2NrZWQuCi0gKiBJdCdsbCBjb250aW51ZSB0byBob2xkIHdoYXRldmVyIHBpbnMgd2VyZSBoZWxk IGJlZm9yZSBjYWxsaW5nIGhlcmUuCisgKiBDYWxsZXIgc2hvdWxkIG5vdCBoYXZlIGEgbG9jayBv biB0aGUgYmF0Y2ggcG9zaXRpb24ncyBwYWdlLCBidXQgbXVzdCBob2xkIGEKKyAqIGJ1ZmZlciBw aW4gd2hlbiAhZHJvcFBpbi4gIFdoZW4gd2UgcmV0dXJuLCBpdCBzdGlsbCB3b24ndCBiZSBsb2Nr ZWQuICBJdCdsbAorICogY29udGludWUgdG8gaG9sZCB3aGF0ZXZlciBwaW5zIHdlcmUgaGVsZCBi ZWZvcmUgY2FsbGluZyBoZXJlLgogICoKICAqIFdlIG1hdGNoIGl0ZW1zIGJ5IGhlYXAgVElEIGJl Zm9yZSBhc3N1bWluZyB0aGV5IGFyZSB0aGUgcmlnaHQgb25lcyB0byBzZXQKICAqIExQX0RFQUQu ICBJZiB0aGUgc2NhbiBpcyBvbmUgdGhhdCBob2xkcyBhIGJ1ZmZlciBwaW4gb24gdGhlIHRhcmdl dCBwYWdlCiAgKiBjb250aW51b3VzbHkgZnJvbSBpbml0aWFsbHkgcmVhZGluZyB0aGUgaXRlbXMg dW50aWwgYXBwbHlpbmcgdGhpcyBmdW5jdGlvbgotICogKGlmIGl0IGlzIGEgIXNvLT5kcm9wUGlu IHNjYW4pLCBWQUNVVU0gY2Fubm90IGhhdmUgZGVsZXRlZCBhbnkgaXRlbXMgb24gdGhlCisgKiAo aWYgaXQgaXMgYSAhZHJvcFBpbiBzY2FuKSwgVkFDVVVNIGNhbm5vdCBoYXZlIGRlbGV0ZWQgYW55 IGl0ZW1zIG9uIHRoZQogICogcGFnZSwgc28gdGhlIHBhZ2UncyBUSURzIGNhbid0IGhhdmUgYmVl biByZWN5Y2xlZCBieSBub3cuICBUaGVyZSdzIG5vIHJpc2sKICAqIHRoYXQgd2UnbGwgY29uZnVz ZSBhIG5ldyBpbmRleCB0dXBsZSB0aGF0IGhhcHBlbnMgdG8gdXNlIGEgcmVjeWNsZWQgVElECiAg KiB3aXRoIGEgbm93LXJlbW92ZWQgdHVwbGUgd2l0aCB0aGUgc2FtZSBUSUQgKHRoYXQgdXNlZCB0 byBiZSBvbiB0aGlzIHNhbWUKICAqIHBhZ2UpLiAgV2UgY2FuJ3QgcmVseSBvbiB0aGF0IGR1cmlu ZyBzY2FucyB0aGF0IGRyb3AgYnVmZmVyIHBpbnMgZWFnZXJseQotICogKHNvLT5kcm9wUGluIHNj YW5zKSwgdGhvdWdoLCBzbyB3ZSBtdXN0IGNvbmRpdGlvbiBzZXR0aW5nIExQX0RFQUQgYml0cyBv bgorICogKGkuZS4gZHJvcFBpbiBzY2FucyksIHRob3VnaCwgc28gd2UgbXVzdCBjb25kaXRpb24g c2V0dGluZyBMUF9ERUFEIGJpdHMgb24KICAqIHRoZSBwYWdlIExTTiBoYXZpbmcgbm90IGNoYW5n ZWQgc2luY2UgYmFjayB3aGVuIF9idF9yZWFkcGFnZSBzYXcgdGhlIHBhZ2UuCiAgKiBXZSB0b3Rh bGx5IGdpdmUgdXAgb24gc2V0dGluZyBMUF9ERUFEIGJpdHMgd2hlbiB0aGUgcGFnZSBMU04gY2hh bmdlZC4KICAqCi0gKiBXZSBnaXZlIHVwIG11Y2ggbGVzcyBvZnRlbiBkdXJpbmcgIXNvLT5kcm9w UGluIHNjYW5zLCBidXQgaXQgc3RpbGwgaGFwcGVucy4KKyAqIFdlIHRlbmQgdG8gZ2l2ZSB1cCBs ZXNzIG9mdGVuIGR1cmluZyAhZHJvcFBpbiBzY2FucywgYnV0IGl0IHN0aWxsIGhhcHBlbnMuCiAg KiBXZSBjb3BlIHdpdGggY2FzZXMgd2hlcmUgaXRlbXMgaGF2ZSBtb3ZlZCByaWdodCBkdWUgdG8g aW5zZXJ0aW9ucy4gIElmIGFuCiAgKiBpdGVtIGhhcyBtb3ZlZCBvZmYgdGhlIGN1cnJlbnQgcGFn ZSBkdWUgdG8gYSBzcGxpdCwgd2UnbGwgZmFpbCB0byBmaW5kIGl0CiAgKiBhbmQganVzdCBnaXZl IHVwIG9uIGl0LgogICovCiB2b2lkCi1fYnRfa2lsbGl0ZW1zKEluZGV4U2NhbkRlc2Mgc2NhbikK K19idF9raWxsaXRlbXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBCYXRjaEluZGV4U2NhbiBiYXRjaCkK IHsKIAlSZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOwotCUJUU2Nhbk9wYXF1ZSBz byA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKIAlQYWdlCQlwYWdlOwogCUJUUGFnZU9w YXF1ZSBvcGFxdWU7CiAJT2Zmc2V0TnVtYmVyIG1pbm9mZjsKIAlPZmZzZXROdW1iZXIgbWF4b2Zm OwotCWludAkJCW51bUtpbGxlZCA9IHNvLT5udW1LaWxsZWQ7CisJaW50CQkJbnVtS2lsbGVkID0g YmF0Y2gtPm51bUtpbGxlZDsKIAlib29sCQlraWxsZWRzb21ldGhpbmcgPSBmYWxzZTsKIAlCdWZm ZXIJCWJ1ZjsKIAogCUFzc2VydChudW1LaWxsZWQgPiAwKTsKLQlBc3NlcnQoQlRTY2FuUG9zSXNW YWxpZChzby0+Y3VyclBvcykpOworCUFzc2VydChCbG9ja051bWJlcklzVmFsaWQoYmF0Y2gtPmN1 cnJQYWdlKSk7CiAJQXNzZXJ0KHNjYW4tPmhlYXBSZWxhdGlvbiAhPSBOVUxMKTsgLyogY2FuJ3Qg YmUgYSBiaXRtYXAgaW5kZXggc2NhbiAqLwogCi0JLyogQWx3YXlzIGludmFsaWRhdGUgc28tPmtp bGxlZEl0ZW1zW10gYmVmb3JlIGxlYXZpbmcgc28tPmN1cnJQb3MgKi8KLQlzby0+bnVtS2lsbGVk ID0gMDsKKwkvKiBBbHdheXMgaW52YWxpZGF0ZSBiYXRjaC0+a2lsbGVkSXRlbXNbXSBiZWZvcmUg ZnJlZWluZyBiYXRjaCAqLworCWJhdGNoLT5udW1LaWxsZWQgPSAwOwogCi0JaWYgKCFzby0+ZHJv cFBpbikKKwlpZiAoIXNjYW4tPmJhdGNocXVldWUtPmRyb3BQaW4pCiAJewogCQkvKgogCQkgKiBX ZSBoYXZlIGhlbGQgdGhlIHBpbiBvbiB0aGlzIHBhZ2Ugc2luY2Ugd2UgcmVhZCB0aGUgaW5kZXgg dHVwbGVzLAogCQkgKiBzbyBhbGwgd2UgbmVlZCB0byBkbyBpcyBsb2NrIGl0LiAgVGhlIHBpbiB3 aWxsIGhhdmUgcHJldmVudGVkCiAJCSAqIGNvbmN1cnJlbnQgVkFDVVVNcyBmcm9tIHJlY3ljbGlu ZyBhbnkgb2YgdGhlIFRJRHMgb24gdGhlIHBhZ2UuCiAJCSAqLwotCQlBc3NlcnQoQlRTY2FuUG9z SXNQaW5uZWQoc28tPmN1cnJQb3MpKTsKLQkJYnVmID0gc28tPmN1cnJQb3MuYnVmOworCQlidWYg PSBiYXRjaC0+YnVmOwogCQlfYnRfbG9ja2J1ZihyZWwsIGJ1ZiwgQlRfUkVBRCk7CiAJfQogCWVs c2UKIAl7CiAJCVhMb2dSZWNQdHIJbGF0ZXN0bHNuOwogCi0JCUFzc2VydCghQlRTY2FuUG9zSXNQ aW5uZWQoc28tPmN1cnJQb3MpKTsKIAkJQXNzZXJ0KFJlbGF0aW9uTmVlZHNXQUwocmVsKSk7Ci0J CWJ1ZiA9IF9idF9nZXRidWYocmVsLCBzby0+Y3VyclBvcy5jdXJyUGFnZSwgQlRfUkVBRCk7CisJ CWJ1ZiA9IF9idF9nZXRidWYocmVsLCBiYXRjaC0+Y3VyclBhZ2UsIEJUX1JFQUQpOwogCiAJCWxh dGVzdGxzbiA9IEJ1ZmZlckdldExTTkF0b21pYyhidWYpOwotCQlBc3NlcnQoc28tPmN1cnJQb3Mu bHNuIDw9IGxhdGVzdGxzbik7Ci0JCWlmIChzby0+Y3VyclBvcy5sc24gIT0gbGF0ZXN0bHNuKQor CQlBc3NlcnQoYmF0Y2gtPmxzbiA8PSBsYXRlc3Rsc24pOworCQlpZiAoYmF0Y2gtPmxzbiAhPSBs YXRlc3Rsc24pCiAJCXsKIAkJCS8qIE1vZGlmaWVkLCBnaXZlIHVwIG9uIGhpbnRpbmcgKi8KIAkJ CV9idF9yZWxidWYocmVsLCBidWYpOwpAQCAtMzQ1NSwxMiArMzQ0MiwxMSBAQCBfYnRfa2lsbGl0 ZW1zKEluZGV4U2NhbkRlc2Mgc2NhbikKIAogCWZvciAoaW50IGkgPSAwOyBpIDwgbnVtS2lsbGVk OyBpKyspCiAJewotCQlpbnQJCQlpdGVtSW5kZXggPSBzby0+a2lsbGVkSXRlbXNbaV07Ci0JCUJU U2NhblBvc0l0ZW0gKmtpdGVtID0gJnNvLT5jdXJyUG9zLml0ZW1zW2l0ZW1JbmRleF07CisJCWlu dAkJCWl0ZW1JbmRleCA9IGJhdGNoLT5raWxsZWRJdGVtc1tpXTsKKwkJQmF0Y2hNYXRjaGluZ0l0 ZW0gKmtpdGVtID0gJmJhdGNoLT5pdGVtc1tpdGVtSW5kZXhdOwogCQlPZmZzZXROdW1iZXIgb2Zm bnVtID0ga2l0ZW0tPmluZGV4T2Zmc2V0OwogCi0JCUFzc2VydChpdGVtSW5kZXggPj0gc28tPmN1 cnJQb3MuZmlyc3RJdGVtICYmCi0JCQkgICBpdGVtSW5kZXggPD0gc28tPmN1cnJQb3MubGFzdEl0 ZW0pOworCQlBc3NlcnQoaXRlbUluZGV4ID49IGJhdGNoLT5maXJzdEl0ZW0gJiYgaXRlbUluZGV4 IDw9IGJhdGNoLT5sYXN0SXRlbSk7CiAJCWlmIChvZmZudW0gPCBtaW5vZmYpCiAJCQljb250aW51 ZTsJCQkvKiBwdXJlIHBhcmFub2lhICovCiAJCXdoaWxlIChvZmZudW0gPD0gbWF4b2ZmKQpAQCAt MzQ4NSw3ICszNDcxLDcgQEAgX2J0X2tpbGxpdGVtcyhJbmRleFNjYW5EZXNjIHNjYW4pCiAJCQkJ ICogY29ycmVjdG5lc3MuCiAJCQkJICoKIAkJCQkgKiBOb3RlIHRoYXQgdGhlIHBhZ2UgbWF5IGhh dmUgYmVlbiBtb2RpZmllZCBpbiBhbG1vc3QgYW55IHdheQotCQkJCSAqIHNpbmNlIHdlIGZpcnN0 IHJlYWQgaXQgKGluIHRoZSAhc28tPmRyb3BQaW4gY2FzZSksIHNvIGl0J3MKKwkJCQkgKiBzaW5j ZSB3ZSBmaXJzdCByZWFkIGl0IChpbiB0aGUgIWRyb3BQaW4gY2FzZSksIHNvIGl0J3MKIAkJCQkg KiBwb3NzaWJsZSB0aGF0IHRoaXMgcG9zdGluZyBsaXN0IHR1cGxlIHdhc24ndCBhIHBvc3Rpbmcg bGlzdAogCQkJCSAqIHR1cGxlIHdoZW4gd2UgZmlyc3QgZW5jb3VudGVyZWQgaXRzIGhlYXAgVElE cy4KIAkJCQkgKi8KQEAgLTM1MDEsNyArMzQ4Nyw4IEBAIF9idF9raWxsaXRlbXMoSW5kZXhTY2Fu RGVzYyBzY2FuKQogCQkJCQkgKiB0aG91Z2ggb25seSBpbiB0aGUgY29tbW9uIGNhc2Ugd2hlcmUg dGhlIHBhZ2UgY2FuJ3QKIAkJCQkJICogaGF2ZSBiZWVuIGNvbmN1cnJlbnRseSBtb2RpZmllZAog CQkJCQkgKi8KLQkJCQkJQXNzZXJ0KGtpdGVtLT5pbmRleE9mZnNldCA9PSBvZmZudW0gfHwgIXNv LT5kcm9wUGluKTsKKwkJCQkJQXNzZXJ0KGtpdGVtLT5pbmRleE9mZnNldCA9PSBvZmZudW0gfHwK KwkJCQkJCSAgICFzY2FuLT5iYXRjaHF1ZXVlLT5kcm9wUGluKTsKIAogCQkJCQkvKgogCQkJCQkg KiBSZWFkLWFoZWFkIHRvIGxhdGVyIGtpdGVtcyBoZXJlLgpAQCAtMzUxOCw3ICszNTA1LDcgQEAg X2J0X2tpbGxpdGVtcyhJbmRleFNjYW5EZXNjIHNjYW4pCiAJCQkJCSAqIGNvcnJlY3RseSAtLSBw b3N0aW5nIHR1cGxlIHN0aWxsIGdldHMga2lsbGVkKS4KIAkJCQkJICovCiAJCQkJCWlmIChwaSA8 IG51bUtpbGxlZCkKLQkJCQkJCWtpdGVtID0gJnNvLT5jdXJyUG9zLml0ZW1zW3NvLT5raWxsZWRJ dGVtc1twaSsrXV07CisJCQkJCQlraXRlbSA9ICZiYXRjaC0+aXRlbXNbYmF0Y2gtPmtpbGxlZEl0 ZW1zW3BpKytdXTsKIAkJCQl9CiAKIAkJCQkvKgpAQCAtMzU2OCw3ICszNTU1LDcgQEAgX2J0X2tp bGxpdGVtcyhJbmRleFNjYW5EZXNjIHNjYW4pCiAJCU1hcmtCdWZmZXJEaXJ0eUhpbnQoYnVmLCB0 cnVlKTsKIAl9CiAKLQlpZiAoIXNvLT5kcm9wUGluKQorCWlmICghc2Nhbi0+YmF0Y2hxdWV1ZS0+ ZHJvcFBpbikKIAkJX2J0X3VubG9ja2J1ZihyZWwsIGJ1Zik7CiAJZWxzZQogCQlfYnRfcmVsYnVm KHJlbCwgYnVmKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BndXRp bHMuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BndXRpbHMuYwppbmRleCA4N2MzMWRh NzEuLjlkNjZkMjZkZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd1 dGlscy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BndXRpbHMuYwpAQCAtODgs MTAgKzg4LDExIEBAIHNwZ2hhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAlhbXJvdXRpbmUtPmFt YmVnaW5zY2FuID0gc3BnYmVnaW5zY2FuOwogCWFtcm91dGluZS0+YW1yZXNjYW4gPSBzcGdyZXNj YW47CiAJYW1yb3V0aW5lLT5hbWdldHR1cGxlID0gc3BnZ2V0dHVwbGU7CisJYW1yb3V0aW5lLT5h bWdldGJhdGNoID0gTlVMTDsKKwlhbXJvdXRpbmUtPmFtZnJlZWJhdGNoID0gTlVMTDsKIAlhbXJv dXRpbmUtPmFtZ2V0Yml0bWFwID0gc3BnZ2V0Yml0bWFwOwogCWFtcm91dGluZS0+YW1lbmRzY2Fu ID0gc3BnZW5kc2NhbjsKLQlhbXJvdXRpbmUtPmFtbWFya3BvcyA9IE5VTEw7Ci0JYW1yb3V0aW5l LT5hbXJlc3RycG9zID0gTlVMTDsKKwlhbXJvdXRpbmUtPmFtcG9zcmVzZXQgPSBOVUxMOwogCWFt cm91dGluZS0+YW1lc3RpbWF0ZXBhcmFsbGVsc2NhbiA9IE5VTEw7CiAJYW1yb3V0aW5lLT5hbWlu aXRwYXJhbGxlbHNjYW4gPSBOVUxMOwogCWFtcm91dGluZS0+YW1wYXJhbGxlbHJlc2NhbiA9IE5V TEw7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbS5jIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW0uYwppbmRleCAxZTA5OWZlYmQuLmE3MzQxYmNh ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW0uYworKysgYi9z cmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbS5jCkBAIC0yNDgsNyArMjQ4LDcgQEAgdGFi bGVfaW5kZXhfZmV0Y2hfdHVwbGVfY2hlY2soUmVsYXRpb24gcmVsLAogCWJvb2wJCWZvdW5kOwog CiAJc2xvdCA9IHRhYmxlX3Nsb3RfY3JlYXRlKHJlbCwgTlVMTCk7Ci0Jc2NhbiA9IHRhYmxlX2lu ZGV4X2ZldGNoX2JlZ2luKHJlbCk7CisJc2NhbiA9IHRhYmxlX2luZGV4X2ZldGNoX2JlZ2luKHJl bCwgTlVMTCk7CiAJZm91bmQgPSB0YWJsZV9pbmRleF9mZXRjaF90dXBsZShzY2FuLCB0aWQsIHNu YXBzaG90LCBzbG90LCAmY2FsbF9hZ2FpbiwKIAkJCQkJCQkJCWFsbF9kZWFkKTsKIAl0YWJsZV9p bmRleF9mZXRjaF9lbmQoc2Nhbik7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9j b25zdHJhaW50LmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jb25zdHJhaW50LmMKaW5kZXggMzQ5 N2E4MjIxLi44YTVkNzlhMjcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvbnN0 cmFpbnQuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jb25zdHJhaW50LmMKQEAgLTEwNiw3 ICsxMDYsOCBAQCB1bmlxdWVfa2V5X3JlY2hlY2soUEdfRlVOQ1RJT05fQVJHUykKIAkgKi8KIAl0 bXB0aWQgPSBjaGVja3RpZDsKIAl7Ci0JCUluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4gPSB0YWJs ZV9pbmRleF9mZXRjaF9iZWdpbih0cmlnZGF0YS0+dGdfcmVsYXRpb24pOworCQlJbmRleEZldGNo VGFibGVEYXRhICpzY2FuID0gdGFibGVfaW5kZXhfZmV0Y2hfYmVnaW4odHJpZ2RhdGEtPnRnX3Jl bGF0aW9uLAorCQkJCQkJCQkJCQkJCQkJTlVMTCk7CiAJCWJvb2wJCWNhbGxfYWdhaW4gPSBmYWxz ZTsKIAogCQlpZiAoIXRhYmxlX2luZGV4X2ZldGNoX3R1cGxlKHNjYW4sICZ0bXB0aWQsIFNuYXBz aG90U2VsZiwgc2xvdCwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21k cy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvaW5kZXhjbWRzLmMKaW5kZXggYTgwMzNiZTRiLi4y N2RlZTc5ZDkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jCisr KyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jCkBAIC04ODAsNyArODgwLDcgQEAg RGVmaW5lSW5kZXgoT2lkIHRhYmxlSWQsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05P VF9TVVBQT1JURUQpLAogCQkJCSBlcnJtc2coImFjY2VzcyBtZXRob2QgXCIlc1wiIGRvZXMgbm90 IHN1cHBvcnQgbXVsdGljb2x1bW4gaW5kZXhlcyIsCiAJCQkJCQlhY2Nlc3NNZXRob2ROYW1lKSkp OwotCWlmIChleGNsdXNpb24gJiYgYW1Sb3V0aW5lLT5hbWdldHR1cGxlID09IE5VTEwpCisJaWYg KGV4Y2x1c2lvbiAmJiBhbVJvdXRpbmUtPmFtZ2V0dHVwbGUgPT0gTlVMTCAmJiBhbVJvdXRpbmUt PmFtZ2V0YmF0Y2ggPT0gTlVMTCkKIAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJyY29kZShFUlJD T0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCiAJCQkJIGVycm1zZygiYWNjZXNzIG1ldGhvZCBc IiVzXCIgZG9lcyBub3Qgc3VwcG9ydCBleGNsdXNpb24gY29uc3RyYWludHMiLApkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0FtaS5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv ZXhlY0FtaS5jCmluZGV4IDFkMGU4YWQ1Ny4uYWMzMzdkOTAwIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9leGVjdXRvci9leGVjQW1pLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0Ft aS5jCkBAIC00MjgsNyArNDI4LDcgQEAgRXhlY1N1cHBvcnRzTWFya1Jlc3RvcmUoUGF0aCAqcGF0 aG5vZGUpCiAJCWNhc2UgVF9JbmRleE9ubHlTY2FuOgogCiAJCQkvKgotCQkJICogTm90IGFsbCBp bmRleCB0eXBlcyBzdXBwb3J0IG1hcmsvcmVzdG9yZS4KKwkJCSAqIE5vdCBhbGwgaW5kZXggdHlw ZXMgc3VwcG9ydCByZXN0b3JpbmcgYSBtYXJrCiAJCQkgKi8KIAkJCXJldHVybiBjYXN0Tm9kZShJ bmRleFBhdGgsIHBhdGhub2RlKS0+aW5kZXhpbmZvLT5hbWNhbm1hcmtwb3M7CiAKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5jIGIvc3JjL2JhY2tlbmQvZXhl Y3V0b3IvZXhlY0luZGV4aW5nLmMKaW5kZXggZGQzMjNjOWI5Li45YjRiNmMzM2IgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5jCisrKyBiL3NyYy9iYWNrZW5k L2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5jCkBAIC04MTYsMTAgKzgxNiwxMiBAQCBjaGVja19leGNs dXNpb25fb3JfdW5pcXVlX2NvbnN0cmFpbnQoUmVsYXRpb24gaGVhcCwgUmVsYXRpb24gaW5kZXgs CiByZXRyeToKIAljb25mbGljdCA9IGZhbHNlOwogCWZvdW5kX3NlbGYgPSBmYWxzZTsKLQlpbmRl eF9zY2FuID0gaW5kZXhfYmVnaW5zY2FuKGhlYXAsIGluZGV4LCAmRGlydHlTbmFwc2hvdCwgTlVM TCwgaW5kbmtleWF0dHMsIDApOworCWluZGV4X3NjYW4gPSBpbmRleF9iZWdpbnNjYW4oaGVhcCwg aW5kZXgsIE5VTEwsICZEaXJ0eVNuYXBzaG90LCBOVUxMLAorCQkJCQkJCQkgaW5kbmtleWF0dHMs IDApOwogCWluZGV4X3Jlc2NhbihpbmRleF9zY2FuLCBzY2Fua2V5cywgaW5kbmtleWF0dHMsIE5V TEwsIDApOwogCi0Jd2hpbGUgKGluZGV4X2dldG5leHRfc2xvdChpbmRleF9zY2FuLCBGb3J3YXJk U2NhbkRpcmVjdGlvbiwgZXhpc3Rpbmdfc2xvdCkpCisJd2hpbGUgKHRhYmxlX2luZGV4X2dldG5l eHRfc2xvdChpbmRleF9zY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwKKwkJCQkJCQkJCWV4aXN0 aW5nX3Nsb3QpKQogCXsKIAkJVHJhbnNhY3Rpb25JZCB4d2FpdDsKIAkJWExUV19PcGVyCXJlYXNv bl93YWl0OwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1JlcGxpY2F0aW9u LmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUmVwbGljYXRpb24uYwppbmRleCBkZWYzMjc3 NGMuLmE3NjlkOWM4NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1JlcGxp Y2F0aW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1JlcGxpY2F0aW9uLmMKQEAg LTIwNCw3ICsyMDQsNyBAQCBSZWxhdGlvbkZpbmRSZXBsVHVwbGVCeUluZGV4KFJlbGF0aW9uIHJl bCwgT2lkIGlkeG9pZCwKIAlza2V5X2F0dG9mZiA9IGJ1aWxkX3JlcGxpbmRleF9zY2FuX2tleShz a2V5LCByZWwsIGlkeHJlbCwgc2VhcmNoc2xvdCk7CiAKIAkvKiBTdGFydCBhbiBpbmRleCBzY2Fu LiAqLwotCXNjYW4gPSBpbmRleF9iZWdpbnNjYW4ocmVsLCBpZHhyZWwsICZzbmFwLCBOVUxMLCBz a2V5X2F0dG9mZiwgMCk7CisJc2NhbiA9IGluZGV4X2JlZ2luc2NhbihyZWwsIGlkeHJlbCwgTlVM TCwgJnNuYXAsIE5VTEwsIHNrZXlfYXR0b2ZmLCAwKTsKIAogcmV0cnk6CiAJZm91bmQgPSBmYWxz ZTsKQEAgLTIxMiw3ICsyMTIsNyBAQCByZXRyeToKIAlpbmRleF9yZXNjYW4oc2Nhbiwgc2tleSwg c2tleV9hdHRvZmYsIE5VTEwsIDApOwogCiAJLyogVHJ5IHRvIGZpbmQgdGhlIHR1cGxlICovCi0J d2hpbGUgKGluZGV4X2dldG5leHRfc2xvdChzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgb3V0 c2xvdCkpCisJd2hpbGUgKHRhYmxlX2luZGV4X2dldG5leHRfc2xvdChzY2FuLCBGb3J3YXJkU2Nh bkRpcmVjdGlvbiwgb3V0c2xvdCkpCiAJewogCQkvKgogCQkgKiBBdm9pZCBleHBlbnNpdmUgZXF1 YWxpdHkgY2hlY2sgaWYgdGhlIGluZGV4IGlzIHByaW1hcnkga2V5IG9yCkBAIC02NjUsMTIgKzY2 NSwxMiBAQCBSZWxhdGlvbkZpbmREZWxldGVkVHVwbGVJbmZvQnlJbmRleChSZWxhdGlvbiByZWws IE9pZCBpZHhvaWQsCiAJICogbm90IHlldCBjb21taXR0ZWQgb3IgdGhvc2UganVzdCBjb21taXR0 ZWQgcHJpb3IgdG8gdGhlIHNjYW4gYXJlCiAJICogZXhjbHVkZWQgaW4gdXBkYXRlX21vc3RfcmVj ZW50X2RlbGV0aW9uX2luZm8oKS4KIAkgKi8KLQlzY2FuID0gaW5kZXhfYmVnaW5zY2FuKHJlbCwg aWR4cmVsLCBTbmFwc2hvdEFueSwgTlVMTCwgc2tleV9hdHRvZmYsIDApOworCXNjYW4gPSBpbmRl eF9iZWdpbnNjYW4ocmVsLCBpZHhyZWwsIE5VTEwsIFNuYXBzaG90QW55LCBOVUxMLCBza2V5X2F0 dG9mZiwgMCk7CiAKIAlpbmRleF9yZXNjYW4oc2Nhbiwgc2tleSwgc2tleV9hdHRvZmYsIE5VTEws IDApOwogCiAJLyogVHJ5IHRvIGZpbmQgdGhlIHR1cGxlICovCi0Jd2hpbGUgKGluZGV4X2dldG5l eHRfc2xvdChzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgc2NhbnNsb3QpKQorCXdoaWxlICh0 YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Qoc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIHNjYW5z bG90KSkKIAl7CiAJCS8qCiAJCSAqIEF2b2lkIGV4cGVuc2l2ZSBlcXVhbGl0eSBjaGVjayBpZiB0 aGUgaW5kZXggaXMgcHJpbWFyeSBrZXkgb3IKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL25vZGVJbmRleG9ubHlzY2FuLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhv bmx5c2Nhbi5jCmluZGV4IGY0NjRjY2E5NS4uMWY0MjRiZjNkIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9leGVjdXRvci9ub2RlSW5kZXhvbmx5c2Nhbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL25vZGVJbmRleG9ubHlzY2FuLmMKQEAgLTM0LDE0ICszNCwxMiBAQAogI2luY2x1ZGUgImFj Y2Vzcy9yZWxzY2FuLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3RhYmxlYW0uaCIKICNpbmNsdWRlICJh Y2Nlc3MvdHVwZGVzYy5oIgotI2luY2x1ZGUgImFjY2Vzcy92aXNpYmlsaXR5bWFwLmgiCiAjaW5j bHVkZSAiY2F0YWxvZy9wZ190eXBlLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY3V0b3IuaCIK ICNpbmNsdWRlICJleGVjdXRvci9ub2RlSW5kZXhvbmx5c2Nhbi5oIgogI2luY2x1ZGUgImV4ZWN1 dG9yL25vZGVJbmRleHNjYW4uaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJz dG9yYWdlL2J1Zm1nci5oIgotI2luY2x1ZGUgInN0b3JhZ2UvcHJlZGljYXRlLmgiCiAjaW5jbHVk ZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9yZWwuaCIKIApAQCAtNjUsNyAr NjMsNiBAQCBJbmRleE9ubHlOZXh0KEluZGV4T25seVNjYW5TdGF0ZSAqbm9kZSkKIAlTY2FuRGly ZWN0aW9uIGRpcmVjdGlvbjsKIAlJbmRleFNjYW5EZXNjIHNjYW5kZXNjOwogCVR1cGxlVGFibGVT bG90ICpzbG90OwotCUl0ZW1Qb2ludGVyIHRpZDsKIAogCS8qCiAJICogZXh0cmFjdCBuZWNlc3Nh cnkgaW5mb3JtYXRpb24gZnJvbSBpbmRleCBzY2FuIG5vZGUKQEAgLTkxLDYgKzg4LDcgQEAgSW5k ZXhPbmx5TmV4dChJbmRleE9ubHlTY2FuU3RhdGUgKm5vZGUpCiAJCSAqLwogCQlzY2FuZGVzYyA9 IGluZGV4X2JlZ2luc2Nhbihub2RlLT5zcy5zc19jdXJyZW50UmVsYXRpb24sCiAJCQkJCQkJCSAg IG5vZGUtPmlvc3NfUmVsYXRpb25EZXNjLAorCQkJCQkJCQkgICBub2RlLT5pb3NzX1RhYmxlU2xv dCwKIAkJCQkJCQkJICAgZXN0YXRlLT5lc19zbmFwc2hvdCwKIAkJCQkJCQkJICAgJm5vZGUtPmlv c3NfSW5zdHJ1bWVudCwKIAkJCQkJCQkJICAgbm9kZS0+aW9zc19OdW1TY2FuS2V5cywKQEAgLTEw MSw3ICs5OSw2IEBAIEluZGV4T25seU5leHQoSW5kZXhPbmx5U2NhblN0YXRlICpub2RlKQogCiAJ CS8qIFNldCBpdCB1cCBmb3IgaW5kZXgtb25seSBzY2FuICovCiAJCW5vZGUtPmlvc3NfU2NhbkRl c2MtPnhzX3dhbnRfaXR1cCA9IHRydWU7Ci0JCW5vZGUtPmlvc3NfVk1CdWZmZXIgPSBJbnZhbGlk QnVmZmVyOwogCiAJCS8qCiAJCSAqIElmIG5vIHJ1bi10aW1lIGtleXMgdG8gY2FsY3VsYXRlIG9y IHRoZXkgYXJlIHJlYWR5LCBnbyBhaGVhZCBhbmQKQEAgLTExOCw3NyArMTE1LDEyIEBAIEluZGV4 T25seU5leHQoSW5kZXhPbmx5U2NhblN0YXRlICpub2RlKQogCS8qCiAJICogT0ssIG5vdyB0aGF0 IHdlIGhhdmUgd2hhdCB3ZSBuZWVkLCBmZXRjaCB0aGUgbmV4dCB0dXBsZS4KIAkgKi8KLQl3aGls ZSAoKHRpZCA9IGluZGV4X2dldG5leHRfdGlkKHNjYW5kZXNjLCBkaXJlY3Rpb24pKSAhPSBOVUxM KQorCXdoaWxlICh0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Qoc2NhbmRlc2MsIGRpcmVjdGlvbiwg c2xvdCkpCiAJewotCQlib29sCQl0dXBsZV9mcm9tX2hlYXAgPSBmYWxzZTsKLQogCQlDSEVDS19G T1JfSU5URVJSVVBUUygpOwogCi0JCS8qCi0JCSAqIFdlIGNhbiBza2lwIHRoZSBoZWFwIGZldGNo IGlmIHRoZSBUSUQgcmVmZXJlbmNlcyBhIGhlYXAgcGFnZSBvbgotCQkgKiB3aGljaCBhbGwgdHVw bGVzIGFyZSBrbm93biB2aXNpYmxlIHRvIGV2ZXJ5Ym9keS4gIEluIGFueSBjYXNlLAotCQkgKiB3 ZSdsbCB1c2UgdGhlIGluZGV4IHR1cGxlIG5vdCB0aGUgaGVhcCB0dXBsZSBhcyB0aGUgZGF0YSBz b3VyY2UuCi0JCSAqCi0JCSAqIE5vdGUgb24gTWVtb3J5IE9yZGVyaW5nIEVmZmVjdHM6IHZpc2li aWxpdHltYXBfZ2V0X3N0YXR1cyBkb2VzIG5vdAotCQkgKiBsb2NrIHRoZSB2aXNpYmlsaXR5IG1h cCBidWZmZXIsIGFuZCB0aGVyZWZvcmUgdGhlIHJlc3VsdCB3ZSByZWFkCi0JCSAqIGhlcmUgY291 bGQgYmUgc2xpZ2h0bHkgc3RhbGUuICBIb3dldmVyLCBpdCBjYW4ndCBiZSBzdGFsZSBlbm91Z2gg dG8KLQkJICogbWF0dGVyLgotCQkgKgotCQkgKiBXZSBuZWVkIHRvIGRldGVjdCBjbGVhcmluZyBh IFZNIGJpdCBkdWUgdG8gYW4gaW5zZXJ0IHJpZ2h0IGF3YXksCi0JCSAqIGJlY2F1c2UgdGhlIHR1 cGxlIGlzIHByZXNlbnQgaW4gdGhlIGluZGV4IHBhZ2UgYnV0IG5vdCB2aXNpYmxlLiBUaGUKLQkJ ICogcmVhZGluZyBvZiB0aGUgVElEIGJ5IHRoaXMgc2NhbiAodXNpbmcgYSBzaGFyZWQgbG9jayBv biB0aGUgaW5kZXgKLQkJICogYnVmZmVyKSBpcyBzZXJpYWxpemVkIHdpdGggdGhlIGluc2VydCBv ZiB0aGUgVElEIGludG8gdGhlIGluZGV4Ci0JCSAqICh1c2luZyBhbiBleGNsdXNpdmUgbG9jayBv biB0aGUgaW5kZXggYnVmZmVyKS4gQmVjYXVzZSB0aGUgVk0gYml0Ci0JCSAqIGlzIGNsZWFyZWQg YmVmb3JlIHVwZGF0aW5nIHRoZSBpbmRleCwgYW5kIGxvY2tpbmcvdW5sb2NraW5nIG9mIHRoZQot CQkgKiBpbmRleCBwYWdlIGFjdHMgYXMgYSBmdWxsIG1lbW9yeSBiYXJyaWVyLCB3ZSBhcmUgc3Vy ZSB0byBzZWUgdGhlCi0JCSAqIGNsZWFyZWQgYml0IGlmIHdlIHNlZSBhIHJlY2VudGx5LWluc2Vy dGVkIFRJRC4KLQkJICoKLQkJICogRGVsZXRlcyBkbyBub3QgdXBkYXRlIHRoZSBpbmRleCBwYWdl IChvbmx5IFZBQ1VVTSB3aWxsIGNsZWFyIG91dAotCQkgKiB0aGUgVElEKSwgc28gdGhlIGNsZWFy aW5nIG9mIHRoZSBWTSBiaXQgYnkgYSBkZWxldGUgaXMgbm90Ci0JCSAqIHNlcmlhbGl6ZWQgd2l0 aCB0aGlzIHRlc3QgYmVsb3csIGFuZCB3ZSBtYXkgc2VlIGEgdmFsdWUgdGhhdCBpcwotCQkgKiBz aWduaWZpY2FudGx5IHN0YWxlLiBIb3dldmVyLCB3ZSBkb24ndCBjYXJlIGFib3V0IHRoZSBkZWxl dGUgcmlnaHQKLQkJICogYXdheSwgYmVjYXVzZSB0aGUgdHVwbGUgaXMgc3RpbGwgdmlzaWJsZSB1 bnRpbCB0aGUgZGVsZXRpbmcKLQkJICogdHJhbnNhY3Rpb24gY29tbWl0cyBvciB0aGUgc3RhdGVt ZW50IGVuZHMgKGlmIGl0J3Mgb3VyCi0JCSAqIHRyYW5zYWN0aW9uKS4gSW4gZWl0aGVyIGNhc2Us IHRoZSBsb2NrIG9uIHRoZSBWTSBidWZmZXIgd2lsbCBoYXZlCi0JCSAqIGJlZW4gcmVsZWFzZWQg KGFjdGluZyBhcyBhIHdyaXRlIGJhcnJpZXIpIGFmdGVyIGNsZWFyaW5nIHRoZSBiaXQuCi0JCSAq IEFuZCBmb3IgdXMgdG8gaGF2ZSBhIHNuYXBzaG90IHRoYXQgaW5jbHVkZXMgdGhlIGRlbGV0aW5n Ci0JCSAqIHRyYW5zYWN0aW9uIChtYWtpbmcgdGhlIHR1cGxlIGludmlzaWJsZSksIHdlIG11c3Qg aGF2ZSBhY3F1aXJlZAotCQkgKiBQcm9jQXJyYXlMb2NrIGFmdGVyIHRoYXQgdGltZSwgYWN0aW5n IGFzIGEgcmVhZCBiYXJyaWVyLgotCQkgKgotCQkgKiBJdCdzIHdvcnRoIGdvaW5nIHRocm91Z2gg dGhpcyBjb21wbGV4aXR5IHRvIGF2b2lkIG5lZWRpbmcgdG8gbG9jawotCQkgKiB0aGUgVk0gYnVm ZmVyLCB3aGljaCBjb3VsZCBjYXVzZSBzaWduaWZpY2FudCBjb250ZW50aW9uLgotCQkgKi8KLQkJ aWYgKCFWTV9BTExfVklTSUJMRShzY2FuZGVzYy0+aGVhcFJlbGF0aW9uLAotCQkJCQkJCUl0ZW1Q b2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKSwKLQkJCQkJCQkmbm9kZS0+aW9zc19WTUJ1ZmZlcikp Ci0JCXsKLQkJCS8qCi0JCQkgKiBSYXRzLCB3ZSBoYXZlIHRvIHZpc2l0IHRoZSBoZWFwIHRvIGNo ZWNrIHZpc2liaWxpdHkuCi0JCQkgKi8KLQkJCUluc3RyQ291bnRUdXBsZXMyKG5vZGUsIDEpOwot CQkJaWYgKCFpbmRleF9mZXRjaF9oZWFwKHNjYW5kZXNjLCBub2RlLT5pb3NzX1RhYmxlU2xvdCkp Ci0JCQkJY29udGludWU7CQkvKiBubyB2aXNpYmxlIHR1cGxlLCB0cnkgbmV4dCBpbmRleCBlbnRy eSAqLwotCi0JCQlFeGVjQ2xlYXJUdXBsZShub2RlLT5pb3NzX1RhYmxlU2xvdCk7Ci0KLQkJCS8q Ci0JCQkgKiBPbmx5IE1WQ0Mgc25hcHNob3RzIGFyZSBzdXBwb3J0ZWQgaGVyZSwgc28gdGhlcmUg c2hvdWxkIGJlIG5vCi0JCQkgKiBuZWVkIHRvIGtlZXAgZm9sbG93aW5nIHRoZSBIT1QgY2hhaW4g b25jZSBhIHZpc2libGUgZW50cnkgaGFzCi0JCQkgKiBiZWVuIGZvdW5kLiAgSWYgd2UgZGlkIHdh bnQgdG8gYWxsb3cgdGhhdCwgd2UnZCBuZWVkIHRvIGtlZXAKLQkJCSAqIG1vcmUgc3RhdGUgdG8g cmVtZW1iZXIgbm90IHRvIGNhbGwgaW5kZXhfZ2V0bmV4dF90aWQgbmV4dCB0aW1lLgotCQkJICov Ci0JCQlpZiAoc2NhbmRlc2MtPnhzX2hlYXBfY29udGludWUpCi0JCQkJZWxvZyhFUlJPUiwgIm5v bi1NVkNDIHNuYXBzaG90cyBhcmUgbm90IHN1cHBvcnRlZCBpbiBpbmRleC1vbmx5IHNjYW5zIik7 Ci0KLQkJCS8qCi0JCQkgKiBOb3RlOiBhdCB0aGlzIHBvaW50IHdlIGFyZSBob2xkaW5nIGEgcGlu IG9uIHRoZSBoZWFwIHBhZ2UsIGFzCi0JCQkgKiByZWNvcmRlZCBpbiBzY2FuZGVzYy0+eHNfY2J1 Zi4gIFdlIGNvdWxkIHJlbGVhc2UgdGhhdCBwaW4gbm93LAotCQkJICogYnV0IGl0J3Mgbm90IGNs ZWFyIHdoZXRoZXIgaXQncyBhIHdpbiB0byBkbyBzby4gIFRoZSBuZXh0IGluZGV4Ci0JCQkgKiBl bnRyeSBtaWdodCByZXF1aXJlIGEgdmlzaXQgdG8gdGhlIHNhbWUgaGVhcCBwYWdlLgotCQkJICov Ci0KLQkJCXR1cGxlX2Zyb21faGVhcCA9IHRydWU7Ci0JCX0KKwkJSW5zdHJDb3VudFR1cGxlczIo bm9kZSwgc2NhbmRlc2MtPnhzX2hlYXBmZXRjaC0+bmhlYXBhY2Nlc3Nlcyk7CisJCXNjYW5kZXNj LT54c19oZWFwZmV0Y2gtPm5oZWFwYWNjZXNzZXMgPSAwOwogCiAJCS8qCiAJCSAqIEZpbGwgdGhl IHNjYW4gdHVwbGUgc2xvdCB3aXRoIGRhdGEgZnJvbSB0aGUgaW5kZXguICBUaGlzIG1pZ2h0IGJl CkBAIC0yMzgsMTkgKzE3MCwxMyBAQCBJbmRleE9ubHlOZXh0KEluZGV4T25seVNjYW5TdGF0ZSAq bm9kZSkKIAkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9O T1RfU1VQUE9SVEVEKSwKIAkJCQkJIGVycm1zZygibG9zc3kgZGlzdGFuY2UgZnVuY3Rpb25zIGFy ZSBub3Qgc3VwcG9ydGVkIGluIGluZGV4LW9ubHkgc2NhbnMiKSkpOwotCi0JCS8qCi0JCSAqIElm IHdlIGRpZG4ndCBhY2Nlc3MgdGhlIGhlYXAsIHRoZW4gd2UnbGwgbmVlZCB0byB0YWtlIGEgcHJl ZGljYXRlCi0JCSAqIGxvY2sgZXhwbGljaXRseSwgYXMgaWYgd2UgaGFkLiAgRm9yIG5vdyB3ZSBk byB0aGF0IGF0IHBhZ2UgbGV2ZWwuCi0JCSAqLwotCQlpZiAoIXR1cGxlX2Zyb21faGVhcCkKLQkJ CVByZWRpY2F0ZUxvY2tQYWdlKHNjYW5kZXNjLT5oZWFwUmVsYXRpb24sCi0JCQkJCQkJICBJdGVt UG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCksCi0JCQkJCQkJICBlc3RhdGUtPmVzX3NuYXBzaG90 KTsKLQogCQlyZXR1cm4gc2xvdDsKIAl9CiAKKwkvKiBYWFggVGhpcyBpcyB1Z2x5LCBidXQgbm90 IGNsZWFyIGhvdyB0byBkbyBiZXR0ZXIgKi8KKwlJbnN0ckNvdW50VHVwbGVzMihub2RlLCBzY2Fu ZGVzYy0+eHNfaGVhcGZldGNoLT5uaGVhcGFjY2Vzc2VzKTsKKwlzY2FuZGVzYy0+eHNfaGVhcGZl dGNoLT5uaGVhcGFjY2Vzc2VzID0gMDsKKwogCS8qCiAJICogaWYgd2UgZ2V0IGhlcmUgaXQgbWVh bnMgdGhlIGluZGV4IHNjYW4gZmFpbGVkIHNvIHdlIGFyZSBhdCB0aGUgZW5kIG9mCiAJICogdGhl IHNjYW4uLgpAQCAtNDA3LDEzICszMzMsNiBAQCBFeGVjRW5kSW5kZXhPbmx5U2NhbihJbmRleE9u bHlTY2FuU3RhdGUgKm5vZGUpCiAJaW5kZXhSZWxhdGlvbkRlc2MgPSBub2RlLT5pb3NzX1JlbGF0 aW9uRGVzYzsKIAlpbmRleFNjYW5EZXNjID0gbm9kZS0+aW9zc19TY2FuRGVzYzsKIAotCS8qIFJl bGVhc2UgVk0gYnVmZmVyIHBpbiwgaWYgYW55LiAqLwotCWlmIChub2RlLT5pb3NzX1ZNQnVmZmVy ICE9IEludmFsaWRCdWZmZXIpCi0JewotCQlSZWxlYXNlQnVmZmVyKG5vZGUtPmlvc3NfVk1CdWZm ZXIpOwotCQlub2RlLT5pb3NzX1ZNQnVmZmVyID0gSW52YWxpZEJ1ZmZlcjsKLQl9Ci0KIAkvKgog CSAqIFdoZW4gZW5kaW5nIGEgcGFyYWxsZWwgd29ya2VyLCBjb3B5IHRoZSBzdGF0aXN0aWNzIGdh dGhlcmVkIGJ5IHRoZQogCSAqIHdvcmtlciBiYWNrIGludG8gc2hhcmVkIG1lbW9yeSBzbyB0aGF0 IGl0IGNhbiBiZSBwaWNrZWQgdXAgYnkgdGhlIG1haW4KQEAgLTc4NiwxMiArNzA1LDEyIEBAIEV4 ZWNJbmRleE9ubHlTY2FuSW5pdGlhbGl6ZURTTShJbmRleE9ubHlTY2FuU3RhdGUgKm5vZGUsCiAJ bm9kZS0+aW9zc19TY2FuRGVzYyA9CiAJCWluZGV4X2JlZ2luc2Nhbl9wYXJhbGxlbChub2RlLT5z cy5zc19jdXJyZW50UmVsYXRpb24sCiAJCQkJCQkJCSBub2RlLT5pb3NzX1JlbGF0aW9uRGVzYywK KwkJCQkJCQkJIG5vZGUtPmlvc3NfVGFibGVTbG90LAogCQkJCQkJCQkgJm5vZGUtPmlvc3NfSW5z dHJ1bWVudCwKIAkJCQkJCQkJIG5vZGUtPmlvc3NfTnVtU2NhbktleXMsCiAJCQkJCQkJCSBub2Rl LT5pb3NzX051bU9yZGVyQnlLZXlzLAogCQkJCQkJCQkgcGlzY2FuKTsKIAlub2RlLT5pb3NzX1Nj YW5EZXNjLT54c193YW50X2l0dXAgPSB0cnVlOwotCW5vZGUtPmlvc3NfVk1CdWZmZXIgPSBJbnZh bGlkQnVmZmVyOwogCiAJLyoKIAkgKiBJZiBubyBydW4tdGltZSBrZXlzIHRvIGNhbGN1bGF0ZSBv ciB0aGV5IGFyZSByZWFkeSwgZ28gYWhlYWQgYW5kIHBhc3MKQEAgLTg1Miw2ICs3NzEsNyBAQCBF eGVjSW5kZXhPbmx5U2NhbkluaXRpYWxpemVXb3JrZXIoSW5kZXhPbmx5U2NhblN0YXRlICpub2Rl LAogCW5vZGUtPmlvc3NfU2NhbkRlc2MgPQogCQlpbmRleF9iZWdpbnNjYW5fcGFyYWxsZWwobm9k ZS0+c3Muc3NfY3VycmVudFJlbGF0aW9uLAogCQkJCQkJCQkgbm9kZS0+aW9zc19SZWxhdGlvbkRl c2MsCisJCQkJCQkJCSBub2RlLT5pb3NzX1RhYmxlU2xvdCwKIAkJCQkJCQkJICZub2RlLT5pb3Nz X0luc3RydW1lbnQsCiAJCQkJCQkJCSBub2RlLT5pb3NzX051bVNjYW5LZXlzLAogCQkJCQkJCQkg bm9kZS0+aW9zc19OdW1PcmRlckJ5S2V5cywKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL25vZGVJbmRleHNjYW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleHNjYW4u YwppbmRleCBmMzY5MjlkZWUuLjhiZDcwMGMyYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhl Y3V0b3Ivbm9kZUluZGV4c2Nhbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRl eHNjYW4uYwpAQCAtMTA3LDcgKzEwNyw3IEBAIEluZGV4TmV4dChJbmRleFNjYW5TdGF0ZSAqbm9k ZSkKIAkJICogc2VyaWFsbHkgZXhlY3V0aW5nIGFuIGluZGV4IHNjYW4gdGhhdCB3YXMgcGxhbm5l ZCB0byBiZSBwYXJhbGxlbC4KIAkJICovCiAJCXNjYW5kZXNjID0gaW5kZXhfYmVnaW5zY2FuKG5v ZGUtPnNzLnNzX2N1cnJlbnRSZWxhdGlvbiwKLQkJCQkJCQkJICAgbm9kZS0+aXNzX1JlbGF0aW9u RGVzYywKKwkJCQkJCQkJICAgbm9kZS0+aXNzX1JlbGF0aW9uRGVzYywgTlVMTCwKIAkJCQkJCQkJ ICAgZXN0YXRlLT5lc19zbmFwc2hvdCwKIAkJCQkJCQkJICAgJm5vZGUtPmlzc19JbnN0cnVtZW50 LAogCQkJCQkJCQkgICBub2RlLT5pc3NfTnVtU2NhbktleXMsCkBAIC0xMjgsNyArMTI4LDcgQEAg SW5kZXhOZXh0KEluZGV4U2NhblN0YXRlICpub2RlKQogCS8qCiAJICogb2ssIG5vdyB0aGF0IHdl IGhhdmUgd2hhdCB3ZSBuZWVkLCBmZXRjaCB0aGUgbmV4dCB0dXBsZS4KIAkgKi8KLQl3aGlsZSAo aW5kZXhfZ2V0bmV4dF9zbG90KHNjYW5kZXNjLCBkaXJlY3Rpb24sIHNsb3QpKQorCXdoaWxlICh0 YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Qoc2NhbmRlc2MsIGRpcmVjdGlvbiwgc2xvdCkpCiAJewog CQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwogCkBAIC0yMDMsNyArMjAzLDcgQEAgSW5kZXhOZXh0 V2l0aFJlb3JkZXIoSW5kZXhTY2FuU3RhdGUgKm5vZGUpCiAJCSAqIHNlcmlhbGx5IGV4ZWN1dGlu ZyBhbiBpbmRleCBzY2FuIHRoYXQgd2FzIHBsYW5uZWQgdG8gYmUgcGFyYWxsZWwuCiAJCSAqLwog CQlzY2FuZGVzYyA9IGluZGV4X2JlZ2luc2Nhbihub2RlLT5zcy5zc19jdXJyZW50UmVsYXRpb24s Ci0JCQkJCQkJCSAgIG5vZGUtPmlzc19SZWxhdGlvbkRlc2MsCisJCQkJCQkJCSAgIG5vZGUtPmlz c19SZWxhdGlvbkRlc2MsIE5VTEwsCiAJCQkJCQkJCSAgIGVzdGF0ZS0+ZXNfc25hcHNob3QsCiAJ CQkJCQkJCSAgICZub2RlLT5pc3NfSW5zdHJ1bWVudCwKIAkJCQkJCQkJICAgbm9kZS0+aXNzX051 bVNjYW5LZXlzLApAQCAtMjYwLDcgKzI2MCw3IEBAIEluZGV4TmV4dFdpdGhSZW9yZGVyKEluZGV4 U2NhblN0YXRlICpub2RlKQogCQkgKiBGZXRjaCBuZXh0IHR1cGxlIGZyb20gdGhlIGluZGV4Lgog CQkgKi8KIG5leHRfaW5kZXh0dXBsZToKLQkJaWYgKCFpbmRleF9nZXRuZXh0X3Nsb3Qoc2NhbmRl c2MsIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBzbG90KSkKKwkJaWYgKCF0YWJsZV9pbmRleF9nZXRu ZXh0X3Nsb3Qoc2NhbmRlc2MsIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBzbG90KSkKIAkJewogCQkJ LyoKIAkJCSAqIE5vIG1vcmUgdHVwbGVzIGZyb20gdGhlIGluZGV4LiAgQnV0IHdlIHN0aWxsIG5l ZWQgdG8gZHJhaW4gYW55CkBAIC0xNzIxLDcgKzE3MjEsNyBAQCBFeGVjSW5kZXhTY2FuSW5pdGlh bGl6ZURTTShJbmRleFNjYW5TdGF0ZSAqbm9kZSwKIAogCW5vZGUtPmlzc19TY2FuRGVzYyA9CiAJ CWluZGV4X2JlZ2luc2Nhbl9wYXJhbGxlbChub2RlLT5zcy5zc19jdXJyZW50UmVsYXRpb24sCi0J CQkJCQkJCSBub2RlLT5pc3NfUmVsYXRpb25EZXNjLAorCQkJCQkJCQkgbm9kZS0+aXNzX1JlbGF0 aW9uRGVzYywgTlVMTCwKIAkJCQkJCQkJICZub2RlLT5pc3NfSW5zdHJ1bWVudCwKIAkJCQkJCQkJ IG5vZGUtPmlzc19OdW1TY2FuS2V5cywKIAkJCQkJCQkJIG5vZGUtPmlzc19OdW1PcmRlckJ5S2V5 cywKQEAgLTE3ODUsNyArMTc4NSw3IEBAIEV4ZWNJbmRleFNjYW5Jbml0aWFsaXplV29ya2VyKElu ZGV4U2NhblN0YXRlICpub2RlLAogCiAJbm9kZS0+aXNzX1NjYW5EZXNjID0KIAkJaW5kZXhfYmVn aW5zY2FuX3BhcmFsbGVsKG5vZGUtPnNzLnNzX2N1cnJlbnRSZWxhdGlvbiwKLQkJCQkJCQkJIG5v ZGUtPmlzc19SZWxhdGlvbkRlc2MsCisJCQkJCQkJCSBub2RlLT5pc3NfUmVsYXRpb25EZXNjLCBO VUxMLAogCQkJCQkJCQkgJm5vZGUtPmlzc19JbnN0cnVtZW50LAogCQkJCQkJCQkgbm9kZS0+aXNz X051bVNjYW5LZXlzLAogCQkJCQkJCQkgbm9kZS0+aXNzX051bU9yZGVyQnlLZXlzLApkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvaW5keHBhdGguYyBiL3NyYy9iYWNrZW5k L29wdGltaXplci9wYXRoL2luZHhwYXRoLmMKaW5kZXggMjY1NGM1OWM0Li40ZTc4NzFkYmIgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2luZHhwYXRoLmMKKysrIGIvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvaW5keHBhdGguYwpAQCAtNDUsNyArNDUsNyBAQAogLyog V2hldGhlciB3ZSBhcmUgbG9va2luZyBmb3IgcGxhaW4gaW5kZXhzY2FuLCBiaXRtYXAgc2Nhbiwg b3IgZWl0aGVyICovCiB0eXBlZGVmIGVudW0KIHsKLQlTVF9JTkRFWFNDQU4sCQkJCS8qIG11c3Qg c3VwcG9ydCBhbWdldHR1cGxlICovCisJU1RfSU5ERVhTQ0FOLAkJCQkvKiBtdXN0IHN1cHBvcnQg YW1nZXR0dXBsZSBvciBhbWdldGJhdGNoICovCiAJU1RfQklUTUFQU0NBTiwJCQkJLyogbXVzdCBz dXBwb3J0IGFtZ2V0Yml0bWFwICovCiAJU1RfQU5ZU0NBTiwJCQkJCS8qIGVpdGhlciBpcyBva2F5 ICovCiB9IFNjYW5UeXBlQ29udHJvbDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXpl ci91dGlsL3BsYW5jYXQuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYwpp bmRleCA3YWY5YTIwNjQuLjEzODk2OGFmOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3V0aWwvcGxhbmNhdC5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5j YXQuYwpAQCAtMzEzLDExICszMTMsMTEgQEAgZ2V0X3JlbGF0aW9uX2luZm8oUGxhbm5lckluZm8g KnJvb3QsIE9pZCByZWxhdGlvbk9iamVjdElkLCBib29sIGluaHBhcmVudCwKIAkJCQlpbmZvLT5h bXNlYXJjaGFycmF5ID0gYW1yb3V0aW5lLT5hbXNlYXJjaGFycmF5OwogCQkJCWluZm8tPmFtc2Vh cmNobnVsbHMgPSBhbXJvdXRpbmUtPmFtc2VhcmNobnVsbHM7CiAJCQkJaW5mby0+YW1jYW5wYXJh bGxlbCA9IGFtcm91dGluZS0+YW1jYW5wYXJhbGxlbDsKLQkJCQlpbmZvLT5hbWhhc2dldHR1cGxl ID0gKGFtcm91dGluZS0+YW1nZXR0dXBsZSAhPSBOVUxMKTsKKwkJCQlpbmZvLT5hbWhhc2dldHR1 cGxlID0gKGFtcm91dGluZS0+YW1nZXR0dXBsZSAhPSBOVUxMIHx8CisJCQkJCQkJCQkgICBhbXJv dXRpbmUtPmFtZ2V0YmF0Y2ggIT0gTlVMTCk7CiAJCQkJaW5mby0+YW1oYXNnZXRiaXRtYXAgPSBh bXJvdXRpbmUtPmFtZ2V0Yml0bWFwICE9IE5VTEwgJiYKIAkJCQkJcmVsYXRpb24tPnJkX3RhYmxl YW0tPnNjYW5fYml0bWFwX25leHRfdHVwbGUgIT0gTlVMTDsKLQkJCQlpbmZvLT5hbWNhbm1hcmtw b3MgPSAoYW1yb3V0aW5lLT5hbW1hcmtwb3MgIT0gTlVMTCAmJgotCQkJCQkJCQkJICBhbXJvdXRp bmUtPmFtcmVzdHJwb3MgIT0gTlVMTCk7CisJCQkJaW5mby0+YW1jYW5tYXJrcG9zID0gYW1yb3V0 aW5lLT5hbXBvc3Jlc2V0ICE9IE5VTEw7CiAJCQkJaW5mby0+YW1jb3N0ZXN0aW1hdGUgPSBhbXJv dXRpbmUtPmFtY29zdGVzdGltYXRlOwogCQkJCUFzc2VydChpbmZvLT5hbWNvc3Rlc3RpbWF0ZSAh PSBOVUxMKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9y ZWxhdGlvbi5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZWxhdGlvbi5jCmlu ZGV4IDEwYjNkMGQ5Yi4uNzI4YmJkZTBjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9sb2dpY2FsL3JlbGF0aW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9n aWNhbC9yZWxhdGlvbi5jCkBAIC04ODksNyArODg5LDggQEAgSXNJbmRleFVzYWJsZUZvclJlcGxp Y2FJZGVudGl0eUZ1bGwoUmVsYXRpb24gaWR4cmVsLCBBdHRyTWFwICphdHRybWFwKQogCSAqIFRo ZSBnaXZlbiBpbmRleCBhY2Nlc3MgbWV0aG9kIG11c3QgaW1wbGVtZW50ICJhbWdldHR1cGxlIiwg d2hpY2ggd2lsbAogCSAqIGJlIHVzZWQgbGF0ZXIgdG8gZmV0Y2ggdGhlIHR1cGxlcy4gIFNlZSBS ZWxhdGlvbkZpbmRSZXBsVHVwbGVCeUluZGV4KCkuCiAJICovCi0JaWYgKEdldEluZGV4QW1Sb3V0 aW5lQnlBbUlkKGlkeHJlbC0+cmRfcmVsLT5yZWxhbSwgZmFsc2UpLT5hbWdldHR1cGxlID09IE5V TEwpCisJaWYgKEdldEluZGV4QW1Sb3V0aW5lQnlBbUlkKGlkeHJlbC0+cmRfcmVsLT5yZWxhbSwg ZmFsc2UpLT5hbWdldHR1cGxlID09IE5VTEwgJiYKKwkJR2V0SW5kZXhBbVJvdXRpbmVCeUFtSWQo aWR4cmVsLT5yZF9yZWwtPnJlbGFtLCBmYWxzZSktPmFtZ2V0YmF0Y2ggPT0gTlVMTCkKIAkJcmV0 dXJuIGZhbHNlOwogCiAJcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGls cy9hZHQvYW11dGlscy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2FtdXRpbHMuYwppbmRleCAw YWYyNmQ2YWMuLjFlYmUwYTc2YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2Ft dXRpbHMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvYW11dGlscy5jCkBAIC0zNjMsNyAr MzYzLDcgQEAgaW5kZXhhbV9wcm9wZXJ0eShGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywKIAkJCQlQ R19SRVRVUk5fQk9PTChyb3V0aW5lLT5hbWNsdXN0ZXJhYmxlKTsKIAogCQkJY2FzZSBBTVBST1Bf SU5ERVhfU0NBTjoKLQkJCQlQR19SRVRVUk5fQk9PTChyb3V0aW5lLT5hbWdldHR1cGxlID8gdHJ1 ZSA6IGZhbHNlKTsKKwkJCQlQR19SRVRVUk5fQk9PTChyb3V0aW5lLT5hbWdldHR1cGxlIHx8IHJv dXRpbmUtPmFtZ2V0YmF0Y2ggPyB0cnVlIDogZmFsc2UpOwogCiAJCQljYXNlIEFNUFJPUF9CSVRN QVBfU0NBTjoKIAkJCQlQR19SRVRVUk5fQk9PTChyb3V0aW5lLT5hbWdldGJpdG1hcCA/IHRydWUg OiBmYWxzZSk7CkBAIC0zOTIsNyArMzkyLDcgQEAgaW5kZXhhbV9wcm9wZXJ0eShGdW5jdGlvbkNh bGxJbmZvIGZjaW5mbywKIAkJCVBHX1JFVFVSTl9CT09MKHJvdXRpbmUtPmFtY2FubXVsdGljb2wp OwogCiAJCWNhc2UgQU1QUk9QX0NBTl9FWENMVURFOgotCQkJUEdfUkVUVVJOX0JPT0wocm91dGlu ZS0+YW1nZXR0dXBsZSA/IHRydWUgOiBmYWxzZSk7CisJCQlQR19SRVRVUk5fQk9PTChyb3V0aW5l LT5hbWdldHR1cGxlIHx8IHJvdXRpbmUtPmFtZ2V0YmF0Y2ggPyB0cnVlIDogZmFsc2UpOwogCiAJ CWNhc2UgQU1QUk9QX0NBTl9JTkNMVURFOgogCQkJUEdfUkVUVVJOX0JPT0wocm91dGluZS0+YW1j YW5pbmNsdWRlKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5j IGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNzLmMKaW5kZXggNTQwYWE5NjI4Li5iMjI4 OGNkOTMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5jCisrKyBi L3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5jCkBAIC0xMDIsNyArMTAyLDYgQEAKICNp bmNsdWRlICJhY2Nlc3MvZ2luLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3RhYmxlLmgiCiAjaW5jbHVk ZSAiYWNjZXNzL3RhYmxlYW0uaCIKLSNpbmNsdWRlICJhY2Nlc3MvdmlzaWJpbGl0eW1hcC5oIgog I2luY2x1ZGUgImNhdGFsb2cvcGdfY29sbGF0aW9uLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19v cGVyYXRvci5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfc3RhdGlzdGljLmgiCkBAIC03MDQzLDEw ICs3MDQyLDYgQEAgZ2V0X2FjdHVhbF92YXJpYWJsZV9lbmRwb2ludChSZWxhdGlvbiBoZWFwUmVs LAogCWJvb2wJCWhhdmVfZGF0YSA9IGZhbHNlOwogCVNuYXBzaG90RGF0YSBTbmFwc2hvdE5vblZh Y3V1bWFibGU7CiAJSW5kZXhTY2FuRGVzYyBpbmRleF9zY2FuOwotCUJ1ZmZlcgkJdm1idWZmZXIg PSBJbnZhbGlkQnVmZmVyOwotCUJsb2NrTnVtYmVyIGxhc3RfaGVhcF9ibG9jayA9IEludmFsaWRC bG9ja051bWJlcjsKLQlpbnQJCQluX3Zpc2l0ZWRfaGVhcF9wYWdlcyA9IDA7Ci0JSXRlbVBvaW50 ZXIgdGlkOwogCURhdHVtCQl2YWx1ZXNbSU5ERVhfTUFYX0tFWVNdOwogCWJvb2wJCWlzbnVsbFtJ TkRFWF9NQVhfS0VZU107CiAJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OwpAQCAtNzA5OCw3ICs3 MDkzLDcgQEAgZ2V0X2FjdHVhbF92YXJpYWJsZV9lbmRwb2ludChSZWxhdGlvbiBoZWFwUmVsLAog CUluaXROb25WYWN1dW1hYmxlU25hcHNob3QoU25hcHNob3ROb25WYWN1dW1hYmxlLAogCQkJCQkJ CSAgR2xvYmFsVmlzVGVzdEZvcihoZWFwUmVsKSk7CiAKLQlpbmRleF9zY2FuID0gaW5kZXhfYmVn aW5zY2FuKGhlYXBSZWwsIGluZGV4UmVsLAorCWluZGV4X3NjYW4gPSBpbmRleF9iZWdpbnNjYW4o aGVhcFJlbCwgaW5kZXhSZWwsIHRhYmxlc2xvdCwKIAkJCQkJCQkJICZTbmFwc2hvdE5vblZhY3V1 bWFibGUsIE5VTEwsCiAJCQkJCQkJCSAxLCAwKTsKIAkvKiBTZXQgaXQgdXAgZm9yIGluZGV4LW9u bHkgc2NhbiAqLwpAQCAtNzEwNiw0OCArNzEwMSwyMCBAQCBnZXRfYWN0dWFsX3ZhcmlhYmxlX2Vu ZHBvaW50KFJlbGF0aW9uIGhlYXBSZWwsCiAJaW5kZXhfcmVzY2FuKGluZGV4X3NjYW4sIHNjYW5r ZXlzLCAxLCBOVUxMLCAwKTsKIAogCS8qIEZldGNoIGZpcnN0L25leHQgdHVwbGUgaW4gc3BlY2lm aWVkIGRpcmVjdGlvbiAqLwotCXdoaWxlICgodGlkID0gaW5kZXhfZ2V0bmV4dF90aWQoaW5kZXhf c2NhbiwgaW5kZXhzY2FuZGlyKSkgIT0gTlVMTCkKKwl3aGlsZSAodGFibGVfaW5kZXhfZ2V0bmV4 dF9zbG90KGluZGV4X3NjYW4sIGluZGV4c2NhbmRpciwgdGFibGVzbG90KSkKIAl7Ci0JCUJsb2Nr TnVtYmVyIGJsb2NrID0gSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcih0aWQpOworCQkvKiBXZSBk b24ndCBhY3R1YWxseSBuZWVkIHRoZSBoZWFwIHR1cGxlIGZvciBhbnl0aGluZyAqLworCQlFeGVj Q2xlYXJUdXBsZSh0YWJsZXNsb3QpOwogCi0JCWlmICghVk1fQUxMX1ZJU0lCTEUoaGVhcFJlbCwK LQkJCQkJCQlibG9jaywKLQkJCQkJCQkmdm1idWZmZXIpKQotCQl7Ci0JCQkvKiBSYXRzLCB3ZSBo YXZlIHRvIHZpc2l0IHRoZSBoZWFwIHRvIGNoZWNrIHZpc2liaWxpdHkgKi8KLQkJCWlmICghaW5k ZXhfZmV0Y2hfaGVhcChpbmRleF9zY2FuLCB0YWJsZXNsb3QpKQotCQkJewotCQkJCS8qCi0JCQkJ ICogTm8gdmlzaWJsZSB0dXBsZSBmb3IgdGhpcyBpbmRleCBlbnRyeSwgc28gd2UgbmVlZCB0bwot CQkJCSAqIGFkdmFuY2UgdG8gdGhlIG5leHQgZW50cnkuICBCZWZvcmUgZG9pbmcgc28sIGNvdW50 IGhlYXAKLQkJCQkgKiBwYWdlIGZldGNoZXMgYW5kIGdpdmUgdXAgaWYgd2UndmUgZG9uZSB0b28g bWFueS4KLQkJCQkgKgotCQkJCSAqIFdlIGRvbid0IGNoYXJnZSBhIHBhZ2UgZmV0Y2ggaWYgdGhp cyBpcyB0aGUgc2FtZSBoZWFwIHBhZ2UKLQkJCQkgKiBhcyB0aGUgcHJldmlvdXMgdHVwbGUuICBU aGlzIGlzIG9uIHRoZSBjb25zZXJ2YXRpdmUgc2lkZSwKLQkJCQkgKiBzaW5jZSBvdGhlciByZWNl bnRseS1hY2Nlc3NlZCBwYWdlcyBhcmUgcHJvYmFibHkgc3RpbGwgaW4KLQkJCQkgKiBidWZmZXJz IHRvbzsgYnV0IGl0J3MgZ29vZCBlbm91Z2ggZm9yIHRoaXMgaGV1cmlzdGljLgotCQkJCSAqLwor CQkvKgorCQkgKiBObyB2aXNpYmxlIHR1cGxlIGZvciB0aGlzIGluZGV4IGVudHJ5LCBzbyB3ZSBu ZWVkIHRvIGFkdmFuY2UgdG8gdGhlCisJCSAqIG5leHQgZW50cnkuICBCZWZvcmUgZG9pbmcgc28s IGNvdW50IGhlYXAgcGFnZSBmZXRjaGVzIGFuZCBnaXZlIHVwCisJCSAqIGlmIHdlJ3ZlIGRvbmUg dG9vIG1hbnkuCisJCSAqLwogI2RlZmluZSBWSVNJVEVEX1BBR0VTX0xJTUlUIDEwMAogCi0JCQkJ aWYgKGJsb2NrICE9IGxhc3RfaGVhcF9ibG9jaykKLQkJCQl7Ci0JCQkJCWxhc3RfaGVhcF9ibG9j ayA9IGJsb2NrOwotCQkJCQluX3Zpc2l0ZWRfaGVhcF9wYWdlcysrOwotCQkJCQlpZiAobl92aXNp dGVkX2hlYXBfcGFnZXMgPiBWSVNJVEVEX1BBR0VTX0xJTUlUKQotCQkJCQkJYnJlYWs7Ci0JCQkJ fQotCi0JCQkJY29udGludWU7CQkvKiBubyB2aXNpYmxlIHR1cGxlLCB0cnkgbmV4dCBpbmRleCBl bnRyeSAqLwotCQkJfQotCi0JCQkvKiBXZSBkb24ndCBhY3R1YWxseSBuZWVkIHRoZSBoZWFwIHR1 cGxlIGZvciBhbnl0aGluZyAqLwotCQkJRXhlY0NsZWFyVHVwbGUodGFibGVzbG90KTsKLQotCQkJ LyoKLQkJCSAqIFdlIGRvbid0IGNhcmUgd2hldGhlciB0aGVyZSdzIG1vcmUgdGhhbiBvbmUgdmlz aWJsZSB0dXBsZSBpbgotCQkJICogdGhlIEhPVCBjaGFpbjsgaWYgYW55IGFyZSB2aXNpYmxlLCB0 aGF0J3MgZ29vZCBlbm91Z2guCi0JCQkgKi8KLQkJfQorCQlpZiAoaW5kZXhfc2Nhbi0+eHNfaGVh cGZldGNoLT5uaGVhcGFjY2Vzc2VzID4gVklTSVRFRF9QQUdFU19MSU1JVCkKKwkJCWJyZWFrOwog CiAJCS8qCiAJCSAqIFdlIGV4cGVjdCB0aGF0IHRoZSBpbmRleCB3aWxsIHJldHVybiBkYXRhIGlu IEluZGV4VHVwbGUgbm90CkBAIC03MTgwLDggKzcxNDcsNiBAQCBnZXRfYWN0dWFsX3ZhcmlhYmxl X2VuZHBvaW50KFJlbGF0aW9uIGhlYXBSZWwsCiAJCWJyZWFrOwogCX0KIAotCWlmICh2bWJ1ZmZl ciAhPSBJbnZhbGlkQnVmZmVyKQotCQlSZWxlYXNlQnVmZmVyKHZtYnVmZmVyKTsKIAlpbmRleF9l bmRzY2FuKGluZGV4X3NjYW4pOwogCiAJcmV0dXJuIGhhdmVfZGF0YTsKZGlmZiAtLWdpdCBhL2Nv bnRyaWIvYmxvb20vYmx1dGlscy5jIGIvY29udHJpYi9ibG9vbS9ibHV0aWxzLmMKaW5kZXggMmMw ZTcxZWVkLi4zZTAwMTQ5MzAgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvYmxvb20vYmx1dGlscy5jCisr KyBiL2NvbnRyaWIvYmxvb20vYmx1dGlscy5jCkBAIC0xNDgsOCArMTQ4LDcgQEAgYmxoYW5kbGVy KFBHX0ZVTkNUSU9OX0FSR1MpCiAJYW1yb3V0aW5lLT5hbWdldHR1cGxlID0gTlVMTDsKIAlhbXJv dXRpbmUtPmFtZ2V0Yml0bWFwID0gYmxnZXRiaXRtYXA7CiAJYW1yb3V0aW5lLT5hbWVuZHNjYW4g PSBibGVuZHNjYW47Ci0JYW1yb3V0aW5lLT5hbW1hcmtwb3MgPSBOVUxMOwotCWFtcm91dGluZS0+ YW1yZXN0cnBvcyA9IE5VTEw7CisJYW1yb3V0aW5lLT5hbXBvc3Jlc2V0ID0gTlVMTDsKIAlhbXJv dXRpbmUtPmFtZXN0aW1hdGVwYXJhbGxlbHNjYW4gPSBOVUxMOwogCWFtcm91dGluZS0+YW1pbml0 cGFyYWxsZWxzY2FuID0gTlVMTDsKIAlhbXJvdXRpbmUtPmFtcGFyYWxsZWxyZXNjYW4gPSBOVUxM OwpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbCBiL2RvYy9zcmMvc2dtbC9p bmRleGFtLnNnbWwKaW5kZXggNjNkN2UzNzZmLi5jZGM5YzY1YTYgMTAwNjQ0Ci0tLSBhL2RvYy9z cmMvc2dtbC9pbmRleGFtLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbApAQCAt MTYxLDEwICsxNjEsMTEgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhBbVJvdXRpbmUKICAgICBhbWJl Z2luc2Nhbl9mdW5jdGlvbiBhbWJlZ2luc2NhbjsKICAgICBhbXJlc2Nhbl9mdW5jdGlvbiBhbXJl c2NhbjsKICAgICBhbWdldHR1cGxlX2Z1bmN0aW9uIGFtZ2V0dHVwbGU7ICAgICAvKiBjYW4gYmUg TlVMTCAqLworICAgIGFtZ2V0YmF0Y2hfZnVuY3Rpb24gYW1nZXRiYXRjaDsgLyogY2FuIGJlIE5V TEwgKi8KKyAgICBhbWZyZWViYXRjaF9mdW5jdGlvbiBhbWZyZWViYXRjaDsJLyogY2FuIGJlIE5V TEwgKi8KICAgICBhbWdldGJpdG1hcF9mdW5jdGlvbiBhbWdldGJpdG1hcDsgICAvKiBjYW4gYmUg TlVMTCAqLwogICAgIGFtZW5kc2Nhbl9mdW5jdGlvbiBhbWVuZHNjYW47Ci0gICAgYW1tYXJrcG9z X2Z1bmN0aW9uIGFtbWFya3BvczsgICAgICAgLyogY2FuIGJlIE5VTEwgKi8KLSAgICBhbXJlc3Ry cG9zX2Z1bmN0aW9uIGFtcmVzdHJwb3M7ICAgICAvKiBjYW4gYmUgTlVMTCAqLworICAgIGFtcG9z cmVzZXRfZnVuY3Rpb24gYW1wb3NyZXNldDsgLyogY2FuIGJlIE5VTEwgKi8KIAogICAgIC8qIGlu dGVyZmFjZSBmdW5jdGlvbnMgdG8gc3VwcG9ydCBwYXJhbGxlbCBpbmRleCBzY2FucyAqLwogICAg IGFtZXN0aW1hdGVwYXJhbGxlbHNjYW5fZnVuY3Rpb24gYW1lc3RpbWF0ZXBhcmFsbGVsc2Nhbjsg ICAgLyogY2FuIGJlIE5VTEwgKi8KQEAgLTc0Myw2ICs3NDQsMTM3IEBAIGFtZ2V0dHVwbGUgKElu ZGV4U2NhbkRlc2Mgc2NhbiwKICAgIDxzdHJ1Y3RmaWVsZD5hbWdldHR1cGxlPC9zdHJ1Y3RmaWVs ZD4gZmllbGQgaW4gaXRzIDxzdHJ1Y3RuYW1lPkluZGV4QW1Sb3V0aW5lPC9zdHJ1Y3RuYW1lPgog ICAgc3RydWN0IG11c3QgYmUgc2V0IHRvIE5VTEwuCiAgIDwvcGFyYT4KKyAgPG5vdGU+CisgICA8 cGFyYT4KKyAgICBBcyBvZiA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IHZl cnNpb24gMTksIHBvc2l0aW9uIG1hcmtpbmcKKyAgICBhbmQgcmVzdG9yYXRpb24gb2Ygc2NhbnMg aXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCBmb3IgdGhlCisgICAgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8 L2Z1bmN0aW9uPiBpbnRlcmZhY2U7IG9ubHkgdGhlCisgICAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8 L2Z1bmN0aW9uPiBpbnRlcmZhY2Ugc3VwcG9ydHMgdGhpcyBmZWF0dXJlIHRocm91Z2gKKyAgICB0 aGUgPGZ1bmN0aW9uPmFtcG9zcmVzZXQ8L2Z1bmN0aW9uPiBjYWxsYmFjay4KKyAgIDwvcGFyYT4K KyAgPC9ub3RlPgorCisgIDxwYXJhPgorPHByb2dyYW1saXN0aW5nPgorQmF0Y2hJbmRleFNjYW4K K2FtZ2V0YmF0Y2ggKEluZGV4U2NhbkRlc2Mgc2NhbiwKKyAgICAgICAgICAgIEJhdGNoSW5kZXhT Y2FuIHByaW9yYmF0Y2gsCisgICAgICAgICAgICBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbik7Cis8 L3Byb2dyYW1saXN0aW5nPgorICAgUmV0dXJuIHRoZSBuZXh0IGJhdGNoIG9mIGluZGV4IHR1cGxl cyBpbiB0aGUgZ2l2ZW4gc2NhbiwgbW92aW5nIGluIHRoZQorICAgZ2l2ZW4gZGlyZWN0aW9uIChm b3J3YXJkIG9yIGJhY2t3YXJkIGluIHRoZSBpbmRleCkuICBSZXR1cm5zIGFuIGluc3RhbmNlIG9m CisgICA8dHlwZT5CYXRjaEluZGV4U2NhbjwvdHlwZT4gd2l0aCBpbmRleCB0dXBsZXMgbG9hZGVk LCBvcgorICAgPGxpdGVyYWw+TlVMTDwvbGl0ZXJhbD4gaWYgdGhlcmUgYXJlIG5vIG1vcmUgaW5k ZXggdHVwbGVzLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBUaGUgPGxpdGVyYWw+cHJpb3Ji YXRjaDwvbGl0ZXJhbD4gcGFyYW1ldGVyIHBhc3NlcyB0aGUgYmF0Y2ggcHJldmlvdXNseQorICAg cmV0dXJuZWQgYnkgYW4gZWFybGllciA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGNh bGwgKG9yCisgICA8bGl0ZXJhbD5OVUxMPC9saXRlcmFsPiBvbiB0aGUgZmlyc3QgY2FsbCkuICBU aGUgaW5kZXggQU0gdXNlcworICAgPGxpdGVyYWw+cHJpb3JiYXRjaDwvbGl0ZXJhbD4gdG8gZGV0 ZXJtaW5lIHdoaWNoIGluZGV4IHBhZ2UgdG8gcmVhZCBuZXh0LAorICAgdHlwaWNhbGx5IGJ5IGZv bGxvd2luZyBwYWdlIGxpbmtzIGZvdW5kIGluIDxsaXRlcmFsPnByaW9yYmF0Y2g8L2xpdGVyYWw+ LgorICAgVGhlIHJldHVybmVkIGJhdGNoIGNvbnRhaW5zIG1hdGNoaW5nIGl0ZW1zIGltbWVkaWF0 ZWx5IGFkamFjZW50IHRvIHRob3NlCisgICBmcm9tIDxsaXRlcmFsPnByaW9yYmF0Y2g8L2xpdGVy YWw+IGluIHRoZSBjb21tb24gY2FzZSB3aGVyZQorICAgPGxpdGVyYWw+cHJpb3JiYXRjaDwvbGl0 ZXJhbD4gaXMgdGhlIGJhdGNoIHRoYXQgd2FzIHJldHVybmVkIGJ5IHRoZSBtb3N0CisgICByZWNl bnQgY2FsbCB0byA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGNhbGwgKHRob3VnaCBu b3Qgd2hlbiB0aGUKKyAgIG1vc3QgcmVjZW50IGNhbGwgdXNlZCB0aGUgb3Bwb3NpdGUgc2NhbiBk aXJlY3Rpb24gdG8gdGhpcyBjYWxsLCBhbmQgbm90CisgICB3aGVuIGEgbWFyayBoYXMgYmVlbiBy ZXN0b3JlZCkuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIEEgYmF0Y2ggcmV0dXJuZWQgYnkg PGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBpcyBndWFyYW50ZWVkIHRvIGJlCisgICBh c3NvY2lhdGVkIHdpdGggYW4gaW5kZXggcGFnZSBjb250YWluaW5nIGF0IGxlYXN0IG9uZSBtYXRj aGluZyB0dXBsZS4KKyAgIFRoZSBpbmRleCBwYWdlIGFzc29jaWF0ZWQgd2l0aCB0aGUgYmF0Y2gg bWF5IGJlIHJldGFpbmVkIGluIGEgYnVmZmVyIHdpdGgKKyAgIGl0cyBwaW4gaGVsZCBhcyBhbiBp bnRlcmxvY2sgYWdhaW5zdCBjb25jdXJyZW50IFRJRCByZWN5Y2xpbmcgYnkKKyAgIDxjb21tYW5k PlZBQ1VVTTwvY29tbWFuZD4uICBTZWUgPHhyZWYgbGlua2VuZD0iaW5kZXgtbG9ja2luZyIvPiBm b3IgZGV0YWlscworICAgb24gYnVmZmVyIHBpbiBtYW5hZ2VtZW50IGR1cmluZyA8cXVvdGU+cGxh aW48L3F1b3RlPiBpbmRleCBzY2Fucy4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgVGhlIDxm dW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaW50ZXJmYWNlIGRvZXMgbm90IHN1cHBvcnQg aW5kZXgtb25seQorICAgc2NhbnMgdGhhdCByZXR1cm4gZGF0YSB2aWEgdGhlIDxsaXRlcmFsPnhz X2hpdHVwPC9saXRlcmFsPiBtZWNoYW5pc20uCisgICBJbmRleC1vbmx5IHNjYW5zIGFyZSBzdXBw b3J0ZWQgdGhyb3VnaCB0aGUgPGxpdGVyYWw+eHNfaXR1cDwvbGl0ZXJhbD4KKyAgIG1lY2hhbmlz bSBvbmx5LgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBUaGUgPGZ1bmN0aW9uPmFtZ2V0YmF0 Y2g8L2Z1bmN0aW9uPiBmdW5jdGlvbiBuZWVkIG9ubHkgYmUgcHJvdmlkZWQgaWYgdGhlCisgICBh Y2Nlc3MgbWV0aG9kIHN1cHBvcnRzIDxxdW90ZT5wbGFpbjwvcXVvdGU+IGluZGV4IHNjYW5zLiAg SWYgaXQgZG9lc24ndCwKKyAgIHRoZSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGZp ZWxkIGluIGl0cworICAgPHN0cnVjdG5hbWU+SW5kZXhBbVJvdXRpbmU8L3N0cnVjdG5hbWU+IHN0 cnVjdCBtdXN0IGJlIHNldCB0byBOVUxMLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBBIDx0 eXBlPkJhdGNoSW5kZXhTY2FuPC90eXBlPiB0aGF0IGlzIHJldHVybmVkIGJ5CisgICA8ZnVuY3Rp b24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGlzIG5vIGxvbmdlciBtYW5hZ2VkIGJ5IHRoZSBhY2Nl c3MgbWV0aG9kLgorICAgSXQgaXMgdXAgdG8gdGhlIHRhYmxlIEFNIGNhbGxlciB0byBkZWNpZGUg d2hlbiBpdCBzaG91bGQgYmUgZnJlZWQgYnkKKyAgIHBhc3NpbmcgaXQgdG8gPGZ1bmN0aW9uPmFt ZnJlZWJhdGNoPC9mdW5jdGlvbj4uICBOb3RlIGFsc28gdGhhdAorICAgPGZ1bmN0aW9uPmFtZ2V0 YmF0Y2g8L2Z1bmN0aW9uPiBmdW5jdGlvbnMgbXVzdCBuZXZlciBtb2RpZnkgdGhlCisgICA8c3Ry dWN0ZmllbGQ+cHJpb3JiYXRjaDwvc3RydWN0ZmllbGQ+IHBhcmFtZXRlci4KKyAgPC9wYXJhPgor CisgIDxwYXJhPgorICAgVGhlIGFjY2VzcyBtZXRob2QgbWF5IHByb3ZpZGUgb25seSBvbmUgb2Yg PGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPgorICAgYW5kIDxmdW5jdGlvbj5hbWdldGJh dGNoPC9mdW5jdGlvbj4gY2FsbGJhY2tzLCBub3QgYm90aCAoWFhYIHVuY2VydGFpbikuCisgICBX aGVuIHRoZSBhY2Nlc3MgbWV0aG9kIHByb3ZpZGVzIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5j dGlvbj4sIGl0IG11c3QKKyAgIGFsc28gcHJvdmlkZSA8ZnVuY3Rpb24+YW1mcmVlYmF0Y2g8L2Z1 bmN0aW9uPi4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgVGhlIHNhbWUgY2F2ZWF0cyBkZXNj cmliZWQgZm9yIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gYXBwbHkgaGVyZQorICAg dG9vOiBhbiBlbnRyeSBpbiB0aGUgcmV0dXJuZWQgYmF0Y2ggbWVhbnMgb25seSB0aGF0IHRoZSBp bmRleCBjb250YWlucworICAgYW4gZW50cnkgdGhhdCBtYXRjaGVzIHRoZSBzY2FuIGtleXMsIG5v dCB0aGF0IHRoZSB0dXBsZSBuZWNlc3NhcmlseSBzdGlsbAorICAgZXhpc3RzIGluIHRoZSBoZWFw IG9yIHdpbGwgcGFzcyB0aGUgY2FsbGVyJ3Mgc25hcHNob3QgdGVzdC4KKyAgPC9wYXJhPgorCisg IDxwYXJhPgorPHByb2dyYW1saXN0aW5nPgordm9pZAorYW1mcmVlYmF0Y2ggKEluZGV4U2NhbkRl c2Mgc2NhbiwKKyAgICAgICAgICAgICBCYXRjaEluZGV4U2NhbiBiYXRjaCk7Cis8L3Byb2dyYW1s aXN0aW5nPgorICAgUmVsZWFzZXMgYSBiYXRjaCByZXR1cm5lZCBieSB0aGUgPGZ1bmN0aW9uPmFt Z2V0YmF0Y2g8L2Z1bmN0aW9uPiBjYWxsYmFjay4KKyAgIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVk IGV4Y2x1c2l2ZWx5IGJ5IHRhYmxlIGFjY2VzcyBtZXRob2RzIHRvIGluZGljYXRlCisgICB0aGF0 IHByb2Nlc3Npbmcgb2YgdGhlIGJhdGNoIGlzIGNvbXBsZXRlOyBpdCBzaG91bGQgbmV2ZXIgYmUg Y2FsbGVkIHdpdGhpbgorICAgdGhlIGluZGV4IGFjY2VzcyBtZXRob2QgaXRzZWxmLgorICA8L3Bh cmE+CisKKyAgPHBhcmE+CisgICA8ZnVuY3Rpb24+YW1mcmVlYmF0Y2g8L2Z1bmN0aW9uPiBmcmVl cyBidWZmZXIgcGlucyBoZWxkIG9uIHRoZSBiYXRjaCdzCisgICBhc3NvY2lhdGVkIGluZGV4IHBh Z2UgYW5kIHJlbGVhc2VzIHJlbGF0ZWQgbWVtb3J5IGFuZCByZXNvdXJjZXMuICBUaGVzZQorICAg YnVmZmVyIHBpbnMgc2VydmUgYXMgYW4gaW50ZXJsb2NrIGFnYWluc3QgY29uY3VycmVudCBUSUQg cmVjeWNsaW5nIGJ5CisgICA8Y29tbWFuZD5WQUNVVU08L2NvbW1hbmQ+LCBwcm90ZWN0aW5nIHRo ZSB0YWJsZSBhY2Nlc3MgbWV0aG9kIGZyb20gY29uZnVzaW9uCisgICBhYm91dCB3aGljaCBUSUQg Y29ycmVzcG9uZHMgdG8gd2hpY2ggbG9naWNhbCByb3cuICBTZWUgPHhyZWYKKyAgIGxpbmtlbmQ9 ImluZGV4LWxvY2tpbmciLz4gZm9yIGRldGFpbGVkIGRpc2N1c3Npb24gb2YgYnVmZmVyIHBpbiBt YW5hZ2VtZW50LgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBUaGUgaW5kZXggQU0gbWF5IGNo b29zZSB0byByZXRhaW4gaXRzIG93biBidWZmZXIgcGlucyBhY3Jvc3MgbXVsdGlwbGUKKyAgIDxm dW5jdGlvbj5hbWZyZWViYXRjaDwvZnVuY3Rpb24+IGNhbGxzIHdoZW4gdGhpcyBzZXJ2ZXMgYW4g aW50ZXJuYWwgcHVycG9zZQorICAgKGZvciBleGFtcGxlLCBtYWludGFpbmluZyBhIGRlc2NlbnQg c3RhY2sgb2YgcGlubmVkIGluZGV4IHBhZ2VzIGZvciByZXVzZQorICAgYWNyb3NzIDxmdW5jdGlv bj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gY2FsbHMpLiAgSG93ZXZlciwgYW55IHNjaGVtZSB0aGF0 CisgICByZXRhaW5zIGJ1ZmZlciBwaW5zIG11c3Qga2VlcCB0aGUgbnVtYmVyIG9mIHJldGFpbmVk IHBpbnMgZml4ZWQgYW5kIHNtYWxsLAorICAgdG8gYXZvaWQgZXhoYXVzdGluZyB0aGUgYmFja2Vu ZCdzIGJ1ZmZlciBwaW4gbGltaXQuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFRoZSBpbmRl eCBBTSBoYXMgdGhlIG9wdGlvbiBvZiBzZXR0aW5nIDxsaXRlcmFsPkxQX0RFQUQ8L2xpdGVyYWw+ IGJpdHMgaW4KKyAgIHRoZSBpbmRleCBwYWdlIHRvIG1hcmsgZGVhZCB0dXBsZXMgYmVmb3JlIHJl bGVhc2luZyB0aGUgYnVmZmVyIHBpbi4gIFdoZW4KKyAgIDxsaXRlcmFsPkJhdGNoUXVldWUuZHJv cFBpbjwvbGl0ZXJhbD4gaXMgdHJ1ZSBhbmQgdGhlIGJ1ZmZlciBwaW4gaXMgYmVpbmcKKyAgIGRy b3BwZWQgZWFnZXJseSwgdGhlIGluZGV4IEFNIG11c3QgY2hlY2sgPGxpdGVyYWw+QmF0Y2hJbmRl eFNjYW4ubHNuPC9saXRlcmFsPgorICAgdG8gdmVyaWZ5IHRoYXQgdGhlIHBhZ2UgTFNOIGhhcyBu b3QgYWR2YW5jZWQgc2luY2UgdGhlIGJhdGNoIHdhcyBvcmlnaW5hbGx5CisgICByZWFkIGJlZm9y ZSBzZXR0aW5nIDxsaXRlcmFsPkxQX0RFQUQ8L2xpdGVyYWw+IGJpdHMsIHRvIGF2b2lkIGNvbmN1 cnJlbnQKKyAgIFRJRCByZWN5Y2xpbmcgaGF6YXJkcy4gIFdoZW4gPGxpdGVyYWw+c2Nhbi0+YmF0 Y2hxdWV1ZS0+ZHJvcFBpbjwvbGl0ZXJhbD4KKyAgIGlzIGZhbHNlIChyZXF1aXJpbmcgdGhhdCBh IGJ1ZmZlciBwaW4gYmUgaGVsZCB0aHJvdWdob3V0IGZpcnN0IHJlYWRpbmcgdGhlCisgICBpbmRl eCBsZWFmIHBhZ2UgYW5kIGNhbGxpbmcgPGZ1bmN0aW9uPmFtZnJlZWJhdGNoPC9mdW5jdGlvbj4p LAorICAgPGxpdGVyYWw+TFBfREVBRDwvbGl0ZXJhbD4gYml0cyBjYW4gYWx3YXlzIGJlIHNldCBz YWZlbHkgd2l0aG91dCBhbiBMU04gY2hlY2suCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFRo ZSA8ZnVuY3Rpb24+YW1mcmVlYmF0Y2g8L2Z1bmN0aW9uPiBmdW5jdGlvbiBuZWVkIG9ubHkgYmUg cHJvdmlkZWQgaWYgdGhlCisgICBhY2Nlc3MgbWV0aG9kIHByb3ZpZGVzIDxmdW5jdGlvbj5hbWdl dGJhdGNoPC9mdW5jdGlvbj4uIE90aGVyd2lzZSBpdCBoYXMgdG8KKyAgIHJlbWFpbiBzZXQgdG8g PGxpdGVyYWw+TlVMTDwvbGl0ZXJhbD4uCisgIDwvcGFyYT4KIAogICA8cGFyYT4KIDxwcm9ncmFt bGlzdGluZz4KQEAgLTc2Miw4ICs4OTQsOCBAQCBhbWdldGJpdG1hcCAoSW5kZXhTY2FuRGVzYyBz Y2FuLAogICAgaXRzZWxmLCBhbmQgdGhlcmVmb3JlIGNhbGxlcnMgcmVjaGVjayBib3RoIHRoZSBz Y2FuIGNvbmRpdGlvbnMgYW5kIHRoZQogICAgcGFydGlhbCBpbmRleCBwcmVkaWNhdGUgKGlmIGFu eSkgZm9yIHJlY2hlY2thYmxlIHR1cGxlcy4gIFRoYXQgbWlnaHQgbm90CiAgICBhbHdheXMgYmUg dHJ1ZSwgaG93ZXZlci4KLSAgIDxmdW5jdGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+IGFuZAot ICAgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBjYW5ub3QgYmUgdXNlZCBpbiB0aGUg c2FtZSBpbmRleCBzY2FuOyB0aGVyZQorICAgT25seSBvbmUgb2YgPGZ1bmN0aW9uPmFtZ2V0Yml0 bWFwPC9mdW5jdGlvbj4sIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4sCisgICBvciA8 ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGNhbiBiZSB1c2VkIGluIGFueSBnaXZlbiBp bmRleCBzY2FuOyB0aGVyZQogICAgYXJlIG90aGVyIHJlc3RyaWN0aW9ucyB0b28gd2hlbiB1c2lu ZyA8ZnVuY3Rpb24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiwgYXMgZXhwbGFpbmVkCiAgICBpbiA8 eHJlZiBsaW5rZW5kPSJpbmRleC1zY2FubmluZyIvPi4KICAgPC9wYXJhPgpAQCAtNzg5LDMyICs5 MjEsMjUgQEAgYW1lbmRzY2FuIChJbmRleFNjYW5EZXNjIHNjYW4pOwogICA8cGFyYT4KIDxwcm9n cmFtbGlzdGluZz4KIHZvaWQKLWFtbWFya3BvcyAoSW5kZXhTY2FuRGVzYyBzY2FuKTsKK2FtcG9z cmVzZXQgKEluZGV4U2NhbkRlc2Mgc2Nhbik7CiA8L3Byb2dyYW1saXN0aW5nPgotICAgTWFyayBj dXJyZW50IHNjYW4gcG9zaXRpb24uICBUaGUgYWNjZXNzIG1ldGhvZCBuZWVkIG9ubHkgc3VwcG9y dCBvbmUKLSAgIHJlbWVtYmVyZWQgc2NhbiBwb3NpdGlvbiBwZXIgc2Nhbi4KKyAgIE5vdGlmeSBp bmRleCBBTSB0aGF0IGNvcmUgY29kZSB3aWxsIGNoYW5nZSB0aGUgc2NhbidzIHBvc2l0aW9uIHRv IGFuIGl0ZW0KKyAgIHJldHVybmVkIGFzIHBhcnQgb2YgYW4gZWFybGllciBiYXRjaC4gIFRoZSBp bmRleCBBTSBtdXN0IHRoZXJlZm9yZQorICAgaW52YWxpZGF0ZSBhbnkgc3RhdGUgdGhhdCBpbmRl cGVuZGVudGx5IHRyYWNrcyB0aGUgc2NhbidzIHByb2dyZXNzCisgICAoZS5nLiwgYXJyYXkga2V5 cyB1c2VkIHdpdGggYSBTY2FsYXJBcnJheU9wRXhwciBxdWFsKS4gIENhbGxlZCBieSB0aGUgY29y ZQorICAgc3lzdGVtIHdoZW4gaXQgaXMgYWJvdXQgdG8gcmVzdG9yZSBhIG1hcmsuCiAgIDwvcGFy YT4KIAogICA8cGFyYT4KLSAgIFRoZSA8ZnVuY3Rpb24+YW1tYXJrcG9zPC9mdW5jdGlvbj4gZnVu Y3Rpb24gbmVlZCBvbmx5IGJlIHByb3ZpZGVkIGlmIHRoZSBhY2Nlc3MKLSAgIG1ldGhvZCBzdXBw b3J0cyBvcmRlcmVkIHNjYW5zLiAgSWYgaXQgZG9lc24ndCwKLSAgIHRoZSA8c3RydWN0ZmllbGQ+ YW1tYXJrcG9zPC9zdHJ1Y3RmaWVsZD4gZmllbGQgaW4gaXRzIDxzdHJ1Y3RuYW1lPkluZGV4QW1S b3V0aW5lPC9zdHJ1Y3RuYW1lPgotICAgc3RydWN0IG1heSBiZSBzZXQgdG8gTlVMTC4KLSAgPC9w YXJhPgotCi0gIDxwYXJhPgotPHByb2dyYW1saXN0aW5nPgotdm9pZAotYW1yZXN0cnBvcyAoSW5k ZXhTY2FuRGVzYyBzY2FuKTsKLTwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICBSZXN0b3JlIHRoZSBzY2Fu IHRvIHRoZSBtb3N0IHJlY2VudGx5IG1hcmtlZCBwb3NpdGlvbi4KLSAgPC9wYXJhPgotCi0gIDxw YXJhPgotICAgVGhlIDxmdW5jdGlvbj5hbXJlc3RycG9zPC9mdW5jdGlvbj4gZnVuY3Rpb24gbmVl ZCBvbmx5IGJlIHByb3ZpZGVkIGlmIHRoZSBhY2Nlc3MKLSAgIG1ldGhvZCBzdXBwb3J0cyBvcmRl cmVkIHNjYW5zLiAgSWYgaXQgZG9lc24ndCwKLSAgIHRoZSA8c3RydWN0ZmllbGQ+YW1yZXN0cnBv czwvc3RydWN0ZmllbGQ+IGZpZWxkIGluIGl0cyA8c3RydWN0bmFtZT5JbmRleEFtUm91dGluZTwv c3RydWN0bmFtZT4KLSAgIHN0cnVjdCBtYXkgYmUgc2V0IHRvIE5VTEwuCisgICBUaGUgPGZ1bmN0 aW9uPmFtcG9zcmVzZXQ8L2Z1bmN0aW9uPiBmdW5jdGlvbiBjYW4gb25seSBiZSBwcm92aWRlZCBp ZiB0aGUKKyAgIGFjY2VzcyBtZXRob2Qgc3VwcG9ydHMgb3JkZXJlZCBzY2FucyB0aHJvdWdoIHRo ZSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+CisgICBpbnRlcmZhY2UuICBJZiBpdCBk b2Vzbid0LCB0aGUgPHN0cnVjdGZpZWxkPmFtcG9zcmVzZXQ8L3N0cnVjdGZpZWxkPiBmaWVsZAor ICAgaW4gaXRzIDxzdHJ1Y3RuYW1lPkluZGV4QW1Sb3V0aW5lPC9zdHJ1Y3RuYW1lPiBzdHJ1Y3Qg c2hvdWxkIGJlIHNldCB0bworICAgTlVMTC4gIEluZGV4IEFNcyB0aGF0IGRvbid0IGhhdmUgYW55 IHByaXZhdGUgc3RhdGUgdGhhdCBtaWdodCBuZWVkIHRvIGJlCisgICBpbnZhbGlkYXRlZCBtaWdo dCBzdGlsbCBmaW5kIGl0IHVzZWZ1bCB0byBwcm92aWRlIGFuIGVtcHR5CisgICA8c3RydWN0Zmll bGQ+YW1wb3NyZXNldDwvc3RydWN0ZmllbGQ+IGZ1bmN0aW9uOyBpZiA8ZnVuY3Rpb24+YW1wb3Ny ZXNldDwvZnVuY3Rpb24+CisgICBpcyBzZXQgdG8gTlVMTCwgdGhlIGNvcmUgc3lzdGVtIHdpbGwg YXNzdW1lIHRoYXQgaXQgaXMgdW5zYWZlIHRvIHJlc3RvcmUgYQorICAgbWFya2VkIHBvc2l0aW9u LgogICA8L3BhcmE+CiAKICAgPHBhcmE+CkBAIC05ODgsMzAgKzExMTMsNDcgQEAgYW10cmFuc2xh dGVjbXB0eXBlIChDb21wYXJlVHlwZSBjbXB0eXBlLCBPaWQgb3BmYW1pbHksIE9pZCBvcGNpbnR5 cGUpOwogICA8L3BhcmE+CiAKICAgPHBhcmE+Ci0gICBUaGUgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8 L2Z1bmN0aW9uPiBmdW5jdGlvbiBoYXMgYSA8bGl0ZXJhbD5kaXJlY3Rpb248L2xpdGVyYWw+IGFy Z3VtZW50LAorICAgVGhlIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gYW5kIDxmdW5j dGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4KKyAgIGZ1bmN0aW9ucyBoYXZlIGEgPGxpdGVyYWw+ ZGlyZWN0aW9uPC9saXRlcmFsPiBhcmd1bWVudCwKICAgIHdoaWNoIGNhbiBiZSBlaXRoZXIgPGxp dGVyYWw+Rm9yd2FyZFNjYW5EaXJlY3Rpb248L2xpdGVyYWw+ICh0aGUgbm9ybWFsIGNhc2UpCiAg ICBvciAgPGxpdGVyYWw+QmFja3dhcmRTY2FuRGlyZWN0aW9uPC9saXRlcmFsPi4gIElmIHRoZSBm aXJzdCBjYWxsIGFmdGVyCiAgICA8ZnVuY3Rpb24+YW1yZXNjYW48L2Z1bmN0aW9uPiBzcGVjaWZp ZXMgPGxpdGVyYWw+QmFja3dhcmRTY2FuRGlyZWN0aW9uPC9saXRlcmFsPiwgdGhlbiB0aGUKICAg IHNldCBvZiBtYXRjaGluZyBpbmRleCBlbnRyaWVzIGlzIHRvIGJlIHNjYW5uZWQgYmFjay10by1m cm9udCByYXRoZXIgdGhhbiBpbgotICAgdGhlIG5vcm1hbCBmcm9udC10by1iYWNrIGRpcmVjdGlv biwgc28gPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBtdXN0IHJldHVybgotICAgdGhl IGxhc3QgbWF0Y2hpbmcgdHVwbGUgaW4gdGhlIGluZGV4LCByYXRoZXIgdGhhbiB0aGUgZmlyc3Qg b25lIGFzIGl0Ci0gICBub3JtYWxseSB3b3VsZC4gIChUaGlzIHdpbGwgb25seSBvY2N1ciBmb3Ig YWNjZXNzCi0gICBtZXRob2RzIHRoYXQgc2V0IDxzdHJ1Y3RmaWVsZD5hbWNhbm9yZGVyPC9zdHJ1 Y3RmaWVsZD4gdG8gdHJ1ZS4pICBBZnRlciB0aGUKLSAgIGZpcnN0IGNhbGwsIDxmdW5jdGlvbj5h bWdldHR1cGxlPC9mdW5jdGlvbj4gbXVzdCBiZSBwcmVwYXJlZCB0byBhZHZhbmNlIHRoZSBzY2Fu IGluCisgICB0aGUgbm9ybWFsIGZyb250LXRvLWJhY2sgZGlyZWN0aW9uLiAgSW4gdGhpcyBjYXNl LAorICAgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBtdXN0IHJldHVybiB0aGUgbGFz dCBtYXRjaGluZyB0dXBsZSBpbiB0aGUKKyAgIGluZGV4LCByYXRoZXIgdGhhbiB0aGUgZmlyc3Qg b25lIGFzIGl0IG5vcm1hbGx5IHdvdWxkLiAgU2ltaWxhcmx5LAorICAgPGZ1bmN0aW9uPmFtZ2V0 YmF0Y2g8L2Z1bmN0aW9uPiBtdXN0IHJldHVybiB0aGUgbGFzdCBtYXRjaGluZyBiYXRjaCBvZiBp dGVtcworICAgd2hlbiBlaXRoZXIgdGhlIGZpcnN0IGNhbGwgYWZ0ZXIgPGZ1bmN0aW9uPmFtcmVz Y2FuPC9mdW5jdGlvbj4gc3BlY2lmaWVzCisgICA8bGl0ZXJhbD5CYWNrd2FyZFNjYW5EaXJlY3Rp b248L2xpdGVyYWw+LCBvciBhIHN1YnNlcXVlbnQgY2FsbCBoYXMKKyAgIDxsaXRlcmFsPk5VTEw8 L2xpdGVyYWw+IGFzIGl0cyA8c3RydWN0ZmllbGQ+cHJpb3JiYXRjaDwvc3RydWN0ZmllbGQ+IGFy Z3VtZW50CisgICAoaW5kaWNhdGluZyBhIGJhY2t3YXJkIHNjYW4gcmVzdGFydCkuICAoVGhpcyBi YWNrd2FyZC1zY2FuIGJlaGF2aW9yIHdpbGwKKyAgIG9ubHkgb2NjdXIgZm9yIGFjY2VzcyBtZXRo b2RzIHRoYXQgc2V0IDxzdHJ1Y3RmaWVsZD5hbWNhbm9yZGVyPC9zdHJ1Y3RmaWVsZD4KKyAgIHRv IHRydWUuKSAgQWZ0ZXIgdGhlIGZpcnN0IGNhbGwsIGJvdGggPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8 L2Z1bmN0aW9uPiBhbmQKKyAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gbXVzdCBi ZSBwcmVwYXJlZCB0byBhZHZhbmNlIHRoZSBzY2FuIGluCiAgICBlaXRoZXIgZGlyZWN0aW9uIGZy b20gdGhlIG1vc3QgcmVjZW50bHkgcmV0dXJuZWQgZW50cnkuICAoQnV0IGlmCiAgICA8c3RydWN0 ZmllbGQ+YW1jYW5iYWNrd2FyZDwvc3RydWN0ZmllbGQ+IGlzIGZhbHNlLCBhbGwgc3Vic2VxdWVu dAogICAgY2FsbHMgd2lsbCBoYXZlIHRoZSBzYW1lIGRpcmVjdGlvbiBhcyB0aGUgZmlyc3Qgb25l LikKICAgPC9wYXJhPgogCiAgIDxwYXJhPgotICAgQWNjZXNzIG1ldGhvZHMgdGhhdCBzdXBwb3J0 IG9yZGVyZWQgc2NhbnMgbXVzdCBzdXBwb3J0IDxxdW90ZT5tYXJraW5nPC9xdW90ZT4gYQotICAg cG9zaXRpb24gaW4gYSBzY2FuIGFuZCBsYXRlciByZXR1cm5pbmcgdG8gdGhlIG1hcmtlZCBwb3Np dGlvbi4gIFRoZSBzYW1lCi0gICBwb3NpdGlvbiBtaWdodCBiZSByZXN0b3JlZCBtdWx0aXBsZSB0 aW1lcy4gIEhvd2V2ZXIsIG9ubHkgb25lIHBvc2l0aW9uIG5lZWQKLSAgIGJlIHJlbWVtYmVyZWQg cGVyIHNjYW47IGEgbmV3IDxmdW5jdGlvbj5hbW1hcmtwb3M8L2Z1bmN0aW9uPiBjYWxsIG92ZXJy aWRlcyB0aGUKLSAgIHByZXZpb3VzbHkgbWFya2VkIHBvc2l0aW9uLiAgQW4gYWNjZXNzIG1ldGhv ZCB0aGF0IGRvZXMgbm90IHN1cHBvcnQgb3JkZXJlZAotICAgc2NhbnMgbmVlZCBub3QgcHJvdmlk ZSA8ZnVuY3Rpb24+YW1tYXJrcG9zPC9mdW5jdGlvbj4gYW5kIDxmdW5jdGlvbj5hbXJlc3RycG9z PC9mdW5jdGlvbj4KLSAgIGZ1bmN0aW9ucyBpbiA8c3RydWN0bmFtZT5JbmRleEFtUm91dGluZTwv c3RydWN0bmFtZT47IHNldCB0aG9zZSBwb2ludGVycyB0byBOVUxMCi0gICBpbnN0ZWFkLgorICAg QWNjZXNzIG1ldGhvZHMgdXNpbmcgdGhlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4g aW50ZXJmYWNlIG1heQorICAgc3VwcG9ydCA8cXVvdGU+bWFya2luZzwvcXVvdGU+IGEgcG9zaXRp b24gaW4gYSBzY2FuIGFuZCBsYXRlciByZXR1cm5pbmcgdG8KKyAgIHRoZSBtYXJrZWQgcG9zaXRp b24sIHRob3VnaCB0aGlzIGlzIG9wdGlvbmFsLiAgSWYgdGhlIHNhbWUgbWFya2VkIHBvc2l0aW9u CisgICBtaWdodCBiZSByZXN0b3JlZCBtdWx0aXBsZSB0aW1lcywgdGhlIGNvcmUgc3lzdGVtIG1h bmFnZXMgbWFya2luZyBhbmQKKyAgIHJlc3RvcmF0aW9uIHRocm91Z2ggdGhlIDxmdW5jdGlvbj5p bmRleF9iYXRjaF9tYXJrX3BvczwvZnVuY3Rpb24+IGFuZAorICAgPGZ1bmN0aW9uPmluZGV4X2Jh dGNoX3Jlc3RvcmVfcG9zPC9mdW5jdGlvbj4gaW50ZXJuYWwgZnVuY3Rpb25zLiAgV2hlbiBhCisg ICBtYXJrZWQgcG9zaXRpb24gaXMgcmVzdG9yZWQsIHRoZSBpbmRleCBBTSBpcyBub3RpZmllZCB2 aWEgdGhlCisgICA8ZnVuY3Rpb24+YW1wb3NyZXNldDwvZnVuY3Rpb24+IGNhbGxiYWNrIHNvIGl0 IGNhbiBpbnZhbGlkYXRlIGFueSBwcml2YXRlCisgICBzdGF0ZSB0aGF0IGluZGVwZW5kZW50bHkg dHJhY2tzIHRoZSBzY2FuJ3MgcHJvZ3Jlc3MgKHN1Y2ggYXMgYXJyYXkga2V5CisgICBzdGF0ZSku CisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFRoZSA8ZnVuY3Rpb24+YW1wb3NyZXNldDwvZnVu Y3Rpb24+IGZ1bmN0aW9uIGluIDxzdHJ1Y3RuYW1lPkluZGV4QW1Sb3V0aW5lPC9zdHJ1Y3RuYW1l PgorICAgc2hvdWxkIGJlIHNldCB0byBOVUxMIGZvciBhY2Nlc3MgbWV0aG9kcyB0aGF0IGRvIG5v dCBzdXBwb3J0IG1hcmsvcmVzdG9yZS4KKyAgIEZvciBhY2Nlc3MgbWV0aG9kcyB0aGF0IGRvIHN1 cHBvcnQgdGhpcyBmZWF0dXJlLCA8ZnVuY3Rpb24+YW1wb3NyZXNldDwvZnVuY3Rpb24+CisgICBt dXN0IGJlIHByb3ZpZGVkICh0aG91Z2ggaXQgY2FuIGJlIGEgbm8tb3AgZnVuY3Rpb24gaWYgdGhl IEFNIGhhcyBubyBwcml2YXRlCisgICBzdGF0ZSB0byBpbnZhbGlkYXRlKS4KICAgPC9wYXJhPgog CiAgIDxwYXJhPgpAQCAtMTE4MCw2ICsxMzIyLDk0IEBAIGFtdHJhbnNsYXRlY21wdHlwZSAoQ29t cGFyZVR5cGUgY21wdHlwZSwgT2lkIG9wZmFtaWx5LCBPaWQgb3BjaW50eXBlKTsKICAgIHJlZHVj ZSB0aGUgZnJlcXVlbmN5IG9mIHN1Y2ggdHJhbnNhY3Rpb24gY2FuY2VsbGF0aW9ucy4KICAgPC9w YXJhPgogCisgIDxzZWN0MiBpZD0iaW5kZXgtbG9ja2luZy1iYXRjaGVzIj4KKyAgIDx0aXRsZT5C YXRjaCBTY2FubmluZyBhbmQgQnVmZmVyIFBpbiBNYW5hZ2VtZW50PC90aXRsZT4KKworICAgPHBh cmE+CisgICAgSW5kZXggYWNjZXNzIG1ldGhvZHMgdGhhdCBpbXBsZW1lbnQgdGhlIDxmdW5jdGlv bj5hbWdldGJhdGNoPC9mdW5jdGlvbj4KKyAgICBpbnRlcmZhY2UgbXVzdCBjb29wZXJhdGUgd2l0 aCB0aGUgY29yZSBzeXN0ZW0gdG8gbWFuYWdlIGJ1ZmZlciBwaW5zIGluIGEKKyAgICB3YXkgdGhh dCBwcmV2ZW50cyBjb25jdXJyZW50IDxjb21tYW5kPlZBQ1VVTTwvY29tbWFuZD4gZnJvbSBjcmVh dGluZworICAgIFRJRCByZWN5Y2xpbmcgaGF6YXJkcy4gIFVubGlrZSA8ZnVuY3Rpb24+YW1nZXR0 dXBsZTwvZnVuY3Rpb24+IHNjYW5zLAorICAgIHdoaWNoIGtlZXAgdGhlIGluZGV4IGFjY2VzcyBt ZXRob2QgaW4gY29udHJvbCBvZiBzY2FuIHByb2dyZXNzaW9uLAorICAgIDxmdW5jdGlvbj5hbWdl dGJhdGNoPC9mdW5jdGlvbj4gc2NhbnMgZ2l2ZSBjb250cm9sIHRvIHRoZSB0YWJsZSBhY2Nlc3MK KyAgICBtZXRob2QsIHdoaWNoIG1heSBmZXRjaCB0YWJsZSB0dXBsZXMgaW4gYSBkaWZmZXJlbnQg b3JkZXIgdGhhbiB0aGUgaW5kZXgKKyAgICBlbnRyaWVzIHdlcmUgcmV0dXJuZWQuICBUaGlzIGNy ZWF0ZXMgdGhlIG5lZWQgZm9yIGV4cGxpY2l0IGJ1ZmZlciBwaW4KKyAgICBtYW5hZ2VtZW50IHRv IGVuc3VyZSB0aGUgdGFibGUgYWNjZXNzIG1ldGhvZCBkb2VzIG5vdCBjb25mdXNlIGEgcmVjeWNs ZWQKKyAgICBUSUQgd2l0aCB0aGUgb3JpZ2luYWwgcm93IGl0IG1lYW50IHRvIHJlZmVyZW5jZS4K KyAgIDwvcGFyYT4KKworICAgPHBhcmE+CisgICAgV2hlbiA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwv ZnVuY3Rpb24+IHJldHVybnMgYSBiYXRjaCwgdGhlIGJhdGNoJ3MKKyAgICBhc3NvY2lhdGVkIGlu ZGV4IHBhZ2UgbWF5IGJlIHJldGFpbmVkIGluIGEgYnVmZmVyIHdpdGggYSBwaW4gaGVsZCBvbiBp dC4KKyAgICBUaGlzIHBpbiBzZXJ2ZXMgYXMgYW4gaW50ZXJsb2NrOiA8Y29tbWFuZD5WQUNVVU08 L2NvbW1hbmQ+IGNhbm5vdCByZWN5Y2xlCisgICAgVElEcyBvbiBhIHBpbm5lZCBwYWdlLiAgVGhl IGJ1ZmZlciBwaW4gcHJvdGVjdHMgb25seSB0aGUgdGFibGUgYWNjZXNzCisgICAgbWV0aG9kJ3Mg YWJpbGl0eSB0byBtYXAgVElEcyB0byByb3dzIGNvcnJlY3RseTsgaXQgZG9lcyBub3QgcHJvdGVj dCB0aGUKKyAgICBpbmRleCBzdHJ1Y3R1cmUgaXRzZWxmLiAgSW5kZXggYWNjZXNzIG1ldGhvZHMg bWF5IHVzZSBwaW5zIGZvciBvdGhlcgorICAgIHB1cnBvc2VzIChmb3IgZXhhbXBsZSwgbWFpbnRh aW5pbmcgYSBkZXNjZW50IHN0YWNrIG9mIHBpbm5lZCBwYWdlcyksIGJ1dAorICAgIHRob3NlIHVz ZXMgYXJlIGludGVybmFsIHRvIHRoZSBhY2Nlc3MgbWV0aG9kIGFuZCBpbmRlcGVuZGVudCBvZiB0 aGUKKyAgICB0YWJsZS1BTSBzeW5jaHJvbml6YXRpb24gZGVzY3JpYmVkIGhlcmUuCisgICA8L3Bh cmE+CisKKyAgIDxwYXJhPgorICAgIFdoZXRoZXIgYSBwaW4gc2hvdWxkIGJlIGhlbGQgd2hlbiBy ZXR1cm5pbmcgYSBiYXRjaCBpcyBjb250cm9sbGVkIGJ5IHRoZQorICAgIDxzdHJ1Y3RmaWVsZD5k cm9wUGluPC9zdHJ1Y3RmaWVsZD4gZmxhZyBpbiB0aGUgPHR5cGU+QmF0Y2hRdWV1ZTwvdHlwZT4K KyAgICBzdHJ1Y3R1cmUuIFdoZW4gPGxpdGVyYWw+ZHJvcFBpbjwvbGl0ZXJhbD4gaXMgdHJ1ZSwg dGhlIGluZGV4IGFjY2VzcyBtZXRob2QKKyAgICBkcm9wcyB0aGUgcGluIGJlZm9yZSByZXR1cm5p bmcgdGhlIGJhdGNoLCB3aGljaCBhdm9pZHMgYmxvY2tpbmcKKyAgICA8Y29tbWFuZD5WQUNVVU08 L2NvbW1hbmQ+LiBXaGVuIDxsaXRlcmFsPmRyb3BQaW48L2xpdGVyYWw+IGlzIGZhbHNlLCB0aGUK KyAgICBpbmRleCBhY2Nlc3MgbWV0aG9kIG11c3QgaG9sZCB0aGUgcGluIHVudGlsIHRoZSBiYXRj aCBpcyBmcmVlZCB2aWEKKyAgICA8ZnVuY3Rpb24+YW1mcmVlYmF0Y2g8L2Z1bmN0aW9uPi4gIFRo ZSBjb3JlIHN5c3RlbSBzZXRzIHRoZQorICAgIDxsaXRlcmFsPmRyb3BQaW48L2xpdGVyYWw+IGZs YWcgYmFzZWQgb24gc2NhbiB0eXBlOiBpdCBpcyB0cnVlIGZvcgorICAgIE1WQ0MtY29tcGxpYW50 IHNuYXBzaG90cyBvbiBsb2dnZWQgcmVsYXRpb25zICh1bmxlc3MgaW5kZXgtb25seSBzY2FucyBh cmUKKyAgICBpbiB1c2UpLCBhbmQgZmFsc2Ugb3RoZXJ3aXNlLgorICAgPC9wYXJhPgorCisgICA8 cGFyYT4KKyAgICBXaGVuIDxsaXRlcmFsPmRyb3BQaW48L2xpdGVyYWw+IGlzIHRydWUgYW5kIHRo ZSBpbmRleCBhY2Nlc3MgbWV0aG9kIGlzCisgICAgZWFnZXIgYWJvdXQgZHJvcHBpbmcgcGlucywg aXQgbXVzdCBzYXZlIHRoZSBwYWdlJ3MgTFNOIGluIHRoZSBiYXRjaCBiZWZvcmUKKyAgICByZXR1 cm5pbmcuIExhdGVyLCB3aGVuIDxmdW5jdGlvbj5hbWZyZWViYXRjaDwvZnVuY3Rpb24+IGlzIGNh bGxlZCBhbmQgdGhlCisgICAgYWNjZXNzIG1ldGhvZCB3aXNoZXMgdG8gc2V0IDxsaXRlcmFsPkxQ X0RFQUQ8L2xpdGVyYWw+IGJpdHMgdG8gbWFyayBkZWFkCisgICAgdHVwbGVzLCBpdCBtdXN0IHZl cmlmeSB0aGF0IHRoZSBwYWdlJ3MgTFNOIGhhcyBub3QgY2hhbmdlZCBzaW5jZSB0aGUgYmF0Y2gK KyAgICB3YXMgcmVhZC4gSWYgdGhlIExTTiBoYXMgY2hhbmdlZCwgdGhlIHBhZ2UgbWF5IGhhdmUg YmVlbiBtb2RpZmllZCBieQorICAgIGNvbmN1cnJlbnQgYWN0aXZpdHkgYW5kIGl0IGlzIHVuc2Fm ZSB0byBzZXQgPGxpdGVyYWw+TFBfREVBRDwvbGl0ZXJhbD4gYml0cy4KKyAgICBUaGlzIExTTi1i YXNlZCB2YWxpZGF0aW9uIHNjaGVtZSBwcm90ZWN0cyBhZ2FpbnN0IFRJRCByZWN5Y2xpbmcgcmFj ZXMgd2hlbgorICAgIHBpbnMgaGF2ZSBiZWVuIGRyb3BwZWQuICBXaGVuIDxsaXRlcmFsPmRyb3BQ aW48L2xpdGVyYWw+IGlzIGZhbHNlLCB0aGUgcGluCisgICAgcHJldmVudHMgdW5zYWZlIGNvbmN1 cnJlbnQgcmVtb3ZhbCBvZiB0YWJsZSBUSUQgcmVmZXJlbmNlcyBieQorICAgIDxjb21tYW5kPlZB Q1VVTTwvY29tbWFuZD4sIHNvIG5vIExTTiBjaGVjayBpcyBuZWNlc3NhcnkuCisgICA8L3BhcmE+ CisKKyAgIDxwYXJhPgorICAgIFRoZSBjb3JlIHN5c3RlbSBwcm92aWRlcyB0aHJlZSB1dGlsaXR5 IGZ1bmN0aW9ucyBmb3IgbWFuYWdpbmcgYmF0Y2gKKyAgICByZXNvdXJjZXM6CisgICAgPGZ1bmN0 aW9uPmluZGV4YW1fdXRpbF9iYXRjaF9hbGxvYzwvZnVuY3Rpb24+IGFsbG9jYXRlcyBhIG5ldyBi YXRjaCBvcgorICAgIHJldXNlcyBhIGNhY2hlZCBvbmUsCisgICAgPGZ1bmN0aW9uPmluZGV4YW1f dXRpbF9iYXRjaF91bmxvY2s8L2Z1bmN0aW9uPiBkcm9wcyB0aGUgbG9jayBhbmQKKyAgICBjb25k aXRpb25hbGx5IGRyb3BzIHRoZSBwaW4gb24gYSBiYXRjaCdzIGluZGV4IHBhZ2UgKGJhc2VkIG9u IHRoZQorICAgIDxsaXRlcmFsPmRyb3BQaW48L2xpdGVyYWw+IHNldHRpbmcpLCBhbmQKKyAgICA8 ZnVuY3Rpb24+aW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2U8L2Z1bmN0aW9uPiBmcmVlcyBvciBj YWNoZXMgYSBiYXRjaC4KKyAgICBJbmRleCBhY2Nlc3MgbWV0aG9kcyBzaG91bGQgdXNlIHRoZXNl IHV0aWxpdGllcyByYXRoZXIgdGhhbiBtYW5hZ2luZworICAgIGJ1ZmZlcnMgZGlyZWN0bHkuICBU aGUgPGZpbGVuYW1lPnNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvPC9maWxlbmFtZT4KKyAgICBp bXBsZW1lbnRhdGlvbiBwcm92aWRlcyBhIHJlZmVyZW5jZSBleGFtcGxlIG9mIGNvcnJlY3QgdXNh Z2UuCisgICA8L3BhcmE+CisKKyAgIDxwYXJhPgorICAgIE5vdGUgdGhhdCA8ZnVuY3Rpb24+YW1m cmVlYmF0Y2g8L2Z1bmN0aW9uPiBpcyBjYWxsZWQgb25seSBieSB0aGUgY29yZSBjb2RlCisgICAg YW5kIHRhYmxlIGFjY2VzcyBtZXRob2QsIG5ldmVyIGJ5IHRoZSBpbmRleCBhY2Nlc3MgbWV0aG9k IGl0c2VsZi4gVGhlCisgICAgaW5kZXggQU0gbXVzdCBub3QgYXNzdW1lIHRoYXQgYSBjYWxsIHRv IDxmdW5jdGlvbj5hbWZyZWViYXRjaDwvZnVuY3Rpb24+CisgICAgd2lsbCB0YWtlIHBsYWNlIGJl Zm9yZSBhbm90aGVyIGNhbGwgdG8gPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPgorICAg IChmb3IgdGhlIHNhbWUgaW5kZXggc2NhbikgdGFrZXMgcGxhY2UuCisgICA8L3BhcmE+CisKKyAg IDxwYXJhPgorICAgIFRoZSBpbmRleCBBTSBtdXN0IGFsc28gYXZvaWQgcmVseWluZyBvbiB0aGUg Y29yZSBjb2RlIGNhbGxpbmcKKyAgICA8ZnVuY3Rpb24+YW1mcmVlYmF0Y2g8L2Z1bmN0aW9uPiB3 aXRoIGJhdGNoZXMgdGhhdCBhcmUgaW4gYW55IHBhcnRpY3VsYXIKKyAgICBvcmRlci4gIEZvciBl eGFtcGxlLCBpdCBpcyBub3Qgb2theSBmb3IgYW4gaW5kZXggQU0gdG8gYXNzdW1lIHRoYXQgY2Fs bHMKKyAgICB0byA8ZnVuY3Rpb24+YW1mcmVlYmF0Y2g8L2Z1bmN0aW9uPiB3aWxsIHRha2UgcGxh Y2UgaW4gdGhlIHNhbWUgb3JkZXIgYXMKKyAgICB0aGUgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1 bmN0aW9uPiBjYWxscyB0aGF0IGluaXRpYWxseQorICAgIGFsbG9jYXRlZC9wb3B1bGF0ZWQvcmV0 dXJuZWQgZWFjaCBiYXRjaC4KKyAgIDwvcGFyYT4KKworICA8L3NlY3QyPgorCiAgPC9zZWN0MT4K IAogIDxzZWN0MSBpZD0iaW5kZXgtdW5pcXVlLWNoZWNrcyI+CmRpZmYgLS1naXQgYS9kb2Mvc3Jj L3NnbWwvcmVmL2NyZWF0ZV90YWJsZS5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfdGFi bGUuc2dtbAppbmRleCA2NTU3YzVjZmYuLjhmMDk1MmE1MCAxMDA2NDQKLS0tIGEvZG9jL3NyYy9z Z21sL3JlZi9jcmVhdGVfdGFibGUuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV90 YWJsZS5zZ21sCkBAIC0xMTUyLDEyICsxMTUyLDEzIEBAIFdJVEggKCBNT0RVTFVTIDxyZXBsYWNl YWJsZSBjbGFzcz0icGFyYW1ldGVyIj5udW1lcmljX2xpdGVyYWw8L3JlcGxhY2VhYmxlPiwgUkVN CiAgICAgIDwvcGFyYT4KIAogICAgICA8cGFyYT4KLSAgICAgIFRoZSBhY2Nlc3MgbWV0aG9kIG11 c3Qgc3VwcG9ydCA8bGl0ZXJhbD5hbWdldHR1cGxlPC9saXRlcmFsPiAoc2VlIDx4cmVmCi0gICAg ICBsaW5rZW5kPSJpbmRleGFtIi8+KTsgYXQgcHJlc2VudCB0aGlzIG1lYW5zIDxhY3JvbnltPkdJ TjwvYWNyb255bT4KLSAgICAgIGNhbm5vdCBiZSB1c2VkLiAgQWx0aG91Z2ggaXQncyBhbGxvd2Vk LCB0aGVyZSBpcyBsaXR0bGUgcG9pbnQgaW4gdXNpbmcKLSAgICAgIEItdHJlZSBvciBoYXNoIGlu ZGV4ZXMgd2l0aCBhbiBleGNsdXNpb24gY29uc3RyYWludCwgYmVjYXVzZSB0aGlzCi0gICAgICBk b2VzIG5vdGhpbmcgdGhhdCBhbiBvcmRpbmFyeSB1bmlxdWUgY29uc3RyYWludCBkb2Vzbid0IGRv IGJldHRlci4KLSAgICAgIFNvIGluIHByYWN0aWNlIHRoZSBhY2Nlc3MgbWV0aG9kIHdpbGwgYWx3 YXlzIGJlIDxhY3JvbnltPkdpU1Q8L2Fjcm9ueW0+IG9yCisgICAgICBUaGUgYWNjZXNzIG1ldGhv ZCBtdXN0IHN1cHBvcnQgZWl0aGVyIDxsaXRlcmFsPmFtZ2V0dHVwbGU8L2xpdGVyYWw+CisgICAg ICBvciA8bGl0ZXJhbD5hbWdldGJhdGNoPC9saXRlcmFsPiAoc2VlIDx4cmVmIGxpbmtlbmQ9Imlu ZGV4YW0iLz4pOyBhdAorICAgICAgcHJlc2VudCB0aGlzIG1lYW5zIDxhY3JvbnltPkdJTjwvYWNy b255bT4gY2Fubm90IGJlIHVzZWQuICBBbHRob3VnaAorICAgICAgaXQncyBhbGxvd2VkLCB0aGVy ZSBpcyBsaXR0bGUgcG9pbnQgaW4gdXNpbmcgQi10cmVlIG9yIGhhc2ggaW5kZXhlcworICAgICAg d2l0aCBhbiBleGNsdXNpb24gY29uc3RyYWludCwgYmVjYXVzZSB0aGlzIGRvZXMgbm90aGluZyB0 aGF0IGFuCisgICAgICBvcmRpbmFyeSB1bmlxdWUgY29uc3RyYWludCBkb2Vzbid0IGRvIGJldHRl ci4gIFNvIGluIHByYWN0aWNlIHRoZQorICAgICAgYWNjZXNzIG1ldGhvZCB3aWxsIGFsd2F5cyBi ZSA8YWNyb255bT5HaVNUPC9hY3JvbnltPiBvcgogICAgICAgPGFjcm9ueW0+U1AtR2lTVDwvYWNy b255bT4uCiAgICAgIDwvcGFyYT4KIApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9kdW1t eV9pbmRleF9hbS9kdW1teV9pbmRleF9hbS5jIGIvc3JjL3Rlc3QvbW9kdWxlcy9kdW1teV9pbmRl eF9hbS9kdW1teV9pbmRleF9hbS5jCmluZGV4IDk0ZWY2MzliNi4uNGUyODc3YTRkIDEwMDY0NAot LS0gYS9zcmMvdGVzdC9tb2R1bGVzL2R1bW15X2luZGV4X2FtL2R1bW15X2luZGV4X2FtLmMKKysr IGIvc3JjL3Rlc3QvbW9kdWxlcy9kdW1teV9pbmRleF9hbS9kdW1teV9pbmRleF9hbS5jCkBAIC0z MTcsMTAgKzMxNywxMCBAQCBkaWhhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAlhbXJvdXRpbmUt PmFtYmVnaW5zY2FuID0gZGliZWdpbnNjYW47CiAJYW1yb3V0aW5lLT5hbXJlc2NhbiA9IGRpcmVz Y2FuOwogCWFtcm91dGluZS0+YW1nZXR0dXBsZSA9IE5VTEw7CisJYW1yb3V0aW5lLT5hbWdldGJh dGNoID0gTlVMTDsKIAlhbXJvdXRpbmUtPmFtZ2V0Yml0bWFwID0gTlVMTDsKIAlhbXJvdXRpbmUt PmFtZW5kc2NhbiA9IGRpZW5kc2NhbjsKLQlhbXJvdXRpbmUtPmFtbWFya3BvcyA9IE5VTEw7Ci0J YW1yb3V0aW5lLT5hbXJlc3RycG9zID0gTlVMTDsKKwlhbXJvdXRpbmUtPmFtcG9zcmVzZXQgPSBO VUxMOwogCWFtcm91dGluZS0+YW1lc3RpbWF0ZXBhcmFsbGVsc2NhbiA9IE5VTEw7CiAJYW1yb3V0 aW5lLT5hbWluaXRwYXJhbGxlbHNjYW4gPSBOVUxMOwogCWFtcm91dGluZS0+YW1wYXJhbGxlbHJl c2NhbiA9IE5VTEw7CmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlz dCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IGNmM2Y2YTdkYS4uNmYx ZWJiOTU1IDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysg Yi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtMjIwLDggKzIyMCw2IEBAIEJU U2Nhbkluc2VydERhdGEKIEJUU2NhbktleVByZXByb2MKIEJUU2Nhbk9wYXF1ZQogQlRTY2FuT3Bh cXVlRGF0YQotQlRTY2FuUG9zRGF0YQotQlRTY2FuUG9zSXRlbQogQlRTaGFyZWQKIEJUU29ydEFy cmF5Q29udGV4dAogQlRTcG9vbApAQCAtMzQ0NiwxMiArMzQ0NCwxMCBAQCBhbWdldHR1cGxlX2Z1 bmN0aW9uCiBhbWluaXRwYXJhbGxlbHNjYW5fZnVuY3Rpb24KIGFtaW5zZXJ0X2Z1bmN0aW9uCiBh bWluc2VydGNsZWFudXBfZnVuY3Rpb24KLWFtbWFya3Bvc19mdW5jdGlvbgogYW1vcHRpb25zX2Z1 bmN0aW9uCiBhbXBhcmFsbGVscmVzY2FuX2Z1bmN0aW9uCiBhbXByb3BlcnR5X2Z1bmN0aW9uCiBh bXJlc2Nhbl9mdW5jdGlvbgotYW1yZXN0cnBvc19mdW5jdGlvbgogYW10cmFuc2xhdGVfY21wdHlw ZV9mdW5jdGlvbgogYW10cmFuc2xhdGVfc3RyYXRlZ3lfZnVuY3Rpb24KIGFtdmFjdXVtY2xlYW51 cF9mdW5jdGlvbgotLSAKMi41MS4wCgo= --000000000000d00bb30644d9d645 Content-Type: application/octet-stream; name="v1-0003-bufmgr-aio-Prototype-for-not-waiting-for-already-.patch" Content-Disposition: attachment; filename="v1-0003-bufmgr-aio-Prototype-for-not-waiting-for-already-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mimg736b2 RnJvbSA5ZjJkOTMyNGMyZDM2NGM2NTQxMzg3ZjBlOGI5OThhMWNhZjQyNTQxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IEZyaSwgMTUgQXVnIDIwMjUgMTE6MDE6NTIgLTA0MDAKU3ViamVjdDogW1BBVENIIHYxIDMv NF0gYnVmbWdyOiBhaW86IFByb3RvdHlwZSBmb3Igbm90IHdhaXRpbmcgZm9yCiBhbHJlYWR5LWlu LXByb2dyZXNzIElPCgpBdXRob3I6ClJldmlld2VkLWJ5OgpEaXNjdXNzaW9uOiBodHRwczovL3Bv c3Rnci5lcy9tL3psamVyZ3dlcXRpN3g2N2xnNWlqZTJyemp1c2llMzduc2xzbmtqa2tieTRsYXFx YmZ3QDNwM3p1NTIyeXlrdgpCYWNrcGF0Y2g6Ci0tLQogc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZt Z3IuaCAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMg fCAxNTAgKysrKysrKysrKysrKysrKysrKysrKysrKystLQogMiBmaWxlcyBjaGFuZ2VkLCAxNDIg aW5zZXJ0aW9ucygrKSwgOSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9z dG9yYWdlL2J1Zm1nci5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3IuaAppbmRleCA5ZjY3 ODU5MTAuLjIxZDRmMjJjMiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3Iu aAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5oCkBAIC0xNDcsNiArMTQ3LDcgQEAg c3RydWN0IFJlYWRCdWZmZXJzT3BlcmF0aW9uCiAJaW50CQkJZmxhZ3M7CiAJaW50MTYJCW5ibG9j a3M7CiAJaW50MTYJCW5ibG9ja3NfZG9uZTsKKwlib29sCQlmb3JlaWduX2lvOwogCVBnQWlvV2Fp dFJlZiBpb193cmVmOwogCVBnQWlvUmV0dXJuIGlvX3JldHVybjsKIH07CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv YnVmZmVyL2J1Zm1nci5jCmluZGV4IGYzNzNjZWFkOS4uNTBmM2IwZGU4IDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYworKysgYi9zcmMvYmFja2VuZC9zdG9y YWdlL2J1ZmZlci9idWZtZ3IuYwpAQCAtMTUzOCw2ICsxNTM4LDQ2IEBAIFJlYWRCdWZmZXJzQ2Fu U3RhcnRJT09uY2UoQnVmZmVyIGJ1ZmZlciwgYm9vbCBub3dhaXQpCiAJCXJldHVybiBTdGFydEJ1 ZmZlcklPKEdldEJ1ZmZlckRlc2NyaXB0b3IoYnVmZmVyIC0gMSksIHRydWUsIG5vd2FpdCk7CiB9 CiAKKy8qCisgKiBDaGVjayBpZiB0aGUgYnVmZmVyIGlzIGFscmVhZHkgdW5kZXJnb2luZyByZWFk IEFJTy4gSWYgaXQgaXMsIGFzc2lnbiB0aGUKKyAqIElPJ3Mgd2FpdCByZWZlcmVuY2UgdG8gb3Bl cmF0aW9uLT5pb193cmVmLCB0aGVyZWJ5IGFsbG93aW5nIHRoZSBjYWxsZXIgdG8KKyAqIHdhaXQg Zm9yIHRoYXQgSU8uCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbAorUmVhZEJ1ZmZlcnNJT0FscmVh ZHlJblByb2dyZXNzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24sIEJ1ZmZlciBidWZm ZXIpCit7CisJQnVmZmVyRGVzYyAqZGVzYzsKKwl1aW50MzIJCWJ1Zl9zdGF0ZTsKKwlQZ0Fpb1dh aXRSZWYgaW93OworCisJcGdhaW9fd3JlZl9jbGVhcigmaW93KTsKKworCWlmIChCdWZmZXJJc0xv Y2FsKGJ1ZmZlcikpCisJeworCQlkZXNjID0gR2V0TG9jYWxCdWZmZXJEZXNjcmlwdG9yKC1idWZm ZXIgLSAxKTsKKwkJYnVmX3N0YXRlID0gcGdfYXRvbWljX3JlYWRfdTMyKCZkZXNjLT5zdGF0ZSk7 CisJCWlmICgoYnVmX3N0YXRlICYgQk1fSU9fSU5fUFJPR1JFU1MpICYmICEoYnVmX3N0YXRlICYg Qk1fVkFMSUQpKQorCQkJaW93ID0gZGVzYy0+aW9fd3JlZjsKKwl9CisJZWxzZQorCXsKKwkJZGVz YyA9IEdldEJ1ZmZlckRlc2NyaXB0b3IoYnVmZmVyIC0gMSk7CisJCWJ1Zl9zdGF0ZSA9IExvY2tC dWZIZHIoZGVzYyk7CisKKwkJaWYgKChidWZfc3RhdGUgJiBCTV9JT19JTl9QUk9HUkVTUykgJiYg IShidWZfc3RhdGUgJiBCTV9WQUxJRCkpCisJCQlpb3cgPSBkZXNjLT5pb193cmVmOworCQlVbmxv Y2tCdWZIZHIoZGVzYyk7CisJfQorCisJaWYgKHBnYWlvX3dyZWZfdmFsaWQoJmlvdykpCisJewor CQlvcGVyYXRpb24tPmlvX3dyZWYgPSBpb3c7CisJCXJldHVybiB0cnVlOworCX0KKworCXJldHVy biBmYWxzZTsKK30KKwogLyoKICAqIEhlbHBlciBmb3IgQXN5bmNSZWFkQnVmZmVycyB0aGF0IHRy aWVzIHRvIGdldCB0aGUgYnVmZmVyIHJlYWR5IGZvciBJTy4KICAqLwpAQCAtMTY3MCw3ICsxNzEw LDcgQEAgV2FpdFJlYWRCdWZmZXJzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24pCiAJ CQkgKgogCQkJICogd2UgZmlyc3QgY2hlY2sgaWYgd2UgYWxyZWFkeSBrbm93IHRoZSBJTyBpcyBj b21wbGV0ZS4KIAkJCSAqLwotCQkJaWYgKGFpb19yZXQtPnJlc3VsdC5zdGF0dXMgPT0gUEdBSU9f UlNfVU5LTk9XTiAmJgorCQkJaWYgKChvcGVyYXRpb24tPmZvcmVpZ25faW8gfHwgYWlvX3JldC0+ cmVzdWx0LnN0YXR1cyA9PSBQR0FJT19SU19VTktOT1dOKSAmJgogCQkJCSFwZ2Fpb193cmVmX2No ZWNrX2RvbmUoJm9wZXJhdGlvbi0+aW9fd3JlZikpCiAJCQl7CiAJCQkJaW5zdHJfdGltZQlpb19z dGFydCA9IHBnc3RhdF9wcmVwYXJlX2lvX3RpbWUodHJhY2tfaW9fdGltaW5nKTsKQEAgLTE2ODks MTEgKzE3MjksNjYgQEAgV2FpdFJlYWRCdWZmZXJzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVy YXRpb24pCiAJCQkJQXNzZXJ0KHBnYWlvX3dyZWZfY2hlY2tfZG9uZSgmb3BlcmF0aW9uLT5pb193 cmVmKSk7CiAJCQl9CiAKLQkJCS8qCi0JCQkgKiBXZSBub3cgYXJlIHN1cmUgdGhlIElPIGNvbXBs ZXRlZC4gQ2hlY2sgdGhlIHJlc3VsdHMuIFRoaXMKLQkJCSAqIGluY2x1ZGVzIHJlcG9ydGluZyBv biBlcnJvcnMgaWYgdGhlcmUgd2VyZSBhbnkuCi0JCQkgKi8KLQkJCVByb2Nlc3NSZWFkQnVmZmVy c1Jlc3VsdChvcGVyYXRpb24pOworCQkJaWYgKHVubGlrZWx5KG9wZXJhdGlvbi0+Zm9yZWlnbl9p bykpCisJCQl7CisJCQkJQnVmZmVyCQlidWZmZXIgPSBvcGVyYXRpb24tPmJ1ZmZlcnNbb3BlcmF0 aW9uLT5uYmxvY2tzX2RvbmVdOworCQkJCUJ1ZmZlckRlc2MgKmRlc2M7CisJCQkJdWludDMyCQli dWZfc3RhdGU7CisKKwkJCQlpZiAoQnVmZmVySXNMb2NhbChidWZmZXIpKQorCQkJCXsKKwkJCQkJ ZGVzYyA9IEdldExvY2FsQnVmZmVyRGVzY3JpcHRvcigtYnVmZmVyIC0gMSk7CisJCQkJCWJ1Zl9z dGF0ZSA9IHBnX2F0b21pY19yZWFkX3UzMigmZGVzYy0+c3RhdGUpOworCQkJCX0KKwkJCQllbHNl CisJCQkJeworCQkJCQlkZXNjID0gR2V0QnVmZmVyRGVzY3JpcHRvcihidWZmZXIgLSAxKTsKKwkJ CQkJYnVmX3N0YXRlID0gTG9ja0J1ZkhkcihkZXNjKTsKKwkJCQkJVW5sb2NrQnVmSGRyKGRlc2Mp OworCQkJCX0KKworCQkJCWlmIChidWZfc3RhdGUgJiBCTV9WQUxJRCkKKwkJCQl7CisJCQkJCW9w ZXJhdGlvbi0+bmJsb2Nrc19kb25lICs9IDE7CisJCQkJCUFzc2VydChvcGVyYXRpb24tPm5ibG9j a3NfZG9uZSA8PSBvcGVyYXRpb24tPm5ibG9ja3MpOworCisJCQkJCS8qCisJCQkJCSAqIFJlcG9y dCBhbmQgdHJhY2sgdGhpcyBhcyBhICdoaXQnIGZvciB0aGlzIGJhY2tlbmQsIGV2ZW4KKwkJCQkJ ICogdGhvdWdoIGl0IG11c3QgaGF2ZSBzdGFydGVkIG91dCBhcyBhIG1pc3MgaW4KKwkJCQkJICog UGluQnVmZmVyRm9yQmxvY2soKS4gVGhlIG90aGVyIGJhY2tlbmQgKG9yIG91cnNlbHZlcywKKwkJ CQkJICogYXMgcGFydCBvZiBhIHJlYWQgc3RhcnRlZCBlYXJsaWVyKSB3aWxsIHRyYWNrIHRoaXMg YXMgYQorCQkJCQkgKiAncmVhZCcuCisJCQkJCSAqLworCQkJCQlUUkFDRV9QT1NUR1JFU1FMX0JV RkZFUl9SRUFEX0RPTkUob3BlcmF0aW9uLT5mb3JrbnVtLAorCQkJCQkJCQkJCQkJCSAgb3BlcmF0 aW9uLT5ibG9ja251bSArIG9wZXJhdGlvbi0+bmJsb2Nrc19kb25lLAorCQkJCQkJCQkJCQkJCSAg b3BlcmF0aW9uLT5zbWdyLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3Iuc3BjT2lkLAorCQkJCQkJCQkJ CQkJCSAgb3BlcmF0aW9uLT5zbWdyLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IuZGJPaWQsCisJCQkJ CQkJCQkJCQkJICBvcGVyYXRpb24tPnNtZ3ItPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5yZWxOdW1i ZXIsCisJCQkJCQkJCQkJCQkJICBvcGVyYXRpb24tPnNtZ3ItPnNtZ3JfcmxvY2F0b3IuYmFja2Vu ZCwKKwkJCQkJCQkJCQkJCQkgIHRydWUpOworCisJCQkJCWlmIChCdWZmZXJJc0xvY2FsKGJ1ZmZl cikpCisJCQkJCQlwZ0J1ZmZlclVzYWdlLmxvY2FsX2Jsa3NfaGl0ICs9IDE7CisJCQkJCWVsc2UK KwkJCQkJCXBnQnVmZmVyVXNhZ2Uuc2hhcmVkX2Jsa3NfaGl0ICs9IDE7CisKKwkJCQkJaWYgKG9w ZXJhdGlvbi0+cmVsKQorCQkJCQkJcGdzdGF0X2NvdW50X2J1ZmZlcl9oaXQob3BlcmF0aW9uLT5y ZWwpOworCisJCQkJCXBnc3RhdF9jb3VudF9pb19vcChpb19vYmplY3QsIGlvX2NvbnRleHQsIElP T1BfSElULCAxLCAwKTsKKworCQkJCQlpZiAoVmFjdXVtQ29zdEFjdGl2ZSkKKwkJCQkJCVZhY3V1 bUNvc3RCYWxhbmNlICs9IFZhY3V1bUNvc3RQYWdlSGl0OworCQkJCX0KKwkJCX0KKwkJCWVsc2UK KwkJCXsKKwkJCQkvKgorCQkJCSAqIFdlIG5vdyBhcmUgc3VyZSB0aGUgSU8gY29tcGxldGVkLiBD aGVjayB0aGUgcmVzdWx0cy4gVGhpcworCQkJCSAqIGluY2x1ZGVzIHJlcG9ydGluZyBvbiBlcnJv cnMgaWYgdGhlcmUgd2VyZSBhbnkuCisJCQkJICovCisJCQkJUHJvY2Vzc1JlYWRCdWZmZXJzUmVz dWx0KG9wZXJhdGlvbik7CisJCQl9CiAJCX0KIAogCQkvKgpAQCAtMTc3OSw2ICsxODc0LDQzIEBA IEFzeW5jUmVhZEJ1ZmZlcnMoUmVhZEJ1ZmZlcnNPcGVyYXRpb24gKm9wZXJhdGlvbiwgaW50ICpu YmxvY2tzX3Byb2dyZXNzKQogCQlpb19vYmplY3QgPSBJT09CSkVDVF9SRUxBVElPTjsKIAl9CiAK KwkvKgorCSAqIElmIEFJTyBpcyBpbiBwcm9ncmVzcywgYmUgaXQgaW4gdGhpcyBiYWNrZW5kIG9y IGFub3RoZXIgYmFja2VuZCwgd2UKKwkgKiBqdXN0IGFzc29jaWF0ZSB0aGUgd2FpdCByZWZlcmVu Y2Ugd2l0aCB0aGUgb3BlcmF0aW9uIGFuZCB3YWl0IGluCisJICogV2FpdFJlYWRCdWZmZXJzKCku IFRoaXMgdHVybnMgb3V0IHRvIGJlIGltcG9ydGFudCBmb3IgcGVyZm9ybWFuY2UgaW4KKwkgKiB0 d28gd29ya2xvYWRzOgorCSAqCisJICogMSkgQSByZWFkIHN0cmVhbSB0aGF0IGhhcyB0byByZWFk IHRoZSBzYW1lIGJsb2NrIG11bHRpcGxlIHRpbWVzIHdpdGhpbgorCSAqIHRoZSByZWFkYWhlYWQg ZGlzdGFuY2UuIFRoaXMgY2FuIGhhcHBlbiBlLmcuIGZvciB0aGUgdGFibGUgYWNjZXNzZXMgb2YK KwkgKiBhbiBpbmRleCBzY2FuLgorCSAqCisJICogMikgQ29uY3VycmVudCBzY2FucyBieSBtdWx0 aXBsZSBiYWNrZW5kcyBvbiB0aGUgc2FtZSByZWxhdGlvbi4KKwkgKgorCSAqIElmIHdlIHdlcmUg dG8gc3luY2hyb25vdXNseSB3YWl0IGZvciB0aGUgaW4tcHJvZ3Jlc3MgSU8sIHdlJ2Qgbm90IGJl CisJICogYWJsZSB0byBrZWVwIGVub3VnaCBJL08gaW4gZmxpZ2h0LgorCSAqCisJICogSWYgd2Ug ZG8gZmluZCB0aGVyZSBpcyBvbmdvaW5nIEkvTyBmb3IgdGhlIGJ1ZmZlciwgd2Ugc2V0IHVwIGEg MS1ibG9jaworCSAqIFJlYWRCdWZmZXJzT3BlcmF0aW9uIHRoYXQgV2FpdFJlYWRCdWZmZXJzIHRo ZW4gY2FuIHdhaXQgb24uCisJICoKKwkgKiBJdCdzIHBvc3NpYmxlIHRoYXQgYW5vdGhlciBiYWNr ZW5kIHN0YXJ0cyBJTyBvbiB0aGUgYnVmZmVyIGJldHdlZW4gdGhpcworCSAqIGNoZWNrIGFuZCB0 aGUgUmVhZEJ1ZmZlcnNDYW5TdGFydElPKG5vd2FpdCA9IGZhbHNlKSBiZWxvdy4gSW4gdGhhdCBj YXNlCisJICogd2Ugd2lsbCBzeW5jaHJvbm91c2x5IHdhaXQgZm9yIHRoZSBJTyBiZWxvdywgYnV0 IHRoZSB3aW5kb3cgZm9yIHRoYXQgaXMKKwkgKiBzbWFsbCBlbm91Z2ggdGhhdCBpdCB3b24ndCBo YXBwZW4gb2Z0ZW4gZW5vdWdoIHRvIGhhdmUgYSBzaWduaWZpY2FudAorCSAqIHBlcmZvcm1hbmNl IGltcGFjdC4KKwkgKi8KKwlpZiAoUmVhZEJ1ZmZlcnNJT0FscmVhZHlJblByb2dyZXNzKG9wZXJh dGlvbiwgYnVmZmVyc1tuYmxvY2tzX2RvbmVdKSkKKwl7CisJCSpuYmxvY2tzX3Byb2dyZXNzID0g MTsKKwkJb3BlcmF0aW9uLT5mb3JlaWduX2lvID0gdHJ1ZTsKKworCQlDaGVja1JlYWRCdWZmZXJz T3BlcmF0aW9uKG9wZXJhdGlvbiwgZmFsc2UpOworCisKKwkJcmV0dXJuIHRydWU7CisJfQorCisJ b3BlcmF0aW9uLT5mb3JlaWduX2lvID0gZmFsc2U7CisKIAkvKgogCSAqIElmIHplcm9fZGFtYWdl ZF9wYWdlcyBpcyBlbmFibGVkLCBhZGQgdGhlIFJFQURfQlVGRkVSU19aRVJPX09OX0VSUk9SCiAJ ICogZmxhZy4gVGhlIHJlYXNvbiBmb3IgdGhhdCBpcyB0aGF0LCBob3BlZnVsbHksIHplcm9fZGFt YWdlZF9wYWdlcyBpc24ndApAQCAtMTgzNiw5ICsxOTY4LDkgQEAgQXN5bmNSZWFkQnVmZmVycyhS ZWFkQnVmZmVyc09wZXJhdGlvbiAqb3BlcmF0aW9uLCBpbnQgKm5ibG9ja3NfcHJvZ3Jlc3MpCiAJ LyoKIAkgKiBDaGVjayBpZiB3ZSBjYW4gc3RhcnQgSU8gb24gdGhlIGZpcnN0IHRvLWJlLXJlYWQg YnVmZmVyLgogCSAqCi0JICogSWYgYW4gSS9PIGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3MgaW4gYW5v dGhlciBiYWNrZW5kLCB3ZSB3YW50IHRvIHdhaXQKLQkgKiBmb3IgdGhlIG91dGNvbWU6IGVpdGhl ciBkb25lLCBvciBzb21ldGhpbmcgd2VudCB3cm9uZyBhbmQgd2Ugd2lsbAotCSAqIHJldHJ5Lgor CSAqIElmIGEgc3luY2hyb25vdXMgSS9PIGlzIGluIHByb2dyZXNzIGluIGFub3RoZXIgYmFja2Vu ZCAoaXQgY2FuJ3QgYmUKKwkgKiB0aGlzIGJhY2tlbmQpLCB3ZSB3YW50IHRvIHdhaXQgZm9yIHRo ZSBvdXRjb21lOiBlaXRoZXIgZG9uZSwgb3IKKwkgKiBzb21ldGhpbmcgd2VudCB3cm9uZyBhbmQg d2Ugd2lsbCByZXRyeS4KIAkgKi8KIAlpZiAoIVJlYWRCdWZmZXJzQ2FuU3RhcnRJTyhidWZmZXJz W25ibG9ja3NfZG9uZV0sIGZhbHNlKSkKIAl7Ci0tIAoyLjUxLjAKCg== --000000000000d00bb30644d9d645 Content-Type: application/octet-stream; name="v1-0002-Add-prefetching-to-index-scans-using-batch-interf.patch" Content-Disposition: attachment; filename="v1-0002-Add-prefetching-to-index-scans-using-batch-interf.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mimg736u3 RnJvbSA2YWEwODVhNWJlOTg0NzA1OWY4ODc5YTkyYjY3OTk4OTBkOWUxZjc2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFNh dCwgMTUgTm92IDIwMjUgMTQ6MDM6NTggLTA1MDAKU3ViamVjdDogW1BBVENIIHYxIDIvNF0gQWRk IHByZWZldGNoaW5nIHRvIGluZGV4IHNjYW5zIHVzaW5nIGJhdGNoIGludGVyZmFjZXMuCgpUaGlz IGNvbW1pdCBpbXBsZW1lbnRzIEkvTyBwcmVmZXRjaGluZyBmb3IgaW5kZXggc2NhbnMsIG1hZGUg cG9zc2libGUgYnkKdGhlIHJlY2VudCBhZGRpdGlvbiBvZiBiYXRjaGluZyBpbnRlcmZhY2VzIHRv IGJvdGggdGhlIHRhYmxlIEFNIGFuZAppbmRleCBBTSBBUElzLgoKVGhlIGFtZ2V0YmF0Y2ggaW5k ZXggQU0gaW50ZXJmYWNlIHByb3ZpZGVzIGJhdGNoZXMgb2YgVElEcyAocmF0aGVyIHRoYW4Kb25l IGF0IGEgdGltZSkgZnJvbSBhIHNpbmdsZSBpbmRleCBsZWFmIHBhZ2UsIGFuZCBhbGxvd3MgbXVs dGlwbGUKYmF0Y2hlcyB0byBiZSBoZWxkIGluIG1lbW9yeS9waW5uZWQgc2ltdWx0YW5lb3VzbHku ICBUaGlzIGdpdmVzIHRoZQp0YWJsZSBBTSB0aGUgZnJlZWRvbSB0byByZWFkYWhlYWQgd2l0aGlu IGFuIGluZGV4IHNjYW4sIHdoaWNoIGlzIGNydWNpYWwKZm9yIEkvTyBwcmVmZXRjaGluZyB3aXRo IGNlcnRhaW4gd29ya2xvYWRzICh3b3JrbG9hZHMgdGhhdCB3b3VsZApvdGhlcndpc2UgYmUgdW5h YmxlIHRvIGtlZXAgYSBzdWZmaWNpZW50bHkgaGlnaCBwcmVmZXRjaCBkaXN0YW5jZSBmb3IKaGVh cCBibG9jayBJL08pLiAgUHJlZmV0Y2hpbmcgaXMgaW1wbGVtZW50ZWQgdXNpbmcgYSByZWFkIHN0 cmVhbSB1bmRlcgp0aGUgY29udHJvbCBvZiB0aGUgdGFibGUgQU0uCgpYWFggV2hlbiB0aGUgYmF0 Y2ggcXVldWUgcmVhY2hlcyBjYXBhY2l0eSwgdGhlIHN0cmVhbSBwYXVzZXMgdW50aWwKdGhlIHNj YW4gY2F0Y2hlcyB1cCBhbmQgZnJlZXMgc29tZSBiYXRjaGVzLiAgV2UgbmVlZCBhIG1vcmUgcHJp bmNpcGxlZAphcHByb2FjaCBoZXJlLiAgRXNzZW50aWFsbHksIHdlIG5lZWQgaW5mcmFzdHJ1Y3R1 cmUgdGhhdCBhbGxvd3MgYSByZWFkCnN0cmVhbSBjYWxsIGJhY2sgdG8gdGVsbCB0aGUgcmVhZCBz dHJlYW0gdG8gImJhY2sgb2ZmIiB3aXRob3V0IGl0IGZ1bGx5CmVuZGluZy9yZXNldHRpbmcgdGhl IHJlYWQgc3RyZWFtLgoKTm90ZTogRm9yIG5vdyBwcmVmZXRjaGluZyBpcyB0ZW1wb3JhcmlseSBk aXNhYmxlZCBkdXJpbmcgaW5kZXgtb25seQpzY2FucywgcGVuZGluZyB0aGUgcmVpbnRyb2R1Y3Rp b24gb2YgdmlzaWJpbGl0eSBtYXAgY2FjaGluZyBpbiBiYXRjaGVzLgpQcmV2aW91cyB2ZXJzaW9u cyBvZiB0aGUgcGF0Y2ggc2VyaWVzIGhhZCB0aGF0LCBidXQgaXQgd2FzIHJlbW92ZWQgd2hlbgp3 ZSBtb3ZlZCBvdmVyIHRvIHRoZSBuZXcgdGFibGUgQU0gaW50ZXJmYWNlLgoKQXV0aG9yOiBUb21h cyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4KQXV0aG9yOiBQZXRlciBHZW9naGVnYW4gPHBnQGJv d3QuaWU+ClJldmlld2VkLUJ5OiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+ClJl dmlld2VkLUJ5OiBUaG9tYXMgTXVucm8gPHRob21hcy5tdW5yb0BnbWFpbC5jb20+CkRpc2N1c3Np b246IGh0dHBzOi8vcG9zdGdyLmVzL20vY2Y4NWY0NmYtYjAyZi0wNWIyLTUyNDgtNTAwMGI4OTRl YmFiQGVudGVycHJpc2VkYi5jb20KLS0tCiBzcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmggICAg ICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaCAgICAg ICAgICAgICAgICAgIHwgIDMyICstCiBzcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oICAgICAg ICAgICAgICAgICAgfCAgMTUgKwogc3JjL2luY2x1ZGUvb3B0aW1pemVyL2Nvc3QuaCAgICAgICAg ICAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVy LmMgICAgICB8IDMyNSArKysrKysrKysrKysrKysrKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9pbmRl eC9pbmRleGFtLmMgICAgICAgICAgICB8ICAxMCArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4 L2luZGV4YmF0Y2guYyAgICAgICAgIHwgIDQ2ICsrLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3Bh dGgvY29zdHNpemUuYyAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3Jl YWRfc3RyZWFtLmMgICAgICAgICB8ICAxNCArLQogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNf cGFyYW1ldGVycy5kYXQgICAgIHwgICA3ICsKIHNyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdy ZXNxbC5jb25mLnNhbXBsZSB8ICAgMSArCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5c3Zp ZXdzLm91dCAgICAgICAgfCAgIDMgKy0KIDEyIGZpbGVzIGNoYW5nZWQsIDQzNSBpbnNlcnRpb25z KCspLCAyMSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVh cGFtLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKaW5kZXggZThkMzQ3ZTQ3Li4yY2M4 MTczNjAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaAorKysgYi9zcmMv aW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKQEAgLTExNyw2ICsxMTcsNyBAQCB0eXBlZGVmIHN0cnVj dCBJbmRleEZldGNoSGVhcERhdGEKIAlJbmRleEZldGNoVGFibGVEYXRhIHhzX2Jhc2U7CS8qIEFN IGluZGVwZW5kZW50IHBhcnQgb2YgdGhlIGRlc2NyaXB0b3IgKi8KIAogCUJ1ZmZlcgkJeHNfY2J1 ZjsJCS8qIGN1cnJlbnQgaGVhcCBidWZmZXIgaW4gc2NhbiwgaWYgYW55ICovCisJQmxvY2tOdW1i ZXIgeHNfYmxrOwkJCS8qIHhzX2NidWYncyBibG9jayBudW1iZXIsIGlmIGFueSAqLwogCS8qIE5C OiBpZiB4c19jYnVmIGlzIG5vdCBJbnZhbGlkQnVmZmVyLCB3ZSBob2xkIGEgcGluIG9uIHRoYXQg YnVmZmVyICovCiAKIAlCdWZmZXIJCXZtYnVmOwkJCS8qIHZpc2liaWxpdHkgbWFwIGJ1ZmZlciAq LwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaCBiL3NyYy9pbmNsdWRl L2FjY2Vzcy9yZWxzY2FuLmgKaW5kZXggOTEzOWYyOGY4Li42NzgyODE2M2YgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3Jl bHNjYW4uaApAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgIm5vZGVzL3RpZGJpdG1hcC5oIgog I2luY2x1ZGUgInBvcnQvYXRvbWljcy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmLmgiCisjaW5j bHVkZSAic3RvcmFnZS9yZWFkX3N0cmVhbS5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcmVsZmlsZWxv Y2F0b3IuaCIKICNpbmNsdWRlICJzdG9yYWdlL3NwaW4uaCIKICNpbmNsdWRlICJ1dGlscy9yZWxj YWNoZS5oIgpAQCAtMTI0LDYgKzEyNSw3IEBAIHR5cGVkZWYgc3RydWN0IFBhcmFsbGVsQmxvY2tU YWJsZVNjYW5Xb3JrZXJEYXRhICpQYXJhbGxlbEJsb2NrVGFibGVTY2FuV29ya2VyOwogdHlwZWRl ZiBzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YQogewogCVJlbGF0aW9uCXJlbDsKKwlSZWFkU3Ry ZWFtICpyczsKIAogCWludAkJCW5oZWFwYWNjZXNzZXM7CS8qIG51bWJlciBvZiBoZWFwIGFjY2Vz c2VzLCBmb3IKIAkJCQkJCQkJICogaW5zdHJ1bWVudGF0aW9uL21ldHJpY3MgKi8KQEAgLTIyNCw4 ICsyMjYsMTQgQEAgdHlwZWRlZiBzdHJ1Y3QgQmF0Y2hJbmRleFNjYW5EYXRhICpCYXRjaEluZGV4 U2NhbjsKICAqIE1heGltdW0gbnVtYmVyIG9mIGJhdGNoZXMgKGxlYWYgcGFnZXMpIHdlIGNhbiBr ZWVwIGluIG1lbW9yeS4gIFdlIG5lZWQgYQogICogbWluaW11bSBvZiB0d28sIHNpbmNlIHdlJ2xs IG9ubHkgY29uc2lkZXIgcmVsZWFzaW5nIG9uZSBiYXRjaCB3aGVuIGFub3RoZXIKICAqIGlzIHJl YWQuCisgKgorICogVGhlIGNob2ljZSBvZiA2NCBiYXRjaGVzIGlzIGFyYml0cmFyeS4gIEl0J3Mg YWJvdXQgMU1CIG9mIGRhdGEgd2l0aCA4S0IKKyAqIHBhZ2VzICg1MTJrQiBmb3IgcGFnZXMsIGFu ZCB0aGVuIGEgYml0IG9mIG92ZXJoZWFkKS4gV2Ugc2hvdWxkIG5vdCByZWFsbHkKKyAqIG5lZWQg dGhpcyBtYW55IGJhdGNoZXMgaW4gbW9zdCBjYXNlcywgdGhvdWdoLiBUaGUgcmVhZCBzdHJlYW0g bG9va3MgYWhlYWQKKyAqIGp1c3QgZW5vdWdoIHRvIHF1ZXVlIGVub3VnaCBJT3MsIGFkanVzdGlu ZyB0aGUgZGlzdGFuY2UgKFRJRHMsIGJ1dAorICogdWx0aW1hdGVseSB0aGUgbnVtYmVyIG9mIGZ1 dHVyZSBiYXRjaGVzKSB0byBtZWV0IHRoYXQuCiAgKi8KLSNkZWZpbmUgSU5ERVhfU0NBTl9NQVhf QkFUQ0hFUwkJMgorI2RlZmluZSBJTkRFWF9TQ0FOX01BWF9CQVRDSEVTCQk2NAogI2RlZmluZSBJ TkRFWF9TQ0FOX0NBQ0hFX0JBVENIRVMJMgogI2RlZmluZSBJTkRFWF9TQ0FOX0JBVENIX0NPVU5U KHNjYW4pIFwKIAkoKHNjYW4pLT5iYXRjaHF1ZXVlLT5uZXh0QmF0Y2ggLSAoc2NhbiktPmJhdGNo cXVldWUtPmhlYWRCYXRjaCkKQEAgLTI3MCw2ICsyNzgsMjcgQEAgdHlwZWRlZiBzdHJ1Y3QgQmF0 Y2hRdWV1ZQogCSAqIGl0J3Mgb3Zlci4KIAkgKi8KIAlib29sCQlmaW5pc2hlZDsKKwlib29sCQly ZXNldDsKKworCS8qCisJICogRGlkIHdlIGRpc2FibGUgcHJlZmV0Y2hpbmcvdXNlIG9mIGEgcmVh ZCBzdHJlYW0gYmVjYXVzZSBpdCBkaWRuJ3QgcGF5CisJICogZm9yIGl0c2VsZj8KKwkgKi8KKwli b29sCQlwcmVmZXRjaGluZ0xvY2tlZEluOworCWJvb2wJCWRpc2FibGVkOworCisJLyoKKwkgKiBE dXJpbmcgcHJlZmV0Y2hpbmcsIGN1cnJlbnRQcmVmZXRjaEJsb2NrIGlzIHRoZSB0YWJsZSBBTSBi bG9jayBudW1iZXIKKwkgKiB0aGF0IHdhcyByZXR1cm5lZCBieSBvdXIgcmVhZCBzdHJlYW0gY2Fs bGJhY2sgbW9zdCByZWNlbnRseS4gIFVzZWQgdG8KKwkgKiBzdXBwcmVzcyBkdXBsaWNhdGUgc3Vj Y2Vzc2l2ZSByZWFkIHN0cmVhbSBibG9jayByZXF1ZXN0cy4KKwkgKgorCSAqIFByZWZldGNoaW5n IGNhbiBzdGlsbCBwZXJmb3JtIG5vbi1zdWNjZXNzaXZlIHJlcXVlc3RzIGZvciB0aGUgc2FtZQor CSAqIGJsb2NrIG51bWJlciAoaW4gZ2VuZXJhbCB3ZSdyZSBwcmVmZXRjaGluZyBpbiBleGFjdGx5 IHRoZSBzYW1lIG9yZGVyCisJICogdGhhdCB0aGUgc2NhbiB3aWxsIHJldHVybiB0YWJsZSBBTSBU SURzIGluKS4gIFdlIG5lZWQgdG8gYXZvaWQKKwkgKiBkdXBsaWNhdGUgc3VjY2Vzc2l2ZSByZXF1 ZXN0cyBiZWNhdXNlIHRhYmxlIEFNcyBleHBlY3QgdG8gYmUgYWJsZSB0bworCSAqIGhhbmcgb24g dG8gYnVmZmVyIHBpbnMgYWNyb3NzIHRhYmxlX2luZGV4X2ZldGNoX3R1cGxlIGNhbGxzLgorCSAq LworCUJsb2NrTnVtYmVyIGN1cnJlbnRQcmVmZXRjaEJsb2NrOwogCiAJLyogQ3VycmVudCBzY2Fu IGRpcmVjdGlvbiwgZm9yIHRoZSBjdXJyZW50bHkgbG9hZGVkIGJhdGNoZXMgKi8KIAlTY2FuRGly ZWN0aW9uIGRpcmVjdGlvbjsKQEAgLTI3Nyw2ICszMDYsNyBAQCB0eXBlZGVmIHN0cnVjdCBCYXRj aFF1ZXVlCiAJLyogY3VycmVudCBwb3NpdGlvbnMgaW4gYmF0Y2hlc1tdIGZvciBzY2FuICovCiAJ QmF0Y2hRdWV1ZUl0ZW1Qb3MgcmVhZFBvczsJLyogcmVhZCBwb3NpdGlvbiAqLwogCUJhdGNoUXVl dWVJdGVtUG9zIG1hcmtQb3M7CS8qIG1hcmsvcmVzdG9yZSBwb3NpdGlvbiAqLworCUJhdGNoUXVl dWVJdGVtUG9zIHN0cmVhbVBvczsJLyogc3RyZWFtIHBvc2l0aW9uIChmb3IgcHJlZmV0Y2hpbmcp ICovCiAKIAlCYXRjaEluZGV4U2NhbiBtYXJrQmF0Y2g7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL2FjY2Vzcy90YWJsZWFtLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oCmluZGV4 IDNlOThkODUzNy4uYzNlNTgwMTJmIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFi bGVhbS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgKQEAgLTQ1NCw2ICs0NTQs MjEgQEAgdHlwZWRlZiBzdHJ1Y3QgVGFibGVBbVJvdXRpbmUKIAkJCQkJCQkJCSAgIFNjYW5EaXJl Y3Rpb24gZGlyZWN0aW9uLAogCQkJCQkJCQkJICAgVHVwbGVUYWJsZVNsb3QgKnNsb3QpOwogCisJ LyoKKwkgKiBSZWFkIHN0cmVhbSBjYWxsYmFjaywgdXNlZCB0byBwZXJmb3JtIEkvTyBwcmVmZXRj aGluZyBvZiB0YWJsZSBBTSBwYWdlcworCSAqIGR1cmluZyBgaW5kZXhfZ2V0bmV4dF9zbG90YCBp bmRleCBzY2Fucy4KKwkgKgorCSAqIFRoaXMgY2FsbGJhY2sgaXMgZGlyZWN0bHkgcGFzc2VkIHRv IHJlYWRfc3RyZWFtX2JlZ2luX3JlbGF0aW9uLCBmcm9tCisJICogYmF0Y2hfZ2V0bmV4dCByb3V0 aW5lLiAgSXQgd2lsbCBvbmx5IGJlIHVzZWQgZHVyaW5nIHNjYW5zIHdob3NlIGluZGV4CisJICog QU0gdXNlcyB0aGUgYW1nZXRiYXRjaCBpbnRlcmZhY2UuICAoU2NhbnMgd2l0aCBhbWdldHR1cGxl LWJhc2VkIGluZGV4CisJICogQU1zIGNhbm5vdCByZWFzb25hYmx5IGJlIHVzZWQgZm9yIEkvTyBw cmVmZXRjaGluZywgc2luY2UgaXRzIG9wYXF1ZQorCSAqIHR1cGxlLWF0LWEtdGltZSBpbnRlcmZh Y2UgbWFrZXMgaXQgaW1wb3NzaWJsZSB0byBzY2hlZHVsZSBpbmRleCBzY2FuCisJICogd29yayBz ZW5zaWJseS4pCisJICovCisJQmxvY2tOdW1iZXIgKCppbmRleF9nZXRuZXh0X3N0cmVhbSkgKFJl YWRTdHJlYW0gKnN0cmVhbSwKKwkJCQkJCQkJCQkgdm9pZCAqY2FsbGJhY2tfcHJpdmF0ZV9kYXRh LAorCQkJCQkJCQkJCSB2b2lkICpwZXJfYnVmZmVyX2RhdGEpOworCiAJLyoKIAkgKiBGZXRjaCB0 dXBsZSBhdCBgdGlkYCBpbnRvIGBzbG90YCwgYWZ0ZXIgZG9pbmcgYSB2aXNpYmlsaXR5IHRlc3QK IAkgKiBhY2NvcmRpbmcgdG8gYHNuYXBzaG90YC4gSWYgYSB0dXBsZSB3YXMgZm91bmQgYW5kIHBh c3NlZCB0aGUgdmlzaWJpbGl0eQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL2Nv c3QuaCBiL3NyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmgKaW5kZXggYjUyM2JjZGE4Li4wMGY0 YzNkMDAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmgKKysrIGIvc3Jj L2luY2x1ZGUvb3B0aW1pemVyL2Nvc3QuaApAQCAtNTEsNiArNTEsNyBAQCBleHRlcm4gUEdETExJ TVBPUlQgQ29zdCBkaXNhYmxlX2Nvc3Q7CiBleHRlcm4gUEdETExJTVBPUlQgaW50IG1heF9wYXJh bGxlbF93b3JrZXJzX3Blcl9nYXRoZXI7CiBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVf c2Vxc2NhbjsKIGV4dGVybiBQR0RMTElNUE9SVCBib29sIGVuYWJsZV9pbmRleHNjYW47CitleHRl cm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVfaW5kZXhzY2FuX3ByZWZldGNoOwogZXh0ZXJuIFBH RExMSU1QT1JUIGJvb2wgZW5hYmxlX2luZGV4b25seXNjYW47CiBleHRlcm4gUEdETExJTVBPUlQg Ym9vbCBlbmFibGVfYml0bWFwc2NhbjsKIGV4dGVybiBQR0RMTElNUE9SVCBib29sIGVuYWJsZV90 aWRzY2FuOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRs ZXIuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKaW5kZXggY2Vi NDAxNWVhLi5lMGQ5NDY4YWIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hl YXBhbV9oYW5kbGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRs ZXIuYwpAQCAtNTksNiArNTksOSBAQCBzdGF0aWMgQmxvY2tOdW1iZXIgaGVhcGFtX3NjYW5fZ2V0 X2Jsb2Nrc19kb25lKEhlYXBTY2FuRGVzYyBoc2Nhbik7CiBzdGF0aWMgYm9vbCBCaXRtYXBIZWFw U2Nhbk5leHRCbG9jayhUYWJsZVNjYW5EZXNjIHNjYW4sCiAJCQkJCQkJCQlib29sICpyZWNoZWNr LAogCQkJCQkJCQkJdWludDY0ICpsb3NzeV9wYWdlcywgdWludDY0ICpleGFjdF9wYWdlcyk7Citz dGF0aWMgQmxvY2tOdW1iZXIgaGVhcGFtX2dldG5leHRfc3RyZWFtKFJlYWRTdHJlYW0gKnN0cmVh bSwKKwkJCQkJCQkJCQkgdm9pZCAqY2FsbGJhY2tfcHJpdmF0ZV9kYXRhLAorCQkJCQkJCQkJCSB2 b2lkICpwZXJfYnVmZmVyX2RhdGEpOwogCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTExLDEw ICsxMTQsMTIgQEAgaGVhcGFtX2luZGV4X2ZldGNoX2JlZ2luKFJlbGF0aW9uIHJlbCwgVHVwbGVU YWJsZVNsb3QgKmlvc190YWJsZXNsb3QpCiAJSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiA9IHBh bGxvYyhzaXplb2YoSW5kZXhGZXRjaEhlYXBEYXRhKSk7CiAKIAloc2Nhbi0+eHNfYmFzZS5yZWwg PSByZWw7CisJaHNjYW4tPnhzX2Jhc2UucnMgPSBOVUxMOwogCWhzY2FuLT54c19iYXNlLm5oZWFw YWNjZXNzZXMgPSAwOwogCiAJLyogaGVhcGFtIHNwZWNpZmljIGZpZWxkcyAqLwogCWhzY2FuLT54 c19jYnVmID0gSW52YWxpZEJ1ZmZlcjsKKwloc2Nhbi0+eHNfYmxrID0gSW52YWxpZEJsb2NrTnVt YmVyOwogCWhzY2FuLT52bWJ1ZiA9IEludmFsaWRCdWZmZXI7CiAJaHNjYW4tPmlvc190YWJsZXNs b3QgPSBpb3NfdGFibGVzbG90OwogCkBAIC0xMjYsMTEgKzEzMSwxNSBAQCBoZWFwYW1faW5kZXhf ZmV0Y2hfcmVzZXQoSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbikKIHsKIAlJbmRleEZldGNoSGVh cERhdGEgKmhzY2FuID0gKEluZGV4RmV0Y2hIZWFwRGF0YSAqKSBzY2FuOwogCisJaWYgKHNjYW4t PnJzKQorCQlyZWFkX3N0cmVhbV9yZXNldChzY2FuLT5ycyk7CisKIAkvKiBkZWxpYmVyYXRlbHkg ZG9uJ3QgZHJvcCBWTSBidWZmZXIgcGluIGhlcmUgKi8KIAlpZiAoQnVmZmVySXNWYWxpZChoc2Nh bi0+eHNfY2J1ZikpCiAJewogCQlSZWxlYXNlQnVmZmVyKGhzY2FuLT54c19jYnVmKTsKIAkJaHNj YW4tPnhzX2NidWYgPSBJbnZhbGlkQnVmZmVyOworCQloc2Nhbi0+eHNfYmxrID0gSW52YWxpZEJs b2NrTnVtYmVyOwogCX0KIH0KIApAQCAtMTQxLDYgKzE1MCw5IEBAIGhlYXBhbV9pbmRleF9mZXRj aF9lbmQoSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbikKIAogCWhlYXBhbV9pbmRleF9mZXRjaF9y ZXNldChzY2FuKTsKIAorCWlmIChzY2FuLT5ycykKKwkJcmVhZF9zdHJlYW1fZW5kKHNjYW4tPnJz KTsKKwogCWlmIChoc2Nhbi0+dm1idWYgIT0gSW52YWxpZEJ1ZmZlcikKIAl7CiAJCVJlbGVhc2VC dWZmZXIoaHNjYW4tPnZtYnVmKTsKQEAgLTE2MywyMyArMTc1LDM3IEBAIGhlYXBhbV9pbmRleF9m ZXRjaF90dXBsZShzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbiwKIAogCUFzc2VydChU VFNfSVNfQlVGRkVSVFVQTEUoc2xvdCkpOwogCi0JLyogV2UgY2FuIHNraXAgdGhlIGJ1ZmZlci1z d2l0Y2hpbmcgbG9naWMgaWYgd2UncmUgaW4gbWlkLUhPVCBjaGFpbi4gKi8KLQlpZiAoISpjYWxs X2FnYWluKQorCS8qCisJICogU3dpdGNoIHRvIGNvcnJlY3QgYnVmZmVyIGlmIHdlIGRvbid0IGhh dmUgaXQgYWxyZWFkeSAod2UgY2FuIHNraXAgdGhpcworCSAqIGlmIHdlJ3JlIGluIG1pZC1IT1Qg Y2hhaW4pCisJICovCisJaWYgKCEqY2FsbF9hZ2FpbiAmJiBoc2Nhbi0+eHNfYmxrICE9IEl0ZW1Q b2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKSkKIAl7Ci0JCS8qIFN3aXRjaCB0byBjb3JyZWN0IGJ1 ZmZlciBpZiB3ZSBkb24ndCBoYXZlIGl0IGFscmVhZHkgKi8KLQkJQnVmZmVyCQlwcmV2X2J1ZiA9 IGhzY2FuLT54c19jYnVmOworCQkvKiBSZW1lbWJlciB0aGlzIGJ1ZmZlcidzIGJsb2NrIG51bWJl ciBmb3IgbmV4dCB0aW1lICovCisJCWhzY2FuLT54c19ibGsgPSBJdGVtUG9pbnRlckdldEJsb2Nr TnVtYmVyKHRpZCk7CiAKLQkJaHNjYW4tPnhzX2NidWYgPSBSZWxlYXNlQW5kUmVhZEJ1ZmZlciho c2Nhbi0+eHNfY2J1ZiwKLQkJCQkJCQkJCQkJICBoc2Nhbi0+eHNfYmFzZS5yZWwsCi0JCQkJCQkJ CQkJCSAgSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcih0aWQpKTsKKwkJaWYgKEJ1ZmZlcklzVmFs aWQoaHNjYW4tPnhzX2NidWYpKQorCQkJUmVsZWFzZUJ1ZmZlcihoc2Nhbi0+eHNfY2J1Zik7CiAK IAkJLyoKLQkJICogUHJ1bmUgcGFnZSwgYnV0IG9ubHkgaWYgd2Ugd2VyZW4ndCBhbHJlYWR5IG9u IHRoaXMgcGFnZQorCQkgKiBXaGVuIHVzaW5nIGEgcmVhZCBzdHJlYW0sIHRoZSBzdHJlYW0gd2ls bCBhbHJlYWR5IGtub3cgd2hpY2ggYmxvY2sKKwkJICogbnVtYmVyIGNvbWVzIG5leHQgKHRob3Vn aCBhbiBhc3NlcnRpb24gd2lsbCB2ZXJpZnkgYSBtYXRjaCBiZWxvdykKIAkJICovCi0JCWlmIChw cmV2X2J1ZiAhPSBoc2Nhbi0+eHNfY2J1ZikKLQkJCWhlYXBfcGFnZV9wcnVuZV9vcHQoaHNjYW4t PnhzX2Jhc2UucmVsLCBoc2Nhbi0+eHNfY2J1Zik7CisJCWlmIChzY2FuLT5ycykKKwkJCWhzY2Fu LT54c19jYnVmID0gcmVhZF9zdHJlYW1fbmV4dF9idWZmZXIoc2Nhbi0+cnMsIE5VTEwpOworCQll bHNlCisJCQloc2Nhbi0+eHNfY2J1ZiA9IFJlYWRCdWZmZXIoaHNjYW4tPnhzX2Jhc2UucmVsLCBo c2Nhbi0+eHNfYmxrKTsKKworCQkvKgorCQkgKiBQcnVuZSBwYWdlIHdoZW4gaXQgaXMgcGlubmVk IGZvciB0aGUgZmlyc3QgdGltZQorCQkgKi8KKwkJaGVhcF9wYWdlX3BydW5lX29wdChoc2Nhbi0+ eHNfYmFzZS5yZWwsIGhzY2FuLT54c19jYnVmKTsKIAl9CiAKKwkvKiBBc3NlcnQgdGhhdCB0aGUg VElEJ3MgYmxvY2sgbnVtYmVyJ3MgYnVmZmVyIGlzIG5vdyBwaW5uZWQgKi8KKwlBc3NlcnQoQnVm ZmVySXNWYWxpZChoc2Nhbi0+eHNfY2J1ZikpOworCUFzc2VydChCdWZmZXJHZXRCbG9ja051bWJl cihoc2Nhbi0+eHNfY2J1ZikgPT0gaHNjYW4tPnhzX2Jsayk7CisKIAkvKiBPYnRhaW4gc2hhcmUt bG9jayBvbiB0aGUgYnVmZmVyIHNvIHdlIGNhbiBleGFtaW5lIHZpc2liaWxpdHkgKi8KIAlMb2Nr QnVmZmVyKGhzY2FuLT54c19jYnVmLCBCVUZGRVJfTE9DS19TSEFSRSk7CiAJZ290X2hlYXBfdHVw bGUgPSBoZWFwX2hvdF9zZWFyY2hfYnVmZmVyKHRpZCwKQEAgLTM5NSwxMyArNDIxLDI0IEBAIGhl YXBhbV9iYXRjaF9nZXRuZXh0X3RpZChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24g ZGlyZWN0aW9uKQogCS8qIEluaXRpYWxpemUgZGlyZWN0aW9uIG9uIGZpcnN0IGNhbGwgKi8KIAlp ZiAoYmF0Y2hxdWV1ZS0+ZGlyZWN0aW9uID09IE5vTW92ZW1lbnRTY2FuRGlyZWN0aW9uKQogCQli YXRjaHF1ZXVlLT5kaXJlY3Rpb24gPSBkaXJlY3Rpb247CisJZWxzZSBpZiAodW5saWtlbHkoYmF0 Y2hxdWV1ZS0+ZGlzYWJsZWQgJiYgc2Nhbi0+eHNfaGVhcGZldGNoLT5ycykpCisJeworCQkvKgor CQkgKiBIYW5kbGUgY2FuY2VsbGluZyB0aGUgdXNlIG9mIHRoZSByZWFkIHN0cmVhbSBmb3IgcHJl ZmV0Y2hpbmcKKwkJICovCisJCWJhdGNoX3Jlc2V0X3BvcygmYmF0Y2hxdWV1ZS0+c3RyZWFtUG9z KTsKKworCQlyZWFkX3N0cmVhbV9yZXNldChzY2FuLT54c19oZWFwZmV0Y2gtPnJzKTsKKwkJc2Nh bi0+eHNfaGVhcGZldGNoLT5ycyA9IE5VTEw7CisJfQogCWVsc2UgaWYgKHVubGlrZWx5KGJhdGNo cXVldWUtPmRpcmVjdGlvbiAhPSBkaXJlY3Rpb24pKQogCXsKIAkJLyoKIAkJICogSGFuZGxlIGEg Y2hhbmdlIGluIHRoZSBzY2FuJ3MgZGlyZWN0aW9uLgogCQkgKgogCQkgKiBSZWxlYXNlIGZ1dHVy ZSBiYXRjaGVzIHByb3Blcmx5LCB0byBtYWtlIGl0IGxvb2sgbGlrZSB0aGUgY3VycmVudAotCQkg KiBiYXRjaCBpcyB0aGUgb25seSBvbmUgd2UgbG9hZGVkLgorCQkgKiBiYXRjaCBpcyB0aGUgb25s eSBvbmUgd2UgbG9hZGVkLiBBbHNvIHJlc2V0IHRoZSBzdHJlYW0gcG9zaXRpb24sIGFzCisJCSAq IGlmIHdlIGFyZSBqdXN0IHN0YXJ0aW5nIHRoZSBzY2FuLgogCQkgKi8KIAkJd2hpbGUgKGJhdGNo cXVldWUtPm5leHRCYXRjaCA+IGJhdGNocXVldWUtPmhlYWRCYXRjaCArIDEpCiAJCXsKQEAgLTQx NiwxMCArNDUzLDE2IEBAIGhlYXBhbV9iYXRjaF9nZXRuZXh0X3RpZChJbmRleFNjYW5EZXNjIHNj YW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uKQogCQkvKgogCQkgKiBSZW1lbWJlciB0aGUgbmV3 IGRpcmVjdGlvbiwgYW5kIG1ha2Ugc3VyZSB0aGUgc2NhbiBpcyBub3QgbWFya2VkIGFzCiAJCSAq ICJmaW5pc2hlZCIgKHdlIG1pZ2h0IGhhdmUgYWxyZWFkeSByZWFkIHRoZSBsYXN0IGJhdGNoLCBi dXQgbm93IHdlCi0JCSAqIG5lZWQgdG8gc3RhcnQgb3ZlcikuCisJCSAqIG5lZWQgdG8gc3RhcnQg b3ZlcikuIERvIHRoaXMgYmVmb3JlIHJlc2V0dGluZyB0aGUgc3RyZWFtIC0gaXQKKwkJICogc2hv dWxkIG5vdCBpbnZva2UgdGhlIGNhbGxiYWNrIHVudGlsIHRoZSBmaXJzdCByZWFkLCBidXQgaXQg bWF5CisJCSAqIHNlZW0gYSBiaXQgY29uZnVzaW5nIG90aGVyd2lzZS4KIAkJICovCiAJCWJhdGNo cXVldWUtPmRpcmVjdGlvbiA9IGRpcmVjdGlvbjsKIAkJYmF0Y2hxdWV1ZS0+ZmluaXNoZWQgPSBm YWxzZTsKKwkJYmF0Y2hfcmVzZXRfcG9zKCZiYXRjaHF1ZXVlLT5zdHJlYW1Qb3MpOworCisJCWlm IChzY2FuLT54c19oZWFwZmV0Y2gtPnJzKQorCQkJcmVhZF9zdHJlYW1fcmVzZXQoc2Nhbi0+eHNf aGVhcGZldGNoLT5ycyk7CiAJfQogCiAJLyogc2hvcnRjdXQgZm9yIHRoZSByZWFkIHBvc2l0aW9u LCBmb3IgY29udmVuaWVuY2UgKi8KQEAgLTQ2MSw2ICs1MDQsMzcgQEAgaGVhcGFtX2JhdGNoX2dl dG5leHRfdGlkKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pCiAJ CQkJQmF0Y2hJbmRleFNjYW4gaGVhZEJhdGNoID0gSU5ERVhfU0NBTl9CQVRDSChzY2FuLAogCQkJ CQkJCQkJCQkJCQkJYmF0Y2hxdWV1ZS0+aGVhZEJhdGNoKTsKIAorCQkJCS8qCisJCQkJICogWFhY IFdoZW4gYWR2YW5jaW5nIHJlYWRQb3MsIHRoZSBzdHJlYW1Qb3MgbWF5IGdldCBiZWhpbmQgYXMK KwkJCQkgKiB3ZSdyZSBvbmx5IGFkdmFuY2luZyBpdCB3aGVuIGFjdHVhbGx5IHJlcXVlc3Rpbmcg aGVhcAorCQkJCSAqIGJsb2Nrcy4gQnV0IHdlIG1heSBub3QgZG8gdGhhdCBvZnRlbiBlbm91Z2gg LSBlLmcuIElPUyBtYXkKKwkJCQkgKiBub3QgbmVlZCB0byBhY2Nlc3MgYWxsLXZpc2libGUgaGVh cCBibG9ja3MsIHNvIHRoZQorCQkJCSAqIHJlYWRfbmV4dCBjYWxsYmFjayBkb2VzIG5vdCBnZXQg aW52b2tlZCBmb3IgYSBsb25nIHRpbWUuCisJCQkJICogSXQncyBwb3NzaWJsZSB0aGUgc3RyZWFt IGdldHMgc28gZmFyIGJlaGluZCB0aGUgcG9zaXRpb24KKwkJCQkgKiB0aGF0IGlzIGJlY29tZXMg aW52YWxpZCwgYXMgd2UgYWxyZWFkeSByZW1vdmVkIHRoZSBiYXRjaC4KKwkJCQkgKiBCdXQgdGhh dCBtZWFucyB3ZSBkb24ndCBuZWVkIGFueSBoZWFwIGJsb2NrcyB1bnRpbCB0aGUKKwkJCQkgKiBj dXJyZW50IHJlYWQgcG9zaXRpb24gLS0gaWYgd2UgZGlkLCB3ZSB3b3VsZCBub3QgYmUgaW4gdGhp cworCQkJCSAqIHNpdHVhdGlvbiAob3IgaXQncyBhIHNpZ24gb2YgYSBidWcsIGFzIHRob3NlIHR3 byBwbGFjZXMgYXJlCisJCQkJICogZXhwZWN0ZWQgdG8gYmUgaW4gc3luYykuIFNvIGlmIHRoZSBz dHJlYW1Qb3Mgc3RpbGwgcG9pbnRzCisJCQkJICogYXQgdGhlIGJhdGNoIHdlJ3JlIGFib3V0IHRv IGZyZWUsIHJlc2V0IHRoZSBwb3NpdGlvbiAtLQorCQkJCSAqIHdlJ2xsIHNldCBpdCB0byByZWFk UG9zIGluIHRoZSByZWFkX25leHQgY2FsbGJhY2sgbGF0ZXIgb24uCisJCQkJICoKKwkJCQkgKiBY WFggVGhpcyBjYW4gaGFwcGVuIGFmdGVyIHRoZSBxdWV1ZSBnZXRzIGZ1bGwsIHdlICJwYXVzZSIK KwkJCQkgKiB0aGUgc3RyZWFtLCBhbmQgdGhlbiByZXNldCBpdCB0byBjb250aW51ZS4gQnV0IEkg dGhpbmsgdGhhdAorCQkJCSAqIGp1c3QgaW5jcmVhc2VzIHRoZSBwcm9iYWJpbGl0eSBvZiBoaXR0 aW5nIHRoZSBpc3N1ZSwgaXQncworCQkJCSAqIGp1c3QgbW9yZSBjaGFuY2UgdG8gdG8gbm90IGFk dmFuY2UgdGhlIHN0cmVhbVBvcywgd2hpY2gKKwkJCQkgKiBkZXBlbmRzIG9uIHdoZW4gd2UgdHJ5 IHRvIGZldGNoIHRoZSBmaXJzdCBoZWFwIGJsb2NrIGFmdGVyCisJCQkJICogY2FsbGluZyByZWFk X3N0cmVhbV9yZXNldCgpLgorCQkJCSAqCisJCQkJICogRklYTUUgU2ltcGxpZnkvY2xhcmlmeS9z aG9ydGVuIHRoaXMgY29tbWVudC4gQ2FuIGl0CisJCQkJICogYWN0dWFsbHkgaGFwcGVuLCBpZiB3 ZSBuZXZlciBwdWxsIGZyb20gdGhlIHN0cmVhbSBpbiBJT1M/CisJCQkJICogV2UgcHJvYmFibHkg ZG9uJ3QgbG9vayBhaGVhZCBmb3IgdGhlIGZpcnN0IGNhbGwuCisJCQkJICovCisJCQkJaWYgKHVu bGlrZWx5KGJhdGNocXVldWUtPnN0cmVhbVBvcy5iYXRjaCA9PSBiYXRjaHF1ZXVlLT5oZWFkQmF0 Y2gpKQorCQkJCXsKKwkJCQkJYmF0Y2hfcmVzZXRfcG9zKCZiYXRjaHF1ZXVlLT5zdHJlYW1Qb3Mp OworCQkJCX0KKwogCQkJCS8qIEZyZWUgdGhlIGhlYWQgYmF0Y2ggKGV4Y2VwdCB3aGVuIGl0J3Mg bWFya0JhdGNoKSAqLwogCQkJCWJhdGNoX2ZyZWUoc2NhbiwgaGVhZEJhdGNoKTsKIApAQCAtNDc5 LDggKzU1MywzOCBAQCBoZWFwYW1fYmF0Y2hfZ2V0bmV4dF90aWQoSW5kZXhTY2FuRGVzYyBzY2Fu LCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbikKIAkJfQogCiAJCS8qCi0JCSAqIEZhaWxlZCB0byBh ZHZhbmNlIHRoZSByZWFkIHBvc2l0aW9uLiAgSGF2ZSBpbmRleGJhdGNoLmMgdXRpbGl0eQotCQkg KiByb3V0aW5lIGxvYWQgYW5vdGhlciBiYXRjaCBpbnRvIG91ciBxdWV1ZSAobmV4dCBpbiB0aGlz IGRpcmVjdGlvbikuCisJCSAqIFdlIGZhaWxlZCB0byBhZHZhbmNlLCBpLmUuIHdlIHJhbiBvdXQg b2YgY3VycmVudGx5IGxvYWRlZCBiYXRjaGVzLgorCQkgKiBTbyBpZiB3ZSBmaWxsZWQgdGhlIHF1 ZXVlLCB0aGlzIGlzIGEgZ29vZCB0aW1lIHRvIHJlc2V0IHRoZSBzdHJlYW0KKwkJICogKGJlZm9y ZSB3ZSB0cnkgbG9hZGluZyB0aGUgbmV4dCBiYXRjaCkuCisJCSAqLworCQlpZiAodW5saWtlbHko YmF0Y2hxdWV1ZS0+cmVzZXQpKQorCQl7CisJCQliYXRjaHF1ZXVlLT5yZXNldCA9IGZhbHNlOwor CQkJYmF0Y2hxdWV1ZS0+Y3VycmVudFByZWZldGNoQmxvY2sgPSBJbnZhbGlkQmxvY2tOdW1iZXI7 CisKKwkJCS8qCisJCQkgKiBOZWVkIHRvIHJlc2V0IHRoZSBzdHJlYW0gcG9zaXRpb24sIGl0IG1p Z2h0IGJlIHRvbyBmYXIgYmVoaW5kLgorCQkJICogVWx0aW1hdGVseSB3ZSB3YW50IHRvIHNldCBp dCB0byByZWFkUG9zLCBidXQgd2UgY2FuJ3QgZG8gdGhhdAorCQkJICogeWV0IC0gcmVhZFBvcyBz dGlsbCBwb2ludCBzYXQgdGhlIG9sZCBiYXRjaCwgc28ganVzdCByZXNldCBpdAorCQkJICogYW5k IHdlJ2xsIGluaXQgaXQgdG8gcmVhZFBvcyBsYXRlciBpbiB0aGUgY2FsbGJhY2suCisJCQkgKi8K KwkJCWJhdGNoX3Jlc2V0X3BvcygmYmF0Y2hxdWV1ZS0+c3RyZWFtUG9zKTsKKworCQkJaWYgKHNj YW4tPnhzX2hlYXBmZXRjaC0+cnMpCisJCQkJcmVhZF9zdHJlYW1fcmVzZXQoc2Nhbi0+eHNfaGVh cGZldGNoLT5ycyk7CisJCX0KKworCQkvKgorCQkgKiBGYWlsZWQgdG8gYWR2YW5jZSB0aGUgcmVh ZCBwb3NpdGlvbiwgc28gdHJ5IHJlYWRpbmcgdGhlIG5leHQgYmF0Y2guCisJCSAqIElmIHRoaXMg ZmFpbHMsIHdlJ3JlIGRvbmUgLSB0aGVyZSdzIG5vdGhpbmcgbW9yZSB0byBsb2FkLgorCQkgKgor CQkgKiBNb3N0IG9mIHRoZSBiYXRjaGVzIHNob3VsZCBiZSBsb2FkZWQgZnJvbSByZWFkX3N0cmVh bV9uZXh0X2J1ZmZlciwKKwkJICogYnV0IHdlIG5lZWQgdG8gY2FsbCBiYXRjaF9nZXRuZXh0IGhl cmUgdG9vLCBmb3IgdHdvIHJlYXNvbnMuIEZpcnN0LAorCQkgKiB0aGUgcmVhZF9zdHJlYW0gb25s eSBnZXRzIHdvcmtpbmcgYWZ0ZXIgd2UgdHJ5IGZldGNoaW5nIHRoZSBmaXJzdAorCQkgKiBoZWFw IHR1cGxlLCBzbyB3ZSBuZWVkIHRvIGxvYWQgdGhlIGluaXRpYWwgYmF0Y2ggKHRoZSBoZWFkKS4K KwkJICogU2Vjb25kLCB3aGlsZSBtb3N0IGJhdGNoZXMgd2lsbCBiZSBwcmVsb2FkZWQgYnkgdGhl IHN0cmVhbSB0aGFua3MKKwkJICogdG8gcHJlZmV0Y2hpbmcsIGl0J3MgcG9zc2libGUgdG8gc2V0 IGVmZmVjdGl2ZV9pb19jb25jdXJyZW5jeT0wLAorCQkgKiBhbmQgaW4gdGhhdCBjYXNlIGFsbCB0 aGUgYmF0Y2hlcyBnZXQgbG9hZGVkIGZyb20gaGVyZS4KIAkJICovCiAJCWlmICghYmF0Y2hfZ2V0 bmV4dChzY2FuLCBkaXJlY3Rpb24pKQogCQl7CkBAIC01MDAsNiArNjA0LDE5OCBAQCBoZWFwYW1f YmF0Y2hfZ2V0bmV4dF90aWQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVj dGlvbikKIAlyZXR1cm4gTlVMTDsKIH0KIAorLyoKKyAqIENvbnRyb2xzIHdoZW4gd2UgY2FuY2Vs IHVzZSBvZiBhIHJlYWQgc3RyZWFtIHRvIGRvIHByZWZldGNoaW5nCisgKi8KKyNkZWZpbmUgSU5E RVhfU0NBTl9NSU5fRElTVEFOQ0VfTkJBVENIRVMJMjAKKyNkZWZpbmUgSU5ERVhfU0NBTl9NSU5f VFVQTEVfRElTVEFOQ0UJCTcKKworLyoKKyAqIGhlYXBhbV9nZXRuZXh0X3N0cmVhbQorICoJCXJl dHVybiB0aGUgbmV4dCBibG9jayB0byBwYXNzIHRvIHRoZSByZWFkIHN0cmVhbQorICoKKyAqIFRo aXMgYXNzdW1lcyB0aGUgImN1cnJlbnQiIHNjYW4gZGlyZWN0aW9uLCByZXF1ZXN0ZWQgYnkgdGhl IGNhbGxlci4KKyAqCisgKiBJZiB0aGUgZGlyZWN0aW9uIGNoYW5nZXMgYmVmb3JlIGNvbnN1bWlu ZyBhbGwgYmxvY2tzLCB3ZSdsbCByZXNldCB0aGUgc3RyZWFtCisgKiBhbmQgc3RhcnQgZnJvbSBz Y3JhdGNoLiBUaGUgc2NhbiBkaXJlY3Rpb24gY2hhbmdlIGlzIGhhbmRsZWQgZWxzZXdoZXJlLgor ICogSGVyZSB3ZSByZWx5IG9uIGhhdmluZyB0aGUgY29ycmVjdCB2YWx1ZSBpbiBiYXRjaHF1ZXVl LT5kaXJlY3Rpb24uCisgKgorICogVGhlIHBvc2l0aW9uIG9mIHRoZSByZWFkX3N0cmVhbSBpcyBz dG9yZWQgaW4gc3RyZWFtUG9zLCB3aGljaCBtYXkgYmUgYWhlYWQgb2YKKyAqIHRoZSBjdXJyZW50 IHJlYWRQb3MgKHdoaWNoIGlzIHdoYXQgZ290IGNvbnN1bWVkIGJ5IHRoZSBzY2FuKS4KKyAqCisg KiBUaGUgc3RyZWFtUG9zIGNhbiBob3dldmVyIGFsc28gZ2V0IGJlaGluZCByZWFkUG9zIHRvbywg d2hlbiBzb21lIGJsb2NrcyBhcmUKKyAqIHNraXBwZWQgYW5kIG5vdCByZXR1cm5lZCB0byB0aGUg cmVhZF9zdHJlYW0uIEFuIGV4YW1wbGUgaXMgYW4gaW5kZXggc2NhbiBvbgorICogYSBjb3JyZWxh dGVkIGluZGV4LCB3aXRoIG1hbnkgZHVwbGljYXRlIGJsb2NrcyBhcmUgc2tpcHBlZCwgb3IgYW4g SU9TIHdoZXJlCisgKiBhbGwtdmlzaWJsZSBibG9ja3MgYXJlIHNraXBwZWQuCisgKgorICogVGhl IGluaXRpYWwgYmF0Y2ggaXMgYWx3YXlzIGxvYWRlZCBmcm9tIGJhdGNoX2dldG5leHRfdGlkKCku IFdlIGRvbid0CisgKiBnZXQgaGVyZSB1bnRpbCB0aGUgZmlyc3QgcmVhZF9zdHJlYW1fbmV4dF9i dWZmZXIoKSBjYWxsLCB3aGVuIHB1bGxpbmcgdGhlCisgKiBmaXJzdCBoZWFwIHR1cGxlIGZyb20g dGhlIHN0cmVhbS4gQWZ0ZXIgdGhhdCwgbW9zdCBiYXRjaGVzIHNob3VsZCBiZSBsb2FkZWQKKyAq IGJ5IHRoaXMgY2FsbGJhY2ssIGRyaXZlbiBieSB0aGUgcmVhZF9zdHJlYW0gbG9vay1haGVhZCBk aXN0YW5jZS4gSG93ZXZlciwKKyAqIHdpdGggZGlzYWJsZWQgcHJlZmV0Y2hpbmcgKHRoYXQgaXMs IHdpdGggZWZmZWN0aXZlX2lvX2NvbmN1cnJlbmN5PTApLCBhbGwKKyAqIGJhdGNoZXMgd2lsbCBi ZSBsb2FkZWQgaW4gYmF0Y2hfZ2V0bmV4dF90aWQuCisgKgorICogSXQncyBwb3NzaWJsZSB3ZSBn b3QgaGVyZSBvbmx5IGZhaXJseSBsYXRlIGluIHRoZSBzY2FuLCBlLmcuIGlmIG1hbnkgdHVwbGVz CisgKiBnb3Qgc2tpcHBlZCBpbiB0aGUgaW5kZXgtb25seSBzY2FuLCBldGMuIEluIHRoaXMgY2Fz ZSBqdXN0IHVzZSB0aGUgcmVhZAorICogcG9zaXRpb24gYXMgYSBzdHJlYW1Qb3Mgc3RhcnRpbmcg cG9pbnQuCisgKi8KK3N0YXRpYyBCbG9ja051bWJlcgoraGVhcGFtX2dldG5leHRfc3RyZWFtKFJl YWRTdHJlYW0gKnN0cmVhbSwgdm9pZCAqY2FsbGJhY2tfcHJpdmF0ZV9kYXRhLAorCQkJCQkgIHZv aWQgKnBlcl9idWZmZXJfZGF0YSkKK3sKKwlJbmRleFNjYW5EZXNjIHNjYW4gPSAoSW5kZXhTY2Fu RGVzYykgY2FsbGJhY2tfcHJpdmF0ZV9kYXRhOworCUJhdGNoUXVldWUgKmJhdGNocXVldWUgPSBz Y2FuLT5iYXRjaHF1ZXVlOworCUJhdGNoUXVldWVJdGVtUG9zICpzdHJlYW1Qb3MgPSAmYmF0Y2hx dWV1ZS0+c3RyZWFtUG9zOworCVNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uID0gYmF0Y2hxdWV1ZS0+ ZGlyZWN0aW9uOworCisJLyogQnkgbm93IHdlIHNob3VsZCBrbm93IHRoZSBkaXJlY3Rpb24gb2Yg dGhlIHNjYW4uICovCisJQXNzZXJ0KGRpcmVjdGlvbiAhPSBOb01vdmVtZW50U2NhbkRpcmVjdGlv bik7CisKKwkvKgorCSAqIFRoZSByZWFkIHBvc2l0aW9uIChyZWFkUG9zKSBoYXMgdG8gYmUgdmFs aWQuCisJICoKKwkgKiBXZSBpbml0aWFsaXplL2FkdmFuY2UgaXQgYmVmb3JlIGV2ZW4gYXR0ZW1w dGluZyB0byByZWFkIHRoZSBoZWFwIHR1cGxlLAorCSAqIGFuZCBpdCBnZXRzIGludmFsaWRhdGVk IHdoZW4gd2UgcmVhY2ggdGhlIGVuZCBvZiB0aGUgc2NhbiAoYnV0IHRoZW4gd2UKKwkgKiBkb24n dCBpbnZva2UgdGhlIGNhbGxiYWNrIGFnYWluKS4KKwkgKgorCSAqIFhYWCBUaGlzIGFwcGxpZXMg dG8gdGhlIHJlYWRQb3MuIFdlJ2xsIHVzZSBzdHJlYW1Qb3MgdG8gZGV0ZXJtaW5lIHdoaWNoCisJ ICogYmxvY2tzIHRvIHBhc3MgdG8gdGhlIHN0cmVhbSwgYW5kIHJlYWRQb3MgbWF5IGJlIHVzZWQg dG8gaW5pdGlhbGl6ZSBpdC4KKwkgKi8KKwliYXRjaF9hc3NlcnRfcG9zX3ZhbGlkKHNjYW4sICZi YXRjaHF1ZXVlLT5yZWFkUG9zKTsKKworCS8qCisJICogVHJ5IHRvIGFkdmFuY2UgdGhlIHN0cmVh bVBvcyB0byB0aGUgbmV4dCBpdGVtLCBhbmQgaWYgdGhhdCBkb2Vzbid0CisJICogc3VjY2VlZCAo aWYgdGhlcmUgYXJlIG5vIG1vcmUgaXRlbXMgaW4gbG9hZGVkIGJhdGNoZXMpLCB0cnkgbG9hZGlu ZyB0aGUKKwkgKiBuZXh0IG9uZS4KKwkgKgorCSAqIEZJWE1FIFVubGlrZSBiYXRjaF9nZXRuZXh0 X3RpZCwgdGhpcyBjYW4gbG9vcCBtb3JlIHRoYW4gdHdpY2UuIElmIG1hbnkKKwkgKiBibG9ja3Mg Z2V0IHNraXBwZWQgZHVlIHRvIGN1cnJlbnRQcmVmZXRjaEJsb2NrIG9yIGFsbC12aXNpYmlsaXR5 IChwZXIKKwkgKiB0aGUgInByZWZldGNoIiBjYWxsYmFjayksIHdlIGdldCB0byBsb2FkIGFkZGl0 aW9uYWwgYmF0Y2hlcy4gSW4gdGhlCisJICogd29yc3QgY2FzZSB3ZSBoaXQgdGhlIElOREVYX1ND QU5fTUFYX0JBVENIRVMgbGltaXQgYW5kIGhhdmUgdG8gInBhdXNlIgorCSAqIHRoZSBzdHJlYW0u CisJICovCisJd2hpbGUgKHRydWUpCisJeworCQlib29sCQlhZHZhbmNlZCA9IGZhbHNlOworCisJ CS8qCisJCSAqIElmIHRoZSBzdHJlYW0gcG9zaXRpb24gaGFzIG5vdCBiZWVuIGluaXRpYWxpemVk IHlldCwgc2V0IGl0IHRvIHRoZQorCQkgKiBjdXJyZW50IHJlYWQgcG9zaXRpb24uIFRoaXMgaXMg dGhlIGl0ZW0gdGhlIGNhbGxlciBpcyB0cnlpbmcgdG8KKwkJICogcmVhZCwgc28gaXQncyB3aGF0 IHdlIHNob3VsZCByZXR1cm4gdG8gdGhlIHN0cmVhbS4KKwkJICovCisJCWlmIChJTkRFWF9TQ0FO X1BPU19JTlZBTElEKHN0cmVhbVBvcykpCisJCXsKKwkJCSpzdHJlYW1Qb3MgPSBiYXRjaHF1ZXVl LT5yZWFkUG9zOworCQkJYWR2YW5jZWQgPSB0cnVlOworCQl9CisJCWVsc2UgaWYgKGhlYXBfYmF0 Y2hfYWR2YW5jZV9wb3Moc2Nhbiwgc3RyZWFtUG9zLCBkaXJlY3Rpb24pKQorCQl7CisJCQlhZHZh bmNlZCA9IHRydWU7CisJCX0KKworCQkvKgorCQkgKiBGSVhNRSBNYXliZSBjaGVjayB0aGUgc3Ry ZWFtUG9zIGlzIG5vdCBiZWhpbmQgcmVhZFBvcz8KKwkJICoKKwkJICogRklYTUUgQWN0dWFsbHks IGNvdWxkIHN0cmVhbVBvcyBnZXQgc3RhbGUvbGFnZ2luZyBiZWhpbmQgcmVhZFBvcywKKwkJICog YW5kIGlmIHllcyBob3cgbXVjaC4gQ291bGQgaXQgZ2V0IHNvIGZhciBiZWhpbmQgdG8gbm90IGJl IHZhbGlkLAorCQkgKiBwb2ludGluZyBhdCBhIGZyZWVkIGJhdGNoPyBJbiB0aGF0IGNhc2Ugd2Ug Y2FuJ3QgZXZlbiBhZHZhbmNlIGl0LAorCQkgKiBhbmQgd2Ugc2hvdWxkIGp1c3QgaW5pdGlhbGl6 ZSBpdCB0byByZWFkUG9zLiBXZSBtaWdodCBkbyB0aGF0CisJCSAqIGFueXdheSwgSSBndWVzcywg anVzdCB0byBzYXZlIG9uICJwb2ludGxlc3MiIGFkdmFuY2VzIChpdCBtdXN0CisJCSAqIGFncmVl IHdpdGggcmVhZFBvcywgd2UgY2FuJ3QgYWxsb3cgInJldHJvYWN0aXZlbHkiIGNoYW5naW5nIHRo ZQorCQkgKiBibG9jayBzZXF1ZW5jZSkuCisJCSAqLworCisJCS8qCisJCSAqIElmIHdlIGFkdmFu Y2VkIHRoZSBwb3NpdGlvbiwgZWl0aGVyIHJldHVybiB0aGUgYmxvY2sgZm9yIHRoZSBUSUQsCisJ CSAqIG9yIHNraXAgaXQgKGFuZCB0aGVuIHRyeSBhZHZhbmNpbmcgYWdhaW4pLgorCQkgKgorCQkg KiBUaGUgYmxvY2sgbWF5IGJlICJza2lwcGVkIiBmb3IgdHdvIHJlYXNvbnMuIEZpcnN0LCB0aGUg Y2FsbGVyIG1heQorCQkgKiBkZWZpbmUgYSAicHJlZmV0Y2giIGNhbGxiYWNrIHRoYXQgdGVsbHMg dXMgdG8gc2tpcCBpdGVtcyAoSU9TIGRvZXMKKwkJICogdGhpcyB0byBza2lwIGFsbC12aXNpYmxl IHBhZ2VzKS4gU2Vjb25kLCBjdXJyZW50UHJlZmV0Y2hCbG9jayBpcworCQkgKiB1c2VkIHRvIHNr aXAgZHVwbGljYXRlIGJsb2NrIG51bWJlcnMgKGEgc2VxdWVuY2Ugb2YgVElEUyBmb3IgdGhlCisJ CSAqIHNhbWUgYmxvY2spLgorCQkgKi8KKwkJaWYgKGFkdmFuY2VkKQorCQl7CisJCQlCYXRjaElu ZGV4U2NhbiBzdHJlYW1CYXRjaCA9IElOREVYX1NDQU5fQkFUQ0goc2Nhbiwgc3RyZWFtUG9zLT5i YXRjaCk7CisJCQlJdGVtUG9pbnRlciB0aWQgPSAmc3RyZWFtQmF0Y2gtPml0ZW1zW3N0cmVhbVBv cy0+aXRlbV0uaGVhcFRpZDsKKworCQkJREVCVUdfTE9HKCJoZWFwYW1fZ2V0bmV4dF9zdHJlYW06 IGl0ZW0gJWQsIFRJRCAoJXUsJXUpIiwKKwkJCQkJICBzdHJlYW1Qb3MtPml0ZW0sCisJCQkJCSAg SXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcih0aWQpLAorCQkJCQkgIEl0ZW1Qb2ludGVyR2V0T2Zm c2V0TnVtYmVyKHRpZCkpOworCisJCQkvKiBzYW1lIGJsb2NrIGFzIGJlZm9yZSwgZG9uJ3QgbmVl ZCB0byByZWFkIGl0ICovCisJCQlpZiAoYmF0Y2hxdWV1ZS0+Y3VycmVudFByZWZldGNoQmxvY2sg PT0gSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcih0aWQpKQorCQkJeworCQkJCURFQlVHX0xPRygi aGVhcGFtX2dldG5leHRfc3RyZWFtOiBza2lwIGJsb2NrIChjdXJyZW50UHJlZmV0Y2hCbG9jayki KTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJYmF0Y2hxdWV1ZS0+Y3VycmVudFByZWZldGNo QmxvY2sgPSBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCk7CisKKwkJCXJldHVybiBiYXRj aHF1ZXVlLT5jdXJyZW50UHJlZmV0Y2hCbG9jazsKKwkJfQorCisJCS8qCisJCSAqIENvdWxkbid0 IGFkdmFuY2UgdGhlIHBvc2l0aW9uLCBubyBtb3JlIGl0ZW1zIGluIHRoZSBsb2FkZWQgYmF0Y2hl cy4KKwkJICogVHJ5IGxvYWRpbmcgdGhlIG5leHQgYmF0Y2ggLSBpZiB0aGF0IHN1Y2NlZWRzLCB0 cnkgYWR2YW5jaW5nIGFnYWluCisJCSAqICh0aGlzIHRpbWUgdGhlIGFkdmFuY2Ugc2hvdWxkIHdv cmssIGJ1dCB3ZSBtYXkgc2tpcCBhbGwgdGhlIGl0ZW1zKS4KKwkJICoKKwkJICogSWYgd2UgZmFp bCB0byBsb2FkIHRoZSBuZXh0IGJhdGNoLCB3ZSdyZSBkb25lLgorCQkgKi8KKwkJaWYgKCFiYXRj aF9nZXRuZXh0KHNjYW4sIGRpcmVjdGlvbikpCisJCQlicmVhazsKKworCQkvKgorCQkgKiBDb25z aWRlciBkaXNhYmxpbmcgcHJlZmV0Y2hpbmcgd2hlbiB3ZSBjYW4ndCBrZWVwIGEgc3VmZmljaWVu dGx5CisJCSAqIGxhcmdlICJpbmRleCB0dXBsZSBkaXN0YW5jZSIgYmV0d2VlbiByZWFkUG9zIGFu ZCBzdHJlYW1Qb3MuCisJCSAqCisJCSAqIE9ubHkgY29uc2lkZXIgZG9pbmcgdGhpcyB3aGVuIHdl J3JlIG5vdCBvbiB0aGUgc2NhbidzIGluaXRpYWwKKwkJICogYmF0Y2gsIHdoZW4gcmVhZFBvcyBh bmQgc3RyZWFtUG9zIHNoYXJlIHRoZSBzYW1lIGJhdGNoLgorCQkgKi8KKwkJaWYgKCFiYXRjaHF1 ZXVlLT5maW5pc2hlZCAmJiAhYmF0Y2hxdWV1ZS0+cHJlZmV0Y2hpbmdMb2NrZWRJbikKKwkJewor CQkJaW50CQkJaXRlbWRpZmY7CisKKwkJCWlmIChzdHJlYW1Qb3MtPmJhdGNoIDw9IElOREVYX1ND QU5fTUlOX0RJU1RBTkNFX05CQVRDSEVTKQorCQkJeworCQkJCS8qIFRvbyBlYXJseSB0byBjaGVj ayBpZiBwcmVmZXRjaGluZyBzaG91bGQgYmUgZGlzYWJsZWQgKi8KKwkJCX0KKwkJCWVsc2UgaWYg KGJhdGNocXVldWUtPnJlYWRQb3MuYmF0Y2ggPT0gc3RyZWFtUG9zLT5iYXRjaCkKKwkJCXsKKwkJ CQlCYXRjaFF1ZXVlSXRlbVBvcyAqcmVhZFBvcyA9ICZiYXRjaHF1ZXVlLT5yZWFkUG9zOworCisJ CQkJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyZWN0aW9uKSkKKwkJCQkJaXRlbWRpZmYg PSBzdHJlYW1Qb3MtPml0ZW0gLSByZWFkUG9zLT5pdGVtOworCQkJCWVsc2UKKwkJCQl7CisJCQkJ CUJhdGNoSW5kZXhTY2FuIHJlYWRCYXRjaCA9CisJCQkJCQlJTkRFWF9TQ0FOX0JBVENIKHNjYW4s IHJlYWRQb3MtPmJhdGNoKTsKKworCQkJCQlpdGVtZGlmZiA9IChyZWFkUG9zLT5pdGVtIC0gcmVh ZEJhdGNoLT5maXJzdEl0ZW0pIC0KKwkJCQkJCShzdHJlYW1Qb3MtPml0ZW0gLSByZWFkQmF0Y2gt PmZpcnN0SXRlbSk7CisJCQkJfQorCisJCQkJaWYgKGl0ZW1kaWZmIDwgSU5ERVhfU0NBTl9NSU5f VFVQTEVfRElTVEFOQ0UpCisJCQkJeworCQkJCQliYXRjaHF1ZXVlLT5kaXNhYmxlZCA9IHRydWU7 CisJCQkJCXJldHVybiBJbnZhbGlkQmxvY2tOdW1iZXI7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7 CisJCQkJCWJhdGNocXVldWUtPnByZWZldGNoaW5nTG9ja2VkSW4gPSB0cnVlOworCQkJCX0KKwkJ CX0KKwkJCWVsc2UKKwkJCQliYXRjaHF1ZXVlLT5wcmVmZXRjaGluZ0xvY2tlZEluID0gdHJ1ZTsK KwkJfQorCX0KKworCS8qIG5vIG1vcmUgaXRlbXMgaW4gdGhpcyBzY2FuICovCisJcmV0dXJuIElu dmFsaWRCbG9ja051bWJlcjsKK30KKwogLyogLS0tLS0tLS0tLS0tLS0tLQogICoJCWluZGV4X2Zl dGNoX2hlYXAgLSBnZXQgdGhlIHNjYW4ncyBuZXh0IGhlYXAgdHVwbGUKICAqCkBAIC0zMTY5LDYg KzM0NjUsNyBAQCBzdGF0aWMgY29uc3QgVGFibGVBbVJvdXRpbmUgaGVhcGFtX21ldGhvZHMgPSB7 CiAJLmluZGV4X2ZldGNoX3Jlc2V0ID0gaGVhcGFtX2luZGV4X2ZldGNoX3Jlc2V0LAogCS5pbmRl eF9mZXRjaF9lbmQgPSBoZWFwYW1faW5kZXhfZmV0Y2hfZW5kLAogCS5pbmRleF9nZXRuZXh0X3Ns b3QgPSBoZWFwYW1faW5kZXhfZ2V0bmV4dF9zbG90LAorCS5pbmRleF9nZXRuZXh0X3N0cmVhbSA9 IGhlYXBhbV9nZXRuZXh0X3N0cmVhbSwKIAkuaW5kZXhfZmV0Y2hfdHVwbGUgPSBoZWFwYW1faW5k ZXhfZmV0Y2hfdHVwbGUsCiAKIAkudHVwbGVfaW5zZXJ0ID0gaGVhcGFtX3R1cGxlX2luc2VydCwK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jCmluZGV4IDllNGVkNWI1NS4uMTkzNmEzNGM4IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jCisrKyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMKQEAgLTQ1OSw3ICs0NTksMTUgQEAgaW5kZXhf cmVzdHJwb3MoSW5kZXhTY2FuRGVzYyBzY2FuKQogCUNIRUNLX1NDQU5fUFJPQ0VEVVJFKGFtZ2V0 YmF0Y2gpOwogCUNIRUNLX1NDQU5fUFJPQ0VEVVJFKGFtcG9zcmVzZXQpOwogCi0JLyogcmVsZWFz ZSByZXNvdXJjZXMgKGxpa2UgYnVmZmVyIHBpbnMpIGZyb20gdGFibGUgYWNjZXNzZXMgKi8KKwkv KgorCSAqIHJlbGVhc2UgcmVzb3VyY2VzIChsaWtlIGJ1ZmZlciBwaW5zKSBmcm9tIHRhYmxlIGFj Y2Vzc2VzCisJICoKKwkgKiBYWFg6IEN1cnJlbnRseSwgdGhlIGRpc3RhbmNlIGlzIGFsd2F5cyBy ZW1lbWJlcmVkIGFjcm9zcyBhbnkKKwkgKiByZWFkX3N0cmVhbV9yZXNldCBjYWxscyAodG8gd29y ayBhcm91bmQgdGhlIHNjYW4tPmJhdGNocXVldWUtPnJlc2V0CisJICogYmVoYXZpb3Igb2YgcmVz ZXR0aW5nIHRoZSBzdHJlYW0gdG8gZGVhbCB3aXRoIHJ1bm5pbmcgb3V0IG9mIGJhdGNoZXMpLgor CSAqIFdlIHByb2JhYmx5IF9zaG91bGRfIGJlIGZvcmdldHRpbmcgdGhlIGRpc3RhbmNlIHdoZW4g d2UgcmVzZXQgdGhlCisJICogc3RyZWFtIGhlcmUgKHRocm91Z2ggb3VyIHRhYmxlX2luZGV4X2Zl dGNoX3Jlc2V0IGNhbGwpLCB0aG91Z2guCisJICovCiAJaWYgKHNjYW4tPnhzX2hlYXBmZXRjaCkK IAkJdGFibGVfaW5kZXhfZmV0Y2hfcmVzZXQoc2Nhbi0+eHNfaGVhcGZldGNoKTsKIApkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YmF0Y2guYyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy9pbmRleC9pbmRleGJhdGNoLmMKaW5kZXggZjM4MTRhYzhiLi5mMjhhNzQ3ZjkgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGJhdGNoLmMKKysrIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YmF0Y2guYwpAQCAtNzcsMTEgKzc3LDE2IEBAIGlu ZGV4X2JhdGNoX2luaXQoSW5kZXhTY2FuRGVzYyBzY2FuKQogCQkoIXNjYW4tPnhzX3dhbnRfaXR1 cCAmJiBJc01WQ0NTbmFwc2hvdChzY2FuLT54c19zbmFwc2hvdCkgJiYKIAkJIFJlbGF0aW9uTmVl ZHNXQUwoc2Nhbi0+aW5kZXhSZWxhdGlvbikpOwogCXNjYW4tPmJhdGNocXVldWUtPmZpbmlzaGVk ID0gZmFsc2U7CisJc2Nhbi0+YmF0Y2hxdWV1ZS0+cmVzZXQgPSBmYWxzZTsKKwlzY2FuLT5iYXRj aHF1ZXVlLT5wcmVmZXRjaGluZ0xvY2tlZEluID0gZmFsc2U7CisJc2Nhbi0+YmF0Y2hxdWV1ZS0+ ZGlzYWJsZWQgPSBmYWxzZTsKKwlzY2FuLT5iYXRjaHF1ZXVlLT5jdXJyZW50UHJlZmV0Y2hCbG9j ayA9IEludmFsaWRCbG9ja051bWJlcjsKIAlzY2FuLT5iYXRjaHF1ZXVlLT5kaXJlY3Rpb24gPSBO b01vdmVtZW50U2NhbkRpcmVjdGlvbjsKIAogCS8qIHBvc2l0aW9ucyBpbiB0aGUgcXVldWUgb2Yg YmF0Y2hlcyAqLwogCWJhdGNoX3Jlc2V0X3Bvcygmc2Nhbi0+YmF0Y2hxdWV1ZS0+cmVhZFBvcyk7 CiAJYmF0Y2hfcmVzZXRfcG9zKCZzY2FuLT5iYXRjaHF1ZXVlLT5tYXJrUG9zKTsKKwliYXRjaF9y ZXNldF9wb3MoJnNjYW4tPmJhdGNocXVldWUtPnN0cmVhbVBvcyk7CiAKIAlzY2FuLT5iYXRjaHF1 ZXVlLT5tYXJrQmF0Y2ggPSBOVUxMOwogCXNjYW4tPmJhdGNocXVldWUtPm1heEJhdGNoZXMgPSBJ TkRFWF9TQ0FOX01BWF9CQVRDSEVTOwpAQCAtMTI3LDcgKzEzMiwyMyBAQCBiYXRjaF9nZXRuZXh0 KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pCiAJaWYgKGJhdGNo cXVldWUtPmZpbmlzaGVkKQogCQlyZXR1cm4gZmFsc2U7CiAKLQlBc3NlcnQoIUlOREVYX1NDQU5f QkFUQ0hfRlVMTChzY2FuKSk7CisJLyoKKwkgKiBJZiB3ZSBhbHJlYWR5IHVzZWQgdGhlIG1heGlt dW0gbnVtYmVyIG9mIGJhdGNoIHNsb3RzIGF2YWlsYWJsZSwgaXQncworCSAqIHBvaW50bGVzcyB0 byB0cnkgbG9hZGluZyBhbm90aGVyIG9uZS4gVGhpcyBjYW4gaGFwcGVuIGZvciB2YXJpb3VzCisJ ICogcmVhc29ucywgZS5nLiBmb3IgaW5kZXgtb25seSBzY2FucyBvbiBhbGwtdmlzaWJsZSB0YWJs ZSwgb3Igc2tpcHBpbmcKKwkgKiBkdXBsaWNhdGUgYmxvY2tzIG9uIHBlcmZlY3RseSBjb3JyZWxh dGVkIGluZGV4ZXMsIGV0Yy4KKwkgKgorCSAqIFdlIGNvdWxkIGVubGFyZ2UgdGhlIGFycmF5IHRv IGFsbG93IG1vcmUgYmF0Y2hlcywgYnV0IHRoYXQncyBmdXRpbGUsIHdlCisJICogY2FuIGFsd2F5 cyBjb25zdHJ1Y3QgYSBjYXNlIHVzaW5nIG1vcmUgbWVtb3J5LiBOb3Qgb25seSBpdCB3b3VsZCBy aXNrCisJICogT09NLCBpdCdkIGFsc28gYmUgaW5lZmZpY2llbnQgYmVjYXVzZSB0aGlzIGhhcHBl bnMgZWFybHkgaW4gdGhlIHNjYW4KKwkgKiAoc28gaXQnZCBpbnRlcmZlcmUgd2l0aCBMSU1JVCBx dWVyaWVzKS4KKwkgKi8KKwlpZiAoSU5ERVhfU0NBTl9CQVRDSF9GVUxMKHNjYW4pKQorCXsKKwkJ REVCVUdfTE9HKCJiYXRjaF9nZXRuZXh0OiByYW4gb3V0IG9mIHNwYWNlIGZvciBiYXRjaGVzIik7 CisJCXNjYW4tPmJhdGNocXVldWUtPnJlc2V0ID0gdHJ1ZTsKKwkJcmV0dXJuIGZhbHNlOworCX0K IAogCWJhdGNoX2RlYnVnX3ByaW50X2JhdGNoZXMoImJhdGNoX2dldG5leHQgLyBzdGFydCIsIHNj YW4pOwogCkBAIC0xNTIsNiArMTczLDE3IEBAIGJhdGNoX2dldG5leHQoSW5kZXhTY2FuRGVzYyBz Y2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbikKIAogCQlERUJVR19MT0coImJhdGNoX2dldG5l eHQgaGVhZEJhdGNoICVkIG5leHRCYXRjaCAlZCBiYXRjaCAlcCIsCiAJCQkJICBiYXRjaHF1ZXVl LT5oZWFkQmF0Y2gsIGJhdGNocXVldWUtPm5leHRCYXRjaCwgYmF0Y2gpOworCisJCS8qIERlbGF5 IGluaXRpYWxpemluZyBzdHJlYW0gdW50aWwgcmVhZGluZyBmcm9tIHNjYW4ncyBzZWNvbmQgYmF0 Y2ggKi8KKwkJaWYgKHByaW9yYmF0Y2ggJiYgIXNjYW4tPnhzX2hlYXBmZXRjaC0+cnMgJiYgIWJh dGNocXVldWUtPmRpc2FibGVkICYmCisJCQkhc2Nhbi0+eHNfd2FudF9pdHVwICYmCS8qIFhYWCBw cmVmZXRjaGluZyBkaXNhYmxlZCBmb3IgSW9TLCBmb3IKKwkJCQkJCQkJCSAqIG5vdyAqLworCQkJ ZW5hYmxlX2luZGV4c2Nhbl9wcmVmZXRjaCkKKwkJCXNjYW4tPnhzX2hlYXBmZXRjaC0+cnMgPQor CQkJCXJlYWRfc3RyZWFtX2JlZ2luX3JlbGF0aW9uKFJFQURfU1RSRUFNX0RFRkFVTFQsIE5VTEws CisJCQkJCQkJCQkJICAgc2Nhbi0+aGVhcFJlbGF0aW9uLCBNQUlOX0ZPUktOVU0sCisJCQkJCQkJ CQkJICAgc2Nhbi0+aGVhcFJlbGF0aW9uLT5yZF90YWJsZWFtLT5pbmRleF9nZXRuZXh0X3N0cmVh bSwKKwkJCQkJCQkJCQkgICBzY2FuLCAwKTsKIAl9CiAJZWxzZQogCQliYXRjaHF1ZXVlLT5maW5p c2hlZCA9IHRydWU7CkBAIC0xODQsOSArMjE2LDEyIEBAIGluZGV4X2JhdGNoX3Jlc2V0KEluZGV4 U2NhbkRlc2Mgc2NhbiwgYm9vbCBjb21wbGV0ZSkKIAliYXRjaF9hc3NlcnRfYmF0Y2hlc192YWxp ZChzY2FuKTsKIAliYXRjaF9kZWJ1Z19wcmludF9iYXRjaGVzKCJpbmRleF9iYXRjaF9yZXNldCIs IHNjYW4pOwogCUFzc2VydChzY2FuLT54c19oZWFwZmV0Y2gpOworCWlmIChzY2FuLT54c19oZWFw ZmV0Y2gtPnJzKQorCQlyZWFkX3N0cmVhbV9yZXNldChzY2FuLT54c19oZWFwZmV0Y2gtPnJzKTsK IAogCS8qIHJlc2V0IHRoZSBwb3NpdGlvbnMgKi8KIAliYXRjaF9yZXNldF9wb3MoJmJhdGNocXVl dWUtPnJlYWRQb3MpOworCWJhdGNoX3Jlc2V0X3BvcygmYmF0Y2hxdWV1ZS0+c3RyZWFtUG9zKTsK IAogCS8qCiAJICogV2l0aCAiY29tcGxldGUiIHJlc2V0LCBtYWtlIHN1cmUgdG8gYWxzbyBmcmVl IHRoZSBtYXJrZWQgYmF0Y2gsIGVpdGhlcgpAQCAtMjMzLDYgKzI2OCw4IEBAIGluZGV4X2JhdGNo X3Jlc2V0KEluZGV4U2NhbkRlc2Mgc2NhbiwgYm9vbCBjb21wbGV0ZSkKIAliYXRjaHF1ZXVlLT5u ZXh0QmF0Y2ggPSAwOwkvKiBpbml0aWFsIGJhdGNoIGlzIGVtcHR5ICovCiAKIAliYXRjaHF1ZXVl LT5maW5pc2hlZCA9IGZhbHNlOworCWJhdGNocXVldWUtPnJlc2V0ID0gZmFsc2U7CisJYmF0Y2hx dWV1ZS0+Y3VycmVudFByZWZldGNoQmxvY2sgPSBJbnZhbGlkQmxvY2tOdW1iZXI7CiAKIAliYXRj aF9hc3NlcnRfYmF0Y2hlc192YWxpZChzY2FuKTsKIH0KQEAgLTI5Niw5ICszMzMsMTMgQEAgaW5k ZXhfYmF0Y2hfcmVzdG9yZV9wb3MoSW5kZXhTY2FuRGVzYyBzY2FuKQogewogCUJhdGNoUXVldWUg KmJhdGNocXVldWUgPSBzY2FuLT5iYXRjaHF1ZXVlOwogCUJhdGNoUXVldWVJdGVtUG9zICptYXJr UG9zID0gJmJhdGNocXVldWUtPm1hcmtQb3M7Ci0JQmF0Y2hRdWV1ZUl0ZW1Qb3MgKnJlYWRQb3Mg PSAmYmF0Y2hxdWV1ZS0+cmVhZFBvczsKIAlCYXRjaEluZGV4U2NhbiBtYXJrQmF0Y2ggPSBiYXRj aHF1ZXVlLT5tYXJrQmF0Y2g7CiAKKwkvKgorCSAqIFhYWCBEaXNhYmxlIHRoaXMgb3B0aW1pemF0 aW9uIHdoZW4gSS9PIHByZWZldGNoaW5nIGlzIGluIHVzZSwgYXQgbGVhc3QKKwkgKiB1bnRpbCB0 aGUgcG9zc2libGUgaW50ZXJhY3Rpb25zIHdpdGggc3RyZWFtUG9zIGFyZSBmdWxseSB1bmRlcnN0 b29kLgorCSAqLworI2lmIDAKIAlpZiAocmVhZFBvcy0+YmF0Y2ggPT0gbWFya1Bvcy0+YmF0Y2gg JiYKIAkJcmVhZFBvcy0+YmF0Y2ggPT0gYmF0Y2hxdWV1ZS0+aGVhZEJhdGNoKQogCXsKQEAgLTMw OSw2ICszNTAsNyBAQCBpbmRleF9iYXRjaF9yZXN0b3JlX3BvcyhJbmRleFNjYW5EZXNjIHNjYW4p CiAJCXJlYWRQb3MtPml0ZW0gPSBtYXJrUG9zLT5pdGVtOwogCQlyZXR1cm47CiAJfQorI2VuZGlm CiAKIAkvKgogCSAqIENhbGwgYW1wb3NyZXNldCB0byBsZXQgaW5kZXggQU0ga25vdyB0byBpbnZh bGlkYXRlIGFueSBwcml2YXRlIHN0YXRlCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcGF0aC9jb3N0c2l6ZS5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY29zdHNpemUu YwppbmRleCA1YTcyODNiZDIuLjZmNjM2OTNmNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BhdGgvY29zdHNpemUuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9j b3N0c2l6ZS5jCkBAIC0xNDQsNiArMTQ0LDcgQEAgaW50CQkJbWF4X3BhcmFsbGVsX3dvcmtlcnNf cGVyX2dhdGhlciA9IDI7CiAKIGJvb2wJCWVuYWJsZV9zZXFzY2FuID0gdHJ1ZTsKIGJvb2wJCWVu YWJsZV9pbmRleHNjYW4gPSB0cnVlOworYm9vbAkJZW5hYmxlX2luZGV4c2Nhbl9wcmVmZXRjaCA9 IHRydWU7CiBib29sCQllbmFibGVfaW5kZXhvbmx5c2NhbiA9IHRydWU7CiBib29sCQllbmFibGVf Yml0bWFwc2NhbiA9IHRydWU7CiBib29sCQllbmFibGVfdGlkc2NhbiA9IHRydWU7CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9yZWFkX3N0cmVhbS5jIGIvc3JjL2JhY2tlbmQv c3RvcmFnZS9haW8vcmVhZF9zdHJlYW0uYwppbmRleCAwMzFmZGU5ZjQuLmUzNGU2MDA2MCAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vcmVhZF9zdHJlYW0uYworKysgYi9zcmMv YmFja2VuZC9zdG9yYWdlL2Fpby9yZWFkX3N0cmVhbS5jCkBAIC05OSw2ICs5OSw3IEBAIHN0cnVj dCBSZWFkU3RyZWFtCiAJaW50MTYJCWZvcndhcmRlZF9idWZmZXJzOwogCWludDE2CQlwaW5uZWRf YnVmZmVyczsKIAlpbnQxNgkJZGlzdGFuY2U7CisJaW50MTYJCWRpc3RhbmNlX29sZDsKIAlpbnQx NgkJaW5pdGlhbGl6ZWRfYnVmZmVyczsKIAlpbnQJCQlyZWFkX2J1ZmZlcnNfZmxhZ3M7CiAJYm9v bAkJc3luY19tb2RlOwkJLyogdXNpbmcgaW9fbWV0aG9kPXN5bmMgKi8KQEAgLTQ2NCw2ICs0NjUs NyBAQCByZWFkX3N0cmVhbV9sb29rX2FoZWFkKFJlYWRTdHJlYW0gKnN0cmVhbSkKIAkJaWYgKGJs b2NrbnVtID09IEludmFsaWRCbG9ja051bWJlcikKIAkJewogCQkJLyogRW5kIG9mIHN0cmVhbS4g Ki8KKwkJCXN0cmVhbS0+ZGlzdGFuY2Vfb2xkID0gc3RyZWFtLT5kaXN0YW5jZTsKIAkJCXN0cmVh bS0+ZGlzdGFuY2UgPSAwOwogCQkJYnJlYWs7CiAJCX0KQEAgLTg2Miw2ICs4NjQsNyBAQCByZWFk X3N0cmVhbV9uZXh0X2J1ZmZlcihSZWFkU3RyZWFtICpzdHJlYW0sIHZvaWQgKipwZXJfYnVmZmVy X2RhdGEpCiAJCWVsc2UKIAkJewogCQkJLyogTm8gbW9yZSBibG9ja3MsIGVuZCBvZiBzdHJlYW0u ICovCisJCQlzdHJlYW0tPmRpc3RhbmNlX29sZCA9IHN0cmVhbS0+ZGlzdGFuY2U7CiAJCQlzdHJl YW0tPmRpc3RhbmNlID0gMDsKIAkJCXN0cmVhbS0+b2xkZXN0X2J1ZmZlcl9pbmRleCA9IHN0cmVh bS0+bmV4dF9idWZmZXJfaW5kZXg7CiAJCQlzdHJlYW0tPnBpbm5lZF9idWZmZXJzID0gMDsKQEAg LTEwNDYsNiArMTA0OSw5IEBAIHJlYWRfc3RyZWFtX3Jlc2V0KFJlYWRTdHJlYW0gKnN0cmVhbSkK IAlpbnQxNgkJaW5kZXg7CiAJQnVmZmVyCQlidWZmZXI7CiAKKwkvKiByZW1lbWJlciB0aGUgb2xk IGRpc3RhbmNlIChpZiB3ZSByZXNldCBiZWZvcmUgZW5kIG9mIHRoZSBzdHJlYW0pICovCisJc3Ry ZWFtLT5kaXN0YW5jZV9vbGQgPSBNYXgoc3RyZWFtLT5kaXN0YW5jZSwgc3RyZWFtLT5kaXN0YW5j ZV9vbGQpOworCiAJLyogU3RvcCBsb29raW5nIGFoZWFkLiAqLwogCXN0cmVhbS0+ZGlzdGFuY2Ug PSAwOwogCkBAIC0xMDc4LDggKzEwODQsMTIgQEAgcmVhZF9zdHJlYW1fcmVzZXQoUmVhZFN0cmVh bSAqc3RyZWFtKQogCUFzc2VydChzdHJlYW0tPnBpbm5lZF9idWZmZXJzID09IDApOwogCUFzc2Vy dChzdHJlYW0tPmlvc19pbl9wcm9ncmVzcyA9PSAwKTsKIAotCS8qIFN0YXJ0IG9mZiBhc3N1bWlu ZyBkYXRhIGlzIGNhY2hlZC4gKi8KLQlzdHJlYW0tPmRpc3RhbmNlID0gMTsKKwkvKgorCSAqIFJl c3RvcmUgdGhlIG9sZCBkaXN0YW5jZSwgaWYgd2UgaGF2ZSBvbmUuIE90aGVyd2lzZSBzdGFydCBh c3N1bWluZyBkYXRhCisJICogaXMgY2FjaGVkLgorCSAqLworCXN0cmVhbS0+ZGlzdGFuY2UgPSBN YXgoMSwgc3RyZWFtLT5kaXN0YW5jZV9vbGQpOworCXN0cmVhbS0+ZGlzdGFuY2Vfb2xkID0gMDsK IH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRl cnMuZGF0IGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQKaW5kZXgg M2I5ZDgzNDkwLi4zZjI2NGYxY2UgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2Mv Z3VjX3BhcmFtZXRlcnMuZGF0CisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFt ZXRlcnMuZGF0CkBAIC04ODIsNiArODgyLDEzIEBACiAgIGJvb3RfdmFsID0+ICd0cnVlJywKIH0s CiAKK3sgbmFtZSA9PiAnZW5hYmxlX2luZGV4c2Nhbl9wcmVmZXRjaCcsIHR5cGUgPT4gJ2Jvb2wn LCBjb250ZXh0ID0+ICdQR0NfVVNFUlNFVCcsIGdyb3VwID0+ICdRVUVSWV9UVU5JTkdfTUVUSE9E JywKKyAgc2hvcnRfZGVzYyA9PiAnRW5hYmxlcyBwcmVmZXRjaGluZyBmb3IgaW5kZXggc2NhbnMg YW5kIGluZGV4LW9ubHktc2NhbnMuJywKKyAgZmxhZ3MgPT4gJ0dVQ19FWFBMQUlOJywKKyAgdmFy aWFibGUgPT4gJ2VuYWJsZV9pbmRleHNjYW5fcHJlZmV0Y2gnLAorICBib290X3ZhbCA9PiAndHJ1 ZScsCit9LAorCiB7IG5hbWUgPT4gJ2VuYWJsZV9tYXRlcmlhbCcsIHR5cGUgPT4gJ2Jvb2wnLCBj b250ZXh0ID0+ICdQR0NfVVNFUlNFVCcsIGdyb3VwID0+ICdRVUVSWV9UVU5JTkdfTUVUSE9EJywK ICAgc2hvcnRfZGVzYyA9PiAnRW5hYmxlcyB0aGUgcGxhbm5lclwncyB1c2Ugb2YgbWF0ZXJpYWxp emF0aW9uLicsCiAgIGZsYWdzID0+ICdHVUNfRVhQTEFJTicsCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUgYi9zcmMvYmFja2VuZC91dGls cy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKaW5kZXggZGM5ZTIyNTVmLi5kYTUwYWUxNWYg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBs ZQorKysgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKQEAg LTQxMiw2ICs0MTIsNyBAQAogI2VuYWJsZV9pbmNyZW1lbnRhbF9zb3J0ID0gb24KICNlbmFibGVf aW5kZXhzY2FuID0gb24KICNlbmFibGVfaW5kZXhvbmx5c2NhbiA9IG9uCisjZW5hYmxlX2luZGV4 c2Nhbl9wcmVmZXRjaCA9IG9uCiAjZW5hYmxlX21hdGVyaWFsID0gb24KICNlbmFibGVfbWVtb2l6 ZSA9IG9uCiAjZW5hYmxlX21lcmdlam9pbiA9IG9uCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL3N5c3ZpZXdzLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lz dmlld3Mub3V0CmluZGV4IDNiMzdmYWZhNi4uOTcwMmUzMTAzIDEwMDY0NAotLS0gYS9zcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL3N5c3ZpZXdzLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL3N5c3ZpZXdzLm91dApAQCAtMTU5LDYgKzE1OSw3IEBAIHNlbGVjdCBuYW1lLCBzZXR0 aW5nIGZyb20gcGdfc2V0dGluZ3Mgd2hlcmUgbmFtZSBsaWtlICdlbmFibGUlJzsKICBlbmFibGVf aW5jcmVtZW50YWxfc29ydCAgICAgICAgfCBvbgogIGVuYWJsZV9pbmRleG9ubHlzY2FuICAgICAg ICAgICB8IG9uCiAgZW5hYmxlX2luZGV4c2NhbiAgICAgICAgICAgICAgIHwgb24KKyBlbmFibGVf aW5kZXhzY2FuX3ByZWZldGNoICAgICAgfCBvbgogIGVuYWJsZV9tYXRlcmlhbCAgICAgICAgICAg ICAgICB8IG9uCiAgZW5hYmxlX21lbW9pemUgICAgICAgICAgICAgICAgIHwgb24KICBlbmFibGVf bWVyZ2Vqb2luICAgICAgICAgICAgICAgfCBvbgpAQCAtMTczLDcgKzE3NCw3IEBAIHNlbGVjdCBu YW1lLCBzZXR0aW5nIGZyb20gcGdfc2V0dGluZ3Mgd2hlcmUgbmFtZSBsaWtlICdlbmFibGUlJzsK ICBlbmFibGVfc2Vxc2NhbiAgICAgICAgICAgICAgICAgfCBvbgogIGVuYWJsZV9zb3J0ICAgICAg ICAgICAgICAgICAgICB8IG9uCiAgZW5hYmxlX3RpZHNjYW4gICAgICAgICAgICAgICAgIHwgb24K LSgyNSByb3dzKQorKDI2IHJvd3MpCiAKIC0tIFRoZXJlIGFyZSBhbHdheXMgd2FpdCBldmVudCBk ZXNjcmlwdGlvbnMgZm9yIHZhcmlvdXMgdHlwZXMuICBJbmplY3Rpb25Qb2ludAogLS0gbWF5IGJl IHByZXNlbnQgb3IgYWJzZW50LCBkZXBlbmRpbmcgb24gaGlzdG9yeSBzaW5jZSBsYXN0IHBvc3Rt YXN0ZXIgc3RhcnQuCi0tIAoyLjUxLjAKCg== --000000000000d00bb30644d9d645--