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 1tp5Ks-000IZJ-4O for pgsql-hackers@arkaria.postgresql.org; Mon, 03 Mar 2025 12:55: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 1tp5Kp-006yMW-Pe for pgsql-hackers@arkaria.postgresql.org; Mon, 03 Mar 2025 12:55:51 +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 1tp5Kp-006yMO-CP for pgsql-hackers@lists.postgresql.org; Mon, 03 Mar 2025 12:55:51 +0000 Received: from forward100a.mail.yandex.net ([2a02:6b8:c0e:500:1:45:d181:d100]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1tp5Kl-000hqM-1q for pgsql-hackers@postgresql.org; Mon, 03 Mar 2025 12:55:51 +0000 Received: from mail-nwsmtp-smtp-production-main-74.vla.yp-c.yandex.net (mail-nwsmtp-smtp-production-main-74.vla.yp-c.yandex.net [IPv6:2a02:6b8:c1f:1a98:0:640:f7e1:0]) by forward100a.mail.yandex.net (Yandex) with ESMTPS id 00A3B4735E; Mon, 3 Mar 2025 15:55:46 +0300 (MSK) Received: by mail-nwsmtp-smtp-production-main-74.vla.yp-c.yandex.net (smtp/Yandex) with ESMTPSA id hthfqOXLcqM0-hy68x8Pc; Mon, 03 Mar 2025 15:55:45 +0300 X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tantorlabs.com; s=mail; t=1741006545; bh=8P6xr6zhtZRwrgE5ZmHlfSlurWiw+99fEoGECO9K70E=; h=In-Reply-To:Cc:Date:References:To:Subject:Message-ID:From; b=ogREcY3lAn/ijbZHspGluQbtLsghywWFEBVOI3+sx3+7I+7Mu55PlpIzhDESTDVM8 fh9NvFCyJMwjVlMX4ySXLKl/U2HBZMhf9TG+FxxmyOVNbmzR0WW2X1dCPkW0dh0Aje lUlapSAMK39y+59XycVLLCGMrTHMvg1VcGLEOi8c= Authentication-Results: mail-nwsmtp-smtp-production-main-74.vla.yp-c.yandex.net; dkim=pass header.i=@tantorlabs.com Content-Type: multipart/mixed; boundary="------------tIksmNr6cgmVTMq8HgCMMIQe" Message-ID: <51e93798-cd3b-4855-aaa4-78985025cd76@tantorlabs.com> Date: Mon, 3 Mar 2025 15:55:42 +0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Sample rate added to pg_stat_statements To: Sami Imseih Cc: Alexander Korotkov , Michael Paquier , Greg Sabino Mullane , Andrey Borodin , Alena Rybakina , pgsql-hackers References: <0c7770bd-9750-4200-a472-bdb262583c2f@tantorlabs.com> <18631d46-1741-4edc-b116-8d9631cdf919@tantorlabs.com> <4f98ec33-c627-4eb4-84f3-9994a0982277@tantorlabs.com> <623db69f-b40a-4d50-b1bd-bb073fcc4336@tantorlabs.com> <3546e2a7-5831-4c0a-996b-358d4ec483a6@tantorlabs.com> <6bf3059f-7ebe-4640-8870-1220f83b88ed@tantorlabs.com> <7b9df88f-3015-464b-881e-4c6a7b3a5c03@tantorlabs.com> <6f305fd1-44c3-4189-81ef-238777277e5e@tantorlabs.com> Content-Language: en-US From: Ilia Evdokimov 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. --------------tIksmNr6cgmVTMq8HgCMMIQe Content-Type: multipart/alternative; boundary="------------QsMQQM0Y0YPfR5zctpUHQ8QA" --------------QsMQQM0Y0YPfR5zctpUHQ8QA Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 20.02.2025 04:04, Sami Imseih wrote: > In my opinion, sample rate is a better fit for pg_stat_statements, > since the queries that > you care about the most are usually the most frequently executed. Sampling them > will still provide enough good data without the risk of not capturing > statistics about > them at all. > > Longer running queries will also likely be the least frequent, so they > are already not likely > contributing to the spinlock contention. Also, the least frequent > queries will likely be aged > out faster, so pg_stat_statements was never really a good candidate to > track those anyways; > slow query logging with log_min_duration_statement is a better way to > ensure you capture > the data. > > Maybe others may have a different opinion? > > -- > > Sami Hi everyone, Since most people have expressed support for sampling based on frequency of query, I will revert the rebased patch for version v15. Also, given that everyone is likely busy with the higher-priority task of IN normalization in pg_stat_statements, I will leave the rebased v19-patch here and move it back to Ready for Committer, as the patch has already been it. Any suggestions are welcome. -- Best regards, Ilia Evdokimov, Tantor Labs LLC. --------------QsMQQM0Y0YPfR5zctpUHQ8QA Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 7bit


On 20.02.2025 04:04, Sami Imseih wrote:
In my opinion, sample rate is a better fit for pg_stat_statements,
since the queries that
you care about the most are usually the most frequently executed. Sampling them
will still provide enough good data without the risk of not capturing
statistics about
them at all.

Longer running queries will also likely be the least frequent, so they
are already not likely
contributing to the spinlock contention. Also, the least frequent
queries will likely be aged
out faster, so pg_stat_statements was never really a good candidate to
track those anyways;
slow query logging with log_min_duration_statement is a better way to
ensure you capture
the data.

Maybe others may have a different opinion?

--

Sami


Hi everyone,

Since most people have expressed support for sampling based on frequency of query, I will revert the rebased patch for version v15. Also, given that everyone is likely busy with the higher-priority task of IN normalization in pg_stat_statements, I will leave the rebased v19-patch here and move it back to Ready for Committer, as the patch has already been it.

Any suggestions are welcome.

--
Best regards,
Ilia Evdokimov,
Tantor Labs LLC.

--------------QsMQQM0Y0YPfR5zctpUHQ8QA-- --------------tIksmNr6cgmVTMq8HgCMMIQe Content-Type: text/x-patch; charset=UTF-8; name="v19-0001-Allow-setting-sample-rate-for-pg_stat_statements.patch" Content-Disposition: attachment; filename*0="v19-0001-Allow-setting-sample-rate-for-pg_stat_statements.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA5YTI3ZmVjZGZiMGEyZTM1MWU4NDc2NDMwZDVkNTAzMDMyNGE4ODdkIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBJbGlhIEV2ZG9raW1vdiA8aWx5YS5ldmRva2ltb3ZA dGFudG9ybGFicy5jb20+CkRhdGU6IE1vbiwgMyBNYXIgMjAyNSAxNTo0MTo0OCArMDMwMApT dWJqZWN0OiBbUEFUQ0ggdjE5XSBBbGxvdyBzZXR0aW5nIHNhbXBsZSByYXRlIGZvciBwZ19z dGF0X3N0YXRlbWVudHMKCk5ldyBjb25maWd1cmF0aW9uIHBhcmFtZXRlciBwZ19zdGF0X3N0 YXRlbWVudHMuc2FtcGxlX3JhdGUgbWFrZXMgaXQKcG9zc2libGUgdG8gdHJhY2sganVzdCBh IGZyYWN0aW9uIG9mIHRoZSBxdWVyaWVzIG1lZXRpbmcgdGhlIGNvbmZpZ3VyZWQKdGhyZXNo b2xkLCB0byByZWR1Y2UgdGhlIGFtb3VudCBvZiB0cmFja2luZy4KLS0tCiBjb250cmliL3Bn X3N0YXRfc3RhdGVtZW50cy9NYWtlZmlsZSAgICAgICAgICAgfCAgIDIgKy0KIC4uLi9wZ19z dGF0X3N0YXRlbWVudHMvZXhwZWN0ZWQvc2FtcGxpbmcub3V0ICB8IDE3NCArKysrKysrKysr KysrKysrKysKIGNvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL21lc29uLmJ1aWxkICAgICAg ICB8ICAgMSArCiAuLi4vcGdfc3RhdF9zdGF0ZW1lbnRzL3BnX3N0YXRfc3RhdGVtZW50cy5j ICAgfCAgNTMgKysrKystCiBjb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9zcWwvc2FtcGxp bmcuc3FsICAgfCAgNTAgKysrKysKIGRvYy9zcmMvc2dtbC9wZ3N0YXRzdGF0ZW1lbnRzLnNn bWwgICAgICAgICAgICB8ICAxOSArKwogNiBmaWxlcyBjaGFuZ2VkLCAyOTEgaW5zZXJ0aW9u cygrKSwgOCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3N0 YXRfc3RhdGVtZW50cy9leHBlY3RlZC9zYW1wbGluZy5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBjb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9zcWwvc2FtcGxpbmcuc3FsCgpkaWZmIC0t Z2l0IGEvY29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvTWFrZWZpbGUgYi9jb250cmliL3Bn X3N0YXRfc3RhdGVtZW50cy9NYWtlZmlsZQppbmRleCAyNDFjMDI1ODdiLi5iNzBiZGZhZjJk IDEwMDY0NAotLS0gYS9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9NYWtlZmlsZQorKysg Yi9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9NYWtlZmlsZQpAQCAtMjAsNyArMjAsNyBA QCBMREZMQUdTX1NMICs9ICQoZmlsdGVyIC1sbSwgJChMSUJTKSkKIFJFR1JFU1NfT1BUUyA9 IC0tdGVtcC1jb25maWcgJCh0b3Bfc3JjZGlyKS9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50 cy9wZ19zdGF0X3N0YXRlbWVudHMuY29uZgogUkVHUkVTUyA9IHNlbGVjdCBkbWwgY3Vyc29y cyB1dGlsaXR5IGxldmVsX3RyYWNraW5nIHBsYW5uaW5nIFwKIAl1c2VyX2FjdGl2aXR5IHdh bCBlbnRyeV90aW1lc3RhbXAgcHJpdmlsZWdlcyBleHRlbmRlZCBcCi0JcGFyYWxsZWwgY2xl YW51cCBvbGRleHR2ZXJzaW9ucworCXBhcmFsbGVsIHNhbXBsaW5nIGNsZWFudXAgb2xkZXh0 dmVyc2lvbnMKICMgRGlzYWJsZWQgYmVjYXVzZSB0aGVzZSB0ZXN0cyByZXF1aXJlICJzaGFy ZWRfcHJlbG9hZF9saWJyYXJpZXM9cGdfc3RhdF9zdGF0ZW1lbnRzIiwKICMgd2hpY2ggdHlw aWNhbCBpbnN0YWxsY2hlY2sgdXNlcnMgZG8gbm90IGhhdmUgKGUuZy4gYnVpbGRmYXJtIGNs aWVudHMpLgogTk9fSU5TVEFMTENIRUNLID0gMQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19z dGF0X3N0YXRlbWVudHMvZXhwZWN0ZWQvc2FtcGxpbmcub3V0IGIvY29udHJpYi9wZ19zdGF0 X3N0YXRlbWVudHMvZXhwZWN0ZWQvc2FtcGxpbmcub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAuLjIyMDQyMTVmNjQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250 cmliL3BnX3N0YXRfc3RhdGVtZW50cy9leHBlY3RlZC9zYW1wbGluZy5vdXQKQEAgLTAsMCAr MSwxNzQgQEAKKy0tCistLSBzYW1wbGUgc3RhdGVtZW50cworLS0KKy0tIHRvcC1sZXZlbCB0 cmFja2luZyAtIHNpbXBsZSBxdWVyeSBwcm90b2NvbAorU0hPVyBwZ19zdGF0X3N0YXRlbWVu dHMudHJhY2s7CisgcGdfc3RhdF9zdGF0ZW1lbnRzLnRyYWNrIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyB0b3AKKygxIHJvdykKKworU0VUIHBnX3N0YXRfc3RhdGVtZW50cy5z YW1wbGVfcmF0ZSA9IDAuMDsKK1NFTEVDVCBwZ19zdGF0X3N0YXRlbWVudHNfcmVzZXQoKSBJ UyBOT1QgTlVMTCBBUyB0OworIHQgCistLS0KKyB0CisoMSByb3cpCisKK1NFTEVDVCAxIEFT ICJpbnQiOworIGludCAKKy0tLS0tCisgICAxCisoMSByb3cpCisKK1NFTEVDVCBxdWVyeSwg Y2FsbHMgRlJPTSBwZ19zdGF0X3N0YXRlbWVudHMgT1JERVIgQlkgcXVlcnkgQ09MTEFURSAi QyI7CisgcXVlcnkgfCBjYWxscyAKKy0tLS0tLS0rLS0tLS0tLQorKDAgcm93cykKKworU0VU IHBnX3N0YXRfc3RhdGVtZW50cy5zYW1wbGVfcmF0ZSA9IDEuMDsKK1NFTEVDVCAxIEFTICJp bnQiOworIGludCAKKy0tLS0tCisgICAxCisoMSByb3cpCisKK1NFTEVDVCBxdWVyeSwgY2Fs bHMgRlJPTSBwZ19zdGF0X3N0YXRlbWVudHMgT1JERVIgQlkgcXVlcnkgQ09MTEFURSAiQyI7 CisgICAgICAgcXVlcnkgICAgICAgIHwgY2FsbHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tCisgU0VMRUNUICQxIEFTICJpbnQiIHwgICAgIDEKKygxIHJvdykKKworLS0gdG9w LWxldmVsIHRyYWNraW5nIC0gZXh0ZW5kZWQgcXVlcnkgcHJvdG9jb2wKK1NFVCBwZ19zdGF0 X3N0YXRlbWVudHMuc2FtcGxlX3JhdGUgPSAwLjA7CitTRUxFQ1QgcGdfc3RhdF9zdGF0ZW1l bnRzX3Jlc2V0KCkgSVMgTk9UIE5VTEwgQVMgdDsKKyB0IAorLS0tCisgdAorKDEgcm93KQor CitTRUxFQ1QgMSBccGFyc2Ugc3RtdAorXGJpbmRfbmFtZWQgc3RtdCBcZworID9jb2x1bW4/ IAorLS0tLS0tLS0tLQorICAgICAgICAxCisoMSByb3cpCisKK1NFTEVDVCBxdWVyeSwgY2Fs bHMgRlJPTSBwZ19zdGF0X3N0YXRlbWVudHMgT1JERVIgQlkgcXVlcnkgQ09MTEFURSAiQyI7 CisgcXVlcnkgfCBjYWxscyAKKy0tLS0tLS0rLS0tLS0tLQorKDAgcm93cykKKworU0VUIHBn X3N0YXRfc3RhdGVtZW50cy5zYW1wbGVfcmF0ZSA9IDEuMDsKK1xiaW5kX25hbWVkIHN0bXQg XGcKKyA/Y29sdW1uPyAKKy0tLS0tLS0tLS0KKyAgICAgICAgMQorKDEgcm93KQorCitTRUxF Q1QgcXVlcnksIGNhbGxzIEZST00gcGdfc3RhdF9zdGF0ZW1lbnRzIE9SREVSIEJZIHF1ZXJ5 IENPTExBVEUgIkMiOworICAgcXVlcnkgICB8IGNhbGxzIAorLS0tLS0tLS0tLS0rLS0tLS0t LQorIFNFTEVDVCAkMSB8ICAgICAxCisoMSByb3cpCisKK1NFTEVDVCBwZ19zdGF0X3N0YXRl bWVudHNfcmVzZXQoKSBJUyBOT1QgTlVMTCBBUyB0OworIHQgCistLS0KKyB0CisoMSByb3cp CisKK0RFQUxMT0NBVEUgc3RtdDsKKy0tIG5lc3RlZCB0cmFja2luZyAtIHNpbXBsZSBxdWVy eSBwcm90b2NvbAorU0VUIHBnX3N0YXRfc3RhdGVtZW50cy50cmFjayA9ICJhbGwiOworU0VM RUNUIHBnX3N0YXRfc3RhdGVtZW50c19yZXNldCgpIElTIE5PVCBOVUxMIEFTIHQ7CisgdCAK Ky0tLQorIHQKKygxIHJvdykKKworU0VUIHBnX3N0YXRfc3RhdGVtZW50cy5zYW1wbGVfcmF0 ZSA9IDE7CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAxOworIFFVRVJZIFBMQU4gCist LS0tLS0tLS0tLS0KKyBSZXN1bHQKKygxIHJvdykKKworRVhQTEFJTiAoQ09TVFMgT0ZGKSBT RUxFQ1QgMTsKKyBRVUVSWSBQTEFOIAorLS0tLS0tLS0tLS0tCisgUmVzdWx0CisoMSByb3cp CisKK1NFVCBwZ19zdGF0X3N0YXRlbWVudHMuc2FtcGxlX3JhdGUgPSAwOworRVhQTEFJTiAo Q09TVFMgT0ZGKSBTRUxFQ1QgMTsKKyBRVUVSWSBQTEFOIAorLS0tLS0tLS0tLS0tCisgUmVz dWx0CisoMSByb3cpCisKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUIDE7CisgUVVFUlkg UExBTiAKKy0tLS0tLS0tLS0tLQorIFJlc3VsdAorKDEgcm93KQorCitTRUxFQ1QgdG9wbGV2 ZWwsIGNhbGxzLCBxdWVyeSBGUk9NIHBnX3N0YXRfc3RhdGVtZW50cworICBPUkRFUiBCWSBx dWVyeSBDT0xMQVRFICJDIjsKKyB0b3BsZXZlbCB8IGNhbGxzIHwgICAgICAgICAgICAgICAg ICAgICAgIHF1ZXJ5ICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tKy0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIHQgICAgICAgIHwgICAgIDIgfCBFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAkMQor IGYgICAgICAgIHwgICAgIDIgfCBTRUxFQ1QgJDEKKyB0ICAgICAgICB8ICAgICAxIHwgU0VM RUNUIHBnX3N0YXRfc3RhdGVtZW50c19yZXNldCgpIElTIE5PVCBOVUxMIEFTIHQKKyB0ICAg ICAgICB8ICAgICAyIHwgU0VUIHBnX3N0YXRfc3RhdGVtZW50cy5zYW1wbGVfcmF0ZSA9ICQx CisoNCByb3dzKQorCistLSBuZXN0ZWQgdHJhY2tpbmcgLSBleHRlbmRlZCBxdWVyeSBwcm90 b2NvbAorU0VUIHBnX3N0YXRfc3RhdGVtZW50cy50cmFjayA9ICJhbGwiOworU0VMRUNUIHBn X3N0YXRfc3RhdGVtZW50c19yZXNldCgpIElTIE5PVCBOVUxMIEFTIHQ7CisgdCAKKy0tLQor IHQKKygxIHJvdykKKworU0VUIHBnX3N0YXRfc3RhdGVtZW50cy5zYW1wbGVfcmF0ZSA9IDE7 CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAxOyBccGFyc2Ugc3RtdAorIFFVRVJZIFBM QU4gCistLS0tLS0tLS0tLS0KKyBSZXN1bHQKKygxIHJvdykKKworXGJpbmRfbmFtZWQgc3Rt dCBcZworIFFVRVJZIFBMQU4gCistLS0tLS0tLS0tLS0KKyBSZXN1bHQKKygxIHJvdykKKwor XGJpbmRfbmFtZWQgc3RtdCBcZworIFFVRVJZIFBMQU4gCistLS0tLS0tLS0tLS0KKyBSZXN1 bHQKKygxIHJvdykKKworU0VUIHBnX3N0YXRfc3RhdGVtZW50cy5zYW1wbGVfcmF0ZSA9IDA7 CitcYmluZF9uYW1lZCBzdG10IFxnCisgUVVFUlkgUExBTiAKKy0tLS0tLS0tLS0tLQorIFJl c3VsdAorKDEgcm93KQorCitcYmluZF9uYW1lZCBzdG10IFxnCisgUVVFUlkgUExBTiAKKy0t LS0tLS0tLS0tLQorIFJlc3VsdAorKDEgcm93KQorCitTRUxFQ1QgdG9wbGV2ZWwsIGNhbGxz LCBxdWVyeSBGUk9NIHBnX3N0YXRfc3RhdGVtZW50cworICBPUkRFUiBCWSBxdWVyeSBDT0xM QVRFICJDIjsKKyB0b3BsZXZlbCB8IGNhbGxzIHwgICAgICAgICAgICAgICAgICBxdWVyeSAg ICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgdCAgICAgICAgfCAgICAgMiB8IEVYUExBSU4g KENPU1RTIE9GRikgU0VMRUNUICQxCisgZiAgICAgICAgfCAgICAgMyB8IFNFTEVDVCAkMQor IHQgICAgICAgIHwgICAgIDEgfCBTRVQgcGdfc3RhdF9zdGF0ZW1lbnRzLnNhbXBsZV9yYXRl ID0gJDEKKygzIHJvd3MpCisKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfc3RhdF9zdGF0ZW1l bnRzL21lc29uLmJ1aWxkIGIvY29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvbWVzb24uYnVp bGQKaW5kZXggNDQ0NmFmNThjNS4uMzUxMzU0YTZhNSAxMDA2NDQKLS0tIGEvY29udHJpYi9w Z19zdGF0X3N0YXRlbWVudHMvbWVzb24uYnVpbGQKKysrIGIvY29udHJpYi9wZ19zdGF0X3N0 YXRlbWVudHMvbWVzb24uYnVpbGQKQEAgLTU0LDYgKzU0LDcgQEAgdGVzdHMgKz0gewogICAg ICAgJ3ByaXZpbGVnZXMnLAogICAgICAgJ2V4dGVuZGVkJywKICAgICAgICdwYXJhbGxlbCcs CisgICAgICAnc2FtcGxpbmcnLAogICAgICAgJ2NsZWFudXAnLAogICAgICAgJ29sZGV4dHZl cnNpb25zJywKICAgICBdLApkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19zdGF0X3N0YXRlbWVu dHMvcGdfc3RhdF9zdGF0ZW1lbnRzLmMgYi9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9w Z19zdGF0X3N0YXRlbWVudHMuYwppbmRleCBiMjQ1ZDA0MDk3Li44ZWMzNzljYWUzIDEwMDY0 NAotLS0gYS9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9wZ19zdGF0X3N0YXRlbWVudHMu YworKysgYi9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9wZ19zdGF0X3N0YXRlbWVudHMu YwpAQCAtNTAsNiArNTAsNyBAQAogI2luY2x1ZGUgImFjY2Vzcy9wYXJhbGxlbC5oIgogI2lu Y2x1ZGUgImNhdGFsb2cvcGdfYXV0aGlkLmgiCiAjaW5jbHVkZSAiY29tbW9uL2ludC5oIgor I2luY2x1ZGUgImNvbW1vbi9wZ19wcm5nLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3IvaW5zdHJ1 bWVudC5oIgogI2luY2x1ZGUgImZ1bmNhcGkuaCIKICNpbmNsdWRlICJqaXQvaml0LmgiCkBA IC0yNTcsNiArMjU4LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgcGdzc1NoYXJlZFN0YXRlCiAvKiBD dXJyZW50IG5lc3RpbmcgZGVwdGggb2YgcGxhbm5lci9FeGVjdXRvclJ1bi9Qcm9jZXNzVXRp bGl0eSBjYWxscyAqLwogc3RhdGljIGludAluZXN0aW5nX2xldmVsID0gMDsKIAorLyogSXMg dGhlIGN1cnJlbnQgdG9wLWxldmVsIHF1ZXJ5IHRvIGJlIHNhbXBsZWQ/ICovCitzdGF0aWMg Ym9vbCBpc19xdWVyeV9zYW1wbGVkID0gZmFsc2U7CisKIC8qIFNhdmVkIGhvb2sgdmFsdWVz ICovCiBzdGF0aWMgc2htZW1fcmVxdWVzdF9ob29rX3R5cGUgcHJldl9zaG1lbV9yZXF1ZXN0 X2hvb2sgPSBOVUxMOwogc3RhdGljIHNobWVtX3N0YXJ0dXBfaG9va190eXBlIHByZXZfc2ht ZW1fc3RhcnR1cF9ob29rID0gTlVMTDsKQEAgLTI5NSwxMiArMjk5LDE0IEBAIHN0YXRpYyBi b29sIHBnc3NfdHJhY2tfdXRpbGl0eSA9IHRydWU7CS8qIHdoZXRoZXIgdG8gdHJhY2sgdXRp bGl0eSBjb21tYW5kcyAqLwogc3RhdGljIGJvb2wgcGdzc190cmFja19wbGFubmluZyA9IGZh bHNlOwkvKiB3aGV0aGVyIHRvIHRyYWNrIHBsYW5uaW5nCiAJCQkJCQkJCQkJCSAqIGR1cmF0 aW9uICovCiBzdGF0aWMgYm9vbCBwZ3NzX3NhdmUgPSB0cnVlOwkvKiB3aGV0aGVyIHRvIHNh dmUgc3RhdHMgYWNyb3NzIHNodXRkb3duICovCitzdGF0aWMgZG91YmxlIHBnc3Nfc2FtcGxl X3JhdGUgPSAxLjA7IC8qIGZyYWN0aW9uIG9mIHN0YXRlbWVudHMgdG8gdHJhY2sgKi8KIAog Ci0jZGVmaW5lIHBnc3NfZW5hYmxlZChsZXZlbCkgXAorI2RlZmluZSBwZ3NzX2VuYWJsZWQo bGV2ZWwsIHNraXBfc2FtcGxpbmdfY2hlY2spIFwKIAkoIUlzUGFyYWxsZWxXb3JrZXIoKSAm JiBcCiAJKHBnc3NfdHJhY2sgPT0gUEdTU19UUkFDS19BTEwgfHwgXAotCShwZ3NzX3RyYWNr ID09IFBHU1NfVFJBQ0tfVE9QICYmIChsZXZlbCkgPT0gMCkpKQorCShwZ3NzX3RyYWNrID09 IFBHU1NfVFJBQ0tfVE9QICYmIChsZXZlbCkgPT0gMCkpICYmIFwKKwkoc2tpcF9zYW1wbGlu Z19jaGVjayA9PSBQR1NTX0lOVkFMSUQgfHwgY3VycmVudF9xdWVyeV9zYW1wbGVkKCkpKQog CiAjZGVmaW5lIHJlY29yZF9nY19xdGV4dHMoKSBcCiAJZG8geyBcCkBAIC0zNzQsNiArMzgw LDcgQEAgc3RhdGljIGNoYXIgKmdlbmVyYXRlX25vcm1hbGl6ZWRfcXVlcnkoSnVtYmxlU3Rh dGUgKmpzdGF0ZSwgY29uc3QgY2hhciAqcXVlcnksCiBzdGF0aWMgdm9pZCBmaWxsX2luX2Nv bnN0YW50X2xlbmd0aHMoSnVtYmxlU3RhdGUgKmpzdGF0ZSwgY29uc3QgY2hhciAqcXVlcnks CiAJCQkJCQkJCQkgaW50IHF1ZXJ5X2xvYyk7CiBzdGF0aWMgaW50CWNvbXBfbG9jYXRpb24o Y29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYik7CitzdGF0aWMgYm9vbAljdXJyZW50X3F1 ZXJ5X3NhbXBsZWQodm9pZCk7CiAKIAogLyoKQEAgLTQxNSw2ICs0MjIsMTkgQEAgX1BHX2lu aXQodm9pZCkKIAkJCQkJCQlOVUxMLAogCQkJCQkJCU5VTEwpOwogCisJRGVmaW5lQ3VzdG9t UmVhbFZhcmlhYmxlKCJwZ19zdGF0X3N0YXRlbWVudHMuc2FtcGxlX3JhdGUiLAorCQkJCQkJ CSAiRnJhY3Rpb24gb2YgcXVlcmllcyB0byB0cmFjay4iLAorCQkJCQkJCSBOVUxMLAorCQkJ CQkJCSAmcGdzc19zYW1wbGVfcmF0ZSwKKwkJCQkJCQkgMS4wLAorCQkJCQkJCSAwLjAsCisJ CQkJCQkJIDEuMCwKKwkJCQkJCQkgUEdDX1NVU0VULAorCQkJCQkJCSAwLAorCQkJCQkJCSBO VUxMLAorCQkJCQkJCSBOVUxMLAorCQkJCQkJCSBOVUxMKTsKKwogCURlZmluZUN1c3RvbUVu dW1WYXJpYWJsZSgicGdfc3RhdF9zdGF0ZW1lbnRzLnRyYWNrIiwKIAkJCQkJCQkgIlNlbGVj dHMgd2hpY2ggc3RhdGVtZW50cyBhcmUgdHJhY2tlZCBieSBwZ19zdGF0X3N0YXRlbWVudHMu IiwKIAkJCQkJCQkgTlVMTCwKQEAgLTgzNyw3ICs4NTcsNyBAQCBwZ3NzX3Bvc3RfcGFyc2Vf YW5hbHl6ZShQYXJzZVN0YXRlICpwc3RhdGUsIFF1ZXJ5ICpxdWVyeSwgSnVtYmxlU3RhdGUg KmpzdGF0ZSkKIAkJcHJldl9wb3N0X3BhcnNlX2FuYWx5emVfaG9vayhwc3RhdGUsIHF1ZXJ5 LCBqc3RhdGUpOwogCiAJLyogU2FmZXR5IGNoZWNrLi4uICovCi0JaWYgKCFwZ3NzIHx8ICFw Z3NzX2hhc2ggfHwgIXBnc3NfZW5hYmxlZChuZXN0aW5nX2xldmVsKSkKKwlpZiAoIXBnc3Mg fHwgIXBnc3NfaGFzaCB8fCAhcGdzc19lbmFibGVkKG5lc3RpbmdfbGV2ZWwsIFBHU1NfSU5W QUxJRCkpCiAJCXJldHVybjsKIAogCS8qCkBAIC04OTUsNyArOTE1LDcgQEAgcGdzc19wbGFu bmVyKFF1ZXJ5ICpwYXJzZSwKIAkgKiBwZ3NzX3N0b3JlIG5lZWRzIGl0LiAgV2UgYWxzbyBp Z25vcmUgcXVlcnkgd2l0aG91dCBxdWVyeWlkLCBhcyBpdCB3b3VsZAogCSAqIGJlIHRyZWF0 ZWQgYXMgYSB1dGlsaXR5IHN0YXRlbWVudCwgd2hpY2ggbWF5IG5vdCBiZSB0aGUgY2FzZS4K IAkgKi8KLQlpZiAocGdzc19lbmFibGVkKG5lc3RpbmdfbGV2ZWwpCisJaWYgKHBnc3NfZW5h YmxlZChuZXN0aW5nX2xldmVsLCBQR1NTX1BMQU4pCiAJCSYmIHBnc3NfdHJhY2tfcGxhbm5p bmcgJiYgcXVlcnlfc3RyaW5nCiAJCSYmIHBhcnNlLT5xdWVyeUlkICE9IFVJTlQ2NENPTlNU KDApKQogCXsKQEAgLTEwMDYsNyArMTAyNiw4IEBAIHBnc3NfRXhlY3V0b3JTdGFydChRdWVy eURlc2MgKnF1ZXJ5RGVzYywgaW50IGVmbGFncykKIAkgKiBjb3VudGluZyBvZiBvcHRpbWl6 YWJsZSBzdGF0ZW1lbnRzIHRoYXQgYXJlIGRpcmVjdGx5IGNvbnRhaW5lZCBpbgogCSAqIHV0 aWxpdHkgc3RhdGVtZW50cy4KIAkgKi8KLQlpZiAocGdzc19lbmFibGVkKG5lc3RpbmdfbGV2 ZWwpICYmIHF1ZXJ5RGVzYy0+cGxhbm5lZHN0bXQtPnF1ZXJ5SWQgIT0gVUlOVDY0Q09OU1Qo MCkpCisJaWYgKHBnc3NfZW5hYmxlZChuZXN0aW5nX2xldmVsLCBQR1NTX0VYRUMpICYmCisJ CXF1ZXJ5RGVzYy0+cGxhbm5lZHN0bXQtPnF1ZXJ5SWQgIT0gVUlOVDY0Q09OU1QoMCkpCiAJ ewogCQkvKgogCQkgKiBTZXQgdXAgdG8gdHJhY2sgdG90YWwgZWxhcHNlZCB0aW1lIGluIEV4 ZWN1dG9yUnVuLiAgTWFrZSBzdXJlIHRoZQpAQCAtMTA3Nyw3ICsxMDk4LDcgQEAgcGdzc19F eGVjdXRvckVuZChRdWVyeURlc2MgKnF1ZXJ5RGVzYykKIAl1aW50NjQJCXF1ZXJ5SWQgPSBx dWVyeURlc2MtPnBsYW5uZWRzdG10LT5xdWVyeUlkOwogCiAJaWYgKHF1ZXJ5SWQgIT0gVUlO VDY0Q09OU1QoMCkgJiYgcXVlcnlEZXNjLT50b3RhbHRpbWUgJiYKLQkJcGdzc19lbmFibGVk KG5lc3RpbmdfbGV2ZWwpKQorCQlwZ3NzX2VuYWJsZWQobmVzdGluZ19sZXZlbCwgUEdTU19F WEVDKSkKIAl7CiAJCS8qCiAJCSAqIE1ha2Ugc3VyZSBzdGF0cyBhY2N1bXVsYXRpb24gaXMg ZG9uZS4gIChOb3RlOiBpdCdzIG9rYXkgaWYgc2V2ZXJhbApAQCAtMTEyMCw3ICsxMTQxLDcg QEAgcGdzc19Qcm9jZXNzVXRpbGl0eShQbGFubmVkU3RtdCAqcHN0bXQsIGNvbnN0IGNoYXIg KnF1ZXJ5U3RyaW5nLAogCXVpbnQ2NAkJc2F2ZWRfcXVlcnlJZCA9IHBzdG10LT5xdWVyeUlk OwogCWludAkJCXNhdmVkX3N0bXRfbG9jYXRpb24gPSBwc3RtdC0+c3RtdF9sb2NhdGlvbjsK IAlpbnQJCQlzYXZlZF9zdG10X2xlbiA9IHBzdG10LT5zdG10X2xlbjsKLQlib29sCQllbmFi bGVkID0gcGdzc190cmFja191dGlsaXR5ICYmIHBnc3NfZW5hYmxlZChuZXN0aW5nX2xldmVs KTsKKwlib29sCQllbmFibGVkID0gcGdzc190cmFja191dGlsaXR5ICYmIHBnc3NfZW5hYmxl ZChuZXN0aW5nX2xldmVsLCBQR1NTX0VYRUMpOwogCiAJLyoKIAkgKiBGb3JjZSB1dGlsaXR5 IHN0YXRlbWVudHMgdG8gZ2V0IHF1ZXJ5SWQgemVyby4gIFdlIGRvIHRoaXMgZXZlbiBpbiBj YXNlcwpAQCAtMzAyNSwzICszMDQ2LDIxIEBAIGNvbXBfbG9jYXRpb24oY29uc3Qgdm9pZCAq YSwgY29uc3Qgdm9pZCAqYikKIAogCXJldHVybiBwZ19jbXBfczMyKGwsIHIpOwogfQorCisv KgorICogRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGN1cnJlbnQgcXVlcnkgc2hvdWxkIGJlIHNh bXBsZWQuCisgKgorICogQXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIHRvcC1sZXZlbCBzdGF0 ZW1lbnQsIGRlY2lkZSB3aGV0aGVyIHdlJ2xsCisgKiBzYW1wbGUgdGhpcyBzdGF0ZW1lbnQu IElmIG5lc3RlZC1zdGF0ZW1lbnQgdHJhY2tpbmcgaXMgZW5hYmxlZCwKKyAqIGVpdGhlciBh bGwgbmVzdGVkIHN0YXRlbWVudHMgd2lsbCBiZSB0cmFja2VkIG9yIG5vbmUgd2lsbC4KKyAq Lworc3RhdGljIGJvb2wKK2N1cnJlbnRfcXVlcnlfc2FtcGxlZCh2b2lkKQoreworCWlmIChu ZXN0aW5nX2xldmVsID09IDApCisJCWlzX3F1ZXJ5X3NhbXBsZWQgPSBwZ3NzX3NhbXBsZV9y YXRlICE9IDAuMCAmJgorCQkJKHBnc3Nfc2FtcGxlX3JhdGUgPT0gMS4wIHx8CisJCQlwZ19w cm5nX2RvdWJsZSgmcGdfZ2xvYmFsX3Bybmdfc3RhdGUpIDw9IHBnc3Nfc2FtcGxlX3JhdGUp OworCisJcmV0dXJuIGlzX3F1ZXJ5X3NhbXBsZWQ7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQg b2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvc3FsL3Nh bXBsaW5nLnNxbCBiL2NvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL3NxbC9zYW1wbGluZy5z cWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uYjA5ZjQ1OTkxYgot LS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL3NxbC9zYW1w bGluZy5zcWwKQEAgLTAsMCArMSw1MCBAQAorLS0KKy0tIHNhbXBsZSBzdGF0ZW1lbnRzCist LQorCistLSB0b3AtbGV2ZWwgdHJhY2tpbmcgLSBzaW1wbGUgcXVlcnkgcHJvdG9jb2wKK1NI T1cgcGdfc3RhdF9zdGF0ZW1lbnRzLnRyYWNrOworU0VUIHBnX3N0YXRfc3RhdGVtZW50cy5z YW1wbGVfcmF0ZSA9IDAuMDsKK1NFTEVDVCBwZ19zdGF0X3N0YXRlbWVudHNfcmVzZXQoKSBJ UyBOT1QgTlVMTCBBUyB0OworU0VMRUNUIDEgQVMgImludCI7CitTRUxFQ1QgcXVlcnksIGNh bGxzIEZST00gcGdfc3RhdF9zdGF0ZW1lbnRzIE9SREVSIEJZIHF1ZXJ5IENPTExBVEUgIkMi OworU0VUIHBnX3N0YXRfc3RhdGVtZW50cy5zYW1wbGVfcmF0ZSA9IDEuMDsKK1NFTEVDVCAx IEFTICJpbnQiOworU0VMRUNUIHF1ZXJ5LCBjYWxscyBGUk9NIHBnX3N0YXRfc3RhdGVtZW50 cyBPUkRFUiBCWSBxdWVyeSBDT0xMQVRFICJDIjsKKworLS0gdG9wLWxldmVsIHRyYWNraW5n IC0gZXh0ZW5kZWQgcXVlcnkgcHJvdG9jb2wKK1NFVCBwZ19zdGF0X3N0YXRlbWVudHMuc2Ft cGxlX3JhdGUgPSAwLjA7CitTRUxFQ1QgcGdfc3RhdF9zdGF0ZW1lbnRzX3Jlc2V0KCkgSVMg Tk9UIE5VTEwgQVMgdDsKK1NFTEVDVCAxIFxwYXJzZSBzdG10CitcYmluZF9uYW1lZCBzdG10 IFxnCitTRUxFQ1QgcXVlcnksIGNhbGxzIEZST00gcGdfc3RhdF9zdGF0ZW1lbnRzIE9SREVS IEJZIHF1ZXJ5IENPTExBVEUgIkMiOworU0VUIHBnX3N0YXRfc3RhdGVtZW50cy5zYW1wbGVf cmF0ZSA9IDEuMDsKK1xiaW5kX25hbWVkIHN0bXQgXGcKK1NFTEVDVCBxdWVyeSwgY2FsbHMg RlJPTSBwZ19zdGF0X3N0YXRlbWVudHMgT1JERVIgQlkgcXVlcnkgQ09MTEFURSAiQyI7CitT RUxFQ1QgcGdfc3RhdF9zdGF0ZW1lbnRzX3Jlc2V0KCkgSVMgTk9UIE5VTEwgQVMgdDsKK0RF QUxMT0NBVEUgc3RtdDsKKworLS0gbmVzdGVkIHRyYWNraW5nIC0gc2ltcGxlIHF1ZXJ5IHBy b3RvY29sCitTRVQgcGdfc3RhdF9zdGF0ZW1lbnRzLnRyYWNrID0gImFsbCI7CitTRUxFQ1Qg cGdfc3RhdF9zdGF0ZW1lbnRzX3Jlc2V0KCkgSVMgTk9UIE5VTEwgQVMgdDsKK1NFVCBwZ19z dGF0X3N0YXRlbWVudHMuc2FtcGxlX3JhdGUgPSAxOworRVhQTEFJTiAoQ09TVFMgT0ZGKSBT RUxFQ1QgMTsKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUIDE7CitTRVQgcGdfc3RhdF9z dGF0ZW1lbnRzLnNhbXBsZV9yYXRlID0gMDsKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNU IDE7CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAxOworU0VMRUNUIHRvcGxldmVsLCBj YWxscywgcXVlcnkgRlJPTSBwZ19zdGF0X3N0YXRlbWVudHMKKyAgT1JERVIgQlkgcXVlcnkg Q09MTEFURSAiQyI7CisKKy0tIG5lc3RlZCB0cmFja2luZyAtIGV4dGVuZGVkIHF1ZXJ5IHBy b3RvY29sCitTRVQgcGdfc3RhdF9zdGF0ZW1lbnRzLnRyYWNrID0gImFsbCI7CitTRUxFQ1Qg cGdfc3RhdF9zdGF0ZW1lbnRzX3Jlc2V0KCkgSVMgTk9UIE5VTEwgQVMgdDsKK1NFVCBwZ19z dGF0X3N0YXRlbWVudHMuc2FtcGxlX3JhdGUgPSAxOworRVhQTEFJTiAoQ09TVFMgT0ZGKSBT RUxFQ1QgMTsgXHBhcnNlIHN0bXQKK1xiaW5kX25hbWVkIHN0bXQgXGcKK1xiaW5kX25hbWVk IHN0bXQgXGcKK1NFVCBwZ19zdGF0X3N0YXRlbWVudHMuc2FtcGxlX3JhdGUgPSAwOworXGJp bmRfbmFtZWQgc3RtdCBcZworXGJpbmRfbmFtZWQgc3RtdCBcZworU0VMRUNUIHRvcGxldmVs LCBjYWxscywgcXVlcnkgRlJPTSBwZ19zdGF0X3N0YXRlbWVudHMKKyAgT1JERVIgQlkgcXVl cnkgQ09MTEFURSAiQyI7CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcGdzdGF0c3RhdGVt ZW50cy5zZ21sIGIvZG9jL3NyYy9zZ21sL3Bnc3RhdHN0YXRlbWVudHMuc2dtbAppbmRleCBl MmFjMWMyZDUwLi5mNTE3ZGQ4NTViIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcGdzdGF0 c3RhdGVtZW50cy5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9wZ3N0YXRzdGF0ZW1lbnRzLnNn bWwKQEAgLTk0NSw2ICs5NDUsMjUgQEAKICAgICA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0 ZW50cnk+CiAKKyAgIDx2YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+CisgICAgIDx2YXJuYW1l PnBnX3N0YXRfc3RhdGVtZW50cy5zYW1wbGVfcmF0ZTwvdmFybmFtZT4gKDx0eXBlPnJlYWw8 L3R5cGU+KQorICAgICA8aW5kZXh0ZXJtPgorICAgICAgPHByaW1hcnk+PHZhcm5hbWU+cGdf c3RhdF9zdGF0ZW1lbnRzLnNhbXBsZV9yYXRlPC92YXJuYW1lPiBjb25maWd1cmF0aW9uIHBh cmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgPC9pbmRleHRlcm0+CisgICAgPC90ZXJtPgorCisg ICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIDx2YXJuYW1lPnBnX3N0YXRfc3Rh dGVtZW50cy5zYW1wbGVfcmF0ZTwvdmFybmFtZT4gY2F1c2VzIHBnX3N0YXRfc3RhdGVtZW50 cyB0byBvbmx5CisgICAgICB0cmFjayBhIGZyYWN0aW9uIG9mIHRoZSBzdGF0ZW1lbnRzIGlu IGVhY2ggc2Vzc2lvbi4gVGhlIGRlZmF1bHQgaXMgPGxpdGVyYWw+MTwvbGl0ZXJhbD4sCisg ICAgICBtZWFuaW5nIHRyYWNrIGFsbCB0aGUgcXVlcmllcy4gU2V0dGluZyB0aGlzIHRvIDxs aXRlcmFsPjA8L2xpdGVyYWw+IGRpc2FibGVzIHNhbXBsZWQgc3RhdGVtZW50cworICAgICAg dHJhY2tpbmcsIHRoZSBzYW1lIGFzIHNldHRpbmcgPHZhcm5hbWU+cGdfc3RhdF9zdGF0ZW1l bnRzLnRyYWNrPC92YXJuYW1lPiB0byA8bGl0ZXJhbD5ub25lPC9saXRlcmFsPi4KKyAgICAg IEluIGNhc2Ugb2YgbmVzdGVkIHN0YXRlbWVudHMsIGVpdGhlciBhbGwgd2lsbCBiZSB0cmFj a2VkIG9yIG5vbmUuIE9ubHkgc3VwZXJ1c2VycyBjYW4gY2hhbmdlIHRoaXMgc2V0dGluZy4K KyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKwog ICAgPHZhcmxpc3RlbnRyeT4KICAgICA8dGVybT4KICAgICAgPHZhcm5hbWU+cGdfc3RhdF9z dGF0ZW1lbnRzLnNhdmU8L3Zhcm5hbWU+ICg8dHlwZT5ib29sZWFuPC90eXBlPikKLS0gCjIu MzQuMQoK --------------tIksmNr6cgmVTMq8HgCMMIQe--