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 1sFefN-004The-O6 for pgsql-hackers@arkaria.postgresql.org; Fri, 07 Jun 2024 18:50:22 +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 1sFefM-00DnVC-8p for pgsql-hackers@arkaria.postgresql.org; Fri, 07 Jun 2024 18:50:21 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1sFefL-00DnV4-Ql for pgsql-hackers@lists.postgresql.org; Fri, 07 Jun 2024 18:50:20 +0000 Received: from mail-yw1-x112d.google.com ([2607:f8b0:4864:20::112d]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1sFefI-000VDE-Uh for pgsql-hackers@postgresql.org; Fri, 07 Jun 2024 18:50:20 +0000 Received: by mail-yw1-x112d.google.com with SMTP id 00721157ae682-627ebbefd85so28198297b3.3 for ; Fri, 07 Jun 2024 11:50:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1717786215; x=1718391015; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=lk3xXOotBYVdcqUjzRD64tcMzblfXNesy1hsyf2mH30=; b=j0ha9O1uq5vKrpbkSN3b5GOxFGbi69Vh/A0/xZDdXM3U8CCJIxtKUBapbY0hhqSnlC rTyt2KbNHA9JdP3yGRR0gvRtwNZDcY8WsFVrukH3M8wUylCWZmD/dDNeGiMfB1YwHP1P dQPw4BHznhJnN6DH0cwnDHhJh++DaIzo47ZcwGzAA2Yf9lTfyNtjDyl877jHtjX7R3l3 DDbsliN2Xd6nx1PT4J63m9H/tNTFcOLAxRgTuhBom1c3dNDweGLnDC6gcxrI+xXeyTKF AtaHQNenhHGpUTp+5mWR7zdwnoU9uBdlvP46uz22ds1+T0bskCIe5KV0pBl0gKq0+kQz KieQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1717786215; x=1718391015; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=lk3xXOotBYVdcqUjzRD64tcMzblfXNesy1hsyf2mH30=; b=UAhiAwUdr7mm0vxAJ1MGNL8aqlVPhFrx0EoJuDXcStAhglwi4eQUalV8zubBk+DpA1 w8xHwvHx49EhLZ4DEwA+AnUkfKI1gNKVyeY3D79Gx8h9BMpgi5NRbwaQEFD1QFfZVwHU cVXxOOHBsIbbKgXW/lJqkrpLJcBHIHdRrzbL+IV6m5cv9tqbMFXxuUGubX6Un6Z5eSX5 WU9/40g+edxBNtWnXzdMX/ufdu1K9iZt3pSEZFVyGYjLSyc1N9JDpGAbA0QJD+hk9jZa 2cTN11GLC2nrIJFSJzZQ/EkKNCWfU/v8MofpILVgzXsw1iLGUMUVWEXABb+iJ8YIa5CV uvsQ== X-Gm-Message-State: AOJu0Yz8vXMam8J0o5KDejILOBDrf8kODFwThMcupTpSUKDpa768WLI+ bcW+MdwIxyNQ7VYAf1/VU7t6jnf06Z7L4adKAtaKjy+r/qq9oWvKSzgcyamYIhgbKCYmNnqLZCT foWth69JRrb90yErOhY96BUUaV2D+XqR8KHE= X-Google-Smtp-Source: AGHT+IF6XJ3ehlsVcxYzzhbBpGXNRAvI5MblyOpMZvbs014fHgoS9P1RgE0rSwyCR71yNJ1fHc0MqXfTee7QPCmEjIA= X-Received: by 2002:a81:5cd7:0:b0:615:1ad2:1102 with SMTP id 00721157ae682-62cd55715dbmr33999397b3.11.1717786213605; Fri, 07 Jun 2024 11:50:13 -0700 (PDT) MIME-Version: 1.0 References: <098A3E67-E4A6-4086-9C66-B1EAEB1DFE1C@yandex-team.ru> In-Reply-To: <098A3E67-E4A6-4086-9C66-B1EAEB1DFE1C@yandex-team.ru> From: Stepan Neretin Date: Sat, 8 Jun 2024 01:50:02 +0700 Message-ID: Subject: Re: Sort functions with specialized comparators To: "Andrey M. Borodin" Cc: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000106045061a514527" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000106045061a514527 Content-Type: multipart/alternative; boundary="000000000000106043061a514525" --000000000000106043061a514525 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hello all. I am interested in the proposed patch and would like to propose some additional changes that would complement it. My changes would introduce similar optimizations when working with a list of integers or object identifiers. Additionally, my patch includes an extension for benchmarking, which shows an average speedup of 30-40%. postgres=3D# SELECT bench_oid_sort(1000000); bench_oid_sort ---------------------------------------------------------------------------= ------------------------------------- Time taken by list_sort: 116990848 ns, Time taken by list_oid_sort: 80446640 ns, Percentage difference: 31.24% (1 row) postgres=3D# SELECT bench_int_sort(1000000); bench_int_sort ---------------------------------------------------------------------------= ------------------------------------- Time taken by list_sort: 118168506 ns, Time taken by list_int_sort: 80523373 ns, Percentage difference: 31.86% (1 row) What do you think about these changes? Best regards, Stepan Neretin. On Fri, Jun 7, 2024 at 11:08=E2=80=AFPM Andrey M. Borodin wrote: > Hi! > > In a thread about sorting comparators[0] Andres noted that we have > infrastructure to help compiler optimize sorting. PFA attached PoC > implementation. I've checked that it indeed works on the benchmark from > that thread. > > postgres=3D# CREATE TABLE arrays_to_sort AS > SELECT array_shuffle(a) arr > FROM > (SELECT ARRAY(SELECT generate_series(1, 1000000)) a), > generate_series(1, 10); > > postgres=3D# SELECT (sort(arr))[1] FROM arrays_to_sort; -- original > Time: 990.199 ms > postgres=3D# SELECT (sort(arr))[1] FROM arrays_to_sort; -- patched > Time: 696.156 ms > > The benefit seems to be on the order of magnitude with 30% speedup. > > There's plenty of sorting by TransactionId, BlockNumber, OffsetNumber, Oi= d > etc. But this sorting routines never show up in perf top or something lik= e > that. > > Seems like in most cases we do not spend much time in sorting. But > specialization does not cost us much too, only some CPU cycles of a > compiler. I think we can further improve speedup by converting inline > comparator to value extractor: more compilers will see what is actually > going on. But I have no proofs for this reasoning. > > What do you think? > > > Best regards, Andrey Borodin. > > [0] > https://www.postgresql.org/message-id/flat/20240209184014.sobshkcsfjix6u4= r%40awork3.anarazel.de#fc23df2cf314bef35095b632380b4a59 > --000000000000106043061a514525 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hello all.

I am interested in th= e proposed patch and would like to prop= ose some additional changes that wo= uld complement it. My changes<= /span> would introduce similar = optimizations when working with a list of integers or object identifiers. Additionally, my patch includes an extension for benchmarking, which shows an average speedup of 30-40%.

postgres=3D# SELECT bench_oid_sort(1000000);
=C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0bench_oid_sort =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0
------------------= ---------------------------------------------------------------------------= -------------------
=C2=A0Time taken by list_sort: 116990848 ns, Time ta= ken by list_oid_sort: 80446640 ns, Percentage difference: 31.24%
(1 row)=

postgres=3D# SELECT bench_int_sort(1000000);
=C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0bench_int_sort =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0
-------------------------= ---------------------------------------------------------------------------= ------------
=C2=A0Time taken by list_sort: 118168506 ns, Time taken by = list_int_sort: 80523373 ns, Percentage difference: 31.86%
(1 row)
<= div class=3D"gmail-Xulvok296UivIbQjyi1Y gmail-tkLaHGjEDgGhp7OO9xOw">
Wha= t do you think about these changes?

Best regards, Stepa= n Neretin.

On Fri, Jun 7, 2024 at 11:08=E2=80=AFPM Andrey M. Borodin &= lt;x4mmm@yandex-team.ru> wro= te:
Hi!

In a thread about sorting comparators[0] Andres noted that we have infrastr= ucture to help compiler optimize sorting. PFA attached PoC implementation. = I've checked that it indeed works on the benchmark from that thread.
postgres=3D# CREATE TABLE arrays_to_sort AS
=C2=A0 =C2=A0SELECT array_shuffle(a) arr
=C2=A0 =C2=A0FROM
=C2=A0 =C2=A0 =C2=A0 =C2=A0(SELECT ARRAY(SELECT generate_series(1, 1000000)= ) a),
=C2=A0 =C2=A0 =C2=A0 =C2=A0generate_series(1, 10);

postgres=3D# SELECT (sort(arr))[1] FROM arrays_to_sort; -- original
Time: 990.199 ms
postgres=3D# SELECT (sort(arr))[1] FROM arrays_to_sort; -- patched
Time: 696.156 ms

The benefit seems to be on the order of magnitude with 30% speedup.

There's plenty of sorting by TransactionId, BlockNumber, OffsetNumber, = Oid etc. But this sorting routines never show up in perf top or something l= ike that.

Seems like in most cases we do not spend much time in sorting. But speciali= zation does not cost us much too, only some CPU cycles of a compiler. I thi= nk we can further improve speedup by converting inline comparator to value = extractor: more compilers will see what is actually going on. But I have no= proofs for this reasoning.

What do you think?


Best regards, Andrey Borodin.

[0] https://www.postgresql.org/message-id/fla= t/20240209184014.sobshkcsfjix6u4r%40awork3.anarazel.de#fc23df2cf314bef35095= b632380b4a59
--000000000000106043061a514525-- --000000000000106045061a514527 Content-Type: text/x-patch; charset="US-ASCII"; name="v42-0006-Implemented-benchmarking-for-optimized-sorting.patch" Content-Disposition: attachment; filename="v42-0006-Implemented-benchmarking-for-optimized-sorting.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lx51iefl0 RnJvbSA3NGJhZDRiYmNmZjllYTRhOWE2OGY5MTYxOGM4NDg1NGRhYjI0NzAxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTdGVwYW4gTmVyZXRpbiA8c25jZm1nZ0BnbWFpbC5jb20+CkRh dGU6IFNhdCwgOCBKdW4gMjAyNCAwMToyOTo0MiArMDcwMApTdWJqZWN0OiBbUEFUQ0ggdjQyIDYv Nl0gSW1wbGVtZW50ZWQgYmVuY2htYXJraW5nIGZvciBvcHRpbWl6ZWQgc29ydGluZwoKVGhpcyBj b21taXQgYWRkcyBiZW5jaG1hcmtpbmcgZnVuY3Rpb25zIHRvIGNvbXBhcmUgdGhlIHBlcmZvcm1h bmNlIG9mIHR3byBsaXN0IHNvcnRpbmcgb3BlcmF0aW9uczogYmVuY2hfaW50X3NvcnQgYW5kIGJl bmNoX29pZF9zb3J0LiBUaGVzZSBmdW5jdGlvbnMgbWVhc3VyZSB0aGUgZXhlY3V0aW9uIHRpbWUg b2Ygc29ydGluZyBsaXN0cyBvZiBpbnRlZ2VycyBhbmQgT0lEcywgcmVzcGVjdGl2ZWx5LCB1c2lu ZyBkaWZmZXJlbnQgYWxnb3JpdGhtcyAobGlzdF9zb3J0IGFuZCBjdXN0b20gc29ydGluZyBmdW5j dGlvbnMpLiBSYW5kb20gbGlzdHMgb2Ygc3BlY2lmaWVkIHNpemVzIGFyZSBnZW5lcmF0ZWQsIHNv cnRlZCB1c2luZyBib3RoIG1ldGhvZHMsIGFuZCB0aGVpciBleGVjdXRpb24gdGltZXMgYXJlIHJl Y29yZGVkLiBUaGUgcGVyY2VudGFnZSBkaWZmZXJlbmNlIGluIGV4ZWN1dGlvbiB0aW1lIGJldHdl ZW4gdGhlIHR3byBtZXRob2RzIGlzIGFsc28gY2FsY3VsYXRlZC4gVGhpcyBjb21taXQgYWltcyB0 byBwcm92aWRlIGluc2lnaHRzIGludG8gdGhlIGVmZmljaWVuY3kgb2YgdGhlIHNvcnRpbmcgYWxn b3JpdGhtcyB1c2VkLgotLS0KIGNvbnRyaWIvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB8ICAgMSArCiBjb250cmliL2JlbmNoX3NvcnRfaW1wcm92ZW1lbnRzL01ha2VmaWxl ICAgICAgfCAgMjAgKysrKwogY29udHJpYi9iZW5jaF9zb3J0X2ltcHJvdmVtZW50cy9iZW5jaC5j ICAgICAgIHwgMTA1ICsrKysrKysrKysrKysrKysrKwogLi4uL2JlbmNoX3NvcnRfaW1wcm92ZW1l bnRzLS0xLjAuc3FsICAgICAgICAgIHwgICAzICsKIC4uLi9iZW5jaF9zb3J0X2ltcHJvdmVtZW50 cy5jb250cm9sICAgICAgICAgICB8ICAgNSArCiA1IGZpbGVzIGNoYW5nZWQsIDEzNCBpbnNlcnRp b25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9iZW5jaF9zb3J0X2ltcHJvdmVtZW50 cy9NYWtlZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvYmVuY2hfc29ydF9pbXByb3Zl bWVudHMvYmVuY2guYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvYmVuY2hfc29ydF9pbXBy b3ZlbWVudHMvYmVuY2hfc29ydF9pbXByb3ZlbWVudHMtLTEuMC5zcWwKIGNyZWF0ZSBtb2RlIDEw MDY0NCBjb250cmliL2JlbmNoX3NvcnRfaW1wcm92ZW1lbnRzL2JlbmNoX3NvcnRfaW1wcm92ZW1l bnRzLmNvbnRyb2wKCmRpZmYgLS1naXQgYS9jb250cmliL01ha2VmaWxlIGIvY29udHJpYi9NYWtl ZmlsZQppbmRleCBhYmQ3ODBmMjc3Li5hMWVlOWRlZmMyIDEwMDY0NAotLS0gYS9jb250cmliL01h a2VmaWxlCisrKyBiL2NvbnRyaWIvTWFrZWZpbGUKQEAgLTEwLDYgKzEwLDcgQEAgU1VCRElSUyA9 IFwKIAkJYXV0b19leHBsYWluCVwKIAkJYmFzaWNfYXJjaGl2ZQlcCiAJCWJhc2ViYWNrdXBfdG9f c2hlbGwJXAorCQliZW5jaF9zb3J0X2ltcHJvdmVtZW50cyBcCiAJCWJsb29tCQlcCiAJCWJ0cmVl X2dpbglcCiAJCWJ0cmVlX2dpc3QJXApkaWZmIC0tZ2l0IGEvY29udHJpYi9iZW5jaF9zb3J0X2lt cHJvdmVtZW50cy9NYWtlZmlsZSBiL2NvbnRyaWIvYmVuY2hfc29ydF9pbXByb3ZlbWVudHMvTWFr ZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uNDY0NThlZTc2Ywot LS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvYmVuY2hfc29ydF9pbXByb3ZlbWVudHMvTWFrZWZp bGUKQEAgLTAsMCArMSwyMCBAQAorTU9EVUxFX2JpZyA9IGJlbmNoX3NvcnRfaW1wcm92ZW1lbnRz CisKK09CSlMgPSBcCisJJChXSU4zMlJFUykgXAorCWJlbmNoLm8KKworRVhURU5TSU9OID0gYmVu Y2hfc29ydF9pbXByb3ZlbWVudHMKKworREFUQSA9IGJlbmNoX3NvcnRfaW1wcm92ZW1lbnRzLS0x LjAuc3FsCisKK2lmZGVmIFVTRV9QR1hTCitQR19DT05GSUcgPSBwZ19jb25maWcKK1BHWFMgOj0g JChzaGVsbCAkKFBHX0NPTkZJRykgLS1wZ3hzKQoraW5jbHVkZSAkKFBHWFMpCitlbHNlCitzdWJk aXIgPSBjb250cmliL2JlbmNoX3NvcnRfaW1wcm92ZW1lbnRzCit0b3BfYnVpbGRkaXIgPSAuLi8u LgoraW5jbHVkZSAkKHRvcF9idWlsZGRpcikvc3JjL01ha2VmaWxlLmdsb2JhbAoraW5jbHVkZSAk KHRvcF9zcmNkaXIpL2NvbnRyaWIvY29udHJpYi1nbG9iYWwubWsKK2VuZGlmCmRpZmYgLS1naXQg YS9jb250cmliL2JlbmNoX3NvcnRfaW1wcm92ZW1lbnRzL2JlbmNoLmMgYi9jb250cmliL2JlbmNo X3NvcnRfaW1wcm92ZW1lbnRzL2JlbmNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMC4uNzdkNWM3ZmEzNwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvYmVuY2hfc29y dF9pbXByb3ZlbWVudHMvYmVuY2guYwpAQCAtMCwwICsxLDEwNSBAQAorI2luY2x1ZGUgInBvc3Rn cmVzLmgiCisjaW5jbHVkZSAiZm1nci5oIgorI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCisj aW5jbHVkZSAibm9kZXMvcGdfbGlzdC5oIgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUg PHRpbWUuaD4KKworCitQR19NT0RVTEVfTUFHSUM7CisKK0RhdHVtIGJlbmNoX2ludF9zb3J0KFBH X0ZVTkNUSU9OX0FSR1MpOworRGF0dW0gYmVuY2hfb2lkX3NvcnQoUEdfRlVOQ1RJT05fQVJHUyk7 CisKK1BHX0ZVTkNUSU9OX0lORk9fVjEoYmVuY2hfb2lkX3NvcnQpOworUEdfRlVOQ1RJT05fSU5G T19WMShiZW5jaF9pbnRfc29ydCk7CisKK0RhdHVtCitiZW5jaF9vaWRfc29ydChQR19GVU5DVElP Tl9BUkdTKQoreworICAgIGludDMyIGxpc3Rfc2l6ZSA9IFBHX0dFVEFSR19JTlQzMigwKTsKKyAg ICBMaXN0ICpsaXN0X2ZpcnN0ID0gTklMOworICAgIExpc3QgKmxpc3Rfc2Vjb25kID0gTklMOwor ICAgIE9pZCByYW5kb21fb2lkOworICAgIHN0cnVjdCB0aW1lc3BlYyBzdGFydCwgZW5kOworICAg IGxvbmcgdGltZV9zcGVudF9maXJzdDsKKyAgICBsb25nIHRpbWVfc3BlbnRfc2Vjb25kOworICAg IGRvdWJsZSBwZXJjZW50YWdlX2RpZmZlcmVuY2UgPSAwLjA7CisgICAgY2hhciAqcmVzdWx0X21l c3NhZ2U7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGxpc3Rfc2l6ZTsgaSsrKQorICAgIHsK KyAgICAgICAgcmFuZG9tX29pZCA9IChPaWQpIChyYW5kb20oKSAlIChVSU5UX01BWCAtIDEpICsg MSk7IAorICAgICAgICBsaXN0X2ZpcnN0ID0gbGFwcGVuZF9vaWQobGlzdF9maXJzdCwgcmFuZG9t X29pZCk7CisgICAgICAgIGxpc3Rfc2Vjb25kID0gbGFwcGVuZF9vaWQobGlzdF9zZWNvbmQsIHJh bmRvbV9vaWQpOworICAgIH0KKworICAgIC8vIFRpbWluZyB0aGUgZmlyc3Qgc29ydCBmdW5jdGlv bgorICAgIGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCAmc3RhcnQpOworICAgIGxpc3Rf c29ydChsaXN0X2ZpcnN0LCBsaXN0X29pZF9jbXApOworICAgIGNsb2NrX2dldHRpbWUoQ0xPQ0tf TU9OT1RPTklDLCAmZW5kKTsKKyAgICB0aW1lX3NwZW50X2ZpcnN0ID0gKGVuZC50dl9zZWMgLSBz dGFydC50dl9zZWMpICogMTAwMDAwMDAwMEwgKyAoZW5kLnR2X25zZWMgLSBzdGFydC50dl9uc2Vj KTsKKworICAgIC8vIFRpbWluZyB0aGUgc2Vjb25kIHNvcnQgZnVuY3Rpb24KKyAgICBjbG9ja19n ZXR0aW1lKENMT0NLX01PTk9UT05JQywgJnN0YXJ0KTsKKyAgICBsaXN0X29pZF9zb3J0KGxpc3Rf c2Vjb25kKTsKKyAgICBjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgJmVuZCk7CisgICAg dGltZV9zcGVudF9zZWNvbmQgPSAoZW5kLnR2X3NlYyAtIHN0YXJ0LnR2X3NlYykgKiAxMDAwMDAw MDAwTCArIChlbmQudHZfbnNlYyAtIHN0YXJ0LnR2X25zZWMpOworCisgICAgcGVyY2VudGFnZV9k aWZmZXJlbmNlID0gKChkb3VibGUpKHRpbWVfc3BlbnRfZmlyc3QgLSB0aW1lX3NwZW50X3NlY29u ZCkgLyB0aW1lX3NwZW50X2ZpcnN0KSAqIDEwMC4wOworCisgICAgbGlzdF9mcmVlKGxpc3RfZmly c3QpOworICAgIGxpc3RfZnJlZShsaXN0X3NlY29uZCk7CisgICAgCisgICAgcmVzdWx0X21lc3Nh Z2UgPSBwc3ByaW50ZigiVGltZSB0YWtlbiBieSBsaXN0X3NvcnQ6ICVsZCBucywgVGltZSB0YWtl biBieSBsaXN0X29pZF9zb3J0OiAlbGQgbnMsIFBlcmNlbnRhZ2UgZGlmZmVyZW5jZTogJS4yZiUl IiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lX3NwZW50X2ZpcnN0LCB0aW1l X3NwZW50X3NlY29uZCwgcGVyY2VudGFnZV9kaWZmZXJlbmNlKTsKKyAgICBQR19SRVRVUk5fVEVY VF9QKGNzdHJpbmdfdG9fdGV4dChyZXN1bHRfbWVzc2FnZSkpOworfQorCitEYXR1bQorYmVuY2hf aW50X3NvcnQoUEdfRlVOQ1RJT05fQVJHUykKK3sKKyAgICBpbnQzMiBsaXN0X3NpemUgPSBQR19H RVRBUkdfSU5UMzIoMCk7CisgICAgTGlzdCAqbGlzdF9maXJzdCA9IE5JTDsKKyAgICBMaXN0ICps aXN0X3NlY29uZCA9IE5JTDsKKyAgICBpbnQgcmFuZG9tX2ludDsKKyAgICBzdHJ1Y3QgdGltZXNw ZWMgc3RhcnQsIGVuZDsKKyAgICBsb25nIHRpbWVfc3BlbnRfZmlyc3Q7CisgICAgbG9uZyB0aW1l X3NwZW50X3NlY29uZDsKKyAgICBkb3VibGUgcGVyY2VudGFnZV9kaWZmZXJlbmNlID0gMC4wOwor ICAgIGNoYXIgKnJlc3VsdF9tZXNzYWdlOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsaXN0 X3NpemU7IGkrKykKKyAgICB7CisgICAgICAgIHJhbmRvbV9pbnQgPSByYW5kKCk7IAorICAgICAg ICBsaXN0X2ZpcnN0ID0gbGFwcGVuZF9pbnQobGlzdF9maXJzdCwgcmFuZG9tX2ludCk7IAorICAg ICAgICBsaXN0X3NlY29uZCA9IGxhcHBlbmRfaW50KGxpc3Rfc2Vjb25kLCByYW5kb21faW50KTsg CisgICAgfQorCisgICAgLy8gVGltaW5nIHRoZSBmaXJzdCBzb3J0IGZ1bmN0aW9uCisgICAgY2xv Y2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsICZzdGFydCk7CisgICAgbGlzdF9zb3J0KGxpc3Rf Zmlyc3QsIGxpc3Rfb2lkX2NtcCk7CisgICAgY2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMs ICZlbmQpOworICAgIHRpbWVfc3BlbnRfZmlyc3QgPSAoZW5kLnR2X3NlYyAtIHN0YXJ0LnR2X3Nl YykgKiAxMDAwMDAwMDAwTCArIChlbmQudHZfbnNlYyAtIHN0YXJ0LnR2X25zZWMpOworCisgICAg Ly8gVGltaW5nIHRoZSBzZWNvbmQgc29ydCBmdW5jdGlvbgorICAgIGNsb2NrX2dldHRpbWUoQ0xP Q0tfTU9OT1RPTklDLCAmc3RhcnQpOworICAgIGxpc3RfaW50X3NvcnQobGlzdF9zZWNvbmQpOwor ICAgIGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCAmZW5kKTsKKyAgICB0aW1lX3NwZW50 X3NlY29uZCA9IChlbmQudHZfc2VjIC0gc3RhcnQudHZfc2VjKSAqIDEwMDAwMDAwMDBMICsgKGVu ZC50dl9uc2VjIC0gc3RhcnQudHZfbnNlYyk7CisKKyAgICBwZXJjZW50YWdlX2RpZmZlcmVuY2Ug PSAoKGRvdWJsZSkodGltZV9zcGVudF9maXJzdCAtIHRpbWVfc3BlbnRfc2Vjb25kKSAvIHRpbWVf c3BlbnRfZmlyc3QpICogMTAwLjA7CisKKyAgICBsaXN0X2ZyZWUobGlzdF9maXJzdCk7CisgICAg bGlzdF9mcmVlKGxpc3Rfc2Vjb25kKTsKKyAgICAKKyAgICByZXN1bHRfbWVzc2FnZSA9IHBzcHJp bnRmKCJUaW1lIHRha2VuIGJ5IGxpc3Rfc29ydDogJWxkIG5zLCBUaW1lIHRha2VuIGJ5IGxpc3Rf aW50X3NvcnQ6ICVsZCBucywgUGVyY2VudGFnZSBkaWZmZXJlbmNlOiAlLjJmJSUiLCAKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVfc3BlbnRfZmlyc3QsIHRpbWVfc3BlbnRfc2Vj b25kLCBwZXJjZW50YWdlX2RpZmZlcmVuY2UpOworICAgIFBHX1JFVFVSTl9URVhUX1AoY3N0cmlu Z190b190ZXh0KHJlc3VsdF9tZXNzYWdlKSk7Cit9CisKK3ZvaWQKK19QR19pbml0KCkKK3sKKyAg ICBzcmFuZCh0aW1lKE5VTEwpKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYg LS1naXQgYS9jb250cmliL2JlbmNoX3NvcnRfaW1wcm92ZW1lbnRzL2JlbmNoX3NvcnRfaW1wcm92 ZW1lbnRzLS0xLjAuc3FsIGIvY29udHJpYi9iZW5jaF9zb3J0X2ltcHJvdmVtZW50cy9iZW5jaF9z b3J0X2ltcHJvdmVtZW50cy0tMS4wLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwLi45N2I3NWQzNjhkCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9iZW5jaF9zb3J0 X2ltcHJvdmVtZW50cy9iZW5jaF9zb3J0X2ltcHJvdmVtZW50cy0tMS4wLnNxbApAQCAtMCwwICsx LDMgQEAKK2NyZWF0ZSBmdW5jdGlvbiBiZW5jaF9vaWRfc29ydChpbnRlZ2VyKSByZXR1cm5zIHRl eHQgQVMgJ01PRFVMRV9QQVRITkFNRScsICdiZW5jaF9vaWRfc29ydCcgTEFOR1VBR0UgQzsKKwor Y3JlYXRlIGZ1bmN0aW9uIGJlbmNoX2ludF9zb3J0KGludGVnZXIpIHJldHVybnMgdGV4dCBBUyAn TU9EVUxFX1BBVEhOQU1FJywgJ2JlbmNoX2ludF9zb3J0JyBMQU5HVUFHRSBDOwpkaWZmIC0tZ2l0 IGEvY29udHJpYi9iZW5jaF9zb3J0X2ltcHJvdmVtZW50cy9iZW5jaF9zb3J0X2ltcHJvdmVtZW50 cy5jb250cm9sIGIvY29udHJpYi9iZW5jaF9zb3J0X2ltcHJvdmVtZW50cy9iZW5jaF9zb3J0X2lt cHJvdmVtZW50cy5jb250cm9sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAu LjdkYzA1MDU2YWMKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2JlbmNoX3NvcnRfaW1wcm92 ZW1lbnRzL2JlbmNoX3NvcnRfaW1wcm92ZW1lbnRzLmNvbnRyb2wKQEAgLTAsMCArMSw1IEBACisj IGZ1enp5c3RybWF0Y2ggZXh0ZW5zaW9uCitjb21tZW50ID0gJ3Rlc3QgZXh0ZW5zaW9uJworZGVm YXVsdF92ZXJzaW9uID0gJzEuMCcKK21vZHVsZV9wYXRobmFtZSA9ICckbGliZGlyL2JlbmNoX3Nv cnRfaW1wcm92ZW1lbnRzJworcmVsb2NhdGFibGUgPSB0cnVlCi0tIAoyLjM0LjEKCg== --000000000000106045061a514527 Content-Type: text/x-patch; charset="US-ASCII"; name="v42-0002-Optimized-Oid-List-Sorting-by-using-template-sor.patch" Content-Disposition: attachment; filename="v42-0002-Optimized-Oid-List-Sorting-by-using-template-sor.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lx51ieg94 RnJvbSAzMmY5NjdhMTBhMmRkNmE5ZjY4YWE4NTcxN2FiMTFhYjgzZjAzMjk4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTdGVwYW4gTmVyZXRpbiA8c25jZm1nZ0BnbWFpbC5jb20+CkRh dGU6IFNhdCwgOCBKdW4gMjAyNCAwMDowNDo0MiArMDcwMApTdWJqZWN0OiBbUEFUQ0ggdjQyIDIv Nl0gT3B0aW1pemVkIE9pZCBMaXN0IFNvcnRpbmcgYnkgdXNpbmcgdGVtcGxhdGUgc29ydGluZwog YWxnb3JpdGhtCgpPcHRpbWl6ZWQgdGhlIHNvcnRpbmcgb2YgbGlzdHMgY29udGFpbmluZyBPaWRz IGJ5IHV0aWxpemluZyBhIGN1c3RvbSBzb3J0IHRlbXBsYXRlLiBUaGlzIGVuaGFuY2VtZW50IGlu dHJvZHVjZXMgYSBzcGVjaWFsaXplZCBzb3J0aW5nIGZ1bmN0aW9uIHNvcnRfbGlzdF9vaWRzIGRl ZmluZWQgdGhyb3VnaCBtYWNyb3MgYW5kIGluY2x1ZGVkIGZyb20gc29ydF90ZW1wbGF0ZS5oLiBU aGUgbmV3IGZ1bmN0aW9uIGltcHJvdmVzIHBlcmZvcm1hbmNlIGJ5IGRpcmVjdGx5IGNvbXBhcmlu ZyBPaWRzIGFuZCBzb3J0aW5nIHRoZSBsaXN0IGluLXBsYWNlLgoKQ2hhbmdlczoKLSBEZWZpbmVk IFNUX1NPUlQsIFNUX0VMRU1FTlRfVFlQRSwgU1RfQ09NUEFSRSwgU1RfU0NPUEUsIGFuZCBTVF9E RUZJTkUgbWFjcm9zIGZvciBzb3J0X2xpc3Rfb2lkcy4KLSBJbmNsdWRlZCBzb3J0X3RlbXBsYXRl LmggdG8gbGV2ZXJhZ2UgdGhlIHRlbXBsYXRlLWJhc2VkIHNvcnRpbmcgbWVjaGFuaXNtLgotIElt cGxlbWVudGVkIGxpc3Rfb2lkX3NvcnQgZnVuY3Rpb24gdG8gc29ydCBsaXN0cyB3aXRoIE9pZCB0 eXBlLgoKVGhpcyBvcHRpbWl6YXRpb24gaXMgZXhwZWN0ZWQgdG8gcHJvdmlkZSBiZXR0ZXIgc29y dGluZyBlZmZpY2llbmN5IGZvciBsaXN0cyBjb250YWluaW5nIE9pZHMsIGNvbnRyaWJ1dGluZyB0 byBvdmVyYWxsIHN5c3RlbSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMuCi0tLQogc3JjL2JhY2tl bmQvbm9kZXMvbGlzdC5jICAgIHwgMTQgKysrKysrKysrKysrKysKIHNyYy9pbmNsdWRlL25vZGVz L3BnX2xpc3QuaCB8ICAxICsKIDIgZmlsZXMgY2hhbmdlZCwgMTUgaW5zZXJ0aW9ucygrKQoKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL25vZGVzL2xpc3QuYyBiL3NyYy9iYWNrZW5kL25vZGVzL2xp c3QuYwppbmRleCBlMjYxNWFiMTA1Li5lMTBjZTU0NWFkIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9ub2Rlcy9saXN0LmMKKysrIGIvc3JjL2JhY2tlbmQvbm9kZXMvbGlzdC5jCkBAIC0xNzA3LDMg KzE3MDcsMTcgQEAgbGlzdF9vaWRfY21wKGNvbnN0IExpc3RDZWxsICpwMSwgY29uc3QgTGlzdENl bGwgKnAyKQogCiAJcmV0dXJuIHBnX2NtcF91MzIodjEsIHYyKTsKIH0KKworI2RlZmluZSBTVF9T T1JUIHNvcnRfbGlzdF9vaWRzCisjZGVmaW5lIFNUX0VMRU1FTlRfVFlQRSBMaXN0Q2VsbAorI2Rl ZmluZSBTVF9DT01QQVJFKGEsIGIpIGxpc3Rfb2lkX2NtcChhLCBiKQorI2RlZmluZSBTVF9TQ09Q RSBzdGF0aWMKKyNkZWZpbmUgU1RfREVGSU5FCisjaW5jbHVkZSA8bGliL3NvcnRfdGVtcGxhdGUu aD4KKworLyoKKyAqIFNvcnQgbGlzdCB3aXRoIE9pZCB0eXBlIG9wdGltaXphdGlvbi4KKyAqLwor dm9pZCBsaXN0X29pZF9zb3J0KExpc3QgKmRhdGEpeworICAgc29ydF9saXN0X29pZHMobGlzdF9o ZWFkKGRhdGEpLCBsaXN0X2xlbmd0aChkYXRhKSk7Cit9CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9ub2Rlcy9wZ19saXN0LmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wZ19saXN0LmgKaW5kZXggNTJk ZjkzNzU5Zi4uODhhYTFlYmVhOSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGdfbGlz dC5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3BnX2xpc3QuaApAQCAtNjc5LDYgKzY3OSw3IEBA IGV4dGVybiBwZ19ub2Rpc2NhcmQgTGlzdCAqbGlzdF9jb3B5X2RlZXAoY29uc3QgTGlzdCAqb2xk bGlzdCk7CiAKIHR5cGVkZWYgaW50ICgqbGlzdF9zb3J0X2NvbXBhcmF0b3IpIChjb25zdCBMaXN0 Q2VsbCAqYSwgY29uc3QgTGlzdENlbGwgKmIpOwogZXh0ZXJuIHZvaWQgbGlzdF9zb3J0KExpc3Qg Kmxpc3QsIGxpc3Rfc29ydF9jb21wYXJhdG9yIGNtcCk7CitleHRlcm4gdm9pZCBsaXN0X29pZF9z b3J0KExpc3QgKmxpc3QpOwogCiBleHRlcm4gaW50CWxpc3RfaW50X2NtcChjb25zdCBMaXN0Q2Vs bCAqcDEsIGNvbnN0IExpc3RDZWxsICpwMik7CiBleHRlcm4gaW50CWxpc3Rfb2lkX2NtcChjb25z dCBMaXN0Q2VsbCAqcDEsIGNvbnN0IExpc3RDZWxsICpwMik7Ci0tIAoyLjM0LjEKCg== --000000000000106045061a514527 Content-Type: text/x-patch; charset="US-ASCII"; name="v42-0004-Optimized-Int-List-Sorting-by-using-template-sor.patch" Content-Disposition: attachment; filename="v42-0004-Optimized-Int-List-Sorting-by-using-template-sor.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lx51ieg52 RnJvbSBiZWI1YjkyZDA0MDc1YjA1MzlmMmE2OTY1ZjU4ZDZhNjNhZTI4OThlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTdGVwYW4gTmVyZXRpbiA8c25jZm1nZ0BnbWFpbC5jb20+CkRh dGU6IFNhdCwgOCBKdW4gMjAyNCAwMDoxNDoxOCArMDcwMApTdWJqZWN0OiBbUEFUQ0ggdjQyIDQv Nl0gT3B0aW1pemVkIEludCBMaXN0IFNvcnRpbmcgYnkgdXNpbmcgdGVtcGxhdGUgc29ydGluZwog YWxnb3JpdGhtCgpUaGlzIGNvbW1pdCBvcHRpbWl6ZXMgdGhlIHNvcnRpbmcgb2YgaW50ZWdlciBs aXN0cyBieSBpbXBsZW1lbnRpbmcgYSBjdXN0b20gc29ydCB0ZW1wbGF0ZSBhbGdvcml0aG0uIEl0 IGludHJvZHVjZXMgYSBzcGVjaWFsaXplZCBzb3J0aW5nIGZ1bmN0aW9uLCBgbGlzdF9pbnRfc29y dGAsIGRlZmluZWQgdGhyb3VnaCBtYWNyb3MgYW5kIGluY2x1ZGVkIGZyb20gYHNvcnRfdGVtcGxh dGUuaGAuIFRoZSBlbmhhbmNlbWVudCBhaW1zIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UgYnkgZW5h YmxpbmcgZGlyZWN0IGNvbXBhcmlzb24gb2YgaW50ZWdlcnMgYW5kIHNvcnRpbmcgdGhlIGxpc3Qg aW4tcGxhY2UuCgpDaGFuZ2VzOgotIERlZmluZWQgbWFjcm9zIGBTVF9TT1JUYCwgYFNUX0VMRU1F TlRfVFlQRWAsIGBTVF9DT01QQVJFYCwgYFNUX1NDT1BFYCwgYW5kIGBTVF9ERUZJTkVgIGZvciB0 aGUgYGxpc3RfaW50X3NvcnRgIGZ1bmN0aW9uLgotIEluY2x1ZGVkIGBzb3J0X3RlbXBsYXRlLmhg IHRvIGxldmVyYWdlIHRoZSB0ZW1wbGF0ZS1iYXNlZCBzb3J0aW5nIG1lY2hhbmlzbS4KLSBJbXBs ZW1lbnRlZCB0aGUgYGxpc3RfaW50X3NvcnRgIGZ1bmN0aW9uIHRvIGVmZmljaWVudGx5IHNvcnQg aW50ZWdlciBsaXN0cy4KClRoaXMgb3B0aW1pemF0aW9uIGlzIGV4cGVjdGVkIHRvIHByb3ZpZGUg YmV0dGVyIHNvcnRpbmcgZWZmaWNpZW5jeSBmb3IgbGlzdHMgY29udGFpbmluZyBJbnRzLCBjb250 cmlidXRpbmcgdG8gb3ZlcmFsbCBzeXN0ZW0gcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzLgotLS0K IHNyYy9iYWNrZW5kL25vZGVzL2xpc3QuYyAgICB8IDE0ICsrKysrKysrKysrKysrCiBzcmMvaW5j bHVkZS9ub2Rlcy9wZ19saXN0LmggfCAgMSArCiAyIGZpbGVzIGNoYW5nZWQsIDE1IGluc2VydGlv bnMoKykKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9ub2Rlcy9saXN0LmMgYi9zcmMvYmFja2Vu ZC9ub2Rlcy9saXN0LmMKaW5kZXggZTEwY2U1NDVhZC4uMTk3Y2UxYjhmNCAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvbm9kZXMvbGlzdC5jCisrKyBiL3NyYy9iYWNrZW5kL25vZGVzL2xpc3QuYwpA QCAtMTcyMSwzICsxNzIxLDE3IEBAIGxpc3Rfb2lkX2NtcChjb25zdCBMaXN0Q2VsbCAqcDEsIGNv bnN0IExpc3RDZWxsICpwMikKIHZvaWQgbGlzdF9vaWRfc29ydChMaXN0ICpkYXRhKXsKICAgIHNv cnRfbGlzdF9vaWRzKGxpc3RfaGVhZChkYXRhKSwgbGlzdF9sZW5ndGgoZGF0YSkpOwogfQorCisj ZGVmaW5lIFNUX1NPUlQgc29ydF9saXN0X2ludHMKKyNkZWZpbmUgU1RfRUxFTUVOVF9UWVBFIExp c3RDZWxsCisjZGVmaW5lIFNUX0NPTVBBUkUoYSwgYikgbGlzdF9pbnRfY21wKGEsIGIpCisjZGVm aW5lIFNUX1NDT1BFIHN0YXRpYworI2RlZmluZSBTVF9ERUZJTkUKKyNpbmNsdWRlIDxsaWIvc29y dF90ZW1wbGF0ZS5oPgorCisvKgorICogU29ydCBsaXN0IHdpdGggaW50IHR5cGUgb3B0aW1pemF0 aW9uLgorICovCit2b2lkIGxpc3RfaW50X3NvcnQoTGlzdCAqZGF0YSl7CisgICBzb3J0X2xpc3Rf aW50cyhsaXN0X2hlYWQoZGF0YSksIGxpc3RfbGVuZ3RoKGRhdGEpKTsKK30KXCBObyBuZXdsaW5l IGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wZ19saXN0Lmgg Yi9zcmMvaW5jbHVkZS9ub2Rlcy9wZ19saXN0LmgKaW5kZXggODhhYTFlYmVhOS4uNzc1N2IxY2Rm MCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGdfbGlzdC5oCisrKyBiL3NyYy9pbmNs dWRlL25vZGVzL3BnX2xpc3QuaApAQCAtNjgwLDYgKzY4MCw3IEBAIGV4dGVybiBwZ19ub2Rpc2Nh cmQgTGlzdCAqbGlzdF9jb3B5X2RlZXAoY29uc3QgTGlzdCAqb2xkbGlzdCk7CiB0eXBlZGVmIGlu dCAoKmxpc3Rfc29ydF9jb21wYXJhdG9yKSAoY29uc3QgTGlzdENlbGwgKmEsIGNvbnN0IExpc3RD ZWxsICpiKTsKIGV4dGVybiB2b2lkIGxpc3Rfc29ydChMaXN0ICpsaXN0LCBsaXN0X3NvcnRfY29t cGFyYXRvciBjbXApOwogZXh0ZXJuIHZvaWQgbGlzdF9vaWRfc29ydChMaXN0ICpsaXN0KTsKK2V4 dGVybiB2b2lkIGxpc3RfaW50X3NvcnQoTGlzdCAqbGlzdCk7CiAKIGV4dGVybiBpbnQJbGlzdF9p bnRfY21wKGNvbnN0IExpc3RDZWxsICpwMSwgY29uc3QgTGlzdENlbGwgKnAyKTsKIGV4dGVybiBp bnQJbGlzdF9vaWRfY21wKGNvbnN0IExpc3RDZWxsICpwMSwgY29uc3QgTGlzdENlbGwgKnAyKTsK LS0gCjIuMzQuMQoK --000000000000106045061a514527 Content-Type: text/x-patch; charset="US-ASCII"; name="v42-0005-Enhanced-Sorting-Efficiency-for-Integer-Lists.patch" Content-Disposition: attachment; filename="v42-0005-Enhanced-Sorting-Efficiency-for-Integer-Lists.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lx51ieg01 RnJvbSBkMzZhYzI2MzZlNjM5NTIwZjE2MzQ3NWE3YzA4YzBjZjhiOTdiODY2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTdGVwYW4gTmVyZXRpbiA8c25jZm1nZ0BnbWFpbC5jb20+CkRh dGU6IFNhdCwgOCBKdW4gMjAyNCAwMDozMjo0NCArMDcwMApTdWJqZWN0OiBbUEFUQ0ggdjQyIDUv Nl0gRW5oYW5jZWQgU29ydGluZyBFZmZpY2llbmN5IGZvciBJbnRlZ2VyIExpc3RzCgpSZWZhY3Rv cmVkIHRoZSBzb3J0aW5nIG9mIGxpc3RzIGNvbnRhaW5pbmcgaW50ZWdlcnMgaW4gdGhlIGBleHBh bmRfZ3JvdXBpbmdfc2V0c2AgZnVuY3Rpb24gd2l0aGluIHRoZSBgcGFyc2VfYWdnLmNgIGZpbGUu IFJlcGxhY2VkIHRoZSBnZW5lcmljIHNvcnRpbmcgZnVuY3Rpb24gd2l0aCBhIGN1c3RvbSBvcHRp bWl6ZWQgZnVuY3Rpb24gdGFpbG9yZWQgZm9yIGludGVnZXIgdHlwZXMuIFRoaXMgY2hhbmdlIGxl dmVyYWdlcyBhIGN1c3RvbSBzb3J0IHRlbXBsYXRlIHRvIGVuaGFuY2UgcGVyZm9ybWFuY2Ugc3Bl Y2lmaWNhbGx5IGZvciBpbnRlZ2VyIHR5cGVzLgoKRGV0YWlsczoKLSBVcGRhdGVkIHRoZSBzb3J0 aW5nIG9mIGVhY2ggZ3JvdXBzZXQgaW5kaXZpZHVhbGx5IHdpdGhpbiB0aGUgYGV4cGFuZF9ncm91 cGluZ19zZXRzYCBmdW5jdGlvbiBieSByZXBsYWNpbmcgdGhlIGxvb3AtYmFzZWQgYGxpc3Rfc29y dGAgd2l0aCBhIHNpbmdsZSBjYWxsIHRvIGBsaXN0X2ludF9zb3J0YC4KLSBVcGRhdGVkIHRoZSBj b21wYXJpc29uIGZ1bmN0aW9uIGBsaXN0X2ludF9jbXBgIHRvIGBpbnRfY21wYCB3aXRoaW4gdGhl IGBleHBhbmRfZ3JvdXBpbmdfc2V0c2AgZnVuY3Rpb24uCi0gVXBkYXRlZCB0aGUgYGV4cGFuZF9n cm91cGluZ19zZXRzYCBmdW5jdGlvbiB0byB1c2UgYHNvcnRfbGlzdF9pbnRzYCBpbiB0d28gbG9j YXRpb25zIHdoZXJlIHNvcnRpbmcgaXMgcGVyZm9ybWVkLgoKVGhpcyByZWZhY3RvciBhaW1zIHRv IGltcHJvdmUgc29ydGluZyBlZmZpY2llbmN5IGZvciBpbnRlZ2VyIGxpc3RzIGluIHRoZSBjb250 ZXh0IG9mIGV4cGFuZGluZyBncm91cGluZyBzZXRzIHdpdGhpbiB0aGUgYHBhcnNlX2FnZy5jYCBm aWxlLCByZWR1Y2luZyBwcm9jZXNzaW5nIHRpbWUgYW5kIGVuaGFuY2luZyBvdmVyYWxsIHN5c3Rl bSBwZXJmb3JtYW5jZS4KLS0tCiBzcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfYWdnLmMgfCAzICst LQogMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAyIGRlbGV0aW9ucygtKQoKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9hZ2cuYyBiL3NyYy9iYWNrZW5kL3BhcnNl ci9wYXJzZV9hZ2cuYwppbmRleCBiZWU3ZDgzNDZhLi4xMDIxMzEzNDFhIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfYWdnLmMKKysrIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3Bh cnNlX2FnZy5jCkBAIC0xODY5LDggKzE4NjksNyBAQCBleHBhbmRfZ3JvdXBpbmdfc2V0cyhMaXN0 ICpncm91cGluZ1NldHMsIGJvb2wgZ3JvdXBEaXN0aW5jdCwgaW50IGxpbWl0KQogCQlMaXN0CSAg ICpwcmV2OwogCiAJCS8qIFNvcnQgZWFjaCBncm91cHNldCBpbmRpdmlkdWFsbHkgKi8KLQkJZm9y ZWFjaChjZWxsLCByZXN1bHQpCi0JCQlsaXN0X3NvcnQobGZpcnN0KGNlbGwpLCBsaXN0X2ludF9j bXApOworCQlsaXN0X2ludF9zb3J0KHJlc3VsdCk7CiAKIAkJLyogTm93IHNvcnQgdGhlIGxpc3Qg b2YgZ3JvdXBzZXRzIGJ5IGxlbmd0aCBhbmQgY29udGVudHMgKi8KIAkJbGlzdF9zb3J0KHJlc3Vs dCwgY21wX2xpc3RfbGVuX2NvbnRlbnRzX2FzYyk7Ci0tIAoyLjM0LjEKCg== --000000000000106045061a514527 Content-Type: text/x-patch; charset="US-ASCII"; name="v42-0003-Enhanced-Sorting-Efficiency-for-Oid-Lists.patch" Content-Disposition: attachment; filename="v42-0003-Enhanced-Sorting-Efficiency-for-Oid-Lists.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lx51ieg73 RnJvbSBkODI0MjdhNGMxZGI2OGM1OWUxZDVhMzVmMjVmMDM5MWE2YWU2OGU2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTdGVwYW4gTmVyZXRpbiA8c25jZm1nZ0BnbWFpbC5jb20+CkRh dGU6IFNhdCwgOCBKdW4gMjAyNCAwMDowNDo1OSArMDcwMApTdWJqZWN0OiBbUEFUQ0ggdjQyIDMv Nl0gRW5oYW5jZWQgU29ydGluZyBFZmZpY2llbmN5IGZvciBPaWQgTGlzdHMKClJlZmFjdG9yZWQg dGhlIHNvcnRpbmcgb2YgbGlzdHMgY29udGFpbmluZyBPaWRzIGJ5IHJlcGxhY2luZyB0aGUgZ2Vu ZXJpYyBmdW5jdGlvbgp3aXRoIHRoZSBjdXN0b20gb3B0aW1pemVkIGZ1bmN0aW9uLiBUaGlzIGNo YW5nZSBsZXZlcmFnZXMgYSBjdXN0b20gc29ydCB0ZW1wbGF0ZQp0byBlbmhhbmNlIHBlcmZvcm1h bmNlIHNwZWNpZmljYWxseSBmb3IgT2lkIHR5cGVzLgoKRGV0YWlsczoKLSBVcGRhdGVkIHRvIHVz ZSBpbnN0ZWFkIG9mLgotIFVwZGF0ZWQgdG8gdXNlIGluc3RlYWQgb2YuCi0gVXBkYXRlZCB0byB1 c2UgaW5zdGVhZCBvZiBpbiB0d28gbG9jYXRpb25zLgoKVGhpcyByZWZhY3RvciBhaW1zIHRvIGlt cHJvdmUgc29ydGluZyBlZmZpY2llbmN5IGZvciBPaWQgbGlzdHMsIHJlZHVjaW5nCnByb2Nlc3Np bmcgdGltZSBhbmQgZW5oYW5jaW5nIG92ZXJhbGwgc3lzdGVtIHBlcmZvcm1hbmNlLgotLS0KIHNy Yy9iYWNrZW5kL2NhdGFsb2cvaGVhcC5jICAgICAgICAgICB8IDIgKy0KIHNyYy9iYWNrZW5kL2Nh dGFsb2cvcGdfcHVibGljYXRpb24uYyB8IDIgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3Jl bGNhY2hlLmMgICB8IDQgKystLQogMyBmaWxlcyBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDQg ZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9oZWFwLmMgYi9z cmMvYmFja2VuZC9jYXRhbG9nL2hlYXAuYwppbmRleCBhMTIyYmJmZmNlLi44OGU0YWRhOTcwIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL2hlYXAuYworKysgYi9zcmMvYmFja2VuZC9j YXRhbG9nL2hlYXAuYwpAQCAtMzMwMyw3ICszMzAzLDcgQEAgcmVzdGFydDoKIAlsaXN0X2ZyZWUo b2lkcyk7CiAKIAkvKiBOb3cgc29ydCBhbmQgZGUtZHVwbGljYXRlIHRoZSByZXN1bHQgbGlzdCAq LwotCWxpc3Rfc29ydChyZXN1bHQsIGxpc3Rfb2lkX2NtcCk7CisJbGlzdF9vaWRfc29ydChyZXN1 bHQpOwogCWxpc3RfZGVkdXBsaWNhdGVfb2lkKHJlc3VsdCk7CiAKIAlyZXR1cm4gcmVzdWx0Owpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5jIGIvc3JjL2Jh Y2tlbmQvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5jCmluZGV4IDA2MDIzOThhNTQuLmZhZjcwZWM4 YzcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfcHVibGljYXRpb24uYworKysg Yi9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMKQEAgLTc0Niw3ICs3NDYsNyBA QCBHZXRQdWJsaWNhdGlvblJlbGF0aW9ucyhPaWQgcHViaWQsIFB1YmxpY2F0aW9uUGFydE9wdCBw dWJfcGFydG9wdCkKIAl0YWJsZV9jbG9zZShwdWJyZWxzcmVsLCBBY2Nlc3NTaGFyZUxvY2spOwog CiAJLyogTm93IHNvcnQgYW5kIGRlLWR1cGxpY2F0ZSB0aGUgcmVzdWx0IGxpc3QgKi8KLQlsaXN0 X3NvcnQocmVzdWx0LCBsaXN0X29pZF9jbXApOworCWxpc3Rfb2lkX3NvcnQocmVzdWx0KTsKIAls aXN0X2RlZHVwbGljYXRlX29pZChyZXN1bHQpOwogCiAJcmV0dXJuIHJlc3VsdDsKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMgYi9zcmMvYmFja2VuZC91dGls cy9jYWNoZS9yZWxjYWNoZS5jCmluZGV4IDM1ZGJiODdhZTMuLjIxYjNmM2M5MmYgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMKKysrIGIvc3JjL2JhY2tlbmQv dXRpbHMvY2FjaGUvcmVsY2FjaGUuYwpAQCAtNDg3Myw3ICs0ODczLDcgQEAgUmVsYXRpb25HZXRJ bmRleExpc3QoUmVsYXRpb24gcmVsYXRpb24pCiAJdGFibGVfY2xvc2UoaW5kcmVsLCBBY2Nlc3NT aGFyZUxvY2spOwogCiAJLyogU29ydCB0aGUgcmVzdWx0IGxpc3QgaW50byBPSUQgb3JkZXIsIHBl ciBBUEkgc3BlYy4gKi8KLQlsaXN0X3NvcnQocmVzdWx0LCBsaXN0X29pZF9jbXApOworCWxpc3Rf b2lkX3NvcnQocmVzdWx0KTsKIAogCS8qIE5vdyBzYXZlIGEgY29weSBvZiB0aGUgY29tcGxldGVk IGxpc3QgaW4gdGhlIHJlbGNhY2hlIGVudHJ5LiAqLwogCW9sZGN4dCA9IE1lbW9yeUNvbnRleHRT d2l0Y2hUbyhDYWNoZU1lbW9yeUNvbnRleHQpOwpAQCAtNDk2NSw3ICs0OTY1LDcgQEAgUmVsYXRp b25HZXRTdGF0RXh0TGlzdChSZWxhdGlvbiByZWxhdGlvbikKIAl0YWJsZV9jbG9zZShpbmRyZWws IEFjY2Vzc1NoYXJlTG9jayk7CiAKIAkvKiBTb3J0IHRoZSByZXN1bHQgbGlzdCBpbnRvIE9JRCBv cmRlciwgcGVyIEFQSSBzcGVjLiAqLwotCWxpc3Rfc29ydChyZXN1bHQsIGxpc3Rfb2lkX2NtcCk7 CisJbGlzdF9vaWRfc29ydChyZXN1bHQpOwogCiAJLyogTm93IHNhdmUgYSBjb3B5IG9mIHRoZSBj b21wbGV0ZWQgbGlzdCBpbiB0aGUgcmVsY2FjaGUgZW50cnkuICovCiAJb2xkY3h0ID0gTWVtb3J5 Q29udGV4dFN3aXRjaFRvKENhY2hlTWVtb3J5Q29udGV4dCk7Ci0tIAoyLjM0LjEKCg== --000000000000106045061a514527 Content-Type: text/x-patch; charset="US-ASCII"; name="v42-0001-Use-specialized-sort-facilities.patch" Content-Disposition: attachment; filename="v42-0001-Use-specialized-sort-facilities.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lx51iega5 RnJvbSA1MzA5MTFkZDJlMWE2MDIwOTQyMTU1MWJjMjRiNWQ3MjYyODA1MGU1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiQW5kcmV5IE0uIEJvcm9kaW4iIDx4NG1tbUBuaWdodC5sb2Nh bD4KRGF0ZTogU2F0LCAxOCBNYXkgMjAyNCAyMzowMjo1MCArMDUwMApTdWJqZWN0OiBbUEFUQ0gg djQyIDEvNl0gVXNlIHNwZWNpYWxpemVkIHNvcnQgZmFjaWxpdGllcwoKLS0tCiBjb250cmliL2lu dGFycmF5L19pbnQuaCAgICAgIHwgMTIgLS0tLS0tLS0tLS0tCiBjb250cmliL2ludGFycmF5L19p bnRfZ2lzdC5jIHwgIDIgKy0KIGNvbnRyaWIvaW50YXJyYXkvX2ludF9vcC5jICAgfCAxOSArKysr KysrKystLS0tLS0tLS0tCiBjb250cmliL2ludGFycmF5L19pbnRfdG9vbC5jIHwgMTIgLS0tLS0t LS0tLS0tCiBzcmMvaW5jbHVkZS9wb3J0LmggICAgICAgICAgIHwgIDIgKysKIHNyYy9wb3J0L3Fz b3J0LmMgICAgICAgICAgICAgfCAzNSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KwogNiBmaWxlcyBjaGFuZ2VkLCA0NyBpbnNlcnRpb25zKCspLCAzNSBkZWxldGlvbnMoLSkKCmRp ZmYgLS1naXQgYS9jb250cmliL2ludGFycmF5L19pbnQuaCBiL2NvbnRyaWIvaW50YXJyYXkvX2lu dC5oCmluZGV4IDAzNTJjYmQzNjguLjUyMjVjOTA5MGEgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvaW50 YXJyYXkvX2ludC5oCisrKyBiL2NvbnRyaWIvaW50YXJyYXkvX2ludC5oCkBAIC0xNzYsMTYgKzE3 Niw0IEBAIGJvb2wJCWV4ZWNjb25zaXN0ZW50KFFVRVJZVFlQRSAqcXVlcnksIEFycmF5VHlwZSAq YXJyYXksIGJvb2wgY2FsY25vdCk7CiBib29sCQlnaW5fYm9vbF9jb25zaXN0ZW50KFFVRVJZVFlQ RSAqcXVlcnksIGJvb2wgKmNoZWNrKTsKIGJvb2wJCXF1ZXJ5X2hhc19yZXF1aXJlZF92YWx1ZXMo UVVFUllUWVBFICpxdWVyeSk7CiAKLWludAkJCWNvbXBBU0MoY29uc3Qgdm9pZCAqYSwgY29uc3Qg dm9pZCAqYik7Ci1pbnQJCQljb21wREVTQyhjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKTsK LQotLyogc29ydCwgZWl0aGVyIGFzY2VuZGluZyBvciBkZXNjZW5kaW5nICovCi0jZGVmaW5lIFFT T1JUKGEsIGRpcmVjdGlvbikgXAotCWRvIHsgXAotCQlpbnQJCV9uZWxlbXNfID0gQVJSTkVMRU1T KGEpOyBcCi0JCWlmIChfbmVsZW1zXyA+IDEpIFwKLQkJCXFzb3J0KCh2b2lkKikgQVJSUFRSKGEp LCBfbmVsZW1zXywgc2l6ZW9mKGludDMyKSwgXAotCQkJCSAgKGRpcmVjdGlvbikgPyBjb21wQVND IDogY29tcERFU0MgKTsgXAotCX0gd2hpbGUoMCkKLQogI2VuZGlmCQkJCQkJCS8qIF9fX0lOVF9I X18gKi8KZGlmZiAtLWdpdCBhL2NvbnRyaWIvaW50YXJyYXkvX2ludF9naXN0LmMgYi9jb250cmli L2ludGFycmF5L19pbnRfZ2lzdC5jCmluZGV4IGEwOWI3ZmE4MTIuLmQzOWU0MGM2NmEgMTAwNjQ0 Ci0tLSBhL2NvbnRyaWIvaW50YXJyYXkvX2ludF9naXN0LmMKKysrIGIvY29udHJpYi9pbnRhcnJh eS9faW50X2dpc3QuYwpAQCAtMTUwLDcgKzE1MCw3IEBAIGdfaW50X3VuaW9uKFBHX0ZVTkNUSU9O X0FSR1MpCiAJCXB0ciArPSBuZWw7CiAJfQogCi0JUVNPUlQocmVzLCAxKTsKKwlzb3J0X2ludDMy X2FzYyhBUlJQVFIocmVzKSwgQVJSTkVMRU1TKHJlcykpOwogCXJlcyA9IF9pbnRfdW5pcXVlKHJl cyk7CiAJKnNpemUgPSBWQVJTSVpFKHJlcyk7CiAJUEdfUkVUVVJOX1BPSU5URVIocmVzKTsKZGlm ZiAtLWdpdCBhL2NvbnRyaWIvaW50YXJyYXkvX2ludF9vcC5jIGIvY29udHJpYi9pbnRhcnJheS9f aW50X29wLmMKaW5kZXggNWIxNjRmNjc4OC4uMzRkM2FhMTgzZiAxMDA2NDQKLS0tIGEvY29udHJp Yi9pbnRhcnJheS9faW50X29wLmMKKysrIGIvY29udHJpYi9pbnRhcnJheS9faW50X29wLmMKQEAg LTE5OCw3ICsxOTgsNiBAQCBzb3J0KFBHX0ZVTkNUSU9OX0FSR1MpCiAJdGV4dAkgICAqZGlyc3Ry ID0gKGZjaW5mby0+bmFyZ3MgPT0gMikgPyBQR19HRVRBUkdfVEVYVF9QUCgxKSA6IE5VTEw7CiAJ aW50MzIJCWRjID0gKGRpcnN0cikgPyBWQVJTSVpFX0FOWV9FWEhEUihkaXJzdHIpIDogMDsKIAlj aGFyCSAgICpkID0gKGRpcnN0cikgPyBWQVJEQVRBX0FOWShkaXJzdHIpIDogTlVMTDsKLQlpbnQJ CQlkaXIgPSAtMTsKIAogCUNIRUNLQVJSVkFMSUQoYSk7CiAJaWYgKEFSUk5FTEVNUyhhKSA8IDIp CkBAIC0yMDgsMTggKzIwNywxOCBAQCBzb3J0KFBHX0ZVTkNUSU9OX0FSR1MpCiAJCQkJCQkgICAm JiAoZFswXSA9PSAnQScgfHwgZFswXSA9PSAnYScpCiAJCQkJCQkgICAmJiAoZFsxXSA9PSAnUycg fHwgZFsxXSA9PSAncycpCiAJCQkJCQkgICAmJiAoZFsyXSA9PSAnQycgfHwgZFsyXSA9PSAnYycp KSkKLQkJZGlyID0gMTsKKwkJc29ydF9pbnQzMl9hc2MoQVJSUFRSKGEpLCBBUlJORUxFTVMoYSkp OwogCWVsc2UgaWYgKGRjID09IDQKIAkJCSAmJiAoZFswXSA9PSAnRCcgfHwgZFswXSA9PSAnZCcp CiAJCQkgJiYgKGRbMV0gPT0gJ0UnIHx8IGRbMV0gPT0gJ2UnKQogCQkJICYmIChkWzJdID09ICdT JyB8fCBkWzJdID09ICdzJykKIAkJCSAmJiAoZFszXSA9PSAnQycgfHwgZFszXSA9PSAnYycpKQot CQlkaXIgPSAwOwotCWlmIChkaXIgPT0gLTEpCisJCXNvcnRfaW50MzJfZGVzYyhBUlJQVFIoYSks IEFSUk5FTEVNUyhhKSk7CisJZWxzZQogCQllcmVwb3J0KEVSUk9SLAogCQkJCShlcnJjb2RlKEVS UkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAogCQkJCSBlcnJtc2coInNlY29uZCBwYXJh bWV0ZXIgbXVzdCBiZSBcIkFTQ1wiIG9yIFwiREVTQ1wiIikpKTsKLQlRU09SVChhLCBkaXIpOwor CiAJUEdfUkVUVVJOX1BPSU5URVIoYSk7CiB9CiAKQEAgLTIyOSw3ICsyMjgsNyBAQCBzb3J0X2Fz YyhQR19GVU5DVElPTl9BUkdTKQogCUFycmF5VHlwZSAgKmEgPSBQR19HRVRBUkdfQVJSQVlUWVBF X1BfQ09QWSgwKTsKIAogCUNIRUNLQVJSVkFMSUQoYSk7Ci0JUVNPUlQoYSwgMSk7CisJc29ydF9p bnQzMl9hc2MoQVJSUFRSKGEpLCBBUlJORUxFTVMoYSkpOwogCVBHX1JFVFVSTl9QT0lOVEVSKGEp OwogfQogCkBAIC0yMzksNyArMjM4LDcgQEAgc29ydF9kZXNjKFBHX0ZVTkNUSU9OX0FSR1MpCiAJ QXJyYXlUeXBlICAqYSA9IFBHX0dFVEFSR19BUlJBWVRZUEVfUF9DT1BZKDApOwogCiAJQ0hFQ0tB UlJWQUxJRChhKTsKLQlRU09SVChhLCAwKTsKKwlzb3J0X2ludDMyX2Rlc2MoQVJSUFRSKGEpLCBB UlJORUxFTVMoYSkpOwogCVBHX1JFVFVSTl9QT0lOVEVSKGEpOwogfQogCkBAIC0zODEsNyArMzgw LDcgQEAgaW50c2V0X3VuaW9uX2VsZW0oUEdfRlVOQ1RJT05fQVJHUykKIAogCXJlc3VsdCA9IGlu dGFycmF5X2FkZF9lbGVtKGEsIFBHX0dFVEFSR19JTlQzMigxKSk7CiAJUEdfRlJFRV9JRl9DT1BZ KGEsIDApOwotCVFTT1JUKHJlc3VsdCwgMSk7CisJc29ydF9pbnQzMl9hc2MoQVJSUFRSKHJlc3Vs dCksIEFSUk5FTEVNUyhyZXN1bHQpKTsKIAlQR19SRVRVUk5fUE9JTlRFUihfaW50X3VuaXF1ZShy ZXN1bHQpKTsKIH0KIApAQCAtNDAzLDEwICs0MDIsMTAgQEAgaW50c2V0X3N1YnRyYWN0KFBHX0ZV TkNUSU9OX0FSR1MpCiAJQ0hFQ0tBUlJWQUxJRChhKTsKIAlDSEVDS0FSUlZBTElEKGIpOwogCi0J UVNPUlQoYSwgMSk7CisJc29ydF9pbnQzMl9hc2MoQVJSUFRSKGEpLCBBUlJORUxFTVMoYSkpOwog CWEgPSBfaW50X3VuaXF1ZShhKTsKIAljYSA9IEFSUk5FTEVNUyhhKTsKLQlRU09SVChiLCAxKTsK Kwlzb3J0X2ludDMyX2FzYyhBUlJQVFIoYiksIEFSUk5FTEVNUyhiKSk7CiAJYiA9IF9pbnRfdW5p cXVlKGIpOwogCWNiID0gQVJSTkVMRU1TKGIpOwogCXJlc3VsdCA9IG5ld19pbnRBcnJheVR5cGUo Y2EpOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9pbnRhcnJheS9faW50X3Rvb2wuYyBiL2NvbnRyaWIv aW50YXJyYXkvX2ludF90b29sLmMKaW5kZXggYzg1MjgwYzg0Mi4uZTgzYzZhYWRjNiAxMDA2NDQK LS0tIGEvY29udHJpYi9pbnRhcnJheS9faW50X3Rvb2wuYworKysgYi9jb250cmliL2ludGFycmF5 L19pbnRfdG9vbC5jCkBAIC0zOTMsMTUgKzM5MywzIEBAIGludF90b19pbnRzZXQoaW50MzIgZWxl bSkKIAlhYVswXSA9IGVsZW07CiAJcmV0dXJuIHJlc3VsdDsKIH0KLQotaW50Ci1jb21wQVNDKGNv bnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCi17Ci0JcmV0dXJuIHBnX2NtcF9zMzIoKihjb25z dCBpbnQzMiAqKSBhLCAqKGNvbnN0IGludDMyICopIGIpOwotfQotCi1pbnQKLWNvbXBERVNDKGNv bnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCi17Ci0JcmV0dXJuIHBnX2NtcF9zMzIoKihjb25z dCBpbnQzMiAqKSBiLCAqKGNvbnN0IGludDMyICopIGEpOwotfQpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvcG9ydC5oIGIvc3JjL2luY2x1ZGUvcG9ydC5oCmluZGV4IGFlMTE1ZDJkOTcuLmI0ODE5 NGNiMDAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3BvcnQuaAorKysgYi9zcmMvaW5jbHVkZS9w b3J0LmgKQEAgLTQ0NSw2ICs0NDUsOCBAQCBleHRlcm4gYm9vbCBwZ19nZXRfdXNlcl9ob21lX2Rp cih1aWRfdCB1c2VyX2lkLCBjaGFyICpidWZmZXIsIHNpemVfdCBidWZsZW4pOwogZXh0ZXJuIHZv aWQgcGdfcXNvcnQodm9pZCAqYmFzZSwgc2l6ZV90IG5lbCwgc2l6ZV90IGVsc2l6ZSwKIAkJCQkJ IGludCAoKmNtcCkgKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKSk7CiBleHRlcm4gaW50CXBn X3Fzb3J0X3N0cmNtcChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKTsKK2V4dGVybiB2b2lk IHNvcnRfaW50MzJfYXNjKGludDMyICpiYXNlLCBzaXplX3QgbmVsKTsKK2V4dGVybiB2b2lkIHNv cnRfaW50MzJfZGVzYyhpbnQzMiAqYmFzZSwgc2l6ZV90IG5lbCk7CiAKICNkZWZpbmUgcXNvcnQo YSxiLGMsZCkgcGdfcXNvcnQoYSxiLGMsZCkKIApkaWZmIC0tZ2l0IGEvc3JjL3BvcnQvcXNvcnQu YyBiL3NyYy9wb3J0L3Fzb3J0LmMKaW5kZXggNzg3OWU2Y2Q1Ni4uNTE3NWM4YTZkZCAxMDA2NDQK LS0tIGEvc3JjL3BvcnQvcXNvcnQuYworKysgYi9zcmMvcG9ydC9xc29ydC5jCkBAIC0yMCwzICsy MCwzOCBAQCBwZ19xc29ydF9zdHJjbXAoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKIHsK IAlyZXR1cm4gc3RyY21wKCooY29uc3QgY2hhciAqY29uc3QgKikgYSwgKihjb25zdCBjaGFyICpj b25zdCAqKSBiKTsKIH0KKworc3RhdGljIGlubGluZSBpbnQKK3NvcnRfaW50MzJfYXNjX2NtcChp bnQzMiogYSwgaW50MzIqIGIpCit7CisJaWYgKCphIDwgKmIpCisJCXJldHVybiAtMTsKKwlpZiAo KmEgPiAqYikKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgU1RfU09SVCBz b3J0X2ludDMyX2FzYworI2RlZmluZSBTVF9FTEVNRU5UX1RZUEUgaW50MzIKKyNkZWZpbmUgU1Rf Q09NUEFSRSBzb3J0X2ludDMyX2FzY19jbXAKKyNkZWZpbmUgU1RfU0NPUEUKKyNkZWZpbmUgU1Rf REVDTEFSRQorI2RlZmluZSBTVF9ERUZJTkUKKyNpbmNsdWRlICJsaWIvc29ydF90ZW1wbGF0ZS5o IgorCitzdGF0aWMgaW5saW5lIGludAorc29ydF9pbnQzMl9kZXNjX2NtcChpbnQzMiogYSwgaW50 MzIqIGIpCit7CisJaWYgKCphIDwgKmIpCisJCXJldHVybiAxOworCWlmICgqYSA+ICpiKQorCQly ZXR1cm4gLTE7CisJcmV0dXJuIDA7Cit9CisjZGVmaW5lIFNUX1NPUlQgc29ydF9pbnQzMl9kZXNj CisjZGVmaW5lIFNUX0VMRU1FTlRfVFlQRSBpbnQzMgorI2RlZmluZSBTVF9DT01QQVJFIHNvcnRf aW50MzJfZGVzY19jbXAKKyNkZWZpbmUgU1RfU0NPUEUKKyNkZWZpbmUgU1RfREVDTEFSRQorI2Rl ZmluZSBTVF9ERUZJTkUKKyNpbmNsdWRlICJsaWIvc29ydF90ZW1wbGF0ZS5oIgotLSAKMi4zNC4x Cgo= --000000000000106045061a514527--