Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1jJQHf-0001Ne-LL for pgsql-hackers@arkaria.postgresql.org; Tue, 31 Mar 2020 23:27:04 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1jJQHe-0000rh-Iz for pgsql-hackers@arkaria.postgresql.org; Tue, 31 Mar 2020 23:27:02 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1jJQHd-0000ra-Ry for pgsql-hackers@lists.postgresql.org; Tue, 31 Mar 2020 23:27:02 +0000 Received: from cyclops.postgrespro.ru ([93.174.131.138] helo=mail.postgrespro.ru) by makus.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1jJQHZ-0006YJ-8V for pgsql-hackers@lists.postgresql.org; Tue, 31 Mar 2020 23:27:00 +0000 Received: from localhost (localhost [127.0.0.1]) by mail.postgrespro.ru (Postfix) with ESMTP id 09BB721C574D for ; Wed, 1 Apr 2020 02:26:55 +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 C50C721C5738 for ; Wed, 1 Apr 2020 02:26:54 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mail; t=1585697214; bh=xGBYy6eGD449L39OkanE7TOa+KKbDztPMvtRRxrcrJ4=; h=Date:From:To:Subject:In-Reply-To:References; b=m/BBkwFTYlGlCmz9+Xz+6lhXa07max73EkwI5qQle14YzJF0ZCjXdv2/sBElqUVmX QNOAH7cqNYfl2tTdMzcPfjUdJokFVE8Wqwf8rvKjcD7/+2823qYJlP+gWI7ZQGlAQF A9ILEWge9CjMWAKeXr8UwWX1q9x3PxYWZSjETdDo= MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=_0292e02f3090f7c5ba6f5fef38e2041f" Content-Transfer-Encoding: 7bit Date: Wed, 01 Apr 2020 02:26:54 +0300 From: Anna Akenteva To: pgsql-hackers@lists.postgresql.org Subject: Re: [HACKERS] make async slave to wait for lsn to be replayed In-Reply-To: References: <80f267591b373db5588d580fdfb432f0@postgrespro.ru> <20200306.145445.1788163547829857988.horikyota.ntt@gmail.com> <3cc883048264c2e9af022033925ff8db@postgrespro.ru> User-Agent: Roundcube Webmail/1.4.0 Message-ID: <674ad239b725a11d89c21574e44e376b@postgrespro.ru> X-Sender: a.akenteva@postgrespro.ru Organization: Postgres Professional List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --=_0292e02f3090f7c5ba6f5fef38e2041f Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed On 2020-03-27 04:15, Kartyshov Ivan wrote: > Anna, feel free to work on this patch. Ivan and I worked on this patch a bit more. We fixed the bugs that we could find and cleaned up the code. For now, we've kept both options: WAIT as a standalone statement and WAIT as a part of BEGIN. The new patch is attached. The syntax looks a bit different now: - WAIT FOR [ANY | ALL] event [, ...] - BEGIN [ WORK | TRANSACTION ] [ transaction_mode [, ...] ] [ WAIT FOR [ANY | ALL] event [, ...]] where event is one of: LSN value TIMEOUT number_of_milliseconds timestamp Now, one event cannot contain both an LSN and a TIMEOUT. With such syntax, the behaviour seems to make sense. For the (default) WAIT FOR ALL strategy, we pick the maximum LSN and maximum allowed timeout, and wait for the LSN till the timeout is over. If no timeout is specified, we wait forever. If no LSN is specified, we just wait for the time to pass. For the WAIT FOR ANY strategy, it's the same but we pick minimum LSN and timeout. There are still some questions left: 1) Should we only keep the BEGIN option, or does the standalone command have potential after all? 2) Should we change the grammar so that WAIT can be in any position of the BEGIN statement, not necessarily in the end? Ivan and I haven't come to a consensus about this, so more opinions would be helpful. 3) Since we added the "wait" attribute to TransactionStmt struct, do we need to add something to _copyTransactionStmt() / _equalTransactionStmt()? -- Anna Akenteva Postgres Professional: The Russian Postgres Company http://www.postgrespro.com --=_0292e02f3090f7c5ba6f5fef38e2041f Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=begin_waitfor_v3.patch Content-Disposition: attachment; filename=begin_waitfor_v3.patch; size=39107 ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvYWxsZmlsZXMuc2dtbCBiL2RvYy9zcmMvc2dt bC9yZWYvYWxsZmlsZXMuc2dtbAppbmRleCA4ZDkxZjM1MjllNi4uODY5N2Y5ODA3ZmYgMTAwNjQ0 Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvYWxsZmlsZXMuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwv cmVmL2FsbGZpbGVzLnNnbWwKQEAgLTE4Nyw2ICsxODcsNyBAQCBDb21wbGV0ZSBsaXN0IG9mIHVz YWJsZSBzZ21sIHNvdXJjZSBmaWxlcyBpbiB0aGlzIGRpcmVjdG9yeS4KIDwhRU5USVRZIHVwZGF0 ZSAgICAgICAgICAgICBTWVNURU0gInVwZGF0ZS5zZ21sIj4KIDwhRU5USVRZIHZhY3V1bSAgICAg ICAgICAgICBTWVNURU0gInZhY3V1bS5zZ21sIj4KIDwhRU5USVRZIHZhbHVlcyAgICAgICAgICAg ICBTWVNURU0gInZhbHVlcy5zZ21sIj4KKzwhRU5USVRZIHdhaXQgICAgICAgICAgICAgICBTWVNU RU0gIndhaXQuc2dtbCI+CiAKIDwhLS0gYXBwbGljYXRpb25zIGFuZCB1dGlsaXRpZXMgLS0+CiA8 IUVOVElUWSBjbHVzdGVyZGIgICAgICAgICAgU1lTVEVNICJjbHVzdGVyZGIuc2dtbCI+CmRpZmYg LS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL2JlZ2luLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVmL2Jl Z2luLnNnbWwKaW5kZXggYzIzYmJmYjRlNzEuLjU1OGZmNjY4ZGJkIDEwMDY0NAotLS0gYS9kb2Mv c3JjL3NnbWwvcmVmL2JlZ2luLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9iZWdpbi5zZ21s CkBAIC0yMSwxMyArMjEsMjEgQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAKICA8cmVmc3lu b3BzaXNkaXY+CiA8c3lub3BzaXM+Ci1CRUdJTiBbIFdPUksgfCBUUkFOU0FDVElPTiBdIFsgPHJl cGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnRyYW5zYWN0aW9uX21vZGU8L3JlcGxhY2VhYmxl PiBbLCAuLi5dIF0KK0JFR0lOIFsgV09SSyB8IFRSQU5TQUNUSU9OIF0gWyA8cmVwbGFjZWFibGUg Y2xhc3M9InBhcmFtZXRlciI+dHJhbnNhY3Rpb25fbW9kZTwvcmVwbGFjZWFibGU+IFssIC4uLl0g XSA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+d2FpdF9mb3JfZXZlbnQ8L3JlcGxhY2Vh YmxlPgogCiA8cGhyYXNlPndoZXJlIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj50cmFu c2FjdGlvbl9tb2RlPC9yZXBsYWNlYWJsZT4gaXMgb25lIG9mOjwvcGhyYXNlPgogCiAgICAgSVNP TEFUSU9OIExFVkVMIHsgU0VSSUFMSVpBQkxFIHwgUkVQRUFUQUJMRSBSRUFEIHwgUkVBRCBDT01N SVRURUQgfCBSRUFEIFVOQ09NTUlUVEVEIH0KICAgICBSRUFEIFdSSVRFIHwgUkVBRCBPTkxZCiAg ICAgWyBOT1QgXSBERUZFUlJBQkxFCisKKzxwaHJhc2U+YW5kIDxyZXBsYWNlYWJsZSBjbGFzcz0i cGFyYW1ldGVyIj53YWl0X2Zvcl9ldmVudDwvcmVwbGFjZWFibGU+IGlzOjwvcGhyYXNlPgorICAg IFdBSVQgRk9SIFtBTlkgfCBBTExdIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5ldmVu dDwvcmVwbGFjZWFibGU+IFssIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5ldmVudDwv cmVwbGFjZWFibGU+IC4uLl0KKworPHBocmFzZT53aGVyZSA8cmVwbGFjZWFibGUgY2xhc3M9InBh cmFtZXRlciI+ZXZlbnQ8L3JlcGxhY2VhYmxlPiBpcyBvbmUgb2Y6PC9waHJhc2U+CisgICAgTFNO IGxzbl92YWx1ZQorICAgIFRJTUVPVVQgbnVtYmVyX29mX21pbGxpc2Vjb25kcworICAgIHRpbWVz dGFtcAogPC9zeW5vcHNpcz4KICA8L3JlZnN5bm9wc2lzZGl2PgogCmRpZmYgLS1naXQgYS9kb2Mv c3JjL3NnbWwvcmVmL3N0YXJ0X3RyYW5zYWN0aW9uLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVmL3N0 YXJ0X3RyYW5zYWN0aW9uLnNnbWwKaW5kZXggZDZjZDFkNDE3NzkuLmU1ZTJlMTVjZGYwIDEwMDY0 NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL3N0YXJ0X3RyYW5zYWN0aW9uLnNnbWwKKysrIGIvZG9j L3NyYy9zZ21sL3JlZi9zdGFydF90cmFuc2FjdGlvbi5zZ21sCkBAIC0yMSwxMyArMjEsMjEgQEAg UG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAKICA8cmVmc3lub3BzaXNkaXY+CiA8c3lub3BzaXM+ Ci1TVEFSVCBUUkFOU0FDVElPTiBbIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj50cmFu c2FjdGlvbl9tb2RlPC9yZXBsYWNlYWJsZT4gWywgLi4uXSBdCitTVEFSVCBUUkFOU0FDVElPTiBb IDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj50cmFuc2FjdGlvbl9tb2RlPC9yZXBsYWNl YWJsZT4gWywgLi4uXSBdIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj53YWl0X2Zvcl9l dmVudDwvcmVwbGFjZWFibGU+CiAKIDxwaHJhc2U+d2hlcmUgPHJlcGxhY2VhYmxlIGNsYXNzPSJw YXJhbWV0ZXIiPnRyYW5zYWN0aW9uX21vZGU8L3JlcGxhY2VhYmxlPiBpcyBvbmUgb2Y6PC9waHJh c2U+CiAKICAgICBJU09MQVRJT04gTEVWRUwgeyBTRVJJQUxJWkFCTEUgfCBSRVBFQVRBQkxFIFJF QUQgfCBSRUFEIENPTU1JVFRFRCB8IFJFQUQgVU5DT01NSVRURUQgfQogICAgIFJFQUQgV1JJVEUg fCBSRUFEIE9OTFkKICAgICBbIE5PVCBdIERFRkVSUkFCTEUKKworPHBocmFzZT5hbmQgPHJlcGxh Y2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPndhaXRfZm9yX2V2ZW50PC9yZXBsYWNlYWJsZT4gaXM6 PC9waHJhc2U+CisgICAgV0FJVCBGT1IgW0FOWSB8IEFMTF0gPHJlcGxhY2VhYmxlIGNsYXNzPSJw YXJhbWV0ZXIiPmV2ZW50PC9yZXBsYWNlYWJsZT4gWywgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJh bWV0ZXIiPmV2ZW50PC9yZXBsYWNlYWJsZT4gLi4uXQorCis8cGhyYXNlPndoZXJlIDxyZXBsYWNl YWJsZSBjbGFzcz0icGFyYW1ldGVyIj5ldmVudDwvcmVwbGFjZWFibGU+IGlzIG9uZSBvZjo8L3Bo cmFzZT4KKyAgICBMU04gbHNuX3ZhbHVlCisgICAgVElNRU9VVCBudW1iZXJfb2ZfbWlsbGlzZWNv bmRzCisgICAgdGltZXN0YW1wCiA8L3N5bm9wc2lzPgogIDwvcmVmc3lub3BzaXNkaXY+CiAKZGlm ZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvd2FpdC5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi93 YWl0LnNnbWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjBlNWJkMjUy M2Q2Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi93YWl0LnNnbWwKQEAgLTAs MCArMSwxNDYgQEAKKzwhLS0KK2RvYy9zcmMvc2dtbC9yZWYvd2FpdGxzbi5zZ21sCitQb3N0Z3Jl U1FMIGRvY3VtZW50YXRpb24KKy0tPgorCis8cmVmZW50cnkgaWQ9InNxbC13YWl0bHNuIj4KKyA8 aW5kZXh0ZXJtIHpvbmU9InNxbC13YWl0bHNuIj4KKyAgPHByaW1hcnk+V0FJVCBGT1I8L3ByaW1h cnk+CisgPC9pbmRleHRlcm0+CisKKyA8cmVmbWV0YT4KKyAgPHJlZmVudHJ5dGl0bGU+V0FJVCBG T1I8L3JlZmVudHJ5dGl0bGU+CisgIDxtYW52b2xudW0+NzwvbWFudm9sbnVtPgorICA8cmVmbWlz Y2luZm8+U1FMIC0gTGFuZ3VhZ2UgU3RhdGVtZW50czwvcmVmbWlzY2luZm8+CisgPC9yZWZtZXRh PgorCisgPHJlZm5hbWVkaXY+CisgIDxyZWZuYW1lPldBSVQgRk9SPC9yZWZuYW1lPgorICA8cmVm cHVycG9zZT53YWl0IGZvciB0aGUgdGFyZ2V0IDxhY3JvbnltPkxTTjwvYWNyb255bT4gdG8gYmUg cmVwbGF5ZWQ8L3JlZnB1cnBvc2U+CisgPC9yZWZuYW1lZGl2PgorCisgPHJlZnN5bm9wc2lzZGl2 PgorPHN5bm9wc2lzPgorV0FJVCBGT1IgW0FOWSB8IEFMTF0gPHJlcGxhY2VhYmxlIGNsYXNzPSJw YXJhbWV0ZXIiPmV2ZW50PC9yZXBsYWNlYWJsZT4gWywgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJh bWV0ZXIiPmV2ZW50PC9yZXBsYWNlYWJsZT4gLi4uXQorCis8cGhyYXNlPndoZXJlIDxyZXBsYWNl YWJsZSBjbGFzcz0icGFyYW1ldGVyIj5ldmVudDwvcmVwbGFjZWFibGU+IGlzIG9uZSBvZjo8L3Bo cmFzZT4KKyAgICBMU04gdmFsdWUKKyAgICBUSU1FT1VUIG51bWJlcl9vZl9taWxsaXNlY29uZHMK KyAgICB0aW1lc3RhbXAKKworV0FJVCBGT1IgTFNOICc8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFt ZXRlciI+bHNuX251bWJlcjwvcmVwbGFjZWFibGU+JworV0FJVCBGT1IgTFNOICc8cmVwbGFjZWFi bGUgY2xhc3M9InBhcmFtZXRlciI+bHNuX251bWJlcjwvcmVwbGFjZWFibGU+JyBUSU1FT1VUIDxy ZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj53YWl0X3RpbWVvdXQ8L3JlcGxhY2VhYmxlPgor V0FJVCBGT1IgTFNOICc8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bHNuX251bWJlcjwv cmVwbGFjZWFibGU+JywgVElNRVNUQU1QIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj53 YWl0X3RpbWU8L3JlcGxhY2VhYmxlPgorV0FJVCBGT1IgVElNRVNUQU1QIDxyZXBsYWNlYWJsZSBj bGFzcz0icGFyYW1ldGVyIj53YWl0X3RpbWU8L3JlcGxhY2VhYmxlPgorV0FJVCBGT1IgQUxMIExT TiAnPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmxzbl9udW1iZXI8L3JlcGxhY2VhYmxl PicgVElNRU9VVCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+d2FpdF90aW1lb3V0PC9y ZXBsYWNlYWJsZT4sIFRJTUVTVEFNUCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+d2Fp dF90aW1lPC9yZXBsYWNlYWJsZT4KK1dBSVQgRk9SIEFOWSBMU04gJzxyZXBsYWNlYWJsZSBjbGFz cz0icGFyYW1ldGVyIj5sc25fbnVtYmVyPC9yZXBsYWNlYWJsZT4nLCBUSU1FU1RBTVAgPHJlcGxh Y2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPndhaXRfdGltZTwvcmVwbGFjZWFibGU+Cis8L3N5bm9w c2lzPgorIDwvcmVmc3lub3BzaXNkaXY+CisKKyA8cmVmc2VjdDE+CisgIDx0aXRsZT5EZXNjcmlw dGlvbjwvdGl0bGU+CisKKyAgPHBhcmE+CisgICA8Y29tbWFuZD5XQUlUIEZPUjwvY29tbWFuZD4g cHJvdmlkZXMgYSBzaW1wbGUgaW50ZXJwcm9jZXNzIGNvbW11bmljYXRpb24KKyAgIG1lY2hhbmlz bSB0byB3YWl0IGZvciB0aW1lc3RhbXAsIHRpbWVvdXQgb3IgdGhlIHRhcmdldCBsb2cgc2VxdWVu Y2UgbnVtYmVyCisgICAoPGFjcm9ueW0+TFNOPC9hY3JvbnltPikgb24gc3RhbmRieSBpbiA8cHJv ZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+CisgICBkYXRhYmFzZXMgd2l0aCBtYXN0 ZXItc3RhbmRieSBhc3luY2hyb25vdXMgcmVwbGljYXRpb24uIFdoZW4gcnVuIHdpdGggdGhlCisg ICA8cmVwbGFjZWFibGU+TFNOPC9yZXBsYWNlYWJsZT4gb3B0aW9uLCB0aGUgPGNvbW1hbmQ+V0FJ VCBGT1I8L2NvbW1hbmQ+CisgICBjb21tYW5kIHdhaXRzIGZvciB0aGUgc3BlY2lmaWVkIDxhY3Jv bnltPkxTTjwvYWNyb255bT4gdG8gYmUgcmVwbGF5ZWQuCisgICBJZiBubyB0aW1lc3RhbXAgb3Ig dGltZW91dCB3YXMgc3BlY2lmaWVkLCB3YWl0IHRpbWUgaXMgdW5saW1pdGVkLgorICAgV2FpdGlu ZyBjYW4gYmUgaW50ZXJydXB0ZWQgdXNpbmcgPGxpdGVyYWw+Q3RybCtDPC9saXRlcmFsPiwgb3IK KyAgIGJ5IHNodXR0aW5nIGRvd24gdGhlIDxsaXRlcmFsPnBvc3RncmVzPC9saXRlcmFsPiBzZXJ2 ZXIuCisgIDwvcGFyYT4KKworIDwvcmVmc2VjdDE+CisKKyA8cmVmc2VjdDE+CisgIDx0aXRsZT5Q YXJhbWV0ZXJzPC90aXRsZT4KKworICA8dmFyaWFibGVsaXN0PgorICAgPHZhcmxpc3RlbnRyeT4K KyAgICA8dGVybT48cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+TFNOPC9yZXBsYWNlYWJs ZT48L3Rlcm0+CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIFNwZWNpZnkgdGhl IHRhcmdldCBsb2cgc2VxdWVuY2UgbnVtYmVyIHRvIHdhaXQgZm9yLgorICAgICA8L3BhcmE+Cisg ICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFybGlzdGVudHJ5Pgor ICAgIDx0ZXJtPlRJTUVPVVQgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPndhaXRfdGlt ZW91dDwvcmVwbGFjZWFibGU+PC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+Cisg ICAgICBMaW1pdCB0aGUgdGltZSBpbnRlcnZhbCB0byB3YWl0IGZvciB0aGUgTFNOIHRvIGJlIHJl cGxheWVkLgorICAgICAgVGhlIHNwZWNpZmllZCA8cmVwbGFjZWFibGU+d2FpdF90aW1lb3V0PC9y ZXBsYWNlYWJsZT4gbXVzdCBiZSBhbiBpbnRlZ2VyCisgICAgICBhbmQgaXMgbWVhc3VyZWQgaW4g bWlsbGlzZWNvbmRzLgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlz dGVudHJ5PgorCisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPlVOVElMIFRJTUVTVEFNUCA8 cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+d2FpdF90aW1lPC9yZXBsYWNlYWJsZT48L3Rl cm0+CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIExpbWl0IHRoZSB0aW1lIHRv IHdhaXQgZm9yIHRoZSBMU04gdG8gYmUgcmVwbGF5ZWQuCisgICAgICBUaGUgc3BlY2lmaWVkIDxy ZXBsYWNlYWJsZT53YWl0X3RpbWU8L3JlcGxhY2VhYmxlPiBtdXN0IGJlIHRpbWVzdGFtcC4KKyAg ICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICA8L3Zh cmlhYmxlbGlzdD4KKyA8L3JlZnNlY3QxPgorCisgPHJlZnNlY3QxPgorICA8dGl0bGU+RXhhbXBs ZXM8L3RpdGxlPgorCisgIDxwYXJhPgorICAgUnVuIDxsaXRlcmFsPldBSVQgRk9SPC9saXRlcmFs PiBmcm9tIDxhcHBsaWNhdGlvbj5wc3FsPC9hcHBsaWNhdGlvbj4sCisgICBsaW1pdGluZyB3YWl0 IHRpbWUgdG8gMTAwMDAgbWlsbGlzZWNvbmRzOgorCis8c2NyZWVuPgorV0FJVCBGT1IgTFNOICcw LzNGMDdBNkIxJyBUSU1FT1VUIDEwMDAwOworTk9USUNFOiAgTFNOIGlzIG5vdCByZWFjaGVkLiBU cnkgdG8gaW5jcmVhc2Ugd2FpdCB0aW1lLgorTFNOIHJlYWNoZWQKKy0tLS0tLS0tLS0tLS0KKyBm CisoMSByb3cpCis8L3NjcmVlbj4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgV2FpdCB1bnRp bCB0aGUgc3BlY2lmaWVkIDxhY3JvbnltPkxTTjwvYWNyb255bT4gaXMgcmVwbGF5ZWQ6Cis8c2Ny ZWVuPgorV0FJVCBGT1IgTFNOICcwLzNGMDdBNjExJzsKK0xTTiByZWFjaGVkCistLS0tLS0tLS0t LS0tCisgdAorKDEgcm93KQorPC9zY3JlZW4+CisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIExp bWl0IDxhY3JvbnltPkxTTjwvYWNyb255bT4gd2FpdCB0aW1lIHRvIDUwMDAwMCBtaWxsaXNlY29u ZHMsCisgICBhbmQgdGhlbiBjYW5jZWwgdGhlIGNvbW1hbmQgaWYgPGFjcm9ueW0+TFNOPC9hY3Jv bnltPiB3YXMgbm90IHJlYWNoZWQ6Cis8c2NyZWVuPgorV0FJVCBGT1IgTFNOICcwLzNGMEZGNzkx JyBUSU1FT1VUIDUwMDAwMDsKK15DQ2FuY2VsIHJlcXVlc3Qgc2VudAorTk9USUNFOiAgTFNOIGlz IG5vdCByZWFjaGVkLiBUcnkgdG8gaW5jcmVhc2Ugd2FpdCB0aW1lLgorRVJST1I6ICBjYW5jZWxp bmcgc3RhdGVtZW50IGR1ZSB0byB1c2VyIHJlcXVlc3QKKyBMU04gcmVhY2hlZAorLS0tLS0tLS0t LS0tLQorIGYKKygxIHJvdykKKzwvc2NyZWVuPgorPC9wYXJhPgorIDwvcmVmc2VjdDE+CisKKyA8 cmVmc2VjdDE+CisgIDx0aXRsZT5Db21wYXRpYmlsaXR5PC90aXRsZT4KKworICA8cGFyYT4KKyAg IFRoZXJlIGlzIG5vIDxjb21tYW5kPldBSVQgRk9SPC9jb21tYW5kPiBzdGF0ZW1lbnQgaW4gdGhl IFNRTAorICAgc3RhbmRhcmQuCisgIDwvcGFyYT4KKyA8L3JlZnNlY3QxPgorPC9yZWZlbnRyeT4K ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWZlcmVuY2Uuc2dtbCBiL2RvYy9zcmMvc2dtbC9y ZWZlcmVuY2Uuc2dtbAppbmRleCBjZWYwOWRkMzhiMy4uNTg4ZTk2YWExNDMgMTAwNjQ0Ci0tLSBh L2RvYy9zcmMvc2dtbC9yZWZlcmVuY2Uuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmZXJlbmNl LnNnbWwKQEAgLTIxNSw2ICsyMTUsNyBAQAogICAgJnVwZGF0ZTsKICAgICZ2YWN1dW07CiAgICAm dmFsdWVzOworICAgJndhaXQ7CiAKICA8L3JlZmVyZW5jZT4KIApkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0v eGxvZy5jCmluZGV4IDhmZTkyOTYyYjBkLi5iOGU4ODRjY2M0ZiAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFu c2FtL3hsb2cuYwpAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgImNhdGFsb2cvcGdfZGF0YWJh c2UuaCIKICNpbmNsdWRlICJjb21tYW5kcy9wcm9ncmVzcy5oIgogI2luY2x1ZGUgImNvbW1hbmRz L3RhYmxlc3BhY2UuaCIKKyNpbmNsdWRlICJjb21tYW5kcy93YWl0LmgiCiAjaW5jbHVkZSAiY29t bW9uL2NvbnRyb2xkYXRhX3V0aWxzLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVk ZSAicGdfdHJhY2UuaCIKQEAgLTczMTIsNiArNzMxMywxNSBAQCBTdGFydHVwWExPRyh2b2lkKQog CQkJCQlicmVhazsKIAkJCQl9CiAKKwkJCQkvKgorCQkJCSAqIElmIHdlIHJlcGxheWVkIGFuIExT TiB0aGF0IHNvbWVvbmUgd2FzIHdhaXRpbmcgZm9yLAorCQkJCSAqIHNldCBsYXRjaGVzIGluIHNo YXJlZCBtZW1vcnkgYXJyYXkgdG8gbm90aWZ5IHRoZSB3YWl0ZXIuCisJCQkJICovCisJCQkJaWYg KFhMb2dDdGwtPmxhc3RSZXBsYXllZEVuZFJlY1B0ciA+PSBHZXRNaW5XYWl0KCkpCisJCQkJewor CQkJCQlXYWl0U2V0TGF0Y2goWExvZ0N0bC0+bGFzdFJlcGxheWVkRW5kUmVjUHRyKTsKKwkJCQl9 CisKIAkJCQkvKiBFbHNlLCB0cnkgdG8gZmV0Y2ggdGhlIG5leHQgV0FMIHJlY29yZCAqLwogCQkJ CXJlY29yZCA9IFJlYWRSZWNvcmQoeGxvZ3JlYWRlciwgTE9HLCBmYWxzZSk7CiAJCQl9IHdoaWxl IChyZWNvcmQgIT0gTlVMTCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9NYWtl ZmlsZSBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL01ha2VmaWxlCmluZGV4IGQ0ODE1ZDNjZTY1Li45 YjMxMDkyNmMxMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvTWFrZWZpbGUKKysr IGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvTWFrZWZpbGUKQEAgLTU3LDYgKzU3LDcgQEAgT0JKUyA9 IFwKIAl1c2VyLm8gXAogCXZhY3V1bS5vIFwKIAl2YXJpYWJsZS5vIFwKLQl2aWV3Lm8KKwl2aWV3 Lm8gXAorCXdhaXQubwogCiBpbmNsdWRlICQodG9wX3NyY2Rpcikvc3JjL2JhY2tlbmQvY29tbW9u Lm1rCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy93YWl0LmMgYi9zcmMvYmFja2Vu ZC9jb21tYW5kcy93YWl0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu LmJkNGY1NzYzMGViCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvd2Fp dC5jCkBAIC0wLDAgKzEsNDEwIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiB3YWl0LmMK KyAqCSAgSW1wbGVtZW50cyBXQUlUIEZPUiwgd2hpY2ggYWxsb3dzCisgKgkgIHdhaXRpbmcgZm9y IExTTiB0byBoYXZlIGJlZW4gcmVwbGF5ZWQgb24gcmVwbGljYS4KKyAqCisgKiBQb3J0aW9ucyBD b3B5cmlnaHQgKGMpIDE5OTYtMjAyMCwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3Jv dXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAyMCwgUmVnZW50cyBvZiBQb3N0Z3Jlc1By bworICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3dhaXQu YworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpbmNsdWRlIDxmbG9hdC5oPgorI2lu Y2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorI2luY2x1ZGUgInBnc3RhdC5o IgorI2luY2x1ZGUgImZtZ3IuaCIKKyNpbmNsdWRlICJhY2Nlc3MvdHJhbnNhbS5oIgorI2luY2x1 ZGUgImFjY2Vzcy94YWN0LmgiCisjaW5jbHVkZSAiYWNjZXNzL3hsb2dkZWZzLmgiCisjaW5jbHVk ZSAiYWNjZXNzL3hsb2cuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3R5cGUuaCIKKyNpbmNsdWRl ICJjb21tYW5kcy93YWl0LmgiCisjaW5jbHVkZSAiZnVuY2FwaS5oIgorI2luY2x1ZGUgIm1pc2Nh ZG1pbi5oIgorI2luY2x1ZGUgInN0b3JhZ2UvYmFja2VuZGlkLmgiCisjaW5jbHVkZSAic3RvcmFn ZS9pcGMuaCIKKyNpbmNsdWRlICJzdG9yYWdlL2xhdGNoLmgiCisjaW5jbHVkZSAic3RvcmFnZS9w bXNpZ25hbC5oIgorI2luY2x1ZGUgInN0b3JhZ2UvcHJvYy5oIgorI2luY2x1ZGUgInN0b3JhZ2Uv c2htZW0uaCIKKyNpbmNsdWRlICJzdG9yYWdlL3NwaW4uaCIKKyNpbmNsdWRlICJzdG9yYWdlL3Np bnZhbGFkdC5oIgorI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCisjaW5jbHVkZSAidXRpbHMv cGdfbHNuLmgiCisjaW5jbHVkZSAidXRpbHMvdGltZXN0YW1wLmgiCisjaW5jbHVkZSAiZXhlY3V0 b3Ivc3BpLmgiCisjaW5jbHVkZSAidXRpbHMvZm1ncnByb3Rvcy5oIgorCisvKiBBZGQgdG8gLyBk ZWxldGUgZnJvbSBzaG1lbSBhcnJheSAqLworc3RhdGljIHZvaWQgQWRkRXZlbnQoWExvZ1JlY1B0 ciB0cmdfbHNuKTsKK3N0YXRpYyB2b2lkIERlbGV0ZUV2ZW50KHZvaWQpOworCisvKiBTaGFyZWQg bWVtb3J5IHN0cnVjdHVyZXMgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJWExvZ1JlY1B0cgl0cmdf bHNuOworCS8qCisJICogTGVmdCBzdHJ1Y3QgQklEU3RhdGUgaGVyZSBmb3IgY29tcGF0aWJpbGl0 eSB3aXRoCisJICogYSBwbGFubmVkIGZ1dHVyZSBwYXRjaCB0aGF0IHdpbGwgYWxsb3cgd2FpdGlu ZyBmb3IgWElEcy4KKwkgKi8KK30gQklEU3RhdGU7CisKK3R5cGVkZWYgc3RydWN0Cit7CisJaW50 CQkJYmFja2VuZF9tYXhpZDsKKwlYTG9nUmVjUHRyCW1pbl9sc247CisJc2xvY2tfdAkJbXV0ZXg7 CisJQklEU3RhdGUJZXZlbnRfYXJyW0ZMRVhJQkxFX0FSUkFZX01FTUJFUl07Cit9IFdhaXRTdGF0 ZTsKKworc3RhdGljIHZvbGF0aWxlIFdhaXRTdGF0ZSAqc3RhdGU7CisKKy8qIEFkZCBldmVudCBv ZiB0aGUgY3VycmVudCBiYWNrZW5kIHRvIHNobWVtIGFycmF5ICovCitzdGF0aWMgdm9pZAorQWRk RXZlbnQoWExvZ1JlY1B0ciB0cmdfbHNuKQoreworCVNwaW5Mb2NrQWNxdWlyZSgmc3RhdGUtPm11 dGV4KTsKKwlpZiAoc3RhdGUtPmJhY2tlbmRfbWF4aWQgPCBNeUJhY2tlbmRJZCkKKwkJc3RhdGUt PmJhY2tlbmRfbWF4aWQgPSBNeUJhY2tlbmRJZDsKKworCXN0YXRlLT5ldmVudF9hcnJbTXlCYWNr ZW5kSWRdLnRyZ19sc24gPSB0cmdfbHNuOworCisJaWYgKHRyZ19sc24gPCBzdGF0ZS0+bWluX2xz bikKKwkJc3RhdGUtPm1pbl9sc24gPSB0cmdfbHNuOworCVNwaW5Mb2NrUmVsZWFzZSgmc3RhdGUt Pm11dGV4KTsKK30KKworLyoKKyAqIERlbGV0ZSBldmVudCBvZiB0aGUgY3VycmVudCBiYWNrZW5k IGZyb20gdGhlIHNoYXJlZCBhcnJheS4KKyAqCisgKiBUT0RPOiBDb25zaWRlciBzdGF0ZSBjbGVh bnVwIG9uIGJhY2tlbmQgZmFpbHVyZS4KKyAqLworc3RhdGljIHZvaWQKK0RlbGV0ZUV2ZW50KHZv aWQpCit7CisJaW50CQkJaTsKKwlYTG9nUmVjUHRyCXRyZ19sc24gPSBzdGF0ZS0+ZXZlbnRfYXJy W015QmFja2VuZElkXS50cmdfbHNuOworCisJc3RhdGUtPmV2ZW50X2FycltNeUJhY2tlbmRJZF0u dHJnX2xzbiA9IEludmFsaWRYTG9nUmVjUHRyOworCisJU3BpbkxvY2tBY3F1aXJlKCZzdGF0ZS0+ bXV0ZXgpOworCS8qIFVwZGF0ZSBzdGF0ZS0+bWluX2xzbiBpZmYgaXQgaXMgbmVzc2VzYXJ5IGZv ciBjaG9vc2luZyBuZXh0IG1pbl9sc24gKi8KKwlpZiAoc3RhdGUtPm1pbl9sc24gPT0gdHJnX2xz bikKKwl7CisJCXN0YXRlLT5taW5fbHNuID0gUEdfVUlOVDY0X01BWDsKKwkJZm9yIChpID0gMjsg aSA8PSBzdGF0ZS0+YmFja2VuZF9tYXhpZDsgaSsrKQorCQkJaWYgKHN0YXRlLT5ldmVudF9hcnJb aV0udHJnX2xzbiAhPSBJbnZhbGlkWExvZ1JlY1B0ciAmJgorCQkJCXN0YXRlLT5ldmVudF9hcnJb aV0udHJnX2xzbiA8IHN0YXRlLT5taW5fbHNuKQorCQkJCXN0YXRlLT5taW5fbHNuID0gc3RhdGUt PmV2ZW50X2FycltpXS50cmdfbHNuOworCX0KKworCWlmIChzdGF0ZS0+YmFja2VuZF9tYXhpZCA9 PSBNeUJhY2tlbmRJZCkKKwkJZm9yIChpID0gKE15QmFja2VuZElkKTsgaSA+PSAyOyBpLS0pCisJ CQlpZiAoc3RhdGUtPmV2ZW50X2FycltpXS50cmdfbHNuICE9IEludmFsaWRYTG9nUmVjUHRyKQor CQkJeworCQkJCXN0YXRlLT5iYWNrZW5kX21heGlkID0gaTsKKwkJCQlicmVhazsKKwkJCX0KKwor CVNwaW5Mb2NrUmVsZWFzZSgmc3RhdGUtPm11dGV4KTsKK30KKworLyoKKyAqIFJlcG9ydCBhbW91 bnQgb2Ygc2hhcmVkIG1lbW9yeSBzcGFjZSBuZWVkZWQgZm9yIFdhaXRTdGF0ZQorICovCitTaXpl CitXYWl0U2htZW1TaXplKHZvaWQpCit7CisJU2l6ZQkJc2l6ZTsKKworCXNpemUgPSBvZmZzZXRv ZihXYWl0U3RhdGUsIGV2ZW50X2Fycik7CisJc2l6ZSA9IGFkZF9zaXplKHNpemUsIG11bF9zaXpl KE1heEJhY2tlbmRzICsgMSwgc2l6ZW9mKEJJRFN0YXRlKSkpOworCXJldHVybiBzaXplOworfQor CisvKiBJbml0IGFycmF5IG9mIGV2ZW50cyBpbiBzaGFyZWQgbWVtb3J5ICovCit2b2lkCitXYWl0 U2htZW1Jbml0KHZvaWQpCit7CisJYm9vbAkJZm91bmQ7CisJdWludDMyCQlpOworCisJc3RhdGUg PSAoV2FpdFN0YXRlICopIFNobWVtSW5pdFN0cnVjdCgicGdfd2FpdF9sc24iLAorCQkJCQkJCQkJ CSAgV2FpdFNobWVtU2l6ZSgpLAorCQkJCQkJCQkJCSAgJmZvdW5kKTsKKwlpZiAoIWZvdW5kKQor CXsKKwkJU3BpbkxvY2tJbml0KCZzdGF0ZS0+bXV0ZXgpOworCisJCWZvciAoaSA9IDA7IGkgPCAo TWF4QmFja2VuZHMrMSk7IGkrKykKKwkJCXN0YXRlLT5ldmVudF9hcnJbaV0udHJnX2xzbiA9IElu dmFsaWRYTG9nUmVjUHRyOworCisJCXN0YXRlLT5iYWNrZW5kX21heGlkID0gMDsKKwkJc3RhdGUt Pm1pbl9sc24gPSBQR19VSU5UNjRfTUFYOworCX0KK30KKworLyogU2V0IGFsbCBsYXRjaGVzIGlu IHNoYXJlZCBtZW1vcnkgdG8gc2lnbmFsIHRoYXQgbmV3IExTTiBoYXMgYmVlbiByZXBsYXllZCAq Lwordm9pZAorV2FpdFNldExhdGNoKFhMb2dSZWNQdHIgY3VyX2xzbikKK3sKKwl1aW50MzIJCWk7 CisJaW50IAkJYmFja2VuZF9tYXhpZDsKKwlQR1BST0MJICAgKmJhY2tlbmQ7CisKKwlTcGluTG9j a0FjcXVpcmUoJnN0YXRlLT5tdXRleCk7CisJYmFja2VuZF9tYXhpZCA9IHN0YXRlLT5iYWNrZW5k X21heGlkOworCVNwaW5Mb2NrUmVsZWFzZSgmc3RhdGUtPm11dGV4KTsKKworCWZvciAoaSA9IDI7 IGkgPD0gYmFja2VuZF9tYXhpZDsgaSsrKQorCXsKKwkJYmFja2VuZCA9IEJhY2tlbmRJZEdldFBy b2MoaSk7CisJCWlmIChzdGF0ZS0+ZXZlbnRfYXJyW2ldLnRyZ19sc24gIT0gMCkKKwkJeworCQkJ aWYgKGJhY2tlbmQgJiYgc3RhdGUtPmV2ZW50X2FycltpXS50cmdfbHNuIDw9IGN1cl9sc24pCisJ CQkJU2V0TGF0Y2goJmJhY2tlbmQtPnByb2NMYXRjaCk7CisJCX0KKwl9Cit9CisKKy8qIEdldCBt aW5pbWFsIExTTiB0aGF0IHdpbGwgYmUgbmV4dCAqLworWExvZ1JlY1B0cgorR2V0TWluV2FpdCh2 b2lkKQoreworCXJldHVybiBzdGF0ZS0+bWluX2xzbjsKK30KKworLyoKKyAqIE9uIFdBSVQgdXNl IE15TGF0Y2ggdG8gd2FpdCB0aWxsIExTTiBpcyByZXBsYXllZCwKKyAqIHBvc3RtYXN0ZXIgZGll cyBvciB0aW1lb3V0IGhhcHBlbnMuCisgKi8KK2ludAorV2FpdFV0aWxpdHkoWExvZ1JlY1B0ciBs c24sIGNvbnN0IGZsb2F0OCBzZWNzLCBEZXN0UmVjZWl2ZXIgKmRlc3QpCit7CisJWExvZ1JlY1B0 cgl0cmdfbHNuID0gbHNuOworCVhMb2dSZWNQdHIJY3VyX2xzbiA9IEdldFhMb2dSZXBsYXlSZWNQ dHIoTlVMTCk7CisJaW50CQkJbGF0Y2hfZXZlbnRzOworCWZsb2F0OAkJZW5kdGltZTsKKwlUdXBP dXRwdXRTdGF0ZSAqdHN0YXRlOworCVR1cGxlRGVzYwl0dXBkZXNjOworCWNoYXIJICAgKnZhbHVl ID0gImYiOworCisJbGF0Y2hfZXZlbnRzID0gV0xfTEFUQ0hfU0VUIHwgV0xfVElNRU9VVCB8IFdM X0VYSVRfT05fUE1fREVBVEg7CisKKwlpZiAobHNuKQorCQlBZGRFdmVudCh0cmdfbHNuKTsKKwor I2RlZmluZSBHZXROb3dGbG9hdCgpCSgoZmxvYXQ4KSBHZXRDdXJyZW50VGltZXN0YW1wKCkgLyAx MDAwMDAwLjApCisJZW5kdGltZSA9IEdldE5vd0Zsb2F0KCkgKyBzZWNzOworCisJZm9yICg7OykK Kwl7CisJCWludAkJCXJjOworCQlmbG9hdDgJCWRlbGF5ID0gMDsKKwkJbG9uZwkJZGVsYXlfbXM7 CisKKwkJaWYgKHNlY3MgPiAwKQorCQkJZGVsYXkgPSBlbmR0aW1lIC0gR2V0Tm93RmxvYXQoKTsK KwkJZWxzZSBpZiAoc2VjcyA9PSAwKSAvKiAxIG1pbnV0ZSB0aW1lb3V0IHRvIGNoZWNrIGZvciBJ bnRlcnVwdHMgKi8KKwkJCWRlbGF5ID0gMTA7CisJCWVsc2UKKwkJCWRlbGF5ID0gMTsKKworCQlp ZiAoZGVsYXkgPiAwLjApCisJCQlkZWxheV9tcyA9IChsb25nKSBjZWlsKGRlbGF5ICogMTAwMC4w KTsKKwkJZWxzZQorCQkJYnJlYWs7CisKKwkJLyoKKwkJICogSWYgcmVjZWl2ZWQgYW4gaW50ZXJy dXB0aW9uIGZyb20gQ0hFQ0tfRk9SX0lOVEVSUlVQVFMsCisJCSAqIHRoZW4gZGVsZXRlIHRoZSBj dXJyZW50IGV2ZW50IGZyb20gYXJyYXkuCisJCSAqLworCQlpZiAoSW50ZXJydXB0UGVuZGluZykK KwkJeworCQkJaWYgKGxzbikKKwkJCQlEZWxldGVFdmVudCgpOworCQkJUHJvY2Vzc0ludGVycnVw dHMoKTsKKwkJfQorCisJCWlmIChsc24gJiYgcmMgJiBXTF9MQVRDSF9TRVQpCisJCQljdXJfbHNu ID0gR2V0WExvZ1JlcGxheVJlY1B0cihOVUxMKTsKKworCQkvKiBJZiBMU04gaGFzIGJlZW4gcmVw bGF5ZWQgKi8KKwkJaWYgKGxzbiAmJiB0cmdfbHNuIDw9IGN1cl9sc24pCisJCQlicmVhazsKKwor CQkvKiBJZiBwb3N0bWFzdGVyIGRpZXMsIGZpbmlzaCBpbW1lZGlhdGVseSAqLworCQlpZiAoIVBv c3RtYXN0ZXJJc0FsaXZlKCkpCisJCQlicmVhazsKKworCQkvKiBBIGxpdHRsZSBoYWNrIHNpbWls YXIgdG8gU25hcHNob3RSZXNldFhtaW4gdG8gd29yayBvdXQgb2Ygc25hcHNob3QgKi8KKwkJTXlQ Z1hhY3QtPnhtaW4gPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKKwkJcmMgPSBXYWl0TGF0Y2goTXlM YXRjaCwgbGF0Y2hfZXZlbnRzLCBkZWxheV9tcywKKwkJCQkJICAgV0FJVF9FVkVOVF9DTElFTlRf UkVBRCk7CisKKwkJaWYgKHJjICYgV0xfTEFUQ0hfU0VUKQorCQkJUmVzZXRMYXRjaChNeUxhdGNo KTsKKwl9CisKKwlEZWxldGVFdmVudCgpOworCisJaWYgKGxzbiAmJiB0cmdfbHNuID4gY3VyX2xz bikKKwkJZWxvZyhOT1RJQ0UsIkxTTiBpcyBub3QgcmVhY2hlZC4gVHJ5IHRvIGluY3JlYXNlIHdh aXQgdGltZS4iKTsKKwllbHNlCisJCXZhbHVlID0gInQiOworCisJLyogTmVlZCBhIHR1cGxlIGRl c2NyaXB0b3IgcmVwcmVzZW50aW5nIGEgc2luZ2xlIFRFWFQgY29sdW1uICovCisJdHVwZGVzYyA9 IENyZWF0ZVRlbXBsYXRlVHVwbGVEZXNjKDEpOworCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBkZXNj LCAoQXR0ck51bWJlcikgMSwgIkxTTiByZWFjaGVkIiwgVEVYVE9JRCwgLTEsIDApOworCS8qIFBy ZXBhcmUgZm9yIHByb2plY3Rpb24gb2YgdHVwbGVzICovCisJdHN0YXRlID0gYmVnaW5fdHVwX291 dHB1dF90dXBkZXNjKGRlc3QsIHR1cGRlc2MsICZUVFNPcHNNaW5pbWFsVHVwbGUpOworCisJLyog U2VuZCBpdCAqLworCWRvX3RleHRfb3V0cHV0X29uZWxpbmUodHN0YXRlLCB2YWx1ZSk7CisJZW5k X3R1cF9vdXRwdXQodHN0YXRlKTsKKwlyZXR1cm4gc3RyY21wKHZhbHVlLCJ0Iik7Cit9CisKK3Zv aWQKK1dhaXRUaW1lVXRpbGl0eShmbG9hdDggZGVsYXkpCit7CisJaW50CQkJbGF0Y2hfZXZlbnRz OworCisJaWYgKGRlbGF5IDw9IDApCisJCXJldHVybjsKKworCWxhdGNoX2V2ZW50cyA9IFdMX1RJ TUVPVVQgfCBXTF9QT1NUTUFTVEVSX0RFQVRIOworCisJTXlQZ1hhY3QtPnhtaW4gPSBJbnZhbGlk VHJhbnNhY3Rpb25JZDsKKwlXYWl0TGF0Y2goTXlMYXRjaCwgbGF0Y2hfZXZlbnRzLCAobG9uZykg Y2VpbChkZWxheSAqIDEwMDAuMCksIFdBSVRfRVZFTlRfQ0xJRU5UX1JFQUQpOworCVJlc2V0TGF0 Y2goTXlMYXRjaCk7Cit9CisKKy8qCisgKiBHZXQgdGhlIGFtb3VudCBvZiBzZWNvbmRzIGxlZnQg dGlsbCB0aGUgc3BlY2lmaWVkIHRpbWUuCisgKi8KK2Zsb2F0OAorV2FpdFRpbWVSZXNvbHZlKENv bnN0ICp0aW1lKQoreworCWludAkJCXJldDsKKwlmbG9hdDgJCXZhbDsKKwlPaWQJCQl0eXBlc1td ID0geyB0aW1lLT5jb25zdHR5cGUgfTsKKwlEYXR1bQkJdmFsdWVzW10gPSB7IHRpbWUtPmNvbnN0 dmFsdWUgfTsKKwljaGFyCQludWxsc1tdID0geyAiICIgfTsKKwlEYXR1bQkJcmVzdWx0OworCWJv b2wJCWlzbnVsbDsKKworCVNQSV9jb25uZWN0KCk7CisKKwlpZiAodGltZS0+Y29uc3R0eXBlID09 IDEwODMpCisJCXJldCA9IFNQSV9leGVjdXRlX3dpdGhfYXJncygic2VsZWN0IGV4dHJhY3QgKGVw b2NoIGZyb20gKCQxIC0gbm93KCk6OnRpbWUpKSIsCisJCQkJCQkJCQkxLCB0eXBlcywgdmFsdWVz LCBudWxscywgdHJ1ZSwgMCk7CisJZWxzZSBpZiAodGltZS0+Y29uc3R0eXBlID09IDEyNjYpCisJ CXJldCA9IFNQSV9leGVjdXRlX3dpdGhfYXJncygic2VsZWN0IGV4dHJhY3QgKGVwb2NoIGZyb20g KHRpbWV6b25lKCdVVEMnLCQxKTo6dGltZSAtIHRpbWV6b25lKCdVVEMnLCBub3coKTo6dGltZXR6 KTo6dGltZSkpIiwKKwkJCQkJCQkJCTEsIHR5cGVzLCB2YWx1ZXMsIG51bGxzLCB0cnVlLCAwKTsK KwllbHNlCisJCXJldCA9IFNQSV9leGVjdXRlX3dpdGhfYXJncygic2VsZWN0IGV4dHJhY3QgKGVw b2NoIGZyb20gKCQxIC0gbm93KCkpKSIsCisJCQkJCQkJCQkxLCB0eXBlcywgdmFsdWVzLCBudWxs cywgdHJ1ZSwgMCk7CisKKwlBc3NlcnQocmV0ID49IDApOworCXJlc3VsdCA9IFNQSV9nZXRiaW52 YWwoU1BJX3R1cHRhYmxlLT52YWxzWzBdLAorCQkJCQkJICAgU1BJX3R1cHRhYmxlLT50dXBkZXNj LAorCQkJCQkJICAgMSwgJmlzbnVsbCk7CisKKwlBc3NlcnQoIWlzbnVsbCk7CisJdmFsID0gRGF0 dW1HZXRGbG9hdDgocmVzdWx0KTsKKworCWVsb2coSU5GTywgInRpbWU6ICVmIiwgdmFsKTsKKwor CVNQSV9maW5pc2goKTsKKwlyZXR1cm4gdmFsOworfQorCisvKiBJbXBsZW1lbnRhdGlvbiBvZiBX QUlUIEZPUiAqLworaW50CitXYWl0TWFpbihXYWl0U3RtdCAqc3RtdCwgRGVzdFJlY2VpdmVyICpk ZXN0KQoreworCUxpc3RDZWxsICAgKmV2ZW50czsKKwlmbG9hdDgJCWRlbGF5ID0gMDsKKwlmbG9h dDgJCWZpbmFsX2RlbGF5ID0gMDsKKwlYTG9nUmVjUHRyCWxzbiA9IEludmFsaWRYTG9nUmVjUHRy OworCVhMb2dSZWNQdHIJZmluYWxfbHNuID0gSW52YWxpZFhMb2dSZWNQdHI7CisJYm9vbAkJaGFz X2xzbiA9IGZhbHNlOworCWJvb2wJCXdhaXRfZm9yZXZlciA9IHRydWU7CisJaW50CQkJcmVzID0g MTsKKworCWlmIChzdG10LT5zdHJhdGVneSA9PSBXQUlUX0ZPUl9BTlkpCisJeworCQkvKiBQcmVw YXJlIHRvIGZpbmQgbWluaW11bSBMU04gYW5kIGRlbGF5ICovCisJCWZpbmFsX2RlbGF5ID0gREJM X01BWDsKKwkJZmluYWxfbHNuID0gUEdfVUlOVDY0X01BWDsKKwl9CisKKwkvKiBFeHRyYWN0IG9w dGlvbnMgZnJvbSB0aGUgc3RhdGVtZW50IG5vZGUgdHJlZSAqLworCWZvcmVhY2goZXZlbnRzLCBz dG10LT5ldmVudHMpCisJeworCQlXYWl0U3RtdCAgICpldmVudCA9IChXYWl0U3RtdCAqKSBsZmly c3QoZXZlbnRzKTsKKworCQkvKiBMU04gdG8gd2FpdCBmb3IgKi8KKwkJaWYgKGV2ZW50LT5sc24p CisJCXsKKwkJCWhhc19sc24gPSB0cnVlOworCQkJbHNuID0gRGF0dW1HZXRMU04oCisJCQkJCQlE aXJlY3RGdW5jdGlvbkNhbGwxKHBnX2xzbl9pbiwKKwkJCQkJCQlDU3RyaW5nR2V0RGF0dW0oZXZl bnQtPmxzbikpKTsKKworCQkJLyoKKwkJCSAqIFdoZW4gd2FpdGluZyBmb3IgQUxMLCBzZWxlY3Qg bWF4IExTTiB0byB3YWl0IGZvci4KKwkJCSAqIFdoZW4gd2FpdGluZyBmb3IgQU5ZLCBzZWxlY3Qg bWluIExTTiB0byB3YWl0IGZvci4KKwkJCSAqLworCQkJaWYgKChzdG10LT5zdHJhdGVneSA9PSBX QUlUX0ZPUl9BTEwgJiYgZmluYWxfbHNuIDw9IGxzbikgfHwKKwkJCQkoc3RtdC0+c3RyYXRlZ3kg PT0gV0FJVF9GT1JfQU5ZICYmIGZpbmFsX2xzbiA+IGxzbikpCisJCQl7CisJCQkJZmluYWxfbHNu ID0gbHNuOworCQkJfQorCQl9CisKKwkJLyogVGltZSBkZWxheSB0byB3YWl0IGZvciAqLworCQlp ZiAoZXZlbnQtPnRpbWUgfHwgZXZlbnQtPmRlbGF5KQorCQl7CisJCQl3YWl0X2ZvcmV2ZXIgPSBm YWxzZTsKKworCQkJaWYgKGV2ZW50LT5kZWxheSkKKwkJCQlkZWxheSA9IGV2ZW50LT5kZWxheSAv IDEwMDAuMDsKKworCQkJaWYgKGV2ZW50LT50aW1lKQorCQkJeworCQkJCUNvbnN0ICp0aW1lID0g KENvbnN0ICopIGV2ZW50LT50aW1lOworCQkJCWRlbGF5ID0gV2FpdFRpbWVSZXNvbHZlKHRpbWUp OworCQkJfQorCisJCQlpZiAoZGVsYXkgPCAwKQorCQkJCWRlbGF5ID0gMDsKKworCQkJLyoKKwkJ CSAqIFdoZW4gd2FpdGluZyBmb3IgQUxMLCBzZWxlY3QgbWF4IGRlbGF5IHRvIHdhaXQgZm9yLgor CQkJICogV2hlbiB3YWl0aW5nIGZvciBBTlksIHNlbGVjdCBtaW4gZGVsYXkgdG8gd2FpdCBmb3Iu CisJCQkgKi8KKwkJCWlmICgoc3RtdC0+c3RyYXRlZ3kgPT0gV0FJVF9GT1JfQUxMICYmIGZpbmFs X2RlbGF5IDw9IGRlbGF5KSB8fAorCQkJCShzdG10LT5zdHJhdGVneSA9PSBXQUlUX0ZPUl9BTlkg JiYgZmluYWxfZGVsYXkgPiBkZWxheSkpCisJCQl7CisJCQkJZmluYWxfZGVsYXkgPSBkZWxheTsK KwkJCX0KKwkJfQorCX0KKworCWlmICghaGFzX2xzbikKKwl7CisJCVdhaXRUaW1lVXRpbGl0eShm aW5hbF9kZWxheSk7CisJCXJlcyA9IDA7CisJfQorCWVsc2UKKwkJcmVzID0gV2FpdFV0aWxpdHko ZmluYWxfbHNuLCB3YWl0X2ZvcmV2ZXIgPyAwIDogZmluYWxfZGVsYXksIGRlc3QpOworCisJcmV0 dXJuIHJlczsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL25vZGVzL291dGZ1bmNzLmMgYi9z cmMvYmFja2VuZC9ub2Rlcy9vdXRmdW5jcy5jCmluZGV4IGUwODRjM2YwNjk5Li5jOTgwYzZkNTYw ZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbm9kZXMvb3V0ZnVuY3MuYworKysgYi9zcmMvYmFj a2VuZC9ub2Rlcy9vdXRmdW5jcy5jCkBAIC0yNzYwLDYgKzI3NjAsMTggQEAgX291dERlZkVsZW0o U3RyaW5nSW5mbyBzdHIsIGNvbnN0IERlZkVsZW0gKm5vZGUpCiAJV1JJVEVfTE9DQVRJT05fRklF TEQobG9jYXRpb24pOwogfQogCitzdGF0aWMgdm9pZAorX291dFdhaXRTdG10KFN0cmluZ0luZm8g c3RyLCBjb25zdCBXYWl0U3RtdCAqbm9kZSkKK3sKKwlXUklURV9OT0RFX1RZUEUoIldBSVRTVE1U Iik7CisKKwlXUklURV9TVFJJTkdfRklFTEQobHNuKTsKKwlXUklURV9JTlRfRklFTEQoZGVsYXkp OworCVdSSVRFX05PREVfRklFTEQoZXZlbnRzKTsKKwlXUklURV9OT0RFX0ZJRUxEKHRpbWUpOwor CVdSSVRFX0VOVU1fRklFTEQoc3RyYXRlZ3ksIFdhaXRGb3JTdHJhdGVneSk7Cit9CisKIHN0YXRp YyB2b2lkCiBfb3V0VGFibGVMaWtlQ2xhdXNlKFN0cmluZ0luZm8gc3RyLCBjb25zdCBUYWJsZUxp a2VDbGF1c2UgKm5vZGUpCiB7CkBAIC00MzA1LDYgKzQzMTcsOSBAQCBvdXROb2RlKFN0cmluZ0lu Zm8gc3RyLCBjb25zdCB2b2lkICpvYmopCiAJCQljYXNlIFRfUGFydGl0aW9uUmFuZ2VEYXR1bToK IAkJCQlfb3V0UGFydGl0aW9uUmFuZ2VEYXR1bShzdHIsIG9iaik7CiAJCQkJYnJlYWs7CisJCQlj YXNlIFRfV2FpdFN0bXQ6CisJCQkJX291dFdhaXRTdG10KHN0ciwgb2JqKTsKKwkJCQlicmVhazsK IAogCQkJZGVmYXVsdDoKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcGFyc2VyL2FuYWx5emUu YyBiL3NyYy9iYWNrZW5kL3BhcnNlci9hbmFseXplLmMKaW5kZXggNjY3NjQxMjg0MmIuLmJjMjMw NGEwYmExIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wYXJzZXIvYW5hbHl6ZS5jCisrKyBiL3Ny Yy9iYWNrZW5kL3BhcnNlci9hbmFseXplLmMKQEAgLTc4LDYgKzc4LDcgQEAgc3RhdGljIFF1ZXJ5 ICp0cmFuc2Zvcm1DcmVhdGVUYWJsZUFzU3RtdChQYXJzZVN0YXRlICpwc3RhdGUsCiAJCQkJCQkJ CQkJIENyZWF0ZVRhYmxlQXNTdG10ICpzdG10KTsKIHN0YXRpYyBRdWVyeSAqdHJhbnNmb3JtQ2Fs bFN0bXQoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkJCQkJCQlDYWxsU3RtdCAqc3RtdCk7CitzdGF0 aWMgdm9pZCB0cmFuc2Zvcm1XYWl0Rm9yU3RtdChQYXJzZVN0YXRlICpwc3RhdGUsIFdhaXRTdG10 ICpzdG10KTsKIHN0YXRpYyB2b2lkIHRyYW5zZm9ybUxvY2tpbmdDbGF1c2UoUGFyc2VTdGF0ZSAq cHN0YXRlLCBRdWVyeSAqcXJ5LAogCQkJCQkJCQkgICBMb2NraW5nQ2xhdXNlICpsYywgYm9vbCBw dXNoZWREb3duKTsKICNpZmRlZiBSQVdfRVhQUkVTU0lPTl9DT1ZFUkFHRV9URVNUCkBAIC0zMjYs NiArMzI3LDE5IEBAIHRyYW5zZm9ybVN0bXQoUGFyc2VTdGF0ZSAqcHN0YXRlLCBOb2RlICpwYXJz ZVRyZWUpCiAJCQlyZXN1bHQgPSB0cmFuc2Zvcm1DYWxsU3RtdChwc3RhdGUsCiAJCQkJCQkJCQkg ICAoQ2FsbFN0bXQgKikgcGFyc2VUcmVlKTsKIAkJCWJyZWFrOworCQljYXNlIFRfV2FpdFN0bXQ6 CisJCQl0cmFuc2Zvcm1XYWl0Rm9yU3RtdChwc3RhdGUsIChXYWl0U3RtdCAqKSBwYXJzZVRyZWUp OworCQkJcmVzdWx0ID0gbWFrZU5vZGUoUXVlcnkpOworCQkJcmVzdWx0LT5jb21tYW5kVHlwZSA9 IENNRF9VVElMSVRZOworCQkJcmVzdWx0LT51dGlsaXR5U3RtdCA9IChOb2RlICopIHBhcnNlVHJl ZTsKKwkJCWJyZWFrOworCQljYXNlIFRfVHJhbnNhY3Rpb25TdG10OgorCQkJeworCQkJCVRyYW5z YWN0aW9uU3RtdCAqc3RtdCA9IChUcmFuc2FjdGlvblN0bXQgKikgcGFyc2VUcmVlOworCQkJCWlm ICgoc3RtdC0+a2luZCA9PSBUUkFOU19TVE1UX0JFR0lOIHx8CisJCQkJCQlzdG10LT5raW5kID09 IFRSQU5TX1NUTVRfU1RBUlQpICYmIHN0bXQtPndhaXQpCisJCQkJCXRyYW5zZm9ybVdhaXRGb3JT dG10KHBzdGF0ZSwgKFdhaXRTdG10ICopIHN0bXQtPndhaXQpOworCQkJfQogCiAJCWRlZmF1bHQ6 CiAKQEAgLTI5ODEsNiArMjk5NSwxOCBAQCBhcHBseUxvY2tpbmdDbGF1c2UoUXVlcnkgKnFyeSwg SW5kZXggcnRpbmRleCwKIAlxcnktPnJvd01hcmtzID0gbGFwcGVuZChxcnktPnJvd01hcmtzLCBy Yyk7CiB9CiAKK3N0YXRpYyB2b2lkCit0cmFuc2Zvcm1XYWl0Rm9yU3RtdChQYXJzZVN0YXRlICpw c3RhdGUsIFdhaXRTdG10ICpzdG10KQoreworCUxpc3RDZWxsICAgKmV2ZW50czsKKworCWZvcmVh Y2goZXZlbnRzLCBzdG10LT5ldmVudHMpCisJeworCQlXYWl0U3RtdCAgICpldmVudCA9IChXYWl0 U3RtdCAqKSBsZmlyc3QoZXZlbnRzKTsKKwkJZXZlbnQtPnRpbWUgPSB0cmFuc2Zvcm1FeHByKHBz dGF0ZSwgZXZlbnQtPnRpbWUsIEVYUFJfS0lORF9PVEhFUik7CisJfQorfQorCiAvKgogICogQ292 ZXJhZ2UgdGVzdGluZyBmb3IgcmF3X2V4cHJlc3Npb25fdHJlZV93YWxrZXIoKS4KICAqCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55IGIvc3JjL2JhY2tlbmQvcGFyc2VyL2dy YW0ueQppbmRleCA3ZTM4NGY5NTZjOC4uNjNlN2I3MjI0YzMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3BhcnNlci9ncmFtLnkKKysrIGIvc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueQpAQCAtMjc2 LDcgKzI3Niw3IEBAIHN0YXRpYyBOb2RlICptYWtlUmVjdXJzaXZlVmlld1NlbGVjdChjaGFyICpy ZWxuYW1lLCBMaXN0ICphbGlhc2VzLCBOb2RlICpxdWVyeSk7CiAJCVNlY0xhYmVsU3RtdCBTZWxl Y3RTdG10IFRyYW5zYWN0aW9uU3RtdCBUcnVuY2F0ZVN0bXQKIAkJVW5saXN0ZW5TdG10IFVwZGF0 ZVN0bXQgVmFjdXVtU3RtdAogCQlWYXJpYWJsZVJlc2V0U3RtdCBWYXJpYWJsZVNldFN0bXQgVmFy aWFibGVTaG93U3RtdAotCQlWaWV3U3RtdCBDaGVja1BvaW50U3RtdCBDcmVhdGVDb252ZXJzaW9u U3RtdAorCQlWaWV3U3RtdCBXYWl0U3RtdCBDaGVja1BvaW50U3RtdCBDcmVhdGVDb252ZXJzaW9u U3RtdAogCQlEZWFsbG9jYXRlU3RtdCBQcmVwYXJlU3RtdCBFeGVjdXRlU3RtdAogCQlEcm9wT3du ZWRTdG10IFJlYXNzaWduT3duZWRTdG10CiAJCUFsdGVyVFNDb25maWd1cmF0aW9uU3RtdCBBbHRl clRTRGljdGlvbmFyeVN0bXQKQEAgLTQ4Nyw3ICs0ODcsNyBAQCBzdGF0aWMgTm9kZSAqbWFrZVJl Y3Vyc2l2ZVZpZXdTZWxlY3QoY2hhciAqcmVsbmFtZSwgTGlzdCAqYWxpYXNlcywgTm9kZSAqcXVl cnkpOwogJXR5cGUgPGxpc3Q+CXJvdyBleHBsaWNpdF9yb3cgaW1wbGljaXRfcm93IHR5cGVfbGlz dCBhcnJheV9leHByX2xpc3QKICV0eXBlIDxub2RlPgljYXNlX2V4cHIgY2FzZV9hcmcgd2hlbl9j bGF1c2UgY2FzZV9kZWZhdWx0CiAldHlwZSA8bGlzdD4Jd2hlbl9jbGF1c2VfbGlzdAotJXR5cGUg PGl2YWw+CXN1Yl90eXBlIG9wdF9tYXRlcmlhbGl6ZWQKKyV0eXBlIDxpdmFsPglzdWJfdHlwZSB3 YWl0X3N0cmF0ZWd5IG9wdF9tYXRlcmlhbGl6ZWQKICV0eXBlIDx2YWx1ZT4JTnVtZXJpY09ubHkK ICV0eXBlIDxsaXN0PglOdW1lcmljT25seV9saXN0CiAldHlwZSA8YWxpYXM+CWFsaWFzX2NsYXVz ZSBvcHRfYWxpYXNfY2xhdXNlCkBAIC01OTEsNiArNTkxLDggQEAgc3RhdGljIE5vZGUgKm1ha2VS ZWN1cnNpdmVWaWV3U2VsZWN0KGNoYXIgKnJlbG5hbWUsIExpc3QgKmFsaWFzZXMsIE5vZGUgKnF1 ZXJ5KTsKICV0eXBlIDxwYXJ0Ym91bmRzcGVjPiBQYXJ0aXRpb25Cb3VuZFNwZWMKICV0eXBlIDxs aXN0PgkJaGFzaF9wYXJ0Ym91bmQKICV0eXBlIDxkZWZlbHQ+CQloYXNoX3BhcnRib3VuZF9lbGVt CisldHlwZSA8bGlzdD4JCXdhaXRfbGlzdAorJXR5cGUgPG5vZGU+CQlXYWl0RXZlbnQgd2FpdF9m b3IKIAogLyoKICAqIE5vbi1rZXl3b3JkIHRva2VuIHR5cGVzLiAgVGhlc2UgYXJlIGhhcmQtd2ly ZWQgaW50byB0aGUgImZsZXgiIGxleGVyLgpAQCAtNjYwLDcgKzY2Miw3IEBAIHN0YXRpYyBOb2Rl ICptYWtlUmVjdXJzaXZlVmlld1NlbGVjdChjaGFyICpyZWxuYW1lLCBMaXN0ICphbGlhc2VzLCBO b2RlICpxdWVyeSk7CiAKIAlMQUJFTCBMQU5HVUFHRSBMQVJHRV9QIExBU1RfUCBMQVRFUkFMX1AK IAlMRUFESU5HIExFQUtQUk9PRiBMRUFTVCBMRUZUIExFVkVMIExJS0UgTElNSVQgTElTVEVOIExP QUQgTE9DQUwKLQlMT0NBTFRJTUUgTE9DQUxUSU1FU1RBTVAgTE9DQVRJT04gTE9DS19QIExPQ0tF RCBMT0dHRUQKKwlMT0NBTFRJTUUgTE9DQUxUSU1FU1RBTVAgTE9DQVRJT04gTE9DS19QIExPQ0tF RCBMT0dHRUQgTFNOCiAKIAlNQVBQSU5HIE1BVENIIE1BVEVSSUFMSVpFRCBNQVhWQUxVRSBNRVRI T0QgTUlOVVRFX1AgTUlOVkFMVUUgTU9ERSBNT05USF9QIE1PVkUKIApAQCAtNjkwLDcgKzY5Miw3 IEBAIHN0YXRpYyBOb2RlICptYWtlUmVjdXJzaXZlVmlld1NlbGVjdChjaGFyICpyZWxuYW1lLCBM aXN0ICphbGlhc2VzLCBOb2RlICpxdWVyeSk7CiAJU1VCU0NSSVBUSU9OIFNVQlNUUklORyBTVVBQ T1JUIFNZTU1FVFJJQyBTWVNJRCBTWVNURU1fUAogCiAJVEFCTEUgVEFCTEVTIFRBQkxFU0FNUExF IFRBQkxFU1BBQ0UgVEVNUCBURU1QTEFURSBURU1QT1JBUlkgVEVYVF9QIFRIRU4KLQlUSUVTIFRJ TUUgVElNRVNUQU1QIFRPIFRSQUlMSU5HIFRSQU5TQUNUSU9OIFRSQU5TRk9STQorCVRJRVMgVElN RSBUSU1FT1VUIFRJTUVTVEFNUCBUTyBUUkFJTElORyBUUkFOU0FDVElPTiBUUkFOU0ZPUk0KIAlU UkVBVCBUUklHR0VSIFRSSU0gVFJVRV9QCiAJVFJVTkNBVEUgVFJVU1RFRCBUWVBFX1AgVFlQRVNf UAogCkBAIC03MDAsNyArNzAyLDggQEAgc3RhdGljIE5vZGUgKm1ha2VSZWN1cnNpdmVWaWV3U2Vs ZWN0KGNoYXIgKnJlbG5hbWUsIExpc3QgKmFsaWFzZXMsIE5vZGUgKnF1ZXJ5KTsKIAlWQUNVVU0g VkFMSUQgVkFMSURBVEUgVkFMSURBVE9SIFZBTFVFX1AgVkFMVUVTIFZBUkNIQVIgVkFSSUFESUMg VkFSWUlORwogCVZFUkJPU0UgVkVSU0lPTl9QIFZJRVcgVklFV1MgVk9MQVRJTEUKIAotCVdIRU4g V0hFUkUgV0hJVEVTUEFDRV9QIFdJTkRPVyBXSVRIIFdJVEhJTiBXSVRIT1VUIFdPUksgV1JBUFBF UiBXUklURQorCVdBSVQgV0hFTiBXSEVSRSBXSElURVNQQUNFX1AgV0lORE9XCisJV0lUSCBXSVRI SU4gV0lUSE9VVCBXT1JLIFdSQVBQRVIgV1JJVEUKIAogCVhNTF9QIFhNTEFUVFJJQlVURVMgWE1M Q09OQ0FUIFhNTEVMRU1FTlQgWE1MRVhJU1RTIFhNTEZPUkVTVCBYTUxOQU1FU1BBQ0VTCiAJWE1M UEFSU0UgWE1MUEkgWE1MUk9PVCBYTUxTRVJJQUxJWkUgWE1MVEFCTEUKQEAgLTk1NCw2ICs5NTcs NyBAQCBzdG10IDoKIAkJCXwgVmFyaWFibGVTZXRTdG10CiAJCQl8IFZhcmlhYmxlU2hvd1N0bXQK IAkJCXwgVmlld1N0bXQKKwkJCXwgV2FpdFN0bXQKIAkJCXwgLypFTVBUWSovCiAJCQkJeyAkJCA9 IE5VTEw7IH0KIAkJOwpAQCAtOTkzMCwxOCArOTkzNCwyMCBAQCBUcmFuc2FjdGlvblN0bXQ6CiAJ CQkJCW4tPmNoYWluID0gJDM7CiAJCQkJCSQkID0gKE5vZGUgKiluOwogCQkJCX0KLQkJCXwgQkVH SU5fUCBvcHRfdHJhbnNhY3Rpb24gdHJhbnNhY3Rpb25fbW9kZV9saXN0X29yX2VtcHR5CisJCQl8 IEJFR0lOX1Agb3B0X3RyYW5zYWN0aW9uIHRyYW5zYWN0aW9uX21vZGVfbGlzdF9vcl9lbXB0eSB3 YWl0X2ZvcgogCQkJCXsKIAkJCQkJVHJhbnNhY3Rpb25TdG10ICpuID0gbWFrZU5vZGUoVHJhbnNh Y3Rpb25TdG10KTsKIAkJCQkJbi0+a2luZCA9IFRSQU5TX1NUTVRfQkVHSU47CiAJCQkJCW4tPm9w dGlvbnMgPSAkMzsKKwkJCQkJbi0+d2FpdCA9ICQ0OwogCQkJCQkkJCA9IChOb2RlICopbjsKIAkJ CQl9Ci0JCQl8IFNUQVJUIFRSQU5TQUNUSU9OIHRyYW5zYWN0aW9uX21vZGVfbGlzdF9vcl9lbXB0 eQorCQkJfCBTVEFSVCBUUkFOU0FDVElPTiB0cmFuc2FjdGlvbl9tb2RlX2xpc3Rfb3JfZW1wdHkg d2FpdF9mb3IKIAkJCQl7CiAJCQkJCVRyYW5zYWN0aW9uU3RtdCAqbiA9IG1ha2VOb2RlKFRyYW5z YWN0aW9uU3RtdCk7CiAJCQkJCW4tPmtpbmQgPSBUUkFOU19TVE1UX1NUQVJUOwogCQkJCQluLT5v cHRpb25zID0gJDM7CisJCQkJCW4tPndhaXQgPSAkNDsKIAkJCQkJJCQgPSAoTm9kZSAqKW47CiAJ CQkJfQogCQkJfCBDT01NSVQgb3B0X3RyYW5zYWN0aW9uIG9wdF90cmFuc2FjdGlvbl9jaGFpbgpA QCAtMTQxNDcsNiArMTQxNTMsNzQgQEAgeG1sX3Bhc3NpbmdfbWVjaDoKIAkJCXwgQlkgVkFMVUVf UAogCQk7CiAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqCQlRVUVSWToKKyAqCQkJCVdB SVQgRk9SIDxldmVudD4gWywgPGV2ZW50PiAuLi5dCisgKgkJCQlldmVudCBpcyBvbmUgb2Y6Cisg KgkJCQkJTFNOIHZhbHVlCisgKgkJCQkJVElNRU9VVCBkZWxheQorICoJCQkJCXRpbWVzdGFtcAor ICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKi8KK1dhaXRTdG10OgorCQkJV0FJVCBGT1Igd2FpdF9z dHJhdGVneSB3YWl0X2xpc3QKKwkJCQl7CisJCQkJCVdhaXRTdG10ICpuID0gbWFrZU5vZGUoV2Fp dFN0bXQpOworCQkJCQluLT5zdHJhdGVneSA9ICQzOworCQkJCQluLT5ldmVudHMgPSAkNDsKKwkJ CQkJJCQgPSAoTm9kZSAqKW47CisJCQkJfQorCQkJOword2FpdF9mb3I6CisJCQlXQUlUIEZPUiB3 YWl0X3N0cmF0ZWd5IHdhaXRfbGlzdAorCQkJCXsKKwkJCQkJV2FpdFN0bXQgKm4gPSBtYWtlTm9k ZShXYWl0U3RtdCk7CisJCQkJCW4tPnN0cmF0ZWd5ID0gJDM7CisJCQkJCW4tPmV2ZW50cyA9ICQ0 OworCQkJCQkkJCA9IChOb2RlICopbjsKKwkJCQl9CisJCQl8IC8qIEVNUFRZICovCQl7ICQkID0g TlVMTDsgfTsKKword2FpdF9zdHJhdGVneToKKwkJCUFMTAkJCQkJeyAkJCA9IFdBSVRfRk9SX0FM TDsgfQorCQkJfCBBTlkJCQkJeyAkJCA9IFdBSVRfRk9SX0FOWTsgfQorCQkJfCAvKiBFTVBUWSAq LwkJeyAkJCA9IFdBSVRfRk9SX0FMTDsgfQorCQk7CisKK3dhaXRfbGlzdDoKKwkJCVdhaXRFdmVu dAkJCQkJeyAkJCA9IGxpc3RfbWFrZTEoJDEpOyB9CisJCQl8IHdhaXRfbGlzdCAnLCcgV2FpdEV2 ZW50CXsgJCQgPSBsYXBwZW5kKCQxLCAkMyk7IH0KKwkJCXwgd2FpdF9saXN0IFdhaXRFdmVudAkJ eyAkJCA9IGxhcHBlbmQoJDEsICQyKTsgfQorCQk7CisKK1dhaXRFdmVudDoKKwkJCUxTTiBTY29u c3QKKwkJCQl7CisJCQkJCVdhaXRTdG10ICpuID0gbWFrZU5vZGUoV2FpdFN0bXQpOworCQkJCQlu LT5sc24gPSAkMjsKKwkJCQkJbi0+ZGVsYXkgPSAwOworCQkJCQluLT50aW1lID0gTlVMTDsKKwkJ CQkJJCQgPSAoTm9kZSAqKW47CisJCQkJfQorCQkJfCBUSU1FT1VUIEljb25zdAorCQkJCXsKKwkJ CQkJV2FpdFN0bXQgKm4gPSBtYWtlTm9kZShXYWl0U3RtdCk7CisJCQkJCW4tPmxzbiA9IE5VTEw7 CisJCQkJCW4tPmRlbGF5ID0gJDI7CisJCQkJCW4tPnRpbWUgPSBOVUxMOworCQkJCQkkJCA9IChO b2RlICopbjsKKwkJCQl9CisJCQl8IENvbnN0RGF0ZXRpbWUgU2NvbnN0CisJCQkJeworCQkJCQlX YWl0U3RtdCAqbiA9IG1ha2VOb2RlKFdhaXRTdG10KTsKKwkJCQkJbi0+bHNuID0gTlVMTDsKKwkJ CQkJbi0+ZGVsYXkgPSAwOworCQkJCQluLT50aW1lID0gbWFrZVN0cmluZ0NvbnN0Q2FzdCgkMiwg QDIsICQxKTsKKwkJCQkJJCQgPSAoTm9kZSAqKW47CisJCQkJfQorCQkJOworCiAKIC8qCiAgKiBB Z2dyZWdhdGUgZGVjb3JhdGlvbiBjbGF1c2VzCkBAIC0xNTI5MSw2ICsxNTM2NSw3IEBAIHVucmVz ZXJ2ZWRfa2V5d29yZDoKIAkJCXwgTE9DS19QCiAJCQl8IExPQ0tFRAogCQkJfCBMT0dHRUQKKwkJ CXwgTFNOCiAJCQl8IE1BUFBJTkcKIAkJCXwgTUFUQ0gKIAkJCXwgTUFURVJJQUxJWkVECkBAIC0x NTQxMyw2ICsxNTQ4OCw3IEBAIHVucmVzZXJ2ZWRfa2V5d29yZDoKIAkJCXwgVEVNUE9SQVJZCiAJ CQl8IFRFWFRfUAogCQkJfCBUSUVTCisJCQl8IFRJTUVPVVQKIAkJCXwgVFJBTlNBQ1RJT04KIAkJ CXwgVFJBTlNGT1JNCiAJCQl8IFRSSUdHRVIKQEAgLTE1NDM5LDYgKzE1NTE1LDcgQEAgdW5yZXNl cnZlZF9rZXl3b3JkOgogCQkJfCBWSUVXCiAJCQl8IFZJRVdTCiAJCQl8IFZPTEFUSUxFCisJCQl8 IFdBSVQKIAkJCXwgV0hJVEVTUEFDRV9QCiAJCQl8IFdJVEhJTgogCQkJfCBXSVRIT1VUCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9pcGNpLmMgYi9zcmMvYmFja2VuZC9zdG9y YWdlL2lwYy9pcGNpLmMKaW5kZXggNDI3YjBkNTljZGUuLmJiOGFmMzQ5ODA4IDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9pcGNpLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFn ZS9pcGMvaXBjaS5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSAiYWNjZXNzL3N1YnRyYW5z LmgiCiAjaW5jbHVkZSAiYWNjZXNzL3R3b3BoYXNlLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvYXN5 bmMuaCIKKyNpbmNsdWRlICJjb21tYW5kcy93YWl0LmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgi CiAjaW5jbHVkZSAicGdzdGF0LmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci9hdXRvdmFjdXVtLmgi CkBAIC0xNDcsNiArMTQ4LDcgQEAgQ3JlYXRlU2hhcmVkTWVtb3J5QW5kU2VtYXBob3Jlcyh2b2lk KQogCQlzaXplID0gYWRkX3NpemUoc2l6ZSwgQlRyZWVTaG1lbVNpemUoKSk7CiAJCXNpemUgPSBh ZGRfc2l6ZShzaXplLCBTeW5jU2NhblNobWVtU2l6ZSgpKTsKIAkJc2l6ZSA9IGFkZF9zaXplKHNp emUsIEFzeW5jU2htZW1TaXplKCkpOworCQlzaXplID0gYWRkX3NpemUoc2l6ZSwgV2FpdFNobWVt U2l6ZSgpKTsKICNpZmRlZiBFWEVDX0JBQ0tFTkQKIAkJc2l6ZSA9IGFkZF9zaXplKHNpemUsIFNo bWVtQmFja2VuZEFycmF5U2l6ZSgpKTsKICNlbmRpZgpAQCAtMjY0LDYgKzI2NiwxMSBAQCBDcmVh dGVTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVzKHZvaWQpCiAJU3luY1NjYW5TaG1lbUluaXQoKTsK IAlBc3luY1NobWVtSW5pdCgpOwogCisJLyoKKwkgKiBJbml0IGFycmF5IG9mIExhdGNoZXMgaW4g c2hhcmVkIG1lbW9yeSBmb3IgV0FJVAorCSAqLworCVdhaXRTaG1lbUluaXQoKTsKKwogI2lmZGVm IEVYRUNfQkFDS0VORAogCiAJLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0 eS5jIGIvc3JjL2JhY2tlbmQvdGNvcC91dGlsaXR5LmMKaW5kZXggYjFmN2Y2ZTJkMDEuLmRhZWMw NTUxNzE3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC90Y29wL3V0aWxpdHkuYworKysgYi9zcmMv YmFja2VuZC90Y29wL3V0aWxpdHkuYwpAQCAtMTUsNiArMTUsNyBAQAogICotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCiAgKi8KICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorI2luY2x1ZGUgPGZsb2F0Lmg+CiAKICNp bmNsdWRlICJhY2Nlc3MvaHR1cF9kZXRhaWxzLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3JlbG9wdGlv bnMuaCIKQEAgLTU3LDYgKzU4LDcgQEAKICNpbmNsdWRlICJjb21tYW5kcy91c2VyLmgiCiAjaW5j bHVkZSAiY29tbWFuZHMvdmFjdXVtLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvdmlldy5oIgorI2lu Y2x1ZGUgImNvbW1hbmRzL3dhaXQuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRl ICJwYXJzZXIvcGFyc2VfdXRpbGNtZC5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvYmd3cml0ZXIu aCIKQEAgLTcwLDYgKzcyLDkgQEAKICNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKICNpbmNs dWRlICJ1dGlscy9yZWwuaCIKICNpbmNsdWRlICJ1dGlscy9zeXNjYWNoZS5oIgorI2luY2x1ZGUg ImV4ZWN1dG9yL3NwaS5oIgorI2luY2x1ZGUgInV0aWxzL2ZtZ3Jwcm90b3MuaCIKKyNpbmNsdWRl ICJ1dGlscy9wZ19sc24uaCIKIAogLyogSG9vayBmb3IgcGx1Z2lucyB0byBnZXQgY29udHJvbCBp biBQcm9jZXNzVXRpbGl0eSgpICovCiBQcm9jZXNzVXRpbGl0eV9ob29rX3R5cGUgUHJvY2Vzc1V0 aWxpdHlfaG9vayA9IE5VTEw7CkBAIC0yNjgsNiArMjczLDcgQEAgQ2xhc3NpZnlVdGlsaXR5Q29t bWFuZEFzUmVhZE9ubHkoTm9kZSAqcGFyc2V0cmVlKQogCQljYXNlIFRfTG9hZFN0bXQ6CiAJCWNh c2UgVF9QcmVwYXJlU3RtdDoKIAkJY2FzZSBUX1VubGlzdGVuU3RtdDoKKwkJY2FzZSBUX1dhaXRT dG10OgogCQljYXNlIFRfVmFyaWFibGVTZXRTdG10OgogCQkJewogCQkJCS8qCkBAIC01OTEsNiAr NTk3LDExIEBAIHN0YW5kYXJkX1Byb2Nlc3NVdGlsaXR5KFBsYW5uZWRTdG10ICpwc3RtdCwKIAkJ CQkJY2FzZSBUUkFOU19TVE1UX1NUQVJUOgogCQkJCQkJewogCQkJCQkJCUxpc3RDZWxsICAgKmxj OworCQkJCQkJCVdhaXRTdG10ICAgKndhaXRzdG10ID0gKFdhaXRTdG10ICopIHN0bXQtPndhaXQ7 CisKKwkJCQkJCQkvKiBJZiB3ZSBoYXZlIFdhaXQgZXZlbnQsIGJ1dCBpdCBub3QgcmVhY2hlZCAq LworCQkJCQkJCWlmIChzdG10LT53YWl0ICYmIFdhaXRNYWluKHdhaXRzdG10LCBkZXN0KSAhPSAw KQorCQkJCQkJCQlicmVhazsKIAogCQkJCQkJCUJlZ2luVHJhbnNhY3Rpb25CbG9jaygpOwogCQkJ CQkJCWZvcmVhY2gobGMsIHN0bXQtPm9wdGlvbnMpCkBAIC0xMDYyLDYgKzEwNzMsMTMgQEAgc3Rh bmRhcmRfUHJvY2Vzc1V0aWxpdHkoUGxhbm5lZFN0bXQgKnBzdG10LAogCQkJCWJyZWFrOwogCQkJ fQogCisJCWNhc2UgVF9XYWl0U3RtdDoKKwkJCXsKKwkJCQlXYWl0U3RtdCAgICpzdG10ID0gKFdh aXRTdG10ICopIHBhcnNldHJlZTsKKwkJCQlXYWl0TWFpbihzdG10LCBkZXN0KTsKKwkJCQlicmVh azsKKwkJCX0KKwogCQlkZWZhdWx0OgogCQkJLyogQWxsIG90aGVyIHN0YXRlbWVudCB0eXBlcyBo YXZlIGV2ZW50IHRyaWdnZXIgc3VwcG9ydCAqLwogCQkJUHJvY2Vzc1V0aWxpdHlTbG93KHBzdGF0 ZSwgcHN0bXQsIHF1ZXJ5U3RyaW5nLApAQCAtMjcxOCw2ICsyNzM2LDEwIEBAIENyZWF0ZUNvbW1h bmRUYWcoTm9kZSAqcGFyc2V0cmVlKQogCQkJdGFnID0gQ01EVEFHX05PVElGWTsKIAkJCWJyZWFr OwogCisJCWNhc2UgVF9XYWl0U3RtdDoKKwkJCXRhZyA9IENNRFRBR19XQUlUOworCQkJYnJlYWs7 CisKIAkJY2FzZSBUX0xpc3RlblN0bXQ6CiAJCQl0YWcgPSBDTURUQUdfTElTVEVOOwogCQkJYnJl YWs7CkBAIC0zMzU3LDYgKzMzNzksMTAgQEAgR2V0Q29tbWFuZExvZ0xldmVsKE5vZGUgKnBhcnNl dHJlZSkKIAkJCWxldiA9IExPR1NUTVRfQUxMOwogCQkJYnJlYWs7CiAKKwkJY2FzZSBUX1dhaXRT dG10OgorCQkJbGV2ID0gTE9HU1RNVF9BTEw7CisJCQlicmVhazsKKwogCQljYXNlIFRfTGlzdGVu U3RtdDoKIAkJCWxldiA9IExPR1NUTVRfQUxMOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9jb21tYW5kcy93YWl0LmggYi9zcmMvaW5jbHVkZS9jb21tYW5kcy93YWl0LmgKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjExMTE1YjlkYWI2Ci0tLSAvZGV2 L251bGwKKysrIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvd2FpdC5oCkBAIC0wLDAgKzEsMjcgQEAK Ky8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHdhaXQuaAorICoJICBwcm90b3R5cGVzIGZvciBj b21tYW5kcy93YWl0LmMKKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAxNiwg UG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdo dCAoYykgMjAxNiwgUmVnZW50cyBvZiBQb3N0Z3Jlc1BSTworICoKKyAqIHNyYy9pbmNsdWRlL2Nv bW1hbmRzL3dhaXQuaAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVmIFdBSVRf SAorI2RlZmluZSBXQUlUX0gKKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorI2luY2x1ZGUgInRjb3Av ZGVzdC5oIgorCitleHRlcm4gaW50IFdhaXRVdGlsaXR5KFhMb2dSZWNQdHIgbHNuLCBjb25zdCBm bG9hdDggZGVsYXksIERlc3RSZWNlaXZlciAqZGVzdCk7CitleHRlcm4gdm9pZCBXYWl0VGltZVV0 aWxpdHkoZmxvYXQ4IGRlbGF5KTsKK2V4dGVybiBTaXplIFdhaXRTaG1lbVNpemUodm9pZCk7Citl eHRlcm4gdm9pZCBXYWl0U2htZW1Jbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgV2FpdFNldExhdGNo KFhMb2dSZWNQdHIgY3VyX2xzbik7CitleHRlcm4gWExvZ1JlY1B0ciBHZXRNaW5XYWl0KHZvaWQp OworZXh0ZXJuIGZsb2F0OCBXYWl0VGltZVJlc29sdmUoQ29uc3QgKnRpbWUpOworZXh0ZXJuIGlu dCBXYWl0TWFpbihXYWl0U3RtdCAqc3RtdCwgRGVzdFJlY2VpdmVyICpkZXN0KTsKKworI2VuZGlm ICAgLyogV0FJVF9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9ub2Rlcy5oIGIv c3JjL2luY2x1ZGUvbm9kZXMvbm9kZXMuaAppbmRleCA4YTc2YWZlOGNjYi4uMzQ4ZGU3NmM1ZjQg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL25vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUv bm9kZXMvbm9kZXMuaApAQCAtNDg4LDYgKzQ4OCw3IEBAIHR5cGVkZWYgZW51bSBOb2RlVGFnCiAJ VF9Ecm9wUmVwbGljYXRpb25TbG90Q21kLAogCVRfU3RhcnRSZXBsaWNhdGlvbkNtZCwKIAlUX1Rp bWVMaW5lSGlzdG9yeUNtZCwKKwlUX1dhaXRTdG10LAogCVRfU1FMQ21kLAogCiAJLyoKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVz L3BhcnNlbm9kZXMuaAppbmRleCAyMDM5YjQyNDQ5OS4uMzBhZjJjZmQ1MDUgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9w YXJzZW5vZGVzLmgKQEAgLTMwNTQsNiArMzA1NCw3IEBAIHR5cGVkZWYgc3RydWN0IFRyYW5zYWN0 aW9uU3RtdAogCWNoYXIJICAgKnNhdmVwb2ludF9uYW1lOyAvKiBmb3Igc2F2ZXBvaW50IGNvbW1h bmRzICovCiAJY2hhcgkgICAqZ2lkOwkJCS8qIGZvciB0d28tcGhhc2UtY29tbWl0IHJlbGF0ZWQg Y29tbWFuZHMgKi8KIAlib29sCQljaGFpbjsJCQkvKiBBTkQgQ0hBSU4gb3B0aW9uICovCisJTm9k ZQkJKndhaXQ7CQkJLyogV2FpdCBmb3IgZXZlbnQgbm9kZSBvciBOVUxMICovCiB9IFRyYW5zYWN0 aW9uU3RtdDsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMzU2Myw0ICszNTY0LDI1 IEBAIHR5cGVkZWYgc3RydWN0IERyb3BTdWJzY3JpcHRpb25TdG10CiAJRHJvcEJlaGF2aW9yIGJl aGF2aW9yOwkJLyogUkVTVFJJQ1Qgb3IgQ0FTQ0FERSBiZWhhdmlvciAqLwogfSBEcm9wU3Vic2Ny aXB0aW9uU3RtdDsKIAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoJCVdhaXQgU3RhdGVt ZW50CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKwordHlwZWRlZiBlbnVtIFdhaXRG b3JTdHJhdGVneQoreworCVdBSVRfRk9SX0FOWSA9IDAsCisJV0FJVF9GT1JfQUxMCit9IFdhaXRG b3JTdHJhdGVneTsKKwordHlwZWRlZiBzdHJ1Y3QgV2FpdFN0bXQKK3sKKwlOb2RlVGFnCQkJdHlw ZTsKKwlXYWl0Rm9yU3RyYXRlZ3kJc3RyYXRlZ3k7CisJTGlzdAkJICAgKmV2ZW50czsJCS8qIG9w dGlvbiAqLworCWNoYXIJCSAgICpsc247CQkvKiBUYXJnZXQgTFNOIHRvIHdhaXQgZm9yICovCisJ aW50CQkJCWRlbGF5OwkJLyogVGltZW91dCB3aGVuIHdhaXRpbmcgZm9yIExTTiwgaW4gbXNlYyAq LworCU5vZGUJCSAgICp0aW1lOwkJLyogV2FpdCBmb3IgdGltZXN0YW1wICovCit9IFdhaXRTdG10 OworCiAjZW5kaWYJCQkJCQkJLyogUEFSU0VOT0RFU19IICovCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9wYXJzZXIva3dsaXN0LmggYi9zcmMvaW5jbHVkZS9wYXJzZXIva3dsaXN0LmgKaW5kZXgg YjExODRjMmQxNTguLmRkMjJlMzU4YjlhIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9wYXJzZXIv a3dsaXN0LmgKKysrIGIvc3JjL2luY2x1ZGUvcGFyc2VyL2t3bGlzdC5oCkBAIC0yNDMsNiArMjQz LDcgQEAgUEdfS0VZV09SRCgibG9jYXRpb24iLCBMT0NBVElPTiwgVU5SRVNFUlZFRF9LRVlXT1JE KQogUEdfS0VZV09SRCgibG9jayIsIExPQ0tfUCwgVU5SRVNFUlZFRF9LRVlXT1JEKQogUEdfS0VZ V09SRCgibG9ja2VkIiwgTE9DS0VELCBVTlJFU0VSVkVEX0tFWVdPUkQpCiBQR19LRVlXT1JEKCJs b2dnZWQiLCBMT0dHRUQsIFVOUkVTRVJWRURfS0VZV09SRCkKK1BHX0tFWVdPUkQoImxzbiIsIExT TiwgVU5SRVNFUlZFRF9LRVlXT1JEKQogUEdfS0VZV09SRCgibWFwcGluZyIsIE1BUFBJTkcsIFVO UkVTRVJWRURfS0VZV09SRCkKIFBHX0tFWVdPUkQoIm1hdGNoIiwgTUFUQ0gsIFVOUkVTRVJWRURf S0VZV09SRCkKIFBHX0tFWVdPUkQoIm1hdGVyaWFsaXplZCIsIE1BVEVSSUFMSVpFRCwgVU5SRVNF UlZFRF9LRVlXT1JEKQpAQCAtNDA0LDYgKzQwNSw3IEBAIFBHX0tFWVdPUkQoInRleHQiLCBURVhU X1AsIFVOUkVTRVJWRURfS0VZV09SRCkKIFBHX0tFWVdPUkQoInRoZW4iLCBUSEVOLCBSRVNFUlZF RF9LRVlXT1JEKQogUEdfS0VZV09SRCgidGllcyIsIFRJRVMsIFVOUkVTRVJWRURfS0VZV09SRCkK IFBHX0tFWVdPUkQoInRpbWUiLCBUSU1FLCBDT0xfTkFNRV9LRVlXT1JEKQorUEdfS0VZV09SRCgi dGltZW91dCIsIFRJTUVPVVQsIFVOUkVTRVJWRURfS0VZV09SRCkKIFBHX0tFWVdPUkQoInRpbWVz dGFtcCIsIFRJTUVTVEFNUCwgQ09MX05BTUVfS0VZV09SRCkKIFBHX0tFWVdPUkQoInRvIiwgVE8s IFJFU0VSVkVEX0tFWVdPUkQpCiBQR19LRVlXT1JEKCJ0cmFpbGluZyIsIFRSQUlMSU5HLCBSRVNF UlZFRF9LRVlXT1JEKQpAQCAtNDQ0LDYgKzQ0Niw3IEBAIFBHX0tFWVdPUkQoInZlcnNpb24iLCBW RVJTSU9OX1AsIFVOUkVTRVJWRURfS0VZV09SRCkKIFBHX0tFWVdPUkQoInZpZXciLCBWSUVXLCBV TlJFU0VSVkVEX0tFWVdPUkQpCiBQR19LRVlXT1JEKCJ2aWV3cyIsIFZJRVdTLCBVTlJFU0VSVkVE X0tFWVdPUkQpCiBQR19LRVlXT1JEKCJ2b2xhdGlsZSIsIFZPTEFUSUxFLCBVTlJFU0VSVkVEX0tF WVdPUkQpCitQR19LRVlXT1JEKCJ3YWl0IiwgV0FJVCwgVU5SRVNFUlZFRF9LRVlXT1JEKQogUEdf S0VZV09SRCgid2hlbiIsIFdIRU4sIFJFU0VSVkVEX0tFWVdPUkQpCiBQR19LRVlXT1JEKCJ3aGVy ZSIsIFdIRVJFLCBSRVNFUlZFRF9LRVlXT1JEKQogUEdfS0VZV09SRCgid2hpdGVzcGFjZSIsIFdI SVRFU1BBQ0VfUCwgVU5SRVNFUlZFRF9LRVlXT1JEKQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv dGNvcC9jbWR0YWdsaXN0LmggYi9zcmMvaW5jbHVkZS90Y29wL2NtZHRhZ2xpc3QuaAppbmRleCA4 ZWYwZjU1ZTc0OC4uNDMwYmI1YzcxNzEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Rjb3AvY21k dGFnbGlzdC5oCisrKyBiL3NyYy9pbmNsdWRlL3Rjb3AvY21kdGFnbGlzdC5oCkBAIC0yMTYsMyAr MjE2LDQgQEAgUEdfQ01EVEFHKENNRFRBR19UUlVOQ0FURV9UQUJMRSwgIlRSVU5DQVRFIFRBQkxF IiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKIFBHX0NNRFRBRyhDTURUQUdfVU5MSVNURU4sICJVTkxJ U1RFTiIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCiBQR19DTURUQUcoQ01EVEFHX1VQREFURSwgIlVQ REFURSIsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKIFBHX0NNRFRBRyhDTURUQUdfVkFDVVVNLCAiVkFD VVVNIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfV0FJVCwgIldBSVQg Rk9SIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlY292ZXJ5 L3QvMDE4X3dhaXRmb3IucGwgYi9zcmMvdGVzdC9yZWNvdmVyeS90LzAxOF93YWl0Zm9yLnBsCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40MjkwMGRkODg2NwotLS0gL2Rl di9udWxsCisrKyBiL3NyYy90ZXN0L3JlY292ZXJ5L3QvMDE4X3dhaXRmb3IucGwKQEAgLTAsMCAr MSwxMDYgQEAKKyMgQ2hlY2tzIFdBSVQgRk9SCisKKyMgVE9ETzoKKyMgLSB0ZXN0IFdBSVQgRk9S IEFMTCAobWFueSBMU05zIHdpdGhvdXQgdGltZSwgbWFueSBMU05zIHdpdGggdGltZSkKKyMgLSB0 ZXN0IFdBSVQgRk9SIEFOWSAobWFueSBMU05zIHdpdGhvdXQgdGltZSwgbWFueSBMU05zIHdpdGgg dGltZSkKKyMgLSB0ZXN0IFdBSVQgRk9SIFRJTUVTVEFNUCAod2l0aCBMU04gKyB3aXRob3V0IExT TikKKyMgLSB0ZXN0IFdBSVQgRk9SIFRJTUVPVVQgKHdpdGggTFNOICsgd2l0aG91dCBMU04pCisK K3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7CisKK3VzZSBQb3N0Z3Jlc05vZGU7Cit1c2UgVGVz dExpYjsKK3VzZSBUZXN0OjpNb3JlIHRlc3RzID0+IDI7CisKKyMgSW5pdGlhbGl6ZSBtYXN0ZXIg bm9kZQorbXkgJG5vZGVfbWFzdGVyID0gZ2V0X25ld19ub2RlKCdtYXN0ZXInKTsKKyRub2RlX21h c3Rlci0+aW5pdChhbGxvd3Nfc3RyZWFtaW5nID0+IDEpOworJG5vZGVfbWFzdGVyLT5zdGFydDsK KworIyBBbmQgc29tZSBjb250ZW50Ciskbm9kZV9tYXN0ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LAorCSJDUkVBVEUgVEFCTEUgdGFiX2ludCBBUyBTRUxFQ1QgZ2VuZXJhdGVfc2VyaWVzKDEsIDEw KSBBUyBhIik7CisKKyMgVGFrZSBiYWNrdXAKK215ICRiYWNrdXBfbmFtZSA9ICdteV9iYWNrdXAn OworJG5vZGVfbWFzdGVyLT5iYWNrdXAoJGJhY2t1cF9uYW1lKTsKKworIyBDcmVhdGUgc3RyZWFt aW5nIHN0YW5kYnkgZnJvbSBiYWNrdXAKK215ICRub2RlX3N0YW5kYnkgPSBnZXRfbmV3X25vZGUo J3N0YW5kYnknKTsKK215ICRkZWxheSAgICAgICAgPSAxOworJG5vZGVfc3RhbmRieS0+aW5pdF9m cm9tX2JhY2t1cCgkbm9kZV9tYXN0ZXIsICRiYWNrdXBfbmFtZSwKKwloYXNfc3RyZWFtaW5nID0+ IDEpOworJG5vZGVfc3RhbmRieS0+YXBwZW5kX2NvbmYoCisJJ3Bvc3RncmVzcWwuY29uZicsIHFx KAorcmVjb3ZlcnlfbWluX2FwcGx5X2RlbGF5ID0gJyR7ZGVsYXl9cycKKykpOworJG5vZGVfc3Rh bmRieS0+c3RhcnQ7CisKKyMgTWFrZSBuZXcgY29udGVudCBvbiBtYXN0ZXIgYW5kIGNoZWNrIGl0 cyBwcmVzZW5jZSBpbiBzdGFuZGJ5IGRlcGVuZGluZworIyBvbiB0aGUgZGVsYXkgYXBwbGllZCBh Ym92ZS4gQmVmb3JlIGRvaW5nIHRoZSBpbnNlcnRpb24sIGdldCB0aGUKKyMgY3VycmVudCB0aW1l c3RhbXAgdGhhdCB3aWxsIGJlIHVzZWQgYXMgYSBjb21wYXJpc29uIGJhc2UuIEV2ZW4gb24gc2xv dworIyBtYWNoaW5lcywgdGhpcyBhbGxvd3MgdG8gaGF2ZSBhIHByZWRpY3RhYmxlIGJlaGF2aW9y IHdoZW4gY29tcGFyaW5nIHRoZQorIyBkZWxheSBiZXR3ZWVuIGRhdGEgaW5zZXJ0aW9uIG1vbWVu dCBvbiBtYXN0ZXIgYW5kIHJlcGxheSB0aW1lIG9uIHN0YW5kYnkuCitteSAkbWFzdGVyX2luc2Vy dF90aW1lID0gdGltZSgpOworJG5vZGVfbWFzdGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwki SU5TRVJUIElOVE8gdGFiX2ludCBWQUxVRVMgKGdlbmVyYXRlX3NlcmllcygxMSwgMjApKSIpOwor CisjIE5vdyB3YWl0IGZvciByZXBsYXkgdG8gY29tcGxldGUgb24gc3RhbmRieS4gV2UncmUgZG9u ZSB3YWl0aW5nIHdoZW4gdGhlCisjIHN0YW5kYnkgaGFzIHJlcGxheWVkIHVwIHRvIHRoZSBwcmV2 aW91c2x5IHNhdmVkIG1hc3RlciBMU04uCitteSAkbHNuMSA9CisgICRub2RlX21hc3Rlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgcGdfY3VycmVudF93YWxfbHNuKCkiKTsKKworIyBD aGVjayB0aGF0IHdhaXRsc24gaXMgYWJsZSB0byBzZXR1cCBpbmZpbml0ZSB3YWl0aW5nIGxvb3Ag YW5kIGV4aXQKKyMgaXQgd2l0aG91dCB0aW1lb3V0cy4KKyRub2RlX3N0YW5kYnktPnNhZmVfcHNx bCgncG9zdGdyZXMnLAorICAgICJXQUlUIEZPUiBMU04gJyRsc24xJyIpCisgIG9yIGRpZSAic3Rh bmRieSBuZXZlciBjYXVnaHQgdXAiOworCisjIFRoaXMgdGVzdCBpcyBzdWNjZXNzZnVsIGlmZiB0 aGUgTFNOIGhhcyBiZWVuIGFwcGxpZWQgd2l0aCBhdCBsZWFzdAorIyB0aGUgY29uZmlndXJlZCBh cHBseSBkZWxheS4KK215ICR0aW1lX3dhaXRlZCA9IHRpbWUoKSAtICRtYXN0ZXJfaW5zZXJ0X3Rp bWU7CitvaygkdGltZV93YWl0ZWQgPj0gJGRlbGF5LCAic3RhbmRieSBhcHBsaWVzIFdBTCBvbmx5 IGFmdGVyIHJlcGxpY2F0aW9uIGRlbGF5Iik7CisKKyRub2RlX21hc3Rlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsCisJIklOU0VSVCBJTlRPIHRhYl9pbnQgVkFMVUVTIChnZW5lcmF0ZV9zZXJpZXMo MjEsIDMwKSkiKTsKKworIyBDaGVjayB0aGF0IHdhaXRsc24gY2FuIHJldHVybiByZXN1bHQgaW1t ZWRpYXRlbHkgd2l0aCBOT1dBSVQuCiskbm9kZV9zdGFuZGJ5LT5wb2xsX3F1ZXJ5X3VudGlsKCdw b3N0Z3JlcycsCisgICAgIldBSVQgRk9SIExTTiAnJGxzbjEnIFRJTUVPVVQgMSIsICd0JykKKyAg b3IgZGllICJzdGFuZGJ5IG5ldmVyIGNhdWdodCB1cCI7CisKKyMgQ2hlY2sgdGhhdCB0aW1lb3V0 cyB3b3JrIG9uIHRoZWlyIG93biwgd2l0aG91dCBhbiBMU04gc3BlY2lmaWVkCitteSAkdGltZW91 dCA9IDEwMDA7ICMgMSBzZWNvbmQKK215ICRzdGFydF90aW1lID0gdGltZSgpOworJG5vZGVfc3Rh bmRieS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJXQUlUIEZPUiBUSU1FT1VUICR0aW1lb3V0Iik7 CiskdGltZV93YWl0ZWQgPSB0aW1lKCkgLSAkc3RhcnRfdGltZTsKK25vdGUoIkFza2VkIGZvciB0 aW1lb3V0ICR0aW1lb3V0IG1zLCBnb3QgZGVsYXllZCBmb3IgJHRpbWVfd2FpdGVkIHNlY29uZChz KSIpOworb2soJHRpbWVfd2FpdGVkID49ICR0aW1lb3V0IC8gMTAwMCwgIldBSVQgRk9SIFRJTUVP VVQgd29ya3Mgd2l0aG91dCBMU04iKTsKKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgVE9E TzogQ2hlY2sgdGhhdCBpc29sYXRpb24gbGV2ZWwgZG9lc24ndCBnZXQgYnJva2VuIGR1ZSB0byBX QUlUCisjIFRPRE86IEFkZCBtb3JlIHRlc3RzIGZvciBXQUlUIEZPUiBBTEwgLyBXQUlUIEZPUiBB TlkgLyBXQUlUIEZPUiBEQVRFVElNRQorIyBUT0RPOiBDbGVhbnVwIHRlc3RzCisjID09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQorJG5vZGVfbWFzdGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiSU5T RVJUIElOVE8gdGFiX2ludCBWQUxVRVMgKGdlbmVyYXRlX3NlcmllcygzMSwgNDApKSIpOworCitt eSAkbHNuMiA9CisgICRub2RlX21hc3Rlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1Qg cGdfY3VycmVudF93YWxfbHNuKCkiKTsKKworJG5vZGVfbWFzdGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywKKwkiSU5TRVJUIElOVE8gdGFiX2ludCBWQUxVRVMgKGdlbmVyYXRlX3Nlcmllcyg0MSwg NTAwMDAwKSkiKTsKKworbXkgJHN0YW5kYnlfbWF4ID0KKyAgJG5vZGVfc3RhbmRieS0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsCisgICAgIkJFR0lOIFRSQU5TQUNUSU9OIElTT0xBVElPTiBMRVZFTCBS RVBFQVRBQkxFIFJFQUQgV0FJVCBGT1IgTFNOICckbHNuMic7IFNFTEVDVCBwZ19zbGVlcF9mb3Io JzJzJyk7IFNFTEVDVCBtYXgoYSkgRlJPTSB0YWJfaW50OyBDT01NSVQ7Iik7CisKK215ICRsc25f bWFzdGVyID0KKyAgJG5vZGVfbWFzdGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBw Z19jdXJyZW50X3dhbF9sc24oKSIpOworbXkgJGxzbl9zdGFuZGJ5ID0KKyAgJG5vZGVfc3RhbmRi eS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgcGdfbGFzdF93YWxfcmVwbGF5X2xzbigp Iik7Citub3RlKCJXYWl0ZWQgZm9yIExTTiAkbHNuMiwgZ290IExTTiAkbHNuX3N0YW5kYnkgb24g c3RhbmRieSAoY3VycmVudCBtYXN0ZXIgTFNOID0gJGxzbl9tYXN0ZXIpLCBzdGFuZGJ5IG1heCA9 ICRzdGFuZGJ5X21heCIpOworCiskbm9kZV9tYXN0ZXItPnN0b3A7Ciskbm9kZV9zdGFuZGJ5LT5z dG9wOwo= --=_0292e02f3090f7c5ba6f5fef38e2041f--