From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTPS id 82C9E6E15D for ; Fri, 7 Sep 2018 10:49:48 +0000 (UTC) Date: Fri, 7 Sep 2018 13:48:28 +0300 From: Imre Deak Message-ID: <20180907104828.GA22386@ideak-desk.fi.intel.com> References: <20180906072400.7963-1-gwan-gyeong.mun@intel.com> <20180906072400.7963-6-gwan-gyeong.mun@intel.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20180906072400.7963-6-gwan-gyeong.mun@intel.com> Subject: Re: [igt-dev] [RESEND,v3 5/5] kms_plane: Add clipping subtests List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: imre.deak@intel.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: Gwan-gyeong Mun Cc: igt-dev@lists.freedesktop.org, juha-pekka.heikkila@intel.com List-ID: SGkgRy5HLiwKClRoYW5rcyBmb3IgZG9pbmcgdGhpcywgbG9va3Mgb2sgaW4gZ2VuZXJhbC4gRmV3 IGNvbW1lbnRzIGJlbG93LgoKT24gVGh1LCBTZXAgMDYsIDIwMTggYXQgMTA6MjQ6MDBBTSArMDMw MCwgR3dhbi1neWVvbmcgTXVuIHdyb3RlOgo+IEZyb206IEltcmUgRGVhayA8aW1yZS5kZWFrQGlu dGVsLmNvbT4KPiAKPiBBZGQgcGxhbmUgY2xpcHBpbmcgc3VidGVzdHMgZGlzcGxheWluZyBhIHNp bmdsZSBjbGlwcGVkIHBsYW5lLCB3aXRoIHRoZQo+IGZvbGxvd2luZyB0ZXN0IGNhc2VzOgo+IGEp IHBsYW5lIGNvdmVyaW5nIHRoZSB3aG9sZSBzY3JlZW4sIHNvIHRoYXQgY2xpcHBpbmcgaXMgZG9u ZSBhdCBhbGwgNAo+ICAgIHNjcmVlbiBlZGdlcwo+IGIpIHBsYW5lIGF0IGVpdGhlciBvZiB0aGUg NCBjb3JuZXJzIG9mIHRoZSBzY3JlZW4gY2xpcHBlZCwgc28gdGhhdCBhCj4gICAgNHg0IHBpeGVs IHBhcnQgb2YgdGhlIHBsYW5lIGlzIHZpc2libGUKPiBjKSBwbGFuZSBhdCBlaXRoZXIgb2YgdGhl IDQgY29ybmVycyBvZiB0aGUgc2NyZWVuIGNsaXBwZWQsIHNvIHRoYXQgYQo+ICAgIDJ4MiBwaXhl bCBwYXJ0IG9mIHRoZSBwbGFuZSBpcyB2aXNpYmxlCj4gCj4gRWFjaCBvZiB0aGUgYWJvdmUgY2Fz ZXMgYXJlIHRlc3RlZCB3aXRoIGFsbCBzdXBwb3J0ZWQgdGlsaW5nIG1vZGVzLAo+IHJvdGF0aW9u IGRlZ3JlZXMsIGRpZmZlcmluZyBwaXhlbCBmb3JtYXQgc2l6ZXMgKG9ubHkgMTYgYnBwIGFuZCAz MiBicHAKPiBmb3Igbm93KSBhbmQgY2VydGFpbiBwbGFuZXMuIFdoaWxlIHRoZSBhKSBhbmQgYikg Y2FzZXMgYWJvdmUgYXJlCj4gc3VwcG9ydGVkIG9uIGFsbCBwbGF0Zm9ybXMgYykgaXMgbm90IGZ1 bGx5IHN1cHBvcnRlZCBvbiBHTEsgYW5kIENOTAo+ICh3aGljaCB3YXMgdGhlIHByaW1hcnkgbW90 aXZhdGlvbiBmb3IgdGhpcyB0ZXN0Y2FzZSkuCj4gCj4gdjI6Cj4gLSBBZGQgbWlzc2luZyByZXNl dCBmb3IgdGhlIG91dHB1dCBwaXBlIGFmdGVyIGZpbmlzaGluZyB0aGUgdGVzdCBmb3IgYQo+ICAg Z2l2ZW4gb3V0cHV0LCBmaXhpbmcgdGhlCj4gICAiRFAtMSBhbmQgZURQLTEgYXJlIGJvdGggdHJ5 aW5nIHRvIHVzZSBwaXBlIEEiIHR5cGUgb2YgZXJyb3JzLgo+IC0gVXNlIC1FUkFOR0UgaW5zdGVh ZCBvZiAtRUlOVkFMIHRvIGNoZWNrIHRoZSByZXR1cm4gY29kZSBmb3IKPiAgIHVuc3VwcG9ydGVk IHBsYW5lIFggcG9zaXRpb25zLCBiYXNlZCBvbiB0aGUgbGF0ZXN0IGtlcm5lbCBjb2RlLgo+IC0g QWRkIGNvbW1lbnQgZXhwbGFpbmluZyB0aGUgZGVwZW5kZW5jaWVzIHdoZW4gZG9pbmcgYSB1bml2 ZXJzYWwKPiAgIGNvbW1pdC4KPiAKPiB2MzogKEd3YW4tZ3llb25nKQo+IC0gQWRkIG1pc3Npbmcg cmVsZWFzZSBvZiBmcmFtZWJ1ZmZlciBvbiBjcmVhdGVfZmJfZm9yX21vZGVfX2NsaXBwaW5nX2Rp c3BsYXkoKQo+ICAgZnVuY3Rpb24uCj4gLSBBZGQgdXNpbmcgbXVsdGkgcGxhbmVzIHBlciBzaW5n bGUgZGlzcGxheSBjb21taXQgb24gY2xpcHBpbmcgdGVzdCBvZgo+ICAgNCBjb3JuZXJzLiAoRGFu aWVsKQo+ICAgSXQgZW5hYmxlcyB0aGUgaW1wcm92aW5nIG9mIHRlc3Qgc3BlZWQuIElmIG51bWJl ciBvZiBwbGFuZXMgaXMgb3Zlcgo+ICAgdGhhbiA0LCBpdCB1c2VzIGZvdXIgcGxhbmVzIGZyb20g Zmlyc3QgcGxhbmUgdG8gbmV4dCBmb3VyIHBsYW5lcy4KPiAgICg0IHBsYW5lcyBtYWtlIHRlc3Rp bmcgb2YgNCBjb3JuZXJzIHBvc3NpYmxlIGFzIDEgZGlzcGxheSBjb21taXQuKQo+ICAgSWYgbnVt YmVyIG9mIHBsYW5lcyBpcyBvdmVyIHRoYW4gMiBhbmQgbGVzcyB0aGFuIDQsIGl0IHVzZXMgdHdv IHBsYW5lcwo+ICAgZnJvbSBmaXJzdCBwbGFuZSB0byBuZXh0IHR3byBwbGFuZXMuICgyIHBsYW5l cyBtYWtlIHRlc3Rpbmcgb2YgNCBjb3JuZXJzCj4gICBwb3NzaWJsZSBhcyAyIGRpc3BsYXkgY29t bWl0LikgUmVzdCBvZiBjYXNlcyBpdCB1c2VzIG9ubHkgZmlyc3QgcGxhbmUuCj4gICAoMSBwbGFu ZSBtYWtlcyB0ZXN0aW5nIG9mIDQgY29ybmVycyBwb3NzaWJsZSBhcyA0IGRpc3BsYXkgY29tbWl0 LikKPiAgIEl0IGNoYW5nZXMgdG8gdXNpbmcgb2YgY2VydGFpbiBwbGFuZXMgZnJvbSB1c2luZyBv ZiBhbGwgc3VwcG9ydGVkIHBsYW5lcy4KPiAgIEFuZCBhIGN1cnNvciBwbGFuZSBjYW4gYmUgb25l IG9mIHRlc3QgcGxhbmVzLgo+IAo+IFNpZ25lZC1vZmYtYnk6IEltcmUgRGVhayA8aW1yZS5kZWFr QGludGVsLmNvbT4KPiBTaWduZWQtb2ZmLWJ5OiBHd2FuLWd5ZW9uZyBNdW4gPGd3YW4tZ3llb25n Lm11bkBpbnRlbC5jb20+Cj4gQ2M6IE1pa2EgS2Fob2xhIDxtaWthLmthaG9sYUBpbnRlbC5jb20+ Cj4gQ2M6IE1hYXJ0ZW4gTGFua2hvcnN0IDxtYWFydGVuLmxhbmtob3JzdEBsaW51eC5pbnRlbC5j b20+Cj4gQ2M6IEp1aGEtUGVra2EgSGVpa2tpbMOkIDxqdWhhLXBla2thLmhlaWtraWxhQGludGVs LmNvbT4KPiBSZXZpZXdlZC1ieTogQXJrYWRpdXN6IEhpbGVyIDxhcmthZGl1c3ouaGlsZXJAaW50 ZWwuY29tPiAodjEpCgo+IC0tLQo+ICB0ZXN0cy9rbXNfcGxhbmUuYyB8IDUyOSArKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gIDEgZmlsZSBjaGFuZ2VkLCA1 MjkgaW5zZXJ0aW9ucygrKQo+IAo+IGRpZmYgLS1naXQgYS90ZXN0cy9rbXNfcGxhbmUuYyBiL3Rl c3RzL2ttc19wbGFuZS5jCj4gaW5kZXggM2QwODg5M2YuLmVhNjJlZmVkIDEwMDY0NAo+IC0tLSBh L3Rlc3RzL2ttc19wbGFuZS5jCj4gKysrIGIvdGVzdHMva21zX3BsYW5lLmMKPiBAQCAtNDEsMTEg KzQxLDQwIEBAIHR5cGVkZWYgc3RydWN0IHsKPiAgCWludCBkcm1fZmQ7Cj4gIAlpZ3RfZGlzcGxh eV90IGRpc3BsYXk7Cj4gIAlpZ3RfcGlwZV9jcmNfdCAqcGlwZV9jcmM7Cj4gKwl1aW50MzJfdCBk ZXZpZDsKPiArCXVpbnQ2NF90IG1heF9jdXJ3Owo+ICsJdWludDY0X3QgbWF4X2N1cmg7Cj4gIH0g ZGF0YV90Owo+ICAKPiArdHlwZWRlZiBzdHJ1Y3Qgewo+ICsJaW50IHg7Cj4gKwlpbnQgeTsKPiAr CWludCBzaXplOwo+ICt9IHNxdWFyZV90Owo+ICsKPiAgc3RhdGljIGNvbG9yX3QgcmVkICAgPSB7 IDEuMGYsIDAuMGYsIDAuMGYgfTsKPiAgc3RhdGljIGNvbG9yX3QgZ3JlZW4gPSB7IDAuMGYsIDEu MGYsIDAuMGYgfTsKPiArc3RhdGljIGNvbG9yX3QgeWVsbG93ID0geyAxLjBmLCAxLjBmLCAwLjBm IH07Cj4gIHN0YXRpYyBjb2xvcl90IGJsdWUgID0geyAwLjBmLCAwLjBmLCAxLjBmIH07Cj4gK3N0 YXRpYyBjb2xvcl90IHdoaXRlID0geyAxLjBmLCAxLjBmLCAxLjBmIH07Cj4gK3N0YXRpYyBzcXVh cmVfdCBjbGlwX3NxdWFyZXNbNF07Cj4gKwo+ICsvKgo+ICsgKiBTaXplIG9mIGEgc3F1YXJlIHBs YW5lIHVzZWQgdG8gdGVzdCBjbGlwcGluZyBhdCB0aGUgNCBjb3VybmVycyBvZiB0aGUKPiArICog ZGlzcGxheS4KPiArICovCj4gKyNkZWZpbmUgQ0xJUFBFRF9QTEFORV9TTUFMTF9TSVpFCTY0Cj4g Kwo+ICsvKgo+ICsgKiBWaXNpYmxlIHBsYW5lIHNpemUgYWZ0ZXIgY2xpcHBpbmcgdGhhdCB3b3Jr cyBvbiBhbGwgcGxhdGZvcm1zIGZvciBhbGwgcGxhbmUKPiArICogcG9zaXRpb25zLgo+ICsgKiBU aGUgZXhjZXB0aW9ucyBhcmUgR0xLL0NOTCB3aGVyZSB0aGVyZSBtdXN0IGJlIGF0IGxlYXN0IHRo aXMgbWFueSBwaXhlbHMKPiArICogdmlzaWJsZSBmcm9tIHRoZSBwbGFuZSBhZnRlciBpdCdzIGNs aXBwZWQgdG8gdGhlIGxlZnQvcmlnaHQgZWRnZSBvZiB0aGUKPiArICogc2NyZWVuLiBOb3QgbWVl dGluZyB0aGlzIGNvbmRpdGlvbiBtYXkgdHJpZ2dlciBGSUZPIHVuZGVyZmxvd3MgYW5kIHNjcmVl bgo+ICsgKiBjb3JydXB0aW9uLiBUaGUgY3Vyc29yIHBsYW5lIGlzIGFuIGV4Y2VwdGlvbiB0aGF0 IGRvZXNuJ3QgaGF2ZSB0aGlzIHByb2JsZW0KPiArICogZXZlbiBvbiBHTEsvQ05MLgo+ICsgKi8K PiArI2RlZmluZSBDTElQUEVEX1BMQU5FX01JTl9WQUxJRAkJNAo+ICAKPiAgLyoKPiAgICogQ29t bW9uIGNvZGUgYWNyb3NzIGFsbCB0ZXN0cywgYWN0aW5nIG9uIGRhdGFfdAo+IEBAIC0xNTEsNiAr MTgwLDY5IEBAIGNyZWF0ZV9mYl9mb3JfbW9kZV9fcG9zaXRpb24oZGF0YV90ICpkYXRhLCBkcm1N b2RlTW9kZUluZm8gKm1vZGUsCj4gIAlpZ3RfcHV0X2NhaXJvX2N0eChkYXRhLT5kcm1fZmQsIGZi LCBjcik7Cj4gIH0KPiAgCj4gKy8qCj4gKyAqIENyZWF0ZSBhIHNxdWFyZSBGQiBmb3IgdGhlIHBs YW5lIGluIHRoZSBjbGlwcGluZyB0ZXN0LCBkaXZpZGVkIGludG8gNAo+ICsgKiBxdWFydGVycyBz b2xpZCBmaWxsZWQgd2l0aCBkaWZmZXJlbnQgY29sb3JzLiBVc2UgdGhlIGdpdmVuIHRpbGluZywg Zm9ybWF0Cj4gKyAqIGFuZCBzaXplIGFuZCByb3RhdGUgdGhlIEZCIGNsb2Nrd2lzZSB3aXRoIHRo ZSBnaXZlbiByb3RhdGlvbiBkZWdyZWVzLCBzbwo+ICsgKiB0aGF0IHRoZSBjb3VudGVyY2xvY2t3 aXNlIHJvdGF0aW9uIHdpdGggdGhlIHNhbWUgZGVncmVlcyBkb25lIGJ5IHRoZSBIVwo+ICsgKiB3 aWxsIGFsd2F5cyByZXN1bHQgaW4gdGhlIHNhbWUgcmVmZXJlbmNlIEZCIGltYWdlLgo+ICsgKi8K PiArc3RhdGljIHZvaWQKPiArY3JlYXRlX2ZiX2Zvcl9tb2RlX19jbGlwcGluZ19wbGFuZShkYXRh X3QgKmRhdGEsIGlndF9yb3RhdGlvbl90IHJvdGF0aW9uLAo+ICsJCQkJICAgdWludDY0X3QgdGls aW5nLAo+ICsJCQkJICAgdWludDMyX3QgZm9ybWF0LAo+ICsJCQkJICAgaW50IHNpemUsCj4gKwkJ CQkgICBzdHJ1Y3QgaWd0X2ZiICpmYiAvKiBvdXQgKi8pCj4gK3sKPiArCWNvbG9yX3QgY29ybmVy c1tdID0geyByZWQsIHdoaXRlLCB5ZWxsb3csIGJsdWUgfTsKPiArCWNvbG9yX3QgY29sb3I7Cj4g Kwl1bnNpZ25lZCBpbnQgZmJfaWQ7Cj4gKwljYWlyb190ICpjcjsKPiArCWNvbnN0IGludCBxc2l6 ZSA9IHNpemUgLyAyOwo+ICsJaW50IGlkeDsKPiArCj4gKwlmYl9pZCA9IGlndF9jcmVhdGVfZmIo ZGF0YS0+ZHJtX2ZkLCBzaXplLCBzaXplLCBmb3JtYXQsIHRpbGluZywgZmIpOwo+ICsJaWd0X2Fz c2VydChmYl9pZCk7Cj4gKwo+ICsJY3IgPSBpZ3RfZ2V0X2NhaXJvX2N0eChkYXRhLT5kcm1fZmQs IGZiKTsKPiArCj4gKwlzd2l0Y2ggKHJvdGF0aW9uKSB7Cj4gKwljYXNlIElHVF9ST1RBVElPTl8w Ogo+ICsJCWlkeCA9IDA7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIElHVF9ST1RBVElPTl85MDoKPiAr CQlpZHggPSAzOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBJR1RfUk9UQVRJT05fMTgwOgo+ICsJCWlk eCA9IDI7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIElHVF9ST1RBVElPTl8yNzA6Cj4gKwkJaWR4ID0g MTsKPiArCQlicmVhazsKPiArCWRlZmF1bHQ6Cj4gKwkJaWd0X2Fzc2VydCgwKTsKPiArCX0KPiAr Cj4gKwljb2xvciA9IGNvcm5lcnNbaWR4XTsKPiArCWlndF9wYWludF9jb2xvcihjciwgMCwgMCwg cXNpemUsIHFzaXplLAo+ICsJCQljb2xvci5yZWQsIGNvbG9yLmdyZWVuLCBjb2xvci5ibHVlKTsK PiArCj4gKwljb2xvciA9IGNvcm5lcnNbKCsraWR4KSAlIDRdOwo+ICsJaWd0X3BhaW50X2NvbG9y KGNyLCBxc2l6ZSwgMCwgcXNpemUsIHFzaXplLAo+ICsJCQljb2xvci5yZWQsIGNvbG9yLmdyZWVu LCBjb2xvci5ibHVlKTsKPiArCj4gKwljb2xvciA9IGNvcm5lcnNbKCsraWR4KSAlIDRdOwo+ICsJ aWd0X3BhaW50X2NvbG9yKGNyLCBxc2l6ZSwgcXNpemUsIHFzaXplLCBxc2l6ZSwKPiArCQkJY29s b3IucmVkLCBjb2xvci5ncmVlbiwgY29sb3IuYmx1ZSk7Cj4gKwo+ICsJY29sb3IgPSBjb3JuZXJz WygrK2lkeCkgJSA0XTsKPiArCWlndF9wYWludF9jb2xvcihjciwgMCwgcXNpemUsIHFzaXplLCBx c2l6ZSwKPiArCQkJY29sb3IucmVkLCBjb2xvci5ncmVlbiwgY29sb3IuYmx1ZSk7Cj4gKwo+ICsJ aWd0X2Fzc2VydChjYWlyb19zdGF0dXMoY3IpID09IDApOwo+ICsJY2Fpcm9fZGVzdHJveShjcik7 Cj4gK30KPiArCj4gIGVudW0gewo+ICAJVEVTVF9QT1NJVElPTl9GVUxMWV9DT1ZFUkVEID0gMSA8 PCAwLAo+ICAJVEVTVF9EUE1TID0gMSA8PCAxLAo+IEBAIC01NTQsNiArNjQ2LDQyNyBAQCB0ZXN0 X3BpeGVsX2Zvcm1hdHMoZGF0YV90ICpkYXRhLCBlbnVtIHBpcGUgcGlwZSkKPiAgCX0KPiAgfQo+ ICAKPiArc3RhdGljIGJvb2wKPiArYm9ndXNfcGxhbmVfY29uZih1aW50MzJfdCBkZXZpZCwgaWd0 X3BsYW5lX3QgKnBsYW5lX29iaiwKPiArCQkgaW50IGhkaXNwbGF5LCBpbnQgcGxhbmVfeCwgaW50 IHBsYW5lX3dpZHRoKQo+ICt7Cj4gKwlpZiAoIShJU19HRU1JTklMQUtFKGRldmlkKSB8fCBJU19D QU5OT05MQUtFKGRldmlkKSkpCj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsKPiArCWlmIChwbGFuZV9v YmotPnR5cGUgPT0gRFJNX1BMQU5FX1RZUEVfQ1VSU09SKQo+ICsJCXJldHVybiBmYWxzZTsKPiAr Cj4gKwlpZiAocGxhbmVfeCArIHBsYW5lX3dpZHRoID49IENMSVBQRURfUExBTkVfTUlOX1ZBTElE ICYmCj4gKwkgICAgcGxhbmVfeCA8PSBoZGlzcGxheSAtIENMSVBQRURfUExBTkVfTUlOX1ZBTElE KQo+ICsJCXJldHVybiBmYWxzZTsKPiArCj4gKwlyZXR1cm4gdHJ1ZTsKPiArfQo+ICsKPiArc3Rh dGljIGJvb2wKPiArc3VwcG9ydGVkX3BsYW5lX2NvbmYoZGF0YV90ICpkYXRhLCBpbnQgcGxhbmVf dHlwZSwgdWludDY0X3QgdGlsaW5nLAo+ICsJCSAgICAgdWludDMyX3QgZm9ybWF0LCBpZ3Rfcm90 YXRpb25fdCByb3RhdGlvbiwKPiArCQkgICAgIGRybU1vZGVNb2RlSW5mbyAqbW9kZSwKPiArCQkg ICAgIGludCBwbGFuZV94LCBpbnQgcGxhbmVfeSwgaW50IHBsYW5lX3NpemUpCj4gK3sKPiArCWlm IChpbnRlbF9nZW4oZGF0YS0+ZGV2aWQpIDwgOSAmJgo+ICsJICAgIHRpbGluZyAhPSBMT0NBTF9E Uk1fRk9STUFUX01PRF9OT05FKQo+ICsJCXJldHVybiBmYWxzZTsKPiArCj4gKwkvKiBPbiBHRU48 OSB0aGUgcHJpbWFyeSBwbGFuZSBtdXN0IGNvdmVyIHRoZSBmdWxsIHNjcmVlbi4gKi8KPiArCWlm IChpbnRlbF9nZW4oZGF0YS0+ZGV2aWQpIDwgOSAmJgo+ICsJICAgIHBsYW5lX3R5cGUgPT0gRFJN X1BMQU5FX1RZUEVfUFJJTUFSWSAmJgo+ICsJICAgIChwbGFuZV94ID4gMCB8fCBwbGFuZV95ID4g MCB8fAo+ICsJICAgICAocGxhbmVfeCArIHBsYW5lX3NpemUgPCBtb2RlLT5oZGlzcGxheSkgfHwK PiArCSAgICAgKHBsYW5lX3kgKyBwbGFuZV9zaXplIDwgbW9kZS0+dmRpc3BsYXkpKSkKPiArCQly ZXR1cm4gZmFsc2U7Cj4gKwo+ICsJaWYgKHBsYW5lX3R5cGUgPT0gRFJNX1BMQU5FX1RZUEVfQ1VS U09SKSB7Cj4gKwkJLyogRm9yIGN1cnNvciBwbGFuZXMgb25seSBsaW5lYXIvYWxwaGEgZm9ybWF0 IGlzIHN1cHBvcnRlZC4gKi8KPiArCQlpZiAodGlsaW5nICE9IExPQ0FMX0RSTV9GT1JNQVRfTU9E X05PTkUgfHwKPiArCQkgICAgZm9ybWF0ICE9IERSTV9GT1JNQVRfQVJHQjg4ODgpCj4gKwkJCXJl dHVybiBmYWxzZTsKPiArCj4gKwkJaWYgKHBsYW5lX3NpemUgPiBkYXRhLT5tYXhfY3VydyB8fCBw bGFuZV9zaXplID4gZGF0YS0+bWF4X2N1cmgpCj4gKwkJCXJldHVybiBmYWxzZTsKPiArCX0gZWxz ZSB7Cj4gKwkJLyoKPiArCQkgKiBGb3Igbm9uLWN1cnNvciBwbGFuZXMgZm9ybWF0cyB3aXRoIGFs cGhhIG1heSByZXN1bHQgaW4KPiArCQkgKiB1bmRldGVybWluaXN0aWMgQ1JDcywgd2UgdXNlIHRo ZSBzYW1lIHNpemVkCj4gKwkJICogbm9uLWFscGhhIFhSR0I4ODg4IGZvcm1hdCBpbnN0ZWFkLgo+ ICsJCSAqLwo+ICsJCWlmIChmb3JtYXQgPT0gRFJNX0ZPUk1BVF9BUkdCODg4OCkKPiArCQkJcmV0 dXJuIGZhbHNlOwo+ICsKPiArCQlpZiAoZm9ybWF0ID09IERSTV9GT1JNQVRfUkdCNTY1ICYmCj4g KwkJICAgIGludGVsX2dlbihkYXRhLT5kZXZpZCkgPCA5ICYmCj4gKwkJICAgICFJU19WQUxMRVlW SUVXKGRhdGEtPmRldmlkKSAmJiAhSVNfQ0hFUlJZVklFVyhkYXRhLT5kZXZpZCkpCj4gKwkJCXJl dHVybiBmYWxzZTsKPiArCX0KPiArCj4gKwkvKiBSR0I1NjUgd2l0aCByb3RhdGlvbiBpcyBub3Qg c3VwcG9ydGVkIGZvciBub3cuICovCj4gKwlpZiAoZm9ybWF0ID09IERSTV9GT1JNQVRfUkdCNTY1 ICYmIHJvdGF0aW9uICE9IElHVF9ST1RBVElPTl8wKQo+ICsJCXJldHVybiBmYWxzZTsKPiArCj4g KwlyZXR1cm4gdHJ1ZTsKPiArfQo+ICsKPiArLyoKPiArICogQ3JlYXRlIGEgc3F1YXJlIHJlZmVy ZW5jZSBGQiBmb3IgdGhlIHdob2xlIHNjcmVlbiBpbiB0aGUgY2xpcHBpbmcgdGVzdCwKPiArICog d2l0aCB0aGUgZ2l2ZW4gdGVzdCBwbGFuZSBwb3NpdGlvbiBhbmQgc2l6ZS4gU2VlCj4gKyAqIGNy ZWF0ZV9mYl9mb3JfbW9kZV9fY2xpcHBpbmdfcGxhbmUoKSBmb3IgdGhlIGxheW91dCBvZiB0aGUg dGVzdCBwbGFuZS4KPiArICovCj4gK3N0YXRpYyB2b2lkCj4gK2NyZWF0ZV9mYl9mb3JfbW9kZV9f Y2xpcHBpbmdfZGlzcGxheShkYXRhX3QgKmRhdGEsIGRybU1vZGVNb2RlSW5mbyAqbW9kZSwKPiAr CQkJCSAgICAgc3F1YXJlX3QgKmNsaXBfc3F1YXJlcywKPiArCQkJCSAgICAgaW50IGNsaXBfc3F1 YXJlc19jbnQsCj4gKwkJCQkgICAgIHN0cnVjdCBpZ3RfZmIgKmZiIC8qIG91dCAqLykKPiArewo+ ICsJaW50IHBsYW5lOwo+ICsJc3RydWN0IGlndF9mYiBwbGFuZV9mYnNbNF07Cj4gKwl1bnNpZ25l ZCBpbnQgZmJfaWQ7Cj4gKwljYWlyb190ICpjcjsKPiArCWNhaXJvX3N1cmZhY2VfdCAqc3Jjc1s0 XTsKPiArCj4gKwlmYl9pZCA9IGlndF9jcmVhdGVfZmIoZGF0YS0+ZHJtX2ZkLAo+ICsJCQkgICAg ICBtb2RlLT5oZGlzcGxheSwgbW9kZS0+dmRpc3BsYXksCj4gKwkJCSAgICAgIERSTV9GT1JNQVRf WFJHQjg4ODgsCj4gKwkJCSAgICAgIExPQ0FMX0RSTV9GT1JNQVRfTU9EX05PTkUsCj4gKwkJCSAg ICAgIGZiKTsKPiArCWlndF9hc3NlcnQoZmJfaWQpOwo+ICsKPiArCWNyID0gaWd0X2dldF9jYWly b19jdHgoZGF0YS0+ZHJtX2ZkLCBmYik7Cj4gKwlpZ3RfcGFpbnRfY29sb3IoY3IsIDAsIDAsIG1v ZGUtPmhkaXNwbGF5LCBtb2RlLT52ZGlzcGxheSwKPiArCQkJMCwgMCwgMCk7Cj4gKwo+ICsJZm9y IChwbGFuZSA9IDA7IHBsYW5lIDwgY2xpcF9zcXVhcmVzX2NudDsgcGxhbmUrKykgewo+ICsJCWNy ZWF0ZV9mYl9mb3JfbW9kZV9fY2xpcHBpbmdfcGxhbmUoZGF0YSwgSUdUX1JPVEFUSU9OXzAsCj4g KwkJCQkJCSAgIExPQ0FMX0RSTV9GT1JNQVRfTU9EX05PTkUsCj4gKwkJCQkJCSAgIERSTV9GT1JN QVRfWFJHQjg4ODgsCj4gKwkJCQkJCSAgIGNsaXBfc3F1YXJlc1twbGFuZV0uc2l6ZSwKPiArCQkJ CQkJICAgJnBsYW5lX2Zic1twbGFuZV0pOwo+ICsKPiArCQlzcmNzW3BsYW5lXSA9IGlndF9nZXRf Y2Fpcm9fc3VyZmFjZShkYXRhLT5kcm1fZmQsCj4gKwkJCQkJCSAgICZwbGFuZV9mYnNbcGxhbmVd KTsKPiArCQljYWlyb19zZXRfc291cmNlX3N1cmZhY2UoY3IsIHNyY3NbcGxhbmVdLAo+ICsJCQkJ CSBjbGlwX3NxdWFyZXNbcGxhbmVdLngsCj4gKwkJCQkJIGNsaXBfc3F1YXJlc1twbGFuZV0ueSk7 Cj4gKwkJY2Fpcm9fcmVjdGFuZ2xlKGNyLAo+ICsJCQkJY2xpcF9zcXVhcmVzW3BsYW5lXS54LAo+ ICsJCQkJY2xpcF9zcXVhcmVzW3BsYW5lXS55LAo+ICsJCQkJY2xpcF9zcXVhcmVzW3BsYW5lXS5z aXplLAo+ICsJCQkJY2xpcF9zcXVhcmVzW3BsYW5lXS5zaXplKTsKPiArCQljYWlyb19maWxsKGNy KTsKCkNvdWxkIHJlbW92ZSB0aGUgRkIsIGNhaXJvIHN1cmZhY2UgYWxyZWFkeSBoZXJlLCBzbyB3 ZSBkb24ndCBuZWVkIHRoZQphcnJheSBhbmQgYSBzZWNvbmQgbG9vcCBiZWxvdz8KCj4gKwl9Cj4g Kwo+ICsJaWd0X2Fzc2VydChjYWlyb19zdGF0dXMoY3IpID09IDApOwo+ICsJY2Fpcm9fZGVzdHJv eShjcik7Cj4gKwo+ICsJZm9yIChwbGFuZSA9IDA7IHBsYW5lIDwgY2xpcF9zcXVhcmVzX2NudDsg cGxhbmUrKykgewo+ICsJCWNhaXJvX3N1cmZhY2VfZGVzdHJveShzcmNzW3BsYW5lXSk7Cj4gKwkJ aWd0X3JlbW92ZV9mYihkYXRhLT5kcm1fZmQsICZwbGFuZV9mYnNbcGxhbmVdKTsKPiArCX0KPiAr fQo+ICsKPiArc3RhdGljIHZvaWQKPiArdGVzdF9wbGFuZV9jbGlwcGluZ19mb3JtYXQoZGF0YV90 ICpkYXRhLAo+ICsJCQkgICBlbnVtIHBpcGUgcGlwZSwKPiArCQkJICAgaWd0X291dHB1dF90ICpv dXRwdXQsCj4gKwkJCSAgIGRybU1vZGVNb2RlSW5mbyAqbW9kZSwKPiArCQkJICAgc3F1YXJlX3Qg KmNsaXBfc3F1YXJlcywKPiArCQkJICAgaW50IGNsaXBfc3F1YXJlc19jbnQsCj4gKwkJCSAgIHVp bnQ2NF90IHRpbGluZywKPiArCQkJICAgaWd0X3JvdGF0aW9uX3Qgcm90YXRpb24sCj4gKwkJCSAg IHVpbnQzMl90IGZvcm1hdCwKPiArCQkJICAgaWd0X2NyY190ICpyZWZlcmVuY2VfY3JjKQo+ICt7 Cj4gKwlpbnQgcGxhbmU7Cj4gKwlpZ3RfcGxhbmVfdCAqcGxhbmVfb2Jqc1s0XTsKPiArCXN0cnVj dCBpZ3RfZmIgcGxhbmVfZmJzWzRdOwo+ICsJaWd0X2NyY190IGNyYzsKPiArCWludCByZXQ7Cj4g Kwlib29sIGJvZ3VzX3BsYW5lcyA9IGZhbHNlOwo+ICsKPiArCW1lbXNldChwbGFuZV9vYmpzLCAw LCBzaXplb2YocGxhbmVfb2JqcykpOwo+ICsKPiArCWlndF9kZWJ1Zygicm90YXRpb24gJXMgdGls aW5nICVzIGZvcm1hdCAlc1xuIiwKPiArCQkgIGlndF9yb3RhdGlvbl9kZWdyZWVzX3N0cihyb3Rh dGlvbiksCj4gKwkJICBpZ3RfdGlsaW5nX3N0cih0aWxpbmcpLAo+ICsJCSAgaWd0X2Zvcm1hdF9z dHIoZm9ybWF0KSk7Cj4gKwo+ICsJaWd0X291dHB1dF9zZXRfcGlwZShvdXRwdXQsIHBpcGUpOwo+ ICsKPiArCWZvciAocGxhbmUgPSAwOyBwbGFuZSA8IGNsaXBfc3F1YXJlc19jbnQgOyBwbGFuZSsr KSB7Cj4gKwkJaWd0X3BsYW5lX3QgKm9iaiA9IGlndF9vdXRwdXRfZ2V0X3BsYW5lKG91dHB1dCwg cGxhbmUpOwo+ICsJCXN0cnVjdCBpZ3RfZmIgKmZiID0gJnBsYW5lX2Zic1twbGFuZV07Cj4gKwkJ aW50IHggPSBjbGlwX3NxdWFyZXNbcGxhbmVdLng7Cj4gKwkJaW50IHkgPSBjbGlwX3NxdWFyZXNb cGxhbmVdLnk7Cj4gKwkJaW50IHNpemUgPSBjbGlwX3NxdWFyZXNbcGxhbmVdLnNpemU7Cj4gKwkJ dWludDY0X3QgX3RpbGluZyA9IHRpbGluZzsKPiArCQl1aW50MzJfdCBfZm9ybWF0ID0gZm9ybWF0 Owo+ICsKPiArCQlpZiAob2JqLT50eXBlID09IERSTV9QTEFORV9UWVBFX0NVUlNPUikgewo+ICsJ CQlfdGlsaW5nID0gTE9DQUxfRFJNX0ZPUk1BVF9NT0RfTk9ORTsKPiArCQkJX2Zvcm1hdCA9IERS TV9GT1JNQVRfQVJHQjg4ODg7Cj4gKwkJfQo+ICsKPiArCQlpZiAoIXN1cHBvcnRlZF9wbGFuZV9j b25mKGRhdGEsIG9iai0+dHlwZSwgX3RpbGluZywgX2Zvcm1hdCwKPiArCQkJCQkgIHJvdGF0aW9u LCBtb2RlLCB4LCB5LCBzaXplKSkKPiArCQkJZ290byBvdXQ7Cj4gKwo+ICsJCWNyZWF0ZV9mYl9m b3JfbW9kZV9fY2xpcHBpbmdfcGxhbmUoZGF0YSwgcm90YXRpb24sX3RpbGluZywKPiArCQkJCQkJ ICAgX2Zvcm1hdCwgc2l6ZSwgZmIpOwo+ICsKPiArCQlpZ3RfcGxhbmVfc2V0X2ZiKG9iaiwgZmIp Owo+ICsJCWlndF9mYl9zZXRfcG9zaXRpb24oZmIsIG9iaiwgMCwgMCk7Cj4gKwo+ICsJCWlndF9w bGFuZV9zZXRfc2l6ZShvYmosIHNpemUsIHNpemUpOwo+ICsJCWlndF9wbGFuZV9zZXRfcm90YXRp b24ob2JqLCByb3RhdGlvbik7Cj4gKwkJaWd0X3BsYW5lX3NldF9wb3NpdGlvbihvYmosIHgsIHkp Owo+ICsKPiArCQlwbGFuZV9vYmpzW3BsYW5lXSA9IG9iajsKPiArCX0KPiArCj4gKwkvKgo+ICsJ ICogTm90ZSB0aGF0IGEgdW5pdmVyc2FsIGNvbW1pdCBkb2Vzbid0IHN1cHBvcnQgZnVsbCBtb2Rl c2V0cywgc28gd2UKPiArCSAqIGhhdmUgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGZvbGxvd2luZyBv bmx5IG5lZWRzIHRvIGNvbW1pdCBjaGFuZ2VzCj4gKwkgKiB0aGF0IGFyZSBjb21wYXRpYmxlIHdp dGggYSBmYXN0c2V0LiBUaGlzIHNob3VsZCBiZSBndWFyYW50ZWVkLAo+ICsJICogc2luY2UgYmVm b3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiB3ZSB0b29rIHRoZSByZWZlcmVuY2UgQ1JDIHdoaWNo Cj4gKwkgKiBsZWZ0IHRoZSBkaXNwbGF5IGVuYWJsZWQgd2l0aCB0aGUgbW9kZSB3ZSByZXF1aXJl IGhlcmUgYW5kCj4gKwkgKiBhZnRlcndhcmRzIHdlIG9ubHkgY2hhbmdlIHBsYW5lIHBhcmFtZXRl cnMgKEZCLCBwb3NpdGlvbiwgcm90YXRpb24KPiArCSAqIGV0Yy4pLgo+ICsJICovCj4gKwlyZXQg PSBpZ3RfZGlzcGxheV90cnlfY29tbWl0MigmZGF0YS0+ZGlzcGxheSwgQ09NTUlUX1VOSVZFUlNB TCk7Cj4gKwo+ICsJZm9yIChwbGFuZSA9IDA7IHBsYW5lIDwgY2xpcF9zcXVhcmVzX2NudDsgcGxh bmUrKykgewo+ICsJCWlmKCFib2d1c19wbGFuZV9jb25mKGRhdGEtPmRldmlkLCBwbGFuZV9vYmpz W3BsYW5lXSwKPiArCQkgICBtb2RlLT5oZGlzcGxheSwgY2xpcF9zcXVhcmVzW3BsYW5lXS54LAo+ ICsJCSAgIGNsaXBfc3F1YXJlc1twbGFuZV0uc2l6ZSkpIHsKClBsZWFzZSBjaGVjayBmb3JtYXR0 aW5nIChrZXJuZWwgc3R5bGUpLgoKPiArCQkJYm9ndXNfcGxhbmVzID0gdHJ1ZTsKPiArCQkJYnJl YWs7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCWlmIChib2d1c19wbGFuZXMpIHsKPiArCQlpZ3RfYXNz ZXJ0KHJldCA9PSAwKTsKPiArCQlpZ3RfcGlwZV9jcmNfY29sbGVjdF9jcmMoZGF0YS0+cGlwZV9j cmMsICZjcmMpOwo+ICsJCWlndF9hc3NlcnRfY3JjX2VxdWFsKHJlZmVyZW5jZV9jcmMsICZjcmMp Owo+ICsJfSBlbHNlIHsKPiArCQlpZ3RfYXNzZXJ0KHJldCA9PSAtRVJBTkdFKTsKPiArCX0KPiAr Cj4gK291dDoKPiArCWZvciAocGxhbmUgPSAwOyBwbGFuZSA8IGNsaXBfc3F1YXJlc19jbnQ7IHBs YW5lKyspIHsKPiArCQlpZiAoIXBsYW5lX29ianNbcGxhbmVdKQo+ICsJCQljb250aW51ZTsKPiAr CQlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lX29ianNbcGxhbmVdLCBOVUxMKTsKPiArCQlpZ3RfcGxh bmVfc2V0X3JvdGF0aW9uKHBsYW5lX29ianNbcGxhbmVdLCBJR1RfUk9UQVRJT05fMCk7Cj4gKwkJ aWd0X3BsYW5lX3NldF9wb3NpdGlvbihwbGFuZV9vYmpzW3BsYW5lXSwgMCwgMCk7Cj4gKwo+ICsJ CWlndF9yZW1vdmVfZmIoZGF0YS0+ZHJtX2ZkLCAmcGxhbmVfZmJzW3BsYW5lXSk7Cj4gKwl9Cj4g Kwo+ICsJaWd0X291dHB1dF9zZXRfcGlwZShvdXRwdXQsIFBJUEVfQU5ZKTsKPiArfQo+ICsKPiAr c3RhdGljIHZvaWQKPiArdGVzdF9wbGFuZV9jbGlwcGluZ19zcXVhcmUoZGF0YV90ICpkYXRhLCBl bnVtIHBpcGUgcGlwZSwKPiArCQkJICAgaWd0X291dHB1dF90ICpvdXRwdXQsIGRybU1vZGVNb2Rl SW5mbyAqbW9kZSwKPiArCQkJICAgc3F1YXJlX3QgKmNsaXBfc3F1YXJlcywgaW50IGNsaXBfc3F1 YXJlc19jbnQpCj4gK3sKPiArCWNvbnN0IHN0cnVjdCB7Cj4gKwkJdWludDY0X3QgdGlsaW5nOwo+ ICsJCWlndF9yb3RhdGlvbl90IHJvdGF0aW9uOwo+ICsJfSByb3RhdGlvbnNbXSA9IHsKPiArCQl7 IExPQ0FMX0RSTV9GT1JNQVRfTU9EX05PTkUsCQlJR1RfUk9UQVRJT05fMCB9LAo+ICsKPiArCQl7 IExPQ0FMX0k5MTVfRk9STUFUX01PRF9YX1RJTEVELAlJR1RfUk9UQVRJT05fMCB9LAo+ICsKPiAr CQl7IExPQ0FMX0k5MTVfRk9STUFUX01PRF9ZX1RJTEVELAlJR1RfUk9UQVRJT05fMCB9LAo+ICsJ CXsgTE9DQUxfSTkxNV9GT1JNQVRfTU9EX1lfVElMRUQsCUlHVF9ST1RBVElPTl85MCB9LAo+ICsJ CXsgTE9DQUxfSTkxNV9GT1JNQVRfTU9EX1lfVElMRUQsCUlHVF9ST1RBVElPTl8xODAgfSwKPiAr CQl7IExPQ0FMX0k5MTVfRk9STUFUX01PRF9ZX1RJTEVELAlJR1RfUk9UQVRJT05fMjcwIH0sCj4g Kwo+ICsJCXsgTE9DQUxfSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVELAlJR1RfUk9UQVRJT05fMCB9 LAo+ICsJCXsgTE9DQUxfSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVELAlJR1RfUk9UQVRJT05fOTAg fSwKPiArCQl7IExPQ0FMX0k5MTVfRk9STUFUX01PRF9ZZl9USUxFRCwJSUdUX1JPVEFUSU9OXzE4 MCB9LAo+ICsJCXsgTE9DQUxfSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVELAlJR1RfUk9UQVRJT05f MjcwIH0sCj4gKwl9Owo+ICsJY29uc3QgdWludDMyX3QgZm9ybWF0c1tdID0gewo+ICsJCURSTV9G T1JNQVRfUkdCNTY1LAo+ICsJCURSTV9GT1JNQVRfWFJHQjg4ODgsCj4gKwkJRFJNX0ZPUk1BVF9B UkdCODg4OCwKPiArCX07Cj4gKwo+ICsJaWd0X2ZiX3QgcmVmZXJlbmNlX2ZiOwo+ICsJaWd0X2Ny Y190IHJlZmVyZW5jZV9jcmM7Cj4gKwo+ICsJZm9yIChpbnQgcGxhbmUgPSAwOyBwbGFuZSA8IGNs aXBfc3F1YXJlc19jbnQ7IHBsYW5lKyspIHsKPiArCQlpZ3RfaW5mbygiVGVzdGluZyBjb25uZWN0 b3IgJXMgbW9kZSAlZHglZCB1c2luZyBwaXBlICVzOiAlZHglZEAlZCwlZFxuIiwKPiArCQkJIGln dF9vdXRwdXRfbmFtZShvdXRwdXQpLAo+ICsJCQkgbW9kZS0+aGRpc3BsYXksIG1vZGUtPnZkaXNw bGF5LAo+ICsJCQkga21zdGVzdF9waXBlX25hbWUocGlwZSksCj4gKwkJCSBjbGlwX3NxdWFyZXNb cGxhbmVdLnNpemUsIGNsaXBfc3F1YXJlc1twbGFuZV0uc2l6ZSwKPiArCQkJIGNsaXBfc3F1YXJl c1twbGFuZV0ueCwgY2xpcF9zcXVhcmVzW3BsYW5lXS55KTsKPiArCX0KPiArCj4gKwl0ZXN0X2lu aXQoZGF0YSwgcGlwZSk7Cj4gKwo+ICsJY3JlYXRlX2ZiX2Zvcl9tb2RlX19jbGlwcGluZ19kaXNw bGF5KGRhdGEsIG1vZGUsCj4gKwkJCQkJICAgICBjbGlwX3NxdWFyZXMsCj4gKwkJCQkJICAgICBj bGlwX3NxdWFyZXNfY250LAo+ICsJCQkJCSAgICAgJnJlZmVyZW5jZV9mYik7Cj4gKwo+ICsJdGVz dF9ncmFiX2NyY19mb3JfZmIyKGRhdGEsIG91dHB1dCwgcGlwZSwgJnJlZmVyZW5jZV9mYiwKPiAr CQkJICAgICAgJnJlZmVyZW5jZV9jcmMsIENPTU1JVF9VTklWRVJTQUwpOwoKSG0gbm90IHN1cmUg d2h5IGxlZ2FjeSBjb21taXQgd291bGRuJ3Qgd29yayBoZXJlLiBJdCB3aWxsIHJlc3VsdCBpbiBh Cm1vZGVzZXQgd2l0aCBvbmx5IHRoZSBwcmltYXJ5IHBsYW5lIG9uIHdpdGhvdXQgcm90YXRpb24u IE90b2ggdW5pdmVyc2FsCmNvbW1pdCBkb2Vzbid0IChvciBhdCBsZWFzdCB1c2VkIG5vdCB0bykg c3VwcG9ydCBmdWxsIG1vZGVzZXRzLCBzbyBpZgp3ZSdkIGhhdmUgdG8gY2hhbmdlIHRoZSBtb2Rl IGhlcmUgdGhlbiB0aGF0IHdvdWxkbid0IHdvcmsuIERpZCB5b3UgdHJ5CnRvIHJ1biB0aGUgdGVz dCB3aXRoIG11bHRpcGxlIG91dHB1dHM/Cgo+ICsKPiArCWlndF9yZW1vdmVfZmIoZGF0YS0+ZHJt X2ZkLCAmcmVmZXJlbmNlX2ZiKTsKPiArCj4gKwlmb3IgKGludCByb3RhdGlvbiA9IDA7IHJvdGF0 aW9uIDwgQVJSQVlfU0laRShyb3RhdGlvbnMpOyByb3RhdGlvbisrKQo+ICsJCWZvciAoaW50IGZv cm1hdCA9IDA7IGZvcm1hdCA8IEFSUkFZX1NJWkUoZm9ybWF0cyk7IGZvcm1hdCsrKQo+ICsJCQl0 ZXN0X3BsYW5lX2NsaXBwaW5nX2Zvcm1hdChkYXRhLCBwaXBlLCBvdXRwdXQsCj4gKwkJCQkJCSAg IG1vZGUsCj4gKwkJCQkJCSAgIGNsaXBfc3F1YXJlcywKPiArCQkJCQkJICAgY2xpcF9zcXVhcmVz X2NudCwKPiArCQkJCQkJICAgcm90YXRpb25zW3JvdGF0aW9uXS50aWxpbmcsCj4gKwkJCQkJCSAg IHJvdGF0aW9uc1tyb3RhdGlvbl0ucm90YXRpb24sCj4gKwkJCQkJCSAgIGZvcm1hdHNbZm9ybWF0 XSwKPiArCQkJCQkJICAgJnJlZmVyZW5jZV9jcmMpOwo+ICsKPiArCXRlc3RfZmluaShkYXRhKTsK PiArfQo+ICsKPiArc3RhdGljIHZvaWQKPiArdGVzdF9wbGFuZV9jbGlwcGluZ19zcXVhcmVzKGRh dGFfdCAqZGF0YSwgZW51bSBwaXBlIHBpcGUsCj4gKwkJCSAgICBpZ3Rfb3V0cHV0X3QgKm91dHB1 dCwgZHJtTW9kZU1vZGVJbmZvICptb2RlLAo+ICsJCQkgICAgc3F1YXJlX3QgKmNsaXBfc3F1YXJl cywgaW50IGNsaXBfc3F1YXJlc19jbnQpCgpJbW8gcy9jbGlwX3NxdWFyZXNfY250L3BsYW5lX2Nu dC8gd291bGQgYmUgY2xlYXJlci4KCj4gK3sKPiArCXN3aXRjaCAoY2xpcF9zcXVhcmVzX2NudCkg ewo+ICsJY2FzZSA0Ogo+ICsJICAgIHRlc3RfcGxhbmVfY2xpcHBpbmdfc3F1YXJlKGRhdGEsIHBp cGUsIG91dHB1dCwgbW9kZSwKPiArCQkJCSAgICAgICBjbGlwX3NxdWFyZXMsIGNsaXBfc3F1YXJl c19jbnQpOwo+ICsJICAgIGJyZWFrOwo+ICsJY2FzZSAyOgo+ICsJICAgIHRlc3RfcGxhbmVfY2xp cHBpbmdfc3F1YXJlKGRhdGEsIHBpcGUsIG91dHB1dCwgbW9kZSwKPiArCQkJCSAgICAgICBjbGlw X3NxdWFyZXMsIGNsaXBfc3F1YXJlc19jbnQpOwo+ICsJICAgIHRlc3RfcGxhbmVfY2xpcHBpbmdf c3F1YXJlKGRhdGEsIHBpcGUsIG91dHB1dCwgbW9kZSwKPiArCQkJCSAgICAgICBjbGlwX3NxdWFy ZXMgKyBjbGlwX3NxdWFyZXNfY250LAo+ICsJCQkJICAgICAgIGNsaXBfc3F1YXJlc19jbnQpOwo+ ICsJICAgIGJyZWFrOwo+ICsJY2FzZSAxOgo+ICsJZGVmYXVsdDoKPiArCSAgICBmb3IgKGludCBp ID0gMDsgaSAgPCA0OyBpKyspIHsKPiArCQl0ZXN0X3BsYW5lX2NsaXBwaW5nX3NxdWFyZShkYXRh LCBwaXBlLCBvdXRwdXQsIG1vZGUsCj4gKwkJCQkJICAgY2xpcF9zcXVhcmVzICsgaSwKPiArCQkJ CQkgICBjbGlwX3NxdWFyZXNfY250KTsKPiArCSAgICB9Cj4gKwkgICAgYnJlYWs7Cj4gKwl9CgpD b3VsZCBiZSBqdXN0CgoJZm9yIChpID0gMDsgaSA8IDQ7IGkgKz0gY2xpcF9zcXVhcmVzX2NudCkK CQl0ZXN0X3BsYW5lX2NsaXBwaW5nX3NxdWFyZShkYXRhLCBwaXBlLCBvdXRwdXQsIG1vZGUsCgkJ CQkJICAgY2xpcF9zcXVhcmVzICsgaSwKCQkJCQkgICBjbGlwX3NxdWFyZXNfY250KTsKPwoKPiAr fQo+ICsKPiArc3RhdGljIHZvaWQKPiArdGVzdF9wbGFuZV9jbGlwcGluZyhkYXRhX3QgKmRhdGEs IGVudW0gcGlwZSBwaXBlKQo+ICt7Cj4gKwlpZ3Rfb3V0cHV0X3QgKm91dHB1dDsKPiArCWludCBj b25uZWN0ZWRfb3V0cyA9IDA7Cj4gKwo+ICsJZm9yX2VhY2hfdmFsaWRfb3V0cHV0X29uX3BpcGUo JmRhdGEtPmRpc3BsYXksIHBpcGUsIG91dHB1dCkgewo+ICsJCWRybU1vZGVNb2RlSW5mbyAqbW9k ZTsKPiArCQlpbnQgc3Ffc2l6ZTsKPiArCQlpbnQgbWF4X3BsYW5lcyA9IGRhdGEtPmRpc3BsYXku cGlwZXNbcGlwZV0ubl9wbGFuZXM7Cj4gKwkJaW50IGNsaXBfc3F1YXJlc19jbnQ7Cj4gKwo+ICsJ CWNsaXBfc3F1YXJlc19jbnQgPSBtYXhfcGxhbmVzID49IDQgPwo+ICsJCQkJICAgNCA6IG1heF9w bGFuZXMgPj0gMiA/IDIgOiAxOwo+ICsKPiArCQlpZ3Rfb3V0cHV0X3NldF9waXBlKG91dHB1dCwg cGlwZSk7Cj4gKwkJbW9kZSA9IGlndF9vdXRwdXRfZ2V0X21vZGUob3V0cHV0KTsKPiArCj4gKwkJ LyoKPiArCQkgKiBUZXN0IHdpdGggYSBzcXVhcmUgcGxhbmUgYmlnZ2VyIHRoYW4gZWl0aGVyIHRo ZSB3aWR0aCBvcgo+ICsJCSAqIGhlaWdodCBvZiB0aGUgbW9kZS4gVGhpcyBzaG91bGQgcGFzcyBv biBhbGwgcGxhdGZvcm1zLgo+ICsJCSAqLwo+ICsJCXNxX3NpemUgPSBtb2RlLT5oZGlzcGxheSA+ IG1vZGUtPnZkaXNwbGF5ID8KPiArCQkJICBtb2RlLT5oZGlzcGxheSA6IG1vZGUtPnZkaXNwbGF5 Owo+ICsKPiArCQljbGlwX3NxdWFyZXNbMF0ueCA9IC0yOwo+ICsJCWNsaXBfc3F1YXJlc1swXS55 ID0gLTI7Cj4gKwkJY2xpcF9zcXVhcmVzWzBdLnNpemUgPSBzcV9zaXplICsgNDsKPiArCj4gKwkJ dGVzdF9wbGFuZV9jbGlwcGluZ19zcXVhcmUoZGF0YSwgcGlwZSwgb3V0cHV0LCBtb2RlLAo+ICsJ CQkJCSAgIGNsaXBfc3F1YXJlcywgMSk7Cj4gKwo+ICsJCS8qCj4gKwkJICogVGVzdCBwb3NpdGlv bnMgaW4gdGhlIDQgY29ybmVycyBvZiB0aGUgc2NyZWVuIHdpdGggYQo+ICsJCSAqIENMSVBQRURf UExBTkVfTUlOX1ZBTElEIHggQ0xJUFBFRF9QTEFORV9NSU5fVkFMSUQgc3F1YXJlCj4gKwkJICog dmlzaWJsZSBmcm9tIHRoZSBwbGFuZS4gVGhlc2Ugc2hvdWxkIHBhc3Mgb24gYWxsIHBsYXRmb3Jt cy4KPiArCQkgKi8KPiArCQljbGlwX3NxdWFyZXNbMF0ueCA9IC1DTElQUEVEX1BMQU5FX1NNQUxM X1NJWkUgKwo+ICsJCQkJICAgICBDTElQUEVEX1BMQU5FX01JTl9WQUxJRDsKPiArCQljbGlwX3Nx dWFyZXNbMF0ueSA9IC1DTElQUEVEX1BMQU5FX1NNQUxMX1NJWkUgKwo+ICsJCQkJICAgICBDTElQ UEVEX1BMQU5FX01JTl9WQUxJRDsKPiArCQljbGlwX3NxdWFyZXNbMF0uc2l6ZSA9IENMSVBQRURf UExBTkVfU01BTExfU0laRTsKPiArCj4gKwkJY2xpcF9zcXVhcmVzWzFdLnggPSAtQ0xJUFBFRF9Q TEFORV9TTUFMTF9TSVpFICsKPiArCQkJCSAgICAgQ0xJUFBFRF9QTEFORV9NSU5fVkFMSUQ7Cj4g KwkJY2xpcF9zcXVhcmVzWzFdLnkgPSBtb2RlLT52ZGlzcGxheSAtCj4gKwkJCQkgICAgQ0xJUFBF RF9QTEFORV9NSU5fVkFMSUQ7Cj4gKwkJY2xpcF9zcXVhcmVzWzFdLnNpemUgPSBDTElQUEVEX1BM QU5FX1NNQUxMX1NJWkU7Cj4gKwo+ICsJCWNsaXBfc3F1YXJlc1syXS54ID0gbW9kZS0+aGRpc3Bs YXkgLQo+ICsJCQkJICAgIENMSVBQRURfUExBTkVfTUlOX1ZBTElEOwo+ICsJCWNsaXBfc3F1YXJl c1syXS55ID0gLUNMSVBQRURfUExBTkVfU01BTExfU0laRSArCj4gKwkJCQkgICAgIENMSVBQRURf UExBTkVfTUlOX1ZBTElEOwo+ICsJCWNsaXBfc3F1YXJlc1syXS5zaXplID0gQ0xJUFBFRF9QTEFO RV9TTUFMTF9TSVpFOwo+ICsKPiArCQljbGlwX3NxdWFyZXNbM10ueCA9IG1vZGUtPmhkaXNwbGF5 IC0KPiArCQkJCSAgICBDTElQUEVEX1BMQU5FX01JTl9WQUxJRDsKPiArCQljbGlwX3NxdWFyZXNb M10ueSA9IG1vZGUtPnZkaXNwbGF5IC0KPiArCQkJCSAgICBDTElQUEVEX1BMQU5FX01JTl9WQUxJ RDsKPiArCQljbGlwX3NxdWFyZXNbM10uc2l6ZSA9IENMSVBQRURfUExBTkVfU01BTExfU0laRTsK PiArCj4gKwkJdGVzdF9wbGFuZV9jbGlwcGluZ19zcXVhcmVzKGRhdGEsIHBpcGUsIG91dHB1dCwg bW9kZSwKPiArCQkJCQkgICAgY2xpcF9zcXVhcmVzLCBjbGlwX3NxdWFyZXNfY250KTsKPiArCj4g KwkJLyoKPiArCQkgKiBUZXN0IHBvc2l0aW9ucyBpbiB0aGUgNCBjb3JuZXJzIG9mIHRoZSBzY3Jl ZW4gd2l0aCBhCj4gKwkJICogMiB4IDIgc3F1YXJlIHZpc2libGUgZnJvbSB0aGUgcGxhbmUuIFRo ZXNlIGFyZSB2YWxpZCBvbiBhbGwKPiArCQkgKiBwbGF0Zm9ybXMgZXhjZXB0IG9uIEdMSy9DTkwg d2hlcmUgbGVzcyB0aGFuCj4gKwkJICogQ0xJUFBFRF9QTEFORV9NSU5fVkFMSUQgcGl4ZWxzIHZp c2libGUgb24gdGhlIGxlZnQvcmlnaHQKPiArCQkgKiBlZGdlcyBvZiB0aGUgc2NyZWVuIG1heSBj YXVzZSBGSUZPIHVuZGVyZmxvdyBhbmQgZGlzcGxheQo+ICsJCSAqIGNvcnJ1cHRpb24uCj4gKwkJ ICoKPiArCQkgKiBUaGUgY3Vyc29yIHBsYW5lIGlzIGFuIGV4Y2VwdGlvbiB3aXRob3V0IHRoaXMg cHJvYmxlbS4KPiArCQkgKgo+ICsJCSAqIFVzZSAyIHggMiBzaXplIGFzIG90aGVyIChvZGQpIHNp emVzIG1heSByZXN1bHQgaW4gYW4KPiArCQkgKiBpbmNvcnJlY3QgQ1JDIGZvciB0aGUgY3Vyc29y IHBsYW5lIGV2ZW4gdGhvdWdoIGl0IGRpc3BsYXlzCj4gKwkJICogY29ycmVjdGx5IGFuZCBjYXVz ZXMgbm8gdW5kZXJmbG93Lgo+ICsJCSAqLwo+ICsJCWNsaXBfc3F1YXJlc1swXS54ID0gLUNMSVBQ RURfUExBTkVfU01BTExfU0laRSArIDI7Cj4gKwkJY2xpcF9zcXVhcmVzWzBdLnkgPSAtQ0xJUFBF RF9QTEFORV9TTUFMTF9TSVpFICsgMjsKPiArCQljbGlwX3NxdWFyZXNbMF0uc2l6ZSA9IENMSVBQ RURfUExBTkVfU01BTExfU0laRTsKPiArCj4gKwkJY2xpcF9zcXVhcmVzWzFdLnggPSAtQ0xJUFBF RF9QTEFORV9TTUFMTF9TSVpFICsgMjsKPiArCQljbGlwX3NxdWFyZXNbMV0ueSA9IG1vZGUtPnZk aXNwbGF5IC0gMjsKPiArCQljbGlwX3NxdWFyZXNbMV0uc2l6ZSA9IENMSVBQRURfUExBTkVfU01B TExfU0laRTsKPiArCj4gKwkJY2xpcF9zcXVhcmVzWzJdLnggPSBtb2RlLT5oZGlzcGxheSAtIDI7 Cj4gKwkJY2xpcF9zcXVhcmVzWzJdLnkgPSAtQ0xJUFBFRF9QTEFORV9TTUFMTF9TSVpFICsgMjsK PiArCQljbGlwX3NxdWFyZXNbMl0uc2l6ZSA9IENMSVBQRURfUExBTkVfU01BTExfU0laRTsKPiAr Cj4gKwkJY2xpcF9zcXVhcmVzWzNdLnggPSBtb2RlLT5oZGlzcGxheSAtIDI7Cj4gKwkJY2xpcF9z cXVhcmVzWzNdLnkgPSBtb2RlLT52ZGlzcGxheSAtIDI7Cj4gKwkJY2xpcF9zcXVhcmVzWzNdLnNp emUgPSBDTElQUEVEX1BMQU5FX1NNQUxMX1NJWkU7Cj4gKwo+ICsJCXRlc3RfcGxhbmVfY2xpcHBp bmdfc3F1YXJlcyhkYXRhLCBwaXBlLCBvdXRwdXQsIG1vZGUsCj4gKwkJCQkJICAgIGNsaXBfc3F1 YXJlcywgY2xpcF9zcXVhcmVzX2NudCk7Cj4gKwo+ICsJCWNvbm5lY3RlZF9vdXRzKys7Cj4gKwl9 Cj4gKwo+ICsJaWd0X3NraXBfb24oY29ubmVjdGVkX291dHMgPT0gMCk7Cj4gK30KPiArCj4gIHN0 YXRpYyB2b2lkCj4gIHJ1bl90ZXN0c19mb3JfcGlwZV9wbGFuZShkYXRhX3QgKmRhdGEsIGVudW0g cGlwZSBwaXBlKQo+ICB7Cj4gQEAgLTU5MCw2ICsxMTAzLDkgQEAgcnVuX3Rlc3RzX2Zvcl9waXBl X3BsYW5lKGRhdGFfdCAqZGF0YSwgZW51bSBwaXBlIHBpcGUpCj4gIAkJICAgICAga21zdGVzdF9w aXBlX25hbWUocGlwZSkpCj4gIAkJdGVzdF9wbGFuZV9wYW5uaW5nKGRhdGEsIHBpcGUsIFRFU1Rf UEFOTklOR19CT1RUT01fUklHSFQgfAo+ICAJCQkJCSAgICAgICBURVNUX1NVU1BFTkRfUkVTVU1F KTsKPiArCWlndF9zdWJ0ZXN0X2YoInBsYW5lLWNsaXBwaW5nLXBpcGUtJXMtcGxhbmVzIiwKPiAr CQkgICAgICBrbXN0ZXN0X3BpcGVfbmFtZShwaXBlKSkKPiArCQl0ZXN0X3BsYW5lX2NsaXBwaW5n KGRhdGEsIHBpcGUpOwo+ICB9Cj4gIAo+ICAKPiBAQCAtNjAyLDggKzExMTgsMjEgQEAgaWd0X21h aW4KPiAgCWlndF9za2lwX29uX3NpbXVsYXRpb24oKTsKPiAgCj4gIAlpZ3RfZml4dHVyZSB7Cj4g KwkJaW50IHJldDsKPiArCj4gIAkJZGF0YS5kcm1fZmQgPSBkcm1fb3Blbl9kcml2ZXJfbWFzdGVy KERSSVZFUl9JTlRFTCk7Cj4gIAo+ICsJCWRhdGEuZGV2aWQgPSBpbnRlbF9nZXRfZHJtX2Rldmlk KGRhdGEuZHJtX2ZkKTsKPiArCj4gKwkJZGF0YS5tYXhfY3VydyA9IDY0Owo+ICsJCWRhdGEubWF4 X2N1cmggPSA2NDsKPiArCQlyZXQgPSBkcm1HZXRDYXAoZGF0YS5kcm1fZmQsIERSTV9DQVBfQ1VS U09SX1dJRFRILAo+ICsJCQkJJmRhdGEubWF4X2N1cncpOwo+ICsJCWlndF9hc3NlcnQocmV0ID09 IDAgfHwgZXJybm8gPT0gRUlOVkFMKTsKPiArCQlyZXQgPSBkcm1HZXRDYXAoZGF0YS5kcm1fZmQs IERSTV9DQVBfQ1VSU09SX0hFSUdIVCwKPiArCQkJCSZkYXRhLm1heF9jdXJoKTsKPiArCQlpZ3Rf YXNzZXJ0KHJldCA9PSAwIHx8IGVycm5vID09IEVJTlZBTCk7Cj4gKwo+ICAJCWttc3Rlc3Rfc2V0 X3Z0X2dyYXBoaWNzX21vZGUoKTsKPiAgCj4gIAkJaWd0X3JlcXVpcmVfcGlwZV9jcmMoZGF0YS5k cm1fZmQpOwo+IC0tIAo+IDIuMTguMAo+IApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwppZ3QtZGV2IG1haWxpbmcgbGlzdAppZ3QtZGV2QGxpc3RzLmZyZWVk ZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZv L2lndC1kZXYK