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.92) (envelope-from ) id 1jFc79-00072r-UM for pgsql-hackers@arkaria.postgresql.org; Sat, 21 Mar 2020 11:16:28 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1jFc77-0000h4-9s for pgsql-hackers@arkaria.postgresql.org; Sat, 21 Mar 2020 11:16:25 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1jFc76-0000gv-RB for pgsql-hackers@lists.postgresql.org; Sat, 21 Mar 2020 11:16:25 +0000 Received: from cyclops.postgrespro.ru ([93.174.131.138] helo=mail.postgrespro.ru) by magus.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1jFc6y-0006go-Vv for pgsql-hackers@postgresql.org; Sat, 21 Mar 2020 11:16:24 +0000 Received: from localhost (localhost [127.0.0.1]) by mail.postgrespro.ru (Postfix) with ESMTP id 77FC221C2133; Sat, 21 Mar 2020 14:16:14 +0300 (MSK) X-Virus-Scanned: Debian amavisd-new at postgrespro.ru X-Spam-Flag: NO X-Spam-Score: 0 X-Spam-Level: X-Spam-Status: No, score=x tagged_above=-99 required=4 WHITELISTED tests=[] autolearn=unavailable Received: from mail.postgrespro.ru (cyclops.l.postgrespro.ru [192.168.27.1]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client did not present a certificate) by mail.postgrespro.ru (Postfix) with ESMTPSA id 70BF621C4CFE; Sat, 21 Mar 2020 14:16:13 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mail; t=1584789374; bh=55zrgsLgeuMYrOt+PknG1ZW4xVytIC8efudVw+FrbMY=; h=Date:From:To:Cc:Subject:In-Reply-To:References; b=NTAYQ/BVloz6uIdjcq+uWlXfOYtwPxW/vYyWblyXR6pdEfvIgdfumvFaNhE3mnxFK eRD93HpCLQlv63Cx367STbIb76rP/acc6Mr4aKyWsSqNCe4mKA/Sq2bWHcmu0RFO5T dEzwv70yfvisBsiYBmnCDnN2Xnv61BrGn7yr56jE= MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=_d151d7b665aa1d20885765683c675644" Content-Transfer-Encoding: 7bit Date: Sat, 21 Mar 2020 14:16:11 +0300 From: Kartyshov Ivan To: Kyotaro Horiguchi Cc: pgsql-hackers@postgresql.org Subject: Re: [HACKERS] make async slave to wait for lsn to be replayed In-Reply-To: <20200306.145445.1788163547829857988.horikyota.ntt@gmail.com> References: <80f267591b373db5588d580fdfb432f0@postgrespro.ru> <20200306.145445.1788163547829857988.horikyota.ntt@gmail.com> User-Agent: Roundcube Webmail/1.4.0 Message-ID: <3cc883048264c2e9af022033925ff8db@postgrespro.ru> X-Sender: i.kartyshov@postgrespro.ru List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --=_d151d7b665aa1d20885765683c675644 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed As it was discussed earlier, I added wait for statement into begin/start statement. Synopsis ========== BEGIN [ WORK | TRANSACTION ] [ transaction_mode[, ...] ] wait_for_event where transaction_mode is one of: ISOLATION LEVEL { SERIALIZABLE | REPEATABLE READ | READ COMMITTED | READ UNCOMMITTED } READ WRITE | READ ONLY [ NOT ] DEFERRABLE WAIT FOR [ANY | SOME | ALL] event [, event ...] and event is: LSN value [options] TIMESTAMP value and options is: TIMEOUT delay UNTIL TIMESTAMP timestamp -- Ivan Kartyshov Postgres Professional: http://www.postgrespro.com The Russian Postgres Company --=_d151d7b665aa1d20885765683c675644 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=begin_waitfor_v1.patch Content-Disposition: attachment; filename=begin_waitfor_v1.patch; size=37190 ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvYWxsZmlsZXMuc2dtbCBiL2RvYy9zcmMvc2dt bC9yZWYvYWxsZmlsZXMuc2dtbAppbmRleCA4ZDkxZjM1MjllLi44Njk3Zjk4MDdmIDEwMDY0NAot LS0gYS9kb2Mvc3JjL3NnbWwvcmVmL2FsbGZpbGVzLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3Jl Zi9hbGxmaWxlcy5zZ21sCkBAIC0xODcsNiArMTg3LDcgQEAgQ29tcGxldGUgbGlzdCBvZiB1c2Fi bGUgc2dtbCBzb3VyY2UgZmlsZXMgaW4gdGhpcyBkaXJlY3RvcnkuCiA8IUVOVElUWSB1cGRhdGUg ICAgICAgICAgICAgU1lTVEVNICJ1cGRhdGUuc2dtbCI+CiA8IUVOVElUWSB2YWN1dW0gICAgICAg ICAgICAgU1lTVEVNICJ2YWN1dW0uc2dtbCI+CiA8IUVOVElUWSB2YWx1ZXMgICAgICAgICAgICAg U1lTVEVNICJ2YWx1ZXMuc2dtbCI+Cis8IUVOVElUWSB3YWl0ICAgICAgICAgICAgICAgU1lTVEVN ICJ3YWl0LnNnbWwiPgogCiA8IS0tIGFwcGxpY2F0aW9ucyBhbmQgdXRpbGl0aWVzIC0tPgogPCFF TlRJVFkgY2x1c3RlcmRiICAgICAgICAgIFNZU1RFTSAiY2x1c3RlcmRiLnNnbWwiPgpkaWZmIC0t Z2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9iZWdpbi5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9iZWdp bi5zZ21sCmluZGV4IGMyM2JiZmI0ZTcuLmQ4NjQ2NWI2ZDMgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMv c2dtbC9yZWYvYmVnaW4uc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL2JlZ2luLnNnbWwKQEAg LTIxLDEzICsyMSwyNSBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KIAogIDxyZWZzeW5vcHNp c2Rpdj4KIDxzeW5vcHNpcz4KLUJFR0lOIFsgV09SSyB8IFRSQU5TQUNUSU9OIF0gWyA8cmVwbGFj ZWFibGUgY2xhc3M9InBhcmFtZXRlciI+dHJhbnNhY3Rpb25fbW9kZTwvcmVwbGFjZWFibGU+IFss IC4uLl0gXQorQkVHSU4gWyBXT1JLIHwgVFJBTlNBQ1RJT04gXSBbIDxyZXBsYWNlYWJsZSBjbGFz cz0icGFyYW1ldGVyIj50cmFuc2FjdGlvbl9tb2RlPC9yZXBsYWNlYWJsZT4gWywgLi4uXSBdIDxy ZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj53YWl0X2Zvcl9ldmVudDwvcmVwbGFjZWFibGU+ CiAKIDxwaHJhc2U+d2hlcmUgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnRyYW5zYWN0 aW9uX21vZGU8L3JlcGxhY2VhYmxlPiBpcyBvbmUgb2Y6PC9waHJhc2U+CiAKICAgICBJU09MQVRJ T04gTEVWRUwgeyBTRVJJQUxJWkFCTEUgfCBSRVBFQVRBQkxFIFJFQUQgfCBSRUFEIENPTU1JVFRF RCB8IFJFQUQgVU5DT01NSVRURUQgfQogICAgIFJFQUQgV1JJVEUgfCBSRUFEIE9OTFkKICAgICBb IE5PVCBdIERFRkVSUkFCTEUKKworPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPndhaXRf Zm9yX2V2ZW50PC9yZXBsYWNlYWJsZT4KKyAgICBXQUlUIEZPUiBbQU5ZIHwgU09NRSB8IEFMTF0g PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmV2ZW50PC9yZXBsYWNlYWJsZT4gWywgPHJl cGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmV2ZW50PC9yZXBsYWNlYWJsZT4gLi4uXQorCis8 cGhyYXNlPndoZXJlIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5ldmVudDwvcmVwbGFj ZWFibGU+IGlzOjwvcGhyYXNlPgorICAgIExTTiB2YWx1ZSBbPHJlcGxhY2VhYmxlIGNsYXNzPSJw YXJhbWV0ZXIiPm9wdGlvbnM8L3JlcGxhY2VhYmxlPl0KKyAgICBUSU1FU1RBTVAgdmFsdWUKKwor PHBocmFzZT5hbmQgd2hlcmUgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm9wdGlvbnM8 L3JlcGxhY2VhYmxlPiBpcyBvbmUgb2Y6PC9waHJhc2U+CisgICAgVElNRU9VVCBkZWxheQorICAg IFVOVElMIFRJTUVTVEFNUCB0aW1lc3RhbXAKKwogPC9zeW5vcHNpcz4KICA8L3JlZnN5bm9wc2lz ZGl2PgogCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL3dhaXQuc2dtbCBiL2RvYy9zcmMv c2dtbC9yZWYvd2FpdC5zZ21sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAu LjQxYjhlYjAxOWYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL3dhaXQuc2dt bApAQCAtMCwwICsxLDE0OCBAQAorPCEtLQorZG9jL3NyYy9zZ21sL3JlZi93YWl0bHNuLnNnbWwK K1Bvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgorLS0+CisKKzxyZWZlbnRyeSBpZD0ic3FsLXdhaXRs c24iPgorIDxpbmRleHRlcm0gem9uZT0ic3FsLXdhaXRsc24iPgorICA8cHJpbWFyeT5XQUlUIEZP UjwvcHJpbWFyeT4KKyA8L2luZGV4dGVybT4KKworIDxyZWZtZXRhPgorICA8cmVmZW50cnl0aXRs ZT5XQUlUIEZPUjwvcmVmZW50cnl0aXRsZT4KKyAgPG1hbnZvbG51bT43PC9tYW52b2xudW0+Cisg IDxyZWZtaXNjaW5mbz5TUUwgLSBMYW5ndWFnZSBTdGF0ZW1lbnRzPC9yZWZtaXNjaW5mbz4KKyA8 L3JlZm1ldGE+CisKKyA8cmVmbmFtZWRpdj4KKyAgPHJlZm5hbWU+V0FJVCBGT1I8L3JlZm5hbWU+ CisgIDxyZWZwdXJwb3NlPndhaXQgZm9yIHRoZSB0YXJnZXQgPGFjcm9ueW0+TFNOPC9hY3Jvbnlt PiB0byBiZSByZXBsYXllZDwvcmVmcHVycG9zZT4KKyA8L3JlZm5hbWVkaXY+CisKKyA8cmVmc3lu b3BzaXNkaXY+Cis8c3lub3BzaXM+CitXQUlUIEZPUiBbQU5ZIHwgU09NRSB8IEFMTF0gPHJlcGxh Y2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmV2ZW50PC9yZXBsYWNlYWJsZT4gWywgPHJlcGxhY2Vh YmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmV2ZW50PC9yZXBsYWNlYWJsZT4gLi4uXQorCis8cGhyYXNl PndoZXJlIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5ldmVudDwvcmVwbGFjZWFibGU+ IGlzOjwvcGhyYXNlPgorICAgIExTTiB2YWx1ZSBbPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0 ZXIiPm9wdGlvbnM8L3JlcGxhY2VhYmxlPl0KKyAgICBUSU1FU1RBTVAgdmFsdWUKKworPHBocmFz ZT5hbmQgd2hlcmUgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm9wdGlvbnM8L3JlcGxh Y2VhYmxlPiBpcyBvbmUgb2Y6PC9waHJhc2U+CisgICAgVElNRU9VVCBkZWxheQorICAgIFVOVElM IFRJTUVTVEFNUCB0aW1lc3RhbXAKKworV0FJVCBGT1IgTFNOICc8cmVwbGFjZWFibGUgY2xhc3M9 InBhcmFtZXRlciI+bHNuX251bWJlcjwvcmVwbGFjZWFibGU+JworV0FJVCBGT1IgTFNOICc8cmVw bGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bHNuX251bWJlcjwvcmVwbGFjZWFibGU+JyBUSU1F T1VUIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj53YWl0X3RpbWVvdXQ8L3JlcGxhY2Vh YmxlPgorV0FJVCBGT1IgTFNOICc8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bHNuX251 bWJlcjwvcmVwbGFjZWFibGU+JyBVTlRJTCBUSU1FU1RBTVAgPHJlcGxhY2VhYmxlIGNsYXNzPSJw YXJhbWV0ZXIiPndhaXRfdGltZTwvcmVwbGFjZWFibGU+CitXQUlUIEZPUiBUSU1FU1RBTVAgPHJl cGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPndhaXRfdGltZTwvcmVwbGFjZWFibGU+CitXQUlU IEZPUiBBTEwgTFNOICc8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bHNuX251bWJlcjwv cmVwbGFjZWFibGU+JyBUSU1FT1VUIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj53YWl0 X3RpbWVvdXQ8L3JlcGxhY2VhYmxlPiwgVElNRVNUQU1QIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFy YW1ldGVyIj53YWl0X3RpbWU8L3JlcGxhY2VhYmxlPgorV0FJVCBGT1IgQU5ZIExTTiAnPHJlcGxh Y2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmxzbl9udW1iZXI8L3JlcGxhY2VhYmxlPicsIFRJTUVT VEFNUCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+d2FpdF90aW1lPC9yZXBsYWNlYWJs ZT4KKzwvc3lub3BzaXM+CisgPC9yZWZzeW5vcHNpc2Rpdj4KKworIDxyZWZzZWN0MT4KKyAgPHRp dGxlPkRlc2NyaXB0aW9uPC90aXRsZT4KKworICA8cGFyYT4KKyAgIDxjb21tYW5kPldBSVQgRk9S PC9jb21tYW5kPiBwcm92aWRlcyBhIHNpbXBsZQorICAgaW50ZXJwcm9jZXNzIGNvbW11bmljYXRp b24gbWVjaGFuaXNtIHRvIHdhaXQgZm9yIHRpbWVzdGFtcCBvciB0aGUgdGFyZ2V0IGxvZyBzZXF1 ZW5jZQorICAgbnVtYmVyICg8YWNyb255bT5MU048L2Fjcm9ueW0+KSBvbiBzdGFuZGJ5IGluIDxw cm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4KKyAgIGRhdGFiYXNlcyB3aXRoIG1h c3Rlci1zdGFuZGJ5IGFzeW5jaHJvbm91cyByZXBsaWNhdGlvbi4gV2hlbiBydW4gd2l0aCB0aGUK KyAgIDxyZXBsYWNlYWJsZT5MU048L3JlcGxhY2VhYmxlPiBvcHRpb24sIHRoZSA8Y29tbWFuZD5X QUlUIEZPUjwvY29tbWFuZD4gY29tbWFuZAorICAgd2FpdHMgZm9yIHRoZSBzcGVjaWZpZWQgPGFj cm9ueW0+TFNOPC9hY3JvbnltPiB0byBiZSByZXBsYXllZC4gQnkgZGVmYXVsdCwgd2FpdAorICAg dGltZSBpcyB1bmxpbWl0ZWQuIFdhaXRpbmcgY2FuIGJlIGludGVycnVwdGVkIHVzaW5nIDxsaXRl cmFsPkN0cmwrQzwvbGl0ZXJhbD4sIG9yCisgICBieSBzaHV0dGluZyBkb3duIHRoZSA8bGl0ZXJh bD5wb3N0Z3JlczwvbGl0ZXJhbD4gc2VydmVyLiBZb3UgY2FuIGFsc28gbGltaXQgdGhlIHdhaXQK KyAgIHRpbWUgdXNpbmcgdGhlIDxvcHRpb24+VElNRU9VVDwvb3B0aW9uPiBvcHRpb24uCisgIDwv cGFyYT4KKworIDwvcmVmc2VjdDE+CisKKyA8cmVmc2VjdDE+CisgIDx0aXRsZT5QYXJhbWV0ZXJz PC90aXRsZT4KKworICA8dmFyaWFibGVsaXN0PgorICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVy bT48cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+TFNOPC9yZXBsYWNlYWJsZT48L3Rlcm0+ CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIFNwZWNpZnkgdGhlIHRhcmdldCBs b2cgc2VxdWVuY2UgbnVtYmVyIHRvIHdhaXQgZm9yLgorICAgICA8L3BhcmE+CisgICAgPC9saXN0 aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJt PlRJTUVPVVQgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPndhaXRfdGltZW91dDwvcmVw bGFjZWFibGU+PC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBMaW1p dCB0aGUgdGltZSBpbnRlcnZhbCB0byB3YWl0IGZvciB0aGUgTFNOIHRvIGJlIHJlcGxheWVkLgor ICAgICAgVGhlIHNwZWNpZmllZCA8cmVwbGFjZWFibGU+d2FpdF90aW1lb3V0PC9yZXBsYWNlYWJs ZT4gbXVzdCBiZSBhbiBpbnRlZ2VyCisgICAgICBhbmQgaXMgbWVhc3VyZWQgaW4gbWlsbGlzZWNv bmRzLgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5Pgor CisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPlVOVElMIFRJTUVTVEFNUCA8cmVwbGFjZWFi bGUgY2xhc3M9InBhcmFtZXRlciI+d2FpdF90aW1lPC9yZXBsYWNlYWJsZT48L3Rlcm0+CisgICAg PGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIExpbWl0IHRoZSB0aW1lIHRvIHdhaXQgZm9y IHRoZSBMU04gdG8gYmUgcmVwbGF5ZWQuCisgICAgICBUaGUgc3BlY2lmaWVkIDxyZXBsYWNlYWJs ZT53YWl0X3RpbWU8L3JlcGxhY2VhYmxlPiBtdXN0IGJlIHRpbWVzdGFtcC4KKyAgICAgPC9wYXJh PgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICA8L3ZhcmlhYmxlbGlz dD4KKyA8L3JlZnNlY3QxPgorCisgPHJlZnNlY3QxPgorICA8dGl0bGU+RXhhbXBsZXM8L3RpdGxl PgorCisgIDxwYXJhPgorICAgUnVuIDxsaXRlcmFsPldBSVQgRk9SPC9saXRlcmFsPiBmcm9tIDxh cHBsaWNhdGlvbj5wc3FsPC9hcHBsaWNhdGlvbj4sCisgICBsaW1pdGluZyB3YWl0IHRpbWUgdG8g MTAwMDAgbWlsbGlzZWNvbmRzOgorCis8c2NyZWVuPgorV0FJVCBGT1IgTFNOICcwLzNGMDdBNkIx JyBUSU1FT1VUIDEwMDAwOworTk9USUNFOiAgTFNOIGlzIG5vdCByZWFjaGVkLiBUcnkgdG8gaW5j cmVhc2Ugd2FpdCB0aW1lLgorTFNOIHJlYWNoZWQKKy0tLS0tLS0tLS0tLS0KKyBmCisoMSByb3cp Cis8L3NjcmVlbj4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgV2FpdCB1bnRpbCB0aGUgc3Bl Y2lmaWVkIDxhY3JvbnltPkxTTjwvYWNyb255bT4gaXMgcmVwbGF5ZWQ6Cis8c2NyZWVuPgorV0FJ VCBGT1IgTFNOICcwLzNGMDdBNjExJzsKK0xTTiByZWFjaGVkCistLS0tLS0tLS0tLS0tCisgdAor KDEgcm93KQorPC9zY3JlZW4+CisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIExpbWl0IDxhY3Jv bnltPkxTTjwvYWNyb255bT4gd2FpdCB0aW1lIHRvIDUwMDAwMCBtaWxsaXNlY29uZHMsIGFuZCB0 aGVuIGNhbmNlbCB0aGUgY29tbWFuZDoKKzxzY3JlZW4+CitXQUlUIEZPUiBMU04gJzAvM0YwRkY3 OTEnIFRJTUVPVVQgNTAwMDAwOworXkNDYW5jZWwgcmVxdWVzdCBzZW50CitOT1RJQ0U6ICBMU04g aXMgbm90IHJlYWNoZWQuIFRyeSB0byBpbmNyZWFzZSB3YWl0IHRpbWUuCitFUlJPUjogIGNhbmNl bGluZyBzdGF0ZW1lbnQgZHVlIHRvIHVzZXIgcmVxdWVzdAorIExTTiByZWFjaGVkCistLS0tLS0t LS0tLS0tCisgZgorKDEgcm93KQorPC9zY3JlZW4+Cis8L3BhcmE+CisgPC9yZWZzZWN0MT4KKwor IDxyZWZzZWN0MT4KKyAgPHRpdGxlPkNvbXBhdGliaWxpdHk8L3RpdGxlPgorCisgIDxwYXJhPgor ICAgVGhlcmUgaXMgbm8gPGNvbW1hbmQ+V0FJVCBGT1I8L2NvbW1hbmQ+IHN0YXRlbWVudCBpbiB0 aGUgU1FMCisgICBzdGFuZGFyZC4KKyAgPC9wYXJhPgorIDwvcmVmc2VjdDE+Cis8L3JlZmVudHJ5 PgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZmVyZW5jZS5zZ21sIGIvZG9jL3NyYy9zZ21s L3JlZmVyZW5jZS5zZ21sCmluZGV4IGNlZjA5ZGQzOGIuLjU4OGU5NmFhMTQgMTAwNjQ0Ci0tLSBh L2RvYy9zcmMvc2dtbC9yZWZlcmVuY2Uuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmZXJlbmNl LnNnbWwKQEAgLTIxNSw2ICsyMTUsNyBAQAogICAgJnVwZGF0ZTsKICAgICZ2YWN1dW07CiAgICAm dmFsdWVzOworICAgJndhaXQ7CiAKICA8L3JlZmVyZW5jZT4KIApkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0v eGxvZy5jCmluZGV4IDc5M2MwNzZkYTYuLjg1OTE0NzJlMjEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNh bS94bG9nLmMKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlICJjYXRhbG9nL3BnX2RhdGFiYXNl LmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvcHJvZ3Jlc3MuaCIKICNpbmNsdWRlICJjb21tYW5kcy90 YWJsZXNwYWNlLmgiCisjaW5jbHVkZSAiY29tbWFuZHMvd2FpdC5oIgogI2luY2x1ZGUgImNvbW1v bi9jb250cm9sZGF0YV91dGlscy5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUg InBnX3RyYWNlLmgiCkBAIC03Mjg1LDYgKzcyODYsMTUgQEAgU3RhcnR1cFhMT0codm9pZCkKIAkJ CQkJYnJlYWs7CiAJCQkJfQogCisJCQkJLyoKKwkJCQkgKiBJZiBsYXN0UmVwbGF5ZWRFbmRSZWNQ dHIgd2FzIHVwZGF0ZWQsCisJCQkJICogc2V0IGxhdGNoZXMgaW4gU0hNRU0gYXJyYXkuCisJCQkJ ICovCisJCQkJaWYgKFhMb2dDdGwtPmxhc3RSZXBsYXllZEVuZFJlY1B0ciA+PSBHZXRNaW5XYWl0 KCkpCisJCQkJeworCQkJCQlXYWl0U2V0TGF0Y2goWExvZ0N0bC0+bGFzdFJlcGxheWVkRW5kUmVj UHRyKTsKKwkJCQl9CisKIAkJCQkvKiBFbHNlLCB0cnkgdG8gZmV0Y2ggdGhlIG5leHQgV0FMIHJl Y29yZCAqLwogCQkJCXJlY29yZCA9IFJlYWRSZWNvcmQoeGxvZ3JlYWRlciwgTE9HLCBmYWxzZSk7 CiAJCQl9IHdoaWxlIChyZWNvcmQgIT0gTlVMTCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9j b21tYW5kcy9NYWtlZmlsZSBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL01ha2VmaWxlCmluZGV4IGQ0 ODE1ZDNjZTYuLjliMzEwOTI2YzEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL01h a2VmaWxlCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL01ha2VmaWxlCkBAIC01Nyw2ICs1Nyw3 IEBAIE9CSlMgPSBcCiAJdXNlci5vIFwKIAl2YWN1dW0ubyBcCiAJdmFyaWFibGUubyBcCi0Jdmll dy5vCisJdmlldy5vIFwKKwl3YWl0Lm8KIAogaW5jbHVkZSAkKHRvcF9zcmNkaXIpL3NyYy9iYWNr ZW5kL2NvbW1vbi5tawpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvd2FpdC5jIGIv c3JjL2JhY2tlbmQvY29tbWFuZHMvd2FpdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAuLmUwODkxYjM4NDAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC9jb21t YW5kcy93YWl0LmMKQEAgLTAsMCArMSw0MTIgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAq IHdhaXQuYworICoJICBJbXBsZW1lbnRzIFdBSVQgLSBhIHV0aWxpdHkgY29tbWFuZCB0aGF0IGFs bG93cworICoJICB3YWl0aW5nIGZvciBMU04gdG8gaGF2ZSBiZWVuIHJlcGxheWVkIG9uIHJlcGxp Y2EuCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjAsIFBvc3RncmVTUUwg R2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMjAs IFJlZ2VudHMgb2YgUG9zdGdyZXNQcm8KKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICBzcmMv YmFja2VuZC9jb21tYW5kcy93YWl0LmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisj aW5jbHVkZSA8ZmxvYXQuaD4KKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorI2luY2x1ZGUgInBnc3Rh dC5oIgorI2luY2x1ZGUgImZtZ3IuaCIKKyNpbmNsdWRlICJhY2Nlc3MvdHJhbnNhbS5oIgorI2lu Y2x1ZGUgImFjY2Vzcy94YWN0LmgiCisjaW5jbHVkZSAiYWNjZXNzL3hsb2dkZWZzLmgiCisjaW5j bHVkZSAiYWNjZXNzL3hsb2cuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3R5cGUuaCIKKyNpbmNs dWRlICJjb21tYW5kcy93YWl0LmgiCisjaW5jbHVkZSAiZnVuY2FwaS5oIgorI2luY2x1ZGUgIm1p c2NhZG1pbi5oIgorI2luY2x1ZGUgInN0b3JhZ2UvYmFja2VuZGlkLmgiCisjaW5jbHVkZSAic3Rv cmFnZS9pcGMuaCIKKyNpbmNsdWRlICJzdG9yYWdlL2xhdGNoLmgiCisjaW5jbHVkZSAic3RvcmFn ZS9wbXNpZ25hbC5oIgorI2luY2x1ZGUgInN0b3JhZ2UvcHJvYy5oIgorI2luY2x1ZGUgInN0b3Jh Z2Uvc2htZW0uaCIKKyNpbmNsdWRlICJzdG9yYWdlL3NwaW4uaCIKKyNpbmNsdWRlICJzdG9yYWdl L3NpbnZhbGFkdC5oIgorI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCisjaW5jbHVkZSAidXRp bHMvcGdfbHNuLmgiCisjaW5jbHVkZSAidXRpbHMvdGltZXN0YW1wLmgiCisjaW5jbHVkZSAiZXhl Y3V0b3Ivc3BpLmgiCisjaW5jbHVkZSAidXRpbHMvZm1ncnByb3Rvcy5oIgorCisvKiBBZGQgdG8g LyBkZWxldGUgZnJvbSBzaG1lbSBhcnJheSAqLworc3RhdGljIHZvaWQgQWRkRXZlbnQoWExvZ1Jl Y1B0ciB0cmdfbHNuKTsKK3N0YXRpYyB2b2lkIERlbGV0ZUV2ZW50KHZvaWQpOworCisvKiBTaGFy ZWQgbWVtb3J5IHN0cnVjdHVyZXMgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJWExvZ1JlY1B0cgl0 cmdfbHNuOworCS8qCisJICogTGVmdCBzdHJ1Y3QgQklEU3RhdGUgaGVyZSBmb3IgY29tcGF0aWJp bGl0eSB3aXRoCisJICogYSBwbGFubmVkIGZ1dHVyZSBwYXRjaCB0aGF0IHdpbGwgYWxsb3cgd2Fp dGluZyBmb3IgWElEcy4KKwkgKi8KK30gQklEU3RhdGU7CisKK3R5cGVkZWYgc3RydWN0Cit7CisJ aW50CQkJYmFja2VuZF9tYXhpZDsKKwlYTG9nUmVjUHRyCW1pbl9sc247CisJc2xvY2tfdAkJbXV0 ZXg7CisJQklEU3RhdGUJZXZlbnRfYXJyW0ZMRVhJQkxFX0FSUkFZX01FTUJFUl07Cit9IEdsb2JT dGF0ZTsKKworc3RhdGljIHZvbGF0aWxlIEdsb2JTdGF0ZSAqc3RhdGU7CisKKy8qIEFkZCBldmVu dCBvZiB0aGUgY3VycmVudCBiYWNrZW5kIHRvIHNobWVtIGFycmF5ICovCitzdGF0aWMgdm9pZAor QWRkRXZlbnQoWExvZ1JlY1B0ciB0cmdfbHNuKQoreworCVNwaW5Mb2NrQWNxdWlyZSgmc3RhdGUt Pm11dGV4KTsKKwlpZiAoc3RhdGUtPmJhY2tlbmRfbWF4aWQgPCBNeUJhY2tlbmRJZCkKKwkJc3Rh dGUtPmJhY2tlbmRfbWF4aWQgPSBNeUJhY2tlbmRJZDsKKworCXN0YXRlLT5ldmVudF9hcnJbTXlC YWNrZW5kSWRdLnRyZ19sc24gPSB0cmdfbHNuOworCisJaWYgKHRyZ19sc24gPCBzdGF0ZS0+bWlu X2xzbikKKwkJc3RhdGUtPm1pbl9sc24gPSB0cmdfbHNuOworCVNwaW5Mb2NrUmVsZWFzZSgmc3Rh dGUtPm11dGV4KTsKK30KKworLyoKKyAqIERlbGV0ZSBldmVudCBvZiB0aGUgY3VycmVudCBiYWNr ZW5kIGZyb20gdGhlIHNoYXJlZCBhcnJheS4KKyAqCisgKiBUT0RPOiBDb25zaWRlciBzdGF0ZSBj bGVhbnVwIG9uIGJhY2tlbmQgZmFpbHVyZS4KKyAqLworc3RhdGljIHZvaWQKK0RlbGV0ZUV2ZW50 KHZvaWQpCit7CisJaW50IGk7CisJWExvZ1JlY1B0ciB0cmdfbHNuID0gc3RhdGUtPmV2ZW50X2Fy cltNeUJhY2tlbmRJZF0udHJnX2xzbjsKKworCXN0YXRlLT5ldmVudF9hcnJbTXlCYWNrZW5kSWRd LnRyZ19sc24gPSBJbnZhbGlkWExvZ1JlY1B0cjsKKworCVNwaW5Mb2NrQWNxdWlyZSgmc3RhdGUt Pm11dGV4KTsKKwkvKiBVcGRhdGUgc3RhdGUtPm1pbl9sc24gaWZmIGl0IGlzIG5lc3Nlc2FyeSBm b3IgY2hvb3NpbmcgbmV4dCBtaW5fbHNuICovCisJaWYgKHN0YXRlLT5taW5fbHNuID09IHRyZ19s c24pCisJeworCQlzdGF0ZS0+bWluX2xzbiA9IFBHX1VJTlQ2NF9NQVg7CisJCWZvciAoaSA9IDI7 IGkgPD0gc3RhdGUtPmJhY2tlbmRfbWF4aWQ7IGkrKykKKwkJCWlmIChzdGF0ZS0+ZXZlbnRfYXJy W2ldLnRyZ19sc24gIT0gSW52YWxpZFhMb2dSZWNQdHIgJiYKKwkJCQlzdGF0ZS0+ZXZlbnRfYXJy W2ldLnRyZ19sc24gPCBzdGF0ZS0+bWluX2xzbikKKwkJCQlzdGF0ZS0+bWluX2xzbiA9IHN0YXRl LT5ldmVudF9hcnJbaV0udHJnX2xzbjsKKwl9CisKKwlpZiAoc3RhdGUtPmJhY2tlbmRfbWF4aWQg PT0gTXlCYWNrZW5kSWQpCisJCWZvciAoaSA9IChNeUJhY2tlbmRJZCk7IGkgPj0yOyBpLS0pCisJ CQlpZiAoc3RhdGUtPmV2ZW50X2FycltpXS50cmdfbHNuICE9IEludmFsaWRYTG9nUmVjUHRyKQor CQkJeworCQkJCXN0YXRlLT5iYWNrZW5kX21heGlkID0gaTsKKwkJCQlicmVhazsKKwkJCX0KKwor CVNwaW5Mb2NrUmVsZWFzZSgmc3RhdGUtPm11dGV4KTsKK30KKworLyogR2V0IHNpemUgb2Ygc2hh cmVkIG1lbW9yeSBmb3IgR2xvYlN0YXRlICovCitTaXplCitXYWl0U2htZW1TaXplKHZvaWQpCit7 CisJcmV0dXJuIG9mZnNldG9mKEdsb2JTdGF0ZSwgZXZlbnRfYXJyKSArIHNpemVvZihCSURTdGF0 ZSkgKiAoTWF4QmFja2VuZHMrMSk7Cit9CisKKy8qIEluaXQgYXJyYXkgb2YgZXZlbnRzIGluIHNo YXJlZCBtZW1vcnkgKi8KK3ZvaWQKK1dhaXRTaG1lbUluaXQodm9pZCkKK3sKKwlib29sCWZvdW5k OworCXVpbnQzMglpOworCisJc3RhdGUgPSAoR2xvYlN0YXRlICopIFNobWVtSW5pdFN0cnVjdCgi cGdfd2FpdF9sc24iLAorCQkJCQkJCQkJCSAgV2FpdFNobWVtU2l6ZSgpLAorCQkJCQkJCQkJCSAg JmZvdW5kKTsKKwlpZiAoIWZvdW5kKQorCXsKKwkJU3BpbkxvY2tJbml0KCZzdGF0ZS0+bXV0ZXgp OworCisJCWZvciAoaSA9IDA7IGkgPCAoTWF4QmFja2VuZHMrMSk7IGkrKykKKwkJCXN0YXRlLT5l dmVudF9hcnJbaV0udHJnX2xzbiA9IEludmFsaWRYTG9nUmVjUHRyOworCisJCXN0YXRlLT5iYWNr ZW5kX21heGlkID0gMDsKKwkJc3RhdGUtPm1pbl9sc24gPSBQR19VSU5UNjRfTUFYOworCX0KK30K KworLyogU2V0IGFsbCBsYXRjaGVzIGluIHNoYXJlZCBtZW1vcnkgdG8gc2lnbmFsIHRoYXQgbmV3 IExTTiBoYXMgYmVlbiByZXBsYXllZCAqLwordm9pZAorV2FpdFNldExhdGNoKFhMb2dSZWNQdHIg Y3VyX2xzbikKK3sKKwl1aW50MzIJCWk7CisJaW50IAkJYmFja2VuZF9tYXhpZDsKKwlQR1BST0MJ ICAgKmJhY2tlbmQ7CisKKwlTcGluTG9ja0FjcXVpcmUoJnN0YXRlLT5tdXRleCk7CisJYmFja2Vu ZF9tYXhpZCA9IHN0YXRlLT5iYWNrZW5kX21heGlkOworCVNwaW5Mb2NrUmVsZWFzZSgmc3RhdGUt Pm11dGV4KTsKKworCWZvciAoaSA9IDI7IGkgPD0gYmFja2VuZF9tYXhpZDsgaSsrKQorCXsKKwkJ YmFja2VuZCA9IEJhY2tlbmRJZEdldFByb2MoaSk7CisJCWlmIChzdGF0ZS0+ZXZlbnRfYXJyW2ld LnRyZ19sc24gIT0gMCkKKwkJeworCQkJaWYgKHN0YXRlLT5ldmVudF9hcnJbaV0udHJnX2xzbiA8 PSBjdXJfbHNuKQorCQkJCVNldExhdGNoKCZiYWNrZW5kLT5wcm9jTGF0Y2gpOworCQl9CisJfQor fQorCisvKiBHZXQgbWluaW1hbCBMU04gdGhhdCB3aWxsIGJlIG5leHQgKi8KK1hMb2dSZWNQdHIK K0dldE1pbldhaXQodm9pZCkKK3sKKwlyZXR1cm4gc3RhdGUtPm1pbl9sc247Cit9CisKKy8qCisg KiBPbiBXQUlUIHVzZSBNeUxhdGNoIHRvIHdhaXQgdGlsbCBMU04gaXMgcmVwbGF5ZWQsCisgKiBw b3N0bWFzdGVyIGRpZXMgb3IgdGltZW91dCBoYXBwZW5zLgorICovCitpbnQKK1dhaXRVdGlsaXR5 KFhMb2dSZWNQdHIgbHNuLCBjb25zdCBpbnQgZGVsYXksIERlc3RSZWNlaXZlciAqZGVzdCkKK3sK KwlYTG9nUmVjUHRyCQl0cmdfbHNuID0gbHNuOworCVhMb2dSZWNQdHIJCWN1cl9sc247CisJaW50 CQkJCWxhdGNoX2V2ZW50czsKKwl1aW50NjQJCQl0ZGVsYXkgPSBkZWxheTsKKwlsb25nCQkJc2Vj czsKKwlpbnQJCQkJbWljcm9zZWNzOworCVRpbWVzdGFtcFR6CQl0aW1lciA9IEdldEN1cnJlbnRU aW1lc3RhbXAoKTsKKwlUdXBPdXRwdXRTdGF0ZSAqdHN0YXRlOworCVR1cGxlRGVzYwkJdHVwZGVz YzsKKwljaGFyCQkgICAqdmFsdWUgPSAiZiI7CisKKwlpZiAoZGVsYXkgPiAwKQorCQlsYXRjaF9l dmVudHMgPSBXTF9MQVRDSF9TRVQgfCBXTF9USU1FT1VUIHwgV0xfUE9TVE1BU1RFUl9ERUFUSDsK KwllbHNlCisJCWxhdGNoX2V2ZW50cyA9IFdMX0xBVENIX1NFVCB8IFdMX1BPU1RNQVNURVJfREVB VEg7CisKKwlBZGRFdmVudCh0cmdfbHNuKTsKKworCWZvciAoOzspCisJeworCQljdXJfbHNuID0g R2V0WExvZ1JlcGxheVJlY1B0cihOVUxMKTsKKworCQkvKiBJZiBMU04gaGFzIGJlZW4gcmVwbGF5 ZWQgKi8KKwkJaWYgKHRyZ19sc24gPD0gY3VyX2xzbikKKwkJCWJyZWFrOworCisJCS8qIElmIHBv c3RtYXN0ZXIgZGllcywgZmluaXNoIGltbWVkaWF0ZWx5ICovCisJCWlmICghUG9zdG1hc3Rlcklz QWxpdmUoKSkKKwkJCWJyZWFrOworCisJCS8qIElmIGRlbGF5IHRpbWUgaXMgb3ZlciAqLworCQlp ZiAobGF0Y2hfZXZlbnRzICYgV0xfVElNRU9VVCkKKwkJeworCQkJaWYgKFRpbWVzdGFtcERpZmZl cmVuY2VFeGNlZWRzKHRpbWVyLEdldEN1cnJlbnRUaW1lc3RhbXAoKSxkZWxheSkpCisJCQkJYnJl YWs7CisJCQlUaW1lc3RhbXBEaWZmZXJlbmNlKHRpbWVyLEdldEN1cnJlbnRUaW1lc3RhbXAoKSwm c2VjcywgJm1pY3Jvc2Vjcyk7CisJCQl0ZGVsYXkgPSBkZWxheSAtIChzZWNzKjEwMDAgKyBtaWNy b3NlY3MvMTAwMCk7CisJCX0KKworCQkvKiBBIGxpdHRsZSBoYWNrIHNpbWlsYXIgdG8gU25hcHNo b3RSZXNldFhtaW4gdG8gd29yayBvdXQgb2Ygc25hcHNob3QgKi8KKwkJTXlQZ1hhY3QtPnhtaW4g PSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKKwkJV2FpdExhdGNoKE15TGF0Y2gsIGxhdGNoX2V2ZW50 cywgdGRlbGF5LCBXQUlUX0VWRU5UX0NMSUVOVF9SRUFEKTsKKwkJUmVzZXRMYXRjaChNeUxhdGNo KTsKKworCQkvKgorCQkgKiBJZiByZWNlaXZlZCBhbiBpbnRlcnJ1cHRpb24gZnJvbSBDSEVDS19G T1JfSU5URVJSVVBUUywKKwkJICogdGhlbiBkZWxldGUgdGhlIGN1cnJlbnQgZXZlbnQgZnJvbSBh cnJheS4KKwkJICovCisJCWlmIChJbnRlcnJ1cHRQZW5kaW5nKQorCQl7CisJCQlEZWxldGVFdmVu dCgpOworCQkJUHJvY2Vzc0ludGVycnVwdHMoKTsKKwkJfQorCisJfQorCisJRGVsZXRlRXZlbnQo KTsKKworCWlmICh0cmdfbHNuID4gY3VyX2xzbikKKwkJZWxvZyhOT1RJQ0UsIkxTTiBpcyBub3Qg cmVhY2hlZC4gVHJ5IHRvIGluY3JlYXNlIHdhaXQgdGltZS4iKTsKKwllbHNlCisJCXZhbHVlID0g InQiOworCisJLyogTmVlZCBhIHR1cGxlIGRlc2NyaXB0b3IgcmVwcmVzZW50aW5nIGEgc2luZ2xl IFRFWFQgY29sdW1uICovCisJdHVwZGVzYyA9IENyZWF0ZVRlbXBsYXRlVHVwbGVEZXNjKDEpOwor CVR1cGxlRGVzY0luaXRFbnRyeSh0dXBkZXNjLCAoQXR0ck51bWJlcikgMSwgIkxTTiByZWFjaGVk IiwgVEVYVE9JRCwgLTEsIDApOworCS8qIFByZXBhcmUgZm9yIHByb2plY3Rpb24gb2YgdHVwbGVz ICovCisJdHN0YXRlID0gYmVnaW5fdHVwX291dHB1dF90dXBkZXNjKGRlc3QsIHR1cGRlc2MsICZU VFNPcHNNaW5pbWFsVHVwbGUpOworCisJLyogU2VuZCBpdCAqLworCWRvX3RleHRfb3V0cHV0X29u ZWxpbmUodHN0YXRlLCB2YWx1ZSk7CisJZW5kX3R1cF9vdXRwdXQodHN0YXRlKTsKKwlyZXR1cm4g c3RyY21wKHZhbHVlLCJ0Iik/MTotMTsKK30KKwordm9pZAorV2FpdFRpbWVVdGlsaXR5KGNvbnN0 IGludCBkZWxheSkKK3sKKwlpbnQJCQkJbGF0Y2hfZXZlbnRzOworCisJaWYgKGRlbGF5IDwgMCkK KwkJcmV0dXJuIDsKKworCWxhdGNoX2V2ZW50cyA9IFdMX1RJTUVPVVQgfCBXTF9QT1NUTUFTVEVS X0RFQVRIOworCisJTXlQZ1hhY3QtPnhtaW4gPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKKwlXYWl0 TGF0Y2goTXlMYXRjaCwgbGF0Y2hfZXZlbnRzLCBkZWxheSwgV0FJVF9FVkVOVF9DTElFTlRfUkVB RCk7CisJUmVzZXRMYXRjaChNeUxhdGNoKTsKK30KKworLyogR2V0IHVuaXZlcnNhbCB0aW1lICov CitmbG9hdDgKK1dhaXRUaW1lUmVzb2x2ZShDb25zdCAqdGltZSkKK3sKKwlpbnQJCQlyZXQ7CisJ ZmxvYXQ4CQl2YWw7CisKKwlPaWQJCXR5cGVzW10gPSB7IHRpbWUtPmNvbnN0dHlwZSB9OworCURh dHVtCXZhbHVlc1tdID0geyB0aW1lLT5jb25zdHZhbHVlIH07CisJY2hhcgludWxsc1tdID0geyAi ICIgfTsKKworCURhdHVtIHJlc3VsdDsKKwlib29sIGlzbnVsbDsKKworCVNQSV9jb25uZWN0KCk7 CisKKwlpZiAodGltZS0+Y29uc3R0eXBlID09IDEwODMpCisJCXJldCA9IFNQSV9leGVjdXRlX3dp dGhfYXJncygic2VsZWN0IGV4dHJhY3QgKGVwb2NoIGZyb20gKCQxIC0gbm93KCk6OnRpbWUpKSIs CisJCQkJCQkJCQkxLCB0eXBlcywgdmFsdWVzLCBudWxscywgdHJ1ZSwgMCk7CisJZWxzZSBpZiAo dGltZS0+Y29uc3R0eXBlID09IDEyNjYpCisJCXJldCA9IFNQSV9leGVjdXRlX3dpdGhfYXJncygi c2VsZWN0IGV4dHJhY3QgKGVwb2NoIGZyb20gKHRpbWV6b25lKCdVVEMnLCQxKTo6dGltZSAtIHRp bWV6b25lKCdVVEMnLCBub3coKTo6dGltZXR6KTo6dGltZSkpIiwKKwkJCQkJCQkJCTEsIHR5cGVz LCB2YWx1ZXMsIG51bGxzLCB0cnVlLCAwKTsKKwllbHNlCisJCXJldCA9IFNQSV9leGVjdXRlX3dp dGhfYXJncygic2VsZWN0IGV4dHJhY3QgKGVwb2NoIGZyb20gKCQxIC0gbm93KCkpKSIsCisJCQkJ CQkJCQkxLCB0eXBlcywgdmFsdWVzLCBudWxscywgdHJ1ZSwgMCk7CisKKwlBc3NlcnQocmV0ID49 IDApOworCXJlc3VsdCA9IFNQSV9nZXRiaW52YWwoU1BJX3R1cHRhYmxlLT52YWxzWzBdLAorCQkJ CQkJICAgU1BJX3R1cHRhYmxlLT50dXBkZXNjLAorCQkJCQkJICAgMSwgJmlzbnVsbCk7CisKKwlB c3NlcnQoIWlzbnVsbCk7CisJdmFsID0gRGF0dW1HZXRGbG9hdDgocmVzdWx0KTsKKworCWVsb2co SU5GTywgInRpbWU6ICVmIiwgdmFsKTsKKworCVNQSV9maW5pc2goKTsKKwlyZXR1cm4gdmFsOwor fQorCitpbnQKK1dhaXRNYWluKFdhaXRTdG10ICpzdG10LCBEZXN0UmVjZWl2ZXIgKmRlc3QpCit7 CisJaW50CQkJCXJlcyA9IDA7CisJZmxvYXQ4CQkJdmFsID0gMDsKKwlYTG9nUmVjUHRyCQl0cmdf bHNuID0gSW52YWxpZFhMb2dSZWNQdHI7CisJTGlzdENlbGwJICAgKmV2ZW50czsKKwlmbG9hdDgJ CQl0aW1lX3ZhbCA9IDA7CisJWExvZ1JlY1B0cgkJbHNuID0gSW52YWxpZFhMb2dSZWNQdHI7CisK KwlpZiAoc3RtdC0+c3RyYXRlZ3kgPT0gV0FJVF9GT1JfQU5ZKQorCXsKKwkJdGltZV92YWwgPSBE QkxfTUFYOworCQlsc24gPSBQR19VSU5UNjRfTUFYOworCX0KKworCS8qIEV4dHJhY3Qgb3B0aW9u cyBmcm9tIHRoZSBzdGF0ZW1lbnQgbm9kZSB0cmVlICovCisJZm9yZWFjaChldmVudHMsIHN0bXQt PmV2ZW50cykKKwl7CisJCVdhaXRTdG10CSAgICpldmVudCA9IChXYWl0U3RtdCAqKSBsZmlyc3Qo ZXZlbnRzKTsKKworCQlpZiAoZXZlbnQtPmxzbikKKwkJeworCQkJaW50MzIJcmVzOworCQkJdHJn X2xzbiA9IERhdHVtR2V0TFNOKAorCQkJCQkJRGlyZWN0RnVuY3Rpb25DYWxsMShwZ19sc25faW4s CisJCQkJCQkJQ1N0cmluZ0dldERhdHVtKGV2ZW50LT5sc24pKSk7CisJCQlyZXMgPSBEYXR1bUdl dFVJbnQzMigKKwkJCQkJCURpcmVjdEZ1bmN0aW9uQ2FsbDIocGdfbHNuX2NtcCwKKwkJCQkJCQls c24sIHRyZ19sc24pKTsKKworCQkJLyogTmljZSBiZWhhdm91ciBvbiBMU04gZnJvbSBwYXN0ICov CisJCQlpZiAoc3RtdC0+c3RyYXRlZ3kgPT0gV0FJVF9GT1JfQUxMKQorCQkJeworCQkJCWlmIChy ZXMgPD0gMCkKKwkJCQkJbHNuID0gdHJnX2xzbjsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlp ZiAocmVzID4gMCkKKwkJCQkJbHNuID0gdHJnX2xzbjsKKwkJCX0KKworCQkJaWYgKHN0bXQtPndh aXRfdHlwZSA9PSBXQUlUX0VWRU5UX1RJTUUpCisJCQkJc3RtdC0+d2FpdF90eXBlID0gV0FJVF9F VkVOVF9NSVg7CisJCQllbHNlIGlmIChzdG10LT53YWl0X3R5cGUgPT0gV0FJVF9FVkVOVF9OT05F KQorCQkJCXN0bXQtPndhaXRfdHlwZSA9IFdBSVRfRVZFTlRfTFNOOworCisJCQlpZiAoZXZlbnQt PmRlbGF5KQorCQkJeworCQkJCWlmIChzdG10LT5zdHJhdGVneSA9PSBXQUlUX0ZPUl9BTlkpCisJ CQkJeworCQkJCQlpZiAoZXZlbnQtPmRlbGF5IDwgdGltZV92YWwpCisJCQkJCQl0aW1lX3ZhbCA9 IGV2ZW50LT5kZWxheSAvIDEwMDA7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCWlmIChl dmVudC0+ZGVsYXkgPj0gdGltZV92YWwpCisJCQkJCQl0aW1lX3ZhbCA9IGV2ZW50LT5kZWxheSAv IDEwMDA7CisJCQkJfQorCQkJfQorCQl9CisKKwkJaWYgKGV2ZW50LT50aW1lKQorCQl7CisJCQlD b25zdCAqdGltZSA9IChDb25zdCAqKSBldmVudC0+dGltZTsKKwkJCXZhbCA9IFdhaXRUaW1lUmVz b2x2ZSh0aW1lKTsKKworCQkJaWYgKHN0bXQtPndhaXRfdHlwZSA9PSBXQUlUX0VWRU5UX0xTTikK KwkJCQlzdG10LT53YWl0X3R5cGUgPSBXQUlUX0VWRU5UX01JWDsKKwkJCWVsc2UgaWYgKHN0bXQt PndhaXRfdHlwZSA9PSBXQUlUX0VWRU5UX05PTkUpCisJCQkJc3RtdC0+d2FpdF90eXBlID0gV0FJ VF9FVkVOVF9USU1FOworCisJCQkvKiBpZiB2YWwgPT0gMCA/PyAgKi8KKwkJCWlmIChzdG10LT5z dHJhdGVneSA9PSBXQUlUX0ZPUl9BTEwpCisJCQl7CisJCQkJaWYgKHRpbWVfdmFsIDw9IHZhbCkK KwkJCQkJdGltZV92YWwgPSB2YWw7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJaWYgKHRpbWVf dmFsID4gdmFsKQorCQkJCQl0aW1lX3ZhbCA9IHZhbDsKKwkJCX0KKwkJfQorCisJfQorCisJLyog VGltZSA8PSAwIGlmZiB0aW1lIGV2ZW50IGlzIHBhc3NlZCAqLworCWlmICh0aW1lX3ZhbCA8PSAw KQorCQl0aW1lX3ZhbCA9IDE7CisKKwlpZiAoc3RtdC0+d2FpdF90eXBlID09IFdBSVRfRVZFTlRf VElNRSkKKwl7CisJCVdhaXRUaW1lVXRpbGl0eSh0aW1lX3ZhbCAqIDEwMDApOworCQlyZXMgPSAx OworCX0KKwllbHNlCisJCXJlcyA9IFdhaXRVdGlsaXR5KGxzbiwgKGludCkodGltZV92YWwgKiAx MDAwKSwgZGVzdCk7CisJcmV0dXJuIHJlczsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL25v ZGVzL291dGZ1bmNzLmMgYi9zcmMvYmFja2VuZC9ub2Rlcy9vdXRmdW5jcy5jCmluZGV4IGUwODRj M2YwNjkuLmNjOGQyMGE5MWIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL25vZGVzL291dGZ1bmNz LmMKKysrIGIvc3JjL2JhY2tlbmQvbm9kZXMvb3V0ZnVuY3MuYwpAQCAtMjc2MCw2ICsyNzYwLDE5 IEBAIF9vdXREZWZFbGVtKFN0cmluZ0luZm8gc3RyLCBjb25zdCBEZWZFbGVtICpub2RlKQogCVdS SVRFX0xPQ0FUSU9OX0ZJRUxEKGxvY2F0aW9uKTsKIH0KIAorc3RhdGljIHZvaWQKK19vdXRXYWl0 U3RtdChTdHJpbmdJbmZvIHN0ciwgY29uc3QgV2FpdFN0bXQgKm5vZGUpCit7CisJV1JJVEVfTk9E RV9UWVBFKCJXQUlUU1RNVCIpOworCisJV1JJVEVfU1RSSU5HX0ZJRUxEKGxzbik7CisJV1JJVEVf SU5UX0ZJRUxEKGRlbGF5KTsKKwlXUklURV9OT0RFX0ZJRUxEKGV2ZW50cyk7CisJV1JJVEVfTk9E RV9GSUVMRCh0aW1lKTsKKwlXUklURV9FTlVNX0ZJRUxEKHdhaXRfdHlwZSwgV2FpdFR5cGUpOwor CVdSSVRFX0VOVU1fRklFTEQoc3RyYXRlZ3ksIFdhaXRGb3JTdHJhdGVneSk7Cit9CisKIHN0YXRp YyB2b2lkCiBfb3V0VGFibGVMaWtlQ2xhdXNlKFN0cmluZ0luZm8gc3RyLCBjb25zdCBUYWJsZUxp a2VDbGF1c2UgKm5vZGUpCiB7CkBAIC00MzA1LDYgKzQzMTgsOSBAQCBvdXROb2RlKFN0cmluZ0lu Zm8gc3RyLCBjb25zdCB2b2lkICpvYmopCiAJCQljYXNlIFRfUGFydGl0aW9uUmFuZ2VEYXR1bToK IAkJCQlfb3V0UGFydGl0aW9uUmFuZ2VEYXR1bShzdHIsIG9iaik7CiAJCQkJYnJlYWs7CisJCQlj YXNlIFRfV2FpdFN0bXQ6CisJCQkJX291dFdhaXRTdG10KHN0ciwgb2JqKTsKKwkJCQlicmVhazsK IAogCQkJZGVmYXVsdDoKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcGFyc2VyL2FuYWx5emUu YyBiL3NyYy9iYWNrZW5kL3BhcnNlci9hbmFseXplLmMKaW5kZXggNjY3NjQxMjg0Mi4uODc3N2Jh ODFmYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcGFyc2VyL2FuYWx5emUuYworKysgYi9zcmMv YmFja2VuZC9wYXJzZXIvYW5hbHl6ZS5jCkBAIC03OCw2ICs3OCw3IEBAIHN0YXRpYyBRdWVyeSAq dHJhbnNmb3JtQ3JlYXRlVGFibGVBc1N0bXQoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkJCQkJCQkJ CSBDcmVhdGVUYWJsZUFzU3RtdCAqc3RtdCk7CiBzdGF0aWMgUXVlcnkgKnRyYW5zZm9ybUNhbGxT dG10KFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJCQkJCQkJQ2FsbFN0bXQgKnN0bXQpOworc3RhdGlj IFF1ZXJ5ICp0cmFuc2Zvcm1XYWl0Rm9yU3RtdChQYXJzZVN0YXRlICpwc3RhdGUsIFdhaXRTdG10 ICpzdG10KTsKIHN0YXRpYyB2b2lkIHRyYW5zZm9ybUxvY2tpbmdDbGF1c2UoUGFyc2VTdGF0ZSAq cHN0YXRlLCBRdWVyeSAqcXJ5LAogCQkJCQkJCQkgICBMb2NraW5nQ2xhdXNlICpsYywgYm9vbCBw dXNoZWREb3duKTsKICNpZmRlZiBSQVdfRVhQUkVTU0lPTl9DT1ZFUkFHRV9URVNUCkBAIC0yNzks NiArMjgwLDEyIEBAIHRyYW5zZm9ybVN0bXQoUGFyc2VTdGF0ZSAqcHN0YXRlLCBOb2RlICpwYXJz ZVRyZWUpCiAJCQkvKgogCQkJICogT3B0aW1pemFibGUgc3RhdGVtZW50cwogCQkJICovCisJCWNh c2UgVF9UcmFuc2FjdGlvblN0bXQ6CisJCQl7CisJCQkJVHJhbnNhY3Rpb25TdG10ICpzdG10ID0g KFRyYW5zYWN0aW9uU3RtdCAqKSBwYXJzZVRyZWU7CisJCQkJcmVzdWx0ID0gdHJhbnNmb3JtV2Fp dEZvclN0bXQocHN0YXRlLCAoV2FpdFN0bXQgKikgc3RtdC0+d2FpdCk7CisJCQkJYnJlYWs7CisJ CQl9CiAJCWNhc2UgVF9JbnNlcnRTdG10OgogCQkJcmVzdWx0ID0gdHJhbnNmb3JtSW5zZXJ0U3Rt dChwc3RhdGUsIChJbnNlcnRTdG10ICopIHBhcnNlVHJlZSk7CiAJCQlicmVhazsKQEAgLTMyNiw2 ICszMzMsOSBAQCB0cmFuc2Zvcm1TdG10KFBhcnNlU3RhdGUgKnBzdGF0ZSwgTm9kZSAqcGFyc2VU cmVlKQogCQkJcmVzdWx0ID0gdHJhbnNmb3JtQ2FsbFN0bXQocHN0YXRlLAogCQkJCQkJCQkJICAg KENhbGxTdG10ICopIHBhcnNlVHJlZSk7CiAJCQlicmVhazsKKwkJY2FzZSBUX1dhaXRTdG10Ogor CQkJcmVzdWx0ID0gdHJhbnNmb3JtV2FpdEZvclN0bXQocHN0YXRlLCAoV2FpdFN0bXQgKikgcGFy c2VUcmVlKTsKKwkJCWJyZWFrOwogCiAJCWRlZmF1bHQ6CiAKQEAgLTI5ODEsNiArMjk5MSwyNSBA QCBhcHBseUxvY2tpbmdDbGF1c2UoUXVlcnkgKnFyeSwgSW5kZXggcnRpbmRleCwKIAlxcnktPnJv d01hcmtzID0gbGFwcGVuZChxcnktPnJvd01hcmtzLCByYyk7CiB9CiAKK3N0YXRpYyBRdWVyeSAq Cit0cmFuc2Zvcm1XYWl0Rm9yU3RtdChQYXJzZVN0YXRlICpwc3RhdGUsIFdhaXRTdG10ICpzdG10 KQoreworCVF1ZXJ5CQkgICAqcmVzdWx0OworCUxpc3RDZWxsCSAgICpldmVudHM7CisKKwlmb3Jl YWNoKGV2ZW50cywgc3RtdC0+ZXZlbnRzKQorCXsKKwkJV2FpdFN0bXQJICAgKmV2ZW50ID0gKFdh aXRTdG10ICopIGxmaXJzdChldmVudHMpOworCQlldmVudC0+dGltZSA9IHRyYW5zZm9ybUV4cHIo cHN0YXRlLCBldmVudC0+dGltZSwgRVhQUl9LSU5EX09USEVSKTsKKwl9CisKKwlyZXN1bHQgPSBt YWtlTm9kZShRdWVyeSk7CisJcmVzdWx0LT5jb21tYW5kVHlwZSA9IENNRF9VVElMSVRZOworCXJl c3VsdC0+dXRpbGl0eVN0bXQgPSAoTm9kZSAqKSBzdG10OworCisJcmV0dXJuIHJlc3VsdDsKK30K KwogLyoKICAqIENvdmVyYWdlIHRlc3RpbmcgZm9yIHJhd19leHByZXNzaW9uX3RyZWVfd2Fsa2Vy KCkuCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueSBiL3NyYy9iYWNr ZW5kL3BhcnNlci9ncmFtLnkKaW5kZXggN2UzODRmOTU2Yy4uYmQ1ZjJmMDMyOSAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueQorKysgYi9zcmMvYmFja2VuZC9wYXJzZXIvZ3Jh bS55CkBAIC0yNzYsNyArMjc2LDcgQEAgc3RhdGljIE5vZGUgKm1ha2VSZWN1cnNpdmVWaWV3U2Vs ZWN0KGNoYXIgKnJlbG5hbWUsIExpc3QgKmFsaWFzZXMsIE5vZGUgKnF1ZXJ5KTsKIAkJU2VjTGFi ZWxTdG10IFNlbGVjdFN0bXQgVHJhbnNhY3Rpb25TdG10IFRydW5jYXRlU3RtdAogCQlVbmxpc3Rl blN0bXQgVXBkYXRlU3RtdCBWYWN1dW1TdG10CiAJCVZhcmlhYmxlUmVzZXRTdG10IFZhcmlhYmxl U2V0U3RtdCBWYXJpYWJsZVNob3dTdG10Ci0JCVZpZXdTdG10IENoZWNrUG9pbnRTdG10IENyZWF0 ZUNvbnZlcnNpb25TdG10CisJCVZpZXdTdG10IFdhaXRTdG10IENoZWNrUG9pbnRTdG10IENyZWF0 ZUNvbnZlcnNpb25TdG10CiAJCURlYWxsb2NhdGVTdG10IFByZXBhcmVTdG10IEV4ZWN1dGVTdG10 CiAJCURyb3BPd25lZFN0bXQgUmVhc3NpZ25Pd25lZFN0bXQKIAkJQWx0ZXJUU0NvbmZpZ3VyYXRp b25TdG10IEFsdGVyVFNEaWN0aW9uYXJ5U3RtdApAQCAtNDg3LDcgKzQ4Nyw3IEBAIHN0YXRpYyBO b2RlICptYWtlUmVjdXJzaXZlVmlld1NlbGVjdChjaGFyICpyZWxuYW1lLCBMaXN0ICphbGlhc2Vz LCBOb2RlICpxdWVyeSk7CiAldHlwZSA8bGlzdD4Jcm93IGV4cGxpY2l0X3JvdyBpbXBsaWNpdF9y b3cgdHlwZV9saXN0IGFycmF5X2V4cHJfbGlzdAogJXR5cGUgPG5vZGU+CWNhc2VfZXhwciBjYXNl X2FyZyB3aGVuX2NsYXVzZSBjYXNlX2RlZmF1bHQKICV0eXBlIDxsaXN0Pgl3aGVuX2NsYXVzZV9s aXN0Ci0ldHlwZSA8aXZhbD4Jc3ViX3R5cGUgb3B0X21hdGVyaWFsaXplZAorJXR5cGUgPGl2YWw+ CXN1Yl90eXBlIHdhaXRfc3RyYXRlZ3kgb3B0X21hdGVyaWFsaXplZAogJXR5cGUgPHZhbHVlPglO dW1lcmljT25seQogJXR5cGUgPGxpc3Q+CU51bWVyaWNPbmx5X2xpc3QKICV0eXBlIDxhbGlhcz4J YWxpYXNfY2xhdXNlIG9wdF9hbGlhc19jbGF1c2UKQEAgLTU5MSw2ICs1OTEsOCBAQCBzdGF0aWMg Tm9kZSAqbWFrZVJlY3Vyc2l2ZVZpZXdTZWxlY3QoY2hhciAqcmVsbmFtZSwgTGlzdCAqYWxpYXNl cywgTm9kZSAqcXVlcnkpOwogJXR5cGUgPHBhcnRib3VuZHNwZWM+IFBhcnRpdGlvbkJvdW5kU3Bl YwogJXR5cGUgPGxpc3Q+CQloYXNoX3BhcnRib3VuZAogJXR5cGUgPGRlZmVsdD4JCWhhc2hfcGFy dGJvdW5kX2VsZW0KKyV0eXBlIDxsaXN0PgkJd2FpdF9saXN0CisldHlwZSA8bm9kZT4JCVdhaXRF dmVudCB3YWl0X2ZvcgogCiAvKgogICogTm9uLWtleXdvcmQgdG9rZW4gdHlwZXMuICBUaGVzZSBh cmUgaGFyZC13aXJlZCBpbnRvIHRoZSAiZmxleCIgbGV4ZXIuCkBAIC02NjAsNyArNjYyLDcgQEAg c3RhdGljIE5vZGUgKm1ha2VSZWN1cnNpdmVWaWV3U2VsZWN0KGNoYXIgKnJlbG5hbWUsIExpc3Qg KmFsaWFzZXMsIE5vZGUgKnF1ZXJ5KTsKIAogCUxBQkVMIExBTkdVQUdFIExBUkdFX1AgTEFTVF9Q IExBVEVSQUxfUAogCUxFQURJTkcgTEVBS1BST09GIExFQVNUIExFRlQgTEVWRUwgTElLRSBMSU1J VCBMSVNURU4gTE9BRCBMT0NBTAotCUxPQ0FMVElNRSBMT0NBTFRJTUVTVEFNUCBMT0NBVElPTiBM T0NLX1AgTE9DS0VEIExPR0dFRAorCUxPQ0FMVElNRSBMT0NBTFRJTUVTVEFNUCBMT0NBVElPTiBM T0NLX1AgTE9DS0VEIExPR0dFRCBMU04KIAogCU1BUFBJTkcgTUFUQ0ggTUFURVJJQUxJWkVEIE1B WFZBTFVFIE1FVEhPRCBNSU5VVEVfUCBNSU5WQUxVRSBNT0RFIE1PTlRIX1AgTU9WRQogCkBAIC02 OTAsNyArNjkyLDcgQEAgc3RhdGljIE5vZGUgKm1ha2VSZWN1cnNpdmVWaWV3U2VsZWN0KGNoYXIg KnJlbG5hbWUsIExpc3QgKmFsaWFzZXMsIE5vZGUgKnF1ZXJ5KTsKIAlTVUJTQ1JJUFRJT04gU1VC U1RSSU5HIFNVUFBPUlQgU1lNTUVUUklDIFNZU0lEIFNZU1RFTV9QCiAKIAlUQUJMRSBUQUJMRVMg VEFCTEVTQU1QTEUgVEFCTEVTUEFDRSBURU1QIFRFTVBMQVRFIFRFTVBPUkFSWSBURVhUX1AgVEhF TgotCVRJRVMgVElNRSBUSU1FU1RBTVAgVE8gVFJBSUxJTkcgVFJBTlNBQ1RJT04gVFJBTlNGT1JN CisJVElFUyBUSU1FIFRJTUVPVVQgVElNRVNUQU1QIFRPIFRSQUlMSU5HIFRSQU5TQUNUSU9OIFRS QU5TRk9STQogCVRSRUFUIFRSSUdHRVIgVFJJTSBUUlVFX1AKIAlUUlVOQ0FURSBUUlVTVEVEIFRZ UEVfUCBUWVBFU19QCiAKQEAgLTcwMCw3ICs3MDIsOCBAQCBzdGF0aWMgTm9kZSAqbWFrZVJlY3Vy c2l2ZVZpZXdTZWxlY3QoY2hhciAqcmVsbmFtZSwgTGlzdCAqYWxpYXNlcywgTm9kZSAqcXVlcnkp OwogCVZBQ1VVTSBWQUxJRCBWQUxJREFURSBWQUxJREFUT1IgVkFMVUVfUCBWQUxVRVMgVkFSQ0hB UiBWQVJJQURJQyBWQVJZSU5HCiAJVkVSQk9TRSBWRVJTSU9OX1AgVklFVyBWSUVXUyBWT0xBVElM RQogCi0JV0hFTiBXSEVSRSBXSElURVNQQUNFX1AgV0lORE9XIFdJVEggV0lUSElOIFdJVEhPVVQg V09SSyBXUkFQUEVSIFdSSVRFCisJV0FJVCBXSEVOIFdIRVJFIFdISVRFU1BBQ0VfUCBXSU5ET1cK KwlXSVRIIFdJVEhJTiBXSVRIT1VUIFdPUksgV1JBUFBFUiBXUklURQogCiAJWE1MX1AgWE1MQVRU UklCVVRFUyBYTUxDT05DQVQgWE1MRUxFTUVOVCBYTUxFWElTVFMgWE1MRk9SRVNUIFhNTE5BTUVT UEFDRVMKIAlYTUxQQVJTRSBYTUxQSSBYTUxST09UIFhNTFNFUklBTElaRSBYTUxUQUJMRQpAQCAt OTU0LDYgKzk1Nyw3IEBAIHN0bXQgOgogCQkJfCBWYXJpYWJsZVNldFN0bXQKIAkJCXwgVmFyaWFi bGVTaG93U3RtdAogCQkJfCBWaWV3U3RtdAorCQkJfCBXYWl0U3RtdAogCQkJfCAvKkVNUFRZKi8K IAkJCQl7ICQkID0gTlVMTDsgfQogCQk7CkBAIC05OTMwLDE4ICs5OTM0LDIwIEBAIFRyYW5zYWN0 aW9uU3RtdDoKIAkJCQkJbi0+Y2hhaW4gPSAkMzsKIAkJCQkJJCQgPSAoTm9kZSAqKW47CiAJCQkJ fQotCQkJfCBCRUdJTl9QIG9wdF90cmFuc2FjdGlvbiB0cmFuc2FjdGlvbl9tb2RlX2xpc3Rfb3Jf ZW1wdHkKKwkJCXwgQkVHSU5fUCBvcHRfdHJhbnNhY3Rpb24gdHJhbnNhY3Rpb25fbW9kZV9saXN0 X29yX2VtcHR5IHdhaXRfZm9yCiAJCQkJewogCQkJCQlUcmFuc2FjdGlvblN0bXQgKm4gPSBtYWtl Tm9kZShUcmFuc2FjdGlvblN0bXQpOwogCQkJCQluLT5raW5kID0gVFJBTlNfU1RNVF9CRUdJTjsK IAkJCQkJbi0+b3B0aW9ucyA9ICQzOworCQkJCQluLT53YWl0ID0gJDQ7CiAJCQkJCSQkID0gKE5v ZGUgKiluOwogCQkJCX0KLQkJCXwgU1RBUlQgVFJBTlNBQ1RJT04gdHJhbnNhY3Rpb25fbW9kZV9s aXN0X29yX2VtcHR5CisJCQl8IFNUQVJUIFRSQU5TQUNUSU9OIHRyYW5zYWN0aW9uX21vZGVfbGlz dF9vcl9lbXB0eSB3YWl0X2ZvcgogCQkJCXsKIAkJCQkJVHJhbnNhY3Rpb25TdG10ICpuID0gbWFr ZU5vZGUoVHJhbnNhY3Rpb25TdG10KTsKIAkJCQkJbi0+a2luZCA9IFRSQU5TX1NUTVRfU1RBUlQ7 CiAJCQkJCW4tPm9wdGlvbnMgPSAkMzsKKwkJCQkJbi0+d2FpdCA9ICQ0OwogCQkJCQkkJCA9IChO b2RlICopbjsKIAkJCQl9CiAJCQl8IENPTU1JVCBvcHRfdHJhbnNhY3Rpb24gb3B0X3RyYW5zYWN0 aW9uX2NoYWluCkBAIC0xNDE0Nyw2ICsxNDE1Myw5MyBAQCB4bWxfcGFzc2luZ19tZWNoOgogCQkJ fCBCWSBWQUxVRV9QCiAJCTsKIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICoJCVFVRVJZ OgorICoJCQkJV0FJVCBGT1IgPGV2ZW50PiBbLCA8ZXZlbnQ+IC4uLl0KKyAqCQkJCWV2ZW50ICBb b3B0aW9uXToKKyAqCQkJCQlMU04gdmFsdWUKKyAqCQkJCQlUSU1FT1VUIHZhbHVlCisgKgkJCQkJ VElNRVNUQU1QIHRpbWVzdGFtcAorICoJCQkJb3B0aW9uOgorICoJCQkJCVRJTUVPVVQgZGVsYXkK KyAqCQkJCQlVTlRJTCBUSU1FU1RBTVAgdGltZXN0YW1wCisgKgorICoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqLworV2FpdFN0bXQ6CisJCQlXQUlUIEZPUiB3YWl0X3N0cmF0ZWd5IHdhaXRfbGlzdAorCQkJ CXsKKwkJCQkJV2FpdFN0bXQgKm4gPSBtYWtlTm9kZShXYWl0U3RtdCk7CisJCQkJCW4tPndhaXRf dHlwZSA9IFdBSVRfRVZFTlRfTk9ORTsKKwkJCQkJbi0+c3RyYXRlZ3kgPSAkMzsKKwkJCQkJbi0+ ZXZlbnRzID0gJDQ7CisJCQkJCSQkID0gKE5vZGUgKiluOworCQkJCX0KKy8vCQkJfCAvKiBFTVBU WSAqLwkJeyAkJCA9IE5VTEw7IH0KKwkJCTsKK3dhaXRfZm9yOgorCQkJV0FJVCBGT1Igd2FpdF9z dHJhdGVneSB3YWl0X2xpc3QKKwkJCXsKKwkJCQlXYWl0U3RtdCAqbiA9IG1ha2VOb2RlKFdhaXRT dG10KTsKKwkJCQluLT53YWl0X3R5cGUgPSBXQUlUX0VWRU5UX05PTkU7CisJCQkJbi0+c3RyYXRl Z3kgPSAkMzsKKwkJCQluLT5ldmVudHMgPSAkNDsKKwkJCQkkJCA9IChOb2RlICopbjsKKwkJCX0K KwkJCXwgLyogRU1QVFkgKi8JCXsgJCQgPSBOVUxMOyB9OworCit3YWl0X3N0cmF0ZWd5OgorCQkJ QUxMCQkJCQl7ICQkID0gV0FJVF9GT1JfQUxMOyB9CisJCQl8IEFOWQkJCQl7ICQkID0gV0FJVF9G T1JfQU5ZOyB9CisJCQl8IC8qIEVNUFRZICovCQl7ICQkID0gV0FJVF9GT1JfQUxMOyB9CisJCTsK Kword2FpdF9saXN0OgorCQkJV2FpdEV2ZW50CQkJCQl7ICQkID0gbGlzdF9tYWtlMSgkMSk7IH0K KwkJCXwgd2FpdF9saXN0ICcsJyBXYWl0RXZlbnQJeyAkJCA9IGxhcHBlbmQoJDEsICQzKTsgfQor CQkJfCB3YWl0X2xpc3QgV2FpdEV2ZW50CQl7ICQkID0gbGFwcGVuZCgkMSwgJDIpOyB9CisJCTsK KworV2FpdEV2ZW50OgorCQkJTFNOIFNjb25zdAorCQkJCXsKKwkJCQkJV2FpdFN0bXQgKm4gPSBt YWtlTm9kZShXYWl0U3RtdCk7CisJCQkJCW4tPndhaXRfdHlwZSA9IFdBSVRfRVZFTlRfTFNOOwor CQkJCQluLT5sc24gPSAkMjsKKwkJCQkJbi0+ZGVsYXkgPSAwOworCQkJCQluLT50aW1lID0gTlVM TDsKKwkJCQkJJCQgPSAoTm9kZSAqKW47CisJCQkJfQorCisJCQl8IExTTiBTY29uc3QgVElNRU9V VCBJY29uc3QKKwkJCQkJeworCQkJCQkJV2FpdFN0bXQgKm4gPSBtYWtlTm9kZShXYWl0U3RtdCk7 CisJCQkJCQluLT53YWl0X3R5cGUgPSBXQUlUX0VWRU5UX01JWDsKKwkJCQkJCW4tPmxzbiA9ICQy OworCQkJCQkJbi0+ZGVsYXkgPSAkNDsKKwkJCQkJCW4tPnRpbWUgPSBOVUxMOworCQkJCQkJJCQg PSAoTm9kZSAqKW47CisJCQkJCX0KKwkJCXwgTFNOIFNjb25zdCBVTlRJTCBDb25zdERhdGV0aW1l IFNjb25zdAorCQkJCQl7CisJCQkJCQlXYWl0U3RtdCAqbiA9IG1ha2VOb2RlKFdhaXRTdG10KTsK KwkJCQkJCW4tPndhaXRfdHlwZSA9IFdBSVRfRVZFTlRfTUlYOworCQkJCQkJbi0+bHNuID0gJDI7 CisJCQkJCQluLT5kZWxheSA9IDA7CisJCQkJCQluLT50aW1lID0gbWFrZVN0cmluZ0NvbnN0Q2Fz dCgkNSwgQDUsICQ0KTsKKwkJCQkJCSQkID0gKE5vZGUgKiluOworCQkJCQl9CisJCQl8IENvbnN0 RGF0ZXRpbWUgU2NvbnN0CisJCQkJCXsKKwkJCQkJCVdhaXRTdG10ICpuID0gbWFrZU5vZGUoV2Fp dFN0bXQpOworCQkJCQkJbi0+d2FpdF90eXBlID0gV0FJVF9FVkVOVF9USU1FOworCQkJCQkJbi0+ bHNuID0gTlVMTDsKKwkJCQkJCW4tPmRlbGF5ID0gMDsKKwkJCQkJCW4tPnRpbWUgPSBtYWtlU3Ry aW5nQ29uc3RDYXN0KCQyLCBAMiwgJDEpOworCQkJCQkJJCQgPSAoTm9kZSAqKW47CisJCQkJCX0K KwkJCTsKKwogCiAvKgogICogQWdncmVnYXRlIGRlY29yYXRpb24gY2xhdXNlcwpAQCAtMTUyOTEs NiArMTUzODQsNyBAQCB1bnJlc2VydmVkX2tleXdvcmQ6CiAJCQl8IExPQ0tfUAogCQkJfCBMT0NL RUQKIAkJCXwgTE9HR0VECisJCQl8IExTTgogCQkJfCBNQVBQSU5HCiAJCQl8IE1BVENICiAJCQl8 IE1BVEVSSUFMSVpFRApAQCAtMTU0MTMsNiArMTU1MDcsNyBAQCB1bnJlc2VydmVkX2tleXdvcmQ6 CiAJCQl8IFRFTVBPUkFSWQogCQkJfCBURVhUX1AKIAkJCXwgVElFUworCQkJfCBUSU1FT1VUCiAJ CQl8IFRSQU5TQUNUSU9OCiAJCQl8IFRSQU5TRk9STQogCQkJfCBUUklHR0VSCkBAIC0xNTQzOSw2 ICsxNTUzNCw3IEBAIHVucmVzZXJ2ZWRfa2V5d29yZDoKIAkJCXwgVklFVwogCQkJfCBWSUVXUwog CQkJfCBWT0xBVElMRQorCQkJfCBXQUlUCiAJCQl8IFdISVRFU1BBQ0VfUAogCQkJfCBXSVRISU4K IAkJCXwgV0lUSE9VVApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5j IGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5jCmluZGV4IDQyN2IwZDU5Y2QuLjhjM2Qx OTZhOWEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2kuYworKysgYi9z cmMvYmFja2VuZC9zdG9yYWdlL2lwYy9pcGNpLmMKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRl ICJhY2Nlc3Mvc3VidHJhbnMuaCIKICNpbmNsdWRlICJhY2Nlc3MvdHdvcGhhc2UuaCIKICNpbmNs dWRlICJjb21tYW5kcy9hc3luYy5oIgorI2luY2x1ZGUgImNvbW1hbmRzL3dhaXQuaCIKICNpbmNs dWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKICNpbmNsdWRlICJwb3N0bWFz dGVyL2F1dG92YWN1dW0uaCIKQEAgLTE0Nyw2ICsxNDgsNyBAQCBDcmVhdGVTaGFyZWRNZW1vcnlB bmRTZW1hcGhvcmVzKHZvaWQpCiAJCXNpemUgPSBhZGRfc2l6ZShzaXplLCBCVHJlZVNobWVtU2l6 ZSgpKTsKIAkJc2l6ZSA9IGFkZF9zaXplKHNpemUsIFN5bmNTY2FuU2htZW1TaXplKCkpOwogCQlz aXplID0gYWRkX3NpemUoc2l6ZSwgQXN5bmNTaG1lbVNpemUoKSk7CisJCXNpemUgPSBhZGRfc2l6 ZShzaXplLCBXYWl0U2htZW1TaXplKCkpOwogI2lmZGVmIEVYRUNfQkFDS0VORAogCQlzaXplID0g YWRkX3NpemUoc2l6ZSwgU2htZW1CYWNrZW5kQXJyYXlTaXplKCkpOwogI2VuZGlmCkBAIC0yNjQs NiArMjY2LDExIEBAIENyZWF0ZVNoYXJlZE1lbW9yeUFuZFNlbWFwaG9yZXModm9pZCkKIAlTeW5j U2NhblNobWVtSW5pdCgpOwogCUFzeW5jU2htZW1Jbml0KCk7CiAKKwkvKgorCSAqIEluaXQgYXJy YXkgb2YgTGF0Y2hlcyBpbiBTSE1FTSBmb3IgV2FpdAorCSAqLworCVdhaXRTaG1lbUluaXQoKTsK KwogI2lmZGVmIEVYRUNfQkFDS0VORAogCiAJLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Rj b3AvdXRpbGl0eS5jIGIvc3JjL2JhY2tlbmQvdGNvcC91dGlsaXR5LmMKaW5kZXggYjFmN2Y2ZTJk MC4uOGYyY2ZmYjY1OCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdGNvcC91dGlsaXR5LmMKKysr IGIvc3JjL2JhY2tlbmQvdGNvcC91dGlsaXR5LmMKQEAgLTE1LDYgKzE1LDcgQEAKICAqLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQogICovCiAjaW5jbHVkZSAicG9zdGdyZXMuaCIKKyNpbmNsdWRlIDxmbG9hdC5o PgogCiAjaW5jbHVkZSAiYWNjZXNzL2h0dXBfZGV0YWlscy5oIgogI2luY2x1ZGUgImFjY2Vzcy9y ZWxvcHRpb25zLmgiCkBAIC01Nyw2ICs1OCw3IEBACiAjaW5jbHVkZSAiY29tbWFuZHMvdXNlci5o IgogI2luY2x1ZGUgImNvbW1hbmRzL3ZhY3V1bS5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3ZpZXcu aCIKKyNpbmNsdWRlICJjb21tYW5kcy93YWl0LmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAj aW5jbHVkZSAicGFyc2VyL3BhcnNlX3V0aWxjbWQuaCIKICNpbmNsdWRlICJwb3N0bWFzdGVyL2Jn d3JpdGVyLmgiCkBAIC03MCw2ICs3Miw5IEBACiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgi CiAjaW5jbHVkZSAidXRpbHMvcmVsLmgiCiAjaW5jbHVkZSAidXRpbHMvc3lzY2FjaGUuaCIKKyNp bmNsdWRlICJleGVjdXRvci9zcGkuaCIKKyNpbmNsdWRlICJ1dGlscy9mbWdycHJvdG9zLmgiCisj aW5jbHVkZSAidXRpbHMvcGdfbHNuLmgiCiAKIC8qIEhvb2sgZm9yIHBsdWdpbnMgdG8gZ2V0IGNv bnRyb2wgaW4gUHJvY2Vzc1V0aWxpdHkoKSAqLwogUHJvY2Vzc1V0aWxpdHlfaG9va190eXBlIFBy b2Nlc3NVdGlsaXR5X2hvb2sgPSBOVUxMOwpAQCAtMjY4LDYgKzI3Myw3IEBAIENsYXNzaWZ5VXRp bGl0eUNvbW1hbmRBc1JlYWRPbmx5KE5vZGUgKnBhcnNldHJlZSkKIAkJY2FzZSBUX0xvYWRTdG10 OgogCQljYXNlIFRfUHJlcGFyZVN0bXQ6CiAJCWNhc2UgVF9Vbmxpc3RlblN0bXQ6CisJCWNhc2Ug VF9XYWl0U3RtdDoKIAkJY2FzZSBUX1ZhcmlhYmxlU2V0U3RtdDoKIAkJCXsKIAkJCQkvKgpAQCAt NTkxLDYgKzU5NywxMiBAQCBzdGFuZGFyZF9Qcm9jZXNzVXRpbGl0eShQbGFubmVkU3RtdCAqcHN0 bXQsCiAJCQkJCWNhc2UgVFJBTlNfU1RNVF9TVEFSVDoKIAkJCQkJCXsKIAkJCQkJCQlMaXN0Q2Vs bCAgICpsYzsKKwkJCQkJCQlpbnQJCQlyZXMgPSAwOworCQkJCQkJCVdhaXRTdG10ICAgKndhaXRz dG10ID0gKFdhaXRTdG10ICopIHN0bXQtPndhaXQ7CisKKwkJCQkJCQlyZXMgPSBXYWl0TWFpbih3 YWl0c3RtdCwgZGVzdCk7CisJCQkJCQkJaWYgKHJlcyA8PSAwKQorCQkJCQkJCQlicmVhazsKIAog CQkJCQkJCUJlZ2luVHJhbnNhY3Rpb25CbG9jaygpOwogCQkJCQkJCWZvcmVhY2gobGMsIHN0bXQt Pm9wdGlvbnMpCkBAIC0xMDYyLDYgKzEwNzQsMTMgQEAgc3RhbmRhcmRfUHJvY2Vzc1V0aWxpdHko UGxhbm5lZFN0bXQgKnBzdG10LAogCQkJCWJyZWFrOwogCQkJfQogCisJCWNhc2UgVF9XYWl0U3Rt dDoKKwkJCXsKKwkJCQlXYWl0U3RtdCAqc3RtdCA9IChXYWl0U3RtdCAqKSBwYXJzZXRyZWU7CisJ CQkJV2FpdE1haW4oc3RtdCwgZGVzdCk7CisJCQkJYnJlYWs7CisJCQl9CisKIAkJZGVmYXVsdDoK IAkJCS8qIEFsbCBvdGhlciBzdGF0ZW1lbnQgdHlwZXMgaGF2ZSBldmVudCB0cmlnZ2VyIHN1cHBv cnQgKi8KIAkJCVByb2Nlc3NVdGlsaXR5U2xvdyhwc3RhdGUsIHBzdG10LCBxdWVyeVN0cmluZywK QEAgLTI3MTgsNiArMjczNywxMCBAQCBDcmVhdGVDb21tYW5kVGFnKE5vZGUgKnBhcnNldHJlZSkK IAkJCXRhZyA9IENNRFRBR19OT1RJRlk7CiAJCQlicmVhazsKIAorCQljYXNlIFRfV2FpdFN0bXQ6 CisJCQl0YWcgPSBDTURUQUdfV0FJVDsKKwkJCWJyZWFrOworCiAJCWNhc2UgVF9MaXN0ZW5TdG10 OgogCQkJdGFnID0gQ01EVEFHX0xJU1RFTjsKIAkJCWJyZWFrOwpAQCAtMzM1Nyw2ICszMzgwLDEw IEBAIEdldENvbW1hbmRMb2dMZXZlbChOb2RlICpwYXJzZXRyZWUpCiAJCQlsZXYgPSBMT0dTVE1U X0FMTDsKIAkJCWJyZWFrOwogCisJCWNhc2UgVF9XYWl0U3RtdDoKKwkJCWxldiA9IExPR1NUTVRf QUxMOworCQkJYnJlYWs7CisKIAkJY2FzZSBUX0xpc3RlblN0bXQ6CiAJCQlsZXYgPSBMT0dTVE1U X0FMTDsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvd2FpdC5o IGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvd2FpdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAuLjYyMjUzZGI0ZTYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW5jbHVkZS9j b21tYW5kcy93YWl0LmgKQEAgLTAsMCArMSwyNyBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgor ICogd2FpdC5oCisgKgkgIHByb3RvdHlwZXMgZm9yIGNvbW1hbmRzL3dhaXQuYworICoKKyAqIFBv cnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDE2LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9w bWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDE2LCBSZWdlbnRzIG9mIFBv c3RncmVzUFJPCisgKgorICogc3JjL2luY2x1ZGUvY29tbWFuZHMvd2FpdC5oCisgKgorICotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgV0FJVF9ICisjZGVmaW5lIFdBSVRfSAorI2luY2x1 ZGUgInBvc3RncmVzLmgiCisjaW5jbHVkZSAidGNvcC9kZXN0LmgiCisKK2V4dGVybiBpbnQgV2Fp dFV0aWxpdHkoWExvZ1JlY1B0ciBsc24sIGNvbnN0IGludCBkZWxheSwgRGVzdFJlY2VpdmVyICpk ZXN0KTsKK2V4dGVybiB2b2lkIFdhaXRUaW1lVXRpbGl0eShjb25zdCBpbnQgZGVsYXkpOworZXh0 ZXJuIFNpemUgV2FpdFNobWVtU2l6ZSh2b2lkKTsKK2V4dGVybiB2b2lkIFdhaXRTaG1lbUluaXQo dm9pZCk7CitleHRlcm4gdm9pZCBXYWl0U2V0TGF0Y2goWExvZ1JlY1B0ciBjdXJfbHNuKTsKK2V4 dGVybiBYTG9nUmVjUHRyIEdldE1pbldhaXQodm9pZCk7CitleHRlcm4gZmxvYXQ4IFdhaXRUaW1l UmVzb2x2ZShDb25zdCAqdGltZSk7CitleHRlcm4gaW50IFdhaXRNYWluKFdhaXRTdG10ICpzdG10 LCBEZXN0UmVjZWl2ZXIgKmRlc3QpOworCisjZW5kaWYgICAvKiBXQUlUX0ggKi8KZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL25vZGVzL25vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9ub2Rlcy5o CmluZGV4IDhhNzZhZmU4Y2MuLjM0OGRlNzZjNWYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25v ZGVzL25vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvbm9kZXMuaApAQCAtNDg4LDYgKzQ4 OCw3IEBAIHR5cGVkZWYgZW51bSBOb2RlVGFnCiAJVF9Ecm9wUmVwbGljYXRpb25TbG90Q21kLAog CVRfU3RhcnRSZXBsaWNhdGlvbkNtZCwKIAlUX1RpbWVMaW5lSGlzdG9yeUNtZCwKKwlUX1dhaXRT dG10LAogCVRfU1FMQ21kLAogCiAJLyoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3Bh cnNlbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaAppbmRleCAyMDM5YjQy NDQ5Li4wNDI5ZWViYjVmIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVz LmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oCkBAIC0zMDU0LDYgKzMwNTQs NyBAQCB0eXBlZGVmIHN0cnVjdCBUcmFuc2FjdGlvblN0bXQKIAljaGFyCSAgICpzYXZlcG9pbnRf bmFtZTsgLyogZm9yIHNhdmVwb2ludCBjb21tYW5kcyAqLwogCWNoYXIJICAgKmdpZDsJCQkvKiBm b3IgdHdvLXBoYXNlLWNvbW1pdCByZWxhdGVkIGNvbW1hbmRzICovCiAJYm9vbAkJY2hhaW47CQkJ LyogQU5EIENIQUlOIG9wdGlvbiAqLworCU5vZGUJCSp3YWl0OwkJCS8qIFdhaXQgZm9yIGV2ZW50 IG5vZGUgb3IgTlVMTCAqLwogfSBUcmFuc2FjdGlvblN0bXQ7CiAKIC8qIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KQEAgLTM1NjMsNCArMzU2NCwzNCBAQCB0eXBlZGVmIHN0cnVjdCBEcm9wU3Vic2Ny aXB0aW9uU3RtdAogCURyb3BCZWhhdmlvciBiZWhhdmlvcjsJCS8qIFJFU1RSSUNUIG9yIENBU0NB REUgYmVoYXZpb3IgKi8KIH0gRHJvcFN1YnNjcmlwdGlvblN0bXQ7CiAKKy8qIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAqCQlXYWl0IFN0YXRlbWVudAorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorICovCisKK3R5cGVkZWYgZW51bSBXYWl0VHlwZQoreworCVdBSVRfRVZFTlRfTk9ORSA9IDAs CisJV0FJVF9FVkVOVF9MU04sCisJV0FJVF9FVkVOVF9USU1FLAorCVdBSVRfRVZFTlRfTUlYCit9 IFdhaXRUeXBlOworCit0eXBlZGVmIGVudW0gV2FpdEZvclN0cmF0ZWd5Cit7CisJV0FJVF9GT1Jf QU5ZID0gMCwKKwlXQUlUX0ZPUl9BTEwKK30gV2FpdEZvclN0cmF0ZWd5OworCit0eXBlZGVmIHN0 cnVjdCBXYWl0U3RtdAoreworCU5vZGVUYWcJCQl0eXBlOworCVdhaXRUeXBlCQl3YWl0X3R5cGU7 CisJV2FpdEZvclN0cmF0ZWd5CXN0cmF0ZWd5OworCUxpc3QJCSAgICpldmVudHM7CQkvKiBvcHRp b24gKi8KKwljaGFyCQkgICAqbHNuOwkJLyogVGFyZ2V0IExTTiB0byB3YWl0IGZvciAqLworCWlu dAkJCQlkZWxheTsJCS8qIFRpbWVvdXQgd2hlbiB3YWl0aW5nIGZvciBMU04sIGluIG1zZWMgKi8K KwlOb2RlCQkgICAqdGltZTsJCS8qIFdhaXQgZm9yIHRpbWVzdGFtcCAqLworfSBXYWl0U3RtdDsK KwogI2VuZGlmCQkJCQkJCS8qIFBBUlNFTk9ERVNfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvcGFyc2VyL2t3bGlzdC5oIGIvc3JjL2luY2x1ZGUvcGFyc2VyL2t3bGlzdC5oCmluZGV4IGIx MTg0YzJkMTUuLmRkMjJlMzU4YjkgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3BhcnNlci9rd2xp c3QuaAorKysgYi9zcmMvaW5jbHVkZS9wYXJzZXIva3dsaXN0LmgKQEAgLTI0Myw2ICsyNDMsNyBA QCBQR19LRVlXT1JEKCJsb2NhdGlvbiIsIExPQ0FUSU9OLCBVTlJFU0VSVkVEX0tFWVdPUkQpCiBQ R19LRVlXT1JEKCJsb2NrIiwgTE9DS19QLCBVTlJFU0VSVkVEX0tFWVdPUkQpCiBQR19LRVlXT1JE KCJsb2NrZWQiLCBMT0NLRUQsIFVOUkVTRVJWRURfS0VZV09SRCkKIFBHX0tFWVdPUkQoImxvZ2dl ZCIsIExPR0dFRCwgVU5SRVNFUlZFRF9LRVlXT1JEKQorUEdfS0VZV09SRCgibHNuIiwgTFNOLCBV TlJFU0VSVkVEX0tFWVdPUkQpCiBQR19LRVlXT1JEKCJtYXBwaW5nIiwgTUFQUElORywgVU5SRVNF UlZFRF9LRVlXT1JEKQogUEdfS0VZV09SRCgibWF0Y2giLCBNQVRDSCwgVU5SRVNFUlZFRF9LRVlX T1JEKQogUEdfS0VZV09SRCgibWF0ZXJpYWxpemVkIiwgTUFURVJJQUxJWkVELCBVTlJFU0VSVkVE X0tFWVdPUkQpCkBAIC00MDQsNiArNDA1LDcgQEAgUEdfS0VZV09SRCgidGV4dCIsIFRFWFRfUCwg VU5SRVNFUlZFRF9LRVlXT1JEKQogUEdfS0VZV09SRCgidGhlbiIsIFRIRU4sIFJFU0VSVkVEX0tF WVdPUkQpCiBQR19LRVlXT1JEKCJ0aWVzIiwgVElFUywgVU5SRVNFUlZFRF9LRVlXT1JEKQogUEdf S0VZV09SRCgidGltZSIsIFRJTUUsIENPTF9OQU1FX0tFWVdPUkQpCitQR19LRVlXT1JEKCJ0aW1l b3V0IiwgVElNRU9VVCwgVU5SRVNFUlZFRF9LRVlXT1JEKQogUEdfS0VZV09SRCgidGltZXN0YW1w IiwgVElNRVNUQU1QLCBDT0xfTkFNRV9LRVlXT1JEKQogUEdfS0VZV09SRCgidG8iLCBUTywgUkVT RVJWRURfS0VZV09SRCkKIFBHX0tFWVdPUkQoInRyYWlsaW5nIiwgVFJBSUxJTkcsIFJFU0VSVkVE X0tFWVdPUkQpCkBAIC00NDQsNiArNDQ2LDcgQEAgUEdfS0VZV09SRCgidmVyc2lvbiIsIFZFUlNJ T05fUCwgVU5SRVNFUlZFRF9LRVlXT1JEKQogUEdfS0VZV09SRCgidmlldyIsIFZJRVcsIFVOUkVT RVJWRURfS0VZV09SRCkKIFBHX0tFWVdPUkQoInZpZXdzIiwgVklFV1MsIFVOUkVTRVJWRURfS0VZ V09SRCkKIFBHX0tFWVdPUkQoInZvbGF0aWxlIiwgVk9MQVRJTEUsIFVOUkVTRVJWRURfS0VZV09S RCkKK1BHX0tFWVdPUkQoIndhaXQiLCBXQUlULCBVTlJFU0VSVkVEX0tFWVdPUkQpCiBQR19LRVlX T1JEKCJ3aGVuIiwgV0hFTiwgUkVTRVJWRURfS0VZV09SRCkKIFBHX0tFWVdPUkQoIndoZXJlIiwg V0hFUkUsIFJFU0VSVkVEX0tFWVdPUkQpCiBQR19LRVlXT1JEKCJ3aGl0ZXNwYWNlIiwgV0hJVEVT UEFDRV9QLCBVTlJFU0VSVkVEX0tFWVdPUkQpCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS90Y29w L2NtZHRhZ2xpc3QuaCBiL3NyYy9pbmNsdWRlL3Rjb3AvY21kdGFnbGlzdC5oCmluZGV4IGVkNzI3 NzA5NzguLjlhOGFlMTRmZWUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Rjb3AvY21kdGFnbGlz dC5oCisrKyBiL3NyYy9pbmNsdWRlL3Rjb3AvY21kdGFnbGlzdC5oCkBAIC0yMTYsMyArMjE2LDQg QEAgUEdfQ01EVEFHKENNRFRBR19UUlVOQ0FURV9UQUJMRSwgIlRSVU5DQVRFIFRBQkxFIiwgZmFs c2UsIGZhbHNlLCBmYWxzZSkKIFBHX0NNRFRBRyhDTURUQUdfVU5MSVNURU4sICJVTkxJU1RFTiIs IGZhbHNlLCBmYWxzZSwgZmFsc2UpCiBQR19DTURUQUcoQ01EVEFHX1VQREFURSwgIlVQREFURSIs IGZhbHNlLCBmYWxzZSwgdHJ1ZSkKIFBHX0NNRFRBRyhDTURUQUdfVkFDVVVNLCAiVkFDVVVNIiwg ZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfV0FJVCwgIldBSVQgRk9SIiwg ZmFsc2UsIGZhbHNlLCBmYWxzZSkKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlY292ZXJ5L3QvMDE4 X3dhaXRmb3IucGwgYi9zcmMvdGVzdC9yZWNvdmVyeS90LzAxOF93YWl0Zm9yLnBsCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjY4MTc0MzFlOWMKLS0tIC9kZXYvbnVsbAor KysgYi9zcmMvdGVzdC9yZWNvdmVyeS90LzAxOF93YWl0Zm9yLnBsCkBAIC0wLDAgKzEsNjQgQEAK KyMgQ2hlY2tzIFdBSVQgRk9SCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOworCit1c2UgUG9z dGdyZXNOb2RlOwordXNlIFRlc3RMaWI7Cit1c2UgVGVzdDo6TW9yZSB0ZXN0cyA9PiAxOworCisj IEluaXRpYWxpemUgbWFzdGVyIG5vZGUKK215ICRub2RlX21hc3RlciA9IGdldF9uZXdfbm9kZSgn bWFzdGVyJyk7Ciskbm9kZV9tYXN0ZXItPmluaXQoYWxsb3dzX3N0cmVhbWluZyA9PiAxKTsKKyRu b2RlX21hc3Rlci0+c3RhcnQ7CisKKyMgQW5kIHNvbWUgY29udGVudAorJG5vZGVfbWFzdGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFRBQkxFIHRhYl9pbnQgQVMgU0VMRUNUIGdl bmVyYXRlX3NlcmllcygxLCAxMCkgQVMgYSIpOworCisjIFRha2UgYmFja3VwCitteSAkYmFja3Vw X25hbWUgPSAnbXlfYmFja3VwJzsKKyRub2RlX21hc3Rlci0+YmFja3VwKCRiYWNrdXBfbmFtZSk7 CisKKyMgQ3JlYXRlIHN0cmVhbWluZyBzdGFuZGJ5IGZyb20gYmFja3VwCitteSAkbm9kZV9zdGFu ZGJ5ID0gZ2V0X25ld19ub2RlKCdzdGFuZGJ5Jyk7CitteSAkZGVsYXkgICAgICAgID0gNDsKKyRu b2RlX3N0YW5kYnktPmluaXRfZnJvbV9iYWNrdXAoJG5vZGVfbWFzdGVyLCAkYmFja3VwX25hbWUs CisJaGFzX3N0cmVhbWluZyA9PiAxKTsKKyRub2RlX3N0YW5kYnktPmFwcGVuZF9jb25mKAorCSdw b3N0Z3Jlc3FsLmNvbmYnLCBxcSgKK3JlY292ZXJ5X21pbl9hcHBseV9kZWxheSA9ICcke2RlbGF5 fXMnCispKTsKKyRub2RlX3N0YW5kYnktPnN0YXJ0OworCisjIE1ha2UgbmV3IGNvbnRlbnQgb24g bWFzdGVyIGFuZCBjaGVjayBpdHMgcHJlc2VuY2UgaW4gc3RhbmRieSBkZXBlbmRpbmcKKyMgb24g dGhlIGRlbGF5IGFwcGxpZWQgYWJvdmUuIEJlZm9yZSBkb2luZyB0aGUgaW5zZXJ0aW9uLCBnZXQg dGhlCisjIGN1cnJlbnQgdGltZXN0YW1wIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGEgY29tcGFyaXNv biBiYXNlLiBFdmVuIG9uIHNsb3cKKyMgbWFjaGluZXMsIHRoaXMgYWxsb3dzIHRvIGhhdmUgYSBw cmVkaWN0YWJsZSBiZWhhdmlvciB3aGVuIGNvbXBhcmluZyB0aGUKKyMgZGVsYXkgYmV0d2VlbiBk YXRhIGluc2VydGlvbiBtb21lbnQgb24gbWFzdGVyIGFuZCByZXBsYXkgdGltZSBvbiBzdGFuZGJ5 LgorbXkgJG1hc3Rlcl9pbnNlcnRfdGltZSA9IHRpbWUoKTsKKyRub2RlX21hc3Rlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsCisJIklOU0VSVCBJTlRPIHRhYl9pbnQgVkFMVUVTIChnZW5lcmF0ZV9z ZXJpZXMoMTEsIDIwKSkiKTsKKworIyBOb3cgd2FpdCBmb3IgcmVwbGF5IHRvIGNvbXBsZXRlIG9u IHN0YW5kYnkuIFdlJ3JlIGRvbmUgd2FpdGluZyB3aGVuIHRoZQorIyBzdGFuZGJ5IGhhcyByZXBs YXllZCB1cCB0byB0aGUgcHJldmlvdXNseSBzYXZlZCBtYXN0ZXIgTFNOLgorbXkgJHVudGlsX2xz biA9CisgICRub2RlX21hc3Rlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgcGdfY3Vy cmVudF93YWxfbHNuKCkiKTsKKworJG5vZGVfbWFzdGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywK KwkiSU5TRVJUIElOVE8gdGFiX2ludCBWQUxVRVMgKGdlbmVyYXRlX3NlcmllcygyMSwgMzApKSIp OworCisjIENoZWNrIHRoYXQgd2FpdGxzbiBpcyBhYmxlIHRvIHNldHVwIGluZmluaXRlIHdhaXRp bmcgbG9vcCBhbmQgZXhpdAorIyBpdCB3aXRob3V0IHRpbWVvdXRzLgorJG5vZGVfc3RhbmRieS0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisgICAgIldBSVQgRk9SIExTTiAnJHVudGlsX2xzbiciLCAn dCcpCisgIG9yIGRpZSAic3RhbmRieSBuZXZlciBjYXVnaHQgdXAiOworCisjIENoZWNrIHRoYXQg d2FpdGxzbiBjYW4gcmV0dXJuIHJlc3VsdCBpbW1lZGlhdGVseSB3aXRoIE5PV0FJVC4KKyRub2Rl X3N0YW5kYnktPnBvbGxfcXVlcnlfdW50aWwoJ3Bvc3RncmVzJywKKyAgICAiV0FJVCBGT1IgTFNO ICckdW50aWxfbHNuJyBUSU1FT1VUIDEiLCAndCcpCisgIG9yIGRpZSAic3RhbmRieSBuZXZlciBj YXVnaHQgdXAiOworCisjIFRoaXMgdGVzdCBpcyBzdWNjZXNzZnVsIGlmIGFuZCBvbmx5IGlmIHRo ZSBMU04gaGFzIGJlZW4gYXBwbGllZCB3aXRoIGF0IGxlYXN0CisjIHRoZSBjb25maWd1cmVkIGFw cGx5IGRlbGF5LgorbXkgJHRpbWVfd2FpdGVkID0gdGltZSgpIC0gJG1hc3Rlcl9pbnNlcnRfdGlt ZTsKK29rKCR0aW1lX3dhaXRlZCA+PSAkZGVsYXksInN0YW5kYnkgYXBwbGllcyBXQUwgb25seSBh ZnRlciByZXBsaWNhdGlvbiBkZWxheSIpOwo= --=_d151d7b665aa1d20885765683c675644--