Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wJfdo-0007b4-18 for pgsql-hackers@arkaria.postgresql.org; Sun, 03 May 2026 22:50:24 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wJfdl-004vw9-30 for pgsql-hackers@arkaria.postgresql.org; Sun, 03 May 2026 22:50:21 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wJfdl-004vw0-0e for pgsql-hackers@lists.postgresql.org; Sun, 03 May 2026 22:50:21 +0000 Received: from mail-lj1-x232.google.com ([2a00:1450:4864:20::232]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wJfdg-0000000034s-0noQ for pgsql-hackers@postgresql.org; Sun, 03 May 2026 22:50:20 +0000 Received: by mail-lj1-x232.google.com with SMTP id 38308e7fff4ca-38e7d983f79so35147501fa.0 for ; Sun, 03 May 2026 15:50:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1777848614; x=1778453414; darn=postgresql.org; h=in-reply-to:from:content-language:references:cc:to:subject :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=q18hoXCa6BN049swRPLsC59s08eilH9jrPkPZLcAJJE=; b=bSB948DNgpcC+fwDW7/DdxpvkTeTReuleBEr4piRp0qv+J10m7bQExFcOpWM8yVkd8 W3sfV7olw2ACXvIypqez+Xcbac+tbohwLvrJaxEJDYt6JYbbCZZ6ngp+jVT0qrnvdn6e pWCRE95DkpvjgSpLgGyj2TnfjvoyH/zI3zVJyZGoZBj6a3Qvwamb+W1axizsxGmp56Wi t+qM2SYLSVW5lyMOU1Jgap6k+DEXzC/o7YalxEJ1eMIouqCLBDJYzjmZfstO1pB+wCnM CD31y69EBAm/PzAQNDVs41s1QILjofQl5Go/nKONOr35e8naQn5aLHSG0/SeOn8degGp v8rg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777848614; x=1778453414; h=in-reply-to:from:content-language:references:cc:to:subject :user-agent:mime-version:date:message-id:x-gm-gg:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=q18hoXCa6BN049swRPLsC59s08eilH9jrPkPZLcAJJE=; b=Kio7f7P0V0qxL84EPy/VK3cUxjF1ReUY9CsgttNAcqUunelYslygg4/Vk8Z6WCr1Y8 mCgOT19jkARrWh8uLmG51sxmMEGakkhE+eOFY0gPogshEpnpCKj+GGdhhWs7agcih12j rGduatbE71rR1h0qAZU7b6B5HG45DsTJ2oWNFvl84Hkyt8/L2a7AKw7NAA9xQ4utjDin 2dQA8eX8i3WO1Poj77mwGefd9dh5TzCy3XJWTigpDP/CrQTbTJvxdA0qL2fxRuJaULy8 aZAInyvhBib2irxkRqMjxzZRq6HpYHbht1GmaO8zQ6PEipZEm9nDFePgQp76jPmO8Lk8 /Gzw== X-Forwarded-Encrypted: i=1; AFNElJ+d8AlFs1thoK+LnP/2dqrSZi8LLbLhBscU+EQpA1S4fii7jiUmJHqjQ2IBie9dtezy5+4Vjxgnt7kS2ETs@postgresql.org X-Gm-Message-State: AOJu0Yxifz9tRimfziEGUNWf+NyXjC6VXhc2CGPNtxl7PuJYXEgt0CLj rQjs6RLinR9AZ+sI+tgwsr3PrGEDjl19vcyqUtK5TjCzjGj9SEhsFWwe X-Gm-Gg: AeBDieum8qZItyKWyr888txTi5KxDLkss6RE3FMN18dsb7Wiqcxt/pN0CuRpL19luLH v8beiuxAZuXyrc/LEjHnYYF8d2bqN5YUB5668xqj4QVKXXivQ/3MILlJ2MEmYA38sCoAsicbdXx ygatj/QfKMBu0GqsJmsp/F5YSJKCz2vl/LnsH/S7E7T2/RobAKEtaF4odE3P/V2alMb1spm6gNu o6N1EcftEfS6EeW03T0BT5e0XtK7XExhsJbqDyrfXLnI+DdM4/8oGs9dxas9I1jZiMibq6raTzv TRI2H9orSdfk3P+rhv36ngAE6R/RyQHtJt/A7sLT/13WqcTwBenF864ffc5+fmaELJ/JpyMzorS JnqTytE6PMYWRAMCh+TO6Br8bYkiv7l7oxg5iQj+Ntwxypz6QiS84vmYEZPTrT+neu5VbRh2Oov 7B+oyMESJrBr9mQdpKQ880CxifSDedIRuz+0KLuh4= X-Received: by 2002:a05:651c:324a:b0:38c:50ed:d7ff with SMTP id 38308e7fff4ca-393784579ffmr23605661fa.2.1777848613775; Sun, 03 May 2026 15:50:13 -0700 (PDT) Received: from [192.168.1.108] ([95.129.140.141]) by smtp.gmail.com with ESMTPSA id 38308e7fff4ca-393900c9c94sm10034331fa.40.2026.05.03.15.50.12 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sun, 03 May 2026 15:50:13 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------mju9UEIq51MlMH29d3hdHkgB" Message-ID: <4516e7e8-46f0-4ded-907a-db5a7c0c75b3@gmail.com> Date: Mon, 4 May 2026 01:50:12 +0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Streaming replication and WAL archive interactions To: Jaroslav Novikov , Andrey Borodin Cc: hlinnaka@iki.fi, Michael Paquier , Robert Haas , Venkata Balaji N , Andres Freund , Fujii Masao , Borodin Vladimir , PostgreSQL-development , nkak@vmware.com, Roman Khapov , Kirill Reshke , ShirishaRao@vmware.com References: <548AF1CB.80702@vmware.com> <689EB259-44C2-4820-B901-4F6B1C55A1E4@simply.name> <549083D6.1000301@vmware.com> <54949108.3030109@vmware.com> <552FA38F.9060005@iki.fi> <5535FE71.1010905@iki.fi> <55362CAD.2000207@iki.fi> <553741FE.1080403@iki.fi> <554CB84E.3070406@iki.fi> <5550D20D.6090703@iki.fi> <50EF1E0E-9212-4BF2-9B2A-E38AC45D8ACD@yandex-team.ru> Content-Language: en-US From: Grigory Smolkin In-Reply-To: <50EF1E0E-9212-4BF2-9B2A-E38AC45D8ACD@yandex-team.ru> List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------mju9UEIq51MlMH29d3hdHkgB Content-Type: multipart/alternative; boundary="------------UQ0zELmVcB43iYPEafIEV0Ag" --------------UQ0zELmVcB43iYPEafIEV0Ag Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Hello, hackers! I would like to thank the community and all participants of this thread for their interest in this problem. In our production system with tens of thousands PostgreSQL clusters we encounter exactly the same issue and are forced to synchronize upstreams and downstreams via external means, which is quite suboptimal. I`ve done some work on top of the proposed v4 version patch and would like to present v5 version for a discussion. There are a number of changes, such as sending just TLI and Segno instead of full WAL filename, shifting some work into archiver and adding shared memory for walreceiver/archiver synchronization. There are a number of issues currently unresolved, which are worth a discussion. 1. Should we update pg_stat_archiver on standby to support cascading replication or should we just resend the report, received from upstream? Personally I'm more inclined towards the pg_stat_archiver path, because this way there will be less `if-else` programming and archive_mode=shared behaviour will be more monitoring-friendly. 2. What should we do with *.backup.ready and *.partial.ready on standby? Can we just XLogArchiveForceDone() them? 3. Should we keep the awkward part with switchpont calculation in timeline switch case? I think all segments that are not in our server history should just be stamped with XLogArchiveForceDone(). 4. Currently XLogArchiveForceDone is forced either by walreceiver (on receiving report from upstream) and archiver. Should we move this into the archiver entirely? Any feedback will be much appreciated. --------------UQ0zELmVcB43iYPEafIEV0Ag Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 8bit

Hello, hackers!
I would like to thank the community and all participants of this thread for their interest in this problem.
In our production system with tens of thousands PostgreSQL clusters we encounter exactly the same issue and are forced to synchronize upstreams and downstreams via external means, which is quite suboptimal.
I`ve done some work on top of the proposed v4 version patch and would like to present v5 version for a discussion.
There are a number of changes, such as sending just TLI and Segno instead of full WAL filename, shifting some work into archiver and adding shared memory for walreceiver/archiver synchronization.
There are a number of issues currently unresolved, which are worth a discussion.

1. Should we update pg_stat_archiver on standby to support cascading replication or should we just resend the report, received from upstream? Personally I'm more inclined towards the pg_stat_archiver path, because this way there will be less `if-else` programming and archive_mode=shared behaviour will be more monitoring-friendly.

2. What should we do with *.backup.ready and *.partial.ready on standby? Can we just XLogArchiveForceDone() them?

3. Should we keep the awkward part with switchpont calculation in timeline switch case? I think all segments that are not in our server history should just be stamped with XLogArchiveForceDone().

4. Currently XLogArchiveForceDone is forced either by walreceiver (on receiving report from upstream) and archiver. Should we move this into the archiver entirely?

Any feedback will be much appreciated.


--------------UQ0zELmVcB43iYPEafIEV0Ag-- --------------mju9UEIq51MlMH29d3hdHkgB Content-Type: text/x-patch; charset=UTF-8; name="v5_0001-Add-archive_mode-shared-for-coordinated-WAL-archiving.patch" Content-Disposition: attachment; filename*0="v5_0001-Add-archive_mode-shared-for-coordinated-WAL-archivin"; filename*1="g.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbCBiL2RvYy9zcmMvc2dtbC9j b25maWcuc2dtbAppbmRleCA2N2RhOWExZGU2Ni4uYmFiMGQ2MjRjZWUgMTAwNjQ0Ci0tLSBh L2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvY29uZmlnLnNn bWwKQEAgLTQwNDYsMTQgKzQwNDYsMzYgQEAgaW5jbHVkZV9kaXIgJ2NvbmYuZCcKICAgICAg ICAgYXJlIHNlbnQgdG8gYXJjaGl2ZSBzdG9yYWdlIGJ5IHNldHRpbmcKICAgICAgICAgPHhy ZWYgbGlua2VuZD0iZ3VjLWFyY2hpdmUtY29tbWFuZCIvPiBvcgogICAgICAgICA8eHJlZiBs aW5rZW5kPSJndWMtYXJjaGl2ZS1saWJyYXJ5Ii8+LiBJbiBhZGRpdGlvbiB0byA8bGl0ZXJh bD5vZmY8L2xpdGVyYWw+LAotICAgICAgICB0byBkaXNhYmxlLCB0aGVyZSBhcmUgdHdvIG1v ZGVzOiA8bGl0ZXJhbD5vbjwvbGl0ZXJhbD4sIGFuZAotICAgICAgICA8bGl0ZXJhbD5hbHdh eXM8L2xpdGVyYWw+LiBEdXJpbmcgbm9ybWFsIG9wZXJhdGlvbiwgdGhlcmUgaXMgbm8KLSAg ICAgICAgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB0d28gbW9kZXMsIGJ1dCB3aGVuIHNldCB0 byA8bGl0ZXJhbD5hbHdheXM8L2xpdGVyYWw+Ci0gICAgICAgIHRoZSBXQUwgYXJjaGl2ZXIg aXMgZW5hYmxlZCBhbHNvIGR1cmluZyBhcmNoaXZlIHJlY292ZXJ5IG9yIHN0YW5kYnkKLSAg ICAgICAgbW9kZS4gSW4gPGxpdGVyYWw+YWx3YXlzPC9saXRlcmFsPiBtb2RlLCBhbGwgZmls ZXMgcmVzdG9yZWQgZnJvbSB0aGUgYXJjaGl2ZQotICAgICAgICBvciBzdHJlYW1lZCB3aXRo IHN0cmVhbWluZyBwaHlzaWNhbCByZXBsaWNhdGlvbiB3aWxsIGJlIGFyY2hpdmVkIChhZ2Fp bikuIFNlZQotICAgICAgICA8eHJlZiBsaW5rZW5kPSJjb250aW51b3VzLWFyY2hpdmluZy1p bi1zdGFuZGJ5Ii8+IGZvciBkZXRhaWxzLgorICAgICAgICB0byBkaXNhYmxlLCB0aGVyZSBh cmUgdGhyZWUgbW9kZXM6IDxsaXRlcmFsPm9uPC9saXRlcmFsPiwgPGxpdGVyYWw+c2hhcmVk PC9saXRlcmFsPiwKKyAgICAgICAgYW5kIDxsaXRlcmFsPmFsd2F5czwvbGl0ZXJhbD4uIER1 cmluZyBub3JtYWwgb3BlcmF0aW9uIGFzIGEgcHJpbWFyeSwgdGhlcmUgaXMgbm8KKyAgICAg ICAgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB0aHJlZSBtb2RlcywgYnV0IHRoZXkgZGlmZmVy IGR1cmluZyBhcmNoaXZlIHJlY292ZXJ5IG9yCisgICAgICAgIHN0YW5kYnkgbW9kZToKICAg ICAgICA8L3BhcmE+CisgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgPGxpc3RpdGVt PgorICAgICAgICAgPHBhcmE+CisgICAgICAgICAgPGxpdGVyYWw+b248L2xpdGVyYWw+OiBB cmNoaXZlcyBXQUwgb25seSB3aGVuIHJ1bm5pbmcgYXMgYSBwcmltYXJ5LgorICAgICAgICAg PC9wYXJhPgorICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8bGlzdGl0ZW0+CisgICAg ICAgICA8cGFyYT4KKyAgICAgICAgICA8bGl0ZXJhbD5zaGFyZWQ8L2xpdGVyYWw+OiBDb29y ZGluYXRlcyBhcmNoaXZpbmcgYmV0d2VlbiBwcmltYXJ5IGFuZCBzdGFuZGJ5LgorICAgICAg ICAgIFRoZSBzdGFuZGJ5IGRlZmVycyBXQUwgYXJjaGl2YWwgYW5kIGRlbGV0aW9uIHVudGls IHRoZSBwcmltYXJ5IGNvbmZpcm1zCisgICAgICAgICAgYXJjaGl2YWwgdmlhIHN0cmVhbWlu ZyByZXBsaWNhdGlvbi4gVGhpcyBwcmV2ZW50cyBXQUwgaGlzdG9yeSBsb3NzIGR1cmluZwor ICAgICAgICAgIHN0YW5kYnkgcHJvbW90aW9uIGluIGhpZ2ggYXZhaWxhYmlsaXR5IHNldHVw cy4gVXBvbiBwcm9tb3Rpb24sIHRoZSBzdGFuZGJ5CisgICAgICAgICAgYXV0b21hdGljYWxs eSBzdGFydHMgYXJjaGl2aW5nIGFueSByZW1haW5pbmcgdW5hcmNoaXZlZCBXQUwuIFRoaXMg bW9kZSB3b3JrcworICAgICAgICAgIHdpdGggY2FzY2FkaW5nIHJlcGxpY2F0aW9uLCB3aGVy ZSBlYWNoIHN0YW5kYnkgY29vcmRpbmF0ZXMgd2l0aCBpdHMgaW1tZWRpYXRlCisgICAgICAg ICAgdXBzdHJlYW0gc2VydmVyLiBTZWUgPHhyZWYgbGlua2VuZD0iY29udGludW91cy1hcmNo aXZpbmctaW4tc3RhbmRieSIvPiBmb3IgZGV0YWlscy4KKyAgICAgICAgIDwvcGFyYT4KKyAg ICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgPHBhcmE+ CisgICAgICAgICAgPGxpdGVyYWw+YWx3YXlzPC9saXRlcmFsPjogQXJjaGl2ZXMgYWxsIFdB TCBpbmRlcGVuZGVudGx5LCBldmVuIGR1cmluZyByZWNvdmVyeS4KKyAgICAgICAgICBBbGwg ZmlsZXMgcmVzdG9yZWQgZnJvbSB0aGUgYXJjaGl2ZSBvciBzdHJlYW1lZCB3aXRoIHN0cmVh bWluZyBwaHlzaWNhbAorICAgICAgICAgIHJlcGxpY2F0aW9uIHdpbGwgYmUgYXJjaGl2ZWQg KGFnYWluKSwgcmVnYXJkbGVzcyBvZiB0aGVpciBzb3VyY2UuCisgICAgICAgICA8L3BhcmE+ CisgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgPC9pdGVtaXplZGxpc3Q+CiAgICAgICAg PHBhcmE+CiAgICAgICAgIDx2YXJuYW1lPmFyY2hpdmVfbW9kZTwvdmFybmFtZT4gaXMgYSBz ZXBhcmF0ZSBzZXR0aW5nIGZyb20KICAgICAgICAgPHZhcm5hbWU+YXJjaGl2ZV9jb21tYW5k PC92YXJuYW1lPiBhbmQKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9oaWdoLWF2YWlsYWJp bGl0eS5zZ21sIGIvZG9jL3NyYy9zZ21sL2hpZ2gtYXZhaWxhYmlsaXR5LnNnbWwKaW5kZXgg YmU4ZDNhNWJmZWEuLmU5NmE2MGJmYjRjIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvaGln aC1hdmFpbGFiaWxpdHkuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvaGlnaC1hdmFpbGFiaWxp dHkuc2dtbApAQCAtMTQ0OSwzNSArMTQ0OSw2MSBAQCBwb3N0Z3Jlcz0jIFdBSVQgRk9SIExT TiAnMC8zMDZFRTIwJzsKICAgIDwvaW5kZXh0ZXJtPgogCiAgICA8cGFyYT4KLSAgICAgV2hl biBjb250aW51b3VzIFdBTCBhcmNoaXZpbmcgaXMgdXNlZCBpbiBhIHN0YW5kYnksIHRoZXJl IGFyZSB0d28KLSAgICAgZGlmZmVyZW50IHNjZW5hcmlvczogdGhlIFdBTCBhcmNoaXZlIGNh biBiZSBzaGFyZWQgYmV0d2VlbiB0aGUgcHJpbWFyeQotICAgICBhbmQgdGhlIHN0YW5kYnks IG9yIHRoZSBzdGFuZGJ5IGNhbiBoYXZlIGl0cyBvd24gV0FMIGFyY2hpdmUuIFdoZW4KLSAg ICAgdGhlIHN0YW5kYnkgaGFzIGl0cyBvd24gV0FMIGFyY2hpdmUsIHNldCA8dmFybmFtZT5h cmNoaXZlX21vZGU8L3Zhcm5hbWU+CisgICAgIFdoZW4gY29udGludW91cyBXQUwgYXJjaGl2 aW5nIGlzIHVzZWQgaW4gYSBzdGFuZGJ5LCB0aGVyZSBhcmUgdGhyZWUKKyAgICAgZGlmZmVy ZW50IHNjZW5hcmlvczogdGhlIHN0YW5kYnkgY2FuIGhhdmUgaXRzIG93biBpbmRlcGVuZGVu dCBXQUwgYXJjaGl2ZSwKKyAgICAgdGhlIFdBTCBhcmNoaXZlIGNhbiBiZSBzaGFyZWQgYmV0 d2VlbiB0aGUgcHJpbWFyeSBhbmQgc3RhbmRieSwgb3IgYXJjaGl2aW5nCisgICAgIGNhbiBi ZSBjb29yZGluYXRlZCBiZXR3ZWVuIHRoZW0uCisgICA8L3BhcmE+CisKKyAgIDxwYXJhPgor ICAgICBGb3IgYW4gaW5kZXBlbmRlbnQgYXJjaGl2ZSwgc2V0IDx2YXJuYW1lPmFyY2hpdmVf bW9kZTwvdmFybmFtZT4KICAgICAgdG8gPGxpdGVyYWw+YWx3YXlzPC9saXRlcmFsPiwgYW5k IHRoZSBzdGFuZGJ5IHdpbGwgY2FsbCB0aGUgYXJjaGl2ZQogICAgICBjb21tYW5kIGZvciBl dmVyeSBXQUwgc2VnbWVudCBpdCByZWNlaXZlcywgd2hldGhlciBpdCdzIGJ5IHJlc3Rvcmlu ZwotICAgICBmcm9tIHRoZSBhcmNoaXZlIG9yIGJ5IHN0cmVhbWluZyByZXBsaWNhdGlvbi4g VGhlIHNoYXJlZCBhcmNoaXZlIGNhbgotICAgICBiZSBoYW5kbGVkIHNpbWlsYXJseSwgYnV0 IHRoZSA8dmFybmFtZT5hcmNoaXZlX2NvbW1hbmQ8L3Zhcm5hbWU+IG9yIDx2YXJuYW1lPmFy Y2hpdmVfbGlicmFyeTwvdmFybmFtZT4gbXVzdAotICAgICB0ZXN0IGlmIHRoZSBmaWxlIGJl aW5nIGFyY2hpdmVkIGV4aXN0cyBhbHJlYWR5LCBhbmQgaWYgdGhlIGV4aXN0aW5nIGZpbGUK LSAgICAgaGFzIGlkZW50aWNhbCBjb250ZW50cy4gVGhpcyByZXF1aXJlcyBtb3JlIGNhcmUg aW4gdGhlCi0gICAgIDx2YXJuYW1lPmFyY2hpdmVfY29tbWFuZDwvdmFybmFtZT4gb3IgPHZh cm5hbWU+YXJjaGl2ZV9saWJyYXJ5PC92YXJuYW1lPiwgYXMgaXQgbXVzdAotICAgICBiZSBj YXJlZnVsIHRvIG5vdCBvdmVyd3JpdGUgYW4gZXhpc3RpbmcgZmlsZSB3aXRoIGRpZmZlcmVu dCBjb250ZW50cywKLSAgICAgYnV0IHJldHVybiBzdWNjZXNzIGlmIHRoZSBleGFjdGx5IHNh bWUgZmlsZSBpcyBhcmNoaXZlZCB0d2ljZS4gQW5kCi0gICAgIGFsbCB0aGF0IG11c3QgYmUg ZG9uZSBmcmVlIG9mIHJhY2UgY29uZGl0aW9ucywgaWYgdHdvIHNlcnZlcnMgYXR0ZW1wdAot ICAgICB0byBhcmNoaXZlIHRoZSBzYW1lIGZpbGUgYXQgdGhlIHNhbWUgdGltZS4KKyAgICAg ZnJvbSB0aGUgYXJjaGl2ZSBvciBieSBzdHJlYW1pbmcgcmVwbGljYXRpb24uCisgICA8L3Bh cmE+CisKKyAgIDxwYXJhPgorICAgICBGb3IgYSBzaGFyZWQgYXJjaGl2ZSB3aGVyZSBib3Ro IHByaW1hcnkgYW5kIHN0YW5kYnkgY2FuIHdyaXRlLCB1c2UKKyAgICAgPGxpdGVyYWw+YWx3 YXlzPC9saXRlcmFsPiBtb2RlIGFzIHdlbGwsIGJ1dCB0aGUgPHZhcm5hbWU+YXJjaGl2ZV9j b21tYW5kPC92YXJuYW1lPgorICAgICBvciA8dmFybmFtZT5hcmNoaXZlX2xpYnJhcnk8L3Zh cm5hbWU+IG11c3QgdGVzdCBpZiB0aGUgZmlsZSBiZWluZyBhcmNoaXZlZAorICAgICBleGlz dHMgYWxyZWFkeSwgYW5kIGlmIHRoZSBleGlzdGluZyBmaWxlIGhhcyBpZGVudGljYWwgY29u dGVudHMuIFRoaXMgcmVxdWlyZXMKKyAgICAgbW9yZSBjYXJlIGluIHRoZSA8dmFybmFtZT5h cmNoaXZlX2NvbW1hbmQ8L3Zhcm5hbWU+IG9yIDx2YXJuYW1lPmFyY2hpdmVfbGlicmFyeTwv dmFybmFtZT4sCisgICAgIGFzIGl0IG11c3QgYmUgY2FyZWZ1bCB0byBub3Qgb3ZlcndyaXRl IGFuIGV4aXN0aW5nIGZpbGUgd2l0aCBkaWZmZXJlbnQgY29udGVudHMsCisgICAgIGJ1dCBy ZXR1cm4gc3VjY2VzcyBpZiB0aGUgZXhhY3RseSBzYW1lIGZpbGUgaXMgYXJjaGl2ZWQgdHdp Y2UuIEFuZCBhbGwgdGhhdCBtdXN0CisgICAgIGJlIGRvbmUgZnJlZSBvZiByYWNlIGNvbmRp dGlvbnMsIGlmIHR3byBzZXJ2ZXJzIGF0dGVtcHQgdG8gYXJjaGl2ZSB0aGUgc2FtZSBmaWxl CisgICAgIGF0IHRoZSBzYW1lIHRpbWUuCisgICA8L3BhcmE+CisKKyAgIDxwYXJhPgorICAg ICBGb3IgY29vcmRpbmF0ZWQgYXJjaGl2aW5nIGluIGhpZ2ggYXZhaWxhYmlsaXR5IHNldHVw cywgdXNlCisgICAgIDx2YXJuYW1lPmFyY2hpdmVfbW9kZTwvdmFybmFtZT49PGxpdGVyYWw+ c2hhcmVkPC9saXRlcmFsPi4gSW4gdGhpcyBtb2RlLCBvbmx5CisgICAgIHRoZSBwcmltYXJ5 IGFyY2hpdmVzIFdBTCBzZWdtZW50cy4gVGhlIHN0YW5kYnkgY3JlYXRlcyA8bGl0ZXJhbD4u cmVhZHk8L2xpdGVyYWw+CisgICAgIGZpbGVzIGZvciByZWNlaXZlZCBzZWdtZW50cyBidXQg ZGVmZXJzIGFjdHVhbCBhcmNoaXZpbmcuIFRoZSBwcmltYXJ5IHBlcmlvZGljYWxseQorICAg ICBzZW5kcyBhcmNoaXZhbCBzdGF0dXMgdXBkYXRlcyB0byB0aGUgc3RhbmRieSB2aWEgc3Ry ZWFtaW5nIHJlcGxpY2F0aW9uLCBpbmZvcm1pbmcKKyAgICAgaXQgd2hpY2ggc2VnbWVudHMg aGF2ZSBiZWVuIGFyY2hpdmVkLiBUaGUgc3RhbmRieSB0aGVuIG1hcmtzIHRoZXNlIGFzIGFy Y2hpdmVkCisgICAgIGFuZCBhbGxvd3MgdGhlbSB0byBiZSByZWN5Y2xlZC4gVXBvbiBwcm9t b3Rpb24sIHRoZSBzdGFuZGJ5IGF1dG9tYXRpY2FsbHkgc3RhcnRzCisgICAgIGFyY2hpdmlu ZyBhbnkgcmVtYWluaW5nIFdBTCBzZWdtZW50cyB0aGF0IHdlcmVuJ3QgY29uZmlybWVkIGFz IGFyY2hpdmVkIGJ5IHRoZQorICAgICBmb3JtZXIgcHJpbWFyeS4gVGhpcyBwcmV2ZW50cyBX QUwgaGlzdG9yeSBsb3NzIGR1cmluZyBmYWlsb3ZlciB3aGlsZSBhdm9pZGluZworICAgICB0 aGUgY29tcGxleGl0eSBvZiBjb29yZGluYXRpbmcgY29uY3VycmVudCBhcmNoaXZpbmcuIFRo aXMgbW9kZSB3b3JrcyB3aXRoIGNhc2NhZGluZworICAgICByZXBsaWNhdGlvbiwgd2hlcmUg ZWFjaCBzdGFuZGJ5IGNvb3JkaW5hdGVzIHdpdGggaXRzIGltbWVkaWF0ZSB1cHN0cmVhbSBz ZXJ2ZXIuCiAgICA8L3BhcmE+CiAKICAgIDxwYXJhPgogICAgICBJZiA8dmFybmFtZT5hcmNo aXZlX21vZGU8L3Zhcm5hbWU+IGlzIHNldCB0byA8bGl0ZXJhbD5vbjwvbGl0ZXJhbD4sIHRo ZQotICAgICBhcmNoaXZlciBpcyBub3QgZW5hYmxlZCBkdXJpbmcgcmVjb3Zlcnkgb3Igc3Rh bmRieSBtb2RlLiBJZiB0aGUgc3RhbmRieQotICAgICBzZXJ2ZXIgaXMgcHJvbW90ZWQsIGl0 IHdpbGwgc3RhcnQgYXJjaGl2aW5nIGFmdGVyIHRoZSBwcm9tb3Rpb24sIGJ1dAotICAgICB3 aWxsIG5vdCBhcmNoaXZlIGFueSBXQUwgb3IgdGltZWxpbmUgaGlzdG9yeSBmaWxlcyB0aGF0 Ci0gICAgIGl0IGRpZCBub3QgZ2VuZXJhdGUgaXRzZWxmLiBUbyBnZXQgYSBjb21wbGV0ZQot ICAgICBzZXJpZXMgb2YgV0FMIGZpbGVzIGluIHRoZSBhcmNoaXZlLCB5b3UgbXVzdCBlbnN1 cmUgdGhhdCBhbGwgV0FMIGlzCi0gICAgIGFyY2hpdmVkLCBiZWZvcmUgaXQgcmVhY2hlcyB0 aGUgc3RhbmRieS4gVGhpcyBpcyBpbmhlcmVudGx5IHRydWUgd2l0aAotICAgICBmaWxlLWJh c2VkIGxvZyBzaGlwcGluZywgYXMgdGhlIHN0YW5kYnkgY2FuIG9ubHkgcmVzdG9yZSBmaWxl cyB0aGF0Ci0gICAgIGFyZSBmb3VuZCBpbiB0aGUgYXJjaGl2ZSwgYnV0IG5vdCBpZiBzdHJl YW1pbmcgcmVwbGljYXRpb24gaXMgZW5hYmxlZC4KLSAgICAgV2hlbiBhIHNlcnZlciBpcyBu b3QgaW4gcmVjb3ZlcnkgbW9kZSwgdGhlcmUgaXMgbm8gZGlmZmVyZW5jZSBiZXR3ZWVuCi0g ICAgIDxsaXRlcmFsPm9uPC9saXRlcmFsPiBhbmQgPGxpdGVyYWw+YWx3YXlzPC9saXRlcmFs PiBtb2Rlcy4KKyAgICAgYXJjaGl2ZXIgaXMgbm90IGVuYWJsZWQgZHVyaW5nIHJlY292ZXJ5 IG9yIHN0YW5kYnkgbW9kZSwgYW5kIHRoaXMgc2V0dGluZworICAgICBjYW5ub3QgYmUgdXNl ZCBvbiBhIHN0YW5kYnkuIElmIGEgc3RhbmRieSB3aXRoIDxsaXRlcmFsPmFyY2hpdmVfbW9k ZTwvbGl0ZXJhbD4KKyAgICAgc2V0IHRvIDxsaXRlcmFsPm9uPC9saXRlcmFsPiBpcyBwcm9t b3RlZCwgaXQgd2lsbCBzdGFydCBhcmNoaXZpbmcgYWZ0ZXIgdGhlCisgICAgIHByb21vdGlv biwgYnV0IHdpbGwgbm90IGFyY2hpdmUgYW55IFdBTCBvciB0aW1lbGluZSBoaXN0b3J5IGZp bGVzIHRoYXQgaXQgZGlkCisgICAgIG5vdCBnZW5lcmF0ZSBpdHNlbGYuIFRvIGdldCBhIGNv bXBsZXRlIHNlcmllcyBvZiBXQUwgZmlsZXMgaW4gdGhlIGFyY2hpdmUsIHlvdQorICAgICBt dXN0IGVuc3VyZSB0aGF0IGFsbCBXQUwgaXMgYXJjaGl2ZWQgYmVmb3JlIGl0IHJlYWNoZXMg dGhlIHN0YW5kYnkuIFRoaXMgaXMKKyAgICAgaW5oZXJlbnRseSB0cnVlIHdpdGggZmlsZS1i YXNlZCBsb2cgc2hpcHBpbmcsIGFzIHRoZSBzdGFuZGJ5IGNhbiBvbmx5IHJlc3RvcmUKKyAg ICAgZmlsZXMgdGhhdCBhcmUgZm91bmQgaW4gdGhlIGFyY2hpdmUsIGJ1dCBub3QgaWYgc3Ry ZWFtaW5nIHJlcGxpY2F0aW9uIGlzIGVuYWJsZWQuCisgICA8L3BhcmE+CisKKyAgIDxwYXJh PgorICAgICBXaGVuIGEgc2VydmVyIGlzIG5vdCBpbiByZWNvdmVyeSBtb2RlLCA8bGl0ZXJh bD5vbjwvbGl0ZXJhbD4sCisgICAgIDxsaXRlcmFsPnNoYXJlZDwvbGl0ZXJhbD4sIGFuZCA8 bGl0ZXJhbD5hbHdheXM8L2xpdGVyYWw+IG1vZGVzIGFsbCBiZWhhdmUKKyAgICAgaWRlbnRp Y2FsbHksIGFyY2hpdmluZyBjb21wbGV0ZWQgV0FMIHNlZ21lbnRzLgogICAgPC9wYXJhPgog ICA8L3NlY3QyPgogICA8L3NlY3QxPgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNz L3RyYW5zYW0veGxvZy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jCmlu ZGV4IGY4NWI1Mjg2MDg2Li5lNDFjMjVlOGMxZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv YWNjZXNzL3RyYW5zYW0veGxvZy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2Ft L3hsb2cuYwpAQCAtMTk5LDYgKzE5OSw3IEBAIGNvbnN0IHN0cnVjdCBjb25maWdfZW51bV9l bnRyeSBhcmNoaXZlX21vZGVfb3B0aW9uc1tdID0gewogCXsiYWx3YXlzIiwgQVJDSElWRV9N T0RFX0FMV0FZUywgZmFsc2V9LAogCXsib24iLCBBUkNISVZFX01PREVfT04sIGZhbHNlfSwK IAl7Im9mZiIsIEFSQ0hJVkVfTU9ERV9PRkYsIGZhbHNlfSwKKwl7InNoYXJlZCIsIEFSQ0hJ VkVfTU9ERV9TSEFSRUQsIGZhbHNlfSwKIAl7InRydWUiLCBBUkNISVZFX01PREVfT04sIHRy dWV9LAogCXsiZmFsc2UiLCBBUkNISVZFX01PREVfT0ZGLCB0cnVlfSwKIAl7InllcyIsIEFS Q0hJVkVfTU9ERV9PTiwgdHJ1ZX0sCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wb3N0bWFz dGVyL3BnYXJjaC5jIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wZ2FyY2guYwppbmRleCAw ZjIwN2FjMDM1Ni4uZDVjYmNkYjQ1YTggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3Rt YXN0ZXIvcGdhcmNoLmMKKysrIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wZ2FyY2guYwpA QCAtNTUsNiArNTUsOSBAQAogI2luY2x1ZGUgInV0aWxzL3Jlc293bmVyLmgiCiAjaW5jbHVk ZSAidXRpbHMvdGltZW91dC5oIgogI2luY2x1ZGUgInV0aWxzL3dhaXRfZXZlbnQuaCIKKyNp bmNsdWRlICJyZXBsaWNhdGlvbi93YWxyZWNlaXZlci5oIgorI2luY2x1ZGUgImFjY2Vzcy90 aW1lbGluZS5oIgorI2luY2x1ZGUgImFjY2Vzcy94bG9nYXJjaGl2ZS5oIgogCiAKIC8qIC0t LS0tLS0tLS0KQEAgLTEwOCw2ICsxMTEsMTUgQEAgc3RhdGljIGNvbnN0IEFyY2hpdmVNb2R1 bGVDYWxsYmFja3MgKkFyY2hpdmVDYWxsYmFja3M7CiBzdGF0aWMgQXJjaGl2ZU1vZHVsZVN0 YXRlICphcmNoaXZlX21vZHVsZV9zdGF0ZTsKIHN0YXRpYyBNZW1vcnlDb250ZXh0IGFyY2hp dmVfY29udGV4dDsKIAorLyoKKyAqIExhc3Qgc2VnbWVudCB3ZSBzdWNjZXNzZnVsbHkgbWFy a2VkIGFzIC5kb25lLiBVc2VkIHRvIG9wdGltaXplCisgKiBQcm9jZXNzQXJjaGl2YWxSZXBv cnQoKSBieSBnZW5lcmF0aW5nIGV4cGVjdGVkIGZpbGVuYW1lcyBpbnN0ZWFkCisgKiBvZiBz Y2FubmluZyB0aGUgYXJjaGl2ZV9zdGF0dXMgZGlyZWN0b3J5LgorICovCitzdGF0aWMgVGlt ZUxpbmVJRCBsYXN0X3Byb2Nlc3NlZF90bGkgPSAwOworc3RhdGljIFhMb2dTZWdObyBsYXN0 X3Byb2Nlc3NlZF9zZWdubyA9IDA7CitBcmNoaXZhbFJlcG9ydERhdGEgKkFyY2hSZXBvcnQ7 CitzdGF0aWMgdm9pZCBQcm9jZXNzQXJjaGl2YWxSZXBvcnQodm9pZCk7CiAKIC8qCiAgKiBT dHVmZiBmb3IgdHJhY2tpbmcgbXVsdGlwbGUgZmlsZXMgdG8gYXJjaGl2ZSBmcm9tIGVhY2gg c2NhbiBvZgpAQCAtMzg1LDYgKzM5NywxOCBAQCBwZ2FyY2hfQXJjaGl2ZXJDb3B5TG9vcCh2 b2lkKQogewogCWNoYXIJCXhsb2dbTUFYX1hGTl9DSEFSUyArIDFdOwogCisJLyoKKwkgKiBJ biBzaGFyZWQgYXJjaGl2ZSBtb2RlIGR1cmluZyByZWNvdmVyeSwgdGhlIGFyY2hpdmVyIGRv ZXNuJ3QgYXJjaGl2ZQorCSAqIGZpbGVzLiBUaGUgcHJpbWFyeSBpcyByZXNwb25zaWJsZSBm b3IgYXJjaGl2aW5nLCBhbmQgdGhlIHdhbHJlY2VpdmVyCisJICogbWFya3MgZmlsZXMgYXMg LmRvbmUgd2hlbiB0aGUgcHJpbWFyeSBjb25maXJtcyBhcmNoaXZhbC4gQWZ0ZXIKKwkgKiBw cm9tb3Rpb24sIHRoZSBhcmNoaXZlciBzdGFydHMgd29ya2luZyBub3JtYWxseS4KKwkgKi8K KwlpZiAoWExvZ0FyY2hpdmVNb2RlID09IEFSQ0hJVkVfTU9ERV9TSEFSRUQgJiYgUmVjb3Zl cnlJblByb2dyZXNzKCkpCisJeworCQlQcm9jZXNzQXJjaGl2YWxSZXBvcnQoKTsKKwkJcmV0 dXJuOworCX0KKwogCS8qIGZvcmNlIGRpcmVjdG9yeSBzY2FuIGluIHRoZSBmaXJzdCBjYWxs IHRvIHBnYXJjaF9yZWFkeVhsb2coKSAqLwogCWFyY2hfZmlsZXMtPmFyY2hfZmlsZXNfc2l6 ZSA9IDA7CiAKQEAgLTk2MCwzICs5ODQsMTY5IEBAIHBnYXJjaF9jYWxsX21vZHVsZV9zaHV0 ZG93bl9jYihpbnQgY29kZSwgRGF0dW0gYXJnKQogCWlmIChBcmNoaXZlQ2FsbGJhY2tzLT5z aHV0ZG93bl9jYiAhPSBOVUxMKQogCQlBcmNoaXZlQ2FsbGJhY2tzLT5zaHV0ZG93bl9jYihh cmNoaXZlX21vZHVsZV9zdGF0ZSk7CiB9CisKKy8qCisgKiBQcm9jZXNzIGFyY2hpdmFsIHJl cG9ydCBmcm9tIHByaW1hcnkuCisgKgorICogVGhlIHByaW1hcnkgc2VuZHMgdXMgdGhlIGxh c3QgV0FMIHNlZ21lbnQgaXQgaGFzIGFyY2hpdmVkLiBXZSBzY2FuIHRoZQorICogYXJjaGl2 ZV9zdGF0dXMgZGlyZWN0b3J5IGZvciAucmVhZHkgZmlsZXMgYW5kIG1hcmsgc2VnbWVudHMg b24gdGhlIHNhbWUKKyAqIHRpbWVsaW5lIGFzIC5kb25lIGlmIHRoZXkncmUgPD0gdGhlIHJl cG9ydGVkIHNlZ21lbnQuCisgKi8KK3N0YXRpYyB2b2lkCitQcm9jZXNzQXJjaGl2YWxSZXBv cnQoKQoreworCWNoYXIJCXdhbGZpbGVbTUFYX1hGTl9DSEFSUyArIDFdOworCWNoYXIJCXBy aW1hcnlfbGFzdF9hcmNoaXZlZF9mbmFtZVtNQVhfWEZOX0NIQVJTICsgMV07CisJY2hhcgkJ c3RhdHVzX3BhdGhbTUFYUEdQQVRIXTsKKy8vCURJUgkJICAgKnN0YXR1c19kaXI7CisvLwlz dHJ1Y3QgZGlyZW50ICpzdGF0dXNfZGU7CisJTGlzdAkgICAqdGxpX2hpc3RvcnkgPSBOSUw7 CisKKwlpZiAoQXJjaFJlcG9ydC0+dGxpID09IDAgfHwgQXJjaFJlcG9ydC0+c2Vnbm8gPT0g MCkKKwl7CisJCWVyZXBvcnQoREVCVUcyLAorCQkJCQkoZXJybXNnKCJhcmNoaXZhbCByZXBv cnQgZnJvbSB1cHN0cmVhbSB3YXMgbm90IHllcyByZWNlaXZlZCIpKSk7CisJCXJldHVybjsK Kwl9CisKKwlYTG9nRmlsZU5hbWUocHJpbWFyeV9sYXN0X2FyY2hpdmVkX2ZuYW1lLCBBcmNo UmVwb3J0LT50bGksIEFyY2hSZXBvcnQtPnNlZ25vLCB3YWxfc2VnbWVudF9zaXplKTsKKwor CS8qCisJICogT3B0aW1pemF0aW9uOiBJZiB0aGUgbmV3IHJlcG9ydCBpcyBvbiB0aGUgc2Ft ZSB0aW1lbGluZSBhcyB0aGUgbGFzdAorCSAqIHByb2Nlc3NlZCBzZWdtZW50IGFuZCBtb3Zl cyBmb3J3YXJkLCB3ZSBjYW4gZGlyZWN0bHkgY2hlY2sgZm9yIC5yZWFkeQorCSAqIGZpbGVz IGZvciBzZWdtZW50cyBiZXR3ZWVuIGxhc3RfcHJvY2Vzc2VkX3NlZ25vIGFuZCByZXBvcnRl ZF9zZWdubworCSAqIGluc3RlYWQgb2Ygc2Nhbm5pbmcgdGhlIGVudGlyZSBhcmNoaXZlX3N0 YXR1cyBkaXJlY3RvcnkuCisJICoKKwkgKiBGYWxsIGJhY2sgdG8gZGlyZWN0b3J5IHNjYW4g aWY6CisJICogLSBUaW1lbGluZSBjaGFuZ2VkIChuZWVkIHRvIGhhbmRsZSBhbmNlc3RvciB0 aW1lbGluZXMpCisJICogLSBUaGlzIGlzIHRoZSBmaXJzdCByZXBvcnQgKGxhc3RfcHJvY2Vz c2VkX3RsaSA9PSAwKQorCSAqIC0gUmVwb3J0ZWQgc2VnbWVudCBpcyBub3QgYWhlYWQgKG5v dGhpbmcgbmV3IHRvIHByb2Nlc3MpCisJICovCisJaWYgKGxhc3RfcHJvY2Vzc2VkX3RsaSA9 PSBBcmNoUmVwb3J0LT50bGkgJiYKKwkJQXJjaFJlcG9ydC0+c2Vnbm8gPiBsYXN0X3Byb2Nl c3NlZF9zZWdubykKKwl7CisJCS8qCisJCSAqIERpcmVjdCBjaGVjazogZ2VuZXJhdGUgZmls ZW5hbWVzIGZvciBleHBlY3RlZCBzZWdtZW50cy4KKwkJICogWExvZ0FyY2hpdmVGb3JjZURv bmUoKSB3aWxsIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSAucmVhZHkgZG9lc24ndAorCQkgKiBl eGlzdCBvciAuZG9uZSBhbHJlYWR5IGV4aXN0cywgc28gbm8gbmVlZCB0byBzdGF0KCkgZmly c3QuCisJCSAqLworCQlYTG9nU2VnTm8gc2Vnbm87CisJCVhMb2dTZWdObyBzdGFydF9zZWdu byA9IGxhc3RfcHJvY2Vzc2VkX3NlZ25vICsgMTsKKworCQlmb3IgKHNlZ25vID0gc3RhcnRf c2Vnbm87IHNlZ25vIDw9IEFyY2hSZXBvcnQtPnNlZ25vOyBzZWdubysrKQorCQl7CisJCQlj aGFyCQl3YWxmaWxlW01BWEZOQU1FTEVOXTsKKworCQkJLyogR2VuZXJhdGUgV0FMIGZpbGVu YW1lIGFuZCBtYXJrIGFzIGFyY2hpdmVkICovCisJCQlYTG9nRmlsZU5hbWUod2FsZmlsZSwg QXJjaFJlcG9ydC0+dGxpLCBzZWdubywgd2FsX3NlZ21lbnRfc2l6ZSk7CisJCQlYTG9nQXJj aGl2ZUZvcmNlRG9uZSh3YWxmaWxlKTsKKwkJCWVyZXBvcnQoREVCVUczLAorCQkJCQkoZXJy bXNnKCJtYXJrZWQgV0FMIHNlZ21lbnQgJXMgYXMgYXJjaGl2ZWQgKHByaW1hcnkgYXJjaGl2 ZWQgdXAgdG8gJXMpIiwKKwkJCQkJCQl3YWxmaWxlLCBwcmltYXJ5X2xhc3RfYXJjaGl2ZWRf Zm5hbWUpKSk7CisKKwkJfQorCQkvKiBUcmFjayB0aGUgbGFzdCBzZWdtZW50IHdlIHByb2Nl c3NlZCAqLworCQlsYXN0X3Byb2Nlc3NlZF90bGkgPSBBcmNoUmVwb3J0LT50bGk7CisJCWxh c3RfcHJvY2Vzc2VkX3NlZ25vID0gc2Vnbm87CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAq IERpcmVjdG9yeSBzY2FuOiBuZWVkZWQgd2hlbiB0aW1lbGluZSBjaGFuZ2VkIG9yIGZpcnN0 IHJlcG9ydC4KKwkgKiBUaGlzIGhhbmRsZXMgYm90aCBzYW1lLXRpbWVsaW5lIGFuZCBhbmNl c3Rvci10aW1lbGluZSBjYXNlcy4KKwkgKi8KKwl3aGlsZSAocGdhcmNoX3JlYWR5WGxvZyh3 YWxmaWxlKSkKKwl7CisJCVRpbWVMaW5lSUQJZmlsZV90bGk7CisJCVhMb2dTZWdObwlmaWxl X3NlZ25vOworCisJCS8qIFBhcnNlIHRoZSBXQUwgZmlsZW5hbWUgKi8KKwkJLy8gVE9ETzog d2UgbXVzdCBoYW5kbGUgc29tZWhvdyBwYXJ0aWFsLCAuaGlzdG9yeSBhbmQgLmJhY2t1cCBm aWxlcworCQlpZiAoIUlzWExvZ0ZpbGVOYW1lKHdhbGZpbGUpKQorCQkJY29udGludWU7CisK KwkJZWxvZyhXQVJOSU5HLCAiZm91bmQgcmVhZHkgZmlsZSBmb3IgJXMiLCB3YWxmaWxlKTsK KworCQlYTG9nRnJvbUZpbGVOYW1lKHdhbGZpbGUsICZmaWxlX3RsaSwgJmZpbGVfc2Vnbm8s IHdhbF9zZWdtZW50X3NpemUpOworCisJCS8qCisJCSAqIE1hcmsgYXMgLmRvbmUgaWY6CisJ CSAqIDEuIFNhbWUgdGltZWxpbmUgYW5kIHNlZ21lbnQgPD0gcmVwb3J0ZWQgc2VnbWVudCwg T1IKKwkJICogMi4gQW5jZXN0b3IgdGltZWxpbmUgYW5kIHNlZ21lbnQgaXMgYmVmb3JlIHRo ZSB0aW1lbGluZSBzd2l0Y2ggcG9pbnQKKwkJICoKKwkJICogRm9yIGFuY2VzdG9yIHRpbWVs aW5lczogaWYgcHJpbWFyeSBhcmNoaXZlZCBzZWdtZW50IFggb24gdGltZWxpbmUgVCwKKwkJ ICogdGhlbiBhbGwgc2VnbWVudHMgb24gYW5jZXN0b3IgdGltZWxpbmVzIGJlZm9yZSB0aGUg c3dpdGNoIHRvIFQgbXVzdAorCQkgKiBoYXZlIGJlZW4gYXJjaGl2ZWQgKHRoZXkncmUgcmVx dWlyZWQgdG8gcmVhY2ggdGltZWxpbmUgVCkuCisJCSAqLworCQlpZiAoZmlsZV90bGkgPT0g QXJjaFJlcG9ydC0+dGxpKQorCQl7CisJCQkvLyBmb3VuZCB3YWxmaWxlIG5vdCB5ZXQgYXJj aGl2ZWQgYnkgdXBzdHJlYW0sIHdlIHNob3VsZCBxdWl0IGhlcmUKKwkJCWlmIChmaWxlX3Nl Z25vID4gQXJjaFJlcG9ydC0+c2Vnbm8pCisJCQl7CisJCQkJZWxvZyhXQVJOSU5HLCAic2Vn bWVudCAlcyBpcyBub3QgeWV0IGFyY2hpdmVkIGJ5IHVwc3RyZWFtIiwgd2FsZmlsZSk7CisJ CQkJcmV0dXJuOworCQkJfQorCisJCQkvKiBTYW1lIHRpbWVsaW5lLCBzZWdtZW50IGFscmVh ZHkgYXJjaGl2ZWQgKi8KKwkJCVhMb2dBcmNoaXZlRm9yY2VEb25lKHdhbGZpbGUpOworCQkJ ZXJlcG9ydChERUJVRzMsCisJCQkJCShlcnJtc2coIm1hcmtlZCBXQUwgc2VnbWVudCAlcyBh cyBhcmNoaXZlZCAocHJpbWFyeSBhcmNoaXZlZCB1cCB0byAlcykiLAorCQkJCQkJCXdhbGZp bGUsIHByaW1hcnlfbGFzdF9hcmNoaXZlZF9mbmFtZSkpKTsKKwkJfQorCQllbHNlCisJCXsK KwkJCVhMb2dSZWNQdHIJc3dpdGNocG9pbnQ7CisJCQlYTG9nU2VnTm8Jc3dpdGNocG9pbnRf c2Vnbm87CisJCQkvKgorCQkJICogRGlmZmVyZW50IHRpbWVsaW5lIC0gY2hlY2sgaWYgaXQn cyBhbiBhbmNlc3RvciBhbmQgaWYgdGhpcworCQkJICogc2VnbWVudCBpcyBiZWZvcmUgdGhl IHRpbWVsaW5lIHN3aXRjaCBwb2ludC4gT25seSByZWFkIHRpbWVsaW5lCisJCQkgKiBoaXN0 b3J5IGlmIHdlIGhhdmVuJ3QgYWxyZWFkeSAobGF6eSBsb2FkaW5nKS4KKwkJCSAqCisJCQkg KiBOb3RlOiBUaW1lbGluZXMgZm9ybSBhIHRyZWUgc3RydWN0dXJlLCBub3QgYSBsaW5lYXIg c2VxdWVuY2UsCisJCQkgKiBzbyB3ZSBjYW4ndCB1c2UgPCBvciA+IHRvIGNvbXBhcmUgdGhl bS4KKwkJCSAqLworCisJCQlpZiAodGxpX2hpc3RvcnkgPT0gTklMKQorCQkJCXRsaV9oaXN0 b3J5ID0gcmVhZFRpbWVMaW5lSGlzdG9yeShBcmNoUmVwb3J0LT50bGkpOworCisJCQkvLyBz b21lIGdhcmJhZ2UgaW4gYXJjaGl2ZV9zdGF0dXMsIHNob3VsZCBlcnJvciBoZXJlCisJCQlp ZiAoIXRsaUluSGlzdG9yeShmaWxlX3RsaSwgdGxpX2hpc3RvcnkpKQorCQkJeworCQkJCWVy ZXBvcnQoRVJST1IsCisJCQkJCShlcnJtc2coIndhbGZpbGUgJXMgaXMgbm90IGluIHRoaXMg c2VydmVyJ3MgaGlzdG9yeSIsIHdhbGZpbGUpKSk7CisJCQkJY29udGludWU7CisJCQl9CisK KwkJCS8qIEdldCB0aGUgcG9pbnQgd2hlcmUgd2Ugc3dpdGNoZWQgYXdheSBmcm9tIHRoaXMg dGltZWxpbmUgKi8KKwkJCXN3aXRjaHBvaW50ID0gdGxpU3dpdGNoUG9pbnQoZmlsZV90bGks IHRsaV9oaXN0b3J5LCBOVUxMKTsKKworCQkJLyoKKwkJCSAqIElmIHRoZSBzZWdtZW50IGlz IGF0IG9yIGJlZm9yZSB0aGUgc3dpdGNoIHBvaW50LCBpdCBtdXN0IGhhdmUKKwkJCSAqIGJl ZW4gYXJjaGl2ZWQgKGl0J3MgcmVxdWlyZWQgdG8gcmVhY2ggdGhlIHJlcG9ydGVkIHRpbWVs aW5lKS4KKwkJCSAqIFRoZSBzZWdtZW50IGNvbnRhaW5pbmcgdGhlIHN3aXRjaCBwb2ludCBi ZWxvbmdzIHRvIHRoZSBvbGQKKwkJCSAqIHRpbWVsaW5lIHVwIHRvIHRoZSBzd2l0Y2ggcG9p bnQgYW5kIHNob3VsZCBiZSBhcmNoaXZlZC4KKwkJCSAqLworCQkJWExCeXRlVG9TZWcoc3dp dGNocG9pbnQsIHN3aXRjaHBvaW50X3NlZ25vLCB3YWxfc2VnbWVudF9zaXplKTsKKwkJCWlm IChmaWxlX3NlZ25vID4gc3dpdGNocG9pbnRfc2Vnbm8pCisJCQl7CisJCQkJZXJlcG9ydChF UlJPUiwKKwkJCQkJKGVycm1zZygid2FsZmlsZSAlcyBpcyBub3QgaW4gdGhpcyBzZXJ2ZXIn cyBoaXN0b3J5Iiwgd2FsZmlsZSkpKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJWExv Z0FyY2hpdmVGb3JjZURvbmUod2FsZmlsZSk7CisJCQllcmVwb3J0KERFQlVHMywKKwkJCQkJ KGVycm1zZygibWFya2VkIGFuY2VzdG9yIHRpbWVsaW5lIHNlZ21lbnQgJXMgYXMgYXJjaGl2 ZWQgKGJlZm9yZSBzd2l0Y2ggdG8gdGltZWxpbmUgJXUpIiwKKwkJCQkJCQl3YWxmaWxlLCBB cmNoUmVwb3J0LT50bGkpKSk7CisJCX0KKwkJLyoKKwkJICogVXBkYXRlIG91ciB0cmFja2lu ZyB0byB0aGUgbmV3bHkgcmVwb3J0ZWQgcG9zaXRpb24gZm9yIGZ1dHVyZSBvcHRpbWl6YXRp b25zLgorCQkgKi8KKwkJbGFzdF9wcm9jZXNzZWRfdGxpID0gZmlsZV90bGk7CisJCWxhc3Rf cHJvY2Vzc2VkX3NlZ25vID0gZmlsZV9zZWdubzsKKwkJLy8gVE9PRDogd2hhdCBpZiBkdXJh YmxlX3JlbmFtZSBmYWlsZWQgaW4gWExvZ0FyY2hpdmVGb3JjZURvbmUgPworCQkvLyB3ZSB3 aWxsIGVycm9uZXVzbHkgbW92ZSBsYXN0X3Byb2Nlc3NlZF9zZWdubyBmb3J3YXJkCisJfQor CisJLy9GcmVlRGlyKHN0YXR1c19kaXIpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv cG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bvc3Rt YXN0ZXIuYwppbmRleCBiNmZkMzMyZjE5Ni4uYjU3NDM2MDA1NmMgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5jCisrKyBiL3NyYy9iYWNrZW5kL3Bv c3RtYXN0ZXIvcG9zdG1hc3Rlci5jCkBAIC0zNDAxLDcgKzM0MDEsOSBAQCBMYXVuY2hNaXNz aW5nQmFja2dyb3VuZFByb2Nlc3Nlcyh2b2lkKQogCSAqLwogCWlmIChQZ0FyY2hQTUNoaWxk ID09IE5VTEwgJiYKIAkJKChYTG9nQXJjaGl2aW5nQWN0aXZlKCkgJiYgcG1TdGF0ZSA9PSBQ TV9SVU4pIHx8Ci0JCSAoWExvZ0FyY2hpdmluZ0Fsd2F5cygpICYmIChwbVN0YXRlID09IFBN X1JFQ09WRVJZIHx8IHBtU3RhdGUgPT0gUE1fSE9UX1NUQU5EQlkpKSkgJiYKKwkJIChYTG9n QXJjaGl2aW5nQWx3YXlzKCkgJiYgKHBtU3RhdGUgPT0gUE1fUkVDT1ZFUlkgfHwgcG1TdGF0 ZSA9PSBQTV9IT1RfU1RBTkRCWSkpIHx8CisJCSAoWExvZ0FyY2hpdmluZ1NoYXJlZCgpKQor CQkpICYmCiAJCVBnQXJjaENhblJlc3RhcnQoKSkKIAkJUGdBcmNoUE1DaGlsZCA9IFN0YXJ0 Q2hpbGRQcm9jZXNzKEJfQVJDSElWRVIpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi93YWxyZWNlaXZlci5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vd2Fs cmVjZWl2ZXIuYwppbmRleCA4MTg1NDEyYTgxMC4uOThmZjNlNGYwM2MgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3dhbHJlY2VpdmVyLmMKKysrIGIvc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vd2FscmVjZWl2ZXIuYwpAQCAtNjM2LDcgKzYzNiw3IEBAIFdhbFJl Y2VpdmVyTWFpbihjb25zdCB2b2lkICpzdGFydHVwX2RhdGEsIHNpemVfdCBzdGFydHVwX2Rh dGFfbGVuKQogCQkJICogQ3JlYXRlIC5kb25lIGZpbGUgZm9yY2libHkgdG8gcHJldmVudCB0 aGUgc3RyZWFtZWQgc2VnbWVudCBmcm9tCiAJCQkgKiBiZWluZyBhcmNoaXZlZCBsYXRlci4K IAkJCSAqLwotCQkJaWYgKFhMb2dBcmNoaXZlTW9kZSAhPSBBUkNISVZFX01PREVfQUxXQVlT KQorCQkJaWYgKFhMb2dBcmNoaXZlTW9kZSA8IEFSQ0hJVkVfTU9ERV9BTFdBWVMpCiAJCQkJ WExvZ0FyY2hpdmVGb3JjZURvbmUoeGxvZ2ZuYW1lKTsKIAkJCWVsc2UKIAkJCQlYTG9nQXJj aGl2ZU5vdGlmeSh4bG9nZm5hbWUpOwpAQCAtODg3LDYgKzg4NywxOSBAQCBYTG9nV2FsUmN2 UHJvY2Vzc01zZyh1bnNpZ25lZCBjaGFyIHR5cGUsIGNoYXIgKmJ1ZiwgU2l6ZSBsZW4sIFRp bWVMaW5lSUQgdGxpKQogCQkJCQlYTG9nV2FsUmN2U2VuZFJlcGx5KHRydWUsIGZhbHNlLCBm YWxzZSk7CiAJCQkJYnJlYWs7CiAJCQl9CisJCWNhc2UgUHFSZXBsTXNnX0FyY2hpdmVTdGF0 dXNSZXBvcnQ6CisJCQl7CisJCQkJVGltZUxpbmVJRAkJcmVjZWl2ZWRfdGxpOworCQkJCVhM b2dTZWdObwkJcmVjZWl2ZWRfc2Vnbm87CisJCQkJU3RyaW5nSW5mb0RhdGEJaW5jb21pbmdf bWVzc2FnZTsKKworCQkJCS8qIGluaXRpYWxpemUgYSBTdHJpbmdJbmZvIHdpdGggdGhlIGdp dmVuIGJ1ZmZlciAqLworCQkJCWluaXRSZWFkT25seVN0cmluZ0luZm8oJmluY29taW5nX21l c3NhZ2UsIGJ1Ziwgc2l6ZW9mKGludDY0KSArIHNpemVvZihpbnQ2NCkpOworCQkJCXJlY2Vp dmVkX3RsaSA9IChUaW1lTGluZUlEKSBwcV9nZXRtc2dpbnQ2NCgmaW5jb21pbmdfbWVzc2Fn ZSk7CisJCQkJcmVjZWl2ZWRfc2Vnbm8gPSAoWExvZ1NlZ05vKSBwcV9nZXRtc2dpbnQ2NCgm aW5jb21pbmdfbWVzc2FnZSk7CisJCQkJU3RvcmVBcmNoaXZhbFJlcG9ydChyZWNlaXZlZF90 bGksIHJlY2VpdmVkX3NlZ25vKTsKKwkJCQlicmVhazsKKwkJCX0KIAkJZGVmYXVsdDoKIAkJ CWVyZXBvcnQoRVJST1IsCiAJCQkJCShlcnJjb2RlKEVSUkNPREVfUFJPVE9DT0xfVklPTEFU SU9OKSwKQEAgLTEwOTQsMTIgKzExMDcsMzkgQEAgWExvZ1dhbFJjdkNsb3NlKFhMb2dSZWNQ dHIgcmVjcHRyLCBUaW1lTGluZUlEIHRsaSkKIAogCS8qCiAJICogQ3JlYXRlIC5kb25lIGZp bGUgZm9yY2libHkgdG8gcHJldmVudCB0aGUgc3RyZWFtZWQgc2VnbWVudCBmcm9tIGJlaW5n Ci0JICogYXJjaGl2ZWQgbGF0ZXIuCisJICogYXJjaGl2ZWQgbGF0ZXIsIHVubGVzcyBhcmNo aXZlX21vZGUgaXMgJ2Fsd2F5cycgb3IgJ3NoYXJlZCcuCisJICoKKwkgKiBJbiAnYWx3YXlz JyBtb2RlLCB0aGUgc3RhbmRieSBhcmNoaXZlcyBpbmRlcGVuZGVudGx5LgorCSAqCisJICog SW4gJ3NoYXJlZCcgbW9kZSwgd2Ugb3B0aW1pemUgYnkgY2hlY2tpbmcgaWYgdGhpcyBzZWdt ZW50IGlzIGFscmVhZHkKKwkgKiBjb3ZlcmVkIGJ5IHRoZSBsYXN0IGFyY2hpdmFsIHJlcG9y dCBmcm9tIHRoZSBwcmltYXJ5LiBJZiBzbywgY3JlYXRlCisJICogLmRvbmUgZGlyZWN0bHku IE90aGVyd2lzZSwgY3JlYXRlIC5yZWFkeSBhbmQgd2FpdCBmb3IgdGhlIG5leHQgcmVwb3J0 LgogCSAqLwotCWlmIChYTG9nQXJjaGl2ZU1vZGUgIT0gQVJDSElWRV9NT0RFX0FMV0FZUykK LQkJWExvZ0FyY2hpdmVGb3JjZURvbmUoeGxvZ2ZuYW1lKTsKLQllbHNlCisJaWYgKFhMb2dB cmNoaXZlTW9kZSA9PSBBUkNISVZFX01PREVfQUxXQVlTKQorCXsKIAkJWExvZ0FyY2hpdmVO b3RpZnkoeGxvZ2ZuYW1lKTsKKwl9CisJZWxzZSBpZiAoWExvZ0FyY2hpdmVNb2RlID09IEFS Q0hJVkVfTU9ERV9TSEFSRUQpCisJeworCQkvKgorCQkgKiBJbiBzaGFyZWQgbW9kZSwgY2hl Y2sgaWYgdGhpcyBzZWdtZW50IGlzIGFscmVhZHkgYXJjaGl2ZWQgb24gcHJpbWFyeS4KKwkJ ICogSWYgd2UncmUgb24gdGhlIHNhbWUgdGltZWxpbmUgYW5kIHRoaXMgc2VnbWVudCBpcyA8 PSBsYXN0IGFyY2hpdmVkLAorCQkgKiBtYXJrIGl0IC5kb25lIGltbWVkaWF0ZWx5LiBPdGhl cndpc2UgY3JlYXRlIC5yZWFkeS4KKwkJICoKKwkJICogV2UgZG9uJ3QgY2hlY2sgYW5jZXN0 b3IgdGltZWxpbmUgY2FzZXMgaGVyZSB0byBhdm9pZCByZWFkaW5nIHRpbWVsaW5lCisJCSAq IGhpc3RvcnkgZmlsZXMgb24gZXZlcnkgc2VnbWVudCBjbG9zZS4gUHJvY2Vzc0FyY2hpdmFs UmVwb3J0KCkgd2lsbAorCQkgKiBoYW5kbGUgbWFya2luZyBhbmNlc3RvciB0aW1lbGluZSBz ZWdtZW50cyBhcyAuZG9uZSB3aGVuIGl0IHNjYW5zCisJCSAqIHRoZSBhcmNoaXZlX3N0YXR1 cyBkaXJlY3RvcnkuCisJCSAqLworCQlpZiAoSXNTZWdub0FyY2hpdmVkQnlVcHN0cmVhbShy ZWN2RmlsZVRMSSwgcmVjdlNlZ05vKSkKKwkJCVhMb2dBcmNoaXZlRm9yY2VEb25lKHhsb2dm bmFtZSk7CisJCWVsc2UKKwkJCVhMb2dBcmNoaXZlTm90aWZ5KHhsb2dmbmFtZSk7CisJfQor CWVsc2UKKwl7CisJCVhMb2dBcmNoaXZlRm9yY2VEb25lKHhsb2dmbmFtZSk7CisJfQogCiAJ cmVjdkZpbGUgPSAtMTsKIH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L3dhbHJlY2VpdmVyZnVuY3MuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3dhbHJlY2Vp dmVyZnVuY3MuYwppbmRleCBiZDVkNDdiZTk2NC4uYzhjNmRlNTE2MTkgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3dhbHJlY2VpdmVyZnVuY3MuYworKysgYi9zcmMv YmFja2VuZC9yZXBsaWNhdGlvbi93YWxyZWNlaXZlcmZ1bmNzLmMKQEAgLTM0LDYgKzM0LDcg QEAKICNpbmNsdWRlICJ1dGlscy93YWl0X2V2ZW50LmgiCiAKIFdhbFJjdkRhdGEgKldhbFJj diA9IE5VTEw7CisvL0FyY2hpdmFsUmVwb3J0RGF0YSAqQXJjaFJlcG9ydDsKIAogc3RhdGlj IHZvaWQgV2FsUmN2U2htZW1SZXF1ZXN0KHZvaWQgKmFyZyk7CiBzdGF0aWMgdm9pZCBXYWxS Y3ZTaG1lbUluaXQodm9pZCAqYXJnKTsKQEAgLTU3LDYgKzU4LDExIEBAIFdhbFJjdlNobWVt UmVxdWVzdCh2b2lkICphcmcpCiAJCQkJCSAgIC5zaXplID0gc2l6ZW9mKFdhbFJjdkRhdGEp LAogCQkJCQkgICAucHRyID0gKHZvaWQgKiopICZXYWxSY3YsCiAJCSk7CisKKwlTaG1lbVJl cXVlc3RTdHJ1Y3QoLm5hbWUgPSAiQXJjaGl2YWwgUmVwb3J0IERhdGEiLAorCQkJCSAgIC5z aXplID0gc2l6ZW9mKEFyY2hpdmFsUmVwb3J0RGF0YSksCisJCQkJICAgLnB0ciA9ICh2b2lk ICoqKSAmQXJjaFJlcG9ydCwKKwkpOwogfQogCiAvKiBJbml0aWFsaXplIHdhbHJlY2VpdmVy LXJlbGF0ZWQgc2hhcmVkIG1lbW9yeSAqLwpAQCAtNjksNiArNzUsOCBAQCBXYWxSY3ZTaG1l bUluaXQodm9pZCAqYXJnKQogCVNwaW5Mb2NrSW5pdCgmV2FsUmN2LT5tdXRleCk7CiAJcGdf YXRvbWljX2luaXRfdTY0KCZXYWxSY3YtPndyaXR0ZW5VcHRvLCAwKTsKIAlXYWxSY3YtPnBy b2NubyA9IElOVkFMSURfUFJPQ19OVU1CRVI7CisKKwlNZW1TZXQoQXJjaFJlcG9ydCwgMCwg c2l6ZW9mKEFyY2hpdmFsUmVwb3J0RGF0YSkpOwogfQogCiAvKiBJcyB3YWxyZWNlaXZlciBy dW5uaW5nIChvciBzdGFydGluZyB1cCk/ICovCkBAIC00MjIsMyArNDMwLDQ3IEBAIEdldFJl cGxpY2F0aW9uVHJhbnNmZXJMYXRlbmN5KHZvaWQpCiAJcmV0dXJuIFRpbWVzdGFtcERpZmZl cmVuY2VNaWxsaXNlY29uZHMobGFzdE1zZ1NlbmRUaW1lLAogCQkJCQkJCQkJCSAgIGxhc3RN c2dSZWNlaXB0VGltZSk7CiB9CisKKy8qCisgKiBJcyBzZWdtZW50IHdhcyBhbHJlYWR5IGFy Y2hpdmVkIGJ5IG1hc3Rlcj8KKyAqIENhbiBiZSB1c2VkIG9ubHkgaWYgYXJjaGl2ZV9tb2Rl PXNoYXJlZC4KKyAqLworYm9vbAorSXNTZWdub0FyY2hpdmVkQnlVcHN0cmVhbShUaW1lTGlu ZUlEIHRsaSwgWExvZ1NlZ05vIHNlZ25vKQoreworCWVsb2coV0FSTklORywgInJlY2VpdmVk IHRsaTogJWQsIHNlZ25vOiAlbGQiLCB0bGksIHNlZ25vKTsKKwllbG9nKFdBUk5JTkcsICJB cmNoUmVwb3J0LT50bGk6ICVkLCBBcmNoUmVwb3J0LT5zZWdubzogJWxkIiwgQXJjaFJlcG9y dC0+dGxpLCBBcmNoUmVwb3J0LT5zZWdubyk7CisJcmV0dXJuIHRsaSA9PSBBcmNoUmVwb3J0 LT50bGkgJiYgc2Vnbm8gPD0gQXJjaFJlcG9ydC0+c2Vnbm87Cit9CisKKy8qCisgKiBTdG9y ZSBhcmNoaXZhbCByZXBvcnQgZGF0YSBpbiBzaGFyZWQgbWVtb3J5IGZvciBsYXRlciB1c2Ug YnkKKyAqIHdhbHJlY2VpdmVyIGFuZCBhcmNoaXZlci4KKyAqLwordm9pZAorU3RvcmVBcmNo aXZhbFJlcG9ydChUaW1lTGluZUlEIHRsaSwgWExvZ1NlZ05vIHNlZ25vKQoreworCWVyZXBv cnQoV0FSTklORywKKwkJKGVycm1zZygicmVjZWl2ZWQgYXJjaGl2YWwgcmVwb3J0IGZyb20g cHJpbWFyeTogdGxpICV1LCBzZWdubyAlbGQiLAorCQkJdGxpLCBzZWdubykpKTsKKworCWlm ICh0bGkgPT0gMCB8fCBzZWdubyA9PSAwKQorCXsKKwkJZXJlcG9ydChXQVJOSU5HLAorCQkJ CShlcnJtc2coImludmFsaWQgdmFsdWVzIGluIGFyY2hpdmFsIHJlcG9ydDogdGxpICVkLCBz ZWdubyAlbGQiLAorCQkJCQkJdGxpLCBzZWdubykpKTsKKwkJcmV0dXJuOworCX0KKworCS8q IG5vdGhpbmcgaXMgY2hhbmdlZCAqLworCWlmICh0bGkgPT0gQXJjaFJlcG9ydC0+dGxpICYm IHNlZ25vIDw9IEFyY2hSZXBvcnQtPnNlZ25vKQorCQlyZXR1cm47CisKKwkvKiBSZW1lbWJl ciB0aGUgbGFzdCBhcmNoaXZlZCBzZWdtZW50IGZvciBYTG9nV2FsUmN2Q2xvc2UoKSAqLwor CUFyY2hSZXBvcnQtPnRsaSA9IHRsaTsKKwlBcmNoUmVwb3J0LT5zZWdubyA9IHNlZ25vOwor CisJLyogTm90aWZ5IGFyY2hpdmVyIHRoYXQgaXQncyBnb3Qgc29tZXRoaW5nIHRvIGRvICov CisJaWYgKElzVW5kZXJQb3N0bWFzdGVyKQorCQlQZ0FyY2hXYWtldXAoKTsKK30KXCBObyBu ZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNh dGlvbi93YWxzZW5kZXIuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3dhbHNlbmRlci5j CmluZGV4IDNkNGFiOTI5ZjkxLi4wOWE4YWViMzNhNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vd2Fsc2VuZGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vd2Fsc2VuZGVyLmMKQEAgLTE4Myw2ICsxODMsMTggQEAgc3RhdGljIFRpbWVMaW5lSUQg c2VuZFRpbWVMaW5lTmV4dFRMSSA9IDA7CiBzdGF0aWMgYm9vbCBzZW5kVGltZUxpbmVJc0hp c3RvcmljID0gZmFsc2U7CiBzdGF0aWMgWExvZ1JlY1B0ciBzZW5kVGltZUxpbmVWYWxpZFVw dG8gPSBJbnZhbGlkWExvZ1JlY1B0cjsKIAorLyoKKyAqIExhc3QgYXJjaGl2ZWQgV0FMIGZp bGUuIFRoaXMgaXMgZmV0Y2hlZCBmcm9tIHBnc3RhdCBwZXJpb2RpY2FsbHkgYW5kIHNlbnQK KyAqIHRvIHRoZSBzdGFuZGJ5LiBsYXN0X2FyY2hpdmFsX3JlcG9ydF90aW1lc3RhbXAgdHJh Y2tzIHdoZW4gd2UgbGFzdCBzZW50CisgKiB0aGUgcmVwb3J0IHRvIGF2b2lkIGV4Y2Vzc2l2 ZSBwZ3N0YXQgYWNjZXNzLgorICovCitzdGF0aWMgVGltZUxpbmVJRCBsYXN0X2FyY2hpdmVk X3RsaSA9IDA7CitzdGF0aWMgWExvZ1NlZ05vIGxhc3RfYXJjaGl2ZWRfc2Vnbm8gPSAwOwor c3RhdGljIFRpbWVzdGFtcFR6IGxhc3RfYXJjaGl2YWxfcmVwb3J0X3RpbWVzdGFtcCA9IDA7 CisKKy8qIEludGVydmFsIGZvciBzZW5kaW5nIGFyY2hpdmFsIHJlcG9ydHMgKDEwIHNlY29u ZHMpICovCisjZGVmaW5lIEFSQ0hJVkFMX1JFUE9SVF9JTlRFUlZBTCAxMDAwMAorCiAvKgog ICogSG93IGZhciBoYXZlIHdlIHNlbnQgV0FMIGFscmVhZHk/IFRoaXMgaXMgYWxzbyBhZHZl cnRpc2VkIGluCiAgKiBNeVdhbFNuZC0+c2VudFB0ci4gIChBY3R1YWxseSwgdGhpcyBpcyB0 aGUgbmV4dCBXQUwgbG9jYXRpb24gdG8gc2VuZC4pCkBAIC0yOTcsNiArMzA5LDcgQEAgc3Rh dGljIHZvaWQgUHJvY2Vzc1N0YW5kYnlNZXNzYWdlKHZvaWQpOwogc3RhdGljIHZvaWQgUHJv Y2Vzc1N0YW5kYnlSZXBseU1lc3NhZ2Uodm9pZCk7CiBzdGF0aWMgdm9pZCBQcm9jZXNzU3Rh bmRieUhTRmVlZGJhY2tNZXNzYWdlKHZvaWQpOwogc3RhdGljIHZvaWQgUHJvY2Vzc1N0YW5k YnlQU1JlcXVlc3RNZXNzYWdlKHZvaWQpOworc3RhdGljIHZvaWQgV2FsU25kQXJjaGl2YWxS ZXBvcnQodm9pZCk7CiBzdGF0aWMgdm9pZCBQcm9jZXNzUmVwbGllc0lmQW55KHZvaWQpOwog c3RhdGljIHZvaWQgUHJvY2Vzc1BlbmRpbmdXcml0ZXModm9pZCk7CiBzdGF0aWMgdm9pZCBX YWxTbmRLZWVwYWxpdmUoYm9vbCByZXF1ZXN0UmVwbHksIFhMb2dSZWNQdHIgd3JpdGVQdHIp OwpAQCAtMjc5OSw2ICsyODEyLDkxIEBAIFByb2Nlc3NTdGFuZGJ5SFNGZWVkYmFja01lc3Nh Z2Uodm9pZCkKIAl9CiB9CiAKKy8qCisgKiBTZW5kIGFyY2hpdmFsIHN0YXR1cyByZXBvcnQg dG8gc3RhbmRieS4KKyAqCisgKiBUaGlzIGlzIGNhbGxlZCBwZXJpb2RpY2FsbHkgZHVyaW5n IHBoeXNpY2FsIHJlcGxpY2F0aW9uIHRvIGluZm9ybSB0aGUKKyAqIHN0YW5kYnkgYWJvdXQg dGhlIGxhc3QgV0FMIHNlZ21lbnQgYXJjaGl2ZWQgYnkgdGhlIHByaW1hcnkuIFRoZSBzdGFu ZGJ5CisgKiBjYW4gdGhlbiBtYXJrIHNlZ21lbnRzIHVwIHRvIHRoYXQgcG9pbnQgYXMgLmRv bmUsIGFsbG93aW5nIHRoZW0gdG8gYmUKKyAqIHJlY3ljbGVkLiBUaGlzIHByZXZlbnRzIFdB TCBsb3NzIGR1cmluZyBzdGFuZGJ5IHByb21vdGlvbi4KKyAqLworc3RhdGljIHZvaWQKK1dh bFNuZEFyY2hpdmFsUmVwb3J0KHZvaWQpCit7CisJUGdTdGF0X0FyY2hpdmVyU3RhdHMgKmFy Y2hpdmVyX3N0YXRzOworCVRpbWVzdGFtcFR6IG5vdzsKKworCS8qIE9ubHkgc2VuZCByZXBv cnRzIHdoZW4gYXJjaGl2ZV9tb2RlPXNoYXJlZCAqLworCWlmIChYTG9nQXJjaGl2ZU1vZGUg IT0gQVJDSElWRV9NT0RFX1NIQVJFRCkKKwkJcmV0dXJuOworCisJLyogT25seSBzZW5kIHJl cG9ydHMgZHVyaW5nIHBoeXNpY2FsIHN0cmVhbWluZyByZXBsaWNhdGlvbiwgbm90IGR1cmlu ZyBiYWNrdXAgKi8KKwlpZiAoTXlXYWxTbmQtPmtpbmQgIT0gUkVQTElDQVRJT05fS0lORF9Q SFlTSUNBTCkKKwkJcmV0dXJuOworCWlmIChNeVdhbFNuZC0+c3RhdGUgIT0gV0FMU05EU1RB VEVfQ0FUQ0hVUCAmJgorCQlNeVdhbFNuZC0+c3RhdGUgIT0gV0FMU05EU1RBVEVfU1RSRUFN SU5HKQorCQlyZXR1cm47CisKKwkvKgorCSAqIERvbid0IHNlbmQgdG8gdGVtcG9yYXJ5IHJl cGxpY2F0aW9uIHNsb3RzICh1c2VkIGJ5IHBnX2Jhc2ViYWNrdXApLgorCSAqIENvbm5lY3Rp b25zIHdpdGhvdXQgc2xvdHMgKHJlZ3VsYXIgc3RhbmRieXMpIGFyZSBPSy4KKwkgKi8KKwlp ZiAoTXlSZXBsaWNhdGlvblNsb3QgIT0gTlVMTCAmJgorCQlNeVJlcGxpY2F0aW9uU2xvdC0+ ZGF0YS5wZXJzaXN0ZW5jeSA9PSBSU19URU1QT1JBUlkpCisJCXJldHVybjsKKworCW5vdyA9 IEdldEN1cnJlbnRUaW1lc3RhbXAoKTsKKworCS8qCisJICogU2VuZCByZXBvcnQgYXQgbW9z dCBvbmNlIHBlciBBUkNISVZBTF9SRVBPUlRfSU5URVJWQUwgKDEwIHNlY29uZHMpLgorCSAq IFRoaXMgYXZvaWRzIGV4Y2Vzc2l2ZSBwZ3N0YXQgYWNjZXNzLgorCSAqLworCWlmIChub3cg PCBUaW1lc3RhbXBUelBsdXNNaWxsaXNlY29uZHMobGFzdF9hcmNoaXZhbF9yZXBvcnRfdGlt ZXN0YW1wLAorCQkJCQkJCQkJCSAgQVJDSElWQUxfUkVQT1JUX0lOVEVSVkFMKSkKKwkJcmV0 dXJuOworCWxhc3RfYXJjaGl2YWxfcmVwb3J0X3RpbWVzdGFtcCA9IG5vdzsKKwkvKgorCSAq IEdldCBhcmNoaXZlciBzdGF0aXN0aWNzLiBXZSB1c2Ugbm9uLWJsb2NraW5nIGFjY2VzcyB0 byBhdm9pZCBkZWxheWluZworCSAqIHJlcGxpY2F0aW9uIGlmIHN0YXRzIGNvbGxlY3RvciBp cyBzbG93LiBJZiBzdGF0cyBhcmUgdW5hdmFpbGFibGUgb3IKKwkgKiBzdGFsZSwgd2UnbGwg anVzdCB0cnkgYWdhaW4gYXQgdGhlIG5leHQgaW50ZXJ2YWwuCisJICovCisJcGdzdGF0X2Ns ZWFyX3NuYXBzaG90KCk7CisJYXJjaGl2ZXJfc3RhdHMgPSBwZ3N0YXRfZmV0Y2hfc3RhdF9h cmNoaXZlcigpOworCWlmIChhcmNoaXZlcl9zdGF0cyA9PSBOVUxMKQorCQlyZXR1cm47CisK KwkvKiBPbmx5IHNlbmQgcmVwb3J0cyBmb3IgV0FMIHNlZ21lbnRzLCBub3QgYmFja3VwIGhp c3RvcnkgZmlsZXMgb3Igb3RoZXIgYXJjaGl2ZWQgZmlsZXMgKi8KKwlpZiAoIUlzWExvZ0Zp bGVOYW1lKGFyY2hpdmVyX3N0YXRzLT5sYXN0X2FyY2hpdmVkX3dhbCkpCisJCXJldHVybjsK KworCS8qCisJICogT25seSBzZW5kIGEgcmVwb3J0IGlmIHRoZSBsYXN0IGFyY2hpdmVkIFdB TCBoYXMgY2hhbmdlZC4gVGhpcyBpcyBib3RoCisJICogYW4gb3B0aW1pemF0aW9uIGFuZCBl bnN1cmVzIHdlIGRvbid0IHNlbmQgZW1wdHkgcmVwb3J0cyBvbiBzdGFydHVwLgorCSAqLwor CXsKKwkJVGltZUxpbmVJRAl0bGk7CisJCVhMb2dTZWdObwlzZWdubzsKKwkJWExvZ0Zyb21G aWxlTmFtZShhcmNoaXZlcl9zdGF0cy0+bGFzdF9hcmNoaXZlZF93YWwsICZ0bGksICZzZWdu bywgd2FsX3NlZ21lbnRfc2l6ZSk7CisJCWlmIChsYXN0X2FyY2hpdmVkX3RsaSA9PSB0bGkg JiYgbGFzdF9hcmNoaXZlZF9zZWdubyA9PSBzZWdubykKKwkJCXJldHVybjsKKworCQkvKiBS ZW1lbWJlciB3aGF0IHdlIGFyZSBhYm91dCB0byBzZW50ICovCisJCWxhc3RfYXJjaGl2ZWRf dGxpID0gdGxpOworCQlsYXN0X2FyY2hpdmVkX3NlZ25vID0gc2Vnbm87CisJfQorCisJZXJl cG9ydChERUJVRzEsCisJCQkoZXJybXNnKCJzZW5kaW5nIGFyY2hpdmFsIHJlcG9ydDogdGxp ICVkLCBzZWdubyAlbGQiLCBsYXN0X2FyY2hpdmVkX3NlZ25vKSkpOworCisJLyogQ29uc3Ry dWN0IHRoZSBtZXNzYWdlLi4uICovCisJcmVzZXRTdHJpbmdJbmZvKCZvdXRwdXRfbWVzc2Fn ZSk7CisJcHFfc2VuZGJ5dGUoJm91dHB1dF9tZXNzYWdlLCBQcVJlcGxNc2dfQXJjaGl2ZVN0 YXR1c1JlcG9ydCk7CisJcHFfc2VuZGludDY0KCZvdXRwdXRfbWVzc2FnZSwgKGludDY0KSBs YXN0X2FyY2hpdmVkX3RsaSk7CisJcHFfc2VuZGludDY0KCZvdXRwdXRfbWVzc2FnZSwgKGlu dDY0KSBsYXN0X2FyY2hpdmVkX3NlZ25vKTsKKwkvKiAuLi4gYW5kIHNlbmQgaXQgd3JhcHBl ZCBpbiBDb3B5RGF0YSAqLworCXBxX3B1dG1lc3NhZ2Vfbm9ibG9jayhQcU1zZ19Db3B5RGF0 YSwgb3V0cHV0X21lc3NhZ2UuZGF0YSwgb3V0cHV0X21lc3NhZ2UubGVuKTsKK30KKwogLyoK ICAqIFByb2Nlc3MgdGhlIHJlcXVlc3QgZm9yIGEgcHJpbWFyeSBzdGF0dXMgdXBkYXRlIG1l c3NhZ2UuCiAgKi8KQEAgLTQzNTAsNiArNDQ0OCw5IEBAIFdhbFNuZEtlZXBhbGl2ZUlmTmVj ZXNzYXJ5KHZvaWQpCiB7CiAJVGltZXN0YW1wVHogcGluZ190aW1lOwogCisJLyogU2VuZCBh cmNoaXZhbCBzdGF0dXMgcmVwb3J0IGlmIG5lZWRlZCAqLworCVdhbFNuZEFyY2hpdmFsUmVw b3J0KCk7CisKIAkvKgogCSAqIERvbid0IHNlbmQga2VlcGFsaXZlIG1lc3NhZ2VzIGlmIHRp bWVvdXRzIGFyZSBnbG9iYWxseSBkaXNhYmxlZCBvcgogCSAqIHdlJ3JlIGRvaW5nIHNvbWV0 aGluZyBub3QgcGFydGFraW5nIGluIHRpbWVvdXRzLgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvYWNjZXNzL3hsb2cuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy94bG9nLmgKaW5kZXggNDM3 YjRmMzIzNDkuLjk4YTk0Nzg1ZWJmIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3Mv eGxvZy5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy94bG9nLmgKQEAgLTY3LDYgKzY3LDcg QEAgdHlwZWRlZiBlbnVtIEFyY2hpdmVNb2RlCiAJQVJDSElWRV9NT0RFX09GRiA9IDAsCQkv KiBkaXNhYmxlZCAqLwogCUFSQ0hJVkVfTU9ERV9PTiwJCQkvKiBlbmFibGVkIHdoaWxlIHNl cnZlciBpcyBydW5uaW5nIG5vcm1hbGx5ICovCiAJQVJDSElWRV9NT0RFX0FMV0FZUywJCS8q IGVuYWJsZWQgYWx3YXlzIChldmVuIGR1cmluZyByZWNvdmVyeSkgKi8KKwlBUkNISVZFX01P REVfU0hBUkVELAkJLyogc2hhcmVkIGFyY2hpdmUgYmV0d2VlbiBwcmltYXJ5IGFuZCBzdGFu ZGJ5ICovCiB9IEFyY2hpdmVNb2RlOwogZXh0ZXJuIFBHRExMSU1QT1JUIGludCBYTG9nQXJj aGl2ZU1vZGU7CiAKQEAgLTEwNCw2ICsxMDUsOSBAQCBleHRlcm4gUEdETExJTVBPUlQgYm9v bCBYTG9nTG9naWNhbEluZm87CiAvKiBJcyBXQUwgYXJjaGl2aW5nIGVuYWJsZWQgYWx3YXlz IChldmVuIGR1cmluZyByZWNvdmVyeSk/ICovCiAjZGVmaW5lIFhMb2dBcmNoaXZpbmdBbHdh eXMoKSBcCiAJKEFzc2VydE1hY3JvKFhMb2dBcmNoaXZlTW9kZSA9PSBBUkNISVZFX01PREVf T0ZGIHx8IHdhbF9sZXZlbCA+PSBXQUxfTEVWRUxfUkVQTElDQSksIFhMb2dBcmNoaXZlTW9k ZSA9PSBBUkNISVZFX01PREVfQUxXQVlTKQorI2RlZmluZSBYTG9nQXJjaGl2aW5nU2hhcmVk KCkgXAorCShBc3NlcnRNYWNybyhYTG9nQXJjaGl2ZU1vZGUgPT0gQVJDSElWRV9NT0RFX09G RiB8fCB3YWxfbGV2ZWwgPj0gV0FMX0xFVkVMX1JFUExJQ0EpLCBYTG9nQXJjaGl2ZU1vZGUg PT0gQVJDSElWRV9NT0RFX1NIQVJFRCkKKwogCiAvKgogICogSXMgV0FMLWxvZ2dpbmcgbmVj ZXNzYXJ5IGZvciBhcmNoaXZhbCBvciBsb2ctc2hpcHBpbmcsIG9yIGNhbiB3ZSBza2lwCmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9saWJwcS9wcm90b2NvbC5oIGIvc3JjL2luY2x1ZGUv bGlicHEvcHJvdG9jb2wuaAppbmRleCBlYWU4ZjBlNzIzOC4uZDIyYWFmOWUyMjUgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL2xpYnBxL3Byb3RvY29sLmgKKysrIGIvc3JjL2luY2x1ZGUv bGlicHEvcHJvdG9jb2wuaApAQCAtNzIsNiArNzIsNyBAQAogCiAvKiBSZXBsaWNhdGlvbiBj b2RlcyBzZW50IGJ5IHRoZSBwcmltYXJ5ICh3cmFwcGVkIGluIENvcHlEYXRhIG1lc3NhZ2Vz KS4gKi8KIAorI2RlZmluZSBQcVJlcGxNc2dfQXJjaGl2ZVN0YXR1c1JlcG9ydCAnYScKICNk ZWZpbmUgUHFSZXBsTXNnX0tlZXBhbGl2ZQkJCSdrJwogI2RlZmluZSBQcVJlcGxNc2dfUHJp bWFyeVN0YXR1c1VwZGF0ZSAncycKICNkZWZpbmUgUHFSZXBsTXNnX1dBTERhdGEJCQkndycK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dhbHJlY2VpdmVyLmggYi9z cmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93YWxyZWNlaXZlci5oCmluZGV4IDQ3YzA3NTc0ZDRk Li4yODg4ZGZiNTVhYyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd2Fs cmVjZWl2ZXIuaAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93YWxyZWNlaXZlci5o CkBAIC0xOTUsNiArMTk1LDE0IEBAIHR5cGVkZWYgc3RydWN0CiBzdHJ1Y3QgV2FsUmVjZWl2 ZXJDb25uOwogdHlwZWRlZiBzdHJ1Y3QgV2FsUmVjZWl2ZXJDb25uIFdhbFJlY2VpdmVyQ29u bjsKIAordHlwZWRlZiBzdHJ1Y3QgQXJjaGl2YWxSZXBvcnREYXRhCit7CisJVGltZUxpbmVJ RCB0bGk7CisJWExvZ1NlZ05vIHNlZ25vOworfSBBcmNoaXZhbFJlcG9ydERhdGE7CisvKiBM YXN0IGFyY2hpdmVkIFdBTCBzZWdtZW50IGZpbGUgcmVwb3J0ZWQgYnkgdGhlIHByaW1hcnkg Ki8KK2V4dGVybiBBcmNoaXZhbFJlcG9ydERhdGEgKkFyY2hSZXBvcnQ7CisKIC8qCiAgKiBT dGF0dXMgb2Ygd2FscmVjZWl2ZXIgcXVlcnkgZXhlY3V0aW9uLgogICoKQEAgLTUwMiw1ICs1 MTAsNyBAQCBleHRlcm4gWExvZ1JlY1B0ciBHZXRXYWxSY3ZGbHVzaFJlY1B0cihYTG9nUmVj UHRyICpsYXRlc3RDaHVua1N0YXJ0LCBUaW1lTGluZUlECiBleHRlcm4gWExvZ1JlY1B0ciBH ZXRXYWxSY3ZXcml0ZVJlY1B0cih2b2lkKTsKIGV4dGVybiBpbnQJR2V0UmVwbGljYXRpb25B cHBseURlbGF5KHZvaWQpOwogZXh0ZXJuIGludAlHZXRSZXBsaWNhdGlvblRyYW5zZmVyTGF0 ZW5jeSh2b2lkKTsKK2V4dGVybiBib29sIElzU2Vnbm9BcmNoaXZlZEJ5VXBzdHJlYW0oVGlt ZUxpbmVJRCB0bGksIFhMb2dTZWdObyBzZWdubyk7CitleHRlcm4gdm9pZCBTdG9yZUFyY2hp dmFsUmVwb3J0KFRpbWVMaW5lSUQgdGxpLCBYTG9nU2VnTm8gc2Vnbm8pOwogCiAjZW5kaWYJ CQkJCQkJLyogX1dBTFJFQ0VJVkVSX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlY292 ZXJ5L3QvMDUzX2FyY2hpdmVfc2hhcmVkLnBsIGIvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wNTNf YXJjaGl2ZV9zaGFyZWQucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAuLjM5N2I3MWFkNzlkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvcmVjb3Zlcnkv dC8wNTNfYXJjaGl2ZV9zaGFyZWQucGwKQEAgLTAsMCArMSwyNzAgQEAKKyMgQ29weXJpZ2h0 IChjKSAyMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCisjIFRl c3QgYXJjaGl2ZV9tb2RlPXNoYXJlZCBmb3IgY29vcmRpbmF0ZWQgV0FMIGFyY2hpdmluZyBi ZXR3ZWVuIHByaW1hcnkgYW5kIHN0YW5kYnkKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3Mg RkFUQUwgPT4gJ2FsbCc7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKK3VzZSBQ b3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKK3VzZSBUZXN0OjpNb3JlOwordXNlIEZpbGU6OlBh dGggcXcocm10cmVlKTsKKworIyBJbml0aWFsaXplIHByaW1hcnkgbm9kZSB3aXRoIGFyY2hp dmluZworbXkgJGFyY2hpdmVfZGlyID0gUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM6OnRlbXBk aXIoKTsKK215ICRwcmltYXJ5ID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdw cmltYXJ5Jyk7CiskcHJpbWFyeS0+aW5pdChoYXNfYXJjaGl2aW5nID0+IDEsIGFsbG93c19z dHJlYW1pbmcgPT4gMSk7CiskcHJpbWFyeS0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29u ZicsICIKK2FyY2hpdmVfbW9kZSA9IHNoYXJlZAorYXJjaGl2ZV9jb21tYW5kID0gJ2NwICVw IFwiJGFyY2hpdmVfZGlyXCIvJWYnCit3YWxfa2VlcF9zaXplID0gMTI4TUIKKyIpOworJHBy aW1hcnktPnN0YXJ0OworCisjIENyZWF0ZSBhIHRlc3QgdGFibGUgYW5kIGdlbmVyYXRlIHNv bWUgV0FMCiskcHJpbWFyeS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICdDUkVBVEUgVEFCTEUg dGVzdF90YWJsZSAoaWQgaW50LCBkYXRhIHRleHQpOycpOworJHByaW1hcnktPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdGVzdF90YWJsZSBTRUxFQ1QgaSwgJ2RhdGEn IHx8IGkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgNTAwKSBpOyIpOworJHByaW1hcnktPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAnU0VMRUNUIHBnX3N3aXRjaF93YWwoKTsnKTsKKyRwcmlt YXJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRlc3RfdGFibGUgU0VM RUNUIGksICdkYXRhJyB8fCBpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDUwMSwgMTAwMCkgaTsi KTsKKyRwcmltYXJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgJ1NFTEVDVCBwZ19zd2l0Y2hf d2FsKCk7Jyk7CisKKyMgV2FpdCBmb3IgYXJjaGl2ZXIgdG8gYXJjaGl2ZSBzZWdtZW50cwor JHByaW1hcnktPnBvbGxfcXVlcnlfdW50aWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIGFyY2hp dmVkX2NvdW50ID4gMCBGUk9NIHBnX3N0YXRfYXJjaGl2ZXIiKQorCW9yIGRpZSAiVGltZWQg b3V0IHdhaXRpbmcgZm9yIGFyY2hpdmVyIHRvIHN0YXJ0IjsKKworbXkgJGFyY2hpdmVkX2Nv dW50ID0gKCkgPSBnbG9iKCIkYXJjaGl2ZV9kaXIvKiIpOworb2soJGFyY2hpdmVkX2NvdW50 ID4gMCwgInByaW1hcnkgaGFzIGFyY2hpdmVkIFdBTCBmaWxlcyB0byBzaGFyZWQgYXJjaGl2 ZSIpOworbm90ZSgiUHJpbWFyeSBhcmNoaXZlZCAkYXJjaGl2ZWRfY291bnQgZmlsZXMiKTsK KworIyBUYWtlIGJhY2t1cCBmb3Igc3RhbmRieQorbXkgJGJhY2t1cF9uYW1lID0gJ3N0YW5k YnlfYmFja3VwJzsKKyRwcmltYXJ5LT5iYWNrdXAoJGJhY2t1cF9uYW1lKTsKKworIyBFeGNs dWRlIHBvc3NpYmxlIHJhY2UgY29uZGl0aW9uIHdoZW4gYmFja3VwIFdBTCBpcyBsYXN0IGFy Y2hpdmVkCiskcHJpbWFyeS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0 ZXN0X3RhYmxlIFNFTEVDVCBpLCAnZGF0YScgfHwgaSBGUk9NIGdlbmVyYXRlX3Nlcmllcyg1 MDEsIDEwMDApIGk7Iik7CiskcHJpbWFyeS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICdTRUxF Q1QgcGdfc3dpdGNoX3dhbCgpOycpOworCisjIFNldCB1cCBzdGFuZGJ5IHdpdGggYXJjaGl2 ZV9tb2RlPXNoYXJlZAorbXkgJHN0YW5kYnkgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVy LT5uZXcoJ3N0YW5kYnknKTsKKyRzdGFuZGJ5LT5pbml0X2Zyb21fYmFja3VwKCRwcmltYXJ5 LCAkYmFja3VwX25hbWUsIGhhc19zdHJlYW1pbmcgPT4gMSk7Ciskc3RhbmRieS0+YXBwZW5k X2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsICIKK2FyY2hpdmVfbW9kZSA9IHNoYXJlZAorYXJj aGl2ZV9jb21tYW5kID0gJ2NwICVwIFwiJGFyY2hpdmVfZGlyXCIvJWYnCit3YWxfcmVjZWl2 ZXJfc3RhdHVzX2ludGVydmFsID0gMXMKKyIpOworJHN0YW5kYnktPnN0YXJ0OworCisjIFdh aXQgZm9yIHN0YW5kYnkgdG8gY2F0Y2ggdXAKKyRwcmltYXJ5LT53YWl0X2Zvcl9jYXRjaHVw KCRzdGFuZGJ5KTsKKworIyBHZW5lcmF0ZSBtb3JlIFdBTCBvbiBwcmltYXJ5ICh0aGVzZSBh cmUgbmV3IHNlZ21lbnRzIG5vdCB5ZXQgYXJjaGl2ZWQpCiskcHJpbWFyeS0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0ZXN0X3RhYmxlIFNFTEVDVCBpLCAnZGF0YScg fHwgaSBGUk9NIGdlbmVyYXRlX3NlcmllcygxMDAxLCAxNTAwKSBpOyIpOworJHByaW1hcnkt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAnU0VMRUNUIHBnX3N3aXRjaF93YWwoKTsnKTsKKyRw cmltYXJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRlc3RfdGFibGUg U0VMRUNUIGksICdkYXRhJyB8fCBpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDE1MDEsIDIwMDAp IGk7Iik7CiskcHJpbWFyeS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICdTRUxFQ1QgcGdfc3dp dGNoX3dhbCgpOycpOworCisjIFdhaXQgZm9yIHN0YW5kYnkgdG8gcmVjZWl2ZSB0aGUgbmV3 IFdBTAorJHByaW1hcnktPndhaXRfZm9yX2NhdGNodXAoJHN0YW5kYnkpOworCisjIENoZWNr IHRoYXQgc3RhbmRieSBoYXMgLnJlYWR5IG9yIC5kb25lIGZpbGVzIGZvciB0aGUgbmV3bHkg cmVjZWl2ZWQgc2VnbWVudHMuCisjIE5vcm1hbGx5IHRoZXkgc2hvdWxkIGJlIC5yZWFkeSAo bm90IHlldCBhcmNoaXZlZCBieSBwcmltYXJ5KSwgYnV0IGluIHJhcmUgY2FzZXMKKyMgdGhl IGFyY2hpdmVyIGNvdWxkIGJlIHZlcnkgZmFzdCBhbmQgYW4gYXJjaGl2ZSByZXBvcnQgc2Vu dCBpbW1lZGlhdGVseSwgY3JlYXRpbmcKKyMgLmRvbmUgZmlsZXMgaW5zdGVhZC4gQm90aCBh cmUgY29ycmVjdCBiZWhhdmlvciAtIHRoZSBrZXkgaXMgdGhhdCBmaWxlcyBleGlzdC4KK215 ICRzdGFuZGJ5X2FyY2hpdmVfc3RhdHVzID0gJHN0YW5kYnktPmRhdGFfZGlyIC4gJy9wZ193 YWwvYXJjaGl2ZV9zdGF0dXMnOworbXkgJHN0YXR1c19jb3VudCA9IDA7CitpZiAob3BlbmRp cihteSAkZGgsICRzdGFuZGJ5X2FyY2hpdmVfc3RhdHVzKSkKK3sKKwlteSBAZmlsZXMgPSBn cmVwIHsgL1wuKHJlYWR5fGRvbmUpJC8gfSByZWFkZGlyKCRkaCk7CisJJHN0YXR1c19jb3Vu dCA9IHNjYWxhcihAZmlsZXMpOworCW15ICRyZWFkeV9jb3VudCA9IHNjYWxhcihncmVwIHsg L1wucmVhZHkkLyB9IEBmaWxlcyk7CisJbXkgJGRvbmVfY291bnQgPSBzY2FsYXIoZ3JlcCB7 IC9cLmRvbmUkLyB9IEBmaWxlcyk7CisJbm90ZSgiU3RhbmRieSBoYXMgJHJlYWR5X2NvdW50 IC5yZWFkeSBmaWxlcyBhbmQgJGRvbmVfY291bnQgLmRvbmUgZmlsZXMiKTsKKwljbG9zZWRp cigkZGgpOworfQorY21wX29rKCRzdGF0dXNfY291bnQsICc+JywgMCwgInN0YW5kYnkgY3Jl YXRlcyBhcmNoaXZlIHN0YXR1cyBmaWxlcyBmb3IgcmVjZWl2ZWQgV0FMIik7CisKKyMgR2Vu ZXJhdGUgbW9yZSBXQUwgYW5kIHdhaXQgZm9yIGFyY2hpdmluZyBvbiBwcmltYXJ5CitteSAk aW5pdGlhbF9hcmNoaXZlZCA9ICRwcmltYXJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgJ1NF TEVDVCBhcmNoaXZlZF9jb3VudCBGUk9NIHBnX3N0YXRfYXJjaGl2ZXInKTsKKyRwcmltYXJ5 LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRlc3RfdGFibGUgU0VMRUNU IGksICdtb3JlLWRhdGEnIHx8IGkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMjAwMSwgMjUwMCkg aTsiKTsKKyRwcmltYXJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgJ1NFTEVDVCBwZ19zd2l0 Y2hfd2FsKCk7Jyk7CiskcHJpbWFyeS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQg SU5UTyB0ZXN0X3RhYmxlIFNFTEVDVCBpLCAnbW9yZS1kYXRhMicgfHwgaSBGUk9NIGdlbmVy YXRlX3NlcmllcygyNTAxLCAzMDAwKSBpOyIpOworJHByaW1hcnktPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAnU0VMRUNUIHBnX3N3aXRjaF93YWwoKTsnKTsKKworIyBXYWl0IGZvciBwcmlt YXJ5IHRvIGFyY2hpdmUgdGhlIG5ldyBzZWdtZW50cworJHByaW1hcnktPnBvbGxfcXVlcnlf dW50aWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIGFyY2hpdmVkX2NvdW50ID4gJGluaXRpYWxf YXJjaGl2ZWQgRlJPTSBwZ19zdGF0X2FyY2hpdmVyIikKKwlvciBkaWUgIlRpbWVkIG91dCB3 YWl0aW5nIGZvciBwcmltYXJ5IHRvIGFyY2hpdmUgbmV3IHNlZ21lbnRzIjsKKworIyBXYWl0 IGZvciBzdGFuZGJ5IHRvIGNhdGNoIHVwIChhcmNoaXZlIHN0YXR1cyBpcyBzZW50IGR1cmlu ZyByZXBsaWNhdGlvbikKKyRwcmltYXJ5LT53YWl0X2Zvcl9jYXRjaHVwKCRzdGFuZGJ5KTsK KworIyBXYWl0IGZvciBwcmltYXJ5IHRvIHNlbmQgYXJjaGl2YWwgc3RhdHVzIHVwZGF0ZXMg YW5kIHN0YW5kYnkgdG8gcHJvY2VzcyB0aGVtCisjIFRoZSBzdGFuZGJ5IHNob3VsZCBtYXJr IHNlZ21lbnRzIGFzIC5kb25lIGFmdGVyIHJlY2VpdmluZyBhcmNoaXZlIHN0YXR1cyBmcm9t IHByaW1hcnkKK215ICRkb25lX2NvdW50ID0gMDsKK2ZvciAobXkgJGkgPSAwOyAkaSA8ICRQ b3N0Z3JlU1FMOjpUZXN0OjpVdGlsczo6dGltZW91dF9kZWZhdWx0OyAkaSsrKQoreworCSRk b25lX2NvdW50ID0gMDsKKwlpZiAob3BlbmRpcihteSAkZGgsICRzdGFuZGJ5X2FyY2hpdmVf c3RhdHVzKSkKKwl7CisJCSRkb25lX2NvdW50ID0gc2NhbGFyKGdyZXAgeyAvXC5kb25lJC8g fSByZWFkZGlyKCRkaCkpOworCQljbG9zZWRpcigkZGgpOworCX0KKwlsYXN0IGlmICRkb25l X2NvdW50ID4gMDsKKwlzbGVlcCgxKTsKK30KK29rKCRkb25lX2NvdW50ID4gMCwgInN0YW5k YnkgbWFya2VkIHNlZ21lbnRzIGFzIC5kb25lIGFmdGVyIHByaW1hcnkncyBhcmNoaXZhbCBy ZXBvcnQiKTsKK25vdGUoIlN0YW5kYnkgaGFzICRkb25lX2NvdW50IC5kb25lIGZpbGVzIik7 CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVGVzdCAyOiBTdGFuZGJ5IHByb21v dGlvbiAtIHZlcmlmeSBhcmNoaXZlciBhY3RpdmF0ZXMKKyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMKKworIyBCZWZvcmUgcHJvbW90aW9uLCB2ZXJpZnkgYXJjaGl2ZXIgaXMgbm90IHJ1 bm5pbmcgb24gc3RhbmRieSAoc2hhcmVkIG1vZGUgZHVyaW5nIHJlY292ZXJ5KQorIyBJbiBz aGFyZWQgbW9kZSwgdGhlIHN0YW5kYnkncyBhcmNoaXZlciBzaG91bGQgbm90IGJlIGFyY2hp dmluZyBkdXJpbmcgcmVjb3ZlcnkKK215ICRhcmNoaXZlZF9iZWZvcmUgPSAkc3RhbmRieS0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsIAorCSJTRUxFQ1QgYXJjaGl2ZWRfY291bnQgRlJPTSBw Z19zdGF0X2FyY2hpdmVyIik7CitpcygkYXJjaGl2ZWRfYmVmb3JlLCAnMCcsIAorCSJhcmNo aXZlciBub3QgYWN0aXZlIG9uIHN0YW5kYnkgYmVmb3JlIHByb21vdGlvbiAoYXJjaGl2ZWRf Y291bnQ9MCkiKTsKKworIyBWZXJpZnkgc3RhbmRieSBpcyBzdGlsbCBpbiByZWNvdmVyeSBi ZWZvcmUgcHJvbW90aW5nCitteSAkaW5fcmVjb3ZlcnkgPSAkc3RhbmRieS0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJTRUxFQ1QgcGdfaXNfaW5fcmVjb3ZlcnkoKTsiKTsKK2lzKCRpbl9y ZWNvdmVyeSwgJ3QnLCAic3RhbmRieSBpcyBpbiByZWNvdmVyeSBiZWZvcmUgcHJvbW90aW9u Iik7CisKKyMgUHJvbW90ZSB0aGUgc3RhbmRieQorJHN0YW5kYnktPnByb21vdGU7Ciskc3Rh bmRieS0+cG9sbF9xdWVyeV91bnRpbCgncG9zdGdyZXMnLCAiU0VMRUNUIE5PVCBwZ19pc19p bl9yZWNvdmVyeSgpOyIpOworCisjIEdlbmVyYXRlIFdBTCBvbiBuZXcgcHJpbWFyeSAoZm9y bWVyIHN0YW5kYnkpCiskc3RhbmRieS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQg SU5UTyB0ZXN0X3RhYmxlIFNFTEVDVCBpLCAncG9zdC1wcm9tb3Rpb24nIHx8IGkgRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoMjAwMSwgMjUwMCkgaTsiKTsKKyRzdGFuZGJ5LT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgJ1NFTEVDVCBwZ19zd2l0Y2hfd2FsKCk7Jyk7CisKKyMgV2FpdCBmb3Ig YXJjaGl2ZXIgdG8gYWN0aXZhdGUgYW5kIGFyY2hpdmUgdGhlIG5ldyBXQUwKKyMgQ2hlY2sg cGdfc3RhdF9hcmNoaXZlciB0byB2ZXJpZnkgYXJjaGl2aW5nIGlzIGhhcHBlbmluZworJHN0 YW5kYnktPnBvbGxfcXVlcnlfdW50aWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIGFyY2hpdmVk X2NvdW50ID4gMCBGUk9NIHBnX3N0YXRfYXJjaGl2ZXIiKQorCW9yIGRpZSAiVGltZWQgb3V0 IHdhaXRpbmcgZm9yIHByb21vdGVkIHN0YW5kYnkgdG8gc3RhcnQgYXJjaGl2aW5nIjsKK3Bh c3MoInByb21vdGVkIHN0YW5kYnkgc3RhcnRlZCBhcmNoaXZpbmciKTsKKworIyBWZXJpZnkg ZGF0YSBpbnRlZ3JpdHkKK215ICRjb3VudCA9ICRzdGFuZGJ5LT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgJ1NFTEVDVCBDT1VOVCgqKSBGUk9NIHRlc3RfdGFibGU7Jyk7CitvaygkY291bnQg Pj0gMjUwMCwgInByb21vdGVkIHN0YW5kYnkgaGFzIGFsbCBkYXRhIChnb3QgJGNvdW50IHJv d3MpIik7CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVGVzdCAzOiBDYXNjYWRp bmcgcmVwbGljYXRpb24KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBUYWtlIGEg YmFja3VwIGZyb20gdGhlIHByb21vdGVkIHN0YW5kYnkgKG5vdyB0aGUgbmV3IHByaW1hcnkp CitteSAkcHJvbW90ZWRfYmFja3VwID0gJ3Byb21vdGVkX2JhY2t1cCc7Ciskc3RhbmRieS0+ YmFja3VwKCRwcm9tb3RlZF9iYWNrdXApOworCisjIFNldCB1cCBzZWNvbmQtbGV2ZWwgc3Rh bmRieSAoY2FzY2FkaW5nIGZyb20gZmlyc3Qgc3RhbmRieSwgbm93IHByb21vdGVkKQorbXkg JHN0YW5kYnkyID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdzdGFuZGJ5Micp OworJHN0YW5kYnkyLT5pbml0X2Zyb21fYmFja3VwKCRzdGFuZGJ5LCAkcHJvbW90ZWRfYmFj a3VwLCBoYXNfc3RyZWFtaW5nID0+IDEpOworJHN0YW5kYnkyLT5hcHBlbmRfY29uZigncG9z dGdyZXNxbC5jb25mJywgIgorYXJjaGl2ZV9tb2RlID0gc2hhcmVkCithcmNoaXZlX2NvbW1h bmQgPSAnY3AgJXAgXCIkYXJjaGl2ZV9kaXJcIi8lZicKK3dhbF9yZWNlaXZlcl9zdGF0dXNf aW50ZXJ2YWwgPSAxcworIik7Ciskc3RhbmRieTItPnN0YXJ0OworCisjIEdlbmVyYXRlIFdB TCBvbiBwcm9tb3RlZCBzdGFuZGJ5IChub3cgcHJpbWFyeSBmb3Igc3RhbmRieTIpCitteSAk Y2FzY2FkaW5nX2FyY2hpdmVkX2JlZm9yZSA9ICRzdGFuZGJ5LT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgJ1NFTEVDVCBhcmNoaXZlZF9jb3VudCBGUk9NIHBnX3N0YXRfYXJjaGl2ZXInKTsK KyRzdGFuZGJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRlc3RfdGFi bGUgU0VMRUNUIGksICdjYXNjYWRpbmcnIHx8IGkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMjUw MSwgMzAwMCkgaTsiKTsKKyRzdGFuZGJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgJ1NFTEVD VCBwZ19zd2l0Y2hfd2FsKCk7Jyk7CisKKyMgV2FpdCBmb3IgdGhlIHByb21vdGVkIHN0YW5k YnkgKGFjdGluZyBhcyBwcmltYXJ5KSB0byBhcmNoaXZlIHRoZSBuZXcgc2VnbWVudAorJHN0 YW5kYnktPnBvbGxfcXVlcnlfdW50aWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIGFyY2hpdmVk X2NvdW50ID4gJGNhc2NhZGluZ19hcmNoaXZlZF9iZWZvcmUgRlJPTSBwZ19zdGF0X2FyY2hp dmVyIikKKwlvciBkaWUgIlRpbWVkIG91dCB3YWl0aW5nIGZvciBwcmltYXJ5IHRvIGFyY2hp dmUgc2VnbWVudCBpbiBjYXNjYWRpbmcgdGVzdCI7CisKKyMgV2FpdCBmb3IgY2FzY2FkaW5n IHN0YW5kYnkgdG8gY2F0Y2ggdXAKKyRzdGFuZGJ5LT53YWl0X2Zvcl9jYXRjaHVwKCRzdGFu ZGJ5Mik7CisKKyMgV2FpdCBmb3IgY2FzY2FkaW5nIHN0YW5kYnkgdG8gcmVjZWl2ZSBhcmNo aXZlIHN0YXR1cyBhbmQgbWFyayBzZWdtZW50cyBhcyAuZG9uZQorbXkgJHN0YW5kYnkyX2Fy Y2hpdmVfc3RhdHVzID0gJHN0YW5kYnkyLT5kYXRhX2RpciAuICcvcGdfd2FsL2FyY2hpdmVf c3RhdHVzJzsKK215ICRzdGFuZGJ5Ml9kb25lX2NvdW50ID0gMDsKK2ZvciAobXkgJGkgPSAw OyAkaSA8ICRQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczo6dGltZW91dF9kZWZhdWx0OyAkaSsr KQoreworCSRzdGFuZGJ5Ml9kb25lX2NvdW50ID0gMDsKKwlpZiAob3BlbmRpcihteSAkZGgs ICRzdGFuZGJ5Ml9hcmNoaXZlX3N0YXR1cykpCisJeworCQkkc3RhbmRieTJfZG9uZV9jb3Vu dCA9IHNjYWxhcihncmVwIHsgL1wuZG9uZSQvIH0gcmVhZGRpcigkZGgpKTsKKwkJY2xvc2Vk aXIoJGRoKTsKKwl9CisJbGFzdCBpZiAkc3RhbmRieTJfZG9uZV9jb3VudCA+IDA7CisJc2xl ZXAoMSk7Cit9Citvaygkc3RhbmRieTJfZG9uZV9jb3VudCA+IDAsICJjYXNjYWRpbmcgc3Rh bmRieSBtYXJrcyBzZWdtZW50cyBhcyAuZG9uZSIpOworbm90ZSgiQ2FzY2FkaW5nIHN0YW5k YnkgaGFzICRzdGFuZGJ5Ml9kb25lX2NvdW50IC5kb25lIGZpbGVzIik7CisKKyMgVmVyaWZ5 IGNhc2NhZGluZyBzdGFuZGJ5IGhhcyBhbGwgZGF0YQorbXkgJHN0YW5kYnkyX2NvdW50ID0g JHN0YW5kYnkyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgJ1NFTEVDVCBDT1VOVCgqKSBGUk9N IHRlc3RfdGFibGU7Jyk7Citvaygkc3RhbmRieTJfY291bnQgPj0gMzAwMCwgImNhc2NhZGlu ZyBzdGFuZGJ5IGhhcyBhbGwgZGF0YSAoZ290ICRzdGFuZGJ5Ml9jb3VudCByb3dzKSIpOwor CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFRlc3QgNDogTXVsdGlwbGUgc3RhbmRi eXMgZnJvbSBzYW1lIHByaW1hcnkKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBD cmVhdGUgdGhpcmQgc3RhbmRieSBmcm9tIHByb21vdGVkIHN0YW5kYnkgKGN1cnJlbnQgcHJp bWFyeSkKK215ICRzdGFuZGJ5MyA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygn c3RhbmRieTMnKTsKK215ICRiYWNrdXAyID0gJ211bHRpX3N0YW5kYnlfYmFja3VwJzsKKyRz dGFuZGJ5LT5iYWNrdXAoJGJhY2t1cDIpOworJHN0YW5kYnkzLT5pbml0X2Zyb21fYmFja3Vw KCRzdGFuZGJ5LCAkYmFja3VwMiwgaGFzX3N0cmVhbWluZyA9PiAxKTsKKyRzdGFuZGJ5My0+ YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsICIKK2FyY2hpdmVfbW9kZSA9IHNoYXJl ZAorYXJjaGl2ZV9jb21tYW5kID0gJ2NwICVwIFwiJGFyY2hpdmVfZGlyXCIvJWYnCit3YWxf cmVjZWl2ZXJfc3RhdHVzX2ludGVydmFsID0gMXMKKyIpOworJHN0YW5kYnkzLT5zdGFydDsK KworIyBHZW5lcmF0ZSBXQUwgYW5kIGVuc3VyZSBib3RoIHN0YW5kYnlzIHJlY2VpdmUgaXQK K215ICRzdGFuZGJ5X2FyY2hpdmVkX2JlZm9yZSA9ICRzdGFuZGJ5LT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgJ1NFTEVDVCBhcmNoaXZlZF9jb3VudCBGUk9NIHBnX3N0YXRfYXJjaGl2ZXIn KTsKKyRzdGFuZGJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRlc3Rf dGFibGUgU0VMRUNUIGksICdtdWx0aScgfHwgaSBGUk9NIGdlbmVyYXRlX3NlcmllcygzMDAx LCAzNTAwKSBpOyIpOworJHN0YW5kYnktPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAnU0VMRUNU IHBnX3N3aXRjaF93YWwoKTsnKTsKKworIyBXYWl0IGZvciB0aGUgcHJvbW90ZWQgc3RhbmRi eSAoYWN0aW5nIGFzIHByaW1hcnkpIHRvIGFyY2hpdmUgdGhlIG5ldyBzZWdtZW50Ciskc3Rh bmRieS0+cG9sbF9xdWVyeV91bnRpbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgYXJjaGl2ZWRf Y291bnQgPiAkc3RhbmRieV9hcmNoaXZlZF9iZWZvcmUgRlJPTSBwZ19zdGF0X2FyY2hpdmVy IikKKwlvciBkaWUgIlRpbWVkIG91dCB3YWl0aW5nIGZvciBwcmltYXJ5IHRvIGFyY2hpdmUg c2VnbWVudCBpbiBtdWx0aS1zdGFuZGJ5IHRlc3QiOworCiskc3RhbmRieS0+d2FpdF9mb3Jf Y2F0Y2h1cCgkc3RhbmRieTIpOworJHN0YW5kYnktPndhaXRfZm9yX2NhdGNodXAoJHN0YW5k YnkzKTsKKworIyBWZXJpZnkgYm90aCBzdGFuZGJ5cyBldmVudHVhbGx5IG1hcmsgc2VnbWVu dHMgYXMgLmRvbmUKK215ICRzdGFuZGJ5M19hcmNoaXZlX3N0YXR1cyA9ICRzdGFuZGJ5My0+ ZGF0YV9kaXIgLiAnL3BnX3dhbC9hcmNoaXZlX3N0YXR1cyc7CisKK2ZvciAobXkgJGkgPSAw OyAkaSA8ICRQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczo6dGltZW91dF9kZWZhdWx0OyAkaSsr KQoreworCSRzdGFuZGJ5Ml9kb25lX2NvdW50ID0gMDsKKwlpZiAob3BlbmRpcihteSAkZGgs ICRzdGFuZGJ5Ml9hcmNoaXZlX3N0YXR1cykpCisJeworCQkkc3RhbmRieTJfZG9uZV9jb3Vu dCA9IHNjYWxhcihncmVwIHsgL1wuZG9uZSQvIH0gcmVhZGRpcigkZGgpKTsKKwkJY2xvc2Vk aXIoJGRoKTsKKwl9CisJbGFzdCBpZiAkc3RhbmRieTJfZG9uZV9jb3VudCA+IDA7CisJc2xl ZXAoMSk7Cit9CisKK215ICRzdGFuZGJ5M19kb25lX2NvdW50ID0gMDsKK2ZvciAobXkgJGkg PSAwOyAkaSA8ICRQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczo6dGltZW91dF9kZWZhdWx0OyAk aSsrKQoreworCSRzdGFuZGJ5M19kb25lX2NvdW50ID0gMDsKKwlpZiAob3BlbmRpcihteSAk ZGgsICRzdGFuZGJ5M19hcmNoaXZlX3N0YXR1cykpCisJeworCQkkc3RhbmRieTNfZG9uZV9j b3VudCA9IHNjYWxhcihncmVwIHsgL1wuZG9uZSQvIH0gcmVhZGRpcigkZGgpKTsKKwkJY2xv c2VkaXIoJGRoKTsKKwl9CisJbGFzdCBpZiAkc3RhbmRieTNfZG9uZV9jb3VudCA+IDA7CisJ c2xlZXAoMSk7Cit9CisKK29rKCRzdGFuZGJ5Ml9kb25lX2NvdW50ID4gMCwgInN0YW5kYnky IG1hcmtzIHNlZ21lbnRzIGFzIC5kb25lIik7Citvaygkc3RhbmRieTNfZG9uZV9jb3VudCA+ IDAsICJzdGFuZGJ5MyBtYXJrcyBzZWdtZW50cyBhcyAuZG9uZSIpOworbm90ZSgic3RhbmRi eTIgaGFzICRzdGFuZGJ5Ml9kb25lX2NvdW50IC5kb25lIGZpbGVzLCBzdGFuZGJ5MyBoYXMg JHN0YW5kYnkzX2RvbmVfY291bnQgLmRvbmUgZmlsZXMiKTsKKworIyBWZXJpZnkgYm90aCBz dGFuZGJ5cyBoYXZlIGFsbCBkYXRhCiskc3RhbmRieTJfY291bnQgPSAkc3RhbmRieTItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAnU0VMRUNUIENPVU5UKCopIEZST00gdGVzdF90YWJsZTsn KTsKK215ICRzdGFuZGJ5M19jb3VudCA9ICRzdGFuZGJ5My0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICdTRUxFQ1QgQ09VTlQoKikgRlJPTSB0ZXN0X3RhYmxlOycpOworb2soJHN0YW5kYnky X2NvdW50ID49IDM1MDAsICJzdGFuZGJ5MiBoYXMgYWxsIGRhdGEgKGdvdCAkc3RhbmRieTJf Y291bnQgcm93cykiKTsKK29rKCRzdGFuZGJ5M19jb3VudCA+PSAzNTAwLCAic3RhbmRieTMg aGFzIGFsbCBkYXRhIChnb3QgJHN0YW5kYnkzX2NvdW50IHJvd3MpIik7CisKK2RvbmVfdGVz dGluZygpOwo= --------------mju9UEIq51MlMH29d3hdHkgB--