Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1hpmle-0004xZ-MP for pgsql-hackers@arkaria.postgresql.org; Tue, 23 Jul 2019 04:51:14 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1hpmld-00043l-Cb for pgsql-hackers@arkaria.postgresql.org; Tue, 23 Jul 2019 04:51:13 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1hpmld-00043d-2o for pgsql-hackers@lists.postgresql.org; Tue, 23 Jul 2019 04:51:13 +0000 Received: from kaemail1.nttcom.co.jp ([132.222.121.19]) by magus.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1hpmlX-000085-Ur for pgsql-hackers@lists.postgresql.org; Tue, 23 Jul 2019 04:51:12 +0000 Received: from atmf.nttcom.co.jp (unknown [10.133.230.135]) by kaemail1.nttcom.co.jp (Unknown) with ESMTP id 36EC3FF888; Tue, 23 Jul 2019 13:51:05 +0900 (JST) Received: from 10.133.230.129 (10.133.230.129) by MAIL-FILTER-SERVER with ESMTP; Tue, 23 Jul 2019 13:52:52 +0900 Received: from kaimail1.nttcom.co.jp (kaimvc2 [10.144.3.20]) by kaimail1.nttcom.co.jp (Postfix) with ESMTP id 966AC2053D; Tue, 23 Jul 2019 13:51:04 +0900 (JST) Received: from WMCAS4.soad.nttcom.co.jp (wmcas4.soad.nttcom.co.jp [10.144.1.134]) by kaimail1.nttcom.co.jp (Postfix) with ESMTP id 8905B2052B; Tue, 23 Jul 2019 13:51:04 +0900 (JST) Received: from [10.132.149.59] (10.132.149.59) by WMCAS4.soad.nttcom.co.jp (10.144.1.134) with Microsoft SMTP Server id 14.3.146.0; Tue, 23 Jul 2019 13:51:04 +0900 From: Tatsuro Yamada Subject: Re: progress report for ANALYZE To: Kyotaro Horiguchi CC: , , , , References: <244cb241-168b-d6a9-c45f-a80c34cdc6ad@nttcom.co.jp> <20190711.195610.175868438.horikyota.ntt@gmail.com> <0876b4fe-26fb-ca32-f179-c696fa3ddfec@nttcom.co.jp> <20190722.173039.59246943.horikyota.ntt@gmail.com> Message-ID: <374df3ef-be5c-6b7b-1ad9-e09d41640e67@nttcom.co.jp> Date: Tue, 23 Jul 2019 13:51:04 +0900 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.9.1 MIME-Version: 1.0 In-Reply-To: <20190722.173039.59246943.horikyota.ntt@gmail.com> Content-Type: multipart/mixed; boundary="------------E3F9D95CF8B440DC4EC1D2F8" Content-Language: en-US X-TM-AS-MML: disable List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --------------E3F9D95CF8B440DC4EC1D2F8 Content-Type: text/plain; charset="utf-8"; format=flowed Content-Transfer-Encoding: 7bit Hi Horiguchi-san, Alvaro, Anthony, Julien and Robert, On 2019/07/22 17:30, Kyotaro Horiguchi wrote: > Hello. > > # It's very good timing, as you came in while I have a time after > # finishing a quite nerve-wrackig task.. > > At Mon, 22 Jul 2019 15:02:16 +0900, Tatsuro Yamada wrote in <0876b4fe-26fb-ca32-f179-c696fa3ddfec@nttcom.co.jp> >>>> 3785|13599|postgres|16384|f|16384|analyzing complete|0|0 <-- Added and >>>> fixed. :) >>>> --------------------------------------------------------- >>> >>> I have some comments. >>> + const int index[] = { >>> + PROGRESS_ANALYZE_PHASE, >>> + PROGRESS_ANALYZE_TOTAL_BLOCKS, >>> + PROGRESS_ANALYZE_BLOCKS_DONE >>> + }; >>> + const int64 val[] = { >>> + PROGRESS_ANALYZE_PHASE_ANALYSIS, >>> + 0, 0 >>> Do you oppose to leaving the total/done blocks alone here:p? >> >> >> Thanks for your comments! >> I created a new patch based on your comments because Alvaro allowed me >> to work on revising the patch. :) >> >> >> Ah, I revised it to remove "0, 0". > > Thanks. For a second I thought that > PROGRESS_ANALYZE_PHASE_ANALYSIS was lost but it is living being > renamed to PROGRESS_ANALYZE_PHASE_ANALYSIS. "PROGRESS_ANALYZE_PHASE_ANALYSIS" was replaced with "PROGRESS_ANALYZE_PHASE_COMPUTING" because I changed the phase-name on v3.patch like this: ./src/include/commands/progress.h +/* Phases of analyze (as advertised via PROGRESS_ANALYZE_PHASE) */ +#define PROGRESS_ANALYZE_PHASE_SCAN_TABLE 1 +#define PROGRESS_ANALYZE_PHASE_COMPUTING 2 +#define PROGRESS_ANALYZE_PHASE_COMPUTING_EXTENDED 3 +#define PROGRESS_ANALYZE_PHASE_FINALIZE 4 Is it Okay? >>> + BlockNumber nblocks; >>> + double blksdone = 0; >>> Why is it a double even though blksdone is of the same domain >>> with nblocks? And finally: >>> + pgstat_progress_update_param(PROGRESS_ANALYZE_BLOCKS_DONE, >>> + ++blksdone); >>> It is converted into int64. >> >> >> Fixed. >> But is it suitable to use BlockNumber instead int64? > > Yeah, I didn't meant that we should use int64 there. Sorry for > the confusing comment. I meant that blksdone should be of > BlockNumber. Fixed. Thanks for the clarification. :) Attached v4 patch file only includes this fix. >>> + WHEN 2 THEN 'analyzing sample' >>> + WHEN 3 THEN 'analyzing sample (extended stats)' >>> I think we should avoid parenthesized phrases as far as >>> not-necessary. That makes the column unnecessarily long. The >>> phase is internally called as "compute stats" so *I* would prefer >>> something like the followings: >>> + WHEN 2 THEN 'computing stats' >>> + WHEN 3 THEN 'computing extended stats' >>> + WHEN 4 THEN 'analyzing complete' >>> And if you are intending by this that (as mentioned in the >>> documentation) "working to complete this analyze", this would be: >>> + WHEN 4 THEN 'completing analyze' >>> + WHEN 4 THEN 'finalizing analyze' >> >> >> I have no strong opinion, so I changed the phase-names based on >> your suggestions like following: >> >> WHEN 2 THEN 'computing stats' >> WHEN 3 THEN 'computing extended stats' >> WHEN 4 THEN 'finalizing analyze' >> >> However, I'd like to get any comments from hackers to get a consensus >> about the names. > > Agreed. Especially such word choosing is not suitable for me.. To Alvaro, Julien, Anthony and Robert, Do you have any ideas? :) >>> + Process ID of backend. >>> of "the" backend. ? And period is not attached on all >>> descriptions consisting of a single sentence. >>> >>> + OID of the database to which this backend is >>> connected. >>> + Name of the database to which this backend is >>> connected. >>> "database to which .. is connected" is phrased as "database this >>> backend is connected to" in pg_stat_acttivity. (Just for consistency) >> >> >> I checked the sentences on other views of progress monitor (VACUUM, >> CREATE INDEX and CLUSTER), and they are same sentence. Therefore, >> I'd like to keep it as is. :) > > Oh, I see from where the wordings came. But no periods seen after > sentense when it is the only one in a description in other system > views tables. I think the progress views tables should be > corrected following convention. Sounds reasonable. However, I'd like to create another patch after this feature was committed since that document fix influence other progress monitor's description on the document. >>> + Whether the current scan includes legacy inheritance >>> children. >>> This apparently excludes partition tables but actually it is >>> included. >>> >>> "Whether scanning through child tables" ? >>> I'm not sure "child tables" is established as the word to mean >>> both "partition tables and inheritance children".. >> >> >> Hmm... I'm also not sure but I fixed as you suggested. > > Yeah, I also am not sure the suggestion is good enough as is.. > >>> + Total number of heap blocks to scan in the current table. >>> Number of heap blocks on scanning_table to scan? >>> It might be better that this description describes that this >>> and the next column is meaningful only while the phase >>> "scanning table". >> >> >> How about: >> Total number of heap blocks in the scanning_table. > > (For me, ) that seems like it shows blocks including all > descendents for inheritance parent. But I'm not sure..a In the case of scanning_table is parent table, it doesn't show the number. However, child tables shows the number. I tested it using Declarative partitioning table, See the bottom of this email. :) >> Please find attached patch. :) >> >> Here is a test result of the patch. >> ========================================================== >> # select * from pg_stat_progress_analyze ; \watch 0.0001; >> >> 9067|13599|postgres|16387|f|16387|scanning table|443|14 >> ... >> 9067|13599|postgres|16387|f|16387|scanning table|443|443 >> 9067|13599|postgres|16387|f|16387|computing stats|443|443 >> 9067|13599|postgres|16387|f|16387|computing stats|443|443 >> 9067|13599|postgres|16387|f|16387|computing stats|443|443 >> 9067|13599|postgres|16387|f|16387|finalizing analyze|443|443 >> ========================================================== > > Looks fine! I shared a test result using Declarative partitioning table. ========================================================== ## Create partitioning table create table hoge as select a from generate_series(0, 40000) a; create table hoge2( a integer ) partition by range(a); create table hoge2_10000 partition of hoge2 for values from (0) to (10000); create table hoge2_20000 partition of hoge2 for values from (10000) to (20000); create table hoge2_30000 partition of hoge2 for values from (20000) to (30000); create table hoge2_default partition of hoge2 default; ## Test select oid,relname,relpages,reltuples from pg_class where relname like 'hoge%'; oid | relname | relpages | reltuples -------+---------------+----------+----------- 16538 | hoge | 177 | 40001 16541 | hoge2 | 0 | 0 16544 | hoge2_10000 | 45 | 10000 16547 | hoge2_20000 | 45 | 10000 16550 | hoge2_30000 | 45 | 10000 16553 | hoge2_default | 45 | 10001 (6 rows) select * from pg_stat_progress_analyze ; \watch 0.00001; 27579|13599|postgres|16541|t|16544|scanning table|45|17 27579|13599|postgres|16541|t|16544|scanning table|45|38 27579|13599|postgres|16541|t|16544|scanning table|45|45 27579|13599|postgres|16541|t|16544|scanning table|45|45 27579|13599|postgres|16541|t|16544|scanning table|45|45 27579|13599|postgres|16541|t|16547|scanning table|45|17 27579|13599|postgres|16541|t|16547|scanning table|45|37 27579|13599|postgres|16541|t|16547|scanning table|45|45 27579|13599|postgres|16541|t|16547|scanning table|45|45 27579|13599|postgres|16541|t|16547|scanning table|45|45 27579|13599|postgres|16541|t|16550|scanning table|45|9 27579|13599|postgres|16541|t|16550|scanning table|45|30 27579|13599|postgres|16541|t|16550|scanning table|45|45 27579|13599|postgres|16541|t|16550|scanning table|45|45 27579|13599|postgres|16541|t|16550|scanning table|45|45 27579|13599|postgres|16541|t|16553|scanning table|45|5 27579|13599|postgres|16541|t|16553|scanning table|45|26 27579|13599|postgres|16541|t|16553|scanning table|45|42 27579|13599|postgres|16541|t|16553|scanning table|45|45 27579|13599|postgres|16541|t|16553|scanning table|45|45 27579|13599|postgres|16541|t|16553|computing stats|45|45 27579|13599|postgres|16541|t|16553|computing stats|45|45 27579|13599|postgres|16541|t|16553|computing stats|45|45 27579|13599|postgres|16541|t|16553|finalizing analyze|45|45 27579|13599|postgres|16544|f|16544|scanning table|45|1 27579|13599|postgres|16544|f|16544|scanning table|45|30 27579|13599|postgres|16544|f|16544|computing stats|45|45 27579|13599|postgres|16547|f|16547|scanning table|45|25 27579|13599|postgres|16547|f|16547|computing stats|45|45 27579|13599|postgres|16550|f|16550|scanning table|45|11 27579|13599|postgres|16550|f|16550|scanning table|45|38 27579|13599|postgres|16550|f|16550|finalizing analyze|45|45 27579|13599|postgres|16553|f|16553|scanning table|45|25 27579|13599|postgres|16553|f|16553|computing stats|45|45 ========================================================== I'll share test result using partitioning table via Inheritance tables on next email. :) Thanks, Tatsuro Yamada --------------E3F9D95CF8B440DC4EC1D2F8 Content-Type: text/plain; charset="UTF-8"; name="v4-0001-Report-progress-for-ANALYZE.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="v4-0001-Report-progress-for-ANALYZE.patch" ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9tb25pdG9yaW5nLnNnbWwgYi9kb2Mvc3JjL3Nn bWwvbW9uaXRvcmluZy5zZ21sCmluZGV4IGJmNzJkMGMuLmJmMDlkNjkgMTAwNjQ0Ci0tLSBh L2RvYy9zcmMvc2dtbC9tb25pdG9yaW5nLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL21vbml0 b3Jpbmcuc2dtbApAQCAtMzYxLDYgKzM2MSwxNCBAQCBwb3N0Z3JlcyAgIDI3MDkzICAwLjAg IDAuMCAgMzAwOTYgIDI3NTIgPyAgICAgICAgU3MgICAxMTozNCAgIDA6MDAgcG9zdGdyZXM6 IHNlcgogICAgICA8L3Jvdz4KIAogICAgICA8cm93PgorICAgICAgPGVudHJ5PjxzdHJ1Y3Ru YW1lPnBnX3N0YXRfcHJvZ3Jlc3NfYW5hbHl6ZTwvc3RydWN0bmFtZT48aW5kZXh0ZXJtPjxw cmltYXJ5PnBnX3N0YXRfcHJvZ3Jlc3NfYW5hbHl6ZTwvcHJpbWFyeT48L2luZGV4dGVybT48 L2VudHJ5PgorICAgICAgPGVudHJ5Pk9uZSByb3cgZm9yIGVhY2ggYmFja2VuZCAoaW5jbHVk aW5nIGF1dG92YWN1dW0gd29ya2VyIHByb2Nlc3NlcykgcnVubmluZworICAgICAgIDxjb21t YW5kPkFOQUxZWkU8L2NvbW1hbmQ+LCBzaG93aW5nIGN1cnJlbnQgcHJvZ3Jlc3MuCisgICAg ICAgU2VlIDx4cmVmIGxpbmtlbmQ9J2FuYWx5emUtcHJvZ3Jlc3MtcmVwb3J0aW5nJy8+Lgor ICAgICAgPC9lbnRyeT4KKyAgICAgPC9yb3c+CisKKyAgICAgPHJvdz4KICAgICAgIDxlbnRy eT48c3RydWN0bmFtZT5wZ19zdGF0X3Byb2dyZXNzX2NsdXN0ZXI8L3N0cnVjdG5hbWU+PGlu ZGV4dGVybT48cHJpbWFyeT5wZ19zdGF0X3Byb2dyZXNzX2NsdXN0ZXI8L3ByaW1hcnk+PC9p bmRleHRlcm0+PC9lbnRyeT4KICAgICAgIDxlbnRyeT5PbmUgcm93IGZvciBlYWNoIGJhY2tl bmQgcnVubmluZwogICAgICAgIDxjb21tYW5kPkNMVVNURVI8L2NvbW1hbmQ+IG9yIDxjb21t YW5kPlZBQ1VVTSBGVUxMPC9jb21tYW5kPiwgc2hvd2luZyBjdXJyZW50IHByb2dyZXNzLgpA QCAtMzQ4MSw3ICszNDg5LDcgQEAgU0VMRUNUIHBnX3N0YXRfZ2V0X2JhY2tlbmRfcGlkKHMu YmFja2VuZGlkKSBBUyBwaWQsCiAgICA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVj dG5hbWU+IGhhcyB0aGUgYWJpbGl0eSB0byByZXBvcnQgdGhlIHByb2dyZXNzIG9mCiAgICBj ZXJ0YWluIGNvbW1hbmRzIGR1cmluZyBjb21tYW5kIGV4ZWN1dGlvbi4gIEN1cnJlbnRseSwg dGhlIG9ubHkgY29tbWFuZHMKICAgIHdoaWNoIHN1cHBvcnQgcHJvZ3Jlc3MgcmVwb3J0aW5n IGFyZSA8Y29tbWFuZD5DUkVBVEUgSU5ERVg8L2NvbW1hbmQ+LAotICAgPGNvbW1hbmQ+VkFD VVVNPC9jb21tYW5kPiBhbmQKKyAgIDxjb21tYW5kPlZBQ1VVTTwvY29tbWFuZD4sIDxjb21t YW5kPkFOQUxZWkU8L2NvbW1hbmQ+IGFuZAogICAgPGNvbW1hbmQ+Q0xVU1RFUjwvY29tbWFu ZD4uIFRoaXMgbWF5IGJlIGV4cGFuZGVkIGluIHRoZSBmdXR1cmUuCiAgIDwvcGFyYT4KIApA QCAtMzkyNyw2ICszOTM1LDEzMSBAQCBTRUxFQ1QgcGdfc3RhdF9nZXRfYmFja2VuZF9waWQo cy5iYWNrZW5kaWQpIEFTIHBpZCwKIAogIDwvc2VjdDI+CiAKKyA8c2VjdDIgaWQ9ImFuYWx5 emUtcHJvZ3Jlc3MtcmVwb3J0aW5nIj4KKyAgPHRpdGxlPkFOQUxZWkUgUHJvZ3Jlc3MgUmVw b3J0aW5nPC90aXRsZT4KKworICA8cGFyYT4KKyAgIFdoZW5ldmVyIDxjb21tYW5kPkFOQUxZ WkU8L2NvbW1hbmQ+IGlzIHJ1bm5pbmcsIHRoZQorICAgPHN0cnVjdG5hbWU+cGdfc3RhdF9w cm9ncmVzc19hbmFseXplPC9zdHJ1Y3RuYW1lPiB2aWV3IHdpbGwgY29udGFpbiBhCisgICBy b3cgZm9yIGVhY2ggYmFja2VuZCB0aGF0IGlzIGN1cnJlbnRseSBydW5uaW5nIHRoYXQgY29t bWFuZC4gIFRoZSB0YWJsZXMKKyAgIGJlbG93IGRlc2NyaWJlIHRoZSBpbmZvcm1hdGlvbiB0 aGF0IHdpbGwgYmUgcmVwb3J0ZWQgYW5kIHByb3ZpZGUKKyAgIGluZm9ybWF0aW9uIGFib3V0 IGhvdyB0byBpbnRlcnByZXQgaXQuCisgIDwvcGFyYT4KKworICA8dGFibGUgaWQ9InBnLXN0 YXQtcHJvZ3Jlc3MtYW5hbHl6ZS12aWV3IiB4cmVmbGFiZWw9InBnX3N0YXRfcHJvZ3Jlc3Nf YW5hbHl6ZSI+CisgICA8dGl0bGU+PHN0cnVjdG5hbWU+cGdfc3RhdF9wcm9ncmVzc19hbmFs eXplPC9zdHJ1Y3RuYW1lPiBWaWV3PC90aXRsZT4KKyAgIDx0Z3JvdXAgY29scz0iMyI+Cisg ICAgPHRoZWFkPgorICAgIDxyb3c+CisgICAgICA8ZW50cnk+Q29sdW1uPC9lbnRyeT4KKyAg ICAgIDxlbnRyeT5UeXBlPC9lbnRyeT4KKyAgICAgIDxlbnRyeT5EZXNjcmlwdGlvbjwvZW50 cnk+CisgICAgIDwvcm93PgorICAgIDwvdGhlYWQ+CisKKyAgIDx0Ym9keT4KKyAgICA8cm93 PgorICAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnBpZDwvc3RydWN0ZmllbGQ+PC9lbnRyeT4K KyAgICAgPGVudHJ5Pjx0eXBlPmludGVnZXI8L3R5cGU+PC9lbnRyeT4KKyAgICAgPGVudHJ5 PlByb2Nlc3MgSUQgb2YgYmFja2VuZC48L2VudHJ5PgorICAgIDwvcm93PgorICAgICA8cm93 PgorICAgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5kYXRpZDwvc3RydWN0ZmllbGQ+PC9lbnRy eT4KKyAgICAgIDxlbnRyeT48dHlwZT5vaWQ8L3R5cGU+PC9lbnRyeT4KKyAgICAgIDxlbnRy eT5PSUQgb2YgdGhlIGRhdGFiYXNlIHRvIHdoaWNoIHRoaXMgYmFja2VuZCBpcyBjb25uZWN0 ZWQuPC9lbnRyeT4KKyAgICAgPC9yb3c+CisgICAgIDxyb3c+CisgICAgICA8ZW50cnk+PHN0 cnVjdGZpZWxkPmRhdG5hbWU8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisgICAgICA8ZW50cnk+ PHR5cGU+bmFtZTwvdHlwZT48L2VudHJ5PgorICAgICAgPGVudHJ5Pk5hbWUgb2YgdGhlIGRh dGFiYXNlIHRvIHdoaWNoIHRoaXMgYmFja2VuZCBpcyBjb25uZWN0ZWQuPC9lbnRyeT4KKyAg ICAgPC9yb3c+CisgICAgIDxyb3c+CisgICAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnJlbGlk PC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorICAgICAgPGVudHJ5Pjx0eXBlPm9pZDwvdHlwZT48 L2VudHJ5PgorICAgICAgPGVudHJ5Pk9JRCBvZiB0aGUgdGFibGUgYmVpbmcgYW5hbHl6ZWQu PC9lbnRyeT4KKyAgICAgPC9yb3c+CisgICAgIDxyb3c+CisgICAgICA8ZW50cnk+PHN0cnVj dGZpZWxkPmluY2x1ZGVfY2hpbGRyZW48L3N0cnVjdGZpZWxkPjwvZW50cnk+CisgICAgICA8 ZW50cnk+PHR5cGU+Ym9vbGVhbjwvdHlwZT48L2VudHJ5PgorICAgICAgPGVudHJ5PldoZXRo ZXIgc2Nhbm5pbmcgdGhyb3VnaCBjaGlsZCB0YWJsZXMuPC9lbnRyeT4KKyAgICAgPC9yb3c+ CisgICAgIDxyb3c+CisgICAgICA8ZW50cnk+PHN0cnVjdGZpZWxkPnNjYW5uaW5nX3RhYmxl PC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorICAgICAgPGVudHJ5Pjx0eXBlPm9pZDwvdHlwZT48 L2VudHJ5PgorICAgICAgPGVudHJ5Pk9JRCBvZiB0aGUgdGFibGUgY3VycmVudGx5IGJlaW5n IHNjYW5uZWQuCisgICAgICAgIEl0IG1pZ2h0IGJlIGRpZmZlcmVudCBmcm9tIHJlbGlkIHdo ZW4gYW5hbHl6aW5nIHRhYmxlcyB0aGF0IGhhdmUgY2hpbGQgdGFibGVzLgorICAgICAgPC9l bnRyeT4KKyAgICAgPC9yb3c+CisgICAgIDxyb3c+CisgICAgICA8ZW50cnk+PHN0cnVjdGZp ZWxkPnBoYXNlPC9zdHJ1Y3RmaWVsZD48L2VudHJ5PgorICAgICAgPGVudHJ5Pjx0eXBlPnRl eHQ8L3R5cGU+PC9lbnRyeT4KKyAgICAgIDxlbnRyeT5DdXJyZW50IHByb2Nlc3NpbmcgcGhh c2UuIFNlZSA8eHJlZiBsaW5rZW5kPSJhbmFseXplLXBoYXNlcyIgLz48L2VudHJ5PgorICAg ICA8L3Jvdz4KKyAgICAgPHJvdz4KKyAgICAgPGVudHJ5PjxzdHJ1Y3RmaWVsZD5oZWFwX2Js a3NfdG90YWw8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisgICAgIDxlbnRyeT48dHlwZT5iaWdp bnQ8L3R5cGU+PC9lbnRyeT4KKyAgICAgPGVudHJ5PgorICAgICAgIFRvdGFsIG51bWJlciBv ZiBoZWFwIGJsb2NrcyBpbiB0aGUgc2Nhbm5pbmdfdGFibGUuCisgICAgIDwvZW50cnk+Cisg ICAgIDwvcm93PgorICAgIDxyb3c+CisgICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+aGVhcF9i bGtzX3NjYW5uZWQ8L3N0cnVjdGZpZWxkPjwvZW50cnk+CisgICAgIDxlbnRyeT48dHlwZT5i aWdpbnQ8L3R5cGU+PC9lbnRyeT4KKyAgICAgPGVudHJ5PgorICAgICAgIE51bWJlciBvZiBo ZWFwIGJsb2NrcyBzY2FubmVkLgorICAgICA8L2VudHJ5PgorICAgIDwvcm93PgorICAgPC90 Ym9keT4KKyAgIDwvdGdyb3VwPgorICA8L3RhYmxlPgorCisgIDx0YWJsZSBpZD0iYW5hbHl6 ZS1waGFzZXMiPgorICAgPHRpdGxlPkFOQUxZWkUgcGhhc2VzPC90aXRsZT4KKyAgIDx0Z3Jv dXAgY29scz0iMiI+CisgICAgPHRoZWFkPgorICAgIDxyb3c+CisgICAgICA8ZW50cnk+UGhh c2U8L2VudHJ5PgorICAgICAgPGVudHJ5PkRlc2NyaXB0aW9uPC9lbnRyeT4KKyAgICAgPC9y b3c+CisgICAgPC90aGVhZD4KKyAgIDx0Ym9keT4KKyAgICA8cm93PgorICAgICA8ZW50cnk+ PGxpdGVyYWw+aW5pdGlhbGl6aW5nPC9saXRlcmFsPjwvZW50cnk+CisgICAgIDxlbnRyeT4K KyAgICAgICBUaGUgY29tbWFuZCBpcyBwcmVwYXJpbmcgdG8gYmVnaW4gc2Nhbm5pbmcgdGhl IGhlYXAuICBUaGlzIHBoYXNlIGlzCisgICAgICAgZXhwZWN0ZWQgdG8gYmUgdmVyeSBicmll Zi4KKyAgICAgPC9lbnRyeT4KKyAgICA8L3Jvdz4KKyAgICA8cm93PgorICAgICA8ZW50cnk+ PGxpdGVyYWw+c2Nhbm5pbmcgdGFibGU8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgPGVudHJ5 PgorICAgICAgIFRoZSBjb21tYW5kIGlzIGN1cnJlbnRseSBzY2FubmluZyB0aGUgPHN0cnVj dGZpZWxkPnNjYW5uaW5nX3RhYmxlPC9zdHJ1Y3RmaWVsZD4KKyAgICAgICB0byBvYnRhaW4g c2FtcGxlcy4KKyAgICAgPC9lbnRyeT4KKyAgICA8L3Jvdz4KKyAgICA8cm93PgorICAgICA8 ZW50cnk+PGxpdGVyYWw+Y29tcHV0aW5nIHN0YXRzPC9saXRlcmFsPjwvZW50cnk+CisgICAg IDxlbnRyeT4KKyAgICAgICBUaGUgY29tbWFuZCBpcyBjb21wdXRpbmcgc3RhdHMgZnJvbSB0 aGUgc2FtcGxlcyBvYnRhaW5lZCBpbiB0aGUgcHJldmlvdXMgcGhhc2UuCisgICAgIDwvZW50 cnk+CisgICAgPC9yb3c+CisgICAgPHJvdz4KKyAgICAgPGVudHJ5PjxsaXRlcmFsPmNvbXB1 dGluZyBleHRlbmRlZCBzdGF0czwvbGl0ZXJhbD48L2VudHJ5PgorICAgICA8ZW50cnk+Cisg ICAgICAgVGhlIGNvbW1hbmQgaXMgY29tcHV0aW5nIGV4dGVuZGVkIHN0YXRzIGZyb20gdGhl IHNhbXBsZXMgb2J0YWluZWQgaW4gdGhlIHByZXZpb3VzIHBoYXNlLgorICAgICA8L2VudHJ5 PgorICAgIDwvcm93PgorICAgICA8ZW50cnk+PGxpdGVyYWw+ZmluYWxpemluZyBhbmFseXpl PC9saXRlcmFsPjwvZW50cnk+CisgICAgIDxlbnRyeT4KKyAgICAgICBUaGUgY29tbWFuZCBp cyB1cGRhdGluZyBwZ19jbGFzcy4gV2hlbiB0aGlzIHBoYXNlIGlzIGNvbXBsZXRlZCwgCisg ICAgICAgPGNvbW1hbmQ+QU5BTFlaRTwvY29tbWFuZD4gd2lsbCBlbmQuCisgICAgIDwvZW50 cnk+CisgICAgPC9yb3c+CisgICA8L3Rib2R5PgorICAgPC90Z3JvdXA+CisgIDwvdGFibGU+ CisgPC9zZWN0Mj4KKwogIDxzZWN0MiBpZD0iY2x1c3Rlci1wcm9ncmVzcy1yZXBvcnRpbmci PgogICA8dGl0bGU+Q0xVU1RFUiBQcm9ncmVzcyBSZXBvcnRpbmc8L3RpdGxlPgogCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL3N5c3RlbV92aWV3cy5zcWwgYi9zcmMvYmFj a2VuZC9jYXRhbG9nL3N5c3RlbV92aWV3cy5zcWwKaW5kZXggZWE0Yzg1ZS4uY2UzNDE2ZSAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmlld3Muc3FsCisrKyBi L3NyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX3ZpZXdzLnNxbApAQCAtOTY0LDYgKzk2NCwy MiBAQCBDUkVBVEUgVklFVyBwZ19zdGF0X3Byb2dyZXNzX3ZhY3V1bSBBUwogICAgIEZST00g cGdfc3RhdF9nZXRfcHJvZ3Jlc3NfaW5mbygnVkFDVVVNJykgQVMgUwogICAgICAgICBMRUZU IEpPSU4gcGdfZGF0YWJhc2UgRCBPTiBTLmRhdGlkID0gRC5vaWQ7CiAKK0NSRUFURSBWSUVX IHBnX3N0YXRfcHJvZ3Jlc3NfYW5hbHl6ZSBBUworICAgIFNFTEVDVAorICAgICAgICBTLnBp ZCBBUyBwaWQsIFMuZGF0aWQgQVMgZGF0aWQsIEQuZGF0bmFtZSBBUyBkYXRuYW1lLAorICAg ICAgICBDQVNUKFMucmVsaWQgQVMgb2lkKSBBUyByZWxpZCwKKyAgICAgICAgQ0FTVChDQVNU KFMucGFyYW0yIEFTIGludCkgQVMgYm9vbGVhbikgQVMgaW5jbHVkZV9jaGlsZHJlbiwKKyAg ICAgICAgQ0FTVChTLnBhcmFtMyBBUyBvaWQpIEFTIHNjYW5uaW5nX3RhYmxlLAorICAgICAg ICBDQVNFIFMucGFyYW0xIFdIRU4gMCBUSEVOICdpbml0aWFsaXppbmcnCisgICAgICAgICAg ICAgICAgICAgICAgV0hFTiAxIFRIRU4gJ3NjYW5uaW5nIHRhYmxlJworICAgICAgICAgICAg ICAgICAgICAgIFdIRU4gMiBUSEVOICdjb21wdXRpbmcgc3RhdHMnCisgICAgICAgICAgICAg ICAgICAgICAgV0hFTiAzIFRIRU4gJ2NvbXB1dGluZyBleHRlbmRlZCBzdGF0cycKKyAgICAg ICAgICAgICAgICAgICAgICBXSEVOIDQgVEhFTiAnZmluYWxpemluZyBhbmFseXplJworICAg ICAgICAgICAgICAgICAgICAgIEVORCBBUyBwaGFzZSwKKyAgICAgICAgUy5wYXJhbTQgQVMg aGVhcF9ibGtzX3RvdGFsLCBTLnBhcmFtNSBBUyBoZWFwX2Jsa3Nfc2Nhbm5lZAorICAgIEZS T00gcGdfc3RhdF9nZXRfcHJvZ3Jlc3NfaW5mbygnQU5BTFlaRScpIEFTIFMKKyAgICAgICAg TEVGVCBKT0lOIHBnX2RhdGFiYXNlIEQgT04gUy5kYXRpZCA9IEQub2lkOworCiBDUkVBVEUg VklFVyBwZ19zdGF0X3Byb2dyZXNzX2NsdXN0ZXIgQVMKICAgICBTRUxFQ1QKICAgICAgICAg Uy5waWQgQVMgcGlkLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvYW5hbHl6 ZS5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvYW5hbHl6ZS5jCmluZGV4IDhkNjMzZjIuLjU4 ZDgwMjYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2FuYWx5emUuYworKysg Yi9zcmMvYmFja2VuZC9jb21tYW5kcy9hbmFseXplLmMKQEAgLTM1LDYgKzM1LDcgQEAKICNp bmNsdWRlICJjYXRhbG9nL3BnX25hbWVzcGFjZS5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdf c3RhdGlzdGljX2V4dC5oIgogI2luY2x1ZGUgImNvbW1hbmRzL2RiY29tbWFuZHMuaCIKKyNp bmNsdWRlICJjb21tYW5kcy9wcm9ncmVzcy5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3RhYmxl Y21kcy5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3ZhY3V1bS5oIgogI2luY2x1ZGUgImV4ZWN1 dG9yL2V4ZWN1dG9yLmgiCkBAIC0yNTEsNiArMjUyLDggQEAgYW5hbHl6ZV9yZWwoT2lkIHJl bGlkLCBSYW5nZVZhciAqcmVsYXRpb24sCiAJTFdMb2NrQWNxdWlyZShQcm9jQXJyYXlMb2Nr LCBMV19FWENMVVNJVkUpOwogCU15UGdYYWN0LT52YWN1dW1GbGFncyB8PSBQUk9DX0lOX0FO QUxZWkU7CiAJTFdMb2NrUmVsZWFzZShQcm9jQXJyYXlMb2NrKTsKKwlwZ3N0YXRfcHJvZ3Jl c3Nfc3RhcnRfY29tbWFuZChQUk9HUkVTU19DT01NQU5EX0FOQUxZWkUsCisJCQkJCQkJCSAg UmVsYXRpb25HZXRSZWxpZChvbmVyZWwpKTsKIAogCS8qCiAJICogRG8gdGhlIG5vcm1hbCBu b24tcmVjdXJzaXZlIEFOQUxZWkUuICBXZSBjYW4gc2tpcCB0aGlzIGZvciBwYXJ0aXRpb25l ZApAQCAtMjc1LDYgKzI3OCw4IEBAIGFuYWx5emVfcmVsKE9pZCByZWxpZCwgUmFuZ2VWYXIg KnJlbGF0aW9uLAogCSAqLwogCXJlbGF0aW9uX2Nsb3NlKG9uZXJlbCwgTm9Mb2NrKTsKIAor CXBnc3RhdF9wcm9ncmVzc19lbmRfY29tbWFuZCgpOworCiAJLyoKIAkgKiBSZXNldCBteSBQ R1hBQ1QgZmxhZy4gIE5vdGU6IHdlIG5lZWQgdGhpcyBoZXJlLCBhbmQgbm90IGluIHZhY3V1 bV9yZWwsCiAJICogYmVjYXVzZSB0aGUgdmFjdXVtIGZsYWcgaXMgY2xlYXJlZCBieSB0aGUg ZW5kLW9mLXhhY3QgY29kZS4KQEAgLTQ5NCw2ICs0OTksMTggQEAgZG9fYW5hbHl6ZV9yZWwo UmVsYXRpb24gb25lcmVsLCBWYWN1dW1QYXJhbXMgKnBhcmFtcywKIAkvKgogCSAqIEFjcXVp cmUgdGhlIHNhbXBsZSByb3dzCiAJICovCisJeworCQljb25zdCBpbnQgICBpbmRleFtdID0g eworCQkJUFJPR1JFU1NfQU5BTFlaRV9QSEFTRSwKKwkJCVBST0dSRVNTX0FOQUxZWkVfSU5I CisJCX07CisJCWNvbnN0IGludDY0IHZhbFtdID0geworCQkJUFJPR1JFU1NfQU5BTFlaRV9Q SEFTRV9TQ0FOX1RBQkxFLAorCQkJaW5oCisJCX07CisKKwkJcGdzdGF0X3Byb2dyZXNzX3Vw ZGF0ZV9tdWx0aV9wYXJhbSgyLCBpbmRleCwgdmFsKTsKKwl9CiAJcm93cyA9IChIZWFwVHVw bGUgKikgcGFsbG9jKHRhcmdyb3dzICogc2l6ZW9mKEhlYXBUdXBsZSkpOwogCWlmIChpbmgp CiAJCW51bXJvd3MgPSBhY3F1aXJlX2luaGVyaXRlZF9zYW1wbGVfcm93cyhvbmVyZWwsIGVs ZXZlbCwKQEAgLTUxMyw3ICs1MzAsMTAgQEAgZG9fYW5hbHl6ZV9yZWwoUmVsYXRpb24gb25l cmVsLCBWYWN1dW1QYXJhbXMgKnBhcmFtcywKIAlpZiAobnVtcm93cyA+IDApCiAJewogCQlN ZW1vcnlDb250ZXh0IGNvbF9jb250ZXh0LAotCQkJCQlvbGRfY29udGV4dDsKKwkJCQkJICBv bGRfY29udGV4dDsKKworCQlwZ3N0YXRfcHJvZ3Jlc3NfdXBkYXRlX3BhcmFtKFBST0dSRVNT X0FOQUxZWkVfUEhBU0UsCisJCQkJCQkJCQkgUFJPR1JFU1NfQU5BTFlaRV9QSEFTRV9DT01Q VVRJTkcpOwogCiAJCWNvbF9jb250ZXh0ID0gQWxsb2NTZXRDb250ZXh0Q3JlYXRlKGFubF9j b250ZXh0LAogCQkJCQkJCQkJCQkiQW5hbHl6ZSBDb2x1bW4iLApAQCAtNTc1LDEwICs1OTUs MTUgQEAgZG9fYW5hbHl6ZV9yZWwoUmVsYXRpb24gb25lcmVsLCBWYWN1dW1QYXJhbXMgKnBh cmFtcywKIAkJfQogCiAJCS8qIEJ1aWxkIGV4dGVuZGVkIHN0YXRpc3RpY3MgKGlmIHRoZXJl IGFyZSBhbnkpLiAqLworCQlwZ3N0YXRfcHJvZ3Jlc3NfdXBkYXRlX3BhcmFtKFBST0dSRVNT X0FOQUxZWkVfUEhBU0UsCisJCQkJCQkJCQkgUFJPR1JFU1NfQU5BTFlaRV9QSEFTRV9DT01Q VVRJTkdfRVhURU5ERUQpOwogCQlCdWlsZFJlbGF0aW9uRXh0U3RhdGlzdGljcyhvbmVyZWws IHRvdGFscm93cywgbnVtcm93cywgcm93cywgYXR0cl9jbnQsCiAJCQkJCQkJCSAgIHZhY2F0 dHJzdGF0cyk7CiAJfQogCisJcGdzdGF0X3Byb2dyZXNzX3VwZGF0ZV9wYXJhbShQUk9HUkVT U19BTkFMWVpFX1BIQVNFLAorCQkJCQkJCQkgUFJPR1JFU1NfQU5BTFlaRV9QSEFTRV9GSU5B TElaRSk7CisKIAkvKgogCSAqIFVwZGF0ZSBwYWdlcy90dXBsZXMgc3RhdHMgaW4gcGdfY2xh c3MgLi4uIGJ1dCBub3QgaWYgd2UncmUgZG9pbmcKIAkgKiBpbmhlcml0ZWQgc3RhdHMuCkBA IC0xMDE3LDYgKzEwNDIsOCBAQCBhY3F1aXJlX3NhbXBsZV9yb3dzKFJlbGF0aW9uIG9uZXJl bCwgaW50IGVsZXZlbCwKIAlSZXNlcnZvaXJTdGF0ZURhdGEgcnN0YXRlOwogCVR1cGxlVGFi bGVTbG90ICpzbG90OwogCVRhYmxlU2NhbkRlc2Mgc2NhbjsKKwlCbG9ja051bWJlcgluYmxv Y2tzOworCUJsb2NrTnVtYmVyCWJsa3Nkb25lID0gMDsKIAogCUFzc2VydCh0YXJncm93cyA+ IDApOwogCkBAIC0xMDI2LDcgKzEwNTMsMjAgQEAgYWNxdWlyZV9zYW1wbGVfcm93cyhSZWxh dGlvbiBvbmVyZWwsIGludCBlbGV2ZWwsCiAJT2xkZXN0WG1pbiA9IEdldE9sZGVzdFhtaW4o b25lcmVsLCBQUk9DQVJSQVlfRkxBR1NfVkFDVVVNKTsKIAogCS8qIFByZXBhcmUgZm9yIHNh bXBsaW5nIGJsb2NrIG51bWJlcnMgKi8KLQlCbG9ja1NhbXBsZXJfSW5pdCgmYnMsIHRvdGFs YmxvY2tzLCB0YXJncm93cywgcmFuZG9tKCkpOworCW5ibG9ja3MgPSBCbG9ja1NhbXBsZXJf SW5pdCgmYnMsIHRvdGFsYmxvY2tzLCB0YXJncm93cywgcmFuZG9tKCkpOworCXsKKwkJY29u c3QgaW50ICAgaW5kZXhbXSA9IHsKKwkJCVBST0dSRVNTX0FOQUxZWkVfVE9UQUxfQkxPQ0tT LAorCQkJUFJPR1JFU1NfQU5BTFlaRV9TQ0FOUkVMCisJCX07CisJCWNvbnN0IGludDY0IHZh bFtdID0geworCQkJbmJsb2NrcywKKwkJCVJlbGF0aW9uR2V0UmVsaWQob25lcmVsKQorCQl9 OworCisJCXBnc3RhdF9wcm9ncmVzc191cGRhdGVfbXVsdGlfcGFyYW0oMiwgaW5kZXgsIHZh bCk7CisJfQorCiAJLyogUHJlcGFyZSBmb3Igc2FtcGxpbmcgcm93cyAqLwogCXJlc2Vydm9p cl9pbml0X3NlbGVjdGlvbl9zdGF0ZSgmcnN0YXRlLCB0YXJncm93cyk7CiAKQEAgLTEwODcs NiArMTEyNyw5IEBAIGFjcXVpcmVfc2FtcGxlX3Jvd3MoUmVsYXRpb24gb25lcmVsLCBpbnQg ZWxldmVsLAogCiAJCQlzYW1wbGVyb3dzICs9IDE7CiAJCX0KKworCQlwZ3N0YXRfcHJvZ3Jl c3NfdXBkYXRlX3BhcmFtKFBST0dSRVNTX0FOQUxZWkVfQkxPQ0tTX0RPTkUsCisJCQkJCQkJ CQkgKytibGtzZG9uZSk7CiAJfQogCiAJRXhlY0Ryb3BTaW5nbGVUdXBsZVRhYmxlU2xvdChz bG90KTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ3N0YXRmdW5jcy5j IGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3Bnc3RhdGZ1bmNzLmMKaW5kZXggMDUyNDBiZi4u ZGIyY2M1YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3Bnc3RhdGZ1bmNz LmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3Bnc3RhdGZ1bmNzLmMKQEAgLTQ2OSw2 ICs0NjksOCBAQCBwZ19zdGF0X2dldF9wcm9ncmVzc19pbmZvKFBHX0ZVTkNUSU9OX0FSR1Mp CiAJLyogVHJhbnNsYXRlIGNvbW1hbmQgbmFtZSBpbnRvIGNvbW1hbmQgdHlwZSBjb2RlLiAq LwogCWlmIChwZ19zdHJjYXNlY21wKGNtZCwgIlZBQ1VVTSIpID09IDApCiAJCWNtZHR5cGUg PSBQUk9HUkVTU19DT01NQU5EX1ZBQ1VVTTsKKwllbHNlIGlmIChwZ19zdHJjYXNlY21wKGNt ZCwgIkFOQUxZWkUiKSA9PSAwKQorCQljbWR0eXBlID0gUFJPR1JFU1NfQ09NTUFORF9BTkFM WVpFOwogCWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAoY21kLCAiQ0xVU1RFUiIpID09IDApCiAJ CWNtZHR5cGUgPSBQUk9HUkVTU19DT01NQU5EX0NMVVNURVI7CiAJZWxzZSBpZiAocGdfc3Ry Y2FzZWNtcChjbWQsICJDUkVBVEUgSU5ERVgiKSA9PSAwKQpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvdXRpbHMvbWlzYy9zYW1wbGluZy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9z YW1wbGluZy5jCmluZGV4IGQyYTE1MzcuLmY3ZGFlY2UgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3V0aWxzL21pc2Mvc2FtcGxpbmcuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9taXNj L3NhbXBsaW5nLmMKQEAgLTMyLDggKzMyLDEwIEBACiAgKiBTaW5jZSB3ZSBrbm93IHRoZSB0 b3RhbCBudW1iZXIgb2YgYmxvY2tzIGluIGFkdmFuY2UsIHdlIGNhbiB1c2UgdGhlCiAgKiBz dHJhaWdodGZvcndhcmQgQWxnb3JpdGhtIFMgZnJvbSBLbnV0aCAzLjQuMiwgcmF0aGVyIHRo YW4gVml0dGVyJ3MKICAqIGFsZ29yaXRobS4KKyAqCisgKiBSZXR1cm5zIHRoZSBudW1iZXIg b2YgYmxvY2tzIHRoYXQgQmxvY2tTYW1wbGVyX05leHQgd2lsbCByZXR1cm4uCiAgKi8KLXZv aWQKK0Jsb2NrTnVtYmVyCiBCbG9ja1NhbXBsZXJfSW5pdChCbG9ja1NhbXBsZXIgYnMsIEJs b2NrTnVtYmVyIG5ibG9ja3MsIGludCBzYW1wbGVzaXplLAogCQkJCSAgbG9uZyByYW5kc2Vl ZCkKIHsKQEAgLTQ4LDYgKzUwLDggQEAgQmxvY2tTYW1wbGVyX0luaXQoQmxvY2tTYW1wbGVy IGJzLCBCbG9ja051bWJlciBuYmxvY2tzLCBpbnQgc2FtcGxlc2l6ZSwKIAlicy0+bSA9IDA7 CQkJCQkvKiBibG9ja3Mgc2VsZWN0ZWQgc28gZmFyICovCiAKIAlzYW1wbGVyX3JhbmRvbV9p bml0X3N0YXRlKHJhbmRzZWVkLCBicy0+cmFuZHN0YXRlKTsKKworCXJldHVybiBNaW4oYnMt Pm4sIGJzLT5OKTsKIH0KIAogYm9vbApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbWFu ZHMvcHJvZ3Jlc3MuaCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3Byb2dyZXNzLmgKaW5kZXgg YWNkMTMxMy4uMzAwYmI1OCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvcHJv Z3Jlc3MuaAorKysgYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9wcm9ncmVzcy5oCkBAIC0zNCw2 ICszNCwyMCBAQAogI2RlZmluZSBQUk9HUkVTU19WQUNVVU1fUEhBU0VfVFJVTkNBVEUJCQk1 CiAjZGVmaW5lIFBST0dSRVNTX1ZBQ1VVTV9QSEFTRV9GSU5BTF9DTEVBTlVQCQk2CiAKKy8q IFByb2dyZXNzIHBhcmFtZXRlcnMgZm9yIGFuYWx5emUgKi8KKyNkZWZpbmUgUFJPR1JFU1Nf QU5BTFlaRV9QSEFTRQkJCQkJMAorI2RlZmluZSBQUk9HUkVTU19BTkFMWVpFX0lOSAkJCQkJ MQorI2RlZmluZSBQUk9HUkVTU19BTkFMWVpFX1NDQU5SRUwJCQkJMgorI2RlZmluZSBQUk9H UkVTU19BTkFMWVpFX1RPVEFMX0JMT0NLUwkJCTMKKyNkZWZpbmUgUFJPR1JFU1NfQU5BTFla RV9CTE9DS1NfRE9ORQkJCTQKKworLyogUGhhc2VzIG9mIGFuYWx5emUgKGFzIGFkdmVydGlz ZWQgdmlhIFBST0dSRVNTX0FOQUxZWkVfUEhBU0UpICovCisjZGVmaW5lIFBST0dSRVNTX0FO QUxZWkVfUEhBU0VfU0NBTl9UQUJMRQkJMQorI2RlZmluZSBQUk9HUkVTU19BTkFMWVpFX1BI QVNFX0NPTVBVVElORwkJCTIKKyNkZWZpbmUgUFJPR1JFU1NfQU5BTFlaRV9QSEFTRV9DT01Q VVRJTkdfRVhURU5ERUQgMworI2RlZmluZSBQUk9HUkVTU19BTkFMWVpFX1BIQVNFX0ZJTkFM SVpFCQkJNAorCisKIC8qIFByb2dyZXNzIHBhcmFtZXRlcnMgZm9yIGNsdXN0ZXIgKi8KICNk ZWZpbmUgUFJPR1JFU1NfQ0xVU1RFUl9DT01NQU5ECQkJCTAKICNkZWZpbmUgUFJPR1JFU1Nf Q0xVU1RFUl9QSEFTRQkJCQkJMQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcGdzdGF0Lmgg Yi9zcmMvaW5jbHVkZS9wZ3N0YXQuaAppbmRleCAwYTNhZDNhLi45MzQ0NjU0IDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9wZ3N0YXQuaAorKysgYi9zcmMvaW5jbHVkZS9wZ3N0YXQuaApA QCAtOTU2LDYgKzk1Niw3IEBAIHR5cGVkZWYgZW51bSBQcm9ncmVzc0NvbW1hbmRUeXBlCiB7 CiAJUFJPR1JFU1NfQ09NTUFORF9JTlZBTElELAogCVBST0dSRVNTX0NPTU1BTkRfVkFDVVVN LAorCVBST0dSRVNTX0NPTU1BTkRfQU5BTFlaRSwKIAlQUk9HUkVTU19DT01NQU5EX0NMVVNU RVIsCiAJUFJPR1JFU1NfQ09NTUFORF9DUkVBVEVfSU5ERVgKIH0gUHJvZ3Jlc3NDb21tYW5k VHlwZTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL3NhbXBsaW5nLmggYi9zcmMv aW5jbHVkZS91dGlscy9zYW1wbGluZy5oCmluZGV4IDU0MWI1MDcuLjc2ZDMxZGMgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL3NhbXBsaW5nLmgKKysrIGIvc3JjL2luY2x1ZGUv dXRpbHMvc2FtcGxpbmcuaApAQCAtMzcsNyArMzcsNyBAQCB0eXBlZGVmIHN0cnVjdAogCiB0 eXBlZGVmIEJsb2NrU2FtcGxlckRhdGEgKkJsb2NrU2FtcGxlcjsKIAotZXh0ZXJuIHZvaWQg QmxvY2tTYW1wbGVyX0luaXQoQmxvY2tTYW1wbGVyIGJzLCBCbG9ja051bWJlciBuYmxvY2tz LAorZXh0ZXJuIEJsb2NrTnVtYmVyIEJsb2NrU2FtcGxlcl9Jbml0KEJsb2NrU2FtcGxlciBi cywgQmxvY2tOdW1iZXIgbmJsb2NrcywKIAkJCQkJCQkgIGludCBzYW1wbGVzaXplLCBsb25n IHJhbmRzZWVkKTsKIGV4dGVybiBib29sIEJsb2NrU2FtcGxlcl9IYXNNb3JlKEJsb2NrU2Ft cGxlciBicyk7CiBleHRlcm4gQmxvY2tOdW1iZXIgQmxvY2tTYW1wbGVyX05leHQoQmxvY2tT YW1wbGVyIGJzKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcnVs ZXMub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ydWxlcy5vdXQKaW5kZXggMjEw ZTljZC4uNjkxZjQ2YSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9y dWxlcy5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ydWxlcy5vdXQKQEAg LTE4NDYsNiArMTg0NiwyNCBAQCBwZ19zdGF0X2dzc2FwaXwgU0VMRUNUIHMucGlkLAogICAg IHMuZ3NzX3ByaW5jIEFTIHByaW5jaXBhbCwKICAgICBzLmdzc19lbmMgQVMgZW5jcnlwdGVk CiAgICBGUk9NIHBnX3N0YXRfZ2V0X2FjdGl2aXR5KE5VTEw6OmludGVnZXIpIHMoZGF0aWQs IHBpZCwgdXNlc3lzaWQsIGFwcGxpY2F0aW9uX25hbWUsIHN0YXRlLCBxdWVyeSwgd2FpdF9l dmVudF90eXBlLCB3YWl0X2V2ZW50LCB4YWN0X3N0YXJ0LCBxdWVyeV9zdGFydCwgYmFja2Vu ZF9zdGFydCwgc3RhdGVfY2hhbmdlLCBjbGllbnRfYWRkciwgY2xpZW50X2hvc3RuYW1lLCBj bGllbnRfcG9ydCwgYmFja2VuZF94aWQsIGJhY2tlbmRfeG1pbiwgYmFja2VuZF90eXBlLCBz c2wsIHNzbHZlcnNpb24sIHNzbGNpcGhlciwgc3NsYml0cywgc3NsY29tcHJlc3Npb24sIHNz bF9jbGllbnRfZG4sIHNzbF9jbGllbnRfc2VyaWFsLCBzc2xfaXNzdWVyX2RuLCBnc3NfYXV0 aCwgZ3NzX3ByaW5jLCBnc3NfZW5jKTsKK3BnX3N0YXRfcHJvZ3Jlc3NfYW5hbHl6ZXwgU0VM RUNUIHMucGlkLAorICAgIHMuZGF0aWQsCisgICAgZC5kYXRuYW1lLAorICAgIHMucmVsaWQs CisgICAgKChzLnBhcmFtMik6OmludGVnZXIpOjpib29sZWFuIEFTIGluY2x1ZGVfY2hpbGRy ZW4sCisgICAgKHMucGFyYW0zKTo6b2lkIEFTIHNjYW5uaW5nX3RhYmxlLAorICAgICAgICBD QVNFIHMucGFyYW0xCisgICAgICAgICAgICBXSEVOIDAgVEhFTiAnaW5pdGlhbGl6aW5nJzo6 dGV4dAorICAgICAgICAgICAgV0hFTiAxIFRIRU4gJ3NjYW5uaW5nIHRhYmxlJzo6dGV4dAor ICAgICAgICAgICAgV0hFTiAyIFRIRU4gJ2NvbXB1dGluZyBzdGF0cyc6OnRleHQKKyAgICAg ICAgICAgIFdIRU4gMyBUSEVOICdjb21wdXRpbmcgZXh0ZW5kZWQgc3RhdHMnOjp0ZXh0Cisg ICAgICAgICAgICBXSEVOIDQgVEhFTiAnZmluYWxpemluZyBhbmFseXplJzo6dGV4dAorICAg ICAgICAgICAgRUxTRSBOVUxMOjp0ZXh0CisgICAgICAgIEVORCBBUyBwaGFzZSwKKyAgICBz LnBhcmFtNCBBUyBoZWFwX2Jsa3NfdG90YWwsCisgICAgcy5wYXJhbTUgQVMgaGVhcF9ibGtz X3NjYW5uZWQKKyAgIEZST00gKHBnX3N0YXRfZ2V0X3Byb2dyZXNzX2luZm8oJ0FOQUxZWkUn Ojp0ZXh0KSBzKHBpZCwgZGF0aWQsIHJlbGlkLCBwYXJhbTEsIHBhcmFtMiwgcGFyYW0zLCBw YXJhbTQsIHBhcmFtNSwgcGFyYW02LCBwYXJhbTcsIHBhcmFtOCwgcGFyYW05LCBwYXJhbTEw LCBwYXJhbTExLCBwYXJhbTEyLCBwYXJhbTEzLCBwYXJhbTE0LCBwYXJhbTE1LCBwYXJhbTE2 LCBwYXJhbTE3LCBwYXJhbTE4LCBwYXJhbTE5LCBwYXJhbTIwKQorICAgICBMRUZUIEpPSU4g cGdfZGF0YWJhc2UgZCBPTiAoKHMuZGF0aWQgPSBkLm9pZCkpKTsKIHBnX3N0YXRfcHJvZ3Jl c3NfY2x1c3RlcnwgU0VMRUNUIHMucGlkLAogICAgIHMuZGF0aWQsCiAgICAgZC5kYXRuYW1l LAo= --------------E3F9D95CF8B440DC4EC1D2F8--