From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tomasz Figa Subject: Re: [PATCH v2 3/5] drm/rockchip: vop: support plane scale Date: Fri, 3 Jul 2015 16:46:57 +0900 Message-ID: References: <1435313249-4549-1-git-send-email-mark.yao@rock-chips.com> <1435313249-4549-4-git-send-email-mark.yao@rock-chips.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-qk0-f172.google.com (mail-qk0-f172.google.com [209.85.220.172]) by gabe.freedesktop.org (Postfix) with ESMTPS id DDEFC6ED1A for ; Fri, 3 Jul 2015 00:47:19 -0700 (PDT) Received: by qkbp125 with SMTP id p125so68061926qkb.2 for ; Fri, 03 Jul 2015 00:47:19 -0700 (PDT) Received: from mail-qk0-f173.google.com (mail-qk0-f173.google.com. [209.85.220.173]) by mx.google.com with ESMTPSA id d10sm4022475qhc.9.2015.07.03.00.47.17 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 03 Jul 2015 00:47:18 -0700 (PDT) Received: by qkbp125 with SMTP id p125so68061659qkb.2 for ; Fri, 03 Jul 2015 00:47:17 -0700 (PDT) In-Reply-To: <1435313249-4549-4-git-send-email-mark.yao@rock-chips.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Mark Yao Cc: xw@rock-chips.com, zwl@rock-chips.com, "linux-kernel@vger.kernel.org" , "open list:ARM/Rockchip SoC..." , dri-devel , dkm@rock-chips.com, sandy.huang@rock-chips.com, "linux-arm-kernel@lists.infradead.org" List-Id: dri-devel@lists.freedesktop.org SGkgTWFyaywKClBsZWFzZSBzZWUgbXkgY29tbWVudHMgaW5saW5lLgoKT24gRnJpLCBKdW4gMjYs IDIwMTUgYXQgNzowNyBQTSwgTWFyayBZYW8gPG1hcmsueWFvQHJvY2stY2hpcHMuY29tPiB3cm90 ZToKPiBXaW5fZnVsbCBzdXBwb3J0IDEvOCB0byA4IHNjYWxlIGRvd24vdXAgZW5naW5lLCBzdXBw b3J0Cj4gYWxsIGZvcm1hdCBzY2FsZS4KCltzbmlwXQoKPiBAQCAtMzUxLDYgKzQxMiwxNSBAQCBz dGF0aWMgaW5saW5lIHZvaWQgdm9wX21hc2tfd3JpdGVfcmVsYXhlZChzdHJ1Y3Qgdm9wICp2b3As IHVpbnQzMl90IG9mZnNldCwKPiAgICAgICAgIH0KPiAgfQo+Cj4gK3N0YXRpYyBpbmxpbmUgaW50 IF9nZXRfdnNraXBsaW5lcyh1aW50MzJfdCBzcmNoLCB1aW50MzJfdCBkc3RoKQo+ICt7Cj4gKyAg ICAgICBpZiAoc3JjaCA+PSAodWludDMyX3QpKDQgKiBkc3RoICogTUlOX1NDTF9GVF9BRlRFUl9W U0tJUCkpCj4gKyAgICAgICAgICAgICAgIHJldHVybiA0Owo+ICsgICAgICAgZWxzZSBpZiAoc3Jj aCA+PSAodWludDMyX3QpKDIgKiBkc3RoICogTUlOX1NDTF9GVF9BRlRFUl9WU0tJUCkpCj4gKyAg ICAgICAgICAgICAgIHJldHVybiAyOwo+ICsgICAgICAgcmV0dXJuIDE7CgpIb3cgYWJvdXQgcmV3 cml0aW5nIHRoZSBhYm92ZSB0bzoKCiNkZWZpbmUgU0NMX01BWF9WU0tJUExJTkVTIDQKCnVpbnQz Ml90IHZza2lwbGluZXM7Cgpmb3IgKHZza2lwbGluZXMgPSBTQ0xfTUFYX1ZTS0lQTElORVM7IHZz a2lwbGluZXMgPiAxOyB2c2tpcGxpbmVzIC89IDIpCiAgICAgICAgaWYgKHNyY2ggPj0gdnNraXBs aW5lcyAqIGRzdGggKiBNSU5fU0NMX0ZUX0FGVEVSX1ZTS0lQKQogICAgICAgICAgICAgICAgYnJl YWs7CgpyZXR1cm4gdnNraXBsaW5lczsKCm5pdDogSSBiZWxpZXZlIGl0IHdvdWxkIGJlIGJldHRl ciBmb3IgcmVhZGFiaWxpdHkgdG8gbW92ZSB0aGlzCmZ1bmN0aW9uIHRvIG90aGVyIHNjYWxlciBy ZWxhdGVkIGZ1bmN0aW9ucyBiZWxvdy4Kbml0OiBJIGRvbid0IHNlZSBhbnkgZXhpc3RpbmcgZnVu Y3Rpb25zIHdpdGggbmFtZXMgc3RhcnRpbmcgZnJvbSBfLCBzbwp0byBrZWVwIGV4aXN0aW5nIGNv bnZlbnRpb25zLCBob3cgYWJvdXQgY2FsbGluZyB0aGVtIHNjbF8qLCBlLmcuCnNjbF9nZXRfdnNr aXBsaW5lcygpLgoKPiArfQo+ICsKPiAgc3RhdGljIGVudW0gdm9wX2RhdGFfZm9ybWF0IHZvcF9j b252ZXJ0X2Zvcm1hdCh1aW50MzJfdCBmb3JtYXQpCj4gIHsKPiAgICAgICAgIHN3aXRjaCAoZm9y bWF0KSB7Cj4gQEAgLTUzOCw2ICs2MDgsMzEwIEBAIHN0YXRpYyB2b2lkIHZvcF9kaXNhYmxlKHN0 cnVjdCBkcm1fY3J0YyAqY3J0YykKPiAgICAgICAgIHBtX3J1bnRpbWVfcHV0KHZvcC0+ZGV2KTsK PiAgfQo+Cj4gK3N0YXRpYyBpbnQgX3ZvcF9jYWxfeXJnYl9sYl9tb2RlKGludCB3aWR0aCkKPiAr ewo+ICsgICAgICAgaW50IGxiX21vZGUgPSBMQl9SR0JfMTkyMFg1Owo+ICsKPiArICAgICAgIGlm ICh3aWR0aCA+IDI1NjApCj4gKyAgICAgICAgICAgICAgIGxiX21vZGUgPSBMQl9SR0JfMzg0MFgy Owo+ICsgICAgICAgZWxzZSBpZiAod2lkdGggPiAxOTIwKQo+ICsgICAgICAgICAgICAgICBsYl9t b2RlID0gTEJfUkdCXzI1NjBYNDsKCkl0IHdvdWxkIGJlIG1vcmUgcmVhZGFibGUgdG8gYWRkCgpl bHNlCiAgICAgICAgbGJfbW9kZSA9IExCX1JHQl8xOTIwWDU7CgppbnN0ZWFkIG9mIGluaXRpYWxp emluZyB0aGUgdmFyaWFibGUgYXQgZGVjbGFyYXRpb24gdGltZS4KCj4gKwo+ICsgICAgICAgcmV0 dXJuIGxiX21vZGU7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgX3ZvcF9jYWxfY2Jjcl9sYl9tb2Rl KGludCB3aWR0aCkKPiArewo+ICsgICAgICAgaW50IGxiX21vZGUgPSBMQl9ZVVZfMjU2MFg4Owo+ ICsKPiArICAgICAgIGlmICh3aWR0aCA+IDI1NjApCj4gKyAgICAgICAgICAgICAgIGxiX21vZGUg PSBMQl9SR0JfMzg0MFgyOwo+ICsgICAgICAgZWxzZSBpZiAod2lkdGggPiAxOTIwKQo+ICsgICAg ICAgICAgICAgICBsYl9tb2RlID0gTEJfUkdCXzI1NjBYNDsKPiArICAgICAgIGVsc2UgaWYgKHdp ZHRoID4gMTI4MCkKPiArICAgICAgICAgICAgICAgbGJfbW9kZSA9IExCX1lVVl8zODQwWDU7Cj4g Kwo+ICsgICAgICAgcmV0dXJuIGxiX21vZGU7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIF92b3Bf Y2FsX3NjbF9mYWMoc3RydWN0IHZvcCAqdm9wLCBjb25zdCBzdHJ1Y3Qgdm9wX3dpbl9kYXRhICp3 aW4sCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzcmNfdywgdWludDMy X3Qgc3JjX2gsIHVpbnQzMl90IGRzdF93LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg dWludDMyX3QgZHN0X2gsIHVpbnQzMl90IHBpeGVsX2Zvcm1hdCkKPiArewo+ICsgICAgICAgdWlu dDE2X3QgeXJnYl9ob3Jfc2NsX21vZGUgPSBTQ0FMRV9OT05FOwo+ICsgICAgICAgdWludDE2X3Qg eXJnYl92ZXJfc2NsX21vZGUgPSBTQ0FMRV9OT05FOwo+ICsgICAgICAgdWludDE2X3QgY2JyX2hv cl9zY2xfbW9kZSA9IFNDQUxFX05PTkU7Cj4gKyAgICAgICB1aW50MTZfdCBjYnJfdmVyX3NjbF9t b2RlID0gU0NBTEVfTk9ORTsKPiArICAgICAgIHVpbnQxNl90IHlyZ2JfaHNkX21vZGUgPSBTQ0FM RV9ET1dOX0JJTDsKPiArICAgICAgIHVpbnQxNl90IGNicl9oc2RfbW9kZSA9IFNDQUxFX0RPV05f QklMOwo+ICsgICAgICAgdWludDE2X3QgeXJnYl92c2RfbW9kZSA9IFNDQUxFX0RPV05fQklMOwo+ ICsgICAgICAgdWludDE2X3QgY2JyX3ZzZF9tb2RlID0gU0NBTEVfRE9XTl9CSUw7CgpObyBjb2Rl IHNlZW1zIHRvIGJlIGFzc2lnbmluZyB0aGUgNCB2YXJpYWJsZXMgYWJvdmUuIElzIHNvbWUgY29k ZQptaXNzaW5nIG9yIHRoZXkgYXJlIHNpbXBseSBjb25zdGFudHMgYW5kIHRoZXkgKGFuZCBjb2Rl IGNoZWNraW5nIHRoZWlyCnZhbHVlcykgYXJlIG5vdCBuZWNlc3Nhcnk/Cgo+ICsgICAgICAgdWlu dDE2X3QgeXJnYl92c3VfbW9kZSA9IFNDQUxFX1VQX0JJTDsKPiArICAgICAgIHVpbnQxNl90IGNi cl92c3VfbW9kZSA9IFNDQUxFX1VQX0JJTDsKPiArICAgICAgIHVpbnQxNl90IHNjYWxlX3lyZ2Jf eCA9IDEgPDwgU0NMX0ZUX0RFRkFVTFRfRklYUE9JTlRfU0hJRlQ7Cj4gKyAgICAgICB1aW50MTZf dCBzY2FsZV95cmdiX3kgPSAxIDw8IFNDTF9GVF9ERUZBVUxUX0ZJWFBPSU5UX1NISUZUOwo+ICsg ICAgICAgdWludDE2X3Qgc2NhbGVfY2Jjcl94ID0gMSA8PCBTQ0xfRlRfREVGQVVMVF9GSVhQT0lO VF9TSElGVDsKPiArICAgICAgIHVpbnQxNl90IHNjYWxlX2NiY3JfeSA9IDEgPDwgU0NMX0ZUX0RF RkFVTFRfRklYUE9JTlRfU0hJRlQ7Cj4gKyAgICAgICBpbnQgaHN1YiA9IGRybV9mb3JtYXRfaG9y el9jaHJvbWFfc3Vic2FtcGxpbmcocGl4ZWxfZm9ybWF0KTsKPiArICAgICAgIGludCB2c3ViID0g ZHJtX2Zvcm1hdF92ZXJ0X2Nocm9tYV9zdWJzYW1wbGluZyhwaXhlbF9mb3JtYXQpOwo+ICsgICAg ICAgYm9vbCBpc195dXYgPSBpc195dXZfc3VwcG9ydChwaXhlbF9mb3JtYXQpOwo+ICsgICAgICAg dWludDE2X3QgdnNkX3lyZ2JfZ3Q0ID0gMDsKPiArICAgICAgIHVpbnQxNl90IHZzZF95cmdiX2d0 MiA9IDA7Cj4gKyAgICAgICB1aW50MTZfdCB2c2RfY2JyX2d0NCA9IDA7Cj4gKyAgICAgICB1aW50 MTZfdCB2c2RfY2JyX2d0MiA9IDA7Cj4gKyAgICAgICB1aW50MTZfdCB5cmdiX3NyY193ID0gc3Jj X3c7Cj4gKyAgICAgICB1aW50MTZfdCB5cmdiX3NyY19oID0gc3JjX2g7Cj4gKyAgICAgICB1aW50 MTZfdCB5cmdiX2RzdF93ID0gZHN0X3c7Cj4gKyAgICAgICB1aW50MTZfdCB5cmdiX2RzdF9oID0g ZHN0X2g7Cj4gKyAgICAgICB1aW50MTZfdCBjYmNyX3NyY193Owo+ICsgICAgICAgdWludDE2X3Qg Y2Jjcl9zcmNfaDsKPiArICAgICAgIHVpbnQxNl90IGNiY3JfZHN0X3c7Cj4gKyAgICAgICB1aW50 MTZfdCBjYmNyX2RzdF9oOwo+ICsgICAgICAgdWludDMyX3QgdmRtdWx0Owo+ICsgICAgICAgdWlu dDE2X3QgbGJfbW9kZTsKClRoZSBhbW91bnQgb2YgbG9jYWwgdmFyaWFibGVzIHN1Z2dlc3RzIHRo YXQgdGhpcyBmdW5jdGlvbiBuZWVkcyB0byBiZQpzcGxpdCBpbnRvIHNldmVyYWwgc21hbGxlciBv bmVzLgoKQnkgdGhlIHdheSwgZG8geW91IG5lZWQgdG8gaW5pdGlhbGl6ZSBhbGwgb2YgdGhlbT8g R0NDIHdpbGwgYXQgbGVhc3QKd2FybiAoaWYgbm90IGVycm9yIG91dCkgaWYgYW4gdW5pdGlhbGl6 ZWQgdmFyaWFibGUgaXMgcmVmZXJlbmNlZCwgc28KaXQncyBlbm91Z2ggdG8gbWFrZSBzdXJlIHRo YXQgdGhlIGNvZGUgY29ycmVjdGx5IGNvdmVycyBhbGwgYnJhbmNoCnBhdGhzLCB3aGljaCBpcyBh Y3R1YWxseSBiZXR0ZXIgZm9yIHRoZSBjb2RlIHRoYW4gdG8gcmVseSBvbiBkZWZhdWx0CnZhbHVl LgoKPiArCj4gKyAgICAgICBpZiAoKCh5cmdiX2RzdF93IDw8IDMpIDw9IHlyZ2Jfc3JjX3cpIHx8 Cj4gKyAgICAgICAgICAgKCh5cmdiX2RzdF9oIDw8IDMpIDw9IHlyZ2Jfc3JjX2gpIHx8CgpIbW0s IGlmIHRoaXMgaXMgZW5mb3JjaW5nIHRoZSBtYXhpbXVtIGRvd25zY2FsaW5nIGZhY3RvciwgdGhl bgp3b3VsZG4ndCBpdCBiZSBtb3JlIHJlYWRhYmxlIHRvIHdyaXRlIGxpa2UgdGhpczoKCnlyZ2Jf c3JjX3cgPj0gOCAqIHlyZ2JfZHN0X3cKCkFsc28gaXMgPj0gY29ycmVjdCBoZXJlPyBJcyB0aGUg bWF4aW11bSBmYWN0b3IgbGVzcyB0aGFuIDg/Cgo+ICsgICAgICAgICAgIHlyZ2JfZHN0X3cgPiAz ODQwKSB7CgpJJ2Qgc3VnZ2VzdCBtb3ZpbmcgdGhpcyB0byBzZXBhcmF0ZSBpZiB3aXRoIGRpZmZl cmVudCBlcnJvciBtZXNzYWdlLgoKPiArICAgICAgICAgICAgICAgRFJNX0VSUk9SKCJ5cmdiIHNj YWxlIGV4Y2VlZCA4LHNyY1slZHglZF0gZHN0WyVkeCVkXVxuIiwKPiArICAgICAgICAgICAgICAg ICAgICAgICAgIHlyZ2Jfc3JjX3csIHlyZ2Jfc3JjX2gsIHlyZ2JfZHN0X3csIHlyZ2JfZHN0X2gp OwoKSG1tLCBtYXliZSAiTWF4aW11bSBkb3duc2NhbGluZyBmYWN0b3IgKDgpIGV4Y2VlZGVkIiBh bmQgdGhlbiBmb3IgdGhlCmRlc3RpbmF0aW9uIHdpZHRoIGNoZWNrICJNYXhpbXVtIGRlc3RpbmF0 aW9uIHdpZHRoICgzODQwKSBleGNlZWRlZCI/Cgo+ICsgICAgICAgICAgICAgICByZXR1cm47Cj4g KyAgICAgICB9Cj4gKwo+ICsgICAgICAgaWYgKHlyZ2Jfc3JjX3cgPCB5cmdiX2RzdF93KQo+ICsg ICAgICAgICAgICAgICB5cmdiX2hvcl9zY2xfbW9kZSA9IFNDQUxFX1VQOwo+ICsgICAgICAgZWxz ZSBpZiAoeXJnYl9zcmNfdyA+IHlyZ2JfZHN0X3cpCj4gKyAgICAgICAgICAgICAgIHlyZ2JfaG9y X3NjbF9tb2RlID0gU0NBTEVfRE9XTjsKPiArICAgICAgIGVsc2UKPiArICAgICAgICAgICAgICAg eXJnYl9ob3Jfc2NsX21vZGUgPSBTQ0FMRV9OT05FOwoKVGhpcyBsb29rcyBsaWtlIGEgZ29vZCBj YW5kaWRhdGUgZm9yIGEgaGVscGVyIGZ1bmN0aW9uOgoKZW51bSBzY2xfbW9kZSBzY2xfZ2V0X3Nj bF9tb2RlKHVpbnQzMl90IHNyYywgdWludDMyX3QgZHN0KQp7CiAgICAgICAgaWYgKHNyYyA8IGRz dCkKICAgICAgICAgICAgICAgIHJldHVybiBTQ0FMRV9VUDsKICAgICAgICBlbHNlIGlmIChzcmMg PiBkc3QpCiAgICAgICAgICAgICAgICByZXR1cm4gU0NBTEVfRE9XTjsKICAgICAgICBlbHNlCiAg ICAgICAgICAgICAgICByZXR1cm4gU0NBTEVfTk9ORTsKfQoKPiArCj4gKyAgICAgICBpZiAoeXJn Yl9zcmNfaCA8IHlyZ2JfZHN0X2gpCj4gKyAgICAgICAgICAgICAgIHlyZ2JfdmVyX3NjbF9tb2Rl ID0gU0NBTEVfVVA7Cj4gKyAgICAgICBlbHNlIGlmICh5cmdiX3NyY19oICA+IHlyZ2JfZHN0X2gp Cj4gKyAgICAgICAgICAgICAgIHlyZ2JfdmVyX3NjbF9tb2RlID0gU0NBTEVfRE9XTjsKPiArICAg ICAgIGVsc2UKPiArICAgICAgICAgICAgICAgeXJnYl92ZXJfc2NsX21vZGUgPSBTQ0FMRV9OT05F OwoKQW5kIG5vdyB0aGUgaGVscGVyIGZ1bmN0aW9uIGNvdWxkIGJlIHVzZWQgaGVyZSBhcyB3ZWxs LgoKPiArCj4gKyAgICAgICBpZiAoaXNfeXV2KSB7Cj4gKyAgICAgICAgICAgICAgIGNiY3Jfc3Jj X3cgPSBzcmNfdyAvIGhzdWI7Cj4gKyAgICAgICAgICAgICAgIGNiY3Jfc3JjX2ggPSBzcmNfaCAv IHZzdWI7Cj4gKyAgICAgICAgICAgICAgIGNiY3JfZHN0X3cgPSBkc3RfdzsKPiArICAgICAgICAg ICAgICAgY2Jjcl9kc3RfaCA9IGRzdF9oOwo+ICsgICAgICAgICAgICAgICBpZiAoKGNiY3JfZHN0 X3cgPDwgMykgPD0gY2Jjcl9zcmNfdyB8fAo+ICsgICAgICAgICAgICAgICAgICAgKGNiY3JfZHN0 X2ggPDwgMykgPD0gY2Jjcl9zcmNfaCB8fAo+ICsgICAgICAgICAgICAgICAgICAgY2Jjcl9zcmNf dyA+IDM4NDAgfHwKPiArICAgICAgICAgICAgICAgICAgIGNiY3Jfc3JjX3cgPT0gMCkKPiArICAg ICAgICAgICAgICAgICAgICAgICBEUk1fRVJST1IoImNiY3Igc2NhbGUgZmFpbGVkLHNyY1slZHgl ZF0gZHN0WyVkeCVkXVxuIiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Jj cl9zcmNfdywgY2Jjcl9zcmNfaCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y2Jjcl9kc3RfdywgY2Jjcl9kc3RfaCk7CgpJIGJlbGlldmUgeW91IHNob3VsZCBoYXZlIHRob3Nl IGFscmVhZHkgZW5mb3JjZWQgYnkgWSBwbGFuZS4gQWxzbyBpdApkb2Vzbid0IHNlZW0gcmVhc29u YWJsZSB0byBldmVyIGdldCAwIHNyYyB3aWR0aCBhcyBhbiBhcmd1bWVudCBmb3IKdGhpcyBmdW5j dGlvbi4KCj4gKyAgICAgICAgICAgICAgIGlmIChjYmNyX3NyY193IDwgY2Jjcl9kc3RfdykKPiAr ICAgICAgICAgICAgICAgICAgICAgICBjYnJfaG9yX3NjbF9tb2RlID0gU0NBTEVfVVA7Cj4gKyAg ICAgICAgICAgICAgIGVsc2UgaWYgKGNiY3Jfc3JjX3cgPiBjYmNyX2RzdF93KQo+ICsgICAgICAg ICAgICAgICAgICAgICAgIGNicl9ob3Jfc2NsX21vZGUgPSBTQ0FMRV9ET1dOOwo+ICsKPiArICAg ICAgICAgICAgICAgaWYgKGNiY3Jfc3JjX2ggPCBjYmNyX2RzdF9oKQo+ICsgICAgICAgICAgICAg ICAgICAgICAgIGNicl92ZXJfc2NsX21vZGUgPSBTQ0FMRV9VUDsKPiArICAgICAgICAgICAgICAg ZWxzZSBpZiAoY2Jjcl9zcmNfaCA+IGNiY3JfZHN0X2gpCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgY2JyX3Zlcl9zY2xfbW9kZSA9IFNDQUxFX0RPV047CgpBcmVuJ3QgdGhlIHNjbF9tb2RlcyBm b3IgQ2JDciBwbGFuZXMgYWx3YXlzIHRoZSBzYW1lIGFzIGZvciBZIHBsYW5lPwoKPiArICAgICAg IH0KPiArICAgICAgIC8qCj4gKyAgICAgICAgKiBsaW5lIGJ1ZmZlciBtb2RlCj4gKyAgICAgICAg Ki8KPiArICAgICAgIGlmIChpc195dXYpIHsKPiArICAgICAgICAgICAgICAgaWYgKHlyZ2JfaG9y X3NjbF9tb2RlID09IFNDQUxFX0RPV04gJiYgeXJnYl9kc3RfdyA+IDI1NjApCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgbGJfbW9kZSA9IExCX1JHQl8zODQwWDI7Cj4gKyAgICAgICAgICAgICAg IGVsc2UgaWYgKGNicl9ob3Jfc2NsX21vZGUgPT0gU0NBTEVfRE9XTikKPiArICAgICAgICAgICAg ICAgICAgICAgICBsYl9tb2RlID0gX3ZvcF9jYWxfY2Jjcl9sYl9tb2RlKGNiY3JfZHN0X3cpOwo+ ICsgICAgICAgICAgICAgICBlbHNlCj4gKyAgICAgICAgICAgICAgICAgICAgICAgbGJfbW9kZSA9 IF92b3BfY2FsX2NiY3JfbGJfbW9kZShjYmNyX3NyY193KTsKPiArICAgICAgIH0gZWxzZSB7Cj4g KyAgICAgICAgICAgICAgIGlmICh5cmdiX2hvcl9zY2xfbW9kZSA9PSBTQ0FMRV9ET1dOKQo+ICsg ICAgICAgICAgICAgICAgICAgICAgIGxiX21vZGUgPSBfdm9wX2NhbF95cmdiX2xiX21vZGUoeXJn Yl9kc3Rfdyk7Cj4gKyAgICAgICAgICAgICAgIGVsc2UKPiArICAgICAgICAgICAgICAgICAgICAg ICBsYl9tb2RlID0gX3ZvcF9jYWxfeXJnYl9sYl9tb2RlKHlyZ2Jfc3JjX3cpOwo+ICsgICAgICAg fQoKSSBndWVzcyB0aGlzIGNvdWxkIGJlIG1vdmVkIGludG8gYSBoZWxwZXIgZnVuY3Rpb24uCgo+ ICsKPiArICAgICAgIHN3aXRjaCAobGJfbW9kZSkgewo+ICsgICAgICAgY2FzZSBMQl9ZVVZfMzg0 MFg1Ogo+ICsgICAgICAgY2FzZSBMQl9ZVVZfMjU2MFg4Ogo+ICsgICAgICAgY2FzZSBMQl9SR0Jf MTkyMFg1Ogo+ICsgICAgICAgY2FzZSBMQl9SR0JfMTI4MFg4Ogo+ICsgICAgICAgICAgICAgICB5 cmdiX3ZzdV9tb2RlID0gU0NBTEVfVVBfQklDOwo+ICsgICAgICAgICAgICAgICBjYnJfdnN1X21v ZGUgID0gU0NBTEVfVVBfQklDOwoKSSBtaWdodCBiZSBvdmVybG9va2luZyBzb21ldGhpbmcsIGJ1 dCBkb24ndCAgeXJnYl92c3VfbW9kZSBhbmQKY2JyX3ZzdV9tb2RlIGFsd2F5cyBoYXZlIHRoZSBz YW1lIHZhbHVlcz8KCj4gKyAgICAgICAgICAgICAgIGJyZWFrOwo+ICsgICAgICAgY2FzZSBMQl9S R0JfMzg0MFgyOgo+ICsgICAgICAgICAgICAgICBpZiAoeXJnYl92ZXJfc2NsX21vZGUgIT0gU0NB TEVfTk9ORSkKPiArICAgICAgICAgICAgICAgICAgICAgICBEUk1fRVJST1IoIkVSUk9SIDogbm90 IGFsbG93IHlyZ2IgdmVyIHNjYWxlXG4iKTsKPiArICAgICAgICAgICAgICAgaWYgKGNicl92ZXJf c2NsX21vZGUgIT0gU0NBTEVfTk9ORSkKPiArICAgICAgICAgICAgICAgICAgICAgICBEUk1fRVJS T1IoIkVSUk9SIDogbm90IGFsbG93IGNiY3IgdmVyIHNjYWxlXG4iKTsKClNob3VsZG4ndCB0aGVz ZSByZXR1cm4gZXJyb3I/IEFsc28gaXQgd291bGQgYmUgbmljZSB0byBtYWtlIHRoZSBlcnJvcgpt ZXNzYWdlcyBtb3JlIGhlbHBmdWwuCgo+ICsgICAgICAgICAgICAgICBicmVhazsKPiArICAgICAg IGNhc2UgTEJfUkdCXzI1NjBYNDoKPiArICAgICAgICAgICAgICAgeXJnYl92c3VfbW9kZSA9IFND QUxFX1VQX0JJTDsKPiArICAgICAgICAgICAgICAgY2JyX3ZzdV9tb2RlICA9IFNDQUxFX1VQX0JJ TDsKPiArICAgICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICBkZWZhdWx0Ogo+ICsgICAgICAg ICAgICAgICBEUk1fRVJST1IoInVuc3VwcG9ydCBsYl9tb2RlOiVkXG4iLCBsYl9tb2RlKTsKPiAr ICAgICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICB9CgpBbnl3YXksIHRoaXMgd2hvbGUgc3dp dGNoIGlzIGEgY2FuZGlkYXRlIGZvciBhIGhlbHBlciBmdW5jdGlvbi4KCj4gKyAgICAgICAvKgo+ ICsgICAgICAgICogKDEuMSlZUkdCIEhPUiBTQ0FMRSBGQUNUT1IKPiArICAgICAgICAqLwo+ICsg ICAgICAgc3dpdGNoICh5cmdiX2hvcl9zY2xfbW9kZSkgewo+ICsgICAgICAgY2FzZSBTQ0FMRV9V UDoKPiArICAgICAgICAgICAgICAgc2NhbGVfeXJnYl94ID0gR0VUX1NDTF9GVF9CSUMoeXJnYl9z cmNfdywgeXJnYl9kc3Rfdyk7Cj4gKyAgICAgICAgICAgICAgIGJyZWFrOwo+ICsgICAgICAgY2Fz ZSBTQ0FMRV9ET1dOOgo+ICsgICAgICAgICAgICAgICBzd2l0Y2ggKHlyZ2JfaHNkX21vZGUpIHsK PiArICAgICAgICAgICAgICAgY2FzZSBTQ0FMRV9ET1dOX0JJTDoKPiArICAgICAgICAgICAgICAg ICAgICAgICBzY2FsZV95cmdiX3ggPSBHRVRfU0NMX0ZUX0JJTElfRE4oeXJnYl9zcmNfdywKPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg eXJnYl9kc3Rfdyk7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICAg ICAgICAgIGNhc2UgU0NBTEVfRE9XTl9BVkc6Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgc2Nh bGVfeXJnYl94ID0gR0VUX1NDTF9GVF9BVlJHKHlyZ2Jfc3JjX3csIHlyZ2JfZHN0X3cpOwo+ICsg ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwo+ICsgICAgICAgICAgICAgICBkZWZhdWx0Ogo+ ICsgICAgICAgICAgICAgICAgICAgICAgIERSTV9FUlJPUigidW5zdXBwb3J0IHlyZ2JfaHNkX21v ZGU6JWRcbiIsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlyZ2JfaHNkX21v ZGUpOwoKU2hvdWxkbid0IHRoaXMgcmV0dXJuIGFuIGVycm9yPwoKPiArICAgICAgICAgICAgICAg ICAgICAgICBicmVhazsKPiArICAgICAgICAgICAgICAgfQo+ICsgICAgICAgICAgICAgICBicmVh azsKPiArICAgICAgIH0KCkRpdHRvLgoKPiArCj4gKyAgICAgICAvKgo+ICsgICAgICAgICogKDEu MilZUkdCIFZFUiBTQ0FMRSBGQUNUT1IKPiArICAgICAgICAqLwo+ICsgICAgICAgc3dpdGNoICh5 cmdiX3Zlcl9zY2xfbW9kZSkgewo+ICsgICAgICAgY2FzZSBTQ0FMRV9VUDoKPiArICAgICAgICAg ICAgICAgc3dpdGNoICh5cmdiX3ZzdV9tb2RlKSB7Cj4gKyAgICAgICAgICAgICAgIGNhc2UgU0NB TEVfVVBfQklMOgo+ICsgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlX3lyZ2JfeSA9IEdFVF9T Q0xfRlRfQklMSV9VUCh5cmdiX3NyY19oLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5cmdiX2RzdF9oKTsKPiArICAgICAgICAgICAg ICAgICAgICAgICBicmVhazsKPiArICAgICAgICAgICAgICAgY2FzZSBTQ0FMRV9VUF9CSUM6Cj4g KyAgICAgICAgICAgICAgICAgICAgICAgaWYgKHlyZ2Jfc3JjX2ggPCAzKQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgRFJNX0VSUk9SKCJ5cmdiX3NyY19oIHNob3VsZCBncmVhdGVy IHRoYW4gM1xuIik7CgpTaG91bGRuJ3QgdGhpcyByZXR1cm4gYW4gZXJyb3I/Cgo+ICsgICAgICAg ICAgICAgICAgICAgICAgIHNjYWxlX3lyZ2JfeSA9IEdFVF9TQ0xfRlRfQklDKHlyZ2Jfc3JjX2gs IHlyZ2JfZHN0X2gpOwo+ICsgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwo+ICsgICAgICAg ICAgICAgICBkZWZhdWx0Ogo+ICsgICAgICAgICAgICAgICAgICAgICAgIERSTV9FUlJPUigidW5z dXBwb3J0IHlyZ2JfdnN1X21vZGU6JWRcbiIsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHlyZ2JfdnN1X21vZGUpOwoKU2hvdWxkbid0IHRoaXMgcmV0dXJuIGFuIGVycm9yPwoK PiArICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKPiArICAgICAgICAgICAgICAgfQo+ICsg ICAgICAgICAgICAgICBicmVhazsKPiArICAgICAgIGNhc2UgU0NBTEVfRE9XTjoKPiArICAgICAg ICAgICAgICAgc3dpdGNoICh5cmdiX3ZzZF9tb2RlKSB7Cj4gKyAgICAgICAgICAgICAgIGNhc2Ug U0NBTEVfRE9XTl9CSUw6Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgdmRtdWx0ID0gX2dldF92 c2tpcGxpbmVzKHlyZ2Jfc3JjX2gsIHlyZ2JfZHN0X2gpOwo+ICsgICAgICAgICAgICAgICAgICAg ICAgIHNjYWxlX3lyZ2JfeSA9IEdFVF9TQ0xfRlRfQklMSV9ETl9WU0tJUCh5cmdiX3NyY19oLAo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB5cmdiX2RzdF9oLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZG11bHQpOwo+ICsgICAgICAgICAgICAgICAg ICAgICAgIGlmICh2ZG11bHQgPT0gNCkgewo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdnNkX3lyZ2JfZ3Q0ID0gMTsKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZz ZF95cmdiX2d0MiA9IDA7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2ZG11 bHQgPT0gMikgewo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnNkX3lyZ2JfZ3Q0 ID0gMDsKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZzZF95cmdiX2d0MiA9IDE7 Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgfQoKSG93IGFib3V0IHNvbWV0aGluZyBsaWtlIHRo aXM6Cgp2c2RfeXJnYl9ndDQgPSAodmRtdWx0ID09IDQpOwp2c2RfeXJnYl9ndDIgPSAodmRtdWx0 ID09IDIpOwoKPiArICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKPiArICAgICAgICAgICAg ICAgY2FzZSBTQ0FMRV9ET1dOX0FWRzoKPiArICAgICAgICAgICAgICAgICAgICAgICBzY2FsZV95 cmdiX3kgPSBHRVRfU0NMX0ZUX0FWUkcoeXJnYl9zcmNfaCwgeXJnYl9kc3RfaCk7Cj4gKyAgICAg ICAgICAgICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICAgICAgICAgIGRlZmF1bHQ6Cj4gKyAg ICAgICAgICAgICAgICAgICAgICAgRFJNX0VSUk9SKCJ1bnN1cHBvcnQgeXJnYl92c2RfbW9kZTol ZFxuIiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeXJnYl92c2RfbW9kZSk7 CgpTaG91bGRuJ3QgdGhpcyByZXR1cm4gYW4gZXJyb3I/Cgo+ICsgICAgICAgICAgICAgICAgICAg ICAgIGJyZWFrOwo+ICsgICAgICAgICAgICAgICB9Cj4gKyAgICAgICAgICAgICAgIGJyZWFrOwo+ ICsgICAgICAgfQoKQW5vdGhlciBjYW5kaWRhdGUgZm9yIHNlcGFyYXRlIGhlbHBlciBmdW5jdGlv bi4KCj4gKyAgICAgICAvKgo+ICsgICAgICAgICogKDIuMSlDQkNSIEhPUiBTQ0FMRSBGQUNUT1IK PiArICAgICAgICAqLwo+ICsgICAgICAgc3dpdGNoIChjYnJfaG9yX3NjbF9tb2RlKSB7Cj4gKyAg ICAgICBjYXNlIFNDQUxFX1VQOgo+ICsgICAgICAgICAgICAgICBzY2FsZV9jYmNyX3ggPSBHRVRf U0NMX0ZUX0JJQyhjYmNyX3NyY193LCBjYmNyX2RzdF93KTsKPiArICAgICAgICAgICAgICAgYnJl YWs7Cj4gKyAgICAgICBjYXNlIFNDQUxFX0RPV046Cj4gKyAgICAgICAgICAgICAgIHN3aXRjaCAo Y2JyX2hzZF9tb2RlKSB7Cj4gKyAgICAgICAgICAgICAgIGNhc2UgU0NBTEVfRE9XTl9CSUw6Cj4g KyAgICAgICAgICAgICAgICAgICAgICAgc2NhbGVfY2Jjcl94ID0gR0VUX1NDTF9GVF9CSUxJX0RO KGNiY3Jfc3JjX3csCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNiY3JfZHN0X3cpOwo+ICsgICAgICAgICAgICAgICAgICAgICAgIGJy ZWFrOwo+ICsgICAgICAgICAgICAgICBjYXNlIFNDQUxFX0RPV05fQVZHOgo+ICsgICAgICAgICAg ICAgICAgICAgICAgIHNjYWxlX2NiY3JfeCA9IEdFVF9TQ0xfRlRfQVZSRyhjYmNyX3NyY193LCBj YmNyX2RzdF93KTsKPiArICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKPiArICAgICAgICAg ICAgICAgZGVmYXVsdDoKPiArICAgICAgICAgICAgICAgICAgICAgICBEUk1fRVJST1IoInVuc3Vw cG9ydCBjYnJfaHNkX21vZGU6JWRcbiIsIGNicl9oc2RfbW9kZSk7CgpFcnJvci4KCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICAgICAgICAgIH0KPiArICAgICAgICAg ICAgICAgYnJlYWs7Cj4gKyAgICAgICB9CgpJc24ndCB0aGlzIHN3aXRjaCBleGFjdGx5IHRoZSBz YW1lIGFzIGZvciBZIHBsYW5lIGp1c3Qgd2l0aCBkaWZmZXJlbnQKd2lkdGhzIHVzZWQ/IEFsc28s IHdvdWxkbid0IHRoZSB2YWx1ZXMgZm9yIENiQ3IgcGxhbmUgYmUgdGhlIHNhbWUgYXMKZm9yIFkg cGxhbmU/Cgo+ICsKPiArICAgICAgIC8qCj4gKyAgICAgICAgKiAoMi4yKUNCQ1IgVkVSIFNDQUxF IEZBQ1RPUgo+ICsgICAgICAgICovCj4gKyAgICAgICBzd2l0Y2ggKGNicl92ZXJfc2NsX21vZGUp IHsKPiArICAgICAgIGNhc2UgU0NBTEVfVVA6Cj4gKyAgICAgICAgICAgICAgIHN3aXRjaCAoY2Jy X3ZzdV9tb2RlKSB7Cj4gKyAgICAgICAgICAgICAgIGNhc2UgU0NBTEVfVVBfQklMOgo+ICsgICAg ICAgICAgICAgICAgICAgICAgIHNjYWxlX2NiY3JfeSA9IEdFVF9TQ0xfRlRfQklMSV9VUChjYmNy X3NyY19oLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjYmNyX2RzdF9oKTsKPiArICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK PiArICAgICAgICAgICAgICAgY2FzZSBTQ0FMRV9VUF9CSUM6Cj4gKyAgICAgICAgICAgICAgICAg ICAgICAgaWYgKGNiY3Jfc3JjX2ggPCAzKQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRFJNX0VSUk9SKCJjYmNyX3NyY19oIG5lZWQgZ3JlYXRlciB0aGFuIDMgIVxuIik7Cj4gKyAg ICAgICAgICAgICAgICAgICAgICAgc2NhbGVfY2Jjcl95ID0gR0VUX1NDTF9GVF9CSUMoY2Jjcl9z cmNfaCwgY2Jjcl9kc3RfaCk7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cj4gKyAg ICAgICAgICAgICAgIGRlZmF1bHQ6Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgRFJNX0VSUk9S KCJ1bnN1cHBvcnQgY2JyX3ZzdV9tb2RlOiVkXG4iLCBjYnJfdnN1X21vZGUpOwoKRXJyb3IuCgo+ ICsgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwo+ICsgICAgICAgICAgICAgICB9Cj4gKyAg ICAgICAgICAgICAgIGJyZWFrOwo+ICsgICAgICAgY2FzZSBTQ0FMRV9ET1dOOgo+ICsgICAgICAg ICAgICAgICBzd2l0Y2ggKGNicl92c2RfbW9kZSkgewo+ICsgICAgICAgICAgICAgICBjYXNlIFND QUxFX0RPV05fQklMOgo+ICsgICAgICAgICAgICAgICAgICAgICAgIHZkbXVsdCA9IF9nZXRfdnNr aXBsaW5lcyhjYmNyX3NyY19oLCBjYmNyX2RzdF9oKTsKPiArICAgICAgICAgICAgICAgICAgICAg ICBzY2FsZV9jYmNyX3kgPSBHRVRfU0NMX0ZUX0JJTElfRE5fVlNLSVAoY2Jjcl9zcmNfaCwKPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY2Jjcl9kc3RfaCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmRtdWx0KTsKPiArICAgICAgICAgICAgICAgICAg ICAgICBpZiAodmRtdWx0ID09IDQpIHsKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHZzZF9jYnJfZ3Q0ID0gMTsKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZzZF9j YnJfZ3QyID0gMDsKPiArICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZkbXVsdCA9 PSAyKSB7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2c2RfY2JyX2d0NCA9IDA7 Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2c2RfY2JyX2d0MiA9IDE7Cj4gKyAg ICAgICAgICAgICAgICAgICAgICAgfQo+ICsgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwo+ ICsgICAgICAgICAgICAgICBjYXNlIFNDQUxFX0RPV05fQVZHOgo+ICsgICAgICAgICAgICAgICAg ICAgICAgIHNjYWxlX2NiY3JfeSA9IEdFVF9TQ0xfRlRfQVZSRyhjYmNyX3NyY19oLCBjYmNyX2Rz dF9oKTsKPiArICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKPiArICAgICAgICAgICAgICAg ZGVmYXVsdDoKPiArICAgICAgICAgICAgICAgICAgICAgICBEUk1fRVJST1IoInVuc3VwcG9ydCBj YnJfdnNkX21vZGU6JWRcbiIsIGNicl92c2RfbW9kZSk7Cj4gKyAgICAgICAgICAgICAgICAgICAg ICAgYnJlYWs7Cj4gKyAgICAgICAgICAgICAgIH0KPiArICAgICAgICAgICAgICAgYnJlYWs7Cj4g KyAgICAgICB9CgpBZ2FpbiwgdGhpcyBsb29rcyBsaWtlIHRoZSB2YWx1ZXMgZm9yIENiQ3Igd291 bGQgYmUgdGhlIHNhbWUgYXMgZm9yIFkuCkFyZSB0aGVyZSBhY3R1YWxseSBjYXNlcyB3aGVuIHRo ZXkgZGlmZmVyPwoKPiArCj4gKyAgICAgICBWT1BfU0NMX1NFVCh2b3AsIHdpbiwgeXJnYl9ob3Jf c2NsX21vZGUsIHlyZ2JfaG9yX3NjbF9tb2RlKTsKPiArICAgICAgIFZPUF9TQ0xfU0VUKHZvcCwg d2luLCB5cmdiX3Zlcl9zY2xfbW9kZSwgeXJnYl92ZXJfc2NsX21vZGUpOwo+ICsgICAgICAgVk9Q X1NDTF9TRVQodm9wLCB3aW4sIGNicl9ob3Jfc2NsX21vZGUsIGNicl9ob3Jfc2NsX21vZGUpOwo+ ICsgICAgICAgVk9QX1NDTF9TRVQodm9wLCB3aW4sIGNicl92ZXJfc2NsX21vZGUsIGNicl92ZXJf c2NsX21vZGUpOwo+ICsgICAgICAgVk9QX1NDTF9TRVQodm9wLCB3aW4sIGxiX21vZGUsIGxiX21v ZGUpOwo+ICsgICAgICAgVk9QX1NDTF9TRVQodm9wLCB3aW4sIHlyZ2JfaHNkX21vZGUsIHlyZ2Jf aHNkX21vZGUpOwo+ICsgICAgICAgVk9QX1NDTF9TRVQodm9wLCB3aW4sIGNicl9oc2RfbW9kZSwg Y2JyX2hzZF9tb2RlKTsKPiArICAgICAgIFZPUF9TQ0xfU0VUKHZvcCwgd2luLCB5cmdiX3ZzZF9t b2RlLCB5cmdiX3ZzZF9tb2RlKTsKPiArICAgICAgIFZPUF9TQ0xfU0VUKHZvcCwgd2luLCBjYnJf dnNkX21vZGUsIGNicl92c2RfbW9kZSk7Cj4gKyAgICAgICBWT1BfU0NMX1NFVCh2b3AsIHdpbiwg eXJnYl92c3VfbW9kZSwgeXJnYl92c3VfbW9kZSk7Cj4gKyAgICAgICBWT1BfU0NMX1NFVCh2b3As IHdpbiwgY2JyX3ZzdV9tb2RlLCBjYnJfdnN1X21vZGUpOwo+ICsgICAgICAgVk9QX1NDTF9TRVQo dm9wLCB3aW4sIHNjYWxlX3lyZ2JfeCwgc2NhbGVfeXJnYl94KTsKPiArICAgICAgIFZPUF9TQ0xf U0VUKHZvcCwgd2luLCBzY2FsZV95cmdiX3ksIHNjYWxlX3lyZ2JfeSk7Cj4gKyAgICAgICBWT1Bf U0NMX1NFVCh2b3AsIHdpbiwgdnNkX3lyZ2JfZ3Q0LCB2c2RfeXJnYl9ndDQpOwo+ICsgICAgICAg Vk9QX1NDTF9TRVQodm9wLCB3aW4sIHZzZF95cmdiX2d0MiwgdnNkX3lyZ2JfZ3QyKTsKPiArICAg ICAgIFZPUF9TQ0xfU0VUKHZvcCwgd2luLCBzY2FsZV9jYmNyX3gsIHNjYWxlX2NiY3JfeCk7Cj4g KyAgICAgICBWT1BfU0NMX1NFVCh2b3AsIHdpbiwgc2NhbGVfY2Jjcl95LCBzY2FsZV9jYmNyX3kp Owo+ICsgICAgICAgVk9QX1NDTF9TRVQodm9wLCB3aW4sIHZzZF9jYnJfZ3Q0LCB2c2RfY2JyX2d0 NCk7Cj4gKyAgICAgICBWT1BfU0NMX1NFVCh2b3AsIHdpbiwgdnNkX2Nicl9ndDIsIHZzZF9jYnJf Z3QyKTsKCklmIHlvdSBzcGxpdCB0aGlzIGZ1bmN0aW9uIGludG8gc21hbGxlciBvbmVzLCB5b3Ug cHJvYmFibHkgZG9uJ3Qgd2FudAp0byBrZWVwIGFsbCB0aGUgd3JpdGVzIGxpa2UgaGVyZSBpbiBv bmUgcGxhY2UsIGJ1dCByYXRoZXIgbWFrZSB0aGUKc21hbGxlciBmdW5jdGlvbnMgd3JpdGUgcGFy dGljdWxhciByZWdpc3RlcnMgYWZ0ZXIgY2FsY3VsYXRpbmcgdGhlaXIKdmFsdWVzLgoKPiArfQo+ ICsKPiAgLyoKPiAgICogQ2FsbGVyIG11c3QgaG9sZCB2c3luY19tdXRleC4KPiAgICovCj4gQEAg LTYyNCw2ICs5OTgsOCBAQCBzdGF0aWMgaW50IHZvcF91cGRhdGVfcGxhbmVfZXZlbnQoc3RydWN0 IGRybV9wbGFuZSAqcGxhbmUsCj4gICAgICAgICAgICAgICAgIC55MiA9IGNydGMtPm1vZGUudmRp c3BsYXksCj4gICAgICAgICB9Owo+ICAgICAgICAgYm9vbCBjYW5fcG9zaXRpb24gPSBwbGFuZS0+ dHlwZSAhPSBEUk1fUExBTkVfVFlQRV9QUklNQVJZOwo+ICsgICAgICAgaW50IG1pbl9zY2FsZSA9 IHdpbi0+cGh5LT5zY2wgPyAweDAyMDAwIDogRFJNX1BMQU5FX0hFTFBFUl9OT19TQ0FMSU5HOwo+ ICsgICAgICAgaW50IG1heF9zY2FsZSA9IHdpbi0+cGh5LT5zY2wgPyAweDgwMDAwIDogRFJNX1BM QU5FX0hFTFBFUl9OT19TQ0FMSU5HOwoKSG1tLCBJIHdvbmRlciBpZiB0aGVyZSBhcmVuJ3QgbWF5 YmUgc29tZSBoZWxwZXJzIHRvIGdlbmVyYXRlIGZpeGVkCnBvaW50IHZhbHVlcyBpbiB0aGUga2Vy bmVsIGluIGEgcmVhZGFibGUgd2F5LiBJZiBub3QsIG1heWJlIHNvbWV0aGluZwpsaWtlIHRoaXMg d291bGQgZG86CgojZGVmaW5lIEZSQUNfMTZfMTYobXVsdCwgZGl2KSAgICAoKChtdWx0KSA8PCAx NikgLyAoZGl2KSkKCmFuZCB0aGVuIHlvdSB3b3VsZCBqdXN0IHVzZQoKRlJBQ18xNl8xNigxLCA4 KSBhbmQgRlJBQ18xNl8xNig4LCAxKSBmb3IgbWluIGFuZCBtYXggc2NhbGUgcmVzcGVjdGl2ZWx5 LgoKPgo+ICAgICAgICAgaWYgKGRybV9mb3JtYXRfbnVtX3BsYW5lcyhmYi0+cGl4ZWxfZm9ybWF0 KSA+IDIpIHsKPiAgICAgICAgICAgICAgICAgRFJNX0VSUk9SKCJ1bnN1cHBvcnQgbW9yZSB0aGFu IDIgcGxhbmUgZm9ybWF0WyUwOHhdXG4iLAo+IEBAIC02MzMsOCArMTAwOSw4IEBAIHN0YXRpYyBp bnQgdm9wX3VwZGF0ZV9wbGFuZV9ldmVudChzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPgo+ICAg ICAgICAgcmV0ID0gZHJtX3BsYW5lX2hlbHBlcl9jaGVja191cGRhdGUocGxhbmUsIGNydGMsIGZi LAo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNyYywgJmRl c3QsICZjbGlwLAo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg RFJNX1BMQU5FX0hFTFBFUl9OT19TQ0FMSU5HLAo+IC0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRFJNX1BMQU5FX0hFTFBFUl9OT19TQ0FMSU5HLAo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluX3NjYWxlLAo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X3NjYWxlLAo+ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuX3Bvc2l0aW9uLCBmYWxzZSwg JnZpc2libGUpOwo+ICAgICAgICAgaWYgKHJldCkKPiAgICAgICAgICAgICAgICAgcmV0dXJuIHJl dDsKPiBAQCAtNzMyLDkgKzExMDgsMTggQEAgc3RhdGljIGludCB2b3BfdXBkYXRlX3BsYW5lX2V2 ZW50KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ICAgICAgICAgICAgICAgICBWT1BfV0lOX1NF VCh2b3AsIHdpbiwgdXZfdmlyLCB1dl92aXJfc3RyaWRlKTsKPiAgICAgICAgICAgICAgICAgVk9Q X1dJTl9TRVQodm9wLCB3aW4sIHV2X21zdCwgdXZfbXN0KTsKPiAgICAgICAgIH0KPiArCj4gKyAg ICAgICBpZiAod2luLT5waHktPnNjbCkKPiArICAgICAgICAgICAgICAgX3ZvcF9jYWxfc2NsX2Zh Yyh2b3AsIHdpbiwgYWN0dWFsX3csIGFjdHVhbF9oLAo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGRlc3QueDIgLSBkZXN0LngxLCBkZXN0LnkyIC0gZGVzdC55MSwKPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBmYi0+cGl4ZWxfZm9ybWF0KTsKCk1heWJlIHRoZSBm dW5jdGlvbiBjb3VsZCBiZSBuYW1lZCAidm9wX2luaXRfc2NhbGVyKCkiLgoKPiArCj4gICAgICAg ICB2YWwgPSAoYWN0dWFsX2ggLSAxKSA8PCAxNjsKPiAgICAgICAgIHZhbCB8PSAoYWN0dWFsX3cg LSAxKSAmIDB4ZmZmZjsKPiAgICAgICAgIFZPUF9XSU5fU0VUKHZvcCwgd2luLCBhY3RfaW5mbywg dmFsKTsKPiArCj4gKyAgICAgICB2YWwgPSAoZGVzdC55MiAtIGRlc3QueTEgLSAxKSA8PCAxNjsK PiArICAgICAgIHZhbCB8PSAoZGVzdC54MiAtIGRlc3QueDEgLSAxKSAmIDB4ZmZmZjsKPiAgICAg ICAgIFZPUF9XSU5fU0VUKHZvcCwgd2luLCBkc3BfaW5mbywgdmFsKTsKPiAgICAgICAgIHZhbCA9 IChkc3Bfc3R5IC0gMSkgPDwgMTY7Cj4gICAgICAgICB2YWwgfD0gKGRzcF9zdHggLSAxKSAmIDB4 ZmZmZjsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2Ry bV92b3AuaCBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fdm9wLmgKPiBp bmRleCA2M2U5YjNhLi5lZGFjZGVlIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yb2Nr Y2hpcC9yb2NrY2hpcF9kcm1fdm9wLmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAv cm9ja2NoaXBfZHJtX3ZvcC5oCj4gQEAgLTE5OCw0ICsxOTgsMTAwIEBAIGVudW0gZmFjdG9yX21v ZGUgewo+ICAgICAgICAgQUxQSEFfU1JDX0dMT0JBTCwKPiAgfTsKPgo+ICtlbnVtIHNjYWxlX21v ZGUgewo+ICsgICAgICAgU0NBTEVfTk9ORSA9IDB4MCwKPiArICAgICAgIFNDQUxFX1VQICAgPSAw eDEsCj4gKyAgICAgICBTQ0FMRV9ET1dOID0gMHgyCj4gK307Cj4gKwo+ICtlbnVtIGxiX21vZGUg ewo+ICsgICAgICAgTEJfWVVWXzM4NDBYNSA9IDB4MCwKPiArICAgICAgIExCX1lVVl8yNTYwWDgg PSAweDEsCj4gKyAgICAgICBMQl9SR0JfMzg0MFgyID0gMHgyLAo+ICsgICAgICAgTEJfUkdCXzI1 NjBYNCA9IDB4MywKPiArICAgICAgIExCX1JHQl8xOTIwWDUgPSAweDQsCj4gKyAgICAgICBMQl9S R0JfMTI4MFg4ID0gMHg1Cj4gK307Cj4gKwo+ICtlbnVtIHNhY2xlX3VwX21vZGUgewo+ICsgICAg ICAgU0NBTEVfVVBfQklMID0gMHgwLAo+ICsgICAgICAgU0NBTEVfVVBfQklDID0gMHgxCj4gK307 Cj4gKwo+ICtlbnVtIHNjYWxlX2Rvd25fbW9kZSB7Cj4gKyAgICAgICBTQ0FMRV9ET1dOX0JJTCA9 IDB4MCwKPiArICAgICAgIFNDQUxFX0RPV05fQVZHID0gMHgxCj4gK307Cj4gKwo+ICsjZGVmaW5l IENVQklDX1BSRUNJU0UgIDAKPiArI2RlZmluZSBDVUJJQ19TUExJTkUgICAxCj4gKyNkZWZpbmUg Q1VCSUNfQ0FUUk9NICAgMgo+ICsjZGVmaW5lIENVQklDX01JVENIRUxMIDMKPiArCj4gKyNkZWZp bmUgQ1VCSUNfTU9ERV9TRUxFVElPTiAgICAgIENVQklDX1BSRUNJU0UKPiArCj4gKyNkZWZpbmUg U0NMX0ZUX0JJTElfRE5fRklYUE9JTlRfU0hJRlQgIDEyCj4gKyNkZWZpbmUgU0NMX0ZUX0JJTElf RE5fRklYUE9JTlQoeCkgXAo+ICsgICAgICAgICAgICAgICAoKElOVDMyKSgoeCkqKDEgPDwgU0NM X0ZUX0JJTElfRE5fRklYUE9JTlRfU0hJRlQpKSkKCnN0YXRpYyBpbmxpbmUKCj4gKwo+ICsjZGVm aW5lIFNDTF9GVF9CSUxJX1VQX0ZJWFBPSU5UX1NISUZUICAxNgo+ICsKPiArI2RlZmluZSBTQ0xf RlRfQVZSR19GSVhQT0lOVF9TSElGVCAgICAgMTYKPiArI2RlZmluZSBTQ0xfRlRfQVZSR19GSVhQ T0lOVCh4KSBcCj4gKyAgICAgICAgICAgICAgICgoSU5UMzIpKCh4KSAqICgxIDw8IFNDTF9GVF9B VlJHX0ZJWFBPSU5UX1NISUZUKSkpCgpzdGF0aWMgaW5saW5lCgo+ICsKPiArI2RlZmluZSBTQ0xf RlRfQklDX0ZJWFBPSU5UX1NISUZUICAgICAgMTYKPiArI2RlZmluZSBTQ0xfRlRfQklDX0ZJWFBP SU5UKHgpIFwKPiArICAgICAgICAgICAgICAgKChJTlQzMikoKHgpKigxIDw8IFNDTF9GVF9CSUNf RklYUE9JTlRfU0hJRlQpKSkKCnN0YXRpYyBpbmxpbmUKCj4gKwo+ICsjZGVmaW5lIFNDTF9GVF9E RUZBVUxUX0ZJWFBPSU5UX1NISUZUICAgIDEyCj4gKyNkZWZpbmUgU0NMX0ZUX1ZTREJJTF9GSVhQ T0lOVF9TSElGVCAgICAgMTIKPiArCj4gKyNkZWZpbmUgU0NMX0NBTChzcmMsIGRzdCwgc2hpZnQp IFwKPiArICAgICAgICAgICAgICAgKCgoKHNyYykgKiAyIC0gMykgPDwgKChzaGlmdCkgLSAxKSkg LyAoKGRzdCkgLSAxKSkKPiArI2RlZmluZSBHRVRfU0NMX0ZUX0JJTElfRE4oc3JjLCBkc3QpIFwK PiArICAgICAgICAgICAgICAgU0NMX0NBTChzcmMsIGRzdCwgU0NMX0ZUX0JJTElfRE5fRklYUE9J TlRfU0hJRlQpCj4gKyNkZWZpbmUgR0VUX1NDTF9GVF9CSUxJX1VQKHNyYywgZHN0KSBcCj4gKyAg ICAgICAgICAgICAgIFNDTF9DQUwoc3JjLCBkc3QsIFNDTF9GVF9CSUxJX1VQX0ZJWFBPSU5UX1NI SUZUKQo+ICsjZGVmaW5lIEdFVF9TQ0xfRlRfQklDKHNyYywgZHN0KSBcCj4gKyAgICAgICAgICAg ICAgIFNDTF9DQUwoc3JjLCBkc3QsIFNDTF9GVF9CSUNfRklYUE9JTlRfU0hJRlQpCj4gKwo+ICsj ZGVmaW5lIEdFVF9TQ0xfRE5fQUNUX0hFSUdIVChzcmNfaCwgdmRtdWx0KSBcCj4gKyAgICAgICAg ICAgICAgICgoKHNyY19oKSArICh2ZG11bHQpIC0gMSkgLyAodmRtdWx0KSkKCkFsbCBvZiB0aGUg ZnVuY3Rpb24gbWFjcm9zIGFib3ZlOiBzdGF0aWMgaW5saW5lLgoKPiArCj4gKyNkZWZpbmUgTUlO X1NDTF9GVF9BRlRFUl9WU0tJUCAxCj4gKyNkZWZpbmUgR0VUX1NDTF9GVF9CSUxJX0ROX1ZTS0lQ KHNyY19oLCBkc3RfaCwgdmRtdWx0KSBcCj4gKyAgICAgICAgICAgICAgICgoR0VUX1NDTF9ETl9B Q1RfSEVJR0hUKChzcmNfaCksICh2ZG11bHQpKSA9PSAoZHN0X2gpKSBcCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgPyAoR0VUX1NDTF9GVF9CSUxJX0ROKChzcmNfaCksIChkc3RfaCkpLyh2ZG11 bHQpKSBcCj4gKyAgICAgICAgICAgICAgICAgICAgICAgOiBHRVRfU0NMX0ZUX0JJTElfRE4oR0VU X1NDTF9ETl9BQ1RfSEVJR0hUKChzcmNfaCksIFwKPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAodmRtdWx0KSksIChkc3RfaCkpKQoKU3RhdGljIGlubGluZS4K Cj4gKwo+ICsjZGVmaW5lIEdFVF9TQ0xfRlRfQVZSRyhzcmMsIGRzdCkgXAo+ICsgICAgICAgICAg ICAgICAoKChkc3QpIDw8ICgoU0NMX0ZUX0FWUkdfRklYUE9JTlRfU0hJRlQpICsgMSkpIFwKPiAr ICAgICAgICAgICAgICAgIC8gKDIgKiAoc3JjKSAtIDEpKQoKU3RhdGljIGlubGluZS4KCj4gKwo+ ICsjZGVmaW5lIFNDTF9DT09SX0FDQ19GSVhQT0lOVF9TSElGVCAgICAxNgo+ICsjZGVmaW5lIFND TF9DT09SX0FDQ19GSVhQT0lOVF9PTkUgICAgICAoMSA8PCBTQ0xfQ09PUl9BQ0NfRklYUE9JTlRf U0hJRlQpCj4gKyNkZWZpbmUgU0NMX0NPT1JfQUNDX0ZJWFBPSU5UKHgpIFwKPiArICAgICAgICAg ICAgICAgKChJTlQzMikoKHgpKigxIDw8IFNDTF9DT09SX0FDQ19GSVhQT0lOVF9TSElGVCkpKQo+ ICsjZGVmaW5lIFNDTF9DT09SX0FDQ19GSVhQT0lOVF9SRVZFUlQoeCkgICAgICAgIFwKPiArICAg ICAgICAgICAgICAgKCgoKHgpID4+IChTQ0xfQ09PUl9BQ0NfRklYUE9JTlRfU0hJRlQtMSkpICsg MSkgPj4gMSkKPiArCj4gKyNkZWZpbmUgU0NMX0dFVF9DT09SX0FDQ19GSVhQT0lOVChzY2FsZSwg c2hpZnQpICBcCj4gKyAgICAgICAgICAgICAgICgoc2NhbGUpIDw8IChTQ0xfQ09PUl9BQ0NfRklY UE9JTlRfU0hJRlQgLSAoc2hpZnQpKSkKPiArI2RlZmluZSBTQ0xfRklMVEVSX0ZUX0ZJWFBPSU5U X1NISUZUICAgOAo+ICsjZGVmaW5lIFNDTF9GSUxURVJfRlRfRklYUE9JTlRfT05FICAgICAoMSA8 PCBTQ0xfRklMVEVSX0ZUX0ZJWFBPSU5UX1NISUZUKQo+ICsjZGVmaW5lIFNDTF9GSUxURVJfRlRf RklYUE9JTlQoeCkgXAo+ICsgICAgICAgICAgICAgICAoKElOVDMyKSgoeCkgKiAoMSA8PCBTQ0xf RklMVEVSX0ZUX0ZJWFBPSU5UX1NISUZUKSkpCj4gKyNkZWZpbmUgU0NMX0ZJTFRFUl9GVF9GSVhQ T0lOVF9SRVZFUlQoeCkgXAo+ICsgICAgICAgICAgICAgICAoKCgoeCkgPj4gKFNDTF9GSUxURVJf RlRfRklYUE9JTlRfU0hJRlQgLSAxKSkgKyAxKSA+PiAxKQo+ICsKPiArI2RlZmluZSBTQ0xfR0VU X0ZJTFRFUl9GVF9GSVhQT0lOVChjYSwgc2hpZnQpIFwKPiArICAgICAgICAgICAgICAgKCgoY2Ep ID4+ICgoc2hpZnQpLVNDTF9GSUxURVJfRlRfRklYUE9JTlRfU0hJRlQpKSAmIFwKPiArICAgICAg ICAgICAgICAgIChTQ0xfRklMVEVSX0ZUX0ZJWFBPSU5UX09ORSAtIDEpKQo+ICsKPiArI2RlZmlu ZSBTQ0xfT0ZGU0VUX0ZJWFBPSU5UX1NISUZUICAgICAgOAo+ICsjZGVmaW5lIFNDTF9PRkZTRVRf RklYUE9JTlQoeCkgXAo+ICsgICAgICAgICAgICAgICAoKElOVDMyKSgoeCkgKiAoMSA8PCBTQ0xf T0ZGU0VUX0ZJWFBPSU5UX1NISUZUKSkpCgpBbGwgb2YgdGhlIGZ1bmN0aW9uIG1hY3JvcyBhYm92 ZTogc3RhdGljIGlubGluZS4gVGhpcyBzaG91bGQgYWxzbyBsZXQKeW91IHJlbW92ZSB0aGUgY2Fz dHMuCgpCZXN0IHJlZ2FyZHMsClRvbWFzegpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5m cmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2RyaS1kZXZlbAo=