From mboxrd@z Thu Jan 1 00:00:00 1970 From: Roger Pau Monne Subject: [PATCH v6 09/11] vpci/msi: add MSI handlers Date: Tue, 19 Sep 2017 16:29:34 +0100 Message-ID: <20170919152936.14498-10-roger.pau@citrix.com> References: <20170919152936.14498-1-roger.pau@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1duKXz-0008J5-JG for xen-devel@lists.xenproject.org; Tue, 19 Sep 2017 15:34:51 +0000 In-Reply-To: <20170919152936.14498-1-roger.pau@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org Cc: Andrew Cooper , Paul Durrant , Jan Beulich , boris.ostrovsky@oracle.com, Roger Pau Monne List-Id: xen-devel@lists.xenproject.org QWRkIGhhbmRsZXJzIGZvciB0aGUgTVNJIGNvbnRyb2wsIGFkZHJlc3MsIGRhdGEgYW5kIG1hc2sg ZmllbGRzIGluCm9yZGVyIHRvIGRldGVjdCBhY2Nlc3NlcyB0byB0aGVtIGFuZCBzZXR1cCB0aGUg aW50ZXJydXB0cyBhcyByZXF1ZXN0ZWQKYnkgdGhlIGd1ZXN0LgoKTm90ZSB0aGF0IHRoZSBwZW5k aW5nIHJlZ2lzdGVyIGlzIG5vdCB0cmFwcGVkLCBhbmQgdGhlIGd1ZXN0IGNhbgpmcmVlbHkgcmVh ZC93cml0ZSB0byBpdC4KClNpZ25lZC1vZmYtYnk6IFJvZ2VyIFBhdSBNb25uw6kgPHJvZ2VyLnBh dUBjaXRyaXguY29tPgpSZXZpZXdlZC1ieTogUGF1bCBEdXJyYW50IDxwYXVsLmR1cnJhbnRAY2l0 cml4LmNvbT4KLS0tCkNjOiBKYW4gQmV1bGljaCA8amJldWxpY2hAc3VzZS5jb20+CkNjOiBBbmRy ZXcgQ29vcGVyIDxhbmRyZXcuY29vcGVyM0BjaXRyaXguY29tPgpDYzogUGF1bCBEdXJyYW50IDxw YXVsLmR1cnJhbnRAY2l0cml4LmNvbT4KLS0tCkNoYW5nZXMgc2luY2UgdjU6CiAtIFVwZGF0ZSB0 byBuZXcgbG9jayB1c2FnZS4KIC0gQ2hhbmdlIGhhbmRsZXJzIHRvIG1hdGNoIHRoZSBuZXcgdHlw ZS4KIC0gcy9tc2lfZmxhZ3MvbXNpX2dmbGFncy8sIHJlbW92ZSB0aGUgbG9jYWwgdmFyaWFibGVz IGFuZCB1c2UgdGhlIG5ldwogICBET01DVExfVk1TSV8qIGRlZmluZXMuCiAtIENoYW5nZSB0aGUg TVNJIGFyY2ggZnVuY3Rpb24gdG8gdGFrZSBhIHZwY2lfbXNpIGluc3RlYWQgb2YgYQogICB2cGNp X2FyY2hfbXNpIGFzIHBhcmFtZXRlci4KIC0gRml4IHRoZSBjYWxjdWxhdGlvbiBvZiB0aGUgZ3Vl c3QgdmVjdG9yIGZvciBNU0kgaW5qZWN0aW9uIHRvIHRha2UKICAgaW50byBhY2NvdW50IHRoZSBu dW1iZXIgb2YgYml0cyB0aGF0IGNhbiBiZSBtb2RpZmllZC4KIC0gVXNlIElOVkFMSURfUElSUSBl dmVyeXdoZXJlLgogLSBTaW1wbGlmeSBleGl0IHBhdGggb2YgdnBjaV9tc2lfZGlzYWJsZS4KIC0g UmVtb3ZlIHRoZSBjb25kaXRpb25hbCB3aGVuIHNldHRpbmcgYWRkcmVzczY0IGFuZCBtYXNraW5n IGZpZWxkcy4KIC0gQWRkIGEgcHJvY2Vzc19wZW5kaW5nX3NvZnRpcnFzIHRvIHRoZSBNU0kgZHVt cCBsb29wLgogLSBQbGFjZSB0aGUgcHJvdG90eXBlcyBmb3IgdGhlIE1TSSBhcmNoLXNwZWNpZmlj IGZ1bmN0aW9ucyBpbgogICB4ZW4vdnBjaS5oLgogLSBBZGQgcGFyZW50aGVzZXMgYXJvdW5kIHRo ZSBJTlZBTElEX1BJUlEgZGVmaW5pdGlvbi4KCkNoYW5nZXMgc2luY2UgdjQ6CiAtIEZpeCBjb21t aXQgbWVzc2FnZS4KIC0gQ2hhbmdlIHRoZSBBU1NFUlRzIGluIHZwY2lfbXNpX2FyY2hfbWFzayBp bnRvIGlmcy4KIC0gSW50cm9kdWNlIElOVkFMSURfUElSUS4KIC0gRGVzdHJveSB0aGUgcGFydGlh bGx5IGNyZWF0ZWQgYmluZGluZ3MgaW4gY2FzZSBvZiBmYWlsdXJlIGluCiAgIHZwY2lfbXNpX2Fy Y2hfZW5hYmxlLgogLSBKdXN0IHRha2UgdGhlIHBjaWRldnMgbG9jayBvbmNlIGluIHZwY2lfbXNp X2FyY2hfZGlzYWJsZS4KIC0gUHJpbnQgYW4gZXJyb3IgbWVzc2FnZSBpbiBjYXNlIG9mIGZhaWx1 cmUgb2YgcHRfaXJxX2Rlc3Ryb3lfYmluZC4KIC0gTWFrZSB2cGNpX21zaV9hcmNoX2luaXQgcmV0 dXJuIHZvaWQuCiAtIENvbnN0aWZ5IHRoZSBhcmNoIHBhcmFtZXRlciBvZiB2cGNpX21zaV9hcmNo X3ByaW50LgogLSBVc2UgZml4ZWQgaW5zdGVhZCBvZiBjcHUgZm9yIG1zaSByZWRpcmVjdGlvbi4K IC0gU2VwYXJhdGUgdGhlIGhlYWRlciBpbmNsdWRlcyBpbiB2cGNpL21zaS5jIGJldHdlZW4geGVu IGFuZCBhc20uCiAtIFN0b3JlIHRoZSBudW1iZXIgb2YgY29uZmlndXJlZCB2ZWN0b3JzIGV2ZW4g aWYgTVNJIGlzIG5vdCBlbmFibGVkCiAgIGFuZCBhbHdheXMgcmV0dXJuIGl0IGluIHZwY2lfbXNp X2NvbnRyb2xfcmVhZC4KIC0gRml4L2FkZCBjb21tZW50cyBpbiB2cGNpX21zaV9jb250cm9sX3dy aXRlIHRvIGNsYXJpZnkgaW50ZW5kZWQKICAgYmVoYXZpb3IuCiAtIFNpbXBsaWZ5IHVzYWdlIG9m IG1hc2tzIGluIHZwY2lfbXNpX2FkZHJlc3Nfe3VwcGVyX313cml0ZS4KIC0gQWRkIGNvbW1lbnQg dG8gdnBjaV9tc2lfbWFza197cmVhZC93cml0ZX0uCiAtIERvbid0IHVzZSBNQVNLX0VYVFIgaW4g dnBjaV9tc2lfbWFza193cml0ZS4KIC0gcy9tc2lfb2Zmc2V0L3Bvcy8gaW4gdnBjaV9pbml0X21z aS4KIC0gTW92ZSBjb250cm9sIHZhcmlhYmxlIHNldHVwIGNsb3NlciB0byBpdCdzIHVzYWdlLgog LSBVc2UgZCVkIGluIHZwY2lfZHVtcF9tc2kuCiAtIEZpeCBwcmludGluZyBvZiBiaXRmaWVsZCBt YXNrIGluIHZwY2lfZHVtcF9tc2kuCiAtIEZpeCBkZWZpbml0aW9uIG9mIE1TSV9BRERSX1JFRElS RUNUSU9OX01BU0suCiAtIFNodWZmbGUgdGhlIGxheW91dCBvZiB2cGNpX21zaSB0byBtaW5pbWl6 ZSBnYXBzLgogLSBSZW1vdmUgdGhlIGVycm9yIGxhYmVsIGluIHZwY2lfaW5pdF9tc2kuCgpDaGFu Z2VzIHNpbmNlIHYzOgogLSBQcm9wYWdhdGUgY2hhbmdlcyBmcm9tIHByZXZpb3VzIHZlcnNpb25z OiBkcm9wIHhlbl8gcHJlZml4LCBkcm9wCiAgIHJldHVybiB2YWx1ZSBmcm9tIGhhbmRsZXJzLCB1 c2UgdGhlIG5ldyB2cGNpX3ZhbCBmaWVsZHMuCiAtIFVzZSBNQVNLX0VYVFIuCiAtIFJlbW92ZSB0 aGUgdXNhZ2Ugb2YgR0VOTUFTSy4KIC0gQWRkIEdGTEFHU19TSElGVF9ERVNUX0lEIGFuZCB1c2Ug aXQgaW4gbXNpX2ZsYWdzLgogLSBBZGQgImFyY2giIHRvIHRoZSBNU0kgYXJjaCBzcGVjaWZpYyBm dW5jdGlvbnMuCiAtIE1vdmUgdGhlIGR1bXBpbmcgb2YgdlBDSSBNU0kgaW5mb3JtYXRpb24gdG8g ZHVtcF9tc2kgKGtleSAnTScpLgogLSBSZW1vdmUgdGhlIGd1ZXN0X3ZlY3RvcnMgZmllbGQuCiAt IEFsbG93IHRoZSBndWVzdCB0byBjaGFuZ2UgdGhlIG51bWJlciBvZiBhY3RpdmUgdmVjdG9ycyB3 aXRob3V0CiAgIGhhdmluZyB0byBkaXNhYmxlIGFuZCBlbmFibGUgTVNJLgogLSBDaGVjayB0aGUg bnVtYmVyIG9mIGFjdGl2ZSB2ZWN0b3JzIHdoZW4gcGFyc2luZyB0aGUgZGlzYWJsZQogICBtYXNr LgogLSBSZW1vdmUgdGhlIGRlYnVnIG1lc3NhZ2VzIGZyb20gdnBjaV9pbml0X21zaS4KIC0gTW92 ZSB0aGUgYXJjaC1zcGVjaWZpYyBwYXJ0IG9mIHRoZSBkdW1wIGhhbmRsZXIgdG8geDg2L2h2bS92 bXNpLmMuCiAtIFVzZSB0cnlsb2NrIGluIHRoZSBkdW1wIGhhbmRsZXIgdG8gZ2V0IHRoZSB2cGNp IGxvY2suCgpDaGFuZ2VzIHNpbmNlIHYyOgogLSBBZGQgYW4gYXJjaC1zcGVjaWZpYyBhYnN0cmFj dGlvbiBsYXllci4gTm90ZSB0aGF0IHRoaXMgaXMgb25seSBpbXBsZW1lbnRlZAogICBmb3IgeDg2 IGN1cnJlbnRseS4KIC0gQWRkIGEgd3JhcHBlciB0byBkZXRlY3QgTVNJIGVuYWJsaW5nIGZvciB2 UENJLgoKTkI6IEkndmUgb25seSBiZWVuIGFibGUgdG8gdGVzdCB0aGlzIHdpdGggZGV2aWNlcyB1 c2luZyBhIHNpbmdsZSBNU0kgaW50ZXJydXB0CmFuZCBubyBtYXNrIHJlZ2lzdGVyLiBJIHdpbGwg dHJ5IHRvIGZpbmQgaGFyZHdhcmUgdGhhdCBzdXBwb3J0cyB0aGUgbWFzawpyZWdpc3RlciBhbmQg bW9yZSB0aGFuIG9uZSB2ZWN0b3IsIGJ1dCBJIGNhbm5vdCBtYWtlIGFueSBwcm9taXNlcy4KCklm IHRoZXJlIGFyZSBkb3VidHMgYWJvdXQgdGhlIHVudGVzdGVkIHBhcnRzIHdlIGNvdWxkIGFsd2F5 cyBmb3JjZSBYZW4gdG8KcmVwb3J0IG5vIHBlci12ZWN0b3IgbWFza2luZyBzdXBwb3J0IGFuZCBv bmx5IDEgYXZhaWxhYmxlIHZlY3RvciwgYnV0IEkgd291bGQKcmF0aGVyIGF2b2lkIGRvaW5nIGl0 LgotLS0KIHhlbi9hcmNoL3g4Ni9odm0vdm1zaS5jICAgICAgfCAxNTMgKysrKysrKysrKysrKysr KysrCiB4ZW4vYXJjaC94ODYvbXNpLmMgICAgICAgICAgIHwgICAzICsKIHhlbi9kcml2ZXJzL3Zw Y2kvTWFrZWZpbGUgICAgfCAgIDIgKy0KIHhlbi9kcml2ZXJzL3ZwY2kvbXNpLmMgICAgICAgfCAz NjYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogeGVuL2luY2x1 ZGUvYXNtLXg4Ni9odm0vaW8uaCB8ICAgNSArCiB4ZW4vaW5jbHVkZS9hc20teDg2L21zaS5oICAg IHwgICAxICsKIHhlbi9pbmNsdWRlL3hlbi9pcnEuaCAgICAgICAgfCAgIDEgKwogeGVuL2luY2x1 ZGUveGVuL3ZwY2kuaCAgICAgICB8ICAzNSArKysrKwogOCBmaWxlcyBjaGFuZ2VkLCA1NjUgaW5z ZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHhlbi9kcml2ZXJz L3ZwY2kvbXNpLmMKCmRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvaHZtL3Ztc2kuYyBiL3hlbi9h cmNoL3g4Ni9odm0vdm1zaS5jCmluZGV4IDliMzVlOWI2OTYuLjNkY2RlM2Q4ODIgMTAwNjQ0Ci0t LSBhL3hlbi9hcmNoL3g4Ni9odm0vdm1zaS5jCisrKyBiL3hlbi9hcmNoL3g4Ni9odm0vdm1zaS5j CkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSA8eGVuL2Vycm5vLmg+CiAjaW5jbHVkZSA8eGVu L3NjaGVkLmg+CiAjaW5jbHVkZSA8eGVuL2lycS5oPgorI2luY2x1ZGUgPHhlbi92cGNpLmg+CiAj aW5jbHVkZSA8cHVibGljL2h2bS9pb3JlcS5oPgogI2luY2x1ZGUgPGFzbS9odm0vaW8uaD4KICNp bmNsdWRlIDxhc20vaHZtL3ZwaWMuaD4KQEAgLTYyMSwzICs2MjIsMTU1IEBAIHZvaWQgbXNpeF93 cml0ZV9jb21wbGV0aW9uKHN0cnVjdCB2Y3B1ICp2KQogICAgIGlmICggbXNpeHRibF93cml0ZSh2 LCBjdHJsX2FkZHJlc3MsIDQsIDApICE9IFg4NkVNVUxfT0tBWSApCiAgICAgICAgIGdkcHJpbnRr KFhFTkxPR19XQVJOSU5HLCAiTVNJLVggd3JpdGUgY29tcGxldGlvbiBmYWlsdXJlXG4iKTsKIH0K Kworc3RhdGljIHVuc2lnbmVkIGludCBtc2lfZ2ZsYWdzKHVpbnQxNl90IGRhdGEsIHVpbnQ2NF90 IGFkZHIpCit7CisgICAgLyoKKyAgICAgKiBXZSBuZWVkIHRvIHVzZSB0aGUgRE9NQ1RMIGNvbnN0 YW50cyBoZXJlIGJlY2F1c2UgdGhlIG91dHB1dCBvZiB0aGlzCisgICAgICogZnVuY3Rpb24gaXMg dXNlZCBhcyBpbnB1dCB0byBwdF9pcnFfY3JlYXRlX2JpbmQsIHdoaWNoIGFsc28gdGFrZXMgdGhl CisgICAgICogaW5wdXQgZnJvbSB0aGUgRE9NQ1RMIGl0c2VsZi4KKyAgICAgKi8KKyAgICByZXR1 cm4gTUFTS19JTlNSKE1BU0tfRVhUUihhZGRyLCBNU0lfQUREUl9ERVNUX0lEX01BU0spLAorICAg ICAgICAgICAgICAgICAgICAgWEVOX0RPTUNUTF9WTVNJX1g4Nl9ERVNUX0lEX01BU0spIHwKKyAg ICAgICAgICAgTUFTS19JTlNSKE1BU0tfRVhUUihhZGRyLCBNU0lfQUREUl9SRURJUkVDVElPTl9N QVNLKSwKKyAgICAgICAgICAgICAgICAgICAgIFhFTl9ET01DVExfVk1TSV9YODZfUkhfTUFTSykg fAorICAgICAgICAgICBNQVNLX0lOU1IoTUFTS19FWFRSKGFkZHIsIE1TSV9BRERSX0RFU1RNT0RF X01BU0spLAorICAgICAgICAgICAgICAgICAgICAgWEVOX0RPTUNUTF9WTVNJX1g4Nl9ETV9NQVNL KSB8CisgICAgICAgICAgIE1BU0tfSU5TUihNQVNLX0VYVFIoZGF0YSwgTVNJX0RBVEFfREVMSVZF UllfTU9ERV9NQVNLKSwKKyAgICAgICAgICAgICAgICAgICAgIFhFTl9ET01DVExfVk1TSV9YODZf REVMSVZfTUFTSykgfAorICAgICAgICAgICBNQVNLX0lOU1IoTUFTS19FWFRSKGRhdGEsIE1TSV9E QVRBX1RSSUdHRVJfTUFTSyksCisgICAgICAgICAgICAgICAgICAgICBYRU5fRE9NQ1RMX1ZNU0lf WDg2X1RSSUdfTUFTSyk7Cit9CisKK3ZvaWQgdnBjaV9tc2lfYXJjaF9tYXNrKHN0cnVjdCB2cGNp X21zaSAqbXNpLCBjb25zdCBzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKyAgICAgICAgICAgICAgICAg ICAgICAgIHVuc2lnbmVkIGludCBlbnRyeSwgYm9vbCBtYXNrKQoreworICAgIGNvbnN0IHN0cnVj dCBwaXJxICpwaW5mbzsKKyAgICBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CisgICAgdW5zaWduZWQg bG9uZyBmbGFnczsKKyAgICBpbnQgaXJxOworCisgICAgQVNTRVJUKG1zaS0+YXJjaC5waXJxID49 IDAgJiYgZW50cnkgPCBtc2ktPnZlY3RvcnMpOworICAgIHBpbmZvID0gcGlycV9pbmZvKHBkZXYt PmRvbWFpbiwgbXNpLT5hcmNoLnBpcnEgKyBlbnRyeSk7CisgICAgaWYgKCAhcGluZm8gKQorICAg ICAgICByZXR1cm47CisKKyAgICBpcnEgPSBwaW5mby0+YXJjaC5pcnE7CisgICAgaWYgKCBpcnEg Pj0gbnJfaXJxcyB8fCBpcnEgPCAwKQorICAgICAgICByZXR1cm47CisKKyAgICBkZXNjID0gaXJx X3RvX2Rlc2MoaXJxKTsKKyAgICBpZiAoICFkZXNjICkKKyAgICAgICAgcmV0dXJuOworCisgICAg c3Bpbl9sb2NrX2lycXNhdmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKKyAgICBndWVzdF9tYXNrX21z aV9pcnEoZGVzYywgbWFzayk7CisgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9j aywgZmxhZ3MpOworfQorCitpbnQgdnBjaV9tc2lfYXJjaF9lbmFibGUoc3RydWN0IHZwY2lfbXNp ICptc2ksIGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorICAgICAgICAgICAgICAgICAgICAg ICAgIHVuc2lnbmVkIGludCB2ZWN0b3JzKQoreworICAgIHN0cnVjdCBtc2lfaW5mbyBtc2lfaW5m byA9IHsKKyAgICAgICAgLnNlZyA9IHBkZXYtPnNlZywKKyAgICAgICAgLmJ1cyA9IHBkZXYtPmJ1 cywKKyAgICAgICAgLmRldmZuID0gcGRldi0+ZGV2Zm4sCisgICAgICAgIC5lbnRyeV9uciA9IHZl Y3RvcnMsCisgICAgfTsKKyAgICB1bnNpZ25lZCBpbnQgaTsKKyAgICBpbnQgcmM7CisKKyAgICBB U1NFUlQobXNpLT5hcmNoLnBpcnEgPT0gSU5WQUxJRF9QSVJRKTsKKworICAgIC8qIEdldCBhIFBJ UlEuICovCisgICAgcmMgPSBhbGxvY2F0ZV9hbmRfbWFwX21zaV9waXJxKHBkZXYtPmRvbWFpbiwg LTEsICZtc2ktPmFyY2gucGlycSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg TUFQX1BJUlFfVFlQRV9NVUxUSV9NU0ksICZtc2lfaW5mbyk7CisgICAgaWYgKCByYyApCisgICAg eworICAgICAgICBnZHByaW50ayhYRU5MT0dfRVJSLCAiJTA0eDolMDJ4OiUwMnguJXU6IGZhaWxl ZCB0byBtYXAgUElSUTogJWRcbiIsCisgICAgICAgICAgICAgICAgIHBkZXYtPnNlZywgcGRldi0+ YnVzLCBQQ0lfU0xPVChwZGV2LT5kZXZmbiksCisgICAgICAgICAgICAgICAgIFBDSV9GVU5DKHBk ZXYtPmRldmZuKSwgcmMpOworICAgICAgICByZXR1cm4gcmM7CisgICAgfQorCisgICAgZm9yICgg aSA9IDA7IGkgPCB2ZWN0b3JzOyBpKysgKQorICAgIHsKKyAgICAgICAgdWludDhfdCB2ZWN0b3Ig PSBNQVNLX0VYVFIobXNpLT5kYXRhLCBNU0lfREFUQV9WRUNUT1JfTUFTSyk7CisgICAgICAgIHVp bnQ4X3QgdmVjdG9yX21hc2sgPSAweGZmID4+ICg4IC0gZmxzKG1zaS0+dmVjdG9ycykgKyAxKTsK KyAgICAgICAgeGVuX2RvbWN0bF9iaW5kX3B0X2lycV90IGJpbmQgPSB7CisgICAgICAgICAgICAu bWFjaGluZV9pcnEgPSBtc2ktPmFyY2gucGlycSArIGksCisgICAgICAgICAgICAuaXJxX3R5cGUg PSBQVF9JUlFfVFlQRV9NU0ksCisgICAgICAgICAgICAudS5tc2kuZ3ZlYyA9ICh2ZWN0b3IgJiB+ dmVjdG9yX21hc2spIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKCh2ZWN0b3IgKyBpKSAm IHZlY3Rvcl9tYXNrKSwKKyAgICAgICAgICAgIC51Lm1zaS5nZmxhZ3MgPSBtc2lfZ2ZsYWdzKG1z aS0+ZGF0YSwgbXNpLT5hZGRyZXNzKSwKKyAgICAgICAgfTsKKworICAgICAgICBwY2lkZXZzX2xv Y2soKTsKKyAgICAgICAgcmMgPSBwdF9pcnFfY3JlYXRlX2JpbmQocGRldi0+ZG9tYWluLCAmYmlu ZCk7CisgICAgICAgIGlmICggcmMgKQorICAgICAgICB7CisgICAgICAgICAgICBnZHByaW50ayhY RU5MT0dfRVJSLAorICAgICAgICAgICAgICAgICAgICAgIiUwNHg6JTAyeDolMDJ4LiV1OiBmYWls ZWQgdG8gYmluZCBQSVJRICV1OiAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgIHBkZXYtPnNl ZywgcGRldi0+YnVzLCBQQ0lfU0xPVChwZGV2LT5kZXZmbiksCisgICAgICAgICAgICAgICAgICAg ICBQQ0lfRlVOQyhwZGV2LT5kZXZmbiksIG1zaS0+YXJjaC5waXJxICsgaSwgcmMpOworICAgICAg ICAgICAgd2hpbGUgKCBiaW5kLm1hY2hpbmVfaXJxLS0gKQorICAgICAgICAgICAgICAgIHB0X2ly cV9kZXN0cm95X2JpbmQocGRldi0+ZG9tYWluLCAmYmluZCk7CisgICAgICAgICAgICBzcGluX2xv Y2soJnBkZXYtPmRvbWFpbi0+ZXZlbnRfbG9jayk7CisgICAgICAgICAgICB1bm1hcF9kb21haW5f cGlycShwZGV2LT5kb21haW4sIG1zaS0+YXJjaC5waXJxKTsKKyAgICAgICAgICAgIHNwaW5fdW5s b2NrKCZwZGV2LT5kb21haW4tPmV2ZW50X2xvY2spOworICAgICAgICAgICAgcGNpZGV2c191bmxv Y2soKTsKKyAgICAgICAgICAgIG1zaS0+YXJjaC5waXJxID0gSU5WQUxJRF9QSVJROworICAgICAg ICAgICAgcmV0dXJuIHJjOworICAgICAgICB9CisgICAgICAgIHBjaWRldnNfdW5sb2NrKCk7Cisg ICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK2ludCB2cGNpX21zaV9hcmNoX2Rpc2FibGUoc3Ry dWN0IHZwY2lfbXNpICptc2ksIGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworICAgIHVu c2lnbmVkIGludCBpOworCisgICAgQVNTRVJUKG1zaS0+YXJjaC5waXJxICE9IElOVkFMSURfUElS USk7CisKKyAgICBwY2lkZXZzX2xvY2soKTsKKyAgICBmb3IgKCBpID0gMDsgaSA8IG1zaS0+dmVj dG9yczsgaSsrICkKKyAgICB7CisgICAgICAgIHhlbl9kb21jdGxfYmluZF9wdF9pcnFfdCBiaW5k ID0geworICAgICAgICAgICAgLm1hY2hpbmVfaXJxID0gbXNpLT5hcmNoLnBpcnEgKyBpLAorICAg ICAgICAgICAgLmlycV90eXBlID0gUFRfSVJRX1RZUEVfTVNJLAorICAgICAgICB9OworICAgICAg ICBpbnQgcmM7CisKKyAgICAgICAgcmMgPSBwdF9pcnFfZGVzdHJveV9iaW5kKHBkZXYtPmRvbWFp biwgJmJpbmQpOworICAgICAgICBBU1NFUlQoIXJjKTsKKyAgICB9CisKKyAgICBzcGluX2xvY2so JnBkZXYtPmRvbWFpbi0+ZXZlbnRfbG9jayk7CisgICAgdW5tYXBfZG9tYWluX3BpcnEocGRldi0+ ZG9tYWluLCBtc2ktPmFyY2gucGlycSk7CisgICAgc3Bpbl91bmxvY2soJnBkZXYtPmRvbWFpbi0+ ZXZlbnRfbG9jayk7CisgICAgcGNpZGV2c191bmxvY2soKTsKKworICAgIG1zaS0+YXJjaC5waXJx ID0gSU5WQUxJRF9QSVJROworCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgdnBjaV9tc2lfYXJj aF9pbml0KHN0cnVjdCB2cGNpX21zaSAqbXNpKQoreworICAgIG1zaS0+YXJjaC5waXJxID0gSU5W QUxJRF9QSVJROworfQorCit2b2lkIHZwY2lfbXNpX2FyY2hfcHJpbnQoY29uc3Qgc3RydWN0IHZw Y2lfbXNpICptc2kpCit7CisgICAgcHJpbnRrKCJ2ZWM9JSMwMnglN3MlNnMlM3Nhc3NlcnQlNXMl N3MgZGVzdF9pZD0lbHUgcGlycTogJWRcbiIsCisgICAgICAgICAgIE1BU0tfRVhUUihtc2ktPmRh dGEsIE1TSV9EQVRBX1ZFQ1RPUl9NQVNLKSwKKyAgICAgICAgICAgbXNpLT5kYXRhICYgTVNJX0RB VEFfREVMSVZFUllfTE9XUFJJID8gImxvd2VzdCIgOiAiZml4ZWQiLAorICAgICAgICAgICBtc2kt PmRhdGEgJiBNU0lfREFUQV9UUklHR0VSX0xFVkVMID8gImxldmVsIiA6ICJlZGdlIiwKKyAgICAg ICAgICAgbXNpLT5kYXRhICYgTVNJX0RBVEFfTEVWRUxfQVNTRVJUID8gIiIgOiAiZGUiLAorICAg ICAgICAgICBtc2ktPmFkZHJlc3MgJiBNU0lfQUREUl9ERVNUTU9ERV9MT0dJQyA/ICJsb2ciIDog InBoeXMiLAorICAgICAgICAgICBtc2ktPmFkZHJlc3MgJiBNU0lfQUREUl9SRURJUkVDVElPTl9M T1dQUkkgPyAibG93ZXN0IiA6ICJmaXhlZCIsCisgICAgICAgICAgIE1BU0tfRVhUUihtc2ktPmFk ZHJlc3MsIE1TSV9BRERSX0RFU1RfSURfTUFTSyksCisgICAgICAgICAgIG1zaS0+YXJjaC5waXJx KTsKK30KZGlmZiAtLWdpdCBhL3hlbi9hcmNoL3g4Ni9tc2kuYyBiL3hlbi9hcmNoL3g4Ni9tc2ku YwppbmRleCA3Nzk5OGY0ZmIzLi42Mzc2OTE1M2YxIDEwMDY0NAotLS0gYS94ZW4vYXJjaC94ODYv bXNpLmMKKysrIGIveGVuL2FyY2gveDg2L21zaS5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVk ZSA8cHVibGljL3BoeXNkZXYuaD4KICNpbmNsdWRlIDx4ZW4vaW9tbXUuaD4KICNpbmNsdWRlIDx4 c20veHNtLmg+CisjaW5jbHVkZSA8eGVuL3ZwY2kuaD4KIAogc3RhdGljIHM4IF9fcmVhZF9tb3N0 bHkgdXNlX21zaSA9IC0xOwogYm9vbGVhbl9wYXJhbSgibXNpIiwgdXNlX21zaSk7CkBAIC0xNTM2 LDYgKzE1MzcsOCBAQCBzdGF0aWMgdm9pZCBkdW1wX21zaSh1bnNpZ25lZCBjaGFyIGtleSkKICAg ICAgICAgICAgICAgIGF0dHIuZ3Vlc3RfbWFza2VkID8gJ0cnIDogJyAnLAogICAgICAgICAgICAg ICAgbWFzayk7CiAgICAgfQorCisgICAgdnBjaV9kdW1wX21zaSgpOwogfQogCiBzdGF0aWMgaW50 IF9faW5pdCBtc2lfc2V0dXBfa2V5aGFuZGxlcih2b2lkKQpkaWZmIC0tZ2l0IGEveGVuL2RyaXZl cnMvdnBjaS9NYWtlZmlsZSBiL3hlbi9kcml2ZXJzL3ZwY2kvTWFrZWZpbGUKaW5kZXggMjQxNDY3 MjEyZi4uNjJjZWM5ZTgyYiAxMDA2NDQKLS0tIGEveGVuL2RyaXZlcnMvdnBjaS9NYWtlZmlsZQor KysgYi94ZW4vZHJpdmVycy92cGNpL01ha2VmaWxlCkBAIC0xICsxIEBACi1vYmoteSArPSB2cGNp Lm8gaGVhZGVyLm8KK29iai15ICs9IHZwY2kubyBoZWFkZXIubyBtc2kubwpkaWZmIC0tZ2l0IGEv eGVuL2RyaXZlcnMvdnBjaS9tc2kuYyBiL3hlbi9kcml2ZXJzL3ZwY2kvbXNpLmMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uOTMzYWRiYTBmZgotLS0gL2Rldi9udWxsCisr KyBiL3hlbi9kcml2ZXJzL3ZwY2kvbXNpLmMKQEAgLTAsMCArMSwzNjYgQEAKKy8qCisgKiBIYW5k bGVycyBmb3IgYWNjZXNzZXMgdG8gdGhlIE1TSSBjYXBhYmlsaXR5IHN0cnVjdHVyZS4KKyAqCisg KiBDb3B5cmlnaHQgKEMpIDIwMTcgQ2l0cml4IFN5c3RlbXMgUiZECisgKgorICogVGhpcyBwcm9n cmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljCisgKiBMaWNlbnNlLCB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRl ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg R05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj CisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBJZiBub3QsIHNlZSA8aHR0cDov L3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2luY2x1ZGUgPHhlbi9zY2hlZC5oPgor I2luY2x1ZGUgPHhlbi9zb2Z0aXJxLmg+CisjaW5jbHVkZSA8eGVuL3ZwY2kuaD4KKworI2luY2x1 ZGUgPGFzbS9tc2kuaD4KKworc3RhdGljIHVpbnQzMl90IHZwY2lfbXNpX2NvbnRyb2xfcmVhZChj b25zdCBzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdW5zaWduZWQgaW50IHJlZywgdm9pZCAqZGF0YSkKK3sKKyAgICBjb25zdCBzdHJ1 Y3QgdnBjaV9tc2kgKm1zaSA9IGRhdGE7CisgICAgdWludDE2X3QgdmFsOworCisgICAgLyogU2V0 IHRoZSBudW1iZXIgb2Ygc3VwcG9ydGVkL2NvbmZpZ3VyZWQgbWVzc2FnZXMuICovCisgICAgdmFs ID0gTUFTS19JTlNSKGZscyhtc2ktPm1heF92ZWN0b3JzKSAtIDEsIFBDSV9NU0lfRkxBR1NfUU1B U0spOworICAgIHZhbCB8PSBNQVNLX0lOU1IoZmxzKG1zaS0+dmVjdG9ycykgLSAxLCBQQ0lfTVNJ X0ZMQUdTX1FTSVpFKTsKKworICAgIHZhbCB8PSBtc2ktPmVuYWJsZWQgPyBQQ0lfTVNJX0ZMQUdT X0VOQUJMRSA6IDA7CisgICAgdmFsIHw9IG1zaS0+bWFza2luZyA/IFBDSV9NU0lfRkxBR1NfTUFT S0JJVCA6IDA7CisgICAgdmFsIHw9IG1zaS0+YWRkcmVzczY0ID8gUENJX01TSV9GTEFHU182NEJJ VCA6IDA7CisKKyAgICByZXR1cm4gdmFsOworfQorCitzdGF0aWMgdm9pZCB2cGNpX21zaV9lbmFi bGUoY29uc3Qgc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCB2cGNpX21zaSAqbXNpLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB2ZWN0b3JzKQoreworICAgIGlu dCByZXQ7CisKKyAgICBBU1NFUlQoIW1zaS0+ZW5hYmxlZCk7CisgICAgcmV0ID0gdnBjaV9tc2lf YXJjaF9lbmFibGUobXNpLCBwZGV2LCB2ZWN0b3JzKTsKKyAgICBpZiAoIHJldCApCisgICAgICAg IHJldHVybjsKKworICAgIC8qIEFwcGx5IHRoZSBtYXNrIGJpdHMuICovCisgICAgaWYgKCBtc2kt Pm1hc2tpbmcgKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgaW50IGk7CisgICAgICAgIHVpbnQz Ml90IG1hc2sgPSBtc2ktPm1hc2s7CisKKyAgICAgICAgZm9yICggaSA9IGZmcyhtYXNrKSAtIDE7 IG1hc2sgJiYgaSA8IHZlY3RvcnM7IGkgPSBmZnMobWFzaykgLSAxICkKKyAgICAgICAgeworICAg ICAgICAgICAgdnBjaV9tc2lfYXJjaF9tYXNrKG1zaSwgcGRldiwgaSwgdHJ1ZSk7CisgICAgICAg ICAgICBfX2NsZWFyX2JpdChpLCAmbWFzayk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBfX21z aV9zZXRfZW5hYmxlKHBkZXYtPnNlZywgcGRldi0+YnVzLCBQQ0lfU0xPVChwZGV2LT5kZXZmbiks CisgICAgICAgICAgICAgICAgICAgICBQQ0lfRlVOQyhwZGV2LT5kZXZmbiksIG1zaS0+cG9zLCAx KTsKKworICAgIG1zaS0+ZW5hYmxlZCA9IHRydWU7Cit9CisKK3N0YXRpYyBpbnQgdnBjaV9tc2lf ZGlzYWJsZShjb25zdCBzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IHZwY2lfbXNpICptc2kp Cit7CisgICAgaW50IHJldDsKKworICAgIEFTU0VSVChtc2ktPmVuYWJsZWQpOworICAgIF9fbXNp X3NldF9lbmFibGUocGRldi0+c2VnLCBwZGV2LT5idXMsIFBDSV9TTE9UKHBkZXYtPmRldmZuKSwK KyAgICAgICAgICAgICAgICAgICAgIFBDSV9GVU5DKHBkZXYtPmRldmZuKSwgbXNpLT5wb3MsIDAp OworCisgICAgcmV0ID0gdnBjaV9tc2lfYXJjaF9kaXNhYmxlKG1zaSwgcGRldik7CisgICAgaWYg KCAhcmV0ICkKKyAgICAgICAgbXNpLT5lbmFibGVkID0gZmFsc2U7CisKKyAgICByZXR1cm4gcmV0 OworfQorCitzdGF0aWMgdm9pZCB2cGNpX21zaV9jb250cm9sX3dyaXRlKGNvbnN0IHN0cnVjdCBw Y2lfZGV2ICpwZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l ZCBpbnQgcmVnLCB1aW50MzJfdCB2YWwsIHZvaWQgKmRhdGEpCit7CisgICAgc3RydWN0IHZwY2lf bXNpICptc2kgPSBkYXRhOworICAgIHVuc2lnbmVkIGludCB2ZWN0b3JzID0gMSA8PCBNQVNLX0VY VFIodmFsLCBQQ0lfTVNJX0ZMQUdTX1FTSVpFKTsKKyAgICBib29sIG5ld19lbmFibGVkID0gdmFs ICYgUENJX01TSV9GTEFHU19FTkFCTEU7CisKKyAgICBpZiAoIHZlY3RvcnMgPiBtc2ktPm1heF92 ZWN0b3JzICkKKyAgICAgICAgdmVjdG9ycyA9IG1zaS0+bWF4X3ZlY3RvcnM7CisKKyAgICAvKgor ICAgICAqIE5vIGNoYW5nZSBpZiB0aGUgZW5hYmxlIGZpZWxkIGFuZCB0aGUgbnVtYmVyIG9mIHZl Y3RvcnMgaXMKKyAgICAgKiB0aGUgc2FtZSBvciB0aGUgZGV2aWNlIGlzIG5vdCBlbmFibGVkLCBp biB3aGljaCBjYXNlIHRoZQorICAgICAqIHZlY3RvcnMgZmllbGQgY2FuIGJlIHVwZGF0ZWQgZGly ZWN0bHkuCisgICAgICovCisgICAgaWYgKCBuZXdfZW5hYmxlZCA9PSBtc2ktPmVuYWJsZWQgJiYK KyAgICAgICAgICh2ZWN0b3JzID09IG1zaS0+dmVjdG9ycyB8fCAhbXNpLT5lbmFibGVkKSApCisg ICAgeworICAgICAgICBtc2ktPnZlY3RvcnMgPSB2ZWN0b3JzOworICAgICAgICByZXR1cm47Cisg ICAgfQorCisgICAgaWYgKCBuZXdfZW5hYmxlZCApCisgICAgeworICAgICAgICAvKgorICAgICAg ICAgKiBJZiB0aGUgZGV2aWNlIGlzIGFscmVhZHkgZW5hYmxlZCBpdCBtZWFucyB0aGUgbnVtYmVy IG9mCisgICAgICAgICAqIGVuYWJsZWQgbWVzc2FnZXMgaGFzIGNoYW5nZWQuIERpc2FibGUgYW5k IHJlLWVuYWJsZSB0aGUKKyAgICAgICAgICogZGV2aWNlIGluIG9yZGVyIHRvIGFwcGx5IHRoZSBj aGFuZ2UuCisgICAgICAgICAqLworICAgICAgICBpZiAoIG1zaS0+ZW5hYmxlZCAmJiB2cGNpX21z aV9kaXNhYmxlKHBkZXYsIG1zaSkgKQorICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIFNv bWVob3cgWGVuIGhhcyBub3QgYmVlbiBhYmxlIHRvIGRpc2FibGUgdGhlCisgICAgICAgICAgICAg KiBjb25maWd1cmVkIE1TSSBtZXNzYWdlcywgbGVhdmUgdGhlIGRldmljZSBzdGF0ZSBhcy1pcywK KyAgICAgICAgICAgICAqIHNvIHRoYXQgdGhlIGd1ZXN0IGNhbiB0cnkgdG8gZGlzYWJsZSBNU0kg YWdhaW4uCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB2 cGNpX21zaV9lbmFibGUocGRldiwgbXNpLCB2ZWN0b3JzKTsKKyAgICB9CisgICAgZWxzZQorICAg ICAgICB2cGNpX21zaV9kaXNhYmxlKHBkZXYsIG1zaSk7CisKKyAgICBtc2ktPnZlY3RvcnMgPSB2 ZWN0b3JzOworfQorCisvKiBIYW5kbGVycyBmb3IgdGhlIGFkZHJlc3MgZmllbGQgKDMyYml0IG9y IGxvdyBwYXJ0IG9mIGEgNjRiaXQgYWRkcmVzcykuICovCitzdGF0aWMgdWludDMyX3QgdnBjaV9t c2lfYWRkcmVzc19yZWFkKGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcmVnLCB2b2lkICpkYXRhKQor eworICAgIGNvbnN0IHN0cnVjdCB2cGNpX21zaSAqbXNpID0gZGF0YTsKKworICAgIHJldHVybiBt c2ktPmFkZHJlc3M7Cit9CisKK3N0YXRpYyB2b2lkIHZwY2lfbXNpX2FkZHJlc3Nfd3JpdGUoY29u c3Qgc3RydWN0IHBjaV9kZXYgKnBkZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHVuc2lnbmVkIGludCByZWcsIHVpbnQzMl90IHZhbCwgdm9pZCAqZGF0YSkKK3sKKyAgICBz dHJ1Y3QgdnBjaV9tc2kgKm1zaSA9IGRhdGE7CisKKyAgICAvKiBDbGVhciBsb3cgcGFydC4gKi8K KyAgICBtc2ktPmFkZHJlc3MgJj0gfjB4ZmZmZmZmZmZ1bGw7CisgICAgbXNpLT5hZGRyZXNzIHw9 IHZhbDsKK30KKworLyogSGFuZGxlcnMgZm9yIHRoZSBoaWdoIHBhcnQgb2YgYSA2NGJpdCBhZGRy ZXNzIGZpZWxkLiAqLworc3RhdGljIHVpbnQzMl90IHZwY2lfbXNpX2FkZHJlc3NfdXBwZXJfcmVh ZChjb25zdCBzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHJlZywgdm9pZCAqZGF0YSkKK3sKKyAgICBj b25zdCBzdHJ1Y3QgdnBjaV9tc2kgKm1zaSA9IGRhdGE7CisKKyAgICByZXR1cm4gbXNpLT5hZGRy ZXNzID4+IDMyOworfQorCitzdGF0aWMgdm9pZCB2cGNpX21zaV9hZGRyZXNzX3VwcGVyX3dyaXRl KGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcmVnLCB1aW50MzJfdCB2YWwsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmRhdGEpCit7CisgICAgc3RydWN0 IHZwY2lfbXNpICptc2kgPSBkYXRhOworCisgICAgLyogQ2xlYXIgaGlnaCBwYXJ0LiAqLworICAg IG1zaS0+YWRkcmVzcyAmPSAweGZmZmZmZmZmOworICAgIG1zaS0+YWRkcmVzcyB8PSAodWludDY0 X3QpdmFsIDw8IDMyOworfQorCisvKiBIYW5kbGVycyBmb3IgdGhlIGRhdGEgZmllbGQuICovCitz dGF0aWMgdWludDMyX3QgdnBjaV9tc2lfZGF0YV9yZWFkKGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpw ZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcmVn LCB2b2lkICpkYXRhKQoreworICAgIGNvbnN0IHN0cnVjdCB2cGNpX21zaSAqbXNpID0gZGF0YTsK KworICAgIHJldHVybiBtc2ktPmRhdGE7Cit9CisKK3N0YXRpYyB2b2lkIHZwY2lfbXNpX2RhdGFf d3JpdGUoY29uc3Qgc3RydWN0IHBjaV9kZXYgKnBkZXYsIHVuc2lnbmVkIGludCByZWcsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHZhbCwgdm9pZCAqZGF0YSkKK3sK KyAgICBzdHJ1Y3QgdnBjaV9tc2kgKm1zaSA9IGRhdGE7CisKKyAgICBtc2ktPmRhdGEgPSB2YWw7 Cit9CisKKy8qIEhhbmRsZXJzIGZvciB0aGUgTVNJIG1hc2sgYml0cy4gKi8KK3N0YXRpYyB1aW50 MzJfdCB2cGNpX21zaV9tYXNrX3JlYWQoY29uc3Qgc3RydWN0IHBjaV9kZXYgKnBkZXYsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCByZWcsIHZvaWQgKmRh dGEpCit7CisgICAgY29uc3Qgc3RydWN0IHZwY2lfbXNpICptc2kgPSBkYXRhOworCisgICAgcmV0 dXJuIG1zaS0+bWFzazsKK30KKworc3RhdGljIHZvaWQgdnBjaV9tc2lfbWFza193cml0ZShjb25z dCBzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdW5zaWduZWQgaW50IHJlZywKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdWludDMyX3QgdmFsLCB2b2lkICpkYXRhKQoreworICAgIHN0cnVj dCB2cGNpX21zaSAqbXNpID0gZGF0YTsKKyAgICB1aW50MzJfdCBkbWFzazsKKworICAgIGRtYXNr ID0gbXNpLT5tYXNrIF4gdmFsOworCisgICAgaWYgKCAhZG1hc2sgKQorICAgICAgICByZXR1cm47 CisKKyAgICBpZiAoIG1zaS0+ZW5hYmxlZCApCisgICAgeworICAgICAgICB1bnNpZ25lZCBpbnQg aTsKKworICAgICAgICBmb3IgKCBpID0gZmZzKGRtYXNrKSAtIDE7IGRtYXNrICYmIGkgPCBtc2kt PnZlY3RvcnM7CisgICAgICAgICAgICAgIGkgPSBmZnMoZG1hc2spIC0gMSApCisgICAgICAgIHsK KyAgICAgICAgICAgIHZwY2lfbXNpX2FyY2hfbWFzayhtc2ksIHBkZXYsIGksICh2YWwgPj4gaSkg JiAxKTsKKyAgICAgICAgICAgIF9fY2xlYXJfYml0KGksICZkbWFzayk7CisgICAgICAgIH0KKyAg ICB9CisKKyAgICBtc2ktPm1hc2sgPSB2YWw7Cit9CisKK3N0YXRpYyBpbnQgdnBjaV9pbml0X21z aShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKyAgICB1aW50OF90IHNlZyA9IHBkZXYtPnNlZywg YnVzID0gcGRldi0+YnVzOworICAgIHVpbnQ4X3Qgc2xvdCA9IFBDSV9TTE9UKHBkZXYtPmRldmZu KSwgZnVuYyA9IFBDSV9GVU5DKHBkZXYtPmRldmZuKTsKKyAgICBzdHJ1Y3QgdnBjaV9tc2kgKm1z aTsKKyAgICB1bnNpZ25lZCBpbnQgcG9zOworICAgIHVpbnQxNl90IGNvbnRyb2w7CisgICAgaW50 IHJldDsKKworICAgIHBvcyA9IHBjaV9maW5kX2NhcF9vZmZzZXQoc2VnLCBidXMsIHNsb3QsIGZ1 bmMsIFBDSV9DQVBfSURfTVNJKTsKKyAgICBpZiAoICFwb3MgKQorICAgICAgICByZXR1cm4gMDsK KworICAgIG1zaSA9IHh6YWxsb2Moc3RydWN0IHZwY2lfbXNpKTsKKyAgICBpZiAoICFtc2kgKQor ICAgICAgICByZXR1cm4gLUVOT01FTTsKKworICAgIG1zaS0+cG9zID0gcG9zOworCisgICAgcmV0 ID0gdnBjaV9hZGRfcmVnaXN0ZXIocGRldiwgdnBjaV9tc2lfY29udHJvbF9yZWFkLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHZwY2lfbXNpX2NvbnRyb2xfd3JpdGUsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbXNpX2NvbnRyb2xfcmVnKHBvcyksIDIsIG1zaSk7CisgICAgaWYg KCByZXQgKQorICAgIHsKKyAgICAgICAgeGZyZWUobXNpKTsKKyAgICAgICAgcmV0dXJuIHJldDsK KyAgICB9CisKKyAgICAvKiBHZXQgdGhlIG1heGltdW0gbnVtYmVyIG9mIHZlY3RvcnMgdGhlIGRl dmljZSBzdXBwb3J0cy4gKi8KKyAgICBjb250cm9sID0gcGNpX2NvbmZfcmVhZDE2KHNlZywgYnVz LCBzbG90LCBmdW5jLCBtc2lfY29udHJvbF9yZWcocG9zKSk7CisgICAgbXNpLT5tYXhfdmVjdG9y cyA9IG11bHRpX21zaV9jYXBhYmxlKGNvbnRyb2wpOworICAgIEFTU0VSVChtc2ktPm1heF92ZWN0 b3JzIDw9IDMyKTsKKworICAgIC8qIFRoZSBtdWx0aXBsZSBtZXNzYWdlIGVuYWJsZSBpcyAwIGFm dGVyIHJlc2V0ICgxIG1lc3NhZ2UgZW5hYmxlZCkuICovCisgICAgbXNpLT52ZWN0b3JzID0gMTsK KworICAgIC8qIE5vIFBJUlEgYm91bmQgeWV0LiAqLworICAgIHZwY2lfbXNpX2FyY2hfaW5pdCht c2kpOworCisgICAgbXNpLT5hZGRyZXNzNjQgPSBpc182NGJpdF9hZGRyZXNzKGNvbnRyb2wpOwor ICAgIG1zaS0+bWFza2luZyA9IGlzX21hc2tfYml0X3N1cHBvcnQoY29udHJvbCk7CisKKyAgICBy ZXQgPSB2cGNpX2FkZF9yZWdpc3RlcihwZGV2LCB2cGNpX21zaV9hZGRyZXNzX3JlYWQsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdnBjaV9tc2lfYWRkcmVzc193cml0ZSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBtc2lfbG93ZXJfYWRkcmVzc19yZWcocG9zKSwgNCwgbXNpKTsK KyAgICBpZiAoIHJldCApCisgICAgeworICAgICAgICB4ZnJlZShtc2kpOworICAgICAgICByZXR1 cm4gcmV0OworICAgIH0KKworICAgIHJldCA9IHZwY2lfYWRkX3JlZ2lzdGVyKHBkZXYsIHZwY2lf bXNpX2RhdGFfcmVhZCwgdnBjaV9tc2lfZGF0YV93cml0ZSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBtc2lfZGF0YV9yZWcocG9zLCBtc2ktPmFkZHJlc3M2NCksIDIsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbXNpKTsKKyAgICBpZiAoIHJldCApCisgICAgeworICAgICAgICB4 ZnJlZShtc2kpOworICAgICAgICByZXR1cm4gcmV0OworICAgIH0KKworICAgIGlmICggbXNpLT5h ZGRyZXNzNjQgKQorICAgIHsKKyAgICAgICAgcmV0ID0gdnBjaV9hZGRfcmVnaXN0ZXIocGRldiwg dnBjaV9tc2lfYWRkcmVzc191cHBlcl9yZWFkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB2cGNpX21zaV9hZGRyZXNzX3VwcGVyX3dyaXRlLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBtc2lfdXBwZXJfYWRkcmVzc19yZWcocG9zKSwgNCwgbXNpKTsKKyAgICAgICAg aWYgKCByZXQgKQorICAgICAgICB7CisgICAgICAgICAgICB4ZnJlZShtc2kpOworICAgICAgICAg ICAgcmV0dXJuIHJldDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICggbXNpLT5tYXNraW5n ICkKKyAgICB7CisgICAgICAgIHJldCA9IHZwY2lfYWRkX3JlZ2lzdGVyKHBkZXYsIHZwY2lfbXNp X21hc2tfcmVhZCwgdnBjaV9tc2lfbWFza193cml0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbXNpX21hc2tfYml0c19yZWcocG9zLCBtc2ktPmFkZHJlc3M2NCksIDQsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zaSk7CisgICAgICAgIGlmICggcmV0ICkKKyAg ICAgICAgeworICAgICAgICAgICAgeGZyZWUobXNpKTsKKyAgICAgICAgICAgIHJldHVybiByZXQ7 CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwZGV2LT52cGNpLT5tc2kgPSBtc2k7CisKKyAgICBy ZXR1cm4gMDsKK30KK1JFR0lTVEVSX1ZQQ0lfSU5JVCh2cGNpX2luaXRfbXNpKTsKKwordm9pZCB2 cGNpX2R1bXBfbXNpKHZvaWQpCit7CisgICAgc3RydWN0IGRvbWFpbiAqZDsKKworICAgIGZvcl9l YWNoX2RvbWFpbiAoIGQgKQorICAgIHsKKyAgICAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXYgKnBk ZXY7CisKKyAgICAgICAgaWYgKCAhaGFzX3ZwY2koZCkgKQorICAgICAgICAgICAgY29udGludWU7 CisKKyAgICAgICAgcHJpbnRrKCJ2UENJIE1TSSBpbmZvcm1hdGlvbiBmb3IgZCVkXG4iLCBkLT5k b21haW5faWQpOworCisgICAgICAgIGxpc3RfZm9yX2VhY2hfZW50cnkgKCBwZGV2LCAmZC0+YXJj aC5wZGV2X2xpc3QsIGRvbWFpbl9saXN0ICkKKyAgICAgICAgeworICAgICAgICAgICAgdWludDhf dCBzZWcgPSBwZGV2LT5zZWcsIGJ1cyA9IHBkZXYtPmJ1czsKKyAgICAgICAgICAgIHVpbnQ4X3Qg c2xvdCA9IFBDSV9TTE9UKHBkZXYtPmRldmZuKSwgZnVuYyA9IFBDSV9GVU5DKHBkZXYtPmRldmZu KTsKKyAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB2cGNpX21zaSAqbXNpID0gcGRldi0+dnBjaS0+ bXNpOworCisgICAgICAgICAgICBpZiAoICFzcGluX3RyeWxvY2soJnBkZXYtPnZwY2ktPmxvY2sp ICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwcmludGsoIlVuYWJsZSB0byBnZXQg dlBDSSBsb2NrLCBza2lwcGluZ1xuIik7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICggbXNpICkKKyAgICAgICAgICAgIHsKKyAgICAg ICAgICAgICAgICBwcmludGsoIkRldmljZSAlMDR4OiUwMng6JTAyeC4ldVxuIiwgc2VnLCBidXMs IHNsb3QsIGZ1bmMpOworCisgICAgICAgICAgICAgICAgcHJpbnRrKCIgIEVuYWJsZWQ6ICV1IFN1 cHBvcnRzIG1hc2tpbmc6ICV1IDY0LWJpdCBhZGRyZXNzZXM6ICV1XG4iLAorICAgICAgICAgICAg ICAgICAgICAgICBtc2ktPmVuYWJsZWQsIG1zaS0+bWFza2luZywgbXNpLT5hZGRyZXNzNjQpOwor ICAgICAgICAgICAgICAgIHByaW50aygiICBNYXggdmVjdG9yczogJXUgZW5hYmxlZCB2ZWN0b3Jz OiAldVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgbXNpLT5tYXhfdmVjdG9ycywgbXNpLT52 ZWN0b3JzKTsKKworICAgICAgICAgICAgICAgIHZwY2lfbXNpX2FyY2hfcHJpbnQobXNpKTsKKwor ICAgICAgICAgICAgICAgIGlmICggbXNpLT5tYXNraW5nICkKKyAgICAgICAgICAgICAgICAgICAg cHJpbnRrKCIgIG1hc2s9JTA4eFxuIiwgbXNpLT5tYXNrKTsKKyAgICAgICAgICAgIH0KKworICAg ICAgICAgICAgc3Bpbl91bmxvY2soJnBkZXYtPnZwY2ktPmxvY2spOworICAgICAgICAgICAgcHJv Y2Vzc19wZW5kaW5nX3NvZnRpcnFzKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8qCisgKiBM b2NhbCB2YXJpYWJsZXM6CisgKiBtb2RlOiBDCisgKiBjLWZpbGUtc3R5bGU6ICJCU0QiCisgKiBj LWJhc2ljLW9mZnNldDogNAorICogdGFiLXdpZHRoOiA0CisgKiBpbmRlbnQtdGFicy1tb2RlOiBu aWwKKyAqIEVuZDoKKyAqLwpkaWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9odm0vaW8u aCBiL3hlbi9pbmNsdWRlL2FzbS14ODYvaHZtL2lvLmgKaW5kZXggYmE2NmUyMmUwNC4uYzQ3Y2M5 NzFkMyAxMDA2NDQKLS0tIGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9odm0vaW8uaAorKysgYi94ZW4v aW5jbHVkZS9hc20teDg2L2h2bS9pby5oCkBAIC0xMjcsNiArMTI3LDExIEBAIHZvaWQgaHZtX2Rw Y2lfZW9pKHN0cnVjdCBkb21haW4gKmQsIHVuc2lnbmVkIGludCBndWVzdF9pcnEsCiB2b2lkIG1z aXhfd3JpdGVfY29tcGxldGlvbihzdHJ1Y3QgdmNwdSAqKTsKIHZvaWQgbXNpeHRibF9pbml0KHN0 cnVjdCBkb21haW4gKmQpOwogCisvKiBBcmNoLXNwZWNpZmljIE1TSSBkYXRhIGZvciB2UENJLiAq Lworc3RydWN0IHZwY2lfYXJjaF9tc2kgeworICAgIGludCBwaXJxOworfTsKKwogZW51bSBzdGR2 Z2FfY2FjaGVfc3RhdGUgewogICAgIFNURFZHQV9DQUNIRV9VTklOSVRJQUxJWkVELAogICAgIFNU RFZHQV9DQUNIRV9FTkFCTEVELApkaWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9tc2ku aCBiL3hlbi9pbmNsdWRlL2FzbS14ODYvbXNpLmgKaW5kZXggMzdkMzdiODIwZS4uNDNhYjVjNmJj NiAxMDA2NDQKLS0tIGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9tc2kuaAorKysgYi94ZW4vaW5jbHVk ZS9hc20teDg2L21zaS5oCkBAIC00OCw2ICs0OCw3IEBACiAjZGVmaW5lIE1TSV9BRERSX1JFRElS RUNUSU9OX1NISUZUICAzCiAjZGVmaW5lIE1TSV9BRERSX1JFRElSRUNUSU9OX0NQVSAgICAoMCA8 PCBNU0lfQUREUl9SRURJUkVDVElPTl9TSElGVCkKICNkZWZpbmUgTVNJX0FERFJfUkVESVJFQ1RJ T05fTE9XUFJJICgxIDw8IE1TSV9BRERSX1JFRElSRUNUSU9OX1NISUZUKQorI2RlZmluZSBNU0lf QUREUl9SRURJUkVDVElPTl9NQVNLICAgKDEgPDwgTVNJX0FERFJfUkVESVJFQ1RJT05fU0hJRlQp CiAKICNkZWZpbmUgTVNJX0FERFJfREVTVF9JRF9TSElGVAkJMTIKICNkZWZpbmUJIE1TSV9BRERS X0RFU1RfSURfTUFTSwkJMHgwMGZmMDAwCmRpZmYgLS1naXQgYS94ZW4vaW5jbHVkZS94ZW4vaXJx LmggYi94ZW4vaW5jbHVkZS94ZW4vaXJxLmgKaW5kZXggMGFhODE3ZTI2Ni4uNTg2Yjc4MzkzYSAx MDA2NDQKLS0tIGEveGVuL2luY2x1ZGUveGVuL2lycS5oCisrKyBiL3hlbi9pbmNsdWRlL3hlbi9p cnEuaApAQCAtMTMzLDYgKzEzMyw3IEBAIHN0cnVjdCBwaXJxIHsKICAgICBzdHJ1Y3QgYXJjaF9w aXJxIGFyY2g7CiB9OwogCisjZGVmaW5lIElOVkFMSURfUElSUSAoLTEpCiAjZGVmaW5lIHBpcnFf aW5mbyhkLCBwKSAoKHN0cnVjdCBwaXJxICopcmFkaXhfdHJlZV9sb29rdXAoJihkKS0+cGlycV90 cmVlLCBwKSkKIAogLyogVXNlIHRoaXMgaW5zdGVhZCBvZiBwaXJxX2luZm8oKSBpZiB0aGUgc3Ry dWN0dXJlIG1heSBuZWVkIGFsbG9jYXRpbmcuICovCmRpZmYgLS1naXQgYS94ZW4vaW5jbHVkZS94 ZW4vdnBjaS5oIGIveGVuL2luY2x1ZGUveGVuL3ZwY2kuaAppbmRleCA0ZTBiNjdjMmYxLi41YjU4 MmI4MDEyIDEwMDY0NAotLS0gYS94ZW4vaW5jbHVkZS94ZW4vdnBjaS5oCisrKyBiL3hlbi9pbmNs dWRlL3hlbi92cGNpLmgKQEAgLTcyLDYgKzcyLDMwIEBAIHN0cnVjdCB2cGNpIHsKICAgICAgICAg fSBiYXJzWzddOyAvKiBBdCBtb3N0IDYgQkFSUyArIDEgZXhwYW5zaW9uIFJPTSBCQVIuICovCiAg ICAgICAgIC8qIEZJWE1FOiBjdXJyZW50bHkgdGhlcmUncyBubyBzdXBwb3J0IGZvciBTUi1JT1Yu ICovCiAgICAgfSBoZWFkZXI7CisKKyAgICAvKiBNU0kgZGF0YS4gKi8KKyAgICBzdHJ1Y3QgdnBj aV9tc2kgeworICAgICAgICAvKiBBcmNoLXNwZWNpZmljIGRhdGEuICovCisgICAgICAgIHN0cnVj dCB2cGNpX2FyY2hfbXNpIGFyY2g7CisgICAgICAgIC8qIEFkZHJlc3MuICovCisgICAgICAgIHVp bnQ2NF90IGFkZHJlc3M7CisgICAgICAgIC8qIE9mZnNldCBvZiB0aGUgY2FwYWJpbGl0eSBpbiB0 aGUgY29uZmlnIHNwYWNlLiAqLworICAgICAgICB1bnNpZ25lZCBpbnQgcG9zOworICAgICAgICAv KiBNYXhpbXVtIG51bWJlciBvZiB2ZWN0b3JzIHN1cHBvcnRlZCBieSB0aGUgZGV2aWNlLiAqLwor ICAgICAgICB1bnNpZ25lZCBpbnQgbWF4X3ZlY3RvcnM7CisgICAgICAgIC8qIE51bWJlciBvZiB2 ZWN0b3JzIGNvbmZpZ3VyZWQuICovCisgICAgICAgIHVuc2lnbmVkIGludCB2ZWN0b3JzOworICAg ICAgICAvKiBNYXNrIGJpdGZpZWxkLiAqLworICAgICAgICB1aW50MzJfdCBtYXNrOworICAgICAg ICAvKiBEYXRhLiAqLworICAgICAgICB1aW50MTZfdCBkYXRhOworICAgICAgICAvKiBFbmFibGVk PyAqLworICAgICAgICBib29sIGVuYWJsZWQ7CisgICAgICAgIC8qIFN1cHBvcnRzIHBlci12ZWN0 b3IgbWFza2luZz8gKi8KKyAgICAgICAgYm9vbCBtYXNraW5nOworICAgICAgICAvKiA2NC1iaXQg YWRkcmVzcyBjYXBhYmxlPyAqLworICAgICAgICBib29sIGFkZHJlc3M2NDsKKyAgICB9ICptc2k7 CiAjZW5kaWYKIH07CiAKQEAgLTgwLDYgKzEwNCwxNyBAQCBzdHJ1Y3QgdnBjaV92Y3B1IHsKICAg ICBzdHJ1Y3QgcmFuZ2VzZXQgKm1lbTsKICAgICBib29sIG1hcDsKIH07CisKK3ZvaWQgdnBjaV9k dW1wX21zaSh2b2lkKTsKKworLyogQXJjaC1zcGVjaWZpYyB2UENJIE1TSSBoZWxwZXJzLiAqLwor dm9pZCB2cGNpX21zaV9hcmNoX21hc2soc3RydWN0IHZwY2lfbXNpICptc2ksIGNvbnN0IHN0cnVj dCBwY2lfZGV2ICpwZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGVu dHJ5LCBib29sIG1hc2spOworaW50IHZwY2lfbXNpX2FyY2hfZW5hYmxlKHN0cnVjdCB2cGNpX21z aSAqbXNpLCBjb25zdCBzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICB1bnNpZ25lZCBpbnQgdmVjdG9ycyk7CitpbnQgdnBjaV9tc2lfYXJjaF9kaXNhYmxlKHN0 cnVjdCB2cGNpX21zaSAqbXNpLCBjb25zdCBzdHJ1Y3QgcGNpX2RldiAqcGRldik7Cit2b2lkIHZw Y2lfbXNpX2FyY2hfaW5pdChzdHJ1Y3QgdnBjaV9tc2kgKm1zaSk7Cit2b2lkIHZwY2lfbXNpX2Fy Y2hfcHJpbnQoY29uc3Qgc3RydWN0IHZwY2lfbXNpICptc2kpOwogI2VuZGlmCiAKICNlbmRpZgot LSAKMi4xMS4wIChBcHBsZSBHaXQtODEpCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMu eGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==