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 1wYpzB-000Y6A-1x for pgsql-hackers@arkaria.postgresql.org; Sun, 14 Jun 2026 18:55:10 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wYpzA-008kxC-1M for pgsql-hackers@arkaria.postgresql.org; Sun, 14 Jun 2026 18:55:08 +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 1wYpz8-008kx3-2j for pgsql-hackers@lists.postgresql.org; Sun, 14 Jun 2026 18:55:07 +0000 Received: from mail-wr1-x432.google.com ([2a00:1450:4864:20::432]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wYpz3-00000000MZj-39Hq for pgsql-hackers@lists.postgresql.org; Sun, 14 Jun 2026 18:55:05 +0000 Received: by mail-wr1-x432.google.com with SMTP id ffacd0b85a97d-460662fcb4eso1645915f8f.0 for ; Sun, 14 Jun 2026 11:55:00 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1781463294; cv=none; d=google.com; s=arc-20240605; b=MFkI9f/BguQRC24G8qSPAGuOJF41Xta09MJXJzcX4G+3uJDMf42XKK7N+8nBXkhN2o bzJfKVf0/fDgpsSeSnZTsmkODkbmrpm64kbzg7h+4S3eB2J6WqGETm8/mFWBrddS+JGi KdnD07PmKUCXUT0tCDNaqT30np6waSvXlOhkKfSHepvgm/M1NxAmBJJQmmWF4yofp257 XtMBV9iLxtG9j0CehzoKUmG6epddxq6hwbWLnhffiPoA+WN/pgl8Q0tqG5Iz3xJ+NEmc iFjmaTJRWny66oLjaXj+BX1k8wSLM+a+DSioUQjZlzbwl9eNG89BgNZpOwRnPR9mUmYR y1zw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=uf6LY4duydUns3QPfMkcWKG07dC1nIvazOwJxQUlhX0=; fh=CDIjuxhkGIoWuRQ4Q7ncgbrRz18/28YAgHrbOF6uCHo=; b=A5JAYFO/wjsNo+CxcZoVRHiaAb8AekYJPe5N9BONtTFXqDwJ8w/E7zLBdvsGtuTfrl bEepjADlfpVC8XE7EZIzjdAaX9WfcwIPUAwCgyrFDzSjX9dKGL/hHXjFjKrBhaRPdFDX qF8/41ERAJgqiEQw9kMGcyFfT+YpSDas4XoFvpuBVJfrSbnvMokCvObt0KC+vCz3ayeD qA2DQCmzQ/nCyq3z/Zw8RYG187TQ/yukKscGeEwfuLqkgRRkbKja5GF6o6+xTKmvkc6R mbpyE3zy9H8XOc94oyxZ9MGSMj1WwrQfG5xDmJJuZfn0+uLJJ0VNtRPjrt8jU03yKAwP UZug==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bowt-ie.20251104.gappssmtp.com; s=20251104; t=1781463294; x=1782068094; 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=uf6LY4duydUns3QPfMkcWKG07dC1nIvazOwJxQUlhX0=; b=KBHqxT+69DoIiOxuUAo0FggZtgXjPjTfZmKqWq3QvnTO20chRAPnvImEac0yjWsEUj 8pPvh3gwjwVEhani3CF9IzHELjTl/9QKWCbt97NZoazAavi4yxMvIeEDMAz1eqCZBHVH I4jC7diCy98MBTSDj+QDSiwNL8dVREdJVi0j11RyWgSAvAaLM90nFTd0hndr5LzX7ska a4AGS9wEBlYzsQUhWxU5Dcvjp9YGjnBBEGya6jP6SeHxFL/T7c+gBB5dngvXG9qzEMMH jYIGPGsRhXVqjrNXEbzc3PzeVB12LLISwp1gU80V/5J1o8dI6bkFzjAoRgwIrb5SUZoU 7Exg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781463294; x=1782068094; 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=uf6LY4duydUns3QPfMkcWKG07dC1nIvazOwJxQUlhX0=; b=HBMFa2vLdFgOccaC/ytsV3qlgyyOXkZdiJELTj1cUh4XLzChHEmubezJSZJInrmzaX vdVUQbu+KrhH41HCPMkouqGvzSHA0yEAaiCh6aNwrhcuTVOVfZ3Lt19ATAmBqVPq02px OQOQVZxcLomRlRzehWmHjaOUY74DEFYEoWsv8M5tS/o6m1GSYmObReFhPqTHCHbMXnzM y/1fhTro8zrz6/6D9U25Y7W842YEnT4gjxLQxzbbU8r0NjTxSb028mL1zrhlPMHswui4 BAcPSMmYmlMmoAya7MuIWmsXI4cozLwTaBBpNHI3AqQrcR0vgpxJa3RNwDvtl5/H6mcW LbBA== X-Forwarded-Encrypted: i=1; AFNElJ+bbGFTZxUIsLPS5hBClNIKy0MbAkadS4YP7b91I0cK3sPbQHqQvwJi3quyewkYnHXSZgc2pd38A/pyItEt@lists.postgresql.org X-Gm-Message-State: AOJu0YzW3KPuCnv3M3fpUetaRXsFw+Fq7/2egzPx+srk/el2NCVJ4Pig 8h07Uz4/9M3TumKKsphp0s4aOF7NbSB23vY653Dbd0kzqyj15pPFd888OvGW3fZgNQ/dmOSu3Ha 6FyfTXt2I7WalAHH7OlUmrKFnR2t31245LtU3qMWH2Q== X-Gm-Gg: Acq92OGTmm/qd5k9P6mqv76C9i1hAyyLkVdOix3lqJ7vhhK4Jdm9++/NtGQAYPpezIT VMeIs9N1y/u3U3QKHKY711C1Kp17MtrkikowpGE4yjBUOIJut39+QCixOZm22ZmEs9DJEHIG3MP 0wzIb5Fm424D5ND/7FJBmGioRFlam4fxQUHs33xLNnXjpcpRNQFYQRwej5fExl4lV4c5ECqKR6u DbnkRvN/pZ8967gDSFkFYS+s/IM81OAWthi3zNVsHX6FP4z1B4G3hdDweMZPV03uu4xxMDl4XP1 8bM67Pjpb8Tuqfl5HfRC/NjvG65NNTW9/4EspsmAhiC0A1BmjdojaQ== X-Received: by 2002:a5d:64c6:0:b0:460:3234:4475 with SMTP id ffacd0b85a97d-4606dbe5d3emr16858772f8f.43.1781463294323; Sun, 14 Jun 2026 11:54:54 -0700 (PDT) MIME-Version: 1.0 References: <6sphk3ycctmbihlrykts7uj6mjakop6wrq2dhe3vnlmrnldz2f@uuwmkd6jjrxa> In-Reply-To: From: Peter Geoghegan Date: Sun, 14 Jun 2026 14:54:26 -0400 X-Gm-Features: AVVi8CfDgXAE88TZGJWpaQpltUCgzZFXlZIMbgyE7BXCCv4UvIGVY2EA7U4HNCM Message-ID: Subject: Re: index prefetching To: Andres Freund Cc: Tomas Vondra , Alexandre Felipe , Thomas Munro , Nazir Bilal Yavuz , Robert Haas , Melanie Plageman , PostgreSQL Hackers , Georgios , Konstantin Knizhnik , Dilip Kumar Content-Type: multipart/mixed; boundary="000000000000d6f56006543b3e3b" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000d6f56006543b3e3b Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Sat, Jun 6, 2026 at 8:52=E2=80=AFPM Peter Geoghegan wrote: > Attached is v26, which resolves many outstanding issues from when we > paused work on this, at the end of the final CF for Postgres 19. Attached is v27, which cleans up some remaining loose ends. * The standout item here is that v27 simplifies heapam_index_getnext_scanbatch_pos by making it wholly rely on new, higher level helper functions in indexbatch.h. Similar simplifications exist for heapam_index_prefetch_next_block, our read stream callback. Andres requested these changes on April 5 due to concerns about code duplication across table AMs. That's one reason to do things this way, but there's another: heapam is no longer "partially responsible" for managing the scan's batch ring buffer. For example, heapam_index_getnext_scanbatch_pos no longer has to invalidate prefetchPos itself so that heapam_index_prefetch_next_block cannot become confused by prefetchPos.batch getting so far behind scanPos.batch, making it appear ahead instead of behind (due to uint8 wraparound). In general, heapam knows nothing about these batchringbuf implementation details as of v27. Removing an obsolescent scanBatch from the ringbuffer also lives in one of the new helpers -- that's obviously one aspect of batchringbuf management that heapam shouldn't have to deal with. Especially because some of the indexbatch.c helpers assume that the table AM follows certain conventions. In particular, the routines that deal with mark/restore assume that scanBatch must be the head slot/entry of batchringbuf when called; the new helper functions enforce that scheme. Note that batchringbuf management works essentially the same way as in previous versions; v27 improves things by fully taking it out of heapam's hands. Importantly, the concept of the table AM applying its own handling when scanPos falls behind prefetchPos is now encapsulated in these new helper functions. This doesn't assume the use of a read stream, nor does it place other inappropriate restrictions on table AMs. The heapam implementation side keeps its handling for obviously heapam-related tasks: heapam_index_getnext_scanbatch_pos must still return a TID using heapam-specific logic (which considers the visibility map cache and so on), and must still unpause a paused read stream (heapam owns its read stream, and it's possible that other table AMs won't even use a read stream but will require a similar pausing mechanism). Obviously, heapam_index_prefetch_next_block still pauses the read stream when it detects that we've run out of batchringbuf slots. (Basically, the concept of pausing a read stream is decoupled from the concept of running out of batchringbuf slots.) Version 27 also includes a tangentially related style improvement: * v27 moves most of the new batch-related helpers that previously appeared in relscan.h into indexbatch.h. We still declare structs like IndexScanBatchData and BatchRingBuffer in relscan.h (which is needed to embed batchringbuf in IndexScanDesc), but all batch accessor functions and batchringbuf manipulation/maintenance functions now live in indexbatch.h. This was a pretty natural consequence of inventing the aforementioned new higher-level helper functions that heapam now uses. Some of the "Elementary batch ring buffer operation" functions (e.g., index_scan_batch_append, index_scan_pos_startbatch, index_scan_pos_advance, index_scan_batch_full) are no longer called directly by heapam; they are now only called through the new higher level helper functions. Others (e.g., index_scan_pos_cmp) are still called from within heapam, but only within documenting assertions. > We do keep the underlying heapam struct (IndexFetchHeapData), which is > now accessed through a void pointer in IndexScanDesc -- exactly like > it's done with index AMs. There's no more "inheritance from > IndexFetchTableData", which seems to add nothing anymore. * This new v27 renames IndexFetchHeapData to IndexScanHeapData. This makes sense because the struct now represents "the heapam private state that relates to an index scan", not "the heapam state that relates to the part of the index scan that just deals with fetching heap tuples for a given TID". I also added new and better test infrastructure: * Valgrind marks recycled batch memory as UNDEFINED, which should catch cases where AMs have dangling references to recycled batch memory that was never actually pfree'd. * Added test_indexscan, a new test module that performs index scans with a variety of snapshot types (plus accompanying pg_regress tests). Without this, no test will fail if each call to table_index_getnext_slot (actually, the underlying slot-based callback that heapam implements) starts with scan->xs_heap_continue set to false unconditionally. IOW, we actually have some chance of noticing if there's a bug that makes heapam fail to correctly maintain scan->xs_heap_continue. That's only really possible during non-MVCC scans, and is very difficult to test without dedicated infrastructure such as this. There's also a new isolation test (dirty_snapshot.spec) which illustrates the role of dirty snapshots in constraint enforcement. For illustrative purposes, it compares what a dirty snapshot sees to what the xact's active MVCC snapshot sees at the same point in time across various isolation test schedules (e.g., xact commit vs xact abort, HOT update vs non-HOT update). I'm not sure if this extra isolation test is actually worth the added test cycles, but thought I'd include it for now. Maybe there's a historical bug that we could add test coverage for using dirty_snapshot.spec? * Related to the last item, v27 formalizes the rules around what is allowed during non-MVCC scans. I think it's worth grounding the rules in this area rigorously, supported by defensive documentation assertions. It probably won't end up mattering to anybody, but I see no reason not to take a position on this stuff -- it doesn't cost us much. An assertion (in the prefetching patch) now verifies that non-MVCC scans never change scan direction. These scans are still allowed to scan either forwards or backwards (because selfuncs.c expects to be able to scan either way), but they are not allowed to change the direction of a scan that's already underway. It's fairly obvious that this cannot be allowed; what if the scan changes direction while we're traversing a HOT chain? There's no provision for reversing scan direction when stopped in the middle of a HOT chain. Whereas it should be okay to "scan a HOT chain in the forwards direction" during a backwards scan -- that still ought to produce reasonable answers. > Things I haven't done > --------------------- > > * There have been recent CI failures on "linux-autoconf", that I > haven't debugged. > > 001_aio.pl seems to reliably report "Dubious, test returned 4 (wstat > 1024, 0x400)" on this CI target. I fully expect this v26 to fail when > CFTester runs it through CI. No progress here. > * I've not given much thought to improving the cost model of index > scans, to account for prefetching. Today several of us (Robert Haas, Tomas, Andres, and I) discussed this privately over IM. I hope that we'll have made concrete progress on it before long, because it's really important. I even think the main benefit of this work might be enabling the planner to use plain scans (and index-only scans) more often in general; this will be very beneficial even with workloads whose working set fits in shared_buffers. Prefetching makes it safe to be optimistic about the added overhead from random I/O, particularly relative to equivalent bitmap scans, so no actual prefetching is required for users to see significant benefits. > * Continued to care about pg_attribute_always_inline making certain > function prototypes overlong and ugly. > > Andres has a patch to shorten pg_attribute_always_inline to > pg_always_inline in the open CF, which will presumably be committed > soon. I don't want to forego prototypes; I am particular about the > order in which function definitions appear. For now, ugly and overlong > prototypes seem acceptable (I won't commit any patches with that > issue). Still waiting for Andres' pg_always_inline patch to get committed. -- Peter Geoghegan --000000000000d6f56006543b3e3b Content-Type: application/octet-stream; name="v27-0007-Allow-read_stream_reset-to-not-wait-for-IO-compl.patch" Content-Disposition: attachment; filename="v27-0007-Allow-read_stream_reset-to-not-wait-for-IO-compl.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqe4shkr3 RnJvbSA0MDEyNTRmMTBlODhkOWNiMjFiYzVkYzI0NWJmOGYzMTRjMjQ2MDZiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFN1biwgNSBBcHIgMjAyNiAwMDo0Mzo1NCAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggdjI3IDcv OV0gQWxsb3cgcmVhZF9zdHJlYW1fcmVzZXQoKSB0byBub3Qgd2FpdCBmb3IgSU8KIGNvbXBsZXRp b24KCk5vdCB3YWl0aW5nIGZvciBJTyBkdXJpbmcgcmVhZF9zdHJlYW1fcmVzZXQoKSBjYW4gYmUg aW1wb3J0YW50IGZvciBwZXJmb3JtYW5jZQppbiBjYXNlcyB3aGVyZSByZWFkIHN0cmVhbXMgYXJl IGZyZXF1ZW50bHkgcmVzZXQgYmVmb3JlIHRoZSBlbmQgaXMKcmVhY2hlZC4gQ3VycmVudCB1c2Vy cyBkbyBub3QgY29tbW9ubHkgZG8gdGhhdCwgYnV0IHRoZSB1cGNvbWluZyB3b3JrIHRvIHVzZSBh CnJlYWQgc3RyZWFtIHRvIHByZWZldGNoIHRhYmxlIGJsb2NrcyBhcyBwYXJ0IG9mIGluZGV4IHNj YW5zIGNhbiBkbyBzbwpmcmVxdWVudGx5IGluIHNvbWUgcXVlcnkgcGF0dGVybnMuIEUuZy4gaWYg dGhlcmUgaXMgYW4gaW5kZXggc2NhbiBvbiB0aGUgaW5uZXIKc2lkZSBvZiBhIG5lc3RlZCBsb29w IGFudGlqb2luLgoKVGhpcyB0YWtlcyBhIGJpdCBvZiBjYXJlIHRvIGRvIHJpZ2h0LiBKdXN0IGlu dHJvZHVjaW5nIHN1cHBvcnQgZm9yIGFiYW5kb25pbmcKYSBBSU8gaGFuZGxlIGNvdWxkIGxlYWQg dG8gdGhlIElPJ3MgY29tcGxldGlvbiBub3QgYmVpbmcgcHJvY2Vzc2VkIHVudGlsIHRoZQpiYWNr ZW5kIGV4aXRzLiBUaGF0J3MgYmFkIGJlY2F1c2UgaXQgd291bGQgbGVhZCB0byByZXNvdXJjZXMg aGVsZCBvbnRvIGZvciB0aGUKSU8gKGUuZy4gYnVmZmVyIHBpbnMpIG5vdCBiZWluZyByZWxlYXNl ZCBhbmQgdGhlIGhhbmRsZSBzaG93aW5nIHVwIGluIHBnX2Fpb3MuCgpUbyBhdm9pZCB0aGF0LCB0 aGUgZXhpc3RpbmcgcmVzb3duZXIgY2xlYW51cCBpcyBjaGFuZ2VkIHRvIHdhaXQgZm9yIHRoZSBJ TydzCmNvbXBsZXRpb24sIHdoaWNoIGd1YXJhbnRlZXMgdGhhdCBieSB0aGUgZW5kIG9mIHRoZSBz dGF0ZW1lbnQgdGhlIElPIGhhcwpjb21wbGV0ZWQuIFdlIG1pZ2h0IGV2ZW50dWFsbHkgd2FudCB0 byByZWxheCB0aGF0IGZvciBzb21lIG9wZXJhdGlvbnMgKGUuZy4sCmZvciBiYWNrZ3JvdW5kIFdB TCB3cml0ZXMgb3Igb3Bwb3J0dW5pc3RpYyBwcmVmZXRjaGluZykuCgpEaXNjdXNzaW9uOiBodHRw czovL3Bvc3Rnci5lcy9tL2YzeHhmcmthZmp4cHlxeHl3Y3hyaWN4Z3lpemppcmZjZXljaHl4c2du N2J3anA1ZWRhQGt3YmR1aHk3dGZtdQotLS0KIHNyYy9pbmNsdWRlL3N0b3JhZ2UvYWlvLmggICAg ICAgICAgICAgICAgICAgfCAgIDIgKwogc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3IuaCAgICAg ICAgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9haW8uYyAgICAgICAg ICAgICAgIHwgMTAyICsrKysrKysrKysrKysrKystLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYWlv L3JlYWRfc3RyZWFtLmMgICAgICAgfCAgMzEgKysrKy0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL2J1 ZmZlci9idWZtZ3IuYyAgICAgICAgIHwgIDM0ICsrKysrKysKIHNyYy90ZXN0L21vZHVsZXMvdGVz dF9haW8vdC8wMDFfYWlvLnBsICAgICAgfCAxMDcgKysrKysrKysrKysrKysrKysrKysKIHNyYy90 ZXN0L21vZHVsZXMvdGVzdF9haW8vdGVzdF9haW8tLTEuMC5zcWwgfCAgIDIgKy0KIHNyYy90ZXN0 L21vZHVsZXMvdGVzdF9haW8vdGVzdF9haW8uYyAgICAgICAgfCAgMzggKysrKystLQogOCBmaWxl cyBjaGFuZ2VkLCAyODUgaW5zZXJ0aW9ucygrKSwgMzIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9haW8uaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYWlvLmgK aW5kZXggZWM1NDNiNzg0Li5hYjdmYWQxMzAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3Jh Z2UvYWlvLmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9haW8uaApAQCAtMzI4LDYgKzMyOCw4 IEBAIGV4dGVybiBpbnQJcGdhaW9fd3JlZl9nZXRfaWQoUGdBaW9XYWl0UmVmICppb3cpOwogZXh0 ZXJuIHZvaWQgcGdhaW9fd3JlZl93YWl0KFBnQWlvV2FpdFJlZiAqaW93KTsKIGV4dGVybiBib29s IHBnYWlvX3dyZWZfY2hlY2tfZG9uZShQZ0Fpb1dhaXRSZWYgKmlvdyk7CiAKK2V4dGVybiB2b2lk IHBnYWlvX3dyZWZfYWJhbmRvbihQZ0Fpb1dhaXRSZWYgKmlvdyk7CisKIAogCiAvKiAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3Iu aCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmgKaW5kZXggNjgzN2IzNWZjLi5jMDJiZmQ2 ODUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmgKKysrIGIvc3JjL2lu Y2x1ZGUvc3RvcmFnZS9idWZtZ3IuaApAQCAtMjUyLDYgKzI1Miw3IEBAIGV4dGVybiBib29sIFN0 YXJ0UmVhZEJ1ZmZlcnMoUmVhZEJ1ZmZlcnNPcGVyYXRpb24gKm9wZXJhdGlvbiwKIAkJCQkJCQkg aW50ICpuYmxvY2tzLAogCQkJCQkJCSBpbnQgZmxhZ3MpOwogZXh0ZXJuIGJvb2wgV2FpdFJlYWRC dWZmZXJzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24pOworZXh0ZXJuIHZvaWQgQWJh bmRvblJlYWRCdWZmZXJzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24pOwogCiBleHRl cm4gdm9pZCBSZWxlYXNlQnVmZmVyKEJ1ZmZlciBidWZmZXIpOwogZXh0ZXJuIHZvaWQgVW5sb2Nr UmVsZWFzZUJ1ZmZlcihCdWZmZXIgYnVmZmVyKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0 b3JhZ2UvYWlvL2Fpby5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vYWlvLmMKaW5kZXggOGY3 ZTI2NjA3Li43MDA5ZmI3ZjYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL2Fp by5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL2Fpby5jCkBAIC0xNTIsMTEgKzE1Miwx NSBAQCBjb25zdCBJb01ldGhvZE9wcyAqcGdhaW9fbWV0aG9kX29wczsKICAqIG9wZXJhdGlvbiBz dWNjZWVkZWQgYW5kIGRldGFpbHMgYWJvdXQgdGhlIGZpcnN0IGZhaWx1cmUsIGlmIGFueS4gVGhl IGVycm9yCiAgKiBjYW4gYmUgcmFpc2VkIC8gbG9nZ2VkIHdpdGggcGdhaW9fcmVzdWx0X3JlcG9y dCgpLgogICoKLSAqIFRoZSBsaWZldGltZSBvZiB0aGUgbWVtb3J5IHBvaW50ZWQgdG8gYmUgKnJl dCBuZWVkcyB0byBiZSBhdCBsZWFzdCBhcyBsb25nCi0gKiBhcyB0aGUgcGFzc2VkIGluIHJlc293 bmVyLiBJZiB0aGUgcmVzb3duZXIgcmVsZWFzZXMgcmVzb3VyY2VzIGJlZm9yZSB0aGUgSU8KLSAq IGNvbXBsZXRlcyAodHlwaWNhbGx5IGR1ZSB0byBhbiBlcnJvciksIHRoZSByZWZlcmVuY2UgdG8g KnJldCB3aWxsIGJlCi0gKiBjbGVhcmVkLiBJbiBjYXNlIG9mIHJlc293bmVyIGNsZWFudXAgKnJl dCB3aWxsIG5vdCBiZSB1cGRhdGVkIHdpdGggdGhlCi0gKiByZXN1bHRzIG9mIHRoZSBJTyBvcGVy YXRpb24uCisgKiBUaGUgbGlmZXRpbWUgb2YgdGhlIG1lbW9yeSBwb2ludGVkIHRvIGJ5ICpyZXQg bmVlZHMgdG8gYmUgYXQgbGVhc3QgYXMgbG9uZworICogYXMgdGhlIHBhc3NlZCBpbiByZXNvd25l ci4KKyAqCisgKiBJZiB0aGUgcmVzb3duZXIgcmVsZWFzZXMgcmVzb3VyY2VzIGJlZm9yZSB0aGUg SU8gY29tcGxldGVzICh0eXBpY2FsbHkgZHVlCisgKiB0byBhbiBlcnJvciksIHRoZSByZWZlcmVu Y2UgdG8gKnJldCB3aWxsIGJlIGNsZWFyZWQuIEluIGNhc2Ugb2YgcmVzb3duZXIKKyAqIGNsZWFu dXAgKnJldCB3aWxsIG5vdCBiZSB1cGRhdGVkIHdpdGggdGhlIHJlc3VsdHMgb2YgdGhlIElPIG9w ZXJhdGlvbi4KKyAqCisgKiBJZiB0aGUgY2FsbGVyIGxvc2VzIGludGVyZXN0IGluIHRoZSBJTyBi ZWZvcmUgY29tcGxldGlvbgorICogcGdhaW9fd3JlZl9hYmFuZG9uKCkgY2FuIGJlIHVzZWQuCiAg Ki8KIFBnQWlvSGFuZGxlICoKIHBnYWlvX2lvX2FjcXVpcmUoc3RydWN0IFJlc291cmNlT3duZXJE YXRhICpyZXNvd25lciwgUGdBaW9SZXR1cm4gKnJldCkKQEAgLTI3OCw2ICsyODIsMTQgQEAgcGdh aW9faW9fcmVsZWFzZV9yZXNvd25lcihkbGlzdF9ub2RlICppb2hfbm9kZSwgYm9vbCBvbl9lcnJv cikKIAlSZXNvdXJjZU93bmVyRm9yZ2V0QWlvSGFuZGxlKGlvaC0+cmVzb3duZXIsICZpb2gtPnJl c293bmVyX25vZGUpOwogCWlvaC0+cmVzb3duZXIgPSBOVUxMOwogCisJLyoKKwkgKiBOZWVkIHRv IHVucmVnaXN0ZXIgdGhlIHJlcG9ydGluZyBvZiB0aGUgSU8ncyByZXN1bHQsIHRoZSBtZW1vcnkg aXQncworCSAqIHJlZmVyZW5jaW5nIGxpa2VseSBoYXMgZ29uZSBhd2F5LiBEbyBzbyBiZWZvcmUg cG90ZW50aWFsbHkgd2FpdGluZworCSAqIGJlbG93LCBhcyB0aGF0IGNvdWxkIGNhdXNlIHRoZSB1 bmRlc2lyZWQgd3JpdGVzLgorCSAqLworCWlmIChpb2gtPnJlcG9ydF9yZXR1cm4pCisJCWlvaC0+ cmVwb3J0X3JldHVybiA9IE5VTEw7CisKIAlzd2l0Y2ggKChQZ0Fpb0hhbmRsZVN0YXRlKSBpb2gt PnN0YXRlKQogCXsKIAkJY2FzZSBQR0FJT19IU19JRExFOgpAQCAtMzAwLDIyICszMTIsMzIgQEAg cGdhaW9faW9fcmVsZWFzZV9yZXNvd25lcihkbGlzdF9ub2RlICppb2hfbm9kZSwgYm9vbCBvbl9l cnJvcikKIAkJCWlmICghb25fZXJyb3IpCiAJCQkJZWxvZyhXQVJOSU5HLCAiQUlPIGhhbmRsZSB3 YXMgbm90IHN1Ym1pdHRlZCIpOwogCQkJcGdhaW9fc3VibWl0X3N0YWdlZCgpOwotCQkJYnJlYWs7 CisKKwkJCS8qIG5vdyB0aGF0IHRoZSBJTyBpcyBzdWJtaXR0ZWQsIG5lZWQgdG8gd2FpdCAqLwor CQkJcGdfZmFsbHRocm91Z2g7CiAJCWNhc2UgUEdBSU9fSFNfU1VCTUlUVEVEOgogCQljYXNlIFBH QUlPX0hTX0NPTVBMRVRFRF9JTzoKIAkJY2FzZSBQR0FJT19IU19DT01QTEVURURfU0hBUkVEOgog CQljYXNlIFBHQUlPX0hTX0NPTVBMRVRFRF9MT0NBTDoKLQkJCS8qIHRoaXMgaXMgZXhwZWN0ZWQg dG8gaGFwcGVuICovCisKKwkJCS8qCisJCQkgKiBUaGlzIGlzIGV4cGVjdGVkIHRvIGhhcHBlbiwg ZS5nLiBhZnRlciBhbiBlcnJvciBvciBhZnRlcgorCQkJICogcGdhaW9fd3JlZl9hYmFuZG9uKCkg d2FzIGNhbGxlZC4KKwkJCSAqCisJCQkgKiBGb3Igbm93IGFsd2F5cyB3YWl0IGZvciB0aGUgSU8n cyBjb21wbGV0aW9uIGR1cmluZyByZXNvd25lcgorCQkJICogY2xlYW51cC4gVGhpcyBwcm92aWRl cyBhIGJvdW5kIG9uIGhvdyBsb25nIGFmdGVyIGFuIGVycm9yIG9yCisJCQkgKiBwZ2Fpb193cmVm X2FiYW5kb24oKSBhbiBJTyBoYW5kbGUgd2lsbCBzaG93IHVwIGFzIHVzZWQgYW5kIGhvdworCQkJ ICogbG9uZyBhbiB1bmNvbXBsZXRlZCBJTyBjYW4gY2F1c2UgcmVzb3VyY2VzIHRvIGJlIHJldGFp bmVkLgorCQkJICoKKwkJCSAqIEl0IGlzIHF1aXRlIHBvc3NpYmxlIHRoYXQgd2UgZXZlbnR1YWxs eSB3YW50IHRvIHN1cHBvcnQgSU8KKwkJCSAqIG9wZXJhdGlvbnMgdGhhdCBsYXN0IGxvbmdlciwg ZS5nLiBmb3IgV0FMIHdyaXRlcyBpbiB0aGUKKwkJCSAqIGJhY2tncm91bmQuIElmIHNvIHdlIHdp bGwgZWl0aGVyIG5lZWQgdG8gdXNlIGEgbG9uZ2VyIGxpdmVkCisJCQkgKiByZXNvd25lciBvciBh ZGQgYSBmbGFnIGNvbnRyb2xsaW5nIHdoZW4gdGhpcyBjbGVhbnVwIGhhcHBlbnMuCisJCQkgKi8K KwkJCXBnYWlvX2lvX3dhaXQoaW9oLCBpb2gtPmdlbmVyYXRpb24pOwogCQkJYnJlYWs7CiAJfQog Ci0JLyoKLQkgKiBOZWVkIHRvIHVucmVnaXN0ZXIgdGhlIHJlcG9ydGluZyBvZiB0aGUgSU8ncyBy ZXN1bHQsIHRoZSBtZW1vcnkgaXQncwotCSAqIHJlZmVyZW5jaW5nIGxpa2VseSBoYXMgZ29uZSBh d2F5LgotCSAqLwotCWlmIChpb2gtPnJlcG9ydF9yZXR1cm4pCi0JCWlvaC0+cmVwb3J0X3JldHVy biA9IE5VTEw7Ci0KIAlSRVNVTUVfSU5URVJSVVBUUygpOwogfQogCkBAIC0xMDUwLDYgKzEwNzIs NTggQEAgcGdhaW9fd3JlZl9jaGVja19kb25lKFBnQWlvV2FpdFJlZiAqaW93KQogCXJldHVybiBm YWxzZTsKIH0KIAorLyoKKyAqIERlY2xhcmUgdGhhdCBhIHdhaXQgcmVmZXJlbmNlIHRvIGFuIElP LCBzdGFydGVkIGJ5IHRoaXMgYmFja2VuZCwgaXMgbm90IG9mCisgKiBpbnRlcmVzdCB0byB0aGlz IGJhY2tlbmQgYW55bW9yZS4gT25jZSBjYWxsZWQsIHRoZSBQZ0Fpb1JldHVybiAqcmV0IHBhc3Nl ZAorICogdG8gcGdhaW9faW9fYWNxdWlyZVtfbmJdKCkgd2lsbCBub3QgYmUgdXBkYXRlZCBhbnlt b3JlIGFuZCB0aHVzIGNhbiBiZQorICogZnJlZWQuCisgKi8KK3ZvaWQKK3BnYWlvX3dyZWZfYWJh bmRvbihQZ0Fpb1dhaXRSZWYgKmlvdykKK3sKKwl1aW50NjQJCXJlZl9nZW5lcmF0aW9uOworCWJv b2wJCWFtX293bmVyOworCVBnQWlvSGFuZGxlICppb2g7CisJUGdBaW9IYW5kbGVTdGF0ZSBzdGF0 ZTsKKworCWlvaCA9IHBnYWlvX2lvX2Zyb21fd3JlZihpb3csICZyZWZfZ2VuZXJhdGlvbik7CisK KwlhbV9vd25lciA9IGlvaC0+b3duZXJfcHJvY25vID09IE15UHJvY051bWJlcjsKKworCS8qCisJ ICogSXQgaXMgc2FmZSB0byBwZXJmb3JtIHRoaXMgY2hlY2sgYmVmb3JlIGNoZWNraW5nIGlmIHRo ZSBJTyB3YXMgcmVjeWNsZWQKKwkgKiAoYW5kIGJlZm9yZSB3ZSBob2xkIGludGVycnVwdHMpIGFz IHRoZSBvd25lciBvZiBhbiBJTyBjYW5ub3QgY2hhbmdlLgorCSAqLworCWlmICghYW1fb3duZXIp CisJCWVsb2coRVJST1IsICJvbmx5IElPcyBvd25lZCBieSBjdXJyZW50IGJhY2tlbmQgY2FuIGJl IGFiYW5kb25lZCIpOworCisJLyoKKwkgKiBUbyBlbnN1cmUgdGhhdCB0aGUgSU8gd29uJ3QgYmUg cmVjeWNsZWQgd2hpbGUgd2UgY2hlY2sgKGUuZy4gZHVyaW5nIHRoZQorCSAqIGVtaXNzaW9uIG9m IGEgZGVidWcgbWVzc2FnZSkuCisJICovCisJSE9MRF9JTlRFUlJVUFRTKCk7CisKKwlpZiAoIXBn YWlvX2lvX3dhc19yZWN5Y2xlZChpb2gsIHJlZl9nZW5lcmF0aW9uLCAmc3RhdGUpKQorCXsKKwkJ cGdhaW9fZGVidWdfaW8oREVCVUczLCBpb2gsCisJCQkJCSAgICJkaXNjYXJkaW5nIHJlc3VsdCAl cCwgcmVzb3duZXI6ICVwIiwKKwkJCQkJICAgaW9oLT5yZXBvcnRfcmV0dXJuLCBpb2gtPnJlc293 bmVyKTsKKworCQlpZiAoc3RhdGUgPCBQR0FJT19IU19TVUJNSVRURUQpCisJCQllbG9nKEVSUk9S LCAiYWJhbmRvbmluZyBJTyBpbiB3cm9uZyBzdGF0ZTogJWQiLCBzdGF0ZSk7CisKKwkJLyoKKwkJ ICogQWxsIHdlIG5lZWQgdG8gZG8gdG8gYWJhbmRvbiB0aGUgSU8gaXMgdG8gY2xlYXIgaXRzIHJl cG9ydF9yZXR1cm4KKwkJICogZmllbGQuIFdpdGhvdXQgdGhhdCB3ZSBjb3VsZCBlbmQgdXAgd3Jp dGluZyB0byBmcmVlZC9yZXVzZWQgbWVtb3J5CisJCSAqIHdoZW4gdGhlIElPIGNvbXBsZXRlcy4K KwkJICovCisJCWlmIChpb2gtPnJlcG9ydF9yZXR1cm4pCisJCQlpb2gtPnJlcG9ydF9yZXR1cm4g PSBOVUxMOworCX0KKworCVJFU1VNRV9JTlRFUlJVUFRTKCk7Cit9CisKIAogCiAvKiAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vcmVh ZF9zdHJlYW0uYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3RyZWFtLmMKaW5kZXgg YTMxODUzOWU1Li4xMjVkOGJhYmYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlv L3JlYWRfc3RyZWFtLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vcmVhZF9zdHJlYW0u YwpAQCAtMTEwLDcgKzExMCw4IEBAIHN0cnVjdCBSZWFkU3RyZWFtCiAJICogZm9yIElPIGNvbWJp bmluZyBldmVuIGluIGNhc2VzIHdoZXJlIHRoZSBJL08gc3Vic3lzdGVtIGNhbiBrZWVwIHVwIGF0 IGEKIAkgKiBsb3cgcmVhZC1haGVhZCBkaXN0YW5jZSwgYXMgZG9pbmcgbGFyZ2VyIElPcyBpcyBt b3JlIGVmZmljaWVudC4KIAkgKgotCSAqIFNldCB0byAwIHdoZW4gdGhlIGVuZCBvZiB0aGUgc3Ry ZWFtIGlzIHJlYWNoZWQuCisJICogU2V0IHRvIDAgd2hlbiB0aGUgZW5kIG9mIHRoZSBzdHJlYW0g aXMgcmVhY2hlZCBhbmQgdG8gLTEgd2hlbiB0aGUKKwkgKiBzdHJlYW0gaXMgcmVzZXQuCiAJICov CiAJaW50MTYJCWNvbWJpbmVfZGlzdGFuY2U7CiAJaW50MTYJCXJlYWRhaGVhZF9kaXN0YW5jZTsK QEAgLTU1Myw4ICs1NTQsOCBAQCByZWFkX3N0cmVhbV9zdGFydF9wZW5kaW5nX3JlYWQoUmVhZFN0 cmVhbSAqc3RyZWFtKQogc3RhdGljIGlubGluZSBib29sCiByZWFkX3N0cmVhbV9zaG91bGRfbG9v a19haGVhZChSZWFkU3RyZWFtICpzdHJlYW0pCiB7Ci0JLyogSWYgdGhlIGNhbGxiYWNrIGhhcyBz aWduYWxlZCBlbmQtb2Ytc3RyZWFtLCB3ZSdyZSBkb25lICovCi0JaWYgKHN0cmVhbS0+cmVhZGFo ZWFkX2Rpc3RhbmNlID09IDApCisJLyogSWYgd2UgcmVhY2hlZCBlbmQtb2Ytc3RyZWFtIG9yIGEg cmVzZXQsIHdlJ3JlIGRvbmUgKi8KKwlpZiAoc3RyZWFtLT5yZWFkYWhlYWRfZGlzdGFuY2UgPD0g MCkKIAkJcmV0dXJuIGZhbHNlOwogCiAJLyogbmV2ZXIgc3RhcnQgbW9yZSBJT3MgdGhhbiBvdXIg Y2FwICovCkBAIC02MzIsNyArNjMzLDcgQEAgcmVhZF9zdHJlYW1fc2hvdWxkX2lzc3VlX25vdyhS ZWFkU3RyZWFtICpzdHJlYW0pCiAJICogSWYgdGhlIGNhbGxiYWNrIGhhcyBzaWduYWxlZCBlbmQt b2Ytc3RyZWFtLCBzdGFydCB0aGUgcGVuZGluZyByZWFkCiAJICogaW1tZWRpYXRlbHkuIFRoZXJl IGlzIG5vIGZ1cnRoZXIgcG90ZW50aWFsIGZvciBJTyBjb21iaW5pbmcuCiAJICovCi0JaWYgKHN0 cmVhbS0+cmVhZGFoZWFkX2Rpc3RhbmNlID09IDApCisJaWYgKHN0cmVhbS0+cmVhZGFoZWFkX2Rp c3RhbmNlIDw9IDApCiAJCXJldHVybiB0cnVlOwogCiAJLyoKQEAgLTc0MCw3ICs3NDEsNyBAQCBy ZWFkX3N0cmVhbV9sb29rX2FoZWFkKFJlYWRTdHJlYW0gKnN0cmVhbSkKIAkgKiBzdHJlYW0uICBJ biB0aGUgd29yc3QgY2FzZSB3ZSBjYW4gYWx3YXlzIG1ha2UgcHJvZ3Jlc3Mgb25lIGJ1ZmZlciBh dCBhCiAJICogdGltZS4KIAkgKi8KLQlBc3NlcnQoc3RyZWFtLT5waW5uZWRfYnVmZmVycyA+IDAg fHwgc3RyZWFtLT5yZWFkYWhlYWRfZGlzdGFuY2UgPT0gMCk7CisJQXNzZXJ0KHN0cmVhbS0+cGlu bmVkX2J1ZmZlcnMgPiAwIHx8IHN0cmVhbS0+cmVhZGFoZWFkX2Rpc3RhbmNlIDw9IDApOwogCiAJ aWYgKHN0cmVhbS0+YmF0Y2hfbW9kZSkKIAkJcGdhaW9fZXhpdF9iYXRjaG1vZGUoKTsKQEAgLTEx NDYsOCArMTE0Nyw4IEBAIHJlYWRfc3RyZWFtX25leHRfYnVmZmVyKFJlYWRTdHJlYW0gKnN0cmVh bSwgdm9pZCAqKnBlcl9idWZmZXJfZGF0YSkKIAl7CiAJCUFzc2VydChzdHJlYW0tPm9sZGVzdF9i dWZmZXJfaW5kZXggPT0gc3RyZWFtLT5uZXh0X2J1ZmZlcl9pbmRleCk7CiAKLQkJLyogRW5kIG9m IHN0cmVhbSByZWFjaGVkPyAgKi8KLQkJaWYgKHN0cmVhbS0+cmVhZGFoZWFkX2Rpc3RhbmNlID09 IDApCisJCS8qIEVuZCBvZiBzdHJlYW0gLyByZXNldCByZWFjaGVkPyAgKi8KKwkJaWYgKHN0cmVh bS0+cmVhZGFoZWFkX2Rpc3RhbmNlIDw9IDApCiAJCQlyZXR1cm4gSW52YWxpZEJ1ZmZlcjsKIAog CQkvKgpAQCAtMTE4OCw3ICsxMTg5LDE3IEBAIHJlYWRfc3RyZWFtX25leHRfYnVmZmVyKFJlYWRT dHJlYW0gKnN0cmVhbSwgdm9pZCAqKnBlcl9idWZmZXJfZGF0YSkKIAkJQXNzZXJ0KHN0cmVhbS0+ aW9zW2lvX2luZGV4XS5vcC5idWZmZXJzID09CiAJCQkgICAmc3RyZWFtLT5idWZmZXJzW29sZGVz dF9idWZmZXJfaW5kZXhdKTsKIAotCQluZWVkZWRfd2FpdCA9IFdhaXRSZWFkQnVmZmVycygmc3Ry ZWFtLT5pb3NbaW9faW5kZXhdLm9wKTsKKwkJLyoKKwkJICogSWYgdGhlIHN0cmVhbSBoYXMgYmVl biByZXNldCwgZG9uJ3QgZXZlbiB3YWl0IGZvciB0aGUgSU8sIGp1c3QKKwkJICogYWJhbmRvbiBp dC4KKwkJICovCisJCWlmIChzdHJlYW0tPnJlYWRhaGVhZF9kaXN0YW5jZSA8IDApCisJCXsKKwkJ CUFiYW5kb25SZWFkQnVmZmVycygmc3RyZWFtLT5pb3NbaW9faW5kZXhdLm9wKTsKKwkJCW5lZWRl ZF93YWl0ID0gZmFsc2U7CisJCX0KKwkJZWxzZQorCQkJbmVlZGVkX3dhaXQgPSBXYWl0UmVhZEJ1 ZmZlcnMoJnN0cmVhbS0+aW9zW2lvX2luZGV4XS5vcCk7CiAKIAkJQXNzZXJ0KHN0cmVhbS0+aW9z X2luX3Byb2dyZXNzID4gMCk7CiAJCXN0cmVhbS0+aW9zX2luX3Byb2dyZXNzLS07CkBAIC0xNDIw LDggKzE0MzEsOCBAQCByZWFkX3N0cmVhbV9yZXNldChSZWFkU3RyZWFtICpzdHJlYW0pCiAJQnVm ZmVyCQlidWZmZXI7CiAKIAkvKiBTdG9wIGxvb2tpbmcgYWhlYWQuICovCi0Jc3RyZWFtLT5yZWFk YWhlYWRfZGlzdGFuY2UgPSAwOwotCXN0cmVhbS0+Y29tYmluZV9kaXN0YW5jZSA9IDA7CisJc3Ry ZWFtLT5yZWFkYWhlYWRfZGlzdGFuY2UgPSAtMTsKKwlzdHJlYW0tPmNvbWJpbmVfZGlzdGFuY2Ug PSAtMTsKIAogCS8qIEZvcmdldCBidWZmZXJlZCBibG9jayBudW1iZXIgYW5kIGZhc3QgcGF0aCBz dGF0ZS4gKi8KIAlzdHJlYW0tPmJ1ZmZlcmVkX2Jsb2NrbnVtID0gSW52YWxpZEJsb2NrTnVtYmVy OwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMgYi9zcmMv YmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYwppbmRleCBkNmMwY2MxZjYuLjRiOTYxNTMx MyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKKysrIGIv c3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKQEAgLTE2MTMsNiArMTYxMywxMCBA QCBTdGFydFJlYWRCdWZmZXJzSW1wbChSZWFkQnVmZmVyc09wZXJhdGlvbiAqb3BlcmF0aW9uLAog ICogYnVmZmVycyBtdXN0IHJlbWFpbiB2YWxpZCB1bnRpbCBXYWl0UmVhZEJ1ZmZlcnMoKSBpcyBj YWxsZWQsIGFuZCBhbnkKICAqIGZvcndhcmRlZCBidWZmZXJzIG11c3QgYWxzbyBiZSBwcmVzZXJ2 ZWQgZm9yIGEgY29udGludWluZyBjYWxsIHVubGVzcwogICogdGhleSBhcmUgZXhwbGljaXRseSBy ZWxlYXNlZC4KKyAqCisgKiBJZiB0cnVlIHdhcyByZXR1cm5lZCwgdGhlIG1lbW9yeSB1bmRlcmx5 aW5nIHRoZSBSZWFkQnVmZmVyc09wZXJhdGlvbiBuZWVkcworICogdG8gc3RheSBhcm91bmQgdW50 aWwgZWl0aGVyIFdhaXRSZWFkQnVmZmVycygpIG9yIEFiYW5kb25SZWFkQnVmZmVycygpIGlzCisg KiBjYWxsZWQgKG9yIGFuIGVycm9yIGlzIHRocm93bikuCiAgKi8KIGJvb2wKIFN0YXJ0UmVhZEJ1 ZmZlcnMoUmVhZEJ1ZmZlcnNPcGVyYXRpb24gKm9wZXJhdGlvbiwKQEAgLTIxNzQsNiArMjE3OCwz NiBAQCBBc3luY1JlYWRCdWZmZXJzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24sIGlu dCAqbmJsb2Nrc19wcm9ncmVzcykKIAlyZXR1cm4gdHJ1ZTsKIH0KIAorLyoKKyAqIERlY2xhcmUg dGhhdCB0aGlzIGJhY2tlbmQgaXMgbm90IGludGVyZXN0ZWQgaW4gdGhlIG9wZXJhdGlvbiBhbnlt b3JlLiBUaGlzCisgKiBuZWVkcyB0byBiZSBjYWxsZWQgaWYgU3RhcnRSZWFkQnVmZmVycygpIHJl dHVybmVkIHRydWUgYW5kIHRoZQorICogUmVhZEJ1ZmZlcnNPcGVyYXRpb24gaXMgdG8gYmUgZnJl ZWQgd2l0aG91dCBjYWxsaW5nIFdhaXRSZWFkQnVmZmVycygpCisgKiAobGVhdmluZyBlcnJvcnMg YXNpZGUpLgorICoKKyAqIEl0IGlzIHRoZSBjYWxsZXIncyByZXNwb25zaWJpbGl0eSB0byByZWxl YXNlIGJ1ZmZlciBwaW5zIChzZWVtcyBzaW1wbGVyCisgKiB0aGF0IHdheSwgYXMgdGhhdCBhbHJl YWR5IGlzIHJlcXVpcmVkIGlmIG5vIElPIGhhZCBiZWVuIG5lY2Vzc2FyeSkuCisgKi8KK3ZvaWQK K0FiYW5kb25SZWFkQnVmZmVycyhSZWFkQnVmZmVyc09wZXJhdGlvbiAqb3BlcmF0aW9uKQorewor CVBnQWlvV2FpdFJlZiBpb193cmVmID0gb3BlcmF0aW9uLT5pb193cmVmOworCisJLyogc2VlIGVx dWl2YWxlbnQgV2FpdFJlYWRCdWZmZXJzKCkgY2hlY2sgKi8KKwlpZiAoIXBnYWlvX3dyZWZfdmFs aWQoJmlvX3dyZWYpICYmIGlvX21ldGhvZCAhPSBJT01FVEhPRF9TWU5DKQorCQllbG9nKEVSUk9S LCAiYWJhbmRvbmluZyByZWFkIG9wZXJhdGlvbiB0aGF0IGRpZG4ndCByZWFkIik7CisKKwlpZiAo IXBnYWlvX3dyZWZfdmFsaWQoJmlvX3dyZWYpKQorCQlyZXR1cm47CisKKwlwZ2Fpb193cmVmX2Ns ZWFyKCZvcGVyYXRpb24tPmlvX3dyZWYpOworCisJLyogY2FuJ3QgYWJhbmRvbiBmb3JlaWduIElP cyAobm9yIGRvIHdlIG5lZWQgdG8pICovCisJaWYgKG9wZXJhdGlvbi0+Zm9yZWlnbl9pbykKKwkJ b3BlcmF0aW9uLT5mb3JlaWduX2lvID0gZmFsc2U7CisJZWxzZQorCQlwZ2Fpb193cmVmX2FiYW5k b24oJmlvX3dyZWYpOworfQorCiAvKgogICogQnVmZmVyQWxsb2MgLS0gc3Vicm91dGluZSBmb3Ig UGluQnVmZmVyRm9yQmxvY2suICBIYW5kbGVzIGxvb2t1cCBvZiBhIHNoYXJlZAogICoJCWJ1ZmZl ci4gIElmIG5vIGJ1ZmZlciBleGlzdHMgYWxyZWFkeSwgc2VsZWN0cyBhIHJlcGxhY2VtZW50IHZp Y3RpbSBhbmQKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9haW8vdC8wMDFfYWlv LnBsIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90LzAwMV9haW8ucGwKaW5kZXggNjNjYWRk NjRjLi4xZmJjYTJiNTkgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9haW8vdC8w MDFfYWlvLnBsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9haW8vdC8wMDFfYWlvLnBsCkBA IC0xNSw2ICsxNSwxMCBAQCB1c2UgVGVzdEFpbzsKIG15IEBtZXRob2RzID0gVGVzdEFpbzo6c3Vw cG9ydGVkX2lvX21ldGhvZHMoKTsKIG15ICVub2RlczsKIAorIyBQdXR0aW5nIGl0IGlubGluZSBt YWtlcyBwZXJsdGlkeSBkbyB1Z2x5IHRoaW5ncworbXkgJGNvdW50X215X2Fpb3NfcXVlcnkgPQor ICAnU0VMRUNUIGNvdW50KCopIEZST00gcGdfYWlvcyBXSEVSRSBwaWQgPSBwZ19iYWNrZW5kX3Bp ZCgpJzsKKwogCiAjIyMKICMgQ3JlYXRlIGFuZCBjb25maWd1cmUgb25lIGluc3RhbmNlIGZvciBl YWNoIGlvX21ldGhvZApAQCAtMTYxNiw2ICsxNjIwLDYxIEBAIElOU0VSVCBJTlRPIHRtcF9vayBT RUxFQ1QgZ2VuZXJhdGVfc2VyaWVzKDEsIDUwMDApOwogCQkJcXF8U0VMRUNUIGJsb2Nrb2ZmLCBi bG9ja251bSwgaW9fcmVxZCBhbmQgbm90IGZvcmVpZ25faW8sIG5ibG9ja3MgRlJPTSByZWFkX2J1 ZmZlcnMoJyR0YWJsZScsIDEsIDMpfCwKIAkJCXFyL14wXHwxXHx0XHwyXG4yXHwzXHxmXHwxJC8s CiAJCQlxci9eJC8pOworCisKKwkJIyMjCisJCSMgVGVzdCB0aGF0IGFiYW5kb25pbmcgSU8gd29y a3MgYW5kIHRoYXQgaXQgZG9lcyBub3QgY2F1c2UgaXNzdWVzLgorCQkjIyMKKworCQkjIFRlc3Qg dGhhdCBldmVuIGFmdGVyIGFiYW5kb25pbmcgSU8gd2UgZG8gd2FpdCBmb3IgdGhlIElPcyBhdCB0 aGUgZW5kCisJCSMgb2YgdGhlIHN0YXRlbWVudC4KKwkJJHBzcWxfYS0+cXVlcnlfc2FmZShxcXxT RVQgaW9fY29tYmluZV9saW1pdD0yfCk7CisJCSRwc3FsX2EtPnF1ZXJ5X3NhZmUocXF8U0VMRUNU IGV2aWN0X3JlbCgnJHRhYmxlJyl8KTsKKwkJcHNxbF9saWtlKAorCQkJJGlvX21ldGhvZCwKKwkJ CSRwc3FsX2EsCisJCQkiJHBlcnNpc3RlbmN5OiByZWFkIGJ1ZmZlcnMgJiBhYmFuZG9uIGl0IiwK KwkJCXFxfFNFTEVDVCBhYmFuZG9uZWQsIGNvdW50KCopIEZST00gcmVhZF9idWZmZXJzKCckdGFi bGUnLCAwLCA2LCBhYmFuZG9uX2FmdGVyID0+IDIpIEdST1VQIEJZIDEgT1JERVIgQlkgMXwsCisJ CQlxci9eZlx8MVxudFx8MiQvLAorCQkJcXIvXiQvKTsKKwkJIyBEdWUgdG8gdGhlIGVuZC1vZi1z dGF0ZW1lbnQgd2FpdCB0aGVyZSBzaG91bGQgYmUgbm8gSU9zIGFueW1vcmUKKwkJaXMoJHBzcWxf YS0+cXVlcnlfc2FmZSgkY291bnRfbXlfYWlvc19xdWVyeSksIDAsCisJCQkiJGlvX21ldGhvZDog JHBlcnNpc3RlbmN5OiBhYmFuZG9uZWQgSU8gY29tcGxldGVkIGJ5IGVuZCBvZiBzdGF0ZW1lbnQi CisJCSk7CisKKwkJIyBUZXN0IHRoYXQgYWZ0ZXIgYWJhbmRvbmluZyBJTyBidWZmZXIgYWNjZXNz IHN0aWxsIHdvcmtzLgorCQkjCisJCSMgRmlyc3QgdGVzdCB0aGF0IGJ5IGp1c3QgaXNzdWluZyBh bm90aGVyIHJlYWRfYnVmZmVycygpIGluIHRoZSBzYW1lCisJCSMgc3RhdGVtZW50IChzbyB0aGF0 IHRoZSBhYmFuZG9uZWQgSU9zIGFyZW4ndCB3YWl0ZWQtZm9yIGR1cmluZworCQkjIGVuZC1vZi1z dGF0ZW1lbnQgcmVzb3duZXIgaGFuZGxpbmcpLgorCQkkcHNxbF9hLT5xdWVyeV9zYWZlKHFxfFNF TEVDVCBldmljdF9yZWwoJyR0YWJsZScpfCk7CisJCXBzcWxfbGlrZSgKKwkJCSRpb19tZXRob2Qs CisJCQkkcHNxbF9hLAorCQkJIiRwZXJzaXN0ZW5jeTogcmVhZCBidWZmZXJzICYgYWJhbmRvbiBp dCAmIHJlYWQgYWdhaW4iLAorCQkJcXF8CisJCQkgICBTRUxFQ1QgU1VNKG5ibG9ja3MpIEZST00g cmVhZF9idWZmZXJzKCckdGFibGUnLCAwLCA0LCBhYmFuZG9uX2FmdGVyID0+IDIpCisJCQkgICBV TklPTiBBTEwKKwkJCSAgIFNFTEVDVCBTVU0obmJsb2NrcykgRlJPTSByZWFkX2J1ZmZlcnMoJyR0 YWJsZScsIDAsIDQpCisJCQkgICB8LAorCQkJcXIvXjRcbjQkLywKKwkJCXFyL14kLyk7CisKKwkJ IyBOb3cgdGVzdCB0aGF0IGEgcGxhaW4gU0VMRUNUIG5lZWRpbmcgYnVmZmVycyBhZmZlY3RlZCBi eSBhYmFuZG9uZWQKKwkJIyBJTyB3b3JrCisJCSRwc3FsX2EtPnF1ZXJ5X3NhZmUocXF8U0VMRUNU IGV2aWN0X3JlbCgnJHRhYmxlJyl8KTsKKwkJcHNxbF9saWtlKAorCQkJJGlvX21ldGhvZCwKKwkJ CSRwc3FsX2EsCisJCQkiJHBlcnNpc3RlbmN5OiByZWFkIGJ1ZmZlcnMgJiBhYmFuZG9uIGl0ICYg cmVhZCBhZ2FpbiB2aWEgU0VMRUNUIiwKKwkJCXFxfAorCQkJICAgU0VMRUNUIFNVTShuYmxvY2tz KSBGUk9NIHJlYWRfYnVmZmVycygnJHRhYmxlJywgMCwgNCwgYWJhbmRvbl9hZnRlciA9PiAyKQor CQkJICAgVU5JT04gQUxMCisJCQkgICBTRUxFQ1QgU1VNKGRhdGEpIEZST00gJHRhYmxlIFdIRVJF IGRhdGEgPCAxMDAwCisJCQkgICB8LAorCQkJcXIvXjRcbjQ5OTUwMCQvLAorCQkJcXIvXiQvKTsK KwkJJHBzcWxfYS0+cXVlcnlfc2FmZShxcXxSRVNFVCBpb19jb21iaW5lX2xpbWl0fCk7CiAJfQog CiAJIyBUaGUgcmVtYWluaW5nIHRlc3RzIGRvbid0IG1ha2Ugc2Vuc2UgZm9yIHRlbXAgdGFibGVz LCBhcyB0aGV5IGFyZQpAQCAtMTgzNyw2ICsxODk2LDU0IEBAIHJlYWRfYnVmZmVycygnJHRhYmxl JywgMCwgNCl8LAogCSRwc3FsX2EtPntzdGRvdXR9ID0gJyc7CiAKIAorCSMjIworCSMgVGVzdCB0 aGF0IGFiYW5kb25pbmcgSU8gYWN0dWFsbHkgYXZvaWRzIHdhaXRpbmcgZm9yIElPLgorCSMjIwor CisJIyBUZXN0aW5nIG5vdCB3YWl0aW5nIG9ubHkgd29ya3MgaWYgdGhlIElPIG1ldGhvZCBkb2Vz bid0IGV4ZWN1dGUgSU8KKwkjIHN5bmNocm9ub3VzbHksIHdoaWNoIGlzIHdoeSB3ZSBmdW5kYW1l bnRhbGx5IGNhbid0IHRlc3Qgd2l0aAorCSMgaW9fbWV0aG9kPXN5bmMuIEZ1cnRoZXJtb3JlIHdl IG5lZWQgdG8gd29yayBhcm91bmQgaW9fbWV0aG9kPWlvX3VyaW5nCisJIyBwb3RlbnRpYWxseSBl eGVjdXRpbmcgdGhlIElPIHN5bmNocm9ub3VzbHkgLSB3ZSBjYW4gZG8gc28gYnkgbWFraW5nIHRo ZQorCSMgSU9zIGJpZyBlbm91Z2ggKGMuZi4gcGdhaW9fdXJpbmdfc2hvdWxkX3VzZV9hc3luYygp KS4KKwkjCisJIyBUbyBtYWtlIHRoZSB0ZXN0IHJlbGlhYmxlIHdlIGhhdmUgdG8gYWJhbmRvbiBh bGwgSU9zLCBhcyB3YWl0aW5nIGZvcgorCSMgc29tZSBJT3MgY291bGQgbGVhZCB0byBhbHNvIGNv bnN1bWluZyB0aGUgY29tcGxldGlvbiBvZiB0aGUgSU8gdGhhdCB3aWxsCisJIyB0cmlnZ2VyIGEg d2FpdCBpbiB0aGUgY29tcGxldGlvbi4KKwlpZiAoJGlvX21ldGhvZCBuZSAnc3luYycpCisJewor CQkkcHNxbF9hLT5xdWVyeV9zYWZlKHFxfFNFTEVDVCBldmljdF9yZWwoJyR0YWJsZScpfCk7CisJ CSRwc3FsX2EtPnF1ZXJ5X3NhZmUocXF8U0VUIGlvX2NvbWJpbmVfbGltaXQ9NXwpOworCQkkcHNx bF9iLT5xdWVyeV9zYWZlKAorCQkJcXEvU0VMRUNUIGlual9pb19jb21wbGV0aW9uX3dhaXQoCisJ CSAgIHJlbGZpbGVub2RlPT5wZ19yZWxhdGlvbl9maWxlbm9kZSgnJHRhYmxlJyksCisJCSAgIGJs b2Nrbm89PjQpOy8pOworCQlvaygxLAorCQkJIiRpb19tZXRob2Q6ICRwZXJzaXN0ZW5jeTogY29u ZmlndXJlIHdhaXQgaW4gY29tcGxldGlvbiBvZiBibG9jayA0IgorCQkpOworCisJCSMgTmVlZCB0 byBlbmQgdGhlIHdhaXQgaW4gdGhlIGNvbXBsZXRpb24gYmVmb3JlIHRoZSBzdGF0ZW1lbnQgaXMg b3ZlciwKKwkJIyBvdGhlcndpc2Ugd2UnbGwgd2FpdCBkdXJpbmcgcmVzb3duZXIgY2xlYW51cCBh dCB0aGUgZW5kIG9mIHRoZQorCQkjIHN0YXRlbWVudC4KKwkJcHNxbF9saWtlKAorCQkJJGlvX21l dGhvZCwKKwkJCSRwc3FsX2EsCisJCQkiJHBlcnNpc3RlbmN5OiByZWFkIGJ1ZmZlcnMgYWJhbmRv bmluZyBibG9ja2VkIElPIGF2b2lkcyB3YWl0IiwKKwkJCXFxfAorCQkJICAgU0VMRUNUIGNvdW50 KCopID4gMCBGUk9NIHJlYWRfYnVmZmVycygnJHRhYmxlJywgMCwgMTAsIGFiYW5kb25fYWZ0ZXIg PT4gMCkgV0hFUkUgYWJhbmRvbmVkCisJCQkgICBVTklPTiBBTEwKKwkJCSAgIFNFTEVDVCBjb3Vu dCgqKSA+IDAgRlJPTSBwZ19haW9zIFdIRVJFIHBpZCA9IHBnX2JhY2tlbmRfcGlkKCkKKwkJCSAg IFVOSU9OIEFMTAorCQkJICAgU0VMRUNUIGlual9pb19jb21wbGV0aW9uX2NvbnRpbnVlKCkgSVMg Tk9UIE5VTEwKKwkJCXwsCisJCQlxci9edFxudFxudCQvLAorCQkJcXIvXiQvKTsKKwkJaXMoJHBz cWxfYS0+cXVlcnlfc2FmZSgkY291bnRfbXlfYWlvc19xdWVyeSksIDAsCisJCQkiJGlvX21ldGhv ZDogJHBlcnNpc3RlbmN5OiBhYmFuZG9uZWQgSU8gaXMgY29tcGxldGVkIGF0IGVuZCBvZiBzdGF0 ZW1lbnQiCisJCSk7CisKKwkJJHBzcWxfYS0+cXVlcnlfc2FmZShxcXxSRVNFVCBpb19jb21iaW5l X2xpbWl0fCk7CisJfQorCiAJJHBzcWxfYS0+cXVpdCgpOwogCSRwc3FsX2ItPnF1aXQoKTsKIAkk cHNxbF9jLT5xdWl0KCk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3Rl c3RfYWlvLS0xLjAuc3FsIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90ZXN0X2Fpby0tMS4w LnNxbAppbmRleCA3NjJhYzI5NTEuLmZmM2IyMDBjZiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9k dWxlcy90ZXN0X2Fpby90ZXN0X2Fpby0tMS4wLnNxbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rl c3RfYWlvL3Rlc3RfYWlvLS0xLjAuc3FsCkBAIC01Myw3ICs1Myw3IEBAIENSRUFURSBGVU5DVElP TiBidWZmZXJfY2FsbF90ZXJtaW5hdGVfaW8oYnVmZmVyIGludCwgZm9yX2lucHV0IGJvb2wsIHN1 Y2NlZWQgYm9vCiBSRVRVUk5TIHBnX2NhdGFsb2cudm9pZCBTVFJJQ1QKIEFTICdNT0RVTEVfUEFU SE5BTUUnIExBTkdVQUdFIEM7CiAKLUNSRUFURSBGVU5DVElPTiByZWFkX2J1ZmZlcnMocmVsIHJl Z2NsYXNzLCBzdGFydGJsb2NrIGludDQsIG5ibG9ja3MgaW50NCwgT1VUIGJsb2Nrb2ZmIGludDQs IE9VVCBibG9ja251bSBpbnQ0LCBPVVQgaW9fcmVxZCBib29sLCBPVVQgZm9yZWlnbl9pbyBib29s LCBPVVQgbmJsb2NrcyBpbnQ0LCBPVVQgYnVmIGludDRbXSkKK0NSRUFURSBGVU5DVElPTiByZWFk X2J1ZmZlcnMocmVsIHJlZ2NsYXNzLCBzdGFydGJsb2NrIGludDQsIG5ibG9ja3MgaW50NCwgYWJh bmRvbl9hZnRlciBpbnQ0IERFRkFVTFQgLTEsIE9VVCBibG9ja29mZiBpbnQ0LCBPVVQgYmxvY2tu dW0gaW50NCwgT1VUIGlvX3JlcWQgYm9vbCwgT1VUIGZvcmVpZ25faW8gYm9vbCwgT1VUIGFiYW5k b25lZCBib29sLCBPVVQgbmJsb2NrcyBpbnQ0LCBPVVQgYnVmIGludDRbXSkKIFJFVFVSTlMgU0VU T0YgcmVjb3JkIFNUUklDVAogQVMgJ01PRFVMRV9QQVRITkFNRScgTEFOR1VBR0UgQzsKIApkaWZm IC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90ZXN0X2Fpby5jIGIvc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X2Fpby90ZXN0X2Fpby5jCmluZGV4IDM1ZWZiYTFhNS4uNjQ4NTJjNGU0IDEw MDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3Rlc3RfYWlvLmMKKysrIGIvc3Jj L3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90ZXN0X2Fpby5jCkBAIC02OTgsMTEgKzY5OCwxMyBAQCBy ZWFkX2J1ZmZlcnMoUEdfRlVOQ1RJT05fQVJHUykKIAlPaWQJCQlyZWxpZCA9IFBHX0dFVEFSR19P SUQoMCk7CiAJQmxvY2tOdW1iZXIgc3RhcnRibG9jayA9IFBHX0dFVEFSR19VSU5UMzIoMSk7CiAJ aW50MzIJCW5ibG9ja3MgPSBQR19HRVRBUkdfSU5UMzIoMik7CisJaW50MzIJCWFiYW5kb25fYWZ0 ZXIgPSBQR19HRVRBUkdfSU5UMzIoMyk7CiAJUmV0dXJuU2V0SW5mbyAqcnNpbmZvID0gKFJldHVy blNldEluZm8gKikgZmNpbmZvLT5yZXN1bHRpbmZvOwogCVJlbGF0aW9uCXJlbDsKIAlTTWdyUmVs YXRpb24gc21ncjsKIAlpbnQJCQluYmxvY2tzX2RvbmUgPSAwOwogCWludAkJCW5ibG9ja3NfZGlz cCA9IDA7CisJaW50CQkJbmJsb2Nrc193YWl0ID0gMDsKIAlpbnQJCQluaW9zID0gMDsKIAlSZWFk QnVmZmVyc09wZXJhdGlvbiAqb3BlcmF0aW9uczsKIAlCdWZmZXIJICAgKmJ1ZmZlcnM7CkBAIC03 MjQsNiArNzI2LDkgQEAgcmVhZF9idWZmZXJzKFBHX0ZVTkNUSU9OX0FSR1MpCiAJcmVsID0gcmVs YXRpb25fb3BlbihyZWxpZCwgQWNjZXNzU2hhcmVMb2NrKTsKIAlzbWdyID0gUmVsYXRpb25HZXRT bWdyKHJlbCk7CiAKKwlpZiAoYWJhbmRvbl9hZnRlciA8IDApCisJCWFiYW5kb25fYWZ0ZXIgPSBu YmxvY2tzOworCiAJLyoKIAkgKiBEbyBTdGFydFJlYWRCdWZmZXJzKCkgdW50aWwgSU8gZm9yIGFs bCB0aGUgcmVxdWlyZWQgYmxvY2tzIGhhcyBiZWVuCiAJICogc3RhcnRlZCAoaWYgcmVxdWlyZWQp LgpAQCAtNzU4LDkgKzc2MywxNyBAQCByZWFkX2J1ZmZlcnMoUEdfRlVOQ1RJT05fQVJHUykKIAlm b3IgKGludCBuaW8gPSAwOyBuaW8gPCBuaW9zOyBuaW8rKykKIAl7CiAJCVJlYWRCdWZmZXJzT3Bl cmF0aW9uICpvcGVyYXRpb24gPSAmb3BlcmF0aW9uc1tuaW9dOworCQlpbnQJCQluYmxvY2tzX3Ro aXNfaW8gPSBuYmxvY2tzX3Blcl9pb1tuaW9dOwogCiAJCWlmIChpb19yZXFkc1tuaW9dKQotCQkJ V2FpdFJlYWRCdWZmZXJzKG9wZXJhdGlvbik7CisJCXsKKwkJCWlmIChuYmxvY2tzX3dhaXQgPCBh YmFuZG9uX2FmdGVyKQorCQkJCVdhaXRSZWFkQnVmZmVycyhvcGVyYXRpb24pOworCQkJZWxzZQor CQkJCUFiYW5kb25SZWFkQnVmZmVycyhvcGVyYXRpb24pOworCQl9CisKKwkJbmJsb2Nrc193YWl0 ICs9IG5ibG9ja3NfdGhpc19pbzsKIAl9CiAKIAkvKgpAQCAtNzcwLDggKzc4Myw4IEBAIHJlYWRf YnVmZmVycyhQR19GVU5DVElPTl9BUkdTKQogCXsKIAkJUmVhZEJ1ZmZlcnNPcGVyYXRpb24gKm9w ZXJhdGlvbiA9ICZvcGVyYXRpb25zW25pb107CiAJCWludAkJCW5ibG9ja3NfdGhpc19pbyA9IG5i bG9ja3NfcGVyX2lvW25pb107Ci0JCURhdHVtCQl2YWx1ZXNbNl0gPSB7MH07Ci0JCWJvb2wJCW51 bGxzWzZdID0gezB9OworCQlEYXR1bQkJdmFsdWVzWzddID0gezB9OworCQlib29sCQludWxsc1s3 XSA9IHswfTsKIAkJQXJyYXlUeXBlICAqYnVmZmVyc19hcnI7CiAKIAkJLyogY29udmVydCBidWZm ZXIgYXJyYXkgdG8gZGF0dW0gYXJyYXkgKi8KQEAgLTgwNCwxNCArODE3LDE4IEBAIHJlYWRfYnVm ZmVycyhQR19GVU5DVElPTl9BUkdTKQogCQl2YWx1ZXNbM10gPSBCb29sR2V0RGF0dW0oaW9fcmVx ZHNbbmlvXSA/IG9wZXJhdGlvbi0+Zm9yZWlnbl9pbyA6IGZhbHNlKTsKIAkJbnVsbHNbM10gPSBm YWxzZTsKIAotCQkvKiBuYmxvY2tzICovCi0JCXZhbHVlc1s0XSA9IEludDMyR2V0RGF0dW0obmJs b2Nrc190aGlzX2lvKTsKKwkJLyogYWJhbmRvbmVkICovCisJCXZhbHVlc1s0XSA9IEJvb2xHZXRE YXR1bShuYmxvY2tzX2Rpc3AgPj0gYWJhbmRvbl9hZnRlcik7CiAJCW51bGxzWzRdID0gZmFsc2U7 CiAKLQkJLyogYXJyYXkgb2YgYnVmZmVycyAqLwotCQl2YWx1ZXNbNV0gPSBQb2ludGVyR2V0RGF0 dW0oYnVmZmVyc19hcnIpOworCQkvKiBuYmxvY2tzICovCisJCXZhbHVlc1s1XSA9IEludDMyR2V0 RGF0dW0obmJsb2Nrc190aGlzX2lvKTsKIAkJbnVsbHNbNV0gPSBmYWxzZTsKIAorCQkvKiBhcnJh eSBvZiBidWZmZXJzICovCisJCXZhbHVlc1s2XSA9IFBvaW50ZXJHZXREYXR1bShidWZmZXJzX2Fy cik7CisJCW51bGxzWzZdID0gZmFsc2U7CisKIAkJdHVwbGVzdG9yZV9wdXR2YWx1ZXMocnNpbmZv LT5zZXRSZXN1bHQsIHJzaW5mby0+c2V0RGVzYywgdmFsdWVzLCBudWxscyk7CiAKIAkJbmJsb2Nr c19kaXNwICs9IG5ibG9ja3NfdGhpc19pbzsKQEAgLTEwNjQsNiArMTA4MSwxMyBAQCBpbmpfaW9f Y29tcGxldGlvbl93YWl0X21hdGNoZXMoUGdBaW9IYW5kbGUgKmlvaCkKIAkJIShpbmpfYmxvY2tu byA+PSBpb19ibG9ja25vICYmIGlual9ibG9ja25vIDwgKGlvX2Jsb2Nrbm8gKyB0ZC0+c21nci5u YmxvY2tzKSkpCiAJCXJldHVybiBmYWxzZTsKIAorCWVyZXBvcnQoTE9HLAorCQkJZXJybXNnKCJ3 YWl0IGluamVjdGlvbiBwb2ludCBtYXRjaGVzIGZvciBJTyAlZCwgaW5qIGJsb2Nrbm8gJWQsIGlv IGJsb2Nrbm8gJWQsIGlvIG5ibG9ja3MgJWQiLAorCQkJCSAgIHBnYWlvX2lvX2dldF9pZChpb2gp LAorCQkJCSAgIGlual9ibG9ja25vLCBpb19ibG9ja25vLCB0ZC0+c21nci5uYmxvY2tzCisJCQkJ ICAgKSwKKwkJCWVycmhpZGVzdG10KHRydWUpLCBlcnJoaWRlY29udGV4dCh0cnVlKSk7CisKIAly ZXR1cm4gdHJ1ZTsKIH0KIAotLSAKMi41My4wCgo= --000000000000d6f56006543b3e3b Content-Type: application/octet-stream; name="v27-0009-WIP-aio-bufmgr-Fix-race-condition-leading-to-dea.patch" Content-Disposition: attachment; filename="v27-0009-WIP-aio-bufmgr-Fix-race-condition-leading-to-dea.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqe4shkf1 RnJvbSAwOTI3MTJjNWQ1MmY5NTY3YzdhNmQ0MzAwZTBhYmQ4ZDMzN2EwZmJkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFN1biwgMjIgTWFyIDIwMjYgMTU6MTk6MDggLTA0MDAKU3ViamVjdDogW1BBVENIIHYyNyA5 LzldIFdJUDogYWlvOiBidWZtZ3I6IEZpeCByYWNlIGNvbmRpdGlvbiBsZWFkaW5nIHRvCiBkZWFk bG9ja3Mgd2l0aCBpb191cmluZwoKSWYgYmFja2VuZCBBIGlzIGluIHRoZSBwcm9jZXNzIG9mIHN0 YXJ0aW5nIElPIGZvciBhIGJ1ZmZlciwgdGhlcmUgaXMgYSBzaG9ydApwZXJpb2QgaW4gd2hpY2gg dGhlIGJ1ZmZlciBpcyBtYXJrZWQgYXMgSU9fSU5fUFJPR1JFU1Mgd2l0aG91dCBoYXZpbmcgYW4K YXNzb2NpYXRlZCBBSU8gd2FpdCByZWZlcmVuY2UuIElmIGEgYmFja2VuZCBCIGRvZXMgV2FpdElP KCkgb24gdGhhdCBidWZmZXIsCml0J2xsIHdhaXQgZm9yIHRoZSBidWZmZXIncyBJTyBjb25kaXRp b24gdmFyaWFibGUgdG8gYmUgc2V0LiBNb3N0IG9mIHRoZSB0aW1lCnRoYXQgaXMgT0ssIHdoZW4g dGhlIElPIG9uIHRoZSBidWZmZXIgZmluaXNoZXMsIHRoZSBDViB3aWxsIGJlIHNpZ25hbGxlZC4K SG93ZXZlciwgd2l0aCBpb191cmluZywgaXQgaXMgcG9zc2libGUgdGhhdCB0aGUgaXNzdWVyIChB KSBvZiB0aGUgSU8gbmV2ZXIKZ2V0cyBhcm91bmQgdG8gZG9pbmcgc28sIGUuZy4gYmVjYXVzZSBp dCBpcyB3YWl0aW5nIGZvciBzb21ldGhpbmcgZG9uZSBieSBCLgoKVG8gZml4IHRoYXQsIHdlIG5l ZWQgdG8gc2lnbmFsIHRoZSBDViB3aGVuIHN0YWdpbmcgSU8uIFRoYXQncyBhbm5veWluZyBhcyBD Vgpicm9hZGNhc3RzIGFyZSBub3QgY2hlYXAuIFNvIHdlIGF0IGxlYXN0IGF2b2lkIGl0IGZvciB0 aGUgY29tbW9uIGNhc2Ugb2YgSU8KYmVpbmcgZXhlY3V0ZWQgc3luY2hyb25vdXNseS4KCkkgaG9w ZSB0aGF0IGV2ZW50dWFsbHkgd2UgY2FuIGdldCBhd2F5IGZyb20gbmVlZGluZyBtdWx0aXBsZSBz eXN0ZW1zIGZvcgpzaWduYWxsaW5nIElPIGNvbXBsZXRpb24sIGJ1dCB3ZSBhcmUgY2xlYXJseSBu b3QgdGhlcmUgeWV0LgotLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jIHwg MjIgKysrKysrKysrKysrKysrKysrKy0tLQogMSBmaWxlIGNoYW5nZWQsIDE5IGluc2VydGlvbnMo KyksIDMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZm ZXIvYnVmbWdyLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYwppbmRleCA0 Yjk2MTUzMTMuLmU4ZThhMjEyMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZm ZXIvYnVmbWdyLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKQEAg LTgzMjEsNyArODMyMSw3IEBAIE1hcmtEaXJ0eUFsbFVucGlubmVkQnVmZmVycyhpbnQzMiAqYnVm ZmVyc19kaXJ0aWVkLAogICogcmVwbGFjZWQgd2hpbGUgSU8gaXMgb25nb2luZy4KICAqLwogc3Rh dGljIHBnX2F0dHJpYnV0ZV9hbHdheXNfaW5saW5lIHZvaWQKLWJ1ZmZlcl9zdGFnZV9jb21tb24o UGdBaW9IYW5kbGUgKmlvaCwgYm9vbCBpc193cml0ZSwgYm9vbCBpc190ZW1wKQorYnVmZmVyX3N0 YWdlX2NvbW1vbihQZ0Fpb0hhbmRsZSAqaW9oLCB1aW50OCBjYl9kYXRhLCBib29sIGlzX3dyaXRl LCBib29sIGlzX3RlbXApCiB7CiAJdWludDY0CSAgICppb19kYXRhOwogCXVpbnQ4CQloYW5kbGVf ZGF0YV9sZW47CkBAIC04NDIwLDcgKzg0MjAsMjMgQEAgYnVmZmVyX3N0YWdlX2NvbW1vbihQZ0Fp b0hhbmRsZSAqaW9oLCBib29sIGlzX3dyaXRlLCBib29sIGlzX3RlbXApCiAJCSAqIGtlZXBzIHRy YWNrLgogCQkgKi8KIAkJaWYgKCFpc190ZW1wKQorCQl7CiAJCQlSZXNvdXJjZU93bmVyRm9yZ2V0 QnVmZmVySU8oQ3VycmVudFJlc291cmNlT3duZXIsIGJ1ZmZlcik7CisKKwkJCS8qCisJCQkgKiBB IGJhY2tlbmQgbWlnaHQgaGF2ZSBzdGFydGVkIHdhaXRpbmcgZm9yIHRoZSBJTyB1c2luZyB0aGUK KwkJCSAqIGJ1ZmZlcidzIGNvbmRpdGlvbiB2YXJpYWJsZSwgYnV0IG9uY2UgdGhlIElPIGlzIHN1 Ym1pdHRlZCwgaXQKKwkJCSAqIHNob3VsZCB3YWl0IHZpYSB0aGUgQUlPIHN1YnN5c3RlbSwgYXMg YSB3YWl0ZXIgbWlnaHQgbmVlZCB0bworCQkJICogY29tcGxldGUgdGhlIElPLgorCQkJICoKKwkJ CSAqIEhvd2V2ZXIsIGRvaW5nIGJyb2FkY2FzdHMgaXMgbm90IGZyZWUsIHNvIHdlIGxpa2UgdG8g YXZvaWQgaXQKKwkJCSAqIHdoZW4gbm90IG5lY2Vzc2FyeS4gSWYgdGhlIElPIGlzIGJlaW5nIGV4 ZWN1dGVkIHN5bmNocm9ub3VzbHksCisJCQkgKiB0aGlzIGJhY2tlbmQgd2lsbCBhbHdheXMgZW5k IHVwIHNpZ25hbGxpbmcgdGhlIElPQ1Ygd2l0aG91dAorCQkJICogZnVydGhlciB3YWl0aW5nLCB0 aGVyZWZvcmUgYXZvaWQgZG9pbmcgc28gaGVyZS4KKwkJCSAqLworCQkJaWYgKCEoY2JfZGF0YSAm IFJFQURfQlVGRkVSU19TWU5DSFJPTk9VU0xZKSkKKwkJCQlDb25kaXRpb25WYXJpYWJsZUJyb2Fk Y2FzdChCdWZmZXJEZXNjcmlwdG9yR2V0SU9DVihidWZfaGRyKSk7CisJCX0KIAl9CiB9CiAKQEAg LTg5MTYsNyArODkzMiw3IEBAIGJ1ZmZlcl9yZWFkdl9yZXBvcnQoUGdBaW9SZXN1bHQgcmVzdWx0 LCBjb25zdCBQZ0Fpb1RhcmdldERhdGEgKnRkLAogc3RhdGljIHZvaWQKIHNoYXJlZF9idWZmZXJf cmVhZHZfc3RhZ2UoUGdBaW9IYW5kbGUgKmlvaCwgdWludDggY2JfZGF0YSkKIHsKLQlidWZmZXJf c3RhZ2VfY29tbW9uKGlvaCwgZmFsc2UsIGZhbHNlKTsKKwlidWZmZXJfc3RhZ2VfY29tbW9uKGlv aCwgY2JfZGF0YSwgZmFsc2UsIGZhbHNlKTsKIH0KIAogc3RhdGljIFBnQWlvUmVzdWx0CkBAIC04 OTY3LDcgKzg5ODMsNyBAQCBzaGFyZWRfYnVmZmVyX3JlYWR2X2NvbXBsZXRlX2xvY2FsKFBnQWlv SGFuZGxlICppb2gsIFBnQWlvUmVzdWx0IHByaW9yX3Jlc3VsdCwKIHN0YXRpYyB2b2lkCiBsb2Nh bF9idWZmZXJfcmVhZHZfc3RhZ2UoUGdBaW9IYW5kbGUgKmlvaCwgdWludDggY2JfZGF0YSkKIHsK LQlidWZmZXJfc3RhZ2VfY29tbW9uKGlvaCwgZmFsc2UsIHRydWUpOworCWJ1ZmZlcl9zdGFnZV9j b21tb24oaW9oLCBjYl9kYXRhLCBmYWxzZSwgdHJ1ZSk7CiB9CiAKIHN0YXRpYyBQZ0Fpb1Jlc3Vs dAotLSAKMi41My4wCgo= --000000000000d6f56006543b3e3b Content-Type: application/octet-stream; name="v27-0001-Add-slot-based-table-AM-index-scan-interface.patch" Content-Disposition: attachment; filename="v27-0001-Add-slot-based-table-AM-index-scan-interface.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqe4shk30 RnJvbSBiODk3NmRjMTM2MjUzZTZkYzljNzY3NmUwOTVhZTc2MzA3NzVmOTA4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFN1 biwgMjIgTWFyIDIwMjYgMDI6MzY6NTcgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyNyAxLzldIEFk ZCBzbG90LWJhc2VkIHRhYmxlIEFNIGluZGV4IHNjYW4gaW50ZXJmYWNlLgoKQWRkIHRhYmxlX2lu ZGV4X2dldG5leHRfc2xvdCwgYSBuZXcgdGFibGUgQU0gY2FsbGJhY2sgdGhhdCB3cmFwcyBib3Ro CnBsYWluIGFuZCBpbmRleC1vbmx5IGluZGV4IHNjYW5zIHRoYXQgdXNlIGFtZ2V0dHVwbGUuICBU d28gbmV3IGhlYXBhbQpjYWxsYmFja3MgYXJlIGludHJvZHVjZWQgLS0gb25lIGZvciBwbGFpbiBz Y2FucyBhbmQgb25lIGZvciBpbmRleC1vbmx5CnNjYW5zIC0tIHdoaWNoIGFuIHVwY29taW5nIGNv bW1pdCB0aGF0IGFkZHMgdGhlIGFtZ2V0YmF0Y2ggaW50ZXJmYWNlCndpbGwgZXhwYW5kIHRvIGZv dXIuICBUaGUgYXBwcm9wcmlhdGUgY2FsbGJhY2sgaXMgcmVzb2x2ZWQgb25jZSBpbgppbmRleF9i ZWdpbnNjYW4sIGFuZCBjYWxsZWQgdGhyb3VnaCBhIGZ1bmN0aW9uIHBvaW50ZXIgKHhzX2dldG5l eHRfc2xvdCkKb24gdGhlIEluZGV4U2NhbkRlc2Mgd2hlbiB0aGUgdGFibGVfaW5kZXhfZ2V0bmV4 dF9zbG90IHNoaW0gZnVuY3Rpb24gaXMKY2FsbGVkIGZyb20gZXhlY3V0b3Igbm9kZXMuICAoVGFi bGUgQU1zIGNhbiBjcmVhdGUgc3BlY2lhbGl6ZWQgdmFyaWFudHMKdG8gaGVscCB0aGUgY29tcGls ZXIgcHJvZHVjZSBtb3JlIGVmZmljaWVudCBjb2RlLCBidXQgdGhleSBzaG91bGQgYWx3YXlzCmJl IGFibGUgdG8gcHJvdmlkZSBleGFjdGx5IG9uZSBnZW5lcmljIGNhbGxiYWNrIGlmIHRoYXQgbWFr ZXMgc2Vuc2UuKQoKVGhpcyBtb3ZlcyBWTSBjaGVja3MgZm9yIGluZGV4LW9ubHkgc2NhbnMgb3V0 IG9mIHRoZSBleGVjdXRvciBhbmQgaW50bwpoZWFwYW0sIGVuYWJsaW5nIGJhdGNoaW5nIG9mIHZp c2liaWxpdHkgbWFwIGxvb2t1cHMgKHRob3VnaCBmb3Igbm93IHdlCmNvbnRpbnVlIHRvIGp1c3Qg cGVyZm9ybSByZXRhaWwgbG9va3VwcykuICBVc2luZyB0aGUgbmV3IGhpZ2hlciBsZXZlbApzbG90 LWJhc2VkIGludGVyZmFjZSBncmVhdGx5IHNpbXBsaWZpZXMgbm9kZUluZGV4b25seXNjYW4uYywg d2hpY2ggbm8KbG9uZ2VyIGhhcyB0byBkZWFsIHdpdGggdGhlIHZpc2liaWxpdHkgbWFwIGRpcmVj dGx5LiAgTW9yZSBpbXBvcnRhbnRseSwKdGhpcyBpcyBhIHNpZ25pZmljYW50IGFyY2hpdGVjdHVy YWwgaW1wcm92ZW1lbnQ6IHRhYmxlIEFNcyBjYW4gbm93CmltcGxlbWVudCBpbmRleC1vbmx5IHNj YW5zIHRoYXQgYXJlIG5vdCB0aWVkIHRvIGhlYXBhbSdzIHZpc2liaWxpdHkgbWFwLgoKQSBzbWFs bCBtaW5vcml0eSBvZiBjYWxsZXJzICgyIGNhbGxlcnMgaW4gdG90YWwpIGZ1bmRhbWVudGFsbHkg bmVlZCB0bwpwYXNzIGEgVElEIHRvIHRoZSB0YWJsZSBBTSAoYm90aCBwZXJmb3JtIGNvbnN0cmFp bnQgZW5mb3JjZW1lbnQpLiAgVGhlc2UKY2FsbGVycyBkb24ndCBhY3R1YWxseSBwZXJmb3JtIGlu ZGV4IHNjYW5zIChldmVuIGlmIHRoZWlyIFRJRHMgYXJlIHRha2VuCmZyb20gYW4gaW5kZXgpLCBh bmQgaGF2ZSBubyBuZWVkIGZvciBtb3N0IG9mIHRoZSBpbmRleCBzY2FuIG1hY2hpbmVyeS4KU3dp dGNoIHRoZXNlIGNhbGxlcnMgb3ZlciB0byB0aGUgbmV3IGZldGNoX3RpZCBpbnRlcmZhY2UgKHdo aWNoIHJlcGxhY2VzCnRoZSBwcmV2aW91cyBUSUQtYmFzZWQgaW5kZXhfZmV0Y2hfdHVwbGUgaW50 ZXJmYWNlKS4gIEFsbCBpbmRleCBzY2FuCmNhbGxlcnMgbm93IHVzZSB0aGUgbmV3IHNsb3QtYmFz ZWQgaW50ZXJmYWNlICh0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3QpLgoKVGhlIFZJU0lURURfUEFH RVNfTElNSVQgbWVjaGFuaXNtIHVzZWQgYnkgZ2V0X2FjdHVhbF92YXJpYWJsZV9yYW5nZSB0bwpj YXAgc2NhbiBvdmVyaGVhZCBkdXJpbmcgcGxhbm5pbmcgaXMgcmV3b3JrZWQgdG8gZ28gdGhyb3Vn aCBhIG5ldyBzY2FuCmRlc2NyaXB0b3IgaW50ZXJmYWNlICh4c192aXNpdGVkX3BhZ2VzX2xpbWl0 KSwgcmF0aGVyIHRoYW4gdHJhY2tpbmcgdGhlCmNvc3RzIGRpcmVjdGx5IGFuZCB0ZXJtaW5hdGlu ZyB0aGUgc2NhbiBpdHNlbGYsIGluIGFuIGFkLWhvYyB3YXkuICBUaGlzCmlzIG5lY2Vzc2FyeSBi ZWNhdXNlIGNhbGxlcnMgdGhhdCB1c2UgdGhlIG5ldyBzbG90LWJhc2VkIGludGVyZmFjZSBubwps b25nZXIgaGF2ZSBkaXJlY3QgYWNjZXNzIHRvIHdoaWNoIGhlYXAgYmxvY2tzIHdlcmUgZmV0Y2hl ZC4gIFNpbWlsYXJseSwKbm9kZUluZGV4b25seXNjYW4uYyBjYW4gbm8gbG9uZ2VyIHVzZSBJbnN0 ckNvdW50VHVwbGVzMiB0byBjb3VudCBoZWFwCmZldGNoZXMgZHVyaW5nIGFuIEVYUExBSU4gQU5B TFlaRS4gIEVYUExBSU4gQU5BTFlaRSBub3cgb2J0YWlucyB0aGlzCmluZm9ybWF0aW9uIGZyb20g YSBuZXcgSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uIGZpZWxkLCB3aGljaCB0YWJsZSBBTXMKYXJl IHJlcXVpcmVkIHRvIG1haW50YWluLgoKVGhvdWdoIGluZGVwZW5kZW50bHkgdXNlZnVsLCB0aGlz IGNvbW1pdCBpcyBwcmVwYXJhdG9yeSB3b3JrIGZvciBhbgp1cGNvbWluZyBjb21taXQgdGhhdCB3 aWxsIGFkZCBhbiBhbWdldGJhdGNoIGluZGV4IEFNIGludGVyZmFjZSwgd2hlcmUKdGhlIHRhYmxl IEFNIHRha2VzIGZ1bGwgcmVzcG9uc2liaWxpdHkgZm9yIG1hbmFnaW5nIHRoZSBwcm9ncmVzcyBv ZgppbmRleCBzY2Fucy4gIFRoYXQgd2lsbCBtb3ZlIG1vc3Qgb2YgdGhlIGltcGxlbWVudGF0aW9u IG9mIHNjcm9sbGFibGUKY3Vyc29ycyBvdXQgb2YgaW5kZXggQU1zIGFuZCBpbnRvIHRhYmxlIEFN cywgbWFraW5nIGl0IGVzc2VudGlhbCB0aGF0CmV4ZWN1dG9yIG5vZGVzIHBhc3MgdGhlIGN1cnJl bnQgc2NhbiBkaXJlY3Rpb24gZG93biB0byB0aGUgdGFibGUgQU0uCgpUaGUgaGVhcGFtIHRhYmxl X2luZGV4X2dldG5leHRfc2xvdCBjYWxsYmFja3MgbWFrZSBhZ2dyZXNzaXZlIHVzZSBvZgpmb3Jj ZWQgaW5saW5pbmcgdG8gZW5zdXJlIHRoYXQgcGxhaW4gYW5kIGluZGV4LW9ubHkgY29kZSBwYXRo cyBhcmUgZnVsbHkKc3BlY2lhbGl6ZWQgYXQgY29tcGlsZSB0aW1lIGRlc3BpdGUgc2hhcmluZyBh IGNvbW1vbiBpbXBsZW1lbnRhdGlvbi4KVGVzdGluZyBoYXMgc2hvd24gdGhpcyBpcyBuZWNlc3Nh cnkgdG8ga2VlcCBpY2FjaGUgbWlzc2VzIHRvIGEgbWluaW11bSwKYXQgbGVhc3Qgd2l0aCB0aGUg dHdvIHVwY29taW5nIGFtZ2V0YmF0Y2ggdmFyaWFudHMuCgpBdXRob3I6IFBldGVyIEdlb2doZWdh biA8cGdAYm93dC5pZT4KUmV2aWV3ZWQtYnk6IEFuZHJlcyBGcmV1bmQgPGFuZHJlc0BhbmFyYXpl bC5kZT4KUmV2aWV3ZWQtYnk6IFRvbWFzIFZvbmRyYSA8dG9tYXNAdm9uZHJhLm1lPgpEaXNjdXNz aW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL0NBSDItV3ptWXFoYWNCSDE2MXBlQVdiNWVGPUphN0NG QVErMGpTRU1xPXFuZkxWVE9PZ0BtYWlsLmdtYWlsLmNvbQotLS0KIHNyYy9pbmNsdWRlL2FjY2Vz cy9nZW5hbS5oICAgICAgICAgICAgICAgICAgICB8ICAgNSArLQogc3JjL2luY2x1ZGUvYWNjZXNz L2hlYXBhbS5oICAgICAgICAgICAgICAgICAgIHwgIDMwICstCiBzcmMvaW5jbHVkZS9hY2Nlc3Mv cmVsc2Nhbi5oICAgICAgICAgICAgICAgICAgfCAgNjcgKystCiBzcmMvaW5jbHVkZS9hY2Nlc3Mv dGFibGVhbS5oICAgICAgICAgICAgICAgICAgfCAyMjIgKysrKystLS0tCiBzcmMvaW5jbHVkZS9l eGVjdXRvci9pbnN0cnVtZW50X25vZGUuaCAgICAgICAgfCAgIDUgKy0KIHNyYy9pbmNsdWRlL25v ZGVzL2V4ZWNub2Rlcy5oICAgICAgICAgICAgICAgICB8ICAgOCAtCiBzcmMvYmFja2VuZC9hY2Nl c3MvaGVhcC9oZWFwYW1faGFuZGxlci5jICAgICAgfCAgMTcgKy0KIHNyYy9iYWNrZW5kL2FjY2Vz cy9oZWFwL2hlYXBhbV9pbmRleHNjYW4uYyAgICB8IDQ2MSArKysrKysrKysrKysrKysrLS0KIHNy Yy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3Zpc2liaWxpdHltYXAuYyAgICAgICB8ICAyNyArLQogc3Jj L2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMgICAgICAgICAgICAgIHwgIDMwICstCiBzcmMv YmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jICAgICAgICAgICAgfCAyNTYgKysrKy0tLS0t LQogc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRpbnNlcnQuYyAgICAgICAgIHwgIDEwICst CiBzcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbS5jICAgICAgICAgICAgfCAgMjYgKy0K IHNyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtYXBpLmMgICAgICAgICB8ICAgOCArLQog c3JjL2JhY2tlbmQvY29tbWFuZHMvY29uc3RyYWludC5jICAgICAgICAgICAgIHwgIDI4ICstCiBz cmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMgICAgICAgICAgICAgICAgfCAgMjMgKy0KIHNy Yy9iYWNrZW5kL2NvbW1hbmRzL3JlcGFjay5jICAgICAgICAgICAgICAgICB8ICAgNyArLQogc3Jj L2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMgICAgICAgICAgIHwgICA4ICstCiBzcmMv YmFja2VuZC9leGVjdXRvci9leGVjUmVwbGljYXRpb24uYyAgICAgICAgfCAgMTQgKy0KIHNyYy9i YWNrZW5kL2V4ZWN1dG9yL25vZGVCaXRtYXBJbmRleHNjYW4uYyAgICB8ICAgMSArCiBzcmMvYmFj a2VuZC9leGVjdXRvci9ub2RlSW5kZXhvbmx5c2Nhbi5jICAgICAgfCAyNDEgKy0tLS0tLS0tCiBz cmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhzY2FuLmMgICAgICAgICAgfCAgMTYgKy0KIHNy Yy9iYWNrZW5kL3V0aWxzL2FkdC9yaV90cmlnZ2Vycy5jICAgICAgICAgICB8ICAxNiArLQogc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNzLmMgICAgICAgICAgICAgIHwgIDk2ICstLS0KIHNy Yy90ZXN0L21vZHVsZXMvaW5kZXgvTWFrZWZpbGUgICAgICAgICAgICAgICB8ICAxMiArLQogLi4u L21vZHVsZXMvaW5kZXgvZXhwZWN0ZWQvZGlydHlfc25hcHNob3Qub3V0IHwgMTUzICsrKysrKwog c3JjL3Rlc3QvbW9kdWxlcy9pbmRleC9leHBlY3RlZC9ob3RfY2hhaW4ub3V0IHwgIDU2ICsrKwog c3JjL3Rlc3QvbW9kdWxlcy9pbmRleC9tZXNvbi5idWlsZCAgICAgICAgICAgIHwgIDI3ICsKIC4u Li9tb2R1bGVzL2luZGV4L3NwZWNzL2RpcnR5X3NuYXBzaG90LnNwZWMgICB8ICA2MSArKysKIHNy Yy90ZXN0L21vZHVsZXMvaW5kZXgvc3FsL2hvdF9jaGFpbi5zcWwgICAgICB8ICAzNyArKwogLi4u L21vZHVsZXMvaW5kZXgvdGVzdF9pbmRleHNjYW4tLTEuMC5zcWwgICAgIHwgIDEzICsKIHNyYy90 ZXN0L21vZHVsZXMvaW5kZXgvdGVzdF9pbmRleHNjYW4uYyAgICAgICB8IDE0NiArKysrKysKIHNy Yy90ZXN0L21vZHVsZXMvaW5kZXgvdGVzdF9pbmRleHNjYW4uY29udHJvbCB8ICAgNCArCiBzcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N0YXRzLm91dCAgICAgICAgICAgfCAgNjIgKysrCiBzcmMv dGVzdC9yZWdyZXNzL3NxbC9zdGF0cy5zcWwgICAgICAgICAgICAgICAgfCAgMjkgKysKIHNyYy90 b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgICAgICAgICAgICB8ICAgMyArLQogMzYgZmls ZXMgY2hhbmdlZCwgMTUwMyBpbnNlcnRpb25zKCspLCA3MjIgZGVsZXRpb25zKC0pCiBjcmVhdGUg bW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy9pbmRleC9leHBlY3RlZC9kaXJ0eV9zbmFwc2hv dC5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL2luZGV4L2V4cGVjdGVk L2hvdF9jaGFpbi5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL2luZGV4 L3NwZWNzL2RpcnR5X3NuYXBzaG90LnNwZWMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9t b2R1bGVzL2luZGV4L3NxbC9ob3RfY2hhaW4uc3FsCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rl c3QvbW9kdWxlcy9pbmRleC90ZXN0X2luZGV4c2Nhbi0tMS4wLnNxbAogY3JlYXRlIG1vZGUgMTAw NjQ0IHNyYy90ZXN0L21vZHVsZXMvaW5kZXgvdGVzdF9pbmRleHNjYW4uYwogY3JlYXRlIG1vZGUg MTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvaW5kZXgvdGVzdF9pbmRleHNjYW4uY29udHJvbAoKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNz L2dlbmFtLmgKaW5kZXggNjhiZmU0MDVkLi4wNWVlYzkyMDQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL2FjY2Vzcy9nZW5hbS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5oCkBAIC0x NTYsNiArMTU2LDcgQEAgZXh0ZXJuIHZvaWQgaW5kZXhfaW5zZXJ0X2NsZWFudXAoUmVsYXRpb24g aW5kZXhSZWxhdGlvbiwKIAogZXh0ZXJuIEluZGV4U2NhbkRlc2MgaW5kZXhfYmVnaW5zY2FuKFJl bGF0aW9uIGhlYXBSZWxhdGlvbiwKIAkJCQkJCQkJCSBSZWxhdGlvbiBpbmRleFJlbGF0aW9uLAor CQkJCQkJCQkJIGJvb2wgaW5kZXhfb25seV9zY2FuLAogCQkJCQkJCQkJIFNuYXBzaG90IHNuYXBz aG90LAogCQkJCQkJCQkJIEluZGV4U2Nhbkluc3RydW1lbnRhdGlvbiAqaW5zdHJ1bWVudCwKIAkJ CQkJCQkJCSBpbnQgbmtleXMsIGludCBub3JkZXJieXMsCkBAIC0xNzgsMTUgKzE3OSwxMyBAQCBl eHRlcm4gdm9pZCBpbmRleF9wYXJhbGxlbHNjYW5faW5pdGlhbGl6ZShSZWxhdGlvbiBoZWFwUmVs YXRpb24sCiBleHRlcm4gdm9pZCBpbmRleF9wYXJhbGxlbHJlc2NhbihJbmRleFNjYW5EZXNjIHNj YW4pOwogZXh0ZXJuIEluZGV4U2NhbkRlc2MgaW5kZXhfYmVnaW5zY2FuX3BhcmFsbGVsKFJlbGF0 aW9uIGhlYXByZWwsCiAJCQkJCQkJCQkJCSAgUmVsYXRpb24gaW5kZXhyZWwsCisJCQkJCQkJCQkJ CSAgYm9vbCBpbmRleF9vbmx5X3NjYW4sCiAJCQkJCQkJCQkJCSAgSW5kZXhTY2FuSW5zdHJ1bWVu dGF0aW9uICppbnN0cnVtZW50LAogCQkJCQkJCQkJCQkgIGludCBua2V5cywgaW50IG5vcmRlcmJ5 cywKIAkJCQkJCQkJCQkJICBQYXJhbGxlbEluZGV4U2NhbkRlc2MgcHNjYW4sCiAJCQkJCQkJCQkJ CSAgdWludDMyIGZsYWdzKTsKIGV4dGVybiBJdGVtUG9pbnRlciBpbmRleF9nZXRuZXh0X3RpZChJ bmRleFNjYW5EZXNjIHNjYW4sCiAJCQkJCQkJCQkgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pOwot ZXh0ZXJuIGJvb2wgaW5kZXhfZmV0Y2hfaGVhcChJbmRleFNjYW5EZXNjIHNjYW4sIFR1cGxlVGFi bGVTbG90ICpzbG90KTsKLWV4dGVybiBib29sIGluZGV4X2dldG5leHRfc2xvdChJbmRleFNjYW5E ZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAotCQkJCQkJCSAgIFR1cGxlVGFibGVT bG90ICpzbG90KTsKIGV4dGVybiBpbnQ2NCBpbmRleF9nZXRiaXRtYXAoSW5kZXhTY2FuRGVzYyBz Y2FuLCBUSURCaXRtYXAgKmJpdG1hcCk7CiAKIGV4dGVybiBJbmRleEJ1bGtEZWxldGVSZXN1bHQg KmluZGV4X2J1bGtfZGVsZXRlKEluZGV4VmFjdXVtSW5mbyAqaW5mbywKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaApp bmRleCA1MTc2NDc4YzIuLjJjYjI2MDJiMyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNz L2hlYXBhbS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaApAQCAtMTE1LDEyICsx MTUsMTAgQEAgdHlwZWRlZiBzdHJ1Y3QgQml0bWFwSGVhcFNjYW5EZXNjRGF0YQogdHlwZWRlZiBz dHJ1Y3QgQml0bWFwSGVhcFNjYW5EZXNjRGF0YSAqQml0bWFwSGVhcFNjYW5EZXNjOwogCiAvKgot ICogRGVzY3JpcHRvciBmb3IgZmV0Y2hlcyBmcm9tIGhlYXAgdmlhIGFuIGluZGV4LgorICogaGVh cGFtLXNwZWNpZmljIEluZGV4U2NhbkRlc2NEYXRhIG9wYXF1ZSBzdGF0ZQogICovCi10eXBlZGVm IHN0cnVjdCBJbmRleEZldGNoSGVhcERhdGEKK3R5cGVkZWYgc3RydWN0IEluZGV4U2NhbkhlYXBE YXRhCiB7Ci0JSW5kZXhGZXRjaFRhYmxlRGF0YSB4c19iYXNlOwkvKiBBTSBpbmRlcGVuZGVudCBw YXJ0IG9mIHRoZSBkZXNjcmlwdG9yICovCi0KIAkvKgogCSAqIEN1cnJlbnQgaGVhcCBidWZmZXIg aW4gc2NhbiAoYW5kIGl0cyBibG9jayBudW1iZXIpLCBpZiBhbnkuICBOQjogaWYKIAkgKiB4c19i bGsgaXMgbm90IEludmFsaWRCbG9ja051bWJlciwgd2UgaG9sZCBhIHBpbiBpbiB4c19jYnVmLgpA QCAtMTI4LDkgKzEyNiwxNCBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleEZldGNoSGVhcERhdGEKIAlC dWZmZXIJCXhzX2NidWY7CiAJQmxvY2tOdW1iZXIgeHNfYmxrOwogCi0JLyogQ3VycmVudCBoZWFw IGJsb2NrJ3MgY29ycmVzcG9uZGluZyBwYWdlIGluIHRoZSB2aXNpYmlsaXR5IG1hcCAqLwotCUJ1 ZmZlcgkJeHNfdm1idWZmZXI7Ci19IEluZGV4RmV0Y2hIZWFwRGF0YTsKKwkvKiBGb3IgdmlzaWJp bGl0eSBtYXAgY2hlY2tzIChpbmRleC1vbmx5IHNjYW5zIGFuZCBvbi1hY2Nlc3MgcHJ1bmluZykg Ki8KKwlCdWZmZXIJCXhzX3ZtYnVmZmVyOwkvKiB2aXNpYmlsaXR5IG1hcCBidWZmZXIgKi8KKwor CWJvb2wJCXhzX3JlYWRvbmx5OwkvKiBzY2FuIGlzIHJlYWQtb25seT8gKi8KKworCS8qIFBlci10 dXBsZSBjb250ZXh0IGZvciBwYWRkaW5nICJuYW1lIiBjb2x1bW5zIGR1cmluZyBpbmRleC1vbmx5 IHNjYW5zICovCisJTWVtb3J5Q29udGV4dCB4c19pdHVwX2N4dDsKK30gSW5kZXhTY2FuSGVhcERh dGE7CiAKIC8qIFJlc3VsdCBjb2RlcyBmb3IgSGVhcFR1cGxlU2F0aXNmaWVzVmFjdXVtICovCiB0 eXBlZGVmIGVudW0KQEAgLTQzMCwxNiArNDMzLDE1IEBAIGV4dGVybiBUcmFuc2FjdGlvbklkIGhl YXBfaW5kZXhfZGVsZXRlX3R1cGxlcyhSZWxhdGlvbiByZWwsCiAJCQkJCQkJCQkJCSAgVE1fSW5k ZXhEZWxldGVPcCAqZGVsc3RhdGUpOwogCiAvKiBpbiBoZWFwL2hlYXBhbV9pbmRleHNjYW4uYyAq LwotZXh0ZXJuIEluZGV4RmV0Y2hUYWJsZURhdGEgKmhlYXBhbV9pbmRleF9mZXRjaF9iZWdpbihS ZWxhdGlvbiByZWwsIHVpbnQzMiBmbGFncyk7Ci1leHRlcm4gdm9pZCBoZWFwYW1faW5kZXhfZmV0 Y2hfcmVzZXQoSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2Nhbik7Ci1leHRlcm4gdm9pZCBoZWFwYW1f aW5kZXhfZmV0Y2hfZW5kKEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4pOworZXh0ZXJuIGJvb2wg aGVhcGFtX2ZldGNoX3RpZChSZWxhdGlvbiByZWwsIEl0ZW1Qb2ludGVyIHRpZCwgU25hcHNob3Qg c25hcHNob3QsCisJCQkJCQkJIFR1cGxlVGFibGVTbG90ICpzbG90LCBib29sICphbGxfZGVhZCk7 CitleHRlcm4gdm9pZCBoZWFwYW1faW5kZXhfc2Nhbl9iZWdpbihJbmRleFNjYW5EZXNjIHNjYW4s IHVpbnQzMiBmbGFncyk7CitleHRlcm4gdm9pZCBoZWFwYW1faW5kZXhfc2Nhbl9yZXNldChJbmRl eFNjYW5EZXNjIHNjYW4pOworZXh0ZXJuIHZvaWQgaGVhcGFtX2luZGV4X3NjYW5fZW5kKEluZGV4 U2NhbkRlc2Mgc2Nhbik7CiBleHRlcm4gYm9vbCBoZWFwX2hvdF9zZWFyY2hfYnVmZmVyKEl0ZW1Q b2ludGVyIHRpZCwgUmVsYXRpb24gcmVsYXRpb24sCiAJCQkJCQkJCSAgIEJ1ZmZlciBidWZmZXIs IFNuYXBzaG90IHNuYXBzaG90LCBIZWFwVHVwbGUgaGVhcFR1cGxlLAogCQkJCQkJCQkgICBib29s ICphbGxfZGVhZCwgYm9vbCBmaXJzdF9jYWxsKTsKLWV4dGVybiBib29sIGhlYXBhbV9pbmRleF9m ZXRjaF90dXBsZShzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbiwKLQkJCQkJCQkJCSBJ dGVtUG9pbnRlciB0aWQsIFNuYXBzaG90IHNuYXBzaG90LAotCQkJCQkJCQkJIFR1cGxlVGFibGVT bG90ICpzbG90LCBib29sICpoZWFwX2NvbnRpbnVlLAotCQkJCQkJCQkJIGJvb2wgKmFsbF9kZWFk KTsKK2V4dGVybiB2b2lkIGhlYXBfZmlsbF9pb3Nfc2xvdChJbmRleFNjYW5EZXNjIHNjYW4sIFR1 cGxlVGFibGVTbG90ICpzbG90KTsKIAogLyogaW4gaGVhcC9wcnVuZWhlYXAuYyAqLwogZXh0ZXJu IHZvaWQgaGVhcF9wYWdlX3BydW5lX29wdChSZWxhdGlvbiByZWxhdGlvbiwgQnVmZmVyIGJ1ZmZl ciwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmggYi9zcmMvaW5jbHVk ZS9hY2Nlc3MvcmVsc2Nhbi5oCmluZGV4IDJlYTA2YTY3YS4uNjdlMGRiMDg0IDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9y ZWxzY2FuLmgKQEAgLTE2LDYgKzE2LDcgQEAKIAogI2luY2x1ZGUgImFjY2Vzcy9odHVwX2RldGFp bHMuaCIKICNpbmNsdWRlICJhY2Nlc3MvaXR1cC5oIgorI2luY2x1ZGUgImFjY2Vzcy9zZGlyLmgi CiAjaW5jbHVkZSAibm9kZXMvdGlkYml0bWFwLmgiCiAjaW5jbHVkZSAicG9ydC9hdG9taWNzLmgi CiAjaW5jbHVkZSAic3RvcmFnZS9yZWxmaWxlbG9jYXRvci5oIgpAQCAtMjUsNiArMjYsNyBAQAog CiBzdHJ1Y3QgUGFyYWxsZWxUYWJsZVNjYW5EZXNjRGF0YTsKIHN0cnVjdCBUYWJsZVNjYW5JbnN0 cnVtZW50YXRpb247CitzdHJ1Y3QgVHVwbGVUYWJsZVNsb3Q7CiAKIC8qCiAgKiBHZW5lcmljIGRl c2NyaXB0b3IgZm9yIHRhYmxlIHNjYW5zLiBUaGlzIGlzIHRoZSBiYXNlLWNsYXNzIGZvciB0YWJs ZSBzY2FucywKQEAgLTEyMCwyMiArMTIyLDYgQEAgdHlwZWRlZiBzdHJ1Y3QgUGFyYWxsZWxCbG9j a1RhYmxlU2NhbldvcmtlckRhdGEKIH0gUGFyYWxsZWxCbG9ja1RhYmxlU2NhbldvcmtlckRhdGE7 CiB0eXBlZGVmIHN0cnVjdCBQYXJhbGxlbEJsb2NrVGFibGVTY2FuV29ya2VyRGF0YSAqUGFyYWxs ZWxCbG9ja1RhYmxlU2NhbldvcmtlcjsKIAotLyoKLSAqIEJhc2UgY2xhc3MgZm9yIGZldGNoZXMg ZnJvbSBhIHRhYmxlIHZpYSBhbiBpbmRleC4gVGhpcyBpcyB0aGUgYmFzZS1jbGFzcwotICogZm9y IHN1Y2ggc2NhbnMsIHdoaWNoIG5lZWRzIHRvIGJlIGVtYmVkZGVkIGluIHRoZSByZXNwZWN0aXZl IHN0cnVjdCBmb3IKLSAqIGluZGl2aWR1YWwgQU1zLgotICovCi10eXBlZGVmIHN0cnVjdCBJbmRl eEZldGNoVGFibGVEYXRhCi17Ci0JUmVsYXRpb24JcmVsOwotCi0JLyoKLQkgKiBCaXRtYXNrIG9m IFNjYW5PcHRpb25zIGFmZmVjdGluZyB0aGUgcmVsYXRpb24uIE5vIFNPX0lOVEVSTkFMX0ZMQUdT IGFyZQotCSAqIHBlcm1pdHRlZC4KLQkgKi8KLQl1aW50MzIJCWZsYWdzOwotfSBJbmRleEZldGNo VGFibGVEYXRhOwotCiBzdHJ1Y3QgSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uOwogCiAvKgpAQCAt MTcyLDEwICsxNTgsMTAgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuRGVzY0RhdGEKIAlzdHJ1 Y3QgSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uICppbnN0cnVtZW50OwogCiAJLyoKLQkgKiBJbiBh biBpbmRleC1vbmx5IHNjYW4sIGEgc3VjY2Vzc2Z1bCBhbWdldHR1cGxlIGNhbGwgbXVzdCBmaWxs IGVpdGhlcgotCSAqIHhzX2l0dXAgKGFuZCB4c19pdHVwZGVzYykgb3IgeHNfaGl0dXAgKGFuZCB4 c19oaXR1cGRlc2MpIHRvIHByb3ZpZGUgdGhlCi0JICogZGF0YSByZXR1cm5lZCBieSB0aGUgc2Nh bi4gIEl0IGNhbiBmaWxsIGJvdGgsIGluIHdoaWNoIGNhc2UgdGhlIGhlYXAKLQkgKiBmb3JtYXQg d2lsbCBiZSB1c2VkLgorCSAqIEluIGFuIGluZGV4LW9ubHkgc2NhbiwgdGhlIGluZGV4IEFNIGZp bGxzIGVpdGhlciB4c19pdHVwIG9yIHhzX2hpdHVwCisJICogd2l0aCB0aGUgZGF0YSB0byBiZSBy ZXR1cm5lZCBieSB0aGUgc2NhbiAoaXQgY2FuIGZpbGwgYm90aCwgaW4gd2hpY2gKKwkgKiBjYXNl IHRoZSBoZWFwIGZvcm1hdCBpcyB1c2VkKS4gIFRoZSB0YWJsZSBBTSBjb25zdW1lcyB0aGVzZSB0 byBmaWxsIHRoZQorCSAqIGNhbGxlcidzIHNsb3QgZHVyaW5nIHRhYmxlX2luZGV4X2dldG5leHRf c2xvdC4KIAkgKi8KIAlJbmRleFR1cGxlCXhzX2l0dXA7CQkvKiBpbmRleCB0dXBsZSByZXR1cm5l ZCBieSBBTSAqLwogCXN0cnVjdCBUdXBsZURlc2NEYXRhICp4c19pdHVwZGVzYzsJLyogcm93dHlw ZSBkZXNjcmlwdG9yIG9mIHhzX2l0dXAgKi8KQEAgLTE4NSw5ICsxNzEsMjcgQEAgdHlwZWRlZiBz dHJ1Y3QgSW5kZXhTY2FuRGVzY0RhdGEKIAlJdGVtUG9pbnRlckRhdGEgeHNfaGVhcHRpZDsgLyog cmVzdWx0ICovCiAJYm9vbAkJeHNfaGVhcF9jb250aW51ZTsJLyogVCBpZiBtdXN0IGtlZXAgd2Fs a2luZywgcG90ZW50aWFsCiAJCQkJCQkJCQkgKiBmdXJ0aGVyIHJlc3VsdHMgKi8KLQlJbmRleEZl dGNoVGFibGVEYXRhICp4c19oZWFwZmV0Y2g7CiAKLQlib29sCQl4c19yZWNoZWNrOwkJLyogVCBt ZWFucyBzY2FuIGtleXMgbXVzdCBiZSByZWNoZWNrZWQgKi8KKwkvKiBUYWJsZSBhY2Nlc3MgbWV0 aG9kJ3MgcHJpdmF0ZSBzdGF0ZSAobm90IHVzZWQgZHVyaW5nIGJpdG1hcCBzY2FucykgKi8KKwl2 b2lkCSAgICp4c190YWJsZV9vcGFxdWU7CisKKwkvKgorCSAqIFJlc29sdmVkIHRhYmxlX2luZGV4 X2dldG5leHRfc2xvdCBjYWxsYmFjaywgd2hpY2ggaXMgc2V0IGJ5CisJICogdGFibGVfaW5kZXhf c2Nhbl9iZWdpbiBhdCB0aGUgc3RhcnQgb2YgYW1nZXR0dXBsZSBzY2Fucy4gIFJlcG9ydHMgdmlh CisJICogKnJlY2hlY2sgd2hldGhlciB0aGUgc2NhbiBrZXlzIG11c3QgYmUgcmVjaGVja2VkLgor CSAqLworCWJvb2wJCSgqeHNfZ2V0bmV4dF9zbG90KSAoc3RydWN0IEluZGV4U2NhbkRlc2NEYXRh ICpzY2FuLAorCQkJCQkJCQkJU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJCQkJCQlzdHJ1 Y3QgVHVwbGVUYWJsZVNsb3QgKnNsb3QsCisJCQkJCQkJCQlib29sICpyZWNoZWNrKTsKKworCS8q CisJICogeHNfcmVjaGVjayBpcyBzZXQgYnkgaW5kZXggQU1zLCBhbmQgcmVhZCBieSB0YWJsZSBB TXMuCisJICoKKwkgKiBTaG91bGQgbm90IGJlIGNoZWNrZWQgYnkgY29yZSBleGVjdXRvciBub2Rl cyAodGhleSBzaG91bGQgdXNlIHRoZQorCSAqIHhzX2dldG5leHRfc2xvdCBjYWxsYmFjaydzIHJl Y2hlY2sgYXJndW1lbnQgaW5zdGVhZCkuCisJICovCisJYm9vbAkJeHNfcmVjaGVjazsKIAogCS8q CiAJICogV2hlbiBmZXRjaGluZyB3aXRoIGFuIG9yZGVyaW5nIG9wZXJhdG9yLCB0aGUgdmFsdWVz IG9mIHRoZSBPUkRFUiBCWQpAQCAtMTk1LDExICsxOTksMjggQEAgdHlwZWRlZiBzdHJ1Y3QgSW5k ZXhTY2FuRGVzY0RhdGEKIAkgKiB4c19yZWNoZWNrb3JkZXJieSBpcyB0cnVlLCB0aGVzZSBuZWVk IHRvIGJlIHJlY2hlY2tlZCBqdXN0IGxpa2UgdGhlCiAJICogc2NhbiBrZXlzLCBhbmQgdGhlIHZh bHVlcyByZXR1cm5lZCBoZXJlIGFyZSBhIGxvd2VyLWJvdW5kIG9uIHRoZSBhY3R1YWwKIAkgKiB2 YWx1ZXMuCisJICoKKwkgKiBOb3RlOiB1bmxpa2UgeHNfcmVjaGVjaywgdGhlc2UgZmllbGRzIGFy ZSByZWFkIGJ5IGNvcmUgZXhlY3V0b3Igbm9kZXMuCiAJICovCiAJRGF0dW0JICAgKnhzX29yZGVy Ynl2YWxzOwogCWJvb2wJICAgKnhzX29yZGVyYnludWxsczsKIAlib29sCQl4c19yZWNoZWNrb3Jk ZXJieTsKIAorCS8qCisJICogSW5kZXggYXR0cmlidXRlcyBob2xkaW5nICJuYW1lIiBjb2x1bW5z IHN0b3JlZCBhcyBjc3RyaW5ncywgd2hpY2ggdGhlCisJICogdGFibGUgQU0gcmUtcGFkcyB0byBO QU1FREFUQUxFTiB3aGVuIGZpbGxpbmcgYSBzbG90IGZyb20geHNfaXR1cAorCSAqLworCUF0dHJO dW1iZXIgKnhzX25hbWVfY3N0cmluZ19hdHRudW1zOworCWludAkJCXhzX25hbWVfY3N0cmluZ19j b3VudDsKKworCS8qCisJICogQW4gYXBwcm94aW1hdGUgbGltaXQgb24gdGhlIGFtb3VudCBvZiB3 b3JrLCBtZWFzdXJlZCBpbiBwYWdlcyB0b3VjaGVkLAorCSAqIGltcG9zZWQgb24gdGhlIGluZGV4 IHNjYW4uICBUaGUgZGVmYXVsdCwgMCwgbWVhbnMgbm8gbGltaXQuICBPbmx5CisJICogaG9ub3Jl ZCBkdXJpbmcgaW5kZXgtb25seSBzY2Fucy4gIFVzZWQgYnkgc2VsZnVuY3MuYyB0byBib3VuZCB0 aGUgY29zdAorCSAqIG9mIGdldF9hY3R1YWxfdmFyaWFibGVfZW5kcG9pbnQoKS4KKwkgKi8KKwl1 aW50OAkJeHNfdmlzaXRlZF9wYWdlc19saW1pdDsKKwogCS8qIHBhcmFsbGVsIGluZGV4IHNjYW4g aW5mb3JtYXRpb24sIGluIHNoYXJlZCBtZW1vcnkgKi8KIAlzdHJ1Y3QgUGFyYWxsZWxJbmRleFNj YW5EZXNjRGF0YSAqcGFyYWxsZWxfc2NhbjsKIH0gSW5kZXhTY2FuRGVzY0RhdGE7CkBAIC0yMTMs OCArMjM0LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgUGFyYWxsZWxJbmRleFNjYW5EZXNjRGF0YQogCWNo YXIJCXBzX3NuYXBzaG90X2RhdGFbRkxFWElCTEVfQVJSQVlfTUVNQkVSXTsKIH0JCQlQYXJhbGxl bEluZGV4U2NhbkRlc2NEYXRhOwogCi1zdHJ1Y3QgVHVwbGVUYWJsZVNsb3Q7Ci0KIC8qIFN0cnVj dCBmb3Igc3RvcmFnZS1vci1pbmRleCBzY2FucyBvZiBzeXN0ZW0gdGFibGVzICovCiB0eXBlZGVm IHN0cnVjdCBTeXNTY2FuRGVzY0RhdGEKIHsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vz cy90YWJsZWFtLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oCmluZGV4IGYyYzM2Njk2 Yi4uZTFlZTkwMjIyIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oCisr KyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgKQEAgLTM4LDYgKzM4LDcgQEAgdHlwZWRl ZiBzdHJ1Y3QgQnVsa0luc2VydFN0YXRlRGF0YSBCdWxrSW5zZXJ0U3RhdGVEYXRhOwogdHlwZWRl ZiBzdHJ1Y3QgSW5kZXhJbmZvIEluZGV4SW5mbzsKIHR5cGVkZWYgc3RydWN0IFNhbXBsZVNjYW5T dGF0ZSBTYW1wbGVTY2FuU3RhdGU7CiB0eXBlZGVmIHN0cnVjdCBTY2FuS2V5RGF0YSBTY2FuS2V5 RGF0YTsKK3R5cGVkZWYgc3RydWN0IEluZGV4U2NhbkRlc2NEYXRhICpJbmRleFNjYW5EZXNjOwog dHlwZWRlZiBzdHJ1Y3QgVmFsaWRhdGVJbmRleFN0YXRlIFZhbGlkYXRlSW5kZXhTdGF0ZTsKIHR5 cGVkZWYgc3RydWN0IFZhY3V1bVBhcmFtcyBWYWN1dW1QYXJhbXM7CiAKQEAgLTQ0Niw2MCArNDQ3 LDcwIEBAIHR5cGVkZWYgc3RydWN0IFRhYmxlQW1Sb3V0aW5lCiAJICovCiAKIAkvKgotCSAqIFBy ZXBhcmUgdG8gZmV0Y2ggdHVwbGVzIGZyb20gdGhlIHJlbGF0aW9uLCBhcyBuZWVkZWQgd2hlbiBm ZXRjaGluZwotCSAqIHR1cGxlcyBmb3IgYW4gaW5kZXggc2Nhbi4gIFRoZSBjYWxsYmFjayBoYXMg dG8gcmV0dXJuIGFuCi0JICogSW5kZXhGZXRjaFRhYmxlRGF0YSwgd2hpY2ggdGhlIEFNIHdpbGwg dHlwaWNhbGx5IGVtYmVkIGluIGEgbGFyZ2VyCi0JICogc3RydWN0dXJlIHdpdGggYWRkaXRpb25h bCBpbmZvcm1hdGlvbi4KKwkgKiBQcmVwYXJlIGZvciBhbiBpbmRleCBzY2FuIG9mIHRoZSB0YWJs ZS4gIFRoZSBjYWxsYmFjayBzdG9yZXMgaXRzIG93bgorCSAqIHByaXZhdGUgc2NhbiBzdGF0ZSBp biB0aGUgaW5kZXggc2NhbiBkZXNjcmlwdG9yJ3MgeHNfdGFibGVfb3BhcXVlIGZpZWxkCisJICog KGFuIG9wYXF1ZSBwb2ludGVyKS4KIAkgKgogCSAqIGZsYWdzIGlzIGEgYml0bWFzayBvZiBTY2Fu T3B0aW9ucyBhZmZlY3RpbmcgdW5kZXJseWluZyB0YWJsZSBzY2FuCiAJICogYmVoYXZpb3IuIFNl ZSBzY2FuX2JlZ2luKCkgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gcGFzc2luZyB0aGVzZS4KIAkg KgotCSAqIFR1cGxlcyBmb3IgYW4gaW5kZXggc2NhbiBjYW4gdGhlbiBiZSBmZXRjaGVkIHZpYSBp bmRleF9mZXRjaF90dXBsZS4KKwkgKiBDYWxsYmFjayBpcyByZXNwb25zaWJsZSBmb3Igc2V0dGlu ZyBJbmRleFNjYW5EZXNjLnhzX2dldG5leHRfc2xvdCB0bworCSAqIHRoZSBhcHByb3ByaWF0ZSBz bG90LWJhc2VkIGNhbGxiYWNrLiAgVHVwbGVzIGFyZSB0aGVuIHJldHVybmVkIHRocm91Z2gKKwkg KiB0aGUgY2FsbGVyJ3Mgc2xvdCwgdmlhIHRhYmxlX2luZGV4X2dldG5leHRfc2xvdCgpLiAgTm8g c2VwYXJhdGUKKwkgKiBzbG90LWJhc2VkIGNhbGxiYWNrIGV4aXN0cyBpbiB0aGlzIHN0cnVjdCEK KwkgKgorCSAqIEluIHByaW5jaXBsZSBhIHNpbmdsZSBnZW5lcmFsLXB1cnBvc2UgY2FsbGJhY2sg KHN0b3JlZCBoZXJlKSB3b3VsZAorCSAqIHN1ZmZpY2UsIGJ1dCB1c2luZyBzcGVjaWFsaXplZCB2 YXJpYW50cyBhbGxvd3MgdGhlIHRhYmxlIEFNIHRvIHByb3ZpZGUKKwkgKiBtaW5pbWFsIGNvZGUg YmFzZWQgb24gY29uZGl0aW9ucyB0aGF0IGFyZSBmaXhlZCBmb3IgdGhlIHdob2xlIHNjYW4gYXMK KwkgKiBhbiBvcHRpbWl6YXRpb24gKGUuZy4sIHZhcmlhbnRzIGZvciBwbGFpbiBpbmRleCBzY2Fu cyBhbmQgaW5kZXgtb25seQorCSAqIHNjYW5zLCBlYWNoIHdpdGggZmV3ZXIgYnJhbmNoZXMpLgor CSAqCisJICogVGhlIHhzX2dldG5leHRfc2xvdCBjYWxsYmFjayBtYXkgcmVseSBvbiB0aGUgc2xv dCB0eXBlIHRoYXQgY2FsbGVycyBhcmUKKwkgKiByZXF1aXJlZCB0byBwYXNzOiBwbGFpbiBpbmRl eCBzY2FucyB1c2UgYSBzbG90IG9mIHRoZSB0YWJsZSBBTSdzIG93bgorCSAqIHByZWZlcnJlZCB0 eXBlIChzZWUgdGFibGVfc2xvdF9jYWxsYmFja3MpLCB3aGlsZSBpbmRleC1vbmx5IHNjYW5zCisJ ICogYWx3YXlzIHVzZSBhIHZpcnR1YWwgc2xvdCwgc2luY2UgdGhlIHNsb3QgaXMgZmlsbGVkIGZy b20gaW5kZXggZGF0YQorCSAqIHJhdGhlciB0aGFuIGZyb20gdGhlIHRhYmxlLgorCSAqCisJICog Tm90ZSB0aGF0IEFNcyB0aGF0IGRvIG5vdCBuZWNlc3NhcmlseSB1cGRhdGUgaW5kZXhlcyB3aGVu IGluZGV4ZWQKKwkgKiBjb2x1bW5zIGRvIG5vdCBjaGFuZ2UsIG5lZWQgdG8gcmV0dXJuIHRoZSBj dXJyZW50L2NvcnJlY3QgdmVyc2lvbiBvZgorCSAqIHRoZSB0dXBsZSB0aGF0IGlzIHZpc2libGUg dG8gdGhlIHNuYXBzaG90LCBldmVuIGlmIHRoZSB0aWQgcG9pbnRzIHRvIGFuCisJICogb2xkZXIg dmVyc2lvbiBvZiB0aGUgdHVwbGUuCiAJICovCi0Jc3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEg KigqaW5kZXhfZmV0Y2hfYmVnaW4pIChSZWxhdGlvbiByZWwsIHVpbnQzMiBmbGFncyk7CisJdm9p ZAkJKCppbmRleF9zY2FuX2JlZ2luKSAoSW5kZXhTY2FuRGVzYyBzY2FuLCB1aW50MzIgZmxhZ3Mp OwogCiAJLyoKLQkgKiBSZXNldCBpbmRleCBmZXRjaC4gVHlwaWNhbGx5IHRoaXMgd2lsbCByZWxl YXNlIGNyb3NzIGluZGV4IGZldGNoCi0JICogcmVzb3VyY2VzIGhlbGQgaW4gSW5kZXhGZXRjaFRh YmxlRGF0YS4KKwkgKiBJbmZvcm0gdGhlIHRhYmxlIEFNIHRoYXQgdGhlcmUncyB0byBiZSBlaXRo ZXIgYSByZXNjYW4gb3IgYSByZXN0b3JlIG9mCisJICogYSBtYXJrZWQgcG9zaXRpb24sIG9yIHRo YXQgdGhlIHNjYW4gaGFzIHJ1biBvdXQgb2YgaW5kZXggZW50cmllcy4KIAkgKi8KLQl2b2lkCQko KmluZGV4X2ZldGNoX3Jlc2V0KSAoc3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEgKmRhdGEpOwor CXZvaWQJCSgqaW5kZXhfc2Nhbl9yZXNldCkgKEluZGV4U2NhbkRlc2Mgc2Nhbik7CiAKIAkvKgot CSAqIFJlbGVhc2UgcmVzb3VyY2VzIGFuZCBkZWFsbG9jYXRlIGluZGV4IGZldGNoLgorCSAqIFJl bGVhc2UgcmVzb3VyY2VzIGFuZCBkZWFsbG9jYXRlIGluZGV4IHNjYW4gc3RhdGUuCisJICovCisJ dm9pZAkJKCppbmRleF9zY2FuX2VuZCkgKEluZGV4U2NhbkRlc2Mgc2Nhbik7CisKKwkvKiAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKwkgKiBDYWxsYmFja3MgZm9yIG5vbi1tb2RpZnlpbmcgb3BlcmF0aW9ucyBv biBpbmRpdmlkdWFsIHR1cGxlcworCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCSAqLwotCXZvaWQJCSgq aW5kZXhfZmV0Y2hfZW5kKSAoc3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEgKmRhdGEpOwogCiAJ LyoKIAkgKiBGZXRjaCB0dXBsZSBhdCBgdGlkYCBpbnRvIGBzbG90YCwgYWZ0ZXIgZG9pbmcgYSB2 aXNpYmlsaXR5IHRlc3QKIAkgKiBhY2NvcmRpbmcgdG8gYHNuYXBzaG90YC4gSWYgYSB0dXBsZSB3 YXMgZm91bmQgYW5kIHBhc3NlZCB0aGUgdmlzaWJpbGl0eQogCSAqIHRlc3QsIHJldHVybiB0cnVl LCBmYWxzZSBvdGhlcndpc2UuCiAJICoKLQkgKiBOb3RlIHRoYXQgQU1zIHRoYXQgZG8gbm90IG5l Y2Vzc2FyaWx5IHVwZGF0ZSBpbmRleGVzIHdoZW4gaW5kZXhlZAotCSAqIGNvbHVtbnMgZG8gbm90 IGNoYW5nZSwgbmVlZCB0byByZXR1cm4gdGhlIGN1cnJlbnQvY29ycmVjdCB2ZXJzaW9uIG9mCi0J ICogdGhlIHR1cGxlIHRoYXQgaXMgdmlzaWJsZSB0byB0aGUgc25hcHNob3QsIGV2ZW4gaWYgdGhl IHRpZCBwb2ludHMgdG8gYW4KLQkgKiBvbGRlciB2ZXJzaW9uIG9mIHRoZSB0dXBsZS4KKwkgKiBU aGlzIGlzIGEgbG93ZXItbGV2ZWwgY2FsbGJhY2sgZm9yIHNpbmdsZS1zaG90IFRJRCBsb29rdXBz IHVzZWQgYnkKKwkgKiBjb25zdHJhaW50IGVuZm9yY2VtZW50IGNvZGUgKHVuaXF1ZSBjaGVja3Mg YW5kIHNpbWlsYXIpLgogCSAqCi0JICogKmNhbGxfYWdhaW4gaXMgZmFsc2Ugb24gdGhlIGZpcnN0 IGNhbGwgdG8gaW5kZXhfZmV0Y2hfdHVwbGUgZm9yIGEgdGlkLgotCSAqIElmIHRoZXJlIHBvdGVu dGlhbGx5IGlzIGFub3RoZXIgdHVwbGUgbWF0Y2hpbmcgdGhlIHRpZCwgKmNhbGxfYWdhaW4KLQkg KiBuZWVkcyB0byBiZSBzZXQgdG8gdHJ1ZSBieSBpbmRleF9mZXRjaF90dXBsZSwgc2lnbmFsaW5n IHRvIHRoZSBjYWxsZXIKLQkgKiB0aGF0IGluZGV4X2ZldGNoX3R1cGxlIHNob3VsZCBiZSBjYWxs ZWQgYWdhaW4gZm9yIHRoZSBzYW1lIHRpZC4KLQkgKgotCSAqICphbGxfZGVhZCwgaWYgYWxsX2Rl YWQgaXMgbm90IE5VTEwsIHNob3VsZCBiZSBzZXQgdG8gdHJ1ZSBieQotCSAqIGluZGV4X2ZldGNo X3R1cGxlIGlmZiBpdCBpcyBndWFyYW50ZWVkIHRoYXQgbm8gYmFja2VuZCBuZWVkcyB0byBzZWUK LQkgKiB0aGF0IHR1cGxlLiBJbmRleCBBTXMgY2FuIHVzZSB0aGF0IHRvIGF2b2lkIHJldHVybmlu ZyB0aGF0IHRpZCBpbgotCSAqIGZ1dHVyZSBzZWFyY2hlcy4KLQkgKi8KLQlib29sCQkoKmluZGV4 X2ZldGNoX3R1cGxlKSAoc3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4sCi0JCQkJCQkJ CQkgIEl0ZW1Qb2ludGVyIHRpZCwKLQkJCQkJCQkJCSAgU25hcHNob3Qgc25hcHNob3QsCi0JCQkJ CQkJCQkgIFR1cGxlVGFibGVTbG90ICpzbG90LAotCQkJCQkJCQkJICBib29sICpjYWxsX2FnYWlu LCBib29sICphbGxfZGVhZCk7Ci0KLQotCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCSAqIENhbGxiYWNr cyBmb3Igbm9uLW1vZGlmeWluZyBvcGVyYXRpb25zIG9uIGluZGl2aWR1YWwgdHVwbGVzCi0JICog LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisJICogKmFsbF9kZWFkLCBpZiBhbGxfZGVhZCBpcyBub3QgTlVMTCwg c2hvdWxkIGJlIHNldCB0byB0cnVlIGJ5IGZldGNoX3RpZAorCSAqIGlmZiBpdCBpcyBndWFyYW50 ZWVkIHRoYXQgbm8gYmFja2VuZCBuZWVkcyB0byBzZWUgdGhhdCB0dXBsZS4gSW5kZXggQU1zCisJ ICogY2FuIHVzZSB0aGF0IHRvIGF2b2lkIHJldHVybmluZyB0aGF0IHRpZCBpbiBmdXR1cmUgc2Vh cmNoZXMuCiAJICovCisJYm9vbAkJKCpmZXRjaF90aWQpIChSZWxhdGlvbiByZWwsCisJCQkJCQkJ ICBJdGVtUG9pbnRlciB0aWQsCisJCQkJCQkJICBTbmFwc2hvdCBzbmFwc2hvdCwKKwkJCQkJCQkg IFR1cGxlVGFibGVTbG90ICpzbG90LAorCQkJCQkJCSAgYm9vbCAqYWxsX2RlYWQpOwogCiAJLyoK IAkgKiBGZXRjaCB0dXBsZSBhdCBgdGlkYCBpbnRvIGBzbG90YCwgYWZ0ZXIgZG9pbmcgYSB2aXNp YmlsaXR5IHRlc3QKQEAgLTEyMzUsMTYgKzEyNDYsMTkgQEAgdGFibGVfcGFyYWxsZWxzY2FuX3Jl aW5pdGlhbGl6ZShSZWxhdGlvbiByZWwsIFBhcmFsbGVsVGFibGVTY2FuRGVzYyBwc2NhbikKICAq LwogCiAvKgotICogUHJlcGFyZSB0byBmZXRjaCB0dXBsZXMgZnJvbSB0aGUgcmVsYXRpb24sIGFz IG5lZWRlZCB3aGVuIGZldGNoaW5nIHR1cGxlcwotICogZm9yIGFuIGluZGV4IHNjYW4uCisgKiBQ cmVwYXJlIGZvciBhbiBpbmRleCBzY2FuIG9mIHRoZSByZWxhdGlvbi4gIFRoZSBjYWxsYmFjayBz dG9yZXMgaXRzCisgKiBwcml2YXRlIHNjYW4gc3RhdGUgaW4gdGhlIHNjYW4ncyB4c190YWJsZV9v cGFxdWUgZmllbGQuCisgKgorICogVHVwbGVzIGZvciBhbiBpbmRleCBzY2FuIGFyZSB0aGVuIHJl dHVybmVkIHRocm91Z2ggdGhlIGNhbGxlcidzIHNsb3QsIHZpYQorICogdGFibGVfaW5kZXhfZ2V0 bmV4dF9zbG90KCkuCiAgKgogICogZmxhZ3MgaXMgYSBiaXRtYXNrIG9mIFNjYW5PcHRpb25zLiBO byBTT19JTlRFUk5BTF9GTEFHUyBhcmUgcGVybWl0dGVkLgotICoKLSAqIFR1cGxlcyBmb3IgYW4g aW5kZXggc2NhbiBjYW4gdGhlbiBiZSBmZXRjaGVkIHZpYSB0YWJsZV9pbmRleF9mZXRjaF90dXBs ZSgpLgogICovCi1zdGF0aWMgaW5saW5lIEluZGV4RmV0Y2hUYWJsZURhdGEgKgotdGFibGVfaW5k ZXhfZmV0Y2hfYmVnaW4oUmVsYXRpb24gcmVsLCB1aW50MzIgZmxhZ3MpCitzdGF0aWMgaW5saW5l IHZvaWQKK3RhYmxlX2luZGV4X3NjYW5fYmVnaW4oSW5kZXhTY2FuRGVzYyBzY2FuLCB1aW50MzIg ZmxhZ3MpCiB7CisJUmVsYXRpb24JcmVsID0gc2Nhbi0+aGVhcFJlbGF0aW9uOworCiAJQXNzZXJ0 KChmbGFncyAmIFNPX0lOVEVSTkFMX0ZMQUdTKSA9PSAwKTsKIAogCS8qCkBAIC0xMjU1LDc0ICsx MjY5LDEwOSBAQCB0YWJsZV9pbmRleF9mZXRjaF9iZWdpbihSZWxhdGlvbiByZWwsIHVpbnQzMiBm bGFncykKIAlpZiAodW5saWtlbHkoVHJhbnNhY3Rpb25JZElzVmFsaWQoQ2hlY2tYaWRBbGl2ZSkg JiYgIWJzeXNzY2FuKSkKIAkJZWxvZyhFUlJPUiwgInNjYW4gc3RhcnRlZCBkdXJpbmcgbG9naWNh bCBkZWNvZGluZyIpOwogCi0JcmV0dXJuIHJlbC0+cmRfdGFibGVhbS0+aW5kZXhfZmV0Y2hfYmVn aW4ocmVsLCBmbGFncyk7CisJcmVsLT5yZF90YWJsZWFtLT5pbmRleF9zY2FuX2JlZ2luKHNjYW4s IGZsYWdzKTsKIH0KIAogLyoKLSAqIFJlc2V0IGluZGV4IGZldGNoLiBUeXBpY2FsbHkgdGhpcyB3 aWxsIHJlbGVhc2UgY3Jvc3MgaW5kZXggZmV0Y2ggcmVzb3VyY2VzCi0gKiBoZWxkIGluIEluZGV4 RmV0Y2hUYWJsZURhdGEuCisgKiBJbmZvcm0gdGhlIHRhYmxlIEFNIHRoYXQgdGhlcmUncyB0byBi ZSBlaXRoZXIgYSByZXNjYW4gb3IgYSByZXN0b3JlIG9mIGEKKyAqIG1hcmtlZCBwb3NpdGlvbiwg b3IgdGhhdCB0aGUgc2NhbiBoYXMgcnVuIG91dCBvZiBpbmRleCBlbnRyaWVzLgogICovCiBzdGF0 aWMgaW5saW5lIHZvaWQKLXRhYmxlX2luZGV4X2ZldGNoX3Jlc2V0KHN0cnVjdCBJbmRleEZldGNo VGFibGVEYXRhICpzY2FuKQordGFibGVfaW5kZXhfc2Nhbl9yZXNldChJbmRleFNjYW5EZXNjIHNj YW4pCiB7Ci0Jc2Nhbi0+cmVsLT5yZF90YWJsZWFtLT5pbmRleF9mZXRjaF9yZXNldChzY2FuKTsK KwlBc3NlcnQoc2Nhbi0+eHNfdGFibGVfb3BhcXVlKTsKKworCXNjYW4tPmhlYXBSZWxhdGlvbi0+ cmRfdGFibGVhbS0+aW5kZXhfc2Nhbl9yZXNldChzY2FuKTsKIH0KIAogLyoKLSAqIFJlbGVhc2Ug cmVzb3VyY2VzIGFuZCBkZWFsbG9jYXRlIGluZGV4IGZldGNoLgorICogUmVsZWFzZSByZXNvdXJj ZXMgYW5kIGRlYWxsb2NhdGUgdGhlIHRhYmxlIEFNJ3MgcHJpdmF0ZSBpbmRleCBzY2FuIHN0YXRl CisgKiAodGhlIHNjYW4ncyB4c190YWJsZV9vcGFxdWUpCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9p ZAotdGFibGVfaW5kZXhfZmV0Y2hfZW5kKHN0cnVjdCBJbmRleEZldGNoVGFibGVEYXRhICpzY2Fu KQordGFibGVfaW5kZXhfc2Nhbl9lbmQoSW5kZXhTY2FuRGVzYyBzY2FuKQogewotCXNjYW4tPnJl bC0+cmRfdGFibGVhbS0+aW5kZXhfZmV0Y2hfZW5kKHNjYW4pOworCUFzc2VydChzY2FuLT54c190 YWJsZV9vcGFxdWUpOworCisJc2Nhbi0+aGVhcFJlbGF0aW9uLT5yZF90YWJsZWFtLT5pbmRleF9z Y2FuX2VuZChzY2FuKTsKIH0KIAogLyoKLSAqIEZldGNoZXMsIGFzIHBhcnQgb2YgYW4gaW5kZXgg c2NhbiwgdHVwbGUgYXQgYHRpZGAgaW50byBgc2xvdGAsIGFmdGVyIGRvaW5nCi0gKiBhIHZpc2li aWxpdHkgdGVzdCBhY2NvcmRpbmcgdG8gYHNuYXBzaG90YC4gSWYgYSB0dXBsZSB3YXMgZm91bmQg YW5kIHBhc3NlZAotICogdGhlIHZpc2liaWxpdHkgdGVzdCwgcmV0dXJucyB0cnVlLCBmYWxzZSBv dGhlcndpc2UuIE5vdGUgdGhhdCAqdGlkIG1heSBiZQotICogbW9kaWZpZWQgd2hlbiB3ZSByZXR1 cm4gdHJ1ZSAoc2VlIGxhdGVyIHJlbWFya3Mgb24gbXVsdGlwbGUgcm93IHZlcnNpb25zCi0gKiBy ZWFjaGFibGUgdmlhIGEgc2luZ2xlIGluZGV4IGVudHJ5KS4KKyAqIFJldHVybiB0aGUgbmV4dCB0 dXBsZSBmcm9tIGFuIGluZGV4IHNjYW4gdGhyb3VnaCBgc2xvdGAsIHNjYW5uaW5nIGluIHRoZQor ICogc3BlY2lmaWVkIGRpcmVjdGlvbi4gIFJldHVybnMgdHJ1ZSBpZiBhIHR1cGxlIHNhdGlzZnlp bmcgdGhlIHNjYW4ga2V5cyBhbmQKKyAqIHRoZSBzbmFwc2hvdCB3YXMgZm91bmQsIGZhbHNlIG90 aGVyd2lzZS4KICAqCi0gKiAqY2FsbF9hZ2FpbiBuZWVkcyB0byBiZSBmYWxzZSBvbiB0aGUgZmly c3QgY2FsbCB0byB0YWJsZV9pbmRleF9mZXRjaF90dXBsZSgpIGZvcgotICogYSB0aWQuIElmIHRo ZXJlIHBvdGVudGlhbGx5IGlzIGFub3RoZXIgdHVwbGUgbWF0Y2hpbmcgdGhlIHRpZCwgKmNhbGxf YWdhaW4KLSAqIHdpbGwgYmUgc2V0IHRvIHRydWUsIHNpZ25hbGluZyB0aGF0IHRhYmxlX2luZGV4 X2ZldGNoX3R1cGxlKCkgc2hvdWxkIGJlIGNhbGxlZAotICogYWdhaW4gZm9yIHRoZSBzYW1lIHRp ZC4KKyAqIEZvciBhIHBsYWluIGluZGV4IHNjYW4gdGhlIHNsb3QgaG9sZHMgdGhlIHRhYmxlIHR1 cGxlLCBhbmQgc28gbXVzdCBiZSBvZgorICogdGhlIHRhYmxlIEFNJ3MgcHJlZmVycmVkIHNsb3Qg dHlwZSAoc2VlIHRhYmxlX3Nsb3RfY2FsbGJhY2tzKS4gIEZvciBhbgorICogaW5kZXgtb25seSBz Y2FuIHRoZSB0YWJsZSBBTSBpbnN0ZWFkIGZpbGxzIHRoZSBzbG90IGZyb20gdGhlIGluZGV4IGRh dGEgdGhlCisgKiBpbmRleCBBTSBwbGFjZWQgaW4gc2Nhbi0+eHNfaXR1cC94c19oaXR1cDsgdGhl IHNsb3QgbXVzdCBiZSB2aXJ0dWFsLCBzaW5jZQorICogaXRzIGNvbnRlbnRzIGRvbid0IGNvbWUg ZnJvbSB0aGUgdGFibGUgYXQgYWxsLiAgQ2FsbGVyIG11c3Qgbm90IHJlYWQKKyAqIHhzX2l0dXAv eHNfaGl0dXAgSW5kZXhTY2FuRGVzYyBmaWVsZHMgZGlyZWN0bHkuCiAgKgotICogKmFsbF9kZWFk LCBpZiBhbGxfZGVhZCBpcyBub3QgTlVMTCwgd2lsbCBiZSBzZXQgdG8gdHJ1ZSBieQotICogdGFi bGVfaW5kZXhfZmV0Y2hfdHVwbGUoKSBpZmYgaXQgaXMgZ3VhcmFudGVlZCB0aGF0IG5vIGJhY2tl bmQgbmVlZHMgdG8gc2VlCi0gKiB0aGF0IHR1cGxlLiBJbmRleCBBTXMgY2FuIHVzZSB0aGF0IHRv IGF2b2lkIHJldHVybmluZyB0aGF0IHRpZCBpbiBmdXR1cmUKLSAqIHNlYXJjaGVzLgorICogRGlz cGF0Y2hlcyB0aHJvdWdoIHNjYW4tPnhzX2dldG5leHRfc2xvdCwgd2hpY2ggaXMgcmVzb2x2ZWQg b25jZSBieQorICogdGhlIHRhYmxlIEFNJ3MgaW5kZXhfc2Nhbl9iZWdpbiBjYWxsYmFjay4KICAq Ci0gKiBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoaXMgZnVuY3Rpb24gYW5kIHRhYmxlX3R1cGxl X2ZldGNoX3Jvd192ZXJzaW9uKCkKLSAqIGlzIHRoYXQgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRo ZSBjdXJyZW50bHkgdmlzaWJsZSB2ZXJzaW9uIG9mIGEgcm93IGlmCi0gKiB0aGUgQU0gc3VwcG9y dHMgc3RvcmluZyBtdWx0aXBsZSByb3cgdmVyc2lvbnMgcmVhY2hhYmxlIHZpYSBhIHNpbmdsZSBp bmRleAotICogZW50cnkgKGxpa2UgaGVhcCdzIEhPVCkuIFdoZXJlYXMgdGFibGVfdHVwbGVfZmV0 Y2hfcm93X3ZlcnNpb24oKSBvbmx5Ci0gKiBldmFsdWF0ZXMgdGhlIHR1cGxlIGV4YWN0bHkgYXQg YHRpZGAuIE91dHNpZGUgb2YgaW5kZXggZW50cnkgLT50YWJsZSB0dXBsZQotICogbG9va3Vwcywg dGFibGVfdHVwbGVfZmV0Y2hfcm93X3ZlcnNpb24oKSBpcyB3aGF0J3MgdXN1YWxseSBuZWVkZWQu CisgKiAqcmVjaGVjayBpcyBzZXQgKG9uIGEgdHJ1ZSByZXR1cm4pIHRvIGluZGljYXRlIHdoZXRo ZXIgdGhlIHNjYW4ga2V5cyBtdXN0CisgKiBiZSByZWNoZWNrZWQgYWdhaW5zdCB0aGUgcmV0dXJu ZWQgdHVwbGUuCisgKgorICogT24gc3VjY2VzcywgcmVzb3VyY2VzIChsaWtlIGJ1ZmZlciBwaW5z KSBhcmUgbGlrZWx5IHRvIGJlIGhlbGQsIGFuZCB3aWxsIGJlCisgKiByZWxlYXNlZCBieSBhIGZ1 dHVyZSB0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Qgb3IgdGFibGVfaW5kZXhfc2Nhbl9lbmQgY2Fs bC4KKyAqCisgKiBOb3RlOiBmb3Igb3JkZXJlZCBzY2FucywgdGhlIGNhbGxlciBtdXN0IGNoZWNr IHNjYW4tPnhzX3JlY2hlY2tvcmRlcmJ5IGFuZAorICogcmVjaGVjayB0aGUgT1JERVIgQlkgZXhw cmVzc2lvbnMgZm9yIGl0c2VsZi4KICAqLwogc3RhdGljIGlubGluZSBib29sCi10YWJsZV9pbmRl eF9mZXRjaF90dXBsZShzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbiwKLQkJCQkJCUl0 ZW1Qb2ludGVyIHRpZCwKLQkJCQkJCVNuYXBzaG90IHNuYXBzaG90LAotCQkJCQkJVHVwbGVUYWJs ZVNsb3QgKnNsb3QsCi0JCQkJCQlib29sICpjYWxsX2FnYWluLCBib29sICphbGxfZGVhZCkKK3Rh YmxlX2luZGV4X2dldG5leHRfc2xvdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24g ZGlyZWN0aW9uLAorCQkJCQkJIFR1cGxlVGFibGVTbG90ICpzbG90LCBib29sICpyZWNoZWNrKQog ewotCXJldHVybiBzY2FuLT5yZWwtPnJkX3RhYmxlYW0tPmluZGV4X2ZldGNoX3R1cGxlKHNjYW4s IHRpZCwgc25hcHNob3QsCi0JCQkJCQkJCQkJCQkJc2xvdCwgY2FsbF9hZ2FpbiwKLQkJCQkJCQkJ CQkJCQlhbGxfZGVhZCk7CisJQXNzZXJ0KFRUU19JU19WSVJUVUFMKHNsb3QpIHx8ICFzY2FuLT54 c193YW50X2l0dXApOworCUFzc2VydChzY2FuLT54c190YWJsZV9vcGFxdWUpOworCisJcmV0dXJu IHNjYW4tPnhzX2dldG5leHRfc2xvdChzY2FuLCBkaXJlY3Rpb24sIHNsb3QsIHJlY2hlY2spOwog fQogCiAvKgotICogVGhpcyBpcyBhIGNvbnZlbmllbmNlIHdyYXBwZXIgYXJvdW5kIHRhYmxlX2lu ZGV4X2ZldGNoX3R1cGxlKCkgd2hpY2gKLSAqIHJldHVybnMgd2hldGhlciB0aGVyZSBhcmUgdGFi bGUgdHVwbGUgaXRlbXMgY29ycmVzcG9uZGluZyB0byBhbiBpbmRleAotICogZW50cnkuICBUaGlz IGxpa2VseSBpcyBvbmx5IHVzZWZ1bCB0byB2ZXJpZnkgaWYgdGhlcmUncyBhIGNvbmZsaWN0IGlu IGEKLSAqIHVuaXF1ZSBpbmRleC4KKyAqIEZldGNoIHR1cGxlIGF0IGB0aWRgIGludG8gYHNsb3Rg LCBhZnRlciBkb2luZyBhIHZpc2liaWxpdHkgdGVzdCBhY2NvcmRpbmcKKyAqIHRvIGBzbmFwc2hv dGAuIElmIGEgdHVwbGUgd2FzIGZvdW5kIGFuZCBwYXNzZWQgdGhlIHZpc2liaWxpdHkgdGVzdCwg cmV0dXJucworICogdHJ1ZSwgZmFsc2Ugb3RoZXJ3aXNlLiAgVGhpcyBpcyBhIGxvdy1sZXZlbCBp bnRlcmZhY2UgZGVzaWduZWQgZm9yIHVzZSBieQorICogY29uc3RyYWludCBlbmZvcmNlbWVudCBj b2RlLCB3aGVyZSBwYXNzaW5nIGEgVElEIGNhbid0IGJlIGF2b2lkZWQuCisgKgorICogTm90ZSB0 aGF0ICp0aWQgbWF5IGJlIG1vZGlmaWVkIHdoZW4gd2UgcmV0dXJuIHRydWUgKGUuZy4gZHVlIHRv IGZvbGxvd2luZyBhCisgKiBIT1QgY2hhaW4gaW4gYSBoZWFwYW0gdGFibGUpLiAgQ2FsbGVyIHNo b3VsZCBjb25zaWRlciBwYXNzaW5nIGEgcG9pbnRlciB0bworICogYSBtdXRhYmxlIGNvcHkgb2Yg dGhlaXIgb3JpZ2luYWwgVElEIHRvIGF2b2lkIHVud2FudGVkIHNpZGUtZWZmZWN0cy4KKyAqCisg KiBJZiBhbGxfZGVhZCBpcyBub3QgTlVMTCwgKmFsbF9kZWFkIHdpbGwgYmUgc2V0IHRvIHRydWUg aGVyZSBpZmYgaXQgaXMKKyAqIGd1YXJhbnRlZWQgdGhhdCBubyBiYWNrZW5kIG5lZWRzIHRvIHNl ZSBhbnkgdHVwbGUgcmVhY2hhYmxlIHRocm91Z2gKKyAqIGNhbGxlcidzIFRJRC4gIFRoaXMgbWVh bnMgdGhhdCBpdCBpcyBzYWZlIHRvIG1hcmsgYW4gaW5kZXggdHVwbGUgY29udGFpbmluZworICog dGhpcyBUSUQgYXMgTFBfREVBRC4KKyAqCisgKiBUaGUgbWFpbiBkaWZmZXJlbmNlIGJldHdlZW4g dGFibGVfdHVwbGVfZmV0Y2hfcm93X3ZlcnNpb24oKSBhbmQgdGhpcworICogZnVuY3Rpb24gaXMg dGhhdCB3ZSByZXR1cm4gdGhlIGN1cnJlbnRseSB2aXNpYmxlIHZlcnNpb24gb2YgYSByb3csIHdo aWNoCisgKiBtYXR0ZXJzIHdpdGggQU1zIHRoYXQgc3VwcG9ydCBzdG9yaW5nIG11bHRpcGxlIHJv dyB2ZXJzaW9ucyByZWFjaGFibGUgdmlhIGEKKyAqIHNpbmdsZSBUSUQgKGUuZy4sIGR1ZSB0byBo ZWFwYW0ncyBIT1QgY2hhaW5zKS4gIFRvIHJlbGlhYmx5IGV2YWx1YXRlCisgKiBleGFjdGx5IHRo ZSB0dXBsZSBhdCBgdGlkYCwgY2FsbCB0YWJsZV90dXBsZV9mZXRjaF9yb3dfdmVyc2lvbigpIGlu c3RlYWQuCiAgKi8KLWV4dGVybiBib29sIHRhYmxlX2luZGV4X2ZldGNoX3R1cGxlX2NoZWNrKFJl bGF0aW9uIHJlbCwKLQkJCQkJCQkJCQkgIEl0ZW1Qb2ludGVyIHRpZCwKLQkJCQkJCQkJCQkgIFNu YXBzaG90IHNuYXBzaG90LAotCQkJCQkJCQkJCSAgYm9vbCAqYWxsX2RlYWQpOworc3RhdGljIGlu bGluZSBib29sCit0YWJsZV9mZXRjaF90aWQoUmVsYXRpb24gcmVsLAorCQkJCUl0ZW1Qb2ludGVy IHRpZCwKKwkJCQlTbmFwc2hvdCBzbmFwc2hvdCwKKwkJCQlUdXBsZVRhYmxlU2xvdCAqc2xvdCwK KwkJCQlib29sICphbGxfZGVhZCkKK3sKKwlyZXR1cm4gcmVsLT5yZF90YWJsZWFtLT5mZXRjaF90 aWQocmVsLCB0aWQsIHNuYXBzaG90LCBzbG90LCBhbGxfZGVhZCk7Cit9CisKKy8qCisgKiBDb252 ZW5pZW5jZSB3cmFwcGVyIGFyb3VuZCB0YWJsZV9mZXRjaF90aWQoKSBmb3IgY2FsbGVycyB0aGF0 IGp1c3QgbmVlZCB0bworICogY2hlY2sgaWYgYSB0dXBsZSBpcyB2aXNpYmxlLgorICoKKyAqIENh bGxlciBzaG91bGQgbm90ZSB0aGUgdGFibGVfZmV0Y2hfdGlkIHdhcm5pbmcgYWJvdXQgKnRpZCBi ZWluZyBtb2RpZmllZAorICogd2hlbiB3ZSByZXR1cm4gdHJ1ZSBpbiBzb21lIGNhc2VzLgorICov CitleHRlcm4gYm9vbCB0YWJsZV9mZXRjaF90aWRfY2hlY2soUmVsYXRpb24gcmVsLAorCQkJCQkJ CQkgIEl0ZW1Qb2ludGVyIHRpZCwKKwkJCQkJCQkJICBTbmFwc2hvdCBzbmFwc2hvdCwKKwkJCQkJ CQkJICBib29sICphbGxfZGVhZCk7CiAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xMzM2LDkg KzEzODUsOCBAQCBleHRlcm4gYm9vbCB0YWJsZV9pbmRleF9mZXRjaF90dXBsZV9jaGVjayhSZWxh dGlvbiByZWwsCiAgKiBgc25hcHNob3RgLiBJZiBhIHR1cGxlIHdhcyBmb3VuZCBhbmQgcGFzc2Vk IHRoZSB2aXNpYmlsaXR5IHRlc3QsIHJldHVybnMKICAqIHRydWUsIGZhbHNlIG90aGVyd2lzZS4K ICAqCi0gKiBTZWUgdGFibGVfaW5kZXhfZmV0Y2hfdHVwbGUncyBjb21tZW50IGFib3V0IHdoYXQg dGhlIGRpZmZlcmVuY2UgYmV0d2VlbgotICogdGhlc2UgZnVuY3Rpb25zIGlzLiBJdCBpcyBjb3Jy ZWN0IHRvIHVzZSB0aGlzIGZ1bmN0aW9uIG91dHNpZGUgb2YgaW5kZXgKLSAqIGVudHJ5LT50YWJs ZSB0dXBsZSBsb29rdXBzLgorICogU2VlIHRhYmxlX2ZldGNoX3RpZCdzIGNvbW1lbnQgYWJvdXQg d2hhdCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZXNlCisgKiBmdW5jdGlvbnMgaXMuCiAgKi8K IHN0YXRpYyBpbmxpbmUgYm9vbAogdGFibGVfdHVwbGVfZmV0Y2hfcm93X3ZlcnNpb24oUmVsYXRp b24gcmVsLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvaW5zdHJ1bWVudF9ub2Rl LmggYi9zcmMvaW5jbHVkZS9leGVjdXRvci9pbnN0cnVtZW50X25vZGUuaAppbmRleCA0MDc2OTkw NDAuLjQxYTdkMzNmMSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvaW5zdHJ1bWVu dF9ub2RlLmgKKysrIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvaW5zdHJ1bWVudF9ub2RlLmgKQEAg LTk4LDEzICs5OCwxNiBAQCBBY2N1bXVsYXRlSU9TdGF0cyhJT1N0YXRzICpkc3QsIElPU3RhdHMg KnNyYykKIAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqCUluc3RydW1lbnRhdGlvbiBp bmZvcm1hdGlvbiBmb3IgaW5kZXhzY2FucyAoYW1nZXR0dXBsZSBhbmQgYW1nZXRiaXRtYXApCisg KglJbnN0cnVtZW50YXRpb24gaW5mb3JtYXRpb24gZm9yIGluZGV4IHNjYW5zICh1c2VkIGJ5IGFs bCBBTSBpbnRlcmZhY2VzKQogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIHR5cGVkZWYg c3RydWN0IEluZGV4U2Nhbkluc3RydW1lbnRhdGlvbgogewogCS8qIEluZGV4IHNlYXJjaCBjb3Vu dCAoaW5jcmVtZW50ZWQgd2l0aCBwZ3N0YXRfY291bnRfaW5kZXhfc2NhbiBjYWxsKSAqLwogCXVp bnQ2NAkJbnNlYXJjaGVzOworCisJLyogVGFibGUgdHVwbGVzIGZldGNoZWQgY291bnQgKGluY3Jl bWVudGVkIGR1cmluZyBpbmRleC1vbmx5IHNjYW5zKSAqLworCXVpbnQ2NAkJbnRhYmxldHVwbGVm ZXRjaGVzOwogfSBJbmRleFNjYW5JbnN0cnVtZW50YXRpb247CiAKIC8qCmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rl cy5oCmluZGV4IDUzYzEzODMxMC4uOWVjY2FmMjUwIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9u b2Rlcy9leGVjbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaApAQCAt MTc5MCwxMSArMTc5MCw3IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4U2NhblN0YXRlCiAgKgkJU2Nh bkRlc2MJCSAgIGluZGV4IHNjYW4gZGVzY3JpcHRvcgogICoJCUluc3RydW1lbnQJCSAgIGxvY2Fs IGluZGV4IHNjYW4gaW5zdHJ1bWVudGF0aW9uCiAgKgkJU2hhcmVkSW5mbwkJICAgcGFyYWxsZWwg d29ya2VyIGluc3RydW1lbnRhdGlvbiAobm8gbGVhZGVyIGVudHJ5KQotICoJCVRhYmxlU2xvdAkJ ICAgc2xvdCBmb3IgaG9sZGluZyB0dXBsZXMgZmV0Y2hlZCBmcm9tIHRoZSB0YWJsZQotICoJCVZN QnVmZmVyCQkgICBidWZmZXIgaW4gdXNlIGZvciB2aXNpYmlsaXR5IG1hcCB0ZXN0aW5nLCBpZiBh bnkKICAqCQlQc2NhbkxlbgkJICAgc2l6ZSBvZiBwYXJhbGxlbCBpbmRleC1vbmx5IHNjYW4gZGVz Y3JpcHRvcgotICoJCU5hbWVDU3RyaW5nQXR0TnVtcyBhdHRudW1zIG9mIG5hbWUgdHlwZWQgY29s dW1ucyB0byBwYWQgdG8gTkFNRURBVEFMRU4KLSAqCQlOYW1lQ1N0cmluZ0NvdW50ICAgbnVtYmVy IG9mIGVsZW1lbnRzIGluIHRoZSBOYW1lQ1N0cmluZ0F0dE51bXMgYXJyYXkKICAqIC0tLS0tLS0t LS0tLS0tLS0KICAqLwogdHlwZWRlZiBzdHJ1Y3QgSW5kZXhPbmx5U2NhblN0YXRlCkBAIC0xODEz LDExICsxODA5LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhPbmx5U2NhblN0YXRlCiAJc3RydWN0 IEluZGV4U2NhbkRlc2NEYXRhICppb3NzX1NjYW5EZXNjOwogCUluZGV4U2Nhbkluc3RydW1lbnRh dGlvbiAqaW9zc19JbnN0cnVtZW50OwogCVNoYXJlZEluZGV4U2Nhbkluc3RydW1lbnRhdGlvbiAq aW9zc19TaGFyZWRJbmZvOwotCVR1cGxlVGFibGVTbG90ICppb3NzX1RhYmxlU2xvdDsKLQlCdWZm ZXIJCWlvc3NfVk1CdWZmZXI7CiAJU2l6ZQkJaW9zc19Qc2NhbkxlbjsKLQlBdHRyTnVtYmVyICpp b3NzX05hbWVDU3RyaW5nQXR0TnVtczsKLQlpbnQJCQlpb3NzX05hbWVDU3RyaW5nQ291bnQ7CiB9 IEluZGV4T25seVNjYW5TdGF0ZTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKaW5kZXggMjI2OGNjMjc3Li5mMGU4ZDA5MWEgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKKysrIGIv c3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYwpAQCAtNjc5LDcgKzY3OSw3 IEBAIGhlYXBhbV9yZWxhdGlvbl9jb3B5X2Zvcl9jbHVzdGVyKFJlbGF0aW9uIE9sZEhlYXAsIFJl bGF0aW9uIE5ld0hlYXAsCiAKIAkJdGFibGVTY2FuID0gTlVMTDsKIAkJaGVhcFNjYW4gPSBOVUxM OwotCQlpbmRleFNjYW4gPSBpbmRleF9iZWdpbnNjYW4oT2xkSGVhcCwgT2xkSW5kZXgsCisJCWlu ZGV4U2NhbiA9IGluZGV4X2JlZ2luc2NhbihPbGRIZWFwLCBPbGRJbmRleCwgZmFsc2UsCiAJCQkJ CQkJCQlzbmFwc2hvdCA/IHNuYXBzaG90IDogU25hcHNob3RBbnksCiAJCQkJCQkJCQlOVUxMLCAw LCAwLAogCQkJCQkJCQkJU09fTk9ORSk7CkBAIC03MjIsMTEgKzcyMiwxNCBAQCBoZWFwYW1fcmVs YXRpb25fY29weV9mb3JfY2x1c3RlcihSZWxhdGlvbiBPbGRIZWFwLCBSZWxhdGlvbiBOZXdIZWFw LAogCiAJCWlmIChpbmRleFNjYW4gIT0gTlVMTCkKIAkJewotCQkJaWYgKCFpbmRleF9nZXRuZXh0 X3Nsb3QoaW5kZXhTY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgc2xvdCkpCisJCQlib29sCQly ZWNoZWNrOworCisJCQlpZiAoIXRhYmxlX2luZGV4X2dldG5leHRfc2xvdChpbmRleFNjYW4sIEZv cndhcmRTY2FuRGlyZWN0aW9uLAorCQkJCQkJCQkJCSAgc2xvdCwgJnJlY2hlY2spKQogCQkJCWJy ZWFrOwogCiAJCQkvKiBTaW5jZSB3ZSB1c2VkIG5vIHNjYW4ga2V5cywgc2hvdWxkIG5ldmVyIG5l ZWQgdG8gcmVjaGVjayAqLwotCQkJaWYgKGluZGV4U2Nhbi0+eHNfcmVjaGVjaykKKwkJCWlmIChy ZWNoZWNrKQogCQkJCWVsb2coRVJST1IsICJDTFVTVEVSIGRvZXMgbm90IHN1cHBvcnQgbG9zc3kg aW5kZXggY29uZGl0aW9ucyIpOwogCQl9CiAJCWVsc2UKQEAgLTI2NzksMTAgKzI2ODIsOSBAQCBz dGF0aWMgY29uc3QgVGFibGVBbVJvdXRpbmUgaGVhcGFtX21ldGhvZHMgPSB7CiAJLnBhcmFsbGVs c2Nhbl9pbml0aWFsaXplID0gdGFibGVfYmxvY2tfcGFyYWxsZWxzY2FuX2luaXRpYWxpemUsCiAJ LnBhcmFsbGVsc2Nhbl9yZWluaXRpYWxpemUgPSB0YWJsZV9ibG9ja19wYXJhbGxlbHNjYW5fcmVp bml0aWFsaXplLAogCi0JLmluZGV4X2ZldGNoX2JlZ2luID0gaGVhcGFtX2luZGV4X2ZldGNoX2Jl Z2luLAotCS5pbmRleF9mZXRjaF9yZXNldCA9IGhlYXBhbV9pbmRleF9mZXRjaF9yZXNldCwKLQku aW5kZXhfZmV0Y2hfZW5kID0gaGVhcGFtX2luZGV4X2ZldGNoX2VuZCwKLQkuaW5kZXhfZmV0Y2hf dHVwbGUgPSBoZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGUsCisJLmluZGV4X3NjYW5fYmVnaW4gPSBo ZWFwYW1faW5kZXhfc2Nhbl9iZWdpbiwKKwkuaW5kZXhfc2Nhbl9yZXNldCA9IGhlYXBhbV9pbmRl eF9zY2FuX3Jlc2V0LAorCS5pbmRleF9zY2FuX2VuZCA9IGhlYXBhbV9pbmRleF9zY2FuX2VuZCwK IAogCS50dXBsZV9pbnNlcnQgPSBoZWFwYW1fdHVwbGVfaW5zZXJ0LAogCS50dXBsZV9pbnNlcnRf c3BlY3VsYXRpdmUgPSBoZWFwYW1fdHVwbGVfaW5zZXJ0X3NwZWN1bGF0aXZlLApAQCAtMjY5Miw2 ICsyNjk0LDcgQEAgc3RhdGljIGNvbnN0IFRhYmxlQW1Sb3V0aW5lIGhlYXBhbV9tZXRob2RzID0g ewogCS50dXBsZV91cGRhdGUgPSBoZWFwYW1fdHVwbGVfdXBkYXRlLAogCS50dXBsZV9sb2NrID0g aGVhcGFtX3R1cGxlX2xvY2ssCiAKKwkuZmV0Y2hfdGlkID0gaGVhcGFtX2ZldGNoX3RpZCwKIAku dHVwbGVfZmV0Y2hfcm93X3ZlcnNpb24gPSBoZWFwYW1fZmV0Y2hfcm93X3ZlcnNpb24sCiAJLnR1 cGxlX2dldF9sYXRlc3RfdGlkID0gaGVhcF9nZXRfbGF0ZXN0X3RpZCwKIAkudHVwbGVfdGlkX3Zh bGlkID0gaGVhcGFtX3R1cGxlX3RpZF92YWxpZCwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9oZWFwL2hlYXBhbV9pbmRleHNjYW4uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hl YXBhbV9pbmRleHNjYW4uYwppbmRleCAzM2QxNGYxZGUuLmVlMGI1OGE4MSAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2luZGV4c2Nhbi5jCisrKyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9pbmRleHNjYW4uYwpAQCAtMTQsMzIgKzE0LDExMiBAQAog ICovCiAjaW5jbHVkZSAicG9zdGdyZXMuaCIKIAorI2luY2x1ZGUgImFjY2Vzcy9hbWFwaS5oIgog I2luY2x1ZGUgImFjY2Vzcy9oZWFwYW0uaCIKICNpbmNsdWRlICJhY2Nlc3MvcmVsc2Nhbi5oIgor I2luY2x1ZGUgImFjY2Vzcy92aXNpYmlsaXR5bWFwLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcmVk aWNhdGUuaCIKKyNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgorI2luY2x1ZGUgInV0aWxzL21l bXV0aWxzLmgiCisjaW5jbHVkZSAidXRpbHMvcGdzdGF0X2ludGVybmFsLmgiCiAKIAorc3RhdGlj IGJvb2wgaGVhcGFtX2luZGV4X3BsYWluX3R1cGxlX2dldG5leHRfc2xvdChJbmRleFNjYW5EZXNj IHNjYW4sCisJCQkJCQkJCQkJCQkgIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJCQkJ CQkJICBUdXBsZVRhYmxlU2xvdCAqc2xvdCwKKwkJCQkJCQkJCQkJCSAgYm9vbCAqcmVjaGVjayk7 CitzdGF0aWMgYm9vbCBoZWFwYW1faW5kZXhfb25seV90dXBsZV9nZXRuZXh0X3Nsb3QoSW5kZXhT Y2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJCQkJIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJ CQkJCQkJCQkJIFR1cGxlVGFibGVTbG90ICpzbG90LAorCQkJCQkJCQkJCQkJIGJvb2wgKnJlY2hl Y2spOworc3RhdGljIHBnX2F0dHJpYnV0ZV9hbHdheXNfaW5saW5lIGJvb2wgaGVhcGFtX2luZGV4 X2dldG5leHRfc2xvdChJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCQkJCQkJCQkJIFNjYW5E aXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJCQkJCQkJCQkJCSBUdXBsZVRhYmxlU2xvdCAqc2xv dCwKKwkJCQkJCQkJCQkJCQkJCQkgYm9vbCBpbmRleF9vbmx5LAorCQkJCQkJCQkJCQkJCQkJCSBi b29sICpyZWNoZWNrKTsKK3N0YXRpYyBwZ19hdHRyaWJ1dGVfYWx3YXlzX2lubGluZSBib29sIGhl YXBhbV9pbmRleF9oZWFwX2ZldGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuSGVhcERh dGEgKmhzY2FuLAorCQkJCQkJCQkJCQkJCQkJICAgVHVwbGVUYWJsZVNsb3QgKnNsb3QsIGJvb2wg aW5kZXhfb25seSwKKwkJCQkJCQkJCQkJCQkJCSAgIGJvb2wgKmhlYXBfY29udGludWUsIGJvb2wg KmFsbF9kZWFkKTsKK3N0YXRpYyBwZ19hdHRyaWJ1dGVfYWx3YXlzX2lubGluZSB2b2lkIGhlYXBh bV9pbmRleF9raWxsX2l0ZW0oSW5kZXhTY2FuRGVzYyBzY2FuKTsKKworLyoKKyAqIFNpbXBsZSwg c2luZ2xlLXNob3QgVElEIGxvb2t1cCBmb3IgY29uc3RyYWludCBlbmZvcmNlbWVudCBjb2RlICh1 bmlxdWUKKyAqIGNoZWNrcyBhbmQgc2ltaWxhcikuICBUaGlzIGlzIGVzc2VudGlhbGx5IGp1c3Qg YSBoZWFwX2hvdF9zZWFyY2hfYnVmZmVyCisgKiB3cmFwcGVyLgorICoKKyAqIFRoaXMgaXNuJ3Qg YWN0dWFsbHkgcmVsYXRlZCB0byBpbmRleCBzY2FucywgYnV0IGtlZXBpbmcgaXQgbmVhcgorICog aGVhcF9ob3Rfc2VhcmNoX2J1ZmZlciBjYW4gaGVscCB0aGUgY29tcGlsZXIgZ2VuZXJhdGUgYmV0 dGVyIGNvZGUuCisgKi8KK2Jvb2wKK2hlYXBhbV9mZXRjaF90aWQoUmVsYXRpb24gcmVsLCBJdGVt UG9pbnRlciB0aWQsIFNuYXBzaG90IHNuYXBzaG90LAorCQkJCSBUdXBsZVRhYmxlU2xvdCAqc2xv dCwgYm9vbCAqYWxsX2RlYWQpCit7CisJQnVmZmVySGVhcFR1cGxlVGFibGVTbG90ICpic2xvdCA9 IChCdWZmZXJIZWFwVHVwbGVUYWJsZVNsb3QgKikgc2xvdDsKKwlCdWZmZXIJCWJ1ZjsKKwlib29s CQlmb3VuZDsKKworCUFzc2VydChUVFNfSVNfQlVGRkVSVFVQTEUoc2xvdCkpOworCisJYnVmID0g UmVhZEJ1ZmZlcihyZWwsIEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKSk7CisKKwlMb2Nr QnVmZmVyKGJ1ZiwgQlVGRkVSX0xPQ0tfU0hBUkUpOworCWZvdW5kID0gaGVhcF9ob3Rfc2VhcmNo X2J1ZmZlcih0aWQsIHJlbCwgYnVmLCBzbmFwc2hvdCwKKwkJCQkJCQkJICAgJmJzbG90LT5iYXNl LnR1cGRhdGEsIGFsbF9kZWFkLCB0cnVlKTsKKwlic2xvdC0+YmFzZS50dXBkYXRhLnRfc2VsZiA9 ICp0aWQ7CisJTG9ja0J1ZmZlcihidWYsIEJVRkZFUl9MT0NLX1VOTE9DSyk7CisKKwlpZiAoZm91 bmQpCisJeworCQlzbG90LT50dHNfdGFibGVPaWQgPSBSZWxhdGlvbkdldFJlbGlkKHJlbCk7CisJ CUV4ZWNTdG9yZVBpbm5lZEJ1ZmZlckhlYXBUdXBsZSgmYnNsb3QtPmJhc2UudHVwZGF0YSwgc2xv dCwKKwkJCQkJCQkJCSAgIGJ1Zik7CisJfQorCWVsc2UKKwkJUmVsZWFzZUJ1ZmZlcihidWYpOwor CisJcmV0dXJuIGZvdW5kOworfQorCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIEluZGV4IFNjYW4g Q2FsbGJhY2tzIGZvciBoZWFwIEFNCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogCi1JbmRleEZl dGNoVGFibGVEYXRhICoKLWhlYXBhbV9pbmRleF9mZXRjaF9iZWdpbihSZWxhdGlvbiByZWwsIHVp bnQzMiBmbGFncykKK3ZvaWQKK2hlYXBhbV9pbmRleF9zY2FuX2JlZ2luKEluZGV4U2NhbkRlc2Mg c2NhbiwgdWludDMyIGZsYWdzKQogewotCUluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4gPSBwYWxs b2MwX29iamVjdChJbmRleEZldGNoSGVhcERhdGEpOworCUluZGV4U2NhbkhlYXBEYXRhICpoc2Nh biA9IHBhbGxvYzBfb2JqZWN0KEluZGV4U2NhbkhlYXBEYXRhKTsKIAotCWhzY2FuLT54c19iYXNl LnJlbCA9IHJlbDsKLQloc2Nhbi0+eHNfYmFzZS5mbGFncyA9IGZsYWdzOwogCWhzY2FuLT54c19j YnVmID0gSW52YWxpZEJ1ZmZlcjsKIAloc2Nhbi0+eHNfYmxrID0gSW52YWxpZEJsb2NrTnVtYmVy OwogCWhzY2FuLT54c192bWJ1ZmZlciA9IEludmFsaWRCdWZmZXI7CiAKLQlyZXR1cm4gJmhzY2Fu LT54c19iYXNlOworCS8qIFJlbWVtYmVyIGlmIHNjYW4gaXMgcmVhZC1vbmx5ICovCisJaHNjYW4t PnhzX3JlYWRvbmx5ID0gKGZsYWdzICYgU09fSElOVF9SRUxfUkVBRF9PTkxZKSAhPSAwOworCisJ LyogUmVzb2x2ZSB3aGljaCB4c19nZXRuZXh0X3Nsb3QgaW1wbGVtZW50YXRpb24gdG8gdXNlIGZv ciB0aGlzIHNjYW4gKi8KKwlpZiAoc2Nhbi0+eHNfd2FudF9pdHVwKQorCQlzY2FuLT54c19nZXRu ZXh0X3Nsb3QgPSBoZWFwYW1faW5kZXhfb25seV90dXBsZV9nZXRuZXh0X3Nsb3Q7CisJZWxzZQor CQlzY2FuLT54c19nZXRuZXh0X3Nsb3QgPSBoZWFwYW1faW5kZXhfcGxhaW5fdHVwbGVfZ2V0bmV4 dF9zbG90OworCisJLyoKKwkgKiBJbmRleC1vbmx5IHNjYW5zIHRoYXQgcmV0dXJuICJuYW1lIiBj b2x1bW5zIHN0b3JlZCBhcyBjc3RyaW5ncyBuZWVkIGEKKwkgKiBwZXItdHVwbGUgY29udGV4dCB0 byByZS1wYWQgdGhlbSB0byBOQU1FREFUQUxFTiB3aGlsZSBmaWxsaW5nIHRoZSBzbG90CisJICog KHNlZSBoZWFwX2ZpbGxfaW9zX3Nsb3QpLiAgeHNfbmFtZV9jc3RyaW5nX2NvdW50IGlzIHNldCBi eQorCSAqIGluZGV4X2JlZ2luc2NhbiBiZWZvcmUgd2UgZ2V0IGhlcmUuCisJICovCisJaWYgKHNj YW4tPnhzX3dhbnRfaXR1cCAmJiBzY2FuLT54c19uYW1lX2NzdHJpbmdfY291bnQgPiAwKQorCQlo c2Nhbi0+eHNfaXR1cF9jeHQgPSBBbGxvY1NldENvbnRleHRDcmVhdGUoQ3VycmVudE1lbW9yeUNv bnRleHQsCisJCQkJCQkJCQkJCQkgICAiaW5kZXgtb25seSBzY2FuIG5hbWUgY29sdW1ucyIsCisJ CQkJCQkJCQkJCQkgICBBTExPQ1NFVF9TTUFMTF9TSVpFUyk7CisKKwkvKiBFeHBvc2UgaGVhcGFt J3MgcHJpdmF0ZSBzY2FuIHN0YXRlIHRocm91Z2ggdGhlIHNjYW4ncyBvcGFxdWUgcG9pbnRlciAq LworCXNjYW4tPnhzX3RhYmxlX29wYXF1ZSA9IGhzY2FuOwogfQogCiB2b2lkCi1oZWFwYW1faW5k ZXhfZmV0Y2hfcmVzZXQoSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbikKK2hlYXBhbV9pbmRleF9z Y2FuX3Jlc2V0KEluZGV4U2NhbkRlc2Mgc2NhbikKIHsKIAkvKgogCSAqIFJlc2V0cyBhcmUgYSBu by1vcC4KQEAgLTUxLDkgKzEzMSw5IEBAIGhlYXBhbV9pbmRleF9mZXRjaF9yZXNldChJbmRleEZl dGNoVGFibGVEYXRhICpzY2FuKQogfQogCiB2b2lkCi1oZWFwYW1faW5kZXhfZmV0Y2hfZW5kKElu ZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4pCitoZWFwYW1faW5kZXhfc2Nhbl9lbmQoSW5kZXhTY2Fu RGVzYyBzY2FuKQogewotCUluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4gPSAoSW5kZXhGZXRjaEhl YXBEYXRhICopIHNjYW47CisJSW5kZXhTY2FuSGVhcERhdGEgKmhzY2FuID0gKEluZGV4U2Nhbkhl YXBEYXRhICopIHNjYW4tPnhzX3RhYmxlX29wYXF1ZTsKIAogCS8qIGRyb3AgcGluIGlmIHRoZXJl J3MgYSBwaW5uZWQgaGVhcCBwYWdlICovCiAJaWYgKEJ1ZmZlcklzVmFsaWQoaHNjYW4tPnhzX2Ni dWYpKQpAQCAtNjMsNiArMTQzLDEwIEBAIGhlYXBhbV9pbmRleF9mZXRjaF9lbmQoSW5kZXhGZXRj aFRhYmxlRGF0YSAqc2NhbikKIAlpZiAoQnVmZmVySXNWYWxpZChoc2Nhbi0+eHNfdm1idWZmZXIp KQogCQlSZWxlYXNlQnVmZmVyKGhzY2FuLT54c192bWJ1ZmZlcik7CiAKKwkvKiBGcmVlIHRoZSBp bmRleC1vbmx5IHNjYW4gbmFtZS1jb2x1bW4gY29udGV4dCwgaWYgYW55ICovCisJaWYgKGhzY2Fu LT54c19pdHVwX2N4dCkKKwkJTWVtb3J5Q29udGV4dERlbGV0ZShoc2Nhbi0+eHNfaXR1cF9jeHQp OworCiAJcGZyZWUoaHNjYW4pOwogfQogCkBAIC0yMjgsMTggKzMxMiwyOTYgQEAgaGVhcF9ob3Rf c2VhcmNoX2J1ZmZlcihJdGVtUG9pbnRlciB0aWQsIFJlbGF0aW9uIHJlbGF0aW9uLCBCdWZmZXIg YnVmZmVyLAogCXJldHVybiBmYWxzZTsKIH0KIAotYm9vbAotaGVhcGFtX2luZGV4X2ZldGNoX3R1 cGxlKHN0cnVjdCBJbmRleEZldGNoVGFibGVEYXRhICpzY2FuLAotCQkJCQkJIEl0ZW1Qb2ludGVy IHRpZCwKLQkJCQkJCSBTbmFwc2hvdCBzbmFwc2hvdCwKLQkJCQkJCSBUdXBsZVRhYmxlU2xvdCAq c2xvdCwKLQkJCQkJCSBib29sICpoZWFwX2NvbnRpbnVlLCBib29sICphbGxfZGVhZCkKKy8qCisg KiBGaWxsIGFuIGluZGV4LW9ubHkgc2NhbidzIHJlc3VsdCBzbG90IGZyb20gdGhlIGRhdGEgdGhl IGluZGV4IEFNIHJldHVybmVkLgorICoKKyAqIFRoZSBkYXRhIGlzIHByb3ZpZGVkIGluIGVpdGhl ciBIZWFwVHVwbGUgKHhzX2hpdHVwKSBvciBJbmRleFR1cGxlICh4c19pdHVwKQorICogZm9ybWF0 LiAgQW4gaW5kZXggQU0gbWF5IGZpbGwgYm90aCwgaW4gd2hpY2ggY2FzZSB0aGUgaGVhcCBmb3Jt YXQgaXMgdXNlZCwKKyAqIHNpbmNlIGl0J3MgYSBiaXQgY2hlYXBlciB0byBmaWxsIGEgc2xvdCBm cm9tLiAgIm5hbWUiIGNvbHVtbnMgc3RvcmVkIGFzCisgKiBjc3RyaW5ncyAoZS5nLiBidHJlZSBu YW1lX29wcykgYXJlIHJlLXBhZGRlZCB0byBOQU1FREFUQUxFTiBhbGxvY2F0aW9ucywKKyAqIHdo aWNoIGxpdmUgaW4gdGhlIGhlYXAgQU0ncyBwZXItdHVwbGUgeHNfaXR1cF9jeHQgKHJlc2V0IGhl cmUgb24gZWFjaCBjYWxsKS4KKyAqCisgKiBUaGlzIHJlYWRzIHRoZSB0YWJsZSBBTSdzIHByaXZh dGUgc2Nhbi1yZXN1bHQgZmllbGRzICh4c19pdHVwLCB4c19oaXR1cCwKKyAqIGV0Yy4pOyBkb2lu ZyBzbyBpcyB0aGUgdGFibGUgQU0ncyBqb2IsIHdoaWNoIGlzIHdoeSB0aGUgZXhlY3V0b3IgYW5k IHBsYW5uZXIKKyAqIHJlY2VpdmUgYSBmaWxsZWQgc2xvdCBmcm9tIHRhYmxlX2luZGV4X2dldG5l eHRfc2xvdCBpbnN0ZWFkLgorICoKKyAqIFRoaXMgaXMgZXhwb3J0ZWQgZm9yIHVzZSBieSBvdGhl ciB0YWJsZSBBTXMuCisgKi8KK3ZvaWQKK2hlYXBfZmlsbF9pb3Nfc2xvdChJbmRleFNjYW5EZXNj IHNjYW4sIFR1cGxlVGFibGVTbG90ICpzbG90KQogewotCUluZGV4RmV0Y2hIZWFwRGF0YSAqaHNj YW4gPSAoSW5kZXhGZXRjaEhlYXBEYXRhICopIHNjYW47Ci0JQnVmZmVySGVhcFR1cGxlVGFibGVT bG90ICpic2xvdCA9IChCdWZmZXJIZWFwVHVwbGVUYWJsZVNsb3QgKikgc2xvdDsKKwlpZiAoc2Nh bi0+eHNfaGl0dXApCisJeworCQkvKgorCQkgKiBXZSBkb24ndCB0YWtlIHRoZSB0cm91YmxlIHRv IHZlcmlmeSB0aGF0IHRoZSBwcm92aWRlZCB0dXBsZSBoYXMKKwkJICogZXhhY3RseSB0aGUgc2xv dCdzIGZvcm1hdCwgYnV0IGl0IHNlZW1zIHdvcnRoIGRvaW5nIGEgcXVpY2sgY2hlY2sKKwkJICog b24gdGhlIG51bWJlciBvZiBmaWVsZHMuCisJCSAqLworCQlBc3NlcnQoc2xvdC0+dHRzX3R1cGxl RGVzY3JpcHRvci0+bmF0dHMgPT0KKwkJCSAgIHNjYW4tPnhzX2hpdHVwZGVzYy0+bmF0dHMpOwor CQlFeGVjRm9yY2VTdG9yZUhlYXBUdXBsZShzY2FuLT54c19oaXR1cCwgc2xvdCwgZmFsc2UpOwor CX0KKwllbHNlIGlmIChzY2FuLT54c19pdHVwKQorCXsKKwkJVHVwbGVEZXNjCWl0dXBkZXNjID0g c2Nhbi0+eHNfaXR1cGRlc2M7CisKKwkJLyoKKwkJICogTm90ZTogd2UgbXVzdCB1c2UgdGhlIHR1 cGRlc2Mgc3VwcGxpZWQgYnkgdGhlIEFNIGluCisJCSAqIGluZGV4X2RlZm9ybV90dXBsZSwgbm90 IHRoZSBzbG90J3MgdHVwZGVzYywgaW4gY2FzZSB0aGUgbGF0dGVyIGhhcworCQkgKiBkaWZmZXJl bnQgZGF0YXR5cGVzICh0aGlzIGhhcHBlbnMgZm9yIGJ0cmVlIG5hbWVfb3BzIGluCisJCSAqIHBh cnRpY3VsYXIpLiBUaGV5J2QgYmV0dGVyIGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIGNvbHVtbnMg dGhvdWdoLAorCQkgKiBhcyB3ZWxsIGFzIGJlaW5nIGRhdGF0eXBlLWNvbXBhdGlibGUgd2hpY2gg aXMgc29tZXRoaW5nIHdlIGNhbid0IHNvCisJCSAqIGVhc2lseSBjaGVjay4KKwkJICovCisJCUFz c2VydChzbG90LT50dHNfdHVwbGVEZXNjcmlwdG9yLT5uYXR0cyA9PSBpdHVwZGVzYy0+bmF0dHMp OworCisJCUV4ZWNDbGVhclR1cGxlKHNsb3QpOworCQlpbmRleF9kZWZvcm1fdHVwbGUoc2Nhbi0+ eHNfaXR1cCwgaXR1cGRlc2MsCisJCQkJCQkgICBzbG90LT50dHNfdmFsdWVzLCBzbG90LT50dHNf aXNudWxsKTsKKworCQkvKgorCQkgKiBDb3B5IGFsbCBuYW1lIGNvbHVtbnMgc3RvcmVkIGFzIGNz dHJpbmdzIGJhY2sgaW50byBhIE5BTUVEQVRBTEVOCisJCSAqIGJ5dGUgc2l6ZWQgYWxsb2NhdGlv bi4gIFdlIG1hcmsgdGhpcyBicmFuY2ggYXMgdW5saWtlbHkgYXMKKwkJICogZ2VuZXJhbGx5ICJu YW1lIiBpcyB1c2VkIG9ubHkgZm9yIHRoZSBzeXN0ZW0gY2F0YWxvZ3MgYW5kIHRoaXMKKwkJICog d291bGQgaGF2ZSB0byBiZSBhIHVzZXIgcXVlcnkgcnVubmluZyBvbiB0aG9zZSBvciBzb21lIG90 aGVyIHVzZXIKKwkJICogdGFibGUgd2l0aCBhbiBpbmRleCBvbiBhIG5hbWUgY29sdW1uLgorCQkg Ki8KKwkJaWYgKHVubGlrZWx5KHNjYW4tPnhzX25hbWVfY3N0cmluZ19hdHRudW1zICE9IE5VTEwp KQorCQl7CisJCQlJbmRleFNjYW5IZWFwRGF0YSAqaHNjYW4gPSAoSW5kZXhTY2FuSGVhcERhdGEg Kikgc2Nhbi0+eHNfdGFibGVfb3BhcXVlOworCisJCQkvKiBmcmVlIHRoZSBwcmV2aW91cyB0dXBs ZSdzIG5hbWUgYWxsb2NhdGlvbnMgKi8KKwkJCU1lbW9yeUNvbnRleHRSZXNldChoc2Nhbi0+eHNf aXR1cF9jeHQpOworCisJCQlmb3IgKGludCBpZHggPSAwOyBpZHggPCBzY2FuLT54c19uYW1lX2Nz dHJpbmdfY291bnQ7IGlkeCsrKQorCQkJeworCQkJCWludAkJCWF0dG51bSA9IHNjYW4tPnhzX25h bWVfY3N0cmluZ19hdHRudW1zW2lkeF07CisJCQkJTmFtZQkJbmFtZTsKKworCQkJCS8qIHNraXAg bnVsbCBEYXR1bXMgKi8KKwkJCQlpZiAoc2xvdC0+dHRzX2lzbnVsbFthdHRudW1dKQorCQkJCQlj b250aW51ZTsKKworCQkJCW5hbWUgPSAoTmFtZSkgTWVtb3J5Q29udGV4dEFsbG9jKGhzY2FuLT54 c19pdHVwX2N4dCwKKwkJCQkJCQkJCQkJCSBOQU1FREFUQUxFTik7CisKKwkJCQkvKiB1c2UgbmFt ZXN0cmNweSB0byB6ZXJvLXBhZCBhbGwgdHJhaWxpbmcgYnl0ZXMgKi8KKwkJCQluYW1lc3RyY3B5 KG5hbWUsIERhdHVtR2V0Q1N0cmluZyhzbG90LT50dHNfdmFsdWVzW2F0dG51bV0pKTsKKwkJCQlz bG90LT50dHNfdmFsdWVzW2F0dG51bV0gPSBOYW1lR2V0RGF0dW0obmFtZSk7CisJCQl9CisJCX0K KworCQlFeGVjU3RvcmVWaXJ0dWFsVHVwbGUoc2xvdCk7CisJfQorCWVsc2UKKwkJZWxvZyhFUlJP UiwgIm5vIGRhdGEgcmV0dXJuZWQgZm9yIGluZGV4LW9ubHkgc2NhbiIpOworfQorCisvKiB4c19n ZXRuZXh0X3Nsb3QgY2FsbGJhY2s6IGFtZ2V0dHVwbGUsIHBsYWluIGluZGV4IHNjYW4gKi8KK3N0 YXRpYyBwZ19hdHRyaWJ1dGVfaG90IGJvb2wKK2hlYXBhbV9pbmRleF9wbGFpbl90dXBsZV9nZXRu ZXh0X3Nsb3QoSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJICBTY2FuRGlyZWN0aW9uIGRp cmVjdGlvbiwKKwkJCQkJCQkJCSAgVHVwbGVUYWJsZVNsb3QgKnNsb3QsCisJCQkJCQkJCQkgIGJv b2wgKnJlY2hlY2spCit7CisJQXNzZXJ0KCFzY2FuLT54c193YW50X2l0dXApOworCUFzc2VydChz Y2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1nZXR0dXBsZSAhPSBOVUxMKTsKKworCXJl dHVybiBoZWFwYW1faW5kZXhfZ2V0bmV4dF9zbG90KHNjYW4sIGRpcmVjdGlvbiwgc2xvdCwgZmFs c2UsIHJlY2hlY2spOworfQorCisvKiB4c19nZXRuZXh0X3Nsb3QgY2FsbGJhY2s6IGFtZ2V0dHVw bGUsIGluZGV4LW9ubHkgc2NhbiAqLworc3RhdGljIHBnX2F0dHJpYnV0ZV9ob3QgYm9vbAoraGVh cGFtX2luZGV4X29ubHlfdHVwbGVfZ2V0bmV4dF9zbG90KEluZGV4U2NhbkRlc2Mgc2NhbiwKKwkJ CQkJCQkJCSBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQkJCQkJCSBUdXBsZVRhYmxlU2xv dCAqc2xvdCwKKwkJCQkJCQkJCSBib29sICpyZWNoZWNrKQoreworCUFzc2VydChzY2FuLT54c193 YW50X2l0dXApOworCUFzc2VydChzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1nZXR0 dXBsZSAhPSBOVUxMKTsKKworCXJldHVybiBoZWFwYW1faW5kZXhfZ2V0bmV4dF9zbG90KHNjYW4s IGRpcmVjdGlvbiwgc2xvdCwgdHJ1ZSwgcmVjaGVjayk7Cit9CisKKy8qCisgKiBDb21tb24gaW1w bGVtZW50YXRpb24gZm9yIGJvdGggaGVhcGFtX2luZGV4XypfZ2V0bmV4dF9zbG90IHZhcmlhbnRz LgorICoKKyAqIFRoZSByZXN1bHQgaXMgdHJ1ZSBpZiBhIHR1cGxlIHNhdGlzZnlpbmcgdGhlIHNj YW4ga2V5cyBhbmQgdGhlIHNuYXBzaG90IHdhcworICogZm91bmQsIGZhbHNlIG90aGVyd2lzZS4g IE9uIHN1Y2Nlc3MgdGhlIHNsb3QgaXMgZmlsbGVkOiBmb3IgcGxhaW4gaW5kZXgKKyAqIHNjYW5z IHdpdGggdGhlIGhlYXAgdHVwbGU7IGZvciBpbmRleC1vbmx5IHNjYW5zIHdpdGggdGhlIGluZGV4 IGRhdGEgKGZyb20KKyAqIHhzX2l0dXAveHNfaGl0dXAsIHZpYSBoZWFwX2ZpbGxfaW9zX3Nsb3Qp LiAgKnJlY2hlY2sgcmVwb3J0cyB3aGV0aGVyIHRoZQorICogc2NhbiBrZXlzIG11c3QgYmUgcmVj aGVja2VkIChvbmx5IG1lYW5pbmdmdWwgb24gYSB0cnVlIHJldHVybikuCisgKgorICogT24gc3Vj Y2VzcywgcmVzb3VyY2VzIChsaWtlIGJ1ZmZlciBwaW5zKSBhcmUgbGlrZWx5IHRvIGJlIGhlbGQs IGFuZCB3aWxsIGJlCisgKiBkcm9wcGVkIGJ5IGEgZnV0dXJlIGNhbGwgaGVyZSAob3IgYnkgYSBs YXRlciBjYWxsIHRvIGhlYXBhbV9pbmRleF9zY2FuX2VuZAorICogdGhyb3VnaCBpbmRleF9lbmRz Y2FuKS4KKyAqCisgKiBUaGUgaW5kZXhfb25seSBwYXJhbWV0ZXIgaXMgYSBjb21waWxlLXRpbWUg Y29uc3RhbnQgYXQgZWFjaCBjYWxsIHNpdGUsCisgKiBhbGxvd2luZyB0aGUgY29tcGlsZXIgdG8g c3BlY2lhbGl6ZSB0aGUgY29kZSBmb3IgZWFjaCB2YXJpYW50LgorICovCitzdGF0aWMgcGdfYXR0 cmlidXRlX2Fsd2F5c19pbmxpbmUgYm9vbAoraGVhcGFtX2luZGV4X2dldG5leHRfc2xvdChJbmRl eFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJICBUdXBsZVRh YmxlU2xvdCAqc2xvdCwgYm9vbCBpbmRleF9vbmx5LAorCQkJCQkJICBib29sICpyZWNoZWNrKQor eworCUluZGV4U2NhbkhlYXBEYXRhICpoc2NhbiA9IChJbmRleFNjYW5IZWFwRGF0YSAqKSBzY2Fu LT54c190YWJsZV9vcGFxdWU7CisJYm9vbAkgICAqaGVhcF9jb250aW51ZSA9ICZzY2FuLT54c19o ZWFwX2NvbnRpbnVlOworCWJvb2wJCWFsbF92aXNpYmxlID0gZmFsc2U7CisJQmxvY2tOdW1iZXIg bGFzdF92aXNpdGVkX2Jsb2NrID0gSW52YWxpZEJsb2NrTnVtYmVyOworCXVpbnQ4CQluX3Zpc2l0 ZWRfcGFnZXMgPSAwOworCUl0ZW1Qb2ludGVyIHRpZCA9IE5VTEw7CisKKwlBc3NlcnQoVHJhbnNh Y3Rpb25JZElzVmFsaWQoUmVjZW50WG1pbikpOworCUFzc2VydChpbmRleF9vbmx5IHx8IHNjYW4t PnhzX3Zpc2l0ZWRfcGFnZXNfbGltaXQgPT0gMCk7CisKKwlmb3IgKDs7KQorCXsKKwkJaWYgKCEq aGVhcF9jb250aW51ZSkKKwkJeworCQkJLyogR2V0IHRoZSBuZXh0IFRJRCBmcm9tIHRoZSBpbmRl eCAqLworCQkJdGlkID0gaW5kZXhfZ2V0bmV4dF90aWQoc2NhbiwgZGlyZWN0aW9uKTsKKworCQkJ LyogSWYgd2UncmUgb3V0IG9mIGluZGV4IGVudHJpZXMsIHdlJ3JlIGRvbmUgKi8KKwkJCWlmICh0 aWQgPT0gTlVMTCkKKwkJCQlicmVhazsKKworCQkJLyogRm9yIGluZGV4LW9ubHkgc2NhbnMsIGNo ZWNrIHRoZSB2aXNpYmlsaXR5IG1hcCAqLworCQkJaWYgKGluZGV4X29ubHkpCisJCQkJYWxsX3Zp c2libGUgPSBWTV9BTExfVklTSUJMRShzY2FuLT5oZWFwUmVsYXRpb24sCisJCQkJCQkJCQkJCSBJ dGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCksCisJCQkJCQkJCQkJCSAmaHNjYW4tPnhzX3Zt YnVmZmVyKTsKKwkJfQorCisJCUFzc2VydChJdGVtUG9pbnRlcklzVmFsaWQoJnNjYW4tPnhzX2hl YXB0aWQpKTsKKworCQlpZiAoIWluZGV4X29ubHkgfHwgIWFsbF92aXNpYmxlKQorCQl7CisJCQli b29sCQlhbGxfZGVhZDsKKworCQkJLyoKKwkJCSAqIFBsYWluIGluZGV4IHNjYW4sIG9yIGluZGV4 LW9ubHkgc2NhbiB0aGF0IHJlcXVpcmVzIGEgaGVhcCBmZXRjaAorCQkJICogdG8gdmVyaWZ5IGl0 ZW0ncyB2aXNpYmlsaXR5CisJCQkgKi8KKwkJCWlmIChpbmRleF9vbmx5ICYmIHNjYW4tPmluc3Ry dW1lbnQpCisJCQkJc2Nhbi0+aW5zdHJ1bWVudC0+bnRhYmxldHVwbGVmZXRjaGVzKys7CisKKwkJ CWlmICghaGVhcGFtX2luZGV4X2hlYXBfZmV0Y2goc2NhbiwgaHNjYW4sCisJCQkJCQkJCQkJIGlu ZGV4X29ubHkgPyBOVUxMIDogc2xvdCwKKwkJCQkJCQkJCQkgaW5kZXhfb25seSwgaGVhcF9jb250 aW51ZSwKKwkJCQkJCQkJCQkgJmFsbF9kZWFkKSkKKwkJCXsKKwkJCQkvKiBObyB2aXNpYmxlIHR1 cGxlICovCisJCQkJaWYgKGFsbF9kZWFkKQorCQkJCQloZWFwYW1faW5kZXhfa2lsbF9pdGVtKHNj YW4pOworCisJCQkJLyoKKwkJCQkgKiBJZiBjYWxsZXIgc2V0IGEgdmlzaXRlZC1wYWdlcyBsaW1p dCAob25seSBzZWxmdW5jcy5jJ3MKKwkJCQkgKiBpbmRleC1vbmx5IHNjYW5zIGRvIHRoaXMpLCBj b3VudCBkaXN0aW5jdCBoZWFwIHBhZ2VzIGFuZAorCQkJCSAqIGdpdmUgdXAgb25jZSB3ZSd2ZSB2 aXNpdGVkIHRvbyBtYW55LgorCQkJCSAqLworCQkJCWlmIChpbmRleF9vbmx5ICYmIHVubGlrZWx5 KHNjYW4tPnhzX3Zpc2l0ZWRfcGFnZXNfbGltaXQgPiAwKSkKKwkJCQl7CisJCQkJCUFzc2VydCho c2Nhbi0+eHNfYmxrID09IEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKSk7CisKKwkJCQkJ aWYgKGhzY2FuLT54c19ibGsgIT0gbGFzdF92aXNpdGVkX2Jsb2NrKQorCQkJCQl7CisJCQkJCQls YXN0X3Zpc2l0ZWRfYmxvY2sgPSBoc2Nhbi0+eHNfYmxrOworCQkJCQkJaWYgKCsrbl92aXNpdGVk X3BhZ2VzID4gc2Nhbi0+eHNfdmlzaXRlZF9wYWdlc19saW1pdCkKKwkJCQkJCQlyZXR1cm4gZmFs c2U7CS8qIGdpdmUgdXAgKi8KKwkJCQkJfQorCQkJCX0KKworCQkJCWNvbnRpbnVlOwkJLyogdHJ5 IG5leHQgaW5kZXggZW50cnkgKi8KKwkJCX0KKworCQkJLyogRm91bmQgYSB2aXNpYmxlIHR1cGxl LCBzbyBpdHMgSE9UIGNoYWluIGNhbid0IGJlIGFsbC1kZWFkICovCisJCQlBc3NlcnQoIWFsbF9k ZWFkKTsKKworCQkJLyoKKwkJCSAqIE9ubHkgTVZDQyBzbmFwc2hvdHMgYXJlIHN1cHBvcnRlZCB3 aXRoIHN0YW5kYXJkIGluZGV4LW9ubHkKKwkJCSAqIHNjYW5zLCBzbyB0aGVyZSBzaG91bGQgYmUg bm8gbmVlZCB0byBrZWVwIGZvbGxvd2luZyB0aGUgSE9UCisJCQkgKiBjaGFpbiBvbmNlIGEgdmlz aWJsZSBlbnRyeSBoYXMgYmVlbiBmb3VuZC4gIE90aGVyIGNhbGxlcnMKKwkJCSAqIChjdXJyZW50 bHkgb25seSBzZWxmdW5jcy5jKSB1c2UgU25hcHNob3ROb25WYWN1dW1hYmxlLCBhbmQgd2FudAor CQkJICogdXMgdG8gYXNzdW1lIHRoYXQganVzdCBoYXZpbmcgb25lIHZpc2libGUgdHVwbGUgaW4g dGhlIGhvdAorCQkJICogY2hhaW4gaXMgYWx3YXlzIGdvb2QgZW5vdWdoLgorCQkJICovCisJCQlB c3NlcnQoIWluZGV4X29ubHkgfHwKKwkJCQkgICAhKCpoZWFwX2NvbnRpbnVlICYmIElzTVZDQ1Nu YXBzaG90KHNjYW4tPnhzX3NuYXBzaG90KSkpOworCQl9CisJCWVsc2UKKwkJeworCQkJLyoKKwkJ CSAqIEluZGV4LW9ubHkgc2NhbiB3aXRoIGFsbC12aXNpYmxlIGl0ZW0uCisJCQkgKgorCQkJICog V2Ugd29uJ3QgYWNjZXNzIHRoZSBoZWFwLCBzbyB3ZSdsbCBuZWVkIHRvIHRha2UgYSBwcmVkaWNh dGUKKwkJCSAqIGxvY2sgZXhwbGljaXRseSwgYXMgaWYgd2UgaGFkLiAgRm9yIG5vdyB3ZSBkbyB0 aGF0IGF0IHBhZ2UKKwkJCSAqIGxldmVsLgorCQkJICovCisJCQlQcmVkaWNhdGVMb2NrUGFnZShz Y2FuLT5oZWFwUmVsYXRpb24sCisJCQkJCQkJICBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRp ZCksCisJCQkJCQkJICBzY2FuLT54c19zbmFwc2hvdCk7CisJCX0KKworCQkvKgorCQkgKiBGb3Vu ZCBhIHR1cGxlIHRvIHJldHVybi4KKwkJICoKKwkJICogSW5kZXgtb25seSBzY2FucyBmaWxsIGNh bGxlcidzIHNsb3QgZnJvbSB0aGUgaW5kZXggZGF0YSB0aGUgQU0KKwkJICogcmV0dXJuZWQgKGlu IHNjYW4tPnhzX2l0dXAgb3IgeHNfaGl0dXApOyBwbGFpbiBpbmRleCBzY2FucyBhbHJlYWR5CisJ CSAqIGhhZCBoZWFwYW1faW5kZXhfaGVhcF9mZXRjaCBzdG9yZSB0aGUgaGVhcCB0dXBsZSB0aGVy ZS4KKwkJICovCisJCWlmIChpbmRleF9vbmx5KQorCQkJaGVhcF9maWxsX2lvc19zbG90KHNjYW4s IHNsb3QpOworCisJCSpyZWNoZWNrID0gc2Nhbi0+eHNfcmVjaGVjazsKKwkJcmV0dXJuIHRydWU7 CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCisvKgorICogR2V0IHRoZSBzY2FuJ3MgbmV4dCBo ZWFwIHR1cGxlLgorICoKKyAqIFRoZSByZXN1bHQgaXMgYSB2aXNpYmxlIGhlYXAgdHVwbGUgYXNz b2NpYXRlZCB3aXRoIHRoZSBpbmRleCBUSUQgbW9zdAorICogcmVjZW50bHkgZmV0Y2hlZCBieSBv dXIgY2FsbGVyIGluIHNjYW4tPnhzX2hlYXB0aWQsIG9yIE5VTEwgaWYgbm8gbW9yZQorICogbWF0 Y2hpbmcgdHVwbGVzIGV4aXN0LiAgKFRoZXJlIGNhbiBiZSBtb3JlIHRoYW4gb25lIG1hdGNoaW5n IHR1cGxlIGJlY2F1c2UKKyAqIG9mIEhPVCBjaGFpbnMsIGFsdGhvdWdoIHdoZW4gdXNpbmcgYW4g TVZDQyBzbmFwc2hvdCBpdCBzaG91bGQgYmUgaW1wb3NzaWJsZQorICogZm9yIG1vcmUgdGhhbiBv bmUgc3VjaCB0dXBsZSB0byBleGlzdC4pCisgKgorICogT24gc3VjY2VzcywgdGhlIGJ1ZmZlciBj b250YWluaW5nIHRoZSBoZWFwIHR1cCBpcyBwaW5uZWQuICBUaGUgcGluIG11c3QgYmUKKyAqIGRy b3BwZWQgZWxzZXdoZXJlLgorICovCitzdGF0aWMgcGdfYXR0cmlidXRlX2Fsd2F5c19pbmxpbmUg Ym9vbAoraGVhcGFtX2luZGV4X2hlYXBfZmV0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNj YW5IZWFwRGF0YSAqaHNjYW4sCisJCQkJCQlUdXBsZVRhYmxlU2xvdCAqc2xvdCwgYm9vbCBpbmRl eF9vbmx5LAorCQkJCQkJYm9vbCAqaGVhcF9jb250aW51ZSwgYm9vbCAqYWxsX2RlYWQpCit7CisJ UmVsYXRpb24JcmVsID0gc2Nhbi0+aGVhcFJlbGF0aW9uOworCUl0ZW1Qb2ludGVyIHRpZCA9ICZz Y2FuLT54c19oZWFwdGlkOworCVNuYXBzaG90CXNuYXBzaG90ID0gc2Nhbi0+eHNfc25hcHNob3Q7 CisJSGVhcFR1cGxlRGF0YSBpZHh0dXBkYXRhOworCUhlYXBUdXBsZQloZWFwVHVwbGU7CiAJYm9v bAkJZ290X2hlYXBfdHVwbGU7CiAKLQlBc3NlcnQoVFRTX0lTX0JVRkZFUlRVUExFKHNsb3QpKTsK KwkqYWxsX2RlYWQgPSBmYWxzZTsKKworCWlmICghaW5kZXhfb25seSkKKwl7CisJCS8qIFBsYWlu IGluZGV4IHNjYW5zIGhhdmUgdXMgc3RvcmUgZmV0Y2hlZCB0dXBsZSBpbiB0aGVpciBzbG90ICov CisJCUJ1ZmZlckhlYXBUdXBsZVRhYmxlU2xvdCAqYnNsb3QgPSAoQnVmZmVySGVhcFR1cGxlVGFi bGVTbG90ICopIHNsb3Q7CisKKwkJQXNzZXJ0KFRUU19JU19CVUZGRVJUVVBMRShzbG90KSk7CisJ CWhlYXBUdXBsZSA9ICZic2xvdC0+YmFzZS50dXBkYXRhOworCX0KKwllbHNlCisJeworCQkvKgor CQkgKiBJbmRleC1vbmx5IHNjYW5zIGp1c3QgbmVlZCB1cyB0byB2ZXJpZnkgdHVwbGUgdmlzaWJp bGl0eSwgc28gZG9uJ3QKKwkJICogcGFzcyB1cyBhIHNsb3QKKwkJICovCisJCXBnX2Fzc3VtZShz bG90ID09IE5VTEwpOworCQloZWFwVHVwbGUgPSAmaWR4dHVwZGF0YTsKKwl9CiAKIAkvKiBXZSBj YW4gc2tpcCB0aGUgYnVmZmVyLXN3aXRjaGluZyBsb2dpYyBpZiB3ZSdyZSBvbiB0aGUgc2FtZSBw YWdlLiAqLwogCWlmIChoc2Nhbi0+eHNfYmxrICE9IEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIo dGlkKSkKQEAgLTI1MiwxNCArNjE0LDEzIEBAIGhlYXBhbV9pbmRleF9mZXRjaF90dXBsZShzdHJ1 Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbiwKIAkJaWYgKEJ1ZmZlcklzVmFsaWQoaHNjYW4t PnhzX2NidWYpKQogCQkJUmVsZWFzZUJ1ZmZlcihoc2Nhbi0+eHNfY2J1Zik7CiAKLQkJaHNjYW4t PnhzX2NidWYgPSBSZWFkQnVmZmVyKGhzY2FuLT54c19iYXNlLnJlbCwgaHNjYW4tPnhzX2Jsayk7 CisJCWhzY2FuLT54c19jYnVmID0gUmVhZEJ1ZmZlcihyZWwsIGhzY2FuLT54c19ibGspOwogCiAJ CS8qCiAJCSAqIFBydW5lIHBhZ2Ugd2hlbiBpdCBpcyBwaW5uZWQgZm9yIHRoZSBmaXJzdCB0aW1l CiAJCSAqLwotCQloZWFwX3BhZ2VfcHJ1bmVfb3B0KGhzY2FuLT54c19iYXNlLnJlbCwgaHNjYW4t PnhzX2NidWYsCi0JCQkJCQkJJmhzY2FuLT54c192bWJ1ZmZlciwKLQkJCQkJCQloc2Nhbi0+eHNf YmFzZS5mbGFncyAmIFNPX0hJTlRfUkVMX1JFQURfT05MWSk7CisJCWhlYXBfcGFnZV9wcnVuZV9v cHQocmVsLCBoc2Nhbi0+eHNfY2J1ZiwgJmhzY2FuLT54c192bWJ1ZmZlciwKKwkJCQkJCQloc2Nh bi0+eHNfcmVhZG9ubHkpOwogCX0KIAogCUFzc2VydChCdWZmZXJHZXRCbG9ja051bWJlcihoc2Nh bi0+eHNfY2J1ZikgPT0gaHNjYW4tPnhzX2Jsayk7CkBAIC0yNjgsMjUgKzYyOSw0MSBAQCBoZWFw YW1faW5kZXhfZmV0Y2hfdHVwbGUoc3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4sCiAJ LyogT2J0YWluIHNoYXJlLWxvY2sgb24gdGhlIGJ1ZmZlciBzbyB3ZSBjYW4gZXhhbWluZSB2aXNp YmlsaXR5ICovCiAJTG9ja0J1ZmZlcihoc2Nhbi0+eHNfY2J1ZiwgQlVGRkVSX0xPQ0tfU0hBUkUp OwogCWdvdF9oZWFwX3R1cGxlID0gaGVhcF9ob3Rfc2VhcmNoX2J1ZmZlcih0aWQsCi0JCQkJCQkJ CQkJCWhzY2FuLT54c19iYXNlLnJlbCwKKwkJCQkJCQkJCQkJcmVsLAogCQkJCQkJCQkJCQloc2Nh bi0+eHNfY2J1ZiwKIAkJCQkJCQkJCQkJc25hcHNob3QsCi0JCQkJCQkJCQkJCSZic2xvdC0+YmFz ZS50dXBkYXRhLAorCQkJCQkJCQkJCQloZWFwVHVwbGUsCiAJCQkJCQkJCQkJCWFsbF9kZWFkLAog CQkJCQkJCQkJCQkhKmhlYXBfY29udGludWUpOwotCWJzbG90LT5iYXNlLnR1cGRhdGEudF9zZWxm ID0gKnRpZDsKKwloZWFwVHVwbGUtPnRfc2VsZiA9ICp0aWQ7CiAJTG9ja0J1ZmZlcihoc2Nhbi0+ eHNfY2J1ZiwgQlVGRkVSX0xPQ0tfVU5MT0NLKTsKIAogCWlmIChnb3RfaGVhcF90dXBsZSkKIAl7 Ci0JCS8qCi0JCSAqIE9ubHkgaW4gYSBub24tTVZDQyBzbmFwc2hvdCBjYW4gbW9yZSB0aGFuIG9u ZSBtZW1iZXIgb2YgdGhlIEhPVAotCQkgKiBjaGFpbiBiZSB2aXNpYmxlLgotCQkgKi8KLQkJKmhl YXBfY29udGludWUgPSAhSXNNVkNDTGlrZVNuYXBzaG90KHNuYXBzaG90KTsKKwkJaWYgKCFpbmRl eF9vbmx5KQorCQl7CisJCQkvKgorCQkJICogT25seSBpbiBhIG5vbi1NVkNDIHNuYXBzaG90IHBs YWluIHNjYW4gY2FuIG1vcmUgdGhhbiBvbmUgbWVtYmVyCisJCQkgKiBvZiB0aGUgSE9UIGNoYWlu IGJlIHZpc2libGUKKwkJCSAqLworCQkJKmhlYXBfY29udGludWUgPSAhSXNNVkNDTGlrZVNuYXBz aG90KHNuYXBzaG90KTsKIAotCQlzbG90LT50dHNfdGFibGVPaWQgPSBSZWxhdGlvbkdldFJlbGlk KHNjYW4tPnJlbCk7Ci0JCUV4ZWNTdG9yZUJ1ZmZlckhlYXBUdXBsZSgmYnNsb3QtPmJhc2UudHVw ZGF0YSwgc2xvdCwgaHNjYW4tPnhzX2NidWYpOworCQkJc2xvdC0+dHRzX3RhYmxlT2lkID0gUmVs YXRpb25HZXRSZWxpZChyZWwpOworCQkJRXhlY1N0b3JlQnVmZmVySGVhcFR1cGxlKGhlYXBUdXBs ZSwgc2xvdCwgaHNjYW4tPnhzX2NidWYpOworCQl9CisJCWVsc2UKKwkJeworCQkJLyoKKwkJCSAq IEluZGV4LW9ubHkgc2NhbnMgdW5jb25kaXRpb25hbGx5IGFzc3VtZSB0aGF0IHRoZSBmaXJzdCBt ZW1iZXIKKwkJCSAqIG9mIGEgSE9UIGNoYWluIHNob3VsZCBiZSBjb25zaWRlcmVkIHZpc2libGUu ICBUaGlzIGlzIHRoZQorCQkJICogbm9ybWFsIE1WQ0Mgc25hcHNob3QgYmVoYXZpb3IsIGFuZCB3 b3JrcyB3ZWxsIGVub3VnaCBmb3IKKwkJCSAqIG5vbi1NVkNDIGluZGV4LW9ubHkgc2NhbnMgKGN1 cnJlbnRseSB0aGUgb25seSBjb3JlIGNvZGUgdGhhdAorCQkJICogdXNlcyBhIG5vbi1NVkNDIGlu ZGV4LW9ubHkgc2NhbiBpcyBzZWxmdW5jcy5jKS4KKwkJCSAqLworCQkJKmhlYXBfY29udGludWUg PSBmYWxzZTsKKwkJfQorCisJCXBnc3RhdF9jb3VudF9oZWFwX2ZldGNoKHNjYW4tPmluZGV4UmVs YXRpb24pOwogCX0KIAllbHNlCiAJewpAQCAtMjk2LDMgKzY3MywyMyBAQCBoZWFwYW1faW5kZXhf ZmV0Y2hfdHVwbGUoc3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4sCiAKIAlyZXR1cm4g Z290X2hlYXBfdHVwbGU7CiB9CisKKy8qCisgKiBDYWxsZWQgd2hlbiB3ZSBzY2FubmVkIGEgd2hv bGUgSE9UIGNoYWluIGFuZCBmb3VuZCBvbmx5IGRlYWQgdHVwbGVzOgorICogYXJyYW5nZSBmb3Ig dGhlIGluZGV4IEFNIHRvIGtpbGwgaXRzIGVudHJ5IGZvciB0aGF0IFRJRC4gIFdlIGRvIG5vdCBk byB0aGlzCisgKiB3aGVuIGluIHJlY292ZXJ5IGJlY2F1c2UgaXQgbWF5IHZpb2xhdGUgTVZDQyB0 byBkbyBzby4gIFNlZSBjb21tZW50cyBpbgorICogUmVsYXRpb25HZXRJbmRleFNjYW4oKS4KKyAq Lworc3RhdGljIHBnX2F0dHJpYnV0ZV9hbHdheXNfaW5saW5lIHZvaWQKK2hlYXBhbV9pbmRleF9r aWxsX2l0ZW0oSW5kZXhTY2FuRGVzYyBzY2FuKQoreworCWlmIChzY2FuLT54YWN0U3RhcnRlZElu UmVjb3ZlcnkpCisJCXJldHVybjsKKworCS8qCisJICogVGVsbCBhbWdldHR1cGxlLWJhc2VkIGlu ZGV4IEFNIHRvIGtpbGwgaXRzIGVudHJ5IGZvciB0aGF0IFRJRC4gIFRoZQorCSAqIG5leHQgaW5k ZXhfZ2V0bmV4dF90aWQgY2FsbCB3aWxsIHBhc3MgdGhhdCBhbG9uZyB0byB0aGUgaW5kZXggQU0s CisJICogYmVmb3JlIHVuc2V0dGluZyB0aGUgZmxhZyBhZ2Fpbi4KKwkgKi8KKwlzY2FuLT5raWxs X3ByaW9yX3R1cGxlID0gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9o ZWFwL3Zpc2liaWxpdHltYXAuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3Zpc2liaWxpdHlt YXAuYwppbmRleCA0ZmQ0NzA3MDIuLjRiYTlmNDhlOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv YWNjZXNzL2hlYXAvdmlzaWJpbGl0eW1hcC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFw L3Zpc2liaWxpdHltYXAuYwpAQCAtMzEzLDcgKzMxMywzMiBAQCB2aXNpYmlsaXR5bWFwX3NldChC bG9ja051bWJlciBoZWFwQmxrLAogICogc2luY2Ugd2UgZG9uJ3QgbG9jayB0aGUgdmlzaWJpbGl0 eSBtYXAgcGFnZSBlaXRoZXIsIGl0J3MgZXZlbiBwb3NzaWJsZSB0aGF0CiAgKiBzb21lb25lIGVs c2UgY291bGQgaGF2ZSBjaGFuZ2VkIHRoZSBiaXQganVzdCBiZWZvcmUgd2UgbG9vayBhdCBpdCwg YnV0IHlldAogICogd2UgbWlnaHQgc2VlIHRoZSBvbGQgdmFsdWUuICBJdCBpcyB0aGUgY2FsbGVy J3MgcmVzcG9uc2liaWxpdHkgdG8gZGVhbCB3aXRoCi0gKiBhbGwgY29uY3VycmVuY3kgaXNzdWVz IQorICogYWxsIGNvbmN1cnJlbmN5IGlzc3VlcyEgIEluIHByYWN0aWNlIGl0IGNhbid0IGJlIHN0 YWxlIGVub3VnaCB0byBtYXR0ZXIgZm9yCisgKiB0aGUgcHJpbWFyeSB1c2UgY2FzZTogaW5kZXgt b25seSBzY2FucyB0aGF0IGNoZWNrIHdoZXRoZXIgYSBoZWFwIGZldGNoIGNhbgorICogYmUgc2tp cHBlZC4KKyAqCisgKiBUaGUgYXJndW1lbnQgZm9yIHdoeSBpdCBjYW4ndCBiZSBzdGFsZSBlbm91 Z2ggdG8gbWF0dGVyIGZvciB0aGUgcHJpbWFyeSB1c2UKKyAqIGNhc2UgaXMgYXMgZm9sbG93czoK KyAqCisgKiBJbnNlcnRzOiB3ZSBuZWVkIHRvIGRldGVjdCB0aGF0IGEgVk0gYml0IHdhcyBjbGVh cmVkIGJ5IGFuIGluc2VydCByaWdodAorICogYXdheSwgYmVjYXVzZSB0aGUgbmV3IHR1cGxlIGlz IHByZXNlbnQgaW4gdGhlIGluZGV4IGJ1dCBub3QgeWV0IHZpc2libGUuCisgKiBSZWFkaW5nIHRo ZSBUSUQgZnJvbSB0aGUgaW5kZXggcGFnZSAodW5kZXIgYSBzaGFyZWQgbG9jayBvbiB0aGUgaW5k ZXgKKyAqIGJ1ZmZlcikgaXMgc2VyaWFsaXplZCB3aXRoIHRoZSBpbnNlcnRpb24gb2YgdGhlIFRJ RCBpbnRvIHRoZSBpbmRleCAodW5kZXIKKyAqIGFuIGV4Y2x1c2l2ZSBsb2NrIG9uIHRoZSBzYW1l IGluZGV4IGJ1ZmZlcikuICBCZWNhdXNlIHRoZSBWTSBiaXQgaXMgY2xlYXJlZAorICogYmVmb3Jl IHRoZSBpbmRleCBpcyB1cGRhdGVkLCBhbmQgbG9ja2luZy91bmxvY2tpbmcgb2YgdGhlIGluZGV4 IHBhZ2UgYWN0cworICogYXMgYSBmdWxsIG1lbW9yeSBiYXJyaWVyLCB3ZSBhcmUgc3VyZSB0byBz ZWUgdGhlIGNsZWFyZWQgYml0IHdoZW5ldmVyIHdlCisgKiBzZWUgYSByZWNlbnRseS1pbnNlcnRl ZCBUSUQuCisgKgorICogRGVsZXRlczogdGhlIGNsZWFyaW5nIG9mIHRoZSBWTSBiaXQgYnkgYSBk ZWxldGUgaXMgTk9UIHNlcmlhbGl6ZWQgd2l0aCB0aGUKKyAqIGluZGV4IHBhZ2UgYWNjZXNzLCBi ZWNhdXNlIGRlbGV0ZXMgZG8gbm90IHVwZGF0ZSB0aGUgaW5kZXggcGFnZSAob25seQorICogVkFD VVVNIHJlbW92ZXMgdGhlIGluZGV4IFRJRCkuICBTbyB3ZSBtYXkgc2VlIGEgc2lnbmlmaWNhbnRs eSBzdGFsZSB2YWx1ZS4KKyAqIEhvd2V2ZXIsIHdlIGRvbid0IG5lZWQgdG8gZGV0ZWN0IHRoZSBk ZWxldGUgcmlnaHQgYXdheSwgYmVjYXVzZSB0aGUgdHVwbGUKKyAqIHJlbWFpbnMgdmlzaWJsZSB1 bnRpbCB0aGUgZGVsZXRpbmcgdHJhbnNhY3Rpb24gY29tbWl0cyBvciB0aGUgc3RhdGVtZW50Cisg KiBlbmRzIChpZiBpdCdzIG91ciBvd24gdHJhbnNhY3Rpb24pLiAgSW4gZWl0aGVyIGNhc2UsIHRo ZSBsb2NrIG9uIHRoZSBWTQorICogYnVmZmVyIHdpbGwgaGF2ZSBiZWVuIHJlbGVhc2VkIChhY3Rp bmcgYXMgYSB3cml0ZSBiYXJyaWVyKSBhZnRlciBjbGVhcmluZworICogdGhlIGJpdC4gIEFuZCBm b3IgdXMgdG8gaGF2ZSBhIHNuYXBzaG90IHRoYXQgaW5jbHVkZXMgdGhlIGRlbGV0aW5nCisgKiB0 cmFuc2FjdGlvbiAobWFraW5nIHRoZSB0dXBsZSBpbnZpc2libGUpLCB3ZSBtdXN0IGhhdmUgYWNx dWlyZWQKKyAqIFByb2NBcnJheUxvY2sgYWZ0ZXIgdGhhdCB0aW1lLCBhY3RpbmcgYXMgYSByZWFk IGJhcnJpZXIuCiAgKi8KIHVpbnQ4CiB2aXNpYmlsaXR5bWFwX2dldF9zdGF0dXMoUmVsYXRpb24g cmVsLCBCbG9ja051bWJlciBoZWFwQmxrLCBCdWZmZXIgKnZtYnVmKQpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgv Z2VuYW0uYwppbmRleCAxNDA4OTg5YzUuLjE1MTI0MzhkNiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvYWNjZXNzL2luZGV4L2dlbmFtLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dl bmFtLmMKQEAgLTg0LDcgKzg0LDcgQEAgUmVsYXRpb25HZXRJbmRleFNjYW4oUmVsYXRpb24gaW5k ZXhSZWxhdGlvbiwgaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzKQogCXNjYW4gPSBwYWxsb2Nfb2Jq ZWN0KEluZGV4U2NhbkRlc2NEYXRhKTsKIAogCXNjYW4tPmhlYXBSZWxhdGlvbiA9IE5VTEw7CS8q IG1heSBiZSBzZXQgbGF0ZXIgKi8KLQlzY2FuLT54c19oZWFwZmV0Y2ggPSBOVUxMOworCXNjYW4t PnhzX3RhYmxlX29wYXF1ZSA9IE5VTEw7CiAJc2Nhbi0+aW5kZXhSZWxhdGlvbiA9IGluZGV4UmVs YXRpb247CiAJc2Nhbi0+eHNfc25hcHNob3QgPSBJbnZhbGlkU25hcHNob3Q7CS8qIGNhbGxlciBt dXN0IGluaXRpYWxpemUgdGhpcyAqLwogCXNjYW4tPm51bWJlck9mS2V5cyA9IG5rZXlzOwpAQCAt MTI2LDYgKzEyNiwxMyBAQCBSZWxhdGlvbkdldEluZGV4U2NhbihSZWxhdGlvbiBpbmRleFJlbGF0 aW9uLCBpbnQgbmtleXMsIGludCBub3JkZXJieXMpCiAJc2Nhbi0+eHNfaGl0dXAgPSBOVUxMOwog CXNjYW4tPnhzX2hpdHVwZGVzYyA9IE5VTEw7CiAKKwlzY2FuLT54c19nZXRuZXh0X3Nsb3QgPSBO VUxMOworCisJc2Nhbi0+eHNfbmFtZV9jc3RyaW5nX2F0dG51bXMgPSBOVUxMOworCXNjYW4tPnhz X25hbWVfY3N0cmluZ19jb3VudCA9IDA7CisKKwlzY2FuLT54c192aXNpdGVkX3BhZ2VzX2xpbWl0 ID0gMDsKKwogCXJldHVybiBzY2FuOwogfQogCkBAIC0xNDgsNiArMTU1LDggQEAgSW5kZXhTY2Fu RW5kKEluZGV4U2NhbkRlc2Mgc2NhbikKIAkJcGZyZWUoc2Nhbi0+a2V5RGF0YSk7CiAJaWYgKHNj YW4tPm9yZGVyQnlEYXRhICE9IE5VTEwpCiAJCXBmcmVlKHNjYW4tPm9yZGVyQnlEYXRhKTsKKwlp ZiAoc2Nhbi0+eHNfbmFtZV9jc3RyaW5nX2F0dG51bXMgIT0gTlVMTCkKKwkJcGZyZWUoc2Nhbi0+ eHNfbmFtZV9jc3RyaW5nX2F0dG51bXMpOwogCiAJcGZyZWUoc2Nhbik7CiB9CkBAIC00NTQsNyAr NDYzLDcgQEAgc3lzdGFibGVfYmVnaW5zY2FuKFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKIAkJCQll bG9nKEVSUk9SLCAiY29sdW1uIGlzIG5vdCBpbiBpbmRleCIpOwogCQl9CiAKLQkJc3lzc2Nhbi0+ aXNjYW4gPSBpbmRleF9iZWdpbnNjYW4oaGVhcFJlbGF0aW9uLCBpcmVsLAorCQlzeXNzY2FuLT5p c2NhbiA9IGluZGV4X2JlZ2luc2NhbihoZWFwUmVsYXRpb24sIGlyZWwsIGZhbHNlLAogCQkJCQkJ CQkJCSBzbmFwc2hvdCwgTlVMTCwgbmtleXMsIDAsCiAJCQkJCQkJCQkJIFNPX05PTkUpOwogCQlp bmRleF9yZXNjYW4oc3lzc2Nhbi0+aXNjYW4sIGlkeGtleSwgbmtleXMsIE5VTEwsIDApOwpAQCAt NTE4LDcgKzUyNywxMCBAQCBzeXN0YWJsZV9nZXRuZXh0KFN5c1NjYW5EZXNjIHN5c3NjYW4pCiAK IAlpZiAoc3lzc2Nhbi0+aXJlbCkKIAl7Ci0JCWlmIChpbmRleF9nZXRuZXh0X3Nsb3Qoc3lzc2Nh bi0+aXNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBzeXNzY2FuLT5zbG90KSkKKwkJYm9vbAkJ cmVjaGVjazsKKworCQlpZiAodGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90KHN5c3NjYW4tPmlzY2Fu LCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwKKwkJCQkJCQkJCSBzeXNzY2FuLT5zbG90LCAmcmVjaGVj aykpCiAJCXsKIAkJCWJvb2wJCXNob3VsZEZyZWU7CiAKQEAgLTUzMyw3ICs1NDUsNyBAQCBzeXN0 YWJsZV9nZXRuZXh0KFN5c1NjYW5EZXNjIHN5c3NjYW4pCiAJCQkgKiBiZWNhdXNlIHdlIHN0aWxs IHdvdWxkbid0IG5lZWQgdG8gc3VwcG9ydCBpbmRleGVzIG9uCiAJCQkgKiBleHByZXNzaW9ucy4K IAkJCSAqLwotCQkJaWYgKHN5c3NjYW4tPmlzY2FuLT54c19yZWNoZWNrKQorCQkJaWYgKHJlY2hl Y2spCiAJCQkJZWxvZyhFUlJPUiwgInN5c3RlbSBjYXRhbG9nIHNjYW5zIHdpdGggbG9zc3kgaW5k ZXggY29uZGl0aW9ucyBhcmUgbm90IGltcGxlbWVudGVkIik7CiAJCX0KIAl9CkBAIC02NDMsNyAr NjU1LDcgQEAgc3lzdGFibGVfZW5kc2NhbihTeXNTY2FuRGVzYyBzeXNzY2FuKQogICogd2UgY291 bGQgZG8gYSBoZWFwc2NhbiBhbmQgc29ydCwgYnV0IHRoZSB1c2VzIGFyZSBpbiBwbGFjZXMgdGhh dAogICogcHJvYmFibHkgZG9uJ3QgbmVlZCB0byBzdGlsbCB3b3JrIHdpdGggY29ycnVwdGVkIGNh dGFsb2cgaW5kZXhlcy4pCiAgKiBGb3IgdGhlIG1vbWVudCwgdGhlcmVmb3JlLCB0aGVzZSBmdW5j dGlvbnMgYXJlIG1lcmVseSB0aGUgdGhpbmVzdCBvZgotICogd3JhcHBlcnMgYXJvdW5kIGluZGV4 X2JlZ2luc2Nhbi9pbmRleF9nZXRuZXh0X3Nsb3QuICBUaGUgbWFpbiByZWFzb24gZm9yCisgKiB3 cmFwcGVycyBhcm91bmQgaW5kZXhfYmVnaW5zY2FuL3RhYmxlX2luZGV4X2dldG5leHRfc2xvdC4g IFRoZSBtYWluIHJlYXNvbiBmb3IKICAqIHRoZWlyIGV4aXN0ZW5jZSBpcyB0byBjZW50cmFsaXpl IHBvc3NpYmxlIGZ1dHVyZSBzdXBwb3J0IG9mIGxvc3N5IG9wZXJhdG9ycwogICogaW4gY2F0YWxv ZyBzY2Fucy4KICAqLwpAQCAtNzE2LDcgKzcyOCw3IEBAIHN5c3RhYmxlX2JlZ2luc2Nhbl9vcmRl cmVkKFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKIAlpZiAoVHJhbnNhY3Rpb25JZElzVmFsaWQoQ2hl Y2tYaWRBbGl2ZSkpCiAJCWJzeXNzY2FuID0gdHJ1ZTsKIAotCXN5c3NjYW4tPmlzY2FuID0gaW5k ZXhfYmVnaW5zY2FuKGhlYXBSZWxhdGlvbiwgaW5kZXhSZWxhdGlvbiwKKwlzeXNzY2FuLT5pc2Nh biA9IGluZGV4X2JlZ2luc2NhbihoZWFwUmVsYXRpb24sIGluZGV4UmVsYXRpb24sIGZhbHNlLAog CQkJCQkJCQkJIHNuYXBzaG90LCBOVUxMLCBua2V5cywgMCwKIAkJCQkJCQkJCSBTT19OT05FKTsK IAlpbmRleF9yZXNjYW4oc3lzc2Nhbi0+aXNjYW4sIGlkeGtleSwgbmtleXMsIE5VTEwsIDApOwpA QCAtNzM0LDEzICs3NDYsMTUgQEAgSGVhcFR1cGxlCiBzeXN0YWJsZV9nZXRuZXh0X29yZGVyZWQo U3lzU2NhbkRlc2Mgc3lzc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CiAJSGVhcFR1 cGxlCWh0dXAgPSBOVUxMOworCWJvb2wJCXJlY2hlY2s7CiAKIAlBc3NlcnQoc3lzc2Nhbi0+aXJl bCk7Ci0JaWYgKGluZGV4X2dldG5leHRfc2xvdChzeXNzY2FuLT5pc2NhbiwgZGlyZWN0aW9uLCBz eXNzY2FuLT5zbG90KSkKKwlpZiAodGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90KHN5c3NjYW4tPmlz Y2FuLCBkaXJlY3Rpb24sIHN5c3NjYW4tPnNsb3QsCisJCQkJCQkJCSAmcmVjaGVjaykpCiAJCWh0 dXAgPSBFeGVjRmV0Y2hTbG90SGVhcFR1cGxlKHN5c3NjYW4tPnNsb3QsIGZhbHNlLCBOVUxMKTsK IAogCS8qIFNlZSBub3RlcyBpbiBzeXN0YWJsZV9nZXRuZXh0ICovCi0JaWYgKGh0dXAgJiYgc3lz c2Nhbi0+aXNjYW4tPnhzX3JlY2hlY2spCisJaWYgKGh0dXAgJiYgcmVjaGVjaykKIAkJZWxvZyhF UlJPUiwgInN5c3RlbSBjYXRhbG9nIHNjYW5zIHdpdGggbG9zc3kgaW5kZXggY29uZGl0aW9ucyBh cmUgbm90IGltcGxlbWVudGVkIik7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNj ZXNzL2luZGV4L2luZGV4YW0uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMK aW5kZXggNzk2N2U5Mzk4Li5hYTBkNGIxNDMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vz cy9pbmRleC9pbmRleGFtLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0u YwpAQCAtMjQsOSArMjQsNyBAQAogICoJCWluZGV4X3BhcmFsbGVsc2Nhbl9pbml0aWFsaXplIC0g aW5pdGlhbGl6ZSBwYXJhbGxlbCBzY2FuCiAgKgkJaW5kZXhfcGFyYWxsZWxyZXNjYW4gIC0gKHJl KXN0YXJ0IGEgcGFyYWxsZWwgc2NhbiBvZiBhbiBpbmRleAogICoJCWluZGV4X2JlZ2luc2Nhbl9w YXJhbGxlbCAtIGpvaW4gcGFyYWxsZWwgaW5kZXggc2NhbgotICoJCWluZGV4X2dldG5leHRfdGlk CS0gZ2V0IHRoZSBuZXh0IFRJRCBmcm9tIGEgc2NhbgotICoJCWluZGV4X2ZldGNoX2hlYXAJCS0g Z2V0IHRoZSBzY2FuJ3MgbmV4dCBoZWFwIHR1cGxlCi0gKgkJaW5kZXhfZ2V0bmV4dF9zbG90CS0g Z2V0IHRoZSBuZXh0IHR1cGxlIGZyb20gYSBzY2FuCisgKgkJaW5kZXhfZ2V0bmV4dF90aWQJLSBh bWdldHR1cGxlIHRhYmxlIEFNIGhlbHBlciByb3V0aW5lCiAgKgkJaW5kZXhfZ2V0Yml0bWFwIC0g Z2V0IGFsbCB0dXBsZXMgZnJvbSBhIHNjYW4KICAqCQlpbmRleF9idWxrX2RlbGV0ZQktIGJ1bGsg ZGVsZXRpb24gb2YgaW5kZXggdHVwbGVzCiAgKgkJaW5kZXhfdmFjdXVtX2NsZWFudXAJLSBwb3N0 LWRlbGV0aW9uIGNsZWFudXAgb2YgYW4gaW5kZXgKQEAgLTEwNSw5ICsxMDMsMTYgQEAgZG8geyBc CiAJCQkgQ3BwQXNTdHJpbmcocG5hbWUpLCBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShzY2FuLT5p bmRleFJlbGF0aW9uKSk7IFwKIH0gd2hpbGUoMCkKIAotc3RhdGljIEluZGV4U2NhbkRlc2MgaW5k ZXhfYmVnaW5zY2FuX2ludGVybmFsKFJlbGF0aW9uIGluZGV4UmVsYXRpb24sCi0JCQkJCQkJCQkJ CSAgaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzLCBTbmFwc2hvdCBzbmFwc2hvdCwKLQkJCQkJCQkJ CQkJICBQYXJhbGxlbEluZGV4U2NhbkRlc2MgcHNjYW4sIGJvb2wgdGVtcF9zbmFwKTsKK3N0YXRp YyBwZ19hdHRyaWJ1dGVfYWx3YXlzX2lubGluZSBJbmRleFNjYW5EZXNjIGluZGV4X2JlZ2luc2Nh bl9pbnRlcm5hbChSZWxhdGlvbiBpbmRleFJlbGF0aW9uLAorCQkJCQkJCQkJCQkJCQkJCQkJIFJl bGF0aW9uIGhlYXBSZWxhdGlvbiwKKwkJCQkJCQkJCQkJCQkJCQkJCSBpbnQgbmtleXMsCisJCQkJ CQkJCQkJCQkJCQkJCQkgaW50IG5vcmRlcmJ5cywKKwkJCQkJCQkJCQkJCQkJCQkJCSBTbmFwc2hv dCBzbmFwc2hvdCwKKwkJCQkJCQkJCQkJCQkJCQkJCSBQYXJhbGxlbEluZGV4U2NhbkRlc2MgcHNj YW4sCisJCQkJCQkJCQkJCQkJCQkJCQkgSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uICppbnN0cnVt ZW50LAorCQkJCQkJCQkJCQkJCQkJCQkJIGJvb2wgaW5kZXhfb25seV9zY2FuLAorCQkJCQkJCQkJ CQkJCQkJCQkJIGJvb2wgdGVtcF9zbmFwLAorCQkJCQkJCQkJCQkJCQkJCQkJIHVpbnQzMiBmbGFn cyk7CiBzdGF0aWMgaW5saW5lIHZvaWQgdmFsaWRhdGVfcmVsYXRpb25fYXNfaW5kZXgoUmVsYXRp b24gcik7CiAKIApAQCAtMjU2LDEzICsyNjEsMTIgQEAgaW5kZXhfaW5zZXJ0X2NsZWFudXAoUmVs YXRpb24gaW5kZXhSZWxhdGlvbiwKIEluZGV4U2NhbkRlc2MKIGluZGV4X2JlZ2luc2NhbihSZWxh dGlvbiBoZWFwUmVsYXRpb24sCiAJCQkJUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwKKwkJCQlib29s IGluZGV4X29ubHlfc2NhbiwKIAkJCQlTbmFwc2hvdCBzbmFwc2hvdCwKIAkJCQlJbmRleFNjYW5J bnN0cnVtZW50YXRpb24gKmluc3RydW1lbnQsCiAJCQkJaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlz LAogCQkJCXVpbnQzMiBmbGFncykKIHsKLQlJbmRleFNjYW5EZXNjIHNjYW47Ci0KIAlBc3NlcnQo c25hcHNob3QgIT0gSW52YWxpZFNuYXBzaG90KTsKIAogCS8qIENoZWNrIHRoYXQgYSBoaXN0b3Jp YyBzbmFwc2hvdCBpcyBub3QgdXNlZCBmb3Igbm9uLWNhdGFsb2cgdGFibGVzICovCkBAIC0yNzUs MjAgKzI3OSwxMCBAQCBpbmRleF9iZWdpbnNjYW4oUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogCQkJ CQkJUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoaGVhcFJlbGF0aW9uKSkpKTsKIAl9CiAKLQlzY2Fu ID0gaW5kZXhfYmVnaW5zY2FuX2ludGVybmFsKGluZGV4UmVsYXRpb24sIG5rZXlzLCBub3JkZXJi eXMsIHNuYXBzaG90LCBOVUxMLCBmYWxzZSk7Ci0KLQkvKgotCSAqIFNhdmUgYWRkaXRpb25hbCBw YXJhbWV0ZXJzIGludG8gdGhlIHNjYW5kZXNjLiAgRXZlcnl0aGluZyBlbHNlIHdhcyBzZXQKLQkg KiB1cCBieSBSZWxhdGlvbkdldEluZGV4U2Nhbi4KLQkgKi8KLQlzY2FuLT5oZWFwUmVsYXRpb24g PSBoZWFwUmVsYXRpb247Ci0Jc2Nhbi0+eHNfc25hcHNob3QgPSBzbmFwc2hvdDsKLQlzY2FuLT5p bnN0cnVtZW50ID0gaW5zdHJ1bWVudDsKLQotCS8qIHByZXBhcmUgdG8gZmV0Y2ggaW5kZXggbWF0 Y2hlcyBmcm9tIHRhYmxlICovCi0Jc2Nhbi0+eHNfaGVhcGZldGNoID0gdGFibGVfaW5kZXhfZmV0 Y2hfYmVnaW4oaGVhcFJlbGF0aW9uLCBmbGFncyk7Ci0KLQlyZXR1cm4gc2NhbjsKKwlyZXR1cm4g aW5kZXhfYmVnaW5zY2FuX2ludGVybmFsKGluZGV4UmVsYXRpb24sIGhlYXBSZWxhdGlvbiwKKwkJ CQkJCQkJCW5rZXlzLCBub3JkZXJieXMsCisJCQkJCQkJCQlzbmFwc2hvdCwgTlVMTCwgaW5zdHJ1 bWVudCwKKwkJCQkJCQkJCWluZGV4X29ubHlfc2NhbiwgZmFsc2UsIGZsYWdzKTsKIH0KIAogLyoK QEAgLTMwMywyOSArMjk3LDI0IEBAIGluZGV4X2JlZ2luc2Nhbl9iaXRtYXAoUmVsYXRpb24gaW5k ZXhSZWxhdGlvbiwKIAkJCQkJICAgSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uICppbnN0cnVtZW50 LAogCQkJCQkgICBpbnQgbmtleXMpCiB7Ci0JSW5kZXhTY2FuRGVzYyBzY2FuOwotCiAJQXNzZXJ0 KHNuYXBzaG90ICE9IEludmFsaWRTbmFwc2hvdCk7CisJQXNzZXJ0KElzTVZDQ0xpa2VTbmFwc2hv dChzbmFwc2hvdCkpOwogCi0Jc2NhbiA9IGluZGV4X2JlZ2luc2Nhbl9pbnRlcm5hbChpbmRleFJl bGF0aW9uLCBua2V5cywgMCwgc25hcHNob3QsIE5VTEwsIGZhbHNlKTsKLQotCS8qCi0JICogU2F2 ZSBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgaW50byB0aGUgc2NhbmRlc2MuICBFdmVyeXRoaW5nIGVs c2Ugd2FzIHNldAotCSAqIHVwIGJ5IFJlbGF0aW9uR2V0SW5kZXhTY2FuLgotCSAqLwotCXNjYW4t PnhzX3NuYXBzaG90ID0gc25hcHNob3Q7Ci0Jc2Nhbi0+aW5zdHJ1bWVudCA9IGluc3RydW1lbnQ7 Ci0KLQlyZXR1cm4gc2NhbjsKKwlyZXR1cm4gaW5kZXhfYmVnaW5zY2FuX2ludGVybmFsKGluZGV4 UmVsYXRpb24sIE5VTEwsIG5rZXlzLCAwLCBzbmFwc2hvdCwKKwkJCQkJCQkJCU5VTEwsIGluc3Ry dW1lbnQsIGZhbHNlLCBmYWxzZSwgU09fTk9ORSk7CiB9CiAKIC8qCiAgKiBpbmRleF9iZWdpbnNj YW5faW50ZXJuYWwgLS0tIGNvbW1vbiBjb2RlIGZvciBpbmRleF9iZWdpbnNjYW4gdmFyaWFudHMK KyAqCisgKiBXaGVuIGhlYXBSZWxhdGlvbiBpcyBub3QgTlVMTCwgYWxzbyBpbml0aWFsaXplcyB0 YWJsZSBBTSBpbmRleCBzY2FuIHN0YXRlLgogICovCi1zdGF0aWMgSW5kZXhTY2FuRGVzYwotaW5k ZXhfYmVnaW5zY2FuX2ludGVybmFsKFJlbGF0aW9uIGluZGV4UmVsYXRpb24sCitzdGF0aWMgcGdf YXR0cmlidXRlX2Fsd2F5c19pbmxpbmUgSW5kZXhTY2FuRGVzYworaW5kZXhfYmVnaW5zY2FuX2lu dGVybmFsKFJlbGF0aW9uIGluZGV4UmVsYXRpb24sIFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKIAkJ CQkJCSBpbnQgbmtleXMsIGludCBub3JkZXJieXMsIFNuYXBzaG90IHNuYXBzaG90LAotCQkJCQkJ IFBhcmFsbGVsSW5kZXhTY2FuRGVzYyBwc2NhbiwgYm9vbCB0ZW1wX3NuYXApCisJCQkJCQkgUGFy YWxsZWxJbmRleFNjYW5EZXNjIHBzY2FuLAorCQkJCQkJIEluZGV4U2Nhbkluc3RydW1lbnRhdGlv biAqaW5zdHJ1bWVudCwKKwkJCQkJCSBib29sIGluZGV4X29ubHlfc2NhbiwgYm9vbCB0ZW1wX3Nu YXAsIHVpbnQzMiBmbGFncykKIHsKIAlJbmRleFNjYW5EZXNjIHNjYW47CiAKQEAgLTM0OSw2ICsz MzgsNjIgQEAgaW5kZXhfYmVnaW5zY2FuX2ludGVybmFsKFJlbGF0aW9uIGluZGV4UmVsYXRpb24s CiAJc2Nhbi0+cGFyYWxsZWxfc2NhbiA9IHBzY2FuOwogCXNjYW4tPnhzX3RlbXBfc25hcCA9IHRl bXBfc25hcDsKIAorCXNjYW4tPnhzX3NuYXBzaG90ID0gc25hcHNob3Q7CisJc2Nhbi0+aW5zdHJ1 bWVudCA9IGluc3RydW1lbnQ7CisKKwkvKgorCSAqIEluaXRpYWxpemUgaGVhcC1zaWRlIHNjYW4g c3RhdGUgd2hlbiBhIGhlYXAgcmVsYXRpb24gaXMgcHJvdmlkZWQuCisJICogQml0bWFwIGluZGV4 IHNjYW5zIGRvbid0IHByb3ZpZGUgb25lLgorCSAqLworCWlmIChoZWFwUmVsYXRpb24gIT0gTlVM TCkKKwl7CisJCXNjYW4tPmhlYXBSZWxhdGlvbiA9IGhlYXBSZWxhdGlvbjsKKwkJc2Nhbi0+eHNf d2FudF9pdHVwID0gaW5kZXhfb25seV9zY2FuOworCQlzY2FuLT54c19oZWFwX2NvbnRpbnVlID0g ZmFsc2U7CisKKwkJLyoKKwkJICogRm9yIGluZGV4LW9ubHkgc2NhbnMsIGZpbmQgYW55ICJuYW1l IiBjb2x1bW5zIHN0b3JlZCBhcyBjc3RyaW5ncworCQkgKiAoZS5nLiBidHJlZSBuYW1lX29wcyks IHdoaWNoIHRoZSB0YWJsZSBBTSBtdXN0IHJlLXBhZCB0bworCQkgKiBOQU1FREFUQUxFTiB3aGVu IGZpbGxpbmcgYSBzbG90IGZyb20gdGhlIGluZGV4IHR1cGxlLiAgV2UgZGV0ZWN0CisJCSAqIHRo aXMgZ2VuZXJpY2FsbHkgYnkgbG9va2luZyBmb3IgaW5kZXggYXR0cmlidXRlcyB3aG9zZSBzdG9y ZWQgdHlwZQorCQkgKiBpcyBDU1RSSU5HT0lEIHdoaWxlIHRoZWlyIG9wY2xhc3MgaW5wdXQgdHlw ZSBpcyBOQU1FT0lELiAgVGhpcyBpcworCQkgKiBkb25lIGJlZm9yZSB0YWJsZV9pbmRleF9zY2Fu X2JlZ2luIHNvIHRoZSB0YWJsZSBBTSBjYW4gc2l6ZQorCQkgKiBwZXItdHVwbGUgd29ya3NwYWNl IGFjY29yZGluZ2x5LgorCQkgKi8KKwkJaWYgKGluZGV4X29ubHlfc2NhbikKKwkJeworCQkJaW50 CQkJaW5kbmtleWF0dHMgPSBpbmRleFJlbGF0aW9uLT5yZF9pbmRleC0+aW5kbmtleWF0dHM7CisJ CQlpbnQJCQluYW1lY291bnQgPSAwOworCisJCQlmb3IgKGludCBhdHRudW0gPSAwOyBhdHRudW0g PCBpbmRua2V5YXR0czsgYXR0bnVtKyspCisJCQl7CisJCQkJaWYgKFR1cGxlRGVzY0F0dHIoaW5k ZXhSZWxhdGlvbi0+cmRfYXR0LCBhdHRudW0pLT5hdHR0eXBpZCA9PSBDU1RSSU5HT0lEICYmCisJ CQkJCWluZGV4UmVsYXRpb24tPnJkX29wY2ludHlwZVthdHRudW1dID09IE5BTUVPSUQpCisJCQkJ CW5hbWVjb3VudCsrOworCQkJfQorCisJCQlpZiAobmFtZWNvdW50ID4gMCkKKwkJCXsKKwkJCQlp bnQJCQlpZHggPSAwOworCisJCQkJc2Nhbi0+eHNfbmFtZV9jc3RyaW5nX2F0dG51bXMgPSBwYWxs b2NfYXJyYXkoQXR0ck51bWJlciwgbmFtZWNvdW50KTsKKwkJCQlmb3IgKGludCBhdHRudW0gPSAw OyBhdHRudW0gPCBpbmRua2V5YXR0czsgYXR0bnVtKyspCisJCQkJeworCQkJCQlpZiAoVHVwbGVE ZXNjQXR0cihpbmRleFJlbGF0aW9uLT5yZF9hdHQsIGF0dG51bSktPmF0dHR5cGlkID09IENTVFJJ TkdPSUQgJiYKKwkJCQkJCWluZGV4UmVsYXRpb24tPnJkX29wY2ludHlwZVthdHRudW1dID09IE5B TUVPSUQpCisJCQkJCQlzY2FuLT54c19uYW1lX2NzdHJpbmdfYXR0bnVtc1tpZHgrK10gPSAoQXR0 ck51bWJlcikgYXR0bnVtOworCQkJCX0KKwkJCQlzY2FuLT54c19uYW1lX2NzdHJpbmdfY291bnQg PSBuYW1lY291bnQ7CisJCQl9CisJCX0KKworCQkvKiBzZXQgdXAgdGFibGUgQU0gc3RhdGUgZm9y IHRoZSBpbmRleCBzY2FuIChzZXRzIHhzX3RhYmxlX29wYXF1ZSkgKi8KKwkJdGFibGVfaW5kZXhf c2Nhbl9iZWdpbihzY2FuLCBmbGFncyk7CisKKwkJLyogdGFibGUgQU0gbXVzdCBzZXQgdGhlc2Ug Zm9yIHVzICovCisJCUFzc2VydChzY2FuLT54c19nZXRuZXh0X3Nsb3QgIT0gTlVMTCAmJiBzY2Fu LT54c190YWJsZV9vcGFxdWUgIT0gTlVMTCk7CisJfQorCiAJcmV0dXJuIHNjYW47CiB9CiAKQEAg LTM3Niw4ICs0MjEsOCBAQCBpbmRleF9yZXNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuLAogCUFzc2Vy dChub3JkZXJieXMgPT0gc2Nhbi0+bnVtYmVyT2ZPcmRlckJ5cyk7CiAKIAkvKiByZXNldCB0YWJs ZSBBTSBzdGF0ZSBmb3IgcmVzY2FuICovCi0JaWYgKHNjYW4tPnhzX2hlYXBmZXRjaCkKLQkJdGFi bGVfaW5kZXhfZmV0Y2hfcmVzZXQoc2Nhbi0+eHNfaGVhcGZldGNoKTsKKwlpZiAoc2Nhbi0+eHNf dGFibGVfb3BhcXVlKQorCQl0YWJsZV9pbmRleF9zY2FuX3Jlc2V0KHNjYW4pOwogCiAJc2Nhbi0+ a2lsbF9wcmlvcl90dXBsZSA9IGZhbHNlOyAvKiBmb3Igc2FmZXR5ICovCiAJc2Nhbi0+eHNfaGVh cF9jb250aW51ZSA9IGZhbHNlOwpAQCAtMzk3LDEwICs0NDIsMTAgQEAgaW5kZXhfZW5kc2NhbihJ bmRleFNjYW5EZXNjIHNjYW4pCiAJQ0hFQ0tfU0NBTl9QUk9DRURVUkUoYW1lbmRzY2FuKTsKIAog CS8qIFJlbGVhc2UgcmVzb3VyY2VzIChsaWtlIGJ1ZmZlciBwaW5zKSBmcm9tIHRhYmxlIGFjY2Vz c2VzICovCi0JaWYgKHNjYW4tPnhzX2hlYXBmZXRjaCkKKwlpZiAoc2Nhbi0+eHNfdGFibGVfb3Bh cXVlKQogCXsKLQkJdGFibGVfaW5kZXhfZmV0Y2hfZW5kKHNjYW4tPnhzX2hlYXBmZXRjaCk7Ci0J CXNjYW4tPnhzX2hlYXBmZXRjaCA9IE5VTEw7CisJCXRhYmxlX2luZGV4X3NjYW5fZW5kKHNjYW4p OworCQlzY2FuLT54c190YWJsZV9vcGFxdWUgPSBOVUxMOwogCX0KIAogCS8qIEVuZCB0aGUgQU0n cyBzY2FuICovCkBAIC00NTMsOCArNDk4LDggQEAgaW5kZXhfcmVzdHJwb3MoSW5kZXhTY2FuRGVz YyBzY2FuKQogCUNIRUNLX1NDQU5fUFJPQ0VEVVJFKGFtcmVzdHJwb3MpOwogCiAJLyogcmVzZXQg dGFibGUgQU0gc3RhdGUgZm9yIHJlc3RvcmluZyB0aGUgbWFya2VkIHBvc2l0aW9uICovCi0JaWYg KHNjYW4tPnhzX2hlYXBmZXRjaCkKLQkJdGFibGVfaW5kZXhfZmV0Y2hfcmVzZXQoc2Nhbi0+eHNf aGVhcGZldGNoKTsKKwlpZiAoc2Nhbi0+eHNfdGFibGVfb3BhcXVlKQorCQl0YWJsZV9pbmRleF9z Y2FuX3Jlc2V0KHNjYW4pOwogCiAJc2Nhbi0+a2lsbF9wcmlvcl90dXBsZSA9IGZhbHNlOyAvKiBm b3Igc2FmZXR5ICovCiAJc2Nhbi0+eHNfaGVhcF9jb250aW51ZSA9IGZhbHNlOwpAQCAtNTQwLDgg KzU4NSw4IEBAIGluZGV4X3BhcmFsbGVscmVzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbikKIAlTQ0FO X0NIRUNLUzsKIAogCS8qIHJlc2V0IHRhYmxlIEFNIHN0YXRlIGZvciByZXNjYW4gKi8KLQlpZiAo c2Nhbi0+eHNfaGVhcGZldGNoKQotCQl0YWJsZV9pbmRleF9mZXRjaF9yZXNldChzY2FuLT54c19o ZWFwZmV0Y2gpOworCWlmIChzY2FuLT54c190YWJsZV9vcGFxdWUpCisJCXRhYmxlX2luZGV4X3Nj YW5fcmVzZXQoc2Nhbik7CiAKIAkvKiBhbXBhcmFsbGVscmVzY2FuIGlzIG9wdGlvbmFsOyBhc3N1 bWUgbm8tb3AgaWYgbm90IHByb3ZpZGVkIGJ5IEFNICovCiAJaWYgKHNjYW4tPmluZGV4UmVsYXRp b24tPnJkX2luZGFtLT5hbXBhcmFsbGVscmVzY2FuICE9IE5VTEwpCkBAIC01NTgsNDEgKzYwMywz MyBAQCBpbmRleF9wYXJhbGxlbHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4pCiAgKi8KIEluZGV4 U2NhbkRlc2MKIGluZGV4X2JlZ2luc2Nhbl9wYXJhbGxlbChSZWxhdGlvbiBoZWFwcmVsLCBSZWxh dGlvbiBpbmRleHJlbCwKKwkJCQkJCSBib29sIGluZGV4X29ubHlfc2NhbiwKIAkJCQkJCSBJbmRl eFNjYW5JbnN0cnVtZW50YXRpb24gKmluc3RydW1lbnQsCiAJCQkJCQkgaW50IG5rZXlzLCBpbnQg bm9yZGVyYnlzLAogCQkJCQkJIFBhcmFsbGVsSW5kZXhTY2FuRGVzYyBwc2NhbiwKIAkJCQkJCSB1 aW50MzIgZmxhZ3MpCiB7CiAJU25hcHNob3QJc25hcHNob3Q7Ci0JSW5kZXhTY2FuRGVzYyBzY2Fu OwogCiAJQXNzZXJ0KFJlbEZpbGVMb2NhdG9yRXF1YWxzKGhlYXByZWwtPnJkX2xvY2F0b3IsIHBz Y2FuLT5wc19sb2NhdG9yKSk7CiAJQXNzZXJ0KFJlbEZpbGVMb2NhdG9yRXF1YWxzKGluZGV4cmVs LT5yZF9sb2NhdG9yLCBwc2Nhbi0+cHNfaW5kZXhsb2NhdG9yKSk7CiAKIAlzbmFwc2hvdCA9IFJl c3RvcmVTbmFwc2hvdChwc2Nhbi0+cHNfc25hcHNob3RfZGF0YSk7CiAJUmVnaXN0ZXJTbmFwc2hv dChzbmFwc2hvdCk7Ci0Jc2NhbiA9IGluZGV4X2JlZ2luc2Nhbl9pbnRlcm5hbChpbmRleHJlbCwg bmtleXMsIG5vcmRlcmJ5cywgc25hcHNob3QsCi0JCQkJCQkJCQlwc2NhbiwgdHJ1ZSk7CiAKLQkv KgotCSAqIFNhdmUgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIGludG8gdGhlIHNjYW5kZXNjLiAgRXZl cnl0aGluZyBlbHNlIHdhcyBzZXQKLQkgKiB1cCBieSBpbmRleF9iZWdpbnNjYW5faW50ZXJuYWwu Ci0JICovCi0Jc2Nhbi0+aGVhcFJlbGF0aW9uID0gaGVhcHJlbDsKLQlzY2FuLT54c19zbmFwc2hv dCA9IHNuYXBzaG90OwotCXNjYW4tPmluc3RydW1lbnQgPSBpbnN0cnVtZW50OwotCi0JLyogcHJl cGFyZSB0byBmZXRjaCBpbmRleCBtYXRjaGVzIGZyb20gdGFibGUgKi8KLQlzY2FuLT54c19oZWFw ZmV0Y2ggPSB0YWJsZV9pbmRleF9mZXRjaF9iZWdpbihoZWFwcmVsLCBmbGFncyk7Ci0KLQlyZXR1 cm4gc2NhbjsKKwlyZXR1cm4gaW5kZXhfYmVnaW5zY2FuX2ludGVybmFsKGluZGV4cmVsLCBoZWFw cmVsLCBua2V5cywgbm9yZGVyYnlzLAorCQkJCQkJCQkJc25hcHNob3QsIHBzY2FuLCBpbnN0cnVt ZW50LAorCQkJCQkJCQkJaW5kZXhfb25seV9zY2FuLCB0cnVlLCBmbGFncyk7CiB9CiAKIC8qIC0t LS0tLS0tLS0tLS0tLS0KLSAqIGluZGV4X2dldG5leHRfdGlkIC0gZ2V0IHRoZSBuZXh0IFRJRCBm cm9tIGEgc2NhbgorICogaW5kZXhfZ2V0bmV4dF90aWQgLSBhbWdldHR1cGxlIGludGVyZmFjZQog ICoKICAqIFRoZSByZXN1bHQgaXMgdGhlIG5leHQgVElEIHNhdGlzZnlpbmcgdGhlIHNjYW4ga2V5 cywKICAqIG9yIE5VTEwgaWYgbm8gbW9yZSBtYXRjaGluZyB0dXBsZXMgZXhpc3QuCisgKgorICog VGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgYnkgdGFibGUgQU0gYW1nZXR0dXBsZS1iYXNlZCBp bmRleCBzY2FuCisgKiBjYWxsYmFja3MuCiAgKiAtLS0tLS0tLS0tLS0tLS0tCiAgKi8KIEl0ZW1Q b2ludGVyCkBAIC02MjIsOCArNjU5LDggQEAgaW5kZXhfZ2V0bmV4dF90aWQoSW5kZXhTY2FuRGVz YyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbikKIAlpZiAoIWZvdW5kKQogCXsKIAkJLyog cmVzZXQgdGFibGUgQU0gc3RhdGUgKi8KLQkJaWYgKHNjYW4tPnhzX2hlYXBmZXRjaCkKLQkJCXRh YmxlX2luZGV4X2ZldGNoX3Jlc2V0KHNjYW4tPnhzX2hlYXBmZXRjaCk7CisJCWlmIChzY2FuLT54 c190YWJsZV9vcGFxdWUpCisJCQl0YWJsZV9pbmRleF9zY2FuX3Jlc2V0KHNjYW4pOwogCiAJCXJl dHVybiBOVUxMOwogCX0KQEAgLTYzNSw5NyArNjcyLDYgQEAgaW5kZXhfZ2V0bmV4dF90aWQoSW5k ZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbikKIAlyZXR1cm4gJnNjYW4t PnhzX2hlYXB0aWQ7CiB9CiAKLS8qIC0tLS0tLS0tLS0tLS0tLS0KLSAqCQlpbmRleF9mZXRjaF9o ZWFwIC0gZ2V0IHRoZSBzY2FuJ3MgbmV4dCBoZWFwIHR1cGxlCi0gKgotICogVGhlIHJlc3VsdCBp cyBhIHZpc2libGUgaGVhcCB0dXBsZSBhc3NvY2lhdGVkIHdpdGggdGhlIGluZGV4IFRJRCBtb3N0 Ci0gKiByZWNlbnRseSBmZXRjaGVkIGJ5IGluZGV4X2dldG5leHRfdGlkLCBvciBOVUxMIGlmIG5v IG1vcmUgbWF0Y2hpbmcgdHVwbGVzCi0gKiBleGlzdC4gIChUaGVyZSBjYW4gYmUgbW9yZSB0aGFu IG9uZSBtYXRjaGluZyB0dXBsZSBiZWNhdXNlIG9mIEhPVCBjaGFpbnMsCi0gKiBhbHRob3VnaCB3 aGVuIHVzaW5nIGFuIE1WQ0Mgc25hcHNob3QgaXQgc2hvdWxkIGJlIGltcG9zc2libGUgZm9yIG1v cmUgdGhhbgotICogb25lIHN1Y2ggdHVwbGUgdG8gZXhpc3QuKQotICoKLSAqIE9uIHN1Y2Nlc3Ms IHRoZSBidWZmZXIgY29udGFpbmluZyB0aGUgaGVhcCB0dXAgaXMgcGlubmVkICh0aGUgcGluIHdp bGwgYmUKLSAqIGRyb3BwZWQgaW4gYSBmdXR1cmUgaW5kZXhfZ2V0bmV4dF90aWQsIGluZGV4X2Zl dGNoX2hlYXAgb3IgaW5kZXhfZW5kc2NhbgotICogY2FsbCkuCi0gKgotICogTm90ZTogY2FsbGVy IG11c3QgY2hlY2sgc2Nhbi0+eHNfcmVjaGVjaywgYW5kIHBlcmZvcm0gcmVjaGVja2luZyBvZiB0 aGUKLSAqIHNjYW4ga2V5cyBpZiByZXF1aXJlZC4gIFdlIGRvIG5vdCBkbyB0aGF0IGhlcmUgYmVj YXVzZSB3ZSBkb24ndCBoYXZlCi0gKiBlbm91Z2ggaW5mb3JtYXRpb24gdG8gZG8gaXQgZWZmaWNp ZW50bHkgaW4gdGhlIGdlbmVyYWwgY2FzZS4KLSAqIC0tLS0tLS0tLS0tLS0tLS0KLSAqLwotYm9v bAotaW5kZXhfZmV0Y2hfaGVhcChJbmRleFNjYW5EZXNjIHNjYW4sIFR1cGxlVGFibGVTbG90ICpz bG90KQotewotCWJvb2wJCWFsbF9kZWFkID0gZmFsc2U7Ci0JYm9vbAkJZm91bmQ7Ci0KLQlmb3Vu ZCA9IHRhYmxlX2luZGV4X2ZldGNoX3R1cGxlKHNjYW4tPnhzX2hlYXBmZXRjaCwgJnNjYW4tPnhz X2hlYXB0aWQsCi0JCQkJCQkJCQlzY2FuLT54c19zbmFwc2hvdCwgc2xvdCwKLQkJCQkJCQkJCSZz Y2FuLT54c19oZWFwX2NvbnRpbnVlLCAmYWxsX2RlYWQpOwotCi0JaWYgKGZvdW5kKQotCQlwZ3N0 YXRfY291bnRfaGVhcF9mZXRjaChzY2FuLT5pbmRleFJlbGF0aW9uKTsKLQotCS8qCi0JICogSWYg d2Ugc2Nhbm5lZCBhIHdob2xlIEhPVCBjaGFpbiBhbmQgZm91bmQgb25seSBkZWFkIHR1cGxlcywg dGVsbCBpbmRleAotCSAqIEFNIHRvIGtpbGwgaXRzIGVudHJ5IGZvciB0aGF0IFRJRCAodGhpcyB3 aWxsIHRha2UgZWZmZWN0IGluIHRoZSBuZXh0Ci0JICogYW1nZXR0dXBsZSBjYWxsLCBpbiBpbmRl eF9nZXRuZXh0X3RpZCkuICBXZSBkbyBub3QgZG8gdGhpcyB3aGVuIGluCi0JICogcmVjb3Zlcnkg YmVjYXVzZSBpdCBtYXkgdmlvbGF0ZSBNVkNDIHRvIGRvIHNvLiAgU2VlIGNvbW1lbnRzIGluCi0J ICogUmVsYXRpb25HZXRJbmRleFNjYW4oKS4KLQkgKi8KLQlpZiAoIXNjYW4tPnhhY3RTdGFydGVk SW5SZWNvdmVyeSkKLQkJc2Nhbi0+a2lsbF9wcmlvcl90dXBsZSA9IGFsbF9kZWFkOwotCi0JcmV0 dXJuIGZvdW5kOwotfQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tCi0gKgkJaW5kZXhfZ2V0bmV4dF9z bG90IC0gZ2V0IHRoZSBuZXh0IHR1cGxlIGZyb20gYSBzY2FuCi0gKgotICogVGhlIHJlc3VsdCBp cyB0cnVlIGlmIGEgdHVwbGUgc2F0aXNmeWluZyB0aGUgc2NhbiBrZXlzIGFuZCB0aGUgc25hcHNo b3Qgd2FzCi0gKiBmb3VuZCwgZmFsc2Ugb3RoZXJ3aXNlLiAgVGhlIHR1cGxlIGlzIHN0b3JlZCBp biB0aGUgc3BlY2lmaWVkIHNsb3QuCi0gKgotICogT24gc3VjY2VzcywgcmVzb3VyY2VzIChsaWtl IGJ1ZmZlciBwaW5zKSBhcmUgbGlrZWx5IHRvIGJlIGhlbGQsIGFuZCB3aWxsIGJlCi0gKiBkcm9w cGVkIGJ5IGEgZnV0dXJlIGluZGV4X2dldG5leHRfdGlkLCBpbmRleF9mZXRjaF9oZWFwIG9yIGlu ZGV4X2VuZHNjYW4KLSAqIGNhbGwpLgotICoKLSAqIE5vdGU6IGNhbGxlciBtdXN0IGNoZWNrIHNj YW4tPnhzX3JlY2hlY2ssIGFuZCBwZXJmb3JtIHJlY2hlY2tpbmcgb2YgdGhlCi0gKiBzY2FuIGtl eXMgaWYgcmVxdWlyZWQuICBXZSBkbyBub3QgZG8gdGhhdCBoZXJlIGJlY2F1c2Ugd2UgZG9uJ3Qg aGF2ZQotICogZW5vdWdoIGluZm9ybWF0aW9uIHRvIGRvIGl0IGVmZmljaWVudGx5IGluIHRoZSBn ZW5lcmFsIGNhc2UuCi0gKiAtLS0tLS0tLS0tLS0tLS0tCi0gKi8KLWJvb2wKLWluZGV4X2dldG5l eHRfc2xvdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLCBUdXBs ZVRhYmxlU2xvdCAqc2xvdCkKLXsKLQlmb3IgKDs7KQotCXsKLQkJaWYgKCFzY2FuLT54c19oZWFw X2NvbnRpbnVlKQotCQl7Ci0JCQlJdGVtUG9pbnRlciB0aWQ7Ci0KLQkJCS8qIFRpbWUgdG8gZmV0 Y2ggdGhlIG5leHQgVElEIGZyb20gdGhlIGluZGV4ICovCi0JCQl0aWQgPSBpbmRleF9nZXRuZXh0 X3RpZChzY2FuLCBkaXJlY3Rpb24pOwotCi0JCQkvKiBJZiB3ZSdyZSBvdXQgb2YgaW5kZXggZW50 cmllcywgd2UncmUgZG9uZSAqLwotCQkJaWYgKHRpZCA9PSBOVUxMKQotCQkJCWJyZWFrOwotCi0J CQlBc3NlcnQoSXRlbVBvaW50ZXJFcXVhbHModGlkLCAmc2Nhbi0+eHNfaGVhcHRpZCkpOwotCQl9 Ci0KLQkJLyoKLQkJICogRmV0Y2ggdGhlIG5leHQgKG9yIG9ubHkpIHZpc2libGUgaGVhcCB0dXBs ZSBmb3IgdGhpcyBpbmRleCBlbnRyeS4KLQkJICogSWYgd2UgZG9uJ3QgZmluZCBhbnl0aGluZywg bG9vcCBhcm91bmQgYW5kIGdyYWIgdGhlIG5leHQgVElEIGZyb20KLQkJICogdGhlIGluZGV4Lgot CQkgKi8KLQkJQXNzZXJ0KEl0ZW1Qb2ludGVySXNWYWxpZCgmc2Nhbi0+eHNfaGVhcHRpZCkpOwot CQlpZiAoaW5kZXhfZmV0Y2hfaGVhcChzY2FuLCBzbG90KSkKLQkJCXJldHVybiB0cnVlOwotCX0K LQotCXJldHVybiBmYWxzZTsKLX0KLQogLyogLS0tLS0tLS0tLS0tLS0tLQogICoJCWluZGV4X2dl dGJpdG1hcCAtIGdldCBhbGwgdHVwbGVzIGF0IG9uY2UgZnJvbSBhbiBpbmRleCBzY2FuCiAgKgpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRpbnNlcnQuYyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0aW5zZXJ0LmMKaW5kZXggYzhhZjk3ZGQyLi5mMWI1NWZi MjAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0aW5zZXJ0LmMKKysr IGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRpbnNlcnQuYwpAQCAtNTYwLDkgKzU2MCw5 IEBAIF9idF9jaGVja191bmlxdWUoUmVsYXRpb24gcmVsLCBCVEluc2VydFN0YXRlIGluc2VydHN0 YXRlLCBSZWxhdGlvbiBoZWFwUmVsLAogCQkJCSAqIHdpdGggb3B0aW1pemF0aW9ucyBsaWtlIGhl YXAncyBIT1QsIHdlIGhhdmUganVzdCBhIHNpbmdsZQogCQkJCSAqIGluZGV4IGVudHJ5IGZvciB0 aGUgZW50aXJlIGNoYWluLgogCQkJCSAqLwotCQkJCWVsc2UgaWYgKHRhYmxlX2luZGV4X2ZldGNo X3R1cGxlX2NoZWNrKGhlYXBSZWwsICZodGlkLAotCQkJCQkJCQkJCQkJCSAgICZTbmFwc2hvdERp cnR5LAotCQkJCQkJCQkJCQkJCSAgICZhbGxfZGVhZCkpCisJCQkJZWxzZSBpZiAodGFibGVfZmV0 Y2hfdGlkX2NoZWNrKGhlYXBSZWwsICZodGlkLAorCQkJCQkJCQkJCQkgICAmU25hcHNob3REaXJ0 eSwKKwkJCQkJCQkJCQkJICAgJmFsbF9kZWFkKSkKIAkJCQl7CiAJCQkJCVRyYW5zYWN0aW9uSWQg eHdhaXQ7CiAKQEAgLTYxOCw4ICs2MTgsOCBAQCBfYnRfY2hlY2tfdW5pcXVlKFJlbGF0aW9uIHJl bCwgQlRJbnNlcnRTdGF0ZSBpbnNlcnRzdGF0ZSwgUmVsYXRpb24gaGVhcFJlbCwKIAkJCQkJICog ZW50cnkuCiAJCQkJCSAqLwogCQkJCQlodGlkID0gaXR1cC0+dF90aWQ7Ci0JCQkJCWlmICh0YWJs ZV9pbmRleF9mZXRjaF90dXBsZV9jaGVjayhoZWFwUmVsLCAmaHRpZCwKLQkJCQkJCQkJCQkJCQkg IFNuYXBzaG90U2VsZiwgTlVMTCkpCisJCQkJCWlmICh0YWJsZV9mZXRjaF90aWRfY2hlY2soaGVh cFJlbCwgJmh0aWQsCisJCQkJCQkJCQkJCSAgU25hcHNob3RTZWxmLCBOVUxMKSkKIAkJCQkJewog CQkJCQkJLyogTm9ybWFsIGNhc2UgLS0tIGl0J3Mgc3RpbGwgbGl2ZSAqLwogCQkJCQl9CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbS5jIGIvc3JjL2JhY2tlbmQv YWNjZXNzL3RhYmxlL3RhYmxlYW0uYwppbmRleCA2OGZmMDk2NmYuLjBhYzlmMDE0MyAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW0uYworKysgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvdGFibGUvdGFibGVhbS5jCkBAIC0yMjgsMzIgKzIyOCwyMCBAQCB0YWJsZV9iZWdp bnNjYW5fcGFyYWxsZWxfdGlkcmFuZ2UoUmVsYXRpb24gcmVsYXRpb24sCiAgKi8KIAogLyoKLSAq IFRvIHBlcmZvcm0gdGhhdCBjaGVjayBzaW1wbHkgc3RhcnQgYW4gaW5kZXggc2NhbiwgY3JlYXRl IHRoZSBuZWNlc3NhcnkKLSAqIHNsb3QsIGRvIHRoZSBoZWFwIGxvb2t1cCwgYW5kIHNodXQgZXZl cnl0aGluZyBkb3duIGFnYWluLiBUaGlzIGNvdWxkIGJlCi0gKiBvcHRpbWl6ZWQsIGJ1dCBpcyB1 bmxpa2VseSB0byBtYXR0ZXIgZnJvbSBhIHBlcmZvcm1hbmNlIFBPVi4gSWYgdGhlcmUKLSAqIGZy ZXF1ZW50bHkgYXJlIGxpdmUgaW5kZXggcG9pbnRlcnMgYWxzbyBtYXRjaGluZyBhIHVuaXF1ZSBp bmRleCBrZXksIHRoZQotICogQ1BVIG92ZXJoZWFkIG9mIHRoaXMgcm91dGluZSBpcyB1bmxpa2Vs eSB0byBtYXR0ZXIuCi0gKgotICogTm90ZSB0aGF0ICp0aWQgbWF5IGJlIG1vZGlmaWVkIHdoZW4g d2UgcmV0dXJuIHRydWUgaWYgdGhlIEFNIHN1cHBvcnRzCi0gKiBzdG9yaW5nIG11bHRpcGxlIHJv dyB2ZXJzaW9ucyByZWFjaGFibGUgdmlhIGEgc2luZ2xlIGluZGV4IGVudHJ5IChsaWtlCi0gKiBo ZWFwJ3MgSE9UKS4KKyAqIENhbGxlciBzaG91bGQgbm90ZSB0aGUgdGFibGVfZmV0Y2hfdGlkIHdh cm5pbmcgYWJvdXQgKnRpZCBiZWluZyBtb2RpZmllZAorICogd2hlbiB3ZSByZXR1cm4gdHJ1ZSBp biBzb21lIGNhc2VzCiAgKi8KIGJvb2wKLXRhYmxlX2luZGV4X2ZldGNoX3R1cGxlX2NoZWNrKFJl bGF0aW9uIHJlbCwKLQkJCQkJCQkgIEl0ZW1Qb2ludGVyIHRpZCwKLQkJCQkJCQkgIFNuYXBzaG90 IHNuYXBzaG90LAotCQkJCQkJCSAgYm9vbCAqYWxsX2RlYWQpCit0YWJsZV9mZXRjaF90aWRfY2hl Y2soUmVsYXRpb24gcmVsLAorCQkJCQkgIEl0ZW1Qb2ludGVyIHRpZCwKKwkJCQkJICBTbmFwc2hv dCBzbmFwc2hvdCwKKwkJCQkJICBib29sICphbGxfZGVhZCkKIHsKLQlJbmRleEZldGNoVGFibGVE YXRhICpzY2FuOwogCVR1cGxlVGFibGVTbG90ICpzbG90OwotCWJvb2wJCWNhbGxfYWdhaW4gPSBm YWxzZTsKIAlib29sCQlmb3VuZDsKIAogCXNsb3QgPSB0YWJsZV9zbG90X2NyZWF0ZShyZWwsIE5V TEwpOwotCXNjYW4gPSB0YWJsZV9pbmRleF9mZXRjaF9iZWdpbihyZWwsIFNPX05PTkUpOwotCWZv dW5kID0gdGFibGVfaW5kZXhfZmV0Y2hfdHVwbGUoc2NhbiwgdGlkLCBzbmFwc2hvdCwgc2xvdCwg JmNhbGxfYWdhaW4sCi0JCQkJCQkJCQlhbGxfZGVhZCk7Ci0JdGFibGVfaW5kZXhfZmV0Y2hfZW5k KHNjYW4pOworCWZvdW5kID0gdGFibGVfZmV0Y2hfdGlkKHJlbCwgdGlkLCBzbmFwc2hvdCwgc2xv dCwgYWxsX2RlYWQpOwogCUV4ZWNEcm9wU2luZ2xlVHVwbGVUYWJsZVNsb3Qoc2xvdCk7CiAKIAly ZXR1cm4gZm91bmQ7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVh bWFwaS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW1hcGkuYwppbmRleCA1NDUw YTI3ZmEuLjcyZDJjNjYyYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3Rh YmxlYW1hcGkuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbWFwaS5jCkBA IC01MCwxMSArNTAsMTEgQEAgR2V0VGFibGVBbVJvdXRpbmUoT2lkIGFtaGFuZGxlcikKIAlBc3Nl cnQocm91dGluZS0+cGFyYWxsZWxzY2FuX2luaXRpYWxpemUgIT0gTlVMTCk7CiAJQXNzZXJ0KHJv dXRpbmUtPnBhcmFsbGVsc2Nhbl9yZWluaXRpYWxpemUgIT0gTlVMTCk7CiAKLQlBc3NlcnQocm91 dGluZS0+aW5kZXhfZmV0Y2hfYmVnaW4gIT0gTlVMTCk7Ci0JQXNzZXJ0KHJvdXRpbmUtPmluZGV4 X2ZldGNoX3Jlc2V0ICE9IE5VTEwpOwotCUFzc2VydChyb3V0aW5lLT5pbmRleF9mZXRjaF9lbmQg IT0gTlVMTCk7Ci0JQXNzZXJ0KHJvdXRpbmUtPmluZGV4X2ZldGNoX3R1cGxlICE9IE5VTEwpOwor CUFzc2VydChyb3V0aW5lLT5pbmRleF9zY2FuX2JlZ2luICE9IE5VTEwpOworCUFzc2VydChyb3V0 aW5lLT5pbmRleF9zY2FuX3Jlc2V0ICE9IE5VTEwpOworCUFzc2VydChyb3V0aW5lLT5pbmRleF9z Y2FuX2VuZCAhPSBOVUxMKTsKIAorCUFzc2VydChyb3V0aW5lLT5mZXRjaF90aWQgIT0gTlVMTCk7 CiAJQXNzZXJ0KHJvdXRpbmUtPnR1cGxlX2ZldGNoX3Jvd192ZXJzaW9uICE9IE5VTEwpOwogCUFz c2VydChyb3V0aW5lLT50dXBsZV90aWRfdmFsaWQgIT0gTlVMTCk7CiAJQXNzZXJ0KHJvdXRpbmUt PnR1cGxlX2dldF9sYXRlc3RfdGlkICE9IE5VTEwpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv Y29tbWFuZHMvY29uc3RyYWludC5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29uc3RyYWludC5j CmluZGV4IDQyMWQ4YzM1OS4uN2FmZjQ4MTI0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21t YW5kcy9jb25zdHJhaW50LmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29uc3RyYWludC5j CkBAIC0xMDUsMjMgKzEwNSwxNCBAQCB1bmlxdWVfa2V5X3JlY2hlY2soUEdfRlVOQ1RJT05fQVJH UykKIAkgKiByZW1vdmVkLgogCSAqLwogCXRtcHRpZCA9IGNoZWNrdGlkOworCWlmICghdGFibGVf ZmV0Y2hfdGlkKHRyaWdkYXRhLT50Z19yZWxhdGlvbiwgJnRtcHRpZCwgU25hcHNob3RTZWxmLAor CQkJCQkJIHNsb3QsIE5VTEwpKQogCXsKLQkJSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbiA9IHRh YmxlX2luZGV4X2ZldGNoX2JlZ2luKHRyaWdkYXRhLT50Z19yZWxhdGlvbiwKLQkJCQkJCQkJCQkJ CQkJCVNPX05PTkUpOwotCQlib29sCQljYWxsX2FnYWluID0gZmFsc2U7Ci0KLQkJaWYgKCF0YWJs ZV9pbmRleF9mZXRjaF90dXBsZShzY2FuLCAmdG1wdGlkLCBTbmFwc2hvdFNlbGYsIHNsb3QsCi0J CQkJCQkJCQkgJmNhbGxfYWdhaW4sIE5VTEwpKQotCQl7Ci0JCQkvKgotCQkJICogQWxsIHJvd3Mg cmVmZXJlbmNlZCBieSB0aGUgaW5kZXggZW50cnkgYXJlIGRlYWQsIHNvIHNraXAgdGhlCi0JCQkg KiBjaGVjay4KLQkJCSAqLwotCQkJRXhlY0Ryb3BTaW5nbGVUdXBsZVRhYmxlU2xvdChzbG90KTsK LQkJCXRhYmxlX2luZGV4X2ZldGNoX2VuZChzY2FuKTsKLQkJCXJldHVybiBQb2ludGVyR2V0RGF0 dW0oTlVMTCk7Ci0JCX0KLQkJdGFibGVfaW5kZXhfZmV0Y2hfZW5kKHNjYW4pOworCQkvKgorCQkg KiBBbGwgcm93cyByZWZlcmVuY2VkIGJ5IHRoZSBpbmRleCBlbnRyeSBhcmUgZGVhZCwgc28gc2tp cCB0aGUgY2hlY2sKKwkJICovCisJCUV4ZWNEcm9wU2luZ2xlVHVwbGVUYWJsZVNsb3Qoc2xvdCk7 CisJCXJldHVybiBQb2ludGVyR2V0RGF0dW0oTlVMTCk7CiAJfQogCiAJLyoKQEAgLTE2OCw5ICsx NTksOCBAQCB1bmlxdWVfa2V5X3JlY2hlY2soUEdfRlVOQ1RJT05fQVJHUykKIAkJLyoKIAkJICog Tm90ZTogdGhpcyBpcyBub3QgYSByZWFsIGluc2VydDsgaXQgaXMgYSBjaGVjayB0aGF0IHRoZSBp bmRleCBlbnRyeQogCQkgKiB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gaW5zZXJ0ZWQgaXMgdW5pcXVl LiAgUGFzc2luZyB0aGUgdHVwbGUncyB0aWQKLQkJICogKGkuZS4gdW5tb2RpZmllZCBieSB0YWJs ZV9pbmRleF9mZXRjaF90dXBsZSgpKSBpcyBjb3JyZWN0IGV2ZW4gaWYKLQkJICogdGhlIHJvdyBp cyBub3cgZGVhZCwgYmVjYXVzZSB0aGF0IGlzIHRoZSBUSUQgdGhlIGluZGV4IHdpbGwga25vdwot CQkgKiBhYm91dC4KKwkJICogKGkuZS4gdW5tb2RpZmllZCBieSB0YWJsZV9mZXRjaF90aWQoKSkg aXMgY29ycmVjdCBldmVuIGlmIHRoZSByb3cKKwkJICogaXMgbm93IGRlYWQsIGJlY2F1c2UgdGhh dCBpcyB0aGUgVElEIHRoZSBpbmRleCB3aWxsIGtub3cgYWJvdXQuCiAJCSAqLwogCQlpbmRleF9p bnNlcnQoaW5kZXhSZWwsIHZhbHVlcywgaXNudWxsLCAmY2hlY2t0aWQsCiAJCQkJCSB0cmlnZGF0 YS0+dGdfcmVsYXRpb24sIFVOSVFVRV9DSEVDS19FWElTVElORywKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4u YwppbmRleCAxMTJjMTdiMGQuLmViZTg1MjUwMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29t bWFuZHMvZXhwbGFpbi5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYwpAQCAt MTM3LDcgKzEzNyw3IEBAIHN0YXRpYyB2b2lkIHNob3dfcmVjdXJzaXZlX3VuaW9uX2luZm8oUmVj dXJzaXZlVW5pb25TdGF0ZSAqcnN0YXRlLAogc3RhdGljIHZvaWQgc2hvd19tZW1vaXplX2luZm8o TWVtb2l6ZVN0YXRlICptc3RhdGUsIExpc3QgKmFuY2VzdG9ycywKIAkJCQkJCQkgIEV4cGxhaW5T dGF0ZSAqZXMpOwogc3RhdGljIHZvaWQgc2hvd19oYXNoYWdnX2luZm8oQWdnU3RhdGUgKmFnZ3N0 YXRlLCBFeHBsYWluU3RhdGUgKmVzKTsKLXN0YXRpYyB2b2lkIHNob3dfaW5kZXhzZWFyY2hlc19p bmZvKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBFeHBsYWluU3RhdGUgKmVzKTsKK3N0YXRpYyB2b2lk IHNob3dfaW5kZXhzY2FuX2luZm8oUGxhblN0YXRlICpwbGFuc3RhdGUsIEV4cGxhaW5TdGF0ZSAq ZXMpOwogc3RhdGljIHZvaWQgc2hvd190aWRiaXRtYXBfaW5mbyhCaXRtYXBIZWFwU2NhblN0YXRl ICpwbGFuc3RhdGUsCiAJCQkJCQkJCUV4cGxhaW5TdGF0ZSAqZXMpOwogc3RhdGljIHZvaWQgc2hv d19zY2FuX2lvX3VzYWdlKFNjYW5TdGF0ZSAqcGxhbnN0YXRlLApAQCAtMTk3OCw3ICsxOTc4LDcg QEAgRXhwbGFpbk5vZGUoUGxhblN0YXRlICpwbGFuc3RhdGUsIExpc3QgKmFuY2VzdG9ycywKIAkJ CWlmIChwbGFuLT5xdWFsKQogCQkJCXNob3dfaW5zdHJ1bWVudGF0aW9uX2NvdW50KCJSb3dzIFJl bW92ZWQgYnkgRmlsdGVyIiwgMSwKIAkJCQkJCQkJCQkgICBwbGFuc3RhdGUsIGVzKTsKLQkJCXNo b3dfaW5kZXhzZWFyY2hlc19pbmZvKHBsYW5zdGF0ZSwgZXMpOworCQkJc2hvd19pbmRleHNjYW5f aW5mbyhwbGFuc3RhdGUsIGVzKTsKIAkJCWJyZWFrOwogCQljYXNlIFRfSW5kZXhPbmx5U2NhbjoK IAkJCXNob3dfc2Nhbl9xdWFsKCgoSW5kZXhPbmx5U2NhbiAqKSBwbGFuKS0+aW5kZXhxdWFsLApA QCAtMTk5MiwxNSArMTk5MiwxMiBAQCBFeHBsYWluTm9kZShQbGFuU3RhdGUgKnBsYW5zdGF0ZSwg TGlzdCAqYW5jZXN0b3JzLAogCQkJaWYgKHBsYW4tPnF1YWwpCiAJCQkJc2hvd19pbnN0cnVtZW50 YXRpb25fY291bnQoIlJvd3MgUmVtb3ZlZCBieSBGaWx0ZXIiLCAxLAogCQkJCQkJCQkJCSAgIHBs YW5zdGF0ZSwgZXMpOwotCQkJaWYgKGVzLT5hbmFseXplKQotCQkJCUV4cGxhaW5Qcm9wZXJ0eUZs b2F0KCJIZWFwIEZldGNoZXMiLCBOVUxMLAotCQkJCQkJCQkJIHBsYW5zdGF0ZS0+aW5zdHJ1bWVu dC0+bnR1cGxlczIsIDAsIGVzKTsKLQkJCXNob3dfaW5kZXhzZWFyY2hlc19pbmZvKHBsYW5zdGF0 ZSwgZXMpOworCQkJc2hvd19pbmRleHNjYW5faW5mbyhwbGFuc3RhdGUsIGVzKTsKIAkJCWJyZWFr OwogCQljYXNlIFRfQml0bWFwSW5kZXhTY2FuOgogCQkJc2hvd19zY2FuX3F1YWwoKChCaXRtYXBJ bmRleFNjYW4gKikgcGxhbiktPmluZGV4cXVhbG9yaWcsCiAJCQkJCQkgICAiSW5kZXggQ29uZCIs IHBsYW5zdGF0ZSwgYW5jZXN0b3JzLCBlcyk7Ci0JCQlzaG93X2luZGV4c2VhcmNoZXNfaW5mbyhw bGFuc3RhdGUsIGVzKTsKKwkJCXNob3dfaW5kZXhzY2FuX2luZm8ocGxhbnN0YXRlLCBlcyk7CiAJ CQlicmVhazsKIAkJY2FzZSBUX0JpdG1hcEhlYXBTY2FuOgogCQkJc2hvd19zY2FuX3F1YWwoKChC aXRtYXBIZWFwU2NhbiAqKSBwbGFuKS0+Yml0bWFwcXVhbG9yaWcsCkBAIC0zODY3LDE1ICszODY0 LDE2IEBAIHNob3dfaGFzaGFnZ19pbmZvKEFnZ1N0YXRlICphZ2dzdGF0ZSwgRXhwbGFpblN0YXRl ICplcykKIH0KIAogLyoKLSAqIFNob3cgdGhlIHRvdGFsIG51bWJlciBvZiBpbmRleCBzZWFyY2hl cyBmb3IgYQorICogU2hvdyBpbmRleCBzY2FuIHJlbGF0ZWQgZXhlY3V0b3IgaW5zdHJ1bWVudGF0 aW9uIGZvciBhCiAgKiBJbmRleFNjYW4vSW5kZXhPbmx5U2Nhbi9CaXRtYXBJbmRleFNjYW4gbm9k ZQogICovCiBzdGF0aWMgdm9pZAotc2hvd19pbmRleHNlYXJjaGVzX2luZm8oUGxhblN0YXRlICpw bGFuc3RhdGUsIEV4cGxhaW5TdGF0ZSAqZXMpCitzaG93X2luZGV4c2Nhbl9pbmZvKFBsYW5TdGF0 ZSAqcGxhbnN0YXRlLCBFeHBsYWluU3RhdGUgKmVzKQogewogCVBsYW4JICAgKnBsYW4gPSBwbGFu c3RhdGUtPnBsYW47CiAJU2hhcmVkSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uICpTaGFyZWRJbmZv ID0gTlVMTDsKLQl1aW50NjQJCW5zZWFyY2hlcyA9IDA7CisJdWludDY0CQluc2VhcmNoZXMgPSAw LAorCQkJCW50YWJsZXR1cGxlZmV0Y2hlcyA9IDA7CiAKIAlpZiAoIWVzLT5hbmFseXplKQogCQly ZXR1cm47CkBAIC0zODk2LDYgKzM4OTQsNyBAQCBzaG93X2luZGV4c2VhcmNoZXNfaW5mbyhQbGFu U3RhdGUgKnBsYW5zdGF0ZSwgRXhwbGFpblN0YXRlICplcykKIAkJCQlJbmRleE9ubHlTY2FuU3Rh dGUgKmluZGV4c3RhdGUgPSAoKEluZGV4T25seVNjYW5TdGF0ZSAqKSBwbGFuc3RhdGUpOwogCiAJ CQkJbnNlYXJjaGVzID0gaW5kZXhzdGF0ZS0+aW9zc19JbnN0cnVtZW50LT5uc2VhcmNoZXM7CisJ CQkJbnRhYmxldHVwbGVmZXRjaGVzID0gaW5kZXhzdGF0ZS0+aW9zc19JbnN0cnVtZW50LT5udGFi bGV0dXBsZWZldGNoZXM7CiAJCQkJU2hhcmVkSW5mbyA9IGluZGV4c3RhdGUtPmlvc3NfU2hhcmVk SW5mbzsKIAkJCQlicmVhazsKIAkJCX0KQEAgLTM5MTksOSArMzkxOCwxMyBAQCBzaG93X2luZGV4 c2VhcmNoZXNfaW5mbyhQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgRXhwbGFpblN0YXRlICplcykKIAkJ CUluZGV4U2Nhbkluc3RydW1lbnRhdGlvbiAqd2luc3RydW1lbnQgPSAmU2hhcmVkSW5mby0+d2lu c3RydW1lbnRbaV07CiAKIAkJCW5zZWFyY2hlcyArPSB3aW5zdHJ1bWVudC0+bnNlYXJjaGVzOwor CQkJbnRhYmxldHVwbGVmZXRjaGVzICs9IHdpbnN0cnVtZW50LT5udGFibGV0dXBsZWZldGNoZXM7 CiAJCX0KIAl9CiAKKwlpZiAobm9kZVRhZyhwbGFuKSA9PSBUX0luZGV4T25seVNjYW4pCisJCUV4 cGxhaW5Qcm9wZXJ0eVVJbnRlZ2VyKCJIZWFwIEZldGNoZXMiLCBOVUxMLCBudGFibGV0dXBsZWZl dGNoZXMsIGVzKTsKKwogCUV4cGxhaW5Qcm9wZXJ0eVVJbnRlZ2VyKCJJbmRleCBTZWFyY2hlcyIs IE5VTEwsIG5zZWFyY2hlcywgZXMpOwogfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21t YW5kcy9yZXBhY2suYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3JlcGFjay5jCmluZGV4IGVjMTAw ZTNlZS4uNWRmZjRjOGZkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9yZXBhY2su YworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9yZXBhY2suYwpAQCAtMjg1OSw2ICsyODU5LDcg QEAgZmluZF90YXJnZXRfdHVwbGUoUmVsYXRpb24gcmVsLCBDaGFuZ2VDb250ZXh0ICpjaGdjeHQs IFR1cGxlVGFibGVTbG90ICpsb2NhdG9yLAogCUZvcm1fcGdfaW5kZXggaWR4ID0gY2hnY3h0LT5j Y19pZGVudF9pbmRleC0+cmRfaW5kZXg7CiAJSW5kZXhTY2FuRGVzYyBzY2FuOwogCWJvb2wJCXJl dHZhbCA9IGZhbHNlOworCWJvb2wJCXJlY2hlY2s7CiAKIAkvKgogCSAqIFNjYW4ga2V5IGlzIHBh c3NlZCBieSBjYWxsZXIsIHNvIGl0IGRvZXMgbm90IGhhdmUgdG8gYmUgY29uc3RydWN0ZWQKQEAg LTI4NzcsMTMgKzI4NzgsMTMgQEAgZmluZF90YXJnZXRfdHVwbGUoUmVsYXRpb24gcmVsLCBDaGFu Z2VDb250ZXh0ICpjaGdjeHQsIFR1cGxlVGFibGVTbG90ICpsb2NhdG9yLAogCX0KIAogCS8qIFhY WCBubyBpbnN0cnVtZW50YXRpb24gZm9yIG5vdyAqLwotCXNjYW4gPSBpbmRleF9iZWdpbnNjYW4o cmVsLCBjaGdjeHQtPmNjX2lkZW50X2luZGV4LCBHZXRBY3RpdmVTbmFwc2hvdCgpLAorCXNjYW4g PSBpbmRleF9iZWdpbnNjYW4ocmVsLCBjaGdjeHQtPmNjX2lkZW50X2luZGV4LCBmYWxzZSwgR2V0 QWN0aXZlU25hcHNob3QoKSwKIAkJCQkJCSAgIE5VTEwsIGNoZ2N4dC0+Y2NfaWRlbnRfa2V5X25l bnRyaWVzLCAwLCAwKTsKIAlpbmRleF9yZXNjYW4oc2NhbiwgY2hnY3h0LT5jY19pZGVudF9rZXks IGNoZ2N4dC0+Y2NfaWRlbnRfa2V5X25lbnRyaWVzLCBOVUxMLCAwKTsKLQl3aGlsZSAoaW5kZXhf Z2V0bmV4dF9zbG90KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLCByZXRyaWV2ZWQpKQorCXdo aWxlICh0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Qoc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24s IHJldHJpZXZlZCwgJnJlY2hlY2spKQogCXsKIAkJLyogQmUgd2FyeSBvZiB0ZW1wb3JhbCBjb25z dHJhaW50cyAqLwotCQlpZiAoc2Nhbi0+eHNfcmVjaGVjayAmJiAhaWRlbnRpdHlfa2V5X2VxdWFs KGNoZ2N4dCwgbG9jYXRvciwgcmV0cmlldmVkKSkKKwkJaWYgKHJlY2hlY2sgJiYgIWlkZW50aXR5 X2tleV9lcXVhbChjaGdjeHQsIGxvY2F0b3IsIHJldHJpZXZlZCkpCiAJCXsKIAkJCUNIRUNLX0ZP Ul9JTlRFUlJVUFRTKCk7CiAJCQljb250aW51ZTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL2V4ZWNJbmRleGluZy5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4aW5n LmMKaW5kZXggZWIzODM4MTI5Li43NzkxYzRlNWYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL2V4ZWNJbmRleGluZy5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRl eGluZy5jCkBAIC03MjEsNiArNzIxLDcgQEAgY2hlY2tfZXhjbHVzaW9uX29yX3VuaXF1ZV9jb25z dHJhaW50KFJlbGF0aW9uIGhlYXAsIFJlbGF0aW9uIGluZGV4LAogCWludAkJCWk7CiAJYm9vbAkJ Y29uZmxpY3Q7CiAJYm9vbAkJZm91bmRfc2VsZjsKKwlib29sCQlyZWNoZWNrOwogCUV4cHJDb250 ZXh0ICplY29udGV4dDsKIAlUdXBsZVRhYmxlU2xvdCAqZXhpc3Rpbmdfc2xvdDsKIAlUdXBsZVRh YmxlU2xvdCAqc2F2ZV9zY2FudHVwbGU7CkBAIC04MjMsMTIgKzgyNCwxMyBAQCBjaGVja19leGNs dXNpb25fb3JfdW5pcXVlX2NvbnN0cmFpbnQoUmVsYXRpb24gaGVhcCwgUmVsYXRpb24gaW5kZXgs CiByZXRyeToKIAljb25mbGljdCA9IGZhbHNlOwogCWZvdW5kX3NlbGYgPSBmYWxzZTsKLQlpbmRl eF9zY2FuID0gaW5kZXhfYmVnaW5zY2FuKGhlYXAsIGluZGV4LAorCWluZGV4X3NjYW4gPSBpbmRl eF9iZWdpbnNjYW4oaGVhcCwgaW5kZXgsIGZhbHNlLAogCQkJCQkJCQkgJkRpcnR5U25hcHNob3Qs IE5VTEwsIGluZG5rZXlhdHRzLCAwLAogCQkJCQkJCQkgU09fTk9ORSk7CiAJaW5kZXhfcmVzY2Fu KGluZGV4X3NjYW4sIHNjYW5rZXlzLCBpbmRua2V5YXR0cywgTlVMTCwgMCk7CiAKLQl3aGlsZSAo aW5kZXhfZ2V0bmV4dF9zbG90KGluZGV4X3NjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBleGlz dGluZ19zbG90KSkKKwl3aGlsZSAodGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90KGluZGV4X3NjYW4s IEZvcndhcmRTY2FuRGlyZWN0aW9uLAorCQkJCQkJCQkJZXhpc3Rpbmdfc2xvdCwgJnJlY2hlY2sp KQogCXsKIAkJVHJhbnNhY3Rpb25JZCB4d2FpdDsKIAkJWExUV19PcGVyCXJlYXNvbl93YWl0OwpA QCAtODU4LDcgKzg2MCw3IEBAIHJldHJ5OgogCQkJCQkgICBleGlzdGluZ192YWx1ZXMsIGV4aXN0 aW5nX2lzbnVsbCk7CiAKIAkJLyogSWYgbG9zc3kgaW5kZXhzY2FuLCBtdXN0IHJlY2hlY2sgdGhl IGNvbmRpdGlvbiAqLwotCQlpZiAoaW5kZXhfc2Nhbi0+eHNfcmVjaGVjaykKKwkJaWYgKHJlY2hl Y2spCiAJCXsKIAkJCWlmICghaW5kZXhfcmVjaGVja19jb25zdHJhaW50KGluZGV4LAogCQkJCQkJ CQkJCSAgY29uc3RyX3Byb2NzLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhl Y1JlcGxpY2F0aW9uLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUmVwbGljYXRpb24uYwpp bmRleCBiMmNhNWNiZjEuLjc1ZGI1ZjM2MyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0 b3IvZXhlY1JlcGxpY2F0aW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1JlcGxp Y2F0aW9uLmMKQEAgLTE5MSw2ICsxOTEsNyBAQCBSZWxhdGlvbkZpbmRSZXBsVHVwbGVCeUluZGV4 KFJlbGF0aW9uIHJlbCwgT2lkIGlkeG9pZCwKIAlUcmFuc2FjdGlvbklkIHh3YWl0OwogCVJlbGF0 aW9uCWlkeHJlbDsKIAlib29sCQlmb3VuZDsKKwlib29sCQlyZWNoZWNrOwogCVR5cGVDYWNoZUVu dHJ5ICoqZXEgPSBOVUxMOwogCWJvb2wJCWlzSWR4U2FmZVRvU2tpcER1cGxpY2F0ZXM7CiAKQEAg LTIwNSw3ICsyMDYsNyBAQCBSZWxhdGlvbkZpbmRSZXBsVHVwbGVCeUluZGV4KFJlbGF0aW9uIHJl bCwgT2lkIGlkeG9pZCwKIAlza2V5X2F0dG9mZiA9IGJ1aWxkX3JlcGxpbmRleF9zY2FuX2tleShz a2V5LCByZWwsIGlkeHJlbCwgc2VhcmNoc2xvdCk7CiAKIAkvKiBTdGFydCBhbiBpbmRleCBzY2Fu LiAqLwotCXNjYW4gPSBpbmRleF9iZWdpbnNjYW4ocmVsLCBpZHhyZWwsCisJc2NhbiA9IGluZGV4 X2JlZ2luc2NhbihyZWwsIGlkeHJlbCwgZmFsc2UsCiAJCQkJCQkgICAmc25hcCwgTlVMTCwgc2tl eV9hdHRvZmYsIDAsIFNPX05PTkUpOwogCiByZXRyeToKQEAgLTIxNCw3ICsyMTUsNyBAQCByZXRy eToKIAlpbmRleF9yZXNjYW4oc2Nhbiwgc2tleSwgc2tleV9hdHRvZmYsIE5VTEwsIDApOwogCiAJ LyogVHJ5IHRvIGZpbmQgdGhlIHR1cGxlICovCi0Jd2hpbGUgKGluZGV4X2dldG5leHRfc2xvdChz Y2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgb3V0c2xvdCkpCisJd2hpbGUgKHRhYmxlX2luZGV4 X2dldG5leHRfc2xvdChzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgb3V0c2xvdCwgJnJlY2hl Y2spKQogCXsKIAkJLyoKIAkJICogQXZvaWQgZXhwZW5zaXZlIGVxdWFsaXR5IGNoZWNrIGlmIHRo ZSBpbmRleCBpcyBwcmltYXJ5IGtleSBvcgpAQCAtMjI4LDYgKzIyOSw4IEBAIHJldHJ5OgogCQkJ aWYgKCF0dXBsZXNfZXF1YWwob3V0c2xvdCwgc2VhcmNoc2xvdCwgZXEsIE5VTEwpKQogCQkJCWNv bnRpbnVlOwogCQl9CisJCWVsc2UKKwkJCUFzc2VydCghcmVjaGVjayk7CiAKIAkJRXhlY01hdGVy aWFsaXplU2xvdChvdXRzbG90KTsKIApAQCAtNjQ1LDYgKzY0OCw3IEBAIFJlbGF0aW9uRmluZERl bGV0ZWRUdXBsZUluZm9CeUluZGV4KFJlbGF0aW9uIHJlbCwgT2lkIGlkeG9pZCwKIAlUdXBsZVRh YmxlU2xvdCAqc2NhbnNsb3Q7CiAJVHlwZUNhY2hlRW50cnkgKiplcSA9IE5VTEw7CiAJYm9vbAkJ aXNJZHhTYWZlVG9Ta2lwRHVwbGljYXRlczsKKwlib29sCQlyZWNoZWNrOwogCVR1cGxlRGVzYwlk ZXNjIFBHX1VTRURfRk9SX0FTU0VSVFNfT05MWSA9IFJlbGF0aW9uR2V0RGVzY3IocmVsKTsKIAog CUFzc2VydChlcXVhbFR1cGxlRGVzY3MoZGVzYywgc2VhcmNoc2xvdC0+dHRzX3R1cGxlRGVzY3Jp cHRvcikpOwpAQCAtNjY5LDEzICs2NzMsMTMgQEAgUmVsYXRpb25GaW5kRGVsZXRlZFR1cGxlSW5m b0J5SW5kZXgoUmVsYXRpb24gcmVsLCBPaWQgaWR4b2lkLAogCSAqIG5vdCB5ZXQgY29tbWl0dGVk IG9yIHRob3NlIGp1c3QgY29tbWl0dGVkIHByaW9yIHRvIHRoZSBzY2FuIGFyZQogCSAqIGV4Y2x1 ZGVkIGluIHVwZGF0ZV9tb3N0X3JlY2VudF9kZWxldGlvbl9pbmZvKCkuCiAJICovCi0Jc2NhbiA9 IGluZGV4X2JlZ2luc2NhbihyZWwsIGlkeHJlbCwKKwlzY2FuID0gaW5kZXhfYmVnaW5zY2FuKHJl bCwgaWR4cmVsLCBmYWxzZSwKIAkJCQkJCSAgIFNuYXBzaG90QW55LCBOVUxMLCBza2V5X2F0dG9m ZiwgMCwgU09fTk9ORSk7CiAKIAlpbmRleF9yZXNjYW4oc2Nhbiwgc2tleSwgc2tleV9hdHRvZmYs IE5VTEwsIDApOwogCiAJLyogVHJ5IHRvIGZpbmQgdGhlIHR1cGxlICovCi0Jd2hpbGUgKGluZGV4 X2dldG5leHRfc2xvdChzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgc2NhbnNsb3QpKQorCXdo aWxlICh0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Qoc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24s IHNjYW5zbG90LCAmcmVjaGVjaykpCiAJewogCQkvKgogCQkgKiBBdm9pZCBleHBlbnNpdmUgZXF1 YWxpdHkgY2hlY2sgaWYgdGhlIGluZGV4IGlzIHByaW1hcnkga2V5IG9yCkBAIC02ODksNiArNjkz LDggQEAgUmVsYXRpb25GaW5kRGVsZXRlZFR1cGxlSW5mb0J5SW5kZXgoUmVsYXRpb24gcmVsLCBP aWQgaWR4b2lkLAogCQkJaWYgKCF0dXBsZXNfZXF1YWwoc2NhbnNsb3QsIHNlYXJjaHNsb3QsIGVx LCBOVUxMKSkKIAkJCQljb250aW51ZTsKIAkJfQorCQllbHNlCisJCQlBc3NlcnQoIXJlY2hlY2sp OwogCiAJCXVwZGF0ZV9tb3N0X3JlY2VudF9kZWxldGlvbl9pbmZvKHNjYW5zbG90LCBvbGRlc3R4 bWluLCBkZWxldGVfeGlkLAogCQkJCQkJCQkJCSBkZWxldGVfdGltZSwgZGVsZXRlX29yaWdpbik7 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQml0bWFwSW5kZXhzY2FuLmMg Yi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQml0bWFwSW5kZXhzY2FuLmMKaW5kZXggNzk3ODUx NGUxLi45MGIwMTBmOWIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVCaXRt YXBJbmRleHNjYW4uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQml0bWFwSW5kZXhz Y2FuLmMKQEAgLTIwNCw2ICsyMDQsNyBAQCBFeGVjRW5kQml0bWFwSW5kZXhTY2FuKEJpdG1hcElu ZGV4U2NhblN0YXRlICpub2RlKQogCQkgKiB3aGljaCB3aWxsIGhhdmUgYSBuZXcgQml0bWFwSW5k ZXhTY2FuU3RhdGUgYW5kIHplcm9lZCBzdGF0cy4KIAkJICovCiAJCXdpbnN0cnVtZW50LT5uc2Vh cmNoZXMgKz0gbm9kZS0+Ymlzc19JbnN0cnVtZW50LT5uc2VhcmNoZXM7CisJCUFzc2VydChub2Rl LT5iaXNzX0luc3RydW1lbnQtPm50YWJsZXR1cGxlZmV0Y2hlcyA9PSAwKTsKIAl9CiAKIAkvKgpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYyBiL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleG9ubHlzY2FuLmMKaW5kZXggZDUyMDEyZThhLi4y OGEyM2RiMGIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleG9ubHlz Y2FuLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYwpAQCAt MzQsNyArMzQsNiBAQAogI2luY2x1ZGUgImFjY2Vzcy9yZWxzY2FuLmgiCiAjaW5jbHVkZSAiYWNj ZXNzL3RhYmxlYW0uaCIKICNpbmNsdWRlICJhY2Nlc3MvdHVwZGVzYy5oIgotI2luY2x1ZGUgImFj Y2Vzcy92aXNpYmlsaXR5bWFwLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ190eXBlLmgiCiAjaW5j bHVkZSAiZXhlY3V0b3IvZXhlY3V0b3IuaCIKICNpbmNsdWRlICJleGVjdXRvci9pbnN0cnVtZW50 LmgiCkBAIC00MiwxNCArNDEsMTEgQEAKICNpbmNsdWRlICJleGVjdXRvci9ub2RlSW5kZXhzY2Fu LmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9idWZtZ3IuaCIK LSNpbmNsdWRlICJzdG9yYWdlL3ByZWRpY2F0ZS5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5z LmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsLmgiCiAKIAogc3RhdGljIFR1cGxlVGFibGVTbG90ICpJ bmRleE9ubHlOZXh0KEluZGV4T25seVNjYW5TdGF0ZSAqbm9kZSk7Ci1zdGF0aWMgdm9pZCBTdG9y ZUluZGV4VHVwbGUoSW5kZXhPbmx5U2NhblN0YXRlICpub2RlLCBUdXBsZVRhYmxlU2xvdCAqc2xv dCwKLQkJCQkJCQlJbmRleFR1cGxlIGl0dXAsIFR1cGxlRGVzYyBpdHVwZGVzYyk7CiAKIAogLyog LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQpAQCAtNjYsNyArNjIsNyBAQCBJbmRleE9ubHlOZXh0KEluZGV4T25seVNjYW5TdGF0 ZSAqbm9kZSkKIAlTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbjsKIAlJbmRleFNjYW5EZXNjIHNjYW5k ZXNjOwogCVR1cGxlVGFibGVTbG90ICpzbG90OwotCUl0ZW1Qb2ludGVyIHRpZDsKKwlib29sCQly ZWNoZWNrOwogCiAJLyoKIAkgKiBleHRyYWN0IG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiBmcm9tIGlu ZGV4IHNjYW4gbm9kZQpAQCAtOTIsNiArODgsNyBAQCBJbmRleE9ubHlOZXh0KEluZGV4T25seVNj YW5TdGF0ZSAqbm9kZSkKIAkJICovCiAJCXNjYW5kZXNjID0gaW5kZXhfYmVnaW5zY2FuKG5vZGUt PnNzLnNzX2N1cnJlbnRSZWxhdGlvbiwKIAkJCQkJCQkJICAgbm9kZS0+aW9zc19SZWxhdGlvbkRl c2MsCisJCQkJCQkJCSAgIHRydWUsCiAJCQkJCQkJCSAgIGVzdGF0ZS0+ZXNfc25hcHNob3QsCiAJ CQkJCQkJCSAgIG5vZGUtPmlvc3NfSW5zdHJ1bWVudCwKIAkJCQkJCQkJICAgbm9kZS0+aW9zc19O dW1TY2FuS2V5cywKQEAgLTEwMCwxMSArOTcsNyBAQCBJbmRleE9ubHlOZXh0KEluZGV4T25seVNj YW5TdGF0ZSAqbm9kZSkKIAkJCQkJCQkJICAgU09fSElOVF9SRUxfUkVBRF9PTkxZIDogU09fTk9O RSk7CiAKIAkJbm9kZS0+aW9zc19TY2FuRGVzYyA9IHNjYW5kZXNjOwotCi0KLQkJLyogU2V0IGl0 IHVwIGZvciBpbmRleC1vbmx5IHNjYW4gKi8KLQkJbm9kZS0+aW9zc19TY2FuRGVzYy0+eHNfd2Fu dF9pdHVwID0gdHJ1ZTsKLQkJbm9kZS0+aW9zc19WTUJ1ZmZlciA9IEludmFsaWRCdWZmZXI7CisJ CUFzc2VydChub2RlLT5pb3NzX1NjYW5EZXNjLT54c193YW50X2l0dXApOwogCiAJCS8qCiAJCSAq IElmIG5vIHJ1bi10aW1lIGtleXMgdG8gY2FsY3VsYXRlIG9yIHRoZXkgYXJlIHJlYWR5LCBnbyBh aGVhZCBhbmQKQEAgLTEyMSwxMDQgKzExNCwxNCBAQCBJbmRleE9ubHlOZXh0KEluZGV4T25seVNj YW5TdGF0ZSAqbm9kZSkKIAkvKgogCSAqIE9LLCBub3cgdGhhdCB3ZSBoYXZlIHdoYXQgd2UgbmVl ZCwgZmV0Y2ggdGhlIG5leHQgdHVwbGUuCiAJICovCi0Jd2hpbGUgKCh0aWQgPSBpbmRleF9nZXRu ZXh0X3RpZChzY2FuZGVzYywgZGlyZWN0aW9uKSkgIT0gTlVMTCkKKwl3aGlsZSAodGFibGVfaW5k ZXhfZ2V0bmV4dF9zbG90KHNjYW5kZXNjLCBkaXJlY3Rpb24sIHNsb3QsICZyZWNoZWNrKSkKIAl7 Ci0JCWJvb2wJCXR1cGxlX2Zyb21faGVhcCA9IGZhbHNlOwotCiAJCUNIRUNLX0ZPUl9JTlRFUlJV UFRTKCk7CiAKLQkJLyoKLQkJICogV2UgY2FuIHNraXAgdGhlIGhlYXAgZmV0Y2ggaWYgdGhlIFRJ RCByZWZlcmVuY2VzIGEgaGVhcCBwYWdlIG9uCi0JCSAqIHdoaWNoIGFsbCB0dXBsZXMgYXJlIGtu b3duIHZpc2libGUgdG8gZXZlcnlib2R5LiAgSW4gYW55IGNhc2UsCi0JCSAqIHdlJ2xsIHVzZSB0 aGUgaW5kZXggdHVwbGUgbm90IHRoZSBoZWFwIHR1cGxlIGFzIHRoZSBkYXRhIHNvdXJjZS4KLQkJ ICoKLQkJICogTm90ZSBvbiBNZW1vcnkgT3JkZXJpbmcgRWZmZWN0czogdmlzaWJpbGl0eW1hcF9n ZXRfc3RhdHVzIGRvZXMgbm90Ci0JCSAqIGxvY2sgdGhlIHZpc2liaWxpdHkgbWFwIGJ1ZmZlciwg YW5kIHRoZXJlZm9yZSB0aGUgcmVzdWx0IHdlIHJlYWQKLQkJICogaGVyZSBjb3VsZCBiZSBzbGln aHRseSBzdGFsZS4gIEhvd2V2ZXIsIGl0IGNhbid0IGJlIHN0YWxlIGVub3VnaCB0bwotCQkgKiBt YXR0ZXIuCi0JCSAqCi0JCSAqIFdlIG5lZWQgdG8gZGV0ZWN0IGNsZWFyaW5nIGEgVk0gYml0IGR1 ZSB0byBhbiBpbnNlcnQgcmlnaHQgYXdheSwKLQkJICogYmVjYXVzZSB0aGUgdHVwbGUgaXMgcHJl c2VudCBpbiB0aGUgaW5kZXggcGFnZSBidXQgbm90IHZpc2libGUuIFRoZQotCQkgKiByZWFkaW5n IG9mIHRoZSBUSUQgYnkgdGhpcyBzY2FuICh1c2luZyBhIHNoYXJlZCBsb2NrIG9uIHRoZSBpbmRl eAotCQkgKiBidWZmZXIpIGlzIHNlcmlhbGl6ZWQgd2l0aCB0aGUgaW5zZXJ0IG9mIHRoZSBUSUQg aW50byB0aGUgaW5kZXgKLQkJICogKHVzaW5nIGFuIGV4Y2x1c2l2ZSBsb2NrIG9uIHRoZSBpbmRl eCBidWZmZXIpLiBCZWNhdXNlIHRoZSBWTSBiaXQKLQkJICogaXMgY2xlYXJlZCBiZWZvcmUgdXBk YXRpbmcgdGhlIGluZGV4LCBhbmQgbG9ja2luZy91bmxvY2tpbmcgb2YgdGhlCi0JCSAqIGluZGV4 IHBhZ2UgYWN0cyBhcyBhIGZ1bGwgbWVtb3J5IGJhcnJpZXIsIHdlIGFyZSBzdXJlIHRvIHNlZSB0 aGUKLQkJICogY2xlYXJlZCBiaXQgaWYgd2Ugc2VlIGEgcmVjZW50bHktaW5zZXJ0ZWQgVElELgot CQkgKgotCQkgKiBEZWxldGVzIGRvIG5vdCB1cGRhdGUgdGhlIGluZGV4IHBhZ2UgKG9ubHkgVkFD VVVNIHdpbGwgY2xlYXIgb3V0Ci0JCSAqIHRoZSBUSUQpLCBzbyB0aGUgY2xlYXJpbmcgb2YgdGhl IFZNIGJpdCBieSBhIGRlbGV0ZSBpcyBub3QKLQkJICogc2VyaWFsaXplZCB3aXRoIHRoaXMgdGVz dCBiZWxvdywgYW5kIHdlIG1heSBzZWUgYSB2YWx1ZSB0aGF0IGlzCi0JCSAqIHNpZ25pZmljYW50 bHkgc3RhbGUuIEhvd2V2ZXIsIHdlIGRvbid0IGNhcmUgYWJvdXQgdGhlIGRlbGV0ZSByaWdodAot CQkgKiBhd2F5LCBiZWNhdXNlIHRoZSB0dXBsZSBpcyBzdGlsbCB2aXNpYmxlIHVudGlsIHRoZSBk ZWxldGluZwotCQkgKiB0cmFuc2FjdGlvbiBjb21taXRzIG9yIHRoZSBzdGF0ZW1lbnQgZW5kcyAo aWYgaXQncyBvdXIKLQkJICogdHJhbnNhY3Rpb24pLiBJbiBlaXRoZXIgY2FzZSwgdGhlIGxvY2sg b24gdGhlIFZNIGJ1ZmZlciB3aWxsIGhhdmUKLQkJICogYmVlbiByZWxlYXNlZCAoYWN0aW5nIGFz IGEgd3JpdGUgYmFycmllcikgYWZ0ZXIgY2xlYXJpbmcgdGhlIGJpdC4KLQkJICogQW5kIGZvciB1 cyB0byBoYXZlIGEgc25hcHNob3QgdGhhdCBpbmNsdWRlcyB0aGUgZGVsZXRpbmcKLQkJICogdHJh bnNhY3Rpb24gKG1ha2luZyB0aGUgdHVwbGUgaW52aXNpYmxlKSwgd2UgbXVzdCBoYXZlIGFjcXVp cmVkCi0JCSAqIFByb2NBcnJheUxvY2sgYWZ0ZXIgdGhhdCB0aW1lLCBhY3RpbmcgYXMgYSByZWFk IGJhcnJpZXIuCi0JCSAqCi0JCSAqIEl0J3Mgd29ydGggZ29pbmcgdGhyb3VnaCB0aGlzIGNvbXBs ZXhpdHkgdG8gYXZvaWQgbmVlZGluZyB0byBsb2NrCi0JCSAqIHRoZSBWTSBidWZmZXIsIHdoaWNo IGNvdWxkIGNhdXNlIHNpZ25pZmljYW50IGNvbnRlbnRpb24uCi0JCSAqLwotCQlpZiAoIVZNX0FM TF9WSVNJQkxFKHNjYW5kZXNjLT5oZWFwUmVsYXRpb24sCi0JCQkJCQkJSXRlbVBvaW50ZXJHZXRC bG9ja051bWJlcih0aWQpLAotCQkJCQkJCSZub2RlLT5pb3NzX1ZNQnVmZmVyKSkKLQkJewotCQkJ LyoKLQkJCSAqIFJhdHMsIHdlIGhhdmUgdG8gdmlzaXQgdGhlIGhlYXAgdG8gY2hlY2sgdmlzaWJp bGl0eS4KLQkJCSAqLwotCQkJSW5zdHJDb3VudFR1cGxlczIobm9kZSwgMSk7Ci0JCQlpZiAoIWlu ZGV4X2ZldGNoX2hlYXAoc2NhbmRlc2MsIG5vZGUtPmlvc3NfVGFibGVTbG90KSkKLQkJCQljb250 aW51ZTsJCS8qIG5vIHZpc2libGUgdHVwbGUsIHRyeSBuZXh0IGluZGV4IGVudHJ5ICovCi0KLQkJ CUV4ZWNDbGVhclR1cGxlKG5vZGUtPmlvc3NfVGFibGVTbG90KTsKLQotCQkJLyoKLQkJCSAqIE9u bHkgTVZDQyBzbmFwc2hvdHMgYXJlIHN1cHBvcnRlZCBoZXJlLCBzbyB0aGVyZSBzaG91bGQgYmUg bm8KLQkJCSAqIG5lZWQgdG8ga2VlcCBmb2xsb3dpbmcgdGhlIEhPVCBjaGFpbiBvbmNlIGEgdmlz aWJsZSBlbnRyeSBoYXMKLQkJCSAqIGJlZW4gZm91bmQuICBJZiB3ZSBkaWQgd2FudCB0byBhbGxv dyB0aGF0LCB3ZSdkIG5lZWQgdG8ga2VlcAotCQkJICogbW9yZSBzdGF0ZSB0byByZW1lbWJlciBu b3QgdG8gY2FsbCBpbmRleF9nZXRuZXh0X3RpZCBuZXh0IHRpbWUuCi0JCQkgKi8KLQkJCWlmIChz Y2FuZGVzYy0+eHNfaGVhcF9jb250aW51ZSkKLQkJCQllbG9nKEVSUk9SLCAibm9uLU1WQ0Mgc25h cHNob3RzIGFyZSBub3Qgc3VwcG9ydGVkIGluIGluZGV4LW9ubHkgc2NhbnMiKTsKLQotCQkJLyoK LQkJCSAqIE5vdGU6IGF0IHRoaXMgcG9pbnQgd2UgYXJlIGhvbGRpbmcgYSBwaW4gb24gdGhlIGhl YXAgcGFnZSwgYXMKLQkJCSAqIHJlY29yZGVkIGluIHNjYW5kZXNjLT54c19jYnVmLiAgV2UgY291 bGQgcmVsZWFzZSB0aGF0IHBpbiBub3csCi0JCQkgKiBidXQgaXQncyBub3QgY2xlYXIgd2hldGhl ciBpdCdzIGEgd2luIHRvIGRvIHNvLiAgVGhlIG5leHQgaW5kZXgKLQkJCSAqIGVudHJ5IG1pZ2h0 IHJlcXVpcmUgYSB2aXNpdCB0byB0aGUgc2FtZSBoZWFwIHBhZ2UuCi0JCQkgKi8KLQotCQkJdHVw bGVfZnJvbV9oZWFwID0gdHJ1ZTsKLQkJfQotCi0JCS8qCi0JCSAqIEZpbGwgdGhlIHNjYW4gdHVw bGUgc2xvdCB3aXRoIGRhdGEgZnJvbSB0aGUgaW5kZXguICBUaGlzIG1pZ2h0IGJlCi0JCSAqIHBy b3ZpZGVkIGluIGVpdGhlciBIZWFwVHVwbGUgb3IgSW5kZXhUdXBsZSBmb3JtYXQuICBDb25jZWl2 YWJseSBhbgotCQkgKiBpbmRleCBBTSBtaWdodCBmaWxsIGJvdGggZmllbGRzLCBpbiB3aGljaCBj YXNlIHdlIHByZWZlciB0aGUgaGVhcAotCQkgKiBmb3JtYXQsIHNpbmNlIGl0J3MgcHJvYmFibHkg YSBiaXQgY2hlYXBlciB0byBmaWxsIGEgc2xvdCBmcm9tLgotCQkgKi8KLQkJaWYgKHNjYW5kZXNj LT54c19oaXR1cCkKLQkJewotCQkJLyoKLQkJCSAqIFdlIGRvbid0IHRha2UgdGhlIHRyb3VibGUg dG8gdmVyaWZ5IHRoYXQgdGhlIHByb3ZpZGVkIHR1cGxlIGhhcwotCQkJICogZXhhY3RseSB0aGUg c2xvdCdzIGZvcm1hdCwgYnV0IGl0IHNlZW1zIHdvcnRoIGRvaW5nIGEgcXVpY2sKLQkJCSAqIGNo ZWNrIG9uIHRoZSBudW1iZXIgb2YgZmllbGRzLgotCQkJICovCi0JCQlBc3NlcnQoc2xvdC0+dHRz X3R1cGxlRGVzY3JpcHRvci0+bmF0dHMgPT0KLQkJCQkgICBzY2FuZGVzYy0+eHNfaGl0dXBkZXNj LT5uYXR0cyk7Ci0JCQlFeGVjRm9yY2VTdG9yZUhlYXBUdXBsZShzY2FuZGVzYy0+eHNfaGl0dXAs IHNsb3QsIGZhbHNlKTsKLQkJfQotCQllbHNlIGlmIChzY2FuZGVzYy0+eHNfaXR1cCkKLQkJCVN0 b3JlSW5kZXhUdXBsZShub2RlLCBzbG90LCBzY2FuZGVzYy0+eHNfaXR1cCwgc2NhbmRlc2MtPnhz X2l0dXBkZXNjKTsKLQkJZWxzZQotCQkJZWxvZyhFUlJPUiwgIm5vIGRhdGEgcmV0dXJuZWQgZm9y IGluZGV4LW9ubHkgc2NhbiIpOwotCiAJCS8qCiAJCSAqIElmIHRoZSBpbmRleCB3YXMgbG9zc3ks IHdlIGhhdmUgdG8gcmVjaGVjayB0aGUgaW5kZXggcXVhbHMuCiAJCSAqLwotCQlpZiAoc2NhbmRl c2MtPnhzX3JlY2hlY2spCisJCWlmIChyZWNoZWNrKQogCQl7CiAJCQllY29udGV4dC0+ZWN4dF9z Y2FudHVwbGUgPSBzbG90OwogCQkJaWYgKCFFeGVjUXVhbEFuZFJlc2V0KG5vZGUtPnJlY2hlY2tx dWFsLCBlY29udGV4dCkpCkBAIC0yNDEsMTYgKzE0NCw2IEBAIEluZGV4T25seU5leHQoSW5kZXhP bmx5U2NhblN0YXRlICpub2RlKQogCQkJZXJlcG9ydChFUlJPUiwKIAkJCQkJKGVycmNvZGUoRVJS Q09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAogCQkJCQkgZXJybXNnKCJsb3NzeSBkaXN0YW5j ZSBmdW5jdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gaW5kZXgtb25seSBzY2FucyIpKSk7Ci0K LQkJLyoKLQkJICogSWYgd2UgZGlkbid0IGFjY2VzcyB0aGUgaGVhcCwgdGhlbiB3ZSdsbCBuZWVk IHRvIHRha2UgYSBwcmVkaWNhdGUKLQkJICogbG9jayBleHBsaWNpdGx5LCBhcyBpZiB3ZSBoYWQu ICBGb3Igbm93IHdlIGRvIHRoYXQgYXQgcGFnZSBsZXZlbC4KLQkJICovCi0JCWlmICghdHVwbGVf ZnJvbV9oZWFwKQotCQkJUHJlZGljYXRlTG9ja1BhZ2Uoc2NhbmRlc2MtPmhlYXBSZWxhdGlvbiwK LQkJCQkJCQkgIEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKSwKLQkJCQkJCQkgIGVzdGF0 ZS0+ZXNfc25hcHNob3QpOwotCiAJCXJldHVybiBzbG90OwogCX0KIApAQCAtMjYxLDYyICsxNTQs NiBAQCBJbmRleE9ubHlOZXh0KEluZGV4T25seVNjYW5TdGF0ZSAqbm9kZSkKIAlyZXR1cm4gRXhl Y0NsZWFyVHVwbGUoc2xvdCk7CiB9CiAKLS8qCi0gKiBTdG9yZUluZGV4VHVwbGUKLSAqCQlGaWxs IHRoZSBzbG90IHdpdGggZGF0YSBmcm9tIHRoZSBpbmRleCB0dXBsZS4KLSAqCi0gKiBBdCBzb21l IHBvaW50IHRoaXMgbWlnaHQgYmUgZ2VuZXJhbGx5LXVzZWZ1bCBmdW5jdGlvbmFsaXR5LCBidXQK LSAqIHJpZ2h0IG5vdyB3ZSBkb24ndCBuZWVkIGl0IGVsc2V3aGVyZS4KLSAqLwotc3RhdGljIHZv aWQKLVN0b3JlSW5kZXhUdXBsZShJbmRleE9ubHlTY2FuU3RhdGUgKm5vZGUsIFR1cGxlVGFibGVT bG90ICpzbG90LAotCQkJCUluZGV4VHVwbGUgaXR1cCwgVHVwbGVEZXNjIGl0dXBkZXNjKQotewot CS8qCi0JICogTm90ZTogd2UgbXVzdCB1c2UgdGhlIHR1cGRlc2Mgc3VwcGxpZWQgYnkgdGhlIEFN IGluIGluZGV4X2RlZm9ybV90dXBsZSwKLQkgKiBub3QgdGhlIHNsb3QncyB0dXBkZXNjLCBpbiBj YXNlIHRoZSBsYXR0ZXIgaGFzIGRpZmZlcmVudCBkYXRhdHlwZXMKLQkgKiAodGhpcyBoYXBwZW5z IGZvciBidHJlZSBuYW1lX29wcyBpbiBwYXJ0aWN1bGFyKS4gIFRoZXknZCBiZXR0ZXIgaGF2ZQot CSAqIHRoZSBzYW1lIG51bWJlciBvZiBjb2x1bW5zIHRob3VnaCwgYXMgd2VsbCBhcyBiZWluZyBk YXRhdHlwZS1jb21wYXRpYmxlCi0JICogd2hpY2ggaXMgc29tZXRoaW5nIHdlIGNhbid0IHNvIGVh c2lseSBjaGVjay4KLQkgKi8KLQlBc3NlcnQoc2xvdC0+dHRzX3R1cGxlRGVzY3JpcHRvci0+bmF0 dHMgPT0gaXR1cGRlc2MtPm5hdHRzKTsKLQotCUV4ZWNDbGVhclR1cGxlKHNsb3QpOwotCWluZGV4 X2RlZm9ybV90dXBsZShpdHVwLCBpdHVwZGVzYywgc2xvdC0+dHRzX3ZhbHVlcywgc2xvdC0+dHRz X2lzbnVsbCk7Ci0KLQkvKgotCSAqIENvcHkgYWxsIG5hbWUgY29sdW1ucyBzdG9yZWQgYXMgY3N0 cmluZ3MgYmFjayBpbnRvIGEgTkFNRURBVEFMRU4gYnl0ZQotCSAqIHNpemVkIGFsbG9jYXRpb24u ICBXZSBtYXJrIHRoaXMgYnJhbmNoIGFzIHVubGlrZWx5IGFzIGdlbmVyYWxseSAibmFtZSIKLQkg KiBpcyB1c2VkIG9ubHkgZm9yIHRoZSBzeXN0ZW0gY2F0YWxvZ3MgYW5kIHRoaXMgd291bGQgaGF2 ZSB0byBiZSBhIHVzZXIKLQkgKiBxdWVyeSBydW5uaW5nIG9uIHRob3NlIG9yIHNvbWUgb3RoZXIg dXNlciB0YWJsZSB3aXRoIGFuIGluZGV4IG9uIGEgbmFtZQotCSAqIGNvbHVtbi4KLQkgKi8KLQlp ZiAodW5saWtlbHkobm9kZS0+aW9zc19OYW1lQ1N0cmluZ0F0dE51bXMgIT0gTlVMTCkpCi0Jewot CQlpbnQJCQlhdHRjb3VudCA9IG5vZGUtPmlvc3NfTmFtZUNTdHJpbmdDb3VudDsKLQotCQlmb3Ig KGludCBpZHggPSAwOyBpZHggPCBhdHRjb3VudDsgaWR4KyspCi0JCXsKLQkJCWludAkJCWF0dG51 bSA9IG5vZGUtPmlvc3NfTmFtZUNTdHJpbmdBdHROdW1zW2lkeF07Ci0JCQlOYW1lCQluYW1lOwot Ci0JCQkvKiBza2lwIG51bGwgRGF0dW1zICovCi0JCQlpZiAoc2xvdC0+dHRzX2lzbnVsbFthdHRu dW1dKQotCQkJCWNvbnRpbnVlOwotCi0JCQkvKiBhbGxvY2F0ZSB0aGUgTkFNRURBVEFMRU4gYW5k IGNvcHkgdGhlIGRhdHVtIGludG8gdGhhdCBtZW1vcnkgKi8KLQkJCW5hbWUgPSAoTmFtZSkgTWVt b3J5Q29udGV4dEFsbG9jKG5vZGUtPnNzLnBzLnBzX0V4cHJDb250ZXh0LT5lY3h0X3Blcl90dXBs ZV9tZW1vcnksCi0JCQkJCQkJCQkJCSBOQU1FREFUQUxFTik7Ci0KLQkJCS8qIHVzZSBuYW1lc3Ry Y3B5IHRvIHplcm8tcGFkIGFsbCB0cmFpbGluZyBieXRlcyAqLwotCQkJbmFtZXN0cmNweShuYW1l LCBEYXR1bUdldENTdHJpbmcoc2xvdC0+dHRzX3ZhbHVlc1thdHRudW1dKSk7Ci0JCQlzbG90LT50 dHNfdmFsdWVzW2F0dG51bV0gPSBOYW1lR2V0RGF0dW0obmFtZSk7Ci0JCX0KLQl9Ci0KLQlFeGVj U3RvcmVWaXJ0dWFsVHVwbGUoc2xvdCk7Ci19Ci0KIC8qCiAgKiBJbmRleE9ubHlSZWNoZWNrIC0t IGFjY2VzcyBtZXRob2Qgcm91dGluZSB0byByZWNoZWNrIGEgdHVwbGUgaW4gRXZhbFBsYW5RdWFs CiAgKgpAQCAtNDEwLDEzICsyNDcsNiBAQCBFeGVjRW5kSW5kZXhPbmx5U2NhbihJbmRleE9ubHlT Y2FuU3RhdGUgKm5vZGUpCiAJaW5kZXhSZWxhdGlvbkRlc2MgPSBub2RlLT5pb3NzX1JlbGF0aW9u RGVzYzsKIAlpbmRleFNjYW5EZXNjID0gbm9kZS0+aW9zc19TY2FuRGVzYzsKIAotCS8qIFJlbGVh c2UgVk0gYnVmZmVyIHBpbiwgaWYgYW55LiAqLwotCWlmIChub2RlLT5pb3NzX1ZNQnVmZmVyICE9 IEludmFsaWRCdWZmZXIpCi0JewotCQlSZWxlYXNlQnVmZmVyKG5vZGUtPmlvc3NfVk1CdWZmZXIp OwotCQlub2RlLT5pb3NzX1ZNQnVmZmVyID0gSW52YWxpZEJ1ZmZlcjsKLQl9Ci0KIAkvKgogCSAq IFdoZW4gZW5kaW5nIGEgcGFyYWxsZWwgd29ya2VyLCBjb3B5IHRoZSBzdGF0aXN0aWNzIGdhdGhl cmVkIGJ5IHRoZQogCSAqIHdvcmtlciBiYWNrIGludG8gc2hhcmVkIG1lbW9yeSBzbyB0aGF0IGl0 IGNhbiBiZSBwaWNrZWQgdXAgYnkgdGhlIG1haW4KQEAgLTQzNiw2ICsyNjYsNyBAQCBFeGVjRW5k SW5kZXhPbmx5U2NhbihJbmRleE9ubHlTY2FuU3RhdGUgKm5vZGUpCiAJCSAqIHdoaWNoIHdpbGwg aGF2ZSBhIG5ldyBJbmRleE9ubHlTY2FuU3RhdGUgYW5kIHplcm9lZCBzdGF0cy4KIAkJICovCiAJ CXdpbnN0cnVtZW50LT5uc2VhcmNoZXMgKz0gbm9kZS0+aW9zc19JbnN0cnVtZW50LT5uc2VhcmNo ZXM7CisJCXdpbnN0cnVtZW50LT5udGFibGV0dXBsZWZldGNoZXMgKz0gbm9kZS0+aW9zc19JbnN0 cnVtZW50LT5udGFibGV0dXBsZWZldGNoZXM7CiAJfQogCiAJLyoKQEAgLTUzNSw4ICszNjYsNiBA QCBFeGVjSW5pdEluZGV4T25seVNjYW4oSW5kZXhPbmx5U2NhbiAqbm9kZSwgRVN0YXRlICplc3Rh dGUsIGludCBlZmxhZ3MpCiAJUmVsYXRpb24JaW5kZXhSZWxhdGlvbjsKIAlMT0NLTU9ERQlsb2Nr bW9kZTsKIAlUdXBsZURlc2MJdHVwRGVzYzsKLQlpbnQJCQlpbmRua2V5YXR0czsKLQlpbnQJCQlu YW1lY291bnQ7CiAKIAkvKgogCSAqIGNyZWF0ZSBzdGF0ZSBzdHJ1Y3R1cmUKQEAgLTU3MywxNSAr NDAyLDYgQEAgRXhlY0luaXRJbmRleE9ubHlTY2FuKEluZGV4T25seVNjYW4gKm5vZGUsIEVTdGF0 ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCQkJCQkJICAmVFRTT3BzVmlydHVhbCwKIAkJCQkJCSAg MCk7CiAKLQkvKgotCSAqIFdlIG5lZWQgYW5vdGhlciBzbG90LCBpbiBhIGZvcm1hdCB0aGF0J3Mg c3VpdGFibGUgZm9yIHRoZSB0YWJsZSBBTSwgZm9yCi0JICogd2hlbiB3ZSBuZWVkIHRvIGZldGNo IGEgdHVwbGUgZnJvbSB0aGUgdGFibGUgZm9yIHJlY2hlY2tpbmcgdmlzaWJpbGl0eS4KLQkgKi8K LQlpbmRleHN0YXRlLT5pb3NzX1RhYmxlU2xvdCA9Ci0JCUV4ZWNBbGxvY1RhYmxlU2xvdCgmZXN0 YXRlLT5lc190dXBsZVRhYmxlLAotCQkJCQkJICAgUmVsYXRpb25HZXREZXNjcihjdXJyZW50UmVs YXRpb24pLAotCQkJCQkJICAgdGFibGVfc2xvdF9jYWxsYmFja3MoY3VycmVudFJlbGF0aW9uKSwg MCk7Ci0KIAkvKgogCSAqIEluaXRpYWxpemUgcmVzdWx0IHR5cGUgYW5kIHByb2plY3Rpb24gaW5m by4gIFRoZSBub2RlJ3MgdGFyZ2V0bGlzdCB3aWxsCiAJICogY29udGFpbiBWYXJzIHdpdGggdmFy bm8gPSBJTkRFWF9WQVIsIHJlZmVyZW5jaW5nIHRoZSBzY2FuIHR1cGxlLgpAQCAtNjcxLDQ4ICs0 OTEsNiBAQCBFeGVjSW5pdEluZGV4T25seVNjYW4oSW5kZXhPbmx5U2NhbiAqbm9kZSwgRVN0YXRl ICplc3RhdGUsIGludCBlZmxhZ3MpCiAJCWluZGV4c3RhdGUtPmlvc3NfUnVudGltZUNvbnRleHQg PSBOVUxMOwogCX0KIAotCWluZGV4c3RhdGUtPmlvc3NfTmFtZUNTdHJpbmdBdHROdW1zID0gTlVM TDsKLQlpbmRua2V5YXR0cyA9IGluZGV4UmVsYXRpb24tPnJkX2luZGV4LT5pbmRua2V5YXR0czsK LQluYW1lY291bnQgPSAwOwotCi0JLyoKLQkgKiBUaGUgIm5hbWUiIHR5cGUgZm9yIGJ0cmVlIHVz ZXMgdGV4dF9vcHMgd2hpY2ggcmVzdWx0cyBpbiBzdG9yaW5nCi0JICogY3N0cmluZ3MgaW4gdGhl IGluZGV4ZWQga2V5cyByYXRoZXIgdGhhbiBuYW1lcy4gIEhlcmUgd2UgZGV0ZWN0IHRoYXQgaW4K LQkgKiBhIGdlbmVyaWMgd2F5IGluIGNhc2Ugb3RoZXIgaW5kZXggQU1zIHdhbnQgdG8gZG8gdGhl IHNhbWUgb3B0aW1pemF0aW9uLgotCSAqIENoZWNrIGZvciBvcGNsYXNzZXMgd2l0aCBhbiBvcGNp bnR5cGUgb2YgTkFNRU9JRCBhbmQgYW4gaW5kZXggdHVwbGUKLQkgKiBkZXNjcmlwdG9yIHdpdGgg Q1NUUklOR09JRC4gIElmIGFueSBvZiB0aGVzZSBhcmUgZm91bmQsIGNyZWF0ZSBhbiBhcnJheQot CSAqIG1hcmtpbmcgdGhlIGluZGV4IGF0dHJpYnV0ZSBudW1iZXIgb2YgZWFjaCBvZiB0aGVtLiAg U3RvcmVJbmRleFR1cGxlKCkKLQkgKiBoYW5kbGVzIGNvcHlpbmcgdGhlIG5hbWUgRGF0dW1zIGlu dG8gYSBOQU1FREFUQUxFTi1ieXRlIGFsbG9jYXRpb24uCi0JICovCi0KLQkvKiBGaXJzdCwgY291 bnQgdGhlIG51bWJlciBvZiBzdWNoIGluZGV4IGtleXMgKi8KLQlmb3IgKGludCBhdHRudW0gPSAw OyBhdHRudW0gPCBpbmRua2V5YXR0czsgYXR0bnVtKyspCi0JewotCQlpZiAoVHVwbGVEZXNjQXR0 cihpbmRleFJlbGF0aW9uLT5yZF9hdHQsIGF0dG51bSktPmF0dHR5cGlkID09IENTVFJJTkdPSUQg JiYKLQkJCWluZGV4UmVsYXRpb24tPnJkX29wY2ludHlwZVthdHRudW1dID09IE5BTUVPSUQpCi0J CQluYW1lY291bnQrKzsKLQl9Ci0KLQlpZiAobmFtZWNvdW50ID4gMCkKLQl7Ci0JCWludAkJCWlk eCA9IDA7Ci0KLQkJLyoKLQkJICogTm93IGNyZWF0ZSBhbiBhcnJheSB0byBtYXJrIHRoZSBhdHRy aWJ1dGUgbnVtYmVycyBvZiB0aGUga2V5cyB0aGF0Ci0JCSAqIG5lZWQgdG8gYmUgY29udmVydGVk IGZyb20gY3N0cmluZyB0byBuYW1lLgotCQkgKi8KLQkJaW5kZXhzdGF0ZS0+aW9zc19OYW1lQ1N0 cmluZ0F0dE51bXMgPSBwYWxsb2NfYXJyYXkoQXR0ck51bWJlciwgbmFtZWNvdW50KTsKLQotCQlm b3IgKGludCBhdHRudW0gPSAwOyBhdHRudW0gPCBpbmRua2V5YXR0czsgYXR0bnVtKyspCi0JCXsK LQkJCWlmIChUdXBsZURlc2NBdHRyKGluZGV4UmVsYXRpb24tPnJkX2F0dCwgYXR0bnVtKS0+YXR0 dHlwaWQgPT0gQ1NUUklOR09JRCAmJgotCQkJCWluZGV4UmVsYXRpb24tPnJkX29wY2ludHlwZVth dHRudW1dID09IE5BTUVPSUQpCi0JCQkJaW5kZXhzdGF0ZS0+aW9zc19OYW1lQ1N0cmluZ0F0dE51 bXNbaWR4KytdID0gKEF0dHJOdW1iZXIpIGF0dG51bTsKLQkJfQotCX0KLQotCWluZGV4c3RhdGUt Pmlvc3NfTmFtZUNTdHJpbmdDb3VudCA9IG5hbWVjb3VudDsKLQogCS8qCiAJICogYWxsIGRvbmUu CiAJICovCkBAIC03NjgsMTQgKzU0NiwxNCBAQCBFeGVjSW5kZXhPbmx5U2NhbkluaXRpYWxpemVE U00oSW5kZXhPbmx5U2NhblN0YXRlICpub2RlLAogCW5vZGUtPmlvc3NfU2NhbkRlc2MgPQogCQlp bmRleF9iZWdpbnNjYW5fcGFyYWxsZWwobm9kZS0+c3Muc3NfY3VycmVudFJlbGF0aW9uLAogCQkJ CQkJCQkgbm9kZS0+aW9zc19SZWxhdGlvbkRlc2MsCisJCQkJCQkJCSB0cnVlLAogCQkJCQkJCQkg bm9kZS0+aW9zc19JbnN0cnVtZW50LAogCQkJCQkJCQkgbm9kZS0+aW9zc19OdW1TY2FuS2V5cywK IAkJCQkJCQkJIG5vZGUtPmlvc3NfTnVtT3JkZXJCeUtleXMsCiAJCQkJCQkJCSBwaXNjYW4sCiAJ CQkJCQkJCSBTY2FuUmVsSXNSZWFkT25seSgmbm9kZS0+c3MpID8KIAkJCQkJCQkJIFNPX0hJTlRf UkVMX1JFQURfT05MWSA6IFNPX05PTkUpOwotCW5vZGUtPmlvc3NfU2NhbkRlc2MtPnhzX3dhbnRf aXR1cCA9IHRydWU7Ci0Jbm9kZS0+aW9zc19WTUJ1ZmZlciA9IEludmFsaWRCdWZmZXI7CisJQXNz ZXJ0KG5vZGUtPmlvc3NfU2NhbkRlc2MtPnhzX3dhbnRfaXR1cCk7CiAKIAkvKgogCSAqIElmIG5v IHJ1bi10aW1lIGtleXMgdG8gY2FsY3VsYXRlIG9yIHRoZXkgYXJlIHJlYWR5LCBnbyBhaGVhZCBh bmQgcGFzcwpAQCAtODE4LDEzICs1OTYsMTQgQEAgRXhlY0luZGV4T25seVNjYW5Jbml0aWFsaXpl V29ya2VyKEluZGV4T25seVNjYW5TdGF0ZSAqbm9kZSwKIAlub2RlLT5pb3NzX1NjYW5EZXNjID0K IAkJaW5kZXhfYmVnaW5zY2FuX3BhcmFsbGVsKG5vZGUtPnNzLnNzX2N1cnJlbnRSZWxhdGlvbiwK IAkJCQkJCQkJIG5vZGUtPmlvc3NfUmVsYXRpb25EZXNjLAorCQkJCQkJCQkgdHJ1ZSwKIAkJCQkJ CQkJIG5vZGUtPmlvc3NfSW5zdHJ1bWVudCwKIAkJCQkJCQkJIG5vZGUtPmlvc3NfTnVtU2Nhbktl eXMsCiAJCQkJCQkJCSBub2RlLT5pb3NzX051bU9yZGVyQnlLZXlzLAogCQkJCQkJCQkgcGlzY2Fu LAogCQkJCQkJCQkgU2NhblJlbElzUmVhZE9ubHkoJm5vZGUtPnNzKSA/CiAJCQkJCQkJCSBTT19I SU5UX1JFTF9SRUFEX09OTFkgOiBTT19OT05FKTsKLQlub2RlLT5pb3NzX1NjYW5EZXNjLT54c193 YW50X2l0dXAgPSB0cnVlOworCUFzc2VydChub2RlLT5pb3NzX1NjYW5EZXNjLT54c193YW50X2l0 dXApOwogCiAJLyoKIAkgKiBJZiBubyBydW4tdGltZSBrZXlzIHRvIGNhbGN1bGF0ZSBvciB0aGV5 IGFyZSByZWFkeSwgZ28gYWhlYWQgYW5kIHBhc3MKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL25vZGVJbmRleHNjYW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleHNj YW4uYwppbmRleCAzOWY2NjkxZWUuLjQ1N2ZiZGIwNyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv ZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJ bmRleHNjYW4uYwpAQCAtODYsNiArODYsNyBAQCBJbmRleE5leHQoSW5kZXhTY2FuU3RhdGUgKm5v ZGUpCiAJU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb247CiAJSW5kZXhTY2FuRGVzYyBzY2FuZGVzYzsK IAlUdXBsZVRhYmxlU2xvdCAqc2xvdDsKKwlib29sCQlyZWNoZWNrOwogCiAJLyoKIAkgKiBleHRy YWN0IG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiBmcm9tIGluZGV4IHNjYW4gbm9kZQpAQCAtMTEwLDYg KzExMSw3IEBAIEluZGV4TmV4dChJbmRleFNjYW5TdGF0ZSAqbm9kZSkKIAkJICovCiAJCXNjYW5k ZXNjID0gaW5kZXhfYmVnaW5zY2FuKG5vZGUtPnNzLnNzX2N1cnJlbnRSZWxhdGlvbiwKIAkJCQkJ CQkJICAgbm9kZS0+aXNzX1JlbGF0aW9uRGVzYywKKwkJCQkJCQkJICAgZmFsc2UsCiAJCQkJCQkJ CSAgIGVzdGF0ZS0+ZXNfc25hcHNob3QsCiAJCQkJCQkJCSAgIG5vZGUtPmlzc19JbnN0cnVtZW50 LAogCQkJCQkJCQkgICBub2RlLT5pc3NfTnVtU2NhbktleXMsCkBAIC0xMzIsNyArMTM0LDcgQEAg SW5kZXhOZXh0KEluZGV4U2NhblN0YXRlICpub2RlKQogCS8qCiAJICogb2ssIG5vdyB0aGF0IHdl IGhhdmUgd2hhdCB3ZSBuZWVkLCBmZXRjaCB0aGUgbmV4dCB0dXBsZS4KIAkgKi8KLQl3aGlsZSAo aW5kZXhfZ2V0bmV4dF9zbG90KHNjYW5kZXNjLCBkaXJlY3Rpb24sIHNsb3QpKQorCXdoaWxlICh0 YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Qoc2NhbmRlc2MsIGRpcmVjdGlvbiwgc2xvdCwgJnJlY2hl Y2spKQogCXsKIAkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKIApAQCAtMTQwLDcgKzE0Miw3IEBA IEluZGV4TmV4dChJbmRleFNjYW5TdGF0ZSAqbm9kZSkKIAkJICogSWYgdGhlIGluZGV4IHdhcyBs b3NzeSwgd2UgaGF2ZSB0byByZWNoZWNrIHRoZSBpbmRleCBxdWFscyB1c2luZwogCQkgKiB0aGUg ZmV0Y2hlZCB0dXBsZS4KIAkJICovCi0JCWlmIChzY2FuZGVzYy0+eHNfcmVjaGVjaykKKwkJaWYg KHJlY2hlY2spCiAJCXsKIAkJCWVjb250ZXh0LT5lY3h0X3NjYW50dXBsZSA9IHNsb3Q7CiAJCQlp ZiAoIUV4ZWNRdWFsQW5kUmVzZXQobm9kZS0+aW5kZXhxdWFsb3JpZywgZWNvbnRleHQpKQpAQCAt MTc4LDYgKzE4MCw3IEBAIEluZGV4TmV4dFdpdGhSZW9yZGVyKEluZGV4U2NhblN0YXRlICpub2Rl KQogCVR1cGxlVGFibGVTbG90ICpzbG90OwogCVJlb3JkZXJUdXBsZSAqdG9wbW9zdCA9IE5VTEw7 CiAJYm9vbAkJd2FzX2V4YWN0OworCWJvb2wJCXJlY2hlY2s7CiAJRGF0dW0JICAgKmxhc3RmZXRj aGVkX3ZhbHM7CiAJYm9vbAkgICAqbGFzdGZldGNoZWRfbnVsbHM7CiAJaW50CQkJY21wOwpAQCAt MjA4LDYgKzIxMSw3IEBAIEluZGV4TmV4dFdpdGhSZW9yZGVyKEluZGV4U2NhblN0YXRlICpub2Rl KQogCQkgKi8KIAkJc2NhbmRlc2MgPSBpbmRleF9iZWdpbnNjYW4obm9kZS0+c3Muc3NfY3VycmVu dFJlbGF0aW9uLAogCQkJCQkJCQkgICBub2RlLT5pc3NfUmVsYXRpb25EZXNjLAorCQkJCQkJCQkg ICBmYWxzZSwKIAkJCQkJCQkJICAgZXN0YXRlLT5lc19zbmFwc2hvdCwKIAkJCQkJCQkJICAgbm9k ZS0+aXNzX0luc3RydW1lbnQsCiAJCQkJCQkJCSAgIG5vZGUtPmlzc19OdW1TY2FuS2V5cywKQEAg LTI2Niw3ICsyNzAsOCBAQCBJbmRleE5leHRXaXRoUmVvcmRlcihJbmRleFNjYW5TdGF0ZSAqbm9k ZSkKIAkJICogRmV0Y2ggbmV4dCB0dXBsZSBmcm9tIHRoZSBpbmRleC4KIAkJICovCiBuZXh0X2lu ZGV4dHVwbGU6Ci0JCWlmICghaW5kZXhfZ2V0bmV4dF9zbG90KHNjYW5kZXNjLCBGb3J3YXJkU2Nh bkRpcmVjdGlvbiwgc2xvdCkpCisJCWlmICghdGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90KHNjYW5k ZXNjLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgc2xvdCwKKwkJCQkJCQkJCSAgJnJlY2hlY2spKQog CQl7CiAJCQkvKgogCQkJICogTm8gbW9yZSB0dXBsZXMgZnJvbSB0aGUgaW5kZXguICBCdXQgd2Ug c3RpbGwgbmVlZCB0byBkcmFpbiBhbnkKQEAgLTI4MCw3ICsyODUsNyBAQCBuZXh0X2luZGV4dHVw bGU6CiAJCSAqIElmIHRoZSBpbmRleCB3YXMgbG9zc3ksIHdlIGhhdmUgdG8gcmVjaGVjayB0aGUg aW5kZXggcXVhbHMgYW5kCiAJCSAqIE9SREVSIEJZIGV4cHJlc3Npb25zIHVzaW5nIHRoZSBmZXRj aGVkIHR1cGxlLgogCQkgKi8KLQkJaWYgKHNjYW5kZXNjLT54c19yZWNoZWNrKQorCQlpZiAocmVj aGVjaykKIAkJewogCQkJZWNvbnRleHQtPmVjeHRfc2NhbnR1cGxlID0gc2xvdDsKIAkJCWlmICgh RXhlY1F1YWxBbmRSZXNldChub2RlLT5pbmRleHF1YWxvcmlnLCBlY29udGV4dCkpCkBAIC04MTgs NiArODIzLDcgQEAgRXhlY0VuZEluZGV4U2NhbihJbmRleFNjYW5TdGF0ZSAqbm9kZSkKIAkJICog d2hpY2ggd2lsbCBoYXZlIGEgbmV3IEluZGV4T25seVNjYW5TdGF0ZSBhbmQgemVyb2VkIHN0YXRz LgogCQkgKi8KIAkJd2luc3RydW1lbnQtPm5zZWFyY2hlcyArPSBub2RlLT5pc3NfSW5zdHJ1bWVu dC0+bnNlYXJjaGVzOworCQlBc3NlcnQobm9kZS0+aXNzX0luc3RydW1lbnQtPm50YWJsZXR1cGxl ZmV0Y2hlcyA9PSAwKTsKIAl9CiAKIAkvKgpAQCAtMTcwNiw2ICsxNzEyLDcgQEAgRXhlY0luZGV4 U2NhbkluaXRpYWxpemVEU00oSW5kZXhTY2FuU3RhdGUgKm5vZGUsCiAJbm9kZS0+aXNzX1NjYW5E ZXNjID0KIAkJaW5kZXhfYmVnaW5zY2FuX3BhcmFsbGVsKG5vZGUtPnNzLnNzX2N1cnJlbnRSZWxh dGlvbiwKIAkJCQkJCQkJIG5vZGUtPmlzc19SZWxhdGlvbkRlc2MsCisJCQkJCQkJCSBmYWxzZSwK IAkJCQkJCQkJIG5vZGUtPmlzc19JbnN0cnVtZW50LAogCQkJCQkJCQkgbm9kZS0+aXNzX051bVNj YW5LZXlzLAogCQkJCQkJCQkgbm9kZS0+aXNzX051bU9yZGVyQnlLZXlzLApAQCAtMTc1NCw2ICsx NzYxLDcgQEAgRXhlY0luZGV4U2NhbkluaXRpYWxpemVXb3JrZXIoSW5kZXhTY2FuU3RhdGUgKm5v ZGUsCiAJbm9kZS0+aXNzX1NjYW5EZXNjID0KIAkJaW5kZXhfYmVnaW5zY2FuX3BhcmFsbGVsKG5v ZGUtPnNzLnNzX2N1cnJlbnRSZWxhdGlvbiwKIAkJCQkJCQkJIG5vZGUtPmlzc19SZWxhdGlvbkRl c2MsCisJCQkJCQkJCSBmYWxzZSwKIAkJCQkJCQkJIG5vZGUtPmlzc19JbnN0cnVtZW50LAogCQkJ CQkJCQkgbm9kZS0+aXNzX051bVNjYW5LZXlzLAogCQkJCQkJCQkgbm9kZS0+aXNzX051bU9yZGVy QnlLZXlzLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3JpX3RyaWdnZXJzLmMg Yi9zcmMvYmFja2VuZC91dGlscy9hZHQvcmlfdHJpZ2dlcnMuYwppbmRleCAwNmU3NzI4YzQuLjk4 YTZkYTg5ZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3JpX3RyaWdnZXJzLmMK KysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3JpX3RyaWdnZXJzLmMKQEAgLTI4MjcsNyArMjgy Nyw3IEBAIHJpX0Zhc3RQYXRoQ2hlY2soUklfQ29uc3RyYWludEluZm8gKnJpaW5mbywKIAlpZHhf cmVsID0gaW5kZXhfb3BlbihyaWluZm8tPmNvbmluZGlkLCBBY2Nlc3NTaGFyZUxvY2spOwogCiAJ c2xvdCA9IHRhYmxlX3Nsb3RfY3JlYXRlKHBrX3JlbCwgTlVMTCk7Ci0Jc2NhbmRlc2MgPSBpbmRl eF9iZWdpbnNjYW4ocGtfcmVsLCBpZHhfcmVsLAorCXNjYW5kZXNjID0gaW5kZXhfYmVnaW5zY2Fu KHBrX3JlbCwgaWR4X3JlbCwgZmFsc2UsCiAJCQkJCQkJICAgc25hcHNob3QsIE5VTEwsCiAJCQkJ CQkJICAgcmlpbmZvLT5ua2V5cywgMCwKIAkJCQkJCQkgICBTT19OT05FKTsKQEAgLTI5NjQsNyAr Mjk2NCw3IEBAIHJpX0Zhc3RQYXRoQmF0Y2hGbHVzaChSSV9GYXN0UGF0aEVudHJ5ICpmcGVudHJ5 LCBSZWxhdGlvbiBma19yZWwsCiAJICovCiAJb2xkY3h0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRv KGZwZW50cnktPmZsdXNoX2N4dCk7CiAKLQlzY2FuZGVzYyA9IGluZGV4X2JlZ2luc2Nhbihwa19y ZWwsIGlkeF9yZWwsIHNuYXBzaG90LCBOVUxMLAorCXNjYW5kZXNjID0gaW5kZXhfYmVnaW5zY2Fu KHBrX3JlbCwgaWR4X3JlbCwgZmFsc2UsIHNuYXBzaG90LCBOVUxMLAogCQkJCQkJCSAgIHJpaW5m by0+bmtleXMsIDAsIFNPX05PTkUpOwogCiAJR2V0VXNlcklkQW5kU2VjQ29udGV4dCgmc2F2ZWRf dXNlcmlkLCAmc2F2ZWRfc2VjX2NvbnRleHQpOwpAQCAtMzEwOCw2ICszMTA4LDcgQEAgcmlfRmFz dFBhdGhGbHVzaEFycmF5KFJJX0Zhc3RQYXRoRW50cnkgKmZwZW50cnksIFR1cGxlVGFibGVTbG90 ICpma19zbG90LAogCWJvb2wJCWVsZW1fYnl2YWw7CiAJY2hhcgkJZWxlbV9hbGlnbjsKIAlBcnJh eVR5cGUgICphcnI7CisJYm9vbAkJcmVjaGVjazsKIAogCUFzc2VydChmcG1ldGEpOwogCkBAIC0z MTc0LDEzICszMTc1LDE2IEBAIHJpX0Zhc3RQYXRoRmx1c2hBcnJheShSSV9GYXN0UGF0aEVudHJ5 ICpmcGVudHJ5LCBUdXBsZVRhYmxlU2xvdCAqZmtfc2xvdCwKIAkgKiBXYWxrIGFsbCBtYXRjaGVz LiAgVGhlIGluZGV4IEFNIHJldHVybnMgdGhlbSBpbiBpbmRleCBvcmRlci4gIEZvciBlYWNoCiAJ ICogbWF0Y2gsIGZpbmQgd2hpY2ggYmF0Y2ggaXRlbShzKSBpdCBzYXRpc2ZpZXMuCiAJICovCi0J d2hpbGUgKGluZGV4X2dldG5leHRfc2xvdChzY2FuZGVzYywgRm9yd2FyZFNjYW5EaXJlY3Rpb24s IHBrX3Nsb3QpKQorCXdoaWxlICh0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Qoc2NhbmRlc2MsIEZv cndhcmRTY2FuRGlyZWN0aW9uLCBwa19zbG90LAorCQkJCQkJCQkJJnJlY2hlY2spKQogCXsKIAkJ RGF0dW0JCWZvdW5kX3ZhbDsKIAkJYm9vbAkJZm91bmRfbnVsbDsKIAkJYm9vbAkJY29uY3VycmVu dGx5X3VwZGF0ZWQ7CiAJCVNjYW5LZXlEYXRhIHJlY2hlY2tfc2tleVsxXTsKIAorCQlBc3NlcnQo IXJlY2hlY2spOworCiAJCWlmICghcmlfTG9ja1BLVHVwbGUocGtfcmVsLCBwa19zbG90LCBzbmFw c2hvdCwgJmNvbmN1cnJlbnRseV91cGRhdGVkKSkKIAkJCWNvbnRpbnVlOwogCkBAIC0zMjQ0LDEz ICszMjQ4LDE3IEBAIHJpX0Zhc3RQYXRoUHJvYmVPbmUoUmVsYXRpb24gcGtfcmVsLCBSZWxhdGlv biBpZHhfcmVsLAogCQkJCQlTY2FuS2V5RGF0YSAqc2tleSwgaW50IG5rZXlzKQogewogCWJvb2wJ CWZvdW5kID0gZmFsc2U7CisJYm9vbAkJcmVjaGVjazsKIAogCWluZGV4X3Jlc2NhbihzY2FuZGVz Yywgc2tleSwgbmtleXMsIE5VTEwsIDApOwogCi0JaWYgKGluZGV4X2dldG5leHRfc2xvdChzY2Fu ZGVzYywgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIHNsb3QpKQorCWlmICh0YWJsZV9pbmRleF9nZXRu ZXh0X3Nsb3Qoc2NhbmRlc2MsIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBzbG90LAorCQkJCQkJCQkg JnJlY2hlY2spKQogCXsKIAkJYm9vbAkJY29uY3VycmVudGx5X3VwZGF0ZWQ7CiAKKwkJQXNzZXJ0 KCFyZWNoZWNrKTsKKwogCQlpZiAocmlfTG9ja1BLVHVwbGUocGtfcmVsLCBzbG90LCBzbmFwc2hv dCwKIAkJCQkJCSAgICZjb25jdXJyZW50bHlfdXBkYXRlZCkpCiAJCXsKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3Nl bGZ1bmNzLmMKaW5kZXggZDZlZmQwNzA3Li4wZjhhYTI1YTcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxm dW5jcy5jCkBAIC0xMDIsNyArMTAyLDYgQEAKICNpbmNsdWRlICJhY2Nlc3MvZ2luLmgiCiAjaW5j bHVkZSAiYWNjZXNzL3RhYmxlLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3RhYmxlYW0uaCIKLSNpbmNs dWRlICJhY2Nlc3MvdmlzaWJpbGl0eW1hcC5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfY29sbGF0 aW9uLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19vcGVyYXRvci5oIgogI2luY2x1ZGUgImNhdGFs b2cvcGdfc3RhdGlzdGljLmgiCkBAIC0yNjYsNyArMjY1LDcgQEAgc3RhdGljIGJvb2wgZ2V0X2Fj dHVhbF92YXJpYWJsZV9lbmRwb2ludChSZWxhdGlvbiBoZWFwUmVsLAogCQkJCQkJCQkJCSBTY2Fu S2V5IHNjYW5rZXlzLAogCQkJCQkJCQkJCSBpbnQxNiB0eXBMZW4sCiAJCQkJCQkJCQkJIGJvb2wg dHlwQnlWYWwsCi0JCQkJCQkJCQkJIFR1cGxlVGFibGVTbG90ICp0YWJsZXNsb3QsCisJCQkJCQkJ CQkJIFR1cGxlVGFibGVTbG90ICpzbG90LAogCQkJCQkJCQkJCSBNZW1vcnlDb250ZXh0IG91dGVy Y29udGV4dCwKIAkJCQkJCQkJCQkgRGF0dW0gKmVuZHBvaW50RGF0dW0pOwogc3RhdGljIFJlbE9w dEluZm8gKmZpbmRfam9pbl9pbnB1dF9yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbGlkcyByZWxp ZHMpOwpAQCAtNzA0MSw3ICs3MDQwLDggQEAgZ2V0X2FjdHVhbF92YXJpYWJsZV9yYW5nZShQbGFu bmVySW5mbyAqcm9vdCwgVmFyaWFibGVTdGF0RGF0YSAqdmFyZGF0YSwKIAkJCWluZGV4UmVsID0g aW5kZXhfb3BlbihpbmRleC0+aW5kZXhvaWQsIE5vTG9jayk7CiAKIAkJCS8qIGJ1aWxkIHNvbWUg c3R1ZmYgbmVlZGVkIGZvciBpbmRleHNjYW4gZXhlY3V0aW9uICovCi0JCQlzbG90ID0gdGFibGVf c2xvdF9jcmVhdGUoaGVhcFJlbCwgTlVMTCk7CisJCQlzbG90ID0gTWFrZVNpbmdsZVR1cGxlVGFi bGVTbG90KFJlbGF0aW9uR2V0RGVzY3IoaW5kZXhSZWwpLAorCQkJCQkJCQkJCQkmVFRTT3BzVmly dHVhbCk7CiAJCQlnZXRfdHlwbGVuYnl2YWwodmFyZGF0YS0+YXR0dHlwZSwgJnR5cExlbiwgJnR5 cEJ5VmFsKTsKIAogCQkJLyogc2V0IHVwIGFuIElTIE5PVCBOVUxMIHNjYW4ga2V5IHNvIHRoYXQg d2UgaWdub3JlIG51bGxzICovCkBAIC03MTEzLDggKzcxMTMsNyBAQCBnZXRfYWN0dWFsX3Zhcmlh YmxlX3JhbmdlKFBsYW5uZXJJbmZvICpyb290LCBWYXJpYWJsZVN0YXREYXRhICp2YXJkYXRhLAog ICoKICAqIHNjYW5rZXlzIGlzIGEgMS1lbGVtZW50IHNjYW5rZXkgYXJyYXkgc2V0IHVwIHRvIHJl amVjdCBudWxscy4KICAqIHR5cExlbi90eXBCeVZhbCBkZXNjcmliZSB0aGUgZGF0YXR5cGUgb2Yg dGhlIGluZGV4J3MgZmlyc3QgY29sdW1uLgotICogdGFibGVzbG90IGlzIGEgc2xvdCBzdWl0YWJs ZSB0byBob2xkIHRhYmxlIHR1cGxlcywgaW4gY2FzZSB3ZSBuZWVkCi0gKiB0byBwcm9iZSB0aGUg aGVhcC4KKyAqIHNsb3QgaXMgYSB2aXJ0dWFsIHNsb3QgdG8gcmVjZWl2ZSBlYWNoIGluZGV4IHR1 cGxlJ3MgdmFsdWVzLgogICogKFdlIGNvdWxkIGNvbXB1dGUgdGhlc2UgdmFsdWVzIGxvY2FsbHks IGJ1dCB0aGF0IHdvdWxkIG1lYW4gY29tcHV0aW5nIHRoZW0KICAqIHR3aWNlIHdoZW4gZ2V0X2Fj dHVhbF92YXJpYWJsZV9yYW5nZSBuZWVkcyBib3RoIHRoZSBtaW4gYW5kIHRoZSBtYXguKQogICoK QEAgLTcxMjgsMTkgKzcxMjcsMTYgQEAgZ2V0X2FjdHVhbF92YXJpYWJsZV9lbmRwb2ludChSZWxh dGlvbiBoZWFwUmVsLAogCQkJCQkJCSBTY2FuS2V5IHNjYW5rZXlzLAogCQkJCQkJCSBpbnQxNiB0 eXBMZW4sCiAJCQkJCQkJIGJvb2wgdHlwQnlWYWwsCi0JCQkJCQkJIFR1cGxlVGFibGVTbG90ICp0 YWJsZXNsb3QsCisJCQkJCQkJIFR1cGxlVGFibGVTbG90ICpzbG90LAogCQkJCQkJCSBNZW1vcnlD b250ZXh0IG91dGVyY29udGV4dCwKIAkJCQkJCQkgRGF0dW0gKmVuZHBvaW50RGF0dW0pCiB7CiAJ Ym9vbAkJaGF2ZV9kYXRhID0gZmFsc2U7CiAJU25hcHNob3REYXRhIFNuYXBzaG90Tm9uVmFjdXVt YWJsZTsKIAlJbmRleFNjYW5EZXNjIGluZGV4X3NjYW47Ci0JQnVmZmVyCQl2bWJ1ZmZlciA9IElu dmFsaWRCdWZmZXI7Ci0JQmxvY2tOdW1iZXIgbGFzdF9oZWFwX2Jsb2NrID0gSW52YWxpZEJsb2Nr TnVtYmVyOwotCWludAkJCW5fdmlzaXRlZF9oZWFwX3BhZ2VzID0gMDsKLQlJdGVtUG9pbnRlciB0 aWQ7Ci0JRGF0dW0JCXZhbHVlc1tJTkRFWF9NQVhfS0VZU107Ci0JYm9vbAkJaXNudWxsW0lOREVY X01BWF9LRVlTXTsKKwlib29sCQlyZWNoZWNrOworCURhdHVtCQl2YWw7CisJYm9vbAkJaXNudWxs OwogCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKIAogCS8qCkBAIC03MTg2LDk1ICs3MTgyLDQ5 IEBAIGdldF9hY3R1YWxfdmFyaWFibGVfZW5kcG9pbnQoUmVsYXRpb24gaGVhcFJlbCwKIAkgKiBh IGh1Z2UgYW1vdW50IG9mIHRpbWUgaGVyZSwgc28gd2UgZ2l2ZSB1cCBvbmNlIHdlJ3ZlIHJlYWQg dG9vIG1hbnkgaGVhcAogCSAqIHBhZ2VzLiAgV2hlbiB3ZSBmYWlsIGZvciB0aGF0IHJlYXNvbiwg dGhlIGNhbGxlciB3aWxsIGVuZCB1cCB1c2luZwogCSAqIHdoYXRldmVyIGV4dHJlbWFsIHZhbHVl IGlzIHJlY29yZGVkIGluIHBnX3N0YXRpc3RpYy4KKwkgKgorCSAqIFdlIHNldCB4c192aXNpdGVk X3BhZ2VzX2xpbWl0IHRvIHRlbGwgdGhlIHRhYmxlIEFNIHRvIGNvdW50IGRpc3RpbmN0CisJICog aGVhcCBwYWdlcyB2aXNpdGVkIGZvciBub24tdmlzaWJsZSB0dXBsZXMgYW5kIGdpdmUgdXAgYWZ0 ZXIgdGhlIGxpbWl0CisJICogaXMgZXhjZWVkZWQuCiAJICovCisjZGVmaW5lIFZJU0lURURfUEFH RVNfTElNSVQgMTAwCiAJSW5pdE5vblZhY3V1bWFibGVTbmFwc2hvdChTbmFwc2hvdE5vblZhY3V1 bWFibGUsCiAJCQkJCQkJICBHbG9iYWxWaXNUZXN0Rm9yKGhlYXBSZWwpKTsKIAotCWluZGV4X3Nj YW4gPSBpbmRleF9iZWdpbnNjYW4oaGVhcFJlbCwgaW5kZXhSZWwsCisJaW5kZXhfc2NhbiA9IGlu ZGV4X2JlZ2luc2NhbihoZWFwUmVsLCBpbmRleFJlbCwgdHJ1ZSwKIAkJCQkJCQkJICZTbmFwc2hv dE5vblZhY3V1bWFibGUsIE5VTEwsCiAJCQkJCQkJCSAxLCAwLAogCQkJCQkJCQkgU09fTk9ORSk7 Ci0JLyogU2V0IGl0IHVwIGZvciBpbmRleC1vbmx5IHNjYW4gKi8KLQlpbmRleF9zY2FuLT54c193 YW50X2l0dXAgPSB0cnVlOworCUFzc2VydChpbmRleF9zY2FuLT54c193YW50X2l0dXApOworCWlu ZGV4X3NjYW4tPnhzX3Zpc2l0ZWRfcGFnZXNfbGltaXQgPSBWSVNJVEVEX1BBR0VTX0xJTUlUOwog CWluZGV4X3Jlc2NhbihpbmRleF9zY2FuLCBzY2Fua2V5cywgMSwgTlVMTCwgMCk7CiAKIAkvKiBG ZXRjaCBmaXJzdC9uZXh0IHR1cGxlIGluIHNwZWNpZmllZCBkaXJlY3Rpb24gKi8KLQl3aGlsZSAo KHRpZCA9IGluZGV4X2dldG5leHRfdGlkKGluZGV4X3NjYW4sIGluZGV4c2NhbmRpcikpICE9IE5V TEwpCisJd2hpbGUgKHRhYmxlX2luZGV4X2dldG5leHRfc2xvdChpbmRleF9zY2FuLCBpbmRleHNj YW5kaXIsIHNsb3QsICZyZWNoZWNrKSkKIAl7Ci0JCUJsb2NrTnVtYmVyIGJsb2NrID0gSXRlbVBv aW50ZXJHZXRCbG9ja051bWJlcih0aWQpOwotCi0JCWlmICghVk1fQUxMX1ZJU0lCTEUoaGVhcFJl bCwKLQkJCQkJCQlibG9jaywKLQkJCQkJCQkmdm1idWZmZXIpKQotCQl7Ci0JCQkvKiBSYXRzLCB3 ZSBoYXZlIHRvIHZpc2l0IHRoZSBoZWFwIHRvIGNoZWNrIHZpc2liaWxpdHkgKi8KLQkJCWlmICgh aW5kZXhfZmV0Y2hfaGVhcChpbmRleF9zY2FuLCB0YWJsZXNsb3QpKQotCQkJewotCQkJCS8qCi0J CQkJICogTm8gdmlzaWJsZSB0dXBsZSBmb3IgdGhpcyBpbmRleCBlbnRyeSwgc28gd2UgbmVlZCB0 bwotCQkJCSAqIGFkdmFuY2UgdG8gdGhlIG5leHQgZW50cnkuICBCZWZvcmUgZG9pbmcgc28sIGNv dW50IGhlYXAKLQkJCQkgKiBwYWdlIGZldGNoZXMgYW5kIGdpdmUgdXAgaWYgd2UndmUgZG9uZSB0 b28gbWFueS4KLQkJCQkgKgotCQkJCSAqIFdlIGRvbid0IGNoYXJnZSBhIHBhZ2UgZmV0Y2ggaWYg dGhpcyBpcyB0aGUgc2FtZSBoZWFwIHBhZ2UKLQkJCQkgKiBhcyB0aGUgcHJldmlvdXMgdHVwbGUu ICBUaGlzIGlzIG9uIHRoZSBjb25zZXJ2YXRpdmUgc2lkZSwKLQkJCQkgKiBzaW5jZSBvdGhlciBy ZWNlbnRseS1hY2Nlc3NlZCBwYWdlcyBhcmUgcHJvYmFibHkgc3RpbGwgaW4KLQkJCQkgKiBidWZm ZXJzIHRvbzsgYnV0IGl0J3MgZ29vZCBlbm91Z2ggZm9yIHRoaXMgaGV1cmlzdGljLgotCQkJCSAq LwotI2RlZmluZSBWSVNJVEVEX1BBR0VTX0xJTUlUIDEwMAotCi0JCQkJaWYgKGJsb2NrICE9IGxh c3RfaGVhcF9ibG9jaykKLQkJCQl7Ci0JCQkJCWxhc3RfaGVhcF9ibG9jayA9IGJsb2NrOwotCQkJ CQluX3Zpc2l0ZWRfaGVhcF9wYWdlcysrOwotCQkJCQlpZiAobl92aXNpdGVkX2hlYXBfcGFnZXMg PiBWSVNJVEVEX1BBR0VTX0xJTUlUKQotCQkJCQkJYnJlYWs7Ci0JCQkJfQotCi0JCQkJY29udGlu dWU7CQkvKiBubyB2aXNpYmxlIHR1cGxlLCB0cnkgbmV4dCBpbmRleCBlbnRyeSAqLwotCQkJfQot Ci0JCQkvKiBXZSBkb24ndCBhY3R1YWxseSBuZWVkIHRoZSBoZWFwIHR1cGxlIGZvciBhbnl0aGlu ZyAqLwotCQkJRXhlY0NsZWFyVHVwbGUodGFibGVzbG90KTsKLQotCQkJLyoKLQkJCSAqIFdlIGRv bid0IGNhcmUgd2hldGhlciB0aGVyZSdzIG1vcmUgdGhhbiBvbmUgdmlzaWJsZSB0dXBsZSBpbgot CQkJICogdGhlIEhPVCBjaGFpbjsgaWYgYW55IGFyZSB2aXNpYmxlLCB0aGF0J3MgZ29vZCBlbm91 Z2guCi0JCQkgKi8KLQkJfQotCi0JCS8qCi0JCSAqIFdlIGV4cGVjdCB0aGF0IHRoZSBpbmRleCB3 aWxsIHJldHVybiBkYXRhIGluIEluZGV4VHVwbGUgbm90Ci0JCSAqIEhlYXBUdXBsZSBmb3JtYXQu Ci0JCSAqLwotCQlpZiAoIWluZGV4X3NjYW4tPnhzX2l0dXApCi0JCQllbG9nKEVSUk9SLCAibm8g ZGF0YSByZXR1cm5lZCBmb3IgaW5kZXgtb25seSBzY2FuIik7Ci0KIAkJLyoKIAkJICogV2UgZG8g bm90IHlldCBzdXBwb3J0IHJlY2hlY2sgaGVyZS4KIAkJICovCi0JCWlmIChpbmRleF9zY2FuLT54 c19yZWNoZWNrKQorCQlpZiAocmVjaGVjaykKIAkJCWJyZWFrOwogCi0JCS8qIE9LIHRvIGRlY29u c3RydWN0IHRoZSBpbmRleCB0dXBsZSAqLwotCQlpbmRleF9kZWZvcm1fdHVwbGUoaW5kZXhfc2Nh bi0+eHNfaXR1cCwKLQkJCQkJCSAgIGluZGV4X3NjYW4tPnhzX2l0dXBkZXNjLAotCQkJCQkJICAg dmFsdWVzLCBpc251bGwpOworCQkvKiBSZWFkIHRoZSBpbmRleCdzIGZpcnN0IGNvbHVtbiB2YWx1 ZSBvdXQgb2YgdGhlIHNsb3QgKi8KKwkJdmFsID0gc2xvdF9nZXRhdHRyKHNsb3QsIDEsICZpc251 bGwpOwogCiAJCS8qIFNob3VsZG4ndCBoYXZlIGdvdCBhIG51bGwsIGJ1dCBiZSBjYXJlZnVsICov Ci0JCWlmIChpc251bGxbMF0pCisJCWlmIChpc251bGwpCiAJCQllbG9nKEVSUk9SLCAiZm91bmQg dW5leHBlY3RlZCBudWxsIHZhbHVlIGluIGluZGV4IFwiJXNcIiIsCiAJCQkJIFJlbGF0aW9uR2V0 UmVsYXRpb25OYW1lKGluZGV4UmVsKSk7CiAKIAkJLyogQ29weSB0aGUgaW5kZXggY29sdW1uIHZh bHVlIG91dCB0byBjYWxsZXIncyBjb250ZXh0ICovCiAJCW9sZGNvbnRleHQgPSBNZW1vcnlDb250 ZXh0U3dpdGNoVG8ob3V0ZXJjb250ZXh0KTsKLQkJKmVuZHBvaW50RGF0dW0gPSBkYXR1bUNvcHko dmFsdWVzWzBdLCB0eXBCeVZhbCwgdHlwTGVuKTsKKwkJKmVuZHBvaW50RGF0dW0gPSBkYXR1bUNv cHkodmFsLCB0eXBCeVZhbCwgdHlwTGVuKTsKIAkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNv bnRleHQpOwogCQloYXZlX2RhdGEgPSB0cnVlOwogCQlicmVhazsKIAl9CiAKLQlpZiAodm1idWZm ZXIgIT0gSW52YWxpZEJ1ZmZlcikKLQkJUmVsZWFzZUJ1ZmZlcih2bWJ1ZmZlcik7CisJRXhlY0Ns ZWFyVHVwbGUoc2xvdCk7CiAJaW5kZXhfZW5kc2NhbihpbmRleF9zY2FuKTsKIAogCXJldHVybiBo YXZlX2RhdGE7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL2luZGV4L01ha2VmaWxlIGIv c3JjL3Rlc3QvbW9kdWxlcy9pbmRleC9NYWtlZmlsZQppbmRleCAyOTA0NzA0NGUuLjc5NTQ3YmM5 NiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy9pbmRleC9NYWtlZmlsZQorKysgYi9zcmMv dGVzdC9tb2R1bGVzL2luZGV4L01ha2VmaWxlCkBAIC0xLDggKzEsMTggQEAKICMgc3JjL3Rlc3Qv bW9kdWxlcy9pbmRleC9NYWtlZmlsZQogCitNT0RVTEVfYmlnID0gdGVzdF9pbmRleHNjYW4KK09C SlMgPSBcCisJJChXSU4zMlJFUykgXAorCXRlc3RfaW5kZXhzY2FuLm8KK0VYVEVOU0lPTiA9IHRl c3RfaW5kZXhzY2FuCitEQVRBID0gdGVzdF9pbmRleHNjYW4tLTEuMC5zcWwKK1BHRklMRURFU0Mg PSAidGVzdF9pbmRleHNjYW4gLSB0ZXN0IGluZGV4IHNjYW4gaW50ZXJuYWxzIgorCiBFWFRSQV9J TlNUQUxMID0gY29udHJpYi9idHJlZV9naW4gY29udHJpYi9idHJlZV9naXN0CiAKLUlTT0xBVElP TiA9IGtpbGx0dXBsZXMKK1JFR1JFU1MgPSBob3RfY2hhaW4KKworSVNPTEFUSU9OID0gZGlydHlf c25hcHNob3Qga2lsbHR1cGxlcwogCiBpZmRlZiBVU0VfUEdYUwogUEdfQ09ORklHID0gcGdfY29u ZmlnCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL2luZGV4L2V4cGVjdGVkL2RpcnR5X3Nu YXBzaG90Lm91dCBiL3NyYy90ZXN0L21vZHVsZXMvaW5kZXgvZXhwZWN0ZWQvZGlydHlfc25hcHNo b3Qub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMC4uMDA0ZjljMDQ1Ci0t LSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9pbmRleC9leHBlY3RlZC9kaXJ0eV9z bmFwc2hvdC5vdXQKQEAgLTAsMCArMSwxNTMgQEAKK1BhcnNlZCB0ZXN0IHNwZWMgd2l0aCAyIHNl c3Npb25zCisKK3N0YXJ0aW5nIHBlcm11dGF0aW9uOiB3X2JlZ2luIHdfdXBkYXRlX3ZhbCB3X2hv dHN0YXQgb19iZWdpbiBvX2RpcnR5IG9fbXZjYyB3X2NvbW1pdCBvX2RpcnR5IG9fbXZjYyBvX2Nv bW1pdAorc3RlcCB3X2JlZ2luOiBCRUdJTjsKK3N0ZXAgd191cGRhdGVfdmFsOiBVUERBVEUgZGly dHlzbmFwIFNFVCB2YWwgPSAyMCBXSEVSRSB2YWwgPSAxMDsKK3N0ZXAgd19ob3RzdGF0OiBTRUxF Q1QgcGdfc3RhdF9nZXRfeGFjdF90dXBsZXNfaG90X3VwZGF0ZWQoJ2RpcnR5c25hcCc6OnJlZ2Ns YXNzKSBBUyBob3RfdXBkYXRlZDsKK2hvdF91cGRhdGVkCistLS0tLS0tLS0tLQorICAgICAgICAg IDAKKygxIHJvdykKKworc3RlcCBvX2JlZ2luOiBCRUdJTiBJU09MQVRJT04gTEVWRUwgUkVQRUFU QUJMRSBSRUFEOworc3RlcCBvX2RpcnR5OiBTRUxFQ1QgKiBGUk9NIGluZGV4X3NjYW5fdGlkcygn ZGlydHlzbmFwX2lkeCcsICdkaXJ0eScpOworaW5kZXhfc2Nhbl90aWRzCistLS0tLS0tLS0tLS0t LS0KKygwLDEpICAgICAgICAgIAorKDAsMikgICAgICAgICAgCisoMiByb3dzKQorCitzdGVwIG9f bXZjYzogU0VMRUNUICogRlJPTSBpbmRleF9zY2FuX3RpZHMoJ2RpcnR5c25hcF9pZHgnLCAnbXZj YycpOworaW5kZXhfc2Nhbl90aWRzCistLS0tLS0tLS0tLS0tLS0KKygwLDEpICAgICAgICAgIAor KDEgcm93KQorCitzdGVwIHdfY29tbWl0OiBDT01NSVQ7CitzdGVwIG9fZGlydHk6IFNFTEVDVCAq IEZST00gaW5kZXhfc2Nhbl90aWRzKCdkaXJ0eXNuYXBfaWR4JywgJ2RpcnR5Jyk7CitpbmRleF9z Y2FuX3RpZHMKKy0tLS0tLS0tLS0tLS0tLQorKDAsMikgICAgICAgICAgCisoMSByb3cpCisKK3N0 ZXAgb19tdmNjOiBTRUxFQ1QgKiBGUk9NIGluZGV4X3NjYW5fdGlkcygnZGlydHlzbmFwX2lkeCcs ICdtdmNjJyk7CitpbmRleF9zY2FuX3RpZHMKKy0tLS0tLS0tLS0tLS0tLQorKDAsMSkgICAgICAg ICAgCisoMSByb3cpCisKK3N0ZXAgb19jb21taXQ6IENPTU1JVDsKKworc3RhcnRpbmcgcGVybXV0 YXRpb246IHdfYmVnaW4gd191cGRhdGVfdmFsIHdfaG90c3RhdCBvX2JlZ2luIG9fZGlydHkgb19t dmNjIHdfcm9sbGJhY2sgb19kaXJ0eSBvX212Y2Mgb19jb21taXQKK3N0ZXAgd19iZWdpbjogQkVH SU47CitzdGVwIHdfdXBkYXRlX3ZhbDogVVBEQVRFIGRpcnR5c25hcCBTRVQgdmFsID0gMjAgV0hF UkUgdmFsID0gMTA7CitzdGVwIHdfaG90c3RhdDogU0VMRUNUIHBnX3N0YXRfZ2V0X3hhY3RfdHVw bGVzX2hvdF91cGRhdGVkKCdkaXJ0eXNuYXAnOjpyZWdjbGFzcykgQVMgaG90X3VwZGF0ZWQ7Cito b3RfdXBkYXRlZAorLS0tLS0tLS0tLS0KKyAgICAgICAgICAwCisoMSByb3cpCisKK3N0ZXAgb19i ZWdpbjogQkVHSU4gSVNPTEFUSU9OIExFVkVMIFJFUEVBVEFCTEUgUkVBRDsKK3N0ZXAgb19kaXJ0 eTogU0VMRUNUICogRlJPTSBpbmRleF9zY2FuX3RpZHMoJ2RpcnR5c25hcF9pZHgnLCAnZGlydHkn KTsKK2luZGV4X3NjYW5fdGlkcworLS0tLS0tLS0tLS0tLS0tCisoMCwxKSAgICAgICAgICAKKygw LDIpICAgICAgICAgIAorKDIgcm93cykKKworc3RlcCBvX212Y2M6IFNFTEVDVCAqIEZST00gaW5k ZXhfc2Nhbl90aWRzKCdkaXJ0eXNuYXBfaWR4JywgJ212Y2MnKTsKK2luZGV4X3NjYW5fdGlkcwor LS0tLS0tLS0tLS0tLS0tCisoMCwxKSAgICAgICAgICAKKygxIHJvdykKKworc3RlcCB3X3JvbGxi YWNrOiBST0xMQkFDSzsKK3N0ZXAgb19kaXJ0eTogU0VMRUNUICogRlJPTSBpbmRleF9zY2FuX3Rp ZHMoJ2RpcnR5c25hcF9pZHgnLCAnZGlydHknKTsKK2luZGV4X3NjYW5fdGlkcworLS0tLS0tLS0t LS0tLS0tCisoMCwxKSAgICAgICAgICAKKygxIHJvdykKKworc3RlcCBvX212Y2M6IFNFTEVDVCAq IEZST00gaW5kZXhfc2Nhbl90aWRzKCdkaXJ0eXNuYXBfaWR4JywgJ212Y2MnKTsKK2luZGV4X3Nj YW5fdGlkcworLS0tLS0tLS0tLS0tLS0tCisoMCwxKSAgICAgICAgICAKKygxIHJvdykKKworc3Rl cCBvX2NvbW1pdDogQ09NTUlUOworCitzdGFydGluZyBwZXJtdXRhdGlvbjogd19iZWdpbiB3X3Vw ZGF0ZV9ub3RlIHdfaG90c3RhdCBvX2JlZ2luIG9fZGlydHkgb19tdmNjIHdfY29tbWl0IG9fZGly dHkgb19tdmNjIG9fY29tbWl0CitzdGVwIHdfYmVnaW46IEJFR0lOOworc3RlcCB3X3VwZGF0ZV9u b3RlOiBVUERBVEUgZGlydHlzbmFwIFNFVCBub3RlID0gJ3YyJyBXSEVSRSB2YWwgPSAxMDsKK3N0 ZXAgd19ob3RzdGF0OiBTRUxFQ1QgcGdfc3RhdF9nZXRfeGFjdF90dXBsZXNfaG90X3VwZGF0ZWQo J2RpcnR5c25hcCc6OnJlZ2NsYXNzKSBBUyBob3RfdXBkYXRlZDsKK2hvdF91cGRhdGVkCistLS0t LS0tLS0tLQorICAgICAgICAgIDEKKygxIHJvdykKKworc3RlcCBvX2JlZ2luOiBCRUdJTiBJU09M QVRJT04gTEVWRUwgUkVQRUFUQUJMRSBSRUFEOworc3RlcCBvX2RpcnR5OiBTRUxFQ1QgKiBGUk9N IGluZGV4X3NjYW5fdGlkcygnZGlydHlzbmFwX2lkeCcsICdkaXJ0eScpOworaW5kZXhfc2Nhbl90 aWRzCistLS0tLS0tLS0tLS0tLS0KKygwLDEpICAgICAgICAgIAorKDAsMikgICAgICAgICAgCiso MiByb3dzKQorCitzdGVwIG9fbXZjYzogU0VMRUNUICogRlJPTSBpbmRleF9zY2FuX3RpZHMoJ2Rp cnR5c25hcF9pZHgnLCAnbXZjYycpOworaW5kZXhfc2Nhbl90aWRzCistLS0tLS0tLS0tLS0tLS0K KygwLDEpICAgICAgICAgIAorKDEgcm93KQorCitzdGVwIHdfY29tbWl0OiBDT01NSVQ7CitzdGVw IG9fZGlydHk6IFNFTEVDVCAqIEZST00gaW5kZXhfc2Nhbl90aWRzKCdkaXJ0eXNuYXBfaWR4Jywg J2RpcnR5Jyk7CitpbmRleF9zY2FuX3RpZHMKKy0tLS0tLS0tLS0tLS0tLQorKDAsMikgICAgICAg ICAgCisoMSByb3cpCisKK3N0ZXAgb19tdmNjOiBTRUxFQ1QgKiBGUk9NIGluZGV4X3NjYW5fdGlk cygnZGlydHlzbmFwX2lkeCcsICdtdmNjJyk7CitpbmRleF9zY2FuX3RpZHMKKy0tLS0tLS0tLS0t LS0tLQorKDAsMSkgICAgICAgICAgCisoMSByb3cpCisKK3N0ZXAgb19jb21taXQ6IENPTU1JVDsK Kworc3RhcnRpbmcgcGVybXV0YXRpb246IHdfYmVnaW4gd191cGRhdGVfbm90ZSB3X2hvdHN0YXQg b19iZWdpbiBvX2RpcnR5IG9fbXZjYyB3X3JvbGxiYWNrIG9fZGlydHkgb19tdmNjIG9fY29tbWl0 CitzdGVwIHdfYmVnaW46IEJFR0lOOworc3RlcCB3X3VwZGF0ZV9ub3RlOiBVUERBVEUgZGlydHlz bmFwIFNFVCBub3RlID0gJ3YyJyBXSEVSRSB2YWwgPSAxMDsKK3N0ZXAgd19ob3RzdGF0OiBTRUxF Q1QgcGdfc3RhdF9nZXRfeGFjdF90dXBsZXNfaG90X3VwZGF0ZWQoJ2RpcnR5c25hcCc6OnJlZ2Ns YXNzKSBBUyBob3RfdXBkYXRlZDsKK2hvdF91cGRhdGVkCistLS0tLS0tLS0tLQorICAgICAgICAg IDEKKygxIHJvdykKKworc3RlcCBvX2JlZ2luOiBCRUdJTiBJU09MQVRJT04gTEVWRUwgUkVQRUFU QUJMRSBSRUFEOworc3RlcCBvX2RpcnR5OiBTRUxFQ1QgKiBGUk9NIGluZGV4X3NjYW5fdGlkcygn ZGlydHlzbmFwX2lkeCcsICdkaXJ0eScpOworaW5kZXhfc2Nhbl90aWRzCistLS0tLS0tLS0tLS0t LS0KKygwLDEpICAgICAgICAgIAorKDAsMikgICAgICAgICAgCisoMiByb3dzKQorCitzdGVwIG9f bXZjYzogU0VMRUNUICogRlJPTSBpbmRleF9zY2FuX3RpZHMoJ2RpcnR5c25hcF9pZHgnLCAnbXZj YycpOworaW5kZXhfc2Nhbl90aWRzCistLS0tLS0tLS0tLS0tLS0KKygwLDEpICAgICAgICAgIAor KDEgcm93KQorCitzdGVwIHdfcm9sbGJhY2s6IFJPTExCQUNLOworc3RlcCBvX2RpcnR5OiBTRUxF Q1QgKiBGUk9NIGluZGV4X3NjYW5fdGlkcygnZGlydHlzbmFwX2lkeCcsICdkaXJ0eScpOworaW5k ZXhfc2Nhbl90aWRzCistLS0tLS0tLS0tLS0tLS0KKygwLDEpICAgICAgICAgIAorKDEgcm93KQor CitzdGVwIG9fbXZjYzogU0VMRUNUICogRlJPTSBpbmRleF9zY2FuX3RpZHMoJ2RpcnR5c25hcF9p ZHgnLCAnbXZjYycpOworaW5kZXhfc2Nhbl90aWRzCistLS0tLS0tLS0tLS0tLS0KKygwLDEpICAg ICAgICAgIAorKDEgcm93KQorCitzdGVwIG9fY29tbWl0OiBDT01NSVQ7CmRpZmYgLS1naXQgYS9z cmMvdGVzdC9tb2R1bGVzL2luZGV4L2V4cGVjdGVkL2hvdF9jaGFpbi5vdXQgYi9zcmMvdGVzdC9t b2R1bGVzL2luZGV4L2V4cGVjdGVkL2hvdF9jaGFpbi5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwLi4wZTc4MzJhODQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9t b2R1bGVzL2luZGV4L2V4cGVjdGVkL2hvdF9jaGFpbi5vdXQKQEAgLTAsMCArMSw1NiBAQAorLS0g Tm9uLU1WQ0MgaW5kZXggc2NhbnMgbXVzdCByZXR1cm4gZXZlcnkgdmlzaWJsZSBtZW1iZXIgb2Yg YSBIT1QgY2hhaW4uCistLSBWZXJpZnkgdGhhdCB0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3QgZ2V0 cyB0aGF0IHJpZ2h0IGluIGEgdmFyaWV0eSBvZiBjYXNlcy4KK0NSRUFURSBFWFRFTlNJT04gdGVz dF9pbmRleHNjYW47CistLSBTaW5nbGUtcGFnZSB0YWJsZTsgYWxsIFRJRHMgYmVsb3cgYXJlIGRl dGVybWluaXN0aWM6IGEgZnJlc2ggdGFibGUgZ2V0cworLS0gYmxvY2sgMCwgaGVhcF9pbnNlcnQv aGVhcF91cGRhdGUgYXNzaWduIGxpbmUgcG9pbnRlcnMgc2VxdWVudGlhbGx5LCBhbmQgdGhlCist LSByb3dzIGFyZSB0aW55IHRvIGF2b2lkIGFueSB0b2FzdGluZy4KK0NSRUFURSBUQUJMRSBob3Rf Y2hhaW5fdGFiIChpZCBpbnQsIGZpbGxlciB0ZXh0KSBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQg PSBvZmYpOworQ1JFQVRFIElOREVYIGhvdF9jaGFpbl9pZHggT04gaG90X2NoYWluX3RhYiAoaWQp OworSU5TRVJUIElOVE8gaG90X2NoYWluX3RhYiBWQUxVRVMgKDEsICdyMXYxJyksICgyLCAncjJ2 MScpOyAgLS0gKDAsMSkgKDAsMikKK0JFR0lOOworLS0gQ3JlYXRlIEhPVCBjaGFpbnMuICBUaGVz ZSB1cGRhdGVzIHRvdWNoIG9ubHkgdGhlIG5vbi1pbmRleGVkIGNvbHVtbgorLS0gImZpbGxlciIs IGFuZCBldmVyeSBjaGFpbiBtZW1iZXIgc3RheXMgdmlzaWJsZSB0byBTbmFwc2hvdEFueSBiZWNh dXNlIHRoZQorLS0gZGVsZXRpbmcgdHJhbnNhY3Rpb24gKHVzKSBpcyBzdGlsbCBvcGVuLgorVVBE QVRFIGhvdF9jaGFpbl90YWIgU0VUIGZpbGxlciA9ICdyMXYyJyBXSEVSRSBpZCA9IDE7ICAgLS0g KDAsMykKK1VQREFURSBob3RfY2hhaW5fdGFiIFNFVCBmaWxsZXIgPSAncjF2MycgV0hFUkUgaWQg PSAxOyAgIC0tICgwLDQpCitVUERBVEUgaG90X2NoYWluX3RhYiBTRVQgZmlsbGVyID0gJ3IydjIn IFdIRVJFIGlkID0gMjsgICAtLSAoMCw1KQorLS0gVmVyaWZ5IHRoYXQgYWxsIHRocmVlIHVwZGF0 ZXMgd2VyZSBIT1QgdXNpbmcgYmFja2VuZC1sb2NhbCB4YWN0IGNvdW50ZXI6CitTRUxFQ1QgcGdf c3RhdF9nZXRfeGFjdF90dXBsZXNfaG90X3VwZGF0ZWQoJ2hvdF9jaGFpbl90YWInOjpyZWdjbGFz cykgQVMgaG90X3VwZGF0ZWQ7CisgaG90X3VwZGF0ZWQgCistLS0tLS0tLS0tLS0tCisgICAgICAg ICAgIDMKKygxIHJvdykKKworLS0gU25hcHNob3RBbnk6IGV2ZXJ5IGNoYWluIG1lbWJlcgorU0VM RUNUICogRlJPTSBpbmRleF9zY2FuX3RpZHMoJ2hvdF9jaGFpbl9pZHgnLCAnYW55Jyk7CisgaW5k ZXhfc2Nhbl90aWRzIAorLS0tLS0tLS0tLS0tLS0tLS0KKyAoMCwxKQorICgwLDMpCisgKDAsNCkK KyAoMCwyKQorICgwLDUpCisoNSByb3dzKQorCistLSBNVkNDIHNjYW4sIGZvciBjb250cmFzdDog b25seSB0aGUgbmV3ZXN0IG1lbWJlciBvZiBlYWNoIGNoYWluCitTRUxFQ1QgKiBGUk9NIGluZGV4 X3NjYW5fdGlkcygnaG90X2NoYWluX2lkeCcsICdtdmNjJyk7CisgaW5kZXhfc2Nhbl90aWRzIAor LS0tLS0tLS0tLS0tLS0tLS0KKyAoMCw0KQorICgwLDUpCisoMiByb3dzKQorCistLSBiYWNrd2Fy ZDogaW5kZXggZW50cmllcyBpbiByZXZlcnNlIGtleSBvcmRlciwgY2hhaW5zIHN0aWxsIGluIEFT QyBjaGFpbiBvcmRlcgorU0VMRUNUICogRlJPTSBpbmRleF9zY2FuX3RpZHMoJ2hvdF9jaGFpbl9p ZHgnLCAnYW55JywgJ2JhY2t3YXJkJyk7CisgaW5kZXhfc2Nhbl90aWRzIAorLS0tLS0tLS0tLS0t LS0tLS0KKyAoMCwyKQorICgwLDUpCisgKDAsMSkKKyAoMCwzKQorICgwLDQpCisoNSByb3dzKQor CitDT01NSVQ7CitEUk9QIFRBQkxFIGhvdF9jaGFpbl90YWI7CitEUk9QIEVYVEVOU0lPTiB0ZXN0 X2luZGV4c2NhbjsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvaW5kZXgvbWVzb24uYnVp bGQgYi9zcmMvdGVzdC9tb2R1bGVzL2luZGV4L21lc29uLmJ1aWxkCmluZGV4IDgzNGNlMDgxZi4u NzVhZTQyZmUwIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL2luZGV4L21lc29uLmJ1aWxk CisrKyBiL3NyYy90ZXN0L21vZHVsZXMvaW5kZXgvbWVzb24uYnVpbGQKQEAgLTEsMTEgKzEsMzgg QEAKICMgQ29weXJpZ2h0IChjKSAyMDI1LTIwMjYsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3Bt ZW50IEdyb3VwCiAKK3Rlc3RfaW5kZXhzY2FuX3NvdXJjZXMgPSBmaWxlcygKKyAgJ3Rlc3RfaW5k ZXhzY2FuLmMnLAorKQorCitpZiBob3N0X3N5c3RlbSA9PSAnd2luZG93cycKKyAgdGVzdF9pbmRl eHNjYW5fc291cmNlcyArPSByY19saWJfZ2VuLnByb2Nlc3Mod2luMzJ2ZXJfcmMsIGV4dHJhX2Fy Z3M6IFsKKyAgICAnLS1OQU1FJywgJ3Rlc3RfaW5kZXhzY2FuJywKKyAgICAnLS1GSUxFREVTQycs ICd0ZXN0X2luZGV4c2NhbiAtIHRlc3QgaW5kZXggc2NhbiBpbnRlcm5hbHMnLF0pCitlbmRpZgor Cit0ZXN0X2luZGV4c2NhbiA9IHNoYXJlZF9tb2R1bGUoJ3Rlc3RfaW5kZXhzY2FuJywKKyAgdGVz dF9pbmRleHNjYW5fc291cmNlcywKKyAga3dhcmdzOiBwZ190ZXN0X21vZF9hcmdzLAorKQordGVz dF9pbnN0YWxsX2xpYnMgKz0gdGVzdF9pbmRleHNjYW4KKwordGVzdF9pbnN0YWxsX2RhdGEgKz0g ZmlsZXMoCisgICd0ZXN0X2luZGV4c2Nhbi5jb250cm9sJywKKyAgJ3Rlc3RfaW5kZXhzY2FuLS0x LjAuc3FsJywKKykKKwogdGVzdHMgKz0gewogICAnbmFtZSc6ICdpbmRleCcsCiAgICdzZCc6IG1l c29uLmN1cnJlbnRfc291cmNlX2RpcigpLAogICAnYmQnOiBtZXNvbi5jdXJyZW50X2J1aWxkX2Rp cigpLAorICAncmVncmVzcyc6IHsKKyAgICAnc3FsJzogWworICAgICAgJ2hvdF9jaGFpbicsCisg ICAgXSwKKyAgfSwKICAgJ2lzb2xhdGlvbic6IHsKICAgICAnc3BlY3MnOiBbCisgICAgICAnZGly dHlfc25hcHNob3QnLAogICAgICAgJ2tpbGx0dXBsZXMnLAogICAgIF0sCiAgIH0sCmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9tb2R1bGVzL2luZGV4L3NwZWNzL2RpcnR5X3NuYXBzaG90LnNwZWMgYi9z cmMvdGVzdC9tb2R1bGVzL2luZGV4L3NwZWNzL2RpcnR5X3NuYXBzaG90LnNwZWMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwLi4wMWQwZDAwOTEKLS0tIC9kZXYvbnVsbAorKysg Yi9zcmMvdGVzdC9tb2R1bGVzL2luZGV4L3NwZWNzL2RpcnR5X3NuYXBzaG90LnNwZWMKQEAgLTAs MCArMSw2MSBAQAorIyBBIGRpcnR5IHNuYXBzaG90IHNlZXMgY29tbWl0dGVkIHJvd3MgcGx1cyB0 aGUgaW4tcHJvZ3Jlc3MgY2hhbmdlcyBvZiBvdGhlcgorIyB0cmFuc2FjdGlvbnM7IGFuIE1WQ0Mg c25hcHNob3Qgc2VlcyBvbmx5IGEgY29uc2lzdGVudCBjb21taXR0ZWQgcG9pbnQgaW4KKyMgdGlt ZS4gIENvbnN0cmFpbnQgZW5mb3JjZW1lbnQgKHVuaXF1ZSwgZm9yZWlnbiBrZXkpIGRlcGVuZHMg b24gdGhlIGZvcm1lcjogYQorIyBkaXJ0eS1zbmFwc2hvdCBpbmRleCBzY2FuIG11c3QgZmluZCBh IHJvdyB0aGF0IGEgY29uY3VycmVudCwgbm90LXlldC1jb21taXR0ZWQKKyMgdHJhbnNhY3Rpb24g aXMgY3JlYXRpbmcsIGFuZCBtdXN0IHN0b3AgZmluZGluZyB0aGUgc3VwZXJzZWRlZCByb3cgdGhl IGluc3RhbnQKKyMgdGhhdCB0cmFuc2FjdGlvbiBjb21taXRzIC0tIGV2ZW4gd2hpbGUgYW4gb2xk ZXIgTVZDQyBzbmFwc2hvdCBzdGlsbCBzZWVzIGl0LgorIworIyBUaGUgZm91ciBwZXJtdXRhdGlv bnMgY292ZXIgdHdvIGF4ZXMuICBIT1QtbmVzczogdGhlIHdyaXRlciBjaGFuZ2VzIGEKKyMgbm9u LWluZGV4ZWQgY29sdW1uIChvbGQgYW5kIG5ldyB2ZXJzaW9ucyBzaGFyZSBvbmUgaW5kZXggZW50 cnkgdmlhIGEgSE9UCisjIGNoYWluKSBvciB0aGUgaW5kZXhlZCBjb2x1bW4gKGVhY2ggdmVyc2lv biBpcyBpdHMgb3duIGluZGV4IGVudHJ5KS4gIE91dGNvbWU6CisjIHRoZSB3cml0ZXIgY29tbWl0 cyBvciBhYm9ydHMuICBUaGUgZGlydHkvTVZDQyB2aXNpYmlsaXR5IHJlc3VsdCBkZXBlbmRzIG9u bHkKKyMgb24gY29tbWl0LXZzLWFib3J0LCBuZXZlciBvbiBIT1QtdnMtbm90OyB3X2hvdHN0YXQg cmVwb3J0cyB3aGljaCBwYXRoIHJhbi4KKworc2V0dXAKK3sKKyAgICBDUkVBVEUgRVhURU5TSU9O IHRlc3RfaW5kZXhzY2FuOworICAgIENSRUFURSBUQUJMRSBkaXJ0eXNuYXAgKHZhbCBpbnQsIG5v dGUgdGV4dCkgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gb2ZmKTsKKyAgICBDUkVBVEUgSU5E RVggZGlydHlzbmFwX2lkeCBPTiBkaXJ0eXNuYXAgKHZhbCk7CisgICAgSU5TRVJUIElOVE8gZGly dHlzbmFwIFZBTFVFUyAoMTAsICd2MScpOyAgLS0gb2xkIHZlcnNpb24gYXQgKDAsMSkKK30KKwor dGVhcmRvd24KK3sKKyAgICBEUk9QIFRBQkxFIGRpcnR5c25hcDsKKyAgICBEUk9QIEVYVEVOU0lP TiB0ZXN0X2luZGV4c2NhbjsKK30KKworIyBUaGUgd3JpdGVyIGNyZWF0ZXMgYSBzZWNvbmQsIGFz LXlldC11bmNvbW1pdHRlZCB2ZXJzaW9uIG9mIHRoZSByb3cgYXQgKDAsMiksCisjIGVpdGhlciBh cyBhIG5ldyBpbmRleCBlbnRyeSAod191cGRhdGVfdmFsKSBvciBhIEhPVC1jaGFpbiBtZW1iZXIK KyMgKHdfdXBkYXRlX25vdGUpLiAgd19ob3RzdGF0IHJlcG9ydHMgdGhlIGJhY2tlbmQncyBIT1Qt dXBkYXRlIGNvdW50Lgorc2Vzc2lvbiB3cml0ZXIKK3N0ZXAgd19iZWdpbiAgICAgICB7IEJFR0lO OyB9CitzdGVwIHdfdXBkYXRlX3ZhbCAgeyBVUERBVEUgZGlydHlzbmFwIFNFVCB2YWwgPSAyMCBX SEVSRSB2YWwgPSAxMDsgfQorc3RlcCB3X3VwZGF0ZV9ub3RlIHsgVVBEQVRFIGRpcnR5c25hcCBT RVQgbm90ZSA9ICd2MicgV0hFUkUgdmFsID0gMTA7IH0KK3N0ZXAgd19ob3RzdGF0ICAgICB7IFNF TEVDVCBwZ19zdGF0X2dldF94YWN0X3R1cGxlc19ob3RfdXBkYXRlZCgnZGlydHlzbmFwJzo6cmVn Y2xhc3MpIEFTIGhvdF91cGRhdGVkOyB9CitzdGVwIHdfY29tbWl0ICAgICAgeyBDT01NSVQ7IH0K K3N0ZXAgd19yb2xsYmFjayAgICB7IFJPTExCQUNLOyB9CisKKyMgVGhlIG9ic2VydmVyIGNvbXBh cmVzIGJvdGggc25hcHNob3QgdHlwZXMgZnJvbSBpbnNpZGUgb25lIFJFUEVBVEFCTEUgUkVBRAor IyB0cmFuc2FjdGlvbiwgc28gaXRzIE1WQ0Mgc25hcHNob3QgaXMgZnJvemVuIGF0IGl0cyBmaXJz dCBzY2FuIC0tIHRha2VuIHdoaWxlCisjIHRoZSB3cml0ZXIgaXMgc3RpbGwgaW4gcHJvZ3Jlc3Mu CitzZXNzaW9uIG9ic2VydmVyCitzdGVwIG9fYmVnaW4gIHsgQkVHSU4gSVNPTEFUSU9OIExFVkVM IFJFUEVBVEFCTEUgUkVBRDsgfQorc3RlcCBvX2RpcnR5ICB7IFNFTEVDVCAqIEZST00gaW5kZXhf c2Nhbl90aWRzKCdkaXJ0eXNuYXBfaWR4JywgJ2RpcnR5Jyk7IH0KK3N0ZXAgb19tdmNjICAgeyBT RUxFQ1QgKiBGUk9NIGluZGV4X3NjYW5fdGlkcygnZGlydHlzbmFwX2lkeCcsICdtdmNjJyk7IH0K K3N0ZXAgb19jb21taXQgeyBDT01NSVQ7IH0KKworIyBXaGlsZSB0aGUgdXBkYXRlIGlzIHVuY29t bWl0dGVkIChhbGwgdmFyaWFudHMpOiBkaXJ0eSBzZWVzIEJPVEggdmVyc2lvbnMsCisjIG12Y2Mg c2VlcyBvbmx5IHRoZSBPTEQgb25lLgorIyBBZnRlciB3X2NvbW1pdDogICBkaXJ0eSBzZWVzIG9u bHkgdGhlIE5FVyB2ZXJzaW9uOyBtdmNjIHN0aWxsIHRoZSBPTEQgb25lLgorIyBBZnRlciB3X3Jv bGxiYWNrOiB0aGUgbmV3IHZlcnNpb24gaXMgZ29uZSBhbmQgdGhlIG9sZCBvbmUgcmVzdG9yZWQs IHNvIGRpcnR5CisjICAgICAgICAgICAgICAgICAgIGFuZCBtdmNjIGFncmVlIG9uIHRoZSBPTEQg dmVyc2lvbi4KKworIyBub24tSE9UICsgY29tbWl0OiBkaXN0aW5jdCBpbmRleCBlbnRyaWVzLCBu ZXcgdmVyc2lvbiB3aW5zCitwZXJtdXRhdGlvbiB3X2JlZ2luIHdfdXBkYXRlX3ZhbCAgd19ob3Rz dGF0IG9fYmVnaW4gb19kaXJ0eSBvX212Y2Mgd19jb21taXQgICBvX2RpcnR5IG9fbXZjYyBvX2Nv bW1pdAorIyBub24tSE9UICsgYWJvcnQ6ICBkaXN0aW5jdCBpbmRleCBlbnRyaWVzLCBvbGQgdmVy c2lvbiByZXN0b3JlZAorcGVybXV0YXRpb24gd19iZWdpbiB3X3VwZGF0ZV92YWwgIHdfaG90c3Rh dCBvX2JlZ2luIG9fZGlydHkgb19tdmNjIHdfcm9sbGJhY2sgb19kaXJ0eSBvX212Y2Mgb19jb21t aXQKKyMgSE9UICsgY29tbWl0OiAgICAgb25lIGluZGV4IGVudHJ5IC8gSE9UIGNoYWluLCBuZXcg dmVyc2lvbiB3aW5zCitwZXJtdXRhdGlvbiB3X2JlZ2luIHdfdXBkYXRlX25vdGUgd19ob3RzdGF0 IG9fYmVnaW4gb19kaXJ0eSBvX212Y2Mgd19jb21taXQgICBvX2RpcnR5IG9fbXZjYyBvX2NvbW1p dAorIyBIT1QgKyBhYm9ydDogICAgICBvbmUgaW5kZXggZW50cnkgLyBIT1QgY2hhaW4sIG9sZCB2 ZXJzaW9uIHJlc3RvcmVkCitwZXJtdXRhdGlvbiB3X2JlZ2luIHdfdXBkYXRlX25vdGUgd19ob3Rz dGF0IG9fYmVnaW4gb19kaXJ0eSBvX212Y2Mgd19yb2xsYmFjayBvX2RpcnR5IG9fbXZjYyBvX2Nv bW1pdApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9pbmRleC9zcWwvaG90X2NoYWluLnNx bCBiL3NyYy90ZXN0L21vZHVsZXMvaW5kZXgvc3FsL2hvdF9jaGFpbi5zcWwKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwLi5kY2JkYjkzYjcKLS0tIC9kZXYvbnVsbAorKysgYi9z cmMvdGVzdC9tb2R1bGVzL2luZGV4L3NxbC9ob3RfY2hhaW4uc3FsCkBAIC0wLDAgKzEsMzcgQEAK Ky0tIE5vbi1NVkNDIGluZGV4IHNjYW5zIG11c3QgcmV0dXJuIGV2ZXJ5IHZpc2libGUgbWVtYmVy IG9mIGEgSE9UIGNoYWluLgorLS0gVmVyaWZ5IHRoYXQgdGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90 IGdldHMgdGhhdCByaWdodCBpbiBhIHZhcmlldHkgb2YgY2FzZXMuCisKK0NSRUFURSBFWFRFTlNJ T04gdGVzdF9pbmRleHNjYW47CisKKy0tIFNpbmdsZS1wYWdlIHRhYmxlOyBhbGwgVElEcyBiZWxv dyBhcmUgZGV0ZXJtaW5pc3RpYzogYSBmcmVzaCB0YWJsZSBnZXRzCistLSBibG9jayAwLCBoZWFw X2luc2VydC9oZWFwX3VwZGF0ZSBhc3NpZ24gbGluZSBwb2ludGVycyBzZXF1ZW50aWFsbHksIGFu ZCB0aGUKKy0tIHJvd3MgYXJlIHRpbnkgdG8gYXZvaWQgYW55IHRvYXN0aW5nLgorQ1JFQVRFIFRB QkxFIGhvdF9jaGFpbl90YWIgKGlkIGludCwgZmlsbGVyIHRleHQpIFdJVEggKGF1dG92YWN1dW1f ZW5hYmxlZCA9IG9mZik7CitDUkVBVEUgSU5ERVggaG90X2NoYWluX2lkeCBPTiBob3RfY2hhaW5f dGFiIChpZCk7CitJTlNFUlQgSU5UTyBob3RfY2hhaW5fdGFiIFZBTFVFUyAoMSwgJ3IxdjEnKSwg KDIsICdyMnYxJyk7ICAtLSAoMCwxKSAoMCwyKQorCitCRUdJTjsKKworLS0gQ3JlYXRlIEhPVCBj aGFpbnMuICBUaGVzZSB1cGRhdGVzIHRvdWNoIG9ubHkgdGhlIG5vbi1pbmRleGVkIGNvbHVtbgor LS0gImZpbGxlciIsIGFuZCBldmVyeSBjaGFpbiBtZW1iZXIgc3RheXMgdmlzaWJsZSB0byBTbmFw c2hvdEFueSBiZWNhdXNlIHRoZQorLS0gZGVsZXRpbmcgdHJhbnNhY3Rpb24gKHVzKSBpcyBzdGls bCBvcGVuLgorVVBEQVRFIGhvdF9jaGFpbl90YWIgU0VUIGZpbGxlciA9ICdyMXYyJyBXSEVSRSBp ZCA9IDE7ICAgLS0gKDAsMykKK1VQREFURSBob3RfY2hhaW5fdGFiIFNFVCBmaWxsZXIgPSAncjF2 MycgV0hFUkUgaWQgPSAxOyAgIC0tICgwLDQpCitVUERBVEUgaG90X2NoYWluX3RhYiBTRVQgZmls bGVyID0gJ3IydjInIFdIRVJFIGlkID0gMjsgICAtLSAoMCw1KQorCistLSBWZXJpZnkgdGhhdCBh bGwgdGhyZWUgdXBkYXRlcyB3ZXJlIEhPVCB1c2luZyBiYWNrZW5kLWxvY2FsIHhhY3QgY291bnRl cjoKK1NFTEVDVCBwZ19zdGF0X2dldF94YWN0X3R1cGxlc19ob3RfdXBkYXRlZCgnaG90X2NoYWlu X3RhYic6OnJlZ2NsYXNzKSBBUyBob3RfdXBkYXRlZDsKKworLS0gU25hcHNob3RBbnk6IGV2ZXJ5 IGNoYWluIG1lbWJlcgorU0VMRUNUICogRlJPTSBpbmRleF9zY2FuX3RpZHMoJ2hvdF9jaGFpbl9p ZHgnLCAnYW55Jyk7CisKKy0tIE1WQ0Mgc2NhbiwgZm9yIGNvbnRyYXN0OiBvbmx5IHRoZSBuZXdl c3QgbWVtYmVyIG9mIGVhY2ggY2hhaW4KK1NFTEVDVCAqIEZST00gaW5kZXhfc2Nhbl90aWRzKCdo b3RfY2hhaW5faWR4JywgJ212Y2MnKTsKKworLS0gYmFja3dhcmQ6IGluZGV4IGVudHJpZXMgaW4g cmV2ZXJzZSBrZXkgb3JkZXIsIGNoYWlucyBzdGlsbCBpbiBBU0MgY2hhaW4gb3JkZXIKK1NFTEVD VCAqIEZST00gaW5kZXhfc2Nhbl90aWRzKCdob3RfY2hhaW5faWR4JywgJ2FueScsICdiYWNrd2Fy ZCcpOworCitDT01NSVQ7CisKK0RST1AgVEFCTEUgaG90X2NoYWluX3RhYjsKK0RST1AgRVhURU5T SU9OIHRlc3RfaW5kZXhzY2FuOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9pbmRleC90 ZXN0X2luZGV4c2Nhbi0tMS4wLnNxbCBiL3NyYy90ZXN0L21vZHVsZXMvaW5kZXgvdGVzdF9pbmRl eHNjYW4tLTEuMC5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwLi5iNjYy ZDcwNTQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL2luZGV4L3Rlc3RfaW5k ZXhzY2FuLS0xLjAuc3FsCkBAIC0wLDAgKzEsMTMgQEAKKy8qIHNyYy90ZXN0L21vZHVsZXMvaW5k ZXgvdGVzdF9pbmRleHNjYW4tLTEuMC5zcWwgKi8KKworLS0gY29tcGxhaW4gaWYgc2NyaXB0IGlz IHNvdXJjZWQgaW4gcHNxbCwgcmF0aGVyIHRoYW4gdmlhIENSRUFURSBFWFRFTlNJT04KK1xlY2hv IFVzZSAiQ1JFQVRFIEVYVEVOU0lPTiB0ZXN0X2luZGV4c2NhbiIgdG8gbG9hZCB0aGlzIGZpbGUu IFxxdWl0CisKKy0tIFNjYW4gaW5kZXhyZWwgd2l0aCB6ZXJvIHNjYW4ga2V5cyBhbmQgdGhlIGdp dmVuIHNuYXBzaG90IHR5cGUgKCdtdmNjJywKKy0tICdhbnknLCAnc2VsZicsICdkaXJ0eScsICdu b252YWN1dW1hYmxlJykgYW5kIGRpcmVjdGlvbiAoJ2ZvcndhcmQnLAorLS0gJ2JhY2t3YXJkJyks IHJldHVybmluZyB0aGUgaGVhcCBUSUQgb2YgZXZlcnkgdHVwbGUgdGhlIHNjYW4geWllbGRzLCBp bgorLS0gc2NhbiBvcmRlci4KK0NSRUFURSBGVU5DVElPTiBpbmRleF9zY2FuX3RpZHMoaW5kZXhy ZWwgcmVnY2xhc3MsIHNuYXB0eXBlIHRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGRpciB0ZXh0IERFRkFVTFQgJ2ZvcndhcmQnKQorUkVUVVJOUyBTRVRPRiBwZ19jYXRhbG9n LnRpZAorU1RSSUNUIEFTICdNT0RVTEVfUEFUSE5BTUUnIExBTkdVQUdFIEM7CmRpZmYgLS1naXQg YS9zcmMvdGVzdC9tb2R1bGVzL2luZGV4L3Rlc3RfaW5kZXhzY2FuLmMgYi9zcmMvdGVzdC9tb2R1 bGVzL2luZGV4L3Rlc3RfaW5kZXhzY2FuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwLi5mYWJkNGFlMjUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL2lu ZGV4L3Rlc3RfaW5kZXhzY2FuLmMKQEAgLTAsMCArMSwxNDYgQEAKKy8qLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAqCisgKiB0ZXN0X2luZGV4c2Nhbi5jCisgKgkJVGVzdCBoZWxwZXJzIGZvciBsb3ctbGV2 ZWwgaW5kZXggc2NhbiBiZWhhdmlvci4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMjYsIFBvc3Rn cmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICogSURFTlRJRklDQVRJT04KKyAq CQlzcmMvdGVzdC9tb2R1bGVzL2luZGV4L3Rlc3RfaW5kZXhzY2FuLmMKKyAqCisgKiAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAiYWNjZXNz L2dlbmFtLmgiCisjaW5jbHVkZSAiYWNjZXNzL3JlbHNjYW4uaCIKKyNpbmNsdWRlICJhY2Nlc3Mv dGFibGUuaCIKKyNpbmNsdWRlICJhY2Nlc3MvdGFibGVhbS5oIgorI2luY2x1ZGUgImNhdGFsb2cv aW5kZXguaCIKKyNpbmNsdWRlICJleGVjdXRvci90dXB0YWJsZS5oIgorI2luY2x1ZGUgImZtZ3Iu aCIKKyNpbmNsdWRlICJmdW5jYXBpLmgiCisjaW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5jbHVk ZSAic3RvcmFnZS9pdGVtcHRyLmgiCisjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKKyNpbmNs dWRlICJ1dGlscy9yZWwuaCIKKyNpbmNsdWRlICJ1dGlscy90dXBsZXN0b3JlLmgiCisKK1BHX01P RFVMRV9NQUdJQzsKKworLyoKKyAqIGluZGV4X3NjYW5fdGlkcyhpbmRleHJlbCByZWdjbGFzcywg c25hcHR5cGUgdGV4dCwgZGlyIHRleHQpIFJFVFVSTlMgU0VUT0YgdGlkCisgKgorICogU2NhbiBp bmRleHJlbCB3aXRoIHplcm8gc2NhbiBrZXlzLCB1c2luZyBhIHNuYXBzaG90IG9mIHRoZSBnaXZl biB0eXBlIGFuZAorICogdGhlIGdpdmVuIHNjYW4gZGlyZWN0aW9uLCBhbmQgcmV0dXJuIHRoZSBo ZWFwIFRJRCBvZiBldmVyeSB0dXBsZSB0aGF0IHRoZQorICogc2NhbiByZXR1cm5zLCBpbiBzY2Fu IG9yZGVyLgorICovCitQR19GVU5DVElPTl9JTkZPX1YxKGluZGV4X3NjYW5fdGlkcyk7CitEYXR1 bQoraW5kZXhfc2Nhbl90aWRzKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJT2lkCQkJaW5kZXhvaWQg PSBQR19HRVRBUkdfT0lEKDApOworCWNoYXIJICAgKnNuYXB0eXBlID0gdGV4dF90b19jc3RyaW5n KFBHX0dFVEFSR19URVhUX1BQKDEpKTsKKwljaGFyCSAgICpkaXJzdHIgPSB0ZXh0X3RvX2NzdHJp bmcoUEdfR0VUQVJHX1RFWFRfUFAoMikpOworCVJldHVyblNldEluZm8gKnJzaW5mbyA9IChSZXR1 cm5TZXRJbmZvICopIGZjaW5mby0+cmVzdWx0aW5mbzsKKwlPaWQJCQloZWFwb2lkOworCVJlbGF0 aW9uCWhlYXByZWw7CisJUmVsYXRpb24JaW5kZXhyZWw7CisJU2NhbkRpcmVjdGlvbiBkaXI7CisJ U25hcHNob3REYXRhIHNuYXBkYXRhOworCVNuYXBzaG90CXNuYXBzaG90OworCUluZGV4U2NhbkRl c2Mgc2NhbjsKKwlUdXBsZVRhYmxlU2xvdCAqc2xvdDsKKwlib29sCQlyZWNoZWNrOworCisJaWYg KCFzdXBlcnVzZXIoKSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lO U1VGRklDSUVOVF9QUklWSUxFR0UpLAorCQkJCSBlcnJtc2coIm11c3QgYmUgc3VwZXJ1c2VyIHRv IHVzZSBpbmRleCBzY2FuIHRlc3QgZnVuY3Rpb25zIikpKTsKKworCUluaXRNYXRlcmlhbGl6ZWRT UkYoZmNpbmZvLCBNQVRfU1JGX1VTRV9FWFBFQ1RFRF9ERVNDKTsKKworCWlmIChzdHJjbXAoZGly c3RyLCAiZm9yd2FyZCIpID09IDApCisJCWRpciA9IEZvcndhcmRTY2FuRGlyZWN0aW9uOworCWVs c2UgaWYgKHN0cmNtcChkaXJzdHIsICJiYWNrd2FyZCIpID09IDApCisJCWRpciA9IEJhY2t3YXJk U2NhbkRpcmVjdGlvbjsKKwllbHNlCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJS Q09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJIGVycm1zZygiaW52YWxpZCBzY2Fu IGRpcmVjdGlvbiBcIiVzXCIiLCBkaXJzdHIpKSk7CisKKwkvKgorCSAqIExvY2sgdGhlIGhlYXAg YmVmb3JlIHRoZSBpbmRleCB0byBhdm9pZCBkZWFkbG9jay4gIEluZGV4R2V0UmVsYXRpb24oKQor CSAqIHJ1bnMgd2l0aG91dCBhIGxvY2ssIHNvIGlmIHRoZSBPSUQgaXNuJ3QgYW4gaW5kZXggaXQg cmV0dXJucworCSAqIEludmFsaWRPaWQ7IGRlZmVyIHRoZSBjb21wbGFpbnQgdG8gaW5kZXhfb3Bl bigpIGJlbG93LCB3aGljaCBnaXZlcyBhCisJICogYmV0dGVyIG1lc3NhZ2UuCisJICovCisJaGVh cG9pZCA9IEluZGV4R2V0UmVsYXRpb24oaW5kZXhvaWQsIHRydWUpOworCWlmIChPaWRJc1ZhbGlk KGhlYXBvaWQpKQorCQloZWFwcmVsID0gdGFibGVfb3BlbihoZWFwb2lkLCBBY2Nlc3NTaGFyZUxv Y2spOworCWVsc2UKKwkJaGVhcHJlbCA9IE5VTEw7CisKKwlpbmRleHJlbCA9IGluZGV4X29wZW4o aW5kZXhvaWQsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwkvKgorCSAqIFNpbmNlIHRoZSBJbmRleEdl dFJlbGF0aW9uKCkgY2FsbCBhYm92ZSByYW4gd2l0aG91dCBhIGxvY2ssIHJlY2hlY2sgbm93CisJ ICogdGhhdCBib3RoIHJlbGF0aW9ucyBhcmUgbG9ja2VkOiBhIGNvbmN1cnJlbnQgZHJvcCBhbmQg cmVjcmVhdGUgY291bGQKKwkgKiBoYXZlIGxlZnQgdXMgd2l0aCB0aGUgd3JvbmcgaGVhcC4KKwkg Ki8KKwlpZiAoaGVhcHJlbCA9PSBOVUxMIHx8IGhlYXBvaWQgIT0gSW5kZXhHZXRSZWxhdGlvbihp bmRleG9pZCwgZmFsc2UpKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVf VU5ERUZJTkVEX1RBQkxFKSwKKwkJCQkgZXJybXNnKCJjb3VsZCBub3Qgb3BlbiBwYXJlbnQgdGFi bGUgb2YgaW5kZXggXCIlc1wiIiwKKwkJCQkJCVJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKGluZGV4 cmVsKSkpKTsKKworCWlmIChzdHJjbXAoc25hcHR5cGUsICJtdmNjIikgPT0gMCkKKwkJc25hcHNo b3QgPSBHZXRBY3RpdmVTbmFwc2hvdCgpOworCWVsc2UgaWYgKHN0cmNtcChzbmFwdHlwZSwgImFu eSIpID09IDApCisJCXNuYXBzaG90ID0gU25hcHNob3RBbnk7CisJZWxzZSBpZiAoc3RyY21wKHNu YXB0eXBlLCAic2VsZiIpID09IDApCisJCXNuYXBzaG90ID0gU25hcHNob3RTZWxmOworCWVsc2Ug aWYgKHN0cmNtcChzbmFwdHlwZSwgImRpcnR5IikgPT0gMCkKKwl7CisJCUluaXREaXJ0eVNuYXBz aG90KHNuYXBkYXRhKTsKKwkJc25hcHNob3QgPSAmc25hcGRhdGE7CisJfQorCWVsc2UgaWYgKHN0 cmNtcChzbmFwdHlwZSwgIm5vbnZhY3V1bWFibGUiKSA9PSAwKQorCXsKKwkJSW5pdE5vblZhY3V1 bWFibGVTbmFwc2hvdChzbmFwZGF0YSwgR2xvYmFsVmlzVGVzdEZvcihoZWFwcmVsKSk7CisJCXNu YXBzaG90ID0gJnNuYXBkYXRhOworCX0KKwllbHNlCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVy cmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJIGVycm1zZygiaW52 YWxpZCBzbmFwc2hvdCB0eXBlIFwiJXNcIiIsIHNuYXB0eXBlKSkpOworCisJc2xvdCA9IHRhYmxl X3Nsb3RfY3JlYXRlKGhlYXByZWwsIE5VTEwpOworCisJc2NhbiA9IGluZGV4X2JlZ2luc2Nhbiho ZWFwcmVsLCBpbmRleHJlbCwgZmFsc2UsIHNuYXBzaG90LCBOVUxMLAorCQkJCQkJICAgMCwgMCwg U09fTk9ORSk7CisJaW5kZXhfcmVzY2FuKHNjYW4sIE5VTEwsIDAsIE5VTEwsIDApOworCisJd2hp bGUgKHRhYmxlX2luZGV4X2dldG5leHRfc2xvdChzY2FuLCBkaXIsIHNsb3QsICZyZWNoZWNrKSkK Kwl7CisJCUl0ZW1Qb2ludGVyRGF0YSB0aWQgPSBzbG90LT50dHNfdGlkOworCQlEYXR1bQkJdmFs dWVzWzFdOworCQlib29sCQludWxsc1sxXTsKKworCQkvKiB3aXRoIHplcm8gc2NhbiBrZXlzLCBu byBBTSBzaG91bGQgZXZlciByZXF1ZXN0IGEgcmVjaGVjayAqLworCQlpZiAocmVjaGVjaykKKwkJ CWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIHJlY2hlY2sgcmVxdWVzdCBmcm9tIGtleWxlc3MgaW5k ZXggc2NhbiIpOworCisJCXZhbHVlc1swXSA9IEl0ZW1Qb2ludGVyR2V0RGF0dW0oJnRpZCk7CisJ CW51bGxzWzBdID0gZmFsc2U7CisJCXR1cGxlc3RvcmVfcHV0dmFsdWVzKHJzaW5mby0+c2V0UmVz dWx0LCByc2luZm8tPnNldERlc2MsCisJCQkJCQkJIHZhbHVlcywgbnVsbHMpOworCX0KKworCWlu ZGV4X2VuZHNjYW4oc2Nhbik7CisJRXhlY0Ryb3BTaW5nbGVUdXBsZVRhYmxlU2xvdChzbG90KTsK KwlpbmRleF9jbG9zZShpbmRleHJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKwl0YWJsZV9jbG9zZSho ZWFwcmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCisJcmV0dXJuIChEYXR1bSkgMDsKK30KZGlmZiAt LWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvaW5kZXgvdGVzdF9pbmRleHNjYW4uY29udHJvbCBiL3Ny Yy90ZXN0L21vZHVsZXMvaW5kZXgvdGVzdF9pbmRleHNjYW4uY29udHJvbApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAuLmJmYWIyN2JmMAotLS0gL2Rldi9udWxsCisrKyBiL3Ny Yy90ZXN0L21vZHVsZXMvaW5kZXgvdGVzdF9pbmRleHNjYW4uY29udHJvbApAQCAtMCwwICsxLDQg QEAKK2NvbW1lbnQgPSAnaGVscGVyIGZ1bmN0aW9uIGZvciBsb3ctbGV2ZWwgaW5kZXggc2NhbiBi ZWhhdmlvcicKK2RlZmF1bHRfdmVyc2lvbiA9ICcxLjAnCittb2R1bGVfcGF0aG5hbWUgPSAnJGxp YmRpci90ZXN0X2luZGV4c2NhbicKK3JlbG9jYXRhYmxlID0gdHJ1ZQpkaWZmIC0tZ2l0IGEvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zdGF0cy5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL3N0YXRzLm91dAppbmRleCBiYmIxZGIzYzQuLmZlNmY1MWE2YSAxMDA2NDQKLS0tIGEvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zdGF0cy5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9zdGF0cy5vdXQKQEAgLTg5Nyw2ICs4OTcsNjggQEAgU0VMRUNUIGlkeF9zY2FuLCBz dGF0c19yZXNldCBJUyBOT1QgTlVMTCBBUyBoYXNfc3RhdHNfcmVzZXQKICAgICAgICAgMCB8IHQK ICgxIHJvdykKIAorLS0gVGVzdCBwZ19zdGF0X2FsbF9pbmRleGVzLmlkeF90dXBfcmVhZCBjb3Vu dGVyCitDUkVBVEUgVEVNUE9SQVJZIFRBQkxFIHRlc3RfaWR4X3R1cF9yZWFkIEFTCisgIFNFTEVD VCBnIEFTIGEgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMjAwKSBnOworQ1JFQVRFIElOREVYIE9O IHRlc3RfaWR4X3R1cF9yZWFkKGEpOworU0VUIGVuYWJsZV9zZXFzY2FuID0gb2ZmOworU0VUIGVu YWJsZV9pbmRleG9ubHlzY2FuID0gb2ZmOworLS0gcGxhaW4gaW5kZXggc2NhbgorU0VUIGVuYWJs ZV9iaXRtYXBzY2FuID0gb2ZmOworRVhQTEFJTiAoQ09TVFMgb2ZmKSBTRUxFQ1QgY291bnQoKikg RlJPTSB0ZXN0X2lkeF90dXBfcmVhZCBXSEVSRSBhIEJFVFdFRU4gMSBBTkQgMjAwOworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBZ2dyZWdhdGUKKyAgIC0+ICBJbmRleCBTY2FuIHVzaW5n IHRlc3RfaWR4X3R1cF9yZWFkX2FfaWR4IG9uIHRlc3RfaWR4X3R1cF9yZWFkCisgICAgICAgICBJ bmRleCBDb25kOiAoKGEgPj0gMSkgQU5EIChhIDw9IDIwMCkpCisoMyByb3dzKQorCitTRUxFQ1Qg Y291bnQoKikgRlJPTSB0ZXN0X2lkeF90dXBfcmVhZCBXSEVSRSBhIEJFVFdFRU4gMSBBTkQgMjAw OworIGNvdW50IAorLS0tLS0tLQorICAgMjAwCisoMSByb3cpCisKKy0tIGJpdG1hcCBpbmRleCBz Y2FuCitTRVQgZW5hYmxlX2luZGV4c2NhbiA9IG9mZjsKK1NFVCBlbmFibGVfYml0bWFwc2NhbiA9 IG9uOworRVhQTEFJTiAoQ09TVFMgb2ZmKSBTRUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0X2lkeF90 dXBfcmVhZCBXSEVSRSBhIEJFVFdFRU4gMSBBTkQgMjAwOworICAgICAgICAgICAgICAgICAgICAg ICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFnZ3JlZ2F0ZQorICAg LT4gIEJpdG1hcCBIZWFwIFNjYW4gb24gdGVzdF9pZHhfdHVwX3JlYWQKKyAgICAgICAgIFJlY2hl Y2sgQ29uZDogKChhID49IDEpIEFORCAoYSA8PSAyMDApKQorICAgICAgICAgLT4gIEJpdG1hcCBJ bmRleCBTY2FuIG9uIHRlc3RfaWR4X3R1cF9yZWFkX2FfaWR4CisgICAgICAgICAgICAgICBJbmRl eCBDb25kOiAoKGEgPj0gMSkgQU5EIChhIDw9IDIwMCkpCisoNSByb3dzKQorCitTRUxFQ1QgY291 bnQoKikgRlJPTSB0ZXN0X2lkeF90dXBfcmVhZCBXSEVSRSBhIEJFVFdFRU4gMSBBTkQgMjAwOwor IGNvdW50IAorLS0tLS0tLQorICAgMjAwCisoMSByb3cpCisKK1JFU0VUIGVuYWJsZV9zZXFzY2Fu OworUkVTRVQgZW5hYmxlX2luZGV4b25seXNjYW47CitSRVNFVCBlbmFibGVfaW5kZXhzY2FuOwor UkVTRVQgZW5hYmxlX2JpdG1hcHNjYW47CistLSBXZSBleHBlY3QgYSB0b3RhbCBvZiA0MDAgdHVw bGVzIHJlYWQgKDIwMCBmcm9tIHBsYWluIGluZGV4IHNjYW4sIDIwMCBmcm9tCistLSBiaXRtYXAg aW5kZXggc2NhbikuICBIb3dldmVyLCB3ZSBvbmx5IGV4cGVjdCAyMDAgdHVwbGUgZmV0Y2hlcywg YmVjYXVzZQorLS0gYml0bWFwIGluZGV4IHNjYW5zL2hlYXAgc2NhbnMgZG9uJ3QgYWZmZWN0IHRo ZSByZWxldmFudCBjb3VudGVyLgorU0VMRUNUIHBnX3N0YXRfZm9yY2VfbmV4dF9mbHVzaCgpOwor IHBnX3N0YXRfZm9yY2VfbmV4dF9mbHVzaCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg CisoMSByb3cpCisKK1NFTEVDVCBpZHhfdHVwX3JlYWQsIGlkeF90dXBfZmV0Y2ggRlJPTSBwZ19z dGF0X2FsbF9pbmRleGVzCisgIFdIRVJFIGluZGV4cmVsaWQgPSAndGVzdF9pZHhfdHVwX3JlYWRf YV9pZHgnOjpyZWdjbGFzczsKKyBpZHhfdHVwX3JlYWQgfCBpZHhfdHVwX2ZldGNoIAorLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgNDAwIHwgICAgICAgICAgIDIwMAor KDEgcm93KQorCitEUk9QIFRBQkxFIHRlc3RfaWR4X3R1cF9yZWFkOwogLS0tLS0KIC0tIFRlc3Qg cmVzZXQgb2Ygc29tZSBzdGF0cyBmb3Igc2hhcmVkIHRhYmxlCiAtLS0tLQpkaWZmIC0tZ2l0IGEv c3JjL3Rlc3QvcmVncmVzcy9zcWwvc3RhdHMuc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvc3Rh dHMuc3FsCmluZGV4IDYxMGZkMjFmYS4uOTIzZDJjYmMwIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9y ZWdyZXNzL3NxbC9zdGF0cy5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvc3RhdHMuc3Fs CkBAIC0zOTYsNiArMzk2LDM1IEBAIFNFTEVDVCBwZ19zdGF0X3Jlc2V0X3NpbmdsZV90YWJsZV9j b3VudGVycygndGVzdF9sYXN0X3NjYW5fcGtleSc6OnJlZ2NsYXNzKTsKIFNFTEVDVCBpZHhfc2Nh biwgc3RhdHNfcmVzZXQgSVMgTk9UIE5VTEwgQVMgaGFzX3N0YXRzX3Jlc2V0CiAgIEZST00gcGdf c3RhdF9hbGxfaW5kZXhlcyBXSEVSRSBpbmRleHJlbGlkID0gJ3Rlc3RfbGFzdF9zY2FuX3BrZXkn OjpyZWdjbGFzczsKIAorLS0gVGVzdCBwZ19zdGF0X2FsbF9pbmRleGVzLmlkeF90dXBfcmVhZCBj b3VudGVyCitDUkVBVEUgVEVNUE9SQVJZIFRBQkxFIHRlc3RfaWR4X3R1cF9yZWFkIEFTCisgIFNF TEVDVCBnIEFTIGEgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMjAwKSBnOworQ1JFQVRFIElOREVY IE9OIHRlc3RfaWR4X3R1cF9yZWFkKGEpOworCitTRVQgZW5hYmxlX3NlcXNjYW4gPSBvZmY7CitT RVQgZW5hYmxlX2luZGV4b25seXNjYW4gPSBvZmY7CistLSBwbGFpbiBpbmRleCBzY2FuCitTRVQg ZW5hYmxlX2JpdG1hcHNjYW4gPSBvZmY7CitFWFBMQUlOIChDT1NUUyBvZmYpIFNFTEVDVCBjb3Vu dCgqKSBGUk9NIHRlc3RfaWR4X3R1cF9yZWFkIFdIRVJFIGEgQkVUV0VFTiAxIEFORCAyMDA7CitT RUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0X2lkeF90dXBfcmVhZCBXSEVSRSBhIEJFVFdFRU4gMSBB TkQgMjAwOworLS0gYml0bWFwIGluZGV4IHNjYW4KK1NFVCBlbmFibGVfaW5kZXhzY2FuID0gb2Zm OworU0VUIGVuYWJsZV9iaXRtYXBzY2FuID0gb247CitFWFBMQUlOIChDT1NUUyBvZmYpIFNFTEVD VCBjb3VudCgqKSBGUk9NIHRlc3RfaWR4X3R1cF9yZWFkIFdIRVJFIGEgQkVUV0VFTiAxIEFORCAy MDA7CitTRUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0X2lkeF90dXBfcmVhZCBXSEVSRSBhIEJFVFdF RU4gMSBBTkQgMjAwOworUkVTRVQgZW5hYmxlX3NlcXNjYW47CitSRVNFVCBlbmFibGVfaW5kZXhv bmx5c2NhbjsKK1JFU0VUIGVuYWJsZV9pbmRleHNjYW47CitSRVNFVCBlbmFibGVfYml0bWFwc2Nh bjsKKworLS0gV2UgZXhwZWN0IGEgdG90YWwgb2YgNDAwIHR1cGxlcyByZWFkICgyMDAgZnJvbSBw bGFpbiBpbmRleCBzY2FuLCAyMDAgZnJvbQorLS0gYml0bWFwIGluZGV4IHNjYW4pLiAgSG93ZXZl ciwgd2Ugb25seSBleHBlY3QgMjAwIHR1cGxlIGZldGNoZXMsIGJlY2F1c2UKKy0tIGJpdG1hcCBp bmRleCBzY2Fucy9oZWFwIHNjYW5zIGRvbid0IGFmZmVjdCB0aGUgcmVsZXZhbnQgY291bnRlci4K K1NFTEVDVCBwZ19zdGF0X2ZvcmNlX25leHRfZmx1c2goKTsKK1NFTEVDVCBpZHhfdHVwX3JlYWQs IGlkeF90dXBfZmV0Y2ggRlJPTSBwZ19zdGF0X2FsbF9pbmRleGVzCisgIFdIRVJFIGluZGV4cmVs aWQgPSAndGVzdF9pZHhfdHVwX3JlYWRfYV9pZHgnOjpyZWdjbGFzczsKK0RST1AgVEFCTEUgdGVz dF9pZHhfdHVwX3JlYWQ7CisKIC0tLS0tCiAtLSBUZXN0IHJlc2V0IG9mIHNvbWUgc3RhdHMgZm9y IHNoYXJlZCB0YWJsZQogLS0tLS0KZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBl ZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggZjllYjIz ZTUyLi5hYTlkNTk1OTIgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5s aXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0xMzMzLDggKzEz MzMsNiBAQCBJbmRleERlbGV0ZUNvdW50cwogSW5kZXhEZWxldGVQcmVmZXRjaFN0YXRlCiBJbmRl eERvQ2hlY2tDYWxsYmFjawogSW5kZXhFbGVtCi1JbmRleEZldGNoSGVhcERhdGEKLUluZGV4RmV0 Y2hUYWJsZURhdGEKIEluZGV4SW5mbwogSW5kZXhMaXN0CiBJbmRleE9ubHlTY2FuCkBAIC0xMzQ2 LDYgKzEzNDQsNyBAQCBJbmRleFJ1bnRpbWVLZXlJbmZvCiBJbmRleFNjYW4KIEluZGV4U2NhbkRl c2MKIEluZGV4U2NhbkRlc2NEYXRhCitJbmRleFNjYW5IZWFwRGF0YQogSW5kZXhTY2FuSW5zdHJ1 bWVudGF0aW9uCiBJbmRleFNjYW5TdGF0ZQogSW5kZXhTdGF0ZUZsYWdzQWN0aW9uCi0tIAoyLjUz LjAKCg== --000000000000d6f56006543b3e3b Content-Type: application/octet-stream; name="v27-0008-aio-Fix-pgaio_io_wait-for-staged-IOs-B.patch" Content-Disposition: attachment; filename="v27-0008-aio-Fix-pgaio_io_wait-for-staged-IOs-B.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqe4shkm2 RnJvbSA2YmZkMTNhMDczNDliZmNhZWYxNTAyZDYzMjJiMmU2YzIxN2MzMDkzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFN1biwgMjIgTWFyIDIwMjYgMTU6MTI6NDEgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyNyA4 LzldIGFpbzogRml4IHBnYWlvX2lvX3dhaXQoKSBmb3Igc3RhZ2VkIElPcyAoQikuCgpQcmV2aW91 c2x5LCBwZ2Fpb19pb193YWl0KCkncyBjYXNlcyBmb3IgUEdBSU9fSFNfREVGSU5FRCBhbmQKUEdB SU9fSFNfU1RBR0VEIGZlbGwgdGhyb3VnaCB0byB3YWl0aW5nIGZvciBjb21wbGV0aW9uLiAgVGhl IG93bmVyIG9ubHkKcHJvbWlzZXMgdG8gYWR2YW5jZSBpdCB0byBQR0FJT19IU19TVUJNSVRURUQu ICBUaGUgd2FpdGVyIG5lZWRzIHRvIGJlCnByZXBhcmVkIHRvIGNhbGwgLT53YWl0X29uZSgpIGl0 c2VsZiBvbmNlIHRoZSBJTyBpcyBzdWJtaXR0ZWQgaW4gb3JkZXIKdG8gZ3VhcmFudGVlIHByb2dy ZXNzIGFuZCBhdm9pZCBkZWFkbG9ja3Mgb24gSU8gbWV0aG9kcyB0aGF0IHByb3ZpZGUKLT53YWl0 X29uZSgpLgoKSW50cm9kdWNlIGEgbmV3IHBlci1iYWNrZW5kIGNvbmRpdGlvbiB2YXJpYWJsZSBz dWJtaXRfY3YsIHdva2VuIGJ5IGJ5CnBnYWlvX3N1Ym1pdF9zdGFnZSgpLCBhbmQgdXNlIGl0IHRv IHdhaXQgZm9yIHRoZSBzdGF0ZSB0byBhZHZhbmNlLiAgVGhlCm5ldyBicm9hZGNhc3QgZG9lc24n dCBzZWVtIHRvIGNhdXNlIGFueSBtZWFzdXJhYmxlIHNsb3dkb3duLCBzbyBpZGVhcwpmb3Igb3B0 aW1pemluZyB0aGUgY29tbW9uIG5vLXdhaXRlcnMgY2FzZSB3ZXJlIGFiYW5kb25lZCBmb3Igbm93 LgoKSXQgbWF5IG5vdCBiZSBwb3NzaWJsZSB0byByZWFjaCBhbnkgcmVhbCBkZWFkbG9jayB3aXRo IGV4aXN0aW5nIEFJTwp1c2VycywgYnV0IHRoYXQgc2l0dWF0aW9uIGNvdWxkIGNoYW5nZS4gIFRo ZXJlJ3MgYWxzbyBubyByZWFzb24gdGhlCndhaXRlciBzaG91bGRuJ3QgYmVnaW4gdG8gd2FpdCB2 aWEgdGhlIElPIG1ldGhvZCBhcyBzb29uIGFzIHBvc3NpYmxlCmV2ZW4gd2l0aG91dCBhIGRlYWRs b2NrLgoKUGlja2VkIHVwIGJ5IHRlc3RpbmcgYSBwcm9wb3NlZCBJTyBtZXRob2QgdGhhdCBoYXMg LT53YWl0X29uZSgpLCBsaWtlCmlvX21ldGhvZD1pb191cmluZywgYW5kIGNvZGUgcmV2aWV3LgoK QmFja3BhdGNoLXRocm91Z2g6IDE4ClJldmlld2VkLWJ5OiBBbmRyZXMgRnJldW5kIDxhbmRyZXNA YW5hcmF6ZWwuZGU+CkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vQ0ElMkJoVUtHJTJC bVpZclNkbmhrLVhyQllPMThIODI5Szc3UzlnTUtVc3lrT2lUSnRxQjQzZyU0MG1haWwuZ21haWwu Y29tCi0tLQogc3JjL2luY2x1ZGUvc3RvcmFnZS9haW9faW50ZXJuYWwuaCAgICAgICAgICAgIHwg IDcgKysrCiBzcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9haW8uYyAgICAgICAgICAgICAgICAgfCA1 MCArKysrKysrKysrKysrKysrLS0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9haW9faW5pdC5j ICAgICAgICAgICAgfCAgMSArCiAuLi4vdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVudF9uYW1lcy50 eHQgICAgICAgfCAgMSArCiA0IGZpbGVzIGNoYW5nZWQsIDUxIGluc2VydGlvbnMoKyksIDggZGVs ZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9haW9faW50ZXJuYWwu aCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYWlvX2ludGVybmFsLmgKaW5kZXggOWNhNDA4N2FhLi5j M2FmZGU0ZDUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYWlvX2ludGVybmFsLmgK KysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9haW9faW50ZXJuYWwuaApAQCAtMjE2LDYgKzIxNiwx MyBAQCB0eXBlZGVmIHN0cnVjdCBQZ0Fpb0JhY2tlbmQKIAl1aW50MTYJCW51bV9zdGFnZWRfaW9z OwogCVBnQWlvSGFuZGxlICpzdGFnZWRfaW9zW1BHQUlPX1NVQk1JVF9CQVRDSF9TSVpFXTsKIAor CS8qCisJICogT3RoZXIgYmFja2VuZHMgc29tZXRpbWVzIG5lZWQgdG8gd2FpdCBmb3IgdGhlIG93 bmluZyBiYWNrZW5kIHRvIHN1Ym1pdC4KKwkgKiBUaGUgcGVyLUlPIENWIHdvdWxkIHdvcmsgZm9y IHRoYXQgcHVycG9zZSwgYnV0IGEgcGVyLWJhY2tlbmQgQ1YgYWxsb3dzCisJICogZm9yIGp1c3Qg b25lIGJyb2FkY2FzdCBwZXIgc3VibWl0dGVkIGJhdGNoLgorCSAqLworCUNvbmRpdGlvblZhcmlh YmxlIHN1Ym1pdF9jdjsKKwogCS8qCiAJICogTGlzdCBvZiBpbi1mbGlnaHQgSU9zLiBBbHNvIGNv bnRhaW5zIElPcyB0aGF0IGFyZW4ndCBzdHJpY3RseSBzcGVha2luZwogCSAqIGluLWZsaWdodCBh bnltb3JlLCBidXQgaGF2ZSBiZWVuIHdhaXRlZC1mb3IgYW5kIGNvbXBsZXRlZCBieSBhbm90aGVy CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9haW8uYyBiL3NyYy9iYWNrZW5k L3N0b3JhZ2UvYWlvL2Fpby5jCmluZGV4IDcwMDlmYjdmNi4uY2UyZjczYmZmIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9haW8uYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdl L2Fpby9haW8uYwpAQCAtNTkzLDYgKzU5MywxNiBAQCBwZ2Fpb19pb193YXNfcmVjeWNsZWQoUGdB aW9IYW5kbGUgKmlvaCwgdWludDY0IHJlZl9nZW5lcmF0aW9uLCBQZ0Fpb0hhbmRsZVN0YXRlCiAJ cmV0dXJuIGlvaC0+Z2VuZXJhdGlvbiAhPSByZWZfZ2VuZXJhdGlvbjsKIH0KIAorLyoKKyAqIFdo ZXRoZXIgd2UgbmVlZCB0byB3YWl0IHZpYSB0aGUgSU8gbWV0aG9kLiBEb24ndCBjaGVjayB2aWEg dGhlIElPIG1ldGhvZCBpZgorICogdGhlIGlzc3VpbmcgYmFja2VuZCBpcyBleGVjdXRpbmcgdGhl IElPIHN5bmNocm9ub3VzbHkuCisgKi8KK3N0YXRpYyBib29sCitwZ2Fpb19pb19uZWVkc193YWl0 X29uZShQZ0Fpb0hhbmRsZSAqaW9oKQoreworCXJldHVybiBwZ2Fpb19tZXRob2Rfb3BzLT53YWl0 X29uZSAmJiAhKGlvaC0+ZmxhZ3MgJiBQR0FJT19IRl9TWU5DSFJPTk9VUyk7Cit9CisKIC8qCiAg KiBXYWl0IGZvciBJTyB0byBjb21wbGV0ZS4gRXh0ZXJuYWwgY29kZSBzaG91bGQgbmV2ZXIgdXNl IHRoaXMsIG91dHNpZGUgb2YKICAqIHRoZSBBSU8gc3Vic3lzdGVtIHdhaXRzIGFyZSBvbmx5IGFs bG93ZWQgdmlhIHBnYWlvX3dyZWZfd2FpdCgpLgpAQCAtNjMyLDIzICs2NDIsMzggQEAgcGdhaW9f aW9fd2FpdChQZ0Fpb0hhbmRsZSAqaW9oLCB1aW50NjQgcmVmX2dlbmVyYXRpb24pCiAJCQkJZWxv ZyhFUlJPUiwgIklPIGluIHdyb25nIHN0YXRlOiAlZCIsIHN0YXRlKTsKIAkJCQlicmVhazsKIAot CQkJY2FzZSBQR0FJT19IU19TVUJNSVRURUQ6CisJCQljYXNlIFBHQUlPX0hTX0RFRklORUQ6CisJ CQljYXNlIFBHQUlPX0hTX1NUQUdFRDoKIAogCQkJCS8qCi0JCQkJICogSWYgd2UgbmVlZCB0byB3 YWl0IHZpYSB0aGUgSU8gbWV0aG9kLCBkbyBzbyBub3cuIERvbid0Ci0JCQkJICogY2hlY2sgdmlh IHRoZSBJTyBtZXRob2QgaWYgdGhlIGlzc3VpbmcgYmFja2VuZCBpcyBleGVjdXRpbmcKLQkJCQkg KiB0aGUgSU8gc3luY2hyb25vdXNseS4KKwkJCQkgKiBUaGUgb3duZXIgaGFzbid0IHN1Ym1pdHRl ZCB0aGUgSU8geWV0LiBJZiB3ZSBuZWVkIHRvIHdhaXQKKwkJCQkgKiB2aWEgdGhlIElPIG1ldGhv ZCwgd2FpdCBmb3Igc3VibWlzc2lvbiwgZ2l2aW5nIHRoaXMgYmFja2VuZAorCQkJCSAqIHRoZSBj aGFuY2UgdG8gY2FsbCAtPndhaXRfb25lKCkuCiAJCQkJICovCi0JCQkJaWYgKHBnYWlvX21ldGhv ZF9vcHMtPndhaXRfb25lICYmICEoaW9oLT5mbGFncyAmIFBHQUlPX0hGX1NZTkNIUk9OT1VTKSkK KwkJCQlpZiAocGdhaW9faW9fbmVlZHNfd2FpdF9vbmUoaW9oKSkKKwkJCQl7CisJCQkJCVBnQWlv QmFja2VuZCAqYmFja2VuZCA9ICZwZ2Fpb19jdGwtPmJhY2tlbmRfc3RhdGVbaW9oLT5vd25lcl9w cm9jbm9dOworCisJCQkJCUNvbmRpdGlvblZhcmlhYmxlUHJlcGFyZVRvU2xlZXAoJmJhY2tlbmQt PnN1Ym1pdF9jdik7CisJCQkJCXdoaWxlICghcGdhaW9faW9fd2FzX3JlY3ljbGVkKGlvaCwgcmVm X2dlbmVyYXRpb24sICZzdGF0ZSkgJiYKKwkJCQkJCSAgIChzdGF0ZSA9PSBQR0FJT19IU19ERUZJ TkVEIHx8CisJCQkJCQkJc3RhdGUgPT0gUEdBSU9fSFNfU1RBR0VEKSkKKwkJCQkJCUNvbmRpdGlv blZhcmlhYmxlU2xlZXAoJmJhY2tlbmQtPnN1Ym1pdF9jdiwgV0FJVF9FVkVOVF9BSU9fSU9fU1VC TUlUKTsKKwkJCQkJQ29uZGl0aW9uVmFyaWFibGVDYW5jZWxTbGVlcCgpOworCQkJCQljb250aW51 ZTsKKwkJCQl9CisJCQkJcGdfZmFsbHRocm91Z2g7CisKKwkJCWNhc2UgUEdBSU9fSFNfU1VCTUlU VEVEOgorCisJCQkJLyogSWYgd2UgbmVlZCB0byB3YWl0IHZpYSB0aGUgSU8gbWV0aG9kLCBkbyBz byBub3cuICovCisJCQkJaWYgKHBnYWlvX2lvX25lZWRzX3dhaXRfb25lKGlvaCkpCiAJCQkJewog CQkJCQlwZ2Fpb19tZXRob2Rfb3BzLT53YWl0X29uZShpb2gsIHJlZl9nZW5lcmF0aW9uKTsKIAkJ CQkJY29udGludWU7CiAJCQkJfQogCQkJCXBnX2ZhbGx0aHJvdWdoOwogCi0JCQkJLyogd2FpdGlu ZyBmb3Igb3duZXIgdG8gc3VibWl0ICovCi0JCQljYXNlIFBHQUlPX0hTX0RFRklORUQ6Ci0JCQlj YXNlIFBHQUlPX0hTX1NUQUdFRDoKIAkJCQkvKiB3YWl0aW5nIGZvciByZWFwZXIgdG8gY29tcGxl dGUgKi8KIAkJCQkvKiBmYWxsdGhyb3VnaCAqLwogCQkJY2FzZSBQR0FJT19IU19DT01QTEVURURf SU86CkBAIC0xMjI2LDYgKzEyNTEsMTUgQEAgcGdhaW9fc3VibWl0X3N0YWdlZCh2b2lkKQogCiAJ cGdhaW9fbXlfYmFja2VuZC0+bnVtX3N0YWdlZF9pb3MgPSAwOwogCisJLyoKKwkgKiBXYWtlIGFu eSBiYWNrZW5kIHRoYXQgc3RhcnRlZCB3YWl0aW5nIGZvciBhbnkgb2YgdGhlc2UgSU9zIGJlZm9y ZQorCSAqIHN1Ym1pc3Npb24sIGlmIGl0IGlzIG5lY2Vzc2FyeSB0byBjYWxsIC0+d2FpdF9vbmUo KSB0byBndWFyYW50ZWUKKwkgKiBwcm9ncmVzcyB3aXRoIHRoZSBjb25maWd1cmVkIElPIG1ldGhv ZC4gIE9uIGl0cyBzaWRlLCBwZ2Fpb19pb193YWl0KCkKKwkgKiBvbmx5IHdhaXRzIGZvciBzdWJt aXRfY3Ygb24gSU8gbWV0aG9kcyBuZWVkaW5nIHRoYXQuCisJICovCisJaWYgKHBnYWlvX21ldGhv ZF9vcHMtPndhaXRfb25lKQorCQlDb25kaXRpb25WYXJpYWJsZUJyb2FkY2FzdCgmcGdhaW9fbXlf YmFja2VuZC0+c3VibWl0X2N2KTsKKwogCXBnYWlvX2RlYnVnKERFQlVHNCwKIAkJCQkiYWlvOiBz dWJtaXR0ZWQgJWQgSU9zIiwKIAkJCQl0b3RhbF9zdWJtaXR0ZWQpOwpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvc3RvcmFnZS9haW8vYWlvX2luaXQuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlv L2Fpb19pbml0LmMKaW5kZXggZGEzMGQ3OTJhLi42ZmMwMGE5MTcgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3N0b3JhZ2UvYWlvL2Fpb19pbml0LmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9h aW8vYWlvX2luaXQuYwpAQCAtMTk5LDYgKzE5OSw3IEBAIEFpb1NobWVtSW5pdCh2b2lkICphcmcp CiAKIAkJZGNsaXN0X2luaXQoJmJzLT5pZGxlX2lvcyk7CiAJCW1lbXNldChicy0+c3RhZ2VkX2lv cywgMCwgc2l6ZW9mKFBnQWlvSGFuZGxlICopICogUEdBSU9fU1VCTUlUX0JBVENIX1NJWkUpOwor CQlDb25kaXRpb25WYXJpYWJsZUluaXQoJmJzLT5zdWJtaXRfY3YpOwogCQlkY2xpc3RfaW5pdCgm YnMtPmluX2ZsaWdodF9pb3MpOwogCiAJCS8qIGluaXRpYWxpemUgcGVyLWJhY2tlbmQgSU9zICov CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50X25hbWVz LnR4dCBiL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnRfbmFtZXMudHh0Cmlu ZGV4IDU2MDY1OWY5NS4uN2MzMzI2MzQ4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9h Y3Rpdml0eS93YWl0X2V2ZW50X25hbWVzLnR4dAorKysgYi9zcmMvYmFja2VuZC91dGlscy9hY3Rp dml0eS93YWl0X2V2ZW50X25hbWVzLnR4dApAQCAtMjAwLDYgKzIwMCw3IEBAIEFCSV9jb21wYXRp YmlsaXR5OgogU2VjdGlvbjogQ2xhc3NOYW1lIC0gV2FpdEV2ZW50SU8KIAogQUlPX0lPX0NPTVBM RVRJT04JIldhaXRpbmcgZm9yIGFub3RoZXIgcHJvY2VzcyB0byBjb21wbGV0ZSBJTy4iCitBSU9f SU9fU1VCTUlUCSJXYWl0aW5nIGZvciBhbm90aGVyIHByb2Nlc3MgdG8gc3VibWl0IElPLiIKIEFJ T19JT19VUklOR19TVUJNSVQJIldhaXRpbmcgZm9yIElPIHN1Ym1pc3Npb24gdmlhIGlvX3VyaW5n LiIKIEFJT19JT19VUklOR19FWEVDVVRJT04JIldhaXRpbmcgZm9yIElPIGV4ZWN1dGlvbiB2aWEg aW9fdXJpbmcuIgogQkFTRUJBQ0tVUF9SRUFECSJXYWl0aW5nIGZvciBiYXNlIGJhY2t1cCB0byBy ZWFkIGZyb20gYSBmaWxlLiIKLS0gCjIuNTMuMAoK --000000000000d6f56006543b3e3b Content-Type: application/octet-stream; name="v27-0006-heapam-Add-index-scan-I-O-prefetching.patch" Content-Disposition: attachment; filename="v27-0006-heapam-Add-index-scan-I-O-prefetching.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqe4shkw4 RnJvbSAxNTA4NDUwZTc5Y2I2ZTFlMjI0MDRlNDcwMjE3NzFlZTJkZmE1MWVjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFdl ZCwgMjUgTWFyIDIwMjYgMTY6NTg6MDkgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyNyA2LzldIGhl YXBhbTogQWRkIGluZGV4IHNjYW4gSS9PIHByZWZldGNoaW5nLgoKVGhpcyBjb21taXQgaW1wbGVt ZW50cyBJL08gcHJlZmV0Y2hpbmcgZm9yIGluZGV4IHNjYW5zIChhbmQgaW5kZXgtb25seQpzY2Fu cyB0aGF0IHJlcXVpcmUgaGVhcCBmZXRjaGVzKS4gVGhpcyB3YXMgbWFkZSBwb3NzaWJsZSBieSB0 aGUgcmVjZW50CmFkZGl0aW9uIG9mIGJhdGNoaW5nIGludGVyZmFjZXMgdG8gYm90aCB0aGUgdGFi bGUgQU0gYW5kIGluZGV4IEFNIEFQSXMuCgpUaGUgYW1nZXRiYXRjaCBpbmRleCBBTSBpbnRlcmZh Y2UgcHJvdmlkZXMgYmF0Y2hlcyBvZiBtYXRjaGluZyBUSURzCihyYXRoZXIgdGhhbiBvbmUgdHVw bGUgYXQgYSB0aW1lKSwgZWFjaCBvZiB3aGljaCBtdXN0IGJlIHRha2VuIGZyb20KaW5kZXggdHVw bGVzIHRoYXQgYXBwZWFyIHRvZ2V0aGVyIG9uIGEgc2luZ2xlIGluZGV4IHBhZ2UuICBUaGlzIGFs bG93cwptdWx0aXBsZSBiYXRjaGVzIHRvIGJlIGhlbGQgb3BlbiBzaW11bHRhbmVvdXNseS4gIEdp dmluZyB0aGUgdGFibGUgQU0gYW4KZXhwbGljaXQgdW5kZXJzdGFuZGluZyBvZiBpbmRleCBBTSBj b25jZXB0cy9pbmRleCBwYWdlIGJvdW5kYXJpZXMgYWxsb3dzCml0IHRvIGNvbnNpZGVyIGFsbCBv ZiB0aGUgcmVsZXZhbnQgY29zdHMgYW5kIGJlbmVmaXRzLgoKUHJlZmV0Y2hpbmcgaXMgaW1wbGVt ZW50ZWQgdXNpbmcgYSBwcmVmZXRjaGluZyBwb3NpdGlvbiB1bmRlciB0aGUKY29udHJvbCBvZiB0 aGUgdGFibGUgQU0uICBUaGlzIGlzIGNsb3NlbHkgcmVsYXRlZCB0byB0aGUgc2NhbiBwb3NpdGlv bgphZGRlZCBieSBjb21taXQgRklYTUUsIHdoaWNoIGludHJvZHVjZWQgdGhlIGFtZ2V0YmF0Y2gg aW50ZXJmYWNlLiAgQQpyZWFkIHN0cmVhbSBjYWxsYmFjayBhZHZhbmNlcyB0aGUgcmVhZCBzdHJl YW0gYXMgbmVlZGVkIHRvIHByb3ZpZGUKc3VmZmljaWVudGx5IG1hbnkgaGVhcCBibG9jayBudW1i ZXJzIHRvIG1haW50YWluIHRoZSByZWFkIHN0cmVhbSdzCnRhcmdldCBwcmVmZXRjaCBkaXN0YW5j ZS4KClRlc3RpbmcgaGFzIHNob3duIHRoYXQgaW5kZXggcHJlZmV0Y2hpbmcgY2FuIG1ha2UgaW5k ZXggc2NhbnMgbXVjaApmYXN0ZXIuICBMYXJnZSByYW5nZSBzY2FucyB0aGF0IHJldHVybiBtYW55 IHR1cGxlcyBjYW4gYmUgYXMgbXVjaCBhcyAzMHgKZmFzdGVyIHdpdGggbG9jYWwgU1NEcyB3aGVu IGJ1ZmZlcmVkIEkvTyBpcyB1c2VkLCBhbmQgNTB4IGZhc3RlciBvciBtb3JlCndpdGggaGlnaGVy LWxhdGVuY3kgc3RvcmFnZSBzdWNoIGFzIG5ldHdvcmstYXR0YWNoZWQgYmxvY2sgZGV2aWNlcywK d2hlcmUgdGhlIGJlbmVmaXQgb2YgaGlkaW5nIEkvTyBsYXRlbmN5IHRocm91Z2ggcHJlZmV0Y2hp bmcgaXMgZXZlbgpncmVhdGVyLgoKQSBuZXcgR1VDIChlbmFibGVfaW5kZXhzY2FuX3ByZWZldGNo KSBjb250cm9scyB0aGUgdXNlIG9mIGluZGV4CnByZWZldGNoaW5nLiAgVGhlIGRlZmF1bHQgc2V0 dGluZyBpcyAnb24nLCBzbyBhbGwgcGxhaW4gaW5kZXggc2NhbnMgdXNlCnByZWZldGNoaW5nIHdo ZXJlIHN1cHBvcnQgZXhpc3RzLiAgQWxsIGluZGV4LW9ubHkgc2NhbnMgd2lsbCBhbHNvIHVzZQpw cmVmZXRjaGluZyBhdXRvbWF0aWNhbGx5IHdoZXJlIHN1cHBvcnRlZCAob25jZSB0aGUgc2NhbiBz dGFydHMgdG8KcmVxdWlyZSBhIHNpZ25pZmljYW50IG51bWJlciBvZiBoZWFwIGZldGNoZXMpLgoK QW4gaW1wb3J0YW50IGdvYWwgb2YgdGhlIGFtZ2V0YmF0Y2ggZGVzaWduIGlzIHRvIGVuYWJsZSB0 aGUgdGFibGUgQU0ncwpyZWFkIHN0cmVhbSBjYWxsYmFjayB0byBhZHZhbmNlIGl0cyBwcmVmZXRj aCBwb3NpdGlvbiB1c2luZyBUSURzIHRoYXQKYXBwZWFyIG9uIGEgbGVhZiBwYWdlIHRoYXQncyBh aGVhZCBvZiB0aGUgY3VycmVudCBzY2FuIHBvc2l0aW9uJ3MgbGVhZgpwYWdlLiAgVGhpcyBpcyBj cnVjaWFsIHdpdGggc2NhbnMgb2YgaW5kZXhlcyB3aGVyZSBlYWNoIGxlYWYgcGFnZQpoYXBwZW5z IHRvIGhhdmUgcmVsYXRpdmVseSBmZXcgZGlzdGluY3QgaGVhcCBibG9ja3MgYW1vbmcgaXRzIG1h dGNoaW5nClRJRHMgKGFzIHdlbGwgYXMgd2l0aCBzY2FucyB3aXRoIGxlYWYgcGFnZXMgdGhhdCBo YXZlIHJlbGF0aXZlbHkgZmV3CnRvdGFsIG1hdGNoaW5nIGl0ZW1zKS4gIEluZGV4IHNjYW5zIGNh biBoYXZlIGFzIG1hbnkgYXMgNjQgb3BlbiBiYXRjaGVzLAp3aGljaCB0ZXN0aW5nIGhhcyBzaG93 biB0byBiZSBhYm91dCB0aGUgbWF4aW11bSBudW1iZXIgdGhhdCBjYW4gZXZlciBiZQp1c2VmdWwu ICBCYXRjaGVzIGFyZSBtYWludGFpbmVkIGluIHNjYW4gb3JkZXIgdXNpbmcgYSBzaW1wbGUgcmlu ZyBidWZmZXIKZGF0YSBzdHJ1Y3R1cmUuCgpJbiByYXJlIGNhc2VzIHdoZXJlIHRoZSBzY2FuIGV4 Y2VlZHMgdGhpcyBxdWFzaS1hcmJpdHJhcnkgbGltaXQgb2YgNjQsCnRoZSByZWFkIHN0cmVhbSBp cyB0ZW1wb3JhcmlseSBwYXVzZWQgdXNpbmcgdGhlIHJlYWQgc3RyZWFtIHBhdXNpbmcKbWVjaGFu aXNtIGFkZGVkIGJ5IGNvbW1pdCAzODIyOWNiOS4gIFByZWZldGNoaW5nICh2aWEgdGhlIHJlYWQg c3RyZWFtKQppcyByZXN1bWVkIG9ubHkgYWZ0ZXIgdGhlIHNjYW4gcG9zaXRpb24gYWR2YW5jZXMg YmV5b25kIGl0cyBjdXJyZW50IG9wZW4KYmF0Y2ggYW5kIHRoZW4gZnJlZXMgYW5kIHJlbW92ZXMg dGhlIGJhdGNoIGZyb20gdGhlIHNjYW4ncyBiYXRjaCByaW5nCmJ1ZmZlci4gIFRlc3RpbmcgaGFz IHNob3duIHRoYXQgaXQgaXNuJ3QgdmVyeSBjb21tb24gZm9yIHNjYW5zIHRvIGhvbGQKb3BlbiBt b3JlIHRoYW4gYWJvdXQgMTAgYmF0Y2hlcyB0byBnZXQgdGhlIGRlc2lyZWQgSS9PIHByZWZldGNo CmRpc3RhbmNlLgoKVGhlIGhldXJpc3RpYyB1c2VkIHRvIGRlY2lkZSB3aGVuIHRvIGJlZ2luIHBy ZWZldGNoaW5nIGRlbGF5cwppbml0aWFsaXphdGlvbiBvZiB0aGUgc2NhbidzIHJlYWQgc3RyZWFt IHVudGlsIHRoZSBzY2FuIHRyYW5zaXRpb25zIGZyb20KaXRzIGZpcnN0IGJhdGNoIHRvIGl0cyBz ZWNvbmQgYmF0Y2guICBFYWNoIGJhdGNoIGNvcnJlc3BvbmRzIHRvIG1hdGNoaW5nClRJRHMgZnJv bSBhIHNpbmdsZSBpbmRleCBsZWFmIHBhZ2UsIHNvIHByZWZldGNoaW5nIG9ubHkgYmVnaW5zIG9u Y2UgdGhlCnNjYW4gcmVhZHMgZnJvbSBpdHMgc2Vjb25kIGxlYWYgcGFnZSBjb250YWluaW5nIGF0 IGxlYXN0IG9uZSBtYXRjaGluZwppdGVtLiAgQSBzZWxlY3RpdmUgaW5kZXggc2NhbiB0aGF0IHRv dWNoZXMgb25seSBvbmUgbGVhZiBwYWdlIG5ldmVyCnJlYWNoZXMgdGhlIHNlY29uZCBiYXRjaCwg c28gdGhlIGhldXJpc3RpYyBjb3JyZWN0bHkgYXZvaWRzIHByZWZldGNoaW5nCm92ZXJoZWFkLiAg VGhlIHBpY3R1cmUgZm9yIG1vcmUgY29tcGxpY2F0ZWQgY2FzZXMgaXMgbWl4ZWQuCgpUaGUgc2Ft ZSBwcmluY2lwbGUgYXBwbGllcyB0byBuZXN0bG9vcCBpbm5lciBpbmRleCBzY2FucyB3aXRoIHZl cnkgdGlnaHQKbGltaXRzIChlLmcuLCBhIGNvcnJlbGF0ZWQgc3VicXVlcnkgd2l0aCBMSU1JVCAx KSwgd2hlcmUgZWFjaCByZXNjYW4KcmVhZHMgZnJvbSBvbmx5IGEgc2luZ2xlIGxlYWYgcGFnZTog dGhlIGhldXJpc3RpYyBhdm9pZHMgdGhlIGNvc3Qgb2YKcmVwZWF0ZWRseSByZXNldHRpbmcgYSBy ZWFkIHN0cmVhbSBhY3Jvc3MgbWFueSByZXNjYW5zLiAgT24gdGhlIG90aGVyCmhhbmQsIHNvbWUg c2VsZWN0aXZlIHNjYW5zIHRoYXQgYWNjZXNzIHJhbmRvbWx5LW9yZGVyZWQgaGVhcCBwYWdlcyB3 b3VsZApnZW51aW5lbHkgYmVuZWZpdCBmcm9tIHByZWZldGNoaW5nLCBidXQgbmV2ZXIgZ2V0IGFz IGZhciBhcyByZWFjaGluZwp0aGVpciBzZWNvbmQgYmF0Y2ggLS0gYSBtaXNzZWQgb3Bwb3J0dW5p dHksIHdoZXJlIHRoZSBoZXVyaXN0aWMgaXMKb3Zlcmx5IGNhdXRpb3VzLgoKQ29udmVyc2VseSwg dGhlIGhldXJpc3RpYyBpcyBub3QgY2F1dGlvdXMgZW5vdWdoIHdpdGggc2xpZ2h0bHkgbGVzcwpz ZWxlY3RpdmUgbmVzdGxvb3AgaW5uZXIgc2NhbnMgKGUuZy4sIExJTUlUIDMgd2l0aGluIGEgTEFU RVJBTCBqb2luKS4KVGhlc2UgcmVzY2FucyBtYXkgc3BhbiB0d28gbGVhZiBwYWdlcywganVzdCBi YXJlbHkgY3Jvc3NpbmcgdGhlCnNlY29uZC1iYXRjaCB0aHJlc2hvbGQsIHdoaWxlIHN0aWxsIG9u bHkgbmVlZGluZyB0byBmZXRjaCB0d28gb3IgdGhyZWUKaGVhcCBwYWdlcyAtLSBub3QgZW5vdWdo IGZvciBwcmVmZXRjaGluZyB0byByZWFsaXN0aWNhbGx5IGhlbHAgb3IgcGF5CmZvciBpdHNlbGYg b24gYW55IGluZGl2aWR1YWwgcmVzY2FuLiAgU3VjaCBxdWVyaWVzIGFyZSByZWdyZXNzZWQgYnkg dGhlCndvcmsgZnJvbSB0aGlzIGNvbW1pdCAocmVsYXRpdmUgdG8gUG9zdGdyZVNRTCAxOCksIHRo b3VnaCBvbmx5IHdoZW4gdGhlCnNjYW4gaGFzIHRvIHJlYWQgaGVhcCBwYWdlcyBmcm9tIHN0b3Jh Z2UuCgpBZGRpbmcgYSBzbWFydGVyIGhldXJpc3RpYyB0aGF0IGFkZHJlc3NlcyBib3RoIHNob3J0 Y29taW5ncyByZW1haW5zIGFzCndvcmsgZm9yIGEgZnV0dXJlIHJlbGVhc2UuICBQYXNzaW5nIGRv d24gYW4gRXhlY1NldFR1cGxlQm91bmQgc3R5bGUgaGludAphbmQgdXNpbmcgdGhhdCBoaW50IHRv IGluZmx1ZW5jZSBob3cgdGhlIHJlYWQgc3RyZWFtIHJhbXBzIHVwIGl0cwpkaXN0YW5jZSBzZWVt cyBsaWtlIGEgcHJvbWlzaW5nIGFwcHJvYWNoLgoKQXV0aG9yOiBUb21hcyBWb25kcmEgPHRvbWFz QHZvbmRyYS5tZT4KQXV0aG9yOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+ClJldmlld2Vk LWJ5OiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+ClJldmlld2VkLWJ5OiBUaG9t YXMgTXVucm8gPHRob21hcy5tdW5yb0BnbWFpbC5jb20+CkRpc2N1c3Npb246IGh0dHBzOi8vcG9z dGdyLmVzL20vY2Y4NWY0NmYtYjAyZi0wNWIyLTUyNDgtNTAwMGI4OTRlYmFiQGVudGVycHJpc2Vk Yi5jb20KLS0tCiBzcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmggICAgICAgICAgICAgICAgICAg fCAgMTMgKwogc3JjL2luY2x1ZGUvYWNjZXNzL2luZGV4YmF0Y2guaCAgICAgICAgICAgICAgIHwg MjI0ICsrKysrKysrKy0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmggICAgICAgICAgICAg ICAgICB8ICAgNyArCiBzcmMvaW5jbHVkZS9vcHRpbWl6ZXIvY29zdC5oICAgICAgICAgICAgICAg ICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2luZGV4c2Nhbi5jICAg IHwgNDIwICsrKysrKysrKysrKysrKysrLQogc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4 YmF0Y2guYyAgICAgICAgIHwgIDM2ICstCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0 c2l6ZS5jICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1l dGVycy5kYXQgICAgIHwgICA3ICsKIHNyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5j b25mLnNhbXBsZSB8ICAgMSArCiBkb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwgICAgICAgICAgICAg ICAgICAgICAgfCAgMTYgKwogZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbCAgICAgICAgICAgICAg ICAgICAgIHwgIDk1ICsrKy0KIGRvYy9zcmMvc2dtbC90YWJsZWFtLnNnbWwgICAgICAgICAgICAg ICAgICAgICB8ICAgOCArCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5c3ZpZXdzLm91dCAg ICAgICAgfCAgIDMgKy0KIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgICAgICAg ICAgICB8ICAgMSArCiAxNCBmaWxlcyBjaGFuZ2VkLCA4MTIgaW5zZXJ0aW9ucygrKSwgMjEgZGVs ZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oIGIvc3Jj L2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCmluZGV4IDEyZjhiZGFiYi4uMDgwMTM1NDQ5IDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNj ZXNzL2hlYXBhbS5oCkBAIC0xMzUsNiArMTM1LDE5IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4U2Nh bkhlYXBEYXRhCiAJLyogUGxhaW4gaW5kZXggc2NhbiB4c19sYXN0aW5ibG9jayBvcHRpbWl6YXRp b24gKi8KIAlib29sCQl4c19sYXN0aW5ibG9jazsgLyogbGFzdCBUSUQgb24gdGhpcyBibG9jayBp biBjdXJyZW50IGJhdGNoPyAqLwogCisJLyoKKwkgKiBSZWFkIHN0cmVhbSBzdGF0ZSBmb3IgcHJl ZmV0Y2hpbmcgKG9ubHkgdXNlZCBkdXJpbmcgYW1nZXRiYXRjaCBzY2FucykuCisJICoKKwkgKiBU aGUgcmVhZCBzdHJlYW0gbW92ZXMgYWhlYWQgb2YgdGhlIHNjYW4ncyBjdXJyZW50IHBvc2l0aW9u IHVzaW5nIGl0cworCSAqIG93biBwcmVmZXRjaGluZyBwb3NpdGlvbiAocGVyIHRoZSB0YWJsZWFt X3V0aWxfcHJlZmV0Y2hwb3NfKgorCSAqIGNvbnZlbnRpb25zIGZyb20gaW5kZXhiYXRjaC5oKS4g IFRoZSByZWFkIHN0cmVhbSBpcyBhbGxvY2F0ZWQgZWFybHkgaW4KKwkgKiB0aGUgc2NhbiwgYW5k IHJlc2V0IG9uIHJlc2NhbiAoYW5kIHdoZW4gdGhlIHNjYW4gZGlyZWN0aW9uIGNoYW5nZXMpLgor CSAqLworCWJvb2wJCXhzX3BhdXNlZDsJCS8qIHBhdXNlZCB1bnRpbCBuZXh0IGJhdGNoIGlzIHJl YWQ/ICovCisJU2NhbkRpcmVjdGlvbiB4c19yZWFkX3N0cmVhbV9kaXI7CS8qIGluZGV4IHNjYW4g ZGlyZWN0aW9uICovCisJQmxvY2tOdW1iZXIgeHNfcHJlZmV0Y2hfYmxvY2s7CS8qIGxhc3QgYmxv Y2sgcmV0dXJuZWQgdG8geHNfcmVhZF9zdHJlYW0gKi8KKwlSZWFkU3RyZWFtICp4c19yZWFkX3N0 cmVhbTsgLyogcHJlZmV0Y2hpbmcgcmVhZCBzdHJlYW0gKi8KKwogCS8qIFBlci10dXBsZSBjb250 ZXh0IGZvciBwYWRkaW5nICJuYW1lIiBjb2x1bW5zIGR1cmluZyBpbmRleC1vbmx5IHNjYW5zICov CiAJTWVtb3J5Q29udGV4dCB4c19pdHVwX2N4dDsKIH0gSW5kZXhTY2FuSGVhcERhdGE7CmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaW5kZXhiYXRjaC5oIGIvc3JjL2luY2x1ZGUvYWNj ZXNzL2luZGV4YmF0Y2guaAppbmRleCBiMjJlMDJhNTIuLjg5OTBjNWEwOCAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvYWNjZXNzL2luZGV4YmF0Y2guaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3Mv aW5kZXhiYXRjaC5oCkBAIC0yMDksNiArMjA5LDQxIEBAIGluZGV4X3NjYW5fYmF0Y2hfaW5kZXhf b3BhcXVlX2R5bihJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKQogICog LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAKKy8qCisgKiBDb21wYXJlIHR3byBiYXRjaCByaW5n IHBvc2l0aW9ucyBpbiB0aGUgZ2l2ZW4gc2NhbiBkaXJlY3Rpb24uCisgKgorICogUmV0dXJucyBu ZWdhdGl2ZSBpZiBwb3MxIGlzIGJlaGluZCBwb3MyLCAwIGlmIGVxdWFsLCBwb3NpdGl2ZSBpZiBw b3MxIGlzCisgKiBhaGVhZCBvZiBwb3MyLgorICovCitzdGF0aWMgaW5saW5lIGludAoraW5kZXhf c2Nhbl9wb3NfY21wKEJhdGNoUmluZ0l0ZW1Qb3MgKnBvczEsIEJhdGNoUmluZ0l0ZW1Qb3MgKnBv czIsCisJCQkJICAgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJaW50OAkJYmF0Y2hkaWZm OworCisJQXNzZXJ0KHBvczEtPnZhbGlkICYmIHBvczItPnZhbGlkKTsKKworCWJhdGNoZGlmZiA9 IChpbnQ4KSAocG9zMS0+YmF0Y2ggLSBwb3MyLT5iYXRjaCk7CisKKwlBc3NlcnQoYmF0Y2hkaWZm ID4gLUlOREVYX1NDQU5fTUFYX0JBVENIRVMgJiYKKwkJICAgYmF0Y2hkaWZmIDwgSU5ERVhfU0NB Tl9NQVhfQkFUQ0hFUyk7CisKKwlpZiAoYmF0Y2hkaWZmICE9IDApCisJeworCQkvKiBSZXNvbHZl IGNvbXBhcmlzb24gdXNpbmcgZGlmZmVyaW5nIGJhdGNoIG9mZnNldHMgKi8KKwkJcmV0dXJuIGJh dGNoZGlmZjsKKwl9CisKKwkvKgorCSAqIFJlc29sdmUgY29tcGFyaXNvbiB1c2luZyBpdGVtc1td LXdpc2UgaW5kZXhlcyBmcm9tIGNhbGxlcidzIHBvc2l0aW9ucywKKwkgKiBzaW5jZSBib3RoIHBv c2l0aW9ucyBwb2ludCB0byB0aGUgc2FtZSByaW5nIGJ1ZmZlciBiYXRjaAorCSAqLworCWlmIChT Y2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcmVjdGlvbikpCisJCXJldHVybiBwb3MxLT5pdGVtIC0g cG9zMi0+aXRlbTsKKwllbHNlCisJCXJldHVybiBwb3MyLT5pdGVtIC0gcG9zMS0+aXRlbTsKK30K KwogLyoKICAqIEFkdmFuY2UgcG9zaXRpb24gdG8gaXRzIG5leHQgaXRlbSBpbiB0aGUgYmF0Y2gu CiAgKgpAQCAtMzEwLDYgKzM0NSw3IEBAIHRhYmxlYW1fdXRpbF9iYXRjaHNjYW5faW5pdChJbmRl eFNjYW5EZXNjIHNjYW4pCiAJQXNzZXJ0KHNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5h bWdldGJhdGNoICE9IE5VTEwpOwogCiAJc2Nhbi0+YmF0Y2hyaW5nYnVmLnNjYW5Qb3MudmFsaWQg PSBmYWxzZTsKKwlzY2FuLT5iYXRjaHJpbmdidWYucHJlZmV0Y2hQb3MudmFsaWQgPSBmYWxzZTsK IAlzY2FuLT5iYXRjaHJpbmdidWYubWFya1Bvcy52YWxpZCA9IGZhbHNlOwogCiAJc2Nhbi0+YmF0 Y2hyaW5nYnVmLm1hcmtCYXRjaCA9IE5VTEw7CkBAIC0zNTksNyArMzk1LDcgQEAgdGFibGVhbV91 dGlsX3NjYW5wb3NfYWR2YW5jZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGly ZWN0aW9uLAogCiAJLyoKIAkgKiBzY2FuUG9zIGlzIHZhbGlkLCBzbyBzY2FuQmF0Y2ggbXVzdCBh bHJlYWR5IGJlIGxvYWRlZCBpbiBiYXRjaCByaW5nCi0JICogYnVmZmVyLiAgV2UgcmVseSBvbiB0 aGF0IGhlcmUuCisJICogYnVmZmVyLiAgV2UgcmVseSBvbiB0aGF0IGhlcmUgKGNhbid0IGRvIHRo aXMgd2l0aCBwcmVmZXRjaEJhdGNoKS4KIAkgKi8KIAlwZ19hc3N1bWUoYmF0Y2hyaW5nYnVmLT5o ZWFkQmF0Y2ggPT0gc2NhblBvcy0+YmF0Y2gpOwogCkBAIC0zNzEsOSArNDA3LDkgQEAgdGFibGVh bV91dGlsX3NjYW5wb3NfYWR2YW5jZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24g ZGlyZWN0aW9uLAogLyoKICAqIEZldGNoIHRoZSBuZXh0IGJhdGNoIG9mIG1hdGNoaW5nIGl0ZW1z IGZvciB0aGUgc2NhbiAob3IgdGhlIGZpcnN0KS4KICAqCi0gKiBDYWxsZWQgd2hlbiBjYWxsZXIn cyBjdXJyZW50IGJhdGNoIChwYXNzZWQgdG8gdXMgYXMgcHJpb3JCYXRjaCkgaGFzIG5vIG1vcmUK LSAqIG1hdGNoaW5nIGl0ZW1zIGluIHRoZSBnaXZlbiBzY2FuIGRpcmVjdGlvbi4gIENhbGxlciBw YXNzZXMgYSBOVUxMCi0gKiBwcmlvckJhdGNoIG9uIHRoZSBmaXJzdCBjYWxsIGhlcmUgZm9yIHRo ZSBzY2FuLgorICogQ2FsbGVkIHdoZW4gY2FsbGVyJ3MgY3VycmVudCBzY2FuQmF0Y2gvcHJlZmV0 Y2hCYXRjaCAocGFzc2VkIHRvIHVzIGFzCisgKiBwcmlvckJhdGNoKSBoYXMgbm8gbW9yZSBtYXRj aGluZyBpdGVtcyBpbiB0aGUgZ2l2ZW4gc2NhbiBkaXJlY3Rpb24uICBDYWxsZXIKKyAqIHBhc3Nl cyBhIE5VTEwgcHJpb3JCYXRjaCBvbiB0aGUgZmlyc3QgY2FsbCBoZXJlIGZvciB0aGUgc2Nhbi4K ICAqCiAgKiBSZXR1cm5zIHRoZSBuZXh0IGJhdGNoIHRvIGJlIHByb2Nlc3NlZCBieSBjYWxsZXIg aW4gdGhlIGdpdmVuIHNjYW4KICAqIGRpcmVjdGlvbiwgb3IgTlVMTCB3aGVuIHRoZXJlIGFyZSBu byBtb3JlIG1hdGNoZXMgaW4gdGhhdCBkaXJlY3Rpb24uCkBAIC0zODcsNyArNDIzLDcgQEAgdGFi bGVhbV91dGlsX3NjYW5wb3NfYWR2YW5jZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rp b24gZGlyZWN0aW9uLAogICogZnJlZSBhbnkgYmF0Y2hlcyBoZXJlLCB0aG91Z2g7IHRoYXQgaXMg YSBzZXBhcmF0ZSBzdGVwIChjYWxsZXJzIHNob3VsZG4ndAogICogZnJlZSBhIGJhdGNoIHVudGls IHRoZXkncmUgZGVmaW5pdGVseSBkb25lIHdpdGggaXQsIHdoaWNoIGlzIGNvbXBsZXRlbHkKICAq IGluZGVwZW5kZW50IG9mIG5lZWRpbmcgdGhlIG5leHQgYmF0Y2ggaW4gbGluZSkuICBUaGUgY2Fs bGVyIGlzIHJlc3BvbnNpYmxlCi0gKiBmb3IgYWR2YW5jaW5nIHRoZWlyIG93biBwb3NpdGlvbi4K KyAqIGZvciBhZHZhbmNpbmcgdGhlaXIgb3duIHNjYW5Qb3MvcHJlZmV0Y2hQb3MgcG9zaXRpb24u CiAgKi8KIHN0YXRpYyBwZ19hdHRyaWJ1dGVfYWx3YXlzX2lubGluZSBJbmRleFNjYW5CYXRjaAog dGFibGVhbV91dGlsX2ZldGNoX25leHRfYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGly ZWN0aW9uIGRpcmVjdGlvbiwKQEAgLTQ5OSwxNSArNTM1LDIxIEBAIHRhYmxlYW1fdXRpbF9mZXRj aF9uZXh0X2JhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24s CiAgKiBDYWxsZWQgYWZ0ZXIgdGFibGVhbV91dGlsX2ZldGNoX25leHRfYmF0Y2ggcmV0dXJucyBu ZXdTY2FuQmF0Y2gsIHRoZSBuZXh0CiAgKiBiYXRjaCB0aGF0IHNjYW5Qb3Mgd2lsbCBjb25zdW1l IG1hdGNoaW5nIGl0ZW1zIGZyb20uICBXZSByZWxlYXNlIHRoZQogICogbm93LW9ic29sZXNjZW50 IG9sZCBzY2FuQmF0Y2ggKHRoZSByaW5nIGJ1ZmZlcidzIGhlYWQgYmF0Y2gpLCBmcmVlaW5nIHVw Ci0gKiBpdHMgcmluZyBidWZmZXIgc2xvdC4gIChXaGVuIG5ld1NjYW5CYXRjaCBpcyB0aGUgc2Nh bidzIGZpcnN0IGJhdGNoLCB0aGVyZQotICogaXMgbm8gb2xkIHNjYW5CYXRjaCBmb3IgdXMgdG8g cmVsZWFzZS4pCisgKiBpdHMgcmluZyBidWZmZXIgc2xvdC4KKyAqCisgKiBSZXR1cm5zIHRydWUg d2hlbiBhIHByZXZpb3VzbHkgb2NjdXBpZWQgcmluZyBidWZmZXIgc2xvdCB3YXMgZnJlZWQuICBB CisgKiB0YWJsZSBBTSB0aGF0IHBhdXNlZCBpdHMgcHJlZmV0Y2ggbWVjaGFuaXNtIGJlY2F1c2Ug dGhlIHJpbmcgYnVmZmVyIHdhcworICogZnVsbCAoc2VlIHRhYmxlYW1fdXRpbF9wcmVmZXRjaHBv c19hZHZhbmNlKSBjYW4gcmVzdW1lIGl0IG5vdyB0aGF0IHRoZXJlJ3MKKyAqIHNwYWNlIHRvIHN0 b3JlIG9uZSBtb3JlIGJhdGNoLiAgUmV0dXJucyBmYWxzZSB3aGVuIG5ld1NjYW5CYXRjaCBpcyB0 aGUKKyAqIHNjYW4ncyBmaXJzdCBiYXRjaCAoaS5lLiB0aGVyZSB3YXMgbm8gb2xkIHNjYW5CYXRj aCBmb3IgdXMgdG8gcmVsZWFzZSkuCiAgKi8KLXN0YXRpYyBwZ19hdHRyaWJ1dGVfYWx3YXlzX2lu bGluZSB2b2lkCitzdGF0aWMgcGdfYXR0cmlidXRlX2Fsd2F5c19pbmxpbmUgYm9vbAogdGFibGVh bV91dGlsX3NjYW5wb3NfbmV4dGJhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlv biBkaXJlY3Rpb24sCiAJCQkJCQkJICAgSW5kZXhTY2FuQmF0Y2ggbmV3U2NhbkJhdGNoKQogewog CUJhdGNoUmluZ0J1ZmZlciAqYmF0Y2hyaW5nYnVmID0gJnNjYW4tPmJhdGNocmluZ2J1ZjsKIAlC YXRjaFJpbmdJdGVtUG9zICpzY2FuUG9zID0gJmJhdGNocmluZ2J1Zi0+c2NhblBvczsKKwlCYXRj aFJpbmdJdGVtUG9zICpwcmVmZXRjaFBvcyA9ICZiYXRjaHJpbmdidWYtPnByZWZldGNoUG9zOwog CWJvb2wJCXJlbGVhc2VPbGRIZWFkQmF0Y2ggPSBzY2FuUG9zLT52YWxpZDsKIAlJbmRleFNjYW5C YXRjaCBoZWFkQmF0Y2g7CiAKQEAgLTUxOSw3ICs1NjEsNyBAQCB0YWJsZWFtX3V0aWxfc2NhbnBv c19uZXh0YmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwK IAl7CiAJCS8qIG5ld1NjYW5CYXRjaCBpcyB0aGUgc2NhbidzIGZpcnN0IGFuZCBvbmx5IGJhdGNo ICovCiAJCUFzc2VydChiYXRjaHJpbmdidWYtPmhlYWRCYXRjaCA9PSBzY2FuUG9zLT5iYXRjaCk7 Ci0JCXJldHVybjsKKwkJcmV0dXJuIGZhbHNlOwogCX0KIAogCWhlYWRCYXRjaCA9IGluZGV4X3Nj YW5fYmF0Y2goc2NhbiwgYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2gpOwpAQCAtNTMwLDEyICs1NzIs MTc2IEBAIHRhYmxlYW1fdXRpbF9zY2FucG9zX25leHRiYXRjaChJbmRleFNjYW5EZXNjIHNjYW4s IFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAogCS8qIGZyZWUgb2Jzb2xlc2NlbnQgaGVhZCBiYXRj aCAodW5sZXNzIGl0IGlzIHNjYW4ncyBtYXJrQmF0Y2gpICovCiAJdGFibGVhbV91dGlsX3JlbGVh c2VfYmF0Y2goc2NhbiwgaGVhZEJhdGNoKTsKIAorCS8qCisJICogSWYgd2UncmUgYWJvdXQgdG8g cmVsZWFzZSB0aGUgYmF0Y2ggdGhhdCBwcmVmZXRjaFBvcyBjdXJyZW50bHkgcG9pbnRzCisJICog dG8sIGp1c3QgaW52YWxpZGF0ZSBwcmVmZXRjaFBvcy4gIFRoaXMga2VlcHMgcHJlZmV0Y2hQb3Mg ZnJvbSBldmVyCisJICogZmFsbGluZyBiZWhpbmQgc2NhblBvcyBhdCB0aGUgYmF0Y2ggZ3JhbnVs YXJpdHksIHdoaWNoCisJICogdGFibGVhbV91dGlsX3ByZWZldGNocG9zX2NhdGNodXAgcmVsaWVz IG9uLgorCSAqLworCWlmIChwcmVmZXRjaFBvcy0+dmFsaWQgJiYKKwkJcHJlZmV0Y2hQb3MtPmJh dGNoID09IGJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoKQorCQlwcmVmZXRjaFBvcy0+dmFsaWQgPSBm YWxzZTsKKwogCS8qIFJlbW92ZSB0aGUgYmF0Y2ggZnJvbSB0aGUgcmluZyBidWZmZXIgKGV2ZW4g aWYgaXQncyBtYXJrQmF0Y2gpICovCiAJYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2grKzsKIAogCS8q IFBvc3Rjb25kaXRpb25zIGZvciBoYXZpbmcgZnJlZWQgdXAgYSByaW5nIGJ1ZmZlciBzbG90ICov CisJQXNzZXJ0KCFwcmVmZXRjaFBvcy0+dmFsaWQgfHwKKwkJICAgaW5kZXhfc2Nhbl9iYXRjaF9s b2FkZWQoc2NhbiwgcHJlZmV0Y2hQb3MtPmJhdGNoKSk7CiAJQXNzZXJ0KCFpbmRleF9zY2FuX2Jh dGNoX2Z1bGwoc2NhbikpOwogCUFzc2VydChiYXRjaHJpbmdidWYtPmhlYWRCYXRjaCA9PSBzY2Fu UG9zLT5iYXRjaCk7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqIEhhbmRsZSBpbml0aWFs aXphdGlvbiBvZiB0aGUgc2NhbidzIHByZWZldGNoUG9zLCB3aGVuIHByZWZldGNoUG9zIGlzbid0 CisgKiB5ZXQgdmFsaWQgKGFsc28gaGFuZGxlcyB0aGUgcHJlZmV0Y2hQb3MgPCBzY2FuUG9zIGVk Z2UgY2FzZSkuCisgKgorICogQ2FsbGVkIGF0IHRoZSBzdGFydCBvZiBlYWNoIHRhYmxlIEFNIHBy ZWZldGNoIGNhbGxiYWNrIGNhbGwuICBSZXR1cm5zIHRydWUKKyAqIGFmdGVyIHNldHRpbmcgcHJl ZmV0Y2hQb3MgdG8gdGhlIHNjYW4ncyBjdXJyZW50IHNjYW5Qb3MuICBUaGF0J3MgYSBzcGVjaWFs CisgKiBjYXNlOiB0aGUgcHJlZmV0Y2ggY2FsbGJhY2sgc2hvdWxkIHByb2Nlc3MgdGhlIHZlcnkg aXRlbSB0aGF0IHRoZSBzY2FuIGlzCisgKiBvbiBkaXJlY3RseSAoZS5nLiwgYnkgcmV0dXJuaW5n IHRoYXQgaXRlbSdzIHRhYmxlIGJsb2NrIHRvIGl0cyByZWFkCisgKiBzdHJlYW0pLCByYXRoZXIg dGhhbiByZWFkaW5nIGFoZWFkIG9mIHRoZSBzY2FuLiAgUmV0dXJucyBmYWxzZSB3aGVuCisgKiBw cmVmZXRjaFBvcyBpcyBhaGVhZCBvZiAob3IgZXF1YWwgdG8pIHNjYW5Qb3MsIGluIHdoaWNoIGNh c2UgdGhlIHByZWZldGNoCisgKiBjYWxsYmFjayBwaWNrcyB1cCBmcm9tIHdoZXJlIGl0cyBsYXN0 IGNhbGwgbGVmdCBvZmYuCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbAordGFibGVhbV91dGlsX3By ZWZldGNocG9zX2NhdGNodXAoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVj dGlvbikKK3sKKwlCYXRjaFJpbmdCdWZmZXIgKmJhdGNocmluZ2J1ZiA9ICZzY2FuLT5iYXRjaHJp bmdidWY7CisJQmF0Y2hSaW5nSXRlbVBvcyAqc2NhblBvcyA9ICZiYXRjaHJpbmdidWYtPnNjYW5Q b3M7CisJQmF0Y2hSaW5nSXRlbVBvcyAqcHJlZmV0Y2hQb3MgPSAmYmF0Y2hyaW5nYnVmLT5wcmVm ZXRjaFBvczsKKworCS8qCisJICogc2NhblBvcyBtdXN0IGFsd2F5cyBiZSB2YWxpZCB3aGVuIHBy ZWZldGNoaW5nIHRha2VzIHBsYWNlLiAgVGhlcmUgaGFzCisJICogdG8gYmUgYXQgbGVhc3Qgb25l IGJhdGNoLCBsb2FkZWQgYXMgdGhlIHNjYW4ncyBzY2FuQmF0Y2guCisJICovCisJQXNzZXJ0KGlu ZGV4X3NjYW5fYmF0Y2hfY291bnQoc2NhbikgPiAwKTsKKwlBc3NlcnQoc2NhblBvcy0+dmFsaWQg JiYgaW5kZXhfc2Nhbl9iYXRjaF9sb2FkZWQoc2Nhbiwgc2NhblBvcy0+YmF0Y2gpKTsKKworCS8q CisJICogcHJlZmV0Y2hQb3MgY2FuICJmYWxsIGJlaGluZCIgc2NhblBvcyBhdCB0aGUgaXRlbSBn cmFudWxhcml0eTogdGhlCisJICogcHJlZmV0Y2ggY2FsbGJhY2sgb25seSBydW5zIG9uIGRlbWFu ZCwgc28gc2NhblBvcyBjYW4gb3ZlcnRha2UKKwkgKiBwcmVmZXRjaFBvcyB3aGVuZXZlciB0aGUg c2NhbiBjb25zdW1lcyBpdGVtcyB3aXRob3V0IHRoZSBjYWxsYmFjayBiZWluZworCSAqIGNhbGxl ZCAoZS5nLiwgcnVucyBvZiBhZGphY2VudCBtYXRjaGluZyBpdGVtcyB3aG9zZSBUSURzIGFsbCBw b2ludCB0bworCSAqIHRoZSBzYW1lIHRhYmxlIGJsb2NrKS4gIFdlIGhhbmRsZSB0aGF0IGNhc2Ug dXNpbmcgZXhhY3RseSB0aGUgc2FtZQorCSAqIHN0ZXBzIGFzIGluaXRpYWxpemF0aW9uLgorCSAq CisJICogcHJlZmV0Y2hQb3MgY2FuIG5ldmVyIGZhbGwgYmVoaW5kIHNjYW5Qb3MgYXQgdGhlIGJh dGNoIGdyYW51bGFyaXR5LAorCSAqIHNpbmNlIHRhYmxlYW1fdXRpbF9zY2FucG9zX25leHRiYXRj aCBpbnZhbGlkYXRlcyBwcmVmZXRjaFBvcyBiZWZvcmUKKwkgKiByZWxlYXNpbmcgdGhlIGJhdGNo IHRoYXQgcHJlZmV0Y2hQb3MgcG9pbnRzIHRvLiAgVGhlcmUgaXMgdGhlcmVmb3JlIG5vCisJICog ZGFuZ2VyIG9mIHByZWZldGNoUG9zLmJhdGNoIGZhbGxpbmcgc28gZmFyIGJlaGluZCBzY2FuUG9z LmJhdGNoIHRoYXQgaXQKKwkgKiB3cmFwcyBhcm91bmQgKGFuZCBhcHBlYXJzIHRvIGJlIGFoZWFk IG9mIHNjYW5Qb3MgaW5zdGVhZCBvZiBiZWhpbmQgaXQpLgorCSAqLworCWlmICghcHJlZmV0Y2hQ b3MtPnZhbGlkIHx8CisJCWluZGV4X3NjYW5fcG9zX2NtcChzY2FuUG9zLCBwcmVmZXRjaFBvcywg ZGlyZWN0aW9uKSA+IDApCisJeworCQkqcHJlZmV0Y2hQb3MgPSAqc2NhblBvczsKKwkJcmV0dXJu IHRydWU7CisJfQorCisJLyogUGlja2luZyB1cCBwcmVmZXRjaGluZyBmcm9tIHdoZXJlIHRoZSBs YXN0IGNhbGxiYWNrIGNhbGwgbGVmdCBvZmYgKi8KKwlBc3NlcnQoaW5kZXhfc2Nhbl9wb3NfY21w KHNjYW5Qb3MsIHByZWZldGNoUG9zLCBkaXJlY3Rpb24pIDw9IDApOworCXJldHVybiBmYWxzZTsK K30KKworLyoKKyAqIFJlc3VsdCBvZiBhIHRhYmxlYW1fdXRpbF9wcmVmZXRjaHBvc19hZHZhbmNl IGNhbGwKKyAqLwordHlwZWRlZiBlbnVtIEJhdGNoUG9zQWR2YW5jZVJlc3VsdAoreworCUJBVENI X1BPU19BRFZBTkNFRCwJCQkvKiBhZHZhbmNlZCB0byBuZXh0IGl0ZW0gaW4gY3VycmVudCBiYXRj aCAqLworCUJBVENIX1BPU19CQVRDSF9BRFZBTkNFRCwJLyogYWR2YW5jZWQgdG8gZmlyc3QgaXRl bSBvZiBuZXcgYmF0Y2ggKi8KKwlCQVRDSF9QT1NfRE9ORSwJCQkJLyogbm8gZnVydGhlciBtYXRj aGluZyBpdGVtcyBpbiBkaXJlY3Rpb24gKi8KKwlCQVRDSF9QT1NfUklOR19GVUxMLAkJLyogY291 bGRuJ3QgYWR2YW5jZTsgcmluZyBidWZmZXIgZnVsbCAqLworfSBCYXRjaFBvc0FkdmFuY2VSZXN1 bHQ7CisKKy8qCisgKiBBZHZhbmNlIHRoZSBzY2FuJ3MgcHJlZmV0Y2hQb3MgdG8gdGhlIG5leHQg aXRlbSB0aGF0IHRoZSB0YWJsZSBBTSdzCisgKiBwcmVmZXRjaCBjYWxsYmFjayBzaG91bGQgY29u c2lkZXIgcmVhZGluZyBhaGVhZCwgbW92aW5nIGluIHRoZSBnaXZlbiBzY2FuCisgKiBkaXJlY3Rp b24uCisgKgorICogT24gZW50cnksICpwcmVmZXRjaEJhdGNoIG11c3QgYmUgdGhlIGJhdGNoIHRo YXQgcHJlZmV0Y2hQb3MgcG9pbnRzIHRvLgorICogQWR2YW5jZXMgcHJlZmV0Y2hQb3MgdG8gdGhl IG5leHQgaXRlbSB3aXRoaW4gKnByZWZldGNoQmF0Y2ggd2hlbiBwb3NzaWJsZQorICogKHJldHVy bnMgQkFUQ0hfUE9TX0FEVkFOQ0VEKS4gIE90aGVyd2lzZSB0cmllcyB0byBhZHZhbmNlIHRvIHRo ZSBzY2FuJ3MKKyAqIG5leHQgYmF0Y2gsIHNldHRpbmcgKnByZWZldGNoQmF0Y2ggdG8gdGhlIG5l dyBiYXRjaCBhbmQgcG9zaXRpb25pbmcKKyAqIHByZWZldGNoUG9zIGF0IGl0cyBmaXJzdCBpdGVt IGluIHRoZSBzY2FuIGRpcmVjdGlvbiAocmV0dXJucworICogQkFUQ0hfUE9TX0JBVENIX0FEVkFO Q0VEKS4gIENhbGxlcnMgbXVzdCB1c2UgdGhlIHJldHVybmVkIHJlc3VsdCAobmV2ZXIKKyAqIGNv bXBhcmUgKnByZWZldGNoQmF0Y2ggYWdhaW5zdCBpdHMgZWFybGllciB2YWx1ZSkgdG8gZGV0ZWN0 IHRoaXMgY2FzZTsKKyAqIGJhdGNoIHJlY3ljbGluZyBjYW4gcmV1c2UgdGhlIG1lbW9yeSBvZiBh IHJlY2VudGx5IHJlbGVhc2VkIGJhdGNoLgorICoKKyAqIFJldHVybnMgQkFUQ0hfUE9TX0RPTkUg d2hlbiB0aGVyZSBhcmUgbm8gZnVydGhlciBtYXRjaGluZyBpdGVtcyBpbiB0aGUKKyAqIGdpdmVu IHNjYW4gZGlyZWN0aW9uICgqcHJlZmV0Y2hCYXRjaCBpcyBzZXQgdG8gTlVMTCkuCisgKgorICog UmV0dXJucyBCQVRDSF9QT1NfUklOR19GVUxMIHdoZW4gdGhlIG5leHQgYmF0Y2ggY291bGRuJ3Qg YmUgbG9hZGVkIGJlY2F1c2UKKyAqIGFsbCBhdmFpbGFibGUgcmluZyBidWZmZXIgYmF0Y2ggc2xv dHMgYXJlIGN1cnJlbnRseSBpbiB1c2UgKHByZWZldGNoUG9zCisgKiBhbmQgKnByZWZldGNoQmF0 Y2ggYXJlIGxlZnQgdW5jaGFuZ2VkKS4gIENhbGxlciByZXNwb25kcyBieSBtb21lbnRhcmlseQor ICogcGF1c2luZyBpdHMgcmVhZC1haGVhZCBtZWNoYW5pc207IGl0IGNhbiBiZSByZXN1bWVkIG9u Y2UKKyAqIHRhYmxlYW1fdXRpbF9zY2FucG9zX25leHRiYXRjaCByZXBvcnRzIHRoYXQgdGhlIHNj YW4gZnJlZWQgdXAgYSBzbG90CisgKiAod2hpY2gnbGwgaGFwcGVuIG9ubHkgYWZ0ZXIgc2NhblBv cyBoYXMgY29uc3VtZWQgYWxsIHJlbWFpbmluZyBpdGVtcyBmcm9tCisgKiB0aGUgc2NhbidzIGN1 cnJlbnQgc2NhbkJhdGNoKS4KKyAqLworc3RhdGljIGlubGluZSBCYXRjaFBvc0FkdmFuY2VSZXN1 bHQKK3RhYmxlYW1fdXRpbF9wcmVmZXRjaHBvc19hZHZhbmNlKEluZGV4U2NhbkRlc2Mgc2Nhbiwg U2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJCQkJCSBJbmRleFNjYW5CYXRjaCAqcHJlZmV0 Y2hCYXRjaCwKKwkJCQkJCQkJIEJhdGNoUmluZ0l0ZW1Qb3MgKnByZWZldGNoUG9zKQoreworCWlm ICghaW5kZXhfc2Nhbl9wb3NfYWR2YW5jZShkaXJlY3Rpb24sICpwcmVmZXRjaEJhdGNoLCBwcmVm ZXRjaFBvcykpCisJeworCQkvKgorCQkgKiBSYW4gb3V0IG9mIGl0ZW1zIGZyb20gcHJlZmV0Y2hC YXRjaC4gIFRyeSB0byBhZHZhbmNlIHRvIHRoZSBzY2FuJ3MKKwkJICogbmV4dCBiYXRjaC4KKwkJ ICovCisJCWlmICh1bmxpa2VseShpbmRleF9zY2FuX2JhdGNoX2Z1bGwoc2NhbikpKQorCQl7CisJ CQkvKgorCQkJICogQ2FuJ3QgYWR2YW5jZSBwcmVmZXRjaEJhdGNoIGJlY2F1c2UgYWxsIGF2YWls YWJsZSByaW5nIGJ1ZmZlcgorCQkJICogYmF0Y2ggc2xvdHMgYXJlIGN1cnJlbnRseSBpbiB1c2Uu ICBVbmRvIHRoZSBtb3N0IHJlY2VudCBhZHZhbmNlCisJCQkgKiBiZWZvcmUgcmV0dXJuaW5nLCBs ZWF2aW5nIHByZWZldGNoUG9zIGluIGEgc3RhdGUgdGhhdCdzCisJCQkgKiBjb25zaXN0ZW50IHdp dGggdGhlIHdvcmsgYWN0dWFsbHkgcGVyZm9ybWVkICh2YXJpb3VzIHBvc2l0aW9uYWwKKwkJCSAq IHN0YXRlIGFzc2VydGlvbnMgZXhwZWN0IGl0KS4KKwkJCSAqLworCQkJaWYgKFNjYW5EaXJlY3Rp b25Jc0ZvcndhcmQoZGlyZWN0aW9uKSkKKwkJCXsKKwkJCQlBc3NlcnQocHJlZmV0Y2hQb3MtPml0 ZW0gPT0gKCpwcmVmZXRjaEJhdGNoKS0+bGFzdEl0ZW0gKyAxKTsKKwkJCQlwcmVmZXRjaFBvcy0+ aXRlbS0tOworCQkJfQorCQkJZWxzZQkJCQkvKiBTY2FuRGlyZWN0aW9uSXNCYWNrd2FyZCAqLwor CQkJeworCQkJCUFzc2VydChwcmVmZXRjaFBvcy0+aXRlbSA9PSAoKnByZWZldGNoQmF0Y2gpLT5m aXJzdEl0ZW0gLSAxKTsKKwkJCQlwcmVmZXRjaFBvcy0+aXRlbSsrOworCQkJfQorCisJCQlyZXR1 cm4gQkFUQ0hfUE9TX1JJTkdfRlVMTDsKKwkJfQorCisJCS8qIFdlIGhhdmUgYSBmcmVlIHJpbmcg YnVmZmVyIHNsb3QgdG8gZml0IGFub3RoZXIgYmF0Y2ggKi8KKwkJKnByZWZldGNoQmF0Y2ggPSB0 YWJsZWFtX3V0aWxfZmV0Y2hfbmV4dF9iYXRjaChzY2FuLCBkaXJlY3Rpb24sCisJCQkJCQkJCQkJ CQkJICAgKnByZWZldGNoQmF0Y2gsCisJCQkJCQkJCQkJCQkJICAgcHJlZmV0Y2hQb3MpOworCQlp ZiAoKnByZWZldGNoQmF0Y2ggPT0gTlVMTCkKKwkJeworCQkJLyoKKwkJCSAqIERlbGliZXJhdGVs eSBsZWF2ZSBwcmVmZXRjaFBvcyBpbiAianVzdC1iZWZvcmUtc3RhcnQiIG9yCisJCQkgKiAianVz dC1hZnRlci1lbmQiIHBvc2l0aW9uCisJCQkgKi8KKwkJCXJldHVybiBCQVRDSF9QT1NfRE9ORTsK KwkJfQorCisJCS8qCisJCSAqIEhhdmUgYSBuZXcgcHJlZmV0Y2hCYXRjaC4KKwkJICoKKwkJICog dGFibGVhbV91dGlsX2ZldGNoX25leHRfYmF0Y2ggYWxyZWFkeSBhcHBlbmRlZCB0aGUgbmV3IGJh dGNoIHRvIHRoZQorCQkgKiByaW5nIGJ1ZmZlciBmb3IgdXMsIGJ1dCB3ZSBtdXN0IGFkdmFuY2Ug cHJlZmV0Y2hQb3Mgb3Vyc2VsdmVzLgorCQkgKiBQb3NpdGlvbiBwcmVmZXRjaFBvcyB0byB0aGUg c3RhcnQgb2YgdGhlIG5ldyBiYXRjaC4KKwkJICovCisJCWluZGV4X3NjYW5fcG9zX3N0YXJ0YmF0 Y2goZGlyZWN0aW9uLCAqcHJlZmV0Y2hCYXRjaCwgcHJlZmV0Y2hQb3MpOworCisJCXJldHVybiBC QVRDSF9QT1NfQkFUQ0hfQURWQU5DRUQ7CisJfQorCisJcmV0dXJuIEJBVENIX1BPU19BRFZBTkNF RDsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmggYi9z cmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oCmluZGV4IDgxODFmODg2Mi4uNTEzMTg3NDQ4IDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oCisrKyBiL3NyYy9pbmNsdWRl L2FjY2Vzcy9yZWxzY2FuLmgKQEAgLTE4Niw2ICsxODYsMTAgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5k ZXhTY2FuQmF0Y2hEYXRhCiAJICogVGhpcyBhbGxvd3MgdGFibGUgQU1zIHRvIGF2b2lkIHJlZHVu ZGFudCBhbWdldGJhdGNoIGNhbGxzIHdpdGggdGhlIHNhbWUKIAkgKiBwcmlvcmJhdGNoIC0tIHRo ZSBpbmRleCBBTSBtaWdodCBuZWVkIHRvIHJlYWQgYWRkaXRpb25hbCBpbmRleCBwYWdlcyB0bwog CSAqIGRldGVybWluZSB0aGVyZSBhcmUgbm8gbW9yZSBtYXRjaGluZyBpdGVtcyBiZXlvbmQgY2Fs bGVyJ3MgcHJpb3JiYXRjaC4KKwkgKiBJbiBwYXJ0aWN1bGFyLCBkdXJpbmcgcHJlZmV0Y2hpbmcg dGhlIHJlYWQgc3RyZWFtIGNhbGxiYWNrIGRpc2NvdmVycworCSAqIHRoZSBlbmQtb2Ytc2NhbiB2 aWEgcHJlZmV0Y2hCYXRjaC4gIHRhYmxlYW1fdXRpbF9mZXRjaF9uZXh0X2JhdGNoKCkKKwkgKiBj aGVja3MgdGhlc2UgZmxhZ3Mgc28gdGhhdCB0aGUgc2NhbiBzaWRlIGRvZXNuJ3QgcmVwZWF0IHRo ZSBzYW1lCisJICogYW1nZXRiYXRjaCBjYWxsIHdoZW4gaXQgbGF0ZXIgcmVhY2hlcyB0aGF0IGJh dGNoIGFzIHNjYW5CYXRjaC4KIAkgKi8KIAlib29sCQlrbm93bkVuZEJhY2t3YXJkOwogCWJvb2wJ CWtub3duRW5kRm9yd2FyZDsKQEAgLTIzNiwxMSArMjQwLDE0IEBAIHR5cGVkZWYgc3RydWN0IElu ZGV4U2NhbkJhdGNoRGF0YSAqSW5kZXhTY2FuQmF0Y2g7CiAgKiBjdXJyZW50IHJlYWQgcG9zaXRp b24gYnkgX211bHRpcGxlXyBiYXRjaGVzL2luZGV4IHBhZ2VzLiAgVGhlIGZ1cnRoZXIgb3V0CiAg KiB0aGUgdGFibGUgQU0gcmVhZHMgYWhlYWQgbGlrZSB0aGlzLCB0aGUgZnVydGhlciBpdCBjYW4g c2VlIGludG8gdGhlIGZ1dHVyZS4KICAqIFRoYXQgd2F5IHRoZSB0YWJsZSBBTSBpcyBhYmxlIHRv IHJlb3JkZXIgd29yayBhcyBhZ2dyZXNzaXZlbHkgYXMgZGVzaXJlZC4KKyAqIEluZGV4IHNjYW5z IHNvbWV0aW1lcyBuZWVkIHRvIHJlYWRhaGVhZCBieSBzZXZlcmFsIGRvemVuIGJhdGNoZXMgaW4g b3JkZXIKKyAqIHRvIG1haW50YWluIGFuIG9wdGltYWwgSS9PIHByZWZldGNoIGRpc3RhbmNlIChm b3IgcmVhZGluZyB0YWJsZSBibG9ja3MpLgogICovCiB0eXBlZGVmIHN0cnVjdCBCYXRjaFJpbmdC dWZmZXIKIHsKIAkvKiBjdXJyZW50IHBvc2l0aW9ucyBpbiBJbmRleFNjYW5EZXNjRGF0YS5iYXRj aGJ1ZltdIGZvciBzY2FuICovCiAJQmF0Y2hSaW5nSXRlbVBvcyBzY2FuUG9zOwkvKiBzY2FuJ3Mg cmVhZCBwb3NpdGlvbiAqLworCUJhdGNoUmluZ0l0ZW1Qb3MgcHJlZmV0Y2hQb3M7CS8qIHByZWZl dGNoaW5nIHBvc2l0aW9uICovCiAJQmF0Y2hSaW5nSXRlbVBvcyBtYXJrUG9zOwkvKiBtYXJrL3Jl c3RvcmUgcG9zaXRpb24gKi8KIAogCS8qIG1hcmtQb3MncyBiYXRjaCAobm90IGluIHJpbmcgYnVm ZmVyIHdoZW4gbWFya0JhdGNoICE9IHNjYW5CYXRjaCkgKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL29wdGltaXplci9jb3N0LmggYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvY29zdC5oCmluZGV4 IGYyZmQ1ZDMxNS4uNDE5MzAwYTZiIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIv Y29zdC5oCisrKyBiL3NyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmgKQEAgLTUyLDYgKzUyLDcg QEAgZXh0ZXJuIFBHRExMSU1QT1JUIGludCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVy OwogZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgZW5hYmxlX3NlcXNjYW47CiBleHRlcm4gUEdETExJ TVBPUlQgYm9vbCBlbmFibGVfaW5kZXhzY2FuOwogZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgZW5h YmxlX2luZGV4b25seXNjYW47CitleHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVfaW5kZXhz Y2FuX3ByZWZldGNoOwogZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgZW5hYmxlX2JpdG1hcHNjYW47 CiBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVfdGlkc2NhbjsKIGV4dGVybiBQR0RMTElN UE9SVCBib29sIGVuYWJsZV9zb3J0OwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hl YXAvaGVhcGFtX2luZGV4c2Nhbi5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2lu ZGV4c2Nhbi5jCmluZGV4IDIzNGEwZjM0Zi4uZjZjN2U3NDI4IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faW5kZXhzY2FuLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL2hlYXAvaGVhcGFtX2luZGV4c2Nhbi5jCkBAIC0xOSw2ICsxOSw3IEBACiAjaW5jbHVkZSAi YWNjZXNzL2luZGV4YmF0Y2guaCIKICNpbmNsdWRlICJhY2Nlc3MvcmVsc2Nhbi5oIgogI2luY2x1 ZGUgImFjY2Vzcy92aXNpYmlsaXR5bWFwLmgiCisjaW5jbHVkZSAib3B0aW1pemVyL2Nvc3QuaCIK ICNpbmNsdWRlICJzdG9yYWdlL3ByZWRpY2F0ZS5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5z LmgiCiAjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKQEAgLTkxLDYgKzkyLDE1IEBAIHN0YXRp YyB2b2lkIGhlYXBhbV9pbmRleF9iYXRjaF9wb3NfdmlzaWJpbGl0eShJbmRleFNjYW5EZXNjIHNj YW4sCiAJCQkJCQkJCQkJCSAgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gsCiAJCQkJCQkJCQkJCSAgSGVh cEJhdGNoRGF0YSAqaGJhdGNoLAogCQkJCQkJCQkJCQkgIEJhdGNoUmluZ0l0ZW1Qb3MgKnBvcyk7 CitzdGF0aWMgcGdfbm9pbmxpbmUgdm9pZCBoZWFwYW1faW5kZXhfZGlyY2hhbmdlX3Jlc2V0KElu ZGV4U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCQkJCQkJCQkgSW5kZXhTY2FuSGVhcERhdGEgKmhzY2Fu LAorCQkJCQkJCQkJCQkJCSBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbik7CitzdGF0aWMgcGdfYXR0 cmlidXRlX2Fsd2F5c19pbmxpbmUgdm9pZCBoZWFwYW1faW5kZXhfY29uc2lkZXJfcHJlZmV0Y2hp bmcoSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJCQkJCQkJCQkJIEluZGV4U2NhbkhlYXBE YXRhICpoc2NhbiwKKwkJCQkJCQkJCQkJCQkJCQkJCSBib29sIGhhZEV4aXN0aW5nU2NhbkJhdGNo KTsKK3N0YXRpYyBCbG9ja051bWJlciBoZWFwYW1faW5kZXhfcHJlZmV0Y2hfbmV4dF9ibG9jayhS ZWFkU3RyZWFtICpzdHJlYW0sCisJCQkJCQkJCQkJCQkJdm9pZCAqY2FsbGJhY2tfcHJpdmF0ZV9k YXRhLAorCQkJCQkJCQkJCQkJCXZvaWQgKnBlcl9idWZmZXJfZGF0YSk7CiAKIC8qCiAgKiBTaW1w bGUsIHNpbmdsZS1zaG90IFRJRCBsb29rdXAgZm9yIGNvbnN0cmFpbnQgZW5mb3JjZW1lbnQgY29k ZSAodW5pcXVlCkBAIC0xNTgsNiArMTY4LDEwIEBAIGhlYXBhbV9pbmRleF9zY2FuX2JlZ2luKElu ZGV4U2NhbkRlc2Mgc2NhbiwgdWludDMyIGZsYWdzKQogCS8qIHhzX2xhc3RpbmJsb2NrIG9wdGlt aXphdGlvbiBzdGF0ZSAqLwogCUFzc2VydCghaHNjYW4tPnhzX2xhc3RpbmJsb2NrKTsKIAorCS8q IFJlYWQgc3RyZWFtIHN0YXRlIChvdGhlciBmaWVsZHMgaW5pdGlhbGl6ZWQgYnkgY2FsbGJhY2sp ICovCisJQXNzZXJ0KGhzY2FuLT54c19yZWFkX3N0cmVhbV9kaXIgPT0gTm9Nb3ZlbWVudFNjYW5E aXJlY3Rpb24pOworCUFzc2VydChoc2Nhbi0+eHNfcmVhZF9zdHJlYW0gPT0gTlVMTCk7CisKIAkv KiBSZXNvbHZlIHdoaWNoIHhzX2dldG5leHRfc2xvdCBpbXBsZW1lbnRhdGlvbiB0byB1c2UgZm9y IHRoaXMgc2NhbiAqLwogCWlmIChzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1nZXRi YXRjaCAhPSBOVUxMKQogCXsKQEAgLTIzNSw2ICsyNDksMTUgQEAgaGVhcGFtX2luZGV4X3NjYW5f cmVzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbikKIAkvKiBSZXNjYW5zIHNob3VsZCBhdm9pZCBhbiBl eGNlc3NpdmUgbnVtYmVyIG9mIFZNIGxvb2t1cHMgKi8KIAloc2Nhbi0+eHNfdm1faXRlbXMgPSAx OwogCisJLyogRGVmZW5zaXZlbHkgZG8gYW4gdW5jb25kaXRpb25hbCByZWFkIHN0cmVhbSBkaXJl Y3Rpb24gcmVzZXQgKi8KKwloc2Nhbi0+eHNfcmVhZF9zdHJlYW1fZGlyID0gTm9Nb3ZlbWVudFNj YW5EaXJlY3Rpb247CisKKwlpZiAoaHNjYW4tPnhzX3JlYWRfc3RyZWFtKQorCXsKKwkJaHNjYW4t PnhzX3BhdXNlZCA9IGZhbHNlOworCQlyZWFkX3N0cmVhbV9yZXNldChoc2Nhbi0+eHNfcmVhZF9z dHJlYW0pOworCX0KKwogCS8qIFJlc2V0IGJhdGNoIHJpbmcgYnVmZmVyIHN0YXRlICovCiAJaWYg KHNjYW4tPnVzZWJhdGNocmluZykKIAkJdGFibGVhbV91dGlsX2JhdGNoc2Nhbl9yZXNldChzY2Fu LCBmYWxzZSk7CkBAIC0yNTksNiArMjgyLDkgQEAgaGVhcGFtX2luZGV4X3NjYW5fZW5kKEluZGV4 U2NhbkRlc2Mgc2NhbikKIAlpZiAoQnVmZmVySXNWYWxpZChoc2Nhbi0+eHNfdm1idWZmZXIpKQog CQlSZWxlYXNlQnVmZmVyKGhzY2FuLT54c192bWJ1ZmZlcik7CiAKKwlpZiAoaHNjYW4tPnhzX3Jl YWRfc3RyZWFtKQorCQlyZWFkX3N0cmVhbV9lbmQoaHNjYW4tPnhzX3JlYWRfc3RyZWFtKTsKKwog CS8qIEZyZWUgdGhlIGluZGV4LW9ubHkgc2NhbiBuYW1lLWNvbHVtbiBjb250ZXh0LCBpZiBhbnkg Ki8KIAlpZiAoaHNjYW4tPnhzX2l0dXBfY3h0KQogCQlNZW1vcnlDb250ZXh0RGVsZXRlKGhzY2Fu LT54c19pdHVwX2N4dCk7CkBAIC0yODgsOSArMzE0LDE3IEBAIGhlYXBhbV9pbmRleF9zY2FuX21h cmtwb3MoSW5kZXhTY2FuRGVzYyBzY2FuKQogdm9pZAogaGVhcGFtX2luZGV4X3NjYW5fcmVzdHJw b3MoSW5kZXhTY2FuRGVzYyBzY2FuKQogeworCUluZGV4U2NhbkhlYXBEYXRhICpoc2NhbiA9IChJ bmRleFNjYW5IZWFwRGF0YSAqKSBzY2FuLT54c190YWJsZV9vcGFxdWU7CisKIAlBc3NlcnQoc2Nh bi0+dXNlYmF0Y2hyaW5nKTsKIAlBc3NlcnQoc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0t PmFtY2FubWFya3Bvcyk7CiAKKwlpZiAoaHNjYW4tPnhzX3JlYWRfc3RyZWFtKQorCXsKKwkJaHNj YW4tPnhzX3BhdXNlZCA9IGZhbHNlOworCQlyZWFkX3N0cmVhbV9yZXNldChoc2Nhbi0+eHNfcmVh ZF9zdHJlYW0pOworCX0KKwogCXRhYmxlYW1fdXRpbF9iYXRjaHNjYW5fcmVzdG9yZV9wb3Moc2Nh bik7CiB9CiAKQEAgLTYyNSw2ICs2NTksMTUgQEAgaGVhcGFtX2luZGV4X2dldG5leHRfc2xvdChJ bmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAogCXVpbnQ4CQluX3Zp c2l0ZWRfcGFnZXMgPSAwOwogCUl0ZW1Qb2ludGVyIHRpZCA9IE5VTEw7CiAKKwkvKgorCSAqIENo YW5naW5nIHRoZSBzY2FuIGRpcmVjdGlvbiBtaWQtc2NhbiByZXF1aXJlcyBhbiBNVkNDIHNuYXBz aG90OiB3aXRoCisJICogYW55IG90aGVyIHNuYXBzaG90IHR5cGUsIG1vcmUgdGhhbiBvbmUgbWVt YmVyIG9mIGEgSE9UIGNoYWluIGNhbiBiZQorCSAqIHZpc2libGUsIGFuZCByZXN1bWluZyBhIHBh cnRpYWxseS1yZXR1cm5lZCBjaGFpbiBvbmx5IHdvcmtzIGluIHRoZQorCSAqIGZvcndhcmQgZGly ZWN0aW9uLiAgQWxsIG5vbi1NVkNDIGNhbGxlcnMgc2NhbiBpbiBvbmUgZml4ZWQgZGlyZWN0aW9u LgorCSAqLworCUFzc2VydChzY2FuLT5NVkNDU2NhbiB8fCAhYW1nZXRiYXRjaCB8fAorCQkgICBo c2Nhbi0+eHNfcmVhZF9zdHJlYW1fZGlyID09IE5vTW92ZW1lbnRTY2FuRGlyZWN0aW9uIHx8CisJ CSAgIGhzY2FuLT54c19yZWFkX3N0cmVhbV9kaXIgPT0gZGlyZWN0aW9uKTsKIAlBc3NlcnQoVHJh bnNhY3Rpb25JZElzVmFsaWQoUmVjZW50WG1pbikpOwogCUFzc2VydChpbmRleF9vbmx5IHx8IHNj YW4tPnhzX3Zpc2l0ZWRfcGFnZXNfbGltaXQgPT0gMCk7CiAKQEAgLTgwNCw3ICs4NDcsMTQgQEAg aGVhcGFtX2luZGV4X2hlYXBfZmV0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5IZWFw RGF0YSAqaHNjYW4sCiAJCWlmIChCdWZmZXJJc1ZhbGlkKGhzY2FuLT54c19jYnVmKSkKIAkJCVJl bGVhc2VCdWZmZXIoaHNjYW4tPnhzX2NidWYpOwogCi0JCWhzY2FuLT54c19jYnVmID0gUmVhZEJ1 ZmZlcihyZWwsIGhzY2FuLT54c19ibGspOworCQkvKgorCQkgKiBXaGVuIHVzaW5nIGEgcmVhZCBz dHJlYW0sIHRoZSBzdHJlYW0gd2lsbCBhbHJlYWR5IGtub3cgd2hpY2ggYmxvY2sKKwkJICogbnVt YmVyIGNvbWVzIG5leHQgKHRob3VnaCBhbiBhc3NlcnRpb24gd2lsbCB2ZXJpZnkgYSBtYXRjaCBi ZWxvdykKKwkJICovCisJCWlmIChoc2Nhbi0+eHNfcmVhZF9zdHJlYW0pCisJCQloc2Nhbi0+eHNf Y2J1ZiA9IHJlYWRfc3RyZWFtX25leHRfYnVmZmVyKGhzY2FuLT54c19yZWFkX3N0cmVhbSwgTlVM TCk7CisJCWVsc2UKKwkJCWhzY2FuLT54c19jYnVmID0gUmVhZEJ1ZmZlcihyZWwsIGhzY2FuLT54 c19ibGspOwogCiAJCS8qCiAJCSAqIFBydW5lIHBhZ2Ugd2hlbiBpdCBpcyBwaW5uZWQgZm9yIHRo ZSBmaXJzdCB0aW1lCkBAIC05MjYsOSArOTc2LDE2IEBAIGhlYXBhbV9pbmRleF9nZXRuZXh0X3Nj YW5iYXRjaF9wb3MoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5IZWFwRGF0YSAqaHNjYW4s CiB7CiAJQmF0Y2hSaW5nSXRlbVBvcyAqc2NhblBvcyA9ICZzY2FuLT5iYXRjaHJpbmdidWYuc2Nh blBvczsKIAlJbmRleFNjYW5CYXRjaCBzY2FuQmF0Y2g7CisJYm9vbAkJaGFkRXhpc3RpbmdTY2Fu QmF0Y2g7CiAKIAlBc3NlcnQoYWxsX3Zpc2libGUgPT0gTlVMTCB8fCBzY2FuLT54c193YW50X2l0 dXApOwogCisJLyogSGFuZGxlIHJlc2V0dGluZyB0aGUgcmVhZCBzdHJlYW0gd2hlbiBzY2FuIGRp cmVjdGlvbiBjaGFuZ2VzICovCisJaWYgKGhzY2FuLT54c19yZWFkX3N0cmVhbV9kaXIgPT0gTm9N b3ZlbWVudFNjYW5EaXJlY3Rpb24pCisJCWhzY2FuLT54c19yZWFkX3N0cmVhbV9kaXIgPSBkaXJl Y3Rpb247CS8qIGZpcnN0IGNhbGwgKi8KKwllbHNlIGlmICh1bmxpa2VseShoc2Nhbi0+eHNfcmVh ZF9zdHJlYW1fZGlyICE9IGRpcmVjdGlvbikpCisJCWhlYXBhbV9pbmRleF9kaXJjaGFuZ2VfcmVz ZXQoc2NhbiwgaHNjYW4sIGRpcmVjdGlvbik7CisKIAkvKgogCSAqIEF0dGVtcHQgdG8gaW5jcmVt ZW50IHRoZSBwb3NpdGlvbiBvZiBhbnkgZXhpc3RpbmcgbG9hZGVkIHNjYW5CYXRjaAogCSAqIChh bHdheXMgZmFpbHMgb24gZmlyc3QgY2FsbCBoZXJlIGZvciB0aGUgc2NhbikKQEAgLTk0NCw2ICsx MDAxLDEyIEBAIGhlYXBhbV9pbmRleF9nZXRuZXh0X3NjYW5iYXRjaF9wb3MoSW5kZXhTY2FuRGVz YyBzY2FuLCBJbmRleFNjYW5IZWFwRGF0YSAqaHNjYW4sCiAJCQkJCQkJCQkJCSAgIGFsbF92aXNp YmxlKTsKIAl9CiAKKwkvKgorCSAqIERldGVybWluZSBpZiB0YWJsZWFtX3V0aWxfc2NhbnBvc19h ZHZhbmNlIGp1c3QgZmFpbGVkIGJlY2F1c2UgdGhlcmUgd2FzCisJICogbm8gZXhpc3RpbmcgbG9h ZGVkIHNjYW5CYXRjaCBmb3IgaXQgdG8gY29uc2lkZXIKKwkgKi8KKwloYWRFeGlzdGluZ1NjYW5C YXRjaCA9IChzY2FuQmF0Y2ggIT0gTlVMTCk7CisKIAkvKiBUcnkgdG8gYWR2YW5jZSBzY2FuQmF0 Y2ggdG8gdGhlIG5leHQgYmF0Y2ggKG9yIGdldCB0aGUgZmlyc3QgYmF0Y2gpICovCiAJc2NhbkJh dGNoID0gdGFibGVhbV91dGlsX2ZldGNoX25leHRfYmF0Y2goc2NhbiwgZGlyZWN0aW9uLAogCQkJ CQkJCQkJCQkgIHNjYW5CYXRjaCwgc2NhblBvcyk7CkBAIC05NTQsNiArMTAxNywxNSBAQCBoZWFw YW1faW5kZXhfZ2V0bmV4dF9zY2FuYmF0Y2hfcG9zKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhT Y2FuSGVhcERhdGEgKmhzY2FuLAogCQlyZXR1cm4gTlVMTDsKIAl9CiAKKwkvKgorCSAqIFdlIGhh dmUgYSBuZXcgc2NhbkJhdGNoLCBidXQgc2NhblBvcyBoYXNuJ3QgYmVlbiBhZHZhbmNlZCB0byBp dCBqdXN0CisJICogeWV0LgorCSAqCisJICogSWYgaXQgd2Fzbid0IHRoZSBzY2FuJ3MgZmlyc3Qg cmV0dXJuZWQgYmF0Y2gsIGNvbnNpZGVyIGlmIHdlIHNob3VsZAorCSAqIGJlZ2luIHByZWZldGNo aW5nIG5vdyAodW5sZXNzIHByZWZldGNoaW5nIGlzIGFscmVhZHkgdW5kZXJ3YXkpLgorCSAqLwor CWhlYXBhbV9pbmRleF9jb25zaWRlcl9wcmVmZXRjaGluZyhzY2FuLCBoc2NhbiwgaGFkRXhpc3Rp bmdTY2FuQmF0Y2gpOworCiAJLyoKIAkgKiBVcGRhdGUgYmF0Y2hyaW5nYnVmIGFuZCBzY2FuUG9z IHN1Y2ggdGhhdCB0aGUgc2NhbiBjYW4gY29udGludWUgd2l0aAogCSAqIG91ciBuZXcgc2NhbkJh dGNoLgpAQCAtOTYyLDcgKzEwMzQsMjcgQEAgaGVhcGFtX2luZGV4X2dldG5leHRfc2NhbmJhdGNo X3BvcyhJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkhlYXBEYXRhICpoc2NhbiwKIAkgKiBh bHNvIHJlbW92ZSB0aGUgb2xkIGhlYWQgYmF0Y2gvc2NhbkJhdGNoIGZyb20gdGhlIGJhdGNoIHJp bmcgYnVmZmVyLAogCSAqIGFuZCByZWxlYXNlIHRoZSB1bmRlcmx5aW5nIGJhdGNoIHN0b3JhZ2Uu CiAJICovCi0JdGFibGVhbV91dGlsX3NjYW5wb3NfbmV4dGJhdGNoKHNjYW4sIGRpcmVjdGlvbiwg c2NhbkJhdGNoKTsKKwlpZiAodGFibGVhbV91dGlsX3NjYW5wb3NfbmV4dGJhdGNoKHNjYW4sIGRp cmVjdGlvbiwgc2NhbkJhdGNoKSkKKwl7CisJCS8qIEEgcHJldmlvdXNseSBvY2N1cGllZCByaW5n IGJ1ZmZlciBzbG90IHdhcyBmcmVlZCAqLworCQlpZiAodW5saWtlbHkoaHNjYW4tPnhzX3BhdXNl ZCkpCisJCXsKKwkJCS8qCisJCQkgKiBoZWFwYW1faW5kZXhfcHJlZmV0Y2hfbmV4dF9ibG9jayBw YXVzZWQgdGhlIHNjYW4ncyByZWFkIHN0cmVhbQorCQkJICogZHVlIHRvIG91ciBydW5uaW5nIG91 dCBvZiBmcmVlIGJhdGNoIHNsb3RzLiAgTm93IHRoYXQgd2UndmUKKwkJCSAqIGZyZWVkIHVwIG9u ZSBzdWNoIHNsb3QsIHdlIGNhbiByZXN1bWUgdGhlIHJlYWQgc3RyZWFtIChzaW5jZQorCQkJICog dGhlcmUncyBub3cgc3BhY2UgZm9yIGhlYXBhbV9pbmRleF9wcmVmZXRjaF9uZXh0X2Jsb2NrIHRv IHN0b3JlCisJCQkgKiBvbmUgbW9yZSBiYXRjaCkuCisJCQkgKgorCQkJICogTm90ZTogSXQncyBq dXN0IGFib3V0IHBvc3NpYmxlIHRoYXQgcHJlZmV0Y2hQb3Mgd2FzIGp1c3QgKG9yIGlzCisJCQkg KiBqdXN0IGFib3V0IHRvIGJlKSBpbnZhbGlkYXRlZCB3aXRoIGxvdyBJTkRFWF9TQ0FOX01BWF9C QVRDSEVTLgorCQkJICovCisJCQlyZWFkX3N0cmVhbV9yZXN1bWUoaHNjYW4tPnhzX3JlYWRfc3Ry ZWFtKTsKKwkJCWhzY2FuLT54c19wYXVzZWQgPSBmYWxzZTsKKwkJfQorCX0KKworCUFzc2VydCgh aHNjYW4tPnhzX3BhdXNlZCk7CiAKIAkvKgogCSAqIFNldCBzY2FuUG9zIHRvIGZpcnN0IGl0ZW0g Zm9yIG5ld2x5IGxvYWRlZCBzY2FuQmF0Y2g7IHJldHVybiB0aGUgbmV3CkBAIC0xMDkwLDYgKzEx ODIsMTMgQEAgaGVhcGFtX2luZGV4X3JldHVybl9zY2FucG9zX3RpZChJbmRleFNjYW5EZXNjIHNj YW4sIEluZGV4U2NhbkhlYXBEYXRhICpoc2NhbiwKICAqIChpbXBvcnRhbnQgZm9yIGlubmVyIGlu ZGV4IHNjYW5zIG9mIGFudGktam9pbnMgYW5kIHNlbWktam9pbnMpLCBhbmQgdGhlCiAgKiBuZWVk IHRvIHVuZ3VhcmQgYmF0Y2hlcyBwcm9tcHRseS4KICAqCisgKiBJbiBubyBldmVudCB3aWxsIHRo ZSBzY2FuIGJlIGFsbG93ZWQgdG8gZ3VhcmQgbW9yZSB0aGFuIG9uZSBiYXRjaCBhdCBhCisgKiB0 aW1lLiAgVGhlIHByaW1hcnkgcmVhc29uIGZvciB0aGlzIHJlc3RyaWN0aW9uIGlzIHRvIGF2b2lk IHVuaW50ZW5kZWQKKyAqIGludGVyYWN0aW9ucyB3aXRoIHRoZSByZWFkIHN0cmVhbSwgd2hpY2gg aGFzIGl0cyBvd24gc3RyYXRlZ3kgZm9yIGtlZXBpbmcKKyAqIHRoZSBudW1iZXIgb2YgcGlucyBo ZWxkIGJ5IHRoZSBiYWNrZW5kIHVuZGVyIGNvbnRyb2wuICAoVW5ndWFyZGluZyB2aWEKKyAqIHRo ZSBhbXVuZ3VhcmRiYXRjaCBjYWxsYmFjayBvZnRlbiBtZWFucyByZWxlYXNpbmcgYSBidWZmZXIg cGluIG9uIGFuCisgKiBpbmRleCBwYWdlLCB3aGljaCBjb3VudHMgYWdhaW5zdCB0aGUgc2FtZSBz aGFyZWQgcGluIGxpbWl0LikKKyAqCiAgKiBPbmNlIHdlJ3ZlIHJlc29sdmVkIHZpc2liaWxpdHkg Zm9yIGFsbCBpdGVtcyBpbiBhIGJhdGNoLCB3ZSBjYW4gc2FmZWx5CiAgKiB1bmd1YXJkIGl0IGJ5 IGNhbGxpbmcgYW11bmd1YXJkYmF0Y2guICBUaGlzIGlzIHNhZmUgd2l0aCByZXNwZWN0IHRvCiAg KiBjb25jdXJyZW50IFZBQ1VVTSBiZWNhdXNlIHRoZSBiYXRjaCdzIGd1YXJkICh0eXBpY2FsbHkg YSBidWZmZXIgcGluIG9uIHRoZQpAQCAtMTIzOCwzICsxMzM3LDMyMCBAQCBoZWFwYW1faW5kZXhf YmF0Y2hfcG9zX3Zpc2liaWxpdHkoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRp cmVjdGlvbiwKIAllbHNlCiAJCWhzY2FuLT54c192bV9pdGVtcyA9IHNjYW4tPm1heGl0ZW1zYmF0 Y2g7CiB9CisKKy8qCisgKiBIYW5kbGUgYSBjaGFuZ2UgaW4gaW5kZXggc2NhbiBkaXJlY3Rpb24g KGF0IHRoZSB0dXBsZSBncmFudWxhcml0eSkuCisgKgorICogUmVzZXRzIHRoZSByZWFkIHN0cmVh bSwgc2luY2Ugd2UgY2FuJ3QgcmVseSBvbiBzY2FuUG9zIGNvbnRpbnVpbmcgdG8gYWdyZWUKKyAq IHdpdGggdGhlIGJsb2NrcyB0aGF0IHJlYWQgc3RyZWFtIGFscmVhZHkgY29uc3VtZWQgdXNpbmcg cHJlZmV0Y2hQb3MuCisgKgorICogTm90ZTogaWZmIHRoZSBzY2FuIF9jb250aW51ZXNfIGluIHRo aXMgbmV3IGRpcmVjdGlvbiwgYW5kIGFjdHVhbGx5IHN0ZXBzCisgKiBvZmYgc2NhbkJhdGNoIHRv IGFuIGVhcmxpZXIgaW5kZXggcGFnZSwgdGFibGVhbV91dGlsX2ZldGNoX25leHRfYmF0Y2ggd2ls bAorICogZGVhbCB3aXRoIGl0LiAgQnV0IHRoYXQgbWlnaHQgbmV2ZXIgaGFwcGVuOyB0aGUgc2Nh biBtaWdodCB5ZXQgY2hhbmdlCisgKiBkaXJlY3Rpb24gYWdhaW4gKG9yIGp1c3QgZW5kIGJlZm9y ZSByZXR1cm5pbmcgbW9yZSBpdGVtcykuCisgKi8KK3N0YXRpYyBwZ19ub2lubGluZSB2b2lkCito ZWFwYW1faW5kZXhfZGlyY2hhbmdlX3Jlc2V0KEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2Fu SGVhcERhdGEgKmhzY2FuLAorCQkJCQkJCSBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwkv KiBSZXNldCByZWFkIHN0cmVhbSBzdGF0ZSAqLworCXNjYW4tPmJhdGNocmluZ2J1Zi5wcmVmZXRj aFBvcy52YWxpZCA9IGZhbHNlOworCWhzY2FuLT54c19wYXVzZWQgPSBmYWxzZTsKKwloc2Nhbi0+ eHNfcmVhZF9zdHJlYW1fZGlyID0gZGlyZWN0aW9uOworCisJLyogUmVzZXQgcmVhZCBzdHJlYW0g aXRzZWxmICovCisJaWYgKGhzY2FuLT54c19yZWFkX3N0cmVhbSkKKwkJcmVhZF9zdHJlYW1fcmVz ZXQoaHNjYW4tPnhzX3JlYWRfc3RyZWFtKTsKK30KKworLyoKKyAqIERlY2lkZSB3aGV0aGVyIHRv IHN0YXJ0IGEgcmVhZCBzdHJlYW0gZm9yIGhlYXAgYmxvY2sgcHJlZmV0Y2hpbmcgZHVyaW5nIGFu CisgKiBpbmRleCBzY2FuCisgKi8KK3N0YXRpYyBwZ19hdHRyaWJ1dGVfYWx3YXlzX2lubGluZSB2 b2lkCitoZWFwYW1faW5kZXhfY29uc2lkZXJfcHJlZmV0Y2hpbmcoSW5kZXhTY2FuRGVzYyBzY2Fu LAorCQkJCQkJCQkgIEluZGV4U2NhbkhlYXBEYXRhICpoc2NhbiwKKwkJCQkJCQkJICBib29sIGhh ZEV4aXN0aW5nU2NhbkJhdGNoKQoreworCS8qCisJICogV2UgZGVsYXkgaW5pdGlhbGl6aW5nIHRo ZSBzdHJlYW0gdW50aWwgcmVhZGluZyBmcm9tIHRoZSBzY2FuJ3Mgc2Vjb25kCisJICogYmF0Y2gu ICBUaGlzIGhldXJpc3RpYyBhdm9pZHMgd2FzdGluZyBjeWNsZXMgb24gc3RhcnRpbmcgYSByZWFk IHN0cmVhbQorCSAqIGZvciB2ZXJ5IHNlbGVjdGl2ZSBpbmRleCBzY2Fucy4KKwkgKi8KKwlpZiAo IWhhZEV4aXN0aW5nU2NhbkJhdGNoKQorCQlyZXR1cm47CisKKwkvKiBSZXR1cm4gZWFybHkgd2hl biBwcmVmZXRjaGluZyBpcyBhbHJlYWR5IGluIHVzZSAqLworCWlmIChoc2Nhbi0+eHNfcmVhZF9z dHJlYW0pCisJCXJldHVybjsKKworCUFzc2VydCghc2Nhbi0+YmF0Y2hyaW5nYnVmLnByZWZldGNo UG9zLnZhbGlkKTsKKworCS8qCisJICogV2UgYWxzbyBkZWxheSBjcmVhdGluZyBhIHJlYWQgc3Ry ZWFtIGR1cmluZyBpbmRleC1vbmx5IHNjYW5zIHRoYXQKKwkgKiBoYXZlbid0IGRvbmUgYW55IGhl YXAgZmV0Y2hlcyB5ZXQuICBXZSBkb24ndCB3YW50IHRvIHdhc3RlIGFueSBjeWNsZXMKKwkgKiBv biBhbGxvY2F0aW5nIGEgcmVhZCBzdHJlYW0gdW50aWwgd2UgaGF2ZSBhIGRlbW9uc3RyYXRlZCBu ZWVkIHRvCisJICogcGVyZm9ybSBoZWFwIGZldGNoZXMuCisJICovCisJaWYgKGhzY2FuLT54c19i bGsgPT0gSW52YWxpZEJsb2NrTnVtYmVyKQorCQlyZXR1cm47CisKKwkvKgorCSAqIFdlIGF2b2lk IHByZWZldGNoaW5nIGR1cmluZyBzY2FucyB3aGVyZSB3ZSdyZSB1bmFibGUgdG8gdW5ndWFyZCAo dW5waW4pCisJICogZWFjaCBiYXRjaCdzIGJ1ZmZlcnMgcmlnaHQgYXdheSAobm9uLU1WQ0Mgc25h cHNob3Qgc2NhbnMpLiAgV2UgYXJlIG5vdAorCSAqIHByZXBhcmVkIHRvIHNlbnNpYmx5IGxpbWl0 IHRoZSB0b3RhbCBudW1iZXIgb2YgYnVmZmVyIHBpbnMgaGVsZC4gIFRoZQorCSAqIHJlYWQgc3Ry ZWFtIGhhbmRsZXMgYWxsIHBpbiByZXNvdXJjZSBtYW5hZ2VtZW50IGZvciB1cywgYW5kIGtub3dz CisJICogbm90aGluZyBhYm91dCBwaW5zIGhlbGQgb24gaW5kZXggcGFnZXMvd2l0aGluIGJhdGNo ZXMuCisJICovCisJaWYgKCFzY2FuLT5NVkNDU2NhbikKKwkJcmV0dXJuOworCisJLyogR1VDIGdh dGVzIHdoZXRoZXIgb3Igbm90IHdlIHVzZSBwcmVmZXRjaGluZyAqLworCWlmICghZW5hYmxlX2lu ZGV4c2Nhbl9wcmVmZXRjaCkKKwkJcmV0dXJuOworCisJaHNjYW4tPnhzX3JlYWRfc3RyZWFtID0K KwkJcmVhZF9zdHJlYW1fYmVnaW5fcmVsYXRpb24oUkVBRF9TVFJFQU1fREVGQVVMVCwgTlVMTCwK KwkJCQkJCQkJICAgc2Nhbi0+aGVhcFJlbGF0aW9uLCBNQUlOX0ZPUktOVU0sCisJCQkJCQkJCSAg IGhlYXBhbV9pbmRleF9wcmVmZXRjaF9uZXh0X2Jsb2NrLCBzY2FuLCAwKTsKK30KKworLyoKKyAq IFJldHVybiB0aGUgbmV4dCBibG9jayB0byB0aGUgcmVhZCBzdHJlYW0gd2hlbiBwZXJmb3JtaW5n IGluZGV4IHByZWZldGNoaW5nLgorICoKKyAqIFRoZSBpbml0aWFsIGJhdGNoIGlzIGFsd2F5cyBs b2FkZWQgYnkgaGVhcGFtX2luZGV4X2dldG5leHRfc2NhbmJhdGNoX3Bvcy4KKyAqIFdlIGRvbid0 IGdldCBjYWxsZWQgdW50aWwgdGhlIGZpcnN0IHJlYWRfc3RyZWFtX25leHRfYnVmZmVyIGNhbGws IHdoZW4gYQorICogaGVhcCBibG9jayBpcyByZXF1ZXN0ZWQgZnJvbSB0aGUgc2NhbidzIHN0cmVh bSBmb3IgdGhlIGZpcnN0IHRpbWUuCisgKgorICogVGhlIHBvc2l0aW9uIG9mIHRoZSByZWFkIHN0 cmVhbSBpcyBzdG9yZWQgaW4gcHJlZmV0Y2hQb3MsIHdoaWNoIHR5cGljYWxseQorICogc3RheXMg YWhlYWQgb2Ygc2NhblBvcyAodGhlIHNjYW4ncyByZWFkIHBvc2l0aW9uKS4gIFdoZW4gd2UgcmV0 dXJuLCB3ZQorICogYWx3YXlzIGxlYXZlIHNjYW5Qb3MgPD0gcHJlZmV0Y2hQb3MuCisgKi8KK3N0 YXRpYyBCbG9ja051bWJlcgoraGVhcGFtX2luZGV4X3ByZWZldGNoX25leHRfYmxvY2soUmVhZFN0 cmVhbSAqc3RyZWFtLAorCQkJCQkJCQkgdm9pZCAqY2FsbGJhY2tfcHJpdmF0ZV9kYXRhLAorCQkJ CQkJCQkgdm9pZCAqcGVyX2J1ZmZlcl9kYXRhKQoreworCUluZGV4U2NhbkRlc2Mgc2NhbiA9IChJ bmRleFNjYW5EZXNjKSBjYWxsYmFja19wcml2YXRlX2RhdGE7CisJSW5kZXhTY2FuSGVhcERhdGEg KmhzY2FuID0gKEluZGV4U2NhbkhlYXBEYXRhICopIHNjYW4tPnhzX3RhYmxlX29wYXF1ZTsKKwlC YXRjaFJpbmdCdWZmZXIgKmJhdGNocmluZ2J1ZiA9ICZzY2FuLT5iYXRjaHJpbmdidWY7CisJQmF0 Y2hSaW5nSXRlbVBvcyAqc2NhblBvcyBQR19VU0VEX0ZPUl9BU1NFUlRTX09OTFkgPSAmYmF0Y2hy aW5nYnVmLT5zY2FuUG9zOworCUJhdGNoUmluZ0l0ZW1Qb3MgKnByZWZldGNoUG9zID0gJmJhdGNo cmluZ2J1Zi0+cHJlZmV0Y2hQb3M7CisJU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBoc2Nhbi0+ eHNfcmVhZF9zdHJlYW1fZGlyOworCUluZGV4U2NhbkJhdGNoIHByZWZldGNoQmF0Y2g7CisJSGVh cEJhdGNoRGF0YSAqaGJhdGNoID0gTlVMTDsKKworCS8qIFRoZSBzY2FuIGRpcmVjdGlvbiBtdXN0 IGFscmVhZHkgYmUgZXN0YWJsaXNoZWQgKi8KKwlBc3NlcnQoc2Nhbi0+TVZDQ1NjYW4pOworCUFz c2VydCghaHNjYW4tPnhzX3BhdXNlZCk7CisJQXNzZXJ0KGRpcmVjdGlvbiAhPSBOb01vdmVtZW50 U2NhbkRpcmVjdGlvbik7CisKKwkvKgorCSAqIEhhbmRsZSBpbml0aWFsaXphdGlvbiBvZiBwcmVm ZXRjaFBvczogc2V0IGl0IGZyb20gdGhlIHNjYW4ncyBjdXJyZW50CisJICogc2NhblBvcyB3aGVu IGl0IGlzbid0IGFscmVhZHkgKHZhbGlkbHkpIGFoZWFkIG9mIHNjYW5Qb3MuICBUaGlzIGlzCisJ ICogcmVxdWlyZWQgZHVyaW5nIHRoZSBmaXJzdCBjYWxsIGhlcmUgZm9yIHRoZSBzY2FuIChhbmQg aW4gY2VydGFpbiBlZGdlCisJICogY2FzZXMpLiAgU2VlIHRhYmxlYW1fdXRpbF9wcmVmZXRjaHBv c19jYXRjaHVwIGZvciBmdWxsIGRldGFpbHMuCisJICovCisJaWYgKHRhYmxlYW1fdXRpbF9wcmVm ZXRjaHBvc19jYXRjaHVwKHNjYW4sIGRpcmVjdGlvbikpCisJeworCQlCYXRjaE1hdGNoaW5nSXRl bSAqaXRlbTsKKworCQkvKiBwcmVmZXRjaFBvcyBoYXMgYmVlbiBpbml0aWFsaXplZCBmcm9tIHNj YW5Qb3MgZm9yIHVzICovCisJCXByZWZldGNoQmF0Y2ggPSBpbmRleF9zY2FuX2JhdGNoKHNjYW4s IHByZWZldGNoUG9zLT5iYXRjaCk7CisKKwkJLyoKKwkJICogV2UgbXVzdCBhdm9pZCBrZWVwaW5n IGFueSBiYXRjaCBndWFyZGVkIGZvciBtb3JlIHRoYW4gYW4gaW5zdGFudCwKKwkJICogdG8gYXZv aWQgdW5kZXNpcmFibGUgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHNjYW4ncyByZWFkIHN0cmVhbS4g U2VlCisJCSAqIGNvbW1lbnQgYW5kIGFzc2VydGlvbiBhdCB0aGUgdG9wIG9mIHRoZSBsb29wIGJl bG93LgorCQkgKi8KKwkJaWYgKHNjYW4tPnhzX3dhbnRfaXR1cCkKKwkJeworCQkJLyoKKwkJCSAq IEluZGV4LW9ubHkgc2NhbiBiYXRjaGVzIGFyZW4ndCB1bmd1YXJkZWQgaW1tZWRpYXRlbHkuICBE ZWFsCisJCQkgKiB3aXRoIHRoYXQuCisJCQkgKi8KKwkJCWhiYXRjaCA9IGluZGV4X3NjYW5fYmF0 Y2hfdGFibGVfYXJlYShzY2FuLCBwcmVmZXRjaEJhdGNoKTsKKworCQkJLyoKKwkJCSAqIFRoZSBy ZXF1ZXN0ZWQgaXRlbSBjYW4ndCBiZSBhbGwtdmlzaWJsZSBhY2NvcmRpbmcgdG8gaXRzCisJCQkg KiBiYXRjaCdzIGNhY2hlZCB2aXNpYmlsaXR5IGluZm9ybWF0aW9uOyBpZiBpdCB3ZXJlLCB3ZSdk IG5ldmVyCisJCQkgKiBoYXZlIGJlZW4gY2FsbGVkIGluIHRoZSBmaXJzdCBwbGFjZQorCQkJICov CisJCQlBc3NlcnQoSEVBUF9CQVRDSF9WSVNfQ0FDSEVEKGhiYXRjaCwgcHJlZmV0Y2hQb3MtPml0 ZW0pICYmCisJCQkJICAgIWhiYXRjaC0+YmF0Y2h2aXNbcHJlZmV0Y2hQb3MtPml0ZW1dKTsKKwor CQkJLyoKKwkJCSAqIExvYWQgYW55IHZpc2liaWxpdHkgaW5mbyBub3QgYWxyZWFkeSBzZXQgdGhy b3VnaCBzY2FuQmF0Y2gsIHNvCisJCQkgKiB0aGF0IHNjYW5CYXRjaC9wcmVmZXRjaEJhdGNoIGlz IHVuZ3VhcmRlZCByaWdodCBhd2F5LgorCQkJICoKKwkJCSAqIE5vdGU6IFdlIHJlbHkgb24gaGVh cGFtX2luZGV4X2JhdGNoX3Bvc192aXNpYmlsaXR5IG5vdAorCQkJICogb3ZlcndyaXRpbmcgdGhl IGV4aXN0aW5nIGJhdGNodmlzW10gZm9yIHNjYW5Qb3MvcHJlZmV0Y2hQb3MKKwkJCSAqIChwbHVz IGFueSBvdGhlciBpdGVtcyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIGNhY2hlZCkuCisJCQkgKi8K KwkJCWhzY2FuLT54c192bV9pdGVtcyA9IHNjYW4tPm1heGl0ZW1zYmF0Y2g7CS8qIG11c3QgdW5n dWFyZCAqLworCQkJaWYgKHByZWZldGNoQmF0Y2gtPmlzR3VhcmRlZCkKKwkJCQloZWFwYW1faW5k ZXhfYmF0Y2hfcG9zX3Zpc2liaWxpdHkoc2NhbiwgZGlyZWN0aW9uLAorCQkJCQkJCQkJCQkJICBw cmVmZXRjaEJhdGNoLCBoYmF0Y2gsCisJCQkJCQkJCQkJCQkgIHByZWZldGNoUG9zKTsKKworCQkJ LyoKKwkJCSAqIExhdGVyIGNhbGxzIHRvIGhlYXBhbV9pbmRleF9iYXRjaF9wb3NfdmlzaWJpbGl0 eSB3aWxsIGFsd2F5cworCQkJICogdW5ndWFyZCB0aGUgYmF0Y2ggcmlnaHQgYXdheSwgd2hpY2gg d2UgcmVseSBvbiBiZWxvdworCQkJICovCisJCX0KKworCQlBc3NlcnQoIXByZWZldGNoQmF0Y2gt PmlzR3VhcmRlZCk7CisKKwkJaXRlbSA9ICZwcmVmZXRjaEJhdGNoLT5pdGVtc1twcmVmZXRjaFBv cy0+aXRlbV07CisJCWhzY2FuLT54c19wcmVmZXRjaF9ibG9jayA9IEl0ZW1Qb2ludGVyR2V0Qmxv Y2tOdW1iZXIoJml0ZW0tPnRhYmxlVGlkKTsKKworCQkvKgorCQkgKiBTcGVjaWFsIGNhc2U6IHdo ZW4gd2UgcmV0dXJuLCBwcmVmZXRjaFBvcyB3b24ndCBiZSBhaGVhZCBvZiBzY2FuUG9zCisJCSAq IChpdCdsbCBqdXN0IGJlIGVxdWFsIHRvIHNjYW5Qb3MpLiAgV2UncmUgbWVyZWx5IGZldGNoaW5n IHRocm91Z2ggYQorCQkgKiByZWFkIHN0cmVhbTsgdHJ1ZSBwcmVmZXRjaGluZyBoYXNuJ3QgcmVh bGx5IHN0YXJ0ZWQgeWV0LgorCQkgKi8KKwkJQXNzZXJ0KGluZGV4X3NjYW5fcG9zX2NtcChzY2Fu UG9zLCBwcmVmZXRjaFBvcywgZGlyZWN0aW9uKSA9PSAwKTsKKworCQlyZXR1cm4gaHNjYW4tPnhz X3ByZWZldGNoX2Jsb2NrOworCX0KKworCS8qCisJICogV2UncmUgcGlja2luZyB1cCBwcmVmZXRj aGluZyBmcm9tIHdoZXJlIHRoZSBsYXN0IGNhbGwgaGVyZSBsZWZ0IG9mZgorCSAqLworCUFzc2Vy dChpbmRleF9zY2FuX3Bvc19jbXAoc2NhblBvcywgcHJlZmV0Y2hQb3MsIGRpcmVjdGlvbikgPD0g MCk7CisJcHJlZmV0Y2hCYXRjaCA9IGluZGV4X3NjYW5fYmF0Y2goc2NhbiwgcHJlZmV0Y2hQb3Mt PmJhdGNoKTsKKwlpZiAoc2Nhbi0+eHNfd2FudF9pdHVwKQorCQloYmF0Y2ggPSBpbmRleF9zY2Fu X2JhdGNoX3RhYmxlX2FyZWEoc2NhbiwgcHJlZmV0Y2hCYXRjaCk7CisKKwkvKgorCSAqIEFzc2Vy dCBpbiBwYXNzaW5nIHRoYXQgeHNfcHJlZmV0Y2hfYmxvY2sgbWF0Y2hlcyB0aGUgbGFzdCBpdGVt IHdlCisJICogcmV0dXJuZWQuCisJICoKKwkgKiBOb3RlOiB3ZSBkb24ndCBhY3R1YWxseSBuZWVk IGEgeHNfcHJlZmV0Y2hfYmxvY2sgZmllbGQgYXQgYWxsOyB3ZSBjb3VsZAorCSAqIGp1c3QgdGFr ZSB0aGUgbGFzdCBibG9jayB3ZSByZXR1cm5lZCBmcm9tIHByZWZldGNoUG9zIGRpcmVjdGx5IGlu c3RlYWQuCisJICogQnV0IG1haW50YWluaW5nIHhzX3ByZWZldGNoX2Jsb2NrIGV4cGxpY2l0bHkg aXMgc2xpZ2h0bHkgbW9yZSByb2J1c3QuCisJICogSXQgZ2l2ZXMgdXMgYSB3YXkgdG8gbWFrZSBz dXJlIHRoYXQgdGhlIGxhc3QgY2FsbCBoZXJlIGxlZnQgcHJlZmV0Y2hQb3MKKwkgKiBpbiBhIGNv bnNpc3RlbnQgc3RhdGUgKGUuZy4sIHdoZW4gdGhlIHJlYWQgc3RyZWFtIGhhZCB0byBiZSBwYXVz ZWQpLgorCSAqLworI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKKwl7CisJCUJhdGNoTWF0Y2hp bmdJdGVtICpsYXN0aXRlbSA9ICZwcmVmZXRjaEJhdGNoLT5pdGVtc1twcmVmZXRjaFBvcy0+aXRl bV07CisJCUJsb2NrTnVtYmVyIGxhc3RfYmxvY2sgPSBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVy KCZsYXN0aXRlbS0+dGFibGVUaWQpOworCisJCS8qCisJCSAqIE5vdGU6IHdoZW4gYSBwcmV2aW91 cyBjYWxsIHBhdXNlZCB0aGUgcmVhZCBzdHJlYW0sIHByZWZldGNoUG9zCisJCSAqIG1pZ2h0IHBv aW50IHRvIGFuIGl0ZW0gd2hvc2UgVElEIGRvZXNuJ3QgbWF0Y2ggbGFzdF9ibG9jay4gIFRoaXMK KwkJICogY2FuIG9ubHkgaGFwcGVuIHdoZW4gdGhlIGl0ZW0gd2FzIG5ldmVyIHJldHVybmVkIGR1 ZSB0byBpdCBiZWluZworCQkgKiBhbGwtdmlzaWJsZS4KKwkJICovCisJCUFzc2VydChsYXN0X2Js b2NrID09IGhzY2FuLT54c19wcmVmZXRjaF9ibG9jayB8fAorCQkJICAgKGhiYXRjaCAmJiBIRUFQ X0JBVENIX1ZJU19DQUNIRUQoaGJhdGNoLCBwcmVmZXRjaFBvcy0+aXRlbSkgJiYKKwkJCQloYmF0 Y2gtPmJhdGNodmlzW3ByZWZldGNoUG9zLT5pdGVtXSkpOworCX0KKyNlbmRpZgorCisJZm9yICg7 OykKKwl7CisJCUJhdGNoTWF0Y2hpbmdJdGVtICppdGVtOworCQlCbG9ja051bWJlciBwcmVmZXRj aF9ibG9jazsKKworCQkvKgorCQkgKiBXZSBuZXZlciBjYWxsIGFtZ2V0YmF0Y2ggd2l0aG91dCBp bW1lZGlhdGVseSB1bmd1YXJkaW5nIHRoZSBiYXRjaAorCQkgKiBvbmNlIHByZWZldGNoaW5nIGJl Z2lucy4gIFRoYXQgd2F5IGluZGV4IEFNcyB3b24ndCBob2xkIG9udG8gYW55CisJCSAqICJleHRy YSIgaW5kZXggcGFnZSBwaW5zIG5lZWRlZCBhcyBUSUQgcmVjeWNsaW5nIGludGVybG9jayBndWFy ZHMuCisJCSAqCisJCSAqIFRoaXMgaXMgZGVmZW5zaXZlLiAgVGhlIHJlYWQgc3RyZWFtIHRyaWVz IHRvIGJlIGNhcmVmdWwgYWJvdXQgbm90CisJCSAqIHBpbm5pbmcgdG9vIG1hbnkgYnVmZmVycywg YW5kIHRoYXQncyBoYXJkZXIgdG8gZG8gcmVsaWFibHkgaWYgdGhlcmUKKwkJICogYXJlIHZhcmlh YmxlIG51bWJlcnMgb2YgcGlucyB0YWtlbiB3aXRob3V0IHN1Y2ggY2FyZS4KKwkJICovCisJCUFz c2VydCghcHJlZmV0Y2hCYXRjaC0+aXNHdWFyZGVkKTsKKworCQkvKiBJbmNyZW1lbnQgcHJlZmV0 Y2hQb3MgdG8gZGV0ZXJtaW5lIHRoZSBuZXh0IGl0ZW0gdG8gcHJlZmV0Y2ggKi8KKwkJc3dpdGNo ICh0YWJsZWFtX3V0aWxfcHJlZmV0Y2hwb3NfYWR2YW5jZShzY2FuLCBkaXJlY3Rpb24sCisJCQkJ CQkJCQkJCQkgJnByZWZldGNoQmF0Y2gsIHByZWZldGNoUG9zKSkKKwkJeworCQkJY2FzZSBCQVRD SF9QT1NfQURWQU5DRUQ6CisJCQkJLyogQWR2YW5jZWQgdG8gbmV4dCBpdGVtIGluIGN1cnJlbnQv cHJldmlvdXMgcHJlZmV0Y2hCYXRjaCAqLworCQkJCWJyZWFrOworCQkJY2FzZSBCQVRDSF9QT1Nf QkFUQ0hfQURWQU5DRUQ6CisJCQkJLyogQWR2YW5jZWQgdG8gZmlyc3QgaXRlbSBpbiBuZXcgcHJl ZmV0Y2hCYXRjaCAqLworCQkJCWlmIChoYmF0Y2gpCisJCQkJeworCQkJCQkvKgorCQkJCQkgKiBF eHRyYSBoZWFwYW0tc3BlY2lmaWMgc3RlcDogYnVsay1sb2FkIHZpc2liaWxpdHkgaW5mbworCQkJ CQkgKiB1cCBmcm9udCB0byB1bmd1YXJkIGJhdGNoIGltbWVkaWF0ZWx5CisJCQkJCSAqLworCQkJ CQlBc3NlcnQoc2Nhbi0+eHNfd2FudF9pdHVwKTsKKworCQkJCQloYmF0Y2ggPSBpbmRleF9zY2Fu X2JhdGNoX3RhYmxlX2FyZWEoc2NhbiwgcHJlZmV0Y2hCYXRjaCk7CisKKwkJCQkJQXNzZXJ0KGhz Y2FuLT54c192bV9pdGVtcyA9PSBzY2FuLT5tYXhpdGVtc2JhdGNoKTsKKwkJCQkJaWYgKHByZWZl dGNoQmF0Y2gtPmlzR3VhcmRlZCkKKwkJCQkJCWhlYXBhbV9pbmRleF9iYXRjaF9wb3NfdmlzaWJp bGl0eShzY2FuLCBkaXJlY3Rpb24sCisJCQkJCQkJCQkJCQkJCSAgcHJlZmV0Y2hCYXRjaCwKKwkJ CQkJCQkJCQkJCQkJICBoYmF0Y2gsIHByZWZldGNoUG9zKTsKKwkJCQl9CisJCQkJYnJlYWs7CisJ CQljYXNlIEJBVENIX1BPU19ET05FOgorCQkJCS8qIE5vIG1vcmUgYmF0Y2hlcyBpbiB0aGlzIHNj YW4gZGlyZWN0aW9uICovCisJCQkJcmV0dXJuIEludmFsaWRCbG9ja051bWJlcjsKKwkJCWNhc2Ug QkFUQ0hfUE9TX1JJTkdfRlVMTDoKKworCQkJCS8qCisJCQkJICogRWRnZSBjYXNlOiBSYW4gb3V0 IG9mIGl0ZW1zIGZyb20gcHJlZmV0Y2hCYXRjaCwgYnV0IGNhbid0CisJCQkJICogYWR2YW5jZSB0 byB0aGUgc2NhbidzIG5leHQgYmF0Y2ggcmlnaHQgbm93IChhbGwgYXZhaWxhYmxlCisJCQkJICog YmF0Y2hyaW5nYnVmIGJhdGNoIHNsb3RzIGFyZSBjdXJyZW50bHkgaW4gdXNlKS4KKwkJCQkgKgor CQkJCSAqIERlYWwgd2l0aCB0aGlzIGJ5IG1vbWVudGFyaWx5IHBhdXNpbmcgdGhlIHJlYWQgc3Ry ZWFtLgorCQkJCSAqIGhlYXBhbV9pbmRleF9nZXRuZXh0X3NjYW5iYXRjaF9wb3Mgd2lsbCByZXN1 bWUgdGhlIHJlYWQKKwkJCQkgKiBzdHJlYW0gbGF0ZXIsIHRob3VnaCBvbmx5IGFmdGVyIHNjYW5Q b3MgaGFzIGNvbnN1bWVkIGFsbAorCQkJCSAqIHJlbWFpbmluZyBpdGVtcyBmcm9tIHNjYW5CYXRj aCAoYXQgd2hpY2ggcG9pbnQgdGhlIGN1cnJlbnQKKwkJCQkgKiBoZWFkIGJhdGNoIHdpbGwgYmUg ZnJlZWQsIG1ha2luZyBhIHNsb3QgYXZhaWxhYmxlIGZvcgorCQkJCSAqIHJldXNlKS4KKwkJCQkg Ki8KKwkJCQloc2Nhbi0+eHNfcGF1c2VkID0gdHJ1ZTsKKwkJCQlyZXR1cm4gcmVhZF9zdHJlYW1f cGF1c2Uoc3RyZWFtKTsKKwkJfQorCisJCS8qCisJCSAqIHByZWZldGNoUG9zIG5vdyBwb2ludHMg dG8gdGhlIG5leHQgaXRlbSB3aG9zZSBUSUQncyBoZWFwIGJsb2NrCisJCSAqIG51bWJlciBtaWdo dCBuZWVkIHRvIGJlIHByZWZldGNoZWQuCisJCSAqCisJCSAqIHNjYW5Qb3MgbXVzdCBiZSA8IHBy ZWZldGNoUG9zIHdoZW4gd2UgcmV0dXJuIGZyb20gdGhpcyBsb29wIHBhdGguCisJCSAqLworCQlB c3NlcnQoaW5kZXhfc2Nhbl9wb3NfY21wKHNjYW5Qb3MsIHByZWZldGNoUG9zLCBkaXJlY3Rpb24p IDwgMCk7CisKKwkJaWYgKGhiYXRjaCkKKwkJeworCQkJQXNzZXJ0KHNjYW4tPnhzX3dhbnRfaXR1 cCk7CisJCQlBc3NlcnQoSEVBUF9CQVRDSF9WSVNfQ0FDSEVEKGhiYXRjaCwgcHJlZmV0Y2hQb3Mt Pml0ZW0pKTsKKworCQkJaWYgKGhiYXRjaC0+YmF0Y2h2aXNbcHJlZmV0Y2hQb3MtPml0ZW1dKQor CQkJeworCQkJCS8qIGl0ZW0gaXMga25vd24gdG8gYmUgYWxsLXZpc2libGUgLS0gZG9uJ3QgcHJl ZmV0Y2ggKi8KKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQorCisJCWl0ZW0gPSAmcHJlZmV0Y2hC YXRjaC0+aXRlbXNbcHJlZmV0Y2hQb3MtPml0ZW1dOworCQlwcmVmZXRjaF9ibG9jayA9IEl0ZW1Q b2ludGVyR2V0QmxvY2tOdW1iZXIoJml0ZW0tPnRhYmxlVGlkKTsKKworCQlpZiAocHJlZmV0Y2hf YmxvY2sgPT0gaHNjYW4tPnhzX3ByZWZldGNoX2Jsb2NrKQorCQl7CisJCQkvKgorCQkJICogcHJl ZmV0Y2hfYmxvY2sgbWF0Y2hlcyB0aGUgbGFzdCBwcmVmZXRjaFBvcyBpdGVtJ3MgVElEJ3MgaGVh cAorCQkJICogYmxvY2sgbnVtYmVyOyB3ZSBtdXN0IG5vdCByZXR1cm4gdGhlIHNhbWUgcHJlZmV0 Y2hfYmxvY2sgdHdpY2UKKwkJCSAqICh0d2ljZSBpbiBzdWNjZXNzaW9uKQorCQkJICovCisJCQlj b250aW51ZTsKKwkJfQorCisJCS8qIFdlIGhhdmUgYSBuZXcgaGVhcCBibG9jayBudW1iZXIgdG8g cmV0dXJuIHRvIHJlYWQgc3RyZWFtICovCisJCWhzY2FuLT54c19wcmVmZXRjaF9ibG9jayA9IHBy ZWZldGNoX2Jsb2NrOworCQlyZXR1cm4gcHJlZmV0Y2hfYmxvY2s7CisJfQorCisJcGdfdW5yZWFj aGFibGUoKTsKKworCXJldHVybiBJbnZhbGlkQmxvY2tOdW1iZXI7Cit9CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhiYXRjaC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNz L2luZGV4L2luZGV4YmF0Y2guYwppbmRleCA1MWQxNDc0MDEuLjg0MWNkYTZmZiAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YmF0Y2guYworKysgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvaW5kZXgvaW5kZXhiYXRjaC5jCkBAIC01LDE1ICs1LDIyIEBACiAgKgogICogVGhp cyBtb2R1bGUgcHJvdmlkZXMgdGhlIGNvcmUgaW5mcmFzdHJ1Y3R1cmUgZm9yIGJhdGNoLWJhc2Vk IGluZGV4IHNjYW5zLAogICogd2hpY2ggYWxsb3cgaW5kZXggQU1zIHRvIHJldHVybiBtdWx0aXBs ZSBtYXRjaGluZyBUSURzIHBlciBwYWdlIGluIGEgc2luZ2xlCi0gKiBjYWxsLiAgVGhlIGJhdGNo IHJpbmcgYnVmZmVyIGlzIG93bmVkIGJ5IHRoZSB0YWJsZSBBTS4KKyAqIGNhbGwuICBUaGUgYmF0 Y2ggcmluZyBidWZmZXIgaXMgb3duZWQgYnkgdGhlIHRhYmxlIEFNLCB0eXBpY2FsbHkgbWFpbnRh aW5lZAorICogYWxvbmdzaWRlIGEgcmVhZCBzdHJlYW0gdXNlZCBmb3IgcHJlZmV0Y2hpbmcgdGFi bGUgYmxvY2tzLgogICoKLSAqIFRoZSByaW5nIGJ1ZmZlciBsb2FkcyBiYXRjaGVzIGluIGluZGV4 IGtleSBzcGFjZS9pbmRleCBzY2FuIG9yZGVyLgorICogVGhlIHJpbmcgYnVmZmVyIGxvYWRzIGJh dGNoZXMgaW4gaW5kZXgga2V5IHNwYWNlL2luZGV4IHNjYW4gb3JkZXIuICBUaGlzCisgKiBhbGxv d3MgdGhlIHRhYmxlIEFNIHRvIG1haW50YWluIGFuIGFkZXF1YXRlIHByZWZldGNoIGRpc3RhbmNl OiBpdHMgcmVhZAorICogc3RyZWFtIGNhbGxiYWNrIGlzIHRoZXJlYnkgYWJsZSB0byByZXF1ZXN0 IHRhYmxlIGJsb2NrcyByZWZlcmVuY2VkIGJ5IGluZGV4CisgKiBwYWdlcyB0aGF0IGFyZSB3ZWxs IGFoZWFkIG9mIHRoZSBjdXJyZW50IHNjYW4gcG9zaXRpb24ncyBpbmRleCBwYWdlLgogICoKICAq IE1vc3QgZnVuY3Rpb25zIGhlcmUgYXJlIHRhYmxlIEFNIHV0aWxpdGllcyAodGFibGVhbV91dGls XyopLCBjYWxsZWQgYnkKICAqIHRhYmxlIEFNcyBkdXJpbmcgYW1nZXRiYXRjaCBpbmRleCBzY2Fu cy4gIFRoZXNlIG1hbmFnZSB0aGUgYmF0Y2ggcmluZwogICogYnVmZmVyJ3MgbGlmZWN5Y2xlIGFu ZCBwb3NpdGlvbmFsIHN0YXRlLCBhbmQgaGVscCB3aXRoIGNlcnRhaW4gYXNwZWN0cyBvZgogICog cmVzb3VyY2UgbWFuYWdlbWVudC4gIFRoZSB0YWJsZSBBTSB1c2VzIHNjYW5Qb3MgKGFuZCBpdHMg c2NhbkJhdGNoIGJhdGNoKQotICogdG8gcmV0dXJuIGl0ZW1zIGZyb20gYmF0Y2hlcyByZXR1cm5l ZCBieSBhbWdldGJhdGNoLgorICogdG8gcmV0dXJuIGl0ZW1zIGZyb20gYmF0Y2hlcyByZXR1cm5l ZCBieSBhbWdldGJhdGNoLiAgVGFibGUgQU1zIHRoYXQKKyAqIHN1cHBvcnQgaW5kZXggSS9PIHBy ZWZldGNoaW5nIHVzZSBwcmVmZXRjaFBvcyAoYW5kIGl0cyBwcmVmZXRjaEJhdGNoIGJhdGNoKQor ICogYnkgaW1wbGVtZW50aW5nIGEgcmVhZCBzdHJlYW0gY2FsbGJhY2sgdGhhdCBjb25zdW1lcyBp dGVtcyB3ZWxsIGFoZWFkIG9mCisgKiBzY2FuUG9zLgogICoKICAqIFRoZXJlIGFyZSBhbHNvIHNv bWUgaW5kZXggQU0gdXRpbGl0aWVzIChpbmRleGFtX3V0aWxfKiksIGNhbGxlZCBieSBpbmRleAog ICogQU1zIHRoYXQgaW1wbGVtZW50IHRoZSBhbWdldGJhdGNoIGludGVyZmFjZSwgdG8gaGVscCBt YW5hZ2UgcmVzb3VyY2VzIGxpa2UKQEAgLTEwNCw2ICsxMTEsNyBAQCB0YWJsZWFtX3V0aWxfYmF0 Y2hzY2FuX3Jlc2V0KEluZGV4U2NhbkRlc2Mgc2NhbiwgYm9vbCBlbmRzY2FuKQogCWJvb2wJCW1h cmtCYXRjaEZyZWVkID0gZmFsc2U7CiAKIAliYXRjaHJpbmdidWYtPnNjYW5Qb3MudmFsaWQgPSBm YWxzZTsKKwliYXRjaHJpbmdidWYtPnByZWZldGNoUG9zLnZhbGlkID0gZmFsc2U7CiAJYmF0Y2hy aW5nYnVmLT5tYXJrUG9zLnZhbGlkID0gZmFsc2U7CiAKIAlmb3IgKHVpbnQ4IGkgPSBiYXRjaHJp bmdidWYtPmhlYWRCYXRjaDsgaSAhPSBiYXRjaHJpbmdidWYtPm5leHRCYXRjaDsgaSsrKQpAQCAt MjE1LDcgKzIyMywxMiBAQCB0YWJsZWFtX3V0aWxfYmF0Y2hzY2FuX21hcmtfcG9zKEluZGV4U2Nh bkRlc2Mgc2NhbikKICAqIHRoZSBjdXJyZW50IHNjYW5CYXRjaCB3aGVuIG5lZWRlZC4KICAqCiAg KiBXZSBqdXN0IGRpc2NhcmQgYWxsIGJhdGNoZXMgKG90aGVyIHRoYW4gbWFya0JhdGNoL3Jlc3Rv cmVkIHNjYW5CYXRjaCksCi0gKiBleGNlcHQgd2hlbiBtYXJrQmF0Y2ggaXMgYWxyZWFkeSB0aGUg c2NhbidzIGN1cnJlbnQgc2NhbkJhdGNoLgorICogZXhjZXB0IHdoZW4gbWFya0JhdGNoIGlzIGFs cmVhZHkgdGhlIHNjYW4ncyBjdXJyZW50IHNjYW5CYXRjaC4gIFdlIGFsd2F5cworICogaW52YWxp ZGF0ZSBwcmVmZXRjaFBvcy4gIFRoZSB0YWJsZSBBTSdzIHByZWZldGNoaW5nIHN0YXRlIChlLmcu LCBpdHMgcmVhZAorICogc3RyZWFtKSBpcyByZXNldCBieSB0aGUgY2FsbGVyICh3aGljaCBjYWxs cyB0aGlzIGZ1bmN0aW9uIGFzIGl0IHJlc2V0cyB0aGF0CisgKiBzdGF0ZSkuICBUaGlzIGFwcHJv YWNoIGtlZXBzIHRoaW5ncyBzaW1wbGUgZm9yIHRhYmxlIEFNczogbW9zdCBjb2RlIHRoYXQKKyAq IGRlYWxzIHdpdGggYmF0Y2hlcyBpcyB0aGVyZWJ5IGFibGUgdG8gYXNzdW1lIHRoYXQgdGhlIGNv bW1vbiBjYXNlIHdoZXJlCisgKiBzY2FuIGRpcmVjdGlvbiBuZXZlciBjaGFuZ2VzIGlzIHRoZSBv bmx5IGNhc2UuCiAgKgogICogTm90ZTogVGhpcyByZWxpZXMgb24gdGhlIGFzc3VtcHRpb24gdGhh dCB3ZSBhbHJlYWR5IGhhdmUgYSB2YWxpZCBzY2FuUG9zLgogICogVGFibGUgQU1zIHNob3VsZCBv bmx5IGNhbGwgdGFibGVhbV91dGlsX2JhdGNoc2Nhbl9yZXNldCBmcm9tIHdpdGhpbiB0aGVpcgpA QCAtMjQyLDYgKzI1NSwxNCBAQCB0YWJsZWFtX3V0aWxfYmF0Y2hzY2FuX3Jlc3RvcmVfcG9zKElu ZGV4U2NhbkRlc2Mgc2NhbikKIAlBc3NlcnQobWFya1Bvcy0+aXRlbSA+PSBtYXJrQmF0Y2gtPmZp cnN0SXRlbSAmJgogCQkgICBtYXJrUG9zLT5pdGVtIDw9IG1hcmtCYXRjaC0+bGFzdEl0ZW0pOwog CisJLyoKKwkgKiBSZXN0b3JpbmcgYSBtYXJrIGFsd2F5cyByZXF1aXJlcyBzdG9wcGluZyBwcmVm ZXRjaGluZy4gIFRoaXMgaXMgc2ltaWxhcgorCSAqIHRvIHRoZSBoYW5kbGluZyB0YWJsZSBBTXMg aW1wbGVtZW50IHRvIGRlYWwgd2l0aCBhIHR1cGxlLWxldmVsIGNoYW5nZQorCSAqIGluIHRoZSBz Y2FuJ3MgZGlyZWN0aW9uLiAgVGhlIHJlYWQgc3RyZWFtIG11c3QgaGF2ZSBhbHJlYWR5IGJlZW4g cmVzZXQKKwkgKiBieSB0aGUgdGFibGUgQU0gY2FsbGVyLgorCSAqLworCWJhdGNocmluZ2J1Zi0+ cHJlZmV0Y2hQb3MudmFsaWQgPSBmYWxzZTsKKwogCWlmIChzY2FuQmF0Y2ggPT0gbWFya0JhdGNo KQogCXsKIAkJLyogbWFya0JhdGNoIGlzIGFscmVhZHkgc2NhbkJhdGNoOyBuZWVkbid0IGNoYW5n ZSBiYXRjaHJpbmdidWYgKi8KQEAgLTMxMiw2ICszMzMsMTMgQEAgdGFibGVhbV91dGlsX2JhdGNo c2Nhbl9yZXN0b3JlX3BvcyhJbmRleFNjYW5EZXNjIHNjYW4pCiAgKiB0byBkZXRlcm1pbmUgd2hp Y2ggYmF0Y2ggY29tZXMgbmV4dCBpbiB0aGUgbmV3IHNjYW4gZGlyZWN0aW9uLiAgVGhpcwogICog YXBwcm9hY2ggaXNuJ3QgcGFydGljdWxhcmx5IGVmZmljaWVudCwgYnV0IGl0IHdvcmtzIHdlbGwg ZW5vdWdoIGZvciB3aGF0CiAgKiBvdWdodCB0byBiZSBhIHJlbGF0aXZlbHkgcmFyZSBvY2N1cnJl bmNlLgorICoKKyAqIENhbGxlciBtdXN0IGhhdmUgcmVzZXQgdGhlIHNjYW4ncyByZWFkIHN0cmVh bSBiZWZvcmUgY2FsbGluZyBoZXJlLiAgVGhhdAorICogbmVlZHMgdG8gaGFwcGVuIGFzIHNvb24g YXMgdGhlIHNjYW4gcmVxdWVzdHMgYSB0dXBsZSBpbiB3aGF0ZXZlciBzY2FuCisgKiBkaXJlY3Rp b24gaXMgb3Bwb3NpdGUtdG8tY3VycmVudC4gIFdlIG9ubHkgZGVhbCB3aXRoIHRoZSBjYXNlIHdo ZXJlIHRoZQorICogc2NhbiBiYWNrcyB1cCBieSBlbm91Z2ggaXRlbXMgdG8gY3Jvc3MgYSBiYXRj aCBib3VuZGFyeSAod2hlbiB0aGUgc2NhbgorICogcmVzdW1lcyBzY2FubmluZyBpbiBpdHMgb3Jp Z2luYWwgZGlyZWN0aW9uL2VuZHMgYmVmb3JlIGNyb3NzaW5nIGEgYm91bmRhcnksCisgKiB0aGVy ZSBpc24ndCBhbnkgbmVlZCB0byBjYWxsIGhlcmUpLgogICovCiB2b2lkCiB0YWJsZWFtX3V0aWxf c2NhbmJhdGNoX2RpcmNoYW5nZShJbmRleFNjYW5EZXNjIHNjYW4pCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVy L3BhdGgvY29zdHNpemUuYwppbmRleCAxYzU3NWU1NmYuLjZmY2I4MTVmNyAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY29zdHNpemUuYworKysgYi9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jCkBAIC0xNDYsNiArMTQ2LDcgQEAgaW50CQkJbWF4X3Bh cmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDI7CiBib29sCQllbmFibGVfc2Vxc2NhbiA9IHRy dWU7CiBib29sCQllbmFibGVfaW5kZXhzY2FuID0gdHJ1ZTsKIGJvb2wJCWVuYWJsZV9pbmRleG9u bHlzY2FuID0gdHJ1ZTsKK2Jvb2wJCWVuYWJsZV9pbmRleHNjYW5fcHJlZmV0Y2ggPSB0cnVlOwog Ym9vbAkJZW5hYmxlX2JpdG1hcHNjYW4gPSB0cnVlOwogYm9vbAkJZW5hYmxlX3RpZHNjYW4gPSB0 cnVlOwogYm9vbAkJZW5hYmxlX3NvcnQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv dXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1 Y19wYXJhbWV0ZXJzLmRhdAppbmRleCBhZmFhMDU4YjAuLmFjZTU2ZjdhOCAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQKKysrIGIvc3JjL2JhY2tl bmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQKQEAgLTk0MSw2ICs5NDEsMTMgQEAKICAg Ym9vdF92YWwgPT4gJ3RydWUnLAogfSwKIAoreyBuYW1lID0+ICdlbmFibGVfaW5kZXhzY2FuX3By ZWZldGNoJywgdHlwZSA9PiAnYm9vbCcsIGNvbnRleHQgPT4gJ1BHQ19VU0VSU0VUJywgZ3JvdXAg PT4gJ1FVRVJZX1RVTklOR19NRVRIT0QnLAorICBzaG9ydF9kZXNjID0+ICdFbmFibGVzIHByZWZl dGNoaW5nIGZvciBpbmRleCBzY2FucyBhbmQgaW5kZXgtb25seSBzY2Fucy4nLAorICBmbGFncyA9 PiAnR1VDX0VYUExBSU4nLAorICB2YXJpYWJsZSA9PiAnZW5hYmxlX2luZGV4c2Nhbl9wcmVmZXRj aCcsCisgIGJvb3RfdmFsID0+ICd0cnVlJywKK30sCisKIHsgbmFtZSA9PiAnZW5hYmxlX21hdGVy aWFsJywgdHlwZSA9PiAnYm9vbCcsIGNvbnRleHQgPT4gJ1BHQ19VU0VSU0VUJywgZ3JvdXAgPT4g J1FVRVJZX1RVTklOR19NRVRIT0QnLAogICBzaG9ydF9kZXNjID0+ICdFbmFibGVzIHRoZSBwbGFu bmVyXCdzIHVzZSBvZiBtYXRlcmlhbGl6YXRpb24uJywKICAgZmxhZ3MgPT4gJ0dVQ19FWFBMQUlO JywKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNh bXBsZSBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQppbmRl eCBhYzM4Y2RkYWEuLjg3MDVkZDVmMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlz Yy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9z dGdyZXNxbC5jb25mLnNhbXBsZQpAQCAtNDMxLDYgKzQzMSw3IEBACiAjZW5hYmxlX2luY3JlbWVu dGFsX3NvcnQgPSBvbgogI2VuYWJsZV9pbmRleHNjYW4gPSBvbgogI2VuYWJsZV9pbmRleG9ubHlz Y2FuID0gb24KKyNlbmFibGVfaW5kZXhzY2FuX3ByZWZldGNoID0gb24KICNlbmFibGVfbWF0ZXJp YWwgPSBvbgogI2VuYWJsZV9tZW1vaXplID0gb24KICNlbmFibGVfbWVyZ2Vqb2luID0gb24KZGlm ZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbCBiL2RvYy9zcmMvc2dtbC9jb25maWcu c2dtbAppbmRleCBmYTU2NmM5ZTUuLjhlOWQ4ZjJhYyAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21s L2NvbmZpZy5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbApAQCAtNTkzOCw2ICs1 OTM4LDIyIEBAIEFOWSA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bnVtX3N5bmM8L3Jl cGxhY2VhYmxlPiAoIDxyZXBsYWNlYWJsZSBjbGFzcz0iCiAgICAgICA8L2xpc3RpdGVtPgogICAg ICA8L3Zhcmxpc3RlbnRyeT4KIAorICAgICA8dmFybGlzdGVudHJ5IGlkPSJndWMtZW5hYmxlLWlu ZGV4c2Nhbi1wcmVmZXRjaCIgeHJlZmxhYmVsPSJlbmFibGVfaW5kZXhzY2FuX3ByZWZldGNoIj4K KyAgICAgIDx0ZXJtPjx2YXJuYW1lPmVuYWJsZV9pbmRleHNjYW5fcHJlZmV0Y2g8L3Zhcm5hbWU+ ICg8dHlwZT5ib29sZWFuPC90eXBlPikKKyAgICAgIDxpbmRleHRlcm0+CisgICAgICAgPHByaW1h cnk+PHZhcm5hbWU+ZW5hYmxlX2luZGV4c2Nhbl9wcmVmZXRjaDwvdmFybmFtZT4gY29uZmlndXJh dGlvbiBwYXJhbWV0ZXI8L3ByaW1hcnk+CisgICAgICA8L2luZGV4dGVybT4KKyAgICAgIDwvdGVy bT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgRW5hYmxlcyBvciBk aXNhYmxlcyBwcmVmZXRjaGluZyBmb3IgaW5kZXggc2NhbiBhbmQgaW5kZXgtb25seSBzY2FuCisg ICAgICAgIHBsYW4gdHlwZXMuICBQcmVmZXRjaGluZyBjYW4gaW1wcm92ZSBwZXJmb3JtYW5jZSBi eSByZWFkaW5nIHRhYmxlIEFNCisgICAgICAgIHBhZ2VzIGFoZWFkIG9mIHdoZW4gdGhleSBhcmUg bmVlZGVkIGR1cmluZyBpbmRleCBzY2Fucy4gIFRoZSBkZWZhdWx0CisgICAgICAgIGlzIDxsaXRl cmFsPm9uPC9saXRlcmFsPi4KKyAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAg ICA8L3Zhcmxpc3RlbnRyeT4KKwogICAgICA8dmFybGlzdGVudHJ5IGlkPSJndWMtZW5hYmxlLW1h dGVyaWFsIiB4cmVmbGFiZWw9ImVuYWJsZV9tYXRlcmlhbCI+CiAgICAgICA8dGVybT48dmFybmFt ZT5lbmFibGVfbWF0ZXJpYWw8L3Zhcm5hbWU+ICg8dHlwZT5ib29sZWFuPC90eXBlPikKICAgICAg IDxpbmRleHRlcm0+CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21sIGIvZG9j L3NyYy9zZ21sL2luZGV4YW0uc2dtbAppbmRleCBmOGY2NzAzNDcuLmVlZGFkNmJjNCAxMDA2NDQK LS0tIGEvZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvaW5kZXhh bS5zZ21sCkBAIC04NTQsOSArODU0LDEyIEBAIGFtZ2V0YmF0Y2ggKEluZGV4U2NhbkRlc2Mgc2Nh biwKICAgPHBhcmE+CiAgICBUaGUgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBpbnRl cmZhY2UgaXMgYW4gYWx0ZXJuYXRpdmUgdG8KICAgIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5j dGlvbj4gdGhhdCByZXR1cm5zIG1hdGNoaW5nIGluZGV4IGVudHJpZXMgaW4gYmF0Y2hlcwotICAg cmF0aGVyIHRoYW4gb25lIGF0IGEgdGltZS4gIEJ5IHJldHVybmluZyBhbGwgbWF0Y2hpbmcgaW5k ZXggZW50cmllcyBmcm9tIGEKLSAgIHNpbmdsZSBpbmRleCBwYWdlIHRvZ2V0aGVyLCB0aGUgdGFi bGUgQU0gZ2FpbnMgdmlzaWJpbGl0eSBpbnRvIHdoaWNoIHRhYmxlCi0gICBibG9ja3Mgd2lsbCBi ZSBuZWVkZWQgaW4gdGhlIG5lYXIgZnV0dXJlLgorICAgcmF0aGVyIHRoYW4gb25lIGF0IGEgdGlt ZS4gVGhpcyBlbmFibGVzIHRoZSB0YWJsZSBhY2Nlc3MgbWV0aG9kIHRvCisgICBvcHRpbWl6ZSB0 YWJsZSBibG9jayBhY2Nlc3MgcGF0dGVybnMgYW5kIHBlcmZvcm0gSS9PIHByZWZldGNoaW5nLgor ICAgQnkgcmV0dXJuaW5nIGFsbCBtYXRjaGluZyBpbmRleCBlbnRyaWVzIGZyb20gYSBzaW5nbGUg aW5kZXggcGFnZSB0b2dldGhlciwKKyAgIHRoZSB0YWJsZSBBTSBjYW4gcmVhZGFoZWFkIHRocm91 Z2ggdGhlIGluZGV4IGFuZCBpZGVudGlmeSB3aGljaCB0YWJsZQorICAgYmxvY2tzIHdpbGwgYmUg bmVlZGVkLCBhbGxvd2luZyBwcmVmZXRjaGluZyBvZiB0YWJsZSBBTSBwYWdlcyBkdXJpbmcKKyAg IG9yZGVyZWQgaW5kZXggc2NhbnMuCiAgIDwvcGFyYT4KIAogICA8cGFyYT4KQEAgLTk5MCw3ICs5 OTMsOSBAQCBhbXVuZ3VhcmRiYXRjaCAoSW5kZXhTY2FuRGVzYyBzY2FuLAogICAgIHRvIGZyZWUg dGhlIHBpbnMgYXQgYW4gb3Bwb3J0dW5lIHBvaW50IChhdCBhIG1pbmltdW0gd2hlbmV2ZXIKICAg ICA8ZnVuY3Rpb24+YW1lbmRzY2FuPC9mdW5jdGlvbj4gaXMgY2FsbGVkLCBhbmQgdHlwaWNhbGx5 IHdoZW4KICAgICA8ZnVuY3Rpb24+YW1yZXNjYW48L2Z1bmN0aW9uPiBpcyBjYWxsZWQpLiAgSXQg bXVzdCBhbHNvIGtlZXAgdGhlIG51bWJlciBvZgotICAgIHJldGFpbmVkIHBpbnMgZml4ZWQgYW5k IHNtYWxsLgorICAgIHJldGFpbmVkIHBpbnMgZml4ZWQgYW5kIHNtYWxsLCB0byBhdm9pZCBleGhh dXN0aW5nIHRoZSBiYWNrZW5kJ3MgYnVmZmVyCisgICAgcGluIGxpbWl0ICh3aGljaCBpcyBzaGFy ZWQgd2l0aCB0aGUgdGFibGUgQU0ncyByZWFkIHN0cmVhbSBmb3IgaW5kZXggc2NhbgorICAgIHBy ZWZldGNoaW5nKS4KICAgIDwvcGFyYT4KICAgPC9ub3RlPgogCkBAIC0xNTMyLDYgKzE1MzcsNjYg QEAgYW10cmFuc2xhdGVjbXB0eXBlIChDb21wYXJlVHlwZSBjbXB0eXBlLCBPaWQgb3BmYW1pbHks IE9pZCBvcGNpbnR5cGUpOwogICAgb3IgdmljZSB2ZXJzYSwgaWYgaXRzIGludGVybmFsIGltcGxl bWVudGF0aW9uIGlzIHVuc3VpdGVkIHRvIG9uZSBBUEkgb3IgdGhlIG90aGVyLgogICA8L3BhcmE+ CiAKKyAgPHNlY3QyIGlkPSJpbmRleC1zY2FubmluZy1iYXRjaGVzIj4KKyAgIDx0aXRsZT5UYWJs ZSBBTSBDb25zaWRlcmF0aW9ucyBmb3IgQmF0Y2ggU2Nhbm5pbmc8L3RpdGxlPgorCisgICA8cGFy YT4KKyAgICBUaGlzIHNlY3Rpb24gaXMgcHJpbWFyaWx5IHJlbGV2YW50IHRvIDxsaW5rIGxpbmtl bmQ9InRhYmxlYW0iPnRhYmxlIGFjY2VzcworICAgICBtZXRob2Q8L2xpbms+IGF1dGhvcnMuCisg ICA8L3BhcmE+CisKKyAgIDxwYXJhPgorICAgIFdoZW4gYW4gaW5kZXggc2NhbiB1c2VzIHRoZSA8 ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGludGVyZmFjZSwgdGhlCisgICAgdGFibGUg QU0gaGFzIHNvbGUgY29udHJvbCBvdmVyIHRoZSA8c3RydWN0bmFtZT5JbmRleFNjYW5EZXNjPC9z dHJ1Y3RuYW1lPidzCisgICAgPHN0cnVjdGZpZWxkPmJhdGNocmluZ2J1Zjwvc3RydWN0ZmllbGQ+ LCBpbmNsdWRpbmcgY3JlYXRpbmcsIHJlc2V0dGluZywKKyAgICBhbmQgZW5kaW5nIHRoZSBiYXRj aCByaW5nIGJ1ZmZlciB3aXRoaW4gdGhlIGFwcHJvcHJpYXRlIHRhYmxlIEFNCisgICAgY2FsbGJh Y2tzLCBhbmQgbWFuYWdpbmcgcG9zaXRpb25hbCBzdGF0ZSBhbmQgVElEIHJlY3ljbGluZyBpbnRl cmxvY2tpbmcKKyAgICAodGhhdCBpcywgZGV0ZXJtaW5pbmcgd2hlbiB0byB1bmd1YXJkIGVhY2gg YmF0Y2gsIHdoaWNoIHdpbGwgdHlwaWNhbGx5CisgICAgcmVsZWFzZSBhbiBpbmRleCBwYWdlIGJ1 ZmZlciBwaW4gYXNzb2NpYXRlZCB3aXRoIHRoZSBiYXRjaCkuICBJbmRleCBhY2Nlc3MKKyAgICBt ZXRob2RzIHNob3VsZCBub3QgYWNjZXNzIG9yIG1hbmlwdWxhdGUgdGhlc2UgZmllbGRzLgorICAg IDxmaWxlbmFtZT5zcmMvaW5jbHVkZS9hY2Nlc3MvaW5kZXhiYXRjaC5oPC9maWxlbmFtZT4gcHJv dmlkZXMgdGhlCisgICAgPGZ1bmN0aW9uPnRhYmxlYW1fdXRpbF8qPC9mdW5jdGlvbj4gdXRpbGl0 eSBmdW5jdGlvbnMgdGhhdCB0YWJsZSBBTXMgdXNlCisgICAgdG8gbWFuYWdlIHRoZSByaW5nIGJ1 ZmZlciBhbmQgaXRzIHBvc2l0aW9uYWwgc3RhdGUuICBTZWUgdGhlCisgICAgPGZpbGVuYW1lPnNy Yy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9pbmRleHNjYW4uYzwvZmlsZW5hbWU+CisgICAg aW1wbGVtZW50YXRpb24gZm9yIGEgcmVmZXJlbmNlIGV4YW1wbGUuCisgICA8L3BhcmE+CisKKyAg IDxwYXJhPgorICAgIFRoZSA8c3RydWN0ZmllbGQ+c2NhblBvczwvc3RydWN0ZmllbGQ+IGZpZWxk IHdpdGhpbgorICAgIDxzdHJ1Y3RmaWVsZD5iYXRjaHJpbmdidWY8L3N0cnVjdGZpZWxkPiB0cmFj a3Mgd2hpY2ggYmF0Y2ggYW5kIGl0ZW0gd2l0aGluCisgICAgdGhhdCBiYXRjaCB3aWxsIGJlIHJl dHVybmVkIG5leHQgdG8gdGhlIGV4ZWN1dG9yLiAgVGhlIHRhYmxlIEFNIG11c3QgYWR2YW5jZQor ICAgIDxzdHJ1Y3RmaWVsZD5zY2FuUG9zPC9zdHJ1Y3RmaWVsZD4gYXMgdHVwbGVzIGFyZSByZXR1 cm5lZCBieQorICAgIDxmdW5jdGlvbj50YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Q8L2Z1bmN0aW9u PiAodXNpbmcKKyAgICA8ZnVuY3Rpb24+dGFibGVhbV91dGlsX3NjYW5wb3NfYWR2YW5jZTwvZnVu Y3Rpb24+LCBwbHVzCisgICAgPGZ1bmN0aW9uPnRhYmxlYW1fdXRpbF9zY2FucG9zX25leHRiYXRj aDwvZnVuY3Rpb24+IHdoZW4gY3Jvc3NpbmcgYmF0Y2gKKyAgICBib3VuZGFyaWVzKSwgYW5kIG11 c3QgYWxzbyBtb2RpZnkgdGhpcyBmaWVsZCB3aGVuIHJlc3RvcmluZyBhIHNhdmVkIG1hcmsuCisg ICA8L3BhcmE+CisKKyAgIDxwYXJhPgorICAgIFRoZSA8c3RydWN0ZmllbGQ+cHJlZmV0Y2hQb3M8 L3N0cnVjdGZpZWxkPiBmaWVsZCB0cmFja3MgdGhlIHBvc2l0aW9uIHVzZWQKKyAgICBmb3IgSS9P IHByZWZldGNoaW5nLiAgSXQgaXMgbWFuYWdlZCB3aXRoaW4gYSByZWFkIHN0cmVhbSBjYWxsYmFj ayAodXNpbmcKKyAgICA8ZnVuY3Rpb24+dGFibGVhbV91dGlsX3ByZWZldGNocG9zX2NhdGNodXA8 L2Z1bmN0aW9uPiBhbmQKKyAgICA8ZnVuY3Rpb24+dGFibGVhbV91dGlsX3ByZWZldGNocG9zX2Fk dmFuY2U8L2Z1bmN0aW9uPiksIGFsbG93aW5nCisgICAgdGhlIHRhYmxlIEFNIHRvIHByZWZldGNo IHRhYmxlIGJsb2NrcyBwb2ludGVkIHRvIGJ5IGl0ZW1zIHRoYXQgYXJlIHdlbGwKKyAgICBhaGVh ZCBvZiB0aGUgY3VycmVudCBzY2FuIHBvc2l0aW9uLiAgSW5pdGlhbGx5CisgICAgPHN0cnVjdGZp ZWxkPnByZWZldGNoUG9zPC9zdHJ1Y3RmaWVsZD4gc3RhcnRzIGF0CisgICAgPHN0cnVjdGZpZWxk PnNjYW5Qb3M8L3N0cnVjdGZpZWxkPiwgYnV0IGFzIHRoZSByZWFkIHN0cmVhbSByYW1wcyB1cCBp dCBjYW4KKyAgICBnZXQgZmFyIGFoZWFkICZtZGFzaDsgc3Bhbm5pbmcgbXVsdGlwbGUgaW5kZXgg cGFnZXMgaWYgbmVjZXNzYXJ5IHRvCisgICAgbWFpbnRhaW4gYW4gb3B0aW1hbCBJL08gcHJlZmV0 Y2ggZGlzdGFuY2UgZm9yIHRhYmxlIGJsb2NrIHJlYWRzLiAgQSBtYWpvcgorICAgIGdvYWwgb2Yg dGhlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaW50ZXJmYWNlIGlzIHRvIGFsbG93 IHRoZQorICAgIHRhYmxlIEFNIHRvIHByZWZldGNoIHdpdGhvdXQgYmVpbmcgbGltaXRlZCB0byBp dGVtcyBmcm9tIHRoZSBjdXJyZW50CisgICAgPHN0cnVjdGZpZWxkPnNjYW5Qb3M8L3N0cnVjdGZp ZWxkPiBiYXRjaCdzIGluZGV4IGxlYWYgcGFnZS4KKyAgIDwvcGFyYT4KKworICAgPHBhcmE+Cisg ICAgRm9yIGRldGFpbHMgb24gdGhlIFRJRCByZWN5Y2xpbmcgaW50ZXJsb2NrIGR1cmluZyBiYXRj aCBzY2FucywgaW5jbHVkaW5nCisgICAgdGhlIDxzdHJ1Y3RmaWVsZD5iYXRjaEltbWVkaWF0ZVVu Z3VhcmQ8L3N0cnVjdGZpZWxkPiBwb2xpY3kgYW5kIHRoZQorICAgIDxmdW5jdGlvbj5hbXVuZ3Vh cmRiYXRjaDwvZnVuY3Rpb24+IGNhbGxiYWNrLCBzZWUKKyAgICA8eHJlZiBsaW5rZW5kPSJpbmRl eC1sb2NraW5nIi8+LgorICAgPC9wYXJhPgorCisgIDwvc2VjdDI+CisKICA8L3NlY3QxPgogCiAg PHNlY3QxIGlkPSJpbmRleC1sb2NraW5nIj4KQEAgLTE2MzQsNyArMTY5OSwyNyBAQCBhbXRyYW5z bGF0ZWNtcHR5cGUgKENvbXBhcmVUeXBlIGNtcHR5cGUsIE9pZCBvcGZhbWlseSwgT2lkIG9wY2lu dHlwZSk7CiAgICBpbW1lZGlhdGVseSBhZnRlciBzY2FubmluZyB0aGUgY29ycmVzcG9uZGluZyBp bmRleCBlbnRyeS4gIFRoaXMgaXMKICAgIGV4cGVuc2l2ZSBmb3IgYSBudW1iZXIgb2YgcmVhc29u cy4gIFRoZQogICAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBpbnRlcmZhY2UsIGJ5 IGNvbnRyYXN0LCB3YXMgZGVzaWduZWQgdG8KLSAgIGFsbG93IHNjYW5zIHRvIGJlIDxxdW90ZT5h c3luY2hyb25vdXM8L3F1b3RlPi4KKyAgIGFsbG93IHNjYW5zIHRvIGJlIDxxdW90ZT5hc3luY2hy b25vdXM8L3F1b3RlPjogYnkgY29sbGVjdGluZyBiYXRjaGVzIG9mCisgICBUSURzIGZyb20gbXVs dGlwbGUgaW5kZXggcGFnZXMsIHRoZSB0YWJsZSBBTSBjYW4gcHJlZmV0Y2ggdGhlIGNvcnJlc3Bv bmRpbmcKKyAgIHRhYmxlIGJsb2NrcyB3ZWxsIGFoZWFkIG9mIHRoZSBjdXJyZW50IHNjYW4gcG9z aXRpb24gKHVzaW5nIGFzeW5jaHJvbm91cworICAgSS9PIHdoZW4gYXZhaWxhYmxlKSwgYWxsb3dp bmcgYSBtb3JlIGVmZmljaWVudCBoZWFwIGFjY2VzcyBwYXR0ZXJuLiAgTm90CisgICBhbGwgc2Nh bnMgZW5kIHVwIGJlaW5nIGFzeW5jaHJvbm91cyBpbiBwcmFjdGljZSwgYnV0IHRoZSBpbnRlcmZh Y2UgaXMKKyAgIGRlc2lnbmVkIHRvIGFsbG93IGl0LiAgUGVyIHRoZSBhYm92ZSBhbmFseXNpcywg d2UgbXVzdCB1c2UgdGhlIHN5bmNocm9ub3VzCisgICBhcHByb2FjaCBmb3Igbm9uLU1WQ0MtY29t cGxpYW50IHNuYXBzaG90cyAoZXZlbiB3aGVuIHVzaW5nIHRoZQorICAgPGZ1bmN0aW9uPmFtZ2V0 YmF0Y2g8L2Z1bmN0aW9uPiBpbnRlcmZhY2UpLCBidXQgYW4gYXN5bmNocm9ub3VzIHNjYW4gaXMK KyAgIHdvcmthYmxlIGZvciBwbGFpbiBpbmRleCBzY2FucyB0aGF0IHVzZSBhbiBNVkNDIHNuYXBz aG90LgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBCZWNhdXNlIHRoZSB0YWJsZSBBTSByZWFk cyBtdWx0aXBsZSBpbmRleCBsZWFmIHBhZ2VzIGFoZWFkIHZpYQorICAgPGZ1bmN0aW9uPmFtZ2V0 YmF0Y2g8L2Z1bmN0aW9uPiB0byBmYWNpbGl0YXRlIHRoaXMgcHJlZmV0Y2hpbmcsIGEgbm9uLU1W Q0MKKyAgIHNjYW4gd291bGQgaGF2ZSB0byBob2xkIHRoZSBUSUQgcmVjeWNsaW5nIGludGVybG9j ayBhY3Jvc3MgdGhlIGVudGlyZQorICAgcmVhZC1haGVhZCB3aW5kb3csIHNpbmNlIGl0IGhhcyBu byBoZWFwLXZpc2liaWxpdHkgYmFja3N0b3AgdG8gZmFsbCBiYWNrIG9uLgorICAgVGhhdCBpcyBp bXByYWN0aWNhbCwgc28gSS9PIHByZWZldGNoaW5nIHdpdGgKKyAgIDxmdW5jdGlvbj5hbWdldGJh dGNoPC9mdW5jdGlvbj4gaXMgb25seSBwb3NzaWJsZSB3aGVuIGFuIE1WQ0MtY29tcGxpYW50Cisg ICBzbmFwc2hvdCBpcyBpbiB1c2UuICBBbiBNVkNDIHNjYW4gZWl0aGVyIGRyb3BzIHRoZSBpbnRl cmxvY2sgaW1tZWRpYXRlbHkgb3IsCisgICBmb3IgaW5kZXgtb25seSBzY2FucywgaG9sZHMgb25s eSBhIGJvdW5kZWQgbnVtYmVyIG9mIHBpbnMgKG9uZSBwZXIgaW4tZmxpZ2h0CisgICBiYXRjaCku CiAgIDwvcGFyYT4KIAogICA8cGFyYT4KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC90YWJsZWFt LnNnbWwgYi9kb2Mvc3JjL3NnbWwvdGFibGVhbS5zZ21sCmluZGV4IDljY2Y1YjczOS4uNDU0MmUw MGI0IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvdGFibGVhbS5zZ21sCisrKyBiL2RvYy9zcmMv c2dtbC90YWJsZWFtLnNnbWwKQEAgLTEyOSw2ICsxMjksMTQgQEAgbXlfdGFibGVhbV9oYW5kbGVy KFBHX0ZVTkNUSU9OX0FSR1MpCiAgIG9wdGlvbmFsKSwgdGhlIGJsb2NrIG51bWJlciBuZWVkcyB0 byBwcm92aWRlIGxvY2FsaXR5LgogIDwvcGFyYT4KIAorIDxwYXJhPgorICBUYWJsZSBhY2Nlc3Mg bWV0aG9kcyBtdXN0IHN1cHBvcnQgb3JkZXJlZCBpbmRleCBzY2FucyB1c2luZyB0aGUKKyAgPGZ1 bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBpbnRlcmZhY2UuIFNlZSBhbHNvCisgIDx4cmVm IGxpbmtlbmQ9ImluZGV4LXNjYW5uaW5nLWJhdGNoZXMiLz4gZm9yIGRldGFpbHMgb24gaW50ZXJm YWNpbmcgd2l0aAorICA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGluZGV4IGFjY2Vz cyBtZXRob2RzLCBhbmQgbWFuYWdpbmcgdGhlCisgIHNjYW4ncyBwb3NpdGlvbi4KKyA8L3BhcmE+ CisKICA8cGFyYT4KICAgRm9yIGNyYXNoIHNhZmV0eSwgYW4gQU0gY2FuIHVzZSBwb3N0Z3Jlcycg PGxpbmsKICAgbGlua2VuZD0id2FsIj48YWNyb255bT5XQUw8L2Fjcm9ueW0+PC9saW5rPiwgb3Ig YSBjdXN0b20gaW1wbGVtZW50YXRpb24uCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL3N5c3ZpZXdzLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mu b3V0CmluZGV4IDEzMmI1NmE1OC4uMzJiYzNkZDNlIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL3N5c3ZpZXdzLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L3N5c3ZpZXdzLm91dApAQCAtMTY2LDYgKzE2Niw3IEBAIHNlbGVjdCBuYW1lLCBzZXR0aW5nIGZy b20gcGdfc2V0dGluZ3Mgd2hlcmUgbmFtZSBsaWtlICdlbmFibGUlJzsKICBlbmFibGVfaW5jcmVt ZW50YWxfc29ydCAgICAgICAgfCBvbgogIGVuYWJsZV9pbmRleG9ubHlzY2FuICAgICAgICAgICB8 IG9uCiAgZW5hYmxlX2luZGV4c2NhbiAgICAgICAgICAgICAgIHwgb24KKyBlbmFibGVfaW5kZXhz Y2FuX3ByZWZldGNoICAgICAgfCBvbgogIGVuYWJsZV9tYXRlcmlhbCAgICAgICAgICAgICAgICB8 IG9uCiAgZW5hYmxlX21lbW9pemUgICAgICAgICAgICAgICAgIHwgb24KICBlbmFibGVfbWVyZ2Vq b2luICAgICAgICAgICAgICAgfCBvbgpAQCAtMTgwLDcgKzE4MSw3IEBAIHNlbGVjdCBuYW1lLCBz ZXR0aW5nIGZyb20gcGdfc2V0dGluZ3Mgd2hlcmUgbmFtZSBsaWtlICdlbmFibGUlJzsKICBlbmFi bGVfc2Vxc2NhbiAgICAgICAgICAgICAgICAgfCBvbgogIGVuYWJsZV9zb3J0ICAgICAgICAgICAg ICAgICAgICB8IG9uCiAgZW5hYmxlX3RpZHNjYW4gICAgICAgICAgICAgICAgIHwgb24KLSgyNSBy b3dzKQorKDI2IHJvd3MpCiAKIC0tIFRoZXJlIGFyZSBhbHdheXMgd2FpdCBldmVudCBkZXNjcmlw dGlvbnMgZm9yIHZhcmlvdXMgdHlwZXMuICBJbmplY3Rpb25Qb2ludAogLS0gbWF5IGJlIHByZXNl bnQgb3IgYWJzZW50LCBkZXBlbmRpbmcgb24gaGlzdG9yeSBzaW5jZSBsYXN0IHBvc3RtYXN0ZXIg c3RhcnQuCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3Ny Yy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDdmZjFkYWFkNS4uZGI5NWQ0NTY2 IDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMv dG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtMjY2LDYgKzI2Niw3IEBAIEJhc2VCYWNr dXBUYXJnZXRIYW5kbGUKIEJhc2VCYWNrdXBUYXJnZXRUeXBlCiBCYXRjaE1WQ0NTdGF0ZQogQmF0 Y2hNYXRjaGluZ0l0ZW0KK0JhdGNoUG9zQWR2YW5jZVJlc3VsdAogQmF0Y2hSaW5nQnVmZmVyCiBC YXRjaFJpbmdJdGVtUG9zCiBCZWdpbkRpcmVjdE1vZGlmeV9mdW5jdGlvbgotLSAKMi41My4wCgo= --000000000000d6f56006543b3e3b Content-Type: application/octet-stream; name="v27-0003-Adopt-amgetbatch-interface-in-hash-index-AM.patch" Content-Disposition: attachment; filename="v27-0003-Adopt-amgetbatch-interface-in-hash-index-AM.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqe4shl97 RnJvbSAwZTY0Y2VkYTNkZDYxMDhjNTY0ZTNiZjg2Mjg0OWFhMmFlNmFmZWNkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFR1 ZSwgMjUgTm92IDIwMjUgMTg6MDM6MTUgLTA1MDAKU3ViamVjdDogW1BBVENIIHYyNyAzLzldIEFk b3B0IGFtZ2V0YmF0Y2ggaW50ZXJmYWNlIGluIGhhc2ggaW5kZXggQU0uCgpSZXBsYWNlIGhhc2hn ZXR0dXBsZSB3aXRoIGhhc2hnZXRiYXRjaCwgYSBmdW5jdGlvbiB0aGF0IGltcGxlbWVudHMgdGhl Cm5ldyBhbWdldGJhdGNoIGludGVyZmFjZSBhZGRlZCBieSBjb21taXQgRklYTUUuICBQbGFpbiBp bmRleCBzY2FucyBvZgpoYXNoIGluZGV4ZXMgbm93IHJldHVybiBtYXRjaGluZyBpdGVtcyBpbiBi YXRjaGVzIGNvbnNpc3Rpbmcgb2YgYWxsIG9mCnRoZSBtYXRjaGVzIGZyb20gYSBnaXZlbiBidWNr ZXQgb3Igb3ZlcmZsb3cgcGFnZS4gIFRoaXMgZ2l2ZXMgdGhlIHRhYmxlCkFNIHRoZSBhYmlsaXR5 IHRvIHBlcmZvcm0gb3B0aW1pemF0aW9ucyBsaWtlIGluZGV4IHByZWZldGNoaW5nIGR1cmluZwpo YXNoIGluZGV4IHNjYW5zLgoKUmV0dXJuZWQgYmF0Y2hlcyBob2xkIG5vIGJ1ZmZlciBwaW5zIG9u IGluZGV4IHBhZ2VzLCBwZXIgdGhlIGFtZ2V0YmF0Y2gKaW50ZXJmYWNlJ3MgY29udHJhY3QuICBU aGlzIGdyZWF0bHkgc2ltcGxpZmllcyByZXNvdXJjZSBtYW5hZ2VtZW50CmR1cmluZyBpbmRleCBw cmVmZXRjaGluZywgd2hlcmUgdGhlIHJlYWQgc3RyZWFtIGlzIGV4cGVjdGVkIHRvIGhvbGQgbWFu eQpwaW5zIG9uIGhlYXAgcGFnZXMuICBUaGUgYW1nZXRiYXRjaCBpbnRlcmZhY2UgcmVxdWlyZXMg dGhhdCBpbmRleCBBTXMKdGFrZSB0aGUgc2FtZSBzdGFuZGFyZGl6ZWQgYXBwcm9hY2ggdG8gcGlu IG1hbmFnZW1lbnQgZm9yIHBpbnMgdGhhdCBhcmUKdXNlZCB0byBwcmV2ZW50IHVuc2FmZSBjb25j dXJyZW50IFRJRCByZWN5Y2xpbmcgYnkgVkFDVVVNICh0aGF0IHdheQpwcmVmZXRjaGluZyBjYW4g aG9sZCBvcGVuIG11bHRpcGxlIGJhdGNoZXMgd2l0aG91dCBpdCBhZmZlY3RpbmcgdGhlIHJlYWQK c3RyZWFtKS4gIE5vdGUsIGhvd2V2ZXIsIHRoYXQgaGFzaCBzdGlsbCBob2xkcyBvbiB0byBwaW5z IG5lZWRlZCBmb3IgaXRzCm93biBpbnRlcm5hbCBwdXJwb3NlcyAoZS5nLiwgaXQnbGwgc3RpbGwg aG9sZCBvbnRvIGEgcGluIGR1cmluZyBhIGJ1Y2tldApzcGxpdCkuCgpoYXNoa2lsbGl0ZW1zYmF0 Y2ggKHRoZSBoYXNoIGltcGxlbWVudGF0aW9uIG9mIHRoZSBuZXcgYW1raWxsaXRlbXNiYXRjaApp bnRlcmZhY2UpIHBlcmZvcm1zIExQX0RFQUQgbWFya2luZyBvZiBkZWFkIGluZGV4IGVudHJpZXMs IHdoaWxlCmZvbGxvd2luZyBzbGlnaHRseSBkaWZmZXJlbnQgcnVsZXMgdG8gdGhlIG9sZCBhcHBy b2FjaC4gIEl0IHJlbGllcyBvbgpjb21wYXJpbmcgdGhlIGJhdGNoJ3Mgc2F2ZWQgTFNOIGFnYWlu c3QgdGhlIGN1cnJlbnQgcGFnZSBMU04gdG8gZGV0ZWN0CmNvbmN1cnJlbnQgcGFnZSBtb2RpZmlj YXRpb25zLCB3aGljaCBpbiB0dXJuIHJlcXVpcmVzIGZha2UgTFNOIHN1cHBvcnQKZm9yIHVubG9n Z2VkIHJlbGF0aW9ucy4gIFByZXBhcmF0b3J5IGNvbW1pdCBlNTgzNmY3YiBhZGRlZCB0aGF0IHN1 cHBvcnQKdG8gdGhlIGhhc2ggaW5kZXggQU0uCgpBdXRob3I6IFBldGVyIEdlb2doZWdhbiA8cGdA Ym93dC5pZT4KUmV2aWV3ZWQtYnk6IFRvbWFzIFZvbmRyYSA8dG9tYXNAdm9uZHJhLm1lPgpSZXZp ZXdlZC1ieTogQW5kcmVzIEZyZXVuZCA8YW5kcmVzQGFuYXJhemVsLmRlPgpEaXNjdXNzaW9uOiBo dHRwczovL3Bvc3Rnci5lcy9tL0NBSDItV3ptWXFoYWNCSDE2MXBlQVdiNWVGPUphN0NGQVErMGpT RU1xPXFuZkxWVE9PZ0BtYWlsLmdtYWlsLmNvbQotLS0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9oYXNo LmggICAgICAgICAgICB8ICA4MSArKy0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9SRUFE TUUgICAgICAgfCAgMzEgKy0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMgICAgICAg fCAyMTAgKysrKysrKysrKy0tLS0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaF94bG9n LmMgIHwgICA0ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNocGFnZS5jICAgfCAgMjEg Ky0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hzZWFyY2guYyB8IDM0NSArKysrKysrKysr KystLS0tLS0tLS0tLS0tLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2h1dGlsLmMgICB8 IDEyOSArLS0tLS0tLS0tCiBkb2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21sICAgICAgICAgICAgfCAg MjkgKystCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICAgfCAgIDMgKy0KIDkg ZmlsZXMgY2hhbmdlZCwgMzQzIGluc2VydGlvbnMoKyksIDUxMCBkZWxldGlvbnMoLSkKCmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGFzaC5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2hh c2guaAppbmRleCBhODcwMmYwZTUuLmZlNjA0ODQyMiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv YWNjZXNzL2hhc2guaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGFzaC5oCkBAIC0xOCw2ICsx OCw3IEBACiAjZGVmaW5lIEhBU0hfSAogCiAjaW5jbHVkZSAiYWNjZXNzL2FtYXBpLmgiCisjaW5j bHVkZSAiYWNjZXNzL2luZGV4YmF0Y2guaCIKICNpbmNsdWRlICJhY2Nlc3MvaXR1cC5oIgogI2lu Y2x1ZGUgImFjY2Vzcy9zZGlyLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19hbV9kLmgiCkBAIC0x MDAsNTcgKzEwMSwxOCBAQCB0eXBlZGVmIEhhc2hQYWdlT3BhcXVlRGF0YSAqSGFzaFBhZ2VPcGFx dWU7CiAgKi8KICNkZWZpbmUgSEFTSE9fUEFHRV9JRAkJMHhGRjgwCiAKLXR5cGVkZWYgc3RydWN0 IEhhc2hTY2FuUG9zSXRlbQkvKiB3aGF0IHdlIHJlbWVtYmVyIGFib3V0IGVhY2ggbWF0Y2ggKi8K Ky8qIFBlci1iYXRjaCBkYXRhIHByaXZhdGUgdG8gdGhlIGhhc2ggaW5kZXggQU0gKi8KK3R5cGVk ZWYgc3RydWN0IEhhc2hCYXRjaERhdGEKIHsKLQlJdGVtUG9pbnRlckRhdGEgaGVhcFRpZDsJLyog VElEIG9mIHJlZmVyZW5jZWQgaGVhcCBpdGVtICovCi0JT2Zmc2V0TnVtYmVyIGluZGV4T2Zmc2V0 OwkvKiBpbmRleCBpdGVtJ3MgbG9jYXRpb24gd2l0aGluIHBhZ2UgKi8KLX0gSGFzaFNjYW5Qb3NJ dGVtOworCUJ1ZmZlcgkJYnVmOwkJCS8qIGluZGV4IHBhZ2UncyBidWZmZXIgcGluICovCisJQmxv Y2tOdW1iZXIgY3VyclBhZ2U7CQkvKiBpbmRleCBwYWdlJ3MgYmxvY2sgbnVtYmVyICovCisJQmxv Y2tOdW1iZXIgcHJldlBhZ2U7CQkvKiBpbmRleCBwYWdlJ3MgbGVmdCBzaWJsaW5nICovCisJQmxv Y2tOdW1iZXIgbmV4dFBhZ2U7CQkvKiBpbmRleCBwYWdlJ3MgcmlnaHQgc2libGluZyAqLworfSBI YXNoQmF0Y2hEYXRhOwogCi10eXBlZGVmIHN0cnVjdCBIYXNoU2NhblBvc0RhdGEKLXsKLQlCdWZm ZXIJCWJ1ZjsJCQkvKiBpZiB2YWxpZCwgdGhlIGJ1ZmZlciBpcyBwaW5uZWQgKi8KLQlCbG9ja051 bWJlciBjdXJyUGFnZTsJCS8qIGN1cnJlbnQgaGFzaCBpbmRleCBwYWdlICovCi0JQmxvY2tOdW1i ZXIgbmV4dFBhZ2U7CQkvKiBuZXh0IG92ZXJmbG93IHBhZ2UgKi8KLQlCbG9ja051bWJlciBwcmV2 UGFnZTsJCS8qIHByZXYgb3ZlcmZsb3cgb3IgYnVja2V0IHBhZ2UgKi8KLQotCS8qCi0JICogVGhl IGl0ZW1zIGFycmF5IGlzIGFsd2F5cyBvcmRlcmVkIGluIGluZGV4IG9yZGVyIChpZSwgaW5jcmVh c2luZwotCSAqIGluZGV4b2Zmc2V0KS4gIFdoZW4gc2Nhbm5pbmcgYmFja3dhcmRzIGl0IGlzIGNv bnZlbmllbnQgdG8gZmlsbCB0aGUKLQkgKiBhcnJheSBiYWNrLXRvLWZyb250LCBzbyB3ZSBzdGFy dCBhdCB0aGUgbGFzdCBzbG90IGFuZCBmaWxsIGRvd253YXJkcy4KLQkgKiBIZW5jZSB3ZSBuZWVk IGJvdGggYSBmaXJzdC12YWxpZC1lbnRyeSBhbmQgYSBsYXN0LXZhbGlkLWVudHJ5IGNvdW50ZXIu Ci0JICogaXRlbUluZGV4IGlzIGEgY3Vyc29yIHNob3dpbmcgd2hpY2ggZW50cnkgd2FzIGxhc3Qg cmV0dXJuZWQgdG8gY2FsbGVyLgotCSAqLwotCWludAkJCWZpcnN0SXRlbTsJCS8qIGZpcnN0IHZh bGlkIGluZGV4IGluIGl0ZW1zW10gKi8KLQlpbnQJCQlsYXN0SXRlbTsJCS8qIGxhc3QgdmFsaWQg aW5kZXggaW4gaXRlbXNbXSAqLwotCWludAkJCWl0ZW1JbmRleDsJCS8qIGN1cnJlbnQgaW5kZXgg aW4gaXRlbXNbXSAqLwotCi0JSGFzaFNjYW5Qb3NJdGVtIGl0ZW1zW01heEluZGV4VHVwbGVzUGVy UGFnZV07CS8qIE1VU1QgQkUgTEFTVCAqLwotfSBIYXNoU2NhblBvc0RhdGE7Ci0KLSNkZWZpbmUg SGFzaFNjYW5Qb3NJc1Bpbm5lZChzY2FucG9zKSBcCi0oIFwKLQlBc3NlcnRNYWNybyhCbG9ja051 bWJlcklzVmFsaWQoKHNjYW5wb3MpLmN1cnJQYWdlKSB8fCBcCi0JCQkJIUJ1ZmZlcklzVmFsaWQo KHNjYW5wb3MpLmJ1ZikpLCBcCi0JQnVmZmVySXNWYWxpZCgoc2NhbnBvcykuYnVmKSBcCi0pCi0K LSNkZWZpbmUgSGFzaFNjYW5Qb3NJc1ZhbGlkKHNjYW5wb3MpIFwKLSggXAotCUFzc2VydE1hY3Jv KEJsb2NrTnVtYmVySXNWYWxpZCgoc2NhbnBvcykuY3VyclBhZ2UpIHx8IFwKLQkJCQkhQnVmZmVy SXNWYWxpZCgoc2NhbnBvcykuYnVmKSksIFwKLQlCbG9ja051bWJlcklzVmFsaWQoKHNjYW5wb3Mp LmN1cnJQYWdlKSBcCi0pCi0KLSNkZWZpbmUgSGFzaFNjYW5Qb3NJbnZhbGlkYXRlKHNjYW5wb3Mp IFwKLQlkbyB7IFwKLQkJKHNjYW5wb3MpLmJ1ZiA9IEludmFsaWRCdWZmZXI7IFwKLQkJKHNjYW5w b3MpLmN1cnJQYWdlID0gSW52YWxpZEJsb2NrTnVtYmVyOyBcCi0JCShzY2FucG9zKS5uZXh0UGFn ZSA9IEludmFsaWRCbG9ja051bWJlcjsgXAotCQkoc2NhbnBvcykucHJldlBhZ2UgPSBJbnZhbGlk QmxvY2tOdW1iZXI7IFwKLQkJKHNjYW5wb3MpLmZpcnN0SXRlbSA9IDA7IFwKLQkJKHNjYW5wb3Mp Lmxhc3RJdGVtID0gMDsgXAotCQkoc2NhbnBvcykuaXRlbUluZGV4ID0gMDsgXAotCX0gd2hpbGUg KDApCisvKiBBY2Nlc3MgdGhlIGhhc2gtcHJpdmF0ZSBwZXItYmF0Y2ggZGF0YSBmcm9tIGFuIElu ZGV4U2NhbkJhdGNoIHBvaW50ZXIgKi8KKyNkZWZpbmUgSGFzaEJhdGNoR2V0RGF0YShzY2FuLCBi YXRjaCkgXAorCWluZGV4X3NjYW5fYmF0Y2hfaW5kZXhfb3BhcXVlX3N0YXRpYyhzY2FuLCBiYXRj aCwgSGFzaEJhdGNoRGF0YSkKIAogLyoKICAqCUhhc2hTY2FuT3BhcXVlRGF0YSBpcyBwcml2YXRl IHN0YXRlIGZvciBhIGhhc2ggaW5kZXggc2Nhbi4KQEAgLTE3OCwxNSArMTQwLDYgQEAgdHlwZWRl ZiBzdHJ1Y3QgSGFzaFNjYW5PcGFxdWVEYXRhCiAJICogcmVmZXJyZWQgb25seSB3aGVuIGhhc2hz b19idWNfcG9wdWxhdGVkIGlzIHRydWUuCiAJICovCiAJYm9vbAkJaGFzaHNvX2J1Y19zcGxpdDsK LQkvKiBpbmZvIGFib3V0IGtpbGxlZCBpdGVtcyBpZiBhbnkgKGtpbGxlZEl0ZW1zIGlzIE5VTEwg aWYgbmV2ZXIgdXNlZCkgKi8KLQlpbnQJCSAgICpraWxsZWRJdGVtczsJLyogY3VyclBvcy5pdGVt cyBpbmRleGVzIG9mIGtpbGxlZCBpdGVtcyAqLwotCWludAkJCW51bUtpbGxlZDsJCS8qIG51bWJl ciBvZiBjdXJyZW50bHkgc3RvcmVkIGl0ZW1zICovCi0KLQkvKgotCSAqIElkZW50aWZ5IGFsbCB0 aGUgbWF0Y2hpbmcgaXRlbXMgb24gYSBwYWdlIGFuZCBzYXZlIHRoZW0gaW4KLQkgKiBIYXNoU2Nh blBvc0RhdGEKLQkgKi8KLQlIYXNoU2NhblBvc0RhdGEgY3VyclBvczsJLyogY3VycmVudCBwb3Np dGlvbiBkYXRhICovCiB9IEhhc2hTY2FuT3BhcXVlRGF0YTsKIAogdHlwZWRlZiBIYXNoU2Nhbk9w YXF1ZURhdGEgKkhhc2hTY2FuT3BhcXVlOwpAQCAtMzY4LDExICszMjEsMTUgQEAgZXh0ZXJuIGJv b2wgaGFzaGluc2VydChSZWxhdGlvbiByZWwsIERhdHVtICp2YWx1ZXMsIGJvb2wgKmlzbnVsbCwK IAkJCQkJICAgSW5kZXhVbmlxdWVDaGVjayBjaGVja1VuaXF1ZSwKIAkJCQkJICAgYm9vbCBpbmRl eFVuY2hhbmdlZCwKIAkJCQkJICAgc3RydWN0IEluZGV4SW5mbyAqaW5kZXhJbmZvKTsKLWV4dGVy biBib29sIGhhc2hnZXR0dXBsZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGly KTsKK2V4dGVybiBJbmRleFNjYW5CYXRjaCBoYXNoZ2V0YmF0Y2goSW5kZXhTY2FuRGVzYyBzY2Fu LAorCQkJCQkJCQkgICBJbmRleFNjYW5CYXRjaCBwcmlvcmJhdGNoLAorCQkJCQkJCQkgICBTY2Fu RGlyZWN0aW9uIGRpcik7CiBleHRlcm4gaW50NjQgaGFzaGdldGJpdG1hcChJbmRleFNjYW5EZXNj IHNjYW4sIFRJREJpdG1hcCAqdGJtKTsKIGV4dGVybiBJbmRleFNjYW5EZXNjIGhhc2hiZWdpbnNj YW4oUmVsYXRpb24gcmVsLCBpbnQgbmtleXMsIGludCBub3JkZXJieXMpOwogZXh0ZXJuIHZvaWQg aGFzaHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5LZXkgc2NhbmtleSwgaW50IG5zY2Fu a2V5cywKIAkJCQkJICAgU2NhbktleSBvcmRlcmJ5cywgaW50IG5vcmRlcmJ5cyk7CitleHRlcm4g dm9pZCBoYXNodW5ndWFyZGJhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2gg YmF0Y2gpOworZXh0ZXJuIHZvaWQgaGFzaGtpbGxpdGVtc2JhdGNoKEluZGV4U2NhbkRlc2Mgc2Nh biwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpOwogZXh0ZXJuIHZvaWQgaGFzaGVuZHNjYW4oSW5kZXhT Y2FuRGVzYyBzY2FuKTsKIGV4dGVybiBJbmRleEJ1bGtEZWxldGVSZXN1bHQgKmhhc2hidWxrZGVs ZXRlKEluZGV4VmFjdXVtSW5mbyAqaW5mbywKIAkJCQkJCQkJCQkJIEluZGV4QnVsa0RlbGV0ZVJl c3VsdCAqc3RhdHMsCkBAIC00NDUsOCArNDAyLDkgQEAgZXh0ZXJuIHZvaWQgX2hhc2hfZmluaXNo X3NwbGl0KFJlbGF0aW9uIHJlbCwgQnVmZmVyIG1ldGFidWYsIEJ1ZmZlciBvYnVmLAogCQkJCQkJ CSAgIHVpbnQzMiBsb3dtYXNrKTsKIAogLyogaGFzaHNlYXJjaC5jICovCi1leHRlcm4gYm9vbCBf aGFzaF9uZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpOwotZXh0ZXJu IGJvb2wgX2hhc2hfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcik7 CitleHRlcm4gSW5kZXhTY2FuQmF0Y2ggX2hhc2hfbmV4dChJbmRleFNjYW5EZXNjIHNjYW4sIFNj YW5EaXJlY3Rpb24gZGlyLAorCQkJCQkJCQkgSW5kZXhTY2FuQmF0Y2ggcHJpb3JiYXRjaCk7Citl eHRlcm4gSW5kZXhTY2FuQmF0Y2ggX2hhc2hfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2Fu RGlyZWN0aW9uIGRpcik7CiAKIC8qIGhhc2hzb3J0LmMgKi8KIHR5cGVkZWYgc3RydWN0IEhTcG9v bCBIU3Bvb2w7CS8qIG9wYXF1ZSBzdHJ1Y3QgaW4gaGFzaHNvcnQuYyAqLwpAQCAtNDc2LDcgKzQz NCw2IEBAIGV4dGVybiBCbG9ja051bWJlciBfaGFzaF9nZXRfb2xkYmxvY2tfZnJvbV9uZXdidWNr ZXQoUmVsYXRpb24gcmVsLCBCdWNrZXQgbmV3X2J1CiBleHRlcm4gQmxvY2tOdW1iZXIgX2hhc2hf Z2V0X25ld2Jsb2NrX2Zyb21fb2xkYnVja2V0KFJlbGF0aW9uIHJlbCwgQnVja2V0IG9sZF9idWNr ZXQpOwogZXh0ZXJuIEJ1Y2tldCBfaGFzaF9nZXRfbmV3YnVja2V0X2Zyb21fb2xkYnVja2V0KFJl bGF0aW9uIHJlbCwgQnVja2V0IG9sZF9idWNrZXQsCiAJCQkJCQkJCQkJCQkgdWludDMyIGxvd21h c2ssIHVpbnQzMiBtYXhidWNrZXQpOwotZXh0ZXJuIHZvaWQgX2hhc2hfa2lsbF9pdGVtcyhJbmRl eFNjYW5EZXNjIHNjYW4pOwogCiAvKiBoYXNoLmMgKi8KIGV4dGVybiB2b2lkIGhhc2hidWNrZXRj bGVhbnVwKFJlbGF0aW9uIHJlbCwgQnVja2V0IGN1cl9idWNrZXQsCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9hY2Nlc3MvaGFzaC9SRUFETUUgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9SRUFE TUUKaW5kZXggZmM5MDMxMTE3Li45NzJiYjY2NmIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9oYXNoL1JFQURNRQorKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9SRUFETUUKQEAg LTI1NSwyOCArMjU1LDI5IEBAIFRoZSByZWFkZXIgYWxnb3JpdGhtIGlzOgogCQlyZXRha2UgdGhl IGJ1ZmZlciBjb250ZW50IGxvY2sgb24gbmV3IGJ1Y2tldAogCQlhcnJhbmdlIHRvIHNjYW4gdGhl IG9sZCBidWNrZXQgbm9ybWFsbHkgYW5kIHRoZSBuZXcgYnVja2V0IGZvcgogICAgICAgICAgdHVw bGVzIHdoaWNoIGFyZSBub3QgbW92ZWQtYnktc3BsaXQKLS0tIHRoZW4sIHBlciByZWFkIHJlcXVl c3Q6CistLSB0aGVuLCBwZXIgYmF0Y2ggKHBhZ2UpIHJlcXVlc3Q6CiAJcmVhY3F1aXJlIGNvbnRl bnQgbG9jayBvbiBjdXJyZW50IHBhZ2UKIAlzdGVwIHRvIG5leHQgcGFnZSBpZiBuZWNlc3Nhcnkg KG5vIGNoYWluaW5nIG9mIGNvbnRlbnQgbG9ja3MsIGJ1dCBrZWVwCiAJdGhlIHBpbiBvbiB0aGUg cHJpbWFyeSBidWNrZXQgdGhyb3VnaG91dCB0aGUgc2NhbikKLQlzYXZlIGFsbCB0aGUgbWF0Y2hp bmcgdHVwbGVzIGZyb20gY3VycmVudCBpbmRleCBwYWdlIGludG8gYW4gaXRlbXMgYXJyYXkKLQly ZWxlYXNlIHBpbiBhbmQgY29udGVudCBsb2NrIChidXQgaWYgaXQgaXMgcHJpbWFyeSBidWNrZXQg cGFnZSByZXRhaW4KLQlpdHMgcGluIHRpbGwgdGhlIGVuZCBvZiB0aGUgc2NhbikKLQlnZXQgdHVw bGUgZnJvbSBhbiBpdGVtIGFycmF5CisJc2F2ZSBhbGwgdGhlIG1hdGNoaW5nIHR1cGxlcyBmcm9t IGN1cnJlbnQgaW5kZXggcGFnZSBpbnRvIGEgYmF0Y2gKKwlyZWxlYXNlIGNvbnRlbnQgbG9jayBv biBjdXJyZW50IHBhZ2UgcmV0dXJuIGJhdGNoIHRvIHRhYmxlIEFNICh0YWJsZSBBTQorCXdpbGwg ZHJvcCBiYXRjaCdzIGJ1ZmZlciBwaW4sIHRob3VnaCBwcmltYXJ5IGJ1Y2tldCBwYWdlIHBpbiBp cyBrZXB0CisJdW50aWwgdGhlIGVuZCBvZiB0aGUgc2NhbikKIC0tIGF0IHNjYW4gc2h1dGRvd246 Ci0JcmVsZWFzZSBhbGwgcGlucyBzdGlsbCBoZWxkCisJcmVsZWFzZSBzY2FuLW93bmVkIHBpbnMg KGUuZy4sIHByaW1hcnkgYnVja2V0IHBhZ2UgcGluKSBhcyBuZWVkZWQKIAogSG9sZGluZyB0aGUg YnVmZmVyIHBpbiBvbiB0aGUgcHJpbWFyeSBidWNrZXQgcGFnZSBmb3IgdGhlIHdob2xlIHNjYW4g cHJldmVudHMKLXRoZSByZWFkZXIncyBjdXJyZW50LXR1cGxlIHBvaW50ZXIgZnJvbSBiZWluZyBp bnZhbGlkYXRlZCBieSBzcGxpdHMgb3IKLWNvbXBhY3Rpb25zLiAgKE9mIGNvdXJzZSwgb3RoZXIg YnVja2V0cyBjYW4gc3RpbGwgYmUgc3BsaXQgb3IgY29tcGFjdGVkLikKK3RoZSBidWNrZXQgZnJv bSBiZWluZyByZW9yZ2FuaXplZCBieSBzcGxpdHMgb3IgY29tcGFjdGlvbnMgd2hpbGUgdGhlIHNj YW4gaXMKK2luIHByb2dyZXNzLiAgKE9mIGNvdXJzZSwgb3RoZXIgYnVja2V0cyBjYW4gc3RpbGwg YmUgc3BsaXQgb3IgY29tcGFjdGVkLikKIAotVG8gbWluaW1pemUgbG9jay91bmxvY2sgdHJhZmZp YywgaGFzaCBpbmRleCBzY2FuIGFsd2F5cyBzZWFyY2hlcyB0aGUgZW50aXJlCi1oYXNoIHBhZ2Ug dG8gaWRlbnRpZnkgYWxsIHRoZSBtYXRjaGluZyBpdGVtcyBhdCBvbmNlLCBjb3B5aW5nIHRoZWly IGhlYXAgdHVwbGUKLUlEcyBpbnRvIGJhY2tlbmQtbG9jYWwgc3RvcmFnZS4gVGhlIGhlYXAgdHVw bGUgSURzIGFyZSB0aGVuIHByb2Nlc3NlZCB3aGlsZSBub3QKLWhvbGRpbmcgYW55IHBhZ2UgbG9j ayB3aXRoaW4gdGhlIGluZGV4IHRoZXJlYnksIGFsbG93aW5nIGNvbmN1cnJlbnQgaW5zZXJ0aW9u Ci10byBoYXBwZW4gb24gdGhlIHNhbWUgaW5kZXggcGFnZSB3aXRob3V0IGFueSByZXF1aXJlbWVu dCBvZiByZS1maW5kaW5nIHRoZQotY3VycmVudCBzY2FuIHBvc2l0aW9uIGZvciB0aGUgcmVhZGVy LiBXZSBkbyBjb250aW51ZSB0byBob2xkIGEgcGluIG9uIHRoZQotYnVja2V0IHBhZ2UsIHRvIHBy b3RlY3QgYWdhaW5zdCBjb25jdXJyZW50IGRlbGV0aW9ucyBhbmQgYnVja2V0IHNwbGl0LgorVG8g bWluaW1pemUgbG9jay91bmxvY2sgdHJhZmZpYywgaGFzaCBpbmRleCBzY2FucyBhbHdheXMgc2Vh cmNoIHRoZSBlbnRpcmUKK2hhc2ggcGFnZSB0byBpZGVudGlmeSBhbGwgdGhlIG1hdGNoaW5nIGl0 ZW1zIGF0IG9uY2UsIHJldHVybmluZyB0aGVtIGluCitiYXRjaGVzIHRvIHRoZSB0YWJsZSBBTS4g IFRoZSB0YWJsZSBBTSBwcm9jZXNzZXMgYmF0Y2hlcyB3aGlsZSBubyBwYWdlIGxvY2sKK2lzIGhl bGQgd2l0aGluIHRoZSBpbmRleCwgYWxsb3dpbmcgY29uY3VycmVudCBpbnNlcnRpb24gdG8gaGFw cGVuIG9uIHRoZQorc2FtZSBpbmRleCBwYWdlIHdpdGhvdXQgYW55IHJlcXVpcmVtZW50IG9mIHJl LWZpbmRpbmcgdGhlIGN1cnJlbnQgc2NhbgorcG9zaXRpb24gZm9yIHRoZSByZWFkZXIuICBUaGUg dGFibGUgQU0gY29udHJvbHMgd2hlbiBiYXRjaCBidWZmZXIgcGlucyBhcmUKK2Ryb3BwZWQuICBX ZSBkbyBjb250aW51ZSB0byBob2xkIGEgcGluIG9uIHRoZSBwcmltYXJ5IGJ1Y2tldCBwYWdlLCB0 bworcHJvdGVjdCBhZ2FpbnN0IGNvbmN1cnJlbnQgYnVja2V0IHNwbGl0cy4KIAogVG8gYWxsb3cg Zm9yIHNjYW5zIGR1cmluZyBhIGJ1Y2tldCBzcGxpdCwgaWYgYXQgdGhlIHN0YXJ0IG9mIHRoZSBz Y2FuLCB0aGUKIGJ1Y2tldCBpcyBtYXJrZWQgYXMgYnVja2V0LWJlaW5nLXBvcHVsYXRlZCwgaXQg c2NhbiBhbGwgdGhlIHR1cGxlcyBpbiB0aGF0CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nl c3MvaGFzaC9oYXNoLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMKaW5kZXggNTQw ZjJiY2Q0Li43NmUzMTkzZDkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hh c2guYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMKQEAgLTExNCwxMCArMTE0 LDEwIEBAIGhhc2hoYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCS5hbWFkanVzdG1lbWJlcnMg PSBoYXNoYWRqdXN0bWVtYmVycywKIAkJLmFtYmVnaW5zY2FuID0gaGFzaGJlZ2luc2NhbiwKIAkJ LmFtcmVzY2FuID0gaGFzaHJlc2NhbiwKLQkJLmFtZ2V0dHVwbGUgPSBoYXNoZ2V0dHVwbGUsCi0J CS5hbWdldGJhdGNoID0gTlVMTCwKLQkJLmFtdW5ndWFyZGJhdGNoID0gTlVMTCwKLQkJLmFta2ls bGl0ZW1zYmF0Y2ggPSBOVUxMLAorCQkuYW1nZXR0dXBsZSA9IE5VTEwsCisJCS5hbWdldGJhdGNo ID0gaGFzaGdldGJhdGNoLAorCQkuYW11bmd1YXJkYmF0Y2ggPSBoYXNodW5ndWFyZGJhdGNoLAor CQkuYW1raWxsaXRlbXNiYXRjaCA9IGhhc2hraWxsaXRlbXNiYXRjaCwKIAkJLmFtZ2V0Yml0bWFw ID0gaGFzaGdldGJpdG1hcCwKIAkJLmFtZW5kc2NhbiA9IGhhc2hlbmRzY2FuLAogCQkuYW1wb3Ny ZXNldCA9IE5VTEwsCkBAIC0zMDAsNTMgKzMwMCwyOCBAQCBoYXNoaW5zZXJ0KFJlbGF0aW9uIHJl bCwgRGF0dW0gKnZhbHVlcywgYm9vbCAqaXNudWxsLAogCiAKIC8qCi0gKgloYXNoZ2V0dHVwbGUo KSAtLSBHZXQgdGhlIG5leHQgdHVwbGUgaW4gdGhlIHNjYW4uCisgKgloYXNoZ2V0YmF0Y2goKSAt LSBHZXQgdGhlIGZpcnN0IG9yIG5leHQgYmF0Y2ggb2YgdHVwbGVzIGluIHRoZSBzY2FuCiAgKi8K LWJvb2wKLWhhc2hnZXR0dXBsZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGly KQorSW5kZXhTY2FuQmF0Y2gKK2hhc2hnZXRiYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4 U2NhbkJhdGNoIHByaW9yYmF0Y2gsIFNjYW5EaXJlY3Rpb24gZGlyKQogewogCUhhc2hTY2FuT3Bh cXVlIHNvID0gKEhhc2hTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7Ci0JYm9vbAkJcmVzOwogCiAJ LyogSGFzaCBpbmRleGVzIGFyZSBhbHdheXMgbG9zc3kgc2luY2Ugd2Ugc3RvcmUgb25seSB0aGUg aGFzaCBjb2RlICovCi0Jc2Nhbi0+eHNfcmVjaGVjayA9IHRydWU7CisJQXNzZXJ0KHNjYW4tPnhz X3JlY2hlY2spOwogCi0JLyoKLQkgKiBJZiB3ZSd2ZSBhbHJlYWR5IGluaXRpYWxpemVkIHRoaXMg c2Nhbiwgd2UgY2FuIGp1c3QgYWR2YW5jZSBpdCBpbiB0aGUKLQkgKiBhcHByb3ByaWF0ZSBkaXJl Y3Rpb24uICBJZiB3ZSBoYXZlbid0IGRvbmUgc28geWV0LCB3ZSBjYWxsIGEgcm91dGluZSB0bwot CSAqIGdldCB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgc2Nhbi4KLQkgKi8KLQlpZiAoIUhhc2hTY2Fu UG9zSXNWYWxpZChzby0+Y3VyclBvcykpCi0JCXJlcyA9IF9oYXNoX2ZpcnN0KHNjYW4sIGRpcik7 Ci0JZWxzZQorCWlmIChwcmlvcmJhdGNoID09IE5VTEwpCiAJewotCQkvKgotCQkgKiBDaGVjayB0 byBzZWUgaWYgd2Ugc2hvdWxkIGtpbGwgdGhlIHByZXZpb3VzbHktZmV0Y2hlZCB0dXBsZS4KLQkJ ICovCi0JCWlmIChzY2FuLT5raWxsX3ByaW9yX3R1cGxlKQotCQl7Ci0JCQkvKgotCQkJICogWWVz LCBzbyByZW1lbWJlciBpdCBmb3IgbGF0ZXIuIChXZSdsbCBkZWFsIHdpdGggYWxsIHN1Y2ggdHVw bGVzCi0JCQkgKiBhdCBvbmNlIHJpZ2h0IGFmdGVyIGxlYXZpbmcgdGhlIGluZGV4IHBhZ2Ugb3Ig YXQgZW5kIG9mIHNjYW4uKQotCQkJICogSW4gY2FzZSBpZiBjYWxsZXIgcmV2ZXJzZXMgdGhlIGlu ZGV4c2NhbiBkaXJlY3Rpb24gaXQgaXMgcXVpdGUKLQkJCSAqIHBvc3NpYmxlIHRoYXQgdGhlIHNh bWUgaXRlbSBtaWdodCBnZXQgZW50ZXJlZCBtdWx0aXBsZSB0aW1lcy4KLQkJCSAqIEJ1dCwgd2Ug ZG9uJ3QgZGV0ZWN0IHRoYXQ7IGluc3RlYWQsIHdlIGp1c3QgZm9yZ2V0IGFueSBleGNlc3MKLQkJ CSAqIGVudHJpZXMuCi0JCQkgKi8KLQkJCWlmIChzby0+a2lsbGVkSXRlbXMgPT0gTlVMTCkKLQkJ CQlzby0+a2lsbGVkSXRlbXMgPSBwYWxsb2NfYXJyYXkoaW50LCBNYXhJbmRleFR1cGxlc1BlclBh Z2UpOworCQlSZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOwogCi0JCQlpZiAoc28t Pm51bUtpbGxlZCA8IE1heEluZGV4VHVwbGVzUGVyUGFnZSkKLQkJCQlzby0+a2lsbGVkSXRlbXNb c28tPm51bUtpbGxlZCsrXSA9IHNvLT5jdXJyUG9zLml0ZW1JbmRleDsKLQkJfQorCQlfaGFzaF9k cm9wc2NhbmJ1ZihyZWwsIHNvKTsKIAotCQkvKgotCQkgKiBOb3cgY29udGludWUgdGhlIHNjYW4u Ci0JCSAqLwotCQlyZXMgPSBfaGFzaF9uZXh0KHNjYW4sIGRpcik7CisJCS8qIEluaXRpYWxpemUg dGhlIHNjYW4sIGFuZCByZXR1cm4gZmlyc3QgYmF0Y2ggb2YgbWF0Y2hpbmcgaXRlbXMgKi8KKwkJ cmV0dXJuIF9oYXNoX2ZpcnN0KHNjYW4sIGRpcik7CiAJfQogCi0JcmV0dXJuIHJlczsKKwkvKiBS ZXR1cm4gYmF0Y2ggcG9zaXRpb25lZCBhZnRlciBjYWxsZXIncyBiYXRjaCAoaW4gZGlyZWN0aW9u ICdkaXInKSAqLworCXJldHVybiBfaGFzaF9uZXh0KHNjYW4sIGRpciwgcHJpb3JiYXRjaCk7CiB9 CiAKIApAQCAtMzU2LDI2ICszMzEsMjYgQEAgaGFzaGdldHR1cGxlKEluZGV4U2NhbkRlc2Mgc2Nh biwgU2NhbkRpcmVjdGlvbiBkaXIpCiBpbnQ2NAogaGFzaGdldGJpdG1hcChJbmRleFNjYW5EZXNj IHNjYW4sIFRJREJpdG1hcCAqdGJtKQogewotCUhhc2hTY2FuT3BhcXVlIHNvID0gKEhhc2hTY2Fu T3BhcXVlKSBzY2FuLT5vcGFxdWU7Ci0JYm9vbAkJcmVzOworCUluZGV4U2NhbkJhdGNoIGJhdGNo OwogCWludDY0CQludGlkcyA9IDA7Ci0JSGFzaFNjYW5Qb3NJdGVtICpjdXJySXRlbTsKIAotCXJl cyA9IF9oYXNoX2ZpcnN0KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uKTsKKwliYXRjaCA9IF9o YXNoX2ZpcnN0KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uKTsKIAotCXdoaWxlIChyZXMpCisJ d2hpbGUgKGJhdGNoICE9IE5VTEwpCiAJewotCQljdXJySXRlbSA9ICZzby0+Y3VyclBvcy5pdGVt c1tzby0+Y3VyclBvcy5pdGVtSW5kZXhdOworCQlmb3IgKGludCBpdGVtSW5kZXggPSBiYXRjaC0+ Zmlyc3RJdGVtOworCQkJIGl0ZW1JbmRleCA8PSBiYXRjaC0+bGFzdEl0ZW07CisJCQkgaXRlbUlu ZGV4KyspCisJCXsKKwkJCXRibV9hZGRfdHVwbGVzKHRibSwgJmJhdGNoLT5pdGVtc1tpdGVtSW5k ZXhdLnRhYmxlVGlkLCAxLCB0cnVlKTsKKwkJCW50aWRzKys7CisJCX0KIAogCQkvKgotCQkgKiBf aGFzaF9maXJzdCBhbmQgX2hhc2hfbmV4dCBoYW5kbGUgZWxpbWluYXRlIGRlYWQgaW5kZXggZW50 cmllcwotCQkgKiB3aGVuZXZlciBzY2FuLT5pZ25vcmVfa2lsbGVkX3R1cGxlcyBpcyB0cnVlLiAg VGhlcmVmb3JlLCB0aGVyZSdzCi0JCSAqIG5vdGhpbmcgdG8gZG8gaGVyZSBleGNlcHQgYWRkIHRo ZSByZXN1bHRzIHRvIHRoZSBUSURCaXRtYXAuCisJCSAqIF9oYXNoX25leHQgcmVsZWFzZXMgdGhl IHByaW9yIGJhdGNoIGZvciBiaXRtYXAgY2FsbGVycyBiZWZvcmUKKwkJICogYWxsb2NhdGluZyB0 aGUgbmV4dCBvbmUsIHNvIG9ubHkgb25lIGJhdGNoIGlzIGV2ZXIgdXNlZCBhdCBhIHRpbWUKIAkJ ICovCi0JCXRibV9hZGRfdHVwbGVzKHRibSwgJihjdXJySXRlbS0+aGVhcFRpZCksIDEsIHRydWUp OwotCQludGlkcysrOwotCi0JCXJlcyA9IF9oYXNoX25leHQoc2NhbiwgRm9yd2FyZFNjYW5EaXJl Y3Rpb24pOworCQliYXRjaCA9IF9oYXNoX25leHQoc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24s IGJhdGNoKTsKIAl9CiAKIAlyZXR1cm4gbnRpZHM7CkBAIC0zOTcsMTcgKzM3MiwxNyBAQCBoYXNo YmVnaW5zY2FuKFJlbGF0aW9uIHJlbCwgaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzKQogCXNjYW4g PSBSZWxhdGlvbkdldEluZGV4U2NhbihyZWwsIG5rZXlzLCBub3JkZXJieXMpOwogCiAJc28gPSAo SGFzaFNjYW5PcGFxdWUpIHBhbGxvY19vYmplY3QoSGFzaFNjYW5PcGFxdWVEYXRhKTsKLQlIYXNo U2NhblBvc0ludmFsaWRhdGUoc28tPmN1cnJQb3MpOwogCXNvLT5oYXNoc29fYnVja2V0X2J1ZiA9 IEludmFsaWRCdWZmZXI7CiAJc28tPmhhc2hzb19zcGxpdF9idWNrZXRfYnVmID0gSW52YWxpZEJ1 ZmZlcjsKIAogCXNvLT5oYXNoc29fYnVjX3BvcHVsYXRlZCA9IGZhbHNlOwogCXNvLT5oYXNoc29f YnVjX3NwbGl0ID0gZmFsc2U7CiAKLQlzby0+a2lsbGVkSXRlbXMgPSBOVUxMOwotCXNvLT5udW1L aWxsZWQgPSAwOwotCiAJc2Nhbi0+b3BhcXVlID0gc287CisJc2Nhbi0+eHNfcmVjaGVjayA9IHRy dWU7CisJc2Nhbi0+bWF4aXRlbXNiYXRjaCA9IE1heEluZGV4VHVwbGVzUGVyUGFnZTsKKwlzY2Fu LT5iYXRjaF9pbmRleF9vcGFxdWVfc3RhdGljID0gTUFYQUxJR04oc2l6ZW9mKEhhc2hCYXRjaERh dGEpKTsKKwlzY2FuLT5iYXRjaF90dXBsZXNfd29ya3NwYWNlID0gMDsKIAogCXJldHVybiBzY2Fu OwogfQpAQCAtNDIyLDE4ICszOTcsOCBAQCBoYXNocmVzY2FuKEluZGV4U2NhbkRlc2Mgc2Nhbiwg U2NhbktleSBzY2Fua2V5LCBpbnQgbnNjYW5rZXlzLAogCUhhc2hTY2FuT3BhcXVlIHNvID0gKEhh c2hTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CiAJUmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhS ZWxhdGlvbjsKIAotCWlmIChIYXNoU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKQotCXsKLQkJ LyogQmVmb3JlIGxlYXZpbmcgY3VycmVudCBwYWdlLCBkZWFsIHdpdGggYW55IGtpbGxlZCBpdGVt cyAqLwotCQlpZiAoc28tPm51bUtpbGxlZCA+IDApCi0JCQlfaGFzaF9raWxsX2l0ZW1zKHNjYW4p OwotCX0KLQogCV9oYXNoX2Ryb3BzY2FuYnVmKHJlbCwgc28pOwogCi0JLyogc2V0IHBvc2l0aW9u IGludmFsaWQgKHRoaXMgd2lsbCBjYXVzZSBfaGFzaF9maXJzdCBjYWxsKSAqLwotCUhhc2hTY2Fu UG9zSW52YWxpZGF0ZShzby0+Y3VyclBvcyk7Ci0KIAkvKiBVcGRhdGUgc2NhbiBrZXksIGlmIGEg bmV3IG9uZSBpcyBnaXZlbiAqLwogCWlmIChzY2Fua2V5ICYmIHNjYW4tPm51bWJlck9mS2V5cyA+ IDApCiAJCW1lbWNweShzY2FuLT5rZXlEYXRhLCBzY2Fua2V5LCBzY2FuLT5udW1iZXJPZktleXMg KiBzaXplb2YoU2NhbktleURhdGEpKTsKQEAgLTQ0Miw2ICs0MDcsMTA4IEBAIGhhc2hyZXNjYW4o SW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuS2V5IHNjYW5rZXksIGludCBuc2NhbmtleXMsCiAJc28t Pmhhc2hzb19idWNfc3BsaXQgPSBmYWxzZTsKIH0KIAorLyoKKyAqCWhhc2h1bmd1YXJkYmF0Y2go KSAtLSBEcm9wIGJhdGNoJ3MgVElEIHJlY3ljbGluZyBpbnRlcmxvY2sgKGJ1ZmZlciBwaW4pCisg KgorICogQ2FsbGVkIGJ5IHRoZSB0YWJsZSBBTSB3aGVuIGl0J3Mgc2FmZSB0byBkcm9wIHRoZSBi dWZmZXIgcGluIGhlbGQgdG8KKyAqIHByZXZlbnQgY29uY3VycmVudCBUSUQgcmVjeWNsaW5nIGJ5 IFZBQ1VVTS4KKyAqLwordm9pZAoraGFzaHVuZ3VhcmRiYXRjaChJbmRleFNjYW5EZXNjIHNjYW4s IEluZGV4U2NhbkJhdGNoIGJhdGNoKQoreworCUhhc2hCYXRjaERhdGEgKmhhc2hiYXRjaCA9IEhh c2hCYXRjaEdldERhdGEoc2NhbiwgYmF0Y2gpOworCisJLyogU2hvdWxkIGJlIGNhbGxlZCBleGFj dGx5IG9uY2UgaWZmICFiYXRjaEltbWVkaWF0ZVVuZ3VhcmQgKi8KKwlBc3NlcnQoIXNjYW4tPmJh dGNoSW1tZWRpYXRlVW5ndWFyZCk7CisJQXNzZXJ0KGJhdGNoLT5pc0d1YXJkZWQpOworCisJUmVs ZWFzZUJ1ZmZlcihoYXNoYmF0Y2gtPmJ1Zik7Cit9CisKKy8qCisgKgloYXNoa2lsbGl0ZW1zYmF0 Y2goKSAtLSBNYXJrIGRlYWQgaXRlbXMnIGluZGV4IHR1cGxlcyBMUF9ERUFECisgKi8KK3ZvaWQK K2hhc2hraWxsaXRlbXNiYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJh dGNoKQoreworCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247CisJSGFzaEJhdGNo RGF0YSAqaGFzaGJhdGNoID0gSGFzaEJhdGNoR2V0RGF0YShzY2FuLCBiYXRjaCk7CisJQnVmZmVy CQlidWY7CisJUGFnZQkJcGFnZTsKKwlIYXNoUGFnZU9wYXF1ZSBvcGFxdWU7CisJYm9vbAkJa2ls bGVkc29tZXRoaW5nID0gZmFsc2U7CisJWExvZ1JlY1B0cglsYXRlc3Rsc247CisKKwlBc3NlcnQo YmF0Y2gtPm51bURlYWQgPiAwKTsKKworCWJ1ZiA9IF9oYXNoX2dldGJ1ZihyZWwsIGhhc2hiYXRj aC0+Y3VyclBhZ2UsIEhBU0hfUkVBRCwKKwkJCQkJICAgTEhfQlVDS0VUX1BBR0UgfCBMSF9PVkVS RkxPV19QQUdFKTsKKworCWxhdGVzdGxzbiA9IEJ1ZmZlckdldExTTkF0b21pYyhidWYpOworCUFz c2VydChiYXRjaC0+bHNuIDw9IGxhdGVzdGxzbik7CisJaWYgKGJhdGNoLT5sc24gIT0gbGF0ZXN0 bHNuKQorCXsKKwkJLyogTW9kaWZpZWQsIGdpdmUgdXAgb24gaGludGluZyAqLworCQlfaGFzaF9y ZWxidWYocmVsLCBidWYpOworCQlyZXR1cm47CisJfQorCisJcGFnZSA9IEJ1ZmZlckdldFBhZ2Uo YnVmKTsKKwlvcGFxdWUgPSBIYXNoUGFnZUdldE9wYXF1ZShwYWdlKTsKKworCS8qIEl0ZXJhdGUg dGhyb3VnaCBiYXRjaC0+ZGVhZEl0ZW1zW10gaW4gaW5kZXggcGFnZSBvcmRlciAqLworCWZvciAo aW50IGkgPSAwOyBpIDwgYmF0Y2gtPm51bURlYWQ7IGkrKykKKwl7CisJCWludAkJCWl0ZW1JbmRl eCA9IGJhdGNoLT5kZWFkSXRlbXNbaV07CisJCUJhdGNoTWF0Y2hpbmdJdGVtICpjdXJySXRlbSA9 ICZiYXRjaC0+aXRlbXNbaXRlbUluZGV4XTsKKwkJT2Zmc2V0TnVtYmVyIG9mZm51bSA9IGN1cnJJ dGVtLT5pbmRleE9mZnNldDsKKwkJSXRlbUlkCQlpaWQgPSBQYWdlR2V0SXRlbUlkKHBhZ2UsIG9m Zm51bSk7CisKKwkJQXNzZXJ0KGl0ZW1JbmRleCA+PSBiYXRjaC0+Zmlyc3RJdGVtICYmCisJCQkg ICBpdGVtSW5kZXggPD0gYmF0Y2gtPmxhc3RJdGVtKTsKKwkJQXNzZXJ0KGkgPT0gMCB8fAorCQkJ ICAgb2ZmbnVtID4gYmF0Y2gtPml0ZW1zW2JhdGNoLT5kZWFkSXRlbXNbaSAtIDFdXS5pbmRleE9m ZnNldCk7CisJCUFzc2VydChvZmZudW0gPD0gUGFnZUdldE1heE9mZnNldE51bWJlcihwYWdlKSk7 CisJCUFzc2VydChJdGVtUG9pbnRlckVxdWFscygmKChJbmRleFR1cGxlKSBQYWdlR2V0SXRlbShw YWdlLCBpaWQpKS0+dF90aWQsCisJCQkJCQkJCSAmY3Vyckl0ZW0tPnRhYmxlVGlkKSk7CisKKwkJ LyogTWFyayBpbmRleCBpdGVtIGFzIGRlYWQsIGlmIGl0IGlzbid0IGFscmVhZHkgKi8KKwkJaWYg KCFJdGVtSWRJc0RlYWQoaWlkKSkKKwkJeworCQkJaWYgKCFraWxsZWRzb21ldGhpbmcpCisJCQl7 CisJCQkJLyoKKwkJCQkgKiBVc2UgdGhlIGhpbnQgYml0IGluZnJhc3RydWN0dXJlIHRvIGNoZWNr IGlmIHdlIGNhbiB1cGRhdGUKKwkJCQkgKiB0aGUgcGFnZSB3aGlsZSBqdXN0IGhvbGRpbmcgYSBz aGFyZSBsb2NrLiBJZiB3ZSBhcmUgbm90CisJCQkJICogYWxsb3dlZCwgdGhlcmUncyBubyBwb2lu dCBjb250aW51aW5nLgorCQkJCSAqLworCQkJCWlmICghQnVmZmVyQmVnaW5TZXRIaW50Qml0cyhi dWYpKQorCQkJCXsKKwkJCQkJX2hhc2hfcmVsYnVmKHJlbCwgYnVmKTsKKwkJCQkJcmV0dXJuOwor CQkJCX0KKwkJCX0KKworCQkJLyogZm91bmQgdGhlIGl0ZW0gKi8KKwkJCUl0ZW1JZE1hcmtEZWFk KGlpZCk7CisJCQlraWxsZWRzb21ldGhpbmcgPSB0cnVlOworCQl9CisJfQorCisJLyoKKwkgKiBT aW5jZSB0aGlzIGNhbiBiZSByZWRvbmUgbGF0ZXIgaWYgbmVlZGVkLCBtYXJrIGFzIGRpcnR5IGhp bnQuIFdoZW5ldmVyCisJICogd2UgbWFyayBhbnl0aGluZyBMUF9ERUFELCB3ZSBhbHNvIHNldCB0 aGUgcGFnZSdzCisJICogTEhfUEFHRV9IQVNfREVBRF9UVVBMRVMgZmxhZywgd2hpY2ggaXMgbGlr ZXdpc2UganVzdCBhIGhpbnQuCisJICovCisJaWYgKGtpbGxlZHNvbWV0aGluZykKKwl7CisJCW9w YXF1ZS0+aGFzaG9fZmxhZyB8PSBMSF9QQUdFX0hBU19ERUFEX1RVUExFUzsKKwkJQnVmZmVyRmlu aXNoU2V0SGludEJpdHMoYnVmLCB0cnVlLCB0cnVlKTsKKwl9CisKKwlfaGFzaF9yZWxidWYocmVs LCBidWYpOworfQorCiAvKgogICoJaGFzaGVuZHNjYW4oKSAtLSBjbG9zZSBkb3duIGEgc2Nhbgog ICovCkBAIC00NTEsMTcgKzUxOCw4IEBAIGhhc2hlbmRzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbikK IAlIYXNoU2Nhbk9wYXF1ZSBzbyA9IChIYXNoU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwogCVJl bGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247CiAKLQlpZiAoSGFzaFNjYW5Qb3NJc1Zh bGlkKHNvLT5jdXJyUG9zKSkKLQl7Ci0JCS8qIEJlZm9yZSBsZWF2aW5nIGN1cnJlbnQgcGFnZSwg ZGVhbCB3aXRoIGFueSBraWxsZWQgaXRlbXMgKi8KLQkJaWYgKHNvLT5udW1LaWxsZWQgPiAwKQot CQkJX2hhc2hfa2lsbF9pdGVtcyhzY2FuKTsKLQl9Ci0KIAlfaGFzaF9kcm9wc2NhbmJ1ZihyZWws IHNvKTsKIAotCWlmIChzby0+a2lsbGVkSXRlbXMgIT0gTlVMTCkKLQkJcGZyZWUoc28tPmtpbGxl ZEl0ZW1zKTsKIAlwZnJlZShzbyk7CiAJc2Nhbi0+b3BhcXVlID0gTlVMTDsKIH0KZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hfeGxvZy5jIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL2hhc2gvaGFzaF94bG9nLmMKaW5kZXggMjA2MDYyMGM3Li5lMjZlZThiYjkgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hfeGxvZy5jCisrKyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy9oYXNoL2hhc2hfeGxvZy5jCkBAIC0xMTQxLDE0ICsxMTQxLDE0IEBAIGhhc2hfbWFz ayhjaGFyICpwYWdlZGF0YSwgQmxvY2tOdW1iZXIgYmxrbm8pCiAJCS8qCiAJCSAqIEluIGhhc2gg YnVja2V0IGFuZCBvdmVyZmxvdyBwYWdlcywgaXQgaXMgcG9zc2libGUgdG8gbW9kaWZ5IHRoZQog CQkgKiBMUF9GTEFHUyB3aXRob3V0IGVtaXR0aW5nIGFueSBXQUwgcmVjb3JkLiBIZW5jZSwgbWFz ayB0aGUgbGluZQotCQkgKiBwb2ludGVyIGZsYWdzLiBTZWUgaGFzaGdldHR1cGxlKCksIF9oYXNo X2tpbGxfaXRlbXMoKSBmb3IgZGV0YWlscy4KKwkJICogcG9pbnRlciBmbGFncy4gU2VlIGhhc2hr aWxsaXRlbXNiYXRjaCgpIGZvciBkZXRhaWxzLgogCQkgKi8KIAkJbWFza19scF9mbGFncyhwYWdl KTsKIAl9CiAKIAkvKgogCSAqIEl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlIGhpbnQgYml0IExIX1BB R0VfSEFTX0RFQURfVFVQTEVTIG1heSByZW1haW4KLQkgKiB1bmxvZ2dlZC4gU28sIG1hc2sgaXQu IFNlZSBfaGFzaF9raWxsX2l0ZW1zKCkgZm9yIGRldGFpbHMuCisJICogdW5sb2dnZWQuIFNvLCBt YXNrIGl0LiBTZWUgaGFzaGtpbGxpdGVtc2JhdGNoKCkgZm9yIGRldGFpbHMuCiAJICovCiAJb3Bh cXVlLT5oYXNob19mbGFnICY9IH5MSF9QQUdFX0hBU19ERUFEX1RVUExFUzsKIH0KZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hwYWdlLmMgYi9zcmMvYmFja2VuZC9hY2Nl c3MvaGFzaC9oYXNocGFnZS5jCmluZGV4IDgwOTliMGQwMi4uMTFlM2RiNDcyIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNocGFnZS5jCisrKyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9oYXNoL2hhc2hwYWdlLmMKQEAgLTI4MCwzMSArMjgwLDI0IEBAIF9oYXNoX2Ryb3BidWYo UmVsYXRpb24gcmVsLCBCdWZmZXIgYnVmKQogfQogCiAvKgotICoJX2hhc2hfZHJvcHNjYW5idWYo KSAtLSByZWxlYXNlIGJ1ZmZlcnMgdXNlZCBpbiBzY2FuLgorICoJX2hhc2hfZHJvcHNjYW5idWYo KSAtLSByZWxlYXNlIGJ1ZmZlcnMgb3duZWQgYnkgc2Nhbi4KICAqCi0gKiBUaGlzIHJvdXRpbmUg dW5waW5zIHRoZSBidWZmZXJzIHVzZWQgZHVyaW5nIHNjYW4gb24gd2hpY2ggd2UKLSAqIGhvbGQg bm8gbG9jay4KKyAqIFRoaXMgcm91dGluZSB1bnBpbnMgdGhlIGJ1ZmZlcnMgZm9yIHRoZSBwcmlt YXJ5IGJ1Y2tldCBwYWdlIGFuZCBmb3IgdGhlCisgKiBidWNrZXQgcGFnZSBvZiBhIGJ1Y2tldCBi ZWluZyBzcGxpdCBhcyBuZWVkZWQuCiAgKi8KIHZvaWQKIF9oYXNoX2Ryb3BzY2FuYnVmKFJlbGF0 aW9uIHJlbCwgSGFzaFNjYW5PcGFxdWUgc28pCiB7Ci0JLyogcmVsZWFzZSBwaW4gd2UgaG9sZCBv biBwcmltYXJ5IGJ1Y2tldCBwYWdlICovCi0JaWYgKEJ1ZmZlcklzVmFsaWQoc28tPmhhc2hzb19i dWNrZXRfYnVmKSAmJgotCQlzby0+aGFzaHNvX2J1Y2tldF9idWYgIT0gc28tPmN1cnJQb3MuYnVm KQorCS8qIHJlbGVhc2UgcGluIGhlbGQgb24gcHJpbWFyeSBidWNrZXQgcGFnZSAqLworCWlmIChC dWZmZXJJc1ZhbGlkKHNvLT5oYXNoc29fYnVja2V0X2J1ZikpCiAJCV9oYXNoX2Ryb3BidWYocmVs LCBzby0+aGFzaHNvX2J1Y2tldF9idWYpOwogCXNvLT5oYXNoc29fYnVja2V0X2J1ZiA9IEludmFs aWRCdWZmZXI7CiAKLQkvKiByZWxlYXNlIHBpbiB3ZSBob2xkIG9uIHByaW1hcnkgYnVja2V0IHBh Z2UgIG9mIGJ1Y2tldCBiZWluZyBzcGxpdCAqLwotCWlmIChCdWZmZXJJc1ZhbGlkKHNvLT5oYXNo c29fc3BsaXRfYnVja2V0X2J1ZikgJiYKLQkJc28tPmhhc2hzb19zcGxpdF9idWNrZXRfYnVmICE9 IHNvLT5jdXJyUG9zLmJ1ZikKKwkvKiByZWxlYXNlIHBpbiBoZWxkIG9uIHByaW1hcnkgYnVja2V0 IHBhZ2Ugb2YgYnVja2V0IGJlaW5nIHNwbGl0ICovCisJaWYgKEJ1ZmZlcklzVmFsaWQoc28tPmhh c2hzb19zcGxpdF9idWNrZXRfYnVmKSkKIAkJX2hhc2hfZHJvcGJ1ZihyZWwsIHNvLT5oYXNoc29f c3BsaXRfYnVja2V0X2J1Zik7CiAJc28tPmhhc2hzb19zcGxpdF9idWNrZXRfYnVmID0gSW52YWxp ZEJ1ZmZlcjsKIAotCS8qIHJlbGVhc2UgYW55IHBpbiB3ZSBzdGlsbCBob2xkICovCi0JaWYgKEJ1 ZmZlcklzVmFsaWQoc28tPmN1cnJQb3MuYnVmKSkKLQkJX2hhc2hfZHJvcGJ1ZihyZWwsIHNvLT5j dXJyUG9zLmJ1Zik7Ci0Jc28tPmN1cnJQb3MuYnVmID0gSW52YWxpZEJ1ZmZlcjsKLQogCS8qIHJl c2V0IHNwbGl0IHNjYW4gKi8KIAlzby0+aGFzaHNvX2J1Y19wb3B1bGF0ZWQgPSBmYWxzZTsKIAlz by0+aGFzaHNvX2J1Y19zcGxpdCA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNj ZXNzL2hhc2gvaGFzaHNlYXJjaC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHNlYXJj aC5jCmluZGV4IDg5ZDFjNWJjNi4uNWE1OGMwNDBiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9h Y2Nlc3MvaGFzaC9oYXNoc2VhcmNoLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFz aHNlYXJjaC5jCkBAIC0yMiwxMDUgKzIyLDk0IEBACiAjaW5jbHVkZSAic3RvcmFnZS9wcmVkaWNh dGUuaCIKICNpbmNsdWRlICJ1dGlscy9yZWwuaCIKIAotc3RhdGljIGJvb2wgX2hhc2hfcmVhZHBh Z2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBCdWZmZXIgKmJ1ZlAsCi0JCQkJCQkgICBTY2FuRGlyZWN0 aW9uIGRpcik7CitzdGF0aWMgYm9vbCBfaGFzaF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4s IEJ1ZmZlciBidWYsIFNjYW5EaXJlY3Rpb24gZGlyLAorCQkJCQkJICAgSW5kZXhTY2FuQmF0Y2gg YmF0Y2gpOwogc3RhdGljIGludAlfaGFzaF9sb2FkX3F1YWxpZmllZF9pdGVtcyhJbmRleFNjYW5E ZXNjIHNjYW4sIFBhZ2UgcGFnZSwKLQkJCQkJCQkJCSAgIE9mZnNldE51bWJlciBvZmZudW0sIFNj YW5EaXJlY3Rpb24gZGlyKTsKLXN0YXRpYyBpbmxpbmUgdm9pZCBfaGFzaF9zYXZlaXRlbShIYXNo U2Nhbk9wYXF1ZSBzbywgaW50IGl0ZW1JbmRleCwKKwkJCQkJCQkJCSAgIE9mZnNldE51bWJlciBv ZmZudW0sIFNjYW5EaXJlY3Rpb24gZGlyLAorCQkJCQkJCQkJICAgSW5kZXhTY2FuQmF0Y2ggYmF0 Y2gpOworc3RhdGljIGlubGluZSB2b2lkIF9oYXNoX3NhdmVpdGVtKEluZGV4U2NhbkJhdGNoIGJh dGNoLCBpbnQgaXRlbUluZGV4LAogCQkJCQkJCQkgIE9mZnNldE51bWJlciBvZmZudW0sIEluZGV4 VHVwbGUgaXR1cCk7CiBzdGF0aWMgdm9pZCBfaGFzaF9yZWFkbmV4dChJbmRleFNjYW5EZXNjIHNj YW4sIEJ1ZmZlciAqYnVmcCwKIAkJCQkJCSAgIFBhZ2UgKnBhZ2VwLCBIYXNoUGFnZU9wYXF1ZSAq b3BhcXVlcCk7CiAKIC8qCi0gKglfaGFzaF9uZXh0KCkgLS0gR2V0IHRoZSBuZXh0IGl0ZW0gaW4g YSBzY2FuLgorICoJX2hhc2hfbmV4dCgpIC0tIEdldCB0aGUgbmV4dCBiYXRjaCBvZiBpdGVtcyBp biBhIHNjYW4uCiAgKgotICoJCU9uIGVudHJ5LCBzby0+Y3VyclBvcyBkZXNjcmliZXMgdGhlIGN1 cnJlbnQgcGFnZSwgd2hpY2ggbWF5Ci0gKgkJYmUgcGlubmVkIGJ1dCBub3QgbG9ja2VkLCBhbmQg c28tPmN1cnJQb3MuaXRlbUluZGV4IGlkZW50aWZpZXMKLSAqCQl3aGljaCBpdGVtIHdhcyBwcmV2 aW91c2x5IHJldHVybmVkLgorICoJCU9uIGVudHJ5LCBwcmlvcmJhdGNoIGRlc2NyaWJlcyB0aGUg Y3VycmVudCBwYWdlIGJhdGNoIHdpdGggaXRlbXMKKyAqCQlhbHJlYWR5IHJldHVybmVkLgogICoK LSAqCQlPbiBzdWNjZXNzZnVsIGV4aXQsIHNjYW4tPnhzX2hlYXB0aWQgaXMgc2V0IHRvIHRoZSBU SUQgb2YgdGhlIG5leHQKLSAqCQloZWFwIHR1cGxlLiAgc28tPmN1cnJQb3MgaXMgdXBkYXRlZCBh cyBuZWVkZWQuCisgKgkJT24gc3VjY2Vzc2Z1bCBleGl0LCByZXR1cm5zIGEgYmF0Y2ggY29udGFp bmluZyBtYXRjaGluZyBpdGVtcyBmcm9tCisgKgkJbmV4dCBwYWdlLiAgT3RoZXJ3aXNlIHJldHVy bnMgTlVMTCwgaW5kaWNhdGluZyB0aGF0IHRoZXJlIGFyZSBubworICoJCWZ1cnRoZXIgbWF0Y2hl cy4gIE5vIGxvY2tzIGFyZSBldmVyIGhlbGQgd2hlbiB3ZSByZXR1cm4uCiAgKgotICoJCU9uIGZh aWx1cmUgZXhpdCAobm8gbW9yZSB0dXBsZXMpLCB3ZSByZXR1cm4gZmFsc2Ugd2l0aCBwaW4KLSAq CQloZWxkIG9uIGJ1Y2tldCBwYWdlIGJ1dCBubyBwaW5zIG9yIGxvY2tzIGhlbGQgb24gb3ZlcmZs b3cKLSAqCQlwYWdlLgorICoJCVJldGFpbnMgcGlucyBhY2NvcmRpbmcgdG8gdGhlIHNhbWUgcnVs ZXMgYXMgX2hhc2hfZmlyc3QuCiAgKi8KLWJvb2wKLV9oYXNoX25leHQoSW5kZXhTY2FuRGVzYyBz Y2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKK0luZGV4U2NhbkJhdGNoCitfaGFzaF9uZXh0KEluZGV4 U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIEluZGV4U2NhbkJhdGNoIHByaW9yYmF0 Y2gpCiB7CiAJUmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKIAlIYXNoU2Nhbk9w YXF1ZSBzbyA9IChIYXNoU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwotCUhhc2hTY2FuUG9zSXRl bSAqY3Vyckl0ZW07CisJSGFzaEJhdGNoRGF0YSAqaGFzaHByaW9yYmF0Y2ggPSBIYXNoQmF0Y2hH ZXREYXRhKHNjYW4sIHByaW9yYmF0Y2gpOwogCUJsb2NrTnVtYmVyIGJsa25vOwogCUJ1ZmZlcgkJ YnVmOwotCWJvb2wJCWVuZF9vZl9zY2FuID0gZmFsc2U7CisJSW5kZXhTY2FuQmF0Y2ggYmF0Y2g7 CiAKIAkvKgotCSAqIEFkdmFuY2UgdG8gdGhlIG5leHQgdHVwbGUgb24gdGhlIGN1cnJlbnQgcGFn ZTsgb3IgaWYgZG9uZSwgdHJ5IHRvIHJlYWQKLQkgKiBkYXRhIGZyb20gdGhlIG5leHQgb3IgcHJl dmlvdXMgcGFnZSBiYXNlZCBvbiB0aGUgc2NhbiBkaXJlY3Rpb24uIEJlZm9yZQotCSAqIG1vdmlu ZyB0byB0aGUgbmV4dCBvciBwcmV2aW91cyBwYWdlIG1ha2Ugc3VyZSB0aGF0IHdlIGRlYWwgd2l0 aCBhbGwgdGhlCi0JICoga2lsbGVkIGl0ZW1zLgorCSAqIFRoZSBjb3JlIGNvZGUgbXVzdCBkZWFs IHdpdGggY3Jvc3MtYmF0Y2ggc2NhbiBkaXJlY3Rpb24gY2hhbmdlcyBmb3IgdXMuCisJICogQSBi YXRjaCBtYW5hZ2VtZW50IHJvdXRpbmUgdGhhdCBmbGlwcyBwcmlvcmJhdGNoJ3Mgc2NhbiBkaXJl Y3Rpb24gaXMKKwkgKiB1c2VkIGZvciB0aGlzLgorCSAqLworCUFzc2VydChwcmlvcmJhdGNoLT5k aXIgPT0gZGlyKTsKKworCS8qCisJICogRGV0ZXJtaW5lIHdoaWNoIHBhZ2UgdG8gcmVhZCBuZXh0 IGJhc2VkIG9uIHNjYW4gZGlyZWN0aW9uIGFuZCBkZXRhaWxzCisJICogdGFrZW4gZnJvbSB0aGUg cHJpb3IgYmF0Y2gKIAkgKi8KIAlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpKQotCXsK LQkJaWYgKCsrc28tPmN1cnJQb3MuaXRlbUluZGV4ID4gc28tPmN1cnJQb3MubGFzdEl0ZW0pCi0J CXsKLQkJCWlmIChzby0+bnVtS2lsbGVkID4gMCkKLQkJCQlfaGFzaF9raWxsX2l0ZW1zKHNjYW4p OworCQlibGtubyA9IGhhc2hwcmlvcmJhdGNoLT5uZXh0UGFnZTsKKwllbHNlCisJCWJsa25vID0g aGFzaHByaW9yYmF0Y2gtPnByZXZQYWdlOwogCi0JCQlibGtubyA9IHNvLT5jdXJyUG9zLm5leHRQ YWdlOwotCQkJaWYgKEJsb2NrTnVtYmVySXNWYWxpZChibGtubykpCi0JCQl7Ci0JCQkJYnVmID0g X2hhc2hfZ2V0YnVmKHJlbCwgYmxrbm8sIEhBU0hfUkVBRCwgTEhfT1ZFUkZMT1dfUEFHRSk7Ci0J CQkJaWYgKCFfaGFzaF9yZWFkcGFnZShzY2FuLCAmYnVmLCBkaXIpKQotCQkJCQllbmRfb2Zfc2Nh biA9IHRydWU7Ci0JCQl9Ci0JCQllbHNlCi0JCQkJZW5kX29mX3NjYW4gPSB0cnVlOwotCQl9Ci0J fQorCS8qCisJICogRm9yIGJpdG1hcCBzY2FuIGNhbGxlcnMsIHJlbGVhc2UgdGhlIHByaW9yIGJh dGNoIG5vdyBzbyB0aGF0IHRoZQorCSAqIGFsbG9jYXRpb24gYmVsb3cgY2FuIHJldXNlIGl0cyBt ZW1vcnkuICBUaGF0IHdheSBiaXRtYXAgc2NhbnMgbmV2ZXIKKwkgKiBuZWVkIG1vcmUgdGhhbiBv bmUgYmF0Y2ggYWxsb2NhdGlvbi4KKwkgKi8KKwlpZiAoIXNjYW4tPnVzZWJhdGNocmluZykKKwkJ aW5kZXhhbV91dGlsX3JlbGVhc2VfYmF0Y2goc2NhbiwgcHJpb3JiYXRjaCk7CisKKwlpZiAoIUJs b2NrTnVtYmVySXNWYWxpZChibGtubykpCisJCXJldHVybiBOVUxMOworCisJLyogQWxsb2NhdGUg c3BhY2UgZm9yIG5leHQgYmF0Y2ggKi8KKwliYXRjaCA9IGluZGV4YW1fdXRpbF9hbGxvY19iYXRj aChzY2FuKTsKKworCS8qIEdldCB0aGUgYnVmZmVyIGZvciBuZXh0IGJhdGNoICovCisJaWYgKFNj YW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKKwkJYnVmID0gX2hhc2hfZ2V0YnVmKHJlbCwgYmxr bm8sIEhBU0hfUkVBRCwgTEhfT1ZFUkZMT1dfUEFHRSk7CiAJZWxzZQogCXsKLQkJaWYgKC0tc28t PmN1cnJQb3MuaXRlbUluZGV4IDwgc28tPmN1cnJQb3MuZmlyc3RJdGVtKQotCQl7Ci0JCQlpZiAo c28tPm51bUtpbGxlZCA+IDApCi0JCQkJX2hhc2hfa2lsbF9pdGVtcyhzY2FuKTsKKwkJYnVmID0g X2hhc2hfZ2V0YnVmKHJlbCwgYmxrbm8sIEhBU0hfUkVBRCwKKwkJCQkJCSAgIExIX0JVQ0tFVF9Q QUdFIHwgTEhfT1ZFUkZMT1dfUEFHRSk7CiAKLQkJCWJsa25vID0gc28tPmN1cnJQb3MucHJldlBh Z2U7Ci0JCQlpZiAoQmxvY2tOdW1iZXJJc1ZhbGlkKGJsa25vKSkKLQkJCXsKLQkJCQlidWYgPSBf aGFzaF9nZXRidWYocmVsLCBibGtubywgSEFTSF9SRUFELAotCQkJCQkJCQkgICBMSF9CVUNLRVRf UEFHRSB8IExIX09WRVJGTE9XX1BBR0UpOwotCi0JCQkJLyoKLQkJCQkgKiBXZSBhbHdheXMgbWFp bnRhaW4gdGhlIHBpbiBvbiBidWNrZXQgcGFnZSBmb3Igd2hvbGUgc2NhbgotCQkJCSAqIG9wZXJh dGlvbiwgc28gcmVsZWFzaW5nIHRoZSBhZGRpdGlvbmFsIHBpbiB3ZSBoYXZlIGFjcXVpcmVkCi0J CQkJICogaGVyZS4KLQkJCQkgKi8KLQkJCQlpZiAoYnVmID09IHNvLT5oYXNoc29fYnVja2V0X2J1 ZiB8fAotCQkJCQlidWYgPT0gc28tPmhhc2hzb19zcGxpdF9idWNrZXRfYnVmKQotCQkJCQlfaGFz aF9kcm9wYnVmKHJlbCwgYnVmKTsKLQotCQkJCWlmICghX2hhc2hfcmVhZHBhZ2Uoc2NhbiwgJmJ1 ZiwgZGlyKSkKLQkJCQkJZW5kX29mX3NjYW4gPSB0cnVlOwotCQkJfQotCQkJZWxzZQotCQkJCWVu ZF9vZl9zY2FuID0gdHJ1ZTsKLQkJfQorCQkvKgorCQkgKiBXZSBhbHdheXMgbWFpbnRhaW4gdGhl IHBpbiBvbiBidWNrZXQgcGFnZSBmb3Igd2hvbGUgc2NhbiBvcGVyYXRpb24sCisJCSAqIHNvIHJl bGVhc2luZyB0aGUgYWRkaXRpb25hbCBwaW4gd2UgaGF2ZSBhY3F1aXJlZCBoZXJlLgorCQkgKi8K KwkJaWYgKGJ1ZiA9PSBzby0+aGFzaHNvX2J1Y2tldF9idWYgfHwKKwkJCWJ1ZiA9PSBzby0+aGFz aHNvX3NwbGl0X2J1Y2tldF9idWYpCisJCQlfaGFzaF9kcm9wYnVmKHJlbCwgYnVmKTsKIAl9CiAK LQlpZiAoZW5kX29mX3NjYW4pCisJLyogUmVhZCB0aGUgbmV4dCBwYWdlIGFuZCBsb2FkIGl0ZW1z IGludG8gYWxsb2NhdGVkIGJhdGNoICovCisJaWYgKCFfaGFzaF9yZWFkcGFnZShzY2FuLCBidWYs IGRpciwgYmF0Y2gpKQogCXsKLQkJX2hhc2hfZHJvcHNjYW5idWYocmVsLCBzbyk7Ci0JCUhhc2hT Y2FuUG9zSW52YWxpZGF0ZShzby0+Y3VyclBvcyk7Ci0JCXJldHVybiBmYWxzZTsKKwkJaW5kZXhh bV91dGlsX3JlbGVhc2VfYmF0Y2goc2NhbiwgYmF0Y2gpOworCQlyZXR1cm4gTlVMTDsKIAl9CiAK LQkvKiBPSywgaXRlbUluZGV4IHNheXMgd2hhdCB0byByZXR1cm4gKi8KLQljdXJySXRlbSA9ICZz by0+Y3VyclBvcy5pdGVtc1tzby0+Y3VyclBvcy5pdGVtSW5kZXhdOwotCXNjYW4tPnhzX2hlYXB0 aWQgPSBjdXJySXRlbS0+aGVhcFRpZDsKLQotCXJldHVybiB0cnVlOworCS8qIFJldHVybiB0aGUg YmF0Y2ggY29udGFpbmluZyBtYXRjaGVkIGl0ZW1zIGZyb20gbmV4dCBwYWdlICovCisJcmV0dXJu IGJhdGNoOwogfQogCiAvKgpAQCAtMjcwLDIyICsyNTksMjAgQEAgX2hhc2hfcmVhZHByZXYoSW5k ZXhTY2FuRGVzYyBzY2FuLAogfQogCiAvKgotICoJX2hhc2hfZmlyc3QoKSAtLSBGaW5kIHRoZSBm aXJzdCBpdGVtIGluIGEgc2Nhbi4KKyAqCV9oYXNoX2ZpcnN0KCkgLS0gRmluZCB0aGUgZmlyc3Qg YmF0Y2ggb2YgaXRlbXMgaW4gYSBzY2FuLgogICoKLSAqCQlXZSBmaW5kIHRoZSBmaXJzdCBpdGVt IChvciwgaWYgYmFja3dhcmQgc2NhbiwgdGhlIGxhc3QgaXRlbSkgaW4gdGhlCi0gKgkJaW5kZXgg dGhhdCBzYXRpc2ZpZXMgdGhlIHF1YWxpZmljYXRpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBzY2Fu Ci0gKgkJZGVzY3JpcHRvci4KKyAqCQlXZSBmaW5kIHRoZSBmaXJzdCBiYXRjaCBvZiBpdGVtcyAo b3IsIGlmIGJhY2t3YXJkIHNjYW4sIHRoZSBsYXN0CisgKgkJYmF0Y2gpIGluIHRoZSBpbmRleCB0 aGF0IHNhdGlzZmllcyB0aGUgcXVhbGlmaWNhdGlvbiBhc3NvY2lhdGVkIHdpdGgKKyAqCQl0aGUg c2NhbiBkZXNjcmlwdG9yLgogICoKLSAqCQlPbiBzdWNjZXNzZnVsIGV4aXQsIGlmIHRoZSBwYWdl IGNvbnRhaW5pbmcgY3VycmVudCBpbmRleCB0dXBsZSBpcyBhbgotICoJCW92ZXJmbG93IHBhZ2Us IGJvdGggcGluIGFuZCBsb2NrIGFyZSByZWxlYXNlZCB3aGVyZWFzIGlmIGl0IGlzIGEgYnVja2V0 Ci0gKgkJcGFnZSB0aGVuIGl0IGlzIHBpbm5lZCBidXQgbm90IGxvY2tlZCBhbmQgZGF0YSBhYm91 dCB0aGUgbWF0Y2hpbmcKLSAqCQl0dXBsZShzKSBvbiB0aGUgcGFnZSBoYXMgYmVlbiBsb2FkZWQg aW50byBzby0+Y3VyclBvcywKLSAqCQlzY2FuLT54c19oZWFwdGlkIGlzIHNldCB0byB0aGUgaGVh cCBUSUQgb2YgdGhlIGN1cnJlbnQgdHVwbGUuCisgKgkJT24gc3VjY2Vzc2Z1bCBleGl0LCByZXR1 cm5zIGEgYmF0Y2ggY29udGFpbmluZyBtYXRjaGluZyBpdGVtcy4KKyAqCQlPdGhlcndpc2UgcmV0 dXJucyBOVUxMLCBpbmRpY2F0aW5nIHRoYXQgdGhlcmUgYXJlIG5vIGZ1cnRoZXIgbWF0Y2hlcy4K KyAqCQlObyBsb2NrcyBhcmUgZXZlciBoZWxkIHdoZW4gd2UgcmV0dXJuLgogICoKLSAqCQlPbiBm YWlsdXJlIGV4aXQgKG5vIG1vcmUgdHVwbGVzKSwgd2UgcmV0dXJuIGZhbHNlLCB3aXRoIHBpbiBo ZWxkIG9uCi0gKgkJYnVja2V0IHBhZ2UgYnV0IG5vIHBpbnMgb3IgbG9ja3MgaGVsZCBvbiBvdmVy ZmxvdyBwYWdlLgorICoJCVdlIGFsd2F5cyByZXRhaW4gb3VyIG93biBwaW4gb24gdGhlIGJ1Y2tl dCBwYWdlLiAgV2hlbiB3ZSByZXR1cm4gYQorICoJCWJhdGNoIHdpdGggYSBidWNrZXQgcGFnZSwg aXQgd2lsbCByZXRhaW4gaXRzIG93biByZWZlcmVuY2UgcGluLgogICovCi1ib29sCitJbmRleFNj YW5CYXRjaAogX2hhc2hfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRp cikKIHsKIAlSZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOwpAQCAtMjk2LDcgKzI4 Myw3IEBAIF9oYXNoX2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIp CiAJQnVmZmVyCQlidWY7CiAJUGFnZQkJcGFnZTsKIAlIYXNoUGFnZU9wYXF1ZSBvcGFxdWU7Ci0J SGFzaFNjYW5Qb3NJdGVtICpjdXJySXRlbTsKKwlJbmRleFNjYW5CYXRjaCBiYXRjaDsKIAogCXBn c3RhdF9jb3VudF9pbmRleF9zY2FuKHJlbCk7CiAJaWYgKHNjYW4tPmluc3RydW1lbnQpCkBAIC0z MjYsNyArMzEzLDcgQEAgX2hhc2hfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0 aW9uIGRpcikKIAkgKiBpdGVtcyBpbiB0aGUgaW5kZXguCiAJICovCiAJaWYgKGN1ci0+c2tfZmxh Z3MgJiBTS19JU05VTEwpCi0JCXJldHVybiBmYWxzZTsKKwkJcmV0dXJuIE5VTEw7CiAKIAkvKgog CSAqIE9rYXkgdG8gY29tcHV0ZSB0aGUgaGFzaCBrZXkuICBXZSB3YW50IHRvIGRvIHRoaXMgYmVm b3JlIGFjcXVpcmluZyBhbnkKQEAgLTQxOSwxOTEgKzQwNiwxNTIgQEAgX2hhc2hfZmlyc3QoSW5k ZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAkJCV9oYXNoX3JlYWRuZXh0KHNj YW4sICZidWYsICZwYWdlLCAmb3BhcXVlKTsKIAl9CiAKLQkvKiByZW1lbWJlciB3aGljaCBidWZm ZXIgd2UgaGF2ZSBwaW5uZWQsIGlmIGFueSAqLwotCUFzc2VydChCdWZmZXJJc0ludmFsaWQoc28t PmN1cnJQb3MuYnVmKSk7Ci0Jc28tPmN1cnJQb3MuYnVmID0gYnVmOworCS8qIEFsbG9jYXRlIHNw YWNlIGZvciBmaXJzdCBiYXRjaCAqLworCWJhdGNoID0gaW5kZXhhbV91dGlsX2FsbG9jX2JhdGNo KHNjYW4pOwogCi0JLyogTm93IGZpbmQgYWxsIHRoZSB0dXBsZXMgc2F0aXNmeWluZyB0aGUgcXVh bGlmaWNhdGlvbiBmcm9tIGEgcGFnZSAqLwotCWlmICghX2hhc2hfcmVhZHBhZ2Uoc2NhbiwgJmJ1 ZiwgZGlyKSkKLQkJcmV0dXJuIGZhbHNlOworCS8qIFJlYWQgdGhlIGZpcnN0IHBhZ2UgYW5kIGxv YWQgaXRlbXMgaW50byBhbGxvY2F0ZWQgYmF0Y2ggKi8KKwlpZiAoIV9oYXNoX3JlYWRwYWdlKHNj YW4sIGJ1ZiwgZGlyLCBiYXRjaCkpCisJeworCQlpbmRleGFtX3V0aWxfcmVsZWFzZV9iYXRjaChz Y2FuLCBiYXRjaCk7CisJCXJldHVybiBOVUxMOworCX0KIAotCS8qIE9LLCBpdGVtSW5kZXggc2F5 cyB3aGF0IHRvIHJldHVybiAqLwotCWN1cnJJdGVtID0gJnNvLT5jdXJyUG9zLml0ZW1zW3NvLT5j dXJyUG9zLml0ZW1JbmRleF07Ci0Jc2Nhbi0+eHNfaGVhcHRpZCA9IGN1cnJJdGVtLT5oZWFwVGlk OwotCi0JLyogaWYgd2UncmUgaGVyZSwgX2hhc2hfcmVhZHBhZ2UgZm91bmQgYSB2YWxpZCB0dXBs ZXMgKi8KLQlyZXR1cm4gdHJ1ZTsKKwkvKiBSZXR1cm4gdGhlIGJhdGNoIGNvbnRhaW5pbmcgbWF0 Y2hlZCBpdGVtcyAqLworCXJldHVybiBiYXRjaDsKIH0KIAogLyoKLSAqCV9oYXNoX3JlYWRwYWdl KCkgLS0gTG9hZCBkYXRhIGZyb20gY3VycmVudCBpbmRleCBwYWdlIGludG8gc28tPmN1cnJQb3MK KyAqCV9oYXNoX3JlYWRwYWdlKCkgLS0gTG9hZCBkYXRhIGZyb20gY3VycmVudCBpbmRleCBwYWdl IGludG8gYmF0Y2gKICAqCiAgKglXZSBzY2FuIGFsbCB0aGUgaXRlbXMgaW4gdGhlIGN1cnJlbnQg aW5kZXggcGFnZSBhbmQgc2F2ZSB0aGVtIGludG8KLSAqCXNvLT5jdXJyUG9zIGlmIGl0IHNhdGlz ZmllcyB0aGUgcXVhbGlmaWNhdGlvbi4gSWYgbm8gbWF0Y2hpbmcgaXRlbXMKKyAqCXRoZSBiYXRj aCBpZiB0aGV5IHNhdGlzZnkgdGhlIHF1YWxpZmljYXRpb24uIElmIG5vIG1hdGNoaW5nIGl0ZW1z CiAgKglhcmUgZm91bmQgaW4gdGhlIGN1cnJlbnQgcGFnZSwgd2UgbW92ZSB0byB0aGUgbmV4dCBv ciBwcmV2aW91cyBwYWdlCiAgKglpbiBhIGJ1Y2tldCBjaGFpbiBhcyBpbmRpY2F0ZWQgYnkgdGhl IGRpcmVjdGlvbi4KICAqCiAgKglSZXR1cm4gdHJ1ZSBpZiBhbnkgbWF0Y2hpbmcgaXRlbXMgYXJl IGZvdW5kIGVsc2UgcmV0dXJuIGZhbHNlLgogICovCiBzdGF0aWMgYm9vbAotX2hhc2hfcmVhZHBh Z2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBCdWZmZXIgKmJ1ZlAsIFNjYW5EaXJlY3Rpb24gZGlyKQor X2hhc2hfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBCdWZmZXIgYnVmLCBTY2FuRGlyZWN0 aW9uIGRpciwKKwkJCSAgIEluZGV4U2NhbkJhdGNoIGJhdGNoKQogewogCVJlbGF0aW9uCXJlbCA9 IHNjYW4tPmluZGV4UmVsYXRpb247CiAJSGFzaFNjYW5PcGFxdWUgc28gPSAoSGFzaFNjYW5PcGFx dWUpIHNjYW4tPm9wYXF1ZTsKLQlCdWZmZXIJCWJ1ZjsKKwlIYXNoQmF0Y2hEYXRhICpoYXNoYmF0 Y2ggPSBIYXNoQmF0Y2hHZXREYXRhKHNjYW4sIGJhdGNoKTsKIAlQYWdlCQlwYWdlOwogCUhhc2hQ YWdlT3BhcXVlIG9wYXF1ZTsKIAlPZmZzZXROdW1iZXIgb2ZmbnVtOwogCXVpbnQxNgkJaXRlbUlu ZGV4OwogCi0JYnVmID0gKmJ1ZlA7CiAJQXNzZXJ0KEJ1ZmZlcklzVmFsaWQoYnVmKSk7CiAJX2hh c2hfY2hlY2twYWdlKHJlbCwgYnVmLCBMSF9CVUNLRVRfUEFHRSB8IExIX09WRVJGTE9XX1BBR0Up OwogCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGJ1Zik7CiAJb3BhcXVlID0gSGFzaFBhZ2VHZXRPcGFx dWUocGFnZSk7CiAKLQlzby0+Y3VyclBvcy5idWYgPSBidWY7Ci0Jc28tPmN1cnJQb3MuY3VyclBh Z2UgPSBCdWZmZXJHZXRCbG9ja051bWJlcihidWYpOworCWhhc2hiYXRjaC0+YnVmID0gYnVmOwor CWhhc2hiYXRjaC0+Y3VyclBhZ2UgPSBCdWZmZXJHZXRCbG9ja051bWJlcihidWYpOworCWJhdGNo LT5kaXIgPSBkaXI7CiAKIAlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpKQogCXsKLQkJ QmxvY2tOdW1iZXIgcHJldl9ibGtubyA9IEludmFsaWRCbG9ja051bWJlcjsKLQogCQlmb3IgKDs7 KQogCQl7CiAJCQkvKiBuZXcgcGFnZSwgbG9jYXRlIHN0YXJ0aW5nIHBvc2l0aW9uIGJ5IGJpbmFy eSBzZWFyY2ggKi8KIAkJCW9mZm51bSA9IF9oYXNoX2JpbnNlYXJjaChwYWdlLCBzby0+aGFzaHNv X3NrX2hhc2gpOwogCi0JCQlpdGVtSW5kZXggPSBfaGFzaF9sb2FkX3F1YWxpZmllZF9pdGVtcyhz Y2FuLCBwYWdlLCBvZmZudW0sIGRpcik7CisJCQlpdGVtSW5kZXggPSBfaGFzaF9sb2FkX3F1YWxp ZmllZF9pdGVtcyhzY2FuLCBwYWdlLCBvZmZudW0sIGRpciwKKwkJCQkJCQkJCQkJCSAgIGJhdGNo KTsKIAogCQkJaWYgKGl0ZW1JbmRleCAhPSAwKQogCQkJCWJyZWFrOwogCiAJCQkvKgotCQkJICog Q291bGQgbm90IGZpbmQgYW55IG1hdGNoaW5nIHR1cGxlcyBpbiB0aGUgY3VycmVudCBwYWdlLCBt b3ZlIHRvCi0JCQkgKiB0aGUgbmV4dCBwYWdlLiBCZWZvcmUgbGVhdmluZyB0aGUgY3VycmVudCBw YWdlLCBkZWFsIHdpdGggYW55Ci0JCQkgKiBraWxsZWQgaXRlbXMuCisJCQkgKiBDb3VsZCBub3Qg ZmluZCBhbnkgbWF0Y2hpbmcgdHVwbGVzIGluIHRoZSBjdXJyZW50IHBhZ2UsIHRyeSB0bworCQkJ ICogbW92ZSB0byB0aGUgbmV4dCBwYWdlCiAJCQkgKi8KLQkJCWlmIChzby0+bnVtS2lsbGVkID4g MCkKLQkJCQlfaGFzaF9raWxsX2l0ZW1zKHNjYW4pOwotCi0JCQkvKgotCQkJICogSWYgdGhpcyBp cyBhIHByaW1hcnkgYnVja2V0IHBhZ2UsIGhhc2hvX3ByZXZibGtubyBpcyBub3QgYSByZWFsCi0J CQkgKiBibG9jayBudW1iZXIuCi0JCQkgKi8KLQkJCWlmIChzby0+Y3VyclBvcy5idWYgPT0gc28t Pmhhc2hzb19idWNrZXRfYnVmIHx8Ci0JCQkJc28tPmN1cnJQb3MuYnVmID09IHNvLT5oYXNoc29f c3BsaXRfYnVja2V0X2J1ZikKLQkJCQlwcmV2X2Jsa25vID0gSW52YWxpZEJsb2NrTnVtYmVyOwot CQkJZWxzZQotCQkJCXByZXZfYmxrbm8gPSBvcGFxdWUtPmhhc2hvX3ByZXZibGtubzsKLQogCQkJ X2hhc2hfcmVhZG5leHQoc2NhbiwgJmJ1ZiwgJnBhZ2UsICZvcGFxdWUpOwotCQkJaWYgKEJ1ZmZl cklzVmFsaWQoYnVmKSkKLQkJCXsKLQkJCQlzby0+Y3VyclBvcy5idWYgPSBidWY7Ci0JCQkJc28t PmN1cnJQb3MuY3VyclBhZ2UgPSBCdWZmZXJHZXRCbG9ja051bWJlcihidWYpOwotCQkJfQotCQkJ ZWxzZQotCQkJewotCQkJCS8qCi0JCQkJICogUmVtZW1iZXIgbmV4dCBhbmQgcHJldmlvdXMgYmxv Y2sgbnVtYmVycyBmb3Igc2Nyb2xsYWJsZQotCQkJCSAqIGN1cnNvcnMgdG8ga25vdyB0aGUgc3Rh cnQgcG9zaXRpb24gYW5kIHJldHVybiBmYWxzZQotCQkJCSAqIGluZGljYXRpbmcgdGhhdCBubyBt b3JlIG1hdGNoaW5nIHR1cGxlcyB3ZXJlIGZvdW5kLiBBbHNvLAotCQkJCSAqIGRvbid0IHJlc2V0 IGN1cnJQYWdlIG9yIGxzbiwgYmVjYXVzZSB3ZSBleHBlY3QKLQkJCQkgKiBfaGFzaF9raWxsX2l0 ZW1zIHRvIGJlIGNhbGxlZCBmb3IgdGhlIG9sZCBwYWdlIGFmdGVyIHRoaXMKLQkJCQkgKiBmdW5j dGlvbiByZXR1cm5zLgotCQkJCSAqLwotCQkJCXNvLT5jdXJyUG9zLnByZXZQYWdlID0gcHJldl9i bGtubzsKLQkJCQlzby0+Y3VyclBvcy5uZXh0UGFnZSA9IEludmFsaWRCbG9ja051bWJlcjsKLQkJ CQlzby0+Y3VyclBvcy5idWYgPSBidWY7CisJCQlpZiAoIUJ1ZmZlcklzVmFsaWQoYnVmKSkKIAkJ CQlyZXR1cm4gZmFsc2U7Ci0JCQl9CisKKwkJCWhhc2hiYXRjaC0+YnVmID0gYnVmOworCQkJaGFz aGJhdGNoLT5jdXJyUGFnZSA9IEJ1ZmZlckdldEJsb2NrTnVtYmVyKGJ1Zik7CiAJCX0KIAotCQlz by0+Y3VyclBvcy5maXJzdEl0ZW0gPSAwOwotCQlzby0+Y3VyclBvcy5sYXN0SXRlbSA9IGl0ZW1J bmRleCAtIDE7Ci0JCXNvLT5jdXJyUG9zLml0ZW1JbmRleCA9IDA7CisJCWJhdGNoLT5maXJzdEl0 ZW0gPSAwOworCQliYXRjaC0+bGFzdEl0ZW0gPSBpdGVtSW5kZXggLSAxOwogCX0KIAllbHNlCiAJ ewotCQlCbG9ja051bWJlciBuZXh0X2Jsa25vID0gSW52YWxpZEJsb2NrTnVtYmVyOwotCiAJCWZv ciAoOzspCiAJCXsKIAkJCS8qIG5ldyBwYWdlLCBsb2NhdGUgc3RhcnRpbmcgcG9zaXRpb24gYnkg YmluYXJ5IHNlYXJjaCAqLwogCQkJb2ZmbnVtID0gX2hhc2hfYmluc2VhcmNoX2xhc3QocGFnZSwg c28tPmhhc2hzb19za19oYXNoKTsKIAotCQkJaXRlbUluZGV4ID0gX2hhc2hfbG9hZF9xdWFsaWZp ZWRfaXRlbXMoc2NhbiwgcGFnZSwgb2ZmbnVtLCBkaXIpOworCQkJaXRlbUluZGV4ID0gX2hhc2hf bG9hZF9xdWFsaWZpZWRfaXRlbXMoc2NhbiwgcGFnZSwgb2ZmbnVtLCBkaXIsCisJCQkJCQkJCQkJ CQkgICBiYXRjaCk7CiAKIAkJCWlmIChpdGVtSW5kZXggIT0gTWF4SW5kZXhUdXBsZXNQZXJQYWdl KQogCQkJCWJyZWFrOwogCiAJCQkvKgotCQkJICogQ291bGQgbm90IGZpbmQgYW55IG1hdGNoaW5n IHR1cGxlcyBpbiB0aGUgY3VycmVudCBwYWdlLCBtb3ZlIHRvCi0JCQkgKiB0aGUgcHJldmlvdXMg cGFnZS4gQmVmb3JlIGxlYXZpbmcgdGhlIGN1cnJlbnQgcGFnZSwgZGVhbCB3aXRoCi0JCQkgKiBh bnkga2lsbGVkIGl0ZW1zLgorCQkJICogQ291bGQgbm90IGZpbmQgYW55IG1hdGNoaW5nIHR1cGxl cyBpbiB0aGUgY3VycmVudCBwYWdlLCB0cnkgdG8KKwkJCSAqIG1vdmUgdG8gdGhlIHByZXZpb3Vz IHBhZ2UKIAkJCSAqLwotCQkJaWYgKHNvLT5udW1LaWxsZWQgPiAwKQotCQkJCV9oYXNoX2tpbGxf aXRlbXMoc2Nhbik7Ci0KLQkJCWlmIChzby0+Y3VyclBvcy5idWYgPT0gc28tPmhhc2hzb19idWNr ZXRfYnVmIHx8Ci0JCQkJc28tPmN1cnJQb3MuYnVmID09IHNvLT5oYXNoc29fc3BsaXRfYnVja2V0 X2J1ZikKLQkJCQluZXh0X2Jsa25vID0gb3BhcXVlLT5oYXNob19uZXh0Ymxrbm87Ci0KIAkJCV9o YXNoX3JlYWRwcmV2KHNjYW4sICZidWYsICZwYWdlLCAmb3BhcXVlKTsKLQkJCWlmIChCdWZmZXJJ c1ZhbGlkKGJ1ZikpCi0JCQl7Ci0JCQkJc28tPmN1cnJQb3MuYnVmID0gYnVmOwotCQkJCXNvLT5j dXJyUG9zLmN1cnJQYWdlID0gQnVmZmVyR2V0QmxvY2tOdW1iZXIoYnVmKTsKLQkJCX0KLQkJCWVs c2UKLQkJCXsKLQkJCQkvKgotCQkJCSAqIFJlbWVtYmVyIG5leHQgYW5kIHByZXZpb3VzIGJsb2Nr IG51bWJlcnMgZm9yIHNjcm9sbGFibGUKLQkJCQkgKiBjdXJzb3JzIHRvIGtub3cgdGhlIHN0YXJ0 IHBvc2l0aW9uIGFuZCByZXR1cm4gZmFsc2UKLQkJCQkgKiBpbmRpY2F0aW5nIHRoYXQgbm8gbW9y ZSBtYXRjaGluZyB0dXBsZXMgd2VyZSBmb3VuZC4gQWxzbywKLQkJCQkgKiBkb24ndCByZXNldCBj dXJyUGFnZSBvciBsc24sIGJlY2F1c2Ugd2UgZXhwZWN0Ci0JCQkJICogX2hhc2hfa2lsbF9pdGVt cyB0byBiZSBjYWxsZWQgZm9yIHRoZSBvbGQgcGFnZSBhZnRlciB0aGlzCi0JCQkJICogZnVuY3Rp b24gcmV0dXJucy4KLQkJCQkgKi8KLQkJCQlzby0+Y3VyclBvcy5wcmV2UGFnZSA9IEludmFsaWRC bG9ja051bWJlcjsKLQkJCQlzby0+Y3VyclBvcy5uZXh0UGFnZSA9IG5leHRfYmxrbm87Ci0JCQkJ c28tPmN1cnJQb3MuYnVmID0gYnVmOworCQkJaWYgKCFCdWZmZXJJc1ZhbGlkKGJ1ZikpCiAJCQkJ cmV0dXJuIGZhbHNlOwotCQkJfQorCisJCQloYXNoYmF0Y2gtPmJ1ZiA9IGJ1ZjsKKwkJCWhhc2hi YXRjaC0+Y3VyclBhZ2UgPSBCdWZmZXJHZXRCbG9ja051bWJlcihidWYpOwogCQl9CiAKLQkJc28t PmN1cnJQb3MuZmlyc3RJdGVtID0gaXRlbUluZGV4OwotCQlzby0+Y3VyclBvcy5sYXN0SXRlbSA9 IE1heEluZGV4VHVwbGVzUGVyUGFnZSAtIDE7Ci0JCXNvLT5jdXJyUG9zLml0ZW1JbmRleCA9IE1h eEluZGV4VHVwbGVzUGVyUGFnZSAtIDE7CisJCWJhdGNoLT5maXJzdEl0ZW0gPSBpdGVtSW5kZXg7 CisJCWJhdGNoLT5sYXN0SXRlbSA9IE1heEluZGV4VHVwbGVzUGVyUGFnZSAtIDE7CiAJfQogCi0J aWYgKHNvLT5jdXJyUG9zLmJ1ZiA9PSBzby0+aGFzaHNvX2J1Y2tldF9idWYgfHwKLQkJc28tPmN1 cnJQb3MuYnVmID09IHNvLT5oYXNoc29fc3BsaXRfYnVja2V0X2J1ZikKKwkvKgorCSAqIFNhdmVk IGF0IGxlYXN0IG9uZSBtYXRjaCBpbiBiYXRjaC5pdGVtc1tdLiAgUHJlcGFyZSBmb3IgaGFzaGdl dGJhdGNoIHRvCisJICogcmV0dXJuIGl0IGJ5IGluaXRpYWxpemluZyByZW1haW5pbmcgdW5pbml0 aWFsaXplZCBmaWVsZHMuCisJICovCisJaWYgKGhhc2hiYXRjaC0+YnVmID09IHNvLT5oYXNoc29f YnVja2V0X2J1ZiB8fAorCQloYXNoYmF0Y2gtPmJ1ZiA9PSBzby0+aGFzaHNvX3NwbGl0X2J1Y2tl dF9idWYpCiAJewotCQlzby0+Y3VyclBvcy5wcmV2UGFnZSA9IEludmFsaWRCbG9ja051bWJlcjsK LQkJc28tPmN1cnJQb3MubmV4dFBhZ2UgPSBvcGFxdWUtPmhhc2hvX25leHRibGtubzsKLQkJTG9j a0J1ZmZlcihzby0+Y3VyclBvcy5idWYsIEJVRkZFUl9MT0NLX1VOTE9DSyk7CisJCS8qCisJCSAq IEJhdGNoJ3MgYnVmZmVyIGlzIGVpdGhlciB0aGUgcHJpbWFyeSBidWNrZXQsIG9yIGEgYnVja2V0 IGJlaW5nCisJCSAqIHBvcHVsYXRlZCBkdWUgdG8gYSBzcGxpdC4KKwkJICoKKwkJICogSW5jcmVt ZW50IGxvY2FsIHJlZmVyZW5jZSBjb3VudCBzbyB0aGF0IGJhdGNoIGdldHMgaXRzIG93biBidWZm ZXIKKwkJICogcmVmZXJlbmNlIHRoYXQgY2FuIGJlIGluZGVwZW5kZW50bHkgcmVsZWFzZWQgYnkg aGFzaHVuZ3VhcmRiYXRjaC4KKwkJICogVGhlIG9yaWdpbmFsIGhhc2hzb19idWNrZXRfYnVmL2hh c2hzb19zcGxpdF9idWNrZXRfYnVmIHJlZmVyZW5jZXMKKwkJICogYmVsb25nIHRvIHVzLgorCQkg Ki8KKwkJSW5jckJ1ZmZlclJlZkNvdW50KGhhc2hiYXRjaC0+YnVmKTsKKworCQkvKiBDYW4gb25s eSB1c2Ugb3BhcXVlLT5oYXNob19uZXh0Ymxrbm8gKi8KKwkJaGFzaGJhdGNoLT5wcmV2UGFnZSA9 IEludmFsaWRCbG9ja051bWJlcjsKKwkJaGFzaGJhdGNoLT5uZXh0UGFnZSA9IG9wYXF1ZS0+aGFz aG9fbmV4dGJsa25vOwogCX0KIAllbHNlCiAJewotCQlzby0+Y3VyclBvcy5wcmV2UGFnZSA9IG9w YXF1ZS0+aGFzaG9fcHJldmJsa25vOwotCQlzby0+Y3VyclBvcy5uZXh0UGFnZSA9IG9wYXF1ZS0+ aGFzaG9fbmV4dGJsa25vOwotCQlfaGFzaF9yZWxidWYocmVsLCBzby0+Y3VyclBvcy5idWYpOwot CQlzby0+Y3VyclBvcy5idWYgPSBJbnZhbGlkQnVmZmVyOworCQkvKiBDYW4gdXNlIG9wYXF1ZS0+ aGFzaG9fcHJldmJsa25vIGFuZCBvcGFxdWUtPmhhc2hvX25leHRibGtubyAqLworCQloYXNoYmF0 Y2gtPnByZXZQYWdlID0gb3BhcXVlLT5oYXNob19wcmV2Ymxrbm87CisJCWhhc2hiYXRjaC0+bmV4 dFBhZ2UgPSBvcGFxdWUtPmhhc2hvX25leHRibGtubzsKIAl9CiAKLQlBc3NlcnQoc28tPmN1cnJQ b3MuZmlyc3RJdGVtIDw9IHNvLT5jdXJyUG9zLmxhc3RJdGVtKTsKKwkvKiB3ZSBzYXZlZCBvbmUg b3IgbW9yZSBtYXRjaGVzIGluIGJhdGNoLml0ZW1zW10gKi8KKwlpbmRleGFtX3V0aWxfdW5sb2Nr X2JhdGNoKHNjYW4sIGJhdGNoLCBoYXNoYmF0Y2gtPmJ1Zik7CisKKwlBc3NlcnQoYmF0Y2gtPmZp cnN0SXRlbSA8PSBiYXRjaC0+bGFzdEl0ZW0pOwogCXJldHVybiB0cnVlOwogfQogCiAvKgogICog TG9hZCBhbGwgdGhlIHF1YWxpZmllZCBpdGVtcyBmcm9tIGEgY3VycmVudCBpbmRleCBwYWdlCi0g KiBpbnRvIHNvLT5jdXJyUG9zLiBIZWxwZXIgZnVuY3Rpb24gZm9yIF9oYXNoX3JlYWRwYWdlLgor ICogaW50byBiYXRjaC4gSGVscGVyIGZ1bmN0aW9uIGZvciBfaGFzaF9yZWFkcGFnZS4KICAqLwog c3RhdGljIGludAogX2hhc2hfbG9hZF9xdWFsaWZpZWRfaXRlbXMoSW5kZXhTY2FuRGVzYyBzY2Fu LCBQYWdlIHBhZ2UsCi0JCQkJCQkgICBPZmZzZXROdW1iZXIgb2ZmbnVtLCBTY2FuRGlyZWN0aW9u IGRpcikKKwkJCQkJCSAgIE9mZnNldE51bWJlciBvZmZudW0sIFNjYW5EaXJlY3Rpb24gZGlyLAor CQkJCQkJICAgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCiB7CiAJSGFzaFNjYW5PcGFxdWUgc28gPSAo SGFzaFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKIAlJbmRleFR1cGxlCWl0dXA7CkBAIC02NDAs NyArNTg4LDcgQEAgX2hhc2hfbG9hZF9xdWFsaWZpZWRfaXRlbXMoSW5kZXhTY2FuRGVzYyBzY2Fu LCBQYWdlIHBhZ2UsCiAJCQkJX2hhc2hfY2hlY2txdWFsKHNjYW4sIGl0dXApKQogCQkJewogCQkJ CS8qIHR1cGxlIGlzIHF1YWxpZmllZCwgc28gcmVtZW1iZXIgaXQgKi8KLQkJCQlfaGFzaF9zYXZl aXRlbShzbywgaXRlbUluZGV4LCBvZmZudW0sIGl0dXApOworCQkJCV9oYXNoX3NhdmVpdGVtKGJh dGNoLCBpdGVtSW5kZXgsIG9mZm51bSwgaXR1cCk7CiAJCQkJaXRlbUluZGV4Kys7CiAJCQl9CiAJ CQllbHNlCkBAIC02ODcsNyArNjM1LDcgQEAgX2hhc2hfbG9hZF9xdWFsaWZpZWRfaXRlbXMoSW5k ZXhTY2FuRGVzYyBzY2FuLCBQYWdlIHBhZ2UsCiAJCQl7CiAJCQkJaXRlbUluZGV4LS07CiAJCQkJ LyogdHVwbGUgaXMgcXVhbGlmaWVkLCBzbyByZW1lbWJlciBpdCAqLwotCQkJCV9oYXNoX3NhdmVp dGVtKHNvLCBpdGVtSW5kZXgsIG9mZm51bSwgaXR1cCk7CisJCQkJX2hhc2hfc2F2ZWl0ZW0oYmF0 Y2gsIGl0ZW1JbmRleCwgb2ZmbnVtLCBpdHVwKTsKIAkJCX0KIAkJCWVsc2UKIAkJCXsKQEAgLTcw NiwxMyArNjU0LDE0IEBAIF9oYXNoX2xvYWRfcXVhbGlmaWVkX2l0ZW1zKEluZGV4U2NhbkRlc2Mg c2NhbiwgUGFnZSBwYWdlLAogCX0KIH0KIAotLyogU2F2ZSBhbiBpbmRleCBpdGVtIGludG8gc28t PmN1cnJQb3MuaXRlbXNbaXRlbUluZGV4XSAqLworLyogU2F2ZSBhbiBpbmRleCBpdGVtIGludG8g YmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF0gKi8KIHN0YXRpYyBpbmxpbmUgdm9pZAotX2hhc2hfc2F2 ZWl0ZW0oSGFzaFNjYW5PcGFxdWUgc28sIGludCBpdGVtSW5kZXgsCitfaGFzaF9zYXZlaXRlbShJ bmRleFNjYW5CYXRjaCBiYXRjaCwgaW50IGl0ZW1JbmRleCwKIAkJCSAgIE9mZnNldE51bWJlciBv ZmZudW0sIEluZGV4VHVwbGUgaXR1cCkKIHsKLQlIYXNoU2NhblBvc0l0ZW0gKmN1cnJJdGVtID0g JnNvLT5jdXJyUG9zLml0ZW1zW2l0ZW1JbmRleF07CisJQmF0Y2hNYXRjaGluZ0l0ZW0gKmN1cnJJ dGVtID0gJmJhdGNoLT5pdGVtc1tpdGVtSW5kZXhdOwogCi0JY3Vyckl0ZW0tPmhlYXBUaWQgPSBp dHVwLT50X3RpZDsKKwljdXJySXRlbS0+dGFibGVUaWQgPSBpdHVwLT50X3RpZDsKIAljdXJySXRl bS0+aW5kZXhPZmZzZXQgPSBvZmZudW07CisJY3Vyckl0ZW0tPnR1cGxlT2Zmc2V0ID0gMDsKIH0K ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2h1dGlsLmMgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvaGFzaC9oYXNodXRpbC5jCmluZGV4IDFkMWIwNWY4Ny4uODhhM2YzYWQ4IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNodXRpbC5jCisrKyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2h1dGlsLmMKQEAgLTE2LDEwICsxNiw4IEBACiAKICNpbmNs dWRlICJhY2Nlc3MvaGFzaC5oIgogI2luY2x1ZGUgImFjY2Vzcy9yZWxvcHRpb25zLmgiCi0jaW5j bHVkZSAiYWNjZXNzL3JlbHNjYW4uaCIKICNpbmNsdWRlICJwb3J0L3BnX2JpdHV0aWxzLmgiCiAj aW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCi0jaW5jbHVkZSAidXRpbHMvcmVsLmgiCiAKICNk ZWZpbmUgQ0FMQ19ORVdfQlVDS0VUKG9sZF9idWNrZXQsIGxvd21hc2spIFwKIAkJCW9sZF9idWNr ZXQgfCAobG93bWFzayArIDEpCkBAIC0zMyw3ICszMSw3IEBAIF9oYXNoX2NoZWNrcXVhbChJbmRl eFNjYW5EZXNjIHNjYW4sIEluZGV4VHVwbGUgaXR1cCkKIAkvKgogCSAqIEN1cnJlbnRseSwgd2Ug Y2FuJ3QgY2hlY2sgYW55IG9mIHRoZSBzY2FuIGNvbmRpdGlvbnMgc2luY2Ugd2UgZG8gbm90CiAJ ICogaGF2ZSB0aGUgb3JpZ2luYWwgaW5kZXggZW50cnkgdmFsdWUgdG8gc3VwcGx5IHRvIHRoZSBz a19mdW5jLiBBbHdheXMKLQkgKiByZXR1cm4gdHJ1ZTsgd2UgZXhwZWN0IHRoYXQgaGFzaGdldHR1 cGxlIGFscmVhZHkgc2V0IHRoZSByZWNoZWNrIGZsYWcKKwkgKiByZXR1cm4gdHJ1ZTsgd2UgZXhw ZWN0IHRoYXQgaGFzaGdldGJhdGNoIGFscmVhZHkgc2V0IHRoZSByZWNoZWNrIGZsYWcKIAkgKiB0 byBtYWtlIHRoZSBtYWluIGluZGV4c2NhbiBjb2RlIGRvIGl0LgogCSAqLwogI2lmZGVmIE5PVF9V U0VECkBAIC01MDUsMTI4ICs1MDMsMyBAQCBfaGFzaF9nZXRfbmV3YnVja2V0X2Zyb21fb2xkYnVj a2V0KFJlbGF0aW9uIHJlbCwgQnVja2V0IG9sZF9idWNrZXQsCiAKIAlyZXR1cm4gbmV3X2J1Y2tl dDsKIH0KLQotLyoKLSAqIF9oYXNoX2tpbGxfaXRlbXMgLSBzZXQgTFBfREVBRCBzdGF0ZSBmb3Ig aXRlbXMgYW4gaW5kZXhzY2FuIGNhbGxlciBoYXMKLSAqIHRvbGQgdXMgd2VyZSBraWxsZWQuCi0g KgotICogc2Nhbi0+b3BhcXVlLCByZWZlcmVuY2VkIGxvY2FsbHkgdGhyb3VnaCBzbywgY29udGFp bnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlCi0gKiBjdXJyZW50IHBhZ2UgYW5kIGtpbGxlZCB0dXBs ZXMgdGhlcmVvbiAoZ2VuZXJhbGx5LCB0aGlzIHNob3VsZCBvbmx5IGJlCi0gKiBjYWxsZWQgaWYg c28tPm51bUtpbGxlZCA+IDApLgotICoKLSAqIFRoZSBjYWxsZXIgZG9lcyBub3QgaGF2ZSBhIGxv Y2sgb24gdGhlIHBhZ2UgYW5kIG1heSBvciBtYXkgbm90IGhhdmUgdGhlCi0gKiBwYWdlIHBpbm5l ZCBpbiBhIGJ1ZmZlci4gIE5vdGUgdGhhdCByZWFkLWxvY2sgaXMgc3VmZmljaWVudCBmb3Igc2V0 dGluZwotICogTFBfREVBRCBzdGF0dXMgKHdoaWNoIGlzIG9ubHkgYSBoaW50KS4KLSAqCi0gKiBU aGUgY2FsbGVyIG11c3QgaGF2ZSBwaW4gb24gYnVja2V0IGJ1ZmZlciwgYnV0IG1heSBvciBtYXkg bm90IGhhdmUgcGluCi0gKiBvbiBvdmVyZmxvdyBidWZmZXIsIGFzIGluZGljYXRlZCBieSBIYXNo U2NhblBvc0lzUGlubmVkKHNvLT5jdXJyUG9zKS4KLSAqCi0gKiBXZSBtYXRjaCBpdGVtcyBieSBo ZWFwIFRJRCBiZWZvcmUgYXNzdW1pbmcgdGhleSBhcmUgdGhlIHJpZ2h0IG9uZXMgdG8KLSAqIGRl bGV0ZS4KLSAqCi0gKiBUaGVyZSBhcmUgbmV2ZXIgYW55IHNjYW5zIGFjdGl2ZSBpbiBhIGJ1Y2tl dCBhdCB0aGUgdGltZSBWQUNVVU0gYmVnaW5zLAotICogYmVjYXVzZSBWQUNVVU0gdGFrZXMgYSBj bGVhbnVwIGxvY2sgb24gdGhlIHByaW1hcnkgYnVja2V0IHBhZ2UgYW5kIHNjYW5zCi0gKiBob2xk IGEgcGluLiAgQSBzY2FuIGNhbiBiZWdpbiBhZnRlciBWQUNVVU0gbGVhdmVzIHRoZSBwcmltYXJ5 IGJ1Y2tldCBwYWdlCi0gKiBidXQgYmVmb3JlIGl0IGZpbmlzaGVzIHRoZSBlbnRpcmUgYnVja2V0 LCBidXQgaXQgY2FuIG5ldmVyIHBhc3MgVkFDVVVNLAotICogYmVjYXVzZSBWQUNVVU0gYWx3YXlz IGxvY2tzIHRoZSBuZXh0IHBhZ2UgYmVmb3JlIHJlbGVhc2luZyB0aGUgbG9jayBvbgotICogdGhl IHByZXZpb3VzIG9uZS4gIFRoZXJlZm9yZSwgd2UgZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCBh Y2NpZGVudGFsbHkKLSAqIGtpbGxpbmcgYSBUSUQgdGhhdCBoYXMgYmVlbiByZXVzZWQgZm9yIGFu IHVucmVsYXRlZCB0dXBsZS4KLSAqLwotdm9pZAotX2hhc2hfa2lsbF9pdGVtcyhJbmRleFNjYW5E ZXNjIHNjYW4pCi17Ci0JSGFzaFNjYW5PcGFxdWUgc28gPSAoSGFzaFNjYW5PcGFxdWUpIHNjYW4t Pm9wYXF1ZTsKLQlSZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOwotCUJsb2NrTnVt YmVyIGJsa25vOwotCUJ1ZmZlcgkJYnVmOwotCVBhZ2UJCXBhZ2U7Ci0JSGFzaFBhZ2VPcGFxdWUg b3BhcXVlOwotCU9mZnNldE51bWJlciBvZmZudW0sCi0JCQkJbWF4b2ZmOwotCWludAkJCW51bUtp bGxlZCA9IHNvLT5udW1LaWxsZWQ7Ci0JaW50CQkJaTsKLQlib29sCQlraWxsZWRzb21ldGhpbmcg PSBmYWxzZTsKLQlib29sCQloYXZlUGluID0gZmFsc2U7Ci0KLQlBc3NlcnQoc28tPm51bUtpbGxl ZCA+IDApOwotCUFzc2VydChzby0+a2lsbGVkSXRlbXMgIT0gTlVMTCk7Ci0JQXNzZXJ0KEhhc2hT Y2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpOwotCi0JLyoKLQkgKiBBbHdheXMgcmVzZXQgdGhl IHNjYW4gc3RhdGUsIHNvIHdlIGRvbid0IGxvb2sgZm9yIHNhbWUgaXRlbXMgb24gb3RoZXIKLQkg KiBwYWdlcy4KLQkgKi8KLQlzby0+bnVtS2lsbGVkID0gMDsKLQotCWJsa25vID0gc28tPmN1cnJQ b3MuY3VyclBhZ2U7Ci0JaWYgKEhhc2hTY2FuUG9zSXNQaW5uZWQoc28tPmN1cnJQb3MpKQotCXsK LQkJLyoKLQkJICogV2UgYWxyZWFkeSBoYXZlIHBpbiBvbiB0aGlzIGJ1ZmZlciwgc28sIGFsbCB3 ZSBuZWVkIHRvIGRvIGlzCi0JCSAqIGFjcXVpcmUgbG9jayBvbiBpdC4KLQkJICovCi0JCWhhdmVQ aW4gPSB0cnVlOwotCQlidWYgPSBzby0+Y3VyclBvcy5idWY7Ci0JCUxvY2tCdWZmZXIoYnVmLCBC VUZGRVJfTE9DS19TSEFSRSk7Ci0JfQotCWVsc2UKLQkJYnVmID0gX2hhc2hfZ2V0YnVmKHJlbCwg Ymxrbm8sIEhBU0hfUkVBRCwgTEhfT1ZFUkZMT1dfUEFHRSk7Ci0KLQlwYWdlID0gQnVmZmVyR2V0 UGFnZShidWYpOwotCW9wYXF1ZSA9IEhhc2hQYWdlR2V0T3BhcXVlKHBhZ2UpOwotCW1heG9mZiA9 IFBhZ2VHZXRNYXhPZmZzZXROdW1iZXIocGFnZSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnVtS2ls bGVkOyBpKyspCi0JewotCQlpbnQJCQlpdGVtSW5kZXggPSBzby0+a2lsbGVkSXRlbXNbaV07Ci0J CUhhc2hTY2FuUG9zSXRlbSAqY3Vyckl0ZW0gPSAmc28tPmN1cnJQb3MuaXRlbXNbaXRlbUluZGV4 XTsKLQotCQlvZmZudW0gPSBjdXJySXRlbS0+aW5kZXhPZmZzZXQ7Ci0KLQkJQXNzZXJ0KGl0ZW1J bmRleCA+PSBzby0+Y3VyclBvcy5maXJzdEl0ZW0gJiYKLQkJCSAgIGl0ZW1JbmRleCA8PSBzby0+ Y3VyclBvcy5sYXN0SXRlbSk7Ci0KLQkJd2hpbGUgKG9mZm51bSA8PSBtYXhvZmYpCi0JCXsKLQkJ CUl0ZW1JZAkJaWlkID0gUGFnZUdldEl0ZW1JZChwYWdlLCBvZmZudW0pOwotCQkJSW5kZXhUdXBs ZQlpdHVwbGUgPSAoSW5kZXhUdXBsZSkgUGFnZUdldEl0ZW0ocGFnZSwgaWlkKTsKLQotCQkJaWYg KEl0ZW1Qb2ludGVyRXF1YWxzKCZpdHVwbGUtPnRfdGlkLCAmY3Vyckl0ZW0tPmhlYXBUaWQpKQot CQkJewotCQkJCWlmICgha2lsbGVkc29tZXRoaW5nKQotCQkJCXsKLQkJCQkJLyoKLQkJCQkJICog VXNlIHRoZSBoaW50IGJpdCBpbmZyYXN0cnVjdHVyZSB0byBjaGVjayBpZiB3ZSBjYW4KLQkJCQkJ ICogdXBkYXRlIHRoZSBwYWdlIHdoaWxlIGp1c3QgaG9sZGluZyBhIHNoYXJlIGxvY2suIElmIHdl Ci0JCQkJCSAqIGFyZSBub3QgYWxsb3dlZCwgdGhlcmUncyBubyBwb2ludCBjb250aW51aW5nLgot CQkJCQkgKi8KLQkJCQkJaWYgKCFCdWZmZXJCZWdpblNldEhpbnRCaXRzKGJ1ZikpCi0JCQkJCQln b3RvIHVubG9ja19wYWdlOwotCQkJCX0KLQotCQkJCS8qIGZvdW5kIHRoZSBpdGVtICovCi0JCQkJ SXRlbUlkTWFya0RlYWQoaWlkKTsKLQkJCQlraWxsZWRzb21ldGhpbmcgPSB0cnVlOwotCQkJCWJy ZWFrOwkJCS8qIG91dCBvZiBpbm5lciBzZWFyY2ggbG9vcCAqLwotCQkJfQotCQkJb2ZmbnVtID0g T2Zmc2V0TnVtYmVyTmV4dChvZmZudW0pOwotCQl9Ci0JfQotCi0JLyoKLQkgKiBTaW5jZSB0aGlz IGNhbiBiZSByZWRvbmUgbGF0ZXIgaWYgbmVlZGVkLCBtYXJrIGFzIGRpcnR5IGhpbnQuIFdoZW5l dmVyCi0JICogd2UgbWFyayBhbnl0aGluZyBMUF9ERUFELCB3ZSBhbHNvIHNldCB0aGUgcGFnZSdz Ci0JICogTEhfUEFHRV9IQVNfREVBRF9UVVBMRVMgZmxhZywgd2hpY2ggaXMgbGlrZXdpc2UganVz dCBhIGhpbnQuCi0JICovCi0JaWYgKGtpbGxlZHNvbWV0aGluZykKLQl7Ci0JCW9wYXF1ZS0+aGFz aG9fZmxhZyB8PSBMSF9QQUdFX0hBU19ERUFEX1RVUExFUzsKLQkJQnVmZmVyRmluaXNoU2V0SGlu dEJpdHMoYnVmLCB0cnVlLCB0cnVlKTsKLQl9Ci0KLXVubG9ja19wYWdlOgotCWlmIChoYXZlUGlu KQotCQlMb2NrQnVmZmVyKHNvLT5jdXJyUG9zLmJ1ZiwgQlVGRkVSX0xPQ0tfVU5MT0NLKTsKLQll bHNlCi0JCV9oYXNoX3JlbGJ1ZihyZWwsIGJ1Zik7Ci19CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3Nn bWwvaW5kZXhhbS5zZ21sIGIvZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbAppbmRleCA5OTcyZjYy Y2YuLmFmZTE1MGViNCAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbAorKysg Yi9kb2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21sCkBAIC03MzUsNyArNzM1LDggQEAgYW1iZWdpbnNj YW4gKFJlbGF0aW9uIGluZGV4UmVsYXRpb24sCiAgICA8bGl0ZXJhbD5zY2FuLSZndDt4c19yZWNo ZWNrPC9saXRlcmFsPiBoZXJlLCBpbgogICAgPGZ1bmN0aW9uPmFtYmVnaW5zY2FuPC9mdW5jdGlv bj4sIHNpbmNlIHRoZSB2YWx1ZSBhcHBsaWVzIHRvIGV2ZXJ5IGl0ZW0gdGhlCiAgICBzY2FuIHJl dHVybnMuICBUaGUgdmFsdWUgc2V0IGhlcmUgcGVyc2lzdHMgYWNyb3NzIGFueSBzdWJzZXF1ZW50 Ci0gICA8ZnVuY3Rpb24+YW1yZXNjYW48L2Z1bmN0aW9uPiBjYWxscy4gIEItdHJlZSAoYWx3YXlz IGZhbHNlKSB3b3JrIHRoaXMgd2F5LgorICAgPGZ1bmN0aW9uPmFtcmVzY2FuPC9mdW5jdGlvbj4g Y2FsbHMuICBCLXRyZWUgKGFsd2F5cyBmYWxzZSkgYW5kIGhhc2ggKGFsd2F5cworICAgdHJ1ZSkg d29yayB0aGlzIHdheS4KICAgPC9wYXJhPgogCiAgIDxwYXJhPgpAQCAtODczLDcgKzg3NCw4IEBA IGFtZ2V0YmF0Y2ggKEluZGV4U2NhbkRlc2Mgc2NhbiwKICAgIEl0IGlzIHVwIHRvIHRoZSB0YWJs ZSBBTSBjYWxsZXIgdG8gZGVjaWRlIHdoZW4gaXQgc2hvdWxkIGJlIHJlbGVhc2VkLiAgTm90ZQog ICAgYWxzbyB0aGF0IDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gZnVuY3Rpb25zIG11 c3QgbmV2ZXIgbW9kaWZ5IHRoZQogICAgPHN0cnVjdGZpZWxkPnByaW9yYmF0Y2g8L3N0cnVjdGZp ZWxkPiBwYXJhbWV0ZXIuICBUaGUgY29yZQotICAgPGZpbGVuYW1lPnNyYy9iYWNrZW5kL2FjY2Vz cy9uYnRyZWUvPC9maWxlbmFtZT4gaW1wbGVtZW50YXRpb24gcHJvdmlkZXMgYQorICAgPGZpbGVu YW1lPnNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvPC9maWxlbmFtZT4gYW5kCisgICA8ZmlsZW5h bWU+c3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvPC9maWxlbmFtZT4gaW1wbGVtZW50YXRpb25zIHBy b3ZpZGUKICAgIHJlZmVyZW5jZSBleGFtcGxlcyBvZiB0aGUgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8 L2Z1bmN0aW9uPiBpbnRlcmZhY2UuCiAgIDwvcGFyYT4KIApAQCAtOTI4LDEyICs5MzAsMTIgQEAg YW11bmd1YXJkYmF0Y2ggKEluZGV4U2NhbkRlc2Mgc2NhbiwKICAgIGxlYWYgcGFnZSwgd2hpY2gg cHJldmVudHMgY29uY3VycmVudCBUSUQgcmVjeWNsaW5nIGJ5CiAgICA8Y29tbWFuZD5WQUNVVU08 L2NvbW1hbmQ+LgogICAgRm9ybWFsbHksIGFuIGluZGV4IEFNIG1heSBob2xkIGEgZGlmZmVyZW50 IGtpbmQgb2YgaW50ZXJsb2NrLCBvciBtdWx0aXBsZQotICAgaW50ZXJsb2NrcywgaW4gaXRzIHBl ci1iYXRjaCBvcGFxdWUgYXJlYSwgYnV0IGluIHByYWN0aWNlIHRoZSBidWlsdC1pbgotICAgaW5k ZXggQU0gdGhhdCBzdXBwb3J0cyA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+ICZtZGFz aDsgQi10cmVlCi0gICAmbWRhc2g7IGhvbGRzIGEgc2luZ2xlIGJ1ZmZlciBwaW4uICBTZWUgPHhy ZWYgbGlua2VuZD0iaW5kZXgtbG9ja2luZyIvPiBmb3IKLSAgIGRldGFpbHMgb24gYnVmZmVyIHBp biBtYW5hZ2VtZW50IGR1cmluZyBpbmRleCBzY2Fucy4gIFRoaXMgZnVuY3Rpb24gd2lsbCBiZQot ICAgY2FsbGVkIGF0IG1vc3Qgb25jZSBmb3IgZWFjaCBndWFyZGVkIGJhdGNoOyBpdCBpcyBub3Qg Y2FsbGVkIHdoZW4gdGhlIGluZGV4Ci0gICBBTSBoYXMgYWxyZWFkeSB1bmd1YXJkZWQgdGhlIGJh dGNoIGl0c2VsZiAoYXMgaXQgZG9lcyB3aGVuCisgICBpbnRlcmxvY2tzLCBpbiBpdHMgcGVyLWJh dGNoIG9wYXF1ZSBhcmVhLCBidXQgaW4gcHJhY3RpY2UgYm90aCBidWlsdC1pbgorICAgaW5kZXgg QU1zIHRoYXQgc3VwcG9ydCA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+ICZtZGFzaDsg Qi10cmVlIGFuZAorICAgaGFzaCAmbWRhc2g7IGhvbGQgYSBzaW5nbGUgYnVmZmVyIHBpbi4gIFNl ZSA8eHJlZiBsaW5rZW5kPSJpbmRleC1sb2NraW5nIi8+CisgICBmb3IgZGV0YWlscyBvbiBidWZm ZXIgcGluIG1hbmFnZW1lbnQgZHVyaW5nIGluZGV4IHNjYW5zLiAgVGhpcyBmdW5jdGlvbgorICAg d2lsbCBiZSBjYWxsZWQgYXQgbW9zdCBvbmNlIGZvciBlYWNoIGd1YXJkZWQgYmF0Y2g7IGl0IGlz IG5vdCBjYWxsZWQgd2hlbgorICAgdGhlIGluZGV4IEFNIGhhcyBhbHJlYWR5IHVuZ3VhcmRlZCB0 aGUgYmF0Y2ggaXRzZWxmIChhcyBpdCBkb2VzIHdoZW4KICAgIDxzdHJ1Y3RmaWVsZD5iYXRjaElt bWVkaWF0ZVVuZ3VhcmQ8L3N0cnVjdGZpZWxkPiBpcyB0cnVlLCB3aGljaCBpcyB0aGUKICAgIGNv bW1vbiBjYXNlKS4KICAgPC9wYXJhPgpAQCAtOTczLDggKzk3NSw4IEBAIGFta2lsbGl0ZW1zYmF0 Y2ggKEluZGV4U2NhbkRlc2Mgc2NhbiwKICAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlv bj4gaW5kZXggQU1zICh0aG9zZSB0aGF0IGRvbid0IGNhbiBsZWF2ZQogICAgdGhlIGZpZWxkIHNl dCB0byA8bGl0ZXJhbD5OVUxMPC9saXRlcmFsPiksIGJ1dCBkb2luZyBzbyBpcyByZWNvbW1lbmRl ZCBmb3IKICAgIHBlcmZvcm1hbmNlLCBhcyBpdCBhbGxvd3MgZnV0dXJlIHNjYW5zIHRvIHNraXAg a25vd24tZGVhZCBpbmRleCBlbnRyaWVzLgotICAgVGhlIGNvcmUgaW5kZXggYWNjZXNzIG1ldGhv ZCB0aGF0IGN1cnJlbnRseSBzdXBwb3J0cwotICAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0 aW9uPiAoQi10cmVlKSBpbXBsZW1lbnRzCisgICBCb3RoIGNvcmUgaW5kZXggYWNjZXNzIG1ldGhv ZHMgdGhhdCBjdXJyZW50bHkgc3VwcG9ydAorICAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0 aW9uPiAoQi10cmVlIGFuZCBoYXNoKSBpbXBsZW1lbnQKICAgIDxsaXRlcmFsPkxQX0RFQUQ8L2xp dGVyYWw+IG1hcmtpbmcsIHRob3VnaCB0aGlyZC1wYXJ0eSBpbmRleCBhY2Nlc3MgbWV0aG9kcwog ICAgYXJlIGZyZWUgdG8gY2hvb3NlIHdoZXRoZXIgdG8gaW1wbGVtZW50IHRoaXMgZmVhdHVyZS4g IFRoZSB0YWJsZSBBTSBtYXkKICAgIGNhbGwgPGZ1bmN0aW9uPnRhYmxlYW1fdXRpbF9zY2FucG9z X2tpbGxpdGVtPC9mdW5jdGlvbj4gdG8gbWFyayBkZWFkIGl0ZW1zIGFzCkBAIC0xMDE0LDcgKzEw MTYsOCBAQCBhbWtpbGxpdGVtc2JhdGNoIChJbmRleFNjYW5EZXNjIHNjYW4sCiAgICA8Y29tbWFu ZD5WQUNVVU08L2NvbW1hbmQ+IHJlY3ljbGluZyB0YWJsZSBUSURzICZtZGFzaDsgc28gaXQgd291 bGQgYmUKICAgIHVuc2FmZSB0byBhc3N1bWUgdGhhdCBpbmRleCBlbnRyaWVzIHN0aWxsIHBvaW50 IHRvIHRoZSBzYW1lIGhlYXAvdGFibGUKICAgIHR1cGxlcy4gIFNpbmNlIDxsaXRlcmFsPkxQX0RF QUQ8L2xpdGVyYWw+IG1hcmtpbmcgaXMgb25seSBhbiBvcHRpbWl6YXRpb24KLSAgIGhpbnQsIGl0 IGlzIGFsd2F5cyBzYWZlIHRvIHNraXAgaXQuICBCLXRyZWUgdXNlcyB0aGlzIGFwcHJvYWNoLgor ICAgaGludCwgaXQgaXMgYWx3YXlzIHNhZmUgdG8gc2tpcCBpdC4gIEJvdGggQi10cmVlIGFuZCBo YXNoIHVzZSB0aGlzCisgICBhcHByb2FjaC4KICAgPC9wYXJhPgogCiAgIDx3YXJuaW5nPgpAQCAt MTEwNCw4ICsxMTA3LDggQEAgYW1nZXRiaXRtYXAgKEluZGV4U2NhbkRlc2Mgc2NhbiwKICAgIDxm dW5jdGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+IHNjYW5zOyBkdXJpbmcKICAgIDxmdW5jdGlv bj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gc2NhbnMgdGhlIDxsaXRlcmFsPnByaW9yYmF0Y2g8L2xp dGVyYWw+CiAgICBpcyBzdHJpY3RseSBvd25lZCBieSB0aGUgY2FsbGVyICh0aGUgdGFibGUgQU0p LCBhbmQgdGhlIGluZGV4IEFNIG11c3QKLSAgIG5ldmVyIHJlbGVhc2UgaXQuICBTZWUgPGZ1bmN0 aW9uPl9idF9uZXh0PC9mdW5jdGlvbj4gZm9yIGEgcmVmZXJlbmNlCi0gICBleGFtcGxlLgorICAg bmV2ZXIgcmVsZWFzZSBpdC4gIFNlZSA8ZnVuY3Rpb24+X2J0X25leHQ8L2Z1bmN0aW9uPiBhbmQK KyAgIDxmdW5jdGlvbj5faGFzaF9uZXh0PC9mdW5jdGlvbj4gZm9yIHJlZmVyZW5jZSBleGFtcGxl cy4KICAgPC9wYXJhPgogCiAgIDxwYXJhPgpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50 L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCBk ODJlZGQwMDkuLmM3MGE1YzA5YSAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVk ZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTEyMzQs NiArMTIzNCw3IEBAIEhhc2gKIEhhc2hBZ2dCYXRjaAogSGFzaEFnZ1NwaWxsCiBIYXNoQWxsb2NG dW5jCitIYXNoQmF0Y2hEYXRhCiBIYXNoQnVpbGRTdGF0ZQogSGFzaEJ1bGtEZWxldGVTdHJlYW1Q cml2YXRlCiBIYXNoQ29tcGFyZUZ1bmMKQEAgLTEyNTUsOCArMTI1Niw2IEBAIEhhc2hQYWdlU3Rh dAogSGFzaFBhdGgKIEhhc2hTY2FuT3BhcXVlCiBIYXNoU2Nhbk9wYXF1ZURhdGEKLUhhc2hTY2Fu UG9zRGF0YQotSGFzaFNjYW5Qb3NJdGVtCiBIYXNoU2tld0J1Y2tldAogSGFzaFN0YXRlCiBIYXNo VmFsdWVGdW5jCi0tIAoyLjUzLjAKCg== --000000000000d6f56006543b3e3b Content-Type: application/octet-stream; name="v27-0004-WIP-Adopt-amgetbatch-interface-in-GiST-index-AM.patch" Content-Disposition: attachment; filename="v27-0004-WIP-Adopt-amgetbatch-interface-in-GiST-index-AM.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqe4shl56 RnJvbSBjYzQxNjI5YzliNTQ0ZjRhNjRiNzNkNjQyNTkzYWJjZTgzNGIxOTdmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IE1v biwgMSBKdW4gMjAyNiAxOTozNTo0NyAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggdjI3IDQvOV0gV0lQ OiBBZG9wdCBhbWdldGJhdGNoIGludGVyZmFjZSBpbiBHaVNUIGluZGV4IEFNLgoKUmVwbGFjZSBn aXN0Z2V0dHVwbGUgd2l0aCBnaXN0Z2V0YmF0Y2gsIGEgZnVuY3Rpb24gdGhhdCBpbXBsZW1lbnRz IHRoZQpuZXcgYW1nZXRiYXRjaCBpbnRlcmZhY2UgYWRkZWQgYnkgY29tbWl0IEZJWE1FLiAgUGxh aW4gaW5kZXggc2NhbnMgb2YKR2lTVCBpbmRleGVzIG5vdyByZXR1cm4gbWF0Y2hpbmcgaXRlbXMg aW4gYmF0Y2hlcyBjb25zaXN0aW5nIG9mIGFsbCBvZgp0aGUgbWF0Y2hlcyBmcm9tIGEgZ2l2ZW4g bGVhZiBwYWdlLiAgVGhpcyBnaXZlcyB0aGUgdGFibGUgQU0gdGhlIGFiaWxpdHkKdG8gcGVyZm9y bSBvcHRpbWl6YXRpb25zIGxpa2UgaW5kZXggcHJlZmV0Y2hpbmcgZHVyaW5nIEdpU1QgaW5kZXgg c2NhbnMuCgpSZXR1cm5lZCBiYXRjaGVzIGhvbGQgbm8gYnVmZmVyIHBpbnMgb24gaW5kZXggcGFn ZXMsIHBlciB0aGUgYW1nZXRiYXRjaAppbnRlcmZhY2UncyBjb250cmFjdC4gIFRoaXMgZ3JlYXRs eSBzaW1wbGlmaWVzIHJlc291cmNlIG1hbmFnZW1lbnQKZHVyaW5nIGluZGV4IHByZWZldGNoaW5n LCB3aGVyZSB0aGUgcmVhZCBzdHJlYW0gaXMgZXhwZWN0ZWQgdG8gaG9sZCBtYW55CnBpbnMgb24g aGVhcCBwYWdlcy4gIFRoZSBhbWdldGJhdGNoIGludGVyZmFjZSByZXF1aXJlcyB0aGF0IGluZGV4 IEFNcwp0YWtlIHRoZSBzYW1lIHN0YW5kYXJkaXplZCBhcHByb2FjaCB0byBwaW4gbWFuYWdlbWVu dCBmb3IgcGlucyB0aGF0IGFyZQp1c2VkIHRvIHByZXZlbnQgdW5zYWZlIGNvbmN1cnJlbnQgVElE IHJlY3ljbGluZyBieSBWQUNVVU0gKHRoYXQgd2F5CnByZWZldGNoaW5nIGNhbiBob2xkIG9wZW4g bXVsdGlwbGUgYmF0Y2hlcyB3aXRob3V0IGl0IGFmZmVjdGluZyB0aGUgcmVhZApzdHJlYW0pLiAg Rm9yIGFuIG9yZGluYXJ5IEdpU1QgYmF0Y2ggdGhpcyBpbnRlcmxvY2sgcGluIGlzIHRoZSBwaW4g b24KaXRzIHNpbmdsZSBsZWFmIHBhZ2UsIGhlbGQgb25seSBmb3IgYXMgbG9uZyBhcyB0aGUgdGFi bGUgQU0gc3RpbGwgbmVlZHMKaXQgYXMgYW4gaW50ZXJsb2NrIChqdXN0IGxpa2UgZHVyaW5nIG5i dHJlZSBhbmQgaGFzaCBzY2FucykuCgpOZWFyZXN0LW5laWdoYm9yIChvcmRlcmVkKSBzY2FucyBh cmUgaGFuZGxlZCBxdWl0ZSBkaWZmZXJlbnRseSwgYmVjYXVzZQp0aGVpciBtYXRjaGVzIGRvbid0 IG5hdHVyYWxseSBhcnJpdmUgb25lIGxlYWYgcGFnZSBhdCBhIHRpbWUuICBIZXJlCmdpc3RnZXRi YXRjaCBpbnN0ZWFkIGRyYWlucyB0aGUgc2NhbidzIGRpc3RhbmNlLW9yZGVyZWQgcGFpcmluZyBo ZWFwLApwYWNraW5nIHRoZSBtYXRjaGluZyBsZWFmIGl0ZW1zIGludG8gYSBzaW5nbGUgInZpcnR1 YWwiIGJhdGNoIGluCmRpc3RhbmNlIG9yZGVyLCB0eXBpY2FsbHkgc3Bhbm5pbmcgbWFueSBsZWFm IHBhZ2VzLiAgV2UncmUgZWZmZWN0aXZlbHkKcHJldGVuZGluZyB0aGF0IHRoZSBtYXRjaGVzIHdl IGZvdW5kIHdlcmUgaW4gdXNlZnVsIG9yZGVyLCB0b2dldGhlciBvbgp0aGUgc2FtZSBsZWFmIHBh Z2UgLS0gdGhvdWdoIHRoYXQgaXNuJ3QgcmVhbGx5IHRydWUuICBWaXJ0dWFsIGJhdGNoZXMKY29t ZSB3aXRoIHJlc3RyaWN0aW9ucyB0aGF0IG1ha2UgdGhlIHByZXRlbnNlIHNhZmU6IGFuIG9yZGVy ZWQgc2NhbiBpcwpuZXZlciBwbGFubmVkIGFzIGFuIGluZGV4LW9ubHkgc2NhbiwgYW5kIGdpc3Rr aWxsaXRlbXNiYXRjaCBkb2VzIG5vdGhpbmcKZm9yIGEgdmlydHVhbCBiYXRjaC4gIEEgdmlydHVh bCBiYXRjaCB0aGVyZWZvcmUgbmV2ZXIgaG9sZHMgYSBUSUQKcmVjeWNsaW5nIGludGVybG9jayBw aW4gYXQgYWxsOyB0aGUgcGluIG9uIGVhY2ggdW5kZXJseWluZyBsZWFmIHBhZ2UgaXMKaW5zdGVh ZCBkcm9wcGVkIHJpZ2h0IGF3YXksIGFzIHRoZSBwYWdlIGlzIHNjYW5uZWQgaW50byB0aGUgcXVl dWUuCgpUaGUgaW50ZXJsb2NrIHBpbiBhbHNvIGZpeGVzIGEgcHJlLWV4aXN0aW5nIGJ1ZyBpbiB3 aGljaCBHaVNUIGluZGV4LW9ubHkKc2NhbnMgY291bGQgcmV0dXJuIHdyb25nIGFuc3dlcnMgWzFd LiAgQW4gaW5kZXgtb25seSBzY2FuIHRydXN0cyB0aGUKdmlzaWJpbGl0eSBtYXAgaW5zdGVhZCBv ZiBmZXRjaGluZyB0aGUgaGVhcCB0dXBsZSwgc28gaXQgbXVzdCBrZWVwClZBQ1VVTSBmcm9tIHJl Y3ljbGluZyBhIGhlYXAgVElEIGJldHdlZW4gdGhlIG1vbWVudCBpdCByZWFkcyBhbiBpbmRleApl bnRyeSBhbmQgdGhlIG1vbWVudCBpdCBjb25zdWx0cyB0aGUgdmlzaWJpbGl0eSBtYXA7IG90aGVy d2lzZSBpdCBjYW4KcmVwb3J0IGluZGV4ZWQgdmFsdWVzIHRoYXQgYmVsb25nIHRvIGFuIHVucmVs YXRlZCwgc2luY2UtcmVjeWNsZWQgaGVhcAp0dXBsZS4gIFRoZSByZXRhaW5lZCBsZWFmLXBhZ2Ug YnVmZmVyIHBpbiBpcyB0aGF0IGludGVybG9jayAtLSBidXQgb25seQppZiBWQUNVVU0gaG9ub3Jz IGl0LiAgZ2lzdHZhY3V1bXBhZ2UgdGhlcmVmb3JlIG5vdyBhY3F1aXJlcyBhIGNsZWFudXAKbG9j ayBvbiBlYWNoIGxlYWYgcGFnZSAocmF0aGVyIHRoYW4gYSBwbGFpbiBleGNsdXNpdmUgbG9jayks IHNvIGEKY29uY3VycmVudCBzY2FuJ3MgcGluIGhvbGRzIFZBQ1VVTSBvZmYgZnJvbSByZWN5Y2xp bmcgdGhhdCBwYWdlJ3MgVElEcwp1bnRpbCB0aGUgc2NhbiBoYXMgZmluaXNoZWQgaXRzIHZpc2li aWxpdHkgY2hlY2tzLiAgVGhpcyBzYW1lIGludGVybG9jawpyZXF1aXJlbWVudCBpcyB3aHkgb3Jk ZXJlZCBzY2FucyBjYW5ub3QgYmUgaW5kZXgtb25seTogYSB2aXJ0dWFsIGJhdGNoCmRyb3BzIGVh Y2ggbGVhZiBwYWdlJ3MgcGluIGFzIHNvb24gYXMgdGhlIHBhZ2UgaXMgc2Nhbm5lZCwgc28gaXQg aGFzIG5vCmJvdW5kZWQgcGluIHRvIG9mZmVyIGFzIHRoZSByZWN5Y2xpbmcgaW50ZXJsb2NrIHRo YXQgYW4gaW5kZXgtb25seSBzY2FuCmRlcGVuZHMgb24uICBSYXRoZXIgdGhhbiB3b3JrIGFyb3Vu ZCB0aGF0ICh3aGljaCBzZWVtcyBwcm9oaWJpdGl2ZWx5CmNvbXBsaWNhdGVkKSwgdGhlIHBsYW5u ZXIgbmV2ZXIgYnVpbGRzIGFuIGluZGV4LW9ubHkgc2NhbiB0aGF0IHVzZXMKb3JkZXJpbmcgb3Bl cmF0b3JzOyB0aG9zZSBzY2FucyBhcmUgY29zdGVkIGFuZCBleGVjdXRlZCBhcyBwbGFpbiBpbmRl eApzY2Fucywgd2hpY2ggZmV0Y2ggYW5kIHJlY2hlY2sgdGhlIGhlYXAgdHVwbGUgYW5kIHNvIHdl cmUgbmV2ZXIgc3ViamVjdAp0byB0aGUgYnVnLgoKZ2lzdGtpbGxpdGVtc2JhdGNoICh0aGUgR2lT VCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbmV3IGFta2lsbGl0ZW1zYmF0Y2gKaW50ZXJmYWNlKSBw ZXJmb3JtcyBMUF9ERUFEIG1hcmtpbmcgb2YgZGVhZCBpbmRleCBlbnRyaWVzLCBmb2xsb3dpbmcg dGhlCnNhbWUgYXBwcm9hY2ggYXMgdGhlIG90aGVyIGFtZ2V0YmF0Y2ggQU1zOiBpdCBjb21wYXJl cyB0aGUgYmF0Y2gncyBzYXZlZApMU04gYWdhaW5zdCB0aGUgY3VycmVudCBsZWFmIHBhZ2UgTFNO IHRvIGRldGVjdCBjb25jdXJyZW50IHBhZ2UKbW9kaWZpY2F0aW9ucy4gIEl0IGRvZXMgbm90aGlu ZyBmb3IgdmlydHVhbCBiYXRjaGVzLCBzbyBuZWFyZXN0LW5laWdoYm9yCnNjYW5zIGRvbid0IHNl dCBMUF9ERUFEIGJpdHMgLS0gdGhvdWdoIHRoYXQgaXNuJ3QgcmVhbGx5IG5ldy4gIEdpU1QgZG9l cwpub3cgc2V0IExQX0RFQUQgYml0cyBkdXJpbmcgc2NhbnMgdGhhdCBvbmx5IGV2ZXIgdG91Y2gg YSBzaW5nbGUgbGVhZgpwYWdlLCBmaXhpbmcgYSBsb25nc3RhbmRpbmcgb3ZlcnNpZ2h0IGluIGl0 cyBwcmV2aW91cyBhcHByb2FjaCwgd2hpY2gKd2FzIHVuYWJsZSB0byBtYXJrIGRlYWQgaXRlbXMg aW4gdGhhdCBjYXNlIChzZWUgY2hhbmdlZCBvdXRwdXQgdG8gYW4KZXhpc3Rpbmcga2lsbHR1cGxl cy5vdXQgdGVzdCBjYXNlKS4KClRoZSBnaXN0Z2V0YmF0Y2ggaW1wbGVtZW50YXRpb24gbWFrZXMg dXNlIG9mIG5ldyBiYXRjaC1yZWxhdGVkIGNvcmUKaW5mcmFzdHJ1Y3R1cmUuICBHaVNUIG5vdyBy ZWdpc3RlcnMgYW4gYW1nZXR0cmFuc2Zvcm0gY2FsbGJhY2ssIHdoaWNoCnNldHMgdGhlIHNjYW4g ZGVzY3JpcHRvcidzIHBlci10dXBsZSByZWNoZWNrIGZsYWdzLiAgSXQgYWxzbyBzZXRzCm9yZGVy LWJ5IGRpc3RhbmNlcywgYW5kIHJlY29uc3RydWN0cyBhIGhlYXAgdHVwbGUgZm9yIGluZGV4LW9u bHkgc2NhbnMuCkl0IGlzIGNhbGxlZCBqdXN0IGJlZm9yZSB0YWJsZV9pbmRleF9nZXRuZXh0X3Ns b3QgcmV0dXJucyBhbm90aGVyIHR1cGxlLgpMaWtlIG5idHJlZSwgdGhlIHNjYW4gdXNlcyBhIGN1 cnJUdXBsZXMgc3RvcmFnZSBhcmVhIHRvIHN0b3JlIEluZGV4VHVwbGUKc3RydWN0cyBpbiB0aGVp ciBvcmlnaW5hbCBvbi1kaXNrIHJlcHJlc2VudGF0aW9uLiAgVW5saWtlIG5idHJlZSwgR2lTVAp1 c2VzIGFtZ2V0dHJhbnNmb3JtIHRvIGNvbnZlcnQgdGhlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB0 dXBsZXMgaW50byBhCmhlYXAgdHVwbGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIHVuZGVybHlpbmcg aW5kZXhlZCB0eXBlLiAgVGhpcyBzY2hlbWUKYWxzbyByZWxpZXMgb24gYSBuZXcgZmFjaWxpdHkg dGhhdCBhbGxvd3MgaW5kZXggQU1zIHRvIHJlcXVlc3QgdGhlaXIgb3duCnNlcGFyYXRlIGR5bmFt aWNhbGx5IHNpemVkIGFyZWEgZm9yIHN1cHBsZW1lbnRhbCBtZXRhZGF0YSAoR2lTVApvcGNsYXNz ZXMgaGF2ZSB0aGUgYWJpbGl0eSB0byByZXByZXNlbnQgdGhhdCBhbnkgdHVwbGUgbmVlZHMgYSBy ZWNoZWNrLApzbyB3ZSBoYXZlIHRvIHNodXR0bGUgdGhhdCBpbmZvcm1hdGlvbiBhcm91bmQgd2l0 aCB0aGUgYmF0Y2gpLgoKWzFdIGh0dHBzOi8vcG9zdGdyLmVzL20vQ0FIMi1Xej1qamlOTDlGQ2g4 QzFMLUdVSDE1ZjRXRlRXdWIyeCtfTnVjbmdjRERjSEt3QG1haWwuZ21haWwuY29tCgpBdXRob3I6 IFBldGVyIEdlb2doZWdhbiA8cGdAYm93dC5pZT4KLS0tCiBzcmMvaW5jbHVkZS9hY2Nlc3MvYW1h cGkuaCAgICAgICAgICAgICAgICAgICAgfCAgIDUgKwogc3JjL2luY2x1ZGUvYWNjZXNzL2dpc3Rf cHJpdmF0ZS5oICAgICAgICAgICAgIHwgIDc0ICsrLQogc3JjL2luY2x1ZGUvYWNjZXNzL2luZGV4 YmF0Y2guaCAgICAgICAgICAgICAgIHwgIDUwICstCiBzcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nh bi5oICAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJp bi5jICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2ludXRp bC5jICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9SRUFETUUg ICAgICAgICAgICAgICAgfCAgOTAgKystCiBzcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0LmMg ICAgICAgICAgICAgICAgfCAgIDkgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3RnZXQu YyAgICAgICAgICAgICB8IDU5NiArKysrKysrKysrKy0tLS0tLS0KIHNyYy9iYWNrZW5kL2FjY2Vz cy9naXN0L2dpc3RzY2FuLmMgICAgICAgICAgICB8ICA0NSArLQogc3JjL2JhY2tlbmQvYWNjZXNz L2dpc3QvZ2lzdHV0aWwuYyAgICAgICAgICAgIHwgICA5ICstCiBzcmMvYmFja2VuZC9hY2Nlc3Mv Z2lzdC9naXN0dmFjdXVtLmMgICAgICAgICAgfCAgIDcgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9o YXNoL2hhc2guYyAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVh cC9oZWFwYW1faW5kZXhzY2FuLmMgICAgfCAgMjIgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9pbmRl eC9hbWFwaS5jICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgv Z2VuYW0uYyAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2lu ZGV4YmF0Y2guYyAgICAgICAgIHwgIDIxICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25i dHJlZS5jICAgICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd1 dGlscy5jICAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleG9u bHlzY2FuLmMgICAgICB8ICAxMiAtCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9pbmR4cGF0 aC5jICAgICAgICAgfCAgIDUgKy0KIGNvbnRyaWIvYmxvb20vYmx1dGlscy5jICAgICAgICAgICAg ICAgICAgICAgICB8ICAgMSArCiBjb250cmliL2J0cmVlX2dpc3QvZXhwZWN0ZWQvY2FzaC5vdXQg ICAgICAgICAgfCAgIDYgKy0KIGNvbnRyaWIvYnRyZWVfZ2lzdC9leHBlY3RlZC9kYXRlLm91dCAg ICAgICAgICB8ICAgNiArLQogY29udHJpYi9idHJlZV9naXN0L2V4cGVjdGVkL2Zsb2F0NC5vdXQg ICAgICAgIHwgICA2ICstCiBjb250cmliL2J0cmVlX2dpc3QvZXhwZWN0ZWQvZmxvYXQ4Lm91dCAg ICAgICAgfCAgIDIgKy0KIGNvbnRyaWIvYnRyZWVfZ2lzdC9leHBlY3RlZC9pbnQyLm91dCAgICAg ICAgICB8ICAgNiArLQogY29udHJpYi9idHJlZV9naXN0L2V4cGVjdGVkL2ludDQub3V0ICAgICAg ICAgIHwgICA2ICstCiBjb250cmliL2J0cmVlX2dpc3QvZXhwZWN0ZWQvaW50OC5vdXQgICAgICAg ICAgfCAgIDIgKy0KIGNvbnRyaWIvYnRyZWVfZ2lzdC9leHBlY3RlZC9pbnRlcnZhbC5vdXQgICAg ICB8ICAgMiArLQogY29udHJpYi9idHJlZV9naXN0L2V4cGVjdGVkL3RpbWUub3V0ICAgICAgICAg IHwgICAyICstCiBjb250cmliL2J0cmVlX2dpc3QvZXhwZWN0ZWQvdGltZXN0YW1wLm91dCAgICAg fCAgIDIgKy0KIGNvbnRyaWIvYnRyZWVfZ2lzdC9leHBlY3RlZC90aW1lc3RhbXB0ei5vdXQgICB8 ICAgMiArLQogZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbCAgICAgICAgICAgICAgICAgICAgIHwg MTM2ICsrKy0KIC4uLi9tb2R1bGVzL2R1bW15X2luZGV4X2FtL2R1bW15X2luZGV4X2FtLmMgICB8 ICAgMSArCiAuLi4vbW9kdWxlcy9pbmRleC9leHBlY3RlZC9raWxsdHVwbGVzLm91dCAgICAgfCAg NzkgKystCiBzcmMvdGVzdC9tb2R1bGVzL2luZGV4L3NwZWNzL2tpbGx0dXBsZXMuc3BlYyAgfCAg MTggKy0KIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX2luZGV4Lm91dCAgICB8ICAx NCArLQogLi4uL3JlZ3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX2luZGV4X3NwZ2lzdC5vdXQgIHwgIDE4 ICstCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2dpc3Qub3V0ICAgICAgICAgICAgfCAgNTIg Ky0KIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2dpc3Quc3FsICAgICAgICAgICAgICAgICB8ICAgOCAr LQogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAgICAgICAgICAgIHwgICAyICsK IDQyIGZpbGVzIGNoYW5nZWQsIDg5OSBpbnNlcnRpb25zKCspLCA0MjUgZGVsZXRpb25zKC0pCgpk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2FtYXBpLmggYi9zcmMvaW5jbHVkZS9hY2Nl c3MvYW1hcGkuaAppbmRleCAwMjc5M2ExMTUuLjE1N2MxYThkZiAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvYWNjZXNzL2FtYXBpLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2FtYXBpLmgKQEAg LTIxMiw2ICsyMTIsMTAgQEAgdHlwZWRlZiB2b2lkICgqYW11bmd1YXJkYmF0Y2hfZnVuY3Rpb24p IChJbmRleFNjYW5EZXNjIHNjYW4sCiB0eXBlZGVmIHZvaWQgKCphbWtpbGxpdGVtc2JhdGNoX2Z1 bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuLAogCQkJCQkJCQkJCSAgIEluZGV4U2NhbkJhdGNo IGJhdGNoKTsKIAorLyogU2V0IHVwIHRoZSBzY2FuJ3MgeHNfaGl0dXAgb3V0cHV0IHR1cGxlIGZv ciB0aGUgZ2l2ZW4gYmF0Y2ggaXRlbSAqLwordHlwZWRlZiB2b2lkICgqYW1nZXR0cmFuc2Zvcm1f ZnVuY3Rpb24pIChJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCQkJIEluZGV4U2NhbkJhdGNo IGJhdGNoLCBpbnQgaXRlbSk7CisKIC8qIGZldGNoIGFsbCB2YWxpZCB0dXBsZXMgKi8KIHR5cGVk ZWYgaW50NjQgKCphbWdldGJpdG1hcF9mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2NhbiwKIAkJ CQkJCQkJCSAgIFRJREJpdG1hcCAqdGJtKTsKQEAgLTMyNiw2ICszMzAsNyBAQCB0eXBlZGVmIHN0 cnVjdCBJbmRleEFtUm91dGluZQogCWFtZ2V0YmF0Y2hfZnVuY3Rpb24gYW1nZXRiYXRjaDsgLyog Y2FuIGJlIE5VTEwgKi8KIAlhbXVuZ3VhcmRiYXRjaF9mdW5jdGlvbiBhbXVuZ3VhcmRiYXRjaDsg LyogY2FuIGJlIE5VTEwgKi8KIAlhbWtpbGxpdGVtc2JhdGNoX2Z1bmN0aW9uIGFta2lsbGl0ZW1z YmF0Y2g7IC8qIGNhbiBiZSBOVUxMICovCisJYW1nZXR0cmFuc2Zvcm1fZnVuY3Rpb24gYW1nZXR0 cmFuc2Zvcm07IC8qIGNhbiBiZSBOVUxMICovCiAJYW1nZXRiaXRtYXBfZnVuY3Rpb24gYW1nZXRi aXRtYXA7CS8qIGNhbiBiZSBOVUxMICovCiAJYW1lbmRzY2FuX2Z1bmN0aW9uIGFtZW5kc2NhbjsK IAlhbXBvc3Jlc2V0X2Z1bmN0aW9uIGFtcG9zcmVzZXQ7IC8qIGNhbiBiZSBOVUxMICovCmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2lzdF9wcml2YXRlLmggYi9zcmMvaW5jbHVkZS9h Y2Nlc3MvZ2lzdF9wcml2YXRlLmgKaW5kZXggNDQ1MTRmMWNiLi5hNTE5MWUxZjcgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9naXN0X3ByaXZhdGUuaAorKysgYi9zcmMvaW5jbHVkZS9h Y2Nlc3MvZ2lzdF9wcml2YXRlLmgKQEAgLTE2LDYgKzE2LDcgQEAKIAogI2luY2x1ZGUgImFjY2Vz cy9hbWFwaS5oIgogI2luY2x1ZGUgImFjY2Vzcy9naXN0LmgiCisjaW5jbHVkZSAiYWNjZXNzL2lu ZGV4YmF0Y2guaCIKICNpbmNsdWRlICJhY2Nlc3MvaXR1cC5oIgogI2luY2x1ZGUgImxpYi9wYWly aW5naGVhcC5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmbWdyLmgiCkBAIC0xMjAsMTAgKzEyMSw2 IEBAIHR5cGVkZWYgc3RydWN0IEdJU1RTZWFyY2hIZWFwSXRlbQogCUl0ZW1Qb2ludGVyRGF0YSBo ZWFwUHRyOwogCWJvb2wJCXJlY2hlY2s7CQkvKiBUIGlmIHF1YWxzIG11c3QgYmUgcmVjaGVja2Vk ICovCiAJYm9vbAkJcmVjaGVja0Rpc3RhbmNlczsJLyogVCBpZiBkaXN0YW5jZXMgbXVzdCBiZSBy ZWNoZWNrZWQgKi8KLQlIZWFwVHVwbGUJcmVjb250dXA7CQkvKiBkYXRhIHJlY29uc3RydWN0ZWQg ZnJvbSB0aGUgaW5kZXgsIHVzZWQgaW4KLQkJCQkJCQkJICogaW5kZXgtb25seSBzY2FucyAqLwot CU9mZnNldE51bWJlciBvZmZudW07CQkvKiB0cmFjayBvZmZzZXQgaW4gcGFnZSB0byBtYXJrIHR1 cGxlIGFzCi0JCQkJCQkJCSAqIExQX0RFQUQgKi8KIH0gR0lTVFNlYXJjaEhlYXBJdGVtOwogCiAv KiBVbnZpc2l0ZWQgaXRlbSwgZWl0aGVyIGluZGV4IHBhZ2Ugb3IgaGVhcCB0dXBsZSAqLwpAQCAt MTQ4LDYgKzE0NSw1NSBAQCB0eXBlZGVmIHN0cnVjdCBHSVNUU2VhcmNoSXRlbQogCShvZmZzZXRv ZihHSVNUU2VhcmNoSXRlbSwgZGlzdGFuY2VzKSArIFwKIAkgc2l6ZW9mKEluZGV4T3JkZXJCeURp c3RhbmNlKSAqIChuX2Rpc3RhbmNlcykpCiAKKy8qIFBlci1iYXRjaCBkYXRhIHByaXZhdGUgdG8g dGhlIEdpU1QgaW5kZXggQU0gKi8KK3R5cGVkZWYgc3RydWN0IEdJU1RCYXRjaERhdGEKK3sKKwkv KiBsZWFmIHBhZ2UncyBidWZmZXIgcGluICovCisJQnVmZmVyCQlidWY7CisJLyogbGVhZiBwYWdl J3MgYmxvY2sgbnVtYmVyIChJbnZhbGlkQmxvY2tOdW1iZXIgbWVhbnMgInZpcnR1YWwiIGJhdGNo KSAqLworCUJsb2NrTnVtYmVyIGJsa25vOworfSBHSVNUQmF0Y2hEYXRhOworCisvKiBBY2Nlc3Mg dGhlIEdpU1QtcHJpdmF0ZSBwZXItYmF0Y2ggZGF0YSBmcm9tIGFuIEluZGV4U2NhbkJhdGNoIHBv aW50ZXIgKi8KKyNkZWZpbmUgR0lTVEJhdGNoR2V0RGF0YShzY2FuLCBiYXRjaCkgXAorCWluZGV4 X3NjYW5fYmF0Y2hfaW5kZXhfb3BhcXVlX3N0YXRpYyhzY2FuLCBiYXRjaCwgR0lTVEJhdGNoRGF0 YSkKKworLyoKKyAqIFBlci1pdGVtIHByaXZhdGUgR2lTVCBkYXRhLiAgV2UgbGF5IG91dCB0aGUg aW5kZXggQU0ncyBkeW5hbWljIG9wYXF1ZSBhcmVhCisgKiBhcyBhbiBhcnJheSBvZiB0aGVzZSwg b25lIHBlciBiYXRjaCBpdGVtLCBhbmQgc3Vic2NyaXB0IGl0IHZpYQorICogR0lTVEJhdGNoR2V0 SXRlbS4KKyAqCisgKiBHaVNUIG1hdGNoaW5nIGlzIHBvdGVudGlhbGx5IGxvc3N5LCBhbmQgdGhl IENvbnNpc3RlbnQgZnVuY3Rpb24ncyByZWNoZWNrCisgKiBmbGFnIHZhcmllcyBmcm9tIG9uZSBp dGVtIHRvIHRoZSBuZXh0LCBzbyBldmVyeSBiYXRjaCBpdGVtIHJlY29yZHMgaXRzIG93bgorICog cXVhbCByZWNoZWNrIGZsYWc7IGdpc3RnZXR0cmFuc2Zvcm0gcmVwb3J0cyBpdCBhcyB0aGUgaXRl bSdzIHhzX3JlY2hlY2suCisgKgorICogTm90ZTogVW5vcmRlcmVkIHNjYW5zIG9ubHkgbmVlZCBh IHJlY2hlY2sgZmxhZywgc28gdGhlaXIgZHluYW1pYyBvcGFxdWUKKyAqIGFyZWEgaXMganVzdCBh IGJvb2wgYXJyYXksIHN1YnNjcmlwdGVkIHZpYSBHSVNUQmF0Y2hHZXRSZWNoZWNrLgorICovCit0 eXBlZGVmIHN0cnVjdCBHSVNUQmF0Y2hJdGVtCit7CisJYm9vbAkJcmVjaGVjazsJCS8qIFQgaWYg cXVhbHMgbXVzdCBiZSByZWNoZWNrZWQgKi8KKwlib29sCQlyZWNoZWNrRGlzdGFuY2VzOwkvKiBU IGlmIGRpc3RhbmNlcyBhcmUgbG9zc3kgbG93ZXIgYm91bmRzICovCisJLyogbnVtYmVyT2ZPcmRl ckJ5cyBlbnRyaWVzICovCisJSW5kZXhPcmRlckJ5RGlzdGFuY2UgZGlzdGFuY2VzW0ZMRVhJQkxF X0FSUkFZX01FTUJFUl07Cit9IEdJU1RCYXRjaEl0ZW07CisKKyNkZWZpbmUgU2l6ZU9mR0lTVEJh dGNoSXRlbShuX2Rpc3RhbmNlcykgXAorCShvZmZzZXRvZihHSVNUQmF0Y2hJdGVtLCBkaXN0YW5j ZXMpICsgXAorCSBzaXplb2YoSW5kZXhPcmRlckJ5RGlzdGFuY2UpICogKG5fZGlzdGFuY2VzKSkK KworLyogR2V0IGFuIGl0ZW0gZnJvbSBkeW5hbWljIGFyZWEgZHVyaW5nIGFuIG9yZGVyZWQgc2Nh biAqLworI2RlZmluZSBHSVNUQmF0Y2hHZXRJdGVtKHNjYW4sIGJhdGNoLCBpdGVtKSBcCisJKEFz c2VydE1hY3JvKChzY2FuKS0+bnVtYmVyT2ZPcmRlckJ5cyA+IDApLCBcCisJIEFzc2VydE1hY3Jv KChpdGVtKSA+PSAwICYmIChpdGVtKSA8IE1heEluZGV4VHVwbGVzUGVyUGFnZSksIFwKKwkgKEdJ U1RCYXRjaEl0ZW0gKikgKChjaGFyICopIGluZGV4X3NjYW5fYmF0Y2hfaW5kZXhfb3BhcXVlX2R5 bigoc2NhbiksIChiYXRjaCkpICsgXAorCQkJCQkJKFNpemUpIChpdGVtKSAqIFNpemVPZkdJU1RC YXRjaEl0ZW0oKHNjYW4pLT5udW1iZXJPZk9yZGVyQnlzKSkpCisKKy8qIEdldCBhbiBpdGVtIGZy b20gZHluYW1pYyBhcmVhIGR1cmluZyBhIG5vbi1vcmRlcmVkIHNjYW4gKi8KKyNkZWZpbmUgR0lT VEJhdGNoR2V0UmVjaGVjayhzY2FuLCBiYXRjaCkgXAorCShBc3NlcnRNYWNybygoc2NhbiktPm51 bWJlck9mT3JkZXJCeXMgPT0gMCksIFwKKwkgKGJvb2wgKikgaW5kZXhfc2Nhbl9iYXRjaF9pbmRl eF9vcGFxdWVfZHluKChzY2FuKSwgKGJhdGNoKSkpCisKIC8qCiAgKiBHSVNUU2Nhbk9wYXF1ZURh dGE6IHByaXZhdGUgc3RhdGUgZm9yIGEgc2NhbiBvZiBhIEdpU1QgaW5kZXgKICAqLwpAQCAtMTU5 LDIzICsyMDUsOSBAQCB0eXBlZGVmIHN0cnVjdCBHSVNUU2Nhbk9wYXF1ZURhdGEKIAlwYWlyaW5n aGVhcCAqcXVldWU7CQkJLyogcXVldWUgb2YgdW52aXNpdGVkIGl0ZW1zICovCiAJTWVtb3J5Q29u dGV4dCBxdWV1ZUN4dDsJCS8qIGNvbnRleHQgaG9sZGluZyB0aGUgcXVldWUgKi8KIAlib29sCQlx dWFsX29rOwkJLyogZmFsc2UgaWYgcXVhbCBjYW4gbmV2ZXIgYmUgc2F0aXNmaWVkICovCi0JYm9v bAkJZmlyc3RDYWxsOwkJLyogdHJ1ZSB1bnRpbCBmaXJzdCBnaXN0Z2V0dHVwbGUgY2FsbCAqLwog CiAJLyogcHJlLWFsbG9jYXRlZCB3b3Jrc3BhY2UgYXJyYXlzICovCiAJSW5kZXhPcmRlckJ5RGlz dGFuY2UgKmRpc3RhbmNlczsJLyogb3V0cHV0IGFyZWEgZm9yIGdpc3RpbmRleF9rZXl0ZXN0ICov Ci0KLQkvKiBpbmZvIGFib3V0IGtpbGxlZCBpdGVtcyBpZiBhbnkgKGtpbGxlZEl0ZW1zIGlzIE5V TEwgaWYgbmV2ZXIgdXNlZCkgKi8KLQlPZmZzZXROdW1iZXIgKmtpbGxlZEl0ZW1zOwkvKiBvZmZz ZXQgbnVtYmVycyBvZiBraWxsZWQgaXRlbXMgKi8KLQlpbnQJCQludW1LaWxsZWQ7CQkvKiBudW1i ZXIgb2YgY3VycmVudGx5IHN0b3JlZCBpdGVtcyAqLwotCUJsb2NrTnVtYmVyIGN1ckJsa25vOwkJ LyogY3VycmVudCBudW1iZXIgb2YgYmxvY2sgKi8KLQlHaXN0TlNOCQljdXJQYWdlTFNOOwkJLyog cG9zIGluIHRoZSBXQUwgc3RyZWFtIHdoZW4gcGFnZSB3YXMgcmVhZCAqLwotCi0JLyogSW4gYSBu b24tb3JkZXJlZCBzZWFyY2gsIHJldHVybmFibGUgaGVhcCBpdGVtcyBhcmUgc3RvcmVkIGhlcmU6 ICovCi0JR0lTVFNlYXJjaEhlYXBJdGVtIHBhZ2VEYXRhW0JMQ0tTWiAvIHNpemVvZihJbmRleFR1 cGxlRGF0YSldOwotCU9mZnNldE51bWJlciBuUGFnZURhdGE7CQkvKiBudW1iZXIgb2YgdmFsaWQg aXRlbXMgaW4gYXJyYXkgKi8KLQlPZmZzZXROdW1iZXIgY3VyUGFnZURhdGE7CS8qIG5leHQgaXRl bSB0byByZXR1cm4gKi8KLQlNZW1vcnlDb250ZXh0IHBhZ2VEYXRhQ3h0OwkvKiBjb250ZXh0IGhv bGRpbmcgdGhlIGZldGNoZWQgdHVwbGVzLCBmb3IKLQkJCQkJCQkJICogaW5kZXgtb25seSBzY2Fu cyAqLwogfSBHSVNUU2Nhbk9wYXF1ZURhdGE7CiAKIHR5cGVkZWYgR0lTVFNjYW5PcGFxdWVEYXRh ICpHSVNUU2Nhbk9wYXF1ZTsKQEAgLTQ1OCw3ICs0OTAsMTEgQEAgZXh0ZXJuIFhMb2dSZWNQdHIg Z2lzdFhMb2dTcGxpdChib29sIHBhZ2VfaXNfbGVhZiwKIAkJCQkJCQkJQnVmZmVyIGxlZnRjaGls ZGJ1ZiwgYm9vbCBtYXJrZm9sbG93cmlnaHQpOwogCiAvKiBnaXN0Z2V0LmMgKi8KLWV4dGVybiBi b29sIGdpc3RnZXR0dXBsZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsK K2V4dGVybiB2b2lkIGdpc3RraWxsaXRlbXNiYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4 U2NhbkJhdGNoIGJhdGNoKTsKK2V4dGVybiBJbmRleFNjYW5CYXRjaCBnaXN0Z2V0YmF0Y2goSW5k ZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBwcmlvcmJhdGNoLAorCQkJCQkJCQkgICBT Y2FuRGlyZWN0aW9uIGRpcik7CitleHRlcm4gdm9pZCBnaXN0dW5ndWFyZGJhdGNoKEluZGV4U2Nh bkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpOworZXh0ZXJuIHZvaWQgZ2lzdGdldHRy YW5zZm9ybShJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoLCBpbnQgaXRl bSk7CiBleHRlcm4gaW50NjQgZ2lzdGdldGJpdG1hcChJbmRleFNjYW5EZXNjIHNjYW4sIFRJREJp dG1hcCAqdGJtKTsKIGV4dGVybiBib29sIGdpc3RjYW5yZXR1cm4oUmVsYXRpb24gaW5kZXgsIGlu dCBhdHRubyk7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9pbmRleGJhdGNoLmgg Yi9zcmMvaW5jbHVkZS9hY2Nlc3MvaW5kZXhiYXRjaC5oCmluZGV4IGNhZmZhNmE3NC4uYjIyZTAy YTUyIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaW5kZXhiYXRjaC5oCisrKyBiL3Ny Yy9pbmNsdWRlL2FjY2Vzcy9pbmRleGJhdGNoLmgKQEAgLTEwNCw2ICsxMDQsNyBAQCBpbmRleF9z Y2FuX2JhdGNoX2FwcGVuZChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNo KQogICoKICAqICAgW3RhYmxlIEFNIG9wYXF1ZSBhcmVhXSAgICA8LSBhbGxvY2F0aW9uIGJhc2Us IGF0IC0oYmF0Y2hfYmFzZV9vZmZzZXQpCiAgKiAgIFt0YWJsZSBBTSBwZXItaXRlbSBhcmVhXSAg PC0gc3VwcGxlbWVudGFsIGZsZXhpYmxlIGFycmF5IHBlci1pdGVtIGRhdGEKKyAqICAgW2luZGV4 IEFNIGR5biBvcGFxdWVdICAgICA8LSBvcHRpb25hbCwgZHluYW1pY2FsbHkgc2l6ZWQKICAqICAg W2luZGV4IEFNIHN0YXRpYyBvcGFxdWVdICA8LSBhdCAtKGJhdGNoX2luZGV4X29wYXF1ZV9zdGF0 aWMpCiAgKiAgIFtJbmRleFNjYW5CYXRjaERhdGFdICAgICAgPC0gYmF0Y2ggcG9pbnRlciwgcmV0 dXJuZWQgYnkgYW1nZXRiYXRjaAogICogICBbaXRlbXNbbWF4aXRlbXNiYXRjaF1dCkBAIC0xMTEs MTIgKzExMiwxMiBAQCBpbmRleF9zY2FuX2JhdGNoX2FwcGVuZChJbmRleFNjYW5EZXNjIHNjYW4s IEluZGV4U2NhbkJhdGNoIGJhdGNoKQogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGluZGV4LW9ubHkgc2NhbnMgKGJhdGNoX3R1cGxlc193b3Jrc3BhY2UpCiAgKgogICogYmF0Y2hf YmFzZV9vZmZzZXQgY29tYmluZXMgdGhlIHRhYmxlIEFNIG9wYXF1ZSBhcmVhIChpdHMgZml4ZWQt c2l6ZSBoZWFkZXIKLSAqIHBsdXMgaXRzIHBlci1pdGVtIGFyZWEpLCBhbmQgdGhlIHN0YXRpYyBp bmRleCBBTSBvcGFxdWUgYXJlYSBpbnRvIGEgc2luZ2xlCi0gKiBvZmZzZXQgZnJvbSB0aGUgYmF0 Y2ggcG9pbnRlciB0byB0aGUgdHJ1ZSBhbGxvY2F0aW9uIGJhc2UuICBUaGUKLSAqIGluZGV4YmF0 Y2guYyB1dGlsaXRpZXMgcGZyZWUgYSBiYXRjaCBieSBwYXNzaW5nIHBmcmVlIGEgcG9pbnRlciBy ZXR1cm5lZCBieQotICogaW5kZXhfc2Nhbl9iYXRjaF9iYXNlLiAgV2UgcmVseSBvbiB0aGUgYXNz dW1wdGlvbiB0aGF0IGJhdGNoZXMgaGF2ZSBhIGZpeGVkCi0gKiBsYXlvdXQgZm9yIHRoZSBkdXJh dGlvbiBvZiBhbiBpbmRleCBzY2FuIChiYXRjaGVzIGFyZSBjYWNoZWQgZm9yIHJldXNlIHRvCi0g KiBhdm9pZCBwYWxsb2MgY2h1cm4pLgorICogcGx1cyBpdHMgcGVyLWl0ZW0gYXJlYSksIHRoZSBv cHRpb25hbCBkeW5hbWljIGluZGV4IEFNIG9wYXF1ZSBhcmVhLCBhbmQgdGhlCisgKiBzdGF0aWMg aW5kZXggQU0gb3BhcXVlIGFyZWEgaW50byBhIHNpbmdsZSBvZmZzZXQgZnJvbSB0aGUgYmF0Y2gg cG9pbnRlciB0bworICogdGhlIHRydWUgYWxsb2NhdGlvbiBiYXNlLiAgVGhlIGluZGV4YmF0Y2gu YyB1dGlsaXRpZXMgcGZyZWUgYSBiYXRjaCBieQorICogcGFzc2luZyBwZnJlZSBhIHBvaW50ZXIg cmV0dXJuZWQgYnkgaW5kZXhfc2Nhbl9iYXRjaF9iYXNlLiAgV2UgcmVseSBvbiB0aGUKKyAqIGFz c3VtcHRpb24gdGhhdCBiYXRjaGVzIGhhdmUgYSBmaXhlZCBsYXlvdXQgZm9yIHRoZSBkdXJhdGlv biBvZiBhbiBpbmRleAorICogc2NhbiAoYmF0Y2hlcyBhcmUgY2FjaGVkIGZvciByZXVzZSB0byBh dm9pZCBwYWxsb2MgY2h1cm4pLgogICoKICAqIFRoZSB0YWJsZSBBTSBhY2Nlc3NlcyBpdHMgb3Bh cXVlIGFyZWEgdXNpbmcgdGhlIGluZGV4X3NjYW5fYmF0Y2hfdGFibGVfYXJlYQogICogc2hpbSBh Y2Nlc3Nvci4gIFRoZSBhcmVhIGlzIGEgc2luZ2xlIGNvbnRpZ3VvdXMgYmxvY2s6IGEgZml4ZWQt c2l6ZSBoZWFkZXIKQEAgLTEzMSwxMSArMTMyLDIyIEBAIGluZGV4X3NjYW5fYmF0Y2hfYXBwZW5k KEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCiAgKiBCaXRtYXAgc2Nh bnMgaW52b2x2aW5nIGFuIGFtZ2V0Yml0bWFwIHJvdXRpbmUgdGhhdCBmaW5kcyBpdCBjb252ZW5p ZW50IHRvCiAgKiByZXVzZSBiYXRjaCBpbmZyYXN0cnVjdHVyZSBpbnRlcm5hbGx5IG5ldmVyIGdl dCBhIHRhYmxlIEFNIG9wYXF1ZSBhcmVhLgogICoKLSAqIEFuIGluZGV4IEFNIGdldHMgYSBtYW5k YXRvcnkgc3RhdGljIGFyZWEgKGJhdGNoX2luZGV4X29wYXF1ZV9zdGF0aWMpLCB3aGljaAotICog aGFzIGEgc2l6ZSBrbm93biBhdCBjb21waWxlIHRpbWUgLS0gTUFYQUxJR04oc2l6ZW9mKHRoZSBB TSdzIHN0cnVjdCkpIC0tCi0gKiBhbmQgaXMgYWNjZXNzZWQgdmlhIGluZGV4X3NjYW5fYmF0Y2hf aW5kZXhfb3BhcXVlX3N0YXRpYyBhdCB0aGF0IGZpeGVkCi0gKiBvZmZzZXQuICBUaGlzIGlzIG1v cmUgZWZmaWNpZW50IGJ1dCBsZXNzIGZsZXhpYmxlIHRoYW4gdGhlIHRhYmxlIEFNIHNjaGVtZToK LSAqIGV2ZXJ5IGluZGV4IEFNIHVzZXMgdGhlIHNhbWUgZ2VuZXJpYyBmaXhlZC1zaXplIGhlYWRl ci4KKyAqIEFuIGluZGV4IEFNIGdldHMgdHdvIG9wYXF1ZSBhcmVhcywgYm90aCBiZWZvcmUgdGhl IGJhdGNoIHBvaW50ZXIsIGRpdmlkZWQgYnkKKyAqIHdoYXQgaXMga25vd24gd2hlbi4gIFRoZSBt YW5kYXRvcnkgc3RhdGljIGFyZWEgKGJhdGNoX2luZGV4X29wYXF1ZV9zdGF0aWMpCisgKiBoYXMg YSBzaXplIGtub3duIGF0IGNvbXBpbGUgdGltZSAtLSBNQVhBTElHTihzaXplb2YodGhlIEFNJ3Mg c3RydWN0KSkgLS0gYW5kCisgKiBpcyBhY2Nlc3NlZCB2aWEgaW5kZXhfc2Nhbl9iYXRjaF9pbmRl eF9vcGFxdWVfc3RhdGljIGF0IHRoYXQgZml4ZWQgb2Zmc2V0LgorICogVGhpcyBpcyBtb3JlIGVm ZmljaWVudCBidXQgbGVzcyBmbGV4aWJsZSB0aGFuIHRoZSB0YWJsZSBBTSBzY2hlbWU6IGV2ZXJ5 CisgKiBpbmRleCBBTSB1c2VzIHRoZSBzYW1lIGdlbmVyaWMgZml4ZWQtc2l6ZSBoZWFkZXIuCisg KgorICogSW5kZXggQU1zIGNhbiB1c2UgYSBzZWNvbmQsIG9wdGlvbmFsIGR5bmFtaWNhbGx5LXNp emVkIHByaXZhdGUgYXJlYQorICogKGJhdGNoX2luZGV4X29wYXF1ZV9keW4pIHRoYXQgc2l0cyBq dXN0IGJlZm9yZSB0aGUgc3RhdGljIGFyZWEuICBJdHMgc2l6ZQorICogaXMgY2hvc2VuIGF0IHNj YW4gc3RhcnQgcmF0aGVyIHRoYW4gYXQgY29tcGlsZSB0aW1lLiAgSXQgaXMgYWNjZXNzZWQgdmlh CisgKiBpbmRleF9zY2FuX2JhdGNoX2luZGV4X29wYXF1ZV9keW4uICBUaGlzIHNlY29uZCBhcmVh IGlzIGdlbmVyYWxseSBvbmx5IHVzZWQKKyAqIGR1cmluZyBzY2FucyB3aGVyZSBsYXJnZSBhbW91 bnRzIG9mIHN1cHBsZW1lbnRhbCBtZXRhZGF0YSBhcmUgcmVxdWlyZWQsCisgKiB0aGF0IGNhbm5v dCByZWFzb25hYmx5IGJlIGFsbG9jYXRlZCBmb3IgZXZlcnkgc2Nhbi4gIFR5cGljYWxseSwgdGhp cyBpcworICogZ3JhbnVsYXIgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGJhdGNoJ3MgaXRlbXMgZm9y IHVzZSBieSB0aGUgaW5kZXggQU0ncworICogYW1nZXR0cmFuc2Zvcm0gcm91dGluZS4gIEluZGV4 IEFNcyBjYW5ub3QgZXhwZWN0IHRoaXMgc3BhY2UgdG8gYmUgYWxsb2NhdGVkCisgKiBkdXJpbmcg Yml0bWFwIGluZGV4IHNjYW5zLgogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAKQEAgLTE3 Niw2ICsxODgsMjIgQEAgaW5kZXhfc2Nhbl9iYXRjaF90YWJsZV9hcmVhKEluZGV4U2NhbkRlc2Mg c2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCiAJKEFzc2VydE1hY3JvKChzY2FuKS0+YmF0Y2hf aW5kZXhfb3BhcXVlX3N0YXRpYyA9PSBNQVhBTElHTihzaXplb2YodHlwZSkpKSwgXAogCSAoKHR5 cGUgKikgKChjaGFyICopIChiYXRjaCkgLSBNQVhBTElHTihzaXplb2YodHlwZSkpKSkpCiAKKy8q CisgKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBpbmRleCBBTSdzIGR5bmFtaWMgb3BhcXVlIGFy ZWEuCisgKgorICogVGhpcyBvcHRpb25hbCBhcmVhIChzaXplZCBiYXRjaF9pbmRleF9vcGFxdWVf ZHluKSBzaXRzIGltbWVkaWF0ZWx5IGJlZm9yZQorICogdGhlIGluZGV4IEFNJ3Mgc3RhdGljIG9w YXF1ZSBhcmVhLiAgQ29yZSBjb2RlIHRyZWF0cyBpdCBhcyBhIHNpbmdsZSBvcGFxdWUKKyAqIGFs bG9jYXRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCAqCitpbmRleF9zY2FuX2JhdGNoX2lu ZGV4X29wYXF1ZV9keW4oSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCkK K3sKKwlBc3NlcnQoc2Nhbi0+YmF0Y2hfaW5kZXhfb3BhcXVlX2R5biA+IDApOworCisJcmV0dXJu IChjaGFyICopIGJhdGNoIC0gc2Nhbi0+YmF0Y2hfaW5kZXhfb3BhcXVlX3N0YXRpYyAtCisJCU1B WEFMSUdOKHNjYW4tPmJhdGNoX2luZGV4X29wYXF1ZV9keW4pOworfQorCiAvKiAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCiAgKiBFbGVtZW50YXJ5IGJhdGNoIHBvc2l0aW9uIG9wZXJhdGlvbnMKICAqIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2Fu LmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oCmluZGV4IDc1YjNhYzk5NC4uODE4MWY4 ODYyIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oCisrKyBiL3NyYy9p bmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmgKQEAgLTM2OSw2ICszNjksNyBAQCB0eXBlZGVmIHN0cnVj dCBJbmRleFNjYW5EZXNjRGF0YQogCS8qIGJhdGNoIHNpemUgaW5mb3JtYXRpb24sIHNldCBvbmNl IGJ5IGluZGV4IEFNIGluIGFtYmVnaW5zY2FuICovCiAJdWludDE2CQltYXhpdGVtc2JhdGNoOwkv KiBzaXplIG9mIGVhY2ggYmF0Y2gncyBpdGVtc1tdIGFycmF5ICovCiAJdWludDE2CQliYXRjaF9p bmRleF9vcGFxdWVfc3RhdGljOwkvKiBjb21waWxlLXRpbWUgb3BhcXVlIHNpemUgKi8KKwlTaXpl CQliYXRjaF9pbmRleF9vcGFxdWVfZHluOyAvKiBvcHRpb25hbCBkeW5hbWljIG9wYXF1ZSBzaXpl ICovCiAJdWludDE2CQliYXRjaF90dXBsZXNfd29ya3NwYWNlOyAvKiBjdXJyVHVwbGVzIHdvcmtz cGFjZSBzaXplICovCiAKIAkvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4v YnJpbi5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jCmluZGV4IDJkOWQwNGFhMy4u NDc5OWE0MGI3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmluLmMKKysr IGIvc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jCkBAIC0zMDIsNiArMzAyLDcgQEAgYnJp bmhhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAkJLmFtZ2V0YmF0Y2ggPSBOVUxMLAogCQkuYW11 bmd1YXJkYmF0Y2ggPSBOVUxMLAogCQkuYW1raWxsaXRlbXNiYXRjaCA9IE5VTEwsCisJCS5hbWdl dHRyYW5zZm9ybSA9IE5VTEwsCiAJCS5hbWdldGJpdG1hcCA9IGJyaW5nZXRiaXRtYXAsCiAJCS5h bWVuZHNjYW4gPSBicmluZW5kc2NhbiwKIAkJLmFtcG9zcmVzZXQgPSBOVUxMLApkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW51dGlsLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv Z2luL2dpbnV0aWwuYwppbmRleCAwZThiNmE1NDkuLmNlYjljYjQ0NyAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvYWNjZXNzL2dpbi9naW51dGlsLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dp bi9naW51dGlsLmMKQEAgLTg3LDYgKzg3LDcgQEAgZ2luaGFuZGxlcihQR19GVU5DVElPTl9BUkdT KQogCQkuYW1nZXRiYXRjaCA9IE5VTEwsCiAJCS5hbXVuZ3VhcmRiYXRjaCA9IE5VTEwsCiAJCS5h bWtpbGxpdGVtc2JhdGNoID0gTlVMTCwKKwkJLmFtZ2V0dHJhbnNmb3JtID0gTlVMTCwKIAkJLmFt Z2V0Yml0bWFwID0gZ2luZ2V0Yml0bWFwLAogCQkuYW1lbmRzY2FuID0gZ2luZW5kc2NhbiwKIAkJ LmFtcG9zcmVzZXQgPSBOVUxMLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3Qv UkVBRE1FIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvUkVBRE1FCmluZGV4IDc1NDQ1YjA3NC4u MDBiOTRkOWY3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9SRUFETUUKKysr IGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvUkVBRE1FCkBAIC00OCw3ICs0OCw3IEBAIFRoZSBv cmlnaW5hbCBhbGdvcml0aG1zIHdlcmUgbW9kaWZpZWQgaW4gc2V2ZXJhbCB3YXlzOgogCiAqIFRo ZXkgaGFkIHRvIGJlIGFkYXB0ZWQgdG8gUG9zdGdyZVNRTCBjb252ZW50aW9ucy4gRm9yIGV4YW1w bGUsIHRoZSBTRUFSQ0gKICAgYWxnb3JpdGhtIHdhcyBjb25zaWRlcmFibHkgY2hhbmdlZCwgYmVj YXVzZSBpbiBQb3N0Z3JlU1FMIHRoZSBzZWFyY2ggZnVuY3Rpb24KLSAgc2hvdWxkIHJldHVybiBv bmUgdHVwbGUgKG5leHQpLCBub3QgYWxsIHR1cGxlcyBhdCBvbmNlLiBBbHNvLCBpdCBzaG91bGQK KyAgcmV0dXJucyBtYXRjaGluZyB0dXBsZXMgaW5jcmVtZW50YWxseSwgbm90IGFsbCBhdCBvbmNl LiBBbHNvLCBpdCBzaG91bGQKICAgcmVsZWFzZSBwYWdlIGxvY2tzIGJldHdlZW4gY2FsbHMuCiAq IFNpbmNlIHdlIGFkZGVkIHN1cHBvcnQgZm9yIHZhcmlhYmxlIGxlbmd0aCBrZXlzLCBpdCdzIG5v dCBwb3NzaWJsZSB0bwogICBndWFyYW50ZWUgZW5vdWdoIGZyZWUgc3BhY2UgZm9yIGFsbCBrZXlz IG9uIHBhZ2VzIGFmdGVyIHNwbGl0dGluZy4gVXNlcgpAQCAtNzEsMjAgKzcxLDI0IEBAIHdhcyBu b3QgdG91Y2hlZCBpbiB0aGUgcGFwZXIuCiBTZWFyY2ggQWxnb3JpdGhtCiAtLS0tLS0tLS0tLS0t LS0tCiAKLVRoZSBzZWFyY2ggY29kZSBtYWludGFpbnMgYSBxdWV1ZSBvZiB1bnZpc2l0ZWQgaXRl bXMsIHdoZXJlIGFuICJpdGVtIiBpcwotZWl0aGVyIGEgaGVhcCB0dXBsZSBrbm93biB0byBzYXRp c2Z5IHRoZSBzZWFyY2ggY29uZGl0aW9ucywgb3IgYW4gaW5kZXgKLXBhZ2UgdGhhdCBpcyBjb25z aXN0ZW50IHdpdGggdGhlIHNlYXJjaCBjb25kaXRpb25zIGFjY29yZGluZyB0byBpbnNwZWN0aW9u Ci1vZiBpdHMgcGFyZW50IHBhZ2UncyBkb3dubGluayBpdGVtLiAgSW5pdGlhbGx5IHRoZSByb290 IHBhZ2UgaXMgc2VhcmNoZWQKLXRvIGZpbmQgdW52aXNpdGVkIGl0ZW1zIGluIGl0LiAgVGhlbiB3 ZSBwdWxsIGl0ZW1zIGZyb20gdGhlIHF1ZXVlLiAgQQotaGVhcCB0dXBsZSBwb2ludGVyIGlzIGp1 c3QgcmV0dXJuZWQgaW1tZWRpYXRlbHk7IGFuIGluZGV4IHBhZ2UgZW50cnkKLWNhdXNlcyB0aGF0 IHBhZ2UgdG8gYmUgc2VhcmNoZWQsIGdlbmVyYXRpbmcgbW9yZSBxdWV1ZSBlbnRyaWVzLgorVGhl IHNlYXJjaCBjb2RlIG1haW50YWlucyBhIHF1ZXVlIG9mIHVudmlzaXRlZCBpdGVtcy4gIEZvciBh IHBsYWluIGluZGV4CitzY2FuIGFuICJpdGVtIiBpcyBhbHdheXMgYW4gaW5kZXggcGFnZSB0aGF0 IGlzIGNvbnNpc3RlbnQgd2l0aCB0aGUgc2VhcmNoCitjb25kaXRpb25zIGFjY29yZGluZyB0byBp bnNwZWN0aW9uIG9mIGl0cyBwYXJlbnQgcGFnZSdzIGRvd25saW5rIGl0ZW07CittYXRjaGluZyBo ZWFwIHR1cGxlcyBhcmUgbm90IHF1ZXVlZCwgYnV0IGFyZSBnYXRoZXJlZCBpbnRvIGEgYmF0Y2gg YXMgZWFjaAorbGVhZiBwYWdlIGlzIHNjYW5uZWQgKHNlZSAiUmV0dXJuaW5nIG1hdGNoZXMgaW4g YmF0Y2hlcyIsIGJlbG93KS4gIEZvciBhCituZWFyZXN0LW5laWdoYm9yIChvcmRlcmVkKSBzY2Fu IHRoZSBxdWV1ZSBhZGRpdGlvbmFsbHkgaG9sZHMgaGVhcCB0dXBsZXMKK2tub3duIHRvIHNhdGlz ZnkgdGhlIHNlYXJjaCBjb25kaXRpb25zLCBzbyB0aGF0IGhlYXAgdHVwbGVzIGFuZCBpbmRleAor cGFnZXMgY2FuIGJlIGludGVybGVhdmVkIGluIGRpc3RhbmNlIG9yZGVyLiAgSW5pdGlhbGx5IHRo ZSByb290IHBhZ2UgaXMKK2FkZGVkIHRvIHRoZSBxdWV1ZS4gIFRoZW4gd2UgcHVsbCBpdGVtcyBm cm9tIHRoZSBxdWV1ZTogYW4gaW5kZXggcGFnZQorZW50cnkgY2F1c2VzIHRoYXQgcGFnZSB0byBi ZSBzY2FubmVkLCBnZW5lcmF0aW5nIG1vcmUgcXVldWUgZW50cmllcywgd2hpbGUKK2EgaGVhcCB0 dXBsZSBlbnRyeSAob3JkZXJlZCBzY2FucyBvbmx5KSBpcyBhIG1hdGNoIHRvIGJlIHJldHVybmVk LgogCi1UaGUgcXVldWUgaXMga2VwdCBvcmRlcmVkIHdpdGggaGVhcCB0dXBsZSBpdGVtcyBhdCB0 aGUgZnJvbnQsIHRoZW4KLWluZGV4IHBhZ2UgZW50cmllcywgd2l0aCBhbnkgbmV3bHktYWRkZWQg aW5kZXggcGFnZSBlbnRyeSBpbnNlcnRlZAotYmVmb3JlIGV4aXN0aW5nIGluZGV4IHBhZ2UgZW50 cmllcy4gIFRoaXMgZW5zdXJlcyBkZXB0aC1maXJzdCB0cmF2ZXJzYWwKLW9mIHRoZSBpbmRleCwg YW5kIGluIHBhcnRpY3VsYXIgY2F1c2VzIHRoZSBmaXJzdCBmZXcgaGVhcCB0dXBsZXMgdG8gYmUK LXJldHVybmVkIGFzIHNvb24gYXMgcG9zc2libGUuICBUaGF0IGlzIGhlbHBmdWwgaW4gY2FzZSB0 aGVyZSBpcyBhIExJTUlUCi10aGF0IHJlcXVpcmVzIG9ubHkgYSBmZXcgdHVwbGVzIHRvIGJlIHBy b2R1Y2VkLgorVGhlIHF1ZXVlIGlzIGtlcHQgb3JkZXJlZCBzbyB0aGF0IHdlIHBlcmZvcm0gYSBk ZXB0aC1maXJzdCB0cmF2ZXJzYWwgb2YKK3RoZSBpbmRleDogYW55IG5ld2x5LWFkZGVkIGluZGV4 IHBhZ2UgZW50cnkgaXMgaW5zZXJ0ZWQgYmVmb3JlIGV4aXN0aW5nCitpbmRleCBwYWdlIGVudHJp ZXMsIGFuZCAoZm9yIG9yZGVyZWQgc2NhbnMpIGhlYXAgdHVwbGUgaXRlbXMgYXJlIGtlcHQgYXQK K3RoZSBmcm9udC4gIFRoaXMgY2F1c2VzIHRoZSBmaXJzdCBmZXcgbWF0Y2hpbmcgaGVhcCB0dXBs ZXMgdG8gYmUgcmV0dXJuZWQKK2FzIHNvb24gYXMgcG9zc2libGUsIHdoaWNoIGlzIGhlbHBmdWwg aW4gY2FzZSB0aGVyZSBpcyBhIExJTUlUIHRoYXQKK3JlcXVpcmVzIG9ubHkgYSBmZXcgdHVwbGVz IHRvIGJlIHByb2R1Y2VkLgogCiBUbyBpbXBsZW1lbnQgbmVhcmVzdC1uZWlnaGJvciBzZWFyY2gs IHRoZSBxdWV1ZSBlbnRyaWVzIGFyZSBhdWdtZW50ZWQKIHdpdGggZGlzdGFuY2UgZGF0YTogaGVh cCB0dXBsZSBlbnRyaWVzIGFyZSBsYWJlbGVkIHdpdGggZXhhY3QgZGlzdGFuY2UKQEAgLTk0LDE3 ICs5OCwxOCBAQCBxdWV1ZSBlbnRyaWVzIGFyZSByZXRyaWV2ZWQgaW4gc21hbGxlc3QtZGlzdGFu Y2UtZmlyc3Qgb3JkZXIsIHdpdGgKIGVudHJpZXMgaGF2aW5nIGlkZW50aWNhbCBkaXN0YW5jZXMg bWFuYWdlZCBhcyBzdGF0ZWQgaW4gdGhlIHByZXZpb3VzCiBwYXJhZ3JhcGguCiAKLVRoZSBzZWFy Y2ggYWxnb3JpdGhtIGtlZXBzIGFuIGluZGV4IHBhZ2UgbG9ja2VkIG9ubHkgbG9uZyBlbm91Z2gg dG8gc2NhbgotaXRzIGVudHJpZXMgYW5kIHF1ZXVlIHRob3NlIHRoYXQgc2F0aXNmeSB0aGUgc2Vh cmNoIGNvbmRpdGlvbnMuICBTaW5jZQotaW5zZXJ0aW9ucyBjYW4gb2NjdXIgY29uY3VycmVudGx5 IHdpdGggc2VhcmNoZXMsIGl0IGlzIHBvc3NpYmxlIGZvciBhbgotaW5kZXggY2hpbGQgcGFnZSB0 byBiZSBzcGxpdCBiZXR3ZWVuIHRoZSB0aW1lIHdlIG1ha2UgYSBxdWV1ZSBlbnRyeSBmb3IgaXQK LSh3aGlsZSB2aXNpdGluZyBpdHMgcGFyZW50IHBhZ2UpIGFuZCB0aGUgdGltZSB3ZSBhY3R1YWxs eSByZWFjaCBhbmQgc2NhbgotdGhlIGNoaWxkIHBhZ2UuICBUbyBhdm9pZCBtaXNzaW5nIHRoZSBl bnRyaWVzIHRoYXQgd2VyZSBtb3ZlZCB0byB0aGUgcmlnaHQKLXNpYmxpbmcsIHdlIGRldGVjdCB3 aGV0aGVyIGEgc3BsaXQgaGFzIG9jY3VycmVkIGJ5IGNvbXBhcmluZyB0aGUgY2hpbGQKLXBhZ2Un cyBOU04gKG5vZGUgc2VxdWVuY2UgbnVtYmVyLCBhIHNwZWNpYWwtcHVycG9zZSBMU04pIHRvIHRo ZSBMU04gdGhhdAotdGhlIHBhcmVudCBoYWQgd2hlbiB2aXNpdGVkLiAgSWYgaXQgZGlkLCB0aGUg c2libGluZyBwYWdlIGlzIGltbWVkaWF0ZWx5Ci1hZGRlZCB0byB0aGUgZnJvbnQgb2YgdGhlIHF1 ZXVlLCBlbnN1cmluZyB0aGF0IGl0cyBpdGVtcyB3aWxsIGJlIHNjYW5uZWQKLWluIHRoZSBzYW1l IG9yZGVyIGFzIGlmIHRoZXkgd2VyZSBzdGlsbCBvbiB0aGUgb3JpZ2luYWwgY2hpbGQgcGFnZS4K K1RoZSBzZWFyY2ggYWxnb3JpdGhtIGtlZXBzIGFuIGluZGV4IHBhZ2UgbG9ja2VkIG9ubHkgbG9u ZyBlbm91Z2ggdG8gc2NhbiBpdHMKK2VudHJpZXMgLS0gcXVldWVpbmcgdGhlIGNoaWxkIHBhZ2Vz IHRoYXQgc2F0aXNmeSB0aGUgc2VhcmNoIGNvbmRpdGlvbnMsIGFuZAorZ2F0aGVyaW5nIGFueSBt YXRjaGluZyBoZWFwIHR1cGxlcyAoaW50byBhIGJhdGNoLCBvciBvbnRvIHRoZSBxdWV1ZSBmb3Ig YW4KK29yZGVyZWQgc2NhbikuICBTaW5jZSBpbnNlcnRpb25zIGNhbiBvY2N1ciBjb25jdXJyZW50 bHkgd2l0aCBzZWFyY2hlcywgaXQgaXMKK3Bvc3NpYmxlIGZvciBhbiBpbmRleCBjaGlsZCBwYWdl IHRvIGJlIHNwbGl0IGJldHdlZW4gdGhlIHRpbWUgd2UgbWFrZSBhIHF1ZXVlCitlbnRyeSBmb3Ig aXQgKHdoaWxlIHZpc2l0aW5nIGl0cyBwYXJlbnQgcGFnZSkgYW5kIHRoZSB0aW1lIHdlIGFjdHVh bGx5IHJlYWNoCithbmQgc2NhbiB0aGUgY2hpbGQgcGFnZS4gIFRvIGF2b2lkIG1pc3NpbmcgdGhl IGVudHJpZXMgdGhhdCB3ZXJlIG1vdmVkIHRvIHRoZQorcmlnaHQgc2libGluZywgd2UgZGV0ZWN0 IHdoZXRoZXIgYSBzcGxpdCBoYXMgb2NjdXJyZWQgYnkgY29tcGFyaW5nIHRoZSBjaGlsZAorcGFn ZSdzIE5TTiAobm9kZSBzZXF1ZW5jZSBudW1iZXIsIGEgc3BlY2lhbC1wdXJwb3NlIExTTikgdG8g dGhlIExTTiB0aGF0IHRoZQorcGFyZW50IGhhZCB3aGVuIHZpc2l0ZWQuICBJZiBpdCBkaWQsIHRo ZSBzaWJsaW5nIHBhZ2UgaXMgaW1tZWRpYXRlbHkgYWRkZWQgdG8KK3RoZSBmcm9udCBvZiB0aGUg cXVldWUsIGVuc3VyaW5nIHRoYXQgaXRzIGl0ZW1zIHdpbGwgYmUgc2Nhbm5lZCBpbiB0aGUgc2Ft ZQorb3JkZXIgYXMgaWYgdGhleSB3ZXJlIHN0aWxsIG9uIHRoZSBvcmlnaW5hbCBjaGlsZCBwYWdl LgogCiBBcyBpcyB1c3VhbCBpbiBQb3N0Z3JlcywgdGhlIHNlYXJjaCBhbGdvcml0aG0gb25seSBn dWFyYW50ZWVzIHRvIGZpbmQgaW5kZXgKIGVudHJpZXMgdGhhdCBleGlzdGVkIGJlZm9yZSB0aGUg c2NhbiBzdGFydGVkOyBpbmRleCBlbnRyaWVzIGFkZGVkIGR1cmluZwpAQCAtMTE2LDYgKzEyMSwz NiBAQCBBbnkgc3VjaCBlbmxhcmdlbWVudCB3b3VsZCBiZSB0byBhZGQgY2hpbGQgaXRlbXMgdGhh dCB3ZSBhcmVuJ3QgaW50ZXJlc3RlZAogaW4gcmV0dXJuaW5nIGFueXdheS4KIAogCitSZXR1cm5p bmcgbWF0Y2hlcyBpbiBiYXRjaGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0dp U1QgaW1wbGVtZW50cyB0aGUgYW1nZXRiYXRjaCBpbmRleCBBTSBpbnRlcmZhY2UsIHdob3NlIGNv bnRyYWN0IGlzCitkb2N1bWVudGVkIGluIGRvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwgKHNlZSBh bHNvCitzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL1JFQURNRSkuICBFYWNoIGNhbGwgaGFuZHMg dGhlIHRhYmxlIEFNIGEgYmF0Y2ggb2YKK21hdGNoaW5nIFRJRHMgcmF0aGVyIHRoYW4gYSBzaW5n bGUgVElELiAgR2lTVCBmb3JtcyB0d28ga2luZHMgb2YgYmF0Y2g6CisKKyogQSBwbGFpbiAobm9u LW9yZGVyZWQpIHNjYW4gcmV0dXJucyBvbmUgImNvbnZlbnRpb25hbCIgYmF0Y2ggcGVyIGxlYWYK KyAgcGFnZSwgaG9sZGluZyBhbGwgb2YgdGhhdCBwYWdlJ3MgbWF0Y2hpbmcgVElEcyBpbiBwaHlz aWNhbCBvcmRlci4gIEFzIGluCisgIG5idHJlZSBhbmQgaGFzaCwgdGhlIGJhdGNoIHJldGFpbnMg dGhlIGxlYWYgcGFnZSdzIGJ1ZmZlciBwaW4gKHRob3VnaCBub3QKKyAgaXRzIGNvbnRlbnQgbG9j aykgYXMgdGhlIGludGVybG9jayBhZ2FpbnN0IGNvbmN1cnJlbnQgVElEIHJlY3ljbGluZyBieQor ICBWQUNVVU0uCisKKyogQSBuZWFyZXN0LW5laWdoYm9yIChvcmRlcmVkKSBzY2FuIHJldHVybnMg YSBzaW5nbGUgInZpcnR1YWwiIGJhdGNoLiAgSXRzCisgIG1hdGNoZXMgZG9uJ3QgYXJyaXZlIG9u ZSBsZWFmIHBhZ2UgYXQgYSB0aW1lLCBzbyBpbnN0ZWFkIHdlIGRyYWluIHRoZQorICBkaXN0YW5j ZS1vcmRlcmVkIHF1ZXVlLCBjb3B5aW5nIG1hdGNoaW5nIFRJRHMgaW50byB0aGUgYmF0Y2ggaW4g ZGlzdGFuY2UKKyAgb3JkZXIgLS0gdHlwaWNhbGx5IHNwYW5uaW5nIG1hbnkgbGVhZiBwYWdlcy4g IEEgdmlydHVhbCBiYXRjaCByZXRhaW5zIG5vCisgIGJ1ZmZlciBwaW47IGVhY2ggbGVhZiBwYWdl J3MgcGluIGlzIGRyb3BwZWQgYXMgc29vbiBhcyB0aGUgcGFnZSBpcyBzY2FubmVkLgorCitWQUNV VU0gaG9ub3JzIGEgYmF0Y2gncyBwaW4gYnkgdGFraW5nIGEgY2xlYW51cCBsb2NrIG9uIHRoZSBs ZWFmIHBhZ2UgKHNlZQorIkJ1bGsgZGVsZXRlIGFsZ29yaXRobSAoVkFDVVVNKSIsIGJlbG93KSwg anVzdCBhcyBuYnRyZWUgZG9lcy4gIEJlY2F1c2UgYQordmlydHVhbCBiYXRjaCBob2xkcyBubyBz dWNoIHBpbiwgb3JkZXJlZCBzY2FucyBjb21lIHdpdGggdHdvIHJlc3RyaWN0aW9ucywKK2JvdGgg YWxzbyBzZWVuIGluIGJpdG1hcCAoYW1nZXRiaXRtYXApIHNjYW5zIGFuZCBib3RoIGV4cGxhaW5l ZCBpbgorZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbDogdGhleSBuZXZlciBzZXQgTFBfREVBRCBi aXRzIChnaXN0a2lsbGl0ZW1zYmF0Y2gKK2RvZXMgbm90aGluZyBmb3IgYSB2aXJ0dWFsIGJhdGNo KSwgYW5kIHRoZXkgYXJlIG5ldmVyIHBsYW5uZWQgYXMgaW5kZXgtb25seQorc2NhbnMgKGEgdmly dHVhbCBiYXRjaCBoYXMgbm8gcGluIHRvIG9mZmVyIGFzIHRoZSBUSUQtcmVjeWNsaW5nIGludGVy bG9jawordGhhdCBpbmRleC1vbmx5IHNjYW5zIGRlcGVuZCBvbikuCisKKwogSW5zZXJ0IEFsZ29y aXRobQogLS0tLS0tLS0tLS0tLS0tLQogCkBAIC00NTIsNiArNDg3LDExIEBAIEItdHJlZSBWQUNV VU0gdXNlcywgYnV0IGJlY2F1c2Ugd2UgYWxyZWFkeSBoYXZlIE5TTnMgb24gcGFnZXMsIHRvIGRl dGVjdCBwYWdlCiBzcGxpdHMgZHVyaW5nIHNlYXJjaGVzLCB3ZSBkb24ndCBuZWVkIGEgInZhY3V1 bSBjeWNsZSBJRCIgY29uY2VwdCBmb3IgdGhhdAogbGlrZSBCLXRyZWUgZG9lcy4KIAorV2UgdGFr ZSBhIGZ1bGwgY2xlYW51cCBsb2NrIG9uIGV2ZXJ5IGxlYWYgcGFnZSBhcyB3ZSBzY2FuIGl0LCBl dmVuIGxlYWYKK3BhZ2VzIHdpdGggbm8gZGVsZXRhYmxlIHR1cGxlcy4gIEFzIGluIG5idHJlZSwg dGhpcyBpcyB0aGUgaW50ZXJsb2NrIHRoYXQKK2hvbGRzIGNvbmN1cnJlbnQgc2NhbnMgb2ZmIGZy b20gVElEIHJlY3ljbGluZzsgc2VlICJSZXR1cm5pbmcgbWF0Y2hlcyBpbgorYmF0Y2hlcyIsIGFi b3ZlLgorCiBXaGlsZSB3ZSBzY2FuIGFsbCB0aGUgcGFnZXMsIHdlIGFsc28gbWFrZSBub3RlIG9m IGFueSBjb21wbGV0ZWx5IGVtcHR5IGxlYWYKIHBhZ2VzLiBXZSB3aWxsIHRyeSB0byB1bmxpbmsg dGhlbSBmcm9tIHRoZSB0cmVlIGFmdGVyIHRoZSBzY2FuLiBXZSBhbHNvIHJlY29yZAogdGhlIGJs b2NrIG51bWJlcnMgb2YgYWxsIGludGVybmFsIHBhZ2VzOyB0aGV5IGFyZSBuZWVkZWQgdG8gbG9j YXRlIHBhcmVudHMgb2YKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3Qu YyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3QuYwppbmRleCA2N2IxNjA1M2EuLjg4Yjhh NGRkZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdC5jCisrKyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3QuYwpAQCAtMTAzLDEwICsxMDMsMTEgQEAgZ2lzdGhh bmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAkJLmFtYWRqdXN0bWVtYmVycyA9IGdpc3RhZGp1c3Rt ZW1iZXJzLAogCQkuYW1iZWdpbnNjYW4gPSBnaXN0YmVnaW5zY2FuLAogCQkuYW1yZXNjYW4gPSBn aXN0cmVzY2FuLAotCQkuYW1nZXR0dXBsZSA9IGdpc3RnZXR0dXBsZSwKLQkJLmFtZ2V0YmF0Y2gg PSBOVUxMLAotCQkuYW11bmd1YXJkYmF0Y2ggPSBOVUxMLAotCQkuYW1raWxsaXRlbXNiYXRjaCA9 IE5VTEwsCisJCS5hbWdldHR1cGxlID0gTlVMTCwKKwkJLmFtZ2V0YmF0Y2ggPSBnaXN0Z2V0YmF0 Y2gsCisJCS5hbXVuZ3VhcmRiYXRjaCA9IGdpc3R1bmd1YXJkYmF0Y2gsCisJCS5hbWtpbGxpdGVt c2JhdGNoID0gZ2lzdGtpbGxpdGVtc2JhdGNoLAorCQkuYW1nZXR0cmFuc2Zvcm0gPSBnaXN0Z2V0 dHJhbnNmb3JtLAogCQkuYW1nZXRiaXRtYXAgPSBnaXN0Z2V0Yml0bWFwLAogCQkuYW1lbmRzY2Fu ID0gZ2lzdGVuZHNjYW4sCiAJCS5hbXBvc3Jlc2V0ID0gTlVMTCwKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9naXN0L2dpc3RnZXQuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dp c3RnZXQuYwppbmRleCA0ZDdjMTAwZDcuLmE3MGE0ODJmNyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvYWNjZXNzL2dpc3QvZ2lzdGdldC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dp c3RnZXQuYwpAQCAtMjcsODQgKzI3LDg0IEBACiAjaW5jbHVkZSAidXRpbHMvcmVsLmgiCiAKIC8q Ci0gKiBnaXN0a2lsbGl0ZW1zKCkgLS0gc2V0IExQX0RFQUQgc3RhdGUgZm9yIGl0ZW1zIGFuIGlu ZGV4c2NhbiBjYWxsZXIgaGFzCi0gKiB0b2xkIHVzIHdlcmUga2lsbGVkLgotICoKLSAqIFdlIHJl LXJlYWQgcGFnZSBoZXJlLCBzbyBpdCdzIGltcG9ydGFudCB0byBjaGVjayBwYWdlIExTTi4gSWYg dGhlIHBhZ2UKLSAqIGhhcyBiZWVuIG1vZGlmaWVkIHNpbmNlIHRoZSBsYXN0IHJlYWQgKGFzIGRl dGVybWluZWQgYnkgTFNOKSwgd2UgY2Fubm90Ci0gKiBmbGFnIGFueSBlbnRyaWVzIGJlY2F1c2Ug aXQgaXMgcG9zc2libGUgdGhhdCB0aGUgb2xkIGVudHJ5IHdhcyB2YWN1dW1lZAotICogYXdheSBh bmQgdGhlIFRJRCB3YXMgcmUtdXNlZCBieSBhIGNvbXBsZXRlbHkgZGlmZmVyZW50IGhlYXAgdHVw bGUuCisgKiBnaXN0a2lsbGl0ZW1zYmF0Y2goKSAtLSBNYXJrIGRlYWQgaXRlbXMnIGluZGV4IHR1 cGxlcyBMUF9ERUFECiAgKi8KLXN0YXRpYyB2b2lkCi1naXN0a2lsbGl0ZW1zKEluZGV4U2NhbkRl c2Mgc2NhbikKK3ZvaWQKK2dpc3RraWxsaXRlbXNiYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIElu ZGV4U2NhbkJhdGNoIGJhdGNoKQogewotCUdJU1RTY2FuT3BhcXVlIHNvID0gKEdJU1RTY2FuT3Bh cXVlKSBzY2FuLT5vcGFxdWU7Ci0JQnVmZmVyCQlidWZmZXI7CisJR0lTVEJhdGNoRGF0YSAqZ2Jh dGNoID0gR0lTVEJhdGNoR2V0RGF0YShzY2FuLCBiYXRjaCk7CisJUmVsYXRpb24JcmVsID0gc2Nh bi0+aW5kZXhSZWxhdGlvbjsKKwlCdWZmZXIJCWJ1ZjsKIAlQYWdlCQlwYWdlOwotCU9mZnNldE51 bWJlciBvZmZudW07Ci0JSXRlbUlkCQlpaWQ7Ci0JaW50CQkJaTsKIAlib29sCQlraWxsZWRzb21l dGhpbmcgPSBmYWxzZTsKKwlYTG9nUmVjUHRyCWxhdGVzdGxzbjsKIAotCUFzc2VydChzby0+Y3Vy Qmxrbm8gIT0gSW52YWxpZEJsb2NrTnVtYmVyKTsKLQlBc3NlcnQoWExvZ1JlY1B0cklzVmFsaWQo c28tPmN1clBhZ2VMU04pKTsKLQlBc3NlcnQoc28tPmtpbGxlZEl0ZW1zICE9IE5VTEwpOworCUFz c2VydChiYXRjaC0+bnVtRGVhZCA+IDApOwogCi0JYnVmZmVyID0gUmVhZEJ1ZmZlcihzY2FuLT5p bmRleFJlbGF0aW9uLCBzby0+Y3VyQmxrbm8pOwotCWlmICghQnVmZmVySXNWYWxpZChidWZmZXIp KQorCS8qCisJICogU2tpcCB2aXJ0dWFsIChvcmRlcmVkLXNjYW4pIGJhdGNoZXMsIHNpbmNlIHRo ZXJlJ3Mgbm8gcHJhY3RpY2FsIHdheSB0bworCSAqIHZpc2l0IGFsbCBvZiB0aGUgaW5kZXggcGFn ZXMgdGhhdCB0aGVzZSB0dXBsZXMgcmVhbGx5IGNhbWUgZnJvbQorCSAqLworCWlmIChnYmF0Y2gt PmJsa25vID09IEludmFsaWRCbG9ja051bWJlcikKIAkJcmV0dXJuOwogCi0JTG9ja0J1ZmZlcihi dWZmZXIsIEdJU1RfU0hBUkUpOwotCWdpc3RjaGVja3BhZ2Uoc2Nhbi0+aW5kZXhSZWxhdGlvbiwg YnVmZmVyKTsKLQlwYWdlID0gQnVmZmVyR2V0UGFnZShidWZmZXIpOworCWJ1ZiA9IFJlYWRCdWZm ZXIocmVsLCBnYmF0Y2gtPmJsa25vKTsKKwlMb2NrQnVmZmVyKGJ1ZiwgR0lTVF9TSEFSRSk7CisJ Z2lzdGNoZWNrcGFnZShyZWwsIGJ1Zik7CisJcGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnVmKTsKIAot CS8qCi0JICogSWYgcGFnZSBMU04gZGlmZmVycyBpdCBtZWFucyB0aGF0IHRoZSBwYWdlIHdhcyBt b2RpZmllZCBzaW5jZSB0aGUgbGFzdAotCSAqIHJlYWQuIGtpbGxlZEl0ZW1zIGNvdWxkIGJlIG5v dCB2YWxpZCBzbyBMUF9ERUFEIGhpbnRzIGFwcGx5aW5nIGlzIG5vdAotCSAqIHNhZmUuCi0JICov Ci0JaWYgKEJ1ZmZlckdldExTTkF0b21pYyhidWZmZXIpICE9IHNvLT5jdXJQYWdlTFNOKQotCQln b3RvIHVubG9jazsKLQotCUFzc2VydChHaXN0UGFnZUlzTGVhZihwYWdlKSk7Ci0KLQkvKgotCSAq IE1hcmsgYWxsIGtpbGxlZEl0ZW1zIGFzIGRlYWQuIFdlIG5lZWQgbm8gYWRkaXRpb25hbCByZWNo ZWNrLCBiZWNhdXNlLAotCSAqIGlmIHBhZ2Ugd2FzIG1vZGlmaWVkLCBjdXJQYWdlTFNOIG11c3Qg aGF2ZSBjaGFuZ2VkLgotCSAqLwotCWZvciAoaSA9IDA7IGkgPCBzby0+bnVtS2lsbGVkOyBpKysp CisJbGF0ZXN0bHNuID0gQnVmZmVyR2V0TFNOQXRvbWljKGJ1Zik7CisJQXNzZXJ0KGJhdGNoLT5s c24gPD0gbGF0ZXN0bHNuKTsKKwlpZiAoYmF0Y2gtPmxzbiAhPSBsYXRlc3Rsc24pCiAJewotCQlp ZiAoIWtpbGxlZHNvbWV0aGluZykKLQkJewotCQkJLyoKLQkJCSAqIFVzZSB0aGUgaGludCBiaXQg aW5mcmFzdHJ1Y3R1cmUgdG8gY2hlY2sgaWYgd2UgY2FuIHVwZGF0ZSB0aGUKLQkJCSAqIHBhZ2Ug d2hpbGUganVzdCBob2xkaW5nIGEgc2hhcmUgbG9jay4gSWYgd2UgYXJlIG5vdCBhbGxvd2VkLAot CQkJICogdGhlcmUncyBubyBwb2ludCBjb250aW51aW5nLgotCQkJICovCi0JCQlpZiAoIUJ1ZmZl ckJlZ2luU2V0SGludEJpdHMoYnVmZmVyKSkKLQkJCQlnb3RvIHVubG9jazsKLQkJfQorCQkvKiBN b2RpZmllZCwgZ2l2ZSB1cCBvbiBoaW50aW5nICovCisJCVVubG9ja1JlbGVhc2VCdWZmZXIoYnVm KTsKKwkJcmV0dXJuOworCX0KIAotCQlvZmZudW0gPSBzby0+a2lsbGVkSXRlbXNbaV07Ci0JCWlp ZCA9IFBhZ2VHZXRJdGVtSWQocGFnZSwgb2ZmbnVtKTsKLQkJSXRlbUlkTWFya0RlYWQoaWlkKTsK LQkJa2lsbGVkc29tZXRoaW5nID0gdHJ1ZTsKKwkvKiBJdGVyYXRlIHRocm91Z2ggYmF0Y2gtPmRl YWRJdGVtc1tdIGluIGluZGV4IHBhZ2Ugb3JkZXIgKi8KKwlmb3IgKGludCBpID0gMDsgaSA8IGJh dGNoLT5udW1EZWFkOyBpKyspCisJeworCQlpbnQJCQlpdGVtSW5kZXggPSBiYXRjaC0+ZGVhZEl0 ZW1zW2ldOworCQlPZmZzZXROdW1iZXIgb2ZmbnVtID0gYmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF0u aW5kZXhPZmZzZXQ7CisJCUl0ZW1JZAkJaWlkID0gUGFnZUdldEl0ZW1JZChwYWdlLCBvZmZudW0p OworCisJCUFzc2VydChpdGVtSW5kZXggPj0gYmF0Y2gtPmZpcnN0SXRlbSAmJiBpdGVtSW5kZXgg PD0gYmF0Y2gtPmxhc3RJdGVtKTsKKwkJQXNzZXJ0KGkgPT0gMCB8fAorCQkJICAgb2ZmbnVtID4g YmF0Y2gtPml0ZW1zW2JhdGNoLT5kZWFkSXRlbXNbaSAtIDFdXS5pbmRleE9mZnNldCk7CisJCUFz c2VydChvZmZudW0gPD0gUGFnZUdldE1heE9mZnNldE51bWJlcihwYWdlKSk7CisJCUFzc2VydChJ dGVtUG9pbnRlckVxdWFscygmKChJbmRleFR1cGxlKSBQYWdlR2V0SXRlbShwYWdlLCBpaWQpKS0+ dF90aWQsCisJCQkJCQkJCSAmYmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF0udGFibGVUaWQpKTsKKwor CQkvKiBNYXJrIGluZGV4IGl0ZW0gYXMgZGVhZCwgaWYgaXQgaXNuJ3QgYWxyZWFkeSAqLworCQlp ZiAoIUl0ZW1JZElzRGVhZChpaWQpKQorCQl7CisJCQlpZiAoIWtpbGxlZHNvbWV0aGluZykKKwkJ CXsKKwkJCQkvKgorCQkJCSAqIFVzZSB0aGUgaGludCBiaXQgaW5mcmFzdHJ1Y3R1cmUgdG8gY2hl Y2sgaWYgd2UgY2FuIHVwZGF0ZQorCQkJCSAqIHRoZSBwYWdlIHdoaWxlIGp1c3QgaG9sZGluZyBh IHNoYXJlIGxvY2suIElmIHdlIGFyZSBub3QKKwkJCQkgKiBhbGxvd2VkLCB0aGVyZSdzIG5vIHBv aW50IGNvbnRpbnVpbmcuCisJCQkJICovCisJCQkJaWYgKCFCdWZmZXJCZWdpblNldEhpbnRCaXRz KGJ1ZikpCisJCQkJeworCQkJCQlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1Zik7CisJCQkJCXJldHVy bjsKKwkJCQl9CisJCQl9CisKKwkJCUl0ZW1JZE1hcmtEZWFkKGlpZCk7CisJCQlraWxsZWRzb21l dGhpbmcgPSB0cnVlOworCQl9CiAJfQogCiAJaWYgKGtpbGxlZHNvbWV0aGluZykKIAl7CiAJCUdp c3RNYXJrUGFnZUhhc0dhcmJhZ2UocGFnZSk7Ci0JCUJ1ZmZlckZpbmlzaFNldEhpbnRCaXRzKGJ1 ZmZlciwgdHJ1ZSwgdHJ1ZSk7CisJCUJ1ZmZlckZpbmlzaFNldEhpbnRCaXRzKGJ1ZiwgdHJ1ZSwg dHJ1ZSk7CiAJfQogCi11bmxvY2s6Ci0JVW5sb2NrUmVsZWFzZUJ1ZmZlcihidWZmZXIpOwotCi0J LyoKLQkgKiBBbHdheXMgcmVzZXQgdGhlIHNjYW4gc3RhdGUsIHNvIHdlIGRvbid0IGxvb2sgZm9y IHNhbWUgaXRlbXMgb24gb3RoZXIKLQkgKiBwYWdlcy4KLQkgKi8KLQlzby0+bnVtS2lsbGVkID0g MDsKKwlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1Zik7CiB9CiAKIC8qCkBAIC0zMjAsMTQgKzMyMCwy OSBAQCBnaXN0aW5kZXhfa2V5dGVzdChJbmRleFNjYW5EZXNjIHNjYW4sCiAgKiBteURpc3RhbmNl czogZGlzdGFuY2VzIGFycmF5IGFzc29jaWF0ZWQgd2l0aCBwYWdlSXRlbSwgb3IgTlVMTCBhdCB0 aGUgcm9vdAogICogdGJtOiBpZiBub3QgTlVMTCwgZ2lzdGdldGJpdG1hcCdzIG91dHB1dCBiaXRt YXAKICAqIG50aWRzOiBpZiBub3QgTlVMTCwgZ2lzdGdldGJpdG1hcCdzIG91dHB1dCB0dXBsZSBj b3VudGVyCisgKiBuZXdiYXRjaDogaWYgbm90IE5VTEwsIG9yZGluYXJ5ICh1bm9yZGVyZWQpIGdp c3RnZXRiYXRjaCBzY2FuCiAgKgotICogSWYgdGJtL250aWRzIGFyZW4ndCBOVUxMLCB3ZSBhcmUg ZG9pbmcgYW4gYW1nZXRiaXRtYXAgc2NhbiwgYW5kIGhlYXAKLSAqIHR1cGxlcyBzaG91bGQgYmUg cmVwb3J0ZWQgZGlyZWN0bHkgaW50byB0aGUgYml0bWFwLiAgSWYgdGhleSBhcmUgTlVMTCwKLSAq IHdlJ3JlIGRvaW5nIGEgcGxhaW4gb3Igb3JkZXJlZCBpbmRleHNjYW4uICBGb3IgYSBwbGFpbiBp bmRleHNjYW4sIGhlYXAKLSAqIHR1cGxlIFRJRHMgYXJlIHJldHVybmVkIGludG8gc28tPnBhZ2VE YXRhW10uICBGb3IgYW4gb3JkZXJlZCBpbmRleHNjYW4sCi0gKiBoZWFwIHR1cGxlIFRJRHMgYXJl IHB1c2hlZCBpbnRvIGluZGl2aWR1YWwgc2VhcmNoIHF1ZXVlIGl0ZW1zLiAgSW4gYW4KLSAqIGlu ZGV4LW9ubHkgc2NhbiwgcmVjb25zdHJ1Y3RlZCBpbmRleCB0dXBsZXMgYXJlIHJldHVybmVkIGFs b25nIHdpdGggdGhlCi0gKiBUSURzLgorICogSWYgdGJtL250aWRzIGFyZW4ndCBOVUxMLCB3ZSBh cmUgZG9pbmcgYW4gYW1nZXRiaXRtYXAgc2NhbiwgYW5kIG1hdGNoaW5nCisgKiBoZWFwIHR1cGxl cyBhcmUgcmVwb3J0ZWQgZGlyZWN0bHkgaW50byB0aGUgYml0bWFwLgorICoKKyAqIE90aGVyd2lz ZSwgaWYgbmV3YmF0Y2ggaXNuJ3QgTlVMTCwgd2UncmUgZG9pbmcgYSBub24tb3JkZXJlZCBhbWdl dGJhdGNoCisgKiBzY2FuOiBtYXRjaGluZyBpdGVtcyBUSURzIGZyb20gYSBsZWFmIHBhZ2UgYXJl IHN0b3JlZCBpbnRvIGNhbGxlcidzCisgKiBuZXdiYXRjaCB0byByZXR1cm4gdmlhIGdpc3RnZXRi YXRjaC4gIElmIHdlIGRvbid0IHNhdmUgYW55IGl0ZW1zIGluCisgKiBuZXdiYXRjaCwgY2FsbGVy IG5lZWRzIHRvIGZpbmQgdGhlIG5leHQgbGVhZiBwYWdlIHRoYXQgaGFzIG1hdGNoZXMgYW5kIHNh dmUKKyAqIGl0cyBpdGVtcyBpbiBuZXdiYXRjaCBpbnN0ZWFkIChpZiB0aGVyZSBpcyBub25lIHRo ZW4gY2FsbGVyIHNob3VsZCByZWxlYXNlCisgKiBuZXdiYXRjaCkuCisgKgorICogT3RoZXJ3aXNl IChuZXdiYXRjaCBhbmQgdGJtIGJvdGggTlVMTCkgd2UncmUgc2Nhbm5pbmcgYSBwYWdlIGZvciBh biBvcmRlcmVkCisgKiAobmVhcmVzdC1uZWlnaGJvcikgZ2lzdGdldGJhdGNoIHNjYW46IG1hdGNo aW5nIGxlYWYgaGVhcCB0dXBsZXMgYXJlIHB1c2hlZCBvbnRvCisgKiB0aGUgc2VhcmNoIHF1ZXVl IGFzIEdJU1RTZWFyY2hJdGVtcyBjYXJyeWluZyB0aGVpciBkaXN0YW5jZXMsIHNvIHRoZSBxdWV1 ZQorICogY2FuIGxhdGVyIGJlIGRyYWluZWQgaW4gZGlzdGFuY2Ugb3JkZXIuICBUaGUgcGFnZSdz IGJ1ZmZlciBwaW4gaXMgZHJvcHBlZAorICogYmVmb3JlIHJldHVybmluZy4gIFRoaXMgY2FuIG9u bHkgaGFwcGVuIGR1cmluZyBiYXRjaEltbWVkaWF0ZVVuZ3VhcmQgc2NhbnMsCisgKiB3aGljaCBp cyB3aGF0IG1ha2VzIGl0IHNhZmUuICBHcm91cHMgb2YgZW5xdWV1ZWQgaXRlbXMgd2lsbCBldmVu dHVhbGx5IGJlCisgKiByZXR1cm5lZCAoaW4gdGhlIGV4cGVjdGVkIG9yZGVyKSBhcyAidmlydHVh bCBiYXRjaGVzIiwgYnV0IHdlIGRvbid0IGRvIHRoYXQKKyAqIGhlcmUuCisgKgorICogSW4gYWxs IGNhc2VzLCBsb3dlciBpbmRleCBwYWdlcyBhcmUgcHVzaGVkIG9udG8gdGhlIHNlYXJjaCBxdWV1 ZSB0byBiZQorICogdmlzaXRlZCBsYXRlci4KICAqCiAgKiBJZiB3ZSBkZXRlY3QgdGhhdCB0aGUg aW5kZXggcGFnZSBoYXMgc3BsaXQgc2luY2Ugd2Ugc2F3IGl0cyBkb3dubGluawogICogaW4gdGhl IHBhcmVudCwgd2UgcHVzaCBpdHMgbmV3IHJpZ2h0IHNpYmxpbmcgb250byB0aGUgcXVldWUgc28g dGhlCkBAIC0zMzUsMTAgKzM1MCwxMCBAQCBnaXN0aW5kZXhfa2V5dGVzdChJbmRleFNjYW5EZXNj IHNjYW4sCiAgKi8KIHN0YXRpYyB2b2lkCiBnaXN0U2NhblBhZ2UoSW5kZXhTY2FuRGVzYyBzY2Fu LCBHSVNUU2VhcmNoSXRlbSAqcGFnZUl0ZW0sCi0JCQkgSW5kZXhPcmRlckJ5RGlzdGFuY2UgKm15 RGlzdGFuY2VzLCBUSURCaXRtYXAgKnRibSwgaW50NjQgKm50aWRzKQorCQkJIEluZGV4T3JkZXJC eURpc3RhbmNlICpteURpc3RhbmNlcywgVElEQml0bWFwICp0Ym0sIGludDY0ICpudGlkcywKKwkJ CSBJbmRleFNjYW5CYXRjaCBuZXdiYXRjaCkKIHsKIAlHSVNUU2Nhbk9wYXF1ZSBzbyA9IChHSVNU U2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwotCUdJU1RTVEFURSAgKmdpc3RzdGF0ZSA9IHNvLT5n aXN0c3RhdGU7CiAJUmVsYXRpb24JciA9IHNjYW4tPmluZGV4UmVsYXRpb247CiAJQnVmZmVyCQli dWZmZXI7CiAJUGFnZQkJcGFnZTsKQEAgLTM0Nyw3ICszNjIsMTIgQEAgZ2lzdFNjYW5QYWdlKElu ZGV4U2NhbkRlc2Mgc2NhbiwgR0lTVFNlYXJjaEl0ZW0gKnBhZ2VJdGVtLAogCU9mZnNldE51bWJl ciBpOwogCU1lbW9yeUNvbnRleHQgb2xkY3h0OwogCisJLyogc3RhdGUgdXNlZCB3aGVuIHNhdmlu ZyBtYXRjaGluZyBpdGVtcyBpbnRvIGNhbGxlcidzIG5ld2JhdGNoICovCisJaW50CQkJaXRlbUlu ZGV4ID0gMDsKKwlpbnQJCQl0dXBsZU9mZnNldCA9IDA7CisKIAlBc3NlcnQoIUdJU1RTZWFyY2hJ dGVtSXNIZWFwKCpwYWdlSXRlbSkpOworCUFzc2VydCghbmV3YmF0Y2ggfHwgdGJtID09IE5VTEwp OwogCiAJYnVmZmVyID0gUmVhZEJ1ZmZlcihzY2FuLT5pbmRleFJlbGF0aW9uLCBwYWdlSXRlbS0+ Ymxrbm8pOwogCUxvY2tCdWZmZXIoYnVmZmVyLCBHSVNUX1NIQVJFKTsKQEAgLTQwMywxOCArNDIz LDYgQEAgZ2lzdFNjYW5QYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgR0lTVFNlYXJjaEl0ZW0gKnBh Z2VJdGVtLAogCQlyZXR1cm47CiAJfQogCi0Jc28tPm5QYWdlRGF0YSA9IHNvLT5jdXJQYWdlRGF0 YSA9IDA7Ci0Jc2Nhbi0+eHNfaGl0dXAgPSBOVUxMOwkJLyogbWlnaHQgcG9pbnQgaW50byBwYWdl RGF0YUN4dCAqLwotCWlmIChzby0+cGFnZURhdGFDeHQpCi0JCU1lbW9yeUNvbnRleHRSZXNldChz by0+cGFnZURhdGFDeHQpOwotCi0JLyoKLQkgKiBXZSBzYXZlIHRoZSBMU04gb2YgdGhlIHBhZ2Ug YXMgd2UgcmVhZCBpdCwgc28gdGhhdCB3ZSBrbm93IHdoZXRoZXIgaXQKLQkgKiBpcyBzYWZlIHRv IGFwcGx5IExQX0RFQUQgaGludHMgdG8gdGhlIHBhZ2UgbGF0ZXIuIFRoaXMgYWxsb3dzIHVzIHRv Ci0JICogZHJvcCB0aGUgcGluIGZvciBNVkNDIHNjYW5zLCB3aGljaCBhbGxvd3MgdmFjdXVtIHRv IGF2b2lkIGJsb2NraW5nLgotCSAqLwotCXNvLT5jdXJQYWdlTFNOID0gQnVmZmVyR2V0TFNOQXRv bWljKGJ1ZmZlcik7Ci0KIAkvKgogCSAqIGNoZWNrIGFsbCB0dXBsZXMgb24gcGFnZQogCSAqLwpA QCAtNDY0LDI0ICs0NzIsMjQgQEAgZ2lzdFNjYW5QYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgR0lT VFNlYXJjaEl0ZW0gKnBhZ2VJdGVtLAogCQllbHNlIGlmIChzY2FuLT5udW1iZXJPZk9yZGVyQnlz ID09IDAgJiYgR2lzdFBhZ2VJc0xlYWYocGFnZSkpCiAJCXsKIAkJCS8qCi0JCQkgKiBOb24tb3Jk ZXJlZCBzY2FuLCBzbyByZXBvcnQgdHVwbGVzIGluIHNvLT5wYWdlRGF0YVtdCisJCQkgKiB1bm9y ZGVyZWQgYW1nZXRiYXRjaCBzY2FuLCBzbyBqdXN0IHN0b3JlIGFub3RoZXIgbWF0Y2hpbmcgaXRl bQorCQkJICogaW4gY2FsbGVyJ3MgYmF0Y2ggd2l0aG91dCB3b3JyeWluZyBhYm91dCBvcmRlcmlu ZwogCQkJICovCi0JCQlzby0+cGFnZURhdGFbc28tPm5QYWdlRGF0YV0uaGVhcFB0ciA9IGl0LT50 X3RpZDsKLQkJCXNvLT5wYWdlRGF0YVtzby0+blBhZ2VEYXRhXS5yZWNoZWNrID0gcmVjaGVjazsK LQkJCXNvLT5wYWdlRGF0YVtzby0+blBhZ2VEYXRhXS5vZmZudW0gPSBpOworCQkJbmV3YmF0Y2gt Pml0ZW1zW2l0ZW1JbmRleF0udGFibGVUaWQgPSBpdC0+dF90aWQ7CisJCQluZXdiYXRjaC0+aXRl bXNbaXRlbUluZGV4XS5pbmRleE9mZnNldCA9IGk7CisJCQluZXdiYXRjaC0+aXRlbXNbaXRlbUlu ZGV4XS50dXBsZU9mZnNldCA9IDA7CisJCQlHSVNUQmF0Y2hHZXRSZWNoZWNrKHNjYW4sIG5ld2Jh dGNoKVtpdGVtSW5kZXhdID0gcmVjaGVjazsKIAotCQkJLyoKLQkJCSAqIEluIGFuIGluZGV4LW9u bHkgc2NhbiwgYWxzbyBmZXRjaCB0aGUgZGF0YSBmcm9tIHRoZSB0dXBsZS4gIFRoZQotCQkJICog cmVjb25zdHJ1Y3RlZCB0dXBsZXMgYXJlIHN0b3JlZCBpbiBwYWdlRGF0YUN4dC4KLQkJCSAqLwog CQkJaWYgKHNjYW4tPnhzX3dhbnRfaXR1cCkKIAkJCXsKLQkJCQlvbGRjeHQgPSBNZW1vcnlDb250 ZXh0U3dpdGNoVG8oc28tPnBhZ2VEYXRhQ3h0KTsKLQkJCQlzby0+cGFnZURhdGFbc28tPm5QYWdl RGF0YV0ucmVjb250dXAgPQotCQkJCQlnaXN0RmV0Y2hUdXBsZShnaXN0c3RhdGUsIHIsIGl0KTsK LQkJCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3h0KTsKKwkJCQkvKiBDb3B5IG9uLWRpc2sg Zm9ybWF0IGluZGV4IHR1cGxlIGludG8gY3VyclR1cGxlcyAqLworCQkJCVNpemUJCWl0dXBzeiA9 IEluZGV4VHVwbGVTaXplKGl0KTsKKworCQkJCW5ld2JhdGNoLT5pdGVtc1tpdGVtSW5kZXhdLnR1 cGxlT2Zmc2V0ID0gdHVwbGVPZmZzZXQ7CisJCQkJbWVtY3B5KG5ld2JhdGNoLT5jdXJyVHVwbGVz ICsgdHVwbGVPZmZzZXQsIGl0LCBpdHVwc3opOworCQkJCXR1cGxlT2Zmc2V0ICs9IE1BWEFMSUdO KGl0dXBzeik7CiAJCQl9Ci0JCQlzby0+blBhZ2VEYXRhKys7CisJCQlpdGVtSW5kZXgrKzsKIAkJ fQogCQllbHNlCiAJCXsKQEAgLTUwMCwxNyArNTA4LDE1IEBAIGdpc3RTY2FuUGFnZShJbmRleFNj YW5EZXNjIHNjYW4sIEdJU1RTZWFyY2hJdGVtICpwYWdlSXRlbSwKIAogCQkJaWYgKEdpc3RQYWdl SXNMZWFmKHBhZ2UpKQogCQkJewotCQkJCS8qIENyZWF0aW5nIGhlYXAtdHVwbGUgR0lTVFNlYXJj aEl0ZW0gKi8KKwkJCQkvKiBDcmVhdGluZyBoZWFwLXR1cGxlIEdJU1RTZWFyY2hJdGVtIGZvciBv cmRlcmVkIHNlYXJjaCAqLworCQkJCUFzc2VydChzY2FuLT5udW1iZXJPZk9yZGVyQnlzID4gMCk7 CisJCQkJQXNzZXJ0KG5ld2JhdGNoID09IE5VTEwpOworCQkJCUFzc2VydChzY2FuLT5iYXRjaElt bWVkaWF0ZVVuZ3VhcmQpOworCiAJCQkJaXRlbS0+Ymxrbm8gPSBJbnZhbGlkQmxvY2tOdW1iZXI7 CiAJCQkJaXRlbS0+ZGF0YS5oZWFwLmhlYXBQdHIgPSBpdC0+dF90aWQ7CiAJCQkJaXRlbS0+ZGF0 YS5oZWFwLnJlY2hlY2sgPSByZWNoZWNrOwogCQkJCWl0ZW0tPmRhdGEuaGVhcC5yZWNoZWNrRGlz dGFuY2VzID0gcmVjaGVja19kaXN0YW5jZXM7Ci0KLQkJCQkvKgotCQkJCSAqIEluIGFuIGluZGV4 LW9ubHkgc2NhbiwgYWxzbyBmZXRjaCB0aGUgZGF0YSBmcm9tIHRoZSB0dXBsZS4KLQkJCQkgKi8K LQkJCQlpZiAoc2Nhbi0+eHNfd2FudF9pdHVwKQotCQkJCQlpdGVtLT5kYXRhLmhlYXAucmVjb250 dXAgPSBnaXN0RmV0Y2hUdXBsZShnaXN0c3RhdGUsIHIsIGl0KTsKIAkJCX0KIAkJCWVsc2UKIAkJ CXsKQEAgLTUzNSw2ICs1NDEsMzEgQEAgZ2lzdFNjYW5QYWdlKEluZGV4U2NhbkRlc2Mgc2Nhbiwg R0lTVFNlYXJjaEl0ZW0gKnBhZ2VJdGVtLAogCQl9CiAJfQogCisJaWYgKG5ld2JhdGNoKQorCXsK KwkJLyogRmluYWxpemUgcmVzdWx0IGJhdGNoIGR1cmluZyBhIG5vbi1vcmRlcmVkIGFtZ2V0YmF0 Y2ggc2NhbiAqLworCQlBc3NlcnQoc2Nhbi0+bnVtYmVyT2ZPcmRlckJ5cyA9PSAwICYmIHRibSA9 PSBOVUxMKTsKKworCQluZXdiYXRjaC0+ZGlyID0gRm9yd2FyZFNjYW5EaXJlY3Rpb247CisJCW5l d2JhdGNoLT5maXJzdEl0ZW0gPSAwOworCQluZXdiYXRjaC0+bGFzdEl0ZW0gPSBpdGVtSW5kZXgg LSAxOworCisJCWlmIChpdGVtSW5kZXggPiAwKQorCQl7CisJCQlHSVNUQmF0Y2hEYXRhICpnbmV3 YmF0Y2g7CisKKwkJCUFzc2VydChHaXN0UGFnZUlzTGVhZihwYWdlKSk7CisKKwkJCWduZXdiYXRj aCA9IEdJU1RCYXRjaEdldERhdGEoc2NhbiwgbmV3YmF0Y2gpOworCQkJZ25ld2JhdGNoLT5idWYg PSBidWZmZXI7CisJCQlnbmV3YmF0Y2gtPmJsa25vID0gQnVmZmVyR2V0QmxvY2tOdW1iZXIoYnVm ZmVyKTsKKworCQkJaW5kZXhhbV91dGlsX3VubG9ja19iYXRjaChzY2FuLCBuZXdiYXRjaCwgYnVm ZmVyKTsKKwkJCXJldHVybjsKKwkJfQorCQkvKiBlbHNlIGNhbGxlciBuZWVkcyB0byBmaW5kIGFu b3RoZXIgcGFnZSB0byBmaWxsIG5ld2JhdGNoICovCisJfQorCiAJVW5sb2NrUmVsZWFzZUJ1ZmZl cihidWZmZXIpOwogfQogCkBAIC01NjMsMjIgKzU5NCwyOSBAQCBnZXROZXh0R0lTVFNlYXJjaEl0 ZW0oR0lTVFNjYW5PcGFxdWUgc28pCiB9CiAKIC8qCi0gKiBGZXRjaCBuZXh0IGhlYXAgdHVwbGUg aW4gYW4gb3JkZXJlZCBzZWFyY2gKKyAqIGdpc3RnZXRiYXRjaF9vcmRlcmVkKCkgLS0gZHJhaW4g dGhlIHF1ZXVlIGludG8gY2FsbGVyJ3MgbmV3YmF0Y2ggaW4KKyAqIGRpc3RhbmNlIG9yZGVyCisg KgorICogSGVscGVyIGZvciBnaXN0Z2V0YmF0Y2gncyBvcmRlcmVkIChuZWFyZXN0LW5laWdoYm9y KSBwYXRoLiAgVGhlIHBhaXJpbmctaGVhcAorICogcXVldWUgKHNvLT5xdWV1ZSkgaG9sZHMgYm90 aCB1bnZpc2l0ZWQgaW5kZXggcGFnZXMgYW5kIG1hdGNoaW5nIGxlYWYgaGVhcAorICogdHVwbGVz LCBvcmRlcmVkIGJ5IChsb3dlci1ib3VuZCkgZGlzdGFuY2UuICBXZSBwb3AgaXRlbXMgaW4gdGhh dCBvcmRlciwKKyAqIGRpc3BhdGNoaW5nIG9uIHRoZSBpdGVtIHR5cGUuICBBIHBvcHBlZCBoZWFw IHR1cGxlIGlzIGFwcGVuZGVkIHRvIHRoZQorICogYmF0Y2guICBXZSBzdG9wIG9uY2UgdGhlIGJh dGNoIGlzIGZ1bGwgKG1heGl0ZW1zYmF0Y2ggaXRlbXMpIG9yIHRoZSBxdWV1ZQorICogaXMgZXho YXVzdGVkLCBsZWF2aW5nIGFueSByZW1haW5pbmcgaXRlbXMgcXVldWVkIGZvciB0aGUgbmV4dCBj YWxsLgorICoKKyAqIEJlY2F1c2UgdGhlIHF1ZXVlIGlzIGRyYWluZWQgaW4gbm9uZGVjcmVhc2lu ZyBkaXN0YW5jZSBvcmRlciBhY3Jvc3MgdGhlIHdob2xlCisgKiBzY2FuIChhIGRvd25saW5rJ3Mg ZGlzdGFuY2UgaXMgYSBsb3dlciBib3VuZCBvbiBpdHMgc3VidHJlZSwgc28gaXRlbXMgcHVzaGVk CisgKiB3aGlsZSBzY2FubmluZyBhIHBhZ2UgbmV2ZXIgc29ydCBhaGVhZCBvZiBpdGVtcyBhbHJl YWR5IHBvcHBlZCksIHRoZQorICogYmF0Y2hlcyB3ZSBlbWl0IGFyZSBnbG9iYWxseSBkaXN0YW5j ZS1vcmRlcmVkLgogICovCi1zdGF0aWMgYm9vbAotZ2V0TmV4dE5lYXJlc3QoSW5kZXhTY2FuRGVz YyBzY2FuKQorc3RhdGljIEluZGV4U2NhbkJhdGNoCitnaXN0Z2V0YmF0Y2hfb3JkZXJlZChJbmRl eFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIG5ld2JhdGNoKQogewogCUdJU1RTY2FuT3Bh cXVlIHNvID0gKEdJU1RTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7Ci0JYm9vbAkJcmVzID0gZmFs c2U7CisJR0lTVEJhdGNoRGF0YSAqZ25ld2JhdGNoOworCWludAkJCW5pdGVtcyA9IDA7CiAKLQlp ZiAoc2Nhbi0+eHNfaGl0dXApCi0JewotCQkvKiBmcmVlIHByZXZpb3VzbHkgcmV0dXJuZWQgdHVw bGUgKi8KLQkJcGZyZWUoc2Nhbi0+eHNfaGl0dXApOwotCQlzY2FuLT54c19oaXR1cCA9IE5VTEw7 Ci0JfQotCi0JZG8KKwlmb3IgKDs7KQogCXsKIAkJR0lTVFNlYXJjaEl0ZW0gKml0ZW0gPSBnZXRO ZXh0R0lTVFNlYXJjaEl0ZW0oc28pOwogCkBAIC01ODgsMTYyICs2MjYsMjQyIEBAIGdldE5leHRO ZWFyZXN0KEluZGV4U2NhbkRlc2Mgc2NhbikKIAkJaWYgKEdJU1RTZWFyY2hJdGVtSXNIZWFwKCpp dGVtKSkKIAkJewogCQkJLyogZm91bmQgYSBoZWFwIGl0ZW0gYXQgY3VycmVudGx5IG1pbmltYWwg ZGlzdGFuY2UgKi8KLQkJCXNjYW4tPnhzX2hlYXB0aWQgPSBpdGVtLT5kYXRhLmhlYXAuaGVhcFB0 cjsKLQkJCXNjYW4tPnhzX3JlY2hlY2sgPSBpdGVtLT5kYXRhLmhlYXAucmVjaGVjazsKKwkJCUdJ U1RCYXRjaEl0ZW0gKmJpdGVtID0gR0lTVEJhdGNoR2V0SXRlbShzY2FuLCBuZXdiYXRjaCwgbml0 ZW1zKTsKIAotCQkJaW5kZXhfc3RvcmVfZmxvYXQ4X29yZGVyYnlfZGlzdGFuY2VzKHNjYW4sIHNv LT5vcmRlckJ5VHlwZXMsCi0JCQkJCQkJCQkJCQkgaXRlbS0+ZGlzdGFuY2VzLAotCQkJCQkJCQkJ CQkJIGl0ZW0tPmRhdGEuaGVhcC5yZWNoZWNrRGlzdGFuY2VzKTsKKwkJCW5ld2JhdGNoLT5pdGVt c1tuaXRlbXNdLnRhYmxlVGlkID0gaXRlbS0+ZGF0YS5oZWFwLmhlYXBQdHI7CisJCQluZXdiYXRj aC0+aXRlbXNbbml0ZW1zXS5pbmRleE9mZnNldCA9IC0xOwkvKiBtZWFuaW5nbGVzcyBoZXJlICov CisJCQluZXdiYXRjaC0+aXRlbXNbbml0ZW1zXS50dXBsZU9mZnNldCA9IDA7CiAKLQkJCS8qIGlu IGFuIGluZGV4LW9ubHkgc2NhbiwgYWxzbyByZXR1cm4gdGhlIHJlY29uc3RydWN0ZWQgdHVwbGUu ICovCi0JCQlpZiAoc2Nhbi0+eHNfd2FudF9pdHVwKQotCQkJCXNjYW4tPnhzX2hpdHVwID0gaXRl bS0+ZGF0YS5oZWFwLnJlY29udHVwOwotCQkJcmVzID0gdHJ1ZTsKKwkJCWJpdGVtLT5yZWNoZWNr ID0gaXRlbS0+ZGF0YS5oZWFwLnJlY2hlY2s7CisJCQliaXRlbS0+cmVjaGVja0Rpc3RhbmNlcyA9 IGl0ZW0tPmRhdGEuaGVhcC5yZWNoZWNrRGlzdGFuY2VzOworCQkJbWVtY3B5KGJpdGVtLT5kaXN0 YW5jZXMsIGl0ZW0tPmRpc3RhbmNlcywKKwkJCQkgICBzaXplb2YoaXRlbS0+ZGlzdGFuY2VzWzBd KSAqIHNjYW4tPm51bWJlck9mT3JkZXJCeXMpOworCisJCQluaXRlbXMrKzsKKwkJCXBmcmVlKGl0 ZW0pOworCisJCQlpZiAobml0ZW1zID09IHNjYW4tPm1heGl0ZW1zYmF0Y2gpCisJCQkJYnJlYWs7 CQkJLyogYmF0Y2ggZnVsbDsgcmVtYWluaW5nIGl0ZW1zIHN0YXkgcXVldWVkICovCiAJCX0KIAkJ ZWxzZQogCQl7CiAJCQkvKiB2aXNpdCBhbiBpbmRleCBwYWdlLCBleHRyYWN0IGl0cyBpdGVtcyBp bnRvIHF1ZXVlICovCiAJCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwogCi0JCQlnaXN0U2NhblBh Z2Uoc2NhbiwgaXRlbSwgaXRlbS0+ZGlzdGFuY2VzLCBOVUxMLCBOVUxMKTsKKwkJCWdpc3RTY2Fu UGFnZShzY2FuLCBpdGVtLCBpdGVtLT5kaXN0YW5jZXMsIE5VTEwsIE5VTEwsIE5VTEwpOworCQkJ cGZyZWUoaXRlbSk7CiAJCX0KKwl9CiAKLQkJcGZyZWUoaXRlbSk7Ci0JfSB3aGlsZSAoIXJlcyk7 CisJaWYgKG5pdGVtcyA9PSAwKQorCXsKKwkJLyogTm8gbWF0Y2hpbmcgaXRlbXMgcmVtYWluOiB0 aGUgc2NhbiBpcyBleGhhdXN0ZWQgKi8KKwkJaW5kZXhhbV91dGlsX3JlbGVhc2VfYmF0Y2goc2Nh biwgbmV3YmF0Y2gpOworCQlyZXR1cm4gTlVMTDsKKwl9CiAKLQlyZXR1cm4gcmVzOworCS8qCisJ ICogQW4gb3JkZXJlZCBiYXRjaCBpcyAidmlydHVhbCI6IGl0cyBpdGVtcyBjb21lIGZyb20gbWFu eSBsZWFmIHBhZ2VzLAorCSAqIHdob3NlIHBpbnMgZ2lzdFNjYW5QYWdlIGFscmVhZHkgZHJvcHBl ZCwgc28gaXQgaG9sZHMgbm8gVElEIHJlY3ljbGluZworCSAqIGludGVybG9jay4gIEl0IGhhcyBu byBzaW5nbGUgb3JpZ2luYXRpbmcgcGFnZSwgYW5kIHdlIGRvbid0IHRyYWNrIHRob3NlCisJICog aW5kZXggcGFnZXMgaW4gYW55IGNhc2UgKGdpc3RraWxsaXRlbXNiYXRjaCB3aWxsIGp1c3Qgc2tp cCBpdCkuCisJICovCisJQXNzZXJ0KCFuZXdiYXRjaC0+aXNHdWFyZGVkKTsKKworCW5ld2JhdGNo LT5kaXIgPSBGb3J3YXJkU2NhbkRpcmVjdGlvbjsKKwluZXdiYXRjaC0+Zmlyc3RJdGVtID0gMDsK KwluZXdiYXRjaC0+bGFzdEl0ZW0gPSBuaXRlbXMgLSAxOworCisJZ25ld2JhdGNoID0gR0lTVEJh dGNoR2V0RGF0YShzY2FuLCBuZXdiYXRjaCk7CisJZ25ld2JhdGNoLT5idWYgPSBJbnZhbGlkQnVm ZmVyOworCWduZXdiYXRjaC0+Ymxrbm8gPSBJbnZhbGlkQmxvY2tOdW1iZXI7CisKKwlyZXR1cm4g bmV3YmF0Y2g7CiB9CiAKIC8qCi0gKiBnaXN0Z2V0dHVwbGUoKSAtLSBHZXQgdGhlIG5leHQgdHVw bGUgaW4gdGhlIHNjYW4KKyAqIGdpc3RnZXRiYXRjaCgpIC0tIEdldCB0aGUgZmlyc3Qgb3IgbmV4 dCBiYXRjaCBvZiBpdGVtcyBpbiBhIHNjYW4KICAqLwotYm9vbAotZ2lzdGdldHR1cGxlKEluZGV4 U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCitJbmRleFNjYW5CYXRjaAorZ2lzdGdl dGJhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggcHJpb3JiYXRjaCwgU2Nh bkRpcmVjdGlvbiBkaXIpCiB7CiAJR0lTVFNjYW5PcGFxdWUgc28gPSAoR0lTVFNjYW5PcGFxdWUp IHNjYW4tPm9wYXF1ZTsKKwlib29sCQlmaXJzdENhbGwgPSAocHJpb3JiYXRjaCA9PSBOVUxMKTsK KwlJbmRleFNjYW5CYXRjaCBuZXdiYXRjaDsKKwlHSVNUU2VhcmNoSXRlbSBmYWtlSXRlbTsKIAog CWlmIChkaXIgIT0gRm9yd2FyZFNjYW5EaXJlY3Rpb24pCiAJCWVsb2coRVJST1IsICJHaVNUIG9u bHkgc3VwcG9ydHMgZm9yd2FyZCBzY2FuIGRpcmVjdGlvbiIpOwogCiAJaWYgKCFzby0+cXVhbF9v aykKLQkJcmV0dXJuIGZhbHNlOworCQlyZXR1cm4gTlVMTDsKIAotCWlmIChzby0+Zmlyc3RDYWxs KQorCS8qIEFsbG9jYXRlIGEgYmF0Y2ggdG8gcGFzcyB0byBnaXN0U2NhblBhZ2Ugb3IgZ2lzdGdl dGJhdGNoX29yZGVyZWQgKi8KKwluZXdiYXRjaCA9IGluZGV4YW1fdXRpbF9hbGxvY19iYXRjaChz Y2FuKTsKKworCWlmIChmaXJzdENhbGwpCiAJewotCQkvKiBCZWdpbiB0aGUgc2NhbiBieSBwcm9j ZXNzaW5nIHRoZSByb290IHBhZ2UgKi8KLQkJR0lTVFNlYXJjaEl0ZW0gZmFrZUl0ZW07Ci0KKwkJ LyogQmVnaW4gdGhlIHNjYW4gYnkgcHJlcGFyaW5nIHRvIHByb2Nlc3MgdGhlIHJvb3QgcGFnZSAq LwogCQlwZ3N0YXRfY291bnRfaW5kZXhfc2NhbihzY2FuLT5pbmRleFJlbGF0aW9uKTsKIAkJaWYg KHNjYW4tPmluc3RydW1lbnQpCiAJCQlzY2FuLT5pbnN0cnVtZW50LT5uc2VhcmNoZXMrKzsKIAot CQlzby0+Zmlyc3RDYWxsID0gZmFsc2U7Ci0JCXNvLT5jdXJQYWdlRGF0YSA9IHNvLT5uUGFnZURh dGEgPSAwOwotCQlzY2FuLT54c19oaXR1cCA9IE5VTEw7Ci0JCWlmIChzby0+cGFnZURhdGFDeHQp Ci0JCQlNZW1vcnlDb250ZXh0UmVzZXQoc28tPnBhZ2VEYXRhQ3h0KTsKKwkJQXNzZXJ0KHNjYW4t PnhzX2hpdHVwID09IE5VTEwpOwogCisJCS8qIGdpc3RTY2FuUGFnZSByb290IHBhZ2UgY2FsbCBz ZXR1cCAqLwogCQlmYWtlSXRlbS5ibGtubyA9IEdJU1RfUk9PVF9CTEtOTzsKIAkJbWVtc2V0KCZm YWtlSXRlbS5kYXRhLnBhcmVudGxzbiwgMCwgc2l6ZW9mKEdpc3ROU04pKTsKLQkJZ2lzdFNjYW5Q YWdlKHNjYW4sICZmYWtlSXRlbSwgTlVMTCwgTlVMTCwgTlVMTCk7CiAJfQogCisJLyoKKwkgKiBP cmRlcmVkIChuZWFyZXN0LW5laWdoYm9yKSBzY2FuLCB3aGljaCByZXR1cm5zICJ2aXJ0dWFsIiBi YXRjaGVzCisJICovCiAJaWYgKHNjYW4tPm51bWJlck9mT3JkZXJCeXMgPiAwKQogCXsKLQkJLyog TXVzdCBmZXRjaCB0dXBsZXMgaW4gc3RyaWN0IGRpc3RhbmNlIG9yZGVyICovCi0JCXJldHVybiBn ZXROZXh0TmVhcmVzdChzY2FuKTsKLQl9Ci0JZWxzZQotCXsKLQkJLyogRmV0Y2ggdHVwbGVzIGlu ZGV4LXBhZ2UtYXQtYS10aW1lICovCi0JCWZvciAoOzspCisJCWlmIChmaXJzdENhbGwpCiAJCXsK LQkJCWlmIChzby0+Y3VyUGFnZURhdGEgPCBzby0+blBhZ2VEYXRhKQotCQkJewotCQkJCWlmIChz Y2FuLT5raWxsX3ByaW9yX3R1cGxlICYmIHNvLT5jdXJQYWdlRGF0YSA+IDApCi0JCQkJewotCi0J CQkJCWlmIChzby0+a2lsbGVkSXRlbXMgPT0gTlVMTCkKLQkJCQkJewotCQkJCQkJTWVtb3J5Q29u dGV4dCBvbGRDeHQgPQotCQkJCQkJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhzby0+Z2lzdHN0YXRl LT5zY2FuQ3h0KTsKLQotCQkJCQkJc28tPmtpbGxlZEl0ZW1zID0KLQkJCQkJCQkoT2Zmc2V0TnVt YmVyICopIHBhbGxvYyhNYXhJbmRleFR1cGxlc1BlclBhZ2UKLQkJCQkJCQkJCQkJCQkqIHNpemVv ZihPZmZzZXROdW1iZXIpKTsKLQotCQkJCQkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZEN4dCk7 Ci0JCQkJCX0KLQkJCQkJaWYgKHNvLT5udW1LaWxsZWQgPCBNYXhJbmRleFR1cGxlc1BlclBhZ2Up Ci0JCQkJCQlzby0+a2lsbGVkSXRlbXNbc28tPm51bUtpbGxlZCsrXSA9Ci0JCQkJCQkJc28tPnBh Z2VEYXRhW3NvLT5jdXJQYWdlRGF0YSAtIDFdLm9mZm51bTsKLQkJCQl9Ci0JCQkJLyogY29udGlu dWluZyB0byByZXR1cm4gdHVwbGVzIGZyb20gYSBsZWFmIHBhZ2UgKi8KLQkJCQlzY2FuLT54c19o ZWFwdGlkID0gc28tPnBhZ2VEYXRhW3NvLT5jdXJQYWdlRGF0YV0uaGVhcFB0cjsKLQkJCQlzY2Fu LT54c19yZWNoZWNrID0gc28tPnBhZ2VEYXRhW3NvLT5jdXJQYWdlRGF0YV0ucmVjaGVjazsKLQot CQkJCS8qIGluIGFuIGluZGV4LW9ubHkgc2NhbiwgYWxzbyByZXR1cm4gdGhlIHJlY29uc3RydWN0 ZWQgdHVwbGUgKi8KLQkJCQlpZiAoc2Nhbi0+eHNfd2FudF9pdHVwKQotCQkJCQlzY2FuLT54c19o aXR1cCA9IHNvLT5wYWdlRGF0YVtzby0+Y3VyUGFnZURhdGFdLnJlY29udHVwOwotCi0JCQkJc28t PmN1clBhZ2VEYXRhKys7Ci0KLQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCX0KLQotCQkJLyoKLQkJCSAq IENoZWNrIHRoZSBsYXN0IHJldHVybmVkIHR1cGxlIGFuZCBhZGQgaXQgdG8ga2lsbGVkSXRlbXMg aWYKLQkJCSAqIG5lY2Vzc2FyeQotCQkJICovCi0JCQlpZiAoc2Nhbi0+a2lsbF9wcmlvcl90dXBs ZQotCQkJCSYmIHNvLT5jdXJQYWdlRGF0YSA+IDAKLQkJCQkmJiBzby0+Y3VyUGFnZURhdGEgPT0g c28tPm5QYWdlRGF0YSkKLQkJCXsKLQotCQkJCWlmIChzby0+a2lsbGVkSXRlbXMgPT0gTlVMTCkK LQkJCQl7Ci0JCQkJCU1lbW9yeUNvbnRleHQgb2xkQ3h0ID0KLQkJCQkJCU1lbW9yeUNvbnRleHRT d2l0Y2hUbyhzby0+Z2lzdHN0YXRlLT5zY2FuQ3h0KTsKLQotCQkJCQlzby0+a2lsbGVkSXRlbXMg PQotCQkJCQkJKE9mZnNldE51bWJlciAqKSBwYWxsb2MoTWF4SW5kZXhUdXBsZXNQZXJQYWdlCi0J CQkJCQkJCQkJCQkqIHNpemVvZihPZmZzZXROdW1iZXIpKTsKLQotCQkJCQlNZW1vcnlDb250ZXh0 U3dpdGNoVG8ob2xkQ3h0KTsKLQkJCQl9Ci0JCQkJaWYgKHNvLT5udW1LaWxsZWQgPCBNYXhJbmRl eFR1cGxlc1BlclBhZ2UpCi0JCQkJCXNvLT5raWxsZWRJdGVtc1tzby0+bnVtS2lsbGVkKytdID0K LQkJCQkJCXNvLT5wYWdlRGF0YVtzby0+Y3VyUGFnZURhdGEgLSAxXS5vZmZudW07Ci0JCQl9Ci0J CQkvKiBmaW5kIGFuZCBwcm9jZXNzIHRoZSBuZXh0IGluZGV4IHBhZ2UgKi8KLQkJCWRvCi0JCQl7 Ci0JCQkJR0lTVFNlYXJjaEl0ZW0gKml0ZW07Ci0KLQkJCQlpZiAoKHNvLT5jdXJCbGtubyAhPSBJ bnZhbGlkQmxvY2tOdW1iZXIpICYmIChzby0+bnVtS2lsbGVkID4gMCkpCi0JCQkJCWdpc3RraWxs aXRlbXMoc2Nhbik7Ci0KLQkJCQlpdGVtID0gZ2V0TmV4dEdJU1RTZWFyY2hJdGVtKHNvKTsKLQot CQkJCWlmICghaXRlbSkKLQkJCQkJcmV0dXJuIGZhbHNlOwotCi0JCQkJQ0hFQ0tfRk9SX0lOVEVS UlVQVFMoKTsKLQotCQkJCS8qIHNhdmUgY3VycmVudCBpdGVtIEJsb2NrTnVtYmVyIGZvciBuZXh0 IGdpc3RraWxsaXRlbXMoKSBjYWxsICovCi0JCQkJc28tPmN1ckJsa25vID0gaXRlbS0+Ymxrbm87 Ci0KLQkJCQkvKgotCQkJCSAqIFdoaWxlIHNjYW5uaW5nIGEgbGVhZiBwYWdlLCBJdGVtUG9pbnRl cnMgb2YgbWF0Y2hpbmcgaGVhcAotCQkJCSAqIHR1cGxlcyBhcmUgc3RvcmVkIGluIHNvLT5wYWdl RGF0YS4gIElmIHRoZXJlIGFyZSBhbnkgb24KLQkJCQkgKiB0aGlzIHBhZ2UsIHdlIGZhbGwgb3V0 IG9mIHRoZSBpbm5lciAiZG8iIGFuZCBsb29wIGFyb3VuZCB0bwotCQkJCSAqIHJldHVybiB0aGVt LgotCQkJCSAqLwotCQkJCWdpc3RTY2FuUGFnZShzY2FuLCBpdGVtLCBpdGVtLT5kaXN0YW5jZXMs IE5VTEwsIE5VTEwpOwotCi0JCQkJcGZyZWUoaXRlbSk7Ci0JCQl9IHdoaWxlIChzby0+blBhZ2VE YXRhID09IDApOworCQkJLyogQWN0dWFsbHkgcHJvY2VzcyB0aGUgcm9vdCBwYWdlICovCisJCQln aXN0U2NhblBhZ2Uoc2NhbiwgJmZha2VJdGVtLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsKIAkJ fQorCisJCS8qIGVsc2Ugc2F2ZSBtYXRjaGVzIGJlbG93IHRoZSByb290IGludG8gbmV3YmF0Y2gg Ki8KKwkJcmV0dXJuIGdpc3RnZXRiYXRjaF9vcmRlcmVkKHNjYW4sIG5ld2JhdGNoKTsKKwl9CisK KwkvKgorCSAqIE5vbi1vcmRlcmVkIHNjYW4sIHdoaWNoIHJldHVybnMgZ3VhcmRhYmxlIGJhdGNo ZXMgaW4gdGhlIG9yZGVyIHRoYXQgdGhlCisJICogc2NhbiB2aXNpdHMgdGhlaXIgbGVhZiBwYWdl cyBpbgorCSAqLworCWlmIChmaXJzdENhbGwpCisJeworCQkvKiBBY3R1YWxseSBwcm9jZXNzIHRo ZSByb290IHBhZ2UgKi8KKwkJZ2lzdFNjYW5QYWdlKHNjYW4sICZmYWtlSXRlbSwgTlVMTCwgTlVM TCwgTlVMTCwgbmV3YmF0Y2gpOworCQlpZiAobmV3YmF0Y2gtPmZpcnN0SXRlbSA8PSBuZXdiYXRj aC0+bGFzdEl0ZW0pCisJCQlyZXR1cm4gbmV3YmF0Y2g7CisJfQorCS8qIGVsc2Ugc2F2ZSBtYXRj aGVzIGJlbG93IHRoZSByb290IGludG8gbmV3YmF0Y2ggKi8KKworCWZvciAoOzspCisJeworCQlH SVNUU2VhcmNoSXRlbSAqaXRlbSA9IGdldE5leHRHSVNUU2VhcmNoSXRlbShzbyk7CisKKwkJaWYg KGl0ZW0gPT0gTlVMTCkKKwkJeworCQkJLyogTm8gbW9yZSBpbmRleCBwYWdlcyB0byBzY2FuOyB0 aGUgc2NhbiBpcyBleGhhdXN0ZWQgKi8KKwkJCWluZGV4YW1fdXRpbF9yZWxlYXNlX2JhdGNoKHNj YW4sIG5ld2JhdGNoKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisKKwkJQ0hFQ0tfRk9SX0lOVEVS UlVQVFMoKTsKKworCQkvKiBTY2FuIHRoaXMgcXVldWVkIGluZGV4IHBhZ2U7IG1hdGNoaW5nIGxl YWYgaXRlbXMgZ28gaW50byB0aGUgYmF0Y2ggKi8KKwkJZ2lzdFNjYW5QYWdlKHNjYW4sIGl0ZW0s IGl0ZW0tPmRpc3RhbmNlcywgTlVMTCwgTlVMTCwgbmV3YmF0Y2gpOworCQlwZnJlZShpdGVtKTsK KworCQkvKiBJZiB0aGlzIGxlYWYgcGFnZSBwcm9kdWNlZCBtYXRjaGluZyBpdGVtcywgcmV0dXJu IHRoZSBiYXRjaCAqLworCQlpZiAobmV3YmF0Y2gtPmZpcnN0SXRlbSA8PSBuZXdiYXRjaC0+bGFz dEl0ZW0pCisJCQlyZXR1cm4gbmV3YmF0Y2g7CisJfQorCisJcGdfdW5yZWFjaGFibGUoKTsKKwor CXJldHVybiBOVUxMOworfQorCisvKgorICogZ2lzdHVuZ3VhcmRiYXRjaCgpIC0tIERyb3AgYSBi YXRjaCdzIFRJRCByZWN5Y2xpbmcgaW50ZXJsb2NrIChidWZmZXIgcGluKQorICoKKyAqIENhbGxl ZCBieSB0aGUgdGFibGUgQU0gd2hlbiBpdCdzIHNhZmUgdG8gZHJvcCB0aGUgYnVmZmVyIHBpbiBo ZWxkIHRvCisgKiBwcmV2ZW50IGNvbmN1cnJlbnQgVElEIHJlY3ljbGluZyBieSBWQUNVVU0uCisg Ki8KK3ZvaWQKK2dpc3R1bmd1YXJkYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5C YXRjaCBiYXRjaCkKK3sKKwlHSVNUQmF0Y2hEYXRhICpnYmF0Y2ggPSBHSVNUQmF0Y2hHZXREYXRh KHNjYW4sIGJhdGNoKTsKKworCS8qIFNob3VsZCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGlmZiAh YmF0Y2hJbW1lZGlhdGVVbmd1YXJkICovCisJQXNzZXJ0KCFzY2FuLT5iYXRjaEltbWVkaWF0ZVVu Z3VhcmQpOworCUFzc2VydChiYXRjaC0+aXNHdWFyZGVkKTsKKworCVJlbGVhc2VCdWZmZXIoZ2Jh dGNoLT5idWYpOworfQorCisvKgorICogZ2lzdGdldHRyYW5zZm9ybSgpIC0tIFNldCB1cCB0aGUg c2NhbidzIHBlci10dXBsZSBvdXRwdXQgZm9yIG9uZSBiYXRjaCBpdGVtCisgKgorICogSW1wbGVt ZW50cyB0aGUgYW1nZXR0cmFuc2Zvcm0gaW50ZXJmYWNlLiAgVGhlIHRhYmxlIEFNIGNhbGxzIHRo aXMgYXMgaXQKKyAqIHJldHVybnMgZWFjaCBpdGVtIG9mIGEgR2lTVCBzY2FuLCB0byBzZXQgdGhl IHNjYW4gZGVzY3JpcHRvcidzIHBlci10dXBsZQorICogb3V0cHV0IGZyb20gdGhlIGl0ZW0ncyBw ZXItaXRlbSBkYXRhLgorICoKKyAqICAgLSBXZSBhbHdheXMgYXBwbHkgdGhlIGl0ZW0ncyBxdWFs IHJlY2hlY2sgZmxhZyB0byBzY2FuLT54c19yZWNoZWNrLgorICogICAtIEZvciBvcmRlcmVkIHNj YW5zLCB3ZSByZXBvcnQgdGhlIGl0ZW0ncyBvd24gT1JERVIgQlkgZGlzdGFuY2VzIChzdG9yZWQg aW4KKyAqICAgICB0aGUgcGVyLWl0ZW0gaW5kZXggQU0gYXJlYSBieSBnaXN0Z2V0YmF0Y2hfb3Jk ZXJlZCkgYXMgeHNfb3JkZXJieXZhbHMuCisgKiAgICAgVGhleSBhcmUgZmxhZ2dlZCBmb3IgcmVj aGVjayBvbmx5IHdoZW4gdGhlIGRpc3RhbmNlIGZ1bmN0aW9uIHdhcyBsb3NzeSBmb3IKKyAqICAg ICB0aGF0IGl0ZW07IGFuIGV4YWN0IGRpc3RhbmNlIGlzIHJlcG9ydGVkIGFzIGZpbmFsLCB3aGls ZSBhIGxvc3N5IGxvd2VyCisgKiAgICAgYm91bmQgaXMgcmVjaGVja2VkIGJ5IHRoZSBleGVjdXRv cidzIHJlb3JkZXIgcXVldWUgdG8gcmVjb21wdXRlIHRoZSB0cnVlCisgKiAgICAgb3JkZXIuCisg KiAgIC0gRm9yIGluZGV4LW9ubHkgc2NhbnMsIHdlIHJlY29uc3RydWN0IHRoZSBvcmlnaW5hbGx5 IGluZGV4ZWQgdmFsdWVzIGZyb20KKyAqICAgICB0aGUgc3RvcmVkIG9uLWRpc2sgaW5kZXggdHVw bGUgaW50byBhIGhlYXAgdHVwbGUsIGV4cG9zZWQgYXMgeHNfaGl0dXAuCisgKgorICogVGhlIHJl Y29uc3RydWN0ZWQgdHVwbGUgbGl2ZXMgaW4gdGhlIHNjYW4ncyBtZW1vcnkgY29udGV4dCBhbmQg b25seSBuZWVkcyB0bworICogb3V0bGl2ZSBhIHNpbmdsZSB0YWJsZV9pbmRleF9nZXRuZXh0X3Ns b3QgY2FsbCAodGhlIGV4ZWN1dG9yIGNvcGllcyBpdCBpbnRvCisgKiB0aGUgc2NhbiBzbG90KS4g IFdlIGZyZWUgdGhlIHByZXZpb3VzbHkgcmV0dXJuZWQgdHVwbGUgYmVmb3JlIGJ1aWxkaW5nIHRo ZQorICogbmV4dCBvbmUuCisgKi8KK3ZvaWQKK2dpc3RnZXR0cmFuc2Zvcm0oSW5kZXhTY2FuRGVz YyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCwgaW50IGl0ZW0pCit7CisJR0lTVFNjYW5PcGFx dWUgc28gPSAoR0lTVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKKworCUFzc2VydChpdGVtID49 IGJhdGNoLT5maXJzdEl0ZW0gJiYgaXRlbSA8PSBiYXRjaC0+bGFzdEl0ZW0pOworCisJLyogT3Jk ZXJlZCBzY2FuIChtdXN0IGJlIGEgcGxhaW4gaW5kZXggc2NhbikgKi8KKwlpZiAoc2Nhbi0+bnVt YmVyT2ZPcmRlckJ5cyA+IDApCisJeworCQlHSVNUQmF0Y2hJdGVtICpiaXRlbSA9IEdJU1RCYXRj aEdldEl0ZW0oc2NhbiwgYmF0Y2gsIGl0ZW0pOworCisJCUFzc2VydCghc2Nhbi0+eHNfd2FudF9p dHVwKTsKKworCQkvKiBBcHBseSB0aGlzIGl0ZW0ncyBxdWFsIHJlY2hlY2sgZmxhZyAqLworCQlz Y2FuLT54c19yZWNoZWNrID0gYml0ZW0tPnJlY2hlY2s7CisKKwkJLyoKKwkJICogTm90ZTogVGhp cyBpcyBhICJ2aXJ0dWFsIiBiYXRjaC4gIFRoZSBpdGVtcyBmcm9tIGNhbGxlcidzIGJhdGNoCisJ CSAqIHdlcmUgc3RvcmVkIGluIHRoZSBiYXRjaCBpbiBkaXN0YW5jZSBvcmRlciBieSBnaXN0Z2V0 YmF0Y2hfb3JkZXJlZCwKKwkJICogcmlnaHQgYmVmb3JlIGdpc3RnZXRiYXRjaCByZXR1cm5lZCBp dC4KKwkJICovCisJCUFzc2VydChHSVNUQmF0Y2hHZXREYXRhKHNjYW4sIGJhdGNoKS0+Ymxrbm8g PT0gSW52YWxpZEJsb2NrTnVtYmVyKTsKKwkJaW5kZXhfc3RvcmVfZmxvYXQ4X29yZGVyYnlfZGlz dGFuY2VzKHNjYW4sIHNvLT5vcmRlckJ5VHlwZXMsCisJCQkJCQkJCQkJCSBiaXRlbS0+ZGlzdGFu Y2VzLAorCQkJCQkJCQkJCQkgYml0ZW0tPnJlY2hlY2tEaXN0YW5jZXMpOworCQlyZXR1cm47CisJ fQorCisJLyoKKwkgKiBVbm9yZGVyZWQgc2Nhbi4KKwkgKgorCSAqIEFsd2F5cyB1c2VzIHNpbXBs ZSBib29sIGFycmF5IGZvciBpdGVtIHJlY2hlY2sgZmxhZ3MuCisJICovCisJc2Nhbi0+eHNfcmVj aGVjayA9IEdJU1RCYXRjaEdldFJlY2hlY2soc2NhbiwgYmF0Y2gpW2l0ZW1dOworCisJLyogSW5k ZXgtb25seSBzY2FuICovCisJaWYgKHNjYW4tPnhzX3dhbnRfaXR1cCkKKwl7CisJCS8qIFJlY29u c3RydWN0IGEgcmV0dXJuYWJsZSBoZWFwIHR1cGxlIGZyb20gc3Rhc2hlZCBpbmRleCB0dXBsZSAq LworCQlJbmRleFR1cGxlCWl0dXAgPSAoSW5kZXhUdXBsZSkgKGJhdGNoLT5jdXJyVHVwbGVzICsK KwkJCQkJCQkJCQkgYmF0Y2gtPml0ZW1zW2l0ZW1dLnR1cGxlT2Zmc2V0KTsKKwkJTWVtb3J5Q29u dGV4dCBvbGRjeHQ7CisKKwkJaWYgKHNjYW4tPnhzX2hpdHVwKQorCQl7CisJCQlwZnJlZShzY2Fu LT54c19oaXR1cCk7CisJCQlzY2FuLT54c19oaXR1cCA9IE5VTEw7CisJCX0KKworCQkvKiByZWNv bnN0cnVjdCB0aGUgb3JpZ2luYWxseSBpbmRleGVkIHZhbHVlcyBhcyBhIGhlYXAgdHVwbGUgKi8K KwkJb2xkY3h0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHNvLT5naXN0c3RhdGUtPnNjYW5DeHQp OworCQlzY2FuLT54c19oaXR1cCA9IGdpc3RGZXRjaFR1cGxlKHNvLT5naXN0c3RhdGUsIHNjYW4t PmluZGV4UmVsYXRpb24sIGl0dXApOworCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3h0KTsK IAl9CiB9CiAKQEAgLTc2NSwxOSArODgzLDEwIEBAIGdpc3RnZXRiaXRtYXAoSW5kZXhTY2FuRGVz YyBzY2FuLCBUSURCaXRtYXAgKnRibSkKIAkJc2Nhbi0+aW5zdHJ1bWVudC0+bnNlYXJjaGVzKys7 CiAKIAkvKiBCZWdpbiB0aGUgc2NhbiBieSBwcm9jZXNzaW5nIHRoZSByb290IHBhZ2UgKi8KLQlz by0+Y3VyUGFnZURhdGEgPSBzby0+blBhZ2VEYXRhID0gMDsKLQlzY2FuLT54c19oaXR1cCA9IE5V TEw7Ci0JaWYgKHNvLT5wYWdlRGF0YUN4dCkKLQkJTWVtb3J5Q29udGV4dFJlc2V0KHNvLT5wYWdl RGF0YUN4dCk7Ci0KIAlmYWtlSXRlbS5ibGtubyA9IEdJU1RfUk9PVF9CTEtOTzsKIAltZW1zZXQo JmZha2VJdGVtLmRhdGEucGFyZW50bHNuLCAwLCBzaXplb2YoR2lzdE5TTikpOwotCWdpc3RTY2Fu UGFnZShzY2FuLCAmZmFrZUl0ZW0sIE5VTEwsIHRibSwgJm50aWRzKTsKKwlnaXN0U2NhblBhZ2Uo c2NhbiwgJmZha2VJdGVtLCBOVUxMLCB0Ym0sICZudGlkcywgTlVMTCk7CiAKLQkvKgotCSAqIFdo aWxlIHNjYW5uaW5nIGEgbGVhZiBwYWdlLCBJdGVtUG9pbnRlcnMgb2YgbWF0Y2hpbmcgaGVhcCB0 dXBsZXMgd2lsbAotCSAqIGJlIHN0b3JlZCBkaXJlY3RseSBpbnRvIHRibSwgc28gd2UgZG9uJ3Qg bmVlZCB0byBkZWFsIHdpdGggdGhlbSBoZXJlLgotCSAqLwogCWZvciAoOzspCiAJewogCQlHSVNU U2VhcmNoSXRlbSAqaXRlbSA9IGdldE5leHRHSVNUU2VhcmNoSXRlbShzbyk7CkBAIC03ODcsNyAr ODk2LDggQEAgZ2lzdGdldGJpdG1hcChJbmRleFNjYW5EZXNjIHNjYW4sIFRJREJpdG1hcCAqdGJt KQogCiAJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CiAKLQkJZ2lzdFNjYW5QYWdlKHNjYW4sIGl0 ZW0sIGl0ZW0tPmRpc3RhbmNlcywgdGJtLCAmbnRpZHMpOworCQkvKiBTY2FuIHRoaXMgcXVldWVk IGluZGV4IHBhZ2U7IG1hdGNoaW5nIGxlYWYgaXRlbXMgZ28gaW50byB0Ym0gKi8KKwkJZ2lzdFNj YW5QYWdlKHNjYW4sIGl0ZW0sIGl0ZW0tPmRpc3RhbmNlcywgdGJtLCAmbnRpZHMsIE5VTEwpOwog CiAJCXBmcmVlKGl0ZW0pOwogCX0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0 L2dpc3RzY2FuLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0c2Nhbi5jCmluZGV4IGM2 NWY5M2FiZC4uM2VjNDA1Mzc5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9n aXN0c2Nhbi5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3RzY2FuLmMKQEAgLTEw NCwxMiArMTA0LDM0IEBAIGdpc3RiZWdpbnNjYW4oUmVsYXRpb24gciwgaW50IG5rZXlzLCBpbnQg bm9yZGVyYnlzKQogCQlzY2FuLT54c19vcmRlcmJ5dmFscyA9IHBhbGxvYzBfYXJyYXkoRGF0dW0s IHNjYW4tPm51bWJlck9mT3JkZXJCeXMpOwogCQlzY2FuLT54c19vcmRlcmJ5bnVsbHMgPSBwYWxs b2NfYXJyYXkoYm9vbCwgc2Nhbi0+bnVtYmVyT2ZPcmRlckJ5cyk7CiAJCW1lbXNldChzY2FuLT54 c19vcmRlcmJ5bnVsbHMsIHRydWUsIHNpemVvZihib29sKSAqIHNjYW4tPm51bWJlck9mT3JkZXJC eXMpOwotCX0KIAotCXNvLT5raWxsZWRJdGVtcyA9IE5VTEw7CQkvKiB1bnRpbCBuZWVkZWQgKi8K LQlzby0+bnVtS2lsbGVkID0gMDsKLQlzby0+Y3VyQmxrbm8gPSBJbnZhbGlkQmxvY2tOdW1iZXI7 Ci0Jc28tPmN1clBhZ2VMU04gPSBJbnZhbGlkWExvZ1JlY1B0cjsKKwkJLyoKKwkJICogT3JkZXJl ZCBzY2FucyBmaWxsIGEgInZpcnR1YWwiIGJhdGNoIGJ5IGRyYWluaW5nIHRoZQorCQkgKiBkaXN0 YW5jZS1vcmRlcmVkIHF1ZXVlLCBzbyB0aGUgYmF0Y2ggc2l6ZSBpcyBhIHR1bmluZyBrbm9iIHdp dGggbm8KKwkJICogbmF0dXJhbCB2YWx1ZS4gVGVzdGluZyBoYXMgc2hvd24gdGhhdCBhIHZlcnkg c21hbGwgc2l6ZSB3aWxsCisJCSAqIGluY3JlYXNlIHBlci1iYXRjaCBvdmVyaGVhZCAoYW5kIGxp a2VseSBpbnN0cnVjdGlvbi1jYWNoZSBtaXNzZXMpLAorCQkgKiB3aGlsZSBhIGxhcmdlIHNpemUg KHN1Y2ggYXMgTWF4SW5kZXhUdXBsZXNQZXJQYWdlKSByaXNrcyBwcm9kdWNpbmcKKwkJICogbWFu eSB0dXBsZXMgdGhhdCBhIExJTUlUIG5vZGUgbmV2ZXIgY29uc3VtZXMuICBUaGlzIG1heGl0ZW1z YmF0Y2gKKwkJICogaXMgYSBjb21wcm9taXNlLgorCQkgKi8KKwkJc2Nhbi0+bWF4aXRlbXNiYXRj aCA9IE1heEluZGV4VHVwbGVzUGVyUGFnZSAvIDMyOworCX0KKwllbHNlCisJCXNjYW4tPm1heGl0 ZW1zYmF0Y2ggPSBNYXhJbmRleFR1cGxlc1BlclBhZ2U7CisKKwlzY2FuLT5iYXRjaF9pbmRleF9v cGFxdWVfc3RhdGljID0gTUFYQUxJR04oc2l6ZW9mKEdJU1RCYXRjaERhdGEpKTsKKworCS8qCisJ ICogVXNlIHNlY29uZCBvcGFxdWUgYXJlYSBmb3Igb3VyIHBlci1pdGVtIGRhdGE6IGEgR0lTVEJh dGNoSXRlbSBhcnJheQorCSAqICh3aXRoIHJvb20gZm9yIGVhY2ggaXRlbSdzIE9SREVSIEJZIGRp c3RhbmNlcykgZm9yIG9yZGVyZWQgc2NhbnMsIG9yCisJICoganVzdCBhbiBhcnJheSBvZiBxdWFs IHJlY2hlY2sgZmxhZ3MgZm9yIHVub3JkZXJlZCBzY2FucworCSAqLworCWlmIChzY2FuLT5udW1i ZXJPZk9yZGVyQnlzID4gMCkKKwkJc2Nhbi0+YmF0Y2hfaW5kZXhfb3BhcXVlX2R5biA9CisJCQlT aXplT2ZHSVNUQmF0Y2hJdGVtKHNjYW4tPm51bWJlck9mT3JkZXJCeXMpICogc2Nhbi0+bWF4aXRl bXNiYXRjaDsKKwllbHNlCisJCXNjYW4tPmJhdGNoX2luZGV4X29wYXF1ZV9keW4gPSBzaXplb2Yo Ym9vbCkgKiBzY2FuLT5tYXhpdGVtc2JhdGNoOworCXNjYW4tPmJhdGNoX3R1cGxlc193b3Jrc3Bh Y2UgPSBCTENLU1o7CiAKIAlzY2FuLT5vcGFxdWUgPSBzbzsKIApAQCAtMTY4LDggKzE5MCw3IEBA IGdpc3RyZXNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuS2V5IGtleSwgaW50IG5rZXlzLAog CiAJLyoKIAkgKiBJZiB3ZSdyZSBkb2luZyBhbiBpbmRleC1vbmx5IHNjYW4sIG9uIHRoZSBmaXJz dCBjYWxsLCBhbHNvIGluaXRpYWxpemUgYQotCSAqIHR1cGxlIGRlc2NyaXB0b3IgdG8gcmVwcmVz ZW50IHRoZSByZXR1cm5lZCBpbmRleCB0dXBsZXMgYW5kIGNyZWF0ZSBhCi0JICogbWVtb3J5IGNv bnRleHQgdG8gaG9sZCB0aGVtIGR1cmluZyB0aGUgc2Nhbi4KKwkgKiB0dXBsZSBkZXNjcmlwdG9y IHRvIHJlcHJlc2VudCB0aGUgcmV0dXJuZWQgaW5kZXggdHVwbGVzLgogCSAqLwogCWlmIChzY2Fu LT54c193YW50X2l0dXAgJiYgIXNjYW4tPnhzX2hpdHVwZGVzYykKIAl7CkBAIC0yMDMsMTEgKzIy NCw2IEBAIGdpc3RyZXNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuS2V5IGtleSwgaW50IG5r ZXlzLAogCQl9CiAJCVR1cGxlRGVzY0ZpbmFsaXplKHNvLT5naXN0c3RhdGUtPmZldGNoVHVwZGVz Yyk7CiAJCXNjYW4tPnhzX2hpdHVwZGVzYyA9IHNvLT5naXN0c3RhdGUtPmZldGNoVHVwZGVzYzsK LQotCQkvKiBBbHNvIGNyZWF0ZSBhIG1lbW9yeSBjb250ZXh0IHRoYXQgd2lsbCBob2xkIHRoZSBy ZXR1cm5lZCB0dXBsZXMgKi8KLQkJc28tPnBhZ2VEYXRhQ3h0ID0gQWxsb2NTZXRDb250ZXh0Q3Jl YXRlKHNvLT5naXN0c3RhdGUtPnNjYW5DeHQsCi0JCQkJCQkJCQkJCQkiR2lTVCBwYWdlIGRhdGEg Y29udGV4dCIsCi0JCQkJCQkJCQkJCQlBTExPQ1NFVF9ERUZBVUxUX1NJWkVTKTsKIAl9CiAKIAkv KiBjcmVhdGUgbmV3LCBlbXB0eSBwYWlyaW5nIGhlYXAgZm9yIHNlYXJjaCBxdWV1ZSAqLwpAQCAt MjE1LDggKzIzMSw2IEBAIGdpc3RyZXNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuS2V5IGtl eSwgaW50IG5rZXlzLAogCXNvLT5xdWV1ZSA9IHBhaXJpbmdoZWFwX2FsbG9jYXRlKHBhaXJpbmdo ZWFwX0dJU1RTZWFyY2hJdGVtX2NtcCwgc2Nhbik7CiAJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9s ZEN4dCk7CiAKLQlzby0+Zmlyc3RDYWxsID0gdHJ1ZTsKLQogCS8qIFVwZGF0ZSBzY2FuIGtleSwg aWYgYSBuZXcgb25lIGlzIGdpdmVuICovCiAJaWYgKGtleSAmJiBzY2FuLT5udW1iZXJPZktleXMg PiAwKQogCXsKQEAgLTM0MCw3ICszNTQsOCBAQCBnaXN0cmVzY2FuKEluZGV4U2NhbkRlc2Mgc2Nh biwgU2NhbktleSBrZXksIGludCBua2V5cywKIAkJCXBmcmVlKGZuX2V4dHJhcyk7CiAJfQogCi0J LyogYW55IHByZXZpb3VzIHhzX2hpdHVwIHdpbGwgaGF2ZSBiZWVuIHBmcmVlJ2QgaW4gY29udGV4 dCByZXNldHMgYWJvdmUgKi8KKwlpZiAoc2Nhbi0+eHNfaGl0dXApCisJCXBmcmVlKHNjYW4tPnhz X2hpdHVwKTsKIAlzY2FuLT54c19oaXR1cCA9IE5VTEw7CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9naXN0L2dpc3R1dGlsLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9n aXN0dXRpbC5jCmluZGV4IDBmNThmNjE4Ny4uYTY4NzcxOGU3IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9hY2Nlc3MvZ2lzdC9naXN0dXRpbC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0 L2dpc3R1dGlsLmMKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlICJ1dGlscy9mbG9hdC5oIgog I2luY2x1ZGUgInV0aWxzL2ZtZ3Jwcm90b3MuaCIKICNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUu aCIKKyNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgogI2luY2x1ZGUgInV0aWxzL3JlbC5oIgog I2luY2x1ZGUgInV0aWxzL3NuYXBtZ3IuaCIKICNpbmNsdWRlICJ1dGlscy9zeXNjYWNoZS5oIgpA QCAtNjcwLDYgKzY3MSw3IEBAIGdpc3RGZXRjaFR1cGxlKEdJU1RTVEFURSAqZ2lzdHN0YXRlLCBS ZWxhdGlvbiByLCBJbmRleFR1cGxlIHR1cGxlKQogCURhdHVtCQlmZXRjaGF0dFtJTkRFWF9NQVhf S0VZU107CiAJYm9vbAkJaXNudWxsW0lOREVYX01BWF9LRVlTXTsKIAlpbnQJCQlpOworCUhlYXBU dXBsZQlodHVwOwogCiAJZm9yIChpID0gMDsgaSA8IEluZGV4UmVsYXRpb25HZXROdW1iZXJPZktl eUF0dHJpYnV0ZXMocik7IGkrKykKIAl7CkBAIC03MTcsNyArNzE5LDEyIEBAIGdpc3RGZXRjaFR1 cGxlKEdJU1RTVEFURSAqZ2lzdHN0YXRlLCBSZWxhdGlvbiByLCBJbmRleFR1cGxlIHR1cGxlKQog CX0KIAlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3h0KTsKIAotCXJldHVybiBoZWFwX2Zvcm1f dHVwbGUoZ2lzdHN0YXRlLT5mZXRjaFR1cGRlc2MsIGZldGNoYXR0LCBpc251bGwpOworCWh0dXAg PSBoZWFwX2Zvcm1fdHVwbGUoZ2lzdHN0YXRlLT5mZXRjaFR1cGRlc2MsIGZldGNoYXR0LCBpc251 bGwpOworCisJLyogY2xlYW51cCAqLworCU1lbW9yeUNvbnRleHRSZXNldChnaXN0c3RhdGUtPnRl bXBDeHQpOworCisJcmV0dXJuIGh0dXA7CiB9CiAKIGZsb2F0CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9hY2Nlc3MvZ2lzdC9naXN0dmFjdXVtLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9n aXN0dmFjdXVtLmMKaW5kZXggNjg2YTA0MTgwLi5hZDBiN2E3MWYgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9naXN0L2dpc3R2YWN1dW0uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv Z2lzdC9naXN0dmFjdXVtLmMKQEAgLTMyNiwxMCArMzI2LDExIEBAIHJlc3RhcnQ6CiAJcmVjdXJz ZV90byA9IEludmFsaWRCbG9ja051bWJlcjsKIAogCS8qCi0JICogV2UgYXJlIG5vdCBnb2luZyB0 byBzdGF5IGhlcmUgZm9yIGEgbG9uZyB0aW1lLCBhZ2dyZXNzaXZlbHkgZ3JhYiBhbgotCSAqIGV4 Y2x1c2l2ZSBsb2NrLgorCSAqIEdldCBhIGZ1bGwgY2xlYW51cCBsb2NrIG9uIHRoaXMgcGFnZS4g IFdlIG11c3QgZ2V0IHN1Y2ggYSBsb2NrIG9uIGV2ZXJ5CisJICogbGVhZiBwYWdlIG92ZXIgdGhl IGNvdXJzZSBvZiB0aGUgdmFjdXVtIHNjYW4sIHdoZXRoZXIgb3Igbm90IGl0CisJICogYWN0dWFs bHkgY29udGFpbnMgYW55IGRlbGV0YWJsZSB0dXBsZXMuCiAJICovCi0JTG9ja0J1ZmZlcihidWZm ZXIsIEdJU1RfRVhDTFVTSVZFKTsKKwlMb2NrQnVmZmVyRm9yQ2xlYW51cChidWZmZXIpOwogCXBh Z2UgPSBCdWZmZXJHZXRQYWdlKGJ1ZmZlcik7CiAKIAlpZiAoZ2lzdFBhZ2VSZWN5Y2xhYmxlKHBh Z2UpKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jCmluZGV4IDc2ZTMxOTNkOS4uMTAzYTA4MzNiIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMKKysrIGIvc3JjL2JhY2tlbmQv YWNjZXNzL2hhc2gvaGFzaC5jCkBAIC0xMTgsNiArMTE4LDcgQEAgaGFzaGhhbmRsZXIoUEdfRlVO Q1RJT05fQVJHUykKIAkJLmFtZ2V0YmF0Y2ggPSBoYXNoZ2V0YmF0Y2gsCiAJCS5hbXVuZ3VhcmRi YXRjaCA9IGhhc2h1bmd1YXJkYmF0Y2gsCiAJCS5hbWtpbGxpdGVtc2JhdGNoID0gaGFzaGtpbGxp dGVtc2JhdGNoLAorCQkuYW1nZXR0cmFuc2Zvcm0gPSBOVUxMLAogCQkuYW1nZXRiaXRtYXAgPSBo YXNoZ2V0Yml0bWFwLAogCQkuYW1lbmRzY2FuID0gaGFzaGVuZHNjYW4sCiAJCS5hbXBvc3Jlc2V0 ID0gTlVMTCwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9pbmRl eHNjYW4uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9pbmRleHNjYW4uYwppbmRl eCBhOWM4Y2UxNWIuLmUxYzExMmU2YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hl YXAvaGVhcGFtX2luZGV4c2Nhbi5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBh bV9pbmRleHNjYW4uYwpAQCAtOTQ3LDExICs5NDcsMjMgQEAgaGVhcGFtX2luZGV4X3JldHVybl9z Y2FucG9zX3RpZChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkhlYXBEYXRhICpoc2NhbiwK IAkJCQkJCQkJQmF0Y2hSaW5nSXRlbVBvcyAqc2NhblBvcywKIAkJCQkJCQkJYm9vbCAqYWxsX3Zp c2libGUpCiB7CisJYW1nZXR0cmFuc2Zvcm1fZnVuY3Rpb24gYW1nZXR0cmFuc2Zvcm0gPQorCQlz Y2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1nZXR0cmFuc2Zvcm07CiAJSGVhcEJhdGNo RGF0YSAqaGJhdGNoOwogCiAJLyogU2V0IHhzX2hlYXB0aWQsIHdoaWNoIGNhbGxlciAoYW5kIGNv cmUgZXhlY3V0b3IpIHdpbGwgbmVlZCAqLwogCXNjYW4tPnhzX2hlYXB0aWQgPSBzY2FuQmF0Y2gt Pml0ZW1zW3NjYW5Qb3MtPml0ZW1dLnRhYmxlVGlkOwogCisJLyoKKwkgKiBMZXQgdGhlIGluZGV4 IEFNIHNldCB0aGlzIGl0ZW0ncyBwZXItdHVwbGUgb3V0cHV0LiAgQW4gQU0gdGhhdCBwcm92aWRl cworCSAqIGFtZ2V0dHJhbnNmb3JtIHVzZXMgaXQgdG8gc2V0IHRoZSBpdGVtJ3MgcXVhbCByZWNo ZWNrIGZsYWcKKwkgKiAoc2Nhbi0+eHNfcmVjaGVjayksIGFuIG9yZGVyZWQgc2NhbidzIE9SREVS IEJZIGRpc3RhbmNlcworCSAqICh4c19vcmRlcmJ5dmFscy94c19yZWNoZWNrb3JkZXJieSksIGFu ZCBhbiBpbmRleC1vbmx5IHNjYW4ncyByZXR1cm5hYmxlCisJICogdHVwbGUgKHhzX2hpdHVwKS4K KwkgKi8KKwlpZiAoYW1nZXR0cmFuc2Zvcm0gIT0gTlVMTCkKKwkJYW1nZXR0cmFuc2Zvcm0oc2Nh biwgc2NhbkJhdGNoLCBzY2FuUG9zLT5pdGVtKTsKKwogCWlmIChhbGxfdmlzaWJsZSA9PSBOVUxM KQogCXsKIAkJLyoKQEAgLTk2NCw4ICs5NzYsMTQgQEAgaGVhcGFtX2luZGV4X3JldHVybl9zY2Fu cG9zX3RpZChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkhlYXBEYXRhICpoc2NhbiwKIAkv KiBJbmRleC1vbmx5IHNjYW4gKi8KIAlBc3NlcnQoc2Nhbi0+eHNfd2FudF9pdHVwKTsKIAotCXNj YW4tPnhzX2l0dXAgPSAoSW5kZXhUdXBsZSkgKHNjYW5CYXRjaC0+Y3VyclR1cGxlcyArCi0JCQkJ CQkJCSAgc2NhbkJhdGNoLT5pdGVtc1tzY2FuUG9zLT5pdGVtXS50dXBsZU9mZnNldCk7CisJLyoK KwkgKiBVbmxlc3MgdGhlIGluZGV4IEFNIGFscmVhZHkgcHJvZHVjZWQgdGhlIHJldHVybmFibGUg dHVwbGUgdmlhCisJICogYW1nZXR0cmFuc2Zvcm0gYWJvdmUgKGluIHhzX2hpdHVwKSwgc2V0IHRo ZSBvcmlnaW5hbCBpbmRleCB0dXBsZSB0aGF0CisJICogYW1nZXRiYXRjaCBzdG9yZWQgaW4gY3Vy clR1cGxlcyBpbiB4c19pdHVwLgorCSAqLworCWlmIChhbWdldHRyYW5zZm9ybSA9PSBOVUxMKQor CQlzY2FuLT54c19pdHVwID0gKEluZGV4VHVwbGUpIChzY2FuQmF0Y2gtPmN1cnJUdXBsZXMgKwor CQkJCQkJCQkJICBzY2FuQmF0Y2gtPml0ZW1zW3NjYW5Qb3MtPml0ZW1dLnR1cGxlT2Zmc2V0KTsK IAogCS8qCiAJICogU2V0IHZpc2liaWxpdHkgaW5mbyBmb3IgdGhlIGN1cnJlbnQgc2NhblBvcyBp dGVtIChwbHVzIHBvc3NpYmx5IHNvbWUKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9p bmRleC9hbWFwaS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2FtYXBpLmMKaW5kZXggZDRh ZGJiZWIyLi45ODg2ZjQ5ZmYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9h bWFwaS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9hbWFwaS5jCkBAIC01OCw2ICs1 OCw3IEBAIEdldEluZGV4QW1Sb3V0aW5lKE9pZCBhbWhhbmRsZXIpCiAJLyogQXNzZXJ0IHRoYXQg QU0gZG9lc24ndCBoYXZlIGFuIGludmFsaWQgY29tYmluYXRpb24gb2YgY2FsbGJhY2tzICovCiAJ QXNzZXJ0KChyb3V0aW5lLT5hbWdldGJhdGNoICE9IE5VTEwpID09IChyb3V0aW5lLT5hbXVuZ3Vh cmRiYXRjaCAhPSBOVUxMKSk7CiAJQXNzZXJ0KHJvdXRpbmUtPmFta2lsbGl0ZW1zYmF0Y2ggPT0g TlVMTCB8fCByb3V0aW5lLT5hbWdldGJhdGNoICE9IE5VTEwpOworCUFzc2VydChyb3V0aW5lLT5h bWdldHRyYW5zZm9ybSA9PSBOVUxMIHx8IHJvdXRpbmUtPmFtZ2V0YmF0Y2ggIT0gTlVMTCk7CiAJ QXNzZXJ0KHJvdXRpbmUtPmFtZ2V0YmF0Y2ggIT0gTlVMTCB8fCByb3V0aW5lLT5hbXBvc3Jlc2V0 ID09IE5VTEwpOwogCiAJcmV0dXJuIHJvdXRpbmU7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9h Y2Nlc3MvaW5kZXgvZ2VuYW0uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9nZW5hbS5jCmlu ZGV4IDEyZmI5NTQzOC4uZWQ5OTkxZmQwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mv aW5kZXgvZ2VuYW0uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYwpAQCAt MTMxLDYgKzEzMSw3IEBAIFJlbGF0aW9uR2V0SW5kZXhTY2FuKFJlbGF0aW9uIGluZGV4UmVsYXRp b24sIGludCBua2V5cywgaW50IG5vcmRlcmJ5cykKIAlzY2FuLT54c19nZXRuZXh0X3Nsb3QgPSBO VUxMOwogCiAJc2Nhbi0+YmF0Y2hfaW5kZXhfb3BhcXVlX3N0YXRpYyA9IDA7CisJc2Nhbi0+YmF0 Y2hfaW5kZXhfb3BhcXVlX2R5biA9IDA7CiAJc2Nhbi0+YmF0Y2hfdHVwbGVzX3dvcmtzcGFjZSA9 IDA7CiAJc2Nhbi0+YmF0Y2hfb3BhcXVlX3NpemUgPSAwOwogCXNjYW4tPmJhdGNoX3Blcl9pdGVt X3NpemUgPSAwOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YmF0 Y2guYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGJhdGNoLmMKaW5kZXggZmRhNTVh NTg4Li41MWQxNDc0MDEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRl eGJhdGNoLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YmF0Y2guYwpAQCAt NjMyLDEzICs2MzIsMTUgQEAgaW5kZXhhbV91dGlsX2FsbG9jX2JhdGNoKEluZGV4U2NhbkRlc2Mg c2NhbikKIAkJICoKIAkJICogVGhpcyBjb21iaW5lcyB0aGUgdGFibGUgQU0gb3BhcXVlIGFyZWEg KGl0cyBmaXhlZC1zaXplIGhlYWRlciBwbHVzCiAJCSAqIGFueSBwZXItaXRlbSBhcmVhIHVzZWQg ZHVyaW5nIGluZGV4LW9ubHkgc2NhbnMpIGFuZCB0aGUgaW5kZXggQU0ncwotCQkgKiBzdGF0aWMg b3BhcXVlIGFyZWEgaW50byBhIHNpbmdsZSBvZmZzZXQgdXNlZCB0byBmaW5kIHRoZSB0cnVlCi0J CSAqIGFsbG9jYXRpb24gYmFzZSBmcm9tIHRoZSBiYXRjaCBwb2ludGVyLiAgKFRoaXMgaXMgYWxz byB3aGVyZSB0aGUKLQkJICogZml4ZWQtc2l6ZSB0YWJsZSBBTSBvcGFxdWUgYXJlYSBjYW4gYmUg Zm91bmQuKQorCQkgKiBvcGFxdWUgYXJlYXMgKHN0YXRpYyBwbHVzIHRoZSBvcHRpb25hbCBkeW5h bWljKSBpbnRvIGEgc2luZ2xlCisJCSAqIG9mZnNldCB1c2VkIHRvIGZpbmQgdGhlIHRydWUgYWxs b2NhdGlvbiBiYXNlIGZyb20gdGhlIGJhdGNoCisJCSAqIHBvaW50ZXIuICAoVGhpcyBpcyBhbHNv IHdoZXJlIHRoZSBmaXhlZC1zaXplIHRhYmxlIEFNIG9wYXF1ZSBhcmVhCisJCSAqIGNhbiBiZSBm b3VuZC4pCiAJCSAqLwogCQlpZiAoc2Nhbi0+YmF0Y2hfYmFzZV9vZmZzZXQgPT0gMCkKIAkJewog CQkJU2l6ZQkJdGFibGVfYXJlYSA9IDA7CisJCQlTaXplCQlpbmRleF9keW5fYXJlYTsKIAogCQkJ LyoKIAkJCSAqIFRoZSB0YWJsZSBBTSBvcGFxdWUgYXJlYSBpcyBhIHNpbmdsZSBjb250aWd1b3Vz IGJsb2NrOiBhCkBAIC02NTgsNyArNjYwLDE4IEBAIGluZGV4YW1fdXRpbF9hbGxvY19iYXRjaChJ bmRleFNjYW5EZXNjIHNjYW4pCiAJCQkJCQkJCQkgIChTaXplKSBzY2FuLT5iYXRjaF9wZXJfaXRl bV9zaXplICoKIAkJCQkJCQkJCSAgc2Nhbi0+bWF4aXRlbXNiYXRjaCk7CiAKLQkJCXNjYW4tPmJh dGNoX2Jhc2Vfb2Zmc2V0ID0gdGFibGVfYXJlYSArCisJCQkvKgorCQkJICogVGhlIG9wdGlvbmFs IGR5bmFtaWMgaW5kZXggQU0gb3BhcXVlIGFyZWEKKwkJCSAqIChiYXRjaF9pbmRleF9vcGFxdWVf ZHluIGJ5dGVzKSBzaXRzIGJldHdlZW4gdGhlIHRhYmxlIEFNIGFyZWEKKwkJCSAqIGFuZCB0aGUg c3RhdGljIGluZGV4IEFNIG9wYXF1ZSBhcmVhCisJCQkgKi8KKwkJCWluZGV4X2R5bl9hcmVhID0g TUFYQUxJR04oc2Nhbi0+YmF0Y2hfaW5kZXhfb3BhcXVlX2R5bik7CisKKwkJCS8qCisJCQkgKiBp bmRleF9keW5fYXJlYSBpcyBhbGxvd2VkIHRvIGJlIHZlcnkgbGFyZ2UsIHNvIHdlJ3JlIGNhcmVm dWwgdG8KKwkJCSAqIG5vdCBsZXQgaXQgb3ZlcmZsb3cKKwkJCSAqLworCQkJc2Nhbi0+YmF0Y2hf YmFzZV9vZmZzZXQgPSB0YWJsZV9hcmVhICsgaW5kZXhfZHluX2FyZWEgKwogCQkJCXNjYW4tPmJh dGNoX2luZGV4X29wYXF1ZV9zdGF0aWM7CiAJCX0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv YWNjZXNzL25idHJlZS9uYnRyZWUuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVl LmMKaW5kZXggNTkzOWU3MjhmLi44NGM4OGM0YjAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9uYnRyZWUvbmJ0cmVlLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRy ZWUuYwpAQCAtMTY2LDYgKzE2Niw3IEBAIGJ0aGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCQku YW1nZXRiYXRjaCA9IGJ0Z2V0YmF0Y2gsCiAJCS5hbXVuZ3VhcmRiYXRjaCA9IGJ0dW5ndWFyZGJh dGNoLAogCQkuYW1raWxsaXRlbXNiYXRjaCA9IGJ0a2lsbGl0ZW1zYmF0Y2gsCisJCS5hbWdldHRy YW5zZm9ybSA9IE5VTEwsCiAJCS5hbWdldGJpdG1hcCA9IGJ0Z2V0Yml0bWFwLAogCQkuYW1lbmRz Y2FuID0gYnRlbmRzY2FuLAogCQkuYW1wb3NyZXNldCA9IGJ0cG9zcmVzZXQsCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3V0aWxzLmMgYi9zcmMvYmFja2VuZC9hY2Nl c3Mvc3BnaXN0L3NwZ3V0aWxzLmMKaW5kZXggNzQ1NDM1ZGEzLi40NzE1M2I0YjAgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BndXRpbHMuYworKysgYi9zcmMvYmFja2Vu ZC9hY2Nlc3Mvc3BnaXN0L3NwZ3V0aWxzLmMKQEAgLTkyLDYgKzkyLDcgQEAgc3BnaGFuZGxlcihQ R19GVU5DVElPTl9BUkdTKQogCQkuYW1nZXRiYXRjaCA9IE5VTEwsCiAJCS5hbXVuZ3VhcmRiYXRj aCA9IE5VTEwsCiAJCS5hbWtpbGxpdGVtc2JhdGNoID0gTlVMTCwKKwkJLmFtZ2V0dHJhbnNmb3Jt ID0gTlVMTCwKIAkJLmFtZ2V0Yml0bWFwID0gc3BnZ2V0Yml0bWFwLAogCQkuYW1lbmRzY2FuID0g c3BnZW5kc2NhbiwKIAkJLmFtcG9zcmVzZXQgPSBOVUxMLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvZXhlY3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25v ZGVJbmRleG9ubHlzY2FuLmMKaW5kZXggODRhOTdiNzFkLi5hNmE4YTk2ZTcgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleG9ubHlzY2FuLmMKKysrIGIvc3JjL2JhY2tl bmQvZXhlY3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYwpAQCAtMTMyLDE4ICsxMzIsNiBAQCBJbmRl eE9ubHlOZXh0KEluZGV4T25seVNjYW5TdGF0ZSAqbm9kZSkKIAkJCX0KIAkJfQogCi0JCS8qCi0J CSAqIFdlIGRvbid0IGN1cnJlbnRseSBzdXBwb3J0IHJlY2hlY2tpbmcgT1JERVIgQlkgZGlzdGFu Y2VzLiAgKEluCi0JCSAqIHByaW5jaXBsZSwgaWYgdGhlIGluZGV4IGNhbiBzdXBwb3J0IHJldHJp ZXZhbCBvZiB0aGUgb3JpZ2luYWxseQotCQkgKiBpbmRleGVkIHZhbHVlLCBpdCBzaG91bGQgYmUg YWJsZSB0byBwcm9kdWNlIGFuIGV4YWN0IGRpc3RhbmNlCi0JCSAqIGNhbGN1bGF0aW9uIHRvby4g IFNvIGl0J3Mgbm90IGNsZWFyIHRoYXQgYWRkaW5nIGNvZGUgaGVyZSBmb3IKLQkJICogcmVjaGVj ay9yZS1zb3J0IHdvdWxkIGJlIHdvcnRoIHRoZSB0cm91YmxlLiAgQnV0IHdlIHNob3VsZCBhdCBs ZWFzdAotCQkgKiB0aHJvdyBhbiBlcnJvciBpZiBzb21lb25lIHRyaWVzIGl0LikKLQkJICovCi0J CWlmIChzY2FuZGVzYy0+bnVtYmVyT2ZPcmRlckJ5cyA+IDAgJiYgc2NhbmRlc2MtPnhzX3JlY2hl Y2tvcmRlcmJ5KQotCQkJZXJlcG9ydChFUlJPUiwKLQkJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFU VVJFX05PVF9TVVBQT1JURUQpLAotCQkJCQkgZXJybXNnKCJsb3NzeSBkaXN0YW5jZSBmdW5jdGlv bnMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gaW5kZXgtb25seSBzY2FucyIpKSk7CiAJCXJldHVybiBz bG90OwogCX0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvaW5keHBh dGguYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2luZHhwYXRoLmMKaW5kZXggOTRmZWRm MzJjLi42MjRiNmQwZjggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2lu ZHhwYXRoLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvaW5keHBhdGguYwpAQCAt OTUxLDkgKzk1MSwxMiBAQCBidWlsZF9pbmRleF9wYXRocyhQbGFubmVySW5mbyAqcm9vdCwgUmVs T3B0SW5mbyAqcmVsLAogCS8qCiAJICogMy4gQ2hlY2sgaWYgYW4gaW5kZXgtb25seSBzY2FuIGlz IHBvc3NpYmxlLiAgSWYgd2UncmUgbm90IGJ1aWxkaW5nCiAJICogcGxhaW4gaW5kZXhzY2Fucywg dGhpcyBpc24ndCByZWxldmFudCBzaW5jZSBiaXRtYXAgc2NhbnMgZG9uJ3Qgc3VwcG9ydAotCSAq IGluZGV4IGRhdGEgcmV0cmlldmFsIGFueXdheS4KKwkgKiBpbmRleCBkYXRhIHJldHJpZXZhbCBh bnl3YXkuICBJZiB0aGVyZSBhcmUgb3JkZXJpbmcgb3BlcmF0b3JzIHRoZW4gd2UKKwkgKiBhc3N1 bWUgdGhhdCBhbiBpbmRleC1vbmx5IHNjYW4gaXMgdW5zYWZlIGR1ZSB0byB0aGUgZGlmZmljdWx0 eSB3aXRoCisJICogaG9sZGluZyBpbmRleCBwYWdlIHBpbnMgc3VmZmljaWVudCB0byBhdm9pZCBj b25jdXJyZW50IFRJRCByZWN5Y2xpbmcuCiAJICovCiAJaW5kZXhfb25seV9zY2FuID0gKHNjYW50 eXBlICE9IFNUX0JJVE1BUFNDQU4gJiYKKwkJCQkJICAgb3JkZXJieWNsYXVzZXMgPT0gTklMICYm CiAJCQkJCSAgIGNoZWNrX2luZGV4X29ubHkocmVsLCBpbmRleCkpOwogCiAJLyoKZGlmZiAtLWdp dCBhL2NvbnRyaWIvYmxvb20vYmx1dGlscy5jIGIvY29udHJpYi9ibG9vbS9ibHV0aWxzLmMKaW5k ZXggMjQ5YWY0OGU2Li4xNjg4NDJiYzcgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvYmxvb20vYmx1dGls cy5jCisrKyBiL2NvbnRyaWIvYmxvb20vYmx1dGlscy5jCkBAIC0xNTAsNiArMTUwLDcgQEAgYmxo YW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCS5hbWdldGJhdGNoID0gTlVMTCwKIAkJLmFtdW5n dWFyZGJhdGNoID0gTlVMTCwKIAkJLmFta2lsbGl0ZW1zYmF0Y2ggPSBOVUxMLAorCQkuYW1nZXR0 cmFuc2Zvcm0gPSBOVUxMLAogCQkuYW1nZXRiaXRtYXAgPSBibGdldGJpdG1hcCwKIAkJLmFtZW5k c2NhbiA9IGJsZW5kc2NhbiwKIAkJLmFtcG9zcmVzZXQgPSBOVUxMLApkaWZmIC0tZ2l0IGEvY29u dHJpYi9idHJlZV9naXN0L2V4cGVjdGVkL2Nhc2gub3V0IGIvY29udHJpYi9idHJlZV9naXN0L2V4 cGVjdGVkL2Nhc2gub3V0CmluZGV4IDdmYmM3MzU1OS4uNTZmZDFlYjQ5IDEwMDY0NAotLS0gYS9j b250cmliL2J0cmVlX2dpc3QvZXhwZWN0ZWQvY2FzaC5vdXQKKysrIGIvY29udHJpYi9idHJlZV9n aXN0L2V4cGVjdGVkL2Nhc2gub3V0CkBAIC03NCwxMCArNzQsMTAgQEAgU0VMRUNUIGNvdW50KCop IEZST00gbW9uZXl0bXAgV0hFUkUgYSA+ICAnMjI2NDkuNjQnOjptb25leTsKIAogRVhQTEFJTiAo Q09TVFMgT0ZGKQogU0VMRUNUIGEsIGEgPC0+ICcyMTQ3Mi43OScgRlJPTSBtb25leXRtcCBPUkRF UiBCWSBhIDwtPiAnMjE0NzIuNzknIExJTUlUIDM7Ci0gICAgICAgICAgICAgICAgICAgIFFVRVJZ IFBMQU4gICAgICAgICAgICAgICAgICAgIAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQogIExpbWl0Ci0gICAtPiAgSW5kZXggT25seSBTY2FuIHVzaW5nIG1vbmV5aWR4IG9uIG1v bmV5dG1wCisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBtb25leWlkeCBvbiBtb25leXRtcAogICAg ICAgICAgT3JkZXIgQnk6IChhIDwtPiAnJDIxLDQ3Mi43OSc6Om1vbmV5KQogKDMgcm93cykKIApk aWZmIC0tZ2l0IGEvY29udHJpYi9idHJlZV9naXN0L2V4cGVjdGVkL2RhdGUub3V0IGIvY29udHJp Yi9idHJlZV9naXN0L2V4cGVjdGVkL2RhdGUub3V0CmluZGV4IDVkYjg2NGJiOC4uNGEzNjBiZWE2 IDEwMDY0NAotLS0gYS9jb250cmliL2J0cmVlX2dpc3QvZXhwZWN0ZWQvZGF0ZS5vdXQKKysrIGIv Y29udHJpYi9idHJlZV9naXN0L2V4cGVjdGVkL2RhdGUub3V0CkBAIC03NCwxMCArNzQsMTAgQEAg U0VMRUNUIGNvdW50KCopIEZST00gZGF0ZXRtcCBXSEVSRSBhID4gICcyMDAxLTAyLTEzJzo6ZGF0 ZTsKIAogRVhQTEFJTiAoQ09TVFMgT0ZGKQogU0VMRUNUIGEsIGEgPC0+ICcyMDAxLTAyLTEzJyBG Uk9NIGRhdGV0bXAgT1JERVIgQlkgYSA8LT4gJzIwMDEtMDItMTMnIExJTUlUIDM7Ci0gICAgICAg ICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAKLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQogIExpbWl0Ci0gICAtPiAgSW5kZXggT25seSBTY2FuIHVzaW5nIGRh dGVpZHggb24gZGF0ZXRtcAorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgZGF0ZWlkeCBvbiBkYXRl dG1wCiAgICAgICAgICBPcmRlciBCeTogKGEgPC0+ICcwMi0xMy0yMDAxJzo6ZGF0ZSkKICgzIHJv d3MpCiAKZGlmZiAtLWdpdCBhL2NvbnRyaWIvYnRyZWVfZ2lzdC9leHBlY3RlZC9mbG9hdDQub3V0 IGIvY29udHJpYi9idHJlZV9naXN0L2V4cGVjdGVkL2Zsb2F0NC5vdXQKaW5kZXggZGZlNzMyMDQ5 Li44ODc4YTMxN2MgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvYnRyZWVfZ2lzdC9leHBlY3RlZC9mbG9h dDQub3V0CisrKyBiL2NvbnRyaWIvYnRyZWVfZ2lzdC9leHBlY3RlZC9mbG9hdDQub3V0CkBAIC03 NCwxMCArNzQsMTAgQEAgU0VMRUNUIGNvdW50KCopIEZST00gZmxvYXQ0dG1wIFdIRVJFIGEgPiAg LTE3OS4wOjpmbG9hdDQ7CiAKIEVYUExBSU4gKENPU1RTIE9GRikKIFNFTEVDVCBhLCBhIDwtPiAn LTE3OS4wJyBGUk9NIGZsb2F0NHRtcCBPUkRFUiBCWSBhIDwtPiAnLTE3OS4wJyBMSU1JVCAzOwot ICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgIAotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAg ICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgTGltaXQKLSAgIC0+ICBJbmRleCBP bmx5IFNjYW4gdXNpbmcgZmxvYXQ0aWR4IG9uIGZsb2F0NHRtcAorICAgLT4gIEluZGV4IFNjYW4g dXNpbmcgZmxvYXQ0aWR4IG9uIGZsb2F0NHRtcAogICAgICAgICAgT3JkZXIgQnk6IChhIDwtPiAn LTE3OSc6OnJlYWwpCiAoMyByb3dzKQogCmRpZmYgLS1naXQgYS9jb250cmliL2J0cmVlX2dpc3Qv ZXhwZWN0ZWQvZmxvYXQ4Lm91dCBiL2NvbnRyaWIvYnRyZWVfZ2lzdC9leHBlY3RlZC9mbG9hdDgu b3V0CmluZGV4IGViZDBlZjNkNi4uNzYzMDkxYjVjIDEwMDY0NAotLS0gYS9jb250cmliL2J0cmVl X2dpc3QvZXhwZWN0ZWQvZmxvYXQ4Lm91dAorKysgYi9jb250cmliL2J0cmVlX2dpc3QvZXhwZWN0 ZWQvZmxvYXQ4Lm91dApAQCAtNzcsNyArNzcsNyBAQCBTRUxFQ1QgYSwgYSA8LT4gJy0xODkwLjAn IEZST00gZmxvYXQ4dG1wIE9SREVSIEJZIGEgPC0+ICctMTg5MC4wJyBMSU1JVCAzOwogICAgICAg ICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAKIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgTGltaXQKLSAg IC0+ICBJbmRleCBPbmx5IFNjYW4gdXNpbmcgZmxvYXQ4aWR4IG9uIGZsb2F0OHRtcAorICAgLT4g IEluZGV4IFNjYW4gdXNpbmcgZmxvYXQ4aWR4IG9uIGZsb2F0OHRtcAogICAgICAgICAgT3JkZXIg Qnk6IChhIDwtPiAnLTE4OTAnOjpkb3VibGUgcHJlY2lzaW9uKQogKDMgcm93cykKIApkaWZmIC0t Z2l0IGEvY29udHJpYi9idHJlZV9naXN0L2V4cGVjdGVkL2ludDIub3V0IGIvY29udHJpYi9idHJl ZV9naXN0L2V4cGVjdGVkL2ludDIub3V0CmluZGV4IDUwYTMzMjkzOS4uMjQ1ZmE0YmU2IDEwMDY0 NAotLS0gYS9jb250cmliL2J0cmVlX2dpc3QvZXhwZWN0ZWQvaW50Mi5vdXQKKysrIGIvY29udHJp Yi9idHJlZV9naXN0L2V4cGVjdGVkL2ludDIub3V0CkBAIC03NCwxMCArNzQsMTAgQEAgU0VMRUNU IGNvdW50KCopIEZST00gaW50MnRtcCBXSEVSRSBhID4gIDIzNzo6aW50MjsKIAogRVhQTEFJTiAo Q09TVFMgT0ZGKQogU0VMRUNUIGEsIGEgPC0+ICcyMzcnIEZST00gaW50MnRtcCBPUkRFUiBCWSBh IDwtPiAnMjM3JyBMSU1JVCAzOwotICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgICAgICAgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBMaW1pdAotICAgLT4gIElu ZGV4IE9ubHkgU2NhbiB1c2luZyBpbnQyaWR4IG9uIGludDJ0bXAKKyAgIC0+ICBJbmRleCBTY2Fu IHVzaW5nIGludDJpZHggb24gaW50MnRtcAogICAgICAgICAgT3JkZXIgQnk6IChhIDwtPiAnMjM3 Jzo6c21hbGxpbnQpCiAoMyByb3dzKQogCmRpZmYgLS1naXQgYS9jb250cmliL2J0cmVlX2dpc3Qv ZXhwZWN0ZWQvaW50NC5vdXQgYi9jb250cmliL2J0cmVlX2dpc3QvZXhwZWN0ZWQvaW50NC5vdXQK aW5kZXggNmJiZGM3YzNmLi40MWJlZDFmNmUgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvYnRyZWVfZ2lz dC9leHBlY3RlZC9pbnQ0Lm91dAorKysgYi9jb250cmliL2J0cmVlX2dpc3QvZXhwZWN0ZWQvaW50 NC5vdXQKQEAgLTc0LDEwICs3NCwxMCBAQCBTRUxFQ1QgY291bnQoKikgRlJPTSBpbnQ0dG1wIFdI RVJFIGEgPiAgMjM3OjppbnQ0OwogCiBFWFBMQUlOIChDT1NUUyBPRkYpCiBTRUxFQ1QgYSwgYSA8 LT4gJzIzNycgRlJPTSBpbnQ0dG1wIE9SREVSIEJZIGEgPC0+ICcyMzcnIExJTUlUIDM7Ci0gICAg ICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAKLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQogIExpbWl0Ci0gICAtPiAgSW5kZXggT25seSBTY2FuIHVzaW5nIGludDRp ZHggb24gaW50NHRtcAorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgaW50NGlkeCBvbiBpbnQ0dG1w CiAgICAgICAgICBPcmRlciBCeTogKGEgPC0+IDIzNykKICgzIHJvd3MpCiAKZGlmZiAtLWdpdCBh L2NvbnRyaWIvYnRyZWVfZ2lzdC9leHBlY3RlZC9pbnQ4Lm91dCBiL2NvbnRyaWIvYnRyZWVfZ2lz dC9leHBlY3RlZC9pbnQ4Lm91dAppbmRleCBlZmY3N2MyNmIuLjJiYmRkNzY1NyAxMDA2NDQKLS0t IGEvY29udHJpYi9idHJlZV9naXN0L2V4cGVjdGVkL2ludDgub3V0CisrKyBiL2NvbnRyaWIvYnRy ZWVfZ2lzdC9leHBlY3RlZC9pbnQ4Lm91dApAQCAtNzcsNyArNzcsNyBAQCBTRUxFQ1QgYSwgYSA8 LT4gJzQ2NDU3MTI5MTM1NDg0MScgRlJPTSBpbnQ4dG1wIE9SREVSIEJZIGEgPC0+ICc0NjQ1NzEy OTEzNTQ4NDEnCiAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAg ICAgICAgIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KICBMaW1pdAotICAgLT4gIEluZGV4IE9ubHkgU2NhbiB1c2luZyBpbnQ4aWR4IG9uIGlu dDh0bXAKKyAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGludDhpZHggb24gaW50OHRtcAogICAgICAg ICAgT3JkZXIgQnk6IChhIDwtPiAnNDY0NTcxMjkxMzU0ODQxJzo6YmlnaW50KQogKDMgcm93cykK IApkaWZmIC0tZ2l0IGEvY29udHJpYi9idHJlZV9naXN0L2V4cGVjdGVkL2ludGVydmFsLm91dCBi L2NvbnRyaWIvYnRyZWVfZ2lzdC9leHBlY3RlZC9pbnRlcnZhbC5vdXQKaW5kZXggNGMzZDQ5NGU0 Li40ZWQxOTYxOTggMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvYnRyZWVfZ2lzdC9leHBlY3RlZC9pbnRl cnZhbC5vdXQKKysrIGIvY29udHJpYi9idHJlZV9naXN0L2V4cGVjdGVkL2ludGVydmFsLm91dApA QCAtNzcsNyArNzcsNyBAQCBTRUxFQ1QgYSwgYSA8LT4gJzE5OSBkYXlzIDIxOjIxOjIzJyBGUk9N IGludGVydmFsdG1wIE9SREVSIEJZIGEgPC0+ICcxOTkgZGF5cyAyMQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBMaW1pdAotICAgLT4gIEluZGV4IE9ubHkgU2NhbiB1 c2luZyBpbnRlcnZhbGlkeCBvbiBpbnRlcnZhbHRtcAorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcg aW50ZXJ2YWxpZHggb24gaW50ZXJ2YWx0bXAKICAgICAgICAgIE9yZGVyIEJ5OiAoYSA8LT4gJ0Ag MTk5IGRheXMgMjEgaG91cnMgMjEgbWlucyAyMyBzZWNzJzo6aW50ZXJ2YWwpCiAoMyByb3dzKQog CmRpZmYgLS1naXQgYS9jb250cmliL2J0cmVlX2dpc3QvZXhwZWN0ZWQvdGltZS5vdXQgYi9jb250 cmliL2J0cmVlX2dpc3QvZXhwZWN0ZWQvdGltZS5vdXQKaW5kZXggZWM5NWVmNzdjLi4xYjlkYTRl MTkgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvYnRyZWVfZ2lzdC9leHBlY3RlZC90aW1lLm91dAorKysg Yi9jb250cmliL2J0cmVlX2dpc3QvZXhwZWN0ZWQvdGltZS5vdXQKQEAgLTc3LDcgKzc3LDcgQEAg U0VMRUNUIGEsIGEgPC0+ICcxMDo1NzoxMScgRlJPTSB0aW1ldG1wIE9SREVSIEJZIGEgPC0+ICcx MDo1NzoxMScgTElNSVQgMzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAg ICAgICAgICAgICAgICAgICAgICAgICAgCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIExpbWl0Ci0gICAtPiAgSW5kZXggT25s eSBTY2FuIHVzaW5nIHRpbWVpZHggb24gdGltZXRtcAorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcg dGltZWlkeCBvbiB0aW1ldG1wCiAgICAgICAgICBPcmRlciBCeTogKGEgPC0+ICcxMDo1NzoxMSc6 OnRpbWUgd2l0aG91dCB0aW1lIHpvbmUpCiAoMyByb3dzKQogCmRpZmYgLS1naXQgYS9jb250cmli L2J0cmVlX2dpc3QvZXhwZWN0ZWQvdGltZXN0YW1wLm91dCBiL2NvbnRyaWIvYnRyZWVfZ2lzdC9l eHBlY3RlZC90aW1lc3RhbXAub3V0CmluZGV4IDBkOTRmMmYyNC4uY2MzNjI0ZjA4IDEwMDY0NAot LS0gYS9jb250cmliL2J0cmVlX2dpc3QvZXhwZWN0ZWQvdGltZXN0YW1wLm91dAorKysgYi9jb250 cmliL2J0cmVlX2dpc3QvZXhwZWN0ZWQvdGltZXN0YW1wLm91dApAQCAtNzcsNyArNzcsNyBAQCBT RUxFQ1QgYSwgYSA8LT4gJzIwMDQtMTAtMjYgMDg6NTU6MDgnIEZST00gdGltZXN0YW1wdG1wIE9S REVSIEJZIGEgPC0+ICcyMDA0LTEwLQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgTGltaXQKLSAgIC0+ICBJbmRleCBPbmx5IFNjYW4gdXNp bmcgdGltZXN0YW1waWR4IG9uIHRpbWVzdGFtcHRtcAorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcg dGltZXN0YW1waWR4IG9uIHRpbWVzdGFtcHRtcAogICAgICAgICAgT3JkZXIgQnk6IChhIDwtPiAn VHVlIE9jdCAyNiAwODo1NTowOCAyMDA0Jzo6dGltZXN0YW1wIHdpdGhvdXQgdGltZSB6b25lKQog KDMgcm93cykKIApkaWZmIC0tZ2l0IGEvY29udHJpYi9idHJlZV9naXN0L2V4cGVjdGVkL3RpbWVz dGFtcHR6Lm91dCBiL2NvbnRyaWIvYnRyZWVfZ2lzdC9leHBlY3RlZC90aW1lc3RhbXB0ei5vdXQK aW5kZXggNzVhMTVhNDI1Li44OGQyNDA0YzQgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvYnRyZWVfZ2lz dC9leHBlY3RlZC90aW1lc3RhbXB0ei5vdXQKKysrIGIvY29udHJpYi9idHJlZV9naXN0L2V4cGVj dGVkL3RpbWVzdGFtcHR6Lm91dApAQCAtMTk3LDcgKzE5Nyw3IEBAIFNFTEVDVCBhLCBhIDwtPiAn MjAxOC0xMi0xOCAxMDo1OTo1NCBHTVQrMicgRlJPTSB0aW1lc3RhbXB0enRtcCBPUkRFUiBCWSBh IDwtPiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQogIExpbWl0Ci0gICAtPiAgSW5kZXggT25seSBTY2FuIHVzaW5nIHRpbWVzdGFtcHR6 aWR4IG9uIHRpbWVzdGFtcHR6dG1wCisgICAtPiAgSW5kZXggU2NhbiB1c2luZyB0aW1lc3RhbXB0 emlkeCBvbiB0aW1lc3RhbXB0enRtcAogICAgICAgICAgT3JkZXIgQnk6IChhIDwtPiAnVHVlIERl YyAxOCAwNDo1OTo1NCAyMDE4IFBTVCc6OnRpbWVzdGFtcCB3aXRoIHRpbWUgem9uZSkKICgzIHJv d3MpCiAKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwgYi9kb2Mvc3JjL3Nn bWwvaW5kZXhhbS5zZ21sCmluZGV4IGFmZTE1MGViNC4uZjhmNjcwMzQ3IDEwMDY0NAotLS0gYS9k b2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwK QEAgLTE3Miw2ICsxNzIsNyBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleEFtUm91dGluZQogICAgIGFt Z2V0YmF0Y2hfZnVuY3Rpb24gYW1nZXRiYXRjaDsgLyogY2FuIGJlIE5VTEwgKi8KICAgICBhbXVu Z3VhcmRiYXRjaF9mdW5jdGlvbiBhbXVuZ3VhcmRiYXRjaDsgLyogY2FuIGJlIE5VTEwgKi8KICAg ICBhbWtpbGxpdGVtc2JhdGNoX2Z1bmN0aW9uIGFta2lsbGl0ZW1zYmF0Y2g7CS8qIGNhbiBiZSBO VUxMICovCisgICAgYW1nZXR0cmFuc2Zvcm1fZnVuY3Rpb24gYW1nZXR0cmFuc2Zvcm07IC8qIGNh biBiZSBOVUxMICovCiAgICAgYW1nZXRiaXRtYXBfZnVuY3Rpb24gYW1nZXRiaXRtYXA7ICAgLyog Y2FuIGJlIE5VTEwgKi8KICAgICBhbWVuZHNjYW5fZnVuY3Rpb24gYW1lbmRzY2FuOwogICAgIGFt cG9zcmVzZXRfZnVuY3Rpb24gYW1wb3NyZXNldDsgLyogY2FuIGJlIE5VTEwgKi8KQEAgLTcxNiw2 ICs3MTcsMTggQEAgYW1iZWdpbnNjYW4gKFJlbGF0aW9uIGluZGV4UmVsYXRpb24sCiAgICAgICBh bmQgc2libGluZyBwYWdlIGxpbmtzKS4KICAgICAgPC9wYXJhPgogICAgIDwvbGlzdGl0ZW0+Cisg ICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIDxsaXRlcmFsPnNjYW4tJmd0O2JhdGNo X2luZGV4X29wYXF1ZV9keW48L2xpdGVyYWw+OiB0aGUgc2l6ZSBvZiBhbgorICAgICAgb3B0aW9u YWwgc2Vjb25kIHBlci1iYXRjaCBvcGFxdWUgYXJlYSwgb3IgMCBpZiB0aGUgaW5kZXggQU0gZG9l cyBub3QgbmVlZAorICAgICAgb25lLiAgVW5saWtlIHRoZSBhcmVhIGFib3ZlLCBpdHMgc2l6ZSBu ZWVkIG5vdCBiZSBrbm93biBhdCBjb21waWxlIHRpbWU7CisgICAgICB0aGUgaW5kZXggQU0gbWF5 IGNob29zZSBpdCBhdCB0aGUgc3RhcnQgb2YgZWFjaCBzY2FuLiAgSXQgc2l0cyBpbW1lZGlhdGVs eQorICAgICAgYmVmb3JlIHRoZSBzdGF0aWMgYXJlYSwgYW5kIGNvcmUgY29kZSB0cmVhdHMgaXQg YXMgYSBzaW5nbGUgb3BhcXVlCisgICAgICBhbGxvY2F0aW9uIHRoYXQgdGhlIGluZGV4IEFNIGxh eXMgb3V0IGhvd2V2ZXIgaXQgbGlrZXMgKGZvciBleGFtcGxlLCB0bworICAgICAgY2FycnkgcGVy LWl0ZW0gbWF0Y2ggbWV0YWRhdGEsIHN1Y2ggYXMgYSByZWNoZWNrIGZsYWcgb3Igb3JkZXItYnkK KyAgICAgIGRpc3RhbmNlcywgdGhhdCBtdXN0IHRyYXZlbCB3aXRoIHRoZSBiYXRjaCkuCisgICAg IDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgogICAgIDxsaXN0aXRlbT4KICAgICAgPHBhcmE+CiAg ICAgICA8bGl0ZXJhbD5zY2FuLSZndDtiYXRjaF90dXBsZXNfd29ya3NwYWNlPC9saXRlcmFsPjog dGhlIHNpemUgaW4gYnl0ZXMKQEAgLTczNiw3ICs3NDksOCBAQCBhbWJlZ2luc2NhbiAoUmVsYXRp b24gaW5kZXhSZWxhdGlvbiwKICAgIDxmdW5jdGlvbj5hbWJlZ2luc2NhbjwvZnVuY3Rpb24+LCBz aW5jZSB0aGUgdmFsdWUgYXBwbGllcyB0byBldmVyeSBpdGVtIHRoZQogICAgc2NhbiByZXR1cm5z LiAgVGhlIHZhbHVlIHNldCBoZXJlIHBlcnNpc3RzIGFjcm9zcyBhbnkgc3Vic2VxdWVudAogICAg PGZ1bmN0aW9uPmFtcmVzY2FuPC9mdW5jdGlvbj4gY2FsbHMuICBCLXRyZWUgKGFsd2F5cyBmYWxz ZSkgYW5kIGhhc2ggKGFsd2F5cwotICAgdHJ1ZSkgd29yayB0aGlzIHdheS4KKyAgIHRydWUpIHdv cmsgdGhpcyB3YXk7IHNlZSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGJlbG93IGZv ciB0aGUgY2FzZQorICAgd2hlcmUgdGhlIHJlY2hlY2sgcmVxdWlyZW1lbnQgdmFyaWVzIHBlciBp dGVtLgogICA8L3BhcmE+CiAKICAgPHBhcmE+CkBAIC04OTAsMjAgKzkwNCw0NiBAQCBhbWdldGJh dGNoIChJbmRleFNjYW5EZXNjIHNjYW4sCiAgICBJbmRleCBhY2Nlc3MgbWV0aG9kcyB1c2luZyA8 ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IG11c3Qgc2V0CiAgICA8bGl0ZXJhbD5zY2Fu LSZndDt4c19yZWNoZWNrPC9saXRlcmFsPiB0byBpbmRpY2F0ZSB3aGV0aGVyIHJlY2hlY2tpbmcg b2YKICAgIHNjYW4ga2V5cyBpcyByZXF1aXJlZCwgaW4gdGhlIHNhbWUgd2F5IGFzIDxmdW5jdGlv bj5hbWdldHR1cGxlPC9mdW5jdGlvbj4KLSAgIGRvZXMuIEhvd2V2ZXIsIDxsaXRlcmFsPnNjYW4t Jmd0O3hzX3JlY2hlY2s8L2xpdGVyYWw+IG11c3QgYmUgc2V0IGNvbnNpc3RlbnRseQotICAgZm9y IGFuIGVudGlyZSBzY2FuIHJhdGhlciB0aGFuIHZhcnlpbmcgb24gYSBwZXItdHVwbGUgYmFzaXMu IFRoaXMgaXMgYSBrZXkKLSAgIGRpZmZlcmVuY2UgZnJvbSA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwv ZnVuY3Rpb24+LCB3aGljaCBjYW4gc2V0Ci0gICA8bGl0ZXJhbD5zY2FuLSZndDt4c19yZWNoZWNr PC9saXRlcmFsPiBpbmRlcGVuZGVudGx5IGZvciBlYWNoIHR1cGxlIGl0IHJldHVybnMuCi0gICBJ bmRleCBhY2Nlc3MgbWV0aG9kcyB0aGF0IHJlcXVpcmUgZ3JhbnVsYXIgY29udHJvbCBvdmVyCi0g ICA8bGl0ZXJhbD5zY2FuLSZndDt4c19yZWNoZWNrPC9saXRlcmFsPiBtdXN0IHVzZSB0aGUgPGZ1 bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPgotICAgaW50ZXJmYWNlIGluc3RlYWQgb2YgPGZ1 bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPi4KKyAgIGRvZXMuICBBbiA8ZnVuY3Rpb24+YW1n ZXRiYXRjaDwvZnVuY3Rpb24+IGFjY2VzcyBtZXRob2QgY2Fubm90IHNldAorICAgPGxpdGVyYWw+ c2Nhbi0mZ3Q7eHNfcmVjaGVjazwvbGl0ZXJhbD4gYXMgaXQgcmV0dXJucyBlYWNoIGl0ZW0gdGhl IHdheQorICAgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBkb2VzLCBiZWNhdXNlIGl0 cyBpbnRlcmZhY2UgZGVjb3VwbGVzIHRoZQorICAgb3JkZXIgb2YgPGZ1bmN0aW9uPmFtZ2V0YmF0 Y2g8L2Z1bmN0aW9uPiBjYWxscyBmcm9tIHRoZSBvcmRlciBpbiB3aGljaAorICAgaXRlbXMgYXJl IGxhdGVyIHJldHVybmVkIHRvIHRoZSBzY2FuLiAgV2hlbiB0aGUgcmVjaGVjayByZXF1aXJlbWVu dCBpcyBhCisgICBmaXhlZCBwcm9wZXJ0eSBvZiB0aGUgd2hvbGUgc2NhbiwgdGhlIGFjY2VzcyBt ZXRob2Qgc2ltcGx5IHNldHMKKyAgIDxsaXRlcmFsPnNjYW4tJmd0O3hzX3JlY2hlY2s8L2xpdGVy YWw+IG9uY2UsIGF0IHNjYW4gc3RhcnQgKGluIGl0cworICAgPGZ1bmN0aW9uPmFtYmVnaW5zY2Fu PC9mdW5jdGlvbj4gcm91dGluZSk6IEItdHJlZSBhbHdheXMgc2V0cyBpdCBmYWxzZSwgYW5kCisg ICBoYXNoIGFsd2F5cyBzZXRzIGl0IHRydWUuICBXaGVuIGl0IGluc3RlYWQgdmFyaWVzIGZyb20g b25lIG1hdGNoaW5nCisgICBpdGVtIHRvIHRoZSBuZXh0LCB0aGUgYWNjZXNzIG1ldGhvZCByZWNv cmRzIHRoZSBwZXItaXRlbSB2YWx1ZSBpbiB0aGUgYmF0Y2gKKyAgIGFuZCBwcm92aWRlcyBhbiA8 ZnVuY3Rpb24+YW1nZXR0cmFuc2Zvcm08L2Z1bmN0aW9uPiBjYWxsYmFjayAoc2VlIGJlbG93KSwK KyAgIHdoaWNoIHRoZSB0YWJsZSBBTSBpbnZva2VzIGZvciBlYWNoIHJldHVybmVkIGl0ZW0gdG8g c2V0CisgICA8bGl0ZXJhbD5zY2FuLSZndDt4c19yZWNoZWNrPC9saXRlcmFsPiBmcm9tIHRoYXQg cmVjb3JkZWQgc3RhdGU7IEdpU1Qgd29ya3MKKyAgIHRoaXMgd2F5LgogICA8L3BhcmE+CiAKICAg PHBhcmE+Ci0gICBTaW1pbGFybHksIHRoZSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+ IGludGVyZmFjZSBkb2VzIG5vdCBjdXJyZW50bHkKLSAgIHN1cHBvcnQgaW5kZXgtb25seSBzY2Fu cyB0aGF0IHJldHVybiBkYXRhIGluIHRoZSBmb3JtIG9mIGEKLSAgIDxzdHJ1Y3RuYW1lPkhlYXBU dXBsZTwvc3RydWN0bmFtZT4gcG9pbnRlciBzdG9yZWQgaW4KLSAgIDxsaXRlcmFsPnNjYW4tJmd0 O3hzX2hpdHVwPC9saXRlcmFsPi4KKyAgIEZvciBpbmRleC1vbmx5IHNjYW5zLCBhbiA8ZnVuY3Rp b24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGFjY2VzcyBtZXRob2QKKyAgIG5vcm1hbGx5IHJldHVy bnMgdGhlIG1hdGNoaW5nIG9uLWRpc2sgPHN0cnVjdG5hbWU+SW5kZXhUdXBsZTwvc3RydWN0bmFt ZT4KKyAgIGRpcmVjdGx5OiB0aGUgYmF0Y2ggaW5mcmFzdHJ1Y3R1cmUgY29waWVzIDxzdHJ1Y3Ru YW1lPkluZGV4VHVwbGU8L3N0cnVjdG5hbWU+CisgICByZWNvcmRzIGZyb20gaW5kZXggcGFnZXMg aW50byBhIGxvY2FsIGJ1ZmZlciBhc3NvY2lhdGVkIHdpdGggZWFjaCBiYXRjaCwgYW5kCisgICB0 aGUgdGFibGUgQU0gZXhwb3NlcyB0aGUgY3VycmVudCBvbmUgdmlhIDxsaXRlcmFsPnNjYW4tJmd0 O3hzX2l0dXA8L2xpdGVyYWw+LgorICAgPGxpdGVyYWw+eHNfaXR1cGRlc2M8L2xpdGVyYWw+IHdv cmtzIGluIHRoZSBzYW1lIHdheSBhcyBhbHJlYWR5IGRlc2NyaWJlZCBmb3IKKyAgIDxmdW5jdGlv bj5hbWdldHR1cGxlPC9mdW5jdGlvbj4sIGFuZCB0aGUgaW5kZXggYWNjZXNzIG1ldGhvZCBtdXN0 IG5vdCBzZXQgdGhlCisgICA8bGl0ZXJhbD5zY2FuLSZndDt4c19pdHVwPC9saXRlcmFsPiBmaWVs ZCBpdHNlbGYuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIEFuIGFjY2VzcyBtZXRob2Qgd2hv c2UgcmV0dXJuYWJsZSB2YWx1ZXMgbXVzdCBiZSByZWNvbnN0cnVjdGVkIChyYXRoZXIgdGhhbgor ICAgcmV0dXJuZWQgYXMgYSBzdG9yZWQgPHN0cnVjdG5hbWU+SW5kZXhUdXBsZTwvc3RydWN0bmFt ZT4pIGluc3RlYWQgcHJvdmlkZXMgYW4KKyAgIDxmdW5jdGlvbj5hbWdldHRyYW5zZm9ybTwvZnVu Y3Rpb24+IGNhbGxiYWNrIHRoYXQgc2V0cworICAgPGxpdGVyYWw+c2Nhbi0mZ3Q7eHNfaGl0dXA8 L2xpdGVyYWw+IHRvIGEgcmVjb25zdHJ1Y3RlZAorICAgPHN0cnVjdG5hbWU+SGVhcFR1cGxlPC9z dHJ1Y3RuYW1lPi4gIEJlY2F1c2UgcHJlZmV0Y2hpbmcga2VlcHMgc2V2ZXJhbAorICAgYmF0Y2hl cyBvcGVuIGFuZCBjb25zdW1lcyB0aGVpciBpdGVtcyBhc3luY2hyb25vdXNseSwgdGhlcmUgaXMg bm8gYXV0b21hdGljCisgICBzaW5nbGUtdHVwbGUgbGlmZXRpbWUgYXMgdGhlcmUgaXMgd2l0aCA8 ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+OyB0aGUKKyAgIGFjY2VzcyBtZXRob2QgbWFu YWdlcyB0aGlzIGl0c2VsZiwgdHlwaWNhbGx5IGJ5IHJlY29uc3RydWN0aW5nIGludG8gYQorICAg c2Nhbi1saWZldGltZSBtZW1vcnkgY29udGV4dCBhbmQgZnJlZWluZyB0aGUgcHJldmlvdXNseSBy ZXR1cm5lZCB0dXBsZSBlYWNoCisgICB0aW1lIDxmdW5jdGlvbj5hbWdldHRyYW5zZm9ybTwvZnVu Y3Rpb24+IGlzIGNhbGxlZCwgc28gdGhhdCBvbmx5IG9uZQorICAgcmVjb25zdHJ1Y3RlZCB0dXBs ZSBpcyB2YWxpZCBhdCBhIHRpbWUuICBHaVNUIHVzZXMgdGhpcyBhcHByb2FjaCBmb3IgaXRzCisg ICBpbmRleC1vbmx5IHNjYW5zLgogICA8L3BhcmE+CiAKICAgPHBhcmE+CkBAIC05MzAsOSArOTcw LDEwIEBAIGFtdW5ndWFyZGJhdGNoIChJbmRleFNjYW5EZXNjIHNjYW4sCiAgICBsZWFmIHBhZ2Us IHdoaWNoIHByZXZlbnRzIGNvbmN1cnJlbnQgVElEIHJlY3ljbGluZyBieQogICAgPGNvbW1hbmQ+ VkFDVVVNPC9jb21tYW5kPi4KICAgIEZvcm1hbGx5LCBhbiBpbmRleCBBTSBtYXkgaG9sZCBhIGRp ZmZlcmVudCBraW5kIG9mIGludGVybG9jaywgb3IgbXVsdGlwbGUKLSAgIGludGVybG9ja3MsIGlu IGl0cyBwZXItYmF0Y2ggb3BhcXVlIGFyZWEsIGJ1dCBpbiBwcmFjdGljZSBib3RoIGJ1aWx0LWlu Ci0gICBpbmRleCBBTXMgdGhhdCBzdXBwb3J0IDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlv bj4gJm1kYXNoOyBCLXRyZWUgYW5kCi0gICBoYXNoICZtZGFzaDsgaG9sZCBhIHNpbmdsZSBidWZm ZXIgcGluLiAgU2VlIDx4cmVmIGxpbmtlbmQ9ImluZGV4LWxvY2tpbmciLz4KKyAgIGludGVybG9j a3MsIGluIGl0cyBwZXItYmF0Y2ggb3BhcXVlIGFyZWEsIGJ1dCBpbiBwcmFjdGljZSB0aGUgYnVp bHQtaW4KKyAgIGluZGV4IEFNcyB0aGF0IHN1cHBvcnQgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1 bmN0aW9uPiBob2xkIGEgc2luZ2xlIGJ1ZmZlcgorICAgcGluOiBCLXRyZWUsIGhhc2gsIGFuZCBH aVNUIGJhdGNoZXMgZWFjaCByZXRhaW4gdGhlIHBpbiBvbiB0aGUgYmF0Y2gncyBvbmUKKyAgIGlu ZGV4IGxlYWYgcGFnZS4gIFNlZSA8eHJlZiBsaW5rZW5kPSJpbmRleC1sb2NraW5nIi8+CiAgICBm b3IgZGV0YWlscyBvbiBidWZmZXIgcGluIG1hbmFnZW1lbnQgZHVyaW5nIGluZGV4IHNjYW5zLiAg VGhpcyBmdW5jdGlvbgogICAgd2lsbCBiZSBjYWxsZWQgYXQgbW9zdCBvbmNlIGZvciBlYWNoIGd1 YXJkZWQgYmF0Y2g7IGl0IGlzIG5vdCBjYWxsZWQgd2hlbgogICAgdGhlIGluZGV4IEFNIGhhcyBh bHJlYWR5IHVuZ3VhcmRlZCB0aGUgYmF0Y2ggaXRzZWxmIChhcyBpdCBkb2VzIHdoZW4KQEAgLTk3 NSw4ICsxMDE2LDggQEAgYW1raWxsaXRlbXNiYXRjaCAoSW5kZXhTY2FuRGVzYyBzY2FuLAogICAg PGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBpbmRleCBBTXMgKHRob3NlIHRoYXQgZG9u J3QgY2FuIGxlYXZlCiAgICB0aGUgZmllbGQgc2V0IHRvIDxsaXRlcmFsPk5VTEw8L2xpdGVyYWw+ KSwgYnV0IGRvaW5nIHNvIGlzIHJlY29tbWVuZGVkIGZvcgogICAgcGVyZm9ybWFuY2UsIGFzIGl0 IGFsbG93cyBmdXR1cmUgc2NhbnMgdG8gc2tpcCBrbm93bi1kZWFkIGluZGV4IGVudHJpZXMuCi0g ICBCb3RoIGNvcmUgaW5kZXggYWNjZXNzIG1ldGhvZHMgdGhhdCBjdXJyZW50bHkgc3VwcG9ydAot ICAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiAoQi10cmVlIGFuZCBoYXNoKSBpbXBs ZW1lbnQKKyAgIEFsbCB0aHJlZSBjb3JlIGluZGV4IGFjY2VzcyBtZXRob2RzIHRoYXQgY3VycmVu dGx5IHN1cHBvcnQKKyAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gKEItdHJlZSwg aGFzaCwgYW5kIEdpU1QpIGltcGxlbWVudAogICAgPGxpdGVyYWw+TFBfREVBRDwvbGl0ZXJhbD4g bWFya2luZywgdGhvdWdoIHRoaXJkLXBhcnR5IGluZGV4IGFjY2VzcyBtZXRob2RzCiAgICBhcmUg ZnJlZSB0byBjaG9vc2Ugd2hldGhlciB0byBpbXBsZW1lbnQgdGhpcyBmZWF0dXJlLiAgVGhlIHRh YmxlIEFNIG1heQogICAgY2FsbCA8ZnVuY3Rpb24+dGFibGVhbV91dGlsX3NjYW5wb3Nfa2lsbGl0 ZW08L2Z1bmN0aW9uPiB0byBtYXJrIGRlYWQgaXRlbXMgYXMKQEAgLTEwMTYsNyArMTA1Nyw3IEBA IGFta2lsbGl0ZW1zYmF0Y2ggKEluZGV4U2NhbkRlc2Mgc2NhbiwKICAgIDxjb21tYW5kPlZBQ1VV TTwvY29tbWFuZD4gcmVjeWNsaW5nIHRhYmxlIFRJRHMgJm1kYXNoOyBzbyBpdCB3b3VsZCBiZQog ICAgdW5zYWZlIHRvIGFzc3VtZSB0aGF0IGluZGV4IGVudHJpZXMgc3RpbGwgcG9pbnQgdG8gdGhl IHNhbWUgaGVhcC90YWJsZQogICAgdHVwbGVzLiAgU2luY2UgPGxpdGVyYWw+TFBfREVBRDwvbGl0 ZXJhbD4gbWFya2luZyBpcyBvbmx5IGFuIG9wdGltaXphdGlvbgotICAgaGludCwgaXQgaXMgYWx3 YXlzIHNhZmUgdG8gc2tpcCBpdC4gIEJvdGggQi10cmVlIGFuZCBoYXNoIHVzZSB0aGlzCisgICBo aW50LCBpdCBpcyBhbHdheXMgc2FmZSB0byBza2lwIGl0LiAgQi10cmVlLCBoYXNoLCBhbmQgR2lT VCB1c2UgdGhpcwogICAgYXBwcm9hY2guCiAgIDwvcGFyYT4KIApAQCAtMTA1NSw2ICsxMDk2LDQx IEBAIGFta2lsbGl0ZW1zYmF0Y2ggKEluZGV4U2NhbkRlc2Mgc2NhbiwKIAogICA8cGFyYT4KIDxw cm9ncmFtbGlzdGluZz4KK3ZvaWQKK2FtZ2V0dHJhbnNmb3JtIChJbmRleFNjYW5EZXNjIHNjYW4s CisgICAgICAgICAgICAgICAgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gsCisgICAgICAgICAgICAgICAg aW50IGl0ZW0pOworPC9wcm9ncmFtbGlzdGluZz4KKyAgIENhbGxlZCBieSB0aGUgdGFibGUgQU0g YXMgaXQgcmV0dXJucyBlYWNoIG1hdGNoaW5nIGl0ZW0KKyAgICg8cmVwbGFjZWFibGU+aXRlbTwv cmVwbGFjZWFibGU+IGlzIGFuIGluZGV4IGludG8gdGhlIGJhdGNoJ3MKKyAgIDxzdHJ1Y3RmaWVs ZD5pdGVtczwvc3RydWN0ZmllbGQ+IGFycmF5KSBvZiBhbiA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwv ZnVuY3Rpb24+CisgICBzY2FuLCB0byBzZXQgdXAgdGhlIHNjYW4ncyBwZXItdHVwbGUgb3V0cHV0 IGZyb20gcGVyLWl0ZW0gc3RhdGUgdGhhdCB0aGUKKyAgIGFjY2VzcyBtZXRob2QgcmVjb3JkZWQg aW4gdGhlIGJhdGNoLiAgVGhpcyBpcyBuZWVkZWQgd2hlbiB0aGF0IG91dHB1dCBjYW5ub3QKKyAg IGJlIGEgZml4ZWQgcHJvcGVydHkgb2YgdGhlIHdob2xlIHNjYW4uICBBbiBhY2Nlc3MgbWV0aG9k IG1heSB1c2UgaXQgdG8gc2V0CisgICA8c3RydWN0ZmllbGQ+eHNfcmVjaGVjazwvc3RydWN0Zmll bGQ+ICh3aGVuIHRoZSBuZWVkIHRvIHJlY2hlY2sgdGhlIHNjYW4KKyAgIGNvbmRpdGlvbnMgdmFy aWVzIGZyb20gb25lIG1hdGNoaW5nIGl0ZW0gdG8gdGhlIG5leHQpLCB0byBzZXQKKyAgIDxzdHJ1 Y3RmaWVsZD54c19vcmRlcmJ5dmFsczwvc3RydWN0ZmllbGQ+IGFuZAorICAgPHN0cnVjdGZpZWxk PnhzX3JlY2hlY2tvcmRlcmJ5PC9zdHJ1Y3RmaWVsZD4gZm9yIGFuIG9yZGVyZWQKKyAgIChuZWFy ZXN0LW5laWdoYm9yKSBzY2FuLCBhbmQgdG8gc2V0IDxzdHJ1Y3RmaWVsZD54c19oaXR1cDwvc3Ry dWN0ZmllbGQ+IGZvcgorICAgYW4gaW5kZXgtb25seSBzY2FuIHdob3NlIHJldHVybmFibGUgdHVw bGUgbXVzdCBiZSByZWNvbnN0cnVjdGVkIHJhdGhlciB0aGFuCisgICByZXR1cm5lZCBkaXJlY3Rs eSBhcyBhIHN0b3JlZCBpbmRleCB0dXBsZS4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgSW1w bGVtZW50aW5nIDxmdW5jdGlvbj5hbWdldHRyYW5zZm9ybTwvZnVuY3Rpb24+IGlzIG9wdGlvbmFs LCBhbmQgaXMgb25seQorICAgbWVhbmluZ2Z1bCB0b2dldGhlciB3aXRoIDxmdW5jdGlvbj5hbWdl dGJhdGNoPC9mdW5jdGlvbj4uICBBbiBhY2Nlc3MgbWV0aG9kCisgICBuZWVkIG9ubHkgcHJvdmlk ZSBpdCB3aGVuIHNvbWUgcGFydCBvZiBpdHMgcGVyLXR1cGxlIG91dHB1dCB2YXJpZXMgZnJvbSBv bmUKKyAgIG1hdGNoaW5nIGl0ZW0gdG8gdGhlIG5leHQuICBXaGVuIGV2ZXJ5IHN1Y2ggb3V0cHV0 IGlzIGluc3RlYWQgYSBmaXhlZAorICAgcHJvcGVydHkgb2YgdGhlIHdob2xlIHNjYW4gJm1kYXNo OyBvciwgZm9yIGluZGV4LW9ubHkgc2NhbnMsIGlzIHRoZSBvbi1kaXNrCisgICBpbmRleCB0dXBs ZSByZXR1cm5lZCBkaXJlY3RseSB2aWEgPHN0cnVjdGZpZWxkPnhzX2l0dXA8L3N0cnVjdGZpZWxk PiAmbWRhc2g7CisgICB0aGUgZmllbGQgY2FuIGJlIGxlZnQgPGxpdGVyYWw+TlVMTDwvbGl0ZXJh bD4sIGFzIEItdHJlZSBhbmQgaGFzaCBkby4gIEdpU1QKKyAgIHByb3ZpZGVzIG9uZSBiZWNhdXNl IHBhcnRzIG9mIGl0cyBwZXItdHVwbGUgb3V0cHV0ICh0aGUgcmVjaGVjayBmbGFnLCB0aGUKKyAg IDxsaXRlcmFsPk9SREVSIEJZPC9saXRlcmFsPiBkaXN0YW5jZXMsIGFuZCB0aGUgcmVjb25zdHJ1 Y3RlZCBpbmRleC1vbmx5CisgICB0dXBsZXMpIHZhcnkgcGVyIG1hdGNoaW5nIGl0ZW0sIGFzIGRl c2NyaWJlZCBhYm92ZS4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorPHByb2dyYW1saXN0aW5nPgog aW50NjQKIGFtZ2V0Yml0bWFwIChJbmRleFNjYW5EZXNjIHNjYW4sCiAgICAgICAgICAgICAgVElE Qml0bWFwICp0Ym0pOwpAQCAtMTM1Miw4ICsxNDI4LDI4IEBAIGFtdHJhbnNsYXRlY21wdHlwZSAo Q29tcGFyZVR5cGUgY21wdHlwZSwgT2lkIG9wZmFtaWx5LCBPaWQgb3BjaW50eXBlKTsKICAgPC9w YXJhPgogCiAgIDxwYXJhPgotICAgTm90ZSB0aGF0IDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5j dGlvbj4gc2NhbnMgZG8gbm90IGN1cnJlbnRseSBzdXBwb3J0Ci0gICBvcmRlcmluZyBvcGVyYXRv cnMuCisgICBBbiA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGFjY2VzcyBtZXRob2Qg Y2FuIHN1cHBvcnQgb3JkZXJpbmcKKyAgIG9wZXJhdG9ycyBieSBwcm92aWRpbmcgYW4gPGZ1bmN0 aW9uPmFtZ2V0dHJhbnNmb3JtPC9mdW5jdGlvbj4gY2FsbGJhY2s6IGl0CisgICByZWNvcmRzIGVh Y2ggbWF0Y2hpbmcgaXRlbSdzIG9yZGVyaW5nIHZhbHVlcyBpbiB0aGUgYmF0Y2gsIGFuZCB0aGUg dGFibGUgQU0KKyAgIGNhbGxzIDxmdW5jdGlvbj5hbWdldHRyYW5zZm9ybTwvZnVuY3Rpb24+IGFz IGl0IHJldHVybnMgZWFjaCBpdGVtIHRvIHNldAorICAgPHN0cnVjdGZpZWxkPnhzX29yZGVyYnl2 YWxzPC9zdHJ1Y3RmaWVsZD4gYW5kCisgICA8c3RydWN0ZmllbGQ+eHNfcmVjaGVja29yZGVyYnk8 L3N0cnVjdGZpZWxkPiBmcm9tIHRoYXQgcmVjb3JkZWQgc3RhdGUuICBHaVNUCisgICB1c2VzIHRo aXMgZm9yIG5lYXJlc3QtbmVpZ2hib3Igc2NhbnMuICBBcyB3aXRoCisgICA8bGl0ZXJhbD5zY2Fu LSZndDt4c19yZWNoZWNrPC9saXRlcmFsPiwgdGhlc2UgdmFsdWVzIGNhbm5vdCBiZSBzZXQgZGly ZWN0bHkgYXMKKyAgIGl0ZW1zIGFyZSByZXR1cm5lZCwgYmVjYXVzZSBwcmVmZXRjaGluZyBkZWNv dXBsZXMgdGhlIG9yZGVyIG9mCisgICA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGNh bGxzIGZyb20gdGhlIG9yZGVyIGluIHdoaWNoIGl0ZW1zIGFyZQorICAgcmV0dXJuZWQgdG8gdGhl IHNjYW4uCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFNjYW5zIHRoYXQgdXNlIG9yZGVyaW5n IG9wZXJhdG9ycyBhcmUgbmV2ZXIgcGxhbm5lZCBhcyBpbmRleC1vbmx5IHNjYW5zLgorICAgQmVj YXVzZSBhbiBvcmRlcmVkIHNjYW4gY2FuIGNvbGxlY3QgbWF0Y2hpbmcgaXRlbXMgZnJvbSBtYW55 IGluZGV4IGxlYWYKKyAgIHBhZ2VzIHdpdGhvdXQgcmV0YWluaW5nIGEgYnVmZmVyIHBpbiBvbiBh bnkgb2YgdGhlbSAoR2lTVCdzCisgICA8cXVvdGU+dmlydHVhbDwvcXVvdGU+IG5lYXJlc3QtbmVp Z2hib3IgYmF0Y2hlcyB3b3JrIHRoaXMgd2F5KSwgaXQgaGFzIG5vCisgICBwaW4gdG8gc2VydmUg YXMgdGhlIGludGVybG9jayBhZ2FpbnN0IGNvbmN1cnJlbnQgVElEIHJlY3ljbGluZyB0aGF0IGFu CisgICBpbmRleC1vbmx5IHNjYW4gZGVwZW5kcyBvbiAoc2VlIDx4cmVmIGxpbmtlbmQ9ImluZGV4 LWxvY2tpbmciLz4pLiAgVGhlCisgICBwbGFubmVyIHRoZXJlZm9yZSBjb3N0cyBhbmQgZXhlY3V0 ZXMgc3VjaCBzY2FucyBhcyBwbGFpbiBpbmRleCBzY2Fucywgd2hpY2gKKyAgIGFsd2F5cyBmZXRj aCBhbmQgcmVjaGVjayB0aGUgaGVhcCB0dXBsZS4KICAgPC9wYXJhPgogCiAgIDxwYXJhPgpkaWZm IC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9kdW1teV9pbmRleF9hbS9kdW1teV9pbmRleF9hbS5j IGIvc3JjL3Rlc3QvbW9kdWxlcy9kdW1teV9pbmRleF9hbS9kdW1teV9pbmRleF9hbS5jCmluZGV4 IDNmNWJlNjA4Mi4uYzY5OTBjYWI1IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL2R1bW15 X2luZGV4X2FtL2R1bW15X2luZGV4X2FtLmMKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9kdW1teV9p bmRleF9hbS9kdW1teV9pbmRleF9hbS5jCkBAIC0zMzgsNiArMzM4LDcgQEAgZGloYW5kbGVyKFBH X0ZVTkNUSU9OX0FSR1MpCiAJCS5hbWdldGJhdGNoID0gTlVMTCwKIAkJLmFtdW5ndWFyZGJhdGNo ID0gTlVMTCwKIAkJLmFta2lsbGl0ZW1zYmF0Y2ggPSBOVUxMLAorCQkuYW1nZXR0cmFuc2Zvcm0g PSBOVUxMLAogCQkuYW1nZXRiaXRtYXAgPSBOVUxMLAogCQkuYW1lbmRzY2FuID0gZGllbmRzY2Fu LAogCQkuYW1wb3NyZXNldCA9IE5VTEwsCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL2lu ZGV4L2V4cGVjdGVkL2tpbGx0dXBsZXMub3V0IGIvc3JjL3Rlc3QvbW9kdWxlcy9pbmRleC9leHBl Y3RlZC9raWxsdHVwbGVzLm91dAppbmRleCBhM2RiMmM0MDkuLjExMGMzZDQ0NSAxMDA2NDQKLS0t IGEvc3JjL3Rlc3QvbW9kdWxlcy9pbmRleC9leHBlY3RlZC9raWxsdHVwbGVzLm91dAorKysgYi9z cmMvdGVzdC9tb2R1bGVzL2luZGV4L2V4cGVjdGVkL2tpbGx0dXBsZXMub3V0CkBAIC0xNTIsNiAr MTUyLDgzIEBAIGYKIHN0ZXAgZHJvcF90YWJsZTogRFJPUCBUQUJMRSBJRiBFWElTVFMga2lsbF9w cmlvcl90dXBsZTsKIHN0ZXAgZHJvcF9leHRfYnRyZWVfZ2lzdDogRFJPUCBFWFRFTlNJT04gYnRy ZWVfZ2lzdDsKIAorc3RhcnRpbmcgcGVybXV0YXRpb246IGNyZWF0ZV90YWJsZSBmaWxsXzUwMCBj cmVhdGVfZXh0X2J0cmVlX2dpc3QgY3JlYXRlX2dpc3QgZmx1c2ggZGlzYWJsZV9zZXEgZGlzYWJs ZV9iaXRtYXAgbWVhc3VyZSBhY2Nlc3Nfb3JkZXJlZCBmbHVzaCByZXN1bHQgbWVhc3VyZSBhY2Nl c3Nfb3JkZXJlZCBmbHVzaCByZXN1bHQgZGVsZXRlIGZsdXNoIG1lYXN1cmUgYWNjZXNzX29yZGVy ZWQgZmx1c2ggcmVzdWx0IG1lYXN1cmUgYWNjZXNzX29yZGVyZWQgZmx1c2ggcmVzdWx0IGRyb3Bf dGFibGUgZHJvcF9leHRfYnRyZWVfZ2lzdAorc3RlcCBjcmVhdGVfdGFibGU6IENSRUFURSBURU1Q T1JBUlkgVEFCTEUga2lsbF9wcmlvcl90dXBsZShrZXkgaW50IG5vdCBudWxsLCBjYXQgdGV4dCBu b3QgbnVsbCk7CitzdGVwIGZpbGxfNTAwOiBJTlNFUlQgSU5UTyBraWxsX3ByaW9yX3R1cGxlKGtl eSwgY2F0KSBTRUxFQ1QgZy5pLCAnYScgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgNTAwKSBnKGkp Oworc3RlcCBjcmVhdGVfZXh0X2J0cmVlX2dpc3Q6IENSRUFURSBFWFRFTlNJT04gYnRyZWVfZ2lz dDsKK3N0ZXAgY3JlYXRlX2dpc3Q6IENSRUFURSBJTkRFWCBraWxsX3ByaW9yX3R1cGxlX2dpc3Qg T04ga2lsbF9wcmlvcl90dXBsZSBVU0lORyBnaXN0IChrZXkpOworc3RlcCBmbHVzaDogU0VMRUNU IEZST00gcGdfc3RhdF9mb3JjZV9uZXh0X2ZsdXNoKCk7CitzdGVwIGRpc2FibGVfc2VxOiBTRVQg ZW5hYmxlX3NlcXNjYW4gPSBmYWxzZTsKK3N0ZXAgZGlzYWJsZV9iaXRtYXA6IFNFVCBlbmFibGVf Yml0bWFwc2NhbiA9IGZhbHNlOworc3RlcCBtZWFzdXJlOiBVUERBVEUgY291bnRlciBTRVQgaGVh cF9hY2Nlc3NlcyA9IChTRUxFQ1QgaGVhcF9ibGtzX3JlYWQgKyBoZWFwX2Jsa3NfaGl0IEZST00g cGdfc3RhdGlvX2FsbF90YWJsZXMgV0hFUkUgcmVsbmFtZSA9ICdraWxsX3ByaW9yX3R1cGxlJyk7 CitzdGVwIGFjY2Vzc19vcmRlcmVkOiBFWFBMQUlOIChBTkFMWVpFLCBDT1NUUyBPRkYsIFRJTUlO RyBPRkYsIFNVTU1BUlkgT0ZGLCBCVUZGRVJTIE9GRikgU0VMRUNUICogRlJPTSBraWxsX3ByaW9y X3R1cGxlIE9SREVSIEJZIGtleSA8LT4gMTsKK1FVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitJbmRleCBTY2FuIHVzaW5nIGtpbGxf cHJpb3JfdHVwbGVfZ2lzdCBvbiBraWxsX3ByaW9yX3R1cGxlIChhY3R1YWwgcm93cz01MDAuMDAg bG9vcHM9MSkKKyAgT3JkZXIgQnk6IChrZXkgPC0+IDEpICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICBJbmRleCBTZWFyY2hl czogMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgCisoMyByb3dzKQorCitzdGVwIGZsdXNoOiBTRUxFQ1QgRlJPTSBwZ19z dGF0X2ZvcmNlX25leHRfZmx1c2goKTsKK3N0ZXAgcmVzdWx0OiBTRUxFQ1QgKChoZWFwX2Jsa3Nf cmVhZCArIGhlYXBfYmxrc19oaXQgLSBjb3VudGVyLmhlYXBfYWNjZXNzZXMpID4gMCkgQVMgaGFz X25ld19oZWFwX2FjY2Vzc2VzIEZST00gY291bnRlciwgcGdfc3RhdGlvX2FsbF90YWJsZXMgV0hF UkUgcmVsbmFtZSA9ICdraWxsX3ByaW9yX3R1cGxlJzsKK2hhc19uZXdfaGVhcF9hY2Nlc3Nlcwor LS0tLS0tLS0tLS0tLS0tLS0tLS0tCit0ICAgICAgICAgICAgICAgICAgICAKKygxIHJvdykKKwor c3RlcCBtZWFzdXJlOiBVUERBVEUgY291bnRlciBTRVQgaGVhcF9hY2Nlc3NlcyA9IChTRUxFQ1Qg aGVhcF9ibGtzX3JlYWQgKyBoZWFwX2Jsa3NfaGl0IEZST00gcGdfc3RhdGlvX2FsbF90YWJsZXMg V0hFUkUgcmVsbmFtZSA9ICdraWxsX3ByaW9yX3R1cGxlJyk7CitzdGVwIGFjY2Vzc19vcmRlcmVk OiBFWFBMQUlOIChBTkFMWVpFLCBDT1NUUyBPRkYsIFRJTUlORyBPRkYsIFNVTU1BUlkgT0ZGLCBC VUZGRVJTIE9GRikgU0VMRUNUICogRlJPTSBraWxsX3ByaW9yX3R1cGxlIE9SREVSIEJZIGtleSA8 LT4gMTsKK1FVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCitJbmRleCBTY2FuIHVzaW5nIGtpbGxfcHJpb3JfdHVwbGVfZ2lzdCBvbiBr aWxsX3ByaW9yX3R1cGxlIChhY3R1YWwgcm93cz01MDAuMDAgbG9vcHM9MSkKKyAgT3JkZXIgQnk6 IChrZXkgPC0+IDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIAorICBJbmRleCBTZWFyY2hlczogMSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisoMyBy b3dzKQorCitzdGVwIGZsdXNoOiBTRUxFQ1QgRlJPTSBwZ19zdGF0X2ZvcmNlX25leHRfZmx1c2go KTsKK3N0ZXAgcmVzdWx0OiBTRUxFQ1QgKChoZWFwX2Jsa3NfcmVhZCArIGhlYXBfYmxrc19oaXQg LSBjb3VudGVyLmhlYXBfYWNjZXNzZXMpID4gMCkgQVMgaGFzX25ld19oZWFwX2FjY2Vzc2VzIEZS T00gY291bnRlciwgcGdfc3RhdGlvX2FsbF90YWJsZXMgV0hFUkUgcmVsbmFtZSA9ICdraWxsX3By aW9yX3R1cGxlJzsKK2hhc19uZXdfaGVhcF9hY2Nlc3NlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0t Cit0ICAgICAgICAgICAgICAgICAgICAKKygxIHJvdykKKworc3RlcCBkZWxldGU6IERFTEVURSBG Uk9NIGtpbGxfcHJpb3JfdHVwbGU7CitzdGVwIGZsdXNoOiBTRUxFQ1QgRlJPTSBwZ19zdGF0X2Zv cmNlX25leHRfZmx1c2goKTsKK3N0ZXAgbWVhc3VyZTogVVBEQVRFIGNvdW50ZXIgU0VUIGhlYXBf YWNjZXNzZXMgPSAoU0VMRUNUIGhlYXBfYmxrc19yZWFkICsgaGVhcF9ibGtzX2hpdCBGUk9NIHBn X3N0YXRpb19hbGxfdGFibGVzIFdIRVJFIHJlbG5hbWUgPSAna2lsbF9wcmlvcl90dXBsZScpOwor c3RlcCBhY2Nlc3Nfb3JkZXJlZDogRVhQTEFJTiAoQU5BTFlaRSwgQ09TVFMgT0ZGLCBUSU1JTkcg T0ZGLCBTVU1NQVJZIE9GRiwgQlVGRkVSUyBPRkYpIFNFTEVDVCAqIEZST00ga2lsbF9wcmlvcl90 dXBsZSBPUkRFUiBCWSBrZXkgPC0+IDE7CitRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitJbmRleCBTY2FuIHVzaW5nIGtpbGxfcHJpb3Jf dHVwbGVfZ2lzdCBvbiBraWxsX3ByaW9yX3R1cGxlIChhY3R1YWwgcm93cz0wLjAwIGxvb3BzPTEp CisgIE9yZGVyIEJ5OiAoa2V5IDwtPiAxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgIEluZGV4IFNlYXJjaGVzOiAxICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgCisoMyByb3dzKQorCitzdGVwIGZsdXNoOiBTRUxFQ1QgRlJPTSBwZ19zdGF0X2ZvcmNlX25l eHRfZmx1c2goKTsKK3N0ZXAgcmVzdWx0OiBTRUxFQ1QgKChoZWFwX2Jsa3NfcmVhZCArIGhlYXBf Ymxrc19oaXQgLSBjb3VudGVyLmhlYXBfYWNjZXNzZXMpID4gMCkgQVMgaGFzX25ld19oZWFwX2Fj Y2Vzc2VzIEZST00gY291bnRlciwgcGdfc3RhdGlvX2FsbF90YWJsZXMgV0hFUkUgcmVsbmFtZSA9 ICdraWxsX3ByaW9yX3R1cGxlJzsKK2hhc19uZXdfaGVhcF9hY2Nlc3NlcworLS0tLS0tLS0tLS0t LS0tLS0tLS0tCit0ICAgICAgICAgICAgICAgICAgICAKKygxIHJvdykKKworc3RlcCBtZWFzdXJl OiBVUERBVEUgY291bnRlciBTRVQgaGVhcF9hY2Nlc3NlcyA9IChTRUxFQ1QgaGVhcF9ibGtzX3Jl YWQgKyBoZWFwX2Jsa3NfaGl0IEZST00gcGdfc3RhdGlvX2FsbF90YWJsZXMgV0hFUkUgcmVsbmFt ZSA9ICdraWxsX3ByaW9yX3R1cGxlJyk7CitzdGVwIGFjY2Vzc19vcmRlcmVkOiBFWFBMQUlOIChB TkFMWVpFLCBDT1NUUyBPRkYsIFRJTUlORyBPRkYsIFNVTU1BUlkgT0ZGLCBCVUZGRVJTIE9GRikg U0VMRUNUICogRlJPTSBraWxsX3ByaW9yX3R1cGxlIE9SREVSIEJZIGtleSA8LT4gMTsKK1FVRVJZ IFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0lu ZGV4IFNjYW4gdXNpbmcga2lsbF9wcmlvcl90dXBsZV9naXN0IG9uIGtpbGxfcHJpb3JfdHVwbGUg KGFjdHVhbCByb3dzPTAuMDAgbG9vcHM9MSkKKyAgT3JkZXIgQnk6IChrZXkgPC0+IDEpICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK KyAgSW5kZXggU2VhcmNoZXM6IDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKygzIHJvd3MpCisKK3N0ZXAgZmx1c2g6IFNF TEVDVCBGUk9NIHBnX3N0YXRfZm9yY2VfbmV4dF9mbHVzaCgpOworc3RlcCByZXN1bHQ6IFNFTEVD VCAoKGhlYXBfYmxrc19yZWFkICsgaGVhcF9ibGtzX2hpdCAtIGNvdW50ZXIuaGVhcF9hY2Nlc3Nl cykgPiAwKSBBUyBoYXNfbmV3X2hlYXBfYWNjZXNzZXMgRlJPTSBjb3VudGVyLCBwZ19zdGF0aW9f YWxsX3RhYmxlcyBXSEVSRSByZWxuYW1lID0gJ2tpbGxfcHJpb3JfdHVwbGUnOworaGFzX25ld19o ZWFwX2FjY2Vzc2VzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3QgICAgICAgICAgICAgICAgICAg IAorKDEgcm93KQorCitzdGVwIGRyb3BfdGFibGU6IERST1AgVEFCTEUgSUYgRVhJU1RTIGtpbGxf cHJpb3JfdHVwbGU7CitzdGVwIGRyb3BfZXh0X2J0cmVlX2dpc3Q6IERST1AgRVhURU5TSU9OIGJ0 cmVlX2dpc3Q7CisKIHN0YXJ0aW5nIHBlcm11dGF0aW9uOiBjcmVhdGVfdGFibGUgZmlsbF8xMCBj cmVhdGVfZXh0X2J0cmVlX2dpc3QgY3JlYXRlX2dpc3QgZmx1c2ggZGlzYWJsZV9zZXEgZGlzYWJs ZV9iaXRtYXAgbWVhc3VyZSBhY2Nlc3MgZmx1c2ggcmVzdWx0IG1lYXN1cmUgYWNjZXNzIGZsdXNo IHJlc3VsdCBkZWxldGUgZmx1c2ggbWVhc3VyZSBhY2Nlc3MgZmx1c2ggcmVzdWx0IG1lYXN1cmUg YWNjZXNzIGZsdXNoIHJlc3VsdCBkcm9wX3RhYmxlIGRyb3BfZXh0X2J0cmVlX2dpc3QKIHN0ZXAg Y3JlYXRlX3RhYmxlOiBDUkVBVEUgVEVNUE9SQVJZIFRBQkxFIGtpbGxfcHJpb3JfdHVwbGUoa2V5 IGludCBub3QgbnVsbCwgY2F0IHRleHQgbm90IG51bGwpOwogc3RlcCBmaWxsXzEwOiBJTlNFUlQg SU5UTyBraWxsX3ByaW9yX3R1cGxlKGtleSwgY2F0KSBTRUxFQ1QgZy5pLCAnYScgRlJPTSBnZW5l cmF0ZV9zZXJpZXMoMSwgMTApIGcoaSk7CkBAIC0yMjMsNyArMzAwLDcgQEAgc3RlcCBmbHVzaDog U0VMRUNUIEZST00gcGdfc3RhdF9mb3JjZV9uZXh0X2ZsdXNoKCk7CiBzdGVwIHJlc3VsdDogU0VM RUNUICgoaGVhcF9ibGtzX3JlYWQgKyBoZWFwX2Jsa3NfaGl0IC0gY291bnRlci5oZWFwX2FjY2Vz c2VzKSA+IDApIEFTIGhhc19uZXdfaGVhcF9hY2Nlc3NlcyBGUk9NIGNvdW50ZXIsIHBnX3N0YXRp b19hbGxfdGFibGVzIFdIRVJFIHJlbG5hbWUgPSAna2lsbF9wcmlvcl90dXBsZSc7CiBoYXNfbmV3 X2hlYXBfYWNjZXNzZXMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdCAgICAgICAgICAgICAgICAg ICAgCitmICAgICAgICAgICAgICAgICAgICAKICgxIHJvdykKIAogc3RlcCBkcm9wX3RhYmxlOiBE Uk9QIFRBQkxFIElGIEVYSVNUUyBraWxsX3ByaW9yX3R1cGxlOwpkaWZmIC0tZ2l0IGEvc3JjL3Rl c3QvbW9kdWxlcy9pbmRleC9zcGVjcy9raWxsdHVwbGVzLnNwZWMgYi9zcmMvdGVzdC9tb2R1bGVz L2luZGV4L3NwZWNzL2tpbGx0dXBsZXMuc3BlYwppbmRleCAzYjk4ZmY5ZjcuLmY1ZDJmZDc3MyAx MDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy9pbmRleC9zcGVjcy9raWxsdHVwbGVzLnNwZWMK KysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9pbmRleC9zcGVjcy9raWxsdHVwbGVzLnNwZWMKQEAgLTQ3 LDYgKzQ3LDkgQEAgc3RlcCByZXN1bHQgeyBTRUxFQ1QgKChoZWFwX2Jsa3NfcmVhZCArIGhlYXBf Ymxrc19oaXQgLSBjb3VudGVyLmhlYXBfYWNjZXNzZXMpID4KIAogc3RlcCBhY2Nlc3MgeyBFWFBM QUlOIChBTkFMWVpFLCBDT1NUUyBPRkYsIFRJTUlORyBPRkYsIFNVTU1BUlkgT0ZGLCBCVUZGRVJT IE9GRikgU0VMRUNUICogRlJPTSBraWxsX3ByaW9yX3R1cGxlIFdIRVJFIGtleSA9IDE7IH0KIAor IyBuZWFyZXN0LW5laWdoYm9yIChvcmRlci1ieSBvcGVyYXRvcikgc2NhbiAoY2Fubm90IHNldCBM UF9ERUFEIGJpdHMpCitzdGVwIGFjY2Vzc19vcmRlcmVkIHsgRVhQTEFJTiAoQU5BTFlaRSwgQ09T VFMgT0ZGLCBUSU1JTkcgT0ZGLCBTVU1NQVJZIE9GRiwgQlVGRkVSUyBPRkYpIFNFTEVDVCAqIEZS T00ga2lsbF9wcmlvcl90dXBsZSBPUkRFUiBCWSBrZXkgPC0+IDE7IH0KKwogc3RlcCBkZWxldGUg eyBERUxFVEUgRlJPTSBraWxsX3ByaW9yX3R1cGxlOyB9CiAKIHN0ZXAgZHJvcF90YWJsZSB7IERS T1AgVEFCTEUgSUYgRVhJU1RTIGtpbGxfcHJpb3JfdHVwbGU7IH0KQEAgLTk2LDcgKzk5LDIwIEBA IHBlcm11dGF0aW9uCiAgIG1lYXN1cmUgYWNjZXNzIGZsdXNoIHJlc3VsdAogICBkcm9wX3RhYmxl IGRyb3BfZXh0X2J0cmVlX2dpc3QKIAotIyBUZXN0IGdpc3QsIGJ1dCB3aXRoIGZld2VyIHJvd3Mg LSBzaG93cyB0aGF0IGtpbGxpdGVtcyBkb2Vzbid0IHdvcmsgYW55bW9yZSEKKyMgR2lTVCBkb2Vz bid0IHNldCBMUF9ERUFEIGJpdHMgZm9yIG9yZGVyZWQgc2NhbnMsIHNvIGV2ZXJ5IGFjY2VzcyBy ZS12aXNpdHMKKyMgdGhlIGhlYXAKK3Blcm11dGF0aW9uCisgIGNyZWF0ZV90YWJsZSBmaWxsXzUw MCBjcmVhdGVfZXh0X2J0cmVlX2dpc3QgY3JlYXRlX2dpc3QgZmx1c2gKKyAgZGlzYWJsZV9zZXEg ZGlzYWJsZV9iaXRtYXAKKyAgbWVhc3VyZSBhY2Nlc3Nfb3JkZXJlZCBmbHVzaCByZXN1bHQKKyAg bWVhc3VyZSBhY2Nlc3Nfb3JkZXJlZCBmbHVzaCByZXN1bHQKKyAgZGVsZXRlIGZsdXNoCisgIG1l YXN1cmUgYWNjZXNzX29yZGVyZWQgZmx1c2ggcmVzdWx0CisgIG1lYXN1cmUgYWNjZXNzX29yZGVy ZWQgZmx1c2ggcmVzdWx0CisgIGRyb3BfdGFibGUgZHJvcF9leHRfYnRyZWVfZ2lzdAorCisjIFRl c3QgZ2lzdCB3aXRoIGZld2VyIHJvd3MsIGV4ZXJjaXNpbmcgdGhlIGNhc2Ugd2hlcmUgYWxsIHRo ZSBkZWFkIHR1cGxlcyBhcmUKKyMgb24gYSBzaW5nbGUgcGFnZQogcGVybXV0YXRpb24KICAgY3Jl YXRlX3RhYmxlIGZpbGxfMTAgY3JlYXRlX2V4dF9idHJlZV9naXN0IGNyZWF0ZV9naXN0IGZsdXNo CiAgIGRpc2FibGVfc2VxIGRpc2FibGVfYml0bWFwCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL2NyZWF0ZV9pbmRleC5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L2NyZWF0ZV9pbmRleC5vdXQKaW5kZXggNTU1MzhjNGM0Li45NzBiODU3YzYgMTAwNjQ0Ci0tLSBh L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX2luZGV4Lm91dAorKysgYi9zcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV9pbmRleC5vdXQKQEAgLTQ3NSw5ICs0NzUsOSBAQCBT RUxFQ1QgY291bnQoKikgRlJPTSBwb2ludF90YmwgcCBXSEVSRSBwLmYxIH49ICcoLTUsIC0xMikn OwogCiBFWFBMQUlOIChDT1NUUyBPRkYpCiBTRUxFQ1QgKiBGUk9NIHBvaW50X3RibCBPUkRFUiBC WSBmMSA8LT4gJzAsMSc7Ci0gICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg ICAgICAgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0g SW5kZXggT25seSBTY2FuIHVzaW5nIGdwb2ludGluZCBvbiBwb2ludF90YmwKKyAgICAgICAgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IFNjYW4gdXNpbmcgZ3BvaW50aW5kIG9uIHBvaW50X3Ri bAogICAgT3JkZXIgQnk6IChmMSA8LT4gJygwLDEpJzo6cG9pbnQpCiAoMiByb3dzKQogCkBAIC01 MTMsOSArNTEzLDkgQEAgU0VMRUNUICogRlJPTSBwb2ludF90YmwgV0hFUkUgZjEgSVMgTlVMTDsK IAogRVhQTEFJTiAoQ09TVFMgT0ZGKQogU0VMRUNUICogRlJPTSBwb2ludF90YmwgV0hFUkUgZjEg SVMgTk9UIE5VTEwgT1JERVIgQlkgZjEgPC0+ICcwLDEnOwotICAgICAgICAgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgICAgICAgIAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQotIEluZGV4IE9ubHkgU2NhbiB1c2luZyBncG9pbnRpbmQgb24gcG9p bnRfdGJsCisgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIGdw b2ludGluZCBvbiBwb2ludF90YmwKICAgIEluZGV4IENvbmQ6IChmMSBJUyBOT1QgTlVMTCkKICAg IE9yZGVyIEJ5OiAoZjEgPC0+ICcoMCwxKSc6OnBvaW50KQogKDMgcm93cykKQEAgLTUzOSw3ICs1 MzksNyBAQCBFWFBMQUlOIChDT1NUUyBPRkYpCiBTRUxFQ1QgKiBGUk9NIHBvaW50X3RibCBXSEVS RSBmMSA8QCAnKC0xMCwtMTApLCgxMCwxMCknOjogYm94IE9SREVSIEJZIGYxIDwtPiAnMCwxJzsK ICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgIAogLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gSW5kZXggT25seSBT Y2FuIHVzaW5nIGdwb2ludGluZCBvbiBwb2ludF90YmwKKyBJbmRleCBTY2FuIHVzaW5nIGdwb2lu dGluZCBvbiBwb2ludF90YmwKICAgIEluZGV4IENvbmQ6IChmMSA8QCAnKDEwLDEwKSwoLTEwLC0x MCknOjpib3gpCiAgICBPcmRlciBCeTogKGYxIDwtPiAnKDAsMSknOjpwb2ludCkKICgzIHJvd3Mp CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV9pbmRleF9zcGdp c3Qub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jcmVhdGVfaW5kZXhfc3BnaXN0Lm91 dAppbmRleCBjNmJlYjBlZmEuLmRkZmZjYTJlNyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9jcmVhdGVfaW5kZXhfc3BnaXN0Lm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL2NyZWF0ZV9pbmRleF9zcGdpc3Qub3V0CkBAIC0zMzMsNyArMzMzLDcgQEAgRlJP TSBxdWFkX3BvaW50X3RibDsKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBXaW5kb3dBZ2cKICAgIFdp bmRvdzogdzEgQVMgKE9SREVSIEJZIChwIDwtPiAnKDAsMCknOjpwb2ludCkgUk9XUyBVTkJPVU5E RUQgUFJFQ0VESU5HKQotICAgLT4gIEluZGV4IE9ubHkgU2NhbiB1c2luZyBzcF9xdWFkX2luZCBv biBxdWFkX3BvaW50X3RibAorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgc3BfcXVhZF9pbmQgb24g cXVhZF9wb2ludF90YmwKICAgICAgICAgIE9yZGVyIEJ5OiAocCA8LT4gJygwLDApJzo6cG9pbnQp CiAoNCByb3dzKQogCkBAIC0zNTQsNyArMzU0LDcgQEAgRlJPTSBxdWFkX3BvaW50X3RibCBXSEVS RSBwIDxAIGJveCAnKDIwMCwyMDAsMTAwMCwxMDAwKSc7CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAg V2luZG93QWdnCiAgICBXaW5kb3c6IHcxIEFTIChPUkRFUiBCWSAocCA8LT4gJygwLDApJzo6cG9p bnQpIFJPV1MgVU5CT1VOREVEIFBSRUNFRElORykKLSAgIC0+ICBJbmRleCBPbmx5IFNjYW4gdXNp bmcgc3BfcXVhZF9pbmQgb24gcXVhZF9wb2ludF90YmwKKyAgIC0+ICBJbmRleCBTY2FuIHVzaW5n IHNwX3F1YWRfaW5kIG9uIHF1YWRfcG9pbnRfdGJsCiAgICAgICAgICBJbmRleCBDb25kOiAocCA8 QCAnKDEwMDAsMTAwMCksKDIwMCwyMDApJzo6Ym94KQogICAgICAgICAgT3JkZXIgQnk6IChwIDwt PiAnKDAsMCknOjpwb2ludCkKICg1IHJvd3MpCkBAIC0zNzYsNyArMzc2LDcgQEAgRlJPTSBxdWFk X3BvaW50X3RibCBXSEVSRSBwIElTIE5PVCBOVUxMOwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K ICBXaW5kb3dBZ2cKICAgIFdpbmRvdzogdzEgQVMgKE9SREVSIEJZIChwIDwtPiAnKDMzMyw0MDAp Jzo6cG9pbnQpIFJPV1MgVU5CT1VOREVEIFBSRUNFRElORykKLSAgIC0+ICBJbmRleCBPbmx5IFNj YW4gdXNpbmcgc3BfcXVhZF9pbmQgb24gcXVhZF9wb2ludF90YmwKKyAgIC0+ICBJbmRleCBTY2Fu IHVzaW5nIHNwX3F1YWRfaW5kIG9uIHF1YWRfcG9pbnRfdGJsCiAgICAgICAgICBJbmRleCBDb25k OiAocCBJUyBOT1QgTlVMTCkKICAgICAgICAgIE9yZGVyIEJ5OiAocCA8LT4gJygzMzMsNDAwKSc6 OnBvaW50KQogKDUgcm93cykKQEAgLTUwMyw3ICs1MDMsNyBAQCBGUk9NIGtkX3BvaW50X3RibDsK IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KICBXaW5kb3dBZ2cKICAgIFdpbmRvdzogdzEgQVMgKE9SREVS IEJZIChwIDwtPiAnKDAsMCknOjpwb2ludCkgUk9XUyBVTkJPVU5ERUQgUFJFQ0VESU5HKQotICAg LT4gIEluZGV4IE9ubHkgU2NhbiB1c2luZyBzcF9rZF9pbmQgb24ga2RfcG9pbnRfdGJsCisgICAt PiAgSW5kZXggU2NhbiB1c2luZyBzcF9rZF9pbmQgb24ga2RfcG9pbnRfdGJsCiAgICAgICAgICBP cmRlciBCeTogKHAgPC0+ICcoMCwwKSc6OnBvaW50KQogKDQgcm93cykKIApAQCAtNTI0LDcgKzUy NCw3IEBAIEZST00ga2RfcG9pbnRfdGJsIFdIRVJFIHAgPEAgYm94ICcoMjAwLDIwMCwxMDAwLDEw MDApJzsKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBXaW5kb3dBZ2cKICAgIFdpbmRvdzogdzEgQVMg KE9SREVSIEJZIChwIDwtPiAnKDAsMCknOjpwb2ludCkgUk9XUyBVTkJPVU5ERUQgUFJFQ0VESU5H KQotICAgLT4gIEluZGV4IE9ubHkgU2NhbiB1c2luZyBzcF9rZF9pbmQgb24ga2RfcG9pbnRfdGJs CisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBzcF9rZF9pbmQgb24ga2RfcG9pbnRfdGJsCiAgICAg ICAgICBJbmRleCBDb25kOiAocCA8QCAnKDEwMDAsMTAwMCksKDIwMCwyMDApJzo6Ym94KQogICAg ICAgICAgT3JkZXIgQnk6IChwIDwtPiAnKDAsMCknOjpwb2ludCkKICg1IHJvd3MpCkBAIC01NDYs NyArNTQ2LDcgQEAgRlJPTSBrZF9wb2ludF90YmwgV0hFUkUgcCBJUyBOT1QgTlVMTDsKIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCiAgV2luZG93QWdnCiAgICBXaW5kb3c6IHcxIEFTIChPUkRFUiBC WSAocCA8LT4gJygzMzMsNDAwKSc6OnBvaW50KSBST1dTIFVOQk9VTkRFRCBQUkVDRURJTkcpCi0g ICAtPiAgSW5kZXggT25seSBTY2FuIHVzaW5nIHNwX2tkX2luZCBvbiBrZF9wb2ludF90YmwKKyAg IC0+ICBJbmRleCBTY2FuIHVzaW5nIHNwX2tkX2luZCBvbiBrZF9wb2ludF90YmwKICAgICAgICAg IEluZGV4IENvbmQ6IChwIElTIE5PVCBOVUxMKQogICAgICAgICAgT3JkZXIgQnk6IChwIDwtPiAn KDMzMyw0MDApJzo6cG9pbnQpCiAoNSByb3dzKQpAQCAtNTY3LDEwICs1NjcsMTAgQEAgU0VUIGV4 dHJhX2Zsb2F0X2RpZ2l0cyA9IDA7CiBDUkVBVEUgSU5ERVggT04gcXVhZF9wb2ludF90Ymxfb3Jk X3NlcTEgVVNJTkcgc3BnaXN0KHApIElOQ0xVREUoZGlzdCk7CiBFWFBMQUlOIChDT1NUUyBPRkYp CiBTRUxFQ1QgcCwgZGlzdCBGUk9NIHF1YWRfcG9pbnRfdGJsX29yZF9zZXExIE9SREVSIEJZIHAg PC0+ICcwLDAnIExJTUlUIDEwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgTGltaXQKLSAgIC0+ICBJ bmRleCBPbmx5IFNjYW4gdXNpbmcgcXVhZF9wb2ludF90Ymxfb3JkX3NlcTFfcF9kaXN0X2lkeCBv biBxdWFkX3BvaW50X3RibF9vcmRfc2VxMQorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgcXVhZF9w b2ludF90Ymxfb3JkX3NlcTFfcF9kaXN0X2lkeCBvbiBxdWFkX3BvaW50X3RibF9vcmRfc2VxMQog ICAgICAgICAgT3JkZXIgQnk6IChwIDwtPiAnKDAsMCknOjpwb2ludCkKICgzIHJvd3MpCiAKZGlm ZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZ2lzdC5vdXQgYi9zcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL2dpc3Qub3V0CmluZGV4IGM3NWJiYjIzYi4uODEwZGI4YjhmIDEwMDY0 NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2dpc3Qub3V0CisrKyBiL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvZ2lzdC5vdXQKQEAgLTc0LDEzICs3NCwxMyBAQCBzZWxlY3QgcCBm cm9tIGdpc3RfdGJsIHdoZXJlIHAgPEAgYm94KHBvaW50KDAsMCksIHBvaW50KDAuNSwgMC41KSk7 CiAgKDAuNSwwLjUpCiAoMTEgcm93cykKIAotLS0gQWxzbyB0ZXN0IGFuIGluZGV4LW9ubHkga25u LXNlYXJjaAorLS0gQWxzbyB0ZXN0IGEga25uLXNlYXJjaAogZXhwbGFpbiAoY29zdHMgb2ZmKQog c2VsZWN0IHAgZnJvbSBnaXN0X3RibCB3aGVyZSBwIDxAIGJveChwb2ludCgwLDApLCBwb2ludCgw LjUsIDAuNSkpCiBvcmRlciBieSBwIDwtPiBwb2ludCgwLjIwMSwgMC4yMDEpOwotICAgICAgICAg ICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAKLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gSW5kZXgg T25seSBTY2FuIHVzaW5nIGdpc3RfdGJsX3BvaW50X2luZGV4IG9uIGdpc3RfdGJsCisgICAgICAg ICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IFNjYW4gdXNp bmcgZ2lzdF90YmxfcG9pbnRfaW5kZXggb24gZ2lzdF90YmwKICAgIEluZGV4IENvbmQ6IChwIDxA ICcoMC41LDAuNSksKDAsMCknOjpib3gpCiAgICBPcmRlciBCeTogKHAgPC0+ICcoMC4yMDEsMC4y MDEpJzo6cG9pbnQpCiAoMyByb3dzKQpAQCAtMTA2LDkgKzEwNiw5IEBAIG9yZGVyIGJ5IHAgPC0+ IHBvaW50KDAuMjAxLCAwLjIwMSk7CiBleHBsYWluIChjb3N0cyBvZmYpCiBzZWxlY3QgcCBmcm9t IGdpc3RfdGJsIHdoZXJlIHAgPEAgYm94KHBvaW50KDAsMCksIHBvaW50KDAuNSwgMC41KSkKIG9y ZGVyIGJ5IHBvaW50KDAuMTAxLCAwLjEwMSkgPC0+IHA7Ci0gICAgICAgICAgICAgICAgICAgICAg IFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgIAotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSBJbmRleCBPbmx5IFNjYW4gdXNp bmcgZ2lzdF90YmxfcG9pbnRfaW5kZXggb24gZ2lzdF90YmwKKyAgICAgICAgICAgICAgICAgICAg UVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBnaXN0X3RibF9w b2ludF9pbmRleCBvbiBnaXN0X3RibAogICAgSW5kZXggQ29uZDogKHAgPEAgJygwLjUsMC41KSwo MCwwKSc6OmJveCkKICAgIE9yZGVyIEJ5OiAocCA8LT4gJygwLjEwMSwwLjEwMSknOjpwb2ludCkK ICgzIHJvd3MpCkBAIC0xMzgsMTIgKzEzOCwxMiBAQCBzZWxlY3QgcCBmcm9tCiAgICAgICAgICAg KGJveChwb2ludCgwLjgsMC44KSwgcG9pbnQoMS4wLDEuMCkpKSkgYXMgdihiYikKIGNyb3NzIGpv aW4gbGF0ZXJhbAogICAoc2VsZWN0IHAgZnJvbSBnaXN0X3RibCB3aGVyZSBwIDxAIGJiIG9yZGVy IGJ5IHAgPC0+IGJiWzBdIGxpbWl0IDIpIHNzOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg ICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQogIE5lc3RlZCBMb29wCiAgICAtPiAgVmFsdWVzIFNjYW4gb24gIipWQUxV RVMqIgogICAgLT4gIExpbWl0Ci0gICAgICAgICAtPiAgSW5kZXggT25seSBTY2FuIHVzaW5nIGdp c3RfdGJsX3BvaW50X2luZGV4IG9uIGdpc3RfdGJsCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1 c2luZyBnaXN0X3RibF9wb2ludF9pbmRleCBvbiBnaXN0X3RibAogICAgICAgICAgICAgICAgSW5k ZXggQ29uZDogKHAgPEAgIipWQUxVRVMqIi5jb2x1bW4xKQogICAgICAgICAgICAgICAgT3JkZXIg Qnk6IChwIDwtPiAoIipWQUxVRVMqIi5jb2x1bW4xKVswXSkKICg2IHJvd3MpCkBAIC0yMDMsMTMg KzIwMywxMyBAQCBzZWxlY3QgYiBmcm9tIGdpc3RfdGJsIHdoZXJlIGIgPEAgYm94KHBvaW50KDUs NSksIHBvaW50KDYsNikpOwogICg2LDYpLCg2LDYpCiAoMjEgcm93cykKIAotLS0gQWxzbyB0ZXN0 IGFuIGluZGV4LW9ubHkga25uLXNlYXJjaAorLS0gQWxzbyB0ZXN0IGEga25uLXNlYXJjaAogZXhw bGFpbiAoY29zdHMgb2ZmKQogc2VsZWN0IGIgZnJvbSBnaXN0X3RibCB3aGVyZSBiIDxAIGJveChw b2ludCg1LDUpLCBwb2ludCg2LDYpKQogb3JkZXIgYnkgYiA8LT4gcG9pbnQoNS4yLCA1LjkxKTsK LSAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgIAot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0g SW5kZXggT25seSBTY2FuIHVzaW5nIGdpc3RfdGJsX2JveF9pbmRleCBvbiBnaXN0X3RibAorICAg ICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IFNjYW4gdXNp bmcgZ2lzdF90YmxfYm94X2luZGV4IG9uIGdpc3RfdGJsCiAgICBJbmRleCBDb25kOiAoYiA8QCAn KDYsNiksKDUsNSknOjpib3gpCiAgICBPcmRlciBCeTogKGIgPC0+ICcoNS4yLDUuOTEpJzo6cG9p bnQpCiAoMyByb3dzKQpAQCAtMjQ1LDkgKzI0NSw5IEBAIG9yZGVyIGJ5IGIgPC0+IHBvaW50KDUu MiwgNS45MSk7CiBleHBsYWluIChjb3N0cyBvZmYpCiBzZWxlY3QgYiBmcm9tIGdpc3RfdGJsIHdo ZXJlIGIgPEAgYm94KHBvaW50KDUsNSksIHBvaW50KDYsNikpCiBvcmRlciBieSBwb2ludCg1LjIs IDUuOTEpIDwtPiBiOwotICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAg ICAgICAgICAgICAgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KLSBJbmRleCBPbmx5IFNjYW4gdXNpbmcgZ2lzdF90YmxfYm94X2luZGV4IG9u IGdpc3RfdGJsCisgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg SW5kZXggU2NhbiB1c2luZyBnaXN0X3RibF9ib3hfaW5kZXggb24gZ2lzdF90YmwKICAgIEluZGV4 IENvbmQ6IChiIDxAICcoNiw2KSwoNSw1KSc6OmJveCkKICAgIE9yZGVyIEJ5OiAoYiA8LT4gJyg1 LjIsNS45MSknOjpwb2ludCkKICgzIHJvd3MpCkBAIC0zNzMsMjAgKzM3MywyNiBAQCBzZWxlY3Qg Y291bnQoKikgZnJvbSBnaXN0X3RibDsKICAxMDAwMQogKDEgcm93KQogCi0tLSBUaGlzIGNhc2Ug aXNuJ3Qgc3VwcG9ydGVkLCBidXQgaXQgc2hvdWxkIGF0IGxlYXN0IEVYUExBSU4gY29ycmVjdGx5 LgorLS0gQW4gb3JkZXJpbmctb3BlcmF0b3IgKG5lYXJlc3QtbmVpZ2hib3IpIHNjYW4gaXMgbmV2 ZXIgcGxhbm5lZCBhcyBhbgorLS0gaW5kZXgtb25seSBzY2FuLCBzbyB0aGlzIGxvc3N5LWRpc3Rh bmNlIGNhc2UgcnVucyBhcyBhIHBsYWluIGluZGV4IHNjYW4gdGhhdAorLS0gcmVjaGVja3MgdGhl IGRpc3RhbmNlcyBhZ2FpbnN0IHRoZSBoZWFwIHR1cGxlLgogZXhwbGFpbiAodmVyYm9zZSwgY29z dHMgb2ZmKQogc2VsZWN0IHAgZnJvbSBnaXN0X3RibCBvcmRlciBieSBjaXJjbGUocCwxKSA8LT4g cG9pbnQoMCwwKSBsaW1pdCAxOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KICBMaW1pdAogICAgT3V0cHV0OiBwLCAoKGNpcmNsZShwLCAnMSc6 OmRvdWJsZSBwcmVjaXNpb24pIDwtPiAnKDAsMCknOjpwb2ludCkpCi0gICAtPiAgSW5kZXggT25s eSBTY2FuIHVzaW5nIGdpc3RfdGJsX211bHRpX2luZGV4IG9uIHB1YmxpYy5naXN0X3RibAorICAg LT4gIEluZGV4IFNjYW4gdXNpbmcgZ2lzdF90YmxfbXVsdGlfaW5kZXggb24gcHVibGljLmdpc3Rf dGJsCiAgICAgICAgICBPdXRwdXQ6IHAsIChjaXJjbGUocCwgJzEnOjpkb3VibGUgcHJlY2lzaW9u KSA8LT4gJygwLDApJzo6cG9pbnQpCi0gICAgICAgICBPcmRlciBCeTogKChjaXJjbGUoZ2lzdF90 YmwucCwgJzEnOjpkb3VibGUgcHJlY2lzaW9uKSkgPC0+ICcoMCwwKSc6OnBvaW50KQorICAgICAg ICAgT3JkZXIgQnk6IChjaXJjbGUoZ2lzdF90YmwucCwgJzEnOjpkb3VibGUgcHJlY2lzaW9uKSA8 LT4gJygwLDApJzo6cG9pbnQpCiAoNSByb3dzKQogCiBzZWxlY3QgcCBmcm9tIGdpc3RfdGJsIG9y ZGVyIGJ5IGNpcmNsZShwLDEpIDwtPiBwb2ludCgwLDApIGxpbWl0IDE7Ci1FUlJPUjogIGxvc3N5 IGRpc3RhbmNlIGZ1bmN0aW9ucyBhcmUgbm90IHN1cHBvcnRlZCBpbiBpbmRleC1vbmx5IHNjYW5z CisgICBwICAgCistLS0tLS0tCisgKDAsMCkKKygxIHJvdykKKwogLS0gRm9yY2UgYW4gaW5kZXgg YnVpbGQgdXNpbmcgYnVmZmVyaW5nLgogY3JlYXRlIGluZGV4IGdpc3RfdGJsX2JveF9pbmRleF9m b3JjaW5nX2J1ZmZlcmluZyBvbiBnaXN0X3RibCB1c2luZyBnaXN0IChwKQogICB3aXRoIChidWZm ZXJpbmc9b24sIGZpbGxmYWN0b3I9NTApOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9z cWwvZ2lzdC5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9naXN0LnNxbAppbmRleCA2ZjFmYzY1 ZjEuLjM2OWViNDU3NiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZ2lzdC5zcWwK KysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZ2lzdC5zcWwKQEAgLTY1LDcgKzY1LDcgQEAgc2Vs ZWN0IHAgZnJvbSBnaXN0X3RibCB3aGVyZSBwIDxAIGJveChwb2ludCgwLDApLCBwb2ludCgwLjUs IDAuNSkpOwogLS0gZXhlY3V0ZSB0aGUgc2FtZQogc2VsZWN0IHAgZnJvbSBnaXN0X3RibCB3aGVy ZSBwIDxAIGJveChwb2ludCgwLDApLCBwb2ludCgwLjUsIDAuNSkpOwogCi0tLSBBbHNvIHRlc3Qg YW4gaW5kZXgtb25seSBrbm4tc2VhcmNoCistLSBBbHNvIHRlc3QgYSBrbm4tc2VhcmNoCiBleHBs YWluIChjb3N0cyBvZmYpCiBzZWxlY3QgcCBmcm9tIGdpc3RfdGJsIHdoZXJlIHAgPEAgYm94KHBv aW50KDAsMCksIHBvaW50KDAuNSwgMC41KSkKIG9yZGVyIGJ5IHAgPC0+IHBvaW50KDAuMjAxLCAw LjIwMSk7CkBAIC0xMDksNyArMTA5LDcgQEAgc2VsZWN0IGIgZnJvbSBnaXN0X3RibCB3aGVyZSBi IDxAIGJveChwb2ludCg1LDUpLCBwb2ludCg2LDYpKTsKIC0tIGV4ZWN1dGUgdGhlIHNhbWUKIHNl bGVjdCBiIGZyb20gZ2lzdF90Ymwgd2hlcmUgYiA8QCBib3gocG9pbnQoNSw1KSwgcG9pbnQoNiw2 KSk7CiAKLS0tIEFsc28gdGVzdCBhbiBpbmRleC1vbmx5IGtubi1zZWFyY2gKKy0tIEFsc28gdGVz dCBhIGtubi1zZWFyY2gKIGV4cGxhaW4gKGNvc3RzIG9mZikKIHNlbGVjdCBiIGZyb20gZ2lzdF90 Ymwgd2hlcmUgYiA8QCBib3gocG9pbnQoNSw1KSwgcG9pbnQoNiw2KSkKIG9yZGVyIGJ5IGIgPC0+ IHBvaW50KDUuMiwgNS45MSk7CkBAIC0xNjQsNyArMTY0LDkgQEAgZXhwbGFpbiAodmVyYm9zZSwg Y29zdHMgb2ZmKQogc2VsZWN0IGNvdW50KCopIGZyb20gZ2lzdF90Ymw7CiBzZWxlY3QgY291bnQo KikgZnJvbSBnaXN0X3RibDsKIAotLS0gVGhpcyBjYXNlIGlzbid0IHN1cHBvcnRlZCwgYnV0IGl0 IHNob3VsZCBhdCBsZWFzdCBFWFBMQUlOIGNvcnJlY3RseS4KKy0tIEFuIG9yZGVyaW5nLW9wZXJh dG9yIChuZWFyZXN0LW5laWdoYm9yKSBzY2FuIGlzIG5ldmVyIHBsYW5uZWQgYXMgYW4KKy0tIGlu ZGV4LW9ubHkgc2Nhbiwgc28gdGhpcyBsb3NzeS1kaXN0YW5jZSBjYXNlIHJ1bnMgYXMgYSBwbGFp biBpbmRleCBzY2FuIHRoYXQKKy0tIHJlY2hlY2tzIHRoZSBkaXN0YW5jZXMgYWdhaW5zdCB0aGUg aGVhcCB0dXBsZS4KIGV4cGxhaW4gKHZlcmJvc2UsIGNvc3RzIG9mZikKIHNlbGVjdCBwIGZyb20g Z2lzdF90Ymwgb3JkZXIgYnkgY2lyY2xlKHAsMSkgPC0+IHBvaW50KDAsMCkgbGltaXQgMTsKIHNl bGVjdCBwIGZyb20gZ2lzdF90Ymwgb3JkZXIgYnkgY2lyY2xlKHAsMSkgPC0+IHBvaW50KDAsMCkg bGltaXQgMTsKZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIv c3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggYzcwYTVjMDlhLi43ZmYxZGFh ZDUgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3Ny Yy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0xMDY0LDYgKzEwNjQsOCBAQCBHQlRf TlVNS0VZX1IKIEdCVF9WQVJLRVkKIEdCVF9WQVJLRVlfUgogR0VORVJBTF9OQU1FCitHSVNUQmF0 Y2hEYXRhCitHSVNUQmF0Y2hJdGVtCiBHSVNUQnVpbGRCdWZmZXJzCiBHSVNUQnVpbGRTdGF0ZQog R0lTVERlbGV0ZWRQYWdlQ29udGVudHMKLS0gCjIuNTMuMAoK --000000000000d6f56006543b3e3b Content-Type: application/octet-stream; name="v27-0005-heapam-Optimize-pin-transfers-during-index-scans.patch" Content-Disposition: attachment; filename="v27-0005-heapam-Optimize-pin-transfers-during-index-scans.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqe4shl15 RnJvbSAxMzZkNGFkMTQ3NjUwNzIxYjk3ZGU4ZWZmOGEyNWIzZmE5NWY1YTFiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFN1 biwgMjIgTWFyIDIwMjYgMDI6MjI6MDYgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyNyA1LzldIGhl YXBhbTogT3B0aW1pemUgcGluIHRyYW5zZmVycyBkdXJpbmcgaW5kZXggc2NhbnMuCgpBZGQgYW4g eHNfbGFzdGluYmxvY2sgZmxhZyB0byBJbmRleFNjYW5IZWFwRGF0YSB0aGF0IHRyYWNrcyB3aGV0 aGVyIHRoZQpjdXJyZW50IFRJRCBpcyB0aGUgbGFzdCBvbmUgb24gaXRzIGhlYXAgYmxvY2sgd2l0 aGluIHRoZSBjdXJyZW50IGJhdGNoLgpXaGVuIGl0IGlzLCBoZWFwYW1faW5kZXhfaGVhcF9mZXRj aCBjYW4gdHJhbnNmZXIgaXRzIGJ1ZmZlciBwaW4gdG8gdGhlCnNsb3QgKHZpYSBFeGVjU3RvcmVQ aW5uZWRCdWZmZXJIZWFwVHVwbGUpIGluc3RlYWQgb2YgaW5jcmVtZW50aW5nIHRoZQpwaW4gY291 bnQsIHNhdmluZyBhIHBhaXIgb2YgSW5jckJ1ZmZlclJlZkNvdW50L1JlbGVhc2VCdWZmZXIgY2Fs bHMuClRoaXMgb3B0aW1pemF0aW9uIGlzIG5vdCB1c2VkIGZvciBpbmRleC1vbmx5IHNjYW5zIGJl Y2F1c2UgYWxsLXZpc2libGUKaXRlbXMgY2FuIGJlIHNraXBwZWQsIHdoaWNoIHdvdWxkIGJyZWFr IGJsb2NrIGRlZHVwbGljYXRpb24gc3ltbWV0cnkKYmV0d2VlbiB0aGUgc2NhbiBhbmQgdGhlIHJl YWQgc3RyZWFtIChiZXNpZGVzLCB0aGUgcGVyZm9ybWFuY2Ugb2YgdGhpcwpjb2RlIHBhdGggY2Fu IG9ubHkgbWF0dGVyIHdoZW4gbWFueSBoZWFwIGZldGNoZXMgYXJlIHJlcXVpcmVkLCB3aGljaCBp cwpob3BlZnVsbHkgcmFyZSBkdXJpbmcgaW5kZXgtb25seSBzY2FucykuCgpBbHNvIGFkZCBhbiBl eHBsaWNpdCBFeGVjQ2xlYXJUdXBsZSB0byB0aGUgYmxvY2stc3dpdGNoIHBhdGggaW4KaGVhcGFt X2luZGV4X2hlYXBfZmV0Y2ggdG8gcmVsZWFzZSB0aGUgcGluIHRyYW5zZmVycmVkIHRvIHRoZSBz bG90IG9uCnRoZSBwcmV2aW91cyBjYWxsIChqdXN0IGJlZm9yZSBjYWxsaW5nIFJlbGVhc2VCdWZm ZXIgYXMgcGFydCBvZiBtb3ZpbmcKb24gdG8gdGhlIHNjYW4ncyBuZXh0IGJsb2NrKS4gIFRoaXMg Zml4ZXMgYSBwZXJmb3JtYW5jZSBwcm9ibGVtIHdoZXJlCnRoZSBjb2RlIHBhdGggaW4gcXVlc3Rp b24gdHJpZ2dlcnMgR2V0UHJpdmF0ZVJlZkNvdW50RW50cnlTbG93IGNhbGxzCm1vcmUgb2Z0ZW4g dGhhbiBvbmUgd291bGQgaG9wZS4gIFRoZSB1bmRlcmx5aW5nIGlzc3VlIGhhcyBiZWVuIHRpZWQg dG8KdGhlIHBpbiBpbiB0aGUgc2xvdCBiZWluZyBoZWxkLCBldmVuIGlmIHdlIGRlY2lkZSB0byBy ZWxlYXNlIHRoZSBidWZmZXIKYW5kIG1vdmUgb246IEV4ZWNTdG9yZUJ1ZmZlckhlYXBUdXBsZSB3 aWxsIGZpcnN0IGZhaWwgdG8gaGl0IHRoZQpiYWNrZW5kLWxvY2FsIGNhY2hlIGZvciB0aGUgcmVs ZWFzZSBvZiB0aGUgb2xkIHBpbiAoYmVjYXVzZSB3ZSBqdXN0CnBpbm5lZCBhbmQgbG9ja2VkIHRo ZSBuZXcgYnVmZmVyKSwgY2F1c2luZyBhIGNhY2hlIG1pc3MgaW5zaWRlCkluY3JCdWZmZXJSZWZD b3VudC4KCkF1dGhvcjogUGV0ZXIgR2VvZ2hlZ2FuIDxwZ0Bib3d0LmllPgpTdWdnZXN0ZWQtYnk6 IEFuZHJlcyBGcmV1bmQgPGFuZHJlc0BhbmFyYXplbC5kZT4KUmV2aWV3ZWQtYnk6IEFuZHJlcyBG cmV1bmQgPGFuZHJlc0BhbmFyYXplbC5kZT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMv bS9DQUgyLVd6PUQ0THJ1OUJrdnFhUm5GUlBEYVpiZlRPZFdjeHcxM3p5RzZHVkZUdHpfdndAbWFp bC5nbWFpbC5jb20KLS0tCiBzcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmggICAgICAgICAgICAg ICAgfCAgMyArCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faW5kZXhzY2FuLmMgfCA3 NSArKysrKysrKysrKysrKysrKysrKystCiAyIGZpbGVzIGNoYW5nZWQsIDc2IGluc2VydGlvbnMo KyksIDIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBh bS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCmluZGV4IDQ2OGRjZmZmZC4uMTJmOGJk YWJiIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKKysrIGIvc3JjL2lu Y2x1ZGUvYWNjZXNzL2hlYXBhbS5oCkBAIC0xMzIsNiArMTMyLDkgQEAgdHlwZWRlZiBzdHJ1Y3Qg SW5kZXhTY2FuSGVhcERhdGEKIAogCWJvb2wJCXhzX3JlYWRvbmx5OwkvKiBzY2FuIGlzIHJlYWQt b25seT8gKi8KIAorCS8qIFBsYWluIGluZGV4IHNjYW4geHNfbGFzdGluYmxvY2sgb3B0aW1pemF0 aW9uICovCisJYm9vbAkJeHNfbGFzdGluYmxvY2s7IC8qIGxhc3QgVElEIG9uIHRoaXMgYmxvY2sg aW4gY3VycmVudCBiYXRjaD8gKi8KKwogCS8qIFBlci10dXBsZSBjb250ZXh0IGZvciBwYWRkaW5n ICJuYW1lIiBjb2x1bW5zIGR1cmluZyBpbmRleC1vbmx5IHNjYW5zICovCiAJTWVtb3J5Q29udGV4 dCB4c19pdHVwX2N4dDsKIH0gSW5kZXhTY2FuSGVhcERhdGE7CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faW5kZXhzY2FuLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv aGVhcC9oZWFwYW1faW5kZXhzY2FuLmMKaW5kZXggZTFjMTEyZTZhLi4yMzRhMGYzNGYgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9pbmRleHNjYW4uYworKysgYi9z cmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faW5kZXhzY2FuLmMKQEAgLTE1NSw2ICsxNTUs OSBAQCBoZWFwYW1faW5kZXhfc2Nhbl9iZWdpbihJbmRleFNjYW5EZXNjIHNjYW4sIHVpbnQzMiBm bGFncykKIAkvKiBSZW1lbWJlciBpZiBzY2FuIGlzIHJlYWQtb25seSAqLwogCWhzY2FuLT54c19y ZWFkb25seSA9IChmbGFncyAmIFNPX0hJTlRfUkVMX1JFQURfT05MWSkgIT0gMDsKIAorCS8qIHhz X2xhc3RpbmJsb2NrIG9wdGltaXphdGlvbiBzdGF0ZSAqLworCUFzc2VydCghaHNjYW4tPnhzX2xh c3RpbmJsb2NrKTsKKwogCS8qIFJlc29sdmUgd2hpY2ggeHNfZ2V0bmV4dF9zbG90IGltcGxlbWVu dGF0aW9uIHRvIHVzZSBmb3IgdGhpcyBzY2FuICovCiAJaWYgKHNjYW4tPmluZGV4UmVsYXRpb24t PnJkX2luZGFtLT5hbWdldGJhdGNoICE9IE5VTEwpCiAJewpAQCAtNzg5LDYgKzc5MiwxNSBAQCBo ZWFwYW1faW5kZXhfaGVhcF9mZXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkhlYXBE YXRhICpoc2NhbiwKIAkJLyogUmVtZW1iZXIgdGhpcyBidWZmZXIncyBibG9jayBudW1iZXIgZm9y IG5leHQgdGltZSAqLwogCQloc2Nhbi0+eHNfYmxrID0gSXRlbVBvaW50ZXJHZXRCbG9ja051bWJl cih0aWQpOwogCisJCS8qCisJCSAqIERyb3AgdGhlIHhzX2JsayBwaW4gaW5kZXBlbmRlbnRseSBo ZWxkIG9uIGJ5IHNsb3QgKGlmIGFueSkgbm93LAorCQkgKiBiZWZvcmUgY2FsbGluZyBSZWxlYXNl QnVmZmVyLiAgVGhpcyBhdm9pZHMgZXhwZW5zaXZlIGNhbGxzIHRvCisJCSAqIEdldFByaXZhdGVS ZWZDb3VudEVudHJ5U2xvdyBjYXVzZWQgYnkgRXhlY1N0b3JlQnVmZmVySGVhcFR1cGxlCisJCSAq IGZhaWxpbmcgdG8gaGl0IHRoZSBiYWNrZW5kJ3MgY2FjaGUgZm9yIHRoZSByZWxlYXNlIG9mIHRo ZSBvbGQgcGluLgorCQkgKi8KKwkJaWYgKCFpbmRleF9vbmx5KQorCQkJRXhlY0NsZWFyVHVwbGUo c2xvdCk7CisKIAkJaWYgKEJ1ZmZlcklzVmFsaWQoaHNjYW4tPnhzX2NidWYpKQogCQkJUmVsZWFz ZUJ1ZmZlcihoc2Nhbi0+eHNfY2J1Zik7CiAKQEAgLTgyNyw3ICs4MzksMzQgQEAgaGVhcGFtX2lu ZGV4X2hlYXBfZmV0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5IZWFwRGF0YSAqaHNj YW4sCiAJCQkqaGVhcF9jb250aW51ZSA9ICFzY2FuLT5NVkNDU2NhbjsKIAogCQkJc2xvdC0+dHRz X3RhYmxlT2lkID0gUmVsYXRpb25HZXRSZWxpZChyZWwpOwotCQkJRXhlY1N0b3JlQnVmZmVySGVh cFR1cGxlKGhlYXBUdXBsZSwgc2xvdCwgaHNjYW4tPnhzX2NidWYpOworCisJCQkvKgorCQkJICog SWYgdGhpcyBpcyB0aGUgbGFzdCBUSUQgb24gdGhlIGN1cnJlbnQgaGVhcCBibG9jayB3aXRoaW4g dGhlCisJCQkgKiBiYXRjaCwgdHJhbnNmZXIgb3VyIGJ1ZmZlciBwaW4gdG8gdGhlIHNsb3QgcmF0 aGVyIHRoYW4gaGF2aW5nCisJCQkgKiB0aGUgc2xvdCBpbmNyZW1lbnQgdGhlIHBpbiBjb3VudC4g IFRoaXMgc2F2ZXMgYSBwYWlyIG9mCisJCQkgKiBJbmNyQnVmZmVyUmVmQ291bnQgYW5kIFJlbGVh c2VCdWZmZXIgY2FsbHMsIHNpbmNlIHRoZSBjYWxsZXIKKwkJCSAqIHdvdWxkIGp1c3QgcmVsZWFz ZSBpdHMgcGluIG9uIHhzX2NidWYgd2hlbiBzd2l0Y2hpbmcgdG8gdGhlCisJCQkgKiBuZXh0IGJs b2NrIGFueXdheS4KKwkJCSAqCisJCQkgKiBXZSBjYW4gb25seSBkbyB0aGlzIHdoZW4gaGVhcF9j b250aW51ZSBpcyBmYWxzZSwgc2luY2UKKwkJCSAqIG90aGVyd2lzZSB0aGUgY2FsbGVyIHdpbGwg bmVlZCB4c19jYnVmIHRvIHJlbWFpbiB2YWxpZCBmb3IgdGhlCisJCQkgKiBuZXh0IGNhbGwuCisJ CQkgKi8KKwkJCWlmIChoc2Nhbi0+eHNfbGFzdGluYmxvY2sgJiYgISpoZWFwX2NvbnRpbnVlKQor CQkJeworCQkJCUV4ZWNTdG9yZVBpbm5lZEJ1ZmZlckhlYXBUdXBsZShoZWFwVHVwbGUsIHNsb3Qs IGhzY2FuLT54c19jYnVmKTsKKwkJCQloc2Nhbi0+eHNfY2J1ZiA9IEludmFsaWRCdWZmZXI7CisJ CQkJaHNjYW4tPnhzX2JsayA9IEludmFsaWRCbG9ja051bWJlcjsKKworCQkJCS8qCisJCQkJICog Tm90ZTogdGhlIHBpbiBub3cgb3duZWQgYnkgdGhlIHNsb3QgaXMgZXhwZWN0ZWQgdG8gYmUKKwkJ CQkgKiByZWxlYXNlZCBvbiB0aGUgbmV4dCBjYWxsIGhlcmUsIHZpYSBhbiBleHBsaWNpdAorCQkJ CSAqIEV4ZWNDbGVhclR1cGxlLiAgVGhpcyBhdm9pZHMgY2h1cm4gaW4gdGhlIGJhY2tlbmQncyBw cml2YXRlCisJCQkJICogcmVmY291bnQgY2FjaGUuCisJCQkJICovCisJCQl9CisJCQllbHNlCisJ CQkJRXhlY1N0b3JlQnVmZmVySGVhcFR1cGxlKGhlYXBUdXBsZSwgc2xvdCwgaHNjYW4tPnhzX2Ni dWYpOwogCQl9CiAJCWVsc2UKIAkJewpAQCAtOTY2LDE1ICsxMDA1LDQ3IEBAIGhlYXBhbV9pbmRl eF9yZXR1cm5fc2NhbnBvc190aWQoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5IZWFwRGF0 YSAqaHNjYW4sCiAKIAlpZiAoYWxsX3Zpc2libGUgPT0gTlVMTCkKIAl7CisJCWludAkJCW5leHRJ dGVtOworCQlib29sCQloYXNOZXh0OworCiAJCS8qCiAJCSAqIFBsYWluIGluZGV4IHNjYW4uCisJ CSAqCisJCSAqIERldGVybWluZSBpZiB0aGUgbmV4dCBpdGVtIGluIHRoZSBjdXJyZW50IHNjYW4g ZGlyZWN0aW9uIGlzIG9uIGEKKwkJICogZGlmZmVyZW50IGhlYXAgYmxvY2suICBXaGVuIGl0IGlz LCBoZWFwYW1faW5kZXhfaGVhcF9mZXRjaCBjYW4KKwkJICogdHJhbnNmZXIgaXRzIGJ1ZmZlciBw aW4gdG8gdGhlIHNsb3QgaW5zdGVhZCBvZiBpbmNyZW1lbnRpbmcgdGhlIHBpbgorCQkgKiBjb3Vu dCwgc2F2aW5nIGEgcGFpciBvZiBJbmNyQnVmZmVyUmVmQ291bnQvUmVsZWFzZUJ1ZmZlciBjYWxs cy4KKwkJICoKKwkJICogTm90ZTogV2UgY2Fubm90IGRvIHRoaXMgZm9yIGluZGV4LW9ubHkgc2Nh bnMgYmVjYXVzZSBhbGwtdmlzaWJsZQorCQkgKiBpdGVtcyBhcmUgc2tpcHBlZCBieSBib3RoIHRo ZSBzY2FuIGFuZCB0aGUgcmVhZCBzdHJlYW0gY2FsbGJhY2suIEl0CisJCSAqIGRvZXNuJ3Qgc2Vl bSB3b3J0aCB0aGUgdHJvdWJsZSBvZiByZWFzb25pbmcgYWJvdXQgdGhlc2UgaXNzdWVzLAorCQkg KiBzaW5jZSB0aGUgb3B0aW1pemF0aW9uIG9ubHkgaGVscHMgd2hlbiBoZWFwIGZldGNoZXMgYXJl IHJlcXVpcmVkLgorCQkgKgorCQkgKiBOb3RlOiBXZSBkZWxpYmVyYXRlbHkgZG9uJ3QgY29uc2lk ZXIgdGhlIGJhdGNoIGFmdGVyIHNjYW5CYXRjaCwKKwkJICogYmVjYXVzZSBkb2luZyBzbyB3b3Vs ZCBhZGQgY29tcGxleGl0eSBmb3IgbGl0dGxlIGJlbmVmaXQuICBJdCdzCisJCSAqIG9rYXkgaWYg eHNfbGFzdGluYmxvY2sgaXMgc3B1cmlvdXNseSBzZXQgdG8gZmFsc2UuCiAJCSAqLwogCQlBc3Nl cnQoIXNjYW4tPnhzX3dhbnRfaXR1cCk7CisJCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRp cmVjdGlvbikpCisJCXsKKwkJCW5leHRJdGVtID0gc2NhblBvcy0+aXRlbSArIDE7CisJCQloYXNO ZXh0ID0gKG5leHRJdGVtIDw9IHNjYW5CYXRjaC0+bGFzdEl0ZW0pOworCQl9CisJCWVsc2UKKwkJ eworCQkJbmV4dEl0ZW0gPSBzY2FuUG9zLT5pdGVtIC0gMTsKKwkJCWhhc05leHQgPSAobmV4dEl0 ZW0gPj0gc2NhbkJhdGNoLT5maXJzdEl0ZW0pOworCQl9CisKKwkJaHNjYW4tPnhzX2xhc3RpbmJs b2NrID0gaGFzTmV4dCAmJgorCQkJSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcigmc2NhbkJhdGNo LT5pdGVtc1tuZXh0SXRlbV0udGFibGVUaWQpICE9CisJCQlJdGVtUG9pbnRlckdldEJsb2NrTnVt YmVyKCZzY2FuLT54c19oZWFwdGlkKTsKKwogCQlyZXR1cm4gJnNjYW4tPnhzX2hlYXB0aWQ7CiAJ fQogCiAJLyogSW5kZXgtb25seSBzY2FuICovCi0JQXNzZXJ0KHNjYW4tPnhzX3dhbnRfaXR1cCk7 CisJQXNzZXJ0KHNjYW4tPnhzX3dhbnRfaXR1cCAmJiAhaHNjYW4tPnhzX2xhc3RpbmJsb2NrKTsK IAogCS8qCiAJICogVW5sZXNzIHRoZSBpbmRleCBBTSBhbHJlYWR5IHByb2R1Y2VkIHRoZSByZXR1 cm5hYmxlIHR1cGxlIHZpYQotLSAKMi41My4wCgo= --000000000000d6f56006543b3e3b Content-Type: application/octet-stream; name="v27-0002-Add-amgetbatch-interface-and-adopt-it-in-nbtree.patch" Content-Disposition: attachment; filename="v27-0002-Add-amgetbatch-interface-and-adopt-it-in-nbtree.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqe4shlc8 RnJvbSA3MjgwNDY4Mzg0MDUwODdlMmIyZDhkYTBjYzNkYzFjZmY3MmM3MGUwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFdl ZCwgMjUgTWFyIDIwMjYgMTY6NDg6NDMgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyNyAyLzldIEFk ZCBhbWdldGJhdGNoIGludGVyZmFjZSBhbmQgYWRvcHQgaXQgaW4gbmJ0cmVlLgoKQWRkIGEgbmV3 IGFtZ2V0YmF0Y2ggaW5kZXggQU0gaW50ZXJmYWNlIHRoYXQgYWxsb3dzIGluZGV4IGFjY2VzcyBt ZXRob2RzCnRvIGltcGxlbWVudCBwbGFpbiBpbmRleCBzY2FucyBhbmQgaW5kZXgtb25seSBzY2Fu cyB0aGF0IHJldHVybiBpbmRleAplbnRyaWVzIGluIGJhdGNoZXMgY29tcHJpc2luZyBhbGwgbWF0 Y2hpbmcgaXRlbXMgZnJvbSBhbiBpbmRleCBwYWdlLApyYXRoZXIgdGhhbiBvbmUgbWF0Y2ggYXQg YSB0aW1lLiAgQWxzbyBzd2l0Y2ggbmJ0cmVlIG92ZXIgZnJvbQphbWdldHR1cGxlIHRvIHRoZSBu ZXcgYW1nZXRiYXRjaCBpbnRlcmZhY2UuCgpUaGUgbmV3IGludGVyZmFjZSBhbGxvd3MgdGhlIHRh YmxlIEFNIHRvIGFwcGx5IGtub3dsZWRnZSBvZiB3aGljaCBUSURzCndpbGwgYmUgcmV0dXJuZWQg dG8gdGhlIHNjYW4gaW4gdGhlIG5lYXIgZnV0dXJlIHRvIHBlcmZvcm0gb3B0aW1pemF0aW9ucwps aWtlIEkvTyBwcmVmZXRjaGluZy4gIFByZWZldGNoaW5nIGlzIHNldCB0byBiZSBhZGRlZCBieSBh biB1cGNvbWluZyBjb21taXQuCgpXaXRoIGFtZ2V0YmF0Y2gsIGEgc2Nhbi1sZXZlbCBwb2xpY3kg ZGV0ZXJtaW5lcyB3aGV0aGVyIGVhY2ggYmF0Y2gncwppbmRleCBwYWdlIGJ1ZmZlciBwaW4gaXMg ZHJvcHBlZCBlYWdlcmx5IGJ5IHRoZSBpbmRleCBBTSAoZm9yIHBsYWluCnNjYW5zIHdpdGggYW4g TVZDQyBzbmFwc2hvdCwgd2hlcmUgdGhlIHNuYXBzaG90IGl0c2VsZiBwcmV2ZW50cyBUSUQKcmVj eWNsaW5nIHByb2JsZW1zKSBvciByZXRhaW5lZCBhcyBhbiBpbnRlcmxvY2sgYWdhaW5zdCBjb25j dXJyZW50IFRJRApyZWN5Y2xpbmcgYnkgVkFDVVVNLiAgVGhlIGludGVybG9jayBpcyByZXRhaW5l ZCBmb3IgcGxhaW4gbm9uLU1WQ0Mgc2NhbnMKYW5kIGZvciBpbmRleC1vbmx5IHNjYW5zLCBhbmQg aXMgZHJvcHBlZCBieSB0aGUgdGFibGUgQU0gdmlhIHRoZSBuZXcKYW11bmd1YXJkYmF0Y2ggY2Fs bGJhY2sgd2hlbiBpdCBpcyBzYWZlIHRvIGRvIHNvLiAoQWN0dWFsbHksIGluZGV4IEFNcwphcmUg dXN1YWxseSBhYmxlIHRvIGRyb3AgdGhlIHBpbiBhdCB0aGUgc2FtZSB0aW1lIHRoYXQgdGhleSBy ZWxlYXNlIHRoZQpsb2NrLiAgSW4gcHJhY3RpY2UsIHRoZSBhbXVuZ3VhcmRiYXRjaCBjYWxsYmFj ayBpcyBvbmx5IHJlYWxseSBuZWVkZWQKZHVyaW5nIGluZGV4LW9ubHkgc2NhbnMsIHdoZXJlIGRy b3BwaW5nIHRoZSBwaW4gaW50ZXJsb2NrIG1pZ2h0IG5lZWQgdG8KYmUgZGVsYXllZCBldmVyIHNv IHNsaWdodGx5LCBhcyBleHBsYWluZWQgYmVsb3cuKQoKVGhpcyBleHRlbmRzIHRoZSBkcm9wUGlu IG1lY2hhbmlzbSBhZGRlZCB0byBuYnRyZWUgYnkgY29tbWl0IDJlZDViODdmLAphbmQgZ2VuZXJh bGl6ZXMgaXQgdG8gd29yayB3aXRoIGFsbCBpbmRleCBBTXMgdGhhdCBzdXBwb3J0IHRoZSBuZXcK YW1nZXRiYXRjaCBpbnRlcmZhY2UgKExQX0RFQUQgbWFya2luZyBvZiBpbmRleCBlbnRyaWVzIG11 c3QgYmUgcGVyZm9ybWVkCmJ5IGltcGxlbWVudGluZyB0aGUgbmV3IGFta2lsbGl0ZW1zYmF0Y2gg Y2FsbGJhY2ssIHdoaWNoIGhhcyBhCmRvY3VtZW50ZWQgY29udHJhY3QgZGVzY3JpYmluZyBob3cg aW5kZXggQU1zIG11c3QgcmVhc29uIGFib3V0CmNvbmN1cnJlbnQgVElEIHJlY3ljbGluZykuICBT Y2FucyBjYW4gYWx3YXlzIHNhZmVseSBkcm9wIGluZGV4IHBhZ2UgcGlucwplYWdlcmx5LCBwcm92 aWRlZCB0aGUgc2NhbiB1c2VzIGFuIE1WQ0Mgc25hcHNob3QgKHVubGlrZSB0aGUgbmJ0cmVlCmRy b3BQaW4gb3B0aW1pemF0aW9uLCB3aGljaCBoYWQgbm8gd2F5IG9mIGRvaW5nIHRoaXMgc2FmZWx5 IGR1cmluZwppbmRleC1vbmx5IHNjYW5zIGR1ZSB0byBob3cgYW1nZXR0dXBsZSB3b3JrcywgYW5k IG9ubHkgZ2FpbmVkIHN1cHBvcnQKZm9yIHNjYW5zIG9mIHVubG9nZ2VkIHJlbGF0aW9ucyBpbiBy ZWNlbnQgY29tbWl0IDhhODc5MTE5KS4KClRoZSBvbGQgYW1tYXJrcG9zIGFuZCBhbXJlc3RycG9z IGluZGV4IEFNIGNhbGxiYWNrcyBhcmUgcmVtb3ZlZC4gIFdpdGgKYW1nZXRiYXRjaCwgbWFyay9y ZXN0b3JlIG9mIHNjYW4gcG9zaXRpb25zIGlzIG1hbmFnZWQgYnkgdGhlIHRhYmxlIEFNLAp3aXRo IGhlbHAgZnJvbSBpbmRleGJhdGNoLmMgdXRpbGl0eSBmdW5jdGlvbnMsIHJhdGhlciB0aGFuIGJl aW5nIHdob2xseQpkZWxlZ2F0ZWQgdG8gdGhlIGluZGV4IEFNLiAgVGhlIG5ldyBpbmRleF9zY2Fu X21hcmtwb3MgYW5kCmluZGV4X3NjYW5fcmVzdHJwb3MgdGFibGUgQU0gY2FsbGJhY2tzIG11c3Qg YmUgaW1wbGVtZW50ZWQgdG8gbWFrZSBhbGwKdGhpcyB3b3JrLiAgQXMgYSBmdXJ0aGVyIGNvbmRp dGlvbiwgbWFyay9yZXN0b3JlIGlzIG9ubHkgc3VwcG9ydGVkIGJ5CmluZGV4IEFNcyB0aGF0IG9w dCBpbiBieSBzZXR0aW5nIHRoZSBuZXcgYW1jYW5tYXJrcG9zIGZsYWcgKG9ubHkgbmJ0cmVlCnNl dHMgdGhpcyB0byB0cnVlKS4gIFRoaXMgYW1jYW5tYXJrcG9zIGZsYWcgc2NoZW1lIGF2b2lkcyB0 aGUgYXNzdW1wdGlvbgp0aGF0IGV2ZXJ5IGluZGV4IEFNcyBpcyBjYXBhYmxlIG9mIHBpY2tpbmcg dXAgYSBzY2FuIGZyb20gYSBwcmV2aW91c2x5CnNhdmVkIG1hcmtCYXRjaC4KCkFuIHVwY29taW5n IGNvbW1pdCB0aGF0IHdpbGwgYWRkIGluZGV4IHByZWZldGNoaW5nIHdpbGwgdXNlIGEgcmVhZApz dHJlYW0gdG8gcmVhZCBoZWFwIHBhZ2VzIGR1cmluZyBpbmRleCBzY2Fucy4gIFJlYWQgc3RyZWFt IGlzIGNhcmVmdWwgdG8KbGltaXQgaG93IG1hbnkgdGhpbmdzIGl0IHBpbnMsIGxlc3Qgd2UgcnVu IGludG8gcHJvYmxlbXMgZHVlIHRvIGhhdmluZwp0b28gbWFueSBidWZmZXJzIHBpbm5lZC4gIFNp bXBseSBuZXZlciBob2xkaW5nIG9uIHRvIGluZGV4IHBhZ2UgYnVmZmVyCnBpbnMgZ3JlYXRseSBz aW1wbGlmaWVzIHJlc291cmNlIG1hbmFnZW1lbnQgZm9yIGluZGV4IHByZWZldGNoaW5nOwp0aGVy ZSdzIG5vIHJpc2sgb2YgdW5pbnRlbmRlZCBpbnRlcmFjdGlvbnMgYmV0d2VlbiB0aGUgcmVhZCBz dHJlYW0gYW5kCmluZGV4IEFNLiAgVGhlIG9ubHkgZG93bnNpZGUgaXMgdGhhdCB3ZSBjYW5ub3Qg c3VwcG9ydCBwcmVmZXRjaGluZwpkdXJpbmcgc2NhbnMgdGhhdCB1c2UgYSBub24tTVZDQyBzbmFw c2hvdCwgd2hpY2ggc2VlbXMgcXVpdGUgYWNjZXB0YWJsZS4KCkluIHByYWN0aWNlLCBoZWFwYW0g ZG9lc24ndCBkcm9wIGVhY2ggYmF0Y2gncyBpbmRleCBwYWdlIGJ1ZmZlciBwaW4gYXQKdGhlIGVh cmxpZXN0IG9wcG9ydHVuaXR5IGR1cmluZyBpbmRleC1vbmx5IHNjYW5zLiAgVGhpcyB3YXMgZGVl bWVkCm5lY2Vzc2FyeSB0byBhdm9pZCByZWdyZXNzaW5nIGluZGV4LW9ubHkgc2NhbnMgd2l0aCBh IExJTUlULCBpbgpwYXJ0aWN1bGFyIHdpdGggbmVzdGxvb3AgYW50aS1qb2lucyBhbmQgbmVzdGxv b3Agc2VtaS1qb2luczsgZWFnZXJseQpsb2FkaW5nIGFsbCB0aGUgdmlzaWJpbGl0eSBpbmZvcm1h dGlvbiB1cCBmcm9udCByZWdyZXNzZWQgc3VjaCBxdWVyaWVzLgpUaGUgbmV3IGFtZ2V0YmF0Y2gg aW50ZXJmYWNlIGdpdmVzIHRhYmxlIEFNcyB0aGUgYXV0aG9yaXR5IHRvIGRlY2lkZQp3aGVuIHRv IGRyb3AgaW5kZXggcGFnZSBwaW5zL3VuZ3VhcmQgYmF0Y2hlcywgc28gdGhpcyBjYW4gYmUgY29u c2lkZXJlZAphIGhlYXBhbSBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgKGluZGV4IEFNcyBkb24ndCBu ZWVkIHRvIGtub3cgYWJvdXQgaXQpLgpUaGlzIHNjaGVtZSBlbmFibGVzIGluZGV4IHByZWZldGNo aW5nIHRvIGFjcXVpcmUgYW5kIHRoZW4gZHJvcCBhbnkgZXh0cmEKYmF0Y2ggaW5kZXggcGFnZSBw aW4gd2l0aGluIGl0cyByZWFkIHN0cmVhbSBjYWxsYmFjayAtLSBldmVuIHdoZW4gYW4KaW5kZXgt b25seSBzY2FuICh0aGF0IG11c3QgcGVyZm9ybSBzb21lIGhlYXAgZmV0Y2hlcykgaG9sZHMgb3Bl biBzZXZlcmFsCmluZGV4IGJhdGNoZXMgYXQgb25jZSBpbiBvcmRlciB0byBtYWludGFpbiBhbiBh ZGVxdWF0ZSBwcmVmZXRjaApkaXN0YW5jZS4gIFRoZSByZWFkIHN0cmVhbSBjYW5ub3Qgb2JzZXJ2 ZSBhbnkgY2hhbmdlIGluIHRoZSBiYWNrZW5kJ3MKYnVmZmVyIHBpbiBsaW1pdC4KCkluZGV4IGFj Y2VzcyBtZXRob2RzIHRoYXQgc3VwcG9ydCBwbGFpbiBpbmRleCBzY2FucyBtdXN0IG5vdyBpbXBs ZW1lbnQKZWl0aGVyIHRoZSBhbWdldGJhdGNoIGludGVyZmFjZSBvciB0aGUgYW1nZXR0dXBsZSBp bnRlcmZhY2UgKG5vdCBib3RoKS4KVXBjb21pbmcgcGF0Y2hlcyB3aWxsIGFkZCBzdXBwb3J0IGZv ciBhbWdldGJhdGNoIHRvIHRoZSBoYXNoIGFuZCBHaVNUCmluZGV4IEFNcy4gKFhYWCBXZSBzaG91 bGQgYmUgYWJsZSB0byBhZGQgc3VwcG9ydCBmb3IgU1AtR2lTVCB0b28sIHdoaWNoCmlzIHRoZSBs YXN0IHJlbWFpbmluZyBhbWdldHR1cGxlIGluZGV4IEFNLiAgVGhhdCB3b3VsZCBhbGxvdyB1cyB0 bwpkZWNsYXJlIGFtZ2V0dHVwbGUgZGVwcmVjYXRlZC4pCgpBdXRob3I6IFRvbWFzIFZvbmRyYSA8 dG9tYXNAdm9uZHJhLm1lPgpBdXRob3I6IFBldGVyIEdlb2doZWdhbiA8cGdAYm93dC5pZT4KUmV2 aWV3ZWQtYnk6IEFuZHJlcyBGcmV1bmQgPGFuZHJlc0BhbmFyYXplbC5kZT4KUmV2aWV3ZWQtYnk6 IFRob21hcyBNdW5ybyA8dGhvbWFzLm11bnJvQGdtYWlsLmNvbT4KRGlzY3Vzc2lvbjogaHR0cHM6 Ly9wb3N0Z3IuZXMvbS9jZjg1ZjQ2Zi1iMDJmLTA1YjItNTI0OC01MDAwYjg5NGViYWJAZW50ZXJw cmlzZWRiLmNvbQpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL2VmYWMzMjM4LTZmMzQt NDFlYS1hMzkzLTI2Y2MwNDQxYjUwNiU0MHZvbmRyYS5tZQotLS0KIHNyYy9pbmNsdWRlL2FjY2Vz cy9hbWFwaS5oICAgICAgICAgICAgICAgICAgICB8ICAyOSArLQogc3JjL2luY2x1ZGUvYWNjZXNz L2dlbmFtLmggICAgICAgICAgICAgICAgICAgIHwgICA1ICstCiBzcmMvaW5jbHVkZS9hY2Nlc3Mv aGVhcGFtLmggICAgICAgICAgICAgICAgICAgfCAgIDcgKy0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9p bmRleGJhdGNoLmggICAgICAgICAgICAgICB8IDU1MSArKysrKysrKysrKysKIHNyYy9pbmNsdWRl L2FjY2Vzcy9uYnRyZWUuaCAgICAgICAgICAgICAgICAgICB8IDE5MCArKy0tCiBzcmMvaW5jbHVk ZS9hY2Nlc3MvcmVsc2Nhbi5oICAgICAgICAgICAgICAgICAgfCAyMDcgKysrKy0KIHNyYy9pbmNs dWRlL2FjY2Vzcy90YWJsZWFtLmggICAgICAgICAgICAgICAgICB8IDEwMiArKy0KIHNyYy9pbmNs dWRlL25vZGVzL3BhdGhub2Rlcy5oICAgICAgICAgICAgICAgICB8ICAgNiArLQogc3JjL2JhY2tl bmQvYWNjZXNzL2JyaW4vYnJpbi5jICAgICAgICAgICAgICAgIHwgICA3ICstCiBzcmMvYmFja2Vu ZC9hY2Nlc3MvZ2luL2dpbmdldC5jICAgICAgICAgICAgICAgfCAgIDYgKy0KIHNyYy9iYWNrZW5k L2FjY2Vzcy9naW4vZ2ludXRpbC5jICAgICAgICAgICAgICB8ICAgNyArLQogc3JjL2JhY2tlbmQv YWNjZXNzL2dpc3QvZ2lzdC5jICAgICAgICAgICAgICAgIHwgICA3ICstCiBzcmMvYmFja2VuZC9h Y2Nlc3MvaGFzaC9oYXNoLmMgICAgICAgICAgICAgICAgfCAgIDcgKy0KIHNyYy9iYWNrZW5kL2Fj Y2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMgICAgICB8ICAgNSArLQogc3JjL2JhY2tlbmQvYWNj ZXNzL2hlYXAvaGVhcGFtX2luZGV4c2Nhbi5jICAgIHwgNTE4ICsrKysrKysrKystCiBzcmMvYmFj a2VuZC9hY2Nlc3MvaW5kZXgvTWFrZWZpbGUgICAgICAgICAgICAgfCAgIDMgKy0KIHNyYy9iYWNr ZW5kL2FjY2Vzcy9pbmRleC9hbWFwaS5jICAgICAgICAgICAgICB8ICAgNSArCiBzcmMvYmFja2Vu ZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYyAgICAgICAgICAgICAgfCAgIDggKwogc3JjL2JhY2tlbmQv YWNjZXNzL2luZGV4L2luZGV4YW0uYyAgICAgICAgICAgIHwgMTM4ICstLQogc3JjL2JhY2tlbmQv YWNjZXNzL2luZGV4L2luZGV4YmF0Y2guYyAgICAgICAgIHwgODIxICsrKysrKysrKysrKysrKysr Kwogc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L21lc29uLmJ1aWxkICAgICAgICAgIHwgICAxICsK IHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvUkVBRE1FICAgICAgICAgICAgICB8ICA3NCArLQog c3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRwYWdlLmMgICAgICAgICAgIHwgIDEzICstCiBz cmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlYWRwYWdlLmMgICAgICAgfCAyMDcgKysrLS0K IHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMgICAgICAgICAgICB8IDQ2NSArKysr Ky0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNlYXJjaC5jICAgICAgICAgfCA1 NjYgKysrKystLS0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHV0aWxzLmMgICAg ICAgICAgfCAyNDUgLS0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHhsb2cuYyAg ICAgICAgICAgfCAgIDYgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BndXRpbHMuYyAg ICAgICAgICB8ICAgNyArLQogc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW1hcGkuYyAg ICAgICAgIHwgICA1ICstCiBzcmMvYmFja2VuZC9jb21tYW5kcy9pbmRleGNtZHMuYyAgICAgICAg ICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNBbWkuYyAgICAgICAgICAg ICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYyAg ICAgIHwgICA0ICstCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhzY2FuLmMgICAgICAg ICAgfCAgIDQgKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNZXJnZWpvaW4uYyAgICAgICAg ICB8ICAgNCArLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvaW5keHBhdGguYyAgICAgICAg IHwgICA2ICstCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMgICAgICAgICAg fCAgIDggKy0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVsYXRpb24uYyAgICB8 ICAgOSArLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2FtdXRpbHMuYyAgICAgICAgICAgICAgIHwg ICA4ICstCiBjb250cmliL2FtY2hlY2svdmVyaWZ5X25idHJlZS5jICAgICAgICAgICAgICAgfCAg IDIgKy0KIGNvbnRyaWIvYmxvb20vYmx1dGlscy5jICAgICAgICAgICAgICAgICAgICAgICB8ICAg NyArLQogZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbCAgICAgICAgICAgICAgICAgICAgIHwgNTg0 ICsrKysrKysrKysrLS0KIGRvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3RhYmxlLnNnbWwgICAgICAg ICAgICB8ICAxMyArLQogLi4uL21vZHVsZXMvZHVtbXlfaW5kZXhfYW0vZHVtbXlfaW5kZXhfYW0u YyAgIHwgICA3ICstCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICAgICAgICAg ICAgfCAgMTUgKy0KIDQ1IGZpbGVzIGNoYW5nZWQsIDM0ODMgaW5zZXJ0aW9ucygrKSwgMTQxMCBk ZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaW5jbHVkZS9hY2Nlc3MvaW5kZXhi YXRjaC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4 YmF0Y2guYwoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9hbWFwaS5oIGIvc3JjL2lu Y2x1ZGUvYWNjZXNzL2FtYXBpLmgKaW5kZXggNzkyNDAzMzM1Li4wMjc5M2ExMTUgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9hbWFwaS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9h bWFwaS5oCkBAIC0xOTksNiArMTk5LDE5IEBAIHR5cGVkZWYgdm9pZCAoKmFtcmVzY2FuX2Z1bmN0 aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuLAogdHlwZWRlZiBib29sICgqYW1nZXR0dXBsZV9mdW5j dGlvbikgKEluZGV4U2NhbkRlc2Mgc2NhbiwKIAkJCQkJCQkJCSBTY2FuRGlyZWN0aW9uIGRpcmVj dGlvbik7CiAKKy8qIG5leHQgYmF0Y2ggb2YgdmFsaWQgdHVwbGVzICovCit0eXBlZGVmIEluZGV4 U2NhbkJhdGNoICgqYW1nZXRiYXRjaF9mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2NhbiwKKwkJ CQkJCQkJCQkJICAgSW5kZXhTY2FuQmF0Y2ggcHJpb3JiYXRjaCwKKwkJCQkJCQkJCQkJICAgU2Nh bkRpcmVjdGlvbiBkaXJlY3Rpb24pOworCisvKiBkcm9wIFRJRCByZWN5Y2xpbmcgaW50ZXJsb2Nr IGhlbGQgdG8gcHJldmVudCBjb25jdXJyZW50IFZBQ1VVTSByZWN5Y2xpbmcgKi8KK3R5cGVkZWYg dm9pZCAoKmFtdW5ndWFyZGJhdGNoX2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJ CQkJCQkJCSBJbmRleFNjYW5CYXRjaCBiYXRjaCk7CisKKy8qIG1hcmsgZGVhZCBpdGVtcyBpbiBp bmRleCBwYWdlICovCit0eXBlZGVmIHZvaWQgKCphbWtpbGxpdGVtc2JhdGNoX2Z1bmN0aW9uKSAo SW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJCSAgIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsK KwogLyogZmV0Y2ggYWxsIHZhbGlkIHR1cGxlcyAqLwogdHlwZWRlZiBpbnQ2NCAoKmFtZ2V0Yml0 bWFwX2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuLAogCQkJCQkJCQkJICAgVElEQml0bWFw ICp0Ym0pOwpAQCAtMjA2LDExICsyMTksOSBAQCB0eXBlZGVmIGludDY0ICgqYW1nZXRiaXRtYXBf ZnVuY3Rpb24pIChJbmRleFNjYW5EZXNjIHNjYW4sCiAvKiBlbmQgaW5kZXggc2NhbiAqLwogdHlw ZWRlZiB2b2lkICgqYW1lbmRzY2FuX2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuKTsKIAot LyogbWFyayBjdXJyZW50IHNjYW4gcG9zaXRpb24gKi8KLXR5cGVkZWYgdm9pZCAoKmFtbWFya3Bv c19mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2Nhbik7Ci0KLS8qIHJlc3RvcmUgbWFya2VkIHNj YW4gcG9zaXRpb24gKi8KLXR5cGVkZWYgdm9pZCAoKmFtcmVzdHJwb3NfZnVuY3Rpb24pIChJbmRl eFNjYW5EZXNjIHNjYW4pOworLyogaW52YWxpZGF0ZSBpbmRleCBBTSBzdGF0ZSB0aGF0IGluZGVw ZW5kZW50bHkgdHJhY2tzIHNjYW4ncyBwb3NpdGlvbiAqLwordHlwZWRlZiB2b2lkICgqYW1wb3Ny ZXNldF9mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCQkJCSBJbmRleFNjYW5C YXRjaCBiYXRjaCk7CiAKIC8qCiAgKiBDYWxsYmFjayBmdW5jdGlvbiBzaWduYXR1cmVzIC0gZm9y IHBhcmFsbGVsIGluZGV4IHNjYW5zLgpAQCAtMjU1LDYgKzI2Niw4IEBAIHR5cGVkZWYgc3RydWN0 IEluZGV4QW1Sb3V0aW5lCiAJYm9vbAkJYW1jb25zaXN0ZW50b3JkZXJpbmc7CiAJLyogZG9lcyBB TSBzdXBwb3J0IGJhY2t3YXJkIHNjYW5uaW5nPyAqLwogCWJvb2wJCWFtY2FuYmFja3dhcmQ7CisJ LyogZG9lcyBBTSBzdXBwb3J0IG1hcmsvcmVzdG9yZSBvZiBhIHNjYW4gcG9zaXRpb24/ICovCisJ Ym9vbAkJYW1jYW5tYXJrcG9zOwogCS8qIGRvZXMgQU0gc3VwcG9ydCBVTklRVUUgaW5kZXhlcz8g Ki8KIAlib29sCQlhbWNhbnVuaXF1ZTsKIAkvKiBkb2VzIEFNIHN1cHBvcnQgbXVsdGktY29sdW1u IGluZGV4ZXM/ICovCkBAIC0zMTAsMTAgKzMyMywxMiBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleEFt Um91dGluZQogCWFtYmVnaW5zY2FuX2Z1bmN0aW9uIGFtYmVnaW5zY2FuOwogCWFtcmVzY2FuX2Z1 bmN0aW9uIGFtcmVzY2FuOwogCWFtZ2V0dHVwbGVfZnVuY3Rpb24gYW1nZXR0dXBsZTsgLyogY2Fu IGJlIE5VTEwgKi8KKwlhbWdldGJhdGNoX2Z1bmN0aW9uIGFtZ2V0YmF0Y2g7IC8qIGNhbiBiZSBO VUxMICovCisJYW11bmd1YXJkYmF0Y2hfZnVuY3Rpb24gYW11bmd1YXJkYmF0Y2g7IC8qIGNhbiBi ZSBOVUxMICovCisJYW1raWxsaXRlbXNiYXRjaF9mdW5jdGlvbiBhbWtpbGxpdGVtc2JhdGNoOyAv KiBjYW4gYmUgTlVMTCAqLwogCWFtZ2V0Yml0bWFwX2Z1bmN0aW9uIGFtZ2V0Yml0bWFwOwkvKiBj YW4gYmUgTlVMTCAqLwogCWFtZW5kc2Nhbl9mdW5jdGlvbiBhbWVuZHNjYW47Ci0JYW1tYXJrcG9z X2Z1bmN0aW9uIGFtbWFya3BvczsJLyogY2FuIGJlIE5VTEwgKi8KLQlhbXJlc3RycG9zX2Z1bmN0 aW9uIGFtcmVzdHJwb3M7IC8qIGNhbiBiZSBOVUxMICovCisJYW1wb3NyZXNldF9mdW5jdGlvbiBh bXBvc3Jlc2V0OyAvKiBjYW4gYmUgTlVMTCAqLwogCiAJLyogaW50ZXJmYWNlIGZ1bmN0aW9ucyB0 byBzdXBwb3J0IHBhcmFsbGVsIGluZGV4IHNjYW5zICovCiAJYW1lc3RpbWF0ZXBhcmFsbGVsc2Nh bl9mdW5jdGlvbiBhbWVzdGltYXRlcGFyYWxsZWxzY2FuOyAvKiBjYW4gYmUgTlVMTCAqLwpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFtLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3Mv Z2VuYW0uaAppbmRleCAwNWVlYzkyMDQuLjYxNTY4NmRjMiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvYWNjZXNzL2dlbmFtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFtLmgKQEAgLTk2 LDYgKzk2LDcgQEAgdHlwZWRlZiBib29sICgqSW5kZXhCdWxrRGVsZXRlQ2FsbGJhY2spIChJdGVt UG9pbnRlciBpdGVtcHRyLCB2b2lkICpzdGF0ZSk7CiAKIC8qIHN0cnVjdCBkZWZpbml0aW9ucyBh cHBlYXIgaW4gcmVsc2Nhbi5oICovCiB0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5EZXNjRGF0YSAq SW5kZXhTY2FuRGVzYzsKK3R5cGVkZWYgc3RydWN0IEluZGV4U2NhbkJhdGNoRGF0YSAqSW5kZXhT Y2FuQmF0Y2g7CiB0eXBlZGVmIHN0cnVjdCBTeXNTY2FuRGVzY0RhdGEgKlN5c1NjYW5EZXNjOwog CiB0eXBlZGVmIHN0cnVjdCBQYXJhbGxlbEluZGV4U2NhbkRlc2NEYXRhICpQYXJhbGxlbEluZGV4 U2NhbkRlc2M7CkBAIC0xNjksOCArMTcwLDYgQEAgZXh0ZXJuIHZvaWQgaW5kZXhfcmVzY2FuKElu ZGV4U2NhbkRlc2Mgc2NhbiwKIAkJCQkJCSBTY2FuS2V5IGtleXMsIGludCBua2V5cywKIAkJCQkJ CSBTY2FuS2V5IG9yZGVyYnlzLCBpbnQgbm9yZGVyYnlzKTsKIGV4dGVybiB2b2lkIGluZGV4X2Vu ZHNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuKTsKLWV4dGVybiB2b2lkIGluZGV4X21hcmtwb3MoSW5k ZXhTY2FuRGVzYyBzY2FuKTsKLWV4dGVybiB2b2lkIGluZGV4X3Jlc3RycG9zKEluZGV4U2NhbkRl c2Mgc2Nhbik7CiBleHRlcm4gU2l6ZSBpbmRleF9wYXJhbGxlbHNjYW5fZXN0aW1hdGUoUmVsYXRp b24gaW5kZXhSZWxhdGlvbiwKIAkJCQkJCQkJCQlpbnQgbmtleXMsIGludCBub3JkZXJieXMsIFNu YXBzaG90IHNuYXBzaG90KTsKIGV4dGVybiB2b2lkIGluZGV4X3BhcmFsbGVsc2Nhbl9pbml0aWFs aXplKFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKQEAgLTE4NCw4ICsxODMsNiBAQCBleHRlcm4gSW5k ZXhTY2FuRGVzYyBpbmRleF9iZWdpbnNjYW5fcGFyYWxsZWwoUmVsYXRpb24gaGVhcHJlbCwKIAkJ CQkJCQkJCQkJICBpbnQgbmtleXMsIGludCBub3JkZXJieXMsCiAJCQkJCQkJCQkJCSAgUGFyYWxs ZWxJbmRleFNjYW5EZXNjIHBzY2FuLAogCQkJCQkJCQkJCQkgIHVpbnQzMiBmbGFncyk7Ci1leHRl cm4gSXRlbVBvaW50ZXIgaW5kZXhfZ2V0bmV4dF90aWQoSW5kZXhTY2FuRGVzYyBzY2FuLAotCQkJ CQkJCQkJIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uKTsKIGV4dGVybiBpbnQ2NCBpbmRleF9nZXRi aXRtYXAoSW5kZXhTY2FuRGVzYyBzY2FuLCBUSURCaXRtYXAgKmJpdG1hcCk7CiAKIGV4dGVybiBJ bmRleEJ1bGtEZWxldGVSZXN1bHQgKmluZGV4X2J1bGtfZGVsZXRlKEluZGV4VmFjdXVtSW5mbyAq aW5mbywKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaCBiL3NyYy9pbmNs dWRlL2FjY2Vzcy9oZWFwYW0uaAppbmRleCAyY2IyNjAyYjMuLjQ2OGRjZmZmZCAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9o ZWFwYW0uaApAQCAtMTI4LDYgKzEyOCw3IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4U2NhbkhlYXBE YXRhCiAKIAkvKiBGb3IgdmlzaWJpbGl0eSBtYXAgY2hlY2tzIChpbmRleC1vbmx5IHNjYW5zIGFu ZCBvbi1hY2Nlc3MgcHJ1bmluZykgKi8KIAlCdWZmZXIJCXhzX3ZtYnVmZmVyOwkvKiB2aXNpYmls aXR5IG1hcCBidWZmZXIgKi8KKwlpbnQJCQl4c192bV9pdGVtczsJLyogIyBpdGVtcyB0byByZXNv bHZlIHZpc2liaWxpdHkgaW5mbyBmb3IgKi8KIAogCWJvb2wJCXhzX3JlYWRvbmx5OwkvKiBzY2Fu IGlzIHJlYWQtb25seT8gKi8KIApAQCAtNDM2LDggKzQzNywxMiBAQCBleHRlcm4gVHJhbnNhY3Rp b25JZCBoZWFwX2luZGV4X2RlbGV0ZV90dXBsZXMoUmVsYXRpb24gcmVsLAogZXh0ZXJuIGJvb2wg aGVhcGFtX2ZldGNoX3RpZChSZWxhdGlvbiByZWwsIEl0ZW1Qb2ludGVyIHRpZCwgU25hcHNob3Qg c25hcHNob3QsCiAJCQkJCQkJIFR1cGxlVGFibGVTbG90ICpzbG90LCBib29sICphbGxfZGVhZCk7 CiBleHRlcm4gdm9pZCBoZWFwYW1faW5kZXhfc2Nhbl9iZWdpbihJbmRleFNjYW5EZXNjIHNjYW4s IHVpbnQzMiBmbGFncyk7Ci1leHRlcm4gdm9pZCBoZWFwYW1faW5kZXhfc2Nhbl9yZXNldChJbmRl eFNjYW5EZXNjIHNjYW4pOworZXh0ZXJuIHZvaWQgaGVhcGFtX2luZGV4X3NjYW5fYmF0Y2hfaW5p dChJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCQkJIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsK K2V4dGVybiB2b2lkIGhlYXBhbV9pbmRleF9zY2FuX3Jlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4p OwogZXh0ZXJuIHZvaWQgaGVhcGFtX2luZGV4X3NjYW5fZW5kKEluZGV4U2NhbkRlc2Mgc2Nhbik7 CitleHRlcm4gdm9pZCBoZWFwYW1faW5kZXhfc2Nhbl9tYXJrcG9zKEluZGV4U2NhbkRlc2Mgc2Nh bik7CitleHRlcm4gdm9pZCBoZWFwYW1faW5kZXhfc2Nhbl9yZXN0cnBvcyhJbmRleFNjYW5EZXNj IHNjYW4pOwogZXh0ZXJuIGJvb2wgaGVhcF9ob3Rfc2VhcmNoX2J1ZmZlcihJdGVtUG9pbnRlciB0 aWQsIFJlbGF0aW9uIHJlbGF0aW9uLAogCQkJCQkJCQkgICBCdWZmZXIgYnVmZmVyLCBTbmFwc2hv dCBzbmFwc2hvdCwgSGVhcFR1cGxlIGhlYXBUdXBsZSwKIAkJCQkJCQkJICAgYm9vbCAqYWxsX2Rl YWQsIGJvb2wgZmlyc3RfY2FsbCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaW5k ZXhiYXRjaC5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2luZGV4YmF0Y2guaApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAuLmNhZmZhNmE3NAotLS0gL2Rldi9udWxsCisrKyBiL3Ny Yy9pbmNsdWRlL2FjY2Vzcy9pbmRleGJhdGNoLmgKQEAgLTAsMCArMSw1NTEgQEAKKy8qLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorICoKKyAqIGluZGV4YmF0Y2guaAorICoJICBCYXRjaC1iYXNlZCBpbmRleCBz Y2FuIGluZnJhc3RydWN0dXJlIGZvciB0aGUgYW1nZXRiYXRjaCBpbnRlcmZhY2UuCisgKgorICog VGhpcyBtb2R1bGUgb3ducyBhbGwgY29kZSB0aGF0IG9wZXJhdGVzIG9uIGluZGV4IHNjYW4gYmF0 Y2hlcyBhbmQgb24gdGhlCisgKiBzY2FuJ3MgYmF0Y2ggcmluZyBidWZmZXI6IGVsZW1lbnRhcnkg cmluZyBidWZmZXIsIGJhdGNoIG1lbW9yeSBsYXlvdXQsIGFuZAorICogcG9zaXRpb24gb3BlcmF0 aW9ucywgdGhlIHByb3RvY29sIGZ1bmN0aW9ucyB1c2VkIGJ5IHRhYmxlIEFNcyB0byBtYW5hZ2Ug YW4KKyAqIGluZGV4IHNjYW4ncyBwb3NpdGlvbmFsIHN0YXRlLCBhbmQgdXRpbGl0aWVzIGNhbGxl ZCBieSBpbmRleCBBTXMgdGhhdAorICogaW1wbGVtZW50IGFtZ2V0YmF0Y2guCisgKgorICogVGhl IGRhdGEgc3RydWN0dXJlcyB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBvcGVyYXRlIG9uIGFyZSBpbiBy ZWxzY2FuLmgsIG5vdAorICogaGVyZS4gIHJlbHNjYW4uaCBkZWZpbmVzIHRoZSBkYXRhIHN0cnVj dHVyZXM7IHRoaXMgbW9kdWxlIHByb3ZpZGVzIHV0aWxpdHkKKyAqIGZ1bmN0aW9ucyB1c2VkIGJ5 IHRhYmxlIEFNcyBhbmQgaW5kZXggQU1zIHRvIG9wZXJhdGUgb24gdGhvc2Ugc3RydWN0dXJlcy4K KyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyNiwgUG9zdGdyZVNRTCBHbG9i YWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVn ZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICogc3JjL2luY2x1ZGUv YWNjZXNzL2luZGV4YmF0Y2guaAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVm IElOREVYQkFUQ0hfSAorI2RlZmluZSBJTkRFWEJBVENIX0gKKworI2luY2x1ZGUgImFjY2Vzcy9h bWFwaS5oIgorI2luY2x1ZGUgImFjY2Vzcy9nZW5hbS5oIgorI2luY2x1ZGUgImFjY2Vzcy9yZWxz Y2FuLmgiCisjaW5jbHVkZSAic3RvcmFnZS9idWYuaCIKKyNpbmNsdWRlICJ1dGlscy9yZWwuaCIK KworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRWxlbWVudGFyeSBiYXRjaCByaW5nIGJ1ZmZl ciBvcGVyYXRpb25zCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworU3RhdGljQXNzZXJ0 RGVjbChJTkRFWF9TQ0FOX01BWF9CQVRDSEVTIDw9IFBHX0lOVDhfTUFYICsgMSwKKwkJCQkgImlu ZGV4X3NjYW5fYmF0Y2hfbG9hZGVkIHJlbGllcyBvbiBpbnQ4IHJpbmcgYnVmZmVyIGFyaXRobWV0 aWMiKTsKK1N0YXRpY0Fzc2VydERlY2woKElOREVYX1NDQU5fTUFYX0JBVENIRVMgJiAoSU5ERVhf U0NBTl9NQVhfQkFUQ0hFUyAtIDEpKSA9PSAwLAorCQkJCSAiSU5ERVhfU0NBTl9NQVhfQkFUQ0hF UyBtdXN0IGJlIGEgcG93ZXIgb2YgMiIpOworCisvKgorICogSG93IG1hbnkgYmF0Y2hlcyBhcmUg Y3VycmVudGx5IGxvYWRlZCBpbiB0aGUgcmluZyBidWZmZXI/CisgKi8KK3N0YXRpYyBpbmxpbmUg dWludDgKK2luZGV4X3NjYW5fYmF0Y2hfY291bnQoSW5kZXhTY2FuRGVzYyBzY2FuKQoreworCXJl dHVybiAodWludDgpIChzY2FuLT5iYXRjaHJpbmdidWYubmV4dEJhdGNoIC0KKwkJCQkJc2Nhbi0+ YmF0Y2hyaW5nYnVmLmhlYWRCYXRjaCk7Cit9CisKKy8qCisgKiBEbyB3ZSBhbHJlYWR5IGhhdmUg YSBiYXRjaCBsb2FkZWQgYXQgJ2lkeCcgb2Zmc2V0IGluIHNjYW4ncyByaW5nIGJ1ZmZlcj8KKyAq CisgKiBOT1RFOiBhIHN0YWxlIGJhdGNoIGlkeCBjYW4gYWxpYXMgYSBjdXJyZW50bHktbG9hZGVk IHJhbmdlIGR1ZSB0bworICogd3JhcGFyb3VuZCwgcHJvZHVjaW5nIGEgZmFsc2UgcG9zaXRpdmUu ICBGYWxzZSBuZWdhdGl2ZXMgYXJlIG5vdCBwb3NzaWJsZS4KKyAqLworc3RhdGljIGlubGluZSBi b29sCitpbmRleF9zY2FuX2JhdGNoX2xvYWRlZChJbmRleFNjYW5EZXNjIHNjYW4sIHVpbnQ4IGlk eCkKK3sKKwlyZXR1cm4gKGludDgpIChpZHggLSBzY2FuLT5iYXRjaHJpbmdidWYuaGVhZEJhdGNo KSA+PSAwICYmCisJCShpbnQ4KSAoaWR4IC0gc2Nhbi0+YmF0Y2hyaW5nYnVmLm5leHRCYXRjaCkg PCAwOworfQorCisvKgorICogSGF2ZSB3ZSBsb2FkZWQgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJh dGNoZXM/CisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbAoraW5kZXhfc2Nhbl9iYXRjaF9mdWxsKElu ZGV4U2NhbkRlc2Mgc2NhbikKK3sKKwlyZXR1cm4gaW5kZXhfc2Nhbl9iYXRjaF9jb3VudChzY2Fu KSA9PSBJTkRFWF9TQ0FOX01BWF9CQVRDSEVTOworfQorCisvKgorICogUmV0dXJuIGJhdGNoIGZv ciB0aGUgcHJvdmlkZWQgaW5kZXguCisgKi8KK3N0YXRpYyBpbmxpbmUgSW5kZXhTY2FuQmF0Y2gK K2luZGV4X3NjYW5fYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCB1aW50OCBpZHgpCit7CisJQXNz ZXJ0KGluZGV4X3NjYW5fYmF0Y2hfbG9hZGVkKHNjYW4sIGlkeCkpOworCisJcmV0dXJuIHNjYW4t PmJhdGNoYnVmW2lkeCAmIChJTkRFWF9TQ0FOX01BWF9CQVRDSEVTIC0gMSldOworfQorCisvKgor ICogQXBwZW5kIGdpdmVuIGJhdGNoIHRvIHNjYW4ncyBiYXRjaCByaW5nIGJ1ZmZlci4KKyAqLwor c3RhdGljIGlubGluZSB2b2lkCitpbmRleF9zY2FuX2JhdGNoX2FwcGVuZChJbmRleFNjYW5EZXNj IHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKQoreworCUJhdGNoUmluZ0J1ZmZlciAqcmluZ2J1 ZiA9ICZzY2FuLT5iYXRjaHJpbmdidWY7CisJdWludDgJCW5leHRCYXRjaCA9IHJpbmdidWYtPm5l eHRCYXRjaDsKKworCUFzc2VydCghaW5kZXhfc2Nhbl9iYXRjaF9mdWxsKHNjYW4pKTsKKworCXNj YW4tPmJhdGNoYnVmW25leHRCYXRjaCAmIChJTkRFWF9TQ0FOX01BWF9CQVRDSEVTIC0gMSldID0g YmF0Y2g7CisJcmluZ2J1Zi0+bmV4dEJhdGNoKys7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAqIEJhdGNoIG1lbW9yeSBsYXlvdXQgYWNjZXNzb3JzCisgKgorICogRWFjaCBiYXRjaCBh bGxvY2F0aW9uIGhhcyB0aGUgZm9sbG93aW5nIG1lbW9yeSBsYXlvdXQ6CisgKgorICogICBbdGFi bGUgQU0gb3BhcXVlIGFyZWFdICAgIDwtIGFsbG9jYXRpb24gYmFzZSwgYXQgLShiYXRjaF9iYXNl X29mZnNldCkKKyAqICAgW3RhYmxlIEFNIHBlci1pdGVtIGFyZWFdICA8LSBzdXBwbGVtZW50YWwg ZmxleGlibGUgYXJyYXkgcGVyLWl0ZW0gZGF0YQorICogICBbaW5kZXggQU0gc3RhdGljIG9wYXF1 ZV0gIDwtIGF0IC0oYmF0Y2hfaW5kZXhfb3BhcXVlX3N0YXRpYykKKyAqICAgW0luZGV4U2NhbkJh dGNoRGF0YV0gICAgICA8LSBiYXRjaCBwb2ludGVyLCByZXR1cm5lZCBieSBhbWdldGJhdGNoCisg KiAgIFtpdGVtc1ttYXhpdGVtc2JhdGNoXV0KKyAqICAgW2N1cnJUdXBsZXMgd29ya3NwYWNlXSAg ICA8LSBpbmRleCBBTSBzdG9yZXMgaW5kZXggdHVwbGVzIGhlcmUgZm9yCisgKiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW5kZXgtb25seSBzY2FucyAoYmF0Y2hfdHVwbGVzX3dvcmtz cGFjZSkKKyAqCisgKiBiYXRjaF9iYXNlX29mZnNldCBjb21iaW5lcyB0aGUgdGFibGUgQU0gb3Bh cXVlIGFyZWEgKGl0cyBmaXhlZC1zaXplIGhlYWRlcgorICogcGx1cyBpdHMgcGVyLWl0ZW0gYXJl YSksIGFuZCB0aGUgc3RhdGljIGluZGV4IEFNIG9wYXF1ZSBhcmVhIGludG8gYSBzaW5nbGUKKyAq IG9mZnNldCBmcm9tIHRoZSBiYXRjaCBwb2ludGVyIHRvIHRoZSB0cnVlIGFsbG9jYXRpb24gYmFz ZS4gIFRoZQorICogaW5kZXhiYXRjaC5jIHV0aWxpdGllcyBwZnJlZSBhIGJhdGNoIGJ5IHBhc3Np bmcgcGZyZWUgYSBwb2ludGVyIHJldHVybmVkIGJ5CisgKiBpbmRleF9zY2FuX2JhdGNoX2Jhc2Uu ICBXZSByZWx5IG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgYmF0Y2hlcyBoYXZlIGEgZml4ZWQKKyAq IGxheW91dCBmb3IgdGhlIGR1cmF0aW9uIG9mIGFuIGluZGV4IHNjYW4gKGJhdGNoZXMgYXJlIGNh Y2hlZCBmb3IgcmV1c2UgdG8KKyAqIGF2b2lkIHBhbGxvYyBjaHVybikuCisgKgorICogVGhlIHRh YmxlIEFNIGFjY2Vzc2VzIGl0cyBvcGFxdWUgYXJlYSB1c2luZyB0aGUgaW5kZXhfc2Nhbl9iYXRj aF90YWJsZV9hcmVhCisgKiBzaGltIGFjY2Vzc29yLiAgVGhlIGFyZWEgaXMgYSBzaW5nbGUgY29u dGlndW91cyBibG9jazogYSBmaXhlZC1zaXplIGhlYWRlcgorICogKHNpemVkIGJhdGNoX29wYXF1 ZV9zaXplLCBwb3NzaWJseSB6ZXJvKSBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSBhIHBlci1pdGVt CisgKiBhcmVhIChzaXplZCBtYXhpdGVtc2JhdGNoICogYmF0Y2hfcGVyX2l0ZW1fc2l6ZSwgd2hp Y2ggY2FuIGFsc28gYmUgemVybykuCisgKiBUaGlzIGxldHMgdGhlIHRhYmxlIEFNIGRlc2NyaWJl IHRoZSB3aG9sZSBhcmVhIHdpdGggYSBzaW5nbGUgQyBzdHJ1Y3QgdGhhdAorICogaGFzIGEgZmxl eGlibGUgYXJyYXkgbWVtYmVyIGZvciBpdHMgcGVyLWl0ZW0gZGF0YS4gIFRoZSB0YWJsZSBBTSdz CisgKiB0YWJsZV9pbmRleF9zY2FuX2JlZ2luIGNhbGxiYWNrIGlzIHBlcm1pdHRlZCB0byB2YXJ5 IHRoZSBsYXlvdXQgb2YgaXRzCisgKiBvcGFxdWUgYXJlYSBhcyBpdCBzZWVzIGZpdCwgb2Z0ZW4g YmFzZWQgb24gdGhlIHJlcXVpcmVtZW50cyBvZiBvbmUKKyAqIHBhcnRpY3VsYXIgc2NhbiAoZS5n LiwgaGVhcGFtIGluZGV4LW9ubHkgc2NhbnMgdXNlIGl0IHRvIGNhY2hlIHZpc2liaWxpdHkKKyAq IGluZm9ybWF0aW9uLCB3aGVyZWFzIGhlYXBhbSByZXF1aXJlcyBubyBwcml2YXRlIGFyZWEgZHVy aW5nIHBsYWluIHNjYW5zKS4KKyAqIEJpdG1hcCBzY2FucyBpbnZvbHZpbmcgYW4gYW1nZXRiaXRt YXAgcm91dGluZSB0aGF0IGZpbmRzIGl0IGNvbnZlbmllbnQgdG8KKyAqIHJldXNlIGJhdGNoIGlu ZnJhc3RydWN0dXJlIGludGVybmFsbHkgbmV2ZXIgZ2V0IGEgdGFibGUgQU0gb3BhcXVlIGFyZWEu CisgKgorICogQW4gaW5kZXggQU0gZ2V0cyBhIG1hbmRhdG9yeSBzdGF0aWMgYXJlYSAoYmF0Y2hf aW5kZXhfb3BhcXVlX3N0YXRpYyksIHdoaWNoCisgKiBoYXMgYSBzaXplIGtub3duIGF0IGNvbXBp bGUgdGltZSAtLSBNQVhBTElHTihzaXplb2YodGhlIEFNJ3Mgc3RydWN0KSkgLS0KKyAqIGFuZCBp cyBhY2Nlc3NlZCB2aWEgaW5kZXhfc2Nhbl9iYXRjaF9pbmRleF9vcGFxdWVfc3RhdGljIGF0IHRo YXQgZml4ZWQKKyAqIG9mZnNldC4gIFRoaXMgaXMgbW9yZSBlZmZpY2llbnQgYnV0IGxlc3MgZmxl eGlibGUgdGhhbiB0aGUgdGFibGUgQU0gc2NoZW1lOgorICogZXZlcnkgaW5kZXggQU0gdXNlcyB0 aGUgc2FtZSBnZW5lcmljIGZpeGVkLXNpemUgaGVhZGVyLgorICogLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorICovCisKKy8qCisgKiBSZXR1cm4gdGhlIHRydWUgYWxsb2NhdGlvbiBiYXNlIG9mIGEgYmF0 Y2ggKHVzZWQgdG8gcGZyZWUgYmF0Y2hlcykKKyAqLworc3RhdGljIGlubGluZSB2b2lkICoKK2lu ZGV4X3NjYW5fYmF0Y2hfYmFzZShJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJh dGNoKQoreworCUFzc2VydChzY2FuLT5iYXRjaF9iYXNlX29mZnNldCA+IDApOworCisJcmV0dXJu IChjaGFyICopIGJhdGNoIC0gc2Nhbi0+YmF0Y2hfYmFzZV9vZmZzZXQ7Cit9CisKKy8qCisgKiBS ZXR1cm4gYSBwb2ludGVyIHRvIHRoZSB0YWJsZSBBTSBvcGFxdWUgYXJlYS4KKyAqCisgKiBUaGlz IGFyZWEgc3RhcnRzIHdpdGggdGhlIHRhYmxlIEFNJ3MgZml4ZWQtc2l6ZSBoZWFkZXIgKHNpemVk CisgKiBiYXRjaF9vcGFxdWVfc2l6ZSwgd2hpY2ggbWF5IGJlIHplcm8pIGFuZCBpcyBpbW1lZGlh dGVseSBmb2xsb3dlZCBieSBpdHMKKyAqIHBlci1pdGVtIGFyZWEuCisgKi8KK3N0YXRpYyBpbmxp bmUgdm9pZCAqCitpbmRleF9zY2FuX2JhdGNoX3RhYmxlX2FyZWEoSW5kZXhTY2FuRGVzYyBzY2Fu LCBJbmRleFNjYW5CYXRjaCBiYXRjaCkKK3sKKwkvKgorCSAqIFRoZSB0YWJsZSBBTSBvcGFxdWUg YXJlYSBpcyBhbHdheXMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgYmF0Y2gncworCSAqIGFsbG9j YXRlZCBzcGFjZQorCSAqLworCXJldHVybiBpbmRleF9zY2FuX2JhdGNoX2Jhc2Uoc2NhbiwgYmF0 Y2gpOworfQorCisvKgorICogUmV0dXJuIGEgdHlwZWQgcG9pbnRlciB0byB0aGUgaW5kZXggQU0n cyBzdGF0aWMgKGNvbXBpbGUtdGltZSBzaXplZCkgb3BhcXVlCisgKiBhcmVhLCB3aGljaCBzaXRz IGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgYmF0Y2ggcG9pbnRlci4gIEluZGV4IEFNcyB1c2UgdGhl aXIKKyAqIG93biB3cmFwcGVyIGZ1bmN0aW9uLXN0eWxlIG1hY3JvLCBidWlsdCBvbiB0b3Agb2Yg dGhpcy4KKyAqLworI2RlZmluZSBpbmRleF9zY2FuX2JhdGNoX2luZGV4X29wYXF1ZV9zdGF0aWMo c2NhbiwgYmF0Y2gsIHR5cGUpIFwKKwkoQXNzZXJ0TWFjcm8oKHNjYW4pLT5iYXRjaF9pbmRleF9v cGFxdWVfc3RhdGljID09IE1BWEFMSUdOKHNpemVvZih0eXBlKSkpLCBcCisJICgodHlwZSAqKSAo KGNoYXIgKikgKGJhdGNoKSAtIE1BWEFMSUdOKHNpemVvZih0eXBlKSkpKSkKKworLyogLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICogRWxlbWVudGFyeSBiYXRjaCBwb3NpdGlvbiBvcGVyYXRpb25zCisg KiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworLyoKKyAqIEFkdmFuY2UgcG9zaXRpb24gdG8g aXRzIG5leHQgaXRlbSBpbiB0aGUgYmF0Y2guCisgKgorICogQWR2YW5jZSB0byB0aGUgbmV4dCBp dGVtIHdpdGhpbiB0aGUgcHJvdmlkZWQgYmF0Y2ggKG9yIHRvIHRoZSBwcmV2aW91cyBpdGVtLAor ICogd2hlbiBzY2FubmluZyBiYWNrd2FyZHMpLgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUg cG9zaXRpb24gY291bGQgYmUgYWR2YW5jZWQuICBSZXR1cm5zIGZhbHNlIHdoZW4gdGhlcmUKKyAq IGFyZSBubyBtb3JlIGl0ZW1zIGZyb20gdGhlIGJhdGNoIHJlbWFpbmluZyBpbiB0aGUgZ2l2ZW4g c2NhbiBkaXJlY3Rpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbAoraW5kZXhfc2Nhbl9wb3Nf YWR2YW5jZShTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQkJICAgSW5kZXhTY2FuQmF0Y2gg YmF0Y2gsIEJhdGNoUmluZ0l0ZW1Qb3MgKnBvcykKK3sKKwkvKgorCSAqIE9uIGVudHJ5LCBwb3Mt Pml0ZW0gbXVzdCBiZSB2YWxpZCwgYW5kIG11c3QgYWN0dWFsbHkgcG9pbnQgdG8gYSB2YWxpZAor CSAqIGl0ZW0gZm9yIHRoaXMgYmF0Y2guICBUaGVyZSBpcyBleGFjdGx5IG9uZSBleGNlcHRpb246 IHBvcy0+aXRlbSBtYXkKKwkgKiBpbml0aWFsbHkgc2l0IG9uZSBzdGVwIG91dHNpZGUgdGhlIGJh dGNoIHdoZW4gY2FsbGVyIGp1c3QgZmxpcHBlZCBpdHMKKwkgKiBzY2FuIGRpcmVjdGlvbi4gIHBv cy0+aXRlbSB3aWxsIHBvaW50IHRvIGEgdmFsaWQgaXRlbSBvbmNlIHdlIHJldHVybgorCSAqICh3 ZSBfbXVzdF8gcmV0dXJuIHRydWUgd2hlbiBwYXNzZWQgYSBqdXN0LXN0ZXBwZWQtb2ZmLWJhdGNo IHBvc2l0aW9uKS4KKwkgKgorCSAqIFRoaXMgcHJlY29uZGl0aW9uIGVuc3VyZXMgdGhhdCBjYWxs ZXJzIGFjdHVhbGx5IHN0ZXAgdG8gdGhlIG5leHQgYmF0Y2gKKwkgKiB3aGVuIGluZGljYXRlZCAo b3IgZmxpcCB0aGUgc2NhbiBkaXJlY3Rpb24gaW5zdGVhZCwgd2hpY2ggY2FuIGhhcHBlbgorCSAq IHJpZ2h0IGFmdGVyIGEgY3Vyc29yIHRyaWVzIHRvIHN0ZXAgb2ZmIHRoZSBmaW5hbCBiYXRjaCBp biB0aGUgZ2l2ZW4KKwkgKiBzY2FuIGRpcmVjdGlvbikuICBUYWJsZSBBTXMgbXVzdCBhdm9pZCBh bWJpZ3VvdXMgcG9zaXRpb25hbCBzdGF0ZXMuCisJICovCisJQXNzZXJ0KHBvcy0+dmFsaWQpOwor CisJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyZWN0aW9uKSkKKwl7CisJCS8qIFByZWNv bmRpdGlvbjogdmFsaWQtb3ItanVzdC1iZWZvcmUtc3RhcnQgaXRlbSBwb3NpdGlvbiAqLworCQlB c3NlcnQocG9zLT5pdGVtID49IGJhdGNoLT5maXJzdEl0ZW0gLSAxKTsKKwkJQXNzZXJ0KHBvcy0+ aXRlbSA8PSBiYXRjaC0+bGFzdEl0ZW0pOworCisJCWlmICgrK3Bvcy0+aXRlbSA+IGJhdGNoLT5s YXN0SXRlbSkKKwkJCXJldHVybiBmYWxzZTsKKwl9CisJZWxzZQkJCQkJCS8qIFNjYW5EaXJlY3Rp b25Jc0JhY2t3YXJkICovCisJeworCQkvKiBQcmVjb25kaXRpb246IHZhbGlkLW9yLWp1c3QtcGFz dC1lbmQgaXRlbSBwb3NpdGlvbiAqLworCQlBc3NlcnQocG9zLT5pdGVtID49IGJhdGNoLT5maXJz dEl0ZW0pOworCQlBc3NlcnQocG9zLT5pdGVtIDw9IGJhdGNoLT5sYXN0SXRlbSArIDEpOworCisJ CWlmICgtLXBvcy0+aXRlbSA8IGJhdGNoLT5maXJzdEl0ZW0pCisJCQlyZXR1cm4gZmFsc2U7CisJ fQorCisJLyogQWR2YW5jZWQgd2l0aGluIGJhdGNoICovCisJcmV0dXJuIHRydWU7Cit9CisKKy8q CisgKiBQb3NpdGlvbiBwb3MgYXQgdGhlIHN0YXJ0IG9mIG5ld0JhdGNoIChpbiB0aGUgZ2l2ZW4g c2NhbiBkaXJlY3Rpb24pLgorICoKKyAqIFdoZW4gd2UncmUgY2FsbGVkLCBwb3Mgc2hvdWxkIHBv aW50IHRvIGEgYmF0Y2ggdGhhdCBjYWxsZXIganVzdCBmaW5pc2hlZAorICogY29uc3VtaW5nIGZy b20gKG9yIGJlIGludmFsaWQsIHdoZW4gbm8gYmF0Y2ggaGFzIGJlZW4gbG9hZGVkIGZvciBjYWxs ZXIncworICogc2NhbiB5ZXQpLiAgV2hlbiB3ZSByZXR1cm4sIHBvcyB3aWxsIHBvaW50IHRvIG5l d0JhdGNoLCB0aGUgbmV4dCBiYXRjaCBmcm9tCisgKiB0aGUgcmluZyBidWZmZXIuICBXZSdsbCBo YXZlIGFsc28gc2V0IHBvcydzIGl0ZW0gb2Zmc2V0IHRvIG5ld0JhdGNoJ3MKKyAqIGluaXRpYWwg aXRlbSBpbiB0aGUgZ2l2ZW4gZGlyZWN0aW9uICh0aGUgZmlyc3QgaXRlbSB3aGVuIHNjYW5uaW5n IGZvcndhcmRzLAorICogdGhlIGxhc3QgaXRlbSB3aGVuIHNjYW5uaW5nIGJhY2t3YXJkcykuCisg KgorICogbmV3QmF0Y2ggZG9lc24ndCBoYXZlIHRvIGJlIChhbmQgb2Z0ZW4gaXNuJ3QpIHRoZSBt b3N0IHJlY2VudGx5IGFwcGVuZGVkCisgKiBiYXRjaCBpbiB0aGUgc2NhbidzIHJpbmcgYnVmZmVy LiAgSXQgaXMgbWVyZWx5IHRoZSBuZXh0IGJhdGNoIGluIGxpbmUgdG8gYmUKKyAqIGNvbnN1bWVk IGZyb20gdGhlIHBvaW50IG9mIHZpZXcgb2Ygb3VyIGNhbGxlci4KKyAqLworc3RhdGljIGlubGlu ZSB2b2lkCitpbmRleF9zY2FuX3Bvc19zdGFydGJhdGNoKFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9u LAorCQkJCQkJICBJbmRleFNjYW5CYXRjaCBuZXdCYXRjaCwgQmF0Y2hSaW5nSXRlbVBvcyAqcG9z KQoreworCUFzc2VydChuZXdCYXRjaC0+ZGlyID09IGRpcmVjdGlvbik7CisJQXNzZXJ0KG5ld0Jh dGNoLT5maXJzdEl0ZW0gPD0gbmV3QmF0Y2gtPmxhc3RJdGVtKTsKKworCS8qIEluY3JlbWVudCBi YXRjaCAobWlnaHQgd3JhcCksIG9yIGluaXRpYWxpemUgaXQgdG8gemVybyAqLworCWlmIChwb3Mt PnZhbGlkKQorCQlwb3MtPmJhdGNoKys7CisJZWxzZQorCQlwb3MtPmJhdGNoID0gMDsKKworCXBv cy0+dmFsaWQgPSB0cnVlOworCisJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyZWN0aW9u KSkKKwkJcG9zLT5pdGVtID0gbmV3QmF0Y2gtPmZpcnN0SXRlbTsKKwllbHNlCisJCXBvcy0+aXRl bSA9IG5ld0JhdGNoLT5sYXN0SXRlbTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICog VXRpbGl0aWVzIGNhbGxlZCBieSB0YWJsZSBBTXMKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAq LworCisvKgorICogU2V0cyB1cCB0aGUgYmF0Y2ggcmluZyBidWZmZXIgc3RydWN0dXJlIGZvciB1 c2UgYnkgYW4gaW5kZXggc2Nhbi4KKyAqCisgKiBDYWxsZWQgZnJvbSB0YWJsZSBBTSdzIGluZGV4 X3NjYW5fYmVnaW4gY2FsbGJhY2sgZHVyaW5nIGFtZ2V0YmF0Y2ggc2NhbnMuCisgKi8KK3N0YXRp YyBpbmxpbmUgdm9pZAordGFibGVhbV91dGlsX2JhdGNoc2Nhbl9pbml0KEluZGV4U2NhbkRlc2Mg c2NhbikKK3sKKwlBc3NlcnQoc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtZ2V0YmF0 Y2ggIT0gTlVMTCk7CisKKwlzY2FuLT5iYXRjaHJpbmdidWYuc2NhblBvcy52YWxpZCA9IGZhbHNl OworCXNjYW4tPmJhdGNocmluZ2J1Zi5tYXJrUG9zLnZhbGlkID0gZmFsc2U7CisKKwlzY2FuLT5i YXRjaHJpbmdidWYubWFya0JhdGNoID0gTlVMTDsKKwlzY2FuLT5iYXRjaHJpbmdidWYuaGVhZEJh dGNoID0gMDsKKwlzY2FuLT5iYXRjaHJpbmdidWYubmV4dEJhdGNoID0gMDsKKworCXNjYW4tPnVz ZWJhdGNocmluZyA9IHRydWU7Cit9CisKK2V4dGVybiB2b2lkIHRhYmxlYW1fdXRpbF9iYXRjaHNj YW5fcmVzZXQoSW5kZXhTY2FuRGVzYyBzY2FuLCBib29sIGVuZHNjYW4pOworZXh0ZXJuIHZvaWQg dGFibGVhbV91dGlsX2JhdGNoc2Nhbl9lbmQoSW5kZXhTY2FuRGVzYyBzY2FuKTsKK2V4dGVybiB2 b2lkIHRhYmxlYW1fdXRpbF9iYXRjaHNjYW5fbWFya19wb3MoSW5kZXhTY2FuRGVzYyBzY2FuKTsK K2V4dGVybiB2b2lkIHRhYmxlYW1fdXRpbF9iYXRjaHNjYW5fcmVzdG9yZV9wb3MoSW5kZXhTY2Fu RGVzYyBzY2FuKTsKK2V4dGVybiB2b2lkIHRhYmxlYW1fdXRpbF9zY2FuYmF0Y2hfZGlyY2hhbmdl KEluZGV4U2NhbkRlc2Mgc2Nhbik7CitleHRlcm4gdm9pZCB0YWJsZWFtX3V0aWxfc2NhbnBvc19r aWxsaXRlbShJbmRleFNjYW5EZXNjIHNjYW4pOworZXh0ZXJuIHZvaWQgdGFibGVhbV91dGlsX3Jl bGVhc2VfYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCk7Citl eHRlcm4gdm9pZCB0YWJsZWFtX3V0aWxfdW5ndWFyZF9iYXRjaChJbmRleFNjYW5EZXNjIHNjYW4s IEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKKworLyoKKyAqIFRyeSB0byBhZHZhbmNlIHRoZSBzY2Fu J3Mgc2NhblBvcyB0byB0aGUgbmV4dCBtYXRjaGluZyBpdGVtIGZyb20gdGhlCisgKiBzY2FuJ3Mg ZXhpc3Rpbmcgc2NhbkJhdGNoLCBtb3ZpbmcgaW4gdGhlIGdpdmVuIHNjYW4gZGlyZWN0aW9uLgor ICoKKyAqIFNldHMgKnNjYW5CYXRjaCB0byB0aGUgcmluZyBidWZmZXIncyBleGlzdGluZyBzY2Fu QmF0Y2gsIG9yIHRvIE5VTEwgd2hlbiBubworICogYmF0Y2ggaGFzIGJlZW4gbG9hZGVkIHlldCAo dGhlIGZpcnN0IGNhbGwgaGVyZSBmb3IgdGhlIGVudGlyZSBzY2FuKS4KKyAqCisgKiBSZXR1cm5z IHRydWUgd2hlbiBzY2FuUG9zIHdhcyBhZHZhbmNlZCwgaW4gd2hpY2ggY2FzZSB0aGUgc2NhbiBz aG91bGQKKyAqIHByb2Nlc3MgdGhlIGl0ZW0gdGhhdCBzY2FuUG9zIG5vdyBwb2ludHMgdG8uICBS ZXR1cm5zIGZhbHNlIHdoZW4gdGhlcmUgYXJlCisgKiBubyBtb3JlIG1hdGNoaW5nIGl0ZW1zIHJl bWFpbmluZyBpbiBzY2FuQmF0Y2ggKG9yIHdoZW4gbm8gc2NhbkJhdGNoIGhhcworICogYmVlbiBs b2FkZWQgeWV0KS4gIENhbGxlciByZXNwb25kcyB0byBhIGZhbHNlIHJldHVybiBieSBwYXNzaW5n ICpzY2FuQmF0Y2gKKyAqIHRvIHRhYmxlYW1fdXRpbF9mZXRjaF9uZXh0X2JhdGNoIGFzIGl0cyBw cmlvckJhdGNoIGFyZ3VtZW50LCBhZHZhbmNpbmcgdGhlCisgKiBzY2FuIHRvIGl0cyBuZXh0IGJh dGNoLgorICovCitzdGF0aWMgcGdfYXR0cmlidXRlX2Fsd2F5c19pbmxpbmUgYm9vbAordGFibGVh bV91dGlsX3NjYW5wb3NfYWR2YW5jZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24g ZGlyZWN0aW9uLAorCQkJCQkJCSBJbmRleFNjYW5CYXRjaCAqc2NhbkJhdGNoLCBCYXRjaFJpbmdJ dGVtUG9zICpzY2FuUG9zKQoreworCUJhdGNoUmluZ0J1ZmZlciAqYmF0Y2hyaW5nYnVmID0gJnNj YW4tPmJhdGNocmluZ2J1ZjsKKworCWlmICghc2NhblBvcy0+dmFsaWQpCisJeworCQkvKiBGaXJz dCBjYWxsIGhlcmUgZm9yIHRoZSBlbnRpcmUgc2NhbiAqLworCQlBc3NlcnQoaW5kZXhfc2Nhbl9i YXRjaF9jb3VudChzY2FuKSA9PSAwKTsKKworCQkqc2NhbkJhdGNoID0gTlVMTDsKKwkJcmV0dXJu IGZhbHNlOworCX0KKworCS8qCisJICogc2NhblBvcyBpcyB2YWxpZCwgc28gc2NhbkJhdGNoIG11 c3QgYWxyZWFkeSBiZSBsb2FkZWQgaW4gYmF0Y2ggcmluZworCSAqIGJ1ZmZlci4gIFdlIHJlbHkg b24gdGhhdCBoZXJlLgorCSAqLworCXBnX2Fzc3VtZShiYXRjaHJpbmdidWYtPmhlYWRCYXRjaCA9 PSBzY2FuUG9zLT5iYXRjaCk7CisKKwkqc2NhbkJhdGNoID0gaW5kZXhfc2Nhbl9iYXRjaChzY2Fu LCBzY2FuUG9zLT5iYXRjaCk7CisKKwlyZXR1cm4gaW5kZXhfc2Nhbl9wb3NfYWR2YW5jZShkaXJl Y3Rpb24sICpzY2FuQmF0Y2gsIHNjYW5Qb3MpOworfQorCisvKgorICogRmV0Y2ggdGhlIG5leHQg YmF0Y2ggb2YgbWF0Y2hpbmcgaXRlbXMgZm9yIHRoZSBzY2FuIChvciB0aGUgZmlyc3QpLgorICoK KyAqIENhbGxlZCB3aGVuIGNhbGxlcidzIGN1cnJlbnQgYmF0Y2ggKHBhc3NlZCB0byB1cyBhcyBw cmlvckJhdGNoKSBoYXMgbm8gbW9yZQorICogbWF0Y2hpbmcgaXRlbXMgaW4gdGhlIGdpdmVuIHNj YW4gZGlyZWN0aW9uLiAgQ2FsbGVyIHBhc3NlcyBhIE5VTEwKKyAqIHByaW9yQmF0Y2ggb24gdGhl IGZpcnN0IGNhbGwgaGVyZSBmb3IgdGhlIHNjYW4uCisgKgorICogUmV0dXJucyB0aGUgbmV4dCBi YXRjaCB0byBiZSBwcm9jZXNzZWQgYnkgY2FsbGVyIGluIHRoZSBnaXZlbiBzY2FuCisgKiBkaXJl Y3Rpb24sIG9yIE5VTEwgd2hlbiB0aGVyZSBhcmUgbm8gbW9yZSBtYXRjaGVzIGluIHRoYXQgZGly ZWN0aW9uLgorICoKKyAqIE5vdGU6IGEgTlVMTCByZXR1cm4gZ2VuZXJhbGx5IGxlYXZlcyB0aGUg c2NhbiB3aXRoIGEgdmFsaWQgc2NhblBvcy4gIFRoZQorICogc2NhbiBtaWdodCBzdGlsbCBiYWNr IHVwIGluIHRoZSBvdGhlciBkaXJlY3Rpb24sIG9yIHJlc3RvcmUgYSBzYXZlZCBtYXJrCisgKiAo dGFibGVhbV91dGlsX2JhdGNoc2Nhbl9yZXN0b3JlX3BvcyByZXF1aXJlcyB0aGUgc2NhbiB0byBo YXZlIGJvdGggYSB2YWxpZAorICogc2NhblBvcyBhbmQgdmFsaWQgbWFya1BvcykuCisgKgorICog VGhpcyBpcyB3aGVyZSBiYXRjaGVzIGFyZSBhcHBlbmRlZCB0byB0aGUgc2NhbidzIHJpbmcgYnVm ZmVyLiAgV2UgZG9uJ3QKKyAqIGZyZWUgYW55IGJhdGNoZXMgaGVyZSwgdGhvdWdoOyB0aGF0IGlz IGEgc2VwYXJhdGUgc3RlcCAoY2FsbGVycyBzaG91bGRuJ3QKKyAqIGZyZWUgYSBiYXRjaCB1bnRp bCB0aGV5J3JlIGRlZmluaXRlbHkgZG9uZSB3aXRoIGl0LCB3aGljaCBpcyBjb21wbGV0ZWx5Cisg KiBpbmRlcGVuZGVudCBvZiBuZWVkaW5nIHRoZSBuZXh0IGJhdGNoIGluIGxpbmUpLiAgVGhlIGNh bGxlciBpcyByZXNwb25zaWJsZQorICogZm9yIGFkdmFuY2luZyB0aGVpciBvd24gcG9zaXRpb24u CisgKi8KK3N0YXRpYyBwZ19hdHRyaWJ1dGVfYWx3YXlzX2lubGluZSBJbmRleFNjYW5CYXRjaAor dGFibGVhbV91dGlsX2ZldGNoX25leHRfYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGly ZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQkJCQkgIEluZGV4U2NhbkJhdGNoIHByaW9yQmF0Y2gsIEJh dGNoUmluZ0l0ZW1Qb3MgKnBvcykKK3sKKwlJbmRleFNjYW5CYXRjaCBiYXRjaCA9IE5VTEw7CisJ QmF0Y2hSaW5nQnVmZmVyICpiYXRjaHJpbmdidWYgUEdfVVNFRF9GT1JfQVNTRVJUU19PTkxZID0g JnNjYW4tPmJhdGNocmluZ2J1ZjsKKworCUFzc2VydChzY2FuLT51c2ViYXRjaHJpbmcpOworCisJ aWYgKCFwcmlvckJhdGNoKQorCXsKKwkJLyogRmlyc3QgY2FsbCBmb3IgdGhlIHNjYW4gKi8KKwkJ QXNzZXJ0KHBvcyA9PSAmYmF0Y2hyaW5nYnVmLT5zY2FuUG9zKTsKKwl9CisJZWxzZSBpZiAodW5s aWtlbHkocHJpb3JCYXRjaC0+ZGlyICE9IGRpcmVjdGlvbikpCisJeworCQkvKgorCQkgKiBXZSBk ZXRlY3RlZCBhIGNoYW5nZSBpbiBzY2FuIGRpcmVjdGlvbiBhY3Jvc3MgYmF0Y2hlcy4gIFByZXBh cmUKKwkJICogc2NhbidzIGJhdGNocmluZ2J1ZiBzdGF0ZSBmb3IgdXMgdG8gZ2V0IHRoZSBuZXh0 IGJhdGNoIGZvciB0aGUKKwkJICogb3Bwb3NpdGUgc2NhbiBkaXJlY3Rpb24gdG8gdGhlIG9uZSB1 c2VkIHdoZW4gcHJpb3JCYXRjaCB3YXMKKwkJICogcmV0dXJuZWQgYnkgYW1nZXRiYXRjaC4KKwkJ ICovCisJCXRhYmxlYW1fdXRpbF9zY2FuYmF0Y2hfZGlyY2hhbmdlKHNjYW4pOworCisJCS8qIHBy aW9yQmF0Y2ggaXMgbm93IGJhdGNocmluZ2J1ZidzIG9ubHkgYmF0Y2ggKi8KKwkJQXNzZXJ0KHBv cy0+YmF0Y2ggPT0gYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2gpOworCQlBc3NlcnQoaW5kZXhfc2Nh bl9iYXRjaF9jb3VudChzY2FuKSA9PSAxKTsKKwl9CisJZWxzZSBpZiAoaW5kZXhfc2Nhbl9iYXRj aF9sb2FkZWQoc2NhbiwgcG9zLT5iYXRjaCArIDEpKQorCXsKKwkJLyogTmV4dCBiYXRjaCBhbHJl YWR5IGxvYWRlZCBmb3IgdXMgKi8KKwkJYmF0Y2ggPSBpbmRleF9zY2FuX2JhdGNoKHNjYW4sIHBv cy0+YmF0Y2ggKyAxKTsKKworCQlBc3NlcnQocHJpb3JCYXRjaC0+ZGlyID09IGRpcmVjdGlvbik7 CisJCUFzc2VydChiYXRjaC0+ZGlyID09IGRpcmVjdGlvbik7CisJCUFzc2VydChiYXRjaC0+Zmly c3RJdGVtIDw9IGJhdGNoLT5sYXN0SXRlbSk7CisJCXJldHVybiBiYXRjaDsKKwl9CisKKwkvKgor CSAqIEFzc2VydCBwcmVjb25kaXRpb25zIGZvciBjYWxsaW5nIGFtZ2V0YmF0Y2guCisJICoKKwkg KiBwcmlvckJhdGNoIGhhZCBiZXR0ZXIgYmUgZm9yIHRoZSBsYXN0IHZhbGlkIGJhdGNoIGN1cnJl bnRseSBpbiB0aGUgcmluZworCSAqIGJ1ZmZlciAoYmF0Y2hlcyBtdXN0IHN0YXkgaW4gc2NhbiBv cmRlcikuICBJZiBpdCBpc24ndCB0aGVuIHdlIHNob3VsZAorCSAqIGhhdmUgYWxyZWFkeSByZXR1 cm5lZCBzb21lIGV4aXN0aW5nIGxvYWRlZCBiYXRjaCBlYXJsaWVyLgorCSAqLworCUFzc2VydCgh aW5kZXhfc2Nhbl9iYXRjaF9mdWxsKHNjYW4pKTsKKwlBc3NlcnQoIXByaW9yQmF0Y2ggfHwKKwkJ ICAgKGluZGV4X3NjYW5fYmF0Y2hfY291bnQoc2NhbikgPiAwICYmIHByaW9yQmF0Y2gtPmRpciA9 PSBkaXJlY3Rpb24gJiYKKwkJCWluZGV4X3NjYW5fYmF0Y2goc2NhbiwgYmF0Y2hyaW5nYnVmLT5u ZXh0QmF0Y2ggLSAxKSA9PSBwcmlvckJhdGNoKSk7CisKKwkvKgorCSAqIEJlZm9yZSB3ZSBjYWxs IGFtZ2V0YmF0Y2ggYWdhaW4sIGNoZWNrIGlmIHByaW9yQmF0Y2ggaXMgYWxyZWFkeSBrbm93bgor CSAqIHRvIGJlIHRoZSBsYXN0IGJhdGNoIHdpdGggbWF0Y2hpbmcgaXRlbXMgaW4gdGhpcyBzY2Fu IGRpcmVjdGlvbgorCSAqLworCWlmIChwcmlvckJhdGNoICYmCisJCShTY2FuRGlyZWN0aW9uSXNG b3J3YXJkKGRpcmVjdGlvbikgPworCQkgcHJpb3JCYXRjaC0+a25vd25FbmRGb3J3YXJkIDoKKwkJ IHByaW9yQmF0Y2gtPmtub3duRW5kQmFja3dhcmQpKQorCQlyZXR1cm4gTlVMTDsKKworCWJhdGNo ID0gc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtZ2V0YmF0Y2goc2NhbiwgcHJpb3JC YXRjaCwKKwkJCQkJCQkJCQkJCQkgIGRpcmVjdGlvbik7CisJaWYgKGJhdGNoKQorCXsKKwkJLyog V2UgZ290IHRoZSBiYXRjaCBmcm9tIHRoZSBpbmRleCBBTSAqLworCQlBc3NlcnQoYmF0Y2gtPmRp ciA9PSBkaXJlY3Rpb24pOworCQlBc3NlcnQoYmF0Y2gtPmZpcnN0SXRlbSA8PSBiYXRjaC0+bGFz dEl0ZW0pOworCisJCS8qIEFwcGVuZCBiYXRjaCB0byB0aGUgZW5kIG9mIHJpbmcgYnVmZmVyL3dy aXRlIGl0IHRvIGJ1ZmZlciBpbmRleCAqLworCQlpbmRleF9zY2FuX2JhdGNoX2FwcGVuZChzY2Fu LCBiYXRjaCk7CisKKwkJLyoKKwkJICogVGhlb3JldGljYWxseSB3ZSBzaG91bGQgc2V0IGtub3du RW5kRm9yd2FyZC9rbm93bkVuZEJhY2t3YXJkIHRvCisJCSAqIGZhbHNlICh3aGljaGV2ZXIgaXMg dXNlZCB3aGVuIG1vdmluZyBpbiB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uKQorCQkgKiB3aGVuIHRo aXMgaXMgdGhlIHNjYW4ncyBmaXJzdCByZXR1cm5lZCBiYXRjaC4gIFdlIGRvbid0IGJvdGhlcgor CQkgKiBiZWNhdXNlIHRoZSBpbmRleCBBTSBzaG91bGQgYWx3YXlzIHJlY29yZCB0aGF0IGZhY3Qg aW4gaXRzIG93bgorCQkgKiBvcGFxdWUgYXJlYS4gIChUaGVzZSBmaWVsZHMgb25seSBleGlzdCBi ZWNhdXNlIHdlIGRvbid0IHdhbnQgaW5kZXgKKwkJICogQU1zIHNldHRpbmcgX2FueV8gZmllbGQg ZnJvbSBhbnkgcHJpb3JiYXRjaCB0aGF0IHdlIHBhc3MgdG8gdGhlbS4KKwkJICogQmVzaWRlcywg aXQgd291bGQgYmUgY3VtYmVyc29tZSBmb3IgaW5kZXggQU1zIHRvIGtlZXAgdHJhY2sgb2YKKwkJ ICogd2hpY2ggYmF0Y2ggaXMgdGhlIGN1cnJlbnQgYW1nZXRiYXRjaCBjYWxsJ3Mgb3JpZ2luYWwg cHJpb3JiYXRjaC4pCisJCSAqLworCX0KKwllbHNlCisJeworCQkvKiBhbWdldGJhdGNoIHJldHVy bmVkIE5VTEwgKi8KKwkJaWYgKHByaW9yQmF0Y2gpCisJCXsKKwkJCS8qCisJCQkgKiBUaGVyZSBh cmUgbm8gZnVydGhlciBtYXRjaGVzIHRvIGJlIGZvdW5kIGluIHRoZSBjdXJyZW50IHNjYW4KKwkJ CSAqIGRpcmVjdGlvbiwgZm9sbG93aW5nIHByaW9yQmF0Y2guICBSZW1lbWJlciB0aGF0IHByaW9y QmF0Y2ggaXMKKwkJCSAqIHRoZSBsYXN0IGJhdGNoIHdpdGggbWF0Y2hpbmcgaXRlbXMuCisJCQkg Ki8KKwkJCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcmVjdGlvbikpCisJCQkJcHJpb3JC YXRjaC0+a25vd25FbmRGb3J3YXJkID0gdHJ1ZTsKKwkJCWVsc2UKKwkJCQlwcmlvckJhdGNoLT5r bm93bkVuZEJhY2t3YXJkID0gdHJ1ZTsKKwkJfQorCX0KKworCXJldHVybiBiYXRjaDsKK30KKwor LyoKKyAqIFBvc2l0aW9uIHNjYW5Qb3MgYXQgdGhlIHN0YXJ0IG9mIG5ld1NjYW5CYXRjaCAoaW4g dGhlIGdpdmVuIHNjYW4KKyAqIGRpcmVjdGlvbiksIGFuZCByZW1vdmUgdGhlIHNjYW4ncyBvbGQg c2NhbkJhdGNoIGZyb20gdGhlIHJpbmcgYnVmZmVyLgorICoKKyAqIENhbGxlZCBhZnRlciB0YWJs ZWFtX3V0aWxfZmV0Y2hfbmV4dF9iYXRjaCByZXR1cm5zIG5ld1NjYW5CYXRjaCwgdGhlIG5leHQK KyAqIGJhdGNoIHRoYXQgc2NhblBvcyB3aWxsIGNvbnN1bWUgbWF0Y2hpbmcgaXRlbXMgZnJvbS4g IFdlIHJlbGVhc2UgdGhlCisgKiBub3ctb2Jzb2xlc2NlbnQgb2xkIHNjYW5CYXRjaCAodGhlIHJp bmcgYnVmZmVyJ3MgaGVhZCBiYXRjaCksIGZyZWVpbmcgdXAKKyAqIGl0cyByaW5nIGJ1ZmZlciBz bG90LiAgKFdoZW4gbmV3U2NhbkJhdGNoIGlzIHRoZSBzY2FuJ3MgZmlyc3QgYmF0Y2gsIHRoZXJl CisgKiBpcyBubyBvbGQgc2NhbkJhdGNoIGZvciB1cyB0byByZWxlYXNlLikKKyAqLworc3RhdGlj IHBnX2F0dHJpYnV0ZV9hbHdheXNfaW5saW5lIHZvaWQKK3RhYmxlYW1fdXRpbF9zY2FucG9zX25l eHRiYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJ CQkJCSAgIEluZGV4U2NhbkJhdGNoIG5ld1NjYW5CYXRjaCkKK3sKKwlCYXRjaFJpbmdCdWZmZXIg KmJhdGNocmluZ2J1ZiA9ICZzY2FuLT5iYXRjaHJpbmdidWY7CisJQmF0Y2hSaW5nSXRlbVBvcyAq c2NhblBvcyA9ICZiYXRjaHJpbmdidWYtPnNjYW5Qb3M7CisJYm9vbAkJcmVsZWFzZU9sZEhlYWRC YXRjaCA9IHNjYW5Qb3MtPnZhbGlkOworCUluZGV4U2NhbkJhdGNoIGhlYWRCYXRjaDsKKworCS8q IFBvc2l0aW9uIHNjYW5Qb3MgdG8gdGhlIHN0YXJ0IG9mIG5ldyBzY2FuQmF0Y2ggKi8KKwlpbmRl eF9zY2FuX3Bvc19zdGFydGJhdGNoKGRpcmVjdGlvbiwgbmV3U2NhbkJhdGNoLCBzY2FuUG9zKTsK KwlBc3NlcnQoaW5kZXhfc2Nhbl9iYXRjaChzY2FuLCBzY2FuUG9zLT5iYXRjaCkgPT0gbmV3U2Nh bkJhdGNoKTsKKworCWlmICghcmVsZWFzZU9sZEhlYWRCYXRjaCkKKwl7CisJCS8qIG5ld1NjYW5C YXRjaCBpcyB0aGUgc2NhbidzIGZpcnN0IGFuZCBvbmx5IGJhdGNoICovCisJCUFzc2VydChiYXRj aHJpbmdidWYtPmhlYWRCYXRjaCA9PSBzY2FuUG9zLT5iYXRjaCk7CisJCXJldHVybjsKKwl9CisK KwloZWFkQmF0Y2ggPSBpbmRleF9zY2FuX2JhdGNoKHNjYW4sIGJhdGNocmluZ2J1Zi0+aGVhZEJh dGNoKTsKKworCUFzc2VydChoZWFkQmF0Y2ggIT0gbmV3U2NhbkJhdGNoKTsKKwlBc3NlcnQoYmF0 Y2hyaW5nYnVmLT5oZWFkQmF0Y2ggIT0gc2NhblBvcy0+YmF0Y2gpOworCisJLyogZnJlZSBvYnNv bGVzY2VudCBoZWFkIGJhdGNoICh1bmxlc3MgaXQgaXMgc2NhbidzIG1hcmtCYXRjaCkgKi8KKwl0 YWJsZWFtX3V0aWxfcmVsZWFzZV9iYXRjaChzY2FuLCBoZWFkQmF0Y2gpOworCisJLyogUmVtb3Zl IHRoZSBiYXRjaCBmcm9tIHRoZSByaW5nIGJ1ZmZlciAoZXZlbiBpZiBpdCdzIG1hcmtCYXRjaCkg Ki8KKwliYXRjaHJpbmdidWYtPmhlYWRCYXRjaCsrOworCisJLyogUG9zdGNvbmRpdGlvbnMgZm9y IGhhdmluZyBmcmVlZCB1cCBhIHJpbmcgYnVmZmVyIHNsb3QgKi8KKwlBc3NlcnQoIWluZGV4X3Nj YW5fYmF0Y2hfZnVsbChzY2FuKSk7CisJQXNzZXJ0KGJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoID09 IHNjYW5Qb3MtPmJhdGNoKTsKK30KKworLyoKKyAqIEZldGNoIHRoZSBuZXh0IG1hdGNoaW5nIFRJ RCBmb3IgdGhlIHNjYW4gKG9yIHRoZSBmaXJzdCkuCisgKgorICogVGhpcyBpcyB0aGUgYW1nZXR0 dXBsZSBlcXVpdmFsZW50IG9mIHRhYmxlYW1fdXRpbF9mZXRjaF9uZXh0X2JhdGNoLgorICoKKyAq IFRoZXJlIGlzIG5vIGJhdGNoLWxpa2Ugc3RhdGUgZm9yIHVzIHRvIG1hbmFnZSAodHlwaWNhbGx5 IHRoYXQncyB1cCB0byB0aGUKKyAqIGluZGV4IEFNIHdoZW4gaXQgaW1wbGVtZW50cyBhbWdldHR1 cGxlKS4KKyAqLworc3RhdGljIHBnX2F0dHJpYnV0ZV9hbHdheXNfaW5saW5lIEl0ZW1Qb2ludGVy Cit0YWJsZWFtX3V0aWxfZmV0Y2hfbmV4dF90dXBsZV90aWQoSW5kZXhTY2FuRGVzYyBzY2FuLCBT Y2FuRGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwlib29sCQlmb3VuZDsKKworCUFzc2VydCghc2Nh bi0+dXNlYmF0Y2hyaW5nKTsKKworCWZvdW5kID0gc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5k YW0tPmFtZ2V0dHVwbGUoc2NhbiwgZGlyZWN0aW9uKTsKKworCS8qIFJlc2V0IGtpbGwgZmxhZyBp bW1lZGlhdGVseSBmb3Igc2FmZXR5ICovCisJc2Nhbi0+a2lsbF9wcmlvcl90dXBsZSA9IGZhbHNl OworCUFzc2VydCghc2Nhbi0+eHNfaGVhcF9jb250aW51ZSk7CisKKwkvKiBJZiB3ZSdyZSBvdXQg b2YgaW5kZXggZW50cmllcywgd2UncmUgZG9uZSAqLworCWlmICghZm91bmQpCisJCXJldHVybiBO VUxMOworCisJLyogUmV0dXJuIHRoZSBUSUQgb2YgdGhlIHR1cGxlIHdlIGZvdW5kICovCisJcmV0 dXJuICZzY2FuLT54c19oZWFwdGlkOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBV dGlsaXRpZXMgY2FsbGVkIGJ5IGluZGV4IEFNcworICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICov CitleHRlcm4gdm9pZCBpbmRleGFtX3V0aWxfdW5sb2NrX2JhdGNoKEluZGV4U2NhbkRlc2Mgc2Nh biwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gsCisJCQkJCQkJCQkgIEJ1ZmZlciBidWYpOworZXh0ZXJu IEluZGV4U2NhbkJhdGNoIGluZGV4YW1fdXRpbF9hbGxvY19iYXRjaChJbmRleFNjYW5EZXNjIHNj YW4pOworZXh0ZXJuIHZvaWQgaW5kZXhhbV91dGlsX3JlbGVhc2VfYmF0Y2goSW5kZXhTY2FuRGVz YyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCk7CisKKyNlbmRpZgkJCQkJCQkvKiBJTkRFWEJB VENIX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9uYnRyZWUuaCBiL3NyYy9p bmNsdWRlL2FjY2Vzcy9uYnRyZWUuaAppbmRleCAzMDk3ZTliYjEuLjAyNTRhMjIzZSAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL25idHJlZS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vz cy9uYnRyZWUuaApAQCAtMTUsNiArMTUsNyBAQAogI2RlZmluZSBOQlRSRUVfSAogCiAjaW5jbHVk ZSAiYWNjZXNzL2FtYXBpLmgiCisjaW5jbHVkZSAiYWNjZXNzL2luZGV4YmF0Y2guaCIKICNpbmNs dWRlICJhY2Nlc3MvaXR1cC5oIgogI2luY2x1ZGUgImFjY2Vzcy9zZGlyLmgiCiAjaW5jbHVkZSAi Y2F0YWxvZy9wZ19hbV9kLmgiCkBAIC05MjQsMTEyICs5MjUsNiBAQCB0eXBlZGVmIHN0cnVjdCBC VFZhY3V1bVBvc3RpbmdEYXRhCiAKIHR5cGVkZWYgQlRWYWN1dW1Qb3N0aW5nRGF0YSAqQlRWYWN1 dW1Qb3N0aW5nOwogCi0vKgotICogQlRTY2FuT3BhcXVlRGF0YSBpcyB0aGUgYnRyZWUtcHJpdmF0 ZSBzdGF0ZSBuZWVkZWQgZm9yIGFuIGluZGV4c2Nhbi4KLSAqIFRoaXMgY29uc2lzdHMgb2YgcHJl cHJvY2Vzc2VkIHNjYW4ga2V5cyAoc2VlIF9idF9wcmVwcm9jZXNzX2tleXMoKSBmb3IKLSAqIGRl dGFpbHMgb2YgdGhlIHByZXByb2Nlc3NpbmcpLCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY3VycmVu dCBsb2NhdGlvbgotICogb2YgdGhlIHNjYW4sIGFuZCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbWFy a2VkIGxvY2F0aW9uLCBpZiBhbnkuICAoV2UgdXNlCi0gKiBCVFNjYW5Qb3NEYXRhIHRvIHJlcHJl c2VudCB0aGUgZGF0YSBuZWVkZWQgZm9yIGVhY2ggb2YgY3VycmVudCBhbmQgbWFya2VkCi0gKiBs b2NhdGlvbnMuKQlJbiBhZGRpdGlvbiB3ZSBjYW4gcmVtZW1iZXIgc29tZSBrbm93bi1raWxsZWQg aW5kZXggZW50cmllcwotICogdGhhdCBtdXN0IGJlIG1hcmtlZCBiZWZvcmUgd2UgY2FuIG1vdmUg b2ZmIHRoZSBjdXJyZW50IHBhZ2UuCi0gKgotICogSW5kZXggc2NhbnMgd29yayBhIHBhZ2UgYXQg YSB0aW1lOiB3ZSBwaW4gYW5kIHJlYWQtbG9jayB0aGUgcGFnZSwgaWRlbnRpZnkKLSAqIGFsbCB0 aGUgbWF0Y2hpbmcgaXRlbXMgb24gdGhlIHBhZ2UgYW5kIHNhdmUgdGhlbSBpbiBCVFNjYW5Qb3NE YXRhLCB0aGVuCi0gKiByZWxlYXNlIHRoZSByZWFkLWxvY2sgd2hpbGUgcmV0dXJuaW5nIHRoZSBp dGVtcyB0byB0aGUgY2FsbGVyIGZvcgotICogcHJvY2Vzc2luZy4gIFRoaXMgYXBwcm9hY2ggbWlu aW1pemVzIGxvY2svdW5sb2NrIHRyYWZmaWMuICBXZSBtdXN0IGFsd2F5cwotICogZHJvcCB0aGUg bG9jayB0byBtYWtlIGl0IG9rYXkgZm9yIGNhbGxlciB0byBwcm9jZXNzIHRoZSByZXR1cm5lZCBp dGVtcy4KLSAqIFdoZXRoZXIgb3Igbm90IHdlIGNhbiBhbHNvIHJlbGVhc2UgdGhlIHBpbiBkdXJp bmcgdGhpcyB3aW5kb3cgd2lsbCB2YXJ5LgotICogV2UgZHJvcCB0aGUgcGluICh3aGVuIHNvLT5k cm9wUGluKSB0byBhdm9pZCBibG9ja2luZyBwcm9ncmVzcyBieSBWQUNVVU0KLSAqIChzZWUgbmJ0 cmVlL1JFQURNRSBzZWN0aW9uIGFib3V0IG1ha2luZyBjb25jdXJyZW50IFRJRCByZWN5Y2xpbmcg c2FmZSkuCi0gKiBXZSdsbCBhbHdheXMgcmVsZWFzZSBib3RoIHRoZSBsb2NrIGFuZCB0aGUgcGlu IG9uIHRoZSBjdXJyZW50IHBhZ2UgYmVmb3JlCi0gKiBtb3Zpbmcgb24gdG8gaXRzIHNpYmxpbmcg cGFnZS4KLSAqCi0gKiBJZiB3ZSBhcmUgZG9pbmcgYW4gaW5kZXgtb25seSBzY2FuLCB3ZSBzYXZl IHRoZSBlbnRpcmUgSW5kZXhUdXBsZSBmb3IgZWFjaAotICogbWF0Y2hlZCBpdGVtLCBvdGhlcndp c2Ugb25seSBpdHMgaGVhcCBUSUQgYW5kIG9mZnNldC4gIFRoZSBJbmRleFR1cGxlcyBnbwotICog aW50byBhIHNlcGFyYXRlIHdvcmtzcGFjZSBhcnJheTsgZWFjaCBCVFNjYW5Qb3NJdGVtIHN0b3Jl cyBpdHMgdHVwbGUncwotICogb2Zmc2V0IHdpdGhpbiB0aGF0IGFycmF5LiAgUG9zdGluZyBsaXN0 IHR1cGxlcyBzdG9yZSBhICJiYXNlIiB0dXBsZSBvbmNlLAotICogYWxsb3dpbmcgdGhlIHNhbWUg a2V5IHRvIGJlIHJldHVybmVkIGZvciBlYWNoIFRJRCBpbiB0aGUgcG9zdGluZyBsaXN0Ci0gKiB0 dXBsZS4KLSAqLwotCi10eXBlZGVmIHN0cnVjdCBCVFNjYW5Qb3NJdGVtCS8qIHdoYXQgd2UgcmVt ZW1iZXIgYWJvdXQgZWFjaCBtYXRjaCAqLwotewotCUl0ZW1Qb2ludGVyRGF0YSBoZWFwVGlkOwkv KiBUSUQgb2YgcmVmZXJlbmNlZCBoZWFwIGl0ZW0gKi8KLQlPZmZzZXROdW1iZXIgaW5kZXhPZmZz ZXQ7CS8qIGluZGV4IGl0ZW0ncyBsb2NhdGlvbiB3aXRoaW4gcGFnZSAqLwotCUxvY2F0aW9uSW5k ZXggdHVwbGVPZmZzZXQ7CS8qIEluZGV4VHVwbGUncyBvZmZzZXQgaW4gd29ya3NwYWNlLCBpZiBh bnkgKi8KLX0gQlRTY2FuUG9zSXRlbTsKLQotdHlwZWRlZiBzdHJ1Y3QgQlRTY2FuUG9zRGF0YQot ewotCUJ1ZmZlcgkJYnVmOwkJCS8qIGN1cnJQYWdlIGJ1ZiAoaW52YWxpZCBtZWFucyB1bnBpbm5l ZCkgKi8KLQotCS8qIHBhZ2UgZGV0YWlscyBhcyBvZiB0aGUgc2F2ZWQgcG9zaXRpb24ncyBjYWxs IHRvIF9idF9yZWFkcGFnZSAqLwotCUJsb2NrTnVtYmVyIGN1cnJQYWdlOwkJLyogcGFnZSByZWZl cmVuY2VkIGJ5IGl0ZW1zIGFycmF5ICovCi0JQmxvY2tOdW1iZXIgcHJldlBhZ2U7CQkvKiBjdXJy UGFnZSdzIGxlZnQgbGluayAqLwotCUJsb2NrTnVtYmVyIG5leHRQYWdlOwkJLyogY3VyclBhZ2Un cyByaWdodCBsaW5rICovCi0JWExvZ1JlY1B0cglsc247CQkJLyogY3VyclBhZ2UncyBMU04gKHdo ZW4gc28tPmRyb3BQaW4pICovCi0KLQkvKiBzY2FuIGRpcmVjdGlvbiBmb3IgdGhlIHNhdmVkIHBv c2l0aW9uJ3MgY2FsbCB0byBfYnRfcmVhZHBhZ2UgKi8KLQlTY2FuRGlyZWN0aW9uIGRpcjsKLQot CS8qCi0JICogSWYgd2UgYXJlIGRvaW5nIGFuIGluZGV4LW9ubHkgc2NhbiwgbmV4dFR1cGxlT2Zm c2V0IGlzIHRoZSBmaXJzdCBmcmVlCi0JICogbG9jYXRpb24gaW4gdGhlIGFzc29jaWF0ZWQgdHVw bGUgc3RvcmFnZSB3b3Jrc3BhY2UuCi0JICovCi0JaW50CQkJbmV4dFR1cGxlT2Zmc2V0OwotCi0J LyoKLQkgKiBtb3JlTGVmdCBhbmQgbW9yZVJpZ2h0IHRyYWNrIHdoZXRoZXIgd2UgdGhpbmsgdGhl cmUgbWF5IGJlIG1hdGNoaW5nCi0JICogaW5kZXggZW50cmllcyB0byB0aGUgbGVmdCBhbmQgcmln aHQgb2YgdGhlIGN1cnJlbnQgcGFnZSwgcmVzcGVjdGl2ZWx5LgotCSAqLwotCWJvb2wJCW1vcmVM ZWZ0OwotCWJvb2wJCW1vcmVSaWdodDsKLQotCS8qCi0JICogVGhlIGl0ZW1zIGFycmF5IGlzIGFs d2F5cyBvcmRlcmVkIGluIGluZGV4IG9yZGVyIChpZSwgaW5jcmVhc2luZwotCSAqIGluZGV4b2Zm c2V0KS4gIFdoZW4gc2Nhbm5pbmcgYmFja3dhcmRzIGl0IGlzIGNvbnZlbmllbnQgdG8gZmlsbCB0 aGUKLQkgKiBhcnJheSBiYWNrLXRvLWZyb250LCBzbyB3ZSBzdGFydCBhdCB0aGUgbGFzdCBzbG90 IGFuZCBmaWxsIGRvd253YXJkcy4KLQkgKiBIZW5jZSB3ZSBuZWVkIGJvdGggYSBmaXJzdC12YWxp ZC1lbnRyeSBhbmQgYSBsYXN0LXZhbGlkLWVudHJ5IGNvdW50ZXIuCi0JICogaXRlbUluZGV4IGlz IGEgY3Vyc29yIHNob3dpbmcgd2hpY2ggZW50cnkgd2FzIGxhc3QgcmV0dXJuZWQgdG8gY2FsbGVy LgotCSAqLwotCWludAkJCWZpcnN0SXRlbTsJCS8qIGZpcnN0IHZhbGlkIGluZGV4IGluIGl0ZW1z W10gKi8KLQlpbnQJCQlsYXN0SXRlbTsJCS8qIGxhc3QgdmFsaWQgaW5kZXggaW4gaXRlbXNbXSAq LwotCWludAkJCWl0ZW1JbmRleDsJCS8qIGN1cnJlbnQgaW5kZXggaW4gaXRlbXNbXSAqLwotCi0J QlRTY2FuUG9zSXRlbSBpdGVtc1tNYXhUSURzUGVyQlRyZWVQYWdlXTsJLyogTVVTVCBCRSBMQVNU ICovCi19IEJUU2NhblBvc0RhdGE7Ci0KLXR5cGVkZWYgQlRTY2FuUG9zRGF0YSAqQlRTY2FuUG9z OwotCi0jZGVmaW5lIEJUU2NhblBvc0lzUGlubmVkKHNjYW5wb3MpIFwKLSggXAotCUFzc2VydE1h Y3JvKEJsb2NrTnVtYmVySXNWYWxpZCgoc2NhbnBvcykuY3VyclBhZ2UpIHx8IFwKLQkJCQkhQnVm ZmVySXNWYWxpZCgoc2NhbnBvcykuYnVmKSksIFwKLQlCdWZmZXJJc1ZhbGlkKChzY2FucG9zKS5i dWYpIFwKLSkKLSNkZWZpbmUgQlRTY2FuUG9zVW5waW4oc2NhbnBvcykgXAotCWRvIHsgXAotCQlS ZWxlYXNlQnVmZmVyKChzY2FucG9zKS5idWYpOyBcCi0JCShzY2FucG9zKS5idWYgPSBJbnZhbGlk QnVmZmVyOyBcCi0JfSB3aGlsZSAoMCkKLSNkZWZpbmUgQlRTY2FuUG9zVW5waW5JZlBpbm5lZChz Y2FucG9zKSBcCi0JZG8geyBcCi0JCWlmIChCVFNjYW5Qb3NJc1Bpbm5lZChzY2FucG9zKSkgXAot CQkJQlRTY2FuUG9zVW5waW4oc2NhbnBvcyk7IFwKLQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIEJU U2NhblBvc0lzVmFsaWQoc2NhbnBvcykgXAotKCBcCi0JQXNzZXJ0TWFjcm8oQmxvY2tOdW1iZXJJ c1ZhbGlkKChzY2FucG9zKS5jdXJyUGFnZSkgfHwgXAotCQkJCSFCdWZmZXJJc1ZhbGlkKChzY2Fu cG9zKS5idWYpKSwgXAotCUJsb2NrTnVtYmVySXNWYWxpZCgoc2NhbnBvcykuY3VyclBhZ2UpIFwK LSkKLSNkZWZpbmUgQlRTY2FuUG9zSW52YWxpZGF0ZShzY2FucG9zKSBcCi0JZG8geyBcCi0JCShz Y2FucG9zKS5idWYgPSBJbnZhbGlkQnVmZmVyOyBcCi0JCShzY2FucG9zKS5jdXJyUGFnZSA9IElu dmFsaWRCbG9ja051bWJlcjsgXAotCX0gd2hpbGUgKDApCi0KIC8qIFdlIG5lZWQgb25lIG9mIHRo ZXNlIGZvciBlYWNoIGVxdWFsaXR5LXR5cGUgU0tfU0VBUkNIQVJSQVkgc2NhbiBrZXkgKi8KIHR5 cGVkZWYgc3RydWN0IEJUQXJyYXlLZXlJbmZvCiB7CkBAIC0xMDUwLDYgKzk0NSw0MyBAQCB0eXBl ZGVmIHN0cnVjdCBCVEFycmF5S2V5SW5mbwogCVNjYW5LZXkJCWhpZ2hfY29tcGFyZTsJLyogYXJy YXkncyA8IG9yIDw9IHVwcGVyIGJvdW5kICovCiB9IEJUQXJyYXlLZXlJbmZvOwogCisvKiBQZXIt YmF0Y2ggZGF0YSBwcml2YXRlIHRvIHRoZSBidHJlZSBpbmRleCBBTSAqLwordHlwZWRlZiBzdHJ1 Y3QgQlRCYXRjaERhdGEKK3sKKwlCdWZmZXIJCWJ1ZjsJCQkvKiBsZWFmIHBhZ2UncyBidWZmZXIg cGluICovCisJQmxvY2tOdW1iZXIgY3VyclBhZ2U7CQkvKiBsZWFmIHBhZ2UncyBibG9jayBudW1i ZXIgKi8KKwlCbG9ja051bWJlciBwcmV2UGFnZTsJCS8qIGxlYWYgcGFnZSdzIGxlZnQgc2libGlu ZyAqLworCUJsb2NrTnVtYmVyIG5leHRQYWdlOwkJLyogbGVhZiBwYWdlJ3MgcmlnaHQgc2libGlu ZyAqLworCWJvb2wJCW1vcmVMZWZ0OwkJLyogbW9yZSBwYWdlcyBvZiBpbnRlcmVzdCB0byB0aGUg bGVmdD8gKi8KKwlib29sCQltb3JlUmlnaHQ7CQkvKiBtb3JlIHBhZ2VzIG9mIGludGVyZXN0IHRv IHRoZSByaWdodD8gKi8KK30gQlRCYXRjaERhdGE7CisKKy8qIEFjY2VzcyB0aGUgYnRyZWUtcHJp dmF0ZSBwZXItYmF0Y2ggZGF0YSBmcm9tIGFuIEluZGV4U2NhbkJhdGNoIHBvaW50ZXIgKi8KKyNk ZWZpbmUgQlRCYXRjaEdldERhdGEoc2NhbiwgYmF0Y2gpIFwKKwlpbmRleF9zY2FuX2JhdGNoX2lu ZGV4X29wYXF1ZV9zdGF0aWMoc2NhbiwgYmF0Y2gsIEJUQmF0Y2hEYXRhKQorCisvKgorICogQlRT Y2FuT3BhcXVlRGF0YSBpcyB0aGUgYnRyZWUtcHJpdmF0ZSBzdGF0ZSBuZWVkZWQgZm9yIGFuIGlu ZGV4c2Nhbi4KKyAqIFRoaXMgY29uc2lzdHMgb2YgcHJlcHJvY2Vzc2VkIHNjYW4ga2V5cyAoc2Vl IF9idF9wcmVwcm9jZXNzX2tleXMoKSBmb3IKKyAqIGRldGFpbHMgb2YgdGhlIHByZXByb2Nlc3Np bmcpLCBhbmQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQgYXJyYXkKKyAqIGtleXMuICBU aGVyZSBhcmUgYXNzdW1wdGlvbnMgYWJvdXQgaG93IHRoZSBjdXJyZW50IGFycmF5IGtleXMgdHJh Y2sgdGhlCisgKiBwcm9ncmVzcyBvZiB0aGUgaW5kZXggc2NhbiB0aHJvdWdoIHRoZSBpbmRleCdz IGtleSBzcGFjZSAoc2VlIF9idF9yZWFkcGFnZSwKKyAqIGJ0cG9zcmVzZXQsIGFuZCBfYnRfYWR2 YW5jZV9hcnJheV9rZXlzKSwgYnV0IHdlIGRvbid0IHRyYWNrIGFueXRoaW5nIGFib3V0CisgKiB0 aGUgY3VycmVudCBzY2FuIHBvc2l0aW9uL2JhdGNoIGluIHRoaXMgb3BhcXVlIHN0cnVjdC4KKyAq CisgKiBJbmRleCBzY2FucyB3b3JrIGEgcGFnZSBhdCBhIHRpbWUsIGFzIHJlcXVpcmVkIGJ5IHRo ZSBhbWdldGJhdGNoIGNvbnRyYWN0OgorICogd2UgcGluIGFuZCByZWFkLWxvY2sgdGhlIHBhZ2Us IGlkZW50aWZ5IGFsbCB0aGUgbWF0Y2hpbmcgaXRlbXMgb24gdGhlIHBhZ2UKKyAqIGFuZCByZXR1 cm4gdGhlbSBpbiBhIG5ld2x5IGFsbG9jYXRlZCBiYXRjaC4gIFdlIHRoZW4gcmVsZWFzZSB0aGUg cmVhZC1sb2NrCisgKiB1c2luZyBhbWdldGJhdGNoIHV0aWxpdHkgcm91dGluZXMuICBUaGlzIGFw cHJvYWNoIG1pbmltaXplcyBsb2NrL3VubG9jaworICogdHJhZmZpYy4gIF9idF9uZXh0IGlzIHBh c3NlZCBwcmlvcmJhdGNoLCB3aGljaCBoYXMgYSBCVEJhdGNoRGF0YSBhcmVhIHRoYXQKKyAqIHRl bGxzIHVzIHdoaWNoIHBhZ2UgaXMgbmV4dCBpbiBsaW5lIHRvIGJlIHJlYWQgaW4gdGhlIGdpdmVu IHNjYW4gZGlyZWN0aW9uCisgKiAodGhpcyBpcyBvZnRlbiB0aGUgc2FtZSBwcmlvcmJhdGNoIHBh c3NlZCB0byBidGdldGJhdGNoIGJ5IGNvcmUgY29kZSkuCisgKgorICogSWYgd2UgYXJlIGRvaW5n IGFuIGluZGV4LW9ubHkgc2Nhbiwgd2Ugc2F2ZSB0aGUgZW50aXJlIEluZGV4VHVwbGUgZm9yIGVh Y2gKKyAqIG1hdGNoZWQgaXRlbSwgb3RoZXJ3aXNlIG9ubHkgaXRzIHRhYmxlIFRJRCBhbmQgb2Zm c2V0LiAgUG9zdGluZyBsaXN0IHR1cGxlcworICogc3RvcmUgYSAiYmFzZSIgdHVwbGUgb25jZSwg YWxsb3dpbmcgdGhlIHNhbWUga2V5IHRvIGJlIHVzZWQgZm9yIGVhY2ggVElEIGluCisgKiB0aGUg cG9zdGluZyBsaXN0LgorICovCiB0eXBlZGVmIHN0cnVjdCBCVFNjYW5PcGFxdWVEYXRhCiB7CiAJ LyogdGhlc2UgZmllbGRzIGFyZSBzZXQgYnkgX2J0X3ByZXByb2Nlc3Nfa2V5cygpOiAqLwpAQCAt MTA2NiwzMiArOTk4LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgQlRTY2FuT3BhcXVlRGF0YQogCUJUQXJy YXlLZXlJbmZvICphcnJheUtleXM7CS8qIGluZm8gYWJvdXQgZWFjaCBlcXVhbGl0eS10eXBlIGFy cmF5IGtleSAqLwogCUZtZ3JJbmZvICAgKm9yZGVyUHJvY3M7CQkvKiBPUkRFUiBwcm9jcyBmb3Ig cmVxdWlyZWQgZXF1YWxpdHkga2V5cyAqLwogCU1lbW9yeUNvbnRleHQgYXJyYXlDb250ZXh0OyAv KiBzY2FuLWxpZmVzcGFuIGNvbnRleHQgZm9yIGFycmF5IGRhdGEgKi8KLQotCS8qIGluZm8gYWJv dXQga2lsbGVkIGl0ZW1zIGlmIGFueSAoa2lsbGVkSXRlbXMgaXMgTlVMTCBpZiBuZXZlciB1c2Vk KSAqLwotCWludAkJICAgKmtpbGxlZEl0ZW1zOwkvKiBjdXJyUG9zLml0ZW1zIGluZGV4ZXMgb2Yg a2lsbGVkIGl0ZW1zICovCi0JaW50CQkJbnVtS2lsbGVkOwkJLyogbnVtYmVyIG9mIGN1cnJlbnRs eSBzdG9yZWQgaXRlbXMgKi8KLQlib29sCQlkcm9wUGluOwkJLyogZHJvcCBsZWFmIHBpbiBiZWZv cmUgYnRnZXR0dXBsZSByZXR1cm5zPyAqLwotCi0JLyoKLQkgKiBJZiB3ZSBhcmUgZG9pbmcgYW4g aW5kZXgtb25seSBzY2FuLCB0aGVzZSBhcmUgdGhlIHR1cGxlIHN0b3JhZ2UKLQkgKiB3b3Jrc3Bh Y2VzIGZvciB0aGUgY3VyclBvcyBhbmQgbWFya1BvcyByZXNwZWN0aXZlbHkuICBFYWNoIGlzIG9m IHNpemUKLQkgKiBCTENLU1osIHNvIGl0IGNhbiBob2xkIGFzIG11Y2ggYXMgYSBmdWxsIHBhZ2Un cyB3b3J0aCBvZiB0dXBsZXMuCi0JICovCi0JY2hhcgkgICAqY3VyclR1cGxlczsJCS8qIHR1cGxl IHN0b3JhZ2UgZm9yIGN1cnJQb3MgKi8KLQljaGFyCSAgICptYXJrVHVwbGVzOwkJLyogdHVwbGUg c3RvcmFnZSBmb3IgbWFya1BvcyAqLwotCi0JLyoKLQkgKiBJZiB0aGUgbWFya2VkIHBvc2l0aW9u IGlzIG9uIHRoZSBzYW1lIHBhZ2UgYXMgY3VycmVudCBwb3NpdGlvbiwgd2UKLQkgKiBkb24ndCB1 c2UgbWFya1BvcywgYnV0IGp1c3Qga2VlcCB0aGUgbWFya2VkIGl0ZW1JbmRleCBpbiBtYXJrSXRl bUluZGV4Ci0JICogKGFsbCB0aGUgcmVzdCBvZiBjdXJyUG9zIGlzIHZhbGlkIGZvciB0aGUgbWFy ayBwb3NpdGlvbikuIEhlbmNlLCB0bwotCSAqIGRldGVybWluZSBpZiB0aGVyZSBpcyBhIG1hcmss IGZpcnN0IGxvb2sgYXQgbWFya0l0ZW1JbmRleCwgdGhlbiBhdAotCSAqIG1hcmtQb3MuCi0JICov Ci0JaW50CQkJbWFya0l0ZW1JbmRleDsJLyogaXRlbUluZGV4LCBvciAtMSBpZiBub3QgdmFsaWQg Ki8KLQotCS8qIGtlZXAgdGhlc2UgbGFzdCBpbiBzdHJ1Y3QgZm9yIGVmZmljaWVuY3kgKi8KLQlC VFNjYW5Qb3NEYXRhIGN1cnJQb3M7CQkvKiBjdXJyZW50IHBvc2l0aW9uIGRhdGEgKi8KLQlCVFNj YW5Qb3NEYXRhIG1hcmtQb3M7CQkvKiBtYXJrZWQgcG9zaXRpb24sIGlmIGFueSAqLwogfSBCVFNj YW5PcGFxdWVEYXRhOwogCiB0eXBlZGVmIEJUU2Nhbk9wYXF1ZURhdGEgKkJUU2Nhbk9wYXF1ZTsK QEAgLTExNjAsMTQgKzEwNjYsMTcgQEAgZXh0ZXJuIGJvb2wgYnRpbnNlcnQoUmVsYXRpb24gcmVs LCBEYXR1bSAqdmFsdWVzLCBib29sICppc251bGwsCiBleHRlcm4gSW5kZXhTY2FuRGVzYyBidGJl Z2luc2NhbihSZWxhdGlvbiByZWwsIGludCBua2V5cywgaW50IG5vcmRlcmJ5cyk7CiBleHRlcm4g U2l6ZSBidGVzdGltYXRlcGFyYWxsZWxzY2FuKFJlbGF0aW9uIHJlbCwgaW50IG5rZXlzLCBpbnQg bm9yZGVyYnlzKTsKIGV4dGVybiB2b2lkIGJ0aW5pdHBhcmFsbGVsc2Nhbih2b2lkICp0YXJnZXQp OwotZXh0ZXJuIGJvb2wgYnRnZXR0dXBsZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rp b24gZGlyKTsKK2V4dGVybiBJbmRleFNjYW5CYXRjaCBidGdldGJhdGNoKEluZGV4U2NhbkRlc2Mg c2NhbiwKKwkJCQkJCQkJIEluZGV4U2NhbkJhdGNoIHByaW9yYmF0Y2gsCisJCQkJCQkJCSBTY2Fu RGlyZWN0aW9uIGRpcik7CiBleHRlcm4gaW50NjQgYnRnZXRiaXRtYXAoSW5kZXhTY2FuRGVzYyBz Y2FuLCBUSURCaXRtYXAgKnRibSk7CiBleHRlcm4gdm9pZCBidHJlc2NhbihJbmRleFNjYW5EZXNj IHNjYW4sIFNjYW5LZXkgc2NhbmtleSwgaW50IG5zY2Fua2V5cywKIAkJCQkJIFNjYW5LZXkgb3Jk ZXJieXMsIGludCBub3JkZXJieXMpOworZXh0ZXJuIHZvaWQgYnR1bmd1YXJkYmF0Y2goSW5kZXhT Y2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCk7CitleHRlcm4gdm9pZCBidGtpbGxp dGVtc2JhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpOwogZXh0 ZXJuIHZvaWQgYnRwYXJhbGxlbHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4pOwogZXh0ZXJuIHZv aWQgYnRlbmRzY2FuKEluZGV4U2NhbkRlc2Mgc2Nhbik7Ci1leHRlcm4gdm9pZCBidG1hcmtwb3Mo SW5kZXhTY2FuRGVzYyBzY2FuKTsKLWV4dGVybiB2b2lkIGJ0cmVzdHJwb3MoSW5kZXhTY2FuRGVz YyBzY2FuKTsKK2V4dGVybiB2b2lkIGJ0cG9zcmVzZXQoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRl eFNjYW5CYXRjaCBiYXRjaCk7CiBleHRlcm4gSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICpidGJ1bGtk ZWxldGUoSW5kZXhWYWN1dW1JbmZvICppbmZvLAogCQkJCQkJCQkJCSAgIEluZGV4QnVsa0RlbGV0 ZVJlc3VsdCAqc3RhdHMsCiAJCQkJCQkJCQkJICAgSW5kZXhCdWxrRGVsZXRlQ2FsbGJhY2sgY2Fs bGJhY2ssCkBAIC0xMjcxLDggKzExODAsOSBAQCBleHRlcm4gdm9pZCBfYnRfcHJlcHJvY2Vzc19r ZXlzKEluZGV4U2NhbkRlc2Mgc2Nhbik7CiAvKgogICogcHJvdG90eXBlcyBmb3IgZnVuY3Rpb25z IGluIG5idHJlYWRwYWdlLmMKICAqLwotZXh0ZXJuIGJvb2wgX2J0X3JlYWRwYWdlKEluZGV4U2Nh bkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsCi0JCQkJCQkgT2Zmc2V0TnVtYmVyIG9mZm51 bSwgYm9vbCBmaXJzdHBhZ2UpOworZXh0ZXJuIGJvb2wgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRl c2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggbmV3YmF0Y2gsCisJCQkJCQkgU2NhbkRpcmVjdGlvbiBk aXIsIE9mZnNldE51bWJlciBvZmZudW0sCisJCQkJCQkgYm9vbCBmaXJzdHBhZ2UpOwogZXh0ZXJu IHZvaWQgX2J0X3N0YXJ0X2FycmF5X2tleXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0 aW9uIGRpcik7CiBleHRlcm4gaW50CV9idF9iaW5zcmNoX2FycmF5X3NrZXkoRm1nckluZm8gKm9y ZGVycHJvYywKIAkJCQkJCQkJICAgYm9vbCBjdXJfZWxlbV90cmlnLCBTY2FuRGlyZWN0aW9uIGRp ciwKQEAgLTEyODcsMTUgKzExOTcsMTUgQEAgZXh0ZXJuIEJUU3RhY2sgX2J0X3NlYXJjaChSZWxh dGlvbiByZWwsIFJlbGF0aW9uIGhlYXByZWwsIEJUU2Nhbkluc2VydCBrZXksCiAJCQkJCQkgIEJ1 ZmZlciAqYnVmUCwgaW50IGFjY2VzcywgYm9vbCByZXR1cm5zdGFjayk7CiBleHRlcm4gT2Zmc2V0 TnVtYmVyIF9idF9iaW5zcmNoX2luc2VydChSZWxhdGlvbiByZWwsIEJUSW5zZXJ0U3RhdGUgaW5z ZXJ0c3RhdGUpOwogZXh0ZXJuIGludDMyIF9idF9jb21wYXJlKFJlbGF0aW9uIHJlbCwgQlRTY2Fu SW5zZXJ0IGtleSwgUGFnZSBwYWdlLCBPZmZzZXROdW1iZXIgb2ZmbnVtKTsKLWV4dGVybiBib29s IF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsKLWV4dGVy biBib29sIF9idF9uZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpOwor ZXh0ZXJuIEluZGV4U2NhbkJhdGNoIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5E aXJlY3Rpb24gZGlyKTsKK2V4dGVybiBJbmRleFNjYW5CYXRjaCBfYnRfbmV4dChJbmRleFNjYW5E ZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLAorCQkJCQkJCSAgIEluZGV4U2NhbkJhdGNoIHBy aW9yYmF0Y2gpOwogZXh0ZXJuIEJ1ZmZlciBfYnRfZ2V0X2VuZHBvaW50KFJlbGF0aW9uIHJlbCwg dWludDMyIGxldmVsLCBib29sIHJpZ2h0bW9zdCk7CiAKIC8qCiAgKiBwcm90b3R5cGVzIGZvciBm dW5jdGlvbnMgaW4gbmJ0dXRpbHMuYwogICovCiBleHRlcm4gQlRTY2FuSW5zZXJ0IF9idF9ta3Nj YW5rZXkoUmVsYXRpb24gcmVsLCBJbmRleFR1cGxlIGl0dXApOwotZXh0ZXJuIHZvaWQgX2J0X2tp bGxpdGVtcyhJbmRleFNjYW5EZXNjIHNjYW4pOwogZXh0ZXJuIEJUQ3ljbGVJZCBfYnRfdmFjdXVt X2N5Y2xlaWQoUmVsYXRpb24gcmVsKTsKIGV4dGVybiBCVEN5Y2xlSWQgX2J0X3N0YXJ0X3ZhY3V1 bShSZWxhdGlvbiByZWwpOwogZXh0ZXJuIHZvaWQgX2J0X2VuZF92YWN1dW0oUmVsYXRpb24gcmVs KTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmggYi9zcmMvaW5jbHVk ZS9hY2Nlc3MvcmVsc2Nhbi5oCmluZGV4IDY3ZTBkYjA4NC4uNzViM2FjOTk0IDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9y ZWxzY2FuLmgKQEAgLTEyMiwxMyArMTIyLDE2NyBAQCB0eXBlZGVmIHN0cnVjdCBQYXJhbGxlbEJs b2NrVGFibGVTY2FuV29ya2VyRGF0YQogfSBQYXJhbGxlbEJsb2NrVGFibGVTY2FuV29ya2VyRGF0 YTsKIHR5cGVkZWYgc3RydWN0IFBhcmFsbGVsQmxvY2tUYWJsZVNjYW5Xb3JrZXJEYXRhICpQYXJh bGxlbEJsb2NrVGFibGVTY2FuV29ya2VyOwogCisvKgorICogRGF0YSBzdHJ1Y3R1cmVzIHVzZWQg YnkgYW1nZXRiYXRjaCBpbmRleCBzY2Fucy4KKyAqCisgKiBUaGVzZSBzdHJ1Y3RzIGFyZSBkZWZp bmVkIGhlcmUsIHJhdGhlciB0aGFuIGluIGFjY2Vzcy9pbmRleGJhdGNoLmgsIG9ubHkKKyAqIGJl Y2F1c2UgSW5kZXhTY2FuRGVzY0RhdGEgZW1iZWRzIHRoZW0gYnkgdmFsdWUuICByZWxzY2FuLmgg ZGVmaW5lcyBkYXRhCisgKiBzdHJ1Y3R1cmVzIG9ubHk7IGFsbCBvZiB0aGUgZnVuY3Rpb25zIHRo YXQgb3BlcmF0ZSBvbiB0aGVtIGFwcGVhciBpbgorICogYWNjZXNzL2luZGV4YmF0Y2guaC4KKyAq LworCisvKgorICogTG9jYXRpb24gb2YgYSBCYXRjaE1hdGNoaW5nSXRlbSB3aXRoaW4gdGhlIHNj YW4ncyByaW5nIGJ1ZmZlcgorICovCit0eXBlZGVmIHN0cnVjdCBCYXRjaFJpbmdJdGVtUG9zCit7 CisJLyogUG9zaXRpb24gcmVmZXJlbmNlcyBhIHZhbGlkIEluZGV4U2NhbkRlc2NEYXRhLmJhdGNo YnVmW10gZW50cnk/ICovCisJYm9vbAkJdmFsaWQ7CisKKwkvKiBJbmRleFNjYW5EZXNjRGF0YS5i YXRjaGJ1ZltdLXdpc2UgaW5kZXggdG8gcmVsZXZhbnQgSW5kZXhTY2FuQmF0Y2ggKi8KKwl1aW50 OAkJYmF0Y2g7CisKKwkvKiBJbmRleFNjYW5CYXRjaC5pdGVtc1tdLXdpc2UgaW5kZXggdG8gcmVs ZXZhbnQgQmF0Y2hNYXRjaGluZ0l0ZW0gKi8KKwlpbnQJCQlpdGVtOworCit9IEJhdGNoUmluZ0l0 ZW1Qb3M7CisKKy8qCisgKiBNYXRjaGluZyBpdGVtIHJldHVybmVkIGJ5IGFtZ2V0YmF0Y2ggKGlu IHJldHVybmVkIEluZGV4U2NhbkJhdGNoKSBkdXJpbmcgYW4KKyAqIGluZGV4IHNjYW4uICBVc2Vk IGJ5IHRhYmxlIEFNIHRvIGxvY2F0ZSByZWxldmFudCBtYXRjaGluZyB0YWJsZSB0dXBsZS4KKyAq LwordHlwZWRlZiBzdHJ1Y3QgQmF0Y2hNYXRjaGluZ0l0ZW0KK3sKKwlJdGVtUG9pbnRlckRhdGEg dGFibGVUaWQ7CS8qIFRJRCBvZiByZWZlcmVuY2VkIHRhYmxlIGl0ZW0gKi8KKwlPZmZzZXROdW1i ZXIgaW5kZXhPZmZzZXQ7CS8qIGluZGV4IGl0ZW0ncyBsb2NhdGlvbiB3aXRoaW4gcGFnZSAqLwor CUxvY2F0aW9uSW5kZXggdHVwbGVPZmZzZXQ7CS8qIGluZGV4IHR1cGxlJ3MgY3VyclR1cGxlcyBv ZmZzZXQsIGlmIGFueSAqLworfSBCYXRjaE1hdGNoaW5nSXRlbTsKKworLyoKKyAqIERhdGEgYWJv dXQgb25lIGJhdGNoIG9mIGl0ZW1zIHJldHVybmVkIGJ5IChhbmQgcGFzc2VkIHRvKSBhbWdldGJh dGNoIGR1cmluZworICogaW5kZXggc2NhbnMuCisgKgorICogVGhlIGJhdGNoIHBvaW50ZXIgcmV0 dXJuZWQgYnkgYW1nZXRiYXRjaCBwb2ludHMgaW50byB0aGUgaW50ZXJpb3Igb2YgYQorICogbGFy Z2VyIGFsbG9jYXRpb24sIHdoaWNoIGFsc28gY2FycmllcyBvcGFxdWUgYXJlYXMgZm9yIHRoZSB0 YWJsZSBBTSBhbmQKKyAqIHRoZSBpbmRleCBBTS4gIFNlZSBhY2Nlc3MvaW5kZXhiYXRjaC5oIGZv ciB0aGUgbGF5b3V0IG9mIGJhdGNoIGFsbG9jYXRpb25zCisgKiBhbmQgZm9yIHRoZSBhY2Nlc3Nv cnMgdXNlZCB0byByZWFjaCBlYWNoIGNvbnN0aXR1ZW50IGFyZWEuCisgKi8KK3R5cGVkZWYgc3Ry dWN0IEluZGV4U2NhbkJhdGNoRGF0YQoreworCS8qIEluZGV4IHBhZ2UncyBMU04sIG9wdGlvbmFs bHkgdXNlZCBieSBhbWtpbGxpdGVtc2JhdGNoIHJvdXRpbmVzICovCisJWExvZ1JlY1B0cglsc247 CisKKwkvKiBzY2FuIGRpcmVjdGlvbiB3aGVuIHRoZSBpbmRleCBwYWdlIHdhcyByZWFkICovCisJ U2NhbkRpcmVjdGlvbiBkaXI7CisKKwkvKgorCSAqIGtub3duRW5kQmFja3dhcmQgYW5kIGtub3du RW5kRm9yd2FyZCBpbmRpY2F0ZSB0aGF0IHRoaXMgYmF0Y2ggaXMgdGhlCisJICogbGFzdCBvbmUg d2l0aCBtYXRjaGluZyBpdGVtcyBpbiB0aGUgcmVsZXZhbnQgc2NhbiBkaXJlY3Rpb24uICBXaGVu CisJICogYW1nZXRiYXRjaCByZXR1cm5zIE5VTEwgZm9yIGEgZ2l2ZW4gZGlyZWN0aW9uLCB0aGUg Y29ycmVzcG9uZGluZyBmbGFnCisJICogaXMgc2V0IG9uIHRoZSBwcmlvcmJhdGNoIHRoYXQgd2Fz IHBhc3NlZCB0byB0aGF0IGNhbGwuICBXZSBjYW5ub3Qga25vdworCSAqIHRoaXMgd2hlbiBhIGJh dGNoIGlzIGZpcnN0IHJldHVybmVkIGJ5IGFtZ2V0YmF0Y2g7IGl0IG9ubHkgYmVjb21lcworCSAq IGFwcGFyZW50IHdoZW4gd2UgdHJ5IGFuZCBmYWlsIHRvIGNvbnRpbnVlIHRoZSBzY2FuIHBhc3Qg aXQuCisJICoKKwkgKiBUaGlzIGFsbG93cyB0YWJsZSBBTXMgdG8gYXZvaWQgcmVkdW5kYW50IGFt Z2V0YmF0Y2ggY2FsbHMgd2l0aCB0aGUgc2FtZQorCSAqIHByaW9yYmF0Y2ggLS0gdGhlIGluZGV4 IEFNIG1pZ2h0IG5lZWQgdG8gcmVhZCBhZGRpdGlvbmFsIGluZGV4IHBhZ2VzIHRvCisJICogZGV0 ZXJtaW5lIHRoZXJlIGFyZSBubyBtb3JlIG1hdGNoaW5nIGl0ZW1zIGJleW9uZCBjYWxsZXIncyBw cmlvcmJhdGNoLgorCSAqLworCWJvb2wJCWtub3duRW5kQmFja3dhcmQ7CisJYm9vbAkJa25vd25F bmRGb3J3YXJkOworCisJLyoKKwkgKiBCYXRjaCBzdGlsbCBob2xkcyBUSUQgcmVjeWNsaW5nIGlu dGVybG9jaz8KKwkgKi8KKwlib29sCQlpc0d1YXJkZWQ7CisKKwkvKgorCSAqIE1hdGNoaW5nIGl0 ZW1zIHN0YXRlIGZvciB0aGlzIGJhdGNoLiAgT3V0cHV0IGJ5IGluZGV4IEFNIGZvciB0YWJsZSBB TS4KKwkgKgorCSAqIFRoZSBpdGVtcyBhcnJheSBpcyBhbHdheXMgb3JkZXJlZCBpbiBpbmRleCBv cmRlciAoaWUsIGJ5IGluY3JlYXNpbmcKKwkgKiBpbmRleG9mZnNldCkuICBXaGVuIHNjYW5uaW5n IGJhY2t3YXJkcyBpdCBpcyBjb252ZW5pZW50IGZvciBpbmRleCBBTXMKKwkgKiB0byBmaWxsIHRo ZSBhcnJheSBiYWNrLXRvLWZyb250LCBzdGFydGluZyBhdCB0aGUgbGFzdCBpdGVtIHNsb3QgYW5k CisJICogZmlsbGluZyBkb3dud2FyZHMuICBUaGlzIGlzIHdoeSB3ZSBuZWVkIGJvdGggYSBmaXJz dC12YWxpZC1lbnRyeSBhbmQgYQorCSAqIGxhc3QtdmFsaWQtZW50cnkgY291bnRlci4KKwkgKgor CSAqIE5vdGU6IHRoZXNlIGFyZSBzaWduZWQgYmVjYXVzZSBpdCdzIHNvbWV0aW1lcyBjb252ZW5p ZW50IHRvIHVzZSAtMSB0bworCSAqIHJlcHJlc2VudCBhbiBvdXQtb2YtYm91bmRzIHNwYWNlIGp1 c3QgYmVmb3JlIGZpcnN0SXRlbSAod2hlbiBpdCdzIDApLgorCSAqLworCWludAkJCWZpcnN0SXRl bTsJCS8qIGZpcnN0IHZhbGlkIGluZGV4IGluIGl0ZW1zW10gKi8KKwlpbnQJCQlsYXN0SXRlbTsJ CS8qIGxhc3QgdmFsaWQgaW5kZXggaW4gaXRlbXNbXSAqLworCisJLyogaW5mbyBhYm91dCBkZWFk IGl0ZW1zLCBpZiBhbnkgKHBhbGxvYydkIHNlcGFyYXRlbHksIE5VTEwgaWYgdW51c2VkKSAqLwor CWludAkJCW51bURlYWQ7CQkvKiBudW1iZXIgb2YgY3VycmVudGx5IHN0b3JlZCBpdGVtcyAqLwor CWludAkJICAgKmRlYWRJdGVtczsJCS8qIGl0ZW1zW10td2lzZSBpbmRleGVzIG9mIGRlYWQgaXRl bXMgKi8KKworCS8qCisJICogSWYgd2UgYXJlIGRvaW5nIGFuIGluZGV4LW9ubHkgc2NhbiwgdGhp cyBpcyB0aGUgdHVwbGUgc3RvcmFnZSB3b3Jrc3BhY2UKKwkgKiBmb3IgdGhlIG1hdGNoaW5nIHR1 cGxlcyAodHVwbGVzIHJlZmVyZW5jZWQgYnkgaXRlbXNbXSkuICBUaGUgd29ya3NwYWNlCisJICog c2l6ZSBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBpbmRleCBBTSAoYmF0Y2hfdHVwbGVzX3dvcmtzcGFj ZSkuCisJICoKKwkgKiBjdXJyVHVwbGVzIHBvaW50cyBpbnRvIHRoZSB0cmFpbGluZyBwb3J0aW9u IG9mIHRoaXMgYWxsb2NhdGlvbiwKKwkgKiBkaXJlY3RseSBwYXN0IGl0ZW1zW10uICBJdCBpcyBO VUxMIGZvciBwbGFpbiBpbmRleCBzY2Fucy4KKwkgKi8KKwljaGFyCSAgICpjdXJyVHVwbGVzOwkJ LyogdHVwbGUgc3RvcmFnZSBmb3IgaXRlbXNbXSAqLworCUJhdGNoTWF0Y2hpbmdJdGVtIGl0ZW1z W0ZMRVhJQkxFX0FSUkFZX01FTUJFUl07IC8qIG1hdGNoaW5nIGl0ZW1zICovCit9IEluZGV4U2Nh bkJhdGNoRGF0YTsKKwordHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuQmF0Y2hEYXRhICpJbmRleFNj YW5CYXRjaDsKKworLyoKKyAqIFN0YXRlIHVzZWQgYnkgdGFibGUgQU1zIHRvIG1hbmFnZSBhbiBp bmRleCBzY2FuIHRoYXQgdXNlcyB0aGUgYW1nZXRiYXRjaAorICogaW50ZXJmYWNlLiAgU2NhbnMg dXNlIGEgcmluZyBidWZmZXIgb2YgYmF0Y2hlcyByZXR1cm5lZCBieSBhbWdldGJhdGNoLgorICoK KyAqIFRoaXMgZGF0YSBzdHJ1Y3R1cmUgcHJvdmlkZXMgdGFibGUgQU1zIHdpdGggYSB3YXkgdG8g cmVhZCBhaGVhZCBvZiB0aGUKKyAqIGN1cnJlbnQgcmVhZCBwb3NpdGlvbiBieSBfbXVsdGlwbGVf IGJhdGNoZXMvaW5kZXggcGFnZXMuICBUaGUgZnVydGhlciBvdXQKKyAqIHRoZSB0YWJsZSBBTSBy ZWFkcyBhaGVhZCBsaWtlIHRoaXMsIHRoZSBmdXJ0aGVyIGl0IGNhbiBzZWUgaW50byB0aGUgZnV0 dXJlLgorICogVGhhdCB3YXkgdGhlIHRhYmxlIEFNIGlzIGFibGUgdG8gcmVvcmRlciB3b3JrIGFz IGFnZ3Jlc3NpdmVseSBhcyBkZXNpcmVkLgorICovCit0eXBlZGVmIHN0cnVjdCBCYXRjaFJpbmdC dWZmZXIKK3sKKwkvKiBjdXJyZW50IHBvc2l0aW9ucyBpbiBJbmRleFNjYW5EZXNjRGF0YS5iYXRj aGJ1ZltdIGZvciBzY2FuICovCisJQmF0Y2hSaW5nSXRlbVBvcyBzY2FuUG9zOwkvKiBzY2FuJ3Mg cmVhZCBwb3NpdGlvbiAqLworCUJhdGNoUmluZ0l0ZW1Qb3MgbWFya1BvczsJLyogbWFyay9yZXN0 b3JlIHBvc2l0aW9uICovCisKKwkvKiBtYXJrUG9zJ3MgYmF0Y2ggKG5vdCBpbiByaW5nIGJ1ZmZl ciB3aGVuIG1hcmtCYXRjaCAhPSBzY2FuQmF0Y2gpICovCisJSW5kZXhTY2FuQmF0Y2ggbWFya0Jh dGNoOworCisJLyoKKwkgKiBoZWFkQmF0Y2ggaXMgYW4gaW5kZXggdG8gdGhlIGVhcmxpZXN0IHN0 aWxsLXZhbGlkIHJpbmcgYnVmZmVyIGJhdGNoCisJICogc2xvdCBpbiBiYXRjaGJ1ZltdLiAgVGhl IGFjdHVhbCBhcnJheSBwb3NpdGlvbiBmb3IgaXRzIEluZGV4U2NhbkJhdGNoCisJICogaXMgaGVh ZEJhdGNoICYgKElOREVYX1NDQU5fTUFYX0JBVENIRVMgLSAxKSwgc2luY2UgdGhlc2UgaW5kZXhl cyB1c2UKKwkgKiB1bnNpZ25lZCB3cmFwcGluZyBhcml0aG1ldGljLiAgaGVhZEJhdGNoIG11c3Qg YmUgdGhlIHNjYW4ncyBjdXJyZW50CisJICogc2NhbkJhdGNoIChpLmUuIHRoZSBjdXJyZW50IHNj YW5Qb3MgYmF0Y2gpLgorCSAqLworCXVpbnQ4CQloZWFkQmF0Y2g7CisKKwkvKgorCSAqIG5leHRC YXRjaCBpcyBhbiBpbmRleCB0byB0aGUgbmV4dCBfZW1wdHlfIHJpbmcgYnVmZmVyIGJhdGNoIHNs b3QgaW4KKwkgKiBiYXRjaGJ1ZltdIChpLmUuIGl0J3MgdGhlIHRhaWwgZW50cnkgb2Ygb3VyIHJp bmcgYnVmZmVyKS4gIFRoZSBhY3R1YWwKKwkgKiBiYXRjaGJ1ZltdIGFycmF5IHBvc2l0aW9uIGlz IG5leHRCYXRjaCAmIChJTkRFWF9TQ0FOX01BWF9CQVRDSEVTIC0gMSkuCisJICogTmV3IGJhdGNo ZXMgY2FuIG9ubHkgYmUgc2FmZWx5IGFwcGVuZGVkIHRvIHRoaXMgdGFpbCBwb3NpdGlvbiB3aGVu CisJICogIWluZGV4X3NjYW5fYmF0Y2hfZnVsbCgpIChzZWUgYWNjZXNzL2luZGV4YmF0Y2guaCku CisJICoKKwkgKiBOb3RlOiB0aGUgc2NhbidzIG1vc3QgcmVjZW50bHkgYXBwZW5kZWQgYmF0Y2gg aXMgYWx3YXlzIGxvY2F0ZWQgYXQKKwkgKiAobmV4dEJhdGNoIC0gMSkgJiAoSU5ERVhfU0NBTl9N QVhfQkFUQ0hFUyAtIDEpLgorCSAqLworCXVpbnQ4CQluZXh0QmF0Y2g7Cit9IEJhdGNoUmluZ0J1 ZmZlcjsKKwogc3RydWN0IEluZGV4U2Nhbkluc3RydW1lbnRhdGlvbjsKIAogLyoKICAqIFdlIHVz ZSB0aGUgc2FtZSBJbmRleFNjYW5EZXNjRGF0YSBzdHJ1Y3R1cmUgZm9yIGJvdGggYW1nZXR0dXBs ZS1iYXNlZAogICogYW5kIGFtZ2V0Yml0bWFwLWJhc2VkIGluZGV4IHNjYW5zLiAgU29tZSBmaWVs ZHMgYXJlIG9ubHkgcmVsZXZhbnQgaW4KLSAqIGFtZ2V0dHVwbGUtYmFzZWQgc2NhbnMuCisgKiBh bWdldHR1cGxlLWJhc2VkIHNjYW5zLiAgT3RoZXJzIGFyZSBvbmx5IHVzZWQgaW4gYW1nZXRiYXRj aC1iYXNlZCBzY2Fucy4KKyAqCisgKiBUaGUgcmluZyBidWZmZXIgdXNlZCBieSBhbWdldGJhdGNo IHNjYW5zIGlzIHN0b3JlZCBoZXJlIGFzIGEgZml4ZWQgYXJyYXkgb2YKKyAqIHBvaW50ZXJzIHRv IGJhdGNoZXMuICBXZSBuZWVkIGEgbWluaW11bSBvZiB0d28gcmluZyBidWZmZXIgYmF0Y2hlcyAo YnV0IHVzZQorICogSU5ERVhfU0NBTl9NQVhfQkFUQ0hFUyksIHNpbmNlIHRhYmxlIEFNcyBvbmx5 IHJlbW92ZSBhIGJhdGNoIGFmdGVyIHRoZXkndmUKKyAqIGFscmVhZHkgY2FsbGVkIGFtZ2V0YmF0 Y2ggYWdhaW4gYW5kIGFwcGVuZGVkIHRoZSByZXR1cm5lZCBiYXRjaC4KICAqLworI2RlZmluZSBJ TkRFWF9TQ0FOX0NBQ0hFX0JBVENIRVMJMgorI2RlZmluZSBJTkRFWF9TQ0FOX01BWF9CQVRDSEVT CQk2NAorCiB0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5EZXNjRGF0YQogewogCS8qIHNjYW4gcGFy YW1ldGVycyAqLwpAQCAtMTM5LDYgKzI5MywyNiBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5E ZXNjRGF0YQogCWludAkJCW51bWJlck9mT3JkZXJCeXM7CS8qIG51bWJlciBvZiBvcmRlcmluZyBv cGVyYXRvcnMgKi8KIAlzdHJ1Y3QgU2NhbktleURhdGEgKmtleURhdGE7CS8qIGFycmF5IG9mIGlu ZGV4IHF1YWxpZmllciBkZXNjcmlwdG9ycyAqLwogCXN0cnVjdCBTY2FuS2V5RGF0YSAqb3JkZXJC eURhdGE7CS8qIGFycmF5IG9mIG9yZGVyaW5nIG9wIGRlc2NyaXB0b3JzICovCisKKwkvKiBpbmRl eCBhY2Nlc3MgbWV0aG9kJ3MgcHJpdmF0ZSBzdGF0ZSAqLworCXZvaWQJICAgKm9wYXF1ZTsJCQkv KiBhY2Nlc3MtbWV0aG9kLXNwZWNpZmljIGluZm8gKi8KKworCS8qIHNjYW4ncyBhbWdldGJhdGNo IHN0YXRlIChvbmx5IHVzZWQgYnkgYW1nZXRiYXRjaC91c2ViYXRjaHJpbmcgc2NhbnMpICovCisJ QmF0Y2hSaW5nQnVmZmVyIGJhdGNocmluZ2J1ZjsKKworCS8qCisJICogQXJyYXkgb2YgcG9pbnRl cnMgdG8gcmVjeWNsYWJsZSBiYXRjaGVzLCB1c2VkIGJ5IGFsbCBhbWdldGJhdGNoIHNjYW5zCisJ ICogYW5kIGJ5IGFtZ2V0Yml0bWFwIHNjYW5zIG9mIGFuIGluZGV4IEFNIHRoYXQgc3VwcG9ydHMg YW1nZXRiYXRjaAorCSAqLworCUluZGV4U2NhbkJhdGNoIGJhdGNoY2FjaGVbSU5ERVhfU0NBTl9D QUNIRV9CQVRDSEVTXTsKKworCS8qIEFycmF5IG9mIHBvaW50ZXJzIHRvIGJhdGNoZXMsIHJlZmVy ZW5jZWQgd2l0aGluIGJhdGNocmluZ2J1ZiAqLworCUluZGV4U2NhbkJhdGNoIGJhdGNoYnVmW0lO REVYX1NDQU5fTUFYX0JBVENIRVNdOworCisJYm9vbAkJdXNlYmF0Y2hyaW5nOwkvKiBzY2FuIHVz ZXMgYW1nZXRiYXRjaC9iYXRjaHJpbmdidWY/ICovCisJYm9vbAkJYmF0Y2hJbW1lZGlhdGVVbmd1 YXJkOwkvKiBlYWdlcmx5IGRyb3AgVElEIHJlY3ljbGluZworCQkJCQkJCQkJCSAqIGludGVybG9j az8gKi8KKwogCWJvb2wJCXhzX3dhbnRfaXR1cDsJLyogY2FsbGVyIHJlcXVlc3RzIGluZGV4IHR1 cGxlcyAqLwogCWJvb2wJCXhzX3RlbXBfc25hcDsJLyogdW5yZWdpc3RlciBzbmFwc2hvdCBhdCBz Y2FuIGVuZD8gKi8KIApAQCAtMTQ3LDEzICszMjEsMTIgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhT Y2FuRGVzY0RhdGEKIAlib29sCQlpZ25vcmVfa2lsbGVkX3R1cGxlczsJLyogZG8gbm90IHJldHVy biBraWxsZWQgZW50cmllcyAqLwogCWJvb2wJCXhhY3RTdGFydGVkSW5SZWNvdmVyeTsJLyogcHJl dmVudHMga2lsbGluZy9zZWVpbmcga2lsbGVkCiAJCQkJCQkJCQkJICogdHVwbGVzICovCi0KLQkv KiBpbmRleCBhY2Nlc3MgbWV0aG9kJ3MgcHJpdmF0ZSBzdGF0ZSAqLwotCXZvaWQJICAgKm9wYXF1 ZTsJCQkvKiBhY2Nlc3MtbWV0aG9kLXNwZWNpZmljIGluZm8gKi8KKwkvKiB4c19zbmFwc2hvdCB1 c2VzIGFuIE1WQ0Mgc25hcHNob3Q/ICovCisJYm9vbAkJTVZDQ1NjYW47CiAKIAkvKgotCSAqIElu c3RydW1lbnRhdGlvbiBjb3VudGVycyBtYWludGFpbmVkIGJ5IGFsbCBpbmRleCBBTXMgZHVyaW5n IGJvdGgKLQkgKiBhbWdldHR1cGxlIGNhbGxzIGFuZCBhbWdldGJpdG1hcCBjYWxscyAodW5sZXNz IGZpZWxkIHJlbWFpbnMgTlVMTCkKKwkgKiBJbnN0cnVtZW50YXRpb24gY291bnRlcnMgbWFpbnRh aW5lZCBkdXJpbmcgYW1nZXRiYXRjaCwgYW1nZXRiaXRtYXAsIGFuZAorCSAqIGFtZ2V0dHVwbGUg c2NhbnMgKHVubGVzcyBmaWVsZCByZW1haW5zIE5VTEwpCiAJICovCiAJc3RydWN0IEluZGV4U2Nh bkluc3RydW1lbnRhdGlvbiAqaW5zdHJ1bWVudDsKIApAQCAtMTc3LDggKzM1MCw4IEBAIHR5cGVk ZWYgc3RydWN0IEluZGV4U2NhbkRlc2NEYXRhCiAKIAkvKgogCSAqIFJlc29sdmVkIHRhYmxlX2lu ZGV4X2dldG5leHRfc2xvdCBjYWxsYmFjaywgd2hpY2ggaXMgc2V0IGJ5Ci0JICogdGFibGVfaW5k ZXhfc2Nhbl9iZWdpbiBhdCB0aGUgc3RhcnQgb2YgYW1nZXR0dXBsZSBzY2Fucy4gIFJlcG9ydHMg dmlhCi0JICogKnJlY2hlY2sgd2hldGhlciB0aGUgc2NhbiBrZXlzIG11c3QgYmUgcmVjaGVja2Vk LgorCSAqIHRhYmxlX2luZGV4X3NjYW5fYmVnaW4gYXQgdGhlIHN0YXJ0IG9mIGFtZ2V0YmF0Y2gv YW1nZXR0dXBsZSBzY2Fucy4KKwkgKiBSZXBvcnRzIHZpYSAqcmVjaGVjayB3aGV0aGVyIHRoZSBz Y2FuIGtleXMgbXVzdCBiZSByZWNoZWNrZWQuCiAJICovCiAJYm9vbAkJKCp4c19nZXRuZXh0X3Ns b3QpIChzdHJ1Y3QgSW5kZXhTY2FuRGVzY0RhdGEgKnNjYW4sCiAJCQkJCQkJCQlTY2FuRGlyZWN0 aW9uIGRpcmVjdGlvbiwKQEAgLTE5Myw2ICszNjYsMjQgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhT Y2FuRGVzY0RhdGEKIAkgKi8KIAlib29sCQl4c19yZWNoZWNrOwogCisJLyogYmF0Y2ggc2l6ZSBp bmZvcm1hdGlvbiwgc2V0IG9uY2UgYnkgaW5kZXggQU0gaW4gYW1iZWdpbnNjYW4gKi8KKwl1aW50 MTYJCW1heGl0ZW1zYmF0Y2g7CS8qIHNpemUgb2YgZWFjaCBiYXRjaCdzIGl0ZW1zW10gYXJyYXkg Ki8KKwl1aW50MTYJCWJhdGNoX2luZGV4X29wYXF1ZV9zdGF0aWM7CS8qIGNvbXBpbGUtdGltZSBv cGFxdWUgc2l6ZSAqLworCXVpbnQxNgkJYmF0Y2hfdHVwbGVzX3dvcmtzcGFjZTsgLyogY3VyclR1 cGxlcyB3b3Jrc3BhY2Ugc2l6ZSAqLworCisJLyoKKwkgKiBUYWJsZSBBTSBiYXRjaCBvcGFxdWUg c2l6aW5nLCBzZXQgb25jZSBieSBpbmRleF9zY2FuX2JlZ2luIChleGNlcHQKKwkgKiBkdXJpbmcg Yml0bWFwIHNjYW5zKQorCSAqLworCXVpbnQxNgkJYmF0Y2hfb3BhcXVlX3NpemU7CS8qIHRhYmxl IEFNIGZpeGVkLXNpemUgb3BhcXVlIGFyZWEgc2l6ZSAqLworCXVpbnQxNgkJYmF0Y2hfcGVyX2l0 ZW1fc2l6ZTsJLyogcGVyLWl0ZW0gdGFibGUgQU0gYXJlYSBzaXplICovCisKKwkvKgorCSAqIE9m ZnNldCB1c2VkIGJ5IGluZGV4X3NjYW5fYmF0Y2hfYmFzZSAoc2V0IG9uIGZpcnN0IGJhdGNoIGFs bG9jKS4gIFNlZQorCSAqIGFjY2Vzcy9pbmRleGJhdGNoLmguCisJICovCisJU2l6ZQkJYmF0Y2hf YmFzZV9vZmZzZXQ7CisKIAkvKgogCSAqIFdoZW4gZmV0Y2hpbmcgd2l0aCBhbiBvcmRlcmluZyBv cGVyYXRvciwgdGhlIHZhbHVlcyBvZiB0aGUgT1JERVIgQlkKIAkgKiBleHByZXNzaW9ucyBvZiB0 aGUgbGFzdCByZXR1cm5lZCB0dXBsZSwgYWNjb3JkaW5nIHRvIHRoZSBpbmRleC4gIElmCmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNz L3RhYmxlYW0uaAppbmRleCBlMWVlOTAyMjIuLjAyZjYyODEwYSAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvYWNjZXNzL3RhYmxlYW0uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5o CkBAIC00NTQsMTAgKzQ1NCwxMiBAQCB0eXBlZGVmIHN0cnVjdCBUYWJsZUFtUm91dGluZQogCSAq IGZsYWdzIGlzIGEgYml0bWFzayBvZiBTY2FuT3B0aW9ucyBhZmZlY3RpbmcgdW5kZXJseWluZyB0 YWJsZSBzY2FuCiAJICogYmVoYXZpb3IuIFNlZSBzY2FuX2JlZ2luKCkgZm9yIG1vcmUgaW5mb3Jt YXRpb24gb24gcGFzc2luZyB0aGVzZS4KIAkgKgotCSAqIENhbGxiYWNrIGlzIHJlc3BvbnNpYmxl IGZvciBzZXR0aW5nIEluZGV4U2NhbkRlc2MueHNfZ2V0bmV4dF9zbG90IHRvCi0JICogdGhlIGFw cHJvcHJpYXRlIHNsb3QtYmFzZWQgY2FsbGJhY2suICBUdXBsZXMgYXJlIHRoZW4gcmV0dXJuZWQg dGhyb3VnaAotCSAqIHRoZSBjYWxsZXIncyBzbG90LCB2aWEgdGFibGVfaW5kZXhfZ2V0bmV4dF9z bG90KCkuICBObyBzZXBhcmF0ZQotCSAqIHNsb3QtYmFzZWQgY2FsbGJhY2sgZXhpc3RzIGluIHRo aXMgc3RydWN0IQorCSAqIENhbGxiYWNrIGlzIHJlc3BvbnNpYmxlIGZvciBpbml0aWFsaXppbmcg dGhlIHNjYW4ncyBiYXRjaCByaW5nIGJ1ZmZlcgorCSAqICh3aGVuIHRoZSBzY2FuJ3MgaW5kZXgg QU0gc3VwcG9ydHMgdGhlIGFtZ2V0YmF0Y2ggaW50ZXJmYWNlKSwgYW5kIGZvcgorCSAqIHNldHRp bmcgSW5kZXhTY2FuRGVzYy54c19nZXRuZXh0X3Nsb3QgdG8gdGhlIGFwcHJvcHJpYXRlIHNsb3Qt YmFzZWQKKwkgKiBjYWxsYmFjay4gIFR1cGxlcyBhcmUgdGhlbiByZXR1cm5lZCB0aHJvdWdoIHRo ZSBjYWxsZXIncyBzbG90LCB2aWEKKwkgKiB0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3QoKS4gIE5v IHNlcGFyYXRlIHNsb3QtYmFzZWQgY2FsbGJhY2sgZXhpc3RzIGluCisJICogdGhpcyBzdHJ1Y3Qh CiAJICoKIAkgKiBJbiBwcmluY2lwbGUgYSBzaW5nbGUgZ2VuZXJhbC1wdXJwb3NlIGNhbGxiYWNr IChzdG9yZWQgaGVyZSkgd291bGQKIAkgKiBzdWZmaWNlLCBidXQgdXNpbmcgc3BlY2lhbGl6ZWQg dmFyaWFudHMgYWxsb3dzIHRoZSB0YWJsZSBBTSB0byBwcm92aWRlCkBAIC00NzUsMjAgKzQ3Nyw0 NCBAQCB0eXBlZGVmIHN0cnVjdCBUYWJsZUFtUm91dGluZQogCSAqIGNvbHVtbnMgZG8gbm90IGNo YW5nZSwgbmVlZCB0byByZXR1cm4gdGhlIGN1cnJlbnQvY29ycmVjdCB2ZXJzaW9uIG9mCiAJICog dGhlIHR1cGxlIHRoYXQgaXMgdmlzaWJsZSB0byB0aGUgc25hcHNob3QsIGV2ZW4gaWYgdGhlIHRp ZCBwb2ludHMgdG8gYW4KIAkgKiBvbGRlciB2ZXJzaW9uIG9mIHRoZSB0dXBsZS4KKwkgKgorCSAq IENhbGxiYWNrIGFsc28gaW5pdGlhbGl6ZXMgdGhlIHNjYW4gZGVzY3JpcHRvcidzIGJhdGNoX29w YXF1ZV9zaXplIGFuZAorCSAqIGJhdGNoX3Blcl9pdGVtX3NpemUgZmllbGRzLCB0byBsZXQgdGhl IGNvcmUgY29kZSBrbm93IGhvdyBtdWNoIG1lbW9yeQorCSAqIHdpbGwgYmUgcmVxdWlyZWQgaW4g dGhlIHRhYmxlIEFNIHBvcnRpb25zIG9mIGVhY2ggYmF0Y2ggYWxsb2NhdGlvbgorCSAqIChkdXJp bmcgYW1nZXRiYXRjaCBpbmRleCBzY2FucykuICBTZWUgcmVsc2Nhbi5oIGZvciBmdWxsIGRldGFp bHMuCiAJICovCiAJdm9pZAkJKCppbmRleF9zY2FuX2JlZ2luKSAoSW5kZXhTY2FuRGVzYyBzY2Fu LCB1aW50MzIgZmxhZ3MpOwogCiAJLyoKLQkgKiBJbmZvcm0gdGhlIHRhYmxlIEFNIHRoYXQgdGhl cmUncyB0byBiZSBlaXRoZXIgYSByZXNjYW4gb3IgYSByZXN0b3JlIG9mCi0JICogYSBtYXJrZWQg cG9zaXRpb24sIG9yIHRoYXQgdGhlIHNjYW4gaGFzIHJ1biBvdXQgb2YgaW5kZXggZW50cmllcy4K KwkgKiBJbml0aWFsaXplIHRhYmxlIEFNJ3MgcGVyLWJhdGNoIG9wYXF1ZSBhcmVhIHdpdGhpbiBh IGJhdGNoIGFsbG9jYXRpb24uCisJICoKKwkgKiBDYWxsZWQgYnkgaW5kZXhhbV91dGlsX2FsbG9j X2JhdGNoIGZvciBlYWNoIG5ldyBvciByZWN5Y2xlZCBiYXRjaCwgYnV0CisJICogb25seSB3aGVu IHRoZSB0YWJsZSBBTSByZXNlcnZlZCBhbiBvcGFxdWUgYXJlYSBmb3IgdGhlIHNjYW4gKGJ5IHNl dHRpbmcKKwkgKiBiYXRjaF9vcGFxdWVfc2l6ZSBhbmQvb3IgYmF0Y2hfcGVyX2l0ZW1fc2l6ZSB0 byBhIHZhbHVlID4gMCkuCiAJICovCi0Jdm9pZAkJKCppbmRleF9zY2FuX3Jlc2V0KSAoSW5kZXhT Y2FuRGVzYyBzY2FuKTsKKwl2b2lkCQkoKmluZGV4X3NjYW5fYmF0Y2hfaW5pdCkgKEluZGV4U2Nh bkRlc2Mgc2NhbiwKKwkJCQkJCQkJCQkgIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKKworCS8qCisJ ICogSW5mb3JtIHRoZSB0YWJsZSBBTSB0aGF0IHRoZXJlJ3MgdG8gYmUgYSByZXNjYW4uCisJICov CisJdm9pZAkJKCppbmRleF9zY2FuX3Jlc2NhbikgKEluZGV4U2NhbkRlc2Mgc2Nhbik7CiAKIAkv KgogCSAqIFJlbGVhc2UgcmVzb3VyY2VzIGFuZCBkZWFsbG9jYXRlIGluZGV4IHNjYW4gc3RhdGUu CiAJICovCiAJdm9pZAkJKCppbmRleF9zY2FuX2VuZCkgKEluZGV4U2NhbkRlc2Mgc2Nhbik7CiAK KwkvKgorCSAqIE1hcmsgdGhlIGN1cnJlbnQgc2NhbiBwb3NpdGlvbiBzbyBpdCBjYW4gYmUgcmVz dG9yZWQgbGF0ZXIKKwkgKi8KKwl2b2lkCQkoKmluZGV4X3NjYW5fbWFya3BvcykgKEluZGV4U2Nh bkRlc2Mgc2Nhbik7CisKKwkvKgorCSAqIFJlc3RvcmUgYSBwcmV2aW91c2x5IG1hcmtlZCBzY2Fu IHBvc2l0aW9uCisJICovCisJdm9pZAkJKCppbmRleF9zY2FuX3Jlc3RycG9zKSAoSW5kZXhTY2Fu RGVzYyBzY2FuKTsKKwogCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCSAqIENhbGxiYWNrcyBmb3Igbm9u LW1vZGlmeWluZyBvcGVyYXRpb25zIG9uIGluZGl2aWR1YWwgdHVwbGVzCiAJICogLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCkBAIC0xMjczLDE1ICsxMjk5LDUzIEBAIHRhYmxlX2luZGV4X3NjYW5fYmVnaW4oSW5k ZXhTY2FuRGVzYyBzY2FuLCB1aW50MzIgZmxhZ3MpCiB9CiAKIC8qCi0gKiBJbmZvcm0gdGhlIHRh YmxlIEFNIHRoYXQgdGhlcmUncyB0byBiZSBlaXRoZXIgYSByZXNjYW4gb3IgYSByZXN0b3JlIG9m IGEKLSAqIG1hcmtlZCBwb3NpdGlvbiwgb3IgdGhhdCB0aGUgc2NhbiBoYXMgcnVuIG91dCBvZiBp bmRleCBlbnRyaWVzLgorICogSW5mb3JtIHRoZSB0YWJsZSBBTSB0aGF0IHRoZXJlJ3MgdG8gYmUg YSByZXNjYW4uCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZAotdGFibGVfaW5kZXhfc2Nhbl9yZXNl dChJbmRleFNjYW5EZXNjIHNjYW4pCit0YWJsZV9pbmRleF9zY2FuX3Jlc2NhbihJbmRleFNjYW5E ZXNjIHNjYW4pCiB7CiAJQXNzZXJ0KHNjYW4tPnhzX3RhYmxlX29wYXF1ZSk7CiAKLQlzY2FuLT5o ZWFwUmVsYXRpb24tPnJkX3RhYmxlYW0tPmluZGV4X3NjYW5fcmVzZXQoc2Nhbik7CisJc2Nhbi0+ aGVhcFJlbGF0aW9uLT5yZF90YWJsZWFtLT5pbmRleF9zY2FuX3Jlc2NhbihzY2FuKTsKK30KKwor LyoKKyAqIE1hcmsgdGhlIGN1cnJlbnQgc2NhbiBwb3NpdGlvbiBzbyBpdCBjYW4gYmUgcmVzdG9y ZWQgbGF0ZXIKKyAqLworc3RhdGljIGlubGluZSB2b2lkCit0YWJsZV9pbmRleF9zY2FuX21hcmtw b3MoSW5kZXhTY2FuRGVzYyBzY2FuKQoreworCUFzc2VydChzY2FuLT54c190YWJsZV9vcGFxdWUg JiYgc2Nhbi0+dXNlYmF0Y2hyaW5nKTsKKworCXNjYW4tPmhlYXBSZWxhdGlvbi0+cmRfdGFibGVh bS0+aW5kZXhfc2Nhbl9tYXJrcG9zKHNjYW4pOworfQorCisvKgorICogUmVzdG9yZSBhIHByZXZp b3VzbHkgbWFya2VkIHNjYW4gcG9zaXRpb24KKyAqCisgKiBOT1RFOiB0aGlzIG9ubHkgcmVzdG9y ZXMgdGhlIGJhdGNoIHBvc2l0aW9uYWwgc3RhdGUgb2YgdGhlIHRhYmxlIEFNLiAgU2VlCisgKiBj b21tZW50cyBmb3IgRXhlY1Jlc3RyUG9zKCkuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAordGFi bGVfaW5kZXhfc2Nhbl9yZXN0cnBvcyhJbmRleFNjYW5EZXNjIHNjYW4pCit7CisJQXNzZXJ0KHNj YW4tPnhzX3RhYmxlX29wYXF1ZSAmJiBzY2FuLT51c2ViYXRjaHJpbmcpOworCUFzc2VydCghc2Nh bi0+a2lsbF9wcmlvcl90dXBsZSk7CS8qIG5vdCB1c2VkIHdpdGggYW1nZXRiYXRjaCAqLworCisJ LyoKKwkgKiBNYXJrL3Jlc3RvcmUgb25seSB3b3JrcyBjb3JyZWN0bHkgd2hlbiB0aGVyZSdzIGF0 IG1vc3Qgb25lIHJldHVybmFibGUKKwkgKiB0dXBsZSBwZXIgc2NhbiBpdGVtLCBzbyB0aGF0IHJl c3RvcmluZyB0aGUgcHJpb3Igc3RhdGUgYXQgdGhlIHNjYW4gaXRlbQorCSAqIGdyYW51bGFyaXR5 IGlzIHN1ZmZpY2llbnQuICBUYWJsZSBBTXMgdGhhdCBjYW4gcmVhY2ggbXVsdGlwbGUgcm93CisJ ICogdmVyc2lvbnMgdGhyb3VnaCBhIHNpbmdsZSBUSUQgY2FuIGdlbmVyYWxseSBvbmx5IGd1YXJh bnRlZSB0aGF0IHVuZGVyCisJICogTVZDQyBzbmFwc2hvdHMgKGZvciBoZWFwLCBhbiBNVkNDLXNh ZmUgc25hcHNob3QgZW5zdXJlcyB0aGF0IHRoZXJlJ3MgYXQKKwkgKiBtb3N0IG9uZSByZXR1cm5h YmxlIHR1cGxlIGluIGVhY2ggSE9UIGNoYWluKS4gIFNpbmNlIHRoZSBvbmx5IGN1cnJlbnQKKwkg KiB1c2VyIG9mIG1hcmsvcmVzdG9yZSBmdW5jdGlvbmFsaXR5IGlzIG5vZGVNZXJnZWpvaW4uYywg dGhpcyBlZmZlY3RpdmVseQorCSAqIG1lYW5zIHRoYXQgbWVyZ2Utam9pbiBwbGFucyBvbmx5IHdv cmsgZm9yIE1WQ0Mgc25hcHNob3RzLgorCSAqLworCUFzc2VydChzY2FuLT5NVkNDU2Nhbik7CisJ c2Nhbi0+eHNfaGVhcF9jb250aW51ZSA9IGZhbHNlOworCisJc2Nhbi0+aGVhcFJlbGF0aW9uLT5y ZF90YWJsZWFtLT5pbmRleF9zY2FuX3Jlc3RycG9zKHNjYW4pOwogfQogCiAvKgpAQCAtMTI5Niw2 ICsxMzYwLDIyIEBAIHRhYmxlX2luZGV4X3NjYW5fZW5kKEluZGV4U2NhbkRlc2Mgc2NhbikKIAlz Y2FuLT5oZWFwUmVsYXRpb24tPnJkX3RhYmxlYW0tPmluZGV4X3NjYW5fZW5kKHNjYW4pOwogfQog CisvKgorICogSW5pdGlhbGl6ZSB0YWJsZSBBTSdzIHBlci1iYXRjaCBvcGFxdWUgYXJlYSB3aXRo aW4gYSBiYXRjaCBhbGxvY2F0aW9uLgorICoKKyAqIENhbGxlZCBieSBpbmRleGFtX3V0aWxfYWxs b2NfYmF0Y2ggZm9yIGVhY2ggbmV3IG9yIHJlY3ljbGVkIGJhdGNoLCBidXQgb25seQorICogd2hl biB0aGUgdGFibGUgQU0gcmVzZXJ2ZWQgYW4gb3BhcXVlIGFyZWEgZm9yIHRoZSBzY2FuIChzZWUg dGhlIGNhbGxiYWNrJ3MKKyAqIGRvY3VtZW50YXRpb24pLgorICovCitzdGF0aWMgaW5saW5lIHZv aWQKK3RhYmxlX2luZGV4X3NjYW5fYmF0Y2hfaW5pdChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4 U2NhbkJhdGNoIGJhdGNoKQoreworCUFzc2VydChzY2FuLT54c190YWJsZV9vcGFxdWUgJiYgc2Nh bi0+dXNlYmF0Y2hyaW5nKTsKKwlBc3NlcnQoc2Nhbi0+YmF0Y2hfb3BhcXVlX3NpemUgPiAwIHx8 IHNjYW4tPmJhdGNoX3Blcl9pdGVtX3NpemUgPiAwKTsKKworCXNjYW4tPmhlYXBSZWxhdGlvbi0+ cmRfdGFibGVhbS0+aW5kZXhfc2Nhbl9iYXRjaF9pbml0KHNjYW4sIGJhdGNoKTsKK30KKwogLyoK ICAqIFJldHVybiB0aGUgbmV4dCB0dXBsZSBmcm9tIGFuIGluZGV4IHNjYW4gdGhyb3VnaCBgc2xv dGAsIHNjYW5uaW5nIGluIHRoZQogICogc3BlY2lmaWVkIGRpcmVjdGlvbi4gIFJldHVybnMgdHJ1 ZSBpZiBhIHR1cGxlIHNhdGlzZnlpbmcgdGhlIHNjYW4ga2V5cyBhbmQKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVz LmgKaW5kZXggMjdhMmM2ODE1Li4wYWMxNmI5MzEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25v ZGVzL3BhdGhub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCkBAIC0x NDM3LDEyICsxNDM3LDEyIEBAIHR5cGVkZWYgc3RydWN0IEluZGV4T3B0SW5mbwogCWJvb2wJCWFt b3B0aW9uYWxrZXk7CiAJYm9vbAkJYW1zZWFyY2hhcnJheTsKIAlib29sCQlhbXNlYXJjaG51bGxz OwotCS8qIGRvZXMgQU0gaGF2ZSBhbWdldHR1cGxlIGludGVyZmFjZT8gKi8KLQlib29sCQlhbWhh c2dldHR1cGxlOworCS8qIGRvZXMgQU0gaGF2ZSBhbWdldGJhdGNoIChvciBnZXR0dXBsZSkgaW50 ZXJmYWNlPyAqLworCWJvb2wJCWFtY2FucGxhaW5zY2FuOwogCS8qIGRvZXMgQU0gaGF2ZSBhbWdl dGJpdG1hcCBpbnRlcmZhY2U/ICovCiAJYm9vbAkJYW1oYXNnZXRiaXRtYXA7CiAJYm9vbAkJYW1j YW5wYXJhbGxlbDsKLQkvKiBkb2VzIEFNIGhhdmUgYW1tYXJrcG9zIGludGVyZmFjZT8gKi8KKwkv KiBpcyBBTSBwcmVwYXJlZCBmb3IgdXMgdG8gcmVzdG9yZSBhIG1hcms/ICovCiAJYm9vbAkJYW1j YW5tYXJrcG9zOwogCS8qIEFNJ3MgY29zdCBlc3RpbWF0b3IgKi8KIAkvKiBSYXRoZXIgdGhhbiBp bmNsdWRlIGFtYXBpLmggaGVyZSwgd2UgZGVjbGFyZSBhbWNvc3Rlc3RpbWF0ZSBsaWtlIHRoaXMg Ki8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW4uYyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9icmluL2JyaW4uYwppbmRleCBiZGIzMDc1MmUuLjJkOWQwNGFhMyAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jCisrKyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9icmluL2JyaW4uYwpAQCAtMjY0LDYgKzI2NCw3IEBAIGJyaW5oYW5kbGVyKFBHX0ZVTkNU SU9OX0FSR1MpCiAJCS5hbWNvbnNpc3RlbnRlcXVhbGl0eSA9IGZhbHNlLAogCQkuYW1jb25zaXN0 ZW50b3JkZXJpbmcgPSBmYWxzZSwKIAkJLmFtY2FuYmFja3dhcmQgPSBmYWxzZSwKKwkJLmFtY2Fu bWFya3BvcyA9IGZhbHNlLAogCQkuYW1jYW51bmlxdWUgPSBmYWxzZSwKIAkJLmFtY2FubXVsdGlj b2wgPSB0cnVlLAogCQkuYW1vcHRpb25hbGtleSA9IHRydWUsCkBAIC0yOTgsMTAgKzI5OSwxMiBA QCBicmluaGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCQkuYW1iZWdpbnNjYW4gPSBicmluYmVn aW5zY2FuLAogCQkuYW1yZXNjYW4gPSBicmlucmVzY2FuLAogCQkuYW1nZXR0dXBsZSA9IE5VTEws CisJCS5hbWdldGJhdGNoID0gTlVMTCwKKwkJLmFtdW5ndWFyZGJhdGNoID0gTlVMTCwKKwkJLmFt a2lsbGl0ZW1zYmF0Y2ggPSBOVUxMLAogCQkuYW1nZXRiaXRtYXAgPSBicmluZ2V0Yml0bWFwLAog CQkuYW1lbmRzY2FuID0gYnJpbmVuZHNjYW4sCi0JCS5hbW1hcmtwb3MgPSBOVUxMLAotCQkuYW1y ZXN0cnBvcyA9IE5VTEwsCisJCS5hbXBvc3Jlc2V0ID0gTlVMTCwKIAkJLmFtZXN0aW1hdGVwYXJh bGxlbHNjYW4gPSBOVUxMLAogCQkuYW1pbml0cGFyYWxsZWxzY2FuID0gTlVMTCwKIAkJLmFtcGFy YWxsZWxyZXNjYW4gPSBOVUxMLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9n aW5nZXQuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2luZ2V0LmMKaW5kZXggNmIxNDhlNjlh Li44ZjcwMzNkNjIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2luZ2V0LmMK KysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW5nZXQuYwpAQCAtMTk1Myw5ICsxOTUzLDkg QEAgZ2luZ2V0Yml0bWFwKEluZGV4U2NhbkRlc2Mgc2NhbiwgVElEQml0bWFwICp0Ym0pCiAJICog aW50byB0aGUgbWFpbiBpbmRleCwgYW5kIHNvIHdlIG1pZ2h0IHZpc2l0IGl0IGEgc2Vjb25kIHRp bWUgZHVyaW5nIHRoZQogCSAqIG1haW4gc2Nhbi4gIFRoaXMgaXMgb2theSBiZWNhdXNlIHdlJ2xs IGp1c3QgcmUtc2V0IHRoZSBzYW1lIGJpdCBpbiB0aGUKIAkgKiBiaXRtYXAuICAoVGhlIHBvc3Np YmlsaXR5IG9mIGR1cGxpY2F0ZSB2aXNpdHMgaXMgYSBtYWpvciByZWFzb24gd2h5IEdJTgotCSAq IGNhbid0IHN1cHBvcnQgdGhlIGFtZ2V0dHVwbGUgQVBJLCBob3dldmVyLikgTm90ZSB0aGF0IGl0 IHdvdWxkIG5vdCBkbwotCSAqIHRvIHNjYW4gdGhlIG1haW4gaW5kZXggYmVmb3JlIHRoZSBwZW5k aW5nIGxpc3QsIHNpbmNlIGNvbmN1cnJlbnQKLQkgKiBjbGVhbnVwIGNvdWxkIHRoZW4gbWFrZSB1 cyBtaXNzIGVudHJpZXMgZW50aXJlbHkuCisJICogY2FuJ3Qgc3VwcG9ydCBlaXRoZXIgdGhlIGFt Z2V0dHVwbGUgb3IgYW1nZXRiYXRjaCBBUEkuKSBOb3RlIHRoYXQgaXQKKwkgKiB3b3VsZCBub3Qg ZG8gdG8gc2NhbiB0aGUgbWFpbiBpbmRleCBiZWZvcmUgdGhlIHBlbmRpbmcgbGlzdCwgc2luY2UK KwkgKiBjb25jdXJyZW50IGNsZWFudXAgY291bGQgdGhlbiBtYWtlIHVzIG1pc3MgZW50cmllcyBl bnRpcmVseS4KIAkgKi8KIAlzY2FuUGVuZGluZ0luc2VydChzY2FuLCB0Ym0sICZudGlkcyk7CiAK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2ludXRpbC5jIGIvc3JjL2JhY2tl bmQvYWNjZXNzL2dpbi9naW51dGlsLmMKaW5kZXggZTdjYmE4MWQ0Li4wZThiNmE1NDkgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2ludXRpbC5jCisrKyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy9naW4vZ2ludXRpbC5jCkBAIC00OSw2ICs0OSw3IEBAIGdpbmhhbmRsZXIoUEdfRlVO Q1RJT05fQVJHUykKIAkJLmFtY29uc2lzdGVudGVxdWFsaXR5ID0gZmFsc2UsCiAJCS5hbWNvbnNp c3RlbnRvcmRlcmluZyA9IGZhbHNlLAogCQkuYW1jYW5iYWNrd2FyZCA9IGZhbHNlLAorCQkuYW1j YW5tYXJrcG9zID0gZmFsc2UsCiAJCS5hbWNhbnVuaXF1ZSA9IGZhbHNlLAogCQkuYW1jYW5tdWx0 aWNvbCA9IHRydWUsCiAJCS5hbW9wdGlvbmFsa2V5ID0gdHJ1ZSwKQEAgLTgzLDEwICs4NCwxMiBA QCBnaW5oYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCS5hbWJlZ2luc2NhbiA9IGdpbmJlZ2lu c2NhbiwKIAkJLmFtcmVzY2FuID0gZ2lucmVzY2FuLAogCQkuYW1nZXR0dXBsZSA9IE5VTEwsCisJ CS5hbWdldGJhdGNoID0gTlVMTCwKKwkJLmFtdW5ndWFyZGJhdGNoID0gTlVMTCwKKwkJLmFta2ls bGl0ZW1zYmF0Y2ggPSBOVUxMLAogCQkuYW1nZXRiaXRtYXAgPSBnaW5nZXRiaXRtYXAsCiAJCS5h bWVuZHNjYW4gPSBnaW5lbmRzY2FuLAotCQkuYW1tYXJrcG9zID0gTlVMTCwKLQkJLmFtcmVzdHJw b3MgPSBOVUxMLAorCQkuYW1wb3NyZXNldCA9IE5VTEwsCiAJCS5hbWVzdGltYXRlcGFyYWxsZWxz Y2FuID0gTlVMTCwKIAkJLmFtaW5pdHBhcmFsbGVsc2NhbiA9IE5VTEwsCiAJCS5hbXBhcmFsbGVs cmVzY2FuID0gTlVMTCwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3Qu YyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3QuYwppbmRleCA4NTY1ZTIyNWIuLjY3YjE2 MDUzYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdC5jCisrKyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3QuYwpAQCAtNjksNiArNjksNyBAQCBnaXN0aGFuZGxl cihQR19GVU5DVElPTl9BUkdTKQogCQkuYW1jb25zaXN0ZW50ZXF1YWxpdHkgPSBmYWxzZSwKIAkJ LmFtY29uc2lzdGVudG9yZGVyaW5nID0gZmFsc2UsCiAJCS5hbWNhbmJhY2t3YXJkID0gZmFsc2Us CisJCS5hbWNhbm1hcmtwb3MgPSBmYWxzZSwKIAkJLmFtY2FudW5pcXVlID0gZmFsc2UsCiAJCS5h bWNhbm11bHRpY29sID0gdHJ1ZSwKIAkJLmFtb3B0aW9uYWxrZXkgPSB0cnVlLApAQCAtMTAzLDEw ICsxMDQsMTIgQEAgZ2lzdGhhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAkJLmFtYmVnaW5zY2Fu ID0gZ2lzdGJlZ2luc2NhbiwKIAkJLmFtcmVzY2FuID0gZ2lzdHJlc2NhbiwKIAkJLmFtZ2V0dHVw bGUgPSBnaXN0Z2V0dHVwbGUsCisJCS5hbWdldGJhdGNoID0gTlVMTCwKKwkJLmFtdW5ndWFyZGJh dGNoID0gTlVMTCwKKwkJLmFta2lsbGl0ZW1zYmF0Y2ggPSBOVUxMLAogCQkuYW1nZXRiaXRtYXAg PSBnaXN0Z2V0Yml0bWFwLAogCQkuYW1lbmRzY2FuID0gZ2lzdGVuZHNjYW4sCi0JCS5hbW1hcmtw b3MgPSBOVUxMLAotCQkuYW1yZXN0cnBvcyA9IE5VTEwsCisJCS5hbXBvc3Jlc2V0ID0gTlVMTCwK IAkJLmFtZXN0aW1hdGVwYXJhbGxlbHNjYW4gPSBOVUxMLAogCQkuYW1pbml0cGFyYWxsZWxzY2Fu ID0gTlVMTCwKIAkJLmFtcGFyYWxsZWxyZXNjYW4gPSBOVUxMLApkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5j CmluZGV4IDhkOGNkMzBkYy4uNTQwZjJiY2Q0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nl c3MvaGFzaC9oYXNoLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jCkBAIC04 MCw2ICs4MCw3IEBAIGhhc2hoYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCS5hbWNvbnNpc3Rl bnRlcXVhbGl0eSA9IHRydWUsCiAJCS5hbWNvbnNpc3RlbnRvcmRlcmluZyA9IGZhbHNlLAogCQku YW1jYW5iYWNrd2FyZCA9IHRydWUsCisJCS5hbWNhbm1hcmtwb3MgPSBmYWxzZSwKIAkJLmFtY2Fu dW5pcXVlID0gZmFsc2UsCiAJCS5hbWNhbm11bHRpY29sID0gZmFsc2UsCiAJCS5hbW9wdGlvbmFs a2V5ID0gZmFsc2UsCkBAIC0xMTQsMTAgKzExNSwxMiBAQCBoYXNoaGFuZGxlcihQR19GVU5DVElP Tl9BUkdTKQogCQkuYW1iZWdpbnNjYW4gPSBoYXNoYmVnaW5zY2FuLAogCQkuYW1yZXNjYW4gPSBo YXNocmVzY2FuLAogCQkuYW1nZXR0dXBsZSA9IGhhc2hnZXR0dXBsZSwKKwkJLmFtZ2V0YmF0Y2gg PSBOVUxMLAorCQkuYW11bmd1YXJkYmF0Y2ggPSBOVUxMLAorCQkuYW1raWxsaXRlbXNiYXRjaCA9 IE5VTEwsCiAJCS5hbWdldGJpdG1hcCA9IGhhc2hnZXRiaXRtYXAsCiAJCS5hbWVuZHNjYW4gPSBo YXNoZW5kc2NhbiwKLQkJLmFtbWFya3BvcyA9IE5VTEwsCi0JCS5hbXJlc3RycG9zID0gTlVMTCwK KwkJLmFtcG9zcmVzZXQgPSBOVUxMLAogCQkuYW1lc3RpbWF0ZXBhcmFsbGVsc2NhbiA9IE5VTEws CiAJCS5hbWluaXRwYXJhbGxlbHNjYW4gPSBOVUxMLAogCQkuYW1wYXJhbGxlbHJlc2NhbiA9IE5V TEwsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5j IGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYwppbmRleCBmMGU4ZDA5 MWEuLjM2MWRmNzNhZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFt X2hhbmRsZXIuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5j CkBAIC0yNjgzLDggKzI2ODMsMTEgQEAgc3RhdGljIGNvbnN0IFRhYmxlQW1Sb3V0aW5lIGhlYXBh bV9tZXRob2RzID0gewogCS5wYXJhbGxlbHNjYW5fcmVpbml0aWFsaXplID0gdGFibGVfYmxvY2tf cGFyYWxsZWxzY2FuX3JlaW5pdGlhbGl6ZSwKIAogCS5pbmRleF9zY2FuX2JlZ2luID0gaGVhcGFt X2luZGV4X3NjYW5fYmVnaW4sCi0JLmluZGV4X3NjYW5fcmVzZXQgPSBoZWFwYW1faW5kZXhfc2Nh bl9yZXNldCwKKwkuaW5kZXhfc2Nhbl9iYXRjaF9pbml0ID0gaGVhcGFtX2luZGV4X3NjYW5fYmF0 Y2hfaW5pdCwKKwkuaW5kZXhfc2Nhbl9yZXNjYW4gPSBoZWFwYW1faW5kZXhfc2Nhbl9yZXNjYW4s CiAJLmluZGV4X3NjYW5fZW5kID0gaGVhcGFtX2luZGV4X3NjYW5fZW5kLAorCS5pbmRleF9zY2Fu X21hcmtwb3MgPSBoZWFwYW1faW5kZXhfc2Nhbl9tYXJrcG9zLAorCS5pbmRleF9zY2FuX3Jlc3Ry cG9zID0gaGVhcGFtX2luZGV4X3NjYW5fcmVzdHJwb3MsCiAKIAkudHVwbGVfaW5zZXJ0ID0gaGVh cGFtX3R1cGxlX2luc2VydCwKIAkudHVwbGVfaW5zZXJ0X3NwZWN1bGF0aXZlID0gaGVhcGFtX3R1 cGxlX2luc2VydF9zcGVjdWxhdGl2ZSwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9o ZWFwL2hlYXBhbV9pbmRleHNjYW4uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9p bmRleHNjYW4uYwppbmRleCBlZTBiNThhODEuLmE5YzhjZTE1YiAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2luZGV4c2Nhbi5jCisrKyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9oZWFwL2hlYXBhbV9pbmRleHNjYW4uYwpAQCAtMTYsNiArMTYsNyBAQAogCiAjaW5jbHVk ZSAiYWNjZXNzL2FtYXBpLmgiCiAjaW5jbHVkZSAiYWNjZXNzL2hlYXBhbS5oIgorI2luY2x1ZGUg ImFjY2Vzcy9pbmRleGJhdGNoLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3JlbHNjYW4uaCIKICNpbmNs dWRlICJhY2Nlc3MvdmlzaWJpbGl0eW1hcC5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJlZGljYXRl LmgiCkBAIC0yNCw2ICsyNSwzOCBAQAogI2luY2x1ZGUgInV0aWxzL3Bnc3RhdF9pbnRlcm5hbC5o IgogCiAKKy8qCisgKiBoZWFwYW0ncyBwZXItYmF0Y2ggcHJpdmF0ZSBvcGFxdWUgYXJlYSAob25s eSB1c2VkIGR1cmluZyBpbmRleC1vbmx5IHNjYW5zKS4KKyAqCisgKiBNYWludGFpbnMgYSBwZXIt YmF0Y2ggdmlzaWJpbGl0eSBpbmZvcm1hdGlvbiBjYWNoZSwgcG9wdWxhdGVkIG9uIGRlbWFuZAor ICogdXNpbmcgdGhlIHZpc2liaWxpdHkgbWFwLiAgSXQgaXMgaW1wb3J0YW50IHRoYXQgd2Ugc2V0 IGVhY2ggYmF0Y2ggaXRlbSdzCisgKiBiYXRjaHZpc1tdIGVudHJ5IGV4YWN0bHkgb25jZSAob3Ig bm90IGF0IGFsbCkuCisgKi8KK3R5cGVkZWYgc3RydWN0IEhlYXBCYXRjaERhdGEKK3sKKwkvKgor CSAqIFJhbmdlIG9mIGJhdGNodmlzW10gZW50cmllcyB3aXRoIHZhbGlkIHZpc2liaWxpdHkgaW5m bywgaW4gaXRlbXNbXS13aXNlCisJICogdGVybXMuICBBbiBpdGVtJ3MgdmlzaWJpbGl0eSBpcyBj YWNoZWQgaWZmIGZpcnN0VmlzU2V0IDw9IGl0ZW0gPD0KKwkgKiBsYXN0VmlzU2V0LgorCSAqLwor CWludAkJCWZpcnN0VmlzU2V0OwkvKiBmaXJzdCB2YWxpZCBiYXRjaHZpc1tdIGVudHJ5LCBvciA+ IGxhc3QgKi8KKwlpbnQJCQlsYXN0VmlzU2V0OwkJLyogbGFzdCB2YWxpZCBiYXRjaHZpc1tdIGVu dHJ5LCBvciA8IGZpcnN0ICovCisKKwkvKiBtYXhpdGVtc2JhdGNoLW1hbnkgYWxsLXZpc2libGUg c3RhdGVzLCB2YWxpZCBvbmx5IHdpdGhpbiByYW5nZSAqLworCWJvb2wJCWJhdGNodmlzW0ZMRVhJ QkxFX0FSUkFZX01FTUJFUl07Cit9IEhlYXBCYXRjaERhdGE7CisKKyNkZWZpbmUgSEVBUF9CQVRD SF9WSVNfQ0FDSEVEKGhiYXRjaCwgaXRlbSkgXAorCSgoaXRlbSkgPj0gKGhiYXRjaCktPmZpcnN0 VmlzU2V0ICYmIChpdGVtKSA8PSAoaGJhdGNoKS0+bGFzdFZpc1NldCkKKworc3RhdGljIGJvb2wg aGVhcGFtX2luZGV4X3BsYWluX2JhdGNoX2dldG5leHRfc2xvdChJbmRleFNjYW5EZXNjIHNjYW4s CisJCQkJCQkJCQkJCQkgIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJCQkJCQkJICBU dXBsZVRhYmxlU2xvdCAqc2xvdCwKKwkJCQkJCQkJCQkJCSAgYm9vbCAqcmVjaGVjayk7CitzdGF0 aWMgYm9vbCBoZWFwYW1faW5kZXhfb25seV9iYXRjaF9nZXRuZXh0X3Nsb3QoSW5kZXhTY2FuRGVz YyBzY2FuLAorCQkJCQkJCQkJCQkJIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJCQkJ CQkJIFR1cGxlVGFibGVTbG90ICpzbG90LAorCQkJCQkJCQkJCQkJIGJvb2wgKnJlY2hlY2spOwog c3RhdGljIGJvb2wgaGVhcGFtX2luZGV4X3BsYWluX3R1cGxlX2dldG5leHRfc2xvdChJbmRleFNj YW5EZXNjIHNjYW4sCiAJCQkJCQkJCQkJCQkgIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAogCQkJ CQkJCQkJCQkJICBUdXBsZVRhYmxlU2xvdCAqc2xvdCwKQEAgLTM2LDExICs2OSwyOCBAQCBzdGF0 aWMgcGdfYXR0cmlidXRlX2Fsd2F5c19pbmxpbmUgYm9vbCBoZWFwYW1faW5kZXhfZ2V0bmV4dF9z bG90KEluZGV4U2NhbkRlc2MgcwogCQkJCQkJCQkJCQkJCQkJCSBTY2FuRGlyZWN0aW9uIGRpcmVj dGlvbiwKIAkJCQkJCQkJCQkJCQkJCQkgVHVwbGVUYWJsZVNsb3QgKnNsb3QsCiAJCQkJCQkJCQkJ CQkJCQkJIGJvb2wgaW5kZXhfb25seSwKKwkJCQkJCQkJCQkJCQkJCQkgYm9vbCBhbWdldGJhdGNo LAogCQkJCQkJCQkJCQkJCQkJCSBib29sICpyZWNoZWNrKTsKIHN0YXRpYyBwZ19hdHRyaWJ1dGVf YWx3YXlzX2lubGluZSBib29sIGhlYXBhbV9pbmRleF9oZWFwX2ZldGNoKEluZGV4U2NhbkRlc2Mg c2NhbiwgSW5kZXhTY2FuSGVhcERhdGEgKmhzY2FuLAogCQkJCQkJCQkJCQkJCQkJICAgVHVwbGVU YWJsZVNsb3QgKnNsb3QsIGJvb2wgaW5kZXhfb25seSwKIAkJCQkJCQkJCQkJCQkJCSAgIGJvb2wg KmhlYXBfY29udGludWUsIGJvb2wgKmFsbF9kZWFkKTsKLXN0YXRpYyBwZ19hdHRyaWJ1dGVfYWx3 YXlzX2lubGluZSB2b2lkIGhlYXBhbV9pbmRleF9raWxsX2l0ZW0oSW5kZXhTY2FuRGVzYyBzY2Fu KTsKK3N0YXRpYyBwZ19hdHRyaWJ1dGVfYWx3YXlzX2lubGluZSB2b2lkIGhlYXBhbV9pbmRleF9r aWxsX2l0ZW0oSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJCQkJCQkJICBib29sIGFtZ2V0 YmF0Y2gpOworc3RhdGljIHBnX2F0dHJpYnV0ZV9hbHdheXNfaW5saW5lIEl0ZW1Qb2ludGVyIGhl YXBhbV9pbmRleF9nZXRuZXh0X3NjYW5iYXRjaF9wb3MoSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJ CQkJCQkJCQkJCQkJCQkJCQkgSW5kZXhTY2FuSGVhcERhdGEgKmhzY2FuLAorCQkJCQkJCQkJCQkJ CQkJCQkJCQkgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJCQkJCQkJCQkJCQkJCQkJCSBi b29sICphbGxfdmlzaWJsZSk7CitzdGF0aWMgaW5saW5lIEl0ZW1Qb2ludGVyIGhlYXBhbV9pbmRl eF9yZXR1cm5fc2NhbnBvc190aWQoSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJCQkJCQkg IEluZGV4U2NhbkhlYXBEYXRhICpoc2NhbiwKKwkJCQkJCQkJCQkJCQkJICBTY2FuRGlyZWN0aW9u IGRpcmVjdGlvbiwKKwkJCQkJCQkJCQkJCQkJICBJbmRleFNjYW5CYXRjaCBzY2FuQmF0Y2gsCisJ CQkJCQkJCQkJCQkJCSAgQmF0Y2hSaW5nSXRlbVBvcyAqc2NhblBvcywKKwkJCQkJCQkJCQkJCQkJ ICBib29sICphbGxfdmlzaWJsZSk7CitzdGF0aWMgdm9pZCBoZWFwYW1faW5kZXhfYmF0Y2hfcG9z X3Zpc2liaWxpdHkoSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJCQkgIFNjYW5EaXJlY3Rp b24gZGlyZWN0aW9uLAorCQkJCQkJCQkJCQkgIEluZGV4U2NhbkJhdGNoIGJhdGNoLAorCQkJCQkJ CQkJCQkgIEhlYXBCYXRjaERhdGEgKmhiYXRjaCwKKwkJCQkJCQkJCQkJICBCYXRjaFJpbmdJdGVt UG9zICpwb3MpOwogCiAvKgogICogU2ltcGxlLCBzaW5nbGUtc2hvdCBUSUQgbG9va3VwIGZvciBj b25zdHJhaW50IGVuZm9yY2VtZW50IGNvZGUgKHVuaXF1ZQpAQCAtOTAsMTggKzE0MCw1MSBAQCBo ZWFwYW1faW5kZXhfc2Nhbl9iZWdpbihJbmRleFNjYW5EZXNjIHNjYW4sIHVpbnQzMiBmbGFncykK IHsKIAlJbmRleFNjYW5IZWFwRGF0YSAqaHNjYW4gPSBwYWxsb2MwX29iamVjdChJbmRleFNjYW5I ZWFwRGF0YSk7CiAKLQloc2Nhbi0+eHNfY2J1ZiA9IEludmFsaWRCdWZmZXI7CisJLyogdGFibGUg QU0gb3BhcXVlIGFyZWEgc2l6ZSBpcyBzZXQgYmVsb3cgZm9yIGluZGV4LW9ubHkgc2NhbnMgKi8K KwlzY2FuLT5iYXRjaF9vcGFxdWVfc2l6ZSA9IDA7CisJc2Nhbi0+YmF0Y2hfcGVyX2l0ZW1fc2l6 ZSA9IDA7CisKKwkvKiBDdXJyZW50IGhlYXAgYmxvY2sgc3RhdGUgKi8KKwlBc3NlcnQoaHNjYW4t PnhzX2NidWYgPT0gSW52YWxpZEJ1ZmZlcik7CiAJaHNjYW4tPnhzX2JsayA9IEludmFsaWRCbG9j a051bWJlcjsKLQloc2Nhbi0+eHNfdm1idWZmZXIgPSBJbnZhbGlkQnVmZmVyOworCisJLyogVk0g cmVsYXRlZCBzdGF0ZSAqLworCUFzc2VydChoc2Nhbi0+eHNfdm1idWZmZXIgPT0gSW52YWxpZEJ1 ZmZlcik7CisJaHNjYW4tPnhzX3ZtX2l0ZW1zID0gMTsKIAogCS8qIFJlbWVtYmVyIGlmIHNjYW4g aXMgcmVhZC1vbmx5ICovCiAJaHNjYW4tPnhzX3JlYWRvbmx5ID0gKGZsYWdzICYgU09fSElOVF9S RUxfUkVBRF9PTkxZKSAhPSAwOwogCiAJLyogUmVzb2x2ZSB3aGljaCB4c19nZXRuZXh0X3Nsb3Qg aW1wbGVtZW50YXRpb24gdG8gdXNlIGZvciB0aGlzIHNjYW4gKi8KLQlpZiAoc2Nhbi0+eHNfd2Fu dF9pdHVwKQotCQlzY2FuLT54c19nZXRuZXh0X3Nsb3QgPSBoZWFwYW1faW5kZXhfb25seV90dXBs ZV9nZXRuZXh0X3Nsb3Q7CisJaWYgKHNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbWdl dGJhdGNoICE9IE5VTEwpCisJeworCQkvKiBhbWdldGJhdGNoIGluZGV4IEFNICovCisJCWlmIChz Y2FuLT54c193YW50X2l0dXApCisJCXsKKwkJCXNjYW4tPnhzX2dldG5leHRfc2xvdCA9IGhlYXBh bV9pbmRleF9vbmx5X2JhdGNoX2dldG5leHRfc2xvdDsKKworCQkJLyoKKwkJCSAqIEluZGV4LW9u bHkgc2NhbnMgY2FjaGUgdmlzaWJpbGl0eSBpbmZvIGluIGEgSGVhcEJhdGNoRGF0YSBwZXIKKwkJ CSAqIGJhdGNoOiBhIGZpeGVkLXNpemUgaGVhZGVyIGZvbGxvd2VkIGJ5IGEgcGVyLWl0ZW0gYmF0 Y2h2aXNbXQorCQkJICogYXJyYXkKKwkJCSAqLworCQkJc2Nhbi0+YmF0Y2hfb3BhcXVlX3NpemUg PSBvZmZzZXRvZihIZWFwQmF0Y2hEYXRhLCBiYXRjaHZpcyk7CisJCQlzY2FuLT5iYXRjaF9wZXJf aXRlbV9zaXplID0gc2l6ZW9mKGJvb2wpOworCQl9CisJCWVsc2UKKwkJCXNjYW4tPnhzX2dldG5l eHRfc2xvdCA9IGhlYXBhbV9pbmRleF9wbGFpbl9iYXRjaF9nZXRuZXh0X3Nsb3Q7CisKKwkJLyog U2V0IHVwIHNjYW4ncyBiYXRjaCByaW5nIGJ1ZmZlciAqLworCQl0YWJsZWFtX3V0aWxfYmF0Y2hz Y2FuX2luaXQoc2Nhbik7CisJfQogCWVsc2UKLQkJc2Nhbi0+eHNfZ2V0bmV4dF9zbG90ID0gaGVh cGFtX2luZGV4X3BsYWluX3R1cGxlX2dldG5leHRfc2xvdDsKKwl7CisJCS8qIGFtZ2V0dHVwbGUg aW5kZXggQU0gKi8KKwkJaWYgKHNjYW4tPnhzX3dhbnRfaXR1cCkKKwkJCXNjYW4tPnhzX2dldG5l eHRfc2xvdCA9IGhlYXBhbV9pbmRleF9vbmx5X3R1cGxlX2dldG5leHRfc2xvdDsKKwkJZWxzZQor CQkJc2Nhbi0+eHNfZ2V0bmV4dF9zbG90ID0gaGVhcGFtX2luZGV4X3BsYWluX3R1cGxlX2dldG5l eHRfc2xvdDsKKwl9CiAKIAkvKgogCSAqIEluZGV4LW9ubHkgc2NhbnMgdGhhdCByZXR1cm4gIm5h bWUiIGNvbHVtbnMgc3RvcmVkIGFzIGNzdHJpbmdzIG5lZWQgYQpAQCAtMTE4LDEyICsyMDEsNDIg QEAgaGVhcGFtX2luZGV4X3NjYW5fYmVnaW4oSW5kZXhTY2FuRGVzYyBzY2FuLCB1aW50MzIgZmxh Z3MpCiAJc2Nhbi0+eHNfdGFibGVfb3BhcXVlID0gaHNjYW47CiB9CiAKKy8qCisgKiBJbml0aWFs aXplIHRoZSBoZWFwIHRhYmxlIEFNJ3MgcGVyLWJhdGNoIG9wYXF1ZSBhcmVhCisgKi8KIHZvaWQK LWhlYXBhbV9pbmRleF9zY2FuX3Jlc2V0KEluZGV4U2NhbkRlc2Mgc2NhbikKK2hlYXBhbV9pbmRl eF9zY2FuX2JhdGNoX2luaXQoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRj aCkKIHsKKwlIZWFwQmF0Y2hEYXRhICpoYmF0Y2g7CisKKwkvKgorCSAqIFRoZSBjb3JlIGNvZGUg c2hvdWxkIG9ubHkgY2FsbCBoZXJlIGR1cmluZyBpbmRleC1vbmx5IHNjYW5zLiAgUGxhaW4KKwkg KiBzY2FucyBkb24ndCByZXF1ZXN0IGEgSGVhcEJhdGNoRGF0YSBhcmVhIGF0IGFsbC4KKwkgKi8K KwlBc3NlcnQoc2Nhbi0+eHNfd2FudF9pdHVwICYmIHNjYW4tPnVzZWJhdGNocmluZyk7CisKKwkv KiBSZXNldHRpbmcgdGhlIHZhbGlkIHJhbmdlIG1ha2VzIGl0IHNhZmUgdG8gdXNlL3JlY3ljbGUg dGhlIGJhdGNoICovCisJaGJhdGNoID0gaW5kZXhfc2Nhbl9iYXRjaF90YWJsZV9hcmVhKHNjYW4s IGJhdGNoKTsKKwloYmF0Y2gtPmZpcnN0VmlzU2V0ID0gSU5UX01BWDsKKwloYmF0Y2gtPmxhc3RW aXNTZXQgPSAtMTsKK30KKworLyoKKyAqIFJlc2V0IHRhYmxlIEFNIGluZGV4IHNjYW4gc3RhdGUg aW4gcHJlcGFyYXRpb24gZm9yIGEgcmVzY2FuCisgKi8KK3ZvaWQKK2hlYXBhbV9pbmRleF9zY2Fu X3Jlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4pCit7CisJSW5kZXhTY2FuSGVhcERhdGEgKmhzY2Fu ID0gKEluZGV4U2NhbkhlYXBEYXRhICopIHNjYW4tPnhzX3RhYmxlX29wYXF1ZTsKKworCS8qIFJl c2NhbnMgc2hvdWxkIGF2b2lkIGFuIGV4Y2Vzc2l2ZSBudW1iZXIgb2YgVk0gbG9va3VwcyAqLwor CWhzY2FuLT54c192bV9pdGVtcyA9IDE7CisKKwkvKiBSZXNldCBiYXRjaCByaW5nIGJ1ZmZlciBz dGF0ZSAqLworCWlmIChzY2FuLT51c2ViYXRjaHJpbmcpCisJCXRhYmxlYW1fdXRpbF9iYXRjaHNj YW5fcmVzZXQoc2NhbiwgZmFsc2UpOworCiAJLyoKLQkgKiBSZXNldHMgYXJlIGEgbm8tb3AuCi0J ICoKIAkgKiBEZWxpYmVyYXRlbHkgYXZvaWQgZHJvcHBpbmcgcGlucyBub3cgaGVsZCBpbiB4c19j YnVmIGFuZCB4c192bWJ1ZmZlci4KIAkgKiBUaGlzIHNhdmVzIGN5Y2xlcyBkdXJpbmcgY2VydGFp biB0aWdodCBuZXN0ZWQgbG9vcCBqb2lucyAoaXQgY2FuIGF2b2lkCiAJICogcmVwZWF0ZWQgcGlu bmluZyBhbmQgdW5waW5uaW5nIG9mIHRoZSBzYW1lIGJ1ZmZlciBhY3Jvc3MgcmVzY2FucykuCkBA IC0xNDcsOSArMjYwLDM3IEBAIGhlYXBhbV9pbmRleF9zY2FuX2VuZChJbmRleFNjYW5EZXNjIHNj YW4pCiAJaWYgKGhzY2FuLT54c19pdHVwX2N4dCkKIAkJTWVtb3J5Q29udGV4dERlbGV0ZShoc2Nh bi0+eHNfaXR1cF9jeHQpOwogCisJLyogRnJlZSBhbGwgYmF0Y2ggcmVsYXRlZCByZXNvdXJjZXMg Ki8KKwlpZiAoc2Nhbi0+dXNlYmF0Y2hyaW5nKQorCQl0YWJsZWFtX3V0aWxfYmF0Y2hzY2FuX2Vu ZChzY2FuKTsKKwogCXBmcmVlKGhzY2FuKTsKIH0KIAorLyoKKyAqIFNhdmUgYmF0Y2ggcmluZyBi dWZmZXIncyBjdXJyZW50IHNjYW5Qb3MgYXMgaXRzIG1hcmtQb3MKKyAqLwordm9pZAoraGVhcGFt X2luZGV4X3NjYW5fbWFya3BvcyhJbmRleFNjYW5EZXNjIHNjYW4pCit7CisJQXNzZXJ0KHNjYW4t PnVzZWJhdGNocmluZyk7CisJQXNzZXJ0KHNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5h bWNhbm1hcmtwb3MpOworCisJdGFibGVhbV91dGlsX2JhdGNoc2Nhbl9tYXJrX3BvcyhzY2FuKTsK K30KKworLyoKKyAqIFJlc3RvcmUgYmF0Y2ggcmluZyBidWZmZXIncyBtYXJrUG9zIGludG8gaXRz IHNjYW5Qb3MKKyAqLwordm9pZAoraGVhcGFtX2luZGV4X3NjYW5fcmVzdHJwb3MoSW5kZXhTY2Fu RGVzYyBzY2FuKQoreworCUFzc2VydChzY2FuLT51c2ViYXRjaHJpbmcpOworCUFzc2VydChzY2Fu LT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1jYW5tYXJrcG9zKTsKKworCXRhYmxlYW1fdXRp bF9iYXRjaHNjYW5fcmVzdG9yZV9wb3Moc2Nhbik7Cit9CisKIC8qCiAgKgloZWFwX2hvdF9zZWFy Y2hfYnVmZmVyCS0gc2VhcmNoIEhPVCBjaGFpbiBmb3IgdHVwbGUgc2F0aXNmeWluZyBzbmFwc2hv dAogICoKQEAgLTM5Nyw2ICs1MzgsMzQgQEAgaGVhcF9maWxsX2lvc19zbG90KEluZGV4U2NhbkRl c2Mgc2NhbiwgVHVwbGVUYWJsZVNsb3QgKnNsb3QpCiAJCWVsb2coRVJST1IsICJubyBkYXRhIHJl dHVybmVkIGZvciBpbmRleC1vbmx5IHNjYW4iKTsKIH0KIAorLyogeHNfZ2V0bmV4dF9zbG90IGNh bGxiYWNrOiBhbWdldGJhdGNoLCBwbGFpbiBpbmRleCBzY2FuICovCitzdGF0aWMgcGdfYXR0cmli dXRlX2hvdCBib29sCitoZWFwYW1faW5kZXhfcGxhaW5fYmF0Y2hfZ2V0bmV4dF9zbG90KEluZGV4 U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCQkJCSAgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJ CQkJCQkgIFR1cGxlVGFibGVTbG90ICpzbG90LAorCQkJCQkJCQkJICBib29sICpyZWNoZWNrKQor eworCUFzc2VydCghc2Nhbi0+eHNfd2FudF9pdHVwICYmIHNjYW4tPnVzZWJhdGNocmluZyk7CisJ QXNzZXJ0KHNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbWdldGJhdGNoICE9IE5VTEwp OworCisJcmV0dXJuIGhlYXBhbV9pbmRleF9nZXRuZXh0X3Nsb3Qoc2NhbiwgZGlyZWN0aW9uLCBz bG90LCBmYWxzZSwgdHJ1ZSwKKwkJCQkJCQkJCSByZWNoZWNrKTsKK30KKworLyogeHNfZ2V0bmV4 dF9zbG90IGNhbGxiYWNrOiBhbWdldGJhdGNoLCBpbmRleC1vbmx5IHNjYW4gKi8KK3N0YXRpYyBw Z19hdHRyaWJ1dGVfaG90IGJvb2wKK2hlYXBhbV9pbmRleF9vbmx5X2JhdGNoX2dldG5leHRfc2xv dChJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCQkgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24s CisJCQkJCQkJCQkgVHVwbGVUYWJsZVNsb3QgKnNsb3QsCisJCQkJCQkJCQkgYm9vbCAqcmVjaGVj aykKK3sKKwlBc3NlcnQoc2Nhbi0+eHNfd2FudF9pdHVwICYmIHNjYW4tPnVzZWJhdGNocmluZyk7 CisJQXNzZXJ0KHNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbWdldGJhdGNoICE9IE5V TEwpOworCisJcmV0dXJuIGhlYXBhbV9pbmRleF9nZXRuZXh0X3Nsb3Qoc2NhbiwgZGlyZWN0aW9u LCBzbG90LCB0cnVlLCB0cnVlLAorCQkJCQkJCQkJIHJlY2hlY2spOworfQorCiAvKiB4c19nZXRu ZXh0X3Nsb3QgY2FsbGJhY2s6IGFtZ2V0dHVwbGUsIHBsYWluIGluZGV4IHNjYW4gKi8KIHN0YXRp YyBwZ19hdHRyaWJ1dGVfaG90IGJvb2wKIGhlYXBhbV9pbmRleF9wbGFpbl90dXBsZV9nZXRuZXh0 X3Nsb3QoSW5kZXhTY2FuRGVzYyBzY2FuLApAQCAtNDA0LDEwICs1NzMsMTEgQEAgaGVhcGFtX2lu ZGV4X3BsYWluX3R1cGxlX2dldG5leHRfc2xvdChJbmRleFNjYW5EZXNjIHNjYW4sCiAJCQkJCQkJ CQkgIFR1cGxlVGFibGVTbG90ICpzbG90LAogCQkJCQkJCQkJICBib29sICpyZWNoZWNrKQogewot CUFzc2VydCghc2Nhbi0+eHNfd2FudF9pdHVwKTsKKwlBc3NlcnQoIXNjYW4tPnhzX3dhbnRfaXR1 cCAmJiAhc2Nhbi0+dXNlYmF0Y2hyaW5nKTsKIAlBc3NlcnQoc2Nhbi0+aW5kZXhSZWxhdGlvbi0+ cmRfaW5kYW0tPmFtZ2V0dHVwbGUgIT0gTlVMTCk7CiAKLQlyZXR1cm4gaGVhcGFtX2luZGV4X2dl dG5leHRfc2xvdChzY2FuLCBkaXJlY3Rpb24sIHNsb3QsIGZhbHNlLCByZWNoZWNrKTsKKwlyZXR1 cm4gaGVhcGFtX2luZGV4X2dldG5leHRfc2xvdChzY2FuLCBkaXJlY3Rpb24sIHNsb3QsIGZhbHNl LCBmYWxzZSwKKwkJCQkJCQkJCSByZWNoZWNrKTsKIH0KIAogLyogeHNfZ2V0bmV4dF9zbG90IGNh bGxiYWNrOiBhbWdldHR1cGxlLCBpbmRleC1vbmx5IHNjYW4gKi8KQEAgLTQxNywxNCArNTg3LDE1 IEBAIGhlYXBhbV9pbmRleF9vbmx5X3R1cGxlX2dldG5leHRfc2xvdChJbmRleFNjYW5EZXNjIHNj YW4sCiAJCQkJCQkJCQkgVHVwbGVUYWJsZVNsb3QgKnNsb3QsCiAJCQkJCQkJCQkgYm9vbCAqcmVj aGVjaykKIHsKLQlBc3NlcnQoc2Nhbi0+eHNfd2FudF9pdHVwKTsKKwlBc3NlcnQoc2Nhbi0+eHNf d2FudF9pdHVwICYmICFzY2FuLT51c2ViYXRjaHJpbmcpOwogCUFzc2VydChzY2FuLT5pbmRleFJl bGF0aW9uLT5yZF9pbmRhbS0+YW1nZXR0dXBsZSAhPSBOVUxMKTsKIAotCXJldHVybiBoZWFwYW1f aW5kZXhfZ2V0bmV4dF9zbG90KHNjYW4sIGRpcmVjdGlvbiwgc2xvdCwgdHJ1ZSwgcmVjaGVjayk7 CisJcmV0dXJuIGhlYXBhbV9pbmRleF9nZXRuZXh0X3Nsb3Qoc2NhbiwgZGlyZWN0aW9uLCBzbG90 LCB0cnVlLCBmYWxzZSwKKwkJCQkJCQkJCSByZWNoZWNrKTsKIH0KIAogLyoKLSAqIENvbW1vbiBp bXBsZW1lbnRhdGlvbiBmb3IgYm90aCBoZWFwYW1faW5kZXhfKl9nZXRuZXh0X3Nsb3QgdmFyaWFu dHMuCisgKiBDb21tb24gaW1wbGVtZW50YXRpb24gZm9yIGFsbCBmb3VyIGhlYXBhbV9pbmRleF8q X2dldG5leHRfc2xvdCB2YXJpYW50cy4KICAqCiAgKiBUaGUgcmVzdWx0IGlzIHRydWUgaWYgYSB0 dXBsZSBzYXRpc2Z5aW5nIHRoZSBzY2FuIGtleXMgYW5kIHRoZSBzbmFwc2hvdCB3YXMKICAqIGZv dW5kLCBmYWxzZSBvdGhlcndpc2UuICBPbiBzdWNjZXNzIHRoZSBzbG90IGlzIGZpbGxlZDogZm9y IHBsYWluIGluZGV4CkBAIC00MzYsMTMgKzYwNywxMyBAQCBoZWFwYW1faW5kZXhfb25seV90dXBs ZV9nZXRuZXh0X3Nsb3QoSW5kZXhTY2FuRGVzYyBzY2FuLAogICogZHJvcHBlZCBieSBhIGZ1dHVy ZSBjYWxsIGhlcmUgKG9yIGJ5IGEgbGF0ZXIgY2FsbCB0byBoZWFwYW1faW5kZXhfc2Nhbl9lbmQK ICAqIHRocm91Z2ggaW5kZXhfZW5kc2NhbikuCiAgKgotICogVGhlIGluZGV4X29ubHkgcGFyYW1l dGVyIGlzIGEgY29tcGlsZS10aW1lIGNvbnN0YW50IGF0IGVhY2ggY2FsbCBzaXRlLAotICogYWxs b3dpbmcgdGhlIGNvbXBpbGVyIHRvIHNwZWNpYWxpemUgdGhlIGNvZGUgZm9yIGVhY2ggdmFyaWFu dC4KKyAqIFRoZSBpbmRleF9vbmx5IGFuZCBhbWdldGJhdGNoIHBhcmFtZXRlcnMgYXJlIGNvbXBp bGUtdGltZSBjb25zdGFudHMgYXQgZWFjaAorICogY2FsbCBzaXRlLCBhbGxvd2luZyB0aGUgY29t cGlsZXIgdG8gc3BlY2lhbGl6ZSB0aGUgY29kZSBmb3IgZWFjaCB2YXJpYW50LgogICovCiBzdGF0 aWMgcGdfYXR0cmlidXRlX2Fsd2F5c19pbmxpbmUgYm9vbAogaGVhcGFtX2luZGV4X2dldG5leHRf c2xvdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAogCQkJCQkJ ICBUdXBsZVRhYmxlU2xvdCAqc2xvdCwgYm9vbCBpbmRleF9vbmx5LAotCQkJCQkJICBib29sICpy ZWNoZWNrKQorCQkJCQkJICBib29sIGFtZ2V0YmF0Y2gsIGJvb2wgKnJlY2hlY2spCiB7CiAJSW5k ZXhTY2FuSGVhcERhdGEgKmhzY2FuID0gKEluZGV4U2NhbkhlYXBEYXRhICopIHNjYW4tPnhzX3Rh YmxlX29wYXF1ZTsKIAlib29sCSAgICpoZWFwX2NvbnRpbnVlID0gJnNjYW4tPnhzX2hlYXBfY29u dGludWU7CkBAIC00NTksMTQgKzYzMCwyMiBAQCBoZWFwYW1faW5kZXhfZ2V0bmV4dF9zbG90KElu ZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCiAJCWlmICghKmhlYXBf Y29udGludWUpCiAJCXsKIAkJCS8qIEdldCB0aGUgbmV4dCBUSUQgZnJvbSB0aGUgaW5kZXggKi8K LQkJCXRpZCA9IGluZGV4X2dldG5leHRfdGlkKHNjYW4sIGRpcmVjdGlvbik7CisJCQlpZiAoYW1n ZXRiYXRjaCkKKwkJCQl0aWQgPSBoZWFwYW1faW5kZXhfZ2V0bmV4dF9zY2FuYmF0Y2hfcG9zKHNj YW4sIGhzY2FuLAorCQkJCQkJCQkJCQkJCQkgZGlyZWN0aW9uLAorCQkJCQkJCQkJCQkJCQkgaW5k ZXhfb25seSA/CisJCQkJCQkJCQkJCQkJCSAmYWxsX3Zpc2libGUgOiBOVUxMKTsKKwkJCWVsc2UK KwkJCQl0aWQgPSB0YWJsZWFtX3V0aWxfZmV0Y2hfbmV4dF90dXBsZV90aWQoc2NhbiwgZGlyZWN0 aW9uKTsKIAogCQkJLyogSWYgd2UncmUgb3V0IG9mIGluZGV4IGVudHJpZXMsIHdlJ3JlIGRvbmUg Ki8KIAkJCWlmICh0aWQgPT0gTlVMTCkKIAkJCQlicmVhazsKIAotCQkJLyogRm9yIGluZGV4LW9u bHkgc2NhbnMsIGNoZWNrIHRoZSB2aXNpYmlsaXR5IG1hcCAqLwotCQkJaWYgKGluZGV4X29ubHkp CisJCQlwZ3N0YXRfY291bnRfaW5kZXhfdHVwbGVzKHNjYW4tPmluZGV4UmVsYXRpb24sIDEpOwor CisJCQkvKiBGb3Igbm9uLWJhdGNoIGluZGV4LW9ubHkgc2NhbnMsIGNoZWNrIHRoZSB2aXNpYmls aXR5IG1hcCAqLworCQkJaWYgKGluZGV4X29ubHkgJiYgIWFtZ2V0YmF0Y2gpCiAJCQkJYWxsX3Zp c2libGUgPSBWTV9BTExfVklTSUJMRShzY2FuLT5oZWFwUmVsYXRpb24sCiAJCQkJCQkJCQkJCSBJ dGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCksCiAJCQkJCQkJCQkJCSAmaHNjYW4tPnhzX3Zt YnVmZmVyKTsKQEAgLTQ5Miw3ICs2NzEsNyBAQCBoZWFwYW1faW5kZXhfZ2V0bmV4dF9zbG90KElu ZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCiAJCQl7CiAJCQkJLyog Tm8gdmlzaWJsZSB0dXBsZSAqLwogCQkJCWlmIChhbGxfZGVhZCkKLQkJCQkJaGVhcGFtX2luZGV4 X2tpbGxfaXRlbShzY2FuKTsKKwkJCQkJaGVhcGFtX2luZGV4X2tpbGxfaXRlbShzY2FuLCBhbWdl dGJhdGNoKTsKIAogCQkJCS8qCiAJCQkJICogSWYgY2FsbGVyIHNldCBhIHZpc2l0ZWQtcGFnZXMg bGltaXQgKG9ubHkgc2VsZnVuY3MuYydzCkBAIC01MjUsOCArNzA0LDcgQEAgaGVhcGFtX2luZGV4 X2dldG5leHRfc2xvdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9u LAogCQkJICogdXMgdG8gYXNzdW1lIHRoYXQganVzdCBoYXZpbmcgb25lIHZpc2libGUgdHVwbGUg aW4gdGhlIGhvdAogCQkJICogY2hhaW4gaXMgYWx3YXlzIGdvb2QgZW5vdWdoLgogCQkJICovCi0J CQlBc3NlcnQoIWluZGV4X29ubHkgfHwKLQkJCQkgICAhKCpoZWFwX2NvbnRpbnVlICYmIElzTVZD Q1NuYXBzaG90KHNjYW4tPnhzX3NuYXBzaG90KSkpOworCQkJQXNzZXJ0KCFpbmRleF9vbmx5IHx8 ICEoKmhlYXBfY29udGludWUgJiYgc2Nhbi0+TVZDQ1NjYW4pKTsKIAkJfQogCQllbHNlCiAJCXsK QEAgLTY0Niw3ICs4MjQsNyBAQCBoZWFwYW1faW5kZXhfaGVhcF9mZXRjaChJbmRleFNjYW5EZXNj IHNjYW4sIEluZGV4U2NhbkhlYXBEYXRhICpoc2NhbiwKIAkJCSAqIE9ubHkgaW4gYSBub24tTVZD QyBzbmFwc2hvdCBwbGFpbiBzY2FuIGNhbiBtb3JlIHRoYW4gb25lIG1lbWJlcgogCQkJICogb2Yg dGhlIEhPVCBjaGFpbiBiZSB2aXNpYmxlCiAJCQkgKi8KLQkJCSpoZWFwX2NvbnRpbnVlID0gIUlz TVZDQ0xpa2VTbmFwc2hvdChzbmFwc2hvdCk7CisJCQkqaGVhcF9jb250aW51ZSA9ICFzY2FuLT5N VkNDU2NhbjsKIAogCQkJc2xvdC0+dHRzX3RhYmxlT2lkID0gUmVsYXRpb25HZXRSZWxpZChyZWwp OwogCQkJRXhlY1N0b3JlQnVmZmVySGVhcFR1cGxlKGhlYXBUdXBsZSwgc2xvdCwgaHNjYW4tPnhz X2NidWYpOwpAQCAtNjgxLDE1ICs4NTksMjkzIEBAIGhlYXBhbV9pbmRleF9oZWFwX2ZldGNoKElu ZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuSGVhcERhdGEgKmhzY2FuLAogICogUmVsYXRpb25H ZXRJbmRleFNjYW4oKS4KICAqLwogc3RhdGljIHBnX2F0dHJpYnV0ZV9hbHdheXNfaW5saW5lIHZv aWQKLWhlYXBhbV9pbmRleF9raWxsX2l0ZW0oSW5kZXhTY2FuRGVzYyBzY2FuKQoraGVhcGFtX2lu ZGV4X2tpbGxfaXRlbShJbmRleFNjYW5EZXNjIHNjYW4sIGJvb2wgYW1nZXRiYXRjaCkKIHsKIAlp ZiAoc2Nhbi0+eGFjdFN0YXJ0ZWRJblJlY292ZXJ5KQogCQlyZXR1cm47CiAKLQkvKgotCSAqIFRl bGwgYW1nZXR0dXBsZS1iYXNlZCBpbmRleCBBTSB0byBraWxsIGl0cyBlbnRyeSBmb3IgdGhhdCBU SUQuICBUaGUKLQkgKiBuZXh0IGluZGV4X2dldG5leHRfdGlkIGNhbGwgd2lsbCBwYXNzIHRoYXQg YWxvbmcgdG8gdGhlIGluZGV4IEFNLAotCSAqIGJlZm9yZSB1bnNldHRpbmcgdGhlIGZsYWcgYWdh aW4uCi0JICovCi0Jc2Nhbi0+a2lsbF9wcmlvcl90dXBsZSA9IHRydWU7CisJaWYgKGFtZ2V0YmF0 Y2gpCisJCXRhYmxlYW1fdXRpbF9zY2FucG9zX2tpbGxpdGVtKHNjYW4pOworCWVsc2UKKwl7CisJ CS8qCisJCSAqIFRlbGwgYW1nZXR0dXBsZS1iYXNlZCBpbmRleCBBTSB0byBraWxsIGl0cyBlbnRy eSBmb3IgdGhhdCBUSUQuICBUaGUKKwkJICogbmV4dCB0YWJsZWFtX3V0aWxfZmV0Y2hfbmV4dF90 dXBsZV90aWQgY2FsbCB3aWxsIHBhc3MgdGhhdCBhbG9uZyB0bworCQkgKiB0aGUgaW5kZXggQU0s IGJlZm9yZSB1bnNldHRpbmcgdGhlIGZsYWcgYWdhaW4uCisJCSAqLworCQlzY2FuLT5raWxsX3By aW9yX3R1cGxlID0gdHJ1ZTsKKwl9Cit9CisKKy8qCisgKiBHZXQgbmV4dCBUSUQgZnJvbSBiYXRj aCByaW5nIGJ1ZmZlciwgbW92aW5nIGluIHRoZSBnaXZlbiBzY2FuIGRpcmVjdGlvbi4KKyAqIEFs c28gc2V0cyAqYWxsX3Zpc2libGUgZm9yIGl0ZW0gd2hlbiBjYWxsZXIgcGFzc2VzIGEgbm9uLU5V TEwgYXJnLgorICovCitzdGF0aWMgcGdfYXR0cmlidXRlX2Fsd2F5c19pbmxpbmUgSXRlbVBvaW50 ZXIKK2hlYXBhbV9pbmRleF9nZXRuZXh0X3NjYW5iYXRjaF9wb3MoSW5kZXhTY2FuRGVzYyBzY2Fu LCBJbmRleFNjYW5IZWFwRGF0YSAqaHNjYW4sCisJCQkJCQkJCSAgIFNjYW5EaXJlY3Rpb24gZGly ZWN0aW9uLCBib29sICphbGxfdmlzaWJsZSkKK3sKKwlCYXRjaFJpbmdJdGVtUG9zICpzY2FuUG9z ID0gJnNjYW4tPmJhdGNocmluZ2J1Zi5zY2FuUG9zOworCUluZGV4U2NhbkJhdGNoIHNjYW5CYXRj aDsKKworCUFzc2VydChhbGxfdmlzaWJsZSA9PSBOVUxMIHx8IHNjYW4tPnhzX3dhbnRfaXR1cCk7 CisKKwkvKgorCSAqIEF0dGVtcHQgdG8gaW5jcmVtZW50IHRoZSBwb3NpdGlvbiBvZiBhbnkgZXhp c3RpbmcgbG9hZGVkIHNjYW5CYXRjaAorCSAqIChhbHdheXMgZmFpbHMgb24gZmlyc3QgY2FsbCBo ZXJlIGZvciB0aGUgc2NhbikKKwkgKi8KKwlpZiAodGFibGVhbV91dGlsX3NjYW5wb3NfYWR2YW5j ZShzY2FuLCBkaXJlY3Rpb24sICZzY2FuQmF0Y2gsIHNjYW5Qb3MpKQorCXsKKwkJLyoKKwkJICog SW5jcmVtZW50ZWQgc2NhblBvcyB3aXRoaW4gZXhpc3RpbmcgbG9hZGVkIHNjYW5CYXRjaDsgcmV0 dXJuIHRoZQorCQkgKiBuZXcgcG9zaXRpb24ncyBUSUQgdG8gY2FsbGVyCisJCSAqLworCQlyZXR1 cm4gaGVhcGFtX2luZGV4X3JldHVybl9zY2FucG9zX3RpZChzY2FuLCBoc2NhbiwgZGlyZWN0aW9u LAorCQkJCQkJCQkJCQkgICBzY2FuQmF0Y2gsIHNjYW5Qb3MsCisJCQkJCQkJCQkJCSAgIGFsbF92 aXNpYmxlKTsKKwl9CisKKwkvKiBUcnkgdG8gYWR2YW5jZSBzY2FuQmF0Y2ggdG8gdGhlIG5leHQg YmF0Y2ggKG9yIGdldCB0aGUgZmlyc3QgYmF0Y2gpICovCisJc2NhbkJhdGNoID0gdGFibGVhbV91 dGlsX2ZldGNoX25leHRfYmF0Y2goc2NhbiwgZGlyZWN0aW9uLAorCQkJCQkJCQkJCQkgIHNjYW5C YXRjaCwgc2NhblBvcyk7CisKKwlpZiAoIXNjYW5CYXRjaCkKKwl7CisJCS8qIFdlJ3JlIGRvbmU7 IG5vIG1vcmUgYmF0Y2hlcyBpbiB0aGUgY3VycmVudCBzY2FuIGRpcmVjdGlvbiAqLworCQlyZXR1 cm4gTlVMTDsKKwl9CisKKwkvKgorCSAqIFVwZGF0ZSBiYXRjaHJpbmdidWYgYW5kIHNjYW5Qb3Mg c3VjaCB0aGF0IHRoZSBzY2FuIGNhbiBjb250aW51ZSB3aXRoCisJICogb3VyIG5ldyBzY2FuQmF0 Y2guCisJICoKKwkgKiBUaGlzIHdpbGwgcG9zaXRpb24gc2NhblBvcyB0byB0aGUgc3RhcnQgb2Yg b3VyIG5ldyBzY2FuQmF0Y2guICBJdCB3aWxsCisJICogYWxzbyByZW1vdmUgdGhlIG9sZCBoZWFk IGJhdGNoL3NjYW5CYXRjaCBmcm9tIHRoZSBiYXRjaCByaW5nIGJ1ZmZlciwKKwkgKiBhbmQgcmVs ZWFzZSB0aGUgdW5kZXJseWluZyBiYXRjaCBzdG9yYWdlLgorCSAqLworCXRhYmxlYW1fdXRpbF9z Y2FucG9zX25leHRiYXRjaChzY2FuLCBkaXJlY3Rpb24sIHNjYW5CYXRjaCk7CisKKwkvKgorCSAq IFNldCBzY2FuUG9zIHRvIGZpcnN0IGl0ZW0gZm9yIG5ld2x5IGxvYWRlZCBzY2FuQmF0Y2g7IHJl dHVybiB0aGUgbmV3CisJICogcG9zaXRpb24ncyBUSUQgdG8gY2FsbGVyCisJICovCisJcmV0dXJu IGhlYXBhbV9pbmRleF9yZXR1cm5fc2NhbnBvc190aWQoc2NhbiwgaHNjYW4sIGRpcmVjdGlvbiwK KwkJCQkJCQkJCQkgICBzY2FuQmF0Y2gsIHNjYW5Qb3MsIGFsbF92aXNpYmxlKTsKK30KKworLyoK KyAqIFNhdmUgdGhlIGN1cnJlbnQgc2NhblBvcy9zY2FuQmF0Y2ggaXRlbSdzIFRJRCBpbiBzY2Fu J3MgeHNfaGVhcHRpZCwgYW5kCisgKiByZXR1cm4gYSBwb2ludGVyIHRvIHRoYXQgVElELiAgV2hl biBhbGxfdmlzaWJsZSBpc24ndCBOVUxMIChkdXJpbmcgYW4KKyAqIGluZGV4LW9ubHkgc2Nhbiks IGFsc28gc2V0cyBpdGVtJ3MgdmlzaWJpbGl0eSBzdGF0dXMgaW4gKmFsbF92aXNpYmxlLgorICoK KyAqIGhlYXBhbV9pbmRleF9nZXRuZXh0X3NjYW5iYXRjaF9wb3MgaGVscGVyIGZ1bmN0aW9uLgor ICovCitzdGF0aWMgaW5saW5lIEl0ZW1Qb2ludGVyCitoZWFwYW1faW5kZXhfcmV0dXJuX3NjYW5w b3NfdGlkKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuSGVhcERhdGEgKmhzY2FuLAorCQkJ CQkJCQlTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQkJCQkJSW5kZXhTY2FuQmF0Y2ggc2Nh bkJhdGNoLAorCQkJCQkJCQlCYXRjaFJpbmdJdGVtUG9zICpzY2FuUG9zLAorCQkJCQkJCQlib29s ICphbGxfdmlzaWJsZSkKK3sKKwlIZWFwQmF0Y2hEYXRhICpoYmF0Y2g7CisKKwkvKiBTZXQgeHNf aGVhcHRpZCwgd2hpY2ggY2FsbGVyIChhbmQgY29yZSBleGVjdXRvcikgd2lsbCBuZWVkICovCisJ c2Nhbi0+eHNfaGVhcHRpZCA9IHNjYW5CYXRjaC0+aXRlbXNbc2NhblBvcy0+aXRlbV0udGFibGVU aWQ7CisKKwlpZiAoYWxsX3Zpc2libGUgPT0gTlVMTCkKKwl7CisJCS8qCisJCSAqIFBsYWluIGlu ZGV4IHNjYW4uCisJCSAqLworCQlBc3NlcnQoIXNjYW4tPnhzX3dhbnRfaXR1cCk7CisJCXJldHVy biAmc2Nhbi0+eHNfaGVhcHRpZDsKKwl9CisKKwkvKiBJbmRleC1vbmx5IHNjYW4gKi8KKwlBc3Nl cnQoc2Nhbi0+eHNfd2FudF9pdHVwKTsKKworCXNjYW4tPnhzX2l0dXAgPSAoSW5kZXhUdXBsZSkg KHNjYW5CYXRjaC0+Y3VyclR1cGxlcyArCisJCQkJCQkJCSAgc2NhbkJhdGNoLT5pdGVtc1tzY2Fu UG9zLT5pdGVtXS50dXBsZU9mZnNldCk7CisKKwkvKgorCSAqIFNldCB2aXNpYmlsaXR5IGluZm8g Zm9yIHRoZSBjdXJyZW50IHNjYW5Qb3MgaXRlbSAocGx1cyBwb3NzaWJseSBzb21lCisJICogYWRk aXRpb25hbCBpdGVtcyBpbiB0aGUgY3VycmVudCBzY2FuIGRpcmVjdGlvbikgYXMgbmVlZGVkCisJ ICovCisJaGJhdGNoID0gaW5kZXhfc2Nhbl9iYXRjaF90YWJsZV9hcmVhKHNjYW4sIHNjYW5CYXRj aCk7CisJaWYgKCFIRUFQX0JBVENIX1ZJU19DQUNIRUQoaGJhdGNoLCBzY2FuUG9zLT5pdGVtKSkK KwkJaGVhcGFtX2luZGV4X2JhdGNoX3Bvc192aXNpYmlsaXR5KHNjYW4sIGRpcmVjdGlvbiwKKwkJ CQkJCQkJCQkgIHNjYW5CYXRjaCwgaGJhdGNoLCBzY2FuUG9zKTsKKworCS8qIEZpbmFsbHksIHNl dCBhbGxfdmlzaWJsZSBmb3IgY2FsbGVyICovCisJKmFsbF92aXNpYmxlID0gaGJhdGNoLT5iYXRj aHZpc1tzY2FuUG9zLT5pdGVtXTsKKworCXJldHVybiAmc2Nhbi0+eHNfaGVhcHRpZDsKK30KKwor LyoKKyAqIE9idGFpbiB2aXNpYmlsaXR5IGluZm9ybWF0aW9uIGZvciBhIFRJRCBmcm9tIGNhbGxl cidzIGJhdGNoLgorICoKKyAqIENhbGxlZCBkdXJpbmcgYW1nZXRiYXRjaCBpbmRleC1vbmx5IHNj YW5zLiAgV2UgYWx3YXlzIG1ha2Ugc3VyZSB0aGF0IHRoZQorICogdmlzaWJpbGl0eSBvZiBjYWxs ZXIncyBpdGVtIChhbiBvZmZzZXQgaW50byBjYWxsZXIncyBiYXRjaC0+aXRlbXNbXSBhcnJheSkK KyAqIGhhcyBiZWVuIHNldCBpbiBpdHMgYmF0Y2gncyBiYXRjaHZpc1tdLiAgV2UgbWlnaHQgYWxz byBzZXQgdmlzaWJpbGl0eSBpbmZvCisgKiBmb3Igb3RoZXIgaXRlbXMgZnJvbSBjYWxsZXIncyBi YXRjaCBtb3JlIHByb2FjdGl2ZWx5IHdoZW4gdGhhdCBtYWtlcyBzZW5zZS4KKyAqCisgKiBFdmVy eSBpdGVtIGhhcyBpdHMgYmF0Y2h2aXNbXSBlbnRyeSBzZXQgZXhhY3RseSBvbmNlIChvciBuZXZl cikuICBXZSBtYWtlCisgKiBzdXJlIHRoYXQgdGhlIHNjYW4gaGFzIGEgZml4ZWQgcGljdHVyZSBv ZiB3aGljaCBibG9ja3MgaXQnbGwgbmVlZCB0byBmZXRjaAorICogaW4gdGhlIG5lYXIgZnV0dXJl LiAgSWYgY2FsbGVyJ3MgcG9zaXRpb24ncyBpdGVtIChvciBvdGhlciBuZWFyYnkgaXRlbXMpCisg KiBhbHJlYWR5IGhhdmUgYSB2YWxpZCBiYXRjaHZpc1tdIGVudHJ5LCB3ZSBtdXN0IGF2b2lkIGNs b2JiZXJpbmcgdGhhdCBlbnRyeS4KKyAqCisgKiBXZSBrZWVwIHR3byBjb21wZXRpbmcgY29uc2lk ZXJhdGlvbnMgaW4gYmFsYW5jZSB3aGVuIGRldGVybWluaW5nIHdoZXRoZXIgdG8KKyAqIGNoZWNr IGFkZGl0aW9uYWwgaXRlbXM6IHRoZSBuZWVkIHRvIGtlZXAgdGhlIGNvc3Qgb2YgdmlzaWJpbGl0 eSBtYXAgYWNjZXNzCisgKiB1bmRlciBjb250cm9sIHdoZW4gbW9zdCBpdGVtcyB3aWxsIG5ldmVy IGJlIHJldHVybmVkIGJ5IHRoZSBzY2FuIGFueXdheQorICogKGltcG9ydGFudCBmb3IgaW5uZXIg aW5kZXggc2NhbnMgb2YgYW50aS1qb2lucyBhbmQgc2VtaS1qb2lucyksIGFuZCB0aGUKKyAqIG5l ZWQgdG8gdW5ndWFyZCBiYXRjaGVzIHByb21wdGx5LgorICoKKyAqIE9uY2Ugd2UndmUgcmVzb2x2 ZWQgdmlzaWJpbGl0eSBmb3IgYWxsIGl0ZW1zIGluIGEgYmF0Y2gsIHdlIGNhbiBzYWZlbHkKKyAq IHVuZ3VhcmQgaXQgYnkgY2FsbGluZyBhbXVuZ3VhcmRiYXRjaC4gIFRoaXMgaXMgc2FmZSB3aXRo IHJlc3BlY3QgdG8KKyAqIGNvbmN1cnJlbnQgVkFDVVVNIGJlY2F1c2UgdGhlIGJhdGNoJ3MgZ3Vh cmQgKHR5cGljYWxseSBhIGJ1ZmZlciBwaW4gb24gdGhlCisgKiBvcmlnaW5hdGluZyBpbmRleCBw YWdlKSBibG9ja3MgVkFDVVVNIGZyb20gYWNxdWlyaW5nIGEgY29uZmxpY3RpbmcgY2xlYW51cAor ICogbG9jayBvbiB0aGF0IHBhZ2UuICBDb3B5aW5nIHRoZSByZWxldmFudCB2aXNpYmlsaXR5IG1h cCBkYXRhIGludG8gb3VyIGxvY2FsCisgKiBjYWNoZSBzdWZmaWNlcyB0byBwcmV2ZW50IHVuc2Fm ZSBjb25jdXJyZW50IFRJRCByZWN5Y2xpbmc6IGlmIGFueSBvZiB0aGVzZQorICogVElEcyBwb2lu dCB0byBkZWFkIGhlYXAgdHVwbGVzLCBWQUNVVU0gY2Fubm90IHBvc3NpYmx5IHJldHVybiBmcm9t CisgKiBhbWJ1bGtkZWxldGUgYW5kIG1hcmsgdGhlIHBvaW50ZWQtdG8gaGVhcCBwYWdlcyBhcyBh bGwtdmlzaWJsZS4gIFZBQ1VVTQorICogX2Nhbl8gZG8gc28gb25jZSB0aGUgYmF0Y2ggaXMgdW5n dWFyZGVkLCBidXQgdGhhdCdzIG9rYXk7IHdlJ2xsIGJlIHdvcmtpbmcKKyAqIG9mZiBvZiBjYWNo ZWQgdmlzaWJpbGl0eSBpbmZvIHRoYXQgaW5kaWNhdGVzIHRoYXQgdGhlIGRlYWQgVElEcyBhcmUg Tk9UCisgKiBhbGwtdmlzaWJsZS4KKyAqCisgKiBXaGF0IGFib3V0IHRoZSBvcHBvc2l0ZSBjYXNl LCB3aGVyZSBhIHBhZ2Ugd2FzIGFsbC12aXNpYmxlIHdoZW4gd2UgY2FjaGVkCisgKiB0aGUgVk0g Yml0cyBidXQgdHVwbGVzIG9uIGl0IGFyZSBkZWxldGVkIGFmdGVyd2FyZHM/ICBUaGF0IGlzIHNh ZmUgdG9vOiBhbnkKKyAqIHR1cGxlIHRoYXQgd2FzIHZpc2libGUgdG8gYWxsIHdoZW4gd2UgcmVh ZCB0aGUgVk0gbXVzdCBhbHNvIGJlIHZpc2libGUgdG8KKyAqIG91ciBNVkNDIHNuYXBzaG90LCBz byBpdCBpcyBjb3JyZWN0IHRvIHNraXAgdGhlIGhlYXAgZmV0Y2ggZm9yIHRob3NlIFRJRHMuCisg Ki8KK3N0YXRpYyB2b2lkCitoZWFwYW1faW5kZXhfYmF0Y2hfcG9zX3Zpc2liaWxpdHkoSW5kZXhT Y2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQkJCQkJICBJbmRleFNj YW5CYXRjaCBiYXRjaCwgSGVhcEJhdGNoRGF0YSAqaGJhdGNoLAorCQkJCQkJCQkgIEJhdGNoUmlu Z0l0ZW1Qb3MgKnBvcykKK3sKKwlJbmRleFNjYW5IZWFwRGF0YSAqaHNjYW4gPSAoSW5kZXhTY2Fu SGVhcERhdGEgKikgc2Nhbi0+eHNfdGFibGVfb3BhcXVlOworCWludAkJCXBvc0l0ZW0gPSBwb3Mt Pml0ZW07CisJaW50CQkJbG9JdGVtLAorCQkJCWhpSXRlbTsKKwlCbG9ja051bWJlciBjdXJ2bWhl YXBibGtubyA9IEludmFsaWRCbG9ja051bWJlcjsKKwlib29sCQljdXJ2bWhlYXBhbGx2aXMgPSBm YWxzZTsKKworCUFzc2VydChoYmF0Y2ggPT0gaW5kZXhfc2Nhbl9iYXRjaF90YWJsZV9hcmVhKHNj YW4sIGJhdGNoKSk7CisKKwkvKgorCSAqIFRoZSBiYXRjaCBtdXN0IHN0aWxsIGJlIGd1YXJkZWQg d2hlbmV2ZXIgd2UncmUgY2FsbGVkLgorCSAqCisJICogYW11bmd1YXJkYmF0Y2ggY2FuJ3QgYmUg Y2FsbGVkIHVudGlsIHdlJ3ZlIGFscmVhZHkgc2V0IF9ldmVyeV8gYmF0Y2gKKwkgKiBpdGVtJ3Mg YmF0Y2h2aXNbXSBzdGF0dXMsIGJ1dCBpZiB3ZSd2ZSBhbHJlYWR5IGRvbmUgc28gZm9yIHRoaXMg YmF0Y2gKKwkgKiB0aGVuIGl0IHNob3VsZG4ndCBldmVyIGdldCBwYXNzZWQgdG8gdXMgYWdhaW4g Ynkgc29tZSBzdWJzZXF1ZW50IGNhbGwuCisJICogKFRoaXMgcmVsaWVzIG9uIGluZGV4LW9ubHkg c2NhbnMgYWx3YXlzIGJlaW5nICFiYXRjaEltbWVkaWF0ZVVuZ3VhcmQuKQorCSAqLworCUFzc2Vy dChiYXRjaC0+aXNHdWFyZGVkICYmICFzY2FuLT5iYXRjaEltbWVkaWF0ZVVuZ3VhcmQpOworCisJ LyoKKwkgKiBTZXQgdmlzaWJpbGl0eSBpbmZvIGZvciBhIHJhbmdlIG9mIGl0ZW1zLCBpbiBzY2Fu IG9yZGVyLgorCSAqCisJICogTm90ZTogdmlzaWJpbGl0eW1hcF9nZXRfc3RhdHVzIGRvZXMgbm90 IGxvY2sgdGhlIHZpc2liaWxpdHkgbWFwIGJ1ZmZlciwKKwkgKiBzbyB0aGUgcmVzdWx0IGNvdWxk IGJlIHNsaWdodGx5IHN0YWxlLiAgU2VlIHRoZSAiTWVtb3J5IG9yZGVyaW5nCisJICogZWZmZWN0 cyIgZGlzY3Vzc2lvbiBhYm92ZSB2aXNpYmlsaXR5bWFwX2dldF9zdGF0dXMgZm9yIGFuIGV4cGxh bmF0aW9uCisJICogb2Ygd2h5IHRoaXMgaXMgb2theS4KKwkgKi8KKwlpZiAoU2NhbkRpcmVjdGlv bklzRm9yd2FyZChkaXJlY3Rpb24pKQorCXsKKwkJaW50CQkJbGFzdFNldEl0ZW0gPSBNaW4oYmF0 Y2gtPmxhc3RJdGVtLAorCQkJCQkJCQkJICBwb3NJdGVtICsgaHNjYW4tPnhzX3ZtX2l0ZW1zIC0g MSk7CisKKwkJZm9yIChpbnQgc2V0SXRlbSA9IHBvc0l0ZW07IHNldEl0ZW0gPD0gbGFzdFNldEl0 ZW07IHNldEl0ZW0rKykKKwkJeworCQkJSXRlbVBvaW50ZXIgdGlkID0gJmJhdGNoLT5pdGVtc1tz ZXRJdGVtXS50YWJsZVRpZDsKKwkJCUJsb2NrTnVtYmVyIGhlYXBibGtubyA9IEl0ZW1Qb2ludGVy R2V0QmxvY2tOdW1iZXIodGlkKTsKKworCQkJLyogTXVzdCBuZXZlciBvdmVyd3JpdGUgYW55IGJh dGNoIGl0ZW0ncyBjYWNoZWQgdmlzaWJpbGl0eSBpbmZvICovCisJCQlpZiAoSEVBUF9CQVRDSF9W SVNfQ0FDSEVEKGhiYXRjaCwgc2V0SXRlbSkpCisJCQkJY29udGludWU7CisKKwkJCWlmIChoZWFw Ymxrbm8gIT0gY3Vydm1oZWFwYmxrbm8pCisJCQl7CisJCQkJY3Vydm1oZWFwYWxsdmlzID0gVk1f QUxMX1ZJU0lCTEUoc2Nhbi0+aGVhcFJlbGF0aW9uLCBoZWFwYmxrbm8sCisJCQkJCQkJCQkJCQkg JmhzY2FuLT54c192bWJ1ZmZlcik7CisJCQkJY3Vydm1oZWFwYmxrbm8gPSBoZWFwYmxrbm87CisJ CQl9CisKKwkJCWhiYXRjaC0+YmF0Y2h2aXNbc2V0SXRlbV0gPSBjdXJ2bWhlYXBhbGx2aXM7CisJ CX0KKworCQkvKiBXZSBqdXN0IGNhY2hlZCB2aXNpYmlsaXR5IGZvciBpdGVtcyBbcG9zSXRlbSwg bGFzdFNldEl0ZW1dICovCisJCWxvSXRlbSA9IHBvc0l0ZW07CisJCWhpSXRlbSA9IGxhc3RTZXRJ dGVtOworCX0KKwllbHNlCisJeworCQlpbnQJCQlsYXN0U2V0SXRlbSA9IE1heChiYXRjaC0+Zmly c3RJdGVtLAorCQkJCQkJCQkJICBwb3NJdGVtIC0gaHNjYW4tPnhzX3ZtX2l0ZW1zICsgMSk7CisK KwkJZm9yIChpbnQgc2V0SXRlbSA9IHBvc0l0ZW07IHNldEl0ZW0gPj0gbGFzdFNldEl0ZW07IHNl dEl0ZW0tLSkKKwkJeworCQkJSXRlbVBvaW50ZXIgdGlkID0gJmJhdGNoLT5pdGVtc1tzZXRJdGVt XS50YWJsZVRpZDsKKwkJCUJsb2NrTnVtYmVyIGhlYXBibGtubyA9IEl0ZW1Qb2ludGVyR2V0Qmxv Y2tOdW1iZXIodGlkKTsKKworCQkJLyogTXVzdCBuZXZlciBvdmVyd3JpdGUgYW55IGJhdGNoIGl0 ZW0ncyBjYWNoZWQgdmlzaWJpbGl0eSBpbmZvICovCisJCQlpZiAoSEVBUF9CQVRDSF9WSVNfQ0FD SEVEKGhiYXRjaCwgc2V0SXRlbSkpCisJCQkJY29udGludWU7CisKKwkJCWlmIChoZWFwYmxrbm8g IT0gY3Vydm1oZWFwYmxrbm8pCisJCQl7CisJCQkJY3Vydm1oZWFwYWxsdmlzID0gVk1fQUxMX1ZJ U0lCTEUoc2Nhbi0+aGVhcFJlbGF0aW9uLCBoZWFwYmxrbm8sCisJCQkJCQkJCQkJCQkgJmhzY2Fu LT54c192bWJ1ZmZlcik7CisJCQkJY3Vydm1oZWFwYmxrbm8gPSBoZWFwYmxrbm87CisJCQl9CisK KwkJCWhiYXRjaC0+YmF0Y2h2aXNbc2V0SXRlbV0gPSBjdXJ2bWhlYXBhbGx2aXM7CisJCX0KKwor CQkvKiBXZSBqdXN0IGNhY2hlZCB2aXNpYmlsaXR5IGZvciBpdGVtcyBbbGFzdFNldEl0ZW0sIHBv c0l0ZW1dICovCisJCWxvSXRlbSA9IGxhc3RTZXRJdGVtOworCQloaUl0ZW0gPSBwb3NJdGVtOwor CX0KKworCS8qCisJICogRXh0ZW5kIHRoZSBiYXRjaCdzIHZhbGlkIHJhbmdlIHRvIGNvdmVyIHRo ZSBpdGVtcyB3ZSBqdXN0IGNhY2hlZC4gIFRoZQorCSAqIHNldCBvZiBjYWNoZWQgaXRlbXMgaXMg YWx3YXlzIGNvbnRpZ3VvdXMsIGJlY2F1c2UgdGhlIHNjYW4gdmlzaXRzIGl0ZW1zCisJICogaW4g b3JkZXIgYW5kIG9ubHkgZXZlciBleHRlbmRzIHRoZSByYW5nZSBmcm9tIGZpcnN0SXRlbSBmb3J3 YXJkcyBvcgorCSAqIGZyb20gbGFzdEl0ZW0gYmFja3dhcmRzLgorCSAqLworCUFzc2VydChoYmF0 Y2gtPmZpcnN0VmlzU2V0ID4gaGJhdGNoLT5sYXN0VmlzU2V0IHx8CS8qIHN0aWxsIGNvbnRpZ3Vv dXM/ICovCisJCSAgIChsb0l0ZW0gPD0gaGJhdGNoLT5sYXN0VmlzU2V0ICsgMSAmJgorCQkJaGlJ dGVtID49IGhiYXRjaC0+Zmlyc3RWaXNTZXQgLSAxKSk7CisJaGJhdGNoLT5maXJzdFZpc1NldCA9 IE1pbihoYmF0Y2gtPmZpcnN0VmlzU2V0LCBsb0l0ZW0pOworCWhiYXRjaC0+bGFzdFZpc1NldCA9 IE1heChoYmF0Y2gtPmxhc3RWaXNTZXQsIGhpSXRlbSk7CisKKwkvKgorCSAqIEl0J3Mgc2FmZSB0 byB1bmd1YXJkIHRoZSBiYXRjaCAodmlhIGFtdW5ndWFyZGJhdGNoKSBhcyBzb29uIGFzIHdlJ3Zl CisJICogcmVzb2x2ZWQgdGhlIHZpc2liaWxpdHkgc3RhdHVzIG9mIGFsbCBvZiBpdHMgaXRlbXMg KHVubGVzcyB0aGlzIGlzIGEKKwkgKiBub24tTVZDQyBzY2FuKQorCSAqLworCWlmIChoYmF0Y2gt PmZpcnN0VmlzU2V0IDw9IGJhdGNoLT5maXJzdEl0ZW0gJiYKKwkJaGJhdGNoLT5sYXN0VmlzU2V0 ID49IGJhdGNoLT5sYXN0SXRlbSkKKwl7CisJCUFzc2VydChoYmF0Y2gtPmZpcnN0VmlzU2V0ID09 IGJhdGNoLT5maXJzdEl0ZW0gJiYKKwkJCSAgIGhiYXRjaC0+bGFzdFZpc1NldCA9PSBiYXRjaC0+ bGFzdEl0ZW0pOworCisJCS8qCisJCSAqIE5vdGU6IG5vZGVJbmRleG9ubHlzY2FuLmMgb25seSBz dXBwb3J0cyBNVkNDIHNuYXBzaG90cywgYnV0IHdlCisJCSAqIHN0aWxsIGNvcGUgd2l0aCBpbmRl eC1vbmx5IHNjYW4gY2FsbGVycyB3aXRoIG90aGVyIHNuYXBzaG90IHR5cGVzLgorCQkgKiBUaGlz IGlzIGNlcnRhaW5seSBub3QgdW5leHBlY3RlZDsgc2VsZnVuY3MuYyBwZXJmb3JtcyBpbmRleC1v bmx5CisJCSAqIHNjYW5zIHRoYXQgdXNlIFNuYXBzaG90Tm9uVmFjdXVtYWJsZS4KKwkJICovCisJ CWlmIChzY2FuLT5NVkNDU2NhbikKKwkJCXRhYmxlYW1fdXRpbF91bmd1YXJkX2JhdGNoKHNjYW4s IGJhdGNoKTsKKwl9CisKKwkvKgorCSAqIEVsc2UgY2hlY2sgdmlzaWJpbGl0eSBmb3IgdHdpY2Ug YXMgbWFueSBpdGVtcyBuZXh0IHRpbWUsIG9yIGFsbCBpdGVtcy4KKwkgKiBXZSBjaGVjayBhbGwg aXRlbXMgaW4gb25lIGdvIG9uY2Ugd2UncmUgcGFzc2VkIHRoZSBzY2FuJ3MgZmlyc3QgYmF0Y2gu CisJICovCisJZWxzZSBpZiAoaHNjYW4tPnhzX3ZtX2l0ZW1zIDwgKGJhdGNoLT5sYXN0SXRlbSAt IGJhdGNoLT5maXJzdEl0ZW0pKQorCQloc2Nhbi0+eHNfdm1faXRlbXMgKj0gMjsKKwllbHNlCisJ CWhzY2FuLT54c192bV9pdGVtcyA9IHNjYW4tPm1heGl0ZW1zYmF0Y2g7CiB9CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvTWFrZWZpbGUgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv aW5kZXgvTWFrZWZpbGUKaW5kZXggNmYyZTMwNjFhLi5lNmQ2ODFiNDAgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9NYWtlZmlsZQorKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv aW5kZXgvTWFrZWZpbGUKQEAgLTE2LDYgKzE2LDcgQEAgT0JKUyA9IFwKIAlhbWFwaS5vIFwKIAlh bXZhbGlkYXRlLm8gXAogCWdlbmFtLm8gXAotCWluZGV4YW0ubworCWluZGV4YW0ubyBcCisJaW5k ZXhiYXRjaC5vCiAKIGluY2x1ZGUgJCh0b3Bfc3JjZGlyKS9zcmMvYmFja2VuZC9jb21tb24ubWsK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9hbWFwaS5jIGIvc3JjL2JhY2tl bmQvYWNjZXNzL2luZGV4L2FtYXBpLmMKaW5kZXggZWZhMDA3MDMwLi5kNGFkYmJlYjIgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9hbWFwaS5jCisrKyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy9pbmRleC9hbWFwaS5jCkBAIC01NSw2ICs1NSwxMSBAQCBHZXRJbmRleEFtUm91dGlu ZShPaWQgYW1oYW5kbGVyKQogCUFzc2VydChyb3V0aW5lLT5hbXJlc2NhbiAhPSBOVUxMKTsKIAlB c3NlcnQocm91dGluZS0+YW1lbmRzY2FuICE9IE5VTEwpOwogCisJLyogQXNzZXJ0IHRoYXQgQU0g ZG9lc24ndCBoYXZlIGFuIGludmFsaWQgY29tYmluYXRpb24gb2YgY2FsbGJhY2tzICovCisJQXNz ZXJ0KChyb3V0aW5lLT5hbWdldGJhdGNoICE9IE5VTEwpID09IChyb3V0aW5lLT5hbXVuZ3VhcmRi YXRjaCAhPSBOVUxMKSk7CisJQXNzZXJ0KHJvdXRpbmUtPmFta2lsbGl0ZW1zYmF0Y2ggPT0gTlVM TCB8fCByb3V0aW5lLT5hbWdldGJhdGNoICE9IE5VTEwpOworCUFzc2VydChyb3V0aW5lLT5hbWdl dGJhdGNoICE9IE5VTEwgfHwgcm91dGluZS0+YW1wb3NyZXNldCA9PSBOVUxMKTsKKwogCXJldHVy biByb3V0aW5lOwogfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2Vu YW0uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9nZW5hbS5jCmluZGV4IDE1MTI0MzhkNi4u MTJmYjk1NDM4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYwor KysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYwpAQCAtODksNiArODksOCBAQCBS ZWxhdGlvbkdldEluZGV4U2NhbihSZWxhdGlvbiBpbmRleFJlbGF0aW9uLCBpbnQgbmtleXMsIGlu dCBub3JkZXJieXMpCiAJc2Nhbi0+eHNfc25hcHNob3QgPSBJbnZhbGlkU25hcHNob3Q7CS8qIGNh bGxlciBtdXN0IGluaXRpYWxpemUgdGhpcyAqLwogCXNjYW4tPm51bWJlck9mS2V5cyA9IG5rZXlz OwogCXNjYW4tPm51bWJlck9mT3JkZXJCeXMgPSBub3JkZXJieXM7CisJc2Nhbi0+dXNlYmF0Y2hy aW5nID0gZmFsc2U7IC8qIHNldCBsYXRlciBmb3IgYW1nZXRiYXRjaCBjYWxsZXJzICovCisJbWVt c2V0KCZzY2FuLT5iYXRjaGNhY2hlLCAwLCBzaXplb2Yoc2Nhbi0+YmF0Y2hjYWNoZSkpOwogCiAJ LyoKIAkgKiBXZSBhbGxvY2F0ZSBrZXkgd29ya3NwYWNlIGhlcmUsIGJ1dCBpdCB3b24ndCBnZXQg ZmlsbGVkIHVudGlsIGFtcmVzY2FuLgpAQCAtMTI4LDYgKzEzMCwxMiBAQCBSZWxhdGlvbkdldElu ZGV4U2NhbihSZWxhdGlvbiBpbmRleFJlbGF0aW9uLCBpbnQgbmtleXMsIGludCBub3JkZXJieXMp CiAKIAlzY2FuLT54c19nZXRuZXh0X3Nsb3QgPSBOVUxMOwogCisJc2Nhbi0+YmF0Y2hfaW5kZXhf b3BhcXVlX3N0YXRpYyA9IDA7CisJc2Nhbi0+YmF0Y2hfdHVwbGVzX3dvcmtzcGFjZSA9IDA7CisJ c2Nhbi0+YmF0Y2hfb3BhcXVlX3NpemUgPSAwOworCXNjYW4tPmJhdGNoX3Blcl9pdGVtX3NpemUg PSAwOworCXNjYW4tPmJhdGNoX2Jhc2Vfb2Zmc2V0ID0gMDsKKwogCXNjYW4tPnhzX25hbWVfY3N0 cmluZ19hdHRudW1zID0gTlVMTDsKIAlzY2FuLT54c19uYW1lX2NzdHJpbmdfY291bnQgPSAwOwog CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYwppbmRleCBhYTBkNGIxNDMuLmMzZThlNTRmYiAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYworKysgYi9zcmMv YmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jCkBAIC0xMywxOCArMTMsMTUgQEAKICAqIElO VEVSRkFDRSBST1VUSU5FUwogICoJCWluZGV4X29wZW4JCS0gb3BlbiBhbiBpbmRleCByZWxhdGlv biBieSByZWxhdGlvbiBPSUQKICAqCQlpbmRleF9jbG9zZQkJLSBjbG9zZSBhbiBpbmRleCByZWxh dGlvbgotICoJCWluZGV4X2JlZ2luc2NhbiAtIHN0YXJ0IGEgc2NhbiBvZiBhbiBpbmRleCB3aXRo IGFtZ2V0dHVwbGUKKyAqCQlpbmRleF9iZWdpbnNjYW4gLSBzdGFydCBhIHNjYW4gb2YgYW4gaW5k ZXggd2l0aCBhbWdldGJhdGNoL2FtZ2V0dHVwbGUKICAqCQlpbmRleF9iZWdpbnNjYW5fYml0bWFw IC0gc3RhcnQgYSBzY2FuIG9mIGFuIGluZGV4IHdpdGggYW1nZXRiaXRtYXAKICAqCQlpbmRleF9y ZXNjYW4JLSByZXN0YXJ0IGEgc2NhbiBvZiBhbiBpbmRleAogICoJCWluZGV4X2VuZHNjYW4JLSBl bmQgYSBzY2FuCiAgKgkJaW5kZXhfaW5zZXJ0CS0gaW5zZXJ0IGFuIGluZGV4IHR1cGxlIGludG8g YSByZWxhdGlvbgotICoJCWluZGV4X21hcmtwb3MJLSBtYXJrIGEgc2NhbiBwb3NpdGlvbgotICoJ CWluZGV4X3Jlc3RycG9zCS0gcmVzdG9yZSBhIHNjYW4gcG9zaXRpb24KICAqCQlpbmRleF9wYXJh bGxlbHNjYW5fZXN0aW1hdGUgLSBlc3RpbWF0ZSBzaGFyZWQgbWVtb3J5IGZvciBwYXJhbGxlbCBz Y2FuCiAgKgkJaW5kZXhfcGFyYWxsZWxzY2FuX2luaXRpYWxpemUgLSBpbml0aWFsaXplIHBhcmFs bGVsIHNjYW4KICAqCQlpbmRleF9wYXJhbGxlbHJlc2NhbiAgLSAocmUpc3RhcnQgYSBwYXJhbGxl bCBzY2FuIG9mIGFuIGluZGV4CiAgKgkJaW5kZXhfYmVnaW5zY2FuX3BhcmFsbGVsIC0gam9pbiBw YXJhbGxlbCBpbmRleCBzY2FuCi0gKgkJaW5kZXhfZ2V0bmV4dF90aWQJLSBhbWdldHR1cGxlIHRh YmxlIEFNIGhlbHBlciByb3V0aW5lCiAgKgkJaW5kZXhfZ2V0Yml0bWFwIC0gZ2V0IGFsbCB0dXBs ZXMgZnJvbSBhIHNjYW4KICAqCQlpbmRleF9idWxrX2RlbGV0ZQktIGJ1bGsgZGVsZXRpb24gb2Yg aW5kZXggdHVwbGVzCiAgKgkJaW5kZXhfdmFjdXVtX2NsZWFudXAJLSBwb3N0LWRlbGV0aW9uIGNs ZWFudXAgb2YgYW4gaW5kZXgKQEAgLTQyLDYgKzM5LDcgQEAKICNpbmNsdWRlICJwb3N0Z3Jlcy5o IgogCiAjaW5jbHVkZSAiYWNjZXNzL2FtYXBpLmgiCisjaW5jbHVkZSAiYWNjZXNzL2luZGV4YmF0 Y2guaCIKICNpbmNsdWRlICJhY2Nlc3MvcmVsYXRpb24uaCIKICNpbmNsdWRlICJhY2Nlc3MvcmVs b3B0aW9ucy5oIgogI2luY2x1ZGUgImFjY2Vzcy9yZWxzY2FuLmgiCkBAIC0yNTQsNyArMjUyLDcg QEAgaW5kZXhfaW5zZXJ0X2NsZWFudXAoUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwKIH0KIAogLyoK LSAqIGluZGV4X2JlZ2luc2NhbiAtIHN0YXJ0IGEgc2NhbiBvZiBhbiBpbmRleCB3aXRoIGFtZ2V0 dHVwbGUKKyAqIGluZGV4X2JlZ2luc2NhbiAtIHN0YXJ0IGEgc2NhbiBvZiBhbiBpbmRleCB3aXRo IGFtZ2V0YmF0Y2gvYW1nZXR0dXBsZQogICoKICAqIENhbGxlciBtdXN0IGJlIGhvbGRpbmcgc3Vp dGFibGUgbG9ja3Mgb24gdGhlIGhlYXAgYW5kIHRoZSBpbmRleC4KICAqLwpAQCAtMzM5LDYgKzMz Nyw3IEBAIGluZGV4X2JlZ2luc2Nhbl9pbnRlcm5hbChSZWxhdGlvbiBpbmRleFJlbGF0aW9uLCBS ZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJc2Nhbi0+eHNfdGVtcF9zbmFwID0gdGVtcF9zbmFwOwog CiAJc2Nhbi0+eHNfc25hcHNob3QgPSBzbmFwc2hvdDsKKwlzY2FuLT5NVkNDU2NhbiA9IElzTVZD Q0xpa2VTbmFwc2hvdChzbmFwc2hvdCk7CiAJc2Nhbi0+aW5zdHJ1bWVudCA9IGluc3RydW1lbnQ7 CiAKIAkvKgpAQCAtMzUwLDYgKzM0OSw3IEBAIGluZGV4X2JlZ2luc2Nhbl9pbnRlcm5hbChSZWxh dGlvbiBpbmRleFJlbGF0aW9uLCBSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJCXNjYW4tPmhlYXBS ZWxhdGlvbiA9IGhlYXBSZWxhdGlvbjsKIAkJc2Nhbi0+eHNfd2FudF9pdHVwID0gaW5kZXhfb25s eV9zY2FuOwogCQlzY2FuLT54c19oZWFwX2NvbnRpbnVlID0gZmFsc2U7CisJCXNjYW4tPmJhdGNo SW1tZWRpYXRlVW5ndWFyZCA9IChzY2FuLT5NVkNDU2NhbiAmJiAhaW5kZXhfb25seV9zY2FuKTsK IAogCQkvKgogCQkgKiBGb3IgaW5kZXgtb25seSBzY2FucywgZmluZCBhbnkgIm5hbWUiIGNvbHVt bnMgc3RvcmVkIGFzIGNzdHJpbmdzCkBAIC0zOTQsNiArMzk0LDE0IEBAIGluZGV4X2JlZ2luc2Nh bl9pbnRlcm5hbChSZWxhdGlvbiBpbmRleFJlbGF0aW9uLCBSZWxhdGlvbiBoZWFwUmVsYXRpb24s CiAJCUFzc2VydChzY2FuLT54c19nZXRuZXh0X3Nsb3QgIT0gTlVMTCAmJiBzY2FuLT54c190YWJs ZV9vcGFxdWUgIT0gTlVMTCk7CiAJfQogCisJLyoKKwkgKiBCaXRtYXAgaW5kZXggc2NhbnMgc2hv dWxkIG5ldmVyIHVzZSBhIGJhdGNoIHJpbmcgYnVmZmVyICh0aG91Z2ggY2FuIHVzZQorCSAqIHRo ZSBzY2FuJ3MgYmF0Y2ggY2FjaGUpLiAgUGxhaW4gaW5kZXggc2NhbnMgKGFuZCBpbmRleC1vbmx5 IHNjYW5zKQorCSAqIHNob3VsZCBvbmx5IHVzZSBhIGJhdGNoIHJpbmcgYnVmZmVyIHdpdGggYW4g YW1nZXRiYXRjaCBpbmRleCBBTS4KKwkgKi8KKwlBc3NlcnQoIXNjYW4tPnhzX3RhYmxlX29wYXF1 ZSA/ICFzY2FuLT51c2ViYXRjaHJpbmcgOgorCQkgICAoaW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0t PmFtZ2V0YmF0Y2ggIT0gTlVMTCkgPT0gc2Nhbi0+dXNlYmF0Y2hyaW5nKTsKKwogCXJldHVybiBz Y2FuOwogfQogCkBAIC00MjAsOSArNDI4LDkgQEAgaW5kZXhfcmVzY2FuKEluZGV4U2NhbkRlc2Mg c2NhbiwKIAlBc3NlcnQobmtleXMgPT0gc2Nhbi0+bnVtYmVyT2ZLZXlzKTsKIAlBc3NlcnQobm9y ZGVyYnlzID09IHNjYW4tPm51bWJlck9mT3JkZXJCeXMpOwogCi0JLyogcmVzZXQgdGFibGUgQU0g c3RhdGUgZm9yIHJlc2NhbiAqLworCS8qIHRlbGwgdGhlIHRhYmxlIEFNIHRoYXQgdGhlcmUncyB0 byBiZSBhIHJlc2NhbiAqLwogCWlmIChzY2FuLT54c190YWJsZV9vcGFxdWUpCi0JCXRhYmxlX2lu ZGV4X3NjYW5fcmVzZXQoc2Nhbik7CisJCXRhYmxlX2luZGV4X3NjYW5fcmVzY2FuKHNjYW4pOwog CiAJc2Nhbi0+a2lsbF9wcmlvcl90dXBsZSA9IGZhbHNlOyAvKiBmb3Igc2FmZXR5ICovCiAJc2Nh bi0+eHNfaGVhcF9jb250aW51ZSA9IGZhbHNlOwpAQCAtNDQxLDcgKzQ0OSwyMSBAQCBpbmRleF9l bmRzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbikKIAlTQ0FOX0NIRUNLUzsKIAlDSEVDS19TQ0FOX1BS T0NFRFVSRShhbWVuZHNjYW4pOwogCi0JLyogUmVsZWFzZSByZXNvdXJjZXMgKGxpa2UgYnVmZmVy IHBpbnMpIGZyb20gdGFibGUgYWNjZXNzZXMgKi8KKwkvKgorCSAqIGFtZ2V0Yml0bWFwIHNjYW5z IG9mIGFuIGluZGV4IEFNIHRoYXQgc3VwcG9ydHMgYW1nZXRiYXRjaCBtYWtlIGxpbWl0ZWQKKwkg KiB1c2Ugb2YgdGhlIHNjYW4ncyBiYXRjaCBjYWNoZS4gIENoZWNrIGZvciB0aGF0LgorCSAqLwor CWlmICghc2Nhbi0+dXNlYmF0Y2hyaW5nICYmIHNjYW4tPmJhdGNoY2FjaGVbMF0gIT0gTlVMTCkK Kwl7CisJCUFzc2VydChzY2FuLT54c190YWJsZV9vcGFxdWUgPT0gTlVMTCk7CisJCUFzc2VydChz Y2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1nZXRiYXRjaCAhPSBOVUxMKTsKKwkJcGZy ZWUoaW5kZXhfc2Nhbl9iYXRjaF9iYXNlKHNjYW4sIHNjYW4tPmJhdGNoY2FjaGVbMF0pKTsKKwl9 CisKKwkvKgorCSAqIFJlbGVhc2UgcmVzb3VyY2VzIChsaWtlIGJ1ZmZlciBwaW5zIGFuZCBiYXRj aCByaW5nIGJ1ZmZlcikgaGVsZCBieQorCSAqIHRhYmxlIEFNIGZvciBpbmRleCBzY2FuCisJICov CiAJaWYgKHNjYW4tPnhzX3RhYmxlX29wYXF1ZSkKIAl7CiAJCXRhYmxlX2luZGV4X3NjYW5fZW5k KHNjYW4pOwpAQCAtNDYxLDUyICs0ODMsNiBAQCBpbmRleF9lbmRzY2FuKEluZGV4U2NhbkRlc2Mg c2NhbikKIAlJbmRleFNjYW5FbmQoc2Nhbik7CiB9CiAKLS8qIC0tLS0tLS0tLS0tLS0tLS0KLSAq CQlpbmRleF9tYXJrcG9zICAtIG1hcmsgYSBzY2FuIHBvc2l0aW9uCi0gKiAtLS0tLS0tLS0tLS0t LS0tCi0gKi8KLXZvaWQKLWluZGV4X21hcmtwb3MoSW5kZXhTY2FuRGVzYyBzY2FuKQotewotCVND QU5fQ0hFQ0tTOwotCUNIRUNLX1NDQU5fUFJPQ0VEVVJFKGFtbWFya3Bvcyk7Ci0KLQlzY2FuLT5p bmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1tYXJrcG9zKHNjYW4pOwotfQotCi0vKiAtLS0tLS0t LS0tLS0tLS0tCi0gKgkJaW5kZXhfcmVzdHJwb3MJLSByZXN0b3JlIGEgc2NhbiBwb3NpdGlvbgot ICoKLSAqIE5PVEU6IHRoaXMgb25seSByZXN0b3JlcyB0aGUgaW50ZXJuYWwgc2NhbiBzdGF0ZSBv ZiB0aGUgaW5kZXggQU0uICBTZWUKLSAqIGNvbW1lbnRzIGZvciBFeGVjUmVzdHJQb3MoKS4KLSAq Ci0gKiBOT1RFOiBGb3IgaGVhcCwgaW4gdGhlIHByZXNlbmNlIG9mIEhPVCBjaGFpbnMsIG1hcmsv cmVzdG9yZSBvbmx5IHdvcmtzCi0gKiBjb3JyZWN0bHkgaWYgdGhlIHNjYW4ncyBzbmFwc2hvdCBp cyBNVkNDLXNhZmU7IHRoYXQgZW5zdXJlcyB0aGF0IHRoZXJlJ3MgYXQKLSAqIG1vc3Qgb25lIHJl dHVybmFibGUgdHVwbGUgaW4gZWFjaCBIT1QgY2hhaW4sIGFuZCBzbyByZXN0b3JpbmcgdGhlIHBy aW9yCi0gKiBzdGF0ZSBhdCB0aGUgZ3JhbnVsYXJpdHkgb2YgdGhlIGluZGV4IEFNIGlzIHN1ZmZp Y2llbnQuICBTaW5jZSB0aGUgb25seQotICogY3VycmVudCB1c2VyIG9mIG1hcmsvcmVzdG9yZSBm dW5jdGlvbmFsaXR5IGlzIG5vZGVNZXJnZWpvaW4uYywgdGhpcwotICogZWZmZWN0aXZlbHkgbWVh bnMgdGhhdCBtZXJnZS1qb2luIHBsYW5zIG9ubHkgd29yayBmb3IgTVZDQyBzbmFwc2hvdHMuICBU aGlzCi0gKiBjb3VsZCBiZSBmaXhlZCBpZiBuZWNlc3NhcnksIGJ1dCBmb3Igbm93IGl0IHNlZW1z IHVuaW1wb3J0YW50LgotICogLS0tLS0tLS0tLS0tLS0tLQotICovCi12b2lkCi1pbmRleF9yZXN0 cnBvcyhJbmRleFNjYW5EZXNjIHNjYW4pCi17Ci0JQXNzZXJ0KElzTVZDQ0xpa2VTbmFwc2hvdChz Y2FuLT54c19zbmFwc2hvdCkpOwotCi0JU0NBTl9DSEVDS1M7Ci0JQ0hFQ0tfU0NBTl9QUk9DRURV UkUoYW1yZXN0cnBvcyk7Ci0KLQkvKiByZXNldCB0YWJsZSBBTSBzdGF0ZSBmb3IgcmVzdG9yaW5n IHRoZSBtYXJrZWQgcG9zaXRpb24gKi8KLQlpZiAoc2Nhbi0+eHNfdGFibGVfb3BhcXVlKQotCQl0 YWJsZV9pbmRleF9zY2FuX3Jlc2V0KHNjYW4pOwotCi0Jc2Nhbi0+a2lsbF9wcmlvcl90dXBsZSA9 IGZhbHNlOyAvKiBmb3Igc2FmZXR5ICovCi0Jc2Nhbi0+eHNfaGVhcF9jb250aW51ZSA9IGZhbHNl OwotCi0Jc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtcmVzdHJwb3Moc2Nhbik7Ci19 Ci0KIC8qCiAgKiBFc3RpbWF0ZXMgdGhlIHNoYXJlZCBtZW1vcnkgbmVlZGVkIGZvciBwYXJhbGxl bCBzY2FuLCBpbmNsdWRpbmcgYW55CiAgKiBBTS1zcGVjaWZpYyBwYXJhbGxlbCBzY2FuIHN0YXRl LgpAQCAtNTg0LDkgKzU2MCw5IEBAIGluZGV4X3BhcmFsbGVscmVzY2FuKEluZGV4U2NhbkRlc2Mg c2NhbikKIHsKIAlTQ0FOX0NIRUNLUzsKIAotCS8qIHJlc2V0IHRhYmxlIEFNIHN0YXRlIGZvciBy ZXNjYW4gKi8KKwkvKiB0ZWxsIHRoZSB0YWJsZSBBTSB0aGF0IHRoZXJlJ3MgdG8gYmUgYSByZXNj YW4gKi8KIAlpZiAoc2Nhbi0+eHNfdGFibGVfb3BhcXVlKQotCQl0YWJsZV9pbmRleF9zY2FuX3Jl c2V0KHNjYW4pOworCQl0YWJsZV9pbmRleF9zY2FuX3Jlc2NhbihzY2FuKTsKIAogCS8qIGFtcGFy YWxsZWxyZXNjYW4gaXMgb3B0aW9uYWw7IGFzc3VtZSBuby1vcCBpZiBub3QgcHJvdmlkZWQgYnkg QU0gKi8KIAlpZiAoc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtcGFyYWxsZWxyZXNj YW4gIT0gTlVMTCkKQEAgLTYyMiw1NiArNTk4LDYgQEAgaW5kZXhfYmVnaW5zY2FuX3BhcmFsbGVs KFJlbGF0aW9uIGhlYXByZWwsIFJlbGF0aW9uIGluZGV4cmVsLAogCQkJCQkJCQkJaW5kZXhfb25s eV9zY2FuLCB0cnVlLCBmbGFncyk7CiB9CiAKLS8qIC0tLS0tLS0tLS0tLS0tLS0KLSAqIGluZGV4 X2dldG5leHRfdGlkIC0gYW1nZXR0dXBsZSBpbnRlcmZhY2UKLSAqCi0gKiBUaGUgcmVzdWx0IGlz IHRoZSBuZXh0IFRJRCBzYXRpc2Z5aW5nIHRoZSBzY2FuIGtleXMsCi0gKiBvciBOVUxMIGlmIG5v IG1vcmUgbWF0Y2hpbmcgdHVwbGVzIGV4aXN0LgotICoKLSAqIFRoaXMgc2hvdWxkIG9ubHkgYmUg Y2FsbGVkIGJ5IHRhYmxlIEFNIGFtZ2V0dHVwbGUtYmFzZWQgaW5kZXggc2NhbgotICogY2FsbGJh Y2tzLgotICogLS0tLS0tLS0tLS0tLS0tLQotICovCi1JdGVtUG9pbnRlcgotaW5kZXhfZ2V0bmV4 dF90aWQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLQli b29sCQlmb3VuZDsKLQotCVNDQU5fQ0hFQ0tTOwotCUNIRUNLX1NDQU5fUFJPQ0VEVVJFKGFtZ2V0 dHVwbGUpOwotCi0JLyogWFhYOiB3ZSBzaG91bGQgYXNzZXJ0IHRoYXQgYSBzbmFwc2hvdCBpcyBw dXNoZWQgb3IgcmVnaXN0ZXJlZCAqLwotCUFzc2VydChUcmFuc2FjdGlvbklkSXNWYWxpZChSZWNl bnRYbWluKSk7Ci0KLQkvKgotCSAqIFRoZSBBTSdzIGFtZ2V0dHVwbGUgcHJvYyBmaW5kcyB0aGUg bmV4dCBpbmRleCBlbnRyeSBtYXRjaGluZyB0aGUgc2NhbgotCSAqIGtleXMsIGFuZCBwdXRzIHRo ZSBUSUQgaW50byBzY2FuLT54c19oZWFwdGlkLiAgSXQgc2hvdWxkIGFsc28gc2V0Ci0JICogc2Nh bi0+eHNfcmVjaGVjayBhbmQgcG9zc2libHkgc2Nhbi0+eHNfaXR1cC9zY2FuLT54c19oaXR1cCwg dGhvdWdoIHdlCi0JICogcGF5IG5vIGF0dGVudGlvbiB0byB0aG9zZSBmaWVsZHMgaGVyZS4KLQkg Ki8KLQlmb3VuZCA9IHNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbWdldHR1cGxlKHNj YW4sIGRpcmVjdGlvbik7Ci0KLQkvKiBSZXNldCBraWxsIGZsYWcgaW1tZWRpYXRlbHkgZm9yIHNh ZmV0eSAqLwotCXNjYW4tPmtpbGxfcHJpb3JfdHVwbGUgPSBmYWxzZTsKLQlzY2FuLT54c19oZWFw X2NvbnRpbnVlID0gZmFsc2U7Ci0KLQkvKiBJZiB3ZSdyZSBvdXQgb2YgaW5kZXggZW50cmllcywg d2UncmUgZG9uZSAqLwotCWlmICghZm91bmQpCi0JewotCQkvKiByZXNldCB0YWJsZSBBTSBzdGF0 ZSAqLwotCQlpZiAoc2Nhbi0+eHNfdGFibGVfb3BhcXVlKQotCQkJdGFibGVfaW5kZXhfc2Nhbl9y ZXNldChzY2FuKTsKLQotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JQXNzZXJ0KEl0ZW1Qb2ludGVySXNW YWxpZCgmc2Nhbi0+eHNfaGVhcHRpZCkpOwotCi0JcGdzdGF0X2NvdW50X2luZGV4X3R1cGxlcyhz Y2FuLT5pbmRleFJlbGF0aW9uLCAxKTsKLQotCS8qIFJldHVybiB0aGUgVElEIG9mIHRoZSB0dXBs ZSB3ZSBmb3VuZC4gKi8KLQlyZXR1cm4gJnNjYW4tPnhzX2hlYXB0aWQ7Ci19Ci0KIC8qIC0tLS0t LS0tLS0tLS0tLS0KICAqCQlpbmRleF9nZXRiaXRtYXAgLSBnZXQgYWxsIHR1cGxlcyBhdCBvbmNl IGZyb20gYW4gaW5kZXggc2NhbgogICoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9p bmRleC9pbmRleGJhdGNoLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhiYXRjaC5j Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMC4uZmRhNTVhNTg4Ci0tLSAvZGV2 L251bGwKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YmF0Y2guYwpAQCAtMCww ICsxLDgyMSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogaW5kZXhiYXRjaC5jCisgKgkg IEJhdGNoLWJhc2VkIGluZGV4IHNjYW4gaW5mcmFzdHJ1Y3R1cmUgZm9yIHRoZSBhbWdldGJhdGNo IGludGVyZmFjZS4KKyAqCisgKiBUaGlzIG1vZHVsZSBwcm92aWRlcyB0aGUgY29yZSBpbmZyYXN0 cnVjdHVyZSBmb3IgYmF0Y2gtYmFzZWQgaW5kZXggc2NhbnMsCisgKiB3aGljaCBhbGxvdyBpbmRl eCBBTXMgdG8gcmV0dXJuIG11bHRpcGxlIG1hdGNoaW5nIFRJRHMgcGVyIHBhZ2UgaW4gYSBzaW5n bGUKKyAqIGNhbGwuICBUaGUgYmF0Y2ggcmluZyBidWZmZXIgaXMgb3duZWQgYnkgdGhlIHRhYmxl IEFNLgorICoKKyAqIFRoZSByaW5nIGJ1ZmZlciBsb2FkcyBiYXRjaGVzIGluIGluZGV4IGtleSBz cGFjZS9pbmRleCBzY2FuIG9yZGVyLgorICoKKyAqIE1vc3QgZnVuY3Rpb25zIGhlcmUgYXJlIHRh YmxlIEFNIHV0aWxpdGllcyAodGFibGVhbV91dGlsXyopLCBjYWxsZWQgYnkKKyAqIHRhYmxlIEFN cyBkdXJpbmcgYW1nZXRiYXRjaCBpbmRleCBzY2Fucy4gIFRoZXNlIG1hbmFnZSB0aGUgYmF0Y2gg cmluZworICogYnVmZmVyJ3MgbGlmZWN5Y2xlIGFuZCBwb3NpdGlvbmFsIHN0YXRlLCBhbmQgaGVs cCB3aXRoIGNlcnRhaW4gYXNwZWN0cyBvZgorICogcmVzb3VyY2UgbWFuYWdlbWVudC4gIFRoZSB0 YWJsZSBBTSB1c2VzIHNjYW5Qb3MgKGFuZCBpdHMgc2NhbkJhdGNoIGJhdGNoKQorICogdG8gcmV0 dXJuIGl0ZW1zIGZyb20gYmF0Y2hlcyByZXR1cm5lZCBieSBhbWdldGJhdGNoLgorICoKKyAqIFRo ZXJlIGFyZSBhbHNvIHNvbWUgaW5kZXggQU0gdXRpbGl0aWVzIChpbmRleGFtX3V0aWxfKiksIGNh bGxlZCBieSBpbmRleAorICogQU1zIHRoYXQgaW1wbGVtZW50IHRoZSBhbWdldGJhdGNoIGludGVy ZmFjZSwgdG8gaGVscCBtYW5hZ2UgcmVzb3VyY2VzIGxpa2UKKyAqIG1lbW9yeSwgbG9ja3MsIGFu ZCBidWZmZXIgcGlucy4gIEluZGV4IEFNcyBmcmVlIGFuZCB1bmxvY2sgYmF0Y2hlcyBhcworICog ZGVzY3JpYmVkIGluIGluZGV4YW0uc2dtbC4KKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMp IDE5OTYtMjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRp b25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxp Zm9ybmlhCisgKgorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNyYy9iYWNrZW5kL2FjY2Vz cy9pbmRleC9pbmRleGJhdGNoLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaW5j bHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgImFjY2Vzcy9hbWFwaS5oIgorI2luY2x1ZGUg ImFjY2Vzcy9pbmRleGJhdGNoLmgiCisjaW5jbHVkZSAiYWNjZXNzL3RhYmxlYW0uaCIKKyNpbmNs dWRlICJjb21tb24vaW50LmgiCisjaW5jbHVkZSAibGliL3F1bmlxdWUuaCIKKyNpbmNsdWRlICJ1 dGlscy9tZW1kZWJ1Zy5oIgorCitzdGF0aWMgdm9pZCBiYXRjaF9jYWNoZV9tYXJrX3VuZGVmaW5l ZChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKK3N0YXRpYyB2b2lk IHJlbGVhc2VfYW5kX3VuZ3VhcmRfYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5C YXRjaCBiYXRjaCwKKwkJCQkJCQkJCSAgYm9vbCBhbGxvd19jYWNoZSk7CitzdGF0aWMgaW5saW5l IGJvb2wgYmF0Y2hfY2FjaGVfc3RvcmUoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRj aCBiYXRjaCk7CitzdGF0aWMgaW50CWJhdGNoX2NvbXBhcmVfaW50KGNvbnN0IHZvaWQgKnZhLCBj b25zdCB2b2lkICp2Yik7CisKKy8qCisgKiBSZXR1cm4gdGhlIHNpemUgb2YgdGhlIHNpbmdsZSBh bGxvY2F0aW9uIGJhY2tpbmcgb25lIG9mIHRoaXMgc2NhbidzIGJhdGNoZXMKKyAqIGZvciBhc3Nl cnRpb25zL2N1c3RvbSBWYWxncmluZCBiYXRjaCBpbnN0cnVtZW50YXRpb24KKyAqLworI2lmIGRl ZmluZWQoVVNFX1ZBTEdSSU5EKSB8fCBkZWZpbmVkKFVTRV9BU1NFUlRfQ0hFQ0tJTkcpCitzdGF0 aWMgU2l6ZQorYmF0Y2hfYWxsb2Nfc2l6ZShJbmRleFNjYW5EZXNjIHNjYW4pCit7CisJU2l6ZQkJ YWxsb2NzejsKKworCUFzc2VydChzY2FuLT5iYXRjaF9iYXNlX29mZnNldCA+IDApOworCisJYWxs b2NzeiA9IHNjYW4tPmJhdGNoX2Jhc2Vfb2Zmc2V0ICsKKwkJTUFYQUxJR04ob2Zmc2V0b2YoSW5k ZXhTY2FuQmF0Y2hEYXRhLCBpdGVtcykgKworCQkJCSBzaXplb2YoQmF0Y2hNYXRjaGluZ0l0ZW0p ICogc2Nhbi0+bWF4aXRlbXNiYXRjaCk7CisJaWYgKHNjYW4tPnhzX3dhbnRfaXR1cCkKKwkJYWxs b2NzeiArPSBzY2FuLT5iYXRjaF90dXBsZXNfd29ya3NwYWNlOworCisJcmV0dXJuIGFsbG9jc3o7 Cit9CisjZW5kaWYKKworLyoKKyAqIE1ha2UgVmFsZ3JpbmQgdHJlYXQgYSBiYXRjaCdzIGVudGly ZSBhbGxvY2F0aW9uIGFzIHVuZGVmaW5lZCBtZW1vcnkKKyAqLworc3RhdGljIHZvaWQKK2JhdGNo X2NhY2hlX21hcmtfdW5kZWZpbmVkKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2gg YmF0Y2gpCit7CisjaWZkZWYgVVNFX1ZBTEdSSU5ECisJY2hhcgkgICAqY3VyclR1cGxlcyA9IGJh dGNoLT5jdXJyVHVwbGVzOworCWludAkJICAgKmRlYWRJdGVtcyA9IGJhdGNoLT5kZWFkSXRlbXM7 CisKKwlWQUxHUklORF9NQUtFX01FTV9VTkRFRklORUQoaW5kZXhfc2Nhbl9iYXRjaF9iYXNlKHNj YW4sIGJhdGNoKSwKKwkJCQkJCQkJYmF0Y2hfYWxsb2Nfc2l6ZShzY2FuKSk7CisJaWYgKGRlYWRJ dGVtcykKKwkJVkFMR1JJTkRfTUFLRV9NRU1fVU5ERUZJTkVEKGRlYWRJdGVtcywKKwkJCQkJCQkJ CXNpemVvZihpbnQpICogc2Nhbi0+bWF4aXRlbXNiYXRjaCk7CisKKwkvKiBwcmVzZXJ2ZSBwb2lu dGVycyB0byBub3ctdW5kZWZpbmVkIGN1cnJUdXBsZXMgYW5kIGRlYWRJdGVtcyBidWZmZXJzICov CisJYmF0Y2gtPmN1cnJUdXBsZXMgPSBjdXJyVHVwbGVzOworCWJhdGNoLT5kZWFkSXRlbXMgPSBk ZWFkSXRlbXM7CisjZW5kaWYKK30KKworLyoKKyAqIFJlc2V0IHJpbmcgYnVmZmVyIGFuZCByZWxh dGVkIHBvc2l0aW9uYWwgc3RhdGUgdXNlZCBkdXJpbmcgYW4gYW1nZXRiYXRjaAorICogaW5kZXgg c2Nhbi4KKyAqCisgKiBUYWJsZSBBTSBjYWxsZXIgc2hvdWxkIHBhc3MgZW5kc2Nhbj1mYWxzZSwg d2hpY2ggbWFrZXMgdXMgY2FjaGUgYW55IGZyZWVkCisgKiBiYXRjaGVzIGZvciByZXVzZSBvbiBy ZXNjYW4uICBXZSByZWxlYXNlIHNjYW4ncyBtYXJrQmF0Y2ggaGVyZSBlaXRoZXIgd2F5LgorICov Cit2b2lkCit0YWJsZWFtX3V0aWxfYmF0Y2hzY2FuX3Jlc2V0KEluZGV4U2NhbkRlc2Mgc2Nhbiwg Ym9vbCBlbmRzY2FuKQoreworCUJhdGNoUmluZ0J1ZmZlciAqYmF0Y2hyaW5nYnVmID0gJnNjYW4t PmJhdGNocmluZ2J1ZjsKKwlJbmRleFNjYW5CYXRjaCBtYXJrQmF0Y2ggPSBiYXRjaHJpbmdidWYt Pm1hcmtCYXRjaDsKKwlib29sCQltYXJrQmF0Y2hGcmVlZCA9IGZhbHNlOworCisJYmF0Y2hyaW5n YnVmLT5zY2FuUG9zLnZhbGlkID0gZmFsc2U7CisJYmF0Y2hyaW5nYnVmLT5tYXJrUG9zLnZhbGlk ID0gZmFsc2U7CisKKwlmb3IgKHVpbnQ4IGkgPSBiYXRjaHJpbmdidWYtPmhlYWRCYXRjaDsgaSAh PSBiYXRjaHJpbmdidWYtPm5leHRCYXRjaDsgaSsrKQorCXsKKwkJSW5kZXhTY2FuQmF0Y2ggYmF0 Y2ggPSBpbmRleF9zY2FuX2JhdGNoKHNjYW4sIGkpOworCisJCWlmIChiYXRjaCA9PSBtYXJrQmF0 Y2gpCisJCQltYXJrQmF0Y2hGcmVlZCA9IHRydWU7CisKKwkJcmVsZWFzZV9hbmRfdW5ndWFyZF9i YXRjaChzY2FuLCBiYXRjaCwgIWVuZHNjYW4pOworCX0KKworCWlmICghbWFya0JhdGNoRnJlZWQg JiYgdW5saWtlbHkobWFya0JhdGNoKSkKKwkJcmVsZWFzZV9hbmRfdW5ndWFyZF9iYXRjaChzY2Fu LCBtYXJrQmF0Y2gsICFlbmRzY2FuKTsKKworCWJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoID0gMDsK KwliYXRjaHJpbmdidWYtPm5leHRCYXRjaCA9IDA7CisJYmF0Y2hyaW5nYnVmLT5tYXJrQmF0Y2gg PSBOVUxMOworfQorCisvKgorICogRnJlZSByZXNvdXJjZXMgYXQgZW5kIG9mIGEgYmF0Y2ggaW5k ZXggc2Nhbi4KKyAqCisgKiBDYWxsZWQgYnkgdGFibGUgQU0gd2hlbiBhbiBpbmRleCBzY2FuIGlz IGVuZGluZywgcmlnaHQgYmVmb3JlIHRoZSBvd25pbmcKKyAqIHNjYW4gZGVzY3JpcHRvciBnb2Vz IGF3YXkuICBDbGVhbnMgdXAgYWxsIGJhdGNoIHJlbGF0ZWQgcmVzb3VyY2VzLgorICovCit2b2lk Cit0YWJsZWFtX3V0aWxfYmF0Y2hzY2FuX2VuZChJbmRleFNjYW5EZXNjIHNjYW4pCit7CisJLyog RnJlZSBhbGwgcmVtYWluaW5nIGxvYWRlZCBiYXRjaGVzIChldmVuIG1hcmtCYXRjaCksIGJ5cGFz c2luZyBjYWNoZSAqLworCXRhYmxlYW1fdXRpbF9iYXRjaHNjYW5fcmVzZXQoc2NhbiwgdHJ1ZSk7 CisKKwlmb3IgKGludCBpID0gMDsgaSA8IElOREVYX1NDQU5fQ0FDSEVfQkFUQ0hFUzsgaSsrKQor CXsKKwkJSW5kZXhTY2FuQmF0Y2ggY2FjaGVkID0gc2Nhbi0+YmF0Y2hjYWNoZVtpXTsKKworCQlp ZiAoY2FjaGVkID09IE5VTEwpCisJCQljb250aW51ZTsKKworCQlpZiAoY2FjaGVkLT5kZWFkSXRl bXMpCisJCQlwZnJlZShjYWNoZWQtPmRlYWRJdGVtcyk7CisJCXBmcmVlKGluZGV4X3NjYW5fYmF0 Y2hfYmFzZShzY2FuLCBjYWNoZWQpKTsKKwl9Cit9CisKKy8qCisgKiBTZXQgYSBtYXJrIGZyb20g c2NhblBvcyBwb3NpdGlvbgorICoKKyAqIENhbGxlZCBmcm9tIHRoZSB0YWJsZSBBTSdzIGluZGV4 X3NjYW5fbWFya3BvcyBjYWxsYmFjay4gIFNhdmVzIHRoZSBjdXJyZW50CisgKiBzY2FuIHBvc2l0 aW9uIGFuZCBhc3NvY2lhdGVkIGJhdGNoIHNvIHRoYXQgdGhlIHNjYW4gY2FuIGJlIHJlc3RvcmVk IHRvIHRoaXMKKyAqIHBvaW50IGxhdGVyLCB2aWEgdGFibGVhbV91dGlsX2JhdGNoc2Nhbl9yZXN0 b3JlX3Bvcy4gIFRoZSBtYXJrZWQgYmF0Y2ggaXMKKyAqIHJldGFpbmVkIGFuZCBub3QgZnJlZWQg dW50aWwgYSBuZXcgbWFyayBpcyBzZXQgb3IgdGhlIHNjYW4gZW5kcyAob3IgdW50aWwKKyAqIHRo ZSBtYXJrIGlzIHJlc3RvcmVkKS4KKyAqLwordm9pZAordGFibGVhbV91dGlsX2JhdGNoc2Nhbl9t YXJrX3BvcyhJbmRleFNjYW5EZXNjIHNjYW4pCit7CisJQmF0Y2hSaW5nQnVmZmVyICpiYXRjaHJp bmdidWYgPSAmc2Nhbi0+YmF0Y2hyaW5nYnVmOworCUJhdGNoUmluZ0l0ZW1Qb3MgKnNjYW5Qb3Mg PSAmc2Nhbi0+YmF0Y2hyaW5nYnVmLnNjYW5Qb3M7CisJQmF0Y2hSaW5nSXRlbVBvcyAqbWFya1Bv cyBQR19VU0VEX0ZPUl9BU1NFUlRTX09OTFkgPSAmYmF0Y2hyaW5nYnVmLT5tYXJrUG9zOworCUlu ZGV4U2NhbkJhdGNoIHNjYW5CYXRjaCA9IGluZGV4X3NjYW5fYmF0Y2goc2Nhbiwgc2NhblBvcy0+ YmF0Y2gpOworCUluZGV4U2NhbkJhdGNoIG1hcmtCYXRjaCA9IGJhdGNocmluZ2J1Zi0+bWFya0Jh dGNoOworCisJQXNzZXJ0KHNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbWNhbm1hcmtw b3MpOworCUFzc2VydChzY2FuLT5NVkNDU2Nhbik7CisJQXNzZXJ0KGJhdGNocmluZ2J1Zi0+aGVh ZEJhdGNoID09IHNjYW5Qb3MtPmJhdGNoKTsJLyogc2VlIGJlbG93ICovCisKKwkvKgorCSAqIEEg bWFyayBtdXN0IHBvaW50IGF0IGEgcmVhbCBtYXRjaGluZyBpdGVtLiAgV2UgcmVxdWlyZSB0aGUg Y29yZQorCSAqIGV4ZWN1dG9yIHRvIG9ubHkgdGFrZSBhIG1hcmsganVzdCBhZnRlciBhIHN1Y2Nl c3NmdWwgdHVwbGUgZmV0Y2guCisJICovCisJQXNzZXJ0KHNjYW5Qb3MtPnZhbGlkKTsKKwlBc3Nl cnQoc2NhblBvcy0+aXRlbSA+PSBzY2FuQmF0Y2gtPmZpcnN0SXRlbSAmJgorCQkgICBzY2FuUG9z LT5pdGVtIDw9IHNjYW5CYXRjaC0+bGFzdEl0ZW0pOworCisJLyogRnJlZSB0aGUgcHJldmlvdXMg bWFyayBiYXRjaD8gKi8KKwlpZiAoIW1hcmtCYXRjaCB8fCBtYXJrQmF0Y2ggPT0gc2NhbkJhdGNo KQorCXsKKwkJLyogTm8gb2xkZXIgbWFya0JhdGNoIHRoYXQgbmVlZHMgdG8gYmUgZnJlZWQgbm93 ICovCisJfQorCWVsc2UKKwl7CisJCS8qCisJCSAqIEhhdmUgYSBtYXJrQmF0Y2ggdGhhdCBpc24n dCBpbiBiYXRjaHJpbmdidWY7IGl0IHdhcyBzYXZlZCB3aGVuCisJCSAqIHRhYmxlYW1fdXRpbF9y ZWxlYXNlX2JhdGNoIHdhcyBhc2tlZCB0byByZWxlYXNlIGl0IGVhcmxpZXIgb24uCisJCSAqCisJ CSAqIE5vdGU6IHRoaXMgYXNzdW1lcyB0aGF0ICJiYXRjaHJpbmdidWYtPmhlYWRCYXRjaCA9PSBz Y2FuUG9zLT5iYXRjaCIKKwkJICogaXMgaW52YXJpYW50LiAgSW4gb3RoZXIgd29yZHMsIGl0IGFz c3VtZXMgdGhhdCB0YWJsZSBBTXMgYWx3YXlzCisJCSAqIHJlbW92ZSBhbiBvYnNvbGVzY2VudCBz Y2FuQmF0Y2ggZnJvbSB0aGUgcmluZyBidWZmZXIgYXQgdGhlIHBvaW50CisJCSAqIHdoZXJlIHRo ZXkgc3RlcCBvZmYgaXRzIHVuZGVybHlpbmcgYmF0Y2guCisJCSAqLworCQlBc3NlcnQoIW1hcmtC YXRjaC0+aXNHdWFyZGVkKTsKKwkJQXNzZXJ0KCFpbmRleF9zY2FuX2JhdGNoX2xvYWRlZChzY2Fu LCBtYXJrUG9zLT5iYXRjaCkgfHwKKwkJCSAgIGluZGV4X3NjYW5fYmF0Y2goc2NhbiwgbWFya1Bv cy0+YmF0Y2gpICE9IG1hcmtCYXRjaCk7CisKKwkJcmVsZWFzZV9hbmRfdW5ndWFyZF9iYXRjaChz Y2FuLCBtYXJrQmF0Y2gsIHRydWUpOworCX0KKworCWJhdGNocmluZ2J1Zi0+bWFya1BvcyA9ICpz Y2FuUG9zOworCWJhdGNocmluZ2J1Zi0+bWFya0JhdGNoID0gc2NhbkJhdGNoOworfQorCisvKgor ICogUmVzdG9yZSBzY2FuUG9zIHRvIHRoZSBwcmV2aW91c2x5IHNhdmVkIG1hcmtQb3MgcG9zaXRp b24uCisgKgorICogQ2FsbGVkIGZyb20gdGhlIHRhYmxlIEFNJ3MgaW5kZXhfc2Nhbl9yZXN0cnBv cyBjYWxsYmFjay4gIFJlc3RvcmVzIHRoZQorICogc2NhbiB0byBhIHBvc2l0aW9uIHNhdmVkIHVz aW5nIHRhYmxlYW1fdXRpbF9iYXRjaHNjYW5fbWFya19wb3MgZWFybGllci4KKyAqIFRoZSBzY2Fu J3MgbWFya1BvcyBiZWNvbWVzIGl0cyBzY2FuUG9zLiAgVGhlIG1hcmtlZCBiYXRjaCBpcyByZXN0 b3JlZCBhcworICogdGhlIGN1cnJlbnQgc2NhbkJhdGNoIHdoZW4gbmVlZGVkLgorICoKKyAqIFdl IGp1c3QgZGlzY2FyZCBhbGwgYmF0Y2hlcyAob3RoZXIgdGhhbiBtYXJrQmF0Y2gvcmVzdG9yZWQg c2NhbkJhdGNoKSwKKyAqIGV4Y2VwdCB3aGVuIG1hcmtCYXRjaCBpcyBhbHJlYWR5IHRoZSBzY2Fu J3MgY3VycmVudCBzY2FuQmF0Y2guCisgKgorICogTm90ZTogVGhpcyByZWxpZXMgb24gdGhlIGFz c3VtcHRpb24gdGhhdCB3ZSBhbHJlYWR5IGhhdmUgYSB2YWxpZCBzY2FuUG9zLgorICogVGFibGUg QU1zIHNob3VsZCBvbmx5IGNhbGwgdGFibGVhbV91dGlsX2JhdGNoc2Nhbl9yZXNldCBmcm9tIHdp dGhpbiB0aGVpcgorICogc2NhbidzIGluZGV4X3NjYW5fcmVzdHJwb3MgY2FsbGJhY2sgdG8gYXZv aWQgYnJlYWtpbmcgdGhpcyBhc3N1bXB0aW9uLgorICovCit2b2lkCit0YWJsZWFtX3V0aWxfYmF0 Y2hzY2FuX3Jlc3RvcmVfcG9zKEluZGV4U2NhbkRlc2Mgc2NhbikKK3sKKwlCYXRjaFJpbmdCdWZm ZXIgKmJhdGNocmluZ2J1ZiA9ICZzY2FuLT5iYXRjaHJpbmdidWY7CisJQmF0Y2hSaW5nSXRlbVBv cyAqc2NhblBvcyA9ICZzY2FuLT5iYXRjaHJpbmdidWYuc2NhblBvczsKKwlCYXRjaFJpbmdJdGVt UG9zICptYXJrUG9zID0gJmJhdGNocmluZ2J1Zi0+bWFya1BvczsKKwlJbmRleFNjYW5CYXRjaCBt YXJrQmF0Y2ggPSBiYXRjaHJpbmdidWYtPm1hcmtCYXRjaDsKKwlJbmRleFNjYW5CYXRjaCBzY2Fu QmF0Y2ggPSBpbmRleF9zY2FuX2JhdGNoKHNjYW4sIHNjYW5Qb3MtPmJhdGNoKTsKKworCUFzc2Vy dChzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1jYW5tYXJrcG9zKTsKKwlBc3NlcnQo c2Nhbi0+TVZDQ1NjYW4pOworCUFzc2VydChzY2FuLT54c190YWJsZV9vcGFxdWUpOworCisJLyoK KwkgKiBUaGUgY29yZSBleGVjdXRvciBtdXN0IG9ubHkgYXNrIHVzIHRvIHJlc3RvcmUgYSBtYXJr IHdoZW4gaXQgYWxyZWFkeQorCSAqIGhhZCB1cyB0YWtlIG9uZSBvbiBpdHMgYmVoYWxmIGF0IHNv bWUgcG9pbnQgZHVyaW5nIHRoZSBvbmdvaW5nIHNjYW4KKwkgKi8KKwlBc3NlcnQobWFya1Bvcy0+ dmFsaWQpOworCUFzc2VydChtYXJrUG9zLT5pdGVtID49IG1hcmtCYXRjaC0+Zmlyc3RJdGVtICYm CisJCSAgIG1hcmtQb3MtPml0ZW0gPD0gbWFya0JhdGNoLT5sYXN0SXRlbSk7CisKKwlpZiAoc2Nh bkJhdGNoID09IG1hcmtCYXRjaCkKKwl7CisJCS8qIG1hcmtCYXRjaCBpcyBhbHJlYWR5IHNjYW5C YXRjaDsgbmVlZG4ndCBjaGFuZ2UgYmF0Y2hyaW5nYnVmICovCisJCUFzc2VydChzY2FuUG9zLT5i YXRjaCA9PSBtYXJrUG9zLT5iYXRjaCk7CisKKwkJc2NhblBvcy0+aXRlbSA9IG1hcmtQb3MtPml0 ZW07CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIEEgYmF0Y2ggaXMgYWx3YXlzIHVuZ3VhcmRl ZCBieSB0aGUgdGltZSB0aGUgc2NhbiBtb3ZlcyBvbiB0byBhIGxhdGVyCisJICogYmF0Y2gsIHNv IG1hcmtCYXRjaCAobm93IGJlaGluZCBzY2FuQmF0Y2gpIGNhbm5vdCBzdGlsbCBiZSBndWFyZGVk CisJICovCisJQXNzZXJ0KCFtYXJrQmF0Y2gtPmlzR3VhcmRlZCk7CisKKwkvKgorCSAqIG1hcmtC YXRjaCBpcyBiZWhpbmQgc2NhbkJhdGNoLCBhbmQgc28gbXVzdCBub3QgYmUgc2F2ZWQgaW4gcmlu ZyBidWZmZXIKKwkgKiBhbnltb3JlLiAgV2UgaGF2ZSB0byBkZWFsIHdpdGggcmVzdG9yaW5nIHRo ZSBtYXJrIHRoZSBoYXJkIHdheTogYnkKKwkgKiBpbnZhbGlkYXRpbmcgYWxsIG90aGVyIGxvYWRl ZCBiYXRjaGVzLiAgVGhpcyBpcyBzaW1pbGFyIHRvIHRoZSBjYXNlCisJICogd2hlcmUgdGhlIHNj YW4gZGlyZWN0aW9uIGNoYW5nZXMgYW5kIHRoZSBzY2FuIGFjdHVhbGx5IGNyb3NzZXMKKwkgKiBi YXRjaC9pbmRleCBwYWdlIGJvdW5kYXJpZXMgKHNlZSB0YWJsZWFtX3V0aWxfc2NhbmJhdGNoX2Rp cmNoYW5nZSkuCisJICoKKwkgKiBGaXJzdCwgZnJlZSBhbGwgYmF0Y2hlcyB0aGF0IGFyZSBzdGls bCBpbiB0aGUgcmluZyBidWZmZXIuCisJICovCisJZm9yICh1aW50OCBpID0gYmF0Y2hyaW5nYnVm LT5oZWFkQmF0Y2g7IGkgIT0gYmF0Y2hyaW5nYnVmLT5uZXh0QmF0Y2g7IGkrKykKKwl7CisJCUlu ZGV4U2NhbkJhdGNoIGJhdGNoID0gaW5kZXhfc2Nhbl9iYXRjaChzY2FuLCBpKTsKKworCQlBc3Nl cnQoYmF0Y2ggIT0gbWFya0JhdGNoKTsKKworCQl0YWJsZWFtX3V0aWxfcmVsZWFzZV9iYXRjaChz Y2FuLCBiYXRjaCk7CisJfQorCisJLyoKKwkgKiBOZXh0ICJhcHBlbmQiIHN0YW5kYWxvbmUgbWFy a0JhdGNoLCB3aGljaCB3aWxsIGJlY29tZSBzY2FuQmF0Y2gKKwkgKiAoc2NhbkJhdGNoIGlzIGFs d2F5cyB0aGUgcmluZyBidWZmZXIncyBoZWFkQmF0Y2gpCisJICovCisJbWFya1Bvcy0+YmF0Y2gg PSAwOworCWJhdGNocmluZ2J1Zi0+c2NhblBvcyA9ICptYXJrUG9zOworCWJhdGNocmluZ2J1Zi0+ bmV4dEJhdGNoID0gYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2ggPSBtYXJrUG9zLT5iYXRjaDsKKwlp bmRleF9zY2FuX2JhdGNoX2FwcGVuZChzY2FuLCBtYXJrQmF0Y2gpOworCUFzc2VydChpbmRleF9z Y2FuX2JhdGNoKHNjYW4sIGJhdGNocmluZ2J1Zi0+c2NhblBvcy5iYXRjaCkgPT0gbWFya0JhdGNo KTsKKworCS8qCisJICogRmluYWxseSwgY2FsbCBhbXBvc3Jlc2V0IHRvIGxldCBpbmRleCBBTSBr bm93IHRvIGludmFsaWRhdGUgYW55IHByaXZhdGUKKwkgKiBzdGF0ZSB0aGF0IGluZGVwZW5kZW50 bHkgdHJhY2tzIHRoZSBzY2FuJ3MgcHJvZ3Jlc3MKKwkgKi8KKwlpZiAoc2Nhbi0+aW5kZXhSZWxh dGlvbi0+cmRfaW5kYW0tPmFtcG9zcmVzZXQpCisJCXNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2lu ZGFtLT5hbXBvc3Jlc2V0KHNjYW4sIG1hcmtCYXRjaCk7CisKKwkvKgorCSAqIE5vdGU6IG1hcmtC YXRjaC5kZWFkSXRlbXNbXSBtaWdodCBhbHJlYWR5IGNvbnRhaW4gZGVhZCBpdGVtcywgYW5kIG1p Z2h0CisJICogeWV0IGhhdmUgbW9yZSBkZWFkIGl0ZW1zIHNhdmVkLiAgdGFibGVhbV91dGlsX3Jl bGVhc2VfYmF0Y2ggaXMgcHJlcGFyZWQKKwkgKiBmb3IgdGhhdC4KKwkgKi8KK30KKworLyoKKyAq IEhhbmRsZSBjcm9zcy1iYXRjaCBjaGFuZ2UgaW4gc2NhbiBkaXJlY3Rpb24KKyAqCisgKiBDYWxs ZWQgYnkgdGFibGUgQU0gd2hlbiBpdHMgc2NhbiBjaGFuZ2VzIGRpcmVjdGlvbiBpbiBhIHdheSB0 aGF0CisgKiBuZWNlc3NpdGF0ZXMgYmFja2luZyB0aGUgc2NhbiB1cCB0byBhbiBpbmRleCBwYWdl IG9yaWdpbmFsbHkgYXNzb2NpYXRlZAorICogd2l0aCBhIG5vdy1mcmVlZCBiYXRjaC4KKyAqCisg KiBXaGVuIHdlIHJldHVybiwgYmF0Y2hyaW5nYnVmIHdpbGwgb25seSBjb250YWluIG9uZSBiYXRj aCAodGhlIGN1cnJlbnQKKyAqIGhlYWRCYXRjaC9zY2FuQmF0Y2gpIGFuZCB3aWxsIGxvb2sgYXMg aWYgdGhlIG5ldyBzY2FuIGRpcmVjdGlvbiBoYWQgYmVlbgorICogdXNlZCBmcm9tIHRoZSBzdGFy dC4gIENhbGxlciBjYW4gdGhlbiBzYWZlbHkgcGFzcyB0aGlzIGJhdGNoIHRvIGFtZ2V0YmF0Y2gK KyAqIHRvIGRldGVybWluZSB3aGljaCBiYXRjaCBjb21lcyBuZXh0IGluIHRoZSBuZXcgc2NhbiBk aXJlY3Rpb24uICBUaGlzCisgKiBhcHByb2FjaCBpc24ndCBwYXJ0aWN1bGFybHkgZWZmaWNpZW50 LCBidXQgaXQgd29ya3Mgd2VsbCBlbm91Z2ggZm9yIHdoYXQKKyAqIG91Z2h0IHRvIGJlIGEgcmVs YXRpdmVseSByYXJlIG9jY3VycmVuY2UuCisgKi8KK3ZvaWQKK3RhYmxlYW1fdXRpbF9zY2FuYmF0 Y2hfZGlyY2hhbmdlKEluZGV4U2NhbkRlc2Mgc2NhbikKK3sKKwlCYXRjaFJpbmdCdWZmZXIgKmJh dGNocmluZ2J1ZiA9ICZzY2FuLT5iYXRjaHJpbmdidWY7CisJSW5kZXhTY2FuQmF0Y2ggc2NhbkJh dGNoOworCisJQXNzZXJ0KHNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbWNhbmJhY2t3 YXJkKTsKKworCS8qCisJICogUmVsZWFzZSBiYXRjaGVzIHN0YXJ0aW5nIGZyb20gdGhlIGN1cnJl bnQgImZpbmFsIiBiYXRjaCwgd29ya2luZworCSAqIGJhY2t3YXJkcyB1bnRpbCB0aGUgY3VycmVu dCBoZWFkIGJhdGNoICh3aGljaCBpcyBhbHNvIHRoZSBjdXJyZW50CisJICogc2NhbkJhdGNoKSBp cyB0aGUgb25seSBiYXRjaCBoYXNuJ3QgYmVlbiBmcmVlZAorCSAqLworCXdoaWxlIChpbmRleF9z Y2FuX2JhdGNoX2NvdW50KHNjYW4pID4gMSkKKwl7CisJCXVpbnQ4CQlmaW5hbGlkeCA9IGJhdGNo cmluZ2J1Zi0+bmV4dEJhdGNoIC0gMTsKKwkJSW5kZXhTY2FuQmF0Y2ggZmluYWwgPSBpbmRleF9z Y2FuX2JhdGNoKHNjYW4sIGZpbmFsaWR4KTsKKworCQlBc3NlcnQoZmluYWxpZHggIT0gYmF0Y2hy aW5nYnVmLT5zY2FuUG9zLmJhdGNoKTsKKworCQl0YWJsZWFtX3V0aWxfcmVsZWFzZV9iYXRjaChz Y2FuLCBmaW5hbCk7CisJCWJhdGNocmluZ2J1Zi0+bmV4dEJhdGNoLS07CisJfQorCisJLyogc2Nh bkJhdGNoIGlzIG5vdyB0aGUgb25seSBiYXRjaCBzdGlsbCBsb2FkZWQgKi8KKwlBc3NlcnQoYmF0 Y2hyaW5nYnVmLT5oZWFkQmF0Y2ggPT0gYmF0Y2hyaW5nYnVmLT5zY2FuUG9zLmJhdGNoKTsKKwlz Y2FuQmF0Y2ggPSBpbmRleF9zY2FuX2JhdGNoKHNjYW4sIGJhdGNocmluZ2J1Zi0+aGVhZEJhdGNo KTsKKworCS8qCisJICogRmxpcCBzY2FuQmF0Y2gncyBzY2FuIGRpcmVjdGlvbiB0byByZWZsZWN0 IHRoZSByZXZlcnNhbC4gIEFsc28gcmVzZXQKKwkgKiBhbnkgaW5kZXggQU0gc3RhdGUgdGhhdCBp bmRlcGVuZGVudGx5IHRyYWNrcyBzY2FuIHByb2dyZXNzLgorCSAqLworCXNjYW5CYXRjaC0+ZGly ID0gLXNjYW5CYXRjaC0+ZGlyOworCWlmIChzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+ YW1wb3NyZXNldCkKKwkJc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtcG9zcmVzZXQo c2Nhbiwgc2NhbkJhdGNoKTsKK30KKworLyoKKyAqIFJlY29yZCB0aGF0IHNjYW5Qb3MgaXRlbSBp cyBkZWFkCisgKgorICogUmVjb3JkcyBhbiBvZmZzZXQgdG8gdGhlIGN1cnJlbnQgc2NhbkJhdGNo L3NjYW5Qb3MgaXRlbSwgc2F2aW5nIGl0IGluCisgKiBzY2FuQmF0Y2gncyBkZWFkSXRlbXMgYXJy YXkuICBUaGUgaXRlbXMnIGluZGV4IHR1cGxlcyB3aWxsIGxhdGVyIGJlCisgKiBtYXJrZWQgTFBf REVBRCB3aGVuIGN1cnJlbnQgc2NhbkJhdGNoIGlzIGZyZWVkLgorICovCit2b2lkCit0YWJsZWFt X3V0aWxfc2NhbnBvc19raWxsaXRlbShJbmRleFNjYW5EZXNjIHNjYW4pCit7CisJQmF0Y2hSaW5n SXRlbVBvcyAqc2NhblBvcyA9ICZzY2FuLT5iYXRjaHJpbmdidWYuc2NhblBvczsKKwlJbmRleFNj YW5CYXRjaCBzY2FuQmF0Y2ggPSBpbmRleF9zY2FuX2JhdGNoKHNjYW4sIHNjYW5Qb3MtPmJhdGNo KTsKKworCWlmIChzY2FuQmF0Y2gtPmRlYWRJdGVtcyA9PSBOVUxMKQorCQlzY2FuQmF0Y2gtPmRl YWRJdGVtcyA9IHBhbGxvY19hcnJheShpbnQsIHNjYW4tPm1heGl0ZW1zYmF0Y2gpOworCWlmIChz Y2FuQmF0Y2gtPm51bURlYWQgPCBzY2FuLT5tYXhpdGVtc2JhdGNoKQorCQlzY2FuQmF0Y2gtPmRl YWRJdGVtc1tzY2FuQmF0Y2gtPm51bURlYWQrK10gPSBzY2FuUG9zLT5pdGVtOworfQorCisvKgor ICogUmVsZWFzZSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIGEgYmF0Y2gKKyAqCisgKiBDYWxs ZWQgYnkgdGFibGUgQU0ncyBhbWdldGJhdGNoIGluZGV4IHNjYW4gaW1wbGVtZW50YXRpb24gd2hl biBpdCBpcworICogZmluaXNoZWQgd2l0aCBhIGJhdGNoIGFuZCB3aXNoZXMgdG8gcmVsZWFzZSBp dHMgcmVzb3VyY2VzLgorICoKKyAqIENhbGxpbmcgaGVyZSB3aGVuICdiYXRjaCcgaXMgYWxzbyBi YXRjaHJpbmdidWYubWFya0JhdGNoIGlzIGEgbm8tb3AuICBUYWJsZQorICogQU0gY2FsbGVycyBn ZW5lcmFsbHkgd29uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCB0aGlzIGJlY2F1c2UgaXQgaXMgaGFu ZGxlZAorICogYXMgYSBzcGVjaWFsIGNhc2UgYnkgdGhlIGZ1bmN0aW9ucyBpbiB0aGlzIG1vZHVs ZSAoYmVzaWRlcywgdGhlIHNjYW4gY2FuCisgKiBvbmx5IGhhdmUgb25lIG1hcmtCYXRjaCBhdCBh IHRpbWUpLgorICoKKyAqIFdlIGNhbGwgYW11bmd1YXJkYmF0Y2ggdG8gZHJvcCB0aGUgVElEIHJl Y3ljbGluZyBpbnRlcmxvY2sgKGUuZy4gYnVmZmVyCisgKiBwaW4pIHdoZW4gaXQgaGFzbid0IGJl ZW4gZHJvcHBlZCB5ZXQuICBGb3IgcGxhaW4gTVZDQyBzY2FucyAod2hlcmUKKyAqIGJhdGNoSW1t ZWRpYXRlVW5ndWFyZCBpcyBzZXQpLCB0aGUgaW50ZXJsb2NrIHdhcyBhbHJlYWR5IGRyb3BwZWQg ZWFnZXJseQorICogaW4gaW5kZXhhbV91dGlsX3VubG9ja19iYXRjaCwgc28gd2Ugc2tpcCB0aGUg YW11bmd1YXJkYmF0Y2ggY2FsbCBoZXJlLgorICogSW5kZXgtb25seSBzY2FucyBtdXN0IGRlbGF5 IGRyb3BwaW5nIHRoZSBpbnRlcmxvY2sgdW50aWwgdmlzaWJpbGl0eSBpcworICogcmVzb2x2ZWQg Zm9yIGFsbCBpdGVtcyBpbiB0aGUgYmF0Y2gsIHNvIGFtdW5ndWFyZGJhdGNoIG1heSBzdGlsbCBu ZWVkIHRvCisgKiBhY3QgaGVyZS4gIEZvciBub24tTVZDQyBzbmFwc2hvdCBzY2FucywgdGhlIGlu dGVybG9jayBpcyBhbHdheXMgaGVsZAorICogdW50aWwgYW11bmd1YXJkYmF0Y2ggZHJvcHMgaXQg aGVyZSAtLSB0aGlzIGlzIHRoZSBvbmx5IHBsYWNlIHdpbGxpbmcgdG8KKyAqIHVuZ3VhcmQgYSBu b24tTVZDQyBzY2FuJ3MgYmF0Y2guCisgKgorICogV2hlbiB0aGUgYmF0Y2ggaGFzIGRlYWQgaXRl bXMgKG51bURlYWQgPiAwKSBhbmQgdGhlIGluZGV4IEFNIHByb3ZpZGVzIGFuCisgKiBhbWtpbGxp dGVtc2JhdGNoIGNhbGxiYWNrLCB3ZSBjYWxsIGl0IHRvIHNldCBMUF9ERUFEIGJpdHMgaW4gdGhl IGluZGV4CisgKiBwYWdlLiAgVGhpcyBpcyB0aGUgbmF0dXJhbCBwbGFjZSB0byBraWxsIGluZGV4 IGl0ZW1zIGJlY2F1c2UgaXQncyB0aGUKKyAqIHBvaW50IHdoZW4gd2Uga25vdyBmb3Igc3VyZSB0 aGF0IG5vIGZ1cnRoZXIgdGFibGUgYWNjZXNzZXMgd2lsbCB0YWtlCisgKiBwbGFjZSBmb3IgdGhh dCBiYXRjaCdzIGl0ZW1zLgorICovCit2b2lkCit0YWJsZWFtX3V0aWxfcmVsZWFzZV9iYXRjaChJ bmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKQoreworCS8qIGRvbid0IGZy ZWUgY2FsbGVyJ3MgYmF0Y2ggaWYgaXQgaXMgc2NhbidzIGN1cnJlbnQgbWFya0JhdGNoICovCisJ aWYgKGJhdGNoID09IHNjYW4tPmJhdGNocmluZ2J1Zi5tYXJrQmF0Y2gpCisJCXJldHVybjsKKwor CS8qIFBhc3MgdGhyb3VnaCB0byBpbXBsZW1lbnRhdGlvbiBmdW5jdGlvbiwgd2l0aCBhbGxvd19j YWNoZT10cnVlICovCisJcmVsZWFzZV9hbmRfdW5ndWFyZF9iYXRjaChzY2FuLCBiYXRjaCwgdHJ1 ZSk7Cit9CisKKy8qCisgKiBGcmVlIGEgYmF0Y2gsIG9wdGlvbmFsbHkgY2FjaGluZyBpdCBmb3Ig cmV1c2UuCisgKgorICogV2hlbiBhbGxvd19jYWNoZSBpcyB0cnVlLCB3ZSB0cnkgdG8gc3RvcmUg dGhlIGJhdGNoIGluIHRoZSBzY2FuJ3MgYmF0Y2gKKyAqIGNhY2hlIGZvciBsYXRlciByZXVzZS4g IFdoZW4gYWxsb3dfY2FjaGUgaXMgZmFsc2UgKHR5cGljYWxseSBiZWNhdXNlIHRoZQorICogc2Nh biBpcyBzaHV0dGluZyBkb3duKSwgd2UgcGZyZWUgdGhlIGNhbGxlcidzIGJhdGNoIHVuY29uZGl0 aW9uYWxseS4KKyAqLworc3RhdGljIHZvaWQKK3JlbGVhc2VfYW5kX3VuZ3VhcmRfYmF0Y2goSW5k ZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCwKKwkJCQkJCSAgYm9vbCBhbGxv d19jYWNoZSkKK3sKKwlBc3NlcnQoIShzY2FuLT5iYXRjaEltbWVkaWF0ZVVuZ3VhcmQgJiYgYmF0 Y2gtPmlzR3VhcmRlZCkpOworCUFzc2VydChiYXRjaC0+aXNHdWFyZGVkIHx8IHNjYW4tPk1WQ0NT Y2FuKTsKKworCS8qIERyb3AgVElEIHJlY3ljbGluZyBpbnRlcmxvY2sgdmlhIGFtdW5ndWFyZGJh dGNoIGFzIG5lZWRlZCAqLworCWlmICghc2Nhbi0+YmF0Y2hJbW1lZGlhdGVVbmd1YXJkICYmIGJh dGNoLT5pc0d1YXJkZWQpCisJCXRhYmxlYW1fdXRpbF91bmd1YXJkX2JhdGNoKHNjYW4sIGJhdGNo KTsKKworCS8qCisJICogTGV0IHRoZSBpbmRleCBBTSBzZXQgTFBfREVBRCBiaXRzIGluIHRoZSBp bmRleCBwYWdlLCBpZiBhcHBsaWNhYmxlLgorCSAqCisJICogYmF0Y2guZGVhZEl0ZW1zW10gaXMg bm93IGluIHdoYXRldmVyIG9yZGVyIHRoZSBzY2FuIHJldHVybmVkIGl0ZW1zIGluLgorCSAqIFdl IG1pZ2h0IGhhdmUgZXZlbiBzYXZlZCB0aGUgc2FtZSBpdGVtL1RJRCB0d2ljZS4KKwkgKgorCSAq IFNvcnQgYW5kIHVuaXF1ZS1pZnkgZGVhZEl0ZW1zW10uICBUaGF0IHdheSB0aGUgaW5kZXggQU0g Y2FuIHNhZmVseQorCSAqIGFzc3VtZSB0aGF0IGl0ZW1zIHdpbGwgYWx3YXlzIGJlIGluIHRoZWly IG9yaWdpbmFsIGluZGV4IHBhZ2Ugb3JkZXIuCisJICovCisJaWYgKGJhdGNoLT5udW1EZWFkID4g MCAmJgorCQlzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1raWxsaXRlbXNiYXRjaCAh PSBOVUxMKQorCXsKKwkJaWYgKGJhdGNoLT5udW1EZWFkID4gMSkKKwkJeworCQkJcXNvcnQoYmF0 Y2gtPmRlYWRJdGVtcywgYmF0Y2gtPm51bURlYWQsIHNpemVvZihpbnQpLAorCQkJCSAgYmF0Y2hf Y29tcGFyZV9pbnQpOworCQkJYmF0Y2gtPm51bURlYWQgPSBxdW5pcXVlKGJhdGNoLT5kZWFkSXRl bXMsIGJhdGNoLT5udW1EZWFkLAorCQkJCQkJCQkJIHNpemVvZihpbnQpLCBiYXRjaF9jb21wYXJl X2ludCk7CisJCX0KKworCQlzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1raWxsaXRl bXNiYXRjaChzY2FuLCBiYXRjaCk7CisJfQorCisJLyoKKwkgKiBUcnkgdG8gc3RvcmUgY2FsbGVy J3MgYmF0Y2ggaW4gdGhpcyBhbWdldGJhdGNoIHNjYW4ncyBjYWNoZSBvZgorCSAqIHByZXZpb3Vz bHkgcmVsZWFzZWQgYmF0Y2hlcyBmaXJzdCAod2hlbiBjYWxsZXIgcmVxdWVzdHMgaXQpCisJICov CisJaWYgKGFsbG93X2NhY2hlICYmIGJhdGNoX2NhY2hlX3N0b3JlKHNjYW4sIGJhdGNoKSkKKwkJ cmV0dXJuOworCisJLyoganVzdCBwZnJlZSB0aGUgY2FsbGVyJ3MgYmF0Y2ggKHBsdXMgYmF0Y2gn cyBkZWFkSXRlbXMsIGlmIGFueSkgKi8KKwlpZiAoYmF0Y2gtPmRlYWRJdGVtcykKKwkJcGZyZWUo YmF0Y2gtPmRlYWRJdGVtcyk7CisJcGZyZWUoaW5kZXhfc2Nhbl9iYXRjaF9iYXNlKHNjYW4sIGJh dGNoKSk7Cit9CisKKy8qCisgKiBEcm9wIHRoZSBiYXRjaCdzIFRJRCByZWN5Y2xpbmcgaW50ZXJs b2NrIHZpYSBhbXVuZ3VhcmRiYXRjaAorICoKKyAqIENhbGxlZCBieSB0aGUgdGFibGUgQU0gd2hl biBpdCdzIHNhZmUgdG8gZHJvcCB3aGF0ZXZlciBpbnRlcmxvY2sgdGhlIGluZGV4CisgKiBBTSBo b2xkcyB0byBwcmV2ZW50IHVuc2FmZSBjb25jdXJyZW50IFRJRCByZWN5Y2xpbmcgYnkgVkFDVVVN ICh0eXBpY2FsbHkgYQorICogYnVmZmVyIHBpbiBvbiB0aGUgYmF0Y2gncyBpbmRleCBwYWdlIGlu IGJhdGNoJ3Mgb3BhcXVlIGFyZWEpLgorICovCit2b2lkCit0YWJsZWFtX3V0aWxfdW5ndWFyZF9i YXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKQoreworCS8qIFNo b3VsZCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGlmZiAhYmF0Y2hJbW1lZGlhdGVVbmd1YXJkICov CisJQXNzZXJ0KCFzY2FuLT5iYXRjaEltbWVkaWF0ZVVuZ3VhcmQpOworCUFzc2VydChiYXRjaC0+ aXNHdWFyZGVkKTsKKworCXNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbXVuZ3VhcmRi YXRjaChzY2FuLCBiYXRjaCk7CisKKwliYXRjaC0+aXNHdWFyZGVkID0gZmFsc2U7Cit9CisKKy8q CisgKiBVbmxvY2sgYmF0Y2gncyBpbmRleCBwYWdlIGJ1ZmZlciBsb2NrCisgKgorICogVW5sb2Nr cyB0aGUgZ2l2ZW4gYnVmZmVyIGluIHByZXBhcmF0aW9uIGZvciBhbWdldGJhdGNoIHJldHVybmlu ZyBpdGVtcworICogc2F2ZWQgaW4gdGhhdCBiYXRjaC4gIFBlcmZvcm1zIGV4dHJhIHN0ZXBzIHJl cXVpcmVkIGJ5IGFtZ2V0YmF0Y2ggY2FsbGVycworICogaW4gcGFzc2luZy4KKyAqCisgKiBPbmx5 IGNhbGwgaGVyZSB3aGVuIGEgYmF0Y2ggaGFzIG9uZSBvciBtb3JlIG1hdGNoaW5nIGl0ZW1zIHRv IHJldHVybiB1c2luZworICogYW1nZXRiYXRjaCAob3IgZm9yIGFtZ2V0Yml0bWFwIHRvIGxvYWQg aW50byBpdHMgYml0bWFwIG9mIG1hdGNoaW5nIFRJRHMpLgorICogV2hlbiBhbiBpbmRleCBwYWdl IGhhcyBubyBtYXRjaGVzLCBpdCdzIGFsd2F5cyBzYWZlIGZvciBpbmRleCBBTXMgdG8gZHJvcAor ICogYm90aCB0aGUgbG9jayBhbmQgdGhlIHBpbiBmb3IgdGhlbXNlbHZlcy4KKyAqCisgKiBOb3Rl OiBJdCBpcyBjb252ZW5pZW50IGZvciBpbmRleCBBTXMgdGhhdCBpbXBsZW1lbnQgYm90aCBhbWdl dGJhdGNoIGFuZAorICogYW1nZXRiaXRtYXAgdG8gY29uc2lzdGVudGx5IHVzZSB0aGUgc2FtZSBi YXRjaCBtYW5hZ2VtZW50IGFwcHJvYWNoLCBzaW5jZQorICogdGhhdCBhdm9pZHMgaW50cm9kdWNp bmcgc3BlY2lhbCBjYXNlcyB0byBsb3dlci1sZXZlbCBjb2RlLiAgV2UgZHJvcCBib3RoCisgKiB0 aGUgbG9jayBhbmQgdGhlIHBpbiBvbiBiYXRjaCdzIHBhZ2Ugb24gYmVoYWxmIG9mIGFtZ2V0Yml0 bWFwIGNhbGxlcnMuCisgKgorICogRm9yIGFtZ2V0YmF0Y2ggY2FsbGVycywgd2hlbiBiYXRjaElt bWVkaWF0ZVVuZ3VhcmQgaXMgc2V0IChwbGFpbiBNVkNDCisgKiBzY2FucyksIHdlIGFsc28gcmVs ZWFzZSB0aGUgcGluIGhlcmUgKHRoZSBUSUQgcmVjeWNsaW5nIGludGVybG9jaykuICBUaGUKKyAq IGJhdGNoIHdpbGwgYmUgbWFya2VkICJ1bmd1YXJkZWQiLCBwcmV2ZW50aW5nIHRoZSB0YWJsZSBB TSBmcm9tIHNwdXJpb3VzbHkKKyAqIGNhbGxpbmcgYW11bmd1YXJkYmF0Y2ggbGF0ZXIgb24uCisg KgorICogSW5kZXggQU1zIHdob3NlIFRJRCByZWN5Y2xpbmcgaW50ZXJsb2NrIGlzIG5vdCBqdXN0 IGEgYnVmZmVyIHBpbiwgb3Igd2hvc2UKKyAqIGFtdW5ndWFyZGJhdGNoIGRvZXMgbm90IHNpbXBs eSByZWxlYXNlIGEgcGluLCBhcmUgbm90IG9ibGlnYXRlZCB0byB1c2UgdGhpcworICogZnVuY3Rp b24uICBUaGV5IGNhbiBpbXBsZW1lbnQgdGhlaXIgb3duIGVxdWl2YWxlbnQuICBTdWNoIGluZGV4 IEFNcyBhcmUgYWxzbworICogZnJlZSB0byB1c2UgdGhlIGJhdGNoIExTTiBmaWVsZCB0aGVtc2Vs dmVzOyB0aGVpciBhbWtpbGxpdGVtc2JhdGNoIHJvdXRpbmUKKyAqIGNhbiB1c2UgdGhhdCBMU04g aW4gdGhlIHVzdWFsIHdheSwgb3IgaW4gd2hhdGV2ZXIgd2F5IHRoZSBBTSBkZWVtcyBuZWNlc3Nh cnkKKyAqIChjb3JlIGNvZGUgd2lsbCBub3QgdXNlIGl0IGZvciBhbnkgb3RoZXIgcHVycG9zZSku CisgKi8KK3ZvaWQKK2luZGV4YW1fdXRpbF91bmxvY2tfYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2Fu LCBJbmRleFNjYW5CYXRjaCBiYXRjaCwgQnVmZmVyIGJ1ZikKK3sKKwkvKiBiYXRjaCBtdXN0IGhh dmUgb25lIG9yIG1vcmUgbWF0Y2hpbmcgaXRlbXMgcmV0dXJuZWQgYnkgaW5kZXggQU0gKi8KKwlB c3NlcnQoYmF0Y2gtPmZpcnN0SXRlbSA+PSAwICYmIGJhdGNoLT5maXJzdEl0ZW0gPD0gYmF0Y2gt Pmxhc3RJdGVtKTsKKworCWlmIChzY2FuLT51c2ViYXRjaHJpbmcpCisJeworCQkvKiBhbWdldGJh dGNoIChub3QgYW1nZXRiaXRtYXApIGNhbGxlciAqLworCQlBc3NlcnQoc2Nhbi0+aGVhcFJlbGF0 aW9uICE9IE5VTEwpOworCisJCS8qCisJCSAqIEhhdmUgdG8gc2V0IGJhdGNoLT5sc24gc28gdGhh dCBhbWtpbGxpdGVtc2JhdGNoIGNhbGxiYWNrIGhhcyBhIHdheQorCQkgKiB0byBkZXRlY3Qgd2hl biBjb25jdXJyZW50IHRhYmxlIFRJRCByZWN5Y2xpbmcgYnkgVkFDVVVNIG1pZ2h0IGhhdmUKKwkJ ICogdGFrZW4gcGxhY2UuICBJdCdsbCBvbmx5IGJlIHNhZmUgZm9yIGFta2lsbGl0ZW1zYmF0Y2gg dG8gc2V0IGluZGV4CisJCSAqIHR1cGxlIExQX0RFQUQgYml0cyB3aGVuIHRoZSBwYWdlIExTTiBo YXNuJ3QgYWR2YW5jZWQgYmV0d2VlbiB0aGVuCisJCSAqIGFuZCBub3cuCisJCSAqLworCQliYXRj aC0+bHNuID0gQnVmZmVyR2V0TFNOQXRvbWljKGJ1Zik7CisKKwkJLyoKKwkJICogRHJvcCB0aGUg cGluIGhlcmUgZHVyaW5nIHNjYW5zIHRoYXQgZG9uJ3QgcmVxdWlyZSBhbiBleHBsaWNpdCBUSUQK KwkJICogcmVjeWNsaW5nIGludGVybG9jayAoYSBwaW4gd2lsbCBibG9jayBjbGVhbnVwIGxvY2sg YWNxdWlzaXRpb24gYnkKKwkJICogaW5kZXggdmFjdXVtaW5nKQorCQkgKi8KKwkJaWYgKHNjYW4t PmJhdGNoSW1tZWRpYXRlVW5ndWFyZCkKKwkJeworCQkJLyogZHJvcCBib3RoIHRoZSBsb2NrIGFu ZCB0aGUgcGluICovCisJCQlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1Zik7CisJCQliYXRjaC0+aXNH dWFyZGVkID0gZmFsc2U7CS8qIHdvbid0IGNhbGwgYW11bmd1YXJkYmF0Y2ggKi8KKwkJfQorCQll bHNlCisJCXsKKwkJCS8qCisJCQkgKiBqdXN0IGRyb3AgdGhlIGxvY2s7IGluZGV4IEFNJ3MgYW11 bmd1YXJkYmF0Y2ggY2FsbGJhY2sgd2lsbCBiZQorCQkJICogY2FsbGVkIHRvIGRyb3AgdGhlIHBp biBsYXRlciBvbiwgd2hlbiB0aGUgdGFibGUgQU0gZGV0ZXJtaW5lcworCQkJICogdGhhdCBpdCBp cyBzYWZlIHRvIGRvIHNvCisJCQkgKi8KKwkJCVVubG9ja0J1ZmZlcihidWYpOworCQkJYmF0Y2gt PmlzR3VhcmRlZCA9IHRydWU7CisJCX0KKwl9CisJZWxzZQorCXsKKwkJLyogYW1nZXRiaXRtYXAg KG5vdCBhbWdldGJhdGNoKSBjYWxsZXIgKi8KKwkJQXNzZXJ0KHNjYW4tPmhlYXBSZWxhdGlvbiA9 PSBOVUxMKTsKKworCQkvKgorCQkgKiBkcm9wIGJvdGggdGhlIGxvY2sgYW5kIHRoZSBwaW4gKGFt dW5ndWFyZGJhdGNoIGlzIG5ldmVyIGNhbGxlZAorCQkgKiBkdXJpbmcgYml0bWFwIGluZGV4IHNj YW5zKQorCQkgKi8KKwkJVW5sb2NrUmVsZWFzZUJ1ZmZlcihidWYpOworCX0KK30KKworLyoKKyAq IEFsbG9jYXRlIGEgbmV3IGJhdGNoCisgKgorICogVXNlZCBieSBpbmRleCBBTXMgdGhhdCBzdXBw b3J0IGFtZ2V0YmF0Y2ggaW50ZXJmYWNlIChib3RoIGR1cmluZyBhbWdldGJhdGNoCisgKiBhbmQg YW1nZXRiaXRtYXAgc2NhbnMpLgorICoKKyAqIFJldHVybnMgSW5kZXhTY2FuQmF0Y2ggd2l0aCBz cGFjZSB0byBmaXQgc2Nhbi0+bWF4aXRlbXNiYXRjaC1tYW55CisgKiBCYXRjaE1hdGNoaW5nSXRl bSBlbnRyaWVzLiAgVGhpcyB3aWxsIGVpdGhlciBiZSBhIG5ld2x5IGFsbG9jYXRlZCBiYXRjaCwg b3IKKyAqIGEgYmF0Y2ggcmVjeWNsZWQgZnJvbSB0aGUgY2FjaGUgbWFuYWdlZCBieSBpbmRleGFt X3V0aWxfcmVsZWFzZV9iYXRjaC4gIFNlZQorICogY29tbWVudHMgYWJvdmUgaW5kZXhhbV91dGls X3JlbGVhc2VfYmF0Y2guCisgKgorICogSG91c2VrZWVwaW5nIGZpZWxkcyAoYnVmLCBrbm93bkVu ZEJhY2t3YXJkL0ZvcndhcmQsIGZpcnN0SXRlbSwgbGFzdEl0ZW0sCisgKiBudW1EZWFkLCBkZWFk SXRlbXMsIGN1cnJUdXBsZXMpIGFyZSBpbml0aWFsaXplZCBoZXJlLiAgVGhlIHRhYmxlIEFNJ3MK KyAqIGJhdGNoX2luaXQgY2FsbGJhY2sgaXMgaW52b2tlZCBoZXJlIHRvIGluaXRpYWxpemUgdGhl IHRhYmxlIEFNIG9wYXF1ZSBhcmVhLgorICogVGhlIGluZGV4IEFNIGNhbGxlciBpcyByZXNwb25z aWJsZSBmb3IgZmlsbGluZyBpbiBpdHMgcGVyLWJhdGNoIG9wYXF1ZQorICogZmllbGRzIGFuZCB0 aGUgbWF0Y2hpbmcgaXRlbXNbXSBhcnJheS4KKyAqCisgKiBPbmNlIHRoZSBiYXRjaCBoYXMgdGhl IHJlcXVpcmVkIG1hdGNoaW5nIGl0ZW1zLCBjYWxsZXIgc2hvdWxkIGdlbmVyYWxseQorICogcGFz cyBpdCB0byBpbmRleGFtX3V0aWxfdW5sb2NrX2JhdGNoLCBhaGVhZCBvZiBpdCBiZWluZyByZXR1 cm5lZCB0aHJvdWdoCisgKiBpbmRleCBBTSdzIGFtZ2V0YmF0Y2ggcm91dGluZS4gIElmIGl0IHR1 cm5zIG91dCB0aGF0IHRoZSBiYXRjaCB3b24ndCBuZWVkCisgKiB0byBiZSByZXR1cm5lZCBsaWtl IHRoaXMgKGUuZy4sIGR1ZSB0byB0aGUgc2NhbiBoYXZpbmcgbm8gbW9yZSBtYXRjaGVzKSwKKyAq IGNhbGxlciBzaG91bGQgcGFzcyBpdHMgZW1wdHkvdW51c2VkIGJhdGNoIHRvIGluZGV4YW1fdXRp bF9yZWxlYXNlX2JhdGNoLgorICovCitJbmRleFNjYW5CYXRjaAoraW5kZXhhbV91dGlsX2FsbG9j X2JhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbikKK3sKKwlJbmRleFNjYW5CYXRjaCBiYXRjaCA9IE5V TEw7CisKKwkvKiBJbmRleCBBTSBtdXN0IGhhdmUgc2V0IGl0cyBvcGFxdWUgc3BhY2UgdG8gc29t ZXRoaW5nIGFscmVhZHkgKi8KKwlBc3NlcnQoc2Nhbi0+YmF0Y2hfaW5kZXhfb3BhcXVlX3N0YXRp YyA+IDApOworCisJLyogRmlyc3QgbG9vayBmb3IgYW4gZXhpc3RpbmcgYmF0Y2ggZnJvbSB0aGUg Y2FjaGUgKi8KKwlpZiAoc2Nhbi0+dXNlYmF0Y2hyaW5nKQorCXsKKwkJZm9yIChpbnQgaSA9IDA7 IGkgPCBJTkRFWF9TQ0FOX0NBQ0hFX0JBVENIRVM7IGkrKykKKwkJeworCQkJaWYgKHNjYW4tPmJh dGNoY2FjaGVbaV0gIT0gTlVMTCkKKwkJCXsKKwkJCQkvKiBSZXR1cm4gY2FjaGVkIHVucmVmZXJl bmNlZCBiYXRjaCAqLworCQkJCWJhdGNoID0gc2Nhbi0+YmF0Y2hjYWNoZVtpXTsKKwkJCQlzY2Fu LT5iYXRjaGNhY2hlW2ldID0gTlVMTDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKwllbHNl IGlmIChzY2FuLT5iYXRjaGNhY2hlWzBdICE9IE5VTEwpCisJeworCQkvKgorCQkgKiBSZXVzZSBj YWNoZWQgYmF0Y2ggZnJvbSBwcmlvciBhbWdldGJpdG1hcCBpdGVyYXRpb24uICBUaGlzIHBhdGgg aXMKKwkJICogaGl0IG9uIGV2ZXJ5IGFtZ2V0Yml0bWFwIGNhbGwgaGVyZSBhZnRlciB0aGUgc2Nh bidzIGZpcnN0LgorCQkgKi8KKwkJYmF0Y2ggPSBzY2FuLT5iYXRjaGNhY2hlWzBdOworCQlzY2Fu LT5iYXRjaGNhY2hlWzBdID0gTlVMTDsKKwl9CisKKwlpZiAoIWJhdGNoKQorCXsKKwkJc2l6ZV90 CQlvcGFxdWVfYXJlYXNfcHJlZml4X3N6LAorCQkJCQliYXNlX3N6LAorCQkJCQlpb3NfdG90YWxf dHJhaWxpbmdfc3osCisJCQkJCWFsbG9jc3o7CisJCWNoYXIJICAgKnJhd19iYXRjaF9hbGxvYzsK KworCQkvKgorCQkgKiBMYXppbHkgY29tcHV0ZSBiYXRjaF9iYXNlX29mZnNldCBvbiBmaXJzdCBj YWxsIGhlcmUgZm9yIHNjYW4uCisJCSAqCisJCSAqIFRoaXMgY29tYmluZXMgdGhlIHRhYmxlIEFN IG9wYXF1ZSBhcmVhIChpdHMgZml4ZWQtc2l6ZSBoZWFkZXIgcGx1cworCQkgKiBhbnkgcGVyLWl0 ZW0gYXJlYSB1c2VkIGR1cmluZyBpbmRleC1vbmx5IHNjYW5zKSBhbmQgdGhlIGluZGV4IEFNJ3MK KwkJICogc3RhdGljIG9wYXF1ZSBhcmVhIGludG8gYSBzaW5nbGUgb2Zmc2V0IHVzZWQgdG8gZmlu ZCB0aGUgdHJ1ZQorCQkgKiBhbGxvY2F0aW9uIGJhc2UgZnJvbSB0aGUgYmF0Y2ggcG9pbnRlci4g IChUaGlzIGlzIGFsc28gd2hlcmUgdGhlCisJCSAqIGZpeGVkLXNpemUgdGFibGUgQU0gb3BhcXVl IGFyZWEgY2FuIGJlIGZvdW5kLikKKwkJICovCisJCWlmIChzY2FuLT5iYXRjaF9iYXNlX29mZnNl dCA9PSAwKQorCQl7CisJCQlTaXplCQl0YWJsZV9hcmVhID0gMDsKKworCQkJLyoKKwkJCSAqIFRo ZSB0YWJsZSBBTSBvcGFxdWUgYXJlYSBpcyBhIHNpbmdsZSBjb250aWd1b3VzIGJsb2NrOiBhCisJ CQkgKiBmaXhlZC1zaXplIGhlYWRlciAoYmF0Y2hfb3BhcXVlX3NpemUgYnl0ZXMpIGltbWVkaWF0 ZWx5CisJCQkgKiBmb2xsb3dlZCBieSBhIHBlci1pdGVtIGFyZWEgKGJhdGNoX3Blcl9pdGVtX3Np emUgYnl0ZXMgcGVyCisJCQkgKiBiYXRjaCBpdGVtKS4KKwkJCSAqCisJCQkgKiBXZSBkZWxpYmVy YXRlbHkgTUFYQUxJR04gb25seSB0aGUgY29tYmluZWQgc2l6ZSwgbmV2ZXIgdGhlCisJCQkgKiBo ZWFkZXIgb3IgdGhlIHBlci1pdGVtIGFyZWEgaW5kaXZpZHVhbGx5LiAgVGhpcyBsZXRzIHRoZSB0 YWJsZQorCQkJICogQU0gbGF5IG91dCB0aGUgd2hvbGUgYXJlYSBhcyBhIHNpbmdsZSBDIHN0cnVj dCB3aXRoIGEgZmxleGlibGUKKwkJCSAqIGFycmF5IG1lbWJlciBmb3IgaXRzIHBlci1pdGVtIGRh dGEuICBJdCBhbHNvIGFsbG93cyB0YWJsZSBBTXMKKwkJCSAqIHRvIG5vdCB1c2UgYSBwZXItaXRl bSBhcmVhIGF0IGFsbCwgYnV0IHN0aWxsIHVzZSBhIGZpeGVkLXNpemUKKwkJCSAqIHN0cnVjdC4K KwkJCSAqLworCQkJaWYgKHNjYW4tPnVzZWJhdGNocmluZykKKwkJCQl0YWJsZV9hcmVhID0gTUFY QUxJR04oc2Nhbi0+YmF0Y2hfb3BhcXVlX3NpemUgKworCQkJCQkJCQkJICAoU2l6ZSkgc2Nhbi0+ YmF0Y2hfcGVyX2l0ZW1fc2l6ZSAqCisJCQkJCQkJCQkgIHNjYW4tPm1heGl0ZW1zYmF0Y2gpOwor CisJCQlzY2FuLT5iYXRjaF9iYXNlX29mZnNldCA9IHRhYmxlX2FyZWEgKworCQkJCXNjYW4tPmJh dGNoX2luZGV4X29wYXF1ZV9zdGF0aWM7CisJCX0KKworCQkvKgorCQkgKiBTdWJ0b3RhbCAjMTog dGhlIHNpemUgb2YgYm90aCBBTSBvcGFxdWUgYXJlYXMgKHRoZSB0YWJsZSBBTSdzCisJCSAqIGhl YWRlciBwbHVzIGl0cyBwZXItaXRlbSBhcmVhLCBhbmQgdGhlIGluZGV4IEFNJ3MgYXJlYSkgbG9j YXRlZAorCQkgKiBiZWZvcmUgdGhlIHN0YXJ0IG9mIEluZGV4U2NhbkJhdGNoRGF0YQorCQkgKi8K KwkJb3BhcXVlX2FyZWFzX3ByZWZpeF9zeiA9IHNjYW4tPmJhdGNoX2Jhc2Vfb2Zmc2V0OworCQlB c3NlcnQob3BhcXVlX2FyZWFzX3ByZWZpeF9zeiA9PSBNQVhBTElHTihvcGFxdWVfYXJlYXNfcHJl Zml4X3N6KSk7CisKKwkJLyogU3VidG90YWwgIzI6IEluZGV4U2NhbkJhdGNoRGF0YSBhbmQgaXRz IGl0ZW1zW21heGl0ZW1zYmF0Y2hdICovCisJCWJhc2Vfc3ogPSBNQVhBTElHTihvZmZzZXRvZihJ bmRleFNjYW5CYXRjaERhdGEsIGl0ZW1zKSArCisJCQkJCQkgICBzaXplb2YoQmF0Y2hNYXRjaGlu Z0l0ZW0pICogc2Nhbi0+bWF4aXRlbXNiYXRjaCk7CisKKwkJLyoKKwkJICogU3VidG90YWwgIzM6 IHRoZSBjdXJyVHVwbGVzIHdvcmtzcGFjZSB0aGF0IGNvbWVzIGFmdGVyIGl0ZW1zW10sCisJCSAq IHdoZXJlIHRoZSBpbmRleCBBTSBzdG9yZXMgaW5kZXggdHVwbGVzIGR1cmluZyBpbmRleC1vbmx5 IHNjYW5zCisJCSAqLworCQlpb3NfdG90YWxfdHJhaWxpbmdfc3ogPSAwOworCQlpZiAoc2Nhbi0+ eHNfd2FudF9pdHVwKQorCQl7CisJCQlpb3NfdG90YWxfdHJhaWxpbmdfc3ogPSBzY2FuLT5iYXRj aF90dXBsZXNfd29ya3NwYWNlOworCQkJcGdfYXNzdW1lKGlvc190b3RhbF90cmFpbGluZ19zeiA+ IDApOworCQkJQXNzZXJ0KGlvc190b3RhbF90cmFpbGluZ19zeiA9PSBNQVhBTElHTihpb3NfdG90 YWxfdHJhaWxpbmdfc3opKTsKKwkJfQorCisJCS8qIFRvdGFsIGJhdGNoIGFsbG9jYXRpb24gc2l6 ZSBpcyB0aGUgc3VtIG9mIG91ciB0aHJlZSBzdWJ0b3RhbHMgKi8KKwkJYWxsb2NzeiA9IG9wYXF1 ZV9hcmVhc19wcmVmaXhfc3ogKyBiYXNlX3N6ICsgaW9zX3RvdGFsX3RyYWlsaW5nX3N6OworCQlB c3NlcnQoYWxsb2NzeiA9PSBiYXRjaF9hbGxvY19zaXplKHNjYW4pKTsKKwkJcmF3X2JhdGNoX2Fs bG9jID0gcGFsbG9jKGFsbG9jc3opOworCQliYXRjaCA9IChJbmRleFNjYW5CYXRjaCkgKHJhd19i YXRjaF9hbGxvYyArIG9wYXF1ZV9hcmVhc19wcmVmaXhfc3opOworCQlBc3NlcnQoaW5kZXhfc2Nh bl9iYXRjaF9iYXNlKHNjYW4sIGJhdGNoKSA9PSByYXdfYmF0Y2hfYWxsb2MpOworCisJCS8qIGN1 cnJUdXBsZXMgKGlmIGFueSkgaXMgZGlyZWN0bHkgYWZ0ZXIgaXRlbXNbXSAqLworCQliYXRjaC0+ Y3VyclR1cGxlcyA9IE5VTEw7CisJCWlmIChpb3NfdG90YWxfdHJhaWxpbmdfc3opCisJCQliYXRj aC0+Y3VyclR1cGxlcyA9IChjaGFyICopIGJhdGNoICsgYmFzZV9zejsKKwkJQXNzZXJ0KCFzY2Fu LT54c193YW50X2l0dXAgfHwgYmF0Y2gtPmN1cnJUdXBsZXMgIT0gTlVMTCk7CisKKwkJLyoKKwkJ ICogQmF0Y2hlcyBnZXQgdGhlaXIgb3duIHBhbGxvYydkIGRlYWRJdGVtcyBhcyBuZWVkZWQgKHRo b3VnaCBjYWNoZWQKKwkJICogYmF0Y2hlcyBrZWVwIHRoZWlyIGRlYWRJdGVtcyBhbGxvY2F0aW9u IHdoZW4gcmVjeWNsZWQpCisJCSAqLworCQliYXRjaC0+ZGVhZEl0ZW1zID0gTlVMTDsKKwl9CisK KwkvKiBXZSBoYWQgYmV0dGVyIGhhdmUgY29tcHV0ZWQgYmF0Y2hfYmFzZV9vZmZzZXQgYnkgbm93 ICovCisJQXNzZXJ0KHNjYW4tPmJhdGNoX2Jhc2Vfb2Zmc2V0ID4gMCk7CisKKwkvKgorCSAqIExl dCB0aGUgdGFibGUgQU0gaW5pdGlhbGl6ZSBpdHMgcGVyLWJhdGNoIG9wYXF1ZSBhcmVhLCBidXQg b25seSB3aGVuIGl0CisJICogcmVzZXJ2ZWQgb25lIGZvciB0aGlzIHNjYW46IGEgZml4ZWQtc2l6 ZSBoZWFkZXIgKGJhdGNoX29wYXF1ZV9zaXplKSwgb3IKKwkgKiBhIHBlci1pdGVtIGFyZWEgKGJh dGNoX3Blcl9pdGVtX3NpemUpLiAgVW5saWtlIGluZGV4IEFNcywgdGFibGUgQU1zCisJICogZG9u J3QgaGF2ZSB0byBwcm92aWRlIGFueSBvcGFxdWUgZGF0YSAoYml0bWFwIGluZGV4IHNjYW5zIHRo YXQgcmV1c2UKKwkgKiB0aGUgYmF0Y2ggaW5mcmFzdHJ1Y3R1cmUgc2ltaWxhcmx5IG5ldmVyIHVz ZSBvbmUsIHNpbmNlIHRoZSB0YWJsZSBBTQorCSAqIGlzbid0IGRpcmVjdGx5IGludm9sdmVkKS4K KwkgKi8KKwlpZiAoc2Nhbi0+dXNlYmF0Y2hyaW5nICYmCisJCShzY2FuLT5iYXRjaF9vcGFxdWVf c2l6ZSA+IDAgfHwgc2Nhbi0+YmF0Y2hfcGVyX2l0ZW1fc2l6ZSA+IDApKQorCQl0YWJsZV9pbmRl eF9zY2FuX2JhdGNoX2luaXQoc2NhbiwgYmF0Y2gpOworCisJLyogc2hhcmVkIGluaXRpYWxpemF0 aW9uICovCisJYmF0Y2gtPmtub3duRW5kQmFja3dhcmQgPSBmYWxzZTsKKwliYXRjaC0+a25vd25F bmRGb3J3YXJkID0gZmFsc2U7CisJYmF0Y2gtPmlzR3VhcmRlZCA9IGZhbHNlOworCWJhdGNoLT5m aXJzdEl0ZW0gPSAtMTsKKwliYXRjaC0+bGFzdEl0ZW0gPSAtMTsKKwliYXRjaC0+bnVtRGVhZCA9 IDA7CisKKwlyZXR1cm4gYmF0Y2g7Cit9CisKKy8qCisgKiBSZWxlYXNlIGFsbG9jYXRlZCBiYXRj aAorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IGluZGV4IEFNcyB0byByZWxlYXNl IGEgYmF0Y2ggYWxsb2NhdGVkIGJ5CisgKiBpbmRleGFtX3V0aWxfYWxsb2NfYmF0Y2guICBCYXRj aGVzIGFyZSBjYWNoZWQgaGVyZSBmb3IgcmV1c2UgdG8gcmVkdWNlCisgKiBwYWxsb2MvcGZyZWUg b3ZlcmhlYWQuCisgKgorICogSXQncyBzYWZlIHRvIHJlbGVhc2UgYSBiYXRjaCBpbW1lZGlhdGVs eSB3aGVuIGl0IHdhcyB1c2VkIHRvIHJlYWQgYSBwYWdlCisgKiB0aGF0IHJldHVybmVkIG5vIG1h dGNoZXMgdG8gdGhlIHNjYW4uICBCYXRjaGVzIGFjdHVhbGx5IHJldHVybmVkIGJ5IGluZGV4Cisg KiBBTSdzIGFtZ2V0YmF0Y2ggcm91dGluZSAoaS5lLiBiYXRjaGVzIGZvciBwYWdlcyB3aXRoIG9u ZSBvciBtb3JlIG1hdGNoZXMpCisgKiBtdXN0IGJlIHJlbGVhc2VkIGJ5IHRhYmxlYW1fdXRpbF9y ZWxlYXNlX2JhdGNoLCB3aGljaCBjYWxscyBoZXJlIGFmdGVyIHRoZQorICogaW5kZXggQU0ncyBh bWtpbGxpdGVtc2JhdGNoIHJvdXRpbmUgKGlmIGFueSkuICBJbmRleCBBTXMgdGhhdCB1c2UgYmF0 Y2hlcworICogc2hvdWxkIGNhbGwgaGVyZSB0byByZWxlYXNlIGEgYmF0Y2ggZnJvbSB0aGVpciBh bWdldGJhdGNoIG9yIGFtZ2V0Yml0bWFwCisgKiByb3V0aW5lcy4KKyAqCisgKiBUaGUgcnVsZXMg Zm9yIGJhdGNoIG93bmVyc2hpcCBkaWZmZXIgc2xpZ2h0bHkgZm9yIGFtZ2V0Yml0bWFwIHNjYW5z OyBzZWUKKyAqIHRoZSBhbWdldGJpdG1hcCBkb2N1bWVudGF0aW9uIGluIGRvYy9zcmMvc2dtbC9p bmRleGFtLnNnbWwgZm9yIGRldGFpbHMuCisgKi8KK3ZvaWQKK2luZGV4YW1fdXRpbF9yZWxlYXNl X2JhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCit7CisJaWYg KCFzY2FuLT51c2ViYXRjaHJpbmcpCisJeworCQkvKgorCQkgKiBhbWdldGJpdG1hcCBzY2FuIGNh bGxlci4KKwkJICoKKwkJICogYW1nZXRiaXRtYXAgcm91dGluZXMgYXJlIHJlcXVpcmVkIHRvIGFs bG9jYXRlIG5vIG1vcmUgdGhhbiBvbmUKKwkJICogYmF0Y2ggYXQgYSB0aW1lLCBzbyB3ZSdsbCBh bHdheXMgaGF2ZSBhIGZyZWUgc2xvdC4KKwkJICovCisJCUFzc2VydChzY2FuLT5iYXRjaGNhY2hl WzBdID09IE5VTEwpOworCQlBc3NlcnQoc2Nhbi0+aGVhcFJlbGF0aW9uID09IE5VTEwpOworCQlB c3NlcnQoYmF0Y2gtPmRlYWRJdGVtcyA9PSBOVUxMKTsKKwkJQXNzZXJ0KGJhdGNoLT5jdXJyVHVw bGVzID09IE5VTEwpOworCisJCWJhdGNoX2NhY2hlX21hcmtfdW5kZWZpbmVkKHNjYW4sIGJhdGNo KTsKKwkJc2Nhbi0+YmF0Y2hjYWNoZVswXSA9IGJhdGNoOworCQlyZXR1cm47CisJfQorCisJLyog YW1nZXRiYXRjaCBzY2FuIGNhbGxlciAqLworCUFzc2VydChzY2FuLT5oZWFwUmVsYXRpb24gIT0g TlVMTCk7CisKKwkvKgorCSAqIFRyeSB0byBzdG9yZSBjYWxsZXIncyBiYXRjaCBpbiB0aGlzIGFt Z2V0YmF0Y2ggc2NhbidzIGNhY2hlIG9mCisJICogcHJldmlvdXNseSByZWxlYXNlZCBiYXRjaGVz IGZpcnN0CisJICovCisJaWYgKGJhdGNoX2NhY2hlX3N0b3JlKHNjYW4sIGJhdGNoKSkKKwkJcmV0 dXJuOworCisJLyogQ2FjaGUgZnVsbDsganVzdCBmcmVlIHRoZSBjYWxsZXIncyBiYXRjaCAqLwor CWlmIChiYXRjaC0+ZGVhZEl0ZW1zKQorCQlwZnJlZShiYXRjaC0+ZGVhZEl0ZW1zKTsKKwlwZnJl ZShpbmRleF9zY2FuX2JhdGNoX2Jhc2Uoc2NhbiwgYmF0Y2gpKTsKK30KKworLyoKKyAqIFRyeSB0 byBzdG9yZSBhIGJhdGNoIGluIHRoZSBzY2FuJ3MgYmF0Y2ggY2FjaGUuCisgKgorICogUmV0dXJu cyB0cnVlIGlmIGEgZnJlZSBzbG90IHdhcyBmb3VuZCwgZmFsc2UgaWYgdGhlIGNhY2hlIGlzIGZ1 bGwuCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbAorYmF0Y2hfY2FjaGVfc3RvcmUoSW5kZXhTY2Fu RGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCkKK3sKKwlmb3IgKGludCBpID0gMDsgaSA8 IElOREVYX1NDQU5fQ0FDSEVfQkFUQ0hFUzsgaSsrKQorCXsKKwkJaWYgKHNjYW4tPmJhdGNoY2Fj aGVbaV0gPT0gTlVMTCkKKwkJeworCQkJYmF0Y2hfY2FjaGVfbWFya191bmRlZmluZWQoc2Nhbiwg YmF0Y2gpOworCQkJc2Nhbi0+YmF0Y2hjYWNoZVtpXSA9IGJhdGNoOworCQkJcmV0dXJuIHRydWU7 CisJCX0KKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qCisgKiBxc29ydCBjb21wYXJpc29u IGZ1bmN0aW9uIGZvciBpbnQgYXJyYXlzCisgKi8KK3N0YXRpYyBpbnQKK2JhdGNoX2NvbXBhcmVf aW50KGNvbnN0IHZvaWQgKnZhLCBjb25zdCB2b2lkICp2YikKK3sKKwlpbnQJCQlhID0gKigoY29u c3QgaW50ICopIHZhKTsKKwlpbnQJCQliID0gKigoY29uc3QgaW50ICopIHZiKTsKKworCXJldHVy biBwZ19jbXBfczMyKGEsIGIpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2lu ZGV4L21lc29uLmJ1aWxkIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L21lc29uLmJ1aWxkCmlu ZGV4IGRhNjRjYjU5NS4uODNkZmEzZjJiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mv aW5kZXgvbWVzb24uYnVpbGQKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L21lc29uLmJ1 aWxkCkBAIC01LDQgKzUsNSBAQCBiYWNrZW5kX3NvdXJjZXMgKz0gZmlsZXMoCiAgICdhbXZhbGlk YXRlLmMnLAogICAnZ2VuYW0uYycsCiAgICdpbmRleGFtLmMnLAorICAnaW5kZXhiYXRjaC5jJywK ICkKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvUkVBRE1FIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL25idHJlZS9SRUFETUUKaW5kZXggY2I5MjFjYTJlLi5hMzc4NjliNzEgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvUkVBRE1FCisrKyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9uYnRyZWUvUkVBRE1FCkBAIC0xNzksMTggKzE3OSwxNSBAQCBob2xkIG9uIHRv IHRoZSBwaW4gKHVzZWQgd2hlbiByZWFkaW5nIGZyb20gdGhlIGxlYWYgcGFnZSkgdW50aWwgX2Fm dGVyXwogdGhleSdyZSBkb25lIHZpc2l0aW5nIHRoZSBoZWFwIChmb3IgVElEcyBmcm9tIHBpbm5l ZCBsZWFmIHBhZ2UpIHByZXZlbnRzCiBjb25jdXJyZW50IFRJRCByZWN5Y2xpbmcuICBWQUNVVU0g Y2Fubm90IGdldCBhIGNvbmZsaWN0aW5nIGNsZWFudXAgbG9jawogdW50aWwgdGhlIGluZGV4IHNj YW4gaXMgdG90YWxseSBmaW5pc2hlZCBwcm9jZXNzaW5nIGl0cyBsZWFmIHBhZ2UuCitUaGlzIGlz IHJlcXVpcmVkIGJ5IGFueSBpbmRleCBBTSB0aGF0IGltcGxlbWVudHMgdGhlIGFtZ2V0YmF0Y2gK K2ludGVyZmFjZS4gIChTZWUgYWxzbywgZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbCkuCiAKLVRo aXMgYXBwcm9hY2ggaXMgZmFpcmx5IGNvYXJzZSwgc28gd2UgYXZvaWQgaXQgd2hlbmV2ZXIgcG9z c2libGUuICBJbgotcHJhY3RpY2UgbW9zdCBpbmRleCBzY2FucyB3b24ndCBob2xkIG9udG8gdGhl aXIgcGluLCBhbmQgc28gd29uJ3QgYmxvY2sKLVZBQ1VVTS4gIFRoZXNlIGluZGV4IHNjYW5zIG11 c3QgZGVhbCB3aXRoIFRJRCByZWN5Y2xpbmcgZGlyZWN0bHksIHdoaWNoIGlzCi1tb3JlIGNvbXBs aWNhdGVkIGFuZCBub3QgYWx3YXlzIHBvc3NpYmxlLiAgU2VlIGxhdGVyIHNlY3Rpb24gb24gbWFr aW5nCi1jb25jdXJyZW50IFRJRCByZWN5Y2xpbmcgc2FmZS4KLQotT3Bwb3J0dW5pc3RpYyBpbmRl eCB0dXBsZSBkZWxldGlvbiBwZXJmb3JtcyBhbG1vc3QgdGhlIHNhbWUgcGFnZS1sZXZlbAotbW9k aWZpY2F0aW9ucyB3aGlsZSBvbmx5IGhvbGRpbmcgYW4gZXhjbHVzaXZlIGxvY2suICBUaGlzIGlz IHNhZmUgYmVjYXVzZQotdGhlcmUgaXMgbm8gcXVlc3Rpb24gb2YgVElEIHJlY3ljbGluZyB0YWtp bmcgcGxhY2UgbGF0ZXIgb24gLS0gb25seSBWQUNVVU0KLWNhbiBtYWtlIFRJRHMgcmVjeWNsYWJs ZS4gIFNlZSBhbHNvIHNpbXBsZSBkZWxldGlvbiBhbmQgYm90dG9tLXVwCi1kZWxldGlvbiwgYmVs b3cuCitPcHBvcnR1bmlzdGljIGluZGV4IHR1cGxlIGRlbGV0aW9uIHBlcmZvcm1zIHRoZSBzYW1l IHBhZ2UtbGV2ZWwKK21vZGlmaWNhdGlvbnMgYXMgVkFDVVVNLCB3aGlsZSBvbmx5IGhvbGRpbmcg YW4gZXhjbHVzaXZlIGxvY2suICBUaGlzIGlzCitzYWZlIGJlY2F1c2UgdGhlcmUgaXMgbm8gcXVl c3Rpb24gb2YgVElEIHJlY3ljbGluZyB0YWtpbmcgcGxhY2UgLS0gb25seQorVkFDVVVNIGNhbiBt YWtlIFRJRHMgcmVjeWNsYWJsZS4gIEluIG90aGVyIHdvcmRzLCBWQUNVVU0ncyBjbGVhbnVwIGxv Y2sKK3NlcnZlcyB0byBwcm90ZWN0IG5vbi1NVkNDIHNuYXBzaG90IHNjYW5zIGZyb20gY29uY3Vy cmVudCBUSUQgcmVjeWNsaW5nCitoYXphcmRzOyBpdCBkb2Vzbid0IHByb3RlY3QgdGhlIEItVHJl ZSBzdHJ1Y3R1cmUgaXRzZWxmLgogCiBCZWNhdXNlIGEgcGluIGlzIG5vdCBhbHdheXMgaGVsZCwg YW5kIGEgcGFnZSBjYW4gYmUgc3BsaXQgZXZlbiB3aGlsZQogc29tZW9uZSBkb2VzIGhvbGQgYSBw aW4gb24gaXQsIGl0IGlzIHBvc3NpYmxlIHRoYXQgYW4gaW5kZXhzY2FuIHdpbGwKQEAgLTQ0MCw1 NCArNDM3LDYgQEAgd2hlbmV2ZXIgaXQgaXMgc3Vic2VxdWVudGx5IHRha2VuIGZyb20gdGhlIEZT TSBmb3IgcmV1c2UuICBUaGUgZGVsZXRlZAogcGFnZSdzIGNvbnRlbnRzIHdpbGwgYmUgb3Zlcndy aXR0ZW4gYnkgdGhlIHNwbGl0IG9wZXJhdGlvbiAoaXQgd2lsbCBiZWNvbWUKIHRoZSBuZXcgcmln aHQgc2libGluZyBwYWdlKS4KIAotTWFraW5nIGNvbmN1cnJlbnQgVElEIHJlY3ljbGluZyBzYWZl Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotQXMgZXhwbGFpbmVkIGlu IHRoZSBlYXJsaWVyIHNlY3Rpb24gYWJvdXQgZGVsZXRpbmcgaW5kZXggdHVwbGVzIGR1cmluZwot VkFDVVVNLCB3ZSBpbXBsZW1lbnQgYSBsb2NraW5nIHByb3RvY29sIHRoYXQgYWxsb3dzIGluZGl2 aWR1YWwgaW5kZXggc2NhbnMKLXRvIGF2b2lkIGNvbmN1cnJlbnQgVElEIHJlY3ljbGluZy4gIElu ZGV4IHNjYW5zIG9wdC1vdXQgKGFuZCBzbyBkcm9wIHRoZWlyCi1sZWFmIHBhZ2UgcGluIHdoZW4g dmlzaXRpbmcgdGhlIGhlYXApIHdoZW5ldmVyIGl0J3Mgc2FmZSB0byBkbyBzbywgdGhvdWdoLgot RHJvcHBpbmcgdGhlIHBpbiBlYXJseSBpcyB1c2VmdWwgYmVjYXVzZSBpdCBhdm9pZHMgYmxvY2tp bmcgcHJvZ3Jlc3MgYnkKLVZBQ1VVTS4gIFRoaXMgaXMgcGFydGljdWxhcmx5IGltcG9ydGFudCB3 aXRoIGluZGV4IHNjYW5zIHVzZWQgYnkgY3Vyc29ycywKLXNpbmNlIGlkbGUgY3Vyc29ycyBzb21l dGltZXMgc3RvcCBmb3IgcmVsYXRpdmVseSBsb25nIHBlcmlvZHMgb2YgdGltZS4gIEluCi1leHRy ZW1lIGNhc2VzLCBhIGNsaWVudCBhcHBsaWNhdGlvbiBtYXkgaG9sZCBvbiB0byBhbiBpZGxlIGN1 cnNvcnMgZm9yCi1ob3VycyBvciBldmVuIGRheXMuICBCbG9ja2luZyBWQUNVVU0gZm9yIHRoYXQg bG9uZyBjb3VsZCBiZSBkaXNhc3Ryb3VzLgotCi1JbmRleCBzY2FucyB0aGF0IGRvbid0IGhvbGQg b24gdG8gYSBidWZmZXIgcGluIGFyZSBwcm90ZWN0ZWQgYnkgaG9sZGluZyBhbgotTVZDQyBzbmFw c2hvdCBpbnN0ZWFkLiAgVGhpcyBtb3JlIGxpbWl0ZWQgaW50ZXJsb2NrIHByZXZlbnRzIHdyb25n IGFuc3dlcnMKLXRvIHF1ZXJpZXMsIGJ1dCBpdCBkb2VzIG5vdCBwcmV2ZW50IGNvbmN1cnJlbnQg VElEIHJlY3ljbGluZyBpdHNlbGYgKG9ubHkKLWhvbGRpbmcgb250byB0aGUgbGVhZiBwYWdlIHBp biB3aGlsZSBhY2Nlc3NpbmcgdGhlIGhlYXAgZW5zdXJlcyB0aGF0KS4KLQotSW5kZXgtb25seSBz Y2FucyBjYW4gbmV2ZXIgZHJvcCB0aGVpciBidWZmZXIgcGluLCBzaW5jZSB0aGV5IGFyZSB1bmFi bGUgdG8KLXRvbGVyYXRlIGhhdmluZyBhIHJlZmVyZW5jZWQgVElEIGJlY29tZSByZWN5Y2xhYmxl LiAgSW5kZXgtb25seSBzY2FucwotdHlwaWNhbGx5IGp1c3QgdmlzaXQgdGhlIHZpc2liaWxpdHkg bWFwIChub3QgdGhlIGhlYXAgcHJvcGVyKSwgYW5kIHNvIHdpbGwKLW5vdCByZWxpYWJseSBub3Rp Y2UgdGhhdCBhbnkgc3RhbGUgVElEIHJlZmVyZW5jZSAoZm9yIGEgVElEIHRoYXQgcG9pbnRlZAot dG8gYSBkZWFkLXRvLWFsbCBoZWFwIGl0ZW0gYXQgZmlyc3QpIHdhcyBjb25jdXJyZW50bHkgbWFy a2VkIExQX1VOVVNFRCBpbgotdGhlIGhlYXAgYnkgVkFDVVVNLiAgVGhpcyBjb3VsZCBlYXNpbHkg YWxsb3cgVkFDVVVNIHRvIHNldCB0aGUgd2hvbGUgaGVhcAotcGFnZSB0byBhbGwtdmlzaWJsZSBp biB0aGUgdmlzaWJpbGl0eSBtYXAgaW1tZWRpYXRlbHkgYWZ0ZXJ3YXJkcy4gIEFuIE1WQ0MKLXNu YXBzaG90IGlzIG9ubHkgc3VmZmljaWVudCB0byBhdm9pZCBwcm9ibGVtcyBkdXJpbmcgcGxhaW4g aW5kZXggc2NhbnMKLWJlY2F1c2UgdGhleSBtdXN0IGFjY2VzcyBncmFudWxhciB2aXNpYmlsaXR5 IGluZm9ybWF0aW9uIGZyb20gdGhlIGhlYXAKLXByb3Blci4gIEEgcGxhaW4gaW5kZXggc2NhbiB3 aWxsIGV2ZW4gcmVjb2duaXplIExQX1VOVVNFRCBpdGVtcyBpbiB0aGUKLWhlYXAgKGl0ZW1zIHRo YXQgY291bGQgYmUgcmVjeWNsZWQgYnV0IGhhdmVuJ3QgYmVlbiBqdXN0IHlldCkgYXMgIm5vdAot dmlzaWJsZSIgLS0gZXZlbiB3aGVuIHRoZSBoZWFwIHBhZ2UgaXMgZ2VuZXJhbGx5IGNvbnNpZGVy ZWQgYWxsLXZpc2libGUuCi0KLUxQX0RFQUQgc2V0dGluZyBvZiBpbmRleCB0dXBsZXMgYnkgdGhl IGtpbGxfcHJpb3JfdHVwbGUgb3B0aW1pemF0aW9uCi0oZGVzY3JpYmVkIGluIGZ1bGwgaW4gc2lt cGxlIGRlbGV0aW9uLCBiZWxvdykgaXMgYWxzbyBtb3JlIGNvbXBsaWNhdGVkIGZvcgotaW5kZXgg c2NhbnMgdGhhdCBkcm9wIHRoZWlyIGxlYWYgcGFnZSBwaW5zLiAgV2UgbXVzdCBiZSBjYXJlZnVs IHRvIGF2b2lkCi1MUF9ERUFELW1hcmtpbmcgYW55IG5ldyBpbmRleCB0dXBsZSB0aGF0IGxvb2tz IGxpa2UgYSBrbm93bi1kZWFkIGluZGV4Ci10dXBsZSBiZWNhdXNlIGl0IGhhcHBlbnMgdG8gc2hh cmUgdGhlIHNhbWUgVElELCBmb2xsb3dpbmcgY29uY3VycmVudCBUSUQKLXJlY3ljbGluZy4gIEl0 J3MganVzdCBhYm91dCBwb3NzaWJsZSB0aGF0IHNvbWUgb3RoZXIgc2Vzc2lvbiBpbnNlcnRlZCBh Ci1uZXcsIHVucmVsYXRlZCBpbmRleCB0dXBsZSwgb24gdGhlIHNhbWUgbGVhZiBwYWdlLCB3aGlj aCBoYXMgdGhlIHNhbWUKLW9yaWdpbmFsIFRJRC4gIEl0IHdvdWxkIGJlIHRvdGFsbHkgd3Jvbmcg dG8gTFBfREVBRC1zZXQgdGhpcyBuZXcsCi11bnJlbGF0ZWQgaW5kZXggdHVwbGUuCi0KLVdlIGhh bmRsZSB0aGlzIGtpbGxfcHJpb3JfdHVwbGUgcmFjZSBjb25kaXRpb24gYnkgaGF2aW5nIGFmZmVj dGVkIGluZGV4Ci1zY2FucyBjb25zZXJ2YXRpdmVseSBhc3N1bWUgdGhhdCBhbnkgY2hhbmdlIHRv IHRoZSBsZWFmIHBhZ2UgYXQgYWxsCi1pbXBsaWVzIHRoYXQgaXQgd2FzIHJlYWNoZWQgYnkgYnRi dWxrZGVsZXRlIGluIHRoZSBpbnRlcmltIHBlcmlvZCB3aGVuIG5vCi1idWZmZXIgcGluIHdhcyBo ZWxkLiAgVGhpcyBpcyBpbXBsZW1lbnRlZCBieSBub3Qgc2V0dGluZyBhbnkgTFBfREVBRCBiaXRz Ci1vbiB0aGUgbGVhZiBwYWdlIGF0IGFsbCB3aGVuIHRoZSBwYWdlJ3MgTFNOIGhhcyBjaGFuZ2Vk LiAgKFRoaXMgaXMgd2h5IHdlCi1pbXBsZW1lbnQgImZha2UiIExTTnMgZm9yIHVubG9nZ2VkIGlu ZGV4IHJlbGF0aW9ucy4pCi0KIEZhc3RwYXRoIEZvciBJbmRleCBJbnNlcnRpb24KIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtNzM0LDcgKzY4Myw3IEBAIG9mIHJlYWRlcnMgY291 bGQgc3RpbGwgbW92ZSByaWdodCB0byByZWNvdmVyIGlmIHdlIGRpZG4ndCBjb3VwbGUKIHNhbWUt bGV2ZWwgbG9ja3MpLCBidXQgd2UgcHJlZmVyIHRvIGJlIGNvbnNlcnZhdGl2ZSBoZXJlLgogCiBE dXJpbmcgcmVjb3ZlcnkgYWxsIGluZGV4IHNjYW5zIHN0YXJ0IHdpdGggaWdub3JlX2tpbGxlZF90 dXBsZXMgPSBmYWxzZQotYW5kIHdlIG5ldmVyIHNldCBraWxsX3ByaW9yX3R1cGxlLiBXZSBkbyB0 aGlzIGJlY2F1c2UgdGhlIG9sZGVzdCB4bWluCithbmQgd2UgbmV2ZXIgTFBfREVBRC1tYXJrIHR1 cGxlcy4gV2UgZG8gdGhpcyBiZWNhdXNlIHRoZSBvbGRlc3QgeG1pbgogb24gdGhlIHN0YW5kYnkg c2VydmVyIGNhbiBiZSBvbGRlciB0aGFuIHRoZSBvbGRlc3QgeG1pbiBvbiB0aGUgcHJpbWFyeQog c2VydmVyLCB3aGljaCBtZWFucyB0dXBsZXMgY2FuIGJlIG1hcmtlZCBMUF9ERUFEIGV2ZW4gd2hl biB0aGV5IGFyZQogc3RpbGwgdmlzaWJsZSBvbiB0aGUgc3RhbmRieS4gV2UgZG9uJ3QgV0FMIGxv ZyB0dXBsZSBMUF9ERUFEIGJpdHMsIGJ1dApAQCAtNzU2LDkgKzcwNSw4IEBAIG5vbi1NVkNDIHNj YW5zIGlzIG5vdCByZXF1aXJlZCBvbiBzdGFuZGJ5IG5vZGVzLiBXZSBzdGlsbCBnZXQgYSBmdWxs CiBjbGVhbnVwIGxvY2sgd2hlbiByZXBsYXlpbmcgVkFDVVVNIHJlY29yZHMgZHVyaW5nIHJlY292 ZXJ5LCBidXQgcmVjb3ZlcnkKIGRvZXMgbm90IG5lZWQgdG8gbG9jayBldmVyeSBsZWFmIHBhZ2Ug KG9ubHkgdGhvc2UgbGVhZiBwYWdlcyB0aGF0IGhhdmUKIGl0ZW1zIHRvIGRlbGV0ZSkgLS0gdGhh dCdzIHN1ZmZpY2llbnQgdG8gYXZvaWQgYnJlYWtpbmcgaW5kZXgtb25seSBzY2FucwotZHVyaW5n IHJlY292ZXJ5IChzZWUgc2VjdGlvbiBhYm92ZSBhYm91dCBtYWtpbmcgVElEIHJlY3ljbGluZyBz YWZlKS4gVGhhdAotbGVhdmVzIGNvbmNlcm4gb25seSBmb3IgcGxhaW4gaW5kZXggc2NhbnMuIChY WFg6IE5vdCBhY3R1YWxseSBjbGVhciB3aHkKLXRoaXMgaXMgdG90YWxseSB1bm5lY2Vzc2FyeSBk dXJpbmcgcmVjb3ZlcnkuKQorZHVyaW5nIHJlY292ZXJ5LiBUaGF0IGxlYXZlcyBjb25jZXJuIG9u bHkgZm9yIHBsYWluIGluZGV4IHNjYW5zLgorKFhYWDogTm90IGFjdHVhbGx5IGNsZWFyIHdoeSB0 aGlzIGlzIHRvdGFsbHkgdW5uZWNlc3NhcnkgZHVyaW5nIHJlY292ZXJ5LikKIAogTVZDQyBzbmFw c2hvdCBwbGFpbiBpbmRleCBzY2FucyBhcmUgYWx3YXlzIHNhZmUsIGZvciB0aGUgc2FtZSByZWFz b25zIHRoYXQKIHRoZXkncmUgc2FmZSBkdXJpbmcgb3JpZ2luYWwgZXhlY3V0aW9uLiAgSGVhcFR1 cGxlU2F0aXNmaWVzVG9hc3QoKSBkb2Vzbid0CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nl c3MvbmJ0cmVlL25idHBhZ2UuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cGFnZS5j CmluZGV4IDA1NDcwMzg2MS4uYjljMjc5NTA4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nl c3MvbmJ0cmVlL25idHBhZ2UuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHBh Z2UuYwpAQCAtMTA2MCw2ICsxMDYwLDkgQEAgX2J0X3JlbGJ1ZihSZWxhdGlvbiByZWwsIEJ1ZmZl ciBidWYpCiAgKiBMb2NrIGlzIGFjcXVpcmVkIHdpdGhvdXQgYWNxdWlyaW5nIGFub3RoZXIgcGlu LiAgVGhpcyBpcyBsaWtlIGEgcmF3CiAgKiBMb2NrQnVmZmVyKCkgY2FsbCwgYnV0IHBlcmZvcm1z IGV4dHJhIHN0ZXBzIG5lZWRlZCBieSBWYWxncmluZC4KICAqCisgKiBOb3RlOiBfYnRfYmF0Y2hf dW5sb2NrIGluIG5idHNlYXJjaC5jIChpbmRleGFtX3V0aWxfdW5sb2NrX2JhdGNoIHdyYXBwZXIK KyAqIGZ1bmN0aW9uKSBoYXMgbWF0Y2hpbmcgVmFsZ3JpbmQgYnVmZmVyIGxvY2sgaW5zdHJ1bWVu dGF0aW9uLgorICoKICAqIE5vdGU6IENhbGxlciBtYXkgbmVlZCB0byBjYWxsIF9idF9jaGVja3Bh Z2UoKSB3aXRoIGJ1ZiB3aGVuIHBpbiBvbiBidWYKICAqIHdhc24ndCBvcmlnaW5hbGx5IGFjcXVp cmVkIGluIF9idF9nZXRidWYoKSBvciBfYnRfcmVsYW5kZ2V0YnVmKCkuCiAgKi8KQEAgLTExMDEs MTMgKzExMDQsMTkgQEAgX2J0X3VubG9ja2J1ZihSZWxhdGlvbiByZWwsIEJ1ZmZlciBidWYpCiAJ ICogQnVmZmVyIGlzIHBpbm5lZCBhbmQgbG9ja2VkLCB3aGljaCBtZWFucyB0aGF0IGl0IGlzIGV4 cGVjdGVkIHRvIGJlCiAJICogZGVmaW5lZCBhbmQgYWRkcmVzc2FibGUuICBDaGVjayB0aGF0IHBy b2FjdGl2ZWx5LgogCSAqLwotCVZBTEdSSU5EX0NIRUNLX01FTV9JU19ERUZJTkVEKEJ1ZmZlckdl dFBhZ2UoYnVmKSwgQkxDS1NaKTsKKyNpZiBkZWZpbmVkKFVTRV9WQUxHUklORCkKKwlQYWdlCQlw YWdlID0gQnVmZmVyR2V0UGFnZShidWYpOworCisJVkFMR1JJTkRfQ0hFQ0tfTUVNX0lTX0RFRklO RUQocGFnZSwgQkxDS1NaKTsKKyNlbmRpZgogCiAJLyogTG9ja0J1ZmZlcigpIGFzc2VydHMgdGhh dCBwaW4gaXMgaGVsZCBieSB0aGlzIGJhY2tlbmQgKi8KIAlMb2NrQnVmZmVyKGJ1ZiwgQlVGRkVS X0xPQ0tfVU5MT0NLKTsKIAorI2lmIGRlZmluZWQoVVNFX1ZBTEdSSU5EKQogCWlmICghUmVsYXRp b25Vc2VzTG9jYWxCdWZmZXJzKHJlbCkpCi0JCVZBTEdSSU5EX01BS0VfTUVNX05PQUNDRVNTKEJ1 ZmZlckdldFBhZ2UoYnVmKSwgQkxDS1NaKTsKKwkJVkFMR1JJTkRfTUFLRV9NRU1fTk9BQ0NFU1Mo cGFnZSwgQkxDS1NaKTsKKyNlbmRpZgogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv YWNjZXNzL25idHJlZS9uYnRyZWFkcGFnZS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9u YnRyZWFkcGFnZS5jCmluZGV4IDQ0OGE1MTQxMi4uMmM2YTNkMjZiIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlYWRwYWdlLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL25idHJlZS9uYnRyZWFkcGFnZS5jCkBAIC0zMiw2ICszMiw3IEBAIHR5cGVkZWYgc3RydWN0 IEJUUmVhZFBhZ2VTdGF0ZQogewogCS8qIElucHV0IHBhcmFtZXRlcnMsIHNldCBieSBfYnRfcmVh ZHBhZ2UgZm9yIF9idF9jaGVja2tleXMgKi8KIAlTY2FuRGlyZWN0aW9uIGRpcjsJCQkvKiBjdXJy ZW50IHNjYW4gZGlyZWN0aW9uICovCisJQmxvY2tOdW1iZXIgY3VycnBhZ2U7CQkvKiBjdXJyZW50 IHBhZ2UgYmVpbmcgcmVhZCAqLwogCU9mZnNldE51bWJlciBtaW5vZmY7CQkvKiBMb3dlc3Qgbm9u LXBpdm90IHR1cGxlJ3Mgb2Zmc2V0ICovCiAJT2Zmc2V0TnVtYmVyIG1heG9mZjsJCS8qIEhpZ2hl c3Qgbm9uLXBpdm90IHR1cGxlJ3Mgb2Zmc2V0ICovCiAJSW5kZXhUdXBsZQlmaW5hbHR1cDsJCS8q IE5lZWRlZCBieSBzY2FucyB3aXRoIGFycmF5IGtleXMgKi8KQEAgLTYzLDE0ICs2NCwxMyBAQCBz dGF0aWMgYm9vbCBfYnRfc2NhbmJlaGluZF9jaGVja2tleXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBT Y2FuRGlyZWN0aW9uIGRpciwKIAkJCQkJCQkJCSBJbmRleFR1cGxlIGZpbmFsdHVwKTsKIHN0YXRp YyBib29sIF9idF9vcHBvZGlyX2NoZWNra2V5cyhJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJl Y3Rpb24gZGlyLAogCQkJCQkJCQkgIEluZGV4VHVwbGUgZmluYWx0dXApOwotc3RhdGljIHZvaWQg X2J0X3NhdmVpdGVtKEJUU2Nhbk9wYXF1ZSBzbywgaW50IGl0ZW1JbmRleCwKLQkJCQkJCSBPZmZz ZXROdW1iZXIgb2ZmbnVtLCBJbmRleFR1cGxlIGl0dXApOwotc3RhdGljIGludAlfYnRfc2V0dXBw b3N0aW5naXRlbXMoQlRTY2FuT3BhcXVlIHNvLCBpbnQgaXRlbUluZGV4LAotCQkJCQkJCQkgIE9m ZnNldE51bWJlciBvZmZudW0sIGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAqaGVhcFRpZCwKLQkJCQkJ CQkJICBJbmRleFR1cGxlIGl0dXApOwotc3RhdGljIGlubGluZSB2b2lkIF9idF9zYXZlcG9zdGlu Z2l0ZW0oQlRTY2FuT3BhcXVlIHNvLCBpbnQgaXRlbUluZGV4LAotCQkJCQkJCQkJICAgT2Zmc2V0 TnVtYmVyIG9mZm51bSwKLQkJCQkJCQkJCSAgIEl0ZW1Qb2ludGVyIGhlYXBUaWQsIGludCB0dXBs ZU9mZnNldCk7CitzdGF0aWMgdm9pZCBfYnRfc2F2ZWl0ZW0oSW5kZXhTY2FuQmF0Y2ggbmV3YmF0 Y2gsIGludCBpdGVtSW5kZXgsIE9mZnNldE51bWJlciBvZmZudW0sCisJCQkJCQkgSW5kZXhUdXBs ZSBpdHVwLCBpbnQgKnR1cGxlT2Zmc2V0KTsKK3N0YXRpYyBpbnQJX2J0X3NldHVwcG9zdGluZ2l0 ZW1zKEluZGV4U2NhbkJhdGNoIG5ld2JhdGNoLCBpbnQgaXRlbUluZGV4LAorCQkJCQkJCQkgIE9m ZnNldE51bWJlciBvZmZudW0sIGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAqdGFibGVUaWQsCisJCQkJ CQkJCSAgSW5kZXhUdXBsZSBpdHVwLCBpbnQgKnR1cGxlT2Zmc2V0KTsKK3N0YXRpYyBpbmxpbmUg dm9pZCBfYnRfc2F2ZXBvc3RpbmdpdGVtKEluZGV4U2NhbkJhdGNoIG5ld2JhdGNoLCBpbnQgaXRl bUluZGV4LCBPZmZzZXROdW1iZXIgb2ZmbnVtLAorCQkJCQkJCQkJICAgSXRlbVBvaW50ZXIgdGFi bGVUaWQsIGludCBiYXNlT2Zmc2V0KTsKIHN0YXRpYyBib29sIF9idF9jaGVja2tleXMoSW5kZXhT Y2FuRGVzYyBzY2FuLCBCVFJlYWRQYWdlU3RhdGUgKnBzdGF0ZSwgYm9vbCBhcnJheUtleXMsCiAJ CQkJCQkgIEluZGV4VHVwbGUgdHVwbGUsIGludCB0dXBuYXR0cyk7CiBzdGF0aWMgYm9vbCBfYnRf Y2hlY2tfY29tcGFyZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLApAQCAt MTExLDE1ICsxMTEsMTUgQEAgc3RhdGljIGJvb2wgX2J0X3ZlcmlmeV9rZXlzX3dpdGhfYXJyYXlr ZXlzKEluZGV4U2NhbkRlc2Mgc2Nhbik7CiAKIAogLyoKLSAqCV9idF9yZWFkcGFnZSgpIC0tIExv YWQgZGF0YSBmcm9tIGN1cnJlbnQgaW5kZXggcGFnZSBpbnRvIHNvLT5jdXJyUG9zCisgKglfYnRf cmVhZHBhZ2UoKSAtLSBMb2FkIGRhdGEgZnJvbSBjdXJyZW50IGluZGV4IHBhZ2UgaW50byBuZXdi YXRjaC4KICAqCi0gKiBDYWxsZXIgbXVzdCBoYXZlIHBpbm5lZCBhbmQgcmVhZC1sb2NrZWQgc28t PmN1cnJQb3MuYnVmOyB0aGUgYnVmZmVyJ3Mgc3RhdGUKLSAqIGlzIG5vdCBjaGFuZ2VkIGhlcmUu ICBBbHNvLCBjdXJyUG9zLm1vcmVMZWZ0IGFuZCBtb3JlUmlnaHQgbXVzdCBiZSB2YWxpZDsKLSAq IHRoZXkgYXJlIHVwZGF0ZWQgYXMgYXBwcm9wcmlhdGUuICBBbGwgb3RoZXIgZmllbGRzIG9mIHNv LT5jdXJyUG9zIGFyZQorICogQ2FsbGVyIG11c3QgaGF2ZSBwaW5uZWQgYW5kIHJlYWQtbG9ja2Vk IG5ld2JhdGNoLmJ1ZjsgdGhlIGJ1ZmZlcidzIHN0YXRlIGlzCisgKiBub3QgY2hhbmdlZCBoZXJl LiAgQWxzbywgbmV3YmF0Y2gncyBtb3JlTGVmdCBhbmQgbW9yZVJpZ2h0IG11c3QgYmUgdmFsaWQ7 CisgKiB0aGV5IGFyZSB1cGRhdGVkIGFzIGFwcHJvcHJpYXRlLiAgQWxsIG90aGVyIGZpZWxkcyBv ZiBuZXdiYXRjaCBhcmUKICAqIGluaXRpYWxpemVkIGZyb20gc2NyYXRjaCBoZXJlLgogICoKICAq IFdlIHNjYW4gdGhlIGN1cnJlbnQgcGFnZSBzdGFydGluZyBhdCBvZmZudW0gYW5kIG1vdmluZyBp biB0aGUgaW5kaWNhdGVkCi0gKiBkaXJlY3Rpb24uICBBbGwgaXRlbXMgbWF0Y2hpbmcgdGhlIHNj YW4ga2V5cyBhcmUgbG9hZGVkIGludG8gY3VyclBvcy5pdGVtcy4KKyAqIGRpcmVjdGlvbi4gIEFs bCBpdGVtcyBtYXRjaGluZyB0aGUgc2NhbiBrZXlzIGFyZSBzYXZlZCBpbiBuZXdiYXRjaC5pdGVt cy4KICAqIG1vcmVMZWZ0IG9yIG1vcmVSaWdodCAoYXMgYXBwcm9wcmlhdGUpIGlzIGNsZWFyZWQg aWYgX2J0X2NoZWNra2V5cyByZXBvcnRzCiAgKiB0aGF0IHRoZXJlIGNhbiBiZSBubyBtb3JlIG1h dGNoaW5nIHR1cGxlcyBpbiB0aGUgY3VycmVudCBzY2FuIGRpcmVjdGlvbgogICogKGNvdWxkIGp1 c3QgYmUgZm9yIHRoZSBjdXJyZW50IHByaW1pdGl2ZSBpbmRleCBzY2FuIHdoZW4gc2NhbiBoYXMg YXJyYXlzKS4KQEAgLTEzMSwxMSArMTMxLDEyIEBAIHN0YXRpYyBib29sIF9idF92ZXJpZnlfa2V5 c193aXRoX2FycmF5a2V5cyhJbmRleFNjYW5EZXNjIHNjYW4pOwogICogUmV0dXJucyB0cnVlIGlm IGFueSBtYXRjaGluZyBpdGVtcyBmb3VuZCBvbiB0aGUgcGFnZSwgZmFsc2UgaWYgbm9uZS4KICAq LwogYm9vbAotX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBk aXIsIE9mZnNldE51bWJlciBvZmZudW0sCi0JCQkgYm9vbCBmaXJzdHBhZ2UpCitfYnRfcmVhZHBh Z2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBuZXdiYXRjaCwgU2NhbkRpcmVj dGlvbiBkaXIsCisJCQkgT2Zmc2V0TnVtYmVyIG9mZm51bSwgYm9vbCBmaXJzdHBhZ2UpCiB7CiAJ UmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKIAlCVFNjYW5PcGFxdWUgc28gPSAo QlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CisJQlRCYXRjaERhdGEgKmJ0bmV3YmF0Y2ggPSBC VEJhdGNoR2V0RGF0YShzY2FuLCBuZXdiYXRjaCk7CiAJUGFnZQkJcGFnZTsKIAlCVFBhZ2VPcGFx dWUgb3BhcXVlOwogCU9mZnNldE51bWJlciBtaW5vZmY7CkBAIC0xNDQsMjMgKzE0NSwyMCBAQCBf YnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0 TnVtYmVyIG9mZm51bSwKIAlib29sCQlhcnJheUtleXMsCiAJCQkJaWdub3JlX2tpbGxlZF90dXBs ZXMgPSBzY2FuLT5pZ25vcmVfa2lsbGVkX3R1cGxlczsKIAlpbnQJCQlpdGVtSW5kZXgsCisJCQkJ dHVwbGVPZmZzZXQgPSAwLAogCQkJCWluZG5hdHRzOwogCiAJLyogc2F2ZSB0aGUgcGFnZS9idWZm ZXIgYmxvY2sgbnVtYmVyLCBhbG9uZyB3aXRoIGl0cyBzaWJsaW5nIGxpbmtzICovCi0JcGFnZSA9 IEJ1ZmZlckdldFBhZ2Uoc28tPmN1cnJQb3MuYnVmKTsKKwlwYWdlID0gQnVmZmVyR2V0UGFnZShi dG5ld2JhdGNoLT5idWYpOwogCW9wYXF1ZSA9IEJUUGFnZUdldE9wYXF1ZShwYWdlKTsKLQlzby0+ Y3VyclBvcy5jdXJyUGFnZSA9IEJ1ZmZlckdldEJsb2NrTnVtYmVyKHNvLT5jdXJyUG9zLmJ1Zik7 Ci0Jc28tPmN1cnJQb3MucHJldlBhZ2UgPSBvcGFxdWUtPmJ0cG9fcHJldjsKLQlzby0+Y3VyclBv cy5uZXh0UGFnZSA9IG9wYXF1ZS0+YnRwb19uZXh0OwotCS8qIGRlbGF5IHNldHRpbmcgc28tPmN1 cnJQb3MubHNuIHVudGlsIF9idF9kcm9wX2xvY2tfYW5kX21heWJlX3BpbiAqLwotCXBzdGF0ZS5k aXIgPSBzby0+Y3VyclBvcy5kaXIgPSBkaXI7Ci0Jc28tPmN1cnJQb3MubmV4dFR1cGxlT2Zmc2V0 ID0gMDsKKwlwc3RhdGUuY3VycnBhZ2UgPSBidG5ld2JhdGNoLT5jdXJyUGFnZSA9IEJ1ZmZlckdl dEJsb2NrTnVtYmVyKGJ0bmV3YmF0Y2gtPmJ1Zik7CisJYnRuZXdiYXRjaC0+cHJldlBhZ2UgPSBv cGFxdWUtPmJ0cG9fcHJldjsKKwlidG5ld2JhdGNoLT5uZXh0UGFnZSA9IG9wYXF1ZS0+YnRwb19u ZXh0OworCXBzdGF0ZS5kaXIgPSBuZXdiYXRjaC0+ZGlyID0gZGlyOwogCiAJLyogZWl0aGVyIG1v cmVSaWdodCBvciBtb3JlTGVmdCBzaG91bGQgYmUgc2V0IG5vdyAobWF5IGJlIHVuc2V0IGxhdGVy KSAqLwotCUFzc2VydChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikgPyBzby0+Y3VyclBvcy5t b3JlUmlnaHQgOgotCQkgICBzby0+Y3VyclBvcy5tb3JlTGVmdCk7CisJQXNzZXJ0KFNjYW5EaXJl Y3Rpb25Jc0ZvcndhcmQoZGlyKSA/IGJ0bmV3YmF0Y2gtPm1vcmVSaWdodCA6IGJ0bmV3YmF0Y2gt Pm1vcmVMZWZ0KTsKIAlBc3NlcnQoIVBfSUdOT1JFKG9wYXF1ZSkpOwotCUFzc2VydChCVFNjYW5Q b3NJc1Bpbm5lZChzby0+Y3VyclBvcykpOwogCUFzc2VydCghc28tPm5lZWRQcmltU2Nhbik7CiAK IAkvKiBpbml0aWFsaXplIGxvY2FsIHZhcmlhYmxlcyAqLwpAQCAtMTg4LDE0ICsxODYsMTQgQEAg X2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNl dE51bWJlciBvZmZudW0sCiAJewogCQkvKiBhbGxvdyBuZXh0L3ByZXYgcGFnZSB0byBiZSByZWFk IGJ5IG90aGVyIHdvcmtlciB3aXRob3V0IGRlbGF5ICovCiAJCWlmIChTY2FuRGlyZWN0aW9uSXNG b3J3YXJkKGRpcikpCi0JCQlfYnRfcGFyYWxsZWxfcmVsZWFzZShzY2FuLCBzby0+Y3VyclBvcy5u ZXh0UGFnZSwKLQkJCQkJCQkJIHNvLT5jdXJyUG9zLmN1cnJQYWdlKTsKKwkJCV9idF9wYXJhbGxl bF9yZWxlYXNlKHNjYW4sIGJ0bmV3YmF0Y2gtPm5leHRQYWdlLAorCQkJCQkJCQkgYnRuZXdiYXRj aC0+Y3VyclBhZ2UpOwogCQllbHNlCi0JCQlfYnRfcGFyYWxsZWxfcmVsZWFzZShzY2FuLCBzby0+ Y3VyclBvcy5wcmV2UGFnZSwKLQkJCQkJCQkJIHNvLT5jdXJyUG9zLmN1cnJQYWdlKTsKKwkJCV9i dF9wYXJhbGxlbF9yZWxlYXNlKHNjYW4sIGJ0bmV3YmF0Y2gtPnByZXZQYWdlLAorCQkJCQkJCQkg YnRuZXdiYXRjaC0+Y3VyclBhZ2UpOwogCX0KIAotCVByZWRpY2F0ZUxvY2tQYWdlKHJlbCwgc28t PmN1cnJQb3MuY3VyclBhZ2UsIHNjYW4tPnhzX3NuYXBzaG90KTsKKwlQcmVkaWNhdGVMb2NrUGFn ZShyZWwsIHBzdGF0ZS5jdXJycGFnZSwgc2Nhbi0+eHNfc25hcHNob3QpOwogCiAJaWYgKFNjYW5E aXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKIAl7CkBAIC0yMTIsMTEgKzIxMCwxMSBAQCBfYnRfcmVh ZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVy IG9mZm51bSwKIAkJCQkJIV9idF9zY2FuYmVoaW5kX2NoZWNra2V5cyhzY2FuLCBkaXIsIHBzdGF0 ZS5maW5hbHR1cCkpCiAJCQkJewogCQkJCQkvKiBTY2hlZHVsZSBhbm90aGVyIHByaW1pdGl2ZSBp bmRleCBzY2FuIGFmdGVyIGFsbCAqLwotCQkJCQlzby0+Y3VyclBvcy5tb3JlUmlnaHQgPSBmYWxz ZTsKKwkJCQkJYnRuZXdiYXRjaC0+bW9yZVJpZ2h0ID0gZmFsc2U7CiAJCQkJCXNvLT5uZWVkUHJp bVNjYW4gPSB0cnVlOwogCQkJCQlpZiAoc2Nhbi0+cGFyYWxsZWxfc2NhbikKIAkJCQkJCV9idF9w YXJhbGxlbF9wcmltc2Nhbl9zY2hlZHVsZShzY2FuLAotCQkJCQkJCQkJCQkJCSAgIHNvLT5jdXJy UG9zLmN1cnJQYWdlKTsKKwkJCQkJCQkJCQkJCQkgICBidG5ld2JhdGNoLT5jdXJyUGFnZSk7CiAJ CQkJCXJldHVybiBmYWxzZTsKIAkJCQl9CiAJCQl9CkBAIC0yODAsMjYgKzI3OCwyNiBAQCBfYnRf cmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVt YmVyIG9mZm51bSwKIAkJCQlpZiAoIUJUcmVlVHVwbGVJc1Bvc3RpbmcoaXR1cCkpCiAJCQkJewog CQkJCQkvKiBSZW1lbWJlciBpdCAqLwotCQkJCQlfYnRfc2F2ZWl0ZW0oc28sIGl0ZW1JbmRleCwg b2ZmbnVtLCBpdHVwKTsKKwkJCQkJX2J0X3NhdmVpdGVtKG5ld2JhdGNoLCBpdGVtSW5kZXgsIG9m Zm51bSwgaXR1cCwgJnR1cGxlT2Zmc2V0KTsKIAkJCQkJaXRlbUluZGV4Kys7CiAJCQkJfQogCQkJ CWVsc2UKIAkJCQl7Ci0JCQkJCWludAkJCXR1cGxlT2Zmc2V0OworCQkJCQlpbnQJCQliYXNlT2Zm c2V0OwogCiAJCQkJCS8qIFNldCB1cCBwb3N0aW5nIGxpc3Qgc3RhdGUgKGFuZCByZW1lbWJlciBm aXJzdCBUSUQpICovCi0JCQkJCXR1cGxlT2Zmc2V0ID0KLQkJCQkJCV9idF9zZXR1cHBvc3Rpbmdp dGVtcyhzbywgaXRlbUluZGV4LCBvZmZudW0sCisJCQkJCWJhc2VPZmZzZXQgPQorCQkJCQkJX2J0 X3NldHVwcG9zdGluZ2l0ZW1zKG5ld2JhdGNoLCBpdGVtSW5kZXgsIG9mZm51bSwKIAkJCQkJCQkJ CQkJICBCVHJlZVR1cGxlR2V0UG9zdGluZ04oaXR1cCwgMCksCi0JCQkJCQkJCQkJCSAgaXR1cCk7 CisJCQkJCQkJCQkJCSAgaXR1cCwgJnR1cGxlT2Zmc2V0KTsKIAkJCQkJaXRlbUluZGV4Kys7CiAK IAkJCQkJLyogUmVtZW1iZXIgYWxsIGxhdGVyIFRJRHMgKG11c3QgYmUgYXQgbGVhc3Qgb25lKSAq LwogCQkJCQlmb3IgKGludCBpID0gMTsgaSA8IEJUcmVlVHVwbGVHZXROUG9zdGluZyhpdHVwKTsg aSsrKQogCQkJCQl7Ci0JCQkJCQlfYnRfc2F2ZXBvc3RpbmdpdGVtKHNvLCBpdGVtSW5kZXgsIG9m Zm51bSwKKwkJCQkJCV9idF9zYXZlcG9zdGluZ2l0ZW0obmV3YmF0Y2gsIGl0ZW1JbmRleCwgb2Zm bnVtLAogCQkJCQkJCQkJCQlCVHJlZVR1cGxlR2V0UG9zdGluZ04oaXR1cCwgaSksCi0JCQkJCQkJ CQkJCXR1cGxlT2Zmc2V0KTsKKwkJCQkJCQkJCQkJYmFzZU9mZnNldCk7CiAJCQkJCQlpdGVtSW5k ZXgrKzsKIAkJCQkJfQogCQkJCX0KQEAgLTMzOSwxMiArMzM3LDExIEBAIF9idF9yZWFkcGFnZShJ bmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVt LAogCQl9CiAKIAkJaWYgKCFwc3RhdGUuY29udGludWVzY2FuKQotCQkJc28tPmN1cnJQb3MubW9y ZVJpZ2h0ID0gZmFsc2U7CisJCQlidG5ld2JhdGNoLT5tb3JlUmlnaHQgPSBmYWxzZTsKIAogCQlB c3NlcnQoaXRlbUluZGV4IDw9IE1heFRJRHNQZXJCVHJlZVBhZ2UpOwotCQlzby0+Y3VyclBvcy5m aXJzdEl0ZW0gPSAwOwotCQlzby0+Y3VyclBvcy5sYXN0SXRlbSA9IGl0ZW1JbmRleCAtIDE7Ci0J CXNvLT5jdXJyUG9zLml0ZW1JbmRleCA9IDA7CisJCW5ld2JhdGNoLT5maXJzdEl0ZW0gPSAwOwor CQluZXdiYXRjaC0+bGFzdEl0ZW0gPSBpdGVtSW5kZXggLSAxOwogCX0KIAllbHNlCiAJewpAQCAt MzYxLDExICszNTgsMTEgQEAgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRp cmVjdGlvbiBkaXIsIE9mZnNldE51bWJlciBvZmZudW0sCiAJCQkJCSFfYnRfc2NhbmJlaGluZF9j aGVja2tleXMoc2NhbiwgZGlyLCBwc3RhdGUuZmluYWx0dXApKQogCQkJCXsKIAkJCQkJLyogU2No ZWR1bGUgYW5vdGhlciBwcmltaXRpdmUgaW5kZXggc2NhbiBhZnRlciBhbGwgKi8KLQkJCQkJc28t PmN1cnJQb3MubW9yZUxlZnQgPSBmYWxzZTsKKwkJCQkJYnRuZXdiYXRjaC0+bW9yZUxlZnQgPSBm YWxzZTsKIAkJCQkJc28tPm5lZWRQcmltU2NhbiA9IHRydWU7CiAJCQkJCWlmIChzY2FuLT5wYXJh bGxlbF9zY2FuKQogCQkJCQkJX2J0X3BhcmFsbGVsX3ByaW1zY2FuX3NjaGVkdWxlKHNjYW4sCi0J CQkJCQkJCQkJCQkJICAgc28tPmN1cnJQb3MuY3VyclBhZ2UpOworCQkJCQkJCQkJCQkJCSAgIGJ0 bmV3YmF0Y2gtPmN1cnJQYWdlKTsKIAkJCQkJcmV0dXJuIGZhbHNlOwogCQkJCX0KIAkJCX0KQEAg LTQ2NiwyNyArNDYzLDI3IEBAIF9idF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5E aXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtLAogCQkJCXsKIAkJCQkJLyogUmVtZW1i ZXIgaXQgKi8KIAkJCQkJaXRlbUluZGV4LS07Ci0JCQkJCV9idF9zYXZlaXRlbShzbywgaXRlbUlu ZGV4LCBvZmZudW0sIGl0dXApOworCQkJCQlfYnRfc2F2ZWl0ZW0obmV3YmF0Y2gsIGl0ZW1JbmRl eCwgb2ZmbnVtLCBpdHVwLCAmdHVwbGVPZmZzZXQpOwogCQkJCX0KIAkJCQllbHNlCiAJCQkJewog CQkJCQl1aW50MTYJCW5pdGVtcyA9IEJUcmVlVHVwbGVHZXROUG9zdGluZyhpdHVwKTsKLQkJCQkJ aW50CQkJdHVwbGVPZmZzZXQ7CisJCQkJCWludAkJCWJhc2VPZmZzZXQ7CiAKIAkJCQkJLyogU2V0 IHVwIHBvc3RpbmcgbGlzdCBzdGF0ZSAoYW5kIHJlbWVtYmVyIGxhc3QgVElEKSAqLwogCQkJCQlp dGVtSW5kZXgtLTsKLQkJCQkJdHVwbGVPZmZzZXQgPQotCQkJCQkJX2J0X3NldHVwcG9zdGluZ2l0 ZW1zKHNvLCBpdGVtSW5kZXgsIG9mZm51bSwKKwkJCQkJYmFzZU9mZnNldCA9CisJCQkJCQlfYnRf c2V0dXBwb3N0aW5naXRlbXMobmV3YmF0Y2gsIGl0ZW1JbmRleCwgb2ZmbnVtLAogCQkJCQkJCQkJ CQkgIEJUcmVlVHVwbGVHZXRQb3N0aW5nTihpdHVwLCBuaXRlbXMgLSAxKSwKLQkJCQkJCQkJCQkJ ICBpdHVwKTsKKwkJCQkJCQkJCQkJICBpdHVwLCAmdHVwbGVPZmZzZXQpOwogCiAJCQkJCS8qIFJl bWVtYmVyIGFsbCBwcmlvciBUSURzIChtdXN0IGJlIGF0IGxlYXN0IG9uZSkgKi8KIAkJCQkJZm9y IChpbnQgaSA9IG5pdGVtcyAtIDI7IGkgPj0gMDsgaS0tKQogCQkJCQl7CiAJCQkJCQlpdGVtSW5k ZXgtLTsKLQkJCQkJCV9idF9zYXZlcG9zdGluZ2l0ZW0oc28sIGl0ZW1JbmRleCwgb2ZmbnVtLAor CQkJCQkJX2J0X3NhdmVwb3N0aW5naXRlbShuZXdiYXRjaCwgaXRlbUluZGV4LCBvZmZudW0sCiAJ CQkJCQkJCQkJCUJUcmVlVHVwbGVHZXRQb3N0aW5nTihpdHVwLCBpKSwKLQkJCQkJCQkJCQkJdHVw bGVPZmZzZXQpOworCQkJCQkJCQkJCQliYXNlT2Zmc2V0KTsKIAkJCQkJfQogCQkJCX0KIAkJCX0K QEAgLTUwMiwxMiArNDk5LDExIEBAIF9idF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNj YW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtLAogCQkgKiBiZSBmb3VuZCB0aGVy ZQogCQkgKi8KIAkJaWYgKCFwc3RhdGUuY29udGludWVzY2FuKQotCQkJc28tPmN1cnJQb3MubW9y ZUxlZnQgPSBmYWxzZTsKKwkJCWJ0bmV3YmF0Y2gtPm1vcmVMZWZ0ID0gZmFsc2U7CiAKIAkJQXNz ZXJ0KGl0ZW1JbmRleCA+PSAwKTsKLQkJc28tPmN1cnJQb3MuZmlyc3RJdGVtID0gaXRlbUluZGV4 OwotCQlzby0+Y3VyclBvcy5sYXN0SXRlbSA9IE1heFRJRHNQZXJCVHJlZVBhZ2UgLSAxOwotCQlz by0+Y3VyclBvcy5pdGVtSW5kZXggPSBNYXhUSURzUGVyQlRyZWVQYWdlIC0gMTsKKwkJbmV3YmF0 Y2gtPmZpcnN0SXRlbSA9IGl0ZW1JbmRleDsKKwkJbmV3YmF0Y2gtPmxhc3RJdGVtID0gTWF4VElE c1BlckJUcmVlUGFnZSAtIDE7CiAJfQogCiAJLyoKQEAgLTUyNCw3ICs1MjAsNyBAQCBfYnRfcmVh ZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVy IG9mZm51bSwKIAkgKi8KIAlBc3NlcnQoIXBzdGF0ZS5mb3JjZW5vbnJlcXVpcmVkKTsKIAotCXJl dHVybiAoc28tPmN1cnJQb3MuZmlyc3RJdGVtIDw9IHNvLT5jdXJyUG9zLmxhc3RJdGVtKTsKKwly ZXR1cm4gKG5ld2JhdGNoLT5maXJzdEl0ZW0gPD0gbmV3YmF0Y2gtPmxhc3RJdGVtKTsKIH0KIAog LyoKQEAgLTEwMjcsOTAgKzEwMjMsOTEgQEAgX2J0X29wcG9kaXJfY2hlY2trZXlzKEluZGV4U2Nh bkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsCiAJcmV0dXJuIHRydWU7CiB9CiAKLS8qIFNh dmUgYW4gaW5kZXggaXRlbSBpbnRvIHNvLT5jdXJyUG9zLml0ZW1zW2l0ZW1JbmRleF0gKi8KKy8q IFNhdmUgYW4gaW5kZXggaXRlbSBpbnRvIG5ld2JhdGNoLml0ZW1zW2l0ZW1JbmRleF0gKi8KIHN0 YXRpYyB2b2lkCi1fYnRfc2F2ZWl0ZW0oQlRTY2FuT3BhcXVlIHNvLCBpbnQgaXRlbUluZGV4LAot CQkJIE9mZnNldE51bWJlciBvZmZudW0sIEluZGV4VHVwbGUgaXR1cCkKK19idF9zYXZlaXRlbShJ bmRleFNjYW5CYXRjaCBuZXdiYXRjaCwgaW50IGl0ZW1JbmRleCwgT2Zmc2V0TnVtYmVyIG9mZm51 bSwKKwkJCSBJbmRleFR1cGxlIGl0dXAsIGludCAqdHVwbGVPZmZzZXQpCiB7Ci0JQlRTY2FuUG9z SXRlbSAqY3Vyckl0ZW0gPSAmc28tPmN1cnJQb3MuaXRlbXNbaXRlbUluZGV4XTsKLQogCUFzc2Vy dCghQlRyZWVUdXBsZUlzUGl2b3QoaXR1cCkgJiYgIUJUcmVlVHVwbGVJc1Bvc3RpbmcoaXR1cCkp OwogCi0JY3Vyckl0ZW0tPmhlYXBUaWQgPSBpdHVwLT50X3RpZDsKLQljdXJySXRlbS0+aW5kZXhP ZmZzZXQgPSBvZmZudW07Ci0JaWYgKHNvLT5jdXJyVHVwbGVzKQorCW5ld2JhdGNoLT5pdGVtc1tp dGVtSW5kZXhdLnRhYmxlVGlkID0gaXR1cC0+dF90aWQ7CisJbmV3YmF0Y2gtPml0ZW1zW2l0ZW1J bmRleF0uaW5kZXhPZmZzZXQgPSBvZmZudW07CisKKwlpZiAobmV3YmF0Y2gtPmN1cnJUdXBsZXMp CiAJewogCQlTaXplCQlpdHVwc3ogPSBJbmRleFR1cGxlU2l6ZShpdHVwKTsKIAotCQljdXJySXRl bS0+dHVwbGVPZmZzZXQgPSBzby0+Y3VyclBvcy5uZXh0VHVwbGVPZmZzZXQ7Ci0JCW1lbWNweShz by0+Y3VyclR1cGxlcyArIHNvLT5jdXJyUG9zLm5leHRUdXBsZU9mZnNldCwgaXR1cCwgaXR1cHN6 KTsKLQkJc28tPmN1cnJQb3MubmV4dFR1cGxlT2Zmc2V0ICs9IE1BWEFMSUdOKGl0dXBzeik7CisJ CW5ld2JhdGNoLT5pdGVtc1tpdGVtSW5kZXhdLnR1cGxlT2Zmc2V0ID0gKnR1cGxlT2Zmc2V0Owor CQltZW1jcHkobmV3YmF0Y2gtPmN1cnJUdXBsZXMgKyAqdHVwbGVPZmZzZXQsIGl0dXAsIGl0dXBz eik7CisJCSp0dXBsZU9mZnNldCArPSBNQVhBTElHTihpdHVwc3opOwogCX0KIH0KIAogLyoKICAq IFNldHVwIHN0YXRlIHRvIHNhdmUgVElEcy9pdGVtcyBmcm9tIGEgc2luZ2xlIHBvc3RpbmcgbGlz dCB0dXBsZS4KICAqCi0gKiBTYXZlcyBhbiBpbmRleCBpdGVtIGludG8gc28tPmN1cnJQb3MuaXRl bXNbaXRlbUluZGV4XSBmb3IgVElEIHRoYXQgaXMKLSAqIHJldHVybmVkIHRvIHNjYW4gZmlyc3Qu ICBTZWNvbmQgb3Igc3Vic2VxdWVudCBUSURzIGZvciBwb3N0aW5nIGxpc3Qgc2hvdWxkCi0gKiBi ZSBzYXZlZCBieSBjYWxsaW5nIF9idF9zYXZlcG9zdGluZ2l0ZW0oKS4KKyAqIFNhdmVzIGFuIGlu ZGV4IGl0ZW0gaW50byBuZXdiYXRjaC5pdGVtc1tpdGVtSW5kZXhdIGZvciBUSUQgdGhhdCBpcyBy ZXR1cm5lZAorICogdG8gc2NhbiBmaXJzdC4gIFNlY29uZCBvciBzdWJzZXF1ZW50IFRJRHMgZm9y IHBvc3RpbmcgbGlzdCBzaG91bGQgYmUgc2F2ZWQKKyAqIGJ5IGNhbGxpbmcgX2J0X3NhdmVwb3N0 aW5naXRlbSgpLgogICoKLSAqIFJldHVybnMgYW4gb2Zmc2V0IGludG8gdHVwbGUgc3RvcmFnZSBz cGFjZSB0aGF0IG1haW4gdHVwbGUgaXMgc3RvcmVkIGF0IGlmCi0gKiBuZWVkZWQuCisgKiBSZXR1 cm5zIGJhc2VPZmZzZXQsIGFuIG9mZnNldCBpbnRvIHR1cGxlIHN0b3JhZ2Ugc3BhY2UgdGhhdCBt YWluIHR1cGxlIGlzCisgKiBzdG9yZWQgYXQgaWYgbmVlZGVkLgogICovCiBzdGF0aWMgaW50Ci1f YnRfc2V0dXBwb3N0aW5naXRlbXMoQlRTY2FuT3BhcXVlIHNvLCBpbnQgaXRlbUluZGV4LCBPZmZz ZXROdW1iZXIgb2ZmbnVtLAotCQkJCQkgIGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAqaGVhcFRpZCwg SW5kZXhUdXBsZSBpdHVwKQorX2J0X3NldHVwcG9zdGluZ2l0ZW1zKEluZGV4U2NhbkJhdGNoIG5l d2JhdGNoLCBpbnQgaXRlbUluZGV4LAorCQkJCQkgIE9mZnNldE51bWJlciBvZmZudW0sIGNvbnN0 IEl0ZW1Qb2ludGVyRGF0YSAqdGFibGVUaWQsCisJCQkJCSAgSW5kZXhUdXBsZSBpdHVwLCBpbnQg KnR1cGxlT2Zmc2V0KQogewotCUJUU2NhblBvc0l0ZW0gKmN1cnJJdGVtID0gJnNvLT5jdXJyUG9z Lml0ZW1zW2l0ZW1JbmRleF07CisJQmF0Y2hNYXRjaGluZ0l0ZW0gKml0ZW0gPSAmbmV3YmF0Y2gt Pml0ZW1zW2l0ZW1JbmRleF07CiAKIAlBc3NlcnQoQlRyZWVUdXBsZUlzUG9zdGluZyhpdHVwKSk7 CiAKLQljdXJySXRlbS0+aGVhcFRpZCA9ICpoZWFwVGlkOwotCWN1cnJJdGVtLT5pbmRleE9mZnNl dCA9IG9mZm51bTsKLQlpZiAoc28tPmN1cnJUdXBsZXMpCisJaXRlbS0+dGFibGVUaWQgPSAqdGFi bGVUaWQ7CisJaXRlbS0+aW5kZXhPZmZzZXQgPSBvZmZudW07CisKKwlpZiAobmV3YmF0Y2gtPmN1 cnJUdXBsZXMpCiAJewogCQkvKiBTYXZlIGJhc2UgSW5kZXhUdXBsZSAodHJ1bmNhdGUgcG9zdGlu ZyBsaXN0KSAqLwogCQlJbmRleFR1cGxlCWJhc2U7CiAJCVNpemUJCWl0dXBzeiA9IEJUcmVlVHVw bGVHZXRQb3N0aW5nT2Zmc2V0KGl0dXApOwogCiAJCWl0dXBzeiA9IE1BWEFMSUdOKGl0dXBzeik7 Ci0JCWN1cnJJdGVtLT50dXBsZU9mZnNldCA9IHNvLT5jdXJyUG9zLm5leHRUdXBsZU9mZnNldDsK LQkJYmFzZSA9IChJbmRleFR1cGxlKSAoc28tPmN1cnJUdXBsZXMgKyBzby0+Y3VyclBvcy5uZXh0 VHVwbGVPZmZzZXQpOworCQlpdGVtLT50dXBsZU9mZnNldCA9ICp0dXBsZU9mZnNldDsKKwkJYmFz ZSA9IChJbmRleFR1cGxlKSAobmV3YmF0Y2gtPmN1cnJUdXBsZXMgKyAqdHVwbGVPZmZzZXQpOwog CQltZW1jcHkoYmFzZSwgaXR1cCwgaXR1cHN6KTsKIAkJLyogRGVmZW5zaXZlbHkgcmVkdWNlIHdv cmsgYXJlYSBpbmRleCB0dXBsZSBoZWFkZXIgc2l6ZSAqLwogCQliYXNlLT50X2luZm8gJj0gfklO REVYX1NJWkVfTUFTSzsKIAkJYmFzZS0+dF9pbmZvIHw9IGl0dXBzejsKLQkJc28tPmN1cnJQb3Mu bmV4dFR1cGxlT2Zmc2V0ICs9IGl0dXBzejsKKwkJKnR1cGxlT2Zmc2V0ICs9IGl0dXBzejsKIAot CQlyZXR1cm4gY3Vyckl0ZW0tPnR1cGxlT2Zmc2V0OworCQlyZXR1cm4gaXRlbS0+dHVwbGVPZmZz ZXQ7CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKIC8qCi0gKiBTYXZlIGFuIGluZGV4IGl0ZW0gaW50 byBzby0+Y3VyclBvcy5pdGVtc1tpdGVtSW5kZXhdIGZvciBjdXJyZW50IHBvc3RpbmcKKyAqIFNh dmUgYW4gaW5kZXggaXRlbSBpbnRvIG5ld2JhdGNoLml0ZW1zW2l0ZW1JbmRleF0gZm9yIGN1cnJl bnQgcG9zdGluZwogICogdHVwbGUuCiAgKgogICogQXNzdW1lcyB0aGF0IF9idF9zZXR1cHBvc3Rp bmdpdGVtcygpIGhhcyBhbHJlYWR5IGJlZW4gY2FsbGVkIGZvciBjdXJyZW50Ci0gKiBwb3N0aW5n IGxpc3QgdHVwbGUuICBDYWxsZXIgcGFzc2VzIGl0cyByZXR1cm4gdmFsdWUgYXMgdHVwbGVPZmZz ZXQuCisgKiBwb3N0aW5nIGxpc3QgdHVwbGUuICBDYWxsZXIgcGFzc2VzIGl0cyByZXR1cm4gdmFs dWUgYXMgYmFzZU9mZnNldC4KICAqLwogc3RhdGljIGlubGluZSB2b2lkCi1fYnRfc2F2ZXBvc3Rp bmdpdGVtKEJUU2Nhbk9wYXF1ZSBzbywgaW50IGl0ZW1JbmRleCwgT2Zmc2V0TnVtYmVyIG9mZm51 bSwKLQkJCQkJSXRlbVBvaW50ZXIgaGVhcFRpZCwgaW50IHR1cGxlT2Zmc2V0KQorX2J0X3NhdmVw b3N0aW5naXRlbShJbmRleFNjYW5CYXRjaCBuZXdiYXRjaCwgaW50IGl0ZW1JbmRleCwgT2Zmc2V0 TnVtYmVyIG9mZm51bSwKKwkJCQkJSXRlbVBvaW50ZXIgdGFibGVUaWQsIGludCBiYXNlT2Zmc2V0 KQogewotCUJUU2NhblBvc0l0ZW0gKmN1cnJJdGVtID0gJnNvLT5jdXJyUG9zLml0ZW1zW2l0ZW1J bmRleF07CisJQmF0Y2hNYXRjaGluZ0l0ZW0gKml0ZW0gPSAmbmV3YmF0Y2gtPml0ZW1zW2l0ZW1J bmRleF07CiAKLQljdXJySXRlbS0+aGVhcFRpZCA9ICpoZWFwVGlkOwotCWN1cnJJdGVtLT5pbmRl eE9mZnNldCA9IG9mZm51bTsKKwlpdGVtLT50YWJsZVRpZCA9ICp0YWJsZVRpZDsKKwlpdGVtLT5p bmRleE9mZnNldCA9IG9mZm51bTsKIAogCS8qCiAJICogSGF2ZSBpbmRleC1vbmx5IHNjYW5zIHJl dHVybiB0aGUgc2FtZSBiYXNlIEluZGV4VHVwbGUgZm9yIGV2ZXJ5IFRJRAogCSAqIHRoYXQgb3Jp Z2luYXRlcyBmcm9tIHRoZSBzYW1lIHBvc3RpbmcgbGlzdAogCSAqLwotCWlmIChzby0+Y3VyclR1 cGxlcykKLQkJY3Vyckl0ZW0tPnR1cGxlT2Zmc2V0ID0gdHVwbGVPZmZzZXQ7CisJaWYgKG5ld2Jh dGNoLT5jdXJyVHVwbGVzKQorCQlpdGVtLT50dXBsZU9mZnNldCA9IGJhc2VPZmZzZXQ7CiB9CiAK ICNkZWZpbmUgTE9PS19BSEVBRF9SRVFVSVJFRF9SRUNIRUNLUyAJMwpAQCAtMjgyMSwxNCArMjgx OCwxNSBAQCBuZXdfcHJpbV9zY2FuOgogCSAqCiAJICogTm90ZTogV2UgbWFrZSBhIHNvZnQgYXNz dW1wdGlvbiB0aGF0IHRoZSBjdXJyZW50IHNjYW4gZGlyZWN0aW9uIHdpbGwKIAkgKiBhbHNvIGJl IHVzZWQgd2l0aGluIF9idF9uZXh0LCB3aGVuIGl0IGlzIGFza2VkIHRvIHN0ZXAgb2ZmIHRoaXMg cGFnZS4KLQkgKiBJdCBpcyB1cCB0byBfYnRfbmV4dCB0byBjYW5jZWwgdGhpcyBzY2hlZHVsZWQg cHJpbWl0aXZlIGluZGV4IHNjYW4KLQkgKiB3aGVuZXZlciBpdCBzdGVwcyB0byBhIHBhZ2UgaW4g dGhlIGRpcmVjdGlvbiBvcHBvc2l0ZSBjdXJyUG9zLmRpci4KKwkgKiBUaGUgc2NhbiBkaXJlY3Rp b24gbWlnaHQgYmUgcmV2ZXJzZWQgZHVyaW5nIHRoZSBuZXh0IGFtZ2V0YmF0Y2ggY2FsbCwKKwkg KiBidXQgbm90IGJlZm9yZSBhIGNhbGwgdG8gYnRwb3NyZXNldCB0aGF0IHJlc2V0cyB0aGUgYXJy YXkga2V5cyB0byB0aGUKKwkgKiBmaXJzdCBwb3NpdGlvbnMvZWxlbWVudHMgdXNlZCB3aGVuIHNj YW5uaW5nIGluIHRoaXMgb3RoZXIgZGlyZWN0aW9uLgogCSAqLwogCXBzdGF0ZS0+Y29udGludWVz Y2FuID0gZmFsc2U7CS8qIFRlbGwgX2J0X3JlYWRwYWdlIHdlJ3JlIGRvbmUuLi4gKi8KIAlzby0+ bmVlZFByaW1TY2FuID0gdHJ1ZTsJLyogLi4uYnV0IGNhbGwgX2J0X2ZpcnN0IGFnYWluICovCiAK IAlpZiAoc2Nhbi0+cGFyYWxsZWxfc2NhbikKLQkJX2J0X3BhcmFsbGVsX3ByaW1zY2FuX3NjaGVk dWxlKHNjYW4sIHNvLT5jdXJyUG9zLmN1cnJQYWdlKTsKKwkJX2J0X3BhcmFsbGVsX3ByaW1zY2Fu X3NjaGVkdWxlKHNjYW4sIHBzdGF0ZS0+Y3VycnBhZ2UpOwogCiAJLyogQ2FsbGVyJ3MgdHVwbGUg ZG9lc24ndCBtYXRjaCB0aGUgbmV3IHF1YWwgKi8KIAlyZXR1cm4gZmFsc2U7CkBAIC0yODQxLDkg KzI4MzksOCBAQCBlbmRfdG9wbGV2ZWxfc2NhbjoKIAkgKiBUaGlzIGVuZHMgdGhlIGVudGlyZSB0 b3AtbGV2ZWwgc2NhbiBpbiB0aGUgY3VycmVudCBzY2FuIGRpcmVjdGlvbi4KIAkgKgogCSAqIE5v dGU6IFRoZSBzY2FuJ3MgYXJyYXlzIChpbmNsdWRpbmcgYW55IG5vbi1yZXF1aXJlZCBhcnJheXMp IGFyZSBub3cgaW4KLQkgKiB0aGVpciBmaW5hbCBwb3NpdGlvbnMgZm9yIHRoZSBjdXJyZW50IHNj YW4gZGlyZWN0aW9uLiAgSWYgdGhlIHNjYW4KLQkgKiBkaXJlY3Rpb24gaGFwcGVucyB0byBjaGFu Z2UsIHRoZW4gdGhlIGFycmF5cyB3aWxsIGFscmVhZHkgYmUgaW4gdGhlaXIKLQkgKiBmaXJzdCBw b3NpdGlvbnMgZm9yIHdoYXQgd2lsbCB0aGVuIGJlIHRoZSBjdXJyZW50IHNjYW4gZGlyZWN0aW9u LgorCSAqIHRoZWlyIGZpbmFsIHBvc2l0aW9ucyBmb3IgdGhlIGN1cnJlbnQgc2NhbiBkaXJlY3Rp b24uICBUaGlzIGlzIGp1c3QKKwkgKiBkZWZlbnNpdmUuCiAJICovCiAJcHN0YXRlLT5jb250aW51 ZXNjYW4gPSBmYWxzZTsJLyogVGVsbCBfYnRfcmVhZHBhZ2Ugd2UncmUgZG9uZS4uLiAqLwogCXNv LT5uZWVkUHJpbVNjYW4gPSBmYWxzZTsJLyogLi4uYW5kIGRvbid0IGNhbGwgX2J0X2ZpcnN0IGFn YWluICovCkBAIC0yOTEwLDE3ICsyOTA3LDkgQEAgX2J0X2FkdmFuY2VfYXJyYXlfa2V5c19pbmNy ZW1lbnQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwKIAkvKgogCSAqIFRo ZSBhcnJheSBrZXlzIGFyZSBub3cgZXhoYXVzdGVkLgogCSAqCi0JICogUmVzdG9yZSB0aGUgYXJy YXkga2V5cyB0byB0aGUgc3RhdGUgdGhleSB3ZXJlIGluIGltbWVkaWF0ZWx5IGJlZm9yZSB3ZQot CSAqIHdlcmUgY2FsbGVkLiAgVGhpcyBlbnN1cmVzIHRoYXQgdGhlIGFycmF5cyBvbmx5IGV2ZXIg cmF0Y2hldCBpbiB0aGUKLQkgKiBjdXJyZW50IHNjYW4gZGlyZWN0aW9uLgotCSAqCi0JICogV2l0 aG91dCB0aGlzLCBzY2FucyBjb3VsZCBvdmVybG9vayBtYXRjaGluZyB0dXBsZXMgd2hlbiB0aGUg c2NhbgotCSAqIGRpcmVjdGlvbiBnZXRzIHJldmVyc2VkIGp1c3QgYmVmb3JlIGJ0Z2V0dHVwbGUg cnVucyBvdXQgb2YgaXRlbXMgdG8KLQkgKiByZXR1cm4sIGJ1dCBqdXN0IGFmdGVyIF9idF9yZWFk cGFnZSBwcmVwYXJlcyBhbGwgdGhlIGl0ZW1zIGZyb20gdGhlCi0JICogc2NhbidzIGZpbmFsIHBh Z2UgaW4gc28tPmN1cnJQb3MuICBXaGVuIHdlJ3JlIG9uIHRoZSBmaW5hbCBwYWdlIGl0IGlzCi0J ICogdHlwaWNhbCBmb3Igc28tPmN1cnJQb3MgdG8gZ2V0IGludmFsaWRhdGVkIG9uY2UgYnRnZXR0 dXBsZSBmaW5hbGx5Ci0JICogcmV0dXJucyBmYWxzZSwgd2hpY2gnbGwgZWZmZWN0aXZlbHkgaW52 YWxpZGF0ZSB0aGUgc2NhbidzIGFycmF5IGtleXMuCi0JICogVGhhdCBoYXNuJ3QgaGFwcGVuZWQg eWV0LCB0aG91Z2ggLS0gYW5kIGluIGdlbmVyYWwgaXQgbWF5IG5ldmVyIGhhcHBlbi4KKwkgKiBE ZWZlbnNpdmVseSByZXN0b3JlIHRoZSBhcnJheSBrZXlzIHRvIHRoZSBwb3NpdGlvbnMgdGhleSB3 ZXJlIGluCisJICogaW1tZWRpYXRlbHkgYmVmb3JlIHdlIHdlcmUgY2FsbGVkIChpLmUuIHRvIHRo ZWlyIGZpbmFsIHBvc2l0aW9ucyBmb3IKKwkgKiB0aGUgY3VycmVudCBzY2FuIGRpcmVjdGlvbiku CiAJICovCiAJX2J0X3N0YXJ0X2FycmF5X2tleXMoc2NhbiwgLWRpcik7CiAKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv bmJ0cmVlL25idHJlZS5jCmluZGV4IDNkZjJjNzUyZS4uNTkzOWU3MjhmIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9uYnRyZWUvbmJ0cmVlLmMKQEAgLTEyOCw2ICsxMjgsNyBAQCBidGhhbmRsZXIoUEdfRlVOQ1RJ T05fQVJHUykKIAkJLmFtY29uc2lzdGVudGVxdWFsaXR5ID0gdHJ1ZSwKIAkJLmFtY29uc2lzdGVu dG9yZGVyaW5nID0gdHJ1ZSwKIAkJLmFtY2FuYmFja3dhcmQgPSB0cnVlLAorCQkuYW1jYW5tYXJr cG9zID0gdHJ1ZSwKIAkJLmFtY2FudW5pcXVlID0gdHJ1ZSwKIAkJLmFtY2FubXVsdGljb2wgPSB0 cnVlLAogCQkuYW1vcHRpb25hbGtleSA9IHRydWUsCkBAIC0xNjEsMTEgKzE2MiwxMyBAQCBidGhh bmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAkJLmFtYWRqdXN0bWVtYmVycyA9IGJ0YWRqdXN0bWVt YmVycywKIAkJLmFtYmVnaW5zY2FuID0gYnRiZWdpbnNjYW4sCiAJCS5hbXJlc2NhbiA9IGJ0cmVz Y2FuLAotCQkuYW1nZXR0dXBsZSA9IGJ0Z2V0dHVwbGUsCisJCS5hbWdldHR1cGxlID0gTlVMTCwK KwkJLmFtZ2V0YmF0Y2ggPSBidGdldGJhdGNoLAorCQkuYW11bmd1YXJkYmF0Y2ggPSBidHVuZ3Vh cmRiYXRjaCwKKwkJLmFta2lsbGl0ZW1zYmF0Y2ggPSBidGtpbGxpdGVtc2JhdGNoLAogCQkuYW1n ZXRiaXRtYXAgPSBidGdldGJpdG1hcCwKIAkJLmFtZW5kc2NhbiA9IGJ0ZW5kc2NhbiwKLQkJLmFt bWFya3BvcyA9IGJ0bWFya3BvcywKLQkJLmFtcmVzdHJwb3MgPSBidHJlc3RycG9zLAorCQkuYW1w b3NyZXNldCA9IGJ0cG9zcmVzZXQsCiAJCS5hbWVzdGltYXRlcGFyYWxsZWxzY2FuID0gYnRlc3Rp bWF0ZXBhcmFsbGVsc2NhbiwKIAkJLmFtaW5pdHBhcmFsbGVsc2NhbiA9IGJ0aW5pdHBhcmFsbGVs c2NhbiwKIAkJLmFtcGFyYWxsZWxyZXNjYW4gPSBidHBhcmFsbGVscmVzY2FuLApAQCAtMjI0LDE4 ICsyMjcsMTggQEAgYnRpbnNlcnQoUmVsYXRpb24gcmVsLCBEYXR1bSAqdmFsdWVzLCBib29sICpp c251bGwsCiB9CiAKIC8qCi0gKglidGdldHR1cGxlKCkgLS0gR2V0IHRoZSBuZXh0IHR1cGxlIGlu IHRoZSBzY2FuLgorICoJYnRnZXRiYXRjaCgpIC0tIEdldCB0aGUgZmlyc3Qgb3IgbmV4dCBiYXRj aCBvZiB0dXBsZXMgaW4gdGhlIHNjYW4KICAqLwotYm9vbAotYnRnZXR0dXBsZShJbmRleFNjYW5E ZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQorSW5kZXhTY2FuQmF0Y2gKK2J0Z2V0YmF0Y2go SW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBwcmlvcmJhdGNoLCBTY2FuRGlyZWN0 aW9uIGRpcikKIHsKIAlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFx dWU7Ci0JYm9vbAkJcmVzOworCUluZGV4U2NhbkJhdGNoIGJhdGNoID0gcHJpb3JiYXRjaDsKIAog CUFzc2VydChzY2FuLT5oZWFwUmVsYXRpb24gIT0gTlVMTCk7CiAKIAkvKiBidHJlZSBpbmRleGVz IGFyZSBuZXZlciBsb3NzeSAqLwotCXNjYW4tPnhzX3JlY2hlY2sgPSBmYWxzZTsKKwlBc3NlcnQo IXNjYW4tPnhzX3JlY2hlY2spOwogCiAJLyogRWFjaCBsb29wIGl0ZXJhdGlvbiBwZXJmb3JtcyBh bm90aGVyIHByaW1pdGl2ZSBpbmRleCBzY2FuICovCiAJZG8KQEAgLTI0Myw0NSArMjQ2LDIwIEBA IGJ0Z2V0dHVwbGUoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAkJLyoK IAkJICogSWYgd2UndmUgYWxyZWFkeSBpbml0aWFsaXplZCB0aGlzIHNjYW4sIHdlIGNhbiBqdXN0 IGFkdmFuY2UgaXQgaW4KIAkJICogdGhlIGFwcHJvcHJpYXRlIGRpcmVjdGlvbi4gIElmIHdlIGhh dmVuJ3QgZG9uZSBzbyB5ZXQsIHdlIGNhbGwKLQkJICogX2J0X2ZpcnN0KCkgdG8gZ2V0IHRoZSBm aXJzdCBpdGVtIGluIHRoZSBzY2FuLgorCQkgKiBfYnRfZmlyc3QoKSB0byBnZXQgdGhlIGZpcnN0 IGJhdGNoIGluIHRoZSBzY2FuLgogCQkgKi8KLQkJaWYgKCFCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5j dXJyUG9zKSkKLQkJCXJlcyA9IF9idF9maXJzdChzY2FuLCBkaXIpOworCQlpZiAoYmF0Y2ggPT0g TlVMTCkKKwkJCWJhdGNoID0gX2J0X2ZpcnN0KHNjYW4sIGRpcik7CiAJCWVsc2UKLQkJewotCQkJ LyoKLQkJCSAqIENoZWNrIHRvIHNlZSBpZiB3ZSBzaG91bGQga2lsbCB0aGUgcHJldmlvdXNseS1m ZXRjaGVkIHR1cGxlLgotCQkJICovCi0JCQlpZiAoc2Nhbi0+a2lsbF9wcmlvcl90dXBsZSkKLQkJ CXsKLQkJCQkvKgotCQkJCSAqIFllcywgcmVtZW1iZXIgaXQgZm9yIGxhdGVyLiAoV2UnbGwgZGVh bCB3aXRoIGFsbCBzdWNoCi0JCQkJICogdHVwbGVzIGF0IG9uY2UgcmlnaHQgYmVmb3JlIGxlYXZp bmcgdGhlIGluZGV4IHBhZ2UuKSAgVGhlCi0JCQkJICogdGVzdCBmb3IgbnVtS2lsbGVkIG92ZXJy dW4gaXMgbm90IGp1c3QgcGFyYW5vaWE6IGlmIHRoZQotCQkJCSAqIGNhbGxlciByZXZlcnNlcyBk aXJlY3Rpb24gaW4gdGhlIGluZGV4c2NhbiB0aGVuIHRoZSBzYW1lCi0JCQkJICogaXRlbSBtaWdo dCBnZXQgZW50ZXJlZCBtdWx0aXBsZSB0aW1lcy4gSXQncyBub3Qgd29ydGgKLQkJCQkgKiB0cnlp bmcgdG8gb3B0aW1pemUgdGhhdCwgc28gd2UgZG9uJ3QgZGV0ZWN0IGl0LCBidXQgaW5zdGVhZAot CQkJCSAqIGp1c3QgZm9yZ2V0IGFueSBleGNlc3MgZW50cmllcy4KLQkJCQkgKi8KLQkJCQlpZiAo c28tPmtpbGxlZEl0ZW1zID09IE5VTEwpCi0JCQkJCXNvLT5raWxsZWRJdGVtcyA9IHBhbGxvY19h cnJheShpbnQsIE1heFRJRHNQZXJCVHJlZVBhZ2UpOwotCQkJCWlmIChzby0+bnVtS2lsbGVkIDwg TWF4VElEc1BlckJUcmVlUGFnZSkKLQkJCQkJc28tPmtpbGxlZEl0ZW1zW3NvLT5udW1LaWxsZWQr K10gPSBzby0+Y3VyclBvcy5pdGVtSW5kZXg7Ci0JCQl9CisJCQliYXRjaCA9IF9idF9uZXh0KHNj YW4sIGRpciwgYmF0Y2gpOwogCi0JCQkvKgotCQkJICogTm93IGNvbnRpbnVlIHRoZSBzY2FuLgot CQkJICovCi0JCQlyZXMgPSBfYnRfbmV4dChzY2FuLCBkaXIpOwotCQl9Ci0KLQkJLyogSWYgd2Ug aGF2ZSBhIHR1cGxlLCByZXR1cm4gaXQgLi4uICovCi0JCWlmIChyZXMpCisJCS8qIElmIHdlIGhh dmUgYSBiYXRjaCwgcmV0dXJuIGl0IC4uLiAqLworCQlpZiAoYmF0Y2gpCiAJCQlicmVhazsKIAkJ LyogLi4uIG90aGVyd2lzZSBzZWUgaWYgd2UgbmVlZCBhbm90aGVyIHByaW1pdGl2ZSBpbmRleCBz Y2FuICovCiAJfSB3aGlsZSAoc28tPm51bUFycmF5S2V5cyAmJiBfYnRfc3RhcnRfcHJpbV9zY2Fu KHNjYW4pKTsKIAotCXJldHVybiByZXM7CisJcmV0dXJuIGJhdGNoOwogfQogCiAvKgpAQCAtMjkx LDM4ICsyNjksNDMgQEAgaW50NjQKIGJ0Z2V0Yml0bWFwKEluZGV4U2NhbkRlc2Mgc2NhbiwgVElE Qml0bWFwICp0Ym0pCiB7CiAJQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+ b3BhcXVlOworCUluZGV4U2NhbkJhdGNoIGJhdGNoOwogCWludDY0CQludGlkcyA9IDA7Ci0JSXRl bVBvaW50ZXIgaGVhcFRpZDsKKwlJdGVtUG9pbnRlciB0YWJsZVRpZDsKIAogCUFzc2VydChzY2Fu LT5oZWFwUmVsYXRpb24gPT0gTlVMTCk7CiAKIAkvKiBFYWNoIGxvb3AgaXRlcmF0aW9uIHBlcmZv cm1zIGFub3RoZXIgcHJpbWl0aXZlIGluZGV4IHNjYW4gKi8KIAlkbwogCXsKLQkJLyogRmV0Y2gg dGhlIGZpcnN0IHBhZ2UgJiB0dXBsZSAqLwotCQlpZiAoX2J0X2ZpcnN0KHNjYW4sIEZvcndhcmRT Y2FuRGlyZWN0aW9uKSkKKwkJLyogRmV0Y2ggdGhlIGZpcnN0IGJhdGNoICovCisJCWlmICgoYmF0 Y2ggPSBfYnRfZmlyc3Qoc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24pKSkKIAkJewotCQkJLyog U2F2ZSB0dXBsZSBJRCwgYW5kIGNvbnRpbnVlIHNjYW5uaW5nICovCi0JCQloZWFwVGlkID0gJnNj YW4tPnhzX2hlYXB0aWQ7Ci0JCQl0Ym1fYWRkX3R1cGxlcyh0Ym0sIGhlYXBUaWQsIDEsIGZhbHNl KTsKKwkJCWludAkJCWl0ZW1JbmRleCA9IDA7CisKKwkJCS8qIFNhdmUgZmlyc3QgdHVwbGUncyBU SUQgKi8KKwkJCXRhYmxlVGlkID0gJmJhdGNoLT5pdGVtc1tpdGVtSW5kZXhdLnRhYmxlVGlkOwor CQkJdGJtX2FkZF90dXBsZXModGJtLCB0YWJsZVRpZCwgMSwgZmFsc2UpOwogCQkJbnRpZHMrKzsK IAogCQkJZm9yICg7OykKIAkJCXsKLQkJCQkvKgotCQkJCSAqIEFkdmFuY2UgdG8gbmV4dCB0dXBs ZSB3aXRoaW4gcGFnZS4gIFRoaXMgaXMgdGhlIHNhbWUgYXMgdGhlCi0JCQkJICogZWFzeSBjYXNl IGluIF9idF9uZXh0KCkuCi0JCQkJICovCi0JCQkJaWYgKCsrc28tPmN1cnJQb3MuaXRlbUluZGV4 ID4gc28tPmN1cnJQb3MubGFzdEl0ZW0pCisJCQkJLyogQWR2YW5jZSB0byBuZXh0IFRJRCB3aXRo aW4gcGFnZS1zaXplZCBiYXRjaCAqLworCQkJCWlmICgrK2l0ZW1JbmRleCA+IGJhdGNoLT5sYXN0 SXRlbSkKIAkJCQl7Ci0JCQkJCS8qIGxldCBfYnRfbmV4dCBkbyB0aGUgaGVhdnkgbGlmdGluZyAq LwotCQkJCQlpZiAoIV9idF9uZXh0KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uKSkKKwkJCQkJ LyoKKwkJCQkJICogX2J0X25leHQgcmVsZWFzZXMgdGhlIHByaW9yIGJhdGNoIGZvciBiaXRtYXAg Y2FsbGVycworCQkJCQkgKiBiZWZvcmUgYWxsb2NhdGluZyB0aGUgbmV4dCBvbmUsIHNvIG9ubHkg b25lIGJhdGNoIGlzCisJCQkJCSAqIGV2ZXIgdXNlZCBhdCBhIHRpbWUKKwkJCQkJICovCisJCQkJ CWl0ZW1JbmRleCA9IDA7CisJCQkJCWJhdGNoID0gX2J0X25leHQoc2NhbiwgRm9yd2FyZFNjYW5E aXJlY3Rpb24sIGJhdGNoKTsKKwkJCQkJaWYgKCFiYXRjaCkKIAkJCQkJCWJyZWFrOwogCQkJCX0K IAotCQkJCS8qIFNhdmUgdHVwbGUgSUQsIGFuZCBjb250aW51ZSBzY2FubmluZyAqLwotCQkJCWhl YXBUaWQgPSAmc28tPmN1cnJQb3MuaXRlbXNbc28tPmN1cnJQb3MuaXRlbUluZGV4XS5oZWFwVGlk OwotCQkJCXRibV9hZGRfdHVwbGVzKHRibSwgaGVhcFRpZCwgMSwgZmFsc2UpOworCQkJCXRhYmxl VGlkID0gJmJhdGNoLT5pdGVtc1tpdGVtSW5kZXhdLnRhYmxlVGlkOworCQkJCXRibV9hZGRfdHVw bGVzKHRibSwgdGFibGVUaWQsIDEsIGZhbHNlKTsKIAkJCQludGlkcysrOwogCQkJfQogCQl9CkBA IC0zNDksOCArMzMyLDYgQEAgYnRiZWdpbnNjYW4oUmVsYXRpb24gcmVsLCBpbnQgbmtleXMsIGlu dCBub3JkZXJieXMpCiAKIAkvKiBhbGxvY2F0ZSBwcml2YXRlIHdvcmtzcGFjZSAqLwogCXNvID0g cGFsbG9jX29iamVjdChCVFNjYW5PcGFxdWVEYXRhKTsKLQlCVFNjYW5Qb3NJbnZhbGlkYXRlKHNv LT5jdXJyUG9zKTsKLQlCVFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5tYXJrUG9zKTsKIAlpZiAoc2Nh bi0+bnVtYmVyT2ZLZXlzID4gMCkKIAkJc28tPmtleURhdGEgPSAoU2NhbktleSkgcGFsbG9jKHNj YW4tPm51bWJlck9mS2V5cyAqIHNpemVvZihTY2FuS2V5RGF0YSkpOwogCWVsc2UKQEAgLTM2NCwx OSArMzQ1LDEyIEBAIGJ0YmVnaW5zY2FuKFJlbGF0aW9uIHJlbCwgaW50IG5rZXlzLCBpbnQgbm9y ZGVyYnlzKQogCXNvLT5vcmRlclByb2NzID0gTlVMTDsKIAlzby0+YXJyYXlDb250ZXh0ID0gTlVM TDsKIAotCXNvLT5raWxsZWRJdGVtcyA9IE5VTEw7CQkvKiB1bnRpbCBuZWVkZWQgKi8KLQlzby0+ bnVtS2lsbGVkID0gMDsKLQotCS8qCi0JICogV2UgZG9uJ3Qga25vdyB5ZXQgd2hldGhlciB0aGUg c2NhbiB3aWxsIGJlIGluZGV4LW9ubHksIHNvIHdlIGRvIG5vdAotCSAqIGFsbG9jYXRlIHRoZSB0 dXBsZSB3b3Jrc3BhY2UgYXJyYXlzIHVudGlsIGJ0cmVzY2FuLiAgSG93ZXZlciwgd2Ugc2V0IHVw Ci0JICogc2Nhbi0+eHNfaXR1cGRlc2Mgd2hldGhlciB3ZSdsbCBuZWVkIGl0IG9yIG5vdCwgc2lu Y2UgdGhhdCdzIHNvIGNoZWFwLgotCSAqLwotCXNvLT5jdXJyVHVwbGVzID0gc28tPm1hcmtUdXBs ZXMgPSBOVUxMOwotCi0Jc2Nhbi0+eHNfaXR1cGRlc2MgPSBSZWxhdGlvbkdldERlc2NyKHJlbCk7 Ci0KIAlzY2FuLT5vcGFxdWUgPSBzbzsKKwlzY2FuLT54c19yZWNoZWNrID0gZmFsc2U7CisJc2Nh bi0+eHNfaXR1cGRlc2MgPSBSZWxhdGlvbkdldERlc2NyKHJlbCk7CisJc2Nhbi0+bWF4aXRlbXNi YXRjaCA9IE1heFRJRHNQZXJCVHJlZVBhZ2U7CisJc2Nhbi0+YmF0Y2hfaW5kZXhfb3BhcXVlX3N0 YXRpYyA9IE1BWEFMSUdOKHNpemVvZihCVEJhdGNoRGF0YSkpOworCXNjYW4tPmJhdGNoX3R1cGxl c193b3Jrc3BhY2UgPSBCTENLU1o7CiAKIAlyZXR1cm4gc2NhbjsKIH0KQEAgLTM5MCw2NCArMzY0 LDE3NyBAQCBidHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5LZXkgc2NhbmtleSwgaW50 IG5zY2Fua2V5cywKIHsKIAlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5v cGFxdWU7CiAKLQkvKiB3ZSBhcmVuJ3QgaG9sZGluZyBhbnkgcmVhZCBsb2NrcywgYnV0IGdvdHRh IGRyb3AgdGhlIHBpbnMgKi8KLQlpZiAoQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpCi0J ewotCQkvKiBCZWZvcmUgbGVhdmluZyBjdXJyZW50IHBhZ2UsIGRlYWwgd2l0aCBhbnkga2lsbGVk IGl0ZW1zICovCi0JCWlmIChzby0+bnVtS2lsbGVkID4gMCkKLQkJCV9idF9raWxsaXRlbXMoc2Nh bik7Ci0JCUJUU2NhblBvc1VucGluSWZQaW5uZWQoc28tPmN1cnJQb3MpOwotCQlCVFNjYW5Qb3NJ bnZhbGlkYXRlKHNvLT5jdXJyUG9zKTsKLQl9Ci0KLQkvKgotCSAqIFdlIHByZWZlciB0byBlYWdl cmx5IGRyb3AgbGVhZiBwYWdlIHBpbnMgYmVmb3JlIGJ0Z2V0dHVwbGUgcmV0dXJucy4KLQkgKiBU aGlzIGF2b2lkcyBtYWtpbmcgVkFDVVVNIHdhaXQgdG8gYWNxdWlyZSBhIGNsZWFudXAgbG9jayBv biB0aGUgcGFnZS4KLQkgKgotCSAqIFdlIGNhbm5vdCBzYWZlbHkgZHJvcCBsZWFmIHBhZ2UgcGlu cyBkdXJpbmcgaW5kZXgtb25seSBzY2FucyBkdWUgdG8gYQotCSAqIHJhY2UgY29uZGl0aW9uIGlu dm9sdmluZyBWQUNVVU0gc2V0dGluZyBwYWdlcyBhbGwtdmlzaWJsZSBpbiB0aGUgVk0uCi0JICog SXQncyBhbHNvIHVuc2FmZSBmb3IgcGxhaW4gaW5kZXggc2NhbnMgdGhhdCB1c2UgYSBub24tTVZD QyBzbmFwc2hvdC4KLQkgKgotCSAqIEFsc28gb3B0IG91dCBvZiBkcm9wcGluZyBsZWFmIHBhZ2Ug cGlucyBlYWdlcmx5IGR1cmluZyBiaXRtYXAgc2NhbnMuCi0JICogUGlucyBjYW5ub3QgYmUgaGVs ZCBmb3IgbW9yZSB0aGFuIGFuIGluc3RhbnQgZHVyaW5nIGJpdG1hcCBzY2FucyBlaXRoZXIKLQkg KiB3YXksIHNvIHdlIG1pZ2h0IGFzIHdlbGwgYXZvaWQgd2FzdGluZyBjeWNsZXMgb24gYWNxdWly aW5nIHBhZ2UgTFNOcy4KLQkgKgotCSAqIFNlZSBuYnRyZWUvUkVBRE1FIHNlY3Rpb24gb24gbWFr aW5nIGNvbmN1cnJlbnQgVElEIHJlY3ljbGluZyBzYWZlLgotCSAqCi0JICogTm90ZTogc28tPmRy b3BQaW4gc2hvdWxkIG5ldmVyIGNoYW5nZSBhY3Jvc3MgcmVzY2Fucy4KLQkgKi8KLQlzby0+ZHJv cFBpbiA9ICghc2Nhbi0+eHNfd2FudF9pdHVwICYmCi0JCQkJICAgSXNNVkNDTGlrZVNuYXBzaG90 KHNjYW4tPnhzX3NuYXBzaG90KSAmJgotCQkJCSAgIHNjYW4tPmhlYXBSZWxhdGlvbiAhPSBOVUxM KTsKLQotCXNvLT5tYXJrSXRlbUluZGV4ID0gLTE7Ci0Jc28tPm5lZWRQcmltU2NhbiA9IGZhbHNl OwotCXNvLT5zY2FuQmVoaW5kID0gZmFsc2U7Ci0Jc28tPm9wcG9zaXRlRGlyQ2hlY2sgPSBmYWxz ZTsKLQlCVFNjYW5Qb3NVbnBpbklmUGlubmVkKHNvLT5tYXJrUG9zKTsKLQlCVFNjYW5Qb3NJbnZh bGlkYXRlKHNvLT5tYXJrUG9zKTsKLQotCS8qCi0JICogQWxsb2NhdGUgdHVwbGUgd29ya3NwYWNl IGFycmF5cywgaWYgbmVlZGVkIGZvciBhbiBpbmRleC1vbmx5IHNjYW4gYW5kCi0JICogbm90IGFs cmVhZHkgZG9uZSBpbiBhIHByZXZpb3VzIHJlc2NhbiBjYWxsLiAgVG8gc2F2ZSBvbiBwYWxsb2MK LQkgKiBvdmVyaGVhZCwgYm90aCB3b3Jrc3BhY2VzIGFyZSBhbGxvY2F0ZWQgYXMgb25lIHBhbGxv YyBibG9jazsgb25seSB0aGlzCi0JICogZnVuY3Rpb24gYW5kIGJ0ZW5kc2NhbiBrbm93IHRoYXQu Ci0JICovCi0JaWYgKHNjYW4tPnhzX3dhbnRfaXR1cCAmJiBzby0+Y3VyclR1cGxlcyA9PSBOVUxM KQotCXsKLQkJc28tPmN1cnJUdXBsZXMgPSAoY2hhciAqKSBwYWxsb2MoQkxDS1NaICogMik7Ci0J CXNvLT5tYXJrVHVwbGVzID0gc28tPmN1cnJUdXBsZXMgKyBCTENLU1o7Ci0JfQotCiAJLyoKIAkg KiBSZXNldCB0aGUgc2NhbiBrZXlzCiAJICovCiAJaWYgKHNjYW5rZXkgJiYgc2Nhbi0+bnVtYmVy T2ZLZXlzID4gMCkKIAkJbWVtY3B5KHNjYW4tPmtleURhdGEsIHNjYW5rZXksIHNjYW4tPm51bWJl ck9mS2V5cyAqIHNpemVvZihTY2FuS2V5RGF0YSkpOworCXNvLT5uZWVkUHJpbVNjYW4gPSBmYWxz ZTsKKwlzby0+c2NhbkJlaGluZCA9IGZhbHNlOworCXNvLT5vcHBvc2l0ZURpckNoZWNrID0gZmFs c2U7CiAJc28tPm51bWJlck9mS2V5cyA9IDA7CQkvKiB1bnRpbCBfYnRfcHJlcHJvY2Vzc19rZXlz IHNldHMgaXQgKi8KIAlzby0+bnVtQXJyYXlLZXlzID0gMDsJCS8qIGRpdHRvICovCiB9CiAKKy8q CisgKglidHVuZ3VhcmRiYXRjaCgpIC0tIERyb3AgYmF0Y2gncyBUSUQgcmVjeWNsaW5nIGludGVy bG9jayAoYnVmZmVyIHBpbikKKyAqCisgKiBDYWxsZWQgYnkgdGhlIHRhYmxlIEFNIHdoZW4gaXQn cyBzYWZlIHRvIGRyb3AgdGhlIGJ1ZmZlciBwaW4gaGVsZCB0bworICogcHJldmVudCBjb25jdXJy ZW50IFRJRCByZWN5Y2xpbmcgYnkgVkFDVVVNLgorICovCit2b2lkCitidHVuZ3VhcmRiYXRjaChJ bmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKQoreworCUJUQmF0Y2hEYXRh ICpidGJhdGNoID0gQlRCYXRjaEdldERhdGEoc2NhbiwgYmF0Y2gpOworCisJLyogU2hvdWxkIGJl IGNhbGxlZCBleGFjdGx5IG9uY2UgaWZmICFiYXRjaEltbWVkaWF0ZVVuZ3VhcmQgKi8KKwlBc3Nl cnQoIXNjYW4tPmJhdGNoSW1tZWRpYXRlVW5ndWFyZCk7CisJQXNzZXJ0KGJhdGNoLT5pc0d1YXJk ZWQpOworCisJUmVsZWFzZUJ1ZmZlcihidGJhdGNoLT5idWYpOworfQorCisvKgorICoJYnRraWxs aXRlbXNiYXRjaCgpIC0tIE1hcmsgZGVhZCBpdGVtcycgaW5kZXggdHVwbGVzIExQX0RFQUQKKyAq Lwordm9pZAorYnRraWxsaXRlbXNiYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJh dGNoIGJhdGNoKQoreworCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247CisJQlRC YXRjaERhdGEgKmJ0YmF0Y2ggPSBCVEJhdGNoR2V0RGF0YShzY2FuLCBiYXRjaCk7CisJUGFnZQkJ cGFnZTsKKwlCVFBhZ2VPcGFxdWUgb3BhcXVlOworCWJvb2wJCWtpbGxlZHNvbWV0aGluZyA9IGZh bHNlOworCUJ1ZmZlcgkJYnVmOworCVhMb2dSZWNQdHIJbGF0ZXN0bHNuOworCisJQXNzZXJ0KGJh dGNoLT5udW1EZWFkID4gMCk7CisKKwlidWYgPSBfYnRfZ2V0YnVmKHJlbCwgYnRiYXRjaC0+Y3Vy clBhZ2UsIEJUX1JFQUQpOworCisJbGF0ZXN0bHNuID0gQnVmZmVyR2V0TFNOQXRvbWljKGJ1Zik7 CisJQXNzZXJ0KGJhdGNoLT5sc24gPD0gbGF0ZXN0bHNuKTsKKwlpZiAoYmF0Y2gtPmxzbiAhPSBs YXRlc3Rsc24pCisJeworCQkvKiBNb2RpZmllZCwgZ2l2ZSB1cCBvbiBoaW50aW5nICovCisJCV9i dF9yZWxidWYocmVsLCBidWYpOworCQlyZXR1cm47CisJfQorCisJcGFnZSA9IEJ1ZmZlckdldFBh Z2UoYnVmKTsKKwlvcGFxdWUgPSBCVFBhZ2VHZXRPcGFxdWUocGFnZSk7CisKKwkvKiBJdGVyYXRl IHRocm91Z2ggYmF0Y2gtPmRlYWRJdGVtc1tdIGluIGxlYWYgcGFnZSBvcmRlciAqLworCWZvciAo aW50IGkgPSAwOyBpIDwgYmF0Y2gtPm51bURlYWQ7IGkrKykKKwl7CisJCWludAkJCWl0ZW1JbmRl eCA9IGJhdGNoLT5kZWFkSXRlbXNbaV07CisJCUJhdGNoTWF0Y2hpbmdJdGVtICpraXRlbSA9ICZi YXRjaC0+aXRlbXNbaXRlbUluZGV4XTsKKwkJT2Zmc2V0TnVtYmVyIG9mZm51bSA9IGtpdGVtLT5p bmRleE9mZnNldDsKKwkJSXRlbUlkCQlpaWQgPSBQYWdlR2V0SXRlbUlkKHBhZ2UsIG9mZm51bSk7 CisJCUluZGV4VHVwbGUJaXR1cGxlID0gKEluZGV4VHVwbGUpIFBhZ2VHZXRJdGVtKHBhZ2UsIGlp ZCk7CisJCWJvb2wJCWtpbGx0dXBsZSA9IGZhbHNlOworCisJCUFzc2VydChpdGVtSW5kZXggPj0g YmF0Y2gtPmZpcnN0SXRlbSAmJiBpdGVtSW5kZXggPD0gYmF0Y2gtPmxhc3RJdGVtKTsKKwkJQXNz ZXJ0KGkgPT0gMCB8fAorCQkJICAgb2ZmbnVtID49IGJhdGNoLT5pdGVtc1tiYXRjaC0+ZGVhZEl0 ZW1zW2kgLSAxXV0uaW5kZXhPZmZzZXQpOworCQlBc3NlcnQob2ZmbnVtID49IFBfRklSU1REQVRB S0VZKG9wYXF1ZSkgJiYKKwkJCSAgIG9mZm51bSA8PSBQYWdlR2V0TWF4T2Zmc2V0TnVtYmVyKHBh Z2UpKTsKKworCQlpZiAoQlRyZWVUdXBsZUlzUG9zdGluZyhpdHVwbGUpKQorCQl7CisJCQlpbnQJ CQlwaSA9IGkgKyAxOworCQkJaW50CQkJbnBvc3RpbmcgPSBCVHJlZVR1cGxlR2V0TlBvc3Rpbmco aXR1cGxlKTsKKwkJCWludAkJCWo7CisKKwkJCS8qCisJCQkgKiBBIHBvc3RpbmcgbGlzdCB0dXBs ZSBjYW4gb25seSBiZSBtYXJrZWQgTFBfREVBRCBvbmNlIGV2ZXJ5IG9uZQorCQkJICogb2YgaXRz IGhlYXAgVElEcyBpcyBrbm93biBkZWFkLiAgTWF0Y2ggZWFjaCBoZWFwIFRJRCBhZ2FpbnN0CisJ CQkgKiBzdWNjZXNzaXZlIGRlYWQgaXRlbXMsIHdoaWNoIGFyZSBpbiBoZWFwIFRJRCBvcmRlciBq dXN0IGxpa2UKKwkJCSAqIHRoZSBwb3N0aW5nIGxpc3QgaXRzZWxmLgorCQkJICovCisJCQlmb3Ig KGogPSAwOyBqIDwgbnBvc3Rpbmc7IGorKykKKwkJCXsKKwkJCQlJdGVtUG9pbnRlciBpdGVtID0g QlRyZWVUdXBsZUdldFBvc3RpbmdOKGl0dXBsZSwgaik7CisKKwkJCQlpZiAoIUl0ZW1Qb2ludGVy RXF1YWxzKGl0ZW0sICZraXRlbS0+dGFibGVUaWQpKQorCQkJCQlicmVhazsJCS8qIG91dCBvZiBw b3N0aW5nIGxpc3QgbG9vcCAqLworCisJCQkJQXNzZXJ0KGtpdGVtLT5pbmRleE9mZnNldCA9PSBv ZmZudW0pOworCisJCQkJLyoKKwkJCQkgKiBSZWFkLWFoZWFkIHRvIGxhdGVyIGtpdGVtcyBoZXJl LgorCQkJCSAqCisJCQkJICogV2UgcmVseSBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0IG5vdCBhZHZh bmNpbmcga2l0ZW0gaGVyZQorCQkJCSAqIHdpbGwgcHJldmVudCB1cyBmcm9tIGNvbnNpZGVyaW5n IHRoZSBwb3N0aW5nIGxpc3QgdHVwbGUKKwkJCQkgKiBmdWxseSBkZWFkIGJ5IG5vdCBtYXRjaGlu ZyBpdHMgbmV4dCBoZWFwIFRJRCBpbiBuZXh0IGxvb3AKKwkJCQkgKiBpdGVyYXRpb24uCisJCQkJ ICoKKwkJCQkgKiBJZiwgb24gdGhlIG90aGVyIGhhbmQsIHRoaXMgaXMgdGhlIGZpbmFsIGhlYXAg VElEIGluIHRoZQorCQkJCSAqIHBvc3RpbmcgbGlzdCB0dXBsZSwgdGhlbiB0dXBsZSBnZXRzIGtp bGxlZCByZWdhcmRsZXNzIChpLmUuCisJCQkJICogd2UgaGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRo ZSBsYXN0IGtpdGVtIGlzIGFsc28gdGhlIGxhc3QKKwkJCQkgKiBoZWFwIFRJRCBpbiB0aGUgbGFz dCBpbmRleCB0dXBsZSBjb3JyZWN0bHkgLS0gcG9zdGluZyB0dXBsZQorCQkJCSAqIHN0aWxsIGdl dHMga2lsbGVkKS4KKwkJCQkgKi8KKwkJCQlpZiAocGkgPCBiYXRjaC0+bnVtRGVhZCkKKwkJCQkJ a2l0ZW0gPSAmYmF0Y2gtPml0ZW1zW2JhdGNoLT5kZWFkSXRlbXNbcGkrK11dOworCQkJfQorCisJ CQkvKgorCQkJICogRG9uJ3QgYm90aGVyIGFkdmFuY2luZyB0aGUgb3V0ZXJtb3N0IGxvb3AncyBp bnQgaXRlcmF0b3IgdG8KKwkJCSAqIGF2b2lkIHByb2Nlc3NpbmcgZGVhZCBpdGVtcyB0aGF0IHJl bGF0ZSB0byB0aGUgc2FtZSBvZmZudW0vCisJCQkgKiBwb3N0aW5nIGxpc3QgdHVwbGUuICBUaGlz IG1pY3JvLW9wdGltaXphdGlvbiBoYXJkbHkgc2VlbXMgd29ydGgKKwkJCSAqIGl0LiAgKEZ1cnRo ZXIgaXRlcmF0aW9ucyBvZiB0aGUgb3V0ZXJtb3N0IGxvb3Agd2lsbCBmYWlsIHRvCisJCQkgKiBt YXRjaCBvbiB0aGlzIHNhbWUgcG9zdGluZyBsaXN0J3MgZmlyc3QgaGVhcCBUSUQgaW5zdGVhZCwg c28KKwkJCSAqIHdlJ2xsIGFkdmFuY2UgdG8gdGhlIG5leHQgb2ZmbnVtL2luZGV4IHR1cGxlIHBy ZXR0eSBxdWlja2x5LikKKwkJCSAqLworCQkJaWYgKGogPT0gbnBvc3RpbmcpCisJCQkJa2lsbHR1 cGxlID0gdHJ1ZTsKKwkJfQorCQllbHNlCisJCXsKKwkJCUFzc2VydChJdGVtUG9pbnRlckVxdWFs cygmaXR1cGxlLT50X3RpZCwgJmtpdGVtLT50YWJsZVRpZCkpOworCQkJa2lsbHR1cGxlID0gdHJ1 ZTsKKwkJfQorCisJCS8qIE1hcmsgaW5kZXggaXRlbSBhcyBkZWFkLCBpZiBpdCBpc24ndCBhbHJl YWR5ICovCisJCWlmIChraWxsdHVwbGUgJiYgIUl0ZW1JZElzRGVhZChpaWQpKQorCQl7CisJCQlp ZiAoIWtpbGxlZHNvbWV0aGluZykKKwkJCXsKKwkJCQkvKgorCQkJCSAqIFVzZSB0aGUgaGludCBi aXQgaW5mcmFzdHJ1Y3R1cmUgdG8gY2hlY2sgaWYgd2UgY2FuIHVwZGF0ZQorCQkJCSAqIHRoZSBw YWdlIHdoaWxlIGp1c3QgaG9sZGluZyBhIHNoYXJlIGxvY2suIElmIHdlIGFyZSBub3QKKwkJCQkg KiBhbGxvd2VkLCB0aGVyZSdzIG5vIHBvaW50IGNvbnRpbnVpbmcuCisJCQkJICovCisJCQkJaWYg KCFCdWZmZXJCZWdpblNldEhpbnRCaXRzKGJ1ZikpCisJCQkJeworCQkJCQlfYnRfcmVsYnVmKHJl bCwgYnVmKTsKKwkJCQkJcmV0dXJuOworCQkJCX0KKwkJCX0KKworCQkJLyogZm91bmQgdGhlIGl0 ZW0vYWxsIHBvc3RpbmcgbGlzdCBpdGVtcyAqLworCQkJSXRlbUlkTWFya0RlYWQoaWlkKTsKKwkJ CWtpbGxlZHNvbWV0aGluZyA9IHRydWU7CisJCX0KKwl9CisKKwkvKgorCSAqIFNpbmNlIHRoaXMg Y2FuIGJlIHJlZG9uZSBsYXRlciBpZiBuZWVkZWQsIG1hcmsgYXMgZGlydHkgaGludC4KKwkgKgor CSAqIFdoZW5ldmVyIHdlIG1hcmsgYW55dGhpbmcgTFBfREVBRCwgd2UgYWxzbyBzZXQgdGhlIHBh Z2UncworCSAqIEJUUF9IQVNfR0FSQkFHRSBmbGFnLCB3aGljaCBpcyBsaWtld2lzZSBqdXN0IGEg aGludC4gIChOb3RlIHRoYXQgd2UKKwkgKiBvbmx5IHJlbHkgb24gdGhlIHBhZ2UtbGV2ZWwgZmxh ZyBpbiAhaGVhcGtleXNwYWNlIGluZGV4ZXMuKQorCSAqLworCWlmIChraWxsZWRzb21ldGhpbmcp CisJeworCQlvcGFxdWUtPmJ0cG9fZmxhZ3MgfD0gQlRQX0hBU19HQVJCQUdFOworCQlCdWZmZXJG aW5pc2hTZXRIaW50Qml0cyhidWYsIHRydWUsIHRydWUpOworCX0KKworCV9idF9yZWxidWYocmVs LCBidWYpOworfQorCiAvKgogICoJYnRlbmRzY2FuKCkgLS0gY2xvc2UgZG93biBhIHNjYW4KICAq LwpAQCAtNDU2LDExNiArNTQzLDYzIEBAIGJ0ZW5kc2NhbihJbmRleFNjYW5EZXNjIHNjYW4pCiB7 CiAJQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwogCi0JLyog d2UgYXJlbid0IGhvbGRpbmcgYW55IHJlYWQgbG9ja3MsIGJ1dCBnb3R0YSBkcm9wIHRoZSBwaW5z ICovCi0JaWYgKEJUU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKQotCXsKLQkJLyogQmVmb3Jl IGxlYXZpbmcgY3VycmVudCBwYWdlLCBkZWFsIHdpdGggYW55IGtpbGxlZCBpdGVtcyAqLwotCQlp ZiAoc28tPm51bUtpbGxlZCA+IDApCi0JCQlfYnRfa2lsbGl0ZW1zKHNjYW4pOwotCQlCVFNjYW5Q b3NVbnBpbklmUGlubmVkKHNvLT5jdXJyUG9zKTsKLQl9Ci0KLQlzby0+bWFya0l0ZW1JbmRleCA9 IC0xOwotCUJUU2NhblBvc1VucGluSWZQaW5uZWQoc28tPm1hcmtQb3MpOwotCi0JLyogTm8gbmVl ZCB0byBpbnZhbGlkYXRlIHBvc2l0aW9ucywgdGhlIFJBTSBpcyBhYm91dCB0byBiZSBmcmVlZC4g Ki8KLQogCS8qIFJlbGVhc2Ugc3RvcmFnZSAqLwogCWlmIChzby0+a2V5RGF0YSAhPSBOVUxMKQog CQlwZnJlZShzby0+a2V5RGF0YSk7CiAJLyogc28tPmFycmF5S2V5cyBhbmQgc28tPm9yZGVyUHJv Y3MgYXJlIGluIGFycmF5Q29udGV4dCAqLwogCWlmIChzby0+YXJyYXlDb250ZXh0ICE9IE5VTEwp CiAJCU1lbW9yeUNvbnRleHREZWxldGUoc28tPmFycmF5Q29udGV4dCk7Ci0JaWYgKHNvLT5raWxs ZWRJdGVtcyAhPSBOVUxMKQotCQlwZnJlZShzby0+a2lsbGVkSXRlbXMpOwotCWlmIChzby0+Y3Vy clR1cGxlcyAhPSBOVUxMKQotCQlwZnJlZShzby0+Y3VyclR1cGxlcyk7Ci0JLyogc28tPm1hcmtU dXBsZXMgc2hvdWxkIG5vdCBiZSBwZnJlZSdkLCBzZWUgYnRyZXNjYW4gKi8KIAlwZnJlZShzbyk7 CiB9CiAKIC8qCi0gKglidG1hcmtwb3MoKSAtLSBzYXZlIGN1cnJlbnQgc2NhbiBwb3NpdGlvbgor ICoJYnRwb3NyZXNldCgpIC0tIHJlc2V0IGFycmF5IGtleSBzdGF0ZSBmb3Igc2NhbiBwb3NpdGlv biBjaGFuZ2UKKyAqCisgKiBDYWxsZWQgYnkgdGhlIGNvcmUgc3lzdGVtIHdoZW4gdGhlIHNjYW4n cyBsb2dpY2FsIHBvc2l0aW9uIGlzIGFib3V0IHRvCisgKiBjaGFuZ2UgaW4gYSB3YXkgdGhhdCBp bnZhbGlkYXRlcyBvdXIgYXJyYXkga2V5IHN0YXRlLiAgVGhpcyBoYXBwZW5zIHdoZW4KKyAqIHJl c3RvcmluZyBhIG1hcmtlZCBwb3NpdGlvbiwgb3Igd2hlbiB0aGUgc2NhbiBjcm9zc2VzIGEgYmF0 Y2ggYm91bmRhcnkKKyAqIHdoaWxlIG1vdmluZyBpbiB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uIHRv IHRoZSBvbmUgb3JpZ2luYWxseSB1c2VkLgorICoKKyAqIEZvciBkaXJlY3Rpb24gY2hhbmdlcywg dGhlIGNvcmUgc3lzdGVtIHdpbGwgaGF2ZSBhbHJlYWR5IGZsaXBwZWQgdGhlCisgKiBiYXRjaCdz IGRpciBmaWVsZCBiZWZvcmUgY2FsbGluZyBoZXJlOyB3ZSB1c2UgdGhpcyB1cGRhdGVkIGRpcmVj dGlvbiB3aGVuCisgKiByZXNldHRpbmcgb3VyIGFycmF5IGtleXMuICBGb3IgbWFyayByZXN0b3Jh dGlvbiwgdGhlIGJhdGNoJ3MgZGlyIHdpbGwKKyAqIHJldGFpbiBpdHMgb3JpZ2luYWwgdmFsdWUg KGZyb20gd2hlbiBidGdldGJhdGNoIHJldHVybmVkIGl0KS4KICAqLwogdm9pZAotYnRtYXJrcG9z KEluZGV4U2NhbkRlc2Mgc2NhbikKK2J0cG9zcmVzZXQoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRl eFNjYW5CYXRjaCBiYXRjaCkKIHsKIAlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBz Y2FuLT5vcGFxdWU7CisJQlRCYXRjaERhdGEgKmJ0YmF0Y2ggPSBCVEJhdGNoR2V0RGF0YShzY2Fu LCBiYXRjaCk7CiAKLQkvKiBUaGVyZSBtYXkgYmUgYW4gb2xkIG1hcmsgd2l0aCBhIHBpbiAoYnV0 IG5vIGxvY2spLiAqLwotCUJUU2NhblBvc1VucGluSWZQaW5uZWQoc28tPm1hcmtQb3MpOworCWlm ICghc28tPm51bUFycmF5S2V5cykKKwkJcmV0dXJuOwogCiAJLyoKLQkgKiBKdXN0IHJlY29yZCB0 aGUgY3VycmVudCBpdGVtSW5kZXguICBJZiB3ZSBsYXRlciBzdGVwIHRvIG5leHQgcGFnZQotCSAq IGJlZm9yZSByZWxlYXNpbmcgdGhlIG1hcmtlZCBwb3NpdGlvbiwgX2J0X3N0ZXBwYWdlIG1ha2Vz IGEgZnVsbCBjb3B5IG9mCi0JICogdGhlIGN1cnJQb3Mgc3RydWN0IGluIG1hcmtQb3MuICBJZiAo YXMgb2Z0ZW4gaGFwcGVucykgdGhlIG1hcmsgaXMgbW92ZWQKLQkgKiBiZWZvcmUgd2UgbGVhdmUg dGhlIHBhZ2UsIHdlIGRvbid0IGhhdmUgdG8gZG8gdGhhdCB3b3JrLgorCSAqIFJlc2V0IGFycmF5 IGtleXMgdG8gaW5pdGlhbCBzdGF0ZSBmb3IgdGhlIGJhdGNoJ3Mgc2NhbiBkaXJlY3Rpb24uICBB bHNvCisJICogY2xlYXIgbmVlZFByaW1TY2FuIGFuZCByZWxhdGVkIGZsYWdzLiAgVGhlc2Ugd2Vy ZSBzZXQgYmFzZWQgb24gdGhlIHNvZnQKKwkgKiBhc3N1bXB0aW9uIHRoYXQgdGhlIHNjYW4gd291 bGQgYWx3YXlzIHByb2NlZWQgaW4gdGhlIHNhbWUgZGlyZWN0aW9uLgorCSAqCisJICogVGhlc2Ug c3RlcHMgd29yayBhcm91bmQgdGhlIHNvZnQgYXNzdW1wdGlvbiBiZWluZyB2aW9sYXRlZDogdGhl eSBmb3JjZQorCSAqIHRoZSBzY2FuIHRvIHN0ZXAgdG8gdGhlIG5leHQvcHJldmlvdXMgcGFnZSwg bWFraW5nIHRoZSBhcnJheXMgcmVjb3Zlci4KKwkgKiBXaGVuIHdlIGdvIHRvIHJlYWQgdGhhdCBw YWdlLCBfYnRfcmVhZHBhZ2Ugd2lsbCByZWxpYWJseSBkZXRlcm1pbmUgaWYgYQorCSAqIHByaW1p dGl2ZSBzY2FuIHJlYWxseSBpcyBuZWVkZWQgYmFzZWQgb24gdGhlIHBhZ2UncyB0dXBsZXMuICBJ ZiB0aGVyZSdzCisJICogYSBwcmltaXRpdmUgc2NhbiwgaXQgd2lsbCByZXBvc2l0aW9uIHRoZSBz Y2FuIHVzaW5nIG5ldyBhcnJheSB2YWx1ZXMKKwkgKiAoYmFzZWQgb24gdGhlIHR1cGxlcyBmcm9t IHRoZSBuZWlnaGJvcmluZyBwYWdlIHdlJ2xsIHN0ZXAgb24gdG8pLgorCSAqCisJICogV2UgbmVl ZCB0byByZXNldCB0aGUgYXJyYXkga2V5IHN0YXRlIGluIHRoZSBjb3JyZWN0IGRpcmVjdGlvbiBz byB0aGF0CisJICogd2Ugd29uJ3QgZ2V0IGNvbmZ1c2VkLiAgV2hlbiB0aGUgYXJyYXkga2V5cyBh cmUgYmVoaW5kIHRoZSBrZXkgc3BhY2UKKwkgKiBmb3IgdGhlIHBhZ2Ugd2UncmUgc3RlcHBpbmcg b24gdG8gKGJlaGluZCBpbiB0ZXJtcyBvZiB0aGUgc2NhbiBkaXIpLAorCSAqIHRoZXkgd2lsbCBj YXRjaCB1cCBhdXRvbWF0aWNhbGx5LiAgQnV0IHdoZW4gdGhleSdyZSBhaGVhZCBvZiB0aGF0CisJ ICogcGFnZSdzIGtleSBzcGFjZSwgdGhlIHNjYW4gY291bGQgbWlzcyBtYXRjaGluZyB0dXBsZXMu CiAJICovCi0JaWYgKEJUU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKQotCQlzby0+bWFya0l0 ZW1JbmRleCA9IHNvLT5jdXJyUG9zLml0ZW1JbmRleDsKKwlfYnRfc3RhcnRfYXJyYXlfa2V5cyhz Y2FuLCBiYXRjaC0+ZGlyKTsKKwlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChiYXRjaC0+ZGly KSkKKwkJYnRiYXRjaC0+bW9yZVJpZ2h0ID0gdHJ1ZTsKIAllbHNlCi0JewotCQlCVFNjYW5Qb3NJ bnZhbGlkYXRlKHNvLT5tYXJrUG9zKTsKLQkJc28tPm1hcmtJdGVtSW5kZXggPSAtMTsKLQl9Ci19 Ci0KLS8qCi0gKglidHJlc3RycG9zKCkgLS0gcmVzdG9yZSBzY2FuIHRvIGxhc3Qgc2F2ZWQgcG9z aXRpb24KLSAqLwotdm9pZAotYnRyZXN0cnBvcyhJbmRleFNjYW5EZXNjIHNjYW4pCi17Ci0JQlRT Y2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwotCi0JaWYgKHNvLT5t YXJrSXRlbUluZGV4ID49IDApCi0JewotCQkvKgotCQkgKiBUaGUgc2NhbiBoYXMgbmV2ZXIgbW92 ZWQgdG8gYSBuZXcgcGFnZSBzaW5jZSB0aGUgbGFzdCBtYXJrLiAgSnVzdAotCQkgKiByZXN0b3Jl IHRoZSBpdGVtSW5kZXguCi0JCSAqCi0JCSAqIE5COiBJbiB0aGlzIGNhc2Ugd2UgY2FuJ3QgY291 bnQgb24gYW55dGhpbmcgaW4gc28tPm1hcmtQb3MgdG8gYmUKLQkJICogYWNjdXJhdGUuCi0JCSAq LwotCQlzby0+Y3VyclBvcy5pdGVtSW5kZXggPSBzby0+bWFya0l0ZW1JbmRleDsKLQl9Ci0JZWxz ZQotCXsKLQkJLyoKLQkJICogVGhlIHNjYW4gbW92ZWQgdG8gYSBuZXcgcGFnZSBhZnRlciBsYXN0 IG1hcmsgb3IgcmVzdG9yZSwgYW5kIHdlIGFyZQotCQkgKiBub3cgcmVzdG9yaW5nIHRvIHRoZSBt YXJrZWQgcGFnZS4gIFdlIGFyZW4ndCBob2xkaW5nIGFueSByZWFkCi0JCSAqIGxvY2tzLCBidXQg aWYgd2UncmUgc3RpbGwgaG9sZGluZyB0aGUgcGluIGZvciB0aGUgY3VycmVudCBwb3NpdGlvbiwK LQkJICogd2UgbXVzdCBkcm9wIGl0LgotCQkgKi8KLQkJaWYgKEJUU2NhblBvc0lzVmFsaWQoc28t PmN1cnJQb3MpKQotCQl7Ci0JCQkvKiBCZWZvcmUgbGVhdmluZyBjdXJyZW50IHBhZ2UsIGRlYWwg d2l0aCBhbnkga2lsbGVkIGl0ZW1zICovCi0JCQlpZiAoc28tPm51bUtpbGxlZCA+IDApCi0JCQkJ X2J0X2tpbGxpdGVtcyhzY2FuKTsKLQkJCUJUU2NhblBvc1VucGluSWZQaW5uZWQoc28tPmN1cnJQ b3MpOwotCQl9Ci0KLQkJaWYgKEJUU2NhblBvc0lzVmFsaWQoc28tPm1hcmtQb3MpKQotCQl7Ci0J CQkvKiBidW1wIHBpbiBvbiBtYXJrIGJ1ZmZlciBmb3IgYXNzaWdubWVudCB0byBjdXJyZW50IGJ1 ZmZlciAqLwotCQkJaWYgKEJUU2NhblBvc0lzUGlubmVkKHNvLT5tYXJrUG9zKSkKLQkJCQlJbmNy QnVmZmVyUmVmQ291bnQoc28tPm1hcmtQb3MuYnVmKTsKLQkJCW1lbWNweSgmc28tPmN1cnJQb3Ms ICZzby0+bWFya1BvcywKLQkJCQkgICBvZmZzZXRvZihCVFNjYW5Qb3NEYXRhLCBpdGVtc1sxXSkg KwotCQkJCSAgIHNvLT5tYXJrUG9zLmxhc3RJdGVtICogc2l6ZW9mKEJUU2NhblBvc0l0ZW0pKTsK LQkJCWlmIChzby0+Y3VyclR1cGxlcykKLQkJCQltZW1jcHkoc28tPmN1cnJUdXBsZXMsIHNvLT5t YXJrVHVwbGVzLAotCQkJCQkgICBzby0+bWFya1Bvcy5uZXh0VHVwbGVPZmZzZXQpOwotCQkJLyog UmVzZXQgdGhlIHNjYW4ncyBhcnJheSBrZXlzIChzZWUgX2J0X3N0ZXBwYWdlIGZvciB3aHkpICov Ci0JCQlpZiAoc28tPm51bUFycmF5S2V5cykKLQkJCXsKLQkJCQlfYnRfc3RhcnRfYXJyYXlfa2V5 cyhzY2FuLCBzby0+Y3VyclBvcy5kaXIpOwotCQkJCXNvLT5uZWVkUHJpbVNjYW4gPSBmYWxzZTsK LQkJCX0KLQkJfQotCQllbHNlCi0JCQlCVFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5jdXJyUG9zKTsK LQl9CisJCWJ0YmF0Y2gtPm1vcmVMZWZ0ID0gdHJ1ZTsKKwlzby0+bmVlZFByaW1TY2FuID0gZmFs c2U7CisJc28tPnNjYW5CZWhpbmQgPSBmYWxzZTsKKwlzby0+b3Bwb3NpdGVEaXJDaGVjayA9IGZh bHNlOwogfQogCiAvKgpAQCAtODg0LDE1ICs5MTgsNiBAQCBfYnRfcGFyYWxsZWxfc2VpemUoSW5k ZXhTY2FuRGVzYyBzY2FuLCBCbG9ja051bWJlciAqbmV4dF9zY2FuX3BhZ2UsCiAJKm5leHRfc2Nh bl9wYWdlID0gSW52YWxpZEJsb2NrTnVtYmVyOwogCSpsYXN0X2N1cnJfcGFnZSA9IEludmFsaWRC bG9ja051bWJlcjsKIAotCS8qCi0JICogUmVzZXQgc28tPmN1cnJQb3MsIGFuZCBpbml0aWFsaXpl IG1vcmVMZWZ0L21vcmVSaWdodCBzdWNoIHRoYXQgdGhlIG5leHQKLQkgKiBjYWxsIHRvIF9idF9y ZWFkbmV4dHBhZ2UgdHJlYXRzIHRoaXMgYmFja2VuZCBzaW1pbGFybHkgdG8gYSBzZXJpYWwKLQkg KiBiYWNrZW5kIHRoYXQgc3RlcHMgZnJvbSAqbGFzdF9jdXJyX3BhZ2UgdG8gKm5leHRfc2Nhbl9w YWdlICh1bmxlc3MgdGhpcwotCSAqIGJhY2tlbmQncyBzby0+Y3VyclBvcyBpcyBpbml0aWFsaXpl ZCBieSBfYnRfcmVhZGZpcnN0cGFnZSBiZWZvcmUgdGhlbikuCi0JICovCi0JQlRTY2FuUG9zSW52 YWxpZGF0ZShzby0+Y3VyclBvcyk7Ci0Jc28tPmN1cnJQb3MubW9yZUxlZnQgPSBzby0+Y3VyclBv cy5tb3JlUmlnaHQgPSB0cnVlOwotCiAJaWYgKGZpcnN0KQogCXsKIAkJLyoKQEAgLTEwNDIsOCAr MTA2Nyw2IEBAIF9idF9wYXJhbGxlbF9kb25lKEluZGV4U2NhbkRlc2Mgc2NhbikKIAlCVFBhcmFs bGVsU2NhbkRlc2MgYnRzY2FuOwogCWJvb2wJCXN0YXR1c19jaGFuZ2VkID0gZmFsc2U7CiAKLQlB c3NlcnQoIUJUU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKTsKLQogCS8qIERvIG5vdGhpbmcs IGZvciBub24tcGFyYWxsZWwgc2NhbnMgKi8KIAlpZiAocGFyYWxsZWxfc2NhbiA9PSBOVUxMKQog CQlyZXR1cm47CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNlYXJj aC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzZWFyY2guYwppbmRleCBhYWU2YWNi N2YuLjRjOTRiOWU1OSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRz ZWFyY2guYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNlYXJjaC5jCkBAIC0y Myw1MyArMjMsNDggQEAKICNpbmNsdWRlICJwZ3N0YXQuaCIKICNpbmNsdWRlICJzdG9yYWdlL3By ZWRpY2F0ZS5oIgogI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgorI2luY2x1ZGUgInV0aWxz L21lbWRlYnVnLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsLmgiCiAKIAotc3RhdGljIGlubGluZSB2 b2lkIF9idF9kcm9wX2xvY2tfYW5kX21heWJlX3BpbihSZWxhdGlvbiByZWwsIEJUU2Nhbk9wYXF1 ZSBzbyk7CitzdGF0aWMgaW5saW5lIHZvaWQgX2J0X2JhdGNoX3VubG9jayhJbmRleFNjYW5EZXNj IHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoLAorCQkJCQkJCQkJQnVmZmVyIGJ1Zik7CiBzdGF0 aWMgQnVmZmVyIF9idF9tb3ZlcmlnaHQoUmVsYXRpb24gcmVsLCBSZWxhdGlvbiBoZWFwcmVsLCBC VFNjYW5JbnNlcnQga2V5LAogCQkJCQkJCUJ1ZmZlciBidWYsIGJvb2wgZm9ydXBkYXRlLCBCVFN0 YWNrIHN0YWNrLAogCQkJCQkJCWludCBhY2Nlc3MpOwogc3RhdGljIE9mZnNldE51bWJlciBfYnRf Ymluc3JjaChSZWxhdGlvbiByZWwsIEJUU2Nhbkluc2VydCBrZXksIEJ1ZmZlciBidWYpOwogc3Rh dGljIGludAlfYnRfYmluc3JjaF9wb3N0aW5nKEJUU2Nhbkluc2VydCBrZXksIFBhZ2UgcGFnZSwK IAkJCQkJCQkJT2Zmc2V0TnVtYmVyIG9mZm51bSk7Ci1zdGF0aWMgaW5saW5lIHZvaWQgX2J0X3Jl dHVybml0ZW0oSW5kZXhTY2FuRGVzYyBzY2FuLCBCVFNjYW5PcGFxdWUgc28pOwotc3RhdGljIGJv b2wgX2J0X3N0ZXBwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpOwot c3RhdGljIGJvb2wgX2J0X3JlYWRmaXJzdHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBPZmZzZXRO dW1iZXIgb2ZmbnVtLAotCQkJCQkJCSAgU2NhbkRpcmVjdGlvbiBkaXIpOwotc3RhdGljIGJvb2wg X2J0X3JlYWRuZXh0cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIEJsb2NrTnVtYmVyIGJsa25vLAot CQkJCQkJCSBCbG9ja051bWJlciBsYXN0Y3VycmJsa25vLCBTY2FuRGlyZWN0aW9uIGRpciwKLQkJ CQkJCQkgYm9vbCBzZWl6ZWQpOworc3RhdGljIEluZGV4U2NhbkJhdGNoIF9idF9yZWFkZmlyc3Rw YWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggZmlyc3RiYXRjaCwKKwkJCQkJ CQkJCQlPZmZzZXROdW1iZXIgb2ZmbnVtLCBTY2FuRGlyZWN0aW9uIGRpcik7CitzdGF0aWMgSW5k ZXhTY2FuQmF0Y2ggX2J0X3JlYWRuZXh0cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIEJsb2NrTnVt YmVyIGJsa25vLAorCQkJCQkJCQkJICAgQmxvY2tOdW1iZXIgbGFzdGN1cnJibGtubywKKwkJCQkJ CQkJCSAgIFNjYW5EaXJlY3Rpb24gZGlyLCBib29sIGZpcnN0cGFnZSk7CiBzdGF0aWMgQnVmZmVy IF9idF9sb2NrX2FuZF92YWxpZGF0ZV9sZWZ0KFJlbGF0aW9uIHJlbCwgQmxvY2tOdW1iZXIgKmJs a25vLAogCQkJCQkJCQkJCSBCbG9ja051bWJlciBsYXN0Y3VycmJsa25vKTsKLXN0YXRpYyBib29s IF9idF9lbmRwb2ludChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsKK3N0 YXRpYyBJbmRleFNjYW5CYXRjaCBfYnRfZW5kcG9pbnQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2Fu RGlyZWN0aW9uIGRpcik7CiAKIAogLyoKLSAqCV9idF9kcm9wX2xvY2tfYW5kX21heWJlX3Bpbigp CisgKiBfYnRfYmF0Y2hfdW5sb2NrKCkgLS0gbmJ0cmVlIHdyYXBwZXIgZm9yIGluZGV4YW1fdXRp bF91bmxvY2tfYmF0Y2guCiAgKgotICogVW5sb2NrIHNvLT5jdXJyUG9zLmJ1Zi4gIElmIHNjYW4g aXMgc28tPmRyb3BQaW4sIGRyb3AgdGhlIHBpbiwgdG9vLgotICogRHJvcHBpbmcgdGhlIHBpbiBw cmV2ZW50cyBWQUNVVU0gZnJvbSBibG9ja2luZyBvbiBhY3F1aXJpbmcgYSBjbGVhbnVwIGxvY2su CisgKiBQZXJmb3JtcyB0aGUgc2FtZSBWYWxncmluZCBpbnN0cnVtZW50YXRpb24gYXMgX2J0X3Vu bG9ja2J1Zi4KICAqLwogc3RhdGljIGlubGluZSB2b2lkCi1fYnRfZHJvcF9sb2NrX2FuZF9tYXli ZV9waW4oUmVsYXRpb24gcmVsLCBCVFNjYW5PcGFxdWUgc28pCitfYnRfYmF0Y2hfdW5sb2NrKElu ZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gsIEJ1ZmZlciBidWYpCiB7Ci0J aWYgKCFzby0+ZHJvcFBpbikKLQl7Ci0JCS8qIEp1c3QgZHJvcCB0aGUgbG9jayAobm90IHRoZSBw aW4pICovCi0JCV9idF91bmxvY2tidWYocmVsLCBzby0+Y3VyclBvcy5idWYpOwotCQlyZXR1cm47 Ci0JfQorI2lmIGRlZmluZWQoVVNFX1ZBTEdSSU5EKQorCVBhZ2UJCXBhZ2UgPSBCdWZmZXJHZXRQ YWdlKGJ1Zik7CiAKLQkvKgotCSAqIERyb3AgYm90aCB0aGUgbG9jayBhbmQgdGhlIHBpbi4KLQkg KgotCSAqIEhhdmUgdG8gc2V0IHNvLT5jdXJyUG9zLmxzbiBzbyB0aGF0IF9idF9raWxsaXRlbXMg aGFzIGEgd2F5IHRvIGRldGVjdAotCSAqIHdoZW4gY29uY3VycmVudCBoZWFwIFRJRCByZWN5Y2xp bmcgYnkgVkFDVVVNIG1pZ2h0IGhhdmUgdGFrZW4gcGxhY2UuCi0JICovCi0Jc28tPmN1cnJQb3Mu bHNuID0gQnVmZmVyR2V0TFNOQXRvbWljKHNvLT5jdXJyUG9zLmJ1Zik7Ci0JX2J0X3JlbGJ1Zihy ZWwsIHNvLT5jdXJyUG9zLmJ1Zik7Ci0Jc28tPmN1cnJQb3MuYnVmID0gSW52YWxpZEJ1ZmZlcjsK KwlWQUxHUklORF9DSEVDS19NRU1fSVNfREVGSU5FRChwYWdlLCBCTENLU1opOworI2VuZGlmCisK KwlpbmRleGFtX3V0aWxfdW5sb2NrX2JhdGNoKHNjYW4sIGJhdGNoLCBidWYpOworCisjaWYgZGVm aW5lZChVU0VfVkFMR1JJTkQpCisJaWYgKCFSZWxhdGlvblVzZXNMb2NhbEJ1ZmZlcnMoc2Nhbi0+ aW5kZXhSZWxhdGlvbikpCisJCVZBTEdSSU5EX01BS0VfTUVNX05PQUNDRVNTKHBhZ2UsIEJMQ0tT Wik7CisjZW5kaWYKIH0KIAogLyoKQEAgLTg2MCwyNiArODU1LDI1IEBAIF9idF9jb21wYXJlKFJl bGF0aW9uIHJlbCwKIH0KIAogLyoKLSAqCV9idF9maXJzdCgpIC0tIEZpbmQgdGhlIGZpcnN0IGl0 ZW0gaW4gYSBzY2FuLgorICoJX2J0X2ZpcnN0KCkgLS0gRmluZCB0aGUgZmlyc3QgYmF0Y2ggaW4g YSBzY2FuLgogICoKICAqCQlXZSBuZWVkIHRvIGJlIGNsZXZlciBhYm91dCB0aGUgZGlyZWN0aW9u IG9mIHNjYW4sIHRoZSBzZWFyY2gKLSAqCQljb25kaXRpb25zLCBhbmQgdGhlIHRyZWUgb3JkZXJp bmcuICBXZSBmaW5kIHRoZSBmaXJzdCBpdGVtIChvciwKLSAqCQlpZiBiYWNrd2FyZHMgc2Nhbiwg dGhlIGxhc3QgaXRlbSkgaW4gdGhlIHRyZWUgdGhhdCBzYXRpc2ZpZXMgdGhlCi0gKgkJcXVhbGlm aWNhdGlvbnMgaW4gdGhlIHNjYW4ga2V5LiAgT24gc3VjY2VzcyBleGl0LCBkYXRhIGFib3V0IHRo ZQotICoJCW1hdGNoaW5nIHR1cGxlKHMpIG9uIHRoZSBwYWdlIGhhcyBiZWVuIGxvYWRlZCBpbnRv IHNvLT5jdXJyUG9zLiAgV2UnbGwKLSAqCQlkcm9wIGFsbCBsb2NrcyBhbmQgaG9sZCBvbnRvIGEg cGluIG9uIHBhZ2UncyBidWZmZXIsIGV4Y2VwdCBkdXJpbmcKLSAqCQlzby0+ZHJvcFBpbiBzY2Fu cywgd2hlbiB3ZSBkcm9wIGJvdGggdGhlIGxvY2sgYW5kIHRoZSBwaW4uCi0gKgkJX2J0X3JldHVy bml0ZW0gc2V0cyB0aGUgbmV4dCBpdGVtIHRvIHJldHVybiB0byBzY2FuIG9uIHN1Y2Nlc3MgZXhp dC4KKyAqCQljb25kaXRpb25zLCBhbmQgdGhlIHRyZWUgb3JkZXJpbmcuICBXZSBmaW5kIHRoZSBm aXJzdCBsZWFmIHBhZ2UgKG9yCisgKgkJdGhlIGxhc3QgbGVhZiBwYWdlLCB3aGVuIHNjYW5uaW5n IGJhY2t3YXJkcykgaW4gdGhlIHRyZWUgd2l0aCBhdCBsZWFzdAorICoJCW9uZSB0dXBsZSB0aGF0 IHNhdGlzZmllcyB0aGUgcXVhbGlmaWNhdGlvbnMgaW4gdGhlIHNjYW4ga2V5LiAgT24KKyAqCQlz dWNjZXNzIGV4aXQsIHdlIHJldHVybiBhIG5ldyBiYXRjaCB3aXRoIHRoYXQgcGFnZSdzIG1hdGNo aW5nIGl0ZW1zLgogICoKLSAqIElmIHRoZXJlIGFyZSBubyBtYXRjaGluZyBpdGVtcyBpbiB0aGUg aW5kZXgsIHdlIHJldHVybiBmYWxzZSwgd2l0aCBubwotICogcGlucyBvciBsb2NrcyBoZWxkLiAg c28tPmN1cnJQb3Mgd2lsbCByZW1haW4gaW52YWxpZC4KKyAqIElmIHRoZXJlIGFyZSBubyBtYXRj aGluZyBpdGVtcyBpbiB0aGUgaW5kZXggKGluIHRoZSBnaXZlbiBzY2FuIGRpcmVjdGlvbiksCisg KiB3ZSBqdXN0IHJldHVybiBOVUxMLiAgTm90ZSB0aGF0IHJldHVybmluZyBOVUxMIGRvZXNuJ3Qg bmVjZXNzYXJpbHkgbWVhbiB0aGUKKyAqIGVuZCBvZiB0aGUgdG9wLWxldmVsIHNjYW47IGNhbGxl ciBzaG91bGQgY2hlY2sgc28tPm5lZWRQcmltU2NhbiB0bworICogZGV0ZXJtaW5lIGlmIGFub3Ro ZXIgcHJpbWl0aXZlIGluZGV4IHNjYW4gaXMgcmVxdWlyZWQuCiAgKgogICogTm90ZSB0aGF0IHNj YW4tPmtleURhdGFbXSwgYW5kIHRoZSBzby0+a2V5RGF0YVtdIHNjYW5rZXkgYnVpbHQgZnJvbSBp dCwKICAqIGFyZSBib3RoIHNlYXJjaC10eXBlIHNjYW5rZXlzIChzZWUgbmJ0cmVlL1JFQURNRSBm b3IgbW9yZSBhYm91dCB0aGlzKS4KICAqIFdpdGhpbiB0aGlzIHJvdXRpbmUsIHdlIGJ1aWxkIGEg dGVtcG9yYXJ5IGluc2VydGlvbi10eXBlIHNjYW5rZXkgdG8gdXNlCiAgKiBpbiBsb2NhdGluZyB0 aGUgc2NhbiBzdGFydCBwb3NpdGlvbi4KICAqLwotYm9vbAorSW5kZXhTY2FuQmF0Y2gKIF9idF9m aXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogewogCVJlbGF0aW9u CXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247CkBAIC04OTIsOCArODg2LDggQEAgX2J0X2ZpcnN0 KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJU3RyYXRlZ3lOdW1iZXIg c3RyYXRfdG90YWwgPSBJbnZhbGlkU3RyYXRlZ3k7CiAJQmxvY2tOdW1iZXIgYmxrbm8gPSBJbnZh bGlkQmxvY2tOdW1iZXIsCiAJCQkJbGFzdGN1cnJibGtubzsKLQotCUFzc2VydCghQlRTY2FuUG9z SXNWYWxpZChzby0+Y3VyclBvcykpOworCUluZGV4U2NhbkJhdGNoIGZpcnN0YmF0Y2g7CisJQlRC YXRjaERhdGEgKmJ0Zmlyc3RiYXRjaDsKIAogCS8qCiAJICogRXhhbWluZSB0aGUgc2NhbiBrZXlz IGFuZCBlbGltaW5hdGUgYW55IHJlZHVuZGFudCBrZXlzOyBhbHNvIG1hcmsgdGhlCkBAIC05MDks NyArOTAzLDcgQEAgX2J0X2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBk aXIpCiAJewogCQlBc3NlcnQoIXNvLT5uZWVkUHJpbVNjYW4pOwogCQlfYnRfcGFyYWxsZWxfZG9u ZShzY2FuKTsKLQkJcmV0dXJuIGZhbHNlOworCQlyZXR1cm4gTlVMTDsKIAl9CiAKIAkvKgpAQCAt OTE4LDcgKzkxMiw3IEBAIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rp b24gZGlyKQogCSAqLwogCWlmIChzY2FuLT5wYXJhbGxlbF9zY2FuICE9IE5VTEwgJiYKIAkJIV9i dF9wYXJhbGxlbF9zZWl6ZShzY2FuLCAmYmxrbm8sICZsYXN0Y3VycmJsa25vLCB0cnVlKSkKLQkJ cmV0dXJuIGZhbHNlOworCQlyZXR1cm4gTlVMTDsJCQkvKiBkZWZpbml0ZWx5IGRvbmUgKHNvLT5u ZWVkUHJpbVNjYW4gaXMgdW5zZXQpICovCiAKIAkvKgogCSAqIEluaXRpYWxpemUgdGhlIHNjYW4n cyBhcnJheXMgKGlmIGFueSkgZm9yIHRoZSBjdXJyZW50IHNjYW4gZGlyZWN0aW9uCkBAIC05Mzgs MTEgKzkzMiw3IEBAIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24g ZGlyKQogCQlBc3NlcnQoIXNvLT5uZWVkUHJpbVNjYW4pOwogCQlBc3NlcnQoYmxrbm8gIT0gUF9O T05FKTsKIAotCQlpZiAoIV9idF9yZWFkbmV4dHBhZ2Uoc2NhbiwgYmxrbm8sIGxhc3RjdXJyYmxr bm8sIGRpciwgdHJ1ZSkpCi0JCQlyZXR1cm4gZmFsc2U7Ci0KLQkJX2J0X3JldHVybml0ZW0oc2Nh biwgc28pOwotCQlyZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIF9idF9yZWFkbmV4dHBhZ2Uoc2Nhbiwg Ymxrbm8sIGxhc3RjdXJyYmxrbm8sIGRpciwgdHJ1ZSk7CiAJfQogCiAJLyoKQEAgLTE1MDIsMTcg KzE0OTIsMjEgQEAgX2J0X2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBk aXIpCiAJCWRlZmF1bHQ6CiAJCQkvKiBjYW4ndCBnZXQgaGVyZSwgYnV0IGtlZXAgY29tcGlsZXIg cXVpZXQgKi8KIAkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgc3RyYXRfdG90YWw6ICVkIiwg KGludCkgc3RyYXRfdG90YWwpOwotCQkJcmV0dXJuIGZhbHNlOworCQkJcmV0dXJuIE5VTEw7CiAJ fQogCisJLyogQWxsb2NhdGUgc3BhY2UgZm9yIGZpcnN0IGJhdGNoIGJlZm9yZSBsb2NraW5nIGFu eXRoaW5nICovCisJZmlyc3RiYXRjaCA9IGluZGV4YW1fdXRpbF9hbGxvY19iYXRjaChzY2FuKTsK KwlidGZpcnN0YmF0Y2ggPSBCVEJhdGNoR2V0RGF0YShzY2FuLCBmaXJzdGJhdGNoKTsKKwogCS8q CiAJICogVXNlIHRoZSBtYW51ZmFjdHVyZWQgaW5zZXJ0aW9uIHNjYW4ga2V5IHRvIGRlc2NlbmQg dGhlIHRyZWUgYW5kCiAJICogcG9zaXRpb24gb3Vyc2VsdmVzIG9uIHRoZSB0YXJnZXQgbGVhZiBw YWdlLgogCSAqLwogCUFzc2VydChTY2FuRGlyZWN0aW9uSXNCYWNrd2FyZChkaXIpID09IGluc2tl eS5iYWNrd2FyZCk7Ci0JX2J0X3NlYXJjaChyZWwsIE5VTEwsICZpbnNrZXksICZzby0+Y3VyclBv cy5idWYsIEJUX1JFQUQsIGZhbHNlKTsKKwlfYnRfc2VhcmNoKHJlbCwgTlVMTCwgJmluc2tleSwg JmJ0Zmlyc3RiYXRjaC0+YnVmLCBCVF9SRUFELCBmYWxzZSk7CiAKLQlpZiAoIUJ1ZmZlcklzVmFs aWQoc28tPmN1cnJQb3MuYnVmKSkKKwlpZiAodW5saWtlbHkoIUJ1ZmZlcklzVmFsaWQoYnRmaXJz dGJhdGNoLT5idWYpKSkKIAl7CiAJCUFzc2VydCghc28tPm5lZWRQcmltU2Nhbik7CiAKQEAgLTE1 MjgsMjIgKzE1MjIsMjMgQEAgX2J0X2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVj dGlvbiBkaXIpCiAJCWlmIChJc29sYXRpb25Jc1NlcmlhbGl6YWJsZSgpKQogCQl7CiAJCQlQcmVk aWNhdGVMb2NrUmVsYXRpb24ocmVsLCBzY2FuLT54c19zbmFwc2hvdCk7Ci0JCQlfYnRfc2VhcmNo KHJlbCwgTlVMTCwgJmluc2tleSwgJnNvLT5jdXJyUG9zLmJ1ZiwgQlRfUkVBRCwgZmFsc2UpOwor CQkJX2J0X3NlYXJjaChyZWwsIE5VTEwsICZpbnNrZXksICZidGZpcnN0YmF0Y2gtPmJ1ZiwgQlRf UkVBRCwgZmFsc2UpOwogCQl9CiAKLQkJaWYgKCFCdWZmZXJJc1ZhbGlkKHNvLT5jdXJyUG9zLmJ1 ZikpCisJCWlmICghQnVmZmVySXNWYWxpZChidGZpcnN0YmF0Y2gtPmJ1ZikpCiAJCXsKIAkJCV9i dF9wYXJhbGxlbF9kb25lKHNjYW4pOwotCQkJcmV0dXJuIGZhbHNlOworCQkJaW5kZXhhbV91dGls X3JlbGVhc2VfYmF0Y2goc2NhbiwgZmlyc3RiYXRjaCk7CisJCQlyZXR1cm4gTlVMTDsKIAkJfQog CX0KIAogCS8qIHBvc2l0aW9uIHRvIHRoZSBwcmVjaXNlIGl0ZW0gb24gdGhlIHBhZ2UgKi8KLQlv ZmZudW0gPSBfYnRfYmluc3JjaChyZWwsICZpbnNrZXksIHNvLT5jdXJyUG9zLmJ1Zik7CisJb2Zm bnVtID0gX2J0X2JpbnNyY2gocmVsLCAmaW5za2V5LCBidGZpcnN0YmF0Y2gtPmJ1Zik7CiAKIAkv KgogCSAqIE5vdyBsb2FkIGRhdGEgZnJvbSB0aGUgZmlyc3QgcGFnZSBvZiB0aGUgc2NhbiAodXN1 YWxseSB0aGUgcGFnZQotCSAqIGN1cnJlbnRseSBpbiBzby0+Y3VyclBvcy5idWYpLgorCSAqIGN1 cnJlbnRseSBpbiBmaXJzdGJhdGNoLmJ1ZikuCiAJICoKIAkgKiBJZiBpbnNrZXkubmV4dGtleSA9 IGZhbHNlIGFuZCBpbnNrZXkuYmFja3dhcmQgPSBmYWxzZSwgb2ZmbnVtIGlzCiAJICogcG9zaXRp b25lZCBhdCB0aGUgZmlyc3Qgbm9uLXBpdm90IHR1cGxlID49IGluc2tleS5zY2Fua2V5cy4KQEAg LTE1NjEsMTY0ICsxNTU2LDcyIEBAIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5E aXJlY3Rpb24gZGlyKQogCSAqIGZvciB0aGUgcGFnZS4gIEZvciBleGFtcGxlLCB3aGVuIGluc2tl eSBpcyBib3RoIDwgdGhlIGxlYWYgcGFnZSdzIGhpZ2gKIAkgKiBrZXkgYW5kID4gYWxsIG9mIGl0 cyBub24tcGl2b3QgdHVwbGVzLCBvZmZudW0gd2lsbCBiZSAibWF4b2ZmICsgMSIuCiAJICovCi0J aWYgKCFfYnRfcmVhZGZpcnN0cGFnZShzY2FuLCBvZmZudW0sIGRpcikpCi0JCXJldHVybiBmYWxz ZTsKLQotCV9idF9yZXR1cm5pdGVtKHNjYW4sIHNvKTsKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4g X2J0X3JlYWRmaXJzdHBhZ2Uoc2NhbiwgZmlyc3RiYXRjaCwgb2ZmbnVtLCBkaXIpOwogfQogCiAv KgotICoJX2J0X25leHQoKSAtLSBHZXQgdGhlIG5leHQgaXRlbSBpbiBhIHNjYW4uCisgKglfYnRf bmV4dCgpIC0tIEdldCB0aGUgbmV4dCBiYXRjaCBpbiBhIHNjYW4uCiAgKgotICoJCU9uIGVudHJ5 LCBzby0+Y3VyclBvcyBkZXNjcmliZXMgdGhlIGN1cnJlbnQgcGFnZSwgd2hpY2ggbWF5IGJlIHBp bm5lZAotICoJCWJ1dCBpcyBub3QgbG9ja2VkLCBhbmQgc28tPmN1cnJQb3MuaXRlbUluZGV4IGlk ZW50aWZpZXMgd2hpY2ggaXRlbSB3YXMKLSAqCQlwcmV2aW91c2x5IHJldHVybmVkLgorICoJCU9u IGVudHJ5LCBwcmlvcmJhdGNoIGRlc2NyaWJlcyB0aGUgYmF0Y2ggdGhhdCB3YXMgbGFzdCByZXR1 cm5lZCBieQorICoJCWJ0Z2V0YmF0Y2guICBXZSdsbCB1c2UgdGhlIHByaW9yIGJhdGNoJ3MgcG9z aXRpb25pbmcgaW5mb3JtYXRpb24gdG8KKyAqCQlkZWNpZGUgd2hpY2ggbGVhZiBwYWdlIHRvIHJl YWQgbmV4dC4KICAqCi0gKgkJT24gc3VjY2VzcyBleGl0LCBzby0+Y3VyclBvcyBpcyB1cGRhdGVk IGFzIG5lZWRlZCwgYW5kIF9idF9yZXR1cm5pdGVtCi0gKgkJc2V0cyB0aGUgbmV4dCBpdGVtIHRv IHJldHVybiB0byB0aGUgc2Nhbi4gIHNvLT5jdXJyUG9zIHJlbWFpbnMgdmFsaWQuCi0gKgotICoJ CU9uIGZhaWx1cmUgZXhpdCAobm8gbW9yZSB0dXBsZXMpLCB3ZSBpbnZhbGlkYXRlIHNvLT5jdXJy UG9zLiAgSXQnbGwKLSAqCQlzdGlsbCBiZSBwb3NzaWJsZSBmb3IgdGhlIHNjYW4gdG8gcmV0dXJu IHR1cGxlcyBieSBjaGFuZ2luZyBkaXJlY3Rpb24sCi0gKgkJdGhvdWdoIHdlJ2xsIG5lZWQgdG8g Y2FsbCBfYnRfZmlyc3QgYW5ldyBpbiB0aGF0IG90aGVyIGRpcmVjdGlvbi4KKyAqCQlPbiBzdWNj ZXNzIGV4aXQsIHJldHVybnMgdGhlIG5leHQgYmF0Y2guICBUaGVyZSBtdXN0IGJlIGF0IGxlYXN0 IG9uZQorICoJCW1hdGNoaW5nIHR1cGxlIG9uIGFueSByZXR1cm5lZCBiYXRjaCAoZWxzZSB3ZSdk IGp1c3QgcmV0dXJuIE5VTEwpLgorICoJCU5vdGUgdGhhdCByZXR1cm5pbmcgTlVMTCBkb2Vzbid0 IG5lY2Vzc2FyaWx5IG1lYW4gdGhlIGVuZCBvZiB0aGUKKyAqCQl0b3AtbGV2ZWwgc2NhbjsgY2Fs bGVyIHNob3VsZCBjaGVjayBzby0+bmVlZFByaW1TY2FuIHRvIGRldGVybWluZQorICoJCWlmIGFu b3RoZXIgcHJpbWl0aXZlIGluZGV4IHNjYW4gaXMgcmVxdWlyZWQuCiAgKi8KLWJvb2wKLV9idF9u ZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCitJbmRleFNjYW5CYXRj aAorX2J0X25leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgSW5kZXhT Y2FuQmF0Y2ggcHJpb3JiYXRjaCkKIHsKLQlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVl KSBzY2FuLT5vcGFxdWU7Ci0KLQlBc3NlcnQoQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykp OwotCi0JLyoKLQkgKiBBZHZhbmNlIHRvIG5leHQgdHVwbGUgb24gY3VycmVudCBwYWdlOyBvciBp ZiB0aGVyZSdzIG5vIG1vcmUsIHRyeSB0bwotCSAqIHN0ZXAgdG8gdGhlIG5leHQgcGFnZSB3aXRo IGRhdGEuCi0JICovCi0JaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKLQl7Ci0JCWlm ICgrK3NvLT5jdXJyUG9zLml0ZW1JbmRleCA+IHNvLT5jdXJyUG9zLmxhc3RJdGVtKQotCQl7Ci0J CQlpZiAoIV9idF9zdGVwcGFnZShzY2FuLCBkaXIpKQotCQkJCXJldHVybiBmYWxzZTsKLQkJfQot CX0KLQllbHNlCi0JewotCQlpZiAoLS1zby0+Y3VyclBvcy5pdGVtSW5kZXggPCBzby0+Y3VyclBv cy5maXJzdEl0ZW0pCi0JCXsKLQkJCWlmICghX2J0X3N0ZXBwYWdlKHNjYW4sIGRpcikpCi0JCQkJ cmV0dXJuIGZhbHNlOwotCQl9Ci0JfQotCi0JX2J0X3JldHVybml0ZW0oc2Nhbiwgc28pOwotCXJl dHVybiB0cnVlOwotfQotCi0vKgotICogUmV0dXJuIHRoZSBpbmRleCBpdGVtIGZyb20gc28tPmN1 cnJQb3MuaXRlbXNbc28tPmN1cnJQb3MuaXRlbUluZGV4XSB0byB0aGUKLSAqIGluZGV4IHNjYW4g Ynkgc2V0dGluZyB0aGUgcmVsZXZhbnQgZmllbGRzIGluIGNhbGxlcidzIGluZGV4IHNjYW4gZGVz Y3JpcHRvcgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQKLV9idF9yZXR1cm5pdGVtKEluZGV4U2Nh bkRlc2Mgc2NhbiwgQlRTY2FuT3BhcXVlIHNvKQotewotCUJUU2NhblBvc0l0ZW0gKmN1cnJJdGVt ID0gJnNvLT5jdXJyUG9zLml0ZW1zW3NvLT5jdXJyUG9zLml0ZW1JbmRleF07Ci0KLQkvKiBNb3N0 IHJlY2VudCBfYnRfcmVhZHBhZ2UgbXVzdCBoYXZlIHN1Y2NlZWRlZCAqLwotCUFzc2VydChCVFNj YW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSk7Ci0JQXNzZXJ0KHNvLT5jdXJyUG9zLml0ZW1JbmRl eCA+PSBzby0+Y3VyclBvcy5maXJzdEl0ZW0pOwotCUFzc2VydChzby0+Y3VyclBvcy5pdGVtSW5k ZXggPD0gc28tPmN1cnJQb3MubGFzdEl0ZW0pOwotCi0JLyogUmV0dXJuIG5leHQgaXRlbSwgcGVy IGFtZ2V0dHVwbGUgY29udHJhY3QgKi8KLQlzY2FuLT54c19oZWFwdGlkID0gY3Vyckl0ZW0tPmhl YXBUaWQ7Ci0JaWYgKHNvLT5jdXJyVHVwbGVzKQotCQlzY2FuLT54c19pdHVwID0gKEluZGV4VHVw bGUpIChzby0+Y3VyclR1cGxlcyArIGN1cnJJdGVtLT50dXBsZU9mZnNldCk7Ci19Ci0KLS8qCi0g KglfYnRfc3RlcHBhZ2UoKSAtLSBTdGVwIHRvIG5leHQgcGFnZSBjb250YWluaW5nIHZhbGlkIGRh dGEgZm9yIHNjYW4KLSAqCi0gKiBXcmFwcGVyIG9uIF9idF9yZWFkbmV4dHBhZ2UgdGhhdCBwZXJm b3JtcyBmaW5hbCBzdGVwcyBmb3IgdGhlIGN1cnJlbnQgcGFnZS4KLSAqCi0gKiBPbiBlbnRyeSwg c28tPmN1cnJQb3MgbXVzdCBiZSB2YWxpZC4gIEl0cyBidWZmZXIgd2lsbCBiZSBwaW5uZWQsIHRo b3VnaAotICogbmV2ZXIgbG9ja2VkLiAoQWN0dWFsbHksIHdoZW4gc28tPmRyb3BQaW4gdGhlcmUg d29uJ3QgZXZlbiBiZSBhIHBpbiBoZWxkLAotICogdGhvdWdoIHNvLT5jdXJyUG9zLmN1cnJQYWdl IG11c3Qgc3RpbGwgYmUgc2V0IHRvIGEgdmFsaWQgYmxvY2sgbnVtYmVyLikKLSAqLwotc3RhdGlj IGJvb2wKLV9idF9zdGVwcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGly KQotewotCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKKwlC VEJhdGNoRGF0YSAqYnRwcmlvcmJhdGNoID0gQlRCYXRjaEdldERhdGEoc2NhbiwgcHJpb3JiYXRj aCk7CiAJQmxvY2tOdW1iZXIgYmxrbm8sCiAJCQkJbGFzdGN1cnJibGtubzsKLQotCUFzc2VydChC VFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSk7Ci0KLQkvKiBCZWZvcmUgbGVhdmluZyBjdXJy ZW50IHBhZ2UsIGRlYWwgd2l0aCBhbnkga2lsbGVkIGl0ZW1zICovCi0JaWYgKHNvLT5udW1LaWxs ZWQgPiAwKQotCQlfYnRfa2lsbGl0ZW1zKHNjYW4pOworCWJvb2wJCW1vcmVJbkRpcjsKIAogCS8q Ci0JICogQmVmb3JlIHdlIG1vZGlmeSBjdXJyUG9zLCBtYWtlIGEgY29weSBvZiB0aGUgcGFnZSBk YXRhIGlmIHRoZXJlIHdhcyBhCi0JICogbWFyayBwb3NpdGlvbiB0aGF0IG5lZWRzIGl0LgorCSAq IFRoZSBjb3JlIGNvZGUgbXVzdCBkZWFsIHdpdGggY3Jvc3MtYmF0Y2ggc2NhbiBkaXJlY3Rpb24g Y2hhbmdlcyBmb3IgdXMuCisJICogQSBiYXRjaCBtYW5hZ2VtZW50IHJvdXRpbmUgdGhhdCBmbGlw cyBwcmlvcmJhdGNoJ3Mgc2NhbiBkaXJlY3Rpb24gKGFuZAorCSAqIGNhbGxzIGJ0cG9zcmVzZXQg dG8gZGVhbCB3aXRoIHRoZSBzY2FuJ3MgYXJyYXkga2V5cykgaXMgdXNlZCBmb3IgdGhpcy4KIAkg Ki8KLQlpZiAoc28tPm1hcmtJdGVtSW5kZXggPj0gMCkKLQl7Ci0JCS8qIGJ1bXAgcGluIG9uIGN1 cnJlbnQgYnVmZmVyIGZvciBhc3NpZ25tZW50IHRvIG1hcmsgYnVmZmVyICovCi0JCWlmIChCVFNj YW5Qb3NJc1Bpbm5lZChzby0+Y3VyclBvcykpCi0JCQlJbmNyQnVmZmVyUmVmQ291bnQoc28tPmN1 cnJQb3MuYnVmKTsKLQkJbWVtY3B5KCZzby0+bWFya1BvcywgJnNvLT5jdXJyUG9zLAotCQkJICAg b2Zmc2V0b2YoQlRTY2FuUG9zRGF0YSwgaXRlbXNbMV0pICsKLQkJCSAgIHNvLT5jdXJyUG9zLmxh c3RJdGVtICogc2l6ZW9mKEJUU2NhblBvc0l0ZW0pKTsKLQkJaWYgKHNvLT5tYXJrVHVwbGVzKQot CQkJbWVtY3B5KHNvLT5tYXJrVHVwbGVzLCBzby0+Y3VyclR1cGxlcywKLQkJCQkgICBzby0+Y3Vy clBvcy5uZXh0VHVwbGVPZmZzZXQpOwotCQlzby0+bWFya1Bvcy5pdGVtSW5kZXggPSBzby0+bWFy a0l0ZW1JbmRleDsKLQkJc28tPm1hcmtJdGVtSW5kZXggPSAtMTsKLQotCQkvKgotCQkgKiBJZiB3 ZSdyZSBqdXN0IGFib3V0IHRvIHN0YXJ0IHRoZSBuZXh0IHByaW1pdGl2ZSBpbmRleCBzY2FuCi0J CSAqIChwb3NzaWJsZSB3aXRoIGEgc2NhbiB0aGF0IGhhcyBhcnJheXMga2V5cywgYW5kIG5lZWRz IHRvIHNraXAgdG8KLQkJICogY29udGludWUgaW4gdGhlIGN1cnJlbnQgc2NhbiBkaXJlY3Rpb24p LCBtb3JlTGVmdC9tb3JlUmlnaHQgb25seQotCQkgKiBpbmRpY2F0ZSB0aGUgZW5kIG9mIHRoZSBj dXJyZW50IHByaW1pdGl2ZSBpbmRleCBzY2FuLiAgVGhleSBtdXN0Ci0JCSAqIG5ldmVyIGJlIHRh a2VuIHRvIGluZGljYXRlIHRoYXQgdGhlIHRvcC1sZXZlbCBpbmRleCBzY2FuIGhhcyBlbmRlZAot CQkgKiAodGhhdCB3b3VsZCBiZSB3cm9uZykuCi0JCSAqCi0JCSAqIFdlIGNvdWxkIGhhbmRsZSB0 aGlzIGNhc2UgYnkgdHJlYXRpbmcgdGhlIGN1cnJlbnQgYXJyYXkga2V5cyBhcwotCQkgKiBtYXJr UG9zIHN0YXRlLiAgQnV0IGRlcGVuZGluZyBvbiB0aGUgY3VycmVudCBhcnJheSBzdGF0ZSBsaWtl IHRoaXMKLQkJICogd291bGQgYWRkIGNvbXBsZXhpdHkuICBJbnN0ZWFkLCB3ZSBqdXN0IHVuc2V0 IG1hcmtQb3MncyBjb3B5IG9mCi0JCSAqIG1vcmVSaWdodCBvciBtb3JlTGVmdCAod2hpY2hldmVy IG1pZ2h0IGJlIGFmZmVjdGVkKSwgd2hpbGUgbWFraW5nCi0JCSAqIGJ0cmVzdHJwb3MgcmVzZXQg dGhlIHNjYW4ncyBhcnJheXMgdG8gdGhlaXIgaW5pdGlhbCBzY2FuIHBvc2l0aW9ucy4KLQkJICog SW4gZWZmZWN0LCBidHJlc3RycG9zIGxlYXZlcyBhZHZhbmNpbmcgdGhlIGFycmF5cyB1cCB0byB0 aGUgZmlyc3QKLQkJICogX2J0X3JlYWRwYWdlIGNhbGwgKHRoYXQgdGFrZXMgcGxhY2UgYWZ0ZXIg aXQgaGFzIHJlc3RvcmVkIG1hcmtQb3MpLgotCQkgKi8KLQkJaWYgKHNvLT5uZWVkUHJpbVNjYW4p Ci0JCXsKLQkJCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKHNvLT5jdXJyUG9zLmRpcikpCi0J CQkJc28tPm1hcmtQb3MubW9yZVJpZ2h0ID0gdHJ1ZTsKLQkJCWVsc2UKLQkJCQlzby0+bWFya1Bv cy5tb3JlTGVmdCA9IHRydWU7Ci0JCX0KLQotCQkvKiBtYXJrL3Jlc3RvcmUgbm90IHN1cHBvcnRl ZCBieSBwYXJhbGxlbCBzY2FucyAqLwotCQlBc3NlcnQoIXNjYW4tPnBhcmFsbGVsX3NjYW4pOwot CX0KLQotCUJUU2NhblBvc1VucGluSWZQaW5uZWQoc28tPmN1cnJQb3MpOworCUFzc2VydChwcmlv cmJhdGNoLT5kaXIgPT0gZGlyKTsKIAogCS8qIFdhbGsgdG8gdGhlIG5leHQgcGFnZSB3aXRoIGRh dGEgKi8KIAlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpKQotCQlibGtubyA9IHNvLT5j dXJyUG9zLm5leHRQYWdlOworCQlibGtubyA9IGJ0cHJpb3JiYXRjaC0+bmV4dFBhZ2U7CiAJZWxz ZQotCQlibGtubyA9IHNvLT5jdXJyUG9zLnByZXZQYWdlOwotCWxhc3RjdXJyYmxrbm8gPSBzby0+ Y3VyclBvcy5jdXJyUGFnZTsKKwkJYmxrbm8gPSBidHByaW9yYmF0Y2gtPnByZXZQYWdlOworCWxh c3RjdXJyYmxrbm8gPSBidHByaW9yYmF0Y2gtPmN1cnJQYWdlOworCW1vcmVJbkRpciA9IFNjYW5E aXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSA/CisJCWJ0cHJpb3JiYXRjaC0+bW9yZVJpZ2h0IDogYnRw cmlvcmJhdGNoLT5tb3JlTGVmdDsKIAogCS8qCi0JICogQ2FuY2VsIHByaW1pdGl2ZSBpbmRleCBz Y2FucyB0aGF0IHdlcmUgc2NoZWR1bGVkIHdoZW4gdGhlIGNhbGwgdG8KLQkgKiBfYnRfcmVhZHBh Z2UgZm9yIGN1cnJQb3MgaGFwcGVuZWQgdG8gdXNlIHRoZSBvcHBvc2l0ZSBkaXJlY3Rpb24gdG8g dGhlCi0JICogb25lIHRoYXQgd2UncmUgc3RlcHBpbmcgaW4gbm93LiAgKEl0J3Mgb2theSB0byBs ZWF2ZSB0aGUgc2NhbidzIGFycmF5Ci0JICoga2V5cyBhcy1pcywgc2luY2UgdGhlIG5leHQgX2J0 X3JlYWRwYWdlIHdpbGwgYWR2YW5jZSB0aGVtLikKKwkgKiBGb3IgYml0bWFwIHNjYW4gY2FsbGVy cywgcmVsZWFzZSB0aGUgcHJpb3IgYmF0Y2ggbm93IHNvIHRoYXQKKwkgKiBfYnRfcmVhZG5leHRw YWdlIGNhbiByZXVzZSBpdHMgbWVtb3J5LiAgVGhhdCB3YXkgYml0bWFwIHNjYW5zIG5ldmVyCisJ ICogbmVlZCBtb3JlIHRoYW4gb25lIGJhdGNoIGFsbG9jYXRpb24uCiAJICovCi0JaWYgKHNvLT5j dXJyUG9zLmRpciAhPSBkaXIpCi0JCXNvLT5uZWVkUHJpbVNjYW4gPSBmYWxzZTsKKwlpZiAoIXNj YW4tPnVzZWJhdGNocmluZykKKwkJaW5kZXhhbV91dGlsX3JlbGVhc2VfYmF0Y2goc2NhbiwgcHJp b3JiYXRjaCk7CisKKwlpZiAoYmxrbm8gPT0gUF9OT05FIHx8ICFtb3JlSW5EaXIpCisJeworCQkv KgorCQkgKiBwcmlvcmJhdGNoJ3MgcGFnZSBpcyBrbm93biB0byBiZSB0aGUgZmluYWwgbGVhZiBw YWdlIHdpdGggbWF0Y2hlcworCQkgKiBpbiB0aGlzIHNjYW4gZGlyZWN0aW9uIChpdHMgX2J0X3Jl YWRwYWdlIGNhbGwgZmlndXJlZCB0aGF0IG91dCkuCisJCSAqCisJCSAqIE5vdGU6IGlmIHNvLT5u ZWVkUHJpbVNjYW4gaXMgc2V0LCB0aGVuIHByaW9yYmF0Y2gncyBsZWFmIHBhZ2UgaXMKKwkJICog YWN0dWFsbHkganVzdCB0aGUgZmluYWwgcGFnZSBmb3IgdGhlIGN1cnJlbnQgcHJpbWl0aXZlIGlu ZGV4IHNjYW4KKwkJICogaW4gdGhpcyBzY2FuIGRpcmVjdGlvbiAodGhlIHNjYW4gd2lsbCBjb250 aW51ZSBpbiBfYnRfZmlyc3QpLgorCQkgKi8KKwkJX2J0X3BhcmFsbGVsX2RvbmUoc2Nhbik7CisJ CXJldHVybiBOVUxMOworCX0KKworCS8qIHBhcmFsbGVsIHNjYW4gbXVzdCBzZWl6ZSB0aGUgc2Nh biB0byBnZXQgbmV4dCBibGtubyAqLworCWlmIChzY2FuLT5wYXJhbGxlbF9zY2FuICE9IE5VTEwg JiYKKwkJIV9idF9wYXJhbGxlbF9zZWl6ZShzY2FuLCAmYmxrbm8sICZsYXN0Y3VycmJsa25vLCBm YWxzZSkpCisJCXJldHVybiBOVUxMOwkJCS8qIGRvbmUgaWZmIHNvLT5uZWVkUHJpbVNjYW4gd2Fz bid0IHNldCAqLwogCiAJcmV0dXJuIF9idF9yZWFkbmV4dHBhZ2Uoc2NhbiwgYmxrbm8sIGxhc3Rj dXJyYmxrbm8sIGRpciwgZmFsc2UpOwogfQpAQCAtMTczMiwxNzggKzE2MzUsMTY5IEBAIF9idF9z dGVwcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogICogdG8gc3Rv cCB0aGUgc2NhbiBvbiB0aGlzIHBhZ2UgYnkgY2FsbGluZyBfYnRfY2hlY2trZXlzIGFnYWluc3Qg dGhlIGhpZ2gKICAqIGtleS4gIFNlZSBfYnRfcmVhZHBhZ2UgZm9yIGZ1bGwgZGV0YWlscy4KICAq Ci0gKiBPbiBlbnRyeSwgc28tPmN1cnJQb3MgbXVzdCBiZSBwaW5uZWQgYW5kIGxvY2tlZCAoc28g b2ZmbnVtIHN0YXlzIHZhbGlkKS4KKyAqIE9uIGVudHJ5LCBmaXJzdGJhdGNoIG11c3QgYmUgcGlu bmVkIGFuZCBsb2NrZWQgKHNvIG9mZm51bSBzdGF5cyB2YWxpZCkuCiAgKiBQYXJhbGxlbCBzY2Fu IGNhbGxlcnMgbXVzdCBoYXZlIHNlaXplZCB0aGUgc2NhbiBiZWZvcmUgY2FsbGluZyBoZXJlLgog ICoKLSAqIE9uIGV4aXQsIHdlJ2xsIGhhdmUgdXBkYXRlZCBzby0+Y3VyclBvcyBhbmQgcmV0YWlu ZWQgbG9ja3MgYW5kIHBpbnMKLSAqIGFjY29yZGluZyB0byB0aGUgc2FtZSBydWxlcyBhcyB0aG9z ZSBsYWlkIG91dCBmb3IgX2J0X3JlYWRuZXh0cGFnZSBleGl0LgotICogTGlrZSBfYnRfcmVhZG5l eHRwYWdlLCBvdXIgcmV0dXJuIHZhbHVlIGluZGljYXRlcyBpZiB0aGVyZSBhcmUgYW55IG1hdGNo aW5nCi0gKiByZWNvcmRzIGluIHRoZSBnaXZlbiBkaXJlY3Rpb24uCisgKiBPbiBzdWNjZXNzIGV4 aXQsIHJldHVybnMgdW5sb2NrZWQgYmF0Y2ggY29udGFpbmluZyBkYXRhIGZyb20gdGhlIG5leHQg cGFnZQorICogdGhhdCBoYXMgYXQgbGVhc3Qgb25lIG1hdGNoaW5nIGl0ZW0uICBJZiB0aGVyZSBh cmUgbm8gbWF0Y2hpbmcgaXRlbXMgaW4gdGhlCisgKiBnaXZlbiBzY2FuIGRpcmVjdGlvbiwgd2Ug anVzdCByZXR1cm4gTlVMTC4gIE5vdGUgdGhhdCByZXR1cm5pbmcgTlVMTAorICogZG9lc24ndCBu ZWNlc3NhcmlseSBtZWFuIHRoZSBlbmQgb2YgdGhlIHRvcC1sZXZlbCBzY2FuOyBidGdldGJhdGNo IGFuZAorICogYnRnZXRiaXRtYXAgY2hlY2sgc28tPm5lZWRQcmltU2NhbiB0byBkZXRlcm1pbmUg aWYgYW5vdGhlciBwcmltaXRpdmUgaW5kZXgKKyAqIHNjYW4gaXMgcmVxdWlyZWQuCiAgKgogICog V2UgYWx3YXlzIHJlbGVhc2UgdGhlIHNjYW4gZm9yIGEgcGFyYWxsZWwgc2NhbiBjYWxsZXIsIHJl Z2FyZGxlc3Mgb2YKICAqIHN1Y2Nlc3Mgb3IgZmFpbHVyZTsgd2UnbGwgY2FsbCBfYnRfcGFyYWxs ZWxfcmVsZWFzZSBhcyBzb29uIGFzIHBvc3NpYmxlLgogICovCi1zdGF0aWMgYm9vbAotX2J0X3Jl YWRmaXJzdHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBPZmZzZXROdW1iZXIgb2ZmbnVtLCBTY2Fu RGlyZWN0aW9uIGRpcikKK3N0YXRpYyBJbmRleFNjYW5CYXRjaAorX2J0X3JlYWRmaXJzdHBhZ2Uo SW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBmaXJzdGJhdGNoLAorCQkJCSAgT2Zm c2V0TnVtYmVyIG9mZm51bSwgU2NhbkRpcmVjdGlvbiBkaXIpCiB7CiAJQlRTY2FuT3BhcXVlIHNv ID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOworCUJUQmF0Y2hEYXRhICpidGZpcnN0YmF0 Y2ggPSBCVEJhdGNoR2V0RGF0YShzY2FuLCBmaXJzdGJhdGNoKTsKKwlCbG9ja051bWJlciBibGtu bywKKwkJCQlsYXN0Y3VycmJsa25vOworCWJvb2wJCW1vcmVJbkRpcjsKIAotCXNvLT5udW1LaWxs ZWQgPSAwOwkJCS8qIGp1c3QgcGFyYW5vaWEgKi8KLQlzby0+bWFya0l0ZW1JbmRleCA9IC0xOwkJ LyogZGl0dG8gKi8KLQotCS8qIEluaXRpYWxpemUgc28tPmN1cnJQb3MgZm9yIHRoZSBmaXJzdCBw YWdlIChwYWdlIGluIHNvLT5jdXJyUG9zLmJ1ZikgKi8KKwkvKiBJbml0aWFsaXplIGZpcnN0YmF0 Y2gncyBwb3NpdGlvbiBmb3IgdGhlIGZpcnN0IHBhZ2UgKi8KIAlpZiAoc28tPm5lZWRQcmltU2Nh bikKIAl7CiAJCUFzc2VydChzby0+bnVtQXJyYXlLZXlzKTsKIAotCQlzby0+Y3VyclBvcy5tb3Jl TGVmdCA9IHRydWU7Ci0JCXNvLT5jdXJyUG9zLm1vcmVSaWdodCA9IHRydWU7CisJCWJ0Zmlyc3Ri YXRjaC0+bW9yZUxlZnQgPSB0cnVlOworCQlidGZpcnN0YmF0Y2gtPm1vcmVSaWdodCA9IHRydWU7 CiAJCXNvLT5uZWVkUHJpbVNjYW4gPSBmYWxzZTsKIAl9CiAJZWxzZSBpZiAoU2NhbkRpcmVjdGlv bklzRm9yd2FyZChkaXIpKQogCXsKLQkJc28tPmN1cnJQb3MubW9yZUxlZnQgPSBmYWxzZTsKLQkJ c28tPmN1cnJQb3MubW9yZVJpZ2h0ID0gdHJ1ZTsKKwkJYnRmaXJzdGJhdGNoLT5tb3JlTGVmdCA9 IGZhbHNlOworCQlidGZpcnN0YmF0Y2gtPm1vcmVSaWdodCA9IHRydWU7CiAJfQogCWVsc2UKIAl7 Ci0JCXNvLT5jdXJyUG9zLm1vcmVMZWZ0ID0gdHJ1ZTsKLQkJc28tPmN1cnJQb3MubW9yZVJpZ2h0 ID0gZmFsc2U7CisJCWJ0Zmlyc3RiYXRjaC0+bW9yZUxlZnQgPSB0cnVlOworCQlidGZpcnN0YmF0 Y2gtPm1vcmVSaWdodCA9IGZhbHNlOwogCX0KIAogCS8qCiAJICogQXR0ZW1wdCB0byBsb2FkIG1h dGNoaW5nIHR1cGxlcyBmcm9tIHRoZSBmaXJzdCBwYWdlLgogCSAqCi0JICogTm90ZSB0aGF0IF9i dF9yZWFkcGFnZSB3aWxsIGZpbmlzaCBpbml0aWFsaXppbmcgdGhlIHNvLT5jdXJyUG9zIGZpZWxk cy4KKwkgKiBOb3RlIHRoYXQgX2J0X3JlYWRwYWdlIHdpbGwgZmluaXNoIGluaXRpYWxpemluZyB0 aGUgZmlyc3RiYXRjaCBmaWVsZHMuCiAJICogX2J0X3JlYWRwYWdlIGFsc28gcmVsZWFzZXMgcGFy YWxsZWwgc2NhbiAoZXZlbiB3aGVuIGl0IHJldHVybnMgZmFsc2UpLgogCSAqLwotCWlmIChfYnRf cmVhZHBhZ2Uoc2NhbiwgZGlyLCBvZmZudW0sIHRydWUpKQorCWlmIChfYnRfcmVhZHBhZ2Uoc2Nh biwgZmlyc3RiYXRjaCwgZGlyLCBvZmZudW0sIHRydWUpKQogCXsKLQkJUmVsYXRpb24JcmVsID0g c2Nhbi0+aW5kZXhSZWxhdGlvbjsKLQotCQkvKgotCQkgKiBfYnRfcmVhZHBhZ2Ugc3VjY2VlZGVk LiAgRHJvcCB0aGUgbG9jayAoYW5kIG1heWJlIHRoZSBwaW4pIG9uCi0JCSAqIHNvLT5jdXJyUG9z LmJ1ZiBpbiBwcmVwYXJhdGlvbiBmb3IgYnRnZXR0dXBsZSByZXR1cm5pbmcgdHVwbGVzLgotCQkg Ki8KLQkJQXNzZXJ0KEJUU2NhblBvc0lzUGlubmVkKHNvLT5jdXJyUG9zKSk7Ci0JCV9idF9kcm9w X2xvY2tfYW5kX21heWJlX3BpbihyZWwsIHNvKTsKLQkJcmV0dXJuIHRydWU7CisJCS8qIF9idF9y ZWFkcGFnZSBzYXZlZCBvbmUgb3IgbW9yZSBtYXRjaGVzIGluIGZpcnN0YmF0Y2guaXRlbXNbXSAq LworCQlfYnRfYmF0Y2hfdW5sb2NrKHNjYW4sIGZpcnN0YmF0Y2gsIGJ0Zmlyc3RiYXRjaC0+YnVm KTsKKwkJcmV0dXJuIGZpcnN0YmF0Y2g7CiAJfQogCi0JLyogVGhlcmUncyBubyBhY3R1YWxseS1t YXRjaGluZyBkYXRhIG9uIHRoZSBwYWdlIGluIHNvLT5jdXJyUG9zLmJ1ZiAqLwotCV9idF91bmxv Y2tidWYoc2Nhbi0+aW5kZXhSZWxhdGlvbiwgc28tPmN1cnJQb3MuYnVmKTsKKwkvKiBUaGVyZSdz IG5vIGFjdHVhbGx5LW1hdGNoaW5nIGRhdGEgb24gdGhlIHBhZ2UgcmV0dXJuZWQgYnkgX2J0X3Nl YXJjaCAqLworCV9idF9yZWxidWYoc2Nhbi0+aW5kZXhSZWxhdGlvbiwgYnRmaXJzdGJhdGNoLT5i dWYpOwogCi0JLyogQ2FsbCBfYnRfcmVhZG5leHRwYWdlIHVzaW5nIGl0cyBfYnRfc3RlcHBhZ2Ug d3JhcHBlciBmdW5jdGlvbiAqLwotCWlmICghX2J0X3N0ZXBwYWdlKHNjYW4sIGRpcikpCi0JCXJl dHVybiBmYWxzZTsKKwkvKiBXYWxrIHRvIHRoZSBuZXh0IHBhZ2Ugd2l0aCBkYXRhICovCisJaWYg KFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKKwkJYmxrbm8gPSBidGZpcnN0YmF0Y2gtPm5l eHRQYWdlOworCWVsc2UKKwkJYmxrbm8gPSBidGZpcnN0YmF0Y2gtPnByZXZQYWdlOworCWxhc3Rj dXJyYmxrbm8gPSBidGZpcnN0YmF0Y2gtPmN1cnJQYWdlOworCW1vcmVJbkRpciA9IFNjYW5EaXJl Y3Rpb25Jc0ZvcndhcmQoZGlyKSA/CisJCWJ0Zmlyc3RiYXRjaC0+bW9yZVJpZ2h0IDogYnRmaXJz dGJhdGNoLT5tb3JlTGVmdDsKIAotCS8qIF9idF9yZWFkcGFnZSBmb3IgYSBsYXRlciBwYWdlIChu b3cgaW4gc28tPmN1cnJQb3MpIHN1Y2NlZWRlZCAqLwotCXJldHVybiB0cnVlOworCS8qIFJlbGVh c2UgZmlyc3RiYXRjaCAod2lsbCBiZSByZWN5Y2xlZCBpZiB3ZSByZWFjaCBfYnRfcmVhZG5leHRw YWdlKSAqLworCWluZGV4YW1fdXRpbF9yZWxlYXNlX2JhdGNoKHNjYW4sIGZpcnN0YmF0Y2gpOwor CisJaWYgKGJsa25vID09IFBfTk9ORSB8fCAhbW9yZUluRGlyKQorCXsKKwkJLyoKKwkJICogZmly c3RiYXRjaCBfYnRfcmVhZHBhZ2UgY2FsbCBlbmRlZCBzY2FuIGluIHRoaXMgZGlyZWN0aW9uICh0 aG91Z2gKKwkJICogaWYgc28tPm5lZWRQcmltU2NhbiB3YXMgc2V0IHRoZSBzY2FuIHdpbGwgY29u dGludWUgaW4gX2J0X2ZpcnN0KQorCQkgKi8KKwkJX2J0X3BhcmFsbGVsX2RvbmUoc2Nhbik7CisJ CXJldHVybiBOVUxMOworCX0KKworCS8qIHBhcmFsbGVsIHNjYW4gbXVzdCBzZWl6ZSB0aGUgc2Nh biB0byBnZXQgbmV4dCBibGtubyAqLworCWlmIChzY2FuLT5wYXJhbGxlbF9zY2FuICE9IE5VTEwg JiYKKwkJIV9idF9wYXJhbGxlbF9zZWl6ZShzY2FuLCAmYmxrbm8sICZsYXN0Y3VycmJsa25vLCBm YWxzZSkpCisJCXJldHVybiBOVUxMOwkJCS8qIGRvbmUgaWZmIHNvLT5uZWVkUHJpbVNjYW4gd2Fz bid0IHNldCAqLworCisJcmV0dXJuIF9idF9yZWFkbmV4dHBhZ2Uoc2NhbiwgYmxrbm8sIGxhc3Rj dXJyYmxrbm8sIGRpciwgZmFsc2UpOwogfQogCiAvKgogICoJX2J0X3JlYWRuZXh0cGFnZSgpIC0t IFJlYWQgbmV4dCBwYWdlIGNvbnRhaW5pbmcgdmFsaWQgZGF0YSBmb3IgX2J0X25leHQKICAqCi0g KiBDYWxsZXIncyBibGtubyBpcyB0aGUgbmV4dCBpbnRlcmVzdGluZyBwYWdlJ3MgbGluaywgdGFr ZW4gZnJvbSBlaXRoZXIgdGhlCi0gKiBwcmV2aW91c2x5LXNhdmVkIHJpZ2h0IGxpbmsgb3IgbGVm dCBsaW5rLiAgbGFzdGN1cnJibGtubyBpcyB0aGUgcGFnZSB0aGF0Ci0gKiB3YXMgY3VycmVudCBh dCB0aGUgcG9pbnQgd2hlcmUgdGhlIGJsa25vIGxpbmsgd2FzIHNhdmVkLCB3aGljaCB3ZSB1c2Ug dG8KLSAqIHJlYXNvbiBhYm91dCBjb25jdXJyZW50IHBhZ2Ugc3BsaXRzL3BhZ2UgZGVsZXRpb25z IGR1cmluZyBiYWNrd2FyZHMgc2NhbnMuCi0gKiBJbiB0aGUgY29tbW9uIGNhc2Ugd2hlcmUgc2Vp emVkPWZhbHNlLCBibGtubyBpcyBlaXRoZXIgc28tPmN1cnJQb3MubmV4dFBhZ2UKLSAqIG9yIHNv LT5jdXJyUG9zLnByZXZQYWdlLCBhbmQgbGFzdGN1cnJibGtubyBpcyBzby0+Y3VyclBvcy5jdXJy UGFnZS4KKyAqIENhbGxlcidzIGJsa25vIGlzIHRoZSBwcmlvciBiYXRjaCdzIG5leHRQYWdlIG9y IHByZXZQYWdlIChkZXBlbmRpbmcgb24gdGhlCisgKiBjdXJyZW50IHNjYW4gZGlyZWN0aW9uKSwg YW5kIGxhc3RjdXJyYmxrbm8gaXMgdGhlIHByaW9yIGJhdGNoJ3MgY3VyclBhZ2UuCisgKiBXZSB1 c2UgbGFzdGN1cnJibGtubyB0byByZWFzb24gYWJvdXQgY29uY3VycmVudCBwYWdlIHNwbGl0cy9w YWdlIGRlbGV0aW9ucworICogZHVyaW5nIGJhY2t3YXJkcyBzY2Fucy4KICAqCi0gKiBPbiBlbnRy eSwgc28tPmN1cnJQb3Mgc2hvdWxkbid0IGJlIGxvY2tlZCBieSBjYWxsZXIuICBzby0+Y3VyclBv cy5idWYgbXVzdAotICogYmUgSW52YWxpZEJ1ZmZlci91bnBpbm5lZCBhcyBuZWVkZWQgYnkgY2Fs bGVyIChub3RlIHRoYXQgbGFzdGN1cnJibGtubwotICogd29uJ3QgbmVlZCB0byBiZSByZWFkIGFn YWluIGluIGFsbW9zdCBhbGwgY2FzZXMpLiAgUGFyYWxsZWwgc2NhbiBjYWxsZXJzCi0gKiB0aGF0 IHNlaXplZCB0aGUgc2NhbiBiZWZvcmUgY2FsbGluZyBoZXJlIHNob3VsZCBwYXNzIHNlaXplZD10 cnVlOyBzdWNoIGEKLSAqIGNhbGxlcidzIGJsa25vIGFuZCBsYXN0Y3VycmJsa25vIGFyZ3VtZW50 cyBjb21lIGZyb20gdGhlIHNlaXplZCBzY2FuLgotICogc2VpemVkPWZhbHNlIGNhbGxlcnMganVz dCBwYXNzIHVzIHRoZSBibGtuby9sYXN0Y3VycmJsa25vIHRha2VuIGZyb20gdGhlaXIKLSAqIHNv LT5jdXJyUG9zLCB3aGljaCAoYWxvbmcgd2l0aCBzby0+Y3VyclBvcyBpdHNlbGYpIGNhbiBiZSB1 c2VkIHRvIGVuZCB0aGUKLSAqIHNjYW4uICBBIHNlaXplZD1mYWxzZSBjYWxsZXIncyBibGtubyBj YW4gbmV2ZXIgYmUgYXNzdW1lZCB0byBiZSB0aGUgcGFnZQotICogdGhhdCBtdXN0IGJlIHJlYWQg bmV4dCBkdXJpbmcgYSBwYXJhbGxlbCBzY2FuLCB0aG91Z2guICBXZSBtdXN0IGZpZ3VyZSB0aGF0 Ci0gKiBwYXJ0IG91dCBmb3Igb3Vyc2VsdmVzIGJ5IHNlaXppbmcgdGhlIHNjYW4gKHRoZSBjb3Jy ZWN0IHBhZ2UgdG8gcmVhZCBtaWdodAotICogYWxyZWFkeSBiZSBiZXlvbmQgdGhlIHNlaXplZD1m YWxzZSBjYWxsZXIncyBibGtubyBkdXJpbmcgYSBwYXJhbGxlbCBzY2FuLAotICogdW5sZXNzIGJs a25vL3NvLT5jdXJyUG9zLm5leHRQYWdlL3NvLT5jdXJyUG9zLnByZXZQYWdlIGlzIGFscmVhZHkg UF9OT05FLAotICogb3IgdW5sZXNzIHNvLT5jdXJyUG9zLm1vcmVSaWdodC9zby0+Y3VyclBvcy5t b3JlTGVmdCBpcyBhbHJlYWR5IHVuc2V0KS4KKyAqIE9uIGVudHJ5LCBubyBwYWdlIHNob3VsZCBi ZSBsb2NrZWQgYnkgY2FsbGVyLgogICoKLSAqIE9uIHN1Y2Nlc3MgZXhpdCwgc28tPmN1cnJQb3Mg aXMgdXBkYXRlZCB0byBjb250YWluIGRhdGEgZnJvbSB0aGUgbmV4dAotICogaW50ZXJlc3Rpbmcg cGFnZSwgYW5kIHdlIHJldHVybiB0cnVlLiAgV2UgaG9sZCBhIHBpbiBvbiB0aGUgYnVmZmVyIG9u Ci0gKiBzdWNjZXNzIGV4aXQgKGV4Y2VwdCBkdXJpbmcgc28tPmRyb3BQaW4gaW5kZXggc2NhbnMs IHdoZW4gd2UgZHJvcCB0aGUgcGluCi0gKiBlYWdlcmx5IHRvIGF2b2lkIGJsb2NraW5nIFZBQ1VV TSkuCisgKiBPbiBzdWNjZXNzIGV4aXQsIHJldHVybnMgdW5sb2NrZWQgYmF0Y2ggY29udGFpbmlu ZyBkYXRhIGZyb20gdGhlIG5leHQgcGFnZQorICogdGhhdCBoYXMgYXQgbGVhc3Qgb25lIG1hdGNo aW5nIGl0ZW0uICBJZiB0aGVyZSBhcmUgbm8gbW9yZSBtYXRjaGluZyBpdGVtcworICogaW4gdGhl IGdpdmVuIHNjYW4gZGlyZWN0aW9uLCB3ZSBqdXN0IHJldHVybiBOVUxMLiAgTm90ZSB0aGF0IHJl dHVybmluZyBOVUxMCisgKiBkb2Vzbid0IG5lY2Vzc2FyaWx5IG1lYW4gdGhlIGVuZCBvZiB0aGUg dG9wLWxldmVsIHNjYW47IGJ0Z2V0YmF0Y2ggYW5kCisgKiBidGdldGJpdG1hcCBjaGVjayBzby0+ bmVlZFByaW1TY2FuIHRvIGRldGVybWluZSBpZiBhbm90aGVyIHByaW1pdGl2ZSBpbmRleAorICog c2NhbiBpcyByZXF1aXJlZC4KICAqCi0gKiBJZiB0aGVyZSBhcmUgbm8gbW9yZSBtYXRjaGluZyBy ZWNvcmRzIGluIHRoZSBnaXZlbiBkaXJlY3Rpb24sIHdlIGludmFsaWRhdGUKLSAqIHNvLT5jdXJy UG9zICh3aGlsZSBlbnN1cmluZyBpdCByZXRhaW5zIG5vIGxvY2tzIG9yIHBpbnMpLCBhbmQgcmV0 dXJuIGZhbHNlLgotICoKLSAqIFdlIGFsd2F5cyByZWxlYXNlIHRoZSBzY2FuIGZvciBhIHBhcmFs bGVsIHNjYW4gY2FsbGVyLCByZWdhcmRsZXNzIG9mCi0gKiBzdWNjZXNzIG9yIGZhaWx1cmU7IHdl J2xsIGNhbGwgX2J0X3BhcmFsbGVsX3JlbGVhc2UgYXMgc29vbiBhcyBwb3NzaWJsZS4KKyAqIFBh cmFsbGVsIHNjYW4gY2FsbGVycyBtdXN0IHNlaXplIHRoZSBzY2FuIGJlZm9yZSBjYWxsaW5nIGhl cmUuICBibGtubyBhbmQKKyAqIGxhc3RjdXJyYmxrbm8gc2hvdWxkIGNvbWUgZnJvbSB0aGUgc2Vp emVkIHNjYW4uICBXZSdsbCByZWxlYXNlIHRoZSBzY2FuIGFzCisgKiBzb29uIGFzIHBvc3NpYmxl LgogICovCi1zdGF0aWMgYm9vbAorc3RhdGljIEluZGV4U2NhbkJhdGNoCiBfYnRfcmVhZG5leHRw YWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmxvY2tOdW1iZXIgYmxrbm8sCi0JCQkJIEJsb2NrTnVt YmVyIGxhc3RjdXJyYmxrbm8sIFNjYW5EaXJlY3Rpb24gZGlyLCBib29sIHNlaXplZCkKKwkJCQkg QmxvY2tOdW1iZXIgbGFzdGN1cnJibGtubywgU2NhbkRpcmVjdGlvbiBkaXIsIGJvb2wgZmlyc3Rw YWdlKQogewogCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247Ci0JQlRTY2FuT3Bh cXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOworCUluZGV4U2NhbkJhdGNoIG5l d2JhdGNoOworCUJUQmF0Y2hEYXRhICpidG5ld2JhdGNoOwogCi0JQXNzZXJ0KHNvLT5jdXJyUG9z LmN1cnJQYWdlID09IGxhc3RjdXJyYmxrbm8gfHwgc2VpemVkKTsKLQlBc3NlcnQoIShibGtubyA9 PSBQX05PTkUgJiYgc2VpemVkKSk7Ci0JQXNzZXJ0KCFCVFNjYW5Qb3NJc1Bpbm5lZChzby0+Y3Vy clBvcykpOworCS8qIEFsbG9jYXRlIHNwYWNlIGZvciBuZXcgYmF0Y2ggYmVmb3JlIGxvY2tpbmcg YW55dGhpbmcgKi8KKwluZXdiYXRjaCA9IGluZGV4YW1fdXRpbF9hbGxvY19iYXRjaChzY2FuKTsK KwlidG5ld2JhdGNoID0gQlRCYXRjaEdldERhdGEoc2NhbiwgbmV3YmF0Y2gpOwogCiAJLyoKLQkg KiBSZW1lbWJlciB0aGF0IHRoZSBzY2FuIGFscmVhZHkgcmVhZCBsYXN0Y3VycmJsa25vLCBhIHBh Z2UgdG8gdGhlIGxlZnQKLQkgKiBvZiBibGtubyAob3IgcmVtZW1iZXIgcmVhZGluZyBhIHBhZ2Ug dG8gdGhlIHJpZ2h0LCBmb3IgYmFja3dhcmRzIHNjYW5zKQorCSAqIG5ld2JhdGNoIHdpbGwgYmUg dGhlIGJhdGNoIGZvciBibGtubywgYSBwYWdlIHRvIHRoZSByaWdodCBvZgorCSAqIGxhc3RjdXJy Ymxrbm8gKG9yIHRvIHRoZSBsZWZ0LCB3aGVuIHRoZSBzY2FuIGlzIG1vdmluZyBiYWNrd2FyZHMp LgorCSAqCisJICogTm90ZTogY2FsbGVyJ3MgYmxrbm8gaXMgdGVudGF0aXZlLiAgbmV3YmF0Y2gg YWN0dWFsbHkgc3RvcmVzIG1hdGNoZXMKKwkgKiBmcm9tIHRoZSBuZXh0IGxlYWYgcGFnZSBpbiB0 aGlzIHNjYW4gZGlyZWN0aW9uIHRoYXQgaGFzIGF0IGxlYXN0IG9uZQorCSAqIG1hdGNoaW5nIGl0 ZW0uICBUaGlzIGlzIHVzdWFsbHkgY2FsbGVyJ3MgYmxrbm8gcGFnZSwgYnV0IG1pZ2h0IGJlIHNv bWUKKwkgKiBvdGhlciBwYWdlIHRvIGl0cyByaWdodCAob3IgdG8gaXRzIGxlZnQpIGluc3RlYWQu CiAJICovCi0JaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKLQkJc28tPmN1cnJQb3Mu bW9yZUxlZnQgPSB0cnVlOwotCWVsc2UKLQkJc28tPmN1cnJQb3MubW9yZVJpZ2h0ID0gdHJ1ZTsK KwlidG5ld2JhdGNoLT5tb3JlTGVmdCA9IHRydWU7CS8qIGZvciBsYXN0Y3VycmJsa25vIChvciB0 ZW50YXRpdmUpICovCisJYnRuZXdiYXRjaC0+bW9yZVJpZ2h0ID0gdHJ1ZTsJLyogdGVudGF0aXZl IChvciBmb3IgbGFzdGN1cnJibGtubykgKi8KIAogCWZvciAoOzspCiAJewogCQlQYWdlCQlwYWdl OwogCQlCVFBhZ2VPcGFxdWUgb3BhcXVlOwogCi0JCWlmIChibGtubyA9PSBQX05PTkUgfHwKLQkJ CShTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikgPwotCQkJICFzby0+Y3VyclBvcy5tb3JlUmln aHQgOiAhc28tPmN1cnJQb3MubW9yZUxlZnQpKQotCQl7Ci0JCQkvKiBtb3N0IHJlY2VudCBfYnRf cmVhZHBhZ2UgY2FsbCAoZm9yIGxhc3RjdXJyYmxrbm8pIGVuZGVkIHNjYW4gKi8KLQkJCUFzc2Vy dChzby0+Y3VyclBvcy5jdXJyUGFnZSA9PSBsYXN0Y3VycmJsa25vICYmICFzZWl6ZWQpOwotCQkJ QlRTY2FuUG9zSW52YWxpZGF0ZShzby0+Y3VyclBvcyk7Ci0JCQlfYnRfcGFyYWxsZWxfZG9uZShz Y2FuKTsJLyogaWZmICFzby0+bmVlZFByaW1TY2FuICovCi0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0K LQotCQlBc3NlcnQoIXNvLT5uZWVkUHJpbVNjYW4pOwotCi0JCS8qIHBhcmFsbGVsIHNjYW4gbXVz dCBuZXZlciBhY3R1YWxseSB2aXNpdCBzby0+Y3VyclBvcyBibGtubyAqLwotCQlpZiAoIXNlaXpl ZCAmJiBzY2FuLT5wYXJhbGxlbF9zY2FuICE9IE5VTEwgJiYKLQkJCSFfYnRfcGFyYWxsZWxfc2Vp emUoc2NhbiwgJmJsa25vLCAmbGFzdGN1cnJibGtubywgZmFsc2UpKQotCQl7Ci0JCQkvKiB3aG9s ZSBzY2FuIGlzIG5vdyBkb25lIChvciBhbm90aGVyIHByaW1pdGl2ZSBzY2FuIHJlcXVpcmVkKSAq LwotCQkJQlRTY2FuUG9zSW52YWxpZGF0ZShzby0+Y3VyclBvcyk7Ci0JCQlyZXR1cm4gZmFsc2U7 Ci0JCX0KKwkJQXNzZXJ0KCEoKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlKS0+bmVlZFByaW1T Y2FuKTsKKwkJQXNzZXJ0KGJsa25vICE9IFBfTk9ORSAmJiBsYXN0Y3VycmJsa25vICE9IFBfTk9O RSk7CiAKIAkJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKIAkJewogCQkJLyogcmVh ZCBibGtubywgYnV0IGNoZWNrIGZvciBpbnRlcnJ1cHRzIGZpcnN0ICovCiAJCQlDSEVDS19GT1Jf SU5URVJSVVBUUygpOwotCQkJc28tPmN1cnJQb3MuYnVmID0gX2J0X2dldGJ1ZihyZWwsIGJsa25v LCBCVF9SRUFEKTsKKwkJCWJ0bmV3YmF0Y2gtPmJ1ZiA9IF9idF9nZXRidWYocmVsLCBibGtubywg QlRfUkVBRCk7CiAJCX0KIAkJZWxzZQogCQl7CiAJCQkvKiByZWFkIGJsa25vLCBhdm9pZGluZyBy YWNlIChhbHNvIGNoZWNrcyBmb3IgaW50ZXJydXB0cykgKi8KLQkJCXNvLT5jdXJyUG9zLmJ1ZiA9 IF9idF9sb2NrX2FuZF92YWxpZGF0ZV9sZWZ0KHJlbCwgJmJsa25vLAorCQkJYnRuZXdiYXRjaC0+ YnVmID0gX2J0X2xvY2tfYW5kX3ZhbGlkYXRlX2xlZnQocmVsLCAmYmxrbm8sCiAJCQkJCQkJCQkJ CQkJCSBsYXN0Y3VycmJsa25vKTsKLQkJCWlmIChzby0+Y3VyclBvcy5idWYgPT0gSW52YWxpZEJ1 ZmZlcikKKwkJCWlmIChidG5ld2JhdGNoLT5idWYgPT0gSW52YWxpZEJ1ZmZlcikKIAkJCXsKIAkJ CQkvKiBtdXN0IGhhdmUgYmVlbiBhIGNvbmN1cnJlbnQgZGVsZXRpb24gb2YgbGVmdG1vc3QgcGFn ZSAqLwotCQkJCUJUU2NhblBvc0ludmFsaWRhdGUoc28tPmN1cnJQb3MpOwogCQkJCV9idF9wYXJh bGxlbF9kb25lKHNjYW4pOwotCQkJCXJldHVybiBmYWxzZTsKKwkJCQlpbmRleGFtX3V0aWxfcmVs ZWFzZV9iYXRjaChzY2FuLCBuZXdiYXRjaCk7CisJCQkJcmV0dXJuIE5VTEw7CiAJCQl9CiAJCX0K IAotCQlwYWdlID0gQnVmZmVyR2V0UGFnZShzby0+Y3VyclBvcy5idWYpOworCQlwYWdlID0gQnVm ZmVyR2V0UGFnZShidG5ld2JhdGNoLT5idWYpOwogCQlvcGFxdWUgPSBCVFBhZ2VHZXRPcGFxdWUo cGFnZSk7CiAJCWxhc3RjdXJyYmxrbm8gPSBibGtubzsKIAkJaWYgKGxpa2VseSghUF9JR05PUkUo b3BhcXVlKSkpCkBAIC0xOTExLDE3ICsxODA1LDE3IEBAIF9idF9yZWFkbmV4dHBhZ2UoSW5kZXhT Y2FuRGVzYyBzY2FuLCBCbG9ja051bWJlciBibGtubywKIAkJCS8qIHNlZSBpZiB0aGVyZSBhcmUg YW55IG1hdGNoZXMgb24gdGhpcyBwYWdlICovCiAJCQlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2Fy ZChkaXIpKQogCQkJewotCQkJCS8qIG5vdGUgdGhhdCB0aGlzIHdpbGwgY2xlYXIgbW9yZVJpZ2h0 IGlmIHdlIGNhbiBzdG9wICovCi0JCQkJaWYgKF9idF9yZWFkcGFnZShzY2FuLCBkaXIsIFBfRklS U1REQVRBS0VZKG9wYXF1ZSksIHNlaXplZCkpCisJCQkJaWYgKF9idF9yZWFkcGFnZShzY2FuLCBu ZXdiYXRjaCwgZGlyLAorCQkJCQkJCQkgUF9GSVJTVERBVEFLRVkob3BhcXVlKSwgZmlyc3RwYWdl KSkKIAkJCQkJYnJlYWs7Ci0JCQkJYmxrbm8gPSBzby0+Y3VyclBvcy5uZXh0UGFnZTsKKwkJCQli bGtubyA9IGJ0bmV3YmF0Y2gtPm5leHRQYWdlOwogCQkJfQogCQkJZWxzZQogCQkJewotCQkJCS8q IG5vdGUgdGhhdCB0aGlzIHdpbGwgY2xlYXIgbW9yZUxlZnQgaWYgd2UgY2FuIHN0b3AgKi8KLQkJ CQlpZiAoX2J0X3JlYWRwYWdlKHNjYW4sIGRpciwgUGFnZUdldE1heE9mZnNldE51bWJlcihwYWdl KSwgc2VpemVkKSkKKwkJCQlpZiAoX2J0X3JlYWRwYWdlKHNjYW4sIG5ld2JhdGNoLCBkaXIsCisJ CQkJCQkJCSBQYWdlR2V0TWF4T2Zmc2V0TnVtYmVyKHBhZ2UpLCBmaXJzdHBhZ2UpKQogCQkJCQli cmVhazsKLQkJCQlibGtubyA9IHNvLT5jdXJyUG9zLnByZXZQYWdlOworCQkJCWJsa25vID0gYnRu ZXdiYXRjaC0+cHJldlBhZ2U7CiAJCQl9CiAJCX0KIAkJZWxzZQpAQCAtMTkzNiwxOSArMTgzMCwz OCBAQCBfYnRfcmVhZG5leHRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmxvY2tOdW1iZXIgYmxr bm8sCiAJCX0KIAogCQkvKiBubyBtYXRjaGluZyB0dXBsZXMgb24gdGhpcyBwYWdlICovCi0JCV9i dF9yZWxidWYocmVsLCBzby0+Y3VyclBvcy5idWYpOwotCQlzZWl6ZWQgPSBmYWxzZTsJCQkvKiBy ZWxlYXNlZCBieSBfYnRfcmVhZHBhZ2UgKG9yIGJ5IHVzKSAqLworCQlfYnRfcmVsYnVmKHJlbCwg YnRuZXdiYXRjaC0+YnVmKTsKKworCQkvKiBDb250aW51ZSB0aGUgc2NhbiBpbiB0aGlzIGRpcmVj dGlvbj8gKi8KKwkJaWYgKGJsa25vID09IFBfTk9ORSB8fAorCQkJKFNjYW5EaXJlY3Rpb25Jc0Zv cndhcmQoZGlyKSA/CisJCQkgIWJ0bmV3YmF0Y2gtPm1vcmVSaWdodCA6ICFidG5ld2JhdGNoLT5t b3JlTGVmdCkpCisJCXsKKwkJCS8qCisJCQkgKiBibGtubyBfYnRfcmVhZHBhZ2UgY2FsbCBlbmRl ZCBzY2FuIGluIHRoaXMgZGlyZWN0aW9uICh0aG91Z2ggaWYKKwkJCSAqIHNvLT5uZWVkUHJpbVNj YW4gd2FzIHNldCB0aGUgc2NhbiB3aWxsIGNvbnRpbnVlIGluIF9idF9maXJzdCkKKwkJCSAqLwor CQkJX2J0X3BhcmFsbGVsX2RvbmUoc2Nhbik7CisJCQlpbmRleGFtX3V0aWxfcmVsZWFzZV9iYXRj aChzY2FuLCBuZXdiYXRjaCk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCisJCS8qIHBhcmFsbGVs IHNjYW4gbXVzdCBzZWl6ZSB0aGUgc2NhbiB0byBnZXQgbmV4dCBibGtubyAqLworCQlpZiAoc2Nh bi0+cGFyYWxsZWxfc2NhbiAhPSBOVUxMICYmCisJCQkhX2J0X3BhcmFsbGVsX3NlaXplKHNjYW4s ICZibGtubywgJmxhc3RjdXJyYmxrbm8sIGZhbHNlKSkKKwkJeworCQkJaW5kZXhhbV91dGlsX3Jl bGVhc2VfYmF0Y2goc2NhbiwgbmV3YmF0Y2gpOworCQkJcmV0dXJuIE5VTEw7CQkvKiBkb25lIGlm ZiBzby0+bmVlZFByaW1TY2FuIHdhc24ndCBzZXQgKi8KKwkJfQorCisJCWZpcnN0cGFnZSA9IGZh bHNlOwkJLyogbmV4dCBwYWdlIGNhbm5vdCBiZSBmaXJzdCAqLwogCX0KIAotCS8qCi0JICogX2J0 X3JlYWRwYWdlIHN1Y2NlZWRlZC4gIERyb3AgdGhlIGxvY2sgKGFuZCBtYXliZSB0aGUgcGluKSBv bgotCSAqIHNvLT5jdXJyUG9zLmJ1ZiBpbiBwcmVwYXJhdGlvbiBmb3IgYnRnZXR0dXBsZSByZXR1 cm5pbmcgdHVwbGVzLgotCSAqLwotCUFzc2VydChzby0+Y3VyclBvcy5jdXJyUGFnZSA9PSBibGtu byk7Ci0JQXNzZXJ0KEJUU2NhblBvc0lzUGlubmVkKHNvLT5jdXJyUG9zKSk7Ci0JX2J0X2Ryb3Bf bG9ja19hbmRfbWF5YmVfcGluKHJlbCwgc28pOworCS8qIF9idF9yZWFkcGFnZSBzYXZlZCBvbmUg b3IgbW9yZSBtYXRjaGVzIGluIG5ld2JhdGNoLml0ZW1zW10gKi8KKwlBc3NlcnQoYnRuZXdiYXRj aC0+Y3VyclBhZ2UgPT0gYmxrbm8pOworCV9idF9iYXRjaF91bmxvY2soc2NhbiwgbmV3YmF0Y2gs IGJ0bmV3YmF0Y2gtPmJ1Zik7CiAKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gbmV3YmF0Y2g7CiB9 CiAKIC8qCkBAIC0yMTc0LDI1ICsyMDg3LDI5IEBAIF9idF9nZXRfZW5kcG9pbnQoUmVsYXRpb24g cmVsLCB1aW50MzIgbGV2ZWwsIGJvb2wgcmlnaHRtb3N0KQogICogUGFyYWxsZWwgc2NhbiBjYWxs ZXJzIG11c3QgaGF2ZSBzZWl6ZWQgdGhlIHNjYW4gYmVmb3JlIGNhbGxpbmcgaGVyZS4KICAqIEV4 aXQgY29uZGl0aW9ucyBhcmUgdGhlIHNhbWUgYXMgZm9yIF9idF9maXJzdCgpLgogICovCi1zdGF0 aWMgYm9vbAorc3RhdGljIEluZGV4U2NhbkJhdGNoCiBfYnRfZW5kcG9pbnQoSW5kZXhTY2FuRGVz YyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIHsKIAlSZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRl eFJlbGF0aW9uOwotCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1 ZTsKKwlJbmRleFNjYW5CYXRjaCBmaXJzdGJhdGNoOworCUJUQmF0Y2hEYXRhICpidGZpcnN0YmF0 Y2g7CiAJUGFnZQkJcGFnZTsKIAlCVFBhZ2VPcGFxdWUgb3BhcXVlOwogCU9mZnNldE51bWJlciBz dGFydDsKIAotCUFzc2VydCghQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpOwotCUFzc2Vy dCghc28tPm5lZWRQcmltU2Nhbik7CisJQXNzZXJ0KCEoKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3Bh cXVlKS0+bmVlZFByaW1TY2FuKTsKKworCS8qIEFsbG9jYXRlIHNwYWNlIGZvciBmaXJzdCBiYXRj aCBiZWZvcmUgbG9ja2luZyBhbnl0aGluZyAqLworCWZpcnN0YmF0Y2ggPSBpbmRleGFtX3V0aWxf YWxsb2NfYmF0Y2goc2Nhbik7CisJYnRmaXJzdGJhdGNoID0gQlRCYXRjaEdldERhdGEoc2Nhbiwg Zmlyc3RiYXRjaCk7CiAKIAkvKgogCSAqIFNjYW4gZG93biB0byB0aGUgbGVmdG1vc3Qgb3Igcmln aHRtb3N0IGxlYWYgcGFnZS4gIFRoaXMgaXMgYSBzaW1wbGlmaWVkCiAJICogdmVyc2lvbiBvZiBf YnRfc2VhcmNoKCkuCiAJICovCi0Jc28tPmN1cnJQb3MuYnVmID0gX2J0X2dldF9lbmRwb2ludChy ZWwsIDAsIFNjYW5EaXJlY3Rpb25Jc0JhY2t3YXJkKGRpcikpOworCWJ0Zmlyc3RiYXRjaC0+YnVm ID0gX2J0X2dldF9lbmRwb2ludChyZWwsIDAsIFNjYW5EaXJlY3Rpb25Jc0JhY2t3YXJkKGRpcikp OwogCi0JaWYgKCFCdWZmZXJJc1ZhbGlkKHNvLT5jdXJyUG9zLmJ1ZikpCisJaWYgKCFCdWZmZXJJ c1ZhbGlkKGJ0Zmlyc3RiYXRjaC0+YnVmKSkKIAl7CiAJCS8qCiAJCSAqIEVtcHR5IGluZGV4LiBM b2NrIHRoZSB3aG9sZSByZWxhdGlvbiwgYXMgbm90aGluZyBmaW5lciB0byBsb2NrCkBAIC0yMjAw LDEwICsyMTE3LDExIEBAIF9idF9lbmRwb2ludChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJl Y3Rpb24gZGlyKQogCQkgKi8KIAkJUHJlZGljYXRlTG9ja1JlbGF0aW9uKHJlbCwgc2Nhbi0+eHNf c25hcHNob3QpOwogCQlfYnRfcGFyYWxsZWxfZG9uZShzY2FuKTsKLQkJcmV0dXJuIGZhbHNlOwor CQlpbmRleGFtX3V0aWxfcmVsZWFzZV9iYXRjaChzY2FuLCBmaXJzdGJhdGNoKTsKKwkJcmV0dXJu IE5VTEw7CiAJfQogCi0JcGFnZSA9IEJ1ZmZlckdldFBhZ2Uoc28tPmN1cnJQb3MuYnVmKTsKKwlw YWdlID0gQnVmZmVyR2V0UGFnZShidGZpcnN0YmF0Y2gtPmJ1Zik7CiAJb3BhcXVlID0gQlRQYWdl R2V0T3BhcXVlKHBhZ2UpOwogCUFzc2VydChQX0lTTEVBRihvcGFxdWUpKTsKIApAQCAtMjIyOSw5 ICsyMTQ3LDUgQEAgX2J0X2VuZHBvaW50KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlv biBkaXIpCiAJLyoKIAkgKiBOb3cgbG9hZCBkYXRhIGZyb20gdGhlIGZpcnN0IHBhZ2Ugb2YgdGhl IHNjYW4uCiAJICovCi0JaWYgKCFfYnRfcmVhZGZpcnN0cGFnZShzY2FuLCBzdGFydCwgZGlyKSkK LQkJcmV0dXJuIGZhbHNlOwotCi0JX2J0X3JldHVybml0ZW0oc2Nhbiwgc28pOwotCXJldHVybiB0 cnVlOworCXJldHVybiBfYnRfcmVhZGZpcnN0cGFnZShzY2FuLCBmaXJzdGJhdGNoLCBzdGFydCwg ZGlyKTsKIH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0dXRpbHMu YyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0dXRpbHMuYwppbmRleCAwMTRmYWExNjIu LmI2Yzk3N2I5NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnR1dGls cy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0dXRpbHMuYwpAQCAtMTksMTAg KzE5LDcgQEAKIAogI2luY2x1ZGUgImFjY2Vzcy9uYnRyZWUuaCIKICNpbmNsdWRlICJhY2Nlc3Mv cmVsb3B0aW9ucy5oIgotI2luY2x1ZGUgImFjY2Vzcy9yZWxzY2FuLmgiCiAjaW5jbHVkZSAiY29t bWFuZHMvcHJvZ3Jlc3MuaCIKLSNpbmNsdWRlICJjb21tb24vaW50LmgiCi0jaW5jbHVkZSAibGli L3F1bmlxdWUuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJzdG9yYWdlL2x3 bG9jay5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc3Vic3lzdGVtcy5oIgpAQCAtMzEsNyArMjgsNiBA QAogI2luY2x1ZGUgInV0aWxzL3JlbC5oIgogCiAKLXN0YXRpYyBpbnQJX2J0X2NvbXBhcmVfaW50 KGNvbnN0IHZvaWQgKnZhLCBjb25zdCB2b2lkICp2Yik7CiBzdGF0aWMgaW50CV9idF9rZWVwX25h dHRzKFJlbGF0aW9uIHJlbCwgSW5kZXhUdXBsZSBsYXN0bGVmdCwKIAkJCQkJCSAgIEluZGV4VHVw bGUgZmlyc3RyaWdodCwgQlRTY2FuSW5zZXJ0IGl0dXBfa2V5KTsKIApAQCAtMTQ2LDI0NyArMTQy LDYgQEAgX2J0X21rc2NhbmtleShSZWxhdGlvbiByZWwsIEluZGV4VHVwbGUgaXR1cCkKIAlyZXR1 cm4ga2V5OwogfQogCi0vKgotICogcXNvcnQgY29tcGFyaXNvbiBmdW5jdGlvbiBmb3IgaW50IGFy cmF5cwotICovCi1zdGF0aWMgaW50Ci1fYnRfY29tcGFyZV9pbnQoY29uc3Qgdm9pZCAqdmEsIGNv bnN0IHZvaWQgKnZiKQotewotCWludAkJCWEgPSAqKChjb25zdCBpbnQgKikgdmEpOwotCWludAkJ CWIgPSAqKChjb25zdCBpbnQgKikgdmIpOwotCi0JcmV0dXJuIHBnX2NtcF9zMzIoYSwgYik7Ci19 Ci0KLS8qCi0gKiBfYnRfa2lsbGl0ZW1zIC0gc2V0IExQX0RFQUQgc3RhdGUgZm9yIGl0ZW1zIGFu IGluZGV4c2NhbiBjYWxsZXIgaGFzCi0gKiB0b2xkIHVzIHdlcmUga2lsbGVkCi0gKgotICogc2Nh bi0+b3BhcXVlLCByZWZlcmVuY2VkIGxvY2FsbHkgdGhyb3VnaCBzbywgY29udGFpbnMgaW5mb3Jt YXRpb24gYWJvdXQgdGhlCi0gKiBjdXJyZW50IHBhZ2UgYW5kIGtpbGxlZCB0dXBsZXMgdGhlcmVv biAoZ2VuZXJhbGx5LCB0aGlzIHNob3VsZCBvbmx5IGJlCi0gKiBjYWxsZWQgaWYgc28tPm51bUtp bGxlZCA+IDApLgotICoKLSAqIENhbGxlciBzaG91bGQgbm90IGhhdmUgYSBsb2NrIG9uIHRoZSBz by0+Y3VyclBvcyBwYWdlLCBidXQgbXVzdCBob2xkIGEKLSAqIGJ1ZmZlciBwaW4gd2hlbiAhc28t PmRyb3BQaW4uICBXaGVuIHdlIHJldHVybiwgaXQgc3RpbGwgd29uJ3QgYmUgbG9ja2VkLgotICog SXQnbGwgY29udGludWUgdG8gaG9sZCB3aGF0ZXZlciBwaW5zIHdlcmUgaGVsZCBiZWZvcmUgY2Fs bGluZyBoZXJlLgotICoKLSAqIFdlIG1hdGNoIGl0ZW1zIGJ5IGhlYXAgVElEIGJlZm9yZSBhc3N1 bWluZyB0aGV5IGFyZSB0aGUgcmlnaHQgb25lcyB0byBzZXQKLSAqIExQX0RFQUQuICBJZiB0aGUg c2NhbiBpcyBvbmUgdGhhdCBob2xkcyBhIGJ1ZmZlciBwaW4gb24gdGhlIHRhcmdldCBwYWdlCi0g KiBjb250aW51b3VzbHkgZnJvbSBpbml0aWFsbHkgcmVhZGluZyB0aGUgaXRlbXMgdW50aWwgYXBw bHlpbmcgdGhpcyBmdW5jdGlvbgotICogKGlmIGl0IGlzIGEgIXNvLT5kcm9wUGluIHNjYW4pLCBW QUNVVU0gY2Fubm90IGhhdmUgZGVsZXRlZCBhbnkgaXRlbXMgb24gdGhlCi0gKiBwYWdlLCBzbyB0 aGUgcGFnZSdzIFRJRHMgY2FuJ3QgaGF2ZSBiZWVuIHJlY3ljbGVkIGJ5IG5vdy4gIFRoZXJlJ3Mg bm8gcmlzawotICogdGhhdCB3ZSdsbCBjb25mdXNlIGEgbmV3IGluZGV4IHR1cGxlIHRoYXQgaGFw cGVucyB0byB1c2UgYSByZWN5Y2xlZCBUSUQKLSAqIHdpdGggYSBub3ctcmVtb3ZlZCB0dXBsZSB3 aXRoIHRoZSBzYW1lIFRJRCAodGhhdCB1c2VkIHRvIGJlIG9uIHRoaXMgc2FtZQotICogcGFnZSku ICBXZSBjYW4ndCByZWx5IG9uIHRoYXQgZHVyaW5nIHNjYW5zIHRoYXQgZHJvcCBidWZmZXIgcGlu cyBlYWdlcmx5Ci0gKiAoc28tPmRyb3BQaW4gc2NhbnMpLCB0aG91Z2gsIHNvIHdlIG11c3QgY29u ZGl0aW9uIHNldHRpbmcgTFBfREVBRCBiaXRzIG9uCi0gKiB0aGUgcGFnZSBMU04gaGF2aW5nIG5v dCBjaGFuZ2VkIHNpbmNlIGJhY2sgd2hlbiBfYnRfcmVhZHBhZ2Ugc2F3IHRoZSBwYWdlLgotICog V2UgdG90YWxseSBnaXZlIHVwIG9uIHNldHRpbmcgTFBfREVBRCBiaXRzIHdoZW4gdGhlIHBhZ2Ug TFNOIGNoYW5nZWQuCi0gKgotICogV2UgZ2l2ZSB1cCBtdWNoIGxlc3Mgb2Z0ZW4gZHVyaW5nICFz by0+ZHJvcFBpbiBzY2FucywgYnV0IGl0IHN0aWxsIGhhcHBlbnMuCi0gKiBXZSBjb3BlIHdpdGgg Y2FzZXMgd2hlcmUgaXRlbXMgaGF2ZSBtb3ZlZCByaWdodCBkdWUgdG8gaW5zZXJ0aW9ucy4gIElm IGFuCi0gKiBpdGVtIGhhcyBtb3ZlZCBvZmYgdGhlIGN1cnJlbnQgcGFnZSBkdWUgdG8gYSBzcGxp dCwgd2UnbGwgZmFpbCB0byBmaW5kIGl0Ci0gKiBhbmQganVzdCBnaXZlIHVwIG9uIGl0LgotICov Ci12b2lkCi1fYnRfa2lsbGl0ZW1zKEluZGV4U2NhbkRlc2Mgc2NhbikKLXsKLQlSZWxhdGlvbgly ZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOwotCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFx dWUpIHNjYW4tPm9wYXF1ZTsKLQlQYWdlCQlwYWdlOwotCUJUUGFnZU9wYXF1ZSBvcGFxdWU7Ci0J T2Zmc2V0TnVtYmVyIG1pbm9mZjsKLQlPZmZzZXROdW1iZXIgbWF4b2ZmOwotCWludAkJCW51bUtp bGxlZCA9IHNvLT5udW1LaWxsZWQ7Ci0JYm9vbAkJa2lsbGVkc29tZXRoaW5nID0gZmFsc2U7Ci0J QnVmZmVyCQlidWY7Ci0KLQlBc3NlcnQobnVtS2lsbGVkID4gMCk7Ci0JQXNzZXJ0KEJUU2NhblBv c0lzVmFsaWQoc28tPmN1cnJQb3MpKTsKLQlBc3NlcnQoc2Nhbi0+aGVhcFJlbGF0aW9uICE9IE5V TEwpOyAvKiBjYW4ndCBiZSBhIGJpdG1hcCBpbmRleCBzY2FuICovCi0KLQkvKiBBbHdheXMgaW52 YWxpZGF0ZSBzby0+a2lsbGVkSXRlbXNbXSBiZWZvcmUgbGVhdmluZyBzby0+Y3VyclBvcyAqLwot CXNvLT5udW1LaWxsZWQgPSAwOwotCi0JLyoKLQkgKiBXZSBuZWVkIHRvIGl0ZXJhdGUgdGhyb3Vn aCBzby0+a2lsbGVkSXRlbXNbXSBpbiBsZWFmIHBhZ2Ugb3JkZXI7IHRoZQotCSAqIGxvb3AgYmVs b3cgZXhwZWN0cyB0aGlzICh3aGVuIG1hcmtpbmcgcG9zdGluZyBsaXN0IHR1cGxlcywgYXQgbGVh c3QpLgotCSAqIHNvLT5raWxsZWRJdGVtc1tdIGlzIG5vdyBpbiB3aGF0ZXZlciBvcmRlciB0aGUg c2NhbiByZXR1cm5lZCBpdGVtcyBpbi4KLQkgKiBTY3JvbGxhYmxlIGN1cnNvciBzY2FucyBtaWdo dCBoYXZlIGV2ZW4gc2F2ZWQgdGhlIHNhbWUgaXRlbS9USUQgdHdpY2UuCi0JICoKLQkgKiBTb3J0 IGFuZCB1bmlxdWUtaWZ5IHNvLT5raWxsZWRJdGVtc1tdIHRvIGRlYWwgd2l0aCBhbGwgdGhpcy4K LQkgKi8KLQlpZiAobnVtS2lsbGVkID4gMSkKLQl7Ci0JCXFzb3J0KHNvLT5raWxsZWRJdGVtcywg bnVtS2lsbGVkLCBzaXplb2YoaW50KSwgX2J0X2NvbXBhcmVfaW50KTsKLQkJbnVtS2lsbGVkID0g cXVuaXF1ZShzby0+a2lsbGVkSXRlbXMsIG51bUtpbGxlZCwgc2l6ZW9mKGludCksCi0JCQkJCQkJ X2J0X2NvbXBhcmVfaW50KTsKLQl9Ci0KLQlpZiAoIXNvLT5kcm9wUGluKQotCXsKLQkJLyoKLQkJ ICogV2UgaGF2ZSBoZWxkIHRoZSBwaW4gb24gdGhpcyBwYWdlIHNpbmNlIHdlIHJlYWQgdGhlIGlu ZGV4IHR1cGxlcywKLQkJICogc28gYWxsIHdlIG5lZWQgdG8gZG8gaXMgbG9jayBpdC4gIFRoZSBw aW4gd2lsbCBoYXZlIHByZXZlbnRlZAotCQkgKiBjb25jdXJyZW50IFZBQ1VVTXMgZnJvbSByZWN5 Y2xpbmcgYW55IG9mIHRoZSBUSURzIG9uIHRoZSBwYWdlLgotCQkgKi8KLQkJQXNzZXJ0KEJUU2Nh blBvc0lzUGlubmVkKHNvLT5jdXJyUG9zKSk7Ci0JCWJ1ZiA9IHNvLT5jdXJyUG9zLmJ1ZjsKLQkJ X2J0X2xvY2tidWYocmVsLCBidWYsIEJUX1JFQUQpOwotCX0KLQllbHNlCi0JewotCQlYTG9nUmVj UHRyCWxhdGVzdGxzbjsKLQotCQlBc3NlcnQoIUJUU2NhblBvc0lzUGlubmVkKHNvLT5jdXJyUG9z KSk7Ci0JCWJ1ZiA9IF9idF9nZXRidWYocmVsLCBzby0+Y3VyclBvcy5jdXJyUGFnZSwgQlRfUkVB RCk7Ci0KLQkJbGF0ZXN0bHNuID0gQnVmZmVyR2V0TFNOQXRvbWljKGJ1Zik7Ci0JCUFzc2VydChz by0+Y3VyclBvcy5sc24gPD0gbGF0ZXN0bHNuKTsKLQkJaWYgKHNvLT5jdXJyUG9zLmxzbiAhPSBs YXRlc3Rsc24pCi0JCXsKLQkJCS8qIE1vZGlmaWVkLCBnaXZlIHVwIG9uIGhpbnRpbmcgKi8KLQkJ CV9idF9yZWxidWYocmVsLCBidWYpOwotCQkJcmV0dXJuOwotCQl9Ci0KLQkJLyogVW5tb2RpZmll ZCwgaGludGluZyBpcyBzYWZlICovCi0JfQotCi0JcGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnVmKTsK LQlvcGFxdWUgPSBCVFBhZ2VHZXRPcGFxdWUocGFnZSk7Ci0JbWlub2ZmID0gUF9GSVJTVERBVEFL RVkob3BhcXVlKTsKLQltYXhvZmYgPSBQYWdlR2V0TWF4T2Zmc2V0TnVtYmVyKHBhZ2UpOwotCi0J LyogSXRlcmF0ZSB0aHJvdWdoIHNvLT5raWxsZWRJdGVtc1tdIGluIGxlYWYgcGFnZSBvcmRlciAq LwotCWZvciAoaW50IGkgPSAwOyBpIDwgbnVtS2lsbGVkOyBpKyspCi0JewotCQlpbnQJCQlpdGVt SW5kZXggPSBzby0+a2lsbGVkSXRlbXNbaV07Ci0JCUJUU2NhblBvc0l0ZW0gKmtpdGVtID0gJnNv LT5jdXJyUG9zLml0ZW1zW2l0ZW1JbmRleF07Ci0JCU9mZnNldE51bWJlciBvZmZudW0gPSBraXRl bS0+aW5kZXhPZmZzZXQ7Ci0KLQkJQXNzZXJ0KGl0ZW1JbmRleCA+PSBzby0+Y3VyclBvcy5maXJz dEl0ZW0gJiYKLQkJCSAgIGl0ZW1JbmRleCA8PSBzby0+Y3VyclBvcy5sYXN0SXRlbSk7Ci0JCUFz c2VydChpID09IDAgfHwKLQkJCSAgIG9mZm51bSA+PSBzby0+Y3VyclBvcy5pdGVtc1tzby0+a2ls bGVkSXRlbXNbaSAtIDFdXS5pbmRleE9mZnNldCk7Ci0KLQkJaWYgKG9mZm51bSA8IG1pbm9mZikK LQkJCWNvbnRpbnVlOwkJCS8qIHB1cmUgcGFyYW5vaWEgKi8KLQkJd2hpbGUgKG9mZm51bSA8PSBt YXhvZmYpCi0JCXsKLQkJCUl0ZW1JZAkJaWlkID0gUGFnZUdldEl0ZW1JZChwYWdlLCBvZmZudW0p OwotCQkJSW5kZXhUdXBsZQlpdHVwbGUgPSAoSW5kZXhUdXBsZSkgUGFnZUdldEl0ZW0ocGFnZSwg aWlkKTsKLQkJCWJvb2wJCWtpbGx0dXBsZSA9IGZhbHNlOwotCi0JCQlpZiAoQlRyZWVUdXBsZUlz UG9zdGluZyhpdHVwbGUpKQotCQkJewotCQkJCWludAkJCXBpID0gaSArIDE7Ci0JCQkJaW50CQkJ bnBvc3RpbmcgPSBCVHJlZVR1cGxlR2V0TlBvc3RpbmcoaXR1cGxlKTsKLQkJCQlpbnQJCQlqOwot Ci0JCQkJLyoKLQkJCQkgKiBOb3RlIHRoYXQgdGhlIHBhZ2UgbWF5IGhhdmUgYmVlbiBtb2RpZmll ZCBpbiBhbG1vc3QgYW55IHdheQotCQkJCSAqIHNpbmNlIHdlIGZpcnN0IHJlYWQgaXQgKGluIHRo ZSAhc28tPmRyb3BQaW4gY2FzZSksIHNvIGl0J3MKLQkJCQkgKiBwb3NzaWJsZSB0aGF0IHRoaXMg cG9zdGluZyBsaXN0IHR1cGxlIHdhc24ndCBhIHBvc3RpbmcgbGlzdAotCQkJCSAqIHR1cGxlIHdo ZW4gd2UgZmlyc3QgZW5jb3VudGVyZWQgaXRzIGhlYXAgVElEcy4KLQkJCQkgKi8KLQkJCQlmb3Ig KGogPSAwOyBqIDwgbnBvc3Rpbmc7IGorKykKLQkJCQl7Ci0JCQkJCUl0ZW1Qb2ludGVyIGl0ZW0g PSBCVHJlZVR1cGxlR2V0UG9zdGluZ04oaXR1cGxlLCBqKTsKLQotCQkJCQlpZiAoIUl0ZW1Qb2lu dGVyRXF1YWxzKGl0ZW0sICZraXRlbS0+aGVhcFRpZCkpCi0JCQkJCQlicmVhazsJLyogb3V0IG9m IHBvc3RpbmcgbGlzdCBsb29wICovCi0KLQkJCQkJLyoKLQkJCQkJICoga2l0ZW0gbXVzdCBoYXZl IG1hdGNoaW5nIG9mZm51bSB3aGVuIGhlYXAgVElEcyBtYXRjaCwKLQkJCQkJICogdGhvdWdoIG9u bHkgaW4gdGhlIGNvbW1vbiBjYXNlIHdoZXJlIHRoZSBwYWdlIGNhbid0Ci0JCQkJCSAqIGhhdmUg YmVlbiBjb25jdXJyZW50bHkgbW9kaWZpZWQKLQkJCQkJICovCi0JCQkJCUFzc2VydChraXRlbS0+ aW5kZXhPZmZzZXQgPT0gb2ZmbnVtIHx8ICFzby0+ZHJvcFBpbik7Ci0KLQkJCQkJLyoKLQkJCQkJ ICogUmVhZC1haGVhZCB0byBsYXRlciBraXRlbXMgaGVyZS4KLQkJCQkJICoKLQkJCQkJICogV2Ug cmVseSBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0IG5vdCBhZHZhbmNpbmcga2l0ZW0gaGVyZQotCQkJ CQkgKiB3aWxsIHByZXZlbnQgdXMgZnJvbSBjb25zaWRlcmluZyB0aGUgcG9zdGluZyBsaXN0IHR1 cGxlCi0JCQkJCSAqIGZ1bGx5IGRlYWQgYnkgbm90IG1hdGNoaW5nIGl0cyBuZXh0IGhlYXAgVElE IGluIG5leHQKLQkJCQkJICogbG9vcCBpdGVyYXRpb24uCi0JCQkJCSAqCi0JCQkJCSAqIElmLCBv biB0aGUgb3RoZXIgaGFuZCwgdGhpcyBpcyB0aGUgZmluYWwgaGVhcCBUSUQgaW4KLQkJCQkJICog dGhlIHBvc3RpbmcgbGlzdCB0dXBsZSwgdGhlbiB0dXBsZSBnZXRzIGtpbGxlZAotCQkJCQkgKiBy ZWdhcmRsZXNzIChpLmUuIHdlIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUgbGFzdAotCQkJCQkg KiBraXRlbSBpcyBhbHNvIHRoZSBsYXN0IGhlYXAgVElEIGluIHRoZSBsYXN0IGluZGV4IHR1cGxl Ci0JCQkJCSAqIGNvcnJlY3RseSAtLSBwb3N0aW5nIHR1cGxlIHN0aWxsIGdldHMga2lsbGVkKS4K LQkJCQkJICovCi0JCQkJCWlmIChwaSA8IG51bUtpbGxlZCkKLQkJCQkJCWtpdGVtID0gJnNvLT5j dXJyUG9zLml0ZW1zW3NvLT5raWxsZWRJdGVtc1twaSsrXV07Ci0JCQkJfQotCi0JCQkJLyoKLQkJ CQkgKiBEb24ndCBib3RoZXIgYWR2YW5jaW5nIHRoZSBvdXRlcm1vc3QgbG9vcCdzIGludCBpdGVy YXRvciB0bwotCQkJCSAqIGF2b2lkIHByb2Nlc3Npbmcga2lsbGVkIGl0ZW1zIHRoYXQgcmVsYXRl IHRvIHRoZSBzYW1lCi0JCQkJICogb2ZmbnVtL3Bvc3RpbmcgbGlzdCB0dXBsZS4gIFRoaXMgbWlj cm8tb3B0aW1pemF0aW9uIGhhcmRseQotCQkJCSAqIHNlZW1zIHdvcnRoIGl0LiAgKEZ1cnRoZXIg aXRlcmF0aW9ucyBvZiB0aGUgb3V0ZXJtb3N0IGxvb3AKLQkJCQkgKiB3aWxsIGZhaWwgdG8gbWF0 Y2ggb24gdGhpcyBzYW1lIHBvc3RpbmcgbGlzdCdzIGZpcnN0IGhlYXAKLQkJCQkgKiBUSUQgaW5z dGVhZCwgc28gd2UnbGwgYWR2YW5jZSB0byB0aGUgbmV4dCBvZmZudW0vaW5kZXgKLQkJCQkgKiB0 dXBsZSBwcmV0dHkgcXVpY2tseS4pCi0JCQkJICovCi0JCQkJaWYgKGogPT0gbnBvc3RpbmcpCi0J CQkJCWtpbGx0dXBsZSA9IHRydWU7Ci0JCQl9Ci0JCQllbHNlIGlmIChJdGVtUG9pbnRlckVxdWFs cygmaXR1cGxlLT50X3RpZCwgJmtpdGVtLT5oZWFwVGlkKSkKLQkJCQlraWxsdHVwbGUgPSB0cnVl OwotCi0JCQkvKgotCQkJICogTWFyayBpbmRleCBpdGVtIGFzIGRlYWQsIGlmIGl0IGlzbid0IGFs cmVhZHkuICBTaW5jZSB0aGlzCi0JCQkgKiBoYXBwZW5zIHdoaWxlIGhvbGRpbmcgYSBidWZmZXIg bG9jayBwb3NzaWJseSBpbiBzaGFyZWQgbW9kZSwKLQkJCSAqIGl0J3MgcG9zc2libGUgdGhhdCBt dWx0aXBsZSBwcm9jZXNzZXMgYXR0ZW1wdCB0byBkbyB0aGlzCi0JCQkgKiBzaW11bHRhbmVvdXNs eSwgbGVhZGluZyB0byBtdWx0aXBsZSBmdWxsLXBhZ2UgaW1hZ2VzIGJlaW5nIHNlbnQKLQkJCSAq IHRvIFdBTCAoaWYgd2FsX2xvZ19oaW50cyBvciBkYXRhIGNoZWNrc3VtcyBhcmUgZW5hYmxlZCks IHdoaWNoCi0JCQkgKiBpcyB1bmRlc2lyYWJsZS4KLQkJCSAqLwotCQkJaWYgKGtpbGx0dXBsZSAm JiAhSXRlbUlkSXNEZWFkKGlpZCkpCi0JCQl7Ci0JCQkJaWYgKCFraWxsZWRzb21ldGhpbmcpCi0J CQkJewotCQkJCQkvKgotCQkJCQkgKiBVc2UgdGhlIGhpbnQgYml0IGluZnJhc3RydWN0dXJlIHRv IGNoZWNrIGlmIHdlIGNhbgotCQkJCQkgKiB1cGRhdGUgdGhlIHBhZ2Ugd2hpbGUganVzdCBob2xk aW5nIGEgc2hhcmUgbG9jay4gSWYgd2UKLQkJCQkJICogYXJlIG5vdCBhbGxvd2VkLCB0aGVyZSdz IG5vIHBvaW50IGNvbnRpbnVpbmcuCi0JCQkJCSAqLwotCQkJCQlpZiAoIUJ1ZmZlckJlZ2luU2V0 SGludEJpdHMoYnVmKSkKLQkJCQkJCWdvdG8gdW5sb2NrX3BhZ2U7Ci0JCQkJfQotCi0JCQkJLyog Zm91bmQgdGhlIGl0ZW0vYWxsIHBvc3RpbmcgbGlzdCBpdGVtcyAqLwotCQkJCUl0ZW1JZE1hcmtE ZWFkKGlpZCk7Ci0JCQkJa2lsbGVkc29tZXRoaW5nID0gdHJ1ZTsKLQkJCQlicmVhazsJCQkvKiBv dXQgb2YgaW5uZXIgc2VhcmNoIGxvb3AgKi8KLQkJCX0KLQkJCW9mZm51bSA9IE9mZnNldE51bWJl ck5leHQob2ZmbnVtKTsKLQkJfQotCX0KLQotCS8qCi0JICogU2luY2UgdGhpcyBjYW4gYmUgcmVk b25lIGxhdGVyIGlmIG5lZWRlZCwgbWFyayBhcyBkaXJ0eSBoaW50LgotCSAqCi0JICogV2hlbmV2 ZXIgd2UgbWFyayBhbnl0aGluZyBMUF9ERUFELCB3ZSBhbHNvIHNldCB0aGUgcGFnZSdzCi0JICog QlRQX0hBU19HQVJCQUdFIGZsYWcsIHdoaWNoIGlzIGxpa2V3aXNlIGp1c3QgYSBoaW50LiAgKE5v dGUgdGhhdCB3ZQotCSAqIG9ubHkgcmVseSBvbiB0aGUgcGFnZS1sZXZlbCBmbGFnIGluICFoZWFw a2V5c3BhY2UgaW5kZXhlcy4pCi0JICovCi0JaWYgKGtpbGxlZHNvbWV0aGluZykKLQl7Ci0JCW9w YXF1ZS0+YnRwb19mbGFncyB8PSBCVFBfSEFTX0dBUkJBR0U7Ci0JCUJ1ZmZlckZpbmlzaFNldEhp bnRCaXRzKGJ1ZiwgdHJ1ZSwgdHJ1ZSk7Ci0JfQotCi11bmxvY2tfcGFnZToKLQlpZiAoIXNvLT5k cm9wUGluKQotCQlfYnRfdW5sb2NrYnVmKHJlbCwgYnVmKTsKLQllbHNlCi0JCV9idF9yZWxidWYo cmVsLCBidWYpOwotfQotCi0KIC8qCiAgKiBUaGUgZm9sbG93aW5nIHJvdXRpbmVzIG1hbmFnZSBh IHNoYXJlZC1tZW1vcnkgYXJlYSBpbiB3aGljaCB3ZSB0cmFjawogICogYXNzaWdubWVudCBvZiAi dmFjdXVtIGN5Y2xlIElEcyIgdG8gY3VycmVudGx5LWFjdGl2ZSBidHJlZSB2YWN1dW1pbmcKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0eGxvZy5jIGIvc3JjL2JhY2tl bmQvYWNjZXNzL25idHJlZS9uYnR4bG9nLmMKaW5kZXggZGZmN2QyODZmLi4zYmM1ZTVjY2QgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0eGxvZy5jCisrKyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0eGxvZy5jCkBAIC0xMDk1LDE1ICsxMDk1LDE1IEBAIGJ0 cmVlX21hc2soY2hhciAqcGFnZWRhdGEsIEJsb2NrTnVtYmVyIGJsa25vKQogCQkvKgogCQkgKiBJ biBidHJlZSBsZWFmIHBhZ2VzLCBpdCBpcyBwb3NzaWJsZSB0byBtb2RpZnkgdGhlIExQX0ZMQUdT IHdpdGhvdXQKIAkJICogZW1pdHRpbmcgYW55IFdBTCByZWNvcmQuIEhlbmNlLCBtYXNrIHRoZSBs aW5lIHBvaW50ZXIgZmxhZ3MuIFNlZQotCQkgKiBfYnRfa2lsbGl0ZW1zKCksIF9idF9jaGVja191 bmlxdWUoKSBmb3IgZGV0YWlscy4KKwkJICogYnRraWxsaXRlbXNiYXRjaCgpLCBfYnRfY2hlY2tf dW5pcXVlKCkgZm9yIGRldGFpbHMuCiAJCSAqLwogCQltYXNrX2xwX2ZsYWdzKHBhZ2UpOwogCX0K IAogCS8qCiAJICogQlRQX0hBU19HQVJCQUdFIGlzIGp1c3QgYW4gdW4tbG9nZ2VkIGhpbnQgYml0 LiBTbywgbWFzayBpdC4gU2VlCi0JICogX2J0X2RlbGV0ZV9vcl9kZWR1cF9vbmVfcGFnZSgpLCBf YnRfa2lsbGl0ZW1zKCksIGFuZCBfYnRfY2hlY2tfdW5pcXVlKCkKLQkgKiBmb3IgZGV0YWlscy4K KwkgKiBfYnRfZGVsZXRlX29yX2RlZHVwX29uZV9wYWdlKCksIGJ0a2lsbGl0ZW1zYmF0Y2goKSwg YW5kCisJICogX2J0X2NoZWNrX3VuaXF1ZSgpIGZvciBkZXRhaWxzLgogCSAqLwogCW1hc2tvcGFx LT5idHBvX2ZsYWdzICY9IH5CVFBfSEFTX0dBUkJBR0U7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9zcGdpc3Qvc3BndXRpbHMuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qv c3BndXRpbHMuYwppbmRleCBmMmVlMzMzZjYuLjc0NTQzNWRhMyAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd1dGlscy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9z cGdpc3Qvc3BndXRpbHMuYwpAQCAtNTQsNiArNTQsNyBAQCBzcGdoYW5kbGVyKFBHX0ZVTkNUSU9O X0FSR1MpCiAJCS5hbWNvbnNpc3RlbnRlcXVhbGl0eSA9IGZhbHNlLAogCQkuYW1jb25zaXN0ZW50 b3JkZXJpbmcgPSBmYWxzZSwKIAkJLmFtY2FuYmFja3dhcmQgPSBmYWxzZSwKKwkJLmFtY2FubWFy a3BvcyA9IGZhbHNlLAogCQkuYW1jYW51bmlxdWUgPSBmYWxzZSwKIAkJLmFtY2FubXVsdGljb2wg PSBmYWxzZSwKIAkJLmFtb3B0aW9uYWxrZXkgPSB0cnVlLApAQCAtODgsMTAgKzg5LDEyIEBAIHNw Z2hhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAkJLmFtYmVnaW5zY2FuID0gc3BnYmVnaW5zY2Fu LAogCQkuYW1yZXNjYW4gPSBzcGdyZXNjYW4sCiAJCS5hbWdldHR1cGxlID0gc3BnZ2V0dHVwbGUs CisJCS5hbWdldGJhdGNoID0gTlVMTCwKKwkJLmFtdW5ndWFyZGJhdGNoID0gTlVMTCwKKwkJLmFt a2lsbGl0ZW1zYmF0Y2ggPSBOVUxMLAogCQkuYW1nZXRiaXRtYXAgPSBzcGdnZXRiaXRtYXAsCiAJ CS5hbWVuZHNjYW4gPSBzcGdlbmRzY2FuLAotCQkuYW1tYXJrcG9zID0gTlVMTCwKLQkJLmFtcmVz dHJwb3MgPSBOVUxMLAorCQkuYW1wb3NyZXNldCA9IE5VTEwsCiAJCS5hbWVzdGltYXRlcGFyYWxs ZWxzY2FuID0gTlVMTCwKIAkJLmFtaW5pdHBhcmFsbGVsc2NhbiA9IE5VTEwsCiAJCS5hbXBhcmFs bGVscmVzY2FuID0gTlVMTCwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90 YWJsZWFtYXBpLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbWFwaS5jCmluZGV4 IDcyZDJjNjYyYi4uNDJkYzM2ZGY1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdGFi bGUvdGFibGVhbWFwaS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtYXBp LmMKQEAgLTUxLDggKzUxLDExIEBAIEdldFRhYmxlQW1Sb3V0aW5lKE9pZCBhbWhhbmRsZXIpCiAJ QXNzZXJ0KHJvdXRpbmUtPnBhcmFsbGVsc2Nhbl9yZWluaXRpYWxpemUgIT0gTlVMTCk7CiAKIAlB c3NlcnQocm91dGluZS0+aW5kZXhfc2Nhbl9iZWdpbiAhPSBOVUxMKTsKLQlBc3NlcnQocm91dGlu ZS0+aW5kZXhfc2Nhbl9yZXNldCAhPSBOVUxMKTsKKwlBc3NlcnQocm91dGluZS0+aW5kZXhfc2Nh bl9yZXNjYW4gIT0gTlVMTCk7CiAJQXNzZXJ0KHJvdXRpbmUtPmluZGV4X3NjYW5fZW5kICE9IE5V TEwpOworCUFzc2VydChyb3V0aW5lLT5pbmRleF9zY2FuX2JhdGNoX2luaXQgIT0gTlVMTCk7CisJ QXNzZXJ0KHJvdXRpbmUtPmluZGV4X3NjYW5fbWFya3BvcyAhPSBOVUxMKTsKKwlBc3NlcnQocm91 dGluZS0+aW5kZXhfc2Nhbl9yZXN0cnBvcyAhPSBOVUxMKTsKIAogCUFzc2VydChyb3V0aW5lLT5m ZXRjaF90aWQgIT0gTlVMTCk7CiAJQXNzZXJ0KHJvdXRpbmUtPnR1cGxlX2ZldGNoX3Jvd192ZXJz aW9uICE9IE5VTEwpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvaW5kZXhjbWRz LmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9pbmRleGNtZHMuYwppbmRleCA5YWI3NGM4ZGYuLjFj YWZmZWI4OSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvaW5kZXhjbWRzLmMKKysr IGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvaW5kZXhjbWRzLmMKQEAgLTg4NSw3ICs4ODUsNyBAQCBE ZWZpbmVJbmRleChQYXJzZVN0YXRlICpwc3RhdGUsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFU VVJFX05PVF9TVVBQT1JURUQpLAogCQkJCSBlcnJtc2coImFjY2VzcyBtZXRob2QgXCIlc1wiIGRv ZXMgbm90IHN1cHBvcnQgbXVsdGljb2x1bW4gaW5kZXhlcyIsCiAJCQkJCQlhY2Nlc3NNZXRob2RO YW1lKSkpOwotCWlmIChleGNsdXNpb24gJiYgYW1Sb3V0aW5lLT5hbWdldHR1cGxlID09IE5VTEwp CisJaWYgKGV4Y2x1c2lvbiAmJiBhbVJvdXRpbmUtPmFtZ2V0dHVwbGUgPT0gTlVMTCAmJiBhbVJv dXRpbmUtPmFtZ2V0YmF0Y2ggPT0gTlVMTCkKIAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJyY29k ZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCiAJCQkJIGVycm1zZygiYWNjZXNzIG1l dGhvZCBcIiVzXCIgZG9lcyBub3Qgc3VwcG9ydCBleGNsdXNpb24gY29uc3RyYWludHMiLApkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0FtaS5jIGIvc3JjL2JhY2tlbmQvZXhl Y3V0b3IvZXhlY0FtaS5jCmluZGV4IDM3ZmUwM2ZkYy4uOTc5YTg1MmZlIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9leGVjdXRvci9leGVjQW1pLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv ZXhlY0FtaS5jCkBAIC00MjksNyArNDI5LDcgQEAgRXhlY1N1cHBvcnRzTWFya1Jlc3RvcmUoUGF0 aCAqcGF0aG5vZGUpCiAJCWNhc2UgVF9JbmRleE9ubHlTY2FuOgogCiAJCQkvKgotCQkJICogTm90 IGFsbCBpbmRleCB0eXBlcyBzdXBwb3J0IG1hcmsvcmVzdG9yZS4KKwkJCSAqIE5vdCBhbGwgaW5k ZXggdHlwZXMgc3VwcG9ydCByZXN0b3JpbmcgYSBtYXJrCiAJCQkgKi8KIAkJCXJldHVybiBjYXN0 Tm9kZShJbmRleFBhdGgsIHBhdGhub2RlKS0+aW5kZXhpbmZvLT5hbWNhbm1hcmtwb3M7CiAKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleG9ubHlzY2FuLmMgYi9zcmMv YmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhvbmx5c2Nhbi5jCmluZGV4IDI4YTIzZGIwYi4uODRh OTdiNzFkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhvbmx5c2Nh bi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleG9ubHlzY2FuLmMKQEAgLTMx NSw3ICszMTUsNyBAQCBFeGVjSW5kZXhPbmx5TWFya1BvcyhJbmRleE9ubHlTY2FuU3RhdGUgKm5v ZGUpCiAJCX0KIAl9CiAKLQlpbmRleF9tYXJrcG9zKG5vZGUtPmlvc3NfU2NhbkRlc2MpOworCXRh YmxlX2luZGV4X3NjYW5fbWFya3Bvcyhub2RlLT5pb3NzX1NjYW5EZXNjKTsKIH0KIAogLyogLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQpAQCAtMzQ0LDcgKzM0NCw3IEBAIEV4ZWNJbmRleE9ubHlSZXN0clBvcyhJbmRleE9ubHlT Y2FuU3RhdGUgKm5vZGUpCiAJCX0KIAl9CiAKLQlpbmRleF9yZXN0cnBvcyhub2RlLT5pb3NzX1Nj YW5EZXNjKTsKKwl0YWJsZV9pbmRleF9zY2FuX3Jlc3RycG9zKG5vZGUtPmlvc3NfU2NhbkRlc2Mp OwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2Rl SW5kZXhzY2FuLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhzY2FuLmMKaW5kZXgg NDU3ZmJkYjA3Li5iYTNkNDk5NmMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25v ZGVJbmRleHNjYW4uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhzY2FuLmMK QEAgLTg3Miw3ICs4NzIsNyBAQCBFeGVjSW5kZXhNYXJrUG9zKEluZGV4U2NhblN0YXRlICpub2Rl KQogCQl9CiAJfQogCi0JaW5kZXhfbWFya3Bvcyhub2RlLT5pc3NfU2NhbkRlc2MpOworCXRhYmxl X2luZGV4X3NjYW5fbWFya3Bvcyhub2RlLT5pc3NfU2NhbkRlc2MpOwogfQogCiAvKiAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CkBAIC05MDEsNyArOTAxLDcgQEAgRXhlY0luZGV4UmVzdHJQb3MoSW5kZXhTY2FuU3RhdGUgKm5v ZGUpCiAJCX0KIAl9CiAKLQlpbmRleF9yZXN0cnBvcyhub2RlLT5pc3NfU2NhbkRlc2MpOworCXRh YmxlX2luZGV4X3NjYW5fcmVzdHJwb3Mobm9kZS0+aXNzX1NjYW5EZXNjKTsKIH0KIAogLyogLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlam9pbi5jIGIv c3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlam9pbi5jCmluZGV4IGY4NDIxYTc0Yy4uNmU4 ZmUwN2Y2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTWVyZ2Vqb2luLmMK KysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlam9pbi5jCkBAIC01NCw4ICs1NCw4 IEBACiAgKgkJdGhlIGlubmVyICI1J3MiLiBUaGlzIHJlcXVpcmVzIHJlcG9zaXRpb25pbmcgdGhl IGlubmVyICJjdXJzb3IiCiAgKgkJdG8gcG9pbnQgYXQgdGhlIGZpcnN0IGlubmVyICI1Ii4gVGhp cyBpcyBkb25lIGJ5ICJtYXJraW5nIiB0aGUKICAqCQlmaXJzdCBpbm5lciA1IHNvIHdlIGNhbiBy ZXN0b3JlIHRoZSAiY3Vyc29yIiB0byBpdCBiZWZvcmUgam9pbmluZwotICoJCXdpdGggdGhlIHNl Y29uZCBvdXRlciA1LiBUaGUgYWNjZXNzIG1ldGhvZCBpbnRlcmZhY2UgcHJvdmlkZXMKLSAqCQly b3V0aW5lcyB0byBtYXJrIGFuZCByZXN0b3JlIHRvIGEgdHVwbGUuCisgKgkJd2l0aCB0aGUgc2Vj b25kIG91dGVyIDUuIFRoZSB0YWJsZSBBTSBpbnRlcmZhY2UgcHJvdmlkZXMKKyAqCQlyb3V0aW5l cyB0byBtYXJrIGFuZCByZXN0b3JlIHRvIGEgdHVwbGUgZHVyaW5nIGluZGV4IHNjYW5zLgogICoK ICAqCiAgKgkJRXNzZW50aWFsIG9wZXJhdGlvbiBvZiB0aGUgbWVyZ2Ugam9pbiBhbGdvcml0aG0g aXMgYXMgZm9sbG93czoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2lu ZHhwYXRoLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9pbmR4cGF0aC5jCmluZGV4IDNm NWQ0ZmEzMS4uOTRmZWRmMzJjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0 aC9pbmR4cGF0aC5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2luZHhwYXRoLmMK QEAgLTQ0LDcgKzQ0LDcgQEAKIC8qIFdoZXRoZXIgd2UgYXJlIGxvb2tpbmcgZm9yIHBsYWluIGlu ZGV4c2NhbiwgYml0bWFwIHNjYW4sIG9yIGVpdGhlciAqLwogdHlwZWRlZiBlbnVtCiB7Ci0JU1Rf SU5ERVhTQ0FOLAkJCQkvKiBtdXN0IHN1cHBvcnQgYW1nZXR0dXBsZSAqLworCVNUX0lOREVYU0NB TiwJCQkJLyogbXVzdCBzdXBwb3J0IGFtZ2V0dHVwbGUgb3IgYW1nZXRiYXRjaCAqLwogCVNUX0JJ VE1BUFNDQU4sCQkJCS8qIG11c3Qgc3VwcG9ydCBhbWdldGJpdG1hcCAqLwogCVNUX0FOWVNDQU4s CQkJCQkvKiBlaXRoZXIgaXMgb2theSAqLwogfSBTY2FuVHlwZUNvbnRyb2w7CkBAIC03NDYsNyAr NzQ2LDcgQEAgZ2V0X2luZGV4X3BhdGhzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpy ZWwsCiAJewogCQlJbmRleFBhdGggICppcGF0aCA9IChJbmRleFBhdGggKikgbGZpcnN0KGxjKTsK IAotCQlpZiAoaW5kZXgtPmFtaGFzZ2V0dHVwbGUpCisJCWlmIChpbmRleC0+YW1jYW5wbGFpbnNj YW4pCiAJCQlhZGRfcGF0aChyZWwsIChQYXRoICopIGlwYXRoKTsKIAogCQlpZiAoaW5kZXgtPmFt aGFzZ2V0Yml0bWFwICYmCkBAIC04MzQsNyArODM0LDcgQEAgYnVpbGRfaW5kZXhfcGF0aHMoUGxh bm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAlzd2l0Y2ggKHNjYW50eXBlKQogCXsK IAkJY2FzZSBTVF9JTkRFWFNDQU46Ci0JCQlpZiAoIWluZGV4LT5hbWhhc2dldHR1cGxlKQorCQkJ aWYgKCFpbmRleC0+YW1jYW5wbGFpbnNjYW4pCiAJCQkJcmV0dXJuIE5JTDsKIAkJCWJyZWFrOwog CQljYXNlIFNUX0JJVE1BUFNDQU46CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIv dXRpbC9wbGFuY2F0LmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMKaW5k ZXggN2M0YmUxNzQ4Li41NGJiYzY2OTIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXpl ci91dGlsL3BsYW5jYXQuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0 LmMKQEAgLTMxMCwxMSArMzEwLDExIEBAIGdldF9yZWxhdGlvbl9pbmZvKFBsYW5uZXJJbmZvICpy b290LCBPaWQgcmVsYXRpb25PYmplY3RJZCwgYm9vbCBpbmhwYXJlbnQsCiAJCQkJaW5mby0+YW1z ZWFyY2hhcnJheSA9IGFtcm91dGluZS0+YW1zZWFyY2hhcnJheTsKIAkJCQlpbmZvLT5hbXNlYXJj aG51bGxzID0gYW1yb3V0aW5lLT5hbXNlYXJjaG51bGxzOwogCQkJCWluZm8tPmFtY2FucGFyYWxs ZWwgPSBhbXJvdXRpbmUtPmFtY2FucGFyYWxsZWw7Ci0JCQkJaW5mby0+YW1oYXNnZXR0dXBsZSA9 IChhbXJvdXRpbmUtPmFtZ2V0dHVwbGUgIT0gTlVMTCk7CisJCQkJaW5mby0+YW1jYW5wbGFpbnNj YW4gPSAoYW1yb3V0aW5lLT5hbWdldGJhdGNoICE9IE5VTEwgfHwKKwkJCQkJCQkJCQlhbXJvdXRp bmUtPmFtZ2V0dHVwbGUgIT0gTlVMTCk7CiAJCQkJaW5mby0+YW1oYXNnZXRiaXRtYXAgPSBhbXJv dXRpbmUtPmFtZ2V0Yml0bWFwICE9IE5VTEwgJiYKIAkJCQkJcmVsYXRpb24tPnJkX3RhYmxlYW0t PnNjYW5fYml0bWFwX25leHRfdHVwbGUgIT0gTlVMTDsKLQkJCQlpbmZvLT5hbWNhbm1hcmtwb3Mg PSAoYW1yb3V0aW5lLT5hbW1hcmtwb3MgIT0gTlVMTCAmJgotCQkJCQkJCQkJICBhbXJvdXRpbmUt PmFtcmVzdHJwb3MgIT0gTlVMTCk7CisJCQkJaW5mby0+YW1jYW5tYXJrcG9zID0gYW1yb3V0aW5l LT5hbWNhbm1hcmtwb3M7CiAJCQkJaW5mby0+YW1jb3N0ZXN0aW1hdGUgPSBhbXJvdXRpbmUtPmFt Y29zdGVzdGltYXRlOwogCQkJCUFzc2VydChpbmZvLT5hbWNvc3Rlc3RpbWF0ZSAhPSBOVUxMKTsK IApAQCAtNDExLDcgKzQxMSw3IEBAIGdldF9yZWxhdGlvbl9pbmZvKFBsYW5uZXJJbmZvICpyb290 LCBPaWQgcmVsYXRpb25PYmplY3RJZCwgYm9vbCBpbmhwYXJlbnQsCiAJCQkJaW5mby0+YW1zZWFy Y2hhcnJheSA9IGZhbHNlOwogCQkJCWluZm8tPmFtc2VhcmNobnVsbHMgPSBmYWxzZTsKIAkJCQlp bmZvLT5hbWNhbnBhcmFsbGVsID0gZmFsc2U7Ci0JCQkJaW5mby0+YW1oYXNnZXR0dXBsZSA9IGZh bHNlOworCQkJCWluZm8tPmFtY2FucGxhaW5zY2FuID0gZmFsc2U7CiAJCQkJaW5mby0+YW1oYXNn ZXRiaXRtYXAgPSBmYWxzZTsKIAkJCQlpbmZvLT5hbWNhbm1hcmtwb3MgPSBmYWxzZTsKIAkJCQlp bmZvLT5hbWNvc3Rlc3RpbWF0ZSA9IE5VTEw7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9sb2dpY2FsL3JlbGF0aW9uLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL3JlbGF0aW9uLmMKaW5kZXggMjk2Y2JhZWRlLi5hMzI4ZmRiODEgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVsYXRpb24uYworKysgYi9zcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3JlbGF0aW9uLmMKQEAgLTgzNSw2ICs4MzUsNyBAQCBJc0lu ZGV4VXNhYmxlRm9yUmVwbGljYUlkZW50aXR5RnVsbChSZWxhdGlvbiBpZHhyZWwsIEF0dHJNYXAg KmF0dHJtYXApCiB7CiAJQXR0ck51bWJlcglrZXljb2w7CiAJb2lkdmVjdG9yICAqaW5kY2xhc3M7 CisJY29uc3QgSW5kZXhBbVJvdXRpbmUgKmFtcm91dGluZTsKIAogCS8qIFRoZSBpbmRleCBtdXN0 IG5vdCBiZSBhIHBhcnRpYWwgaW5kZXggKi8KIAlpZiAoIWhlYXBfYXR0aXNudWxsKGlkeHJlbC0+ cmRfaW5kZXh0dXBsZSwgQW51bV9wZ19pbmRleF9pbmRwcmVkLCBOVUxMKSkKQEAgLTg4NiwxMCAr ODg3LDEyIEBAIElzSW5kZXhVc2FibGVGb3JSZXBsaWNhSWRlbnRpdHlGdWxsKFJlbGF0aW9uIGlk eHJlbCwgQXR0ck1hcCAqYXR0cm1hcCkKIAkJcmV0dXJuIGZhbHNlOwogCiAJLyoKLQkgKiBUaGUg Z2l2ZW4gaW5kZXggYWNjZXNzIG1ldGhvZCBtdXN0IGltcGxlbWVudCAiYW1nZXR0dXBsZSIsIHdo aWNoIHdpbGwKLQkgKiBiZSB1c2VkIGxhdGVyIHRvIGZldGNoIHRoZSB0dXBsZXMuICBTZWUgUmVs YXRpb25GaW5kUmVwbFR1cGxlQnlJbmRleCgpLgorCSAqIFRoZSBnaXZlbiBpbmRleCBhY2Nlc3Mg bWV0aG9kIG11c3QgaW1wbGVtZW50ICJhbWdldHR1cGxlIiBvcgorCSAqICJhbWdldGJhdGNoIiwg d2hpY2ggd2lsbCBiZSB1c2VkIGxhdGVyIHRvIGZldGNoIHRoZSB0dXBsZXMuICBTZWUKKwkgKiBS ZWxhdGlvbkZpbmRSZXBsVHVwbGVCeUluZGV4KCkuCiAJICovCi0JaWYgKEdldEluZGV4QW1Sb3V0 aW5lQnlBbUlkKGlkeHJlbC0+cmRfcmVsLT5yZWxhbSwgZmFsc2UpLT5hbWdldHR1cGxlID09IE5V TEwpCisJYW1yb3V0aW5lID0gR2V0SW5kZXhBbVJvdXRpbmVCeUFtSWQoaWR4cmVsLT5yZF9yZWwt PnJlbGFtLCBmYWxzZSk7CisJaWYgKGFtcm91dGluZS0+YW1nZXR0dXBsZSA9PSBOVUxMICYmIGFt cm91dGluZS0+YW1nZXRiYXRjaCA9PSBOVUxMKQogCQlyZXR1cm4gZmFsc2U7CiAKIAlyZXR1cm4g dHJ1ZTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9hbXV0aWxzLmMgYi9zcmMv YmFja2VuZC91dGlscy9hZHQvYW11dGlscy5jCmluZGV4IGM4MWZiNjFhMC4uZGRmZDFiNTVjIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvYW11dGlscy5jCisrKyBiL3NyYy9iYWNr ZW5kL3V0aWxzL2FkdC9hbXV0aWxzLmMKQEAgLTM2MywxMCArMzYzLDExIEBAIGluZGV4YW1fcHJv cGVydHkoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8sCiAJCQkJUEdfUkVUVVJOX0JPT0wocm91dGlu ZS0+YW1jbHVzdGVyYWJsZSk7CiAKIAkJCWNhc2UgQU1QUk9QX0lOREVYX1NDQU46Ci0JCQkJUEdf UkVUVVJOX0JPT0wocm91dGluZS0+YW1nZXR0dXBsZSA/IHRydWUgOiBmYWxzZSk7CisJCQkJUEdf UkVUVVJOX0JPT0wocm91dGluZS0+YW1nZXR0dXBsZSAhPSBOVUxMIHx8CisJCQkJCQkJICAgcm91 dGluZS0+YW1nZXRiYXRjaCAhPSBOVUxMKTsKIAogCQkJY2FzZSBBTVBST1BfQklUTUFQX1NDQU46 Ci0JCQkJUEdfUkVUVVJOX0JPT0wocm91dGluZS0+YW1nZXRiaXRtYXAgPyB0cnVlIDogZmFsc2Up OworCQkJCVBHX1JFVFVSTl9CT09MKHJvdXRpbmUtPmFtZ2V0Yml0bWFwICE9IE5VTEwpOwogCiAJ CQljYXNlIEFNUFJPUF9CQUNLV0FSRF9TQ0FOOgogCQkJCVBHX1JFVFVSTl9CT09MKHJvdXRpbmUt PmFtY2FuYmFja3dhcmQpOwpAQCAtMzkyLDcgKzM5Myw4IEBAIGluZGV4YW1fcHJvcGVydHkoRnVu Y3Rpb25DYWxsSW5mbyBmY2luZm8sCiAJCQlQR19SRVRVUk5fQk9PTChyb3V0aW5lLT5hbWNhbm11 bHRpY29sKTsKIAogCQljYXNlIEFNUFJPUF9DQU5fRVhDTFVERToKLQkJCVBHX1JFVFVSTl9CT09M KHJvdXRpbmUtPmFtZ2V0dHVwbGUgPyB0cnVlIDogZmFsc2UpOworCQkJUEdfUkVUVVJOX0JPT0wo cm91dGluZS0+YW1nZXR0dXBsZSAhPSBOVUxMIHx8CisJCQkJCQkgICByb3V0aW5lLT5hbWdldGJh dGNoICE9IE5VTEwpOwogCiAJCWNhc2UgQU1QUk9QX0NBTl9JTkNMVURFOgogCQkJUEdfUkVUVVJO X0JPT0wocm91dGluZS0+YW1jYW5pbmNsdWRlKTsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvYW1jaGVj ay92ZXJpZnlfbmJ0cmVlLmMgYi9jb250cmliL2FtY2hlY2svdmVyaWZ5X25idHJlZS5jCmluZGV4 IDNlZjJkNjZmOC4uYzVlMWY5MDEwIDEwMDY0NAotLS0gYS9jb250cmliL2FtY2hlY2svdmVyaWZ5 X25idHJlZS5jCisrKyBiL2NvbnRyaWIvYW1jaGVjay92ZXJpZnlfbmJ0cmVlLmMKQEAgLTM5NSw3 ICszOTUsNyBAQCBidF9jaGVja19ldmVyeV9sZXZlbChSZWxhdGlvbiByZWwsIFJlbGF0aW9uIGhl YXByZWwsIGJvb2wgaGVhcGtleXNwYWNlLAogCQkJIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJl bCkpOwogCiAJLyoKLQkgKiBUaGlzIGFzc2VydGlvbiBtYXRjaGVzIHRoZSBvbmUgaW4gaW5kZXhf Z2V0bmV4dF90aWQoKS4gIFNlZSBwYWdlCisJICogVGhpcyBhc3NlcnRpb24gbWF0Y2hlcyB0aGUg b25lIGluIGhlYXBhbV9pbmRleHNjYW4uYy4gIFNlZSBwYWdlCiAJICogcmVjeWNsaW5nLyJ2aXNp YmxlIHRvIGV2ZXJ5b25lIiBub3RlcyBpbiBuYnRyZWUgUkVBRE1FLgogCSAqLwogCUFzc2VydChU cmFuc2FjdGlvbklkSXNWYWxpZChSZWNlbnRYbWluKSk7CmRpZmYgLS1naXQgYS9jb250cmliL2Js b29tL2JsdXRpbHMuYyBiL2NvbnRyaWIvYmxvb20vYmx1dGlscy5jCmluZGV4IDUxMTFjZGM2ZC4u MjQ5YWY0OGU2IDEwMDY0NAotLS0gYS9jb250cmliL2Jsb29tL2JsdXRpbHMuYworKysgYi9jb250 cmliL2Jsb29tL2JsdXRpbHMuYwpAQCAtMTEzLDYgKzExMyw3IEBAIGJsaGFuZGxlcihQR19GVU5D VElPTl9BUkdTKQogCQkuYW1jb25zaXN0ZW50ZXF1YWxpdHkgPSBmYWxzZSwKIAkJLmFtY29uc2lz dGVudG9yZGVyaW5nID0gZmFsc2UsCiAJCS5hbWNhbmJhY2t3YXJkID0gZmFsc2UsCisJCS5hbWNh bm1hcmtwb3MgPSBmYWxzZSwKIAkJLmFtY2FudW5pcXVlID0gZmFsc2UsCiAJCS5hbWNhbm11bHRp Y29sID0gdHJ1ZSwKIAkJLmFtb3B0aW9uYWxrZXkgPSB0cnVlLApAQCAtMTQ2LDEwICsxNDcsMTIg QEAgYmxoYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCS5hbWJlZ2luc2NhbiA9IGJsYmVnaW5z Y2FuLAogCQkuYW1yZXNjYW4gPSBibHJlc2NhbiwKIAkJLmFtZ2V0dHVwbGUgPSBOVUxMLAorCQku YW1nZXRiYXRjaCA9IE5VTEwsCisJCS5hbXVuZ3VhcmRiYXRjaCA9IE5VTEwsCisJCS5hbWtpbGxp dGVtc2JhdGNoID0gTlVMTCwKIAkJLmFtZ2V0Yml0bWFwID0gYmxnZXRiaXRtYXAsCiAJCS5hbWVu ZHNjYW4gPSBibGVuZHNjYW4sCi0JCS5hbW1hcmtwb3MgPSBOVUxMLAotCQkuYW1yZXN0cnBvcyA9 IE5VTEwsCisJCS5hbXBvc3Jlc2V0ID0gTlVMTCwKIAkJLmFtZXN0aW1hdGVwYXJhbGxlbHNjYW4g PSBOVUxMLAogCQkuYW1pbml0cGFyYWxsZWxzY2FuID0gTlVMTCwKIAkJLmFtcGFyYWxsZWxyZXNj YW4gPSBOVUxMLApkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbCBiL2RvYy9z cmMvc2dtbC9pbmRleGFtLnNnbWwKaW5kZXggZjQ4ZGEzMTg1Li45OTcyZjYyY2YgMTAwNjQ0Ci0t LSBhL2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2luZGV4YW0u c2dtbApAQCAtMTE3LDYgKzExNyw4IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4QW1Sb3V0aW5lCiAg ICAgYm9vbCAgICAgICAgYW1jb25zaXN0ZW50b3JkZXJpbmc7CiAgICAgLyogZG9lcyBBTSBzdXBw b3J0IGJhY2t3YXJkIHNjYW5uaW5nPyAqLwogICAgIGJvb2wgICAgICAgIGFtY2FuYmFja3dhcmQ7 CisgICAgLyogZG9lcyBBTSBzdXBwb3J0IG1hcmsvcmVzdG9yZSBvZiBhIHNjYW4gcG9zaXRpb24/ ICovCisgICAgYm9vbCAgICAgICAgYW1jYW5tYXJrcG9zOwogICAgIC8qIGRvZXMgQU0gc3VwcG9y dCBVTklRVUUgaW5kZXhlcz8gKi8KICAgICBib29sICAgICAgICBhbWNhbnVuaXF1ZTsKICAgICAv KiBkb2VzIEFNIHN1cHBvcnQgbXVsdGktY29sdW1uIGluZGV4ZXM/ICovCkBAIC0xNjcsMTAgKzE2 OSwxMiBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleEFtUm91dGluZQogICAgIGFtYmVnaW5zY2FuX2Z1 bmN0aW9uIGFtYmVnaW5zY2FuOwogICAgIGFtcmVzY2FuX2Z1bmN0aW9uIGFtcmVzY2FuOwogICAg IGFtZ2V0dHVwbGVfZnVuY3Rpb24gYW1nZXR0dXBsZTsgICAgIC8qIGNhbiBiZSBOVUxMICovCisg ICAgYW1nZXRiYXRjaF9mdW5jdGlvbiBhbWdldGJhdGNoOyAvKiBjYW4gYmUgTlVMTCAqLworICAg IGFtdW5ndWFyZGJhdGNoX2Z1bmN0aW9uIGFtdW5ndWFyZGJhdGNoOyAvKiBjYW4gYmUgTlVMTCAq LworICAgIGFta2lsbGl0ZW1zYmF0Y2hfZnVuY3Rpb24gYW1raWxsaXRlbXNiYXRjaDsJLyogY2Fu IGJlIE5VTEwgKi8KICAgICBhbWdldGJpdG1hcF9mdW5jdGlvbiBhbWdldGJpdG1hcDsgICAvKiBj YW4gYmUgTlVMTCAqLwogICAgIGFtZW5kc2Nhbl9mdW5jdGlvbiBhbWVuZHNjYW47Ci0gICAgYW1t YXJrcG9zX2Z1bmN0aW9uIGFtbWFya3BvczsgICAgICAgLyogY2FuIGJlIE5VTEwgKi8KLSAgICBh bXJlc3RycG9zX2Z1bmN0aW9uIGFtcmVzdHJwb3M7ICAgICAvKiBjYW4gYmUgTlVMTCAqLworICAg IGFtcG9zcmVzZXRfZnVuY3Rpb24gYW1wb3NyZXNldDsgLyogY2FuIGJlIE5VTEwgKi8KIAogICAg IC8qIGludGVyZmFjZSBmdW5jdGlvbnMgdG8gc3VwcG9ydCBwYXJhbGxlbCBpbmRleCBzY2FucyAq LwogICAgIGFtZXN0aW1hdGVwYXJhbGxlbHNjYW5fZnVuY3Rpb24gYW1lc3RpbWF0ZXBhcmFsbGVs c2NhbjsgICAgLyogY2FuIGJlIE5VTEwgKi8KQEAgLTI4MCw2ICsyODQsMTkgQEAgdHlwZWRlZiBz dHJ1Y3QgSW5kZXhBbVJvdXRpbmUKICAgIHByZWRpY2F0ZXMsIGFuIHVwZGF0ZSBvZiBzdWNoIGFu IGF0dHJpYnV0ZSBhbHdheXMgZGlzYWJsZXMgPGFjcm9ueW0+SE9UPC9hY3JvbnltPi4KICAgPC9w YXJhPgogCisgIDxwYXJhPgorICAgVGhlIDxzdHJ1Y3RmaWVsZD5hbWNhbm1hcmtwb3M8L3N0cnVj dGZpZWxkPiBmbGFnIGluZGljYXRlcyB3aGV0aGVyIHRoZQorICAgaW5kZXggYWNjZXNzIG1ldGhv ZCBzdXBwb3J0cyBtYXJraW5nIGEgc2NhbiBwb3NpdGlvbiBhbmQgbGF0ZXIgcmVzdG9yaW5nCisg ICB0aGUgc2NhbiB0byBpdC4gIFRoZSBwbGFubmVyIHVzZXMgdGhpcyB0byBkZWNpZGUgd2hldGhl ciBhbiBpbmRleCBzY2FuIGNhbgorICAgYmUgdXNlZCBvbiB0aGUgaW5uZXIgc2lkZSBvZiBhIG1l cmdlIGpvaW4gZGlyZWN0bHksIG9yIHdoZXRoZXIgYQorICAgPGxpdGVyYWw+TWF0ZXJpYWxpemU8 L2xpdGVyYWw+IG5vZGUgbXVzdCBiZSBpbnRlcnBvc2VkLiAgTWFyayBhbmQgcmVzdG9yZQorICAg YnVpbGQgb24gdGhlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gYmF0Y2ggaW50ZXJm YWNlIChzZWUgPHhyZWYKKyAgICBsaW5rZW5kPSJpbmRleC1zY2FubmluZyIvPiksIHNvIGFuIGFj Y2VzcyBtZXRob2QgdGhhdCBwcm92aWRlcworICAgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0 aW9uPiAobm90IDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4pIG11c3QKKyAgIGxlYXZl IHRoaXMgZmFsc2UuICBBbiA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGFjY2VzcyBt ZXRob2QgbWF5CisgICBhbHNvIGxlYXZlIGl0IGZhbHNlIGlmIGl0cyBzY2FucyBjYW5ub3QgYmUg cmV3b3VuZCB0byBhbiBlYXJsaWVyIHBvc2l0aW9uLgorICA8L3BhcmE+CisKICA8L3NlY3QxPgog CiAgPHNlY3QxIGlkPSJpbmRleC1mdW5jdGlvbnMiPgpAQCAtNjc2LDggKzY5Myw0OSBAQCBhbWJl Z2luc2NhbiAoUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwKICAgIDxlbXBoYXNpcz5tdXN0PC9lbXBo YXNpcz4gY3JlYXRlIHRoaXMgc3RydWN0IGJ5IGNhbGxpbmcKICAgIDxmdW5jdGlvbj5SZWxhdGlv bkdldEluZGV4U2NhbigpPC9mdW5jdGlvbj4uICBJbiBtb3N0IGNhc2VzCiAgICA8ZnVuY3Rpb24+ YW1iZWdpbnNjYW48L2Z1bmN0aW9uPiBkb2VzIGxpdHRsZSBiZXlvbmQgbWFraW5nIHRoYXQgY2Fs bCBhbmQgcGVyaGFwcwotICAgYWNxdWlyaW5nIGxvY2tzOworICAgYWNxdWlyaW5nIGxvY2tzIGFu ZCBpbml0aWFsaXppbmcgc3RhbmRhcmQgPHN0cnVjdG5hbWU+SW5kZXhTY2FuRGVzYzwvc3RydWN0 bmFtZT4gZmllbGRzOwogICAgdGhlIGludGVyZXN0aW5nIHBhcnRzIG9mIGluZGV4LXNjYW4gc3Rh cnR1cCBhcmUgaW4gPGZ1bmN0aW9uPmFtcmVzY2FuPC9mdW5jdGlvbj4uCisgICBJbmRleCBhY2Nl c3MgbWV0aG9kcyB0aGF0IHVzZSB0aGUgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBp bnRlcmZhY2UKKyAgIG11c3QgYWxzbyBzZXQgdGhlIGZvbGxvd2luZyBmaWVsZHMgaW4gdGhlIHNj YW4gZGVzY3JpcHRvcjoKKyAgIDxpdGVtaXplZGxpc3Q+CisgICAgPGxpc3RpdGVtPgorICAgICA8 cGFyYT4KKyAgICAgIDxsaXRlcmFsPnNjYW4tJmd0O21heGl0ZW1zYmF0Y2g8L2xpdGVyYWw+OiB0 aGUgbWF4aW11bSBudW1iZXIgb2YgaXRlbXMKKyAgICAgIHRoYXQgY2FuIGFwcGVhciBpbiBhIHNp bmdsZSBiYXRjaCAodHlwaWNhbGx5IGRlcml2ZWQgZnJvbSB0aGUgaW5kZXggcGFnZQorICAgICAg c2l6ZSwgZS5nLiwgPGxpdGVyYWw+TWF4SW5kZXhUdXBsZXNQZXJQYWdlPC9saXRlcmFsPikuCisg ICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+ CisgICAgICA8bGl0ZXJhbD5zY2FuLSZndDtiYXRjaF9pbmRleF9vcGFxdWVfc3RhdGljPC9saXRl cmFsPjogdGhlCisgICAgICA8ZnVuY3Rpb24+TUFYQUxJR048L2Z1bmN0aW9uPidkIHNpemUgb2Yg dGhlIGluZGV4IEFNJ3MgbWFuZGF0b3J5IHBlci1iYXRjaAorICAgICAgb3BhcXVlIGFyZWEsIHdo b3NlIHNpemUgaXMgZml4ZWQgYXQgY29tcGlsZSB0aW1lLiAgRWFjaCBiYXRjaCBhbGxvY2F0aW9u CisgICAgICByZXNlcnZlcyB0aGlzIG11Y2ggc3BhY2UgaW1tZWRpYXRlbHkgYmVmb3JlIHRoZQor ICAgICAgPHN0cnVjdG5hbWU+SW5kZXhTY2FuQmF0Y2hEYXRhPC9zdHJ1Y3RuYW1lPiBwb2ludGVy LCBmb3IgdXNlIGJ5IHRoZSBpbmRleAorICAgICAgQU0gdG8gc3RvcmUgcGVyLXBhZ2UgbmF2aWdh dGlvbiBzdGF0ZSAoZS5nLiwgYmF0Y2ggaW5kZXggcGFnZSdzIGJ1ZmZlciBwaW4KKyAgICAgIGFu ZCBzaWJsaW5nIHBhZ2UgbGlua3MpLgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAg ICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgPGxpdGVyYWw+c2Nhbi0mZ3Q7YmF0Y2hf dHVwbGVzX3dvcmtzcGFjZTwvbGl0ZXJhbD46IHRoZSBzaXplIGluIGJ5dGVzCisgICAgICBvZiB0 aGUgcGVyLWJhdGNoIHR1cGxlIHN0b3JhZ2Ugd29ya3NwYWNlIHVzZWQgZm9yIGluZGV4LW9ubHkg c2NhbnMKKyAgICAgICh0eXBpY2FsbHkgPGxpdGVyYWw+QkxDS1NaPC9saXRlcmFsPiksIG9yIDAg aWYgdGhlIGluZGV4IEFNIGRvZXMgbm90CisgICAgICBzdXBwb3J0IGluZGV4LW9ubHkgc2NhbnMu ICBUaGUgd29ya3NwYWNlIGlzIGFjY2Vzc2libGUgdmlhCisgICAgICA8c3RydWN0ZmllbGQ+YmF0 Y2gtJmd0O2N1cnJUdXBsZXM8L3N0cnVjdGZpZWxkPi4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlz dGl0ZW0+CisgICA8L2l0ZW1pemVkbGlzdD4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgQW4g PGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBhY2Nlc3MgbWV0aG9kIHdob3NlIHJlY2hl Y2sgcmVxdWlyZW1lbnQgaXMKKyAgIGEgZml4ZWQgcHJvcGVydHkgb2YgdGhlIHdob2xlIHNjYW4g KHJhdGhlciB0aGFuIHNvbWV0aGluZyB0aGF0IHZhcmllcyBmcm9tCisgICBvbmUgbWF0Y2hpbmcg aXRlbSB0byB0aGUgbmV4dCkgc2hvdWxkIGFsc28gc2V0CisgICA8bGl0ZXJhbD5zY2FuLSZndDt4 c19yZWNoZWNrPC9saXRlcmFsPiBoZXJlLCBpbgorICAgPGZ1bmN0aW9uPmFtYmVnaW5zY2FuPC9m dW5jdGlvbj4sIHNpbmNlIHRoZSB2YWx1ZSBhcHBsaWVzIHRvIGV2ZXJ5IGl0ZW0gdGhlCisgICBz Y2FuIHJldHVybnMuICBUaGUgdmFsdWUgc2V0IGhlcmUgcGVyc2lzdHMgYWNyb3NzIGFueSBzdWJz ZXF1ZW50CisgICA8ZnVuY3Rpb24+YW1yZXNjYW48L2Z1bmN0aW9uPiBjYWxscy4gIEItdHJlZSAo YWx3YXlzIGZhbHNlKSB3b3JrIHRoaXMgd2F5LgogICA8L3BhcmE+CiAKICAgPHBhcmE+CkBAIC03 NDksNiArODA3LDI0OCBAQCBhbWdldHR1cGxlIChJbmRleFNjYW5EZXNjIHNjYW4sCiAgICA8c3Ry dWN0ZmllbGQ+YW1nZXR0dXBsZTwvc3RydWN0ZmllbGQ+IGZpZWxkIGluIGl0cyA8c3RydWN0bmFt ZT5JbmRleEFtUm91dGluZTwvc3RydWN0bmFtZT4KICAgIHN0cnVjdCBtdXN0IGJlIHNldCB0byBO VUxMLgogICA8L3BhcmE+CisgIDxub3RlPgorICAgPHBhcmE+CisgICAgQXMgb2YgPHByb2R1Y3Ru YW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiB2ZXJzaW9uIDIwLCBtYXJrL3Jlc3RvcmUgb2YK KyAgICBzY2FuIHBvc2l0aW9ucyBpcyBidWlsdCBvbiB0aGUgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8 L2Z1bmN0aW9uPiBpbnRlcmZhY2U7CisgICAgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9u PiBzY2FucyBkbyBub3Qgc3VwcG9ydCBtYXJrL3Jlc3RvcmUuICBUaGUKKyAgICBpbXBsZW1lbnRh dGlvbiBsaXZlcyBpbiB0aGUgdGFibGUgQU0sIHRocm91Z2ggaXRzCisgICAgPGZ1bmN0aW9uPnRh YmxlX2luZGV4X3NjYW5fbWFya3BvczwvZnVuY3Rpb24+IGFuZAorICAgIDxmdW5jdGlvbj50YWJs ZV9pbmRleF9zY2FuX3Jlc3RycG9zPC9mdW5jdGlvbj4gaW1wbGVtZW50YXRpb25zLiAgQW4KKyAg ICA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGFjY2VzcyBtZXRob2QgbXVzdCBhZGRp dGlvbmFsbHkgYWR2ZXJ0aXNlCisgICAgc3VwcG9ydCBieSBzZXR0aW5nIDxzdHJ1Y3RmaWVsZD5h bWNhbm1hcmtwb3M8L3N0cnVjdGZpZWxkPjsgd2hlbiBpdCBkb2VzCisgICAgbm90LCB0aGUgcGxh bm5lciBtYXRlcmlhbGl6ZXMgdGhlIHNjYW4ncyBvdXRwdXQgcmF0aGVyIHRoYW4gcmVseWluZyBv bgorICAgIG1hcmsvcmVzdG9yZS4KKyAgIDwvcGFyYT4KKyAgPC9ub3RlPgorCisgIDxwYXJhPgor PHByb2dyYW1saXN0aW5nPgorSW5kZXhTY2FuQmF0Y2gKK2FtZ2V0YmF0Y2ggKEluZGV4U2NhbkRl c2Mgc2NhbiwKKyAgICAgICAgICAgIEluZGV4U2NhbkJhdGNoIHByaW9yYmF0Y2gsCisgICAgICAg ICAgICBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbik7Cis8L3Byb2dyYW1saXN0aW5nPgorICAgUmV0 dXJuIHRoZSBuZXh0IGJhdGNoIG9mIGluZGV4IHR1cGxlcyBpbiB0aGUgZ2l2ZW4gc2NhbiwgbW92 aW5nIGluIHRoZQorICAgZ2l2ZW4gZGlyZWN0aW9uIChmb3J3YXJkIG9yIGJhY2t3YXJkIGluIHRo ZSBpbmRleCkuICBSZXR1cm5zIGFuIGluc3RhbmNlIG9mCisgICA8dHlwZT5JbmRleFNjYW5CYXRj aDwvdHlwZT4gd2l0aCBpbmRleCB0dXBsZXMgbG9hZGVkLCBvcgorICAgPGxpdGVyYWw+TlVMTDwv bGl0ZXJhbD4gaWYgdGhlcmUgYXJlIG5vIG1vcmUgaW5kZXggdHVwbGVzIGluIHRoZSBnaXZlbgor ICAgc2NhbiBkaXJlY3Rpb24uCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFRoZSA8ZnVuY3Rp b24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGludGVyZmFjZSBpcyBhbiBhbHRlcm5hdGl2ZSB0bwor ICAgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiB0aGF0IHJldHVybnMgbWF0Y2hpbmcg aW5kZXggZW50cmllcyBpbiBiYXRjaGVzCisgICByYXRoZXIgdGhhbiBvbmUgYXQgYSB0aW1lLiAg QnkgcmV0dXJuaW5nIGFsbCBtYXRjaGluZyBpbmRleCBlbnRyaWVzIGZyb20gYQorICAgc2luZ2xl IGluZGV4IHBhZ2UgdG9nZXRoZXIsIHRoZSB0YWJsZSBBTSBnYWlucyB2aXNpYmlsaXR5IGludG8g d2hpY2ggdGFibGUKKyAgIGJsb2NrcyB3aWxsIGJlIG5lZWRlZCBpbiB0aGUgbmVhciBmdXR1cmUu CisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFRoZSB0YWJsZSBBTSBwYXNzZXMgPGxpdGVyYWw+ cHJpb3JiYXRjaDwvbGl0ZXJhbD4gdG8gaW5kaWNhdGUgd2hlcmUgdGhlCisgICBpbmRleCBBTSBz aG91bGQgY29udGludWUgc2Nhbm5pbmcgZnJvbSAob3IgPGxpdGVyYWw+TlVMTDwvbGl0ZXJhbD4g b24gdGhlCisgICBmaXJzdCBjYWxsIGZvciB0aGUgc2NhbikuICBUaGUgaW5kZXggQU0gdXNlcyBp bmZvcm1hdGlvbiBmcm9tCisgICA8bGl0ZXJhbD5wcmlvcmJhdGNoPC9saXRlcmFsPiB0byBkZXRl cm1pbmUgd2hpY2ggaW5kZXggcGFnZSB0byByZWFkIG5leHQuCisgICBVbmxpa2UgPGZ1bmN0aW9u PmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiwgd2hlcmUgdGhlIGluZGV4IEFNIG1haW50YWlucyBpdHMK KyAgIG93biBzY2FuIHBvc2l0aW9uLCB3aXRoIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlv bj4gaXQgaXMgdGhlIGNhbGxlcgorICAgdGhhdCBjb250cm9scyB0aGUgcHJvZ3Jlc3Mgb2YgdGhl IHNjYW4gdGhyb3VnaCB0aGUgaW5kZXguICBUaGUgY2FsbGVyCisgICB3aWxsIHR5cGljYWxseSBw YXNzIHRoZSBtb3N0IHJlY2VudGx5IHJldHVybmVkIGJhdGNoLCBidXQgdGhpcyBpcyBub3QKKyAg IGd1YXJhbnRlZWQgJm1kYXNoOyBmb3IgZXhhbXBsZSwgZm9sbG93aW5nIHRoZSByZXN0b3JhdGlv biBvZiBhIG1hcmtlZAorICAgcG9zaXRpb24sIGFuIGVhcmxpZXIgYmF0Y2ggbWF5IGJlIHBhc3Nl ZCBpbnN0ZWFkLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBBIGJhdGNoIHJldHVybmVkIGJ5 IDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaXMgYXNzb2NpYXRlZCB3aXRoIGFuCisg ICBpbmRleCBwYWdlIGNvbnRhaW5pbmcgYXQgbGVhc3Qgb25lIG1hdGNoaW5nIGl0ZW0vdHVwbGUu ICBBIGJ1ZmZlcgorICAgcGluIGNhbiBiZSBoZWxkIG9udG8gYnkgdGhlIHRhYmxlIEFNIGFzIGFu IGludGVybG9jayBhZ2FpbnN0IGNvbmN1cnJlbnQgVElECisgICByZWN5Y2xpbmcgYnkgPGNvbW1h bmQ+VkFDVVVNPC9jb21tYW5kPi4gIFRoZSB0YWJsZSBBTSBkcm9wcyB0aGlzIGludGVybG9jawor ICAgYnkgY2FsbGluZyA8ZnVuY3Rpb24+YW11bmd1YXJkYmF0Y2g8L2Z1bmN0aW9uPiB3aGVuIGl0 IGlzIHNhZmUgdG8gZG8gc28uCisgICBTZWUgPHhyZWYgbGlua2VuZD0iaW5kZXgtbG9ja2luZyIv PiBmb3IgZGV0YWlscyBvbiBidWZmZXIgcGluIG1hbmFnZW1lbnQKKyAgIGR1cmluZyBpbmRleCBz Y2Fucy4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgQSA8dHlwZT5JbmRleFNjYW5CYXRjaDwv dHlwZT4gdGhhdCBpcyByZXR1cm5lZCBieQorICAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0 aW9uPiBpcyBubyBsb25nZXIgbWFuYWdlZCBieSB0aGUgYWNjZXNzIG1ldGhvZC4KKyAgIEl0IGlz IHVwIHRvIHRoZSB0YWJsZSBBTSBjYWxsZXIgdG8gZGVjaWRlIHdoZW4gaXQgc2hvdWxkIGJlIHJl bGVhc2VkLiAgTm90ZQorICAgYWxzbyB0aGF0IDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlv bj4gZnVuY3Rpb25zIG11c3QgbmV2ZXIgbW9kaWZ5IHRoZQorICAgPHN0cnVjdGZpZWxkPnByaW9y YmF0Y2g8L3N0cnVjdGZpZWxkPiBwYXJhbWV0ZXIuICBUaGUgY29yZQorICAgPGZpbGVuYW1lPnNy Yy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvPC9maWxlbmFtZT4gaW1wbGVtZW50YXRpb24gcHJvdmlk ZXMgYQorICAgcmVmZXJlbmNlIGV4YW1wbGVzIG9mIHRoZSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwv ZnVuY3Rpb24+IGludGVyZmFjZS4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgVGhlIHNhbWUg Y2F2ZWF0cyBkZXNjcmliZWQgZm9yIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gYXBw bHkgaGVyZQorICAgdG9vOiBhbiBlbnRyeSBpbiB0aGUgcmV0dXJuZWQgYmF0Y2ggbWVhbnMgb25s eSB0aGF0IHRoZSBpbmRleCBjb250YWlucworICAgYW4gZW50cnkgdGhhdCBtYXRjaGVzIHRoZSBz Y2FuIGtleXMsIG5vdCB0aGF0IHRoZSB0dXBsZSBuZWNlc3NhcmlseSBzdGlsbAorICAgZXhpc3Rz IGluIHRoZSBoZWFwIG9yIHdpbGwgcGFzcyB0aGUgY2FsbGVyJ3Mgc25hcHNob3QgdGVzdC4KKyAg PC9wYXJhPgorCisgIDxwYXJhPgorICAgSW5kZXggYWNjZXNzIG1ldGhvZHMgdXNpbmcgPGZ1bmN0 aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBtdXN0IHNldAorICAgPGxpdGVyYWw+c2Nhbi0mZ3Q7 eHNfcmVjaGVjazwvbGl0ZXJhbD4gdG8gaW5kaWNhdGUgd2hldGhlciByZWNoZWNraW5nIG9mCisg ICBzY2FuIGtleXMgaXMgcmVxdWlyZWQsIGluIHRoZSBzYW1lIHdheSBhcyA8ZnVuY3Rpb24+YW1n ZXR0dXBsZTwvZnVuY3Rpb24+CisgICBkb2VzLiBIb3dldmVyLCA8bGl0ZXJhbD5zY2FuLSZndDt4 c19yZWNoZWNrPC9saXRlcmFsPiBtdXN0IGJlIHNldCBjb25zaXN0ZW50bHkKKyAgIGZvciBhbiBl bnRpcmUgc2NhbiByYXRoZXIgdGhhbiB2YXJ5aW5nIG9uIGEgcGVyLXR1cGxlIGJhc2lzLiBUaGlz IGlzIGEga2V5CisgICBkaWZmZXJlbmNlIGZyb20gPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0 aW9uPiwgd2hpY2ggY2FuIHNldAorICAgPGxpdGVyYWw+c2Nhbi0mZ3Q7eHNfcmVjaGVjazwvbGl0 ZXJhbD4gaW5kZXBlbmRlbnRseSBmb3IgZWFjaCB0dXBsZSBpdCByZXR1cm5zLgorICAgSW5kZXgg YWNjZXNzIG1ldGhvZHMgdGhhdCByZXF1aXJlIGdyYW51bGFyIGNvbnRyb2wgb3ZlcgorICAgPGxp dGVyYWw+c2Nhbi0mZ3Q7eHNfcmVjaGVjazwvbGl0ZXJhbD4gbXVzdCB1c2UgdGhlIDxmdW5jdGlv bj5hbWdldHR1cGxlPC9mdW5jdGlvbj4KKyAgIGludGVyZmFjZSBpbnN0ZWFkIG9mIDxmdW5jdGlv bj5hbWdldGJhdGNoPC9mdW5jdGlvbj4uCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFNpbWls YXJseSwgdGhlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaW50ZXJmYWNlIGRvZXMg bm90IGN1cnJlbnRseQorICAgc3VwcG9ydCBpbmRleC1vbmx5IHNjYW5zIHRoYXQgcmV0dXJuIGRh dGEgaW4gdGhlIGZvcm0gb2YgYQorICAgPHN0cnVjdG5hbWU+SGVhcFR1cGxlPC9zdHJ1Y3RuYW1l PiBwb2ludGVyIHN0b3JlZCBpbgorICAgPGxpdGVyYWw+c2Nhbi0mZ3Q7eHNfaGl0dXA8L2xpdGVy YWw+LgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBUaGUgaW5kZXggYWNjZXNzIG1ldGhvZCBt dXN0IHByb3ZpZGUgZWl0aGVyIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4KKyAgIG9y IDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4sIGJ1dCBub3QgYm90aC4KKyAgPC9wYXJh PgorCisgIDxwYXJhPgorICAgVGhlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gZnVu Y3Rpb24gbmVlZCBvbmx5IGJlIHByb3ZpZGVkIGlmIHRoZQorICAgYWNjZXNzIG1ldGhvZCBzdXBw b3J0cyA8cXVvdGU+cGxhaW48L3F1b3RlPiBpbmRleCBzY2Fucy4gIElmIGl0IGRvZXNuJ3QsCisg ICB0aGUgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBmaWVsZCBpbiBpdHMKKyAgIDxz dHJ1Y3RuYW1lPkluZGV4QW1Sb3V0aW5lPC9zdHJ1Y3RuYW1lPiBzdHJ1Y3QgbXVzdCBiZSBzZXQg dG8gTlVMTC4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorPHByb2dyYW1saXN0aW5nPgordm9pZAor YW11bmd1YXJkYmF0Y2ggKEluZGV4U2NhbkRlc2Mgc2NhbiwKKyAgICAgICAgICAgICAgICBJbmRl eFNjYW5CYXRjaCBiYXRjaCk7Cis8L3Byb2dyYW1saXN0aW5nPgorICAgQ2FsbGVkIGJ5IHRoZSB0 YWJsZSBBTSAodmlhCisgICA8ZnVuY3Rpb24+dGFibGVhbV91dGlsX3VuZ3VhcmRfYmF0Y2g8L2Z1 bmN0aW9uPikgd2hlbiBpdCBpcyBzYWZlIHRvIGRyb3AKKyAgIHRoZSBUSUQgcmVjeWNsaW5nIGlu dGVybG9jayB0aGF0IHRoZSBpbmRleCBBTSBob2xkcyBvbiB0aGUgYmF0Y2gncyBpbmRleAorICAg bGVhZiBwYWdlLCB3aGljaCBwcmV2ZW50cyBjb25jdXJyZW50IFRJRCByZWN5Y2xpbmcgYnkKKyAg IDxjb21tYW5kPlZBQ1VVTTwvY29tbWFuZD4uCisgICBGb3JtYWxseSwgYW4gaW5kZXggQU0gbWF5 IGhvbGQgYSBkaWZmZXJlbnQga2luZCBvZiBpbnRlcmxvY2ssIG9yIG11bHRpcGxlCisgICBpbnRl cmxvY2tzLCBpbiBpdHMgcGVyLWJhdGNoIG9wYXF1ZSBhcmVhLCBidXQgaW4gcHJhY3RpY2UgdGhl IGJ1aWx0LWluCisgICBpbmRleCBBTSB0aGF0IHN1cHBvcnRzIDxmdW5jdGlvbj5hbWdldGJhdGNo PC9mdW5jdGlvbj4gJm1kYXNoOyBCLXRyZWUKKyAgICZtZGFzaDsgaG9sZHMgYSBzaW5nbGUgYnVm ZmVyIHBpbi4gIFNlZSA8eHJlZiBsaW5rZW5kPSJpbmRleC1sb2NraW5nIi8+IGZvcgorICAgZGV0 YWlscyBvbiBidWZmZXIgcGluIG1hbmFnZW1lbnQgZHVyaW5nIGluZGV4IHNjYW5zLiAgVGhpcyBm dW5jdGlvbiB3aWxsIGJlCisgICBjYWxsZWQgYXQgbW9zdCBvbmNlIGZvciBlYWNoIGd1YXJkZWQg YmF0Y2g7IGl0IGlzIG5vdCBjYWxsZWQgd2hlbiB0aGUgaW5kZXgKKyAgIEFNIGhhcyBhbHJlYWR5 IHVuZ3VhcmRlZCB0aGUgYmF0Y2ggaXRzZWxmIChhcyBpdCBkb2VzIHdoZW4KKyAgIDxzdHJ1Y3Rm aWVsZD5iYXRjaEltbWVkaWF0ZVVuZ3VhcmQ8L3N0cnVjdGZpZWxkPiBpcyB0cnVlLCB3aGljaCBp cyB0aGUKKyAgIGNvbW1vbiBjYXNlKS4KKyAgPC9wYXJhPgorCisgIDxub3RlPgorICAgPHBhcmE+ CisgICAgVGhlIGluZGV4IEFNIG1heSBjaG9vc2UgdG8gcmV0YWluIGl0cyBvd24gYnVmZmVyIHBp bnMgd2hlbiB0aGlzIHNlcnZlcyBhbgorICAgIGludGVybmFsIHB1cnBvc2UgKGZvciBleGFtcGxl LCBtYWludGFpbmluZyBhIGRlc2NlbnQgc3RhY2sgb2YgcGlubmVkIGluZGV4CisgICAgcGFnZXMg Zm9yIHJldXNlIGFjcm9zcyA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGNhbGxzKS4g IEhvd2V2ZXIsCisgICAgYW55IHNjaGVtZSB0aGF0IHJldGFpbnMgYnVmZmVyIHBpbnMgbWFuYWdl ZCBieSB0aGUgaW5kZXggQU0gbXVzdCBiZSBzdXJlCisgICAgdG8gZnJlZSB0aGUgcGlucyBhdCBh biBvcHBvcnR1bmUgcG9pbnQgKGF0IGEgbWluaW11bSB3aGVuZXZlcgorICAgIDxmdW5jdGlvbj5h bWVuZHNjYW48L2Z1bmN0aW9uPiBpcyBjYWxsZWQsIGFuZCB0eXBpY2FsbHkgd2hlbgorICAgIDxm dW5jdGlvbj5hbXJlc2NhbjwvZnVuY3Rpb24+IGlzIGNhbGxlZCkuICBJdCBtdXN0IGFsc28ga2Vl cCB0aGUgbnVtYmVyIG9mCisgICAgcmV0YWluZWQgcGlucyBmaXhlZCBhbmQgc21hbGwuCisgICA8 L3BhcmE+CisgIDwvbm90ZT4KKworICA8cGFyYT4KKyAgIFRoZSA8ZnVuY3Rpb24+YW11bmd1YXJk YmF0Y2g8L2Z1bmN0aW9uPiBmdW5jdGlvbiBpcyByZXF1aXJlZCBmb3IgYW55IGluZGV4CisgICBh Y2Nlc3MgbWV0aG9kIHRoYXQgcHJvdmlkZXMgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9u Pi4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorPHByb2dyYW1saXN0aW5nPgordm9pZAorYW1raWxs aXRlbXNiYXRjaCAoSW5kZXhTY2FuRGVzYyBzY2FuLAorICAgICAgICAgICAgICAgICAgSW5kZXhT Y2FuQmF0Y2ggYmF0Y2gpOworPC9wcm9ncmFtbGlzdGluZz4KKyAgIENhbGxlZCBieSB0aGUgdGFi bGUgQU0gd2hlbiBpdCBoYXMgZmluaXNoZWQgcHJvY2Vzc2luZyBhIGJhdGNoIHRoYXQKKyAgIGNv bnRhaW5zIGRlYWQgaXRlbXMsIHRvIHNldCA8bGl0ZXJhbD5MUF9ERUFEPC9saXRlcmFsPiBiaXRz IGluIHRoZSBiYXRjaCdzCisgICBpbmRleCBwYWdlLiAgVGhlIGJhdGNoJ3MgaW5kZXggcGFnZSB3 aWxsIG5vdCBiZSBsb2NrZWQgYnkgdGhlIGNhbGxlcjsgdGhlCisgICBpbmRleCBBTSBtdXN0IGFj cXVpcmUgYW5kIHJlbGVhc2UgaXRzIG93biBsb2NrIChhbmQgcGluKSBvbiB0aGUgaW5kZXggcGFn ZS4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgSW1wbGVtZW50aW5nIDxmdW5jdGlvbj5hbWtp bGxpdGVtc2JhdGNoPC9mdW5jdGlvbj4gaXMgb3B0aW9uYWwgZm9yCisgICA8ZnVuY3Rpb24+YW1n ZXRiYXRjaDwvZnVuY3Rpb24+IGluZGV4IEFNcyAodGhvc2UgdGhhdCBkb24ndCBjYW4gbGVhdmUK KyAgIHRoZSBmaWVsZCBzZXQgdG8gPGxpdGVyYWw+TlVMTDwvbGl0ZXJhbD4pLCBidXQgZG9pbmcg c28gaXMgcmVjb21tZW5kZWQgZm9yCisgICBwZXJmb3JtYW5jZSwgYXMgaXQgYWxsb3dzIGZ1dHVy ZSBzY2FucyB0byBza2lwIGtub3duLWRlYWQgaW5kZXggZW50cmllcy4KKyAgIFRoZSBjb3JlIGlu ZGV4IGFjY2VzcyBtZXRob2QgdGhhdCBjdXJyZW50bHkgc3VwcG9ydHMKKyAgIDxmdW5jdGlvbj5h bWdldGJhdGNoPC9mdW5jdGlvbj4gKEItdHJlZSkgaW1wbGVtZW50cworICAgPGxpdGVyYWw+TFBf REVBRDwvbGl0ZXJhbD4gbWFya2luZywgdGhvdWdoIHRoaXJkLXBhcnR5IGluZGV4IGFjY2VzcyBt ZXRob2RzCisgICBhcmUgZnJlZSB0byBjaG9vc2Ugd2hldGhlciB0byBpbXBsZW1lbnQgdGhpcyBm ZWF0dXJlLiAgVGhlIHRhYmxlIEFNIG1heQorICAgY2FsbCA8ZnVuY3Rpb24+dGFibGVhbV91dGls X3NjYW5wb3Nfa2lsbGl0ZW08L2Z1bmN0aW9uPiB0byBtYXJrIGRlYWQgaXRlbXMgYXMKKyAgIHRo ZSBzY2FuIHByb2dyZXNzZXMuICBJZiB0aGUgYmF0Y2ggY29udGFpbnMgYW55IHN1Y2ggZGVhZCBp dGVtcywgdGhlIGJhdGNoJ3MKKyAgIDxzdHJ1Y3RmaWVsZD5kZWFkSXRlbXM8L3N0cnVjdGZpZWxk PiBhcnJheSB3aWxsIGhhdmUgYmVlbiBzb3J0ZWQgYW5kCisgICBkZWR1cGxpY2F0ZWQgYmVmb3Jl IDxmdW5jdGlvbj5hbWtpbGxpdGVtc2JhdGNoPC9mdW5jdGlvbj4gaXMgY2FsbGVkLCB3aXRoCisg ICBpdGVtIG9mZnNldHMgYXBwZWFyaW5nIGluIGFzY2VuZGluZyBvcmRlciAodGhhdCBpcywgaW4g aW5kZXggcGFnZSBvcmRlciwKKyAgIHdoaWNoIGlzIGFsc28gYmF0Y2ggb3JkZXIpIGFuZCBubyBv ZmZzZXQgYXBwZWFyaW5nIG1vcmUgdGhhbiBvbmNlLiAgSW5kZXgKKyAgIGFjY2VzcyBtZXRob2Rz IGNhbiByZWx5IG9uIHRoaXMgb3JkZXJpbmcgd2hlbiBwcm9jZXNzaW5nIGRlYWQgaXRlbXM6IHRo ZQorICAgPHN0cnVjdGZpZWxkPmRlYWRJdGVtczwvc3RydWN0ZmllbGQ+IGFycmF5IGNhbiBiZSB3 YWxrZWQgaW4gbG9ja3N0ZXAgd2l0aAorICAgdGhlIGluZGV4IHBhZ2UncyBpdGVtIHBvaW50ZXJz LCBzaW5jZSBib3RoIGFyZSBpbiBhc2NlbmRpbmcgcGFnZSBvZmZzZXQKKyAgIG51bWJlciBvcmRl ci4gIFRoaXMgYWxzbyBtZWFucyB0aGUgdGFibGUgQU0gbmVlZCBub3QgY2FsbAorICAgPGZ1bmN0 aW9uPnRhYmxlYW1fdXRpbF9zY2FucG9zX2tpbGxpdGVtPC9mdW5jdGlvbj4gaW4gYW55IHBhcnRp Y3VsYXIgb3JkZXIuCisgIDwvcGFyYT4KKworICA8bm90ZT4KKyAgIDxwYXJhPgorICAgIEluZGV4 IGFjY2VzcyBtZXRob2RzIHVzaW5nIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gcmVs eSBvbiB0aGUKKyAgICA8c3RydWN0ZmllbGQ+a2lsbF9wcmlvcl90dXBsZTwvc3RydWN0ZmllbGQ+ IG1lY2hhbmlzbSBpbnN0ZWFkIHRvIG1hcmsgZGVhZAorICAgIHR1cGxlcy4KKyAgIDwvcGFyYT4K KyAgPC9ub3RlPgorCisgIDxwYXJhPgorICAgV2hlbiBpbXBsZW1lbnRpbmcgPGZ1bmN0aW9uPmFt a2lsbGl0ZW1zYmF0Y2g8L2Z1bmN0aW9uPiwgdGhlIGluZGV4IEFNCisgICBtdXN0IHZlcmlmeSB0 aGF0IHRoZSBpbmRleCBwYWdlIGhhcyBub3QgYmVlbiBtb2RpZmllZCBzaW5jZSB0aGUgYmF0Y2gg d2FzCisgICBvcmlnaW5hbGx5IHJlYWQuICBUaGUgc3RhbmRhcmQgd2F5IHRvIGRvIHRoaXMgaXMg dG8gY2FsbAorICAgPGZ1bmN0aW9uPmluZGV4YW1fdXRpbF91bmxvY2tfYmF0Y2g8L2Z1bmN0aW9u PiBkdXJpbmcKKyAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4sIHdoaWNoIHJlbGVh c2VzIHRoZSBpbmRleCBwYWdlIGxvY2sgYW5kCisgICBzYXZlcyB0aGUgcGFnZSBMU04gaW4KKyAg IHRoZSBiYXRjaCdzIDxzdHJ1Y3RmaWVsZD5sc248L3N0cnVjdGZpZWxkPiBmaWVsZC4gIExhdGVy LCB3aXRoaW4KKyAgIDxmdW5jdGlvbj5hbWtpbGxpdGVtc2JhdGNoPC9mdW5jdGlvbj4sIHRoZSBp bmRleCBBTSByZS1yZWFkcyB0aGUgcGFnZSwKKyAgIGNvbXBhcmVzIHRoZSBjdXJyZW50IHBhZ2Ug TFNOIGFnYWluc3QKKyAgIDxzdHJ1Y3RmaWVsZD5iYXRjaC0mZ3Q7bHNuPC9zdHJ1Y3RmaWVsZD4s IGFuZCBnaXZlcyB1cCBvbiBzZXR0aW5nCisgICA8bGl0ZXJhbD5MUF9ERUFEPC9saXRlcmFsPiBi aXRzIGlmIHRoZSBMU04gaGFzIGFkdmFuY2VkLiAgQW4gYWR2YW5jZWQgTFNOCisgICBpbmRpY2F0 ZXMgdGhhdCB0aGUgcGFnZSB3YXMgbW9kaWZpZWQgJm1kYXNoOyBwb3NzaWJseSBieQorICAgPGNv bW1hbmQ+VkFDVVVNPC9jb21tYW5kPiByZWN5Y2xpbmcgdGFibGUgVElEcyAmbWRhc2g7IHNvIGl0 IHdvdWxkIGJlCisgICB1bnNhZmUgdG8gYXNzdW1lIHRoYXQgaW5kZXggZW50cmllcyBzdGlsbCBw b2ludCB0byB0aGUgc2FtZSBoZWFwL3RhYmxlCisgICB0dXBsZXMuICBTaW5jZSA8bGl0ZXJhbD5M UF9ERUFEPC9saXRlcmFsPiBtYXJraW5nIGlzIG9ubHkgYW4gb3B0aW1pemF0aW9uCisgICBoaW50 LCBpdCBpcyBhbHdheXMgc2FmZSB0byBza2lwIGl0LiAgQi10cmVlIHVzZXMgdGhpcyBhcHByb2Fj aC4KKyAgPC9wYXJhPgorCisgIDx3YXJuaW5nPgorICAgPHBhcmE+CisgICAgVGhpcyBMU04gY29t cGFyaXNvbiB0ZWNobmlxdWUgcmVxdWlyZXMgdGhlIGluZGV4IEFNIHRvIHVzZSBmYWtlCisgICAg KG1vbm90b25pY2FsbHkgaW5jcmVhc2luZykgTFNOcyBvbiBpdHMgcGFnZXMgZm9yIHJlbGF0aW9u cyB3aGVyZSBXQUwgaXMKKyAgICBub3QgZ2VuZXJhdGVkLCBzaW5jZSByZWFsIExTTnMgYXJlIG5v dCBhdmFpbGFibGUgaW4gdGhhdCBjYXNlLiAgU2VlIHRoZQorICAgIEItdHJlZSBpbmRleCBpbXBs ZW1lbnRhdGlvbiBmb3IgYSByZWZlcmVuY2UgZXhhbXBsZSBvZiB0aGlzCisgICAgdGVjaG5pcXVl LiAgQW4gaW5kZXggQU0gdGhhdCBkb2VzIG5vdCBpbXBsZW1lbnQgZmFrZSBMU05zIGNhbiBzdGls bAorICAgIHByb3ZpZGUgPGZ1bmN0aW9uPmFta2lsbGl0ZW1zYmF0Y2g8L2Z1bmN0aW9uPiwgYnV0 IHNob3VsZCBzaW1wbHkgZG8KKyAgICBub3RoaW5nIHdoZW4gdGhlIHJlbGF0aW9uIGRvZXMgbm90 IGdlbmVyYXRlIFdBTCAoaS5lLiwgd2hlbgorICAgIDxmdW5jdGlvbj5SZWxhdGlvbk5lZWRzV0FM KCk8L2Z1bmN0aW9uPiBpcyBmYWxzZSksIHNpbmNlIHRoZSBMU04KKyAgICBjb21wYXJpc29uIHdv dWxkIGJlIHVucmVsaWFibGUuCisgICA8L3BhcmE+CisgIDwvd2FybmluZz4KKworICA8dGlwPgor ICAgPHBhcmE+CisgICAgSW5kZXggQU1zIGFyZSBub3Qgb2JsaWdhdGVkIHRvIHVzZQorICAgIDxm dW5jdGlvbj5pbmRleGFtX3V0aWxfdW5sb2NrX2JhdGNoPC9mdW5jdGlvbj4gJm1kYXNoOyB0aGV5 IGNhbiBpbXBsZW1lbnQKKyAgICB0aGVpciBvd24gZXF1aXZhbGVudCwgYW5kIGFyZSBmcmVlIHRv IHVzZSB0aGUgYmF0Y2gKKyAgICA8c3RydWN0ZmllbGQ+bHNuPC9zdHJ1Y3RmaWVsZD4gZmllbGQg aW4gd2hhdGV2ZXIgd2F5IHRoZXkgZGVlbSBuZWNlc3NhcnkKKyAgIDwvcGFyYT4KKyAgPC90aXA+ CisKKyAgPHBhcmE+CisgICBUaGlzIExTTi1iYXNlZCB2ZXJpZmljYXRpb24gbWVhbnMgdGhhdCB0 aGUgdGFibGUgQU0gbmVlZCBub3QgY29uc2lkZXIKKyAgIHdoZXRoZXIgdW5ndWFyZGluZyBhIGJh dGNoIGNvdWxkIGludHJvZHVjZSBUSUQgcmVjeWNsaW5nIGhhemFyZHMgZm9yIGEKKyAgIHN1YnNl cXVlbnQgPGZ1bmN0aW9uPmFta2lsbGl0ZW1zYmF0Y2g8L2Z1bmN0aW9uPiBjYWxsLiAgVGhlIGhh emFyZHMgYXJlIHRoZQorICAgc2FtZSBpbiBib3RoIGNhc2VzLCBidXQgc2luY2UgPGZ1bmN0aW9u PmFta2lsbGl0ZW1zYmF0Y2g8L2Z1bmN0aW9uPgorICAgaW5kZXBlbmRlbnRseSB2ZXJpZmllcyB0 aGUgcGFnZSBMU04gYW5kIGNhbiBhbHdheXMgc2FmZWx5IGdpdmUgdXAgb24KKyAgIHNldHRpbmcg PGxpdGVyYWw+TFBfREVBRDwvbGl0ZXJhbD4gYml0cywgY29ycmVjdG5lc3MgaXMgb2J2aW91cyB3 aXRob3V0IGFueQorICAgY291cGxpbmcgYmV0d2VlbiB0aGUgdHdvLgorICA8L3BhcmE+CiAKICAg PHBhcmE+CiA8cHJvZ3JhbWxpc3Rpbmc+CkBAIC03NjgsOCArMTA2OCw4IEBAIGFtZ2V0Yml0bWFw IChJbmRleFNjYW5EZXNjIHNjYW4sCiAgICBpdHNlbGYsIGFuZCB0aGVyZWZvcmUgY2FsbGVycyBy ZWNoZWNrIGJvdGggdGhlIHNjYW4gY29uZGl0aW9ucyBhbmQgdGhlCiAgICBwYXJ0aWFsIGluZGV4 IHByZWRpY2F0ZSAoaWYgYW55KSBmb3IgcmVjaGVja2FibGUgdHVwbGVzLiAgVGhhdCBtaWdodCBu b3QKICAgIGFsd2F5cyBiZSB0cnVlLCBob3dldmVyLgotICAgPGZ1bmN0aW9uPmFtZ2V0Yml0bWFw PC9mdW5jdGlvbj4gYW5kCi0gICA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IGNhbm5v dCBiZSB1c2VkIGluIHRoZSBzYW1lIGluZGV4IHNjYW47IHRoZXJlCisgICBPbmx5IG9uZSBvZiA8 ZnVuY3Rpb24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiwgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1 bmN0aW9uPiwKKyAgIG9yIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gY2FuIGJlIHVz ZWQgaW4gYW55IGdpdmVuIGluZGV4IHNjYW47IHRoZXJlCiAgICBhcmUgb3RoZXIgcmVzdHJpY3Rp b25zIHRvbyB3aGVuIHVzaW5nIDxmdW5jdGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+LCBhcyBl eHBsYWluZWQKICAgIGluIDx4cmVmIGxpbmtlbmQ9ImluZGV4LXNjYW5uaW5nIi8+LgogICA8L3Bh cmE+CkBAIC03ODEsNiArMTA4MSwzOSBAQCBhbWdldGJpdG1hcCAoSW5kZXhTY2FuRGVzYyBzY2Fu LAogICAgc3RydWN0IG11c3QgYmUgc2V0IHRvIE5VTEwuCiAgIDwvcGFyYT4KIAorICA8cGFyYT4K KyAgIEluZGV4IGFjY2VzcyBtZXRob2RzIHRoYXQgc3VwcG9ydCA8ZnVuY3Rpb24+YW1nZXRiYXRj aDwvZnVuY3Rpb24+IHdpbGwKKyAgIHR5cGljYWxseSBhbHNvIHN1cHBvcnQgPGZ1bmN0aW9uPmFt Z2V0Yml0bWFwPC9mdW5jdGlvbj4sIGFuZCBhbG1vc3QgYWxsIG9mCisgICB0aGUgaW5kZXggQU0n cyBpbnRlcm5hbCBzY2FubmluZyBjb2RlIGlzIHNoYXJlZCBiZXR3ZWVuIHRoZSB0d28gcGF0aHMu ICBUaGUKKyAgIG1haW4gZGlmZmVyZW5jZSBpcyB0aGF0IGR1cmluZyA8ZnVuY3Rpb24+YW1nZXRi aXRtYXA8L2Z1bmN0aW9uPiBvbmx5IG9uZQorICAgYmF0Y2ggaXMgYWxsb2NhdGVkIGF0IGEgdGlt ZSAodmlhIDxmdW5jdGlvbj5pbmRleGFtX3V0aWxfYWxsb2NfYmF0Y2g8L2Z1bmN0aW9uPiksCisg ICB1bmxpa2UgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiB3aGVyZSB0aGUgdGFibGUg QU0gbWFuYWdlcyBzZXZlcmFsCisgICBiYXRjaGVzIGluIGEgZGVkaWNhdGVkIGJhdGNoIHJpbmcg YnVmZmVyIGRhdGEgc3RydWN0dXJlLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBUaGUgb25s eSBjaGFuZ2UgbmVlZGVkIHRvIG1haW50YWluIHRoaXMgaW52YXJpYW50IGlzIGEgc2luZ2xlIGNh bGwgdG8KKyAgIDxmdW5jdGlvbj5pbmRleGFtX3V0aWxfcmVsZWFzZV9iYXRjaDwvZnVuY3Rpb24+ IGF0IHRoZSBwb2ludCB3aGVyZSB0aGUKKyAgIHNjYW4gbW92ZXMgYmV0d2VlbiBpbmRleCBwYWdl cywgY29uZGl0aW9uYWwgb24gdGhlIHNjYW4ncworICAgPHN0cnVjdGZpZWxkPnVzZWJhdGNocmlu Zzwvc3RydWN0ZmllbGQ+IGZpZWxkIGJlaW5nIGZhbHNlIChpbmRpY2F0aW5nIGEKKyAgIGJpdG1h cCBpbmRleCBzY2FuKS4gIFRoZSBpbmRleCBBTSByZWxlYXNlcyBpdHMgcHJpb3IgYmF0Y2gKKyAg IGp1c3QgYXMgaXQgaXMgYWJvdXQgdG8gZ2VuZXJhdGUgdGhlIG5leHQgYmF0Y2ggJm1kYXNoOyB0 aGUgc2FtZSBwb2ludAorICAgd2hlcmUgaXQgZXh0cmFjdHMgbmF2aWdhdGlvbiBzdGF0ZSAoc3Vj aCBhcyBzaWJsaW5nLXBhZ2UgbGlua3MpIGZyb20KKyAgIDxsaXRlcmFsPnByaW9yYmF0Y2g8L2xp dGVyYWw+LiAgTm8gb3RoZXIgY2hhbmdlcyB0byB0aGUgaW5kZXggQU0ncworICAgc2Nhbm5pbmcg bG9naWMgYXJlIG5lZWRlZC4gIFRoaXMgZWFybHkgcmVsZWFzZSBpcyBzcGVjaWZpYyB0bworICAg PGZ1bmN0aW9uPmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4gc2NhbnM7IGR1cmluZworICAgPGZ1bmN0 aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBzY2FucyB0aGUgPGxpdGVyYWw+cHJpb3JiYXRjaDwv bGl0ZXJhbD4KKyAgIGlzIHN0cmljdGx5IG93bmVkIGJ5IHRoZSBjYWxsZXIgKHRoZSB0YWJsZSBB TSksIGFuZCB0aGUgaW5kZXggQU0gbXVzdAorICAgbmV2ZXIgcmVsZWFzZSBpdC4gIFNlZSA8ZnVu Y3Rpb24+X2J0X25leHQ8L2Z1bmN0aW9uPiBmb3IgYSByZWZlcmVuY2UKKyAgIGV4YW1wbGUuCisg IDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFRoZSByZWxlYXNlZCBiYXRjaCBpcyBjYWNoZWQgaW50 ZXJuYWxseSBhbmQgcmV1c2VkIGJ5IHRoZSBuZXh0CisgICA8ZnVuY3Rpb24+aW5kZXhhbV91dGls X2FsbG9jX2JhdGNoPC9mdW5jdGlvbj4gY2FsbCwgYXZvaWRpbmcgcmVwZWF0ZWQKKyAgIG1lbW9y eSBhbGxvY2F0aW9uIGR1cmluZyB0aGUgYml0bWFwIHNjYW4uCisgIDwvcGFyYT4KKwogICA8cGFy YT4KIDxwcm9ncmFtbGlzdGluZz4KIHZvaWQKQEAgLTc5NSwzMiArMTEyOCw1MiBAQCBhbWVuZHNj YW4gKEluZGV4U2NhbkRlc2Mgc2Nhbik7CiAgIDxwYXJhPgogPHByb2dyYW1saXN0aW5nPgogdm9p ZAotYW1tYXJrcG9zIChJbmRleFNjYW5EZXNjIHNjYW4pOworYW1wb3NyZXNldCAoSW5kZXhTY2Fu RGVzYyBzY2FuLAorICAgICAgICAgICAgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpOwogPC9wcm9ncmFt bGlzdGluZz4KLSAgIE1hcmsgY3VycmVudCBzY2FuIHBvc2l0aW9uLiAgVGhlIGFjY2VzcyBtZXRo b2QgbmVlZCBvbmx5IHN1cHBvcnQgb25lCi0gICByZW1lbWJlcmVkIHNjYW4gcG9zaXRpb24gcGVy IHNjYW4uCisgICBOb3RpZnkgdGhlIGluZGV4IEFNIHRoYXQgdGhlIHRhYmxlIEFNIGlzIGFib3V0 IHRvIGNoYW5nZSB0aGUgc2NhbidzCisgICBsb2dpY2FsIHBvc2l0aW9uIGluIGEgd2F5IHRoYXQg bWF5IGludmFsaWRhdGUgaW5kZXggQU0gc3RhdGUgdGhhdAorICAgaW5kZXBlbmRlbnRseSB0cmFj a3MgdGhlIHNjYW4ncyBwcm9ncmVzcy4gIFRoaXMgY2FsbGJhY2sgaXMgaW52b2tlZCB3aGVuCisg ICB0aGUgdGFibGUgQU0gaXMgYWJvdXQgdG8gcHJvY2VzcyBhIGJhdGNoIGluIGEgZGlmZmVyZW50 IGRpcmVjdGlvbiB0aGFuCisgICB3YXMgdXNlZCB3aGVuIHRoZSBiYXRjaCB3YXMgb3JpZ2luYWxs eSByZXR1cm5lZCBieQorICAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiwgYW5kIGFs c28gd2hlbiBhIG1hcmtlZCBzY2FuIHBvc2l0aW9uIGlzCisgICBhYm91dCB0byBiZSByZXN0b3Jl ZC4gIFNvbWUgaW5kZXggQU1zIG1haW50YWluIGludGVybmFsIHN0YXRlIHRoYXQKKyAgIGFkdmFu Y2VzIGluIGxvY2tzdGVwIHdpdGggdGhlIHNjYW4gdW5kZXIgdGhlIHNvZnQgYXNzdW1wdGlvbiB0 aGF0IHRoZSBzY2FuCisgICBkaXJlY3Rpb24gd2lsbCBub3QgY2hhbmdlLiAgU3VjaCBzdGF0ZSBt YXkgZmFsbCBiZWhpbmQgdGhlIHNjYW4ncyB0cnVlCisgICBwb3NpdGlvbiB3aXRob3V0IGhhcm0g KHNpbXBseSByZWFkaW5nIHRoZSBuZXh0IGluZGV4IHBhZ2Ugd2lsbCBhbGxvdyB0aGUKKyAgIHN0 YXRlIHRvIDxxdW90ZT5jYXRjaCB1cDwvcXVvdGU+KSwgYnV0IG11c3QgbmV2ZXIgZ2V0IGFoZWFk IG9mIGl0LiAgV2hlbgorICAgdGhlIHNjYW4gZGlyZWN0aW9uIGNoYW5nZXMgb3IgYSBtYXJrZWQg cG9zaXRpb24gaXMgcmVzdG9yZWQsIHRoZSBhc3N1bXB0aW9uCisgICBpcyB2aW9sYXRlZCwgc28g dGhlIGluZGV4IEFNIG11c3QgcmVzZXQgdGhlIHN0YXRlIHRvIGEgc2FmZSBzdGFydGluZyBwb2lu dAorICAgZm9yIHRoZSBuZXcgZGlyZWN0aW9uLiAgRm9yIGV4YW1wbGUsIEItdHJlZSB1c2VzIHRo aXMgY2FsbGJhY2sgdG8gcmVzZXQgaXRzCisgICA8bGl0ZXJhbD5TY2FsYXJBcnJheU9wRXhwcjwv bGl0ZXJhbD4gYXJyYXkga2V5cyB0byB0aGVpciBpbml0aWFsIHBvc2l0aW9ucworICAgZm9yIHRo ZSBuZXcgc2NhbiBkaXJlY3Rpb24uCiAgIDwvcGFyYT4KIAogICA8cGFyYT4KLSAgIFRoZSA8ZnVu Y3Rpb24+YW1tYXJrcG9zPC9mdW5jdGlvbj4gZnVuY3Rpb24gbmVlZCBvbmx5IGJlIHByb3ZpZGVk IGlmIHRoZSBhY2Nlc3MKLSAgIG1ldGhvZCBzdXBwb3J0cyBvcmRlcmVkIHNjYW5zLiAgSWYgaXQg ZG9lc24ndCwKLSAgIHRoZSA8c3RydWN0ZmllbGQ+YW1tYXJrcG9zPC9zdHJ1Y3RmaWVsZD4gZmll bGQgaW4gaXRzIDxzdHJ1Y3RuYW1lPkluZGV4QW1Sb3V0aW5lPC9zdHJ1Y3RuYW1lPgotICAgc3Ry dWN0IG1heSBiZSBzZXQgdG8gTlVMTC4KKyAgIFdoZW4gPGZ1bmN0aW9uPmFtcG9zcmVzZXQ8L2Z1 bmN0aW9uPiBpcyBjYWxsZWQgZHVlIHRvIGEgY3Jvc3MtYmF0Y2gKKyAgIGRpcmVjdGlvbiBjaGFu Z2UsIHRoZSBjb3JlIHN5c3RlbSB3aWxsIGhhdmUgYWxyZWFkeSBmbGlwcGVkIHRoZSBiYXRjaCdz CisgICA8c3RydWN0ZmllbGQ+ZGlyPC9zdHJ1Y3RmaWVsZD4gZmllbGQgdG8gcmVmbGVjdCB0aGUg bmV3IHNjYW4gZGlyZWN0aW9uCisgICBiZWZvcmUgbWFraW5nIHRoZSBjYWxsLiAgVGhlIGluZGV4 IEFNIHNob3VsZCB1c2UgdGhpcyB1cGRhdGVkIGRpcmVjdGlvbgorICAgd2hlbiByZXNldHRpbmcg YW55IHN0YXRlIHRoYXQgZGVwZW5kcyBvbiBrbm93aW5nIHdoaWNoIHdheSB0aGUgc2NhbiBpcwor ICAgcHJvY2VlZGluZy4gIFdoZW4gY2FsbGVkIHRvIHJlc3RvcmUgYSBtYXJrZWQgcG9zaXRpb24s IHRoZSBiYXRjaCdzCisgICA8c3RydWN0ZmllbGQ+ZGlyPC9zdHJ1Y3RmaWVsZD4gaXMgbm90IG1v ZGlmaWVkOyBpdCByZXRhaW5zIHRoZSBkaXJlY3Rpb24KKyAgIGZyb20gd2hlbiB0aGUgYmF0Y2gg d2FzIG9yaWdpbmFsbHkgcmV0dXJuZWQuICBJbiBib3RoIGNhc2VzLCB0aGUgYmF0Y2gKKyAgIHBh c3NlZCB0byA8ZnVuY3Rpb24+YW1wb3NyZXNldDwvZnVuY3Rpb24+IGlzIHRoZSBiYXRjaCB0aGF0 IHdpbGwgbmV4dCBiZQorICAgcGFzc2VkIHRvIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlv bj4gYXMgaXRzCisgICA8bGl0ZXJhbD5wcmlvcmJhdGNoPC9saXRlcmFsPi4gIE5vdGUgaW4gcGFy dGljdWxhciB0aGF0IHRoZQorICAgPGxpdGVyYWw+cHJpb3JiYXRjaDwvbGl0ZXJhbD4uPHN0cnVj dGZpZWxkPmRpcjwvc3RydWN0ZmllbGQ+IGZpZWxkIGlzCisgICBndWFyYW50ZWVkIHRvIGhhdmUg dGhlIHNhbWUgc2NhbiBkaXJlY3Rpb24gYXMgd2hlbgorICAgPGZ1bmN0aW9uPmFtcG9zcmVzZXQ8 L2Z1bmN0aW9uPiB3YXMgY2FsbGVkLgogICA8L3BhcmE+CiAKICAgPHBhcmE+Ci08cHJvZ3JhbWxp c3Rpbmc+Ci12b2lkCi1hbXJlc3RycG9zIChJbmRleFNjYW5EZXNjIHNjYW4pOwotPC9wcm9ncmFt bGlzdGluZz4KLSAgIFJlc3RvcmUgdGhlIHNjYW4gdG8gdGhlIG1vc3QgcmVjZW50bHkgbWFya2Vk IHBvc2l0aW9uLgotICA8L3BhcmE+Ci0KLSAgPHBhcmE+Ci0gICBUaGUgPGZ1bmN0aW9uPmFtcmVz dHJwb3M8L2Z1bmN0aW9uPiBmdW5jdGlvbiBuZWVkIG9ubHkgYmUgcHJvdmlkZWQgaWYgdGhlIGFj Y2VzcwotICAgbWV0aG9kIHN1cHBvcnRzIG9yZGVyZWQgc2NhbnMuICBJZiBpdCBkb2Vzbid0LAot ICAgdGhlIDxzdHJ1Y3RmaWVsZD5hbXJlc3RycG9zPC9zdHJ1Y3RmaWVsZD4gZmllbGQgaW4gaXRz IDxzdHJ1Y3RuYW1lPkluZGV4QW1Sb3V0aW5lPC9zdHJ1Y3RuYW1lPgotICAgc3RydWN0IG1heSBi ZSBzZXQgdG8gTlVMTC4KKyAgIEluZGV4IGFjY2VzcyBtZXRob2RzIHRoYXQgaGF2ZSBwcml2YXRl IHN0YXRlIHdoaWNoIG11c3QgYmUgcmVzZXQgd2hlbiB0aGUKKyAgIHNjYW4gcG9zaXRpb24gY2hh bmdlcyBtdXN0IHByb3ZpZGUgYW4gPGZ1bmN0aW9uPmFtcG9zcmVzZXQ8L2Z1bmN0aW9uPgorICAg aW1wbGVtZW50YXRpb24uICBJbmRleCBBTXMgd2l0aCBubyBzdWNoIHN0YXRlIG1heSBzZXQKKyAg IDxzdHJ1Y3RmaWVsZD5hbXBvc3Jlc2V0PC9zdHJ1Y3RmaWVsZD4gdG8gTlVMTC4gIFRoZQorICAg PGZ1bmN0aW9uPmFtcG9zcmVzZXQ8L2Z1bmN0aW9uPiBmdW5jdGlvbiBjYW4gb25seSBiZSBwcm92 aWRlZCB3aGVuIHRoZQorICAgYWNjZXNzIG1ldGhvZCBzdXBwb3J0cyBvcmRlcmVkIHNjYW5zIHRo cm91Z2ggdGhlCisgICA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGludGVyZmFjZS4K ICAgPC9wYXJhPgogCiAgIDxwYXJhPgpAQCAtOTc1LDYgKzEzMjgsOCBAQCBhbXRyYW5zbGF0ZWNt cHR5cGUgKENvbXBhcmVUeXBlIGNtcHR5cGUsIE9pZCBvcGZhbWlseSwgT2lkIG9wY2ludHlwZSk7 CiAgICAgICAgQWNjZXNzIG1ldGhvZHMgdGhhdCBhbHdheXMgcmV0dXJuIGVudHJpZXMgaW4gdGhl IG5hdHVyYWwgb3JkZXJpbmcKICAgICAgICBvZiB0aGVpciBkYXRhIChzdWNoIGFzIGJ0cmVlKSBz aG91bGQgc2V0CiAgICAgICAgPHN0cnVjdGZpZWxkPmFtY2Fub3JkZXI8L3N0cnVjdGZpZWxkPiB0 byB0cnVlLgorICAgICAgIEJvdGggPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBhbmQg PGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPgorICAgICAgIHNjYW5zIHN1cHBvcnQgdGhp cyBjYXBhYmlsaXR5LgogICAgICAgIEN1cnJlbnRseSwgc3VjaCBhY2Nlc3MgbWV0aG9kcyBtdXN0 IHVzZSBidHJlZS1jb21wYXRpYmxlIHN0cmF0ZWd5CiAgICAgICAgbnVtYmVycyBmb3IgdGhlaXIg ZXF1YWxpdHkgYW5kIG9yZGVyaW5nIG9wZXJhdG9ycy4KICAgICAgIDwvcGFyYT4KQEAgLTk5NCwz NCArMTM0OSw0MCBAQCBhbXRyYW5zbGF0ZWNtcHR5cGUgKENvbXBhcmVUeXBlIGNtcHR5cGUsIE9p ZCBvcGZhbWlseSwgT2lkIG9wY2ludHlwZSk7CiAgIDwvcGFyYT4KIAogICA8cGFyYT4KLSAgIFRo ZSA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IGZ1bmN0aW9uIGhhcyBhIDxsaXRlcmFs PmRpcmVjdGlvbjwvbGl0ZXJhbD4gYXJndW1lbnQsCisgICBOb3RlIHRoYXQgPGZ1bmN0aW9uPmFt Z2V0YmF0Y2g8L2Z1bmN0aW9uPiBzY2FucyBkbyBub3QgY3VycmVudGx5IHN1cHBvcnQKKyAgIG9y ZGVyaW5nIG9wZXJhdG9ycy4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgVGhlIDxmdW5jdGlv bj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gZnVuY3Rpb24gaGFzIGEgPGxpdGVyYWw+ZGlyZWN0aW9u PC9saXRlcmFsPiBhcmd1bWVudCwKICAgIHdoaWNoIGNhbiBiZSBlaXRoZXIgPGxpdGVyYWw+Rm9y d2FyZFNjYW5EaXJlY3Rpb248L2xpdGVyYWw+ICh0aGUgbm9ybWFsIGNhc2UpCiAgICBvciAgPGxp dGVyYWw+QmFja3dhcmRTY2FuRGlyZWN0aW9uPC9saXRlcmFsPi4gIElmIHRoZSBmaXJzdCBjYWxs IGFmdGVyCiAgICA8ZnVuY3Rpb24+YW1yZXNjYW48L2Z1bmN0aW9uPiBzcGVjaWZpZXMgPGxpdGVy YWw+QmFja3dhcmRTY2FuRGlyZWN0aW9uPC9saXRlcmFsPiwgdGhlbiB0aGUKLSAgIHNldCBvZiBt YXRjaGluZyBpbmRleCBlbnRyaWVzIGlzIHRvIGJlIHNjYW5uZWQgYmFjay10by1mcm9udCByYXRo ZXIgdGhhbiBpbgotICAgdGhlIG5vcm1hbCBmcm9udC10by1iYWNrIGRpcmVjdGlvbiwgc28gPGZ1 bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBtdXN0IHJldHVybgotICAgdGhlIGxhc3QgbWF0 Y2hpbmcgdHVwbGUgaW4gdGhlIGluZGV4LCByYXRoZXIgdGhhbiB0aGUgZmlyc3Qgb25lIGFzIGl0 Ci0gICBub3JtYWxseSB3b3VsZC4gIChUaGlzIHdpbGwgb25seSBvY2N1ciBmb3IgYWNjZXNzCi0g ICBtZXRob2RzIHRoYXQgc2V0IDxzdHJ1Y3RmaWVsZD5hbWNhbm9yZGVyPC9zdHJ1Y3RmaWVsZD4g dG8gdHJ1ZS4pICBBZnRlciB0aGUKLSAgIGZpcnN0IGNhbGwsIDxmdW5jdGlvbj5hbWdldHR1cGxl PC9mdW5jdGlvbj4gbXVzdCBiZSBwcmVwYXJlZCB0byBhZHZhbmNlIHRoZSBzY2FuIGluCisgICBy ZXR1cm5lZCBiYXRjaCBtdXN0IGJlIHRoZSBiYXRjaCBjb250YWluaW5nIHRoZSBsYXN0IG1hdGNo aW5nIGl0ZW0ocyksCisgICByYXRoZXIgdGhhbiB0aGUgYmF0Y2ggY29udGFpbmluZyB0aGUgZmly c3QgbWF0Y2hpbmcgaXRlbShzKS4KKyAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4g bXVzdCBiZSBwcmVwYXJlZCB0byBhZHZhbmNlIHRoZSBzY2FuIGluCiAgICBlaXRoZXIgZGlyZWN0 aW9uIGZyb20gdGhlIG1vc3QgcmVjZW50bHkgcmV0dXJuZWQgZW50cnkuICAoQnV0IGlmCiAgICA8 c3RydWN0ZmllbGQ+YW1jYW5iYWNrd2FyZDwvc3RydWN0ZmllbGQ+IGlzIGZhbHNlLCBhbGwgc3Vi c2VxdWVudAogICAgY2FsbHMgd2lsbCBoYXZlIHRoZSBzYW1lIGRpcmVjdGlvbiBhcyB0aGUgZmly c3Qgb25lLikKICAgPC9wYXJhPgogCiAgIDxwYXJhPgotICAgQWNjZXNzIG1ldGhvZHMgdGhhdCBz dXBwb3J0IG9yZGVyZWQgc2NhbnMgbXVzdCBzdXBwb3J0IDxxdW90ZT5tYXJraW5nPC9xdW90ZT4g YQotICAgcG9zaXRpb24gaW4gYSBzY2FuIGFuZCBsYXRlciByZXR1cm5pbmcgdG8gdGhlIG1hcmtl ZCBwb3NpdGlvbi4gIFRoZSBzYW1lCi0gICBwb3NpdGlvbiBtaWdodCBiZSByZXN0b3JlZCBtdWx0 aXBsZSB0aW1lcy4gIEhvd2V2ZXIsIG9ubHkgb25lIHBvc2l0aW9uIG5lZWQKLSAgIGJlIHJlbWVt YmVyZWQgcGVyIHNjYW47IGEgbmV3IDxmdW5jdGlvbj5hbW1hcmtwb3M8L2Z1bmN0aW9uPiBjYWxs IG92ZXJyaWRlcyB0aGUKLSAgIHByZXZpb3VzbHkgbWFya2VkIHBvc2l0aW9uLiAgQW4gYWNjZXNz IG1ldGhvZCB0aGF0IGRvZXMgbm90IHN1cHBvcnQgb3JkZXJlZAotICAgc2NhbnMgbmVlZCBub3Qg cHJvdmlkZSA8ZnVuY3Rpb24+YW1tYXJrcG9zPC9mdW5jdGlvbj4gYW5kIDxmdW5jdGlvbj5hbXJl c3RycG9zPC9mdW5jdGlvbj4KLSAgIGZ1bmN0aW9ucyBpbiA8c3RydWN0bmFtZT5JbmRleEFtUm91 dGluZTwvc3RydWN0bmFtZT47IHNldCB0aG9zZSBwb2ludGVycyB0byBOVUxMCi0gICBpbnN0ZWFk LgorICAgQW4gPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBpbmRleCBBTSBjYW4gc3Vw cG9ydCBtYXJrL3Jlc3RvcmUgb2YKKyAgIHNjYW4gcG9zaXRpb25zIGJ5IHNldHRpbmcgPHN0cnVj dGZpZWxkPmFtY2FubWFya3Bvczwvc3RydWN0ZmllbGQ+CisgICAoPGZ1bmN0aW9uPmFtZ2V0dHVw bGU8L2Z1bmN0aW9uPiBpbmRleCBBTXMgZG8gbm90IHN1cHBvcnQgbWFyay9yZXN0b3JlKS4KKyAg IFRoZSBtYXJrL3Jlc3RvcmUgaW1wbGVtZW50YXRpb24gbGl2ZXMgaW4gdGhlIHRhYmxlIEFNIGFu ZCB3b3JrcyB3aXRoIGFueQorICAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBpbXBs ZW1lbnRhdGlvbjsgaG93ZXZlciwgYW4gYWNjZXNzIG1ldGhvZAorICAgd2hvc2Ugc2NhbnMgY2Fu bm90IGJlIHJld291bmQgdG8gYW4gZWFybGllciBwb3NpdGlvbiBzaG91bGQgbGVhdmUKKyAgIDxz dHJ1Y3RmaWVsZD5hbWNhbm1hcmtwb3M8L3N0cnVjdGZpZWxkPiBmYWxzZSwgaW4gd2hpY2ggY2Fz ZSB0aGUgcGxhbm5lcgorICAgbWF0ZXJpYWxpemVzIHRoZSBzY2FuJ3Mgb3V0cHV0IHdoZXJlIG1h cmsvcmVzdG9yZSB3b3VsZCBiZSBuZWVkZWQuCisgICBTZXBhcmF0ZWx5LCBpbmRleCBBTXMgdGhh dCBtYWludGFpbiBpbnRlcm5hbCBzdGF0ZSB3aGljaCB0cmFja3MgdGhlIHNjYW4ncworICAgcHJv Z3Jlc3MgbXVzdCBwcm92aWRlIGFuIDxmdW5jdGlvbj5hbXBvc3Jlc2V0PC9mdW5jdGlvbj4gY2Fs bGJhY2sgdG8gYmUKKyAgIG5vdGlmaWVkIHdoZW4gdGhlIHNjYW4ncyBsb2dpY2FsIHBvc2l0aW9u IGNoYW5nZXMgdW5leHBlY3RlZGx5LCBzdWNoIGFzCisgICBkdXJpbmcgbWFyay9yZXN0b3JlOyBz ZWUgPHhyZWYgbGlua2VuZD0iaW5kZXgtZnVuY3Rpb25zIi8+IGZvciBkZXRhaWxzLgogICA8L3Bh cmE+CiAKICAgPHBhcmE+Ci0gICBCb3RoIHRoZSBzY2FuIHBvc2l0aW9uIGFuZCB0aGUgbWFyayBw b3NpdGlvbiAoaWYgYW55KSBtdXN0IGJlIG1haW50YWluZWQKKyAgIFRoZSBzY2FuIHBvc2l0aW9u IChpZiBhbnkpIG11c3QgYmUgbWFpbnRhaW5lZCBieSB0aGUgdGFibGUgQU0gYW5kIGluZGV4IEFN CiAgICBjb25zaXN0ZW50bHkgaW4gdGhlIGZhY2Ugb2YgY29uY3VycmVudCBpbnNlcnRpb25zIG9y IGRlbGV0aW9ucyBpbiB0aGUKICAgIGluZGV4LiAgSXQgaXMgT0sgaWYgYSBmcmVzaGx5LWluc2Vy dGVkIGVudHJ5IGlzIG5vdCByZXR1cm5lZCBieSBhIHNjYW4gdGhhdAogICAgd291bGQgaGF2ZSBm b3VuZCB0aGUgZW50cnkgaWYgaXQgaGFkIGV4aXN0ZWQgd2hlbiB0aGUgc2NhbiBzdGFydGVkLCBv ciBmb3IKQEAgLTEwNDAsMTUgKzE0MDEsMTcgQEAgYW10cmFuc2xhdGVjbXB0eXBlIChDb21wYXJl VHlwZSBjbXB0eXBlLCBPaWQgb3BmYW1pbHksIE9pZCBvcGNpbnR5cGUpOwogICAgd2hpY2ggdGhl IGluZGV4IHJldHVybnMgdGhlIGFjdHVhbCBkYXRhIG5vdCBqdXN0IHRoZSBUSUQgb2YgdGhlIGhl YXAgdHVwbGUuCiAgICBUaGlzIHdpbGwgb25seSBhdm9pZCBJL08gaWYgdGhlIHZpc2liaWxpdHkg bWFwIHNob3dzIHRoYXQgdGhlIFRJRCBpcyBvbiBhbgogICAgYWxsLXZpc2libGUgcGFnZTsgZWxz ZSB0aGUgaGVhcCB0dXBsZSBtdXN0IGJlIHZpc2l0ZWQgYW55d2F5IHRvIGNoZWNrCi0gICBNVkND IHZpc2liaWxpdHkuICBCdXQgdGhhdCBpcyBubyBjb25jZXJuIG9mIHRoZSBhY2Nlc3MgbWV0aG9k J3MuCisgICBNVkNDIHZpc2liaWxpdHkuICBCdXQgdGhhdCBpcyBubyBjb25jZXJuIG9mIHRoZSBp bmRleCBhY2Nlc3MgbWV0aG9kJ3MuCiAgIDwvcGFyYT4KIAogICA8cGFyYT4KLSAgIEluc3RlYWQg b2YgdXNpbmcgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiwgYW4gaW5kZXggc2NhbiBj YW4gYmUgZG9uZSB3aXRoCi0gICA8ZnVuY3Rpb24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiB0byBm ZXRjaCBhbGwgdHVwbGVzIGluIG9uZSBjYWxsLiAgVGhpcyBjYW4gYmUKLSAgIG5vdGljZWFibHkg bW9yZSBlZmZpY2llbnQgdGhhbiA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IGJlY2F1 c2UgaXQgYWxsb3dzCi0gICBhdm9pZGluZyBsb2NrL3VubG9jayBjeWNsZXMgd2l0aGluIHRoZSBh Y2Nlc3MgbWV0aG9kLiAgSW4gcHJpbmNpcGxlCi0gICA8ZnVuY3Rpb24+YW1nZXRiaXRtYXA8L2Z1 bmN0aW9uPiBzaG91bGQgaGF2ZSB0aGUgc2FtZSBlZmZlY3RzIGFzIHJlcGVhdGVkCisgICBJbnN0 ZWFkIG9mIHVzaW5nIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gb3IKKyAgIDxmdW5j dGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4sIGFuIGluZGV4IHNjYW4gY2FuIGJlIGRvbmUgd2l0 aAorICAgPGZ1bmN0aW9uPmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4gdG8gZmV0Y2ggYWxsIHR1cGxl cyBpbiBvbmUgY2FsbC4gIFRoaXMgY2FuCisgICBiZSBub3RpY2VhYmx5IG1vcmUgZWZmaWNpZW50 IHRoYW4gd2l0aCBhbiA8cXVvdGU+b3JkZXJlZDwvcXVvdGU+IHNjYW4KKyAgIGJlY2F1c2UgaXQg YWxsb3dzIGVmZmljaWVudCBzZXF1ZW50aWFsIGFjY2VzcyB0byB0YWJsZSBBTSBwYWdlcyBjb250 YWluaW5nCisgICBtYXRjaGVzLiAgSW4gcHJpbmNpcGxlIDxmdW5jdGlvbj5hbWdldGJpdG1hcDwv ZnVuY3Rpb24+IHNob3VsZCBoYXZlIHRoZQorICAgc2FtZSBlZmZlY3RzIGFzIHJlcGVhdGVkIDxm dW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gb3IKICAgIDxmdW5jdGlvbj5hbWdldHR1cGxl PC9mdW5jdGlvbj4gY2FsbHMsIGJ1dCB3ZSBpbXBvc2Ugc2V2ZXJhbCByZXN0cmljdGlvbnMgdG8K ICAgIHNpbXBsaWZ5IG1hdHRlcnMuICBGaXJzdCBvZiBhbGwsIDxmdW5jdGlvbj5hbWdldGJpdG1h cDwvZnVuY3Rpb24+IHJldHVybnMgYWxsCiAgICB0dXBsZXMgYXQgb25jZSBhbmQgbWFya2luZyBv ciByZXN0b3Jpbmcgc2NhbiBwb3NpdGlvbnMgaXNuJ3QKQEAgLTEwNTksMTUgKzE0MjIsMTUgQEAg YW10cmFuc2xhdGVjbXB0eXBlIChDb21wYXJlVHlwZSBjbXB0eXBlLCBPaWQgb3BmYW1pbHksIE9p ZCBvcGNpbnR5cGUpOwogICAgQWxzbywgdGhlcmUgaXMgbm8gcHJvdmlzaW9uIGZvciBpbmRleC1v bmx5IHNjYW5zIHdpdGgKICAgIDxmdW5jdGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+LCBzaW5j ZSB0aGVyZSBpcyBubyB3YXkgdG8gcmV0dXJuIHRoZSBjb250ZW50cyBvZgogICAgaW5kZXggdHVw bGVzLgotICAgRmluYWxseSwgPGZ1bmN0aW9uPmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4KLSAgIGRv ZXMgbm90IGd1YXJhbnRlZSBhbnkgbG9ja2luZyBvZiB0aGUgcmV0dXJuZWQgdHVwbGVzLCB3aXRo IGltcGxpY2F0aW9ucwotICAgc3BlbGxlZCBvdXQgaW4gPHhyZWYgbGlua2VuZD0iaW5kZXgtbG9j a2luZyIvPi4KKyAgIEZpbmFsbHksIDxmdW5jdGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+IGRv ZXMgbm90IGhvbGQgYW55IGluZGV4IHBhZ2UgcGlucworICAgYWZ0ZXIgaXQgcmV0dXJucyAoc2lt aWxhcmx5IHRvIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gc2NhbnMgd2l0aAorICAg YW4gTVZDQyBzbmFwc2hvdCksIGFzIGRlc2NyaWJlZCBpbiA8eHJlZiBsaW5rZW5kPSJpbmRleC1s b2NraW5nIi8+LgogICA8L3BhcmE+CiAKICAgPHBhcmE+CiAgICBOb3RlIHRoYXQgaXQgaXMgcGVy bWl0dGVkIGZvciBhbiBhY2Nlc3MgbWV0aG9kIHRvIGltcGxlbWVudCBvbmx5Ci0gICA8ZnVuY3Rp b24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiBhbmQgbm90IDxmdW5jdGlvbj5hbWdldHR1cGxlPC9m dW5jdGlvbj4sIG9yIHZpY2UgdmVyc2EsCi0gICBpZiBpdHMgaW50ZXJuYWwgaW1wbGVtZW50YXRp b24gaXMgdW5zdWl0ZWQgdG8gb25lIEFQSSBvciB0aGUgb3RoZXIuCisgICA8ZnVuY3Rpb24+YW1n ZXRiaXRtYXA8L2Z1bmN0aW9uPiBhbmQgbm90IDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlv bj4vPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiwKKyAgIG9yIHZpY2UgdmVyc2EsIGlm IGl0cyBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBpcyB1bnN1aXRlZCB0byBvbmUgQVBJIG9yIHRo ZSBvdGhlci4KICAgPC9wYXJhPgogCiAgPC9zZWN0MT4KQEAgLTExMjMsMTEgKzE0ODYsMTkgQEAg YW10cmFuc2xhdGVjbXB0eXBlIChDb21wYXJlVHlwZSBjbXB0eXBlLCBPaWQgb3BmYW1pbHksIE9p ZCBvcGNpbnR5cGUpOwogICAgICA8L2xpc3RpdGVtPgogICAgICA8bGlzdGl0ZW0+CiAgICAgICA8 cGFyYT4KLSAgICAgICBBbiBpbmRleCBzY2FuIG11c3QgbWFpbnRhaW4gYSBwaW4KLSAgICAgICBv biB0aGUgaW5kZXggcGFnZSBob2xkaW5nIHRoZSBpdGVtIGxhc3QgcmV0dXJuZWQgYnkKLSAgICAg ICA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+LCBhbmQgPGZ1bmN0aW9uPmFtYnVsa2Rl bGV0ZTwvZnVuY3Rpb24+IGNhbm5vdCBkZWxldGUKLSAgICAgICBlbnRyaWVzIGZyb20gcGFnZXMg dGhhdCBhcmUgcGlubmVkIGJ5IG90aGVyIGJhY2tlbmRzLiAgVGhlIG5lZWQKLSAgICAgICBmb3Ig dGhpcyBydWxlIGlzIGV4cGxhaW5lZCBiZWxvdy4KKyAgICAgICBBIHBpbiBtdXN0IGJlIGhlbGQg b24gYW55IGluZGV4IHBhZ2Ugd2hvc2UgaXRlbXMgbWlnaHQgc3RpbGwgbmVlZCB0bworICAgICAg IGJlIGZvbGxvd2VkLCBhbmQgPGZ1bmN0aW9uPmFtYnVsa2RlbGV0ZTwvZnVuY3Rpb24+IG11c3Qg YWNxdWlyZSBhCisgICAgICAgY2xlYW51cCBsb2NrIG9uIGVhY2ggaW5kZXggcGFnZSwgd2hpY2gg d2lsbCBibG9jayBpZiBhbnkgb3RoZXIKKyAgICAgICBiYWNrZW5kIGhvbGRzIGEgcGluIG9uIHRo YXQgcGFnZS4KKyAgICAgICBGb3IgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBzY2Fu cywgdGhlIGluZGV4IGFjY2VzcyBtZXRob2QKKyAgICAgICBtYW5hZ2VzIHRoaXMgcGluIGRpcmVj dGx5LgorICAgICAgIEZvciA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IHNjYW5zLCB0 aGUgaW5kZXggQU0gaG9sZHMgYSBidWZmZXIKKyAgICAgICBwaW4gb24gZWFjaCBiYXRjaCdzIGlu ZGV4IGxlYWYgcGFnZSAoaW4gaXRzIHBlci1iYXRjaCBvcGFxdWUgYXJlYSkuCisgICAgICAgRGVw ZW5kaW5nIG9uIGEgc2Nhbi1sZXZlbCBwb2xpY3kgZGVzY3JpYmVkIGJlbG93LCB0aGUgaW50ZXJs b2NrIGlzIHRoZW4KKyAgICAgICBlaXRoZXIgZHJvcHBlZCBlYWdlcmx5IGJ5IGNvcmUgY29kZSBi ZWZvcmUgdGhlIGJhdGNoIGlzIHJldHVybmVkIHRvIHRoZQorICAgICAgIHRhYmxlIEFNLCBvciBy ZXRhaW5lZCB1bnRpbCB0aGUgdGFibGUgQU0gcmVsZWFzZXMgaXQgKHZpYSB0aGUgaW5kZXggQU0n cworICAgICAgIDxmdW5jdGlvbj5hbXVuZ3VhcmRiYXRjaDwvZnVuY3Rpb24+IGNhbGxiYWNrKS4K KyAgICAgICBUaGUgbmVlZCBmb3IgdGhpcyBydWxlIGlzIGV4cGxhaW5lZCBiZWxvdy4KICAgICAg IDwvcGFyYT4KICAgICAgPC9saXN0aXRlbT4KICAgICA8L2l0ZW1pemVkbGlzdD4KQEAgLTExMzgs MzkgKzE1MDksOTYgQEAgYW10cmFuc2xhdGVjbXB0eXBlIChDb21wYXJlVHlwZSBjbXB0eXBlLCBP aWQgb3BmYW1pbHksIE9pZCBvcGNpbnR5cGUpOwogICAgPGNvbW1hbmQ+VkFDVVVNPC9jb21tYW5k Pi4KICAgIFRoaXMgY3JlYXRlcyBubyBzZXJpb3VzIHByb2JsZW1zIGlmIHRoYXQgaXRlbQogICAg bnVtYmVyIGlzIHN0aWxsIHVudXNlZCB3aGVuIHRoZSByZWFkZXIgcmVhY2hlcyBpdCwgc2luY2Ug YW4gZW1wdHkKLSAgIGl0ZW0gc2xvdCB3aWxsIGJlIGlnbm9yZWQgYnkgPGZ1bmN0aW9uPmhlYXBf ZmV0Y2goKTwvZnVuY3Rpb24+LiAgQnV0IHdoYXQgaWYgYQorICAgaXRlbSBzbG90IHdpbGwgc2lt cGx5IGJlIHRyZWF0ZWQgYXMgbm90LXZpc2libGUuICBCdXQgd2hhdCBpZiBhCiAgICB0aGlyZCBi YWNrZW5kIGhhcyBhbHJlYWR5IHJlLXVzZWQgdGhlIGl0ZW0gc2xvdCBmb3Igc29tZXRoaW5nIGVs c2U/CiAgICBXaGVuIHVzaW5nIGFuIE1WQ0MtY29tcGxpYW50IHNuYXBzaG90LCB0aGVyZSBpcyBu byBwcm9ibGVtIGJlY2F1c2UKICAgIHRoZSBuZXcgb2NjdXBhbnQgb2YgdGhlIHNsb3QgaXMgY2Vy dGFpbiB0byBiZSB0b28gbmV3IHRvIHBhc3MgdGhlCiAgICBzbmFwc2hvdCB0ZXN0LiAgSG93ZXZl ciwgd2l0aCBhIG5vbi1NVkNDLWNvbXBsaWFudCBzbmFwc2hvdCAoc3VjaCBhcwogICAgPGxpdGVy YWw+U25hcHNob3RBbnk8L2xpdGVyYWw+KSwgaXQgd291bGQgYmUgcG9zc2libGUgdG8gYWNjZXB0 IGFuZCByZXR1cm4KLSAgIGEgcm93IHRoYXQgZG9lcyBub3QgaW4gZmFjdCBtYXRjaCB0aGUgc2Nh biBrZXlzLiAgV2UgY291bGQgZGVmZW5kCi0gICBhZ2FpbnN0IHRoaXMgc2NlbmFyaW8gYnkgcmVx dWlyaW5nIHRoZSBzY2FuIGtleXMgdG8gYmUgcmVjaGVja2VkCi0gICBhZ2FpbnN0IHRoZSBoZWFw IHJvdyBpbiBhbGwgY2FzZXMsIGJ1dCB0aGF0IGlzIHRvbyBleHBlbnNpdmUuICBJbnN0ZWFkLAot ICAgd2UgdXNlIGEgcGluIG9uIGFuIGluZGV4IHBhZ2UgYXMgYSBwcm94eSB0byBpbmRpY2F0ZSB0 aGF0IHRoZSByZWFkZXIKLSAgIG1pZ2h0IHN0aWxsIGJlIDxxdW90ZT5pbiBmbGlnaHQ8L3F1b3Rl PiBmcm9tIHRoZSBpbmRleCBlbnRyeSB0byB0aGUgbWF0Y2hpbmcKLSAgIGhlYXAgZW50cnkuICBN YWtpbmcgPGZ1bmN0aW9uPmFtYnVsa2RlbGV0ZTwvZnVuY3Rpb24+IGJsb2NrIG9uIHN1Y2ggYSBw aW4gZW5zdXJlcwotICAgdGhhdCA8Y29tbWFuZD5WQUNVVU08L2NvbW1hbmQ+IGNhbm5vdCBkZWxl dGUgdGhlIGhlYXAgZW50cnkgYmVmb3JlIHRoZSByZWFkZXIKLSAgIGlzIGRvbmUgd2l0aCBpdC4g IFRoaXMgc29sdXRpb24gY29zdHMgbGl0dGxlIGluIHJ1biB0aW1lLCBhbmQgYWRkcyBibG9ja2lu ZwotICAgb3ZlcmhlYWQgb25seSBpbiB0aGUgcmFyZSBjYXNlcyB3aGVyZSB0aGVyZSBhY3R1YWxs eSBpcyBhIGNvbmZsaWN0LgorICAgYSB3aG9sbHkgdW5yZWxhdGVkIHJvdyAob25lIHRoYXQgZG9l cyBub3QgbmVjZXNzYXJpbHkgc2F0aXNmeSB0aGUgc2NhbgorICAga2V5cykuICBXZSBjYW4gb3B0 aW9uYWxseSB1c2UgYSBwaW4gb24gYW4gaW5kZXggcGFnZSBhcyBhIHByb3h5IHRvIGluZGljYXRl CisgICB0aGF0IHRoZSByZWFkZXIgbWlnaHQgc3RpbGwgYmUgPHF1b3RlPmluIGZsaWdodDwvcXVv dGU+IGZyb20gdGhlIGluZGV4CisgICBlbnRyeSB0byB0aGUgbWF0Y2hpbmcgaGVhcCBlbnRyeS4g IE1ha2luZyA8ZnVuY3Rpb24+YW1idWxrZGVsZXRlPC9mdW5jdGlvbj4KKyAgIGJsb2NrIG9uIHN1 Y2ggYSBwaW4gZW5zdXJlcyB0aGF0IDxjb21tYW5kPlZBQ1VVTTwvY29tbWFuZD4gY2Fubm90IGRl bGV0ZQorICAgdGhlIGhlYXAgZW50cnkgYmVmb3JlIHRoZSByZWFkZXIgaXMgZG9uZSB3aXRoIGl0 LiAgVGhpcyBzb2x1dGlvbiBjb3N0cworICAgbGl0dGxlIGluIHJ1biB0aW1lLCBhbmQgYWRkcyBi bG9ja2luZyBvdmVyaGVhZCBvbmx5IGluIHRoZSByYXJlIGNhc2VzIHdoZXJlCisgICB0aGVyZSBh Y3R1YWxseSBpcyBhIGNvbmZsaWN0LiAgRm9yIHBsYWluIGluZGV4IHNjYW5zIHRoYXQgdXNlIGFu CisgICBNVkNDLWNvbXBsaWFudCBzbmFwc2hvdCwgaG9sZGluZyB0aGUgcGluIGlzIHVubmVjZXNz YXJ5IGJlY2F1c2UgdGhlIHNjYW4KKyAgIHdpbGwgYWx3YXlzIHZpc2l0IHRoZSBoZWFwIHBhZ2Us IHdoZXJlIHRoZSBzbmFwc2hvdCBpdHNlbGYgd2lsbCByZWplY3QgYW55CisgICByZWN5Y2xlZCBU SUQncyBuZXcgb2NjdXBhbnQuICAoSW5kZXgtb25seSBzY2FucyBhcmUgYSBzcGVjaWFsIGNhc2Us IGFzCisgICBkaXNjdXNzZWQgYmVsb3cuKQogICA8L3BhcmE+CiAKICAgPHBhcmE+Ci0gICBUaGlz IHNvbHV0aW9uIHJlcXVpcmVzIHRoYXQgaW5kZXggc2NhbnMgYmUgPHF1b3RlPnN5bmNocm9ub3Vz PC9xdW90ZT46IHdlIGhhdmUKLSAgIHRvIGZldGNoIGVhY2ggaGVhcCB0dXBsZSBpbW1lZGlhdGVs eSBhZnRlciBzY2FubmluZyB0aGUgY29ycmVzcG9uZGluZyBpbmRleAotICAgZW50cnkuICBUaGlz IGlzIGV4cGVuc2l2ZSBmb3IgYSBudW1iZXIgb2YgcmVhc29ucy4gIEFuCi0gICA8cXVvdGU+YXN5 bmNocm9ub3VzPC9xdW90ZT4gc2NhbiBpbiB3aGljaCB3ZSBjb2xsZWN0IG1hbnkgVElEcyBmcm9t IHRoZSBpbmRleCwKLSAgIGFuZCBvbmx5IHZpc2l0IHRoZSBoZWFwIHR1cGxlcyBzb21ldGltZSBs YXRlciwgcmVxdWlyZXMgbXVjaCBsZXNzIGluZGV4Ci0gICBsb2NraW5nIG92ZXJoZWFkIGFuZCBj YW4gYWxsb3cgYSBtb3JlIGVmZmljaWVudCBoZWFwIGFjY2VzcyBwYXR0ZXJuLgotICAgUGVyIHRo ZSBhYm92ZSBhbmFseXNpcywgd2UgbXVzdCB1c2UgdGhlIHN5bmNocm9ub3VzIGFwcHJvYWNoIGZv cgotICAgbm9uLU1WQ0MtY29tcGxpYW50IHNuYXBzaG90cywgYnV0IGFuIGFzeW5jaHJvbm91cyBz Y2FuIGlzIHdvcmthYmxlCi0gICBmb3IgYSBxdWVyeSB1c2luZyBhbiBNVkNDIHNuYXBzaG90Lgor ICAgVGhpcyBzb2x1dGlvbiByZXF1aXJlcyB0aGF0IDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5j dGlvbj4gaW5kZXggc2NhbnMgYmUKKyAgIDxxdW90ZT5zeW5jaHJvbm91czwvcXVvdGU+OiB0aGUg dGFibGUgQU0gbXVzdCBmZXRjaCBlYWNoIGhlYXAgdHVwbGUKKyAgIGltbWVkaWF0ZWx5IGFmdGVy IHNjYW5uaW5nIHRoZSBjb3JyZXNwb25kaW5nIGluZGV4IGVudHJ5LiAgVGhpcyBpcworICAgZXhw ZW5zaXZlIGZvciBhIG51bWJlciBvZiByZWFzb25zLiAgVGhlCisgICA8ZnVuY3Rpb24+YW1nZXRi YXRjaDwvZnVuY3Rpb24+IGludGVyZmFjZSwgYnkgY29udHJhc3QsIHdhcyBkZXNpZ25lZCB0bwor ICAgYWxsb3cgc2NhbnMgdG8gYmUgPHF1b3RlPmFzeW5jaHJvbm91czwvcXVvdGU+LgogICA8L3Bh cmE+CiAKICAgPHBhcmE+Ci0gICBJbiBhbiA8ZnVuY3Rpb24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9u PiBpbmRleCBzY2FuLCB0aGUgYWNjZXNzIG1ldGhvZCBkb2VzIG5vdAotICAga2VlcCBhbiBpbmRl eCBwaW4gb24gYW55IG9mIHRoZSByZXR1cm5lZCB0dXBsZXMuICBUaGVyZWZvcmUKLSAgIGl0IGlz IG9ubHkgc2FmZSB0byB1c2Ugc3VjaCBzY2FucyB3aXRoIE1WQ0MtY29tcGxpYW50IHNuYXBzaG90 cy4KKyAgIFdoZXRoZXIgYSBiYXRjaCdzIFRJRCByZWN5Y2xpbmcgaW50ZXJsb2NrICh0eXBpY2Fs bHkgYW4gaW5kZXggcGFnZSBidWZmZXIKKyAgIHBpbikgaXMgZHJvcHBlZCBpbW1lZGlhdGVseSBv ciBkZWZlcnJlZCBpcyBjb250cm9sbGVkIGJ5IGEgZ2VuZXJpYywKKyAgIHNjYW4tbGV2ZWwgcG9s aWN5IHRoYXQgaXMgZGV0ZXJtaW5lZCB3aGVuIHRoZSBzY2FuIGlzIG9wZW5lZCAmbWRhc2g7IGl0 IGlzCisgICBub3QgdW5kZXIgdGhlIGNvbnRyb2wgb2YgZWl0aGVyIHRoZSBpbmRleCBBTSBvciB0 aGUgdGFibGUgQU0uICBUaGUgc2NhbidzCisgICA8c3RydWN0ZmllbGQ+YmF0Y2hJbW1lZGlhdGVV bmd1YXJkPC9zdHJ1Y3RmaWVsZD4gZmxhZyBlbmNvZGVzIHRoaXMgcG9saWN5LgorICAgSXQgaXMg c2V0IGJhc2VkIG9uIHR3byBjcml0ZXJpYSB0aGF0IGFyZSBrbm93biB0byB0aGUgY29yZSBzY2Fu IG1hY2hpbmVyeToKKyAgIHdoZXRoZXIgdGhlIHNjYW4gdXNlcyBhbiBNVkNDLWNvbXBsaWFudCBz bmFwc2hvdCwgYW5kIHdoZXRoZXIgaXQgaXMgYW4KKyAgIGluZGV4LW9ubHkgc2Nhbi4gIFNwZWNp ZmljYWxseSwKKyAgIDxzdHJ1Y3RmaWVsZD5iYXRjaEltbWVkaWF0ZVVuZ3VhcmQ8L3N0cnVjdGZp ZWxkPiBpcyB0cnVlIHdoZW4gdGhlIHNjYW4gdXNlcworICAgYW4gTVZDQyBzbmFwc2hvdCBhbmQg aXMgPGVtcGhhc2lzPm5vdDwvZW1waGFzaXM+IGFuIGluZGV4LW9ubHkgc2Nhbi4KKyAgPC9wYXJh PgorCisgIDxwYXJhPgorICAgV2hlbiA8c3RydWN0ZmllbGQ+YmF0Y2hJbW1lZGlhdGVVbmd1YXJk PC9zdHJ1Y3RmaWVsZD4gaXMgdHJ1ZSwgdGhlCisgICBpbnRlcmxvY2sgaXMgZHJvcHBlZCBpbnNp ZGUKKyAgIDxmdW5jdGlvbj5pbmRleGFtX3V0aWxfdW5sb2NrX2JhdGNoPC9mdW5jdGlvbj4gKGJl Zm9yZSB0aGUgYmF0Y2ggaXMgZXZlbgorICAgcmV0dXJuZWQgdG8gdGhlIHRhYmxlIEFNKSwgYmVj YXVzZSBhIHBsYWluIGluZGV4IHNjYW4gd2l0aCBhbiBNVkNDCisgICBzbmFwc2hvdCB3aWxsIGFs d2F5cyB2aXNpdCB0aGUgaGVhcCBwYWdlLCB3aGVyZSB0aGUgTVZDQyB2aXNpYmlsaXR5IGNoZWNr CisgICBpcyBhdXRob3JpdGF0aXZlICZtZGFzaDsgZXZlbiBpZiA8Y29tbWFuZD5WQUNVVU08L2Nv bW1hbmQ+IHJlY3ljbGVzIGEgVElELAorICAgdGhlIG5ldyBvY2N1cGFudCBjYW5ub3QgcGFzcyB0 aGUgc25hcHNob3QgdGVzdC4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgV2hlbiA8c3RydWN0 ZmllbGQ+YmF0Y2hJbW1lZGlhdGVVbmd1YXJkPC9zdHJ1Y3RmaWVsZD4gaXMgZmFsc2UsIHRoZQor ICAgaW50ZXJsb2NrIGlzIHJldGFpbmVkIHVudGlsIHRoZSB0YWJsZSBBTSBleHBsaWNpdGx5IHJl bGVhc2VzIGl0IGJ5IGNhbGxpbmcKKyAgIDxmdW5jdGlvbj50YWJsZWFtX3V0aWxfdW5ndWFyZF9i YXRjaDwvZnVuY3Rpb24+ICh3aGljaCBpbnZva2VzIHRoZSBpbmRleAorICAgQU0ncyA8ZnVuY3Rp b24+YW11bmd1YXJkYmF0Y2g8L2Z1bmN0aW9uPiBjYWxsYmFjayksIGJlY2F1c2UgdGhlIHNjYW4g Y2Fubm90CisgICByZWx5IG9uIHRoYXQgaGVhcCBwYWdlIE1WQ0MgYmFja3N0b3AuICBGb3Igbm9u LU1WQ0Mgc2NhbnMsIHRoZXJlIGlzIG5vIE1WQ0MKKyAgIHNuYXBzaG90IHRvIHJlamVjdCBhIHJl Y3ljbGVkIFRJRCdzIG5ldyBvY2N1cGFudCBhdCBhbGwuICBGb3IgaW5kZXgtb25seQorICAgc2Nh bnMsIGV2ZW4gd2l0aCBhbiBNVkNDIHNuYXBzaG90LCB0aGUgc2NhbiB0eXBpY2FsbHkgYXZvaWRz IHZpc2l0aW5nIHRoZQorICAgaGVhcCBwYWdlIGFsdG9nZXRoZXIgKHVzaW5nIHRoZSB2aXNpYmls aXR5IG1hcCBpbnN0ZWFkKSwgc28gdGhlIE1WQ0MgY2hlY2sKKyAgIHRoYXQgd291bGQgY2F0Y2gg YSByZWN5Y2xlZCBUSUQgdXN1YWxseSBuZXZlciBydW5zLiAgSW4gYm90aCBjYXNlcyB0aGUKKyAg IGludGVybG9jayBvbiB0aGUgaW5kZXggcGFnZSBpcyB3aGF0IHByZXZlbnRzIDxjb21tYW5kPlZB Q1VVTTwvY29tbWFuZD4gZnJvbQorICAgcmVjeWNsaW5nIFRJRHMgd2hpbGUgdGhlIHNjYW4gaXMg c3RpbGwgaW4gZmxpZ2h0LgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBXaGVuIDxzdHJ1Y3Rm aWVsZD5iYXRjaEltbWVkaWF0ZVVuZ3VhcmQ8L3N0cnVjdGZpZWxkPiBpcyBmYWxzZSwgdGhlIHRh YmxlCisgICBBTSBkZWNpZGVzIDxlbXBoYXNpcz53aGVuPC9lbXBoYXNpcz4gdG8gY2FsbAorICAg PGZ1bmN0aW9uPnRhYmxlYW1fdXRpbF91bmd1YXJkX2JhdGNoPC9mdW5jdGlvbj47IHRoZSBpbmRl eCBBTSdzCisgICA8ZnVuY3Rpb24+YW11bmd1YXJkYmF0Y2g8L2Z1bmN0aW9uPiBjYWxsYmFjayBk ZWNpZGVzCisgICA8ZW1waGFzaXM+d2hhdDwvZW1waGFzaXM+IHRvIHJlbGVhc2UuICBXaGVuCisg ICA8c3RydWN0ZmllbGQ+YmF0Y2hJbW1lZGlhdGVVbmd1YXJkPC9zdHJ1Y3RmaWVsZD4gaXMgdHJ1 ZSwgdGhlIGluZGV4IEFNCisgICBkcm9wcyB0aGUgaW50ZXJsb2NrIGl0c2VsZiAoaW5zaWRlCisg ICA8ZnVuY3Rpb24+aW5kZXhhbV91dGlsX3VubG9ja19iYXRjaDwvZnVuY3Rpb24+KSwgYW5kCisg ICA8ZnVuY3Rpb24+YW11bmd1YXJkYmF0Y2g8L2Z1bmN0aW9uPiBpcyBuZXZlciBjYWxsZWQuCisg IDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFNpbWlsYXJseSwgYW4gPGZ1bmN0aW9uPmFtZ2V0Yml0 bWFwPC9mdW5jdGlvbj4gaW5kZXggc2NhbiBpcyBpbmhlcmVudGx5CisgICBhc3luY2hyb25vdXM6 IGFsbCBtYXRjaGluZyBUSURzIGFyZSBjb2xsZWN0ZWQgaW50byBhIGJpdG1hcCBiZWZvcmUgYW55 IGhlYXAKKyAgIGFjY2VzcyBiZWdpbnMuICBTdWNoIHNjYW5zIHRoZXJlZm9yZSByZXF1aXJlIGFu IE1WQ0MtY29tcGxpYW50IHNuYXBzaG90LAorICAgYW5kIHRoZXJlIGlzIG5vIG5lZWQgZm9yIHRo ZSBhY2Nlc3MgbWV0aG9kIHRvIGhvbGQgaW5kZXggcGFnZSBwaW5zLgorICA8L3BhcmE+CisKKyAg PHBhcmE+CisgICBJbmRleCBhY2Nlc3MgbWV0aG9kcyB0aGF0IHVzZSA8ZnVuY3Rpb24+YW1nZXR0 dXBsZTwvZnVuY3Rpb24+IG11c3QgbWFuYWdlCisgICBwaW4gbGlmZXRpbWUgdGhlbXNlbHZlcywg c2luY2UgdGhlcmUgaXMgbm8gdGFibGUgQU0gaW50ZXJtZWRpYXJ5ICh1bmxpa2UKKyAgIHdpdGgg PGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPikuICBUaGUgaW5kZXggQU0gbXVzdCBob2xk IGEgcGluIG9uIHRoZQorICAgY3VycmVudCBpbmRleCBwYWdlIHVudGlsIHRoZSBzY2FuIG1vdmVz IHRvIGEgZGlmZmVyZW50IHBhZ2Ugb3IgZW5kcy4KICAgPC9wYXJhPgogCiAgIDxwYXJhPgpkaWZm IC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfdGFibGUuc2dtbCBiL2RvYy9zcmMvc2dt bC9yZWYvY3JlYXRlX3RhYmxlLnNnbWwKaW5kZXggZTM0MjU4NWM3Li4yYTM1NTg2OGYgMTAwNjQ0 Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3RhYmxlLnNnbWwKKysrIGIvZG9jL3NyYy9z Z21sL3JlZi9jcmVhdGVfdGFibGUuc2dtbApAQCAtMTE3MywxMiArMTE3MywxMyBAQCBXSVRIICgg TU9EVUxVUyA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bnVtZXJpY19saXRlcmFsPC9y ZXBsYWNlYWJsZT4sIFJFTQogICAgICA8L3BhcmE+CiAKICAgICAgPHBhcmE+Ci0gICAgICBUaGUg YWNjZXNzIG1ldGhvZCBtdXN0IHN1cHBvcnQgPGxpdGVyYWw+YW1nZXR0dXBsZTwvbGl0ZXJhbD4g KHNlZSA8eHJlZgotICAgICAgbGlua2VuZD0iaW5kZXhhbSIvPik7IGF0IHByZXNlbnQgdGhpcyBt ZWFucyA8YWNyb255bT5HSU48L2Fjcm9ueW0+Ci0gICAgICBjYW5ub3QgYmUgdXNlZC4gIEFsdGhv dWdoIGl0J3MgYWxsb3dlZCwgdGhlcmUgaXMgbGl0dGxlIHBvaW50IGluIHVzaW5nCi0gICAgICBC LXRyZWUgb3IgaGFzaCBpbmRleGVzIHdpdGggYW4gZXhjbHVzaW9uIGNvbnN0cmFpbnQsIGJlY2F1 c2UgdGhpcwotICAgICAgZG9lcyBub3RoaW5nIHRoYXQgYW4gb3JkaW5hcnkgdW5pcXVlIGNvbnN0 cmFpbnQgZG9lc24ndCBkbyBiZXR0ZXIuCi0gICAgICBTbyBpbiBwcmFjdGljZSB0aGUgYWNjZXNz IG1ldGhvZCB3aWxsIGFsd2F5cyBiZSA8YWNyb255bT5HaVNUPC9hY3JvbnltPiBvcgorICAgICAg VGhlIGFjY2VzcyBtZXRob2QgbXVzdCBzdXBwb3J0IGVpdGhlciA8bGl0ZXJhbD5hbWdldGJhdGNo PC9saXRlcmFsPgorICAgICAgb3IgPGxpdGVyYWw+YW1nZXR0dXBsZTwvbGl0ZXJhbD4gKHNlZSA8 eHJlZiBsaW5rZW5kPSJpbmRleGFtIi8+KTsgYXQKKyAgICAgIHByZXNlbnQgdGhpcyBtZWFucyA8 YWNyb255bT5HSU48L2Fjcm9ueW0+IGNhbm5vdCBiZSB1c2VkLiAgQWx0aG91Z2gKKyAgICAgIGl0 J3MgYWxsb3dlZCwgdGhlcmUgaXMgbGl0dGxlIHBvaW50IGluIHVzaW5nIEItdHJlZSBvciBoYXNo IGluZGV4ZXMKKyAgICAgIHdpdGggYW4gZXhjbHVzaW9uIGNvbnN0cmFpbnQsIGJlY2F1c2UgdGhp cyBkb2VzIG5vdGhpbmcgdGhhdCBhbgorICAgICAgb3JkaW5hcnkgdW5pcXVlIGNvbnN0cmFpbnQg ZG9lc24ndCBkbyBiZXR0ZXIuICBTbyBpbiBwcmFjdGljZSB0aGUKKyAgICAgIGFjY2VzcyBtZXRo b2Qgd2lsbCBhbHdheXMgYmUgPGFjcm9ueW0+R2lTVDwvYWNyb255bT4gb3IKICAgICAgIDxhY3Jv bnltPlNQLUdpU1Q8L2Fjcm9ueW0+LgogICAgICA8L3BhcmE+CiAKZGlmZiAtLWdpdCBhL3NyYy90 ZXN0L21vZHVsZXMvZHVtbXlfaW5kZXhfYW0vZHVtbXlfaW5kZXhfYW0uYyBiL3NyYy90ZXN0L21v ZHVsZXMvZHVtbXlfaW5kZXhfYW0vZHVtbXlfaW5kZXhfYW0uYwppbmRleCAzMWY4ZDJiODEuLjNm NWJlNjA4MiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy9kdW1teV9pbmRleF9hbS9kdW1t eV9pbmRleF9hbS5jCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvZHVtbXlfaW5kZXhfYW0vZHVtbXlf aW5kZXhfYW0uYwpAQCAtMzAzLDYgKzMwMyw3IEBAIGRpaGFuZGxlcihQR19GVU5DVElPTl9BUkdT KQogCQkuYW1jb25zaXN0ZW50ZXF1YWxpdHkgPSBmYWxzZSwKIAkJLmFtY29uc2lzdGVudG9yZGVy aW5nID0gZmFsc2UsCiAJCS5hbWNhbmJhY2t3YXJkID0gZmFsc2UsCisJCS5hbWNhbm1hcmtwb3Mg PSBmYWxzZSwKIAkJLmFtY2FudW5pcXVlID0gZmFsc2UsCiAJCS5hbWNhbm11bHRpY29sID0gZmFs c2UsCiAJCS5hbW9wdGlvbmFsa2V5ID0gZmFsc2UsCkBAIC0zMzQsMTAgKzMzNSwxMiBAQCBkaWhh bmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAkJLmFtYmVnaW5zY2FuID0gZGliZWdpbnNjYW4sCiAJ CS5hbXJlc2NhbiA9IGRpcmVzY2FuLAogCQkuYW1nZXR0dXBsZSA9IE5VTEwsCisJCS5hbWdldGJh dGNoID0gTlVMTCwKKwkJLmFtdW5ndWFyZGJhdGNoID0gTlVMTCwKKwkJLmFta2lsbGl0ZW1zYmF0 Y2ggPSBOVUxMLAogCQkuYW1nZXRiaXRtYXAgPSBOVUxMLAogCQkuYW1lbmRzY2FuID0gZGllbmRz Y2FuLAotCQkuYW1tYXJrcG9zID0gTlVMTCwKLQkJLmFtcmVzdHJwb3MgPSBOVUxMLAorCQkuYW1w b3NyZXNldCA9IE5VTEwsCiAJCS5hbWVzdGltYXRlcGFyYWxsZWxzY2FuID0gTlVMTCwKIAkJLmFt aW5pdHBhcmFsbGVsc2NhbiA9IE5VTEwsCiAJCS5hbXBhcmFsbGVscmVzY2FuID0gTlVMTCwKZGlm ZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3Bn aW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggYWE5ZDU5NTkyLi5kODJlZGQwMDkgMTAwNjQ0Ci0t LSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2lu ZGVudC90eXBlZGVmcy5saXN0CkBAIC0yMDksNiArMjA5LDcgQEAgQk9PTAogQk9PTEVBTgogQk9Y CiBCVEFycmF5S2V5SW5mbworQlRCYXRjaERhdGEKIEJUQnVpbGRTdGF0ZQogQlRDYWxsYmFja1N0 YXRlCiBCVEN5Y2xlSWQKQEAgLTIzNiw4ICsyMzcsNiBAQCBCVFNjYW5JbnNlcnREYXRhCiBCVFNj YW5LZXlQcmVwcm9jCiBCVFNjYW5PcGFxdWUKIEJUU2Nhbk9wYXF1ZURhdGEKLUJUU2NhblBvc0Rh dGEKLUJUU2NhblBvc0l0ZW0KIEJUU2hhcmVkCiBCVFNvcnRBcnJheUNvbnRleHQKIEJUU3Bvb2wK QEAgLTI2Niw2ICsyNjUsOSBAQCBCYXNlQmFja3VwQ21kCiBCYXNlQmFja3VwVGFyZ2V0SGFuZGxl CiBCYXNlQmFja3VwVGFyZ2V0VHlwZQogQmF0Y2hNVkNDU3RhdGUKK0JhdGNoTWF0Y2hpbmdJdGVt CitCYXRjaFJpbmdCdWZmZXIKK0JhdGNoUmluZ0l0ZW1Qb3MKIEJlZ2luRGlyZWN0TW9kaWZ5X2Z1 bmN0aW9uCiBCZWdpbkZvcmVpZ25JbnNlcnRfZnVuY3Rpb24KIEJlZ2luRm9yZWlnbk1vZGlmeV9m dW5jdGlvbgpAQCAtMTI2Miw2ICsxMjY0LDcgQEAgSGJhTGluZQogSGVhZGxpbmVKc29uU3RhdGUK IEhlYWRsaW5lUGFyc2VkVGV4dAogSGVhZGxpbmVXb3JkRW50cnkKK0hlYXBCYXRjaERhdGEKIEhl YXBDaGVja0NvbnRleHQKIEhlYXBDaGVja1JlYWRTdHJlYW1EYXRhCiBIZWFwUGFnZUZyZWV6ZQpA QCAtMTM0Miw2ICsxMzQ1LDggQEAgSW5kZXhPcmRlckJ5RGlzdGFuY2UKIEluZGV4UGF0aAogSW5k ZXhSdW50aW1lS2V5SW5mbwogSW5kZXhTY2FuCitJbmRleFNjYW5CYXRjaAorSW5kZXhTY2FuQmF0 Y2hEYXRhCiBJbmRleFNjYW5EZXNjCiBJbmRleFNjYW5EZXNjRGF0YQogSW5kZXhTY2FuSGVhcERh dGEKQEAgLTM1ODcsMjAgKzM1OTIsMjIgQEAgYW1jYW5yZXR1cm5fZnVuY3Rpb24KIGFtY29zdGVz dGltYXRlX2Z1bmN0aW9uCiBhbWVuZHNjYW5fZnVuY3Rpb24KIGFtZXN0aW1hdGVwYXJhbGxlbHNj YW5fZnVuY3Rpb24KK2FtZ2V0YmF0Y2hfZnVuY3Rpb24KIGFtZ2V0Yml0bWFwX2Z1bmN0aW9uCiBh bWdldHRyZWVoZWlnaHRfZnVuY3Rpb24KIGFtZ2V0dHVwbGVfZnVuY3Rpb24KIGFtaW5pdHBhcmFs bGVsc2Nhbl9mdW5jdGlvbgogYW1pbnNlcnRfZnVuY3Rpb24KIGFtaW5zZXJ0Y2xlYW51cF9mdW5j dGlvbgotYW1tYXJrcG9zX2Z1bmN0aW9uCithbWtpbGxpdGVtc2JhdGNoX2Z1bmN0aW9uCiBhbW9w dGlvbnNfZnVuY3Rpb24KIGFtcGFyYWxsZWxyZXNjYW5fZnVuY3Rpb24KK2FtcG9zcmVzZXRfZnVu Y3Rpb24KIGFtcHJvcGVydHlfZnVuY3Rpb24KIGFtcmVzY2FuX2Z1bmN0aW9uCi1hbXJlc3RycG9z X2Z1bmN0aW9uCiBhbXRyYW5zbGF0ZV9jbXB0eXBlX2Z1bmN0aW9uCiBhbXRyYW5zbGF0ZV9zdHJh dGVneV9mdW5jdGlvbgorYW11bmd1YXJkYmF0Y2hfZnVuY3Rpb24KIGFtdmFjdXVtY2xlYW51cF9m dW5jdGlvbgogYW12YWxpZGF0ZV9mdW5jdGlvbgogYXJyYXlfaXRlcgotLSAKMi41My4wCgo= --000000000000d6f56006543b3e3b--