From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dave Gordon Subject: Re: [PATCH 09/15] drm/i915: GuC submission setup, phase 1 Date: Fri, 19 Jun 2015 18:02:33 +0100 Message-ID: <55844B29.3040605@intel.com> References: <1434393394-21002-1-git-send-email-david.s.gordon@intel.com> <1434393394-21002-10-git-send-email-david.s.gordon@intel.com> <20150615213238.GA1705@nuc-i3427.alporthouse.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTP id 37B0D6E693 for ; Fri, 19 Jun 2015 10:02:37 -0700 (PDT) In-Reply-To: <20150615213238.GA1705@nuc-i3427.alporthouse.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chris Wilson , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gMTUvMDYvMTUgMjI6MzIsIENocmlzIFdpbHNvbiB3cm90ZToKPiBPbiBNb24sIEp1biAxNSwg MjAxNSBhdCAwNzozNjoyN1BNICswMTAwLCBEYXZlIEdvcmRvbiB3cm90ZToKPj4gK3N0YXRpYyBz dHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqZ2VtX2FsbG9jYXRlX2d1Y19vYmooc3RydWN0IGRy bV9kZXZpY2UgKmRldiwKPj4gKwkJCQkJCQl1MzIgc2l6ZSkKPj4gK3sKPj4gKwlzdHJ1Y3QgZHJt X2k5MTVfZ2VtX29iamVjdCAqb2JqOwo+PiArCj4+ICsJb2JqID0gaTkxNV9nZW1fYWxsb2Nfb2Jq ZWN0KGRldiwgc2l6ZSk7Cj4+ICsJaWYgKCFvYmopCj4+ICsJCXJldHVybiBOVUxMOwo+IAo+IERv ZXMgaXQgbmVlZCB0byBiZSBhIHNobWVtZnMgb2JqZWN0PwoKSXQgbmVlZHMgdG8gYmUgcGVybWFu ZW50bHkgaW4gUkFNLCBzbyBwcm9iYWJseSBub3QuIEJ1dCBJIGRvbid0IHNlZSBhbgphbGxvY2F0 b3IgdGhhdCBnaXZlcyB5b3UgYSBHRU0gbWVtb3J5IG9iamVjdCAvd2l0aG91dC8gYmFja2luZyBz dG9yZS4gRG8Kd2UgaGF2ZSBvbmU/Cgo+PiArCWlmIChpOTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2Vz KG9iaikpIHsKPj4gKwkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoJm9iai0+YmFzZSk7Cj4+ ICsJCXJldHVybiBOVUxMOwo+PiArCX0KPiAKPiBUaGlzIGlzIGEgcmFuZG9tIGZ1bmN0aW9uIGNh bGwuCgpXaGljaCBpcz8gVW5yZWZlcmVuY2luZyB0aGUgbmV3bHktYWxsb2NhdGVkIG9iamVjdCBi ZWZvcmUgcmV0dXJuaW5nPwpPdGhlcndpc2UgaXQgd2lsbCBsZWFrIDooCgpQcmVzdW1hYmx5IGlm IHRoZSBvYmplY3QgZGlkbid0IGhhdmUgYmFja2luZyBzdG9yZSwgdGhlIGdldF9wYWdlcygpCndv dWxkIGJlIHVubmVjZXNzYXJ5IGFzIHRoZXkgd291bGQgYWxyZWFkeSBiZSByZXNpZGVudD8gT3Ig d291bGQgdGhleQpub3QgZXhpc3QgdW50aWwgdGhlIGZpcnN0IGdldF9wYWdlcyBjYWxsIGluc3Rh bnRpYXRlZCB0aGVtPwoKPj4gKwlpZiAoaTkxNV9nZW1fb2JqX2dndHRfcGluKG9iaiwgUEFHRV9T SVpFLAo+PiArCQkJUElOX09GRlNFVF9CSUFTIHwgR1VDX1dPUENNX1NJWkVfVkFMVUUpKSB7Cj4+ ICsJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKCZvYmotPmJhc2UpOwo+PiArCQlyZXR1cm4g TlVMTDsKPiAKPiBIb3cgYWJvdXQgcmVwb3J0aW5nIHRoZSByaWdodCBlcnJvciBjb2RlPwoKRG9l c24ndCBhZGQgYW55dGhpbmcuIEFsbG9jYXRpb24gZmFpbHVyZSBpcyBnb2luZyB0byBiZSBmYXRh bCBhbnl3YXkuCkFuZCBpOTE1X2dlbV9hbGxvY19vYmplY3QoKSBqdXN0IHJldHVybnMgTlVMTCBm b3IgZmFpbHVyZSwgc28gd2UnZCBoYXZlCnRvICptYWtlIHVwKiBhbiBlcnJvciBjb2RlIGZvciB0 aGF0IGNhc2UgOigKCk9oLCBhbmQgRVJSX1BUUi9QVFJfRVJSIGFyZSB1Z2x5LgoKPj4gKwl9Cj4+ ICsKPj4gKwlyZXR1cm4gb2JqOwo+PiArfQo+PiArCj4+ICsvKioKPj4gKyAqIGdlbV9yZWxlYXNl X2d1Y19vYmooKSAtIFJlbGVhc2UgZ2VtIG9iamVjdCBhbGxvY2F0ZWQgZm9yIEd1QyB1c2FnZQo+ PiArICogQG9iajoJZ2VtIG9iaiB0byBiZSByZWxlYXNlZAo+PiArICAqLwo+PiArc3RhdGljIHZv aWQgZ2VtX3JlbGVhc2VfZ3VjX29iaihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQo+ PiArewo+PiArCWlmICghb2JqKQo+PiArCQlyZXR1cm47Cj4+ICsKPj4gKwlpZiAoaTkxNV9nZW1f b2JqX2lzX3Bpbm5lZChvYmopKQo+PiArCQlpOTE1X2dlbV9vYmplY3RfZ2d0dF91bnBpbihvYmop Owo+IAo+IFdoYXQ/CgpUaGUgb2JqZWN0IC9zaG91bGQvIGJlIHBpbm5lZCB3aGVuIHdlIGFycml2 ZSBoZXJlLCB0aGFua3MgdG8gdGhlCmk5MTVfZ2VtX29ial9nZ3R0X3BpbigpIGNhbGwgZGlzY3Vz c2VkIGFib3ZlLiBXZSBjb3VsZCBqdXN0IGFsd2F5cwp1bnBpbiwgYW5kIHNlZSB3aGV0aGVyIHdl IHRyaWdnZXIgdGhpczoKCiAgICAgICAgV0FSTl9PTih2bWEtPnBpbl9jb3VudCA9PSAwKTsKCmlu c2lkZSBpOTE1X2dlbV9vYmplY3RfZ2d0dF91bnBpbigpLiBUaGUgdGVzdCBpcyBqdXN0IGluIGNh c2UgdGhlcmUncyBhbgplcnJvciBwYXRoIHdoZXJlIHRoZSBvYmplY3QgYmVpbmcgcmVsZWFzZWQg d2Fzbid0IGluIGZhY3QgcGlubmVkLgoKPj4gKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSgm b2JqLT5iYXNlKTsKPj4gK30KPj4gKwo+PiArLyoKPj4gKyAqIFNldCB1cCB0aGUgbWVtb3J5IHJl c291cmNlcyB0byBiZSBzaGFyZWQgd2l0aCB0aGUgR3VDLiAgQXQgdGhpcyBwb2ludCwKPj4gKyAq IHdlIHJlcXVpcmUganVzdCBvbmUgb2JqZWN0IHRoYXQgY2FuIGJlIG1hcHBlZCB0aHJvdWdoIHRo ZSBHR1RULgo+PiArICovCj4+ICtpbnQgaTkxNV9ndWNfc3VibWlzc2lvbl9pbml0KHN0cnVjdCBk cm1fZGV2aWNlICpkZXYpCj4+ICt7Cj4+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiAKPiBCbGVoLgoKQ3Jvc3MtZmlsZSBpbnRlcmZhY2Us IG5vbnN0YXRpYywgaGVuY2UgcGFzc2VzICdkZXYnOyBhbHNvIGl0IG5lZWRzICdkZXYnCmFueXdh eSwgc28gdGhlcmUncyBubyBnYWluIGluIHBhc3NpbmcgZGV2X3ByaXYuIEFuZCBkZXZfcHJpdgoo aS5lLiBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSkgaXNuJ3QgZXZlbiBpbiBzY29wZSB3aGVuIHRo aXMgZnVuY3Rpb24gaXMKZGVjbGFyZWQgaW4gdGhlIGhlYWRlciBmaWxlLgoKPj4gKwljb25zdCBz aXplX3QgY3R4c2l6ZSA9IHNpemVvZihzdHJ1Y3QgZ3VjX2NvbnRleHRfZGVzYyk7Cj4+ICsJY29u c3Qgc2l6ZV90IHBvb2xzaXplID0gTUFYX0dVQ19HUFVfQ09OVEVYVFMgKiBjdHhzaXplOwo+PiAr CWNvbnN0IHNpemVfdCBnZW1zaXplID0gcm91bmRfdXAocG9vbHNpemUsIFBBR0VfU0laRSk7Cj4+ ICsJc3RydWN0IGludGVsX2d1YyAqZ3VjID0gJmRldl9wcml2LT5ndWM7Cj4+ICsKPj4gKwlpZiAo IWk5MTUuZW5hYmxlX2d1Y19zdWJtaXNzaW9uKQo+PiArCQlyZXR1cm4gMDsgLyogbm90IGVuYWJs ZWQgICovCj4+ICsKPj4gKwlpZiAoZ3VjLT5jdHhfcG9vbF9vYmopCj4+ICsJCXJldHVybiAwOyAv KiBhbHJlYWR5IGFsbG9jYXRlZCAqLwo+IAo+IEVoPyBXaGVyZSBoYXZlIHlvdSBob29rZWQgaW50 by4uLiBTbyBsb29raW5nIGF0IHRoYXQsIGl0IGxvb2tzIGxpa2UgeW91Cj4gd2FudCB0byBtb3Zl IHRoaXMgaW50byB0aGUgZGV2aWNlIGluaXRpYWxpc2F0aW9uIHJhdGhlciB0aGFuIGd1Ywo+IGZp cm13YXJlIGxvYWQuIFRvIG1lIGF0IGxlYXN0IHRoZXkgYXJlIGNvbmNlcHR1YWxseSBzZXBhcmF0 ZSBzdGFnZXMsIGFuZAo+IGp1ZGdpbmcgYnkgdGhlIGFib3ZlIGNvbWJpbmluZyB0aGVtIGhhcyBy ZXN1bHRlZCBpbiB2ZXJ5IGNsdW1zeSBjb2RlLgoKU28gLi4uIHdlIGRvbid0IHdhbnQgdG8gYWxs b2NhdGUgYW55IEd1Qy1yZWxhdGVkIHN0cnVjdHVyZXMgdW5sZXNzIHdlJ3JlCmdvaW5nIGF0IGxl YXN0IHRyeSB0byB1c2UgdGhlIEd1Qywgc28gdGhpcyBoYXMgdG8gY29tZSAvYWZ0ZXIvIGZpcm13 YXJlCmZldGNoIGFuZCB2YWxpZGF0aW9uLiBPVE9IIHdlIGNhbid0IGFjdHVhbGx5IGZpcmUgdXAg dGhlIEd1QyB1bnRpbCBhZnRlcgp0aGVzZSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQsIGJlY2F1 c2UgdGhlIEdHVFQgYWRkcmVzcyBvZiB0aGUKY3R4X3Bvb2xfb2JqIGhhcyB0byBiZSBwYXNzZWQg dG8gdGhlIEd1QyBmaXJtd2FyZSBhcyBvbmUgb2YgaXRzIHN0YXJ0dXAKcGFyYW1ldGVycy4gVGh1 cywgdGhlIG9ubHkgcGxhY2UgdG8gZG8gdGhpcyBhbGxvY2F0aW9uIGlzIGluIGJldHdlZW4KZGVj aWRpbmcgdG8gdHJhbnNmZXIgdGhlIGYvdyB0byB0aGUgR3VDIGFuZCBhY3R1YWxseSBkb2luZyBz by4KCkhlbmNlLCB0aGUgR3VDIGxvYWRpbmcgY29kZSBjYWxscyB0aGlzIGVhY2ggdGltZSB3ZSdy ZSBhYm91dCB0byBzcXVpcnQKdGhlIGYvdyBpbnRvIHRoZSBHdUM7IGJ1dCwgd2UgZG9uJ3QgbmVl ZCB0byBhbGxvY2F0ZSB0aGlzIG1vcmUgdGhhbiBvbmNlCihPVE9IIGl0IHdvdWxkIGJlIGEgdmlv bGF0aW9uIG9mIG1vZHVsYXJpdHkgZm9yIHRoZSBsb2FkZXIgdG8ga25vdyB0aGF0Owpvbmx5IHRo ZSBzdWJtaXNzaW9uIGNvZGUgbmVlZHMgdG8ga25vdyB0aGF0IGxpdHRsZSBkZXRhaWwpLiBTbyB3 ZSBlbmQgdXAKd2l0aCB0aGUgYWJvdmUgZG8tdGhpcy1vbmx5LW9uY2UgY29kZS4KCj4+ICsJZ3Vj LT5jdHhfcG9vbF9vYmogPSBnZW1fYWxsb2NhdGVfZ3VjX29iaihkZXZfcHJpdi0+ZGV2LCBnZW1z aXplKTsKPj4gKwlpZiAoIWd1Yy0+Y3R4X3Bvb2xfb2JqKQo+PiArCQlyZXR1cm4gLUVOT01FTTsK Pj4gKwo+PiArCXNwaW5fbG9ja19pbml0KCZkZXZfcHJpdi0+Z3VjLmhvc3QyZ3VjX2xvY2spOwo+ PiArCj4+ICsJaWRhX2luaXQoJmd1Yy0+Y3R4X2lkcyk7Cj4+ICsKPj4gKwltZW1zZXQoZ3VjLT5k b29yYmVsbF9iaXRtYXAsIDAsIHNpemVvZihndWMtPmRvb3JiZWxsX2JpdG1hcCkpOwo+PiArCWd1 Yy0+ZGJfY2FjaGVsaW5lID0gMDsKPiAKPiBCZWZvcmUgeW91IHJlbGllZCBvbiBndWMgYmVpbmcg emVyb2VkLCBhbmQgbm93IHlvdSBtZW1zZXQgaXQgYWdhaW4uCgpIbW0gLi4uIHBlcmhhcHMgd2Ug c2hvdWxkIHJlemVybyBzb21lIG9mIHRoZXNlIHRoaW5ncyAvZXZlcnkvIHRpbWUgaW5zdGVhZD8K Ci9tZSBleGFtaW5lcyBjb2RlIC4uLgoKTm9wZTsgaXQgbG9va3MgbGlrZSBldmVyeXRoaW5nIGlz IG9uY2UgYWdhaW4gemVybyBhdCB0aGUgcG9pbnQgd2hlbiB0aGlzCmZ1bmN0aW9uIHRha2VzIHRo ZSBlYXJseSBleGl0LgoKPj4gKwlyZXR1cm4gMDsKPj4gK30KPj4gKwo+PiArdm9pZCBpOTE1X2d1 Y19zdWJtaXNzaW9uX2Zpbmkoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPj4gK3sKPj4gKwlzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+PiArCXN0 cnVjdCBpbnRlbF9ndWMgKmd1YyA9ICZkZXZfcHJpdi0+Z3VjOwo+PiArCj4+ICsJZ2VtX3JlbGVh c2VfZ3VjX29iaihkZXZfcHJpdi0+Z3VjLmxvZ19vYmopOwo+PiArCWd1Yy0+bG9nX29iaiA9IE5V TEw7Cj4+ICsKPj4gKwlpZiAoZ3VjLT5jdHhfcG9vbF9vYmopCj4+ICsJCWlkYV9kZXN0cm95KCZn dWMtPmN0eF9pZHMpOwo+IAo+IEludGVyZXN0aW5nIGd1YXJkLiBNYXliZSBqdXN0IG1ha2UgdGhl IEd1QyBjb250cm9sbGVyIGEgcG9pbnRlciBmcm9tCj4gaTkxNSBhbmQgdGhlbiB5b3UgY2FuIGRv IGEgbW9yZSBuYXR1cmFsIGlmIChpOTE1LT5ndWMgPT0gTlVMTCkgcmV0dXJuOwoKVGhhdCB0ZXN0 IHdhcyBiZWNhdXNlIHRoZXJlJ3Mgbm8gd2F5IHRvIHRlbGwgZnJvbSBjdHhfaWRzIGl0c2VsZiB3 aGV0aGVyCml0IHdhcyBpbml0aWFsaXNlZCAoaW4gYW55IGNhc2UsIGl0J3MgYSBibGFjayBib3gg YXMgZmFyIGFzIEknbQpjb25jZXJuZWQpLiBCdXQgdGhlIGluaXQgY29kZSBhYm92ZSBndWFyYW50 ZWVzIHRoYXQgaWZmIHRoZSBwb29sIHdhcwphbGxvY2F0ZWQsIHRoZW4gdGhlIHJlc3Qgb2YgdGhl IGluaXRpYWxpc2F0aW9uIHdhcyBhbHNvIGRvbmUsIHNvIHdlCnNob3VsZCBjYWxsIGlkYV9kZXN0 cm95KCkuCgpJIHdvdWxkbid0IG9iamVjdCB0byBjaGFuZ2luZyB0aGUgaW50ZWxfZ3VjIHRvIGEg c2VwYXJhdGUgYWxsb2NhdGlvbgpyYXRoZXIgdGhhbiBlbWJlZGRpbmcgaXQuIFdlJ2QgbmVlZCB0 byBhZGQgYSBiYWNrcG9pbnRlciB0aG91Z2ggYXMgd2UKY3VycmVudGx5IHVzZSBjb250YWluZXJf b2YoKSBpbnNpZGUgdGhlIGd1Y190b19pOTE1IG1hY3JvLiBCdXQgeW91J2QKc3RpbGwgZW5kIHVw IHdpdGggc29tZXRoaW5nIGxpa2UgdGhlIGFib3ZlLCBiZWNhdXNlIHRoZSBhbGxvY2F0aW9uIG9m CnRoZSBjdHhfcG9vbCBpcyBzdGlsbCBhIHNlcGFyYXRlIHN0ZXAgdGhhdCBjYW4gZmFpbCBhZnRl ciB0aGUgaW50ZWxfZ3VjCnN0cnVjdHVyZSBoYXMgYmVlbiBhbGxvY2F0ZWQ7IGFuZCB5b3UgbmVl ZCB0aGUgZi93LWxvYWRpbmctcmVsYXRlZCBkYXRhCnZlcnkgZWFybHkuIFRoZSBvbmx5IHNhdmlu ZyBpcyBhIHNtYWxsIGFtb3VudCBvZiBtZW1vcnksIGZvciBhbiBjb3N0IG9mCmV4dHJhIG1lbW9y eSBkZXJlZmVyZW5jZSBhdCB2YXJpb3VzIHBvaW50cy4gU28gcHJvYmFibHkgbm90IHdvcnRoIGl0 LgoKPj4gKwlnZW1fcmVsZWFzZV9ndWNfb2JqKGd1Yy0+Y3R4X3Bvb2xfb2JqKTsKPj4gKwlndWMt PmN0eF9wb29sX29iaiA9IE5VTEw7Cj4+ICt9Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9ndWMuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Yy5oCj4+ IGluZGV4IDBiNDQyNjUuLjA2YjY4YzIgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2d1Yy5oCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Yy5o Cj4+IEBAIC0xNzEsNCArMTcxLDggQEAgZXh0ZXJuIHZvaWQgaW50ZWxfZ3VjX3Vjb2RlX2luaXQo c3RydWN0IGRybV9kZXZpY2UgKmRldik7Cj4+ICBleHRlcm4gaW50IGludGVsX2d1Y191Y29kZV9s b2FkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGJvb2wgd2FpdCk7Cj4+ICBleHRlcm4gdm9pZCBp bnRlbF9ndWNfdWNvZGVfZmluaShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKPj4gIAo+PiArLyog aTkxNV9ndWNfc3VibWlzc2lvbi5jICovCj4+ICtpbnQgaTkxNV9ndWNfc3VibWlzc2lvbl9pbml0 KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwo+PiArdm9pZCBpOTE1X2d1Y19zdWJtaXNzaW9uX2Zp bmkoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Cj4+ICsKPj4gICNlbmRpZgo+PiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3VjX2xvYWRlci5jIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfZ3VjX2xvYWRlci5jCj4+IGluZGV4IDE2ZWVmNGMuLjBmNzQ4NzYgMTAw NjQ0Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Y19sb2FkZXIuYwo+PiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ndWNfbG9hZGVyLmMKPj4gQEAgLTExMSw2 ICsxMTEsMjEgQEAgc3RhdGljIHZvaWQgc2V0X2d1Y19pbml0X3BhcmFtcyhzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4+ICAJCQlpOTE1Lmd1Y19sb2dfbGV2ZWwgPDwgR1VDX0xP R19WRVJCT1NJVFlfU0hJRlQ7Cj4+ICAJfQo+PiAgCj4+ICsJLyogSWYgR3VDIHNjaGVkdWxpbmcg aXMgZW5hYmxlZCwgc2V0dXAgcGFyYW1zIGhlcmUuICovCj4+ICsJaWYgKGk5MTUuZW5hYmxlX2d1 Y19zdWJtaXNzaW9uKSB7Cj4+ICsJCXUzMiBwZ3MgPSBpOTE1X2dlbV9vYmpfZ2d0dF9vZmZzZXQo ZGV2X3ByaXYtPmd1Yy5jdHhfcG9vbF9vYmopOwo+PiArCQl1MzIgY3R4X2luXzE2ID0gTUFYX0dV Q19HUFVfQ09OVEVYVFMgLyAxNjsKPiAKPiBTbyByZWFsbHkgeW91IGRpZG4ndCBuZWVkIHRvIHBp biB0aGUgY3R4X3Bvb2xfb2JqIHVudGlsIHRoaXMgcG9pbnQ/CgpQb3NzaWJseS4gQnV0IHRoYXQn cyBub3QgbG9uZyBhZnRlciB0aGUgYWxsb2NhdGlvbiBhYm92ZSAoaXQncyBjYWxsZWQKZnJvbSB0 aGUgbmV4dCBmdW5jdGlvbiB0aGF0IHRoZSBjYWxsZXIgb2YgaTkxNV9ndWNfc3VibWlzc2lvbl9p bml0KCkKY2FsbHMgYWZ0ZXIgYSBzdWNjZXNzZnVsIHJldHVybiBmcm9tIHRoYXQgZnVuY3Rpb24p LgoKaW50ZWxfZ3VjX3Vjb2RlX2xvYWQoKQogIGk5MTVfZ3VjX3N1Ym1pc3Npb25faW5pdCgpCiAg ICBnZW1fYWxsb2NhdGVfZ3VjX29iaigpIC0tIHJldHVybnMgcGlubmVkIG9iamVjdAogIGd1Y191 Y29kZV94ZmVyKCkKICAgIHNldF9ndWNfaW5pdF9wYXJhbXMoKSAtLSBuZWVkcyBHR1RUIGFkZHJl c3Mgb2YgcGlubmVkIG9iamVjdAoKQW5kIHdlIHJlYWxseSBkb24ndCB3YW50IGFueSBleHRyYSBm YWlsdXJlIHBhdGhzIGF0IHRoaXMgZGVwdGguIEJldHRlcgp0byBwaW4gdGhlIG9iamVjdCBlYXJs eSBhbmQgYmFpbCBvdXQgaWYgdGhlcmUncyBhIHByb2JsZW0uIEl0cyBnb2luZyB0bwpiZSBwaW5u ZWQgZm9yIGl0cyBlbnRpcmUgbGlmZXRpbWUgYW55d2F5LCBzbyBJIGRvbid0IHRoaW5rIHRoZXJl J3MgYQpwcm9ibGVtIHdpdGggcGlubmluZyBpdCBhIGZldyBtaWNyb3NlY29uZHMgZWFybHksIGVz cGVjaWFsbHkgL2R1cmluZwpmaXJzdCBvcGVuLyB3aGVuIHRoZXJlJ3Mgbm8gY29udGVudGlvbiBm b3IgR0dUVCBzcGFjZS4KCj4+ICsJCXBncyA+Pj0gUEFHRV9TSElGVDsKPj4gKwkJcGFyYW1zW0dV Q19DVExfQ1RYSU5GT10gPSAocGdzIDw8IEdVQ19DVExfQkFTRV9BRERSX1NISUZUKSB8Cj4+ICsJ CQkoY3R4X2luXzE2IDw8IEdVQ19DVExfQ1RYTlVNX0lOMTZfU0hJRlQpOwo+PiArCj4+ICsJCXBh cmFtc1tHVUNfQ1RMX0ZFQVRVUkVdIHw9IEdVQ19DVExfS0VSTkVMX1NVQk1JU1NJT05TOwo+PiAr Cj4+ICsJCS8qIFVubWFzayB0aGlzIGJpdCB0byBlbmFibGUgR3VDIHNjaGVkdWxlciAqLwo+PiAr CQlwYXJhbXNbR1VDX0NUTF9GRUFUVVJFXSAmPSB+R1VDX0NUTF9ESVNBQkxFX1NDSEVEVUxFUjsK ClRoaXMgbGluZSBkZXNlcnZlcyB0aGUgY29tbWVudCBmaXJzdGx5IGJlY2F1c2Ugd2UgZXhwbGlj aXRseSBzZXQgdGhpcwpiaXQgZWFybGllciBpbiB0aGUgZnVuY3Rpb24sIGJ1dCBoYXZlIG5vdyBk ZWNpZGVkIHRvIGNsZWFyIGl0IGFnYWluIChpdAp3YXMgdGlkaWVyIHRoYW4gaGF2aW5nIHVuYmFs YW5jZWQgaWYtZWxzZSBsZWdzKTsgYW5kIHNlY29uZGx5IHRvIGhlbHAKcGVvcGxlIG5vdCBnZXQg Y29uZnVzZWQgYnkgdGhlIG51bWJlciBvZiBuZWdhdGlvbnMgKCY9IH54IG1lYW5zIGNsZWFyCnNv bWV0aGluZywgYnV0IHdoYXQgd2UncmUgY2xlYXJpbmcgaGFzIG5lZ2F0aXZlIHNlbWFudGljcyAi ZGlzYWJsZSIpLiBTbwppdCBkb2VzIGNvbnZleSBvdXIgaW50ZW50ICgid2h5PyB0byBlbmFibGUg dGhlIEd1QyBzY2hlZHVsZXIiKSBhcyB3ZWxsCmFzIGhvdyAoIip1biptYXNrIHRoaXMgYml0Iiku CgpbYXNpZGVdCkF0IGxlYXN0IHRoZSBHdUMgcGFyYW1ldGVyIHNlbWFudGljcyBhcmUgbm90IGFz IHVnbHkgYXMgc29tZSB3b3JrYXJvdW5kcwppbiB0aGUgQlNwZWMsIHdoZXJlIEkgcmVndWxhcmx5 IGZpbmQgdGhpbmdzIHN1Y2ggYXMgInRoaXMgd29ya2Fyb3VuZApkaXNhYmxlcyBmZWF0dXJlIEEg d2hlbiB1c2luZyBvcHRpb24gQiBidXQgbmVlZCBub3QgYmUgYXBwbGllZCBpZgpjb25kaXRpb24g QyBob2xkcyB1bmxlc3MgY29uZGl0aW9uIEQgaXMgZmFsc2Ugb3IgZmVhdHVyZSBFIGlzIGRpc2Fi bGVkLgpUaGUgd29ya2Fyb3VuZCBtdXN0IG5vdCBiZSBhcHBsaWVkIGluIG1vZGUgRi4iICpCbGVl dXVyZ2gqClsvYXNpZGVdCgo+IC8qIEVuYWJsZSBtdWx0aXBsZSBjb250ZXh0IHN1Ym1pc3Npb24g dGhyb3VnaCB0aGUgR3VDICovCj4gcGFyYW1zW0dVQ19DVExfRkVBVFVSRV0gJj0gfkdVQ19DVExf RElTQUJMRV9TQ0hFRFVMRVI7Cj4gcGFyYW1zW0dVQ19DVExfRkVBVFVSRV0gfD0gR1VDX0NUTF9L RVJORUxfU1VCTUlTU0lPTlM7Cj4gCj4gVHJ5IHRvIGtlZXAgY29tbWVudHMgdG8gZXhwbGFpbiB3 aHkgcmF0aGVyIHRoYW4gd2hhdC4gTW9zdCBvZiB0aGUKPiBjb21tZW50cyBoZXJlIGZhbGwgaW50 byB0aGUgImkrKzsgLy8gcG9zdGluY3JlbWVudCBpIiBjYXRlZ29yeS4KPiAtQ2hyaXMKCk1vc3Qg b2YgdGhlICJ3aGF0IiBjb21tZW50cyBpbiB0aGlzIGZpbGUgYXJlIGFzc29jaWF0ZWQgd2l0aCBh Y2Nlc3NlcyB0bwpzcGVjaWZpYyBoL3cgcmVnaXN0ZXJzLCB3aGljaCB0aGVyZWZvcmUgaGF2ZSBz ZW1hbnRpYyBlZmZlY3QgYmV5b25kIHdoYXQKaXMgZXhwbGljaXQgaW4gdGhlIGNvZGUuIEZvciBl eGFtcGxlIHRoaXMgY29tbWVudDoKCi8qIHRlbGwgYWxsIGNvbW1hbmQgc3RyZWFtZXJzIHRvIGZv cndhcmQgaW50ZXJydXB0cyBhbmQgdmJsYW5rIHRvIEd1QyAqLwppcnFzID0gX01BU0tFRF9GSUVM RChHRlhfRk9SV0FSRF9WQkxBTktfTUFTSyxHRlhfRk9SV0FSRF9WQkxBTktfQUxXQVlTKTsKaXJx cyB8PSBfTUFTS0VEX0JJVF9FTkFCTEUoR0ZYX0lOVEVSUlVQVF9TVEVFUklORyk7CmZvcl9lYWNo X3JpbmcocmluZywgZGV2X3ByaXYsIGkpCiAgICBJOTE1X1dSSVRFKFJJTkdfTU9ERV9HRU43KHJp bmcpLCBpcnFzKTsKCmhlbHBzIHRoZSByZWFkZXIgd2hhdCB0aGUgL2VmZmVjdC8gb2YgdGhlIHdy aXRlcyBpcyBpbnRlbmRlZCB0byBiZS4gSXQncwpxdWl0ZSBkaWZmZXJlbnQgZnJvbToKCi8qIHdy aXRlIGJpdG1hc2sgdG8gR0VONyByaW5nIG1vZGUgcmVnaXN0ZXIgKi8KSTkxNV9XUklURShSSU5H X01PREVfR0VONyhyaW5nKSxNQVNLRURfQklUX0VOQUJMRShHRlhfSU5URVJSVVBUX1NURUVSSU5H KSk7CgphbmQgbWVhbnMgeW91IG1heSBub3QgaGF2ZSB0byBkaWcgdGhyb3VnaCB0aGUgQlNwZWMg dG8gZmluZCBvdXQgd2hhdCB0aGUKbGVzcyBoZWxwZnVsbHktbmFtZWQgYml0cyBhY3R1YWxseSBk by4gQW5kIHRoaXM6CgogICAgICAgIEk5MTVfV1JJVEUoREVfR1VDUk1SLCB+MCk7Cgp3b3VsZCBi ZSBpbmNvbXByZWhlbnNpYmxlIHdpdGhvdXQgcmVhZGluZyB0aGUgQlNwZWMgLi4uIG9yIHRoZSBj b21tZW50CgoJLyogdGVsbCBERSB0byBzZW5kIG5vdGhpbmcgdG8gR3VDICovCgouRGF2ZS4KX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1h aWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5m cmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK