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 1w9ifS-001gGj-0i for pgsql-hackers@arkaria.postgresql.org; Mon, 06 Apr 2026 12:02:58 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w9ifQ-008JSK-2O for pgsql-hackers@arkaria.postgresql.org; Mon, 06 Apr 2026 12:02:57 +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 1w9ifP-008JSC-2z for pgsql-hackers@lists.postgresql.org; Mon, 06 Apr 2026 12:02:56 +0000 Received: from mail-pl1-x635.google.com ([2607:f8b0:4864:20::635]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w9ifN-00000000qce-2sM0 for pgsql-hackers@postgresql.org; Mon, 06 Apr 2026 12:02:55 +0000 Received: by mail-pl1-x635.google.com with SMTP id d9443c01a7336-2b0c8362d93so24031475ad.3 for ; Mon, 06 Apr 2026 05:02:53 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1775476973; cv=none; d=google.com; s=arc-20240605; b=JafGCyNqS2QpRxdbG0DaFCz4+2St2laEAQEfheu/pf7wxM7nJJyXug9+YBC2U9bO2F IVmVqx79c4VaPtEjTVoNyTztRGXBRtomFiqQ2dcvaUH2BnGqZqoL/UjV0RUEGPnvRhFN IQnRTSrwPAKlFkQdM1Kj6Lx1NbkUb3w3GfUrlrl3y/ysYoSrwKGIf423Qfcl/M82Ix4U /rdqovRUq9QnmgQ2/Bbr3Ve+UlqC9CqFDDYf/qNO0g0OJTlJZyJckykkOrEOzaiL8Ixe zwAVEEEHBZ7fejFnn3Fh8BOFj4VrhsiVkkHBwK7zOhd603R0jkxKoOPWXpaXrtZI5HFf gcuQ== 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=9ZTy6FXUmH6E6GwFXJm42yxRCDojpKjvXCUGFN3EogA=; fh=qkOJRPjj28SzjvvJiHwzNi+Jd9rBTgH1mmrfROH0CmM=; b=d6p7Ban38RKQ1m+4P3r3eR9vcDq/CBF8K91bx2e6orFBWlbC3Rv3/bi2ncdFdJ8jYl XRPvOQD9hzzsjLH4qwHfbUIzut/NoYGBsMDQiCecD1Xo2LuLSnX2BRH61vFxR5RMgwLx dJ1HF8AbpLimrRkeh3gsuDUG+wsJe/Wg8EhkemqRX8DnJxhXWJBjxm0N1IHv1oDMQ43Z 4Wm3bD3XszZ2HEkNY/+5xcNBqZQXo1dHfxN/d43JOzrZLMhb5GRQ753I8l3jwZ6EjE7t RwqSvg3Mi3Nm034k8Eds+PV9scNAouOlfeShmo85r245Phc5/S0qhoJFnrZW/mhyCMTF VWJw==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1775476973; x=1776081773; darn=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=9ZTy6FXUmH6E6GwFXJm42yxRCDojpKjvXCUGFN3EogA=; b=l5v9oAz8ZlyCDPm4irbeA9XPtwsBM/PkQOMeuHYM3hX5M+EThWOyEX2OPGahXqv/QT HYs0wWP+AQSobShaa5VJmacemf3nYRbEt7Gkc6aVgbNuMc+5uNwcETiAbCEYf+qoe9dn 0KA4zpO4AUr51clLy/yytg9gdmaG28UoSb5ELIs4YpCSmlUGep/iJZQkeKM+cAoOkQ0u vh3fsXnWM4QVqbEMZaLeTF3NNFmknZe9wSxkGz9UvmjRrU+z18I7ETm8BDPKW3/q+nof 4FQ9fCLqd/y+SkS77X0TUn7SwFuQjERm/9b/IFVymhpp3UzGYPGw5qaw1NgmJyawz51g N/Gg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775476973; x=1776081773; 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=9ZTy6FXUmH6E6GwFXJm42yxRCDojpKjvXCUGFN3EogA=; b=HxAXdqbAJsaKfT1hMS6IKQnKov0QIqMo1/kYnnsbcY3Up+ySkJyUQr/V8zwS4yy9zT 0+qrwPjslj7A2W839Kw47uP74gaRJAeUKzOdtv5zThKtqAXxN68PSdgXg1NmC3++Lp+E C6mftKtaYS69f6ZCyf6CA7E9YPD9pR3lsO3Oibzz8G7AIaCtgWztA4qE27XB5xmB+wlU qdFifM62n9mxA80xrTY2HwUjU5huYMFs49u3pXrY9pq/H8y6xaLzqB4+WRcSAqyUsrJk i6g6rw9zfnzfj6+Ii9pbtuwrJ45PmLX/eEu4IYEhHsL9rl2FOXNUMroCk3jaSzZ9XgIE gmkA== X-Forwarded-Encrypted: i=1; AJvYcCVk6jQjP5LGBkyiZXr/sq55t6Ri6yjzmyzu2Ws6VcTkXzbkkJY+ZHJZr8Xh7eR8hbORi/DV+YbLgnO31mFX@postgresql.org X-Gm-Message-State: AOJu0YypAeKN0YrNLC3OV7VDjBezlMe5N8Y5cvCbwo/AWiTzAo8Rpf/E qEzw514HmRTSsnx04jdMN+Czf0AWKLJO1qDNBn+zWAqE7yTEld18y6UFFalg77swTULlNez4Jav FL1Mikgn7KlCXeG9MaM4UD249NBvjkMUDmQ== X-Gm-Gg: AeBDietB1czfyV5+7ghKLpoZ20teZN6+HMC/vdiPqCUwPEsScrKHThRcAbaGYqLlu4f zoMbvFwZV2lo8NwTtniU3V/4dtcbTFGLnjvzkXV/SK1PJElVeRzauaBs9WlGhmV6UpDXXw+lBCm hVuLiAxWXoXbT/e/ezW1KaEsPpstZECkAs1iOY8x/Uxupyk1DgZird6tVpAollROBUW/DU29Zy+ 4QrtHXQnBzb0yyF+LQQdf7T3/TVctlR0LB4RUZvM2FiBd4KQZMrATPvQ5glihhuFpFmSSFNL2qM METPP25G X-Received: by 2002:a17:902:e845:b0:2ae:54b2:27c7 with SMTP id d9443c01a7336-2b28186dd62mr128738535ad.39.1775476972696; Mon, 06 Apr 2026 05:02:52 -0700 (PDT) MIME-Version: 1.0 References: <68f3771f-91f5-4cb7-b1de-74d9abbf0b96@vondra.me> In-Reply-To: From: Amit Langote Date: Mon, 6 Apr 2026 21:02:35 +0900 X-Gm-Features: AQROBzDEE25g0zwRiYxzhFAc3fxHvrTFi4LzcMK-hBQQwgPGUOF5rCdC9AZ5hcs Message-ID: Subject: Re: Batching in executor To: Junwang Zhao Cc: cca5507 , Daniil Davydov <3danissimo@gmail.com>, PostgreSQL-development , Tomas Vondra Content-Type: multipart/mixed; boundary="00000000000043db7e064ec97207" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000043db7e064ec97207 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Tue, Mar 24, 2026 at 9:59=E2=80=AFAM Amit Langote wrote: > Here is a significantly revised version of the patch series. A lot has > changed since the January submission, so I want to summarize the > design changes before getting into the patches. I think it does > address the points in the two reviews that landed since v5 but maybe a > bunch of points became moot after my rewrite of the relevant portions > (thanks Junwang and ChangAo for the review in any case). > > At this point it might be better to think of this as targeting v20, > except that if there is review bandwidth in the remaining two weeks > before the v19 feature freeze, the rs_vistuples[] change described > below as a standalone improvement to the existing pagemode scan path > could be considered for v19, though that too is an optimistic > scenario. > > It is also worth noting that Andres identified a number of > inefficiencies in the existing scan path in: > > Re: unnecessary executor overheads around seqscans > https://postgr.es/m/xzflwwjtwxin3dxziyblrnygy3gfygo5dsuw6ltcoha73ecmnf%40= nh6nonzta7kw > > that are worth fixing independently of batching. Some of those fixes > may be better pursued first, both because they benefit all scan paths > and because they would make batching's gains more honest. > > Separately, after looking at the previous version, Andres pointed out > offlist two fundamental issues with the patch's design: > > * The heapam implementation (in a version of the patch I didn't post > to the thread) duplicated heap_prepare_pagescan() logic in a separate > batch-specific code path, which is not acceptable as changes should > benefit the existing slot interface too. Code duplication is not good > either from a future maintainability aspect. The v5 version of that > code is not great in that respect either; it instead duplicated > heapggettup_pagemode() to slap batching on it. > > * Allocating executor_batch_rows slots on the executor side to receive > rows from the AM adds significant overhead for slot initialization and > management, and for non-row-organized AMs that do not produce > individual rows at all, those slots would never be meaningfully > populated. > > In any case, he just wasn't a fan of the slot-array approach the > moment I mentioned it. The previous version had two slot arrays, > inslots and outslots, of TTSOpsHeapTuple type (not > TTSOpsBufferHeapTuple because buffer pins were managed by the batch > code, which has its own modularity/correctness issues), populated via > a materialize_all callback. A batch qual evaluator would copy > qualifying tuples into outslots, with an activeslots pointer switching > between the two depending on whether batch qual evaluation was used. > > The new design addresses both issues and differs from the previous > version in several other ways: > > * Single slot instead of slot arrays: there is a single > TupleTableSlot, reusing the scan node's ss_ScanTupleSlot whose type > was already determined by the AM via table_slot_callbacks(). The slot > is re-pointed to each HeapTuple in the current buffer page via a new > repoint_slot AM callback, with no materialization or copying. Tuples > are returned one by one from the executor's perspective, but the AM > serves them in page-sized batches from pre-built HeapTupleData > descriptors in rs_vistuples[], avoiding repeated descent into heapam > per tuple. This is heapam's implementation of the batch interface; > there is no intention to force other AMs into the same row-oriented > model. > > * Batch qual evaluator not included: with the single-slot model, > quals are evaluated per tuple via the existing ExecQual path after > each repoint_slot call. A natural next step would be a new opcode > (EEOP) that calls repoint_slot() internally within expression > evaluation, allowing ExecQual to advance through multiple tuples from > the same batch without returning to the scan node each time, with qual > results accumulated in a bitmask in ExprState. The details of that > will be worked out in a follow-on series. > > * heapgettup_pagemode_batch() gone: patch 0001 (described below) makes > HeapScanDesc store full HeapTupleData entries in rs_vistuples[], which > allows heap_getnextbatch() to simply advance a slice pointer into that > array without any additional copying or re-entering heap code, making > a separate batch-specific scan function unnecessary. > > * TupleBatch renamed to RowBatch: "row batch" is more natural > terminology for this concept and also consistent with how similar > abstractions are named in columnar and OLAP systems. > > * AM callbacks now take RowBatch directly: previously > heap_getnextbatch() returned a void pointer that the executor would > store into RowBatch.am_payload, because only the executor knew the > internals of RowBatch. Now the AM receives RowBatch directly as a > parameter and can populate it without the executor acting as an > intermediary. This is also why RowBatch is introduced in its own > patch ahead of the AM API addition, so the struct definition is > available to both sides. > > Patch 0001 changes rs_vistuples[] to store full HeapTupleData entries > instead of OffsetNumbers, as a standalone improvement to the existing > pagemode scan path. Measured on a pg_prewarm'd (also vaccum freeze'd > in the all-visible case) table with 1M/5M/10M rows: > > query all-visible not-all-visible > count(*) -0.2% to +0.9% -0.4% to +0.5% > count(*) WHERE id % 10 =3D 0 -1.1% to +3.4% +0.2% to +1.5% > SELECT * LIMIT 1 OFFSET N -2.2% to -0.6% -0.9% to +6.6% > SELECT * WHERE id%10=3D0 LIMIT -0.8% to +3.9% +0.9% to +9.6% > > No significant regression on either page type. The structural > improvement is most visible on not-all-visible pages where > HeapTupleSatisfiesMVCCBatch() already reads every tuple header during > visibility checks, so persisting the result into rs_vistuples[] > eliminates the downstream re-read (in heapgettupe_pagemode()) with no > measurable overhead. That said, these numbers are somewhat noisy on > my machine. Results on other machines would be welcome. > > Patches 0002-0005 add the RowBatch infrastructure, the batch AM API > and heapam implementation including seqscan variants that use the new > scan_getnextbatch() API, and EXPLAIN (ANALYZE, BATCHES) support, > respectively. With batching enabled (executor_batch_rows=3D300, > ~MaxHeapTuplesPerPage): > > query all-visible not-all-visible > count(*) +11 to +15% +9 to +13% > count(*) WHERE id % 10 =3D 0 +6 to +11% +10 to +14% > SELECT * LIMIT 1 OFFSET N +16 to +19% +16 to +22% > SELECT * WHERE id%10=3D0 LIMIT +8 to +10% +8 to +13% > > With executor_batch_rows=3D0, results are within noise of master across > all query types and sizes, confirming no regression from the > infrastructure changes themselves. The not-all-visible results tend > to show slightly higher gains than the all-visible case. This is > likely because the existing heapam code is more optimized for the > all-visible path, so the not-all-visible path, which goes through > HeapTupleSatisfiesMVCCBatch() for per-tuple visibility checks, has > more headroom that batching can exploit. > > Setting aside the current series for a moment, there are some broader > design questions worth raising while we have attention on this area. > Some of these echo points Tomas raised in his first reply on this > thread, and I am reiterating them deliberately since I have not > managed to fully address them on my own or I simply didn't need to for > the TAM-to-scan-node batching and think they would benefit from wider > input rather than just my own iteration. > > We should also start thinking about other ways the executor can > consume batch rows, not always assuming they are presented as > HeapTupleData. For instance, an AM could expose decoded column arrays > directly to operators that can consume them, bypassing slot-based > deform entirely, or a columnar AM could implement scan_getnextbatch by > decoding column strips directly into the batch without going through > per-tuple HeapTupleData at all. Feedback on whether the current > RowBatch design and the choices made in the scan_getnextbatch and > RowBatchOps API make that sort of thing harder than it needs to be > would be appreciated. For example, heapam's implementation of > scan_getnextbatch uses a single TTSOpsBufferHeapTuple slot re-pointed > to HeapTupleData entries one at a time via repoint_slot in > RowBatchHeapOps. That works for heapam but a columnar AM could > implement scan_getnextbatch to decode column strips directly into > arrays in the batch, with no per-row repoint step needed at all. Any > adjustments that would make RowBatch more AM-agnostic are worth > discussing now before the design hardens. > > There are also broader open questions about how far the batch model > can extend beyond the scan node. Qual pushdown into the AM has been > discussed in nearby threads and would be one way to allow expression > evaluation to happen before data reaches the executor proper, though > that is a separate effort. For the purposes of this series, expression > evaluation still happens in the executor after scan_getnextbatch > returns. If the scan node does not project, the buffer heap slot is > passed directly to the parent node, which calls slot callbacks to > deform as needed. But once a node above projects, aggregates, or > joins, the notion of a page-sized batch from a single AM loses its > meaning and virtual slots take over. Whether RowBatch is usable or > meaningful beyond the scan/TAM boundary in any form, and whether the > core executor will ever have non-HeapTupleData batch consumption paths > or leave that entirely to extensions, are open questions worth > discussing. > > For RowBatch to eventually play the role that TupleTableSlot plays for > row-at-a-time execution, something inside it would need to serve as > the common currency for batch data, analogous to TupleTableSlot's > datum/isnull arrays. Column arrays are the obvious direction, but even > that leaves open the question of representation. PostgreSQL's Datum is > a pointer-sized abstraction that boxes everything, whereas vectorized > systems use typed packed arrays of native types with validity > bitmasks, which is a significant part of why tight vectorized loops > are fast there. Whether column arrays of Datum would be good enough, > or whether going further toward typed packed arrays would be necessary > to get meaningful vectorization, is a deeper design question that this > series deliberately does not try to answer. > > Even though the focus is on getting batching working at the scan/TAM > boundary first, thoughts on any of these points would be welcome. Rebased. --=20 Thanks, Amit Langote --00000000000043db7e064ec97207 Content-Type: application/octet-stream; name="v7-0001-heapam-store-full-HeapTupleData-in-rs_vistuples-f.patch" Content-Disposition: attachment; filename="v7-0001-heapam-store-full-HeapTupleData-in-rs_vistuples-f.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnn54uaz4 RnJvbSAxNTU3MjM2Njg2MTQwYzI5YmU5OGRjNDYxZTk3ZjhkZjRhMGYxYTczIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFRodSwgMTIgTWFyIDIwMjYgMDk6MTg6MDQgKzA5MDAKU3ViamVjdDogW1BBVENIIHY3 IDEvNV0gaGVhcGFtOiBzdG9yZSBmdWxsIEhlYXBUdXBsZURhdGEgaW4gcnNfdmlzdHVwbGVzW10g Zm9yCiBwYWdlbW9kZSBzY2FucwoKcGFnZV9jb2xsZWN0X3R1cGxlcygpIGJ1aWxkcyBmdWxsIEhl YXBUdXBsZURhdGEgaGVhZGVycyBmb3IgZXZlcnkKdmlzaWJsZSB0dXBsZSBvbiBhIHBhZ2UgLS0g dF9kYXRhLCB0X2xlbiwgdF9zZWxmLCB0X3RhYmxlT2lkIC0tIGJ1dApwcmV2aW91c2x5IGRpc2Nh cmRlZCB0aGVtIGltbWVkaWF0ZWx5IGFmdGVyIHdyaXRpbmcganVzdCB0aGUgT2Zmc2V0TnVtYmVy Cm9mIGVhY2ggc3Vydml2b3IgaW50byByc192aXN0dXBsZXNbXS4gIGhlYXBnZXR0dXBfcGFnZW1v ZGUoKSB0aGVuCnJlLWRlcml2ZWQgdGhvc2Ugc2FtZSB2YWx1ZXMgb24gZXZlcnkgY2FsbCBmcm9t IHRoZSBzYXZlZCBPZmZzZXROdW1iZXIKdmlhIFBhZ2VHZXRJdGVtSWQoKSBhbmQgUGFnZUdldEl0 ZW0oKS4KCkNoYW5nZSByc192aXN0dXBsZXNbXSBlbGVtZW50IHR5cGUgZnJvbSBPZmZzZXROdW1i ZXIgdG8gSGVhcFR1cGxlRGF0YQphbmQgcG9wdWxhdGUgaXQgaW5zaWRlIHBhZ2VfY29sbGVjdF90 dXBsZXMoKSB3aGlsZSBscHAsIGxpbmVvZmYsIHBhZ2UsCmJsb2NrLCBhbmQgcmVsaWQgYXJlIGFs cmVhZHkgaW4gc2NvcGUsIHNvIG5vIGFkZGl0aW9uYWwgcGFnZSByZWFkcyBhcmUKbmVlZGVkLiAg Rm9yIHRoZSBhbGxfdmlzaWJsZSBwYXRoICh0aGUgY29tbW9uIGNhc2Ugb24gYSBwcmltYXJ5IG5v dAp1bmRlciBhY3RpdmUgbW9kaWZpY2F0aW9uKSB0aGUgd3JpdGUgcGlnZ3ktYmFja3Mgb24gdGhl IGV4aXN0aW5nCnBlci1saW5lb2ZmIGxvb3AuICBGb3IgdGhlICFhbGxfdmlzaWJsZSBwYXRoLCBI ZWFwVHVwbGVEYXRhIGVudHJpZXMgYXJlCndyaXR0ZW4gZHVyaW5nIHRoZSB2aXNpYmlsaXR5IGxv b3AgYW5kIGNvbXBhY3RlZCB0byB2aXNpYmxlIHN1cnZpdm9ycwphZnRlcndhcmRzIHVzaW5nIGJh dGNobXZjYy52aXNpYmxlW10sIGF2b2lkaW5nIGEgcmV0dXJuIHRvIHBkX2xpbnBbXSB2aWEKUGFn ZUdldEl0ZW1JZCgpLgoKV2l0aCByc192aXN0dXBsZXNbXSBwb3B1bGF0ZWQsIGhlYXBnZXR0dXBf cGFnZW1vZGUoKSByZXBsYWNlcyB0aGUKcGVyLXR1cGxlIFBhZ2VHZXRJdGVtSWQvUGFnZUdldEl0 ZW0gY2FsbHMgd2l0aCBhIHNpbmdsZSBzdHJ1Y3QgY29weToKCiAgICAqdHVwbGUgPSBzY2FuLT5y c192aXN0dXBsZXNbbGluZWluZGV4XTsKClRoZSBzdGFjay1sb2NhbCBIZWFwVHVwbGVEYXRhIGFy cmF5IGluIEJhdGNoTVZDQ1N0YXRlIGlzIGVsaW1pbmF0ZWQgYnkKcGFzc2luZyByc192aXN0dXBs ZXNbXSBkaXJlY3RseSB0byBIZWFwVHVwbGVTYXRpc2ZpZXNNVkNDQmF0Y2goKSwKc2F2aW5nIE1h eEhlYXBUdXBsZXNQZXJQYWdlICogMjQgYnl0ZXMgb2Ygc3RhY2sgcGVyIHBhZ2VfY29sbGVjdF90 dXBsZXMoKQpjYWxsLiAgSGVhcFR1cGxlU2F0aXNmaWVzTVZDQ0JhdGNoKCkgbG9zZXMgaXRzIHZp c3R1cGxlc19kZW5zZSBwYXJhbWV0ZXIKc2luY2UgY29tcGFjdGlvbiBpcyBub3cgaGFuZGxlZCBi eSB0aGUgY2FsbGVyLgoKdF90YWJsZU9pZCBpcyBwcmUtaW5pdGlhbGl6ZWQgZm9yIGFsbCByc192 aXN0dXBsZXNbXSBlbnRyaWVzIGF0IHNjYW4Kc3RhcnQgaW4gaGVhcF9iZWdpbnNjYW4oKSwgZWxp bWluYXRpbmcgYSBzdG9yZSBwZXIgdmlzaWJsZSB0dXBsZSBmcm9tIHRoZQpmaWxsIGxvb3AuICBU aGUgcmF3IEl0ZW1JZCB3b3JkIGlzIHJlYWQgb25jZSBwZXIgdHVwbGUgd2l0aCBscF9vZmYgYW5k CmxwX2xlbiBleHRyYWN0ZWQgdmlhIG1hc2sgYW5kIHNoaWZ0IHJhdGhlciB0aGFuIGNhbGxpbmcg SXRlbUlkR2V0T2Zmc2V0KCkKYW5kIEl0ZW1JZEdldExlbmd0aCgpIHNlcGFyYXRlbHksIGF2b2lk aW5nIGEgcG90ZW50aWFsIHNlY29uZCBsb2FkIGZyb20KdGhlIHNhbWUgYWRkcmVzcyBpbiB0aGUg aW5uZXIgbG9vcC4KCkhhdmluZyBwcmUtYnVpbHQgSGVhcFR1cGxlRGF0YSBoZWFkZXJzIGF2YWls YWJsZSBhdCB0aGUgc2NhbiBkZXNjcmlwdG9yCmxldmVsIGFsc28gbGF5cyBncm91bmR3b3JrIGZv ciBhIGJhdGNoZWQgdHVwbGUgaW50ZXJmYWNlLCB3aGVyZSBhbiBBTQpjYW4gc2VydmUgbXVsdGlw bGUgdHVwbGVzIHBlciBjYWxsIHdpdGhvdXQgcmVwZWF0aW5nIHRoZSBsaW5lIHBvaW50ZXIKdHJh dmVyc2FsLgoKU3VnZ2VzdGVkLWJ5OiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+ Ci0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtLmMgICAgICAgICAgICB8IDczICsr KysrKysrKysrKy0tLS0tLS0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRs ZXIuYyAgICB8IDE5ICsrLS0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX3Zpc2li aWxpdHkuYyB8IDIxICsrKy0tLQogc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oICAgICAgICAg ICAgICAgICB8ICA1ICstCiA0IGZpbGVzIGNoYW5nZWQsIDU4IGluc2VydGlvbnMoKyksIDYwIGRl bGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5j IGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtLmMKaW5kZXggZTA2Y2UyZGIyY2YuLmI3 MGM3NWM4Mjg4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW0uYwor KysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW0uYwpAQCAtNTI0LDcgKzUyNCw2IEBA IHBhZ2VfY29sbGVjdF90dXBsZXMoSGVhcFNjYW5EZXNjIHNjYW4sIFNuYXBzaG90IHNuYXBzaG90 LAogCQkJCQlCbG9ja051bWJlciBibG9jaywgaW50IGxpbmVzLAogCQkJCQlib29sIGFsbF92aXNp YmxlLCBib29sIGNoZWNrX3NlcmlhbGl6YWJsZSkKIHsKLQlPaWQJCQlyZWxpZCA9IFJlbGF0aW9u R2V0UmVsaWQoc2Nhbi0+cnNfYmFzZS5yc19yZCk7CiAJaW50CQkJbnR1cCA9IDA7CiAJaW50CQkJ bnZpcyA9IDA7CiAJQmF0Y2hNVkNDU3RhdGUgYmF0Y2htdmNjOwpAQCAtNTM2LDcgKzUzNSw3IEBA IHBhZ2VfY29sbGVjdF90dXBsZXMoSGVhcFNjYW5EZXNjIHNjYW4sIFNuYXBzaG90IHNuYXBzaG90 LAogCWZvciAoT2Zmc2V0TnVtYmVyIGxpbmVvZmYgPSBGaXJzdE9mZnNldE51bWJlcjsgbGluZW9m ZiA8PSBsaW5lczsgbGluZW9mZisrKQogCXsKIAkJSXRlbUlkCQlscHAgPSBQYWdlR2V0SXRlbUlk KHBhZ2UsIGxpbmVvZmYpOwotCQlIZWFwVHVwbGUJdHVwOworCQlIZWFwVHVwbGUgICB0dXAgPSAm c2Nhbi0+cnNfdmlzdHVwbGVzW250dXBdOwogCiAJCWlmICh1bmxpa2VseSghSXRlbUlkSXNOb3Jt YWwobHBwKSkpCiAJCQljb250aW51ZTsKQEAgLTU0OSwyNSArNTQ4LDMzIEBAIHBhZ2VfY29sbGVj dF90dXBsZXMoSGVhcFNjYW5EZXNjIHNjYW4sIFNuYXBzaG90IHNuYXBzaG90LAogCQkgKi8KIAkJ aWYgKCFhbGxfdmlzaWJsZSB8fCBjaGVja19zZXJpYWxpemFibGUpCiAJCXsKLQkJCXR1cCA9ICZi YXRjaG12Y2MudHVwbGVzW250dXBdOworCQkJdWludDMyICBscF92YWwgPSAqKHVpbnQzMiAqKSBs cHA7CiAKLQkJCXR1cC0+dF9kYXRhID0gKEhlYXBUdXBsZUhlYWRlcikgUGFnZUdldEl0ZW0ocGFn ZSwgbHBwKTsKLQkJCXR1cC0+dF9sZW4gPSBJdGVtSWRHZXRMZW5ndGgobHBwKTsKLQkJCXR1cC0+ dF90YWJsZU9pZCA9IHJlbGlkOworCQkJdHVwLT50X2RhdGEgPSAoSGVhcFR1cGxlSGVhZGVyKSAo KGNoYXIgKikgcGFnZSArIChscF92YWwgJiAweDdmZmYpKTsKKwkJCXR1cC0+dF9sZW4gID0gbHBf dmFsID4+IDE3OworCQkJQXNzZXJ0KHR1cC0+dF90YWJsZU9pZCA9PSBSZWxhdGlvbkdldFJlbGlk KHNjYW4tPnJzX2Jhc2UucnNfcmQpKTsKIAkJCUl0ZW1Qb2ludGVyU2V0KCYodHVwLT50X3NlbGYp LCBibG9jaywgbGluZW9mZik7CiAJCX0KIAotCQkvKgotCQkgKiBJZiB0aGUgcGFnZSBpcyBhbGwg dmlzaWJsZSwgdGhlc2UgZmllbGRzIG90aGVyd2lzZSB3b24ndCBiZQotCQkgKiBwb3B1bGF0ZWQg aW4gbG9vcCBiZWxvdy4KLQkJICovCiAJCWlmIChhbGxfdmlzaWJsZSkKIAkJewogCQkJaWYgKGNo ZWNrX3NlcmlhbGl6YWJsZSkKLQkJCXsKIAkJCQliYXRjaG12Y2MudmlzaWJsZVtudHVwXSA9IHRy dWU7CisKKwkJCS8qCisJCQkgKiBJbiB0aGUgYWxsX3Zpc2libGUgJiYgIWNoZWNrX3NlcmlhbGl6 YWJsZSBwYXRoLCB0aGUgYmxvY2sKKwkJCSAqIGFib3ZlIHdhcyBza2lwcGVkLCBzbyB0dXAncyBm aWVsZHMgaGF2ZSBub3QgYmVlbiBzZXQgeWV0LgorCQkJICogRmlsbCB0aGVtIGhlcmUgd2hpbGUg bHBwIGlzIHN0aWxsIGluIGhhbmQuCisJCQkgKi8KKwkJCWlmICghY2hlY2tfc2VyaWFsaXphYmxl KQorCQkJeworCQkJCXVpbnQzMiAgbHBfdmFsID0gKih1aW50MzIgKikgbHBwOworCisJCQkJdHVw LT50X2RhdGEgPSAoSGVhcFR1cGxlSGVhZGVyKSAoKGNoYXIgKikgcGFnZSArIChscF92YWwgJiAw eDdmZmYpKTsKKwkJCQl0dXAtPnRfbGVuICA9IGxwX3ZhbCA+PiAxNzsKKwkJCQlBc3NlcnQodHVw LT50X3RhYmxlT2lkID09IFJlbGF0aW9uR2V0UmVsaWQoc2Nhbi0+cnNfYmFzZS5yc19yZCkpOwor CQkJCUl0ZW1Qb2ludGVyU2V0KCZ0dXAtPnRfc2VsZiwgYmxvY2ssIGxpbmVvZmYpOwogCQkJfQot CQkJc2Nhbi0+cnNfdmlzdHVwbGVzW250dXBdID0gbGluZW9mZjsKIAkJfQogCiAJCW50dXArKzsK QEAgLTU5OCwxMSArNjA1LDI0IEBAIHBhZ2VfY29sbGVjdF90dXBsZXMoSGVhcFNjYW5EZXNjIHNj YW4sIFNuYXBzaG90IHNuYXBzaG90LAogCQl7CiAJCQlIZWFwQ2hlY2tGb3JTZXJpYWxpemFibGVD b25mbGljdE91dChiYXRjaG12Y2MudmlzaWJsZVtpXSwKIAkJCQkJCQkJCQkJCXNjYW4tPnJzX2Jh c2UucnNfcmQsCi0JCQkJCQkJCQkJCQkmYmF0Y2htdmNjLnR1cGxlc1tpXSwKKwkJCQkJCQkJCQkJ CSZzY2FuLT5yc192aXN0dXBsZXNbaV0sCiAJCQkJCQkJCQkJCQlidWZmZXIsIHNuYXBzaG90KTsK IAkJfQogCX0KIAorCisJLyogTm93IGNvbXBhY3QgcnNfdmlzdHVwbGVzW10gdG8gdmlzaWJsZSBz dXJ2aXZvcnMgb25seSAqLworCWlmICghYWxsX3Zpc2libGUpCisJeworCQlpbnQgZHN0ID0gMDsK KwkJZm9yIChpbnQgaSA9IDA7IGkgPCBudHVwOyBpKyspCisJCXsKKwkJCWlmIChiYXRjaG12Y2Mu dmlzaWJsZVtpXSkKKwkJCQlzY2FuLT5yc192aXN0dXBsZXNbZHN0KytdID0gc2Nhbi0+cnNfdmlz dHVwbGVzW2ldOworCQl9CisJCUFzc2VydChkc3QgPT0gbnZpcyk7CisJfQorCiAJcmV0dXJuIG52 aXM7CiB9CiAKQEAgLTEwNzQsMTQgKzEwOTQsMTMgQEAgaGVhcGdldHR1cF9wYWdlbW9kZShIZWFw U2NhbkRlc2Mgc2NhbiwKIAkJCQkJU2NhbktleSBrZXkpCiB7CiAJSGVhcFR1cGxlCXR1cGxlID0g JihzY2FuLT5yc19jdHVwKTsKLQlQYWdlCQlwYWdlOwogCXVpbnQzMgkJbGluZWluZGV4OwogCXVp bnQzMgkJbGluZXNsZWZ0OwogCiAJaWYgKGxpa2VseShzY2FuLT5yc19pbml0ZWQpKQogCXsKIAkJ LyogY29udGludWUgZnJvbSBwcmV2aW91c2x5IHJldHVybmVkIHBhZ2UvdHVwbGUgKi8KLQkJcGFn ZSA9IEJ1ZmZlckdldFBhZ2Uoc2Nhbi0+cnNfY2J1Zik7CisJCUFzc2VydChCdWZmZXJJc1ZhbGlk KHNjYW4tPnJzX2NidWYpKTsKIAogCQlsaW5laW5kZXggPSBzY2FuLT5yc19jaW5kZXggKyBkaXI7 CiAJCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCkBAIC0xMTA5LDI5ICsxMTI4LDIx IEBAIGhlYXBnZXR0dXBfcGFnZW1vZGUoSGVhcFNjYW5EZXNjIHNjYW4sCiAKIAkJLyogcHJ1bmUg dGhlIHBhZ2UgYW5kIGRldGVybWluZSB2aXNpYmxlIHR1cGxlIG9mZnNldHMgKi8KIAkJaGVhcF9w cmVwYXJlX3BhZ2VzY2FuKChUYWJsZVNjYW5EZXNjKSBzY2FuKTsKLQkJcGFnZSA9IEJ1ZmZlckdl dFBhZ2Uoc2Nhbi0+cnNfY2J1Zik7CiAJCWxpbmVzbGVmdCA9IHNjYW4tPnJzX250dXBsZXM7CiAJ CWxpbmVpbmRleCA9IFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSA/IDAgOiBsaW5lc2xlZnQg LSAxOwogCi0JCS8qIGJsb2NrIGlzIHRoZSBzYW1lIGZvciBhbGwgdHVwbGVzLCBzZXQgaXQgb25j ZSBvdXRzaWRlIHRoZSBsb29wICovCi0JCUl0ZW1Qb2ludGVyU2V0QmxvY2tOdW1iZXIoJnR1cGxl LT50X3NlbGYsIHNjYW4tPnJzX2NibG9jayk7Ci0KIAkJLyogbGluZWluZGV4IG5vdyByZWZlcmVu Y2VzIHRoZSBuZXh0IG9yIHByZXZpb3VzIHZpc2libGUgdGlkICovCiBjb250aW51ZV9wYWdlOgog CiAJCWZvciAoOyBsaW5lc2xlZnQgPiAwOyBsaW5lc2xlZnQtLSwgbGluZWluZGV4ICs9IGRpcikK IAkJewotCQkJSXRlbUlkCQlscHA7Ci0JCQlPZmZzZXROdW1iZXIgbGluZW9mZjsKLQotCQkJQXNz ZXJ0KGxpbmVpbmRleCA8IHNjYW4tPnJzX250dXBsZXMpOwotCQkJbGluZW9mZiA9IHNjYW4tPnJz X3Zpc3R1cGxlc1tsaW5laW5kZXhdOwotCQkJbHBwID0gUGFnZUdldEl0ZW1JZChwYWdlLCBsaW5l b2ZmKTsKLQkJCUFzc2VydChJdGVtSWRJc05vcm1hbChscHApKTsKLQotCQkJdHVwbGUtPnRfZGF0 YSA9IChIZWFwVHVwbGVIZWFkZXIpIFBhZ2VHZXRJdGVtKHBhZ2UsIGxwcCk7Ci0JCQl0dXBsZS0+ dF9sZW4gPSBJdGVtSWRHZXRMZW5ndGgobHBwKTsKLQkJCUl0ZW1Qb2ludGVyU2V0T2Zmc2V0TnVt YmVyKCZ0dXBsZS0+dF9zZWxmLCBsaW5lb2ZmKTsKKwkJCS8qCisJCQkgKiBIZWFkZXJzIHdlcmUg cHJlLWJ1aWx0IGJ5IHBhZ2VfY29sbGVjdF90dXBsZXMoKSBpbnRvCisJCQkgKiByc192aXN0dXBs ZXNbXS4gIENvcHkgdGhlIGVudHJ5OyB0X2RhdGEgc3RpbGwgcG9pbnRzIGludG8gdGhlCisJCQkg KiBwaW5uZWQgcGFnZSwgd2hpY2ggaXMgc2FmZSBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSBjdXJy ZW50IHBhZ2UKKwkJCSAqIHNjYW4uCisJCQkgKi8KKwkJCSp0dXBsZSA9IHNjYW4tPnJzX3Zpc3R1 cGxlc1tsaW5laW5kZXhdOwogCiAJCQkvKiBza2lwIGFueSB0dXBsZXMgdGhhdCBkb24ndCBtYXRj aCB0aGUgc2NhbiBrZXkgKi8KIAkJCWlmIChrZXkgIT0gTlVMTCAmJgpAQCAtMTI0NSw2ICsxMjU2 LDggQEAgaGVhcF9iZWdpbnNjYW4oUmVsYXRpb24gcmVsYXRpb24sIFNuYXBzaG90IHNuYXBzaG90 LAogCiAJLyogd2Ugb25seSBuZWVkIHRvIHNldCB0aGlzIHVwIG9uY2UgKi8KIAlzY2FuLT5yc19j dHVwLnRfdGFibGVPaWQgPSBSZWxhdGlvbkdldFJlbGlkKHJlbGF0aW9uKTsKKwlmb3IgKGludCBp ID0gMDsgaSA8IE1heEhlYXBUdXBsZXNQZXJQYWdlOyBpKyspCisJCXNjYW4tPnJzX3Zpc3R1cGxl c1tpXS50X3RhYmxlT2lkID0gUmVsYXRpb25HZXRSZWxpZChyZWxhdGlvbik7CiAKIAkvKgogCSAq IEFsbG9jYXRlIG1lbW9yeSB0byBrZWVwIHRyYWNrIG9mIHBhZ2UgYWxsb2NhdGlvbiBmb3IgcGFy YWxsZWwgd29ya2VycwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFt X2hhbmRsZXIuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKaW5k ZXggMDdmMDcxODhkNDYuLjg4YWRkMTI5Njc0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nl c3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hl YXBhbV9oYW5kbGVyLmMKQEAgLTIwNTAsOSArMjA1MCw2IEBAIGhlYXBhbV9zY2FuX2JpdG1hcF9u ZXh0X3R1cGxlKFRhYmxlU2NhbkRlc2Mgc2NhbiwKIHsKIAlCaXRtYXBIZWFwU2NhbkRlc2MgYnNj YW4gPSAoQml0bWFwSGVhcFNjYW5EZXNjKSBzY2FuOwogCUhlYXBTY2FuRGVzYyBoc2NhbiA9IChI ZWFwU2NhbkRlc2MpIGJzY2FuOwotCU9mZnNldE51bWJlciB0YXJnb2Zmc2V0OwotCVBhZ2UJCXBh Z2U7Ci0JSXRlbUlkCQlscDsKIAogCS8qCiAJICogT3V0IG9mIHJhbmdlPyAgSWYgc28sIG5vdGhp bmcgbW9yZSB0byBsb29rIGF0IG9uIHRoaXMgcGFnZQpAQCAtMjA2NywxNSArMjA2NCw3IEBAIGhl YXBhbV9zY2FuX2JpdG1hcF9uZXh0X3R1cGxlKFRhYmxlU2NhbkRlc2Mgc2NhbiwKIAkJCXJldHVy biBmYWxzZTsKIAl9CiAKLQl0YXJnb2Zmc2V0ID0gaHNjYW4tPnJzX3Zpc3R1cGxlc1toc2Nhbi0+ cnNfY2luZGV4XTsKLQlwYWdlID0gQnVmZmVyR2V0UGFnZShoc2Nhbi0+cnNfY2J1Zik7Ci0JbHAg PSBQYWdlR2V0SXRlbUlkKHBhZ2UsIHRhcmdvZmZzZXQpOwotCUFzc2VydChJdGVtSWRJc05vcm1h bChscCkpOwotCi0JaHNjYW4tPnJzX2N0dXAudF9kYXRhID0gKEhlYXBUdXBsZUhlYWRlcikgUGFn ZUdldEl0ZW0ocGFnZSwgbHApOwotCWhzY2FuLT5yc19jdHVwLnRfbGVuID0gSXRlbUlkR2V0TGVu Z3RoKGxwKTsKLQloc2Nhbi0+cnNfY3R1cC50X3RhYmxlT2lkID0gc2Nhbi0+cnNfcmQtPnJkX2lk OwotCUl0ZW1Qb2ludGVyU2V0KCZoc2Nhbi0+cnNfY3R1cC50X3NlbGYsIGhzY2FuLT5yc19jYmxv Y2ssIHRhcmdvZmZzZXQpOworCWhzY2FuLT5yc19jdHVwID0gaHNjYW4tPnJzX3Zpc3R1cGxlc1to c2Nhbi0+cnNfY2luZGV4XTsKIAogCXBnc3RhdF9jb3VudF9oZWFwX2ZldGNoKHNjYW4tPnJzX3Jk KTsKIApAQCAtMjM1Myw3ICsyMzQyLDcgQEAgU2FtcGxlSGVhcFR1cGxlVmlzaWJsZShUYWJsZVNj YW5EZXNjIHNjYW4sIEJ1ZmZlciBidWZmZXIsCiAJCXdoaWxlIChzdGFydCA8IGVuZCkKIAkJewog CQkJdWludDMyCQltaWQgPSBzdGFydCArIChlbmQgLSBzdGFydCkgLyAyOwotCQkJT2Zmc2V0TnVt YmVyIGN1cm9mZnNldCA9IGhzY2FuLT5yc192aXN0dXBsZXNbbWlkXTsKKwkJCU9mZnNldE51bWJl ciBjdXJvZmZzZXQgPSBoc2Nhbi0+cnNfdmlzdHVwbGVzW21pZF0udF9zZWxmLmlwX3Bvc2lkOwog CiAJCQlpZiAodHVwb2Zmc2V0ID09IGN1cm9mZnNldCkKIAkJCQlyZXR1cm4gdHJ1ZTsKQEAgLTI0 NzMsNyArMjQ2Miw3IEBAIEJpdG1hcEhlYXBTY2FuTmV4dEJsb2NrKFRhYmxlU2NhbkRlc2Mgc2Nh biwKIAkJCUl0ZW1Qb2ludGVyU2V0KCZ0aWQsIGJsb2NrLCBvZmZudW0pOwogCQkJaWYgKGhlYXBf aG90X3NlYXJjaF9idWZmZXIoJnRpZCwgc2Nhbi0+cnNfcmQsIGJ1ZmZlciwgc25hcHNob3QsCiAJ CQkJCQkJCQkgICAmaGVhcFR1cGxlLCBOVUxMLCB0cnVlKSkKLQkJCQloc2Nhbi0+cnNfdmlzdHVw bGVzW250dXArK10gPSBJdGVtUG9pbnRlckdldE9mZnNldE51bWJlcigmdGlkKTsKKwkJCQloc2Nh bi0+cnNfdmlzdHVwbGVzW250dXArK10gPSBoZWFwVHVwbGU7CiAJCX0KIAl9CiAJZWxzZQpAQCAt MjUwMiw3ICsyNDkxLDcgQEAgQml0bWFwSGVhcFNjYW5OZXh0QmxvY2soVGFibGVTY2FuRGVzYyBz Y2FuLAogCQkJdmFsaWQgPSBIZWFwVHVwbGVTYXRpc2ZpZXNWaXNpYmlsaXR5KCZsb2N0dXAsIHNu YXBzaG90LCBidWZmZXIpOwogCQkJaWYgKHZhbGlkKQogCQkJewotCQkJCWhzY2FuLT5yc192aXN0 dXBsZXNbbnR1cCsrXSA9IG9mZm51bTsKKwkJCQloc2Nhbi0+cnNfdmlzdHVwbGVzW250dXArK10g PSBsb2N0dXA7CiAJCQkJUHJlZGljYXRlTG9ja1RJRChzY2FuLT5yc19yZCwgJmxvY3R1cC50X3Nl bGYsIHNuYXBzaG90LAogCQkJCQkJCQkgSGVhcFR1cGxlSGVhZGVyR2V0WG1pbihsb2N0dXAudF9k YXRhKSk7CiAJCQl9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1f dmlzaWJpbGl0eS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX3Zpc2liaWxpdHku YwppbmRleCAzYTZhMWU1YTA4NC4uNzE2MmM4NDgwOTcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2FjY2Vzcy9oZWFwL2hlYXBhbV92aXNpYmlsaXR5LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L2hlYXAvaGVhcGFtX3Zpc2liaWxpdHkuYwpAQCAtMTY3MSwxNiArMTY3MSwxNiBAQCBIZWFwVHVw bGVTYXRpc2ZpZXNIaXN0b3JpY01WQ0MoSGVhcFR1cGxlIGh0dXAsIFNuYXBzaG90IHNuYXBzaG90 LAogfQogCiAvKgotICogUGVyZm9ybSBIZWFwdHVwbGVTYXRpc2ZpZXNNVkNDKCkgb24gZWFjaCBw YXNzZWQgaW4gdHVwbGUuIFRoaXMgaXMgbW9yZQorICogUGVyZm9ybSBIZWFwVHVwbGVTYXRpc2Zp ZXNNVkNDKCkgb24gZWFjaCBwYXNzZWQgaW4gdHVwbGUuIFRoaXMgaXMgbW9yZQogICogZWZmaWNp ZW50IHRoYW4gZG9pbmcgSGVhcFR1cGxlU2F0aXNmaWVzTVZDQygpIG9uZS1ieS1vbmUuCiAgKgot ICogVG8gYmUgY2hlY2tlZCB0dXBsZXMgYXJlIHBhc3NlZCB2aWEgQmF0Y2hNVkNDU3RhdGUtPnR1 cGxlcy4gRWFjaCB0dXBsZSdzCi0gKiB2aXNpYmlsaXR5IGlzIHN0b3JlZCBpbiBiYXRjaG12Y2Mt PnZpc2libGVbXS4gSW4gYWRkaXRpb24sCi0gKiAtPnZpc3R1cGxlc19kZW5zZSBpcyBzZXQgdG8g Y29udGFpbiB0aGUgb2Zmc2V0cyBvZiB2aXNpYmxlIHR1cGxlcy4KKyAqIEVhY2ggdHVwbGUncyB2 aXNpYmlsaXR5IGlzIHN0b3JlZCBpbiBiYXRjaG12Y2MtPnZpc2libGVbXS4gIFRoZSBjYWxsZXIK KyAqIGlzIHJlc3BvbnNpYmxlIGZvciBjb21wYWN0aW5nIHRoZSB0dXBsZXMgYXJyYXkgdG8gY29u dGFpbiBvbmx5IHZpc2libGUKKyAqIHN1cnZpdm9ycyBhZnRlciB0aGlzIGZ1bmN0aW9uIHJldHVy bnMuCiAgKgotICogVGhlIHJlYXNvbiB0aGlzIGlzIG1vcmUgZWZmaWNpZW50IHRoYW4gSGVhcFR1 cGxlU2F0aXNmaWVzTVZDQygpIGlzIHRoYXQgaXQKLSAqIGF2b2lkcyBhIGNyb3NzLXRyYW5zbGF0 aW9uLXVuaXQgZnVuY3Rpb24gY2FsbCBmb3IgZWFjaCB0dXBsZSwgYWxsb3dzIHRoZQotICogY29t cGlsZXIgdG8gb3B0aW1pemUgYWNyb3NzIGNhbGxzIHRvIEhlYXBUdXBsZVNhdGlzZmllc01WQ0Mg YW5kIGFsbG93cworICogVGhlIHJlYXNvbiB0aGlzIGlzIG1vcmUgZWZmaWNpZW50IHRoYW4gSGVh cFR1cGxlU2F0aXNmaWVzTVZDQygpIGlzIHRoYXQKKyAqIGl0IGF2b2lkcyBhIGNyb3NzLXRyYW5z bGF0aW9uLXVuaXQgZnVuY3Rpb24gY2FsbCBmb3IgZWFjaCB0dXBsZSwgYWxsb3dzCisgKiB0aGUg Y29tcGlsZXIgdG8gb3B0aW1pemUgYWNyb3NzIGNhbGxzIHRvIEhlYXBUdXBsZVNhdGlzZmllc01W Q0MgYW5kIGFsbG93cwogICogc2V0dGluZyBoaW50IGJpdHMgbW9yZSBlZmZpY2llbnRseSAoc2Vl IHRoZSBvbmUgQnVmZmVyRmluaXNoU2V0SGludEJpdHMoKQogICogY2FsbCBiZWxvdykuCiAgKgpA QCAtMTY5MCw3ICsxNjkwLDcgQEAgaW50CiBIZWFwVHVwbGVTYXRpc2ZpZXNNVkNDQmF0Y2goU25h cHNob3Qgc25hcHNob3QsIEJ1ZmZlciBidWZmZXIsCiAJCQkJCQkJaW50IG50dXBzLAogCQkJCQkJ CUJhdGNoTVZDQ1N0YXRlICpiYXRjaG12Y2MsCi0JCQkJCQkJT2Zmc2V0TnVtYmVyICp2aXN0dXBs ZXNfZGVuc2UpCisJCQkJCQkJSGVhcFR1cGxlRGF0YSAqdHVwbGVzKQogewogCWludAkJCW52aXMg PSAwOwogCVNldEhpbnRCaXRzU3RhdGUgc3RhdGUgPSBTSEJfSU5JVElBTDsKQEAgLTE3MDAsMTYg KzE3MDAsMTMgQEAgSGVhcFR1cGxlU2F0aXNmaWVzTVZDQ0JhdGNoKFNuYXBzaG90IHNuYXBzaG90 LCBCdWZmZXIgYnVmZmVyLAogCWZvciAoaW50IGkgPSAwOyBpIDwgbnR1cHM7IGkrKykKIAl7CiAJ CWJvb2wJCXZhbGlkOwotCQlIZWFwVHVwbGUJdHVwID0gJmJhdGNobXZjYy0+dHVwbGVzW2ldOwor CQlIZWFwVHVwbGUJdHVwID0gJnR1cGxlc1tpXTsKIAogCQl2YWxpZCA9IEhlYXBUdXBsZVNhdGlz Zmllc01WQ0ModHVwLCBzbmFwc2hvdCwgYnVmZmVyLCAmc3RhdGUpOwogCQliYXRjaG12Y2MtPnZp c2libGVbaV0gPSB2YWxpZDsKIAogCQlpZiAobGlrZWx5KHZhbGlkKSkKLQkJewotCQkJdmlzdHVw bGVzX2RlbnNlW252aXNdID0gdHVwLT50X3NlbGYuaXBfcG9zaWQ7CiAJCQludmlzKys7Ci0JCX0K IAl9CiAKIAlpZiAoc3RhdGUgPT0gU0hCX0VOQUJMRUQpCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9hY2Nlc3MvaGVhcGFtLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKaW5kZXggNTE3 NjQ3OGMyOTUuLjU2ZjJkMWE1NzQ4IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVh cGFtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCkBAIC0xMDIsNyArMTAyLDcg QEAgdHlwZWRlZiBzdHJ1Y3QgSGVhcFNjYW5EZXNjRGF0YQogCS8qIHRoZXNlIGZpZWxkcyBvbmx5 IHVzZWQgaW4gcGFnZS1hdC1hLXRpbWUgbW9kZSBhbmQgZm9yIGJpdG1hcCBzY2FucyAqLwogCXVp bnQzMgkJcnNfY2luZGV4OwkJLyogY3VycmVudCB0dXBsZSdzIGluZGV4IGluIHZpc3R1cGxlcyAq LwogCXVpbnQzMgkJcnNfbnR1cGxlczsJCS8qIG51bWJlciBvZiB2aXNpYmxlIHR1cGxlcyBvbiBw YWdlICovCi0JT2Zmc2V0TnVtYmVyIHJzX3Zpc3R1cGxlc1tNYXhIZWFwVHVwbGVzUGVyUGFnZV07 CS8qIHRoZWlyIG9mZnNldHMgKi8KKwlIZWFwVHVwbGVEYXRhIHJzX3Zpc3R1cGxlc1tNYXhIZWFw VHVwbGVzUGVyUGFnZV07CS8qIHR1cGxlcyAqLwogfSBIZWFwU2NhbkRlc2NEYXRhOwogdHlwZWRl ZiBzdHJ1Y3QgSGVhcFNjYW5EZXNjRGF0YSAqSGVhcFNjYW5EZXNjOwogCkBAIC00OTgsMTQgKzQ5 OCwxMyBAQCBleHRlcm4gYm9vbCBIZWFwVHVwbGVJc1N1cmVseURlYWQoSGVhcFR1cGxlIGh0dXAs CiAgKi8KIHR5cGVkZWYgc3RydWN0IEJhdGNoTVZDQ1N0YXRlCiB7Ci0JSGVhcFR1cGxlRGF0YSB0 dXBsZXNbTWF4SGVhcFR1cGxlc1BlclBhZ2VdOwogCWJvb2wJCXZpc2libGVbTWF4SGVhcFR1cGxl c1BlclBhZ2VdOwogfSBCYXRjaE1WQ0NTdGF0ZTsKIAogZXh0ZXJuIGludAlIZWFwVHVwbGVTYXRp c2ZpZXNNVkNDQmF0Y2goU25hcHNob3Qgc25hcHNob3QsIEJ1ZmZlciBidWZmZXIsCiAJCQkJCQkJ CQkJaW50IG50dXBzLAogCQkJCQkJCQkJCUJhdGNoTVZDQ1N0YXRlICpiYXRjaG12Y2MsCi0JCQkJ CQkJCQkJT2Zmc2V0TnVtYmVyICp2aXN0dXBsZXNfZGVuc2UpOworCQkJCQkJCQkJCUhlYXBUdXBs ZURhdGEgKnR1cGxlcyk7CiAKIC8qCiAgKiBUbyBhdm9pZCBsZWFraW5nIHRvbyBtdWNoIGtub3ds ZWRnZSBhYm91dCByZW9yZGVyYnVmZmVyIGltcGxlbWVudGF0aW9uCi0tIAoyLjQ3LjMKCg== --00000000000043db7e064ec97207 Content-Type: application/octet-stream; name="v7-0005-Add-EXPLAIN-BATCHES-option-for-tuple-batching-sta.patch" Content-Disposition: attachment; filename="v7-0005-Add-EXPLAIN-BATCHES-option-for-tuple-batching-sta.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnn54u9w0 RnJvbSA4YmVlZmI1M2U3ZmE5NGEwNjA0NTZkMTMyMWYzNmFiYjIyMWNiZTQ3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFNhdCwgMjAgRGVjIDIwMjUgMjM6MDk6MzcgKzA5MDAKU3ViamVjdDogW1BBVENIIHY3 IDUvNV0gQWRkIEVYUExBSU4gKEJBVENIRVMpIG9wdGlvbiBmb3IgdHVwbGUgYmF0Y2hpbmcKIHN0 YXRpc3RpY3MKCkFkZCBhIEJBVENIRVMgb3B0aW9uIHRvIEVYUExBSU4gdGhhdCByZXBvcnRzIHBl ci1ub2RlIGJhdGNoIHN0YXRpc3RpY3MKd2hlbiBhIG5vZGUgdXNlcyBiYXRjaCBtb2RlIGV4ZWN1 dGlvbi4KCkZvciBub2RlcyB0aGF0IHN1cHBvcnQgYmF0Y2hpbmcgKGN1cnJlbnRseSBTZXFTY2Fu KSwgdGhpcyBzaG93cyB0aGUKbnVtYmVyIG9mIGJhdGNoZXMgZmV0Y2hlZCBhbG9uZyB3aXRoIGF2 ZXJhZ2UsIG1pbmltdW0sIGFuZCBtYXhpbXVtCnJvd3MgcGVyIGJhdGNoLiBPdXRwdXQgaXMgc3Vw cG9ydGVkIGluIGJvdGggdGV4dCBhbmQgbm9uLXRleHQgZm9ybWF0cy4KCkFkZCByZWdyZXNzaW9u IHRlc3RzIGNvdmVyaW5nIHRleHQgb3V0cHV0LCBKU09OIGZvcm1hdCwgZmlsdGVyZWQgc2NhbnMs CkxJTUlULCBhbmQgZGlzYWJsZWQgYmF0Y2hpbmcuCgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rn ci5lcy9tL0NBK0hpd3FGZkFZX1pGcU44d2NBRU13NzFUOWhNX2tBOFV0eUhhWlpFWnR1VDNVeW9n QUBtYWlsLmdtYWlsLmNvbQotLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYyAgICAg ICAgfCAgNDQgKysrKysrKysrKysKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW5fc3RhdGUu YyAgfCAgIDggKysKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNSb3dCYXRjaC5jICAgfCAgNDQg KysrKysrKysrKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVTZXFzY2FuLmMgICAgfCAgIDgg Ky0KIHNyYy9pbmNsdWRlL2NvbW1hbmRzL2V4cGxhaW5fc3RhdGUuaCAgfCAgIDEgKwogc3JjL2lu Y2x1ZGUvZXhlY3V0b3IvZXhlY1Jvd0JhdGNoLmggICB8ICAyMiArKysrKy0KIHNyYy9pbmNsdWRl L2V4ZWN1dG9yL2luc3RydW1lbnQuaCAgICAgfCAgIDEgKwogc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9leHBsYWluLm91dCB8IDEwNyArKysrKysrKysrKysrKysrKysrKysrKysrKwogc3JjL3Rl c3QvcmVncmVzcy9zcWwvZXhwbGFpbi5zcWwgICAgICB8ICA1OSArKysrKysrKysrKysrKwogOSBm aWxlcyBjaGFuZ2VkLCAyOTEgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMgYi9zcmMvYmFja2VuZC9jb21tYW5k cy9leHBsYWluLmMKaW5kZXggNzNlYWFmMTc2YWMuLjhjOThjYTU3YzkyIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMv ZXhwbGFpbi5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSAiY29tbWFuZHMvZXhwbGFpbl9m b3JtYXQuaCIKICNpbmNsdWRlICJjb21tYW5kcy9leHBsYWluX3N0YXRlLmgiCiAjaW5jbHVkZSAi Y29tbWFuZHMvcHJlcGFyZS5oIgorI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWNSb3dCYXRjaC5oIgog I2luY2x1ZGUgImZvcmVpZ24vZmR3YXBpLmgiCiAjaW5jbHVkZSAiaml0L2ppdC5oIgogI2luY2x1 ZGUgImxpYnBxL3BxZm9ybWF0LmgiCkBAIC01MTksNiArNTIwLDggQEAgRXhwbGFpbk9uZVBsYW4o UGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10LCBJbnRvQ2xhdXNlICppbnRvLCBFeHBsYWluU3RhdGUg KmVzLAogCQlpbnN0cnVtZW50X29wdGlvbiB8PSBJTlNUUlVNRU5UX0JVRkZFUlM7CiAJaWYgKGVz LT53YWwpCiAJCWluc3RydW1lbnRfb3B0aW9uIHw9IElOU1RSVU1FTlRfV0FMOworCWlmIChlcy0+ YmF0Y2hlcykKKwkJaW5zdHJ1bWVudF9vcHRpb24gfD0gSU5TVFJVTUVOVF9CQVRDSEVTOwogCiAJ LyoKIAkgKiBXZSBhbHdheXMgY29sbGVjdCB0aW1pbmcgZm9yIHRoZSBlbnRpcmUgc3RhdGVtZW50 LCBldmVuIHdoZW4gbm9kZS1sZXZlbApAQCAtMTM3MCw2ICsxMzczLDcgQEAgRXhwbGFpbk5vZGUo UGxhblN0YXRlICpwbGFuc3RhdGUsIExpc3QgKmFuY2VzdG9ycywKIAlpbnQJCQlzYXZlX2luZGVu dCA9IGVzLT5pbmRlbnQ7CiAJYm9vbAkJaGFzY2hpbGRyZW47CiAJYm9vbAkJaXNkaXNhYmxlZDsK KwlSb3dCYXRjaCAgICpiYXRjaCA9IE5VTEw7CiAKIAkvKgogCSAqIFByZXBhcmUgcGVyLXdvcmtl ciBvdXRwdXQgYnVmZmVycywgaWYgbmVlZGVkLiAgV2UnbGwgYXBwZW5kIHRoZSBkYXRhIGluCkBA IC0yMjk2LDYgKzIzMDAsNDYgQEAgRXhwbGFpbk5vZGUoUGxhblN0YXRlICpwbGFuc3RhdGUsIExp c3QgKmFuY2VzdG9ycywKIAlpZiAoZXMtPndhbCAmJiBwbGFuc3RhdGUtPmluc3RydW1lbnQpCiAJ CXNob3dfd2FsX3VzYWdlKGVzLCAmcGxhbnN0YXRlLT5pbnN0cnVtZW50LT5pbnN0ci53YWx1c2Fn ZSk7CiAKKwkvKiBCQVRDSEVTICovCisJc3dpdGNoIChub2RlVGFnKHBsYW4pKQorCXsKKwkJY2Fz ZSBUX1NlcVNjYW46CisJCQliYXRjaCA9IGNhc3ROb2RlKFNlcVNjYW5TdGF0ZSwgcGxhbnN0YXRl KS0+YmF0Y2g7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCX0KKworCWlmIChl cy0+YmF0Y2hlcyAmJiBiYXRjaCkKKwl7CisJCVJvd0JhdGNoU3RhdHMgKnN0YXRzID0gYmF0Y2gt PnN0YXRzOworCisJCUFzc2VydChzdGF0cyk7CisJCWlmIChzdGF0cy0+YmF0Y2hlcyA+IDApCisJ CXsKKwkJCWlmIChlcy0+Zm9ybWF0ID09IEVYUExBSU5fRk9STUFUX1RFWFQpCisJCQl7CisJCQkJ RXhwbGFpbkluZGVudFRleHQoZXMpOworCQkJCWFwcGVuZFN0cmluZ0luZm8oZXMtPnN0ciwKKwkJ CQkJCQkJICJCYXRjaGVzOiAlbGxkICBBdmcgUm93czogJS4xZiAgTWF4OiAlZCAgTWluOiAlZFxu IiwKKwkJCQkJCQkJIChsb25nIGxvbmcpIHN0YXRzLT5iYXRjaGVzLAorCQkJCQkJCQkgUm93QmF0 Y2hBdmdSb3dzKGJhdGNoKSwgc3RhdHMtPm1heF9yb3dzLAorCQkJCQkJCQkgc3RhdHMtPm1pbl9y b3dzID09IElOVF9NQVggPyAwIDoKKwkJCQkJCQkJIHN0YXRzLT5taW5fcm93cyk7CisJCQl9CisJ CQllbHNlCisJCQl7CisJCQkJRXhwbGFpblByb3BlcnR5SW50ZWdlcigiQmF0Y2hlcyIsIE5VTEws IHN0YXRzLT5iYXRjaGVzLCBlcyk7CisJCQkJRXhwbGFpblByb3BlcnR5RmxvYXQoIkF2ZXJhZ2Ug QmF0Y2ggUm93cyIsIE5VTEwsCisJCQkJCQkJCQkgUm93QmF0Y2hBdmdSb3dzKGJhdGNoKSwgMSwg ZXMpOworCQkJCUV4cGxhaW5Qcm9wZXJ0eUludGVnZXIoIk1heCBCYXRjaCBSb3dzIiwgTlVMTCwg c3RhdHMtPm1heF9yb3dzLCBlcyk7CisJCQkJRXhwbGFpblByb3BlcnR5SW50ZWdlcigiTWluIEJh dGNoIFJvd3MiLCBOVUxMLAorCQkJCQkJCQkJICAgc3RhdHMtPm1pbl9yb3dzID09IElOVF9NQVgg PyAwIDoKKwkJCQkJCQkJCSAgIHN0YXRzLT5taW5fcm93cywgZXMpOworCQkJfQorCQl9CisJfQor CiAJLyogUHJlcGFyZSBwZXItd29ya2VyIGJ1ZmZlci9XQUwgdXNhZ2UgKi8KIAlpZiAoZXMtPndv cmtlcnNfc3RhdGUgJiYgKGVzLT5idWZmZXJzIHx8IGVzLT53YWwpICYmIGVzLT52ZXJib3NlKQog CXsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW5fc3RhdGUuYyBiL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW5fc3RhdGUuYwppbmRleCA3N2Y1OWI4ZTUwMC4uMjgw MjJhMTcxY2QgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW5fc3RhdGUu YworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluX3N0YXRlLmMKQEAgLTE1OSw2ICsx NTksOCBAQCBQYXJzZUV4cGxhaW5PcHRpb25MaXN0KEV4cGxhaW5TdGF0ZSAqZXMsIExpc3QgKm9w dGlvbnMsIFBhcnNlU3RhdGUgKnBzdGF0ZSkKIAkJCQkJCQkJIkVYUExBSU4iLCBvcHQtPmRlZm5h bWUsIHApLAogCQkJCQkJIHBhcnNlcl9lcnJwb3NpdGlvbihwc3RhdGUsIG9wdC0+bG9jYXRpb24p KSk7CiAJCX0KKwkJZWxzZSBpZiAoc3RyY21wKG9wdC0+ZGVmbmFtZSwgImJhdGNoZXMiKSA9PSAw KQorCQkJZXMtPmJhdGNoZXMgPSBkZWZHZXRCb29sZWFuKG9wdCk7CiAJCWVsc2UgaWYgKCFBcHBs eUV4dGVuc2lvbkV4cGxhaW5PcHRpb24oZXMsIG9wdCwgcHN0YXRlKSkKIAkJCWVyZXBvcnQoRVJS T1IsCiAJCQkJCShlcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKQEAgLTE5OCw2ICsyMDAs MTIgQEAgUGFyc2VFeHBsYWluT3B0aW9uTGlzdChFeHBsYWluU3RhdGUgKmVzLCBMaXN0ICpvcHRp b25zLCBQYXJzZVN0YXRlICpwc3RhdGUpCiAJCQkJIGVycm1zZygiJXMgb3B0aW9ucyAlcyBhbmQg JXMgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiLAogCQkJCQkJIkVYUExBSU4iLCAiQU5BTFlaRSIs ICJHRU5FUklDX1BMQU4iKSkpOwogCisJLyogY2hlY2sgdGhhdCBCQVRDSEVTIGlzIHVzZWQgd2l0 aCBFWFBMQUlOIEFOQUxZWkUgKi8KKwlpZiAoZXMtPmJhdGNoZXMgJiYgIWVzLT5hbmFseXplKQor CQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJf VkFMVUUpLAorCQkJCSBlcnJtc2coIkVYUExBSU4gb3B0aW9uICVzIHJlcXVpcmVzIEFOQUxZWkUi LCAiQkFUQ0hFUyIpKSk7CisKIAkvKiBpZiB0aGUgc3VtbWFyeSB3YXMgbm90IHNldCBleHBsaWNp dGx5LCBzZXQgZGVmYXVsdCB2YWx1ZSAqLwogCWVzLT5zdW1tYXJ5ID0gKHN1bW1hcnlfc2V0KSA/ IGVzLT5zdW1tYXJ5IDogZXMtPmFuYWx5emU7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL2V4ZWNSb3dCYXRjaC5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1Jvd0JhdGNo LmMKaW5kZXggNmEyOTg4MTNiZDguLjZlZjU0ZGVjYTA0IDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9leGVjdXRvci9leGVjUm93QmF0Y2guYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVj Um93QmF0Y2guYwpAQCAtMjAsNyArMjAsNyBAQAogICoJCUFsbG9jYXRlIGFuZCBpbml0aWFsaXpl IGEgbmV3IFJvd0JhdGNoIGVudmVsb3BlLgogICovCiBSb3dCYXRjaCAqCi1Sb3dCYXRjaENyZWF0 ZShpbnQgbWF4X3Jvd3MpCitSb3dCYXRjaENyZWF0ZShpbnQgbWF4X3Jvd3MsIGJvb2wgdHJhY2tf c3RhdHMpCiB7CiAJUm93QmF0Y2ggICAqYjsKIApAQCAtMzUsNiArMzUsMjAgQEAgUm93QmF0Y2hD cmVhdGUoaW50IG1heF9yb3dzKQogCWItPm1hdGVyaWFsaXplZCA9IGZhbHNlOwogCWItPnNsb3Qg PSBOVUxMOwogCisJaWYgKHRyYWNrX3N0YXRzKQorCXsKKwkJUm93QmF0Y2hTdGF0cyAqc3RhdHMg PSBwYWxsb2Nfb2JqZWN0KFJvd0JhdGNoU3RhdHMpOworCisJCXN0YXRzLT5iYXRjaGVzID0gMDsK KwkJc3RhdHMtPnJvd3MgPSAwOworCQlzdGF0cy0+bWF4X3Jvd3MgPSAwOworCQlzdGF0cy0+bWlu X3Jvd3MgPSBJTlRfTUFYOworCisJCWItPnN0YXRzID0gc3RhdHM7CisJfQorCWVsc2UKKwkJYi0+ c3RhdHMgPSBOVUxMOworCiAJcmV0dXJuIGI7CiB9CiAKQEAgLTUyLDMgKzY2LDMxIEBAIFJvd0Jh dGNoUmVzZXQoUm93QmF0Y2ggKmIsIGJvb2wgZHJvcF9zbG90cykKIAliLT5tYXRlcmlhbGl6ZWQg PSBmYWxzZTsKIAkvKiBiLT5zbG90IGJlbG9uZ3MgdG8gdGhlIG93bmluZyBQbGFuU3RhdGUgbm9k ZSAqLwogfQorCit2b2lkCitSb3dCYXRjaFJlY29yZFN0YXRzKFJvd0JhdGNoICpiLCBpbnQgcm93 cykKK3sKKwlSb3dCYXRjaFN0YXRzICpzdGF0cyA9IGItPnN0YXRzOworCisJaWYgKHN0YXRzID09 IE5VTEwpCisJCXJldHVybjsKKworCXN0YXRzLT5iYXRjaGVzKys7CisJc3RhdHMtPnJvd3MgKz0g cm93czsKKwlpZiAocm93cyA+IHN0YXRzLT5tYXhfcm93cykKKwkJc3RhdHMtPm1heF9yb3dzID0g cm93czsKKwlpZiAocm93cyA8IHN0YXRzLT5taW5fcm93cyAmJiByb3dzID4gMCkKKwkJc3RhdHMt Pm1pbl9yb3dzID0gcm93czsKK30KKworZG91YmxlCitSb3dCYXRjaEF2Z1Jvd3MoUm93QmF0Y2gg KmIpCit7CisJUm93QmF0Y2hTdGF0cyAqc3RhdHMgPSBiLT5zdGF0czsKKworCUFzc2VydChzdGF0 cyAhPSBOVUxMKTsKKwlpZiAoc3RhdHMtPmJhdGNoZXMgPT0gMCkKKwkJcmV0dXJuIDAuMDsKKwor CXJldHVybiAoZG91YmxlKSBzdGF0cy0+cm93cyAvIHN0YXRzLT5iYXRjaGVzOworfQpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVNlcXNjYW4uYyBiL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL25vZGVTZXFzY2FuLmMKaW5kZXggZDBjZTg4NThjNDkuLjEzNWIwYTRmOWEyIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlU2Vxc2Nhbi5jCisrKyBiL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL25vZGVTZXFzY2FuLmMKQEAgLTI0Nyw4ICsyNDcsMTIgQEAgU2VxU2NhbkNh blVzZUJhdGNoaW5nKFNlcVNjYW5TdGF0ZSAqc2NhbnN0YXRlLCBpbnQgZWZsYWdzKQogc3RhdGlj IHZvaWQKIFNlcVNjYW5Jbml0QmF0Y2hpbmcoU2VxU2NhblN0YXRlICpzY2Fuc3RhdGUpCiB7Ci0J Um93QmF0Y2ggICAqYmF0Y2ggPSBSb3dCYXRjaENyZWF0ZShNYXhIZWFwVHVwbGVzUGVyUGFnZSk7 CisJUm93QmF0Y2ggICAqYmF0Y2g7CisJRVN0YXRlCSAgICplc3RhdGUgPSBzY2Fuc3RhdGUtPnNz LnBzLnN0YXRlOworCWJvb2wJCXRyYWNrX3N0YXRzID0gZXN0YXRlLT5lc19pbnN0cnVtZW50ICYm CisJCShlc3RhdGUtPmVzX2luc3RydW1lbnQgJiBJTlNUUlVNRU5UX0JBVENIRVMpOwogCisJYmF0 Y2ggPSBSb3dCYXRjaENyZWF0ZShNYXhIZWFwVHVwbGVzUGVyUGFnZSwgdHJhY2tfc3RhdHMpOwog CWJhdGNoLT5zbG90ID0gc2NhbnN0YXRlLT5zcy5zc19TY2FuVHVwbGVTbG90OwogCXNjYW5zdGF0 ZS0+YmF0Y2ggPSBiYXRjaDsKIApAQCAtMzUxLDYgKzM1NSw4IEBAIFNlcU5leHRCYXRjaChTZXFT Y2FuU3RhdGUgKm5vZGUpCiAJaWYgKCF0YWJsZV9zY2FuX2dldG5leHRiYXRjaChzY2FuZGVzYywg YiwgZGlyZWN0aW9uKSkKIAkJcmV0dXJuIGZhbHNlOwogCisJUm93QmF0Y2hSZWNvcmRTdGF0cyhi LCBiLT5ucm93cyk7CisKIAlyZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvY29tbWFuZHMvZXhwbGFpbl9zdGF0ZS5oIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXhwbGFp bl9zdGF0ZS5oCmluZGV4IDVhNDhiYzZmYmIxLi41NzljYTRjZmEyMCAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvY29tbWFuZHMvZXhwbGFpbl9zdGF0ZS5oCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1h bmRzL2V4cGxhaW5fc3RhdGUuaApAQCAtNTYsNiArNTYsNyBAQCB0eXBlZGVmIHN0cnVjdCBFeHBs YWluU3RhdGUKIAlib29sCQltZW1vcnk7CQkJLyogcHJpbnQgcGxhbm5lcidzIG1lbW9yeSB1c2Fn ZSBpbmZvcm1hdGlvbiAqLwogCWJvb2wJCXNldHRpbmdzOwkJLyogcHJpbnQgbW9kaWZpZWQgc2V0 dGluZ3MgKi8KIAlib29sCQlnZW5lcmljOwkJLyogZ2VuZXJhdGUgYSBnZW5lcmljIHBsYW4gKi8K Kwlib29sCQliYXRjaGVzOwkJLyogcHJpbnQgYmF0Y2ggc3RhdGlzdGljcyAqLwogCUV4cGxhaW5T ZXJpYWxpemVPcHRpb24gc2VyaWFsaXplOwkvKiBzZXJpYWxpemUgdGhlIHF1ZXJ5J3Mgb3V0cHV0 PyAqLwogCUV4cGxhaW5Gb3JtYXQgZm9ybWF0OwkJLyogb3V0cHV0IGZvcm1hdCAqLwogCS8qIHN0 YXRlIGZvciBvdXRwdXQgZm9ybWF0dGluZyAtLS0gbm90IHJlc2V0IGZvciBlYWNoIG5ldyBwbGFu IHRyZWUgKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNSb3dCYXRjaC5o IGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY1Jvd0JhdGNoLmgKaW5kZXggMDIxZmRlZWNjNzMu LmFkMGI0NzYzYjcwIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjUm93QmF0 Y2guaAorKysgYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjUm93QmF0Y2guaApAQCAtMTMsOSAr MTMsMTIgQEAKICNpZm5kZWYgRVhFQ1JPV0JBVENIX0gKICNkZWZpbmUgRVhFQ1JPV0JBVENIX0gK IAorI2luY2x1ZGUgPGxpbWl0cy5oPgorCiAjaW5jbHVkZSAiZXhlY3V0b3IvdHVwdGFibGUuaCIK IAogdHlwZWRlZiBzdHJ1Y3QgUm93QmF0Y2hPcHMgUm93QmF0Y2hPcHM7Cit0eXBlZGVmIHN0cnVj dCBSb3dCYXRjaFN0YXRzIFJvd0JhdGNoU3RhdHM7CiAKIC8qCiAgKiBSb3dCYXRjaApAQCAtMzgs NiArNDEsOSBAQCB0eXBlZGVmIHN0cnVjdCBSb3dCYXRjaAogCWJvb2wJCW1hdGVyaWFsaXplZDsJ CS8qIHR1cGxlcyBpbiBzbG90cyB2YWxpZD8gKi8KIAogCVR1cGxlVGFibGVTbG90ICpzbG90OwkJ CS8qIHJvdyB2aWV3ICovCisKKwlSb3dCYXRjaFN0YXRzICpzdGF0czsJCQkvKiBOVUxMIGlmIGlu c3RydW1lbnRhdGlvbiBzdGF0cworCQkJCQkJCQkJICogYXJlIG5vdCByZXF1ZXN0ZWQgKi8KIH0g Um93QmF0Y2g7CiAKIC8qCkBAIC01OCw4ICs2NCwxNyBAQCB0eXBlZGVmIHN0cnVjdCBSb3dCYXRj aE9wcwogCXZvaWQJCSgqcmVwb2ludF9zbG90KSAoUm93QmF0Y2ggKmIsIGludCBpZHgpOwogfSBS b3dCYXRjaE9wczsKIAorLyogSW5zdHJ1bWVudGF0aW9uIHN0YXRzIHBvcHVsYXRlZCBmb3IgRVhQ TEFJTiBBTkFMWVpFIEJBVENIRVMgKi8KK3R5cGVkZWYgc3RydWN0IFJvd0JhdGNoU3RhdHMKK3sK KwlpbnQ2NAliYXRjaGVzOwkvKiB0b3RhbCBudW1iZXIgb2YgYmF0Y2hlcyBmZXRjaGVkICovCisJ aW50NjQJcm93czsJCS8qIHRvdGFsIHR1cGxlcyBhY3Jvc3MgYWxsIGJhdGNoZXMgKi8KKwlpbnQJ CW1heF9yb3dzOwkvKiBtYXggcm93cyBpbiBhbnkgc2luZ2xlIGJhdGNoICovCisJaW50CQltaW5f cm93czsJLyogbWluIHJvd3MgaW4gYW55IHNpbmdsZSBiYXRjaCAobm9uLXplcm8pICovCit9IFJv d0JhdGNoU3RhdHM7CisKIC8qIENyZWF0ZS90ZWFyZG93biAqLwotZXh0ZXJuIFJvd0JhdGNoICpS b3dCYXRjaENyZWF0ZShpbnQgbWF4X3Jvd3MpOworZXh0ZXJuIFJvd0JhdGNoICpSb3dCYXRjaENy ZWF0ZShpbnQgbWF4X3Jvd3MsIGJvb2wgdHJhY2tfc3RhdHMpOwogZXh0ZXJuIHZvaWQgUm93QmF0 Y2hSZXNldChSb3dCYXRjaCAqYiwgYm9vbCBkcm9wX3Nsb3RzKTsKIAogLyogVmFsaWRhdGlvbiAq LwpAQCAtODUsNCArMTAwLDkgQEAgUm93QmF0Y2hHZXROZXh0U2xvdChSb3dCYXRjaCAqYikKIAly ZXR1cm4gYi0+c2xvdDsKIH0KIAorLyogPT09IEJhdGNoaW5nIHN0YXRzLiA9PT0qLworCitleHRl cm4gdm9pZCBSb3dCYXRjaFJlY29yZFN0YXRzKFJvd0JhdGNoICpiLCBpbnQgcm93cyk7CitleHRl cm4gZG91YmxlIFJvd0JhdGNoQXZnUm93cyhSb3dCYXRjaCAqYik7CisKICNlbmRpZgkvKiBFWEVD Uk9XQkFUQ0hfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvaW5zdHJ1bWVu dC5oIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvaW5zdHJ1bWVudC5oCmluZGV4IGNjOWZiYjBlMmYw Li44OWRmNzRhODZjMSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvaW5zdHJ1bWVu dC5oCisrKyBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2luc3RydW1lbnQuaApAQCAtNjQsNiArNjQs NyBAQCB0eXBlZGVmIGVudW0gSW5zdHJ1bWVudE9wdGlvbgogCUlOU1RSVU1FTlRfQlVGRkVSUyA9 IDEgPDwgMSwJLyogbmVlZHMgYnVmZmVyIHVzYWdlICovCiAJSU5TVFJVTUVOVF9ST1dTID0gMSA8 PCAyLAkvKiBuZWVkcyByb3cgY291bnQgKi8KIAlJTlNUUlVNRU5UX1dBTCA9IDEgPDwgMywJLyog bmVlZHMgV0FMIHVzYWdlICovCisJSU5TVFJVTUVOVF9CQVRDSEVTID0gMSA8PCA0LCAvKiBuZWVk cyBiYXRjaGVzICovCiAJSU5TVFJVTUVOVF9BTEwgPSBQR19JTlQzMl9NQVgKIH0gSW5zdHJ1bWVu dE9wdGlvbjsKIApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9leHBsYWlu Lm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZXhwbGFpbi5vdXQKaW5kZXggN2MxZjI2 YjE4MmMuLjk1MGRlNWE5ZDc4IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L2V4cGxhaW4ub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZXhwbGFpbi5vdXQK QEAgLTgyMiwzICs4MjIsMTEwIEBAIHNlbGVjdCBleHBsYWluX2ZpbHRlcignZXhwbGFpbiAoYW5h bHl6ZSxidWZmZXJzIG9mZixjb3N0cyBvZmYpIHNlbGVjdCBzdW0obikgb3ZlCiAoOSByb3dzKQog CiByZXNldCB3b3JrX21lbTsKKy0tIFRlc3QgQkFUQ0hFUyBvcHRpb24KK3NldCBleGVjdXRvcl9i YXRjaF9yb3dzID0gNjQ7CitjcmVhdGUgdGVtcCB0YWJsZSBiYXRjaF90ZXN0IChhIGludCwgYiB0 ZXh0KTsKK2luc2VydCBpbnRvIGJhdGNoX3Rlc3Qgc2VsZWN0IGksIHJlcGVhdCgneCcsIDEwMCkg ZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwMDApIGk7CithbmFseXplIGJhdGNoX3Rlc3Q7Cist LSBCQVRDSEVTIHdpdGhvdXQgQU5BTFlaRSBzaG91bGQgZXJyb3IKK2V4cGxhaW4gKGJhdGNoZXMs IGNvc3RzIG9mZikgc2VsZWN0ICogZnJvbSBiYXRjaF90ZXN0OworRVJST1I6ICBFWFBMQUlOIG9w dGlvbiBCQVRDSEVTIHJlcXVpcmVzIEFOQUxZWkUKKy0tIEJBVENIRVMgd2l0aG91dCBBTkFMWVpF IGJ1dCB3aXRoIG90aGVyIG9wdGlvbnMKK2V4cGxhaW4gKGJhdGNoZXMsIGJ1ZmZlcnMgb2ZmLCBj b3N0cyBvZmYpIHNlbGVjdCAqIGZyb20gYmF0Y2hfdGVzdDsKK0VSUk9SOiAgRVhQTEFJTiBvcHRp b24gQkFUQ0hFUyByZXF1aXJlcyBBTkFMWVpFCistLSBCYXNpYzogdmVyaWZ5IGJhdGNoIHN0YXRz IGxpbmUgYXBwZWFycyBpbiB0ZXh0IGZvcm1hdAorc2VsZWN0IGV4cGxhaW5fZmlsdGVyKCdleHBs YWluIChhbmFseXplLCBiYXRjaGVzLCBidWZmZXJzIG9mZiwgY29zdHMgb2ZmKSBzZWxlY3QgKiBm cm9tIGJhdGNoX3Rlc3QnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBleHBsYWluX2ZpbHRl ciAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBiYXRjaF90 ZXN0IChhY3R1YWwgdGltZT1OLk4uLk4uTiByb3dzPU4uTiBsb29wcz1OKQorICAgQmF0Y2hlczog TiAgQXZnIFJvd3M6IE4uTiAgTWF4OiBOICBNaW46IE4KKyBQbGFubmluZyBUaW1lOiBOLk4gbXMK KyBFeGVjdXRpb24gVGltZTogTi5OIG1zCisoNCByb3dzKQorCistLSBXaXRoIGZpbHRlcjogYmF0 Y2ggbGluZSBzdGlsbCBhcHBlYXJzCitzZWxlY3QgZXhwbGFpbl9maWx0ZXIoJ2V4cGxhaW4gKGFu YWx5emUsIGJhdGNoZXMsIGJ1ZmZlcnMgb2ZmLCBjb3N0cyBvZmYpIHNlbGVjdCAqIGZyb20gYmF0 Y2hfdGVzdCB3aGVyZSBhID4gNTAwMCcpOworICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGxh aW5fZmlsdGVyICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9u IGJhdGNoX3Rlc3QgKGFjdHVhbCB0aW1lPU4uTi4uTi5OIHJvd3M9Ti5OIGxvb3BzPU4pCisgICBG aWx0ZXI6IChhID4gTikKKyAgIFJvd3MgUmVtb3ZlZCBieSBGaWx0ZXI6IE4KKyAgIEJhdGNoZXM6 IE4gIEF2ZyBSb3dzOiBOLk4gIE1heDogTiAgTWluOiBOCisgUGxhbm5pbmcgVGltZTogTi5OIG1z CisgRXhlY3V0aW9uIFRpbWU6IE4uTiBtcworKDYgcm93cykKKworLS0gV2l0aCBub24tYmF0Y2hh YmxlIHF1YWwgKE9SKTogYmF0Y2hpbmcgc3RpbGwgYWN0aXZlIGJ1dAorLS0gYmF0Y2ggcXVhbCBm YWxscyBiYWNrIHRvIHBlci10dXBsZSBFeGVjUXVhbAorc2VsZWN0IGV4cGxhaW5fZmlsdGVyKCdl eHBsYWluIChhbmFseXplLCBiYXRjaGVzLCBidWZmZXJzIG9mZiwgY29zdHMgb2ZmKSBzZWxlY3Qg KiBmcm9tIGJhdGNoX3Rlc3Qgd2hlcmUgYSA+IDUwMDAgb3IgYiBpcyBudWxsJyk7CisgICAgICAg ICAgICAgICAgICAgICAgICAgZXhwbGFpbl9maWx0ZXIgICAgICAgICAgICAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgU2VxIFNjYW4gb24gYmF0Y2hfdGVzdCAoYWN0dWFsIHRpbWU9Ti5OLi5OLk4g cm93cz1OLk4gbG9vcHM9TikKKyAgIEZpbHRlcjogKChhID4gTikgT1IgKGIgSVMgTlVMTCkpCisg ICBSb3dzIFJlbW92ZWQgYnkgRmlsdGVyOiBOCisgICBCYXRjaGVzOiBOICBBdmcgUm93czogTi5O ICBNYXg6IE4gIE1pbjogTgorIFBsYW5uaW5nIFRpbWU6IE4uTiBtcworIEV4ZWN1dGlvbiBUaW1l OiBOLk4gbXMKKyg2IHJvd3MpCisKKy0tIFdpdGggTElNSVQ6IGJhdGNoIHN0YXRzIGFwcGVhciBv biBjaGlsZCBTZXEgU2NhbiBub2RlCitzZWxlY3QgZXhwbGFpbl9maWx0ZXIoJ2V4cGxhaW4gKGFu YWx5emUsIGJhdGNoZXMsIGJ1ZmZlcnMgb2ZmLCBjb3N0cyBvZmYpIHNlbGVjdCAqIGZyb20gYmF0 Y2hfdGVzdCBsaW1pdCAxMDAnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBsYWlu X2ZpbHRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBMaW1p dCAoYWN0dWFsIHRpbWU9Ti5OLi5OLk4gcm93cz1OLk4gbG9vcHM9TikKKyAgIC0+ICBTZXEgU2Nh biBvbiBiYXRjaF90ZXN0IChhY3R1YWwgdGltZT1OLk4uLk4uTiByb3dzPU4uTiBsb29wcz1OKQor ICAgICAgICAgQmF0Y2hlczogTiAgQXZnIFJvd3M6IE4uTiAgTWF4OiBOICBNaW46IE4KKyBQbGFu bmluZyBUaW1lOiBOLk4gbXMKKyBFeGVjdXRpb24gVGltZTogTi5OIG1zCisoNSByb3dzKQorCist LSBWZXJpZnkgYmF0Y2ggc3RhdHMga2V5cyBwcmVzZW50IGluIEpTT04gb3V0cHV0CitzZWxlY3QK KyAgaiAjPiAnezAsUGxhbn0nID8gJ0JhdGNoZXMnIGFzIGhhc19iYXRjaGVzLAorICBqICM+ICd7 MCxQbGFufScgPyAnQXZlcmFnZSBCYXRjaCBSb3dzJyBhcyBoYXNfYXZnLAorICBqICM+ICd7MCxQ bGFufScgPyAnTWF4IEJhdGNoIFJvd3MnIGFzIGhhc19tYXgsCisgIGogIz4gJ3swLFBsYW59JyA/ ICdNaW4gQmF0Y2ggUm93cycgYXMgaGFzX21pbgorZnJvbSBleHBsYWluX2ZpbHRlcl90b19qc29u KAorICAnZXhwbGFpbiAoYW5hbHl6ZSwgYmF0Y2hlcywgYnVmZmVycyBvZmYsIGZvcm1hdCBqc29u KSBzZWxlY3QgKiBmcm9tIGJhdGNoX3Rlc3QnCispIGFzIGo7CisgaGFzX2JhdGNoZXMgfCBoYXNf YXZnIHwgaGFzX21heCB8IGhhc19taW4gCistLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tCisgdCAgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQKKygxIHJv dykKKworLS0gV2l0aCBMSU1JVDogYmF0Y2ggc3RhdHMga2V5cyBvbiBjaGlsZCBub2RlIGluIEpT T04KK3NlbGVjdAorICBqICM+ICd7MCxQbGFuLFBsYW5zLDB9JyA/ICdCYXRjaGVzJyBhcyBjaGls ZF9oYXNfYmF0Y2hlcywKKyAgaiAjPiAnezAsUGxhbixQbGFucywwfScgPyAnQXZlcmFnZSBCYXRj aCBSb3dzJyBhcyBjaGlsZF9oYXNfYXZnLAorICBqICM+ICd7MCxQbGFuLFBsYW5zLDB9JyA/ICdN YXggQmF0Y2ggUm93cycgYXMgY2hpbGRfaGFzX21heCwKKyAgaiAjPiAnezAsUGxhbixQbGFucyww fScgPyAnTWluIEJhdGNoIFJvd3MnIGFzIGNoaWxkX2hhc19taW4KK2Zyb20gZXhwbGFpbl9maWx0 ZXJfdG9fanNvbigKKyAgJ2V4cGxhaW4gKGFuYWx5emUsIGJhdGNoZXMsIGJ1ZmZlcnMgb2ZmLCBm b3JtYXQganNvbikgc2VsZWN0ICogZnJvbSBiYXRjaF90ZXN0IGxpbWl0IDEwMCcKKykgYXMgajsK KyBjaGlsZF9oYXNfYmF0Y2hlcyB8IGNoaWxkX2hhc19hdmcgfCBjaGlsZF9oYXNfbWF4IHwgY2hp bGRfaGFzX21pbiAKKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgICAgICAgICB8IHQgICAgICAgICAg ICAgfCB0ICAgICAgICAgICAgIHwgdAorKDEgcm93KQorCistLSBCYXRjaGluZyBkaXNhYmxlZDog bm8gYmF0Y2ggc3RhdHMgaW4gdGV4dCBvdXRwdXQKK3NldCBleGVjdXRvcl9iYXRjaF9yb3dzID0g MDsKK3NlbGVjdCBleHBsYWluX2ZpbHRlcignZXhwbGFpbiAoYW5hbHl6ZSwgYmF0Y2hlcywgYnVm ZmVycyBvZmYsIGNvc3RzIG9mZikgc2VsZWN0ICogZnJvbSBiYXRjaF90ZXN0Jyk7CisgICAgICAg ICAgICAgICAgICAgICAgICAgZXhwbGFpbl9maWx0ZXIgICAgICAgICAgICAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgU2VxIFNjYW4gb24gYmF0Y2hfdGVzdCAoYWN0dWFsIHRpbWU9Ti5OLi5OLk4g cm93cz1OLk4gbG9vcHM9TikKKyBQbGFubmluZyBUaW1lOiBOLk4gbXMKKyBFeGVjdXRpb24gVGlt ZTogTi5OIG1zCisoMyByb3dzKQorCistLSBCYXRjaGluZyBkaXNhYmxlZDogbm8gYmF0Y2gga2V5 cyBpbiBKU09OCitzZWxlY3QKKyAgaiAjPiAnezAsUGxhbn0nID8gJ0JhdGNoZXMnIGFzIGhhc19i YXRjaGVzCitmcm9tIGV4cGxhaW5fZmlsdGVyX3RvX2pzb24oCisgICdleHBsYWluIChhbmFseXpl LCBiYXRjaGVzLCBidWZmZXJzIG9mZiwgZm9ybWF0IGpzb24pIHNlbGVjdCAqIGZyb20gYmF0Y2hf dGVzdCcKKykgYXMgajsKKyBoYXNfYmF0Y2hlcyAKKy0tLS0tLS0tLS0tLS0KKyBmCisoMSByb3cp CisKK3Jlc2V0IGV4ZWN1dG9yX2JhdGNoX3Jvd3M7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdy ZXNzL3NxbC9leHBsYWluLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2V4cGxhaW4uc3FsCmlu ZGV4IGViZGFiNDI2MDRiLi41NWFjYjkwNThjZSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVz cy9zcWwvZXhwbGFpbi5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZXhwbGFpbi5zcWwK QEAgLTE4OCwzICsxODgsNjIgQEAgc2VsZWN0IGV4cGxhaW5fZmlsdGVyKCdleHBsYWluIChhbmFs eXplLGJ1ZmZlcnMgb2ZmLGNvc3RzIG9mZikgc2VsZWN0IHN1bShuKSBvdmUKIC0tIFRlc3QgdHVw bGVzdG9yZSBzdG9yYWdlIHVzYWdlIGluIFdpbmRvdyBhZ2dyZWdhdGUgKG1lbW9yeSBhbmQgZGlz ayBjYXNlLCBmaW5hbCByZXN1bHQgaXMgZGlzaykKIHNlbGVjdCBleHBsYWluX2ZpbHRlcignZXhw bGFpbiAoYW5hbHl6ZSxidWZmZXJzIG9mZixjb3N0cyBvZmYpIHNlbGVjdCBzdW0obikgb3Zlcihw YXJ0aXRpb24gYnkgbSkgZnJvbSAoU0VMRUNUIG4gPCAzIGFzIG0sIG4gZnJvbSBnZW5lcmF0ZV9z ZXJpZXMoMSwyNTAwKSBhKG4pKScpOwogcmVzZXQgd29ya19tZW07CisKKy0tIFRlc3QgQkFUQ0hF UyBvcHRpb24KK3NldCBleGVjdXRvcl9iYXRjaF9yb3dzID0gNjQ7CisKK2NyZWF0ZSB0ZW1wIHRh YmxlIGJhdGNoX3Rlc3QgKGEgaW50LCBiIHRleHQpOworaW5zZXJ0IGludG8gYmF0Y2hfdGVzdCBz ZWxlY3QgaSwgcmVwZWF0KCd4JywgMTAwKSBmcm9tIGdlbmVyYXRlX3NlcmllcygxLCAxMDAwMCkg aTsKK2FuYWx5emUgYmF0Y2hfdGVzdDsKKworLS0gQkFUQ0hFUyB3aXRob3V0IEFOQUxZWkUgc2hv dWxkIGVycm9yCitleHBsYWluIChiYXRjaGVzLCBjb3N0cyBvZmYpIHNlbGVjdCAqIGZyb20gYmF0 Y2hfdGVzdDsKKworLS0gQkFUQ0hFUyB3aXRob3V0IEFOQUxZWkUgYnV0IHdpdGggb3RoZXIgb3B0 aW9ucworZXhwbGFpbiAoYmF0Y2hlcywgYnVmZmVycyBvZmYsIGNvc3RzIG9mZikgc2VsZWN0ICog ZnJvbSBiYXRjaF90ZXN0OworCistLSBCYXNpYzogdmVyaWZ5IGJhdGNoIHN0YXRzIGxpbmUgYXBw ZWFycyBpbiB0ZXh0IGZvcm1hdAorc2VsZWN0IGV4cGxhaW5fZmlsdGVyKCdleHBsYWluIChhbmFs eXplLCBiYXRjaGVzLCBidWZmZXJzIG9mZiwgY29zdHMgb2ZmKSBzZWxlY3QgKiBmcm9tIGJhdGNo X3Rlc3QnKTsKKworLS0gV2l0aCBmaWx0ZXI6IGJhdGNoIGxpbmUgc3RpbGwgYXBwZWFycworc2Vs ZWN0IGV4cGxhaW5fZmlsdGVyKCdleHBsYWluIChhbmFseXplLCBiYXRjaGVzLCBidWZmZXJzIG9m ZiwgY29zdHMgb2ZmKSBzZWxlY3QgKiBmcm9tIGJhdGNoX3Rlc3Qgd2hlcmUgYSA+IDUwMDAnKTsK KworLS0gV2l0aCBub24tYmF0Y2hhYmxlIHF1YWwgKE9SKTogYmF0Y2hpbmcgc3RpbGwgYWN0aXZl IGJ1dAorLS0gYmF0Y2ggcXVhbCBmYWxscyBiYWNrIHRvIHBlci10dXBsZSBFeGVjUXVhbAorc2Vs ZWN0IGV4cGxhaW5fZmlsdGVyKCdleHBsYWluIChhbmFseXplLCBiYXRjaGVzLCBidWZmZXJzIG9m ZiwgY29zdHMgb2ZmKSBzZWxlY3QgKiBmcm9tIGJhdGNoX3Rlc3Qgd2hlcmUgYSA+IDUwMDAgb3Ig YiBpcyBudWxsJyk7CisKKy0tIFdpdGggTElNSVQ6IGJhdGNoIHN0YXRzIGFwcGVhciBvbiBjaGls ZCBTZXEgU2NhbiBub2RlCitzZWxlY3QgZXhwbGFpbl9maWx0ZXIoJ2V4cGxhaW4gKGFuYWx5emUs IGJhdGNoZXMsIGJ1ZmZlcnMgb2ZmLCBjb3N0cyBvZmYpIHNlbGVjdCAqIGZyb20gYmF0Y2hfdGVz dCBsaW1pdCAxMDAnKTsKKworLS0gVmVyaWZ5IGJhdGNoIHN0YXRzIGtleXMgcHJlc2VudCBpbiBK U09OIG91dHB1dAorc2VsZWN0CisgIGogIz4gJ3swLFBsYW59JyA/ICdCYXRjaGVzJyBhcyBoYXNf YmF0Y2hlcywKKyAgaiAjPiAnezAsUGxhbn0nID8gJ0F2ZXJhZ2UgQmF0Y2ggUm93cycgYXMgaGFz X2F2ZywKKyAgaiAjPiAnezAsUGxhbn0nID8gJ01heCBCYXRjaCBSb3dzJyBhcyBoYXNfbWF4LAor ICBqICM+ICd7MCxQbGFufScgPyAnTWluIEJhdGNoIFJvd3MnIGFzIGhhc19taW4KK2Zyb20gZXhw bGFpbl9maWx0ZXJfdG9fanNvbigKKyAgJ2V4cGxhaW4gKGFuYWx5emUsIGJhdGNoZXMsIGJ1ZmZl cnMgb2ZmLCBmb3JtYXQganNvbikgc2VsZWN0ICogZnJvbSBiYXRjaF90ZXN0JworKSBhcyBqOwor CistLSBXaXRoIExJTUlUOiBiYXRjaCBzdGF0cyBrZXlzIG9uIGNoaWxkIG5vZGUgaW4gSlNPTgor c2VsZWN0CisgIGogIz4gJ3swLFBsYW4sUGxhbnMsMH0nID8gJ0JhdGNoZXMnIGFzIGNoaWxkX2hh c19iYXRjaGVzLAorICBqICM+ICd7MCxQbGFuLFBsYW5zLDB9JyA/ICdBdmVyYWdlIEJhdGNoIFJv d3MnIGFzIGNoaWxkX2hhc19hdmcsCisgIGogIz4gJ3swLFBsYW4sUGxhbnMsMH0nID8gJ01heCBC YXRjaCBSb3dzJyBhcyBjaGlsZF9oYXNfbWF4LAorICBqICM+ICd7MCxQbGFuLFBsYW5zLDB9JyA/ ICdNaW4gQmF0Y2ggUm93cycgYXMgY2hpbGRfaGFzX21pbgorZnJvbSBleHBsYWluX2ZpbHRlcl90 b19qc29uKAorICAnZXhwbGFpbiAoYW5hbHl6ZSwgYmF0Y2hlcywgYnVmZmVycyBvZmYsIGZvcm1h dCBqc29uKSBzZWxlY3QgKiBmcm9tIGJhdGNoX3Rlc3QgbGltaXQgMTAwJworKSBhcyBqOworCist LSBCYXRjaGluZyBkaXNhYmxlZDogbm8gYmF0Y2ggc3RhdHMgaW4gdGV4dCBvdXRwdXQKK3NldCBl eGVjdXRvcl9iYXRjaF9yb3dzID0gMDsKK3NlbGVjdCBleHBsYWluX2ZpbHRlcignZXhwbGFpbiAo YW5hbHl6ZSwgYmF0Y2hlcywgYnVmZmVycyBvZmYsIGNvc3RzIG9mZikgc2VsZWN0ICogZnJvbSBi YXRjaF90ZXN0Jyk7CisKKy0tIEJhdGNoaW5nIGRpc2FibGVkOiBubyBiYXRjaCBrZXlzIGluIEpT T04KK3NlbGVjdAorICBqICM+ICd7MCxQbGFufScgPyAnQmF0Y2hlcycgYXMgaGFzX2JhdGNoZXMK K2Zyb20gZXhwbGFpbl9maWx0ZXJfdG9fanNvbigKKyAgJ2V4cGxhaW4gKGFuYWx5emUsIGJhdGNo ZXMsIGJ1ZmZlcnMgb2ZmLCBmb3JtYXQganNvbikgc2VsZWN0ICogZnJvbSBiYXRjaF90ZXN0Jwor KSBhcyBqOworCityZXNldCBleGVjdXRvcl9iYXRjaF9yb3dzOwotLSAKMi40Ny4zCgo= --00000000000043db7e064ec97207 Content-Type: application/octet-stream; name="v7-0002-Add-RowBatch-infrastructure-for-batched-tuple-pro.patch" Content-Disposition: attachment; filename="v7-0002-Add-RowBatch-infrastructure-for-batched-tuple-pro.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnn54uat3 RnJvbSA4MTVkMDAxZGNjN2EyY2RhNTBlM2Q1NTUyMmJmYWYzMGFkN2ZjZWVlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFRodSwgNSBNYXIgMjAyNiAxNzo0MjoxOSArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjcg Mi81XSBBZGQgUm93QmF0Y2ggaW5mcmFzdHJ1Y3R1cmUgZm9yIGJhdGNoZWQgdHVwbGUKIHByb2Nl c3NpbmcKCkludHJvZHVjZSBSb3dCYXRjaCwgYSBkYXRhIGNhcnJpZXIgdGhhdCBhbGxvd3MgdGFi bGUgQU1zIHRvIGRlbGl2ZXIKbXVsdGlwbGUgcm93cyBwZXIgY2FsbCBhbmQgdGhlIGV4ZWN1dG9y IHRvIHByb2Nlc3MgdGhlbSBhcyBhIGdyb3VwLgoKUm93QmF0Y2ggc2VwYXJhdGVzIHRocmVlIGNv bmNlcm5zOgoKICAtIGFtX3BheWxvYWQ6IG9wYXF1ZSwgQU0tb3duZWQgc3RvcmFnZSAoZS5nLiBI ZWFwQmF0Y2ggd2l0aCBwaW5uZWQKICAgIHBhZ2UgYW5kIHR1cGxlIGhlYWRlcnMpLiAgVGhlIEFN IGFsbG9jYXRlcyB0aGlzIGluIGl0cwogICAgc2Nhbl9iZWdpbl9iYXRjaCBjYWxsYmFjay4KCiAg LSBzbG90c1tdOiBUdXBsZVRhYmxlU2xvdCBhcnJheSwgY3JlYXRlZCBieSBSb3dCYXRjaENyZWF0 ZVNsb3RzKCkKICAgIHdpdGggQU0tYXBwcm9wcmlhdGUgc2xvdCBvcHMuICBQb3B1bGF0ZWQgZnJv bSBhbV9wYXlsb2FkIGJ5CiAgICBvcHMtPm1hdGVyaWFsaXplX2ludG9fc2xvdHMgd2hlbiB0aGUg ZXhlY3V0b3IgbmVlZHMgdHVwbGUgZGF0YS4KCiAgLSBtYXhfcm93czogZXhlY3V0b3Itc2V0IHVw cGVyIGJvdW5kIHRoYXQgdGhlIEFNIHJlc3BlY3RzIHdoZW4KICAgIGZpbGxpbmcgYSBiYXRjaC4K ClJvd0JhdGNoIGRvZXMgbm90IG93biBzZWxlY3Rpb24vZmlsdGVyaW5nIHN0YXRlLiAgV2hpY2gg cm93cyBzdXJ2aXZlCnF1YWwgZXZhbHVhdGlvbiBpcyB0aGUgZXhlY3V0b3IncyBjb25jZXJuLCB0 cmFja2VkIHNlcGFyYXRlbHkgaW4Kc2NhbiBub2RlIHN0YXRlLiAgVGhpcyBrZWVwcyBSb3dCYXRj aCBmb2N1c2VkIG9uIHRoZSBBTS10by1leGVjdXRvcgpkYXRhIHRyYW5zZmVyIGJvdW5kYXJ5LgoK Um93QmF0Y2hPcHMgcHJvdmlkZXMgYSB2dGFibGUgZm9yIEFNLXNwZWNpZmljIG9wZXJhdGlvbnM7 IGN1cnJlbnRseQpvbmx5IG1hdGVyaWFsaXplX2ludG9fc2xvdHMgaXMgZGVmaW5lZC4KLS0tCiBz cmMvYmFja2VuZC9leGVjdXRvci9NYWtlZmlsZSAgICAgICB8ICAxICsKIHNyYy9iYWNrZW5kL2V4 ZWN1dG9yL2V4ZWNSb3dCYXRjaC5jIHwgNTQgKysrKysrKysrKysrKysrKysrCiBzcmMvYmFja2Vu ZC9leGVjdXRvci9tZXNvbi5idWlsZCAgICB8ICAxICsKIHNyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4 ZWNSb3dCYXRjaC5oIHwgODggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIHNyYy90b29s cy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgIHwgIDIgKwogNSBmaWxlcyBjaGFuZ2VkLCAxNDYg aW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4 ZWNSb3dCYXRjaC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhl Y1Jvd0JhdGNoLmgKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9NYWtlZmlsZSBi L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL01ha2VmaWxlCmluZGV4IDExMTE4ZDBjZTAyLi45OWEwMGU3 NjJmNiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvTWFrZWZpbGUKKysrIGIvc3Jj L2JhY2tlbmQvZXhlY3V0b3IvTWFrZWZpbGUKQEAgLTE1LDYgKzE1LDcgQEAgaW5jbHVkZSAkKHRv cF9idWlsZGRpcikvc3JjL01ha2VmaWxlLmdsb2JhbAogT0JKUyA9IFwKIAlleGVjQW1pLm8gXAog CWV4ZWNBc3luYy5vIFwKKwlleGVjUm93QmF0Y2gubyBcCiAJZXhlY0N1cnJlbnQubyBcCiAJZXhl Y0V4cHIubyBcCiAJZXhlY0V4cHJJbnRlcnAubyBcCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9l eGVjdXRvci9leGVjUm93QmF0Y2guYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNSb3dCYXRj aC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42YTI5ODgxM2JkOAot LS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNSb3dCYXRjaC5jCkBA IC0wLDAgKzEsNTQgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGV4ZWNSb3dCYXRjaC5j CisgKgkJSGVscGVycyBmb3IgUm93QmF0Y2gKKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMp IDE5OTYtMjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRp b25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxp Zm9ybmlhCisgKgorICogSURFTlRJRklDQVRJT04KKyAqCSAgc3JjL2JhY2tlbmQvZXhlY3V0b3Iv ZXhlY1Jvd0JhdGNoLmMKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpbmNsdWRlICJwb3N0 Z3Jlcy5oIgorCisjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY1Jvd0JhdGNoLmgiCisKKy8qCisgKiBS b3dCYXRjaENyZWF0ZQorICoJCUFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGEgbmV3IFJvd0JhdGNo IGVudmVsb3BlLgorICovCitSb3dCYXRjaCAqCitSb3dCYXRjaENyZWF0ZShpbnQgbWF4X3Jvd3Mp Cit7CisJUm93QmF0Y2ggICAqYjsKKworCUFzc2VydChtYXhfcm93cyA+IDApOworCisJYiA9IHBh bGxvYyhzaXplb2YoUm93QmF0Y2gpKTsKKwliLT5hbV9wYXlsb2FkID0gTlVMTDsKKwliLT5vcHMg PSBOVUxMOworCWItPm1heF9yb3dzID0gbWF4X3Jvd3M7CisJYi0+bnJvd3MgPSAwOworCWItPnBv cyA9IDA7CisJYi0+bWF0ZXJpYWxpemVkID0gZmFsc2U7CisJYi0+c2xvdCA9IE5VTEw7CisKKwly ZXR1cm4gYjsKK30KKworLyoKKyAqIFJvd0JhdGNoUmVzZXQKKyAqCQlSZXNldCBhbiBleGlzdGlu ZyBSb3dCYXRjaCBlbnZlbG9wZSB0byBlbXB0eS4KKyAqLwordm9pZAorUm93QmF0Y2hSZXNldChS b3dCYXRjaCAqYiwgYm9vbCBkcm9wX3Nsb3RzKQoreworCUFzc2VydChiICE9IE5VTEwpOworCisJ Yi0+bnJvd3MgPSAwOworCWItPnBvcyA9IDA7CisJYi0+bWF0ZXJpYWxpemVkID0gZmFsc2U7CisJ LyogYi0+c2xvdCBiZWxvbmdzIHRvIHRoZSBvd25pbmcgUGxhblN0YXRlIG5vZGUgKi8KK30KZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL21lc29uLmJ1aWxkIGIvc3JjL2JhY2tlbmQv ZXhlY3V0b3IvbWVzb24uYnVpbGQKaW5kZXggZGM0NWJlMGIyY2UuLmZkMGJmODBiYWNkIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9tZXNvbi5idWlsZAorKysgYi9zcmMvYmFja2Vu ZC9leGVjdXRvci9tZXNvbi5idWlsZApAQCAtMyw2ICszLDcgQEAKIGJhY2tlbmRfc291cmNlcyAr PSBmaWxlcygKICAgJ2V4ZWNBbWkuYycsCiAgICdleGVjQXN5bmMuYycsCisgICdleGVjUm93QmF0 Y2guYycsCiAgICdleGVjQ3VycmVudC5jJywKICAgJ2V4ZWNFeHByLmMnLAogICAnZXhlY0V4cHJJ bnRlcnAuYycsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjUm93QmF0Y2gu aCBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNSb3dCYXRjaC5oCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wMjFmZGVlY2M3MwotLS0gL2Rldi9udWxsCisrKyBiL3Ny Yy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNSb3dCYXRjaC5oCkBAIC0wLDAgKzEsODggQEAKKy8qLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICoKKyAqIGV4ZWNSb3dCYXRjaC5oCisgKgkJRXhlY3V0b3IgYmF0Y2gg ZW52ZWxvcGUgZm9yIHBhc3Npbmcgcm93IGJhdGNoIHN0YXRlIHVwd2FyZAorICoKKyAqIFBvcnRp b25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDI2LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVu dCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBV bml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICBzcmMv aW5jbHVkZS9leGVjdXRvci9leGVjUm93QmF0Y2guaAorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8K KyNpZm5kZWYgRVhFQ1JPV0JBVENIX0gKKyNkZWZpbmUgRVhFQ1JPV0JBVENIX0gKKworI2luY2x1 ZGUgImV4ZWN1dG9yL3R1cHRhYmxlLmgiCisKK3R5cGVkZWYgc3RydWN0IFJvd0JhdGNoT3BzIFJv d0JhdGNoT3BzOworCisvKgorICogUm93QmF0Y2gKKyAqCisgKiBEYXRhIGNhcnJpZXIgZnJvbSB0 YWJsZSBBTSB0byBleGVjdXRvci4gVGhlIEFNIHBvcHVsYXRlcyBhbV9wYXlsb2FkCisgKiBhbmQg bnJvd3MgdmlhIHNjYW5fZ2V0bmV4dGJhdGNoKCkuIFRoZSBleGVjdXRvciBjYWxscyBvcHMtPm1h dGVyaWFsaXplX2FsbAorICogdG8gcG9wdWxhdGUgc2xvdHNbXSB3aGVuIGl0IG5lZWRzIHR1cGxl IGRhdGEuCisgKgorICogU2VsZWN0aW9uIHN0YXRlICh3aGljaCByb3dzIHN1cnZpdmVkIHF1YWwg ZXZhbCkgaXMgb3duZWQgYnkgdGhlIGV4ZWN1dG9yLAorICogbm90IHRoZSBiYXRjaC4KKyAqLwor dHlwZWRlZiBzdHJ1Y3QgUm93QmF0Y2gKK3sKKwl2b2lkCSAgICphbV9wYXlsb2FkOworCWNvbnN0 IFJvd0JhdGNoT3BzICpvcHM7CisKKwlpbnQJCQltYXhfcm93czsJCQkvKiBleGVjdXRvci1zZXQg dXBwZXIgYm91bmQgKi8KKwlpbnQJCQlucm93czsJCQkJLyogcm93cyBUQU0gcHV0IGluICovCisJ aW50CQkJcG9zOwkJCQkvKiBpdGVyYXRpb24gcG9zaXRpb24gKi8KKwlib29sCQltYXRlcmlhbGl6 ZWQ7CQkvKiB0dXBsZXMgaW4gc2xvdHMgdmFsaWQ/ICovCisKKwlUdXBsZVRhYmxlU2xvdCAqc2xv dDsJCQkvKiByb3cgdmlldyAqLworfSBSb3dCYXRjaDsKKworLyoKKyAqIFJvd0JhdGNoT3BzIC0t IEFNLXNwZWNpZmljIG9wZXJhdGlvbnMgb24gYSBSb3dCYXRjaC4KKyAqCisgKiBUYWJsZSBBTXMg c2V0IGItPm9wcyBkdXJpbmcgc2Nhbl9iZWdpbl9iYXRjaCB0byBwcm92aWRlCisgKiBjYWxsYmFj a3MgdGhhdCB0aGUgZXhlY3V0b3IgdXNlcyB0byBhY2Nlc3MgYmF0Y2ggY29udGVudHMuCisgKgor ICogcmVwb2ludF9zbG90IHJlLXBvaW50cyB0aGUgYmF0Y2gncyBzaW5nbGUgc2xvdCB0byB0aGUg dHVwbGUgYXQKKyAqIGluZGV4IGlkeCB3aXRoaW4gdGhlIGN1cnJlbnQgYmF0Y2guICBUaGUgc2xv dCByZW1haW5zIHZhbGlkIHVudGlsCisgKiB0aGUgbmV4dCBjYWxsIG9yIHVudGlsIHRoZSBiYXRj aCBpcyBleGhhdXN0ZWQuCisgKgorICogQWRkaXRpb25hbCBjYWxsYmFja3MgY2FuIGJlIGFkZGVk IGhlcmUgYXMgbmV3IEFNcyBvciBleGVjdXRvcgorICogZmVhdHVyZXMgcmVxdWlyZSB0aGVtLgor ICovCit0eXBlZGVmIHN0cnVjdCBSb3dCYXRjaE9wcworeworCXZvaWQJCSgqcmVwb2ludF9zbG90 KSAoUm93QmF0Y2ggKmIsIGludCBpZHgpOworfSBSb3dCYXRjaE9wczsKKworLyogQ3JlYXRlL3Rl YXJkb3duICovCitleHRlcm4gUm93QmF0Y2ggKlJvd0JhdGNoQ3JlYXRlKGludCBtYXhfcm93cyk7 CitleHRlcm4gdm9pZCBSb3dCYXRjaFJlc2V0KFJvd0JhdGNoICpiLCBib29sIGRyb3Bfc2xvdHMp OworCisvKiBWYWxpZGF0aW9uICovCitzdGF0aWMgaW5saW5lIGJvb2wKK1Jvd0JhdGNoSXNWYWxp ZChSb3dCYXRjaCAqYikKK3sKKwlyZXR1cm4gYiAhPSBOVUxMICYmIGItPm1heF9yb3dzID4gMDsK K30KKworLyogSXRlcmF0aW9uIG92ZXIgbWF0ZXJpYWxpemVkIHNsb3RzICovCitzdGF0aWMgaW5s aW5lIGJvb2wKK1Jvd0JhdGNoSGFzTW9yZShSb3dCYXRjaCAqYikKK3sKKwlyZXR1cm4gYi0+cG9z IDwgYi0+bnJvd3M7Cit9CisKK3N0YXRpYyBpbmxpbmUgVHVwbGVUYWJsZVNsb3QgKgorUm93QmF0 Y2hHZXROZXh0U2xvdChSb3dCYXRjaCAqYikKK3sKKwlpZiAoYi0+cG9zID49IGItPm5yb3dzKQor CQlyZXR1cm4gTlVMTDsKKwliLT5vcHMtPnJlcG9pbnRfc2xvdChiLCBiLT5wb3MrKyk7CisJcmV0 dXJuIGItPnNsb3Q7Cit9CisKKyNlbmRpZgkvKiBFWEVDUk9XQkFUQ0hfSCAqLwpkaWZmIC0tZ2l0 IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQv dHlwZWRlZnMubGlzdAppbmRleCAzNWFjZGE1OTg1MS4uZTVjMTcyNjI4YjMgMTAwNjQ0Ci0tLSBh L3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVu dC90eXBlZGVmcy5saXN0CkBAIC0yNjk0LDYgKzI2OTQsOCBAQCBSb2xlU3BlYwogUm9sZVNwZWNU eXBlCiBSb2xlU3RtdFR5cGUKIFJvbGx1cERhdGEKK1Jvd0JhdGNoCitSb3dCYXRjaE9wcwogUm93 Q29tcGFyZUV4cHIKIFJvd0V4cHIKIFJvd0lkZW50aXR5VmFySW5mbwotLSAKMi40Ny4zCgo= --00000000000043db7e064ec97207 Content-Type: application/octet-stream; name="v7-0003-Add-batch-table-AM-API-and-heapam-implementation.patch" Content-Disposition: attachment; filename="v7-0003-Add-batch-table-AM-API-and-heapam-implementation.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnn54uan2 RnJvbSBkZDEyMmYwOTEzYWZmYmFmZTk1ZWU0ZmM3OWViNjU2YjQ4MmZlMWUwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IE1vbiwgMjMgTWFyIDIwMjYgMTg6MjE6NDcgKzA5MDAKU3ViamVjdDogW1BBVENIIHY3 IDMvNV0gQWRkIGJhdGNoIHRhYmxlIEFNIEFQSSBhbmQgaGVhcGFtIGltcGxlbWVudGF0aW9uCgpJ bnRyb2R1Y2UgdGFibGUgQU0gY2FsbGJhY2tzIGZvciBiYXRjaGVkIHR1cGxlIGZldGNoaW5nOgpz Y2FuX2JlZ2luX2JhdGNoLCBzY2FuX2dldG5leHRiYXRjaCwgc2Nhbl9yZXNldF9iYXRjaCwgYW5k CnNjYW5fZW5kX2JhdGNoLiAgQU1zIGltcGxlbWVudCBhbGwgZm91ciBvciBub25lOyBjaGVja2Vk IGJ5CnRhYmxlX3N1cHBvcnRzX2JhdGNoaW5nKCkuCgpzY2FuX3Jlc2V0X2JhdGNoIHJlbGVhc2Vz IGhlbGQgcmVzb3VyY2VzIChlLmcuIGJ1ZmZlciBwaW5zKQp3aXRob3V0IGZyZWVpbmcsIGFsbG93 aW5nIHJldXNlIGFjcm9zcyByZXNjYW5zLgoKUHJvdmlkZSB0aGUgaGVhcGFtIGltcGxlbWVudGF0 aW9uLiAgSGVhcFBhZ2VCYXRjaCAoc3RvcmVkIGluClJvd0JhdGNoLmFtX3BheWxvYWQpIGlzIGEg dGhpbiBzbGljZSBkZXNjcmlwdG9yIG92ZXIgdGhlIHNjYW4ncwpyc192aXN0dXBsZXNbXSBhcnJh eSwgd2hpY2ggd2FzIGludHJvZHVjZWQgaW4gdGhlIHByZXZpb3VzIGNvbW1pdC4KUmF0aGVyIHRo YW4gb3duaW5nIGEgY29weSBvZiB0dXBsZSBoZWFkZXJzLCBIZWFwUGFnZUJhdGNoIGhvbGRzIGEK cG9pbnRlciBpbnRvIHNjYW4tPnJzX3Zpc3R1cGxlc1tdIGZvciB0aGUgY3VycmVudCBzbGljZSBh bmQgYSBidWZmZXIKcGluIGZvciB0aGUgY3VycmVudCBwYWdlLgoKaGVhcF9nZXRuZXh0YmF0Y2go KSBjYWxscyBoZWFwX3ByZXBhcmVfcGFnZXNjYW4oKSB0byBwb3B1bGF0ZQpyc192aXN0dXBsZXNb XSBmb3IgZWFjaCBuZXcgcGFnZSwgdGhlbiByZS1wb2ludHMgaGItPnR1cGxlcyB0byB0aGUKbmV4 dCBzbGljZSBvZiByc192aXN0dXBsZXNbXSBvbiBlYWNoIGNhbGwuICBJZiB0aGUgcGFnZSBoYXMg bW9yZQp0dXBsZXMgdGhhbiB0aGUgZXhlY3V0b3IncyBtYXhfcm93cywgc3Vic2VxdWVudCBjYWxs cyByZXR1cm4gdGhlCm5leHQgc2xpY2Ugd2l0aG91dCByZS1lbnRlcmluZyBwYWdlIHByZXBhcmF0 aW9uLiAgVGhlIGJ1ZmZlciBwaW4gaXMKaGVsZCB1bnRpbCB0aGUgcGFnZSBpcyBmdWxseSBjb25z dW1lZC4KCnNjYW5fYmVnaW5fYmF0Y2ggY3JlYXRlcyBhIHNpbmdsZSBUdXBsZVRhYmxlU2xvdCB3 aXRoClRUU09wc0J1ZmZlckhlYXBUdXBsZSBvcHMuICBoZWFwX3JlcG9pbnRfc2xvdCgpIHJlLXBv aW50cyB0aGlzIHNsb3QKdG8gZWFjaCB0dXBsZSBpbiB0dXJuIHZpYSBFeGVjU3RvcmVCdWZmZXJI ZWFwVHVwbGUoKS4gIENvbnN1bWVycwp0aGF0IG5lZWQgdG8gcmV0YWluIHRoZSBzbG90IGFjcm9z cyBjYWxscyByZWx5IG9uIHRoZSBub3JtYWwgc2xvdAptYXRlcmlhbGl6YXRpb24gY29udHJhY3Qu CgpSZXZpZXdlZC1ieTogRGFuaWlsIERhdnlkb3YgPDNkYW5pc3NpbW9AZ21haWwuY29tPgpSZXZp ZXdlZC1ieTogQ2hhbmdBbyBDaGVuIDwyNjI0MzQ1NTA3QHFxLmNvbT4KRGlzY3Vzc2lvbjogaHR0 cHM6Ly9wb3N0Z3IuZXMvbS9DQStIaXdxRmZBWV9aRnFOOHdjQUVNdzcxVDloTV9rQThVdHlIYVpa RVp0dVQzVXlvZ0FAbWFpbC5nbWFpbC5jb20KLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9o ZWFwYW0uYyAgICAgICAgIHwgMjI5ICsrKysrKysrKysrKysrKysrKysrKystCiBzcmMvYmFja2Vu ZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jIHwgICA4ICstCiBzcmMvaW5jbHVkZS9hY2Nl c3MvaGVhcGFtLmggICAgICAgICAgICAgIHwgIDMzICsrKysKIHNyYy9pbmNsdWRlL2FjY2Vzcy90 YWJsZWFtLmggICAgICAgICAgICAgfCAxMzYgKysrKysrKysrKysrKysKIHNyYy9pbmNsdWRlL3Bn c3RhdC5oICAgICAgICAgICAgICAgICAgICAgfCAgIDQgKy0KIDUgZmlsZXMgY2hhbmdlZCwgNDAz IGluc2VydGlvbnMoKyksIDcgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv YWNjZXNzL2hlYXAvaGVhcGFtLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW0uYwpp bmRleCBiNzBjNzVjODI4OC4uZDQ1ZjUwOWZhNmIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9oZWFwL2hlYXBhbS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5j CkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19kYXRhYmFzZS5oIgogI2lu Y2x1ZGUgImNhdGFsb2cvcGdfZGF0YWJhc2VfZC5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3ZhY3V1 bS5oIgorI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWNSb3dCYXRjaC5oIgogI2luY2x1ZGUgInBnc3Rh dC5oIgogI2luY2x1ZGUgInBvcnQvcGdfYml0dXRpbHMuaCIKICNpbmNsdWRlICJzdG9yYWdlL2xt Z3IuaCIKQEAgLTEwOSw2ICsxMTAsNyBAQCBzdGF0aWMgaW50CWJvdHRvbXVwX3NvcnRfYW5kX3No cmluayhUTV9JbmRleERlbGV0ZU9wICpkZWxzdGF0ZSk7CiBzdGF0aWMgWExvZ1JlY1B0ciBsb2df aGVhcF9uZXdfY2lkKFJlbGF0aW9uIHJlbGF0aW9uLCBIZWFwVHVwbGUgdHVwKTsKIHN0YXRpYyBI ZWFwVHVwbGUgRXh0cmFjdFJlcGxpY2FJZGVudGl0eShSZWxhdGlvbiByZWxhdGlvbiwgSGVhcFR1 cGxlIHRwLCBib29sIGtleV9yZXF1aXJlZCwKIAkJCQkJCQkJCQlib29sICpjb3B5KTsKK3N0YXRp YyB2b2lkIGhlYXBfcmVwb2ludF9zbG90KFJvd0JhdGNoICpiLCBpbnQgaWR4KTsKIAogCiAvKgpA QCAtMTIxNCw3ICsxMjE2LDcgQEAgaGVhcF9iZWdpbnNjYW4oUmVsYXRpb24gcmVsYXRpb24sIFNu YXBzaG90IHNuYXBzaG90LAogCXNjYW4tPnJzX2NidWYgPSBJbnZhbGlkQnVmZmVyOwogCiAJLyoK LQkgKiBEaXNhYmxlIHBhZ2UtYXQtYS10aW1lIG1vZGUgaWYgaXQncyBub3QgYSBNVkNDLXNhZmUg c25hcHNob3QuCisJICogRGlzYWJsZSBwYWdlLWF0LWEtdGltZSBtb2RlIGlmIHRoZSBzbmFwc2hv dCBkb2VzIG5vdCBhbGxvdyBpdC4KIAkgKi8KIAlpZiAoIShzbmFwc2hvdCAmJiBJc01WQ0NTbmFw c2hvdChzbmFwc2hvdCkpKQogCQlzY2FuLT5yc19iYXNlLnJzX2ZsYWdzICY9IH5TT19BTExPV19Q QUdFTU9ERTsKQEAgLTE0NjQsNyArMTQ2Niw3IEBAIGhlYXBfZ2V0bmV4dChUYWJsZVNjYW5EZXNj IHNzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbikKIAkgKiB0aGUgcHJvcGVyIHJldHVybiBi dWZmZXIgYW5kIHJldHVybiB0aGUgdHVwbGUuCiAJICovCiAKLQlwZ3N0YXRfY291bnRfaGVhcF9n ZXRuZXh0KHNjYW4tPnJzX2Jhc2UucnNfcmQpOworCXBnc3RhdF9jb3VudF9oZWFwX2dldG5leHQo c2Nhbi0+cnNfYmFzZS5yc19yZCwgMSk7CiAKIAlyZXR1cm4gJnNjYW4tPnJzX2N0dXA7CiB9CkBA IC0xNDkyLDEzICsxNDk0LDIzMiBAQCBoZWFwX2dldG5leHRzbG90KFRhYmxlU2NhbkRlc2Mgc3Nj YW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLCBUdXBsZVRhYmxlU2xvdCAqcwogCSAqIHRoZSBw cm9wZXIgcmV0dXJuIGJ1ZmZlciBhbmQgcmV0dXJuIHRoZSB0dXBsZS4KIAkgKi8KIAotCXBnc3Rh dF9jb3VudF9oZWFwX2dldG5leHQoc2Nhbi0+cnNfYmFzZS5yc19yZCk7CisJcGdzdGF0X2NvdW50 X2hlYXBfZ2V0bmV4dChzY2FuLT5yc19iYXNlLnJzX3JkLCAxKTsKIAogCUV4ZWNTdG9yZUJ1ZmZl ckhlYXBUdXBsZSgmc2Nhbi0+cnNfY3R1cCwgc2xvdCwKIAkJCQkJCQkgc2Nhbi0+cnNfY2J1Zik7 CiAJcmV0dXJuIHRydWU7CiB9CiAKKy8qLS0tLS0tLS0tLSBCYXRjaGluZyBzdXBwb3J0IC0tLS0t LS0tLS0tKi8KKworc3RhdGljIGNvbnN0IFJvd0JhdGNoT3BzIFJvd0JhdGNoSGVhcE9wcyA9Cit7 CisJLnJlcG9pbnRfc2xvdCA9IGhlYXBfcmVwb2ludF9zbG90Cit9OworCisvKgorICogaGVhcF9i YXRjaF9mZWFzaWJsZQorICoJCUJhdGNoaW5nIHJlcXVpcmVzIGEgTVZDQyBzbmFwc2hvdCBzaW5j ZSBpdCByZWxpZXMgb24KKyAqCQlwYWdlLWF0LWEtdGltZSBtb2RlLCB3aGljaCBoZWFwX2JlZ2lu c2NhbigpIGRpc2FibGVzIGZvcgorICoJCW5vbi1NVkNDIHNuYXBzaG90cy4KKyAqLworYm9vbAor aGVhcF9iYXRjaF9mZWFzaWJsZShSZWxhdGlvbiByZWxhdGlvbiwgU25hcHNob3Qgc25hcHNob3Qp Cit7CisJcmV0dXJuIHNuYXBzaG90ICYmIElzTVZDQ1NuYXBzaG90KHNuYXBzaG90KTsKK30KKwor LyoKKyAqIGhlYXBfYmVnaW5fYmF0Y2gKKyAqCQlJbml0aWFsaXplIEFNLXNpZGUgYmF0Y2ggc3Rh dGUgZm9yIGEgaGVhcCBzY2FuLgorICoKKyAqIEFsbG9jYXRlcyBhIEhlYXBQYWdlQmF0Y2gsIHdo aWNoIGFjdHMgYXMgYSB0aGluIHNsaWNlIGRlc2NyaXB0b3Igb3ZlcgorICogdGhlIHNjYW4ncyBy c192aXN0dXBsZXNbXSBhcnJheS4gIFVubGlrZSB0aGUgcHJldmlvdXMgdmVyc2lvbiB0aGVyZSBp cworICogbm8gc2VwYXJhdGUgdHVwbGUgaGVhZGVyIHN0b3JhZ2UgaW4gSGVhcFBhZ2VCYXRjaCBp dHNlbGY7IHJzX3Zpc3R1cGxlc1tdCisgKiBpbiBIZWFwU2NhbkRlc2NEYXRhIChwb3B1bGF0ZWQg YnkgcGFnZV9jb2xsZWN0X3R1cGxlcygpIHZpYQorICogaGVhcF9wcmVwYXJlX3BhZ2VzY2FuKCkp IHNlcnZlcyBhcyB0aGUgcGFnZS1sZXZlbCBidWZmZXIuICBIZWFwUGFnZUJhdGNoCisgKiBob2xk cyBhIHBvaW50ZXIgaW50byB0aGF0IGFycmF5IGZvciB0aGUgY3VycmVudCBzbGljZSBhbmQgdGhl IGJ1ZmZlciBwaW4KKyAqIGZvciB0aGUgY3VycmVudCBwYWdlLgorICoKKyAqIGItPnNsb3QgbXVz dCBiZSBhIFRUU09wc0J1ZmZlckhlYXBUdXBsZSBzbG90LgorICovCit2b2lkCitoZWFwX2JlZ2lu X2JhdGNoKFRhYmxlU2NhbkRlc2Mgc3NjYW4sIFJvd0JhdGNoICpiKQoreworCUhlYXBQYWdlQmF0 Y2ggICpoYjsKKworCS8qIEJhdGNoIHBhdGggcmVsaWVzIG9uIGV4ZWN1dG9yLWxldmVsIHF1YWwg ZXZhbCwgbm90IEFNIHNjYW4ga2V5cyAqLworCUFzc2VydChzc2Nhbi0+cnNfbmtleXMgPT0gMCk7 CisJQXNzZXJ0KFRUU19JU19CVUZGRVJUVVBMRShiLT5zbG90KSk7CisKKwloYiA9IHBhbGxvYyhz aXplb2YoSGVhcFBhZ2VCYXRjaCkpOworCWhiLT50dXBsZXMgPSBOVUxMOworCWhiLT5udHVwbGVz ID0gMDsKKwloYi0+bmV4dGl0ZW0gPSAwOworCWhiLT5idWYgPSBJbnZhbGlkQnVmZmVyOworCisJ Yi0+YW1fcGF5bG9hZCA9IGhiOworCWItPm9wcyA9ICZSb3dCYXRjaEhlYXBPcHM7Cit9CisKKy8q CisgKiBoZWFwX3Jlc2V0X2JhdGNoCisgKgkJUmVsZWFzZSBwaW4gYW5kIHJlc2V0IGZvciByZXNj YW4sIGtlZXBpbmcgYWxsb2NhdGlvbnMuCisgKi8KK3ZvaWQKK2hlYXBfcmVzZXRfYmF0Y2goVGFi bGVTY2FuRGVzYyBzc2NhbiwgUm93QmF0Y2ggKmIpCit7CisJSGVhcFBhZ2VCYXRjaCAgKmhiID0g KEhlYXBQYWdlQmF0Y2ggKikgYi0+YW1fcGF5bG9hZDsKKworCUFzc2VydChoYiAhPSBOVUxMKTsK KwlpZiAoQnVmZmVySXNWYWxpZChoYi0+YnVmKSkKKwl7CisJCVJlbGVhc2VCdWZmZXIoaGItPmJ1 Zik7CisJCWhiLT5idWYgPSBJbnZhbGlkQnVmZmVyOworCX0KKwloYi0+bnR1cGxlcyA9IDA7CisJ aGItPm5leHRpdGVtID0gMDsKK30KKworLyoKKyAqIGhlYXBfZW5kX2JhdGNoCisgKgkJUmVsZWFz ZSBhbGwgYmF0Y2ggcmVzb3VyY2VzLgorICovCit2b2lkCitoZWFwX2VuZF9iYXRjaChUYWJsZVNj YW5EZXNjIHNzY2FuLCBSb3dCYXRjaCAqYikKK3sKKwlIZWFwUGFnZUJhdGNoICAqaGIgPSAoSGVh cFBhZ2VCYXRjaCAqKSBiLT5hbV9wYXlsb2FkOworCisJaWYgKEJ1ZmZlcklzVmFsaWQoaGItPmJ1 ZikpCisJCVJlbGVhc2VCdWZmZXIoaGItPmJ1Zik7CisKKwlwZnJlZShoYik7CisJYi0+YW1fcGF5 bG9hZCA9IE5VTEw7Cit9CisKKy8qCisgKiBoZWFwX2dldG5leHRiYXRjaAorICoJCUZldGNoIHRo ZSBuZXh0IHNsaWNlIG9mIHZpc2libGUgdHVwbGVzIGZyb20gYSBoZWFwIHNjYW4uCisgKgorICog U2VydmVzIHNsaWNlcyBmcm9tIHRoZSBjdXJyZW50IHBhZ2UncyByc192aXN0dXBsZXNbXSBhcnJh eS4gIElmIHRoZQorICogY3VycmVudCBwYWdlIGhhcyByZW1haW5pbmcgdHVwbGVzLCBzZXRzIGhi LT50dXBsZXMgdG8gcG9pbnQgYXQgdGhlIG5leHQKKyAqIHNsaWNlIHdpdGhvdXQgcmUtZW50ZXJp bmcgdGhlIHBhZ2Ugc2Nhbi4gIElmIHRoZSBwYWdlIGlzIGV4aGF1c3RlZCwKKyAqIGFkdmFuY2Vz IHRvIHRoZSBuZXh0IHBhZ2UgdmlhIGhlYXBfZmV0Y2hfbmV4dF9idWZmZXIoKSwgcHJlcGFyZXMg aXQKKyAqIHdpdGggaGVhcF9wcmVwYXJlX3BhZ2VzY2FuKCksIGFuZCBzZXJ2ZXMgdGhlIGZpcnN0 IHNsaWNlIGZyb20gaXQuCisgKgorICogaGItPnR1cGxlcyBwb2ludHMgZGlyZWN0bHkgaW50byBz Y2FuLT5yc192aXN0dXBsZXNbXTsgdGhlIGVudHJpZXMgcmVtYWluCisgKiB2YWxpZCBhcyBsb25n IGFzIGhiLT5idWYgKHRoZSBwYWdlJ3MgYnVmZmVyIHBpbikgaXMgaGVsZC4gIFRoZSBwaW4gaXMK KyAqIHJlbGVhc2VkIGF0IHRoZSB0b3Agb2YgdGhlIG5leHQgY2FsbCBvbmNlIHRoZSBwYWdlIGlz IGZ1bGx5IGNvbnN1bWVkLgorICoKKyAqIEVhY2ggY2FsbCByZXR1cm5zIGF0IG1vc3QgYi0+bWF4 X3Jvd3MgdHVwbGVzLgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0dXBsZXMgd2VyZSBmZXRjaGVk LCBmYWxzZSBhdCBlbmQgb2Ygc2Nhbi4KKyAqLworYm9vbAoraGVhcF9nZXRuZXh0YmF0Y2goVGFi bGVTY2FuRGVzYyBzc2NhbiwgUm93QmF0Y2ggKmIsIFNjYW5EaXJlY3Rpb24gZGlyKQoreworCUhl YXBTY2FuRGVzYwlzY2FuID0gKEhlYXBTY2FuRGVzYykgc3NjYW47CisJSGVhcFBhZ2VCYXRjaCAg KmhiID0gKEhlYXBQYWdlQmF0Y2ggKikgYi0+YW1fcGF5bG9hZDsKKwlpbnQJCQkJcmVtYWluaW5n OworCWludAkJCQluc2VydmU7CisKKwlBc3NlcnQoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIp KTsKKwlBc3NlcnQoc3NjYW4tPnJzX2ZsYWdzICYgU09fQUxMT1dfUEFHRU1PREUpOworCisJLyoK KwkgKiBUcnkgdG8gc2VydmUgZnJvbSB0aGUgY3VycmVudCBwYWdlIGZpcnN0LiAgTm8gcGFnZSBh ZHZhbmNlLCBubyBidWZmZXIKKwkgKiBtYW5hZ2VtZW50LCBubyByZS1lbnRyeSBpbnRvIGhlYXAg Y29kZS4KKwkgKi8KKwlyZW1haW5pbmcgPSBzY2FuLT5yc19udHVwbGVzIC0gaGItPm5leHRpdGVt OworCWlmIChyZW1haW5pbmcgPiAwKQorCXsKKwkJbnNlcnZlID0gTWluKHJlbWFpbmluZywgYi0+ bWF4X3Jvd3MpOworCisJCWhiLT50dXBsZXMgPSAmc2Nhbi0+cnNfdmlzdHVwbGVzW2hiLT5uZXh0 aXRlbV07CisJCWhiLT5udHVwbGVzID0gbnNlcnZlOworCQloYi0+bmV4dGl0ZW0gKz0gbnNlcnZl OworCisJCWItPm5yb3dzID0gbnNlcnZlOworCQliLT5wb3MgPSAwOworCisJCXBnc3RhdF9jb3Vu dF9oZWFwX2dldG5leHQoc3NjYW4tPnJzX3JkLCBuc2VydmUpOworCQlyZXR1cm4gdHJ1ZTsKKwl9 CisKKwkvKgorCSAqIEN1cnJlbnQgcGFnZSBleGhhdXN0ZWQuICBBZHZhbmNlIHRvIHRoZSBuZXh0 IHBhZ2Ugd2l0aCB2aXNpYmxlIHR1cGxlcy4KKwkgKi8KKwlmb3IgKDs7KQorCXsKKwkJLyoKKwkJ ICogUmVsZWFzZSB0aGUgcHJldmlvdXMgcGFnZSdzIHBpbi4gIFRoZSBwYWdlIGlzIGZ1bGx5IGNv bnN1bWVkIGF0CisJCSAqIHRoaXMgcG9pbnQgLS0gYWxsIHNsaWNlcyBoYXZlIGJlZW4gc2VydmVk LgorCQkgKi8KKwkJaWYgKEJ1ZmZlcklzVmFsaWQoaGItPmJ1ZikpCisJCXsKKwkJCVJlbGVhc2VC dWZmZXIoaGItPmJ1Zik7CisJCQloYi0+YnVmID0gSW52YWxpZEJ1ZmZlcjsKKwkJfQorCisJCWhl YXBfZmV0Y2hfbmV4dF9idWZmZXIoc2NhbiwgZGlyKTsKKworCQlpZiAoIUJ1ZmZlcklzVmFsaWQo c2Nhbi0+cnNfY2J1ZikpCisJCXsKKwkJCS8qIEVuZCBvZiBzY2FuICovCisJCQlzY2FuLT5yc19j YmxvY2sgPSBJbnZhbGlkQmxvY2tOdW1iZXI7CisJCQlzY2FuLT5yc19wcmVmZXRjaF9ibG9jayA9 IEludmFsaWRCbG9ja051bWJlcjsKKwkJCXNjYW4tPnJzX2luaXRlZCA9IGZhbHNlOworCQkJYi0+ bnJvd3MgPSAwOworCQkJcmV0dXJuIGZhbHNlOworCQl9CisKKwkJQXNzZXJ0KEJ1ZmZlckdldEJs b2NrTnVtYmVyKHNjYW4tPnJzX2NidWYpID09IHNjYW4tPnJzX2NibG9jayk7CisKKwkJLyoKKwkJ ICogUHJlcGFyZSB0aGUgcGFnZTogcHJ1bmUsIHJ1biB2aXNpYmlsaXR5IGNoZWNrcywgYW5kIHBv cHVsYXRlCisJCSAqIHNjYW4tPnJzX3Zpc3R1cGxlc1swLi5yc19udHVwbGVzLTFdIHZpYSBwYWdl X2NvbGxlY3RfdHVwbGVzKCkuCisJCSAqLworCQloZWFwX3ByZXBhcmVfcGFnZXNjYW4oc3NjYW4p OworCisJCWlmIChzY2FuLT5yc19udHVwbGVzID4gMCkKKwkJeworCQkJLyoKKwkJCSAqIFBpbiB0 aGUgcGFnZSBzbyB0dXBsZSBkYXRhIHN0YXlzIHZhbGlkIHdoaWxlIHRoZSBleGVjdXRvcgorCQkJ ICogcHJvY2Vzc2VzIHNsaWNlcy4gIFJlbGVhc2VkIGF0IHRoZSB0b3Agb2YgdGhlIG5leHQgY2Fs bAorCQkJICogb25jZSB0aGUgcGFnZSBpcyBmdWxseSBjb25zdW1lZC4KKwkJCSAqLworCQkJSW5j ckJ1ZmZlclJlZkNvdW50KHNjYW4tPnJzX2NidWYpOworCQkJaGItPmJ1ZiA9IHNjYW4tPnJzX2Ni dWY7CisKKwkJCW5zZXJ2ZSA9IE1pbihzY2FuLT5yc19udHVwbGVzLCBiLT5tYXhfcm93cyk7CisK KwkJCWhiLT50dXBsZXMgPSAmc2Nhbi0+cnNfdmlzdHVwbGVzWzBdOworCQkJaGItPm50dXBsZXMg PSBuc2VydmU7CisJCQloYi0+bmV4dGl0ZW0gPSBuc2VydmU7CisKKwkJCWItPm5yb3dzID0gbnNl cnZlOworCQkJYi0+cG9zID0gMDsKKworCQkJcGdzdGF0X2NvdW50X2hlYXBfZ2V0bmV4dChzc2Nh bi0+cnNfcmQsIG5zZXJ2ZSk7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCisJCS8qIEVtcHR5IHBh Z2UgKGFsbCBkZWFkL2ludmlzaWJsZSB0dXBsZXMpLCB0cnkgbmV4dCAqLworCX0KK30KKworLyoK KyAqIGhlYXBfcmVwb2ludF9zbG90CisgKgkJUmUtcG9pbnQgdGhlIGJhdGNoJ3Mgc2luZ2xlIHNs b3QgdG8gdGhlIHR1cGxlIGF0IGluZGV4IGlkeC4KKyAqCisgKiBDYWxsZWQgYnkgUm93QmF0Y2hH ZXROZXh0U2xvdCgpIGZvciBlYWNoIHR1cGxlIHNlcnZlZCB0byB0aGUgcGFyZW50CisgKiBub2Rl LiAgaGItPnR1cGxlc1tpZHhdIHdhcyBwb3B1bGF0ZWQgYnkgcGFnZV9jb2xsZWN0X3R1cGxlcygp IHZpYQorICogaGVhcF9wcmVwYXJlX3BhZ2VzY2FuKCkgYW5kIHJlbWFpbnMgdmFsaWQgYXMgbG9u ZyBhcyBoYi0+YnVmIGlzIHBpbm5lZC4KKyAqLworc3RhdGljIHZvaWQKK2hlYXBfcmVwb2ludF9z bG90KFJvd0JhdGNoICpiLCBpbnQgaWR4KQoreworCUhlYXBQYWdlQmF0Y2gJCSpoYiA9IChIZWFw UGFnZUJhdGNoICopIGItPmFtX3BheWxvYWQ7CisKKwlBc3NlcnQoaWR4ID49IDAgJiYgaWR4IDwg aGItPm50dXBsZXMpOworCUFzc2VydChUVFNfSVNfQlVGRkVSVFVQTEUoYi0+c2xvdCkpOworCisJ RXhlY1N0b3JlQnVmZmVySGVhcFR1cGxlKCZoYi0+dHVwbGVzW2lkeF0sIGItPnNsb3QsIGhiLT5i dWYpOworfQorCisvKi0tLS0tIEVuZCBvZiBiYXRjaGluZyBzdXBwb3J0IC0tLS0tKi8KKwogdm9p ZAogaGVhcF9zZXRfdGlkcmFuZ2UoVGFibGVTY2FuRGVzYyBzc2NhbiwgSXRlbVBvaW50ZXIgbWlu dGlkLAogCQkJCSAgSXRlbVBvaW50ZXIgbWF4dGlkKQpAQCAtMTY0MCw3ICsxODYxLDcgQEAgaGVh cF9nZXRuZXh0c2xvdF90aWRyYW5nZShUYWJsZVNjYW5EZXNjIHNzY2FuLCBTY2FuRGlyZWN0aW9u IGRpcmVjdGlvbiwKIAkgKiBpZiB3ZSBnZXQgaGVyZSBpdCBtZWFucyB3ZSBoYXZlIGEgbmV3IGN1 cnJlbnQgc2NhbiB0dXBsZSwgc28gcG9pbnQgdG8KIAkgKiB0aGUgcHJvcGVyIHJldHVybiBidWZm ZXIgYW5kIHJldHVybiB0aGUgdHVwbGUuCiAJICovCi0JcGdzdGF0X2NvdW50X2hlYXBfZ2V0bmV4 dChzY2FuLT5yc19iYXNlLnJzX3JkKTsKKwlwZ3N0YXRfY291bnRfaGVhcF9nZXRuZXh0KHNjYW4t PnJzX2Jhc2UucnNfcmQsIDEpOwogCiAJRXhlY1N0b3JlQnVmZmVySGVhcFR1cGxlKCZzY2FuLT5y c19jdHVwLCBzbG90LCBzY2FuLT5yc19jYnVmKTsKIAlyZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCmluZGV4IDg4YWRkMTI5Njc0Li44MjhiMWE3MTM2 MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYwor KysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCkBAIC0yMjQ1LDcg KzIyNDUsNyBAQCBoZWFwYW1fc2Nhbl9zYW1wbGVfbmV4dF90dXBsZShUYWJsZVNjYW5EZXNjIHNj YW4sIFNhbXBsZVNjYW5TdGF0ZSAqc2NhbnN0YXRlLAogCQkJRXhlY1N0b3JlQnVmZmVySGVhcFR1 cGxlKHR1cGxlLCBzbG90LCBoc2Nhbi0+cnNfY2J1Zik7CiAKIAkJCS8qIENvdW50IHN1Y2Nlc3Nm dWxseS1mZXRjaGVkIHR1cGxlcyBhcyBoZWFwIGZldGNoZXMgKi8KLQkJCXBnc3RhdF9jb3VudF9o ZWFwX2dldG5leHQoc2Nhbi0+cnNfcmQpOworCQkJcGdzdGF0X2NvdW50X2hlYXBfZ2V0bmV4dChz Y2FuLT5yc19yZCwgMSk7CiAKIAkJCXJldHVybiB0cnVlOwogCQl9CkBAIC0yNTM1LDYgKzI1MzUs MTIgQEAgc3RhdGljIGNvbnN0IFRhYmxlQW1Sb3V0aW5lIGhlYXBhbV9tZXRob2RzID0gewogCS5z Y2FuX3Jlc2NhbiA9IGhlYXBfcmVzY2FuLAogCS5zY2FuX2dldG5leHRzbG90ID0gaGVhcF9nZXRu ZXh0c2xvdCwKIAorCS5zY2FuX2JhdGNoX2ZlYXNpYmxlID0gaGVhcF9iYXRjaF9mZWFzaWJsZSwK Kwkuc2Nhbl9iZWdpbl9iYXRjaCA9IGhlYXBfYmVnaW5fYmF0Y2gsCisJLnNjYW5fZ2V0bmV4dGJh dGNoID0gaGVhcF9nZXRuZXh0YmF0Y2gsCisJLnNjYW5fZW5kX2JhdGNoID0gaGVhcF9lbmRfYmF0 Y2gsCisJLnNjYW5fcmVzZXRfYmF0Y2ggPSBoZWFwX3Jlc2V0X2JhdGNoLAorCiAJLnNjYW5fc2V0 X3RpZHJhbmdlID0gaGVhcF9zZXRfdGlkcmFuZ2UsCiAJLnNjYW5fZ2V0bmV4dHNsb3RfdGlkcmFu Z2UgPSBoZWFwX2dldG5leHRzbG90X3RpZHJhbmdlLAogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9hY2Nlc3MvaGVhcGFtLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKaW5kZXggNTZm MmQxYTU3NDguLmQ5ODBkZDI5YTQ0IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVh cGFtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCkBAIC0xMDYsNiArMTA2LDMy IEBAIHR5cGVkZWYgc3RydWN0IEhlYXBTY2FuRGVzY0RhdGEKIH0gSGVhcFNjYW5EZXNjRGF0YTsK IHR5cGVkZWYgc3RydWN0IEhlYXBTY2FuRGVzY0RhdGEgKkhlYXBTY2FuRGVzYzsKIAorLyoKKyAq IEhlYXBQYWdlQmF0Y2ggLS0gaGVhcGFtLXByaXZhdGUgcGFnZS1sZXZlbCBiYXRjaCBzdGF0ZS4K KyAqCisgKiBUaGluIHNsaWNlIGRlc2NyaXB0b3Igb3ZlciB0aGUgc2NhbidzIHJzX3Zpc3R1cGxl c1tdIGFycmF5LiAgUmF0aGVyCisgKiB0aGFuIG93bmluZyBhIGNvcHkgb2YgdHVwbGUgaGVhZGVy cywgSGVhcFBhZ2VCYXRjaCBob2xkcyBhIHBvaW50ZXIKKyAqIGludG8gc2Nhbi0+cnNfdmlzdHVw bGVzW10gZm9yIHRoZSBjdXJyZW50IHNsaWNlLCB3aGljaCB3YXMgcG9wdWxhdGVkCisgKiBieSBw YWdlX2NvbGxlY3RfdHVwbGVzKCkgZHVyaW5nIGhlYXBfcHJlcGFyZV9wYWdlc2NhbigpLgorICoK KyAqIFRoZSBleGVjdXRvciBjb25zdW1lcyB0dXBsZXMgaW4gc2xpY2VzLiAgRWFjaCBoZWFwX2dl dG5leHRiYXRjaCBjYWxsCisgKiByZS1wb2ludHMgdHVwbGVzIHRvIHRoZSBuZXh0IHNsaWNlIGFu ZCBhZHZhbmNlcyBuZXh0aXRlbSwgc2VydmluZyB1cAorICogdG8gUm93QmF0Y2gubWF4X3Jvd3Mg dHVwbGVzIGZyb20gdGhlIGN1cnJlbnQgcGFnZSBiZWZvcmUgYWR2YW5jaW5nCisgKiB0byB0aGUg bmV4dC4KKyAqCisgKiBidWYgaG9sZHMgdGhlIHBpbiBmb3IgdGhlIGN1cnJlbnQgcGFnZS4gIHR1 cGxlIGRhdGEgcmVmZXJlbmNlZCB2aWEKKyAqIHR1cGxlcyByZW1haW5zIHZhbGlkIGFzIGxvbmcg YXMgYnVmIGlzIHBpbm5lZC4KKyAqCisgKiBTdG9yZWQgaW4gUm93QmF0Y2guYW1fcGF5bG9hZC4K KyAqLwordHlwZWRlZiBzdHJ1Y3QgSGVhcFBhZ2VCYXRjaAoreworCUhlYXBUdXBsZURhdGEgICp0 dXBsZXM7CQkvKiBwb2ludHMgaW50byBzY2FuLT5yc192aXN0dXBsZXNbbmV4dGl0ZW1dICovCisJ aW50CQkJCW50dXBsZXM7CS8qIHR1cGxlcyBpbiBjdXJyZW50IHNsaWNlICovCisJaW50CQkJCW5l eHRpdGVtOwkvKiBuZXh0IHVuc2VydmVkIHR1cGxlIGluZGV4IGluIHJzX3Zpc3R1cGxlc1tdICov CisJQnVmZmVyCQkJYnVmOwkJLyogcGlubmVkIGJ1ZmZlciBmb3IgY3VycmVudCBwYWdlICovCit9 IEhlYXBQYWdlQmF0Y2g7CisKIHR5cGVkZWYgc3RydWN0IEJpdG1hcEhlYXBTY2FuRGVzY0RhdGEK IHsKIAlIZWFwU2NhbkRlc2NEYXRhIHJzX2hlYXBfYmFzZTsKQEAgLTM2MCw2ICszODYsMTMgQEAg ZXh0ZXJuIHZvaWQgaGVhcF9lbmRzY2FuKFRhYmxlU2NhbkRlc2Mgc3NjYW4pOwogZXh0ZXJuIEhl YXBUdXBsZSBoZWFwX2dldG5leHQoVGFibGVTY2FuRGVzYyBzc2NhbiwgU2NhbkRpcmVjdGlvbiBk aXJlY3Rpb24pOwogZXh0ZXJuIGJvb2wgaGVhcF9nZXRuZXh0c2xvdChUYWJsZVNjYW5EZXNjIHNz Y2FuLAogCQkJCQkJCSBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwgVHVwbGVUYWJsZVNsb3QgKnNs b3QpOworCitleHRlcm4gYm9vbCBoZWFwX2JhdGNoX2ZlYXNpYmxlKFJlbGF0aW9uIHJlbGF0aW9u LCBTbmFwc2hvdCBzbmFwc2hvdCk7CitleHRlcm4gdm9pZCBoZWFwX2JlZ2luX2JhdGNoKFRhYmxl U2NhbkRlc2Mgc3NjYW4sIFJvd0JhdGNoICpiYXRjaCk7CitleHRlcm4gYm9vbCBoZWFwX2dldG5l eHRiYXRjaChUYWJsZVNjYW5EZXNjIHNzY2FuLCBSb3dCYXRjaCAqYmF0Y2gsIFNjYW5EaXJlY3Rp b24gZGlyKTsKK2V4dGVybiB2b2lkIGhlYXBfZW5kX2JhdGNoKFRhYmxlU2NhbkRlc2Mgc3NjYW4s IFJvd0JhdGNoICpiYXRjaCk7CitleHRlcm4gdm9pZCBoZWFwX3Jlc2V0X2JhdGNoKFRhYmxlU2Nh bkRlc2Mgc3NjYW4sIFJvd0JhdGNoICpiYXRjaCk7CisKIGV4dGVybiB2b2lkIGhlYXBfc2V0X3Rp ZHJhbmdlKFRhYmxlU2NhbkRlc2Mgc3NjYW4sIEl0ZW1Qb2ludGVyIG1pbnRpZCwKIAkJCQkJCQkg IEl0ZW1Qb2ludGVyIG1heHRpZCk7CiBleHRlcm4gYm9vbCBoZWFwX2dldG5leHRzbG90X3RpZHJh bmdlKFRhYmxlU2NhbkRlc2Mgc3NjYW4sCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3Mv dGFibGVhbS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaAppbmRleCA0NjQ3Nzg1ZmQz NS4uMjhjYWEzZGNmMzcgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgK KysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaApAQCAtMzAzLDYgKzMwMyw4IEBAIHR5 cGVkZWYgdm9pZCAoKkluZGV4QnVpbGRDYWxsYmFjaykgKFJlbGF0aW9uIGluZGV4LAogCQkJCQkJ CQkJYm9vbCB0dXBsZUlzQWxpdmUsCiAJCQkJCQkJCQl2b2lkICpzdGF0ZSk7CiAKK3R5cGVkZWYg c3RydWN0IFJvd0JhdGNoIFJvd0JhdGNoOworCiAvKgogICogQVBJIHN0cnVjdCBmb3IgYSB0YWJs ZSBBTS4gIE5vdGUgdGhpcyBtdXN0IGJlIGFsbG9jYXRlZCBpbiBhCiAgKiBzZXJ2ZXItbGlmZXRp bWUgbWFubmVyLCB0eXBpY2FsbHkgYXMgYSBzdGF0aWMgY29uc3Qgc3RydWN0LCB3aGljaCB0aGVu IGdldHMKQEAgLTM4MCw2ICszODIsNTYgQEAgdHlwZWRlZiBzdHJ1Y3QgVGFibGVBbVJvdXRpbmUK IAkJCQkJCQkJCSBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKIAkJCQkJCQkJCSBUdXBsZVRhYmxl U2xvdCAqc2xvdCk7CiAKKwkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgKiBCYXRjaGVkIHNjYW4gc3Vw cG9ydAorCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqLworCisJLyoKKwkgKiBSZXR1cm5zIHRydWUg aWYgdGhlIEFNIGNhbiBzdXBwb3J0IGJhdGNoaW5nIGZvciBhIHNjYW4gd2l0aCB0aGUKKwkgKiBn aXZlbiBzbmFwc2hvdC4gIENhbGxlZCBhdCBwbGFuIGluaXQgdGltZSBiZWZvcmUgdGhlIHNjYW4g ZGVzY3JpcHRvcgorCSAqIGV4aXN0cy4gIEFNcyB0aGF0IGhhdmUgbm8gc25hcHNob3QtYmFzZWQg cmVzdHJpY3Rpb25zIGNhbiBvbWl0IHRoaXMKKwkgKiBjYWxsYmFjaywgaW4gd2hpY2ggY2FzZSBi YXRjaGluZyBpcyBjb25zaWRlcmVkIGZlYXNpYmxlLgorCSAqLworCWJvb2wJCSgqc2Nhbl9iYXRj aF9mZWFzaWJsZSkoUmVsYXRpb24gcmVsYXRpb24sIFNuYXBzaG90IHNuYXBzaG90KTsKKworCS8q CisJICogSW5pdGlhbGl6ZSBBTS1vd25lZCBiYXRjaCBzdGF0ZSBmb3IgYSBzY2FuLiAgQ2FsbGVk IG9uY2UgYmVmb3JlCisJICogdGhlIGZpcnN0IHNjYW5fZ2V0bmV4dGJhdGNoIGNhbGwuICBUaGUg QU0gYWxsb2NhdGVzIHdoYXRldmVyCisJICogcHJpdmF0ZSBzdGF0ZSBpdCBuZWVkcyBhbmQgc3Rv cmVzIGl0IGluIGItPmFtX3BheWxvYWQuICBiLT5zbG90CisJICogaXMgdGhlIHNjYW4gbm9kZSdz IHNzX1NjYW5UdXBsZVNsb3QsIHdob3NlIHR5cGUgd2FzIGFscmVhZHkKKwkgKiBkZXRlcm1pbmVk IGJ5IHRoZSBBTSB2aWEgdGFibGVfc2xvdF9jYWxsYmFja3MoKS4gIFRoZSBBTSdzCisJICogcmVw b2ludF9zbG90IGNhbGxiYWNrIHJlLXBvaW50cyBpdCB0byBlYWNoIHR1cGxlIGluIHRoZSBiYXRj aAorCSAqIGluIHR1cm4uICBGdXR1cmUgaW50ZXJmYWNlcyBtYXkgYWxsb3cgdGhlIEFNIHRvIGV4 cG9zZSBiYXRjaAorCSAqIGRhdGEgaW4gb3RoZXIgZm9ybXMgd2l0aG91dCBnb2luZyB0aHJvdWdo IGEgc2xvdC4KKwkgKi8KKwl2b2lkCQkoKnNjYW5fYmVnaW5fYmF0Y2gpKFRhYmxlU2NhbkRlc2Mg c3NjYW4sIFJvd0JhdGNoICpiKTsKKworCS8qCisJICogRmV0Y2ggdGhlIG5leHQgYmF0Y2ggb2Yg dHVwbGVzIGZyb20gdGhlIHNjYW4gaW50byBiLiAgU2V0cyBiLT5ucm93cworCSAqIHRvIHRoZSBu dW1iZXIgb2YgdHVwbGVzIGF2YWlsYWJsZSBhbmQgcmVzZXRzIGItPnBvcyB0byAwLiAgUmV0dXJu cworCSAqIHRydWUgaWYgYW55IHR1cGxlcyB3ZXJlIGZldGNoZWQsIGZhbHNlIGF0IGVuZCBvZiBz Y2FuLiAgVGhlIGNhbGxlcgorCSAqIGFkdmFuY2VzIHRocm91Z2ggdGhlIGJhdGNoIHZpYSBSb3dC YXRjaEdldE5leHRTbG90KCksIHdoaWNoIGNhbGxzCisJICogb3BzLT5yZXBvaW50X3Nsb3QgZm9y IGVhY2ggcG9zaXRpb24gdXAgdG8gYi0+bnJvd3MuCisJICovCisJYm9vbAkJKCpzY2FuX2dldG5l eHRiYXRjaCkoVGFibGVTY2FuRGVzYyBzc2NhbiwgUm93QmF0Y2ggKmIsCisJCQkJCQkJCQkgU2Nh bkRpcmVjdGlvbiBkaXIpOworCisJLyoKKwkgKiBSZWxlYXNlIGFsbCBBTS1vd25lZCBiYXRjaCBy ZXNvdXJjZXMsIGluY2x1ZGluZyBhbnkgYnVmZmVyIHBpbnMKKwkgKiBoZWxkIGluIGFtX3BheWxv YWQuICBDYWxsZWQgd2hlbiB0aGUgc2NhbiBub2RlIGlzIHNodXQgZG93bi4KKwkgKiBBZnRlciB0 aGlzIGNhbGwgYi0+YW1fcGF5bG9hZCBtdXN0IG5vdCBiZSB1c2VkLgorCSAqLworCXZvaWQJCSgq c2Nhbl9lbmRfYmF0Y2gpKFRhYmxlU2NhbkRlc2Mgc3NjYW4sIFJvd0JhdGNoICpiKTsKKworCS8q CisJICogUmVzZXQgYmF0Y2ggc3RhdGUgZm9yIHJlc2Nhbi4gIFJlbGVhc2UgYW55IGhlbGQgcmVz b3VyY2VzIChlLmcuCisJICogYnVmZmVyIHBpbnMpIGFuZCByZXNldCBjb3VudHMsIGJ1dCBrZWVw IHRoZSBhbGxvY2F0aW9uIHNvIHRoZQorCSAqIG5leHQgZ2V0bmV4dGJhdGNoIGNhbGwgY2FuIHJl dXNlIGl0IHdpdGhvdXQgcmUtZW50ZXJpbmcKKwkgKiBiZWdpbl9iYXRjaC4KKwkgKi8KKwl2b2lk CQkoKnNjYW5fcmVzZXRfYmF0Y2gpKFRhYmxlU2NhbkRlc2Mgc3NjYW4sIFJvd0JhdGNoICpiKTsK KwogCS8qLS0tLS0tLS0tLS0KIAkgKiBPcHRpb25hbCBmdW5jdGlvbnMgdG8gcHJvdmlkZSBzY2Fu bmluZyBmb3IgcmFuZ2VzIG9mIEl0ZW1Qb2ludGVycy4KIAkgKiBJbXBsZW1lbnRhdGlvbnMgbXVz dCBlaXRoZXIgcHJvdmlkZSBib3RoIG9mIHRoZXNlIGZ1bmN0aW9ucywgb3IgbmVpdGhlcgpAQCAt MTA5OSw2ICsxMTUxLDkwIEBAIHRhYmxlX3NjYW5fZ2V0bmV4dHNsb3QoVGFibGVTY2FuRGVzYyBz c2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sIFR1cGxlVGFibGVTCiAJcmV0dXJuIHNzY2Fu LT5yc19yZC0+cmRfdGFibGVhbS0+c2Nhbl9nZXRuZXh0c2xvdChzc2NhbiwgZGlyZWN0aW9uLCBz bG90KTsKIH0KIAorLyoKKyAqIHRhYmxlX3N1cHBvcnRzX2JhdGNoaW5nCisgKgkJRG9lcyB0aGUg cmVsYXRpb24ncyBBTSBzdXBwb3J0IGJhdGNoaW5nPworICovCitzdGF0aWMgaW5saW5lIGJvb2wK K3RhYmxlX3N1cHBvcnRzX2JhdGNoaW5nKFJlbGF0aW9uIHJlbGF0aW9uLCBTbmFwc2hvdCBzbmFw c2hvdCkKK3sKKwljb25zdCBUYWJsZUFtUm91dGluZSAqdGFtID0gcmVsYXRpb24tPnJkX3RhYmxl YW07CisKKwlpZiAodGFtLT5zY2FuX2dldG5leHRiYXRjaCA9PSBOVUxMKQorCQlyZXR1cm4gZmFs c2U7CisKKwlBc3NlcnQodGFtLT5zY2FuX2JlZ2luX2JhdGNoICE9IE5VTEwpOworCUFzc2VydCh0 YW0tPnNjYW5fcmVzZXRfYmF0Y2ggIT0gTlVMTCk7CisJQXNzZXJ0KHRhbS0+c2Nhbl9lbmRfYmF0 Y2ggIT0gTlVMTCk7CisKKwkvKgorCSAqIE9wdGlvbmFsOiBBTSBtYXkgcmVzdHJpY3QgYmF0Y2hp bmcgYmFzZWQgb24gc25hcHNob3Qgb3Igb3RoZXIgY29uZGl0aW9ucy4KKwkgKi8KKwlpZiAodGFt LT5zY2FuX2JhdGNoX2ZlYXNpYmxlICE9IE5VTEwgJiYKKwkJIXRhbS0+c2Nhbl9iYXRjaF9mZWFz aWJsZShyZWxhdGlvbiwgc25hcHNob3QpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gdHJ1 ZTsKK30KKworLyoKKyAqIHRhYmxlX3NjYW5fYmVnaW5fYmF0Y2gKKyAqCQlBbGxvY2F0ZSBBTS1v d25lZCBiYXRjaCBwYXlsb2FkIGluIHRoZSBSb3dCYXRjaAorICovCitzdGF0aWMgaW5saW5lIHZv aWQKK3RhYmxlX3NjYW5fYmVnaW5fYmF0Y2goVGFibGVTY2FuRGVzYyBzc2NhbiwgUm93QmF0Y2gg KmIpCit7CisJY29uc3QgVGFibGVBbVJvdXRpbmUgKnRhbSA9IHNzY2FuLT5yc19yZC0+cmRfdGFi bGVhbTsKKworCUFzc2VydCh0YW0tPnNjYW5fYmVnaW5fYmF0Y2ggIT0gTlVMTCk7CisKKwlyZXR1 cm4gdGFtLT5zY2FuX2JlZ2luX2JhdGNoKHNzY2FuLCBiKTsKK30KKworLyoKKyAqIHRhYmxlX3Nj YW5fZ2V0bmV4dGJhdGNoCisgKgkJRmV0Y2ggdGhlIG5leHQgYmF0Y2ggb2YgdHVwbGVzIGZyb20g dGhlIEFNLiAgUmV0dXJucyB0cnVlIGlmIHR1cGxlcworICoJCXdlcmUgZmV0Y2hlZCwgZmFsc2Ug YXQgZW5kIG9mIHNjYW4uICBPbmx5IGZvcndhcmQgc2NhbnMgYXJlIHN1cHBvcnRlZC4KKyAqLwor c3RhdGljIGlubGluZSBib29sCit0YWJsZV9zY2FuX2dldG5leHRiYXRjaChUYWJsZVNjYW5EZXNj IHNzY2FuLCBSb3dCYXRjaCAqYiwgU2NhbkRpcmVjdGlvbiBkaXIpCit7CisJY29uc3QgVGFibGVB bVJvdXRpbmUgKnRhbSA9IHNzY2FuLT5yc19yZC0+cmRfdGFibGVhbTsKKworCUFzc2VydChTY2Fu RGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpOworCUFzc2VydCh0YW0tPnNjYW5fZ2V0bmV4dGJhdGNo ICE9IE5VTEwpOworCisJcmV0dXJuIHRhbS0+c2Nhbl9nZXRuZXh0YmF0Y2goc3NjYW4sIGIsIGRp cik7Cit9CisKKy8qCisgKiB0YWJsZV9zY2FuX2VuZF9iYXRjaAorICoJCVJlbGVhc2UgQU0tb3du ZWQgcmVzb3VyY2VzIGZvciB0aGUgYmF0Y2ggcGF5bG9hZC4KKyAqLworc3RhdGljIGlubGluZSB2 b2lkCit0YWJsZV9zY2FuX2VuZF9iYXRjaChUYWJsZVNjYW5EZXNjIHNzY2FuLCBSb3dCYXRjaCAq YikKK3sKKwljb25zdCBUYWJsZUFtUm91dGluZSAqdGFtID0gc3NjYW4tPnJzX3JkLT5yZF90YWJs ZWFtOworCisJQXNzZXJ0KHRhbS0+c2Nhbl9lbmRfYmF0Y2ggIT0gTlVMTCk7CisKKwl0YW0tPnNj YW5fZW5kX2JhdGNoKHNzY2FuLCBiKTsKK30KKworLyoKKyAqIHRhYmxlX3NjYW5fcmVzZXRfYmF0 Y2gKKyAqCQlSZXNldCBBTS1vd25lZCBiYXRjaCBzdGF0ZSBmb3IgcmVzY2FuIHdpdGhvdXQgZnJl ZWluZy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCit0YWJsZV9zY2FuX3Jlc2V0X2JhdGNoKFRh YmxlU2NhbkRlc2Mgc3NjYW4sIFJvd0JhdGNoICpiKQoreworCWNvbnN0IFRhYmxlQW1Sb3V0aW5l ICp0YW0gPSBzc2Nhbi0+cnNfcmQtPnJkX3RhYmxlYW07CisKKwlBc3NlcnQodGFtLT5zY2FuX3Jl c2V0X2JhdGNoICE9IE5VTEwpOworCisJdGFtLT5zY2FuX3Jlc2V0X2JhdGNoKHNzY2FuLCBiKTsK K30KKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogVElEIFJhbmdlIHNjYW5uaW5nIHJlbGF0 ZWQgZnVuY3Rpb25zLgogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvcGdzdGF0LmggYi9zcmMvaW5jbHVkZS9wZ3N0YXQuaAppbmRleCAyNzg2YTdjNWZmYi4u ZGYwNmUzM2ZiYTIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Bnc3RhdC5oCisrKyBiL3NyYy9p bmNsdWRlL3Bnc3RhdC5oCkBAIC03MTksMTAgKzcxOSwxMCBAQCBleHRlcm4gdm9pZCBwZ3N0YXRf cmVwb3J0X2FuYWx5emUoUmVsYXRpb24gcmVsLAogCQlpZiAocGdzdGF0X3Nob3VsZF9jb3VudF9y ZWxhdGlvbihyZWwpKQkJCQkJCVwKIAkJCShyZWwpLT5wZ3N0YXRfaW5mby0+Y291bnRzLm51bXNj YW5zKys7CQkJCQlcCiAJfSB3aGlsZSAoMCkKLSNkZWZpbmUgcGdzdGF0X2NvdW50X2hlYXBfZ2V0 bmV4dChyZWwpCQkJCQkJCQlcCisjZGVmaW5lIHBnc3RhdF9jb3VudF9oZWFwX2dldG5leHQocmVs LCBuKQkJCQkJCQlcCiAJZG8gewkJCQkJCQkJCQkJCQkJCVwKIAkJaWYgKHBnc3RhdF9zaG91bGRf Y291bnRfcmVsYXRpb24ocmVsKSkJCQkJCQlcCi0JCQkocmVsKS0+cGdzdGF0X2luZm8tPmNvdW50 cy50dXBsZXNfcmV0dXJuZWQrKzsJCQlcCisJCQkocmVsKS0+cGdzdGF0X2luZm8tPmNvdW50cy50 dXBsZXNfcmV0dXJuZWQgKz0gKG4pOwkJXAogCX0gd2hpbGUgKDApCiAjZGVmaW5lIHBnc3RhdF9j b3VudF9oZWFwX2ZldGNoKHJlbCkJCQkJCQkJCVwKIAlkbyB7CQkJCQkJCQkJCQkJCQkJXAotLSAK Mi40Ny4zCgo= --00000000000043db7e064ec97207 Content-Type: application/octet-stream; name="v7-0004-SeqScan-add-batch-driven-variants-returning-slots.patch" Content-Disposition: attachment; filename="v7-0004-SeqScan-add-batch-driven-variants-returning-slots.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnn54uaf1 RnJvbSBlNzZhNDlkZjQyZGJmMjJhMzE2OWViMmUxZDg4MGQ5MjgyYzFmMDJmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFRodSwgNSBNYXIgMjAyNiAxMToyODoxNiArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjcg NC81XSBTZXFTY2FuOiBhZGQgYmF0Y2gtZHJpdmVuIHZhcmlhbnRzIHJldHVybmluZyBzbG90cwoK VGVhY2ggU2VxU2NhbiB0byBkcml2ZSB0aGUgdGFibGUgQU0gdmlhIHRoZSBuZXcgYmF0Y2ggQVBJ IGFkZGVkIGluCnRoZSBwcmV2aW91cyBjb21taXQsIHdoaWxlIHN0aWxsIHJldHVybmluZyBvbmUg VHVwbGVUYWJsZVNsb3QgYXQgYQp0aW1lIHRvIGNhbGxlcnMuICBUaGlzIHJlZHVjZXMgcGVyLXR1 cGxlIEFNIGNyb3NzaW5ncyB3aXRob3V0CmNoYW5naW5nIHRoZSBub2RlIGludGVyZmFjZSBzZWVu IGJ5IHBhcmVudHMuCgpTZXFTY2FuU3RhdGUgZ2FpbnMgYSBSb3dCYXRjaCBwb2ludGVyIHRoYXQg aG9sZHMgdGhlIGN1cnJlbnQgYmF0Y2gKd2hlbiBiYXRjaGluZyBpcyBhY3RpdmUuICBCYXRjaCBz dGF0ZSBpcyBsb2NhbGl6ZWQgdG8gU2VxU2NhblN0YXRlCi0tIG5vIGNoYW5nZXMgdG8gUGxhblN0 YXRlIG9yIFNjYW5TdGF0ZS4KCkFkZCBleGVjdXRvcl9iYXRjaF9yb3dzIEdVQyAoREVWRUxPUEVS X09QVElPTlMsIGRlZmF1bHQgNjQpIHRvCmNvbnRyb2wgdGhlIG1heGltdW0gYmF0Y2ggc2l6ZS4g IFNldHRpbmcgaXQgdG8gMCBkaXNhYmxlcyBiYXRjaGluZy4KWFhYIGN1cnJlbnRseSBpZ25vcmVk IHdoZW4gcmVhZGluZyBmcm9tIGhlYXBhbSB0YWJsZXMuCgpXaXJlIHVwIHJ1bnRpbWUgc2VsZWN0 aW9uIGluIEV4ZWNJbml0U2VxU2NhbiB2aWEKU2VxU2NhbkNhblVzZUJhdGNoaW5nKCkuICBXaGVu IGV4ZWN1dG9yX2JhdGNoX3Jvd3MgPiAxLCBFUFEgaXMKaW5hY3RpdmUsIHRoZSBzY2FuIGlzIGZv cndhcmQtb25seSwgYW5kIHRoZSByZWxhdGlvbidzIEFNIHN1cHBvcnRzCmJhdGNoaW5nLCBFeGVj UHJvY05vZGUgaXMgc2V0IHRvIGEgYmF0Y2gtZHJpdmVuIHZhcmlhbnQuICBPdGhlcndpc2UKdGhl IG5vbi1iYXRjaCBwYXRoIGlzIHVzZWQgd2l0aCB6ZXJvIG92ZXJoZWFkLgoKUGxhbiBzaGFwZSBh bmQgRVhQTEFJTiBvdXRwdXQgcmVtYWluIHVuY2hhbmdlZDsgb25seSB0aGUgaW50ZXJuYWwKdHVw bGUgZmxvdyBkaWZmZXJzIHdoZW4gYmF0Y2hpbmcgaXMgZW5hYmxlZC4KClJldmlld2VkLWJ5OiBE YW5paWwgRGF2eWRvdiA8M2Rhbmlzc2ltb0BnbWFpbC5jb20+ClJldmlld2VkLWJ5OiBDaGFuZ0Fv IENoZW4gPDI2MjQzNDU1MDdAcXEuY29tPgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9t L0NBK0hpd3FGZkFZX1pGcU44d2NBRU13NzFUOWhNX2tBOFV0eUhhWlpFWnR1VDNVeW9nQUBtYWls LmdtYWlsLmNvbQotLS0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVTZXFzY2FuLmMgICAgICAg IHwgMjc4ICsrKysrKysrKysrKysrKysrKysrKysKIHNyYy9iYWNrZW5kL3V0aWxzL2luaXQvZ2xv YmFscy5jICAgICAgICAgIHwgICAzICsKIHNyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFt ZXRlcnMuZGF0IHwgICA5ICsKIHNyYy9pbmNsdWRlL21pc2NhZG1pbi5oICAgICAgICAgICAgICAg ICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oICAgICAgICAgICAgIHwg ICAyICsKIDUgZmlsZXMgY2hhbmdlZCwgMjkzIGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9leGVjdXRvci9ub2RlU2Vxc2Nhbi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv bm9kZVNlcXNjYW4uYwppbmRleCAwNDgwM2IwZTM3ZC4uZDBjZTg4NThjNDkgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVTZXFzY2FuLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhl Y3V0b3Ivbm9kZVNlcXNjYW4uYwpAQCAtMjksMTIgKzI5LDE3IEBACiAKICNpbmNsdWRlICJhY2Nl c3MvcmVsc2Nhbi5oIgogI2luY2x1ZGUgImFjY2Vzcy90YWJsZWFtLmgiCisjaW5jbHVkZSAiZXhl Y3V0b3IvZXhlY1Jvd0JhdGNoLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY1NjYW4uaCIKICNp bmNsdWRlICJleGVjdXRvci9leGVjdXRvci5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL25vZGVTZXFz Y2FuLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsLmgiCiAKIHN0YXRpYyBUdXBsZVRhYmxlU2xvdCAq U2VxTmV4dChTZXFTY2FuU3RhdGUgKm5vZGUpOworc3RhdGljIFR1cGxlVGFibGVTbG90ICpFeGVj U2VxU2NhbkJhdGNoU2xvdChQbGFuU3RhdGUgKnBzdGF0ZSk7CitzdGF0aWMgVHVwbGVUYWJsZVNs b3QgKkV4ZWNTZXFTY2FuQmF0Y2hTbG90V2l0aFF1YWwoUGxhblN0YXRlICpwc3RhdGUpOworc3Rh dGljIFR1cGxlVGFibGVTbG90ICpFeGVjU2VxU2NhbkJhdGNoU2xvdFdpdGhQcm9qZWN0KFBsYW5T dGF0ZSAqcHN0YXRlKTsKK3N0YXRpYyBUdXBsZVRhYmxlU2xvdCAqRXhlY1NlcVNjYW5CYXRjaFNs b3RXaXRoUXVhbFByb2plY3QoUGxhblN0YXRlICpwc3RhdGUpOwogCiAvKiAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgkJ CQkJCVNjYW4gU3VwcG9ydApAQCAtMjA1LDYgKzIxMCwyNzMgQEAgRXhlY1NlcVNjYW5FUFEoUGxh blN0YXRlICpwc3RhdGUpCiAJCQkJCShFeGVjU2NhblJlY2hlY2tNdGQpIFNlcVJlY2hlY2spOwog fQogCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgKgkJCQkJCUJhdGNoIFN1cHBvcnQKKyAqIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLwor CisvKgorICogU2VxU2NhbkNhblVzZUJhdGNoaW5nCisgKgkJQ2hlY2sgd2hldGhlciB0aGlzIFNl cVNjYW4gY2FuIHVzZSBiYXRjaCBtb2RlIGV4ZWN1dGlvbi4KKyAqCisgKiBCYXRjaGluZyByZXF1 aXJlczogdGhlIEdVQyBpcyBlbmFibGVkLCBubyBFUFEgcmVjaGVjayBpcyBhY3RpdmUsIHRoZSBz Y2FuCisgKiBpcyBmb3J3YXJkLW9ubHksIGFuZCB0aGUgdGFibGUgQU0gc3VwcG9ydHMgYmF0Y2hp bmcgd2l0aCB0aGUgY3VycmVudAorICogc25hcHNob3QgKHNlZSB0YWJsZV9zdXBwb3J0c19iYXRj aGluZygpKS4KKyAqLworc3RhdGljIGJvb2wKK1NlcVNjYW5DYW5Vc2VCYXRjaGluZyhTZXFTY2Fu U3RhdGUgKnNjYW5zdGF0ZSwgaW50IGVmbGFncykKK3sKKwlSZWxhdGlvbglyZWxhdGlvbiA9IHNj YW5zdGF0ZS0+c3Muc3NfY3VycmVudFJlbGF0aW9uOworCisJcmV0dXJuCWV4ZWN1dG9yX2JhdGNo X3Jvd3MgPiAxICYmCisJCQlyZWxhdGlvbiAmJgorCQkJdGFibGVfc3VwcG9ydHNfYmF0Y2hpbmco cmVsYXRpb24sCisJCQkJCQkJCQlzY2Fuc3RhdGUtPnNzLnBzLnN0YXRlLT5lc19zbmFwc2hvdCkg JiYKKwkJCSEoZWZsYWdzICYgRVhFQ19GTEFHX0JBQ0tXQVJEKSAmJgorCQkJc2NhbnN0YXRlLT5z cy5wcy5zdGF0ZS0+ZXNfZXBxX2FjdGl2ZSA9PSBOVUxMOworfQorCisvKgorICogU2VxU2Nhbklu aXRCYXRjaGluZworICoJCVNldCB1cCBiYXRjaCBleGVjdXRpb24gc3RhdGUgYW5kIHNlbGVjdCB0 aGUgYXBwcm9wcmlhdGUKKyAqCQlFeGVjUHJvY05vZGUgdmFyaWFudCBmb3IgYmF0Y2ggbW9kZS4K KyAqCisgKiBDYWxsZWQgZnJvbSBFeGVjSW5pdFNlcVNjYW4gd2hlbiBTZXFTY2FuQ2FuVXNlQmF0 Y2hpbmcgcmV0dXJucyB0cnVlLgorICogT3ZlcndyaXRlcyB0aGUgRXhlY1Byb2NOb2RlIHBvaW50 ZXIgc2V0IGJ5IHRoZSBub24tYmF0Y2ggcGF0aC4KKyAqLworc3RhdGljIHZvaWQKK1NlcVNjYW5J bml0QmF0Y2hpbmcoU2VxU2NhblN0YXRlICpzY2Fuc3RhdGUpCit7CisJUm93QmF0Y2ggICAqYmF0 Y2ggPSBSb3dCYXRjaENyZWF0ZShNYXhIZWFwVHVwbGVzUGVyUGFnZSk7CisKKwliYXRjaC0+c2xv dCA9IHNjYW5zdGF0ZS0+c3Muc3NfU2NhblR1cGxlU2xvdDsKKwlzY2Fuc3RhdGUtPmJhdGNoID0g YmF0Y2g7CisKKwkvKiBDaG9vc2UgYmF0Y2ggdmFyaWFudCAqLworCWlmIChzY2Fuc3RhdGUtPnNz LnBzLnF1YWwgPT0gTlVMTCkKKwl7CisJCWlmIChzY2Fuc3RhdGUtPnNzLnBzLnBzX1Byb2pJbmZv ID09IE5VTEwpCisJCQlzY2Fuc3RhdGUtPnNzLnBzLkV4ZWNQcm9jTm9kZSA9IEV4ZWNTZXFTY2Fu QmF0Y2hTbG90OworCQllbHNlCisJCQlzY2Fuc3RhdGUtPnNzLnBzLkV4ZWNQcm9jTm9kZSA9IEV4 ZWNTZXFTY2FuQmF0Y2hTbG90V2l0aFByb2plY3Q7CisJfQorCWVsc2UKKwl7CisJCWlmIChzY2Fu c3RhdGUtPnNzLnBzLnBzX1Byb2pJbmZvID09IE5VTEwpCisJCQlzY2Fuc3RhdGUtPnNzLnBzLkV4 ZWNQcm9jTm9kZSA9IEV4ZWNTZXFTY2FuQmF0Y2hTbG90V2l0aFF1YWw7CisJCWVsc2UKKwkJCXNj YW5zdGF0ZS0+c3MucHMuRXhlY1Byb2NOb2RlID0gRXhlY1NlcVNjYW5CYXRjaFNsb3RXaXRoUXVh bFByb2plY3Q7CisJfQorfQorCisvKgorICogU2VxU2NhblJlc2V0QmF0Y2hpbmcKKyAqCQlSZXNl dCBvciB0ZWFyIGRvd24gYmF0Y2ggZXhlY3V0aW9uIHN0YXRlLgorICoKKyAqIFdoZW4gZHJvcCBp cyBmYWxzZSAocmVzY2FuKSwgcmVzZXRzIHRoZSBSb3dCYXRjaCBhbmQgcmVsZWFzZXMgYW55Cisg KiBBTS1oZWxkIHJlc291cmNlcyBsaWtlIGJ1ZmZlciBwaW5zLCBidXQga2VlcHMgYWxsb2NhdGlv bnMgZm9yIHJldXNlLgorICogV2hlbiBkcm9wIGlzIHRydWUgKGVuZCBvZiBub2RlKSwgZnJlZXMg ZXZlcnl0aGluZy4KKyAqLworc3RhdGljIHZvaWQKK1NlcVNjYW5SZXNldEJhdGNoaW5nKFNlcVNj YW5TdGF0ZSAqc2NhbnN0YXRlLCBib29sIGRyb3ApCit7CisJUm93QmF0Y2ggKmIgPSBzY2Fuc3Rh dGUtPmJhdGNoOworCisJaWYgKGIpCisJeworCQlSb3dCYXRjaFJlc2V0KGIsIGRyb3ApOworCQlp ZiAoYi0+YW1fcGF5bG9hZCkKKwkJeworCQkJaWYgKGRyb3ApCisJCQl7CisJCQkJdGFibGVfc2Nh bl9lbmRfYmF0Y2goc2NhbnN0YXRlLT5zcy5zc19jdXJyZW50U2NhbkRlc2MsIGIpOworCQkJCWIt PmFtX3BheWxvYWQgPSBOVUxMOworCQkJfQorCQkJZWxzZQorCQkJCXRhYmxlX3NjYW5fcmVzZXRf YmF0Y2goc2NhbnN0YXRlLT5zcy5zc19jdXJyZW50U2NhbkRlc2MsIGIpOworCQl9CisJCWlmIChk cm9wKQorCQkJcGZyZWUoYik7CisJfQorfQorCisvKgorICogU2VxTmV4dEJhdGNoCisgKgkJRmV0 Y2ggdGhlIG5leHQgYmF0Y2ggb2YgdHVwbGVzIGZyb20gdGhlIHRhYmxlIEFNLgorICoKKyAqIExh emlseSBpbml0aWFsaXplcyB0aGUgc2NhbiBkZXNjcmlwdG9yIGFuZCBBTSBiYXRjaCBzdGF0ZSBv biBmaXJzdAorICogY2FsbC4gIFJldHVybnMgZmFsc2UgYXQgZW5kIG9mIHNjYW4uCisgKi8KK3N0 YXRpYyBib29sCitTZXFOZXh0QmF0Y2goU2VxU2NhblN0YXRlICpub2RlKQoreworCVRhYmxlU2Nh bkRlc2Mgc2NhbmRlc2M7CisJRVN0YXRlCSAgICplc3RhdGU7CisJU2NhbkRpcmVjdGlvbiBkaXJl Y3Rpb247CisJUm93QmF0Y2ggKmIgPSBub2RlLT5iYXRjaDsKKworCUFzc2VydChiICE9IE5VTEwp OworCisJLyoKKwkgKiBnZXQgaW5mb3JtYXRpb24gZnJvbSB0aGUgZXN0YXRlIGFuZCBzY2FuIHN0 YXRlCisJICovCisJc2NhbmRlc2MgPSBub2RlLT5zcy5zc19jdXJyZW50U2NhbkRlc2M7CisJZXN0 YXRlID0gbm9kZS0+c3MucHMuc3RhdGU7CisJZGlyZWN0aW9uID0gZXN0YXRlLT5lc19kaXJlY3Rp b247CisJQXNzZXJ0KFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyZWN0aW9uKSk7CisKKwlpZiAo c2NhbmRlc2MgPT0gTlVMTCkKKwl7CisJCS8qCisJCSAqIFdlIHJlYWNoIGhlcmUgaWYgdGhlIHNj YW4gaXMgbm90IHBhcmFsbGVsLCBvciBpZiB3ZSdyZSBzZXJpYWxseQorCQkgKiBleGVjdXRpbmcg YSBzY2FuIHRoYXQgd2FzIHBsYW5uZWQgdG8gYmUgcGFyYWxsZWwuCisJCSAqLworCQlzY2FuZGVz YyA9IHRhYmxlX2JlZ2luc2Nhbihub2RlLT5zcy5zc19jdXJyZW50UmVsYXRpb24sCisJCQkJCQkJ CSAgIGVzdGF0ZS0+ZXNfc25hcHNob3QsCisJCQkJCQkJCSAgIDAsIE5VTEwsCisJCQkJCQkJCSAg IFNjYW5SZWxJc1JlYWRPbmx5KCZub2RlLT5zcykgPworCQkJCQkJCQkgICBTT19ISU5UX1JFTF9S RUFEX09OTFkgOiBTT19OT05FKTsKKwkJbm9kZS0+c3Muc3NfY3VycmVudFNjYW5EZXNjID0gc2Nh bmRlc2M7CisJfQorCisJLyogTGF6aWx5IGNyZWF0ZSB0aGUgQU0gYmF0Y2ggcGF5bG9hZC4gKi8K KwlpZiAoYi0+YW1fcGF5bG9hZCA9PSBOVUxMKQorCXsKKwkJY29uc3QgVGFibGVBbVJvdXRpbmUg KnRhbSBQR19VU0VEX0ZPUl9BU1NFUlRTX09OTFkgPSBzY2FuZGVzYy0+cnNfcmQtPnJkX3RhYmxl YW07CisKKwkJQXNzZXJ0KHRhbSAmJiB0YW0tPnNjYW5fYmVnaW5fYmF0Y2gpOworCQl0YWJsZV9z Y2FuX2JlZ2luX2JhdGNoKHNjYW5kZXNjLCBiKTsKKwl9CisKKwlpZiAoIXRhYmxlX3NjYW5fZ2V0 bmV4dGJhdGNoKHNjYW5kZXNjLCBiLCBkaXJlY3Rpb24pKQorCQlyZXR1cm4gZmFsc2U7CisKKwly ZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqIFNlcVNjYW5CYXRjaFNsb3QKKyAqCQlDb3JlIGxvb3Ag Zm9yIGJhdGNoLWRyaXZlbiBTZXFTY2FuIHZhcmlhbnRzLgorICoKKyAqIEludGVybmFsbHkgZmV0 Y2hlcyB0dXBsZXMgaW4gYmF0Y2hlcyBmcm9tIHRoZSB0YWJsZSBBTSwgYnV0IHJldHVybnMKKyAq IG9uZSBzbG90IGF0IGEgdGltZSB0byBwcmVzZXJ2ZSB0aGUgc2luZ2xlLXNsb3QgaW50ZXJmYWNl IGV4cGVjdGVkIGJ5CisgKiBwYXJlbnQgbm9kZXMuICBXaGVuIHRoZSBjdXJyZW50IGJhdGNoIGlz IGV4aGF1c3RlZCwgZmV0Y2hlcyBhbmQKKyAqIG1hdGVyaWFsaXplcyB0aGUgbmV4dCBvbmUuCisg KgorICogcXVhbCBhbmQgcHJvakluZm8gYXJlIHBhc3NlZCBleHBsaWNpdGx5IHNvIHRoZSBjb21w aWxlciBjYW4gZWxpbWluYXRlCisgKiBkZWFkIGJyYW5jaGVzIHdoZW4gaW5saW5lZCBpbnRvIHRo ZSB0eXBlZCB3cmFwcGVyIGZ1bmN0aW9ucyAoZS5nLgorICogRXhlY1NlcVNjYW5CYXRjaFNsb3Qg cGFzc2VzIE5VTEwgZm9yIGJvdGgpLgorICoKKyAqIEVQUSBpcyBub3Qgc3VwcG9ydGVkIGluIHRo ZSBiYXRjaCBwYXRoOyBhc3NlcnRlZCBhdCBlbnRyeS4KKyAqLworc3RhdGljIGlubGluZSBUdXBs ZVRhYmxlU2xvdCAqCitTZXFTY2FuQmF0Y2hTbG90KFNlcVNjYW5TdGF0ZSAqbm9kZSwKKwkJCQkg RXhwclN0YXRlICpxdWFsLCBQcm9qZWN0aW9uSW5mbyAqcHJvakluZm8pCit7CisJRXhwckNvbnRl eHQgKmVjb250ZXh0ID0gbm9kZS0+c3MucHMucHNfRXhwckNvbnRleHQ7CisJUm93QmF0Y2ggKmIg PSBub2RlLT5iYXRjaDsKKworCS8qIEJhdGNoIHBhdGggZG9lcyBub3Qgc3VwcG9ydCBFUFEgKi8K KwlBc3NlcnQobm9kZS0+c3MucHMuc3RhdGUtPmVzX2VwcV9hY3RpdmUgPT0gTlVMTCk7CisJQXNz ZXJ0KFJvd0JhdGNoSXNWYWxpZChiKSk7CisKKwlmb3IgKDs7KQorCXsKKwkJVHVwbGVUYWJsZVNs b3QgKmluOworCisJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CisKKwkJLyogR2V0IG5leHQgaW5w dXQgc2xvdCBmcm9tIGN1cnJlbnQgYmF0Y2gsIG9yIHJlZmlsbCAqLworCQlpZiAoIVJvd0JhdGNo SGFzTW9yZShiKSkKKwkJeworCQkJaWYgKCFTZXFOZXh0QmF0Y2gobm9kZSkpCisJCQkJcmV0dXJu IE5VTEw7CisJCX0KKworCQlpbiA9IFJvd0JhdGNoR2V0TmV4dFNsb3QoYik7CisJCUFzc2VydChp bik7CisKKwkJLyogTm8gcXVhbCwgbm8gcHJvamVjdGlvbjogZGlyZWN0IHJldHVybiAqLworCQlp ZiAocXVhbCA9PSBOVUxMICYmIHByb2pJbmZvID09IE5VTEwpCisJCQlyZXR1cm4gaW47CisKKwkJ UmVzZXRFeHByQ29udGV4dChlY29udGV4dCk7CisJCWVjb250ZXh0LT5lY3h0X3NjYW50dXBsZSA9 IGluOworCisJCS8qIENoZWNrIHF1YWwgaWYgcHJlc2VudCAqLworCQlpZiAocXVhbCAhPSBOVUxM ICYmICFFeGVjUXVhbChxdWFsLCBlY29udGV4dCkpCisJCXsKKwkJCUluc3RyQ291bnRGaWx0ZXJl ZDEobm9kZSwgMSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIFByb2plY3QgaWYgbmVlZGVk LCBvdGhlcndpc2UgcmV0dXJuIHNjYW4gdHVwbGUgZGlyZWN0bHkgKi8KKwkJaWYgKHByb2pJbmZv ICE9IE5VTEwpCisJCQlyZXR1cm4gRXhlY1Byb2plY3QocHJvakluZm8pOworCisJCXJldHVybiBp bjsKKwl9Cit9CisKK3N0YXRpYyBUdXBsZVRhYmxlU2xvdCAqCitFeGVjU2VxU2NhbkJhdGNoU2xv dChQbGFuU3RhdGUgKnBzdGF0ZSkKK3sKKwlTZXFTY2FuU3RhdGUgKm5vZGUgPSBjYXN0Tm9kZShT ZXFTY2FuU3RhdGUsIHBzdGF0ZSk7CisKKwlBc3NlcnQocHN0YXRlLT5zdGF0ZS0+ZXNfZXBxX2Fj dGl2ZSA9PSBOVUxMKTsKKwlBc3NlcnQocHN0YXRlLT5xdWFsID09IE5VTEwpOworCUFzc2VydChw c3RhdGUtPnBzX1Byb2pJbmZvID09IE5VTEwpOworCisJcmV0dXJuIFNlcVNjYW5CYXRjaFNsb3Qo bm9kZSwgTlVMTCwgTlVMTCk7Cit9CisKK3N0YXRpYyBUdXBsZVRhYmxlU2xvdCAqCitFeGVjU2Vx U2NhbkJhdGNoU2xvdFdpdGhRdWFsKFBsYW5TdGF0ZSAqcHN0YXRlKQoreworCVNlcVNjYW5TdGF0 ZSAqbm9kZSA9IGNhc3ROb2RlKFNlcVNjYW5TdGF0ZSwgcHN0YXRlKTsKKworCS8qCisJICogVXNl IHBnX2Fzc3VtZSgpIGZvciAhPSBOVUxMIHRlc3RzIHRvIG1ha2UgdGhlIGNvbXBpbGVyIHJlYWxp emUgbm8KKwkgKiBydW50aW1lIGNoZWNrIGZvciB0aGUgZmllbGQgaXMgbmVlZGVkIGluIEV4ZWNT Y2FuRXh0ZW5kZWQoKS4KKwkgKi8KKwlBc3NlcnQocHN0YXRlLT5zdGF0ZS0+ZXNfZXBxX2FjdGl2 ZSA9PSBOVUxMKTsKKwlwZ19hc3N1bWUocHN0YXRlLT5xdWFsICE9IE5VTEwpOworCUFzc2VydChw c3RhdGUtPnBzX1Byb2pJbmZvID09IE5VTEwpOworCisJcmV0dXJuIFNlcVNjYW5CYXRjaFNsb3Qo bm9kZSwgcHN0YXRlLT5xdWFsLCBOVUxMKTsKK30KKworLyoKKyAqIFZhcmlhbnQgb2YgRXhlY1Nl cVNjYW4oKSBidXQgd2hlbiBwcm9qZWN0aW9uIGlzIHJlcXVpcmVkLgorICovCitzdGF0aWMgVHVw bGVUYWJsZVNsb3QgKgorRXhlY1NlcVNjYW5CYXRjaFNsb3RXaXRoUHJvamVjdChQbGFuU3RhdGUg KnBzdGF0ZSkKK3sKKwlTZXFTY2FuU3RhdGUgKm5vZGUgPSBjYXN0Tm9kZShTZXFTY2FuU3RhdGUs IHBzdGF0ZSk7CisKKwlBc3NlcnQocHN0YXRlLT5zdGF0ZS0+ZXNfZXBxX2FjdGl2ZSA9PSBOVUxM KTsKKwlBc3NlcnQocHN0YXRlLT5xdWFsID09IE5VTEwpOworCXBnX2Fzc3VtZShwc3RhdGUtPnBz X1Byb2pJbmZvICE9IE5VTEwpOworCisJcmV0dXJuIFNlcVNjYW5CYXRjaFNsb3Qobm9kZSwgTlVM TCwgcHN0YXRlLT5wc19Qcm9qSW5mbyk7Cit9CisKKy8qCisgKiBWYXJpYW50IG9mIEV4ZWNTZXFT Y2FuKCkgYnV0IHdoZW4gcXVhbCBldmFsdWF0aW9uIGFuZCBwcm9qZWN0aW9uIGFyZQorICogcmVx dWlyZWQuCisgKi8KK3N0YXRpYyBUdXBsZVRhYmxlU2xvdCAqCitFeGVjU2VxU2NhbkJhdGNoU2xv dFdpdGhRdWFsUHJvamVjdChQbGFuU3RhdGUgKnBzdGF0ZSkKK3sKKwlTZXFTY2FuU3RhdGUgKm5v ZGUgPSBjYXN0Tm9kZShTZXFTY2FuU3RhdGUsIHBzdGF0ZSk7CisKKwlBc3NlcnQocHN0YXRlLT5z dGF0ZS0+ZXNfZXBxX2FjdGl2ZSA9PSBOVUxMKTsKKwlwZ19hc3N1bWUocHN0YXRlLT5xdWFsICE9 IE5VTEwpOworCXBnX2Fzc3VtZShwc3RhdGUtPnBzX1Byb2pJbmZvICE9IE5VTEwpOworCisJcmV0 dXJuIFNlcVNjYW5CYXRjaFNsb3Qobm9kZSwgcHN0YXRlLT5xdWFsLCBwc3RhdGUtPnBzX1Byb2pJ bmZvKTsKK30KKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoJCUV4ZWNJbml0U2VxU2NhbgogICogLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpA QCAtMjgzLDYgKzU1NSw5IEBAIEV4ZWNJbml0U2VxU2NhbihTZXFTY2FuICpub2RlLCBFU3RhdGUg KmVzdGF0ZSwgaW50IGVmbGFncykKIAkJCXNjYW5zdGF0ZS0+c3MucHMuRXhlY1Byb2NOb2RlID0g RXhlY1NlcVNjYW5XaXRoUXVhbFByb2plY3Q7CiAJfQogCisJaWYgKFNlcVNjYW5DYW5Vc2VCYXRj aGluZyhzY2Fuc3RhdGUsIGVmbGFncykpCisJCVNlcVNjYW5Jbml0QmF0Y2hpbmcoc2NhbnN0YXRl KTsKKwogCXJldHVybiBzY2Fuc3RhdGU7CiB9CiAKQEAgLTMwMiw2ICs1NzcsOCBAQCBFeGVjRW5k U2VxU2NhbihTZXFTY2FuU3RhdGUgKm5vZGUpCiAJICovCiAJc2NhbkRlc2MgPSBub2RlLT5zcy5z c19jdXJyZW50U2NhbkRlc2M7CiAKKwlTZXFTY2FuUmVzZXRCYXRjaGluZyhub2RlLCB0cnVlKTsK KwogCS8qCiAJICogY2xvc2UgaGVhcCBzY2FuCiAJICovCkBAIC0zMzEsNiArNjA4LDcgQEAgRXhl Y1JlU2NhblNlcVNjYW4oU2VxU2NhblN0YXRlICpub2RlKQogCQl0YWJsZV9yZXNjYW4oc2NhbiwJ CS8qIHNjYW4gZGVzYyAqLwogCQkJCQkgTlVMTCk7CQkvKiBuZXcgc2NhbiBrZXlzICovCiAKKwlT ZXFTY2FuUmVzZXRCYXRjaGluZyhub2RlLCBmYWxzZSk7CiAJRXhlY1NjYW5SZVNjYW4oKFNjYW5T dGF0ZSAqKSBub2RlKTsKIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9n bG9iYWxzLmMgYi9zcmMvYmFja2VuZC91dGlscy9pbml0L2dsb2JhbHMuYwppbmRleCAzNmFkNzA4 YjM2MC4uNTM1ZTI5ZDc4MjMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvZ2xv YmFscy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvZ2xvYmFscy5jCkBAIC0xNjUsMyAr MTY1LDYgQEAgaW50CQkJbm90aWZ5X2J1ZmZlcnMgPSAxNjsKIGludAkJCXNlcmlhbGl6YWJsZV9i dWZmZXJzID0gMzI7CiBpbnQJCQlzdWJ0cmFuc2FjdGlvbl9idWZmZXJzID0gMDsKIGludAkJCXRy YW5zYWN0aW9uX2J1ZmZlcnMgPSAwOworCisvKiBleGVjdXRvciBiYXRjaGluZyAqLworaW50CQkJ ZXhlY3V0b3JfYmF0Y2hfcm93cyA9IDY0OwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMv bWlzYy9ndWNfcGFyYW1ldGVycy5kYXQgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJh bWV0ZXJzLmRhdAppbmRleCBhMzE1YzRhYjhhYi4uYTU5YjVkMDEyYTIgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0CisrKyBiL3NyYy9iYWNrZW5k L3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0CkBAIC0xMDQ1LDYgKzEwNDUsMTUgQEAKICAg Ym9vdF92YWwgPT4gJ3RydWUnLAogfSwKIAoreyBuYW1lID0+ICdleGVjdXRvcl9iYXRjaF9yb3dz JywgdHlwZSA9PiAnaW50JywgY29udGV4dCA9PiAnUEdDX1VTRVJTRVQnLCBncm91cCA9PiAnREVW RUxPUEVSX09QVElPTlMnLAorICBzaG9ydF9kZXNjID0+ICdOdW1iZXIgb2Ygcm93cyB0byBpbmNs dWRlIGluIGJhdGNoZXMgZHVyaW5nIGV4ZWN1dGlvbi4nLAorICBmbGFncyA9PiAnR1VDX05PVF9J Tl9TQU1QTEUnLAorICB2YXJpYWJsZSA9PiAnZXhlY3V0b3JfYmF0Y2hfcm93cycsCisgIGJvb3Rf dmFsID0+ICc2NCcsCisgIG1pbiA9PiAnMCcsCisgIG1heCA9PiAnMTAyNCcsCit9LAorCiB7IG5h bWUgPT4gJ2V4aXRfb25fZXJyb3InLCB0eXBlID0+ICdib29sJywgY29udGV4dCA9PiAnUEdDX1VT RVJTRVQnLCBncm91cCA9PiAnRVJST1JfSEFORExJTkdfT1BUSU9OUycsCiAgIHNob3J0X2Rlc2Mg PT4gJ1Rlcm1pbmF0ZSBzZXNzaW9uIG9uIGFueSBlcnJvci4nLAogICB2YXJpYWJsZSA9PiAnRXhp dE9uQW55RXJyb3InLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbWlzY2FkbWluLmggYi9zcmMv aW5jbHVkZS9taXNjYWRtaW4uaAppbmRleCA3Mjc3YzM3ZTc3OS4uMzAyYzBlMzMxNjUgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL21pc2NhZG1pbi5oCisrKyBiL3NyYy9pbmNsdWRlL21pc2NhZG1p bi5oCkBAIC0yODgsNiArMjg4LDcgQEAgZXh0ZXJuIFBHRExMSU1QT1JUIGRvdWJsZSBWYWN1dW1D b3N0RGVsYXk7CiBleHRlcm4gUEdETExJTVBPUlQgaW50IFZhY3V1bUNvc3RCYWxhbmNlOwogZXh0 ZXJuIFBHRExMSU1QT1JUIGJvb2wgVmFjdXVtQ29zdEFjdGl2ZTsKIAorZXh0ZXJuIFBHRExMSU1Q T1JUIGludCBleGVjdXRvcl9iYXRjaF9yb3dzOwogCiAvKiBpbiB1dGlscy9taXNjL3N0YWNrX2Rl cHRoLmMgKi8KIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggYi9z cmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaAppbmRleCAzZWNhZTc1NTJmYy4uMGY4NDMxZWU4 NTQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCisrKyBiL3NyYy9p bmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCkBAIC03MCw2ICs3MCw3IEBAIHR5cGVkZWYgc3RydWN0 IFR1cGxlVGFibGVTbG90IFR1cGxlVGFibGVTbG90OwogdHlwZWRlZiBzdHJ1Y3QgVHVwbGVUYWJs ZVNsb3RPcHMgVHVwbGVUYWJsZVNsb3RPcHM7CiB0eXBlZGVmIHN0cnVjdCBXYWxVc2FnZSBXYWxV c2FnZTsKIHR5cGVkZWYgc3RydWN0IFdvcmtlck5vZGVJbnN0cnVtZW50YXRpb24gV29ya2VyTm9k ZUluc3RydW1lbnRhdGlvbjsKK3R5cGVkZWYgc3RydWN0IFJvd0JhdGNoIFJvd0JhdGNoOwogCiAK IC8qIC0tLS0tLS0tLS0tLS0tLS0KQEAgLTE2NzAsNiArMTY3MSw3IEBAIHR5cGVkZWYgc3RydWN0 IFNlcVNjYW5TdGF0ZQogewogCVNjYW5TdGF0ZQlzczsJCQkJLyogaXRzIGZpcnN0IGZpZWxkIGlz IE5vZGVUYWcgKi8KIAlTaXplCQlwc2Nhbl9sZW47CQkvKiBzaXplIG9mIHBhcmFsbGVsIGhlYXAg c2NhbiBkZXNjcmlwdG9yICovCisJUm93QmF0Y2ggICAqYmF0Y2g7CQkJLyogTlVMTCBpZiBiYXRj aGluZyBkaXNhYmxlZCAqLwogfSBTZXFTY2FuU3RhdGU7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0K LS0gCjIuNDcuMwoK --00000000000043db7e064ec97207--