Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1qw7Ut-009kAl-8D for pgsql-hackers@arkaria.postgresql.org; Thu, 26 Oct 2023 21:02:31 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1qw7Ur-005OIy-LA for pgsql-hackers@arkaria.postgresql.org; Thu, 26 Oct 2023 21:02:29 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1qw7Uq-005OIp-Tc for pgsql-hackers@lists.postgresql.org; Thu, 26 Oct 2023 21:02:29 +0000 Received: from mail.thelabyrinth.net ([45.56.70.56]) by makus.postgresql.org with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1qw7Uk-002St7-VF for pgsql-hackers@postgresql.org; Thu, 26 Oct 2023 21:02:27 +0000 Received: from [10.5.0.2] (unknown [107.175.102.153]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: dsteele) by mail.thelabyrinth.net (Postfix) with ESMTPSA id 572175465D for ; Thu, 26 Oct 2023 21:02:21 +0000 (UTC) Content-Type: multipart/mixed; boundary="------------v0Fn03cu1M9LoiN4Dw3gt0fQ" Message-ID: <2daf8adc-8db7-4204-a7f2-a7e94e2bfa4b@pgmasters.net> Date: Thu, 26 Oct 2023 17:02:20 -0400 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Content-Language: en-US To: Pg Hackers From: David Steele Subject: Add recovery to pg_control and remove backup_label 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. --------------v0Fn03cu1M9LoiN4Dw3gt0fQ Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Hackers, This was originally proposed in [1] but that thread went through a number of different proposals so it seems better to start anew. The basic idea here is to simplify and harden recovery by getting rid of backup_label and storing recovery information directly in pg_control. Instead of backup software copying pg_control from PGDATA, it stores an updated version that is returned from pg_backup_stop(). I believe this is better for the following reasons: * The user can no longer remove backup_label and get what looks like a successful restore (while almost certainly causing corruption). If pg_control is removed the cluster will not start. The user may try pg_resetwal, but I think that tool makes it pretty clear that corruption will result from its use. We could also modify pg_resetwal to complain if recovery info is present in pg_control. * We don't need to worry about backup software seeing a torn copy of pg_control, since Postgres can safely read it out of memory and provide a valid copy via pg_backup_stop(). This solves [2] without needing to write pg_control via a temp file, which may affect performance on a standby. Unfortunately, this solution cannot be back patched. * For backup from standby, we no longer need to instruct the backup software to copy pg_control last. In fact the backup software should not copy pg_control from PGDATA at all. Since backup_label is now gone, the fields that used to be in backup_label are now provided as columns returned from pg_backup_start() and pg_backup_stop() and the backup history file is still written to the archive. For pg_basebackup we would have the option of writing the fields into the JSON manifest, storing them to a file (e.g. backup.info), or just ignoring them. None of the fields are required for recovery but backup software may be very interested in them. I updated pg_rewind but I'm not very confident in the tests. When I removed backup_label processing, but before I updated pg_rewind to write recovery info into pg_control, all the rewind tests passed. This patch highlights the fact that we still have no tests for the low-level backup method. I modified pgBackRest to work with this patch and the entire test suite ran without any issues, but in-core tests would be good to have. I'm planning to work on those myself as a separate patch. This patch would also make the proposal in [3] obsolete since there is no need to rename backup_label if it is gone. I know that outputting pg_control as bytea is going to be a bit controversial. Software that is using psql get run pg_backup_stop() could use encode() to get pg_control as text and then decode it later. Alternately, we could update ReadControlFile() to recognize a base64-encoded pg_control file. I'm not sure dealing with binary data is that much of a problem, though, and if the backup software gets it wrong then recovery with fail on an invalid pg_control file. Lastly, I think there are improvements to be made in recovery that go beyond this patch. I originally set out to load the recovery info into *just* the existing fields in pg_control but it required so many changes to recovery that I decided it was too dangerous to do all in one patch. This patch very much takes the "backup_label in pg_control" approach, though I reused fields where possible. The added fields, e.g. backupRecoveryRequested, also allow us to keep the user experience pretty much the same in terms of messages and errors. Thoughts? Regards, -David [1] https://postgresql.org/message-id/1330cb48-4e47-03ca-f2fb-b144b49514d8%40pgmasters.net [2] https://postgresql.org/message-id/20221123014224.xisi44byq3cf5psi%40awork3.anarazel.de [3] https://postgresql.org/message-id/eb3d1aae-1a75-bcd3-692a-38729423168f%40pgmasters.net --------------v0Fn03cu1M9LoiN4Dw3gt0fQ Content-Type: text/plain; charset=UTF-8; name="v01-recovery-in-pgcontrol-remove-backuplabel.patch" Content-Disposition: attachment; filename="v01-recovery-in-pgcontrol-remove-backuplabel.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9iYWNrdXAuc2dtbCBiL2RvYy9zcmMvc2dtbC9i YWNrdXAuc2dtbAppbmRleCA4Y2IyNGQ2YWU1NC4uNmJlOGZiOTAyYzUgMTAwNjQ0Ci0tLSBh L2RvYy9zcmMvc2dtbC9iYWNrdXAuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvYmFja3VwLnNn bWwKQEAgLTkzNSwxOSArOTM1LDIwIEBAIFNFTEVDVCAqIEZST00gcGdfYmFja3VwX3N0b3Ao d2FpdF9mb3JfYXJjaGl2ZSA9PiB0cnVlKTsKICAgICAgcmVhZHkgdG8gYXJjaGl2ZS4KICAg ICA8L3BhcmE+CiAgICAgPHBhcmE+Ci0gICAgIDxmdW5jdGlvbj5wZ19iYWNrdXBfc3RvcDwv ZnVuY3Rpb24+IHdpbGwgcmV0dXJuIG9uZSByb3cgd2l0aCB0aHJlZQotICAgICB2YWx1ZXMu IFRoZSBzZWNvbmQgb2YgdGhlc2UgZmllbGRzIHNob3VsZCBiZSB3cml0dGVuIHRvIGEgZmls ZSBuYW1lZAotICAgICA8ZmlsZW5hbWU+YmFja3VwX2xhYmVsPC9maWxlbmFtZT4gaW4gdGhl IHJvb3QgZGlyZWN0b3J5IG9mIHRoZSBiYWNrdXAuIFRoZQotICAgICB0aGlyZCBmaWVsZCBz aG91bGQgYmUgd3JpdHRlbiB0byBhIGZpbGUgbmFtZWQKLSAgICAgPGZpbGVuYW1lPnRhYmxl c3BhY2VfbWFwPC9maWxlbmFtZT4gdW5sZXNzIHRoZSBmaWVsZCBpcyBlbXB0eS4gVGhlc2Ug ZmlsZXMgYXJlCisgICAgIDxmdW5jdGlvbj5wZ19iYWNrdXBfc3RvcDwvZnVuY3Rpb24+IHJl dHVybnMgdGhlCisgICAgIDxmaWxlbmFtZT5wZ19jb250cm9sPC9maWxlbmFtZT4gZmlsZSwg d2hpY2ggbXVzdCBiZSBzdG9yZWQgaW4gdGhlCisgICAgIDxmaWxlbmFtZT5nbG9iYWw8L2Zp bGVuYW1lPiBkaXJlY3Rvcnkgb2YgdGhlIGJhY2t1cC4gSXQgYWxzbyByZXR1cm5zIHRoZQor ICAgICA8ZmlsZW5hbWU+dGFibGVzcGFjZV9tYXA8L2ZpbGVuYW1lPiBmaWxlLCB3aGljaCBz aG91bGQgYmUgd3JpdHRlbiBpbiB0aGUKKyAgICAgcm9vdCBkaXJlY3Rvcnkgb2YgdGhlIGJh Y2t1cCB1bmxlc3MgdGhlIGZpZWxkIGlzIGVtcHR5LiBUaGVzZSBmaWxlcyBhcmUKICAgICAg dml0YWwgdG8gdGhlIGJhY2t1cCB3b3JraW5nIGFuZCBtdXN0IGJlIHdyaXR0ZW4gYnl0ZSBm b3IgYnl0ZSB3aXRob3V0Ci0gICAgIG1vZGlmaWNhdGlvbiwgd2hpY2ggbWF5IHJlcXVpcmUg b3BlbmluZyB0aGUgZmlsZSBpbiBiaW5hcnkgbW9kZS4KKyAgICAgbW9kaWZpY2F0aW9uLCB3 aGljaCB3aWxsIHJlcXVpcmUgb3BlbmluZyB0aGUgZmlsZSBpbiBiaW5hcnkgbW9kZS4KICAg ICA8L3BhcmE+CiAgICA8L2xpc3RpdGVtPgogICAgPGxpc3RpdGVtPgogICAgIDxwYXJhPgog ICAgICBPbmNlIHRoZSBXQUwgc2VnbWVudCBmaWxlcyBhY3RpdmUgZHVyaW5nIHRoZSBiYWNr dXAgYXJlIGFyY2hpdmVkLCB5b3UgYXJlCi0gICAgIGRvbmUuICBUaGUgZmlsZSBpZGVudGlm aWVkIGJ5IDxmdW5jdGlvbj5wZ19iYWNrdXBfc3RvcDwvZnVuY3Rpb24+J3MgZmlyc3QgcmV0 dXJuCisgICAgIGRvbmUuICBUaGUgZmlsZSBpZGVudGlmaWVkIGJ5IDxmdW5jdGlvbj5wZ19i YWNrdXBfc3RvcDwvZnVuY3Rpb24+J3MKKyAgICAgPHBhcmFtZXRlcj5sc248L3BhcmFtZXRl cj4gcmV0dXJuCiAgICAgIHZhbHVlIGlzIHRoZSBsYXN0IHNlZ21lbnQgdGhhdCBpcyByZXF1 aXJlZCB0byBmb3JtIGEgY29tcGxldGUgc2V0IG9mCiAgICAgIGJhY2t1cCBmaWxlcy4gIE9u IGEgcHJpbWFyeSwgaWYgPHZhcm5hbWU+YXJjaGl2ZV9tb2RlPC92YXJuYW1lPiBpcyBlbmFi bGVkIGFuZCB0aGUKICAgICAgPGxpdGVyYWw+d2FpdF9mb3JfYXJjaGl2ZTwvbGl0ZXJhbD4g cGFyYW1ldGVyIGlzIDxsaXRlcmFsPnRydWU8L2xpdGVyYWw+LApAQCAtMTAxMyw3ICsxMDE0 LDE1IEBAIFNFTEVDVCAqIEZST00gcGdfYmFja3VwX3N0b3Aod2FpdF9mb3JfYXJjaGl2ZSA9 PiB0cnVlKTsKICAgIDwvcGFyYT4KCiAgICA8cGFyYT4KLSAgICBZb3Ugc2hvdWxkLCBob3dl dmVyLCBvbWl0IGZyb20gdGhlIGJhY2t1cCB0aGUgZmlsZXMgd2l0aGluIHRoZQorICAgIFlv dSBtdXN0IGV4Y2x1ZGUgPGZpbGVuYW1lPmdsb2JhbC9wZ19jb250cm9sPC9maWxlbmFtZT4g ZnJvbSB5b3VyIGJhY2t1cAorICAgIGFuZCBwdXQgdGhlIGNvbnRlbnRzIG9mIHRoZSA8cGFy YW1ldGVyPnBnX2NvbnRyb2xfZmlsZTwvcGFyYW1ldGVyPiBjb2x1bW4KKyAgICByZXR1cm5l ZCBmcm9tIDxmdW5jdGlvbj5wZ19iYWNrdXBfc3RvcDwvZnVuY3Rpb24+IGluIHlvdXIgYmFj a3VwIGF0CisgICAgPGZpbGVuYW1lPmdsb2JhbC9wZ19jb250cm9sPC9maWxlbmFtZT4uIFRo aXMgZmlsZSBjb250YWlucyB0aGUgaW5mb3JtYXRpb24KKyAgICByZXF1aXJlZCB0byBzYWZl bHkgcmVjb3Zlci4KKyAgIDwvcGFyYT4KKworICAgPHBhcmE+CisgICAgWW91IHNob3VsZCBh bHNvIG9taXQgZnJvbSB0aGUgYmFja3VwIHRoZSBmaWxlcyB3aXRoaW4gdGhlCiAgICAgY2x1 c3RlcidzIDxmaWxlbmFtZT5wZ193YWwvPC9maWxlbmFtZT4gc3ViZGlyZWN0b3J5LiAgVGhp cwogICAgIHNsaWdodCBhZGp1c3RtZW50IGlzIHdvcnRod2hpbGUgYmVjYXVzZSBpdCByZWR1 Y2VzIHRoZSByaXNrCiAgICAgb2YgbWlzdGFrZXMgd2hlbiByZXN0b3JpbmcuICBUaGlzIGlz IGVhc3kgdG8gYXJyYW5nZSBpZgpAQCAtMTA2MiwxMiArMTA3MSw3IEBAIFNFTEVDVCAqIEZS T00gcGdfYmFja3VwX3N0b3Aod2FpdF9mb3JfYXJjaGl2ZSA9PiB0cnVlKTsKICAgIDwvcGFy YT4KCiAgICA8cGFyYT4KLSAgICBUaGUgYmFja3VwIGxhYmVsCi0gICAgZmlsZSBpbmNsdWRl cyB0aGUgbGFiZWwgc3RyaW5nIHlvdSBnYXZlIHRvIDxmdW5jdGlvbj5wZ19iYWNrdXBfc3Rh cnQ8L2Z1bmN0aW9uPiwKLSAgICBhcyB3ZWxsIGFzIHRoZSB0aW1lIGF0IHdoaWNoIDxmdW5j dGlvbj5wZ19iYWNrdXBfc3RhcnQ8L2Z1bmN0aW9uPiB3YXMgcnVuLCBhbmQKLSAgICB0aGUg bmFtZSBvZiB0aGUgc3RhcnRpbmcgV0FMIGZpbGUuICBJbiBjYXNlIG9mIGNvbmZ1c2lvbiBp dCBpcyB0aGVyZWZvcmUKLSAgICBwb3NzaWJsZSB0byBsb29rIGluc2lkZSBhIGJhY2t1cCBm aWxlIGFuZCBkZXRlcm1pbmUgZXhhY3RseSB3aGljaAotICAgIGJhY2t1cCBzZXNzaW9uIHRo ZSBkdW1wIGZpbGUgY2FtZSBmcm9tLiAgVGhlIHRhYmxlc3BhY2UgbWFwIGZpbGUgaW5jbHVk ZXMKKyAgICBUaGUgdGFibGVzcGFjZSBtYXAgZmlsZSBpbmNsdWRlcwogICAgIHRoZSBzeW1i b2xpYyBsaW5rIG5hbWVzIGFzIHRoZXkgZXhpc3QgaW4gdGhlIGRpcmVjdG9yeQogICAgIDxm aWxlbmFtZT5wZ190YmxzcGMvPC9maWxlbmFtZT4gYW5kIHRoZSBmdWxsIHBhdGggb2YgZWFj aCBzeW1ib2xpYyBsaW5rLgogICAgIFRoZXNlIGZpbGVzIGFyZSBub3QgbWVyZWx5IGZvciB5 b3VyIGluZm9ybWF0aW9uOyB0aGVpciBwcmVzZW5jZSBhbmQKZGlmZiAtLWdpdCBhL2RvYy9z cmMvc2dtbC9mdW5jLnNnbWwgYi9kb2Mvc3JjL3NnbWwvZnVuYy5zZ21sCmluZGV4IDdjM2U5 NDBhZmVmLi4wMWEyZGYxZWRjYyAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2Z1bmMuc2dt bAorKysgYi9kb2Mvc3JjL3NnbWwvZnVuYy5zZ21sCkBAIC0yNjczNSw3ICsyNjczNSwxMCBA QCBMT0c6ICBHcmFuZCB0b3RhbDogMTY1MTkyMCBieXRlcyBpbiAyMDEgYmxvY2tzOyA2MjIz NjAgZnJlZSAoODggY2h1bmtzKTsgMTAyOTU2MAogICAgICAgICAgIDxwYXJhbWV0ZXI+bGFi ZWw8L3BhcmFtZXRlcj4gPHR5cGU+dGV4dDwvdHlwZT4KICAgICAgICAgICA8b3B0aW9uYWw+ LCA8cGFyYW1ldGVyPmZhc3Q8L3BhcmFtZXRlcj4gPHR5cGU+Ym9vbGVhbjwvdHlwZT4KICAg ICAgICAgICA8L29wdGlvbmFsPiApCi0gICAgICAgIDxyZXR1cm52YWx1ZT5wZ19sc248L3Jl dHVybnZhbHVlPgorICAgICAgICA8cmV0dXJudmFsdWU+cmVjb3JkPC9yZXR1cm52YWx1ZT4K KyAgICAgICAgKCA8cGFyYW1ldGVyPmxzbjwvcGFyYW1ldGVyPiA8dHlwZT5wZ19sc248L3R5 cGU+LAorICAgICAgICA8cGFyYW1ldGVyPnRpbWVsaW5lX2lkPC9wYXJhbWV0ZXI+IDx0eXBl PmludDg8L3R5cGU+LAorICAgICAgICA8cGFyYW1ldGVyPnN0YXJ0PC9wYXJhbWV0ZXI+IDx0 eXBlPnRpbWVzdGFtcHR6PC90eXBlPiApCiAgICAgICAgPC9wYXJhPgogICAgICAgIDxwYXJh PgogICAgICAgICBQcmVwYXJlcyB0aGUgc2VydmVyIHRvIGJlZ2luIGFuIG9uLWxpbmUgYmFj a3VwLiAgVGhlIG9ubHkgcmVxdWlyZWQKQEAgLTI2NzQ3LDYgKzI2NzUwLDEzIEBAIExPRzog IEdyYW5kIHRvdGFsOiAxNjUxOTIwIGJ5dGVzIGluIDIwMSBibG9ja3M7IDYyMjM2MCBmcmVl ICg4OCBjaHVua3MpOyAxMDI5NTYwCiAgICAgICAgIGFzIHBvc3NpYmxlLiAgVGhpcyBmb3Jj ZXMgYW4gaW1tZWRpYXRlIGNoZWNrcG9pbnQgd2hpY2ggd2lsbCBjYXVzZSBhCiAgICAgICAg IHNwaWtlIGluIEkvTyBvcGVyYXRpb25zLCBzbG93aW5nIGFueSBjb25jdXJyZW50bHkgZXhl Y3V0aW5nIHF1ZXJpZXMuCiAgICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAg ICBUaGUgcmVzdWx0IGNvbHVtbnMgY29udGFpbiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3Rh cnQgb2YgdGhlIGJhY2t1cAorICAgICAgICBhbmQgY2FuIGJlIGlnbm9yZWQ6IHRoZSA8cGFy YW1ldGVyPmxzbjwvcGFyYW1ldGVyPiBjb2x1bW4gaG9sZHMgdGhlCisgICAgICAgIHN0YXJ0 aW5nIHdyaXRlLWFoZWFkIGxvZyBsb2NhdGlvbiwgdGhlCisgICAgICAgIDxwYXJhbWV0ZXI+ dGltZWxpbmVfaWQ8L3BhcmFtZXRlcj4gY29sdW1uIGhvbGRzIHRoZSBzdGFydGluZyB0aW1l bGluZSwKKyAgICAgICAgYW5kIHRoZSA8cGFyYW1ldGVyPnN0b3A8L3BhcmFtZXRlcj4gY29s dW1uIGhvbGRzIHRoZSBzdGFydGluZyB0aW1lc3RhbXAuCisgICAgICAgPC9wYXJhPgogICAg ICAgIDxwYXJhPgogICAgICAgICBUaGlzIGZ1bmN0aW9uIGlzIHJlc3RyaWN0ZWQgdG8gc3Vw ZXJ1c2VycyBieSBkZWZhdWx0LCBidXQgb3RoZXIgdXNlcnMKICAgICAgICAgY2FuIGJlIGdy YW50ZWQgRVhFQ1VURSB0byBydW4gdGhlIGZ1bmN0aW9uLgpAQCAtMjY3NjIsMTMgKzI2Nzcy LDE1IEBAIExPRzogIEdyYW5kIHRvdGFsOiAxNjUxOTIwIGJ5dGVzIGluIDIwMSBibG9ja3M7 IDYyMjM2MCBmcmVlICg4OCBjaHVua3MpOyAxMDI5NTYwCiAgICAgICAgICAgPG9wdGlvbmFs PjxwYXJhbWV0ZXI+d2FpdF9mb3JfYXJjaGl2ZTwvcGFyYW1ldGVyPiA8dHlwZT5ib29sZWFu PC90eXBlPgogICAgICAgICAgIDwvb3B0aW9uYWw+ICkKICAgICAgICAgPHJldHVybnZhbHVl PnJlY29yZDwvcmV0dXJudmFsdWU+Ci0gICAgICAgICggPHBhcmFtZXRlcj5sc248L3BhcmFt ZXRlcj4gPHR5cGU+cGdfbHNuPC90eXBlPiwKLSAgICAgICAgPHBhcmFtZXRlcj5sYWJlbGZp bGU8L3BhcmFtZXRlcj4gPHR5cGU+dGV4dDwvdHlwZT4sCi0gICAgICAgIDxwYXJhbWV0ZXI+ c3BjbWFwZmlsZTwvcGFyYW1ldGVyPiA8dHlwZT50ZXh0PC90eXBlPiApCisgICAgICAgICgg PHBhcmFtZXRlcj5wZ19jb250cm9sX2ZpbGU8L3BhcmFtZXRlcj4gPHR5cGU+dGV4dDwvdHlw ZT4sCisgICAgICAgIDxwYXJhbWV0ZXI+dGFibGVzcGFjZV9tYXBfZmlsZTwvcGFyYW1ldGVy PiA8dHlwZT50ZXh0PC90eXBlPiwKKyAgICAgICAgPHBhcmFtZXRlcj5sc248L3BhcmFtZXRl cj4gPHR5cGU+cGdfbHNuPC90eXBlPiwKKyAgICAgICAgPHBhcmFtZXRlcj50aW1lbGluZV9p ZDwvcGFyYW1ldGVyPiA8dHlwZT5pbnQ4PC90eXBlPiwKKyAgICAgICAgPHBhcmFtZXRlcj5z dG9wPC9wYXJhbWV0ZXI+IDx0eXBlPnRpbWVzdGFtcHR6PC90eXBlPiApCiAgICAgICAgPC9w YXJhPgogICAgICAgIDxwYXJhPgogICAgICAgICBGaW5pc2hlcyBwZXJmb3JtaW5nIGFuIG9u LWxpbmUgYmFja3VwLiAgVGhlIGRlc2lyZWQgY29udGVudHMgb2YgdGhlCi0gICAgICAgIGJh Y2t1cCBsYWJlbCBmaWxlIGFuZCB0aGUgdGFibGVzcGFjZSBtYXAgZmlsZSBhcmUgcmV0dXJu ZWQgYXMgcGFydCBvZgorICAgICAgICBwZ19jb250cm9sIGZpbGUgYW5kIHRoZSB0YWJsZXNw YWNlIG1hcCBmaWxlIGFyZSByZXR1cm5lZCBhcyBwYXJ0IG9mCiAgICAgICAgIHRoZSByZXN1 bHQgb2YgdGhlIGZ1bmN0aW9uIGFuZCBtdXN0IGJlIHdyaXR0ZW4gdG8gZmlsZXMgaW4gdGhl CiAgICAgICAgIGJhY2t1cCBhcmVhLiAgVGhlc2UgZmlsZXMgbXVzdCBub3QgYmUgd3JpdHRl biB0byB0aGUgbGl2ZSBkYXRhIGRpcmVjdG9yeQogICAgICAgICAoZG9pbmcgc28gd2lsbCBj YXVzZSBQb3N0Z3JlU1FMIHRvIGZhaWwgdG8gcmVzdGFydCBpbiB0aGUgZXZlbnQgb2YgYQpA QCAtMjY4MDAsMTMgKzI2ODEyLDE2IEBAIExPRzogIEdyYW5kIHRvdGFsOiAxNjUxOTIwIGJ5 dGVzIGluIDIwMSBibG9ja3M7IDYyMjM2MCBmcmVlICg4OCBjaHVua3MpOyAxMDI5NTYwCiAg ICAgICAgIGJhY2t1cC4KICAgICAgICA8L3BhcmE+CiAgICAgICAgPHBhcmE+Ci0gICAgICAg IFRoZSByZXN1bHQgb2YgdGhlIGZ1bmN0aW9uIGlzIGEgc2luZ2xlIHJlY29yZC4KLSAgICAg ICAgVGhlIDxwYXJhbWV0ZXI+bHNuPC9wYXJhbWV0ZXI+IGNvbHVtbiBob2xkcyB0aGUgYmFj a3VwJ3MgZW5kaW5nCi0gICAgICAgIHdyaXRlLWFoZWFkIGxvZyBsb2NhdGlvbiAod2hpY2gg YWdhaW4gY2FuIGJlIGlnbm9yZWQpLiAgVGhlIHNlY29uZAotICAgICAgICBjb2x1bW4gcmV0 dXJucyB0aGUgY29udGVudHMgb2YgdGhlIGJhY2t1cCBsYWJlbCBmaWxlLCBhbmQgdGhlIHRo aXJkCi0gICAgICAgIGNvbHVtbiByZXR1cm5zIHRoZSBjb250ZW50cyBvZiB0aGUgdGFibGVz cGFjZSBtYXAgZmlsZS4gIFRoZXNlIG11c3QgYmUKLSAgICAgICAgc3RvcmVkIGFzIHBhcnQg b2YgdGhlIGJhY2t1cCBhbmQgYXJlIHJlcXVpcmVkIGFzIHBhcnQgb2YgdGhlIHJlc3RvcmUK LSAgICAgICAgcHJvY2Vzcy4KKyAgICAgICAgVGhlIHJlc3VsdCBvZiB0aGUgZnVuY3Rpb24g aXMgYSBzaW5nbGUgcmVjb3JkLiBUaGUgZmlyc3QgY29sdW1uIHJldHVybnMKKyAgICAgICAg dGhlIGNvbnRlbnRzIG9mIHRoZSA8ZmlsZW5hbWU+cGdfY29udHJvbDwvZmlsZW5hbWU+IGZp bGUgYW5kIHRoZQorICAgICAgICBzZWNvbmQgY29sdW1uIHJldHVybnMgdGhlIGNvbnRlbnRz IG9mIHRoZQorICAgICAgICA8ZmlsZW5hbWU+dGFibGVzcGFjZV9tYXA8L2ZpbGVuYW1lPiBm aWxlLiAgVGhlc2UgbXVzdCBiZSBzdG9yZWQgYXMgcGFydAorICAgICAgICBvZiB0aGUgYmFj a3VwIGFuZCBhcmUgcmVxdWlyZWQgYXMgcGFydCBvZiB0aGUgcmVzdG9yZSBwcm9jZXNzLiBU aGUKKyAgICAgICAgcmVtYWluZGVyIG9mIHRoZSBjb2x1bW5zIGNvbnRhaW4gaW5mb3JtYXRp b24gYWJvdXQgdGhlIGVuZCBvZiB0aGUgYmFja3VwCisgICAgICAgIGFuZCBjYW4gYmUgaWdu b3JlZDogdGhlIDxwYXJhbWV0ZXI+bHNuPC9wYXJhbWV0ZXI+IGNvbHVtbiBob2xkcyB0aGUK KyAgICAgICAgZW5kaW5nIHdyaXRlLWFoZWFkIGxvZyBsb2NhdGlvbiwgdGhlIDxwYXJhbWV0 ZXI+dGltZWxpbmVfaWQ8L3BhcmFtZXRlcj4KKyAgICAgICAgY29sdW1uIGhvbGRzIHRoZSBl bmRpbmcgdGltZWxpbmUsIGFuZCB0aGUgPHBhcmFtZXRlcj5zdG9wPC9wYXJhbWV0ZXI+Cisg ICAgICAgIGNvbHVtbiBob2xkcyB0aGUgZW5kaW5nIHRpbWVzdGFtcC4KICAgICAgICA8L3Bh cmE+CiAgICAgICAgPHBhcmE+CiAgICAgICAgIFRoaXMgZnVuY3Rpb24gaXMgcmVzdHJpY3Rl ZCB0byBzdXBlcnVzZXJzIGJ5IGRlZmF1bHQsIGJ1dCBvdGhlciB1c2VycwpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL3RyYW5zYW0veGxvZy5jCmluZGV4IDQwNDYxOTIzZWEzLi5iNmUwZTE1YWIyYyAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jCisrKyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYwpAQCAtNzQsNiArNzQsNyBAQAogI2luY2x1 ZGUgInBnX3RyYWNlLmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCiAjaW5jbHVkZSAicG9ydC9h dG9taWNzLmgiCisjaW5jbHVkZSAicG9ydC9wZ19jcmMzMmMuaCIKICNpbmNsdWRlICJwb3J0 L3BnX2lvdmVjLmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci9iZ3dyaXRlci5oIgogI2luY2x1 ZGUgInBvc3RtYXN0ZXIvc3RhcnR1cC5oIgpAQCAtNTExNiw3ICs1MTE3LDYgQEAgU3RhcnR1 cFhMT0codm9pZCkKIAlib29sCQl3YXNTaHV0ZG93bjsKIAlib29sCQlkaWRDcmFzaDsKIAli b29sCQloYXZlVGJsc3BjTWFwOwotCWJvb2wJCWhhdmVCYWNrdXBMYWJlbDsKIAlYTG9nUmVj UHRyCUVuZE9mTG9nOwogCVRpbWVMaW5lSUQJRW5kT2ZMb2dUTEk7CiAJVGltZUxpbmVJRAlu ZXdUTEk7CkBAIC01MjQwLDEzICs1MjQwLDE0IEBAIFN0YXJ0dXBYTE9HKHZvaWQpCiAJLyoK IAkgKiBQcmVwYXJlIGZvciBXQUwgcmVjb3ZlcnkgaWYgbmVlZGVkLgogCSAqCi0JICogSW5p dFdhbFJlY292ZXJ5IGFuYWx5emVzIHRoZSBjb250cm9sIGZpbGUgYW5kIHRoZSBiYWNrdXAg bGFiZWwgZmlsZSwgaWYKLQkgKiBhbnkuICBJdCB1cGRhdGVzIHRoZSBpbi1tZW1vcnkgQ29u dHJvbEZpbGUgYnVmZmVyIGFjY29yZGluZyB0byB0aGUKLQkgKiBzdGFydGluZyBjaGVja3Bv aW50LCBhbmQgc2V0cyBJblJlY292ZXJ5IGFuZCBBcmNoaXZlUmVjb3ZlcnlSZXF1ZXN0ZWQu CisJICogSW5pdFdhbFJlY292ZXJ5IGFuYWx5emVzIHRoZSBjb250cm9sIGZpbGUgYW5kIGNo ZWNrcyBpZiBiYWNrdXAgcmVjb3ZlcnkKKwkgKiBoYXMgYmVlbiByZXF1ZXN0ZWQuICBJdCB1 cGRhdGVzIHRoZSBpbi1tZW1vcnkgQ29udHJvbEZpbGUgYnVmZmVyCisJICogYWNjb3JkaW5n IHRvIHRoZSBzdGFydGluZyBjaGVja3BvaW50LCBhbmQgc2V0cyBJblJlY292ZXJ5IGFuZAor CSAqIEFyY2hpdmVSZWNvdmVyeVJlcXVlc3RlZC4KKwkgKgogCSAqIEl0IGFsc28gYXBwbGll cyB0aGUgdGFibGVzcGFjZSBtYXAgZmlsZSwgaWYgYW55LgogCSAqLwotCUluaXRXYWxSZWNv dmVyeShDb250cm9sRmlsZSwgJndhc1NodXRkb3duLAotCQkJCQkmaGF2ZUJhY2t1cExhYmVs LCAmaGF2ZVRibHNwY01hcCk7CisJSW5pdFdhbFJlY292ZXJ5KENvbnRyb2xGaWxlLCAmd2Fz U2h1dGRvd24sICZoYXZlVGJsc3BjTWFwKTsKIAljaGVja1BvaW50ID0gQ29udHJvbEZpbGUt PmNoZWNrUG9pbnRDb3B5OwoKIAkvKiBpbml0aWFsaXplIHNoYXJlZCBtZW1vcnkgdmFyaWFi bGVzIGZyb20gdGhlIGNoZWNrcG9pbnQgcmVjb3JkICovCkBAIC01Mzg5LDIwICs1MzkwLDYg QEAgU3RhcnR1cFhMT0codm9pZCkKIAkJICovCiAJCVVwZGF0ZUNvbnRyb2xGaWxlKCk7Cgot CQkvKgotCQkgKiBJZiB0aGVyZSB3YXMgYSBiYWNrdXAgbGFiZWwgZmlsZSwgaXQncyBkb25l IGl0cyBqb2IgYW5kIHRoZSBpbmZvCi0JCSAqIGhhcyBub3cgYmVlbiBwcm9wYWdhdGVkIGlu dG8gcGdfY29udHJvbC4gIFdlIG11c3QgZ2V0IHJpZCBvZiB0aGUKLQkJICogbGFiZWwgZmls ZSBzbyB0aGF0IGlmIHdlIGNyYXNoIGR1cmluZyByZWNvdmVyeSwgd2UnbGwgcGljayB1cCBh dAotCQkgKiB0aGUgbGF0ZXN0IHJlY292ZXJ5IHJlc3RhcnRwb2ludCBpbnN0ZWFkIG9mIGdv aW5nIGFsbCB0aGUgd2F5IGJhY2sKLQkJICogdG8gdGhlIGJhY2t1cCBzdGFydCBwb2ludC4g IEl0IHNlZW1zIHBydWRlbnQgdGhvdWdoIHRvIGp1c3QgcmVuYW1lCi0JCSAqIHRoZSBmaWxl IG91dCBvZiB0aGUgd2F5IHJhdGhlciB0aGFuIGRlbGV0ZSBpdCBjb21wbGV0ZWx5LgotCQkg Ki8KLQkJaWYgKGhhdmVCYWNrdXBMYWJlbCkKLQkJewotCQkJdW5saW5rKEJBQ0tVUF9MQUJF TF9PTEQpOwotCQkJZHVyYWJsZV9yZW5hbWUoQkFDS1VQX0xBQkVMX0ZJTEUsIEJBQ0tVUF9M QUJFTF9PTEQsIEZBVEFMKTsKLQkJfQotCiAJCS8qCiAJCSAqIElmIHRoZXJlIHdhcyBhIHRh Ymxlc3BhY2VfbWFwIGZpbGUsIGl0J3MgZG9uZSBpdHMgam9iIGFuZCB0aGUKIAkJICogc3lt bGlua3MgaGF2ZSBiZWVuIGNyZWF0ZWQuICBXZSBtdXN0IGdldCByaWQgb2YgdGhlIG1hcCBm aWxlIHNvCkBAIC01NTUyLDEwICs1NTM5LDggQEAgU3RhcnR1cFhMT0codm9pZCkKIAkgKiAo YXQgd2hpY2ggcG9pbnQgd2UgcmVzZXQgYmFja3VwU3RhcnRQb2ludCB0byBiZSBJbnZhbGlk KSwgZm9yCiAJICogYmFja3VwLWZyb20tcmVwbGljYSAod2hpY2ggY2FuJ3QgaW5qZWN0IHJl Y29yZHMgaW50byB0aGUgV0FMIHN0cmVhbSksCiAJICogdGhhdCBwb2ludCBpcyB3aGVuIHdl IHJlYWNoIHRoZSBtaW5SZWNvdmVyeVBvaW50IGluIHBnX2NvbnRyb2wgKHdoaWNoCi0JICog d2UgcHVycG9zZWZ1bGx5IGNvcHkgbGFzdCB3aGVuIGJhY2tpbmcgdXAgZnJvbSBhIHJlcGxp Y2EpLiAgRm9yCi0JICogcGdfcmV3aW5kICh3aGljaCBjcmVhdGVzIGEgYmFja3VwX2xhYmVs IHdpdGggYSBtZXRob2Qgb2YgInBnX3Jld2luZCIpCi0JICogb3Igc25hcHNob3Qtc3R5bGUg YmFja3VwcyAod2hpY2ggZG9uJ3QpLCBiYWNrdXBFbmRSZXF1aXJlZCB3aWxsIGJlIHNldAot CSAqIHRvIGZhbHNlLgorCSAqIHdlIHB1cnBvc2VmdWxseSBjb3B5IGxhc3Qgd2hlbiBiYWNr aW5nIHVwKS4gIEZvciBwZ19yZXdpbmQgb3IKKwkgKiBzbmFwc2hvdC1zdHlsZSBiYWNrdXBz LCBiYWNrdXBFbmRSZXF1aXJlZCB3aWxsIGJlIHNldCB0byBmYWxzZS4KIAkgKgogCSAqIE5v dGU6IGl0IGlzIGluZGVlZCBva2F5IHRvIGxvb2sgYXQgdGhlIGxvY2FsIHZhcmlhYmxlCiAJ ICogTG9jYWxNaW5SZWNvdmVyeVBvaW50IGhlcmUsIGV2ZW4gdGhvdWdoIENvbnRyb2xGaWxl LT5taW5SZWNvdmVyeVBvaW50CkBAIC04NzI1LDExICs4NzEwLDMzIEBAIGRvX3BnX2JhY2t1 cF9zdG9wKEJhY2t1cFN0YXRlICpzdGF0ZSwgYm9vbCB3YWl0Zm9yYXJjaGl2ZSkKIAlpbnQJ CQlzZWNvbmRzX2JlZm9yZV93YXJuaW5nOwogCWludAkJCXdhaXRzID0gMDsKIAlib29sCQly ZXBvcnRlZF93YWl0aW5nID0gZmFsc2U7CisJQ29udHJvbEZpbGVEYXRhICpjb250cm9sRmls ZUNvcHkgPSAoQ29udHJvbEZpbGVEYXRhICopc3RhdGUtPmNvbnRyb2xGaWxlOwoKIAlBc3Nl cnQoc3RhdGUgIT0gTlVMTCk7CgogCWJhY2t1cF9zdG9wcGVkX2luX3JlY292ZXJ5ID0gUmVj b3ZlcnlJblByb2dyZXNzKCk7CgorCS8qCisJICogQ3JlYXRlIGEgY29weSBvZiBjb250cm9s IGRhdGEgYW5kIHVwZGF0ZSBpdCB3aXRoIGZpZWxkcyByZXF1aXJlZCBmb3IKKwkgKiByZWNv dmVyeS4gQWxzbyByZWNhbGN1bGF0ZSB0aGUgQ1JDLgorCSAqLworCW1lbXNldChjb250cm9s RmlsZUNvcHksIDAsIFBHX0NPTlRST0xfTUFYX1NBRkVfU0laRSk7CisKKwlMV0xvY2tBY3F1 aXJlKENvbnRyb2xGaWxlTG9jaywgTFdfU0hBUkVEKTsKKwltZW1jcHkoY29udHJvbEZpbGVD b3B5LCBDb250cm9sRmlsZSwgc2l6ZW9mKENvbnRyb2xGaWxlRGF0YSkpOworCUxXTG9ja1Jl bGVhc2UoQ29udHJvbEZpbGVMb2NrKTsKKworCWNvbnRyb2xGaWxlQ29weS0+YmFja3VwUmVj b3ZlcnlSZXF1aXJlZCA9IHRydWU7CisJY29udHJvbEZpbGVDb3B5LT5iYWNrdXBGcm9tU3Rh bmRieSA9IGJhY2t1cF9zdG9wcGVkX2luX3JlY292ZXJ5OworCWNvbnRyb2xGaWxlQ29weS0+ YmFja3VwRW5kUmVxdWlyZWQgPSB0cnVlOworCWNvbnRyb2xGaWxlQ29weS0+YmFja3VwQ2hl Y2tQb2ludCA9IHN0YXRlLT5jaGVja3BvaW50bG9jOworCWNvbnRyb2xGaWxlQ29weS0+YmFj a3VwU3RhcnRQb2ludCA9IHN0YXRlLT5zdGFydHBvaW50OworCWNvbnRyb2xGaWxlQ29weS0+ YmFja3VwU3RhcnRQb2ludFRMSSA9IHN0YXRlLT5zdGFydHRsaTsKKworCUlOSVRfQ1JDMzJD KGNvbnRyb2xGaWxlQ29weS0+Y3JjKTsKKwlDT01QX0NSQzMyQyhjb250cm9sRmlsZUNvcHkt PmNyYywgY29udHJvbEZpbGVDb3B5LCBvZmZzZXRvZihDb250cm9sRmlsZURhdGEsIGNyYykp OworCUZJTl9DUkMzMkMoY29udHJvbEZpbGVDb3B5LT5jcmMpOworCiAJLyoKIAkgKiBEdXJp bmcgcmVjb3ZlcnksIHdlIGRvbid0IG5lZWQgdG8gY2hlY2sgV0FMIGxldmVsLiBCZWNhdXNl LCBpZiBXQUwKIAkgKiBsZXZlbCBpcyBub3Qgc3VmZmljaWVudCwgaXQncyBpbXBvc3NpYmxl IHRvIGdldCBoZXJlIGR1cmluZyByZWNvdmVyeS4KQEAgLTg4MzEsMTEgKzg4MzgsOCBAQCBk b19wZ19iYWNrdXBfc3RvcChCYWNrdXBTdGF0ZSAqc3RhdGUsIGJvb2wgd2FpdGZvcmFyY2hp dmUpCiAJCQkJCQkJICJFbmFibGUgZnVsbF9wYWdlX3dyaXRlcyBhbmQgcnVuIENIRUNLUE9J TlQgb24gdGhlIHByaW1hcnksICIKIAkJCQkJCQkgImFuZCB0aGVuIHRyeSBhbiBvbmxpbmUg YmFja3VwIGFnYWluLiIpKSk7CgotCi0JCUxXTG9ja0FjcXVpcmUoQ29udHJvbEZpbGVMb2Nr LCBMV19TSEFSRUQpOwotCQlzdGF0ZS0+c3RvcHBvaW50ID0gQ29udHJvbEZpbGUtPm1pblJl Y292ZXJ5UG9pbnQ7Ci0JCXN0YXRlLT5zdG9wdGxpID0gQ29udHJvbEZpbGUtPm1pblJlY292 ZXJ5UG9pbnRUTEk7Ci0JCUxXTG9ja1JlbGVhc2UoQ29udHJvbEZpbGVMb2NrKTsKKwkJc3Rh dGUtPnN0b3Bwb2ludCA9IGNvbnRyb2xGaWxlQ29weS0+bWluUmVjb3ZlcnlQb2ludDsKKwkJ c3RhdGUtPnN0b3B0bGkgPSBjb250cm9sRmlsZUNvcHktPm1pblJlY292ZXJ5UG9pbnRUTEk7 CiAJfQogCWVsc2UKIAl7CkBAIC04ODc3LDcgKzg4ODEsNyBAQCBkb19wZ19iYWNrdXBfc3Rv cChCYWNrdXBTdGF0ZSAqc3RhdGUsIGJvb2wgd2FpdGZvcmFyY2hpdmUpCiAJCQkJCQkJaGlz dGZpbGVwYXRoKSkpOwoKIAkJLyogQnVpbGQgYW5kIHNhdmUgdGhlIGNvbnRlbnRzIG9mIHRo ZSBiYWNrdXAgaGlzdG9yeSBmaWxlICovCi0JCWhpc3RvcnlfZmlsZSA9IGJ1aWxkX2JhY2t1 cF9jb250ZW50KHN0YXRlLCB0cnVlKTsKKwkJaGlzdG9yeV9maWxlID0gYnVpbGRfYmFja3Vw X2NvbnRlbnQoc3RhdGUpOwogCQlmcHJpbnRmKGZwLCAiJXMiLCBoaXN0b3J5X2ZpbGUpOwog CQlwZnJlZShoaXN0b3J5X2ZpbGUpOwoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vz cy90cmFuc2FtL3hsb2diYWNrdXAuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hs b2diYWNrdXAuYwppbmRleCAyMWQ2ODEzM2FlMS4uYjYxZWQwMmJiYmUgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2diYWNrdXAuYworKysgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nYmFja3VwLmMKQEAgLTE4LDE5ICsxOCwxOSBAQAog I2luY2x1ZGUgImFjY2Vzcy94bG9nYmFja3VwLmgiCgogLyoKLSAqIEJ1aWxkIGNvbnRlbnRz IGZvciBiYWNrdXBfbGFiZWwgb3IgYmFja3VwIGhpc3RvcnkgZmlsZS4KLSAqCi0gKiBXaGVu IGlzaGlzdG9yeWZpbGUgaXMgdHJ1ZSwgaXQgY3JlYXRlcyB0aGUgY29udGVudHMgZm9yIGEg YmFja3VwIGhpc3RvcnkKLSAqIGZpbGUsIG90aGVyd2lzZSBpdCBjcmVhdGVzIGNvbnRlbnRz IGZvciBhIGJhY2t1cF9sYWJlbCBmaWxlLgorICogQnVpbGQgY29udGVudHMgZm9yIGJhY2t1 cCBoaXN0b3J5IGZpbGUuCiAgKgogICogUmV0dXJucyB0aGUgcmVzdWx0IGdlbmVyYXRlZCBh cyBhIHBhbGxvYydkIHN0cmluZy4KICAqLwogY2hhciAqCi1idWlsZF9iYWNrdXBfY29udGVu dChCYWNrdXBTdGF0ZSAqc3RhdGUsIGJvb2wgaXNoaXN0b3J5ZmlsZSkKK2J1aWxkX2JhY2t1 cF9jb250ZW50KEJhY2t1cFN0YXRlICpzdGF0ZSkKIHsKIAljaGFyCQlzdGFydHN0cmJ1Zlsx MjhdOworCWNoYXIJCXN0b3BzdHJmYnVmWzEyOF07CiAJY2hhcgkJc3RhcnR4bG9nZmlsZVtN QVhGTkFNRUxFTl07IC8qIGJhY2t1cCBzdGFydCBXQUwgZmlsZSAqLworCWNoYXIJCXN0b3B4 bG9nZmlsZVtNQVhGTkFNRUxFTl07CS8qIGJhY2t1cCBzdG9wIFdBTCBmaWxlICovCiAJWExv Z1NlZ05vCXN0YXJ0c2Vnbm87CisJWExvZ1NlZ05vCXN0b3BzZWdubzsKIAlTdHJpbmdJbmZv CXJlc3VsdCA9IG1ha2VTdHJpbmdJbmZvKCk7CiAJY2hhcgkgICAqZGF0YTsKCkBAIC00NSwx NiArNDUsMTAgQEAgYnVpbGRfYmFja3VwX2NvbnRlbnQoQmFja3VwU3RhdGUgKnN0YXRlLCBi b29sIGlzaGlzdG9yeWZpbGUpCiAJYXBwZW5kU3RyaW5nSW5mbyhyZXN1bHQsICJTVEFSVCBX QUwgTE9DQVRJT046ICVYLyVYIChmaWxlICVzKVxuIiwKIAkJCQkJIExTTl9GT1JNQVRfQVJH UyhzdGF0ZS0+c3RhcnRwb2ludCksIHN0YXJ0eGxvZ2ZpbGUpOwoKLQlpZiAoaXNoaXN0b3J5 ZmlsZSkKLQl7Ci0JCWNoYXIJCXN0b3B4bG9nZmlsZVtNQVhGTkFNRUxFTl07CS8qIGJhY2t1 cCBzdG9wIFdBTCBmaWxlICovCi0JCVhMb2dTZWdObwlzdG9wc2Vnbm87Ci0KLQkJWExCeXRl VG9TZWcoc3RhdGUtPnN0b3Bwb2ludCwgc3RvcHNlZ25vLCB3YWxfc2VnbWVudF9zaXplKTsK LQkJWExvZ0ZpbGVOYW1lKHN0b3B4bG9nZmlsZSwgc3RhdGUtPnN0b3B0bGksIHN0b3BzZWdu bywgd2FsX3NlZ21lbnRfc2l6ZSk7Ci0JCWFwcGVuZFN0cmluZ0luZm8ocmVzdWx0LCAiU1RP UCBXQUwgTE9DQVRJT046ICVYLyVYIChmaWxlICVzKVxuIiwKLQkJCQkJCSBMU05fRk9STUFU X0FSR1Moc3RhdGUtPnN0b3Bwb2ludCksIHN0b3B4bG9nZmlsZSk7Ci0JfQorCVhMQnl0ZVRv U2VnKHN0YXRlLT5zdG9wcG9pbnQsIHN0b3BzZWdubywgd2FsX3NlZ21lbnRfc2l6ZSk7CisJ WExvZ0ZpbGVOYW1lKHN0b3B4bG9nZmlsZSwgc3RhdGUtPnN0b3B0bGksIHN0b3BzZWdubywg d2FsX3NlZ21lbnRfc2l6ZSk7CisJYXBwZW5kU3RyaW5nSW5mbyhyZXN1bHQsICJTVE9QIFdB TCBMT0NBVElPTjogJVgvJVggKGZpbGUgJXMpXG4iLAorCQkJCQkJTFNOX0ZPUk1BVF9BUkdT KHN0YXRlLT5zdG9wcG9pbnQpLCBzdG9weGxvZ2ZpbGUpOwoKIAlhcHBlbmRTdHJpbmdJbmZv KHJlc3VsdCwgIkNIRUNLUE9JTlQgTE9DQVRJT046ICVYLyVYXG4iLAogCQkJCQkgTFNOX0ZP Uk1BVF9BUkdTKHN0YXRlLT5jaGVja3BvaW50bG9jKSk7CkBAIC02NSwxNyArNTksMTIgQEAg YnVpbGRfYmFja3VwX2NvbnRlbnQoQmFja3VwU3RhdGUgKnN0YXRlLCBib29sIGlzaGlzdG9y eWZpbGUpCiAJYXBwZW5kU3RyaW5nSW5mbyhyZXN1bHQsICJMQUJFTDogJXNcbiIsIHN0YXRl LT5uYW1lKTsKIAlhcHBlbmRTdHJpbmdJbmZvKHJlc3VsdCwgIlNUQVJUIFRJTUVMSU5FOiAl dVxuIiwgc3RhdGUtPnN0YXJ0dGxpKTsKCi0JaWYgKGlzaGlzdG9yeWZpbGUpCi0JewotCQlj aGFyCQlzdG9wc3RyZmJ1ZlsxMjhdOwotCi0JCS8qIFVzZSB0aGUgbG9nIHRpbWV6b25lIGhl cmUsIG5vdCB0aGUgc2Vzc2lvbiB0aW1lem9uZSAqLwotCQlwZ19zdHJmdGltZShzdG9wc3Ry ZmJ1Ziwgc2l6ZW9mKHN0b3BzdHJmYnVmKSwgIiVZLSVtLSVkICVIOiVNOiVTICVaIiwKLQkJ CQkJcGdfbG9jYWx0aW1lKCZzdGF0ZS0+c3RvcHRpbWUsIGxvZ190aW1lem9uZSkpOworCS8q IFVzZSB0aGUgbG9nIHRpbWV6b25lIGhlcmUsIG5vdCB0aGUgc2Vzc2lvbiB0aW1lem9uZSAq LworCXBnX3N0cmZ0aW1lKHN0b3BzdHJmYnVmLCBzaXplb2Yoc3RvcHN0cmZidWYpLCAiJVkt JW0tJWQgJUg6JU06JVMgJVoiLAorCQkJCXBnX2xvY2FsdGltZSgmc3RhdGUtPnN0b3B0aW1l LCBsb2dfdGltZXpvbmUpKTsKCi0JCWFwcGVuZFN0cmluZ0luZm8ocmVzdWx0LCAiU1RPUCBU SU1FOiAlc1xuIiwgc3RvcHN0cmZidWYpOwotCQlhcHBlbmRTdHJpbmdJbmZvKHJlc3VsdCwg IlNUT1AgVElNRUxJTkU6ICV1XG4iLCBzdGF0ZS0+c3RvcHRsaSk7Ci0JfQorCWFwcGVuZFN0 cmluZ0luZm8ocmVzdWx0LCAiU1RPUCBUSU1FOiAlc1xuIiwgc3RvcHN0cmZidWYpOworCWFw cGVuZFN0cmluZ0luZm8ocmVzdWx0LCAiU1RPUCBUSU1FTElORTogJXVcbiIsIHN0YXRlLT5z dG9wdGxpKTsKCiAJZGF0YSA9IHJlc3VsdC0+ZGF0YTsKIAlwZnJlZShyZXN1bHQpOwpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ2Z1bmNzLmMgYi9zcmMv YmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nZnVuY3MuYwppbmRleCA0NWE3MDY2OGIxYy4u MjM4OGE2MGE1ZTUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hs b2dmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dmdW5jcy5j CkBAIC01Myw3ICs1Myw3IEBAIHN0YXRpYyBNZW1vcnlDb250ZXh0IGJhY2t1cGNvbnRleHQg PSBOVUxMOwogICogcGdfYmFja3VwX3N0YXJ0OiBzZXQgdXAgZm9yIHRha2luZyBhbiBvbi1s aW5lIGJhY2t1cCBkdW1wCiAgKgogICogRXNzZW50aWFsbHkgd2hhdCB0aGlzIGRvZXMgaXMg dG8gY3JlYXRlIHRoZSBjb250ZW50cyByZXF1aXJlZCBmb3IgdGhlCi0gKiBiYWNrdXBfbGFi ZWwgZmlsZSBhbmQgdGhlIHRhYmxlc3BhY2UgbWFwLgorICogdGhlIHRhYmxlc3BhY2UgbWFw LgogICoKICAqIFBlcm1pc3Npb24gY2hlY2tpbmcgZm9yIHRoaXMgZnVuY3Rpb24gaXMgbWFu YWdlZCB0aHJvdWdoIHRoZSBub3JtYWwKICAqIEdSQU5UIHN5c3RlbS4KQEAgLTYxLDYgKzYx LDEwIEBAIHN0YXRpYyBNZW1vcnlDb250ZXh0IGJhY2t1cGNvbnRleHQgPSBOVUxMOwogRGF0 dW0KIHBnX2JhY2t1cF9zdGFydChQR19GVU5DVElPTl9BUkdTKQogeworI2RlZmluZSBQR19C QUNLVVBfU1RBUlRfVjJfQ09MUyAzCisJVHVwbGVEZXNjCXR1cGRlc2M7CisJRGF0dW0JCXZh bHVlc1tQR19CQUNLVVBfU1RBUlRfVjJfQ09MU10gPSB7MH07CisJYm9vbAkJbnVsbHNbUEdf QkFDS1VQX1NUQVJUX1YyX0NPTFNdID0gezB9OwogCXRleHQJICAgKmJhY2t1cGlkID0gUEdf R0VUQVJHX1RFWFRfUFAoMCk7CiAJYm9vbAkJZmFzdCA9IFBHX0dFVEFSR19CT09MKDEpOwog CWNoYXIJICAgKmJhY2t1cGlkc3RyOwpAQCAtNjksNiArNzMsMTAgQEAgcGdfYmFja3VwX3N0 YXJ0KFBHX0ZVTkNUSU9OX0FSR1MpCgogCWJhY2t1cGlkc3RyID0gdGV4dF90b19jc3RyaW5n KGJhY2t1cGlkKTsKCisJLyogSW5pdGlhbGl6ZSBhdHRyaWJ1dGVzIGluZm9ybWF0aW9uIGlu IHRoZSB0dXBsZSBkZXNjcmlwdG9yICovCisJaWYgKGdldF9jYWxsX3Jlc3VsdF90eXBlKGZj aW5mbywgTlVMTCwgJnR1cGRlc2MpICE9IFRZUEVGVU5DX0NPTVBPU0lURSkKKwkJZWxvZyhF UlJPUiwgInJldHVybiB0eXBlIG11c3QgYmUgYSByb3cgdHlwZSIpOworCiAJaWYgKHN0YXR1 cyA9PSBTRVNTSU9OX0JBQ0tVUF9SVU5OSU5HKQogCQllcmVwb3J0KEVSUk9SLAogCQkJCShl cnJjb2RlKEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLApAQCAt MTAyLDcgKzExMCwxMiBAQCBwZ19iYWNrdXBfc3RhcnQoUEdfRlVOQ1RJT05fQVJHUykKIAly ZWdpc3Rlcl9wZXJzaXN0ZW50X2Fib3J0X2JhY2t1cF9oYW5kbGVyKCk7CiAJZG9fcGdfYmFj a3VwX3N0YXJ0KGJhY2t1cGlkc3RyLCBmYXN0LCBOVUxMLCBiYWNrdXBfc3RhdGUsIHRhYmxl c3BhY2VfbWFwKTsKCi0JUEdfUkVUVVJOX0xTTihiYWNrdXBfc3RhdGUtPnN0YXJ0cG9pbnQp OworCXZhbHVlc1swXSA9IExTTkdldERhdHVtKGJhY2t1cF9zdGF0ZS0+c3RhcnRwb2ludCk7 CisJdmFsdWVzWzFdID0gSW50NjRHZXREYXR1bShiYWNrdXBfc3RhdGUtPnN0YXJ0dGxpKTsK Kwl2YWx1ZXNbMl0gPSBUaW1lc3RhbXBUekdldERhdHVtKHRpbWVfdF90b190aW1lc3RhbXB0 eihiYWNrdXBfc3RhdGUtPnN0YXJ0dGltZSkpOworCisJLyogUmV0dXJucyB0aGUgcmVjb3Jk IGFzIERhdHVtICovCisJUEdfUkVUVVJOX0RBVFVNKEhlYXBUdXBsZUdldERhdHVtKGhlYXBf Zm9ybV90dXBsZSh0dXBkZXNjLCB2YWx1ZXMsIG51bGxzKSkpOwogfQoKCkBAIC0xMTMsMTQg KzEyNiwxMiBAQCBwZ19iYWNrdXBfc3RhcnQoUEdfRlVOQ1RJT05fQVJHUykKICAqIGFsbG93 cyB0aGUgdXNlciB0byBjaG9vc2UgaWYgdGhleSB3YW50IHRvIHdhaXQgZm9yIHRoZSBXQUwg dG8gYmUgYXJjaGl2ZWQKICAqIG9yIGlmIHdlIHNob3VsZCBqdXN0IHJldHVybiBhcyBzb29u IGFzIHRoZSBXQUwgcmVjb3JkIGlzIHdyaXR0ZW4uCiAgKgotICogVGhpcyBmdW5jdGlvbiBz dG9wcyBhbiBpbi1wcm9ncmVzcyBiYWNrdXAsIGNyZWF0ZXMgYmFja3VwX2xhYmVsIGNvbnRl bnRzIGFuZAotICogaXQgcmV0dXJucyB0aGUgYmFja3VwIHN0b3AgTFNOLCBiYWNrdXBfbGFi ZWwgYW5kIHRhYmxlc3BhY2VfbWFwIGNvbnRlbnRzLgorICogVGhpcyBmdW5jdGlvbiBzdG9w cyBhbiBpbi1wcm9ncmVzcyBiYWNrdXAgYW5kIHJldHVybnMgdGhlIGJhY2t1cCBzdG9wIExT TiwKKyAqIHBnX2NvbnRyb2wgYW5kIHRhYmxlc3BhY2VfbWFwIGNvbnRlbnRzLgogICoKLSAq IFRoZSBiYWNrdXBfbGFiZWwgY29udGFpbnMgdGhlIHVzZXItc3VwcGxpZWQgbGFiZWwgc3Ry aW5nICh0eXBpY2FsbHkgdGhpcwotICogd291bGQgYmUgdXNlZCB0byB0ZWxsIHdoZXJlIHRo ZSBiYWNrdXAgZHVtcCB3aWxsIGJlIHN0b3JlZCksIHRoZSBzdGFydGluZwotICogdGltZSwg c3RhcnRpbmcgV0FMIGxvY2F0aW9uIGZvciB0aGUgZHVtcCBhbmQgc28gb24uICBJdCBpcyB0 aGUgY2FsbGVyJ3MKLSAqIHJlc3BvbnNpYmlsaXR5IHRvIHdyaXRlIHRoZSBiYWNrdXBfbGFi ZWwgYW5kIHRhYmxlc3BhY2VfbWFwIGZpbGVzIGluIHRoZQotICogZGF0YSBmb2xkZXIgdGhh dCB3aWxsIGJlIHJlc3RvcmVkIGZyb20gdGhpcyBiYWNrdXAuCisgKiBUaGUgcGdfY29udHJv bCBmaWxlIGNvbnRhaW5zIHRoZSByZWNvdmVyeSBpbmZvcm1hdGlvbiBmb3IgdGhlIGJhY2t1 cC4gIEl0IGlzCisgKiB0aGUgY2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkgdG8gd3JpdGUgdGhl IHBnX2NvbnRyb2wgYW5kIHRhYmxlc3BhY2VfbWFwIGZpbGVzCisgKiBpbiB0aGUgZGF0YSBm b2xkZXIgdGhhdCB3aWxsIGJlIHJlc3RvcmVkIGZyb20gdGhpcyBiYWNrdXAuCiAgKgogICog UGVybWlzc2lvbiBjaGVja2luZyBmb3IgdGhpcyBmdW5jdGlvbiBpcyBtYW5hZ2VkIHRocm91 Z2ggdGhlIG5vcm1hbAogICogR1JBTlQgc3lzdGVtLgpAQCAtMTI4LDEyICsxMzksMTIgQEAg cGdfYmFja3VwX3N0YXJ0KFBHX0ZVTkNUSU9OX0FSR1MpCiBEYXR1bQogcGdfYmFja3VwX3N0 b3AoUEdfRlVOQ1RJT05fQVJHUykKIHsKLSNkZWZpbmUgUEdfQkFDS1VQX1NUT1BfVjJfQ09M UyAzCisjZGVmaW5lIFBHX0JBQ0tVUF9TVE9QX1YyX0NPTFMgNQogCVR1cGxlRGVzYwl0dXBk ZXNjOwogCURhdHVtCQl2YWx1ZXNbUEdfQkFDS1VQX1NUT1BfVjJfQ09MU10gPSB7MH07CiAJ Ym9vbAkJbnVsbHNbUEdfQkFDS1VQX1NUT1BfVjJfQ09MU10gPSB7MH07CiAJYm9vbAkJd2Fp dGZvcmFyY2hpdmUgPSBQR19HRVRBUkdfQk9PTCgwKTsKLQljaGFyCSAgICpiYWNrdXBfbGFi ZWw7CisJYnl0ZWEJICAgKnBnX2NvbnRyb2xfYnl0ZWE7CiAJU2Vzc2lvbkJhY2t1cFN0YXRl IHN0YXR1cyA9IGdldF9iYWNrdXBfc3RhdHVzKCk7CgogCS8qIEluaXRpYWxpemUgYXR0cmli dXRlcyBpbmZvcm1hdGlvbiBpbiB0aGUgdHVwbGUgZGVzY3JpcHRvciAqLwpAQCAtMTUyLDE1 ICsxNjMsMTYgQEAgcGdfYmFja3VwX3N0b3AoUEdfRlVOQ1RJT05fQVJHUykKIAkvKiBTdG9w IHRoZSBiYWNrdXAgKi8KIAlkb19wZ19iYWNrdXBfc3RvcChiYWNrdXBfc3RhdGUsIHdhaXRm b3JhcmNoaXZlKTsKCi0JLyogQnVpbGQgdGhlIGNvbnRlbnRzIG9mIGJhY2t1cF9sYWJlbCAq LwotCWJhY2t1cF9sYWJlbCA9IGJ1aWxkX2JhY2t1cF9jb250ZW50KGJhY2t1cF9zdGF0ZSwg ZmFsc2UpOwotCi0JdmFsdWVzWzBdID0gTFNOR2V0RGF0dW0oYmFja3VwX3N0YXRlLT5zdG9w cG9pbnQpOwotCXZhbHVlc1sxXSA9IENTdHJpbmdHZXRUZXh0RGF0dW0oYmFja3VwX2xhYmVs KTsKLQl2YWx1ZXNbMl0gPSBDU3RyaW5nR2V0VGV4dERhdHVtKHRhYmxlc3BhY2VfbWFwLT5k YXRhKTsKKwkvKiBCdWlsZCB0aGUgY29udGVudHMgb2YgcGdfY29udHJvbCAqLworCXBnX2Nv bnRyb2xfYnl0ZWEgPSAoYnl0ZWEgKikgcGFsbG9jKFBHX0NPTlRST0xfTUFYX1NBRkVfU0la RSArIFZBUkhEUlNaKTsKKwlTRVRfVkFSU0laRShwZ19jb250cm9sX2J5dGVhLCBQR19DT05U Uk9MX01BWF9TQUZFX1NJWkUgKyBWQVJIRFJTWik7CisJbWVtY3B5KFZBUkRBVEEocGdfY29u dHJvbF9ieXRlYSksIGJhY2t1cF9zdGF0ZS0+Y29udHJvbEZpbGUsIFBHX0NPTlRST0xfTUFY X1NBRkVfU0laRSk7CgotCS8qIERlYWxsb2NhdGUgYmFja3VwLXJlbGF0ZWQgdmFyaWFibGVz ICovCi0JcGZyZWUoYmFja3VwX2xhYmVsKTsKKwl2YWx1ZXNbMF0gPSBQb2ludGVyR2V0RGF0 dW0ocGdfY29udHJvbF9ieXRlYSk7CisJdmFsdWVzWzFdID0gQ1N0cmluZ0dldFRleHREYXR1 bSh0YWJsZXNwYWNlX21hcC0+ZGF0YSk7CisJdmFsdWVzWzJdID0gTFNOR2V0RGF0dW0oYmFj a3VwX3N0YXRlLT5zdG9wcG9pbnQpOworCXZhbHVlc1szXSA9IEludDY0R2V0RGF0dW0oYmFj a3VwX3N0YXRlLT5zdG9wdGxpKTsKKwl2YWx1ZXNbNF0gPSBUaW1lc3RhbXBUekdldERhdHVt KHRpbWVfdF90b190aW1lc3RhbXB0eihiYWNrdXBfc3RhdGUtPnN0b3B0aW1lKSk7CgogCS8q IENsZWFuIHVwIHRoZSBzZXNzaW9uLWxldmVsIHN0YXRlIGFuZCBpdHMgbWVtb3J5IGNvbnRl eHQgKi8KIAliYWNrdXBfc3RhdGUgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv YWNjZXNzL3RyYW5zYW0veGxvZ3JlY292ZXJ5LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJh bnNhbS94bG9ncmVjb3ZlcnkuYwppbmRleCA0OWJiM2ZlNDUyMC4uMzU5ZDRjMzJlMmIgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dyZWNvdmVyeS5jCisr KyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dyZWNvdmVyeS5jCkBAIC02LDcg KzYsNyBAQAogICogVGhpcyBzb3VyY2UgZmlsZSBjb250YWlucyBmdW5jdGlvbnMgY29udHJv bGxpbmcgV0FMIHJlY292ZXJ5LgogICogSW5pdFdhbFJlY292ZXJ5KCkgaW5pdGlhbGl6ZXMg dGhlIHN5c3RlbSBmb3IgY3Jhc2ggb3IgYXJjaGl2ZSByZWNvdmVyeSwKICAqIG9yIHN0YW5k YnkgbW9kZSwgZGVwZW5kaW5nIG9uIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgdGhlIHN0 YXRlIG9mCi0gKiB0aGUgY29udHJvbCBmaWxlIGFuZCBwb3NzaWJsZSBiYWNrdXAgbGFiZWwg ZmlsZS4gIFBlcmZvcm1XYWxSZWNvdmVyeSgpCisgKiB0aGUgY29udHJvbCBmaWxlIGFuZCBw b3NzaWJsZSBiYWNrdXAgcmVjb3ZlcnkuICBQZXJmb3JtV2FsUmVjb3ZlcnkoKQogICogcGVy Zm9ybXMgdGhlIGFjdHVhbCBXQUwgcmVwbGF5LCBjYWxsaW5nIHRoZSBybWdyLXNwZWNpZmlj IHJlZG8gcm91dGluZXMuCiAgKiBGaW5pc2hXYWxSZWNvdmVyeSgpIHBlcmZvcm1zIGVuZC1v Zi1yZWNvdmVyeSBjaGVja3MgYW5kIGNsZWFudXAgYWN0aW9ucywKICAqIGFuZCBwcmVwYXJl cyBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gaW5pdGlhbGl6ZSB0aGUgV0FMIGZvciB3cml0ZXMu ICBJbgpAQCAtMTUyLDExICsxNTIsMTIgQEAgc3RhdGljIGJvb2wgcmVjb3Zlcnlfc2lnbmFs X2ZpbGVfZm91bmQgPSBmYWxzZTsKCiAvKgogICogQ2hlY2tQb2ludExvYyBpcyB0aGUgcG9z aXRpb24gb2YgdGhlIGNoZWNrcG9pbnQgcmVjb3JkIHRoYXQgZGV0ZXJtaW5lcwotICogd2hl cmUgdG8gc3RhcnQgdGhlIHJlcGxheS4gIEl0IGNvbWVzIGZyb20gdGhlIGJhY2t1cCBsYWJl bCBmaWxlIG9yIHRoZQotICogY29udHJvbCBmaWxlLgorICogd2hlcmUgdG8gc3RhcnQgdGhl IHJlcGxheS4gIEl0IGNvbWVzIGZyb20gdGhlIGNvbnRyb2wgZmlsZSwgZWl0aGVyIGZyb20g dGhlCisgKiBkZWZhdWx0IGxvY2F0aW9uIG9yIGZyb20gYSBiYWNrdXAgcmVjb3ZlcnkgZmll bGQuCiAgKgotICogUmVkb1N0YXJ0TFNOIGlzIHRoZSBjaGVja3BvaW50J3MgUkVETyBsb2Nh dGlvbiwgYWxzbyBmcm9tIHRoZSBiYWNrdXAgbGFiZWwKLSAqIGZpbGUgb3IgdGhlIGNvbnRy b2wgZmlsZS4gIEluIHN0YW5kYnkgbW9kZSwgWExPRyBzdHJlYW1pbmcgdXN1YWxseSBzdGFy dHMKKyAqIFJlZG9TdGFydExTTiBpcyB0aGUgY2hlY2twb2ludCdzIFJFRE8gbG9jYXRpb24s IGFsc28gZnJvbSB0aGUgZGVmYXVsdAorICogY29udHJvbCBmaWxlIGxvY2F0aW9uIG9yIGZy b20gYSBiYWNrdXAgcmVjb3ZlcnkgZmllbGQuICBJbiBzdGFuZGJ5IG1vZGUsCisgKiBYTE9H IHN0cmVhbWluZyB1c3VhbGx5IHN0YXJ0cwogICogZnJvbSB0aGUgcG9zaXRpb24gd2hlcmUg YW4gaW52YWxpZCByZWNvcmQgd2FzIGZvdW5kLiAgQnV0IGlmIHdlIGZhaWwgdG8KICAqIHJl YWQgZXZlbiB0aGUgaW5pdGlhbCBjaGVja3BvaW50IHJlY29yZCwgd2UgdXNlIHRoZSBSRURP IGxvY2F0aW9uIGluc3RlYWQKICAqIG9mIHRoZSBjaGVja3BvaW50IGxvY2F0aW9uIGFzIHRo ZSBzdGFydCBwb3NpdGlvbiBvZiBYTE9HIHN0cmVhbWluZy4KQEAgLTM4OCw5ICszODksNiBA QCBzdGF0aWMgdm9pZCBBcHBseVdhbFJlY29yZChYTG9nUmVhZGVyU3RhdGUgKnhsb2dyZWFk ZXIsIFhMb2dSZWNvcmQgKnJlY29yZCwgVGltZQogc3RhdGljIHZvaWQgRW5hYmxlU3RhbmRi eU1vZGUodm9pZCk7CiBzdGF0aWMgdm9pZCByZWFkUmVjb3ZlcnlTaWduYWxGaWxlKHZvaWQp Owogc3RhdGljIHZvaWQgdmFsaWRhdGVSZWNvdmVyeVBhcmFtZXRlcnModm9pZCk7Ci1zdGF0 aWMgYm9vbCByZWFkX2JhY2t1cF9sYWJlbChYTG9nUmVjUHRyICpjaGVja1BvaW50TG9jLAot CQkJCQkJCSAgVGltZUxpbmVJRCAqYmFja3VwTGFiZWxUTEksCi0JCQkJCQkJICBib29sICpi YWNrdXBFbmRSZXF1aXJlZCwgYm9vbCAqYmFja3VwRnJvbVN0YW5kYnkpOwogc3RhdGljIGJv b2wgcmVhZF90YWJsZXNwYWNlX21hcChMaXN0ICoqdGFibGVzcGFjZXMpOwoKIHN0YXRpYyB2 b2lkIHhsb2dyZWNvdmVyeV9yZWRvKFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkLCBUaW1lTGlu ZUlEIHJlcGxheVRMSSk7CkBAIC00OTIsOCArNDkwLDggQEAgRW5hYmxlU3RhbmRieU1vZGUo dm9pZCkKICAqIFByZXBhcmUgdGhlIHN5c3RlbSBmb3IgV0FMIHJlY292ZXJ5LCBpZiBuZWVk ZWQuCiAgKgogICogVGhpcyBpcyBjYWxsZWQgYnkgU3RhcnR1cFhMT0coKSB3aGljaCBjb29y ZGluYXRlcyB0aGUgc2VydmVyIHN0YXJ0dXAKLSAqIHNlcXVlbmNlLiAgVGhpcyBmdW5jdGlv biBhbmFseXplcyB0aGUgY29udHJvbCBmaWxlIGFuZCB0aGUgYmFja3VwIGxhYmVsCi0gKiBm aWxlLCBpZiBhbnksIGFuZCBmaWd1cmVzIG91dCB3aGV0aGVyIHdlIG5lZWQgdG8gcGVyZm9y bSBjcmFzaCByZWNvdmVyeSBvcgorICogc2VxdWVuY2UuICBUaGlzIGZ1bmN0aW9uIGFuYWx5 emVzIHRoZSBjb250cm9sIGZpbGUgYW5kIGJhY2t1cCByZWNvdmVyeQorICogaW5mbywgaWYg YW55LCBhbmQgZmlndXJlcyBvdXQgd2hldGhlciB3ZSBuZWVkIHRvIHBlcmZvcm0gY3Jhc2gg cmVjb3Zlcnkgb3IKICAqIGFyY2hpdmUgcmVjb3ZlcnksIGFuZCBob3cgZmFyIHdlIG5lZWQg dG8gcmVwbGF5IHRoZSBXQUwgdG8gcmVhY2ggYQogICogY29uc2lzdGVudCBzdGF0ZS4KICAq CkBAIC01MTAsNyArNTA4LDcgQEAgRW5hYmxlU3RhbmRieU1vZGUodm9pZCkKICAqLwogdm9p ZAogSW5pdFdhbFJlY292ZXJ5KENvbnRyb2xGaWxlRGF0YSAqQ29udHJvbEZpbGUsIGJvb2wg Kndhc1NodXRkb3duX3B0ciwKLQkJCQlib29sICpoYXZlQmFja3VwTGFiZWxfcHRyLCBib29s ICpoYXZlVGJsc3BjTWFwX3B0cikKKwkJCQlib29sICpoYXZlVGJsc3BjTWFwX3B0cikKIHsK IAlYTG9nUGFnZVJlYWRQcml2YXRlICpwcml2YXRlOwogCXN0cnVjdCBzdGF0IHN0OwpAQCAt NTE4LDcgKzUxNiw3IEBAIEluaXRXYWxSZWNvdmVyeShDb250cm9sRmlsZURhdGEgKkNvbnRy b2xGaWxlLCBib29sICp3YXNTaHV0ZG93bl9wdHIsCiAJWExvZ1JlY29yZCAqcmVjb3JkOwog CURCU3RhdGUJCWRic3RhdGVfYXRfc3RhcnR1cDsKIAlib29sCQloYXZlVGJsc3BjTWFwID0g ZmFsc2U7Ci0JYm9vbAkJaGF2ZUJhY2t1cExhYmVsID0gZmFsc2U7CisJYm9vbAkJYmFja3Vw UmVjb3ZlcnlSZXF1aXJlZCA9IGZhbHNlOwogCUNoZWNrUG9pbnQJY2hlY2tQb2ludDsKIAli b29sCQliYWNrdXBGcm9tU3RhbmRieSA9IGZhbHNlOwoKQEAgLTYwOSwxNCArNjA3LDMwIEBA IEluaXRXYWxSZWNvdmVyeShDb250cm9sRmlsZURhdGEgKkNvbnRyb2xGaWxlLCBib29sICp3 YXNTaHV0ZG93bl9wdHIsCiAJcmVwbGF5X2ltYWdlX21hc2tlZCA9IChjaGFyICopIHBhbGxv YyhCTENLU1opOwogCXByaW1hcnlfaW1hZ2VfbWFza2VkID0gKGNoYXIgKikgcGFsbG9jKEJM Q0tTWik7CgotCWlmIChyZWFkX2JhY2t1cF9sYWJlbCgmQ2hlY2tQb2ludExvYywgJkNoZWNr UG9pbnRUTEksICZiYWNrdXBFbmRSZXF1aXJlZCwKLQkJCQkJCSAgJmJhY2t1cEZyb21TdGFu ZGJ5KSkKKwlpZiAoQ29udHJvbEZpbGUtPmJhY2t1cFJlY292ZXJ5UmVxdWlyZWQpCiAJewog CQlMaXN0CSAgICp0YWJsZXNwYWNlcyA9IE5JTDsKCisJCS8qIEluaXRpYWxpemUgcmVjb3Zl cnkgZnJvbSBmaWVsZHMgc3RvcmVkIGluIHBnX2NvbnRyb2wgKi8KKwkJQ2hlY2tQb2ludExv YyA9IENvbnRyb2xGaWxlLT5iYWNrdXBDaGVja1BvaW50OworCQlDaGVja1BvaW50VExJID0g Q29udHJvbEZpbGUtPmJhY2t1cFN0YXJ0UG9pbnRUTEk7CisJCVJlZG9TdGFydExTTiA9IENv bnRyb2xGaWxlLT5iYWNrdXBTdGFydFBvaW50OworCQlSZWRvU3RhcnRUTEkgPSBDb250cm9s RmlsZS0+YmFja3VwU3RhcnRQb2ludFRMSTsKKwkJYmFja3VwRW5kUmVxdWlyZWQgPSBDb250 cm9sRmlsZS0+YmFja3VwRW5kUmVxdWlyZWQ7CisJCWJhY2t1cEZyb21TdGFuZGJ5ID0gQ29u dHJvbEZpbGUtPmJhY2t1cEZyb21TdGFuZGJ5OworCisJCS8qIENsZWFyIGZpZWxkcyB1c2Vk IHRvIGluaXRpYWxpemUgcmVjb3ZlcnkgKi8KKwkJQ29udHJvbEZpbGUtPmJhY2t1cENoZWNr UG9pbnQgPSBJbnZhbGlkWExvZ1JlY1B0cjsKKwkJQ29udHJvbEZpbGUtPmJhY2t1cFN0YXJ0 UG9pbnRUTEkgPSAwOworCQlDb250cm9sRmlsZS0+YmFja3VwUmVjb3ZlcnlSZXF1aXJlZCA9 IGZhbHNlOworCQlDb250cm9sRmlsZS0+YmFja3VwRnJvbVN0YW5kYnkgPSBmYWxzZTsKKwor CQkvKiBJbmRpY2F0ZSB0aGF0IHJlY292ZXJ5IHdhcyByZXF1ZXN0ZWQgKi8KKwkJYmFja3Vw UmVjb3ZlcnlSZXF1aXJlZCA9IHRydWU7CisKIAkJLyoKLQkJICogQXJjaGl2ZSByZWNvdmVy eSB3YXMgcmVxdWVzdGVkLCBhbmQgdGhhbmtzIHRvIHRoZSBiYWNrdXAgbGFiZWwKLQkJICog ZmlsZSwgd2Uga25vdyBob3cgZmFyIHdlIG5lZWQgdG8gcmVwbGF5IHRvIHJlYWNoIGNvbnNp c3RlbmN5LiBFbnRlcgorCQkgKiBBcmNoaXZlIHJlY292ZXJ5IHdhcyByZXF1ZXN0ZWQsIGFu ZCB0aGFua3MgdG8gdGhlIHJlY292ZXJ5CisJCSAqIGluZm8sIHdlIGtub3cgaG93IGZhciB3 ZSBuZWVkIHRvIHJlcGxheSB0byByZWFjaCBjb25zaXN0ZW5jeS4gRW50ZXIKIAkJICogYXJj aGl2ZSByZWNvdmVyeSBkaXJlY3RseS4KIAkJICovCiAJCUluQXJjaGl2ZVJlY292ZXJ5ID0g dHJ1ZTsKQEAgLTYyNCw4ICs2MzgsOSBAQCBJbml0V2FsUmVjb3ZlcnkoQ29udHJvbEZpbGVE YXRhICpDb250cm9sRmlsZSwgYm9vbCAqd2FzU2h1dGRvd25fcHRyLAogCQkJRW5hYmxlU3Rh bmRieU1vZGUoKTsKCiAJCS8qCi0JCSAqIFdoZW4gYSBiYWNrdXBfbGFiZWwgZmlsZSBpcyBw cmVzZW50LCB3ZSB3YW50IHRvIHJvbGwgZm9yd2FyZCBmcm9tCi0JCSAqIHRoZSBjaGVja3Bv aW50IGl0IGlkZW50aWZpZXMsIHJhdGhlciB0aGFuIHVzaW5nIHBnX2NvbnRyb2wuCisJCSAq IFdoZW4gYmFja3VwIHJlY292ZXJ5IGlzIHJlcXVlc3RlZCwgd2Ugd2FudCB0byByb2xsIGZv cndhcmQgZnJvbQorCQkgKiB0aGUgY2hlY2twb2ludCBpdCBpZGVudGlmaWVzLCByYXRoZXIg dGhhbiB1c2luZyB0aGUgZGVmYXVsdAorCQkgKiBjaGVja3BvaW50LgogCQkgKi8KIAkJcmVj b3JkID0gUmVhZENoZWNrcG9pbnRSZWNvcmQoeGxvZ3ByZWZldGNoZXIsIENoZWNrUG9pbnRM b2MsCiAJCQkJCQkJCQkgIENoZWNrUG9pbnRUTEkpOwpAQCAtNjQwLDkgKzY1NSw4IEBAIElu aXRXYWxSZWNvdmVyeShDb250cm9sRmlsZURhdGEgKkNvbnRyb2xGaWxlLCBib29sICp3YXNT aHV0ZG93bl9wdHIsCgogCQkJLyoKIAkJCSAqIE1ha2Ugc3VyZSB0aGF0IFJFRE8gbG9jYXRp b24gZXhpc3RzLiBUaGlzIG1heSBub3QgYmUgdGhlIGNhc2UKLQkJCSAqIGlmIHRoZXJlIHdh cyBhIGNyYXNoIGR1cmluZyBhbiBvbmxpbmUgYmFja3VwLCB3aGljaCBsZWZ0IGEKLQkJCSAq IGJhY2t1cF9sYWJlbCBhcm91bmQgdGhhdCByZWZlcmVuY2VzIGEgV0FMIHNlZ21lbnQgdGhh dCdzCi0JCQkgKiBhbHJlYWR5IGJlZW4gYXJjaGl2ZWQuCisJCQkgKiBpZiByZWNvdmVyeS5z aWduYWwgaXMgbWlzc2luZyBhbmQgdGhlIFdBTCBoYXMgYWxyZWFkeSBiZWVuCisJCQkgKiBh cmNoaXZlZC4KIAkJCSAqLwogCQkJaWYgKGNoZWNrUG9pbnQucmVkbyA8IENoZWNrUG9pbnRM b2MpCiAJCQl7CkBAIC02NTEsMjAgKzY2NSwxNiBAQCBJbml0V2FsUmVjb3ZlcnkoQ29udHJv bEZpbGVEYXRhICpDb250cm9sRmlsZSwgYm9vbCAqd2FzU2h1dGRvd25fcHRyLAogCQkJCQkJ CQljaGVja1BvaW50LlRoaXNUaW1lTGluZUlEKSkKIAkJCQkJZXJlcG9ydChGQVRBTCwKIAkJ CQkJCQkoZXJybXNnKCJjb3VsZCBub3QgZmluZCByZWRvIGxvY2F0aW9uIHJlZmVyZW5jZWQg YnkgY2hlY2twb2ludCByZWNvcmQiKSwKLQkJCQkJCQkgZXJyaGludCgiSWYgeW91IGFyZSBy ZXN0b3JpbmcgZnJvbSBhIGJhY2t1cCwgdG91Y2ggXCIlcy9yZWNvdmVyeS5zaWduYWxcIiBh bmQgYWRkIHJlcXVpcmVkIHJlY292ZXJ5IG9wdGlvbnMuXG4iCi0JCQkJCQkJCQkgIklmIHlv dSBhcmUgbm90IHJlc3RvcmluZyBmcm9tIGEgYmFja3VwLCB0cnkgcmVtb3ZpbmcgdGhlIGZp bGUgXCIlcy9iYWNrdXBfbGFiZWxcIi5cbiIKLQkJCQkJCQkJCSAiQmUgY2FyZWZ1bDogcmVt b3ZpbmcgXCIlcy9iYWNrdXBfbGFiZWxcIiB3aWxsIHJlc3VsdCBpbiBhIGNvcnJ1cHQgY2x1 c3RlciBpZiByZXN0b3JpbmcgZnJvbSBhIGJhY2t1cC4iLAotCQkJCQkJCQkJIERhdGFEaXIs IERhdGFEaXIsIERhdGFEaXIpKSk7CisJCQkJCQkJIGVycmhpbnQoIklmIHlvdSBhcmUgcmVz dG9yaW5nIGZyb20gYSBiYWNrdXAsIHRvdWNoIFwiJXMvcmVjb3Zlcnkuc2lnbmFsXCIgYW5k IGFkZCByZXF1aXJlZCByZWNvdmVyeSBvcHRpb25zLlxuIiwKKwkJCQkJCQkJCSBEYXRhRGly KSkpOwogCQkJfQogCQl9CiAJCWVsc2UKIAkJewogCQkJZXJlcG9ydChGQVRBTCwKIAkJCQkJ KGVycm1zZygiY291bGQgbm90IGxvY2F0ZSByZXF1aXJlZCBjaGVja3BvaW50IHJlY29yZCIp LAotCQkJCQkgZXJyaGludCgiSWYgeW91IGFyZSByZXN0b3JpbmcgZnJvbSBhIGJhY2t1cCwg dG91Y2ggXCIlcy9yZWNvdmVyeS5zaWduYWxcIiBhbmQgYWRkIHJlcXVpcmVkIHJlY292ZXJ5 IG9wdGlvbnMuXG4iCi0JCQkJCQkJICJJZiB5b3UgYXJlIG5vdCByZXN0b3JpbmcgZnJvbSBh IGJhY2t1cCwgdHJ5IHJlbW92aW5nIHRoZSBmaWxlIFwiJXMvYmFja3VwX2xhYmVsXCIuXG4i Ci0JCQkJCQkJICJCZSBjYXJlZnVsOiByZW1vdmluZyBcIiVzL2JhY2t1cF9sYWJlbFwiIHdp bGwgcmVzdWx0IGluIGEgY29ycnVwdCBjbHVzdGVyIGlmIHJlc3RvcmluZyBmcm9tIGEgYmFj a3VwLiIsCi0JCQkJCQkJIERhdGFEaXIsIERhdGFEaXIsIERhdGFEaXIpKSk7CisJCQkJCSBl cnJoaW50KCJJZiB5b3UgYXJlIHJlc3RvcmluZyBmcm9tIGEgYmFja3VwLCB0b3VjaCBcIiVz L3JlY292ZXJ5LnNpZ25hbFwiIGFuZCBhZGQgcmVxdWlyZWQgcmVjb3Zlcnkgb3B0aW9ucy5c biIsCisJCQkJCQkJIERhdGFEaXIpKSk7CiAJCQl3YXNTaHV0ZG93biA9IGZhbHNlOwkvKiBr ZWVwIGNvbXBpbGVyIHF1aWV0ICovCiAJCX0KCkBAIC02OTksMzUgKzcwOSwzMiBAQCBJbml0 V2FsUmVjb3ZlcnkoQ29udHJvbEZpbGVEYXRhICpDb250cm9sRmlsZSwgYm9vbCAqd2FzU2h1 dGRvd25fcHRyLAogCQkJLyogdGVsbCB0aGUgY2FsbGVyIHRvIGRlbGV0ZSBpdCBsYXRlciAq LwogCQkJaGF2ZVRibHNwY01hcCA9IHRydWU7CiAJCX0KLQotCQkvKiB0ZWxsIHRoZSBjYWxs ZXIgdG8gZGVsZXRlIGl0IGxhdGVyICovCi0JCWhhdmVCYWNrdXBMYWJlbCA9IHRydWU7CiAJ fQogCWVsc2UKIAl7CiAJCS8qCi0JCSAqIElmIHRhYmxlc3BhY2VfbWFwIGZpbGUgaXMgcHJl c2VudCB3aXRob3V0IGJhY2t1cF9sYWJlbCBmaWxlLCB0aGVyZQotCQkgKiBpcyBubyB1c2Ug b2Ygc3VjaCBmaWxlLiAgVGhlcmUgaXMgbm8gaGFybSBpbiByZXRhaW5pbmcgaXQsIGJ1dCBp dAotCQkgKiBpcyBiZXR0ZXIgdG8gZ2V0IHJpZCBvZiB0aGUgbWFwIGZpbGUgc28gdGhhdCB3 ZSBkb24ndCBoYXZlIGFueQorCQkgKiBJZiB0YWJsZXNwYWNlX21hcCBmaWxlIGlzIHByZXNl bnQgd2l0aG91dCBiYWNrdXAgcmVjb3ZlcnkgcmVxdWVzdGVkLAorCQkgKiB0aGVyZSBpcyBu byB1c2Ugb2Ygc3VjaCBmaWxlLiAgVGhlcmUgaXMgbm8gaGFybSBpbiByZXRhaW5pbmcgaXQs IGJ1dAorCQkgKiBpdCBpcyBiZXR0ZXIgdG8gZ2V0IHJpZCBvZiB0aGUgbWFwIGZpbGUgc28g dGhhdCB3ZSBkb24ndCBoYXZlIGFueQogCQkgKiByZWR1bmRhbnQgZmlsZSBpbiBkYXRhIGRp cmVjdG9yeSBhbmQgaXQgd2lsbCBhdm9pZCBhbnkgc29ydCBvZgogCQkgKiBjb25mdXNpb24u ICBJdCBzZWVtcyBwcnVkZW50IHRob3VnaCB0byBqdXN0IHJlbmFtZSB0aGUgZmlsZSBvdXQg b2YKIAkJICogdGhlIHdheSByYXRoZXIgdGhhbiBkZWxldGUgaXQgY29tcGxldGVseSwgYWxz byB3ZSBpZ25vcmUgYW55IGVycm9yCiAJCSAqIHRoYXQgb2NjdXJzIGluIHJlbmFtZSBvcGVy YXRpb24gYXMgZXZlbiBpZiBtYXAgZmlsZSBpcyBwcmVzZW50Ci0JCSAqIHdpdGhvdXQgYmFj a3VwX2xhYmVsIGZpbGUsIGl0IGlzIGhhcm1sZXNzLgorCQkgKiB3aXRob3V0IGJhY2t1cCBy ZWNvdmVyeSByZXF1ZXN0ZWQsIGl0IGlzIGhhcm1sZXNzLgogCQkgKi8KIAkJaWYgKHN0YXQo VEFCTEVTUEFDRV9NQVAsICZzdCkgPT0gMCkKIAkJewogCQkJdW5saW5rKFRBQkxFU1BBQ0Vf TUFQX09MRCk7CiAJCQlpZiAoZHVyYWJsZV9yZW5hbWUoVEFCTEVTUEFDRV9NQVAsIFRBQkxF U1BBQ0VfTUFQX09MRCwgREVCVUcxKSA9PSAwKQogCQkJCWVyZXBvcnQoTE9HLAotCQkJCQkJ KGVycm1zZygiaWdub3JpbmcgZmlsZSBcIiVzXCIgYmVjYXVzZSBubyBmaWxlIFwiJXNcIiBl eGlzdHMiLAotCQkJCQkJCQlUQUJMRVNQQUNFX01BUCwgQkFDS1VQX0xBQkVMX0ZJTEUpLAor CQkJCQkJKGVycm1zZygiaWdub3JpbmcgZmlsZSBcIiVzXCIgYmVjYXVzZSBiYWNrdXAgcmVj b3Zlcnkgd2FzIG5vdCByZXF1ZXN0ZWQiLAorCQkJCQkJCQlUQUJMRVNQQUNFX01BUCksCiAJ CQkJCQkgZXJyZGV0YWlsKCJGaWxlIFwiJXNcIiB3YXMgcmVuYW1lZCB0byBcIiVzXCIuIiwK IAkJCQkJCQkJICAgVEFCTEVTUEFDRV9NQVAsIFRBQkxFU1BBQ0VfTUFQX09MRCkpKTsKIAkJ CWVsc2UKIAkJCQllcmVwb3J0KExPRywKLQkJCQkJCShlcnJtc2coImlnbm9yaW5nIGZpbGUg XCIlc1wiIGJlY2F1c2Ugbm8gZmlsZSBcIiVzXCIgZXhpc3RzIiwKLQkJCQkJCQkJVEFCTEVT UEFDRV9NQVAsIEJBQ0tVUF9MQUJFTF9GSUxFKSwKKwkJCQkJCShlcnJtc2coImlnbm9yaW5n IGZpbGUgXCIlc1wiIGJlY2F1c2UgYmFja3VwIHJlY292ZXJ5IHdhcyBub3QgcmVxdWVzdGVk IiwKKwkJCQkJCQkJVEFCTEVTUEFDRV9NQVApLAogCQkJCQkJIGVycmRldGFpbCgiQ291bGQg bm90IHJlbmFtZSBmaWxlIFwiJXNcIiB0byBcIiVzXCI6ICVtLiIsCiAJCQkJCQkJCSAgIFRB QkxFU1BBQ0VfTUFQLCBUQUJMRVNQQUNFX01BUF9PTEQpKSk7CiAJCX0KQEAgLTkzMiw3ICs5 MzksNyBAQCBJbml0V2FsUmVjb3ZlcnkoQ29udHJvbEZpbGVEYXRhICpDb250cm9sRmlsZSwg Ym9vbCAqd2FzU2h1dGRvd25fcHRyLAogCQkgKiBBbnkgb3RoZXIgc3RhdGUgaW5kaWNhdGVz IHRoYXQgdGhlIGJhY2t1cCBzb21laG93IGJlY2FtZSBjb3JydXB0ZWQKIAkJICogYW5kIHdl IGNhbid0IHNlbnNpYmx5IGNvbnRpbnVlIHdpdGggcmVjb3ZlcnkuCiAJCSAqLwotCQlpZiAo aGF2ZUJhY2t1cExhYmVsKQorCQlpZiAoYmFja3VwUmVjb3ZlcnlSZXF1aXJlZCkKIAkJewog CQkJQ29udHJvbEZpbGUtPmJhY2t1cFN0YXJ0UG9pbnQgPSBjaGVja1BvaW50LnJlZG87CiAJ CQlDb250cm9sRmlsZS0+YmFja3VwRW5kUmVxdWlyZWQgPSBiYWNrdXBFbmRSZXF1aXJlZDsK QEAgLTk0Miw3ICs5NDksNyBAQCBJbml0V2FsUmVjb3ZlcnkoQ29udHJvbEZpbGVEYXRhICpD b250cm9sRmlsZSwgYm9vbCAqd2FzU2h1dGRvd25fcHRyLAogCQkJCWlmIChkYnN0YXRlX2F0 X3N0YXJ0dXAgIT0gREJfSU5fQVJDSElWRV9SRUNPVkVSWSAmJgogCQkJCQlkYnN0YXRlX2F0 X3N0YXJ0dXAgIT0gREJfU0hVVERPV05FRF9JTl9SRUNPVkVSWSkKIAkJCQkJZXJlcG9ydChG QVRBTCwKLQkJCQkJCQkoZXJybXNnKCJiYWNrdXBfbGFiZWwgY29udGFpbnMgZGF0YSBpbmNv bnNpc3RlbnQgd2l0aCBjb250cm9sIGZpbGUiKSwKKwkJCQkJCQkoZXJybXNnKCJwZ19jb250 cm9sIGNvbnRhaW5zIGluY29uc2lzdGVudCBkYXRhIGZvciBzdGFuZGJ5IGJhY2t1cCIpLAog CQkJCQkJCSBlcnJoaW50KCJUaGlzIG1lYW5zIHRoYXQgdGhlIGJhY2t1cCBpcyBjb3JydXB0 ZWQgYW5kIHlvdSB3aWxsICIKIAkJCQkJCQkJCSAiaGF2ZSB0byB1c2UgYW5vdGhlciBiYWNr dXAgZm9yIHJlY292ZXJ5LiIpKSk7CiAJCQkJQ29udHJvbEZpbGUtPmJhY2t1cEVuZFBvaW50 ID0gQ29udHJvbEZpbGUtPm1pblJlY292ZXJ5UG9pbnQ7CkBAIC05NzIsNyArOTc5LDYgQEAg SW5pdFdhbFJlY292ZXJ5KENvbnRyb2xGaWxlRGF0YSAqQ29udHJvbEZpbGUsIGJvb2wgKndh c1NodXRkb3duX3B0ciwKIAltaXNzaW5nQ29udHJlY1B0ciA9IEludmFsaWRYTG9nUmVjUHRy OwoKIAkqd2FzU2h1dGRvd25fcHRyID0gd2FzU2h1dGRvd247Ci0JKmhhdmVCYWNrdXBMYWJl bF9wdHIgPSBoYXZlQmFja3VwTGFiZWw7CiAJKmhhdmVUYmxzcGNNYXBfcHRyID0gaGF2ZVRi bHNwY01hcDsKIH0KCkBAIC0xMTQ1LDE1NCArMTE1MSw2IEBAIHZhbGlkYXRlUmVjb3ZlcnlQ YXJhbWV0ZXJzKHZvaWQpCiAJfQogfQoKLS8qCi0gKiByZWFkX2JhY2t1cF9sYWJlbDogY2hl Y2sgdG8gc2VlIGlmIGEgYmFja3VwX2xhYmVsIGZpbGUgaXMgcHJlc2VudAotICoKLSAqIElm IHdlIHNlZSBhIGJhY2t1cF9sYWJlbCBkdXJpbmcgcmVjb3ZlcnksIHdlIGFzc3VtZSB0aGF0 IHdlIGFyZSByZWNvdmVyaW5nCi0gKiBmcm9tIGEgYmFja3VwIGR1bXAgZmlsZSwgYW5kIHdl IHRoZXJlZm9yZSByb2xsIGZvcndhcmQgZnJvbSB0aGUgY2hlY2twb2ludAotICogaWRlbnRp ZmllZCBieSB0aGUgbGFiZWwgZmlsZSwgTk9UIHdoYXQgcGdfY29udHJvbCBzYXlzLiAgVGhp cyBhdm9pZHMgdGhlCi0gKiBwcm9ibGVtIHRoYXQgcGdfY29udHJvbCBtaWdodCBoYXZlIGJl ZW4gYXJjaGl2ZWQgb25lIG9yIG1vcmUgY2hlY2twb2ludHMKLSAqIGxhdGVyIHRoYW4gdGhl IHN0YXJ0IG9mIHRoZSBkdW1wLCBhbmQgc28gaWYgd2UgcmVseSBvbiBpdCBhcyB0aGUgc3Rh cnQKLSAqIHBvaW50LCB3ZSB3aWxsIGZhaWwgdG8gcmVzdG9yZSBhIGNvbnNpc3RlbnQgZGF0 YWJhc2Ugc3RhdGUuCi0gKgotICogUmV0dXJucyB0cnVlIGlmIGEgYmFja3VwX2xhYmVsIHdh cyBmb3VuZCAoYW5kIGZpbGxzIHRoZSBjaGVja3BvaW50Ci0gKiBsb2NhdGlvbiBhbmQgVExJ IGludG8gKmNoZWNrUG9pbnRMb2MgYW5kICpiYWNrdXBMYWJlbFRMSSwgcmVzcGVjdGl2ZWx5 KTsKLSAqIHJldHVybnMgZmFsc2UgaWYgbm90LiBJZiB0aGlzIGJhY2t1cF9sYWJlbCBjYW1l IGZyb20gYSBzdHJlYW1lZCBiYWNrdXAsCi0gKiAqYmFja3VwRW5kUmVxdWlyZWQgaXMgc2V0 IHRvIHRydWUuIElmIHRoaXMgYmFja3VwX2xhYmVsIHdhcyBjcmVhdGVkIGR1cmluZwotICog cmVjb3ZlcnksICpiYWNrdXBGcm9tU3RhbmRieSBpcyBzZXQgdG8gdHJ1ZS4KLSAqCi0gKiBB bHNvIHNldHMgdGhlIGdsb2JhbCB2YXJpYWJsZXMgUmVkb1N0YXJ0TFNOIGFuZCBSZWRvU3Rh cnRUTEkgd2l0aCB0aGUgTFNOCi0gKiBhbmQgVExJIHJlYWQgZnJvbSB0aGUgYmFja3VwIGZp bGUuCi0gKi8KLXN0YXRpYyBib29sCi1yZWFkX2JhY2t1cF9sYWJlbChYTG9nUmVjUHRyICpj aGVja1BvaW50TG9jLCBUaW1lTGluZUlEICpiYWNrdXBMYWJlbFRMSSwKLQkJCQkgIGJvb2wg KmJhY2t1cEVuZFJlcXVpcmVkLCBib29sICpiYWNrdXBGcm9tU3RhbmRieSkKLXsKLQljaGFy CQlzdGFydHhsb2dmaWxlbmFtZVtNQVhGTkFNRUxFTl07Ci0JVGltZUxpbmVJRAl0bGlfZnJv bV93YWxzZWcsCi0JCQkJdGxpX2Zyb21fZmlsZTsKLQlGSUxFCSAgICpsZnA7Ci0JY2hhcgkJ Y2g7Ci0JY2hhcgkJYmFja3VwdHlwZVsyMF07Ci0JY2hhcgkJYmFja3VwZnJvbVsyMF07Ci0J Y2hhcgkJYmFja3VwbGFiZWxbTUFYUEdQQVRIXTsKLQljaGFyCQliYWNrdXB0aW1lWzEyOF07 Ci0JdWludDMyCQloaSwKLQkJCQlsbzsKLQotCS8qIHN1cHByZXNzIHBvc3NpYmxlIHVuaW5p dGlhbGl6ZWQtdmFyaWFibGUgd2FybmluZ3MgKi8KLQkqY2hlY2tQb2ludExvYyA9IEludmFs aWRYTG9nUmVjUHRyOwotCSpiYWNrdXBMYWJlbFRMSSA9IDA7Ci0JKmJhY2t1cEVuZFJlcXVp cmVkID0gZmFsc2U7Ci0JKmJhY2t1cEZyb21TdGFuZGJ5ID0gZmFsc2U7Ci0KLQkvKgotCSAq IFNlZSBpZiBsYWJlbCBmaWxlIGlzIHByZXNlbnQKLQkgKi8KLQlsZnAgPSBBbGxvY2F0ZUZp bGUoQkFDS1VQX0xBQkVMX0ZJTEUsICJyIik7Ci0JaWYgKCFsZnApCi0JewotCQlpZiAoZXJy bm8gIT0gRU5PRU5UKQotCQkJZXJlcG9ydChGQVRBTCwKLQkJCQkJKGVycmNvZGVfZm9yX2Zp bGVfYWNjZXNzKCksCi0JCQkJCSBlcnJtc2coImNvdWxkIG5vdCByZWFkIGZpbGUgXCIlc1wi OiAlbSIsCi0JCQkJCQkJQkFDS1VQX0xBQkVMX0ZJTEUpKSk7Ci0JCXJldHVybiBmYWxzZTsJ CQkvKiBpdCdzIG5vdCB0aGVyZSwgYWxsIGlzIGZpbmUgKi8KLQl9Ci0KLQkvKgotCSAqIFJl YWQgYW5kIHBhcnNlIHRoZSBTVEFSVCBXQUwgTE9DQVRJT04gYW5kIENIRUNLUE9JTlQgbGlu ZXMgKHRoaXMgY29kZQotCSAqIGlzIHByZXR0eSBjcnVkZSwgYnV0IHdlIGFyZSBub3QgZXhw ZWN0aW5nIGFueSB2YXJpYWJpbGl0eSBpbiB0aGUgZmlsZQotCSAqIGZvcm1hdCkuCi0JICov Ci0JaWYgKGZzY2FuZihsZnAsICJTVEFSVCBXQUwgTE9DQVRJT046ICVYLyVYIChmaWxlICUw OFglMTZzKSVjIiwKLQkJCSAgICZoaSwgJmxvLCAmdGxpX2Zyb21fd2Fsc2VnLCBzdGFydHhs b2dmaWxlbmFtZSwgJmNoKSAhPSA1IHx8IGNoICE9ICdcbicpCi0JCWVyZXBvcnQoRkFUQUws Ci0JCQkJKGVycmNvZGUoRVJSQ09ERV9PQkpFQ1RfTk9UX0lOX1BSRVJFUVVJU0lURV9TVEFU RSksCi0JCQkJIGVycm1zZygiaW52YWxpZCBkYXRhIGluIGZpbGUgXCIlc1wiIiwgQkFDS1VQ X0xBQkVMX0ZJTEUpKSk7Ci0JUmVkb1N0YXJ0TFNOID0gKCh1aW50NjQpIGhpKSA8PCAzMiB8 IGxvOwotCVJlZG9TdGFydFRMSSA9IHRsaV9mcm9tX3dhbHNlZzsKLQlpZiAoZnNjYW5mKGxm cCwgIkNIRUNLUE9JTlQgTE9DQVRJT046ICVYLyVYJWMiLAotCQkJICAgJmhpLCAmbG8sICZj aCkgIT0gMyB8fCBjaCAhPSAnXG4nKQotCQllcmVwb3J0KEZBVEFMLAotCQkJCShlcnJjb2Rl KEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAotCQkJCSBlcnJt c2coImludmFsaWQgZGF0YSBpbiBmaWxlIFwiJXNcIiIsIEJBQ0tVUF9MQUJFTF9GSUxFKSkp OwotCSpjaGVja1BvaW50TG9jID0gKCh1aW50NjQpIGhpKSA8PCAzMiB8IGxvOwotCSpiYWNr dXBMYWJlbFRMSSA9IHRsaV9mcm9tX3dhbHNlZzsKLQotCS8qCi0JICogQkFDS1VQIE1FVEhP RCBsZXRzIHVzIGtub3cgaWYgdGhpcyB3YXMgYSB0eXBpY2FsIGJhY2t1cCAoInN0cmVhbWVk IiwKLQkgKiB3aGljaCBjb3VsZCBtZWFuIGVpdGhlciBwZ19iYXNlYmFja3VwIG9yIHRoZSBw Z19iYWNrdXBfc3RhcnQvc3RvcAotCSAqIG1ldGhvZCB3YXMgdXNlZCkgb3IgaWYgdGhpcyBs YWJlbCBjYW1lIGZyb20gc29tZXdoZXJlIGVsc2UgKHRoZSBvbmx5Ci0JICogb3RoZXIgb3B0 aW9uIHRvZGF5IGJlaW5nIGZyb20gcGdfcmV3aW5kKS4gIElmIHRoaXMgd2FzIGEgc3RyZWFt ZWQKLQkgKiBiYWNrdXAgdGhlbiB3ZSBrbm93IHRoYXQgd2UgbmVlZCB0byBwbGF5IHRocm91 Z2ggdW50aWwgd2UgZ2V0IHRvIHRoZQotCSAqIGVuZCBvZiB0aGUgV0FMIHdoaWNoIHdhcyBn ZW5lcmF0ZWQgZHVyaW5nIHRoZSBiYWNrdXAgKGF0IHdoaWNoIHBvaW50IHdlCi0JICogd2ls bCBoYXZlIHJlYWNoZWQgY29uc2lzdGVuY3kgYW5kIGJhY2t1cEVuZFJlcXVpcmVkIHdpbGwg YmUgcmVzZXQgdG8gYmUKLQkgKiBmYWxzZSkuCi0JICovCi0JaWYgKGZzY2FuZihsZnAsICJC QUNLVVAgTUVUSE9EOiAlMTlzXG4iLCBiYWNrdXB0eXBlKSA9PSAxKQotCXsKLQkJaWYgKHN0 cmNtcChiYWNrdXB0eXBlLCAic3RyZWFtZWQiKSA9PSAwKQotCQkJKmJhY2t1cEVuZFJlcXVp cmVkID0gdHJ1ZTsKLQl9Ci0KLQkvKgotCSAqIEJBQ0tVUCBGUk9NIGxldHMgdXMga25vdyBp ZiB0aGlzIHdhcyBmcm9tIGEgcHJpbWFyeSBvciBhIHN0YW5kYnkuICBJZgotCSAqIGl0IHdh cyBmcm9tIGEgc3RhbmRieSwgd2UnbGwgZG91YmxlLWNoZWNrIHRoYXQgdGhlIGNvbnRyb2wg ZmlsZSBzdGF0ZQotCSAqIG1hdGNoZXMgdGhhdCBvZiBhIHN0YW5kYnkuCi0JICovCi0JaWYg KGZzY2FuZihsZnAsICJCQUNLVVAgRlJPTTogJTE5c1xuIiwgYmFja3VwZnJvbSkgPT0gMSkK LQl7Ci0JCWlmIChzdHJjbXAoYmFja3VwZnJvbSwgInN0YW5kYnkiKSA9PSAwKQotCQkJKmJh Y2t1cEZyb21TdGFuZGJ5ID0gdHJ1ZTsKLQl9Ci0KLQkvKgotCSAqIFBhcnNlIFNUQVJUIFRJ TUUgYW5kIExBQkVMLiBUaG9zZSBhcmUgbm90IG1hbmRhdG9yeSBmaWVsZHMgZm9yIHJlY292 ZXJ5Ci0JICogYnV0IGNoZWNraW5nIGZvciB0aGVpciBwcmVzZW5jZSBpcyB1c2VmdWwgZm9y IGRlYnVnZ2luZyBhbmQgdGhlIG5leHQKLQkgKiBzYW5pdHkgY2hlY2tzLiBDb3BlIGFsc28g d2l0aCB0aGUgZmFjdCB0aGF0IHRoZSByZXN1bHQgYnVmZmVycyBoYXZlIGEKLQkgKiBwcmUt YWxsb2NhdGVkIHNpemUsIGhlbmNlIGlmIHRoZSBiYWNrdXBfbGFiZWwgZmlsZSBoYXMgYmVl biBnZW5lcmF0ZWQKLQkgKiB3aXRoIHN0cmluZ3MgbG9uZ2VyIHRoYW4gdGhlIG1heGltdW0g YXNzdW1lZCBoZXJlIGFuIGluY29ycmVjdCBwYXJzaW5nCi0JICogaGFwcGVucy4gVGhhdCdz IGZpbmUgYXMgb25seSBtaW5vciBjb25zaXN0ZW5jeSBjaGVja3MgYXJlIGRvbmUKLQkgKiBh ZnRlcndhcmRzLgotCSAqLwotCWlmIChmc2NhbmYobGZwLCAiU1RBUlQgVElNRTogJTEyN1te XG5dXG4iLCBiYWNrdXB0aW1lKSA9PSAxKQotCQllcmVwb3J0KERFQlVHMSwKLQkJCQkoZXJy bXNnX2ludGVybmFsKCJiYWNrdXAgdGltZSAlcyBpbiBmaWxlIFwiJXNcIiIsCi0JCQkJCQkJ CSBiYWNrdXB0aW1lLCBCQUNLVVBfTEFCRUxfRklMRSkpKTsKLQotCWlmIChmc2NhbmYobGZw LCAiTEFCRUw6ICUxMDIzW15cbl1cbiIsIGJhY2t1cGxhYmVsKSA9PSAxKQotCQllcmVwb3J0 KERFQlVHMSwKLQkJCQkoZXJybXNnX2ludGVybmFsKCJiYWNrdXAgbGFiZWwgJXMgaW4gZmls ZSBcIiVzXCIiLAotCQkJCQkJCQkgYmFja3VwbGFiZWwsIEJBQ0tVUF9MQUJFTF9GSUxFKSkp OwotCi0JLyoKLQkgKiBTVEFSVCBUSU1FTElORSBpcyBuZXcgYXMgb2YgMTEuIEl0cyBwYXJz aW5nIGlzIG5vdCBtYW5kYXRvcnksIHN0aWxsIHVzZQotCSAqIGl0IGFzIGEgc2FuaXR5IGNo ZWNrIGlmIHByZXNlbnQuCi0JICovCi0JaWYgKGZzY2FuZihsZnAsICJTVEFSVCBUSU1FTElO RTogJXVcbiIsICZ0bGlfZnJvbV9maWxlKSA9PSAxKQotCXsKLQkJaWYgKHRsaV9mcm9tX3dh bHNlZyAhPSB0bGlfZnJvbV9maWxlKQotCQkJZXJlcG9ydChGQVRBTCwKLQkJCQkJKGVycmNv ZGUoRVJSQ09ERV9PQkpFQ1RfTk9UX0lOX1BSRVJFUVVJU0lURV9TVEFURSksCi0JCQkJCSBl cnJtc2coImludmFsaWQgZGF0YSBpbiBmaWxlIFwiJXNcIiIsIEJBQ0tVUF9MQUJFTF9GSUxF KSwKLQkJCQkJIGVycmRldGFpbCgiVGltZWxpbmUgSUQgcGFyc2VkIGlzICV1LCBidXQgZXhw ZWN0ZWQgJXUuIiwKLQkJCQkJCQkgICB0bGlfZnJvbV9maWxlLCB0bGlfZnJvbV93YWxzZWcp KSk7Ci0KLQkJZXJlcG9ydChERUJVRzEsCi0JCQkJKGVycm1zZ19pbnRlcm5hbCgiYmFja3Vw IHRpbWVsaW5lICV1IGluIGZpbGUgXCIlc1wiIiwKLQkJCQkJCQkJIHRsaV9mcm9tX2ZpbGUs IEJBQ0tVUF9MQUJFTF9GSUxFKSkpOwotCX0KLQotCWlmIChmZXJyb3IobGZwKSB8fCBGcmVl RmlsZShsZnApKQotCQllcmVwb3J0KEZBVEFMLAotCQkJCShlcnJjb2RlX2Zvcl9maWxlX2Fj Y2VzcygpLAotCQkJCSBlcnJtc2coImNvdWxkIG5vdCByZWFkIGZpbGUgXCIlc1wiOiAlbSIs Ci0JCQkJCQlCQUNLVVBfTEFCRUxfRklMRSkpKTsKLQotCXJldHVybiB0cnVlOwotfQotCiAv KgogICogcmVhZF90YWJsZXNwYWNlX21hcDogY2hlY2sgdG8gc2VlIGlmIGEgdGFibGVzcGFj ZV9tYXAgZmlsZSBpcyBwcmVzZW50CiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYmFj a3VwL2Jhc2ViYWNrdXAuYyBiL3NyYy9iYWNrZW5kL2JhY2t1cC9iYXNlYmFja3VwLmMKaW5k ZXggYjUzN2Y0NjIxOTcuLjAxZDA5ZGJkZDIxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9i YWNrdXAvYmFzZWJhY2t1cC5jCisrKyBiL3NyYy9iYWNrZW5kL2JhY2t1cC9iYXNlYmFja3Vw LmMKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlICJiYWNrdXAvYmFzZWJhY2t1cC5oIgog I2luY2x1ZGUgImJhY2t1cC9iYXNlYmFja3VwX3NpbmsuaCIKICNpbmNsdWRlICJiYWNrdXAv YmFzZWJhY2t1cF90YXJnZXQuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2NvbnRyb2wuaCIK ICNpbmNsdWRlICJjb21tYW5kcy9kZWZyZW0uaCIKICNpbmNsdWRlICJjb21tb24vY29tcHJl c3Npb24uaCIKICNpbmNsdWRlICJjb21tb24vZmlsZV9wZXJtLmgiCkBAIC05NCw3ICs5NSw3 IEBAIHN0YXRpYyBib29sIHZlcmlmeV9wYWdlX2NoZWNrc3VtKFBhZ2UgcGFnZSwgWExvZ1Jl Y1B0ciBzdGFydF9sc24sCiAJCQkJCQkJCSBCbG9ja051bWJlciBibGtubywKIAkJCQkJCQkJ IHVpbnQxNiAqZXhwZWN0ZWRfY2hlY2tzdW0pOwogc3RhdGljIHZvaWQgc2VuZEZpbGVXaXRo Q29udGVudChiYnNpbmsgKnNpbmssIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAotCQkJCQkJCQlj b25zdCBjaGFyICpjb250ZW50LAorCQkJCQkJCQljb25zdCBjaGFyICpjb250ZW50LCBpbnQg bGVuLAogCQkJCQkJCQliYWNrdXBfbWFuaWZlc3RfaW5mbyAqbWFuaWZlc3QpOwogc3RhdGlj IGludDY0IF90YXJXcml0ZUhlYWRlcihiYnNpbmsgKnNpbmssIGNvbnN0IGNoYXIgKmZpbGVu YW1lLAogCQkJCQkJCSBjb25zdCBjaGFyICpsaW5rdGFyZ2V0LCBzdHJ1Y3Qgc3RhdCAqc3Rh dGJ1ZiwKQEAgLTE5MiwxMCArMTkzLDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBleGNsdWRl X2xpc3RfaXRlbSBleGNsdWRlRmlsZXNbXSA9CiAJe1JFTENBQ0hFX0lOSVRfRklMRU5BTUUs IHRydWV9LAoKIAkvKgotCSAqIGJhY2t1cF9sYWJlbCBhbmQgdGFibGVzcGFjZV9tYXAgc2hv dWxkIG5vdCBleGlzdCBpbiBhIHJ1bm5pbmcgY2x1c3RlcgotCSAqIGNhcGFibGUgb2YgZG9p bmcgYW4gb25saW5lIGJhY2t1cCwgYnV0IGV4Y2x1ZGUgdGhlbSBqdXN0IGluIGNhc2UuCisJ ICogdGFibGVzcGFjZV9tYXAgc2hvdWxkIG5vdCBleGlzdCBpbiBhIHJ1bm5pbmcgY2x1c3Rl ciBjYXBhYmxlIG9mIGRvaW5nCisJICogYW4gb25saW5lIGJhY2t1cCwgYnV0IGV4Y2x1ZGUg aXQganVzdCBpbiBjYXNlLgogCSAqLwotCXtCQUNLVVBfTEFCRUxfRklMRSwgZmFsc2V9LAog CXtUQUJMRVNQQUNFX01BUCwgZmFsc2V9LAoKIAkvKgpAQCAtMzI1LDIzICszMjUsMTUgQEAg cGVyZm9ybV9iYXNlX2JhY2t1cChiYXNlYmFja3VwX29wdGlvbnMgKm9wdCwgYmJzaW5rICpz aW5rKQoKIAkJCWlmICh0aS0+cGF0aCA9PSBOVUxMKQogCQkJewotCQkJCXN0cnVjdCBzdGF0 IHN0YXRidWY7CiAJCQkJYm9vbAkJc2VuZHRibHNwY2xpbmtzID0gdHJ1ZTsKLQkJCQljaGFy CSAgICpiYWNrdXBfbGFiZWw7CgogCQkJCWJic2lua19iZWdpbl9hcmNoaXZlKHNpbmssICJi YXNlLnRhciIpOwoKLQkJCQkvKiBJbiB0aGUgbWFpbiB0YXIsIGluY2x1ZGUgdGhlIGJhY2t1 cF9sYWJlbCBmaXJzdC4uLiAqLwotCQkJCWJhY2t1cF9sYWJlbCA9IGJ1aWxkX2JhY2t1cF9j b250ZW50KGJhY2t1cF9zdGF0ZSwgZmFsc2UpOwotCQkJCXNlbmRGaWxlV2l0aENvbnRlbnQo c2luaywgQkFDS1VQX0xBQkVMX0ZJTEUsCi0JCQkJCQkJCQliYWNrdXBfbGFiZWwsICZtYW5p ZmVzdCk7Ci0JCQkJcGZyZWUoYmFja3VwX2xhYmVsKTsKLQotCQkJCS8qIFRoZW4gdGhlIHRh Ymxlc3BhY2VfbWFwIGZpbGUsIGlmIHJlcXVpcmVkLi4uICovCisJCQkJLyogU2VuZCB0aGUg dGFibGVzcGFjZV9tYXAgZmlsZSwgaWYgcmVxdWlyZWQuLi4gKi8KIAkJCQlpZiAob3B0LT5z ZW5kdGJsc3BjbWFwZmlsZSkKIAkJCQl7CiAJCQkJCXNlbmRGaWxlV2l0aENvbnRlbnQoc2lu aywgVEFCTEVTUEFDRV9NQVAsCi0JCQkJCQkJCQkJdGFibGVzcGFjZV9tYXAtPmRhdGEsICZt YW5pZmVzdCk7CisJCQkJCQkJCQkJdGFibGVzcGFjZV9tYXAtPmRhdGEsIC0xLCAmbWFuaWZl c3QpOwogCQkJCQlzZW5kdGJsc3BjbGlua3MgPSBmYWxzZTsKIAkJCQl9CgpAQCAtMzQ5LDE0 ICszNDEsMTQgQEAgcGVyZm9ybV9iYXNlX2JhY2t1cChiYXNlYmFja3VwX29wdGlvbnMgKm9w dCwgYmJzaW5rICpzaW5rKQogCQkJCXNlbmREaXIoc2luaywgIi4iLCAxLCBmYWxzZSwgc3Rh dGUudGFibGVzcGFjZXMsCiAJCQkJCQlzZW5kdGJsc3BjbGlua3MsICZtYW5pZmVzdCwgSW52 YWxpZE9pZCk7CgotCQkJCS8qIC4uLiBhbmQgcGdfY29udHJvbCBhZnRlciBldmVyeXRoaW5n IGVsc2UuICovCi0JCQkJaWYgKGxzdGF0KFhMT0dfQ09OVFJPTF9GSUxFLCAmc3RhdGJ1Zikg IT0gMCkKLQkJCQkJZXJlcG9ydChFUlJPUiwKLQkJCQkJCQkoZXJyY29kZV9mb3JfZmlsZV9h Y2Nlc3MoKSwKLQkJCQkJCQkgZXJybXNnKCJjb3VsZCBub3Qgc3RhdCBmaWxlIFwiJXNcIjog JW0iLAotCQkJCQkJCQkJWExPR19DT05UUk9MX0ZJTEUpKSk7Ci0JCQkJc2VuZEZpbGUoc2lu aywgWExPR19DT05UUk9MX0ZJTEUsIFhMT0dfQ09OVFJPTF9GSUxFLCAmc3RhdGJ1ZiwKLQkJ CQkJCSBmYWxzZSwgSW52YWxpZE9pZCwgSW52YWxpZE9pZCwgJm1hbmlmZXN0KTsKKwkJCQkv KiBFbmQgdGhlIGJhY2t1cCBiZWZvcmUgc2VuZGluZyBwZ19jb250cm9sICovCisJCQkJYmFz ZWJhY2t1cF9wcm9ncmVzc193YWl0X3dhbF9hcmNoaXZlKCZzdGF0ZSk7CisJCQkJZG9fcGdf YmFja3VwX3N0b3AoYmFja3VwX3N0YXRlLCAhb3B0LT5ub3dhaXQpOworCisJCQkJLyogU2Vu ZCBjb3B5IG9mIHBnX2NvbnRyb2wgY29udGFpbmluZyByZWNvdmVyeSBpbmZvICovCisJCQkJ c2VuZEZpbGVXaXRoQ29udGVudChzaW5rLCBYTE9HX0NPTlRST0xfRklMRSwKKwkJCQkJCQkJ ICAgIChjaGFyICopYmFja3VwX3N0YXRlLT5jb250cm9sRmlsZSwKKwkJCQkJCQkJCVBHX0NP TlRST0xfTUFYX1NBRkVfU0laRSwgJm1hbmlmZXN0KTsKIAkJCX0KIAkJCWVsc2UKIAkJCXsK QEAgLTM5MCw5ICszODIsNiBAQCBwZXJmb3JtX2Jhc2VfYmFja3VwKGJhc2ViYWNrdXBfb3B0 aW9ucyAqb3B0LCBiYnNpbmsgKnNpbmspCiAJCQl9CiAJCX0KCi0JCWJhc2ViYWNrdXBfcHJv Z3Jlc3Nfd2FpdF93YWxfYXJjaGl2ZSgmc3RhdGUpOwotCQlkb19wZ19iYWNrdXBfc3RvcChi YWNrdXBfc3RhdGUsICFvcHQtPm5vd2FpdCk7Ci0KIAkJZW5kcHRyID0gYmFja3VwX3N0YXRl LT5zdG9wcG9pbnQ7CiAJCWVuZHRsaSA9IGJhY2t1cF9zdGF0ZS0+c3RvcHRsaTsKCkBAIC02 MDEsNyArNTkwLDcgQEAgcGVyZm9ybV9iYXNlX2JhY2t1cChiYXNlYmFja3VwX29wdGlvbnMg Km9wdCwgYmJzaW5rICpzaW5rKQogCQkJICogY29tcGxldGUgc2VnbWVudC4KIAkJCSAqLwog CQkJU3RhdHVzRmlsZVBhdGgocGF0aGJ1Ziwgd2FsRmlsZU5hbWUsICIuZG9uZSIpOwotCQkJ c2VuZEZpbGVXaXRoQ29udGVudChzaW5rLCBwYXRoYnVmLCAiIiwgJm1hbmlmZXN0KTsKKwkJ CXNlbmRGaWxlV2l0aENvbnRlbnQoc2luaywgcGF0aGJ1ZiwgIiIsIC0xLCAmbWFuaWZlc3Qp OwogCQl9CgogCQkvKgpAQCAtNjI5LDcgKzYxOCw3IEBAIHBlcmZvcm1fYmFzZV9iYWNrdXAo YmFzZWJhY2t1cF9vcHRpb25zICpvcHQsIGJic2luayAqc2luaykKCiAJCQkvKiB1bmNvbmRp dGlvbmFsbHkgbWFyayBmaWxlIGFzIGFyY2hpdmVkICovCiAJCQlTdGF0dXNGaWxlUGF0aChw YXRoYnVmLCBmbmFtZSwgIi5kb25lIik7Ci0JCQlzZW5kRmlsZVdpdGhDb250ZW50KHNpbmss IHBhdGhidWYsICIiLCAmbWFuaWZlc3QpOworCQkJc2VuZEZpbGVXaXRoQ29udGVudChzaW5r LCBwYXRoYnVmLCAiIiwgLTEsICZtYW5pZmVzdCk7CiAJCX0KCiAJCS8qIFByb3Blcmx5IHRl cm1pbmF0ZSB0aGUgdGFyIGZpbGUuICovCkBAIC0xMDQwLDIyICsxMDI5LDIxIEBAIFNlbmRC YXNlQmFja3VwKEJhc2VCYWNrdXBDbWQgKmNtZCkKICAqLwogc3RhdGljIHZvaWQKIHNlbmRG aWxlV2l0aENvbnRlbnQoYmJzaW5rICpzaW5rLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgY29u c3QgY2hhciAqY29udGVudCwKLQkJCQkJYmFja3VwX21hbmlmZXN0X2luZm8gKm1hbmlmZXN0 KQorCQkJCQlpbnQgbGVuLCBiYWNrdXBfbWFuaWZlc3RfaW5mbyAqbWFuaWZlc3QpCiB7CiAJ c3RydWN0IHN0YXQgc3RhdGJ1ZjsKLQlpbnQJCQlieXRlc19kb25lID0gMCwKLQkJCQlsZW47 CisJaW50CQkJYnl0ZXNfZG9uZSA9IDA7CiAJcGdfY2hlY2tzdW1fY29udGV4dCBjaGVja3N1 bV9jdHg7CgogCWlmIChwZ19jaGVja3N1bV9pbml0KCZjaGVja3N1bV9jdHgsIG1hbmlmZXN0 LT5jaGVja3N1bV90eXBlKSA8IDApCiAJCWVsb2coRVJST1IsICJjb3VsZCBub3QgaW5pdGlh bGl6ZSBjaGVja3N1bSBvZiBmaWxlIFwiJXNcIiIsCiAJCQkgZmlsZW5hbWUpOwoKLQlsZW4g PSBzdHJsZW4oY29udGVudCk7CisJaWYgKGxlbiA8IDApCisJCWxlbiA9IHN0cmxlbihjb250 ZW50KTsKCiAJLyoKLQkgKiBDb25zdHJ1Y3QgYSBzdGF0IHN0cnVjdCBmb3IgdGhlIGJhY2t1 cF9sYWJlbCBmaWxlIHdlJ3JlIGluamVjdGluZyBpbgotCSAqIHRoZSB0YXIuCisJICogQ29u c3RydWN0IGEgc3RhdCBzdHJ1Y3QgZm9yIHRoZSBmaWxlIHdlJ3JlIGluamVjdGluZyBpbiB0 aGUgdGFyLgogCSAqLwogCS8qIFdpbmRvd3MgZG9lc24ndCBoYXZlIHRoZSBjb25jZXB0IG9m IHVpZCBhbmQgZ2lkICovCiAjaWZkZWYgV0lOMzIKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2NhdGFsb2cvc3lzdGVtX2Z1bmN0aW9ucy5zcWwgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3N5 c3RlbV9mdW5jdGlvbnMuc3FsCmluZGV4IDM1ZDczOGQ1NzYzLi4yNGJmMzRiNDVlYiAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fZnVuY3Rpb25zLnNxbAorKysg Yi9zcmMvYmFja2VuZC9jYXRhbG9nL3N5c3RlbV9mdW5jdGlvbnMuc3FsCkBAIC0zODQsMTMg KzM4NCwxNSBAQCBCRUdJTiBBVE9NSUMKIEVORDsKCiBDUkVBVEUgT1IgUkVQTEFDRSBGVU5D VElPTgotICBwZ19iYWNrdXBfc3RhcnQobGFiZWwgdGV4dCwgZmFzdCBib29sZWFuIERFRkFV TFQgZmFsc2UpCi0gIFJFVFVSTlMgcGdfbHNuIFNUUklDVCBWT0xBVElMRSBMQU5HVUFHRSBp bnRlcm5hbCBBUyAncGdfYmFja3VwX3N0YXJ0JworICBwZ19iYWNrdXBfc3RhcnQobGFiZWwg dGV4dCwgZmFzdCBib29sZWFuIERFRkFVTFQgZmFsc2UsIE9VVCBsc24gcGdfbHNuLAorICAg ICAgICBPVVQgdGltZWxpbmVfaWQgaW50OCwgT1VUIHN0YXJ0IHRpbWVzdGFtcHR6KQorICBS RVRVUk5TIHJlY29yZCBTVFJJQ1QgVk9MQVRJTEUgTEFOR1VBR0UgaW50ZXJuYWwgQVMgJ3Bn X2JhY2t1cF9zdGFydCcKICAgUEFSQUxMRUwgUkVTVFJJQ1RFRDsKCiBDUkVBVEUgT1IgUkVQ TEFDRSBGVU5DVElPTiBwZ19iYWNrdXBfc3RvcCAoCi0gICAgICAgIHdhaXRfZm9yX2FyY2hp dmUgYm9vbGVhbiBERUZBVUxUIHRydWUsIE9VVCBsc24gcGdfbHNuLAotICAgICAgICBPVVQg bGFiZWxmaWxlIHRleHQsIE9VVCBzcGNtYXBmaWxlIHRleHQpCisgICAgICAgIHdhaXRfZm9y X2FyY2hpdmUgYm9vbGVhbiBERUZBVUxUIHRydWUsIE9VVCBwZ19jb250cm9sX2ZpbGUgYnl0 ZWEsCisgICAgICAgIE9VVCB0YWJsZXNwYWNlX21hcF9maWxlIHRleHQsIE9VVCBsc24gcGdf bHNuLCBPVVQgdGltZWxpbmVfaWQgaW50OCwKKyAgICAgICAgT1VUIHN0b3AgdGltZXN0YW1w dHopCiAgIFJFVFVSTlMgcmVjb3JkIFNUUklDVCBWT0xBVElMRSBMQU5HVUFHRSBpbnRlcm5h bCBhcyAncGdfYmFja3VwX3N0b3AnCiAgIFBBUkFMTEVMIFJFU1RSSUNURUQ7CgpkaWZmIC0t Z2l0IGEvc3JjL2Jpbi9wZ19iYXNlYmFja3VwL3QvMDEwX3BnX2Jhc2ViYWNrdXAucGwgYi9z cmMvYmluL3BnX2Jhc2ViYWNrdXAvdC8wMTBfcGdfYmFzZWJhY2t1cC5wbAppbmRleCBiOWY1 ZTEyNjZiNC4uYzY1NWNiMDMzNTIgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfYmFzZWJhY2t1 cC90LzAxMF9wZ19iYXNlYmFja3VwLnBsCisrKyBiL3NyYy9iaW4vcGdfYmFzZWJhY2t1cC90 LzAxMF9wZ19iYXNlYmFja3VwLnBsCkBAIC0xNzEsOCArMTcxLDggQEAgU0tJUDoKCiAjIFdy aXRlIHNvbWUgZmlsZXMgdG8gdGVzdCB0aGF0IHRoZXkgYXJlIG5vdCBjb3BpZWQuCiBmb3Jl YWNoIG15ICRmaWxlbmFtZSAoCi0JcXcoYmFja3VwX2xhYmVsIHRhYmxlc3BhY2VfbWFwIHBv c3RncmVzcWwuYXV0by5jb25mLnRtcAotCWN1cnJlbnRfbG9nZmlsZXMudG1wIGdsb2JhbC9w Z19pbnRlcm5hbC5pbml0LjEyMykpCisJcXcodGFibGVzcGFjZV9tYXAgcG9zdGdyZXNxbC5h dXRvLmNvbmYudG1wIGN1cnJlbnRfbG9nZmlsZXMudG1wCisJICAgZ2xvYmFsL3BnX2ludGVy bmFsLmluaXQuMTIzKSkKIHsKIAlvcGVuIG15ICRmaWxlLCAnPj4nLCAiJHBnZGF0YS8kZmls ZW5hbWUiOwogCXByaW50ICRmaWxlICJET05PVENPUFkiOwpAQCAtMjYxLDE0ICsyNjEsMTMg QEAgZm9yZWFjaCBteSAkZmlsZW5hbWUgKEB0ZW1wUmVsYXRpb25GaWxlcykKIAkJImJhc2Uv JHBvc3RncmVzT2lkLyRmaWxlbmFtZSBub3QgY29waWVkIik7CiB9CgotIyBNYWtlIHN1cmUg ZXhpc3RpbmcgYmFja3VwX2xhYmVsIHdhcyBpZ25vcmVkLgotaXNudChzbHVycF9maWxlKCIk dGVtcGRpci9iYWNrdXAvYmFja3VwX2xhYmVsIiksCi0JJ0RPTk9UQ09QWScsICdleGlzdGlu ZyBiYWNrdXBfbGFiZWwgbm90IGNvcGllZCcpOworIyBNYWtlIHN1cmUgZXhpc3RpbmcgdGFi bGVzcGFjZV9tYXAgd2FzIGlnbm9yZWQuCitvayghLWYgIiR0ZW1wZGlyL2JhY2t1cC90YWJs ZXNwYWNlX21hcCIsICd0YWJsZXNwYWNlX21hcCBub3QgaW4gYmFja3VwJyk7CiBybXRyZWUo IiR0ZW1wZGlyL2JhY2t1cCIpOwoKLSMgTm93IGRlbGV0ZSB0aGUgYm9ndXMgYmFja3VwX2xh YmVsIGZpbGUgc2luY2UgaXQgd2lsbCBpbnRlcmZlcmUgd2l0aCBzdGFydHVwCi11bmxpbmso IiRwZ2RhdGEvYmFja3VwX2xhYmVsIikKLSAgb3IgQkFJTF9PVVQoInVuYWJsZSB0byB1bmxp bmsgJHBnZGF0YS9iYWNrdXBfbGFiZWwiKTsKKyMgTm93IGRlbGV0ZSB0aGUgYm9ndXMgdGFi bGVzcGFjZV9tYXAgZmlsZSBzaW5jZSBpdCB3aWxsIGludGVyZmVyZSB3aXRoIHN0YXJ0dXAK K3VubGluaygiJHBnZGF0YS90YWJsZXNwYWNlX21hcCIpCisgIG9yIEJBSUxfT1VUKCJ1bmFi bGUgdG8gdW5saW5rICRwZ2RhdGEvdGFibGVzcGFjZV9tYXAiKTsKCiAkbm9kZS0+Y29tbWFu ZF9vaygKIAlbCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3Jld2luZC9maWxlbWFwLmMgYi9z cmMvYmluL3BnX3Jld2luZC9maWxlbWFwLmMKaW5kZXggZWNhZGQ2OWRjNTMuLjIxM2Y0ZTcx Yjg4IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX3Jld2luZC9maWxlbWFwLmMKKysrIGIvc3Jj L2Jpbi9wZ19yZXdpbmQvZmlsZW1hcC5jCkBAIC0xMzksMTEgKzEzOSwxMCBAQCBzdGF0aWMg Y29uc3Qgc3RydWN0IGV4Y2x1ZGVfbGlzdF9pdGVtIGV4Y2x1ZGVGaWxlc1tdID0KIAl7InBn X2ludGVybmFsLmluaXQiLCB0cnVlfSwgLyogZGVmaW5lZCBhcyBSRUxDQUNIRV9JTklUX0ZJ TEVOQU1FICovCgogCS8qCi0JICogSWYgdGhlcmUgaXMgYSBiYWNrdXBfbGFiZWwgb3IgdGFi bGVzcGFjZV9tYXAgZmlsZSwgaXQgaW5kaWNhdGVzIHRoYXQgYQotCSAqIHJlY292ZXJ5IGZh aWxlZCBhbmQgdGhpcyBjbHVzdGVyIHByb2JhYmx5IGNhbid0IGJlIHJld291bmQsIGJ1dCBl eGNsdWRlCi0JICogdGhlbSBhbnl3YXkgaWYgdGhleSBhcmUgZm91bmQuCisJICogSWYgdGhl cmUgaXMgYSB0YWJsZXNwYWNlX21hcCBmaWxlLCBpdCBpbmRpY2F0ZXMgdGhhdCBhIHJlY292 ZXJ5IGZhaWxlZAorCSAqIGFuZCB0aGlzIGNsdXN0ZXIgcHJvYmFibHkgY2FuJ3QgYmUgcmV3 b3VuZCwgYnV0IGV4Y2x1ZGUgaXQgYW55d2F5IGlmIGl0CisJICogaXMgZm91bmQuCiAJICov Ci0JeyJiYWNrdXBfbGFiZWwiLCBmYWxzZX0sCS8qIGRlZmluZWQgYXMgQkFDS1VQX0xBQkVM X0ZJTEUgKi8KIAl7InRhYmxlc3BhY2VfbWFwIiwgZmFsc2V9LAkvKiBkZWZpbmVkIGFzIFRB QkxFU1BBQ0VfTUFQICovCgogCS8qCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3Jld2luZC9w Z19yZXdpbmQuYyBiL3NyYy9iaW4vcGdfcmV3aW5kL3BnX3Jld2luZC5jCmluZGV4IGJmZDQ0 YTI4NGUyLi5mNDI3ODJlMmVhYiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19yZXdpbmQvcGdf cmV3aW5kLmMKKysrIGIvc3JjL2Jpbi9wZ19yZXdpbmQvcGdfcmV3aW5kLmMKQEAgLTM5LDkg KzM5LDYgQEAgc3RhdGljIHZvaWQgcGVyZm9ybV9yZXdpbmQoZmlsZW1hcF90ICpmaWxlbWFw LCByZXdpbmRfc291cmNlICpzb3VyY2UsCiAJCQkJCQkgICBUaW1lTGluZUlEIGNoa3B0dGxp LAogCQkJCQkJICAgWExvZ1JlY1B0ciBjaGtwdHJlZG8pOwoKLXN0YXRpYyB2b2lkIGNyZWF0 ZUJhY2t1cExhYmVsKFhMb2dSZWNQdHIgc3RhcnRwb2ludCwgVGltZUxpbmVJRCBzdGFydHRs aSwKLQkJCQkJCQkgIFhMb2dSZWNQdHIgY2hlY2twb2ludGxvYyk7Ci0KIHN0YXRpYyB2b2lk IGRpZ2VzdENvbnRyb2xGaWxlKENvbnRyb2xGaWxlRGF0YSAqQ29udHJvbEZpbGUsCiAJCQkJ CQkJICBjb25zdCBjaGFyICpjb250ZW50LCBzaXplX3Qgc2l6ZSk7CiBzdGF0aWMgdm9pZCBn ZXRSZXN0b3JlQ29tbWFuZChjb25zdCBjaGFyICphcmd2MCk7CkBAIC02NTQsNyArNjUxLDcg QEAgcGVyZm9ybV9yZXdpbmQoZmlsZW1hcF90ICpmaWxlbWFwLCByZXdpbmRfc291cmNlICpz b3VyY2UsCiAJCXBnX2xvZ19pbmZvKCJjcmVhdGluZyBiYWNrdXAgbGFiZWwgYW5kIHVwZGF0 aW5nIGNvbnRyb2wgZmlsZSIpOwoKIAkvKgotCSAqIENyZWF0ZSBhIGJhY2t1cCBsYWJlbCBm aWxlLCB0byB0ZWxsIHRoZSB0YXJnZXQgd2hlcmUgdG8gYmVnaW4gdGhlIFdBTAorCSAqIEdl dCByZWNvdmVyeSBmaWVsZHMgdG8gdGVsbCB0aGUgdGFyZ2V0IHdoZXJlIHRvIGJlZ2luIHRo ZSBXQUwKIAkgKiByZXBsYXkuIE5vcm1hbGx5LCBmcm9tIHRoZSBsYXN0IGNvbW1vbiBjaGVj a3BvaW50IGJldHdlZW4gdGhlIHNvdXJjZQogCSAqIGFuZCB0aGUgdGFyZ2V0LiBCdXQgaWYg dGhlIHNvdXJjZSBpcyBhIHN0YW5kYnkgc2VydmVyLCBpdCdzIHBvc3NpYmxlCiAJICogdGhh dCB0aGUgbGFzdCBjb21tb24gY2hlY2twb2ludCBpcyAqYWZ0ZXIqIHRoZSBzdGFuZGJ5J3Mg cmVzdGFydHBvaW50LgpAQCAtNjcyLDcgKzY2OSw2IEBAIHBlcmZvcm1fcmV3aW5kKGZpbGVt YXBfdCAqZmlsZW1hcCwgcmV3aW5kX3NvdXJjZSAqc291cmNlLAogCQljaGtwdHRsaSA9IENv bnRyb2xGaWxlX3NvdXJjZS5jaGVja1BvaW50Q29weS5UaGlzVGltZUxpbmVJRDsKIAkJY2hr cHRyZWMgPSBDb250cm9sRmlsZV9zb3VyY2UuY2hlY2tQb2ludDsKIAl9Ci0JY3JlYXRlQmFj a3VwTGFiZWwoY2hrcHRyZWRvLCBjaGtwdHRsaSwgY2hrcHRyZWMpOwoKIAkvKgogCSAqIFVw ZGF0ZSBjb250cm9sIGZpbGUgb2YgdGFyZ2V0LCB0byB0ZWxsIHRoZSB0YXJnZXQgaG93IGZh ciBpdCBtdXN0CkBAIC03MjIsNiArNzE4LDEyIEBAIHBlcmZvcm1fcmV3aW5kKGZpbGVtYXBf dCAqZmlsZW1hcCwgcmV3aW5kX3NvdXJjZSAqc291cmNlLAogCUNvbnRyb2xGaWxlX25ldy5t aW5SZWNvdmVyeVBvaW50ID0gZW5kcmVjOwogCUNvbnRyb2xGaWxlX25ldy5taW5SZWNvdmVy eVBvaW50VExJID0gZW5kdGxpOwogCUNvbnRyb2xGaWxlX25ldy5zdGF0ZSA9IERCX0lOX0FS Q0hJVkVfUkVDT1ZFUlk7CisJQ29udHJvbEZpbGVfbmV3LmJhY2t1cFJlY292ZXJ5UmVxdWly ZWQgPSB0cnVlOworCUNvbnRyb2xGaWxlX25ldy5iYWNrdXBGcm9tU3RhbmRieSA9IHRydWU7 CisJQ29udHJvbEZpbGVfbmV3LmJhY2t1cEVuZFJlcXVpcmVkID0gZmFsc2U7CisJQ29udHJv bEZpbGVfbmV3LmJhY2t1cENoZWNrUG9pbnQgPSBjaGtwdHJlYzsKKwlDb250cm9sRmlsZV9u ZXcuYmFja3VwU3RhcnRQb2ludCA9IGNoa3B0cmVkbzsKKwlDb250cm9sRmlsZV9uZXcuYmFj a3VwU3RhcnRQb2ludFRMSSA9IGNoa3B0dGxpOwogCWlmICghZHJ5X3J1bikKIAkJdXBkYXRl X2NvbnRyb2xmaWxlKGRhdGFkaXJfdGFyZ2V0LCAmQ29udHJvbEZpbGVfbmV3LCBkb19zeW5j KTsKIH0KQEAgLTcyOSw3ICs3MzEsMTAgQEAgcGVyZm9ybV9yZXdpbmQoZmlsZW1hcF90ICpm aWxlbWFwLCByZXdpbmRfc291cmNlICpzb3VyY2UsCiBzdGF0aWMgdm9pZAogc2FuaXR5Q2hl Y2tzKHZvaWQpCiB7Ci0JLyogVE9ETyBDaGVjayB0aGF0IHRoZXJlJ3Mgbm8gYmFja3VwX2xh YmVsIGluIGVpdGhlciBjbHVzdGVyICovCisJLyoKKwkgKiBUT0RPIENoZWNrIHRoYXQgbmVp dGhlciBjbHVzdGVyIGhhcyBiYWNrdXBSZWNvdmVyeVJlcXVlc3RlZCBzZXQgaW4KKwkgKiBw Z19jb250cm9sLgorCSAqLwoKIAkvKiBDaGVjayBzeXN0ZW1faWRlbnRpZmllciBtYXRjaCAq LwogCWlmIChDb250cm9sRmlsZV90YXJnZXQuc3lzdGVtX2lkZW50aWZpZXIgIT0gQ29udHJv bEZpbGVfc291cmNlLnN5c3RlbV9pZGVudGlmaWVyKQpAQCAtOTUxLDUxICs5NTYsNiBAQCBm aW5kQ29tbW9uQW5jZXN0b3JUaW1lbGluZShUaW1lTGluZUhpc3RvcnlFbnRyeSAqYV9oaXN0 b3J5LCBpbnQgYV9uZW50cmllcywKIAl9CiB9CgotCi0vKgotICogQ3JlYXRlIGEgYmFja3Vw X2xhYmVsIGZpbGUgdGhhdCBmb3JjZXMgcmVjb3ZlcnkgdG8gYmVnaW4gYXQgdGhlIGxhc3Qg Y29tbW9uCi0gKiBjaGVja3BvaW50LgotICovCi1zdGF0aWMgdm9pZAotY3JlYXRlQmFja3Vw TGFiZWwoWExvZ1JlY1B0ciBzdGFydHBvaW50LCBUaW1lTGluZUlEIHN0YXJ0dGxpLCBYTG9n UmVjUHRyIGNoZWNrcG9pbnRsb2MpCi17Ci0JWExvZ1NlZ05vCXN0YXJ0c2Vnbm87Ci0JdGlt ZV90CQlzdGFtcF90aW1lOwotCWNoYXIJCXN0cmZidWZbMTI4XTsKLQljaGFyCQl4bG9nZmls ZW5hbWVbTUFYRk5BTUVMRU5dOwotCXN0cnVjdCB0bSAgKnRtcDsKLQljaGFyCQlidWZbMTAw MF07Ci0JaW50CQkJbGVuOwotCi0JWExCeXRlVG9TZWcoc3RhcnRwb2ludCwgc3RhcnRzZWdu bywgV2FsU2VnU3opOwotCVhMb2dGaWxlTmFtZSh4bG9nZmlsZW5hbWUsIHN0YXJ0dGxpLCBz dGFydHNlZ25vLCBXYWxTZWdTeik7Ci0KLQkvKgotCSAqIENvbnN0cnVjdCBiYWNrdXAgbGFi ZWwgZmlsZQotCSAqLwotCXN0YW1wX3RpbWUgPSB0aW1lKE5VTEwpOwotCXRtcCA9IGxvY2Fs dGltZSgmc3RhbXBfdGltZSk7Ci0Jc3RyZnRpbWUoc3RyZmJ1Ziwgc2l6ZW9mKHN0cmZidWYp LCAiJVktJW0tJWQgJUg6JU06JVMgJVoiLCB0bXApOwotCi0JbGVuID0gc25wcmludGYoYnVm LCBzaXplb2YoYnVmKSwKLQkJCQkgICAiU1RBUlQgV0FMIExPQ0FUSU9OOiAlWC8lWCAoZmls ZSAlcylcbiIKLQkJCQkgICAiQ0hFQ0tQT0lOVCBMT0NBVElPTjogJVgvJVhcbiIKLQkJCQkg ICAiQkFDS1VQIE1FVEhPRDogcGdfcmV3aW5kXG4iCi0JCQkJICAgIkJBQ0tVUCBGUk9NOiBz dGFuZGJ5XG4iCi0JCQkJICAgIlNUQVJUIFRJTUU6ICVzXG4iLAotCS8qIG9taXQgTEFCRUw6 IGxpbmUgKi8KLQkJCQkgICBMU05fRk9STUFUX0FSR1Moc3RhcnRwb2ludCksIHhsb2dmaWxl bmFtZSwKLQkJCQkgICBMU05fRk9STUFUX0FSR1MoY2hlY2twb2ludGxvYyksCi0JCQkJICAg c3RyZmJ1Zik7Ci0JaWYgKGxlbiA+PSBzaXplb2YoYnVmKSkKLQkJcGdfZmF0YWwoImJhY2t1 cCBsYWJlbCBidWZmZXIgdG9vIHNtYWxsIik7CS8qIHNob3VsZG4ndCBoYXBwZW4gKi8KLQot CS8qIFRPRE86IG1vdmUgb2xkIGZpbGUgb3V0IG9mIHRoZSB3YXksIGlmIGFueS4gKi8KLQlv cGVuX3RhcmdldF9maWxlKCJiYWNrdXBfbGFiZWwiLCB0cnVlKTsgLyogQkFDS1VQX0xBQkVM X0ZJTEUgKi8KLQl3cml0ZV90YXJnZXRfcmFuZ2UoYnVmLCAwLCBsZW4pOwotCWNsb3NlX3Rh cmdldF9maWxlKCk7Ci19Ci0KIC8qCiAgKiBDaGVjayBDUkMgb2YgY29udHJvbCBmaWxlCiAg Ki8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy94bG9nLmggYi9zcmMvaW5jbHVk ZS9hY2Nlc3MveGxvZy5oCmluZGV4IGExNDEyNmQxNjRmLi4zYWFjNjgzOWE3MCAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2cuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nl c3MveGxvZy5oCkBAIC0yOTMsOCArMjkzLDYgQEAgZXh0ZXJuIFNlc3Npb25CYWNrdXBTdGF0 ZSBnZXRfYmFja3VwX3N0YXR1cyh2b2lkKTsKIC8qIEZpbGUgcGF0aCBuYW1lcyAoYWxsIHJl bGF0aXZlIHRvICRQR0RBVEEpICovCiAjZGVmaW5lIFJFQ09WRVJZX1NJR05BTF9GSUxFCSJy ZWNvdmVyeS5zaWduYWwiCiAjZGVmaW5lIFNUQU5EQllfU0lHTkFMX0ZJTEUJCSJzdGFuZGJ5 LnNpZ25hbCIKLSNkZWZpbmUgQkFDS1VQX0xBQkVMX0ZJTEUJCSJiYWNrdXBfbGFiZWwiCi0j ZGVmaW5lIEJBQ0tVUF9MQUJFTF9PTEQJCSJiYWNrdXBfbGFiZWwub2xkIgoKICNkZWZpbmUg VEFCTEVTUEFDRV9NQVAJCQkidGFibGVzcGFjZV9tYXAiCiAjZGVmaW5lIFRBQkxFU1BBQ0Vf TUFQX09MRAkJInRhYmxlc3BhY2VfbWFwLm9sZCIKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L2FjY2Vzcy94bG9nYmFja3VwLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MveGxvZ2JhY2t1cC5o CmluZGV4IDE2MTEzNTgxMzdiLi5iNzU0MTFiN2MzZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvYWNjZXNzL3hsb2diYWNrdXAuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MveGxvZ2Jh Y2t1cC5oCkBAIC0xNSw2ICsxNSw3IEBACiAjZGVmaW5lIFhMT0dfQkFDS1VQX0gKCiAjaW5j bHVkZSAiYWNjZXNzL3hsb2dkZWZzLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19jb250cm9s LmgiCiAjaW5jbHVkZSAicGd0aW1lLmgiCgogLyogU3RydWN0dXJlIHRvIGhvbGQgYmFja3Vw IHN0YXRlLiAqLwpAQCAtMzMsOSArMzQsMTggQEAgdHlwZWRlZiBzdHJ1Y3QgQmFja3VwU3Rh dGUKIAlYTG9nUmVjUHRyCXN0b3Bwb2ludDsJCS8qIGJhY2t1cCBzdG9wIFdBTCBsb2NhdGlv biAqLwogCVRpbWVMaW5lSUQJc3RvcHRsaTsJCS8qIGJhY2t1cCBzdG9wIFRMSSAqLwogCXBn X3RpbWVfdAlzdG9wdGltZTsJCS8qIGJhY2t1cCBzdG9wIHRpbWUgKi8KKworCS8qCisJICog QWZ0ZXIgcGdfYmFja3VwX3N0b3AoKSByZXR1cm5zIHRoaXMgZmllbGQgd2lsbCBjb250YWlu IGEgY29weSBvZgorCSAqIHBnX2NvbnRyb2wgdGhhdCBzaG91bGQgYmUgc3RvcmVkIHdpdGgg dGhlIGJhY2t1cC4gRmllbGRzIGhhdmUgYmVlbgorCSAqIHVwZGF0ZWQgZm9yIHJlY292ZXJ5 IGFuZCB0aGUgQ1JDIGhhcyBiZWVuIHJlY2FsY3VsYXRlZC4gVGhlIGJ1ZmZlcgorCSAqIGlz IHBhZGRlZCB0byBQR19DT05UUk9MX01BWF9TQUZFX1NJWkUgc28gdGhhdCBwZ19jb250cm9s IGlzIGFsd2F5cworCSAqIGEgY29uc2lzdGVudCBzaXplIGJ1dCBzbWFsbGVyIChhbmQgaG9w ZWZ1bGx5IGVhc2llciB0byBoYW5kbGUpIHRoYW4KKwkgKiBQR19DT05UUk9MX0ZJTEVfU0la RS4gQnl0ZXMgYWZ0ZXIgc2l6ZW9mKENvbnRyb2xGaWxlRGF0YSkgYXJlIHplcm9lZC4KKwkg Ki8KKwl1aW50OF90IGNvbnRyb2xGaWxlW1BHX0NPTlRST0xfTUFYX1NBRkVfU0laRV07CiB9 IEJhY2t1cFN0YXRlOwoKLWV4dGVybiBjaGFyICpidWlsZF9iYWNrdXBfY29udGVudChCYWNr dXBTdGF0ZSAqc3RhdGUsCi0JCQkJCQkJCSAgYm9vbCBpc2hpc3RvcnlmaWxlKTsKK2V4dGVy biBjaGFyICpidWlsZF9iYWNrdXBfY29udGVudChCYWNrdXBTdGF0ZSAqc3RhdGUpOwoKICNl bmRpZgkJCQkJCQkvKiBYTE9HX0JBQ0tVUF9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9hY2Nlc3MveGxvZ3JlY292ZXJ5LmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MveGxvZ3JlY292 ZXJ5LmgKaW5kZXggZWUwYmM3NDI3ODIuLjk4MTI2NmY3MzQwIDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9hY2Nlc3MveGxvZ3JlY292ZXJ5LmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNz L3hsb2dyZWNvdmVyeS5oCkBAIC04MCw4ICs4MCw3IEBAIGV4dGVybiBTaXplIFhMb2dSZWNv dmVyeVNobWVtU2l6ZSh2b2lkKTsKIGV4dGVybiB2b2lkIFhMb2dSZWNvdmVyeVNobWVtSW5p dCh2b2lkKTsKCiBleHRlcm4gdm9pZCBJbml0V2FsUmVjb3ZlcnkoQ29udHJvbEZpbGVEYXRh ICpDb250cm9sRmlsZSwKLQkJCQkJCQlib29sICp3YXNTaHV0ZG93bl9wdHIsIGJvb2wgKmhh dmVCYWNrdXBMYWJlbF9wdHIsCi0JCQkJCQkJYm9vbCAqaGF2ZVRibHNwY01hcF9wdHIpOwor CQkJCQkJCWJvb2wgKndhc1NodXRkb3duX3B0ciwgYm9vbCAqaGF2ZVRibHNwY01hcF9wdHIp OwogZXh0ZXJuIHZvaWQgUGVyZm9ybVdhbFJlY292ZXJ5KHZvaWQpOwoKIC8qCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX2NvbnRyb2wuaCBiL3NyYy9pbmNsdWRlL2Nh dGFsb2cvcGdfY29udHJvbC5oCmluZGV4IDJhZTcyZTNiMjY2Li42NGJhYjA3ZTA1NiAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19jb250cm9sLmgKKysrIGIvc3JjL2lu Y2x1ZGUvY2F0YWxvZy9wZ19jb250cm9sLmgKQEAgLTE0Niw2ICsxNDYsOSBAQCB0eXBlZGVm IHN0cnVjdCBDb250cm9sRmlsZURhdGEKIAkgKiB0byBkaXNrLCB3ZSBtdXN0bid0IHN0YXJ0 IHVwIHVudGlsIHdlIHJlYWNoIFggYWdhaW4uIFplcm8gd2hlbiBub3QKIAkgKiBkb2luZyBh cmNoaXZlIHJlY292ZXJ5LgogCSAqCisJICogYmFja3VwQ2hlY2tQb2ludCBpcyB0aGUgYmFj a3VwIHN0YXJ0IGNoZWNrcG9pbnQgYW5kIGlzIHNldCB0byB6ZXJvIGFmdGVyCisJICogcmVj b3ZlcnkgaXMgaW5pdGlhbGl6ZWQuCisJICoKIAkgKiBiYWNrdXBTdGFydFBvaW50IGlzIHRo ZSByZWRvIHBvaW50ZXIgb2YgdGhlIGJhY2t1cCBzdGFydCBjaGVja3BvaW50LCBpZgogCSAq IHdlIGFyZSByZWNvdmVyaW5nIGZyb20gYW4gb25saW5lIGJhY2t1cCBhbmQgaGF2ZW4ndCBy ZWFjaGVkIHRoZSBlbmQgb2YKIAkgKiBiYWNrdXAgeWV0LiBJdCBpcyByZXNldCB0byB6ZXJv IHdoZW4gdGhlIGVuZCBvZiBiYWNrdXAgaXMgcmVhY2hlZCwgYW5kCkBAIC0xNjAsMTQgKzE2 MywyNSBAQCB0eXBlZGVmIHN0cnVjdCBDb250cm9sRmlsZURhdGEKIAkgKiBwZ19jb250cm9s IHdoaWNoIHdhcyBiYWNrZWQgdXAgbGFzdC4gSXQgaXMgcmVzZXQgdG8gemVybyB3aGVuIHRo ZSBlbmQKIAkgKiBvZiBiYWNrdXAgaXMgcmVhY2hlZCwgYW5kIHdlIG11c3RuJ3Qgc3RhcnQg dXAgYmVmb3JlIHRoYXQuCiAJICoKKwkgKiBiYWNrdXBSZWNvdmVyeVJlcXVpcmVkIGluZGlj YXRlcyB0aGF0IHRoZSBwZ19jb250cm9sIGZpbGUgd2FzIHByb3ZpZGVkCisJICogYnkgYSBi YWNrdXAgb3IgcGdfcmV3aW5kIGFuZCByZWNvdmVyeSBzZXR0aW5ncyBuZWVkIHRvIGJlIGNv cGllZC4gSXQgd2lsbAorCSAqIGJlIHNldCB0byBmYWxzZSB3aGVuIHRoZSBzZXR0aW5ncyBo YXZlIGJlZW4gY29waWVkLgorCSAqCisJICogYmFja3VwRnJvbVN0YW5kYnkgaW5kaWNhdGVz IHRoYXQgdGhlIGJhY2t1cCB3YXMgdGFrZW4gb24gYSBzdGFuZGJ5LiBJdCBpcworCSAqIHJl cXVpcmUgdG8gaW5pdGlhbGl6ZSByZWNvdmVyeSBhbmQgc2V0IHRvIGZhbHNlIGFmdGVyd2Fy ZHMuCisJICoKIAkgKiBJZiBiYWNrdXBFbmRSZXF1aXJlZCBpcyB0cnVlLCB3ZSBrbm93IGZv ciBzdXJlIHRoYXQgd2UncmUgcmVzdG9yaW5nCiAJICogZnJvbSBhIGJhY2t1cCwgYW5kIG11 c3Qgc2VlIGEgYmFja3VwLWVuZCByZWNvcmQgYmVmb3JlIHdlIGNhbiBzYWZlbHkKIAkgKiBz dGFydCB1cC4KIAkgKi8KIAlYTG9nUmVjUHRyCW1pblJlY292ZXJ5UG9pbnQ7CiAJVGltZUxp bmVJRAltaW5SZWNvdmVyeVBvaW50VExJOworCVhMb2dSZWNQdHIJYmFja3VwQ2hlY2tQb2lu dDsKIAlYTG9nUmVjUHRyCWJhY2t1cFN0YXJ0UG9pbnQ7CisJVGltZUxpbmVJRAliYWNrdXBT dGFydFBvaW50VExJOwogCVhMb2dSZWNQdHIJYmFja3VwRW5kUG9pbnQ7CisJYm9vbCAJCWJh Y2t1cFJlY292ZXJ5UmVxdWlyZWQ7CisJYm9vbCAJCWJhY2t1cEZyb21TdGFuZGJ5OwogCWJv b2wJCWJhY2t1cEVuZFJlcXVpcmVkOwoKIAkvKgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv Y2F0YWxvZy9wZ19wcm9jLmRhdCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQK aW5kZXggMDY0MzVlOGI5MjUuLjlkZmRmNzlhZmE0IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9jYXRhbG9nL3BnX3Byb2MuZGF0CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJv Yy5kYXQKQEAgLTY0MTgsMTMgKzY0MTgsMTcgQEAKICAgcHJvc3JjID0+ICdwZ190ZXJtaW5h dGVfYmFja2VuZCcgfSwKIHsgb2lkID0+ICcyMTcyJywgZGVzY3IgPT4gJ3ByZXBhcmUgZm9y IHRha2luZyBhbiBvbmxpbmUgYmFja3VwJywKICAgcHJvbmFtZSA9PiAncGdfYmFja3VwX3N0 YXJ0JywgcHJvdm9sYXRpbGUgPT4gJ3YnLCBwcm9wYXJhbGxlbCA9PiAncicsCi0gIHByb3Jl dHR5cGUgPT4gJ3BnX2xzbicsIHByb2FyZ3R5cGVzID0+ICd0ZXh0IGJvb2wnLAorICBwcm9y ZXR0eXBlID0+ICdyZWNvcmQnLCBwcm9hcmd0eXBlcyA9PiAndGV4dCBib29sJywKKyAgcHJv YWxsYXJndHlwZXMgPT4gJ3t0ZXh0LGJvb2wscGdfbHNuLGludDgsdGltZXN0YW1wdHp9JywK KyAgcHJvYXJnbW9kZXMgPT4gJ3tpLGksbyxvLG99JywKKyAgcHJvYXJnbmFtZXMgPT4gJ3ts YWJlbCxmYXN0LGxzbix0aW1lbGluZV9pZCxzdGFydH0nLAogICBwcm9zcmMgPT4gJ3BnX2Jh Y2t1cF9zdGFydCcgfSwKIHsgb2lkID0+ICcyNzM5JywgZGVzY3IgPT4gJ2ZpbmlzaCB0YWtp bmcgYW4gb25saW5lIGJhY2t1cCcsCiAgIHByb25hbWUgPT4gJ3BnX2JhY2t1cF9zdG9wJywg cHJvdm9sYXRpbGUgPT4gJ3YnLCBwcm9wYXJhbGxlbCA9PiAncicsCiAgIHByb3JldHR5cGUg PT4gJ3JlY29yZCcsIHByb2FyZ3R5cGVzID0+ICdib29sJywKLSAgcHJvYWxsYXJndHlwZXMg PT4gJ3tib29sLHBnX2xzbix0ZXh0LHRleHR9JywgcHJvYXJnbW9kZXMgPT4gJ3tpLG8sbyxv fScsCi0gIHByb2FyZ25hbWVzID0+ICd7d2FpdF9mb3JfYXJjaGl2ZSxsc24sbGFiZWxmaWxl LHNwY21hcGZpbGV9JywKKyAgcHJvYWxsYXJndHlwZXMgPT4gJ3tib29sLGJ5dGVhLHRleHQs cGdfbHNuLGludDgsdGltZXN0YW1wdHp9JywKKyAgcHJvYXJnbW9kZXMgPT4gJ3tpLG8sbyxv LG8sb30nLAorICBwcm9hcmduYW1lcyA9PiAne3dhaXRfZm9yX2FyY2hpdmUscGdfY29udHJv bF9maWxlLHRhYmxlc3BhY2VfbWFwX2ZpbGUsbHNuLHRpbWVsaW5lX2lkLHN0b3B9JywKICAg cHJvc3JjID0+ICdwZ19iYWNrdXBfc3RvcCcgfSwKIHsgb2lkID0+ICczNDM2JywgZGVzY3Ig PT4gJ3Byb21vdGUgc3RhbmRieSBzZXJ2ZXInLAogICBwcm9uYW1lID0+ICdwZ19wcm9tb3Rl JywgcHJvdm9sYXRpbGUgPT4gJ3YnLCBwcm9yZXR0eXBlID0+ICdib29sJywK --------------v0Fn03cu1M9LoiN4Dw3gt0fQ--