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.94.2) (envelope-from ) id 1v28VO-000dft-2r for pgsql-hackers@arkaria.postgresql.org; Fri, 26 Sep 2025 13:28:58 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1v28VL-001XuR-2w for pgsql-hackers@arkaria.postgresql.org; Fri, 26 Sep 2025 13:28:55 +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.94.2) (envelope-from ) id 1v28VK-001XuI-5S for pgsql-hackers@lists.postgresql.org; Fri, 26 Sep 2025 13:28:55 +0000 Received: from mail-pj1-x102d.google.com ([2607:f8b0:4864:20::102d]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1v28VH-00023V-1X for pgsql-hackers@postgresql.org; Fri, 26 Sep 2025 13:28:53 +0000 Received: by mail-pj1-x102d.google.com with SMTP id 98e67ed59e1d1-33274fcf5c1so2218598a91.1 for ; Fri, 26 Sep 2025 06:28:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1758893331; x=1759498131; darn=postgresql.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=qRylTUABoLzpS3vf3CoHRUmifWzeSPghlr35FvG/QXQ=; b=VxZeQKs6XLwfhWKqirWlF+mFTTA8krUOwMuSXVZyt1EkHRTJZSpH4wZge0AxPK9NsU Amg0zD08EEOE0arfE2e2qs7i9dJKSKfvINwqNOhPRpzuvXUCo/ilfszCYKIFLVF2li+G gy+wW/1Oo4xG8JadLWnO6I+m0IzzWE4qKzqCafLixEaCgJU5rSPFCeuUZcQnBXdY65qz Qb5RctIw3g5t+rgbOxNEg8xtZbJPyzdSXlxttASeEl8i+c7jcknHE1p1HGysZrP4k1au izwHrHO3a0nVf/lurH5BK3XU4MCWKLvagTPftsh+Ul+9QJBWM0eukRj4vMMLQCXza4OR BwXA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758893331; x=1759498131; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=qRylTUABoLzpS3vf3CoHRUmifWzeSPghlr35FvG/QXQ=; b=n6JNctxpA6zV2jts9IFuoQ8Kz8q1SEMti3N2M6wIzP23PqsK2J1fKKOcJtGrf6BLTl WNqM42ZX0lX8mUi6AnL6vB43jd7xcl7u6oe+Yz6K+Ft/xlxUDbynjsGkpE2iUExIB98C dMiMscY0bdEVrpQsRc9CnSmJVUJmeWTkQVXvIv2jJWxMxmy4rkeZZeXbGUEjc3ClRP1a bFQpUbMzXbB48PIIAmbfvK7mqhSjCnL6u1BXT5Sn1LbQ5Recd/TbcnCsl7VlwrTROrmp okutnKm7Qj0rJGtIoLocc+1xL0SscokDFGlSwRYz10YlqN/YW+AXthGCT4sZc4zwo++b 0mfw== X-Gm-Message-State: AOJu0YzqgRljN+amxgkNRant9EIzkuazsEhxmM6R6ihHEQ8wzfTWO3kH oA0LDrB5YQx1fE2+mAyVeS8ctEdzkkebCyKGxL8bBPPVb+pQOH0sIKSg2nIDBNDzAPRG+ZJC8ou wbP7Gg26lbCMTzd08x2wob3ajQXAf3JGZJogX X-Gm-Gg: ASbGncvoVLfP2zyT6wia9Jg3y+jcNWyq/aIQFCZzh5XnHEiQ+zo+kppaCUKFonzGr+9 MEufgN5Jpp9dU305gM0GYl5A2dTi6C46DYeKSKJkDCfPqWk7bcryZVZd4CoBUk7BzoRhgGV7Hfx R6hKuvdjnQoQ5CwyAol5uA26rBlktfiSzo6VgEiHO6H/GFGN2rN3TAgszCOFbdRH/Fh7joXB6Tv WKBdld6 X-Google-Smtp-Source: AGHT+IFCGiv4Ehlv2wGJkpI6Zmkr/xF1wCWz28nqIvFrNtks670Z+sRoyNpXqnBBk54imnR3CNZQOUvRVHhhSGnfr9E= X-Received: by 2002:a17:90b:3e83:b0:32e:749d:fcb4 with SMTP id 98e67ed59e1d1-3342a23781cmr7861128a91.6.1758893330592; Fri, 26 Sep 2025 06:28:50 -0700 (PDT) MIME-Version: 1.0 From: Amit Langote Date: Fri, 26 Sep 2025 22:28:33 +0900 X-Gm-Features: AS18NWC3Uoh01qsSGtbKYPTIyMhPUjuAKjJs3_3OqXWPJYkueK4MpI26FuMPuP4 Message-ID: Subject: Batching in executor To: PostgreSQL-development Content-Type: multipart/mixed; boundary="0000000000002b1beb063fb44440" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000002b1beb063fb44440 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable At PGConf.dev this year we had an unconference session [1] on whether the community can support an additional batch executor. The discussion there led me to start hacking on $subject. I have also had off-list discussions on this topic in recent months with Andres and David, who have offered useful thoughts. This patch series is an early attempt to make executor nodes pass around batches of tuples instead of tuple-at-a-time slots. The main motivation is to enable expression evaluation in batch form, which can substantially reduce per-tuple overhead (mainly from function calls) and open the door to further optimizations such as SIMD usage in aggregate transition functions. We could even change algorithms of some plan nodes to operate on batches when, for example, a child node can return batches. The expression evaluation changes are still exploratory, but before moving to make them ready for serious review, we first need a way for scan nodes to produce tuples in batches and an executor API that allows upper nodes to consume them. The series includes both the foundational work to let scan nodes produce batches and an executor API to pass them around, and a set of follow-on patches that experiment with batch-aware expression evaluation. The patch set is structured in two parts. The first three patches lay the groundwork in the executor and table AM, and the later patches prototype batch-aware expression evaluation. Patches 0001-0003 introduce a new batch table AM API and an initial heapam implementation that can return multiple tuples per call. SeqScan is adapted to use this interface, with new ExecSeqScanBatch* routines that fetch tuples in bulk but can still return one TupleTableSlot at a time to preserve compatibility. On the executor side, ExecProcNodeBatch() is added alongside ExecProcNode(), with TupleBatch as the new container for passing groups of tuples. ExecScan has batch-aware variants that use the AM API internally, but can fall back to row-at-a-time behavior when required. Plan shapes and EXPLAIN output remain unchanged; the differences here are executor-internal. At present, heapam batches are restricted to tuples from a single page, which means they may not always fill EXEC_BATCH_ROWS (currently 64). That limits how much upper executor nodes can leverage batching, especially with selective quals where batches may end up sparsely populated. A future improvement would be to allow batches to span pages or to let the scan node request more tuples when its buffer is not yet full, so it avoids passing mostly empty TupleBatch to upper nodes. It might also be worth adding some lightweight instrumentation to make it easier to reason about batch behavior. For example, counters for average rows per batch, reasons why a batch ended (capacity reached, page boundary, end of scan), or batches per million rows could help confirm whether limitations like the single-page restriction or EXEC_BATCH_ROWS size are showing up in benchmarks. Suggestions from others on which forms of instrumentation would be most useful are welcome. Patches 0004 onwards start experimenting with making expression evaluation batch-aware, first in the aggregate node. These patches add new EEOPs (ExprEvalOps and ExprEvalSteps) to fetch attributes into TupleBatch vectors, evaluate quals across a batch, and run aggregate transitions over multiple rows at once. Agg is extended to pull TupleBatch from its child via ExecProcNodeBatch(), with two prototype paths: one that loops inside the interpreter and another that calls the transition function once per batch using AggBulkArgs. These are still PoCs, but with scan nodes and the executor capable of moving batches around, they provide a base from which the work can be refined into something potentially committable after the usual polish, testing, and review. One area that needs more thought is how TupleBatch interacts with ExprContext. At present the patches extend ExprContext with scan_batch, inner_batch, and outer_batch fields, but per-batch evaluation still spills into ecxt_per_tuple_memory, effectively reusing the per-tuple context for per-batch work. That=E2=80=99s arguably a= n abuse of the contract described in ExecEvalExprSwitchContext(), and it will need a cleaner definition of how batch-scoped memory should be managed. Feedback on how best to structure that would be particularly helpful. To evaluate the overheads and benefits, I ran microbenchmarks with single and multi-aggregate queries on a single table, with and without WHERE clauses. Tables were fully VACUUMed so visibility maps are set and IO costs are minimal. shared_buffers was large enough to fit the whole table (up to 10M rows, ~43 on each page), and all pages were prewarmed into cache before tests. Table schema/script is at [2]. Observations from benchmarking (Detailed benchmark tables are at [3]; below is just a high-level summary of the main patterns): * Single aggregate, no WHERE (SELECT count(*) FROM bar_N, SELECT sum(a) FROM bar_N): batching scan output alone improved latency by ~10-20%. Adding batched transition evaluation pushed gains to ~30-40%, especially once fmgr overhead was paid per batch instead of per row. * Single aggregate, with WHERE (WHERE a > 0 AND a < N): batching the qual interpreter gave a big step up, with latencies dropping by ~30-40% compared to batching=3Doff. * Five aggregates, no WHERE: batching input from the child scan cut ~15% off runtime. Adding batched transition evaluation increased improvements to ~30%. * Five aggregates, with WHERE: modest gains from scan/input batching, but per-batch transition evaluation and batched quals brought ~20-30% improvement. * Across all cases, executor overheads became visible only after IO was minimized. Once executor cost dominated, batching consistently reduced CPU time, with the largest benefits coming from avoiding per-row fmgr calls and evaluating quals across batches. I would appreciate if others could try these patches with their own microbenchmarks or workloads and see if they can reproduce numbers similar to mine. Feedback on both the general direction and the details of the patches would be very helpful. In particular, patches 0001-0003, which add the basic batch APIs and integrate them into SeqScan, are intended to be the first candidates for review and eventual commit. Comments on the later, more experimental patches (aggregate input batching and expression evaluation (qual, aggregate transition) batching) are also welcome. -- Thanks, Amit Langote [1] https://wiki.postgresql.org/wiki/PGConf.dev_2025_Developer_Unconference= #Can_the_Community_Support_an_Additional_Batch_Executor [2] Tables: cat create_tables.sh for i in 1000000 2000000 3000000 4000000 5000000 10000000; do psql -c "drop table if exists bar_$i; create table bar_$i (a int, b int, c int, d int, e int, f int, g int, h int, i text, j int, k int, l int, m int, n int, o int);" 2>&1 > /dev/null psql -c "insert into bar_$i select i, i, i, i, i, i, i, i, repeat('x', 100), i, i, i, i, i, i from generate_series(1, $i) i;" 2>&1 > /dev/null echo "bar_$i created." done [3] Benchmark result tables All timings are in milliseconds. off =3D executor_batching off, on =3D executor_batching on. Negative %diff means on is better than off. Single aggregate, no WHERE (~20% faster with scan batching only; ~40%+ faster with batched transitions= ) With only batched-seqscan (0001-0003): Rows off on %diff 1M 10.448 8.147 -22.0 2M 18.442 14.552 -21.1 3M 25.296 22.195 -12.3 4M 36.285 33.383 -8.0 5M 44.441 39.894 -10.2 10M 93.110 82.744 -11.1 With batched-agg on top (0001-0007): Rows off on %diff 1M 9.891 5.579 -43.6 2M 17.648 9.653 -45.3 3M 27.451 13.919 -49.3 4M 36.394 24.269 -33.3 5M 44.665 29.260 -34.5 10M 87.898 56.221 -36.0 Single aggregate, with WHERE (~30=E2=80=9340% faster once quals + transitions are batched) With only batched-seqscan (0001-0003): Rows off on %diff 1M 18.485 17.749 -4.0 2M 34.696 33.033 -4.8 3M 49.582 46.155 -6.9 4M 70.270 67.036 -4.6 5M 84.616 81.013 -4.3 10M 174.649 164.611 -5.7 With batched-agg and batched-qual on top (0001-0008): Rows off on %diff 1M 18.887 12.367 -34.5 2M 35.706 22.457 -37.1 3M 51.626 30.902 -40.1 4M 72.694 48.214 -33.7 5M 88.103 57.623 -34.6 10M 181.350 124.278 -31.5 Five aggregates, no WHERE (~15% faster with scan/input batching; ~30% with batched transitions) Agg input batching only (0001-0004): Rows off on %diff 1M 23.193 19.196 -17.2 2M 42.177 35.862 -15.0 3M 62.192 51.121 -17.8 4M 83.215 74.665 -10.3 5M 99.426 91.904 -7.6 10M 213.794 184.263 -13.8 Batched transition eval, per-row fmgr (0001-0006): Rows off on %diff 1M 23.501 19.672 -16.3 2M 44.128 36.603 -17.0 3M 64.466 53.079 -17.7 5M 103.442 97.623 -5.6 10M 219.120 190.354 -13.1 Batched transition eval, per-batch fmgr (0001-0007): Rows off on %diff 1M 24.238 16.806 -30.7 2M 43.056 30.939 -28.1 3M 62.938 43.295 -31.2 4M 83.346 63.357 -24.0 5M 100.772 78.351 -22.2 10M 213.755 162.203 -24.1 Five aggregates, with WHERE (~10=E2=80=9315% faster with scan/input batching; ~30% with batched transit= ions + quals) Agg input batching only (0001-0004): Rows off on %diff 1M 24.261 22.744 -6.3 2M 45.802 41.712 -8.9 3M 79.311 72.732 -8.3 4M 107.189 93.870 -12.4 5M 129.172 115.300 -10.7 10M 278.785 236.275 -15.2 Batched transition eval, per-batch fmgr (0001-0007): Rows off on %diff 1M 24.354 19.409 -20.3 2M 46.888 36.687 -21.8 3M 82.147 57.683 -29.8 4M 109.616 76.471 -30.2 5M 133.777 94.776 -29.2 10M 282.514 194.954 -31.0 Batched transition eval + batched qual (0001-0008): Rows off on %diff 1M 24.691 20.193 -18.2 2M 47.182 36.530 -22.6 3M 82.030 58.663 -28.5 4M 110.573 76.500 -30.8 5M 136.701 93.299 -31.7 10M 280.551 191.021 -31.9 --0000000000002b1beb063fb44440 Content-Type: application/octet-stream; name="v1-0007-WIP-Add-EEOP_AGG_PLAIN_TRANS_BATCH_DIRECT.patch" Content-Disposition: attachment; filename="v1-0007-WIP-Add-EEOP_AGG_PLAIN_TRANS_BATCH_DIRECT.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mg0jlk7l1 RnJvbSAwYmRiMTgyODRjYjAzNGNmODBhYzU2MTI1YjU2ODJlODRiODU2YTI2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFR1ZSwgOSBTZXAgMjAyNSAyMTo0MzoyOSArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjEg Ny84XSBXSVA6IEFkZCBFRU9QX0FHR19QTEFJTl9UUkFOU19CQVRDSF9ESVJFQ1QKClRoZSBuZXcg RUVPUCBydW5zIGEgcGxhaW4gYWdncmVnYXRlIHRyYW5zaXRpb24gb3ZlciBhIFR1cGxlQmF0Y2gg d2l0aAphIHNpbmdsZSBmbWdyIGNhbGwuIEJhdGNoIHZlY3RvcnMgYXJlIHBhc3NlZCB0byB0aGUg dHJhbnNmbiB2aWEKQWdnQnVsa0FyZ3Mgc3RvcmVkIGluIGZjaW5mby0+ZmxpbmZvLT5mbl9leHRy YSwgYXZvaWRpbmcgcGVyLXJvdyBmbWdyCm92ZXJoZWFkLgoKR2F0ZSBzZWxlY3Rpb24gd2l0aCBB Z2dUcmFuc2ZuU3VwcG9ydHNCdWxrKCksIGFuIGFsbG93bGlzdCBvZgpidWlsdC1pbiB0cmFuc2Zu cyB1cGRhdGVkIHRvIGFjY2VwdCBBZ2dCdWxrQXJncy4gIFNvbWUgaW50ZWdlcgp0cmFuc2ZucyBh cmUgdGF1Z2h0IHRvIHJlYWQgQWdnQnVsa0FyZ3Mgd2hlbiBwcmVzZW50LCBlbHNlIGZhbGwKYmFj ay4gUm93bG9vcCBiYXRjaGluZyByZW1haW5zIGF2YWlsYWJsZTsgdW5zdXBwb3J0ZWQgYWdncmVn YXRlcyBrZWVwCnRoZSByb3cgcGF0aC4KLS0tCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhw ci5jICAgICAgIHwgMjggKysrKysrKysrKysrKysrKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4 ZWNFeHBySW50ZXJwLmMgfCA0MyArKysrKysrKysrKysrKysrKysrKysrKysrKwogc3JjL2JhY2tl bmQvZXhlY3V0b3Ivbm9kZUFnZy5jICAgICAgICB8ICAxIC0KIHNyYy9iYWNrZW5kL2ppdC9sbHZt L2xsdm1qaXRfZXhwci5jICAgfCAgMSArCiBzcmMvYmFja2VuZC91dGlscy9hZHQvaW50LmMgICAg ICAgICAgIHwgMzIgKysrKysrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2lu dDguYyAgICAgICAgICB8IDQ0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKwogc3JjL2JhY2tl bmQvdXRpbHMvYWR0L251bWVyaWMuYyAgICAgICB8IDE3ICsrKysrKysrKysrCiBzcmMvaW5jbHVk ZS9leGVjdXRvci9leGVjRXhwci5oICAgICAgIHwgIDEgKwogc3JjL2luY2x1ZGUvZXhlY3V0b3Iv ZXhlY3V0b3IuaCAgICAgICB8IDIwICsrKysrKysrKysrKwogOSBmaWxlcyBjaGFuZ2VkLCAxODUg aW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9l eGVjdXRvci9leGVjRXhwci5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHIuYwppbmRl eCBhZjVlZDhiNjM2OC4uMjdhNTc4MGY1NTcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL2V4ZWNFeHByLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHIuYwpAQCAt NDcsNiArNDcsNyBAQAogI2luY2x1ZGUgInV0aWxzL2FjbC5oIgogI2luY2x1ZGUgInV0aWxzL2Fy cmF5LmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKKyNpbmNsdWRlICJ1dGlscy9mbWdy b2lkcy5oIgogI2luY2x1ZGUgInV0aWxzL2pzb25mdW5jcy5oIgogI2luY2x1ZGUgInV0aWxzL2pz b25wYXRoLmgiCiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCkBAIC0zNjkyLDYgKzM2OTMs MjggQEAgQWdnVHJhbnNDYW5Vc2VCYXRjaChBZ2dTdGF0ZSAqYXMsIEFnZ1N0YXRlUGVyVHJhbnMg cHQpCiAJcmV0dXJuIHRydWU7CiB9CiAKKy8qIFJldHVybiB0cnVlIGlmIHRoaXMgdHJhbnNmbiBP SUQgaXMga25vd24gdG8gYWNjZXB0IEFnZ0J1bGtBcmdzLiAqLworc3RhdGljIGJvb2wKK0FnZ1Ry YW5zZm5TdXBwb3J0c0J1bGsoT2lkIGZuX29pZCkKK3sKKwkvKiBQaGFzZSAxOiBoYXJkLWNvZGVk IGFsbG93bGlzdCBvZiBidWlsdC1pbnMgeW91IHVwZGF0ZWQuICovCisJc3RhdGljIGNvbnN0IE9p ZCBva1tdID0KKwl7CisJCUZfSU5UOElOQ19BTlksCQkvKiBDT1VOVCgqKSB0cmFuc2ZuICovCisJ CUZfSU5UOElOQywJCQkvKiBDT1VOVChhcmcpIHRyYW5zZm4gKi8KKwkJRl9JTlQ0X1NVTSwJCQkv KiBTVU0oaW50KSB0cmFuc2ZuICovCisJCUZfSU5UNFNNQUxMRVIsCQkvKiBNSU4oaW50KSB0cmFu c2ZuICovCisJCUZfSU5UNExBUkdFUiwJCS8qIE1BWChpbnQpIHRyYW5zZm4gKi8KKwkJLyogYWRk IG90aGVycyB5b3UgbWFrZSBidWxrLWF3YXJlICovCisJCUludmFsaWRPaWQKKwl9OworCisJZm9y IChpbnQgaSA9IDA7IE9pZElzVmFsaWQob2tbaV0pOyBpKyspCisJCWlmIChva1tpXSA9PSBmbl9v aWQpCisJCQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gZmFsc2U7Cit9CisKIC8qCiAgKiBCdWlsZCB0 cmFuc2l0aW9uL2NvbWJpbmUgZnVuY3Rpb24gaW52b2NhdGlvbnMgZm9yIGFsbCBhZ2dyZWdhdGUg dHJhbnNpdGlvbgogICogLyBjb21iaW5hdGlvbiBmdW5jdGlvbiBpbnZvY2F0aW9ucyBpbiBhIGdy b3VwaW5nIHNldHMgcGhhc2UuIFRoaXMgaGFzIHRvCkBAIC00MTUwLDcgKzQxNzMsMTAgQEAgRXhl Y0J1aWxkQWdnVHJhbnNDYWxsKEV4cHJTdGF0ZSAqc3RhdGUsIEFnZ1N0YXRlICphZ2dzdGF0ZSwK IAkJewogCQkJaWYgKGJ2KQogCQkJCWJ2cyA9IEJhdGNoVmVjdG9yU2xpY2VGcm9tRXhwckFyZ3Mo cGVydHJhbnMtPmFnZ3JlZi0+YXJncywgYnYpOwotCQkJc2NyYXRjaC0+b3Bjb2RlID0gRUVPUF9B R0dfUExBSU5fVFJBTlNfQkFUQ0hfUk9XTE9PUDsKKwkJCWlmICghQWdnVHJhbnNmblN1cHBvcnRz QnVsayhwZXJ0cmFucy0+dHJhbnNmbl9vaWQpKQorCQkJCXNjcmF0Y2gtPm9wY29kZSA9IEVFT1Bf QUdHX1BMQUlOX1RSQU5TX0JBVENIX1JPV0xPT1A7CisJCQllbHNlCisJCQkJc2NyYXRjaC0+b3Bj b2RlID0gRUVPUF9BR0dfUExBSU5fVFJBTlNfQkFUQ0hfRElSRUNUOwogCQl9CiAJCWVsc2UgaWYg KHBlcnRyYW5zLT50cmFuc3R5cGVCeVZhbCkKIAkJewpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv ZXhlY3V0b3IvZXhlY0V4cHJJbnRlcnAuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHBy SW50ZXJwLmMKaW5kZXggMzE3NjY3OWIzNDYuLjQxYWQ5YjQ4MzhkIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9leGVjdXRvci9leGVjRXhwckludGVycC5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL2V4ZWNFeHBySW50ZXJwLmMKQEAgLTYwNyw2ICs2MDcsNyBAQCBFeGVjSW50ZXJwRXhwcihF eHByU3RhdGUgKnN0YXRlLCBFeHByQ29udGV4dCAqZWNvbnRleHQsIGJvb2wgKmlzbnVsbCkKIAkJ JiZDQVNFX0VFT1BfQlVJTERfT1VURVJfQkFUQ0hfVkVDVE9SLAogCQkmJkNBU0VfRUVPUF9CVUlM RF9TQ0FOX0JBVENIX1ZFQ1RPUiwKIAkJJiZDQVNFX0VFT1BfQUdHX1BMQUlOX1RSQU5TX0JBVENI X1JPV0xPT1AsCisJCSYmQ0FTRV9FRU9QX0FHR19QTEFJTl9UUkFOU19CQVRDSF9ESVJFQ1QsCiAJ CSYmQ0FTRV9FRU9QX0xBU1QKIAl9OwogCkBAIC0yMzQ1LDYgKzIzNDYsMTQgQEAgRXhlY0ludGVy cEV4cHIoRXhwclN0YXRlICpzdGF0ZSwgRXhwckNvbnRleHQgKmVjb250ZXh0LCBib29sICppc251 bGwpCiAJCQlFRU9fTkVYVCgpOwogCQl9CiAKKwkJRUVPX0NBU0UoRUVPUF9BR0dfUExBSU5fVFJB TlNfQkFUQ0hfRElSRUNUKQorCQl7CisJCQkvKiB0b28gY29tcGxleCBmb3IgYW4gaW5saW5lIGlt cGxlbWVudGF0aW9uICovCisJCQlFeGVjQWdnUGxhaW5UcmFuc0JhdGNoKHN0YXRlLCBvcCwgZWNv bnRleHQpOworCisJCQlFRU9fTkVYVCgpOworCQl9CisKIAkJRUVPX0NBU0UoRUVPUF9MQVNUKQog CQl7CiAJCQkvKiB1bnJlYWNoYWJsZSAqLwpAQCAtNjEzOCw2ICs2MTQ3LDQwIEBAIEV4ZWNBZ2dQ bGFpblRyYW5zQmF0Y2goRXhwclN0YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVwICpvcCwgRXhwckNv bnRleHQgKmVjb250ZXh0CiAJCQkJcGVyZ3JvdXAtPnRyYW5zVmFsdWVJc051bGwgPSBmY2luZm8t PmlzbnVsbDsKIAkJCX0KIAkJCWJyZWFrOworCisJCWNhc2UgRUVPUF9BR0dfUExBSU5fVFJBTlNf QkFUQ0hfRElSRUNUOgorCQkJeworCQkJCXZvaWQgKnNhdmUgPSBmY2luZm8tPmZsaW5mby0+Zm5f ZXh0cmE7CisJCQkJQWdnQnVsa0FyZ3MgYmEgPSB7YmF0Y2hfbnJvd3MsIHN0YXJ0X3Jvd307CisK KwkJCQlpZiAoYnZzKQorCQkJCXsKKwkJCQkJY29uc3QgQmF0Y2hWZWN0b3IgKmJ2ID0gYnZzLT5i djsKKworCQkJCQlBc3NlcnQoYnYpOworCQkJCQliYS5uYXJncyA9IGJ2cy0+bmFyZ3M7CisJCQkJ CWJhLmFyZ29mZnMgPSBidnMtPmFyZ29mZnM7CisJCQkJCWJhLmFyZ3MgPSBidi0+Y29sczsKKwkJ CQkJYmEuaXNudWxsID0gYnYtPm51bGxzOworCQkJCQliYS5oYXNudWxsID0gYnYtPmhhc251bGw7 CisJCQkJfQorCQkJCWZjaW5mby0+ZmxpbmZvLT5mbl9leHRyYSA9ICZiYTsKKwkJCQlmY2luZm8t PmFyZ3NbMF0udmFsdWUgPSBwZXJncm91cC0+dHJhbnNWYWx1ZTsKKwkJCQlmY2luZm8tPmFyZ3Nb MF0uaXNudWxsID0gcGVyZ3JvdXAtPnRyYW5zVmFsdWVJc051bGw7CisJCQkJZmNpbmZvLT5pc251 bGwgPSBmYWxzZTsJCS8qIGp1c3QgaW4gY2FzZSB0cmFuc2ZuIGRvZXNuJ3Qgc2V0IGl0ICovCisJ CQkJbmV3VmFsID0gRnVuY3Rpb25DYWxsSW52b2tlKGZjaW5mbyk7ICAgLyogb25lIGNhbGwgZm9y IHRoZSBlbnRpcmUgc2xpY2UgKi8KKwkJCQlpZiAoIXBlcnRyYW5zLT50cmFuc3R5cGVCeVZhbCAm JgorCQkJCQlEYXR1bUdldFBvaW50ZXIobmV3VmFsKSAhPSBEYXR1bUdldFBvaW50ZXIocGVyZ3Jv dXAtPnRyYW5zVmFsdWUpKQorCQkJCQluZXdWYWwgPSBFeGVjQWdnQ29weVRyYW5zVmFsdWUoYWdn c3RhdGUsIHBlcnRyYW5zLAorCQkJCQkJCQkJCQkJICAgbmV3VmFsLCBmY2luZm8tPmlzbnVsbCwK KwkJCQkJCQkJCQkJCSAgIHBlcmdyb3VwLT50cmFuc1ZhbHVlLAorCQkJCQkJCQkJCQkJICAgcGVy Z3JvdXAtPnRyYW5zVmFsdWVJc051bGwpOworCQkJCXBlcmdyb3VwLT50cmFuc1ZhbHVlID0gbmV3 VmFsOworCQkJCXBlcmdyb3VwLT50cmFuc1ZhbHVlSXNOdWxsID0gZmNpbmZvLT5pc251bGw7CisJ CQkJZmNpbmZvLT5mbGluZm8tPmZuX2V4dHJhID0gc2F2ZTsKKwkJCX0KKwkJCWJyZWFrOworCiAJ CWRlZmF1bHQ6CiAJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBFeHByRXZhbE9wIGluIEV4ZWNBZ2dQ bGFpblRyYW5zQmF0Y2goKSIpOwogCX0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9y L25vZGVBZ2cuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVBZ2cuYwppbmRleCA2NjJkOGJl ZjQzYi4uYTIyODZlZjVlNTQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVB Z2cuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQWdnLmMKQEAgLTI2ODcsNyArMjY4 Nyw2IEBAIGFnZ19yZXRyaWV2ZV9kaXJlY3RfYmF0Y2goQWdnU3RhdGUgKmFnZ3N0YXRlKQogCiAJ aW5pdGlhbGl6ZV9hZ2dyZWdhdGVzKGFnZ3N0YXRlLCBhZ2dzdGF0ZS0+cGVyZ3JvdXBzLAogCQkJ CQkJICBNYXgoYWdnc3RhdGUtPnBoYXNlLT5udW1zZXRzLCAxKSk7Ci0KIAlpZiAoYWdnc3RhdGUt PmdycF9maXJzdFR1cGxlKQogCXsKIAkJRXhlY0ZvcmNlU3RvcmVIZWFwVHVwbGUoYWdnc3RhdGUt PmdycF9maXJzdFR1cGxlLCBmaXJzdFNsb3QsIHRydWUpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvaml0L2xsdm0vbGx2bWppdF9leHByLmMgYi9zcmMvYmFja2VuZC9qaXQvbGx2bS9sbHZtaml0 X2V4cHIuYwppbmRleCBlZmIzZWU2MzlmYy4uNDUzNDYxMjRiZDcgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2ppdC9sbHZtL2xsdm1qaXRfZXhwci5jCisrKyBiL3NyYy9iYWNrZW5kL2ppdC9sbHZt L2xsdm1qaXRfZXhwci5jCkBAIC0zMDI2LDYgKzMwMjYsNyBAQCBsbHZtX2NvbXBpbGVfZXhwcihF eHByU3RhdGUgKnN0YXRlKQogCQkJCUxMVk1CdWlsZEJyKGIsIG9wYmxvY2tzW29wbm8gKyAxXSk7 CiAJCQkJYnJlYWs7CiAKKwkJCWNhc2UgRUVPUF9BR0dfUExBSU5fVFJBTlNfQkFUQ0hfRElSRUNU OgogCQkJY2FzZSBFRU9QX0FHR19QTEFJTl9UUkFOU19CQVRDSF9ST1dMT09QOgogCQkJCWJ1aWxk X0V2YWxYRnVuYyhiLCBtb2QsICJFeGVjQWdnUGxhaW5UcmFuc0JhdGNoIiwKIAkJCQkJCQkJdl9z dGF0ZSwgb3AsIHZfZWNvbnRleHQpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L2ludC5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2ludC5jCmluZGV4IGI1NzgxOTg5YTY0Li5l YjE3ODBiNTU5MCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2ludC5jCisrKyBi L3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9pbnQuYwpAQCAtMTM2MywxOCArMTM2Myw1MCBAQCBpbnQy c21hbGxlcihQR19GVU5DVElPTl9BUkdTKQogRGF0dW0KIGludDRsYXJnZXIoUEdfRlVOQ1RJT05f QVJHUykKIHsKKwlBZ2dCdWxrQXJncyAqYmEgPSBBZ2dHZXRCdWxrQXJncyhmY2luZm8pOwogCWlu dDMyCQlhcmcxID0gUEdfR0VUQVJHX0lOVDMyKDApOwogCWludDMyCQlhcmcyID0gUEdfR0VUQVJH X0lOVDMyKDEpOwogCisJaWYgKHVubGlrZWx5KGJhKSkKKwl7CisJCWludDMyIHJlc3VsdCA9IGFy ZzE7CisKKwkJZm9yIChpbnQgaSA9IGJhLT5zdGFydF9yb3c7IGkgPCBiYS0+bnJvd3M7IGkrKykK KwkJeworCQkJaWYgKCFiYS0+aXNudWxsW2JhLT5hcmdvZmZzWzBdXVtpXSkKKwkJCXsKKwkJCQlh cmcyID0gKGludDMyKSBiYS0+YXJnc1tiYS0+YXJnb2Zmc1swXV1baV07CisJCQkJaWYgKGFyZzIg PiByZXN1bHQpCisJCQkJCXJlc3VsdCA9IGFyZzI7CisJCQl9CisJCX0KKwkJUEdfUkVUVVJOX0lO VDMyKHJlc3VsdCk7CisJfQogCVBHX1JFVFVSTl9JTlQzMigoYXJnMSA+IGFyZzIpID8gYXJnMSA6 IGFyZzIpOwogfQogCiBEYXR1bQogaW50NHNtYWxsZXIoUEdfRlVOQ1RJT05fQVJHUykKIHsKKwlB Z2dCdWxrQXJncyAqYmEgPSBBZ2dHZXRCdWxrQXJncyhmY2luZm8pOwogCWludDMyCQlhcmcxID0g UEdfR0VUQVJHX0lOVDMyKDApOwogCWludDMyCQlhcmcyID0gUEdfR0VUQVJHX0lOVDMyKDEpOwog CisJaWYgKHVubGlrZWx5KGJhKSkKKwl7CisJCWludDMyIHJlc3VsdCA9IGFyZzE7CisKKwkJZm9y IChpbnQgaSA9IGJhLT5zdGFydF9yb3c7IGkgPCBiYS0+bnJvd3M7IGkrKykKKwkJeworCQkJaWYg KCFiYS0+aXNudWxsW2JhLT5hcmdvZmZzWzBdXVtpXSkKKwkJCXsKKwkJCQlhcmcyID0gYmEtPmFy Z3NbYmEtPmFyZ29mZnNbMF1dW2ldOworCQkJCWlmIChhcmcyIDwgcmVzdWx0KQorCQkJCQlyZXN1 bHQgPSBhcmcyOworCQkJfQorCQl9CisJCVBHX1JFVFVSTl9JTlQzMihyZXN1bHQpOworCX0KIAlQ R19SRVRVUk5fSU5UMzIoKGFyZzEgPCBhcmcyKSA/IGFyZzEgOiBhcmcyKTsKIH0KIApkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2ludDguYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2Fk dC9pbnQ4LmMKaW5kZXggYmRlYTQ5MDIwMmEuLmJiYWJmNGUwNzg1IDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC91dGlscy9hZHQvaW50OC5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9pbnQ4 LmMKQEAgLTQ2MSwxMCArNDYxLDI4IEBAIGludDh1cChQR19GVU5DVElPTl9BUkdTKQogRGF0dW0K IGludDhwbChQR19GVU5DVElPTl9BUkdTKQogeworCUFnZ0J1bGtBcmdzICpiYSA9IEFnZ0dldEJ1 bGtBcmdzKGZjaW5mbyk7CiAJaW50NjQJCWFyZzEgPSBQR19HRVRBUkdfSU5UNjQoMCk7CiAJaW50 NjQJCWFyZzIgPSBQR19HRVRBUkdfSU5UNjQoMSk7CiAJaW50NjQJCXJlc3VsdDsKIAorCWlmICh1 bmxpa2VseShiYSkpCisJeworCQlyZXN1bHQgPSBhcmcxOworCQlmb3IgKGludCBpID0gYmEtPnN0 YXJ0X3JvdzsgaSA8IGJhLT5ucm93czsgaSsrKQorCQl7CisJCQlpZiAoIWJhLT5pc251bGxbYmEt PmFyZ29mZnNbMF1dW2ldKQorCQkJeworCQkJCWFyZzIgPSBiYS0+YXJnc1tiYS0+YXJnb2Zmc1sw XV1baV07CisJCQkJaWYgKHVubGlrZWx5KHBnX2FkZF9zNjRfb3ZlcmZsb3coYXJnMSwgYXJnMiwg JnJlc3VsdCkpKQorCQkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJCShlcnJjb2RlKEVSUkNPREVf TlVNRVJJQ19WQUxVRV9PVVRfT0ZfUkFOR0UpLAorCQkJCQkJCSBlcnJtc2coImJpZ2ludCBvdXQg b2YgcmFuZ2UiKSkpOworCQkJCWFyZzEgPSByZXN1bHQ7CisJCQl9CisJCX0KKwkJUEdfUkVUVVJO X0lOVDY0KHJlc3VsdCk7CisJfQogCWlmICh1bmxpa2VseShwZ19hZGRfczY0X292ZXJmbG93KGFy ZzEsIGFyZzIsICZyZXN1bHQpKSkKIAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJyY29kZShFUlJD T0RFX05VTUVSSUNfVkFMVUVfT1VUX09GX1JBTkdFKSwKQEAgLTcxOCw5ICs3MzYsMzUgQEAgaW50 OGxjbShQR19GVU5DVElPTl9BUkdTKQogRGF0dW0KIGludDhpbmMoUEdfRlVOQ1RJT05fQVJHUykK IHsKKwlBZ2dCdWxrQXJncyAqYmEgPSBBZ2dHZXRCdWxrQXJncyhmY2luZm8pOwogCWludDY0CQlh cmcgPSBQR19HRVRBUkdfSU5UNjQoMCk7CiAJaW50NjQJCXJlc3VsdDsKIAorCWlmICh1bmxpa2Vs eShiYSkpCisJeworCQlyZXN1bHQgPSBhcmc7CisJCWlmICghYmEtPmhhc251bGwgfHwgYmEtPm5h cmdzID09IDApCisJCXsKKwkJCWlmICh1bmxpa2VseShwZ19hZGRfczY0X292ZXJmbG93KGFyZywg YmEtPm5yb3dzLCAmcmVzdWx0KSkpCisJCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkJKGVycmNv ZGUoRVJSQ09ERV9OVU1FUklDX1ZBTFVFX09VVF9PRl9SQU5HRSksCisJCQkJCQkJIGVycm1zZygi YmlnaW50IG91dCBvZiByYW5nZSIpKSk7CisJCQlQR19SRVRVUk5fSU5UNjQocmVzdWx0KTsKKwkJ fQorCQlmb3IgKGludCBpID0gYmEtPnN0YXJ0X3JvdzsgaSA8IGJhLT5ucm93czsgaSsrKQorCQl7 CisJCQlpZiAoIWJhLT5pc251bGxbYmEtPmFyZ29mZnNbMF1dW2ldKQorCQkJeworCQkJCWlmICh1 bmxpa2VseShwZ19hZGRfczY0X292ZXJmbG93KGFyZywgMSwgJnJlc3VsdCkpKQorCQkJCQllcmVw b3J0KEVSUk9SLAorCQkJCQkJCShlcnJjb2RlKEVSUkNPREVfTlVNRVJJQ19WQUxVRV9PVVRfT0Zf UkFOR0UpLAorCQkJCQkJCSBlcnJtc2coImJpZ2ludCBvdXQgb2YgcmFuZ2UiKSkpOworCQkJCWFy ZyA9IHJlc3VsdDsKKwkJCX0KKwkJfQorCQlQR19SRVRVUk5fSU5UNjQocmVzdWx0KTsKKwl9CisK IAlpZiAodW5saWtlbHkocGdfYWRkX3M2NF9vdmVyZmxvdyhhcmcsIDEsICZyZXN1bHQpKSkKIAkJ ZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJyY29kZShFUlJDT0RFX05VTUVSSUNfVkFMVUVfT1VUX09G X1JBTkdFKSwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9udW1lcmljLmMgYi9z cmMvYmFja2VuZC91dGlscy9hZHQvbnVtZXJpYy5jCmluZGV4IDc2MjY5OTE4NTkzLi5iMDI2NjRj OTdmNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L251bWVyaWMuYworKysgYi9z cmMvYmFja2VuZC91dGlscy9hZHQvbnVtZXJpYy5jCkBAIC02MzEwLDYgKzYzMTAsMjMgQEAgaW50 NF9zdW0oUEdfRlVOQ1RJT05fQVJHUykKIHsKIAlpbnQ2NAkJb2xkc3VtOwogCWludDY0CQluZXd2 YWw7CisJQWdnQnVsa0FyZ3MgKmJhID0gQWdnR2V0QnVsa0FyZ3MoZmNpbmZvKTsKKworCWlmICh1 bmxpa2VseShiYSkpCisJeworCQlpbnQ2NAlyZXN1bHQgPSAoIVBHX0FSR0lTTlVMTCgwKSA/IFBH X0dFVEFSR19JTlQ2NCgwKSA6IDApOworCisJCWZvciAoaW50IGkgPSBiYS0+c3RhcnRfcm93OyBp IDwgYmEtPm5yb3dzOyBpKyspCisJCXsKKwkJCWlmICghYmEtPmlzbnVsbFtiYS0+YXJnb2Zmc1sw XV1baV0pCisJCQl7CisJCQkJaW50MzIJYXJnMiA9IGJhLT5hcmdzW2JhLT5hcmdvZmZzWzBdXVtp XTsKKworCQkJCXJlc3VsdCA9IHJlc3VsdCArIGFyZzI7CisJCQl9CisJCX0KKwkJUEdfUkVUVVJO X0lOVDY0KHJlc3VsdCk7CisJfQogCiAJaWYgKFBHX0FSR0lTTlVMTCgwKSkKIAl7CmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjRXhwci5oIGIvc3JjL2luY2x1ZGUvZXhlY3V0 b3IvZXhlY0V4cHIuaAppbmRleCAxZDMzZTA4NGI2OS4uZjI0NzgyZWNmNTggMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNFeHByLmgKKysrIGIvc3JjL2luY2x1ZGUvZXhlY3V0 b3IvZXhlY0V4cHIuaApAQCAtMzA0LDYgKzMwNCw3IEBAIHR5cGVkZWYgZW51bSBFeHByRXZhbE9w CiAKIAkvKiBCYXRjaGVkIGFnZ3JlZ2F0ZSB0cmFucyBldmFsdWF0aW9uICovCiAJRUVPUF9BR0df UExBSU5fVFJBTlNfQkFUQ0hfUk9XTE9PUCwJLyogcGVyLXJvdyBmbWdyIGNhbGxzICovCisJRUVP UF9BR0dfUExBSU5fVFJBTlNfQkFUQ0hfRElSRUNULAkvKiBjYWxsIHRyYW5zZm4gb25jZSB3aXRo IEFnZ0J1bGtBcmdzICovCiAKIAkvKiBub24tZXhpc3RlbnQgb3BlcmF0aW9uLCB1c2VkIGUuZy4g dG8gY2hlY2sgYXJyYXkgbGVuZ3RocyAqLwogCUVFT1BfTEFTVApkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaCBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9y LmgKaW5kZXggNWJhOWE1MjM5NzAuLmM3MmJkNzU1Yjc5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9leGVjdXRvci9leGVjdXRvci5oCisrKyBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9y LmgKQEAgLTU2MSw2ICs1NjEsMjYgQEAgRXhlY1F1YWxBbmRSZXNldChFeHByU3RhdGUgKnN0YXRl LCBFeHByQ29udGV4dCAqZWNvbnRleHQpCiB9CiAjZW5kaWYKIAorI2lmbmRlZiBGUk9OVEVORAor LyogUGVyLWNhbGwgYnVsayBhcmd1bWVudCB2ZWN0b3JzIGZvciBiYXRjaGVkIGFnZ3JlZ2F0ZSB0 cmFucyBmdW5jdGlvbnMuICovCit0eXBlZGVmIHN0cnVjdCBBZ2dCdWxrQXJncworeworCWludAkJ bnJvd3M7CQkvKiBudW1iZXIgb2Ygcm93cyBpbiB0aGlzIGJhdGNoICovCisJaW50CQlzdGFydF9y b3c7CisJaW50MTYgICphcmdvZmZzOworCWludAkJbmFyZ3M7CQkvKiBudW1iZXIgb2YgYXJndW1l bnQgdmVjdG9ycyAqLworCURhdHVtICAqKmFyZ3M7CQkvKiBhcmdzW2pdW2ldID0gai10aCBhcmcg YXQgcm93IGkgKi8KKwlib29sICAgKippc251bGw7CS8qIGlzbnVsbFtqXVtpXSAqLworCWJvb2wJ aGFzbnVsbDsJLyogaXMgYW55IGRhdHVtIGluIGFyZ3MgTlVMTD8gKi8KK30gQWdnQnVsa0FyZ3M7 CisKK3N0YXRpYyBpbmxpbmUgQWdnQnVsa0FyZ3MgKgorQWdnR2V0QnVsa0FyZ3MoRnVuY3Rpb25D YWxsSW5mbyBmY2luZm8pCit7CisJcmV0dXJuIChBZ2dCdWxrQXJncyAqKSAoZmNpbmZvLT5mbGlu Zm8gPyBmY2luZm8tPmZsaW5mby0+Zm5fZXh0cmEgOiBOVUxMKTsKK30KKyNlbmRpZgorCiBleHRl cm4gYm9vbCBFeGVjQ2hlY2soRXhwclN0YXRlICpzdGF0ZSwgRXhwckNvbnRleHQgKmVjb250ZXh0 KTsKIAogLyoKLS0gCjIuNDMuMAoK --0000000000002b1beb063fb44440 Content-Type: application/octet-stream; name="v1-0004-WIP-Add-agg_retrieve_direct_batch-for-plain-aggre.patch" Content-Disposition: attachment; filename="v1-0004-WIP-Add-agg_retrieve_direct_batch-for-plain-aggre.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mg0jlk7v4 RnJvbSBkNWZmOGUxNGFkZDg2MjMzYWZkM2M4MjkzNWQ0ZjcyYTMxODU5YTU3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFRodSwgNCBTZXAgMjAyNSAyMjo1NToyNSArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjEg NC84XSBXSVA6IEFkZCBhZ2dfcmV0cmlldmVfZGlyZWN0X2JhdGNoKCkgZm9yIHBsYWluCiBhZ2dy ZWdhdGVzCk1JTUUtVmVyc2lvbjogMS4wCkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNl dD1VVEYtOApDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CgpUZWFjaCBBZ2cgdG8gY29u c3VtZSBjaGlsZCB0dXBsZXMgaW4gYmF0Y2hlcyBmb3IgQUdHX1BMQUlOLiBBIG5ldwphZ2dfcmV0 cmlldmVfZGlyZWN0X2JhdGNoKCkgcHVsbHMgVHVwbGVCYXRjaCBmcm9tIHRoZSBjaGlsZCB2aWEK RXhlY1Byb2NOb2RlQmF0Y2goKSwgbWF0ZXJpYWxpemVzIGFzIG5lZWRlZCwgYW5kIGFkdmFuY2Vz IHBlci1hZ2cKdHJhbnNpdGlvbiBzdGF0ZSBvdmVyIHRoZSBiYXRjaC4gQSBmaXJzdCB0dXBsZSBp cyBjb3BpZWQgdG8gbWF0Y2gKdGhlIGRpcmVjdCBwYXRo4oCZcyBiZWhhdmlvciBiZWZvcmUgYmF0 Y2ggcHJvY2Vzc2luZy4KCkFkZCBBZ2dDYW5Vc2VQbGFpbkJhdGNoKCkgYW5kIHNlbGVjdCByZXRy aWV2ZV9wbGFpbiBhdCBpbml0OgpiYXRjaCBwYXRoIHdoZW4gbm8gZ3JvdXBpbmcgc2V0cywgc3Ry YXRlZ3kgaXMgQUdHX1BMQUlOLCBhbmQgdGhlCmNoaWxkIGV4cG9zZXMgRXhlY1Byb2NOb2RlQmF0 Y2goKTsgb3RoZXJ3aXNlIGtlZXAgdGhlIHJvdyBwYXRoLgoKUGxhbiBzaGFwZSBhbmQgRVhQTEFJ TiByZW1haW4gdW5jaGFuZ2VkLiBTZW1hbnRpY3MgYXJlIGlkZW50aWNhbAp0byB0aGUgbm9uLWJh dGNoIGRpcmVjdCBwYXRoOyB0aGlzIG9ubHkgcmVkdWNlcyBwZXItdHVwbGUgb3ZlcmhlYWQuCi0t LQogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUFnZy5jIHwgMTIzICsrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKwogc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggIHwgICA1ICsr CiAyIGZpbGVzIGNoYW5nZWQsIDEyOCBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvZXhlY3V0b3Ivbm9kZUFnZy5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUFnZy5j CmluZGV4IGE0ZjNkMzBmMzA3Li4zYWNlNjM2MzUwOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv ZXhlY3V0b3Ivbm9kZUFnZy5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVBZ2cuYwpA QCAtODIwLDYgKzgyMCwyMCBAQCBhZHZhbmNlX2FnZ3JlZ2F0ZXMoQWdnU3RhdGUgKmFnZ3N0YXRl KQogCQkJCQkJCQkJICBhZ2dzdGF0ZS0+dG1wY29udGV4dCk7CiB9CiAKK3N0YXRpYyB2b2lkCith ZHZhbmNlX2FnZ3JlZ2F0ZXNfYmF0Y2goQWdnU3RhdGUgKmFnZ3N0YXRlLCBUdXBsZUJhdGNoICpi KQoreworCUV4cHJDb250ZXh0ICp0bXBjb250ZXh0ID0gYWdnc3RhdGUtPnRtcGNvbnRleHQ7CisJ RXhwclN0YXRlICpldmFsdHJhbnMgPSBhZ2dzdGF0ZS0+cGhhc2UtPmV2YWx0cmFuczsKKworCXdo aWxlIChUdXBsZUJhdGNoSGFzTW9yZShiKSkKKwl7CisJCXRtcGNvbnRleHQtPmVjeHRfb3V0ZXJ0 dXBsZSA9IFR1cGxlQmF0Y2hHZXROZXh0U2xvdChiKTsKKwkJRXhlY0V2YWxFeHByTm9SZXR1cm5T d2l0Y2hDb250ZXh0KGV2YWx0cmFucywgdG1wY29udGV4dCk7CisJCVJlc2V0RXhwckNvbnRleHQo dG1wY29udGV4dCk7CisJfQorfQorCiAvKgogICogUnVuIHRoZSB0cmFuc2l0aW9uIGZ1bmN0aW9u IGZvciBhIERJU1RJTkNUIG9yIE9SREVSIEJZIGFnZ3JlZ2F0ZQogICogd2l0aCBvbmx5IG9uZSBp bnB1dC4gIFRoaXMgaXMgY2FsbGVkIGFmdGVyIHdlIGhhdmUgY29tcGxldGVkCkBAIC0yMjYwLDYg KzIyNzQsOSBAQCBFeGVjQWdnKFBsYW5TdGF0ZSAqcHN0YXRlKQogCQkJCXJlc3VsdCA9IGFnZ19y ZXRyaWV2ZV9oYXNoX3RhYmxlKG5vZGUpOwogCQkJCWJyZWFrOwogCQkJY2FzZSBBR0dfUExBSU46 CisJCQkJLyogaW5pdC10aW1lIGNob2ljZSAqLworCQkJCXJlc3VsdCA9IG5vZGUtPnJldHJpZXZl X3BsYWluKG5vZGUpOworCQkJCWJyZWFrOwogCQkJY2FzZSBBR0dfU09SVEVEOgogCQkJCXJlc3Vs dCA9IGFnZ19yZXRyaWV2ZV9kaXJlY3Qobm9kZSk7CiAJCQkJYnJlYWs7CkBAIC0yNjE4LDYgKzI2 MzUsOTEgQEAgYWdnX3JldHJpZXZlX2RpcmVjdChBZ2dTdGF0ZSAqYWdnc3RhdGUpCiAJcmV0dXJu IE5VTEw7CiB9CiAKK3N0YXRpYyBUdXBsZVRhYmxlU2xvdCAqCithZ2dfcmV0cmlldmVfZGlyZWN0 X2JhdGNoKEFnZ1N0YXRlICphZ2dzdGF0ZSkKK3sKKwlQbGFuU3RhdGUgKmNoaWxkID0gb3V0ZXJQ bGFuU3RhdGUoYWdnc3RhdGUpOworCUV4cHJDb250ZXh0ICplY29udGV4dCA9IGFnZ3N0YXRlLT5z cy5wcy5wc19FeHByQ29udGV4dDsKKwlFeHByQ29udGV4dCAqdG1wY29udGV4dCA9IGFnZ3N0YXRl LT50bXBjb250ZXh0OworCWNvbnN0IGJvb2wgaGFzR3JvdXBpbmdTZXRzID0gYWdnc3RhdGUtPnBo YXNlLT5udW1zZXRzID4gMDsKKwlUdXBsZVRhYmxlU2xvdCAqZmlyc3RTbG90ID0gYWdnc3RhdGUt PnNzLnNzX1NjYW5UdXBsZVNsb3Q7CisJVHVwbGVCYXRjaCAqYiA9IE5VTEw7CisKKwlBc3NlcnQo Y2hpbGQtPkV4ZWNQcm9jTm9kZUJhdGNoKTsKKworCS8qIG1pbWljIHRoZSBmaXJzdC10dXBsZSBj b3B5IGZyb20gYWdnX3JldHJpZXZlX2RpcmVjdCgpICovCisJZm9yICg7OykKKwl7CisJCWIgPSBF eGVjUHJvY05vZGVCYXRjaChjaGlsZCk7CisJCWlmIChiID09IE5VTEwpCisJCXsKKwkJCWlmICho YXNHcm91cGluZ1NldHMpCisJCQl7CisJCQkJYWdnc3RhdGUtPmlucHV0X2RvbmUgPSB0cnVlOwor CQkJCWJyZWFrOworCQkJfQorCQkJYWdnc3RhdGUtPmFnZ19kb25lID0gdHJ1ZTsKKwkJCWJyZWFr OworCQl9CisJCWlmIChiLT5udmFsaWQgPT0gMCkKKwkJCWNvbnRpbnVlOworCisJCVR1cGxlQmF0 Y2hNYXRlcmlhbGl6ZUFsbChiKTsKKwkJYWdnc3RhdGUtPmdycF9maXJzdFR1cGxlID0gRXhlY0Nv cHlTbG90SGVhcFR1cGxlKFR1cGxlQmF0Y2hHZXRTbG90KGIsIDApKTsKKwkJYnJlYWs7CisJfQor CisJLyogaW5pdGlhbGl6ZV9hZ2dyZWdhdGVzIGV0Yy4gYXMgaW4gdGhlIGRpcmVjdCBwYXRoICov CisJUmVTY2FuRXhwckNvbnRleHQoZWNvbnRleHQpOworCWZvciAoaW50IGkgPSAwOyBpIDwgTWF4 KGFnZ3N0YXRlLT5waGFzZS0+bnVtc2V0cywgMSk7IGkrKykKKwkJUmVTY2FuRXhwckNvbnRleHQo YWdnc3RhdGUtPmFnZ2NvbnRleHRzW2ldKTsKKworCWluaXRpYWxpemVfYWdncmVnYXRlcyhhZ2dz dGF0ZSwgYWdnc3RhdGUtPnBlcmdyb3VwcywKKwkJCQkJCSAgTWF4KGFnZ3N0YXRlLT5waGFzZS0+ bnVtc2V0cywgMSkpOworCisJaWYgKGFnZ3N0YXRlLT5ncnBfZmlyc3RUdXBsZSkKKwl7CisJCUV4 ZWNGb3JjZVN0b3JlSGVhcFR1cGxlKGFnZ3N0YXRlLT5ncnBfZmlyc3RUdXBsZSwgZmlyc3RTbG90 LCB0cnVlKTsKKwkJYWdnc3RhdGUtPmdycF9maXJzdFR1cGxlID0gTlVMTDsKKwkJdG1wY29udGV4 dC0+ZWN4dF9vdXRlcnR1cGxlID0gZmlyc3RTbG90OworCisJCWFkdmFuY2VfYWdncmVnYXRlc19i YXRjaChhZ2dzdGF0ZSwgYik7CisJCVJlc2V0RXhwckNvbnRleHQodG1wY29udGV4dCk7CisJfQor CisJLyogY29uc3VtZSByZW1haW5pbmcgcm93cyBpbiBjdXJyZW50IGFuZCBzdWJzZXF1ZW50IGJh dGNoZXMgKi8KKwlpZiAoYikKKwl7CisJCWlmIChUdXBsZUJhdGNoSGFzTW9yZShiKSkKKwkJCWFk dmFuY2VfYWdncmVnYXRlc19iYXRjaChhZ2dzdGF0ZSwgYik7CisJCWZvciAoOzspCisJCXsKKwkJ CWIgPSBFeGVjUHJvY05vZGVCYXRjaChjaGlsZCk7CisJCQlpZiAoYiA9PSBOVUxMKQorCQkJewor CQkJCWlmIChoYXNHcm91cGluZ1NldHMpCisJCQkJCWFnZ3N0YXRlLT5pbnB1dF9kb25lID0gdHJ1 ZTsKKwkJCQllbHNlCisJCQkJCWFnZ3N0YXRlLT5hZ2dfZG9uZSA9IHRydWU7CisJCQkJYnJlYWs7 CisJCQl9CisJCQlpZiAoYi0+bnZhbGlkID09IDApCisJCQkJY29udGludWU7CisKKwkJCVR1cGxl QmF0Y2hNYXRlcmlhbGl6ZUFsbChiKTsKKwkJCWFkdmFuY2VfYWdncmVnYXRlc19iYXRjaChhZ2dz dGF0ZSwgYik7CisJCX0KKwl9CisKKwkvKiBmaW5hbGl6ZSBhbmQgcHJvamVjdCBsaWtlIHRoZSBk aXJlY3QgcGF0aCAqLworCWVjb250ZXh0LT5lY3h0X291dGVydHVwbGUgPSBmaXJzdFNsb3Q7CisJ cHJlcGFyZV9wcm9qZWN0aW9uX3Nsb3QoYWdnc3RhdGUsIGVjb250ZXh0LT5lY3h0X291dGVydHVw bGUsIDApOworCXNlbGVjdF9jdXJyZW50X3NldChhZ2dzdGF0ZSwgMCwgZmFsc2UpOworCWZpbmFs aXplX2FnZ3JlZ2F0ZXMoYWdnc3RhdGUsIGFnZ3N0YXRlLT5wZXJhZ2csIGFnZ3N0YXRlLT5wZXJn cm91cHNbMF0pOworCisJcmV0dXJuIHByb2plY3RfYWdncmVnYXRlcyhhZ2dzdGF0ZSk7Cit9CisK IC8qCiAgKiBFeGVjQWdnIGZvciBoYXNoZWQgY2FzZTogcmVhZCBpbnB1dCBhbmQgYnVpbGQgaGFz aCB0YWJsZQogICovCkBAIC0zMjY1LDYgKzMzNjcsMjIgQEAgaGFzaGFnZ19yZXNldF9zcGlsbF9z dGF0ZShBZ2dTdGF0ZSAqYWdnc3RhdGUpCiAJfQogfQogCitzdGF0aWMgYm9vbAorQWdnQ2FuVXNl UGxhaW5CYXRjaChBZ2dTdGF0ZSAqYWdnc3RhdGUpCit7CisJY29uc3QgQWdnICphZ2dub2RlID0g KGNvbnN0IEFnZyAqKSBhZ2dzdGF0ZS0+c3MucHMucGxhbjsKKworCUFzc2VydChvdXRlclBsYW5T dGF0ZShhZ2dzdGF0ZSkpOworCisJLyogZ3JvdXBpbmcgc2V0cyBwcmVzZW50IC0+IGJhaWwgKi8K KwlpZiAoYWdnbm9kZS0+Z3JvdXBpbmdTZXRzICE9IE5JTCkKKwkJcmV0dXJuIGZhbHNlOworCisJ aWYgKGFnZ3N0YXRlLT5waGFzZS0+YWdnc3RyYXRlZ3kgIT0gQUdHX1BMQUlOKQorCQlyZXR1cm4g ZmFsc2U7CisKKwlyZXR1cm4gb3V0ZXJQbGFuU3RhdGUoYWdnc3RhdGUpLT5FeGVjUHJvY05vZGVC YXRjaDsKK30KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0KICAqIEV4ZWNJbml0QWdnCkBAIC00MDYw LDYgKzQxNzgsMTEgQEAgRXhlY0luaXRBZ2coQWdnICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50 IGVmbGFncykKIAkJCQkoZXJyY29kZShFUlJDT0RFX0dST1VQSU5HX0VSUk9SKSwKIAkJCQkgZXJy bXNnKCJhZ2dyZWdhdGUgZnVuY3Rpb24gY2FsbHMgY2Fubm90IGJlIG5lc3RlZCIpKSk7CiAKKwlp ZiAoQWdnQ2FuVXNlUGxhaW5CYXRjaChhZ2dzdGF0ZSkpCisJCWFnZ3N0YXRlLT5yZXRyaWV2ZV9w bGFpbiA9IGFnZ19yZXRyaWV2ZV9kaXJlY3RfYmF0Y2g7CisJZWxzZQorCQlhZ2dzdGF0ZS0+cmV0 cmlldmVfcGxhaW4gPSBhZ2dfcmV0cmlldmVfZGlyZWN0OworCiAJLyoKIAkgKiBCdWlsZCBleHBy ZXNzaW9ucyBkb2luZyBhbGwgdGhlIHRyYW5zaXRpb24gd29yayBhdCBvbmNlLiBXZSBidWlsZCBh CiAJICogZGlmZmVyZW50IG9uZSBmb3IgZWFjaCBwaGFzZSwgYXMgdGhlIG51bWJlciBvZiB0cmFu c2l0aW9uIGZ1bmN0aW9uCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMu aCBiL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCmluZGV4IGExMDQ1OTFhYzIwLi45Yjgx Yjg0MjE2MSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKKysrIGIv c3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKQEAgLTI1MzUsNiArMjUzNSw5IEBAIHR5cGVk ZWYgc3RydWN0IEFnZ1N0YXRlUGVyR3JvdXBEYXRhICpBZ2dTdGF0ZVBlckdyb3VwOwogdHlwZWRl ZiBzdHJ1Y3QgQWdnU3RhdGVQZXJQaGFzZURhdGEgKkFnZ1N0YXRlUGVyUGhhc2U7CiB0eXBlZGVm IHN0cnVjdCBBZ2dTdGF0ZVBlckhhc2hEYXRhICpBZ2dTdGF0ZVBlckhhc2g7CiAKK3N0cnVjdCBB Z2dTdGF0ZTsKK3R5cGVkZWYgVHVwbGVUYWJsZVNsb3QgKigqQWdnUmV0cmlldmVQbGFpbkZuKShz dHJ1Y3QgQWdnU3RhdGUgKik7CisKIHR5cGVkZWYgc3RydWN0IEFnZ1N0YXRlCiB7CiAJU2NhblN0 YXRlCXNzOwkJCQkvKiBpdHMgZmlyc3QgZmllbGQgaXMgTm9kZVRhZyAqLwpAQCAtMjYxMCw2ICsy NjEzLDggQEAgdHlwZWRlZiBzdHJ1Y3QgQWdnU3RhdGUKIAlBZ2dTdGF0ZVBlckdyb3VwICphbGxf cGVyZ3JvdXBzOwkvKiBhcnJheSBvZiBmaXJzdCAtPnBlcmdyb3VwcywgdGhhbgogCQkJCQkJCQkJ CSAqIC0+aGFzaF9wZXJncm91cCAqLwogCVNoYXJlZEFnZ0luZm8gKnNoYXJlZF9pbmZvOyAvKiBv bmUgZW50cnkgcGVyIHdvcmtlciAqLworCisJQWdnUmV0cmlldmVQbGFpbkZuIHJldHJpZXZlX3Bs YWluOyAvKiBpbml0LXRpbWUgY2hvaWNlICovCiB9IEFnZ1N0YXRlOwogCiAvKiAtLS0tLS0tLS0t LS0tLS0tCi0tIAoyLjQzLjAKCg== --0000000000002b1beb063fb44440 Content-Type: application/octet-stream; name="v1-0006-WIP-Add-EEOP_AGG_PLAIN_TRANS_BATCH_ROWLOOP.patch" Content-Disposition: attachment; filename="v1-0006-WIP-Add-EEOP_AGG_PLAIN_TRANS_BATCH_ROWLOOP.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mg0jlk7o2 RnJvbSA5OTJhNWUyMWY3MDM5ODI1YjEyYTZlODAwZWZiMDI2NTA2MWJiZTNhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFR1ZSwgMiBTZXAgMjAyNSAyMzo0NjozNCArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjEg Ni84XSBXSVA6IEFkZCBFRU9QX0FHR19QTEFJTl9UUkFOU19CQVRDSF9ST1dMT09QCgpJbnRyb2R1 Y2UgYSBiYXRjaCBFRU9QIHRoYXQgcnVucyBwbGFpbiBhZ2dyZWdhdGUgdHJhbnNpdGlvbnMgYnkK bG9vcGluZyBvdmVyIHJvd3Mgb2YgYSBUdXBsZUJhdGNoLiBUaGlzIGtlZXBzIHRyYW5zaXRpb24g bG9naWMgaW4KdGhlIGludGVycHJldGVyIHdoaWxlIGFtb3J0aXppbmcgcGVyLXJvdyBjb3N0cy4K CkdhdGUgd2l0aCBBZ2dUcmFuc0NhblVzZUJhdGNoKCk6IHBsYWluLCBub24taGFzaGVkLCBzaW5n bGUtc2V0CmFnZ3JlZ2F0ZXMgd2l0aCBubyBESVNUSU5DVC9PUkRFUi9GSUxURVIsIGFuZCBzaW1w bGUgVmFyIGFyZ3MuCgpFeHRlbmQgRXhlY0J1aWxkQWdnVHJhbnMoKSB0byBwcmVwYXJlIGJhdGNo IGZldGNoL2J1aWxkIHN0ZXBzIGFuZAp0byByZXR1cm4gd2hldGhlciBhIGJhdGNoIHBhdGggaXMg dXNlZC4KLS0tCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwci5jICAgICAgIHwgMjI4ICsr KysrKysrKysrKysrKysrKysrKysrKy0tCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwcklu dGVycC5jIHwgMTAzICsrKysrKysrKysrKwogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUFnZy5j ICAgICAgICB8ICAxNyArLQogc3JjL2JhY2tlbmQvaml0L2xsdm0vbGx2bWppdF9leHByLmMgICB8 ICAgNiArCiBzcmMvYmFja2VuZC9qaXQvbGx2bS9sbHZtaml0X3R5cGVzLmMgIHwgICAxICsKIHNy Yy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNCYXRjaC5oICAgICAgfCAgIDYgKwogc3JjL2luY2x1ZGUv ZXhlY3V0b3IvZXhlY0V4cHIuaCAgICAgICB8ICAxNCArKwogc3JjL2luY2x1ZGUvZXhlY3V0b3Iv ZXhlY3V0b3IuaCAgICAgICB8ICAgMyArLQogc3JjL2luY2x1ZGUvZXhlY3V0b3Ivbm9kZUFnZy5o ICAgICAgICB8ICAgMiArCiA5IGZpbGVzIGNoYW5nZWQsIDM2MyBpbnNlcnRpb25zKCspLCAxNyBk ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwci5j IGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHIuYwppbmRleCBmMTU2OTg3OWI1Mi4uYWY1 ZWQ4YjYzNjggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHByLmMKKysr IGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHIuYwpAQCAtOTUsNyArOTUsOSBAQCBzdGF0 aWMgdm9pZCBFeGVjQnVpbGRBZ2dUcmFuc0NhbGwoRXhwclN0YXRlICpzdGF0ZSwgQWdnU3RhdGUg KmFnZ3N0YXRlLAogCQkJCQkJCQkgIEV4cHJFdmFsU3RlcCAqc2NyYXRjaCwKIAkJCQkJCQkJICBG dW5jdGlvbkNhbGxJbmZvIGZjaW5mbywgQWdnU3RhdGVQZXJUcmFucyBwZXJ0cmFucywKIAkJCQkJ CQkJICBpbnQgdHJhbnNubywgaW50IHNldG5vLCBpbnQgc2V0b2ZmLCBib29sIGlzaGFzaCwKLQkJ CQkJCQkJICBib29sIG51bGxjaGVjayk7CisJCQkJCQkJCSAgYm9vbCBudWxsY2hlY2ssIGJvb2wg YmF0Y2gsCisJCQkJCQkJCSAgQmF0Y2hWZWN0b3IgKmJ2KTsKKwogc3RhdGljIHZvaWQgRXhlY0lu aXRKc29uRXhwcihKc29uRXhwciAqanNleHByLCBFeHByU3RhdGUgKnN0YXRlLAogCQkJCQkJCSBE YXR1bSAqcmVzdiwgYm9vbCAqcmVzbnVsbCwKIAkJCQkJCQkgRXhwckV2YWxTdGVwICpzY3JhdGNo KTsKQEAgLTEwNCw2ICsxMDYsMTAgQEAgc3RhdGljIHZvaWQgRXhlY0luaXRKc29uQ29lcmNpb24o RXhwclN0YXRlICpzdGF0ZSwgSnNvblJldHVybmluZyAqcmV0dXJuaW5nLAogCQkJCQkJCQkgYm9v bCBleGlzdHNfY29lcmNlLAogCQkJCQkJCQkgRGF0dW0gKnJlc3YsIGJvb2wgKnJlc251bGwpOwog CitzdGF0aWMgQmF0Y2hWZWN0b3IgKkJhdGNoVmVjdG9yQ3JlYXRlKEJpdG1hcHNldCAqYXR0bm9z LCBBdHRyTnVtYmVyIGxhc3RfdmFyKTsKK3N0YXRpYyBib29sIEV4cHJMaXN0QWxsU2ltcGxlVmFy cyhjb25zdCBMaXN0ICphcmdzLCBCaXRtYXBzZXQgKiphbGxhdHRub3MpOworc3RhdGljIEJhdGNo VmVjdG9yU2xpY2UgKkJhdGNoVmVjdG9yU2xpY2VGcm9tRXhwckFyZ3MoY29uc3QgTGlzdCAqYXJn cywKKwkJCQkJCQkJCQkJCQkgIGNvbnN0IEJhdGNoVmVjdG9yICpidik7CiAKIC8qCiAgKiBFeGVj SW5pdEV4cHI6IHByZXBhcmUgYW4gZXhwcmVzc2lvbiB0cmVlIGZvciBleGVjdXRpb24KQEAgLTM2 NTksNiArMzY2NSwzMyBAQCBFeGVjSW5pdENvZXJjZVRvRG9tYWluKEV4cHJFdmFsU3RlcCAqc2Ny YXRjaCwgQ29lcmNlVG9Eb21haW4gKmN0ZXN0LAogCX0KIH0KIAorLyogcGxhaW4gYWdnLCBzaW5n bGUgc2V0LCBub3QgaGFzaGVkLCBubyBESVNUSU5DVC9PUkRFUi9GSUxURVIgKi8KK3N0YXRpYyBp bmxpbmUgYm9vbAorQWdnVHJhbnNDYW5Vc2VCYXRjaChBZ2dTdGF0ZSAqYXMsIEFnZ1N0YXRlUGVy VHJhbnMgcHQpCit7CisJQWdnICphZ2dub2RlID0gKEFnZyAqKSBhcy0+c3MucHMucGxhbjsKKwor CWlmICghQWdnQ2FuVXNlUGxhaW5CYXRjaChhcykpCisJCXJldHVybiBmYWxzZTsKKwlpZiAoYXMt PmFnZ3N0cmF0ZWd5ID09IEFHR19IQVNIRUQpCisJCXJldHVybiBmYWxzZTsKKwlpZiAoYWdnbm9k ZS0+Z3JvdXBpbmdTZXRzICE9IE5JTCkKKwkJcmV0dXJuIGZhbHNlOworCWlmIChhcy0+cGhhc2Ug PT0gTlVMTCB8fCBhcy0+cGhhc2UtPm51bXNldHMgPiAwKQorCQlyZXR1cm4gZmFsc2U7CisKKwkv KiBwZXItYWdncmVnYXRlIGNvbXBsaWNhdGlvbnMgKi8KKwlpZiAocHQtPmFnZ3NvcnRyZXF1aXJl ZCkKKwkJcmV0dXJuIGZhbHNlOworCWlmIChwdC0+YWdncmVmICYmCisJCShwdC0+YWdncmVmLT5h Z2dkaXN0aW5jdCAhPSBOSUwgfHwKKwkJIHB0LT5hZ2dyZWYtPmFnZ29yZGVyICE9IE5JTCB8fAor CQkgcHQtPmFnZ3JlZi0+YWdnZmlsdGVyICE9IE5VTEwpKQorCQlyZXR1cm4gZmFsc2U7CisKKwly ZXR1cm4gdHJ1ZTsKK30KKwogLyoKICAqIEJ1aWxkIHRyYW5zaXRpb24vY29tYmluZSBmdW5jdGlv biBpbnZvY2F0aW9ucyBmb3IgYWxsIGFnZ3JlZ2F0ZSB0cmFuc2l0aW9uCiAgKiAvIGNvbWJpbmF0 aW9uIGZ1bmN0aW9uIGludm9jYXRpb25zIGluIGEgZ3JvdXBpbmcgc2V0cyBwaGFzZS4gVGhpcyBo YXMgdG8KQEAgLTM2NzUsMTMgKzM3MDgsMTcgQEAgRXhlY0luaXRDb2VyY2VUb0RvbWFpbihFeHBy RXZhbFN0ZXAgKnNjcmF0Y2gsIENvZXJjZVRvRG9tYWluICpjdGVzdCwKICAqLwogRXhwclN0YXRl ICoKIEV4ZWNCdWlsZEFnZ1RyYW5zKEFnZ1N0YXRlICphZ2dzdGF0ZSwgQWdnU3RhdGVQZXJQaGFz ZSBwaGFzZSwKLQkJCQkgIGJvb2wgZG9Tb3J0LCBib29sIGRvSGFzaCwgYm9vbCBudWxsY2hlY2sp CisJCQkJICBib29sIGRvU29ydCwgYm9vbCBkb0hhc2gsIGJvb2wgbnVsbGNoZWNrLAorCQkJCSAg Ym9vbCAqYmF0Y2hfdHJhbnMpCiB7CiAJRXhwclN0YXRlICAqc3RhdGUgPSBtYWtlTm9kZShFeHBy U3RhdGUpOwogCVBsYW5TdGF0ZSAgKnBhcmVudCA9ICZhZ2dzdGF0ZS0+c3MucHM7CiAJRXhwckV2 YWxTdGVwIHNjcmF0Y2ggPSB7MH07CiAJYm9vbAkJaXNDb21iaW5lID0gRE9fQUdHU1BMSVRfQ09N QklORShhZ2dzdGF0ZS0+YWdnc3BsaXQpOwogCUV4cHJTZXR1cEluZm8gZGVmb3JtID0gezAsIDAs IDAsIDAsIDAsIE5JTH07CisJYm9vbAkJYmF0Y2ggPSBBZ2dDYW5Vc2VQbGFpbkJhdGNoKGFnZ3N0 YXRlKTsKKwlCaXRtYXBzZXQgICphbGxhdHRub3MgPSBOVUxMOworCUJhdGNoVmVjdG9yICpidiA9 IE5VTEw7CiAKIAlzdGF0ZS0+ZXhwciA9IChFeHByICopIGFnZ3N0YXRlOwogCXN0YXRlLT5wYXJl bnQgPSBwYXJlbnQ7CkBAIC0zNzA3LDggKzM3NDQsMzYgQEAgRXhlY0J1aWxkQWdnVHJhbnMoQWdn U3RhdGUgKmFnZ3N0YXRlLCBBZ2dTdGF0ZVBlclBoYXNlIHBoYXNlLAogCQkJCQkJICAmZGVmb3Jt KTsKIAkJZXhwcl9zZXR1cF93YWxrZXIoKE5vZGUgKikgcGVydHJhbnMtPmFnZ3JlZi0+YWdnZmls dGVyLAogCQkJCQkJICAmZGVmb3JtKTsKKworCQlpZiAoIUFnZ1RyYW5zQ2FuVXNlQmF0Y2goYWdn c3RhdGUsIHBlcnRyYW5zKSB8fAorCQkJIUV4cHJMaXN0QWxsU2ltcGxlVmFycyhwZXJ0cmFucy0+ YWdncmVmLT5hcmdzLCAmYWxsYXR0bm9zKSkKKwkJCWJhdGNoID0gZmFsc2U7CiAJfQotCUV4ZWNQ dXNoRXhwclNldHVwU3RlcHMoc3RhdGUsICZkZWZvcm0pOworCisJaWYgKGJhdGNoKQorCXsKKwkJ aWYgKGRlZm9ybS5sYXN0X291dGVyID4gMCkKKwkJeworCQkJQXNzZXJ0KCFibXNfaXNfZW1wdHko YWxsYXR0bm9zKSk7CisJCQlidiAgPSBCYXRjaFZlY3RvckNyZWF0ZShhbGxhdHRub3MsIGRlZm9y bS5sYXN0X291dGVyKTsKKworCQkJLyoKKwkJCSAqIERlZm9ybSBhbGwgdHVwbGVzIHVwdG8gbGFz dF9vdXRlciBpbiBiYXRjaAorCQkJICovCisJCQlzY3JhdGNoLm9wY29kZSA9IEVFT1BfT1VURVJf RkVUQ0hTT01FX0JBVENIOworCQkJc2NyYXRjaC5kLmZldGNoX2JhdGNoLmxhc3RfdmFyID0gZGVm b3JtLmxhc3Rfb3V0ZXI7CisJCQlFeHByRXZhbFB1c2hTdGVwKHN0YXRlLCAmc2NyYXRjaCk7CisK KwkJCS8qCisJCQkgKiBQdXQgYWxsIGFyZyBWYXJzIGludG8gdmVjdG9ycyBvbmNlIHBlciBiYXRj aCBzbGljZQorCQkJICovCisJCQlzY3JhdGNoLm9wY29kZSA9IEVFT1BfQlVJTERfT1VURVJfQkFU Q0hfVkVDVE9SOworCQkJc2NyYXRjaC5kLmJhdGNoX3ZlY3Rvci5idiA9IGJ2OworCQkJRXhwckV2 YWxQdXNoU3RlcChzdGF0ZSwgJnNjcmF0Y2gpOworCQl9CisJfQorCWVsc2UKKwkJRXhlY1B1c2hF eHByU2V0dXBTdGVwcyhzdGF0ZSwgJmRlZm9ybSk7CiAKIAkvKgogCSAqIEVtaXQgaW5zdHJ1Y3Rp b25zIGZvciBlYWNoIHRyYW5zaXRpb24gdmFsdWUgLyBncm91cGluZyBzZXQgY29tYmluYXRpb24u CkBAIC0zNzQ2LDcgKzM4MTEsNyBAQCBFeGVjQnVpbGRBZ2dUcmFucyhBZ2dTdGF0ZSAqYWdnc3Rh dGUsIEFnZ1N0YXRlUGVyUGhhc2UgcGhhc2UsCiAJCSAqIEV2YWx1YXRlIGFyZ3VtZW50cyB0byBh Z2dyZWdhdGUvY29tYmluZSBmdW5jdGlvbi4KIAkJICovCiAJCWFyZ25vID0gMDsKLQkJaWYgKGlz Q29tYmluZSkKKwkJaWYgKGlzQ29tYmluZSAmJiAhYmF0Y2gpCiAJCXsKIAkJCS8qCiAJCQkgKiBD b21iaW5pbmcgdHdvIGFnZ3JlZ2F0ZSB0cmFuc2l0aW9uIHZhbHVlcy4gSW5zdGVhZCBvZiBkaXJl Y3RseQpAQCAtMzgxNiw3ICszODgxLDcgQEAgRXhlY0J1aWxkQWdnVHJhbnMoQWdnU3RhdGUgKmFn Z3N0YXRlLCBBZ2dTdGF0ZVBlclBoYXNlIHBoYXNlLAogCiAJCQlBc3NlcnQocGVydHJhbnMtPm51 bUlucHV0cyA9PSBhcmdubyk7CiAJCX0KLQkJZWxzZSBpZiAoIXBlcnRyYW5zLT5hZ2dzb3J0cmVx dWlyZWQpCisJCWVsc2UgaWYgKCFwZXJ0cmFucy0+YWdnc29ydHJlcXVpcmVkICYmICFiYXRjaCkK IAkJewogCQkJTGlzdENlbGwgICAqYXJnOwogCkBAIC0zODQ5LDcgKzM5MTQsNyBAQCBFeGVjQnVp bGRBZ2dUcmFucyhBZ2dTdGF0ZSAqYWdnc3RhdGUsIEFnZ1N0YXRlUGVyUGhhc2UgcGhhc2UsCiAJ CQl9CiAJCQlBc3NlcnQocGVydHJhbnMtPm51bVRyYW5zSW5wdXRzID09IGFyZ25vKTsKIAkJfQot CQllbHNlIGlmIChwZXJ0cmFucy0+bnVtSW5wdXRzID09IDEpCisJCWVsc2UgaWYgKHBlcnRyYW5z LT5udW1JbnB1dHMgPT0gMSAmJiAhYmF0Y2gpCiAJCXsKIAkJCS8qCiAJCQkgKiBOb24tcHJlc29y dGVkIERJU1RJTkNUIGFuZC9vciBPUkRFUiBCWSBjYXNlLCB3aXRoIGEgc2luZ2xlCkBAIC0zODY4 LDcgKzM5MzMsNyBAQCBFeGVjQnVpbGRBZ2dUcmFucyhBZ2dTdGF0ZSAqYWdnc3RhdGUsIEFnZ1N0 YXRlUGVyUGhhc2UgcGhhc2UsCiAKIAkJCUFzc2VydChwZXJ0cmFucy0+bnVtSW5wdXRzID09IGFy Z25vKTsKIAkJfQotCQllbHNlCisJCWVsc2UgaWYgKCFiYXRjaCkKIAkJewogCQkJLyoKIAkJCSAq IE5vbi1wcmVzb3J0ZWQgRElTVElOQ1QgYW5kL29yIE9SREVSIEJZIGNhc2UsIHdpdGggbXVsdGlw bGUKQEAgLTM4OTYsNyArMzk2MSw3IEBAIEV4ZWNCdWlsZEFnZ1RyYW5zKEFnZ1N0YXRlICphZ2dz dGF0ZSwgQWdnU3RhdGVQZXJQaGFzZSBwaGFzZSwKIAkJICoganVzdCBrZWVwIHRoZSBwcmlvciB0 cmFuc1ZhbHVlLiBUaGlzIGlzIHRydWUgZm9yIGJvdGggcGxhaW4gYW5kCiAJCSAqIHNvcnRlZC9k aXN0aW5jdCBhZ2dyZWdhdGVzLgogCQkgKi8KLQkJaWYgKHRyYW5zX2ZjaW5mby0+ZmxpbmZvLT5m bl9zdHJpY3QgJiYgcGVydHJhbnMtPm51bVRyYW5zSW5wdXRzID4gMCkKKwkJaWYgKHRyYW5zX2Zj aW5mby0+ZmxpbmZvLT5mbl9zdHJpY3QgJiYgcGVydHJhbnMtPm51bVRyYW5zSW5wdXRzID4gMCAm JiAhYmF0Y2gpCiAJCXsKIAkJCWlmIChzdHJpY3RudWxscykKIAkJCQlzY3JhdGNoLm9wY29kZSA9 IEVFT1BfQUdHX1NUUklDVF9JTlBVVF9DSEVDS19OVUxMUzsKQEAgLTM5MTQsNyArMzk3OSw3IEBA IEV4ZWNCdWlsZEFnZ1RyYW5zKEFnZ1N0YXRlICphZ2dzdGF0ZSwgQWdnU3RhdGVQZXJQaGFzZSBw aGFzZSwKIAkJfQogCiAJCS8qIEhhbmRsZSBESVNUSU5DVCBhZ2dyZWdhdGVzIHdoaWNoIGhhdmUg cHJlLXNvcnRlZCBpbnB1dCAqLwotCQlpZiAocGVydHJhbnMtPm51bURpc3RpbmN0Q29scyA+IDAg JiYgIXBlcnRyYW5zLT5hZ2dzb3J0cmVxdWlyZWQpCisJCWlmIChwZXJ0cmFucy0+bnVtRGlzdGlu Y3RDb2xzID4gMCAmJiAhcGVydHJhbnMtPmFnZ3NvcnRyZXF1aXJlZCAmJiAhYmF0Y2gpCiAJCXsK IAkJCWlmIChwZXJ0cmFucy0+bnVtRGlzdGluY3RDb2xzID4gMSkKIAkJCQlzY3JhdGNoLm9wY29k ZSA9IEVFT1BfQUdHX1BSRVNPUlRFRF9ESVNUSU5DVF9NVUxUSTsKQEAgLTM5NDIsNyArNDAwNyw3 IEBAIEV4ZWNCdWlsZEFnZ1RyYW5zKEFnZ1N0YXRlICphZ2dzdGF0ZSwgQWdnU3RhdGVQZXJQaGFz ZSBwaGFzZSwKIAkJCXsKIAkJCQlFeGVjQnVpbGRBZ2dUcmFuc0NhbGwoc3RhdGUsIGFnZ3N0YXRl LCAmc2NyYXRjaCwgdHJhbnNfZmNpbmZvLAogCQkJCQkJCQkJICBwZXJ0cmFucywgdHJhbnNubywg c2V0bm8sIHNldG9mZiwgZmFsc2UsCi0JCQkJCQkJCQkgIG51bGxjaGVjayk7CisJCQkJCQkJCQkg IG51bGxjaGVjaywgYmF0Y2gsIGJ2KTsKIAkJCQlzZXRvZmYrKzsKIAkJCX0KIAkJfQpAQCAtMzk2 Miw3ICs0MDI3LDcgQEAgRXhlY0J1aWxkQWdnVHJhbnMoQWdnU3RhdGUgKmFnZ3N0YXRlLCBBZ2dT dGF0ZVBlclBoYXNlIHBoYXNlLAogCQkJewogCQkJCUV4ZWNCdWlsZEFnZ1RyYW5zQ2FsbChzdGF0 ZSwgYWdnc3RhdGUsICZzY3JhdGNoLCB0cmFuc19mY2luZm8sCiAJCQkJCQkJCQkgIHBlcnRyYW5z LCB0cmFuc25vLCBzZXRubywgc2V0b2ZmLCB0cnVlLAotCQkJCQkJCQkJICBudWxsY2hlY2spOwor CQkJCQkJCQkJICBudWxsY2hlY2ssIGZhbHNlLCBOVUxMKTsKIAkJCQlzZXRvZmYrKzsKIAkJCX0K IAkJfQpAQCAtNDAwNyw2ICs0MDcyLDkgQEAgRXhlY0J1aWxkQWdnVHJhbnMoQWdnU3RhdGUgKmFn Z3N0YXRlLCBBZ2dTdGF0ZVBlclBoYXNlIHBoYXNlLAogCiAJRXhlY1JlYWR5RXhwcihzdGF0ZSk7 CiAKKwlpZiAoYmF0Y2hfdHJhbnMpCisJCSpiYXRjaF90cmFucyA9IGJhdGNoOworCiAJcmV0dXJu IHN0YXRlOwogfQogCkBAIC00MDIwLDEwICs0MDg4LDExIEBAIEV4ZWNCdWlsZEFnZ1RyYW5zQ2Fs bChFeHByU3RhdGUgKnN0YXRlLCBBZ2dTdGF0ZSAqYWdnc3RhdGUsCiAJCQkJCSAgRXhwckV2YWxT dGVwICpzY3JhdGNoLAogCQkJCQkgIEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLCBBZ2dTdGF0ZVBl clRyYW5zIHBlcnRyYW5zLAogCQkJCQkgIGludCB0cmFuc25vLCBpbnQgc2V0bm8sIGludCBzZXRv ZmYsIGJvb2wgaXNoYXNoLAotCQkJCQkgIGJvb2wgbnVsbGNoZWNrKQorCQkJCQkgIGJvb2wgbnVs bGNoZWNrLCBib29sIGJhdGNoLCBCYXRjaFZlY3RvciAqYnYpCiB7CiAJRXhwckNvbnRleHQgKmFn Z2NvbnRleHQ7CiAJaW50CQkJYWRqdXN0X2p1bXBudWxsID0gLTE7CisJQmF0Y2hWZWN0b3JTbGlj ZSAqYnZzID0gTlVMTDsKIAogCWlmIChpc2hhc2gpCiAJCWFnZ2NvbnRleHQgPSBhZ2dzdGF0ZS0+ aGFzaGNvbnRleHQ7CkBAIC00MDc3LDcgKzQxNDYsMTMgQEAgRXhlY0J1aWxkQWdnVHJhbnNDYWxs KEV4cHJTdGF0ZSAqc3RhdGUsIEFnZ1N0YXRlICphZ2dzdGF0ZSwKIAkgKi8KIAlpZiAoIXBlcnRy YW5zLT5hZ2dzb3J0cmVxdWlyZWQpCiAJewotCQlpZiAocGVydHJhbnMtPnRyYW5zdHlwZUJ5VmFs KQorCQlpZiAoYmF0Y2gpCisJCXsKKwkJCWlmIChidikKKwkJCQlidnMgPSBCYXRjaFZlY3RvclNs aWNlRnJvbUV4cHJBcmdzKHBlcnRyYW5zLT5hZ2dyZWYtPmFyZ3MsIGJ2KTsKKwkJCXNjcmF0Y2gt Pm9wY29kZSA9IEVFT1BfQUdHX1BMQUlOX1RSQU5TX0JBVENIX1JPV0xPT1A7CisJCX0KKwkJZWxz ZSBpZiAocGVydHJhbnMtPnRyYW5zdHlwZUJ5VmFsKQogCQl7CiAJCQlpZiAoZmNpbmZvLT5mbGlu Zm8tPmZuX3N0cmljdCAmJgogCQkJCXBlcnRyYW5zLT5pbml0VmFsdWVJc051bGwpCkBAIC00MTA4 LDYgKzQxODMsNyBAQCBFeGVjQnVpbGRBZ2dUcmFuc0NhbGwoRXhwclN0YXRlICpzdGF0ZSwgQWdn U3RhdGUgKmFnZ3N0YXRlLAogCXNjcmF0Y2gtPmQuYWdnX3RyYW5zLnNldG9mZiA9IHNldG9mZjsK IAlzY3JhdGNoLT5kLmFnZ190cmFucy50cmFuc25vID0gdHJhbnNubzsKIAlzY3JhdGNoLT5kLmFn Z190cmFucy5hZ2djb250ZXh0ID0gYWdnY29udGV4dDsKKwlzY3JhdGNoLT5kLmFnZ190cmFucy5i dnMgPSBidnM7CiAJRXhwckV2YWxQdXNoU3RlcChzdGF0ZSwgc2NyYXRjaCk7CiAKIAkvKiBmaXgg dXAganVtcG51bGwgKi8KQEAgLTUwNzAsMyArNTE0NiwxMjkgQEAgRXhlY0luaXRKc29uQ29lcmNp b24oRXhwclN0YXRlICpzdGF0ZSwgSnNvblJldHVybmluZyAqcmV0dXJuaW5nLAogCQlEb21haW5I YXNDb25zdHJhaW50cyhyZXR1cm5pbmctPnR5cGlkKTsKIAlFeHByRXZhbFB1c2hTdGVwKHN0YXRl LCAmc2NyYXRjaCk7CiB9CisKKy8qIElzIGV4cHIgYSBWYXIgbm9kZSBmb3IgYSBub24tc3lzdGVt IGF0dHJpYnV0ZT8gKi8KK3N0YXRpYyBib29sCitleHByX2lzX3NpbXBsZV92YXIoRXhwciAqZXhw ciwgQXR0ck51bWJlciAqb3V0X2F0dG5vKQoreworCWlmIChleHByID09IE5VTEwpCisJCXJldHVy biBmYWxzZTsKKworCWlmIChJc0EoZXhwciwgVGFyZ2V0RW50cnkpKQorCQlyZXR1cm4gZXhwcl9p c19zaW1wbGVfdmFyKChFeHByICopICgoVGFyZ2V0RW50cnkgKikgZXhwciktPmV4cHIsCisJCQkJ CQkJCSAgb3V0X2F0dG5vKTsKKwlpZiAoSXNBKGV4cHIsIFJlbGFiZWxUeXBlKSkKKwkJcmV0dXJu IGV4cHJfaXNfc2ltcGxlX3ZhcigoRXhwciAqKSAoKFJlbGFiZWxUeXBlICopIGV4cHIpLT5hcmcs CisJCQkJCQkJCSAgb3V0X2F0dG5vKTsKKworCWlmIChJc0EoZXhwciwgVmFyKSAmJiAoKFZhciAq KSBleHByKS0+dmFyYXR0bm8gPiAwKQorCXsKKwkJKm91dF9hdHRubyA9ICgoVmFyICopIGV4cHIp LT52YXJhdHRubzsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCisv KiBBcmUgYWxsIGlucHV0cyBwbGFpbiBWYXJzIChvcHRpb25hbGx5IGFsbG93IFJlbGFiZWxUeXBl LT5WYXIpPyBDb2xsZWN0IGF0dG5vcy4gKi8KK3N0YXRpYyBib29sCitFeHByTGlzdEFsbFNpbXBs ZVZhcnMoY29uc3QgTGlzdCAqYXJncywgQml0bWFwc2V0ICoqYWxsYXR0bm9zKQoreworCUxpc3RD ZWxsICpsYzsKKworCWZvcmVhY2gobGMsIGFyZ3MpCisJeworCQlUYXJnZXRFbnRyeSAqdGxlID0g bGZpcnN0X25vZGUoVGFyZ2V0RW50cnksIGxjKTsKKwkJRXhwciAqYXJnID0gdGxlLT5leHByOwor CQlBdHRyTnVtYmVyIGF0dG5vOworCisJCWlmICghZXhwcl9pc19zaW1wbGVfdmFyKGFyZywgJmF0 dG5vKSkKKwkJCXJldHVybiBmYWxzZTsKKworCQlpZiAoIUlzQShhcmcsIFZhcikpCisJCQlyZXR1 cm4gZmFsc2U7CisKKwkJQXNzZXJ0KGF0dG5vID4gMCk7CisJCSphbGxhdHRub3MgPSBibXNfYWRk X21lbWJlcigqYWxsYXR0bm9zLCBhdHRubyk7CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKKy8q IC0tLS0tLS0tLS0gQmF0Y2hWZWN0b3Igc3R1ZmYgLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMg QmF0Y2hWZWN0b3IgKgorQmF0Y2hWZWN0b3JDcmVhdGUoQml0bWFwc2V0ICphdHRub3MsIEF0dHJO dW1iZXIgbGFzdF92YXIpCit7CisJaW50IG1heHJvd3MgPSBFWEVDX0JBVENIX1JPV1M7CisJQmF0 Y2hWZWN0b3IgKmJ2OworCUF0dHJOdW1iZXIJYXR0bm87CisJaW50CQkJaTsKKworCWJ2ID0gcGFs bG9jKHNpemVvZihCYXRjaFZlY3RvcikpOworCWJ2LT5uY29scyA9IGJtc19udW1fbWVtYmVycyhh dHRub3MpOworCWJ2LT5tYXhyb3dzID0gbWF4cm93czsKKwlidi0+bGFzdF92YXIgPSBsYXN0X3Zh cjsKKwlidi0+YXR0bm9zID0gcGFsbG9jKHNpemVvZihBdHRyTnVtYmVyKSAqIGJ2LT5uY29scyk7 CisJYXR0bm8gPSAtMTsKKwlpID0gMDsKKwl3aGlsZSAoKGF0dG5vID0gYm1zX25leHRfbWVtYmVy KGF0dG5vcywgYXR0bm8pKSA+IDApCisJCWJ2LT5hdHRub3NbaSsrXSA9IGF0dG5vOworCWJ2LT5j b2xzID0gcGFsbG9jKHNpemVvZihEYXR1bSAqKSAqIGJ2LT5uY29scyk7CisJYnYtPm51bGxzID0g cGFsbG9jKHNpemVvZihib29sICAqKSAqIGJ2LT5uY29scyk7CisKKwlmb3IgKGkgPTA7IGkgPCBi di0+bmNvbHM7IGkrKykKKwl7CisJCWJ2LT5jb2xzW2ldICA9IHBhbGxvYyhzaXplb2YoRGF0dW0p ICogbWF4cm93cyk7CisJCWJ2LT5udWxsc1tpXSA9IHBhbGxvYyhzaXplb2YoYm9vbCkgICogbWF4 cm93cyk7CisJfQorCisJYnYtPm5yb3dzID0gMDsKKwlidi0+aGFzbnVsbCA9IGZhbHNlOworCisJ cmV0dXJuIGJ2OworfQorCitzdGF0aWMgaW50MTYKK0JhdGNoVmVjdG9yRmluZEF0dENvbG5vKGNv bnN0IEJhdGNoVmVjdG9yICpidiwgQXR0ck51bWJlciBhdHRubykKK3sKKwlmb3IgKGludCBpID0g MDsgaSA8IGJ2LT5uY29sczsgaSsrKQorCQlpZiAoYnYtPmF0dG5vc1tpXSA9PSBhdHRubykKKwkJ CXJldHVybiBpOworCisJcmV0dXJuIC0xOworfQorCisvKgorICogQmF0Y2hWZWN0b3JTbGljZUZy b21FeHByQXJncworICoJCUJ1aWxkIGEgQmF0Y2hWZWN0b3JTbGljZSBmb3IgYSBMaXN0IG9mIGFy Z3MuCisgKgorICogRm9yIFZhciBhcmdzIChwb3NzaWJseSB1bmRlciBSZWxhYmVsVHlwZSksIHN0 b3JlIHRoZSBjb2wgaW5kZXguCisgKiBGb3Igbm9uLVZhciBhcmdzLCBzdG9yZSAtMS4gQ2FsbGVy IGNhbiBoYW5kbGUgQ29uc3RzLCBldGMuCisgKi8KK3N0YXRpYyBCYXRjaFZlY3RvclNsaWNlICoK K0JhdGNoVmVjdG9yU2xpY2VGcm9tRXhwckFyZ3MoY29uc3QgTGlzdCAqYXJncywgY29uc3QgQmF0 Y2hWZWN0b3IgKmJ2KQoreworCUJhdGNoVmVjdG9yU2xpY2UgKmJ2cyA9IHBhbGxvYyhzaXplb2Yo QmF0Y2hWZWN0b3JTbGljZSkpOworCWludCBuYXJncyA9IGxpc3RfbGVuZ3RoKGFyZ3MpOworCWlu dCBpID0gMDsKKwlMaXN0Q2VsbCAqbGM7CisKKwlBc3NlcnQoYnYpOworCWJ2cy0+YnYgPSBidjsK KwlidnMtPm5hcmdzID0gbmFyZ3M7CisJYnZzLT5hcmdvZmZzID0gKGludDE2ICopIHBhbGxvYyhz aXplb2YoaW50MTYpICogbmFyZ3MpOworCisJZm9yZWFjaCAobGMsIGFyZ3MpCisJeworCQlFeHBy ICphcmcgPSAoRXhwciAqKSBsZmlyc3QobGMpOworCQlBdHRyTnVtYmVyIGF0dG5vOworCisJCWlm IChleHByX2lzX3NpbXBsZV92YXIoYXJnLCAmYXR0bm8pKQorCQkJYnZzLT5hcmdvZmZzW2krK10g PSBCYXRjaFZlY3RvckZpbmRBdHRDb2xubyhidiwgYXR0bm8pOworCQllbHNlCisJCQlidnMtPmFy Z29mZnNbaSsrXSA9IC0xOyAvKiBub24tVmFyICovCisJfQorCisJcmV0dXJuIGJ2czsKK30KZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHBySW50ZXJwLmMgYi9zcmMvYmFj a2VuZC9leGVjdXRvci9leGVjRXhwckludGVycC5jCmluZGV4IDY4NjI5YWQ3OTkxLi4zMTc2Njc5 YjM0NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHJJbnRlcnAuYwor KysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwckludGVycC5jCkBAIC02MDYsNiArNjA2 LDcgQEAgRXhlY0ludGVycEV4cHIoRXhwclN0YXRlICpzdGF0ZSwgRXhwckNvbnRleHQgKmVjb250 ZXh0LCBib29sICppc251bGwpCiAJCSYmQ0FTRV9FRU9QX0JVSUxEX0lOTkVSX0JBVENIX1ZFQ1RP UiwKIAkJJiZDQVNFX0VFT1BfQlVJTERfT1VURVJfQkFUQ0hfVkVDVE9SLAogCQkmJkNBU0VfRUVP UF9CVUlMRF9TQ0FOX0JBVENIX1ZFQ1RPUiwKKwkJJiZDQVNFX0VFT1BfQUdHX1BMQUlOX1RSQU5T X0JBVENIX1JPV0xPT1AsCiAJCSYmQ0FTRV9FRU9QX0xBU1QKIAl9OwogCkBAIC0yMzM2LDYgKzIz MzcsMTQgQEAgRXhlY0ludGVycEV4cHIoRXhwclN0YXRlICpzdGF0ZSwgRXhwckNvbnRleHQgKmVj b250ZXh0LCBib29sICppc251bGwpCiAJCQlFRU9fTkVYVCgpOwogCQl9CiAKKwkJRUVPX0NBU0Uo RUVPUF9BR0dfUExBSU5fVFJBTlNfQkFUQ0hfUk9XTE9PUCkKKwkJeworCQkJLyogdG9vIGNvbXBs ZXggZm9yIGFuIGlubGluZSBpbXBsZW1lbnRhdGlvbiAqLworCQkJRXhlY0FnZ1BsYWluVHJhbnNC YXRjaChzdGF0ZSwgb3AsIGVjb250ZXh0KTsKKworCQkJRUVPX05FWFQoKTsKKwkJfQorCiAJCUVF T19DQVNFKEVFT1BfTEFTVCkKIAkJewogCQkJLyogdW5yZWFjaGFibGUgKi8KQEAgLTYwMzksMyAr NjA0OCw5NyBAQCBFeGVjQnVpbGRCYXRjaFZlY3RvcihFeHByU3RhdGUgKnN0YXRlLCBFeHByRXZh bFN0ZXAgKm9wLCBFeHByQ29udGV4dCAqZWNvbnRleHQsCiAJfQogCWJ2LT5ucm93cyA9IGk7CiB9 CisKK3ZvaWQKK0V4ZWNBZ2dQbGFpblRyYW5zQmF0Y2goRXhwclN0YXRlICpzdGF0ZSwgRXhwckV2 YWxTdGVwICpvcCwgRXhwckNvbnRleHQgKmVjb250ZXh0KQoreworCUFnZ1N0YXRlICAgKmFnZ3N0 YXRlID0gY2FzdE5vZGUoQWdnU3RhdGUsIHN0YXRlLT5wYXJlbnQpOworCUFnZ1N0YXRlUGVyVHJh bnMJcGVydHJhbnMgPSBvcC0+ZC5hZ2dfdHJhbnMucGVydHJhbnM7CisJQWdnU3RhdGVQZXJHcm91 cCBwZXJncm91cCA9CisJCSZhZ2dzdGF0ZS0+YWxsX3Blcmdyb3Vwc1tvcC0+ZC5hZ2dfdHJhbnMu c2V0b2ZmXVtvcC0+ZC5hZ2dfdHJhbnMudHJhbnNub107CisJQmF0Y2hWZWN0b3JTbGljZSAgKmJ2 cyA9IG9wLT5kLmFnZ190cmFucy5idnM7CisJRnVuY3Rpb25DYWxsSW5mbwlmY2luZm8gPSBwZXJ0 cmFucy0+dHJhbnNmbl9mY2luZm87CisJRm1nckluZm8JCSAgICpmaW5mbyA9IGZjaW5mby0+Zmxp bmZvOworCURhdHVtCQluZXdWYWw7CisJVHVwbGVCYXRjaCAqYmF0Y2ggPSBlY29udGV4dC0+b3V0 ZXJfYmF0Y2g7CisJaW50CQkJYmF0Y2hfbnJvd3MgPSBidnMgPyBidnMtPmJ2LT5ucm93cyA6IGJh dGNoLT5udmFsaWQ7CisJaW50CQkJc3RhcnRfcm93ID0gMDsKKworCWlmIChmaW5mby0+Zm5fc3Ry aWN0KQorCXsKKwkJaWYgKHBlcmdyb3VwLT5ub1RyYW5zVmFsdWUgJiYgYnZzKQorCQl7CisJCQlj b25zdCBCYXRjaFZlY3RvciAqYnYgPSBidnMtPmJ2OworCQkJYm9vbAlmb3VuZCA9IGZhbHNlOwor CisJCQlBc3NlcnQoYnYpOworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBiYXRjaF9ucm93czsgaSsr KQorCQkJeworCQkJCWZvciAoaW50IGogPSAwOyBqIDwgYnZzLT5uYXJnczsgaisrKQorCQkJCXsK KwkJCQkJaWYgKCFidi0+bnVsbHNbYnZzLT5hcmdvZmZzW2pdXVtpXSkKKwkJCQkJeworCQkJCQkJ ZmNpbmZvLT5hcmdzWzFdLnZhbHVlID0gYnYtPmNvbHNbYnZzLT5hcmdvZmZzW2pdXVtpXTsKKwkJ CQkJCWZjaW5mby0+YXJnc1sxXS5pc251bGwgPSBmYWxzZTsKKwkJCQkJCWlmIChqID09IGJ2cy0+ bmFyZ3MgLSAxKQorCQkJCQkJeworCQkJCQkJCWZvdW5kID0gdHJ1ZTsKKwkJCQkJCQlicmVhazsK KwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCQlpZiAoZm91bmQpCisJCQkJCWJyZWFrOworCQkJ fQorCQkJLyogSWYgdHJhbnNWYWx1ZSBoYXMgbm90IHlldCBiZWVuIGluaXRpYWxpemVkLCBkbyBz byBub3cuICovCisJCQlFeGVjQWdnSW5pdEdyb3VwKGFnZ3N0YXRlLCBwZXJ0cmFucywgcGVyZ3Jv dXAsCisJCQkJCQkJIG9wLT5kLmFnZ190cmFucy5hZ2djb250ZXh0KTsKKwkJCXN0YXJ0X3JvdyA9 IDE7CisJCX0KKwkJZWxzZSBpZiAocGVyZ3JvdXAtPnRyYW5zVmFsdWVJc051bGwpCisJCQlyZXR1 cm47CisJfQorCisJc3dpdGNoIChFeGVjRXZhbFN0ZXBPcChzdGF0ZSwgb3ApKQorCXsKKwkJY2Fz ZSBFRU9QX0FHR19QTEFJTl9UUkFOU19CQVRDSF9ST1dMT09QOgorCQkJLyogTG9vcCByb3dzLCBj YWxsIHRoZSBvcmlnaW5hbCB0cmFuc2ZuIHBlciBlbGVtZW50IHVzaW5nIHZlY3RvciBjb2xzLiAq LworCQkJZm9yIChpbnQgaSA9IHN0YXJ0X3JvdzsgaSA8IGJhdGNoX25yb3dzOyBpKyspCisJCQl7 CisJCQkJYm9vbCBoYXNudWxsID0gZmFsc2U7CisKKwkJCQkvKiBTZXQgdXAgZmNpbmZvIGFyZ3Mg MS4ubSBmcm9tIGNvbHVtbiB2ZWN0b3JzIGF0IHJvdyBpLiAqLworCQkJCWlmIChidnMpCisJCQkJ eworCQkJCQljb25zdCBCYXRjaFZlY3RvciAqYnYgPSBidnMtPmJ2OworCisJCQkJCWZvciAoaW50 IGogPSAwOyBqIDwgYnZzLT5uYXJnczsgaisrKQorCQkJCQl7CisJCQkJCQlpbnQxNglhcmdvZmYg PSBidnMtPmFyZ29mZnNbal07CisKKwkJCQkJCWZjaW5mby0+YXJnc1tqKzFdLnZhbHVlID0gYnYt PmNvbHNbYXJnb2ZmXVtpXTsKKwkJCQkJCWZjaW5mby0+YXJnc1tqKzFdLmlzbnVsbCA9IGJ2LT5u dWxsc1thcmdvZmZdW2ldOworCQkJCQkJaWYgKCFoYXNudWxsICYmIGJ2LT5udWxsc1thcmdvZmZd W2ldKQorCQkJCQkJCWhhc251bGwgPSB0cnVlOworCQkJCQl9CisJCQkJfQorCQkJCS8qIGZjaW5m by0+YXJnc1swXSBpcyB0aGUgZXhpc3RpbmcgdHJhbnNpdGlvbiBzdGF0ZSAqLworCQkJCWlmIChm aW5mby0+Zm5fc3RyaWN0ICYmIGhhc251bGwpCisJCQkJCWNvbnRpbnVlOworCQkJCWZjaW5mby0+ YXJnc1swXS52YWx1ZSA9IHBlcmdyb3VwLT50cmFuc1ZhbHVlOworCQkJCWZjaW5mby0+YXJnc1sw XS5pc251bGwgPSBwZXJncm91cC0+dHJhbnNWYWx1ZUlzTnVsbDsKKwkJCQluZXdWYWwgPSBGdW5j dGlvbkNhbGxJbnZva2UoZmNpbmZvKTsKKwkJCQlpZiAoIXBlcnRyYW5zLT50cmFuc3R5cGVCeVZh bCAmJgorCQkJCQlEYXR1bUdldFBvaW50ZXIobmV3VmFsKSAhPSBEYXR1bUdldFBvaW50ZXIocGVy Z3JvdXAtPnRyYW5zVmFsdWUpKQorCQkJCQluZXdWYWwgPSBFeGVjQWdnQ29weVRyYW5zVmFsdWUo YWdnc3RhdGUsIHBlcnRyYW5zLAorCQkJCQkJCQkJCQkJICAgbmV3VmFsLCBmY2luZm8tPmlzbnVs bCwKKwkJCQkJCQkJCQkJCSAgIHBlcmdyb3VwLT50cmFuc1ZhbHVlLAorCQkJCQkJCQkJCQkJICAg cGVyZ3JvdXAtPnRyYW5zVmFsdWVJc051bGwpOworCQkJCXBlcmdyb3VwLT50cmFuc1ZhbHVlID0g bmV3VmFsOworCQkJCXBlcmdyb3VwLT50cmFuc1ZhbHVlSXNOdWxsID0gZmNpbmZvLT5pc251bGw7 CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJpbnZhbGlkIEV4 cHJFdmFsT3AgaW4gRXhlY0FnZ1BsYWluVHJhbnNCYXRjaCgpIik7CisJfQorfQpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUFnZy5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv bm9kZUFnZy5jCmluZGV4IDNhY2U2MzYzNTA5Li42NjJkOGJlZjQzYiAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUFnZy5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25v ZGVBZ2cuYwpAQCAtODI1LDYgKzgyNSwxNiBAQCBhZHZhbmNlX2FnZ3JlZ2F0ZXNfYmF0Y2goQWdn U3RhdGUgKmFnZ3N0YXRlLCBUdXBsZUJhdGNoICpiKQogewogCUV4cHJDb250ZXh0ICp0bXBjb250 ZXh0ID0gYWdnc3RhdGUtPnRtcGNvbnRleHQ7CiAJRXhwclN0YXRlICpldmFsdHJhbnMgPSBhZ2dz dGF0ZS0+cGhhc2UtPmV2YWx0cmFuczsKKwlib29sCQliYXRjaF90cmFucyA9IGFnZ3N0YXRlLT5w aGFzZS0+YmF0Y2hfdHJhbnM7CisKKwlpZiAoYmF0Y2hfdHJhbnMpCisJeworCQl0bXBjb250ZXh0 LT5lY3h0X291dGVydHVwbGUgPSBUdXBsZUJhdGNoR2V0U2xvdChiLCAwKTsKKwkJdG1wY29udGV4 dC0+b3V0ZXJfYmF0Y2ggPSBiOworCQlFeGVjRXZhbEV4cHJOb1JldHVyblN3aXRjaENvbnRleHQo ZXZhbHRyYW5zLCB0bXBjb250ZXh0KTsKKwkJVHVwbGVCYXRjaENvbnN1bWVBbGwoYik7CisJCXJl dHVybjsKKwl9CiAKIAl3aGlsZSAoVHVwbGVCYXRjaEhhc01vcmUoYikpCiAJewpAQCAtMTgwMCw3 ICsxODEwLDggQEAgaGFzaGFnZ19yZWNvbXBpbGVfZXhwcmVzc2lvbnMoQWdnU3RhdGUgKmFnZ3N0 YXRlLCBib29sIG1pbnNsb3QsIGJvb2wgbnVsbGNoZWNrKQogCiAJCXBoYXNlLT5ldmFsdHJhbnNf Y2FjaGVbaV1bal0gPSBFeGVjQnVpbGRBZ2dUcmFucyhhZ2dzdGF0ZSwgcGhhc2UsCiAJCQkJCQkJ CQkJCQkJCSBkb3NvcnQsIGRvaGFzaCwKLQkJCQkJCQkJCQkJCQkJIG51bGxjaGVjayk7CisJCQkJ CQkJCQkJCQkJCSBudWxsY2hlY2ssCisJCQkJCQkJCQkJCQkJCSBOVUxMKTsKIAogCQkvKiBjaGFu Z2UgYmFjayAqLwogCQlhZ2dzdGF0ZS0+c3MucHMub3V0ZXJvcHMgPSBvdXRlcm9wczsKQEAgLTMz NjcsNyArMzM3OCw3IEBAIGhhc2hhZ2dfcmVzZXRfc3BpbGxfc3RhdGUoQWdnU3RhdGUgKmFnZ3N0 YXRlKQogCX0KIH0KIAotc3RhdGljIGJvb2wKK2Jvb2wKIEFnZ0NhblVzZVBsYWluQmF0Y2goQWdn U3RhdGUgKmFnZ3N0YXRlKQogewogCWNvbnN0IEFnZyAqYWdnbm9kZSA9IChjb25zdCBBZ2cgKikg YWdnc3RhdGUtPnNzLnBzLnBsYW47CkBAIC00MjMzLDcgKzQyNDQsNyBAQCBFeGVjSW5pdEFnZyhB Z2cgKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCQkJQXNzZXJ0KGZhbHNlKTsK IAogCQlwaGFzZS0+ZXZhbHRyYW5zID0gRXhlY0J1aWxkQWdnVHJhbnMoYWdnc3RhdGUsIHBoYXNl LCBkb3NvcnQsIGRvaGFzaCwKLQkJCQkJCQkJCQkJIGZhbHNlKTsKKwkJCQkJCQkJCQkJIGZhbHNl LCAmcGhhc2UtPmJhdGNoX3RyYW5zKTsKIAogCQkvKiBjYWNoZSBjb21waWxlZCBleHByZXNzaW9u IGZvciBvdXRlciBzbG90IHdpdGhvdXQgTlVMTCBjaGVjayAqLwogCQlwaGFzZS0+ZXZhbHRyYW5z X2NhY2hlWzBdWzBdID0gcGhhc2UtPmV2YWx0cmFuczsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2ppdC9sbHZtL2xsdm1qaXRfZXhwci5jIGIvc3JjL2JhY2tlbmQvaml0L2xsdm0vbGx2bWppdF9l eHByLmMKaW5kZXggODQ4ZjBiNTJkNmYuLmVmYjNlZTYzOWZjIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9qaXQvbGx2bS9sbHZtaml0X2V4cHIuYworKysgYi9zcmMvYmFja2VuZC9qaXQvbGx2bS9s bHZtaml0X2V4cHIuYwpAQCAtMzAyNiw2ICszMDI2LDEyIEBAIGxsdm1fY29tcGlsZV9leHByKEV4 cHJTdGF0ZSAqc3RhdGUpCiAJCQkJTExWTUJ1aWxkQnIoYiwgb3BibG9ja3Nbb3BubyArIDFdKTsK IAkJCQlicmVhazsKIAorCQkJY2FzZSBFRU9QX0FHR19QTEFJTl9UUkFOU19CQVRDSF9ST1dMT09Q OgorCQkJCWJ1aWxkX0V2YWxYRnVuYyhiLCBtb2QsICJFeGVjQWdnUGxhaW5UcmFuc0JhdGNoIiwK KwkJCQkJCQkJdl9zdGF0ZSwgb3AsIHZfZWNvbnRleHQpOworCQkJCUxMVk1CdWlsZEJyKGIsIG9w YmxvY2tzW29wbm8gKyAxXSk7CisJCQkJYnJlYWs7CisKIAkJCWNhc2UgRUVPUF9MQVNUOgogCQkJ CUFzc2VydChmYWxzZSk7CiAJCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9qaXQv bGx2bS9sbHZtaml0X3R5cGVzLmMgYi9zcmMvYmFja2VuZC9qaXQvbGx2bS9sbHZtaml0X3R5cGVz LmMKaW5kZXggNmJiNTI3YzNmNmYuLjFiNWUwNmY2MGNjIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9qaXQvbGx2bS9sbHZtaml0X3R5cGVzLmMKKysrIGIvc3JjL2JhY2tlbmQvaml0L2xsdm0vbGx2 bWppdF90eXBlcy5jCkBAIC0xODYsNCArMTg2LDUgQEAgdm9pZAkgICAqcmVmZXJlbmNlZF9mdW5j dGlvbnNbXSA9CiAJRXhlY0J1aWxkSW5uZXJCYXRjaFZlY3RvciwKIAlFeGVjQnVpbGRPdXRlckJh dGNoVmVjdG9yLAogCUV4ZWNCdWlsZFNjYW5CYXRjaFZlY3RvciwKKwlFeGVjQWdnUGxhaW5UcmFu c0JhdGNoLAogfTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNCYXRjaC5o IGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY0JhdGNoLmgKaW5kZXggNmYxYTM4ZDE0YmQuLmI1 MDk2MWZjMGM5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjQmF0Y2guaAor KysgYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjQmF0Y2guaApAQCAtOTksNCArOTksMTAgQEAg VHVwbGVCYXRjaE1hdGVyaWFsaXplQWxsKFR1cGxlQmF0Y2ggKmIpCiAJVHVwbGVCYXRjaFVzZUlu cHV0KGIsIGItPm50dXBsZXMpOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQKK1R1cGxlQmF0Y2hD b25zdW1lQWxsKFR1cGxlQmF0Y2ggKmIpCit7CisJYi0+bmV4dCA9IGItPm52YWxpZDsKK30KKwog I2VuZGlmCS8qIEVYRUNCQVRDSF9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9leGVjdXRv ci9leGVjRXhwci5oIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY0V4cHIuaAppbmRleCA5OWM4 NmJhYzcwMi4uMWQzM2UwODRiNjkgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4 ZWNFeHByLmgKKysrIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY0V4cHIuaApAQCAtMzAyLDYg KzMwMiw5IEBAIHR5cGVkZWYgZW51bSBFeHByRXZhbE9wCiAJRUVPUF9CVUlMRF9PVVRFUl9CQVRD SF9WRUNUT1IsCiAJRUVPUF9CVUlMRF9TQ0FOX0JBVENIX1ZFQ1RPUiwKIAorCS8qIEJhdGNoZWQg YWdncmVnYXRlIHRyYW5zIGV2YWx1YXRpb24gKi8KKwlFRU9QX0FHR19QTEFJTl9UUkFOU19CQVRD SF9ST1dMT09QLAkvKiBwZXItcm93IGZtZ3IgY2FsbHMgKi8KKwogCS8qIG5vbi1leGlzdGVudCBv cGVyYXRpb24sIHVzZWQgZS5nLiB0byBjaGVjayBhcnJheSBsZW5ndGhzICovCiAJRUVPUF9MQVNU CiB9IEV4cHJFdmFsT3A7CkBAIC03NTAsNiArNzUzLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgRXhwckV2 YWxTdGVwCiAKIAkJLyogZm9yIEVFT1BfQUdHX1BMQUlOX1RSQU5TX1tJTklUX11bU1RSSUNUX117 QllWQUwsQllSRUZ9ICovCiAJCS8qIGZvciBFRU9QX0FHR19PUkRFUkVEX1RSQU5TX3tEQVRVTSxU VVBMRX0gKi8KKwkJLyogZm9yIEVFT1BfQUdHX1BMQUlOX1RSQU5TX3tCQVRDSCxCQVRDSF9ST1dM T09QfSovCiAJCXN0cnVjdAogCQl7CiAJCQlBZ2dTdGF0ZVBlclRyYW5zIHBlcnRyYW5zOwpAQCAt NzU3LDYgKzc2MSw3IEBAIHR5cGVkZWYgc3RydWN0IEV4cHJFdmFsU3RlcAogCQkJaW50CQkJc2V0 bm87CiAJCQlpbnQJCQl0cmFuc25vOwogCQkJaW50CQkJc2V0b2ZmOworCQkJc3RydWN0IEJhdGNo VmVjdG9yU2xpY2UgKmJ2czsKIAkJfQkJCWFnZ190cmFuczsKIAogCQkvKiBmb3IgRUVPUF9JU19K U09OICovCkBAIC05NTYsOCArOTYxLDE3IEBAIHR5cGVkZWYgc3RydWN0IEJhdGNoVmVjdG9yCiAJ aW50CQlucm93czsJCQkvKiAjcm93cyBsb2FkZWQgaW50byBjb2xzL251bGxzICovCiB9IEJhdGNo VmVjdG9yOwogCisvKiBBIHNsaWNlIG9mIEJhdGNoVmVjdG9yIHRoYXQgbWFwcyBjYWxsZXIgYXJn cyB0byBCYXRjaFZlY3RvciBjb2x1bW5zLiAqLwordHlwZWRlZiBzdHJ1Y3QgQmF0Y2hWZWN0b3JT bGljZQoreworCWNvbnN0IEJhdGNoVmVjdG9yICpidjsKKwlpbnQJCQluYXJnczsJCS8qIG51bWJl ciBvZiBhcmdzIGNvdmVyZWQgKi8KKwlpbnQxNgkgICAqYXJnb2ZmczsJLyogbGVuZ3RoIG5hcmdz LCAtMSBmb3Igbm9uLVZhciBlbnRyaWVzICovCit9IEJhdGNoVmVjdG9yU2xpY2U7CisKIGV4dGVy biB2b2lkIEV4ZWNCdWlsZElubmVyQmF0Y2hWZWN0b3IoRXhwclN0YXRlICpzdGF0ZSwgRXhwckV2 YWxTdGVwICpvcCwgRXhwckNvbnRleHQgKmVjb250ZXh0KTsKIGV4dGVybiB2b2lkIEV4ZWNCdWls ZE91dGVyQmF0Y2hWZWN0b3IoRXhwclN0YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVwICpvcCwgRXhw ckNvbnRleHQgKmVjb250ZXh0KTsKIGV4dGVybiB2b2lkIEV4ZWNCdWlsZFNjYW5CYXRjaFZlY3Rv cihFeHByU3RhdGUgKnN0YXRlLCBFeHByRXZhbFN0ZXAgKm9wLCBFeHByQ29udGV4dCAqZWNvbnRl eHQpOwogCitleHRlcm4gdm9pZCBFeGVjQWdnUGxhaW5UcmFuc0JhdGNoKEV4cHJTdGF0ZSAqc3Rh dGUsIEV4cHJFdmFsU3RlcCAqb3AsIEV4cHJDb250ZXh0ICplY29udGV4dCk7CiAjZW5kaWYJCQkJ CQkJLyogRVhFQ19FWFBSX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4 ZWN1dG9yLmggYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5oCmluZGV4IGNmNWIwYzdl MDVjLi41YmE5YTUyMzk3MCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY3V0 b3IuaAorKysgYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5oCkBAIC0zMzYsNyArMzM2 LDggQEAgZXh0ZXJuIEV4cHJTdGF0ZSAqRXhlY0luaXRRdWFsKExpc3QgKnF1YWwsIFBsYW5TdGF0 ZSAqcGFyZW50KTsKIGV4dGVybiBFeHByU3RhdGUgKkV4ZWNJbml0Q2hlY2soTGlzdCAqcXVhbCwg UGxhblN0YXRlICpwYXJlbnQpOwogZXh0ZXJuIExpc3QgKkV4ZWNJbml0RXhwckxpc3QoTGlzdCAq bm9kZXMsIFBsYW5TdGF0ZSAqcGFyZW50KTsKIGV4dGVybiBFeHByU3RhdGUgKkV4ZWNCdWlsZEFn Z1RyYW5zKEFnZ1N0YXRlICphZ2dzdGF0ZSwgc3RydWN0IEFnZ1N0YXRlUGVyUGhhc2VEYXRhICpw aGFzZSwKLQkJCQkJCQkJCWJvb2wgZG9Tb3J0LCBib29sIGRvSGFzaCwgYm9vbCBudWxsY2hlY2sp OworCQkJCQkJCQkJYm9vbCBkb1NvcnQsIGJvb2wgZG9IYXNoLCBib29sIG51bGxjaGVjaywKKwkJ CQkJCQkJCWJvb2wgKmJhdGNoX3RyYW5zKTsKIGV4dGVybiBFeHByU3RhdGUgKkV4ZWNCdWlsZEhh c2gzMkZyb21BdHRycyhUdXBsZURlc2MgZGVzYywKIAkJCQkJCQkJCQkgICBjb25zdCBUdXBsZVRh YmxlU2xvdE9wcyAqb3BzLAogCQkJCQkJCQkJCSAgIEZtZ3JJbmZvICpoYXNoZnVuY3Rpb25zLApk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvZXhlY3V0b3Ivbm9kZUFnZy5oIGIvc3JjL2luY2x1ZGUv ZXhlY3V0b3Ivbm9kZUFnZy5oCmluZGV4IDZjNDg5MWJiYWViLi41YzVlYmZjNzNmMiAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvZXhlY3V0b3Ivbm9kZUFnZy5oCisrKyBiL3NyYy9pbmNsdWRlL2V4 ZWN1dG9yL25vZGVBZ2cuaApAQCAtMjg5LDYgKzI4OSw3IEBAIHR5cGVkZWYgc3RydWN0IEFnZ1N0 YXRlUGVyUGhhc2VEYXRhCiAJU29ydAkgICAqc29ydG5vZGU7CQkvKiBTb3J0IG5vZGUgZm9yIGlu cHV0IG9yZGVyaW5nIGZvciBwaGFzZSAqLwogCiAJRXhwclN0YXRlICAqZXZhbHRyYW5zOwkJLyog ZXZhbHVhdGlvbiBvZiB0cmFuc2l0aW9uIGZ1bmN0aW9ucyAgKi8KKwlib29sCQliYXRjaF90cmFu czsJLyogdHJ1ZSBpZiBldmFsdHJhbnMgY29udGFpbnMgYmF0Y2ggRUVPUHMgKi8KIAogCS8qLS0t LS0tLS0tLQogCSAqIENhY2hlZCB2YXJpYW50cyBvZiB0aGUgY29tcGlsZWQgZXhwcmVzc2lvbi4K QEAgLTMzOCw0ICszMzksNSBAQCBleHRlcm4gdm9pZCBFeGVjQWdnSW5pdGlhbGl6ZURTTShBZ2dT dGF0ZSAqbm9kZSwgUGFyYWxsZWxDb250ZXh0ICpwY3h0KTsKIGV4dGVybiB2b2lkIEV4ZWNBZ2dJ bml0aWFsaXplV29ya2VyKEFnZ1N0YXRlICpub2RlLCBQYXJhbGxlbFdvcmtlckNvbnRleHQgKnB3 Y3h0KTsKIGV4dGVybiB2b2lkIEV4ZWNBZ2dSZXRyaWV2ZUluc3RydW1lbnRhdGlvbihBZ2dTdGF0 ZSAqbm9kZSk7CiAKK2V4dGVybiBib29sIEFnZ0NhblVzZVBsYWluQmF0Y2goQWdnU3RhdGUgKmFn Z3N0YXRlKTsKICNlbmRpZgkJCQkJCQkvKiBOT0RFQUdHX0ggKi8KLS0gCjIuNDMuMAoK --0000000000002b1beb063fb44440 Content-Type: application/octet-stream; name="v1-0005-WIP-Add-EEOPs-and-helpers-for-TupleBatch-processi.patch" Content-Disposition: attachment; filename="v1-0005-WIP-Add-EEOPs-and-helpers-for-TupleBatch-processi.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mg0jlk7s3 RnJvbSBiNjNiMzU3ZWE0OGU1NWI0MzkxMzU1OTQ3MWZkMTBmNWE2NWUxYjhlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IE1vbiwgMjIgU2VwIDIwMjUgMTc6MDE6MjkgKzA5MDAKU3ViamVjdDogW1BBVENIIHYx IDUvOF0gV0lQOiBBZGQgRUVPUHMgYW5kIGhlbHBlcnMgZm9yIFR1cGxlQmF0Y2ggcHJvY2Vzc2lu ZwoKSW50cm9kdWNlIG5ldyBFRU9QIGNhc2VzIHRvIGZldGNoIGF0dHJpYnV0ZXMgaW50byBUdXBs ZUJhdGNoCnZlY3RvcnM6Ci0gRUVPUF97SU5ORVIsT1VURVIsU0NBTn1fRkVUQ0hTT01FX0JBVENI Ci0gRUVPUF9CVUlMRF97SU5ORVIsT1VURVIsU0NBTn1fQkFUQ0hfVkVDVE9SCgpBZGQgRXhlY0J1 aWxke0lubmVyLE91dGVyLFNjYW59QmF0Y2hWZWN0b3IoKSBoZWxwZXJzIHRvIHBvcHVsYXRlCmNv bHVtbiB2ZWN0b3JzICh2YWx1ZXMsIG51bGxzLCBucm93cywgaGFzbnVsbCkgZnJvbSBhIFR1cGxl QmF0Y2guCkV4dGVuZCBFeHByQ29udGV4dCB3aXRoIGlubmVyX2JhdGNoLCBvdXRlcl9iYXRjaCwg YW5kIHNjYW5fYmF0Y2gKZmllbGRzIHNvIGV4cHJlc3Npb24gcHJvZ3JhbXMgY2FuIGFjY2VzcyBh Y3RpdmUgYmF0Y2hlcyBkaXJlY3RseS4KCkFkZCBzbG90X2dldHNvbWVhdHRyc19iYXRjaCgpIHRv IHByZWZldGNoIGF0dHJpYnV0ZXMgYWNyb3NzIGFsbApzbG90cyBpbiBhIFR1cGxlQmF0Y2gsIHNp bWlsYXIgdG8gc2xvdF9nZXRzb21lYXR0cnMoKSBmb3Igb25lIHNsb3QuCi0tLQogc3JjL2JhY2tl bmQvZXhlY3V0b3IvZXhlY0V4cHJJbnRlcnAuYyB8IDEyNyArKysrKysrKysrKysrKysrKysrKysr KysrLQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1R1cGxlcy5jICAgICB8ICAzMiArKysrKysr CiBzcmMvYmFja2VuZC9qaXQvbGx2bS9sbHZtaml0X2V4cHIuYyAgIHwgIDg2ICsrKysrKysrKysr KysrKysrCiBzcmMvYmFja2VuZC9qaXQvbGx2bS9sbHZtaml0X3R5cGVzLmMgIHwgICA0ICsKIHNy Yy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNFeHByLmggICAgICAgfCAgNDUgKysrKysrKystCiBzcmMv aW5jbHVkZS9leGVjdXRvci90dXB0YWJsZS5oICAgICAgIHwgICAyICsKIHNyYy9pbmNsdWRlL25v ZGVzL2V4ZWNub2Rlcy5oICAgICAgICAgfCAgMjQgKysrLS0KIDcgZmlsZXMgY2hhbmdlZCwgMzEw IGluc2VydGlvbnMoKyksIDEwIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2V4ZWN1dG9yL2V4ZWNFeHBySW50ZXJwLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhw ckludGVycC5jCmluZGV4IDBlMWE3NDk3NmY3Li42ODYyOWFkNzk5MSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHJJbnRlcnAuYworKysgYi9zcmMvYmFja2VuZC9leGVj dXRvci9leGVjRXhwckludGVycC5jCkBAIC01OSw2ICs1OSw3IEBACiAjaW5jbHVkZSAiYWNjZXNz L2hlYXB0b2FzdC5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfdHlwZS5oIgogI2luY2x1ZGUgImNv bW1hbmRzL3NlcXVlbmNlLmgiCisjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY0JhdGNoLmgiCiAjaW5j bHVkZSAiZXhlY3V0b3IvZXhlY0V4cHIuaCIKICNpbmNsdWRlICJleGVjdXRvci9ub2RlU3VicGxh bi5oIgogI2luY2x1ZGUgImZ1bmNhcGkuaCIKQEAgLTE4OCw2ICsxODksMTEgQEAgc3RhdGljIHBn X2F0dHJpYnV0ZV9hbHdheXNfaW5saW5lIHZvaWQgRXhlY0FnZ1BsYWluVHJhbnNCeVJlZihBZ2dT dGF0ZSAqYWdnc3RhdGUKIAkJCQkJCQkJCQkJCQkJCSAgaW50IHNldG5vKTsKIHN0YXRpYyBjaGFy ICpFeGVjR2V0SnNvblZhbHVlSXRlbVN0cmluZyhKc29uYlZhbHVlICppdGVtLCBib29sICpyZXNu dWxsKTsKIAorc3RhdGljIHBnX2F0dHJpYnV0ZV9hbHdheXNfaW5saW5lIHZvaWQgRXhlY0J1aWxk QmF0Y2hWZWN0b3IoRXhwclN0YXRlICpzdGF0ZSwKKwkJCQkJCQkJCQkJCQkJCUV4cHJFdmFsU3Rl cCAqb3AsCisJCQkJCQkJCQkJCQkJCQlFeHByQ29udGV4dCAqZWNvbnRleHQsCisJCQkJCQkJCQkJ CQkJCQlUdXBsZUJhdGNoICpiKTsKKwogLyoKICAqIFNjYWxhckFycmF5T3BFeHBySGFzaEVudHJ5 CiAgKiAJCUhhc2ggdGFibGUgZW50cnkgdHlwZSB1c2VkIGR1cmluZyBFRU9QX0hBU0hFRF9TQ0FM QVJBUlJBWU9QCkBAIC00NDYsNyArNDUyLDYgQEAgRXhlY1JlYWR5SW50ZXJwcmV0ZWRFeHByKEV4 cHJTdGF0ZSAqc3RhdGUpCiAJc3RhdGUtPmV2YWxmdW5jX3ByaXZhdGUgPSBFeGVjSW50ZXJwRXhw cjsKIH0KIAotCiAvKgogICogRXZhbHVhdGUgZXhwcmVzc2lvbiBpZGVudGlmaWVkIGJ5ICJzdGF0 ZSIgaW4gdGhlIGV4ZWN1dGlvbiBjb250ZXh0CiAgKiBnaXZlbiBieSAiZWNvbnRleHQiLiAgKmlz bnVsbCBpcyBzZXQgdG8gdGhlIGlzLW51bGwgZmxhZyBmb3IgdGhlIHJlc3VsdCwKQEAgLTQ2Niw2 ICs0NzEsOSBAQCBFeGVjSW50ZXJwRXhwcihFeHByU3RhdGUgKnN0YXRlLCBFeHByQ29udGV4dCAq ZWNvbnRleHQsIGJvb2wgKmlzbnVsbCkKIAlUdXBsZVRhYmxlU2xvdCAqc2NhbnNsb3Q7CiAJVHVw bGVUYWJsZVNsb3QgKm9sZHNsb3Q7CiAJVHVwbGVUYWJsZVNsb3QgKm5ld3Nsb3Q7CisJVHVwbGVC YXRjaCAqaW5uZXJiYXRjaDsKKwlUdXBsZUJhdGNoICpvdXRlcmJhdGNoOworCVR1cGxlQmF0Y2gg KnNjYW5iYXRjaDsKIAogCS8qCiAJICogVGhpcyBhcnJheSBoYXMgdG8gYmUgaW4gdGhlIHNhbWUg b3JkZXIgYXMgZW51bSBFeHByRXZhbE9wLgpAQCAtNDc5LDYgKzQ4Nyw5IEBAIEV4ZWNJbnRlcnBF eHByKEV4cHJTdGF0ZSAqc3RhdGUsIEV4cHJDb250ZXh0ICplY29udGV4dCwgYm9vbCAqaXNudWxs KQogCQkmJkNBU0VfRUVPUF9TQ0FOX0ZFVENIU09NRSwKIAkJJiZDQVNFX0VFT1BfT0xEX0ZFVENI U09NRSwKIAkJJiZDQVNFX0VFT1BfTkVXX0ZFVENIU09NRSwKKwkJJiZDQVNFX0VFT1BfSU5ORVJf RkVUQ0hTT01FX0JBVENILAorCQkmJkNBU0VfRUVPUF9PVVRFUl9GRVRDSFNPTUVfQkFUQ0gsCisJ CSYmQ0FTRV9FRU9QX1NDQU5fRkVUQ0hTT01FX0JBVENILAogCQkmJkNBU0VfRUVPUF9JTk5FUl9W QVIsCiAJCSYmQ0FTRV9FRU9QX09VVEVSX1ZBUiwKIAkJJiZDQVNFX0VFT1BfU0NBTl9WQVIsCkBA IC01OTIsNiArNjAzLDkgQEAgRXhlY0ludGVycEV4cHIoRXhwclN0YXRlICpzdGF0ZSwgRXhwckNv bnRleHQgKmVjb250ZXh0LCBib29sICppc251bGwpCiAJCSYmQ0FTRV9FRU9QX0FHR19QUkVTT1JU RURfRElTVElOQ1RfTVVMVEksCiAJCSYmQ0FTRV9FRU9QX0FHR19PUkRFUkVEX1RSQU5TX0RBVFVN LAogCQkmJkNBU0VfRUVPUF9BR0dfT1JERVJFRF9UUkFOU19UVVBMRSwKKwkJJiZDQVNFX0VFT1Bf QlVJTERfSU5ORVJfQkFUQ0hfVkVDVE9SLAorCQkmJkNBU0VfRUVPUF9CVUlMRF9PVVRFUl9CQVRD SF9WRUNUT1IsCisJCSYmQ0FTRV9FRU9QX0JVSUxEX1NDQU5fQkFUQ0hfVkVDVE9SLAogCQkmJkNB U0VfRUVPUF9MQVNUCiAJfTsKIApAQCAtNjEyLDYgKzYyNiw5IEBAIEV4ZWNJbnRlcnBFeHByKEV4 cHJTdGF0ZSAqc3RhdGUsIEV4cHJDb250ZXh0ICplY29udGV4dCwgYm9vbCAqaXNudWxsKQogCXNj YW5zbG90ID0gZWNvbnRleHQtPmVjeHRfc2NhbnR1cGxlOwogCW9sZHNsb3QgPSBlY29udGV4dC0+ ZWN4dF9vbGR0dXBsZTsKIAluZXdzbG90ID0gZWNvbnRleHQtPmVjeHRfbmV3dHVwbGU7CisJaW5u ZXJiYXRjaCA9IGVjb250ZXh0LT5pbm5lcl9iYXRjaDsKKwlvdXRlcmJhdGNoID0gZWNvbnRleHQt Pm91dGVyX2JhdGNoOworCXNjYW5iYXRjaCA9IGVjb250ZXh0LT5zY2FuX2JhdGNoOwogCiAjaWYg ZGVmaW5lZChFRU9fVVNFX0NPTVBVVEVEX0dPVE8pCiAJRUVPX0RJU1BBVENIKCk7CkBAIC02NTgs NiArNjc1LDM2IEBAIEV4ZWNJbnRlcnBFeHByKEV4cHJTdGF0ZSAqc3RhdGUsIEV4cHJDb250ZXh0 ICplY29udGV4dCwgYm9vbCAqaXNudWxsKQogCQkJRUVPX05FWFQoKTsKIAkJfQogCisJCUVFT19D QVNFKEVFT1BfSU5ORVJfRkVUQ0hTT01FX0JBVENIKQorCQl7CisJCQlDaGVja09wU2xvdENvbXBh dGliaWxpdHkob3AsIGlubmVyc2xvdCk7CisKKwkJCUFzc2VydChpbm5lcmJhdGNoKTsKKwkJCXNs b3RfZ2V0c29tZWF0dHJzX2JhdGNoKGlubmVyYmF0Y2gsIG9wLT5kLmZldGNoX2JhdGNoLmxhc3Rf dmFyKTsKKworCQkJRUVPX05FWFQoKTsKKwkJfQorCisJCUVFT19DQVNFKEVFT1BfT1VURVJfRkVU Q0hTT01FX0JBVENIKQorCQl7CisJCQlDaGVja09wU2xvdENvbXBhdGliaWxpdHkob3AsIG91dGVy c2xvdCk7CisKKwkJCUFzc2VydChvdXRlcmJhdGNoKTsKKwkJCXNsb3RfZ2V0c29tZWF0dHJzX2Jh dGNoKG91dGVyYmF0Y2gsIG9wLT5kLmZldGNoX2JhdGNoLmxhc3RfdmFyKTsKKworCQkJRUVPX05F WFQoKTsKKwkJfQorCisJCUVFT19DQVNFKEVFT1BfU0NBTl9GRVRDSFNPTUVfQkFUQ0gpCisJCXsK KwkJCUNoZWNrT3BTbG90Q29tcGF0aWJpbGl0eShvcCwgc2NhbnNsb3QpOworCisJCQlBc3NlcnQo c2NhbmJhdGNoKTsKKwkJCXNsb3RfZ2V0c29tZWF0dHJzX2JhdGNoKHNjYW5iYXRjaCwgb3AtPmQu ZmV0Y2hfYmF0Y2gubGFzdF92YXIpOworCisJCQlFRU9fTkVYVCgpOworCQl9CisKIAkJRUVPX0NB U0UoRUVPUF9PTERfRkVUQ0hTT01FKQogCQl7CiAJCQlDaGVja09wU2xvdENvbXBhdGliaWxpdHko b3AsIG9sZHNsb3QpOwpAQCAtMjI2NSw2ICsyMzEyLDMwIEBAIEV4ZWNJbnRlcnBFeHByKEV4cHJT dGF0ZSAqc3RhdGUsIEV4cHJDb250ZXh0ICplY29udGV4dCwgYm9vbCAqaXNudWxsKQogCQkJRUVP X05FWFQoKTsKIAkJfQogCisJCUVFT19DQVNFKEVFT1BfQlVJTERfSU5ORVJfQkFUQ0hfVkVDVE9S KQorCQl7CisJCQkvKiB0b28gY29tcGxleCBmb3IgYW4gaW5saW5lIGltcGxlbWVudGF0aW9uICov CisJCQlFeGVjQnVpbGRJbm5lckJhdGNoVmVjdG9yKHN0YXRlLCBvcCwgZWNvbnRleHQpOworCisJ CQlFRU9fTkVYVCgpOworCQl9CisKKwkJRUVPX0NBU0UoRUVPUF9CVUlMRF9PVVRFUl9CQVRDSF9W RUNUT1IpCisJCXsKKwkJCS8qIHRvbyBjb21wbGV4IGZvciBhbiBpbmxpbmUgaW1wbGVtZW50YXRp b24gKi8KKwkJCUV4ZWNCdWlsZE91dGVyQmF0Y2hWZWN0b3Ioc3RhdGUsIG9wLCBlY29udGV4dCk7 CisKKwkJCUVFT19ORVhUKCk7CisJCX0KKworCQlFRU9fQ0FTRShFRU9QX0JVSUxEX1NDQU5fQkFU Q0hfVkVDVE9SKQorCQl7CisJCQkvKiB0b28gY29tcGxleCBmb3IgYW4gaW5saW5lIGltcGxlbWVu dGF0aW9uICovCisJCQlFeGVjQnVpbGRTY2FuQmF0Y2hWZWN0b3Ioc3RhdGUsIG9wLCBlY29udGV4 dCk7CisKKwkJCUVFT19ORVhUKCk7CisJCX0KKwogCQlFRU9fQ0FTRShFRU9QX0xBU1QpCiAJCXsK IAkJCS8qIHVucmVhY2hhYmxlICovCkBAIC01OTE0LDMgKzU5ODUsNTcgQEAgRXhlY0FnZ1BsYWlu VHJhbnNCeVJlZihBZ2dTdGF0ZSAqYWdnc3RhdGUsIEFnZ1N0YXRlUGVyVHJhbnMgcGVydHJhbnMs CiAKIAlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkQ29udGV4dCk7CiB9CisKK3ZvaWQKK0V4ZWNC dWlsZElubmVyQmF0Y2hWZWN0b3IoRXhwclN0YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVwICpvcCwg RXhwckNvbnRleHQgKmVjb250ZXh0KQoreworCUFzc2VydChlY29udGV4dC0+aW5uZXJfYmF0Y2gp OworCUV4ZWNCdWlsZEJhdGNoVmVjdG9yKHN0YXRlLCBvcCwgZWNvbnRleHQsIGVjb250ZXh0LT5p bm5lcl9iYXRjaCk7Cit9CisKK3ZvaWQKK0V4ZWNCdWlsZE91dGVyQmF0Y2hWZWN0b3IoRXhwclN0 YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVwICpvcCwgRXhwckNvbnRleHQgKmVjb250ZXh0KQorewor CUFzc2VydChlY29udGV4dC0+b3V0ZXJfYmF0Y2gpOworCUV4ZWNCdWlsZEJhdGNoVmVjdG9yKHN0 YXRlLCBvcCwgZWNvbnRleHQsIGVjb250ZXh0LT5vdXRlcl9iYXRjaCk7Cit9CisKK3ZvaWQKK0V4 ZWNCdWlsZFNjYW5CYXRjaFZlY3RvcihFeHByU3RhdGUgKnN0YXRlLCBFeHByRXZhbFN0ZXAgKm9w LCBFeHByQ29udGV4dCAqZWNvbnRleHQpCit7CisJQXNzZXJ0KGVjb250ZXh0LT5zY2FuX2JhdGNo KTsKKwlFeGVjQnVpbGRCYXRjaFZlY3RvcihzdGF0ZSwgb3AsIGVjb250ZXh0LCBlY29udGV4dC0+ c2Nhbl9iYXRjaCk7Cit9CisKK3N0YXRpYyBwZ19hdHRyaWJ1dGVfYWx3YXlzX2lubGluZSB2b2lk CitFeGVjQnVpbGRCYXRjaFZlY3RvcihFeHByU3RhdGUgKnN0YXRlLCBFeHByRXZhbFN0ZXAgKm9w LCBFeHByQ29udGV4dCAqZWNvbnRleHQsCisJCQkJCSBUdXBsZUJhdGNoICpiKQoreworCXN0cnVj dCBCYXRjaFZlY3RvciAqYnYgPSBvcC0+ZC5iYXRjaF92ZWN0b3IuYnY7CisJaW50CQlpID0gMDsK KworCWlmIChidi0+bmNvbHMgPT0gMCkKKwkJcmV0dXJuOworCisJLyogRmV0Y2ggZWFjaCByZXF1 ZXN0ZWQgYXR0cmlidXRlIGludG8gY29sdW1uIHZlY3RvcnMuICovCisJVHVwbGVCYXRjaFJld2lu ZChiKTsKKwl3aGlsZSAoVHVwbGVCYXRjaEhhc01vcmUoYikpCisJeworCQlUdXBsZVRhYmxlU2xv dCAqc2xvdCA9IFR1cGxlQmF0Y2hHZXROZXh0U2xvdChiKTsKKworCQlmb3IgKGludCBqID0gMDsg aiA8IGJ2LT5uY29sczsgaisrKQorCQl7CisJCQlBdHRyTnVtYmVyIGF0dG5vID0gYnYtPmF0dG5v c1tqXTsKKwkJCURhdHVtICAqY29scyAgPSBidi0+Y29sc1tqXTsKKwkJCWJvb2wgICAqbnVsbHMg ID0gYnYtPm51bGxzW2pdOworCisJCQlBc3NlcnQoYXR0bm8gPD0gc2xvdC0+dHRzX252YWxpZCk7 CisJCQljb2xzW2ldID0gc2xvdC0+dHRzX3ZhbHVlc1thdHRubyAtIDFdOworCQkJbnVsbHNbaV0g PSBzbG90LT50dHNfaXNudWxsW2F0dG5vIC0gMV07CisJCQlpZiAoIWJ2LT5oYXNudWxsICYmIG51 bGxzW2ldKQorCQkJCWJ2LT5oYXNudWxsID0gdHJ1ZTsKKwkJfQorCQlpKys7CisJfQorCWJ2LT5u cm93cyA9IGk7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjVHVwbGVz LmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjVHVwbGVzLmMKaW5kZXggOGUwMmQ2ODgyNGYu Ljg2ZDVkZWE4ZjhiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjVHVwbGVz LmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1R1cGxlcy5jCkBAIC0yMTExLDYgKzIx MTEsMzggQEAgc2xvdF9nZXRzb21lYXR0cnNfaW50KFR1cGxlVGFibGVTbG90ICpzbG90LCBpbnQg YXR0bnVtKQogCX0KIH0KIAordm9pZAorc2xvdF9nZXRzb21lYXR0cnNfYmF0Y2goc3RydWN0IFR1 cGxlQmF0Y2ggKmIsIGludCBhdHRudW0pCit7CisJd2hpbGUgKFR1cGxlQmF0Y2hIYXNNb3JlKGIp KQorCXsKKwkJVHVwbGVUYWJsZVNsb3QgKnNsb3QgPSBUdXBsZUJhdGNoR2V0TmV4dFNsb3QoYik7 CisKKwkJLyogQ2hlY2sgZm9yIGNhbGxlciBlcnJvcnMgKi8KKwkJQXNzZXJ0KGF0dG51bSA+IDAp OworCisJCWlmICh1bmxpa2VseShhdHRudW0gPiBzbG90LT50dHNfdHVwbGVEZXNjcmlwdG9yLT5u YXR0cykpCisJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBhdHRyaWJ1dGUgbnVtYmVyICVkIiwgYXR0 bnVtKTsKKworCQkvKiBYWFggLSB0aGVyZSBzaG91bGQgcGVyaGFwcyBhbHNvIGJlIGEgYmF0Y2gt bGV2ZWwgYXR0X252YWxpZCAqLworCQlpZiAoYXR0bnVtIDwgc2xvdC0+dHRzX252YWxpZCkKKwkJ CWNvbnRpbnVlOworCisJCS8qIEZldGNoIGFzIG1hbnkgYXR0cmlidXRlcyBhcyBwb3NzaWJsZSBm cm9tIHRoZSB1bmRlcmx5aW5nIHR1cGxlLiAqLworCQlzbG90LT50dHNfb3BzLT5nZXRzb21lYXR0 cnMoc2xvdCwgYXR0bnVtKTsKKworCQkvKgorCQkgKiBJZiB0aGUgdW5kZXJseWluZyB0dXBsZSBk b2Vzbid0IGhhdmUgZW5vdWdoIGF0dHJpYnV0ZXMsIHR1cGxlCisJCSAqIGRlc2NyaXB0b3IgbXVz dCBoYXZlIHRoZSBtaXNzaW5nIGF0dHJpYnV0ZXMuCisJCSAqLworCQlpZiAodW5saWtlbHkoc2xv dC0+dHRzX252YWxpZCA8IGF0dG51bSkpCisJCXsKKwkJCXNsb3RfZ2V0bWlzc2luZ2F0dHJzKHNs b3QsIHNsb3QtPnR0c19udmFsaWQsIGF0dG51bSk7CisJCQlzbG90LT50dHNfbnZhbGlkID0gYXR0 bnVtOworCQl9CisJfQorfQorCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgkJRXhlY1R5cGVGcm9tVEwKICAqCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9qaXQvbGx2bS9sbHZtaml0X2V4cHIuYyBiL3NyYy9iYWNr ZW5kL2ppdC9sbHZtL2xsdm1qaXRfZXhwci5jCmluZGV4IDcxMmIzNWRmN2U1Li44NDhmMGI1MmQ2 ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvaml0L2xsdm0vbGx2bWppdF9leHByLmMKKysrIGIv c3JjL2JhY2tlbmQvaml0L2xsdm0vbGx2bWppdF9leHByLmMKQEAgLTEwOSw2ICsxMDksMTEgQEAg bGx2bV9jb21waWxlX2V4cHIoRXhwclN0YXRlICpzdGF0ZSkKIAlMTFZNVmFsdWVSZWYgdl9uZXdz bG90OwogCUxMVk1WYWx1ZVJlZiB2X3Jlc3VsdHNsb3Q7CiAKKwkvKiBiYXRjaGVzICovCisJTExW TVZhbHVlUmVmIHZfaW5uZXJiYXRjaDsKKwlMTFZNVmFsdWVSZWYgdl9vdXRlcmJhdGNoOworCUxM Vk1WYWx1ZVJlZiB2X3NjYW5iYXRjaDsKKwogCS8qIG51bGxzL3ZhbHVlcyBvZiBzbG90cyAqLwog CUxMVk1WYWx1ZVJlZiB2X2lubmVydmFsdWVzOwogCUxMVk1WYWx1ZVJlZiB2X2lubmVybnVsbHM7 CkBAIC0yMjEsNiArMjI2LDIxIEBAIGxsdm1fY29tcGlsZV9leHByKEV4cHJTdGF0ZSAqc3RhdGUp CiAJCQkJCQkJCQkgdl9zdGF0ZSwKIAkJCQkJCQkJCSBGSUVMRE5PX0VYUFJTVEFURV9SRVNVTFRT TE9ULAogCQkJCQkJCQkJICJ2X3Jlc3VsdHNsb3QiKTsKKwl2X2lubmVyYmF0Y2ggPSBsX2xvYWRf c3RydWN0X2dlcChiLAorCQkJCQkJCQkJIFN0cnVjdEV4cHJDb250ZXh0LAorCQkJCQkJCQkJIHZf ZWNvbnRleHQsCisJCQkJCQkJCQkgRklFTEROT19FWFBSQ09OVEVYVF9PVVRFUkJBVENILAorCQkJ CQkJCQkJICJ2X2lubmVyYmF0Y2giKTsKKwl2X291dGVyYmF0Y2ggPSBsX2xvYWRfc3RydWN0X2dl cChiLAorCQkJCQkJCQkJIFN0cnVjdEV4cHJDb250ZXh0LAorCQkJCQkJCQkJIHZfZWNvbnRleHQs CisJCQkJCQkJCQkgRklFTEROT19FWFBSQ09OVEVYVF9PVVRFUkJBVENILAorCQkJCQkJCQkJICJ2 X291dGVyYmF0Y2giKTsKKwl2X3NjYW5iYXRjaCA9IGxfbG9hZF9zdHJ1Y3RfZ2VwKGIsCisJCQkJ CQkJCQlTdHJ1Y3RFeHByQ29udGV4dCwKKwkJCQkJCQkJCXZfZWNvbnRleHQsCisJCQkJCQkJCQlG SUVMRE5PX0VYUFJDT05URVhUX1NDQU5CQVRDSCwKKwkJCQkJCQkJCSJ2X3NjYW5iYXRjaCIpOwog CiAJLyogYnVpbGQgZ2xvYmFsIHZhbHVlcy9pc251bGwgcG9pbnRlcnMgKi8KIAl2X3NjYW52YWx1 ZXMgPSBsX2xvYWRfc3RydWN0X2dlcChiLApAQCAtNDM5LDYgKzQ1OSw1NCBAQCBsbHZtX2NvbXBp bGVfZXhwcihFeHByU3RhdGUgKnN0YXRlKQogCQkJCQlicmVhazsKIAkJCQl9CiAKKwkJCWNhc2Ug RUVPUF9JTk5FUl9GRVRDSFNPTUVfQkFUQ0g6CisJCQkJeworCQkJCQlMTFZNVmFsdWVSZWYgcGFy YW1zWzJdOworCisJCQkJCXBhcmFtc1swXSA9IHZfaW5uZXJiYXRjaDsKKwkJCQkJcGFyYW1zWzFd ID0gbF9pbnQzMl9jb25zdChsYywgb3AtPmQuZmV0Y2hfYmF0Y2gubGFzdF92YXIpOworCisJCQkJ CQlsX2NhbGwoYiwKKwkJCQkJCQkgICBsbHZtX3BnX3Zhcl9mdW5jX3R5cGUoInNsb3RfZ2V0c29t ZWF0dHJzX2JhdGNoIiksCisJCQkJCQkJICAgbGx2bV9wZ19mdW5jKG1vZCwgInNsb3RfZ2V0c29t ZWF0dHJzX2JhdGNoIiksCisJCQkJCQkJICAgcGFyYW1zLCBsZW5ndGhvZihwYXJhbXMpLCAiIik7 CisKKwkJCQkJTExWTUJ1aWxkQnIoYiwgb3BibG9ja3Nbb3BubyArIDFdKTsKKwkJCQkJYnJlYWs7 CisJCQkJfQorCisJCQljYXNlIEVFT1BfT1VURVJfRkVUQ0hTT01FX0JBVENIOgorCQkJCXsKKwkJ CQkJTExWTVZhbHVlUmVmIHBhcmFtc1syXTsKKworCQkJCQlwYXJhbXNbMF0gPSB2X291dGVyYmF0 Y2g7CisJCQkJCXBhcmFtc1sxXSA9IGxfaW50MzJfY29uc3QobGMsIG9wLT5kLmZldGNoX2JhdGNo Lmxhc3RfdmFyKTsKKworCQkJCQkJbF9jYWxsKGIsCisJCQkJCQkJICAgbGx2bV9wZ192YXJfZnVu Y190eXBlKCJzbG90X2dldHNvbWVhdHRyc19iYXRjaCIpLAorCQkJCQkJCSAgIGxsdm1fcGdfZnVu Yyhtb2QsICJzbG90X2dldHNvbWVhdHRyc19iYXRjaCIpLAorCQkJCQkJCSAgIHBhcmFtcywgbGVu Z3Rob2YocGFyYW1zKSwgIiIpOworCisJCQkJCUxMVk1CdWlsZEJyKGIsIG9wYmxvY2tzW29wbm8g KyAxXSk7CisJCQkJCWJyZWFrOworCQkJCX0KKworCQkJY2FzZSBFRU9QX1NDQU5fRkVUQ0hTT01F X0JBVENIOgorCQkJCXsKKwkJCQkJTExWTVZhbHVlUmVmIHBhcmFtc1syXTsKKworCQkJCQlwYXJh bXNbMF0gPSB2X3NjYW5iYXRjaDsKKwkJCQkJcGFyYW1zWzFdID0gbF9pbnQzMl9jb25zdChsYywg b3AtPmQuZmV0Y2hfYmF0Y2gubGFzdF92YXIpOworCisJCQkJCQlsX2NhbGwoYiwKKwkJCQkJCQkg ICBsbHZtX3BnX3Zhcl9mdW5jX3R5cGUoInNsb3RfZ2V0c29tZWF0dHJzX2JhdGNoIiksCisJCQkJ CQkJICAgbGx2bV9wZ19mdW5jKG1vZCwgInNsb3RfZ2V0c29tZWF0dHJzX2JhdGNoIiksCisJCQkJ CQkJICAgcGFyYW1zLCBsZW5ndGhvZihwYXJhbXMpLCAiIik7CisKKwkJCQkJTExWTUJ1aWxkQnIo Yiwgb3BibG9ja3Nbb3BubyArIDFdKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCiAJCQljYXNlIEVF T1BfSU5ORVJfVkFSOgogCQkJY2FzZSBFRU9QX09VVEVSX1ZBUjoKIAkJCWNhc2UgRUVPUF9TQ0FO X1ZBUjoKQEAgLTI5NDAsNiArMzAwOCwyNCBAQCBsbHZtX2NvbXBpbGVfZXhwcihFeHByU3RhdGUg KnN0YXRlKQogCQkJCUxMVk1CdWlsZEJyKGIsIG9wYmxvY2tzW29wbm8gKyAxXSk7CiAJCQkJYnJl YWs7CiAKKwkJCWNhc2UgRUVPUF9CVUlMRF9JTk5FUl9CQVRDSF9WRUNUT1I6CisJCQkJYnVpbGRf RXZhbFhGdW5jKGIsIG1vZCwgIkV4ZWNCdWlsZElubmVyQmF0Y2hWZWN0b3IiLAorCQkJCQkJCQl2 X3N0YXRlLCBvcCwgdl9lY29udGV4dCk7CisJCQkJTExWTUJ1aWxkQnIoYiwgb3BibG9ja3Nbb3Bu byArIDFdKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBFRU9QX0JVSUxEX09VVEVSX0JBVENIX1ZF Q1RPUjoKKwkJCQlidWlsZF9FdmFsWEZ1bmMoYiwgbW9kLCAiRXhlY0J1aWxkT3V0ZXJCYXRjaFZl Y3RvciIsCisJCQkJCQkJCXZfc3RhdGUsIG9wLCB2X2Vjb250ZXh0KTsKKwkJCQlMTFZNQnVpbGRC cihiLCBvcGJsb2Nrc1tvcG5vICsgMV0pOworCQkJCWJyZWFrOworCisJCQljYXNlIEVFT1BfQlVJ TERfU0NBTl9CQVRDSF9WRUNUT1I6CisJCQkJYnVpbGRfRXZhbFhGdW5jKGIsIG1vZCwgIkV4ZWNC dWlsZFNjYW5CYXRjaFZlY3RvciIsCisJCQkJCQkJCXZfc3RhdGUsIG9wLCB2X2Vjb250ZXh0KTsK KwkJCQlMTFZNQnVpbGRCcihiLCBvcGJsb2Nrc1tvcG5vICsgMV0pOworCQkJCWJyZWFrOworCiAJ CQljYXNlIEVFT1BfTEFTVDoKIAkJCQlBc3NlcnQoZmFsc2UpOwogCQkJCWJyZWFrOwpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvaml0L2xsdm0vbGx2bWppdF90eXBlcy5jIGIvc3JjL2JhY2tlbmQv aml0L2xsdm0vbGx2bWppdF90eXBlcy5jCmluZGV4IDE2N2NkNTU0YjljLi42YmI1MjdjM2Y2ZiAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvaml0L2xsdm0vbGx2bWppdF90eXBlcy5jCisrKyBiL3Ny Yy9iYWNrZW5kL2ppdC9sbHZtL2xsdm1qaXRfdHlwZXMuYwpAQCAtMTc5LDcgKzE3OSwxMSBAQCB2 b2lkCSAgICpyZWZlcmVuY2VkX2Z1bmN0aW9uc1tdID0KIAlNYWtlRXhwYW5kZWRPYmplY3RSZWFk T25seUludGVybmFsLAogCXNsb3RfZ2V0bWlzc2luZ2F0dHJzLAogCXNsb3RfZ2V0c29tZWF0dHJz X2ludCwKKwlzbG90X2dldHNvbWVhdHRyc19iYXRjaCwKIAlzdHJsZW4sCiAJdmFyc2l6ZV9hbnks CiAJRXhlY0ludGVycEV4cHJTdGlsbFZhbGlkLAorCUV4ZWNCdWlsZElubmVyQmF0Y2hWZWN0b3Is CisJRXhlY0J1aWxkT3V0ZXJCYXRjaFZlY3RvciwKKwlFeGVjQnVpbGRTY2FuQmF0Y2hWZWN0b3Is CiB9OwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY0V4cHIuaCBiL3NyYy9p bmNsdWRlL2V4ZWN1dG9yL2V4ZWNFeHByLmgKaW5kZXggNzUzNjYyMDM3MDYuLjk5Yzg2YmFjNzAy IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjRXhwci5oCisrKyBiL3NyYy9p bmNsdWRlL2V4ZWN1dG9yL2V4ZWNFeHByLmgKQEAgLTc4LDYgKzc4LDExIEBAIHR5cGVkZWYgZW51 bSBFeHByRXZhbE9wCiAJRUVPUF9PTERfRkVUQ0hTT01FLAogCUVFT1BfTkVXX0ZFVENIU09NRSwK IAorCS8qIGFwcGx5IHNsb3RfZ2V0c29tZWF0dHJzX2JhdGNoKCkgdG8gY29ycmVzcG9uZGluZyBi YXRjaCAqLworCUVFT1BfSU5ORVJfRkVUQ0hTT01FX0JBVENILAorCUVFT1BfT1VURVJfRkVUQ0hT T01FX0JBVENILAorCUVFT1BfU0NBTl9GRVRDSFNPTUVfQkFUQ0gsCisKIAkvKiBjb21wdXRlIG5v bi1zeXN0ZW0gVmFyIHZhbHVlICovCiAJRUVPUF9JTk5FUl9WQVIsCiAJRUVPUF9PVVRFUl9WQVIs CkBAIC0yOTIsMTEgKzI5NywxNSBAQCB0eXBlZGVmIGVudW0gRXhwckV2YWxPcAogCUVFT1BfQUdH X09SREVSRURfVFJBTlNfREFUVU0sCiAJRUVPUF9BR0dfT1JERVJFRF9UUkFOU19UVVBMRSwKIAor CS8qIEV4cHJDb250ZXh0LipfYmF0Y2ggLT4gQmF0Y2hWZWN0b3IgKi8KKwlFRU9QX0JVSUxEX0lO TkVSX0JBVENIX1ZFQ1RPUiwKKwlFRU9QX0JVSUxEX09VVEVSX0JBVENIX1ZFQ1RPUiwKKwlFRU9Q X0JVSUxEX1NDQU5fQkFUQ0hfVkVDVE9SLAorCiAJLyogbm9uLWV4aXN0ZW50IG9wZXJhdGlvbiwg dXNlZCBlLmcuIHRvIGNoZWNrIGFycmF5IGxlbmd0aHMgKi8KIAlFRU9QX0xBU1QKIH0gRXhwckV2 YWxPcDsKIAotCiB0eXBlZGVmIHN0cnVjdCBFeHByRXZhbFN0ZXAKIHsKIAkvKgpAQCAtMzMxLDYg KzM0MCwxMiBAQCB0eXBlZGVmIHN0cnVjdCBFeHByRXZhbFN0ZXAKIAkJCWNvbnN0IFR1cGxlVGFi bGVTbG90T3BzICpraW5kOwogCQl9CQkJZmV0Y2g7CiAKKwkJc3RydWN0CisJCXsKKwkJCS8qIGF0 dHJpYnV0ZSBudW1iZXIgdXAgdG8gd2hpY2ggdG8gZmV0Y2ggKGluY2x1c2l2ZSkgKi8KKwkJCWlu dAkJCWxhc3RfdmFyOworCQl9CQkJZmV0Y2hfYmF0Y2g7CisKIAkJLyogZm9yIEVFT1BfSU5ORVIv T1VURVIvU0NBTi9PTEQvTkVXX1tTWVNdVkFSICovCiAJCXN0cnVjdAogCQl7CkBAIC03NjksNiAr Nzg0LDEyIEBAIHR5cGVkZWYgc3RydWN0IEV4cHJFdmFsU3RlcAogCQkJdm9pZAkgICAqanNvbl9j b2VyY2lvbl9jYWNoZTsKIAkJCUVycm9yU2F2ZUNvbnRleHQgKmVzY29udGV4dDsKIAkJfQkJCWpz b25leHByX2NvZXJjaW9uOworCisJCS8qIGZvciBiYXRjaCB2ZWN0b3IgY29uc3RydWN0aW9uICov CisJCXN0cnVjdAorCQl7CisJCQlzdHJ1Y3QgQmF0Y2hWZWN0b3IgKmJ2OworCQl9CQkJYmF0Y2hf dmVjdG9yOwogCX0JCQlkOwogfSBFeHByRXZhbFN0ZXA7CiAKQEAgLTkxNyw0ICs5MzgsMjYgQEAg ZXh0ZXJuIHZvaWQgRXhlY0V2YWxBZ2dPcmRlcmVkVHJhbnNEYXR1bShFeHByU3RhdGUgKnN0YXRl LCBFeHByRXZhbFN0ZXAgKm9wLAogZXh0ZXJuIHZvaWQgRXhlY0V2YWxBZ2dPcmRlcmVkVHJhbnNU dXBsZShFeHByU3RhdGUgKnN0YXRlLCBFeHByRXZhbFN0ZXAgKm9wLAogCQkJCQkJCQkJCSBFeHBy Q29udGV4dCAqZWNvbnRleHQpOwogCisvKiAtLS0tLS0tLS0tIEJhdGNoVmVjdG9yIHN0dWZmIC0t LS0tLS0tLS0tLS0gKi8KKworLyogVmVjdG9yIGZldGNoIHNwZWMgZm9yIGEgbGlzdCBvZiBzaW1w bGUgVmFycy4gKi8KK3R5cGVkZWYgc3RydWN0IEJhdGNoVmVjdG9yCit7CisJLyogaW1tdXRhYmxl IGFmdGVyIEJhdGNoVmVjdG9yQ3JlYXRlICovCisJQXR0ck51bWJlciAqYXR0bm9zOwkJLyogW25j b2xzXSAqLworCWludAkJCW5jb2xzOworCWludAkJCW1heHJvd3M7CisJaW50CQkJbGFzdF92YXI7 CisKKwkvKiBwZXIgYmF0Y2ggc3RhdGUgKi8KKwlEYXR1bSAqKmNvbHM7CQkJLyogW25jb2xzXVtt YXhiYXRjaF0gKi8KKwlib29sICAqKm51bGxzOwkJCS8qIFtuY29sc11bbWF4YmF0Y2hdICovCisJ Ym9vbAloYXNudWxsOwkJLyogaXMgYW55IGRhdHVtIGluIGNvbHMgTlVMTD8gKi8KKwlpbnQJCW5y b3dzOwkJCS8qICNyb3dzIGxvYWRlZCBpbnRvIGNvbHMvbnVsbHMgKi8KK30gQmF0Y2hWZWN0b3I7 CisKK2V4dGVybiB2b2lkIEV4ZWNCdWlsZElubmVyQmF0Y2hWZWN0b3IoRXhwclN0YXRlICpzdGF0 ZSwgRXhwckV2YWxTdGVwICpvcCwgRXhwckNvbnRleHQgKmVjb250ZXh0KTsKK2V4dGVybiB2b2lk IEV4ZWNCdWlsZE91dGVyQmF0Y2hWZWN0b3IoRXhwclN0YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVw ICpvcCwgRXhwckNvbnRleHQgKmVjb250ZXh0KTsKK2V4dGVybiB2b2lkIEV4ZWNCdWlsZFNjYW5C YXRjaFZlY3RvcihFeHByU3RhdGUgKnN0YXRlLCBFeHByRXZhbFN0ZXAgKm9wLCBFeHByQ29udGV4 dCAqZWNvbnRleHQpOworCiAjZW5kaWYJCQkJCQkJLyogRVhFQ19FWFBSX0ggKi8KZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL3R1cHRhYmxlLmggYi9zcmMvaW5jbHVkZS9leGVjdXRv ci90dXB0YWJsZS5oCmluZGV4IDA5NWU0Y2M4MmUzLi4yZTIxOTJmYjNjZiAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvZXhlY3V0b3IvdHVwdGFibGUuaAorKysgYi9zcmMvaW5jbHVkZS9leGVjdXRv ci90dXB0YWJsZS5oCkBAIC0zNDcsNiArMzQ3LDggQEAgZXh0ZXJuIERhdHVtIEV4ZWNGZXRjaFNs b3RIZWFwVHVwbGVEYXR1bShUdXBsZVRhYmxlU2xvdCAqc2xvdCk7CiBleHRlcm4gdm9pZCBzbG90 X2dldG1pc3NpbmdhdHRycyhUdXBsZVRhYmxlU2xvdCAqc2xvdCwgaW50IHN0YXJ0QXR0TnVtLAog CQkJCQkJCQkgaW50IGxhc3RBdHROdW0pOwogZXh0ZXJuIHZvaWQgc2xvdF9nZXRzb21lYXR0cnNf aW50KFR1cGxlVGFibGVTbG90ICpzbG90LCBpbnQgYXR0bnVtKTsKK3N0cnVjdCBUdXBsZUJhdGNo OworZXh0ZXJuIHZvaWQgc2xvdF9nZXRzb21lYXR0cnNfYmF0Y2goc3RydWN0IFR1cGxlQmF0Y2gg KmIsIGludCBhdHRudW0pOwogCiAKICNpZm5kZWYgRlJPTlRFTkQKZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgK aW5kZXggOWI4MWI4NDIxNjEuLmZkZmU4YjRkZGFmIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9u b2Rlcy9leGVjbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaApAQCAt Mjc3LDYgKzI3NywxNCBAQCB0eXBlZGVmIHN0cnVjdCBFeHByQ29udGV4dAogI2RlZmluZSBGSUVM RE5PX0VYUFJDT05URVhUX09VVEVSVFVQTEUgMwogCVR1cGxlVGFibGVTbG90ICplY3h0X291dGVy dHVwbGU7CiAKKwkvKiBGb3IgYmF0Y2hlZCBldmFsdWF0aW9uIHVzaW5nIGJhdGNoLWF3YXJlIEVF T1BzICovCisjZGVmaW5lIEZJRUxETk9fRVhQUkNPTlRFWFRfSU5ORVJCQVRDSCA0CisJVHVwbGVC YXRjaAkgICAqaW5uZXJfYmF0Y2g7CisjZGVmaW5lIEZJRUxETk9fRVhQUkNPTlRFWFRfT1VURVJC QVRDSCA1CisJVHVwbGVCYXRjaAkgICAqb3V0ZXJfYmF0Y2g7CisjZGVmaW5lIEZJRUxETk9fRVhQ UkNPTlRFWFRfU0NBTkJBVENIIDYKKwlUdXBsZUJhdGNoCSAgICpzY2FuX2JhdGNoOworCiAJLyog TWVtb3J5IGNvbnRleHRzIGZvciBleHByZXNzaW9uIGV2YWx1YXRpb24gLS0tIHNlZSBub3RlcyBh Ym92ZSAqLwogCU1lbW9yeUNvbnRleHQgZWN4dF9wZXJfcXVlcnlfbWVtb3J5OwogCU1lbW9yeUNv bnRleHQgZWN4dF9wZXJfdHVwbGVfbWVtb3J5OwpAQCAtMjg5LDI3ICsyOTcsMjcgQEAgdHlwZWRl ZiBzdHJ1Y3QgRXhwckNvbnRleHQKIAkgKiBWYWx1ZXMgdG8gc3Vic3RpdHV0ZSBmb3IgQWdncmVm IG5vZGVzIGluIHRoZSBleHByZXNzaW9ucyBvZiBhbiBBZ2cKIAkgKiBub2RlLCBvciBmb3IgV2lu ZG93RnVuYyBub2RlcyB3aXRoaW4gYSBXaW5kb3dBZ2cgbm9kZS4KIAkgKi8KLSNkZWZpbmUgRklF TEROT19FWFBSQ09OVEVYVF9BR0dWQUxVRVMgOAorI2RlZmluZSBGSUVMRE5PX0VYUFJDT05URVhU X0FHR1ZBTFVFUyAxMQogCURhdHVtCSAgICplY3h0X2FnZ3ZhbHVlczsgLyogcHJlY29tcHV0ZWQg dmFsdWVzIGZvciBhZ2dzL3dpbmRvd2Z1bmNzICovCi0jZGVmaW5lIEZJRUxETk9fRVhQUkNPTlRF WFRfQUdHTlVMTFMgOQorI2RlZmluZSBGSUVMRE5PX0VYUFJDT05URVhUX0FHR05VTExTIDEyCiAJ Ym9vbAkgICAqZWN4dF9hZ2dudWxsczsJLyogbnVsbCBmbGFncyBmb3IgYWdncy93aW5kb3dmdW5j cyAqLwogCiAJLyogVmFsdWUgdG8gc3Vic3RpdHV0ZSBmb3IgQ2FzZVRlc3RFeHByIG5vZGVzIGlu IGV4cHJlc3Npb24gKi8KLSNkZWZpbmUgRklFTEROT19FWFBSQ09OVEVYVF9DQVNFREFUVU0gMTAK KyNkZWZpbmUgRklFTEROT19FWFBSQ09OVEVYVF9DQVNFREFUVU0gMTMKIAlEYXR1bQkJY2FzZVZh bHVlX2RhdHVtOwotI2RlZmluZSBGSUVMRE5PX0VYUFJDT05URVhUX0NBU0VOVUxMIDExCisjZGVm aW5lIEZJRUxETk9fRVhQUkNPTlRFWFRfQ0FTRU5VTEwgMTQKIAlib29sCQljYXNlVmFsdWVfaXNO dWxsOwogCiAJLyogVmFsdWUgdG8gc3Vic3RpdHV0ZSBmb3IgQ29lcmNlVG9Eb21haW5WYWx1ZSBu b2RlcyBpbiBleHByZXNzaW9uICovCi0jZGVmaW5lIEZJRUxETk9fRVhQUkNPTlRFWFRfRE9NQUlO REFUVU0gMTIKKyNkZWZpbmUgRklFTEROT19FWFBSQ09OVEVYVF9ET01BSU5EQVRVTSAxNQogCURh dHVtCQlkb21haW5WYWx1ZV9kYXR1bTsKLSNkZWZpbmUgRklFTEROT19FWFBSQ09OVEVYVF9ET01B SU5OVUxMIDEzCisjZGVmaW5lIEZJRUxETk9fRVhQUkNPTlRFWFRfRE9NQUlOTlVMTCAxNgogCWJv b2wJCWRvbWFpblZhbHVlX2lzTnVsbDsKIAogCS8qIFR1cGxlcyB0aGF0IE9MRC9ORVcgVmFyIG5v ZGVzIGluIFJFVFVSTklORyBtYXkgcmVmZXIgdG8gKi8KLSNkZWZpbmUgRklFTEROT19FWFBSQ09O VEVYVF9PTERUVVBMRSAxNAorI2RlZmluZSBGSUVMRE5PX0VYUFJDT05URVhUX09MRFRVUExFIDE3 CiAJVHVwbGVUYWJsZVNsb3QgKmVjeHRfb2xkdHVwbGU7Ci0jZGVmaW5lIEZJRUxETk9fRVhQUkNP TlRFWFRfTkVXVFVQTEUgMTUKKyNkZWZpbmUgRklFTEROT19FWFBSQ09OVEVYVF9ORVdUVVBMRSAx OAogCVR1cGxlVGFibGVTbG90ICplY3h0X25ld3R1cGxlOwogCiAJLyogTGluayB0byBjb250YWlu aW5nIEVTdGF0ZSAoTlVMTCBpZiBhIHN0YW5kYWxvbmUgRXhwckNvbnRleHQpICovCi0tIAoyLjQz LjAKCg== --0000000000002b1beb063fb44440 Content-Type: application/octet-stream; name="v1-0002-SeqScan-add-batch-driven-variants-returning-slots.patch" Content-Disposition: attachment; filename="v1-0002-SeqScan-add-batch-driven-variants-returning-slots.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mg0jlk806 RnJvbSA2YTQzYTQwMDM3ZTRiNjU2NzM5NzQzYjNjMGFiZGZiNzNhOGY5YjkyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IE1vbiwgMSBTZXAgMjAyNSAyMTo1OTo1NiArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjEg Mi84XSBTZXFTY2FuOiBhZGQgYmF0Y2gtZHJpdmVuIHZhcmlhbnRzIHJldHVybmluZyBzbG90cwoK VGVhY2ggU2VxU2NhbiB0byBkcml2ZSB0aGUgdGFibGUgQU0gdmlhIG5ldyB0aGUgYmF0Y2ggQVBJ IGFkZGVkIGluCnRoZSBwcmV2aW91cyBjb21taXQsIHdoaWxlIHN0aWxsIHJldHVybmluZyBvbmUg VHVwbGVUYWJsZVNsb3QgYXQgYQp0aW1lIHRvIGNhbGxlcnMuIFRoaXMgcmVkdWNlcyBwZXIgdHVw bGUgQU0gY3Jvc3NpbmdzIHdpdGhvdXQKY2hhbmdpbmcgdGhlIG5vZGUgaW50ZXJmYWNlIHNlZW4g YnkgcGFyZW50cy4KCkFkZCBUdXBsZUJhdGNoIGFuZCBzdXBwb3J0aW5nIGNvZGUgaW4gZXhlY0Jh dGNoLmMvaCB0byBob2xkIGV4ZWN1dG9yCnNpZGUgYmF0Y2hpbmcgc3RhdGUuIFBsYW5TdGF0ZSBn YWlucyBwc19CYXRjaCB0byBjYXJyeSB0aGUgYWN0aXZlClR1cGxlQmF0Y2ggd2hlbiBhIG5vZGUg c3VwcG9ydHMgYmF0Y2hpbmcuCgpXaXJlIHVwIHJ1bnRpbWUgc2VsZWN0aW9uIGluIEV4ZWNJbml0 U2VxU2NhbiB1c2luZwpTY2FuQ2FuVXNlQmF0Y2hpbmcoKS4gV2hlbiBleGVjdXRvcl9iYXRjaGlu ZyBpcyBlbmFibGVkLCBFUFEgaXMKaW5hY3RpdmUsIHRoZSBzY2FuIGlzIG5vdCBiYWNrd2FyZCwg YW5kIHRoZSByZWxhdGlvbiBzdXBwb3J0cwpiYXRjaGluZywgcHMuRXhlY1Byb2NOb2RlIGlzIHNl dCB0byBhIGJhdGNoLWRyaXZlbiB2YXJpYW50LiBPdGhlcndpc2UKdGhlIG5vbi1iYXRjaCBwYXRo IGlzIHVzZWQuCgpQbGFuIHNoYXBlIGFuZCBFWFBMQUlOIG91dHB1dCByZW1haW4gdW5jaGFuZ2Vk OyBvbmx5IHRoZSBpbnRlcm5hbAp0dXBsZSBmbG93IGRpZmZlcnMgd2hlbiBiYXRjaGluZyBpcyBl bmFibGVkIGFuZCBhbGxvd2VkLgoKTm90ZXMgLyBjdXJyZW50IGxpbWl0czoKCi0gQmF0Y2hpbmcg dXNlcyBFWEVDX0JBVENIX1JPV1MgKGN1cnJlbnRseSA2NCkgYXMgdGhlIHRhcmdldCBjYXBhY2l0 eS4KLSBXaXRoIHRoZSBjdXJyZW50IGhlYXBhbSwgYmF0Y2hlcyBhcmUgY29tcG9zZWQgZnJvbSBh IHNpbmdsZSBwYWdlLCBzbwogIHRoZSBiYXRjaCBtYXkgbm90IGFsd2F5cyBiZSBmdWxsLiBGdXR1 cmUgd29yayBtYXkgbGV0IFNlcVNjYW4gYW5kL29yCiAgQU1zIHRvcCB1cCBiYXRjaGVzIGFjcm9z cyBwYWdlcyB3aGVuIHNhZmUgdG8gZG8gc28uCi0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAv aGVhcGFtLmMgICAgICAgICAgfCAgMjkgKysrKwogc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVh cGFtX2hhbmRsZXIuYyAgfCAgMTUgKysKIHNyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFt LmMgICAgICAgIHwgIDExICsrCiBzcmMvYmFja2VuZC9leGVjdXRvci9NYWtlZmlsZSAgICAgICAg ICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjQmF0Y2guYyAgICAgICAgICB8 IDExNyArKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1NjYW4uYyAgICAg ICAgICAgfCAgMzEgKysrKwogc3JjL2JhY2tlbmQvZXhlY3V0b3IvbWVzb24uYnVpbGQgICAgICAg ICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVNlcXNjYW4uYyAgICAgICAgfCAx NzYgKysrKysrKysrKysrKysrKysrKysrLQogc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9nbG9iYWxz LmMgICAgICAgICAgfCAgIDMgKwogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVy cy5kYXQgfCAgIDcgKwogc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oICAgICAgICAgICAgICAg fCAgIDEgKwogc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaCAgICAgICAgICAgICAgfCAgMjcg KysrKwogc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY0JhdGNoLmggICAgICAgICAgfCAxMDIgKysr KysrKysrKysrKwogc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY1NjYW4uaCAgICAgICAgICAgfCAg NTQgKysrKysrKwogc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaCAgICAgICAgICAgfCAg IDQgKwogc3JjL2luY2x1ZGUvbWlzY2FkbWluLmggICAgICAgICAgICAgICAgICAgfCAgIDEgKwog c3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggICAgICAgICAgICAgfCAgIDggKwogMTcgZmls ZXMgY2hhbmdlZCwgNTg3IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjQmF0Y2guYwogY3JlYXRlIG1vZGUgMTAw NjQ0IHNyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNCYXRjaC5oCgpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFw YW0uYwppbmRleCBmNjJmN2VkYmY1ZS4uOWZkNzk0ODQ4MmQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hl YXBhbS5jCkBAIC0xNTcwLDYgKzE1NzAsMzUgQEAgaGVhcF9iZWdpbl9iYXRjaChUYWJsZVNjYW5E ZXNjIHNzY2FuLCBpbnQgbWF4aXRlbXMpCiAJcmV0dXJuIGhiOwogfQogCisvKgorICogaGVhcF9z Y2FuX21hdGVyaWFsaXplX2FsbAorICoKKyAqIEJpbmQgYWxsIHR1cGxlcyBvZiB0aGUgY3VycmVu dCBiYXRjaCBpbnRvICdzbG90cycuIFdlIGJpbmQgdGhlCisgKiBIZWFwVHVwbGVEYXRhIGhlYWRl ciB0aGF0IHBvaW50cyBpbnRvIHRoZSBwaW5uZWQgcGFnZS4gTm8gcGVyLXJvdyBjb3B5LgorICov Cit2b2lkCitoZWFwX21hdGVyaWFsaXplX2JhdGNoX2FsbCh2b2lkICphbV9iYXRjaCwgVHVwbGVU YWJsZVNsb3QgKipzbG90cywgaW50IG4pCit7CisJSGVhcEJhdGNoICpoYiA9IChIZWFwQmF0Y2gg KikgYW1fYmF0Y2g7CisKKwlBc3NlcnQobiA8PSBoYi0+bml0ZW1zKTsKKworCWZvciAoaW50IGkg PSAwOyBpIDwgbjsgaSsrKQorCXsKKwkJSGVhcFR1cGxlRGF0YSAqdHVwbGUgPSAmaGItPnR1cGRh dGFbaV07CisJCUhlYXBUdXBsZVRhYmxlU2xvdCAqc2xvdCA9IChIZWFwVHVwbGVUYWJsZVNsb3Qg Kikgc2xvdHNbaV07CisKKwkJLyogSW5saW5lIG9mIEV4ZWNTdG9yZUhlYXBUdXBsZSh0dXBsZSwg c2xvdCwgZmFsc2UpICovCisJCXNsb3QtPnR1cGxlID0gdHVwbGU7CisJCXNsb3QtPm9mZiA9IDA7 CisJCXNsb3QtPmJhc2UudHRzX252YWxpZCA9IDA7CisJCXNsb3QtPmJhc2UudHRzX2ZsYWdzICY9 IH4oVFRTX0ZMQUdfRU1QVFkgfCBUVFNfRkxBR19TSE9VTERGUkVFKTsKKwkJc2xvdC0+YmFzZS50 dHNfdGlkID0gdHVwbGUtPnRfc2VsZjsKKwkJc2xvdC0+YmFzZS50dHNfdGFibGVPaWQgPSB0dXBs ZS0+dF90YWJsZU9pZDsKKwkJc2xvdC0+YmFzZS50dHNfZmxhZ3MgJj0gfihUVFNfRkxBR19TSE9V TERGUkVFIHwgVFRTX0ZMQUdfRU1QVFkpOworCX0KK30KKwogLyoKICAqIGhlYXBfc2Nhbl9lbmRf YmF0Y2gKICAqCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFu ZGxlci5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYwppbmRleCBl YzRlZWNjZjE5Yy4uOGU4OGNjOWU4ZjEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9o ZWFwL2hlYXBhbV9oYW5kbGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFt X2hhbmRsZXIuYwpAQCAtNzIsNiArNzIsMjAgQEAgaGVhcGFtX3Nsb3RfY2FsbGJhY2tzKFJlbGF0 aW9uIHJlbGF0aW9uKQogCXJldHVybiAmVFRTT3BzQnVmZmVySGVhcFR1cGxlOwogfQogCisvKiAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAqIFR1cGxlQmF0Y2ggcmVsYXRlZCBjYWxsYmFja3MgZm9yIGhlYXAg QU0KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKK3N0YXRpYyBjb25zdCBUdXBsZUJhdGNoT3Bz IFR1cGxlQmF0Y2hIZWFwT3BzID0geworCS5tYXRlcmlhbGl6ZV9hbGwgPSBoZWFwX21hdGVyaWFs aXplX2JhdGNoX2FsbAorfTsKKworc3RhdGljIGNvbnN0IFR1cGxlQmF0Y2hPcHMgKgoraGVhcGFt X2JhdGNoX2NhbGxiYWNrcyhSZWxhdGlvbiByZWxhdGlvbikKK3sKKwlyZXR1cm4gJlR1cGxlQmF0 Y2hIZWFwT3BzOworfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIEluZGV4IFNjYW4gQ2FsbGJh Y2tzIGZvciBoZWFwIEFNCkBAIC0yNjE3LDYgKzI2MzEsNyBAQCBzdGF0aWMgY29uc3QgVGFibGVB bVJvdXRpbmUgaGVhcGFtX21ldGhvZHMgPSB7CiAJLnR5cGUgPSBUX1RhYmxlQW1Sb3V0aW5lLAog CiAJLnNsb3RfY2FsbGJhY2tzID0gaGVhcGFtX3Nsb3RfY2FsbGJhY2tzLAorCS5iYXRjaF9jYWxs YmFja3MgPSBoZWFwYW1fYmF0Y2hfY2FsbGJhY2tzLAogCiAJLnNjYW5fYmVnaW4gPSBoZWFwX2Jl Z2luc2NhbiwKIAkuc2Nhbl9lbmQgPSBoZWFwX2VuZHNjYW4sCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3Rh YmxlYW0uYwppbmRleCA1ZTQxNDA0OTM3ZS4uNWE4ZWJiOGI5N2MgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3Rh YmxlL3RhYmxlYW0uYwpAQCAtMTAzLDYgKzEwMywxNyBAQCB0YWJsZV9zbG90X2NyZWF0ZShSZWxh dGlvbiByZWxhdGlvbiwgTGlzdCAqKnJlZ2xpc3QpCiAJcmV0dXJuIHNsb3Q7CiB9CiAKKy8qIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAqIFR1cGxlQmF0Y2ggc3VwcG9ydCByb3V0aW5lcworICogLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorICovCitjb25zdCBUdXBsZUJhdGNoT3BzICoKK3RhYmxlX2JhdGNo X2NhbGxiYWNrcyhSZWxhdGlvbiByZWxhdGlvbikKK3sKKwlpZiAocmVsYXRpb24tPnJkX3RhYmxl YW0pCisJCXJldHVybiByZWxhdGlvbi0+cmRfdGFibGVhbS0+YmF0Y2hfY2FsbGJhY2tzKHJlbGF0 aW9uKTsKKwllbG9nKEVSUk9SLCAicmVsYXRpb24gZG9lcyBub3Qgc3VwcG9ydCBUdXBsZUJhdGNo IG9wZXJhdGlvbnMiKTsKK30KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogVGFibGUgc2Nh biBmdW5jdGlvbnMuCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9NYWtlZmlsZSBi L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL01ha2VmaWxlCmluZGV4IDExMTE4ZDBjZTAyLi4zZTcyZjNm ZTAzYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvTWFrZWZpbGUKKysrIGIvc3Jj L2JhY2tlbmQvZXhlY3V0b3IvTWFrZWZpbGUKQEAgLTE1LDYgKzE1LDcgQEAgaW5jbHVkZSAkKHRv cF9idWlsZGRpcikvc3JjL01ha2VmaWxlLmdsb2JhbAogT0JKUyA9IFwKIAlleGVjQW1pLm8gXAog CWV4ZWNBc3luYy5vIFwKKwlleGVjQmF0Y2gubyBcCiAJZXhlY0N1cnJlbnQubyBcCiAJZXhlY0V4 cHIubyBcCiAJZXhlY0V4cHJJbnRlcnAubyBcCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVj dXRvci9leGVjQmF0Y2guYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNCYXRjaC5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wMDdhZTUzNTY4NwotLS0gL2Rldi9u dWxsCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNCYXRjaC5jCkBAIC0wLDAgKzEsMTE3 IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBleGVjQmF0Y2guYworICoJCUhlbHBlcnMg Zm9yIFR1cGxlQmF0Y2gKKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyNSwg UG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdo dCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgor ICogSURFTlRJRklDQVRJT04KKyAqCSAgc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0JhdGNoLmMK KyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorI2luY2x1 ZGUgImV4ZWN1dG9yL2V4ZWNCYXRjaC5oIgorCisvKgorICogVHVwbGVCYXRjaENyZWF0ZQorICoJ CUFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGEgbmV3IFR1cGxlQmF0Y2ggZW52ZWxvcGUuCisgKi8K K1R1cGxlQmF0Y2ggKgorVHVwbGVCYXRjaENyZWF0ZShUdXBsZURlc2Mgc2NhbmRlc2MsIGludCBj YXBhY2l0eSkKK3sKKwlUdXBsZUJhdGNoICAqYjsKKwlUdXBsZVRhYmxlU2xvdCAqKmluc2xvdHMs CisJCQkJICAgKipvdXRzbG90czsKKworCWluc2xvdHMgPSBwYWxsb2Moc2l6ZW9mKFR1cGxlVGFi bGVTbG90ICopICogY2FwYWNpdHkpOworCW91dHNsb3RzID0gcGFsbG9jKHNpemVvZihUdXBsZVRh YmxlU2xvdCAqKSAqIGNhcGFjaXR5KTsKKwlmb3IgKGludCBpID0gMDsgaSA8IGNhcGFjaXR5OyBp KyspCisJCWluc2xvdHNbaV0gPSBNYWtlU2luZ2xlVHVwbGVUYWJsZVNsb3Qoc2NhbmRlc2MsICZU VFNPcHNIZWFwVHVwbGUpOworCisJYiA9IChUdXBsZUJhdGNoICopIHBhbGxvYyhzaXplb2YoVHVw bGVCYXRjaCkpOworCisJLyogSW5pdGlhbCBzdGF0ZTogZW1wdHkgZW52ZWxvcGUgKi8KKwliLT5h bV9wYXlsb2FkID0gTlVMTDsKKwliLT5udHVwbGVzID0gMDsKKwliLT5pbnNsb3RzID0gaW5zbG90 czsKKwliLT5vdXRzbG90cyA9IG91dHNsb3RzOworCWItPmFjdGl2ZXNsb3RzID0gTlVMTDsKKwli LT5vdXRzbG90cyA9IG91dHNsb3RzOworCWItPm1heHNsb3RzID0gY2FwYWNpdHk7CisKKwliLT5u dmFsaWQgPSAwOworCWItPm5leHQgPSAwOworCisJcmV0dXJuIGI7Cit9CisKKy8qCisgKiBUdXBs ZUJhdGNoUmVzZXQKKyAqCQlSZXNldCBhbiBleGlzdGluZyBUdXBsZUJhdGNoIGVudmVsb3BlIHRv IGVtcHR5LgorICovCit2b2lkCitUdXBsZUJhdGNoUmVzZXQoVHVwbGVCYXRjaCAqYiwgYm9vbCBk cm9wX3Nsb3RzKQoreworCWlmIChiID09IE5VTEwpCisJCXJldHVybjsKKworCWZvciAoaW50IGkg PSAwOyBpIDwgYi0+bWF4c2xvdHM7IGkrKykKKwl7CisJCUV4ZWNDbGVhclR1cGxlKGItPmluc2xv dHNbaV0pOworCQlpZiAoZHJvcF9zbG90cykKKwkJCUV4ZWNEcm9wU2luZ2xlVHVwbGVUYWJsZVNs b3QoYi0+aW5zbG90c1tpXSk7CisJfQorCisJaWYgKGRyb3Bfc2xvdHMpCisJeworCQlwZnJlZShi LT5pbnNsb3RzKTsKKwkJcGZyZWUoYi0+b3V0c2xvdHMpOworCQliLT5pbnNsb3RzID0gYi0+b3V0 c2xvdHMgPSBOVUxMOworCX0KKworCWItPm50dXBsZXMgPSAwOworCWItPm52YWxpZCA9IDA7CisJ Yi0+bmV4dCA9IDA7CisJYi0+YWN0aXZlc2xvdHMgPSBOVUxMOworfQorCit2b2lkCitUdXBsZUJh dGNoVXNlSW5wdXQoVHVwbGVCYXRjaCAqYiwgaW50IG52YWxpZCkKK3sKKwliLT5tYXRlcmlhbGl6 ZWQgPSB0cnVlOworCWItPmFjdGl2ZXNsb3RzID0gYi0+aW5zbG90czsKKwliLT5udmFsaWQgPSBu dmFsaWQ7CisJYi0+bmV4dCA9IDA7Cit9CisKK3ZvaWQKK1R1cGxlQmF0Y2hVc2VPdXRwdXQoVHVw bGVCYXRjaCAqYiwgaW50IG52YWxpZCkKK3sKKwliLT5tYXRlcmlhbGl6ZWQgPSB0cnVlOworCWIt PmFjdGl2ZXNsb3RzID0gYi0+b3V0c2xvdHM7CisJYi0+bnZhbGlkID0gbnZhbGlkOworCWItPm5l eHQgPSAwOworfQorCitib29sCitUdXBsZUJhdGNoSXNWYWxpZChUdXBsZUJhdGNoICpiKQorewor CXJldHVybgliICE9IE5VTEwgJiYKKwkJCWItPm1heHNsb3RzID4gMCAmJgorCQkJYi0+aW5zbG90 cyAhPSBOVUxMICYmCisJCQliLT5vdXRzbG90cyAhPSBOVUxMOworfQorCit2b2lkCitUdXBsZUJh dGNoUmV3aW5kKFR1cGxlQmF0Y2ggKmIpCit7CisJYi0+bmV4dCA9IDA7Cit9CisKK2ludAorVHVw bGVCYXRjaEdldE51bVZhbGlkKFR1cGxlQmF0Y2ggKmIpCit7CisJcmV0dXJuIGItPm52YWxpZDsK K30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNTY2FuLmMgYi9zcmMvYmFj a2VuZC9leGVjdXRvci9leGVjU2Nhbi5jCmluZGV4IDkwNzI2OTQ5YTg3Li5mMjRjNWQ3M2FlMSAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1NjYW4uYworKysgYi9zcmMvYmFj a2VuZC9leGVjdXRvci9leGVjU2Nhbi5jCkBAIC0xOCw2ICsxOCw3IEBACiAgKi8KICNpbmNsdWRl ICJwb3N0Z3Jlcy5oIgogCisjaW5jbHVkZSAiYWNjZXNzL3RhYmxlYW0uaCIKICNpbmNsdWRlICJl eGVjdXRvci9leGVjdXRvci5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWNTY2FuLmgiCiAjaW5j bHVkZSAibWlzY2FkbWluLmgiCkBAIC0xNTQsMyArMTU1LDMzIEBAIEV4ZWNTY2FuUmVTY2FuKFNj YW5TdGF0ZSAqbm9kZSkKIAkJfQogCX0KIH0KKworYm9vbAorU2NhbkNhblVzZUJhdGNoaW5nKFNj YW5TdGF0ZSAqc2NhbnN0YXRlLCBpbnQgZWZsYWdzKQoreworCVJlbGF0aW9uCXJlbGF0aW9uID0g c2NhbnN0YXRlLT5zc19jdXJyZW50UmVsYXRpb247CisKKwlyZXR1cm4JZXhlY3V0b3JfYmF0Y2hp bmcgJiYKKwkJCShzY2Fuc3RhdGUtPnBzLnN0YXRlLT5lc19lcHFfYWN0aXZlID09IE5VTEwpICYm CisJCQkhKGVmbGFncyAmIEVYRUNfRkxBR19CQUNLV0FSRCkgJiYKKwkJCXJlbGF0aW9uICYmIHRh YmxlX3N1cHBvcnRzX2JhdGNoaW5nKHJlbGF0aW9uKTsKK30KKwordm9pZAorU2NhblJlc2V0QmF0 Y2hpbmcoU2NhblN0YXRlICpzY2Fuc3RhdGUsIGJvb2wgZHJvcCkKK3sKKwlUdXBsZUJhdGNoICpi ID0gc2NhbnN0YXRlLT5wcy5wc19CYXRjaDsKKworCWlmIChiKQorCXsKKwkJVHVwbGVCYXRjaFJl c2V0KGIsIGRyb3ApOworCQlpZiAoYi0+YW1fcGF5bG9hZCkKKwkJeworCQkJdGFibGVfc2Nhbl9l bmRfYmF0Y2goc2NhbnN0YXRlLT5zc19jdXJyZW50U2NhbkRlc2MsCisJCQkJCQkJCSBiLT5hbV9w YXlsb2FkKTsKKwkJCWItPmFtX3BheWxvYWQgPSBOVUxMOworCQl9CisJCWlmIChkcm9wKQorCQkJ cGZyZWUoYik7CisJfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvbWVzb24u YnVpbGQgYi9zcmMvYmFja2VuZC9leGVjdXRvci9tZXNvbi5idWlsZAppbmRleCAyY2VhNDFmODc3 MS4uNDBmZmMyOGYzY2IgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL21lc29uLmJ1 aWxkCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL21lc29uLmJ1aWxkCkBAIC0zLDYgKzMsNyBA QAogYmFja2VuZF9zb3VyY2VzICs9IGZpbGVzKAogICAnZXhlY0FtaS5jJywKICAgJ2V4ZWNBc3lu Yy5jJywKKyAgJ2V4ZWNCYXRjaC5jJywKICAgJ2V4ZWNDdXJyZW50LmMnLAogICAnZXhlY0V4cHIu YycsCiAgICdleGVjRXhwckludGVycC5jJywKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL25vZGVTZXFzY2FuLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlU2Vxc2Nhbi5jCmlu ZGV4IDk0MDQ3ZDI5NDMwLi4yNTUyZDQyMGYxYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhl Y3V0b3Ivbm9kZVNlcXNjYW4uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlU2Vxc2Nh bi5jCkBAIC0yMDMsNiArMjAzLDE3MSBAQCBFeGVjU2VxU2NhbkVQUShQbGFuU3RhdGUgKnBzdGF0 ZSkKIAkJCQkJKEV4ZWNTY2FuUmVjaGVja010ZCkgU2VxUmVjaGVjayk7CiB9CiAKKy8qIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAqCQkJCQkJQmF0Y2ggU3VwcG9ydAorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCitzdGF0aWMgaW5saW5l IGJvb2wKK1NlcU5leHRCYXRjaChTZXFTY2FuU3RhdGUgKm5vZGUpCit7CisJVGFibGVTY2FuRGVz YyBzY2FuZGVzYzsKKwlFU3RhdGUJICAgKmVzdGF0ZTsKKwlTY2FuRGlyZWN0aW9uIGRpcmVjdGlv bjsKKworCUFzc2VydChub2RlLT5zcy5wcy5wc19CYXRjaCAhPSBOVUxMKTsKKworCS8qCisJICog Z2V0IGluZm9ybWF0aW9uIGZyb20gdGhlIGVzdGF0ZSBhbmQgc2NhbiBzdGF0ZQorCSAqLworCXNj YW5kZXNjID0gbm9kZS0+c3Muc3NfY3VycmVudFNjYW5EZXNjOworCWVzdGF0ZSA9IG5vZGUtPnNz LnBzLnN0YXRlOworCWRpcmVjdGlvbiA9IGVzdGF0ZS0+ZXNfZGlyZWN0aW9uOworCUFzc2VydChk aXJlY3Rpb24gPT0gRm9yd2FyZFNjYW5EaXJlY3Rpb24pOworCisJaWYgKHNjYW5kZXNjID09IE5V TEwpCisJeworCQkvKgorCQkgKiBXZSByZWFjaCBoZXJlIGlmIHRoZSBzY2FuIGlzIG5vdCBwYXJh bGxlbCwgb3IgaWYgd2UncmUgc2VyaWFsbHkKKwkJICogZXhlY3V0aW5nIGEgc2NhbiB0aGF0IHdh cyBwbGFubmVkIHRvIGJlIHBhcmFsbGVsLgorCQkgKi8KKwkJc2NhbmRlc2MgPSB0YWJsZV9iZWdp bnNjYW4obm9kZS0+c3Muc3NfY3VycmVudFJlbGF0aW9uLAorCQkJCQkJCQkgICBlc3RhdGUtPmVz X3NuYXBzaG90LAorCQkJCQkJCQkgICAwLCBOVUxMKTsKKwkJbm9kZS0+c3Muc3NfY3VycmVudFNj YW5EZXNjID0gc2NhbmRlc2M7CisJfQorCisJLyogTGF6aWx5IGNyZWF0ZSB0aGUgQU0gYmF0Y2gg cGF5bG9hZC4gKi8KKwlpZiAobm9kZS0+c3MucHMucHNfQmF0Y2gtPmFtX3BheWxvYWQgPT0gTlVM TCkKKwl7CisJCWNvbnN0IFRhYmxlQW1Sb3V0aW5lICp0YW0gUEdfVVNFRF9GT1JfQVNTRVJUU19P TkxZID0gc2NhbmRlc2MtPnJzX3JkLT5yZF90YWJsZWFtOworCisJCUFzc2VydCh0YW0gJiYgdGFt LT5zY2FuX2JlZ2luX2JhdGNoKTsKKwkJbm9kZS0+c3MucHMucHNfQmF0Y2gtPmFtX3BheWxvYWQg PQorCQkJdGFibGVfc2Nhbl9iZWdpbl9iYXRjaChzY2FuZGVzYywgbm9kZS0+c3MucHMucHNfQmF0 Y2gtPm1heHNsb3RzKTsKKwkJbm9kZS0+c3MucHMucHNfQmF0Y2gtPm9wcyA9IHRhYmxlX2JhdGNo X2NhbGxiYWNrcyhub2RlLT5zcy5zc19jdXJyZW50UmVsYXRpb24pOworCX0KKworCW5vZGUtPnNz LnBzLnBzX0JhdGNoLT5udHVwbGVzID0KKwkJdGFibGVfc2Nhbl9nZXRuZXh0YmF0Y2goc2NhbmRl c2MsIG5vZGUtPnNzLnBzLnBzX0JhdGNoLT5hbV9wYXlsb2FkLCBkaXJlY3Rpb24pOworCW5vZGUt PnNzLnBzLnBzX0JhdGNoLT5udmFsaWQgPSBub2RlLT5zcy5wcy5wc19CYXRjaC0+bnR1cGxlczsK Kwlub2RlLT5zcy5wcy5wc19CYXRjaC0+bWF0ZXJpYWxpemVkID0gZmFsc2U7CisKKwlyZXR1cm4g bm9kZS0+c3MucHMucHNfQmF0Y2gtPm50dXBsZXMgPiAwOworfQorCitzdGF0aWMgaW5saW5lIGJv b2wKK1NlcU5leHRCYXRjaE1hdGVyaWFsaXplKFNlcVNjYW5TdGF0ZSAqbm9kZSkKK3sKKwlpZiAo U2VxTmV4dEJhdGNoKG5vZGUpKQorCXsKKwkJVHVwbGVCYXRjaE1hdGVyaWFsaXplQWxsKG5vZGUt PnNzLnBzLnBzX0JhdGNoKTsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0dXJuIGZhbHNlOwor fQorCitzdGF0aWMgVHVwbGVUYWJsZVNsb3QgKgorRXhlY1NlcVNjYW5CYXRjaFNsb3QoUGxhblN0 YXRlICpwc3RhdGUpCit7CisJU2VxU2NhblN0YXRlICpub2RlID0gY2FzdE5vZGUoU2VxU2NhblN0 YXRlLCBwc3RhdGUpOworCisJQXNzZXJ0KHBzdGF0ZS0+c3RhdGUtPmVzX2VwcV9hY3RpdmUgPT0g TlVMTCk7CisJQXNzZXJ0KHBzdGF0ZS0+cXVhbCA9PSBOVUxMKTsKKwlBc3NlcnQocHN0YXRlLT5w c19Qcm9qSW5mbyA9PSBOVUxMKTsKKworCXJldHVybiBFeGVjU2NhbkV4dGVuZGVkQmF0Y2hTbG90 KCZub2RlLT5zcywKKwkJCQkJCQkJCSAoRXhlY1NjYW5BY2Nlc3NCYXRjaE10ZCkgU2VxTmV4dEJh dGNoTWF0ZXJpYWxpemUsCisJCQkJCQkJCQkgTlVMTCwgTlVMTCk7Cit9CisKK3N0YXRpYyBUdXBs ZVRhYmxlU2xvdCAqCitFeGVjU2VxU2NhbkJhdGNoU2xvdFdpdGhRdWFsKFBsYW5TdGF0ZSAqcHN0 YXRlKQoreworCVNlcVNjYW5TdGF0ZSAqbm9kZSA9IGNhc3ROb2RlKFNlcVNjYW5TdGF0ZSwgcHN0 YXRlKTsKKworCS8qCisJICogVXNlIHBnX2Fzc3VtZSgpIGZvciAhPSBOVUxMIHRlc3RzIHRvIG1h a2UgdGhlIGNvbXBpbGVyIHJlYWxpemUgbm8KKwkgKiBydW50aW1lIGNoZWNrIGZvciB0aGUgZmll bGQgaXMgbmVlZGVkIGluIEV4ZWNTY2FuRXh0ZW5kZWQoKS4KKwkgKi8KKwlBc3NlcnQocHN0YXRl LT5zdGF0ZS0+ZXNfZXBxX2FjdGl2ZSA9PSBOVUxMKTsKKwlwZ19hc3N1bWUocHN0YXRlLT5xdWFs ICE9IE5VTEwpOworCUFzc2VydChwc3RhdGUtPnBzX1Byb2pJbmZvID09IE5VTEwpOworCisJcmV0 dXJuIEV4ZWNTY2FuRXh0ZW5kZWRCYXRjaFNsb3QoJm5vZGUtPnNzLAorCQkJCQkJCQkJIChFeGVj U2NhbkFjY2Vzc0JhdGNoTXRkKSBTZXFOZXh0QmF0Y2hNYXRlcmlhbGl6ZSwKKwkJCQkJCQkJCSBw c3RhdGUtPnF1YWwsIE5VTEwpOworfQorCisvKgorICogVmFyaWFudCBvZiBFeGVjU2VxU2Nhbigp IGJ1dCB3aGVuIHByb2plY3Rpb24gaXMgcmVxdWlyZWQuCisgKi8KK3N0YXRpYyBUdXBsZVRhYmxl U2xvdCAqCitFeGVjU2VxU2NhbkJhdGNoU2xvdFdpdGhQcm9qZWN0KFBsYW5TdGF0ZSAqcHN0YXRl KQoreworCVNlcVNjYW5TdGF0ZSAqbm9kZSA9IGNhc3ROb2RlKFNlcVNjYW5TdGF0ZSwgcHN0YXRl KTsKKworCUFzc2VydChwc3RhdGUtPnN0YXRlLT5lc19lcHFfYWN0aXZlID09IE5VTEwpOworCUFz c2VydChwc3RhdGUtPnF1YWwgPT0gTlVMTCk7CisJcGdfYXNzdW1lKHBzdGF0ZS0+cHNfUHJvaklu Zm8gIT0gTlVMTCk7CisKKwlyZXR1cm4gRXhlY1NjYW5FeHRlbmRlZEJhdGNoU2xvdCgmbm9kZS0+ c3MsCisJCQkJCQkJCQkgKEV4ZWNTY2FuQWNjZXNzQmF0Y2hNdGQpIFNlcU5leHRCYXRjaE1hdGVy aWFsaXplLAorCQkJCQkJCQkJIE5VTEwsIHBzdGF0ZS0+cHNfUHJvakluZm8pOworfQorCisvKgor ICogVmFyaWFudCBvZiBFeGVjU2VxU2NhbigpIGJ1dCB3aGVuIHF1YWwgZXZhbHVhdGlvbiBhbmQg cHJvamVjdGlvbiBhcmUKKyAqIHJlcXVpcmVkLgorICovCitzdGF0aWMgVHVwbGVUYWJsZVNsb3Qg KgorRXhlY1NlcVNjYW5CYXRjaFNsb3RXaXRoUXVhbFByb2plY3QoUGxhblN0YXRlICpwc3RhdGUp Cit7CisJU2VxU2NhblN0YXRlICpub2RlID0gY2FzdE5vZGUoU2VxU2NhblN0YXRlLCBwc3RhdGUp OworCisJQXNzZXJ0KHBzdGF0ZS0+c3RhdGUtPmVzX2VwcV9hY3RpdmUgPT0gTlVMTCk7CisJcGdf YXNzdW1lKHBzdGF0ZS0+cXVhbCAhPSBOVUxMKTsKKwlwZ19hc3N1bWUocHN0YXRlLT5wc19Qcm9q SW5mbyAhPSBOVUxMKTsKKworCXJldHVybiBFeGVjU2NhbkV4dGVuZGVkQmF0Y2hTbG90KCZub2Rl LT5zcywKKwkJCQkJCQkJCSAoRXhlY1NjYW5BY2Nlc3NCYXRjaE10ZCkgU2VxTmV4dEJhdGNoTWF0 ZXJpYWxpemUsCisJCQkJCQkJCQkgcHN0YXRlLT5xdWFsLCBwc3RhdGUtPnBzX1Byb2pJbmZvKTsK K30KKworLyogQmF0Y2ggU2VxU2NhbiBlbmFibGVtZW50IGFuZCBkaXNwYXRjaCAqLworc3RhdGlj IHZvaWQKK1NlcVNjYW5Jbml0QmF0Y2hpbmcoU2VxU2NhblN0YXRlICpzY2Fuc3RhdGUsIGludCBl ZmxhZ3MpCit7CisJY29uc3QgaW50IGNhcCA9IEVYRUNfQkFUQ0hfUk9XUzsKKwlUdXBsZURlc2MJ c2NhbmRlc2MgPSBSZWxhdGlvbkdldERlc2NyKHNjYW5zdGF0ZS0+c3Muc3NfY3VycmVudFJlbGF0 aW9uKTsKKworCXNjYW5zdGF0ZS0+c3MucHMucHNfQmF0Y2ggPSBUdXBsZUJhdGNoQ3JlYXRlKHNj YW5kZXNjLCBjYXApOworCisJLyogQ2hvb3NlIGJhdGNoIHZhcmlhbnQgdG8gcHJlc2VydmUgeW91 ciBzcGVjaWFsaXphdGlvbiBtYXRyaXggKi8KKwlpZiAoc2NhbnN0YXRlLT5zcy5wcy5xdWFsID09 IE5VTEwpCisJeworCQlpZiAoc2NhbnN0YXRlLT5zcy5wcy5wc19Qcm9qSW5mbyA9PSBOVUxMKQor CQl7CisJCQlzY2Fuc3RhdGUtPnNzLnBzLkV4ZWNQcm9jTm9kZSA9IEV4ZWNTZXFTY2FuQmF0Y2hT bG90OworCQl9CisJCWVsc2UKKwkJeworCQkJc2NhbnN0YXRlLT5zcy5wcy5FeGVjUHJvY05vZGUg PSBFeGVjU2VxU2NhbkJhdGNoU2xvdFdpdGhQcm9qZWN0OworCQl9CisJfQorCWVsc2UKKwl7CisJ CWlmIChzY2Fuc3RhdGUtPnNzLnBzLnBzX1Byb2pJbmZvID09IE5VTEwpCisJCXsKKwkJCXNjYW5z dGF0ZS0+c3MucHMuRXhlY1Byb2NOb2RlID0gRXhlY1NlcVNjYW5CYXRjaFNsb3RXaXRoUXVhbDsK KwkJfQorCQllbHNlCisJCXsKKwkJCXNjYW5zdGF0ZS0+c3MucHMuRXhlY1Byb2NOb2RlID0gRXhl Y1NlcVNjYW5CYXRjaFNsb3RXaXRoUXVhbFByb2plY3Q7CisJCX0KKwl9Cit9CisKIC8qIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KICAqCQlFeGVjSW5pdFNlcVNjYW4KICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTIxMSw2ICszNzYsNyBAQCBT ZXFTY2FuU3RhdGUgKgogRXhlY0luaXRTZXFTY2FuKFNlcVNjYW4gKm5vZGUsIEVTdGF0ZSAqZXN0 YXRlLCBpbnQgZWZsYWdzKQogewogCVNlcVNjYW5TdGF0ZSAqc2NhbnN0YXRlOworCWJvb2wJdXNl X2JhdGNoaW5nOwogCiAJLyoKIAkgKiBPbmNlIHVwb24gYSB0aW1lIGl0IHdhcyBwb3NzaWJsZSB0 byBoYXZlIGFuIG91dGVyUGxhbiBvZiBhIFNlcVNjYW4sIGJ1dApAQCAtMjQxLDkgKzQwNywxMiBA QCBFeGVjSW5pdFNlcVNjYW4oU2VxU2NhbiAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxh Z3MpCiAJCQkJCQkJIG5vZGUtPnNjYW4uc2NhbnJlbGlkLAogCQkJCQkJCSBlZmxhZ3MpOwogCisJ dXNlX2JhdGNoaW5nID0gU2NhbkNhblVzZUJhdGNoaW5nKCZzY2Fuc3RhdGUtPnNzLCBlZmxhZ3Mp OworCiAJLyogYW5kIGNyZWF0ZSBzbG90IHdpdGggdGhlIGFwcHJvcHJpYXRlIHJvd3R5cGUgKi8K IAlFeGVjSW5pdFNjYW5UdXBsZVNsb3QoZXN0YXRlLCAmc2NhbnN0YXRlLT5zcywKIAkJCQkJCSAg UmVsYXRpb25HZXREZXNjcihzY2Fuc3RhdGUtPnNzLnNzX2N1cnJlbnRSZWxhdGlvbiksCisJCQkJ CQkgIHVzZV9iYXRjaGluZyA/ICZUVFNPcHNIZWFwVHVwbGUgOgogCQkJCQkJICB0YWJsZV9zbG90 X2NhbGxiYWNrcyhzY2Fuc3RhdGUtPnNzLnNzX2N1cnJlbnRSZWxhdGlvbikpOwogCiAJLyoKQEAg LTI4MCw2ICs0NDksOSBAQCBFeGVjSW5pdFNlcVNjYW4oU2VxU2NhbiAqbm9kZSwgRVN0YXRlICpl c3RhdGUsIGludCBlZmxhZ3MpCiAJCQlzY2Fuc3RhdGUtPnNzLnBzLkV4ZWNQcm9jTm9kZSA9IEV4 ZWNTZXFTY2FuV2l0aFF1YWxQcm9qZWN0OwogCX0KIAorCWlmICh1c2VfYmF0Y2hpbmcpCisJCVNl cVNjYW5Jbml0QmF0Y2hpbmcoc2NhbnN0YXRlLCBlZmxhZ3MpOworCiAJcmV0dXJuIHNjYW5zdGF0 ZTsKIH0KIApAQCAtMjk5LDYgKzQ3MSw4IEBAIEV4ZWNFbmRTZXFTY2FuKFNlcVNjYW5TdGF0ZSAq bm9kZSkKIAkgKi8KIAlzY2FuRGVzYyA9IG5vZGUtPnNzLnNzX2N1cnJlbnRTY2FuRGVzYzsKIAor CVNjYW5SZXNldEJhdGNoaW5nKCZub2RlLT5zcywgdHJ1ZSk7CisKIAkvKgogCSAqIGNsb3NlIGhl YXAgc2NhbgogCSAqLwpAQCAtMzI3LDcgKzUwMSw3IEBAIEV4ZWNSZVNjYW5TZXFTY2FuKFNlcVNj YW5TdGF0ZSAqbm9kZSkKIAlpZiAoc2NhbiAhPSBOVUxMKQogCQl0YWJsZV9yZXNjYW4oc2NhbiwJ CS8qIHNjYW4gZGVzYyAqLwogCQkJCQkgTlVMTCk7CQkvKiBuZXcgc2NhbiBrZXlzICovCi0KKwlT Y2FuUmVzZXRCYXRjaGluZygmbm9kZS0+c3MsIGZhbHNlKTsKIAlFeGVjU2NhblJlU2NhbigoU2Nh blN0YXRlICopIG5vZGUpOwogfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9pbml0 L2dsb2JhbHMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvZ2xvYmFscy5jCmluZGV4IGQzMWNi NDVhMDU4Li5iNGEwOTk2YTcxNyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9n bG9iYWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9nbG9iYWxzLmMKQEAgLTE2NSwz ICsxNjUsNiBAQCBpbnQJCQlub3RpZnlfYnVmZmVycyA9IDE2OwogaW50CQkJc2VyaWFsaXphYmxl X2J1ZmZlcnMgPSAzMjsKIGludAkJCXN1YnRyYW5zYWN0aW9uX2J1ZmZlcnMgPSAwOwogaW50CQkJ dHJhbnNhY3Rpb25fYnVmZmVycyA9IDA7CisKKy8qIGV4ZWN1dG9yIGJhdGNoaW5nICovCitib29s CQlleGVjdXRvcl9iYXRjaGluZyA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRp bHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19w YXJhbWV0ZXJzLmRhdAppbmRleCA2YmM2YmUxM2QyYS4uYzlmYmI3ZmZlZjkgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0CisrKyBiL3NyYy9iYWNr ZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0CkBAIC04ODAsNiArODgwLDEzIEBACiAg IGJvb3RfdmFsID0+ICd0cnVlJywKIH0sCiAKK3sgbmFtZSA9PiAnZXhlY3V0b3JfYmF0Y2hpbmcn LCB0eXBlID0+ICdib29sJywgY29udGV4dCA9PiAnUEdDX1VTRVJTRVQnLCBncm91cCA9PiAnREVW RUxPUEVSX09QVElPTlMnLAorICBzaG9ydF9kZXNjID0+ICdVc2UgdHVwbGUgYmF0Y2hpbmcgZHVy aW5nIGV4ZWN1dGlvbi4nLAorICBmbGFncyA9PiAnR1VDX05PVF9JTl9TQU1QTEUnLAorICB2YXJp YWJsZSA9PiAnZXhlY3V0b3JfYmF0Y2hpbmcnLAorICBib290X3ZhbCA9PiAndHJ1ZScsCit9LAor CiB7IG5hbWUgPT4gJ2RhdGFfc3luY19yZXRyeScsIHR5cGUgPT4gJ2Jvb2wnLCBjb250ZXh0ID0+ ICdQR0NfUE9TVE1BU1RFUicsIGdyb3VwID0+ICdFUlJPUl9IQU5ETElOR19PUFRJT05TJywKICAg c2hvcnRfZGVzYyA9PiAnV2hldGhlciB0byBjb250aW51ZSBydW5uaW5nIGFmdGVyIGEgZmFpbHVy ZSB0byBzeW5jIGRhdGEgZmlsZXMuJywKICAgdmFyaWFibGUgPT4gJ2RhdGFfc3luY19yZXRyeScs CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmggYi9zcmMvaW5jbHVkZS9h Y2Nlc3MvaGVhcGFtLmgKaW5kZXggMDJmNzc5M2ZiYTAuLjEzY2U2MTY2ZWMzIDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2hl YXBhbS5oCkBAIC0zMTQsNiArMzE0LDcgQEAgZXh0ZXJuIGJvb2wgaGVhcF9nZXRuZXh0c2xvdChU YWJsZVNjYW5EZXNjIHNzY2FuLAogZXh0ZXJuIHZvaWQgKmhlYXBfYmVnaW5fYmF0Y2goVGFibGVT Y2FuRGVzYyBzc2NhbiwgaW50IG1heGl0ZW1zKTsKIGV4dGVybiB2b2lkIGhlYXBfZW5kX2JhdGNo KFRhYmxlU2NhbkRlc2Mgc3NjYW4sIHZvaWQgKmFtX2JhdGNoKTsKIGV4dGVybiBpbnQgaGVhcF9n ZXRuZXh0YmF0Y2goVGFibGVTY2FuRGVzYyBzc2Nhbiwgdm9pZCAqYW1fYmF0Y2gsIFNjYW5EaXJl Y3Rpb24gZGlyKTsKK2V4dGVybiB2b2lkIGhlYXBfbWF0ZXJpYWxpemVfYmF0Y2hfYWxsKHZvaWQg KmFtX2JhdGNoLCBUdXBsZVRhYmxlU2xvdCAqKnNsb3RzLCBpbnQgbik7CiAKIGV4dGVybiB2b2lk IGhlYXBfc2V0X3RpZHJhbmdlKFRhYmxlU2NhbkRlc2Mgc3NjYW4sIEl0ZW1Qb2ludGVyIG1pbnRp ZCwKIAkJCQkJCQkgIEl0ZW1Qb2ludGVyIG1heHRpZCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9hY2Nlc3MvdGFibGVhbS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaAppbmRleCA5 NTMyMDdlYWM1MC4uMDVmODI4Yjk3NjIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90 YWJsZWFtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaApAQCAtMjEsNiArMjEs NyBAQAogI2luY2x1ZGUgImFjY2Vzcy9zZGlyLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3hhY3QuaCIK ICNpbmNsdWRlICJjb21tYW5kcy92YWN1dW0uaCIKKyNpbmNsdWRlICJleGVjdXRvci9leGVjQmF0 Y2guaCIKICNpbmNsdWRlICJleGVjdXRvci90dXB0YWJsZS5oIgogI2luY2x1ZGUgInN0b3JhZ2Uv cmVhZF9zdHJlYW0uaCIKICNpbmNsdWRlICJ1dGlscy9yZWwuaCIKQEAgLTM5LDYgKzQwLDcgQEAg dHlwZWRlZiBzdHJ1Y3QgQnVsa0luc2VydFN0YXRlRGF0YSBCdWxrSW5zZXJ0U3RhdGVEYXRhOwog dHlwZWRlZiBzdHJ1Y3QgSW5kZXhJbmZvIEluZGV4SW5mbzsKIHR5cGVkZWYgc3RydWN0IFNhbXBs ZVNjYW5TdGF0ZSBTYW1wbGVTY2FuU3RhdGU7CiB0eXBlZGVmIHN0cnVjdCBWYWxpZGF0ZUluZGV4 U3RhdGUgVmFsaWRhdGVJbmRleFN0YXRlOwordHlwZWRlZiBzdHJ1Y3QgVHVwbGVCYXRjaE9wcyBU dXBsZUJhdGNoT3BzOwogCiAvKgogICogQml0bWFzayB2YWx1ZXMgZm9yIHRoZSBmbGFncyBhcmd1 bWVudCB0byB0aGUgc2Nhbl9iZWdpbiBjYWxsYmFjay4KQEAgLTMwMSw2ICszMDMsNyBAQCB0eXBl ZGVmIHN0cnVjdCBUYWJsZUFtUm91dGluZQogCSAqIFJldHVybiBzbG90IGltcGxlbWVudGF0aW9u IHN1aXRhYmxlIGZvciBzdG9yaW5nIGEgdHVwbGUgb2YgdGhpcyBBTS4KIAkgKi8KIAljb25zdCBU dXBsZVRhYmxlU2xvdE9wcyAqKCpzbG90X2NhbGxiYWNrcykgKFJlbGF0aW9uIHJlbCk7CisJY29u c3QgVHVwbGVCYXRjaE9wcyAqKCpiYXRjaF9jYWxsYmFja3MpKFJlbGF0aW9uIHJlbCk7CiAKIAog CS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMzYxLDYgKzM2NCw3IEBAIHR5cGVkZWYgc3RydWN0IFRh YmxlQW1Sb3V0aW5lCiAJCQkJCQkJCQkgU2NhbkRpcmVjdGlvbiBkaXIpOwogCXZvaWQJCSgqc2Nh bl9lbmRfYmF0Y2gpKFRhYmxlU2NhbkRlc2Mgc3NjYW4sIHZvaWQgKmFtX2JhdGNoKTsKIAorCiAJ LyotLS0tLS0tLS0tLQogCSAqIE9wdGlvbmFsIGZ1bmN0aW9ucyB0byBwcm92aWRlIHNjYW5uaW5n IGZvciByYW5nZXMgb2YgSXRlbVBvaW50ZXJzLgogCSAqIEltcGxlbWVudGF0aW9ucyBtdXN0IGVp dGhlciBwcm92aWRlIGJvdGggb2YgdGhlc2UgZnVuY3Rpb25zLCBvciBuZWl0aGVyCkBAIC04NzIs NiArODc2LDE2IEBAIGV4dGVybiBjb25zdCBUdXBsZVRhYmxlU2xvdE9wcyAqdGFibGVfc2xvdF9j YWxsYmFja3MoUmVsYXRpb24gcmVsYXRpb24pOwogICovCiBleHRlcm4gVHVwbGVUYWJsZVNsb3Qg KnRhYmxlX3Nsb3RfY3JlYXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBMaXN0ICoqcmVnbGlzdCk7CiAK Ky8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFR1cGxlQmF0Y2ggZnVuY3Rpb25zLgorICogLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorICovCisKKy8qCisgKiBSZXR1cm5zIGNhbGxiYWNrcyBmb3IgbWFu aXB1bGF0aW5nIFR1cGxlQmF0Y2ggZm9yIHR1cGxlcyBvZiB0aGUgZ2l2ZW4KKyAqIHJlbGF0aW9u LgorICovCitleHRlcm4gY29uc3QgVHVwbGVCYXRjaE9wcyAqdGFibGVfYmF0Y2hfY2FsbGJhY2tz KFJlbGF0aW9uIHJlbGF0aW9uKTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogVGFibGUg c2NhbiBmdW5jdGlvbnMuCkBAIC0xMDQ2LDYgKzEwNjAsMTggQEAgdGFibGVfc2Nhbl9nZXRuZXh0 c2xvdChUYWJsZVNjYW5EZXNjIHNzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwgVHVwbGVU YWJsZVMKIAlyZXR1cm4gc3NjYW4tPnJzX3JkLT5yZF90YWJsZWFtLT5zY2FuX2dldG5leHRzbG90 KHNzY2FuLCBkaXJlY3Rpb24sIHNsb3QpOwogfQogCisvKgorICogdGFibGVfc3VwcG9ydHNfYmF0 Y2hpbmcKKyAqCQlEb2VzIHRoZSByZWxhdGlvbidzIEFNIHN1cHBvcnQgYmF0Y2hpbmc/CisgKi8K K3N0YXRpYyBpbmxpbmUgYm9vbAordGFibGVfc3VwcG9ydHNfYmF0Y2hpbmcoUmVsYXRpb24gcmVs YXRpb24pCit7CisJY29uc3QgVGFibGVBbVJvdXRpbmUgKnRhbSA9IHJlbGF0aW9uLT5yZF90YWJs ZWFtOworCisJcmV0dXJuIHRhbS0+c2Nhbl9nZXRuZXh0YmF0Y2ggIT0gTlVMTDsKK30KKwogLyoK ICAqIHRhYmxlX3NjYW5fYmVnaW5fYmF0Y2gKICAqCQlBbGxvY2F0ZSBBTS1vd25lZCBiYXRjaCBw YXlsb2FkIHdpdGggY2FwYWNpdHkgJ21heGl0ZW1zJy4KQEAgLTIxMTYsNSArMjE0Miw2IEBAIGV4 dGVybiBjb25zdCBUYWJsZUFtUm91dGluZSAqR2V0VGFibGVBbVJvdXRpbmUoT2lkIGFtaGFuZGxl cik7CiAgKi8KIAogZXh0ZXJuIGNvbnN0IFRhYmxlQW1Sb3V0aW5lICpHZXRIZWFwYW1UYWJsZUFt Um91dGluZSh2b2lkKTsKK2V4dGVybiBzdHJ1Y3QgVHVwbGVCYXRjaE9wcyAqR2V0SGVhcGFtVHVw bGVCYXRjaE9wcyh2b2lkKTsKIAogI2VuZGlmCQkJCQkJCS8qIFRBQkxFQU1fSCAqLwpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY0JhdGNoLmggYi9zcmMvaW5jbHVkZS9leGVj dXRvci9leGVjQmF0Y2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u NmYxYTM4ZDE0YmQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVj QmF0Y2guaApAQCAtMCwwICsxLDEwMiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogZXhl Y0JhdGNoLmgKKyAqCQlFeGVjdXRvciBiYXRjaCBlbnZlbG9wZSBmb3IgcGFzc2luZyB0dXBsZSBi YXRjaCBzdGF0ZSB1cHdhcmQKKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAy NSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHly aWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisg KgorICogSURFTlRJRklDQVRJT04KKyAqCSAgc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY0JhdGNo LmgKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVmIEVYRUNCQVRDSF9ICisjZGVmaW5l IEVYRUNCQVRDSF9ICisKKyNpbmNsdWRlICJleGVjdXRvci90dXB0YWJsZS5oIgorCisvKiBYWFgg Zml4ZWQgNjQgZm9yIFBvQyAqLworI2RlZmluZQlFWEVDX0JBVENIX1JPV1MJCTY0CisKKy8qCisg KiBUdXBsZUJhdGNoT3BzIC0tIEFNLXNwZWNpZmljIGhlbHBlcnMgZm9yIGxhenkgbWF0ZXJpYWxp emF0aW9uLgorICovCit0eXBlZGVmIHN0cnVjdCBUdXBsZUJhdGNoT3BzCit7CisJdm9pZCAoKm1h dGVyaWFsaXplX2FsbCkodm9pZCAqYW1fcGF5bG9hZCwKKwkJCQkJCQlUdXBsZVRhYmxlU2xvdCAq KmRzdCwKKwkJCQkJCQlpbnQgbWF4c2xvdHMpOworfSBUdXBsZUJhdGNoT3BzOworCisvKgorICog VHVwbGVCYXRjaAorICoKKyAqIEVudmVsb3BlIGZvciBhIGJhdGNoIG9mIHR1cGxlcyBwcm9kdWNl ZCBieSBhIHBsYW4gbm9kZSAoZS5nLiwgU2VxU2NhbikgcGVyCisgKiBjYWxsIHRvIGEgYmF0Y2gg dmFyaWFudCBvZiBFeGVjU2VxU2NhbigpLgorICovCit0eXBlZGVmIHN0cnVjdCBUdXBsZUJhdGNo Cit7CisJdm9pZAkgICAqYW1fcGF5bG9hZDsKKwljb25zdCBUdXBsZUJhdGNoT3BzICpvcHM7CisJ aW50CQkJbnR1cGxlczsJCQkJLyogbnVtYmVyIG9mIHR1cGxlcyBpbiBhbV9wYXlsb2FkICovCisJ Ym9vbAkJbWF0ZXJpYWxpemVkOwkJIC8qIHR1cGxlcyBpbiBzbG90cyB2YWxpZD8gKi8KKwlzdHJ1 Y3QgVHVwbGVUYWJsZVNsb3QgKippbnNsb3RzOyAvKiBzbG90cyBmb3IgdHVwbGVzIHJlYWQgImlu dG8iIGJhdGNoICovCisJc3RydWN0IFR1cGxlVGFibGVTbG90ICoqb3V0c2xvdHM7IC8qIHNsb3Rz IGZvciB0dXBsZXMgZ29pbmcgIm91dCBvZiIKKwkJCQkJCQkJCSAgICogYmF0Y2ggKi8KKwlzdHJ1 Y3QgVHVwbGVUYWJsZVNsb3QgKiphY3RpdmVzbG90czsKKwlpbnQJCQltYXhzbG90czsKKworCWlu dAkJbnZhbGlkOwkJLyogbnVtYmVyIG9mIHJldHVybmFibGUgdHVwbGVzIGluIG91dHNsb3RzICov CisJaW50CQluZXh0OwkJLyogMC1iYXNlZCBpbmRleCBvZiBuZXh0IHR1cGxlIHRvIGJlIHJldHVy bmVkICovCit9IFR1cGxlQmF0Y2g7CisKKworLyogSGVscGVycyAqLworZXh0ZXJuIFR1cGxlQmF0 Y2ggKlR1cGxlQmF0Y2hDcmVhdGUoVHVwbGVEZXNjIHNjYW5kZXNjLCBpbnQgY2FwYWNpdHkpOwor ZXh0ZXJuIHZvaWQgVHVwbGVCYXRjaFJlc2V0KFR1cGxlQmF0Y2ggKmIsIGJvb2wgZHJvcF9zbG90 cyk7CitleHRlcm4gdm9pZCBUdXBsZUJhdGNoVXNlSW5wdXQoVHVwbGVCYXRjaCAqYiwgaW50IG52 YWxpZCk7CitleHRlcm4gdm9pZCBUdXBsZUJhdGNoVXNlT3V0cHV0KFR1cGxlQmF0Y2ggKmIsIGlu dCBudmFsaWQpOworZXh0ZXJuIGJvb2wgVHVwbGVCYXRjaElzVmFsaWQoVHVwbGVCYXRjaCAqYik7 CitleHRlcm4gdm9pZCBUdXBsZUJhdGNoUmV3aW5kKFR1cGxlQmF0Y2ggKmIpOworZXh0ZXJuIGlu dCBUdXBsZUJhdGNoR2V0TnVtVmFsaWQoVHVwbGVCYXRjaCAqYik7CisKK3N0YXRpYyBpbmxpbmUg VHVwbGVUYWJsZVNsb3QgKgorVHVwbGVCYXRjaEdldE5leHRTbG90KFR1cGxlQmF0Y2ggKmIpCit7 CisJcmV0dXJuIGItPm5leHQgPCBiLT5udmFsaWQgPyBiLT5hY3RpdmVzbG90c1tiLT5uZXh0Kytd IDogTlVMTDsKK30KKworc3RhdGljIGlubGluZSBUdXBsZVRhYmxlU2xvdCAqCitUdXBsZUJhdGNo R2V0U2xvdChUdXBsZUJhdGNoICpiLCBpbnQgaW5kZXgpCit7CisJQXNzZXJ0KGluZGV4IDwgYi0+ bnZhbGlkKTsKKwlyZXR1cm4gYi0+YWN0aXZlc2xvdHNbaW5kZXhdOworfQorCitzdGF0aWMgaW5s aW5lIHZvaWQKK1R1cGxlQmF0Y2hTdG9yZUluT3V0KFR1cGxlQmF0Y2ggKmIsIGludCBpbmRleCwg VHVwbGVUYWJsZVNsb3QgKm91dCkKK3sKKwlBc3NlcnQoVHVwbGVCYXRjaElzVmFsaWQoYikpOwor CWItPm91dHNsb3RzW2luZGV4XSA9IG91dDsKK30KKworc3RhdGljIGlubGluZSBib29sCitUdXBs ZUJhdGNoSGFzTW9yZShUdXBsZUJhdGNoICpiKQoreworCXJldHVybiBiLT5hY3RpdmVzbG90cyAm JiBiLT5uZXh0IDwgYi0+bnZhbGlkOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK1R1cGxlQmF0 Y2hNYXRlcmlhbGl6ZUFsbChUdXBsZUJhdGNoICpiKQoreworCWlmIChiLT5tYXRlcmlhbGl6ZWQp CisJCXJldHVybjsKKworCWlmIChiLT5vcHMgPT0gTlVMTCB8fCBiLT5vcHMtPm1hdGVyaWFsaXpl X2FsbCA9PSBOVUxMKQorCQllbG9nKEVSUk9SLCAiVHVwbGVCYXRjaCBoYXMgbm8gc2xvdHMgYW5k IG5vIG1hdGVyaWFsaXplX2FsbCBvcCIpOworCisJYi0+b3BzLT5tYXRlcmlhbGl6ZV9hbGwoYi0+ YW1fcGF5bG9hZCwgYi0+aW5zbG90cywgYi0+bnR1cGxlcyk7CisJVHVwbGVCYXRjaFVzZUlucHV0 KGIsIGItPm50dXBsZXMpOworfQorCisjZW5kaWYJLyogRVhFQ0JBVENIX0ggKi8KZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNTY2FuLmggYi9zcmMvaW5jbHVkZS9leGVjdXRv ci9leGVjU2Nhbi5oCmluZGV4IDgzN2VhNzc4NWJiLi5mZWM2MDY0NzFjOCAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY1NjYW4uaAorKysgYi9zcmMvaW5jbHVkZS9leGVjdXRv ci9leGVjU2Nhbi5oCkBAIC0yNDMsNCArMjQzLDU4IEBAIEV4ZWNTY2FuRXh0ZW5kZWQoU2NhblN0 YXRlICpub2RlLAogCX0KIH0KIAorc3RhdGljIGlubGluZSBUdXBsZVRhYmxlU2xvdCAqCitFeGVj U2NhbkV4dGVuZGVkQmF0Y2hTbG90KFNjYW5TdGF0ZSAqbm9kZSwKKwkJCQkJCSAgRXhlY1NjYW5B Y2Nlc3NCYXRjaE10ZCBhY2Nlc3NCYXRjaE10ZCwKKwkJCQkJCSAgRXhwclN0YXRlICpxdWFsLCBQ cm9qZWN0aW9uSW5mbyAqcHJvakluZm8pCit7CisJRXhwckNvbnRleHQgKmVjb250ZXh0ID0gbm9k ZS0+cHMucHNfRXhwckNvbnRleHQ7CisJVHVwbGVCYXRjaCAqYiA9IG5vZGUtPnBzLnBzX0JhdGNo OworCisJLyogQmF0Y2ggcGF0aCBkb2VzIG5vdCBzdXBwb3J0IEVQUSAqLworCUFzc2VydChub2Rl LT5wcy5zdGF0ZS0+ZXNfZXBxX2FjdGl2ZSA9PSBOVUxMKTsKKwlBc3NlcnQoVHVwbGVCYXRjaElz VmFsaWQoYikpOworCisJZm9yICg7OykKKwl7CisJCVR1cGxlVGFibGVTbG90ICppbjsKKworCQlD SEVDS19GT1JfSU5URVJSVVBUUygpOworCisJCS8qIEdldCBuZXh0IGlucHV0IHNsb3QgZnJvbSBj dXJyZW50IGJhdGNoLCBvciByZWZpbGwgKi8KKwkJaWYgKCFUdXBsZUJhdGNoSGFzTW9yZShiKSkK KwkJeworCQkJaWYgKCFhY2Nlc3NCYXRjaE10ZChub2RlKSkKKwkJCQlyZXR1cm4gTlVMTDsKKwkJ fQorCisJCWluID0gVHVwbGVCYXRjaEdldE5leHRTbG90KGIpOworCQlBc3NlcnQoaW4pOworCisJ CS8qIE5vIHF1YWwsIG5vIHByb2plY3Rpb246IGRpcmVjdCByZXR1cm4gKi8KKwkJaWYgKHF1YWwg PT0gTlVMTCAmJiBwcm9qSW5mbyA9PSBOVUxMKQorCQkJcmV0dXJuIGluOworCisJCVJlc2V0RXhw ckNvbnRleHQoZWNvbnRleHQpOworCQllY29udGV4dC0+ZWN4dF9zY2FudHVwbGUgPSBpbjsKKwor CQkvKiBRdWFsIG9ubHkgKi8KKwkJaWYgKHByb2pJbmZvID09IE5VTEwpCisJCXsKKwkJCWlmIChx dWFsID09IE5VTEwgfHwgRXhlY1F1YWwocXVhbCwgZWNvbnRleHQpKQorCQkJCXJldHVybiBpbjsK KwkJCWVsc2UKKwkJCQlJbnN0ckNvdW50RmlsdGVyZWQxKG5vZGUsIDEpOworCQkJY29udGludWU7 CisJCX0KKworCQkvKiBQcm9qZWN0aW9uICh3aXRoIG9yIHdpdGhvdXQgcXVhbCkgKi8KKwkJaWYg KHF1YWwgPT0gTlVMTCB8fCBFeGVjUXVhbChxdWFsLCBlY29udGV4dCkpCisJCQlyZXR1cm4gRXhl Y1Byb2plY3QocHJvakluZm8pOworCQllbHNlCisJCQlJbnN0ckNvdW50RmlsdGVyZWQxKG5vZGUs IDEpOworCQkvKiBlbHNlIHRyeSBuZXh0IHR1cGxlICovCisJfQorfQorCiAjZW5kaWYJCQkJCQkJ LyogRVhFQ1NDQU5fSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY3V0 b3IuaCBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmgKaW5kZXggMzI0OGU3OGNkMjgu LjE3MjU4ZjdhZTJkIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5o CisrKyBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmgKQEAgLTU3NSwxMiArNTc1LDE2 IEBAIGV4dGVybiBEYXR1bSBFeGVjTWFrZUZ1bmN0aW9uUmVzdWx0U2V0KFNldEV4cHJTdGF0ZSAq ZmNhY2hlLAogICovCiB0eXBlZGVmIFR1cGxlVGFibGVTbG90ICooKkV4ZWNTY2FuQWNjZXNzTXRk KSAoU2NhblN0YXRlICpub2RlKTsKIHR5cGVkZWYgYm9vbCAoKkV4ZWNTY2FuUmVjaGVja010ZCkg KFNjYW5TdGF0ZSAqbm9kZSwgVHVwbGVUYWJsZVNsb3QgKnNsb3QpOwordHlwZWRlZiBib29sICgq RXhlY1NjYW5BY2Nlc3NCYXRjaE10ZCkoU2NhblN0YXRlICpub2RlKTsKIAogZXh0ZXJuIFR1cGxl VGFibGVTbG90ICpFeGVjU2NhbihTY2FuU3RhdGUgKm5vZGUsIEV4ZWNTY2FuQWNjZXNzTXRkIGFj Y2Vzc010ZCwKIAkJCQkJCQkJRXhlY1NjYW5SZWNoZWNrTXRkIHJlY2hlY2tNdGQpOworCiBleHRl cm4gdm9pZCBFeGVjQXNzaWduU2NhblByb2plY3Rpb25JbmZvKFNjYW5TdGF0ZSAqbm9kZSk7CiBl eHRlcm4gdm9pZCBFeGVjQXNzaWduU2NhblByb2plY3Rpb25JbmZvV2l0aFZhcm5vKFNjYW5TdGF0 ZSAqbm9kZSwgaW50IHZhcm5vKTsKIGV4dGVybiB2b2lkIEV4ZWNTY2FuUmVTY2FuKFNjYW5TdGF0 ZSAqbm9kZSk7CitleHRlcm4gYm9vbCBTY2FuQ2FuVXNlQmF0Y2hpbmcoU2NhblN0YXRlICpzY2Fu c3RhdGUsIGludCBlZmxhZ3MpOworZXh0ZXJuIHZvaWQgU2NhblJlc2V0QmF0Y2hpbmcoU2NhblN0 YXRlICpzY2Fuc3RhdGUsIGJvb2wgZHJvcCk7CiAKIC8qCiAgKiBwcm90b3R5cGVzIGZyb20gZnVu Y3Rpb25zIGluIGV4ZWNUdXBsZXMuYwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbWlzY2FkbWlu LmggYi9zcmMvaW5jbHVkZS9taXNjYWRtaW4uaAppbmRleCAxYmVmOTg0NzFjMy4uYjhlN2FmZGE1 N2MgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL21pc2NhZG1pbi5oCisrKyBiL3NyYy9pbmNsdWRl L21pc2NhZG1pbi5oCkBAIC0yODcsNiArMjg3LDcgQEAgZXh0ZXJuIFBHRExMSU1QT1JUIGRvdWJs ZSBWYWN1dW1Db3N0RGVsYXk7CiBleHRlcm4gUEdETExJTVBPUlQgaW50IFZhY3V1bUNvc3RCYWxh bmNlOwogZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgVmFjdXVtQ29zdEFjdGl2ZTsKIAorZXh0ZXJu IFBHRExMSU1QT1JUIGJvb2wgZXhlY3V0b3JfYmF0Y2hpbmc7CiAKIC8qIGluIHV0aWxzL21pc2Mv c3RhY2tfZGVwdGguYyAqLwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9k ZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCmluZGV4IGEzNjY1M2MzN2Y5Li5m NGJiOGY3ZGQ3ZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKKysr IGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKQEAgLTMwLDYgKzMwLDcgQEAKICNkZWZp bmUgRVhFQ05PREVTX0gKIAogI2luY2x1ZGUgImFjY2Vzcy90dXBjb252ZXJ0LmgiCisjaW5jbHVk ZSAiZXhlY3V0b3IvZXhlY0JhdGNoLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3IvaW5zdHJ1bWVudC5o IgogI2luY2x1ZGUgImZtZ3IuaCIKICNpbmNsdWRlICJsaWIvaWxpc3QuaCIKQEAgLTExNDMsNiAr MTE0NCwxMCBAQCB0eXBlZGVmIHN0cnVjdCBKc29uRXhwclN0YXRlCiAgKi8KIHR5cGVkZWYgVHVw bGVUYWJsZVNsb3QgKigqRXhlY1Byb2NOb2RlTXRkKSAoUGxhblN0YXRlICpwc3RhdGUpOwogCisv KiBSZXR1cm4gYSBiYXRjaDsgbWF5IHJldXNlIGNhbGxlci1wcm92aWRlZCBlbnZlbG9wZS4gTlVM TCA9PiBlbmQgb2Ygc2Nhbi4gKi8KK3N0cnVjdCBUdXBsZUJhdGNoOwordHlwZWRlZiBzdHJ1Y3Qg VHVwbGVCYXRjaCBUdXBsZUJhdGNoOworCiAvKiAtLS0tLS0tLS0tLS0tLS0tCiAgKgkJUGxhblN0 YXRlIG5vZGUKICAqCkBAIC0xMTk4LDYgKzEyMDMsOSBAQCB0eXBlZGVmIHN0cnVjdCBQbGFuU3Rh dGUKIAlFeHByQ29udGV4dCAqcHNfRXhwckNvbnRleHQ7CS8qIG5vZGUncyBleHByZXNzaW9uLWV2 YWx1YXRpb24gY29udGV4dCAqLwogCVByb2plY3Rpb25JbmZvICpwc19Qcm9qSW5mbzsJLyogaW5m byBmb3IgZG9pbmcgdHVwbGUgcHJvamVjdGlvbiAqLwogCisJLyogQmF0Y2hpbmcgc3RhdGUgaWYg bm9kZSBzdXBwb3J0cyBpdC4gKi8KKwlUdXBsZUJhdGNoICpwc19CYXRjaDsKKwogCWJvb2wJCWFz eW5jX2NhcGFibGU7CS8qIHRydWUgaWYgbm9kZSBpcyBhc3luYy1jYXBhYmxlICovCiAKIAkvKgot LSAKMi40My4wCgo= --0000000000002b1beb063fb44440 Content-Type: application/octet-stream; name="v1-0001-Add-batch-table-AM-API-and-heapam-implementation.patch" Content-Disposition: attachment; filename="v1-0001-Add-batch-table-AM-API-and-heapam-implementation.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mg0jlk827 RnJvbSAzMzE4NjUwZTcyMGEwMWNiZDU5NDgzNDliOWZiY2RiYjhkZGRhN2NmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IE1vbiwgMSBTZXAgMjAyNSAyMTo1NjoxNyArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjEg MS84XSBBZGQgYmF0Y2ggdGFibGUgQU0gQVBJIGFuZCBoZWFwYW0gaW1wbGVtZW50YXRpb24KCklu dHJvZHVjZSBuZXcgdGFibGUgQU0gY2FsbGJhY2tzIHRvIGZldGNoIG11bHRpcGxlIHR1cGxlcyBw ZXIgY2FsbC4KVGhpcyByZWR1Y2VzIHBlci10dXBsZSBjYWxsIG92ZXJoZWFkIGJ5IGxldHRpbmcg ZXhlY3V0b3Igbm9kZXMgd29yawppbiBiYXRjaGVzLgoKRGVmaW5lIGEgSGVhcEJhdGNoIHN0cnVj dHVyZSBhbmQgc3VwcG9ydGluZyBjb2RlIGluIHRhYmxlYW0uaC4KQmF0Y2hlcyBhcmUgbGltaXRl ZCB0byB0dXBsZXMgZnJvbSBhIHNpbmdsZSBwYWdlIGFuZCBhdCBtb3N0CkVYRUNfQkFUQ0hfUk9X UyAoY3VycmVudGx5IDY0KSBlbnRyaWVzLgoKUHJvdmlkZSBpbml0aWFsIGhlYXBhbSBzdXBwb3J0 IHdpdGggaGVhcGdldHR1cF9wYWdlbW9kZV9iYXRjaCgpLgpObyBleGVjdXRvciBub2RlIGlzIHN3 aXRjaGVkIG92ZXIgeWV0OyBhIGxhdGVyIGNvbW1pdCB3aWxsIGFkYXB0ClNlcVNjYW4gdG8gdXNl IHRoaXMgQVBJLiBPdGhlciBub2RlcyBtYXkgYWRvcHQgaXQgaW4gdGhlIGZ1dHVyZS4KCkFsc28g YWRkIHBnc3RhdF9jb3VudF9oZWFwX2dldG5leHRfYmF0Y2goKSB0byByZWNvcmQgYmF0Y2hlZCBm ZXRjaGVzCmluIHBnc3RhdC4KLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW0uYyAg ICAgICAgIHwgMjEyICsrKysrKysrKysrKysrKysrKysrKystCiBzcmMvYmFja2VuZC9hY2Nlc3Mv aGVhcC9oZWFwYW1faGFuZGxlci5jIHwgICA0ICsKIHNyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0u aCAgICAgICAgICAgICAgfCAgMjEgKysrCiBzcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oICAg ICAgICAgICAgIHwgIDU4ICsrKysrKysKIHNyYy9pbmNsdWRlL3Bnc3RhdC5oICAgICAgICAgICAg ICAgICAgICAgfCAgIDUgKwogNSBmaWxlcyBjaGFuZ2VkLCAyOTkgaW5zZXJ0aW9ucygrKSwgMSBk ZWxldGlvbigtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5j IGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtLmMKaW5kZXggZWQwYzBjMmRjOWYuLmY2 MmY3ZWRiZjVlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW0uYwor KysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW0uYwpAQCAtMTAwOCw3ICsxMDA4LDcg QEAgaGVhcGdldHR1cF9wYWdlbW9kZShIZWFwU2NhbkRlc2Mgc2NhbiwKIAkJCQkJaW50IG5rZXlz LAogCQkJCQlTY2FuS2V5IGtleSkKIHsKLQlIZWFwVHVwbGUJdHVwbGUgPSAmKHNjYW4tPnJzX2N0 dXApOworCUhlYXBUdXBsZSB0dXBsZSA9ICZzY2FuLT5yc19jdHVwOwogCVBhZ2UJCXBhZ2U7CiAJ dWludDMyCQlsaW5laW5kZXg7CiAJdWludDMyCQlsaW5lc2xlZnQ7CkBAIC0xMDg5LDYgKzEwODks MTIxIEBAIGNvbnRpbnVlX3BhZ2U6CiAJc2Nhbi0+cnNfaW5pdGVkID0gZmFsc2U7CiB9CiAKKy8q CisgKiBoZWFwZ2V0dHVwX3BhZ2Vtb2RlX2JhdGNoCisgKgkJQ29sbGVjdCB1cCB0byAnbWF4aXRl bXMnIHZpc2libGUgdHVwbGVzIGZyb20gYSBzaW5nbGUgcGFnZSBpbiBwYWdlIG1vZGUuCisgKgor ICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgKmJhdGNoKiBvZiB0dXBsZXMgZnJvbSBvbmUgaGVh cCBwYWdlLiBJZiB0aGUKKyAqIGN1cnJlbnQgcGFnZSAoYXMgdHJhY2tlZCBieSB0aGUgc2NhbiBk ZXNjKSBoYXMgbm8gbW9yZSB0dXBsZXMgbGVmdCwKKyAqIGl0IHdpbGwgYWR2YW5jZSB0byB0aGUg bmV4dCBwYWdlIGFuZCBwcmVwYXJlIGl0ICh2aWEgaGVhcF9wcmVwYXJlX3BhZ2VzY2FuKS4KKyAq IEl0IHdpbGwgbm90IGNyb3NzIGEgcGFnZSBib3VuZGFyeSB3aGlsZSBmaWxsaW5nIHRoZSBiYXRj aC4KKyAqCisgKiBSZXR1cm4gdmFsdWU6CisgKgkJbnVtYmVyIG9mIHR1cGxlcyB3cml0dGVuIGlu dG8gJ3RkYXRhJyAoMCBhdCBlbmQtb2Ytc2NhbikuCisgKgorICogU2lkZSBlZmZlY3RzOgorICoJ LSBFbnN1cmVzIHJzX2NidWYgcGlucyB0aGUgcGFnZSBmcm9tIHdoaWNoIHR1cGxlcyB3ZXJlIHBy b2R1Y2VkLgorICoJLSBTZXRzIHJzX2NibG9jaywgcnNfY2luZGV4LCByc19udHVwbGVzIGNvbnNp c3RlbnRseSAoc2FtZSBhcworICoJICBoZWFwZ2V0dHVwX3BhZ2Vtb2Rl4oCZcyBpbm5lci1sb29w IGVmZmVjdHMpLgorICoJLSBEb2VzICpub3QqIGNoYW5nZSBidWZmZXIgcGluIGNvdW50cyBleGNl cHQgdGhyb3VnaCBub3JtYWwgcGFnZQorICoJICB0cmFuc2l0aW9ucyBwZXJmb3JtZWQgYnkgaGVh cF9mZXRjaF9uZXh0X2J1ZmZlcigpLgorICovCitzdGF0aWMgaW50CitoZWFwZ2V0dHVwX3BhZ2Vt b2RlX2JhdGNoKEhlYXBTY2FuRGVzYyBzY2FuLAorCQkJCQkJICBTY2FuRGlyZWN0aW9uIGRpciwK KwkJCQkJCSAgaW50IG5rZXlzLCBTY2FuS2V5IGtleSwKKwkJCQkJCSAgSGVhcFR1cGxlRGF0YSAq dGRhdGEsCisJCQkJCQkgIGludCBtYXhpdGVtcykKK3sKKwlQYWdlCQlwYWdlOworCXVpbnQzMgkJ bGluZWluZGV4OworCXVpbnQzMgkJbGluZXNsZWZ0OworCWludAkJCW5vdXQgPSAwOworCisJQXNz ZXJ0KFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSk7CisJQXNzZXJ0KHNjYW4tPnJzX2Jhc2Uu cnNfZmxhZ3MgJiBTT19BTExPV19QQUdFTU9ERSk7CisJQXNzZXJ0KG1heGl0ZW1zID4gMCk7CisK KwkvKgorCSAqIElmIHdlIGhhdmUgbm8gY3VycmVudCBwYWdlIChvciB0aGUgY3VycmVudCBwYWdl IGlzIGV4aGF1c3RlZCksCisJICogYWR2YW5jZSB0byB0aGUgbmV4dCBwYWdlIHRoYXQgaGFzIGFu eSB2aXNpYmxlIHR1cGxlcyBhbmQgcHJlcGFyZSBpdC4KKwkgKiBUaGlzIG1pcnJvcnMgdGhlIG91 dGVyIGxvb3Agb2YgaGVhcGdldHR1cF9wYWdlbW9kZSgpLCBidXQgd2Ugc3RvcAorCSAqIGFzIHNv b24gYXMgd2UgaGF2ZSBhIHByZXBhcmVkIHBhZ2U7IHdlIG5ldmVyIHByb2R1Y2UgZnJvbSB0d28g cGFnZXMuCisJICovCisJZm9yICg7OykKKwl7CisJCWlmIChCdWZmZXJJc1ZhbGlkKHNjYW4tPnJz X2NidWYpKQorCQl7CisJCQkvKiBBcmUgdGhlcmUgbW9yZSB2aXNpYmxlIHR1cGxlcyBsZWZ0IG9u IHRoaXMgcGFnZT8gKi8KKwkJCWxpbmVpbmRleCA9IHNjYW4tPnJzX2NpbmRleCArIGRpcjsKKwkJ CWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCisJCQkJbGluZXNsZWZ0ID0gKGxpbmVp bmRleCA8PSAodWludDMyKSBzY2FuLT5yc19udHVwbGVzKSA/CisJCQkJCShzY2FuLT5yc19udHVw bGVzIC0gbGluZWluZGV4KSA6IDA7CisJCQllbHNlCisJCQkJbGluZXNsZWZ0ID0gc2Nhbi0+cnNf Y2luZGV4OworCQkJaWYgKGxpbmVzbGVmdCA+IDApCisJCQkJYnJlYWs7CS8qIGNvbnRpbnVlIG9u IHRoaXMgcGFnZSAqLworCQl9CisKKwkJLyogTW92ZSB0byBuZXh0IHBhZ2UgYW5kIHByZXBhcmUg aXRzIHZpc2libGUgdHVwbGUgbGlzdC4gKi8KKwkJaGVhcF9mZXRjaF9uZXh0X2J1ZmZlcihzY2Fu LCBkaXIpOworCisJCWlmICghQnVmZmVySXNWYWxpZChzY2FuLT5yc19jYnVmKSkKKwkJeworCQkJ LyogZW5kIG9mIHNjYW47IGtlZXAgcnNfY2J1ZiBpbnZhbGlkIGxpa2UgaGVhcGdldHR1cF9wYWdl bW9kZSAqLworCQkJc2Nhbi0+cnNfY2Jsb2NrID0gSW52YWxpZEJsb2NrTnVtYmVyOworCQkJc2Nh bi0+cnNfcHJlZmV0Y2hfYmxvY2sgPSBJbnZhbGlkQmxvY2tOdW1iZXI7CisJCQlzY2FuLT5yc19p bml0ZWQgPSBmYWxzZTsKKwkJCXJldHVybiAwOworCQl9CisKKwkJQXNzZXJ0KEJ1ZmZlckdldEJs b2NrTnVtYmVyKHNjYW4tPnJzX2NidWYpID09IHNjYW4tPnJzX2NibG9jayk7CisJCWhlYXBfcHJl cGFyZV9wYWdlc2NhbigoVGFibGVTY2FuRGVzYykgc2Nhbik7CisKKwkJLyogQWZ0ZXIgcHJlcGFy ZSwgZWl0aGVyIHJzX250dXBsZXMgPiAwIG9yIHdlJ2xsIGxvb3AgYWdhaW4uICovCisJCWlmIChz Y2FuLT5yc19udHVwbGVzID4gMCkKKwkJeworCQkJbGluZWluZGV4ID0gU2NhbkRpcmVjdGlvbklz Rm9yd2FyZChkaXIpID8gMCA6IHNjYW4tPnJzX250dXBsZXMgLSAxOworCQkJbGluZXNsZWZ0ID0g c2Nhbi0+cnNfbnR1cGxlcyAtIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikgPyAwIDogMCk7 CisJCQlicmVhazsKKwkJfQorCQkvKiBlbHNlOiBwYWdlIGhhZCBubyB2aXNpYmxlIHR1cGxlczsg Y29udGludWUgdG8gbmV4dCBwYWdlICovCisJfQorCisJLyogRnJvbSBoZXJlIG9uLCB3ZSBtdXN0 IG9ubHkgcmVhZCB0dXBsZXMgZnJvbSB0aGlzIHNpbmdsZSBwYWdlLiAqLworCXBhZ2UgPSBCdWZm ZXJHZXRQYWdlKHNjYW4tPnJzX2NidWYpOworCisJLyoKKwkgKiBXYWxrIHJzX3Zpc3R1cGxlc1td IGZyb20gJ2xpbmVpbmRleCcsIGNvcHlpbmcgaGVhZGVycyBpbnRvIHRkYXRhW10KKwkgKiB1bnRp bCBlaXRoZXIgdGhlIHBhZ2UgaXMgZXhoYXVzdGVkIG9yIHRoZSBiYXRjaCBjYXBhY2l0eSBpcyBy ZWFjaGVkLgorCSAqLworCWZvciAoOyBsaW5lc2xlZnQgPiAwICYmIG5vdXQgPCBtYXhpdGVtczsg bGluZXNsZWZ0LS0sIGxpbmVpbmRleCArPSBkaXIpCisJeworCQlPZmZzZXROdW1iZXIJbGluZW9m ZjsKKwkJSXRlbUlkCQkJbHBwOworCQlIZWFwVHVwbGVEYXRhICpkc3QgPSAmdGRhdGFbbm91dF07 CisKKwkJQXNzZXJ0KGxpbmVpbmRleCA8PSAodWludDMyKSBzY2FuLT5yc19udHVwbGVzKTsKKwkJ bGluZW9mZiA9IHNjYW4tPnJzX3Zpc3R1cGxlc1tsaW5laW5kZXhdOworCQlscHAgPSBQYWdlR2V0 SXRlbUlkKHBhZ2UsIGxpbmVvZmYpOworCQlBc3NlcnQoSXRlbUlkSXNOb3JtYWwobHBwKSk7CisK KwkJZHN0LT50X2RhdGEgPSAoSGVhcFR1cGxlSGVhZGVyKSBQYWdlR2V0SXRlbShwYWdlLCBscHAp OworCQlkc3QtPnRfbGVuICA9IEl0ZW1JZEdldExlbmd0aChscHApOworCQlkc3QtPnRfdGFibGVP aWQgPSBSZWxhdGlvbkdldFJlbGlkKHNjYW4tPnJzX2Jhc2UucnNfcmQpOworCQlJdGVtUG9pbnRl clNldCgmKGRzdC0+dF9zZWxmKSwgc2Nhbi0+cnNfY2Jsb2NrLCBsaW5lb2ZmKTsKKworCQlpZiAo a2V5ICE9IE5VTEwgJiYKKwkJCSFIZWFwS2V5VGVzdChkc3QsIFJlbGF0aW9uR2V0RGVzY3Ioc2Nh bi0+cnNfYmFzZS5yc19yZCksCisJCQkJCQkgbmtleXMsIGtleSkpCisJCQljb250aW51ZTsKKwor CQlzY2FuLT5yc19jaW5kZXggPSBsaW5laW5kZXg7CisJCW5vdXQrKzsKKwl9CisKKwlyZXR1cm4g bm91dDsKK30KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoJCQkJCSBoZWFwIGFjY2VzcyBtZXRob2QgaW50ZXJm YWNlCkBAIC0xMTM2LDYgKzEyNTEsOCBAQCBoZWFwX2JlZ2luc2NhbihSZWxhdGlvbiByZWxhdGlv biwgU25hcHNob3Qgc25hcHNob3QsCiAJc2Nhbi0+cnNfYmFzZS5yc19wYXJhbGxlbCA9IHBhcmFs bGVsX3NjYW47CiAJc2Nhbi0+cnNfc3RyYXRlZ3kgPSBOVUxMOwkvKiBzZXQgaW4gaW5pdHNjYW4g Ki8KIAlzY2FuLT5yc19jYnVmID0gSW52YWxpZEJ1ZmZlcjsKKwlzY2FuLT5yc19iYXRjaF9jdHVw ID0gTlVMTDsKKwlzY2FuLT5yc19iYXRjaF9jYnVmID0gSW52YWxpZEJ1ZmZlcjsKIAogCS8qCiAJ ICogRGlzYWJsZSBwYWdlLWF0LWEtdGltZSBtb2RlIGlmIGl0J3Mgbm90IGEgTVZDQy1zYWZlIHNu YXBzaG90LgpAQCAtMTMxNSw2ICsxNDMyLDggQEAgaGVhcF9lbmRzY2FuKFRhYmxlU2NhbkRlc2Mg c3NjYW4pCiAJICovCiAJaWYgKEJ1ZmZlcklzVmFsaWQoc2Nhbi0+cnNfY2J1ZikpCiAJCVJlbGVh c2VCdWZmZXIoc2Nhbi0+cnNfY2J1Zik7CisJaWYgKEJ1ZmZlcklzVmFsaWQoc2Nhbi0+cnNfYmF0 Y2hfY2J1ZikpCisJCVJlbGVhc2VCdWZmZXIoc2Nhbi0+cnNfYmF0Y2hfY2J1Zik7CiAKIAkvKgog CSAqIE11c3QgZnJlZSB0aGUgcmVhZCBzdHJlYW0gYmVmb3JlIGZyZWVpbmcgdGhlIEJ1ZmZlckFj Y2Vzc1N0cmF0ZWd5LgpAQCAtMTQyMSw2ICsxNTQwLDk3IEBAIGhlYXBfZ2V0bmV4dHNsb3QoVGFi bGVTY2FuRGVzYyBzc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sIFR1cGxlVGFibGVTbG90 ICpzCiAJcmV0dXJuIHRydWU7CiB9CiAKKy8qLS0tLS0tLS0tLSBCYXRjaGluZyBzdXBwb3J0IC0t LS0tLS0tLS0tKi8KKworLyoKKyAqIGhlYXBfc2Nhbl9iZWdpbl9iYXRjaAorICoKKyAqIEFsbG9j YXRlIGEgSGVhcEJhdGNoIHdpdGggc3BhY2UgZm9yICdtYXhpdGVtcycgdHVwbGUgaGVhZGVycy4g Tm8gcGluIGlzCisgKiB0YWtlbiBoZXJlLiBNZW1vcnkgaXMgYWxsb2NhdGVkIHVuZGVyIHRoZSBz Y2FuJ3MgbWVtb3J5IGNvbnRleHQuCisgKi8KK3ZvaWQgKgoraGVhcF9iZWdpbl9iYXRjaChUYWJs ZVNjYW5EZXNjIHNzY2FuLCBpbnQgbWF4aXRlbXMpCit7CisJSGVhcEJhdGNoICAqaGI7CisJT2lk CQkJcmVsaWQ7CisKKwlBc3NlcnQobWF4aXRlbXMgPiAwKTsKKworCWhiID0gcGFsbG9jKHNpemVv ZihIZWFwQmF0Y2gpKTsKKwloYi0+dHVwZGF0YSA9IHBhbGxvYyhzaXplb2YoSGVhcFR1cGxlRGF0 YSkgKiBtYXhpdGVtcyk7CisJaGItPm1heGl0ZW1zID0gbWF4aXRlbXM7CisJaGItPm5pdGVtcyA9 IDA7CisJaGItPmJ1ZiA9IEludmFsaWRCdWZmZXI7CisKKwkvKiBJbml0aWFsaXplIHN0YXRpYyBm aWVsZHMgb2YgSGVhcFR1cGxlRGF0YS4gUm93IGJvZGllcyByZW1haW4gb24gcGFnZS4gKi8KKwly ZWxpZCA9IFJlbGF0aW9uR2V0UmVsaWQoc3NjYW4tPnJzX3JkKTsKKwlmb3IgKGludCBpID0gMDsg aSA8IG1heGl0ZW1zOyBpKyspCisJCWhiLT50dXBkYXRhW2ldLnRfdGFibGVPaWQgPSByZWxpZDsK KworCXJldHVybiBoYjsKK30KKworLyoKKyAqIGhlYXBfc2Nhbl9lbmRfYmF0Y2gKKyAqCisgKiBS ZWxlYXNlIGFueSBvdXRzdGFuZGluZyBwaW4gYW5kIGZyZWUgdGhlIGJhdGNoIGFsbG9jYXRpb25z LiBDYWxsZXIgd2lsbAorICogbm90IHVzZSAnYW1fYmF0Y2gnIGFmdGVyIHRoaXMgcG9pbnQuCisg Ki8KK3ZvaWQKK2hlYXBfZW5kX2JhdGNoKFRhYmxlU2NhbkRlc2Mgc3NjYW4sIHZvaWQgKmFtX2Jh dGNoKQoreworCUhlYXBCYXRjaCAqaGIgPSAoSGVhcEJhdGNoICopIGFtX2JhdGNoOworCisJaWYg KEJ1ZmZlcklzVmFsaWQoaGItPmJ1ZikpCisJCVJlbGVhc2VCdWZmZXIoaGItPmJ1Zik7CisKKwlw ZnJlZShoYi0+dHVwZGF0YSk7CisJcGZyZWUoaGIpOworfQorCitpbnQKK2hlYXBfZ2V0bmV4dGJh dGNoKFRhYmxlU2NhbkRlc2Mgc3NjYW4sIHZvaWQgKmFtX2JhdGNoLCBTY2FuRGlyZWN0aW9uIGRp cikKK3sKKwlIZWFwU2NhbkRlc2Mgc2NhbiA9IChIZWFwU2NhbkRlc2MpIHNzY2FuOworCUhlYXBC YXRjaCAgKmhiID0gKEhlYXBCYXRjaCAqKSBhbV9iYXRjaDsKKwlCdWZmZXIJCWN1cmJ1ZjsKKwlp bnQJCQluOworCisJQXNzZXJ0KFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSk7CisJQXNzZXJ0 KHNzY2FuLT5yc19mbGFncyAmIFNPX0FMTE9XX1BBR0VNT0RFKTsKKwlBc3NlcnQoaGItPm1heGl0 ZW1zID4gMCk7CisKKwkvKiBEcm9wIHByaW9yIGJhdGNoIHBpbiwgaWYgYW55LiAqLworCWlmIChC dWZmZXJJc1ZhbGlkKGhiLT5idWYpKQorCXsKKwkJUmVsZWFzZUJ1ZmZlcihoYi0+YnVmKTsKKwkJ aGItPmJ1ZiA9IEludmFsaWRCdWZmZXI7CisJfQorCisJaGItPm5pdGVtcyA9IDA7CisKKwkvKiBP bmUgY2FsbCBwZXIgYmF0Y2gsIG5ldmVyIGNyb3NzZXMgYSBwYWdlLiAqLworCW4gPSBoZWFwZ2V0 dHVwX3BhZ2Vtb2RlX2JhdGNoKHNjYW4sIGRpciwKKwkJCQkJCQkJICBzc2Nhbi0+cnNfbmtleXMs IHNzY2FuLT5yc19rZXksCisJCQkJCQkJCSAgaGItPnR1cGRhdGEsIGhiLT5tYXhpdGVtcyk7CisK KwlpZiAobiA9PSAwKQorCQlyZXR1cm4gMDsJLyogZW5kIG9mIHNjYW4gKi8KKworCS8qIEhvbGQg YSBzaGFyZWQgcGluIGZvciB0aGUgYmF0Y2ggbGlmZXRpbWUgc28gdF9kYXRhIHN0YXlzIHZhbGlk LiAqLworCWN1cmJ1ZiA9IHNjYW4tPnJzX2NidWY7CisJSW5jckJ1ZmZlclJlZkNvdW50KGN1cmJ1 Zik7CisJaGItPmJ1ZiA9IGN1cmJ1ZjsKKworCS8qIFBlci10dXBsZSBzdGF0cyAoY2FuIGJlIGNv bGxhcHNlZCBpbnRvIGEgZnV0dXJlIF9tdWx0aSgpIGNhbGwpLiAqLworCXBnc3RhdF9jb3VudF9o ZWFwX2dldG5leHRfYmF0Y2goc3NjYW4tPnJzX3JkLCBuKTsKKworCWhiLT5uaXRlbXMgPSBuOwor CXJldHVybiBuOworfQorCisvKi0tLS0tIEVuZCBvZiBiYXRjaGluZyBzdXBwb3J0IC0tLS0tKi8K Kwogdm9pZAogaGVhcF9zZXRfdGlkcmFuZ2UoVGFibGVTY2FuRGVzYyBzc2NhbiwgSXRlbVBvaW50 ZXIgbWludGlkLAogCQkJCSAgSXRlbVBvaW50ZXIgbWF4dGlkKQpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9o ZWFwL2hlYXBhbV9oYW5kbGVyLmMKaW5kZXggYmNiYWM4NDRiYjYuLmVjNGVlY2NmMTljIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCisrKyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKQEAgLTI2MjMsNiArMjYyMywx MCBAQCBzdGF0aWMgY29uc3QgVGFibGVBbVJvdXRpbmUgaGVhcGFtX21ldGhvZHMgPSB7CiAJLnNj YW5fcmVzY2FuID0gaGVhcF9yZXNjYW4sCiAJLnNjYW5fZ2V0bmV4dHNsb3QgPSBoZWFwX2dldG5l eHRzbG90LAogCisJLnNjYW5fYmVnaW5fYmF0Y2ggPSBoZWFwX2JlZ2luX2JhdGNoLAorCS5zY2Fu X2dldG5leHRiYXRjaCA9IGhlYXBfZ2V0bmV4dGJhdGNoLAorCS5zY2FuX2VuZF9iYXRjaCA9IGhl YXBfZW5kX2JhdGNoLAorCiAJLnNjYW5fc2V0X3RpZHJhbmdlID0gaGVhcF9zZXRfdGlkcmFuZ2Us CiAJLnNjYW5fZ2V0bmV4dHNsb3RfdGlkcmFuZ2UgPSBoZWFwX2dldG5leHRzbG90X3RpZHJhbmdl LAogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmggYi9zcmMvaW5jbHVk ZS9hY2Nlc3MvaGVhcGFtLmgKaW5kZXggZTYwZDM0ZGFkMjUuLjAyZjc3OTNmYmEwIDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNz L2hlYXBhbS5oCkBAIC03NCw2ICs3NCw5IEBAIHR5cGVkZWYgc3RydWN0IEhlYXBTY2FuRGVzY0Rh dGEKIAogCUhlYXBUdXBsZURhdGEgcnNfY3R1cDsJCS8qIGN1cnJlbnQgdHVwbGUgaW4gc2Nhbiwg aWYgYW55ICovCiAKKwlIZWFwVHVwbGVEYXRhICpyc19iYXRjaF9jdHVwOwkvKiBOVUxMIHdoZW4g bm90IHVzaW5nIGJhdGNoZWQgbW9kZSAqLworCUJ1ZmZlcglyc19iYXRjaF9jYnVmOwkJLyogYnVm ZmVyIGZlZWRpbmcgdGhlIGJhdGNoICovCisKIAkvKiBGb3Igc2NhbnMgdGhhdCBzdHJlYW0gcmVh ZHMgKi8KIAlSZWFkU3RyZWFtICpyc19yZWFkX3N0cmVhbTsKIApAQCAtMTAxLDYgKzEwNCwxOSBA QCB0eXBlZGVmIHN0cnVjdCBIZWFwU2NhbkRlc2NEYXRhCiB9IEhlYXBTY2FuRGVzY0RhdGE7CiB0 eXBlZGVmIHN0cnVjdCBIZWFwU2NhbkRlc2NEYXRhICpIZWFwU2NhbkRlc2M7CiAKKy8qCisgKiBI ZWFwQmF0Y2ggLS0gc3RhdGVsZXNzIHBlci1iYXRjaCBidWZmZXIuIEEgYmF0Y2ggcGlucyBvbmUg cGFnZSBhbmQKKyAqIGV4cG9zZXMgdXAgdG8gbWF4aXRlbXMgSGVhcFR1cGxlRGF0YSBoZWFkZXJz IHdob3NlIHRfZGF0YSBwb2ludCBpbnRvIHRoYXQKKyAqIHBhZ2UuCisgKi8KK3R5cGVkZWYgc3Ry dWN0IEhlYXBCYXRjaAoreworCUhlYXBUdXBsZURhdGEgICp0dXBkYXRhOwkvKiBsZW4gPSBtYXhp dGVtczsgaGVhZGVycyBvbmx5ICovCisJaW50CQkJCW5pdGVtczsJCS8qIHR1cGxlcyBwcm9kdWNl ZCBpbiBsYXN0IGdldG5leHRiYXRjaCgpICovCisJaW50CQkJCW1heGl0ZW1zOwkvKiBmaXhlZCBj YXBhY2l0eSBzZXQgYXQgYmVnaW5fYmF0Y2goKSAqLworCUJ1ZmZlcgkJCWJ1ZjsJCS8qIHNpbmds ZSBwaW5uZWQgYnVmZmVyIGZvciB0aGlzIGJhdGNoICovCit9IEhlYXBCYXRjaDsKKwogdHlwZWRl ZiBzdHJ1Y3QgQml0bWFwSGVhcFNjYW5EZXNjRGF0YQogewogCUhlYXBTY2FuRGVzY0RhdGEgcnNf aGVhcF9iYXNlOwpAQCAtMjk0LDYgKzMxMCwxMSBAQCBleHRlcm4gdm9pZCBoZWFwX2VuZHNjYW4o VGFibGVTY2FuRGVzYyBzc2Nhbik7CiBleHRlcm4gSGVhcFR1cGxlIGhlYXBfZ2V0bmV4dChUYWJs ZVNjYW5EZXNjIHNzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbik7CiBleHRlcm4gYm9vbCBo ZWFwX2dldG5leHRzbG90KFRhYmxlU2NhbkRlc2Mgc3NjYW4sCiAJCQkJCQkJIFNjYW5EaXJlY3Rp b24gZGlyZWN0aW9uLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCk7CisKK2V4dGVybiB2b2lkICpoZWFw X2JlZ2luX2JhdGNoKFRhYmxlU2NhbkRlc2Mgc3NjYW4sIGludCBtYXhpdGVtcyk7CitleHRlcm4g dm9pZCBoZWFwX2VuZF9iYXRjaChUYWJsZVNjYW5EZXNjIHNzY2FuLCB2b2lkICphbV9iYXRjaCk7 CitleHRlcm4gaW50IGhlYXBfZ2V0bmV4dGJhdGNoKFRhYmxlU2NhbkRlc2Mgc3NjYW4sIHZvaWQg KmFtX2JhdGNoLCBTY2FuRGlyZWN0aW9uIGRpcik7CisKIGV4dGVybiB2b2lkIGhlYXBfc2V0X3Rp ZHJhbmdlKFRhYmxlU2NhbkRlc2Mgc3NjYW4sIEl0ZW1Qb2ludGVyIG1pbnRpZCwKIAkJCQkJCQkg IEl0ZW1Qb2ludGVyIG1heHRpZCk7CiBleHRlcm4gYm9vbCBoZWFwX2dldG5leHRzbG90X3RpZHJh bmdlKFRhYmxlU2NhbkRlc2Mgc3NjYW4sCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3Mv dGFibGVhbS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaAppbmRleCBlMTZiZjAyNTY5 Mi4uOTUzMjA3ZWFjNTAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgK KysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaApAQCAtMzUxLDYgKzM1MSwxNiBAQCB0 eXBlZGVmIHN0cnVjdCBUYWJsZUFtUm91dGluZQogCQkJCQkJCQkJIFNjYW5EaXJlY3Rpb24gZGly ZWN0aW9uLAogCQkJCQkJCQkJIFR1cGxlVGFibGVTbG90ICpzbG90KTsKIAorCS8qIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorCSAqIEJhdGNoZWQgc2NhbiBzdXBwb3J0CisJICogLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJ ICovCisKKwl2b2lkCSAgICooKnNjYW5fYmVnaW5fYmF0Y2gpKFRhYmxlU2NhbkRlc2Mgc3NjYW4s IGludCBtYXhpdGVtcyk7CisJaW50CQkJKCpzY2FuX2dldG5leHRiYXRjaCkoVGFibGVTY2FuRGVz YyBzc2Nhbiwgdm9pZCAqYW1fYmF0Y2gsCisJCQkJCQkJCQkgU2NhbkRpcmVjdGlvbiBkaXIpOwor CXZvaWQJCSgqc2Nhbl9lbmRfYmF0Y2gpKFRhYmxlU2NhbkRlc2Mgc3NjYW4sIHZvaWQgKmFtX2Jh dGNoKTsKKwogCS8qLS0tLS0tLS0tLS0KIAkgKiBPcHRpb25hbCBmdW5jdGlvbnMgdG8gcHJvdmlk ZSBzY2FubmluZyBmb3IgcmFuZ2VzIG9mIEl0ZW1Qb2ludGVycy4KIAkgKiBJbXBsZW1lbnRhdGlv bnMgbXVzdCBlaXRoZXIgcHJvdmlkZSBib3RoIG9mIHRoZXNlIGZ1bmN0aW9ucywgb3IgbmVpdGhl cgpAQCAtMTAzNiw2ICsxMDQ2LDU0IEBAIHRhYmxlX3NjYW5fZ2V0bmV4dHNsb3QoVGFibGVTY2Fu RGVzYyBzc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sIFR1cGxlVGFibGVTCiAJcmV0dXJu IHNzY2FuLT5yc19yZC0+cmRfdGFibGVhbS0+c2Nhbl9nZXRuZXh0c2xvdChzc2NhbiwgZGlyZWN0 aW9uLCBzbG90KTsKIH0KIAorLyoKKyAqIHRhYmxlX3NjYW5fYmVnaW5fYmF0Y2gKKyAqCQlBbGxv Y2F0ZSBBTS1vd25lZCBiYXRjaCBwYXlsb2FkIHdpdGggY2FwYWNpdHkgJ21heGl0ZW1zJy4KKyAq Lworc3RhdGljIGlubGluZSB2b2lkICoKK3RhYmxlX3NjYW5fYmVnaW5fYmF0Y2goVGFibGVTY2Fu RGVzYyBzc2NhbiwgaW50IG1heGl0ZW1zKQoreworCWNvbnN0IFRhYmxlQW1Sb3V0aW5lICp0YW0g PSBzc2Nhbi0+cnNfcmQtPnJkX3RhYmxlYW07CisKKwlBc3NlcnQodGFtLT5zY2FuX2JlZ2luX2Jh dGNoICE9IE5VTEwpOworCisJcmV0dXJuIHRhbS0+c2Nhbl9iZWdpbl9iYXRjaChzc2NhbiwgbWF4 aXRlbXMpOworfQorCisvKgorICogdGFibGVfc2Nhbl9nZXRuZXh0YmF0Y2gKKyAqCQlGaWxsIG5l eHQgYmF0Y2ggZnJvbSB0aGUgQU0uIFJldHVybnMgbnVtYmVyIG9mIHR1cGxlcywgMCA9PiBFT1Mu CisgKgkJQmF0Y2hlcyBhcmUgc2luZ2xlLXBhZ2UgaW4gdjEuIERpcmVjdGlvbiBpcyBmb3J3YXJk IG9ubHkgaW4gdjEuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50Cit0YWJsZV9zY2FuX2dldG5leHRi YXRjaChUYWJsZVNjYW5EZXNjIHNzY2FuLCB2b2lkICphbV9iYXRjaCwgU2NhbkRpcmVjdGlvbiBk aXIpCit7CisJY29uc3QgVGFibGVBbVJvdXRpbmUgKnRhbSA9IHNzY2FuLT5yc19yZC0+cmRfdGFi bGVhbTsKKworCS8qIE9ubHkgZm9yd2FyZCBzY2FucyBhcmUgc3VwcG9ydGVkIGluIHRoZSBiYXRj aGVkIG1vZGUuICovCisJQXNzZXJ0KGRpciA9PSBGb3J3YXJkU2NhbkRpcmVjdGlvbik7CisJQXNz ZXJ0KHRhbS0+c2Nhbl9nZXRuZXh0YmF0Y2ggIT0gTlVMTCk7CisKKwlyZXR1cm4gdGFtLT5zY2Fu X2dldG5leHRiYXRjaChzc2NhbiwgYW1fYmF0Y2gsIGRpcik7Cit9CisKKy8qCisgKiB0YWJsZV9z Y2FuX2VuZF9iYXRjaAorICoJCVJlbGVhc2UgQU0tb3duZWQgcmVzb3VyY2VzIGZvciB0aGUgYmF0 Y2ggcGF5bG9hZC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCit0YWJsZV9zY2FuX2VuZF9iYXRj aChUYWJsZVNjYW5EZXNjIHNzY2FuLCB2b2lkICphbV9iYXRjaCkKK3sKKwljb25zdCBUYWJsZUFt Um91dGluZSAqdGFtID0gc3NjYW4tPnJzX3JkLT5yZF90YWJsZWFtOworCisJaWYgKGFtX2JhdGNo ID09IE5VTEwpCisJCXJldHVybjsKKworCUFzc2VydCh0YW0tPnNjYW5fZW5kX2JhdGNoICE9IE5V TEwpOworCisJdGFtLT5zY2FuX2VuZF9iYXRjaChzc2NhbiwgYW1fYmF0Y2gpOworfQorCiAvKiAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBUSUQgUmFuZ2Ugc2Nhbm5pbmcgcmVsYXRlZCBmdW5jdGlv bnMuCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9wZ3N0 YXQuaCBiL3NyYy9pbmNsdWRlL3Bnc3RhdC5oCmluZGV4IGU0YTU5YTMwYjhjLi5hYWVhOTUyMGIx ZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcGdzdGF0LmgKKysrIGIvc3JjL2luY2x1ZGUvcGdz dGF0LmgKQEAgLTY4Nyw2ICs2ODcsMTEgQEAgZXh0ZXJuIHZvaWQgcGdzdGF0X3JlcG9ydF9hbmFs eXplKFJlbGF0aW9uIHJlbCwKIAkJaWYgKHBnc3RhdF9zaG91bGRfY291bnRfcmVsYXRpb24ocmVs KSkJCQkJCQlcCiAJCQkocmVsKS0+cGdzdGF0X2luZm8tPmNvdW50cy50dXBsZXNfcmV0dXJuZWQr KzsJCQlcCiAJfSB3aGlsZSAoMCkKKyNkZWZpbmUgcGdzdGF0X2NvdW50X2hlYXBfZ2V0bmV4dF9i YXRjaChyZWwsIG4pCQkJCQkJXAorCWRvIHsJCQkJCQkJCQkJCQkJCQlcCisJCWlmIChwZ3N0YXRf c2hvdWxkX2NvdW50X3JlbGF0aW9uKHJlbCkpCQkJCQkJXAorCQkJKHJlbCktPnBnc3RhdF9pbmZv LT5jb3VudHMudHVwbGVzX3JldHVybmVkICs9IG47CQlcCisJfSB3aGlsZSAoMCkKICNkZWZpbmUg cGdzdGF0X2NvdW50X2hlYXBfZmV0Y2gocmVsKQkJCQkJCQkJXAogCWRvIHsJCQkJCQkJCQkJCQkJ CQlcCiAJCWlmIChwZ3N0YXRfc2hvdWxkX2NvdW50X3JlbGF0aW9uKHJlbCkpCQkJCQkJXAotLSAK Mi40My4wCgo= --0000000000002b1beb063fb44440 Content-Type: application/octet-stream; name="v1-0003-Executor-add-ExecProcNodeBatch-and-integrate-SeqS.patch" Content-Disposition: attachment; filename="v1-0003-Executor-add-ExecProcNodeBatch-and-integrate-SeqS.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mg0jlk7x5 RnJvbSA2NDk3MWVlMDUwYzg2MzI2YzJjYTYwMjNjMzAyY2ZmNjYxMzgzMjUxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IE1vbiwgMSBTZXAgMjAyNSAyMjoxODozMCArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjEg My84XSBFeGVjdXRvcjogYWRkIEV4ZWNQcm9jTm9kZUJhdGNoKCkgYW5kIGludGVncmF0ZQogU2Vx U2NhbiB3aXRoIGJhdGNoIEFQSQpNSU1FLVZlcnNpb246IDEuMApDb250ZW50LVR5cGU6IHRleHQv cGxhaW47IGNoYXJzZXQ9VVRGLTgKQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAoKSW50 cm9kdWNlIGEgYmF0Y2gtY2FwYWJsZSBleGVjdXRvciBpbnRlcmZhY2UgYWxvbmdzaWRlIHRoZSBl eGlzdGluZwpzbG90LWF0LWEtdGltZSBwYXRoOgoKICogRXhlY1Byb2NOb2RlQmF0Y2goKSBpcyBh ZGRlZCB0byByZXR1cm4gYSBUdXBsZUJhdGNoIGluc3RlYWQgb2YgYQogICBUdXBsZVRhYmxlU2xv dC4gUGxhblN0YXRlIGdhaW5zIEV4ZWNQcm9jTm9kZUJhdGNoIGFzIGEgZnVuY3Rpb24KICAgcG9p bnRlci4KCkludGVncmF0ZSBTZXFTY2FuIHdpdGggdGhpcyBpbnRlcmZhY2U6CgogKiBBZGQgRXhl Y1NlcVNjYW5CYXRjaCogcm91dGluZXMgdGhhdCBkcml2ZSBoZWFwIHZpYSB0aGUgYmF0Y2ggdGFi bGUKICAgQU0gQVBJIGFuZCByZXR1cm4gYSBUdXBsZUJhdGNoLgogKiBBdCBpbml0LCBzZXQgcHMu RXhlY1Byb2NOb2RlQmF0Y2ggdG8gdGhlc2Ugcm91dGluZXMgd2hlbgogICBTY2FuQ2FuVXNlQmF0 Y2hpbmcoKSBhbGxvd3MuCiAqIFJldGFpbiBFeGVjU2VxU2NhbkJhdGNoU2xvdCogdmFyaWFudHMg Zm9yIHNsb3QtYXQtYS10aW1lIGNvbnN1bWVycy4KClRoaXMgYnVpbGRzIG9uIDAwMDIsIHdoaWNo IGludHJvZHVjZWQgVHVwbGVCYXRjaCBhbmQgbWFkZSBTZXFTY2FuCmNvbnN1bWUgdGhlIEFN4oCZ cyBiYXRjaCBBUEkgaW50ZXJuYWxseSBidXQgc3RpbGwgc3VyZmFjZSBzbG90cy4gV2l0aCB0aGlz CnBhdGNoLCBTZXFTY2FuIGNhbiBzdXJmYWNlIGJhdGNoZXMgZGlyZWN0bHkgdG8gYmF0Y2gtYXdh cmUgdXBwZXIgbm9kZXMuCgpQbGFuIHNoYXBlIGFuZCBFWFBMQUlOIG91dHB1dCByZW1haW4gdW5j aGFuZ2VkOyBvbmx5IGludGVybmFsIHR1cGxlIGZsb3cKZGlmZmVycyB3aGVuIGJhdGNoaW5nIGlz IGVuYWJsZWQgYW5kIGFsbG93ZWQuCi0tLQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1Byb2Nu b2RlLmMgfCA1MiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvZXhl Y3V0b3Ivbm9kZVNlcXNjYW4uYyAgfCAzNSArKysrKysrKysrKysrKysrKysrCiBzcmMvaW5jbHVk ZS9leGVjdXRvci9leGVjU2Nhbi5oICAgICB8IDUxICsrKysrKysrKysrKysrKysrKysrKysrKysr KysKIHNyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmggICAgIHwgMTAgKysrKysrCiBzcmMv aW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaCAgICAgICB8ICA1ICsrKwogNSBmaWxlcyBjaGFuZ2Vk LCAxNTMgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4 ZWNQcm9jbm9kZS5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1Byb2Nub2RlLmMKaW5kZXgg ZjVmOWNmYmVlYWQuLmE4YzAzMTVlODc0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRv ci9leGVjUHJvY25vZGUuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUHJvY25vZGUu YwpAQCAtMTIxLDYgKzEyMSw4IEBACiAKIHN0YXRpYyBUdXBsZVRhYmxlU2xvdCAqRXhlY1Byb2NO b2RlRmlyc3QoUGxhblN0YXRlICpub2RlKTsKIHN0YXRpYyBUdXBsZVRhYmxlU2xvdCAqRXhlY1By b2NOb2RlSW5zdHIoUGxhblN0YXRlICpub2RlKTsKK3N0YXRpYyBUdXBsZUJhdGNoICpFeGVjUHJv Y05vZGVCYXRjaEZpcnN0KFBsYW5TdGF0ZSAqbm9kZSk7CitzdGF0aWMgVHVwbGVCYXRjaCAqRXhl Y1Byb2NOb2RlQmF0Y2hJbnN0cihQbGFuU3RhdGUgKm5vZGUpOwogc3RhdGljIGJvb2wgRXhlY1No dXRkb3duTm9kZV93YWxrZXIoUGxhblN0YXRlICpub2RlLCB2b2lkICpjb250ZXh0KTsKIAogCkBA IC0zODksNiArMzkxLDggQEAgRXhlY0luaXROb2RlKFBsYW4gKm5vZGUsIEVTdGF0ZSAqZXN0YXRl LCBpbnQgZWZsYWdzKQogCX0KIAogCUV4ZWNTZXRFeGVjUHJvY05vZGUocmVzdWx0LCByZXN1bHQt PkV4ZWNQcm9jTm9kZSk7CisJaWYgKHJlc3VsdC0+RXhlY1Byb2NOb2RlQmF0Y2gpCisJCUV4ZWNT ZXRFeGVjUHJvY05vZGVCYXRjaChyZXN1bHQsIHJlc3VsdC0+RXhlY1Byb2NOb2RlQmF0Y2gpOwog CiAJLyoKIAkgKiBJbml0aWFsaXplIGFueSBpbml0UGxhbnMgcHJlc2VudCBpbiB0aGlzIG5vZGUu ICBUaGUgcGxhbm5lciBwdXQgdGhlbSBpbgpAQCAtNDg5LDYgKzQ5Myw1NCBAQCBFeGVjUHJvY05v ZGVJbnN0cihQbGFuU3RhdGUgKm5vZGUpCiAJcmV0dXJuIHJlc3VsdDsKIH0KIAorLyoKKyAqIEV4 ZWNTZXRFeGVjUHJvY05vZGVCYXRjaAorICoJCUluc3RhbGwgRXhlY1Byb2NOb2RlQmF0Y2ggd2l0 aCBmaXJzdC1jYWxsIHdyYXBwZXIsIG1pcnJvcmluZyByb3cgcGF0aC4KKyAqLwordm9pZAorRXhl Y1NldEV4ZWNQcm9jTm9kZUJhdGNoKFBsYW5TdGF0ZSAqbm9kZSwgRXhlY1Byb2NOb2RlQmF0Y2hN dGQgZnVuY3Rpb24pCit7CisJbm9kZS0+RXhlY1Byb2NOb2RlQmF0Y2hSZWFsID0gZnVuY3Rpb247 CisJbm9kZS0+RXhlY1Byb2NOb2RlQmF0Y2ggPSBFeGVjUHJvY05vZGVCYXRjaEZpcnN0OworfQor CisvKgorICogRXhlY1Byb2NOb2RlQmF0Y2hGaXJzdAorICoJCU9uZS10aW1lIHN0YWNrLWRlcHRo IGNoZWNrOyB0aGVuIHBpY2sgaW5zdHJ1bWVudC9uby1pbnN0cnVtZW50IHdyYXBwZXIuCisgKi8K K3N0YXRpYyBUdXBsZUJhdGNoICoKK0V4ZWNQcm9jTm9kZUJhdGNoRmlyc3QoUGxhblN0YXRlICpu b2RlKQoreworCWNoZWNrX3N0YWNrX2RlcHRoKCk7CisKKwlpZiAobm9kZS0+aW5zdHJ1bWVudCkK KwkJbm9kZS0+RXhlY1Byb2NOb2RlQmF0Y2ggPSBFeGVjUHJvY05vZGVCYXRjaEluc3RyOworCWVs c2UKKwkJbm9kZS0+RXhlY1Byb2NOb2RlQmF0Y2ggPSBub2RlLT5FeGVjUHJvY05vZGVCYXRjaFJl YWw7CisKKwlyZXR1cm4gbm9kZS0+RXhlY1Byb2NOb2RlQmF0Y2gobm9kZSk7Cit9CisKKy8qCisg KiBFeGVjUHJvY05vZGVCYXRjaEluc3RyCisgKgkJSW5zdHJ1bWVudGF0aW9uIHdyYXBwZXIgZm9y IGJhdGNoIGNhbGxzLgorICoKKyAqIE5vdGU6IHdlIGNhbiByZWNvcmQgbnJvd3MgYXMgdGhlICJ0 dXBsZSIgY291bnQgZm9yIHRoaXMgY2FsbC4gVGhhdCBrZWVwcworICogaW5zdHJ1bWVudGF0aW9u IG1lYW5pbmdmdWwgd2l0aG91dCBjaGFuZ2luZyBJbnN0ciBBUEkuCisgKi8KK3N0YXRpYyBUdXBs ZUJhdGNoICoKK0V4ZWNQcm9jTm9kZUJhdGNoSW5zdHIoUGxhblN0YXRlICpub2RlKQoreworCVR1 cGxlQmF0Y2ggKmI7CisKKwlJbnN0clN0YXJ0Tm9kZShub2RlLT5pbnN0cnVtZW50KTsKKworCWIg PSBub2RlLT5FeGVjUHJvY05vZGVCYXRjaFJlYWwobm9kZSk7CisKKwlJbnN0clN0b3BOb2RlKG5v ZGUtPmluc3RydW1lbnQsIGIgPyAoZG91YmxlKSBiLT5udmFsaWQgOiAwLjApOworCisJcmV0dXJu IGI7Cit9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqCQlNdWx0aUV4ZWNQcm9jTm9kZQpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVNlcXNjYW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9y L25vZGVTZXFzY2FuLmMKaW5kZXggMjU1MmQ0MjBmMWMuLjNmN2U0MGM4OTA4IDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlU2Vxc2Nhbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL25vZGVTZXFzY2FuLmMKQEAgLTMzNCw2ICszMzQsMzcgQEAgRXhlY1NlcVNjYW5CYXRj aFNsb3RXaXRoUXVhbFByb2plY3QoUGxhblN0YXRlICpwc3RhdGUpCiAJCQkJCQkJCQkgcHN0YXRl LT5xdWFsLCBwc3RhdGUtPnBzX1Byb2pJbmZvKTsKIH0KIAorc3RhdGljIFR1cGxlQmF0Y2ggKgor RXhlY1NlcVNjYW5CYXRjaChQbGFuU3RhdGUgKnBzdGF0ZSkKK3sKKwlTZXFTY2FuU3RhdGUgKm5v ZGUgPSBjYXN0Tm9kZShTZXFTY2FuU3RhdGUsIHBzdGF0ZSk7CisKKwlBc3NlcnQocHN0YXRlLT5z dGF0ZS0+ZXNfZXBxX2FjdGl2ZSA9PSBOVUxMKTsKKwlBc3NlcnQocHN0YXRlLT5xdWFsID09IE5V TEwpOworCUFzc2VydChwc3RhdGUtPnBzX1Byb2pJbmZvID09IE5VTEwpOworCisJcmV0dXJuIEV4 ZWNTY2FuRXh0ZW5kZWRCYXRjaCgmbm9kZS0+c3MsCisJCQkJCQkJCSAoRXhlY1NjYW5BY2Nlc3NC YXRjaE10ZCkgU2VxTmV4dEJhdGNoTWF0ZXJpYWxpemUsCisJCQkJCQkJCSBOVUxMLCBOVUxMKTsK K30KKworLyoKKyAqIFZhcmlhbnQgb2YgRXhlY1NlcVNjYW4oKSBidXQgd2hlbiBxdWFsIGV2YWx1 YXRpb24gaXMgcmVxdWlyZWQuCisgKi8KK3N0YXRpYyBUdXBsZUJhdGNoICoKK0V4ZWNTZXFTY2Fu QmF0Y2hXaXRoUXVhbChQbGFuU3RhdGUgKnBzdGF0ZSkKK3sKKwlTZXFTY2FuU3RhdGUgKm5vZGUg PSBjYXN0Tm9kZShTZXFTY2FuU3RhdGUsIHBzdGF0ZSk7CisKKwlBc3NlcnQocHN0YXRlLT5zdGF0 ZS0+ZXNfZXBxX2FjdGl2ZSA9PSBOVUxMKTsKKwlwZ19hc3N1bWUocHN0YXRlLT5xdWFsICE9IE5V TEwpOworCUFzc2VydChwc3RhdGUtPnBzX1Byb2pJbmZvID09IE5VTEwpOworCisJcmV0dXJuIEV4 ZWNTY2FuRXh0ZW5kZWRCYXRjaCgmbm9kZS0+c3MsCisJCQkJCQkJCSAoRXhlY1NjYW5BY2Nlc3NC YXRjaE10ZCkgU2VxTmV4dEJhdGNoTWF0ZXJpYWxpemUsCisJCQkJCQkJCSBwc3RhdGUtPnF1YWws IE5VTEwpOworfQorCiAvKiBCYXRjaCBTZXFTY2FuIGVuYWJsZW1lbnQgYW5kIGRpc3BhdGNoICov CiBzdGF0aWMgdm9pZAogU2VxU2NhbkluaXRCYXRjaGluZyhTZXFTY2FuU3RhdGUgKnNjYW5zdGF0 ZSwgaW50IGVmbGFncykKQEAgLTM0OCwxMCArMzc5LDEyIEBAIFNlcVNjYW5Jbml0QmF0Y2hpbmco U2VxU2NhblN0YXRlICpzY2Fuc3RhdGUsIGludCBlZmxhZ3MpCiAJewogCQlpZiAoc2NhbnN0YXRl LT5zcy5wcy5wc19Qcm9qSW5mbyA9PSBOVUxMKQogCQl7CisJCQlzY2Fuc3RhdGUtPnNzLnBzLkV4 ZWNQcm9jTm9kZUJhdGNoID0gRXhlY1NlcVNjYW5CYXRjaDsKIAkJCXNjYW5zdGF0ZS0+c3MucHMu RXhlY1Byb2NOb2RlID0gRXhlY1NlcVNjYW5CYXRjaFNsb3Q7CiAJCX0KIAkJZWxzZQogCQl7CisJ CQlzY2Fuc3RhdGUtPnNzLnBzLkV4ZWNQcm9jTm9kZUJhdGNoID0gTlVMTDsKIAkJCXNjYW5zdGF0 ZS0+c3MucHMuRXhlY1Byb2NOb2RlID0gRXhlY1NlcVNjYW5CYXRjaFNsb3RXaXRoUHJvamVjdDsK IAkJfQogCX0KQEAgLTM1OSwxMCArMzkyLDEyIEBAIFNlcVNjYW5Jbml0QmF0Y2hpbmcoU2VxU2Nh blN0YXRlICpzY2Fuc3RhdGUsIGludCBlZmxhZ3MpCiAJewogCQlpZiAoc2NhbnN0YXRlLT5zcy5w cy5wc19Qcm9qSW5mbyA9PSBOVUxMKQogCQl7CisJCQlzY2Fuc3RhdGUtPnNzLnBzLkV4ZWNQcm9j Tm9kZUJhdGNoID0gRXhlY1NlcVNjYW5CYXRjaFdpdGhRdWFsOwogCQkJc2NhbnN0YXRlLT5zcy5w cy5FeGVjUHJvY05vZGUgPSBFeGVjU2VxU2NhbkJhdGNoU2xvdFdpdGhRdWFsOwogCQl9CiAJCWVs c2UKIAkJeworCQkJc2NhbnN0YXRlLT5zcy5wcy5FeGVjUHJvY05vZGVCYXRjaCA9IE5VTEw7CiAJ CQlzY2Fuc3RhdGUtPnNzLnBzLkV4ZWNQcm9jTm9kZSA9IEV4ZWNTZXFTY2FuQmF0Y2hTbG90V2l0 aFF1YWxQcm9qZWN0OwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvZXhlY3V0b3Iv ZXhlY1NjYW4uaCBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNTY2FuLmgKaW5kZXggZmVjNjA2 NDcxYzguLmZiNGI1N2E4MzFjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVj U2Nhbi5oCisrKyBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNTY2FuLmgKQEAgLTI5Nyw0ICsy OTcsNTUgQEAgRXhlY1NjYW5FeHRlbmRlZEJhdGNoU2xvdChTY2FuU3RhdGUgKm5vZGUsCiAJfQog fQogCitzdGF0aWMgaW5saW5lIFR1cGxlQmF0Y2ggKgorRXhlY1NjYW5FeHRlbmRlZEJhdGNoKFNj YW5TdGF0ZSAqbm9kZSwKKwkJCQkJICBFeGVjU2NhbkFjY2Vzc0JhdGNoTXRkIGFjY2Vzc0JhdGNo TXRkLAorCQkJCQkgIEV4cHJTdGF0ZSAqcXVhbCwgUHJvamVjdGlvbkluZm8gKnByb2pJbmZvKQor eworCUV4cHJDb250ZXh0ICplY29udGV4dCA9IG5vZGUtPnBzLnBzX0V4cHJDb250ZXh0OworCVR1 cGxlQmF0Y2ggKmIgPSBub2RlLT5wcy5wc19CYXRjaDsKKwlpbnQJCQlxdWFsaWZpZWQ7CisKKwkv KiBCYXRjaCBwYXRoIGRvZXMgbm90IHN1cHBvcnQgRVBRICovCisJQXNzZXJ0KG5vZGUtPnBzLnN0 YXRlLT5lc19lcHFfYWN0aXZlID09IE5VTEwpOworCUFzc2VydChUdXBsZUJhdGNoSXNWYWxpZChi KSk7CisKKwlmb3IgKDs7KQorCXsKKwkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKKworCQkvKiBH ZXQgbmV4dCBiYXRjaCBmcm9tIHRoZSBBTSAqLworCQlpZiAoIWFjY2Vzc0JhdGNoTXRkKG5vZGUp KQorCQkJcmV0dXJuIE5VTEw7CisKKwkJaWYgKHF1YWwgIT0gTlVMTCkKKwkJeworCQkJcXVhbGlm aWVkID0gMDsKKwkJCXdoaWxlIChUdXBsZUJhdGNoSGFzTW9yZShiKSkKKwkJCXsKKwkJCQlUdXBs ZVRhYmxlU2xvdCAqaW4gPSBUdXBsZUJhdGNoR2V0TmV4dFNsb3QoYik7CisKKwkJCQlBc3NlcnQo aW4pOworCQkJCVJlc2V0RXhwckNvbnRleHQoZWNvbnRleHQpOworCQkJCWVjb250ZXh0LT5lY3h0 X3NjYW50dXBsZSA9IGluOworCisJCQkJaWYgKEV4ZWNRdWFsKHF1YWwsIGVjb250ZXh0KSkKKwkJ CQl7CisJCQkJCVR1cGxlQmF0Y2hTdG9yZUluT3V0KGIsIHF1YWxpZmllZCwgaW4pOworCQkJCQlx dWFsaWZpZWQrKzsKKwkJCQl9CisJCQkJZWxzZQorCQkJCQlJbnN0ckNvdW50RmlsdGVyZWQxKG5v ZGUsIDEpOworCQkJfQorCQkJVHVwbGVCYXRjaFVzZU91dHB1dChiLCBxdWFsaWZpZWQpOworCQl9 CisJCWVsc2UKKwkJCXF1YWxpZmllZCA9IGItPm52YWxpZDsKKworCQlpZiAocXVhbGlmaWVkID4g MCkKKwkJCXJldHVybiBiOworCQkvKiBlbHNlIGdldCB0aGUgbmV4dCBiYXRjaCBmcm9tIHRoZSBB TSAqLworCX0KK30KKwogI2VuZGlmCQkJCQkJCS8qIEVYRUNTQ0FOX0ggKi8KZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmggYi9zcmMvaW5jbHVkZS9leGVjdXRvci9l eGVjdXRvci5oCmluZGV4IDE3MjU4ZjdhZTJkLi5jZjViMGM3ZTA1YyAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaAorKysgYi9zcmMvaW5jbHVkZS9leGVjdXRvci9l eGVjdXRvci5oCkBAIC0yOTQsNiArMjk0LDcgQEAgZXh0ZXJuIHZvaWQgRXZhbFBsYW5RdWFsRW5k KEVQUVN0YXRlICplcHFzdGF0ZSk7CiAgKi8KIGV4dGVybiBQbGFuU3RhdGUgKkV4ZWNJbml0Tm9k ZShQbGFuICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncyk7CiBleHRlcm4gdm9pZCBF eGVjU2V0RXhlY1Byb2NOb2RlKFBsYW5TdGF0ZSAqbm9kZSwgRXhlY1Byb2NOb2RlTXRkIGZ1bmN0 aW9uKTsKK2V4dGVybiB2b2lkIEV4ZWNTZXRFeGVjUHJvY05vZGVCYXRjaChQbGFuU3RhdGUgKm5v ZGUsIEV4ZWNQcm9jTm9kZUJhdGNoTXRkIGZ1bmN0aW9uKTsKIGV4dGVybiBOb2RlICpNdWx0aUV4 ZWNQcm9jTm9kZShQbGFuU3RhdGUgKm5vZGUpOwogZXh0ZXJuIHZvaWQgRXhlY0VuZE5vZGUoUGxh blN0YXRlICpub2RlKTsKIGV4dGVybiB2b2lkIEV4ZWNTaHV0ZG93bk5vZGUoUGxhblN0YXRlICpu b2RlKTsKQEAgLTMxNSw2ICszMTYsMTUgQEAgRXhlY1Byb2NOb2RlKFBsYW5TdGF0ZSAqbm9kZSkK IAogCXJldHVybiBub2RlLT5FeGVjUHJvY05vZGUobm9kZSk7CiB9CisKK3N0YXRpYyBpbmxpbmUg VHVwbGVCYXRjaCAqCitFeGVjUHJvY05vZGVCYXRjaChQbGFuU3RhdGUgKm5vZGUpCit7CisJaWYg KG5vZGUtPmNoZ1BhcmFtICE9IE5VTEwpIC8qIHNvbWV0aGluZyBjaGFuZ2VkPyAqLworCQlFeGVj UmVTY2FuKG5vZGUpOwkJLyogbGV0IFJlU2NhbiBoYW5kbGUgdGhpcyAqLworCisJcmV0dXJuIG5v ZGUtPkV4ZWNQcm9jTm9kZUJhdGNoKG5vZGUpOworfQogI2VuZGlmCiAKIC8qCmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNu b2Rlcy5oCmluZGV4IGY0YmI4ZjdkZDdmLi5hMTA0NTkxYWMyMCAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVz LmgKQEAgLTExNDcsNiArMTE0Nyw3IEBAIHR5cGVkZWYgVHVwbGVUYWJsZVNsb3QgKigqRXhlY1By b2NOb2RlTXRkKSAoUGxhblN0YXRlICpwc3RhdGUpOwogLyogUmV0dXJuIGEgYmF0Y2g7IG1heSBy ZXVzZSBjYWxsZXItcHJvdmlkZWQgZW52ZWxvcGUuIE5VTEwgPT4gZW5kIG9mIHNjYW4uICovCiBz dHJ1Y3QgVHVwbGVCYXRjaDsKIHR5cGVkZWYgc3RydWN0IFR1cGxlQmF0Y2ggVHVwbGVCYXRjaDsK K3R5cGVkZWYgVHVwbGVCYXRjaCAqKCpFeGVjUHJvY05vZGVCYXRjaE10ZCkoc3RydWN0IFBsYW5T dGF0ZSAqcHMpOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tCiAgKgkJUGxhblN0YXRlIG5vZGUKQEAg LTExNzEsNiArMTE3MiwxMCBAQCB0eXBlZGVmIHN0cnVjdCBQbGFuU3RhdGUKIAlFeGVjUHJvY05v ZGVNdGQgRXhlY1Byb2NOb2RlUmVhbDsJLyogYWN0dWFsIGZ1bmN0aW9uLCBpZiBhYm92ZSBpcyBh CiAJCQkJCQkJCQkJICogd3JhcHBlciAqLwogCisJLyogT3B0aW9uYWwgYmF0Y2gtcHJvZHVjaW5n IGVudHJ5IHBvaW50IChOVUxMID0+IG5vIGJhdGNoaW5nKS4gKi8KKwlFeGVjUHJvY05vZGVCYXRj aE10ZCBFeGVjUHJvY05vZGVCYXRjaDsKKwlFeGVjUHJvY05vZGVCYXRjaE10ZCBFeGVjUHJvY05v ZGVCYXRjaFJlYWw7CisKIAlJbnN0cnVtZW50YXRpb24gKmluc3RydW1lbnQ7CS8qIE9wdGlvbmFs IHJ1bnRpbWUgc3RhdHMgZm9yIHRoaXMgbm9kZSAqLwogCVdvcmtlckluc3RydW1lbnRhdGlvbiAq d29ya2VyX2luc3RydW1lbnQ7CS8qIHBlci13b3JrZXIgaW5zdHJ1bWVudGF0aW9uICovCiAKLS0g CjIuNDMuMAoK --0000000000002b1beb063fb44440--