Re: [PATCH 1/2] sbi: add hardware isolation abstraction framework
Raymond Mao <[email protected]> Fri, 24 Jul 2026 22:46:40 -0400
| Newsgroups | org.infradead.lists.opensbi |
|---|---|
| Message-ID | <CAMDkj5zNC3pXkNkr4kUwSiJ0e_-YYL1cTjcYeSNj7G9ou4Up-Q@mail.gmail.com> |
SGkgQW51cCwKCk9uIEZyaSwgSnVsIDE3LCAyMDI2IGF0IDM6NTTigK9BTSBBbnVwIFBhdGVsIDxh bnVwQGJyYWluZmF1bHQub3JnPiB3cm90ZToKPgo+IE9uIFRodSwgSnVsIDE2LCAyMDI2IGF0IDc6 MDnigK9QTSBBbnVwIFBhdGVsIDxhbnVwQGJyYWluZmF1bHQub3JnPiB3cm90ZToKPiA+Cj4gPiBP biBNb24sIE1heSA0LCAyMDI2IGF0IDExOjA54oCvUE0gUmF5bW9uZCBNYW8gPHJheW1vbmRtYW9j YUBnbWFpbC5jb20+IHdyb3RlOgo+ID4gPgo+ID4gPiBGcm9tOiBSYXltb25kIE1hbyA8cmF5bW9u ZC5tYW9AcmlzY3N0YXIuY29tPgo+ID4gPgo+ID4gPiBJbnRyb2R1Y2UgYSBnZW5lcmljIGhhcmR3 YXJlLWlzb2xhdGlvbiByZWdpc3RyYXRpb24gYW5kIGRpc3BhdGNoCj4gPiA+IGZyYW1ld29yayBm b3IgT3BlblNCSSBkb21haW5zLgo+ID4gPgo+ID4gPiBBZGQgYm9vdC10aW1lIGluaXQsIHBlci1k b21haW4gaW5pdCwgZG9tYWluIGV4aXQsIGRvbWFpbiBlbnRlciBhbmQKPiA+ID4gY2xlYW51cCBj YWxsYmFja3MsIGFuZCBzdG9yZSBwZXItZG9tYWluIG1lY2hhbmlzbSBjb250ZXh0cyBpbiBzdHJ1 Y3QKPiA+ID4gc2JpX2RvbWFpbi4KPiA+ID4KPiA+ID4gVGhpcyBlc3RhYmxpc2hlcyBhbiBhYnN0 cmFjdGlvbiB0aGF0IGFsbG93cyBtdWx0aXBsZSBoYXJkd2FyZQo+ID4gPiBpc29sYXRpb24gbWVj aGFuaXNtcyB0byBiZSBjb21wb3NlZCB3aGlsZSBrZWVwaW5nIGNvcmUgZG9tYWluIG1vZGVsCj4g PiA+IGFuZCBkYXRhIHN0cnVjdHVyZXMgaW5kZXBlbmRlbnQgZnJvbSBhbnkgc2luZ2xlIHBsYXRm b3JtCj4gPiA+IGltcGxlbWVudGF0aW9uLgo+ID4gPgo+ID4gPiBTaWduZWQtb2ZmLWJ5OiBSYXlt b25kIE1hbyA8cmF5bW9uZC5tYW9AcmlzY3N0YXIuY29tPgo+ID4KPiA+IFdlIGRvbid0IG5lZWQg eWV0IGFub3RoZXIgaGFydC1sZXZlbCBhYnN0cmFjdGlvbiBmb3IgdGhpbmdzIGxpa2UKPiA+IFdv cmxkR3VhcmQsIFN1cGVydmlzb3IgRG9tYWluIElELCBhbmQgUW9TIElEIGNvbmZpZ3VyYXRpb24K PiA+IGF0IGhhcnQtbGV2ZWwuCj4gPgo+ID4gVGhlIGV4aXN0aW5nIGhhcnQgcHJvdGVjdGlvbiBh YnN0cmFjdGlvbiBjYW4gYmUgZWFzaWx5IGV4dGVuZGVkCj4gPiB0byBzdXBwb3J0IGJvdGggbWVt b3J5IHByb3RlY3Rpb24gbWVjaGFuaXNtcyAoUE1QLCBlUE1QLAo+ID4gU21tcHQsIGV0YykgYW5k IElEIGNvbmZpZ3VyYXRpb25zIChXb3JsZEd1YXJkLCBEb21haW4gSUQsIGV0YykuCj4gPgo+ID4g PiAtLS0KPiA+ID4gIGluY2x1ZGUvc2JpL3NiaV9kb21haW4uaCB8ICAgNCArCj4gPiA+ICBpbmNs dWRlL3NiaS9zYmlfaHdpc28uaCAgfCAgNTYgKysrKysrKysrKysrKwo+ID4gPiAgbGliL3NiaS9v YmplY3RzLm1rICAgICAgIHwgICAxICsKPiA+ID4gIGxpYi9zYmkvc2JpX2h3aXNvLmMgICAgICB8 IDE3NSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiA+ID4gIDQgZmls ZXMgY2hhbmdlZCwgMjM2IGluc2VydGlvbnMoKykKPiA+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBp bmNsdWRlL3NiaS9zYmlfaHdpc28uaAo+ID4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9zYmkv c2JpX2h3aXNvLmMKPiA+ID4KPiA+ID4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2JpL3NiaV9kb21h aW4uaCBiL2luY2x1ZGUvc2JpL3NiaV9kb21haW4uaAo+ID4gPiBpbmRleCAwMjc2NTc3Ny4uZmM3 MzMwYTYgMTAwNjQ0Cj4gPiA+IC0tLSBhL2luY2x1ZGUvc2JpL3NiaV9kb21haW4uaAo+ID4gPiAr KysgYi9pbmNsdWRlL3NiaS9zYmlfZG9tYWluLmgKPiA+ID4gQEAgLTE0LDYgKzE0LDcgQEAKPiA+ ID4gICNpbmNsdWRlIDxzYmkvc2JpX3R5cGVzLmg+Cj4gPiA+ICAjaW5jbHVkZSA8c2JpL3NiaV9o YXJ0bWFzay5oPgo+ID4gPiAgI2luY2x1ZGUgPHNiaS9zYmlfZG9tYWluX2NvbnRleHQuaD4KPiA+ ID4gKyNpbmNsdWRlIDxzYmkvc2JpX2h3aXNvLmg+Cj4gPiA+ICAjaW5jbHVkZSA8c2JpL3NiaV9y cHh5Lmg+Cj4gPiA+Cj4gPiA+ICBzdHJ1Y3Qgc2JpX3NjcmF0Y2g7Cj4gPiA+IEBAIC0xOTksNiAr MjAwLDkgQEAgc3RydWN0IHNiaV9kb21haW4gewo+ID4gPiAgICAgICAgIGJvb2wgc3lzdGVtX3Jl c2V0X2FsbG93ZWQ7Cj4gPiA+ICAgICAgICAgLyoqIElzIGRvbWFpbiBhbGxvd2VkIHRvIHN1c3Bl bmQgdGhlIHN5c3RlbSAqLwo+ID4gPiAgICAgICAgIGJvb2wgc3lzdGVtX3N1c3BlbmRfYWxsb3dl ZDsKPiA+ID4gKyAgICAgICAvKiogSGFyZHdhcmUgaXNvbGF0aW9uIGNvbnRleHRzIGZvciByZWdp c3RlcmVkIG1lY2hhbmlzbXMgKi8KPiA+ID4gKyAgICAgICBzdHJ1Y3Qgc2JpX2h3aXNvX2RvbWFp bl9jdHggKmh3aXNvX2N0eHM7Cj4gPiA+ICsgICAgICAgdTMyIGh3aXNvX2N0eF9jb3VudDsKPiA+ Cj4gPiBXZSBhbHJlYWR5IGhhdmUgc2JpX2RvbWFpbl9kYXRhIEFQSXMgdG8gYWxsb3cgYW55IHBh cnQKPiA+IG9mIE9wZW5TQkkgY3JlYXRlIHBlci1kb21haW4gZGF0YSBzbyB3ZSBzaG91bGQgcmUt dXNlCj4gPiBBUElzIGZvciBhZGRpbmcgbW9yZSBpbmZvcm1hdGlvbiBwYXJzZWQgZnJvbSBEVCBh dCBib290LXRpbWUuCj4gPgo+ID4gPiAgICAgICAgIC8qKiBJZGVudGlmaWVzIHdoZXRoZXIgdG8g aW5jbHVkZSB0aGUgZmlybXdhcmUgcmVnaW9uICovCj4gPiA+ICAgICAgICAgYm9vbCBmd19yZWdp b25faW5pdGVkOwo+ID4gPiAgfTsKPiA+ID4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2JpL3NiaV9o d2lzby5oIGIvaW5jbHVkZS9zYmkvc2JpX2h3aXNvLmgKPiA+ID4gbmV3IGZpbGUgbW9kZSAxMDA2 NDQKPiA+ID4gaW5kZXggMDAwMDAwMDAuLjFlZmRiOGMxCj4gPiA+IC0tLSAvZGV2L251bGwKPiA+ ID4gKysrIGIvaW5jbHVkZS9zYmkvc2JpX2h3aXNvLmgKPiA+ID4gQEAgLTAsMCArMSw1NiBAQAo+ ID4gPiArLyoKPiA+ID4gKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UK PiA+ID4gKyAqCj4gPiA+ICsgKiBTeXN0ZW0tbGV2ZWwgaGFyZHdhcmUgaXNvbGF0aW9uIGZyYW1l d29yawo+ID4gPiArICoKPiA+ID4gKyAqIENvcHlyaWdodCAoYykgMjAyNiBSSVNDc3RhciBTb2x1 dGlvbnMgQ29ycG9yYXRpb24uCj4gPiA+ICsgKgo+ID4gPiArICogQXV0aG9yOiBSYXltb25kIE1h byA8cmF5bW9uZC5tYW9AcmlzY3N0YXIuY29tPgo+ID4gPiArICovCj4gPiA+ICsKPiA+ID4gKyNp Zm5kZWYgX19TQklfSFdJU09fSF9fCj4gPiA+ICsjZGVmaW5lIF9fU0JJX0hXSVNPX0hfXwo+ID4g PiArCj4gPiA+ICsjaW5jbHVkZSA8c2JpL3NiaV90eXBlcy5oPgo+ID4gPiArI2luY2x1ZGUgPHNi aS9zYmlfZG9tYWluLmg+Cj4gPiA+ICsKPiA+ID4gK3N0cnVjdCBzYmlfaHdpc29fb3BzIHsKPiA+ ID4gKyAgICAgICBjb25zdCBjaGFyICpuYW1lOwo+ID4gPiArCj4gPiA+ICsgICAgICAgLyogQm9v dC10aW1lIGluaXQgKi8KPiA+ID4gKyAgICAgICBpbnQgKCppbml0KSh2b2lkICpmZHQpOwo+ID4g PiArCj4gPiA+ICsgICAgICAgLyogUGVyLWRvbWFpbiBpbml0IChkb21haW5fb2Zmc2V0IHJlZmVy cyB0byBkb21haW4gaW5zdGFuY2Ugbm9kZSkgKi8KPiA+ID4gKyAgICAgICBpbnQgKCpkb21haW5f aW5pdCkodm9pZCAqZmR0LCBpbnQgZG9tYWluX29mZnNldCwKPiA+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgc3RydWN0IHNiaV9kb21haW4gKmRvbSwgdm9pZCAqKmN0eCk7Cj4gPiA+ICsK PiA+ID4gKyAgICAgICAvKiBCZWZvcmUgc3dpdGNoaW5nIGF3YXkgZnJvbSBhIGRvbWFpbiAqLwo+ ID4gPiArICAgICAgIHZvaWQgKCpkb21haW5fZXhpdCkoY29uc3Qgc3RydWN0IHNiaV9kb21haW4g KnNyYywKPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBzYmlf ZG9tYWluICpkc3QsIHZvaWQgKmN0eCk7Cj4gPiA+ICsKPiA+ID4gKyAgICAgICAvKiBBZnRlciBz d2l0Y2hpbmcgaW50byBhIGRvbWFpbiAqLwo+ID4gPiArICAgICAgIHZvaWQgKCpkb21haW5fZW50 ZXIpKGNvbnN0IHN0cnVjdCBzYmlfZG9tYWluICpkc3QsCj4gPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3Qgc3RydWN0IHNiaV9kb21haW4gKnNyYywgdm9pZCAqY3R4KTsKPiA+ ID4gKwo+ID4gPiArICAgICAgIC8qIE9wdGlvbmFsIGNsZWFudXAgKi8KPiA+ID4gKyAgICAgICB2 b2lkICgqZG9tYWluX2NsZWFudXApKHN0cnVjdCBzYmlfZG9tYWluICpkb20sIHZvaWQgKmN0eCk7 Cj4gPiA+ICt9Owo+ID4gPiArCj4gPiA+ICtzdHJ1Y3Qgc2JpX2h3aXNvX2RvbWFpbl9jdHggewo+ ID4gPiArICAgICAgIGNvbnN0IHN0cnVjdCBzYmlfaHdpc29fb3BzICpvcHM7Cj4gPiA+ICsgICAg ICAgdm9pZCAqY3R4Owo+ID4gPiArfTsKPiA+ID4gKwo+ID4gPiAraW50IHNiaV9od2lzb19yZWdp c3Rlcihjb25zdCBzdHJ1Y3Qgc2JpX2h3aXNvX29wcyAqb3BzKTsKPiA+ID4gKwo+ID4gPiAraW50 IHNiaV9od2lzb19pbml0KHZvaWQgKmZkdCk7Cj4gPiA+ICtpbnQgc2JpX2h3aXNvX2RvbWFpbl9p bml0KHZvaWQgKmZkdCwgaW50IGRvbWFpbl9vZmZzZXQsCj4gPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgc3RydWN0IHNiaV9kb21haW4gKmRvbSk7Cj4gPiA+ICsKPiA+ID4gK3ZvaWQgc2Jp X2h3aXNvX2RvbWFpbl9leGl0KGNvbnN0IHN0cnVjdCBzYmlfZG9tYWluICpzcmMsCj4gPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBzYmlfZG9tYWluICpkc3QpOwo+ ID4gPiArdm9pZCBzYmlfaHdpc29fZG9tYWluX2VudGVyKGNvbnN0IHN0cnVjdCBzYmlfZG9tYWlu ICpkc3QsCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgc2Jp X2RvbWFpbiAqc3JjKTsKPiA+ID4gK3ZvaWQgc2JpX2h3aXNvX2RvbWFpbl9jbGVhbnVwKHN0cnVj dCBzYmlfZG9tYWluICpkb20pOwo+ID4gPiArCj4gPiA+ICsjZW5kaWYgLyogX19TQklfSFdJU09f SF9fICovCj4gPiA+IGRpZmYgLS1naXQgYS9saWIvc2JpL29iamVjdHMubWsgYi9saWIvc2JpL29i amVjdHMubWsKPiA+ID4gaW5kZXggY2EzMTJlZTIuLjYwOTE0OTlhIDEwMDY0NAo+ID4gPiAtLS0g YS9saWIvc2JpL29iamVjdHMubWsKPiA+ID4gKysrIGIvbGliL3NiaS9vYmplY3RzLm1rCj4gPiA+ IEBAIC03Miw2ICs3Miw3IEBAIGxpYnNiaS1vYmpzLXkgKz0gc2JpX2RvbWFpbi5vCj4gPiA+ICBs aWJzYmktb2Jqcy15ICs9IHNiaV9lbXVsYXRlX2Nzci5vCj4gPiA+ICBsaWJzYmktb2Jqcy15ICs9 IHNiaV9maWZvLm8KPiA+ID4gIGxpYnNiaS1vYmpzLXkgKz0gc2JpX2hhcnQubwo+ID4gPiArbGli c2JpLW9ianMteSArPSBzYmlfaHdpc28ubwo+ID4gPiAgbGlic2JpLW9ianMteSArPSBzYmlfaGVh cC5vCj4gPiA+ICBsaWJzYmktb2Jqcy15ICs9IHNiaV9tYXRoLm8KPiA+ID4gIGxpYnNiaS1vYmpz LXkgKz0gc2JpX2hmZW5jZS5vCj4gPiA+IGRpZmYgLS1naXQgYS9saWIvc2JpL3NiaV9od2lzby5j IGIvbGliL3NiaS9zYmlfaHdpc28uYwo+ID4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4gPiBp bmRleCAwMDAwMDAwMC4uNmM5NmRjM2UKPiA+ID4gLS0tIC9kZXYvbnVsbAo+ID4gPiArKysgYi9s aWIvc2JpL3NiaV9od2lzby5jCj4gPiA+IEBAIC0wLDAgKzEsMTc1IEBACj4gPiA+ICsvKgo+ID4g PiArICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZQo+ID4gPiArICoKPiA+ ID4gKyAqIFN5c3RlbS1sZXZlbCBoYXJkd2FyZSBpc29sYXRpb24gZnJhbWV3b3JrCj4gPiA+ICsg Kgo+ID4gPiArICogQ29weXJpZ2h0IChjKSAyMDI2IFJJU0NzdGFyIFNvbHV0aW9ucyBDb3Jwb3Jh dGlvbi4KPiA+ID4gKyAqCj4gPiA+ICsgKiBBdXRob3I6IFJheW1vbmQgTWFvIDxyYXltb25kLm1h b0ByaXNjc3Rhci5jb20+Cj4gPiA+ICsgKi8KPiA+ID4gKwo+ID4gPiArI2luY2x1ZGUgPGxpYmZk dC5oPgo+ID4gPiArI2luY2x1ZGUgPHNiaS9zYmlfZXJyb3IuaD4KPiA+ID4gKyNpbmNsdWRlIDxz Ymkvc2JpX2hlYXAuaD4KPiA+ID4gKyNpbmNsdWRlIDxzYmkvc2JpX2h3aXNvLmg+Cj4gPiA+ICsj aW5jbHVkZSA8c2JpL3NiaV9saXN0Lmg+Cj4gPiA+ICsKPiA+ID4gK3N0cnVjdCBzYmlfaHdpc29f bm9kZSB7Cj4gPiA+ICsgICAgICAgY29uc3Qgc3RydWN0IHNiaV9od2lzb19vcHMgKm9wczsKPiA+ ID4gKyAgICAgICBzdHJ1Y3Qgc2JpX2RsaXN0IG5vZGU7Cj4gPiA+ICt9Owo+ID4gPiArCj4gPiA+ ICtzdGF0aWMgU0JJX0xJU1RfSEVBRChod2lzb19vcHNfbGlzdCk7Cj4gPiA+ICtzdGF0aWMgdTMy IGh3aXNvX29wc19jb3VudDsKPiA+ID4gKwo+ID4gPiArc3RhdGljIGJvb2wgaHdpc29fb3BzX3Jl Z2lzdGVyZWQoY29uc3Qgc3RydWN0IHNiaV9od2lzb19vcHMgKm9wcykKPiA+ID4gK3sKPiA+ID4g KyAgICAgICBzdHJ1Y3Qgc2JpX2h3aXNvX25vZGUgKmVudHJ5Owo+ID4gPiArCj4gPiA+ICsgICAg ICAgc2JpX2xpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZod2lzb19vcHNfbGlzdCwgbm9kZSkg ewo+ID4gPiArICAgICAgICAgICAgICAgaWYgKGVudHJ5LT5vcHMgPT0gb3BzKQo+ID4gPiArICAg ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKPiA+ID4gKyAgICAgICB9Cj4gPiA+ICsK PiA+ID4gKyAgICAgICByZXR1cm4gZmFsc2U7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gK2ludCBz YmlfaHdpc29fcmVnaXN0ZXIoY29uc3Qgc3RydWN0IHNiaV9od2lzb19vcHMgKm9wcykKPiA+ID4g K3sKPiA+ID4gKyAgICAgICBzdHJ1Y3Qgc2JpX2h3aXNvX25vZGUgKm5vZGU7Cj4gPiA+ICsKPiA+ ID4gKyAgICAgICBpZiAoIW9wcyB8fCAhb3BzLT5uYW1lKQo+ID4gPiArICAgICAgICAgICAgICAg cmV0dXJuIFNCSV9FSU5WQUw7Cj4gPiA+ICsKPiA+ID4gKyAgICAgICBpZiAoaHdpc29fb3BzX3Jl Z2lzdGVyZWQob3BzKSkKPiA+ID4gKyAgICAgICAgICAgICAgIHJldHVybiBTQklfRUFMUkVBRFk7 Cj4gPiA+ICsKPiA+ID4gKyAgICAgICBub2RlID0gc2JpX3phbGxvYyhzaXplb2YoKm5vZGUpKTsK PiA+ID4gKyAgICAgICBpZiAoIW5vZGUpCj4gPiA+ICsgICAgICAgICAgICAgICByZXR1cm4gU0JJ X0VOT01FTTsKPiA+ID4gKwo+ID4gPiArICAgICAgIG5vZGUtPm9wcyA9IG9wczsKPiA+ID4gKyAg ICAgICBTQklfSU5JVF9MSVNUX0hFQUQoJm5vZGUtPm5vZGUpOwo+ID4gPiArICAgICAgIHNiaV9s aXN0X2FkZF90YWlsKCZub2RlLT5ub2RlLCAmaHdpc29fb3BzX2xpc3QpOwo+ID4gPiArICAgICAg IGh3aXNvX29wc19jb3VudCsrOwo+ID4gPiArCj4gPiA+ICsgICAgICAgcmV0dXJuIDA7Cj4gPiA+ ICt9Cj4gPiA+ICsKPiA+ID4gK2ludCBzYmlfaHdpc29faW5pdCh2b2lkICpmZHQpCj4gPiA+ICt7 Cj4gPiA+ICsgICAgICAgc3RydWN0IHNiaV9od2lzb19ub2RlICplbnRyeTsKPiA+ID4gKyAgICAg ICBpbnQgcmM7Cj4gPiA+ICsKPiA+ID4gKyAgICAgICBzYmlfbGlzdF9mb3JfZWFjaF9lbnRyeShl bnRyeSwgJmh3aXNvX29wc19saXN0LCBub2RlKSB7Cj4gPiA+ICsgICAgICAgICAgICAgICBpZiAo IWVudHJ5LT5vcHMtPmluaXQpCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl Owo+ID4gPiArCj4gPiA+ICsgICAgICAgICAgICAgICByYyA9IGVudHJ5LT5vcHMtPmluaXQoZmR0 KTsKPiA+ID4gKyAgICAgICAgICAgICAgIGlmIChyYykKPiA+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgcmV0dXJuIHJjOwo+ID4gPiArICAgICAgIH0KPiA+ID4gKwo+ID4gPiArICAgICAgIHJl dHVybiAwOwo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICtpbnQgc2JpX2h3aXNvX2RvbWFpbl9pbml0 KHZvaWQgKmZkdCwgaW50IGRvbWFpbl9vZmZzZXQsCj4gPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgc3RydWN0IHNiaV9kb21haW4gKmRvbSkKPiA+ID4gK3sKPiA+ID4gKyAgICAgICBzdHJ1 Y3Qgc2JpX2h3aXNvX25vZGUgKmVudHJ5Owo+ID4gPiArICAgICAgIHN0cnVjdCBzYmlfaHdpc29f ZG9tYWluX2N0eCAqY3R4czsKPiA+ID4gKyAgICAgICB2b2lkICpjdHg7Cj4gPiA+ICsgICAgICAg dTMyIGlkeCA9IDA7Cj4gPiA+ICsgICAgICAgaW50IHJjOwo+ID4gPiArCj4gPiA+ICsgICAgICAg aWYgKCFkb20pCj4gPiA+ICsgICAgICAgICAgICAgICByZXR1cm4gMDsKPiA+ID4gKwo+ID4gPiAr ICAgICAgIGlmICghaHdpc29fb3BzX2NvdW50KQo+ID4gPiArICAgICAgICAgICAgICAgcmV0dXJu IDA7Cj4gPiA+ICsKPiA+ID4gKyAgICAgICBjdHhzID0gc2JpX2NhbGxvYyhzaXplb2YoKmN0eHMp LCBod2lzb19vcHNfY291bnQpOwo+ID4gPiArICAgICAgIGlmICghY3R4cykKPiA+ID4gKyAgICAg ICAgICAgICAgIHJldHVybiBTQklfRU5PTUVNOwo+ID4gPiArCj4gPiA+ICsgICAgICAgZG9tLT5o d2lzb19jdHhzID0gY3R4czsKPiA+ID4gKyAgICAgICBkb20tPmh3aXNvX2N0eF9jb3VudCA9IGh3 aXNvX29wc19jb3VudDsKPiA+ID4gKwo+ID4gPiArICAgICAgIHNiaV9saXN0X2Zvcl9lYWNoX2Vu dHJ5KGVudHJ5LCAmaHdpc29fb3BzX2xpc3QsIG5vZGUpIHsKPiA+ID4gKyAgICAgICAgICAgICAg IGN0eHNbaWR4XS5vcHMgPSBlbnRyeS0+b3BzOwo+ID4gPiArICAgICAgICAgICAgICAgY3R4c1tp ZHhdLmN0eCA9IE5VTEw7Cj4gPiA+ICsgICAgICAgICAgICAgICBjdHggPSBOVUxMOwo+ID4gPiAr Cj4gPiA+ICsgICAgICAgICAgICAgICBpZiAoZW50cnktPm9wcy0+ZG9tYWluX2luaXQpIHsKPiA+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgcmMgPSBlbnRyeS0+b3BzLT5kb21haW5faW5pdChm ZHQsIGRvbWFpbl9vZmZzZXQsCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZG9tLCAmY3R4KTsKPiA+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgY3R4c1tpZHhdLmN0eCA9IGN0eDsKPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg aWYgKHJjKSB7Cj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2JpX2h3aXNv X2RvbWFpbl9jbGVhbnVwKGRvbSk7Cj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcmV0dXJuIHJjOwo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICB9Cj4gPiA+ICsgICAg ICAgICAgICAgICB9Cj4gPiA+ICsKPiA+ID4gKyAgICAgICAgICAgICAgIGN0eHNbaWR4XS5jdHgg PSBjdHg7Cj4gPiA+ICsgICAgICAgICAgICAgICBpZHgrKzsKPiA+ID4gKyAgICAgICB9Cj4gPiA+ ICsKPiA+ID4gKyAgICAgICByZXR1cm4gMDsKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiArdm9pZCBz YmlfaHdpc29fZG9tYWluX2V4aXQoY29uc3Qgc3RydWN0IHNiaV9kb21haW4gKnNyYywKPiA+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHNiaV9kb21haW4gKmRzdCkK PiA+ID4gK3sKPiA+ID4gKyAgICAgICB1MzIgaTsKPiA+ID4gKwo+ID4gPiArICAgICAgIGlmICgh c3JjIHx8ICFzcmMtPmh3aXNvX2N0eHMpCj4gPiA+ICsgICAgICAgICAgICAgICByZXR1cm47Cj4g PiA+ICsKPiA+ID4gKyAgICAgICBmb3IgKGkgPSAwOyBpIDwgc3JjLT5od2lzb19jdHhfY291bnQ7 IGkrKykgewo+ID4gPiArICAgICAgICAgICAgICAgaWYgKCFzcmMtPmh3aXNvX2N0eHNbaV0ub3Bz IHx8Cj4gPiA+ICsgICAgICAgICAgICAgICAgICAgIXNyYy0+aHdpc29fY3R4c1tpXS5vcHMtPmRv bWFpbl9leGl0KQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKPiA+ID4g Kwo+ID4gPiArICAgICAgICAgICAgICAgc3JjLT5od2lzb19jdHhzW2ldLm9wcy0+ZG9tYWluX2V4 aXQoCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmMsIGRz dCwgc3JjLT5od2lzb19jdHhzW2ldLmN0eCk7Cj4gPiA+ICsgICAgICAgfQo+ID4gPiArfQo+ID4g PiArCj4gPiA+ICt2b2lkIHNiaV9od2lzb19kb21haW5fZW50ZXIoY29uc3Qgc3RydWN0IHNiaV9k b21haW4gKmRzdCwKPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVj dCBzYmlfZG9tYWluICpzcmMpCj4gPiA+ICt7Cj4gPiA+ICsgICAgICAgdTMyIGk7Cj4gPiA+ICsK PiA+ID4gKyAgICAgICBpZiAoIWRzdCB8fCAhZHN0LT5od2lzb19jdHhzKQo+ID4gPiArICAgICAg ICAgICAgICAgcmV0dXJuOwo+ID4gPiArCj4gPiA+ICsgICAgICAgZm9yIChpID0gMDsgaSA8IGRz dC0+aHdpc29fY3R4X2NvdW50OyBpKyspIHsKPiA+ID4gKyAgICAgICAgICAgICAgIGlmICghZHN0 LT5od2lzb19jdHhzW2ldLm9wcyB8fAo+ID4gPiArICAgICAgICAgICAgICAgICAgICFkc3QtPmh3 aXNvX2N0eHNbaV0ub3BzLT5kb21haW5fZW50ZXIpCj4gPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgIGNvbnRpbnVlOwo+ID4gPiArCj4gPiA+ICsgICAgICAgICAgICAgICBkc3QtPmh3aXNvX2N0 eHNbaV0ub3BzLT5kb21haW5fZW50ZXIoCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBkc3QsIHNyYywgZHN0LT5od2lzb19jdHhzW2ldLmN0eCk7Cj4gPiA+ICsg ICAgICAgfQo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICt2b2lkIHNiaV9od2lzb19kb21haW5fY2xl YW51cChzdHJ1Y3Qgc2JpX2RvbWFpbiAqZG9tKQo+ID4gPiArewo+ID4gPiArICAgICAgIHUzMiBp Owo+ID4gPiArCj4gPiA+ICsgICAgICAgaWYgKCFkb20gfHwgIWRvbS0+aHdpc29fY3R4cykKPiA+ ID4gKyAgICAgICAgICAgICAgIHJldHVybjsKPiA+ID4gKwo+ID4gPiArICAgICAgIGZvciAoaSA9 IDA7IGkgPCBkb20tPmh3aXNvX2N0eF9jb3VudDsgaSsrKSB7Cj4gPiA+ICsgICAgICAgICAgICAg ICBpZiAoIWRvbS0+aHdpc29fY3R4c1tpXS5vcHMgfHwKPiA+ID4gKyAgICAgICAgICAgICAgICAg ICAhZG9tLT5od2lzb19jdHhzW2ldLm9wcy0+ZG9tYWluX2NsZWFudXApCj4gPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+ID4gPiArCj4gPiA+ICsgICAgICAgICAgICAgICBk b20tPmh3aXNvX2N0eHNbaV0ub3BzLT5kb21haW5fY2xlYW51cCgKPiA+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbSwgZG9tLT5od2lzb19jdHhzW2ldLmN0eCk7 Cj4gPiA+ICsgICAgICAgfQo+ID4gPiArCj4gPiA+ICsgICAgICAgc2JpX2ZyZWUoZG9tLT5od2lz b19jdHhzKTsKPiA+ID4gKyAgICAgICBkb20tPmh3aXNvX2N0eHMgPSBOVUxMOwo+ID4gPiArICAg ICAgIGRvbS0+aHdpc29fY3R4X2NvdW50ID0gMDsKPiA+ID4gK30KPiA+ID4gLS0KPiA+ID4gMi4y NS4xCj4gPiA+Cj4gPgo+ID4gTGV0IG1lIHNlbmQgYSBzZXBhcmF0ZSBzZXJpZXMgc2hvd2luZyBo b3cgdG8gZXh0ZW5kCj4gPiBzYmlfaGFydF9pc29sYXRpb24gYXMgc3VnZ2VzdGVkIGFib3ZlLgo+ ID4KPgo+IEkganVzdCBwb3N0ZWQgdGhlIHNlcmllcyB0byBleHRlbmQgdGhlIGV4aXN0aW5nIGhh cnQgcHJvdGVjdGlvbgo+IGFic3RyYWN0aW9uLgo+Cj4gUmVmZXIsIHBhdGNoIHNlcmllcyAiW1BB VENIIDAvNV0gRXh0ZW5kIGhhcnQgcHJvdGVjdGlvbiBhYnN0cmFjdGlvbgo+IGZvciBJRCBjb25m aWd1cmF0aW9uIgo+CgpJIGhhdmUgcG9zdGVkIGEgdjIgc2VyaWVzICJbUEFUQ0ggdjIgMC80XSBB ZGQgV29ybGRHdWFyZCBzdXBwb3J0IHdpdGgKd2djaGVja2VyMiIgWzFdIGJhc2VkIG9uIHlvdXIg c2VyaWVzLgpBbGwgaW1wbGVtZW50YXRpb25zIG9mIFdHIGFyZSBvbiB0b3Agb2Ygc2JpX2hhcnRf cHJvdGVjdGlvbiBhbmQgc2JpX2RvbWFpbl9kYXRhLgpQbGVhc2Uga2luZGx5IHByb3ZpZGUgeW91 ciBmZWVkYmFjay4KClsxXSBodHRwczovL2xvcmUua2VybmVsLm9yZy9vcGVuc2JpLzIwMjYwNzI1 MDIzODIxLjM3OTU2MTgtMS1yYXltb25kbWFvY2FAZ21haWwuY29tLwoKVGhhbmtzIGFuZCByZWdh cmRzLApSYXltb25kCgoKPiBSZWdhcmRzLAo+IEFudXAKCi0tIApvcGVuc2JpIG1haWxpbmcgbGlz dApvcGVuc2JpQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcv bWFpbG1hbi9saXN0aW5mby9vcGVuc2JpCg==