LyoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogICAgIHBhc3N0aHJvdWdoLmggLS0gRW11MTBrMSBkaWdpdGFsIHBhc3N0aHJvdWdoIGhlYWRlciBmaWxlCiAqICAgICBDb3B5cmlnaHQgKEMpIDIwMDEgIEp1aGEgWXJq9mzkIDxqeXJqb2xhQGNjLmh1dC5maT4KICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoKICogICAgIERhdGUgICAgICAgICAgICAgICAgIEF1dGhvciAgICAgICAgICBTdW1tYXJ5IG9mIGNoYW5nZXMKICogICAgIC0tLS0gICAgICAgICAgICAgICAgIC0tLS0tLSAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0KICogICAgIE1heSAxNSwgMjAwMQkgICAgSnVoYSBZcmr2bOQgICAgIGJhc2UgY29kZSByZWxlYXNlCiAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqCiAqICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwogKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKICogICAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiAgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogKiAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogKiAgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQogKiAgICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LAogKiAgICAgVVNBLgogKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKi8KCiNpZm5kZWYgX1BBU1NUSFJPVUdIX0gKI2RlZmluZSBfUEFTU1RIUk9VR0hfSAoKI2luY2x1ZGUgImF1ZGlvLmgiCgovKiBudW1iZXIgb2YgMTYtYml0IHN0ZXJlbyBzYW1wbGVzIGluIFhUUkFNIGJ1ZmZlciAqLwojZGVmaW5lIFBUX1NBTVBMRVMgMHg4MDAwCiNkZWZpbmUgUFRfQkxPQ0tTQU1QTEVTIDB4NDAwCiNkZWZpbmUgUFRfQkxPQ0tTSVpFIChQVF9CTE9DS1NBTVBMRVMqNCkKI2RlZmluZSBQVF9CTE9DS1NJWkVfTE9HMiAxMgojZGVmaW5lIFBUX0JMT0NLQ09VTlQgKFBUX1NBTVBMRVMvUFRfQkxPQ0tTQU1QTEVTKQojZGVmaW5lIFBUX0lOSVRQVFIgKFBUX1NBTVBMRVMvMi0xKQoKI2RlZmluZSBQVF9TVEFURV9JTkFDVElWRSAwCiNkZWZpbmUgUFRfU1RBVEVfQUNUSVZBVEVEIDEKI2RlZmluZSBQVF9TVEFURV9QTEFZSU5HIDIKCi8qIHBhc3N0aHJvdWdoIHN0cnVjdCAqLwpzdHJ1Y3QgcHRfZGF0YQp7Cgl1OAlzZWxlY3RlZCwgc3RhdGUsIHNwY3NfdG9fdXNlOwoJaW50CWludHJfZ3ByLCBlbmFibGVfZ3ByLCBwb3NfZ3ByOwoJdTMyCWJsb2Nrc19wbGF5ZWQsIGJsb2Nrc19jb3BpZWQsIG9sZF9zcGNzWzNdOwoJdTMyCXBsYXlwdHIsIGNvcHlwdHI7Cgl1MzIJcHJlcGVuZF9zaXplOwoJdTgJKmJ1ZjsKCXU4CWFjM2RhdGE7CgoJY2hhcgkqcGF0Y2hfbmFtZSwgKmludHJfZ3ByX25hbWUsICplbmFibGVfZ3ByX25hbWUsICpwb3NfZ3ByX25hbWU7CgoJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDsKCXNwaW5sb2NrX3QgbG9jazsKfTsKCi8qCiAgUGFzc3Rocm91Z2ggY2FuIGJlIGRvbmUgaW4gdHdvIG1ldGhvZHM6CgogIE1ldGhvZCAxIDogdHJhbQogICAgIEluIG9yaWdpbmFsIGVtdTEwazEsIHdlIGNvdWxkbid0IGJ5cGFzcyB0aGUgc2FtcGxlIHJhdGUgY29udmVydGVycy4gRXZlbiBhdCA0OGtIegogICAgICh0aGUgaW50ZXJuYWwgc2FtcGxlIHJhdGUgb2YgdGhlIGVtdTEwazEpIHRoZSBzYW1wbGVzIHdvdWxkIGdldCBtZXNzZWQgdXAuCiAgICAgVG8gb3ZlciBjb21lIHRoaXMsIHNhbXBsZXMgYXJlIGNvcGllZCBpbnRvIHRoZSB0cmFtIGFuZCBhIHNwZWNpYWwgZHNwIHBhdGNoIGNvcGllcwogICAgIHRoZSBzYW1wbGVzIG91dCBhbmQgZ2VuZXJhdGVzIGludGVycnVwdHMgd2hlbiBhIGJsb2NrIGhhcyBmaW5uaXNoZWQgcGxheWluZy4KCiAgTWV0aG9kIDIgOiBJbnRlcnBvbGF0b3IgYnlwYXNzCgogICAgIENyZWF0aXZlIGZpeGVkIHRoZSBzYW1wbGUgcmF0ZSBjb252ZXJ0IHByb2JsZW0gaW4gZW11MTBrMSByZXYgNyBhbmQgaGlnaGVyCiAgICAgKGluY2x1ZGluZyB0aGUgZW11MTBrMiAoYXVkaWd5KSkuIFRoaXMgYWxsb3dzIHVzIHRvIHVzZSB0aGUgcmVndWxhciwgYW5kIG11Y2ggc2ltcGxlcgogICAgIHBsYXliYWNrIG1ldGhvZC4gCgoKICBJbiBib3RoIG1ldGhvZHMsIGRzcCBjb2RlIGlzIHVzZWQgdG8gbXV4IGF1ZGlvIGFuZCBwYXNzdGhyb3VnaC4gVGhpcyBlbnN1cmVzIHRoYXQgdGhlIHNwZGlmCiAgZG9lc24ndCByZWNlaXZlIGF1ZGlvIGFuZCBwYXN0aHJvdWdoIGRhdGEgYXQgdGhlIHNhbWUgdGltZS4gVGhlIHNwZGlmIGZsYWcgU1BDU19OT1RBVURJT0RBVEEKICBpcyBzZXQgdG8gdGVsbCAKCiAqLwoKLy8gZW11MTBrMSByZXZzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byA3IGNhbiB1c2UgbWV0aG9kMgoKI2RlZmluZSBVU0VfUFRfTUVUSE9EMiAgKGNhcmQtPmlzX2F1ZGlneSkKI2RlZmluZSBVU0VfUFRfTUVUSE9EMQkhVVNFX1BUX01FVEhPRDIKCnNzaXplX3QgZW11MTBrMV9wdF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50KTsKCmludCBlbXUxMGsxX3B0X3NldHVwKHN0cnVjdCBlbXUxMGsxX3dhdmVkZXZpY2UgKndhdmVfZGV2KTsKdm9pZCBlbXUxMGsxX3B0X3N0b3Aoc3RydWN0IGVtdTEwazFfY2FyZCAqY2FyZCk7CnZvaWQgZW11MTBrMV9wdF93YXZlb3V0X3VwZGF0ZShzdHJ1Y3QgZW11MTBrMV93YXZlZGV2aWNlICp3YXZlX2Rldik7CgojZW5kaWYgLyogX1BBU1NUSFJPVUdIX0ggKi8K