From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ed1-x541.google.com (mail-ed1-x541.google.com [IPv6:2a00:1450:4864:20::541]) by gabe.freedesktop.org (Postfix) with ESMTPS id 8E69A6E647 for ; Fri, 14 Sep 2018 09:26:04 +0000 (UTC) Received: by mail-ed1-x541.google.com with SMTP id u1-v6so6905196eds.1 for ; Fri, 14 Sep 2018 02:26:04 -0700 (PDT) Date: Fri, 14 Sep 2018 11:25:59 +0200 From: Daniel Vetter Message-ID: <20180914092559.GM11082@phenom.ffwll.local> References: <20180907155157.5798-1-gwan-gyeong.mun@intel.com> <20180907155157.5798-5-gwan-gyeong.mun@intel.com> <20180914085605.GK11082@phenom.ffwll.local> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20180914085605.GK11082@phenom.ffwll.local> Subject: Re: [igt-dev] [i-g-t,v4 4/4] kms_plane: Add clipping subtests List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , 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: T24gRnJpLCBTZXAgMTQsIDIwMTggYXQgMTA6NTY6MDVBTSArMDIwMCwgRGFuaWVsIFZldHRlciB3 cm90ZToKPiBPbiBGcmksIFNlcCAwNywgMjAxOCBhdCAwNjo1MTo1N1BNICswMzAwLCBHd2FuLWd5 ZW9uZyBNdW4gd3JvdGU6Cj4gPiBGcm9tOiBJbXJlIERlYWsgPGltcmUuZGVha0BpbnRlbC5jb20+ Cj4gPiAKPiA+IEFkZCBwbGFuZSBjbGlwcGluZyBzdWJ0ZXN0cyBkaXNwbGF5aW5nIGEgc2luZ2xl IGNsaXBwZWQgcGxhbmUsIHdpdGggdGhlCj4gPiBmb2xsb3dpbmcgdGVzdCBjYXNlczoKPiA+IGEp IHBsYW5lIGNvdmVyaW5nIHRoZSB3aG9sZSBzY3JlZW4sIHNvIHRoYXQgY2xpcHBpbmcgaXMgZG9u ZSBhdCBhbGwgNAo+ID4gICAgc2NyZWVuIGVkZ2VzCj4gPiBiKSBwbGFuZSBhdCBlaXRoZXIgb2Yg dGhlIDQgY29ybmVycyBvZiB0aGUgc2NyZWVuIGNsaXBwZWQsIHNvIHRoYXQgYQo+ID4gICAgNHg0 IHBpeGVsIHBhcnQgb2YgdGhlIHBsYW5lIGlzIHZpc2libGUKPiA+IGMpIHBsYW5lIGF0IGVpdGhl ciBvZiB0aGUgNCBjb3JuZXJzIG9mIHRoZSBzY3JlZW4gY2xpcHBlZCwgc28gdGhhdCBhCj4gPiAg ICAyeDIgcGl4ZWwgcGFydCBvZiB0aGUgcGxhbmUgaXMgdmlzaWJsZQo+ID4gCj4gPiBFYWNoIG9m IHRoZSBhYm92ZSBjYXNlcyBhcmUgdGVzdGVkIHdpdGggYWxsIHN1cHBvcnRlZCB0aWxpbmcgbW9k ZXMsCj4gPiByb3RhdGlvbiBkZWdyZWVzLCBkaWZmZXJpbmcgcGl4ZWwgZm9ybWF0IHNpemVzIChv bmx5IDE2IGJwcCBhbmQgMzIgYnBwCj4gPiBmb3Igbm93KSBhbmQgY2VydGFpbiBwbGFuZXMuIFdo aWxlIHRoZSBhKSBhbmQgYikgY2FzZXMgYWJvdmUgYXJlCj4gPiBzdXBwb3J0ZWQgb24gYWxsIHBs YXRmb3JtcyBjKSBpcyBub3QgZnVsbHkgc3VwcG9ydGVkIG9uIEdMSyBhbmQgQ05MCj4gPiAod2hp Y2ggd2FzIHRoZSBwcmltYXJ5IG1vdGl2YXRpb24gZm9yIHRoaXMgdGVzdGNhc2UpLgo+ID4gCj4g PiB2MjoKPiA+IC0gQWRkIG1pc3NpbmcgcmVzZXQgZm9yIHRoZSBvdXRwdXQgcGlwZSBhZnRlciBm aW5pc2hpbmcgdGhlIHRlc3QgZm9yIGEKPiA+ICAgZ2l2ZW4gb3V0cHV0LCBmaXhpbmcgdGhlCj4g PiAgICJEUC0xIGFuZCBlRFAtMSBhcmUgYm90aCB0cnlpbmcgdG8gdXNlIHBpcGUgQSIgdHlwZSBv ZiBlcnJvcnMuCj4gPiAtIFVzZSAtRVJBTkdFIGluc3RlYWQgb2YgLUVJTlZBTCB0byBjaGVjayB0 aGUgcmV0dXJuIGNvZGUgZm9yCj4gPiAgIHVuc3VwcG9ydGVkIHBsYW5lIFggcG9zaXRpb25zLCBi YXNlZCBvbiB0aGUgbGF0ZXN0IGtlcm5lbCBjb2RlLgo+ID4gLSBBZGQgY29tbWVudCBleHBsYWlu aW5nIHRoZSBkZXBlbmRlbmNpZXMgd2hlbiBkb2luZyBhIHVuaXZlcnNhbAo+ID4gICBjb21taXQu Cj4gPiAKPiA+IHYzOiAoR3dhbi1neWVvbmcpCj4gPiAtIEFkZCBtaXNzaW5nIHJlbGVhc2Ugb2Yg ZnJhbWVidWZmZXIgb24gY3JlYXRlX2ZiX2Zvcl9tb2RlX19jbGlwcGluZ19kaXNwbGF5KCkKPiA+ ICAgZnVuY3Rpb24uCj4gPiAtIEFkZCB1c2luZyBtdWx0aSBwbGFuZXMgcGVyIHNpbmdsZSBkaXNw bGF5IGNvbW1pdCBvbiBjbGlwcGluZyB0ZXN0IG9mCj4gPiAgIDQgY29ybmVycy4gKERhbmllbCkK PiA+ICAgSXQgZW5hYmxlcyB0aGUgaW1wcm92aW5nIG9mIHRlc3Qgc3BlZWQuIElmIG51bWJlciBv ZiBwbGFuZXMgaXMgb3Zlcgo+ID4gICB0aGFuIDQsIGl0IHVzZXMgZm91ciBwbGFuZXMgZnJvbSBm aXJzdCBwbGFuZSB0byBuZXh0IGZvdXIgcGxhbmVzLgo+ID4gICAoNCBwbGFuZXMgbWFrZSB0ZXN0 aW5nIG9mIDQgY29ybmVycyBwb3NzaWJsZSBhcyAxIGRpc3BsYXkgY29tbWl0LikKPiA+ICAgSWYg bnVtYmVyIG9mIHBsYW5lcyBpcyBvdmVyIHRoYW4gMiBhbmQgbGVzcyB0aGFuIDQsIGl0IHVzZXMg dHdvIHBsYW5lcwo+ID4gICBmcm9tIGZpcnN0IHBsYW5lIHRvIG5leHQgdHdvIHBsYW5lcy4gKDIg cGxhbmVzIG1ha2UgdGVzdGluZyBvZiA0IGNvcm5lcnMKPiA+ICAgcG9zc2libGUgYXMgMiBkaXNw bGF5IGNvbW1pdC4pIFJlc3Qgb2YgY2FzZXMgaXQgdXNlcyBvbmx5IGZpcnN0IHBsYW5lLgo+ID4g ICAoMSBwbGFuZSBtYWtlcyB0ZXN0aW5nIG9mIDQgY29ybmVycyBwb3NzaWJsZSBhcyA0IGRpc3Bs YXkgY29tbWl0LikKPiA+ICAgSXQgY2hhbmdlcyB0byB1c2luZyBvZiBjZXJ0YWluIHBsYW5lcyBm cm9tIHVzaW5nIG9mIGFsbCBzdXBwb3J0ZWQgcGxhbmVzLgo+ID4gICBBbmQgYSBjdXJzb3IgcGxh bmUgY2FuIGJlIG9uZSBvZiB0ZXN0IHBsYW5lcy4KPiA+IAo+ID4gdjQ6IChJbXJlKQo+ID4gLSBD aGFuZ2UgYSBjb21taXQgc3R5bGUgdG8gbGVnYWN5IGZyb20gdW5pdmVyc2FsIHdoZW4gdGhpcyBn cmFicyBhIGNyYyBmb3IKPiA+ICAgZnJhbWVidWZmZXIuIFRoZSB1bml2ZXJzYWwgY29tbWl0IGhh cyBpc3N1ZXMgd2l0aCBtdWx0aXBsZSBvdXRwdXRzLiBBcwo+ID4gICB0aGUgbGVnYWN5IHN0eWxl IGNvbW1pdCBkb2VzIG5vdCBhbGxvdyBjaGFuZ2luZyBvZiBwcmltYXJ5IHBsYW5lIHJvdGF0aW9u Cj4gPiAgIG9uIG5vbi1maXJzdCBjb21taXQsIHRoaXMgY2FsbHMgaWd0X2Rpc3BsYXlfcmVzZXQo KSB0byBtYWtlIGEgZmlyc3QKPiA+ICAgY29tbWl0IHN0YXRlIHByaW9yIHRvIGNhbGwgdGVzdF9n cmFiX2NyY19mb3JfZmIoKS4KPiAKPiBKdXN0IGFuIGFzaWRlOiBXaHkgbm90IGF0b21pYz8gQXRv bWljIHNob3VsZCBiZSBhIG5vdGNoIGZhc3RlciBzdGlsbCwKPiBzaW5jZSBpdCBhcHBsaWVzIGFs bCB0aGUgY2hhbmdlcyBpbiBvbmUgZ28uCj4gCj4gSSB0aGluayB3ZSBzaG91bGQgYWxzbyBoYXZl IGEgbm9uLWNvbW1pdHRpbmcgdmVyc2lvbiBvZgo+IGlndF9kaXNwbGF5X3Jlc2V0KCksIHRvIGN1 dCBhd2F5IGV2ZW4gbW9yZSBtb2Rlc2V0cy4KPiAKPiBBbHNvLCBpcyB0aGUgcGxhbiB0byByZW1v dmUgdGhlIGNvcnJlc3BvbmRpbmcgY3Vyc29yIHRlc3RzPwo+IAo+ID4gLSBVcGRhdGUgdmFyaWFi bGUgbmFtaW5nIG1vcmUgY2xlYXJseQo+ID4gICBjbGlwX3NxdWFyZXNfY250IC0+IHBsYW5lX2Nu dAo+ID4gLSBPcHRpbWl6ZSB0ZXN0X3BsYW5lX2NsaXBwaW5nX3NxdWFyZXMoKSBmdW5jdGlvbgo+ ID4gLSBVcGRhdGUgaW5kZW50YXRpb24gYXMga2VybmVsIHN0eWxlCj4gPiAKPiA+IFNpZ25lZC1v ZmYtYnk6IEltcmUgRGVhayA8aW1yZS5kZWFrQGludGVsLmNvbT4KPiA+IFNpZ25lZC1vZmYtYnk6 IEd3YW4tZ3llb25nIE11biA8Z3dhbi1neWVvbmcubXVuQGludGVsLmNvbT4KPiA+IENjOiBNaWth IEthaG9sYSA8bWlrYS5rYWhvbGFAaW50ZWwuY29tPgo+ID4gQ2M6IE1hYXJ0ZW4gTGFua2hvcnN0 IDxtYWFydGVuLmxhbmtob3JzdEBsaW51eC5pbnRlbC5jb20+Cj4gPiBDYzogSnVoYS1QZWtrYSBI ZWlra2lsw6QgPGp1aGEtcGVra2EuaGVpa2tpbGFAaW50ZWwuY29tPgo+ID4gUmV2aWV3ZWQtYnk6 IEFya2FkaXVzeiBIaWxlciA8YXJrYWRpdXN6LmhpbGVyQGludGVsLmNvbT4gKHYxKQo+ID4gLS0t Cj4gPiAgdGVzdHMva21zX3BsYW5lLmMgfCA1MTYgKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKwo+ID4gIDEgZmlsZSBjaGFuZ2VkLCA1MTYgaW5zZXJ0aW9ucygr KQo+ID4gCj4gPiBkaWZmIC0tZ2l0IGEvdGVzdHMva21zX3BsYW5lLmMgYi90ZXN0cy9rbXNfcGxh bmUuYwo+ID4gaW5kZXggM2Y0OGM4MjEuLmFjNDc1MzU4IDEwMDY0NAo+ID4gLS0tIGEvdGVzdHMv a21zX3BsYW5lLmMKPiA+ICsrKyBiL3Rlc3RzL2ttc19wbGFuZS5jCj4gPiBAQCAtNDEsMTEgKzQx LDQwIEBAIHR5cGVkZWYgc3RydWN0IHsKPiA+ICAJaW50IGRybV9mZDsKPiA+ICAJaWd0X2Rpc3Bs YXlfdCBkaXNwbGF5Owo+ID4gIAlpZ3RfcGlwZV9jcmNfdCAqcGlwZV9jcmM7Cj4gPiArCXVpbnQz Ml90IGRldmlkOwo+ID4gKwl1aW50NjRfdCBtYXhfY3VydzsKPiA+ICsJdWludDY0X3QgbWF4X2N1 cmg7Cj4gPiAgfSBkYXRhX3Q7Cj4gPiAgCj4gPiArdHlwZWRlZiBzdHJ1Y3Qgewo+ID4gKwlpbnQg eDsKPiA+ICsJaW50IHk7Cj4gPiArCWludCBzaXplOwo+ID4gK30gc3F1YXJlX3Q7Cj4gPiArCj4g PiAgc3RhdGljIGNvbG9yX3QgcmVkICAgPSB7IDEuMGYsIDAuMGYsIDAuMGYgfTsKPiA+ICBzdGF0 aWMgY29sb3JfdCBncmVlbiA9IHsgMC4wZiwgMS4wZiwgMC4wZiB9Owo+ID4gK3N0YXRpYyBjb2xv cl90IHllbGxvdyA9IHsgMS4wZiwgMS4wZiwgMC4wZiB9Owo+ID4gIHN0YXRpYyBjb2xvcl90IGJs dWUgID0geyAwLjBmLCAwLjBmLCAxLjBmIH07Cj4gPiArc3RhdGljIGNvbG9yX3Qgd2hpdGUgPSB7 IDEuMGYsIDEuMGYsIDEuMGYgfTsKPiA+ICtzdGF0aWMgc3F1YXJlX3QgY2xpcF9zcXVhcmVzWzRd Owo+ID4gKwo+ID4gKy8qCj4gPiArICogU2l6ZSBvZiBhIHNxdWFyZSBwbGFuZSB1c2VkIHRvIHRl c3QgY2xpcHBpbmcgYXQgdGhlIDQgY291cm5lcnMgb2YgdGhlCj4gPiArICogZGlzcGxheS4KPiA+ ICsgKi8KPiA+ICsjZGVmaW5lIENMSVBQRURfUExBTkVfU01BTExfU0laRQk2NAo+ID4gKwo+ID4g Ky8qCj4gPiArICogVmlzaWJsZSBwbGFuZSBzaXplIGFmdGVyIGNsaXBwaW5nIHRoYXQgd29ya3Mg b24gYWxsIHBsYXRmb3JtcyBmb3IgYWxsIHBsYW5lCj4gPiArICogcG9zaXRpb25zLgo+ID4gKyAq IFRoZSBleGNlcHRpb25zIGFyZSBHTEsvQ05MIHdoZXJlIHRoZXJlIG11c3QgYmUgYXQgbGVhc3Qg dGhpcyBtYW55IHBpeGVscwo+ID4gKyAqIHZpc2libGUgZnJvbSB0aGUgcGxhbmUgYWZ0ZXIgaXQn cyBjbGlwcGVkIHRvIHRoZSBsZWZ0L3JpZ2h0IGVkZ2Ugb2YgdGhlCj4gPiArICogc2NyZWVuLiBO b3QgbWVldGluZyB0aGlzIGNvbmRpdGlvbiBtYXkgdHJpZ2dlciBGSUZPIHVuZGVyZmxvd3MgYW5k IHNjcmVlbgo+ID4gKyAqIGNvcnJ1cHRpb24uIFRoZSBjdXJzb3IgcGxhbmUgaXMgYW4gZXhjZXB0 aW9uIHRoYXQgZG9lc24ndCBoYXZlIHRoaXMgcHJvYmxlbQo+ID4gKyAqIGV2ZW4gb24gR0xLL0NO TC4KPiA+ICsgKi8KPiA+ICsjZGVmaW5lIENMSVBQRURfUExBTkVfTUlOX1ZBTElECQk0Cj4gPiAg Cj4gPiAgLyoKPiA+ICAgKiBDb21tb24gY29kZSBhY3Jvc3MgYWxsIHRlc3RzLCBhY3Rpbmcgb24g ZGF0YV90Cj4gPiBAQCAtMTQyLDYgKzE3MSw2OSBAQCBjcmVhdGVfZmJfZm9yX21vZGVfX3Bvc2l0 aW9uKGRhdGFfdCAqZGF0YSwgZHJtTW9kZU1vZGVJbmZvICptb2RlLAo+ID4gIAlpZ3RfcHV0X2Nh aXJvX2N0eChkYXRhLT5kcm1fZmQsIGZiLCBjcik7Cj4gPiAgfQo+ID4gIAo+ID4gKy8qCj4gPiAr ICogQ3JlYXRlIGEgc3F1YXJlIEZCIGZvciB0aGUgcGxhbmUgaW4gdGhlIGNsaXBwaW5nIHRlc3Qs IGRpdmlkZWQgaW50byA0Cj4gPiArICogcXVhcnRlcnMgc29saWQgZmlsbGVkIHdpdGggZGlmZmVy ZW50IGNvbG9ycy4gVXNlIHRoZSBnaXZlbiB0aWxpbmcsIGZvcm1hdAo+ID4gKyAqIGFuZCBzaXpl IGFuZCByb3RhdGUgdGhlIEZCIGNsb2Nrd2lzZSB3aXRoIHRoZSBnaXZlbiByb3RhdGlvbiBkZWdy ZWVzLCBzbwo+ID4gKyAqIHRoYXQgdGhlIGNvdW50ZXJjbG9ja3dpc2Ugcm90YXRpb24gd2l0aCB0 aGUgc2FtZSBkZWdyZWVzIGRvbmUgYnkgdGhlIEhXCj4gPiArICogd2lsbCBhbHdheXMgcmVzdWx0 IGluIHRoZSBzYW1lIHJlZmVyZW5jZSBGQiBpbWFnZS4KPiA+ICsgKi8KPiA+ICtzdGF0aWMgdm9p ZAo+ID4gK2NyZWF0ZV9mYl9mb3JfbW9kZV9fY2xpcHBpbmdfcGxhbmUoZGF0YV90ICpkYXRhLCBp Z3Rfcm90YXRpb25fdCByb3RhdGlvbiwKPiA+ICsJCQkJICAgdWludDY0X3QgdGlsaW5nLAo+ID4g KwkJCQkgICB1aW50MzJfdCBmb3JtYXQsCj4gPiArCQkJCSAgIGludCBzaXplLAo+ID4gKwkJCQkg ICBzdHJ1Y3QgaWd0X2ZiICpmYiAvKiBvdXQgKi8pCj4gPiArewo+ID4gKwljb2xvcl90IGNvcm5l cnNbXSA9IHsgcmVkLCB3aGl0ZSwgeWVsbG93LCBibHVlIH07Cj4gPiArCWNvbG9yX3QgY29sb3I7 Cj4gPiArCXVuc2lnbmVkIGludCBmYl9pZDsKPiA+ICsJY2Fpcm9fdCAqY3I7Cj4gPiArCWNvbnN0 IGludCBxc2l6ZSA9IHNpemUgLyAyOwo+ID4gKwlpbnQgaWR4Owo+ID4gKwo+ID4gKwlmYl9pZCA9 IGlndF9jcmVhdGVfZmIoZGF0YS0+ZHJtX2ZkLCBzaXplLCBzaXplLCBmb3JtYXQsIHRpbGluZywg ZmIpOwo+ID4gKwlpZ3RfYXNzZXJ0KGZiX2lkKTsKPiA+ICsKPiA+ICsJY3IgPSBpZ3RfZ2V0X2Nh aXJvX2N0eChkYXRhLT5kcm1fZmQsIGZiKTsKPiA+ICsKPiA+ICsJc3dpdGNoIChyb3RhdGlvbikg ewo+ID4gKwljYXNlIElHVF9ST1RBVElPTl8wOgo+ID4gKwkJaWR4ID0gMDsKPiA+ICsJCWJyZWFr Owo+ID4gKwljYXNlIElHVF9ST1RBVElPTl85MDoKPiA+ICsJCWlkeCA9IDM7Cj4gPiArCQlicmVh azsKPiA+ICsJY2FzZSBJR1RfUk9UQVRJT05fMTgwOgo+ID4gKwkJaWR4ID0gMjsKPiA+ICsJCWJy ZWFrOwo+ID4gKwljYXNlIElHVF9ST1RBVElPTl8yNzA6Cj4gPiArCQlpZHggPSAxOwo+ID4gKwkJ YnJlYWs7Cj4gPiArCWRlZmF1bHQ6Cj4gPiArCQlpZ3RfYXNzZXJ0KDApOwo+ID4gKwl9Cj4gPiAr Cj4gPiArCWNvbG9yID0gY29ybmVyc1tpZHhdOwo+ID4gKwlpZ3RfcGFpbnRfY29sb3IoY3IsIDAs IDAsIHFzaXplLCBxc2l6ZSwKPiA+ICsJCQljb2xvci5yZWQsIGNvbG9yLmdyZWVuLCBjb2xvci5i bHVlKTsKPiA+ICsKPiA+ICsJY29sb3IgPSBjb3JuZXJzWygrK2lkeCkgJSA0XTsKPiA+ICsJaWd0 X3BhaW50X2NvbG9yKGNyLCBxc2l6ZSwgMCwgcXNpemUsIHFzaXplLAo+ID4gKwkJCWNvbG9yLnJl ZCwgY29sb3IuZ3JlZW4sIGNvbG9yLmJsdWUpOwo+ID4gKwo+ID4gKwljb2xvciA9IGNvcm5lcnNb KCsraWR4KSAlIDRdOwo+ID4gKwlpZ3RfcGFpbnRfY29sb3IoY3IsIHFzaXplLCBxc2l6ZSwgcXNp emUsIHFzaXplLAo+ID4gKwkJCWNvbG9yLnJlZCwgY29sb3IuZ3JlZW4sIGNvbG9yLmJsdWUpOwo+ ID4gKwo+ID4gKwljb2xvciA9IGNvcm5lcnNbKCsraWR4KSAlIDRdOwo+ID4gKwlpZ3RfcGFpbnRf Y29sb3IoY3IsIDAsIHFzaXplLCBxc2l6ZSwgcXNpemUsCj4gPiArCQkJY29sb3IucmVkLCBjb2xv ci5ncmVlbiwgY29sb3IuYmx1ZSk7Cj4gPiArCj4gPiArCWlndF9hc3NlcnQoY2Fpcm9fc3RhdHVz KGNyKSA9PSAwKTsKPiA+ICsJY2Fpcm9fZGVzdHJveShjcik7Cj4gPiArfQo+ID4gKwo+ID4gIGVu dW0gewo+ID4gIAlURVNUX1BPU0lUSU9OX0ZVTExZX0NPVkVSRUQgPSAxIDw8IDAsCj4gPiAgCVRF U1RfRFBNUyA9IDEgPDwgMSwKPiA+IEBAIC01NDUsNiArNjM3LDQxNCBAQCB0ZXN0X3BpeGVsX2Zv cm1hdHMoZGF0YV90ICpkYXRhLCBlbnVtIHBpcGUgcGlwZSkKPiA+ICAJfQo+ID4gIH0KPiA+ICAK PiA+ICtzdGF0aWMgYm9vbAo+ID4gK2JvZ3VzX3BsYW5lX2NvbmYodWludDMyX3QgZGV2aWQsIGln dF9wbGFuZV90ICpwbGFuZV9vYmosCj4gPiArCQkgaW50IGhkaXNwbGF5LCBpbnQgcGxhbmVfeCwg aW50IHBsYW5lX3dpZHRoKQo+ID4gK3sKPiA+ICsJaWYgKCEoSVNfR0VNSU5JTEFLRShkZXZpZCkg fHwgSVNfQ0FOTk9OTEFLRShkZXZpZCkpKQo+ID4gKwkJcmV0dXJuIGZhbHNlOwo+ID4gKwo+ID4g KwlpZiAocGxhbmVfb2JqLT50eXBlID09IERSTV9QTEFORV9UWVBFX0NVUlNPUikKPiA+ICsJCXJl dHVybiBmYWxzZTsKPiA+ICsKPiA+ICsJaWYgKHBsYW5lX3ggKyBwbGFuZV93aWR0aCA+PSBDTElQ UEVEX1BMQU5FX01JTl9WQUxJRCAmJgo+ID4gKwkgICAgcGxhbmVfeCA8PSBoZGlzcGxheSAtIENM SVBQRURfUExBTkVfTUlOX1ZBTElEKQo+ID4gKwkJcmV0dXJuIGZhbHNlOwo+ID4gKwo+ID4gKwly ZXR1cm4gdHJ1ZTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGJvb2wKPiA+ICtzdXBwb3J0ZWRf cGxhbmVfY29uZihkYXRhX3QgKmRhdGEsIGludCBwbGFuZV90eXBlLCB1aW50NjRfdCB0aWxpbmcs Cj4gPiArCQkgICAgIHVpbnQzMl90IGZvcm1hdCwgaWd0X3JvdGF0aW9uX3Qgcm90YXRpb24sCj4g PiArCQkgICAgIGRybU1vZGVNb2RlSW5mbyAqbW9kZSwKPiA+ICsJCSAgICAgaW50IHBsYW5lX3gs IGludCBwbGFuZV95LCBpbnQgcGxhbmVfc2l6ZSkKPiA+ICt7Cj4gPiArCWlmIChpbnRlbF9nZW4o ZGF0YS0+ZGV2aWQpIDwgOSAmJgo+ID4gKwkgICAgdGlsaW5nICE9IExPQ0FMX0RSTV9GT1JNQVRf TU9EX05PTkUpCj4gPiArCQlyZXR1cm4gZmFsc2U7Cj4gPiArCj4gPiArCS8qIE9uIEdFTjw5IHRo ZSBwcmltYXJ5IHBsYW5lIG11c3QgY292ZXIgdGhlIGZ1bGwgc2NyZWVuLiAqLwo+ID4gKwlpZiAo aW50ZWxfZ2VuKGRhdGEtPmRldmlkKSA8IDkgJiYKPiA+ICsJICAgIHBsYW5lX3R5cGUgPT0gRFJN X1BMQU5FX1RZUEVfUFJJTUFSWSAmJgo+ID4gKwkgICAgKHBsYW5lX3ggPiAwIHx8IHBsYW5lX3kg PiAwIHx8Cj4gPiArCSAgICAgKHBsYW5lX3ggKyBwbGFuZV9zaXplIDwgbW9kZS0+aGRpc3BsYXkp IHx8Cj4gPiArCSAgICAgKHBsYW5lX3kgKyBwbGFuZV9zaXplIDwgbW9kZS0+dmRpc3BsYXkpKSkK PiA+ICsJCXJldHVybiBmYWxzZTsKPiA+ICsKPiA+ICsJaWYgKHBsYW5lX3R5cGUgPT0gRFJNX1BM QU5FX1RZUEVfQ1VSU09SKSB7Cj4gPiArCQkvKiBGb3IgY3Vyc29yIHBsYW5lcyBvbmx5IGxpbmVh ci9hbHBoYSBmb3JtYXQgaXMgc3VwcG9ydGVkLiAqLwo+ID4gKwkJaWYgKHRpbGluZyAhPSBMT0NB TF9EUk1fRk9STUFUX01PRF9OT05FIHx8Cj4gPiArCQkgICAgZm9ybWF0ICE9IERSTV9GT1JNQVRf QVJHQjg4ODgpCj4gPiArCQkJcmV0dXJuIGZhbHNlOwo+ID4gKwo+ID4gKwkJaWYgKHBsYW5lX3Np emUgPiBkYXRhLT5tYXhfY3VydyB8fCBwbGFuZV9zaXplID4gZGF0YS0+bWF4X2N1cmgpCj4gPiAr CQkJcmV0dXJuIGZhbHNlOwo+ID4gKwl9IGVsc2Ugewo+ID4gKwkJLyoKPiA+ICsJCSAqIEZvciBu b24tY3Vyc29yIHBsYW5lcyBmb3JtYXRzIHdpdGggYWxwaGEgbWF5IHJlc3VsdCBpbgo+ID4gKwkJ ICogdW5kZXRlcm1pbmlzdGljIENSQ3MsIHdlIHVzZSB0aGUgc2FtZSBzaXplZAo+ID4gKwkJICog bm9uLWFscGhhIFhSR0I4ODg4IGZvcm1hdCBpbnN0ZWFkLgo+ID4gKwkJICovCj4gPiArCQlpZiAo Zm9ybWF0ID09IERSTV9GT1JNQVRfQVJHQjg4ODgpCj4gPiArCQkJcmV0dXJuIGZhbHNlOwo+ID4g Kwo+ID4gKwkJaWYgKGZvcm1hdCA9PSBEUk1fRk9STUFUX1JHQjU2NSAmJgo+ID4gKwkJICAgIGlu dGVsX2dlbihkYXRhLT5kZXZpZCkgPCA5ICYmCj4gPiArCQkgICAgIUlTX1ZBTExFWVZJRVcoZGF0 YS0+ZGV2aWQpICYmICFJU19DSEVSUllWSUVXKGRhdGEtPmRldmlkKSkKPiA+ICsJCQlyZXR1cm4g ZmFsc2U7Cj4gPiArCX0KPiA+ICsKPiA+ICsJLyogUkdCNTY1IHdpdGggcm90YXRpb24gaXMgbm90 IHN1cHBvcnRlZCBmb3Igbm93LiAqLwo+ID4gKwlpZiAoZm9ybWF0ID09IERSTV9GT1JNQVRfUkdC NTY1ICYmIHJvdGF0aW9uICE9IElHVF9ST1RBVElPTl8wKQo+ID4gKwkJcmV0dXJuIGZhbHNlOwo+ ID4gKwo+ID4gKwlyZXR1cm4gdHJ1ZTsKPiA+ICt9Cj4gPiArCj4gPiArLyoKPiA+ICsgKiBDcmVh dGUgYSBzcXVhcmUgcmVmZXJlbmNlIEZCIGZvciB0aGUgd2hvbGUgc2NyZWVuIGluIHRoZSBjbGlw cGluZyB0ZXN0LAo+ID4gKyAqIHdpdGggdGhlIGdpdmVuIHRlc3QgcGxhbmUgcG9zaXRpb24gYW5k IHNpemUuIFNlZQo+ID4gKyAqIGNyZWF0ZV9mYl9mb3JfbW9kZV9fY2xpcHBpbmdfcGxhbmUoKSBm b3IgdGhlIGxheW91dCBvZiB0aGUgdGVzdCBwbGFuZS4KPiA+ICsgKi8KPiA+ICtzdGF0aWMgdm9p ZAo+ID4gK2NyZWF0ZV9mYl9mb3JfbW9kZV9fY2xpcHBpbmdfZGlzcGxheShkYXRhX3QgKmRhdGEs IGRybU1vZGVNb2RlSW5mbyAqbW9kZSwKPiA+ICsJCQkJICAgICBzcXVhcmVfdCAqY2xpcF9zcXVh cmVzLAo+ID4gKwkJCQkgICAgIGludCBwbGFuZV9jbnQsCj4gPiArCQkJCSAgICAgc3RydWN0IGln dF9mYiAqZmIgLyogb3V0ICovKQo+ID4gK3sKPiA+ICsJaW50IHBsYW5lOwo+ID4gKwlzdHJ1Y3Qg aWd0X2ZiIHBsYW5lX2Zic1s0XTsKPiA+ICsJdW5zaWduZWQgaW50IGZiX2lkOwo+ID4gKwljYWly b190ICpjcjsKPiA+ICsJY2Fpcm9fc3VyZmFjZV90ICpzcmNzWzRdOwo+ID4gKwo+ID4gKwlmYl9p ZCA9IGlndF9jcmVhdGVfZmIoZGF0YS0+ZHJtX2ZkLAo+ID4gKwkJCSAgICAgIG1vZGUtPmhkaXNw bGF5LCBtb2RlLT52ZGlzcGxheSwKPiA+ICsJCQkgICAgICBEUk1fRk9STUFUX1hSR0I4ODg4LAo+ ID4gKwkJCSAgICAgIExPQ0FMX0RSTV9GT1JNQVRfTU9EX05PTkUsCj4gPiArCQkJICAgICAgZmIp Owo+ID4gKwlpZ3RfYXNzZXJ0KGZiX2lkKTsKPiA+ICsKPiA+ICsJY3IgPSBpZ3RfZ2V0X2NhaXJv X2N0eChkYXRhLT5kcm1fZmQsIGZiKTsKPiA+ICsJaWd0X3BhaW50X2NvbG9yKGNyLCAwLCAwLCBt b2RlLT5oZGlzcGxheSwgbW9kZS0+dmRpc3BsYXksCj4gPiArCQkJMCwgMCwgMCk7Cj4gPiArCj4g PiArCWZvciAocGxhbmUgPSAwOyBwbGFuZSA8IHBsYW5lX2NudDsgcGxhbmUrKykgewo+ID4gKwkJ Y3JlYXRlX2ZiX2Zvcl9tb2RlX19jbGlwcGluZ19wbGFuZShkYXRhLCBJR1RfUk9UQVRJT05fMCwK PiA+ICsJCQkJCQkgICBMT0NBTF9EUk1fRk9STUFUX01PRF9OT05FLAo+ID4gKwkJCQkJCSAgIERS TV9GT1JNQVRfWFJHQjg4ODgsCj4gPiArCQkJCQkJICAgY2xpcF9zcXVhcmVzW3BsYW5lXS5zaXpl LAo+ID4gKwkJCQkJCSAgICZwbGFuZV9mYnNbcGxhbmVdKTsKPiA+ICsKPiA+ICsJCXNyY3NbcGxh bmVdID0gaWd0X2dldF9jYWlyb19zdXJmYWNlKGRhdGEtPmRybV9mZCwKPiA+ICsJCQkJCQkgICAm cGxhbmVfZmJzW3BsYW5lXSk7Cj4gPiArCQljYWlyb19zZXRfc291cmNlX3N1cmZhY2UoY3IsIHNy Y3NbcGxhbmVdLAo+ID4gKwkJCQkJIGNsaXBfc3F1YXJlc1twbGFuZV0ueCwKPiA+ICsJCQkJCSBj bGlwX3NxdWFyZXNbcGxhbmVdLnkpOwo+ID4gKwkJY2Fpcm9fcmVjdGFuZ2xlKGNyLAo+ID4gKwkJ CQljbGlwX3NxdWFyZXNbcGxhbmVdLngsCj4gPiArCQkJCWNsaXBfc3F1YXJlc1twbGFuZV0ueSwK PiA+ICsJCQkJY2xpcF9zcXVhcmVzW3BsYW5lXS5zaXplLAo+ID4gKwkJCQljbGlwX3NxdWFyZXNb cGxhbmVdLnNpemUpOwo+ID4gKwkJY2Fpcm9fZmlsbChjcik7Cj4gPiArCX0KPiA+ICsKPiA+ICsJ aWd0X2Fzc2VydChjYWlyb19zdGF0dXMoY3IpID09IDApOwo+ID4gKwljYWlyb19kZXN0cm95KGNy KTsKPiA+ICsKPiA+ICsJZm9yIChwbGFuZSA9IDA7IHBsYW5lIDwgcGxhbmVfY250OyBwbGFuZSsr KSB7Cj4gPiArCQljYWlyb19zdXJmYWNlX2Rlc3Ryb3koc3Jjc1twbGFuZV0pOwo+ID4gKwkJaWd0 X3JlbW92ZV9mYihkYXRhLT5kcm1fZmQsICZwbGFuZV9mYnNbcGxhbmVdKTsKPiA+ICsJfQo+ID4g K30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZAo+ID4gK3Rlc3RfcGxhbmVfY2xpcHBpbmdfZm9ybWF0 KGRhdGFfdCAqZGF0YSwKPiA+ICsJCQkgICBlbnVtIHBpcGUgcGlwZSwKPiA+ICsJCQkgICBpZ3Rf b3V0cHV0X3QgKm91dHB1dCwKPiA+ICsJCQkgICBkcm1Nb2RlTW9kZUluZm8gKm1vZGUsCj4gPiAr CQkJICAgc3F1YXJlX3QgKmNsaXBfc3F1YXJlcywKPiA+ICsJCQkgICBpbnQgcGxhbmVfY250LAo+ ID4gKwkJCSAgIHVpbnQ2NF90IHRpbGluZywKPiA+ICsJCQkgICBpZ3Rfcm90YXRpb25fdCByb3Rh dGlvbiwKPiA+ICsJCQkgICB1aW50MzJfdCBmb3JtYXQsCj4gPiArCQkJICAgaWd0X2NyY190ICpy ZWZlcmVuY2VfY3JjKQo+ID4gK3sKPiA+ICsJaW50IHBsYW5lOwo+ID4gKwlpZ3RfcGxhbmVfdCAq cGxhbmVfb2Jqc1s0XTsKPiA+ICsJc3RydWN0IGlndF9mYiBwbGFuZV9mYnNbNF07Cj4gPiArCWln dF9jcmNfdCBjcmM7Cj4gPiArCWludCByZXQ7Cj4gPiArCWJvb2wgYm9ndXNfcGxhbmVzID0gZmFs c2U7Cj4gPiArCj4gPiArCW1lbXNldChwbGFuZV9vYmpzLCAwLCBzaXplb2YocGxhbmVfb2Jqcykp Owo+ID4gKwo+ID4gKwlpZ3RfZGVidWcoInJvdGF0aW9uICVzIHRpbGluZyAlcyBmb3JtYXQgJXNc biIsCj4gPiArCQkgIGlndF9yb3RhdGlvbl9kZWdyZWVzX3N0cihyb3RhdGlvbiksCj4gPiArCQkg IGlndF90aWxpbmdfc3RyKHRpbGluZyksCj4gPiArCQkgIGlndF9mb3JtYXRfc3RyKGZvcm1hdCkp Owo+ID4gKwo+ID4gKwlpZ3Rfb3V0cHV0X3NldF9waXBlKG91dHB1dCwgcGlwZSk7Cj4gPiArCj4g PiArCWZvciAocGxhbmUgPSAwOyBwbGFuZSA8IHBsYW5lX2NudCA7IHBsYW5lKyspIHsKPiA+ICsJ CWlndF9wbGFuZV90ICpvYmogPSBpZ3Rfb3V0cHV0X2dldF9wbGFuZShvdXRwdXQsIHBsYW5lKTsK PiA+ICsJCXN0cnVjdCBpZ3RfZmIgKmZiID0gJnBsYW5lX2Zic1twbGFuZV07Cj4gPiArCQlpbnQg eCA9IGNsaXBfc3F1YXJlc1twbGFuZV0ueDsKPiA+ICsJCWludCB5ID0gY2xpcF9zcXVhcmVzW3Bs YW5lXS55Owo+ID4gKwkJaW50IHNpemUgPSBjbGlwX3NxdWFyZXNbcGxhbmVdLnNpemU7Cj4gPiAr CQl1aW50NjRfdCBfdGlsaW5nID0gdGlsaW5nOwo+ID4gKwkJdWludDMyX3QgX2Zvcm1hdCA9IGZv cm1hdDsKPiA+ICsKPiA+ICsJCWlmIChvYmotPnR5cGUgPT0gRFJNX1BMQU5FX1RZUEVfQ1VSU09S KSB7Cj4gPiArCQkJX3RpbGluZyA9IExPQ0FMX0RSTV9GT1JNQVRfTU9EX05PTkU7Cj4gPiArCQkJ X2Zvcm1hdCA9IERSTV9GT1JNQVRfQVJHQjg4ODg7Cj4gPiArCQl9Cj4gPiArCj4gPiArCQlpZiAo IXN1cHBvcnRlZF9wbGFuZV9jb25mKGRhdGEsIG9iai0+dHlwZSwgX3RpbGluZywgX2Zvcm1hdCwK PiA+ICsJCQkJCSAgcm90YXRpb24sIG1vZGUsIHgsIHksIHNpemUpKQo+ID4gKwkJCWdvdG8gb3V0 Owo+ID4gKwo+ID4gKwkJY3JlYXRlX2ZiX2Zvcl9tb2RlX19jbGlwcGluZ19wbGFuZShkYXRhLCBy b3RhdGlvbixfdGlsaW5nLAo+ID4gKwkJCQkJCSAgIF9mb3JtYXQsIHNpemUsIGZiKTsKPiA+ICsK PiA+ICsJCWlndF9wbGFuZV9zZXRfZmIob2JqLCBmYik7Cj4gPiArCQlpZ3RfZmJfc2V0X3Bvc2l0 aW9uKGZiLCBvYmosIDAsIDApOwo+ID4gKwo+ID4gKwkJaWd0X3BsYW5lX3NldF9zaXplKG9iaiwg c2l6ZSwgc2l6ZSk7Cj4gPiArCQlpZ3RfcGxhbmVfc2V0X3JvdGF0aW9uKG9iaiwgcm90YXRpb24p Owo+ID4gKwkJaWd0X3BsYW5lX3NldF9wb3NpdGlvbihvYmosIHgsIHkpOwo+ID4gKwo+ID4gKwkJ cGxhbmVfb2Jqc1twbGFuZV0gPSBvYmo7Cj4gPiArCX0KPiA+ICsKPiA+ICsJLyoKPiA+ICsJICog Tm90ZSB0aGF0IGEgdW5pdmVyc2FsIGNvbW1pdCBkb2Vzbid0IHN1cHBvcnQgZnVsbCBtb2Rlc2V0 cywgc28gd2UKPiA+ICsJICogaGF2ZSB0byBtYWtlIHN1cmUgdGhhdCB0aGUgZm9sbG93aW5nIG9u bHkgbmVlZHMgdG8gY29tbWl0IGNoYW5nZXMKPiA+ICsJICogdGhhdCBhcmUgY29tcGF0aWJsZSB3 aXRoIGEgZmFzdHNldC4gVGhpcyBzaG91bGQgYmUgZ3VhcmFudGVlZCwKPiA+ICsJICogc2luY2Ug YmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiB3ZSB0b29rIHRoZSByZWZlcmVuY2UgQ1JDIHdo aWNoCj4gPiArCSAqIGxlZnQgdGhlIGRpc3BsYXkgZW5hYmxlZCB3aXRoIHRoZSBtb2RlIHdlIHJl cXVpcmUgaGVyZSBhbmQKPiA+ICsJICogYWZ0ZXJ3YXJkcyB3ZSBvbmx5IGNoYW5nZSBwbGFuZSBw YXJhbWV0ZXJzIChGQiwgcG9zaXRpb24sIHJvdGF0aW9uCj4gPiArCSAqIGV0Yy4pLgo+ID4gKwkg Ki8KPiA+ICsJcmV0ID0gaWd0X2Rpc3BsYXlfdHJ5X2NvbW1pdDIoJmRhdGEtPmRpc3BsYXksIENP TU1JVF9VTklWRVJTQUwpOwo+ID4gKwo+ID4gKwlmb3IgKHBsYW5lID0gMDsgcGxhbmUgPCBwbGFu ZV9jbnQ7IHBsYW5lKyspIHsKPiA+ICsJCWlmKCFib2d1c19wbGFuZV9jb25mKGRhdGEtPmRldmlk LCBwbGFuZV9vYmpzW3BsYW5lXSwKPiA+ICsJCQkJICAgICBtb2RlLT5oZGlzcGxheSwgY2xpcF9z cXVhcmVzW3BsYW5lXS54LAo+ID4gKwkJCQkgICAgIGNsaXBfc3F1YXJlc1twbGFuZV0uc2l6ZSkp IHsKPiAKPiBQdXR0aW5nIHRoYXQgZnVuY3Rpb24gY2FsbCBpbnRvIHRoZSBpZiBsb29rcyBhIGJp dCBmdW5ueSwgSSdkIHB1dCBpdAo+IG91dHNpZGUuCgpUbyBjbGFyaWZ5OiBBbGwgdGhlIGFib3Zl IGNvbW1lbnRzIGFyZSBpbW8gbmljZS10by1oYXZlIGltcHJvdmVtZW50cywgYmVzdApkb25lIGlu IGZvbGxvdy11cCBwYXRjaGVzLgogCk9ubHkgdGhpbmcgdGhhdCBtdXN0IGJlIGZpeGVkIGJlZm9y ZSBtZXJnaW5nIGlzIHRoYXQgdGVzdGNhc2VzIGFjdHVhbGx5CnBhc3MuCi1EYW5pZWwKCj4gSSBh bHNvIGxvb2tlZCBhdCB5b3VyIHJlc3VsdHM6Cj4gCj4gaHR0cHM6Ly9pbnRlbC1nZngtY2kuMDEu b3JnL3RyZWUvZHJtLXRpcC9JR1RQV18xODEzL3NoYXJkcy1hbGwuaHRtbAo+IAo+IChZZXMgeW91 IG5lZWQgdG8ga25vdyB0byByZXBsYWNlIHNoYXJkcy5odG1sIHdpdGggc2hhcmRzLWFsbC5odG1s KS4gWW91cgo+IG5ldyB0ZXN0Y2FzZXMgYXJlIGZhaWxpbmcsIHNvIHRoZXJlJ3MgYSBidWcgc29t ZXdoZXJlLiBOZWVkIHRvIGdldCB0aGF0Cj4gZml4ZWQgZmlyc3QuCj4gCj4gLURhbmllbAo+ID4g KwkJCWJvZ3VzX3BsYW5lcyA9IHRydWU7Cj4gPiArCQkJYnJlYWs7Cj4gPiArCQl9Cj4gPiArCX0K PiA+ICsKPiA+ICsJaWYgKGJvZ3VzX3BsYW5lcykgewo+ID4gKwkJaWd0X2Fzc2VydChyZXQgPT0g MCk7Cj4gPiArCQlpZ3RfcGlwZV9jcmNfY29sbGVjdF9jcmMoZGF0YS0+cGlwZV9jcmMsICZjcmMp Owo+ID4gKwkJaWd0X2Fzc2VydF9jcmNfZXF1YWwocmVmZXJlbmNlX2NyYywgJmNyYyk7Cj4gPiAr CX0gZWxzZSB7Cj4gPiArCQlpZ3RfYXNzZXJ0KHJldCA9PSAtRVJBTkdFKTsKPiA+ICsJfQo+ID4g Kwo+ID4gK291dDoKPiA+ICsJZm9yIChwbGFuZSA9IDA7IHBsYW5lIDwgcGxhbmVfY250OyBwbGFu ZSsrKSB7Cj4gPiArCQlpZiAoIXBsYW5lX29ianNbcGxhbmVdKQo+ID4gKwkJCWNvbnRpbnVlOwo+ ID4gKwkJaWd0X3BsYW5lX3NldF9mYihwbGFuZV9vYmpzW3BsYW5lXSwgTlVMTCk7Cj4gPiArCQlp Z3RfcGxhbmVfc2V0X3JvdGF0aW9uKHBsYW5lX29ianNbcGxhbmVdLCBJR1RfUk9UQVRJT05fMCk7 Cj4gPiArCQlpZ3RfcGxhbmVfc2V0X3Bvc2l0aW9uKHBsYW5lX29ianNbcGxhbmVdLCAwLCAwKTsK PiA+ICsKPiA+ICsJCWlndF9yZW1vdmVfZmIoZGF0YS0+ZHJtX2ZkLCAmcGxhbmVfZmJzW3BsYW5l XSk7Cj4gPiArCX0KPiA+ICsKPiA+ICsJaWd0X291dHB1dF9zZXRfcGlwZShvdXRwdXQsIFBJUEVf QU5ZKTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQKPiA+ICt0ZXN0X3BsYW5lX2NsaXBw aW5nX3NxdWFyZShkYXRhX3QgKmRhdGEsIGVudW0gcGlwZSBwaXBlLAo+ID4gKwkJCSAgIGlndF9v dXRwdXRfdCAqb3V0cHV0LCBkcm1Nb2RlTW9kZUluZm8gKm1vZGUsCj4gPiArCQkJICAgc3F1YXJl X3QgKmNsaXBfc3F1YXJlcywgaW50IHBsYW5lX2NudCkKPiA+ICt7Cj4gPiArCWNvbnN0IHN0cnVj dCB7Cj4gPiArCQl1aW50NjRfdCB0aWxpbmc7Cj4gPiArCQlpZ3Rfcm90YXRpb25fdCByb3RhdGlv bjsKPiA+ICsJfSByb3RhdGlvbnNbXSA9IHsKPiA+ICsJCXsgTE9DQUxfRFJNX0ZPUk1BVF9NT0Rf Tk9ORSwJCUlHVF9ST1RBVElPTl8wIH0sCj4gPiArCj4gPiArCQl7IExPQ0FMX0k5MTVfRk9STUFU X01PRF9YX1RJTEVELAlJR1RfUk9UQVRJT05fMCB9LAo+ID4gKwo+ID4gKwkJeyBMT0NBTF9JOTE1 X0ZPUk1BVF9NT0RfWV9USUxFRCwJSUdUX1JPVEFUSU9OXzAgfSwKPiA+ICsJCXsgTE9DQUxfSTkx NV9GT1JNQVRfTU9EX1lfVElMRUQsCUlHVF9ST1RBVElPTl85MCB9LAo+ID4gKwkJeyBMT0NBTF9J OTE1X0ZPUk1BVF9NT0RfWV9USUxFRCwJSUdUX1JPVEFUSU9OXzE4MCB9LAo+ID4gKwkJeyBMT0NB TF9JOTE1X0ZPUk1BVF9NT0RfWV9USUxFRCwJSUdUX1JPVEFUSU9OXzI3MCB9LAo+ID4gKwo+ID4g KwkJeyBMT0NBTF9JOTE1X0ZPUk1BVF9NT0RfWWZfVElMRUQsCUlHVF9ST1RBVElPTl8wIH0sCj4g PiArCQl7IExPQ0FMX0k5MTVfRk9STUFUX01PRF9ZZl9USUxFRCwJSUdUX1JPVEFUSU9OXzkwIH0s Cj4gPiArCQl7IExPQ0FMX0k5MTVfRk9STUFUX01PRF9ZZl9USUxFRCwJSUdUX1JPVEFUSU9OXzE4 MCB9LAo+ID4gKwkJeyBMT0NBTF9JOTE1X0ZPUk1BVF9NT0RfWWZfVElMRUQsCUlHVF9ST1RBVElP Tl8yNzAgfSwKPiA+ICsJfTsKPiA+ICsJY29uc3QgdWludDMyX3QgZm9ybWF0c1tdID0gewo+ID4g KwkJRFJNX0ZPUk1BVF9SR0I1NjUsCj4gPiArCQlEUk1fRk9STUFUX1hSR0I4ODg4LAo+ID4gKwkJ RFJNX0ZPUk1BVF9BUkdCODg4OCwKPiA+ICsJfTsKPiA+ICsKPiA+ICsJaWd0X2ZiX3QgcmVmZXJl bmNlX2ZiOwo+ID4gKwlpZ3RfY3JjX3QgcmVmZXJlbmNlX2NyYzsKPiA+ICsKPiA+ICsJZm9yIChp bnQgcGxhbmUgPSAwOyBwbGFuZSA8IHBsYW5lX2NudDsgcGxhbmUrKykgewo+ID4gKwkJaWd0X2lu Zm8oIlRlc3RpbmcgY29ubmVjdG9yICVzIG1vZGUgJWR4JWQgdXNpbmcgcGlwZSAlczogJWR4JWRA JWQsJWRcbiIsCj4gPiArCQkJIGlndF9vdXRwdXRfbmFtZShvdXRwdXQpLAo+ID4gKwkJCSBtb2Rl LT5oZGlzcGxheSwgbW9kZS0+dmRpc3BsYXksCj4gPiArCQkJIGttc3Rlc3RfcGlwZV9uYW1lKHBp cGUpLAo+ID4gKwkJCSBjbGlwX3NxdWFyZXNbcGxhbmVdLnNpemUsIGNsaXBfc3F1YXJlc1twbGFu ZV0uc2l6ZSwKPiA+ICsJCQkgY2xpcF9zcXVhcmVzW3BsYW5lXS54LCBjbGlwX3NxdWFyZXNbcGxh bmVdLnkpOwo+ID4gKwl9Cj4gPiArCj4gPiArCXRlc3RfaW5pdChkYXRhLCBwaXBlKTsKPiA+ICsK PiA+ICsJY3JlYXRlX2ZiX2Zvcl9tb2RlX19jbGlwcGluZ19kaXNwbGF5KGRhdGEsIG1vZGUsCj4g PiArCQkJCQkgICAgIGNsaXBfc3F1YXJlcywKPiA+ICsJCQkJCSAgICAgcGxhbmVfY250LAo+ID4g KwkJCQkJICAgICAmcmVmZXJlbmNlX2ZiKTsKPiA+ICsKPiA+ICsJLyoKPiA+ICsJICogQXMgYSB0 ZXN0X2dyYWJfY3JjX2Zvcl9mYigpIGZ1bmN0aW9uIHVzZXMgYSBsZWdhY3kgc3R5bGUgY29tbWl0 Cj4gPiArCSAqIHdoaWNoIGRvZXMgbm90IGFsbG93IGNoYW5naW5nIG9mIHByaW1hcnkgcGxhbmUg cm90YXRpb24gb24gbm9uLWZpcnN0Cj4gPiArCSAqIGNvbW1pdCwgd2UgY2FsbCBpZ3RfZGlzcGxh eV9yZXNldCgpIHRvIG1ha2UgaXQgYXMgYSBmaXJzdCBjb21taXQKPiA+ICsJICogcHJpb3IgdG8g Y2FsbCB0ZXN0X2dyYWJfY3JjX2Zvcl9mYigpLgo+ID4gKwkgKi8KPiA+ICsJaWd0X2Rpc3BsYXlf cmVzZXQoJmRhdGEtPmRpc3BsYXkpOwo+ID4gKwl0ZXN0X2dyYWJfY3JjX2Zvcl9mYihkYXRhLCBv dXRwdXQsIHBpcGUsICZyZWZlcmVuY2VfZmIsICZyZWZlcmVuY2VfY3JjKTsKPiA+ICsJaWd0X3Jl bW92ZV9mYihkYXRhLT5kcm1fZmQsICZyZWZlcmVuY2VfZmIpOwo+ID4gKwo+ID4gKwlmb3IgKGlu dCByb3RhdGlvbiA9IDA7IHJvdGF0aW9uIDwgQVJSQVlfU0laRShyb3RhdGlvbnMpOyByb3RhdGlv bisrKQo+ID4gKwkJZm9yIChpbnQgZm9ybWF0ID0gMDsgZm9ybWF0IDwgQVJSQVlfU0laRShmb3Jt YXRzKTsgZm9ybWF0KyspCj4gPiArCQkJdGVzdF9wbGFuZV9jbGlwcGluZ19mb3JtYXQoZGF0YSwg cGlwZSwgb3V0cHV0LAo+ID4gKwkJCQkJCSAgIG1vZGUsCj4gPiArCQkJCQkJICAgY2xpcF9zcXVh cmVzLAo+ID4gKwkJCQkJCSAgIHBsYW5lX2NudCwKPiA+ICsJCQkJCQkgICByb3RhdGlvbnNbcm90 YXRpb25dLnRpbGluZywKPiA+ICsJCQkJCQkgICByb3RhdGlvbnNbcm90YXRpb25dLnJvdGF0aW9u LAo+ID4gKwkJCQkJCSAgIGZvcm1hdHNbZm9ybWF0XSwKPiA+ICsJCQkJCQkgICAmcmVmZXJlbmNl X2NyYyk7Cj4gPiArCj4gPiArCXRlc3RfZmluaShkYXRhKTsKPiA+ICt9Cj4gPiArCj4gPiArc3Rh dGljIHZvaWQKPiA+ICt0ZXN0X3BsYW5lX2NsaXBwaW5nX3NxdWFyZXMoZGF0YV90ICpkYXRhLCBl bnVtIHBpcGUgcGlwZSwKPiA+ICsJCQkgICAgaWd0X291dHB1dF90ICpvdXRwdXQsIGRybU1vZGVN b2RlSW5mbyAqbW9kZSwKPiA+ICsJCQkgICAgc3F1YXJlX3QgKmNsaXBfc3F1YXJlcywgaW50IHBs YW5lX2NudCkKPiA+ICt7Cj4gPiArCWZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSArPSBwbGFuZV9j bnQpCj4gPiArCQl0ZXN0X3BsYW5lX2NsaXBwaW5nX3NxdWFyZShkYXRhLCBwaXBlLCBvdXRwdXQs IG1vZGUsCj4gPiArCQkJCQkgICBjbGlwX3NxdWFyZXMgKyBpLAo+ID4gKwkJCQkJICAgcGxhbmVf Y250KTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQKPiA+ICt0ZXN0X3BsYW5lX2NsaXBw aW5nKGRhdGFfdCAqZGF0YSwgZW51bSBwaXBlIHBpcGUpCj4gPiArewo+ID4gKwlpZ3Rfb3V0cHV0 X3QgKm91dHB1dDsKPiA+ICsJaW50IGNvbm5lY3RlZF9vdXRzID0gMDsKPiA+ICsKPiA+ICsJZm9y X2VhY2hfdmFsaWRfb3V0cHV0X29uX3BpcGUoJmRhdGEtPmRpc3BsYXksIHBpcGUsIG91dHB1dCkg ewo+ID4gKwkJZHJtTW9kZU1vZGVJbmZvICptb2RlOwo+ID4gKwkJaW50IHNxX3NpemU7Cj4gPiAr CQlpbnQgbWF4X3BsYW5lcyA9IGRhdGEtPmRpc3BsYXkucGlwZXNbcGlwZV0ubl9wbGFuZXM7Cj4g PiArCQlpbnQgcGxhbmVfY250Owo+ID4gKwo+ID4gKwkJcGxhbmVfY250ID0gbWF4X3BsYW5lcyA+ PSA0ID8gNCA6IG1heF9wbGFuZXMgPj0gMiA/IDIgOiAxOwo+ID4gKwo+ID4gKwkJaWd0X291dHB1 dF9zZXRfcGlwZShvdXRwdXQsIHBpcGUpOwo+ID4gKwkJbW9kZSA9IGlndF9vdXRwdXRfZ2V0X21v ZGUob3V0cHV0KTsKPiA+ICsKPiA+ICsJCS8qCj4gPiArCQkgKiBUZXN0IHdpdGggYSBzcXVhcmUg cGxhbmUgYmlnZ2VyIHRoYW4gZWl0aGVyIHRoZSB3aWR0aCBvcgo+ID4gKwkJICogaGVpZ2h0IG9m IHRoZSBtb2RlLiBUaGlzIHNob3VsZCBwYXNzIG9uIGFsbCBwbGF0Zm9ybXMuCj4gPiArCQkgKi8K PiA+ICsJCXNxX3NpemUgPSBtb2RlLT5oZGlzcGxheSA+IG1vZGUtPnZkaXNwbGF5ID8KPiA+ICsJ CQkgIG1vZGUtPmhkaXNwbGF5IDogbW9kZS0+dmRpc3BsYXk7Cj4gPiArCj4gPiArCQljbGlwX3Nx dWFyZXNbMF0ueCA9IC0yOwo+ID4gKwkJY2xpcF9zcXVhcmVzWzBdLnkgPSAtMjsKPiA+ICsJCWNs aXBfc3F1YXJlc1swXS5zaXplID0gc3Ffc2l6ZSArIDQ7Cj4gPiArCj4gPiArCQl0ZXN0X3BsYW5l X2NsaXBwaW5nX3NxdWFyZShkYXRhLCBwaXBlLCBvdXRwdXQsIG1vZGUsCj4gPiArCQkJCQkgICBj bGlwX3NxdWFyZXMsIDEpOwo+ID4gKwo+ID4gKwkJLyoKPiA+ICsJCSAqIFRlc3QgcG9zaXRpb25z IGluIHRoZSA0IGNvcm5lcnMgb2YgdGhlIHNjcmVlbiB3aXRoIGEKPiA+ICsJCSAqIENMSVBQRURf UExBTkVfTUlOX1ZBTElEIHggQ0xJUFBFRF9QTEFORV9NSU5fVkFMSUQgc3F1YXJlCj4gPiArCQkg KiB2aXNpYmxlIGZyb20gdGhlIHBsYW5lLiBUaGVzZSBzaG91bGQgcGFzcyBvbiBhbGwgcGxhdGZv cm1zLgo+ID4gKwkJICovCj4gPiArCQljbGlwX3NxdWFyZXNbMF0ueCA9IC1DTElQUEVEX1BMQU5F X1NNQUxMX1NJWkUgKwo+ID4gKwkJCQkgICAgIENMSVBQRURfUExBTkVfTUlOX1ZBTElEOwo+ID4g KwkJY2xpcF9zcXVhcmVzWzBdLnkgPSAtQ0xJUFBFRF9QTEFORV9TTUFMTF9TSVpFICsKPiA+ICsJ CQkJICAgICBDTElQUEVEX1BMQU5FX01JTl9WQUxJRDsKPiA+ICsJCWNsaXBfc3F1YXJlc1swXS5z aXplID0gQ0xJUFBFRF9QTEFORV9TTUFMTF9TSVpFOwo+ID4gKwo+ID4gKwkJY2xpcF9zcXVhcmVz WzFdLnggPSAtQ0xJUFBFRF9QTEFORV9TTUFMTF9TSVpFICsKPiA+ICsJCQkJICAgICBDTElQUEVE X1BMQU5FX01JTl9WQUxJRDsKPiA+ICsJCWNsaXBfc3F1YXJlc1sxXS55ID0gbW9kZS0+dmRpc3Bs YXkgLQo+ID4gKwkJCQkgICAgQ0xJUFBFRF9QTEFORV9NSU5fVkFMSUQ7Cj4gPiArCQljbGlwX3Nx dWFyZXNbMV0uc2l6ZSA9IENMSVBQRURfUExBTkVfU01BTExfU0laRTsKPiA+ICsKPiA+ICsJCWNs aXBfc3F1YXJlc1syXS54ID0gbW9kZS0+aGRpc3BsYXkgLQo+ID4gKwkJCQkgICAgQ0xJUFBFRF9Q TEFORV9NSU5fVkFMSUQ7Cj4gPiArCQljbGlwX3NxdWFyZXNbMl0ueSA9IC1DTElQUEVEX1BMQU5F X1NNQUxMX1NJWkUgKwo+ID4gKwkJCQkgICAgIENMSVBQRURfUExBTkVfTUlOX1ZBTElEOwo+ID4g KwkJY2xpcF9zcXVhcmVzWzJdLnNpemUgPSBDTElQUEVEX1BMQU5FX1NNQUxMX1NJWkU7Cj4gPiAr Cj4gPiArCQljbGlwX3NxdWFyZXNbM10ueCA9IG1vZGUtPmhkaXNwbGF5IC0KPiA+ICsJCQkJICAg IENMSVBQRURfUExBTkVfTUlOX1ZBTElEOwo+ID4gKwkJY2xpcF9zcXVhcmVzWzNdLnkgPSBtb2Rl LT52ZGlzcGxheSAtCj4gPiArCQkJCSAgICBDTElQUEVEX1BMQU5FX01JTl9WQUxJRDsKPiA+ICsJ CWNsaXBfc3F1YXJlc1szXS5zaXplID0gQ0xJUFBFRF9QTEFORV9TTUFMTF9TSVpFOwo+ID4gKwo+ ID4gKwkJdGVzdF9wbGFuZV9jbGlwcGluZ19zcXVhcmVzKGRhdGEsIHBpcGUsIG91dHB1dCwgbW9k ZSwKPiA+ICsJCQkJCSAgICBjbGlwX3NxdWFyZXMsIHBsYW5lX2NudCk7Cj4gPiArCj4gPiArCQkv Kgo+ID4gKwkJICogVGVzdCBwb3NpdGlvbnMgaW4gdGhlIDQgY29ybmVycyBvZiB0aGUgc2NyZWVu IHdpdGggYQo+ID4gKwkJICogMiB4IDIgc3F1YXJlIHZpc2libGUgZnJvbSB0aGUgcGxhbmUuIFRo ZXNlIGFyZSB2YWxpZCBvbiBhbGwKPiA+ICsJCSAqIHBsYXRmb3JtcyBleGNlcHQgb24gR0xLL0NO TCB3aGVyZSBsZXNzIHRoYW4KPiA+ICsJCSAqIENMSVBQRURfUExBTkVfTUlOX1ZBTElEIHBpeGVs cyB2aXNpYmxlIG9uIHRoZSBsZWZ0L3JpZ2h0Cj4gPiArCQkgKiBlZGdlcyBvZiB0aGUgc2NyZWVu IG1heSBjYXVzZSBGSUZPIHVuZGVyZmxvdyBhbmQgZGlzcGxheQo+ID4gKwkJICogY29ycnVwdGlv bi4KPiA+ICsJCSAqCj4gPiArCQkgKiBUaGUgY3Vyc29yIHBsYW5lIGlzIGFuIGV4Y2VwdGlvbiB3 aXRob3V0IHRoaXMgcHJvYmxlbS4KPiA+ICsJCSAqCj4gPiArCQkgKiBVc2UgMiB4IDIgc2l6ZSBh cyBvdGhlciAob2RkKSBzaXplcyBtYXkgcmVzdWx0IGluIGFuCj4gPiArCQkgKiBpbmNvcnJlY3Qg Q1JDIGZvciB0aGUgY3Vyc29yIHBsYW5lIGV2ZW4gdGhvdWdoIGl0IGRpc3BsYXlzCj4gPiArCQkg KiBjb3JyZWN0bHkgYW5kIGNhdXNlcyBubyB1bmRlcmZsb3cuCj4gPiArCQkgKi8KPiA+ICsJCWNs aXBfc3F1YXJlc1swXS54ID0gLUNMSVBQRURfUExBTkVfU01BTExfU0laRSArIDI7Cj4gPiArCQlj bGlwX3NxdWFyZXNbMF0ueSA9IC1DTElQUEVEX1BMQU5FX1NNQUxMX1NJWkUgKyAyOwo+ID4gKwkJ Y2xpcF9zcXVhcmVzWzBdLnNpemUgPSBDTElQUEVEX1BMQU5FX1NNQUxMX1NJWkU7Cj4gPiArCj4g PiArCQljbGlwX3NxdWFyZXNbMV0ueCA9IC1DTElQUEVEX1BMQU5FX1NNQUxMX1NJWkUgKyAyOwo+ ID4gKwkJY2xpcF9zcXVhcmVzWzFdLnkgPSBtb2RlLT52ZGlzcGxheSAtIDI7Cj4gPiArCQljbGlw X3NxdWFyZXNbMV0uc2l6ZSA9IENMSVBQRURfUExBTkVfU01BTExfU0laRTsKPiA+ICsKPiA+ICsJ CWNsaXBfc3F1YXJlc1syXS54ID0gbW9kZS0+aGRpc3BsYXkgLSAyOwo+ID4gKwkJY2xpcF9zcXVh cmVzWzJdLnkgPSAtQ0xJUFBFRF9QTEFORV9TTUFMTF9TSVpFICsgMjsKPiA+ICsJCWNsaXBfc3F1 YXJlc1syXS5zaXplID0gQ0xJUFBFRF9QTEFORV9TTUFMTF9TSVpFOwo+ID4gKwo+ID4gKwkJY2xp cF9zcXVhcmVzWzNdLnggPSBtb2RlLT5oZGlzcGxheSAtIDI7Cj4gPiArCQljbGlwX3NxdWFyZXNb M10ueSA9IG1vZGUtPnZkaXNwbGF5IC0gMjsKPiA+ICsJCWNsaXBfc3F1YXJlc1szXS5zaXplID0g Q0xJUFBFRF9QTEFORV9TTUFMTF9TSVpFOwo+ID4gKwo+ID4gKwkJdGVzdF9wbGFuZV9jbGlwcGlu Z19zcXVhcmVzKGRhdGEsIHBpcGUsIG91dHB1dCwgbW9kZSwKPiA+ICsJCQkJCSAgICBjbGlwX3Nx dWFyZXMsIHBsYW5lX2NudCk7Cj4gPiArCj4gPiArCQljb25uZWN0ZWRfb3V0cysrOwo+ID4gKwl9 Cj4gPiArCj4gPiArCWlndF9za2lwX29uKGNvbm5lY3RlZF9vdXRzID09IDApOwo+ID4gK30KPiA+ ICsKPiA+ICBzdGF0aWMgdm9pZAo+ID4gIHJ1bl90ZXN0c19mb3JfcGlwZV9wbGFuZShkYXRhX3Qg KmRhdGEsIGVudW0gcGlwZSBwaXBlKQo+ID4gIHsKPiA+IEBAIC01ODEsNiArMTA4MSw5IEBAIHJ1 bl90ZXN0c19mb3JfcGlwZV9wbGFuZShkYXRhX3QgKmRhdGEsIGVudW0gcGlwZSBwaXBlKQo+ID4g IAkJICAgICAga21zdGVzdF9waXBlX25hbWUocGlwZSkpCj4gPiAgCQl0ZXN0X3BsYW5lX3Bhbm5p bmcoZGF0YSwgcGlwZSwgVEVTVF9QQU5OSU5HX0JPVFRPTV9SSUdIVCB8Cj4gPiAgCQkJCQkgICAg ICAgVEVTVF9TVVNQRU5EX1JFU1VNRSk7Cj4gPiArCWlndF9zdWJ0ZXN0X2YoInBsYW5lLWNsaXBw aW5nLXBpcGUtJXMtcGxhbmVzIiwKPiA+ICsJCSAgICAgIGttc3Rlc3RfcGlwZV9uYW1lKHBpcGUp KQo+ID4gKwkJdGVzdF9wbGFuZV9jbGlwcGluZyhkYXRhLCBwaXBlKTsKPiA+ICB9Cj4gPiAgCj4g PiAgCj4gPiBAQCAtNTkzLDggKzEwOTYsMjEgQEAgaWd0X21haW4KPiA+ICAJaWd0X3NraXBfb25f c2ltdWxhdGlvbigpOwo+ID4gIAo+ID4gIAlpZ3RfZml4dHVyZSB7Cj4gPiArCQlpbnQgcmV0Owo+ ID4gKwo+ID4gIAkJZGF0YS5kcm1fZmQgPSBkcm1fb3Blbl9kcml2ZXJfbWFzdGVyKERSSVZFUl9J TlRFTCk7Cj4gPiAgCj4gPiArCQlkYXRhLmRldmlkID0gaW50ZWxfZ2V0X2RybV9kZXZpZChkYXRh LmRybV9mZCk7Cj4gPiArCj4gPiArCQlkYXRhLm1heF9jdXJ3ID0gNjQ7Cj4gPiArCQlkYXRhLm1h eF9jdXJoID0gNjQ7Cj4gPiArCQlyZXQgPSBkcm1HZXRDYXAoZGF0YS5kcm1fZmQsIERSTV9DQVBf Q1VSU09SX1dJRFRILAo+ID4gKwkJCQkmZGF0YS5tYXhfY3Vydyk7Cj4gPiArCQlpZ3RfYXNzZXJ0 KHJldCA9PSAwIHx8IGVycm5vID09IEVJTlZBTCk7Cj4gPiArCQlyZXQgPSBkcm1HZXRDYXAoZGF0 YS5kcm1fZmQsIERSTV9DQVBfQ1VSU09SX0hFSUdIVCwKPiA+ICsJCQkJJmRhdGEubWF4X2N1cmgp Owo+ID4gKwkJaWd0X2Fzc2VydChyZXQgPT0gMCB8fCBlcnJubyA9PSBFSU5WQUwpOwo+ID4gKwo+ ID4gIAkJa21zdGVzdF9zZXRfdnRfZ3JhcGhpY3NfbW9kZSgpOwo+ID4gIAo+ID4gIAkJaWd0X3Jl cXVpcmVfcGlwZV9jcmMoZGF0YS5kcm1fZmQpOwo+ID4gLS0gCj4gPiAyLjE4LjAKPiA+IAo+IAo+ IC0tIAo+IERhbmllbCBWZXR0ZXIKPiBTb2Z0d2FyZSBFbmdpbmVlciwgSW50ZWwgQ29ycG9yYXRp b24KPiBodHRwOi8vYmxvZy5mZndsbC5jaAoKLS0gCkRhbmllbCBWZXR0ZXIKU29mdHdhcmUgRW5n aW5lZXIsIEludGVsIENvcnBvcmF0aW9uCmh0dHA6Ly9ibG9nLmZmd2xsLmNoCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmlndC1kZXYgbWFpbGluZyBsaXN0 CmlndC1kZXZAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Au b3JnL21haWxtYW4vbGlzdGluZm8vaWd0LWRldgo=