From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Michael S. Tsirkin" Subject: Re: [PATCH 6/7] qemu: Implement virtio-pstore device Date: Thu, 28 Jul 2016 03:02:54 +0300 Message-ID: <20160728023254-mutt-send-email-mst@kernel.org> References: <1469632111-23260-1-git-send-email-namhyung@kernel.org> <1469632111-23260-7-git-send-email-namhyung@kernel.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <1469632111-23260-7-git-send-email-namhyung@kernel.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: virtualization-bounces@lists.linux-foundation.org Errors-To: virtualization-bounces@lists.linux-foundation.org To: Namhyung Kim Cc: Tony Luck , Kees Cook , kvm@vger.kernel.org, Radim =?utf-8?B?S3LEjW3DocWZ?= , Anton Vorontsov , LKML , Steven Rostedt , qemu-devel@nongnu.org, Minchan Kim , Anthony Liguori , Colin Cross , Paolo Bonzini , virtualization@lists.linux-foundation.org, Ingo Molnar List-Id: virtualization@lists.linuxfoundation.org T24gVGh1LCBKdWwgMjgsIDIwMTYgYXQgMTI6MDg6MzBBTSArMDkwMCwgTmFtaHl1bmcgS2ltIHdy b3RlOgo+IEFkZCB2aXJ0aW8gcHN0b3JlIGRldmljZSB0byBhbGxvdyBrZXJuZWwgbG9nIGZpbGVz IHNhdmVkIG9uIHRoZSBob3N0Lgo+IEl0IHdpbGwgc2F2ZSB0aGUgbG9nIGZpbGVzIG9uIHRoZSBk aXJlY3RvcnkgZ2l2ZW4gYnkgcHN0b3JlIGRldmljZQo+IG9wdGlvbi4KPiAKPiAgICQgcWVtdS1z eXN0ZW0teDg2XzY0IC1kZXZpY2UgdmlydGlvLXBzdG9yZSxkaXJlY3Rvcnk9ZGlyLXh4IC4uLgo+ IAo+ICAgKGd1ZXN0KSAjIGVjaG8gYyA+IC9wcm9jL3N5c3JxLXRyaWdnZXIKClNvIGlmIHRoZSBw b2ludCBpcyBoYW5kbGluZyBzeXN0ZW0gY3Jhc2hlcywgSSBzdXNwZWN0CnZpcnRpbyBpcyB0aGUg d3JvbmcgcHJvdG9jb2wgdG8gdXNlLiBBVE0gaXQncyByYXRoZXIKZWxhYm9yYXRlIGZvciBwZXJm b3JtYW5jZSwgaXQncyBsaWtlbHkgbm90IHRvIHdvcmsgd2hlbgpsaW51eCBpcyBjcmFzaGluZy4g SSB0aGluayB5b3Ugd2FudCBzb21ldGhpbmcgdmVyeSB2ZXJ5CnNpbXBsZSB0aGF0IHdpbGwgc3Rp bGwgd29yayB3aGVuIHlvdSBjcmFzaC4gTGlrZSBtYXliZQphIHNlcmlhbCBkZXZpY2U/Cgo+ICAg JCBscyBkaXIteHgKPiAgIGRtZXNnLTEuZW5jLnogIGRtZXNnLTIuZW5jLnoKPiAKPiBUaGUgbG9n IGZpbGVzIGFyZSB1c3VhbGx5IGNvbXByZXNzZWQgdXNpbmcgemxpYi4gIFVzZXJzIGNhbiBzZWUg dGhlIGxvZwo+IG1lc3NhZ2VzIGRpcmVjdGx5IG9uIHRoZSBob3N0IG9yIG9uIHRoZSBndWVzdCAo dXNpbmcgcHN0b3JlIGZpbGVzeXN0ZW0pLgoKU28gdGhpcyBsYWNrcyBhbGwgbWFuYWdlbWVudCB0 b29scyB0aGF0IGEgcmVndWxhciBzdG9yYWdlIGRldmljZQpoYXMsIGFuZCB0aGVzZSBhcmUgbmVj ZXNzYXJ5IGlmIHBlb3BsZSBhcmUgdG8gdXNlIHRoaXMKaW4gcHJvZHVjdGlvbi4KCkZvciBleGFt cGxlLCBzb21lIGtpbmQgb2YgcHJvdmlzaW9uIGZvciBsaW1pdGluZyB0aGUgYW1vdW50IG9mIGhv c3QgZGlzawp0aGlzIGNhbiBjb25zdW1lIHNlZW1zIGNhbGxlZCBmb3IuIFJhdGUtbGltaXRpbmcg ZGlzayB3cml0ZXMKb24gaG9zdCBhbHNvIHNlZW1zIG5lY2Vzc2FyeS4gSGFuZGxpbmcgaG9zdCBk aXNrIGVycm9ycyBhbHdheXMKcHJvcGFnYXRlcyBlcnJvciB0byBndWVzdCBidXQgYW4gb3B0aW9u IHRvIGUuZy4gc3RvcCB2bSBtaWdodApiZSB1c2VmdWwgdG8gYXZvaWQgY29ycnVwdGlvbi4KCj4g Cj4gVGhlICdkaXJlY3RvcnknIHByb3BlcnR5IGlzIHJlcXVpcmVkIGZvciB2aXJ0aW8tcHN0b3Jl IGRldmljZSB0byB3b3JrLgo+IEl0IGFsc28gYWRkcyAnYnVmc2l6ZScgYW5kICdjb25zb2xlJyAo Ym9vbGVhbikgcHJvcGVydGllcy4KCk5vIGlkZWEgd2hhdCB0aGVzZSBkby4gU2VlbSB0byBiZSBS VyBieSBndWVzdCBidXQgaGF2ZSBubyBlZmZlY3QKb3RoZXJ3aXNlLgoKCj4gQ2M6IFBhb2xvIEJv bnppbmkgPHBib256aW5pQHJlZGhhdC5jb20+Cj4gQ2M6IFJhZGltIEtyxI1tw6HFmSA8cmtyY21h ckByZWRoYXQuY29tPgo+IENjOiAiTWljaGFlbCBTLiBUc2lya2luIiA8bXN0QHJlZGhhdC5jb20+ Cj4gQ2M6IEFudGhvbnkgTGlndW9yaSA8YWxpZ3VvcmlAYW1hem9uLmNvbT4KPiBDYzogQW50b24g Vm9yb250c292IDxhbnRvbkBlbm9tc2cub3JnPgo+IENjOiBDb2xpbiBDcm9zcyA8Y2Nyb3NzQGFu ZHJvaWQuY29tPgo+IENjOiBLZWVzIENvb2sgPGtlZXNjb29rQGNocm9taXVtLm9yZz4KPiBDYzog VG9ueSBMdWNrIDx0b255Lmx1Y2tAaW50ZWwuY29tPgo+IENjOiBTdGV2ZW4gUm9zdGVkdCA8cm9z dGVkdEBnb29kbWlzLm9yZz4KPiBDYzogSW5nbyBNb2xuYXIgPG1pbmdvQGtlcm5lbC5vcmc+Cj4g Q2M6IE1pbmNoYW4gS2ltIDxtaW5jaGFuQGtlcm5lbC5vcmc+Cj4gQ2M6IGt2bUB2Z2VyLmtlcm5l bC5vcmcKPiBDYzogcWVtdS1kZXZlbEBub25nbnUub3JnCj4gQ2M6IHZpcnR1YWxpemF0aW9uQGxp c3RzLmxpbnV4LWZvdW5kYXRpb24ub3JnCj4gU2lnbmVkLW9mZi1ieTogTmFtaHl1bmcgS2ltIDxu YW1oeXVuZ0BrZXJuZWwub3JnPgo+IC0tLQo+ICBody92aXJ0aW8vTWFrZWZpbGUub2JqcyAgICAg ICAgICAgICAgICAgICAgICAgIHwgICAyICstCj4gIGh3L3ZpcnRpby92aXJ0aW8tcGNpLmMgICAg ICAgICAgICAgICAgICAgICAgICAgfCAgNTQgKysrCj4gIGh3L3ZpcnRpby92aXJ0aW8tcGNpLmgg ICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTQgKwo+ICBody92aXJ0aW8vdmlydGlvLXBzdG9y ZS5jICAgICAgICAgICAgICAgICAgICAgIHwgNDc3ICsrKysrKysrKysrKysrKysrKysrKysrKysK PiAgaW5jbHVkZS9ody9wY2kvcGNpLmggICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMSAr Cj4gIGluY2x1ZGUvaHcvdmlydGlvL3ZpcnRpby1wc3RvcmUuaCAgICAgICAgICAgICAgfCAgMzQg KysKPiAgaW5jbHVkZS9zdGFuZGFyZC1oZWFkZXJzL2xpbnV4L3ZpcnRpb19pZHMuaCAgICB8ICAg MSArCj4gIGluY2x1ZGUvc3RhbmRhcmQtaGVhZGVycy9saW51eC92aXJ0aW9fcHN0b3JlLmggfCAg ODAgKysrKysKPiAgcWRldi1tb25pdG9yLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB8ICAgMSArCj4gIDkgZmlsZXMgY2hhbmdlZCwgNjYzIGluc2VydGlvbnMoKyksIDEgZGVsZXRp b24oLSkKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGh3L3ZpcnRpby92aXJ0aW8tcHN0b3JlLmMKPiAg Y3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvaHcvdmlydGlvL3ZpcnRpby1wc3RvcmUuaAo+ICBj cmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9zdGFuZGFyZC1oZWFkZXJzL2xpbnV4L3ZpcnRpb19w c3RvcmUuaAo+IAo+IGRpZmYgLS1naXQgYS9ody92aXJ0aW8vTWFrZWZpbGUub2JqcyBiL2h3L3Zp cnRpby9NYWtlZmlsZS5vYmpzCj4gaW5kZXggM2UyYjE3NS4uYWFlNzA4MiAxMDA2NDQKPiAtLS0g YS9ody92aXJ0aW8vTWFrZWZpbGUub2Jqcwo+ICsrKyBiL2h3L3ZpcnRpby9NYWtlZmlsZS5vYmpz Cj4gQEAgLTQsNCArNCw0IEBAIGNvbW1vbi1vYmoteSArPSB2aXJ0aW8tYnVzLm8KPiAgY29tbW9u LW9iai15ICs9IHZpcnRpby1tbWlvLm8KPiAgCj4gIG9iai15ICs9IHZpcnRpby5vIHZpcnRpby1i YWxsb29uLm8gCj4gLW9iai0kKENPTkZJR19MSU5VWCkgKz0gdmhvc3QubyB2aG9zdC1iYWNrZW5k Lm8gdmhvc3QtdXNlci5vCj4gK29iai0kKENPTkZJR19MSU5VWCkgKz0gdmhvc3QubyB2aG9zdC1i YWNrZW5kLm8gdmhvc3QtdXNlci5vIHZpcnRpby1wc3RvcmUubwo+IGRpZmYgLS1naXQgYS9ody92 aXJ0aW8vdmlydGlvLXBjaS5jIGIvaHcvdmlydGlvL3ZpcnRpby1wY2kuYwo+IGluZGV4IGYwNjc3 YjcuLmQ5OWE0MDUgMTAwNjQ0Cj4gLS0tIGEvaHcvdmlydGlvL3ZpcnRpby1wY2kuYwo+ICsrKyBi L2h3L3ZpcnRpby92aXJ0aW8tcGNpLmMKPiBAQCAtMjQxNCw2ICsyNDE0LDU5IEBAIHN0YXRpYyBj b25zdCBUeXBlSW5mbyB2aXJ0aW9faG9zdF9wY2lfaW5mbyA9IHsKPiAgfTsKPiAgI2VuZGlmCj4g IAo+ICsvKiB2aXJ0aW8tcHN0b3JlLXBjaSAqLwo+ICsKPiArc3RhdGljIHZvaWQgdmlydGlvX3Bz dG9yZV9wY2lfcmVhbGl6ZShWaXJ0SU9QQ0lQcm94eSAqdnBjaV9kZXYsIEVycm9yICoqZXJycCkK PiArewo+ICsgICAgVmlydElPUHN0b3JlUENJICp2cHMgPSBWSVJUSU9fUFNUT1JFX1BDSSh2cGNp X2Rldik7Cj4gKyAgICBEZXZpY2VTdGF0ZSAqdmRldiA9IERFVklDRSgmdnBzLT52ZGV2KTsKPiAr ICAgIEVycm9yICplcnIgPSBOVUxMOwo+ICsKPiArICAgIHFkZXZfc2V0X3BhcmVudF9idXModmRl diwgQlVTKCZ2cGNpX2Rldi0+YnVzKSk7Cj4gKyAgICBvYmplY3RfcHJvcGVydHlfc2V0X2Jvb2wo T0JKRUNUKHZkZXYpLCB0cnVlLCAicmVhbGl6ZWQiLCAmZXJyKTsKPiArICAgIGlmIChlcnIpIHsK PiArICAgICAgICBlcnJvcl9wcm9wYWdhdGUoZXJycCwgZXJyKTsKPiArICAgICAgICByZXR1cm47 Cj4gKyAgICB9Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHZpcnRpb19wc3RvcmVfcGNpX2NsYXNz X2luaXQoT2JqZWN0Q2xhc3MgKmtsYXNzLCB2b2lkICpkYXRhKQo+ICt7Cj4gKyAgICBEZXZpY2VD bGFzcyAqZGMgPSBERVZJQ0VfQ0xBU1Moa2xhc3MpOwo+ICsgICAgVmlydGlvUENJQ2xhc3MgKmsg PSBWSVJUSU9fUENJX0NMQVNTKGtsYXNzKTsKPiArICAgIFBDSURldmljZUNsYXNzICpwY2lkZXZf ayA9IFBDSV9ERVZJQ0VfQ0xBU1Moa2xhc3MpOwo+ICsKPiArICAgIGstPnJlYWxpemUgPSB2aXJ0 aW9fcHN0b3JlX3BjaV9yZWFsaXplOwo+ICsgICAgc2V0X2JpdChERVZJQ0VfQ0FURUdPUllfTUlT QywgZGMtPmNhdGVnb3JpZXMpOwo+ICsKPiArICAgIHBjaWRldl9rLT52ZW5kb3JfaWQgPSBQQ0lf VkVORE9SX0lEX1JFREhBVF9RVU1SQU5FVDsKPiArICAgIHBjaWRldl9rLT5kZXZpY2VfaWQgPSBQ Q0lfREVWSUNFX0lEX1ZJUlRJT19QU1RPUkU7Cj4gKyAgICBwY2lkZXZfay0+cmV2aXNpb24gPSBW SVJUSU9fUENJX0FCSV9WRVJTSU9OOwo+ICsgICAgcGNpZGV2X2stPmNsYXNzX2lkID0gUENJX0NM QVNTX09USEVSUzsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgdmlydGlvX3BzdG9yZV9wY2lfaW5z dGFuY2VfaW5pdChPYmplY3QgKm9iaikKPiArewo+ICsgICAgVmlydElPUHN0b3JlUENJICpkZXYg PSBWSVJUSU9fUFNUT1JFX1BDSShvYmopOwo+ICsKPiArICAgIHZpcnRpb19pbnN0YW5jZV9pbml0 X2NvbW1vbihvYmosICZkZXYtPnZkZXYsIHNpemVvZihkZXYtPnZkZXYpLAo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFRZUEVfVklSVElPX1BTVE9SRSk7Cj4gKyAgICBvYmplY3Rf cHJvcGVydHlfYWRkX2FsaWFzKG9iaiwgImRpcmVjdG9yeSIsIE9CSkVDVCgmZGV2LT52ZGV2KSwK PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRpcmVjdG9yeSIsICZlcnJvcl9hYm9y dCk7Cj4gKyAgICBvYmplY3RfcHJvcGVydHlfYWRkX2FsaWFzKG9iaiwgImJ1ZnNpemUiLCBPQkpF Q1QoJmRldi0+dmRldiksCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJidWZzaXpl IiwgJmVycm9yX2Fib3J0KTsKPiArICAgIG9iamVjdF9wcm9wZXJ0eV9hZGRfYWxpYXMob2JqLCAi Y29uc29sZSIsIE9CSkVDVCgmZGV2LT52ZGV2KSwKPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgImNvbnNvbGUiLCAmZXJyb3JfYWJvcnQpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qg VHlwZUluZm8gdmlydGlvX3BzdG9yZV9wY2lfaW5mbyA9IHsKPiArICAgIC5uYW1lICAgICAgICAg ID0gVFlQRV9WSVJUSU9fUFNUT1JFX1BDSSwKPiArICAgIC5wYXJlbnQgICAgICAgID0gVFlQRV9W SVJUSU9fUENJLAo+ICsgICAgLmluc3RhbmNlX3NpemUgPSBzaXplb2YoVmlydElPUHN0b3JlUENJ KSwKPiArICAgIC5pbnN0YW5jZV9pbml0ID0gdmlydGlvX3BzdG9yZV9wY2lfaW5zdGFuY2VfaW5p dCwKPiArICAgIC5jbGFzc19pbml0ICAgID0gdmlydGlvX3BzdG9yZV9wY2lfY2xhc3NfaW5pdCwK PiArfTsKPiArCj4gIC8qIHZpcnRpby1wY2ktYnVzICovCj4gIAo+ICBzdGF0aWMgdm9pZCB2aXJ0 aW9fcGNpX2J1c19uZXcoVmlydGlvQnVzU3RhdGUgKmJ1cywgc2l6ZV90IGJ1c19zaXplLAo+IEBA IC0yNDgzLDYgKzI1MzYsNyBAQCBzdGF0aWMgdm9pZCB2aXJ0aW9fcGNpX3JlZ2lzdGVyX3R5cGVz KHZvaWQpCj4gICNpZmRlZiBDT05GSUdfVkhPU1RfU0NTSQo+ICAgICAgdHlwZV9yZWdpc3Rlcl9z dGF0aWMoJnZob3N0X3Njc2lfcGNpX2luZm8pOwo+ICAjZW5kaWYKPiArICAgIHR5cGVfcmVnaXN0 ZXJfc3RhdGljKCZ2aXJ0aW9fcHN0b3JlX3BjaV9pbmZvKTsKPiAgfQo+ICAKPiAgdHlwZV9pbml0 KHZpcnRpb19wY2lfcmVnaXN0ZXJfdHlwZXMpCj4gZGlmZiAtLWdpdCBhL2h3L3ZpcnRpby92aXJ0 aW8tcGNpLmggYi9ody92aXJ0aW8vdmlydGlvLXBjaS5oCj4gaW5kZXggZTQ1NDhjMi4uYjRjMDM5 ZiAxMDA2NDQKPiAtLS0gYS9ody92aXJ0aW8vdmlydGlvLXBjaS5oCj4gKysrIGIvaHcvdmlydGlv L3ZpcnRpby1wY2kuaAo+IEBAIC0zMSw2ICszMSw3IEBACj4gICNpZmRlZiBDT05GSUdfVkhPU1Rf U0NTSQo+ICAjaW5jbHVkZSAiaHcvdmlydGlvL3Zob3N0LXNjc2kuaCIKPiAgI2VuZGlmCj4gKyNp bmNsdWRlICJody92aXJ0aW8vdmlydGlvLXBzdG9yZS5oIgo+ICAKPiAgdHlwZWRlZiBzdHJ1Y3Qg VmlydElPUENJUHJveHkgVmlydElPUENJUHJveHk7Cj4gIHR5cGVkZWYgc3RydWN0IFZpcnRJT0Js a1BDSSBWaXJ0SU9CbGtQQ0k7Cj4gQEAgLTQ0LDYgKzQ1LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgVmly dElPSW5wdXRQQ0kgVmlydElPSW5wdXRQQ0k7Cj4gIHR5cGVkZWYgc3RydWN0IFZpcnRJT0lucHV0 SElEUENJIFZpcnRJT0lucHV0SElEUENJOwo+ICB0eXBlZGVmIHN0cnVjdCBWaXJ0SU9JbnB1dEhv c3RQQ0kgVmlydElPSW5wdXRIb3N0UENJOwo+ICB0eXBlZGVmIHN0cnVjdCBWaXJ0SU9HUFVQQ0kg VmlydElPR1BVUENJOwo+ICt0eXBlZGVmIHN0cnVjdCBWaXJ0SU9Qc3RvcmVQQ0kgVmlydElPUHN0 b3JlUENJOwo+ICAKPiAgLyogdmlydGlvLXBjaS1idXMgKi8KPiAgCj4gQEAgLTMxMSw2ICszMTMs MTggQEAgc3RydWN0IFZpcnRJT0dQVVBDSSB7Cj4gICAgICBWaXJ0SU9HUFUgdmRldjsKPiAgfTsK PiAgCj4gKy8qCj4gKyAqIHZpcnRpby1wc3RvcmUtcGNpOiBUaGlzIGV4dGVuZHMgVmlydGlvUENJ UHJveHkuCj4gKyAqLwo+ICsjZGVmaW5lIFRZUEVfVklSVElPX1BTVE9SRV9QQ0kgInZpcnRpby1w c3RvcmUtcGNpIgo+ICsjZGVmaW5lIFZJUlRJT19QU1RPUkVfUENJKG9iaikgXAo+ICsgICAgICAg IE9CSkVDVF9DSEVDSyhWaXJ0SU9Qc3RvcmVQQ0ksIChvYmopLCBUWVBFX1ZJUlRJT19QU1RPUkVf UENJKQo+ICsKPiArc3RydWN0IFZpcnRJT1BzdG9yZVBDSSB7Cj4gKyAgICBWaXJ0SU9QQ0lQcm94 eSBwYXJlbnRfb2JqOwo+ICsgICAgVmlydElPUHN0b3JlIHZkZXY7Cj4gK307Cj4gKwo+ICAvKiBW aXJ0aW8gQUJJIHZlcnNpb24sIGlmIHdlIGluY3JlbWVudCB0aGlzLCB3ZSBicmVhayB0aGUgZ3Vl c3QgZHJpdmVyLiAqLwo+ICAjZGVmaW5lIFZJUlRJT19QQ0lfQUJJX1ZFUlNJT04gICAgICAgICAg MAo+ICAKPiBkaWZmIC0tZ2l0IGEvaHcvdmlydGlvL3ZpcnRpby1wc3RvcmUuYyBiL2h3L3ZpcnRp by92aXJ0aW8tcHN0b3JlLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAu LjJjYTc3ODYKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvaHcvdmlydGlvL3ZpcnRpby1wc3RvcmUu Ywo+IEBAIC0wLDAgKzEsNDc3IEBACj4gKy8qCj4gKyAqIFZpcnRpbyBQc3RvcmUgRGV2aWNlCj4g KyAqCj4gKyAqIENvcHlyaWdodCAoQykgMjAxNiAgTEcgRWxlY3Ryb25pY3MKPiArICoKPiArICog QXV0aG9yczoKPiArICogIE5hbWh5dW5nIEtpbSAgPG5hbWh5dW5nQGdtYWlsLmNvbT4KPiArICoK PiArICogVGhpcyB3b3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQ TCwgdmVyc2lvbiAyLgoKV2UgZ2VuZXJhbGx5IGFzayBuZXcgY29kZSB0byBiZSB2MiBvciBsYXRl ci4KCj4gIFNlZQo+ICsgKiB0aGUgQ09QWUlORyBmaWxlIGluIHRoZSB0b3AtbGV2ZWwgZGlyZWN0 b3J5Lgo+ICsgKgo+ICsgKi8KPiArCj4gKyNpbmNsdWRlIDxzdGRpby5oPgo+ICsKPiArI2luY2x1 ZGUgInFlbXUvb3NkZXAuaCIKPiArI2luY2x1ZGUgInFlbXUvaW92LmgiCj4gKyNpbmNsdWRlICJx ZW11LWNvbW1vbi5oIgo+ICsjaW5jbHVkZSAicWVtdS9jdXRpbHMuaCIKPiArI2luY2x1ZGUgInFl bXUvZXJyb3ItcmVwb3J0LmgiCj4gKyNpbmNsdWRlICJzeXNlbXUva3ZtLmgiCj4gKyNpbmNsdWRl ICJxYXBpL3Zpc2l0b3IuaCIKPiArI2luY2x1ZGUgInFhcGktZXZlbnQuaCIKPiArI2luY2x1ZGUg InRyYWNlLmgiCj4gKwo+ICsjaW5jbHVkZSAiaHcvdmlydGlvL3ZpcnRpby5oIgo+ICsjaW5jbHVk ZSAiaHcvdmlydGlvL3ZpcnRpby1idXMuaCIKPiArI2luY2x1ZGUgImh3L3ZpcnRpby92aXJ0aW8t YWNjZXNzLmgiCj4gKyNpbmNsdWRlICJody92aXJ0aW8vdmlydGlvLXBzdG9yZS5oIgo+ICsKPiAr Cj4gK3N0YXRpYyB2b2lkIHZpcnRpb19wc3RvcmVfdG9fZmlsZW5hbWUoVmlydElPUHN0b3JlICpz LCBjaGFyICpidWYsIHNpemVfdCBzeiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzdHJ1Y3QgdmlydGlvX3BzdG9yZV9yZXEgKnJlcSkKPiArewo+ICsgICAgY29uc3Qg Y2hhciAqYmFzZW5hbWU7Cj4gKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgaWQgPSAwOwo+ICsgICAg dW5zaWduZWQgaW50IGZsYWdzID0gbGUzMl90b19jcHUocmVxLT5mbGFncyk7Cj4gKwo+ICsgICAg c3dpdGNoIChsZTE2X3RvX2NwdShyZXEtPnR5cGUpKSB7Cj4gKyAgICBjYXNlIFZJUlRJT19QU1RP UkVfVFlQRV9ETUVTRzoKPiArICAgICAgICBiYXNlbmFtZSA9ICJkbWVzZyI7Cj4gKyAgICAgICAg aWQgPSBzLT5pZCsrOwo+ICsgICAgICAgIGJyZWFrOwo+ICsgICAgY2FzZSBWSVJUSU9fUFNUT1JF X1RZUEVfQ09OU09MRToKPiArICAgICAgICBiYXNlbmFtZSA9ICJjb25zb2xlIjsKPiArICAgICAg ICBpZiAocy0+Y29uc29sZV9pZCkgewo+ICsgICAgICAgICAgICBpZCA9IHMtPmNvbnNvbGVfaWQ7 Cj4gKyAgICAgICAgfSBlbHNlIHsKPiArICAgICAgICAgICAgaWQgPSBzLT5jb25zb2xlX2lkID0g cy0+aWQrKzsKPiArICAgICAgICB9Cj4gKyAgICAgICAgYnJlYWs7Cj4gKyAgICBkZWZhdWx0Ogo+ ICsgICAgICAgIGJhc2VuYW1lID0gInVua25vd24iOwo+ICsgICAgICAgIGJyZWFrOwo+ICsgICAg fQo+ICsKPiArICAgIHNucHJpbnRmKGJ1Ziwgc3osICIlcy8lcy0lbGx1JXMiLCBzLT5kaXJlY3Rv cnksIGJhc2VuYW1lLCBpZCwKPiArICAgICAgICAgICAgIGZsYWdzICYgVklSVElPX1BTVE9SRV9G TF9DT01QUkVTU0VEID8gIi5lbmMueiIgOiAiIik7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHZp cnRpb19wc3RvcmVfZnJvbV9maWxlbmFtZShWaXJ0SU9Qc3RvcmUgKnMsIGNoYXIgKm5hbWUsCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpidWYsIHNpemVf dCBzeiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2 aXJ0aW9fcHN0b3JlX2ZpbGVpbmZvICppbmZvKQo+ICt7Cj4gKyAgICBzbnByaW50ZihidWYsIHN6 LCAiJXMvJXMiLCBzLT5kaXJlY3RvcnksIG5hbWUpOwoKaWYgdGhpcyBkb2VzIG5vdCBmaXQsIGJ1 ZiB3aWxsIG5vdCBiZSAwIHRlcm1pbmF0ZWQgYW5kIGNhbgpnZW5lcmFsbHkgYmUgY29ycnVwdGVk LgoKCj4gKwo+ICsgICAgaWYgKGdfc3RyX2hhc19wcmVmaXgobmFtZSwgImRtZXNnLSIpKSB7Cj4g KyAgICAgICAgaW5mby0+dHlwZSA9IFZJUlRJT19QU1RPUkVfVFlQRV9ETUVTRzsKPiArICAgICAg ICBuYW1lICs9IHN0cmxlbigiZG1lc2ctIik7Cj4gKyAgICB9IGVsc2UgaWYgKGdfc3RyX2hhc19w cmVmaXgobmFtZSwgImNvbnNvbGUtIikpIHsKPiArICAgICAgICBpbmZvLT50eXBlID0gVklSVElP X1BTVE9SRV9UWVBFX0NPTlNPTEU7Cj4gKyAgICAgICAgbmFtZSArPSBzdHJsZW4oImNvbnNvbGUt Iik7Cj4gKyAgICB9IGVsc2UgaWYgKGdfc3RyX2hhc19wcmVmaXgobmFtZSwgInVua25vd24tIikp IHsKPiArICAgICAgICBpbmZvLT50eXBlID0gVklSVElPX1BTVE9SRV9UWVBFX1VOS05PV047Cj4g KyAgICAgICAgbmFtZSArPSBzdHJsZW4oInVua25vd24tIik7Cj4gKyAgICB9Cj4gKwo+ICsgICAg cWVtdV9zdHJ0b3VsbChuYW1lLCBOVUxMLCAwLCAmaW5mby0+aWQpOwo+ICsKPiArICAgIGluZm8t PmZsYWdzID0gMDsKPiArICAgIGlmIChnX3N0cl9oYXNfc3VmZml4KG5hbWUsICIuZW5jLnoiKSkg ewo+ICsgICAgICAgIGluZm8tPmZsYWdzIHw9IFZJUlRJT19QU1RPUkVfRkxfQ09NUFJFU1NFRDsK PiArICAgIH0KPiArfQo+ICsKPiArc3RhdGljIHNzaXplX3QgdmlydGlvX3BzdG9yZV9kb19vcGVu KFZpcnRJT1BzdG9yZSAqcykKPiArewo+ICsgICAgcy0+ZGlycCA9IG9wZW5kaXIocy0+ZGlyZWN0 b3J5KTsKPiArICAgIGlmIChzLT5kaXJwID09IE5VTEwpIHsKPiArICAgICAgICByZXR1cm4gLTE7 Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBzc2l6ZV90 IHZpcnRpb19wc3RvcmVfZG9fcmVhZChWaXJ0SU9Qc3RvcmUgKnMsIHN0cnVjdCBpb3ZlYyAqaW5f c2csCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQg aW5fbnVtLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHZp cnRpb19wc3RvcmVfcmVzICpyZXMpCj4gK3sKPiArICAgIGNoYXIgcGF0aFtQQVRIX01BWF07Cj4g KyAgICBpbnQgZmQ7Cj4gKyAgICBzc2l6ZV90IGxlbjsKPiArICAgIHN0cnVjdCBzdGF0IHN0YnVm Owo+ICsgICAgc3RydWN0IGRpcmVudCAqZGVudDsKPiArICAgIGludCBzZ19udW0gPSBpbl9udW07 Cj4gKyAgICBzdHJ1Y3QgaW92ZWMgc2dbc2dfbnVtXTsKPiArICAgIHN0cnVjdCB2aXJ0aW9fcHN0 b3JlX2ZpbGVpbmZvIGluZm87Cj4gKyAgICBzaXplX3Qgb2Zmc2V0ID0gc2l6ZW9mKCpyZXMpICsg c2l6ZW9mKGluZm8pOwo+ICsKPiArICAgIGlmIChzLT5kaXJwID09IE5VTEwpIHsKPiArICAgICAg ICByZXR1cm4gLTE7Cj4gKyAgICB9Cj4gKwo+ICsgICAgZGVudCA9IHJlYWRkaXIocy0+ZGlycCk7 Cj4gKyAgICB3aGlsZSAoZGVudCkgewo+ICsgICAgICAgIGlmIChkZW50LT5kX25hbWVbMF0gIT0g Jy4nKSB7Cj4gKyAgICAgICAgICAgIGJyZWFrOwo+ICsgICAgICAgIH0KPiArICAgICAgICBkZW50 ID0gcmVhZGRpcihzLT5kaXJwKTsKPiArICAgIH0KPiArCj4gKyAgICBpZiAoZGVudCA9PSBOVUxM KSB7Cj4gKyAgICAgICAgcmV0dXJuIDA7Cj4gKyAgICB9Cj4gKwo+ICsgICAgLyogc2tpcCByZXMg YW5kIGZpbGVpbmZvICovCj4gKyAgICBzZ19udW0gPSBpb3ZfY29weShzZywgc2dfbnVtLCBpbl9z ZywgaW5fbnVtLCBvZmZzZXQsCj4gKyAgICAgICAgICAgICAgICAgICAgICBpb3Zfc2l6ZShpbl9z ZywgaW5fbnVtKSAtIG9mZnNldCk7Cj4gKwo+ICsgICAgdmlydGlvX3BzdG9yZV9mcm9tX2ZpbGVu YW1lKHMsIGRlbnQtPmRfbmFtZSwgcGF0aCwgc2l6ZW9mKHBhdGgpLCAmaW5mbyk7Cj4gKyAgICBm ZCA9IG9wZW4ocGF0aCwgT19SRE9OTFkpOwo+ICsgICAgaWYgKGZkIDwgMCkgewo+ICsgICAgICAg IGVycm9yX3JlcG9ydCgiY2Fubm90IG9wZW4gJXMiLCBwYXRoKTsKPiArICAgICAgICByZXR1cm4g LTE7Cj4gKyAgICB9Cj4gKwo+ICsgICAgaWYgKGZzdGF0KGZkLCAmc3RidWYpIDwgMCkgewo+ICsg ICAgICAgIGxlbiA9IC0xOwo+ICsgICAgICAgIGdvdG8gb3V0Owo+ICsgICAgfQo+ICsKPiArICAg IGxlbiA9IHJlYWR2KGZkLCBzZywgc2dfbnVtKTsKPiArICAgIGlmIChsZW4gPCAwKSB7Cj4gKyAg ICAgICAgaWYgKGVycm5vID09IEVBR0FJTikgewo+ICsgICAgICAgICAgICBsZW4gPSAwOwo+ICsg ICAgICAgIH0KPiArICAgICAgICBnb3RvIG91dDsKPiArICAgIH0KPiArCj4gKyAgICBpbmZvLmlk ICAgICAgICA9IGNwdV90b19sZTY0KGluZm8uaWQpOwo+ICsgICAgaW5mby50eXBlICAgICAgPSBj cHVfdG9fbGUxNihpbmZvLnR5cGUpOwo+ICsgICAgaW5mby5mbGFncyAgICAgPSBjcHVfdG9fbGUz MihpbmZvLmZsYWdzKTsKPiArICAgIGluZm8ubGVuICAgICAgID0gY3B1X3RvX2xlMzIobGVuKTsK PiArICAgIGluZm8udGltZV9zZWMgID0gY3B1X3RvX2xlNjQoc3RidWYuc3RfY3RpbS50dl9zZWMp Owo+ICsgICAgaW5mby50aW1lX25zZWMgPSBjcHVfdG9fbGUzMihzdGJ1Zi5zdF9jdGltLnR2X25z ZWMpOwo+ICsKPiArICAgIGlvdl9mcm9tX2J1Zihpbl9zZywgaW5fbnVtLCBzaXplb2YoKnJlcyks ICZpbmZvLCBzaXplb2YoaW5mbykpOwo+ICsgICAgbGVuICs9IHNpemVvZihpbmZvKTsKPiArCj4g KyBvdXQ6Cj4gKyAgICBjbG9zZShmZCk7Cj4gKyAgICByZXR1cm4gbGVuOwo+ICt9Cj4gKwo+ICtz dGF0aWMgc3NpemVfdCB2aXJ0aW9fcHN0b3JlX2RvX3dyaXRlKFZpcnRJT1BzdG9yZSAqcywgc3Ry dWN0IGlvdmVjICpvdXRfc2csCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdW5zaWduZWQgaW50IG91dF9udW0sCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc3RydWN0IHZpcnRpb19wc3RvcmVfcmVxICpyZXEpCj4gK3sKPiArICAgIGNoYXIg cGF0aFtQQVRIX01BWF07Cj4gKyAgICBpbnQgZmQ7Cj4gKyAgICBzc2l6ZV90IGxlbjsKPiArICAg IHVuc2lnbmVkIHNob3J0IHR5cGU7Cj4gKyAgICBpbnQgZmxhZ3MgPSBPX1dST05MWSB8IE9fQ1JF QVQ7Cj4gKwo+ICsgICAgLyogd2UgYWxyZWFkeSBjb25zdW1lIHRoZSByZXEgKi8KPiArICAgIGlv dl9kaXNjYXJkX2Zyb250KCZvdXRfc2csICZvdXRfbnVtLCBzaXplb2YoKnJlcSkpOwo+ICsKPiAr ICAgIHZpcnRpb19wc3RvcmVfdG9fZmlsZW5hbWUocywgcGF0aCwgc2l6ZW9mKHBhdGgpLCByZXEp Owo+ICsKPiArICAgIHR5cGUgPSBsZTE2X3RvX2NwdShyZXEtPnR5cGUpOwo+ICsKPiArICAgIGlm ICh0eXBlID09IFZJUlRJT19QU1RPUkVfVFlQRV9ETUVTRykgewo+ICsgICAgICAgIGZsYWdzIHw9 IE9fVFJVTkM7Cj4gKyAgICB9IGVsc2UgaWYgKHR5cGUgPT0gVklSVElPX1BTVE9SRV9UWVBFX0NP TlNPTEUpIHsKPiArICAgICAgICBmbGFncyB8PSBPX0FQUEVORDsKPiArICAgIH0KPiArCj4gKyAg ICBmZCA9IG9wZW4ocGF0aCwgZmxhZ3MsIDA2NDQpOwo+ICsgICAgaWYgKGZkIDwgMCkgewo+ICsg ICAgICAgIGVycm9yX3JlcG9ydCgiY2Fubm90IG9wZW4gJXMiLCBwYXRoKTsKPiArICAgICAgICBy ZXR1cm4gLTE7Cj4gKyAgICB9Cj4gKyAgICBsZW4gPSB3cml0ZXYoZmQsIG91dF9zZywgb3V0X251 bSk7Cj4gKyAgICBjbG9zZShmZCk7Cj4gKwo+ICsgICAgcmV0dXJuIGxlbjsKCkFsbCB0aGlzIGlz IGJsb2NraW5nIFZNIHVudGlsIGhvc3QgaW8gY29tcGxldGVzLgoKCj4gK30KPiArCj4gK3N0YXRp YyBzc2l6ZV90IHZpcnRpb19wc3RvcmVfZG9fY2xvc2UoVmlydElPUHN0b3JlICpzKQo+ICt7Cj4g KyAgICBpZiAocy0+ZGlycCA9PSBOVUxMKSB7Cj4gKyAgICAgICAgcmV0dXJuIDA7Cj4gKyAgICB9 Cj4gKwo+ICsgICAgY2xvc2VkaXIocy0+ZGlycCk7Cj4gKyAgICBzLT5kaXJwID0gTlVMTDsKPiAr Cj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHNzaXplX3QgdmlydGlvX3BzdG9y ZV9kb19lcmFzZShWaXJ0SU9Qc3RvcmUgKnMsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3RydWN0IHZpcnRpb19wc3RvcmVfcmVxICpyZXEpCj4gK3sKPiArICAgIGNo YXIgcGF0aFtQQVRIX01BWF07Cj4gKwo+ICsgICAgdmlydGlvX3BzdG9yZV90b19maWxlbmFtZShz LCBwYXRoLCBzaXplb2YocGF0aCksIHJlcSk7Cj4gKwo+ICsgICAgcmV0dXJuIHVubGluayhwYXRo KTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgdmlydGlvX3BzdG9yZV9oYW5kbGVfaW8oVmlydElP RGV2aWNlICp2ZGV2LCBWaXJ0UXVldWUgKnZxKQo+ICt7Cj4gKyAgICBWaXJ0SU9Qc3RvcmUgKnMg PSBWSVJUSU9fUFNUT1JFKHZkZXYpOwo+ICsgICAgVmlydFF1ZXVlRWxlbWVudCAqZWxlbTsKPiAr ICAgIHN0cnVjdCB2aXJ0aW9fcHN0b3JlX3JlcSByZXE7Cj4gKyAgICBzdHJ1Y3QgdmlydGlvX3Bz dG9yZV9yZXMgcmVzOwo+ICsgICAgc3NpemVfdCBsZW4gPSAwOwo+ICsgICAgaW50IHJldDsKPiAr Cj4gKyAgICBmb3IgKDs7KSB7Cj4gKyAgICAgICAgZWxlbSA9IHZpcnRxdWV1ZV9wb3AodnEsIHNp emVvZihWaXJ0UXVldWVFbGVtZW50KSk7Cj4gKyAgICAgICAgaWYgKCFlbGVtKSB7Cj4gKyAgICAg ICAgICAgIHJldHVybjsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIGlmIChlbGVtLT5vdXRf bnVtIDwgMSB8fCBlbGVtLT5pbl9udW0gPCAxKSB7Cj4gKyAgICAgICAgICAgIGVycm9yX3JlcG9y dCgicmVxdWVzdCBvciByZXNwb25zZSBidWZmZXIgaXMgbWlzc2luZyIpOwo+ICsgICAgICAgICAg ICBleGl0KDEpOwo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAgbGVuID0gaW92X3RvX2J1Zihl bGVtLT5vdXRfc2csIGVsZW0tPm91dF9udW0sIDAsICZyZXEsIHNpemVvZihyZXEpKTsKPiArICAg ICAgICBpZiAobGVuICE9IChzc2l6ZV90KXNpemVvZihyZXEpKSB7Cj4gKyAgICAgICAgICAgIGVy cm9yX3JlcG9ydCgiaW52YWxpZCByZXF1ZXN0IHNpemU6ICVsZCIsIChsb25nKWxlbik7Cj4gKyAg ICAgICAgICAgIGV4aXQoMSk7Cj4gKyAgICAgICAgfQo+ICsgICAgICAgIHJlcy5jbWQgID0gcmVx LmNtZDsKPiArICAgICAgICByZXMudHlwZSA9IHJlcS50eXBlOwo+ICsKPiArICAgICAgICBzd2l0 Y2ggKGxlMTZfdG9fY3B1KHJlcS5jbWQpKSB7Cj4gKyAgICAgICAgY2FzZSBWSVJUSU9fUFNUT1JF X0NNRF9PUEVOOgo+ICsgICAgICAgICAgICByZXQgPSB2aXJ0aW9fcHN0b3JlX2RvX29wZW4ocyk7 Cj4gKyAgICAgICAgICAgIGJyZWFrOwo+ICsgICAgICAgIGNhc2UgVklSVElPX1BTVE9SRV9DTURf UkVBRDoKPiArICAgICAgICAgICAgcmV0ID0gdmlydGlvX3BzdG9yZV9kb19yZWFkKHMsIGVsZW0t PmluX3NnLCBlbGVtLT5pbl9udW0sICZyZXMpOwo+ICsgICAgICAgICAgICBpZiAocmV0ID4gMCkg ewo+ICsgICAgICAgICAgICAgICAgbGVuID0gcmV0Owo+ICsgICAgICAgICAgICAgICAgcmV0ID0g MDsKPiArICAgICAgICAgICAgfQo+ICsgICAgICAgICAgICBicmVhazsKPiArICAgICAgICBjYXNl IFZJUlRJT19QU1RPUkVfQ01EX1dSSVRFOgo+ICsgICAgICAgICAgICByZXQgPSB2aXJ0aW9fcHN0 b3JlX2RvX3dyaXRlKHMsIGVsZW0tPm91dF9zZywgZWxlbS0+b3V0X251bSwgJnJlcSk7Cj4gKyAg ICAgICAgICAgIGJyZWFrOwo+ICsgICAgICAgIGNhc2UgVklSVElPX1BTVE9SRV9DTURfQ0xPU0U6 Cj4gKyAgICAgICAgICAgIHJldCA9IHZpcnRpb19wc3RvcmVfZG9fY2xvc2Uocyk7Cj4gKyAgICAg ICAgICAgIGJyZWFrOwo+ICsgICAgICAgIGNhc2UgVklSVElPX1BTVE9SRV9DTURfRVJBU0U6Cj4g KyAgICAgICAgICAgIHJldCA9IHZpcnRpb19wc3RvcmVfZG9fZXJhc2UocywgJnJlcSk7Cj4gKyAg ICAgICAgICAgIGJyZWFrOwo+ICsgICAgICAgIGRlZmF1bHQ6Cj4gKyAgICAgICAgICAgIHJldCA9 IC0xOwo+ICsgICAgICAgICAgICBicmVhazsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIHJl cy5yZXQgID0gcmV0Owo+ICsKPiArICAgICAgICBpb3ZfZnJvbV9idWYoZWxlbS0+aW5fc2csIGVs ZW0tPmluX251bSwgMCwgJnJlcywgc2l6ZW9mKHJlcykpOwo+ICsgICAgICAgIHZpcnRxdWV1ZV9w dXNoKHZxLCBlbGVtLCBzaXplb2YocmVzKSArIGxlbik7CgoKdGhpcyBpcyB3cm9uZyAtIGxlbiBz aG91bGQgYmUgIyBvZiBieXRlcyB3cml0dGVuIGludG8gZ3Vlc3QgbWVtb3J5LgoKPiArCj4gKyAg ICAgICAgdmlydGlvX25vdGlmeSh2ZGV2LCB2cSk7Cj4gKyAgICAgICAgZ19mcmVlKGVsZW0pOwo+ ICsKPiArICAgICAgICBpZiAocmV0IDwgMCkgewo+ICsgICAgICAgICAgICByZXR1cm47Cj4gKyAg ICAgICAgfQo+ICsgICAgfQo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB2aXJ0aW9fcHN0b3JlX2Rl dmljZV9yZWFsaXplKERldmljZVN0YXRlICpkZXYsIEVycm9yICoqZXJycCkKPiArewo+ICsgICAg VmlydElPRGV2aWNlICp2ZGV2ID0gVklSVElPX0RFVklDRShkZXYpOwo+ICsgICAgVmlydElPUHN0 b3JlICpzID0gVklSVElPX1BTVE9SRShkZXYpOwo+ICsKPiArICAgIHZpcnRpb19pbml0KHZkZXYs ICJ2aXJ0aW8tcHN0b3JlIiwgVklSVElPX0lEX1BTVE9SRSwKPiArICAgICAgICAgICAgICAgIHNp emVvZihzdHJ1Y3QgdmlydGlvX3BzdG9yZV9jb25maWcpKTsKPiArCj4gKyAgICBzLT5pZCA9IDE7 Cj4gKyAgICBzLT5jb25zb2xlX2lkID0gMDsKPiArCj4gKyAgICBzLT52cVswXSA9IHZpcnRpb19h ZGRfcXVldWUodmRldiwgMTI4LCB2aXJ0aW9fcHN0b3JlX2hhbmRsZV9pbyk7Cj4gKyAgICBzLT52 cVsxXSA9IHZpcnRpb19hZGRfcXVldWUodmRldiwgMTI4LCB2aXJ0aW9fcHN0b3JlX2hhbmRsZV9p byk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHZpcnRpb19wc3RvcmVfZGV2aWNlX3VucmVhbGl6 ZShEZXZpY2VTdGF0ZSAqZGV2LCBFcnJvciAqKmVycnApCj4gK3sKPiArICAgIFZpcnRJT0Rldmlj ZSAqdmRldiA9IFZJUlRJT19ERVZJQ0UoZGV2KTsKPiArCj4gKyAgICB2aXJ0aW9fY2xlYW51cCh2 ZGV2KTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgdmlydGlvX3BzdG9yZV9nZXRfY29uZmlnKFZp cnRJT0RldmljZSAqdmRldiwgdWludDhfdCAqY29uZmlnX2RhdGEpCj4gK3sKPiArICAgIFZpcnRJ T1BzdG9yZSAqZGV2ID0gVklSVElPX1BTVE9SRSh2ZGV2KTsKPiArICAgIHN0cnVjdCB2aXJ0aW9f cHN0b3JlX2NvbmZpZyBjb25maWc7Cj4gKwo+ICsgICAgY29uZmlnLmJ1ZnNpemUgPSBjcHVfdG9f bGUzMihkZXYtPmJ1ZnNpemUpOwo+ICsgICAgaWYgKGRldi0+Y29uc29sZSkgewo+ICsgICAgICAg IGNvbmZpZy5mbGFncyB8PSBjcHVfdG9fbGUzMihWSVJUSU9fUFNUT1JFX0NPTkZJR19GTF9DT05T T0xFKTsKPiArICAgIH0KPiArCj4gKyAgICBtZW1jcHkoY29uZmlnX2RhdGEsICZjb25maWcsIHNp emVvZihzdHJ1Y3QgdmlydGlvX3BzdG9yZV9jb25maWcpKTsKPiArfQo+ICsKPiArc3RhdGljIHZv aWQgdmlydGlvX3BzdG9yZV9zZXRfY29uZmlnKFZpcnRJT0RldmljZSAqdmRldiwKPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmNvbmZpZ19kYXRh KQo+ICt7Cj4gKyAgICBWaXJ0SU9Qc3RvcmUgKmRldiA9IFZJUlRJT19QU1RPUkUodmRldik7Cj4g KyAgICBzdHJ1Y3QgdmlydGlvX3BzdG9yZV9jb25maWcgY29uZmlnOwo+ICsKPiArICAgIG1lbWNw eSgmY29uZmlnLCBjb25maWdfZGF0YSwgc2l6ZW9mKHN0cnVjdCB2aXJ0aW9fcHN0b3JlX2NvbmZp ZykpOwo+ICsKPiArICAgIGRldi0+YnVmc2l6ZSA9IGxlMzJfdG9fY3B1KGNvbmZpZy5idWZzaXpl KTsKPiArfQo+ICsKPiArc3RhdGljIHVpbnQ2NF90IGdldF9mZWF0dXJlcyhWaXJ0SU9EZXZpY2Ug KnZkZXYsIHVpbnQ2NF90IGYsIEVycm9yICoqZXJycCkKPiArewo+ICsgICAgcmV0dXJuIGY7Cj4g K30KPiArCj4gK3N0YXRpYyB2b2lkIHBzdG9yZV9nZXRfZGlyZWN0b3J5KE9iamVjdCAqb2JqLCBW aXNpdG9yICp2LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFy ICpuYW1lLCB2b2lkICpvcGFxdWUsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEVycm9yICoqZXJycCkKPiArewo+ICsgICAgVmlydElPUHN0b3JlICpzID0gb3BhcXVlOwo+ICsK PiArICAgIHZpc2l0X3R5cGVfc3RyKHYsIG5hbWUsICZzLT5kaXJlY3RvcnksIGVycnApOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgdm9pZCBwc3RvcmVfc2V0X2RpcmVjdG9yeShPYmplY3QgKm9iaiwgVmlz aXRvciAqdiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAq bmFtZSwgdm9pZCAqb3BhcXVlLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBF cnJvciAqKmVycnApCj4gK3sKPiArICAgIFZpcnRJT1BzdG9yZSAqcyA9IG9wYXF1ZTsKPiArICAg IEVycm9yICpsb2NhbF9lcnIgPSBOVUxMOwo+ICsgICAgY2hhciAqdmFsdWU7Cj4gKwo+ICsgICAg dmlzaXRfdHlwZV9zdHIodiwgbmFtZSwgJnZhbHVlLCAmbG9jYWxfZXJyKTsKPiArICAgIGlmIChs b2NhbF9lcnIpIHsKPiArICAgICAgICBlcnJvcl9wcm9wYWdhdGUoZXJycCwgbG9jYWxfZXJyKTsK PiArICAgICAgICByZXR1cm47Cj4gKyAgICB9Cj4gKwo+ICsgICAgZ19mcmVlKHMtPmRpcmVjdG9y eSk7Cj4gKyAgICBzLT5kaXJlY3RvcnkgPSB2YWx1ZTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQg cHN0b3JlX3JlbGVhc2VfZGlyZWN0b3J5KE9iamVjdCAqb2JqLCBjb25zdCBjaGFyICpuYW1lLAo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqb3BhcXVlKQo+ICt7 Cj4gKyAgICBWaXJ0SU9Qc3RvcmUgKnMgPSBvcGFxdWU7Cj4gKwo+ICsgICAgZ19mcmVlKHMtPmRp cmVjdG9yeSk7Cj4gKyAgICBzLT5kaXJlY3RvcnkgPSBOVUxMOwo+ICt9Cj4gKwo+ICtzdGF0aWMg dm9pZCBwc3RvcmVfZ2V0X2J1ZnNpemUoT2JqZWN0ICpvYmosIFZpc2l0b3IgKnYsCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpuYW1lLCB2b2lkICpvcGFxdWUs Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFcnJvciAqKmVycnApCj4gK3sKPiAr ICAgIFZpcnRJT1BzdG9yZSAqcyA9IG9wYXF1ZTsKPiArICAgIHVpbnQ2NF90IHZhbHVlID0gcy0+ YnVmc2l6ZTsKPiArCj4gKyAgICB2aXNpdF90eXBlX3NpemUodiwgbmFtZSwgJnZhbHVlLCBlcnJw KTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgcHN0b3JlX3NldF9idWZzaXplKE9iamVjdCAqb2Jq LCBWaXNpdG9yICp2LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hh ciAqbmFtZSwgdm9pZCAqb3BhcXVlLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg RXJyb3IgKiplcnJwKQo+ICt7Cj4gKyAgICBWaXJ0SU9Qc3RvcmUgKnMgPSBvcGFxdWU7Cj4gKyAg ICBFcnJvciAqZXJyb3IgPSBOVUxMOwo+ICsgICAgdWludDY0X3QgdmFsdWU7Cj4gKwo+ICsgICAg dmlzaXRfdHlwZV9zaXplKHYsIG5hbWUsICZ2YWx1ZSwgJmVycm9yKTsKPiArICAgIGlmIChlcnJv cikgewo+ICsgICAgICAgIGVycm9yX3Byb3BhZ2F0ZShlcnJwLCBlcnJvcik7Cj4gKyAgICAgICAg cmV0dXJuOwo+ICsgICAgfQo+ICsKPiArICAgIGlmICh2YWx1ZSA8IDQwOTYpIHsKPiArICAgICAg ICBlcnJvcl9yZXBvcnQoIldhcm5pbmc6IHRvbyBzbWFsbCBidWZmZXIgc2l6ZTogJSJQUkl1NjQs IHZhbHVlKTsKPiArICAgIH0KPiArCj4gKyAgICBzLT5idWZzaXplID0gdmFsdWU7Cj4gK30KPiAr Cj4gK3N0YXRpYyB2b2lkIHBzdG9yZV9nZXRfY29uc29sZShPYmplY3QgKm9iaiwgVmlzaXRvciAq diwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIHZv aWQgKm9wYXF1ZSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVycm9yICoqZXJy cCkKPiArewo+ICsgICAgVmlydElPUHN0b3JlICpzID0gb3BhcXVlOwo+ICsgICAgYm9vbCB2YWx1 ZSA9IHMtPmNvbnNvbGU7Cj4gKwo+ICsgICAgdmlzaXRfdHlwZV9ib29sKHYsIG5hbWUsICZ2YWx1 ZSwgZXJycCk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHBzdG9yZV9zZXRfY29uc29sZShPYmpl Y3QgKm9iaiwgVmlzaXRvciAqdiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IGNoYXIgKm5hbWUsIHZvaWQgKm9wYXF1ZSwKPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEVycm9yICoqZXJycCkKPiArewo+ICsgICAgVmlydElPUHN0b3JlICpzID0gb3BhcXVl Owo+ICsgICAgRXJyb3IgKmVycm9yID0gTlVMTDsKPiArICAgIGJvb2wgdmFsdWU7Cj4gKwo+ICsg ICAgdmlzaXRfdHlwZV9ib29sKHYsIG5hbWUsICZ2YWx1ZSwgJmVycm9yKTsKPiArICAgIGlmIChl cnJvcikgewo+ICsgICAgICAgIGVycm9yX3Byb3BhZ2F0ZShlcnJwLCBlcnJvcik7Cj4gKyAgICAg ICAgcmV0dXJuOwo+ICsgICAgfQo+ICsKPiArICAgIHMtPmNvbnNvbGUgPSB2YWx1ZTsKPiArfQo+ ICsKPiArc3RhdGljIFByb3BlcnR5IHZpcnRpb19wc3RvcmVfcHJvcGVydGllc1tdID0gewo+ICsg ICAgREVGSU5FX1BST1BfRU5EX09GX0xJU1QoKSwKPiArfTsKPiArCj4gK3N0YXRpYyB2b2lkIHZp cnRpb19wc3RvcmVfaW5zdGFuY2VfaW5pdChPYmplY3QgKm9iaikKPiArewo+ICsgICAgVmlydElP UHN0b3JlICpzID0gVklSVElPX1BTVE9SRShvYmopOwo+ICsKPiArICAgIG9iamVjdF9wcm9wZXJ0 eV9hZGQob2JqLCAiZGlyZWN0b3J5IiwgInN0ciIsCj4gKyAgICAgICAgICAgICAgICAgICAgICAg IHBzdG9yZV9nZXRfZGlyZWN0b3J5LCBwc3RvcmVfc2V0X2RpcmVjdG9yeSwKPiArICAgICAgICAg ICAgICAgICAgICAgICAgcHN0b3JlX3JlbGVhc2VfZGlyZWN0b3J5LCBzLCBOVUxMKTsKPiArICAg IG9iamVjdF9wcm9wZXJ0eV9hZGQob2JqLCAiYnVmc2l6ZSIsICJzaXplIiwKPiArICAgICAgICAg ICAgICAgICAgICAgICAgcHN0b3JlX2dldF9idWZzaXplLCBwc3RvcmVfc2V0X2J1ZnNpemUsIE5V TEwsIHMsIE5VTEwpOwo+ICsgICAgb2JqZWN0X3Byb3BlcnR5X2FkZChvYmosICJjb25zb2xlIiwg ImJvb2wiLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICBwc3RvcmVfZ2V0X2NvbnNvbGUsIHBz dG9yZV9zZXRfY29uc29sZSwgTlVMTCwgcywgTlVMTCk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lk IHZpcnRpb19wc3RvcmVfY2xhc3NfaW5pdChPYmplY3RDbGFzcyAqa2xhc3MsIHZvaWQgKmRhdGEp Cj4gK3sKPiArICAgIERldmljZUNsYXNzICpkYyA9IERFVklDRV9DTEFTUyhrbGFzcyk7Cj4gKyAg ICBWaXJ0aW9EZXZpY2VDbGFzcyAqdmRjID0gVklSVElPX0RFVklDRV9DTEFTUyhrbGFzcyk7Cj4g Kwo+ICsgICAgZGMtPnByb3BzID0gdmlydGlvX3BzdG9yZV9wcm9wZXJ0aWVzOwo+ICsgICAgc2V0 X2JpdChERVZJQ0VfQ0FURUdPUllfTUlTQywgZGMtPmNhdGVnb3JpZXMpOwo+ICsgICAgdmRjLT5y ZWFsaXplID0gdmlydGlvX3BzdG9yZV9kZXZpY2VfcmVhbGl6ZTsKPiArICAgIHZkYy0+dW5yZWFs aXplID0gdmlydGlvX3BzdG9yZV9kZXZpY2VfdW5yZWFsaXplOwo+ICsgICAgdmRjLT5nZXRfY29u ZmlnID0gdmlydGlvX3BzdG9yZV9nZXRfY29uZmlnOwo+ICsgICAgdmRjLT5zZXRfY29uZmlnID0g dmlydGlvX3BzdG9yZV9zZXRfY29uZmlnOwo+ICsgICAgdmRjLT5nZXRfZmVhdHVyZXMgPSBnZXRf ZmVhdHVyZXM7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBUeXBlSW5mbyB2aXJ0aW9fcHN0b3Jl X2luZm8gPSB7Cj4gKyAgICAubmFtZSA9IFRZUEVfVklSVElPX1BTVE9SRSwKPiArICAgIC5wYXJl bnQgPSBUWVBFX1ZJUlRJT19ERVZJQ0UsCj4gKyAgICAuaW5zdGFuY2Vfc2l6ZSA9IHNpemVvZihW aXJ0SU9Qc3RvcmUpLAo+ICsgICAgLmluc3RhbmNlX2luaXQgPSB2aXJ0aW9fcHN0b3JlX2luc3Rh bmNlX2luaXQsCj4gKyAgICAuY2xhc3NfaW5pdCA9IHZpcnRpb19wc3RvcmVfY2xhc3NfaW5pdCwK PiArfTsKPiArCj4gK3N0YXRpYyB2b2lkIHZpcnRpb19yZWdpc3Rlcl90eXBlcyh2b2lkKQo+ICt7 Cj4gKyAgICB0eXBlX3JlZ2lzdGVyX3N0YXRpYygmdmlydGlvX3BzdG9yZV9pbmZvKTsKPiArfQo+ ICsKPiArdHlwZV9pbml0KHZpcnRpb19yZWdpc3Rlcl90eXBlcykKPiBkaWZmIC0tZ2l0IGEvaW5j bHVkZS9ody9wY2kvcGNpLmggYi9pbmNsdWRlL2h3L3BjaS9wY2kuaAo+IGluZGV4IDc0ZDc5N2Qu LjAwMGUxZTkgMTAwNjQ0Cj4gLS0tIGEvaW5jbHVkZS9ody9wY2kvcGNpLmgKPiArKysgYi9pbmNs dWRlL2h3L3BjaS9wY2kuaAo+IEBAIC03OSw2ICs3OSw3IEBACj4gICNkZWZpbmUgUENJX0RFVklD RV9JRF9WSVJUSU9fU0NTSSAgICAgICAgMHgxMDA0Cj4gICNkZWZpbmUgUENJX0RFVklDRV9JRF9W SVJUSU9fUk5HICAgICAgICAgMHgxMDA1Cj4gICNkZWZpbmUgUENJX0RFVklDRV9JRF9WSVJUSU9f OVAgICAgICAgICAgMHgxMDA5Cj4gKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSVJUSU9fUFNUT1JF ICAgICAgMHgxMDBhCj4gIAo+ICAjZGVmaW5lIFBDSV9WRU5ET1JfSURfUkVESEFUICAgICAgICAg ICAgIDB4MWIzNgo+ICAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUkVESEFUX0JSSURHRSAgICAgIDB4 MDAwMQo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2h3L3ZpcnRpby92aXJ0aW8tcHN0b3JlLmggYi9p bmNsdWRlL2h3L3ZpcnRpby92aXJ0aW8tcHN0b3JlLmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ IGluZGV4IDAwMDAwMDAuLmQxODhhNDgKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvaW5jbHVkZS9o dy92aXJ0aW8vdmlydGlvLXBzdG9yZS5oCj4gQEAgLTAsMCArMSwzNCBAQAo+ICsvKgo+ICsgKiBW aXJ0aW8gUHN0b3JlIFN1cHBvcnQKPiArICoKPiArICogQXV0aG9yczoKPiArICogIE5hbWh5dW5n IEtpbSAgICAgIDxuYW1oeXVuZ0BnbWFpbC5jb20+Cj4gKyAqCj4gKyAqIFRoaXMgd29yayBpcyBs aWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwsIHZlcnNpb24gMi4gIFNlZQo+ ICsgKiB0aGUgQ09QWUlORyBmaWxlIGluIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5Lgo+ICsgKgo+ ICsgKi8KPiArCj4gKyNpZm5kZWYgX1FFTVVfVklSVElPX1BTVE9SRV9ICj4gKyNkZWZpbmUgX1FF TVVfVklSVElPX1BTVE9SRV9ICj4gKwo+ICsjaW5jbHVkZSAic3RhbmRhcmQtaGVhZGVycy9saW51 eC92aXJ0aW9fcHN0b3JlLmgiCj4gKyNpbmNsdWRlICJody92aXJ0aW8vdmlydGlvLmgiCj4gKyNp bmNsdWRlICJody9wY2kvcGNpLmgiCj4gKwo+ICsjZGVmaW5lIFRZUEVfVklSVElPX1BTVE9SRSAi dmlydGlvLXBzdG9yZS1kZXZpY2UiCj4gKyNkZWZpbmUgVklSVElPX1BTVE9SRShvYmopIFwKPiAr ICAgICAgICBPQkpFQ1RfQ0hFQ0soVmlydElPUHN0b3JlLCAob2JqKSwgVFlQRV9WSVJUSU9fUFNU T1JFKQo+ICsKPiArdHlwZWRlZiBzdHJ1Y3QgVmlydElPUHN0b3JlIHsKPiArICAgIFZpcnRJT0Rl dmljZSAgICBwYXJlbnRfb2JqOwo+ICsgICAgVmlydFF1ZXVlICAgICAgKnZxWzJdOwo+ICsgICAg Y2hhciAgICAgICAgICAgKmRpcmVjdG9yeTsKPiArICAgIHVpbnQ2NF90ICAgICAgICBpZDsKPiAr ICAgIHVpbnQ2NF90ICAgICAgICBjb25zb2xlX2lkOwo+ICsgICAgRElSICAgICAgICAgICAgKmRp cnA7Cj4gKyAgICB1aW50NjRfdCAgICAgICAgYnVmc2l6ZTsKPiArICAgIGJvb2wgICAgICAgICAg ICBjb25zb2xlOwo+ICt9IFZpcnRJT1BzdG9yZTsKPiArCj4gKyNlbmRpZgo+IGRpZmYgLS1naXQg YS9pbmNsdWRlL3N0YW5kYXJkLWhlYWRlcnMvbGludXgvdmlydGlvX2lkcy5oIGIvaW5jbHVkZS9z dGFuZGFyZC1oZWFkZXJzL2xpbnV4L3ZpcnRpb19pZHMuaAo+IGluZGV4IDc3OTI1ZjUuLmM3MmE5 YWIgMTAwNjQ0Cj4gLS0tIGEvaW5jbHVkZS9zdGFuZGFyZC1oZWFkZXJzL2xpbnV4L3ZpcnRpb19p ZHMuaAo+ICsrKyBiL2luY2x1ZGUvc3RhbmRhcmQtaGVhZGVycy9saW51eC92aXJ0aW9faWRzLmgK PiBAQCAtNDEsNSArNDEsNiBAQAo+ICAjZGVmaW5lIFZJUlRJT19JRF9DQUlGCSAgICAgICAxMiAv KiBWaXJ0aW8gY2FpZiAqLwo+ICAjZGVmaW5lIFZJUlRJT19JRF9HUFUgICAgICAgICAgMTYgLyog dmlydGlvIEdQVSAqLwo+ICAjZGVmaW5lIFZJUlRJT19JRF9JTlBVVCAgICAgICAgMTggLyogdmly dGlvIGlucHV0ICovCj4gKyNkZWZpbmUgVklSVElPX0lEX1BTVE9SRSAgICAgICAyMiAvKiB2aXJ0 aW8gcHN0b3JlICovCj4gIAo+ICAjZW5kaWYgLyogX0xJTlVYX1ZJUlRJT19JRFNfSCAqLwo+IGRp ZmYgLS1naXQgYS9pbmNsdWRlL3N0YW5kYXJkLWhlYWRlcnMvbGludXgvdmlydGlvX3BzdG9yZS5o IGIvaW5jbHVkZS9zdGFuZGFyZC1oZWFkZXJzL2xpbnV4L3ZpcnRpb19wc3RvcmUuaAo+IG5ldyBm aWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uYjg5M2QxNQo+IC0tLSAvZGV2L251bGwK PiArKysgYi9pbmNsdWRlL3N0YW5kYXJkLWhlYWRlcnMvbGludXgvdmlydGlvX3BzdG9yZS5oCj4g QEAgLTAsMCArMSw4MCBAQAo+ICsjaWZuZGVmIF9MSU5VWF9WSVJUSU9fUFNUT1JFX0gKPiArI2Rl ZmluZSBfTElOVVhfVklSVElPX1BTVE9SRV9ICj4gKy8qIFRoaXMgaGVhZGVyIGlzIEJTRCBsaWNl bnNlZCBzbyBhbnlvbmUgY2FuIHVzZSB0aGUgZGVmaW5pdGlvbnMgdG8gaW1wbGVtZW50Cj4gKyAq IGNvbXBhdGlibGUgZHJpdmVycy9zZXJ2ZXJzLgo+ICsgKgo+ICsgKiBSZWRpc3RyaWJ1dGlvbiBh bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKPiArICog bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj b25kaXRpb25zCj4gKyAqIGFyZSBtZXQ6Cj4gKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cj4gKyAqICAgIG5vdGljZSwg dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KPiAr ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh Ym92ZSBjb3B5cmlnaHQKPiArICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQo+ICsgKiAgICBkb2N1bWVudGF0aW9u IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgo+ ICsgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIElCTSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250 cmlidXRvcnMKPiArICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1 Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCj4gKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMg cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgo+ICsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQK PiArICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO T1QgTElNSVRFRCBUTywgVEhFCj4gKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCj4gKyAqIEFSRSBESVND TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgSUJNIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUK PiArICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN UExBUlksIE9SIENPTlNFUVVFTlRJQUwKPiArICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKPiArICogT1IgU0VS VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV UFRJT04pCj4gKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCj4gKyAqIExJQUJJTElUWSwgT1IgVE9SVCAo SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKPiAr ICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI RSBQT1NTSUJJTElUWSBPRgo+ICsgKiBTVUNIIERBTUFHRS4gKi8KPiArI2luY2x1ZGUgInN0YW5k YXJkLWhlYWRlcnMvbGludXgvdHlwZXMuaCIKPiArI2luY2x1ZGUgInN0YW5kYXJkLWhlYWRlcnMv bGludXgvdmlydGlvX3R5cGVzLmgiCj4gKyNpbmNsdWRlICJzdGFuZGFyZC1oZWFkZXJzL2xpbnV4 L3ZpcnRpb19pZHMuaCIKPiArI2luY2x1ZGUgInN0YW5kYXJkLWhlYWRlcnMvbGludXgvdmlydGlv X2NvbmZpZy5oIgo+ICsKPiArI2RlZmluZSBWSVJUSU9fUFNUT1JFX0NNRF9OVUxMICAgMAo+ICsj ZGVmaW5lIFZJUlRJT19QU1RPUkVfQ01EX09QRU4gICAxCj4gKyNkZWZpbmUgVklSVElPX1BTVE9S RV9DTURfUkVBRCAgIDIKPiArI2RlZmluZSBWSVJUSU9fUFNUT1JFX0NNRF9XUklURSAgMwo+ICsj ZGVmaW5lIFZJUlRJT19QU1RPUkVfQ01EX0VSQVNFICA0Cj4gKyNkZWZpbmUgVklSVElPX1BTVE9S RV9DTURfQ0xPU0UgIDUKPiArCj4gKyNkZWZpbmUgVklSVElPX1BTVE9SRV9UWVBFX1VOS05PV04g IDAKPiArI2RlZmluZSBWSVJUSU9fUFNUT1JFX1RZUEVfRE1FU0cgICAgMQo+ICsjZGVmaW5lIFZJ UlRJT19QU1RPUkVfVFlQRV9DT05TT0xFICAyCj4gKwo+ICsjZGVmaW5lIFZJUlRJT19QU1RPUkVf RkxfQ09NUFJFU1NFRCAgMQo+ICsKPiArI2RlZmluZSBWSVJUSU9fUFNUT1JFX0NPTkZJR19GTF9D T05TT0xFICAoMSA8PCAwKQo+ICsKPiArc3RydWN0IHZpcnRpb19wc3RvcmVfcmVxIHsKPiArICAg IF9fdmlydGlvMTYgY21kOwo+ICsgICAgX192aXJ0aW8xNiB0eXBlOwo+ICsgICAgX192aXJ0aW8z MiBmbGFnczsKPiArICAgIF9fdmlydGlvNjQgaWQ7Cj4gKyAgICBfX3ZpcnRpbzMyIGNvdW50Owo+ ICsgICAgX192aXJ0aW8zMiByZXNlcnZlZDsKPiArfTsKPiArCj4gK3N0cnVjdCB2aXJ0aW9fcHN0 b3JlX3JlcyB7Cj4gKyAgICBfX3ZpcnRpbzE2IGNtZDsKPiArICAgIF9fdmlydGlvMTYgdHlwZTsK PiArICAgIF9fdmlydGlvMzIgcmV0Owo+ICt9Owo+ICsKPiArc3RydWN0IHZpcnRpb19wc3RvcmVf ZmlsZWluZm8gewo+ICsgICAgX192aXJ0aW82NCBpZDsKPiArICAgIF9fdmlydGlvMzIgY291bnQ7 Cj4gKyAgICBfX3ZpcnRpbzE2IHR5cGU7Cj4gKyAgICBfX3ZpcnRpbzE2IHVudXNlZDsKPiArICAg IF9fdmlydGlvMzIgZmxhZ3M7Cj4gKyAgICBfX3ZpcnRpbzMyIGxlbjsKPiArICAgIF9fdmlydGlv NjQgdGltZV9zZWM7Cj4gKyAgICBfX3ZpcnRpbzMyIHRpbWVfbnNlYzsKPiArICAgIF9fdmlydGlv MzIgcmVzZXJ2ZWQ7Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgdmlydGlvX3BzdG9yZV9jb25maWcgewo+ ICsgICAgX192aXJ0aW8zMiBidWZzaXplOwo+ICsgICAgX192aXJ0aW8zMiBmbGFnczsKPiArfTsK PiArCj4gKyNlbmRpZiAvKiBfTElOVVhfVklSVElPX1BTVE9SRV9IICovCj4gZGlmZiAtLWdpdCBh L3FkZXYtbW9uaXRvci5jIGIvcWRldi1tb25pdG9yLmMKPiBpbmRleCBlMTk2MTdmLi5lMWRmNWE5 IDEwMDY0NAo+IC0tLSBhL3FkZXYtbW9uaXRvci5jCj4gKysrIGIvcWRldi1tb25pdG9yLmMKPiBA QCAtNzMsNiArNzMsNyBAQCBzdGF0aWMgY29uc3QgUURldkFsaWFzIHFkZXZfYWxpYXNfdGFibGVb XSA9IHsKPiAgICAgIHsgInZpcnRpby1zZXJpYWwtcGNpIiwgInZpcnRpby1zZXJpYWwiLCBRRU1V X0FSQ0hfQUxMICYgflFFTVVfQVJDSF9TMzkwWCB9LAo+ICAgICAgeyAidmlydGlvLXRhYmxldC1j Y3ciLCAidmlydGlvLXRhYmxldCIsIFFFTVVfQVJDSF9TMzkwWCB9LAo+ICAgICAgeyAidmlydGlv LXRhYmxldC1wY2kiLCAidmlydGlvLXRhYmxldCIsIFFFTVVfQVJDSF9BTEwgJiB+UUVNVV9BUkNI X1MzOTBYIH0sCj4gKyAgICB7ICJ2aXJ0aW8tcHN0b3JlLXBjaSIsICJ2aXJ0aW8tcHN0b3JlIiB9 LAo+ICAgICAgeyB9Cj4gIH07Cj4gIAo+IC0tIAo+IDIuOC4wCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fClZpcnR1YWxpemF0aW9uIG1haWxpbmcgbGlzdApW aXJ0dWFsaXphdGlvbkBsaXN0cy5saW51eC1mb3VuZGF0aW9uLm9yZwpodHRwczovL2xpc3RzLmxp bnV4Zm91bmRhdGlvbi5vcmcvbWFpbG1hbi9saXN0aW5mby92aXJ0dWFsaXphdGlvbg==