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 1rnkn9-00EwAi-CW for pgsql-hackers@arkaria.postgresql.org; Fri, 22 Mar 2024 19:43:04 +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 1rnkn7-0073LQ-N8 for pgsql-hackers@arkaria.postgresql.org; Fri, 22 Mar 2024 19:43:02 +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 1rnkn7-0073LH-0s for pgsql-hackers@lists.postgresql.org; Fri, 22 Mar 2024 19:43:01 +0000 Received: from mail.postgrespro.ru ([93.174.131.139]) by makus.postgresql.org with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rnkn1-005uJ2-LZ for pgsql-hackers@lists.postgresql.org; Fri, 22 Mar 2024 19:43:00 +0000 Received: from mail.postgrespro.ru (unknown [192.168.2.28]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client did not present a certificate) (Authenticated sender: i.kartyshov@postgrespro.ru) by mail.postgrespro.ru (Postfix/587) with ESMTPSA id B845BE20EE5 for ; Fri, 22 Mar 2024 22:42:52 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mx2023; t=1711136572; bh=9w3vfIBSDikZMHlx5TqDxVjQIwCJYbVLHuLjq9O001w=; h=Date:From:To:Subject:In-Reply-To:References:User-Agent:Message-ID: From; b=Q4LSlveeBIhwoSPTF6ntytaGADiC8YrHyUFltkPFVCkbUOY9htQ58yG8MDUVd7YHi UYVkBrye9yBAuKhRECgSADKP/VWDB/8OlhJIOQMiQhItgqmIk2G+AhkyMEbPYYny01 14sjSFfsXI4jiz/kirQRCJkUEn/6ePpvTHh7d85YLTrUuCBJ3tyirIkoQd/ADqKZ8x WUFwAaeazSD1mcYKuthI9Use0uw9DoNhgl8Sdtcph/W+yO6op6btItyx6N3+rw3yF2 9GJagSE3/RAc3Cze9TAOTpyJndfbQxSlioFJeW2Wh1qBYYMfVvzHPS9s/TbzBn0sh9 6t53RSJ4tyT/w== MIME-Version: 1.0 Date: Fri, 22 Mar 2024 22:42:52 +0300 From: Kartyshov Ivan To: pgsql-hackers@lists.postgresql.org Subject: Re: [HACKERS] make async slave to wait for lsn to be replayed In-Reply-To: References: <22f122-655b3e80-3-688b3700@97587957> <4953563546cb8c8851f84c7debf723ef@postgrespro.ru> <31547e4e8c263392a768ea89a3f57833@postgrespro.ru> User-Agent: Roundcube Webmail/1.6.5 Message-ID: <22f4011c9fc31b8050054cc446b0c10f@postgrespro.ru> X-Sender: i.kartyshov@postgrespro.ru Content-Type: multipart/mixed; boundary="=_6a764f35277bd7c2d7ac84f65e7d73f0" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=_6a764f35277bd7c2d7ac84f65e7d73f0 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8; format=flowed Thank you for your feedback. On 2024-03-20 12:11, Alexander Korotkov wrote: > On Wed, Mar 20, 2024 at 12:34 AM Kartyshov Ivan > wrote: >> > 4.2 With an unreasonably high future LSN, BEGIN command waits >> > unboundedly, shouldn't we check if the specified LSN is more than >> > pg_last_wal_receive_lsn() error out? > > I think limiting wait lsn by current received lsn would destroy the > whole value of this feature. The value is to wait till given LSN is > replayed, whether it's already received or not. Ok sounds reasonable, I`ll rollback the changes. > But I don't see a problem here. On the replica, it's out of our > control to check which lsn is good and which is not. We can't check > whether the lsn, which is in future for the replica, is already issued > by primary. > > For the case of wrong lsn, which could cause potentially infinite > wait, there is the timeout and the manual query cancel. Fully agree with this take. >> > 4.3 With an unreasonably high wait time, BEGIN command waits >> > unboundedly, shouldn't we restrict the wait time to some max > value, >> > say a day or so? >> > SELECT pg_last_wal_receive_lsn() + 1 AS future_receive_lsn \gset >> > BEGIN AFTER :'future_receive_lsn' WITHIN 100000; >> >> Good idea, I put it 1 day. But this limit we should to discuss. > > Do you think that specifying timeout in milliseconds is suitable? I > would prefer to switch to seconds (with ability to specify fraction of > second). This was expressed before by Alexander Lakhin. It sounds like an interesting idea. Please review the result. >> > https://github.com/macdice/redo-bench or similar tools? > > Ivan, could you do this? Yes, test redo-bench/crash-recovery.sh This patch on master 91.327, 1.973 105.907, 3.338 98.412, 4.579 95.818, 4.19 REL_13-STABLE 116.645, 3.005 113.212, 2.568 117.644, 3.183 111.411, 2.782 master 124.712, 2.047 117.012, 1.736 116.328, 2.035 115.662, 1.797 Strange behavior, patched version is faster then REL_13-STABLE and master. > I don't see this change in the patch. Normally if a process gets a > signal, that causes WaitLatch() to exit immediately. It also exists > immediately on query cancel. IIRC, this 1 minute timeout is needed to > handle some extreme cases when an interrupt is missing. Other places > have it equal to 1 minute. I don't see why we should have it > different. Ok, I`ll rollback my changes. >> 4) added and expanded sections in the documentation > > I don't see this in the patch. I see only a short description in > func.sgml, which is definitely not sufficient. We need at least > everything we have in the docs before to be adjusted with the current > approach of procedure. I didn't find another section where to add the description of pg_wait_lsn(). So I extend description on the bottom of the table. >> 5) add default variant of timeout >> pg_wait_lsn(trg_lsn pg_lsn, delay int8 DEFAULT 0) >> example: pg_wait_lsn('0/31B1B60') equal pg_wait_lsn('0/31B1B60', 0) > > Does zero here mean no timeout? I think this should be documented. > Also, I would prefer to see the timeout by default. Probably one > minute would be good for default. Lets discuss this point. Loop in function WaitForLSN is made that way, if we choose delay=0, only then we can wait infinitely to wait LSN without timeout. So default must be 0. Please take one more look on the patch. PS sorry, the strange BUG throw my mails out of thread. https://www.postgresql.org/message-id/flat/f2ff071aa9141405bb8efee67558a058%40postgrespro.ru -- Ivan Kartyshov Postgres Professional: www.postgrespro.com --=_6a764f35277bd7c2d7ac84f65e7d73f0 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v14_0001-Procedure-wait-lsn.patch Content-Disposition: attachment; filename=v14_0001-Procedure-wait-lsn.patch; size=18826 ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9mdW5jLnNnbWwgYi9kb2Mvc3JjL3NnbWwvZnVuYy5z Z21sCmluZGV4IDViMjI1Y2NmNGYuLjZlMWY2OTk2MmQgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dt bC9mdW5jLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2Z1bmMuc2dtbApAQCAtMjc4NjEsMTAgKzI3 ODYxLDU0IEBAIHBvc3RncmVzPSMgU0VMRUNUICcwLzAnOjpwZ19sc24gKyBwZC5zZWdtZW50X251 bWJlciAqIHBzLnNldHRpbmc6OmludCArIDpvZmZzZXQKICAgICAgICAgZXh0ZW5zaW9uLgogICAg ICAgIDwvcGFyYT48L2VudHJ5PgogICAgICAgPC9yb3c+CisKKyAgICAgIDxyb3c+CisgICAgICAg PGVudHJ5IHJvbGU9ImZ1bmNfdGFibGVfZW50cnkiPjxwYXJhIHJvbGU9ImZ1bmNfc2lnbmF0dXJl Ij4KKyAgICAgICAgPGluZGV4dGVybT4KKyAgICAgICAgIDxwcmltYXJ5PnBnX3dhaXRfbHNuPC9w cmltYXJ5PgorICAgICAgICA8L2luZGV4dGVybT4KKyAgICAgICAgPGZ1bmN0aW9uPnBnX3dhaXRf bHNuPC9mdW5jdGlvbj4gKHRyZ19sc24gcGdfbHNuLCBkZWxheSBpbnQ4IERFRkFVTFQgMCkKKyAg ICAgICA8L3BhcmE+CisgICAgICAgPHBhcmE+CisgICAgICAgIFJldHVybnMgRVJST1IgaWYgdGFy Z2V0IExTTiB3YXMgbm90IHJlcGxheWVkIG9uIHN0YW5kYnkuCisgICAgICAgIFBhcmFtZXRlciA8 cGFyYW1ldGVyPmRlbGF5PC9wYXJhbWV0ZXI+IHNldHMgc2Vjb25kcywgdGhlIHRpbWUgdG8gd2Fp dCB0byB0aGUgTFNOLgorICAgICAgIDwvcGFyYT48L2VudHJ5PgorICAgICAgPC9yb3c+CiAgICAg IDwvdGJvZHk+CiAgICAgPC90Z3JvdXA+CiAgICA8L3RhYmxlPgogCisgICA8cGFyYT4KKyAgICA8 ZnVuY3Rpb24+cGdfd2FpdF9sc248L2Z1bmN0aW9uPiB3YWl0cyB0aWxsIDxwYXJhbWV0ZXI+d2Fp dF9sc248L3BhcmFtZXRlcj4KKyAgICB0byBiZSByZXBsYXllZCBvbiBzdGFuZGJ5IHRvIGFjaGll dmUgcmVhZC15b3VyLXdyaXRlcy1jb25zaXN0ZW5jeSwgd2hpbGUKKyAgICB1c2luZyBhc3luYyBy ZXBsaWNhIGZvciByZWFkcyBhbmQgcHJpbWFyeSBmb3Igd3JpdGVzLiBJbiB0aGF0IGNhc2UgbHNu IG9mCisgICAgbGFzdCBtb2RpZmljYXRpb24gaXMgc3RvcmVkIGluc2lkZSBhcHBsaWNhdGlvbi4K KyAgIDwvcGFyYT4KKworICAgPHBhcmE+CisgICAgWW91IGNhbiB1c2UgPGZ1bmN0aW9uPnBnX3dh aXRfbHNuPC9mdW5jdGlvbj4gdG8gd2FpdCB0aGUgPHR5cGU+cGdfbHNuPC90eXBlPgorICAgIHZh bHVlLiBGb3IgZXhhbXBsZToKKyAgIDxwcm9ncmFtbGlzdGluZz4KKyAgIFJlcGxpY2E6CisgICBw b3N0Z3Jlc3FsLmNvbmYKKyAgICAgcmVjb3ZlcnlfbWluX2FwcGx5X2RlbGF5ID0gMTBzOworCisg ICBQcmltYXJ5OiBBcHBsaWNhdGlvbiB1cGRhdGUgdGFibGUgYW5kIGdldCBsc24gb2YgY2hhbmdl cworICAgcG9zdGdyZXM9IyBVUERBVEUgZmlsbXMgU0VUIGtpbmQgPSAnRHJhbWF0aWMnIFdIRVJF IGtpbmQgPSAnRHJhbWEnOworICAgcG9zdGdyZXM9IyBTRUxFQ1QgcGdfY3VycmVudF93YWxfbHNu KCk7CisgICBwZ19jdXJyZW50X3dhbF9sc24KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAw LzMwNkVFMjAKKyAgICgxIHJvdykKKworICAgUmVwbGljYTogV2FpdCBhbmQgcmVhZCB1cGRhdGVk IGRhdGEKKyAgIHBvc3RncmVzPSMgQ0FMTCBwZ193YWl0X2xzbignMC8zMDZFRTIwJywgMTAwKTsg Ly8gVGltZW91dCAxMDBtcyBpcyBpbnN1ZmZpY2VudAorICAgRVJST1I6ICBjYW5jZWxpbmcgd2Fp dGluZyBmb3IgTFNOIGR1ZSB0byB0aW1lb3V0CisgICBwb3N0Z3Jlcz0jIENBTEwgcGdfd2FpdF9s c24oJzAvMzA2RUUyMCcpOworICAgcG9zdGdyZXM9IyBTRUxFQ1QgKiBGUk9NIGZpbG1zIFdIRVJF IGtpbmQgPSAnRHJhbWEnOworICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgIDwvcGFyYT4KKwogICAg PHBhcmE+CiAgICAgVGhlIGZ1bmN0aW9ucyBzaG93biBpbiA8eHJlZgogICAgIGxpbmtlbmQ9ImZ1 bmN0aW9ucy1yZWNvdmVyeS1jb250cm9sLXRhYmxlIi8+IGNvbnRyb2wgdGhlIHByb2dyZXNzIG9m IHJlY292ZXJ5LgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ3Jl Y292ZXJ5LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ncmVjb3ZlcnkuYwppbmRl eCAyOWM1YmVjMDg0Li4wYjc4M2RjNzMzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mv dHJhbnNhbS94bG9ncmVjb3ZlcnkuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94 bG9ncmVjb3ZlcnkuYwpAQCAtNDMsNiArNDMsNyBAQAogI2luY2x1ZGUgImJhY2t1cC9iYXNlYmFj a3VwLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19jb250cm9sLmgiCiAjaW5jbHVkZSAiY29tbWFu ZHMvdGFibGVzcGFjZS5oIgorI2luY2x1ZGUgImNvbW1hbmRzL3dhaXRsc24uaCIKICNpbmNsdWRl ICJjb21tb24vZmlsZV91dGlscy5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUg InBnc3RhdC5oIgpAQCAtMTgyOCw2ICsxODI5LDE0IEBAIFBlcmZvcm1XYWxSZWNvdmVyeSh2b2lk KQogCQkJCWJyZWFrOwogCQkJfQogCisJCQkvKgorCQkJICogSWYgd2UgcmVwbGF5ZWQgYW4gTFNO IHRoYXQgc29tZW9uZSB3YXMgd2FpdGluZyBmb3IsIHNldCBsYXRjaGVzCisJCQkgKiBpbiBzaGFy ZWQgbWVtb3J5IGFycmF5IHRvIG5vdGlmeSB0aGUgd2FpdGVyLgorCQkJICovCisJCQlpZiAod2Fp dExTTiAmJgorCQkJCShYTG9nUmVjb3ZlcnlDdGwtPmxhc3RSZXBsYXllZEVuZFJlY1B0ciA+PSBw Z19hdG9taWNfcmVhZF91NjQoJndhaXRMU04tPm1pbkxTTikpKQorCQkJCVdhaXRMU05TZXRMYXRj aGVzKFhMb2dSZWNvdmVyeUN0bC0+bGFzdFJlcGxheWVkRW5kUmVjUHRyKTsKKwogCQkJLyogRWxz ZSwgdHJ5IHRvIGZldGNoIHRoZSBuZXh0IFdBTCByZWNvcmQgKi8KIAkJCXJlY29yZCA9IFJlYWRS ZWNvcmQoeGxvZ3ByZWZldGNoZXIsIExPRywgZmFsc2UsIHJlcGxheVRMSSk7CiAJCX0gd2hpbGUg KHJlY29yZCAhPSBOVUxMKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVt X2Z1bmN0aW9ucy5zcWwgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3N5c3RlbV9mdW5jdGlvbnMuc3Fs CmluZGV4IGZlMmJiNTBmNDYuLjVjNGY5Yzc4YTEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Nh dGFsb2cvc3lzdGVtX2Z1bmN0aW9ucy5zcWwKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0 ZW1fZnVuY3Rpb25zLnNxbApAQCAtNDE0LDYgKzQxNCw5IEBAIENSRUFURSBPUiBSRVBMQUNFIEZV TkNUSU9OCiAgIGpzb25fcG9wdWxhdGVfcmVjb3Jkc2V0KGJhc2UgYW55ZWxlbWVudCwgZnJvbV9q c29uIGpzb24sIHVzZV9qc29uX2FzX3RleHQgYm9vbGVhbiBERUZBVUxUIGZhbHNlKQogICBSRVRV Uk5TIFNFVE9GIGFueWVsZW1lbnQgTEFOR1VBR0UgaW50ZXJuYWwgU1RBQkxFIFJPV1MgMTAwICBB UyAnanNvbl9wb3B1bGF0ZV9yZWNvcmRzZXQnIFBBUkFMTEVMIFNBRkU7CiAKK0NSRUFURSBPUiBS RVBMQUNFIFBST0NFRFVSRSBwZ193YWl0X2xzbih0cmdfbHNuIHBnX2xzbiwgZGVsYXkgZmxvYXQ4 IERFRkFVTFQgMCkKKyAgTEFOR1VBR0UgaW50ZXJuYWwgQVMgJ3BnX3dhaXRfbHNuJzsKKwogQ1JF QVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04gcGdfbG9naWNhbF9zbG90X2dldF9jaGFuZ2VzKAogICAg IElOIHNsb3RfbmFtZSBuYW1lLCBJTiB1cHRvX2xzbiBwZ19sc24sIElOIHVwdG9fbmNoYW5nZXMg aW50LCBWQVJJQURJQyBvcHRpb25zIHRleHRbXSBERUZBVUxUICd7fScsCiAgICAgT1VUIGxzbiBw Z19sc24sIE9VVCB4aWQgeGlkLCBPVVQgZGF0YSB0ZXh0KQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvY29tbWFuZHMvTWFrZWZpbGUgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9NYWtlZmlsZQppbmRl eCA0OGY3MzQ4ZjkxLi5jZWRlOTBjM2I5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5k cy9NYWtlZmlsZQorKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9NYWtlZmlsZQpAQCAtNjEsNiAr NjEsNyBAQCBPQkpTID0gXAogCXZhY3V1bS5vIFwKIAl2YWN1dW1wYXJhbGxlbC5vIFwKIAl2YXJp YWJsZS5vIFwKLQl2aWV3Lm8KKwl2aWV3Lm8gXAorCXdhaXRsc24ubwogCiBpbmNsdWRlICQodG9w X3NyY2Rpcikvc3JjL2JhY2tlbmQvY29tbW9uLm1rCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9j b21tYW5kcy9tZXNvbi5idWlsZCBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL21lc29uLmJ1aWxkCmlu ZGV4IDZkZDAwYTRhYmQuLjc1NDliZTVkYzMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1h bmRzL21lc29uLmJ1aWxkCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL21lc29uLmJ1aWxkCkBA IC01MCw0ICs1MCw1IEBAIGJhY2tlbmRfc291cmNlcyArPSBmaWxlcygKICAgJ3ZhY3V1bXBhcmFs bGVsLmMnLAogICAndmFyaWFibGUuYycsCiAgICd2aWV3LmMnLAorICAnd2FpdGxzbi5jJywKICkK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3dhaXRsc24uYyBiL3NyYy9iYWNrZW5k L2NvbW1hbmRzL3dhaXRsc24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw Li5iZDllYTZiN2RiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvd2Fp dGxzbi5jCkBAIC0wLDAgKzEsMzAzIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiB3YWl0 bHNuLmMKKyAqCSAgSW1wbGVtZW50cyB3YWl0aW5nIGZvciB0aGUgZ2l2ZW4gTFNOLCB3aGljaCBp cyB1c2VkIGluCisgKgkgIENBTEwgcGdfd2FpdF9sc24od2FpdF9sc24gcGdfbHNuLCB0aW1lb3V0 IGludCkuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDI0LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZl bG9wbWVudCBHcm91cAorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNyYy9iYWNrZW5kL2Nv bW1hbmRzL3dhaXRsc24uYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpbmNsdWRl ICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSA8ZmxvYXQuaD4KKyNpbmNsdWRlIDxtYXRoLmg+CisK KyNpbmNsdWRlICJwZ3N0YXQuaCIKKyNpbmNsdWRlICJmbWdyLmgiCisjaW5jbHVkZSAiYWNjZXNz L3RyYW5zYW0uaCIKKyNpbmNsdWRlICJhY2Nlc3MveGFjdC5oIgorI2luY2x1ZGUgImFjY2Vzcy94 bG9nLmgiCisjaW5jbHVkZSAiYWNjZXNzL3hsb2dkZWZzLmgiCisjaW5jbHVkZSAiYWNjZXNzL3hs b2dyZWNvdmVyeS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfdHlwZS5oIgorI2luY2x1ZGUgImNv bW1hbmRzL3dhaXRsc24uaCIKKyNpbmNsdWRlICJleGVjdXRvci9zcGkuaCIKKyNpbmNsdWRlICJm dW5jYXBpLmgiCisjaW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5jbHVkZSAic3RvcmFnZS9pcGMu aCIKKyNpbmNsdWRlICJzdG9yYWdlL2xhdGNoLmgiCisjaW5jbHVkZSAic3RvcmFnZS9wbXNpZ25h bC5oIgorI2luY2x1ZGUgInN0b3JhZ2UvcHJvYy5oIgorI2luY2x1ZGUgInN0b3JhZ2Uvc2htZW0u aCIKKyNpbmNsdWRlICJzdG9yYWdlL3NpbnZhbGFkdC5oIgorI2luY2x1ZGUgInV0aWxzL2J1aWx0 aW5zLmgiCisjaW5jbHVkZSAidXRpbHMvcGdfbHNuLmgiCisjaW5jbHVkZSAidXRpbHMvc25hcG1n ci5oIgorI2luY2x1ZGUgInV0aWxzL3RpbWVzdGFtcC5oIgorI2luY2x1ZGUgInV0aWxzL2ZtZ3Jw cm90b3MuaCIKKworLyogQWRkIHRvIC8gZGVsZXRlIGZyb20gc2hhcmVkIG1lbW9yeSBhcnJheSAq Lworc3RhdGljIHZvaWQgYWRkTFNOV2FpdGVyKFhMb2dSZWNQdHIgbHNuKTsKK3N0YXRpYyB2b2lk IGRlbGV0ZUxTTldhaXRlcih2b2lkKTsKKworc3RydWN0IFdhaXRMU05TdGF0ZSAqd2FpdExTTiA9 IE5VTEw7CitzdGF0aWMgdm9sYXRpbGUgc2lnX2F0b21pY190IGhhdmVTaG1lbUl0ZW0gPSBmYWxz ZTsKKworLyoKKyAqIFJlcG9ydCB0aGUgYW1vdW50IG9mIHNoYXJlZCBtZW1vcnkgc3BhY2UgbmVl ZGVkIGZvciBXYWl0TFNOU3RhdGUKKyAqLworU2l6ZQorV2FpdExTTlNobWVtU2l6ZSh2b2lkKQor eworCVNpemUJCXNpemU7CisKKwlzaXplID0gb2Zmc2V0b2YoV2FpdExTTlN0YXRlLCBwcm9jSW5m b3MpOworCXNpemUgPSBhZGRfc2l6ZShzaXplLCBtdWxfc2l6ZShNYXhCYWNrZW5kcywgc2l6ZW9m KFdhaXRMU05Qcm9jSW5mbykpKTsKKwlyZXR1cm4gc2l6ZTsKK30KKworLyogSW5pdGlhbGl6ZSB0 aGUgV2FpdExTTlN0YXRlIGluIHRoZSBzaGFyZWQgbWVtb3J5ICovCit2b2lkCitXYWl0TFNOU2ht ZW1Jbml0KHZvaWQpCit7CisJYm9vbAkJZm91bmQ7CisKKwl3YWl0TFNOID0gKFdhaXRMU05TdGF0 ZSAqKSBTaG1lbUluaXRTdHJ1Y3QoIldhaXRMU05TdGF0ZSIsCisJCQkJCQkJCQkJCSAgIFdhaXRM U05TaG1lbVNpemUoKSwKKwkJCQkJCQkJCQkJICAgJmZvdW5kKTsKKwlpZiAoIWZvdW5kKQorCXsK KwkJU3BpbkxvY2tJbml0KCZ3YWl0TFNOLT5tdXRleCk7CisJCXdhaXRMU04tPm51bVdhaXRlZFBy b2NzID0gMDsKKwkJcGdfYXRvbWljX2luaXRfdTY0KCZ3YWl0TFNOLT5taW5MU04sIFBHX1VJTlQ2 NF9NQVgpOworCX0KK30KKworLyoKKyAqIEFkZCB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIExT TiB3YWl0ZXIgYmFja2VuZCB0byB0aGUgc2hhcmVkIG1lbW9yeQorICogYXJyYXkuCisgKi8KK3N0 YXRpYyB2b2lkCithZGRMU05XYWl0ZXIoWExvZ1JlY1B0ciBsc24pCit7CisJV2FpdExTTlByb2NJ bmZvIGN1cjsKKwlpbnQJCQlpOworCisJU3BpbkxvY2tBY3F1aXJlKCZ3YWl0TFNOLT5tdXRleCk7 CisKKwljdXIucHJvY251bSA9IE15UHJvY051bWJlcjsKKwljdXIud2FpdExTTiA9IGxzbjsKKwor CWZvciAoaSA9IDA7IGkgPCB3YWl0TFNOLT5udW1XYWl0ZWRQcm9jczsgaSsrKQorCXsKKwkJaWYg KHdhaXRMU04tPnByb2NJbmZvc1tpXS53YWl0TFNOID49IGN1ci53YWl0TFNOKQorCQl7CisJCQlX YWl0TFNOUHJvY0luZm8gdG1wOworCisJCQl0bXAgPSB3YWl0TFNOLT5wcm9jSW5mb3NbaV07CisJ CQl3YWl0TFNOLT5wcm9jSW5mb3NbaV0gPSBjdXI7CisJCQljdXIgPSB0bXA7CisJCX0KKwl9CisJ d2FpdExTTi0+cHJvY0luZm9zW2ldID0gY3VyOworCXdhaXRMU04tPm51bVdhaXRlZFByb2NzKys7 CisKKwlwZ19hdG9taWNfd3JpdGVfdTY0KCZ3YWl0TFNOLT5taW5MU04sIHdhaXRMU04tPnByb2NJ bmZvc1tpXS53YWl0TFNOKTsKKwlTcGluTG9ja1JlbGVhc2UoJndhaXRMU04tPm11dGV4KTsKK30K KworLyoKKyAqIERlbGV0ZSB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIExTTiB3YWl0ZXIgYmFj a2VuZCBmcm9tIHRoZSBzaGFyZWQgbWVtb3J5CisgKiBhcnJheS4KKyAqLworc3RhdGljIHZvaWQK K2RlbGV0ZUxTTldhaXRlcih2b2lkKQoreworCWludAkJCWk7CisJYm9vbAkJZm91bmQgPSBmYWxz ZTsKKworCVNwaW5Mb2NrQWNxdWlyZSgmd2FpdExTTi0+bXV0ZXgpOworCisJZm9yIChpID0gMDsg aSA8IHdhaXRMU04tPm51bVdhaXRlZFByb2NzOyBpKyspCisJeworCQlpZiAod2FpdExTTi0+cHJv Y0luZm9zW2ldLnByb2NudW0gPT0gTXlQcm9jTnVtYmVyKQorCQkJZm91bmQgPSB0cnVlOworCisJ CWlmIChmb3VuZCAmJiBpIDwgd2FpdExTTi0+bnVtV2FpdGVkUHJvY3MgLSAxKQorCQl7CisJCQl3 YWl0TFNOLT5wcm9jSW5mb3NbaV0gPSB3YWl0TFNOLT5wcm9jSW5mb3NbaSArIDFdOworCQl9CisJ fQorCisJaWYgKCFmb3VuZCkKKwl7CisJCVNwaW5Mb2NrUmVsZWFzZSgmd2FpdExTTi0+bXV0ZXgp OworCQlyZXR1cm47CisJfQorCXdhaXRMU04tPm51bVdhaXRlZFByb2NzLS07CisKKwlpZiAod2Fp dExTTi0+bnVtV2FpdGVkUHJvY3MgIT0gMCkKKwkJcGdfYXRvbWljX3dyaXRlX3U2NCgmd2FpdExT Ti0+bWluTFNOLCB3YWl0TFNOLT5wcm9jSW5mb3NbaV0ud2FpdExTTik7CisJZWxzZQorCQlwZ19h dG9taWNfd3JpdGVfdTY0KCZ3YWl0TFNOLT5taW5MU04sIFBHX1VJTlQ2NF9NQVgpOworCisJU3Bp bkxvY2tSZWxlYXNlKCZ3YWl0TFNOLT5tdXRleCk7Cit9CisKKy8qCisgKiBTZXQgYWxsIGxhdGNo ZXMgaW4gc2hhcmVkIG1lbW9yeSB0byBzaWduYWwgdGhhdCBuZXcgTFNOIGhhcyBiZWVuIHJlcGxh eWVkCisqLwordm9pZAorV2FpdExTTlNldExhdGNoZXMoWExvZ1JlY1B0ciBjdXJMU04pCit7CisJ dWludDMyCQlpLAorCQkJCW51bVdha2VVcFByb2NzOworCisJU3BpbkxvY2tBY3F1aXJlKCZ3YWl0 TFNOLT5tdXRleCk7CisKKwkvKgorCSAqIFNldCBsYXRjaGVzIGZvciBwcm9jZXNzLCB3aG9zZSB3 YWl0ZWQgTFNOcyBhcmUgYWxyZWFkeSByZXBsYXllZC4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwg d2FpdExTTi0+bnVtV2FpdGVkUHJvY3M7IGkrKykKKwl7CisJCVBHUFJPQwkgICAqYmFja2VuZDsK KworCQlpZiAod2FpdExTTi0+cHJvY0luZm9zW2ldLndhaXRMU04gPiBjdXJMU04pCisJCQlicmVh azsKKworCQliYWNrZW5kID0gR2V0UEdQcm9jQnlOdW1iZXIod2FpdExTTi0+cHJvY0luZm9zW2ld LnByb2NudW0pOworCQlTZXRMYXRjaCgmYmFja2VuZC0+cHJvY0xhdGNoKTsKKwl9CisKKwkvKgor CSAqIEltbWVkaWF0ZWx5IHJlbW92ZSB0aG9zZSBwcm9jZXNzZXMgZnJvbSB0aGUgc2htZW0gYXJy YXkuICBPdGhlcndpc2UsCisJICogc2htZW0gYXJyYXkgaXRlbXMgd2lsbCBiZSBoZXJlIHRpbGwg Y29ycmVzcG9uZGluZyBwcm9jZXNzZXMgd2FrZSB1cCBhbmQKKwkgKiBkZWxldGUgdGhlbXNlbHZl cy4KKwkgKi8KKwludW1XYWtlVXBQcm9jcyA9IGk7CisJZm9yIChpID0gMDsgaSA8IHdhaXRMU04t Pm51bVdhaXRlZFByb2NzIC0gbnVtV2FrZVVwUHJvY3M7IGkrKykKKwkJd2FpdExTTi0+cHJvY0lu Zm9zW2ldID0gd2FpdExTTi0+cHJvY0luZm9zW2kgKyBudW1XYWtlVXBQcm9jc107CisJd2FpdExT Ti0+bnVtV2FpdGVkUHJvY3MgLT0gbnVtV2FrZVVwUHJvY3M7CisKKwlpZiAod2FpdExTTi0+bnVt V2FpdGVkUHJvY3MgIT0gMCkKKwkJcGdfYXRvbWljX3dyaXRlX3U2NCgmd2FpdExTTi0+bWluTFNO LCB3YWl0TFNOLT5wcm9jSW5mb3NbaV0ud2FpdExTTik7CisJZWxzZQorCQlwZ19hdG9taWNfd3Jp dGVfdTY0KCZ3YWl0TFNOLT5taW5MU04sIFBHX1VJTlQ2NF9NQVgpOworCisJU3BpbkxvY2tSZWxl YXNlKCZ3YWl0TFNOLT5tdXRleCk7Cit9CisKKy8qCisgKiBEZWxldGUgb3VyIGl0ZW0gZnJvbSBz aG1lbSBhcnJheSBpZiBhbnkuCisgKi8KK3ZvaWQKK1dhaXRMU05DbGVhbnVwKHZvaWQpCit7CisJ aWYgKGhhdmVTaG1lbUl0ZW0pCisJCWRlbGV0ZUxTTldhaXRlcigpOworfQorCisvKgorICogV2Fp dCB1c2luZyBNeUxhdGNoIHRvIHdhaXQgdGlsbCB0aGUgZ2l2ZW4gTFNOIGlzIHJlcGxheWVkLCB0 aGUgcG9zdG1hc3RlciBkaWVzIG9yCisgKiB0aW1lb3V0IGhhcHBlbnMuCisgKi8KK3ZvaWQKK1dh aXRGb3JMU04oWExvZ1JlY1B0ciBsc24sIGZsb2F0OCBzZWMpCit7CisJWExvZ1JlY1B0cgljdXJM U047CisJaW50CQkJbGF0Y2hfZXZlbnRzOworCVRpbWVzdGFtcFR6IGVuZHRpbWU7CisKKwkvKiBT aG91bGRuJ3QgYmUgY2FsbGVkIHdoZW4gc2htZW0gaXNuJ3QgaW5pdGlhbGl6ZWQgKi8KKwlBc3Nl cnQod2FpdExTTik7CisKKwkvKiBTaG91bGQgYmUgb25seSBjYWxsZWQgYnkgYSBiYWNrZW5kICov CisJQXNzZXJ0KE15QmFja2VuZFR5cGUgPT0gQl9CQUNLRU5EKTsKKworCWlmICghUmVjb3ZlcnlJ blByb2dyZXNzKCkpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9PQkpF Q1RfTk9UX0lOX1BSRVJFUVVJU0lURV9TVEFURSksCisJCQkJIGVycm1zZygicmVjb3ZlcnkgaXMg bm90IGluIHByb2dyZXNzIiksCisJCQkJIGVycmhpbnQoIldhaXRpbmcgZm9yIExTTiBjYW4gb25s eSBiZSBleGVjdXRlZCBkdXJpbmcgcmVjb3ZlcnkuIikpKTsKKworCWVuZHRpbWUgPSBHZXRDdXJy ZW50VGltZXN0YW1wKCkgKyAoaW50NjQpKHNlYyAqIDEwMDAgKiAxMDAwKTsKKworCWxhdGNoX2V2 ZW50cyA9IFdMX1RJTUVPVVQgfCBXTF9MQVRDSF9TRVQgfCBXTF9FWElUX09OX1BNX0RFQVRIOwor CWFkZExTTldhaXRlcihsc24pOworCWhhdmVTaG1lbUl0ZW0gPSB0cnVlOworCisJZm9yICg7OykK Kwl7CisJCWludAkJCXJjOworCQlsb25nCQlkZWxheV9tczsKKworCQkvKiBDaGVjayBpZiB0aGUg d2FpdGVkIExTTiBoYXMgYmVlbiByZXBsYXllZCAqLworCQljdXJMU04gPSBHZXRYTG9nUmVwbGF5 UmVjUHRyKE5VTEwpOworCQlpZiAobHNuIDw9IGN1ckxTTikKKwkJCWJyZWFrOworCisJCWlmIChz ZWMgPj0gMSkKKwkJCWRlbGF5X21zID0gKGVuZHRpbWUgLSBHZXRDdXJyZW50VGltZXN0YW1wKCkp IC8gMTAwMDsKKwkJZWxzZQorCQkJLyogSWYgbm8gdGltZW91dCBpcyBzZXQgdGhlbiB3YWtlIHVw IGluIDEgbWludXRlIGZvciBpbnRlcnJ1cHRzICovCisJCQlkZWxheV9tcyA9IDYwMDAwOworCisJ CWlmIChkZWxheV9tcyA8PSAwKQorCQkJYnJlYWs7CisKKwkJLyoKKwkJICogSWYgcmVjZWl2ZWQg YW4gaW50ZXJydXB0aW9uIGZyb20gQ0hFQ0tfRk9SX0lOVEVSUlVQVFMsIHRoZW4gZGVsZXRlCisJ CSAqIHRoZSBjdXJyZW50IGV2ZW50IGZyb20gYXJyYXkuCisJCSAqLworCQlDSEVDS19GT1JfSU5U RVJSVVBUUygpOworCisJCS8qIElmIHBvc3RtYXN0ZXIgZGllcywgZmluaXNoIGltbWVkaWF0ZWx5 ICovCisJCWlmICghUG9zdG1hc3RlcklzQWxpdmUoKSkKKwkJCWJyZWFrOworCisJCXJjID0gV2Fp dExhdGNoKE15TGF0Y2gsIGxhdGNoX2V2ZW50cywgZGVsYXlfbXMsCisJCQkJCSAgIFdBSVRfRVZF TlRfV0FJVF9GT1JfU1RBTkRCWV9DT05GSVJNQVRJT04pOworCisJCWlmIChyYyAmIFdMX0xBVENI X1NFVCkKKwkJCVJlc2V0TGF0Y2goTXlMYXRjaCk7CisJfQorCisJaWYgKGxzbiA+IGN1ckxTTikK Kwl7CisJCWRlbGV0ZUxTTldhaXRlcigpOworCQloYXZlU2htZW1JdGVtID0gZmFsc2U7CisJCWVy ZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9RVUVSWV9DQU5DRUxFRCksCisJCQkJ IGVycm1zZygiY2FuY2VsaW5nIHdhaXRpbmcgZm9yIExTTiBkdWUgdG8gdGltZW91dCIpKSk7CisJ fQorCWVsc2UKKwl7CisJCWhhdmVTaG1lbUl0ZW0gPSBmYWxzZTsKKwl9Cit9CisKK0RhdHVtCitw Z193YWl0X2xzbihQR19GVU5DVElPTl9BUkdTKQoreworCVhMb2dSZWNQdHIJdHJnX2xzbiA9IFBH X0dFVEFSR19MU04oMCk7CisJZmxvYXQ4CQlkZWxheSA9IFBHX0dFVEFSR19GTE9BVDgoMSk7CisJ Q2FsbENvbnRleHQgKmNvbnRleHQgPSAoQ2FsbENvbnRleHQgKikgZmNpbmZvLT5jb250ZXh0Owor CisJaWYgKGNvbnRleHQtPmF0b21pYykKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShF UlJDT0RFX09CSkVDVF9OT1RfSU5fUFJFUkVRVUlTSVRFX1NUQVRFKSwKKwkJCQkgZXJybXNnKCJw Z193YWl0X2xzbigpIG11c3QgYmUgb25seSBjYWxsZWQgaW4gbm9uLWF0b21pYyBjb250ZXh0Iikp KTsKKworCWlmIChBY3RpdmVTbmFwc2hvdFNldCgpKQorCQlQb3BBY3RpdmVTbmFwc2hvdCgpOwor CUFzc2VydCghQWN0aXZlU25hcHNob3RTZXQoKSk7CisKKwkodm9pZCkgV2FpdEZvckxTTih0cmdf bHNuLCBkZWxheSk7CisKKwlQR19SRVRVUk5fVk9JRCgpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5j CmluZGV4IDUyMWVkNTQxOGMuLjVhZWQ5MGM5MzUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0 b3JhZ2UvaXBjL2lwY2kuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9pcGNpLmMKQEAg LTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlICJhY2Nlc3MveGxvZ3ByZWZldGNoZXIuaCIKICNpbmNs dWRlICJhY2Nlc3MveGxvZ3JlY292ZXJ5LmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvYXN5bmMuaCIK KyNpbmNsdWRlICJjb21tYW5kcy93YWl0bHNuLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAj aW5jbHVkZSAicGdzdGF0LmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci9hdXRvdmFjdXVtLmgiCkBA IC0xNTIsNiArMTUzLDcgQEAgQ2FsY3VsYXRlU2htZW1TaXplKGludCAqbnVtX3NlbWFwaG9yZXMp CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIFdhaXRFdmVudEV4dGVuc2lvblNobWVtU2l6ZSgpKTsK IAlzaXplID0gYWRkX3NpemUoc2l6ZSwgSW5qZWN0aW9uUG9pbnRTaG1lbVNpemUoKSk7CiAJc2l6 ZSA9IGFkZF9zaXplKHNpemUsIFNsb3RTeW5jU2htZW1TaXplKCkpOworCXNpemUgPSBhZGRfc2l6 ZShzaXplLCBXYWl0TFNOU2htZW1TaXplKCkpOwogI2lmZGVmIEVYRUNfQkFDS0VORAogCXNpemUg PSBhZGRfc2l6ZShzaXplLCBTaG1lbUJhY2tlbmRBcnJheVNpemUoKSk7CiAjZW5kaWYKQEAgLTI0 NCw2ICsyNDYsMTEgQEAgQ3JlYXRlU2hhcmVkTWVtb3J5QW5kU2VtYXBob3Jlcyh2b2lkKQogCS8q IEluaXRpYWxpemUgc3Vic3lzdGVtcyAqLwogCUNyZWF0ZU9yQXR0YWNoU2htZW1TdHJ1Y3RzKCk7 CiAKKwkvKgorCSAqIEluaXQgYXJyYXkgb2YgTGF0Y2hlcyBpbiBzaGFyZWQgbWVtb3J5IGZvciB3 YWl0IGxzbgorCSAqLworCVdhaXRMU05TaG1lbUluaXQoKTsKKwogI2lmZGVmIEVYRUNfQkFDS0VO RAogCiAJLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMgYi9z cmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJvYy5jCmluZGV4IDE2MmIxZjkxOWQuLjRiODMwZGMz YzggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMKKysrIGIvc3Jj L2JhY2tlbmQvc3RvcmFnZS9sbWdyL3Byb2MuYwpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUg ImFjY2Vzcy90cmFuc2FtLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3R3b3BoYXNlLmgiCiAjaW5jbHVk ZSAiYWNjZXNzL3hsb2d1dGlscy5oIgorI2luY2x1ZGUgImNvbW1hbmRzL3dhaXRsc24uaCIKICNp bmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKICNpbmNsdWRlICJwb3N0 bWFzdGVyL2F1dG92YWN1dW0uaCIKQEAgLTg2Miw2ICs4NjMsMTEgQEAgUHJvY0tpbGwoaW50IGNv ZGUsIERhdHVtIGFyZykKIAkgKi8KIAlMV0xvY2tSZWxlYXNlQWxsKCk7CiAKKwkvKgorCSAqIENs ZWFudXAgd2FpdGluZyBmb3IgTFNOIGlmIGFueS4KKwkgKi8KKwlXYWl0TFNOQ2xlYW51cCgpOwor CiAJLyogQ2FuY2VsIGFueSBwZW5kaW5nIGNvbmRpdGlvbiB2YXJpYWJsZSBzbGVlcCwgdG9vICov CiAJQ29uZGl0aW9uVmFyaWFibGVDYW5jZWxTbGVlcCgpOwogCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRh dAppbmRleCAxNzdkODFhODkxLi4wZDljMDEyZTUyIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9j YXRhbG9nL3BnX3Byb2MuZGF0CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQK QEAgLTEyMTM1LDYgKzEyMTM1LDExIEBACiAgIHByb3JldHR5cGUgPT4gJ2J5dGVhJywgcHJvYXJn dHlwZXMgPT4gJ3BnX2JyaW5fbWlubWF4X211bHRpX3N1bW1hcnknLAogICBwcm9zcmMgPT4gJ2Jy aW5fbWlubWF4X211bHRpX3N1bW1hcnlfc2VuZCcgfSwKIAoreyBvaWQgPT4gJzE2Mzg3JywgZGVz Y3IgPT4gJ3dhaXQgZm9yIExTTiB1bnRpbCB0aW1lb3V0JywKKyAgcHJvbmFtZSA9PiAncGdfd2Fp dF9sc24nLCBwcm9raW5kID0+ICdwJywgcHJvcmV0dHlwZSA9PiAndm9pZCcsCisgIHByb2FyZ3R5 cGVzID0+ICdwZ19sc24gZmxvYXQ4JywgcHJvYXJnbmFtZXMgPT4gJ3t0cmdfbHNuLGRlbGF5fScs CisgIHByb3NyYyA9PiAncGdfd2FpdF9sc24nIH0sCisKIHsgb2lkID0+ICc2MjkxJywgZGVzY3Ig PT4gJ2FyYml0cmFyeSB2YWx1ZSBmcm9tIGFtb25nIGlucHV0IHZhbHVlcycsCiAgIHByb25hbWUg PT4gJ2FueV92YWx1ZScsIHByb2tpbmQgPT4gJ2EnLCBwcm9pc3N0cmljdCA9PiAnZicsCiAgIHBy b3JldHR5cGUgPT4gJ2FueWVsZW1lbnQnLCBwcm9hcmd0eXBlcyA9PiAnYW55ZWxlbWVudCcsCmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jb21tYW5kcy93YWl0bHNuLmggYi9zcmMvaW5jbHVkZS9j b21tYW5kcy93YWl0bHNuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4u NTNhYjliN2I2YgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3dhaXRs c24uaApAQCAtMCwwICsxLDQzIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiB3YWl0bHNu LmgKKyAqCSAgRGVjbGFyYXRpb25zIGZvciBMU04gd2FpdGluZyByb3V0aW5lcy4KKyAqCisgKiBD b3B5cmlnaHQgKGMpIDIwMjQsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisg KgorICogc3JjL2luY2x1ZGUvY29tbWFuZHMvd2FpdGxzbi5oCisgKgorICotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgKi8KKyNpZm5kZWYgV0FJVF9MU05fSAorI2RlZmluZSBXQUlUX0xTTl9ICisKKyNpbmNs dWRlICJwb3N0Z3Jlcy5oIgorI2luY2x1ZGUgInBvcnQvYXRvbWljcy5oIgorI2luY2x1ZGUgInN0 b3JhZ2Uvc3Bpbi5oIgorI2luY2x1ZGUgInRjb3AvZGVzdC5oIgorCisvKiBTaGFyZWQgbWVtb3J5 IHN0cnVjdHVyZSAqLwordHlwZWRlZiBzdHJ1Y3QgV2FpdExTTlByb2NJbmZvCit7CisJaW50CQkJ cHJvY251bTsKKwlYTG9nUmVjUHRyCXdhaXRMU047Cit9CQkJV2FpdExTTlByb2NJbmZvOworCit0 eXBlZGVmIHN0cnVjdCBXYWl0TFNOU3RhdGUKK3sKKwlwZ19hdG9taWNfdWludDY0IG1pbkxTTjsK KwlzbG9ja190CQltdXRleDsKKwlpbnQJCQludW1XYWl0ZWRQcm9jczsKKwlXYWl0TFNOUHJvY0lu Zm8gcHJvY0luZm9zW0ZMRVhJQkxFX0FSUkFZX01FTUJFUl07Cit9CQkJV2FpdExTTlN0YXRlOwor CitleHRlcm4gUEdETExJTVBPUlQgc3RydWN0IFdhaXRMU05TdGF0ZSAqd2FpdExTTjsKKworZXh0 ZXJuIHZvaWQgV2FpdEZvckxTTihYTG9nUmVjUHRyIGxzbiwgZmxvYXQ4IHNlYyk7CitleHRlcm4g U2l6ZSBXYWl0TFNOU2htZW1TaXplKHZvaWQpOworZXh0ZXJuIHZvaWQgV2FpdExTTlNobWVtSW5p dCh2b2lkKTsKK2V4dGVybiB2b2lkIFdhaXRMU05TZXRMYXRjaGVzKFhMb2dSZWNQdHIgY3VyTFNO KTsKK2V4dGVybiB2b2lkIFdhaXRMU05DbGVhbnVwKHZvaWQpOworCisjZW5kaWYJCQkJCQkJLyog V0FJVF9MU05fSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVjb3ZlcnkvbWVzb24uYnVpbGQg Yi9zcmMvdGVzdC9yZWNvdmVyeS9tZXNvbi5idWlsZAppbmRleCBiMWViNzdiMWVjLi5iYzQ3Yzkz OTAyIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWNvdmVyeS9tZXNvbi5idWlsZAorKysgYi9zcmMv dGVzdC9yZWNvdmVyeS9tZXNvbi5idWlsZApAQCAtNTEsNiArNTEsNyBAQCB0ZXN0cyArPSB7CiAg ICAgICAndC8wNDBfc3RhbmRieV9mYWlsb3Zlcl9zbG90c19zeW5jLnBsJywKICAgICAgICd0LzA0 MV9jaGVja3BvaW50X2F0X3Byb21vdGUucGwnLAogICAgICAgJ3QvMDQyX2xvd19sZXZlbF9iYWNr dXAucGwnLAorICAgICAgJ3QvMDQzX3dhaXRfbHNuLnBsJywKICAgICBdLAogICB9LAogfQpkaWZm IC0tZ2l0IGEvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wNDNfd2FpdF9sc24ucGwgYi9zcmMvdGVzdC9y ZWNvdmVyeS90LzA0M193YWl0X2xzbi5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwLi4xODc1NzAyYzkzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvcmVjb3Zlcnkv dC8wNDNfd2FpdF9sc24ucGwKQEAgLTAsMCArMSw3NyBAQAorIyBDaGVja3Mgd2FpdGluZyBmb3Ig bHNuIG9uIHN0YW5kYnkgcGdfd2FpdF9sc24oKQordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsK KwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6 VXRpbHM7Cit1c2UgVGVzdDo6TW9yZTsKKworIyBJbml0aWFsaXplIHByaW1hcnkgbm9kZQorbXkg JG5vZGVfcHJpbWFyeSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygncHJpbWFyeScp OworJG5vZGVfcHJpbWFyeS0+aW5pdChhbGxvd3Nfc3RyZWFtaW5nID0+IDEpOworJG5vZGVfcHJp bWFyeS0+c3RhcnQ7CisKKyMgQW5kIHNvbWUgY29udGVudCBhbmQgdGFrZSBhIGJhY2t1cAorJG5v ZGVfcHJpbWFyeS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBUQUJMRSB3YWl0X3Rl c3QgQVMgU0VMRUNUIGdlbmVyYXRlX3NlcmllcygxLDEwKSBBUyBhIik7CitteSAkYmFja3VwX25h bWUgPSAnbXlfYmFja3VwJzsKKyRub2RlX3ByaW1hcnktPmJhY2t1cCgkYmFja3VwX25hbWUpOwor CisjIENyZWF0ZSBhIHN0cmVhbWluZyBzdGFuZGJ5IHdpdGggYSAxIHNlY29uZCBkZWxheSBmcm9t IHRoZSBiYWNrdXAKK215ICRub2RlX3N0YW5kYnkgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVy LT5uZXcoJ3N0YW5kYnknKTsKK215ICRkZWxheSA9IDM7Ciskbm9kZV9zdGFuZGJ5LT5pbml0X2Zy b21fYmFja3VwKCRub2RlX3ByaW1hcnksICRiYWNrdXBfbmFtZSwKKwloYXNfc3RyZWFtaW5nID0+ IDEpOworJG5vZGVfc3RhbmRieS0+YXBwZW5kX2NvbmYoCisJJ3Bvc3RncmVzcWwuY29uZicsIHFx WworCXJlY292ZXJ5X21pbl9hcHBseV9kZWxheSA9ICcke2RlbGF5fXMnCitdKTsKKyRub2RlX3N0 YW5kYnktPnN0YXJ0OworCisKKyMgTWFrZSBzdXJlIHRoYXQgcGdfd2FpdF9sc24oKSB3b3Jrczog YWRkIG5ldyBjb250ZW50IHRvIHByaW1hcnkgYW5kIG1lbW9yaXplCisjIHByaW1hcnkncyBuZXcg TFNOLCB0aGVuIHdhaXQgZm9yIHByaW1hcnkncyBMU04gb24gc3RhbmRieS4gUHJvdmUgdGhhdCBw Z193YWl0X2xzbigpIGlzCisjIGFibGUgdG8gc2V0dXAgYW4gaW5maW5pdGUgd2FpdGluZyBsb29w IGFuZCBleGl0IGl0IGlmIGdpdmVuIG5vIHdhaXQgdGltZW91dC4KKyRub2RlX3ByaW1hcnktPnNh ZmVfcHNxbCgncG9zdGdyZXMnLAorCSJJTlNFUlQgSU5UTyB3YWl0X3Rlc3QgVkFMVUVTIChnZW5l cmF0ZV9zZXJpZXMoMTEsIDIwKSkiKTsKK215ICRsc24xID0KKyAgJG5vZGVfcHJpbWFyeS0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgcGdfY3VycmVudF93YWxfbHNuKCkiKTsKK215ICRv dXRwdXQgPSAkbm9kZV9zdGFuZGJ5LT5zYWZlX3BzcWwoCisJJ3Bvc3RncmVzJywgcXFbCisJQ0FM TCBwZ193YWl0X2xzbignJHtsc24xfScsIDEwMDAwMDApOworCVNFTEVDVCBwZ19sc25fY21wKHBn X2xhc3Rfd2FsX3JlcGxheV9sc24oKSwgJyR7bHNuMX0nOjpwZ19sc24pOworXSk7CisKKyMgR2V0 IHRoZSBjdXJyZW50IExTTiBvbiBzdGFuZGJ5IGFuZCBtYWtlIHN1cmUgaXQncyB0aGUgc2FtZSBh cyBwcmltYXJ5J3MgTFNOCitvaygkb3V0cHV0IGVxIDAsICJzdGFuZGJ5IHJlYWNoZWQgdGhlIHNh bWUgTFNOIGFzIHByaW1hcnkgcGdfd2FpdF9sc24oKSIpOworCitteSAkbHNuMiA9CisgICRub2Rl X3ByaW1hcnktPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIHBnX2N1cnJlbnRfd2FsX2xz bigpICsgMSIpOworbXkgJHN0ZGVycjsKKyRub2RlX3N0YW5kYnktPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiQ0FMTCBwZ193YWl0X2xzbignJHtsc24xfScsIDEpOyIpOworJG5vZGVfc3RhbmRieS0+ cHNxbCgKKwkncG9zdGdyZXMnLAorCSJDQUxMIHBnX3dhaXRfbHNuKCcke2xzbjJ9JywgMSk7IiwK KwlzdGRlcnIgPT4gXCRzdGRlcnIpOworb2soICRzdGRlcnIgPX4gL2NhbmNlbGluZyB3YWl0aW5n IGZvciBMU04gZHVlIHRvIHRpbWVvdXQvLAorCSJnZXQgdGltZW91dCBvbiB3YWl0aW5nIGZvciB1 bnJlYWNoYWJsZSBMU04iKTsKKworIyBNYWtlIHN1cmUgdGhhdCBwZ193YWl0X2xzbigpIHdvcmtz OiBhZGQgbmV3IGNvbnRlbnQgdG8gcHJpbWFyeSBhbmQgbWVtb3JpemUKKyMgcHJpbWFyeSdzIG5l dyBMU04sIHRoZW4gd2FpdCBmb3IgcHJpbWFyeSdzIExTTiBvbiBzdGFuZGJ5LiBQcm92ZSB0aGF0 IHBnX3dhaXRfbHNuKCkgaXMKKyMgYWJsZSB0byBzZXR1cCBhbiBpbmZpbml0ZSB3YWl0aW5nIGxv b3AgYW5kIGV4aXQgaXQgaWYgY3VycmVudCBMU04gcmVwbGF5ZWQuCiskbm9kZV9wcmltYXJ5LT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiSU5TRVJUIElOVE8gd2FpdF90ZXN0IFZBTFVFUyAoZ2Vu ZXJhdGVfc2VyaWVzKDIxLCAzMCkpIik7CitteSAkbHNuMyA9CisgICRub2RlX3ByaW1hcnktPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIHBnX2N1cnJlbnRfd2FsX2xzbigpIik7Ciskb3V0 cHV0ID0gJG5vZGVfc3RhbmRieS0+c2FmZV9wc3FsKAorCSdwb3N0Z3JlcycsIHFxWworCUNBTEwg cGdfd2FpdF9sc24oJyR7bHNuM30nKTsKKwlTRUxFQ1QgcGdfbHNuX2NtcChwZ19sYXN0X3dhbF9y ZXBsYXlfbHNuKCksICcke2xzbjN9Jzo6cGdfbHNuKTsKK10pOworCisjIEdldCB0aGUgY3VycmVu dCBMU04gb24gc3RhbmRieSBhbmQgbWFrZSBzdXJlIGl0J3MgdGhlIHNhbWUgYXMgcHJpbWFyeSdz IExTTgorb2soJG91dHB1dCBlcSAwLCAic3RhbmRieSByZWFjaGVkIHRoZSBzYW1lIExTTiBhcyBw cmltYXJ5Iik7CisKKyRub2RlX3N0YW5kYnktPnN0b3A7Ciskbm9kZV9wcmltYXJ5LT5zdG9wOwor ZG9uZV90ZXN0aW5nKCk7Cg== --=_6a764f35277bd7c2d7ac84f65e7d73f0--