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 1vC0sl-007vLp-7a for pgsql-hackers@arkaria.postgresql.org; Thu, 23 Oct 2025 19:21:54 +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 1vC0si-00BE9T-Pr for pgsql-hackers@arkaria.postgresql.org; Thu, 23 Oct 2025 19:21:51 +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 1vC0si-00BE8d-5U for pgsql-hackers@lists.postgresql.org; Thu, 23 Oct 2025 19:21:51 +0000 Received: from mail-qk1-x731.google.com ([2607:f8b0:4864:20::731]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vC0se-003P5D-2z for pgsql-hackers@postgresql.org; Thu, 23 Oct 2025 19:21:50 +0000 Received: by mail-qk1-x731.google.com with SMTP id af79cd13be357-88f2aebce7fso128720585a.3 for ; Thu, 23 Oct 2025 12:21:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1761247308; x=1761852108; darn=postgresql.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=qRrSVrTccRVX9W/CwQFhlWw+1V/cykROhg3vzeZQ6G8=; b=A9EqUpXruJPgsjz0ElVvWMAFBBAaIKqG8elxaVw4ZNE5dtTVMXMN22nSV54nt26U8T 9cc+gTC1deCNUEmCRUJsIDgYuAZ94LbCBk0MK7GNwD7zi9Q+2uysXwD2tX2feGbOb7Sv 59kh/T95Na59Evud+JAbT3r/pu4t2z5Wnk9i5ddeNuFMWerZNI1Cl8WbfBAlRHFQiCyD N3y0tMvNTmgRpzqKsvf/+IZ60Ie4GAAH/c50Kkw49ROb0pgkG5akJGNJATzOSEyVGLsF d+pwXeYe8FKowg1HzwG8p8/gQ8FB18D7PXVokdmjcSf5sAzuJzpyIAIoeK1uX2ImC1jG +ejw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761247308; x=1761852108; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=qRrSVrTccRVX9W/CwQFhlWw+1V/cykROhg3vzeZQ6G8=; b=Wd6L+KBPV2OvglGoxsW7GqjK+sjbKPlAUUXyFJp3mVc3SRl6ptHVHqyee6y60f3POf ICUxIahaggesgldRUneu/uVrsh0U8aNoGWFoi5OFPxkeNJ7IBDLEiS6wxaW1sPQK2bhN +a5FbplmJDXnS/jD+tky6zVZ1dPf+Opc0drrHsovnGvwybEL8tVcq6uuXGT1us36DLzR bnm7Dk6j2culeh/TO92FCt2Xj1GlmryDCW960ZMJrq37r3ndztCq4SsKIqBRx3GsVyqh 0ZgeRb0tB+fEHzosvy1ElbH2TMeXsMr4Qh/4ZhDlGAoMHHLIM1ROQi/BE8rs8dZkmnAL mgng== X-Gm-Message-State: AOJu0YwnydHxxAquUV8B3w5pSD3MvaY/wstYzsAuOXh2CNckq0lITo/W ctSrIu1+k5ihDlU7whKYkDLUJ3/WRTDWc/41osM1AW28FPOG6P4pJs+rJAR7tmmzZyL3ZbZKqg0 hywiyGOGPtvGZ1vUxVNpdD4X9cTX61oU70m7U X-Gm-Gg: ASbGncvzJL0cesD9RFt9PPtDssIgAchpxIeeAAR5rjJ9cuiJ/Lrgq4nFP8SMgjr7kta c4iBQbx5UzNT+3TuRfT7D2agbN5IRTBQ2OjthTLuTyapQdhnbk5qioDlc+ZCJ1o/j1j64/yciG2 rFyrkfu2y2LpIMFM1zcmicWStr+ibNs/wl3g5cyojHaHTiEyKul3mtNAZDbQluZ6MW/BXQEt91j 3VEvsvn3zMX/xuB8NbbUoySWl0biqB/W3eenPYHGesd5HXpQiFNx/+fl4XITe15bHIBmviP X-Google-Smtp-Source: AGHT+IHn0od5Wg7bhXWqXxDmIAEWkB6s3UxKGOMyGXYHEPmbGvMOVAJdXMyIV5fibwpWb4i4tswKF5CbA5EFKZVSpk8= X-Received: by 2002:a05:620a:4712:b0:89c:351:1ea7 with SMTP id af79cd13be357-89c03511ecamr451061485a.76.1761247307620; Thu, 23 Oct 2025 12:21:47 -0700 (PDT) MIME-Version: 1.0 From: Kirill Reshke Date: Fri, 24 Oct 2025 00:21:35 +0500 X-Gm-Features: AS18NWC77i_Zlug8oF1pimcCg2y47NaZxNR_sOINMI3d0d0EABgTVLKkmcWSKXw Message-ID: Subject: Use log_newpage_range in HASH index build To: pgsql-hackers Content-Type: multipart/mixed; boundary="0000000000002205680641d8586b" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000002205680641d8586b Content-Type: text/plain; charset="UTF-8" There exists an optimization to index creation process, when we omit to write any WAL for index build. It is currently supported in B Tree, GIN, GiST, spg indexes. It works because we do not need to recover anything if index creation fails, because if was not used by any query. So, the index can be built on-disk, and then, just before making the index alive, we can simply log all pages to WAL. Hash index currently lacks this optimization. PFA implementation. During my testing, I checked the amount of WAL generated by index build before and after patch applied. My script was something like: select pg_current_wal_insert_lsn(); create index on t using hash (i); select pg_current_wal_insert_lsn(); select pg_lsn_wal_diff(lsn1, lsn2); Resulting numbers depend on index size, but I got 2.5-3.5 times less WAL with this patch and 8 times less WAL with this patch + wal_compression=on. Index creation time, however, did not change much... About implementation: These are many types of record that can be generated during index build. I know for sure these are possible (double-checked using pg_waldump): SPLIT_COMPLETE INSERT SPLIT_ALLOCATE_PAGE SPLIT_PAGE ADD_OVFL_PAGE SQUEEZE_PAGE INIT_META_PAGE INIT_BITMAP_PAGE Looks like SPLIT_COMPLETE and VACUUM_ONE_PAGE are never generated during index build. I'm not sure about MOVE_PAGE_CONTENTS. So, implementation is simply pass isbuild flag everywhere something is wal-logged. Looks like it is less invasive than alternatives. -- Best regards, Kirill Reshke --0000000000002205680641d8586b Content-Type: application/octet-stream; name="v2-0001-Use-log_newpage_range-in-HASH-index-build.patch" Content-Disposition: attachment; filename="v2-0001-Use-log_newpage_range-in-HASH-index-build.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mh3sffrh0 RnJvbSBmOWY0ZWNjNzRkOTFkZDVlYTYxM2VkNDYxMjgwYTQ5ODExODIwNDU4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiByZXNoa2UgPHJlc2hrZUBkb3VibGUuY2xvdWQ+CkRhdGU6IFRo dSwgMjMgT2N0IDIwMjUgMTc6NTM6MzAgKzAwMDAKU3ViamVjdDogW1BBVENIIHYyXSBVc2UgbG9n X25ld3BhZ2VfcmFuZ2UgaW4gSEFTSCBpbmRleCBidWlsZAoKLS0tCiBzcmMvYmFja2VuZC9hY2Nl c3MvaGFzaC9oYXNoLmMgICAgICAgfCAyNSArKysrKysrKysrKysrKy0tLS0tLS0tCiBzcmMvYmFj a2VuZC9hY2Nlc3MvaGFzaC9oYXNoaW5zZXJ0LmMgfCAgOCArKystLS0tCiBzcmMvYmFja2VuZC9h Y2Nlc3MvaGFzaC9oYXNob3ZmbC5jICAgfCAxOSArKysrKysrKystLS0tLS0tLQogc3JjL2JhY2tl bmQvYWNjZXNzL2hhc2gvaGFzaHBhZ2UuYyAgIHwgMzIgKysrKysrKysrKysrKysrKy0tLS0tLS0t LS0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHNvcnQuYyAgIHwgIDQgKysrLQogc3Jj L2luY2x1ZGUvYWNjZXNzL2hhc2guaCAgICAgICAgICAgIHwgMTQgKysrKysrLS0tLS0tCiA2IGZp bGVzIGNoYW5nZWQsIDU4IGluc2VydGlvbnMoKyksIDQ0IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2guYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9o YXNoL2hhc2guYwppbmRleCA1MzA2MWM4MTlmYi4uNGZmZjA2MzRlNmQgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2guYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFz aC9oYXNoLmMKQEAgLTE0MSw3ICsxNDEsNyBAQCBoYXNoYnVpbGQoUmVsYXRpb24gaGVhcCwgUmVs YXRpb24gaW5kZXgsIEluZGV4SW5mbyAqaW5kZXhJbmZvKQogCWVzdGltYXRlX3JlbF9zaXplKGhl YXAsIE5VTEwsICZyZWxwYWdlcywgJnJlbHR1cGxlcywgJmFsbHZpc2ZyYWMpOwogCiAJLyogSW5p dGlhbGl6ZSB0aGUgaGFzaCBpbmRleCBtZXRhZGF0YSBwYWdlIGFuZCBpbml0aWFsIGJ1Y2tldHMg Ki8KLQludW1fYnVja2V0cyA9IF9oYXNoX2luaXQoaW5kZXgsIHJlbHR1cGxlcywgTUFJTl9GT1JL TlVNKTsKKwludW1fYnVja2V0cyA9IF9oYXNoX2luaXQoaW5kZXgsIHJlbHR1cGxlcywgTUFJTl9G T1JLTlVNLCB0cnVlKTsKIAogCS8qCiAJICogSWYgd2UganVzdCBpbnNlcnQgdGhlIHR1cGxlcyBp bnRvIHRoZSBpbmRleCBpbiBzY2FuIG9yZGVyLCB0aGVuCkBAIC0xOTAsNiArMTkwLDExIEBAIGhh c2hidWlsZChSZWxhdGlvbiBoZWFwLCBSZWxhdGlvbiBpbmRleCwgSW5kZXhJbmZvICppbmRleElu Zm8pCiAJCV9oX3Nwb29sZGVzdHJveShidWlsZHN0YXRlLnNwb29sKTsKIAl9CiAKKwlpZiAoUmVs YXRpb25OZWVkc1dBTChpbmRleCkpCisJCWxvZ19uZXdwYWdlX3JhbmdlKGluZGV4LCBNQUlOX0ZP UktOVU0sCisJCQkJCQkJCSAgMCwgUmVsYXRpb25HZXROdW1iZXJPZkJsb2NrcyhpbmRleCksCisJ CQkJCQkJCSAgdHJ1ZSk7CisKIAkvKgogCSAqIFJldHVybiBzdGF0aXN0aWNzCiAJICovCkBAIC0y MDcsNyArMjEyLDcgQEAgaGFzaGJ1aWxkKFJlbGF0aW9uIGhlYXAsIFJlbGF0aW9uIGluZGV4LCBJ bmRleEluZm8gKmluZGV4SW5mbykKIHZvaWQKIGhhc2hidWlsZGVtcHR5KFJlbGF0aW9uIGluZGV4 KQogewotCV9oYXNoX2luaXQoaW5kZXgsIDAsIElOSVRfRk9SS05VTSk7CisJX2hhc2hfaW5pdChp bmRleCwgMCwgSU5JVF9GT1JLTlVNLCBmYWxzZSk7CiB9CiAKIC8qCkBAIC0yNDEsNyArMjQ2LDcg QEAgaGFzaGJ1aWxkQ2FsbGJhY2soUmVsYXRpb24gaW5kZXgsCiAJCWl0dXAgPSBpbmRleF9mb3Jt X3R1cGxlKFJlbGF0aW9uR2V0RGVzY3IoaW5kZXgpLAogCQkJCQkJCQlpbmRleF92YWx1ZXMsIGlu ZGV4X2lzbnVsbCk7CiAJCWl0dXAtPnRfdGlkID0gKnRpZDsKLQkJX2hhc2hfZG9pbnNlcnQoaW5k ZXgsIGl0dXAsIGJ1aWxkc3RhdGUtPmhlYXBSZWwsIGZhbHNlKTsKKwkJX2hhc2hfZG9pbnNlcnQo aW5kZXgsIGl0dXAsIGJ1aWxkc3RhdGUtPmhlYXBSZWwsIGZhbHNlLCB0cnVlKTsKIAkJcGZyZWUo aXR1cCk7CiAJfQogCkBAIC0yNzUsNyArMjgwLDcgQEAgaGFzaGluc2VydChSZWxhdGlvbiByZWws IERhdHVtICp2YWx1ZXMsIGJvb2wgKmlzbnVsbCwKIAlpdHVwID0gaW5kZXhfZm9ybV90dXBsZShS ZWxhdGlvbkdldERlc2NyKHJlbCksIGluZGV4X3ZhbHVlcywgaW5kZXhfaXNudWxsKTsKIAlpdHVw LT50X3RpZCA9ICpodF9jdGlkOwogCi0JX2hhc2hfZG9pbnNlcnQocmVsLCBpdHVwLCBoZWFwUmVs LCBmYWxzZSk7CisJX2hhc2hfZG9pbnNlcnQocmVsLCBpdHVwLCBoZWFwUmVsLCBmYWxzZSwgZmFs c2UpOwogCiAJcGZyZWUoaXR1cCk7CiAKQEAgLTU1Niw3ICs1NjEsNyBAQCBsb29wX3RvcDoKIAkJ CQkJCSAgY2FjaGVkbWV0YXAtPmhhc2htX2hpZ2htYXNrLAogCQkJCQkJICBjYWNoZWRtZXRhcC0+ aGFzaG1fbG93bWFzaywgJnR1cGxlc19yZW1vdmVkLAogCQkJCQkJICAmbnVtX2luZGV4X3R1cGxl cywgc3BsaXRfY2xlYW51cCwKLQkJCQkJCSAgY2FsbGJhY2ssIGNhbGxiYWNrX3N0YXRlKTsKKwkJ CQkJCSAgY2FsbGJhY2ssIGNhbGxiYWNrX3N0YXRlLCBmYWxzZSk7CiAKIAkJX2hhc2hfZHJvcGJ1 ZihyZWwsIGJ1Y2tldF9idWYpOwogCkBAIC02OTIsNyArNjk3LDggQEAgaGFzaGJ1Y2tldGNsZWFu dXAoUmVsYXRpb24gcmVsLCBCdWNrZXQgY3VyX2J1Y2tldCwgQnVmZmVyIGJ1Y2tldF9idWYsCiAJ CQkJICB1aW50MzIgbWF4YnVja2V0LCB1aW50MzIgaGlnaG1hc2ssIHVpbnQzMiBsb3dtYXNrLAog CQkJCSAgZG91YmxlICp0dXBsZXNfcmVtb3ZlZCwgZG91YmxlICpudW1faW5kZXhfdHVwbGVzLAog CQkJCSAgYm9vbCBzcGxpdF9jbGVhbnVwLAotCQkJCSAgSW5kZXhCdWxrRGVsZXRlQ2FsbGJhY2sg Y2FsbGJhY2ssIHZvaWQgKmNhbGxiYWNrX3N0YXRlKQorCQkJCSAgSW5kZXhCdWxrRGVsZXRlQ2Fs bGJhY2sgY2FsbGJhY2ssIHZvaWQgKmNhbGxiYWNrX3N0YXRlLAorCQkJCSAgYm9vbCBpc2J1aWxk KQogewogCUJsb2NrTnVtYmVyIGJsa25vOwogCUJ1ZmZlcgkJYnVmOwpAQCAtNzE5LDYgKzcyNSw3 IEBAIGhhc2hidWNrZXRjbGVhbnVwKFJlbGF0aW9uIHJlbCwgQnVja2V0IGN1cl9idWNrZXQsIEJ1 ZmZlciBidWNrZXRfYnVmLAogCQlib29sCQlyZXRhaW5fcGluID0gZmFsc2U7CiAJCWJvb2wJCWNs ZWFyX2RlYWRfbWFya2luZyA9IGZhbHNlOwogCisJCS8qIFhYWDogd2hhdCBpZiBpc2J1aWxkID0g dHJ1ZSA/ICovCiAJCXZhY3V1bV9kZWxheV9wb2ludChmYWxzZSk7CiAKIAkJcGFnZSA9IEJ1ZmZl ckdldFBhZ2UoYnVmKTsKQEAgLTgxNyw3ICs4MjQsNyBAQCBoYXNoYnVja2V0Y2xlYW51cChSZWxh dGlvbiByZWwsIEJ1Y2tldCBjdXJfYnVja2V0LCBCdWZmZXIgYnVja2V0X2J1ZiwKIAkJCU1hcmtC dWZmZXJEaXJ0eShidWYpOwogCiAJCQkvKiBYTE9HIHN0dWZmICovCi0JCQlpZiAoUmVsYXRpb25O ZWVkc1dBTChyZWwpKQorCQkJaWYgKFJlbGF0aW9uTmVlZHNXQUwocmVsKSAmJiAhaXNidWlsZCkK IAkJCXsKIAkJCQl4bF9oYXNoX2RlbGV0ZSB4bHJlYzsKIAkJCQlYTG9nUmVjUHRyCXJlY3B0cjsK QEAgLTkwMyw3ICs5MTAsNyBAQCBoYXNoYnVja2V0Y2xlYW51cChSZWxhdGlvbiByZWwsIEJ1Y2tl dCBjdXJfYnVja2V0LCBCdWZmZXIgYnVja2V0X2J1ZiwKIAkJTWFya0J1ZmZlckRpcnR5KGJ1Y2tl dF9idWYpOwogCiAJCS8qIFhMT0cgc3R1ZmYgKi8KLQkJaWYgKFJlbGF0aW9uTmVlZHNXQUwocmVs KSkKKwkJaWYgKFJlbGF0aW9uTmVlZHNXQUwocmVsKSAmJiAhaXNidWlsZCkKIAkJewogCQkJWExv Z1JlY1B0cglyZWNwdHI7CiAKQEAgLTkyNCw3ICs5MzEsNyBAQCBoYXNoYnVja2V0Y2xlYW51cChS ZWxhdGlvbiByZWwsIEJ1Y2tldCBjdXJfYnVja2V0LCBCdWZmZXIgYnVja2V0X2J1ZiwKIAkgKi8K IAlpZiAoYnVja2V0X2RpcnR5ICYmIElzQnVmZmVyQ2xlYW51cE9LKGJ1Y2tldF9idWYpKQogCQlf aGFzaF9zcXVlZXplYnVja2V0KHJlbCwgY3VyX2J1Y2tldCwgYnVja2V0X2Jsa25vLCBidWNrZXRf YnVmLAotCQkJCQkJCWJzdHJhdGVneSk7CisJCQkJCQkJYnN0cmF0ZWd5LCBpc2J1aWxkKTsKIAll bHNlCiAJCUxvY2tCdWZmZXIoYnVja2V0X2J1ZiwgQlVGRkVSX0xPQ0tfVU5MT0NLKTsKIH0KZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hpbnNlcnQuYyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9oYXNoL2hhc2hpbnNlcnQuYwppbmRleCAxMGRlMTU4MGRjMi4uMzY5MmNlYmIw YWMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hpbnNlcnQuYworKysg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoaW5zZXJ0LmMKQEAgLTM1LDcgKzM1LDcgQEAg c3RhdGljIHZvaWQgX2hhc2hfdmFjdXVtX29uZV9wYWdlKFJlbGF0aW9uIHJlbCwgUmVsYXRpb24g aHJlbCwKICAqIG9yZGVyLgogICovCiB2b2lkCi1faGFzaF9kb2luc2VydChSZWxhdGlvbiByZWws IEluZGV4VHVwbGUgaXR1cCwgUmVsYXRpb24gaGVhcFJlbCwgYm9vbCBzb3J0ZWQpCitfaGFzaF9k b2luc2VydChSZWxhdGlvbiByZWwsIEluZGV4VHVwbGUgaXR1cCwgUmVsYXRpb24gaGVhcFJlbCwg Ym9vbCBzb3J0ZWQsIGJvb2wgaXNidWlsZCkKIHsKIAlCdWZmZXIJCWJ1ZiA9IEludmFsaWRCdWZm ZXI7CiAJQnVmZmVyCQlidWNrZXRfYnVmOwpAQCAtMTc4LDcgKzE3OCw3IEBAIHJlc3RhcnRfaW5z ZXJ0OgogCQkJTG9ja0J1ZmZlcihidWYsIEJVRkZFUl9MT0NLX1VOTE9DSyk7CiAKIAkJCS8qIGNo YWluIHRvIGEgbmV3IG92ZXJmbG93IHBhZ2UgKi8KLQkJCWJ1ZiA9IF9oYXNoX2FkZG92ZmxwYWdl KHJlbCwgbWV0YWJ1ZiwgYnVmLCAoYnVmID09IGJ1Y2tldF9idWYpKTsKKwkJCWJ1ZiA9IF9oYXNo X2FkZG92ZmxwYWdlKHJlbCwgbWV0YWJ1ZiwgYnVmLCAoYnVmID09IGJ1Y2tldF9idWYpLCBpc2J1 aWxkKTsKIAkJCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGJ1Zik7CiAKIAkJCS8qIHNob3VsZCBmaXQg bm93LCBnaXZlbiB0ZXN0IGFib3ZlICovCkBAIC0yMTMsNyArMjEzLDcgQEAgcmVzdGFydF9pbnNl cnQ6CiAJTWFya0J1ZmZlckRpcnR5KG1ldGFidWYpOwogCiAJLyogWExPRyBzdHVmZiAqLwotCWlm IChSZWxhdGlvbk5lZWRzV0FMKHJlbCkpCisJaWYgKFJlbGF0aW9uTmVlZHNXQUwocmVsKSAmJiAh aXNidWlsZCkKIAl7CiAJCXhsX2hhc2hfaW5zZXJ0IHhscmVjOwogCQlYTG9nUmVjUHRyCXJlY3B0 cjsKQEAgLTI0OSw3ICsyNDksNyBAQCByZXN0YXJ0X2luc2VydDoKIAogCS8qIEF0dGVtcHQgdG8g c3BsaXQgaWYgYSBzcGxpdCBpcyBuZWVkZWQgKi8KIAlpZiAoZG9fZXhwYW5kKQotCQlfaGFzaF9l eHBhbmR0YWJsZShyZWwsIG1ldGFidWYpOworCQlfaGFzaF9leHBhbmR0YWJsZShyZWwsIG1ldGFi dWYsIGlzYnVpbGQpOwogCiAJLyogRmluYWxseSBkcm9wIG91ciBwaW4gb24gdGhlIG1ldGFwYWdl ICovCiAJX2hhc2hfZHJvcGJ1ZihyZWwsIG1ldGFidWYpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvYWNjZXNzL2hhc2gvaGFzaG92ZmwuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hv dmZsLmMKaW5kZXggNGY1ZmQzYjI4MzcuLjQwMTQ0N2FkYTNlIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9hY2Nlc3MvaGFzaC9oYXNob3ZmbC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNo L2hhc2hvdmZsLmMKQEAgLTEwOSw3ICsxMDksNyBAQCBfaGFzaF9vdmZsYmxrbm9fdG9fYml0bm8o SGFzaE1ldGFQYWdlIG1ldGFwLCBCbG9ja051bWJlciBvdmZsYmxrbm8pCiAgKiBwYWdlcyBtaWdo dCBoYXZlIGJlZW4gYWRkZWQgdG8gdGhlIGJ1Y2tldCBjaGFpbiBpbiBiZXR3ZWVuLgogICovCiBC dWZmZXIKLV9oYXNoX2FkZG92ZmxwYWdlKFJlbGF0aW9uIHJlbCwgQnVmZmVyIG1ldGFidWYsIEJ1 ZmZlciBidWYsIGJvb2wgcmV0YWluX3BpbikKK19oYXNoX2FkZG92ZmxwYWdlKFJlbGF0aW9uIHJl bCwgQnVmZmVyIG1ldGFidWYsIEJ1ZmZlciBidWYsIGJvb2wgcmV0YWluX3BpbiwgYm9vbCBpc2J1 aWxkKQogewogCUJ1ZmZlcgkJb3ZmbGJ1ZjsKIAlQYWdlCQlwYWdlOwpAQCAtMzc5LDcgKzM3OSw3 IEBAIGZvdW5kOgogCU1hcmtCdWZmZXJEaXJ0eShidWYpOwogCiAJLyogWExPRyBzdHVmZiAqLwot CWlmIChSZWxhdGlvbk5lZWRzV0FMKHJlbCkpCisJaWYgKFJlbGF0aW9uTmVlZHNXQUwocmVsKSAm JiAhaXNidWlsZCkKIAl7CiAJCVhMb2dSZWNQdHIJcmVjcHRyOwogCQl4bF9oYXNoX2FkZF9vdmZs X3BhZ2UgeGxyZWM7CkBAIC00OTAsNyArNDkwLDcgQEAgQmxvY2tOdW1iZXIKIF9oYXNoX2ZyZWVv dmZscGFnZShSZWxhdGlvbiByZWwsIEJ1ZmZlciBidWNrZXRidWYsIEJ1ZmZlciBvdmZsYnVmLAog CQkJCSAgIEJ1ZmZlciB3YnVmLCBJbmRleFR1cGxlICppdHVwcywgT2Zmc2V0TnVtYmVyICppdHVw X29mZnNldHMsCiAJCQkJICAgU2l6ZSAqdHVwc19zaXplLCB1aW50MTYgbml0dXBzLAotCQkJCSAg IEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IGJzdHJhdGVneSkKKwkJCQkgICBCdWZmZXJBY2Nlc3NTdHJh dGVneSBic3RyYXRlZ3ksIGJvb2wgaXNidWlsZCkKIHsKIAlIYXNoTWV0YVBhZ2UgbWV0YXA7CiAJ QnVmZmVyCQltZXRhYnVmOwpAQCAtNTc1LDcgKzU3NSw3IEBAIF9oYXNoX2ZyZWVvdmZscGFnZShS ZWxhdGlvbiByZWwsIEJ1ZmZlciBidWNrZXRidWYsIEJ1ZmZlciBvdmZsYnVmLAogCUxvY2tCdWZm ZXIobWV0YWJ1ZiwgQlVGRkVSX0xPQ0tfRVhDTFVTSVZFKTsKIAogCS8qIFRoaXMgb3BlcmF0aW9u IG5lZWRzIHRvIGxvZyBtdWx0aXBsZSB0dXBsZXMsIHByZXBhcmUgV0FMIGZvciB0aGF0ICovCi0J aWYgKFJlbGF0aW9uTmVlZHNXQUwocmVsKSkKKwlpZiAoUmVsYXRpb25OZWVkc1dBTChyZWwpICYm ICFpc2J1aWxkKQogCQlYTG9nRW5zdXJlUmVjb3JkU3BhY2UoSEFTSF9YTE9HX0ZSRUVfT1ZGTF9C VUZTLCA0ICsgbml0dXBzKTsKIAogCVNUQVJUX0NSSVRfU0VDVElPTigpOwpAQCAtNjQyLDcgKzY0 Miw3IEBAIF9oYXNoX2ZyZWVvdmZscGFnZShSZWxhdGlvbiByZWwsIEJ1ZmZlciBidWNrZXRidWYs IEJ1ZmZlciBvdmZsYnVmLAogCX0KIAogCS8qIFhMT0cgc3R1ZmYgKi8KLQlpZiAoUmVsYXRpb25O ZWVkc1dBTChyZWwpKQorCWlmIChSZWxhdGlvbk5lZWRzV0FMKHJlbCkgJiYgIWlzYnVpbGQpCiAJ ewogCQl4bF9oYXNoX3NxdWVlemVfcGFnZSB4bHJlYzsKIAkJWExvZ1JlY1B0cglyZWNwdHI7CkBA IC04NDMsNyArODQzLDggQEAgX2hhc2hfc3F1ZWV6ZWJ1Y2tldChSZWxhdGlvbiByZWwsCiAJCQkJ CUJ1Y2tldCBidWNrZXQsCiAJCQkJCUJsb2NrTnVtYmVyIGJ1Y2tldF9ibGtubywKIAkJCQkJQnVm ZmVyIGJ1Y2tldF9idWYsCi0JCQkJCUJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IGJzdHJhdGVneSkKKwkJ CQkJQnVmZmVyQWNjZXNzU3RyYXRlZ3kgYnN0cmF0ZWd5LAorCQkJCQlib29sIGlzYnVpbGQpCiB7 CiAJQmxvY2tOdW1iZXIgd2Jsa25vOwogCUJsb2NrTnVtYmVyIHJibGtubzsKQEAgLTk2NSw3ICs5 NjYsNyBAQCByZWFkcGFnZToKIAkJCQkJICogVGhpcyBvcGVyYXRpb24gbmVlZHMgdG8gbG9nIG11 bHRpcGxlIHR1cGxlcywgcHJlcGFyZQogCQkJCQkgKiBXQUwgZm9yIHRoYXQuCiAJCQkJCSAqLwot CQkJCQlpZiAoUmVsYXRpb25OZWVkc1dBTChyZWwpKQorCQkJCQlpZiAoUmVsYXRpb25OZWVkc1dB TChyZWwpICYmICFpc2J1aWxkKQogCQkJCQkJWExvZ0Vuc3VyZVJlY29yZFNwYWNlKDAsIDMgKyBu aXR1cHMpOwogCiAJCQkJCVNUQVJUX0NSSVRfU0VDVElPTigpOwpAQCAtOTg0LDcgKzk4NSw3IEBA IHJlYWRwYWdlOgogCQkJCQlNYXJrQnVmZmVyRGlydHkocmJ1Zik7CiAKIAkJCQkJLyogWExPRyBz dHVmZiAqLwotCQkJCQlpZiAoUmVsYXRpb25OZWVkc1dBTChyZWwpKQorCQkJCQlpZiAoUmVsYXRp b25OZWVkc1dBTChyZWwpICYmICFpc2J1aWxkKQogCQkJCQl7CiAJCQkJCQlYTG9nUmVjUHRyCXJl Y3B0cjsKIAkJCQkJCXhsX2hhc2hfbW92ZV9wYWdlX2NvbnRlbnRzIHhscmVjOwpAQCAtMTA5NCw3 ICsxMDk1LDcgQEAgcmVhZHBhZ2U6CiAKIAkJLyogZnJlZSB0aGlzIG92ZXJmbG93IHBhZ2UgKHJl bGVhc2VzIHJidWYpICovCiAJCV9oYXNoX2ZyZWVvdmZscGFnZShyZWwsIGJ1Y2tldF9idWYsIHJi dWYsIHdidWYsIGl0dXBzLCBpdHVwX29mZnNldHMsCi0JCQkJCQkgICB0dXBzX3NpemUsIG5pdHVw cywgYnN0cmF0ZWd5KTsKKwkJCQkJCSAgIHR1cHNfc2l6ZSwgbml0dXBzLCBic3RyYXRlZ3ksIGlz YnVpbGQpOwogCiAJCS8qIGJlIHRpZHkgKi8KIAkJZm9yIChpID0gMDsgaSA8IG5pdHVwczsgaSsr KQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHBhZ2UuYyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hwYWdlLmMKaW5kZXggYjhlNWJkMDA1ZTUuLmY1ZTMxMGFi MmIzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNocGFnZS5jCisrKyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hwYWdlLmMKQEAgLTQ1LDcgKzQ1LDcgQEAgc3Rh dGljIHZvaWQgX2hhc2hfc3BsaXRidWNrZXQoUmVsYXRpb24gcmVsLCBCdWZmZXIgbWV0YWJ1ZiwK IAkJCQkJCQkgIEJ1ZmZlciBuYnVmLAogCQkJCQkJCSAgSFRBQiAqaHRhYiwKIAkJCQkJCQkgIHVp bnQzMiBtYXhidWNrZXQsCi0JCQkJCQkJICB1aW50MzIgaGlnaG1hc2ssIHVpbnQzMiBsb3dtYXNr KTsKKwkJCQkJCQkgIHVpbnQzMiBoaWdobWFzaywgdWludDMyIGxvd21hc2ssIGJvb2wgaXNidWls ZCk7CiBzdGF0aWMgdm9pZCBsb2dfc3BsaXRfcGFnZShSZWxhdGlvbiByZWwsIEJ1ZmZlciBidWYp OwogCiAKQEAgLTMyNCw3ICszMjQsNyBAQCBfaGFzaF9kcm9wc2NhbmJ1ZihSZWxhdGlvbiByZWws IEhhc2hTY2FuT3BhcXVlIHNvKQogICogbXVsdGlwbGUgYnVmZmVyIGxvY2tzIGlzIGlnbm9yZWQu CiAgKi8KIHVpbnQzMgotX2hhc2hfaW5pdChSZWxhdGlvbiByZWwsIGRvdWJsZSBudW1fdHVwbGVz LCBGb3JrTnVtYmVyIGZvcmtOdW0pCitfaGFzaF9pbml0KFJlbGF0aW9uIHJlbCwgZG91YmxlIG51 bV90dXBsZXMsIEZvcmtOdW1iZXIgZm9ya051bSwgYm9vbCBza2lwX3dhbCkKIHsKIAlCdWZmZXIJ CW1ldGFidWY7CiAJQnVmZmVyCQlidWY7CkBAIC0zNDksNyArMzQ5LDcgQEAgX2hhc2hfaW5pdChS ZWxhdGlvbiByZWwsIGRvdWJsZSBudW1fdHVwbGVzLCBGb3JrTnVtYmVyIGZvcmtOdW0pCiAJICog aW5pdCBmb3JrLiAgSW5pdCBmb3JrcyBmb3IgdW5sb2dnZWQgcmVsYXRpb25zIGFsd2F5cyBuZWVk IHRvIGJlIFdBTAogCSAqIGxvZ2dlZC4KIAkgKi8KLQl1c2Vfd2FsID0gUmVsYXRpb25OZWVkc1dB TChyZWwpIHx8IGZvcmtOdW0gPT0gSU5JVF9GT1JLTlVNOworCXVzZV93YWwgPSAhc2tpcF93YWwg JiYgKFJlbGF0aW9uTmVlZHNXQUwocmVsKSB8fCBmb3JrTnVtID09IElOSVRfRk9SS05VTSk7CiAK IAkvKgogCSAqIERldGVybWluZSB0aGUgdGFyZ2V0IGZpbGwgZmFjdG9yIChpbiB0dXBsZXMgcGVy IGJ1Y2tldCkgZm9yIHRoaXMgaW5kZXguCkBAIC02MTEsNyArNjExLDcgQEAgX2hhc2hfcGFnZWlu aXQoUGFnZSBwYWdlLCBTaXplIHNpemUpCiAgKiBUaGUgYnVmZmVyIGlzIHJldHVybmVkIGluIHRo ZSBzYW1lIHN0YXRlLgogICovCiB2b2lkCi1faGFzaF9leHBhbmR0YWJsZShSZWxhdGlvbiByZWws IEJ1ZmZlciBtZXRhYnVmKQorX2hhc2hfZXhwYW5kdGFibGUoUmVsYXRpb24gcmVsLCBCdWZmZXIg bWV0YWJ1ZiwgYm9vbCBpc2J1aWxkKQogewogCUhhc2hNZXRhUGFnZSBtZXRhcDsKIAlCdWNrZXQJ CW9sZF9idWNrZXQ7CkBAIC03NTksNyArNzU5LDcgQEAgcmVzdGFydF9leHBhbmQ6CiAKIAkJaGFz aGJ1Y2tldGNsZWFudXAocmVsLCBvbGRfYnVja2V0LCBidWZfb2Jsa25vLCBzdGFydF9vYmxrbm8s IE5VTEwsCiAJCQkJCQkgIG1heGJ1Y2tldCwgaGlnaG1hc2ssIGxvd21hc2ssIE5VTEwsIE5VTEws IHRydWUsCi0JCQkJCQkgIE5VTEwsIE5VTEwpOworCQkJCQkJICBOVUxMLCBOVUxMLCBpc2J1aWxk KTsKIAogCQlfaGFzaF9kcm9wYnVmKHJlbCwgYnVmX29ibGtubyk7CiAKQEAgLTg5Nyw3ICs4OTcs NyBAQCByZXN0YXJ0X2V4cGFuZDoKIAlNYXJrQnVmZmVyRGlydHkoYnVmX25ibGtubyk7CiAKIAkv KiBYTE9HIHN0dWZmICovCi0JaWYgKFJlbGF0aW9uTmVlZHNXQUwocmVsKSkKKwlpZiAoUmVsYXRp b25OZWVkc1dBTChyZWwpICYmICFpc2J1aWxkKQogCXsKIAkJeGxfaGFzaF9zcGxpdF9hbGxvY2F0 ZV9wYWdlIHhscmVjOwogCQlYTG9nUmVjUHRyCXJlY3B0cjsKQEAgLTk0OCw3ICs5NDgsNyBAQCBy ZXN0YXJ0X2V4cGFuZDoKIAlfaGFzaF9zcGxpdGJ1Y2tldChyZWwsIG1ldGFidWYsCiAJCQkJCSAg b2xkX2J1Y2tldCwgbmV3X2J1Y2tldCwKIAkJCQkJICBidWZfb2Jsa25vLCBidWZfbmJsa25vLCBO VUxMLAotCQkJCQkgIG1heGJ1Y2tldCwgaGlnaG1hc2ssIGxvd21hc2spOworCQkJCQkgIG1heGJ1 Y2tldCwgaGlnaG1hc2ssIGxvd21hc2ssIGlzYnVpbGQpOwogCiAJLyogYWxsIGRvbmUsIG5vdyBy ZWxlYXNlIHRoZSBwaW5zIG9uIHByaW1hcnkgYnVja2V0cy4gKi8KIAlfaGFzaF9kcm9wYnVmKHJl bCwgYnVmX29ibGtubyk7CkBAIC0xMDc5LDcgKzEwNzksOCBAQCBfaGFzaF9zcGxpdGJ1Y2tldChS ZWxhdGlvbiByZWwsCiAJCQkJICBIVEFCICpodGFiLAogCQkJCSAgdWludDMyIG1heGJ1Y2tldCwK IAkJCQkgIHVpbnQzMiBoaWdobWFzaywKLQkJCQkgIHVpbnQzMiBsb3dtYXNrKQorCQkJCSAgdWlu dDMyIGxvd21hc2ssCisJCQkJICBib29sIGlzYnVpbGQpCiB7CiAJQnVmZmVyCQlidWNrZXRfb2J1 ZjsKIAlCdWZmZXIJCWJ1Y2tldF9uYnVmOwpAQCAtMTE4Niw3ICsxMTg3LDggQEAgX2hhc2hfc3Bs aXRidWNrZXQoUmVsYXRpb24gcmVsLAogCQkJCQlfaGFzaF9wZ2FkZG11bHRpdHVwKHJlbCwgbmJ1 ZiwgaXR1cHMsIGl0dXBfb2Zmc2V0cywgbml0dXBzKTsKIAkJCQkJTWFya0J1ZmZlckRpcnR5KG5i dWYpOwogCQkJCQkvKiBsb2cgdGhlIHNwbGl0IG9wZXJhdGlvbiBiZWZvcmUgcmVsZWFzaW5nIHRo ZSBsb2NrICovCi0JCQkJCWxvZ19zcGxpdF9wYWdlKHJlbCwgbmJ1Zik7CisJCQkJCWlmIChSZWxh dGlvbk5lZWRzV0FMKHJlbCkgJiYgIWlzYnVpbGQpCisJCQkJCQlsb2dfc3BsaXRfcGFnZShyZWws IG5idWYpOwogCiAJCQkJCUVORF9DUklUX1NFQ1RJT04oKTsKIApAQCAtMTIwMCw3ICsxMjAyLDcg QEAgX2hhc2hfc3BsaXRidWNrZXQoUmVsYXRpb24gcmVsLAogCQkJCQlhbGxfdHVwc19zaXplID0g MDsKIAogCQkJCQkvKiBjaGFpbiB0byBhIG5ldyBvdmVyZmxvdyBwYWdlICovCi0JCQkJCW5idWYg PSBfaGFzaF9hZGRvdmZscGFnZShyZWwsIG1ldGFidWYsIG5idWYsIChuYnVmID09IGJ1Y2tldF9u YnVmKSk7CisJCQkJCW5idWYgPSBfaGFzaF9hZGRvdmZscGFnZShyZWwsIG1ldGFidWYsIG5idWYs IChuYnVmID09IGJ1Y2tldF9uYnVmKSwgaXNidWlsZCk7CiAJCQkJCW5wYWdlID0gQnVmZmVyR2V0 UGFnZShuYnVmKTsKIAkJCQkJbm9wYXF1ZSA9IEhhc2hQYWdlR2V0T3BhcXVlKG5wYWdlKTsKIAkJ CQl9CkBAIC0xMjM3LDcgKzEyMzksOSBAQCBfaGFzaF9zcGxpdGJ1Y2tldChSZWxhdGlvbiByZWws CiAJCQlfaGFzaF9wZ2FkZG11bHRpdHVwKHJlbCwgbmJ1ZiwgaXR1cHMsIGl0dXBfb2Zmc2V0cywg bml0dXBzKTsKIAkJCU1hcmtCdWZmZXJEaXJ0eShuYnVmKTsKIAkJCS8qIGxvZyB0aGUgc3BsaXQg b3BlcmF0aW9uIGJlZm9yZSByZWxlYXNpbmcgdGhlIGxvY2sgKi8KLQkJCWxvZ19zcGxpdF9wYWdl KHJlbCwgbmJ1Zik7CisKKwkJCWlmIChSZWxhdGlvbk5lZWRzV0FMKHJlbCkgJiYgIWlzYnVpbGQp CisJCQkJbG9nX3NwbGl0X3BhZ2UocmVsLCBuYnVmKTsKIAogCQkJRU5EX0NSSVRfU0VDVElPTigp OwogCkBAIC0xMjk0LDcgKzEyOTgsNyBAQCBfaGFzaF9zcGxpdGJ1Y2tldChSZWxhdGlvbiByZWws CiAJTWFya0J1ZmZlckRpcnR5KGJ1Y2tldF9vYnVmKTsKIAlNYXJrQnVmZmVyRGlydHkoYnVja2V0 X25idWYpOwogCi0JaWYgKFJlbGF0aW9uTmVlZHNXQUwocmVsKSkKKwlpZiAoUmVsYXRpb25OZWVk c1dBTChyZWwpICYmICFpc2J1aWxkKQogCXsKIAkJWExvZ1JlY1B0cglyZWNwdHI7CiAJCXhsX2hh c2hfc3BsaXRfY29tcGxldGUgeGxyZWM7CkBAIC0xMzMxLDcgKzEzMzUsNyBAQCBfaGFzaF9zcGxp dGJ1Y2tldChSZWxhdGlvbiByZWwsCiAJCWhhc2hidWNrZXRjbGVhbnVwKHJlbCwgb2J1Y2tldCwg YnVja2V0X29idWYsCiAJCQkJCQkgIEJ1ZmZlckdldEJsb2NrTnVtYmVyKGJ1Y2tldF9vYnVmKSwg TlVMTCwKIAkJCQkJCSAgbWF4YnVja2V0LCBoaWdobWFzaywgbG93bWFzaywgTlVMTCwgTlVMTCwg dHJ1ZSwKLQkJCQkJCSAgTlVMTCwgTlVMTCk7CisJCQkJCQkgIE5VTEwsIE5VTEwsIGlzYnVpbGQp OwogCX0KIAllbHNlCiAJewpAQCAtMTQ1NSw3ICsxNDU5LDcgQEAgX2hhc2hfZmluaXNoX3NwbGl0 KFJlbGF0aW9uIHJlbCwgQnVmZmVyIG1ldGFidWYsIEJ1ZmZlciBvYnVmLCBCdWNrZXQgb2J1Y2tl dCwKIAogCV9oYXNoX3NwbGl0YnVja2V0KHJlbCwgbWV0YWJ1Ziwgb2J1Y2tldCwKIAkJCQkJICBu YnVja2V0LCBvYnVmLCBidWNrZXRfbmJ1ZiwgdGlkaHRhYiwKLQkJCQkJICBtYXhidWNrZXQsIGhp Z2htYXNrLCBsb3dtYXNrKTsKKwkJCQkJICBtYXhidWNrZXQsIGhpZ2htYXNrLCBsb3dtYXNrLCBm YWxzZSk7CiAKIAlfaGFzaF9kcm9wYnVmKHJlbCwgYnVja2V0X25idWYpOwogCWhhc2hfZGVzdHJv eSh0aWRodGFiKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hzb3J0 LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoc29ydC5jCmluZGV4IDZlOGMwZTY4YTky Li44NzAzOTY4NDFkZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHNv cnQuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoc29ydC5jCkBAIC02MSw2ICs2 MSw4IEBAIF9oX3Nwb29saW5pdChSZWxhdGlvbiBoZWFwLCBSZWxhdGlvbiBpbmRleCwgdWludDMy IG51bV9idWNrZXRzKQogewogCUhTcG9vbAkgICAqaHNwb29sID0gKEhTcG9vbCAqKSBwYWxsb2Mw KHNpemVvZihIU3Bvb2wpKTsKIAorCWVsb2coV0FSTklORywgInNwb29sIGluaXQiKTsKKwogCWhz cG9vbC0+aW5kZXggPSBpbmRleDsKIAogCS8qCkBAIC0xNDYsNyArMTQ4LDcgQEAgX2hfaW5kZXhi dWlsZChIU3Bvb2wgKmhzcG9vbCwgUmVsYXRpb24gaGVhcFJlbCkKICNlbmRpZgogCiAJCS8qIHRo ZSB0dXBsZXMgYXJlIHNvcnRlZCBieSBoYXNoa2V5LCBzbyBwYXNzICdzb3J0ZWQnIGFzIHRydWUg Ki8KLQkJX2hhc2hfZG9pbnNlcnQoaHNwb29sLT5pbmRleCwgaXR1cCwgaGVhcFJlbCwgdHJ1ZSk7 CisJCV9oYXNoX2RvaW5zZXJ0KGhzcG9vbC0+aW5kZXgsIGl0dXAsIGhlYXBSZWwsIHRydWUsIHRy dWUpOwogCiAJCS8qIGFsbG93IGluc2VydGlvbiBwaGFzZSB0byBiZSBpbnRlcnJ1cHRlZCwgYW5k IHRyYWNrIHByb2dyZXNzICovCiAJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGFzaC5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2hhc2guaApp bmRleCAwNzNhZDI5YjE5Yi4uZjRhZmJjNzhmMzggMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2Fj Y2Vzcy9oYXNoLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2hhc2guaApAQCAtMzk0LDcgKzM5 NCw3IEBAIGV4dGVybiBTdHJhdGVneU51bWJlciBoYXNodHJhbnNsYXRlY21wdHlwZShDb21wYXJl VHlwZSBjbXB0eXBlLCBPaWQgb3BmYW1pbHkpOwogCiAvKiBoYXNoaW5zZXJ0LmMgKi8KIGV4dGVy biB2b2lkIF9oYXNoX2RvaW5zZXJ0KFJlbGF0aW9uIHJlbCwgSW5kZXhUdXBsZSBpdHVwLCBSZWxh dGlvbiBoZWFwUmVsLAotCQkJCQkJICAgYm9vbCBzb3J0ZWQpOworCQkJCQkJICAgYm9vbCBzb3J0 ZWQsIGJvb2wgaXNidWlsZCk7CiBleHRlcm4gT2Zmc2V0TnVtYmVyIF9oYXNoX3BnYWRkdHVwKFJl bGF0aW9uIHJlbCwgQnVmZmVyIGJ1ZiwKIAkJCQkJCQkJICAgU2l6ZSBpdGVtc2l6ZSwgSW5kZXhU dXBsZSBpdHVwLAogCQkJCQkJCQkgICBib29sIGFwcGVuZHR1cCk7CkBAIC00MDIsMTUgKzQwMiwx NSBAQCBleHRlcm4gdm9pZCBfaGFzaF9wZ2FkZG11bHRpdHVwKFJlbGF0aW9uIHJlbCwgQnVmZmVy IGJ1ZiwgSW5kZXhUdXBsZSAqaXR1cHMsCiAJCQkJCQkJCU9mZnNldE51bWJlciAqaXR1cF9vZmZz ZXRzLCB1aW50MTYgbml0dXBzKTsKIAogLyogaGFzaG92ZmwuYyAqLwotZXh0ZXJuIEJ1ZmZlciBf aGFzaF9hZGRvdmZscGFnZShSZWxhdGlvbiByZWwsIEJ1ZmZlciBtZXRhYnVmLCBCdWZmZXIgYnVm LCBib29sIHJldGFpbl9waW4pOworZXh0ZXJuIEJ1ZmZlciBfaGFzaF9hZGRvdmZscGFnZShSZWxh dGlvbiByZWwsIEJ1ZmZlciBtZXRhYnVmLCBCdWZmZXIgYnVmLCBib29sIHJldGFpbl9waW4sIGJv b2wgaXNidWlsZCk7CiBleHRlcm4gQmxvY2tOdW1iZXIgX2hhc2hfZnJlZW92ZmxwYWdlKFJlbGF0 aW9uIHJlbCwgQnVmZmVyIGJ1Y2tldGJ1ZiwgQnVmZmVyIG92ZmxidWYsCiAJCQkJCQkJCQkgIEJ1 ZmZlciB3YnVmLCBJbmRleFR1cGxlICppdHVwcywgT2Zmc2V0TnVtYmVyICppdHVwX29mZnNldHMs Ci0JCQkJCQkJCQkgIFNpemUgKnR1cHNfc2l6ZSwgdWludDE2IG5pdHVwcywgQnVmZmVyQWNjZXNz U3RyYXRlZ3kgYnN0cmF0ZWd5KTsKKwkJCQkJCQkJCSAgU2l6ZSAqdHVwc19zaXplLCB1aW50MTYg bml0dXBzLCBCdWZmZXJBY2Nlc3NTdHJhdGVneSBic3RyYXRlZ3ksIGJvb2wgaXNidWlsZCk7CiBl eHRlcm4gdm9pZCBfaGFzaF9pbml0Yml0bWFwYnVmZmVyKEJ1ZmZlciBidWYsIHVpbnQxNiBibXNp emUsIGJvb2wgaW5pdHBhZ2UpOwogZXh0ZXJuIHZvaWQgX2hhc2hfc3F1ZWV6ZWJ1Y2tldChSZWxh dGlvbiByZWwsCiAJCQkJCQkJCUJ1Y2tldCBidWNrZXQsIEJsb2NrTnVtYmVyIGJ1Y2tldF9ibGtu bywKIAkJCQkJCQkJQnVmZmVyIGJ1Y2tldF9idWYsCi0JCQkJCQkJCUJ1ZmZlckFjY2Vzc1N0cmF0 ZWd5IGJzdHJhdGVneSk7CisJCQkJCQkJCUJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IGJzdHJhdGVneSwg Ym9vbCBpc2J1aWxkKTsKIGV4dGVybiB1aW50MzIgX2hhc2hfb3ZmbGJsa25vX3RvX2JpdG5vKEhh c2hNZXRhUGFnZSBtZXRhcCwgQmxvY2tOdW1iZXIgb3ZmbGJsa25vKTsKIAogLyogaGFzaHBhZ2Uu YyAqLwpAQCAtNDM1LDExICs0MzUsMTEgQEAgZXh0ZXJuIHZvaWQgX2hhc2hfcmVsYnVmKFJlbGF0 aW9uIHJlbCwgQnVmZmVyIGJ1Zik7CiBleHRlcm4gdm9pZCBfaGFzaF9kcm9wYnVmKFJlbGF0aW9u IHJlbCwgQnVmZmVyIGJ1Zik7CiBleHRlcm4gdm9pZCBfaGFzaF9kcm9wc2NhbmJ1ZihSZWxhdGlv biByZWwsIEhhc2hTY2FuT3BhcXVlIHNvKTsKIGV4dGVybiB1aW50MzIgX2hhc2hfaW5pdChSZWxh dGlvbiByZWwsIGRvdWJsZSBudW1fdHVwbGVzLAotCQkJCQkJIEZvcmtOdW1iZXIgZm9ya051bSk7 CisJCQkJCQkgRm9ya051bWJlciBmb3JrTnVtLCBib29sIHNraXBfd2FsKTsKIGV4dGVybiB2b2lk IF9oYXNoX2luaXRfbWV0YWJ1ZmZlcihCdWZmZXIgYnVmLCBkb3VibGUgbnVtX3R1cGxlcywKIAkJ CQkJCQkJICBSZWdQcm9jZWR1cmUgcHJvY2lkLCB1aW50MTYgZmZhY3RvciwgYm9vbCBpbml0cGFn ZSk7CiBleHRlcm4gdm9pZCBfaGFzaF9wYWdlaW5pdChQYWdlIHBhZ2UsIFNpemUgc2l6ZSk7Ci1l eHRlcm4gdm9pZCBfaGFzaF9leHBhbmR0YWJsZShSZWxhdGlvbiByZWwsIEJ1ZmZlciBtZXRhYnVm KTsKK2V4dGVybiB2b2lkIF9oYXNoX2V4cGFuZHRhYmxlKFJlbGF0aW9uIHJlbCwgQnVmZmVyIG1l dGFidWYsIGJvb2wgaXNidWlsZCk7CiBleHRlcm4gdm9pZCBfaGFzaF9maW5pc2hfc3BsaXQoUmVs YXRpb24gcmVsLCBCdWZmZXIgbWV0YWJ1ZiwgQnVmZmVyIG9idWYsCiAJCQkJCQkJICAgQnVja2V0 IG9idWNrZXQsIHVpbnQzMiBtYXhidWNrZXQsIHVpbnQzMiBoaWdobWFzaywKIAkJCQkJCQkgICB1 aW50MzIgbG93bWFzayk7CkBAIC00ODUsNiArNDg1LDYgQEAgZXh0ZXJuIHZvaWQgaGFzaGJ1Y2tl dGNsZWFudXAoUmVsYXRpb24gcmVsLCBCdWNrZXQgY3VyX2J1Y2tldCwKIAkJCQkJCQkgIHVpbnQz MiBtYXhidWNrZXQsIHVpbnQzMiBoaWdobWFzaywgdWludDMyIGxvd21hc2ssCiAJCQkJCQkJICBk b3VibGUgKnR1cGxlc19yZW1vdmVkLCBkb3VibGUgKm51bV9pbmRleF90dXBsZXMsCiAJCQkJCQkJ ICBib29sIHNwbGl0X2NsZWFudXAsCi0JCQkJCQkJICBJbmRleEJ1bGtEZWxldGVDYWxsYmFjayBj YWxsYmFjaywgdm9pZCAqY2FsbGJhY2tfc3RhdGUpOworCQkJCQkJCSAgSW5kZXhCdWxrRGVsZXRl Q2FsbGJhY2sgY2FsbGJhY2ssIHZvaWQgKmNhbGxiYWNrX3N0YXRlLCBib29sIGlzYnVpbGQpOwog CiAjZW5kaWYJCQkJCQkJLyogSEFTSF9IICovCi0tIAoyLjQzLjAKCg== --0000000000002205680641d8586b--