From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sean Paul Subject: Re: [PATCH 06/17] drm: Global atomic state handling Date: Tue, 4 Nov 2014 15:31:07 -0500 Message-ID: References: <1414934370-11924-1-git-send-email-daniel.vetter@ffwll.ch> <1414934370-11924-7-git-send-email-daniel.vetter@ffwll.ch> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1414934370-11924-7-git-send-email-daniel.vetter@ffwll.ch> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Daniel Vetter Cc: Intel Graphics Development , Fengguang Wu , DRI Development List-Id: dri-devel@lists.freedesktop.org T24gU3VuLCBOb3YgMDIsIDIwMTQgYXQgMDI6MTk6MTlQTSArMDEwMCwgRGFuaWVsIFZldHRlciB3 cm90ZToKPiBTb21lIGRpZmZlcmVuY2VzIGNvbXBhcmVkIHRvIFJvYidzIHBhdGNoZXMgYWdhaW46 Cj4gLSBEcm9wcGVkIHRoZSBjb21taXR0ZWQgYW5kIGNoZWNrZWQgYm9vbGVhbnMuIENoZWNraW5n IHdpbGwgYmUKPiAgIGludGVybmFsbHkgZW5mb3JjZWQgYnkgYWx3YXlzIGNhbGxpbmcgLT5hdG9t aWNfY2hlY2sgYmVmb3JlCj4gICAtPmF0b21pY19jb21taXQuIEFuZCBhc3luYyBoYW5kbGluZyBu ZWVkcyB0byBiZSBzb2x2ZWQgZGlmZmVyZW50bHkKPiAgIGJlY2F1c2UgdGhlIGN1cnJlbnQgc2No ZW1lIGNvbXBsZXRlbHkgc2lkZS1zdGVwcyB3dyBtdXRleCBkZWFkbG9jawo+ICAgYXZvaWRhbmNl IChhbmQgc28gZWl0aGVyIHJlaW52ZW50cyBhIG5ldyBkZWFkbG9jayBhdm9pZGFuY2Ugd2hlZWwg b3IKPiAgIGxpa2UgdGhlIGN1cnJlbnQgY29kZSBqdXN0IGRlYWRsb2NrcykuCj4KPiAtIFN0YXRl IGZvciBjb25uZWN0b3JzIG5lZWRlZCB0byBiZSBhZGRlZCwgc2luY2Ugbm93IHRoZXkgaGF2ZSBh Cj4gICBmdWxsLWJsb3duIGRybV9jb25uZWN0b3Jfc3RhdGUgKHNvIHRoYXQgZHJpdmVycyBoYXZl IHNvbWV0aGluZyB0bwo+ICAgYXR0YWNoIHRoZWlyIG93biBzdHVmZiB0bykuCj4KPiAtIFJlZmNv dW50aW5nIGlzIGdvbmUuIEkgcGxhbmUgdG8gc29sdmUgYXN5bmMgdXBkYXRlcyBkaWZmZXJlbnRs eSwKPiAgIHNpbmNlIHRoZSBsb2NrLXBhc3Npbmcgc2NoZW1lIGRvZXNuJ3QgY3V0IGl0IChzaW5j ZSBpdCBhYnVzZXMgd3cKPiAgIG11dGV4ZXMpLiBFc3NlbnRpYWxseSB3aGF0IHdlIG5lZWQgZm9y IGFzeW5jIGlzIGEgc2ltcGxlIG93bmVyc2hpcAo+ICAgdHJhbnNmZXIgZnJvbSB0aGUgY2FsbGVy IHRvIHRoZSBkcml2ZXIuIFRoYXQgZG9lc24ndCBuZWVkIGZ1bGwtYmxvd24KPiAgIHJlZmNvdW50 aW5nLgo+Cj4gLSBUaGUgYWNxdWlyZSBjdHggaXMgYSBwb2ludGVyLiBSZWFsIGF0b21pYyBjYWxs ZXJzIHNob3VsZCBoYXZlIHRoYXQKPiAgIG9uIHRoZWlyIHN0YWNrLCBsZWdhY3kgZW50cnkgcG9p bnRzIG5lZWQgdG8gcHV0IHRoZSByaWdodCBvbmUKPiAgIChvYnRhaW5lZCBieSBkcm1fbW9kZXNl dF9sZWdhY3lfYWN1aXJlX2N0eCkgaW4gdGhlcmUuCj4KPiAtIEkndmUgZHJvcHBlZCBhbGwgaG9v a3MgZXhjZXB0IGNoZWNrL2NvbW1pdC4gQWxsIHRoZSBiZWdpbi9lbmQKPiAgIGhhbmRsaW5nIGlz IGRvbmUgYnkgY29yZSBmdW5jdGlvbnMgYW5kIGlzIHRoZSBzYW1lLgo+Cj4gLSBjb21taXQvY2hl Y2sgYXJlIGp1c3QgdGhpbiB3cmFwcGVycyB0aGF0IGVuc3VyZSB0aGF0IC0+Y2hlY2sgaXMKPiAg IGFsd2F5cyBjYWxsZWQuCj4KPiAtIFRvIGhlbHAgb3V0IHdpdGggbG9ja2luZyBpbiB0aGUgbGVn YWN5IGltcGxlbWVudGF0aW9ucyBJJ3ZlIGFkZGVkIGEKPiAgIGhlbHBlciB0byBqdXN0IGdyYWIg YWxsIGxvY2tzIGluIHRoZSBiYWNrb2ZmIGNhc2UuCj4KPiB2MjogQWRkIG5vdGljZXMgdGhhdCBj aGVjay9jb21taXQgY2FuIGZhaWwgd2l0aCBFREVBRExLLgo+Cj4gdjM6Cj4gLSBNb3JlIGNvbnNp c3RlbnQgbmFtaW5nIGZvciBzdGF0ZV9hbGxvYy4KPiAtIEFkZCBzdGF0ZV9jbGVhciB3aGljaCBp cyBuZWVkZWQgZm9yIGJhY2tvZmYgYW5kIHJldHJ5Lgo+Cj4gdjQ6IFBsYW5lcy9jb25uZWN0b3Jz IGNhbiBzd2l0Y2ggYmV0d2VlbiBjcnRjcywgYW5kIHdlIG5lZWQgdG8gYmUKPiBjYXJlZnVsIHRo YXQgd2UgZ3JhYiB0aGUgc3RhdGUgKGFuZCBsb2NrcykgZm9yIGJvdGggdGhlIG9sZCBhbmQgbmV3 Cj4gY3J0Yy4gSW1wcm92ZSB0aGUgaW50ZXJmYWNlIGZ1bmN0aW9ucyB0byBlbnN1cmUgdGhpcy4K Pgo+IHY1OiBBZGQgZnVuY3Rpb25zIHRvIGdyYWIgYWZmZWN0ZWQgY29ubmVjdG9ycyBmb3IgYSBj cnRjIGFuZCB0byByZWNvbXB1dGUKPiB0aGUgY3J0Yy0+ZW5hYmxlIHN0YXRlLiBUaGlzIGlzIHVz ZWZ1bCBmb3IgYm90aCBoZWxwZXIgYW5kIGF0b21pYyBpb2N0bAo+IGNvZGUgd2hlbiBlLmcuIHJl bW92aW5nIGEgY29ubmVjdG9yLgo+Cj4gdjY6IFNxdWFzaCBpbiBmaXh1cCBmcm9tIEZlbmdndWFu ZyB0byB1c2UgRVJSX0NBU1QuCj4KPiB2NzogQWRkIGRlYnVnIG91dHB1dC4KPgo+IHY4OiBNYWtl IGNoZWNrcGF0Y2ggaGFwcHkgYWJvdXQga2NhbGxvYyBhcmd1bWVudCBvcmRlcmluZy4KPgo+IHY5 OiBJbXByb3ZlIGtlcm5lbGRvYyBpbiBkcm1fY3J0Yy5oCj4KPiB2MTA6Cj4gLSBGaXggYW5vdGhl ciBrY2FsbG9jIGFyZ3VtZW50IG1pc29yZGVyIEkndmUgbWlzc2VkLgo+IC0gTW9yZSBwb2xpc2gg Zm9yIGtlcm5lbGRvYy4KPgo+IHYxMTogQ2xhcmlmeSB0aGUgb3duZXJzaGlwIHJ1bGVzIGZvciB0 aGUgc3RhdGUgb2JqZWN0LiBUaGUgbmV3IHJ1bGUgaXMKPiB0aGF0IGEgc3VjY2Vzc2Z1bCBkcm1f YXRvbWljX2NvbW1pdCAod2hldGhlciBzeW5jaHJvbm91cyBvciBhc255YykKPiBhbHdheXMgaW5o ZXJpdHMgdGhlIHN0YXRlIGFuZCBpcyByZXNwb25zaWJsZSBmb3IgdGhlIGNsZWFuLXVwLiBUaGF0 Cj4gd2F5IGFzeW5jIGFuZCBzeW5jIC0+Y29tbWl0IGZ1bmN0aW9ucyBhcmUgbW9yZSBzaW1pbGFy Lgo+Cj4gdjEyOiBBIGZldyBidWdmaXhlczoKPiAtIEFzc2lnbiBzdGF0ZS0+c3RhdGUgcG9pbnRl cnMgY29ycmVjdGx5IHdoZW4gZ3JhYmJpbmcgc3RhdGUgb2JqZWN0cyAtCj4gICB3ZSBuZWVkIHRv IGxpbmsgdGhlbSB1cCB3aXRoIHRoZSBnbG9iYWwgc3RhdGUuCj4gLSBIYW5kbGUgYSBOVUxMIGNy dGMgaW4gc2V0X2NydGNfZm9yX3BsYW5lIHRvIHNpbXBsaWZ5IGNvZGUgZmxvdyBhIGJpdAo+ICAg Zm9yIHRoZSBjYWxsZXJzIG9mIHRoaXMgZnVuY3Rpb24uCj4KPiBDYzogRmVuZ2d1YW5nIFd1IDxm ZW5nZ3Vhbmcud3VAaW50ZWwuY29tPgo+IFNpZ25lZC1vZmYtYnk6IERhbmllbCBWZXR0ZXIgPGRh bmllbC52ZXR0ZXJAZmZ3bGwuY2g+Cj4gLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSAg ICAgfCAgIDIgKy0KPiAgZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWMuYyB8IDU4OCArKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gIGluY2x1ZGUvZHJtL2RybV9h dG9taWMuaCAgICAgfCAgNjMgKysrKysKPiAgaW5jbHVkZS9kcm0vZHJtX2NydGMuaCAgICAgICB8 ICAzNSArKysKPiAgNCBmaWxlcyBjaGFuZ2VkLCA2ODcgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlv bigtKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWMuYwo+ ICBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9kcm0vZHJtX2F0b21pYy5oCj4KPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxl Cj4gaW5kZXggYTMxNDllMjBhMjQ5Li4yZTg5Y2Q1MGMxNGYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVy cy9ncHUvZHJtL01ha2VmaWxlCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCj4gQEAg LTE0LDcgKzE0LDcgQEAgZHJtLXkgICAgICAgOj0gZHJtX2F1dGgubyBkcm1fYnVmcy5vIGRybV9j YWNoZS5vIFwKPiAgIGRybV9pbmZvLm8gZHJtX2RlYnVnZnMubyBkcm1fZW5jb2Rlcl9zbGF2ZS5v IFwKPiAgIGRybV90cmFjZV9wb2ludHMubyBkcm1fZ2xvYmFsLm8gZHJtX3ByaW1lLm8gXAo+ICAg ZHJtX3JlY3QubyBkcm1fdm1hX21hbmFnZXIubyBkcm1fZmxpcF93b3JrLm8gXAo+IC0gZHJtX21v ZGVzZXRfbG9jay5vCj4gKyBkcm1fbW9kZXNldF9sb2NrLm8gZHJtX2F0b21pYy5vCj4KPiAgZHJt LSQoQ09ORklHX0NPTVBBVCkgKz0gZHJtX2lvYzMyLm8KPiAgZHJtLSQoQ09ORklHX0RSTV9HRU1f Q01BX0hFTFBFUikgKz0gZHJtX2dlbV9jbWFfaGVscGVyLm8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2RybV9hdG9taWMuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWljLmMKPiBu ZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uYzZkYjhhNDhjYWQ2Cj4g LS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWljLmMKPiBAQCAt MCwwICsxLDU4OCBAQAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTQgUmVkIEhhdAo+ICsg KiBDb3B5cmlnaHQgKEMpIDIwMTQgSW50ZWwgQ29ycC4KPiArICoKPiArICogUGVybWlzc2lvbiBp cyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5n IGEKPiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRp b24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPiArICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUg d2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgo+ICsgKiB0 aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0 ZSwgc3VibGljZW5zZSwKPiArICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwg YW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCj4gKyAqIFNvZnR3YXJlIGlzIGZ1cm5p c2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4gKyAq Cj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90 aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCj4gKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwg cG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgo+ICsgKgo+ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJP VklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgo+ ICsgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVT IE9GIE1FUkNIQU5UQUJJTElUWSwKPiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCj4gKyAqIFRIRSBDT1BZ UklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFN QUdFUyBPUgo+ICsgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENP TlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKPiArICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1Ig SU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCj4gKyAqIE9USEVS IERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KPiArICoKPiArICogQXV0aG9yczoKPiArICogUm9i IENsYXJrIDxyb2JkY2xhcmtAZ21haWwuY29tPgo+ICsgKiBEYW5pZWwgVmV0dGVyIDxkYW5pZWwu dmV0dGVyQGZmd2xsLmNoPgo+ICsgKi8KPiArCj4gKwo+ICsjaW5jbHVkZSA8ZHJtL2RybVAuaD4K PiArI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX3BsYW5l X2hlbHBlci5oPgo+ICsKPiArc3RhdGljIHZvaWQga2ZyZWVfc3RhdGUoc3RydWN0IGRybV9hdG9t aWNfc3RhdGUgKnN0YXRlKQo+ICt7Cj4gKyBrZnJlZShzdGF0ZS0+Y29ubmVjdG9ycyk7Cj4gKyBr ZnJlZShzdGF0ZS0+Y29ubmVjdG9yX3N0YXRlcyk7Cj4gKyBrZnJlZShzdGF0ZS0+Y3J0Y3MpOwo+ ICsga2ZyZWUoc3RhdGUtPmNydGNfc3RhdGVzKTsKPiArIGtmcmVlKHN0YXRlLT5wbGFuZXMpOwo+ ICsga2ZyZWUoc3RhdGUtPnBsYW5lX3N0YXRlcyk7Cj4gKyBrZnJlZShzdGF0ZSk7Cj4gK30KPiAr Cj4gKy8qKgo+ICsgKiBkcm1fYXRvbWljX3N0YXRlX2FsbG9jIC0gYWxsb2NhdGUgYXRvbWljIHN0 YXRlCj4gKyAqIEBkZXY6IERSTSBkZXZpY2UKPiArICoKPiArICogVGhpcyBhbGxvY2F0ZXMgYW4g ZW1wdHkgYXRvbWljIHN0YXRlIHRvIHRyYWNrIHVwZGF0ZXMuCj4gKyAqLwo+ICtzdHJ1Y3QgZHJt X2F0b21pY19zdGF0ZSAqCj4gK2RybV9hdG9taWNfc3RhdGVfYWxsb2Moc3RydWN0IGRybV9kZXZp Y2UgKmRldikKPiArewo+ICsgc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlOwo+ICsKPiAr IHN0YXRlID0ga3phbGxvYyhzaXplb2YoKnN0YXRlKSwgR0ZQX0tFUk5FTCk7Cj4gKyBpZiAoIXN0 YXRlKQo+ICsgcmV0dXJuIE5VTEw7Cj4gKwo+ICsgc3RhdGUtPmNydGNzID0ga2NhbGxvYyhkZXYt Pm1vZGVfY29uZmlnLm51bV9jcnRjLAo+ICsgICAgICAgc2l6ZW9mKCpzdGF0ZS0+Y3J0Y3MpLCBH RlBfS0VSTkVMKTsKPiArIGlmICghc3RhdGUtPmNydGNzKQo+ICsgZ290byBmYWlsOwo+ICsgc3Rh dGUtPmNydGNfc3RhdGVzID0ga2NhbGxvYyhkZXYtPm1vZGVfY29uZmlnLm51bV9jcnRjLAo+ICsg ICAgIHNpemVvZigqc3RhdGUtPmNydGNfc3RhdGVzKSwgR0ZQX0tFUk5FTCk7Cj4gKyBpZiAoIXN0 YXRlLT5jcnRjX3N0YXRlcykKPiArIGdvdG8gZmFpbDsKPiArIHN0YXRlLT5wbGFuZXMgPSBrY2Fs bG9jKGRldi0+bW9kZV9jb25maWcubnVtX3RvdGFsX3BsYW5lLAo+ICsgc2l6ZW9mKCpzdGF0ZS0+ cGxhbmVfc3RhdGVzKSwgR0ZQX0tFUk5FTCk7CgpzaXplb2YoKnN0YXRlLT5wbGFuZXMpCgo+ICsg aWYgKCFzdGF0ZS0+cGxhbmVzKQo+ICsgZ290byBmYWlsOwo+ICsgc3RhdGUtPnBsYW5lX3N0YXRl cyA9IGtjYWxsb2MoZGV2LT5tb2RlX2NvbmZpZy5udW1fdG90YWxfcGxhbmUsCj4gKyAgICAgIHNp emVvZigqc3RhdGUtPnBsYW5lX3N0YXRlcyksIEdGUF9LRVJORUwpOwo+ICsgaWYgKCFzdGF0ZS0+ cGxhbmVfc3RhdGVzKQo+ICsgZ290byBmYWlsOwo+ICsgc3RhdGUtPmNvbm5lY3RvcnMgPSBrY2Fs bG9jKGRldi0+bW9kZV9jb25maWcubnVtX2Nvbm5lY3RvciwKPiArICAgIHNpemVvZigqc3RhdGUt PmNvbm5lY3RvcnMpLAo+ICsgICAgR0ZQX0tFUk5FTCk7Cj4gKyBpZiAoIXN0YXRlLT5jb25uZWN0 b3JzKQo+ICsgZ290byBmYWlsOwo+ICsgc3RhdGUtPmNvbm5lY3Rvcl9zdGF0ZXMgPSBrY2FsbG9j KGRldi0+bW9kZV9jb25maWcubnVtX2Nvbm5lY3RvciwKPiArICBzaXplb2YoKnN0YXRlLT5jb25u ZWN0b3Jfc3RhdGVzKSwKPiArICBHRlBfS0VSTkVMKTsKPiArIGlmICghc3RhdGUtPmNvbm5lY3Rv cl9zdGF0ZXMpCj4gKyBnb3RvIGZhaWw7Cj4gKwo+ICsgc3RhdGUtPmRldiA9IGRldjsKPiArCj4g KyBEUk1fREVCVUdfS01TKCJBbGxvY2F0ZSBhdG9taWMgc3RhdGUgJXBcbiIsIHN0YXRlKTsKPiAr Cj4gKyByZXR1cm4gc3RhdGU7Cj4gK2ZhaWw6Cj4gKyBrZnJlZV9zdGF0ZShzdGF0ZSk7Cj4gKwo+ ICsgcmV0dXJuIE5VTEw7Cj4gK30KPiArRVhQT1JUX1NZTUJPTChkcm1fYXRvbWljX3N0YXRlX2Fs bG9jKTsKPiArCj4gKy8qKgo+ICsgKiBkcm1fYXRvbWljX3N0YXRlX2NsZWFyIC0gY2xlYXIgc3Rh dGUgb2JqZWN0Cj4gKyAqIEBzdGF0ZTogYXRvbWljIHN0YXRlCj4gKyAqCj4gKyAqIFdoZW4gdGhl IHcvdyBtdXRleCBhbGdvcml0aG0gZGV0ZWN0cyBhIGRlYWRsb2NrIHdlIG5lZWQgdG8gYmFjayBv ZmYgYW5kIGRyb3AKPiArICogYWxsIGxvY2tzLiBTbyBzb21lb25lIGVsc2UgY291bGQgc25lYWsg aW4gYW5kIGNoYW5nZSB0aGUgY3VycmVudCBtb2Rlc2V0Cj4gKyAqIGNvbmZpZ3VyYXRpb24uIFdo aWNoIG1lYW5zIHRoYXQgYWxsIHRoZSBzdGF0ZSBhc3NlbWJsZWQgaW4gQHN0YXRlIGlzIG5vCj4g KyAqIGxvbmdlciBhbiBhdG9taWMgdXBkYXRlIHRvIHRoZSBjdXJyZW50IHN0YXRlLCBidXQgdG8g c29tZSBhcmJpdHJhcnkgZWFybGllcgo+ICsgKiBzdGF0ZS4gV2hpY2ggY291bGQgYnJlYWsgYXNz dW1wdGlvbnMgdGhlIGRyaXZlcidzIC0+YXRvbWljX2NoZWNrIGxpa2VseQo+ICsgKiByZWxpZXMg b24uCj4gKyAqCj4gKyAqIEhlbmNlIHdlIG11c3QgY2xlYXIgYWxsIGNhY2hlZCBzdGF0ZSBhbmQg Y29tcGxldGVseSBzdGFydCBvdmVyLCB1c2luZyB0aGlzCj4gKyAqIGZ1bmN0aW9uLgo+ICsgKi8K PiArdm9pZCBkcm1fYXRvbWljX3N0YXRlX2NsZWFyKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpz dGF0ZSkKPiArewo+ICsgc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHN0YXRlLT5kZXY7Cj4gKyBp bnQgaTsKPiArCj4gKyBEUk1fREVCVUdfS01TKCJDbGVhcmluZyBhdG9taWMgc3RhdGUgJXBcbiIs IHN0YXRlKTsKPiArCj4gKyBmb3IgKGkgPSAwOyBpIDwgZGV2LT5tb2RlX2NvbmZpZy5udW1fY29u bmVjdG9yOyBpKyspIHsKPiArIHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IgPSBzdGF0 ZS0+Y29ubmVjdG9yc1tpXTsKPiArCj4gKyBpZiAoIWNvbm5lY3RvcikKPiArIGNvbnRpbnVlOwo+ ICsKPiArIGNvbm5lY3Rvci0+ZnVuY3MtPmF0b21pY19kZXN0cm95X3N0YXRlKGNvbm5lY3RvciwK PiArICAgICAgIHN0YXRlLT5jb25uZWN0b3Jfc3RhdGVzW2ldKTsKPiArIH0KPiArCj4gKyBmb3Ig KGkgPSAwOyBpIDwgZGV2LT5tb2RlX2NvbmZpZy5udW1fY3J0YzsgaSsrKSB7Cj4gKyBzdHJ1Y3Qg ZHJtX2NydGMgKmNydGMgPSBzdGF0ZS0+Y3J0Y3NbaV07Cj4gKwo+ICsgaWYgKCFjcnRjKQo+ICsg Y29udGludWU7Cj4gKwo+ICsgY3J0Yy0+ZnVuY3MtPmF0b21pY19kZXN0cm95X3N0YXRlKGNydGMs Cj4gKyAgc3RhdGUtPmNydGNfc3RhdGVzW2ldKTsKPiArIH0KPiArCj4gKyBmb3IgKGkgPSAwOyBp IDwgZGV2LT5tb2RlX2NvbmZpZy5udW1fdG90YWxfcGxhbmU7IGkrKykgewo+ICsgc3RydWN0IGRy bV9wbGFuZSAqcGxhbmUgPSBzdGF0ZS0+cGxhbmVzW2ldOwo+ICsKPiArIGlmICghcGxhbmUpCj4g KyBjb250aW51ZTsKPiArCj4gKyBwbGFuZS0+ZnVuY3MtPmF0b21pY19kZXN0cm95X3N0YXRlKHBs YW5lLAo+ICsgICBzdGF0ZS0+cGxhbmVfc3RhdGVzW2ldKTsKPiArIH0KPiArfQo+ICtFWFBPUlRf U1lNQk9MKGRybV9hdG9taWNfc3RhdGVfY2xlYXIpOwo+ICsKPiArLyoqCj4gKyAqIGRybV9hdG9t aWNfc3RhdGVfZnJlZSAtIGZyZWUgYWxsIG1lbW9yeSBmb3IgYW4gYXRvbWljIHN0YXRlCj4gKyAq IEBzdGF0ZTogYXRvbWljIHN0YXRlIHRvIGRlYWxsb2NhdGUKPiArICoKPiArICogVGhpcyBmcmVl cyBhbGwgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCBhbiBhdG9taWMgc3RhdGUsIGluY2x1ZGluZyBh bGwgdGhlCj4gKyAqIHBlci1vYmplY3Qgc3RhdGUgZm9yIHBsYW5lcywgY3J0Y3MgYW5kIGNvbm5l Y3RvcnMuCj4gKyAqLwo+ICt2b2lkIGRybV9hdG9taWNfc3RhdGVfZnJlZShzdHJ1Y3QgZHJtX2F0 b21pY19zdGF0ZSAqc3RhdGUpCj4gK3sKPiArIGRybV9hdG9taWNfc3RhdGVfY2xlYXIoc3RhdGUp Owo+ICsKPiArIERSTV9ERUJVR19LTVMoIkZyZWVpbmcgYXRvbWljIHN0YXRlICVwXG4iLCBzdGF0 ZSk7Cj4gKwo+ICsga2ZyZWVfc3RhdGUoc3RhdGUpOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0woZHJt X2F0b21pY19zdGF0ZV9mcmVlKTsKPiArCj4gKy8qKgo+ICsgKiBkcm1fYXRvbWljX2dldF9jcnRj X3N0YXRlIC0gZ2V0IGNydGMgc3RhdGUKPiArICogQHN0YXRlOiBnbG9iYWwgYXRvbWljIHN0YXRl IG9iamVjdAo+ICsgKiBAY3J0YzogY3J0YyB0byBnZXQgc3RhdGUgb2JqZWN0IGZvcgo+ICsgKgo+ ICsgKiBUaGlzIGZ1bmN0aW9ucyByZXR1cm5zIHRoZSBjcnRjIHN0YXRlIGZvciB0aGUgZ2l2ZW4g Y3J0YywgYWxsb2NhdGluZyBpdCBpZgoKbml0OiBzL2Z1bmN0aW9ucy9mdW5jdGlvbgoKTG9va3Mg bGlrZSB0aGlzIGhhcHBlbnMgYSBmZXcgdGltZXMgdGhyb3VnaG91dCB0aGUgZmlsZQoKPiArICog bmVlZGVkLiBJdCB3aWxsIGFsc28gZ3JhYiB0aGUgcmVsZXZhbnQgY3J0YyBsb2NrIHRvIG1ha2Ug c3VyZSB0aGF0IHRoZSBzdGF0ZQo+ICsgKiBpcyBjb25zaXN0ZW50Lgo+ICsgKgo+ICsgKiBSZXR1 cm5zOgo+ICsgKgo+ICsgKiBFaXRoZXIgdGhlIGFsbG9jYXRlZCBzdGF0ZSBvciB0aGUgZXJyb3Ig Y29kZSBlbmNvZGVkIGludG8gdGhlIHBvaW50ZXIuIFdoZW4KPiArICogdGhlIGVycm9yIGlzIEVE RUFETEsgdGhlbiB0aGUgdy93IG11dGV4IGNvZGUgaGFzIGRldGVjdGVkIGEgZGVhZGxvY2sgYW5k IHRoZQo+ICsgKiBlbnRpcmUgYXRvbWljIHNlcXVlbmNlIG11c3QgYmUgcmVzdGFydGVkLiBBbGwg b3RoZXIgZXJyb3JzIGFyZSBmYXRhbC4KPiArICovCj4gK3N0cnVjdCBkcm1fY3J0Y19zdGF0ZSAq Cj4gK2RybV9hdG9taWNfZ2V0X2NydGNfc3RhdGUoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0 YXRlLAo+ICsgIHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPiArewo+ICsgaW50IHJldCwgaW5kZXg7 Cj4gKyBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGU7Cj4gKwo+ICsgaW5kZXggPSBk cm1fY3J0Y19pbmRleChjcnRjKTsKPiArCj4gKyBpZiAoc3RhdGUtPmNydGNfc3RhdGVzW2luZGV4 XSkKPiArIHJldHVybiBzdGF0ZS0+Y3J0Y19zdGF0ZXNbaW5kZXhdOwo+ICsKPiArIHJldCA9IGRy bV9tb2Rlc2V0X2xvY2soJmNydGMtPm11dGV4LCBzdGF0ZS0+YWNxdWlyZV9jdHgpOwo+ICsgaWYg KHJldCkKPiArIHJldHVybiBFUlJfUFRSKHJldCk7Cj4gKwo+ICsgY3J0Y19zdGF0ZSA9IGNydGMt PmZ1bmNzLT5hdG9taWNfZHVwbGljYXRlX3N0YXRlKGNydGMpOwo+ICsgaWYgKCFjcnRjX3N0YXRl KQo+ICsgcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cj4gKwo+ICsgc3RhdGUtPmNydGNfc3RhdGVz W2luZGV4XSA9IGNydGNfc3RhdGU7Cj4gKyBzdGF0ZS0+Y3J0Y3NbaW5kZXhdID0gY3J0YzsKPiAr IGNydGNfc3RhdGUtPnN0YXRlID0gc3RhdGU7Cj4gKwo+ICsgRFJNX0RFQlVHX0tNUygiQWRkZWQg W0NSVEM6JWRdICVwIHN0YXRlIHRvICVwXG4iLAo+ICsgICAgICBjcnRjLT5iYXNlLmlkLCBjcnRj X3N0YXRlLCBzdGF0ZSk7Cj4gKwo+ICsgcmV0dXJuIGNydGNfc3RhdGU7Cj4gK30KPiArRVhQT1JU X1NZTUJPTChkcm1fYXRvbWljX2dldF9jcnRjX3N0YXRlKTsKPiArCj4gKy8qKgo+ICsgKiBkcm1f YXRvbWljX2dldF9wbGFuZV9zdGF0ZSAtIGdldCBwbGFuZSBzdGF0ZQo+ICsgKiBAc3RhdGU6IGds b2JhbCBhdG9taWMgc3RhdGUgb2JqZWN0Cj4gKyAqIEBwbGFuZTogcGxhbmUgdG8gZ2V0IHN0YXRl IG9iamVjdCBmb3IKPiArICoKPiArICogVGhpcyBmdW5jdGlvbnMgcmV0dXJucyB0aGUgcGxhbmUg c3RhdGUgZm9yIHRoZSBnaXZlbiBwbGFuZSwgYWxsb2NhdGluZyBpdCBpZgo+ICsgKiBuZWVkZWQu IEl0IHdpbGwgYWxzbyBncmFiIHRoZSByZWxldmFudCBwbGFuZSBsb2NrIHRvIG1ha2Ugc3VyZSB0 aGF0IHRoZSBzdGF0ZQo+ICsgKiBpcyBjb25zaXN0ZW50Lgo+ICsgKgo+ICsgKiBSZXR1cm5zOgo+ ICsgKgo+ICsgKiBFaXRoZXIgdGhlIGFsbG9jYXRlZCBzdGF0ZSBvciB0aGUgZXJyb3IgY29kZSBl bmNvZGVkIGludG8gdGhlIHBvaW50ZXIuIFdoZW4KPiArICogdGhlIGVycm9yIGlzIEVERUFETEsg dGhlbiB0aGUgdy93IG11dGV4IGNvZGUgaGFzIGRldGVjdGVkIGEgZGVhZGxvY2sgYW5kIHRoZQo+ ICsgKiBlbnRpcmUgYXRvbWljIHNlcXVlbmNlIG11c3QgYmUgcmVzdGFydGVkLiBBbGwgb3RoZXIg ZXJyb3JzIGFyZSBmYXRhbC4KPiArICovCj4gK3N0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKgo+ICtk cm1fYXRvbWljX2dldF9wbGFuZV9zdGF0ZShzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUs Cj4gKyAgc3RydWN0IGRybV9wbGFuZSAqcGxhbmUpCj4gK3sKPiArIGludCByZXQsIGluZGV4Owo+ ICsgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGU7Cj4gKwo+ICsgaW5kZXggPSBk cm1fcGxhbmVfaW5kZXgocGxhbmUpOwo+ICsKPiArIGlmIChzdGF0ZS0+cGxhbmVfc3RhdGVzW2lu ZGV4XSkKPiArIHJldHVybiBzdGF0ZS0+cGxhbmVfc3RhdGVzW2luZGV4XTsKPiArCj4gKyAvKgo+ ICsgKiBUT0RPOiBXZSBjdXJyZW50bHkgZG9uJ3QgaGF2ZSBwZXItcGxhbmUgbXV0ZXhlcy4gU28g aW5zdGVhZCBvZiB0cnlpbmcKPiArICogY3JhenkgdHJpY2tzIHdpdGggZGVmZXJyaW5nIHBsYW5l LT5jcnRjIGFuZCBob3BpbmcgZm9yIHRoZSBiZXN0IGp1c3QKPiArICogZ3JhYiBhbGwgY3J0YyBs b2Nrcy4gT25jZSB3ZSBoYXZlIHBlci1wbGFuZSBsb2NrcyB3ZSBtdXN0IHVwZGF0ZSB0aGlzCj4g KyAqIHRvIG9ubHkgdGFrZSB0aGUgcGxhbmUgbXV0ZXguCj4gKyAqLwo+ICsgcmV0ID0gZHJtX21v ZGVzZXRfbG9ja19hbGxfY3J0Y3Moc3RhdGUtPmRldiwgc3RhdGUtPmFjcXVpcmVfY3R4KTsKPiAr IGlmIChyZXQpCj4gKyByZXR1cm4gRVJSX1BUUihyZXQpOwo+ICsKPiArIHBsYW5lX3N0YXRlID0g cGxhbmUtPmZ1bmNzLT5hdG9taWNfZHVwbGljYXRlX3N0YXRlKHBsYW5lKTsKPiArIGlmICghcGxh bmVfc3RhdGUpCj4gKyByZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPiArCj4gKyBzdGF0ZS0+cGxh bmVfc3RhdGVzW2luZGV4XSA9IHBsYW5lX3N0YXRlOwo+ICsgc3RhdGUtPnBsYW5lc1tpbmRleF0g PSBwbGFuZTsKPiArIHBsYW5lX3N0YXRlLT5zdGF0ZSA9IHN0YXRlOwo+ICsKPiArIERSTV9ERUJV R19LTVMoIkFkZGVkIFtQTEFORTolZF0gJXAgc3RhdGUgdG8gJXBcbiIsCj4gKyAgICAgIHBsYW5l LT5iYXNlLmlkLCBwbGFuZV9zdGF0ZSwgc3RhdGUpOwo+ICsKPiArIGlmIChwbGFuZV9zdGF0ZS0+ Y3J0Yykgewo+ICsgc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlOwo+ICsKPiArIGNy dGNfc3RhdGUgPSBkcm1fYXRvbWljX2dldF9jcnRjX3N0YXRlKHN0YXRlLAo+ICsgICAgICAgcGxh bmVfc3RhdGUtPmNydGMpOwo+ICsgaWYgKElTX0VSUihjcnRjX3N0YXRlKSkKPiArIHJldHVybiBF UlJfQ0FTVChjcnRjX3N0YXRlKTsKPiArIH0KPiArCj4gKyByZXR1cm4gcGxhbmVfc3RhdGU7Cj4g K30KPiArRVhQT1JUX1NZTUJPTChkcm1fYXRvbWljX2dldF9wbGFuZV9zdGF0ZSk7Cj4gKwo+ICsv KioKPiArICogZHJtX2F0b21pY19nZXRfY29ubmVjdG9yX3N0YXRlIC0gZ2V0IGNvbm5lY3RvciBz dGF0ZQo+ICsgKiBAc3RhdGU6IGdsb2JhbCBhdG9taWMgc3RhdGUgb2JqZWN0Cj4gKyAqIEBjb25u ZWN0b3I6IGNvbm5lY3RvciB0byBnZXQgc3RhdGUgb2JqZWN0IGZvcgo+ICsgKgo+ICsgKiBUaGlz IGZ1bmN0aW9ucyByZXR1cm5zIHRoZSBjb25uZWN0b3Igc3RhdGUgZm9yIHRoZSBnaXZlbiBjb25u ZWN0b3IsCj4gKyAqIGFsbG9jYXRpbmcgaXQgaWYgbmVlZGVkLiBJdCB3aWxsIGFsc28gZ3JhYiB0 aGUgcmVsZXZhbnQgY29ubmVjdG9yIGxvY2sgdG8KPiArICogbWFrZSBzdXJlIHRoYXQgdGhlIHN0 YXRlIGlzIGNvbnNpc3RlbnQuCj4gKyAqCj4gKyAqIFJldHVybnM6Cj4gKyAqCj4gKyAqIEVpdGhl ciB0aGUgYWxsb2NhdGVkIHN0YXRlIG9yIHRoZSBlcnJvciBjb2RlIGVuY29kZWQgaW50byB0aGUg cG9pbnRlci4gV2hlbgo+ICsgKiB0aGUgZXJyb3IgaXMgRURFQURMSyB0aGVuIHRoZSB3L3cgbXV0 ZXggY29kZSBoYXMgZGV0ZWN0ZWQgYSBkZWFkbG9jayBhbmQgdGhlCj4gKyAqIGVudGlyZSBhdG9t aWMgc2VxdWVuY2UgbXVzdCBiZSByZXN0YXJ0ZWQuIEFsbCBvdGhlciBlcnJvcnMgYXJlIGZhdGFs Lgo+ICsgKi8KPiArc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKgo+ICtkcm1fYXRvbWljX2dl dF9jb25uZWN0b3Jfc3RhdGUoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAo+ICsgIHN0 cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCj4gK3sKPiArIGludCByZXQsIGluZGV4Owo+ ICsgc3RydWN0IGRybV9tb2RlX2NvbmZpZyAqY29uZmlnID0gJmNvbm5lY3Rvci0+ZGV2LT5tb2Rl X2NvbmZpZzsKPiArIHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpjb25uZWN0b3Jfc3RhdGU7 Cj4gKwo+ICsgaW5kZXggPSBkcm1fY29ubmVjdG9yX2luZGV4KGNvbm5lY3Rvcik7Cj4gKwo+ICsg aWYgKHN0YXRlLT5jb25uZWN0b3Jfc3RhdGVzW2luZGV4XSkKPiArIHJldHVybiBzdGF0ZS0+Y29u bmVjdG9yX3N0YXRlc1tpbmRleF07Cj4gKwo+ICsgcmV0ID0gZHJtX21vZGVzZXRfbG9jaygmY29u ZmlnLT5jb25uZWN0aW9uX211dGV4LCBzdGF0ZS0+YWNxdWlyZV9jdHgpOwo+ICsgaWYgKHJldCkK PiArIHJldHVybiBFUlJfUFRSKHJldCk7Cj4gKwo+ICsgY29ubmVjdG9yX3N0YXRlID0gY29ubmVj dG9yLT5mdW5jcy0+YXRvbWljX2R1cGxpY2F0ZV9zdGF0ZShjb25uZWN0b3IpOwo+ICsgaWYgKCFj b25uZWN0b3Jfc3RhdGUpCj4gKyByZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPiArCj4gKyBzdGF0 ZS0+Y29ubmVjdG9yX3N0YXRlc1tpbmRleF0gPSBjb25uZWN0b3Jfc3RhdGU7Cj4gKyBzdGF0ZS0+ Y29ubmVjdG9yc1tpbmRleF0gPSBjb25uZWN0b3I7Cj4gKyBjb25uZWN0b3Jfc3RhdGUtPnN0YXRl ID0gc3RhdGU7Cj4gKwo+ICsgRFJNX0RFQlVHX0tNUygiQWRkZWQgW0NPTk5FQ1RPUjolZF0gJXAg c3RhdGUgdG8gJXBcbiIsCj4gKyAgICAgIGNvbm5lY3Rvci0+YmFzZS5pZCwgY29ubmVjdG9yX3N0 YXRlLCBzdGF0ZSk7Cj4gKwo+ICsgaWYgKGNvbm5lY3Rvcl9zdGF0ZS0+Y3J0Yykgewo+ICsgc3Ry dWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlOwo+ICsKPiArIGNydGNfc3RhdGUgPSBkcm1f YXRvbWljX2dldF9jcnRjX3N0YXRlKHN0YXRlLAo+ICsgICAgICAgY29ubmVjdG9yX3N0YXRlLT5j cnRjKTsKPiArIGlmIChJU19FUlIoY3J0Y19zdGF0ZSkpCj4gKyByZXR1cm4gRVJSX0NBU1QoY3J0 Y19zdGF0ZSk7Cj4gKyB9Cj4gKwo+ICsgcmV0dXJuIGNvbm5lY3Rvcl9zdGF0ZTsKPiArfQo+ICtF WFBPUlRfU1lNQk9MKGRybV9hdG9taWNfZ2V0X2Nvbm5lY3Rvcl9zdGF0ZSk7Cj4gKwo+ICsvKioK PiArICogZHJtX2F0b21pY19zZXRfY3J0Y19mb3JfcGxhbmUgLSBzZXQgY3J0YyBmb3IgcGxhbmUK PiArICogQHBsYW5lX3N0YXRlOiBhdG9taWMgc3RhdGUgb2JqZWN0IGZvciB0aGUgcGxhbmUKPiAr ICogQGNydGM6IGNydGMgdG8gdXNlIGZvciB0aGUgcGxhbmUKPiArICoKPiArICogQ2hhbmdpbmcg dGhlIGFzc2lnbmVkIGNydGMgZm9yIGEgcGxhbmUgcmVxdWlyZXMgdXMgdG8gZ3JhYiB0aGUgbG9j ayBhbmQgc3RhdGUKPiArICogZm9yIHRoZSBuZXcgY3J0YywgYXMgbmVlZGVkLiBUaGlzIGZ1bmN0 aW9uIHRha2VzIGNhcmUgb2YgYWxsIHRoZXNlIGRldGFpbHMKPiArICogYmVzaWRlcyB1cGRhdGlu ZyB0aGUgcG9pbnRlciBpbiB0aGUgc3RhdGUgb2JqZWN0IGl0c2VsZi4KPiArICoKPiArICogUmV0 dXJuczoKPiArICogMCBvbiBzdWNjZXNzIG9yIGNhbiBmYWlsIHdpdGggLUVERUFETEsgb3IgLUVO T01FTS4KPiArICovCj4gK2ludAo+ICtkcm1fYXRvbWljX3NldF9jcnRjX2Zvcl9wbGFuZShzdHJ1 Y3QgZHJtX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSwKPiArICAgICAgc3RydWN0IGRybV9jcnRj ICpjcnRjKQo+ICt7Cj4gKyBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGU7Cj4gKwo+ ICsgaWYgKGNydGMpIHsKPiArIGNydGNfc3RhdGUgPSBkcm1fYXRvbWljX2dldF9jcnRjX3N0YXRl KHBsYW5lX3N0YXRlLT5zdGF0ZSwKPiArICAgICAgIGNydGMpOwo+ICsgaWYgKElTX0VSUihjcnRj X3N0YXRlKSkKPiArIHJldHVybiBQVFJfRVJSKGNydGNfc3RhdGUpOwo+ICsgfQo+ICsKPiArIHBs YW5lX3N0YXRlLT5jcnRjID0gY3J0YzsKPiArCj4gKyBpZiAoY3J0YykKPiArIERSTV9ERUJVR19L TVMoIkxpbmsgcGxhbmUgc3RhdGUgJXAgdG8gW0NSVEM6JWRdXG4iLAo+ICsgICAgICBwbGFuZV9z dGF0ZSwgY3J0Yy0+YmFzZS5pZCk7Cj4gKyBlbHNlCj4gKyBEUk1fREVCVUdfS01TKCJMaW5rIHBs YW5lIHN0YXRlICVwIHRvIFtOT0NSVENdXG4iLCBwbGFuZV9zdGF0ZSk7Cj4gKwo+ICsgcmV0dXJu IDA7Cj4gK30KPiArRVhQT1JUX1NZTUJPTChkcm1fYXRvbWljX3NldF9jcnRjX2Zvcl9wbGFuZSk7 Cj4gKwo+ICsvKioKPiArICogZHJtX2F0b21pY19zZXRfY3J0Y19mb3JfY29ubmVjdG9yIC0gc2V0 IGNydGMgZm9yIGNvbm5lY3Rvcgo+ICsgKiBAY29ubl9zdGF0ZTogYXRvbWljIHN0YXRlIG9iamVj dCBmb3IgdGhlIGNvbm5lY3Rvcgo+ICsgKiBAY3J0YzogY3J0YyB0byB1c2UgZm9yIHRoZSBjb25u ZWN0b3IKPiArICoKPiArICogQ2hhbmdpbmcgdGhlIGFzc2lnbmVkIGNydGMgZm9yIGEgY29ubmVj dG9yIHJlcXVpcmVzIHVzIHRvIGdyYWIgdGhlIGxvY2sgYW5kCj4gKyAqIHN0YXRlIGZvciB0aGUg bmV3IGNydGMsIGFzIG5lZWRlZC4gVGhpcyBmdW5jdGlvbiB0YWtlcyBjYXJlIG9mIGFsbCB0aGVz ZQo+ICsgKiBkZXRhaWxzIGJlc2lkZXMgdXBkYXRpbmcgdGhlIHBvaW50ZXIgaW4gdGhlIHN0YXRl IG9iamVjdCBpdHNlbGYuCj4gKyAqCj4gKyAqIFJldHVybnM6Cj4gKyAqIDAgb24gc3VjY2VzcyBv ciBjYW4gZmFpbCB3aXRoIC1FREVBRExLIG9yIC1FTk9NRU0uCj4gKyAqLwo+ICtpbnQKPiArZHJt X2F0b21pY19zZXRfY3J0Y19mb3JfY29ubmVjdG9yKHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRl ICpjb25uX3N0YXRlLAo+ICsgIHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPiArewo+ICsgc3RydWN0 IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlOwo+ICsKPiArIGNydGNfc3RhdGUgPSBkcm1fYXRv bWljX2dldF9jcnRjX3N0YXRlKGNvbm5fc3RhdGUtPnN0YXRlLCBjcnRjKTsKPiArIGlmIChJU19F UlIoY3J0Y19zdGF0ZSkpCj4gKyByZXR1cm4gUFRSX0VSUihjcnRjX3N0YXRlKTsKPiArCj4gKyBj b25uX3N0YXRlLT5jcnRjID0gY3J0YzsKPiArCj4gKyBEUk1fREVCVUdfS01TKCJMaW5rIGNvbm5l Y3RvciBzdGF0ZSAlcCB0byBbQ1JUQzolZF1cbiIsCj4gKyAgICAgIGNvbm5fc3RhdGUsIGNydGMt PmJhc2UuaWQpOwo+ICsKPiArIHJldHVybiAwOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0woZHJtX2F0 b21pY19zZXRfY3J0Y19mb3JfY29ubmVjdG9yKTsKCkluIGRybV9hdG9taWNfaGVscGVyLmMsIHlv dSdyZSBhc3NpZ25pbmcgZGlyZWN0bHkgdG8gY29ubl9zdGF0ZS0+Y3J0Yy4gSSB0aGluawp5b3Ug c2hvdWxkIHByb2JhYmx5IGJlIHVzaW5nIHRoaXMgaGVscGVyIChhcyBpdCBkb2Vzbid0IHNlZW0g dG8gYmUgdXNlZAphbnl3aGVyZSkuIEkgcmVhbGl6ZSB0aGlzIGhhcHBlbnMgaW4gYSBkaWZmZXJl bnQgcGF0Y2gsIGJ1dCBJIHdhbnQgdG8gbWFrZSBzdXJlCkkgZG9uJ3QgbWlzcyBpdCBsYXRlciA6 LSkKCklmIHRoYXQgaXMgdGhlIGNhc2UsIEkgdGhpbmsgdGhpcyBjb3VsZCBhbHNvIGJlbmVmaXQg ZnJvbSB0aGUgIWNydGMgY2hlY2tzIHRoZQpwbGFuZSBlcXVpdmFsZW50IGhhcy4KCj4gKwo+ICsv KioKPiArICogZHJtX2F0b21pY19hZGRfYWZmZWN0ZWRfY29ubmVjdG9ycyAtIGFkZCBjb25uZWN0 b3JzIGZvciBjcnRjCj4gKyAqIEBzdGF0ZTogYXRvbWljIHN0YXRlCj4gKyAqIEBjcnRjOiBEUk0g Y3J0Ywo+ICsgKgo+ICsgKiBUaGlzIGZ1bmN0aW9ucyB3YWxrcyB0aGUgY3VycmVudCBjb25maWd1 cmF0aW9uIGFuZCBhZGRzIGFsbCBjb25uZWN0b3JzCj4gKyAqIGN1cnJlbnRseSB1c2luZyBAY3J0 YyB0byB0aGUgYXRvbWljIGNvbmZpZ3VyYXRpb24gQHN0YXRlLiBOb3RlIHRoYXQgdGhpcwo+ICsg KiBmdW5jdGlvbiBtdXN0IGFjcXVpcmUgdGhlIGNvbm5lY3Rpb24gbXV0ZXguIFRoaXMgY2FuIHBv dGVudGlhbGx5IGNhdXNlCj4gKyAqIHVubmVlZGVkIHNlcmFsaXphdGlvbiBpZiB0aGUgdXBkYXRl IGlzIGp1c3QgZm9yIHRoZSBwbGFuZXMgb24gb25lIGNydGMuIEhlbmNlCj4gKyAqIGRyaXZlcnMg YW5kIGhlbHBlcnMgc2hvdWxkIG9ubHkgY2FsbCB0aGlzIHdoZW4gcmVhbGx5IG5lZWRlZCAoZS5n LiB3aGVuIGEKPiArICogZnVsbCBtb2Rlc2V0IG5lZWRzIHRvIGhhcHBlbiBkdWUgdG8gc29tZSBj aGFuZ2UpLgo+ICsgKgo+ICsgKiBSZXR1cm5zOgo+ICsgKiAwIG9uIHN1Y2Nlc3Mgb3IgY2FuIGZh aWwgd2l0aCAtRURFQURMSyBvciAtRU5PTUVNLgo+ICsgKi8KPiAraW50Cj4gK2RybV9hdG9taWNf YWRkX2FmZmVjdGVkX2Nvbm5lY3RvcnMoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAo+ ICsgICBzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4gK3sKPiArIHN0cnVjdCBkcm1fbW9kZV9jb25m aWcgKmNvbmZpZyA9ICZzdGF0ZS0+ZGV2LT5tb2RlX2NvbmZpZzsKPiArIHN0cnVjdCBkcm1fY29u bmVjdG9yICpjb25uZWN0b3I7Cj4gKyBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubl9z dGF0ZTsKPiArIGludCByZXQ7Cj4gKwo+ICsgcmV0ID0gZHJtX21vZGVzZXRfbG9jaygmY29uZmln LT5jb25uZWN0aW9uX211dGV4LCBzdGF0ZS0+YWNxdWlyZV9jdHgpOwo+ICsgaWYgKHJldCkKPiAr IHJldHVybiByZXQ7Cj4gKwo+ICsgRFJNX0RFQlVHX0tNUygiQWRkaW5nIGFsbCBjdXJyZW50IGNv bm5lY3RvcnMgZm9yIFtDUlRDOiVkXSB0byAlcFxuIiwKPiArICAgICAgY3J0Yy0+YmFzZS5pZCwg c3RhdGUpOwo+ICsKPiArIC8qCj4gKyAqIENoYW5nZWQgY29ubmVjdG9ycyBhcmUgYWxyZWFkeSBp biBAc3RhdGUsIHNvIG9ubHkgbmVlZCB0byBsb29rIGF0IHRoZQo+ICsgKiBjdXJyZW50IGNvbmZp Z3VyYXRpb24uCj4gKyAqLwo+ICsgbGlzdF9mb3JfZWFjaF9lbnRyeShjb25uZWN0b3IsICZjb25m aWctPmNvbm5lY3Rvcl9saXN0LCBoZWFkKSB7Cj4gKyBpZiAoY29ubmVjdG9yLT5zdGF0ZS0+Y3J0 YyAhPSBjcnRjKQo+ICsgY29udGludWU7Cj4gKwo+ICsgY29ubl9zdGF0ZSA9IGRybV9hdG9taWNf Z2V0X2Nvbm5lY3Rvcl9zdGF0ZShzdGF0ZSwgY29ubmVjdG9yKTsKPiArIGlmIChJU19FUlIoY29u bl9zdGF0ZSkpCj4gKyByZXR1cm4gUFRSX0VSUihjb25uX3N0YXRlKTsKPiArIH0KPiArCj4gKyBy ZXR1cm4gMDsKPiArfQo+ICtFWFBPUlRfU1lNQk9MKGRybV9hdG9taWNfYWRkX2FmZmVjdGVkX2Nv bm5lY3RvcnMpOwo+ICsKPiArLyoqCj4gKyAqIGRybV9hdG9taWNfY29ubmVjdG9yc19mb3JfY3J0 YyAtIGNvdW50IG51bWJlciBvZiBjb25uZWN0ZWQgb3V0cHV0cwo+ICsgKiBAc3RhdGU6IGF0b21p YyBzdGF0ZQo+ICsgKiBAY3J0YzogRFJNIGNydGMKPiArICoKPiArICogVGhpcyBmdW5jdGlvbiBj b3VudHMgYWxsIGNvbm5lY3RvcnMgd2hpY2ggd2lsbCBiZSBjb25uZWN0ZWQgdG8gQGNydGMKPiAr ICogYWNjb3JkaW5nIHRvIEBzdGF0ZS4gVXNlZnVsIHRvIHJlY29tcHV0ZSB0aGUgZW5hYmxlIHN0 YXRlIGZvciBAY3J0Yy4KPiArICovCj4gK2ludAo+ICtkcm1fYXRvbWljX2Nvbm5lY3RvcnNfZm9y X2NydGMoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAo+ICsgICAgICAgc3RydWN0IGRy bV9jcnRjICpjcnRjKQo+ICt7Cj4gKyBpbnQgbmNvbm5lY3RvcnMgPSBzdGF0ZS0+ZGV2LT5tb2Rl X2NvbmZpZy5udW1fY29ubmVjdG9yOwo+ICsgaW50IGksIG51bV9jb25uZWN0ZWRfY29ubmVjdG9y cyA9IDA7Cj4gKwo+ICsgZm9yIChpID0gMDsgaSA8IG5jb25uZWN0b3JzOyBpKyspIHsKPiArIHN0 cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpjb25uX3N0YXRlOwo+ICsKPiArIGNvbm5fc3RhdGUg PSBzdGF0ZS0+Y29ubmVjdG9yX3N0YXRlc1tpXTsKPiArCj4gKyBpZiAoY29ubl9zdGF0ZSAmJiBj b25uX3N0YXRlLT5jcnRjID09IGNydGMpCj4gKyBudW1fY29ubmVjdGVkX2Nvbm5lY3RvcnMrKzsK PiArIH0KPiArCj4gKyBEUk1fREVCVUdfS01TKCJTdGF0ZSAlcCBoYXMgJWkgY29ubmVjdG9ycyBm b3IgW0NSVEM6JWRdXG4iLAo+ICsgICAgICBzdGF0ZSwgbnVtX2Nvbm5lY3RlZF9jb25uZWN0b3Jz LCBjcnRjLT5iYXNlLmlkKTsKPiArCj4gKyByZXR1cm4gbnVtX2Nvbm5lY3RlZF9jb25uZWN0b3Jz Owo+ICt9Cj4gK0VYUE9SVF9TWU1CT0woZHJtX2F0b21pY19jb25uZWN0b3JzX2Zvcl9jcnRjKTsK PiArCj4gKy8qKgo+ICsgKiBkcm1fYXRvbWljX2xlZ2FjeV9iYWNrb2ZmIC0gbG9ja2luZyBiYWNr b2ZmIGZvciBsZWdhY3kgaW9jdGxzCj4gKyAqIEBzdGF0ZTogYXRvbWljIHN0YXRlCj4gKyAqCj4g KyAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIHVzZWQgYnkgbGVnYWN5IGVudHJ5IHBvaW50cyB3 aGljaCBkb24ndCB1bmRlcnN0YW5kCj4gKyAqIC1FREVBRExLIHNlbWFudGljcy4gRm9yIHNpbXBs aWNpdHkgdGhpcyBvbmUgd2lsbCBncmFiIGFsbCBtb2Rlc2V0IGxvY2tzIGFmdGVyCj4gKyAqICB0 aGUgc2xvd3BhdGggY29tcGxldGVkLgo+ICsgKi8KPiArdm9pZCBkcm1fYXRvbWljX2xlZ2FjeV9i YWNrb2ZmKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkKPiArewo+ICsgaW50IHJldDsK PiArCj4gK3JldHJ5Ogo+ICsgZHJtX21vZGVzZXRfYmFja29mZihzdGF0ZS0+YWNxdWlyZV9jdHgp Owo+ICsKPiArIHJldCA9IGRybV9tb2Rlc2V0X2xvY2soJnN0YXRlLT5kZXYtPm1vZGVfY29uZmln LmNvbm5lY3Rpb25fbXV0ZXgsCj4gKyAgICAgICBzdGF0ZS0+YWNxdWlyZV9jdHgpOwo+ICsgaWYg KHJldCkKPiArIGdvdG8gcmV0cnk7Cj4gKyByZXQgPSBkcm1fbW9kZXNldF9sb2NrX2FsbF9jcnRj cyhzdGF0ZS0+ZGV2LAo+ICsgc3RhdGUtPmFjcXVpcmVfY3R4KTsKPiArIGlmIChyZXQpCj4gKyBn b3RvIHJldHJ5Owo+ICt9Cj4gK0VYUE9SVF9TWU1CT0woZHJtX2F0b21pY19sZWdhY3lfYmFja29m Zik7Cj4gKwo+ICsvKioKPiArICogZHJtX2F0b21pY19jaGVja19vbmx5IC0gY2hlY2sgd2hldGhl ciBhIGdpdmVuIGNvbmZpZyB3b3VsZCB3b3JrCj4gKyAqIEBzdGF0ZTogYXRvbWljIGNvbmZpZ3Vy YXRpb24gdG8gY2hlY2sKPiArICoKPiArICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gY2FuIHJl dHVybiAtRURFQURMSyBpZiB0aGUgZHJpdmVyIG5lZWRlZCB0byBhY3F1aXJlCj4gKyAqIG1vcmUg bG9ja3MgYnV0IGVuY291bnRlcmVkIGEgZGVhZGxvY2suIFRoZSBjYWxsZXIgbXVzdCB0aGVuIGRv IHRoZSB1c3VhbCB3L3cKPiArICogYmFja29mZiBkYW5jZSBhbmQgcmVzdGFydC4KPiArICoKPiAr ICogUmV0dXJuczoKPiArICogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZh aWx1cmUuCj4gKyAqLwo+ICtpbnQgZHJtX2F0b21pY19jaGVja19vbmx5KHN0cnVjdCBkcm1fYXRv bWljX3N0YXRlICpzdGF0ZSkKPiArewo+ICsgc3RydWN0IGRybV9tb2RlX2NvbmZpZyAqY29uZmln ID0gJnN0YXRlLT5kZXYtPm1vZGVfY29uZmlnOwo+ICsKPiArIERSTV9ERUJVR19LTVMoImNoZWNr aW5nICVwXG4iLCBzdGF0ZSk7Cj4gKwo+ICsgaWYgKGNvbmZpZy0+ZnVuY3MtPmF0b21pY19jaGVj aykKPiArIHJldHVybiBjb25maWctPmZ1bmNzLT5hdG9taWNfY2hlY2soc3RhdGUtPmRldiwgc3Rh dGUpOwo+ICsgZWxzZQo+ICsgcmV0dXJuIDA7Cj4gK30KPiArRVhQT1JUX1NZTUJPTChkcm1fYXRv bWljX2NoZWNrX29ubHkpOwo+ICsKPiArLyoqCj4gKyAqIGRybV9hdG9taWNfY29tbWl0IC0gY29t bWl0IGNvbmZpZ3VyYXRpb24gYXRvbWljYWxseQo+ICsgKiBAc3RhdGU6IGF0b21pYyBjb25maWd1 cmF0aW9uIHRvIGNoZWNrCj4gKyAqCj4gKyAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGNhbiBy ZXR1cm4gLUVERUFETEsgaWYgdGhlIGRyaXZlciBuZWVkZWQgdG8gYWNxdWlyZQo+ICsgKiBtb3Jl IGxvY2tzIGJ1dCBlbmNvdW50ZXJlZCBhIGRlYWRsb2NrLiBUaGUgY2FsbGVyIG11c3QgdGhlbiBk byB0aGUgdXN1YWwgdy93Cj4gKyAqIGJhY2tvZmYgZGFuY2UgYW5kIHJlc3RhcnQuCj4gKyAqCj4g KyAqIEFsc28gbm90ZSB0aGF0IG9uIHN1Y2Nlc3NmdWwgZXhlY3V0aW9uIG93bmVyc2hpcCBvZiBA c3RhdGUgaXMgdHJhbnNmZXJyZWQKPiArICogZnJvbSB0aGUgY2FsbGVyIG9mIHRoaXMgZnVuY3Rp b24gdG8gdGhlIGZ1bmN0aW9uIGl0c2VsZi4gVGhlIGNhbGxlciBtdXN0IG5vdAo+ICsgKiBmcmVl IG9yIGluIGFueSBvdGhlciB3YXkgYWNjZXNzIEBzdGF0ZS4gSWYgdGhlIGZ1bmN0aW9uIGZhaWxz IHRoZW4gdGhlIGNhbGxlcgo+ICsgKiBtdXN0IGNsZWFuIHVwIEBzdGF0ZSBpdHNlbGYuCj4gKyAq Cj4gKyAqIFJldHVybnM6Cj4gKyAqIDAgb24gZXR1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUg b24gZmFpbHVyZS4KCnMvZXQvcy8KCj4gKyAqLwo+ICtpbnQgZHJtX2F0b21pY19jb21taXQoc3Ry dWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQo+ICt7Cj4gKyBzdHJ1Y3QgZHJtX21vZGVfY29u ZmlnICpjb25maWcgPSAmc3RhdGUtPmRldi0+bW9kZV9jb25maWc7Cj4gKyBpbnQgcmV0Owo+ICsK PiArIHJldCA9IGRybV9hdG9taWNfY2hlY2tfb25seShzdGF0ZSk7Cj4gKyBpZiAocmV0KQo+ICsg cmV0dXJuIHJldDsKPiArCj4gKyBEUk1fREVCVUdfS01TKCJjb21taXRpbmcgJXBcbiIsIHN0YXRl KTsKPiArCj4gKyByZXR1cm4gY29uZmlnLT5mdW5jcy0+YXRvbWljX2NvbW1pdChzdGF0ZS0+ZGV2 LCBzdGF0ZSwgZmFsc2UpOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0woZHJtX2F0b21pY19jb21taXQp Owo+ICsKPiArLyoqCj4gKyAqIGRybV9hdG9taWNfYXN5bmNfY29tbWl0IC0gYXRvbWljJmFzeW5j IG9uZmlndXJhdGlvbiBjb21taXQKCnMvb25maWd1cmF0aW9uL2NvbmZpZ3VyYXRpb24vCgo+ICsg KiBAc3RhdGU6IGF0b21pYyBjb25maWd1cmF0aW9uIHRvIGNoZWNrCj4gKyAqCj4gKyAqIE5vdGUg dGhhdCB0aGlzIGZ1bmN0aW9uIGNhbiByZXR1cm4gLUVERUFETEsgaWYgdGhlIGRyaXZlciBuZWVk ZWQgdG8gYWNxdWlyZQo+ICsgKiBtb3JlIGxvY2tzIGJ1dCBlbmNvdW50ZXJlZCBhIGRlYWRsb2Nr LiBUaGUgY2FsbGVyIG11c3QgdGhlbiBkbyB0aGUgdXN1YWwgdy93Cj4gKyAqIGJhY2tvZmYgZGFu Y2UgYW5kIHJlc3RhcnQuCj4gKyAqCj4gKyAqIEFsc28gbm90ZSB0aGF0IG9uIHN1Y2Nlc3NmdWwg ZXhlY3V0aW9uIG93bmVyc2hpcCBvZiBAc3RhdGUgaXMgdHJhbnNmZXJyZWQKPiArICogZnJvbSB0 aGUgY2FsbGVyIG9mIHRoaXMgZnVuY3Rpb24gdG8gdGhlIGZ1bmN0aW9uIGl0c2VsZi4gVGhlIGNh bGxlciBtdXN0IG5vdAo+ICsgKiBmcmVlIG9yIGluIGFueSBvdGhlciB3YXkgYWNjZXNzIEBzdGF0 ZS4gSWYgdGhlIGZ1bmN0aW9uIGZhaWxzIHRoZW4gdGhlIGNhbGxlcgo+ICsgKiBtdXN0IGNsZWFu IHVwIEBzdGF0ZSBpdHNlbGYuCj4gKyAqCj4gKyAqIFJldHVybnM6Cj4gKyAqIDAgb24gc3VjY2Vz cywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgo+ICsgKi8KPiAraW50IGRybV9hdG9t aWNfYXN5bmNfY29tbWl0KHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkKPiArewo+ICsg c3RydWN0IGRybV9tb2RlX2NvbmZpZyAqY29uZmlnID0gJnN0YXRlLT5kZXYtPm1vZGVfY29uZmln Owo+ICsgaW50IHJldDsKPiArCj4gKyByZXQgPSBkcm1fYXRvbWljX2NoZWNrX29ubHkoc3RhdGUp Owo+ICsgaWYgKHJldCkKPiArIHJldHVybiByZXQ7Cj4gKwo+ICsgRFJNX0RFQlVHX0tNUygiY29t bWl0aW5nICVwIGFzeW5jaHJvbm91c2x5XG4iLCBzdGF0ZSk7Cj4gKwo+ICsgcmV0dXJuIGNvbmZp Zy0+ZnVuY3MtPmF0b21pY19jb21taXQoc3RhdGUtPmRldiwgc3RhdGUsIHRydWUpOwo+ICt9Cj4g K0VYUE9SVF9TWU1CT0woZHJtX2F0b21pY19hc3luY19jb21taXQpOwo+IGRpZmYgLS1naXQgYS9p bmNsdWRlL2RybS9kcm1fYXRvbWljLmggYi9pbmNsdWRlL2RybS9kcm1fYXRvbWljLmgKPiBuZXcg ZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uNzUzODEyMDM0ZTcxCj4gLS0t IC9kZXYvbnVsbAo+ICsrKyBiL2luY2x1ZGUvZHJtL2RybV9hdG9taWMuaAo+IEBAIC0wLDAgKzEs NjMgQEAKPiArLyoKPiArICogQ29weXJpZ2h0IChDKSAyMDE0IFJlZCBIYXQKPiArICogQ29weXJp Z2h0IChDKSAyMDE0IEludGVsIENvcnAuCj4gKyAqCj4gKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5 IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCj4gKyAq IGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVz ICh0aGUgIlNvZnR3YXJlIiksCj4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQg cmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KPiArICogdGhlIHJpZ2h0 cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1Ymxp Y2Vuc2UsCj4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBw ZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQo+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8g ZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+ICsgKgo+ICsgKiBU aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFs bCBiZSBpbmNsdWRlZCBpbgo+ICsgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25z IG9mIHRoZSBTb2Z0d2FyZS4KPiArICoKPiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJB UyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKPiArICogSU1Q TElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJD SEFOVEFCSUxJVFksCj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBO T05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAo+ICsgKiBUSEUgQ09QWVJJR0hUIEhP TERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IK PiArICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwg VE9SVCBPUiBPVEhFUldJU0UsCj4gKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5F Q1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgo+ICsgKiBPVEhFUiBERUFMSU5H UyBJTiBUSEUgU09GVFdBUkUuCj4gKyAqCj4gKyAqIEF1dGhvcnM6Cj4gKyAqIFJvYiBDbGFyayA8 cm9iZGNsYXJrQGdtYWlsLmNvbT4KPiArICogRGFuaWVsIFZldHRlciA8ZGFuaWVsLnZldHRlckBm ZndsbC5jaD4KPiArICovCj4gKwo+ICsjaWZuZGVmIERSTV9BVE9NSUNfSF8KPiArI2RlZmluZSBE Uk1fQVRPTUlDX0hfCj4gKwo+ICtzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqCj4gK2RybV9hdG9t aWNfc3RhdGVfYWxsb2Moc3RydWN0IGRybV9kZXZpY2UgKmRldik7Cj4gK3ZvaWQgZHJtX2F0b21p Y19zdGF0ZV9jbGVhcihzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpOwo+ICt2b2lkIGRy bV9hdG9taWNfc3RhdGVfZnJlZShzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpOwo+ICsK PiArc3RydWN0IGRybV9jcnRjX3N0YXRlICoKPiArZHJtX2F0b21pY19nZXRfY3J0Y19zdGF0ZShz dHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCj4gKyAgc3RydWN0IGRybV9jcnRjICpjcnRj KTsKPiArc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqCj4gK2RybV9hdG9taWNfZ2V0X3BsYW5lX3N0 YXRlKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwKPiArICAgc3RydWN0IGRybV9wbGFu ZSAqcGxhbmUpOwo+ICtzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqCj4gK2RybV9hdG9taWNf Z2V0X2Nvbm5lY3Rvcl9zdGF0ZShzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCj4gKyAg ICAgICBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKTsKPiArCj4gK2ludCBkcm1fYXRv bWljX3NldF9jcnRjX2Zvcl9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0 ZSwKPiArICBzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOwo+ICtpbnQgZHJtX2F0b21pY19zZXRfY3J0 Y19mb3JfY29ubmVjdG9yKHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpjb25uX3N0YXRlLAo+ ICsgICAgICBzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOwo+ICtpbnQKPiArZHJtX2F0b21pY19hZGRf YWZmZWN0ZWRfY29ubmVjdG9ycyhzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCj4gKyAg IHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7Cj4gK2ludAo+ICtkcm1fYXRvbWljX2Nvbm5lY3RvcnNf Zm9yX2NydGMoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAo+ICsgICAgICAgc3RydWN0 IGRybV9jcnRjICpjcnRjKTsKPiArCj4gK3ZvaWQgZHJtX2F0b21pY19sZWdhY3lfYmFja29mZihz dHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpOwo+ICsKPiAraW50IGRybV9hdG9taWNfY2hl Y2tfb25seShzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpOwo+ICtpbnQgZHJtX2F0b21p Y19jb21taXQoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKTsKPiAraW50IGRybV9hdG9t aWNfYXN5bmNfY29tbWl0KHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSk7Cj4gKwo+ICsj ZW5kaWYgLyogRFJNX0FUT01JQ19IXyAqLwo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1f Y3J0Yy5oIGIvaW5jbHVkZS9kcm0vZHJtX2NydGMuaAo+IGluZGV4IDk4NDcwMDlhZDQ1MS4uYzNj ZTViMzZkYTVmIDEwMDY0NAo+IC0tLSBhL2luY2x1ZGUvZHJtL2RybV9jcnRjLmgKPiArKysgYi9p bmNsdWRlL2RybS9kcm1fY3J0Yy5oCj4gQEAgLTc5OSw2ICs3OTksMzIgQEAgc3RydWN0IGRybV9i cmlkZ2Ugewo+ICB9Owo+Cj4gIC8qKgo+ICsgKiBzdHJ1Y3Qgc3RydWN0IGRybV9hdG9taWNfc3Rh dGUgLSB0aGUgZ2xvYmFsIHN0YXRlIG9iamVjdCBmb3IgYXRvbWljIHVwZGF0ZXMKPiArICogQGRl djogcGFyZW50IERSTSBkZXZpY2UKPiArICogQGZsYWdzOiBzdGF0ZSBmbGFncyBsaWtlIGFzeW5j IHVwZGF0ZQo+ICsgKiBAcGxhbmVzOiBwb2ludGVyIHRvIGFycmF5IG9mIHBsYW5lIHBvaW50ZXJz Cj4gKyAqIEBwbGFuZV9zdGF0ZXM6IHBvaW50ZXIgdG8gYXJyYXkgb2YgcGxhbmUgc3RhdGVzIHBv aW50ZXJzCj4gKyAqIEBjcnRjczogcG9pbnRlciB0byBhcnJheSBvZiBDUlRDIHBvaW50ZXJzCj4g KyAqIEBjcnRjX3N0YXRlczogcG9pbnRlciB0byBhcnJheSBvZiBDUlRDIHN0YXRlcyBwb2ludGVy cwo+ICsgKiBAY29ubmVjdG9yczogcG9pbnRlciB0byBhcnJheSBvZiBjb25uZWN0b3IgcG9pbnRl cnMKPiArICogQGNvbm5lY3Rvcl9zdGF0ZXM6IHBvaW50ZXIgdG8gYXJyYXkgb2YgY29ubmVjdG9y IHN0YXRlcyBwb2ludGVycwo+ICsgKiBAYWNxdWlyZV9jdHg6IGFjcXVpcmUgY29udGV4dCBmb3Ig dGhpcyBhdG9taWMgbW9kZXNldCBzdGF0ZSB1cGRhdGUKPiArICovCj4gK3N0cnVjdCBkcm1fYXRv bWljX3N0YXRlIHsKPiArICAgICAgIHN0cnVjdCBkcm1fZGV2aWNlICpkZXY7Cj4gKyAgICAgICB1 aW50MzJfdCBmbGFnczsKPiArICAgICAgIHN0cnVjdCBkcm1fcGxhbmUgKipwbGFuZXM7Cj4gKyAg ICAgICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICoqcGxhbmVfc3RhdGVzOwo+ICsgICAgICAgc3Ry dWN0IGRybV9jcnRjICoqY3J0Y3M7Cj4gKyAgICAgICBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKipj cnRjX3N0YXRlczsKPiArICAgICAgIHN0cnVjdCBkcm1fY29ubmVjdG9yICoqY29ubmVjdG9yczsK PiArICAgICAgIHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICoqY29ubmVjdG9yX3N0YXRlczsK PiArCj4gKyAgICAgICBzdHJ1Y3QgZHJtX21vZGVzZXRfYWNxdWlyZV9jdHggKmFjcXVpcmVfY3R4 Owo+ICt9Owo+ICsKPiArCj4gKy8qKgo+ICAgKiBzdHJ1Y3QgZHJtX21vZGVfc2V0IC0gbmV3IHZh bHVlcyBmb3IgYSBDUlRDIGNvbmZpZyBjaGFuZ2UKPiAgICogQGZiOiBmcmFtZWJ1ZmZlciB0byB1 c2UgZm9yIG5ldyBjb25maWcKPiAgICogQGNydGM6IENSVEMgd2hvc2UgY29uZmlndXJhdGlvbiB3 ZSdyZSBhYm91dCB0byBjaGFuZ2UKPiBAQCAtODI5LDYgKzg1NSw5IEBAIHN0cnVjdCBkcm1fbW9k ZV9zZXQgewo+ICAgKiBzdHJ1Y3QgZHJtX21vZGVfY29uZmlnX2Z1bmNzIC0gYmFzaWMgZHJpdmVy IHByb3ZpZGVkIG1vZGUgc2V0dGluZyBmdW5jdGlvbnMKPiAgICogQGZiX2NyZWF0ZTogY3JlYXRl IGEgbmV3IGZyYW1lYnVmZmVyIG9iamVjdAo+ICAgKiBAb3V0cHV0X3BvbGxfY2hhbmdlZDogZnVu Y3Rpb24gdG8gaGFuZGxlIG91dHB1dCBjb25maWd1cmF0aW9uIGNoYW5nZXMKPiArICogQGF0b21p Y19jaGVjazogY2hlY2sgd2hldGhlciBhIGdpdmUgYXRvbWljIHN0YXRlIHVwZGF0ZSBpcyBwb3Nz aWJsZQo+ICsgKiBAYXRvbWljX2NvbW1pdDogY29tbWl0IGFuIGF0b21pYyBzdGF0ZSB1cGRhdGUg cHJldmlvdXNseSB2ZXJpZmllZCB3aXRoCj4gKyAqIGF0b21pY19jaGVjaygpCj4gICAqCj4gICAq IFNvbWUgZ2xvYmFsIChpLmUuIG5vdCBwZXItQ1JUQywgY29ubmVjdG9yLCBldGMpIG1vZGUgc2V0 dGluZyBmdW5jdGlvbnMgdGhhdAo+ICAgKiBpbnZvbHZlIGRyaXZlcnMuCj4gQEAgLTgzOCw2ICs4 NjcsMTIgQEAgc3RydWN0IGRybV9tb2RlX2NvbmZpZ19mdW5jcyB7Cj4gICAgICAgc3RydWN0IGRy bV9maWxlICpmaWxlX3ByaXYsCj4gICAgICAgc3RydWN0IGRybV9tb2RlX2ZiX2NtZDIgKm1vZGVf Y21kKTsKPiAgIHZvaWQgKCpvdXRwdXRfcG9sbF9jaGFuZ2VkKShzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2KTsKPiArCj4gKyBpbnQgKCphdG9taWNfY2hlY2spKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYs Cj4gKyAgICBzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqYSk7Cj4gKyBpbnQgKCphdG9taWNfY29t bWl0KShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ICsgICAgIHN0cnVjdCBkcm1fYXRvbWljX3N0 YXRlICphLAo+ICsgICAgIGJvb2wgYXN5bmMpOwo+ICB9Owo+Cj4gIC8qKgo+IC0tCj4gMi4xLjEK Pgo+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gZHJp LWRldmVsIG1haWxpbmcgbGlzdAo+IGRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPiBo dHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBt YWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMu ZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==