Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vxTbF-00GDYP-0N for pgsql-hackers@arkaria.postgresql.org; Tue, 03 Mar 2026 17:32:01 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vxTbC-0083pH-0n for pgsql-hackers@arkaria.postgresql.org; Tue, 03 Mar 2026 17:31:58 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vxTbB-0083p3-2H for pgsql-hackers@lists.postgresql.org; Tue, 03 Mar 2026 17:31:58 +0000 Received: from mail-wr1-x42b.google.com ([2a00:1450:4864:20::42b]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vxTb9-00000000DRV-2Abj for pgsql-hackers@postgresql.org; Tue, 03 Mar 2026 17:31:57 +0000 Received: by mail-wr1-x42b.google.com with SMTP id ffacd0b85a97d-4377174e1ebso4429352f8f.3 for ; Tue, 03 Mar 2026 09:31:55 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1772559114; x=1773163914; darn=postgresql.org; h=in-reply-to:content-language:references:cc:to:from:subject :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=ndp16lGhLfVc3ydg1zkm+MnAJ6C01SHanWNHZDIBq3U=; b=iH7IxupKlF6zQBCSpcparcTQjhZCxaC/aoP4H+AOkNRctk7TnWZdNtUw+MuAAKmvQz Mki+wGbfMk47cQw3MSzyNmvILlsn7jsTOdc1f4FftRu/gyVIK9x4C3OfqHGtq784wihe o7PFF+nNussD9XqPozEe7GtrvD0Kiifftg9vrw0Xj3ibIqkewMjrNvelEkk/iqu0usHi 0JJS4O6y9FMmPW79jerPZb6qUteXhs+Aeq3j9Hn0xIqn/hLo/GrGSZw5gk54wlTMP2Tt sFhge05mW8MImqCXM3u9VK6vvUvm5nsD5ANIHlzXJJ0eyVtEZ79Vhso6+LpFfnjD8zgQ rh+Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772559114; x=1773163914; h=in-reply-to:content-language:references:cc:to:from:subject :user-agent:mime-version:date:message-id:x-gm-gg:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=ndp16lGhLfVc3ydg1zkm+MnAJ6C01SHanWNHZDIBq3U=; b=VL5gI73fb3jYtfDBk6uNCh5cf+ttK0nc8RHbxiFRbwcHt4GVS7iFcFMqPWJqznqH3A PtB+Q2Q1N6nYKn1GFbGZCzkWQgy7kjcDLRzryttX0gpWQ3AYFoBnrjqnf18lEfQCSuwE 3NZbtNRAcb0LXCUE0rInmQxaARwt7yaKRi4U5O8ZY5Gkj+VtRV77A5n0Ico1TmMMDitC 7Iw7vd5U/HEMblEdAR6d36CG/vDLIQFsGFgixSWOo/ilQajCSv5rN5QNys801BfBwxk4 iKVWEV9suH8lmlNHLfNQ6GC+G2gMqRALLWj0rZq3HbeaUYqW6fRXtHqtu9dcmTaHy+/B zW7Q== X-Forwarded-Encrypted: i=1; AJvYcCVUWl29p+enVgJNJmzHDnnVM7I26XIWCHmdaDiw5ijdEIrgSYFjkVcMio+5IPc87J3otdlsTNxbruOQDRBg@postgresql.org X-Gm-Message-State: AOJu0YzvdpDQs229rJ4A+q+jaY7jwPedbRdoIZzBbomg8YVcXjSU416p OAbUQeBfxv3CufP91iaagzb2Rew+HWA6U74yC2j+yhOESP/KmINzKBUXpXnjUg== X-Gm-Gg: ATEYQzwTzVa3ZTMopJ8UD/fQWUv+XKM/3SDz0imLAbfl6VXlzg0kNmV90LzxK0cM3do kb/as/NlJ162HMCzLJryxy2+c1pPUVsfLDt6xFHoHcbk+qWnejWFsEZZZiM9SKqsynbRnPT2vft wVCrm6OH4yEMT3/24Xou7zbl80dAVrouV41guZxOJIrT4Vccww27sYlMN7dTBP4+jYbT9afBxzX oSYRdXOYC9mnjGmjagtowf4Qrp/Zg8YqfflrHIAq6RuNBS4cMrUjNjZC4DjDZQTVBqqnn/ipQtq yIoAAMMOvygZLQpLtUIZS2UhbRNUgaVQ5JF3IwqHHnahWDlq88tPjvSvwm9bNxVsCoHeQ85KwMS Zu687bvEOUIPGTm+au/fdhKM+/pdlMZ5sWEZWgVMFeMfbgzfiTxj6LiQXt6grwZlntEMScWVOfA 62zr2F+P2LMV4z/LyMEFU= X-Received: by 2002:a05:6000:2507:b0:439:b79d:b9a5 with SMTP id ffacd0b85a97d-439b79dbb97mr14896571f8f.37.1772559114032; Tue, 03 Mar 2026 09:31:54 -0800 (PST) Received: from [172.31.5.233] ([165.225.27.16]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-439b3cc2e65sm20492184f8f.2.2026.03.03.09.31.52 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 03 Mar 2026 09:31:53 -0800 (PST) Content-Type: multipart/mixed; boundary="------------Ht7S7Lkye0rthafPsTAeW0KD" Message-ID: <2a76b5ef-4b12-4023-93a1-eed6e64968f3@gmail.com> Date: Tue, 3 Mar 2026 18:31:51 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Reduce build times of pg_trgm GIN indexes From: David Geier To: Matthias van de Meent Cc: Heikki Linnakangas , pgsql-hackers References: <5d366878-2007-4d31-861e-19294b7a583b@gmail.com> <9ac3931a-180e-4283-a7a8-05eb66099206@iki.fi> <2e11134f-02c3-43da-8c39-fb520a1a251d@iki.fi> <66620ec7-0f81-4813-9cf1-b901a56efcc3@gmail.com> Content-Language: en-US In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------Ht7S7Lkye0rthafPsTAeW0KD Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit > Attached are the patches rebased on latest master. > > I've removed the ASCII fast-path patch 0006 as it turned out to be more > complicated to make work than expected. > > I kept the radix sort patch because it gives a decent speedup but I > would like to focus for now on getting patches 0001 - 0004 merged. > They're all simple and, the way I see it, uncontroversial. > > I remeasured the savings of 0001 - 0004, which comes on top of the > already committed patch that inlined the comparison function, which gave > another ~5%: > > Data set | Patched (ms) | Master (ms) | Speedup > --------------------|--------------|--------------|---------- > movies(plot) | 8,058 | 10,311 | 1.27x > lineitem(l_comment) | 223,233 | 256,986 | 1.19x > > I've also registered the change at the commit fest, see > https://commitfest.postgresql.org/patch/6418/. Attached is v5 that removes an incorrect assertion from the radix sort code. -- David Geier --------------Ht7S7Lkye0rthafPsTAeW0KD Content-Type: text/x-patch; charset=UTF-8; name="v5-0005-Optimize-generate_trgm-with-radix-sort.patch" Content-Disposition: attachment; filename="v5-0005-Optimize-generate_trgm-with-radix-sort.patch" Content-Transfer-Encoding: base64 RnJvbSAxOTk4OGI3OGI0ZDNjNWJhZmYxOTI3N2IwOWE5OWQwOGYzMjg5ZDdlIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBEYXZpZCBHZWllciA8Z2VpZGF2LnBnQGdtYWlsLmNv bT4KRGF0ZTogVHVlLCAxMSBOb3YgMjAyNSAxMzoxODo1OSArMDEwMApTdWJqZWN0OiBbUEFU Q0ggdjUgNS81XSBPcHRpbWl6ZSBnZW5lcmF0ZV90cmdtKCkgd2l0aCByYWRpeCBzb3J0Cgot LS0KIGNvbnRyaWIvcGdfdHJnbS90cmdtX29wLmMgfCA2MyArKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKy0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCA1MyBpbnNlcnRpb25zKCsp LCAxMCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3RyZ20vdHJnbV9v cC5jIGIvY29udHJpYi9wZ190cmdtL3RyZ21fb3AuYwppbmRleCAwN2RhZjExMTcyOS4uZDA5 ZTMxOWRkYTEgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdfdHJnbS90cmdtX29wLmMKKysrIGIv Y29udHJpYi9wZ190cmdtL3RyZ21fb3AuYwpAQCAtMjM1LDE0ICsyMzUsNiBAQCBDTVBUUkdN X0NIT09TRShjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQogfQogCiAvKiBEZWZpbmUg b3VyIHNwZWNpYWxpemVkIHNvcnQgZnVuY3Rpb24gbmFtZSAqLwotI2RlZmluZSBTVF9TT1JU IHRyaWdyYW1fcXNvcnRfc2lnbmVkCi0jZGVmaW5lIFNUX0VMRU1FTlRfVFlQRV9WT0lECi0j ZGVmaW5lIFNUX0NPTVBBUkUoYSwgYikgQ01QVFJHTV9TSUdORUQoYSwgYikKLSNkZWZpbmUg U1RfU0NPUEUgc3RhdGljCi0jZGVmaW5lIFNUX0RFRklORQotI2RlZmluZSBTVF9ERUNMQVJF Ci0jaW5jbHVkZSAibGliL3NvcnRfdGVtcGxhdGUuaCIKLQogI2RlZmluZSBTVF9TT1JUIHRy aWdyYW1fcXNvcnRfdW5zaWduZWQKICNkZWZpbmUgU1RfRUxFTUVOVF9UWVBFX1ZPSUQKICNk ZWZpbmUgU1RfQ09NUEFSRShhLCBiKSBDTVBUUkdNX1VOU0lHTkVEKGEsIGIpCkBAIC01NjQs NiArNTU2LDU3IEBAIGdlbmVyYXRlX3RyZ21fb25seShncm93YWJsZV90cmdtX2FycmF5ICpk c3QsIGNoYXIgKnN0ciwgaW50IHNsZW4sIFRyZ21Cb3VuZCAqKmJvCiAJcGZyZWUoYnVmKTsK IH0KIAorLyoKKyAqIE5lZWRlZCB0byBwcm9wZXJseSBoYW5kbGUgbmVnYXRpdmUgbnVtYmVy cyBpbiBjYXNlIGNoYXIgaXMgc2lnbmVkLgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVk IGNoYXIgRmxpcFNpZ24oY2hhciB4KQoreworCXJldHVybiB4XjB4ODA7Cit9CisKK3N0YXRp YyB2b2lkIHJhZGl4X3NvcnRfdHJpZ3JhbXNfc2lnbmVkKHRyZ20gKnRyZywgaW50IGNvdW50 KQoreworCXRyZ20gKmJ1ZmZlciA9IHBhbGxvY19hcnJheSh0cmdtLCBjb3VudCk7CisJdHJn bSAqc3RhcnRzWzI1Nl07CisJdHJnbSAqZnJvbSA9IHRyZzsKKwl0cmdtICp0byA9IGJ1ZmZl cjsKKwlpbnQgZnJlcXNbM11bMjU2XTsKKworCS8qCisJICogQ29tcHV0ZSBmcmVxdWVuY2ll cyB0byBwYXJ0aXRpb24gdGhlIGJ1ZmZlci4KKwkgKi8KKwltZW1zZXQoZnJlcXMsIDAsIHNp emVvZihmcmVxcykpOworCisJZm9yIChpbnQgaT0wOyBpPGNvdW50OyBpKyspCisJCWZvciAo aW50IGo9MDsgajwzOyBqKyspCisJCQlmcmVxc1tqXVtGbGlwU2lnbih0cmdbaV1bal0pXSsr OworCisJLyoKKwkgKiBEbyB0aGUgc29ydGluZy4gU3RhcnQgd2l0aCBsYXN0IGNoYXJhY3Rl ciBiZWNhdXNlIHRoYXQncyB0aGUgaXMgIkxTQiIKKwkgKiBpbiBhIHRyaWdyYW0uIEF2b2lk IHVubmVjZXNzYXJ5IGNvcGllcyBieSBwaW5nLXBvbmdpbmcgYmV0d2VlbiB0aGUgYnVmZmVy cy4KKwkgKi8KKwlmb3IgKGludCBpPTI7IGk+PTA7IGktLSkKKwl7CisJCXRyZ20gKm9sZF9m cm9tID0gZnJvbTsKKwkJdHJnbSAqbmV4dCA9IHRvOworCisJCWZvciAoaW50IGo9MDsgajwy NTY7IGorKykKKwkJeworCQkJc3RhcnRzW2pdID0gbmV4dDsKKwkJCW5leHQgKz0gZnJlcXNb aV1bal07CisJCX0KKworCQlmb3IgKGludCBqPTA7IGo8Y291bnQ7IGorKykKKwkJCW1lbWNw eShzdGFydHNbRmxpcFNpZ24oZnJvbVtqXVtpXSldKyssIGZyb21bal0sIHNpemVvZih0cmdt KSk7CisKKwkJZnJvbSA9IHRvOworCQl0byA9IG9sZF9mcm9tOworCX0KKworCW1lbWNweSh0 cmcsIGJ1ZmZlciwgc2l6ZW9mKHRyZ20pICogY291bnQpOworCXBmcmVlKGJ1ZmZlcik7Cit9 CisKIC8qCiAgKiBNYWtlIGFycmF5IG9mIHRyaWdyYW1zIHdpdGggc29ydGluZyBhbmQgcmVt b3ZpbmcgZHVwbGljYXRlIGl0ZW1zLgogICoKQEAgLTU4OSw3ICs2MzIsNyBAQCBnZW5lcmF0 ZV90cmdtKGNoYXIgKnN0ciwgaW50IHNsZW4pCiAJaWYgKGxlbiA+IDEpCiAJewogCQlpZiAo R2V0RGVmYXVsdENoYXJTaWduZWRuZXNzKCkpCi0JCQl0cmlncmFtX3Fzb3J0X3NpZ25lZCgo dm9pZCAqKSBHRVRBUlIodHJnKSwgbGVuLCBzaXplb2YodHJnbSkpOworCQkJcmFkaXhfc29y dF90cmlncmFtc19zaWduZWQoKHRyZ20gKilHRVRBUlIodHJnKSwgbGVuKTsKIAkJZWxzZQog CQkJdHJpZ3JhbV9xc29ydF91bnNpZ25lZCgodm9pZCAqKSBHRVRBUlIodHJnKSwgbGVuLCBz aXplb2YodHJnbSkpOwogCkBAIC0xMTI0LDcgKzExNjcsNyBAQCBnZW5lcmF0ZV93aWxkY2Fy ZF90cmdtKGNvbnN0IGNoYXIgKnN0ciwgaW50IHNsZW4pCiAJaWYgKGxlbiA+IDEpCiAJewog CQlpZiAoR2V0RGVmYXVsdENoYXJTaWduZWRuZXNzKCkpCi0JCQl0cmlncmFtX3Fzb3J0X3Np Z25lZCgodm9pZCAqKSBHRVRBUlIodHJnKSwgbGVuLCBzaXplb2YodHJnbSkpOworCQkJcmFk aXhfc29ydF90cmlncmFtc19zaWduZWQoKHRyZ20gKilHRVRBUlIodHJnKSwgbGVuKTsKIAkJ ZWxzZQogCQkJdHJpZ3JhbV9xc29ydF91bnNpZ25lZCgodm9pZCAqKSBHRVRBUlIodHJnKSwg bGVuLCBzaXplb2YodHJnbSkpOwogCi0tIAoyLjUxLjAKCg== --------------Ht7S7Lkye0rthafPsTAeW0KD Content-Type: text/x-patch; charset=UTF-8; name="v5-0004-Faster-qunique-comparator-in-generate_trgm.patch" Content-Disposition: attachment; filename="v5-0004-Faster-qunique-comparator-in-generate_trgm.patch" Content-Transfer-Encoding: base64 RnJvbSA1NjNkZDE1MzM2OWE5MmJlMTE3MGJhNzdmMDQ3NTU2N2M5MjIzZjllIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBEYXZpZCBHZWllciA8Z2VpZGF2LnBnQGdtYWlsLmNv bT4KRGF0ZTogV2VkLCAxMiBOb3YgMjAyNSAxNDoyNzoxMyArMDEwMApTdWJqZWN0OiBbUEFU Q0ggdjUgNC81XSBGYXN0ZXIgcXVuaXF1ZSgpIGNvbXBhcmF0b3IgaW4gZ2VuZXJhdGVfdHJn bSgpCgotLS0KIGNvbnRyaWIvcGdfdHJnbS90cmdtX29wLmMgfCAyNCArKysrKysrKysrKyst LS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAxMiBpbnNlcnRpb25zKCspLCAxMiBkZWxl dGlvbnMoLSkKCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3RyZ20vdHJnbV9vcC5jIGIvY29u dHJpYi9wZ190cmdtL3RyZ21fb3AuYwppbmRleCA4NWRmNWVmMjMxMC4uMDdkYWYxMTE3Mjkg MTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdfdHJnbS90cmdtX29wLmMKKysrIGIvY29udHJpYi9w Z190cmdtL3RyZ21fb3AuYwpAQCAtMjExLDYgKzIxMSwxNCBAQCBDTVBUUkdNX1VOU0lHTkVE KGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCiAJCSAgIDogQ01QUENIQVJfVU5TKGEs IGIsIDIpKTsKIH0KIAorc3RhdGljIGlubGluZSBpbnQKK0NNUFRSR01fRVEoY29uc3Qgdm9p ZCAqYSwgY29uc3Qgdm9pZCAqYikKK3sKKwljaGFyICphYSA9IChjaGFyICopYTsKKwljaGFy ICpiYiA9IChjaGFyICopYjsKKwlyZXR1cm4gYWFbMF0gIT0gYmJbMF0gfHwgYWFbMV0gIT0g YmJbMV0gfHwgYWFbMl0gIT0gYmJbMl0gPyAxIDogMDsKK30KKwogLyoKICAqIFRoaXMgZ2V0 cyBjYWxsZWQgb24gdGhlIGZpcnN0IGNhbGwuIEl0IHJlcGxhY2VzIHRoZSBmdW5jdGlvbiBw b2ludGVyIHNvCiAgKiB0aGF0IHN1YnNlcXVlbnQgY2FsbHMgYXJlIHJvdXRlZCBkaXJlY3Rs eSB0byB0aGUgY2hvc2VuIGltcGxlbWVudGF0aW9uLgpAQCAtNTgxLDE1ICs1ODksMTEgQEAg Z2VuZXJhdGVfdHJnbShjaGFyICpzdHIsIGludCBzbGVuKQogCWlmIChsZW4gPiAxKQogCXsK IAkJaWYgKEdldERlZmF1bHRDaGFyU2lnbmVkbmVzcygpKQotCQl7CiAJCQl0cmlncmFtX3Fz b3J0X3NpZ25lZCgodm9pZCAqKSBHRVRBUlIodHJnKSwgbGVuLCBzaXplb2YodHJnbSkpOwot CQkJbGVuID0gcXVuaXF1ZShHRVRBUlIodHJnKSwgbGVuLCBzaXplb2YodHJnbSksIENNUFRS R01fU0lHTkVEKTsKLQkJfQogCQllbHNlCi0JCXsKIAkJCXRyaWdyYW1fcXNvcnRfdW5zaWdu ZWQoKHZvaWQgKikgR0VUQVJSKHRyZyksIGxlbiwgc2l6ZW9mKHRyZ20pKTsKLQkJCWxlbiA9 IHF1bmlxdWUoR0VUQVJSKHRyZyksIGxlbiwgc2l6ZW9mKHRyZ20pLCBDTVBUUkdNX1VOU0lH TkVEKTsKLQkJfQorCisJCWxlbiA9IHF1bmlxdWUoR0VUQVJSKHRyZyksIGxlbiwgc2l6ZW9m KHRyZ20pLCBDTVBUUkdNX0VRKTsKIAl9CiAKIAlTRVRfVkFSU0laRSh0cmcsIENBTENHVFNJ WkUoQVJSS0VZLCBsZW4pKTsKQEAgLTExMjAsMTUgKzExMjQsMTEgQEAgZ2VuZXJhdGVfd2ls ZGNhcmRfdHJnbShjb25zdCBjaGFyICpzdHIsIGludCBzbGVuKQogCWlmIChsZW4gPiAxKQog CXsKIAkJaWYgKEdldERlZmF1bHRDaGFyU2lnbmVkbmVzcygpKQotCQl7CiAJCQl0cmlncmFt X3Fzb3J0X3NpZ25lZCgodm9pZCAqKSBHRVRBUlIodHJnKSwgbGVuLCBzaXplb2YodHJnbSkp OwotCQkJbGVuID0gcXVuaXF1ZShHRVRBUlIodHJnKSwgbGVuLCBzaXplb2YodHJnbSksIENN UFRSR01fU0lHTkVEKTsKLQkJfQogCQllbHNlCi0JCXsKIAkJCXRyaWdyYW1fcXNvcnRfdW5z aWduZWQoKHZvaWQgKikgR0VUQVJSKHRyZyksIGxlbiwgc2l6ZW9mKHRyZ20pKTsKLQkJCWxl biA9IHF1bmlxdWUoR0VUQVJSKHRyZyksIGxlbiwgc2l6ZW9mKHRyZ20pLCBDTVBUUkdNX1VO U0lHTkVEKTsKLQkJfQorCisJCWxlbiA9IHF1bmlxdWUoR0VUQVJSKHRyZyksIGxlbiwgc2l6 ZW9mKHRyZ20pLCBDTVBUUkdNX0VRKTsKIAl9CiAKIAl0cmctPmZsYWcgPSBBUlJLRVk7Ci0t IAoyLjUxLjAKCg== --------------Ht7S7Lkye0rthafPsTAeW0KD Content-Type: text/x-patch; charset=UTF-8; name="v5-0003-Make-btint4cmp-branchless.patch" Content-Disposition: attachment; filename="v5-0003-Make-btint4cmp-branchless.patch" Content-Transfer-Encoding: base64 RnJvbSBlZWZlNzhjNmExMmE0NWVlZTdmNzg3ZWExMGE0NjkyZWM0YjI4YjYyIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBEYXZpZCBHZWllciA8Z2VpZGF2LnBnQGdtYWlsLmNv bT4KRGF0ZTogTW9uLCAxMCBOb3YgMjAyNSAxNTo0MDoxMSArMDEwMApTdWJqZWN0OiBbUEFU Q0ggdjUgMy81XSBNYWtlIGJ0aW50NGNtcCgpIGJyYW5jaGxlc3MKCi0tLQogc3JjL2JhY2tl bmQvYWNjZXNzL25idHJlZS9uYnRjb21wYXJlLmMgfCA4ICsrLS0tLS0tCiAxIGZpbGUgY2hh bmdlZCwgMiBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0Y29tcGFyZS5jIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL25idHJlZS9uYnRjb21wYXJlLmMKaW5kZXggMWQzNDMzNzdlOTguLmFjMTZlM2Q5OTNk IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idGNvbXBhcmUuYwor KysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idGNvbXBhcmUuYwpAQCAtNjEsNiAr NjEsNyBAQAogI2luY2x1ZGUgInV0aWxzL2ZtZ3Jwcm90b3MuaCIKICNpbmNsdWRlICJ1dGls cy9za2lwc3VwcG9ydC5oIgogI2luY2x1ZGUgInV0aWxzL3NvcnRzdXBwb3J0LmgiCisjaW5j bHVkZSAiY29tbW9uL2ludC5oIgogCiAjaWZkZWYgU1RSRVNTX1NPUlRfSU5UX01JTgogI2Rl ZmluZSBBX0xFU1NfVEhBTl9CCQlJTlRfTUlOCkBAIC0yMDMsMTIgKzIwNCw3IEBAIGJ0aW50 NGNtcChQR19GVU5DVElPTl9BUkdTKQogCWludDMyCQlhID0gUEdfR0VUQVJHX0lOVDMyKDAp OwogCWludDMyCQliID0gUEdfR0VUQVJHX0lOVDMyKDEpOwogCi0JaWYgKGEgPiBiKQotCQlQ R19SRVRVUk5fSU5UMzIoQV9HUkVBVEVSX1RIQU5fQik7Ci0JZWxzZSBpZiAoYSA9PSBiKQot CQlQR19SRVRVUk5fSU5UMzIoMCk7Ci0JZWxzZQotCQlQR19SRVRVUk5fSU5UMzIoQV9MRVNT X1RIQU5fQik7CisJUEdfUkVUVVJOX0lOVDMyKHBnX2NtcF9zMzIoYSwgYikpOwogfQogCiBE YXR1bQotLSAKMi41MS4wCgo= --------------Ht7S7Lkye0rthafPsTAeW0KD Content-Type: text/x-patch; charset=UTF-8; name="v5-0002-Optimize-generate_trgm-with-sort_template.h.patch" Content-Disposition: attachment; filename*0="v5-0002-Optimize-generate_trgm-with-sort_template.h.patch" Content-Transfer-Encoding: base64 RnJvbSA5NDkyY2EwNDM5ZDQ0ZDk4MDZmMmYwZDYxMjg4NTJlNDhkYzEwNWZlIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBEYXZpZCBHZWllciA8Z2VpZGF2LnBnQGdtYWlsLmNv bT4KRGF0ZTogTW9uLCAxMCBOb3YgMjAyNSAxMzozNToxMSArMDEwMApTdWJqZWN0OiBbUEFU Q0ggdjUgMi81XSBPcHRpbWl6ZSBnZW5lcmF0ZV90cmdtKCkgd2l0aCBzb3J0X3RlbXBsYXRl LmgKCi0tLQogY29udHJpYi9wZ190cmdtL3RyZ21fb3AuYyB8IDQ3ICsrKysrKysrKysrKysr KysrKysrKysrKysrKysrKy0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDM3IGluc2VydGlv bnMoKyksIDEwIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfdHJnbS90 cmdtX29wLmMgYi9jb250cmliL3BnX3RyZ20vdHJnbV9vcC5jCmluZGV4IGVlODllNTQ4ZDE2 Li44NWRmNWVmMjMxMCAxMDA2NDQKLS0tIGEvY29udHJpYi9wZ190cmdtL3RyZ21fb3AuYwor KysgYi9jb250cmliL3BnX3RyZ20vdHJnbV9vcC5jCkBAIC0yMjYsNiArMjI2LDIzIEBAIENN UFRSR01fQ0hPT1NFKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCiAJcmV0dXJuIENN UFRSR00oYSwgYik7CiB9CiAKKy8qIERlZmluZSBvdXIgc3BlY2lhbGl6ZWQgc29ydCBmdW5j dGlvbiBuYW1lICovCisjZGVmaW5lIFNUX1NPUlQgdHJpZ3JhbV9xc29ydF9zaWduZWQKKyNk ZWZpbmUgU1RfRUxFTUVOVF9UWVBFX1ZPSUQKKyNkZWZpbmUgU1RfQ09NUEFSRShhLCBiKSBD TVBUUkdNX1NJR05FRChhLCBiKQorI2RlZmluZSBTVF9TQ09QRSBzdGF0aWMKKyNkZWZpbmUg U1RfREVGSU5FCisjZGVmaW5lIFNUX0RFQ0xBUkUKKyNpbmNsdWRlICJsaWIvc29ydF90ZW1w bGF0ZS5oIgorCisjZGVmaW5lIFNUX1NPUlQgdHJpZ3JhbV9xc29ydF91bnNpZ25lZAorI2Rl ZmluZSBTVF9FTEVNRU5UX1RZUEVfVk9JRAorI2RlZmluZSBTVF9DT01QQVJFKGEsIGIpIENN UFRSR01fVU5TSUdORUQoYSwgYikKKyNkZWZpbmUgU1RfU0NPUEUgc3RhdGljCisjZGVmaW5l IFNUX0RFRklORQorI2RlZmluZSBTVF9ERUNMQVJFCisjaW5jbHVkZSAibGliL3NvcnRfdGVt cGxhdGUuaCIKKwogLyoKICAqIERlcHJlY2F0ZWQgZnVuY3Rpb24uCiAgKiBVc2UgInBnX3Ry Z20uc2ltaWxhcml0eV90aHJlc2hvbGQiIEdVQyB2YXJpYWJsZSBpbnN0ZWFkIG9mIHRoaXMg ZnVuY3Rpb24uCkBAIC0yODEsMTIgKzI5OCw2IEBAIHNob3dfbGltaXQoUEdfRlVOQ1RJT05f QVJHUykKIAlQR19SRVRVUk5fRkxPQVQ0KHNpbWlsYXJpdHlfdGhyZXNob2xkKTsKIH0KIAot c3RhdGljIGludAotY29tcF90cmdtKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCi17 Ci0JcmV0dXJuIENNUFRSR00oYSwgYik7Ci19Ci0KIC8qCiAgKiBGaW5kcyBmaXJzdCB3b3Jk IGluIHN0cmluZywgcmV0dXJucyBwb2ludGVyIHRvIHRoZSB3b3JkLAogICogZW5kd29yZCBw b2ludHMgdG8gdGhlIGNoYXJhY3RlciBhZnRlciB3b3JkCkBAIC01NjksOCArNTgwLDE2IEBA IGdlbmVyYXRlX3RyZ20oY2hhciAqc3RyLCBpbnQgc2xlbikKIAkgKi8KIAlpZiAobGVuID4g MSkKIAl7Ci0JCXFzb3J0KEdFVEFSUih0cmcpLCBsZW4sIHNpemVvZih0cmdtKSwgY29tcF90 cmdtKTsKLQkJbGVuID0gcXVuaXF1ZShHRVRBUlIodHJnKSwgbGVuLCBzaXplb2YodHJnbSks IGNvbXBfdHJnbSk7CisJCWlmIChHZXREZWZhdWx0Q2hhclNpZ25lZG5lc3MoKSkKKwkJewor CQkJdHJpZ3JhbV9xc29ydF9zaWduZWQoKHZvaWQgKikgR0VUQVJSKHRyZyksIGxlbiwgc2l6 ZW9mKHRyZ20pKTsKKwkJCWxlbiA9IHF1bmlxdWUoR0VUQVJSKHRyZyksIGxlbiwgc2l6ZW9m KHRyZ20pLCBDTVBUUkdNX1NJR05FRCk7CisJCX0KKwkJZWxzZQorCQl7CisJCQl0cmlncmFt X3Fzb3J0X3Vuc2lnbmVkKCh2b2lkICopIEdFVEFSUih0cmcpLCBsZW4sIHNpemVvZih0cmdt KSk7CisJCQlsZW4gPSBxdW5pcXVlKEdFVEFSUih0cmcpLCBsZW4sIHNpemVvZih0cmdtKSwg Q01QVFJHTV9VTlNJR05FRCk7CisJCX0KIAl9CiAKIAlTRVRfVkFSU0laRSh0cmcsIENBTENH VFNJWkUoQVJSS0VZLCBsZW4pKTsKQEAgLTExMDAsOCArMTExOSwxNiBAQCBnZW5lcmF0ZV93 aWxkY2FyZF90cmdtKGNvbnN0IGNoYXIgKnN0ciwgaW50IHNsZW4pCiAJbGVuID0gYXJyLmxl bmd0aDsKIAlpZiAobGVuID4gMSkKIAl7Ci0JCXFzb3J0KEdFVEFSUih0cmcpLCBsZW4sIHNp emVvZih0cmdtKSwgY29tcF90cmdtKTsKLQkJbGVuID0gcXVuaXF1ZShHRVRBUlIodHJnKSwg bGVuLCBzaXplb2YodHJnbSksIGNvbXBfdHJnbSk7CisJCWlmIChHZXREZWZhdWx0Q2hhclNp Z25lZG5lc3MoKSkKKwkJeworCQkJdHJpZ3JhbV9xc29ydF9zaWduZWQoKHZvaWQgKikgR0VU QVJSKHRyZyksIGxlbiwgc2l6ZW9mKHRyZ20pKTsKKwkJCWxlbiA9IHF1bmlxdWUoR0VUQVJS KHRyZyksIGxlbiwgc2l6ZW9mKHRyZ20pLCBDTVBUUkdNX1NJR05FRCk7CisJCX0KKwkJZWxz ZQorCQl7CisJCQl0cmlncmFtX3Fzb3J0X3Vuc2lnbmVkKCh2b2lkICopIEdFVEFSUih0cmcp LCBsZW4sIHNpemVvZih0cmdtKSk7CisJCQlsZW4gPSBxdW5pcXVlKEdFVEFSUih0cmcpLCBs ZW4sIHNpemVvZih0cmdtKSwgQ01QVFJHTV9VTlNJR05FRCk7CisJCX0KIAl9CiAKIAl0cmct PmZsYWcgPSBBUlJLRVk7Ci0tIAoyLjUxLjAKCg== --------------Ht7S7Lkye0rthafPsTAeW0KD Content-Type: text/x-patch; charset=UTF-8; name="v5-0001-Optimize-sort-and-deduplication-in-ginExtractEntr.patch" Content-Disposition: attachment; filename*0="v5-0001-Optimize-sort-and-deduplication-in-ginExtractEntr.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA3YWIyYjJhZjJkODRiMWE1ZTBlNzlkMWNlOWRiZDRkN2I1ZDRiOTIxIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBEYXZpZCBHZWllciA8Z2VpZGF2LnBnQGdtYWlsLmNv bT4KRGF0ZTogV2VkLCAxNCBKYW4gMjAyNiAxMDo1NDozMiArMDEwMApTdWJqZWN0OiBbUEFU Q0ggdjUgMS81XSBPcHRpbWl6ZSBzb3J0IGFuZCBkZWR1cGxpY2F0aW9uIGluIGdpbkV4dHJh Y3RFbnRyaWVzCgotLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2ludXRpbC5jIHwgMTUy ICsrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9n aW5fcHJpdmF0ZS5oIHwgICAyICstCiAyIGZpbGVzIGNoYW5nZWQsIDY2IGluc2VydGlvbnMo KyksIDg4IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9n aW4vZ2ludXRpbC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW51dGlsLmMKaW5kZXgg ZmY5MjcyNzljYzMuLjE1ZjRhNjg2Nzk1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nl c3MvZ2luL2dpbnV0aWwuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbnV0aWwu YwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgInV0aWxzL2luZGV4X3NlbGZ1bmNzLmgi CiAjaW5jbHVkZSAidXRpbHMvcmVsLmgiCiAjaW5jbHVkZSAidXRpbHMvdHlwY2FjaGUuaCIK KyNpbmNsdWRlICJsaWIvcXVuaXF1ZS5oIgogCiAKIC8qCkBAIC0zODcsMTkgKzM4OCw2IEBA IEdpbkluaXRNZXRhYnVmZmVyKEJ1ZmZlciBiKQogCQkoKGNoYXIgKikgbWV0YWRhdGEgKyBz aXplb2YoR2luTWV0YVBhZ2VEYXRhKSkgLSAoY2hhciAqKSBwYWdlOwogfQogCi0vKgotICog U3VwcG9ydCBmb3Igc29ydGluZyBrZXkgZGF0dW1zIGluIGdpbkV4dHJhY3RFbnRyaWVzCi0g KgotICogTm90ZTogd2Ugb25seSBoYXZlIHRvIHdvcnJ5IGFib3V0IG51bGwgYW5kIG5vdC1u dWxsIGtleXMgaGVyZTsKLSAqIGdpbkV4dHJhY3RFbnRyaWVzIG5ldmVyIGdlbmVyYXRlcyBt b3JlIHRoYW4gb25lIHBsYWNlaG9sZGVyIG51bGwsCi0gKiBzbyBpdCBkb2Vzbid0IGhhdmUg dG8gc29ydCB0aG9zZS4KLSAqLwotdHlwZWRlZiBzdHJ1Y3QKLXsKLQlEYXR1bQkJZGF0dW07 Ci0JYm9vbAkJaXNudWxsOwotfSBrZXlFbnRyeURhdGE7Ci0KIHR5cGVkZWYgc3RydWN0CiB7 CiAJRm1nckluZm8gICAqY21wRGF0dW1GdW5jOwpAQCAtNDEwLDI0ICszOTgsMTQgQEAgdHlw ZWRlZiBzdHJ1Y3QKIHN0YXRpYyBpbnQKIGNtcEVudHJpZXMoY29uc3Qgdm9pZCAqYSwgY29u c3Qgdm9pZCAqYiwgdm9pZCAqYXJnKQogewotCWNvbnN0IGtleUVudHJ5RGF0YSAqYWEgPSAo Y29uc3Qga2V5RW50cnlEYXRhICopIGE7Ci0JY29uc3Qga2V5RW50cnlEYXRhICpiYiA9IChj b25zdCBrZXlFbnRyeURhdGEgKikgYjsKKwljb25zdCBEYXR1bSAqYWEgPSAoY29uc3QgRGF0 dW0gKikgYTsKKwljb25zdCBEYXR1bSAqYmIgPSAoY29uc3QgRGF0dW0gKikgYjsKIAljbXBF bnRyaWVzQXJnICpkYXRhID0gKGNtcEVudHJpZXNBcmcgKikgYXJnOwogCWludAkJCXJlczsK IAotCWlmIChhYS0+aXNudWxsKQotCXsKLQkJaWYgKGJiLT5pc251bGwpCi0JCQlyZXMgPSAw OwkJCS8qIE5VTEwgIj0iIE5VTEwgKi8KLQkJZWxzZQotCQkJcmVzID0gMTsJCQkvKiBOVUxM ICI+IiBub3QtTlVMTCAqLwotCX0KLQllbHNlIGlmIChiYi0+aXNudWxsKQotCQlyZXMgPSAt MTsJCQkJLyogbm90LU5VTEwgIjwiIE5VTEwgKi8KLQllbHNlCi0JCXJlcyA9IERhdHVtR2V0 SW50MzIoRnVuY3Rpb25DYWxsMkNvbGwoZGF0YS0+Y21wRGF0dW1GdW5jLAotCQkJCQkJCQkJ CQkgIGRhdGEtPmNvbGxhdGlvbiwKLQkJCQkJCQkJCQkJICBhYS0+ZGF0dW0sIGJiLT5kYXR1 bSkpOworCXJlcyA9IERhdHVtR2V0SW50MzIoRnVuY3Rpb25DYWxsMkNvbGwoZGF0YS0+Y21w RGF0dW1GdW5jLAorCQkJCQkJCQkJCSAgZGF0YS0+Y29sbGF0aW9uLAorCQkJCQkJCQkJCSAg KmFhLCAqYmIpKTsKIAogCS8qCiAJICogRGV0ZWN0IGlmIHdlIGhhdmUgYW55IGR1cGxpY2F0 ZXMuICBJZiB0aGVyZSBhcmUgZXF1YWwga2V5cywgcXNvcnQgbXVzdApAQCAtNDQwLDYgKzQx OCwxNCBAQCBjbXBFbnRyaWVzKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIsIHZvaWQg KmFyZykKIAlyZXR1cm4gcmVzOwogfQogCisjZGVmaW5lIFNUX1NPUlQgcXNvcnRfYXJnX2Vu dHJpZXMKKyNkZWZpbmUgU1RfRUxFTUVOVF9UWVBFIERhdHVtCisjZGVmaW5lIFNUX0NPTVBB UkVfQVJHX1RZUEUgY21wRW50cmllc0FyZworI2RlZmluZSBTVF9DT01QQVJFKGEsIGIsIGFy ZykgY21wRW50cmllcyhhLCBiLCBhcmcpCisjZGVmaW5lIFNUX1NDT1BFIHN0YXRpYworI2Rl ZmluZSBTVF9ERUZJTkUKKyNkZWZpbmUgU1RfREVDTEFSRQorI2luY2x1ZGUgImxpYi9zb3J0 X3RlbXBsYXRlLmgiCiAKIC8qCiAgKiBFeHRyYWN0IHRoZSBpbmRleCBrZXkgdmFsdWVzIGZy b20gYW4gaW5kZXhhYmxlIGl0ZW0KQEAgLTQ1MCwxMSArNDM2LDEzIEBAIGNtcEVudHJpZXMo Y29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYiwgdm9pZCAqYXJnKQogRGF0dW0gKgogZ2lu RXh0cmFjdEVudHJpZXMoR2luU3RhdGUgKmdpbnN0YXRlLCBPZmZzZXROdW1iZXIgYXR0bnVt LAogCQkJCSAgRGF0dW0gdmFsdWUsIGJvb2wgaXNOdWxsLAotCQkJCSAgaW50MzIgKm5lbnRy aWVzLCBHaW5OdWxsQ2F0ZWdvcnkgKipjYXRlZ29yaWVzKQorCQkJCSAgaW50MzIgKm5lbnRy aWVzX3AsIEdpbk51bGxDYXRlZ29yeSAqKmNhdGVnb3JpZXNfcCkKIHsKIAlEYXR1bQkgICAq ZW50cmllczsKIAlib29sCSAgICpudWxsRmxhZ3M7Ci0JaW50MzIJCWk7CisJR2luTnVsbENh dGVnb3J5ICpjYXRlZ29yaWVzOworCWJvb2wJCWhhc051bGw7CisJaW50MzIJCW5lbnRyaWVz OwogCiAJLyoKIAkgKiBXZSBkb24ndCBjYWxsIHRoZSBleHRyYWN0VmFsdWVGbiBvbiBhIG51 bGwgaXRlbS4gIEluc3RlYWQgZ2VuZXJhdGUgYQpAQCAtNDYyLDQyICs0NTAsNjAgQEAgZ2lu RXh0cmFjdEVudHJpZXMoR2luU3RhdGUgKmdpbnN0YXRlLCBPZmZzZXROdW1iZXIgYXR0bnVt LAogCSAqLwogCWlmIChpc051bGwpCiAJewotCQkqbmVudHJpZXMgPSAxOworCQkqbmVudHJp ZXNfcCA9IDE7CiAJCWVudHJpZXMgPSBwYWxsb2Nfb2JqZWN0KERhdHVtKTsKIAkJZW50cmll c1swXSA9IChEYXR1bSkgMDsKLQkJKmNhdGVnb3JpZXMgPSBwYWxsb2Nfb2JqZWN0KEdpbk51 bGxDYXRlZ29yeSk7Ci0JCSgqY2F0ZWdvcmllcylbMF0gPSBHSU5fQ0FUX05VTExfSVRFTTsK KwkJKmNhdGVnb3JpZXNfcCA9IHBhbGxvY19vYmplY3QoR2luTnVsbENhdGVnb3J5KTsKKwkJ KCpjYXRlZ29yaWVzX3ApWzBdID0gR0lOX0NBVF9OVUxMX0lURU07CiAJCXJldHVybiBlbnRy aWVzOwogCX0KIAogCS8qIE9LLCBjYWxsIHRoZSBvcGNsYXNzJ3MgZXh0cmFjdFZhbHVlRm4g Ki8KIAludWxsRmxhZ3MgPSBOVUxMOwkJCS8qIGluIGNhc2UgZXh0cmFjdFZhbHVlIGRvZXNu J3Qgc2V0IGl0ICovCisJbmVudHJpZXMgPSAwOwogCWVudHJpZXMgPSAoRGF0dW0gKikKIAkJ RGF0dW1HZXRQb2ludGVyKEZ1bmN0aW9uQ2FsbDNDb2xsKCZnaW5zdGF0ZS0+ZXh0cmFjdFZh bHVlRm5bYXR0bnVtIC0gMV0sCiAJCQkJCQkJCQkJICBnaW5zdGF0ZS0+c3VwcG9ydENvbGxh dGlvblthdHRudW0gLSAxXSwKIAkJCQkJCQkJCQkgIHZhbHVlLAotCQkJCQkJCQkJCSAgUG9p bnRlckdldERhdHVtKG5lbnRyaWVzKSwKKwkJCQkJCQkJCQkgIFBvaW50ZXJHZXREYXR1bSgm bmVudHJpZXMpLAogCQkJCQkJCQkJCSAgUG9pbnRlckdldERhdHVtKCZudWxsRmxhZ3MpKSk7 CiAKIAkvKgogCSAqIEdlbmVyYXRlIGEgcGxhY2Vob2xkZXIgaWYgdGhlIGl0ZW0gY29udGFp bmVkIG5vIGtleXMuCiAJICovCi0JaWYgKGVudHJpZXMgPT0gTlVMTCB8fCAqbmVudHJpZXMg PD0gMCkKKwlpZiAoZW50cmllcyA9PSBOVUxMIHx8IG5lbnRyaWVzIDw9IDApCiAJewotCQkq bmVudHJpZXMgPSAxOworCQkqbmVudHJpZXNfcCA9IDE7CiAJCWVudHJpZXMgPSBwYWxsb2Nf b2JqZWN0KERhdHVtKTsKIAkJZW50cmllc1swXSA9IChEYXR1bSkgMDsKLQkJKmNhdGVnb3Jp ZXMgPSBwYWxsb2Nfb2JqZWN0KEdpbk51bGxDYXRlZ29yeSk7Ci0JCSgqY2F0ZWdvcmllcylb MF0gPSBHSU5fQ0FUX0VNUFRZX0lURU07CisJCSpjYXRlZ29yaWVzX3AgPSBwYWxsb2Nfb2Jq ZWN0KEdpbk51bGxDYXRlZ29yeSk7CisJCSgqY2F0ZWdvcmllc19wKVswXSA9IEdJTl9DQVRf RU1QVFlfSVRFTTsKIAkJcmV0dXJuIGVudHJpZXM7CiAJfQogCiAJLyoKLQkgKiBJZiB0aGUg ZXh0cmFjdFZhbHVlRm4gZGlkbid0IGNyZWF0ZSBhIG51bGxGbGFncyBhcnJheSwgY3JlYXRl IG9uZSwKLQkgKiBhc3N1bWluZyB0aGF0IGV2ZXJ5dGhpbmcncyBub24tbnVsbC4KKwkgKiBT Y2FuIHRoZSBpdGVtcyBmb3IgYW55IE5VTExzLiAgQWxsIE5VTExzIGFyZSBjb25zaWRlcmVk IGVxdWFsLCBzbyB3ZQorCSAqIGp1c3QgbmVlZCB0byBjaGVjayBhbmQgcmVtZW1iZXIgaWYg dGhlcmUgYXJlIGFueS4gIFdlIHJlbW92ZSB0aGVtIGZyb20KKwkgKiB0aGUgYXJyYXkgaGVy ZSwgYW5kIGlmIG5lY2Vzc2FyeSwgcHV0IGJhY2sgb25lIE5VTEwgZW50cnkgdG8gcmVwcmVz ZW50CisJICogdGhlbSBhbGwgYWZ0ZXIgZGVkdXBsaWNhdGlvbi4KIAkgKi8KLQlpZiAobnVs bEZsYWdzID09IE5VTEwpCi0JCW51bGxGbGFncyA9IChib29sICopIHBhbGxvYzAoKm5lbnRy aWVzICogc2l6ZW9mKGJvb2wpKTsKKwloYXNOdWxsID0gZmFsc2U7CisJaWYgKG51bGxGbGFn cykKKwl7CisJCWludDMyCQludW1Ob25OdWxscyA9IDA7CisKKwkJZm9yIChpbnQzMiBpID0g MDsgaSA8IG5lbnRyaWVzOyBpKyspCisJCXsKKwkJCWlmIChudWxsRmxhZ3NbaV0pCisJCQkJ aGFzTnVsbCA9IHRydWU7CisJCQllbHNlCisJCQl7CisJCQkJZW50cmllc1tudW1Ob25OdWxs c10gPSBlbnRyaWVzW2ldOworCQkJCW51bU5vbk51bGxzKys7CisJCQl9CisJCX0KKwkJbmVu dHJpZXMgPSBudW1Ob25OdWxsczsKKwl9CiAKIAkvKgogCSAqIElmIHRoZXJlJ3MgbW9yZSB0 aGFuIG9uZSBrZXksIHNvcnQgYW5kIHVuaXF1ZS1pZnkuCkBAIC01MDYsNjMgKzUxMiwzNSBA QCBnaW5FeHRyYWN0RW50cmllcyhHaW5TdGF0ZSAqZ2luc3RhdGUsIE9mZnNldE51bWJlciBh dHRudW0sCiAJICogcHJldHR5IGJhZCB0b28uICBGb3Igc21hbGwgbnVtYmVycyBvZiBrZXlz IGl0J2QgbGlrZWx5IGJlIGJldHRlciB0byB1c2UKIAkgKiBhIHNpbXBsZSBpbnNlcnRpb24g c29ydC4KIAkgKi8KLQlpZiAoKm5lbnRyaWVzID4gMSkKKwlpZiAobmVudHJpZXMgPiAxKQog CXsKLQkJa2V5RW50cnlEYXRhICprZXlkYXRhOwogCQljbXBFbnRyaWVzQXJnIGFyZzsKLQot CQlrZXlkYXRhID0gcGFsbG9jX2FycmF5KGtleUVudHJ5RGF0YSwgKm5lbnRyaWVzKTsKLQkJ Zm9yIChpID0gMDsgaSA8ICpuZW50cmllczsgaSsrKQotCQl7Ci0JCQlrZXlkYXRhW2ldLmRh dHVtID0gZW50cmllc1tpXTsKLQkJCWtleWRhdGFbaV0uaXNudWxsID0gbnVsbEZsYWdzW2ld OwotCQl9Ci0KIAkJYXJnLmNtcERhdHVtRnVuYyA9ICZnaW5zdGF0ZS0+Y29tcGFyZUZuW2F0 dG51bSAtIDFdOwogCQlhcmcuY29sbGF0aW9uID0gZ2luc3RhdGUtPnN1cHBvcnRDb2xsYXRp b25bYXR0bnVtIC0gMV07CiAJCWFyZy5oYXZlRHVwcyA9IGZhbHNlOwotCQlxc29ydF9hcmco a2V5ZGF0YSwgKm5lbnRyaWVzLCBzaXplb2Yoa2V5RW50cnlEYXRhKSwKLQkJCQkgIGNtcEVu dHJpZXMsICZhcmcpOwogCi0JCWlmIChhcmcuaGF2ZUR1cHMpCi0JCXsKLQkJCS8qIHRoZXJl IGFyZSBkdXBsaWNhdGVzLCBtdXN0IGdldCByaWQgb2YgJ2VtICovCi0JCQlpbnQzMgkJajsK LQotCQkJZW50cmllc1swXSA9IGtleWRhdGFbMF0uZGF0dW07Ci0JCQludWxsRmxhZ3NbMF0g PSBrZXlkYXRhWzBdLmlzbnVsbDsKLQkJCWogPSAxOwotCQkJZm9yIChpID0gMTsgaSA8ICpu ZW50cmllczsgaSsrKQotCQkJewotCQkJCWlmIChjbXBFbnRyaWVzKCZrZXlkYXRhW2kgLSAx XSwgJmtleWRhdGFbaV0sICZhcmcpICE9IDApCi0JCQkJewotCQkJCQllbnRyaWVzW2pdID0g a2V5ZGF0YVtpXS5kYXR1bTsKLQkJCQkJbnVsbEZsYWdzW2pdID0ga2V5ZGF0YVtpXS5pc251 bGw7Ci0JCQkJCWorKzsKLQkJCQl9Ci0JCQl9Ci0JCQkqbmVudHJpZXMgPSBqOwotCQl9Ci0J CWVsc2UKLQkJewotCQkJLyogZWFzeSwgbm8gZHVwbGljYXRlcyAqLwotCQkJZm9yIChpID0g MDsgaSA8ICpuZW50cmllczsgaSsrKQotCQkJewotCQkJCWVudHJpZXNbaV0gPSBrZXlkYXRh W2ldLmRhdHVtOwotCQkJCW51bGxGbGFnc1tpXSA9IGtleWRhdGFbaV0uaXNudWxsOwotCQkJ fQotCQl9CisJCXFzb3J0X2FyZ19lbnRyaWVzKGVudHJpZXMsIG5lbnRyaWVzLCAmYXJnKTsK IAotCQlwZnJlZShrZXlkYXRhKTsKKwkJaWYgKGFyZy5oYXZlRHVwcykKKwkJCW5lbnRyaWVz ID0gcXVuaXF1ZV9hcmcoZW50cmllcywgbmVudHJpZXMsIHNpemVvZihEYXR1bSksIGNtcEVu dHJpZXMsICZhcmcpOwogCX0KIAogCS8qCi0JICogQ3JlYXRlIEdpbk51bGxDYXRlZ29yeSBy ZXByZXNlbnRhdGlvbiBmcm9tIG51bGxGbGFncy4KKwkgKiBDcmVhdGUgR2luTnVsbENhdGVn b3J5IHJlcHJlc2VudGF0aW9uLgogCSAqLwotCSpjYXRlZ29yaWVzID0gKEdpbk51bGxDYXRl Z29yeSAqKSBwYWxsb2MwKCpuZW50cmllcyAqIHNpemVvZihHaW5OdWxsQ2F0ZWdvcnkpKTsK LQlmb3IgKGkgPSAwOyBpIDwgKm5lbnRyaWVzOyBpKyspCi0JCSgqY2F0ZWdvcmllcylbaV0g PSAobnVsbEZsYWdzW2ldID8gR0lOX0NBVF9OVUxMX0tFWSA6IEdJTl9DQVRfTk9STV9LRVkp OworCVN0YXRpY0Fzc2VydFN0bXQoR0lOX0NBVF9OT1JNX0tFWSA9PSAwLCAiQXNzdW1pbmcg R0lOX0NBVF9OT1JNX0tFWT0wIik7CisJY2F0ZWdvcmllcyA9IHBhbGxvYzBfYXJyYXkoR2lu TnVsbENhdGVnb3J5LCBuZW50cmllcyArIChoYXNOdWxsID8gMSA6IDApKTsKKworCS8qIFB1 dCBiYWNrIGEgTlVMTCBlbnRyeSwgaWYgdGhlcmUgd2VyZSBhbnkgKi8KKwlpZiAoaGFzTnVs bCkKKwl7CisJCWVudHJpZXNbbmVudHJpZXNdID0gKERhdHVtKSAwOworCQljYXRlZ29yaWVz W25lbnRyaWVzXSA9IEdJTl9DQVRfTlVMTF9LRVk7CisJCW5lbnRyaWVzKys7CisJfQogCisJ Km5lbnRyaWVzX3AgPSBuZW50cmllczsKKwkqY2F0ZWdvcmllc19wID0gY2F0ZWdvcmllczsK IAlyZXR1cm4gZW50cmllczsKIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNz L2dpbl9wcml2YXRlLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2luX3ByaXZhdGUuaAppbmRl eCA3YzNiNGRiOTRjZC4uYzg3ODU0NmI5ZDIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2Fj Y2Vzcy9naW5fcHJpdmF0ZS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9naW5fcHJpdmF0 ZS5oCkBAIC05OSw3ICs5OSw3IEBAIGV4dGVybiB2b2lkIEdpbkluaXRQYWdlKFBhZ2UgcGFn ZSwgdWludDMyIGYsIFNpemUgcGFnZVNpemUpOwogZXh0ZXJuIHZvaWQgR2luSW5pdE1ldGFi dWZmZXIoQnVmZmVyIGIpOwogZXh0ZXJuIERhdHVtICpnaW5FeHRyYWN0RW50cmllcyhHaW5T dGF0ZSAqZ2luc3RhdGUsIE9mZnNldE51bWJlciBhdHRudW0sCiAJCQkJCQkJCURhdHVtIHZh bHVlLCBib29sIGlzTnVsbCwKLQkJCQkJCQkJaW50MzIgKm5lbnRyaWVzLCBHaW5OdWxsQ2F0 ZWdvcnkgKipjYXRlZ29yaWVzKTsKKwkJCQkJCQkJaW50MzIgKm5lbnRyaWVzX3AsIEdpbk51 bGxDYXRlZ29yeSAqKmNhdGVnb3JpZXNfcCk7CiAKIGV4dGVybiBPZmZzZXROdW1iZXIgZ2lu dHVwbGVfZ2V0X2F0dHJudW0oR2luU3RhdGUgKmdpbnN0YXRlLCBJbmRleFR1cGxlIHR1cGxl KTsKIGV4dGVybiBEYXR1bSBnaW50dXBsZV9nZXRfa2V5KEdpblN0YXRlICpnaW5zdGF0ZSwg SW5kZXhUdXBsZSB0dXBsZSwKLS0gCjIuNTEuMAoK --------------Ht7S7Lkye0rthafPsTAeW0KD--