Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1iiYY8-0000ho-E4 for pgsql-hackers@arkaria.postgresql.org; Sat, 21 Dec 2019 06:47:40 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1iiYY7-0004Mg-81 for pgsql-hackers@arkaria.postgresql.org; Sat, 21 Dec 2019 06:47:39 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1iiYY6-0004MY-1B for pgsql-hackers@lists.postgresql.org; Sat, 21 Dec 2019 06:47:39 +0000 Received: from wout1-smtp.messagingengine.com ([64.147.123.24]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1iiYY2-0006SS-4d for pgsql-hackers@postgresql.org; Sat, 21 Dec 2019 06:47:35 +0000 Received: from compute7.internal (compute7.nyi.internal [10.202.2.47]) by mailout.west.internal (Postfix) with ESMTP id E7EB150B for ; Sat, 21 Dec 2019 01:47:31 -0500 (EST) Received: from mailfrontend1 ([10.202.2.162]) by compute7.internal (MEProxy); Sat, 21 Dec 2019 01:47:32 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=content-type:date:from:message-id :mime-version:subject:to:x-me-proxy:x-me-proxy:x-me-sender :x-me-sender:x-sasl-enc; s=fm1; bh=cEBN1FKGojjoDuJoqBZ2oDm4D2Zaw QNulyYyh/oVw+c=; b=ZhqyvEJeYST//7gxUPuMYXJQ1cs+I+ogT/iJSomCxfocY jBGDl/52Z6k+1g5hal+7HnwNCBaiYtyIMFeJ/8PvJf1zVjP74Y7Ip/QyROg+H9h3 oWOoSbvtaEPlAPIKOoyQVGc4y1qcSXVSLOi6lhcbQLITHPW/vHpoV4AR7MOsKA6r T84Vm9VJrdell/KNUnqGT5A53nVGw1azXxiuH5w1Pp0ZZeLG04WKqwiY6DzIkCML rsn5UUSpKudPM/Li7fm/3TxF5mrAuw4wjUT0nqKBH/FDEnzrVVaY+fgwi4b9mbSM 3F+Gh84eThyzCXzlPu+nlKTq9M3jxzzN+B0bmiQsA== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedufedrvddugedgleegucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucenucfjughrpefvhffuohfkffgfgggtsehmtderre dtfeejnecuhfhrohhmpefrvghtvghrucfgihhsvghnthhrrghuthcuoehpvghtvghrrdgv ihhsvghnthhrrghuthesvdhnughquhgrughrrghnthdrtghomheqnecuffhomhgrihhnpe dvnhguqhhurggurhgrnhhtrdgtohhmpdhpohhsthhgrhgvshhqlhdrohhrghenucfkphep leefrddvgeefrddukeejrddugeegnecurfgrrhgrmhepmhgrihhlfhhrohhmpehpvghtvg hrrdgvihhsvghnthhrrghuthesvdhnughquhgrughrrghnthdrtghomhenucevlhhushht vghrufhiiigvpedt X-ME-Proxy: Received: from april.pezone.net (p5df3bb90.dip0.t-ipconnect.de [93.243.187.144]) by mail.messagingengine.com (Postfix) with ESMTPA id BF7BC80060 for ; Sat, 21 Dec 2019 01:47:30 -0500 (EST) To: pgsql-hackers From: Peter Eisentraut Subject: Optimize update of tables with generated columns Organization: 2ndQuadrant Message-ID: Date: Sat, 21 Dec 2019 07:47:29 +0100 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:52.0) Gecko/20100101 Thunderbird/52.9.1 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="------------C9C92A7277E140D6B4F51FDC" Content-Language: en-US List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk This is a multi-part message in MIME format. --------------C9C92A7277E140D6B4F51FDC Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit When updating a table row with generated columns, we only need to recompute those generated columns whose base columns have changed in this update and keep the rest unchanged. This can result in a significant performance benefit (easy to reproduce for example with a tsvector column). The required information was already kept in RangeTblEntry.extraUpdatedCols; we just have to make use of it. A small problem is that right now ExecSimpleRelationUpdate() does not populate extraUpdatedCols. That needs fixing first. This is also related to the issue discussed in "logical replication does not fire per-column triggers"[0]. I'll leave my patch here while that issue is being resolved. [0]: https://www.postgresql.org/message-id/flat/21673e2d-597c-6afe-637e-e8b10425b240%402ndquadrant.com -- Peter Eisentraut http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services --------------C9C92A7277E140D6B4F51FDC Content-Type: text/plain; charset=UTF-8; x-mac-type="0"; x-mac-creator="0"; name="0001-Optimize-update-of-tables-with-generated-columns.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename*0="0001-Optimize-update-of-tables-with-generated-columns.patch" RnJvbSAzYjgwZjMxNDdjMGU5ODNhMmU4YWQ0MWJlN2RmNTRjNjQ4MGMwZDhmIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBFaXNlbnRyYXV0IDxwZXRlckBlaXNlbnRy YXV0Lm9yZz4KRGF0ZTogRnJpLCAyMCBEZWMgMjAxOSAyMjo1MjozMSArMDEwMApTdWJqZWN0 OiBbUEFUQ0hdIE9wdGltaXplIHVwZGF0ZSBvZiB0YWJsZXMgd2l0aCBnZW5lcmF0ZWQgY29s dW1ucwoKV2hlbiB1cGRhdGluZyBhIHRhYmxlIHJvdyB3aXRoIGdlbmVyYXRlZCBjb2x1bW5z LCBvbmx5IHJlY29tcHV0ZSB0aG9zZQpnZW5lcmF0ZWQgY29sdW1ucyB3aG9zZSBiYXNlIGNv bHVtbnMgaGF2ZSBjaGFuZ2VkIGluIHRoaXMgdXBkYXRlIGFuZAprZWVwIHRoZSByZXN0IHVu Y2hhbmdlZC4gIFRoaXMgY2FuIHJlc3VsdCBpbiBhIHNpZ25pZmljYW50IHBlcmZvcm1hbmNl CmJlbmVmaXQuICBUaGUgcmVxdWlyZWQgaW5mb3JtYXRpb24gd2FzIGFscmVhZHkga2VwdCBp bgpSYW5nZVRibEVudHJ5LmV4dHJhVXBkYXRlZENvbHM7IHdlIGp1c3QgaGF2ZSB0byBtYWtl IHVzZSBvZiBpdC4KCkZJWE1FOiBFeGVjU2ltcGxlUmVsYXRpb25VcGRhdGUoKSBkb2VzIG5v dCBjdXJyZW50bHkgcG9wdWxhdGUKZXh0cmFVcGRhdGVkQ29scy4gIFRoYXQgbmVlZHMgZml4 aW5nIGZpcnN0LgotLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHkuYyAgICAgICAgICAg IHwgIDIgKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNSZXBsaWNhdGlvbi5jIHwgIDQg Ky0tCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTW9kaWZ5VGFibGUuYyB8IDM3ICsrKysr KysrKysrKysrKysrKysrKy0tLS0tCiBzcmMvaW5jbHVkZS9leGVjdXRvci9ub2RlTW9kaWZ5 VGFibGUuaCB8ICAyICstCiBzcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaCAgICAgICAg ICB8ICAzICsrKwogNSBmaWxlcyBjaGFuZ2VkLCAzOCBpbnNlcnRpb25zKCspLCAxMCBkZWxl dGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5LmMgYi9z cmMvYmFja2VuZC9jb21tYW5kcy9jb3B5LmMKaW5kZXggNDJhMTQ3YjY3ZC4uYTA3NThjZDM5 YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weS5jCisrKyBiL3NyYy9i YWNrZW5kL2NvbW1hbmRzL2NvcHkuYwpAQCAtMzIyMSw3ICszMjIxLDcgQEAgQ29weUZyb20o Q29weVN0YXRlIGNzdGF0ZSkKIAkJCQkvKiBDb21wdXRlIHN0b3JlZCBnZW5lcmF0ZWQgY29s dW1ucyAqLwogCQkJCWlmIChyZXN1bHRSZWxJbmZvLT5yaV9SZWxhdGlvbkRlc2MtPnJkX2F0 dC0+Y29uc3RyICYmCiAJCQkJCXJlc3VsdFJlbEluZm8tPnJpX1JlbGF0aW9uRGVzYy0+cmRf YXR0LT5jb25zdHItPmhhc19nZW5lcmF0ZWRfc3RvcmVkKQotCQkJCQlFeGVjQ29tcHV0ZVN0 b3JlZEdlbmVyYXRlZChlc3RhdGUsIG15c2xvdCk7CisJCQkJCUV4ZWNDb21wdXRlU3RvcmVk R2VuZXJhdGVkKGVzdGF0ZSwgbXlzbG90LCBDTURfSU5TRVJUKTsKIAogCQkJCS8qCiAJCQkJ ICogSWYgdGhlIHRhcmdldCBpcyBhIHBsYWluIHRhYmxlLCBjaGVjayB0aGUgY29uc3RyYWlu dHMgb2YKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNSZXBsaWNhdGlv bi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1JlcGxpY2F0aW9uLmMKaW5kZXggOTVl MDI3Yzk3MC4uOGNiZWMzNmIxOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv ZXhlY1JlcGxpY2F0aW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1JlcGxp Y2F0aW9uLmMKQEAgLTQxNiw3ICs0MTYsNyBAQCBFeGVjU2ltcGxlUmVsYXRpb25JbnNlcnQo RVN0YXRlICplc3RhdGUsIFR1cGxlVGFibGVTbG90ICpzbG90KQogCQkvKiBDb21wdXRlIHN0 b3JlZCBnZW5lcmF0ZWQgY29sdW1ucyAqLwogCQlpZiAocmVsLT5yZF9hdHQtPmNvbnN0ciAm JgogCQkJcmVsLT5yZF9hdHQtPmNvbnN0ci0+aGFzX2dlbmVyYXRlZF9zdG9yZWQpCi0JCQlF eGVjQ29tcHV0ZVN0b3JlZEdlbmVyYXRlZChlc3RhdGUsIHNsb3QpOworCQkJRXhlY0NvbXB1 dGVTdG9yZWRHZW5lcmF0ZWQoZXN0YXRlLCBzbG90LCBDTURfSU5TRVJUKTsKIAogCQkvKiBD aGVjayB0aGUgY29uc3RyYWludHMgb2YgdGhlIHR1cGxlICovCiAJCWlmIChyZWwtPnJkX2F0 dC0+Y29uc3RyKQpAQCAtNDgyLDcgKzQ4Miw3IEBAIEV4ZWNTaW1wbGVSZWxhdGlvblVwZGF0 ZShFU3RhdGUgKmVzdGF0ZSwgRVBRU3RhdGUgKmVwcXN0YXRlLAogCQkvKiBDb21wdXRlIHN0 b3JlZCBnZW5lcmF0ZWQgY29sdW1ucyAqLwogCQlpZiAocmVsLT5yZF9hdHQtPmNvbnN0ciAm JgogCQkJcmVsLT5yZF9hdHQtPmNvbnN0ci0+aGFzX2dlbmVyYXRlZF9zdG9yZWQpCi0JCQlF eGVjQ29tcHV0ZVN0b3JlZEdlbmVyYXRlZChlc3RhdGUsIHNsb3QpOworCQkJRXhlY0NvbXB1 dGVTdG9yZWRHZW5lcmF0ZWQoZXN0YXRlLCBzbG90LCBDTURfVVBEQVRFKTsKIAogCQkvKiBD aGVjayB0aGUgY29uc3RyYWludHMgb2YgdGhlIHR1cGxlICovCiAJCWlmIChyZWwtPnJkX2F0 dC0+Y29uc3RyKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1vZGlm eVRhYmxlLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTW9kaWZ5VGFibGUuYwppbmRl eCA5YmExZDc4MzQ0Li41ODc4MDQxZWU2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVj dXRvci9ub2RlTW9kaWZ5VGFibGUuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2Rl TW9kaWZ5VGFibGUuYwpAQCAtMjQ2LDcgKzI0Niw3IEBAIEV4ZWNDaGVja1RJRFZpc2libGUo RVN0YXRlICplc3RhdGUsCiAgKiBDb21wdXRlIHN0b3JlZCBnZW5lcmF0ZWQgY29sdW1ucyBm b3IgYSB0dXBsZQogICovCiB2b2lkCi1FeGVjQ29tcHV0ZVN0b3JlZEdlbmVyYXRlZChFU3Rh dGUgKmVzdGF0ZSwgVHVwbGVUYWJsZVNsb3QgKnNsb3QpCitFeGVjQ29tcHV0ZVN0b3JlZEdl bmVyYXRlZChFU3RhdGUgKmVzdGF0ZSwgVHVwbGVUYWJsZVNsb3QgKnNsb3QsIENtZFR5cGUg Y21kdHlwZSkKIHsKIAlSZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvID0gZXN0YXRlLT5l c19yZXN1bHRfcmVsYXRpb25faW5mbzsKIAlSZWxhdGlvbglyZWwgPSByZXN1bHRSZWxJbmZv LT5yaV9SZWxhdGlvbkRlc2M7CkBAIC0yNjksNiArMjY5LDcgQEAgRXhlY0NvbXB1dGVTdG9y ZWRHZW5lcmF0ZWQoRVN0YXRlICplc3RhdGUsIFR1cGxlVGFibGVTbG90ICpzbG90KQogCiAJ CXJlc3VsdFJlbEluZm8tPnJpX0dlbmVyYXRlZEV4cHJzID0KIAkJCShFeHByU3RhdGUgKiop IHBhbGxvYyhuYXR0cyAqIHNpemVvZihFeHByU3RhdGUgKikpOworCQlyZXN1bHRSZWxJbmZv LT5yaV9OdW1HZW5lcmF0ZWROZWVkZWQgPSAwOwogCiAJCWZvciAoaW50IGkgPSAwOyBpIDwg bmF0dHM7IGkrKykKIAkJewpAQCAtMjc2LDE4ICsyNzcsNDEgQEAgRXhlY0NvbXB1dGVTdG9y ZWRHZW5lcmF0ZWQoRVN0YXRlICplc3RhdGUsIFR1cGxlVGFibGVTbG90ICpzbG90KQogCQkJ ewogCQkJCUV4cHIJICAgKmV4cHI7CiAKKwkJCQkvKgorCQkJCSAqIElmIGl0J3MgYW4gdXBk YXRlIGFuZCB0aGUgY3VycmVudCBjb2x1bW4gd2FzIG5vdCBtYXJrZWQgYXMKKwkJCQkgKiBi ZWluZyB1cGRhdGVkLCB0aGVuIHdlIGNhbiBza2lwIHRoZSBjb21wdXRhdGlvbi4gIEJ1dCBp ZgorCQkJCSAqIHRoZXJlIGlzIGEgQkVGT1JFIFJPVyBVUERBVEUgdHJpZ2dlciwgd2UgY2Fu bm90IHNraXAKKwkJCQkgKiBiZWNhdXNlIHRoZSB0cmlnZ2VyIG1pZ2h0IGFmZmVjdCBhZGRp dGlvbmFsIGNvbHVtbnMuCisJCQkJICovCisJCQkJaWYgKGNtZHR5cGUgPT0gQ01EX1VQREFU RSAmJgorCQkJCQkhKHJlbC0+dHJpZ2Rlc2MgJiYgcmVsLT50cmlnZGVzYy0+dHJpZ191cGRh dGVfYmVmb3JlX3JvdykgJiYKKwkJCQkJIWJtc19pc19tZW1iZXIoaSArIDEgLSBGaXJzdExv d0ludmFsaWRIZWFwQXR0cmlidXRlTnVtYmVyLAorCQkJCQkJCQkgICBleGVjX3J0X2ZldGNo KHJlc3VsdFJlbEluZm8tPnJpX1JhbmdlVGFibGVJbmRleCwgZXN0YXRlKS0+ZXh0cmFVcGRh dGVkQ29scykpCisJCQkJeworCQkJCQlyZXN1bHRSZWxJbmZvLT5yaV9HZW5lcmF0ZWRFeHBy c1tpXSA9IE5VTEw7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwogCQkJCWV4cHIgPSAoRXhw ciAqKSBidWlsZF9jb2x1bW5fZGVmYXVsdChyZWwsIGkgKyAxKTsKIAkJCQlpZiAoZXhwciA9 PSBOVUxMKQogCQkJCQllbG9nKEVSUk9SLCAibm8gZ2VuZXJhdGlvbiBleHByZXNzaW9uIGZv dW5kIGZvciBjb2x1bW4gbnVtYmVyICVkIG9mIHRhYmxlIFwiJXNcIiIsCiAJCQkJCQkgaSAr IDEsIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCkpOwogCiAJCQkJcmVzdWx0UmVsSW5m by0+cmlfR2VuZXJhdGVkRXhwcnNbaV0gPSBFeGVjUHJlcGFyZUV4cHIoZXhwciwgZXN0YXRl KTsKKwkJCQlyZXN1bHRSZWxJbmZvLT5yaV9OdW1HZW5lcmF0ZWROZWVkZWQrKzsKIAkJCX0K IAkJfQogCiAJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRDb250ZXh0KTsKIAl9CiAKKwkv KgorCSAqIElmIG5vIGdlbmVyYXRlZCBjb2x1bW5zIGhhdmUgYmVlbiBhZmZlY3RlZCBieSB0 aGlzIGNoYW5nZSwgdGhlbiBza2lwCisJICogdGhlIHJlc3QuCisJICovCisJaWYgKHJlc3Vs dFJlbEluZm8tPnJpX051bUdlbmVyYXRlZE5lZWRlZCA9PSAwKQorCQlyZXR1cm47CisKIAlv bGRDb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKEdldFBlclR1cGxlTWVtb3J5Q29u dGV4dChlc3RhdGUpKTsKIAogCXZhbHVlcyA9IHBhbGxvYyhzaXplb2YoKnZhbHVlcykgKiBu YXR0cyk7CkBAIC0zMDAsNyArMzI0LDggQEAgRXhlY0NvbXB1dGVTdG9yZWRHZW5lcmF0ZWQo RVN0YXRlICplc3RhdGUsIFR1cGxlVGFibGVTbG90ICpzbG90KQogCXsKIAkJRm9ybV9wZ19h dHRyaWJ1dGUgYXR0ciA9IFR1cGxlRGVzY0F0dHIodHVwZGVzYywgaSk7CiAKLQkJaWYgKGF0 dHItPmF0dGdlbmVyYXRlZCA9PSBBVFRSSUJVVEVfR0VORVJBVEVEX1NUT1JFRCkKKwkJaWYg KGF0dHItPmF0dGdlbmVyYXRlZCA9PSBBVFRSSUJVVEVfR0VORVJBVEVEX1NUT1JFRCAmJgor CQkJcmVzdWx0UmVsSW5mby0+cmlfR2VuZXJhdGVkRXhwcnNbaV0pCiAJCXsKIAkJCUV4cHJD b250ZXh0ICplY29udGV4dDsKIAkJCURhdHVtCQl2YWw7CkBAIC0zOTIsNyArNDE3LDcgQEAg RXhlY0luc2VydChNb2RpZnlUYWJsZVN0YXRlICptdHN0YXRlLAogCQkgKi8KIAkJaWYgKHJl c3VsdFJlbGF0aW9uRGVzYy0+cmRfYXR0LT5jb25zdHIgJiYKIAkJCXJlc3VsdFJlbGF0aW9u RGVzYy0+cmRfYXR0LT5jb25zdHItPmhhc19nZW5lcmF0ZWRfc3RvcmVkKQotCQkJRXhlY0Nv bXB1dGVTdG9yZWRHZW5lcmF0ZWQoZXN0YXRlLCBzbG90KTsKKwkJCUV4ZWNDb21wdXRlU3Rv cmVkR2VuZXJhdGVkKGVzdGF0ZSwgc2xvdCwgQ01EX0lOU0VSVCk7CiAKIAkJLyoKIAkJICog aW5zZXJ0IGludG8gZm9yZWlnbiB0YWJsZTogbGV0IHRoZSBGRFcgZG8gaXQKQEAgLTQyNyw3 ICs0NTIsNyBAQCBFeGVjSW5zZXJ0KE1vZGlmeVRhYmxlU3RhdGUgKm10c3RhdGUsCiAJCSAq LwogCQlpZiAocmVzdWx0UmVsYXRpb25EZXNjLT5yZF9hdHQtPmNvbnN0ciAmJgogCQkJcmVz dWx0UmVsYXRpb25EZXNjLT5yZF9hdHQtPmNvbnN0ci0+aGFzX2dlbmVyYXRlZF9zdG9yZWQp Ci0JCQlFeGVjQ29tcHV0ZVN0b3JlZEdlbmVyYXRlZChlc3RhdGUsIHNsb3QpOworCQkJRXhl Y0NvbXB1dGVTdG9yZWRHZW5lcmF0ZWQoZXN0YXRlLCBzbG90LCBDTURfSU5TRVJUKTsKIAog CQkvKgogCQkgKiBDaGVjayBhbnkgUkxTIFdJVEggQ0hFQ0sgcG9saWNpZXMuCkBAIC0xMDg4 LDcgKzExMTMsNyBAQCBFeGVjVXBkYXRlKE1vZGlmeVRhYmxlU3RhdGUgKm10c3RhdGUsCiAJ CSAqLwogCQlpZiAocmVzdWx0UmVsYXRpb25EZXNjLT5yZF9hdHQtPmNvbnN0ciAmJgogCQkJ cmVzdWx0UmVsYXRpb25EZXNjLT5yZF9hdHQtPmNvbnN0ci0+aGFzX2dlbmVyYXRlZF9zdG9y ZWQpCi0JCQlFeGVjQ29tcHV0ZVN0b3JlZEdlbmVyYXRlZChlc3RhdGUsIHNsb3QpOworCQkJ RXhlY0NvbXB1dGVTdG9yZWRHZW5lcmF0ZWQoZXN0YXRlLCBzbG90LCBDTURfVVBEQVRFKTsK IAogCQkvKgogCQkgKiB1cGRhdGUgaW4gZm9yZWlnbiB0YWJsZTogbGV0IHRoZSBGRFcgZG8g aXQKQEAgLTExMjUsNyArMTE1MCw3IEBAIEV4ZWNVcGRhdGUoTW9kaWZ5VGFibGVTdGF0ZSAq bXRzdGF0ZSwKIAkJICovCiAJCWlmIChyZXN1bHRSZWxhdGlvbkRlc2MtPnJkX2F0dC0+Y29u c3RyICYmCiAJCQlyZXN1bHRSZWxhdGlvbkRlc2MtPnJkX2F0dC0+Y29uc3RyLT5oYXNfZ2Vu ZXJhdGVkX3N0b3JlZCkKLQkJCUV4ZWNDb21wdXRlU3RvcmVkR2VuZXJhdGVkKGVzdGF0ZSwg c2xvdCk7CisJCQlFeGVjQ29tcHV0ZVN0b3JlZEdlbmVyYXRlZChlc3RhdGUsIHNsb3QsIENN RF9VUERBVEUpOwogCiAJCS8qCiAJCSAqIENoZWNrIGFueSBSTFMgVVBEQVRFIFdJVEggQ0hF Q0sgcG9saWNpZXMKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL25vZGVNb2Rp ZnlUYWJsZS5oIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3Ivbm9kZU1vZGlmeVRhYmxlLmgKaW5k ZXggODkxYjExOTYwOC4uZDQ0YTY0Y2I0OSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvZXhl Y3V0b3Ivbm9kZU1vZGlmeVRhYmxlLmgKKysrIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3Ivbm9k ZU1vZGlmeVRhYmxlLmgKQEAgLTE1LDcgKzE1LDcgQEAKIAogI2luY2x1ZGUgIm5vZGVzL2V4 ZWNub2Rlcy5oIgogCi1leHRlcm4gdm9pZCBFeGVjQ29tcHV0ZVN0b3JlZEdlbmVyYXRlZChF U3RhdGUgKmVzdGF0ZSwgVHVwbGVUYWJsZVNsb3QgKnNsb3QpOworZXh0ZXJuIHZvaWQgRXhl Y0NvbXB1dGVTdG9yZWRHZW5lcmF0ZWQoRVN0YXRlICplc3RhdGUsIFR1cGxlVGFibGVTbG90 ICpzbG90LCBDbWRUeXBlIGNtZHR5cGUpOwogCiBleHRlcm4gTW9kaWZ5VGFibGVTdGF0ZSAq RXhlY0luaXRNb2RpZnlUYWJsZShNb2RpZnlUYWJsZSAqbm9kZSwgRVN0YXRlICplc3RhdGUs IGludCBlZmxhZ3MpOwogZXh0ZXJuIHZvaWQgRXhlY0VuZE1vZGlmeVRhYmxlKE1vZGlmeVRh YmxlU3RhdGUgKm5vZGUpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25v ZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaAppbmRleCAwYzJhNzdhYWY4 Li45M2NjYTJlMDhkIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMu aAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaApAQCAtNDU2LDYgKzQ1Niw5 IEBAIHR5cGVkZWYgc3RydWN0IFJlc3VsdFJlbEluZm8KIAkvKiBhcnJheSBvZiBzdG9yZWQg Z2VuZXJhdGVkIGNvbHVtbnMgZXhwciBzdGF0ZXMgKi8KIAlFeHByU3RhdGUgKipyaV9HZW5l cmF0ZWRFeHByczsKIAorCS8qIG51bWJlciBvZiBzdG9yZWQgZ2VuZXJhdGVkIGNvbHVtbnMg d2UgbmVlZCB0byBjb21wdXRlICovCisJaW50CQkJcmlfTnVtR2VuZXJhdGVkTmVlZGVkOwor CiAJLyogZm9yIHJlbW92aW5nIGp1bmsgYXR0cmlidXRlcyBmcm9tIHR1cGxlcyAqLwogCUp1 bmtGaWx0ZXIgKnJpX2p1bmtGaWx0ZXI7CiAKLS0gCjIuMjQuMQoK --------------C9C92A7277E140D6B4F51FDC--