ZGlmZiAtLWdpdCBhL0NIQU5HRUxPRyBiL0NIQU5HRUxPRwppbmRleCAwMTVhNGFjLi5lZjVjN2VhIDEwMDY0NAotLS0gYS9DSEFOR0VMT0cKKysrIGIvQ0hBTkdFTE9HCkBAIC0xLDMgKzEsNjg3IEBACitjb21taXQgNDY3YmNlZTExZmUyNmFkNDIyZjJkZTk3MWFhNzA4NjYwNzk4NzBmMgorQXV0aG9yOiBIYWF2YXJkIFNraW5uZW1vZW4gPGhza2lubmVtb2VuQGF0bWVsLmNvbT4KK0RhdGU6CUZyaSBEZWMgMTQgMTU6MzY6MTggMjAwNyArMDEwMAorCisgICAgY2ZpX2ZsYXNoOiBBZGQgbWFudWZhY3R1cmVyLXNwZWNpZmljIGZpeHVwcworCisgICAgUnVuIGZpeHVwcyBiYXNlZCBvbiB0aGUgSkVERUMgbWFudWZhY3R1cmVyIElEIGluZGVwZW5kZW50IG9mIHRoZQorICAgIGNvbW1hbmQgc2V0IElELgorCisgICAgVGhpcyBjaGFuZ2VzIGN1cnJlbnQgYmVoYXZpb3VyOiBQcmV2aW91c2x5LCBnZW9tZXRyeSByZXZlcnNhbCBmb3IgQU1ECisgICAgY2hpcHMgd2VyZSBkb25lIGJhc2VkIG9uIHRoZSBjb21tYW5kIHNldCBJRCwgd2hpbGUgdGhleSBhcmUgbm93IGRvbmUKKyAgICBiYXNlZCBvbiB0aGUgSkVERUMgbWFudWZhY3R1cmVyIGFuZCBkZXZpY2UgSUQuCisKKyAgICBBbHNvIGFkZCBmaXh1cCBmb3IgdG9wLWJvb3QgQXRtZWwgY2hpcHMuIEEgZml4dXAgaXMgbmVlZGVkIGZvcgorICAgIEFUNDlCVjY0MTYoVCkgdG9vLCBidXQgc2luY2UgdS1ib290IGN1cnJlbnRseSBvbmx5IHJlYWRzIHRoZSBsb3cgYnl0ZQorICAgIG9mIHRoZSBkZXZpY2UgSUQsIHRoZXJlJ3Mgbm8gd2F5IHRvIHRlbGwgaXQgYXBhcnQgZnJvbSBBVDQ5QlY2NDJELAorICAgIHdoaWNoIHNob3VsZCBub3QgaGF2ZSB0aGlzIGZpeHVwLiBTaW5jZSBBVDQ5QlY2NDJEIHN1cHBvcnQgaXMKKyAgICBuZWNlc3NhcnkgdG8gZ2V0IEFUTkdXMTAwIGJvYXJkIHN1cHBvcnQgaW50byBtYWlubGluZSwgSSd2ZSBjb21tZW50ZWQKKyAgICBvdXQgdGhlIGZpeHVwIGZvciBub3cuCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBIYWF2YXJkIFNraW5uZW1vZW4gPGhza2lubmVtb2VuQGF0bWVsLmNvbT4KKworY29tbWl0IDBkZGYwNmRkZjZiNGJkMDU3YWQ0YzVmMGRmZmVhNzg3MGJhMDZhMmEKK0F1dGhvcjogSGFhdmFyZCBTa2lubmVtb2VuIDxoc2tpbm5lbW9lbkBhdG1lbC5jb20+CitEYXRlOglGcmkgRGVjIDE0IDE1OjM2OjE3IDIwMDcgKzAxMDAKKworICAgIGNmaV9mbGFzaDogQWRkIGNtZHNldC1zcGVjaWZpYyBpbml0IGZ1bmN0aW9ucworCisgICAgTW92ZSB0aGluZ3MgbGlrZSByZWFkaW5nIEpFREVDIElEcyBhbmQgZml4aW5nIHVwIGdlb21ldHJ5IHJldmVyc2FsCisgICAgaW50byBzZXBhcmF0ZSBmdW5jdGlvbnMuIFRoZSBnZW9tZXRyeSByZXZlcnNhbCBmaXh1cCBpcyBub3cgcGVyZm9ybWVkCisgICAgYnkgYWx0ZXJpbmcgdGhlIHFyeSBzdHJ1Y3R1cmUgZGlyZWN0bHksIHdoaWNoIG1ha2VzIHRoZSBzZWN0b3IgaW5pdAorICAgIGNvZGUgc2xpZ2h0bHkgY2xlYW5lci4KKworICAgIFNpZ25lZC1vZmYtYnk6IEhhYXZhcmQgU2tpbm5lbW9lbiA8aHNraW5uZW1vZW5AYXRtZWwuY29tPgorCitjb21taXQgZTIzNzQxZjRhNmQ4MDQ3NTIwZWYwZDQ5NzE3NjI3NDliMzU4N2QzMgorQXV0aG9yOiBIYWF2YXJkIFNraW5uZW1vZW4gPGhza2lubmVtb2VuQGF0bWVsLmNvbT4KK0RhdGU6CUZyaSBEZWMgMTQgMTU6MzY6MTYgMjAwNyArMDEwMAorCisgICAgY2ZpX2ZsYXNoOiBSZWFkIHdob2xlIFFSWSBzdHJ1Y3R1cmUgaW4gb25lIGdvCisKKyAgICBSZWFkIG91dCB0aGUgd2hvbGUgQ0ZJIFN0YW5kYXJkIFF1ZXJ5IHN0cnVjdHVyZSBhZnRlciBzdWNjZXNzZnVsIGNmaQorICAgIGlkZW50aWZpY2F0aW9uLiBUaGlzIGFsbG93cyBzdWJzZXF1ZW50IGNvZGUgdG8gYWNjZXNzIHRoaXMgaW5mb3JtYXRpb24KKyAgICBkaXJlY3RseSB3aXRob3V0IGhhdmluZyB0byBnbyB0aHJvdWdoIGZsYXNoX3JlYWRfdWNoYXIoKSBhbmQgZnJpZW5kcy4KKworICAgIFNpZ25lZC1vZmYtYnk6IEhhYXZhcmQgU2tpbm5lbW9lbiA8aHNraW5uZW1vZW5AYXRtZWwuY29tPgorCitjb21taXQgZGY5YzI1ZWEwNGIzOGEwZTA1ZDRmOGM3M2M1Y2MxNDRjZGFmYTdkYgorQXV0aG9yOiBIYWF2YXJkIFNraW5uZW1vZW4gPGhza2lubmVtb2VuQGF0bWVsLmNvbT4KK0RhdGU6CU1vbiBEZWMgMTcgMTE6MDI6NDQgMjAwNyArMDEwMAorCisgICAgQVZSMzI6IEZpeCBsb2dpYyBpbnZlcnNpb24gaW4gZGlzYWJsZV9pbnRlcnJ1cHRzKCkKKworICAgIGRpc2FibGVfaW50ZXJydXB0cygpIHNob3VsZCByZXR1cm4gbm9uemVybyBpZiBpbnRlcnJ1cHRzIHdlcmUKKyAgICBfZW5hYmxlZF8gYmVmb3JlLCBub3QgZGlzYWJsZWQuCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBIYWF2YXJkIFNraW5uZW1vZW4gPGhza2lubmVtb2VuQGF0bWVsLmNvbT4KKworY29tbWl0IGFjYWM0NzUyMTJjYmVkYjE3YjMyMWEzNjNhMWM4NzhlMmI0N2IzN2YKK0F1dGhvcjogSGFhdmFyZCBTa2lubmVtb2VuIDxoc2tpbm5lbW9lbkBhdG1lbC5jb20+CitEYXRlOglGcmkgRGVjIDE0IDE2OjUxOjIyIDIwMDcgKzAxMDAKKworICAgIEFWUjMyOiBFbmFibGUgaW50ZXJydXB0cyBhdCBib290dXAKKworICAgIFRoZSB0aW1lciBjb2RlIGRlcGVuZHMgb24gdGhlIHRpbWVyIGludGVycnVwdCB0byBrZWVwIHRyYWNrIG9mIHRoZQorICAgIHVwcGVyIDMyIGJpdHMgb2YgdGhlIGN5Y2xlIGNvdW50ZXIuIFRoaXMgb2J2aW91c2x5IGRvZXNuJ3Qgd29yayB3aGVuCisgICAgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgdGhlIHdob2xlIHRpbWUuCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBIYWF2YXJkIFNraW5uZW1vZW4gPGhza2lubmVtb2VuQGF0bWVsLmNvbT4KKworY29tbWl0IDk1NzBiY2Q4N2Y0ZGIyNTU1MTRmNDNiNjcwMTc0NmM0MTJmOGZlZjAKK0F1dGhvcjogSGFhdmFyZCBTa2lubmVtb2VuIDxoc2tpbm5lbW9lbkBhdG1lbC5jb20+CitEYXRlOglUaHUgTm92IDE1IDEwOjAzOjQ1IDIwMDcgKzAxMDAKKworICAgIEFWUjMyOiBGaXggd3JvbmcgcGluIHNldHVwIGZvciBVU0FSVDMKKworICAgIEFzIHJlcG9ydGVkIGJ5IEdlcmhhcmQgQmVyZ2hvZmVyOgorCisgICAgaW4gImdwaW9fZW5hYmxlX3VzYXJ0MyIgdGhlIGNvcnJlY3QgcGlucyBmb3IgVVNBUlQgMyBhcmUgUEIxNyBhbmQgUEIxOAorICAgIGluc3RlYWQgb2YgUEIxOCBhbmQgUEIxOS4KKworICAgIHdoaWNoIGlzIG9idmlvdXNseSBjb3JyZWN0LiBUaGVyZSdzIGN1cnJlbnRseSBubyBjb2RlIHRoYXQgdXNlcworICAgIFVTQVJUMywgYnV0IGN1c3RvbSBib2FyZHMgbWF5IHJ1biBpbnRvIHByb2JsZW1zLgorCisgICAgU2lnbmVkLW9mZi1ieTogSGFhdmFyZCBTa2lubmVtb2VuIDxoc2tpbm5lbW9lbkBhdG1lbC5jb20+CisKK2NvbW1pdCAwOWVhMGRlMDNkY2MzZWU3YWYwNDViMGI1NzIyMjdiZGEyYzFjOTE4CitBdXRob3I6IEhhYXZhcmQgU2tpbm5lbW9lbiA8aHNraW5uZW1vZW5AYXRtZWwuY29tPgorRGF0ZToJVGh1IE5vdiAxIDEyOjQ0OjIwIDIwMDcgKzAxMDAKKworICAgIFJFQURNRTogUmVtb3ZlIEFUU1RLMTAwMCBkYXVnaHRlcmJvYXJkIGxpc3QKKworICAgIEFzIG5vdGVkIGJ5IEtpbSBQaGlsbGlwcywgdGhlc2UgbGlzdHMgdGVuZCB0byBiZWNvbWUgb3V0IG9mIGRhdGUuCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBIYWF2YXJkIFNraW5uZW1vZW4gPGhza2lubmVtb2VuQGF0bWVsLmNvbT4KKworY29tbWl0IGM4MWNiYmFkMjFjYjBhZTk4M2UyZTc5NjIxMTIwMjIzNGNkYzhiZTIKK0F1dGhvcjogSGFhdmFyZCBTa2lubmVtb2VuIDxoc2tpbm5lbW9lbkBhdG1lbC5jb20+CitEYXRlOglUdWUgT2N0IDMwIDE0OjU2OjM2IDIwMDcgKzAxMDAKKworICAgIEFkZCBBVFNUSzEwMFsyMzRdIHRvIE1BSU5UQUlORVJTCisKKyAgICBBZGQgYWxsIHRoZSBBVFNUSzEwMDAgZGF1Z2h0ZXJib2FyZHMgdG8gTUFJTlRBSU5FUlMgYWxvbmcgd2l0aCB0aGVpcgorICAgICJtb3RoZXIiLiBBbHNvIHVwZGF0ZSB0aGUgZW50cnkgZm9yIEFUU1RLMTAwMCB0byBiZSBub3Qgb25seSBhYm91dCB0aGUKKyAgICBBUDcwMDAgQ1BVOyBpdCdzIGludGVuZGVkIHRvIGhhbmRsZSBhbGwgQ1BVcyBpbiB0aGUgQVQzMkFQIGZhbWlseS4KKworICAgIFNpZ25lZC1vZmYtYnk6IEhhYXZhcmQgU2tpbm5lbW9lbiA8aHNraW5uZW1vZW5AYXRtZWwuY29tPgorCitjb21taXQgNjRmZjIzNTdiMTcyNzIxMzgwMzU5MTgxM2RiYzc3OWM5MjRiZjc3MgorQXV0aG9yOiBIYWF2YXJkIFNraW5uZW1vZW4gPGhza2lubmVtb2VuQGF0bWVsLmNvbT4KK0RhdGU6CU1vbiBPY3QgMjkgMTM6MDI6NTQgMjAwNyArMDEwMAorCisgICAgQVZSMzI6IEFkZCBzdXBwb3J0IGZvciB0aGUgQVRTVEsxMDA0IGJvYXJkCisKKyAgICBBVFNUSzEwMDQgaXMgYSBkYXVnaHRlcmJvYXJkIGZvciBBVFNUSzEwMDAgd2l0aCB0aGUgQVQzMkFQNzAwMiBDUFUsCisgICAgd2hpY2ggaXMgYSBkZXJpdmF0aXZlIG9mIEFUMzJBUDcwMDAuCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBIYWF2YXJkIFNraW5uZW1vZW4gPGhza2lubmVtb2VuQGF0bWVsLmNvbT4KKworY29tbWl0IDY2NzU2OGRiMTU3ZjM3NGI4NWFiZDdlMDM1OTZkZGQxZjBiMjU2ODEKK0F1dGhvcjogSGFhdmFyZCBTa2lubmVtb2VuIDxoc2tpbm5lbW9lbkBhdG1lbC5jb20+CitEYXRlOglNb24gT2N0IDI5IDEzOjAyOjU0IDIwMDcgKzAxMDAKKworICAgIEFWUjMyOiBBZGQgc3VwcG9ydCBmb3IgdGhlIEFUU1RLMTAwMyBib2FyZAorCisgICAgQVRTVEsxMDAzIGlzIGEgZGF1Z2h0ZXJib2FyZCBmb3IgQVRTVEsxMDAwIHdpdGggdGhlIEFUMzJBUDcwMDEgQ1BVLAorICAgIHdoaWNoIGlzIGEgZGVyaXZhdGl2ZSBvZiBBVDMyQVA3MDAwLgorCisgICAgU2lnbmVkLW9mZi1ieTogSGFhdmFyZCBTa2lubmVtb2VuIDxoc2tpbm5lbW9lbkBhdG1lbC5jb20+CisKK2NvbW1pdCA1ZmVlODRhNzk0YTUxZWM4MzA1NDhjZGE0ODVhNzcwZWZiMDE4YjkyCitBdXRob3I6IEhhYXZhcmQgU2tpbm5lbW9lbiA8aHNraW5uZW1vZW5AYXRtZWwuY29tPgorRGF0ZToJTW9uIE9jdCAyOSAxMzoyMzozMyAyMDA3ICswMTAwCisKKyAgICBBVlIzMjogTWFrZSBzb21lIEFUMzJBUDcwMHggcGVyaXBoZXJhbHMgb3B0aW9uYWwKKworICAgIEFkZCBhIGNoaXAtZmVhdHVyZXMgZmlsZSBwcm92aWRpbmcgZGVmaW5pdGlvbnMgb2YgdGhlIGZvcm0KKworICAgIEFUMzJBUDcwMHhfQ0hJUF9IQVNfPHBlcmlwaGVyYWw+CisKKyAgICB0byBpbmRpY2F0ZSB0aGUgYXZhaWxhYmlsaXR5IG9mIHRoZSBnaXZlbiBwZXJpcGhlcmFsIG9uIHRoZSBjdXJyZW50bHkKKyAgICBzZWxlY3RlZCBjaGlwLgorCisgICAgU2lnbmVkLW9mZi1ieTogSGFhdmFyZCBTa2lubmVtb2VuIDxoc2tpbm5lbW9lbkBhdG1lbC5jb20+CisKK2NvbW1pdCAzNmYyOGY4YTk2MDVlZTVkY2ZhMzMwNDgyY2ZjNjIxNzEyNjFhZjk3CitBdXRob3I6IEhhYXZhcmQgU2tpbm5lbW9lbiA8aHNraW5uZW1vZW5AYXRtZWwuY29tPgorRGF0ZToJTW9uIE9jdCAyOSAxMzowOTo1NiAyMDA3ICswMTAwCisKKyAgICBBVlIzMjogUmVuYW1lIGF0MzJhcDcwMDAgLT4gYXQzMmFwNzAweAorCisgICAgVGhlIFNvQy1zcGVjaWZpYyBjb2RlIGZvciBhbGwgdGhlIEFUMzJBUDcwMHggQ1BVcyBpcyBwcmFjdGljYWxseQorICAgIGlkZW50aWNhbDsgdGhlIG9ubHkgZGlmZmVyZW5jZSBpcyB0aGF0IHNvbWUgY2hpcHMgaGF2ZSBsZXNzIGZlYXR1cmVzCisgICAgdGhhbiBvdGhlcnMuIEJ5IGRvaW5nIHRoaXMgcmVuYW1lLCB3ZSBjYW4gYWRkIHN1cHBvcnQgZm9yIHRoZSBBUDcwMDAKKyAgICBkZXJpdmF0aXZlcyBzaW1wbHkgYnkgbWFraW5nIHNvbWUgZmVhdHVyZXMgY29uZGl0aW9uYWwuCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBIYWF2YXJkIFNraW5uZW1vZW4gPGhza2lubmVtb2VuQGF0bWVsLmNvbT4KKworY29tbWl0IDRkNWZhOTljNzNmMzU0ZTdjZjk4NWVmY2Y0MTdlYTU1Y2EyZjZhNWUKK0F1dGhvcjogSGFhdmFyZCBTa2lubmVtb2VuIDxoc2tpbm5lbW9lbkBhdG1lbC5jb20+CitEYXRlOglGcmkgSnVuIDI5IDE4OjIyOjM0IDIwMDcgKzAyMDAKKworICAgIGF0bWVsX21jaTogU2hvdyBTUiB3aGVuIGJsb2NrIHJlYWQgZmFpbHMKKworICAgIFNob3cgY29udHJvbGxlciBzdGF0dXMgYXMgd2VsbCBhcyBjYXJkIHN0YXR1cyB3aGVuIGFuIGVycm9yIG9jY3VycworICAgIGR1cmluZyBibG9jayByZWFkLgorCisgICAgU2lnbmVkLW9mZi1ieTogSGFhdmFyZCBTa2lubmVtb2VuIDxoc2tpbm5lbW9lbkBhdG1lbC5jb20+CisKK2NvbW1pdCAxMmQzMGFhNzk3NzljMmFhN2E5OThiYmFlNGMwNzVmODIyYTUzMDA0CitBdXRob3I6IEhhYXZhcmQgU2tpbm5lbW9lbiA8aHNraW5uZW1vZW5AYXRtZWwuY29tPgorRGF0ZToJVGh1IERlYyAxMyAxMjo1NjozNCAyMDA3ICswMTAwCisKKyAgICBjZmlfZmxhc2g6IFVzZSBtYXBfcGh5c21lbSgpIGFuZCB1bm1hcF9waHlzbWVtKCkKKworICAgIFVzZSBtYXBfcGh5c21lbSgpIGFuZCB1bm1hcF9waHlzbWVtKCkgdG8gY29udmVydCBmcm9tIHBoeXNpY2FsIHRvCisgICAgdmlydHVhbCBhZGRyZXNzZXMuIFRoaXMgZ2l2ZXMgdGhlIGFyY2ggYSBjaGFuY2UgdG8gcHJvdmlkZSBhbiB1bmNhY2hlZAorICAgIG1hcHBpbmcgZm9yIGZsYXNoIGFjY2Vzc2VzLgorCisgICAgU2lnbmVkLW9mZi1ieTogSGFhdmFyZCBTa2lubmVtb2VuIDxoc2tpbm5lbW9lbkBhdG1lbC5jb20+CisKK2NvbW1pdCA0ZDdkNjkzNmViMjlhZjdjY2EzMzA5Mzc4MDgzMTJhYTVmNjE0NTRkCitBdXRob3I6IEhhYXZhcmQgU2tpbm5lbW9lbiA8aHNraW5uZW1vZW5AYXRtZWwuY29tPgorRGF0ZToJVGh1IERlYyAxMyAxMjo1NjozMyAyMDA3ICswMTAwCisKKyAgICBJbnRyb2R1Y2UgbWFwX3BoeXNtZW0oKSBhbmQgdW5tYXBfcGh5c21lbSgpCisKKyAgICBtYXBfcGh5c21lbSgpIHJldHVybnMgYSB2aXJ0dWFsIGFkZHJlc3Mgd2hpY2ggY2FuIGJlIHVzZWQgdG8gYWNjZXNzIGEKKyAgICBnaXZlbiBwaHlzaWNhbCBhZGRyZXNzIHdpdGhvdXQgaW52b2x2aW5nIHRoZSBjYWNoZS4gdW5tYXBfcGh5c21lbSgpCisgICAgc2hvdWxkIGJlIGNhbGxlZCB3aGVuIHRoZSB2aXJ0dWFsIGFkZHJlc3MgcmV0dXJuZWQgYnkgbWFwX3BoeXNtZW0oKSBpcworICAgIG5vIGxvbmdlciBuZWVkZWQuCisKKyAgICBUaGlzIHBhdGNoIGFkZHMgYSBzdHViIGltcGxlbWVudGF0aW9uIHdoaWNoIHNpbXBseSByZXR1cm5zIHRoZQorICAgIHBoeXNpY2FsIGFkZHJlc3MgY2FzdCB0byBhIHVjaGFyICogZm9yIGFsbCBhcmNoaXRlY3R1cmVzIGV4Y2VwdCBBVlIzMiwKKyAgICB3aGljaCBjb252ZXJ0cyB0aGUgcGh5c2ljYWwgYWRkcmVzcyB0byBhbiB1bmNhY2hlZCB2aXJ0dWFsIG1hcHBpbmcuCisgICAgdW5tYXBfcGh5c21lbSgpIGlzIGEgbm8tb3Agb24gYWxsIGFyY2hpdGVjdHVyZXMsIGJ1dCBpZiBhbnkKKyAgICBhcmNoaXRlY3R1cmUgbmVlZHMgdG8gZG8gc3VjaCBtYXBwaW5ncyB0aHJvdWdoIHRoZSBUTEIsIHRoaXMgaXMgdGhlCisgICAgaG9vayB3aGVyZSB0aG9zZSBUTEIgZW50cmllcyBjYW4gYmUgaW52YWxpZGF0ZWQuCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBIYWF2YXJkIFNraW5uZW1vZW4gPGhza2lubmVtb2VuQGF0bWVsLmNvbT4KKworY29tbWl0IGNkYmFlZmI1ZjVmMDNlNTQ0NTVkMDQzOWRjZjZkYmQ5N2VhZDFmOWQKK0F1dGhvcjogSGFhdmFyZCBTa2lubmVtb2VuIDxoc2tpbm5lbW9lbkBhdG1lbC5jb20+CitEYXRlOglUaHUgRGVjIDEzIDEyOjU2OjMyIDIwMDcgKzAxMDAKKworICAgIGNmaV9mbGFzaDogSW50cm9kdWNlIHJlYWQgYW5kIHdyaXRlIGFjY2Vzc29ycworCisgICAgSW50cm9kdWNlIGZsYXNoX3JlYWR7OCwxNiwzMiw2NCkgYW5kIGZsYXNoX3dyaXRlezgsMTYsMzIsNjR9IGFuZCB1c2UKKyAgICB0aGVtIHRvIGFjY2VzcyB0aGUgZmxhc2ggbWVtb3J5LiBUaGlzIG1ha2VzIGl0IGNsZWFyZXIgd2hlbiB0aGUgZmxhc2gKKyAgICBpcyBhY3R1YWxseSBiZWluZyBhY2Nlc3NlZDsgbWVyZWx5IGRlcmVmZXJlbmNpbmcgYSB2b2xhdGlsZSBwb2ludGVyCisgICAgbG9va3MganVzdCBsaWtlIGFueSBvdGhlciBraW5kIG9mIGFjY2Vzcy4KKworICAgIFNpZ25lZC1vZmYtYnk6IEhhYXZhcmQgU2tpbm5lbW9lbiA8aHNraW5uZW1vZW5AYXRtZWwuY29tPgorCitjb21taXQgODEyNzExY2U2YjNhMzg2MTI1ZGNmMGQ2YTU5NTg4ZTQ2MWFiYmI4NworQXV0aG9yOiBIYWF2YXJkIFNraW5uZW1vZW4gPGhza2lubmVtb2VuQGF0bWVsLmNvbT4KK0RhdGU6CVRodSBEZWMgMTMgMTI6NTY6MzEgMjAwNyArMDEwMAorCisgICAgSW1wbGVtZW50IF9fcmF3X3tyZWFkLHdyaXRlfVtid2xdIG9uIGFsbCBhcmNoaXRlY3R1cmVzCisKKyAgICBUaGlzIGFkZHMgaW1wbGVtZW50YXRpb25zIG9mIF9fcmF3X3JlYWRbYndsXSBhbmQgX19yYXdfd3JpdGVbYndsXSB0bworICAgIG02OGssIHBwYywgbmlvcyBhbmQgbmlvczIuIFRoZSBtNjhrIGFuZCBwcGMgaW1wbGVtZW50YXRpb25zIHdlcmUgdGFrZW4KKyAgICBmcm9tIExpbnV4LgorCisgICAgU2lnbmVkLW9mZi1ieTogSGFhdmFyZCBTa2lubmVtb2VuIDxoc2tpbm5lbW9lbkBhdG1lbC5jb20+CisKK2NvbW1pdCBiZTYwYTkwMjFjODJmYzVhZWNkNWIyYjFmYzk2ZjcwYTljODFiYmNkCitBdXRob3I6IEhhYXZhcmQgU2tpbm5lbW9lbiA8aHNraW5uZW1vZW5AYXRtZWwuY29tPgorRGF0ZToJU2F0IE9jdCA2IDE4OjU1OjM2IDIwMDcgKzAyMDAKKworICAgIGNmaV9mbGFzaDogUmVvcmRlciBmdW5jdGlvbnMgYW5kIGVsaW1pbmF0ZSBleHRyYSBwcm90b3R5cGVzCisKKyAgICBSZW9yZGVyIHRoZSBmdW5jdGlvbnMgaW4gY2ZpX2ZsYXNoLmMgc28gdGhhdCBlYWNoIGZ1bmN0aW9uIG9ubHkgdXNlcworICAgIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBkZWZpbmVkIGJlZm9yZSBpdC4gVGhpcyBhbGxvd3MgdGhlIHN0YXRpYworICAgIHByb3RvdHlwZSBkZWNsYXJhdGlvbnMgbmVhciB0aGUgdG9wIHRvIGJlIGVsaW1pbmF0ZWQgYW5kIG1pZ2h0IGFsbG93CisgICAgZ2NjIHRvIGRvIGEgYmV0dGVyIGpvYiBpbmxpbmluZyBmdW5jdGlvbnMuCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBIYWF2YXJkIFNraW5uZW1vZW4gPGhza2lubmVtb2VuQGF0bWVsLmNvbT4KKworY29tbWl0IDMwNTU3OTNiY2JkZjI0YjFmODExN2Y2MDZmZmI3NjZkMzJlYjc2NmYKK0F1dGhvcjogSGFhdmFyZCBTa2lubmVtb2VuIDxoc2tpbm5lbW9lbkBhdG1lbC5jb20+CitEYXRlOglUaHUgRGVjIDEzIDEyOjU2OjI5IDIwMDcgKzAxMDAKKworICAgIGNmaV9mbGFzaDogTWFrZSBzb21lIG5lZWRsZXNzbHkgZ2xvYmFsIGZ1bmN0aW9ucyBzdGF0aWMKKworICAgIE1ha2UgZnVuY3Rpb25zIG5vdCBkZWNsYXJlZCBpbiBhbnkgaGVhZGVyIGZpbGUgc3RhdGljLgorCisgICAgU2lnbmVkLW9mZi1ieTogSGFhdmFyZCBTa2lubmVtb2VuIDxoc2tpbm5lbW9lbkBhdG1lbC5jb20+CisKK2NvbW1pdCA3ZTViOWI0NzE1MThjNTY1MmZlYmM2OGJhNjJiNDMyMTkzZDZhYmY0CitBdXRob3I6IEhhYXZhcmQgU2tpbm5lbW9lbiA8aHNraW5uZW1vZW5AYXRtZWwuY29tPgorRGF0ZToJVGh1IERlYyAxMyAxMjo1NjoyOCAyMDA3ICswMTAwCisKKyAgICBjZmlfZmxhc2g6IEJyZWFrIGxvbmcgbGluZXMKKworICAgIFRoaXMgcGF0Y2ggdHJpZXMgdG8ga2VlcCBhbGwgbGluZXMgaW4gdGhlIGNmaV9mbGFzaCBkcml2ZXIgYmVsb3cgODAKKyAgICBjb2x1bW5zLiBUaGVyZSBhcmUgYSBmZXcgbGluZXMgbGVmdCB3aGljaCBkb24ndCBmaXQgdGhpcyByZXF1aXJlbWVudAorICAgIGJlY2F1c2UgSSBjb3VsZG4ndCBmaW5kIGFueSB0cml2aWFsIHdheSB0byBicmVhayB0aGVtIChpLmUuIGl0IHdvdWxkCisgICAgdGFrZSBzb21lIHJlc3RydWN0dXJpbmcsIHdoaWNoIEkgaW50ZW5kIHRvIGRvIGluIGEgbGF0ZXIgcGF0Y2guKQorCisgICAgU2lnbmVkLW9mZi1ieTogSGFhdmFyZCBTa2lubmVtb2VuIDxoc2tpbm5lbW9lbkBhdG1lbC5jb20+CisKK2NvbW1pdCA0MjAyNmM5Y2IzYTc2ODQ5YjQxZTZlMjRhYmZiN2I1NjgwN2E1YzFhCitBdXRob3I6IEJhcnRsb21pZWogU2lla2EgPHR1ckBzZW1paGFsZi5jb20+CitEYXRlOglUdWUgRGVjIDExIDEzOjU5OjU3IDIwMDcgKzAxMDAKKworICAgIENGSTogc3luY2hyb25pemUgY29tbWFuZCBvZmZzZXRzIHdpdGggTGludXggQ0ZJIGRyaXZlcgorCisgICAgRml4ZXMgbm9uLXdvcmtpbmcgQ0ZJIEZsYXNoIG9uIHRoZSBJbmthNHgwIGJvYXJkLgorCisgICAgU2lnbmVkLW9mZi1ieTogQmFydGxvbWllaiBTaWVrYSA8dHVyQHNlbWloYWxmLmNvbT4KKworY29tbWl0IDhmZjNkZTYxZmM1ZjliM2IyMTY0N2JjZTA4MWEzYjdmNzEwZjBkNGQKK0F1dGhvcjogS3VtYXIgR2FsYSA8Z2FsYWtAa2VybmVsLmNyYXNoaW5nLm9yZz4KK0RhdGU6CUZyaSBEZWMgNyAxMjoxNzozNCAyMDA3IC0wNjAwCisKKyAgICBIYW5kbGUgTVBDODV4eCBQQ0llIHJlc2V0IGVycmF0YSAoUENJLUV4IDM4KQorCisgICAgT24gdGhlIE1QQzg1eHggYm9hcmRzIHRoYXQgaGF2ZSBQQ0llIGVuYWJsZSB0aGUgUENJZSBlcnJhdGEgZml4LgorICAgIChNUEM4NTQ0RFMsIE1QQzg1NDhDRFMsIE1QQzg1NjhNRFMpLgorCisgICAgU2lnbmVkLW9mZi1ieTogS3VtYXIgR2FsYSA8Z2FsYWtAa2VybmVsLmNyYXNoaW5nLm9yZz4KKworY29tbWl0IDgyYWM4Yzk3MTQ1YTRjM2JmOGIzZGJmYWQwMGZhOTZlOTIwZjliOWMKK0F1dGhvcjogS3VtYXIgR2FsYSA8Z2FsYWtAa2VybmVsLmNyYXNoaW5nLm9yZz4KK0RhdGU6CUZyaSBEZWMgNyAxMjowNDozMCAyMDA3IC0wNjAwCisKKyAgICBVcGRhdGUgRnJlZXNjYWxlIE1QQzg1eHggQURTL0NEUy9NRFMgYm9hcmQgY29uZmlnCisKKyAgICAqIEVuYWJsZWQgQ09ORklHX0NNRF9FTEYKKworICAgIFNpZ25lZC1vZmYtYnk6IEt1bWFyIEdhbGEgPGdhbGFrQGtlcm5lbC5jcmFzaGluZy5vcmc+CisKK2NvbW1pdCBkNDM1NzkzMjI5Y2UyOWE0Mjc5N2MxZWRjMzlmNWIzNGY5ODdmOTFhCitBdXRob3I6IEt1bWFyIEdhbGEgPGdhbGFrQGtlcm5lbC5jcmFzaGluZy5vcmc+CitEYXRlOglGcmkgRGVjIDcgMDQ6NTk6MjYgMjAwNyAtMDYwMAorCisgICAgSGFuZGxlIEFzeW5jaHJvbm91cyBERFIgY2xvY2sgb24gODV4eAorCisgICAgVGhlIE1QQzg1NzIgaW50cm9kdWNlcyB0aGUgY29uY2VwdCBvZiBhbiBhc3luY2hyb25vdXMgRERSIGNsb2NrIHdpdGgKKyAgICByZWdhcmRzIHRvIHRoZSBwbGF0Zm9ybSBjbG9jay4KKworICAgIEludHJvZHVjZSBnZXRfZGRyX2ZyZXEoKSB0byByZXBvcnQgdGhlIEREUiBmcmVxIHJlZ2FyZGxlc3Mgb2Ygc3luYy9hc3luYworICAgIG1vZGUuCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBLdW1hciBHYWxhIDxnYWxha0BrZXJuZWwuY3Jhc2hpbmcub3JnPgorCitjb21taXQgMjJhYmIyZDJlYWY3Yjc5NWE2OTIzYzYyNzNlYzljYjUzZmRhOWExMAorQXV0aG9yOiBLdW1hciBHYWxhIDxnYWxha0BrZXJuZWwuY3Jhc2hpbmcub3JnPgorRGF0ZToJVGh1IE5vdiAyOSAxMDozNDoyOCAyMDA3IC0wNjAwCisKKyAgICBVcGRhdGUgRnJlZXNjYWxlIE1QQzg1eHggQURTL0NEUy9NRFMgYm9hcmQgY29uZmlnCisKKyAgICAqIFJlbW92ZWQgc29tZSBtaXNjIGVudmlyb25tZW50IHNldHVwCisgICAgKiBFbmFibGVkIENPTkZJR19DTURMSU5FX0VESVRJTkcKKworICAgIFNpZ25lZC1vZmYtYnk6IEt1bWFyIEdhbGEgPGdhbGFrQGtlcm5lbC5jcmFzaGluZy5vcmc+CisKK2NvbW1pdCA0MTVhNjEzYmFiYjg0ZDVlNWQ1YjQyZThlNTUzODY4YzcxZmMzYTY0CitBdXRob3I6IEt1bWFyIEdhbGEgPGdhbGFrQGtlcm5lbC5jcmFzaGluZy5vcmc+CitEYXRlOglUaHUgTm92IDI5IDEwOjQ3OjQ0IDIwMDcgLTA2MDAKKworICAgIE1vdmUgdGhlIE1QQzg1NDEvTVBDODU1NS9NUEM4NTQ4IENEUyBib2FyZCB1bmRlciBib2FyZC9mcmVlc2NhbGUuCisKKyAgICBNaW5vciBwYXRoIGNvcnJlY3Rpb25zIG5lZWRlZCB0byBlbnN1cmUgYnVpbGRhYmlsaXR5LgorCisgICAgU2lnbmVkLW9mZi1ieTogS3VtYXIgR2FsYSA8Z2FsYWtAa2VybmVsLmNyYXNoaW5nLm9yZz4KKworY29tbWl0IGMyZDk0M2ZmYmZkMzM1OWIzYjQ1ZDE3N2I0MzczNzlkMmNiODZmYmYKK0F1dGhvcjogS3VtYXIgR2FsYSA8Z2FsYWtAa2VybmVsLmNyYXNoaW5nLm9yZz4KK0RhdGU6CVRodSBOb3YgMjkgMTA6MTY6MTggMjAwNyAtMDYwMAorCisgICAgTW92ZSB0aGUgTVBDODU0MCBBRFMgYm9hcmQgdW5kZXIgYm9hcmQvZnJlZXNjYWxlLgorCisgICAgTWlub3IgcGF0aCBjb3JyZWN0aW9ucyBuZWVkZWQgdG8gZW5zdXJlIGJ1aWxkYWJpbGl0eS4KKworICAgIFNpZ25lZC1vZmYtYnk6IEt1bWFyIEdhbGEgPGdhbGFrQGtlcm5lbC5jcmFzaGluZy5vcmc+CisKK2NvbW1pdCA4NzBjZWFjNWIzYTM0ODZjMTA5Mzk2ZTAwNWFmODFhZTc2MmI1NzEwCitBdXRob3I6IEt1bWFyIEdhbGEgPGdhbGFrQGtlcm5lbC5jcmFzaGluZy5vcmc+CitEYXRlOglUaHUgTm92IDI5IDEwOjE0OjUwIDIwMDcgLTA2MDAKKworICAgIE1vdmUgdGhlIE1QQzg1NjAgQURTIGJvYXJkIHVuZGVyIGJvYXJkL2ZyZWVzY2FsZS4KKworICAgIE1pbm9yIHBhdGggY29ycmVjdGlvbnMgbmVlZGVkIHRvIGVuc3VyZSBidWlsZGFiaWxpdHkuCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBLdW1hciBHYWxhIDxnYWxha0BrZXJuZWwuY3Jhc2hpbmcub3JnPgorCitjb21taXQgYWNiY2E4NzZmYjNmZWMyNWNkOWM1NWIwZWZjODFmZjYxOGZmNTI2MgorQXV0aG9yOiBLdW1hciBHYWxhIDxnYWxha0BrZXJuZWwuY3Jhc2hpbmcub3JnPgorRGF0ZToJVGh1IE5vdiAyOSAxMDoxMzo0NyAyMDA3IC0wNjAwCisKKyAgICBNb3ZlIHRoZSBNUEM4NTY4IE1EUyBib2FyZCB1bmRlciBib2FyZC9mcmVlc2NhbGUuCisKKyAgICBNaW5vciBwYXRoIGNvcnJlY3Rpb25zIG5lZWRlZCB0byBlbnN1cmUgYnVpbGRhYmlsaXR5LgorCisgICAgU2lnbmVkLW9mZi1ieTogS3VtYXIgR2FsYSA8Z2FsYWtAa2VybmVsLmNyYXNoaW5nLm9yZz4KKworY29tbWl0IGE4NTNkNTZjNTliMzM0MTUzMDQ1MzE0NDM2MzM4MDg3MzZhY2ZjNmUKK0F1dGhvcjogS3VtYXIgR2FsYSA8Z2FsYWtAa2VybmVsLmNyYXNoaW5nLm9yZz4KK0RhdGU6CVRodSBOb3YgMjkgMDI6MTg6NTkgMjAwNyAtMDYwMAorCisgICAgVXNlIHN0YW5kYXJkIExBV0FSX1RSR1RfSUZfKiBkZWZpbmVzIGZvciBMQVcgc2V0dXAgb24gODV4eAorCisgICAgV2UgYWxyZWFkeSBoYWQgZGVmaW5lcyBmb3IgTEFXQVJfVFJHVF9JRl8qIHRoYXQgd2Ugc2hvdWxkIHVzZQorICAgIHJhdGhlciB0aGFuIGNyZWF0aW5nIG5ldyBvbmVzLiAgQWxzbywgYWRkZWQgc29tZSBtaXNzaW5nIGRlZmluZXMgZm9yCisgICAgUENJRSB0YXJnZXRzLgorCisgICAgU2lnbmVkLW9mZi1ieTogS3VtYXIgR2FsYSA8Z2FsYWtAa2VybmVsLmNyYXNoaW5nLm9yZz4KKworY29tbWl0IDA0ZGI0MDA4OTJkYTM3Yjc2YTU4NWUzMzJhMGMxMzc5NTRhZDIwMTUKK0F1dGhvcjogS3VtYXIgR2FsYSA8Z2FsYWtAa2VybmVsLmNyYXNoaW5nLm9yZz4KK0RhdGU6CVRodSBOb3YgMjkgMDI6MTA6MDkgMjAwNyAtMDYwMAorCisgICAgU3RvcCB1c2luZyBpbW1hcF90IG9uIDg1eHgKKworICAgIEluIHRoZSBmdXR1cmUgdGhlIG9mZnNldHMgdG8gdmFyaW91cyBibG9ja3MgbWF5IG5vdCBiZSBpbiBzYW1lIGxvY2F0aW9uLgorICAgIE1vdmUgdG8gdXNpbmcgQ0ZHX01QQzg1eHhfKl9BRERSIGFzIHRoZSBiYXNlIG9mIHRoZSByZWdpc3RlcnMKKyAgICBpbnN0ZWFkIG9mIGdldHRpbmcgaXQgdmlhICZpbW1hcC4KKworICAgIFNpZ25lZC1vZmYtYnk6IEt1bWFyIEdhbGEgPGdhbGFrQGtlcm5lbC5jcmFzaGluZy5vcmc+CisKK2NvbW1pdCAyNzE0MjIzZjhlMDRhYjNlNDEzM2ZmNjU4NzJlZWYzNjZkOTBiZmVhCitBdXRob3I6IEt1bWFyIEdhbGEgPGdhbGFrQGtlcm5lbC5jcmFzaGluZy5vcmc+CitEYXRlOglUaHUgTm92IDI5IDAxOjIzOjA5IDIwMDcgLTA2MDAKKworICAgIFJlbW92ZSBDT05GSUdfT0ZfRkxBVF9UUkVFIHJlbGF0ZWQgY29kZSBmcm9tIG1wYzg1eHggc2luY2Ugd2Ugbm93IHVzZSBsaWJmZHQKKworICAgIFNpZ25lZC1vZmYtYnk6IEt1bWFyIEdhbGEgPGdhbGFrQGtlcm5lbC5jcmFzaGluZy5vcmc+CisKK2NvbW1pdCBjNDgwODYxYmYwMDAxNTZlNmEzZTkzMmMyNThkYjU5ZmYyMjEyZGQzCitBdXRob3I6IEt1bWFyIEdhbGEgPGdhbGFrQGtlcm5lbC5jcmFzaGluZy5vcmc+CitEYXRlOglUaHUgTm92IDI5IDAxOjA2OjE5IDIwMDcgLTA2MDAKKworICAgIFVwZGF0ZSBNUEM4NTY4IE1EUyB0byB1c2UgbGliZmR0CisKKyAgICBVcGRhdGVkIHRoZSBNUEM4NTY4IE1EUyBjb25maWcgdG8gdXNlIGxpYmZkdCBhbmQgYXNzdW1lIHVzZSBvZiBhbGlhc2VzIGZvcgorICAgIGV0aGVybmV0LCBwY2ksIGFuZCBzZXJpYWwgZm9yIHRoZSB2YXJpb3VzIGZpeHVwcyB0aGF0IGFyZSBkb25lLgorCisgICAgU2lnbmVkLW9mZi1ieTogS3VtYXIgR2FsYSA8Z2FsYWtAa2VybmVsLmNyYXNoaW5nLm9yZz4KKworY29tbWl0IDE1NjNmNTZlMGM2OGY2OTIwZjk1NjM4MmQ2ZDEzYmVlM2YwMWMwZjcKK0F1dGhvcjogSGFpeWluZyBXYW5nIDxIYWl5aW5nLldhbmdAZnJlZXNjYWxlLmNvbT4KK0RhdGU6CVdlZCBOb3YgMTQgMTU6NTI6MDYgMjAwNyAtMDUwMAorCisgICAgQWRkIFBDSSBFeHByZXNzIHN1cHBvcnQgb24gTVBDODU2OE1EUworCisgICAgU2lnbmVkLW9mZi1ieTogSGFpeWluZyBXYW5nIDxIYWl5aW5nLldhbmdAZnJlZXNjYWxlLmNvbT4KKyAgICBTaWduZWQtb2ZmLWJ5OiBLdW1hciBHYWxhIDxnYWxha0BrZXJuZWwuY3Jhc2hpbmcub3JnPgorCitjb21taXQgYjkwZDI1NDk3NjI1YjkwZmZhM2YyOTExYTA4OTVjYTIzNzU1NmZmNQorQXV0aG9yOiBLdW1hciBHYWxhIDxnYWxha0BrZXJuZWwuY3Jhc2hpbmcub3JnPgorRGF0ZToJVGh1IE5vdiAyOSAwMDoxMTo0NCAyMDA3IC0wNjAwCisKKyAgICBVcGRhdGUgTVBDODV4eCBDRFMgdG8gdXNlIGxpYmZkdAorCisgICAgVXBkYXRlZCB0aGUgTVBDODV4eCBDRFMgY29uZmlnIHRvIHVzZSBsaWJmZHQgYW5kIGFzc3VtZSB1c2Ugb2YgYWxpYXNlcyBmb3IKKyAgICBldGhlcm5ldCwgcGNpLCBhbmQgc2VyaWFsIGZvciB0aGUgdmFyaW91cyBmaXh1cHMgdGhhdCBhcmUgZG9uZS4KKworICAgIFNpZ25lZC1vZmYtYnk6IEt1bWFyIEdhbGEgPGdhbGFrQGtlcm5lbC5jcmFzaGluZy5vcmc+CisKK2NvbW1pdCAwZmQ1ZWM2NmIxMDUyMWEwNTdhZDczZTY5YWI1ZjBmOWVhZmJhMjU1CitBdXRob3I6IEt1bWFyIEdhbGEgPGdhbGFrQGtlcm5lbC5jcmFzaGluZy5vcmc+CitEYXRlOglXZWQgTm92IDI4IDIyOjU0OjI3IDIwMDcgLTA2MDAKKworICAgIFVwZGF0ZSBNUEM4NTQwIEFEUyB0byB1c2UgbGliZmR0CisKKyAgICBVcGRhdGVkIHRoZSBNUEM4NTQwIEFEUyBjb25maWcgdG8gdXNlIGxpYmZkdCBhbmQgYXNzdW1lIHVzZSBvZiBhbGlhc2VzIGZvcgorICAgIGV0aGVybmV0LCBwY2ksIGFuZCBzZXJpYWwgZm9yIHRoZSB2YXJpb3VzIGZpeHVwcyB0aGF0IGFyZSBkb25lLgorCisgICAgU2lnbmVkLW9mZi1ieTogS3VtYXIgR2FsYSA8Z2FsYWtAa2VybmVsLmNyYXNoaW5nLm9yZz4KKworY29tbWl0IDVjZTcxNTgwMmY2YzUwZGM3OGIzNDA1YjkyZjE4NGIxZTM3MTA1MTkKK0F1dGhvcjogS3VtYXIgR2FsYSA8Z2FsYWtAa2VybmVsLmNyYXNoaW5nLm9yZz4KK0RhdGU6CVdlZCBOb3YgMjggMjI6NDA6MzEgMjAwNyAtMDYwMAorCisgICAgVXBkYXRlIE1QQzg1NjAgQURTIHRvIHVzZSBsaWJmZHQKKworICAgIFVwZGF0ZWQgdGhlIE1QQzg1NjAgQURTIGNvbmZpZyB0byB1c2UgbGliZmR0IGFuZCBhc3N1bWUgdXNlIG9mIGFsaWFzZXMgZm9yCisgICAgZXRoZXJuZXQsIHBjaSwgYW5kIHNlcmlhbCBmb3IgdGhlIHZhcmlvdXMgZml4dXBzIHRoYXQgYXJlIGRvbmUuCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBLdW1hciBHYWxhIDxnYWxha0BrZXJuZWwuY3Jhc2hpbmcub3JnPgorCitjb21taXQgYWFmZWVmYmRiOGIwMjlmNWNhMmExOTU1OThkMGE1MDFhNjA2ZWVhOQorQXV0aG9yOiBLdW1hciBHYWxhIDxnYWxha0BrZXJuZWwuY3Jhc2hpbmcub3JnPgorRGF0ZToJV2VkIE5vdiAyOCAwMDozNjozMyAyMDA3IC0wNjAwCisKKyAgICBTdG9wIHVzaW5nIGltbWFwX3QgZm9yIGNwbSBvZmZzZXQgb24gODV4eAorCisgICAgSW4gdGhlIGZ1dHVyZSB0aGUgb2Zmc2V0cyB0byB2YXJpb3VzIGJsb2NrcyBtYXkgbm90IGJlIGluIHNhbWUgbG9jYXRpb24uCisgICAgTW92ZSB0byB1c2luZyBDRkdfTVBDODV4eF9DUE1fQUREUiBhcyB0aGUgYmFzZSBvZiB0aGUgQ1BNIHJlZ2lzdGVycworICAgIGluc3RlYWQgb2YgZ2V0dGluZyBpdCB2aWEgJmltbWFwLT5pbV9jcG0uCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBLdW1hciBHYWxhIDxnYWxha0BrZXJuZWwuY3Jhc2hpbmcub3JnPgorCitjb21taXQgZjU5YjU1YTViOGZjYWRhYTk5NzgxYmE0OGU3YTM4ZTk1NmFmYTUyNworQXV0aG9yOiBLdW1hciBHYWxhIDxnYWxha0BrZXJuZWwuY3Jhc2hpbmcub3JnPgorRGF0ZToJVHVlIE5vdiAyNyAyMzoyNTowMiAyMDA3IC0wNjAwCisKKyAgICBTdG9wIHVzaW5nIGltbWFwX3QgZm9yIGd1dHMgb2Zmc2V0IG9uIDg1eHgKKworICAgIEluIHRoZSBmdXR1cmUgdGhlIG9mZnNldHMgdG8gdmFyaW91cyBibG9ja3MgbWF5IG5vdCBiZSBpbiBzYW1lIGxvY2F0aW9uLgorICAgIE1vdmUgdG8gdXNpbmcgQ0ZHX01QQzg1eHhfR1VUU19BRERSIGFzIHRoZSBiYXNlIG9mIHRoZSBndXRzIHJlZ2lzdGVycworICAgIGluc3RlYWQgb2YgZ2V0dGluZyBpdCB2aWEgJmltbWFwLT5pbV9ndXIuCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBLdW1hciBHYWxhIDxnYWxha0BrZXJuZWwuY3Jhc2hpbmcub3JnPgorCitjb21taXQgNTBjMDNjOGNmNDk0ZDkxY2RlYzM5NjcwZDk1MzM3Yzc0M2UxNmVjOQorQXV0aG9yOiBLdW1hciBHYWxhIDxnYWxha0BrZXJuZWwuY3Jhc2hpbmcub3JnPgorRGF0ZToJVHVlIE5vdiAyNyAyMjo0MjozNCAyMDA3IC0wNjAwCisKKyAgICBVcGRhdGUgTVBDODU0NCBEUyBjb25maWcKKworICAgICogUmVtb3ZlZCBIQVNfRVRIMi9IQVNfRVRIMyAtIE1QQzg1NDQgb25seSBoYXMgVFNFQzEvMgorICAgICogUmVtb3ZlZCBzb21lIG1pc2MgZW52aXJvbm1lbnQgc2V0dXAKKyAgICAqIE1vdmVkIHRvIHVzaW5nIGZkdGZpbGUgJiBmZHRhZGRyIGFzIGZkdCBlbnYgdmFyIG5hbWVzCisgICAgKiBFbmFibGVkIENPTkZJR19DTURMSU5FX0VESVRJTkcKKworICAgIFNpZ25lZC1vZmYtYnk6IEt1bWFyIEdhbGEgPGdhbGFrQGtlcm5lbC5jcmFzaGluZy5vcmc+CisKK2NvbW1pdCBhZGRjZTU3ZTJlNGM0OWU3N2ZmYjIwMjBhODQ2OTA3MTNiYjE4YjQ3CitBdXRob3I6IEt1bWFyIEdhbGEgPGdhbGFrQGtlcm5lbC5jcmFzaGluZy5vcmc+CitEYXRlOglNb24gTm92IDI2IDE3OjEyOjI0IDIwMDcgLTA2MDAKKworICAgIFVwZGF0ZSBNUEM4NTQ0RFMgdG8gdXNlIGxpYmZkdAorCisgICAgVXBkYXRlZCB0aGUgTVBDODU0NERTIGNvbmZpZyB0byB1c2UgbGliZmR0IGFuZCBhc3N1bWUgdXNlIG9mIGFsaWFzZXMgZm9yCisgICAgZXRoZXJuZXQsIHBjaSwgYW5kIHNlcmlhbCBmb3IgdGhlIHZhcmlvdXMgZml4dXBzIHRoYXQgYXJlIGRvbmUuCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBLdW1hciBHYWxhIDxnYWxha0BrZXJuZWwuY3Jhc2hpbmcub3JnPgorCitjb21taXQgZjg1MmNlNzJmMTAwY2FiZDFmMTFjMjFjMDg1YTBhZDhlY2E5ZmI2NQorQXV0aG9yOiBLdW1hciBHYWxhIDxnYWxha0BrZXJuZWwuY3Jhc2hpbmcub3JnPgorRGF0ZToJVGh1IE5vdiAyOSAwMDoxNTozMCAyMDA3IC0wNjAwCisKKyAgICBBZGQgbGliZmR0IGJhc2VkIGZ0X2NwdV9zZXR1cCBmb3IgbXBjODV4eAorCisgICAgU2lnbmVkLW9mZi1ieTogS3VtYXIgR2FsYSA8Z2FsYWtAa2VybmVsLmNyYXNoaW5nLm9yZz4KKworY29tbWl0IDk2OTJjMjczNGE0N2YyM2I0NGEwZjY4MDQyYTNlMmNhOGQxYmZiMzkKK0F1dGhvcjogU3RlZmFuIFJvZXNlIDxzckBkZW54LmRlPgorRGF0ZToJU2F0IERlYyA4IDA4OjI1OjA5IDIwMDcgKzAxMDAKKworICAgIENGSTogQ29kaW5nIHN0eWxlIGNsZWFudXAKKworICAgIFNpZ25lZC1vZmYtYnk6IFN0ZWZhbiBSb2VzZSA8c3JAZGVueC5kZT4KKworY29tbWl0IDgxYjIwY2NjMmQ3OTVhZTlhMTE5OWRiNWE1MGFkOWMyOGQxZTRkMjIKK0F1dGhvcjogTWljaGFlbCBTY2h3aW5nZW4gPG1pY2hhZWxAc2Nod2luZ2VuLm9yZz4KK0RhdGU6CUZyaSBEZWMgNyAyMzozNTowMiAyMDA3ICswMTAwCisKKyAgICBDRkk6IHN1cHBvcnQgSkVERUMgZmxhc2ggcm9tcyBpbiBDRkktZmxhc2ggZnJhbWV3b3JrCisKKyAgICBUaGUgZm9sbG93aW5nIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3Igbm9uLUNGSSBmbGFzaCBST01TLCBieSBob29raW5nIGludG8gdGhlCisgICAgQ0ZJIGZsYXNoIGNvZGUgYW5kIHVzaW5nIG1vc3Qgb2YgaXRzIGNvZGUsIGFzIHJlY2VudGx5IGRpc2N1c3NlZCBoZXJlIGluIHRoZQorICAgIHRocmVhZCAiTWl4aW5nIENGSSBhbmQgbm9uLUNGSSBmbGFzaHMiLgorCisgICAgU2lnbmVkLW9mZi1ieTogTWljaGFlbCBTY2h3aW5nZW4gPG1pY2hhZWxAc2Nod2luZ2VuLm9yZz4KKyAgICBTaWduZWQtb2ZmLWJ5OiBTdGVmYW4gUm9lc2UgPHNyQGRlbnguZGU+CisKK2NvbW1pdCBjMDFiMTdkZDg1NmZhMTIwYjI5NzBmNTBkOTU5ODU0NmE0OTI3ZWMzCitBdXRob3I6IEdlcmFsZCBWYW4gQmFyZW4gPHZhbmJhcmVuQGNpZGVhcy5jb20+CitEYXRlOglXZWQgTm92IDI4IDIxOjI0OjUwIDIwMDcgLTA1MDAKKworICAgIENvbmRpdGlvbmFsbHkgY29tcGlsZSBmZHRfZml4dXBfZXRoZXJuZXQoKQorCisgICAgRml4IGNvbXBpbGVyIHdhcm5pbmdzOiBPbiBib2FyZHMgdGhhdCBkb24ndCBoYXZlIGV0aGVybmV0cyBkZWZpbmVkLAorICAgIGRvbid0IGNvbXBpbGUgZmR0X2ZpeHVwX2V0aGVybmV0KCkuCisKK2NvbW1pdCAyNDZkNGFlNmJjMjgyYmMxODQxMjI0ZTFjNWZjNDlkYzkyNWUwYmY3CitBdXRob3I6IEt1bWFyIEdhbGEgPGdhbGFrQGtlcm5lbC5jcmFzaGluZy5vcmc+CitEYXRlOglUdWUgTm92IDI3IDIxOjU5OjQ2IDIwMDcgLTA2MDAKKworICAgIENvbnZlcnQgYm9hcmRzIHRoYXQgc2V0IG1lbW9yeSBub2RlIHRvIHVzZSBmZHRfZml4dXBfbWVtb3J5KCkKKworICAgIFNpZ25lZC1vZmYtYnk6IEt1bWFyIEdhbGEgPGdhbGFrQGtlcm5lbC5jcmFzaGluZy5vcmc+CisKK2NvbW1pdCAxNTFjOGIwOWIzNWVlYmU4ZmQ5MTM5Y2I2YzFkOTFjMjdiMjJmMDU4CitBdXRob3I6IEt1bWFyIEdhbGEgPGdhbGFrQGtlcm5lbC5jcmFzaGluZy5vcmc+CitEYXRlOglNb24gTm92IDI2IDE3OjA2OjE1IDIwMDcgLTA2MDAKKworICAgIEFkZGVkIGZkdF9maXh1cF9zdGRvdXQgdGhhdCB1c2VzIGFsaWFzZXMgdG8gc2V0IGxpbnV4LHN0ZG91dC1wYXRoCisKKyAgICBXZSB1c2UgYSBjb21iaW5hdGlvbiBvZiB0aGUgc2VyaWFsTiBhbGlhcyBhbmQgQ09ORklHX0NPTlNfSU5ERVggdG8KKyAgICBkZXRlcm1pbmUgd2hpY2ggc2VyaWFsIGFsaWFzIHdlIHNob3VsZCBzZXQgbGludXgsc3Rkb3V0LXBhdGggdG8uCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBLdW1hciBHYWxhIDxnYWxha0BrZXJuZWwuY3Jhc2hpbmcub3JnPgorCitjb21taXQgM2M5MjcyODEzZmFkODRjNjkxZDBlNDk4OWJiMThhM2ZmZWJkZWJmYworQXV0aG9yOiBLdW1hciBHYWxhIDxnYWxha0BrZXJuZWwuY3Jhc2hpbmcub3JnPgorRGF0ZToJTW9uIE5vdiAyNiAxNDo1Nzo0NSAyMDA3IC0wNjAwCisKKyAgICBBZGQgY29tbW9uIG1lbW9yeSBmaXh1cCBmdW5jdGlvbgorCisgICAgQWRkIHRoZSBmdW5jdGlvbiBmZHRfZml4dXBfbWVtb3J5KCkgdG8gZml4dXAgdGhlIC9tZW1vcnkgbm9kZSBvZiB0aGUgZmR0CisKKyAgICBTaWduZWQtb2ZmLWJ5OiBLdW1hciBHYWxhIDxnYWxha0BrZXJuZWwuY3Jhc2hpbmcub3JnPgorCitjb21taXQgOWM5MTA5ZTdmY2Y3YWMyY2ExOWM5NWI4YWM1NGI4ZDFjNzczYjE1NworQXV0aG9yOiBLdW1hciBHYWxhIDxnYWxha0BrZXJuZWwuY3Jhc2hpbmcub3JnPgorRGF0ZToJTW9uIE5vdiAyNiAxMToxOToxMiAyMDA3IC0wNjAwCisKKyAgICBDb25kaXRpb25hbGx5IGNvbXBpbGUgZmR0X3N1cHBvcnQuYworCisgICAgTW9kaWZ5IGNvbW1vbi9NYWtlZmlsZSB0byBjb25kaXRpb25hbGx5IGNvbXBpbGUgZmR0X3N1cHBvcnQuYyBiYXNlZAorICAgIG9uIENPTkZJR19PRl9MSUJGRFQuCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBLdW1hciBHYWxhIDxnYWxha0BrZXJuZWwuY3Jhc2hpbmcub3JnPgorCitjb21taXQgZDg4ZTdiYTA5ODA3NzM0NzllMWE2NGJhZGIyOTMxMTYwNzFiN2VmMAorQXV0aG9yOiBLdW1hciBHYWxhIDxnYWxha0BrZXJuZWwuY3Jhc2hpbmcub3JnPgorRGF0ZToJTW9uIE5vdiAyNiAxMDo0MTo0MCAyMDA3IC0wNjAwCisKKyAgICBGaXggYnVpbGQgYnJlYWthZ2UgZHVlIHRvIGxpYmZkdCBpbXBvcnQKKworICAgIFRoZSBJRFM4MjQ3IGdvdCBsb3N0IGluIHRoZSB1cGRhdGUgYW5kIG5lZWQgYW4gQVBJIHVwZGF0ZQorICAgIGRvIHRvIHJlbmFtZSBvZiBmdW5jdGlvbnMgaW4gbGliZmR0LgorCisgICAgU2lnbmVkLW9mZi1ieTogS3VtYXIgR2FsYSA8Z2FsYWtAa2VybmVsLmNyYXNoaW5nLm9yZz4KKworY29tbWl0IDI4ZjM4NGIxNzFiYmYxZmIyZGFmYjEwNDZlNmQyNTlhNmIyZjg3MTQKK0F1dGhvcjogR2VyYWxkIFZhbiBCYXJlbiA8dmFuYmFyZW5AY2lkZWFzLmNvbT4KK0RhdGU6CUZyaSBOb3YgMjMgMTk6NDM6MjAgMjAwNyAtMDUwMAorCisgICAgQWRkIHNwYWNlcyBhcm91bmQgdGhlID0gaW4gdGhlIGZkdCBwcmludCBmb3JtYXQuCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBHZXJhbGQgVmFuIEJhcmVuIDx2YW5iYXJlbkBjaWRlYXMuY29tPgorCitjb21taXQgMjk1OTJlY2JhM2I5MzJiOWIxNTJiY2VjNmMwYzA4MDY0MTJkYjRhMworQXV0aG9yOiBOb2J1aGlybyBJd2FtYXRzdSA8aXdhbWF0c3VAbmlnYXVyaS5vcmc+CitEYXRlOglGcmkgRGVjIDcgMDE6MjU6MzggMjAwNyArMDkwMAorCisgICAgc2g6IE1vdmVkIGRyaXZlciBvZiB0aGUgU3VwZXJIIGRlcGVuZGVuY2UKKworICAgIFRoZSBjb21wb3NpdGlvbiBvZiB0aGUgZGlyZWN0b3J5IGluIHRoZSBkcml2ZXJzLyBjaGFuZ2VkLgorICAgIEkgbW92ZWQgU3VwZXJIIHNlcmlhbCBkcml2ZXIgYW5kIG1hcnVidW4gUENNQ0lBIGRyaXZlci4KKworICAgIFNpZ25lZC1vZmYtYnk6IE5vYnVoaXJvIEl3YW1hdHN1IDxpd2FtYXRzdUBuaWdhdXJpLm9yZz4KKworY29tbWl0IDQxYmU5NjlmNDk1NzExNWVkN2IxZmU4Yjg5MGJmYWVlOTlkN2E3YTIKK0F1dGhvcjogV29sZmdhbmcgRGVuayA8d2RAZGVueC5kZT4KK0RhdGU6CVRodSBEZWMgNiAxMDoyMToxOSAyMDA3ICswMTAwCisKKyAgICBSZWxlYXNlIHYxLjMuMQorCisgICAgU2lnbmVkLW9mZi1ieTogV29sZmdhbmcgRGVuayA8d2RAZGVueC5kZT4KKworY29tbWl0IGNmNTkzM2JhMWU5N2ExY2Q4ZjVmMjQwNzBlODIwZjIxZDk3NmVhZWIKK0F1dGhvcjogV29sZmdhbmcgRGVuayA8d2RAZGVueC5kZT4KK0RhdGU6CVRodSBEZWMgNiAxMDoyMTowMyAyMDA3ICswMTAwCisKKyAgICBBRFM1MTIxIEJvYXJkOiBmaXggY29tcGlsZSBwcm9ibGVtLgorCisgICAgU2lnbmVkLW9mZi1ieTogV29sZmdhbmcgRGVuayA8d2RAZGVueC5kZT4KKworY29tbWl0IDhkNGYwNDBhM2MxNTAzNmE2ZWEyNWE5YzM5ZTdkODlmZWZhODQ0MGQKK0F1dGhvcjogV29sZmdhbmcgRGVuayA8d2RAZGVueC5kZT4KK0RhdGU6CU1vbiBEZWMgMyAwMDoxNToyOCAyMDA3ICswMTAwCisKKyAgICBQcmVwYXJlIGZvciAxLjMuMS1yYzEKKworICAgIFNpZ25lZC1vZmYtYnk6IFdvbGZnYW5nIERlbmsgPHdkQGRlbnguZGU+CisKK2NvbW1pdCAyNjBlZWE1Njc2Y2E0NjkwM2EzMzU2ODZjYzAyMGIyOWM0Y2E0NmZlCitBdXRob3I6IE5vYnVoaXJvIEl3YW1hdHN1IDxpd2FtYXRzdUBuaWdhdXJpLm9yZz4KK0RhdGU6CVRodSBOb3YgMjkgMDE6MjE6NTQgMjAwNyArMDkwMAorCisgICAgc2g6IEFkZCBTdXBlckggYm9hcmRzIG1haW50YWluZXIgdG8gTUFJTlRBSU5FUlMgZmlsZQorCisgICAgQWRkIE1TNzc1MFNFIGFuZCBNUzc3MjJTRSdzIGJvYXJkIG1haW50YWluZXIgdG8gTUFJTlRBSU5FUlMgZmlsZS4KKworICAgIFNpZ25lZC1vZmYtYnk6IE5vYnVoaXJvIEl3YW1hdHN1IDxpd2FtYXRzdUBuaWdhdXJpLm9yZz4KKworY29tbWl0IGFhOWM0ZjFkMjI3MDFhOTIzNDdjMWM4MWYzNGQxMmM4YWQzYTM3NDcKK0F1dGhvcjogTm9idWhpcm8gSXdhbWF0c3UgPGl3YW1hdHN1QG5pZ2F1cmkub3JnPgorRGF0ZToJVGh1IE5vdiAyOSAwMDoxMzowNCAyMDA3ICswOTAwCisKKyAgICBzaDogQWRkIG1zNzc1MHNlIHN1cHBvcnQgaW4gTUFLRUFMTAorCisgICAgU2lnbmVkLW9mZi1ieTogTm9idWhpcm8gSXdhbWF0c3UgPGl3YW1hdHN1QG5pZ2F1cmkub3JnPgorCitjb21taXQgYzcxNDQzNzM0MjdhMTc4MzMyYmY5NzU0MTMxYzhjMzRjNTJjMjAwYQorQXV0aG9yOiBKZWFuLUNocmlzdG9waGUgUExBR05JT0wtVklMTEFSRCA8cGxhZ25pb2pAamNyb3NvZnQuY29tPgorRGF0ZToJVHVlIE5vdiAyNyAwOTo0NDo1MyAyMDA3ICswMTAwCisKKyAgICBzaDogQWRkIHNoMyBhbmQgc2g0IHN1cHBvcnQgaW4gTUFLRUFMTAorCisgICAgU2lnbmVkLW9mZi1ieTogSmVhbi1DaHJpc3RvcGhlIFBMQUdOSU9MLVZJTExBUkQgPHBsYWduaW9qQGpjcm9zb2Z0LmNvbT4KKyAgICBTaWduZWQtb2ZmLWJ5OiBOb2J1aGlybyBJd2FtYXRzdSA8aXdhbWF0c3VAbmlnYXVyaS5vcmc+CisKK2NvbW1pdCAxMzAwODA4NzRhM2QyODQ1MDA5ODQ4MWEyNjJjNWY3Yzg1NWU5MDhkCitBdXRob3I6IE5vYnVoaXJvIEl3YW1hdHN1IDxpd2FtYXRzdUBuaWdhdXJpLm9yZz4KK0RhdGU6CVN1biBOb3YgMjUgMDI6NTE6MTcgMjAwNyArMDkwMAorCisgICAgc2g6IEFkZCBkb2N1bWVudCBmb3IgU3VwZXJILgorCisgICAgVGhpcyBkb2N1bWVudCBpcyBhIHN1bW1hcnkgb2YgaW5mb3JtYXRpb24gY29uY2VybmluZyBTdXBlckggb2YgVS1Cb290LgorCisgICAgU2lnbmVkLW9mZi1ieTogTm9idWhpcm8gSXdhbWF0c3UgPGl3YW1hdHN1QG5pZ2F1cmkub3JnPgorCitjb21taXQgMzNlY2RjMmY5ZDY0OTI2ZTFhNjA2N2IyOGYzYTBhZWZjM2I2ZDIzZAorQXV0aG9yOiBOb2J1aGlybyBJd2FtYXRzdSA8aXdhbWF0c3VAbmlnYXVyaS5vcmc+CitEYXRlOglTdW4gTm92IDI1IDAyOjM5OjMxIDIwMDcgKzA5MDAKKworICAgIHNoOiBBZGQgbWFydWJ1bidzIHBjbWNpYSBkcml2ZXIKKworICAgIE1hcnVidW4gcGNtY2lhIGlzIGEgY2hpcCBmb3IgUENNQ0lBIHVzZWQgd2l0aCBTdXBlckguCisgICAgT2YgY291cnNlLCB0aGlzIGNhbiBiZSB1c2VkIGV2ZW4gYnkgb3RoZXIgYXJjaGl0ZWN0dXJlcy4KKyAgICBXaGVuIHVzZSB0aGlzIGRyaXZlciwgY2FtZSB0byBiZSBhYmxlIHRvIHVzZSBDb21wYWN0Rmxhc2gKKyAgICBhbmQgRXRoZXJuZXQuCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBOb2J1aGlybyBJd2FtYXRzdSA8aXdhbWF0c3VAbmlnYXVyaS5vcmc+CisKK2NvbW1pdCBmZWJkODZiOTY5Yjk3NTI4OWVkOTQ4ZjFhYzBlYjk3MjJkYTQxY2VkCitBdXRob3I6IE5vYnVoaXJvIEl3YW1hdHN1IDxpd2FtYXRzdUBuaWdhdXJpLm9yZz4KK0RhdGU6CVN1biBOb3YgMjUgMDI6MzI6MTMgMjAwNyArMDkwMAorCisgICAgc2g6IFVwZGF0ZSBTdXBlckggU0NJRiBkcml2ZXIKKworICAgIC0gQ2hhbmdlZCB2b2xhdGlsZSB1bnNpZ25lZCB0byB2dV8uCisgICAgLSBDaGFuZ2VkIE1ha2VmaWxlIGZvciBrY29uZmlnLgorCisgICAgU2lnbmVkLW9mZi1ieTogTm9idWhpcm8gSXdhbWF0c3UgPGl3YW1hdHN1QG5pZ2F1cmkub3JnPgorCiBjb21taXQgYTVmNjAxZmQxYjEyNzhkZWFlNWFhOWZjMjdhMjMyYjBkMWMxYzc4OAogQXV0aG9yOiBXb2xmZ2FuZyBEZW5rIDx3ZEBkZW54LmRlPgogRGF0ZToJTW9uIE5vdiAyNiAxOToxODoyMSAyMDA3ICswMTAwCkBAIC0xOTI3LDYgKzI2MTEsNTYgQEAKIAogICAgIHN5bmNocm9uaXppdGlvbiB3aXRoIG1haW5saW5lCiAKK2NvbW1pdCBlZGEzZTFlNjYxOWFkMGJlZTk0YWU0YjE2Yzk5ZDg4ZTc3ZTJhZjEzCitBdXRob3I6IE5vYnVoaXJvIEl3YW1hdHN1IDxpd2FtYXRzdUBuaWdhdXJpLm9yZz4KK0RhdGU6CVN1biBTZXAgMjMgMDI6NDI6MzggMjAwNyArMDkwMAorCisgICAgc2g6IEFkZCBzdXBwb3J0IGNvbW1hbmQgb2YgaWRlIHdpdGggc2gKKworICAgIFNpZ25lZC1vZmYtYnk6IE5vYnVoaXJvIEl3YW1hdHN1IDxpd2FtYXRzdUBuaWdhdXJpLm9yZz4KKworY29tbWl0IGQ5MWVhNDVkMTVjZjhlMDk4NzQ1NmJkMjExZmZiYjY1MDgyNGI2ZjEKK0F1dGhvcjogTm9idWhpcm8gSXdhbWF0c3UgPGl3YW1hdHN1QG5pZ2F1cmkub3JnPgorRGF0ZToJU3VuIFNlcCAyMyAwMjozODo0MiAyMDA3ICswOTAwCisKKyAgICBzaDogVXBkYXRlIE1ha2VmaWxlCisKKyAgICBBZGQgc3VwcG9ydCBNUzc3MjJTRTAxIHRvIE1ha2VmaWxlLgorCisgICAgU2lnbmVkLW9mZi1ieTogTm9idWhpcm8gSXdhbWF0c3UgPGl3YW1hdHN1QG5pZ2F1cmkub3JnPgorCitjb21taXQgNmMwYmJkY2NkMzc5ZjVjODcwMmFmOWUwNzY1Mjk0YzJmYjc0NzJhNgorQXV0aG9yOiBOb2J1aGlybyBJd2FtYXRzdSA8aXdhbWF0c3VAbmlnYXVyaS5vcmc+CitEYXRlOglTdW4gU2VwIDIzIDAyOjMxOjEzIDIwMDcgKzA5MDAKKworICAgIHNoOiBBZGQgc3VwcG9ydCBSZW5lc2FzIHNoNzcyMiBwcm9jZXNzb3IgYW5kIEhpdGFjaGkgTVM3NzIyU0UwMSBib2FyZAorCisgICAgU2lnbmVkLW9mZi1ieTogTm9idWhpcm8gSXdhbWF0c3UgPGl3YW1hdHN1QG5pZ2F1cmkub3JnPgorCitjb21taXQgMDQ3Mzc1YmZhNGMzMDUyZmE1MGE3NDhkYTdmZjg5ZTlkYWQzYjM2NAorQXV0aG9yOiBOb2J1aGlybyBJd2FtYXRzdSA8aXdhbWF0c3VAbmlnYXVyaS5vcmc+CitEYXRlOglTdW4gU2VwIDIzIDAyOjE5OjI0IDIwMDcgKzA5MDAKKworICAgIHNoOiBVcGRhdGUgTVM3NzUwU0UwMSBwbGF0Zm9ybQorCisgICAgU2lnbmVkLW9mZi1ieTogTm9idWhpcm8gSXdhbWF0c3UgPGl3YW1hdHN1QG5pZ2F1cmkub3JnPgorCitjb21taXQgNTE2YWQ3NjBkYjM1NTM3NjYyNjdhZGEwMWI3ZDVkNzI3ZmFhNGJiZAorQXV0aG9yOiBOb2J1aGlybyBJd2FtYXRzdSA8aXdhbWF0c3VAbmlnYXVyaS5vcmc+CitEYXRlOglTdW4gU2VwIDIzIDAyOjE3OjA4IDIwMDcgKzA5MDAKKworICAgIHNoOiBSZW1vdmUgY29tbWVudCBvdXQgY29kZSBmcm9tIGluY2x1ZGUvYXNtLXNoL2NwdV9zaDQuaAorCisgICAgU2lnbmVkLW9mZi1ieTogTm9idWhpcm8gSXdhbWF0c3UgPGl3YW1hdHN1QG5pZ2F1cmkub3JnPgorCitjb21taXQgYjAyYmFkMTI4NjY5ZTU2N2ZjZTg3ZDhkZjgyM2IwNmEwMTQ0YjhkYgorQXV0aG9yOiBOb2J1aGlybyBJd2FtYXRzdSA8aXdhbWF0c3VAbmlnYXVyaS5vcmc+CitEYXRlOglTdW4gU2VwIDIzIDAyOjEyOjMwIDIwMDcgKzA5MDAKKworICAgIHNoOiBVcGRhdGUgY29yZSBjb2RlIG9mIFN1cGVySC4KKworICAgIFNpZ25lZC1vZmYtYnk6IE5vYnVoaXJvIEl3YW1hdHN1IDxpd2FtYXRzdUBuaWdhdXJpLm9yZz4KKwogY29tbWl0IDY2ZGNhZDNhOWE1M2UwNzY2ZDkwZTAwODQxMjNiZDg1Mjk1MjJmYjAKIEF1dGhvcjogV29sZmdhbmcgRGVuayA8d2RAZGVueC5kZT4KIERhdGU6CVRodSBTZXAgMjAgMDA6MDQ6MTQgMjAwNyArMDIwMApAQCAtODYzNCw2ICs5MzY4LDI0IEBACiAKICAgICAgRml4IHRvIGNvbXBpbGUgSlNFIGFnYWluc3QgMjAwNzA1MTQgZ2l0IG9mIHUtYm9vdAogCitjb21taXQgNjlkZjNjNGRhMGM5MzAxN2NjZWIyNWEzNjZlNzk0NTcwYmQwZWQ5OAorQXV0aG9yOiBOb2J1aGlybyBJd2FtYXRzdSA8aXdhbWF0c3VAcmFodXRlLihub25lKT4KK0RhdGU6CVN1biBNYXkgMTMgMjE6MDE6MDMgMjAwNyArMDkwMAorCisgICAgc2g6IE1TNzc1MFNFIHN1cHBvcnQuCisKKyAgICBUaGlzIGFkZHMgc3VwcG9ydCBmb3IgdGhlIEhpdGFjaGkgTVM3NzUwU0UuCisKKyAgICBTaWduZWQtb2ZmLWJ5OiBOb2J1aGlybyBJd2FtYXRzdSA8aXdhbWF0c3VAbmlnYXVyaS5vcmc+CisKK2NvbW1pdCAwYjEzNWNmYzJlNTI0ZGMyNDliNzUwNTdiNTVkZDRjYzA5ODQyZTI3CitBdXRob3I6IE5vYnVoaXJvIEl3YW1hdHN1IDxpd2FtYXRzdUByYWh1dGUuKG5vbmUpPgorRGF0ZToJU3VuIE1heSAxMyAyMDo1ODowMCAyMDA3ICswOTAwCisKKyAgICBzaDogRmlyc3Qgc3VwcG9ydCBjb2RlIG9mIFN1cGVySC4KKworICAgIFNpZ25lZC1vZmYtYnk6IE5vYnVoaXJvIEl3YW1hdHN1IDxpd2FtYXRzdUBuaWdhdXJpLm9yZz4KKwogY29tbWl0IDYxOTM2NjY3ZTg2YTI1MGFlMTJmZDJkYzE4OWQzNTg4ZjBhNTllMGIKIEF1dGhvcjogU3RlZmFuIFJvZXNlIDxzckBkZW54LmRlPgogRGF0ZToJRnJpIE1heSAxMSAxMjowMTo0OSAyMDA3ICswMjAwCmRpZmYgLS1naXQgYS9DUkVESVRTIGIvQ1JFRElUUwppbmRleCAwOTUzZTdiLi4xMzE1MGFlIDEwMDY0NAotLS0gYS9DUkVESVRTCisrKyBiL0NSRURJVFMKQEAgLTExNyw3ICsxMTcsNyBAQAogRTogQURoYXJhbmthckBBVFRCSS5Db20KIEQ6IHRocmVhZHMgLyBzY2hlZHVsZXIgZXhhbXBsZSBjb2RlCiAKLU46IEvhcmkgRGF27fBzc29uCitOOiBLP3JpIERhdj8/c3NvbgogRToga2RAZmxhZ2EuaXMKIEQ6IEZMQUdBIERNIFN1cHBvcnQKIApAQCAtMTQzLDcgKzE0Myw3IEBACiBEOiBQb3J0IGZvciB0aGUgTW9kTkVUNTAgQm9hcmQsIE5FVCs1MCBDUFUgUG9ydAogVzogaHR0cDovL3d3dy5pbW1zLmRlCiAKLU46IERhbmllbCBFbmdzdHL2bQorTjogRGFuaWVsIEVuZ3N0cj9tCiBFOiBkYW5pZWxAb21pY3Jvbi5zZQogRDogeDg2IHBvcnQsIFN1cHBvcnQgZm9yIHNjNTIwX2NkcCBib2FyZAogCkBAIC0zMzQsNyArMzM0LDcgQEAKIEU6IGZyYW5rLm1vcmF1ZkBzYWx6YnJlbm5lci5jb20KIEQ6IFN1cHBvcnQgZm9yIEVtYmVkZGVkIFBsYW5ldCBSUFggU3VwZXIgQm9hcmQKIAotTjogRGF2aWQgTfxsbGVyCitOOiBEYXZpZCBNP2xsZXIKIEU6IGQubXVlbGxlckBlbHNvZnQuY2gKIEQ6IFN1cHBvcnQgZm9yIFNhbXN1bmcgQVJNOTIwVCBTTURLMjQxMCBldmFsIGJvYXJkCiAKQEAgLTQ5OSwzICs0OTksOCBAQAogRTogYXp1QHN5c2dvLmRlCiBEOiBPdmVyYWxsIGltcHJvdmVtZW50cyBvbiBTdHJvbmdBUk0sIEFSTTcyMFRETUk7IFN1cHBvcnQgZm9yIFR1eHNjcmVlbjsgaW5pdGlhbCBQQ01DSUEgc3VwcG9ydCBmb3IgQVJNCiBXOiB3d3cuZWxpbm9zLmNvbQorCitOOiBOb2J1aGlybyBJd2FtYXRzdQorRTogaXdhbWF0c3VAbmlnYXVyaS5vcmcKK0Q6IFN1cHBvcnQgZm9yIFN1cGVySCwgTVM3NzUwU0UwMSBhbmQgIE1TNzcyMlNFMDEgYm9hcmRzLgorVzogaHR0cDovL3d3dy5uaWdhdXJpLm9yZy9+aXdhbWF0c3UvCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IDZlM2MyZWYuLmJlMGI4ZDMgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCisrKyBiL01BSU5UQUlORVJTCkBAIC02MzYsNyArNjM2LDIyIEBACiAKIEhhYXZhcmQgU2tpbm5lbW9lbiA8aHNraW5uZW1vZW5AYXRtZWwuY29tPgogCi0JQVRTVEsxMDAwCQlBVDMyQVA3MDAwCisJQVRTVEsxMDAwCQlBVDMyQVA3eHh4CisJQVRTVEsxMDAyCQlBVDMyQVA3MDAwCisJQVRTVEsxMDAzCQlBVDMyQVA3MDAxCisJQVRTVEsxMDA0CQlBVDMyQVA3MDAyCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgU3VwZXJIIFN5c3RlbXM6CQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIE1haW50YWluZXIgTmFtZSwgRW1haWwgQWRkcmVzcwkJCQkJIworIwlCb2FyZAkJCUNQVQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitOb2J1aGlybyBJd21hYXRzdSA8aXdhbWF0c3VAbmlnYXVyaS5vcmc+CisKKwlNUzc3NTBTRQkJU0g3NzUwCisJTVM3NzIyU0UJCVNINzcyMgogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIEVuZCBvZiBNQUlOVEFJTkVSUyBsaXN0CQkJCQkJIwpkaWZmIC0tZ2l0IGEvTUFLRUFMTCBiL01BS0VBTEwKaW5kZXggYTZlMGVlZi4uYTA1OTQ2ZCAxMDA3NTUKLS0tIGEvTUFLRUFMTAorKysgYi9NQUtFQUxMCkBAIC02NDcsNiArNjQ3LDggQEAKIAogTElTVF9hdnIzMj0iCQlcCiAJYXRzdGsxMDAyCVwKKwlhdHN0azEwMDMJXAorCWF0c3RrMTAwNAlcCiAiCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKQEAgLTY2MCw2ICs2NjIsMjMgQEAKIAliZjU2MS1lemtpdAlcCiAiCiAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIFNIIFN5c3RlbXMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworTElTVF9zaDQ9IgkJXAorCW1zNzc1MHNlCVwKKwltczc3MjJzZQlcCisiCisKK0xJU1Rfc2gzPSIiCisKKworTElTVF9zaD0iCQlcCisJJHtMSVNUX3NoM30JXAorCSR7TElTVF9zaDR9CVwKKyIKKwogIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKICMtLS0tLSBmb3Igbm93LCBqdXN0IHJ1biBQUEMgYnkgZGVmYXVsdCAtLS0tLQpAQCAtNjk0LDcgKzcxMyw5IEBACiAJbWlwc3xtaXBzX2VsfCBcCiAJbmlvc3xuaW9zMnwgXAogCXBwY3w1eHh8NXh4eHw1MTJ4fDh4eHw4MjIwfDgyNHh8ODI2MHw4M3h4fDg1eHh8ODZ4eHw0eHh8N3h4fDc0eHh8IFwKLQl4ODZ8STQ4NnxUU0VDKQorCXg4NnxJNDg2fFRTRUN8IFwKKwlzaHxzaDR8c2gzIFwKKwkpCiAJCQlmb3IgdGFyZ2V0IGluIGBldmFsIGVjaG8gJyRMSVNUXycke2FyZ31gCiAJCQlkbwogCQkJCWJ1aWxkX3RhcmdldCAke3RhcmdldH0KZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKaW5kZXggZTVkNjliNC4uODdkMGE3NyAxMDA2NDQKLS0tIGEvTWFrZWZpbGUKKysrIGIvTWFrZWZpbGUKQEAgLTE1Miw2ICsxNTIsOSBAQAogaWZlcSAoJChBUkNIKSxhdnIzMikKIENST1NTX0NPTVBJTEUgPSBhdnIzMi1saW51eC0KIGVuZGlmCitpZmVxICgkKEFSQ0gpLHNoKQorQ1JPU1NfQ09NUElMRSA9IHNoNC1saW51eC0KK2VuZGlmCiBlbmRpZgogZW5kaWYKIApAQCAtMTkyOCw3ICsxOTMxLDcgQEAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAogTVBDODU0MEFEU19jb25maWc6CXVuY29uZmlnCi0JQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgcHBjIG1wYzg1eHggbXBjODU0MGFkcworCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIHBwYyBtcGM4NXh4IG1wYzg1NDBhZHMgZnJlZXNjYWxlCiAKIE1QQzg1NDBFVkFMX2NvbmZpZyBcCiBNUEM4NTQwRVZBTF8zM19jb25maWcgXApAQCAtMTk1Miw3ICsxOTU1LDcgQEAKIAlAJChNS0NPTkZJRykgLWEgTVBDODU0MEVWQUwgcHBjIG1wYzg1eHggbXBjODU0MGV2YWwKIAogTVBDODU2MEFEU19jb25maWc6CXVuY29uZmlnCi0JQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgcHBjIG1wYzg1eHggbXBjODU2MGFkcworCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIHBwYyBtcGM4NXh4IG1wYzg1NjBhZHMgZnJlZXNjYWxlCiAKIE1QQzg1NDFDRFNfbGVnYWN5X2NvbmZpZyBcCiBNUEM4NTQxQ0RTX2NvbmZpZzoJdW5jb25maWcKQEAgLTE5NjIsNyArMTk2NSw3IEBACiAJCWVjaG8gIiNkZWZpbmUgQ09ORklHX0xFR0FDWSIgPj4kKG9iailpbmNsdWRlL2NvbmZpZy5oIDsgXAogCQllY2hvICIuLi4gbGVnYWN5IiA7IFwKIAlmaQotCUAkKE1LQ09ORklHKSAtYSBNUEM4NTQxQ0RTIHBwYyBtcGM4NXh4IG1wYzg1NDFjZHMgY2RzCisJQCQoTUtDT05GSUcpIC1hIE1QQzg1NDFDRFMgcHBjIG1wYzg1eHggbXBjODU0MWNkcyBmcmVlc2NhbGUKIAogTVBDODU0NERTX2NvbmZpZzoJdW5jb25maWcKIAlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBwcGMgbXBjODV4eCBtcGM4NTQ0ZHMgZnJlZXNjYWxlCkBAIC0xOTc1LDcgKzE5NzgsNyBAQAogCQllY2hvICIjZGVmaW5lIENPTkZJR19MRUdBQ1kiID4+JChvYmopaW5jbHVkZS9jb25maWcuaCA7IFwKIAkJZWNobyAiLi4uIGxlZ2FjeSIgOyBcCiAJZmkKLQlAJChNS0NPTkZJRykgLWEgTVBDODU0OENEUyBwcGMgbXBjODV4eCBtcGM4NTQ4Y2RzIGNkcworCUAkKE1LQ09ORklHKSAtYSBNUEM4NTQ4Q0RTIHBwYyBtcGM4NXh4IG1wYzg1NDhjZHMgZnJlZXNjYWxlCiAKIE1QQzg1NTVDRFNfbGVnYWN5X2NvbmZpZyBcCiBNUEM4NTU1Q0RTX2NvbmZpZzoJdW5jb25maWcKQEAgLTE5ODUsMTAgKzE5ODgsMTAgQEAKIAkJZWNobyAiI2RlZmluZSBDT05GSUdfTEVHQUNZIiA+PiQob2JqKWluY2x1ZGUvY29uZmlnLmggOyBcCiAJCWVjaG8gIi4uLiBsZWdhY3kiIDsgXAogCWZpCi0JQCQoTUtDT05GSUcpIC1hIE1QQzg1NTVDRFMgcHBjIG1wYzg1eHggbXBjODU1NWNkcyBjZHMKKwlAJChNS0NPTkZJRykgLWEgTVBDODU1NUNEUyBwcGMgbXBjODV4eCBtcGM4NTU1Y2RzIGZyZWVzY2FsZQogCiBNUEM4NTY4TURTX2NvbmZpZzoJdW5jb25maWcKLQlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBwcGMgbXBjODV4eCBtcGM4NTY4bWRzCisJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgcHBjIG1wYzg1eHggbXBjODU2OG1kcyBmcmVlc2NhbGUKIAogUE04NTRfY29uZmlnOgl1bmNvbmZpZwogCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIHBwYyBtcGM4NXh4IHBtODU0CkBAIC0yNjczLDcgKzI2NzYsMzAgQEAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAogYXRzdGsxMDAyX2NvbmZpZwk6CXVuY29uZmlnCi0JQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgYXZyMzIgYXQzMmFwIGF0c3RrMTAwMCBhdG1lbCBhdDMyYXA3MDAwCisJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgYXZyMzIgYXQzMmFwIGF0c3RrMTAwMCBhdG1lbCBhdDMyYXA3MDB4CisKK2F0c3RrMTAwM19jb25maWcJOgl1bmNvbmZpZworCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIGF2cjMyIGF0MzJhcCBhdHN0azEwMDAgYXRtZWwgYXQzMmFwNzAweAorCithdHN0azEwMDRfY29uZmlnCToJdW5jb25maWcKKwlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBhdnIzMiBhdDMyYXAgYXRzdGsxMDAwIGF0bWVsIGF0MzJhcDcwMHgKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyBzaDQgKFJlbmVzYXMgU3VwZXJIKQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworbXM3NzUwc2VfY29uZmlnOiB1bmNvbmZpZworCUAgPmluY2x1ZGUvY29uZmlnLmgKKwlAZWNobyAiI2RlZmluZSBDT05GSUdfTVM3NzUwU0UgMSIgPj4gaW5jbHVkZS9jb25maWcuaAorCUAuL21rY29uZmlnIC1hICQoQDpfY29uZmlnPSkgc2ggc2g0IG1zNzc1MHNlCisKK21zNzcyMnNlX2NvbmZpZyA6ICAgICAgIHVuY29uZmlnCisJQCA+aW5jbHVkZS9jb25maWcuaAorCUBlY2hvICIjZGVmaW5lIENPTkZJR19NUzc3MjJTRSAxIiA+PiBpbmNsdWRlL2NvbmZpZy5oCisJQC4vbWtjb25maWcgLWEgJChAOl9jb25maWc9KSBzaCBzaDQgbXM3NzIyc2UKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvUkVBRE1FIGIvUkVBRE1FCmluZGV4IDNkYWQ1ZmMuLjI2ZjkzYzIgMTAwNjQ0Ci0tLSBhL1JFQURNRQorKysgYi9SRUFETUUKQEAgLTIzNSw5ICsyMzUsNyBAQAogLSBCb2FyZCBUeXBlOglEZWZpbmUgZXhhY3RseSBvbmUsIGUuZy4gQ09ORklHX01QQzg1NDBBRFMuCiAKIC0gQ1BVIERhdWdodGVyYm9hcmQgVHlwZTogKGlmIENPTkZJR19BVFNUSzEwMDAgaXMgZGVmaW5lZCkKLQkJRGVmaW5lIGV4YWN0bHkgb25lIG9mCi0JCUNPTkZJR19BVFNUSzEwMDIKLQorCQlEZWZpbmUgZXhhY3RseSBvbmUsIGUuZy4gQ09ORklHX0FUU1RLMTAwMgogCiAtIENQVSBNb2R1bGUgVHlwZTogKGlmIENPTkZJR19DT0dFTlQgaXMgZGVmaW5lZCkKIAkJRGVmaW5lIGV4YWN0bHkgb25lIG9mCmRpZmYgLS1naXQgYS9ib2FyZC9jZHMvbXBjODU1NWNkcy91LWJvb3QubGRzIGIvYm9hcmQvY2RzL21wYzg1NTVjZHMvdS1ib290LmxkcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGUwOTIzYS4uMDAwMDAwMAotLS0gYS9ib2FyZC9jZHMvbXBjODU1NWNkcy91LWJvb3QubGRzCisrKyAvZGV2L251bGwKQEAgLTEsMTUwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAwNCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3Rvci4KLSAqCi0gKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwotICogcHJvamVjdC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgMDIxMTEtMTMwNyBVU0EKLSAqLwotCi1PVVRQVVRfQVJDSChwb3dlcnBjKQotU0VBUkNIX0RJUigvbGliKTsgU0VBUkNIX0RJUigvdXNyL2xpYik7IFNFQVJDSF9ESVIoL3Vzci9sb2NhbC9saWIpOyBTRUFSQ0hfRElSKC91c3IvbG9jYWwvcG93ZXJwYy1hbnktZWxmL2xpYik7Ci0vKiBEbyB3ZSBuZWVkIGFueSBvZiB0aGVzZSBmb3IgZWxmPwotICAgX19EWU5BTUlDID0gMDsgICAgKi8KLVNFQ1RJT05TCi17Ci0gIC5yZXNldHZlYyAweEZGRkZGRkZDIDoKLSAgewotICAgICooLnJlc2V0dmVjKQotICB9ID0gMHhmZmZmCi0KLSAgLmJvb3RwZyAweEZGRkZGMDAwIDoKLSAgewotICAgIGNwdS9tcGM4NXh4L3N0YXJ0Lm8JKC5ib290cGcpCi0gICAgYm9hcmQvY2RzL21wYzg1NTVjZHMvaW5pdC5vICguYm9vdHBnKQotICB9ID0gMHhmZmZmCi0KLSAgLyogUmVhZC1vbmx5IHNlY3Rpb25zLCBtZXJnZWQgaW50byB0ZXh0IHNlZ21lbnQ6ICovCi0gIC4gPSArIFNJWkVPRl9IRUFERVJTOwotICAuaW50ZXJwIDogeyAqKC5pbnRlcnApIH0KLSAgLmhhc2ggICAgICAgICAgOiB7ICooLmhhc2gpCQl9Ci0gIC5keW5zeW0gICAgICAgIDogeyAqKC5keW5zeW0pCQl9Ci0gIC5keW5zdHIgICAgICAgIDogeyAqKC5keW5zdHIpCQl9Ci0gIC5yZWwudGV4dCAgICAgIDogeyAqKC5yZWwudGV4dCkJCX0KLSAgLnJlbGEudGV4dCAgICAgOiB7ICooLnJlbGEudGV4dCkgCX0KLSAgLnJlbC5kYXRhICAgICAgOiB7ICooLnJlbC5kYXRhKQkJfQotICAucmVsYS5kYXRhICAgICA6IHsgKigucmVsYS5kYXRhKSAJfQotICAucmVsLnJvZGF0YSAgICA6IHsgKigucmVsLnJvZGF0YSkgCX0KLSAgLnJlbGEucm9kYXRhICAgOiB7ICooLnJlbGEucm9kYXRhKSAJfQotICAucmVsLmdvdCAgICAgICA6IHsgKigucmVsLmdvdCkJCX0KLSAgLnJlbGEuZ290ICAgICAgOiB7ICooLnJlbGEuZ290KQkJfQotICAucmVsLmN0b3JzICAgICA6IHsgKigucmVsLmN0b3JzKQl9Ci0gIC5yZWxhLmN0b3JzICAgIDogeyAqKC5yZWxhLmN0b3JzKQl9Ci0gIC5yZWwuZHRvcnMgICAgIDogeyAqKC5yZWwuZHRvcnMpCX0KLSAgLnJlbGEuZHRvcnMgICAgOiB7ICooLnJlbGEuZHRvcnMpCX0KLSAgLnJlbC5ic3MgICAgICAgOiB7ICooLnJlbC5ic3MpCQl9Ci0gIC5yZWxhLmJzcyAgICAgIDogeyAqKC5yZWxhLmJzcykJCX0KLSAgLnJlbC5wbHQgICAgICAgOiB7ICooLnJlbC5wbHQpCQl9Ci0gIC5yZWxhLnBsdCAgICAgIDogeyAqKC5yZWxhLnBsdCkJCX0KLSAgLmluaXQgICAgICAgICAgOiB7ICooLmluaXQpCX0KLSAgLnBsdCA6IHsgKigucGx0KSB9Ci0gIC50ZXh0ICAgICAgOgotICB7Ci0gICAgY3B1L21wYzg1eHgvc3RhcnQubwkoLnRleHQpCi0gICAgYm9hcmQvY2RzL21wYzg1NTVjZHMvaW5pdC5vICgudGV4dCkKLSAgICBjcHUvbXBjODV4eC90cmFwcy5vICgudGV4dCkKLSAgICBjcHUvbXBjODV4eC9pbnRlcnJ1cHRzLm8gKC50ZXh0KQotICAgIGNwdS9tcGM4NXh4L2NwdV9pbml0Lm8gKC50ZXh0KQotICAgIGNwdS9tcGM4NXh4L2NwdS5vICgudGV4dCkKLSAgICBkcml2ZXJzL25ldC90c2VjLm8gKC50ZXh0KQotICAgIGNwdS9tcGM4NXh4L3NwZWVkLm8gKC50ZXh0KQotICAgIGNwdS9tcGM4NXh4L3BjaS5vICgudGV4dCkKLSAgICBjb21tb24vZGxtYWxsb2MubyAoLnRleHQpCi0gICAgbGliX2dlbmVyaWMvY3JjMzIubyAoLnRleHQpCi0gICAgbGliX3BwYy9leHRhYmxlLm8gKC50ZXh0KQotICAgIGxpYl9nZW5lcmljL3psaWIubyAoLnRleHQpCi0gICAgKigudGV4dCkKLSAgICAqKC5maXh1cCkKLSAgICAqKC5nb3QxKQotICAgfQotICAgIF9ldGV4dCA9IC47Ci0gICAgUFJPVklERSAoZXRleHQgPSAuKTsKLSAgICAucm9kYXRhICAgIDoKLSAgIHsKLSAgICAqKC5yb2RhdGEpCi0gICAgKigucm9kYXRhMSkKLSAgICAqKC5yb2RhdGEuc3RyMS40KQotICAgICooLmVoX2ZyYW1lKQotICB9Ci0gIC5maW5pICAgICAgOiB7ICooLmZpbmkpICAgIH0gPTAKLSAgLmN0b3JzICAgICA6IHsgKiguY3RvcnMpICAgfQotICAuZHRvcnMgICAgIDogeyAqKC5kdG9ycykgICB9Ci0KLSAgLyogUmVhZC13cml0ZSBzZWN0aW9uLCBtZXJnZWQgaW50byBkYXRhIHNlZ21lbnQ6ICovCi0gIC4gPSAoLiArIDB4MDBGRikgJiAweEZGRkZGRjAwOwotICBfZXJvdGV4dCA9IC47Ci0gIFBST1ZJREUgKGVyb3RleHQgPSAuKTsKLSAgLnJlbG9jICAgOgotICB7Ci0gICAgKiguZ290KQotICAgIF9HT1QyX1RBQkxFXyA9IC47Ci0gICAgKiguZ290MikKLSAgICBfRklYVVBfVEFCTEVfID0gLjsKLSAgICAqKC5maXh1cCkKLSAgfQotICBfX2dvdDJfZW50cmllcyA9IChfRklYVVBfVEFCTEVfIC0gX0dPVDJfVEFCTEVfKSA+PiAyOwotICBfX2ZpeHVwX2VudHJpZXMgPSAoLiAtIF9GSVhVUF9UQUJMRV8pID4+IDI7Ci0KLSAgLmRhdGEgICAgOgotICB7Ci0gICAgKiguZGF0YSkKLSAgICAqKC5kYXRhMSkKLSAgICAqKC5zZGF0YSkKLSAgICAqKC5zZGF0YTIpCi0gICAgKiguZHluYW1pYykKLSAgICBDT05TVFJVQ1RPUlMKLSAgfQotICBfZWRhdGEgID0gIC47Ci0gIFBST1ZJREUgKGVkYXRhID0gLik7Ci0KLSAgLiA9IC47Ci0gIF9fdV9ib290X2NtZF9zdGFydCA9IC47Ci0gIC51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9Ci0gIF9fdV9ib290X2NtZF9lbmQgPSAuOwotCi0gIC4gPSAuOwotICBfX3N0YXJ0X19fZXhfdGFibGUgPSAuOwotICBfX2V4X3RhYmxlIDogeyAqKF9fZXhfdGFibGUpIH0KLSAgX19zdG9wX19fZXhfdGFibGUgPSAuOwotCi0gIC4gPSBBTElHTigyNTYpOwotICBfX2luaXRfYmVnaW4gPSAuOwotICAudGV4dC5pbml0IDogeyAqKC50ZXh0LmluaXQpIH0KLSAgLmRhdGEuaW5pdCA6IHsgKiguZGF0YS5pbml0KSB9Ci0gIC4gPSBBTElHTigyNTYpOwotICBfX2luaXRfZW5kID0gLjsKLQotICBfX2Jzc19zdGFydCA9IC47Ci0gIC5ic3MgICAgICAgOgotICB7Ci0gICAqKC5zYnNzKSAqKC5zY29tbW9uKQotICAgKiguZHluYnNzKQotICAgKiguYnNzKQotICAgKihDT01NT04pCi0gIH0KLSAgX2VuZCA9IC4gOwotICBQUk9WSURFIChlbmQgPSAuKTsKLX0KZGlmZiAtLWdpdCBhL2JvYXJkL2NtNTIwMC9jbTUyMDAuYyBiL2JvYXJkL2NtNTIwMC9jbTUyMDAuYwppbmRleCA0YTg2ZDNjLi43OWZiNzFkIDEwMDY0NAotLS0gYS9ib2FyZC9jbTUyMDAvY201MjAwLmMKKysrIGIvYm9hcmQvY201MjAwL2NtNTIwMC5jCkBAIC0yNjMsNyArMjYzLDYgQEAKIHsKIAlpbnQgbGVuLCByZXQsIG5vZGVvZmZzZXQgPSAwOwogCWNoYXIgbW9kdWxlX25hbWVbTU9EVUxFX05BTUVfTUFYTEVOXSA9IHswfTsKLQl1bG9uZyBtZW1vcnlfZGF0YVsyXSA9IHswfTsKIAogCWNvbXBvc2VfbW9kdWxlX25hbWUoaHdfaWQsIG1vZHVsZV9uYW1lKTsKIAlsZW4gPSBzdHJsZW4obW9kdWxlX25hbWUpICsgMTsKQEAgLTI3MywyMiArMjcyLDEyIEBACiAJcHJpbnRmKCJmdF9ibG9iX3VwZGF0ZSgpOiBjYW5ub3Qgc2V0IC9tb2RlbCBwcm9wZXJ0eSBlcnI6JXNcbiIsCiAJCWZkdF9zdHJlcnJvcihyZXQpKTsKIAotCW1lbW9yeV9kYXRhWzBdID0gY3B1X3RvX2JlMzIoYmQtPmJpX21lbXN0YXJ0KTsKLQltZW1vcnlfZGF0YVsxXSA9IGNwdV90b19iZTMyKGJkLT5iaV9tZW1zaXplKTsKKwlyZXQgPSBmZHRfZml4dXBfbWVtb3J5KGJsb2IsICh1NjQpYmQtPmJpX21lbXN0YXJ0LCAodTY0KWJkLT5iaV9tZW1zaXplKTsKIAotCW5vZGVvZmZzZXQgPSBmZHRfcGF0aF9vZmZzZXQgKGJsb2IsICIvbWVtb3J5Iik7Ci0JaWYgKG5vZGVvZmZzZXQgPj0gMCkgewotCQlyZXQgPSBmZHRfc2V0cHJvcChibG9iLCBub2Rlb2Zmc2V0LCAicmVnIiwgbWVtb3J5X2RhdGEsCi0JCQkJCXNpemVvZihtZW1vcnlfZGF0YSkpOwotCWlmIChyZXQgPCAwKQorCWlmIChyZXQgPCAwKSB7CiAJCXByaW50ZigiZnRfYmxvYl91cGRhdGUpOiBjYW5ub3Qgc2V0IC9tZW1vcnkvcmVnICIKIAkJCSJwcm9wZXJ0eSBlcnI6JXNcbiIsIGZkdF9zdHJlcnJvcihyZXQpKTsKIAl9Ci0JZWxzZSB7Ci0JCS8qIG1lbW9yeSBub2RlIGlzIHJlcXVpcmVkIGluIGR0cyAqLwotCQlwcmludGYoImZ0X2Jsb2JfdXBkYXRlKCk6IGNhbm5vdCBmaW5kIC9tZW1vcnkgbm9kZSAiCi0JCSJlcnI6JXNcbiIsIGZkdF9zdHJlcnJvcihub2Rlb2Zmc2V0KSk7Ci0JfQogfQogI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX09GX0JPQVJEX1NFVFVQKSAmJiBkZWZpbmVkKENPTkZJR19PRl9MSUJGRFQpICovCiAKZGlmZiAtLWdpdCBhL2JvYXJkL2Nkcy9jb21tb24vY2FkbXVzLmMgYi9ib2FyZC9mcmVlc2NhbGUvY29tbW9uL2NhZG11cy5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBib2FyZC9jZHMvY29tbW9uL2NhZG11cy5jCnJlbmFtZSB0byBib2FyZC9mcmVlc2NhbGUvY29tbW9uL2NhZG11cy5jCmRpZmYgLS1naXQgYS9ib2FyZC9jZHMvY29tbW9uL2NhZG11cy5oIGIvYm9hcmQvZnJlZXNjYWxlL2NvbW1vbi9jYWRtdXMuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYm9hcmQvY2RzL2NvbW1vbi9jYWRtdXMuaApyZW5hbWUgdG8gYm9hcmQvZnJlZXNjYWxlL2NvbW1vbi9jYWRtdXMuaApkaWZmIC0tZ2l0IGEvYm9hcmQvY2RzL2NvbW1vbi9lZXByb20uYyBiL2JvYXJkL2ZyZWVzY2FsZS9jb21tb24vZWVwcm9tLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGJvYXJkL2Nkcy9jb21tb24vZWVwcm9tLmMKcmVuYW1lIHRvIGJvYXJkL2ZyZWVzY2FsZS9jb21tb24vZWVwcm9tLmMKZGlmZiAtLWdpdCBhL2JvYXJkL2Nkcy9jb21tb24vZWVwcm9tLmggYi9ib2FyZC9mcmVlc2NhbGUvY29tbW9uL2VlcHJvbS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBib2FyZC9jZHMvY29tbW9uL2VlcHJvbS5oCnJlbmFtZSB0byBib2FyZC9mcmVlc2NhbGUvY29tbW9uL2VlcHJvbS5oCmRpZmYgLS1naXQgYS9ib2FyZC9jZHMvY29tbW9uL2Z0X2JvYXJkLmMgYi9ib2FyZC9mcmVlc2NhbGUvY29tbW9uL2Z0X2JvYXJkLmMKc2ltaWxhcml0eSBpbmRleCA2OSUKcmVuYW1lIGZyb20gYm9hcmQvY2RzL2NvbW1vbi9mdF9ib2FyZC5jCnJlbmFtZSB0byBib2FyZC9mcmVlc2NhbGUvY29tbW9uL2Z0X2JvYXJkLmMKaW5kZXggM2VkYTEwMC4uNmYyMjFhZiAxMDA2NDQKLS0tIGEvYm9hcmQvY2RzL2NvbW1vbi9mdF9ib2FyZC5jCisrKyBiL2JvYXJkL2ZyZWVzY2FsZS9jb21tb24vZnRfYm9hcmQuYwpAQCAtMjEsMjQgKzIxLDI5IEBACiAgKi8KIAogI2luY2x1ZGUgPGNvbW1vbi5oPgotCi0jaWYgZGVmaW5lZChDT05GSUdfT0ZfRkxBVF9UUkVFKQotI2luY2x1ZGUgPGZ0X2J1aWxkLmg+CisjaW5jbHVkZSA8bGliZmR0Lmg+CisjaW5jbHVkZSA8ZmR0X3N1cHBvcnQuaD4KICNpbmNsdWRlICJjYWRtdXMuaCIKIAotZXh0ZXJuIHZvaWQgZnRfY3B1X3NldHVwKHZvaWQgKmJsb2IsIGJkX3QgKmJkKTsKLQorI2lmIGRlZmluZWQoQ09ORklHX09GX0JPQVJEX1NFVFVQKQogc3RhdGljIHZvaWQgY2RzX3BjaV9maXh1cCh2b2lkICpibG9iKQogewotCWludCBsZW47Ci0JdTMyICptYXA7Ci0JaW50IHNsb3Q7Ci0JaW50IGk7CisJaW50IG5vZGUsIHRtcFsyXTsKKwljb25zdCBjaGFyICpwYXRoOworCWludCBsZW4sIHNsb3QsIGk7CisJdTMyICptYXAgPSBOVUxMOwogCi0JbWFwID0gZnRfZ2V0X3Byb3AoYmxvYiwgIi8iIE9GX1NPQyAiL3BjaUA4MDAwL2ludGVycnVwdC1tYXAiLCAmbGVuKTsKLQotCWlmICghbWFwKQotCQltYXAgPSBmdF9nZXRfcHJvcChibG9iLCAiLyIgT0ZfUENJICIvaW50ZXJydXB0LW1hcCIsICZsZW4pOworCW5vZGUgPSBmZHRfcGF0aF9vZmZzZXQoYmxvYiwgIi9hbGlhc2VzIik7CisJdG1wWzBdID0gMDsKKwlpZiAobm9kZSA+PSAwKSB7CisJCXBhdGggPSBmZHRfZ2V0cHJvcChibG9iLCBub2RlLCAicGNpMCIsIE5VTEwpOworCQlpZiAocGF0aCkgeworCQkJbm9kZSA9IGZkdF9wYXRoX29mZnNldChibG9iLCBwYXRoKTsKKwkJCWlmIChub2RlID49IDApIHsKKwkJCQltYXAgPSBmZHRfZ2V0cHJvcF93KGJsb2IsIG5vZGUsICJpbnRlcnJ1cHQtbWFwIiwgJmxlbik7CisJCQl9CisJCX0KKwl9CiAKIAlpZiAobWFwKSB7CiAJCWxlbiAvPSBzaXplb2YodTMyKTsKQEAgLTUwLDMzICs1NSwxOCBAQAogCQkJICogY2hhbmdlcyBkZXBlbmRpbmcgb24gdGhlIHNsb3QgdGhlIGNhcnJpZXIgY2FyZCBpcyBpbi4KIAkJCSAqLwogCQkJbWFwWzNdID0gKChtYXBbM10gKyBzbG90IC0gMikgJSA0KSArIDE7Ci0KIAkJCW1hcCs9NzsKIAkJfQotCX0gZWxzZSB7Ci0JCXByaW50ZigiKioqIFdhcm5pbmcgLSBObyBQQ0kgbm9kZSBmb3VuZFxuIik7CiAJfQogfQotI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR19PRl9GTEFUX1RSRUUpICYmIGRlZmluZWQoQ09ORklHX09GX0JPQVJEX1NFVFVQKQogdm9pZAogZnRfYm9hcmRfc2V0dXAodm9pZCAqYmxvYiwgYmRfdCAqYmQpCiB7Ci0JdTMyICpwOwotCWludCBsZW47Ci0KKwlmdF9jcHVfc2V0dXAoYmxvYiwgYmQpOwogI2lmZGVmIENPTkZJR19QQ0kKIAlmdF9wY2lfc2V0dXAoYmxvYiwgYmQpOwotI2VuZGlmCi0JZnRfY3B1X3NldHVwKGJsb2IsIGJkKTsKLQotCXAgPSBmdF9nZXRfcHJvcChibG9iLCAiL21lbW9yeS9yZWciLCAmbGVuKTsKLQlpZiAocCAhPSBOVUxMKSB7Ci0JCSpwKysgPSBjcHVfdG9fYmUzMihiZC0+YmlfbWVtc3RhcnQpOwotCQkqcCA9IGNwdV90b19iZTMyKGJkLT5iaV9tZW1zaXplKTsKLQl9Ci0KIAljZHNfcGNpX2ZpeHVwKGJsb2IpOworI2VuZGlmCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2JvYXJkL2Nkcy9jb21tb24vdmlhLmMgYi9ib2FyZC9mcmVlc2NhbGUvY29tbW9uL3ZpYS5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBib2FyZC9jZHMvY29tbW9uL3ZpYS5jCnJlbmFtZSB0byBib2FyZC9mcmVlc2NhbGUvY29tbW9uL3ZpYS5jCmRpZmYgLS1naXQgYS9ib2FyZC9jZHMvY29tbW9uL3ZpYS5oIGIvYm9hcmQvZnJlZXNjYWxlL2NvbW1vbi92aWEuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYm9hcmQvY2RzL2NvbW1vbi92aWEuaApyZW5hbWUgdG8gYm9hcmQvZnJlZXNjYWxlL2NvbW1vbi92aWEuaApkaWZmIC0tZ2l0IGEvYm9hcmQvbXBjODU0MGFkcy9NYWtlZmlsZSBiL2JvYXJkL2ZyZWVzY2FsZS9tcGM4NTQwYWRzL01ha2VmaWxlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBib2FyZC9tcGM4NTQwYWRzL01ha2VmaWxlCnJlbmFtZSB0byBib2FyZC9mcmVlc2NhbGUvbXBjODU0MGFkcy9NYWtlZmlsZQpkaWZmIC0tZ2l0IGEvYm9hcmQvbXBjODU0MGFkcy9jb25maWcubWsgYi9ib2FyZC9mcmVlc2NhbGUvbXBjODU0MGFkcy9jb25maWcubWsKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGJvYXJkL21wYzg1NDBhZHMvY29uZmlnLm1rCnJlbmFtZSB0byBib2FyZC9mcmVlc2NhbGUvbXBjODU0MGFkcy9jb25maWcubWsKZGlmZiAtLWdpdCBhL2JvYXJkL21wYzg1NDBhZHMvaW5pdC5TIGIvYm9hcmQvZnJlZXNjYWxlL21wYzg1NDBhZHMvaW5pdC5TCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBib2FyZC9tcGM4NTQwYWRzL2luaXQuUwpyZW5hbWUgdG8gYm9hcmQvZnJlZXNjYWxlL21wYzg1NDBhZHMvaW5pdC5TCmRpZmYgLS1naXQgYS9ib2FyZC9tcGM4NTQwYWRzL21wYzg1NDBhZHMuYyBiL2JvYXJkL2ZyZWVzY2FsZS9tcGM4NTQwYWRzL21wYzg1NDBhZHMuYwpzaW1pbGFyaXR5IGluZGV4IDg5JQpyZW5hbWUgZnJvbSBib2FyZC9tcGM4NTQwYWRzL21wYzg1NDBhZHMuYwpyZW5hbWUgdG8gYm9hcmQvZnJlZXNjYWxlL21wYzg1NDBhZHMvbXBjODU0MGFkcy5jCmluZGV4IDkxNGU1MWEuLjM1ZjVlZWEgMTAwNjQ0Ci0tLSBhL2JvYXJkL21wYzg1NDBhZHMvbXBjODU0MGFkcy5jCisrKyBiL2JvYXJkL2ZyZWVzY2FsZS9tcGM4NTQwYWRzL21wYzg1NDBhZHMuYwpAQCAtMzAsMTEgKzMwLDggQEAKICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL2ltbWFwXzg1eHguaD4KICNpbmNsdWRlIDxzcGQuaD4KLQotI2lmIGRlZmluZWQoQ09ORklHX09GX0ZMQVRfVFJFRSkKLSNpbmNsdWRlIDxmdF9idWlsZC5oPgotI2VuZGlmCi0KKyNpbmNsdWRlIDxsaWJmZHQuaD4KKyNpbmNsdWRlIDxmZHRfc3VwcG9ydC5oPgogCiAjaWYgZGVmaW5lZChDT05GSUdfRERSX0VDQykgJiYgIWRlZmluZWQoQ09ORklHX0VDQ19JTklUX1ZJQV9ERFJDT05UUk9MTEVSKQogZXh0ZXJuIHZvaWQgZGRyX2VuYWJsZV9lY2ModW5zaWduZWQgaW50IGRyYW1fc2l6ZSk7CkBAIC03NywxMyArNzQsMTIgQEAKIHsKIAlsb25nIGRyYW1fc2l6ZSA9IDA7CiAJZXh0ZXJuIGxvbmcgc3BkX3NkcmFtICh2b2lkKTsKLQl2b2xhdGlsZSBpbW1hcF90ICppbW1hcCA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CiAKIAlwdXRzKCJJbml0aWFsaXppbmdcbiIpOwogCiAjaWYgZGVmaW5lZChDT05GSUdfRERSX0RMTCkKIAl7Ci0JICAgIHZvbGF0aWxlIGNjc3JfZ3VyX3QgKmd1cj0gJmltbWFwLT5pbV9ndXI7CisJICAgIHZvbGF0aWxlIGNjc3JfZ3VyX3QgKmd1ciA9ICh2b2lkICopKENGR19NUEM4NXh4X0dVVFNfQUREUik7CiAJICAgIHVpbnQgdGVtcF9kZHJkbGwgPSAwOwogCiAJICAgIC8qCkBAIC0xMjUsOSArMTIxLDggQEAKIHZvaWQKIGxvY2FsX2J1c19pbml0KHZvaWQpCiB7Ci0Jdm9sYXRpbGUgaW1tYXBfdCAqaW1tYXAgPSAoaW1tYXBfdCAqKUNGR19JTU1SOwotCXZvbGF0aWxlIGNjc3JfZ3VyX3QgKmd1ciA9ICZpbW1hcC0+aW1fZ3VyOwotCXZvbGF0aWxlIGNjc3JfbGJjX3QgKmxiYyA9ICZpbW1hcC0+aW1fbGJjOworCXZvbGF0aWxlIGNjc3JfZ3VyX3QgKmd1ciA9ICh2b2lkICopKENGR19NUEM4NXh4X0dVVFNfQUREUik7CisJdm9sYXRpbGUgY2Nzcl9sYmNfdCAqbGJjID0gKHZvaWQgKikoQ0ZHX01QQzg1eHhfTEJDX0FERFIpOwogCiAJdWludCBjbGtkaXY7CiAJdWludCBsYmNfaHo7CkBAIC0xODYsOCArMTgxLDcgQEAKIHZvaWQKIHNkcmFtX2luaXQodm9pZCkKIHsKLQl2b2xhdGlsZSBpbW1hcF90ICppbW1hcCA9IChpbW1hcF90ICopQ0ZHX0lNTVI7Ci0Jdm9sYXRpbGUgY2Nzcl9sYmNfdCAqbGJjPSAmaW1tYXAtPmltX2xiYzsKKwl2b2xhdGlsZSBjY3NyX2xiY190ICpsYmMgPSAodm9pZCAqKShDRkdfTVBDODV4eF9MQkNfQUREUik7CiAJdWludCAqc2RyYW1fYWRkciA9ICh1aW50ICopQ0ZHX0xCQ19TRFJBTV9CQVNFOwogCiAJcHV0cygiICAgIFNEUkFNOiAiKTsKQEAgLTI4Miw4ICsyNzYsNyBAQAogbG9uZyBpbnQgZml4ZWRfc2RyYW0gKHZvaWQpCiB7CiAgICNpZm5kZWYgQ0ZHX1JBTUJPT1QKLQl2b2xhdGlsZSBpbW1hcF90ICppbW1hcCA9IChpbW1hcF90ICopQ0ZHX0lNTVI7Ci0Jdm9sYXRpbGUgY2Nzcl9kZHJfdCAqZGRyPSAmaW1tYXAtPmltX2RkcjsKKwl2b2xhdGlsZSBjY3NyX2Rkcl90ICpkZHI9ICh2b2lkICopKENGR19NUEM4NXh4X0REUl9BRERSKTsKIAogCWRkci0+Y3MwX2JuZHMgPSBDRkdfRERSX0NTMF9CTkRTOwogCWRkci0+Y3MwX2NvbmZpZyA9IENGR19ERFJfQ1MwX0NPTkZJRzsKQEAgLTMzMSwyMiArMzI0LDI1IEBACiB9CiAKIAotI2lmIGRlZmluZWQoQ09ORklHX09GX0ZMQVRfVFJFRSkgJiYgZGVmaW5lZChDT05GSUdfT0ZfQk9BUkRfU0VUVVApCisjaWYgZGVmaW5lZChDT05GSUdfT0ZfQk9BUkRfU0VUVVApCiB2b2lkCiBmdF9ib2FyZF9zZXR1cCh2b2lkICpibG9iLCBiZF90ICpiZCkKIHsKLQl1MzIgKnA7Ci0JaW50IGxlbjsKKwlpbnQgbm9kZSwgdG1wWzJdOworCWNvbnN0IGNoYXIgKnBhdGg7CiAKLSNpZmRlZiBDT05GSUdfUENJCi0JZnRfcGNpX3NldHVwKGJsb2IsIGJkKTsKLSNlbmRpZgogCWZ0X2NwdV9zZXR1cChibG9iLCBiZCk7CiAKLQlwID0gZnRfZ2V0X3Byb3AoYmxvYiwgIi9tZW1vcnkvcmVnIiwgJmxlbik7Ci0JaWYgKHAgIT0gTlVMTCkgewotCQkqcCsrID0gY3B1X3RvX2JlMzIoYmQtPmJpX21lbXN0YXJ0KTsKLQkJKnAgPSBjcHVfdG9fYmUzMihiZC0+YmlfbWVtc2l6ZSk7CisJbm9kZSA9IGZkdF9wYXRoX29mZnNldChibG9iLCAiL2FsaWFzZXMiKTsKKwl0bXBbMF0gPSAwOworCWlmIChub2RlID49IDApIHsKKyNpZmRlZiBDT05GSUdfUENJCisJCXBhdGggPSBmZHRfZ2V0cHJvcChibG9iLCBub2RlLCAicGNpMCIsIE5VTEwpOworCQlpZiAocGF0aCkgeworCQkJdG1wWzFdID0gaG9zZS5sYXN0X2J1c25vIC0gaG9zZS5maXJzdF9idXNubzsKKwkJCWRvX2ZpeHVwX2J5X3BhdGgoYmxvYiwgcGF0aCwgImJ1cy1yYW5nZSIsICZ0bXAsIDgsIDEpOworCQl9CisjZW5kaWYKIAl9CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2JvYXJkL21wYzg1NDBhZHMvdS1ib290LmxkcyBiL2JvYXJkL2ZyZWVzY2FsZS9tcGM4NTQwYWRzL3UtYm9vdC5sZHMKc2ltaWxhcml0eSBpbmRleCA5NyUKcmVuYW1lIGZyb20gYm9hcmQvbXBjODU0MGFkcy91LWJvb3QubGRzCnJlbmFtZSB0byBib2FyZC9mcmVlc2NhbGUvbXBjODU0MGFkcy91LWJvb3QubGRzCmluZGV4IGU3YTg4Y2YuLmE3YzY4YjMgMTAwNjQ0Ci0tLSBhL2JvYXJkL21wYzg1NDBhZHMvdS1ib290LmxkcworKysgYi9ib2FyZC9mcmVlc2NhbGUvbXBjODU0MGFkcy91LWJvb3QubGRzCkBAIC0zNSw3ICszNSw3IEBACiAgIC5ib290cGcgMHhGRkZGRjAwMCA6CiAgIHsKICAgICBjcHUvbXBjODV4eC9zdGFydC5vCSguYm9vdHBnKQotICAgIGJvYXJkL21wYzg1NDBhZHMvaW5pdC5vICguYm9vdHBnKQorICAgIGJvYXJkL2ZyZWVzY2FsZS9tcGM4NTQwYWRzL2luaXQubyAoLmJvb3RwZykKICAgfSA9IDB4ZmZmZgogCiAgIC8qIFJlYWQtb25seSBzZWN0aW9ucywgbWVyZ2VkIGludG8gdGV4dCBzZWdtZW50OiAqLwpAQCAtNjUsNyArNjUsNyBAQAogICAudGV4dCAgICAgIDoKICAgewogICAgIGNwdS9tcGM4NXh4L3N0YXJ0Lm8JKC50ZXh0KQotICAgIGJvYXJkL21wYzg1NDBhZHMvaW5pdC5vICgudGV4dCkKKyAgICBib2FyZC9mcmVlc2NhbGUvbXBjODU0MGFkcy9pbml0Lm8gKC50ZXh0KQogICAgIGNwdS9tcGM4NXh4L3RyYXBzLm8gKC50ZXh0KQogICAgIGNwdS9tcGM4NXh4L2ludGVycnVwdHMubyAoLnRleHQpCiAgICAgY3B1L21wYzg1eHgvY3B1X2luaXQubyAoLnRleHQpCmRpZmYgLS1naXQgYS9ib2FyZC9jZHMvbXBjODU0MWNkcy9NYWtlZmlsZSBiL2JvYXJkL2ZyZWVzY2FsZS9tcGM4NTQxY2RzL01ha2VmaWxlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBib2FyZC9jZHMvbXBjODU0MWNkcy9NYWtlZmlsZQpyZW5hbWUgdG8gYm9hcmQvZnJlZXNjYWxlL21wYzg1NDFjZHMvTWFrZWZpbGUKZGlmZiAtLWdpdCBhL2JvYXJkL2Nkcy9tcGM4NTQxY2RzL2NvbmZpZy5tayBiL2JvYXJkL2ZyZWVzY2FsZS9tcGM4NTQxY2RzL2NvbmZpZy5tawpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYm9hcmQvY2RzL21wYzg1NDFjZHMvY29uZmlnLm1rCnJlbmFtZSB0byBib2FyZC9mcmVlc2NhbGUvbXBjODU0MWNkcy9jb25maWcubWsKZGlmZiAtLWdpdCBhL2JvYXJkL2Nkcy9tcGM4NTQxY2RzL2luaXQuUyBiL2JvYXJkL2ZyZWVzY2FsZS9tcGM4NTQxY2RzL2luaXQuUwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYm9hcmQvY2RzL21wYzg1NDFjZHMvaW5pdC5TCnJlbmFtZSB0byBib2FyZC9mcmVlc2NhbGUvbXBjODU0MWNkcy9pbml0LlMKZGlmZiAtLWdpdCBhL2JvYXJkL2Nkcy9tcGM4NTQxY2RzL21wYzg1NDFjZHMuYyBiL2JvYXJkL2ZyZWVzY2FsZS9tcGM4NTQxY2RzL21wYzg1NDFjZHMuYwpzaW1pbGFyaXR5IGluZGV4IDk0JQpyZW5hbWUgZnJvbSBib2FyZC9jZHMvbXBjODU0MWNkcy9tcGM4NTQxY2RzLmMKcmVuYW1lIHRvIGJvYXJkL2ZyZWVzY2FsZS9tcGM4NTQxY2RzL21wYzg1NDFjZHMuYwppbmRleCA1NThiYTk5Li45YWI5OGQ0IDEwMDY0NAotLS0gYS9ib2FyZC9jZHMvbXBjODU0MWNkcy9tcGM4NTQxY2RzLmMKKysrIGIvYm9hcmQvZnJlZXNjYWxlL21wYzg1NDFjZHMvbXBjODU0MWNkcy5jCkBAIC0yOCw2ICsyOCw4IEBACiAjaW5jbHVkZSA8YXNtL2ltbWFwXzg1eHguaD4KICNpbmNsdWRlIDxpb3BvcnRzLmg+CiAjaW5jbHVkZSA8c3BkLmg+CisjaW5jbHVkZSA8bGliZmR0Lmg+CisjaW5jbHVkZSA8ZmR0X3N1cHBvcnQuaD4KIAogI2luY2x1ZGUgIi4uL2NvbW1vbi9jYWRtdXMuaCIKICNpbmNsdWRlICIuLi9jb21tb24vZWVwcm9tLmgiCkBAIC0yMDMsOCArMjA1LDcgQEAKIAogaW50IGNoZWNrYm9hcmQgKHZvaWQpCiB7Ci0Jdm9sYXRpbGUgaW1tYXBfdCAqaW1tYXAgPSAoaW1tYXBfdCAqKSBDRkdfQ0NTUkJBUjsKLQl2b2xhdGlsZSBjY3NyX2d1cl90ICpndXIgPSAmaW1tYXAtPmltX2d1cjsKKwl2b2xhdGlsZSBjY3NyX2d1cl90ICpndXIgPSAodm9pZCAqKShDRkdfTVBDODV4eF9HVVRTX0FERFIpOwogCiAJLyogUENJIHNsb3QgaW4gVVNFUiBiaXRzIENTUls2OjddIGJ5IGNvbnZlbnRpb24uICovCiAJdWludCBwY2lfc2xvdCA9IGdldF9wY2lfc2xvdCAoKTsKQEAgLTI1MCw3ICsyNTEsNiBAQAogaW5pdGRyYW0oaW50IGJvYXJkX3R5cGUpCiB7CiAJbG9uZyBkcmFtX3NpemUgPSAwOwotCXZvbGF0aWxlIGltbWFwX3QgKmltbWFwID0gKGltbWFwX3QgKilDRkdfSU1NUjsKIAogCXB1dHMoIkluaXRpYWxpemluZ1xuIik7CiAKQEAgLTI2Myw3ICsyNjMsNyBAQAogCQkgKiAgICBPdmVycmlkZSBETEwgPSAxLCBDb3Vyc2UgQWRqID0gMSwgVGFwIFNlbGVjdCA9IDAKIAkJICovCiAKLQkJdm9sYXRpbGUgY2Nzcl9ndXJfdCAqZ3VyPSAmaW1tYXAtPmltX2d1cjsKKwkJdm9sYXRpbGUgY2Nzcl9ndXJfdCAqZ3VyID0gKHZvaWQgKikoQ0ZHX01QQzg1eHhfR1VUU19BRERSKTsKIAogCQlndXItPmRkcmRsbGNyID0gMHg4MTAwMDAwMDsKIAkJYXNtKCJzeW5jO2lzeW5jO21zeW5jIik7CkBAIC0yOTMsOSArMjkzLDggQEAKIHZvaWQKIGxvY2FsX2J1c19pbml0KHZvaWQpCiB7Ci0Jdm9sYXRpbGUgaW1tYXBfdCAqaW1tYXAgPSAoaW1tYXBfdCAqKUNGR19JTU1SOwotCXZvbGF0aWxlIGNjc3JfZ3VyX3QgKmd1ciA9ICZpbW1hcC0+aW1fZ3VyOwotCXZvbGF0aWxlIGNjc3JfbGJjX3QgKmxiYyA9ICZpbW1hcC0+aW1fbGJjOworCXZvbGF0aWxlIGNjc3JfZ3VyX3QgKmd1ciA9ICh2b2lkICopKENGR19NUEM4NXh4X0dVVFNfQUREUik7CisJdm9sYXRpbGUgY2Nzcl9sYmNfdCAqbGJjID0gKHZvaWQgKikoQ0ZHX01QQzg1eHhfTEJDX0FERFIpOwogCiAJdWludCBjbGtkaXY7CiAJdWludCBsYmNfaHo7CkBAIC0zNDQsOCArMzQzLDcgQEAKICNpZiBkZWZpbmVkKENGR19PUjJfUFJFTElNKSAmJiBkZWZpbmVkKENGR19CUjJfUFJFTElNKQogCiAJdWludCBpZHg7Ci0Jdm9sYXRpbGUgaW1tYXBfdCAqaW1tYXAgPSAoaW1tYXBfdCAqKUNGR19JTU1SOwotCXZvbGF0aWxlIGNjc3JfbGJjX3QgKmxiYyA9ICZpbW1hcC0+aW1fbGJjOworCXZvbGF0aWxlIGNjc3JfbGJjX3QgKmxiYyA9ICh2b2lkICopKENGR19NUEM4NXh4X0xCQ19BRERSKTsKIAl1aW50ICpzZHJhbV9hZGRyID0gKHVpbnQgKilDRkdfTEJDX1NEUkFNX0JBU0U7CiAJdWludCBjcHVfYm9hcmRfcmV2OwogCXVpbnQgbHNkbXJfY29tbW9uOwpAQCAtNTA2LDMgKzUwNCwzMSBAQAogCXBjaV9tcGM4NXh4X2luaXQoaG9zZSk7CiAjZW5kaWYKIH0KKworI2lmIGRlZmluZWQoQ09ORklHX09GX0JPQVJEX1NFVFVQKQordm9pZAorZnRfcGNpX3NldHVwKHZvaWQgKmJsb2IsIGJkX3QgKmJkKQoreworCWludCBub2RlLCB0bXBbMl07CisJY29uc3QgY2hhciAqcGF0aDsKKworCW5vZGUgPSBmZHRfcGF0aF9vZmZzZXQoYmxvYiwgIi9hbGlhc2VzIik7CisJdG1wWzBdID0gMDsKKwlpZiAobm9kZSA+PSAwKSB7CisjaWZkZWYgQ09ORklHX1BDSTEKKwkJcGF0aCA9IGZkdF9nZXRwcm9wKGJsb2IsIG5vZGUsICJwY2kwIiwgTlVMTCk7CisJCWlmIChwYXRoKSB7CisJCQl0bXBbMV0gPSBob3NlWzBdLmxhc3RfYnVzbm8gLSBob3NlWzBdLmZpcnN0X2J1c25vOworCQkJZG9fZml4dXBfYnlfcGF0aChibG9iLCBwYXRoLCAiYnVzLXJhbmdlIiwgJnRtcCwgOCwgMSk7CisJCX0KKyNlbmRpZgorI2lmZGVmIENPTkZJR19NUEM4NVhYX1BDSTIKKwkJcGF0aCA9IGZkdF9nZXRwcm9wKGJsb2IsIG5vZGUsICJwY2kxIiwgTlVMTCk7CisJCWlmIChwYXRoKSB7CisJCQl0bXBbMV0gPSBob3NlWzFdLmxhc3RfYnVzbm8gLSBob3NlWzFdLmZpcnN0X2J1c25vOworCQkJZG9fZml4dXBfYnlfcGF0aChibG9iLCBwYXRoLCAiYnVzLXJhbmdlIiwgJnRtcCwgOCwgMSk7CisJCX0KKyNlbmRpZgorCX0KK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYm9hcmQvY2RzL21wYzg1NDFjZHMvdS1ib290LmxkcyBiL2JvYXJkL2ZyZWVzY2FsZS9tcGM4NTQxY2RzL3UtYm9vdC5sZHMKc2ltaWxhcml0eSBpbmRleCA5NyUKcmVuYW1lIGZyb20gYm9hcmQvY2RzL21wYzg1NDFjZHMvdS1ib290LmxkcwpyZW5hbWUgdG8gYm9hcmQvZnJlZXNjYWxlL21wYzg1NDFjZHMvdS1ib290LmxkcwppbmRleCA3YTVkYWVmLi40MzYwZDY3IDEwMDY0NAotLS0gYS9ib2FyZC9jZHMvbXBjODU0MWNkcy91LWJvb3QubGRzCisrKyBiL2JvYXJkL2ZyZWVzY2FsZS9tcGM4NTQxY2RzL3UtYm9vdC5sZHMKQEAgLTM0LDcgKzM0LDcgQEAKICAgLmJvb3RwZyAweEZGRkZGMDAwIDoKICAgewogICAgIGNwdS9tcGM4NXh4L3N0YXJ0Lm8JKC5ib290cGcpCi0gICAgYm9hcmQvY2RzL21wYzg1NDFjZHMvaW5pdC5vICguYm9vdHBnKQorICAgIGJvYXJkL2ZyZWVzY2FsZS9tcGM4NTQxY2RzL2luaXQubyAoLmJvb3RwZykKICAgfSA9IDB4ZmZmZgogCiAgIC8qIFJlYWQtb25seSBzZWN0aW9ucywgbWVyZ2VkIGludG8gdGV4dCBzZWdtZW50OiAqLwpAQCAtNjQsNyArNjQsNyBAQAogICAudGV4dCAgICAgIDoKICAgewogICAgIGNwdS9tcGM4NXh4L3N0YXJ0Lm8JKC50ZXh0KQotICAgIGJvYXJkL2Nkcy9tcGM4NTQxY2RzL2luaXQubyAoLnRleHQpCisgICAgYm9hcmQvZnJlZXNjYWxlL21wYzg1NDFjZHMvaW5pdC5vICgudGV4dCkKICAgICBjcHUvbXBjODV4eC90cmFwcy5vICgudGV4dCkKICAgICBjcHUvbXBjODV4eC9pbnRlcnJ1cHRzLm8gKC50ZXh0KQogICAgIGNwdS9tcGM4NXh4L2NwdV9pbml0Lm8gKC50ZXh0KQpkaWZmIC0tZ2l0IGEvYm9hcmQvZnJlZXNjYWxlL21wYzg1NDRkcy9pbml0LlMgYi9ib2FyZC9mcmVlc2NhbGUvbXBjODU0NGRzL2luaXQuUwppbmRleCA2OGNjYmE3Li4wODRkNGI4IDEwMDY0NAotLS0gYS9ib2FyZC9mcmVlc2NhbGUvbXBjODU0NGRzL2luaXQuUworKysgYi9ib2FyZC9mcmVlc2NhbGUvbXBjODU0NGRzL2luaXQuUwpAQCAtMjcsMTMgKzI3LDYgQEAKICNpbmNsdWRlIDxjb25maWcuaD4KICNpbmNsdWRlIDxtcGM4NXh4Lmg+CiAKLSNkZWZpbmUgTEFXQVJfVFJHVF9QQ0kxCQkweDAwMDAwMDAwCi0jZGVmaW5lIExBV0FSX1RSR1RfUENJRTEJMHgwMDIwMDAwMAotI2RlZmluZSBMQVdBUl9UUkdUX1BDSUUyCTB4MDAxMDAwMDAKLSNkZWZpbmUgTEFXQVJfVFJHVF9QQ0lFMwkweDAwMzAwMDAwCi0jZGVmaW5lIExBV0FSX1RSR1RfTEJDCQkweDAwNDAwMDAwCi0jZGVmaW5lIExBV0FSX1RSR1RfRERSCQkweDAwZjAwMDAwCi0KIC8qCiAgKiBUTEIwIGFuZCBUTEIxIEVudHJpZXMKICAqCkBAIC0yMTIsMzEgKzIwNSwzMSBAQAogCS5sb25nICg0Zi0zZikvOAogMzoKIAkubG9uZwkwCi0JLmxvbmcJKExBV0FSX1RSR1RfRERSIHwgKExBV0FSX1NJWkUgJiBMQVdBUl9TSVpFXzEyOE0pKSAmIH5MQVdBUl9FTgorCS5sb25nCShMQVdBUl9UUkdUX0lGX0REUiB8IChMQVdBUl9TSVpFICYgTEFXQVJfU0laRV8xMjhNKSkgJiB+TEFXQVJfRU4KIAogCS5sb25nCShDRkdfUENJMV9NRU1fUEhZUz4+MTIpICYgMHhmZmZmZgotCS5sb25nCUxBV0FSX0VOIHwgTEFXQVJfVFJHVF9QQ0kxIHwgKExBV0FSX1NJWkUgJiBMQVdBUl9TSVpFXzUxMk0pCisJLmxvbmcJTEFXQVJfRU4gfCBMQVdBUl9UUkdUX0lGX1BDSTEgfCAoTEFXQVJfU0laRSAmIExBV0FSX1NJWkVfNTEyTSkKIAogCS5sb25nCShDRkdfUENJMV9JT19QSFlTPj4xMikgJiAweGZmZmZmCi0JLmxvbmcJTEFXQVJfRU4gfCBMQVdBUl9UUkdUX1BDSTEgfCAoTEFXQVJfU0laRSAmIExBV0FSX1NJWkVfNjRLKQorCS5sb25nCUxBV0FSX0VOIHwgTEFXQVJfVFJHVF9JRl9QQ0kxIHwgKExBV0FSX1NJWkUgJiBMQVdBUl9TSVpFXzY0SykKIAogCS5sb25nCShDRkdfTEJDX0NBQ0hFX0JBU0U+PjEyKSAmIDB4ZmZmZmYKLQkubG9uZwlMQVdBUl9FTiB8IExBV0FSX1RSR1RfTEJDIHwgKExBV0FSX1NJWkUgJiBMQVdBUl9TSVpFXzI1Nk0pCisJLmxvbmcJTEFXQVJfRU4gfCBMQVdBUl9UUkdUX0lGX0xCQyB8IChMQVdBUl9TSVpFICYgTEFXQVJfU0laRV8yNTZNKQogCiAJLmxvbmcJKENGR19QQ0lFMV9NRU1fUEhZUz4+MTIpICYgMHhmZmZmZgotCS5sb25nCUxBV0FSX0VOIHwgTEFXQVJfVFJHVF9QQ0lFMSB8IChMQVdBUl9TSVpFICYgTEFXQVJfU0laRV8yNTZNKQorCS5sb25nCUxBV0FSX0VOIHwgTEFXQVJfVFJHVF9JRl9QQ0lFMSB8IChMQVdBUl9TSVpFICYgTEFXQVJfU0laRV8yNTZNKQogCiAJLmxvbmcJKENGR19QQ0lFMV9JT19QSFlTPj4xMikgJiAweGZmZmZmCi0JLmxvbmcJTEFXQVJfRU4gfCBMQVdBUl9UUkdUX1BDSUUxIHwgKExBV0FSX1NJWkUgJiBMQVdBUl9TSVpFXzY0SykKKwkubG9uZwlMQVdBUl9FTiB8IExBV0FSX1RSR1RfSUZfUENJRTEgfCAoTEFXQVJfU0laRSAmIExBV0FSX1NJWkVfNjRLKQogCiAJLmxvbmcJKENGR19QQ0lFMl9NRU1fUEhZUz4+MTIpICYgMHhmZmZmZgotCS5sb25nCUxBV0FSX0VOIHwgTEFXQVJfVFJHVF9QQ0lFMiB8IChMQVdBUl9TSVpFICYgTEFXQVJfU0laRV81MTJNKQorCS5sb25nCUxBV0FSX0VOIHwgTEFXQVJfVFJHVF9JRl9QQ0lFMiB8IChMQVdBUl9TSVpFICYgTEFXQVJfU0laRV81MTJNKQogCiAJLmxvbmcJKENGR19QQ0lFMl9JT19QSFlTPj4xMikgJiAweGZmZmZmCi0JLmxvbmcJTEFXQVJfRU4gfCBMQVdBUl9UUkdUX1BDSUUyIHwgKExBV0FSX1NJWkUgJiBMQVdBUl9TSVpFXzY0SykKKwkubG9uZwlMQVdBUl9FTiB8IExBV0FSX1RSR1RfSUZfUENJRTIgfCAoTEFXQVJfU0laRSAmIExBV0FSX1NJWkVfNjRLKQogCiAJLyogY29udGFpbnMgYm90aCBQQ0lFMyBNRU0gJiBJTyBzcGFjZSAqLwogCS5sb25nCShDRkdfUENJRTNfTUVNX1BIWVM+PjEyKSAmIDB4ZmZmZmYKLQkubG9uZwlMQVdBUl9FTiB8IExBV0FSX1RSR1RfUENJRTMgfCAoTEFXQVJfU0laRSAmIExBV0FSX1NJWkVfNE0pCisJLmxvbmcJTEFXQVJfRU4gfCBMQVdBUl9UUkdUX0lGX1BDSUUzIHwgKExBV0FSX1NJWkUgJiBMQVdBUl9TSVpFXzRNKQogNDoKIAllbnRyeV9lbmQKZGlmZiAtLWdpdCBhL2JvYXJkL2ZyZWVzY2FsZS9tcGM4NTQ0ZHMvbXBjODU0NGRzLmMgYi9ib2FyZC9mcmVlc2NhbGUvbXBjODU0NGRzL21wYzg1NDRkcy5jCmluZGV4IGI2YzllOTMuLjY2Y2I1MzYgMTAwNjQ0Ci0tLSBhL2JvYXJkL2ZyZWVzY2FsZS9tcGM4NTQ0ZHMvbXBjODU0NGRzLmMKKysrIGIvYm9hcmQvZnJlZXNjYWxlL21wYzg1NDRkcy9tcGM4NTQ0ZHMuYwpAQCAtMjksMTQgKzI5LDExIEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8c3BkLmg+CiAjaW5jbHVkZSA8bWlpcGh5Lmg+CisjaW5jbHVkZSA8bGliZmR0Lmg+CisjaW5jbHVkZSA8ZmR0X3N1cHBvcnQuaD4KIAogI2luY2x1ZGUgIi4uL2NvbW1vbi9waXhpcy5oIgogCi0jaWYgZGVmaW5lZChDT05GSUdfT0ZfRkxBVF9UUkVFKQotI2luY2x1ZGUgPGZ0X2J1aWxkLmg+Ci1leHRlcm4gdm9pZCBmdF9jcHVfc2V0dXAodm9pZCAqYmxvYiwgYmRfdCAqYmQpOwotI2VuZGlmCi0KICNpZiBkZWZpbmVkKENPTkZJR19ERFJfRUNDKSAmJiAhZGVmaW5lZChDT05GSUdfRUNDX0lOSVRfVklBX0REUkNPTlRST0xMRVIpCiBleHRlcm4gdm9pZCBkZHJfZW5hYmxlX2VjYyh1bnNpZ25lZCBpbnQgZHJhbV9zaXplKTsKICNlbmRpZgpAQCAtNTIsMTAgKzQ5LDkgQEAKIAogaW50IGNoZWNrYm9hcmQgKHZvaWQpCiB7Ci0Jdm9sYXRpbGUgaW1tYXBfdCAqaW1tYXAgPSAoaW1tYXBfdCAqKSBDRkdfQ0NTUkJBUjsKLQl2b2xhdGlsZSBjY3NyX2d1cl90ICpndXIgPSAmaW1tYXAtPmltX2d1cjsKLQl2b2xhdGlsZSBjY3NyX2xiY190ICpsYmMgPSAmaW1tYXAtPmltX2xiYzsKLQl2b2xhdGlsZSBjY3NyX2xvY2FsX2VjbV90ICplY20gPSAmaW1tYXAtPmltX2xvY2FsX2VjbTsKKwl2b2xhdGlsZSBjY3NyX2d1cl90ICpndXIgPSAodm9pZCAqKShDRkdfTVBDODV4eF9HVVRTX0FERFIpOworCXZvbGF0aWxlIGNjc3JfbGJjX3QgKmxiYyA9ICh2b2lkICopKENGR19NUEM4NXh4X0xCQ19BRERSKTsKKwl2b2xhdGlsZSBjY3NyX2xvY2FsX2VjbV90ICplY20gPSAodm9pZCAqKShDRkdfTVBDODV4eF9FQ01fQUREUik7CiAKIAlpZiAoKHVpbnQpJmd1ci0+cG9ycGxsc3IgIT0gMHhlMDBlMDAwMCkgewogCQlwcmludGYoImltbWFwIHNpemUgZXJyb3IgJXhcbiIsJmd1ci0+cG9ycGxsc3IpOwpAQCAtMTQ5LDggKzE0NSw3IEBACiB2b2lkCiBwY2lfaW5pdF9ib2FyZCh2b2lkKQogewotCXZvbGF0aWxlIGltbWFwX3QgKmltbWFwID0gKGltbWFwX3QgKilDRkdfSU1NUjsKLQl2b2xhdGlsZSBjY3NyX2d1cl90ICpndXIgPSAmaW1tYXAtPmltX2d1cjsKKwl2b2xhdGlsZSBjY3NyX2d1cl90ICpndXIgPSAodm9pZCAqKShDRkdfTVBDODV4eF9HVVRTX0FERFIpOwogCXVpbnQgZGV2ZGlzciA9IGd1ci0+ZGV2ZGlzcjsKIAl1aW50IGlvX3NlbCA9IChndXItPnBvcmRldnNyICYgTVBDODV4eF9QT1JERVZTUl9JT19TRUwpID4+IDE5OwogCXVpbnQgaG9zdF9hZ2VudCA9IChndXItPnBvcmJtc3IgJiBNUEM4NXh4X1BPUkJNU1JfSEEpID4+IDE2OwpAQCAtNTA4LDUxICs1MDMsNDcgQEAKIAlyZXR1cm4gdmFsOwogfQogCi0jaWYgZGVmaW5lZChDT05GSUdfT0ZfRkxBVF9UUkVFKSAmJiBkZWZpbmVkKENPTkZJR19PRl9CT0FSRF9TRVRVUCkKKyNpZiBkZWZpbmVkKENPTkZJR19PRl9CT0FSRF9TRVRVUCkKKwogdm9pZAogZnRfYm9hcmRfc2V0dXAodm9pZCAqYmxvYiwgYmRfdCAqYmQpCiB7Ci0JdTMyICpwOwotCWludCBsZW47CisJaW50IG5vZGUsIHRtcFsyXTsKKwljb25zdCBjaGFyICpwYXRoOwogCiAJZnRfY3B1X3NldHVwKGJsb2IsIGJkKTsKIAotCXAgPSBmdF9nZXRfcHJvcChibG9iLCAiL21lbW9yeS9yZWciLCAmbGVuKTsKLQlpZiAocCAhPSBOVUxMKSB7Ci0JCSpwKysgPSBjcHVfdG9fYmUzMihiZC0+YmlfbWVtc3RhcnQpOwotCQkqcCA9IGNwdV90b19iZTMyKGJkLT5iaV9tZW1zaXplKTsKLQl9CisJbm9kZSA9IGZkdF9wYXRoX29mZnNldChibG9iLCAiL2FsaWFzZXMiKTsKKwl0bXBbMF0gPSAwOworCWlmIChub2RlID49IDApIHsKICNpZmRlZiBDT05GSUdfUENJMQotCXAgPSAodTMyICopZnRfZ2V0X3Byb3AoYmxvYiwgIi8iIE9GX1NPQyAiL3BjaUA4MDAwL2J1cy1yYW5nZSIsICZsZW4pOwotCWlmIChwICE9IE5VTEwpIHsKLQkJcFswXSA9IDA7Ci0JCXBbMV0gPSBwY2kxX2hvc2UubGFzdF9idXNubyAtIHBjaTFfaG9zZS5maXJzdF9idXNubzsKLQkJZGVidWcoIlBDSUA4MDAwIGZpcnN0X2J1c25vPSVkIGxhc3RfYnVzbm89JWRcbiIscFswXSxwWzFdKTsKLQl9Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfUENJRTEKLQlwID0gKHUzMiAqKWZ0X2dldF9wcm9wKGJsb2IsICIvIiBPRl9TT0MgIi9wY2llQGEwMDAvYnVzLXJhbmdlIiwgJmxlbik7Ci0JaWYgKHAgIT0gTlVMTCkgewotCQlwWzBdID0gMDsKLQkJcFsxXSA9IHBjaWUxX2hvc2UubGFzdF9idXNubyAtIHBjaWUxX2hvc2UuZmlyc3RfYnVzbm87Ci0JCWRlYnVnKCJQQ0lAYTAwMCBmaXJzdF9idXNubz0lZCBsYXN0X2J1c25vPSVkXG4iLHBbMF0scFsxXSk7Ci0JfQorCQlwYXRoID0gZmR0X2dldHByb3AoYmxvYiwgbm9kZSwgInBjaTAiLCBOVUxMKTsKKwkJaWYgKHBhdGgpIHsKKwkJCXRtcFsxXSA9IHBjaTFfaG9zZS5sYXN0X2J1c25vIC0gcGNpMV9ob3NlLmZpcnN0X2J1c25vOworCQkJZG9fZml4dXBfYnlfcGF0aChibG9iLCBwYXRoLCAiYnVzLXJhbmdlIiwgJnRtcCwgOCwgMSk7CisJCX0KICNlbmRpZgogI2lmZGVmIENPTkZJR19QQ0lFMgotCXAgPSAodTMyICopZnRfZ2V0X3Byb3AoYmxvYiwgIi8iIE9GX1NPQyAiL3BjaWVAOTAwMC9idXMtcmFuZ2UiLCAmbGVuKTsKLQlpZiAocCAhPSBOVUxMKSB7Ci0JCXBbMF0gPSAwOwotCQlwWzFdID0gcGNpZTJfaG9zZS5sYXN0X2J1c25vIC0gcGNpZTJfaG9zZS5maXJzdF9idXNubzsKLQkJZGVidWcoIlBDSUA5MDAwIGZpcnN0X2J1c25vPSVkIGxhc3RfYnVzbm89JWRcbiIscFswXSxwWzFdKTsKLQl9CisJCXBhdGggPSBmZHRfZ2V0cHJvcChibG9iLCBub2RlLCAicGNpMSIsIE5VTEwpOworCQlpZiAocGF0aCkgeworCQkJdG1wWzFdID0gcGNpZTJfaG9zZS5sYXN0X2J1c25vIC0gcGNpZTJfaG9zZS5maXJzdF9idXNubzsKKwkJCWRvX2ZpeHVwX2J5X3BhdGgoYmxvYiwgcGF0aCwgImJ1cy1yYW5nZSIsICZ0bXAsIDgsIDEpOworCQl9CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfUENJRTEKKwkJcGF0aCA9IGZkdF9nZXRwcm9wKGJsb2IsIG5vZGUsICJwY2kyIiwgTlVMTCk7CisJCWlmIChwYXRoKSB7CisJCQl0bXBbMV0gPSBwY2llMV9ob3NlLmxhc3RfYnVzbm8gLSBwY2llMV9ob3NlLmZpcnN0X2J1c25vOworCQkJZG9fZml4dXBfYnlfcGF0aChibG9iLCBwYXRoLCAiYnVzLXJhbmdlIiwgJnRtcCwgOCwgMSk7CisJCX0KICNlbmRpZgogI2lmZGVmIENPTkZJR19QQ0lFMwotCXAgPSAodTMyICopZnRfZ2V0X3Byb3AoYmxvYiwgIi8iIE9GX1NPQyAiL3BjaWVAYjAwMC9idXMtcmFuZ2UiLCAmbGVuKTsKLQlpZiAocCAhPSBOVUxMKSB7Ci0JCXBbMF0gPSAwOwotCQlwWzFdID0gcGNpZTNfaG9zZS5sYXN0X2J1c25vIC0gcGNpZTNfaG9zZS5maXJzdF9idXNubzs7Ci0JCWRlYnVnKCJQQ0lAYjAwMCBmaXJzdF9idXNubz0lZCBsYXN0X2J1c25vPSVkXG4iLHBbMF0scFsxXSk7Ci0JfQorCQlwYXRoID0gZmR0X2dldHByb3AoYmxvYiwgbm9kZSwgInBjaTMiLCBOVUxMKTsKKwkJaWYgKHBhdGgpIHsKKwkJCXRtcFsxXSA9IHBjaWUzX2hvc2UubGFzdF9idXNubyAtIHBjaWUzX2hvc2UuZmlyc3RfYnVzbm87CisJCQlkb19maXh1cF9ieV9wYXRoKGJsb2IsIHBhdGgsICJidXMtcmFuZ2UiLCAmdG1wLCA4LCAxKTsKKwkJfQogI2VuZGlmCisJfQogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9ib2FyZC9jZHMvbXBjODU0OGNkcy9NYWtlZmlsZSBiL2JvYXJkL2ZyZWVzY2FsZS9tcGM4NTQ4Y2RzL01ha2VmaWxlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBib2FyZC9jZHMvbXBjODU0OGNkcy9NYWtlZmlsZQpyZW5hbWUgdG8gYm9hcmQvZnJlZXNjYWxlL21wYzg1NDhjZHMvTWFrZWZpbGUKZGlmZiAtLWdpdCBhL2JvYXJkL2Nkcy9tcGM4NTQ4Y2RzL2NvbmZpZy5tayBiL2JvYXJkL2ZyZWVzY2FsZS9tcGM4NTQ4Y2RzL2NvbmZpZy5tawpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYm9hcmQvY2RzL21wYzg1NDhjZHMvY29uZmlnLm1rCnJlbmFtZSB0byBib2FyZC9mcmVlc2NhbGUvbXBjODU0OGNkcy9jb25maWcubWsKZGlmZiAtLWdpdCBhL2JvYXJkL2Nkcy9tcGM4NTQ4Y2RzL2luaXQuUyBiL2JvYXJkL2ZyZWVzY2FsZS9tcGM4NTQ4Y2RzL2luaXQuUwpzaW1pbGFyaXR5IGluZGV4IDg5JQpyZW5hbWUgZnJvbSBib2FyZC9jZHMvbXBjODU0OGNkcy9pbml0LlMKcmVuYW1lIHRvIGJvYXJkL2ZyZWVzY2FsZS9tcGM4NTQ4Y2RzL2luaXQuUwppbmRleCA3Mjk0MGIwLi5hODNhMDk1IDEwMDY0NAotLS0gYS9ib2FyZC9jZHMvbXBjODU0OGNkcy9pbml0LlMKKysrIGIvYm9hcmQvZnJlZXNjYWxlL21wYzg1NDhjZHMvaW5pdC5TCkBAIC0yOCwxMyArMjgsNiBAQAogI2luY2x1ZGUgPGNvbmZpZy5oPgogI2luY2x1ZGUgPG1wYzg1eHguaD4KIAotI2RlZmluZSBMQVdBUl9UUkdUX1BDSTEJCTB4MDAwMDAwMDAKLSNkZWZpbmUgTEFXQVJfVFJHVF9QQ0kyCQkweDAwMTAwMDAwCi0jZGVmaW5lIExBV0FSX1RSR1RfUENJRQkJMHgwMDIwMDAwMAotI2RlZmluZSBMQVdBUl9UUkdUX1JJTwkJMHgwMGMwMDAwMAotI2RlZmluZSBMQVdBUl9UUkdUX0xCQwkJMHgwMDQwMDAwMAotI2RlZmluZSBMQVdBUl9UUkdUX0REUgkJMHgwMGYwMDAwMAotCiAvKgogICogVExCMCBhbmQgVExCMSBFbnRyaWVzCiAgKgpAQCAtMjMyLDM5ICsyMjUsMzkgQEAKIAkubG9uZyAoNGYtM2YpLzgKIDM6CiAJLmxvbmcgIDAKLQkubG9uZyAgKExBV0FSX1RSR1RfRERSIHwgKExBV0FSX1NJWkUgJiBMQVdBUl9TSVpFXzEyOE0pKSAmIH5MQVdBUl9FTgorCS5sb25nICAoTEFXQVJfVFJHVF9JRl9ERFIgfCAoTEFXQVJfU0laRSAmIExBV0FSX1NJWkVfMTI4TSkpICYgfkxBV0FSX0VOCiAKICNpZmRlZiBDRkdfUENJMV9NRU1fUEhZUwogCS5sb25nCShDRkdfUENJMV9NRU1fUEhZUz4+MTIpICYgMHhmZmZmZgotCS5sb25nCUxBV0FSX0VOIHwgTEFXQVJfVFJHVF9QQ0kxIHwgKExBV0FSX1NJWkUgJiBMQVdBUl9TSVpFXzUxMk0pCisJLmxvbmcJTEFXQVJfRU4gfCBMQVdBUl9UUkdUX0lGX1BDSTEgfCAoTEFXQVJfU0laRSAmIExBV0FSX1NJWkVfNTEyTSkKIAogCS5sb25nCShDRkdfUENJMV9JT19QSFlTPj4xMikgJiAweGZmZmZmCi0JLmxvbmcJTEFXQVJfRU4gfCBMQVdBUl9UUkdUX1BDSTEgfCAoTEFXQVJfU0laRSAmIExBV0FSX1NJWkVfMU0pCisJLmxvbmcJTEFXQVJfRU4gfCBMQVdBUl9UUkdUX0lGX1BDSTEgfCAoTEFXQVJfU0laRSAmIExBV0FSX1NJWkVfMU0pCiAjZW5kaWYKIAogI2lmZGVmIENGR19QQ0kyX01FTV9QSFlTCiAJLmxvbmcJKENGR19QQ0kyX01FTV9QSFlTPj4xMikgJiAweGZmZmZmCi0JLmxvbmcJTEFXQVJfRU4gfCBMQVdBUl9UUkdUX1BDSTIgfCAoTEFXQVJfU0laRSAmIExBV0FSX1NJWkVfNTEyTSkKKwkubG9uZwlMQVdBUl9FTiB8IExBV0FSX1RSR1RfSUZfUENJMiB8IChMQVdBUl9TSVpFICYgTEFXQVJfU0laRV81MTJNKQogCiAJLmxvbmcJKENGR19QQ0kyX0lPX1BIWVM+PjEyKSAmIDB4ZmZmZmYKLQkubG9uZwlMQVdBUl9FTiB8IExBV0FSX1RSR1RfUENJMiB8IChMQVdBUl9TSVpFICYgTEFXQVJfU0laRV8xTSkKKwkubG9uZwlMQVdBUl9FTiB8IExBV0FSX1RSR1RfSUZfUENJMiB8IChMQVdBUl9TSVpFICYgTEFXQVJfU0laRV8xTSkKICNlbmRpZgogCiAjaWZkZWYgQ0ZHX1BDSUUxX01FTV9QSFlTCiAJLmxvbmcJKENGR19QQ0lFMV9NRU1fUEhZUz4+MTIpICYgMHhmZmZmZgotCS5sb25nCUxBV0FSX0VOIHwgTEFXQVJfVFJHVF9QQ0lFIHwgKExBV0FSX1NJWkUgJiBMQVdBUl9TSVpFXzUxMk0pCisJLmxvbmcJTEFXQVJfRU4gfCBMQVdBUl9UUkdUX0lGX1BDSUUxIHwgKExBV0FSX1NJWkUgJiBMQVdBUl9TSVpFXzUxMk0pCiAKIAkubG9uZwkoQ0ZHX1BDSUUxX0lPX1BIWVM+PjEyKSAmIDB4ZmZmZmYKLQkubG9uZwlMQVdBUl9FTiB8IExBV0FSX1RSR1RfUENJRSB8IChMQVdBUl9TSVpFICYgTEFXQVJfU0laRV8xTSkKKwkubG9uZwlMQVdBUl9FTiB8IExBV0FSX1RSR1RfSUZfUENJRTEgfCAoTEFXQVJfU0laRSAmIExBV0FSX1NJWkVfMU0pCiAjZW5kaWYKIAogCS8qIExCQyB3aW5kb3cgLSBtYXBzIDI1Nk0gMHhmMDAwMDAwMCAtPiAweGZmZmZmZmZmICovCiAJLmxvbmcJKENGR19MQkNfQ0FDSEVfQkFTRT4+MTIpICYgMHhmZmZmZgotCS5sb25nCUxBV0FSX0VOIHwgTEFXQVJfVFJHVF9MQkMgfCAoTEFXQVJfU0laRSAmIExBV0FSX1NJWkVfMjU2TSkKKwkubG9uZwlMQVdBUl9FTiB8IExBV0FSX1RSR1RfSUZfTEJDIHwgKExBV0FSX1NJWkUgJiBMQVdBUl9TSVpFXzI1Nk0pCiAKICNpZmRlZiBDRkdfUklPX01FTV9QSFlTCiAJLmxvbmcJKENGR19SSU9fTUVNX1BIWVM+PjEyKSAmIDB4ZmZmZmYKLQkubG9uZwlMQVdBUl9FTiB8IExBV0FSX1RSR1RfUklPIHwgKExBV0FSX1NJWkUgJiBMQVdBUl9TSVpFXzUxMk0pCisJLmxvbmcJTEFXQVJfRU4gfCBMQVdBUl9UUkdUX0lGX1JJTyB8IChMQVdBUl9TSVpFICYgTEFXQVJfU0laRV81MTJNKQogI2VuZGlmCiA0OgogCWVudHJ5X2VuZApkaWZmIC0tZ2l0IGEvYm9hcmQvY2RzL21wYzg1NDhjZHMvbXBjODU0OGNkcy5jIGIvYm9hcmQvZnJlZXNjYWxlL21wYzg1NDhjZHMvbXBjODU0OGNkcy5jCnNpbWlsYXJpdHkgaW5kZXggOTElCnJlbmFtZSBmcm9tIGJvYXJkL2Nkcy9tcGM4NTQ4Y2RzL21wYzg1NDhjZHMuYwpyZW5hbWUgdG8gYm9hcmQvZnJlZXNjYWxlL21wYzg1NDhjZHMvbXBjODU0OGNkcy5jCmluZGV4IDM2ZDdlMWUuLjQ3ZTJkZDggMTAwNjQ0Ci0tLSBhL2JvYXJkL2Nkcy9tcGM4NTQ4Y2RzL21wYzg1NDhjZHMuYworKysgYi9ib2FyZC9mcmVlc2NhbGUvbXBjODU0OGNkcy9tcGM4NTQ4Y2RzLmMKQEAgLTI5LDE0ICsyOSwxMyBAQAogI2luY2x1ZGUgPGFzbS9pbW1hcF9mc2xfcGNpLmg+CiAjaW5jbHVkZSA8c3BkLmg+CiAjaW5jbHVkZSA8bWlpcGh5Lmg+CisjaW5jbHVkZSA8bGliZmR0Lmg+CisjaW5jbHVkZSA8ZmR0X3N1cHBvcnQuaD4KIAogI2luY2x1ZGUgIi4uL2NvbW1vbi9jYWRtdXMuaCIKICNpbmNsdWRlICIuLi9jb21tb24vZWVwcm9tLmgiCiAjaW5jbHVkZSAiLi4vY29tbW9uL3ZpYS5oIgogCi0jaWYgZGVmaW5lZChDT05GSUdfT0ZfRkxBVF9UUkVFKQotI2luY2x1ZGUgPGZ0X2J1aWxkLmg+Ci0jZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJR19ERFJfRUNDKSAmJiAhZGVmaW5lZChDT05GSUdfRUNDX0lOSVRfVklBX0REUkNPTlRST0xMRVIpCiBleHRlcm4gdm9pZCBkZHJfZW5hYmxlX2VjYyh1bnNpZ25lZCBpbnQgZHJhbV9zaXplKTsKICNlbmRpZgpAQCAtNTUsOSArNTQsOCBAQAogCiBpbnQgY2hlY2tib2FyZCAodm9pZCkKIHsKLQl2b2xhdGlsZSBpbW1hcF90ICppbW1hcCA9IChpbW1hcF90ICopIENGR19DQ1NSQkFSOwotCXZvbGF0aWxlIGNjc3JfZ3VyX3QgKmd1ciA9ICZpbW1hcC0+aW1fZ3VyOwotCXZvbGF0aWxlIGNjc3JfbG9jYWxfZWNtX3QgKmVjbSA9ICZpbW1hcC0+aW1fbG9jYWxfZWNtOworCXZvbGF0aWxlIGNjc3JfZ3VyX3QgKmd1ciA9ICh2b2lkICopKENGR19NUEM4NXh4X0dVVFNfQUREUik7CisJdm9sYXRpbGUgY2Nzcl9sb2NhbF9lY21fdCAqZWNtID0gKHZvaWQgKikoQ0ZHX01QQzg1eHhfRUNNX0FERFIpOwogCiAJLyogUENJIHNsb3QgaW4gVVNFUiBiaXRzIENTUls2OjddIGJ5IGNvbnZlbnRpb24uICovCiAJdWludCBwY2lfc2xvdCA9IGdldF9wY2lfc2xvdCAoKTsKQEAgLTk2LDcgKzk0LDYgQEAKIGluaXRkcmFtKGludCBib2FyZF90eXBlKQogewogCWxvbmcgZHJhbV9zaXplID0gMDsKLQl2b2xhdGlsZSBpbW1hcF90ICppbW1hcCA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CiAKIAlwdXRzKCJJbml0aWFsaXppbmdcbiIpOwogCkBAIC0xMDksNyArMTA2LDcgQEAKIAkJICogICAgT3ZlcnJpZGUgRExMID0gMSwgQ291cnNlIEFkaiA9IDEsIFRhcCBTZWxlY3QgPSAwCiAJCSAqLwogCi0JCXZvbGF0aWxlIGNjc3JfZ3VyX3QgKmd1cj0gJmltbWFwLT5pbV9ndXI7CisJCXZvbGF0aWxlIGNjc3JfZ3VyX3QgKmd1ciA9ICh2b2lkICopKENGR19NUEM4NXh4X0dVVFNfQUREUik7CiAKIAkJZ3VyLT5kZHJkbGxjciA9IDB4ODEwMDAwMDA7CiAJCWFzbSgic3luYztpc3luYzttc3luYyIpOwpAQCAtMTM5LDkgKzEzNiw4IEBACiB2b2lkCiBsb2NhbF9idXNfaW5pdCh2b2lkKQogewotCXZvbGF0aWxlIGltbWFwX3QgKmltbWFwID0gKGltbWFwX3QgKilDRkdfSU1NUjsKLQl2b2xhdGlsZSBjY3NyX2d1cl90ICpndXIgPSAmaW1tYXAtPmltX2d1cjsKLQl2b2xhdGlsZSBjY3NyX2xiY190ICpsYmMgPSAmaW1tYXAtPmltX2xiYzsKKwl2b2xhdGlsZSBjY3NyX2d1cl90ICpndXIgPSAodm9pZCAqKShDRkdfTVBDODV4eF9HVVRTX0FERFIpOworCXZvbGF0aWxlIGNjc3JfbGJjX3QgKmxiYyA9ICh2b2lkICopKENGR19NUEM4NXh4X0xCQ19BRERSKTsKIAogCXVpbnQgY2xrZGl2OwogCXVpbnQgbGJjX2h6OwpAQCAtMTc3LDggKzE3Myw3IEBACiAjaWYgZGVmaW5lZChDRkdfT1IyX1BSRUxJTSkgJiYgZGVmaW5lZChDRkdfQlIyX1BSRUxJTSkKIAogCXVpbnQgaWR4OwotCXZvbGF0aWxlIGltbWFwX3QgKmltbWFwID0gKGltbWFwX3QgKilDRkdfSU1NUjsKLQl2b2xhdGlsZSBjY3NyX2xiY190ICpsYmMgPSAmaW1tYXAtPmltX2xiYzsKKwl2b2xhdGlsZSBjY3NyX2xiY190ICpsYmMgPSAodm9pZCAqKShDRkdfTVBDODV4eF9MQkNfQUREUik7CiAJdWludCAqc2RyYW1fYWRkciA9ICh1aW50ICopQ0ZHX0xCQ19TRFJBTV9CQVNFOwogCXVpbnQgY3B1X2JvYXJkX3JldjsKIAl1aW50IGxzZG1yX2NvbW1vbjsKQEAgLTMzMCw4ICszMjUsNyBAQAogdm9pZAogcGNpX2luaXRfYm9hcmQodm9pZCkKIHsKLQl2b2xhdGlsZSBpbW1hcF90ICppbW1hcCA9IChpbW1hcF90ICopQ0ZHX0lNTVI7Ci0Jdm9sYXRpbGUgY2Nzcl9ndXJfdCAqZ3VyID0gJmltbWFwLT5pbV9ndXI7CisJdm9sYXRpbGUgY2Nzcl9ndXJfdCAqZ3VyID0gKHZvaWQgKikoQ0ZHX01QQzg1eHhfR1VUU19BRERSKTsKIAl1aW50IGlvX3NlbCA9IChndXItPnBvcmRldnNyICYgTVBDODV4eF9QT1JERVZTUl9JT19TRUwpID4+IDE5OwogCXVpbnQgaG9zdF9hZ2VudCA9IChndXItPnBvcmJtc3IgJiBNUEM4NXh4X1BPUkJNU1JfSEEpID4+IDE2OwogCkBAIC01MjQsMzAgKzUxOCwzMCBAQAogfQogCiAKLSNpZiBkZWZpbmVkKENPTkZJR19PRl9GTEFUX1RSRUUpICYmIGRlZmluZWQoQ09ORklHX09GX0JPQVJEX1NFVFVQKQorI2lmIGRlZmluZWQoQ09ORklHX09GX0JPQVJEX1NFVFVQKQogdm9pZAogZnRfcGNpX3NldHVwKHZvaWQgKmJsb2IsIGJkX3QgKmJkKQogewotCXUzMiAqcDsKLQlpbnQgbGVuOworCWludCBub2RlLCB0bXBbMl07CisJY29uc3QgY2hhciAqcGF0aDsKIAotCisJbm9kZSA9IGZkdF9wYXRoX29mZnNldChibG9iLCAiL2FsaWFzZXMiKTsKKwl0bXBbMF0gPSAwOworCWlmIChub2RlID49IDApIHsKICNpZmRlZiBDT05GSUdfUENJMQotCXAgPSAodTMyICopZnRfZ2V0X3Byb3AoYmxvYiwgIi8iIE9GX1NPQyAiL3BjaUA4MDAwL2J1cy1yYW5nZSIsICZsZW4pOwotCWlmIChwICE9IE5VTEwpIHsKLQkJcFswXSA9IDA7Ci0JCXBbMV0gPSBwY2kxX2hvc2UubGFzdF9idXNubyAtIHBjaTFfaG9zZS5maXJzdF9idXNubzsKLQkJZGVidWcoIlBDSUA4MDAwIGZpcnN0X2J1c25vPSVkIGxhc3RfYnVzbm89JWRcbiIscFswXSxwWzFdKTsKLQl9CisJCXBhdGggPSBmZHRfZ2V0cHJvcChibG9iLCBub2RlLCAicGNpMCIsIE5VTEwpOworCQlpZiAocGF0aCkgeworCQkJdG1wWzFdID0gcGNpMV9ob3NlLmxhc3RfYnVzbm8gLSBwY2kxX2hvc2UuZmlyc3RfYnVzbm87CisJCQlkb19maXh1cF9ieV9wYXRoKGJsb2IsIHBhdGgsICJidXMtcmFuZ2UiLCAmdG1wLCA4LCAxKTsKKwkJfQogI2VuZGlmCi0KICNpZmRlZiBDT05GSUdfUENJRTEKLQlwID0gKHUzMiAqKWZ0X2dldF9wcm9wKGJsb2IsICIvIiBPRl9TT0MgIi9wY2llQGEwMDAvYnVzLXJhbmdlIiwgJmxlbik7Ci0JaWYgKHAgIT0gTlVMTCkgewotCQlwWzBdID0gMDsKLQkJcFsxXSA9IHBjaWUxX2hvc2UubGFzdF9idXNubyAtIHBjaWUxX2hvc2UuZmlyc3RfYnVzbm87Ci0JCWRlYnVnKCJQQ0lAYTAwMCBmaXJzdF9idXNubz0lZCBsYXN0X2J1c25vPSVkXG4iLHBbMF0scFsxXSk7Ci0JfQorCQlwYXRoID0gZmR0X2dldHByb3AoYmxvYiwgbm9kZSwgInBjaTEiLCBOVUxMKTsKKwkJaWYgKHBhdGgpIHsKKwkJCXRtcFsxXSA9IHBjaWUxX2hvc2UubGFzdF9idXNubyAtIHBjaWUxX2hvc2UuZmlyc3RfYnVzbm87CisJCQlkb19maXh1cF9ieV9wYXRoKGJsb2IsIHBhdGgsICJidXMtcmFuZ2UiLCAmdG1wLCA4LCAxKTsKKwkJfQogI2VuZGlmCisJfQogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9ib2FyZC9jZHMvbXBjODU0OGNkcy91LWJvb3QubGRzIGIvYm9hcmQvZnJlZXNjYWxlL21wYzg1NDhjZHMvdS1ib290LmxkcwpzaW1pbGFyaXR5IGluZGV4IDk3JQpyZW5hbWUgZnJvbSBib2FyZC9jZHMvbXBjODU0OGNkcy91LWJvb3QubGRzCnJlbmFtZSB0byBib2FyZC9mcmVlc2NhbGUvbXBjODU0OGNkcy91LWJvb3QubGRzCmluZGV4IGIxOWM0ODEuLmVlNzcyZDMgMTAwNjQ0Ci0tLSBhL2JvYXJkL2Nkcy9tcGM4NTQ4Y2RzL3UtYm9vdC5sZHMKKysrIGIvYm9hcmQvZnJlZXNjYWxlL21wYzg1NDhjZHMvdS1ib290LmxkcwpAQCAtMzQsNyArMzQsNyBAQAogICAuYm9vdHBnIDB4RkZGRkYwMDAgOgogICB7CiAgICAgY3B1L21wYzg1eHgvc3RhcnQubwkoLmJvb3RwZykKLSAgICBib2FyZC9jZHMvbXBjODU0OGNkcy9pbml0Lm8gKC5ib290cGcpCisgICAgYm9hcmQvZnJlZXNjYWxlL21wYzg1NDhjZHMvaW5pdC5vICguYm9vdHBnKQogICB9ID0gMHhmZmZmCiAKICAgLyogUmVhZC1vbmx5IHNlY3Rpb25zLCBtZXJnZWQgaW50byB0ZXh0IHNlZ21lbnQ6ICovCkBAIC02NCw3ICs2NCw3IEBACiAgIC50ZXh0ICAgICAgOgogICB7CiAgICAgY3B1L21wYzg1eHgvc3RhcnQubwkoLnRleHQpCi0gICAgYm9hcmQvY2RzL21wYzg1NDhjZHMvaW5pdC5vICgudGV4dCkKKyAgICBib2FyZC9mcmVlc2NhbGUvbXBjODU0OGNkcy9pbml0Lm8gKC50ZXh0KQogICAgIGNwdS9tcGM4NXh4L3RyYXBzLm8gKC50ZXh0KQogICAgIGNwdS9tcGM4NXh4L2ludGVycnVwdHMubyAoLnRleHQpCiAgICAgY3B1L21wYzg1eHgvY3B1X2luaXQubyAoLnRleHQpCmRpZmYgLS1naXQgYS9ib2FyZC9jZHMvbXBjODU1NWNkcy9NYWtlZmlsZSBiL2JvYXJkL2ZyZWVzY2FsZS9tcGM4NTU1Y2RzL01ha2VmaWxlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBib2FyZC9jZHMvbXBjODU1NWNkcy9NYWtlZmlsZQpyZW5hbWUgdG8gYm9hcmQvZnJlZXNjYWxlL21wYzg1NTVjZHMvTWFrZWZpbGUKZGlmZiAtLWdpdCBhL2JvYXJkL2Nkcy9tcGM4NTU1Y2RzL2NvbmZpZy5tayBiL2JvYXJkL2ZyZWVzY2FsZS9tcGM4NTU1Y2RzL2NvbmZpZy5tawpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYm9hcmQvY2RzL21wYzg1NTVjZHMvY29uZmlnLm1rCnJlbmFtZSB0byBib2FyZC9mcmVlc2NhbGUvbXBjODU1NWNkcy9jb25maWcubWsKZGlmZiAtLWdpdCBhL2JvYXJkL2Nkcy9tcGM4NTU1Y2RzL2luaXQuUyBiL2JvYXJkL2ZyZWVzY2FsZS9tcGM4NTU1Y2RzL2luaXQuUwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYm9hcmQvY2RzL21wYzg1NTVjZHMvaW5pdC5TCnJlbmFtZSB0byBib2FyZC9mcmVlc2NhbGUvbXBjODU1NWNkcy9pbml0LlMKZGlmZiAtLWdpdCBhL2JvYXJkL2Nkcy9tcGM4NTU1Y2RzL21wYzg1NTVjZHMuYyBiL2JvYXJkL2ZyZWVzY2FsZS9tcGM4NTU1Y2RzL21wYzg1NTVjZHMuYwpzaW1pbGFyaXR5IGluZGV4IDk0JQpyZW5hbWUgZnJvbSBib2FyZC9jZHMvbXBjODU1NWNkcy9tcGM4NTU1Y2RzLmMKcmVuYW1lIHRvIGJvYXJkL2ZyZWVzY2FsZS9tcGM4NTU1Y2RzL21wYzg1NTVjZHMuYwppbmRleCA4ZjE2NDIxLi43NGMyMjBkIDEwMDY0NAotLS0gYS9ib2FyZC9jZHMvbXBjODU1NWNkcy9tcGM4NTU1Y2RzLmMKKysrIGIvYm9hcmQvZnJlZXNjYWxlL21wYzg1NTVjZHMvbXBjODU1NWNkcy5jCkBAIC0yNiw2ICsyNiw4IEBACiAjaW5jbHVkZSA8YXNtL2ltbWFwXzg1eHguaD4KICNpbmNsdWRlIDxpb3BvcnRzLmg+CiAjaW5jbHVkZSA8c3BkLmg+CisjaW5jbHVkZSA8bGliZmR0Lmg+CisjaW5jbHVkZSA8ZmR0X3N1cHBvcnQuaD4KIAogI2luY2x1ZGUgIi4uL2NvbW1vbi9jYWRtdXMuaCIKICNpbmNsdWRlICIuLi9jb21tb24vZWVwcm9tLmgiCkBAIC0yMDEsOCArMjAzLDcgQEAKIAogaW50IGNoZWNrYm9hcmQgKHZvaWQpCiB7Ci0Jdm9sYXRpbGUgaW1tYXBfdCAqaW1tYXAgPSAoaW1tYXBfdCAqKSBDRkdfQ0NTUkJBUjsKLQl2b2xhdGlsZSBjY3NyX2d1cl90ICpndXIgPSAmaW1tYXAtPmltX2d1cjsKKwl2b2xhdGlsZSBjY3NyX2d1cl90ICpndXIgPSAodm9pZCAqKShDRkdfTVBDODV4eF9HVVRTX0FERFIpOwogCiAJLyogUENJIHNsb3QgaW4gVVNFUiBiaXRzIENTUls2OjddIGJ5IGNvbnZlbnRpb24uICovCiAJdWludCBwY2lfc2xvdCA9IGdldF9wY2lfc2xvdCAoKTsKQEAgLTI0OCw3ICsyNDksNiBAQAogaW5pdGRyYW0oaW50IGJvYXJkX3R5cGUpCiB7CiAJbG9uZyBkcmFtX3NpemUgPSAwOwotCXZvbGF0aWxlIGltbWFwX3QgKmltbWFwID0gKGltbWFwX3QgKilDRkdfSU1NUjsKIAogCXB1dHMoIkluaXRpYWxpemluZ1xuIik7CiAKQEAgLTI2MSw3ICsyNjEsNyBAQAogCQkgKiAgICBPdmVycmlkZSBETEwgPSAxLCBDb3Vyc2UgQWRqID0gMSwgVGFwIFNlbGVjdCA9IDAKIAkJICovCiAKLQkJdm9sYXRpbGUgY2Nzcl9ndXJfdCAqZ3VyPSAmaW1tYXAtPmltX2d1cjsKKwkJdm9sYXRpbGUgY2Nzcl9ndXJfdCAqZ3VyID0gKHZvaWQgKikoQ0ZHX01QQzg1eHhfR1VUU19BRERSKTsKIAogCQlndXItPmRkcmRsbGNyID0gMHg4MTAwMDAwMDsKIAkJYXNtKCJzeW5jO2lzeW5jO21zeW5jIik7CkBAIC0yOTEsOSArMjkxLDggQEAKIHZvaWQKIGxvY2FsX2J1c19pbml0KHZvaWQpCiB7Ci0Jdm9sYXRpbGUgaW1tYXBfdCAqaW1tYXAgPSAoaW1tYXBfdCAqKUNGR19JTU1SOwotCXZvbGF0aWxlIGNjc3JfZ3VyX3QgKmd1ciA9ICZpbW1hcC0+aW1fZ3VyOwotCXZvbGF0aWxlIGNjc3JfbGJjX3QgKmxiYyA9ICZpbW1hcC0+aW1fbGJjOworCXZvbGF0aWxlIGNjc3JfZ3VyX3QgKmd1ciA9ICh2b2lkICopKENGR19NUEM4NXh4X0dVVFNfQUREUik7CisJdm9sYXRpbGUgY2Nzcl9sYmNfdCAqbGJjID0gKHZvaWQgKikoQ0ZHX01QQzg1eHhfTEJDX0FERFIpOwogCiAJdWludCBjbGtkaXY7CiAJdWludCBsYmNfaHo7CkBAIC0zNDIsOCArMzQxLDcgQEAKICNpZiBkZWZpbmVkKENGR19PUjJfUFJFTElNKSAmJiBkZWZpbmVkKENGR19CUjJfUFJFTElNKQogCiAJdWludCBpZHg7Ci0Jdm9sYXRpbGUgaW1tYXBfdCAqaW1tYXAgPSAoaW1tYXBfdCAqKUNGR19JTU1SOwotCXZvbGF0aWxlIGNjc3JfbGJjX3QgKmxiYyA9ICZpbW1hcC0+aW1fbGJjOworCXZvbGF0aWxlIGNjc3JfbGJjX3QgKmxiYyA9ICh2b2lkICopKENGR19NUEM4NXh4X0xCQ19BRERSKTsKIAl1aW50ICpzZHJhbV9hZGRyID0gKHVpbnQgKilDRkdfTEJDX1NEUkFNX0JBU0U7CiAJdWludCBjcHVfYm9hcmRfcmV2OwogCXVpbnQgbHNkbXJfY29tbW9uOwpAQCAtNTA2LDMgKzUwNCwzMSBAQAogCXBjaV9tcGM4NXh4X2luaXQoaG9zZSk7CiAjZW5kaWYKIH0KKworI2lmIGRlZmluZWQoQ09ORklHX09GX0JPQVJEX1NFVFVQKQordm9pZAorZnRfcGNpX3NldHVwKHZvaWQgKmJsb2IsIGJkX3QgKmJkKQoreworCWludCBub2RlLCB0bXBbMl07CisJY29uc3QgY2hhciAqcGF0aDsKKworCW5vZGUgPSBmZHRfcGF0aF9vZmZzZXQoYmxvYiwgIi9hbGlhc2VzIik7CisJdG1wWzBdID0gMDsKKwlpZiAobm9kZSA+PSAwKSB7CisjaWZkZWYgQ09ORklHX1BDSTEKKwkJcGF0aCA9IGZkdF9nZXRwcm9wKGJsb2IsIG5vZGUsICJwY2kwIiwgTlVMTCk7CisJCWlmIChwYXRoKSB7CisJCQl0bXBbMV0gPSBob3NlWzBdLmxhc3RfYnVzbm8gLSBob3NlWzBdLmZpcnN0X2J1c25vOworCQkJZG9fZml4dXBfYnlfcGF0aChibG9iLCBwYXRoLCAiYnVzLXJhbmdlIiwgJnRtcCwgOCwgMSk7CisJCX0KKyNlbmRpZgorI2lmZGVmIENPTkZJR19NUEM4NVhYX1BDSTIKKwkJcGF0aCA9IGZkdF9nZXRwcm9wKGJsb2IsIG5vZGUsICJwY2kxIiwgTlVMTCk7CisJCWlmIChwYXRoKSB7CisJCQl0bXBbMV0gPSBob3NlWzFdLmxhc3RfYnVzbm8gLSBob3NlWzFdLmZpcnN0X2J1c25vOworCQkJZG9fZml4dXBfYnlfcGF0aChibG9iLCBwYXRoLCAiYnVzLXJhbmdlIiwgJnRtcCwgOCwgMSk7CisJCX0KKyNlbmRpZgorCX0KK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYm9hcmQvY2RzL21wYzg1NDFjZHMvdS1ib290LmxkcyBiL2JvYXJkL2ZyZWVzY2FsZS9tcGM4NTU1Y2RzL3UtYm9vdC5sZHMKc2ltaWxhcml0eSBpbmRleCA5NyUKY29weSBmcm9tIGJvYXJkL2Nkcy9tcGM4NTQxY2RzL3UtYm9vdC5sZHMKY29weSB0byBib2FyZC9mcmVlc2NhbGUvbXBjODU1NWNkcy91LWJvb3QubGRzCmluZGV4IDdhNWRhZWYuLmRmMjFlYTggMTAwNjQ0Ci0tLSBhL2JvYXJkL2Nkcy9tcGM4NTQxY2RzL3UtYm9vdC5sZHMKKysrIGIvYm9hcmQvZnJlZXNjYWxlL21wYzg1NTVjZHMvdS1ib290LmxkcwpAQCAtMzQsNyArMzQsNyBAQAogICAuYm9vdHBnIDB4RkZGRkYwMDAgOgogICB7CiAgICAgY3B1L21wYzg1eHgvc3RhcnQubwkoLmJvb3RwZykKLSAgICBib2FyZC9jZHMvbXBjODU0MWNkcy9pbml0Lm8gKC5ib290cGcpCisgICAgYm9hcmQvZnJlZXNjYWxlL21wYzg1NTVjZHMvaW5pdC5vICguYm9vdHBnKQogICB9ID0gMHhmZmZmCiAKICAgLyogUmVhZC1vbmx5IHNlY3Rpb25zLCBtZXJnZWQgaW50byB0ZXh0IHNlZ21lbnQ6ICovCkBAIC02NCw3ICs2NCw3IEBACiAgIC50ZXh0ICAgICAgOgogICB7CiAgICAgY3B1L21wYzg1eHgvc3RhcnQubwkoLnRleHQpCi0gICAgYm9hcmQvY2RzL21wYzg1NDFjZHMvaW5pdC5vICgudGV4dCkKKyAgICBib2FyZC9mcmVlc2NhbGUvbXBjODU1NWNkcy9pbml0Lm8gKC50ZXh0KQogICAgIGNwdS9tcGM4NXh4L3RyYXBzLm8gKC50ZXh0KQogICAgIGNwdS9tcGM4NXh4L2ludGVycnVwdHMubyAoLnRleHQpCiAgICAgY3B1L21wYzg1eHgvY3B1X2luaXQubyAoLnRleHQpCmRpZmYgLS1naXQgYS9ib2FyZC9tcGM4NTYwYWRzL01ha2VmaWxlIGIvYm9hcmQvZnJlZXNjYWxlL21wYzg1NjBhZHMvTWFrZWZpbGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGJvYXJkL21wYzg1NjBhZHMvTWFrZWZpbGUKcmVuYW1lIHRvIGJvYXJkL2ZyZWVzY2FsZS9tcGM4NTYwYWRzL01ha2VmaWxlCmRpZmYgLS1naXQgYS9ib2FyZC9tcGM4NTYwYWRzL2NvbmZpZy5tayBiL2JvYXJkL2ZyZWVzY2FsZS9tcGM4NTYwYWRzL2NvbmZpZy5tawpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYm9hcmQvbXBjODU2MGFkcy9jb25maWcubWsKcmVuYW1lIHRvIGJvYXJkL2ZyZWVzY2FsZS9tcGM4NTYwYWRzL2NvbmZpZy5tawpkaWZmIC0tZ2l0IGEvYm9hcmQvbXBjODU2MGFkcy9pbml0LlMgYi9ib2FyZC9mcmVlc2NhbGUvbXBjODU2MGFkcy9pbml0LlMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGJvYXJkL21wYzg1NjBhZHMvaW5pdC5TCnJlbmFtZSB0byBib2FyZC9mcmVlc2NhbGUvbXBjODU2MGFkcy9pbml0LlMKZGlmZiAtLWdpdCBhL2JvYXJkL21wYzg1NjBhZHMvbXBjODU2MGFkcy5jIGIvYm9hcmQvZnJlZXNjYWxlL21wYzg1NjBhZHMvbXBjODU2MGFkcy5jCnNpbWlsYXJpdHkgaW5kZXggOTMlCnJlbmFtZSBmcm9tIGJvYXJkL21wYzg1NjBhZHMvbXBjODU2MGFkcy5jCnJlbmFtZSB0byBib2FyZC9mcmVlc2NhbGUvbXBjODU2MGFkcy9tcGM4NTYwYWRzLmMKaW5kZXggZWVmNTI0Yi4uYmI3ZjExYiAxMDA2NDQKLS0tIGEvYm9hcmQvbXBjODU2MGFkcy9tcGM4NTYwYWRzLmMKKysrIGIvYm9hcmQvZnJlZXNjYWxlL21wYzg1NjBhZHMvbXBjODU2MGFkcy5jCkBAIC0zMiwxMCArMzIsOCBAQAogI2luY2x1ZGUgPGlvcG9ydHMuaD4KICNpbmNsdWRlIDxzcGQuaD4KICNpbmNsdWRlIDxtaWlwaHkuaD4KLQotI2lmIGRlZmluZWQoQ09ORklHX09GX0ZMQVRfVFJFRSkKLSNpbmNsdWRlIDxmdF9idWlsZC5oPgotI2VuZGlmCisjaW5jbHVkZSA8bGliZmR0Lmg+CisjaW5jbHVkZSA8ZmR0X3N1cHBvcnQuaD4KIAogI2lmIGRlZmluZWQoQ09ORklHX0REUl9FQ0MpICYmICFkZWZpbmVkKENPTkZJR19FQ0NfSU5JVF9WSUFfRERSQ09OVFJPTExFUikKIGV4dGVybiB2b2lkIGRkcl9lbmFibGVfZWNjKHVuc2lnbmVkIGludCBkcmFtX3NpemUpOwpAQCAtMjc4LDEzICsyNzYsMTIgQEAKIHsKIAlsb25nIGRyYW1fc2l6ZSA9IDA7CiAJZXh0ZXJuIGxvbmcgc3BkX3NkcmFtICh2b2lkKTsKLQl2b2xhdGlsZSBpbW1hcF90ICppbW1hcCA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CiAKIAlwdXRzKCJJbml0aWFsaXppbmdcbiIpOwogCiAjaWYgZGVmaW5lZChDT05GSUdfRERSX0RMTCkKIAl7Ci0JICAgIHZvbGF0aWxlIGNjc3JfZ3VyX3QgKmd1cj0gJmltbWFwLT5pbV9ndXI7CisJICAgIHZvbGF0aWxlIGNjc3JfZ3VyX3QgKmd1ciA9ICh2b2lkICopKENGR19NUEM4NXh4X0dVVFNfQUREUik7CiAJICAgIHVpbnQgdGVtcF9kZHJkbGwgPSAwOwogCiAJICAgIC8qCkBAIC0zMjYsOSArMzIzLDggQEAKIHZvaWQKIGxvY2FsX2J1c19pbml0KHZvaWQpCiB7Ci0Jdm9sYXRpbGUgaW1tYXBfdCAqaW1tYXAgPSAoaW1tYXBfdCAqKUNGR19JTU1SOwotCXZvbGF0aWxlIGNjc3JfZ3VyX3QgKmd1ciA9ICZpbW1hcC0+aW1fZ3VyOwotCXZvbGF0aWxlIGNjc3JfbGJjX3QgKmxiYyA9ICZpbW1hcC0+aW1fbGJjOworCXZvbGF0aWxlIGNjc3JfZ3VyX3QgKmd1ciA9ICh2b2lkICopKENGR19NUEM4NXh4X0dVVFNfQUREUik7CisJdm9sYXRpbGUgY2Nzcl9sYmNfdCAqbGJjID0gKHZvaWQgKikoQ0ZHX01QQzg1eHhfTEJDX0FERFIpOwogCiAJdWludCBjbGtkaXY7CiAJdWludCBsYmNfaHo7CkBAIC0zODcsOCArMzgzLDcgQEAKIHZvaWQKIHNkcmFtX2luaXQodm9pZCkKIHsKLQl2b2xhdGlsZSBpbW1hcF90ICppbW1hcCA9IChpbW1hcF90ICopQ0ZHX0lNTVI7Ci0Jdm9sYXRpbGUgY2Nzcl9sYmNfdCAqbGJjPSAmaW1tYXAtPmltX2xiYzsKKwl2b2xhdGlsZSBjY3NyX2xiY190ICpsYmMgPSAodm9pZCAqKShDRkdfTVBDODV4eF9MQkNfQUREUik7CiAJdWludCAqc2RyYW1fYWRkciA9ICh1aW50ICopQ0ZHX0xCQ19TRFJBTV9CQVNFOwogCiAJcHV0cygiICAgIFNEUkFNOiAiKTsKQEAgLTQ4Myw4ICs0NzgsNyBAQAogbG9uZyBpbnQgZml4ZWRfc2RyYW0gKHZvaWQpCiB7CiAgICNpZm5kZWYgQ0ZHX1JBTUJPT1QKLQl2b2xhdGlsZSBpbW1hcF90ICppbW1hcCA9IChpbW1hcF90ICopQ0ZHX0lNTVI7Ci0Jdm9sYXRpbGUgY2Nzcl9kZHJfdCAqZGRyPSAmaW1tYXAtPmltX2RkcjsKKwl2b2xhdGlsZSBjY3NyX2Rkcl90ICpkZHI9ICh2b2lkICopKENGR19NUEM4NXh4X0REUl9BRERSKTsKIAogCWRkci0+Y3MwX2JuZHMgPSBDRkdfRERSX0NTMF9CTkRTOwogCWRkci0+Y3MwX2NvbmZpZyA9IENGR19ERFJfQ1MwX0NPTkZJRzsKQEAgLTU0OCwzNSArNTQyLDI1IEBACiB9CiAKIAotI2lmIGRlZmluZWQoQ09ORklHX09GX0ZMQVRfVFJFRSkgJiYgZGVmaW5lZChDT05GSUdfT0ZfQk9BUkRfU0VUVVApCi12b2lkCi1mdF9zb2Nfc2V0dXAodm9pZCAqYmxvYiwgYmRfdCAqYmQpCi17Ci0JdTMyICpwOwotCWludCBsZW47Ci0KLQlwID0gZnRfZ2V0X3Byb3AoYmxvYiwgIi8iIE9GX1NPQyAiL2NwbUBlMDAwMDAwMC9icmctZnJlcXVlbmN5IiwgJmxlbik7Ci0KLQlpZiAocCAhPSBOVUxMKQotCQkqcCA9IGNwdV90b19iZTMyKGJkLT5iaV9icmdmcmVxKTsKLQotCXAgPSBmdF9nZXRfcHJvcChibG9iLAotCQkJIi8iIE9GX1NPQyAiL2NwbUBlMDAwMDAwMC9zY2NAOTFhMDAvY3VycmVudC1zcGVlZCIsCi0JCQkmbGVuKTsKLQlpZiAocCAhPSBOVUxMKQotCQkqcCA9IGNwdV90b19iZTMyKGJkLT5iaV9iYXVkcmF0ZSk7Ci0KLQlwID0gZnRfZ2V0X3Byb3AoYmxvYiwKLQkJCSIvIiBPRl9TT0MgIi9jcG1AZTAwMDAwMDAvc2NjQDkxYTIwL2N1cnJlbnQtc3BlZWQiLAotCQkJJmxlbik7Ci0JaWYgKHAgIT0gTlVMTCkKLQkJKnAgPSBjcHVfdG9fYmUzMihiZC0+YmlfYmF1ZHJhdGUpOwotfQotCisjaWYgZGVmaW5lZChDT05GSUdfT0ZfQk9BUkRfU0VUVVApCiB2b2lkCiBmdF9ib2FyZF9zZXR1cCh2b2lkICpibG9iLCBiZF90ICpiZCkKIHsKKwlpbnQgbm9kZSwgdG1wWzJdOworCWNvbnN0IGNoYXIgKnBhdGg7CisKIAlmdF9jcHVfc2V0dXAoYmxvYiwgYmQpOwotCWZ0X3NvY19zZXR1cChibG9iLCBiZCk7CisKKwlub2RlID0gZmR0X3BhdGhfb2Zmc2V0KGJsb2IsICIvYWxpYXNlcyIpOworCXRtcFswXSA9IDA7CisJaWYgKG5vZGUgPj0gMCkgeworI2lmZGVmIENPTkZJR19QQ0kKKwkJcGF0aCA9IGZkdF9nZXRwcm9wKGJsb2IsIG5vZGUsICJwY2kwIiwgTlVMTCk7CisJCWlmIChwYXRoKSB7CisJCQl0bXBbMV0gPSBob3NlLmxhc3RfYnVzbm8gLSBob3NlLmZpcnN0X2J1c25vOworCQkJZG9fZml4dXBfYnlfcGF0aChibG9iLCBwYXRoLCAiYnVzLXJhbmdlIiwgJnRtcCwgOCwgMSk7CisJCX0KKyNlbmRpZgorCX0KIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYm9hcmQvbXBjODU2MGFkcy91LWJvb3QubGRzIGIvYm9hcmQvZnJlZXNjYWxlL21wYzg1NjBhZHMvdS1ib290LmxkcwpzaW1pbGFyaXR5IGluZGV4IDk3JQpyZW5hbWUgZnJvbSBib2FyZC9tcGM4NTYwYWRzL3UtYm9vdC5sZHMKcmVuYW1lIHRvIGJvYXJkL2ZyZWVzY2FsZS9tcGM4NTYwYWRzL3UtYm9vdC5sZHMKaW5kZXggNzI2YTE1My4uYzJjYmE2MSAxMDA2NDQKLS0tIGEvYm9hcmQvbXBjODU2MGFkcy91LWJvb3QubGRzCisrKyBiL2JvYXJkL2ZyZWVzY2FsZS9tcGM4NTYwYWRzL3UtYm9vdC5sZHMKQEAgLTM1LDcgKzM1LDcgQEAKICAgLmJvb3RwZyAweEZGRkZGMDAwIDoKICAgewogICAgIGNwdS9tcGM4NXh4L3N0YXJ0Lm8JKC5ib290cGcpCi0gICAgYm9hcmQvbXBjODU2MGFkcy9pbml0Lm8gKC5ib290cGcpCisgICAgYm9hcmQvZnJlZXNjYWxlL21wYzg1NjBhZHMvaW5pdC5vICguYm9vdHBnKQogICB9ID0gMHhmZmZmCiAKICAgLyogUmVhZC1vbmx5IHNlY3Rpb25zLCBtZXJnZWQgaW50byB0ZXh0IHNlZ21lbnQ6ICovCkBAIC02NSw3ICs2NSw3IEBACiAgIC50ZXh0ICAgICAgOgogICB7CiAgICAgY3B1L21wYzg1eHgvc3RhcnQubwkoLnRleHQpCi0gICAgYm9hcmQvbXBjODU2MGFkcy9pbml0Lm8gKC50ZXh0KQorICAgIGJvYXJkL2ZyZWVzY2FsZS9tcGM4NTYwYWRzL2luaXQubyAoLnRleHQpCiAgICAgY3B1L21wYzg1eHgvY29tbXByb2MubyAoLnRleHQpCiAgICAgY3B1L21wYzg1eHgvdHJhcHMubyAoLnRleHQpCiAgICAgY3B1L21wYzg1eHgvaW50ZXJydXB0cy5vICgudGV4dCkKZGlmZiAtLWdpdCBhL2JvYXJkL21wYzg1NjhtZHMvTWFrZWZpbGUgYi9ib2FyZC9mcmVlc2NhbGUvbXBjODU2OG1kcy9NYWtlZmlsZQpzaW1pbGFyaXR5IGluZGV4IDk2JQpyZW5hbWUgZnJvbSBib2FyZC9tcGM4NTY4bWRzL01ha2VmaWxlCnJlbmFtZSB0byBib2FyZC9mcmVlc2NhbGUvbXBjODU2OG1kcy9NYWtlZmlsZQppbmRleCBhNzk5YWE0Li42NDNmYmMwIDEwMDY0NAotLS0gYS9ib2FyZC9tcGM4NTY4bWRzL01ha2VmaWxlCisrKyBiL2JvYXJkL2ZyZWVzY2FsZS9tcGM4NTY4bWRzL01ha2VmaWxlCkBAIC0yOSw5ICsyOSw3IEBACiAKIExJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKIAotQ09CSlMJOj0gJChCT0FSRCkubyBcCi0JYmNzci5vIFwKLQlmdF9ib2FyZC5vCitDT0JKUwk6PSAkKEJPQVJEKS5vIGJjc3IubwogCiBTT0JKUwk6PSBpbml0Lm8KIApkaWZmIC0tZ2l0IGEvYm9hcmQvbXBjODU2OG1kcy9iY3NyLmMgYi9ib2FyZC9mcmVlc2NhbGUvbXBjODU2OG1kcy9iY3NyLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGJvYXJkL21wYzg1NjhtZHMvYmNzci5jCnJlbmFtZSB0byBib2FyZC9mcmVlc2NhbGUvbXBjODU2OG1kcy9iY3NyLmMKZGlmZiAtLWdpdCBhL2JvYXJkL21wYzg1NjhtZHMvYmNzci5oIGIvYm9hcmQvZnJlZXNjYWxlL21wYzg1NjhtZHMvYmNzci5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBib2FyZC9tcGM4NTY4bWRzL2Jjc3IuaApyZW5hbWUgdG8gYm9hcmQvZnJlZXNjYWxlL21wYzg1NjhtZHMvYmNzci5oCmRpZmYgLS1naXQgYS9ib2FyZC9tcGM4NTY4bWRzL2NvbmZpZy5tayBiL2JvYXJkL2ZyZWVzY2FsZS9tcGM4NTY4bWRzL2NvbmZpZy5tawpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYm9hcmQvbXBjODU2OG1kcy9jb25maWcubWsKcmVuYW1lIHRvIGJvYXJkL2ZyZWVzY2FsZS9tcGM4NTY4bWRzL2NvbmZpZy5tawpkaWZmIC0tZ2l0IGEvYm9hcmQvbXBjODU2OG1kcy9pbml0LlMgYi9ib2FyZC9mcmVlc2NhbGUvbXBjODU2OG1kcy9pbml0LlMKc2ltaWxhcml0eSBpbmRleCA5NiUKcmVuYW1lIGZyb20gYm9hcmQvbXBjODU2OG1kcy9pbml0LlMKcmVuYW1lIHRvIGJvYXJkL2ZyZWVzY2FsZS9tcGM4NTY4bWRzL2luaXQuUwppbmRleCA5NzJhN2Q0Li5lMzYwMzZkIDEwMDY0NAotLS0gYS9ib2FyZC9tcGM4NTY4bWRzL2luaXQuUworKysgYi9ib2FyZC9mcmVlc2NhbGUvbXBjODU2OG1kcy9pbml0LlMKQEAgLTI4LDcgKzI4LDYgQEAKICNpbmNsdWRlIDxjb25maWcuaD4KICNpbmNsdWRlIDxtcGM4NXh4Lmg+CiAKLQogLyoKICAqIFRMQjAgYW5kIFRMQjEgRW50cmllcwogICoKQEAgLTIxNiwxNSArMjE1LDE0IEBACiAjZGVmaW5lIExBV0JBUjEgKChDRkdfUENJMV9NRU1fQkFTRT4+MTIpICYgMHhmZmZmZikKICNkZWZpbmUgTEFXQVIxCShMQVdBUl9FTiB8IExBV0FSX1RSR1RfSUZfUENJMSB8IChMQVdBUl9TSVpFICYgTEFXQVJfU0laRV81MTJNKSkKIAotI2RlZmluZSBMQVdCQVIyICgoQ0ZHX1BFWF9NRU1fQkFTRT4+MTIpICYgMHhmZmZmZikKLSNkZWZpbmUgTEFXQVIyCShMQVdBUl9FTiB8IExBV0FSX1RSR1RfSUZfUEVYIHwgKExBV0FSX1NJWkUgJiBMQVdBUl9TSVpFXzUxMk0pKQorI2RlZmluZSBMQVdCQVIyICgoQ0ZHX1BDSUUxX01FTV9CQVNFPj4xMikgJiAweGZmZmZmKQorI2RlZmluZSBMQVdBUjIJKExBV0FSX0VOIHwgTEFXQVJfVFJHVF9JRl9QQ0lFMSB8IChMQVdBUl9TSVpFICYgTEFXQVJfU0laRV81MTJNKSkKIAogI2RlZmluZSBMQVdCQVIzICgoQ0ZHX1BDSTFfSU9fUEhZUz4+MTIpICYgMHhmZmZmZikKICNkZWZpbmUgTEFXQVIzCShMQVdBUl9FTiB8IExBV0FSX1RSR1RfSUZfUENJMSB8IChMQVdBUl9TSVpFICYgTEFXQVJfU0laRV84TSkpCiAKLSNkZWZpbmUgTEFXQkFSNCAoKENGR19QRVhfSU9fUEhZUz4+MTIpICYgMHhmZmZmZikKLSNkZWZpbmUgTEFXQVI0ICAoTEFXQVJfRU4gfCBMQVdBUl9UUkdUX0lGX1BFWCB8IChMQVdBUl9TSVpFICYgTEFXQVJfU0laRV84TSkpCi0KKyNkZWZpbmUgTEFXQkFSNCAoKENGR19QQ0lFMV9JT19QSFlTPj4xMikgJiAweGZmZmZmKQorI2RlZmluZSBMQVdBUjQgIChMQVdBUl9FTiB8IExBV0FSX1RSR1RfSUZfUENJRTEgfCAoTEFXQVJfU0laRSAmIExBV0FSX1NJWkVfOE0pKQogCiAjZGVmaW5lIExBV0JBUjUgKChDRkdfU1JJT19NRU1fQkFTRT4+MTIpICYgMHhmZmZmZikKICNkZWZpbmUgTEFXQVI1CShMQVdBUl9FTiB8IExBV0FSX1RSR1RfSUZfUklPIHwgKExBV0FSX1NJWkUgJiBMQVdBUl9TSVpFXzUxMk0pKQpkaWZmIC0tZ2l0IGEvYm9hcmQvbXBjODU2OG1kcy9tcGM4NTY4bWRzLmMgYi9ib2FyZC9mcmVlc2NhbGUvbXBjODU2OG1kcy9tcGM4NTY4bWRzLmMKc2ltaWxhcml0eSBpbmRleCA2NCUKcmVuYW1lIGZyb20gYm9hcmQvbXBjODU2OG1kcy9tcGM4NTY4bWRzLmMKcmVuYW1lIHRvIGJvYXJkL2ZyZWVzY2FsZS9tcGM4NTY4bWRzL21wYzg1NjhtZHMuYwppbmRleCA4MThmZjEzLi40NjBjYjFiIDEwMDY0NAotLS0gYS9ib2FyZC9tcGM4NTY4bWRzL21wYzg1NjhtZHMuYworKysgYi9ib2FyZC9mcmVlc2NhbGUvbXBjODU2OG1kcy9tcGM4NTY4bWRzLmMKQEAgLTI2LDkgKzI2LDEyIEBACiAjaW5jbHVkZSA8cGNpLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9pbW1hcF84NXh4Lmg+CisjaW5jbHVkZSA8YXNtL2ltbWFwX2ZzbF9wY2kuaD4KICNpbmNsdWRlIDxzcGQuaD4KICNpbmNsdWRlIDxpMmMuaD4KICNpbmNsdWRlIDxpb3BvcnRzLmg+CisjaW5jbHVkZSA8bGliZmR0Lmg+CisjaW5jbHVkZSA8ZmR0X3N1cHBvcnQuaD4KIAogI2luY2x1ZGUgImJjc3IuaCIKIApAQCAtMTMzLDcgKzEzNiw2IEBACiBpbml0ZHJhbShpbnQgYm9hcmRfdHlwZSkKIHsKIAlsb25nIGRyYW1fc2l6ZSA9IDA7Ci0Jdm9sYXRpbGUgaW1tYXBfdCAqaW1tYXAgPSAoaW1tYXBfdCAqKUNGR19JTU1SOwogCiAJcHV0cygiSW5pdGlhbGl6aW5nXG4iKTsKIApAQCAtMTQ2LDcgKzE0OCw3IEBACiAJCSAqICAgIE92ZXJyaWRlIERMTCA9IDEsIENvdXJzZSBBZGogPSAxLCBUYXAgU2VsZWN0ID0gMAogCQkgKi8KIAotCQl2b2xhdGlsZSBjY3NyX2d1cl90ICpndXI9ICZpbW1hcC0+aW1fZ3VyOworCQl2b2xhdGlsZSBjY3NyX2d1cl90ICpndXIgPSAodm9pZCAqKShDRkdfTVBDODV4eF9HVVRTX0FERFIpOwogCiAJCWd1ci0+ZGRyZGxsY3IgPSAweDgxMDAwMDAwOwogCQlhc20oInN5bmM7aXN5bmM7bXN5bmMiKTsKQEAgLTE3Niw5ICsxNzgsOCBAQAogdm9pZAogbG9jYWxfYnVzX2luaXQodm9pZCkKIHsKLQl2b2xhdGlsZSBpbW1hcF90ICppbW1hcCA9IChpbW1hcF90ICopQ0ZHX0lNTVI7Ci0Jdm9sYXRpbGUgY2Nzcl9ndXJfdCAqZ3VyID0gJmltbWFwLT5pbV9ndXI7Ci0Jdm9sYXRpbGUgY2Nzcl9sYmNfdCAqbGJjID0gJmltbWFwLT5pbV9sYmM7CisJdm9sYXRpbGUgY2Nzcl9ndXJfdCAqZ3VyID0gKHZvaWQgKikoQ0ZHX01QQzg1eHhfR1VUU19BRERSKTsKKwl2b2xhdGlsZSBjY3NyX2xiY190ICpsYmMgPSAodm9pZCAqKShDRkdfTVBDODV4eF9MQkNfQUREUik7CiAKIAl1aW50IGNsa2RpdjsKIAl1aW50IGxiY19oejsKQEAgLTIxMSw4ICsyMTIsNyBAQAogI2lmIGRlZmluZWQoQ0ZHX09SMl9QUkVMSU0pICYmIGRlZmluZWQoQ0ZHX0JSMl9QUkVMSU0pCiAKIAl1aW50IGlkeDsKLQl2b2xhdGlsZSBpbW1hcF90ICppbW1hcCA9IChpbW1hcF90ICopQ0ZHX0lNTVI7Ci0Jdm9sYXRpbGUgY2Nzcl9sYmNfdCAqbGJjID0gJmltbWFwLT5pbV9sYmM7CisJdm9sYXRpbGUgY2Nzcl9sYmNfdCAqbGJjID0gKHZvaWQgKikoQ0ZHX01QQzg1eHhfTEJDX0FERFIpOwogCXVpbnQgKnNkcmFtX2FkZHIgPSAodWludCAqKUNGR19MQkNfU0RSQU1fQkFTRTsKIAl1aW50IGxzZG1yX2NvbW1vbjsKIApAQCAtMzM3LDE2ICszMzcsMTkgQEAKIH07CiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCBwY2lfY29udHJvbGxlciBob3NlW10gPSB7Ci0Jeworc3RhdGljIHN0cnVjdCBwY2lfY29udHJvbGxlciBwY2kxX2hvc2UgPSB7CiAjaWZuZGVmIENPTkZJR19QQ0lfUE5QCiAJY29uZmlnX3RhYmxlOiBwY2lfbXBjODU2OG1kc19jb25maWdfdGFibGUsCiAjZW5kaWYKLQl9CiB9OwotCiAjZW5kaWYJLyogQ09ORklHX1BDSSAqLwogCisjaWZkZWYgQ09ORklHX1BDSUUxCitzdGF0aWMgc3RydWN0IHBjaV9jb250cm9sbGVyIHBjaWUxX2hvc2U7CisjZW5kaWYgIC8qIENPTkZJR19QQ0lFMSAqLworCitpbnQgZmlyc3RfZnJlZV9idXNubyA9IDA7CisKIC8qCiAgKiBwaWJfaW5pdCgpIC0tIEluaXRpYWxpemUgdGhlIFBDQTk1NTUgSU8gZXhwYW5kZXIgb24gdGhlIFBJQiBib2FyZAogICovCkBAIC0zODksMTEgKzM5MiwxNjQgQEAKIAlhc20oImVpZWlvIik7CiB9CiAKKyNpZmRlZiBDT05GSUdfUENJCiB2b2lkCiBwY2lfaW5pdF9ib2FyZCh2b2lkKQogewotI2lmZGVmIENPTkZJR19QQ0kKKwl2b2xhdGlsZSBjY3NyX2d1cl90ICpndXIgPSAodm9pZCAqKShDRkdfTVBDODV4eF9HVVRTX0FERFIpOworCXVpbnQgaW9fc2VsID0gKGd1ci0+cG9yZGV2c3IgJiBNUEM4NXh4X1BPUkRFVlNSX0lPX1NFTCkgPj4gMTk7CisJdWludCBob3N0X2FnZW50ID0gKGd1ci0+cG9yYm1zciAmIE1QQzg1eHhfUE9SQk1TUl9IQSkgPj4gMTY7CisKKyNpZmRlZiBDT05GSUdfUENJMQorewogCXBpYl9pbml0KCk7Ci0JcGNpX21wYzg1eHhfaW5pdChob3NlKTsKKworCXZvbGF0aWxlIGNjc3JfZnNsX3BjaV90ICpwY2kgPSAoY2Nzcl9mc2xfcGNpX3QgKikgQ0ZHX1BDSTFfQUREUjsKKwlleHRlcm4gdm9pZCBmc2xfcGNpX2luaXQoc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlKTsKKwlzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UgPSAmcGNpMV9ob3NlOworCisJdWludCBwY2lfMzIgPSAxOyAgICAgIC8qIFBPUkRFVlNSWzE1XSAqLworCXVpbnQgcGNpX2FyYiA9IGd1ci0+cG9yZGV2c3IgJiBNUEM4NXh4X1BPUkRFVlNSX1BDSTFfQVJCOyAgICAgICAvKiBQT1JERVZTUlsxNF0gKi8KKwl1aW50IHBjaV9jbGtfc2VsID0gZ3VyLT5wb3JwbGxzciAmIE1QQzg1eHhfUE9SREVWU1JfUENJMV9TUEQ7ICAgLyogUE9SUExMU1JbMTZdICovCisKKwl1aW50IHBjaV9hZ2VudCA9IChob3N0X2FnZW50ID09IDMpIHx8IChob3N0X2FnZW50ID09IDQgKSB8fCAoaG9zdF9hZ2VudCA9PSA2KTsKKworCXVpbnQgcGNpX3NwZWVkID0gNjY2NjYwMDA7CisKKwlpZiAoIShndXItPmRldmRpc3IgJiBNUEM4NXh4X0RFVkRJU1JfUENJMSkpIHsKKwkJcHJpbnRmICgiICAgIFBDSTogJWQgYml0LCAlcyBNSHosICVzLCAlcywgJXNcbiIsCisJCQkocGNpXzMyKSA/IDMyIDogNjQsCisJCQkocGNpX3NwZWVkID09IDMzMzMzMDAwKSA/ICIzMyIgOgorCQkJKHBjaV9zcGVlZCA9PSA2NjY2NjAwMCkgPyAiNjYiIDogInVua25vd24iLAorCQkJcGNpX2Nsa19zZWwgPyAic3luYyIgOiAiYXN5bmMiLAorCQkJcGNpX2FnZW50ID8gImFnZW50IiA6ICJob3N0IiwKKwkJCXBjaV9hcmIgPyAiYXJiaXRlciIgOiAiZXh0ZXJuYWwtYXJiaXRlciIKKwkJCSk7CisKKwkJLyogaW5ib3VuZCAqLworCQlwY2lfc2V0X3JlZ2lvbihob3NlLT5yZWdpb25zICsgMCwKKwkJCQlDRkdfUENJX01FTU9SWV9CVVMsCisJCQkJQ0ZHX1BDSV9NRU1PUllfUEhZUywKKwkJCQlDRkdfUENJX01FTU9SWV9TSVpFLAorCQkJCVBDSV9SRUdJT05fTUVNIHwgUENJX1JFR0lPTl9NRU1PUlkpOworCisJCS8qIG91dGJvdW5kIG1lbW9yeSAqLworCQlwY2lfc2V0X3JlZ2lvbihob3NlLT5yZWdpb25zICsgMSwKKwkJCQlDRkdfUENJMV9NRU1fQkFTRSwKKwkJCQlDRkdfUENJMV9NRU1fUEhZUywKKwkJCQlDRkdfUENJMV9NRU1fU0laRSwKKwkJCQlQQ0lfUkVHSU9OX01FTSk7CisKKwkJLyogb3V0Ym91bmQgaW8gKi8KKwkJcGNpX3NldF9yZWdpb24oaG9zZS0+cmVnaW9ucyArIDIsCisJCQkJQ0ZHX1BDSTFfSU9fQkFTRSwKKwkJCQlDRkdfUENJMV9JT19QSFlTLAorCQkJCUNGR19QQ0kxX0lPX1NJWkUsCisJCQkJUENJX1JFR0lPTl9JTyk7CisKKwkJaG9zZS0+cmVnaW9uX2NvdW50ID0gMzsKKworCQlob3NlLT5maXJzdF9idXNubyA9IGZpcnN0X2ZyZWVfYnVzbm87CisJCXBjaV9zZXR1cF9pbmRpcmVjdChob3NlLCAoaW50KSAmcGNpLT5jZmdfYWRkciwgKGludCkgJnBjaS0+Y2ZnX2RhdGEpOworCisJCWZzbF9wY2lfaW5pdChob3NlKTsKKwkJZmlyc3RfZnJlZV9idXNubyA9IGhvc2UtPmxhc3RfYnVzbm8rMTsKKwkJcHJpbnRmICgiUENJIG9uIGJ1cyAlMDJ4IC0gJTAyeFxuIixob3NlLT5maXJzdF9idXNubyxob3NlLT5sYXN0X2J1c25vKTsKKwl9IGVsc2UgeworCXByaW50ZiAoIiAgICBQQ0k6IGRpc2FibGVkXG4iKTsKKwl9Cit9CisjZWxzZQorCWd1ci0+ZGV2ZGlzciB8PSBNUEM4NXh4X0RFVkRJU1JfUENJMTsgLyogZGlzYWJsZSAqLworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfUENJRTEKK3sKKwl2b2xhdGlsZSBjY3NyX2ZzbF9wY2lfdCAqcGNpID0gKGNjc3JfZnNsX3BjaV90ICopIENGR19QQ0lFMV9BRERSOworCWV4dGVybiB2b2lkIGZzbF9wY2lfaW5pdChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UpOworCXN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSA9ICZwY2llMV9ob3NlOworCWludCBwY2llX2VwID0gIChob3N0X2FnZW50ID09IDApIHx8IChob3N0X2FnZW50ID09IDIgKSB8fCAoaG9zdF9hZ2VudCA9PSAzKTsKKworCWludCBwY2llX2NvbmZpZ3VyZWQgID0gaW9fc2VsID49IDE7CisKKwlpZiAocGNpZV9jb25maWd1cmVkICYmICEoZ3VyLT5kZXZkaXNyICYgTVBDODV4eF9ERVZESVNSX1BDSUUpKXsKKwkJcHJpbnRmICgiXG4gICAgUENJRSBjb25uZWN0ZWQgdG8gc2xvdCBhcyAlcyAoYmFzZSBhZGRyZXNzICV4KSIsCisJCQlwY2llX2VwID8gIkVuZCBQb2ludCIgOiAiUm9vdCBDb21wbGV4IiwKKwkJCSh1aW50KXBjaSk7CisKKwkJaWYgKHBjaS0+cG1lX21zZ19kZXQpIHsKKwkJCXBjaS0+cG1lX21zZ19kZXQgPSAweGZmZmZmZmZmOworCQkJZGVidWcgKCIgd2l0aCBlcnJvcnMuICBDbGVhcmluZy4gIE5vdyAweCUwOHgiLHBjaS0+cG1lX21zZ19kZXQpOworCQl9CisJCXByaW50ZiAoIlxuIik7CisKKwkJLyogaW5ib3VuZCAqLworCQlwY2lfc2V0X3JlZ2lvbihob3NlLT5yZWdpb25zICsgMCwKKwkJCQlDRkdfUENJX01FTU9SWV9CVVMsCisJCQkJQ0ZHX1BDSV9NRU1PUllfUEhZUywKKwkJCQlDRkdfUENJX01FTU9SWV9TSVpFLAorCQkJCVBDSV9SRUdJT05fTUVNIHwgUENJX1JFR0lPTl9NRU1PUlkpOworCisJCS8qIG91dGJvdW5kIG1lbW9yeSAqLworCQlwY2lfc2V0X3JlZ2lvbihob3NlLT5yZWdpb25zICsgMSwKKwkJCQlDRkdfUENJRTFfTUVNX0JBU0UsCisJCQkJQ0ZHX1BDSUUxX01FTV9QSFlTLAorCQkJCUNGR19QQ0lFMV9NRU1fU0laRSwKKwkJCQlQQ0lfUkVHSU9OX01FTSk7CisKKwkJLyogb3V0Ym91bmQgaW8gKi8KKwkJcGNpX3NldF9yZWdpb24oaG9zZS0+cmVnaW9ucyArIDIsCisJCQkJQ0ZHX1BDSUUxX0lPX0JBU0UsCisJCQkJQ0ZHX1BDSUUxX0lPX1BIWVMsCisJCQkJQ0ZHX1BDSUUxX0lPX1NJWkUsCisJCQkJUENJX1JFR0lPTl9JTyk7CisKKwkJaG9zZS0+cmVnaW9uX2NvdW50ID0gMzsKKworCQlob3NlLT5maXJzdF9idXNubz1maXJzdF9mcmVlX2J1c25vOworCQlwY2lfc2V0dXBfaW5kaXJlY3QoaG9zZSwgKGludCkgJnBjaS0+Y2ZnX2FkZHIsIChpbnQpICZwY2ktPmNmZ19kYXRhKTsKKworCQlmc2xfcGNpX2luaXQoaG9zZSk7CisJCXByaW50ZiAoIlBDSUUgb24gYnVzICUwMnggLSAlMDJ4XG4iLGhvc2UtPmZpcnN0X2J1c25vLGhvc2UtPmxhc3RfYnVzbm8pOworCisJCWZpcnN0X2ZyZWVfYnVzbm89aG9zZS0+bGFzdF9idXNubysxOworCisJfSBlbHNlIHsKKwkJcHJpbnRmICgiICAgIFBDSUU6IGRpc2FibGVkXG4iKTsKKwl9Cit9CisjZWxzZQorCWd1ci0+ZGV2ZGlzciB8PSBNUEM4NXh4X0RFVkRJU1JfUENJRTsgLyogZGlzYWJsZSAqLwogI2VuZGlmCiB9CisjZW5kaWYgLyogQ09ORklHX1BDSSAqLworCisjaWYgZGVmaW5lZChDT05GSUdfT0ZfQk9BUkRfU0VUVVApCit2b2lkCitmdF9ib2FyZF9zZXR1cCh2b2lkICpibG9iLCBiZF90ICpiZCkKK3sKKwlpbnQgbm9kZSwgdG1wWzJdOworCWNvbnN0IGNoYXIgKnBhdGg7CisKKwlmdF9jcHVfc2V0dXAoYmxvYiwgYmQpOworCisJbm9kZSA9IGZkdF9wYXRoX29mZnNldChibG9iLCAiL2FsaWFzZXMiKTsKKwl0bXBbMF0gPSAwOworCWlmIChub2RlID49IDApIHsKKyNpZmRlZiBDT05GSUdfUENJMQorCQlwYXRoID0gZmR0X2dldHByb3AoYmxvYiwgbm9kZSwgInBjaTAiLCBOVUxMKTsKKwkJaWYgKHBhdGgpIHsKKwkJCXRtcFsxXSA9IHBjaTFfaG9zZS5sYXN0X2J1c25vIC0gcGNpMV9ob3NlLmZpcnN0X2J1c25vOworCQkJZG9fZml4dXBfYnlfcGF0aChibG9iLCBwYXRoLCAiYnVzLXJhbmdlIiwgJnRtcCwgOCwgMSk7CisJCX0KKyNlbmRpZgorI2lmZGVmIENPTkZJR19QQ0lFMQorCQlwYXRoID0gZmR0X2dldHByb3AoYmxvYiwgbm9kZSwgInBjaTEiLCBOVUxMKTsKKwkJaWYgKHBhdGgpIHsKKwkJCXRtcFsxXSA9IHBjaWUxX2hvc2UubGFzdF9idXNubyAtIHBjaWUxX2hvc2UuZmlyc3RfYnVzbm87CisJCQlkb19maXh1cF9ieV9wYXRoKGJsb2IsIHBhdGgsICJidXMtcmFuZ2UiLCAmdG1wLCA4LCAxKTsKKwkJfQorI2VuZGlmCisJfQorfQorI2VuZGlmCmRpZmYgLS1naXQgYS9ib2FyZC9tcGM4NTY4bWRzL3UtYm9vdC5sZHMgYi9ib2FyZC9mcmVlc2NhbGUvbXBjODU2OG1kcy91LWJvb3QubGRzCnNpbWlsYXJpdHkgaW5kZXggOTclCnJlbmFtZSBmcm9tIGJvYXJkL21wYzg1NjhtZHMvdS1ib290LmxkcwpyZW5hbWUgdG8gYm9hcmQvZnJlZXNjYWxlL21wYzg1NjhtZHMvdS1ib290LmxkcwppbmRleCA3MTA5OWY2Li40NjgyMDQxIDEwMDY0NAotLS0gYS9ib2FyZC9tcGM4NTY4bWRzL3UtYm9vdC5sZHMKKysrIGIvYm9hcmQvZnJlZXNjYWxlL21wYzg1NjhtZHMvdS1ib290LmxkcwpAQCAtMzcsNyArMzcsNyBAQAogICAuYm9vdHBnIDB4RkZGRkYwMDA6CiAgIHsKIAljcHUvbXBjODV4eC9zdGFydC5vCSguYm9vdHBnKQotCWJvYXJkL21wYzg1NjhtZHMvaW5pdC5vICguYm9vdHBnKQorCWJvYXJkL2ZyZWVzY2FsZS9tcGM4NTY4bWRzL2luaXQubyAoLmJvb3RwZykKICAgfSA9IDB4ZmZmZgogCiAgIC8qIFJlYWQtb25seSBzZWN0aW9ucywgbWVyZ2VkIGludG8gdGV4dCBzZWdtZW50OiAqLwpAQCAtNjcsNyArNjcsNyBAQAogICAudGV4dCAgICAgIDoKICAgewogICAgIGNwdS9tcGM4NXh4L3N0YXJ0Lm8JKC50ZXh0KQotICAgIGJvYXJkL21wYzg1NjhtZHMvaW5pdC5vICgudGV4dCkKKyAgICBib2FyZC9mcmVlc2NhbGUvbXBjODU2OG1kcy9pbml0Lm8gKC50ZXh0KQogICAgIGNwdS9tcGM4NXh4L3RyYXBzLm8gKC50ZXh0KQogICAgIGNwdS9tcGM4NXh4L2ludGVycnVwdHMubyAoLnRleHQpCiAgICAgY3B1L21wYzg1eHgvY3B1X2luaXQubyAoLnRleHQpCmRpZmYgLS1naXQgYS9ib2FyZC9pZHM4MjQ3L2lkczgyNDcuYyBiL2JvYXJkL2lkczgyNDcvaWRzODI0Ny5jCmluZGV4IGIwNTQyNGQuLjcxNzY3NzAgMTAwNjQ0Ci0tLSBhL2JvYXJkL2lkczgyNDcvaWRzODI0Ny5jCisrKyBiL2JvYXJkL2lkczgyNDcvaWRzODI0Ny5jCkBAIC0zMjksMjUgKzMyOSwxNCBAQAogICovCiB2b2lkIGZ0X2Jsb2JfdXBkYXRlKHZvaWQgKmJsb2IsIGJkX3QgKmJkKQogewotCWludCByZXQsIG5vZGVvZmZzZXQgPSAwOwotCXVsb25nIG1lbW9yeV9kYXRhWzJdID0gezB9OworCWludCByZXQ7CiAKLQltZW1vcnlfZGF0YVswXSA9IGNwdV90b19iZTMyKGJkLT5iaV9tZW1zdGFydCk7Ci0JbWVtb3J5X2RhdGFbMV0gPSBjcHVfdG9fYmUzMihiZC0+YmlfbWVtc2l6ZSk7CisJcmV0ID0gZmR0X2ZpeHVwX21lbW9yeShibG9iLCAodTY0KWJkLT5iaV9tZW1zdGFydCwgKHU2NCliZC0+YmlfbWVtc2l6ZSk7CiAKLQlub2Rlb2Zmc2V0ID0gZmR0X2ZpbmRfbm9kZV9ieV9wYXRoIChibG9iLCAiL21lbW9yeSIpOwotCWlmIChub2Rlb2Zmc2V0ID49IDApIHsKLQkJcmV0ID0gZmR0X3NldHByb3AoYmxvYiwgbm9kZW9mZnNldCwgInJlZyIsIG1lbW9yeV9kYXRhLAotCQkJCQlzaXplb2YobWVtb3J5X2RhdGEpKTsKLQlpZiAocmV0IDwgMCkKKwlpZiAocmV0IDwgMCkgewogCQlwcmludGYoImZ0X2Jsb2JfdXBkYXRlKTogY2Fubm90IHNldCAvbWVtb3J5L3JlZyAiCiAJCQkicHJvcGVydHkgZXJyOiVzXG4iLCBmZHRfc3RyZXJyb3IocmV0KSk7CiAJfQotCWVsc2UgewotCQkvKiBtZW1vcnkgbm9kZSBpcyByZXF1aXJlZCBpbiBkdHMgKi8KLQkJcHJpbnRmKCJmdF9ibG9iX3VwZGF0ZSgpOiBjYW5ub3QgZmluZCAvbWVtb3J5IG5vZGUgIgotCQkiZXJyOiVzXG4iLCBmZHRfc3RyZXJyb3Iobm9kZW9mZnNldCkpOwotCX0KIH0KIAogdm9pZCBmdF9ib2FyZF9zZXR1cCh2b2lkICpibG9iLCBiZF90ICpiZCkKZGlmZiAtLWdpdCBhL2JvYXJkL21wYzg1NDBldmFsL21wYzg1NDBldmFsLmMgYi9ib2FyZC9tcGM4NTQwZXZhbC9tcGM4NTQwZXZhbC5jCmluZGV4IDNiM2M4ZWQuLjY0ZGZlMDkgMTAwNjQ0Ci0tLSBhL2JvYXJkL21wYzg1NDBldmFsL21wYzg1NDBldmFsLmMKKysrIGIvYm9hcmQvbXBjODU0MGV2YWwvbXBjODU0MGV2YWwuYwpAQCAtMzUsOCArMzUsNyBAQAogaW50IGJvYXJkX3ByZV9pbml0ICh2b2lkKQogewogI2lmIGRlZmluZWQoQ09ORklHX1BDSSkKLQl2b2xhdGlsZSBpbW1hcF90ICppbW1yID0gKGltbWFwX3QgKilDRkdfSU1NUjsKLQl2b2xhdGlsZSBjY3NyX3BjaXhfdCAqcGNpID0gJmltbXItPmltX3BjaXg7CisJdm9sYXRpbGUgY2Nzcl9wY2l4X3QgKnBjaSA9ICh2b2lkICopKENGR19NUEM4NXh4X1BDSVhfQUREUik7CiAKIAlwY2ktPnBlZXIgJj0gMHhmZmZmZmZkZjsgLyogZGlzYWJsZSBtYXN0ZXIgYWJvcnQgKi8KICNlbmRpZgpAQCAtNjgsMTQgKzY3LDEzIEBACiB7CiAJbG9uZyBkcmFtX3NpemUgPSAwOwogCWV4dGVybiBsb25nIHNwZF9zZHJhbSAodm9pZCk7Ci0Jdm9sYXRpbGUgaW1tYXBfdCAqaW1tYXAgPSAoaW1tYXBfdCAqKUNGR19JTU1SOwogI2lmICFkZWZpbmVkKENPTkZJR19SQU1fQVNfRkxBU0gpCi0Jdm9sYXRpbGUgY2Nzcl9sYmNfdCAqbGJjPSAmaW1tYXAtPmltX2xiYzsKKwl2b2xhdGlsZSBjY3NyX2xiY190ICpsYmMgPSAodm9pZCAqKShDRkdfTVBDODV4eF9MQkNfQUREUik7CiAJc3lzX2luZm9fdCBzeXNpbmZvOwogCXVpbnQgdGVtcF9sYmNkbGwgPSAwOwogI2VuZGlmCiAjaWYgIWRlZmluZWQoQ09ORklHX1JBTV9BU19GTEFTSCkgfHwgZGVmaW5lZChDT05GSUdfRERSX0RMTCkKLQl2b2xhdGlsZSBjY3NyX2d1cl90ICpndXI9ICZpbW1hcC0+aW1fZ3VyOworCXZvbGF0aWxlIGNjc3JfZ3VyX3QgKmd1ciA9ICh2b2lkICopKENGR19NUEM4NXh4X0dVVFNfQUREUik7CiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX0REUl9ETEwpCkBAIC0xMzgsOCArMTM2LDcgQEAKIAkJICogZW5hYmxlIGVycm9ycyAqLwogCQl1aW50ICpwID0gMDsKIAkJdWludCBpID0gMDsKLQkJdm9sYXRpbGUgaW1tYXBfdCAqaW1tYXAgPSAoaW1tYXBfdCAqKUNGR19JTU1SOwotCQl2b2xhdGlsZSBjY3NyX2Rkcl90ICpkZHI9ICZpbW1hcC0+aW1fZGRyOworCQl2b2xhdGlsZSBjY3NyX2Rkcl90ICpkZHI9ICh2b2lkICopKENGR19NUEM4NXh4X0REUl9BRERSKTsKIAkJZG1hX2luaXQoKTsKIAkJZm9yICgqcCA9IDA7IHAgPCAodWludCAqKSg4ICogMTAyNCk7IHArKykgewogCQkJaWYgKCgodW5zaWduZWQgaW50KXAgJiAweDFmKSA9PSAwKSB7IGRjYnoocCk7IH0KQEAgLTIyMiw4ICsyMTksNyBAQAogbG9uZyBpbnQgZml4ZWRfc2RyYW0gKHZvaWQpCiB7CiAjaWZuZGVmIENGR19SQU1CT09UCi0Jdm9sYXRpbGUgaW1tYXBfdCAqaW1tYXAgPSAoaW1tYXBfdCAqKUNGR19JTU1SOwotCXZvbGF0aWxlIGNjc3JfZGRyX3QgKmRkcj0gJmltbWFwLT5pbV9kZHI7CisJdm9sYXRpbGUgY2Nzcl9kZHJfdCAqZGRyPSAodm9pZCAqKShDRkdfTVBDODV4eF9ERFJfQUREUik7CiAKIAlkZHItPmNzMF9ibmRzID0gQ0ZHX0REUl9DUzBfQk5EUzsKIAlkZHItPmNzMF9jb25maWcgPSBDRkdfRERSX0NTMF9DT05GSUc7CmRpZmYgLS1naXQgYS9ib2FyZC9tcGM4NTY4bWRzL2Z0X2JvYXJkLmMgYi9ib2FyZC9tcGM4NTY4bWRzL2Z0X2JvYXJkLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2ODE1Y2MuLjAwMDAwMDAKLS0tIGEvYm9hcmQvbXBjODU2OG1kcy9mdF9ib2FyZC5jCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDA0LTIwMDcgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IuCi0gKgotICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKLSAqIHByb2plY3QuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCi0gKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCSBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKLSAqIE1BIDAyMTExLTEzMDcgVVNBCi0gKi8KLQotI2luY2x1ZGUgPGNvbW1vbi5oPgotCi0jaW5jbHVkZSA8ZnRfYnVpbGQuaD4KLQotZXh0ZXJuIHZvaWQgZnRfY3B1X3NldHVwKHZvaWQgKmJsb2IsIGJkX3QgKmJkKTsKLQotI2lmIGRlZmluZWQoQ09ORklHX09GX0ZMQVRfVFJFRSkgJiYgZGVmaW5lZChDT05GSUdfT0ZfQk9BUkRfU0VUVVApCi12b2lkCi1mdF9ib2FyZF9zZXR1cCh2b2lkICpibG9iLCBiZF90ICpiZCkKLXsKLQl1MzIgKnA7Ci0JaW50IGxlbjsKLSNpZmRlZiBDT05GSUdfUENJCi0JZnRfcGNpX3NldHVwKGJsb2IsIGJkKTsKLSNlbmRpZgotCWZ0X2NwdV9zZXR1cChibG9iLCBiZCk7Ci0JcCA9IGZ0X2dldF9wcm9wKGJsb2IsICIvbWVtb3J5L3JlZyIsICZsZW4pOwotCWlmIChwICE9IE5VTEwpIHsKLQkJKnArKyA9IGNwdV90b19iZTMyKGJkLT5iaV9tZW1zdGFydCk7Ci0JCSpwID0gY3B1X3RvX2JlMzIoYmQtPmJpX21lbXNpemUpOwotCX0KLX0KLSNlbmRpZiAvKiBDT05GSUdfT0ZfRkxBVF9UUkVFICYmIENPTkZJR19PRl9CT0FSRF9TRVRVUCAqLwpkaWZmIC0tZ2l0IGEvYm9hcmQvbXM3NzIyc2UvTWFrZWZpbGUgYi9ib2FyZC9tczc3MjJzZS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGVjMDEzCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvbXM3NzIyc2UvTWFrZWZpbGUKQEAgLTAsMCArMSw0OCBAQAorIworIyBDb3B5cmlnaHQgKEMpIDIwMDcKKyMgTm9idWhpcm8gSXdhbWF0c3UgPGl3YW1hdHN1QG5pZ2F1cmkub3JnPgorIworIyBDb3B5cmlnaHQgKEMpIDIwMDcKKyMgS2VuYXRpIFRlY2hub2xvZ2llcywgSW5jLgorIworIyBib2FyZC9tczc3MjJzZS9NYWtlZmlsZQorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisjIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorIyBNQSAwMjExMS0xMzA3IFVTQQorCitpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKKworTElCCT0gbGliJChCT0FSRCkuYQorCitPQkpTCTo9IG1zNzcyMnNlLm8KK1NPQkpTCTo9IGxvd2xldmVsX2luaXQubworCiskKExJQik6CSQoT0JKUykgJChTT0JKUykKKwkkKEFSKSBjcnYgJEAgJChPQkpTKSAkKFNPQkpTKQorCitjbGVhbjoKKwlybSAtZiAkKFNPQkpTKSAkKE9CSlMpCisKK2Rpc3RjbGVhbjoJY2xlYW4KKwlybSAtZiAkKExJQikgY29yZSAqLmJhayAuZGVwZW5kCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQorCQkkKENDKSAtTSAkKENQUEZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKworLWluY2x1ZGUgLmRlcGVuZAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9tczc3MjJzZS9jb25maWcubWsgYi9ib2FyZC9tczc3MjJzZS9jb25maWcubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc5N2Q2ZgotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL21zNzcyMnNlL2NvbmZpZy5tawpAQCAtMCwwICsxLDMxIEBACisjCisjIENvcHlyaWdodCAoQykgMjAwNworIyBOb2J1aGlybyBJd2FtYXRzdSA8aXdhbWF0c3VAbmlnYXVyaS5vcmc+CisjCisjIENvcHlyaWdodCAoQykgMjAwNworIyBLZW5hdGkgVGVjaG5vbG9naWVzLCBJbmMuCisjCisjIGJvYXJkL21zNzcyMnNlL2NvbmZpZy5taworIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisjIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorIyBNQSAwMjExMS0xMzA3IFVTQQorCisjCisjIFRFWFRfQkFTRSByZWZlcnMgdG8gaW1hZ2UgX2FmdGVyXyByZWxvY2F0aW9uLgorIworIyBOT1RFOiBNdXN0IG1hdGNoIHZhbHVlIHVzZWQgaW4gdS1ib290LmxkcyAoaW4gdGhpcyBkaXJlY3RvcnkpLgorIworCitURVhUX0JBU0UgPSAweDhGRkMwMDAwCmRpZmYgLS1naXQgYS9ib2FyZC9tczc3MjJzZS9sb3dsZXZlbF9pbml0LlMgYi9ib2FyZC9tczc3MjJzZS9sb3dsZXZlbF9pbml0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjAyNGUyNwotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL21zNzcyMnNlL2xvd2xldmVsX2luaXQuUwpAQCAtMCwwICsxLDI5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNworICogTm9idWhpcm8gSXdhbWF0c3UgPGl3YW1hdHN1QG5pZ2F1cmkub3JnPgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNworICogS2VuYXRpIFRlY2hub2xvZ2llcywgSW5jLgorICoKKyAqIGJvYXJkL21zNzcyMnNlL2xvd2xldmVsX2luaXQuUworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDx2ZXJzaW9uLmg+CisKKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisKKy8qCisgKiAgQm9hcmQgc3BlY2lmaWMgbG93IGxldmVsIGluaXQgY29kZSwgY2FsbGVkIF92ZXJ5XyBlYXJseSBpbiB0aGUKKyAqICBzdGFydHVwIHNlcXVlbmNlLiBSZWxvY2F0aW9uIHRvIFNEUkFNIGhhcyBub3QgaGFwcGVuZWQgeWV0LCBubworICogIHN0YWNrIGlzIGF2YWlsYWJsZSwgYnNzIHNlY3Rpb24gaGFzIG5vdCBiZWVuIGluaXRpYWxpc2VkLCBldGMuCisgKgorICogIChOb3RlOiBBcyBubyBzdGFjayBpcyBhdmFpbGFibGUsIG5vIHN1YnJvdXRpbmVzIGNhbiBiZSBjYWxsZWQuLi4pLgorICovCisKKwkuZ2xvYmFsCWxvd2xldmVsX2luaXQKKworCS50ZXh0CisJLmFsaWduCTIKKworbG93bGV2ZWxfaW5pdDoKKworCW1vdi5sCUNDUl9BLCByMQkhIEFkZHJlc3Mgb2YgQ2FjaGUgQ29udHJvbCBSZWdpc3RlcgorCW1vdi5sCUNDUl9ELCByMAkhIEluc3RydWN0aW9uIENhY2hlIEludmFsaWRhdGUKKwltb3YubAlyMCwgQHIxCisKKwltb3YubAlNTVVDUl9BLCByMQkhIEFkZHJlc3Mgb2YgTU1VIENvbnRyb2wgUmVnaXN0ZXIKKwltb3YubAlNTVVDUl9ELCByMAkhIFRJID09IFRMQiBJbnZhbGlkYXRlIGJpdAorCW1vdi5sCXIwLCBAcjEKKworCW1vdi5sCU1TVFBDUjBfQSwgcjEJISBBZGRyZXNzIG9mIFBvd2VyIENvbnRyb2wgUmVnaXN0ZXIgMAorCW1vdi5sCU1TVFBDUjBfRCwgcjAJIQorCW1vdi5sCXIwLCBAcjEKKworCW1vdi5sCU1TVFBDUjJfQSwgcjEJISBBZGRyZXNzIG9mIFBvd2VyIENvbnRyb2wgUmVnaXN0ZXIgMgorCW1vdi5sCU1TVFBDUjJfRCwgcjAJIQorCW1vdi5sCXIwLCBAcjEKKworCW1vdi5sCVNCU0NSX0EsIHIxCSEKKwltb3YudwlTQlNDUl9ELCByMAkhCisJbW92LncJcjAsIEByMQorCisJbW92LmwJUFNDUl9BLCByMQkhCisJbW92LncJUFNDUl9ELCByMAkhCisJbW92LncJcjAsIEByMQorCishCW1vdi5sCVJXVENTUl9BLCByMQkhIDB4QTQ1MjAwMDQgKFdhdGNoZG9nIENvbnRyb2wgLyBTdGF0dXMgUmVnaXN0ZXIpCishCW1vdi53CVJXVENTUl9EXzEsIHIwCSEgMHhBNTA3IC0+IHRpbWVyX1NUT1AvV0RUX0NMSz1tYXgKKyEJbW92LncJcjAsIEByMQorCisJbW92LmwJUldUQ05UX0EsIHIxCSEgMHhBNDUyMDAwMCAoV2F0Y2hkb2cgQ291bnQgUmVnaXN0ZXIpCisJbW92LncJUldUQ05UX0QsIHIwCSEgMHg1QTAwIC0+IENsZWFyCisJbW92LncJcjAsIEByMQorCisJbW92LmwJUldUQ1NSX0EsIHIxCSEgMHhBNDUyMDAwNCAoV2F0Y2hkb2cgQ29udHJvbCAvIFN0YXR1cyBSZWdpc3RlcikKKwltb3YudwlSV1RDU1JfRF8yLCByMAkhIDB4QTUwNCAtPiB0aW1lcl9TVE9QL0NMSz01MDBtcworCW1vdi53CXIwLCBAcjEKKworCW1vdi5sCUZSUUNSX0EsIHIxCQkhIDB4QTQxNTAwMDAgRnJlcXVlbmN5IGNvbnRyb2wgcmVnaXN0ZXIKKwltb3YubAlGUlFDUl9ELCByMAkhCisJbW92LmwJcjAsIEByMQorCisJbW92LmwJQ0NSX0EsIHIxCQkhIEFkZHJlc3Mgb2YgQ2FjaGUgQ29udHJvbCBSZWdpc3RlcgorCW1vdi5sCUNDUl9EXzIsIHIwCSEgPz8KKwltb3YubAlyMCwgQHIxCisKK2JzY19pbml0OgorCisJbW92LmwJUFNFTEFfQSwgcjEKKwltb3YudwlQU0VMQV9ELCByMAorCW1vdi53CXIwLCBAcjEKKworCW1vdi5sCURSVkNSX0EsIHIxCisJbW92LncJRFJWQ1JfRCwgcjAKKwltb3YudwlyMCwgQHIxCisKKwltb3YubAlQQ0NSX0EsIHIxCisJbW92LncJUENDUl9ELCByMAorCW1vdi53CXIwLCBAcjEKKworCW1vdi5sCVBFQ1JfQSwgcjEKKwltb3YudwlQRUNSX0QsIHIwCisJbW92LncJcjAsIEByMQorCisJbW92LmwJUEpDUl9BLCByMQorCW1vdi53CVBKQ1JfRCwgcjAKKwltb3YudwlyMCwgQHIxCisKKwltb3YubAlQWENSX0EsIHIxCisJbW92LncJUFhDUl9ELCByMAorCW1vdi53CXIwLCBAcjEKKworCW1vdi5sCUNNTkNSX0EsIHIxCSEgQ01OQ1IgYWRkcmVzcyAtPiBSMQorCW1vdi5sIAlDTU5DUl9ELCByMAkhIENNTkNSIGRhdGEgICAgLT4gUjAKKwltb3YubAlyMCwgQHIxCQkhIENNTkNSIHNldAorCisJbW92LmwJQ1MwQkNSX0EsIHIxCSEgQ1MwQkNSIGFkZHJlc3MgLT4gUjEKKwltb3YubCAJQ1MwQkNSX0QsIHIwCSEgQ1MwQkNSIGRhdGEgICAgLT4gUjAKKwltb3YubAlyMCwgQHIxCQkhIENTMEJDUiBzZXQKKworCW1vdi5sCUNTMkJDUl9BLCByMQkhIENTMkJDUiBhZGRyZXNzIC0+IFIxCisJbW92LmwJQ1MyQkNSX0QsIHIwCSEgQ1MyQkNSIGRhdGEgICAgLT4gUjAKKwltb3YubAlyMCwgQHIxCQkhIENTMkJDUiBzZXQKKworCW1vdi5sCUNTNEJDUl9BLCByMQkhIENTNEJDUiBhZGRyZXNzIC0+IFIxCisJbW92LmwJQ1M0QkNSX0QsIHIwCSEgQ1M0QkNSIGRhdGEgICAgLT4gUjAKKwltb3YubAlyMCwgQHIxCQkhIENTNEJDUiBzZXQKKworCW1vdi5sCUNTNUFCQ1JfQSwgcjEJISBDUzVBQkNSIGFkZHJlc3MgLT4gUjEKKwltb3YubCAJQ1M1QUJDUl9ELCByMAkhIENTNUFCQ1IgZGF0YSAgICAtPiBSMAorCW1vdi5sCXIwLCBAcjEJCSEgQ1M1QUJDUiBzZXQKKworCW1vdi5sCUNTNUJCQ1JfQSwgcjEJISBDUzVCQkNSIGFkZHJlc3MgLT4gUjEKKwltb3YubCAJQ1M1QkJDUl9ELCByMAkhIENTNUJCQ1IgZGF0YSAgICAtPiBSMAorCW1vdi5sCXIwLCBAcjEJCSEgQ1M1QkJDUiBzZXQKKworCW1vdi5sCUNTNkFCQ1JfQSwgcjEJISBDUzZBQkNSIGFkZHJlc3MgLT4gUjEKKwltb3YubCAJQ1M2QUJDUl9ELCByMAkhIENTNkFCQ1IgZGF0YSAgICAtPiBSMAorCW1vdi5sCXIwLCBAcjEJCSEgQ1M2QUJDUiBzZXQKKworCW1vdi5sCUNTMFdDUl9BLCByMQkhIENTMFdDUiBhZGRyZXNzIC0+IFIxCisJbW92LmwgCUNTMFdDUl9ELCByMAkhIENTMFdDUiBkYXRhICAgIC0+IFIwCisJbW92LmwJcjAsIEByMQkJISBDUzBXQ1Igc2V0CisKKwltb3YubAlDUzJXQ1JfQSwgcjEJISBDUzJXQ1IgYWRkcmVzcyAtPiBSMQorCW1vdi5sIAlDUzJXQ1JfRCwgcjAJISBDUzJXQ1IgZGF0YSAgICAtPiBSMAorCW1vdi5sCXIwLCBAcjEJCSEgQ1MyV0NSIHNldAorCisJbW92LmwJQ1M0V0NSX0EsIHIxCSEgQ1M0V0NSIGFkZHJlc3MgLT4gUjEKKwltb3YubCAJQ1M0V0NSX0QsIHIwCSEgQ1M0V0NSIGRhdGEgICAgLT4gUjAKKwltb3YubAlyMCwgQHIxCQkhIENTNFdDUiBzZXQKKworCW1vdi5sCUNTNUFXQ1JfQSwgcjEJISBDUzVBV0NSIGFkZHJlc3MgLT4gUjEKKwltb3YubCAJQ1M1QVdDUl9ELCByMAkhIENTNUFXQ1IgZGF0YSAgICAtPiBSMAorCW1vdi5sCXIwLCBAcjEJCSEgQ1M1QVdDUiBzZXQKKworCW1vdi5sCUNTNUJXQ1JfQSwgcjEJISBDUzVCV0NSIGFkZHJlc3MgLT4gUjEKKwltb3YubCAJQ1M1QldDUl9ELCByMAkhIENTNUJXQ1IgZGF0YSAgICAtPiBSMAorCW1vdi5sCXIwLCBAcjEJCSEgQ1M1QldDUiBzZXQKKworCW1vdi5sCUNTNkFXQ1JfQSwgcjEJISBDUzZBV0NSIGFkZHJlc3MgLT4gUjEKKwltb3YubCAJQ1M2QVdDUl9ELCByMAkhIENTNkFXQ1IgZGF0YSAgICAtPiBSMAorCW1vdi5sCXIwLCBAcjEJCSEgQ1M2QVdDUiBzZXQKKworCSEgU0RSQU0gaW5pdGlhbGl6YXRpb24KKwltb3YubAlTRENSX0EsIHIxCSEgU0JfU0RDUiBhZGRyZXNzIC0+IFIxCisJbW92LmwJU0RDUl9ELCByMAkhIFNCX1NEQ1IgZGF0YSAgICAtPiBSMAorCW1vdi5sCXIwLCBAcjEJCSEgU0JfU0RDUiBzZXQKKworCW1vdi5sCVNEV0NSX0EsIHIxCSEgU0JfU0RXQ1IgYWRkcmVzcyAtPiBSMQorCW1vdi5sCVNEV0NSX0QsIHIwCSEgU0JfU0RXQ1IgZGF0YSAgICAtPiBSMAorCW1vdi5sCXIwLCBAcjEJCSEgU0JfU0RXQ1Igc2V0CisKKwltb3YubAlTRFBDUl9BLCByMQkhIFNCX1NEUENSIGFkZHJlc3MgLT4gUjEKKwltb3YubAlTRFBDUl9ELCByMAkhIFNCX1NEUENSIGRhdGEgICAgLT4gUjAKKwltb3YubAlyMCwgQHIxCQkhIFNCX1NEUENSIHNldAorCisJbW92LmwJUlRDT1JfQSwgcjEJISBTQl9SVENPUiBhZGRyZXNzIC0+IFIxCisJbW92LmwJUlRDT1JfRCwgcjAJISBTQl9SVENPUiBkYXRhICAgIC0+IFIwCisJbW92LmwJcjAsIEByMQkJISBTQl9SVENPUiBzZXQKKworCW1vdi5sCVJUQ1NSX0EsIHIxCSEgU0JfUlRDU1IgYWRkcmVzcyAtPiBSMQorCW1vdi5sCVJUQ1NSX0QsIHIwCSEgU0JfUlRDU1IgZGF0YSAgICAtPiBSMAorCW1vdi5sCXIwLCBAcjEJCSEgU0JfUlRDU1Igc2V0CisKKwltb3YubAlTRE1SM19BLCByMQkhIFNETVIzIGFkZHJlc3MgLT4gUjEKKwltb3YgCSMweDAwLCByMAkhIFNETVIzIGRhdGEgICAgLT4gUjAKKwltb3YuYglyMCwgQHIxCQkhIFNETVIzIHNldAorCisJISBCTCBiaXQgb2ZmIChpbml0ID0gT04pICAoPyE/KQorCisJc3RjCXNyLCByMAkJCQkhIEJMIGJpdCBvZmYoaW5pdD1PTikKKwltb3YubAlTUl9NQVNLX0QsIHIxCisJYW5kCXIxLCByMAorCWxkYwlyMCwgc3IKKworCXJ0cworCW1vdgkjMCwgcjAKKworCS5hbGlnbgkyCisKK0NDUl9BOgkJLmxvbmcJQ0NSCitNTVVDUl9BOgkubG9uZwlNTVVDUgorTVNUUENSMF9BOgkubG9uZwlNU1RQQ1IwCitNU1RQQ1IyX0E6CS5sb25nCU1TVFBDUjIKK1NCU0NSX0E6CS5sb25nCVNCU0NSCitQU0NSX0E6CQkubG9uZwlQU0NSCitSV1RDU1JfQToJLmxvbmcJUldUQ1NSCitSV1RDTlRfQToJLmxvbmcJUldUQ05UCitGUlFDUl9BOgkubG9uZwlGUlFDUgorCitDQ1JfRDoJCS5sb25nCTB4MDAwMDA4MDAKK0NDUl9EXzI6CS5sb25nCTB4MDAwMDAxMDMKK01NVUNSX0Q6CS5sb25nCTB4MDAwMDAwMDQKK01TVFBDUjBfRDoJLmxvbmcJMHgwMDAwMTAwMQorTVNUUENSMl9EOgkubG9uZwkweGZmZmZmZmZmCitGUlFDUl9EOgkubG9uZwkweDA3MDIyNTM4CisKK1BTRUxBX0E6CS5sb25nICAgMHhhNDA1MDE0RQorUFNFTEFfRDoJLndvcmQgICAweDBBMTAKKwkuYWxpZ24gMgorCitEUlZDUl9BOgkubG9uZyAgIDB4YTQwNTAxOEEKK0RSVkNSX0Q6CS53b3JkICAgMHgwNTU0CisJLmFsaWduIDIKKworUENDUl9BOgkJLmxvbmcgICAweGE0MDUwMTA0CitQQ0NSX0Q6CQkud29yZCAgIDB4ODgwMAorCS5hbGlnbiAyCisKK1BFQ1JfQToJCS5sb25nICAgMHhhNDA1MDEwOAorUEVDUl9EOgkJLndvcmQgICAweDAwMDAKKwkuYWxpZ24gMgorCitQSkNSX0E6CQkubG9uZyAgIDB4YTQwNTAxMTAKK1BKQ1JfRDoJCS53b3JkICAgMHgxMDAwCisJLmFsaWduIDIKKworUFhDUl9BOgkJLmxvbmcgICAweGE0MDUwMTQ4CitQWENSX0Q6CQkud29yZCAgIDB4MEFBQQorCS5hbGlnbiAyCisKK0NNTkNSX0E6CS5sb25nCUNNTkNSCitDTU5DUl9EOgkubG9uZwkweDAwMDAwMDEzCitDUzBCQ1JfQToJLmxvbmcJQ1MwQkNSCQkhIEZsYXNoIGJhbmsgMQorQ1MwQkNSX0Q6CS5sb25nCTB4MjQ5MjA0MDAKK0NTMkJDUl9BOgkubG9uZwlDUzJCQ1IJCSEgU1JBTQorQ1MyQkNSX0Q6CS5sb25nCTB4MjQ5MjA0MDAKK0NTNEJDUl9BOgkubG9uZwlDUzRCQ1IJCSEgRlBHQSwgUENNQ0lBLCBVU0IsIGV4dCBzbG90CitDUzRCQ1JfRDoJLmxvbmcJMHgyNDkyMDQwMAorQ1M1QUJDUl9BOgkubG9uZwlDUzVBQkNSCQkhIEV4dCBzbG90CitDUzVBQkNSX0Q6CS5sb25nCTB4MjQ5MjA0MDAKK0NTNUJCQ1JfQToJLmxvbmcJQ1M1QkJDUgkJISBVU0IgY29udHJvbGxlcgorQ1M1QkJDUl9EOgkubG9uZwkweDI0OTIwNDAwCitDUzZBQkNSX0E6CS5sb25nCUNTNkFCQ1IJCSEgRXRoZXJuZXQKK0NTNkFCQ1JfRDoJLmxvbmcJMHgyNDkyMDQwMAorCitDUzBXQ1JfQToJLmxvbmcJQ1MwV0NSCitDUzBXQ1JfRDoJLmxvbmcJMHgwMDAwMDMwMAorQ1MyV0NSX0E6CS5sb25nCUNTMldDUgorQ1MyV0NSX0Q6CS5sb25nCTB4MDAwMDAzMDAKK0NTNFdDUl9BOgkubG9uZwlDUzRXQ1IKK0NTNFdDUl9EOgkubG9uZwkweDAwMDAwMzAwCitDUzVBV0NSX0E6CS5sb25nCUNTNUFXQ1IKK0NTNUFXQ1JfRDoJLmxvbmcJMHgwMDAwMDMwMAorQ1M1QldDUl9BOgkubG9uZwlDUzVCV0NSCitDUzVCV0NSX0Q6CS5sb25nCTB4MDAwMDAzMDAKK0NTNkFXQ1JfQToJLmxvbmcJQ1M2QVdDUgorQ1M2QVdDUl9EOgkubG9uZwkweDAwMDAwMzAwCisKK1NEQ1JfQToJCS5sb25nCVNCU0NfU0RDUgorU0RDUl9EOgkJLmxvbmcJMHgwMDAyMDgwOQorU0RXQ1JfQToJLmxvbmcJU0JTQ19TRFdDUgorU0RXQ1JfRDoJLmxvbmcJMHgwMDE2NGQwZAorU0RQQ1JfQToJLmxvbmcJU0JTQ19TRFBDUgorU0RQQ1JfRDoJLmxvbmcJMHgwMDAwMDA4NworUlRDT1JfQToJLmxvbmcJU0JTQ19SVENPUgorUlRDT1JfRDoJLmxvbmcJMHhBNTVBMDAzNAorUlRDU1JfQToJLmxvbmcJU0JTQ19SVENTUgorUlRDU1JfRDoJLmxvbmcJMHhBNTVBMDAxMAorU0RNUjNfQToJLmxvbmcJMHhGRTUwMDE4MAorCisJLmFsaWduCTEKKworU0JTQ1JfRDoJLndvcmQJMHgwMDQwCitQU0NSX0Q6CQkud29yZAkweDAwMDAKK1JXVENTUl9EXzE6CS53b3JkCTB4QTUwNworUldUQ1NSX0RfMjoJLndvcmQJMHhBNTA3CitSV1RDTlRfRDoJLndvcmQJMHg1QTAwCisKK1NSX01BU0tfRDoJLmxvbmcJMHhFRkZGRkYwRgpkaWZmIC0tZ2l0IGEvYm9hcmQvbXM3NzIyc2UvbXM3NzIyc2UuYyBiL2JvYXJkL21zNzcyMnNlL21zNzcyMnNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQzZDU1YwotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL21zNzcyMnNlL21zNzcyMnNlLmMKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNworICogTm9idWhpcm8gSXdhbWF0c3UgPGl3YW1hdHN1QG5pZ2F1cmkub3JnPgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNworICogS2VuYXRpIFRlY2hub2xvZ2llcywgSW5jLgorICoKKyAqIGJvYXJkL21zNzcyMnNlL21zNzcyMnNlLmMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorCisjZGVmaW5lIExFRF9CQVNFCTB4QjA4MDAwMDAKKworaW50IGNoZWNrYm9hcmQodm9pZCkKK3sKKwlwdXRzKCJCT0FSRDogSGl0YWNoaSBVTCBNUzc3MjJTRVxuIik7CisJcmV0dXJuIDA7Cit9CisKK2ludCBib2FyZF9pbml0KHZvaWQpCit7CisJLyogU2V0dXAgUFRYTURbMTowXSBmb3IgL0NTNkEgKi8KKwlvdXR3KGludyhQWENSKSAmIH4weGYwMDAsIFBYQ1IpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBkcmFtX2luaXQgKHZvaWQpCit7CisJREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CisKKwlnZC0+YmQtPmJpX21lbXN0YXJ0ID0gQ0ZHX1NEUkFNX0JBU0U7CisJZ2QtPmJkLT5iaV9tZW1zaXplID0gQ0ZHX1NEUkFNX1NJWkU7CisJcHJpbnRmKCJEUkFNOiAgJWRNQlxuIiwgQ0ZHX1NEUkFNX1NJWkUgLyAoMTAyNCAqIDEwMjQpKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBsZWRfc2V0X3N0YXRlICh1bnNpZ25lZCBzaG9ydCB2YWx1ZSkKK3sKKwkqKCh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSBMRURfQkFTRSkgPSAodmFsdWUgJiAweEZGKTsKK30KZGlmZiAtLWdpdCBhL2JvYXJkL21zNzcyMnNlL3UtYm9vdC5sZHMgYi9ib2FyZC9tczc3MjJzZS91LWJvb3QubGRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5MmJjNjIKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9tczc3MjJzZS91LWJvb3QubGRzCkBAIC0wLDAgKzEsMTA1IEBACisvKgorICogQ29weXJpZ3RoIChjKSAyMDA3CisgKiBOb2J1aGlybyBJd2FtYXRzdSA8aXdhbWF0c3VAbmlnYXVyaS5vcmc+CisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworT1VUUFVUX0ZPUk1BVCgiZWxmMzItc2gtbGludXgiLCAiZWxmMzItc2gtbGludXgiLCAiZWxmMzItc2gtbGludXgiKQorT1VUUFVUX0FSQ0goc2gpCitFTlRSWShfc3RhcnQpCisKK1NFQ1RJT05TCit7CisJLyoKKwkgICBCYXNlIGFkZHJlc3Mgb2YgaW50ZXJuYWwgU0RSQU0gaXMgMHgwQzAwMDAwMC4KKwkgICBBbHRob3VnaCBzaXplIG9mIFNEUkFNIGNhbiBiZSBlaXRoZXIgMTYgb3IgMzIgTUJ5dGVzLAorCSAgIHdlIGFzc3VtZSAxNiBNQnl0ZXMgKGllIGlnbm9yZSB1cHBlciBoYWxmIGlmIHRoZSBmdWxsCisJICAgMzIgTUJ5dGVzIGlzIHByZXNlbnQpLgorCisJICAgTk9URTogVGhpcyBhZGRyZXNzIG11c3QgbWF0Y2ggd2l0aCB0aGUgZGVmaW5pdGlvbiBvZgorCSAgIFRFWFRfQkFTRSBpbiBjb25maWcubWsgKGluIHRoaXMgZGlyZWN0b3J5KS4KKworCSovCisJLiA9IDB4OEMwMDAwMDAgKyAoNjQqMTAyNCoxMDI0KSAtICgyNTYqMTAyNCk7CisKKwlQUk9WSURFIChyZWxvY19kc3QgPSAuKTsKKworCVBST1ZJREUgKF9mdGV4dCA9IC4pOworCVBST1ZJREUgKF9mY29kZSA9IC4pOworCVBST1ZJREUgKF9zdGFydCA9IC4pOworCisJLnRleHQgOgorCXsKKwkJY3B1L3NoNC9zdGFydC5vCQkoLnRleHQpCisJCS4gPSBBTElHTig4MTkyKTsKKwkJY29tbW9uL2Vudmlyb25tZW50Lm8JKC5wcGNlbnYpCisJCS4gPSBBTElHTig4MTkyKTsKKwkJY29tbW9uL2Vudmlyb25tZW50Lm8JKC5wcGNlbnZyKQorCQkuID0gQUxJR04oODE5Mik7CisJCSooLnRleHQpCisJCS4gPSBBTElHTig0KTsKKwl9ID0weEZGCisJUFJPVklERSAoX2Vjb2RlID0gLik7CisJLnJvZGF0YSA6CisJeworCQkqKC5yb2RhdGEpCisJCS4gPSBBTElHTig0KTsKKwl9CisJUFJPVklERSAoX2V0ZXh0ID0gLik7CisKKworCVBST1ZJREUgKF9mZGF0YSA9IC4pOworCS5kYXRhIDoKKwl7CisJCSooLmRhdGEpCisJCS4gPSBBTElHTig0KTsKKwl9CisJUFJPVklERSAoX2VkYXRhID0gLik7CisKKwlQUk9WSURFIChfZmdvdCA9IC4pOworCS5nb3QgOgorCXsKKwkJKiguZ290KQorCQkuID0gQUxJR04oNCk7CisJfQorCVBST1ZJREUgKF9lZ290ID0gLik7CisKKwlQUk9WSURFIChfX3VfYm9vdF9jbWRfc3RhcnQgPSAuKTsKKwkudV9ib290X2NtZCA6CisJeworCQkqKC51X2Jvb3RfY21kKQorCQkuID0gQUxJR04oNCk7CisJfQorCVBST1ZJREUgKF9fdV9ib290X2NtZF9lbmQgPSAuKTsKKworCVBST1ZJREUgKHJlbG9jX2RzdF9lbmQgPSAuKTsKKwkvKiBfcmVsb2NfZHN0X2VuZCA9IC47ICovCisKKwlQUk9WSURFIChic3Nfc3RhcnQgPSAuKTsKKwlQUk9WSURFIChfX2Jzc19zdGFydCA9IC4pOworCS5ic3MgOgorCXsKKwkJKiguYnNzKQorCQkuID0gQUxJR04oNCk7CisJfQorCVBST1ZJREUgKGJzc19lbmQgPSAuKTsKKworCVBST1ZJREUgKF9lbmQgPSAuKTsKK30KZGlmZiAtLWdpdCBhL2JvYXJkL21zNzc1MHNlL01ha2VmaWxlIGIvYm9hcmQvbXM3NzUwc2UvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjgxZDU2YwotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL21zNzc1MHNlL01ha2VmaWxlCkBAIC0wLDAgKzEsNDMgQEAKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA3CisjIE5vYnVoaXJvIEl3YW1hdHN1IDxpd2FtYXRzdUBuaWdhdXJpLm9yZz4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorIyB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyMgTUEgMDIxMTEtMTMwNyBVU0EKKyMKK2luY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5taworCitMSUIJPSBsaWIkKEJPQVJEKS5hCisKK09CSlMJOj0gbXM3NzUwc2UubworU09CSlMJOj0gbG93bGV2ZWxfaW5pdC5vCisKKyQoTElCKToJJChPQkpTKSAkKFNPQkpTKQorCSQoQVIpIGNydiAkQCAkKE9CSlMpICQoU09CSlMpCisKK2NsZWFuOgorCXJtIC1mICQoU09CSlMpICQoT0JKUykKKworZGlzdGNsZWFuOgljbGVhbgorCXJtIC1mICQoTElCKSBjb3JlICouYmFrIC5kZXBlbmQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQorCSQoQ0MpIC1NICQoQ1BQRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorCistaW5jbHVkZSAuZGVwZW5kCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9tczc3NTBzZS9jb25maWcubWsgYi9ib2FyZC9tczc3NTBzZS9jb25maWcubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWVlZDU4MAotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL21zNzc1MHNlL2NvbmZpZy5tawpAQCAtMCwwICsxLDIzIEBACisjCisjIENvcHlyaWdodCAoQykgMjAwNworIyBOb2J1aGlybyBJd2FtYXRzdSA8aXdhbWF0c3VAbmlnYXVyaS5vcmc+CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyMgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisjIE1BIDAyMTExLTEzMDcgVVNBCisjCisjCisjIE5PVEU6IE11c3QgbWF0Y2ggdmFsdWUgdXNlZCBpbiB1LWJvb3QubGRzIChpbiB0aGlzIGRpcmVjdG9yeSkuCisjCitURVhUX0JBU0UgPSAweDhGRkMwMDAwCmRpZmYgLS1naXQgYS9ib2FyZC9tczc3NTBzZS9sb3dsZXZlbF9pbml0LlMgYi9ib2FyZC9tczc3NTBzZS9sb3dsZXZlbF9pbml0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNlM2NkNQotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL21zNzc1MHNlL2xvd2xldmVsX2luaXQuUwpAQCAtMCwwICsxLDE3OSBAQAorLyoKKyBtb2RpZmllZCBmcm9tIFNILUlQTCtnCisgUmVuZXNhc28gU3VwZXJIIC8gU29sdXRpb24gRW5naW5nZSBNUzc3NXhTRTAxIEJTQyBzZXR0aW5nLgorCisgU3VwcG9ydCBDUFUgOiBTSDc3NTAvU0g3NzUwUy9TSDc3NTBSL1NINzc1MS9TSDc3NTFSCisKKyBDb3lyaWdodCAoYykgMjAwNyBOb2J1aGlybyBJd2FtYXRzdSA8aXdtYXRzdUBuaWdhdXJpLm9yZz4KKworICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8dmVyc2lvbi5oPgorCisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorCisjaWZkZWYgQ09ORklHX0NQVV9TSDc3NTEKKyNkZWZpbmUgQkNSMl9EX1ZBTFVFCTB4MkZGQwkgICAvKiBBcmVhIDEtNiB3aWR0aDogMzIvMzIvMzIvMzIvMzIvMTYgKi8KKyNkZWZpbmUgV0NSMV9EX1ZBTFVFICAgIDB4MDI3NzA3NzEgLyogRE1BOjAgQTY6MiBBMzowIEEwOjEgT3RoZXJzOjE1ICovCisjaWZkZWYgQ09ORklHX01BUlVCVU5fUENDQVJECisjZGVmaW5lIFdDUjJfRF9WQUxVRSAgICAweEZGRkU0RkU3IC8qIEE2OjE1IEE2Qjo3IEE1OjE1IEE1Qjo3IEE0OjE1CisJCQkJICAgICAgQTM6MiAgQTI6MTUgQTE6MTUgQTA6NiAgQTBCOjcgICovCisjZWxzZSAvKiBDT05GSUdfTUFSVUJVTl9QQ0NBUkQgKi8KKyNkZWZpbmUgV0NSMl9EX1ZBTFVFICAgIDB4N0ZGRTRGRTcgLyogQTY6MyAgQTZCOjcgQTU6MTUgQTVCOjcgQTQ6MTUKKwkJCQkgICAgICBBMzoyICBBMjoxNSBBMToxNSBBMDo2ICBBMEI6NyAgKi8KKyNlbmRpZiAvKiBDT05GSUdfTUFSVUJVTl9QQ0NBUkQgKi8KKyNkZWZpbmUgV0NSM19EX1ZBTFVFCTB4MDE3Nzc3NzEgLyogQTY6IDAtMSBBNTogMS0zIEE0OiAxLTMgQTM6IDEtMworCQkJCSAgICAgIEEyOiAxLTMgQTE6IDEtMyBBMDogMC0xICovCisjZGVmaW5lIFJUQ09SX0RfVkFMVUUJMHhBNTBECSAgIC8qIFdyaXRlIGNvZGUgQTUsIGRhdGEgMEQgKH4xNXVzPykgKi8KKyNkZWZpbmUgU0RNUjNfQUREUkVTUwkweEZGOTQwMDg4IC8qIFNETVIzIGFkZHJlc3Mgb24gMzItYml0IGJ1cyAqLworI2RlZmluZSBNQ1JfRDFfVkFMVUUJMHgxMDA5MDFCNCAvKiBTRFJBTSAzMi1iaXQsIENBUy9SQVMgUmVmcmVzaCwgLi4uICovCisjZGVmaW5lIE1DUl9EMl9WQUxVRQkweDUwMDkwMUI0IC8qIFNhbWUgdy9NUlNFVCBub3cgMSAobW9kZSByZWcgY21kKSAqLworI2Vsc2UgLyogQ09ORklHX0NQVV9TSDc3NTEgKi8KKyNkZWZpbmUgQkNSMl9EX1ZBTFVFCTB4MkUzQwkgICAvKiBBcmVhIDEtNiB3aWR0aDogMzIvMzIvNjQvMTYvMzIvMTYgKi8KKyNkZWZpbmUgV0NSMV9EX1ZBTFVFCTB4MDI3MjA3NzcgLyogRE1BOjAgQTY6MiBBNDoyIEEzOjAgT3RoZXJzOjE1ICovCisjZGVmaW5lIFdDUjJfRF9WQUxVRQkweEZGRkU0RkZGIC8qIEE2OjE1IEE2Qjo3IEE1OjE1IEE1Qjo3IEE0OjE1CisJCQkJICAgICAgQTM6MiAgQTI6MTUgQTE6MTUgQTA6MTUgQTBCOjcgICovCisjZGVmaW5lIFdDUjNfRF9WQUxVRQkweDAxNzE3NzcxIC8qIEE2OiAwLTEgQTU6IDEtMyBBNDogMC0xIEEzOiAxLTMKKwkJCQkgICAgICBBMjogMS0zIEExOiAxLTMgQTA6IDAtMSAqLworI2RlZmluZSBSVENPUl9EX1ZBTFVFCTB4QTUxMAkgICAvKiBXcml0ZSBjb2RlIEE1LCBkYXRhIDEwICh+MTV1cz8pICovCisjZGVmaW5lIFNETVIzX0FERFJFU1MJMHhGRjk0MDExMCAvKiBTRE1SMyBhZGRyZXNzIG9uIDY0LWJpdCBidXMgKi8KKyNkZWZpbmUgTUNSX0QxX1ZBTFVFCTB4ODgwMTAwMUMgLyogU0RSQU0gNjQtYml0LCBDQVMvUkFTIFJlZnJlc2gsIC4uLiAqLworI2RlZmluZSBNQ1JfRDJfVkFMVUUJMHhDODAxMDAxQyAvKiBTYW1lIHcvTVJTRVQgbm93IDEgKG1vZGUgcmVnIGNtZCkgKi8KKyNlbmRpZiAvKiBDT05GSUdfQ1BVX1NINzc1MSAqLworCisJLmdsb2JhbCBsb3dsZXZlbF9pbml0CisJLnRleHQKKwkuYWxpZ24gIDIKKworbG93bGV2ZWxfaW5pdDoKKworCW1vdi5sICAgQ0NSX0EsIHIxICAgICAgICAgICAgICAgISBDQ1IgQWRkcmVzcworCW1vdi5sICAgQ0NSX0RfRElTQUJMRSwgcjAgICAgICAgISBDQ1IgRGF0YQorCW1vdi5sICAgcjAsIEByMQorCitpbml0X2JzYzoKKwltb3YubAlGUlFDUl9BLHIxCS8qIEZSUUNSIEFkZHJlc3MgKi8KKwltb3YubAlGUlFDUl9ELHIwCS8qIEZSUUNSIERhdGEgKi8KKwltb3YudwlyMCxAcjEKKworCW1vdi5sCUJDUjFfQSxyMQkvKiBCQ1IxIEFkZHJlc3MgKi8KKwltb3YubAlCQ1IxX0QscjAJLyogQkNSMSBEYXRhICovCisJbW92LmwJcjAsQHIxCisKKwltb3YubAlCQ1IyX0EscjEJLyogQkNSMiBBZGRyZXNzICovCisJbW92LmwJQkNSMl9ELHIwCS8qIEJDUjIgRGF0YSAqLworCW1vdi53CXIwLEByMQorCisJbW92LmwJV0NSMV9BLHIxCS8qIFdDUjEgQWRkcmVzcyAqLworCW1vdi5sCVdDUjFfRCxyMAkvKiBXQ1IxIERhdGEgKi8KKwltb3YubAlyMCxAcjEKKworCW1vdi5sCVdDUjJfQSxyMQkvKiBXQ1IyIEFkZHJlc3MgKi8KKwltb3YubAlXQ1IyX0QscjAJLyogV0NSMiBEYXRhICovCisJbW92LmwJcjAsQHIxCisKKwltb3YubAlXQ1IzX0EscjEJLyogV0NSMyBBZGRyZXNzICovCisJbW92LmwJV0NSM19ELHIwCS8qIFdDUjMgRGF0YSAqLworCW1vdi5sCXIwLEByMQorCisJbW92LmwJTUNSX0EscjEJLyogTUNSIEFkZHJlc3MgKi8KKwltb3YubAlNQ1JfRDEscjAJLyogTUNSIERhdGExICovCisJbW92LmwJcjAsQHIxCisKKwltb3YubAlTRE1SM19BLHIxCS8qIFNldCBTRFJBTSBtb2RlICovCisJbW92CSMwLHIwCisJbW92LmIJcjAsQHIxCisKKwkhIERvIHlvdSBuZWVkIFBDTUNJQSBzZXR0aW5nPworCSEgSWYgc28sIHBsZWFzZSBhZGQgdGhlIGxpbmVzIGhlcmUuLi4KKworCW1vdi5sCVJUQ05UX0EscjEJLyogUlRDTlQgQWRkcmVzcyAqLworCW1vdi5sCVJUQ05UX0QscjAJLyogUlRDTlQgRGF0YSAqLworCW1vdi53CXIwLEByMQorCisJbW92LmwJUlRDT1JfQSxyMQkvKiBSVENPUiBBZGRyZXNzICovCisJbW92LmwJUlRDT1JfRCxyMAkvKiBSVENPUiBEYXRhICovCisJbW92LncJcjAsQHIxCisKKwltb3YubAlSVENTUl9BLHIxCS8qIFJUQ1NSIEFkZHJlc3MgKi8KKwltb3YubAlSVENTUl9ELHIwCS8qIFJUQ1NSIERhdGEgKi8KKwltb3YudwlyMCxAcjEKKworCW1vdi5sCVJGQ1JfQSxyMQkvKiBSRkNSIEFkZHJlc3MgKi8KKwltb3YubAlSRkNSX0QscjAJLyogUkZDUiBEYXRhICovCisJbW92LncJcjAsQHIxCQkvKiBDbGVhciByZWZsZXNoIGNvdW50ZXIgKi8KKwkvKiBXYWl0IERSQU0gcmVmcmVzaCAzMCB0aW1lcyAqLworCW1vdgkjMzAscjMKKzE6CisJbW92LncJQHIxLHIwCisJZXh0dS53CXIwLHIyCisJY21wL2hpCXIzLHIyCisJYmYJMWIKKworCW1vdi5sCU1DUl9BLHIxCS8qIE1DUiBBZGRyZXNzICovCisJbW92LmwJTUNSX0QyLHIwCS8qIE1DUiBEYXRhMiAqLworCW1vdi5sCXIwLEByMQorCisJbW92LmwJU0RNUjNfQSxyMQkvKiBTZXQgU0RSQU0gbW9kZSAqLworCW1vdgkjMCxyMAorCW1vdi5iCXIwLEByMQorCisJcnRzCisJIG5vcAorCisJLmFsaWduCTIKKworQ0NSX0E6ICAgICAgICAgIC5sb25nICAgQ0NSCitDQ1JfRF9ESVNBQkxFOiAgLmxvbmcgICAweDA4MDgKK0ZSUUNSX0E6CS5sb25nCUZSUUNSCitGUlFDUl9EOgorI2lmZGVmIENPTkZJR19DUFVfVFlQRV9SCisJCS5sb25nCTB4MDAwMDBlMWEJLyogMTI6MzozICovCisjZWxzZQkvKiBDT05GSUdfQ1BVX1RZUEVfUiAqLworI2lmZGVmIENPTkZJR19HT09EX1NFU0g0CisJCS5sb25nCTB4MDAwMDBlMTMJLyogNjoyOjEgKi8KKyNlbHNlCisJCS5sb25nCTB4MDAwMDBlMjMJLyogNjoxOjEgKi8KKyNlbmRpZgorI2VuZGlmCS8qIENPTkZJR19DUFVfVFlQRV9SICovCisKK0JDUjFfQToJCS5sb25nCUJDUjEKK0JDUjFfRDoJCS5sb25nCTB4MDAwMDAwMDgJLyogQXJlYSAzIFNEUkFNICovCitCQ1IyX0E6CQkubG9uZwlCQ1IyCitCQ1IyX0Q6CQkubG9uZwlCQ1IyX0RfVkFMVUUJLyogQnVzIHdpZHRoIHNldHRpbmdzICovCitXQ1IxX0E6CQkubG9uZwlXQ1IxCitXQ1IxX0Q6CQkubG9uZwlXQ1IxX0RfVkFMVUUJLyogSW50ZXItYXJlYSBvciB0dXJuYXJvdW5kIHdhaXQgc3RhdGVzICovCitXQ1IyX0E6CQkubG9uZwlXQ1IyCitXQ1IyX0Q6CQkubG9uZwlXQ1IyX0RfVkFMVUUJLyogUGVyLWFyZWEgYWNjZXNzIGFuZCBidXJzdCB3YWl0IHN0YXRlcyAqLworV0NSM19BOgkJLmxvbmcJV0NSMworV0NSM19EOgkJLmxvbmcJV0NSM19EX1ZBTFVFCS8qIEFkZHJlc3Mgc2V0dXAgYW5kIGRhdGEgaG9sZCBjeWNsZXMgKi8KK1JUQ1NSX0E6CS5sb25nCVJUQ1NSCitSVENTUl9EOgkubG9uZwkweEE1MTgJCS8qIFJUQ1NSIFdyaXRlIENvZGUgQTVoIERhdGEgMThoICovCitSVENOVF9BOgkubG9uZwlSVENOVAorUlRDTlRfRDoJLmxvbmcJMHhBNTAwCQkvKiBSVENOVCBXcml0ZSBDb2RlIEE1aCBEYXRhIDAwaCAqLworUlRDT1JfQToJLmxvbmcJUlRDT1IKK1JUQ09SX0Q6CS5sb25nCVJUQ09SX0RfVkFMVUUJLyogU2V0IHJlZnJlc2ggdGltZSAoYWJvdXQgMTV1cykgKi8KK1NETVIzX0E6CS5sb25nCVNETVIzX0FERFJFU1MKK01DUl9BOgkJLmxvbmcJTUNSCitNQ1JfRDE6CQkubG9uZwlNQ1JfRDFfVkFMVUUKK01DUl9EMjoJCS5sb25nCU1DUl9EMl9WQUxVRQorUkZDUl9BOgkJLmxvbmcJUkZDUgorUkZDUl9EOgkJLmxvbmcJMHhBNDAwCQkvKiBSRkNSIFdyaXRlIENvZGUgQTRoIERhdGEgMDBoICovCmRpZmYgLS1naXQgYS9ib2FyZC9tczc3NTBzZS9tczc3NTBzZS5jIGIvYm9hcmQvbXM3NzUwc2UvbXM3NzUwc2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMmQ4MjRjCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvbXM3NzUwc2UvbXM3NzUwc2UuYwpAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3CisgKiBOb2J1aGlybyBJd2FtYXRzdSA8aXdhbWF0c3VAbmlnYXVyaS5vcmc+CisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKworaW50IGNoZWNrYm9hcmQodm9pZCkKK3sKKwlwdXRzKCJCT0FSRDogU0g3NzUwL1NINzc1MFMvU0g3NzUwUiBTb2x1dGlvbiBFbmdpbmVcbiIpOworCXJldHVybiAwOworfQorCitpbnQgYm9hcmRfaW5pdCh2b2lkKQoreworCXJldHVybiAwOworfQorCitpbnQgZHJhbV9pbml0ICh2b2lkKQoreworCURFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOworCisJZ2QtPmJkLT5iaV9tZW1zdGFydCA9IENGR19TRFJBTV9CQVNFOworCWdkLT5iZC0+YmlfbWVtc2l6ZSA9IENGR19TRFJBTV9TSVpFOworCXByaW50ZigiRFJBTTogICVkTUJcbiIsIENGR19TRFJBTV9TSVpFIC8gKDEwMjQgKiAxMDI0KSk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBib2FyZF9sYXRlX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2JvYXJkL21zNzc1MHNlL3UtYm9vdC5sZHMgYi9ib2FyZC9tczc3NTBzZS91LWJvb3QubGRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5MmJjNjIKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9tczc3NTBzZS91LWJvb3QubGRzCkBAIC0wLDAgKzEsMTA1IEBACisvKgorICogQ29weXJpZ3RoIChjKSAyMDA3CisgKiBOb2J1aGlybyBJd2FtYXRzdSA8aXdhbWF0c3VAbmlnYXVyaS5vcmc+CisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworT1VUUFVUX0ZPUk1BVCgiZWxmMzItc2gtbGludXgiLCAiZWxmMzItc2gtbGludXgiLCAiZWxmMzItc2gtbGludXgiKQorT1VUUFVUX0FSQ0goc2gpCitFTlRSWShfc3RhcnQpCisKK1NFQ1RJT05TCit7CisJLyoKKwkgICBCYXNlIGFkZHJlc3Mgb2YgaW50ZXJuYWwgU0RSQU0gaXMgMHgwQzAwMDAwMC4KKwkgICBBbHRob3VnaCBzaXplIG9mIFNEUkFNIGNhbiBiZSBlaXRoZXIgMTYgb3IgMzIgTUJ5dGVzLAorCSAgIHdlIGFzc3VtZSAxNiBNQnl0ZXMgKGllIGlnbm9yZSB1cHBlciBoYWxmIGlmIHRoZSBmdWxsCisJICAgMzIgTUJ5dGVzIGlzIHByZXNlbnQpLgorCisJICAgTk9URTogVGhpcyBhZGRyZXNzIG11c3QgbWF0Y2ggd2l0aCB0aGUgZGVmaW5pdGlvbiBvZgorCSAgIFRFWFRfQkFTRSBpbiBjb25maWcubWsgKGluIHRoaXMgZGlyZWN0b3J5KS4KKworCSovCisJLiA9IDB4OEMwMDAwMDAgKyAoNjQqMTAyNCoxMDI0KSAtICgyNTYqMTAyNCk7CisKKwlQUk9WSURFIChyZWxvY19kc3QgPSAuKTsKKworCVBST1ZJREUgKF9mdGV4dCA9IC4pOworCVBST1ZJREUgKF9mY29kZSA9IC4pOworCVBST1ZJREUgKF9zdGFydCA9IC4pOworCisJLnRleHQgOgorCXsKKwkJY3B1L3NoNC9zdGFydC5vCQkoLnRleHQpCisJCS4gPSBBTElHTig4MTkyKTsKKwkJY29tbW9uL2Vudmlyb25tZW50Lm8JKC5wcGNlbnYpCisJCS4gPSBBTElHTig4MTkyKTsKKwkJY29tbW9uL2Vudmlyb25tZW50Lm8JKC5wcGNlbnZyKQorCQkuID0gQUxJR04oODE5Mik7CisJCSooLnRleHQpCisJCS4gPSBBTElHTig0KTsKKwl9ID0weEZGCisJUFJPVklERSAoX2Vjb2RlID0gLik7CisJLnJvZGF0YSA6CisJeworCQkqKC5yb2RhdGEpCisJCS4gPSBBTElHTig0KTsKKwl9CisJUFJPVklERSAoX2V0ZXh0ID0gLik7CisKKworCVBST1ZJREUgKF9mZGF0YSA9IC4pOworCS5kYXRhIDoKKwl7CisJCSooLmRhdGEpCisJCS4gPSBBTElHTig0KTsKKwl9CisJUFJPVklERSAoX2VkYXRhID0gLik7CisKKwlQUk9WSURFIChfZmdvdCA9IC4pOworCS5nb3QgOgorCXsKKwkJKiguZ290KQorCQkuID0gQUxJR04oNCk7CisJfQorCVBST1ZJREUgKF9lZ290ID0gLik7CisKKwlQUk9WSURFIChfX3VfYm9vdF9jbWRfc3RhcnQgPSAuKTsKKwkudV9ib290X2NtZCA6CisJeworCQkqKC51X2Jvb3RfY21kKQorCQkuID0gQUxJR04oNCk7CisJfQorCVBST1ZJREUgKF9fdV9ib290X2NtZF9lbmQgPSAuKTsKKworCVBST1ZJREUgKHJlbG9jX2RzdF9lbmQgPSAuKTsKKwkvKiBfcmVsb2NfZHN0X2VuZCA9IC47ICovCisKKwlQUk9WSURFIChic3Nfc3RhcnQgPSAuKTsKKwlQUk9WSURFIChfX2Jzc19zdGFydCA9IC4pOworCS5ic3MgOgorCXsKKwkJKiguYnNzKQorCQkuID0gQUxJR04oNCk7CisJfQorCVBST1ZJREUgKGJzc19lbmQgPSAuKTsKKworCVBST1ZJREUgKF9lbmQgPSAuKTsKK30KZGlmZiAtLWdpdCBhL2JvYXJkL3BtODU0L3BtODU0LmMgYi9ib2FyZC9wbTg1NC9wbTg1NC5jCmluZGV4IDZlYWQxZDAuLjk5OWQ4YjUgMTAwNjQ0Ci0tLSBhL2JvYXJkL3BtODU0L3BtODU0LmMKKysrIGIvYm9hcmQvcG04NTQvcG04NTQuYwpAQCAtNDUsOCArNDUsNyBAQAogaW50IGJvYXJkX2Vhcmx5X2luaXRfZiAodm9pZCkKIHsKICNpZiBkZWZpbmVkKENPTkZJR19QQ0kpCi0gICAgdm9sYXRpbGUgaW1tYXBfdCAqaW1tciA9IChpbW1hcF90ICopQ0ZHX0lNTVI7Ci0gICAgdm9sYXRpbGUgY2Nzcl9wY2l4X3QgKnBjaSA9ICZpbW1yLT5pbV9wY2l4OworICAgIHZvbGF0aWxlIGNjc3JfcGNpeF90ICpwY2kgPSAodm9pZCAqKShDRkdfTVBDODV4eF9QQ0lYX0FERFIpOwogCiAgICAgcGNpLT5wZWVyICY9IDB4ZmZmZmZmZGY7IC8qIGRpc2FibGUgbWFzdGVyIGFib3J0ICovCiAjZW5kaWYKQEAgLTc5LDEzICs3OCwxMiBAQAogewogCWxvbmcgZHJhbV9zaXplID0gMDsKIAlleHRlcm4gbG9uZyBzcGRfc2RyYW0gKHZvaWQpOwotCXZvbGF0aWxlIGltbWFwX3QgKmltbWFwID0gKGltbWFwX3QgKilDRkdfSU1NUjsKIAogCXB1dHMoIkluaXRpYWxpemluZ1xuIik7CiAKICNpZiBkZWZpbmVkKENPTkZJR19ERFJfRExMKQogCXsKLQkgICAgdm9sYXRpbGUgY2Nzcl9ndXJfdCAqZ3VyPSAmaW1tYXAtPmltX2d1cjsKKwkgICAgdm9sYXRpbGUgY2Nzcl9ndXJfdCAqZ3VyID0gKHZvaWQgKikoQ0ZHX01QQzg1eHhfR1VUU19BRERSKTsKIAkgICAgaW50IGkseDsKIAogCSAgICB4ID0gMTA7CkBAIC0xMzMsOSArMTMxLDggQEAKIHZvaWQKIGxvY2FsX2J1c19pbml0KHZvaWQpCiB7Ci0Jdm9sYXRpbGUgaW1tYXBfdCAqaW1tYXAgPSAoaW1tYXBfdCAqKUNGR19JTU1SOwotCXZvbGF0aWxlIGNjc3JfZ3VyX3QgKmd1ciA9ICZpbW1hcC0+aW1fZ3VyOwotCXZvbGF0aWxlIGNjc3JfbGJjX3QgKmxiYyA9ICZpbW1hcC0+aW1fbGJjOworCXZvbGF0aWxlIGNjc3JfZ3VyX3QgKmd1ciA9ICh2b2lkICopKENGR19NUEM4NXh4X0dVVFNfQUREUik7CisJdm9sYXRpbGUgY2Nzcl9sYmNfdCAqbGJjID0gKHZvaWQgKikoQ0ZHX01QQzg1eHhfTEJDX0FERFIpOwogCiAJdWludCBjbGtkaXY7CiAJdWludCBsYmNfaHo7CkBAIC0yMjksOCArMjI2LDcgQEAKIGxvbmcgaW50IGZpeGVkX3NkcmFtICh2b2lkKQogewogICAjaWZuZGVmIENGR19SQU1CT09UCi0Jdm9sYXRpbGUgaW1tYXBfdCAqaW1tYXAgPSAoaW1tYXBfdCAqKUNGR19JTU1SOwotCXZvbGF0aWxlIGNjc3JfZGRyX3QgKmRkcj0gJmltbWFwLT5pbV9kZHI7CisJdm9sYXRpbGUgY2Nzcl9kZHJfdCAqZGRyPSAodm9pZCAqKShDRkdfTVBDODV4eF9ERFJfQUREUik7CiAKIAlkZHItPmNzMF9ibmRzID0gQ0ZHX0REUl9DUzBfQk5EUzsKIAlkZHItPmNzMF9jb25maWcgPSBDRkdfRERSX0NTMF9DT05GSUc7CmRpZmYgLS1naXQgYS9ib2FyZC9wbTg1Ni9wbTg1Ni5jIGIvYm9hcmQvcG04NTYvcG04NTYuYwppbmRleCBhMTAwNzU0Li5iZmRlNjk1IDEwMDY0NAotLS0gYS9ib2FyZC9wbTg1Ni9wbTg1Ni5jCisrKyBiL2JvYXJkL3BtODU2L3BtODU2LmMKQEAgLTIzMiwxMyArMjMyLDEyIEBACiB7CiAJbG9uZyBkcmFtX3NpemUgPSAwOwogCWV4dGVybiBsb25nIHNwZF9zZHJhbSAodm9pZCk7Ci0Jdm9sYXRpbGUgaW1tYXBfdCAqaW1tYXAgPSAoaW1tYXBfdCAqKUNGR19JTU1SOwogCiAJcHV0cygiSW5pdGlhbGl6aW5nXG4iKTsKIAogI2lmIGRlZmluZWQoQ09ORklHX0REUl9ETEwpCiAJewotCSAgICB2b2xhdGlsZSBjY3NyX2d1cl90ICpndXI9ICZpbW1hcC0+aW1fZ3VyOworCSAgICB2b2xhdGlsZSBjY3NyX2d1cl90ICpndXIgPSAodm9pZCAqKShDRkdfTVBDODV4eF9HVVRTX0FERFIpOwogCSAgICBpbnQgaSx4OwogCiAJICAgIHggPSAxMDsKQEAgLTI4Nyw5ICsyODYsOCBAQAogdm9pZAogbG9jYWxfYnVzX2luaXQodm9pZCkKIHsKLQl2b2xhdGlsZSBpbW1hcF90ICppbW1hcCA9IChpbW1hcF90ICopQ0ZHX0lNTVI7Ci0Jdm9sYXRpbGUgY2Nzcl9ndXJfdCAqZ3VyID0gJmltbWFwLT5pbV9ndXI7Ci0Jdm9sYXRpbGUgY2Nzcl9sYmNfdCAqbGJjID0gJmltbWFwLT5pbV9sYmM7CisJdm9sYXRpbGUgY2Nzcl9ndXJfdCAqZ3VyID0gKHZvaWQgKikoQ0ZHX01QQzg1eHhfR1VUU19BRERSKTsKKwl2b2xhdGlsZSBjY3NyX2xiY190ICpsYmMgPSAodm9pZCAqKShDRkdfTVBDODV4eF9MQkNfQUREUik7CiAKIAl1aW50IGNsa2RpdjsKIAl1aW50IGxiY19oejsKQEAgLTM4Miw4ICszODAsNyBAQAogbG9uZyBpbnQgZml4ZWRfc2RyYW0gKHZvaWQpCiB7CiAgICNpZm5kZWYgQ0ZHX1JBTUJPT1QKLQl2b2xhdGlsZSBpbW1hcF90ICppbW1hcCA9IChpbW1hcF90ICopQ0ZHX0lNTVI7Ci0Jdm9sYXRpbGUgY2Nzcl9kZHJfdCAqZGRyPSAmaW1tYXAtPmltX2RkcjsKKwl2b2xhdGlsZSBjY3NyX2Rkcl90ICpkZHI9ICh2b2lkICopKENGR19NUEM4NXh4X0REUl9BRERSKTsKIAogCWRkci0+Y3MwX2JuZHMgPSBDRkdfRERSX0NTMF9CTkRTOwogCWRkci0+Y3MwX2NvbmZpZyA9IENGR19ERFJfQ1MwX0NPTkZJRzsKZGlmZiAtLWdpdCBhL2JvYXJkL3NiYzg1NjAvc2JjODU2MC5jIGIvYm9hcmQvc2JjODU2MC9zYmM4NTYwLmMKaW5kZXggZThiOTkyOS4uNDdkZjg4NCAxMDA2NDQKLS0tIGEvYm9hcmQvc2JjODU2MC9zYmM4NTYwLmMKKysrIGIvYm9hcmQvc2JjODU2MC9zYmM4NTYwLmMKQEAgLTE5NSw4ICsxOTUsNyBAQAogaW50IGJvYXJkX2Vhcmx5X2luaXRfZiAodm9pZCkKIHsKICNpZiBkZWZpbmVkKENPTkZJR19QQ0kpCi0gICAgdm9sYXRpbGUgaW1tYXBfdCAqaW1tciA9IChpbW1hcF90ICopQ0ZHX0lNTVI7Ci0gICAgdm9sYXRpbGUgY2Nzcl9wY2l4X3QgKnBjaSA9ICZpbW1yLT5pbV9wY2l4OworICAgIHZvbGF0aWxlIGNjc3JfcGNpeF90ICpwY2kgPSAodm9pZCAqKShDRkdfTVBDODV4eF9QQ0lYX0FERFIpOwogCiAgICAgcGNpLT5wZWVyICY9IDB4ZmZmZmZmZmRmOyAvKiBkaXNhYmxlIG1hc3RlciBhYm9ydCAqLwogI2VuZGlmCkBAIC0yNjQsMTYgKzI2MywxNSBAQAogewogCWxvbmcgZHJhbV9zaXplID0gMDsKIAlleHRlcm4gbG9uZyBzcGRfc2RyYW0gKHZvaWQpOwotCXZvbGF0aWxlIGltbWFwX3QgKmltbWFwID0gKGltbWFwX3QgKilDRkdfSU1NUjsKICNpZiAwCiAjaWYgIWRlZmluZWQoQ09ORklHX1JBTV9BU19GTEFTSCkKLQl2b2xhdGlsZSBjY3NyX2xiY190ICpsYmM9ICZpbW1hcC0+aW1fbGJjOworCXZvbGF0aWxlIGNjc3JfbGJjX3QgKmxiYyA9ICh2b2lkICopKENGR19NUEM4NXh4X0xCQ19BRERSKTsKIAlzeXNfaW5mb190IHN5c2luZm87CiAJdWludCB0ZW1wX2xiY2RsbCA9IDA7CiAjZW5kaWYKICNlbmRpZiAvKiAwICovCiAjaWYgIWRlZmluZWQoQ09ORklHX1JBTV9BU19GTEFTSCkgfHwgZGVmaW5lZChDT05GSUdfRERSX0RMTCkKLQl2b2xhdGlsZSBjY3NyX2d1cl90ICpndXI9ICZpbW1hcC0+aW1fZ3VyOworCXZvbGF0aWxlIGNjc3JfZ3VyX3QgKmd1ciA9ICh2b2lkICopKENGR19NUEM4NXh4X0dVVFNfQUREUik7CiAjZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJR19ERFJfRExMKQogCXVpbnQgdGVtcF9kZHJkbGwgPSAwOwpAQCAtMzM2LDggKzMzNCw3IEBACiAJCSAqIGVuYWJsZSBlcnJvcnMgKi8KIAkJdWludCAqcCA9IDA7CiAJCXVpbnQgaSA9IDA7Ci0JCXZvbGF0aWxlIGltbWFwX3QgKmltbWFwID0gKGltbWFwX3QgKilDRkdfSU1NUjsKLQkJdm9sYXRpbGUgY2Nzcl9kZHJfdCAqZGRyPSAmaW1tYXAtPmltX2RkcjsKKwkJdm9sYXRpbGUgY2Nzcl9kZHJfdCAqZGRyPSAodm9pZCAqKShDRkdfTVBDODV4eF9ERFJfQUREUik7CiAJCWRtYV9pbml0KCk7CiAJCWZvciAoKnAgPSAwOyBwIDwgKHVpbnQgKikoOCAqIDEwMjQpOyBwKyspIHsKIAkJCWlmICgoKHVuc2lnbmVkIGludClwICYgMHgxZikgPT0gMCkgeyBkY2J6KHApOyB9CkBAIC00MjQsOCArNDIxLDcgQEAKICNkZWZpbmUgQ0ZHX0REUl9DT05UUk9MIDB4YzIwMDAwMDAKIAogICAjaWZuZGVmIENGR19SQU1CT09UCi0Jdm9sYXRpbGUgaW1tYXBfdCAqaW1tYXAgPSAoaW1tYXBfdCAqKUNGR19JTU1SOwotCXZvbGF0aWxlIGNjc3JfZGRyX3QgKmRkcj0gJmltbWFwLT5pbV9kZHI7CisJdm9sYXRpbGUgY2Nzcl9kZHJfdCAqZGRyPSAodm9pZCAqKShDRkdfTVBDODV4eF9ERFJfQUREUik7CiAKIAlkZHItPmNzMF9ibmRzCQk9IDB4MDAwMDAwMDc7CiAJZGRyLT5jczFfYm5kcwkJPSAweDAwMTAwMDFmOwpkaWZmIC0tZ2l0IGEvYm9hcmQvc3R4Z3AzL3N0eGdwMy5jIGIvYm9hcmQvc3R4Z3AzL3N0eGdwMy5jCmluZGV4IGE1OGMwNDMuLjM2NDlhY2YgMTAwNjQ0Ci0tLSBhL2JvYXJkL3N0eGdwMy9zdHhncDMuYworKysgYi9ib2FyZC9zdHhncDMvc3R4Z3AzLmMKQEAgLTIwMyw4ICsyMDMsNyBAQAogYm9hcmRfZWFybHlfaW5pdF9mKHZvaWQpCiB7CiAjaWYgZGVmaW5lZChDT05GSUdfUENJKQotICAgIHZvbGF0aWxlIGltbWFwX3QgKmltbXIgPSAoaW1tYXBfdCAqKUNGR19JTU1SOwotICAgIHZvbGF0aWxlIGNjc3JfcGNpeF90ICpwY2kgPSAmaW1tci0+aW1fcGNpeDsKKyAgICB2b2xhdGlsZSBjY3NyX3BjaXhfdCAqcGNpID0gKHZvaWQgKikoQ0ZHX01QQzg1eHhfUENJWF9BRERSKTsKIAogICAgIHBjaS0+cGVlciAmPSAweGZmZmZmZmZkZjsgLyogZGlzYWJsZSBtYXN0ZXIgYWJvcnQgKi8KICNlbmRpZgpAQCAtMjgzLDExICsyODIsMTAgQEAKIHsKIAlsb25nIGRyYW1fc2l6ZSA9IDA7CiAJZXh0ZXJuIGxvbmcgc3BkX3NkcmFtICh2b2lkKTsKLQl2b2xhdGlsZSBpbW1hcF90ICppbW1hcCA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CiAKICNpZiBkZWZpbmVkKENPTkZJR19ERFJfRExMKQogCXsKLQkJdm9sYXRpbGUgY2Nzcl9ndXJfdCAqZ3VyPSAmaW1tYXAtPmltX2d1cjsKKwkJdm9sYXRpbGUgY2Nzcl9ndXJfdCAqZ3VyID0gKHZvaWQgKikoQ0ZHX01QQzg1eHhfR1VUU19BRERSKTsKIAkJdWludCB0ZW1wX2RkcmRsbCA9IDA7CiAKIAkJLyogV29yayBhcm91bmQgdG8gc3RhYmlsaXplIEREUiBETEwgKi8KZGlmZiAtLWdpdCBhL2JvYXJkL3N0eHNzYS9zdHhzc2EuYyBiL2JvYXJkL3N0eHNzYS9zdHhzc2EuYwppbmRleCA5YmFjYjk4Li5lMmIzOGE2IDEwMDY0NAotLS0gYS9ib2FyZC9zdHhzc2Evc3R4c3NhLmMKKysrIGIvYm9hcmQvc3R4c3NhL3N0eHNzYS5jCkBAIC0yNTIsOCArMjUyLDcgQEAKIGJvYXJkX2Vhcmx5X2luaXRfZih2b2lkKQogewogI2lmIGRlZmluZWQoQ09ORklHX1BDSSkKLQl2b2xhdGlsZSBpbW1hcF90ICppbW1yID0gKGltbWFwX3QgKilDRkdfSU1NUjsKLQl2b2xhdGlsZSBjY3NyX3BjaXhfdCAqcGNpID0gJmltbXItPmltX3BjaXg7CisJdm9sYXRpbGUgY2Nzcl9wY2l4X3QgKnBjaSA9ICh2b2lkICopKENGR19NUEM4NXh4X1BDSVhfQUREUik7CiAKIAlwY2ktPnBlZXIgJj0gMHhmZmZmZmZkZjsgLyogZGlzYWJsZSBtYXN0ZXIgYWJvcnQgKi8KICNlbmRpZgpAQCAtMzAyLDggKzMwMSw3IEBACiAKICNpZiBkZWZpbmVkKENPTkZJR19ERFJfRExMKQogCXsKLQkJdm9sYXRpbGUgaW1tYXBfdCAqaW1tYXAgPSAoaW1tYXBfdCAqKUNGR19JTU1SOwotCQl2b2xhdGlsZSBjY3NyX2d1cl90ICpndXI9ICZpbW1hcC0+aW1fZ3VyOworCQl2b2xhdGlsZSBjY3NyX2d1cl90ICpndXIgPSAodm9pZCAqKShDRkdfTVBDODV4eF9HVVRTX0FERFIpOwogCQl1aW50IHRlbXBfZGRyZGxsID0gMDsKIAogCQkvKiBXb3JrIGFyb3VuZCB0byBzdGFiaWxpemUgRERSIERMTCAqLwpkaWZmIC0tZ2l0IGEvYm9hcmQvdHFtODV4eC9zZHJhbS5jIGIvYm9hcmQvdHFtODV4eC9zZHJhbS5jCmluZGV4IDljMWYwODcuLjIwNTNhZGUgMTAwNjQ0Ci0tLSBhL2JvYXJkL3RxbTg1eHgvc2RyYW0uYworKysgYi9ib2FyZC90cW04NXh4L3NkcmFtLmMKQEAgLTU3LDggKzU3LDcgQEAKIGxvbmcgaW50IHNkcmFtX3NldHVwKGludCBjYXNsKQogewogCWludCBpOwotCXZvbGF0aWxlIGltbWFwX3QgKmltbWFwID0gKGltbWFwX3QgKikgQ0ZHX0lNTVI7Ci0Jdm9sYXRpbGUgY2Nzcl9kZHJfdCAqZGRyID0gJmltbWFwLT5pbV9kZHI7CisJdm9sYXRpbGUgY2Nzcl9kZHJfdCAqZGRyID0gKHZvaWQgKikoQ0ZHX01QQzg1eHhfRERSX0FERFIpOwogCXVuc2lnbmVkIGxvbmcgY2ZnX2Rkcl90aW1pbmcxOwogCXVuc2lnbmVkIGxvbmcgY2ZnX2Rkcl9tb2RlOwogCkBAIC0xNTAsOCArMTQ5LDcgQEAKIAkgKiBUaGlzIERMTC1PdmVycmlkZSBvbmx5IHVzZWQgb24gVFFNODU0MCBhbmQgVFFNODU2MAogCSAqLwogCXsKLQkJdm9sYXRpbGUgaW1tYXBfdCAqaW1tYXAgPSAoaW1tYXBfdCAqKSBDRkdfSU1NUjsKLQkJdm9sYXRpbGUgY2Nzcl9ndXJfdCAqZ3VyPSAmaW1tYXAtPmltX2d1cjsKKwkJdm9sYXRpbGUgY2Nzcl9ndXJfdCAqZ3VyID0gKHZvaWQgKikoQ0ZHX01QQzg1eHhfR1VUU19BRERSKTsKIAkJaW50IGkseDsKIAogCQl4ID0gMTA7CmRpZmYgLS1naXQgYS9ib2FyZC90cW04NXh4L3RxbTg1eHguYyBiL2JvYXJkL3RxbTg1eHgvdHFtODV4eC5jCmluZGV4IDI1NmMwNzYuLjVkNWNiMWIgMTAwNjQ0Ci0tLSBhL2JvYXJkL3RxbTg1eHgvdHFtODV4eC5jCisrKyBiL2JvYXJkL3RxbTg1eHgvdHFtODV4eC5jCkBAIC0yNjIsOCArMjYyLDcgQEAKIAogaW50IG1pc2NfaW5pdF9yICh2b2lkKQogewotCXZvbGF0aWxlIGltbWFwX3QgICAgKmltbWFwID0gKGltbWFwX3QgKilDRkdfSU1NUjsKLQl2b2xhdGlsZSBjY3NyX2xiY190ICptZW1jdGwgPSAmaW1tYXAtPmltX2xiYzsKKwl2b2xhdGlsZSBjY3NyX2xiY190ICptZW1jdGwgPSAodm9pZCAqKShDRkdfTVBDODV4eF9MQkNfQUREUik7CiAKIAkvKgogCSAqIEFkanVzdCBmbGFzaCBzdGFydCBhbmQgb2Zmc2V0IHRvIGRldGVjdGVkIHZhbHVlcwpAQCAtMzI0LDkgKzMyMyw4IEBACiAgKi8KIHZvaWQgbG9jYWxfYnVzX2luaXQgKHZvaWQpCiB7Ci0Jdm9sYXRpbGUgaW1tYXBfdCAqaW1tYXAgPSAoaW1tYXBfdCAqKSBDRkdfSU1NUjsKLQl2b2xhdGlsZSBjY3NyX2d1cl90ICpndXIgPSAmaW1tYXAtPmltX2d1cjsKLQl2b2xhdGlsZSBjY3NyX2xiY190ICpsYmMgPSAmaW1tYXAtPmltX2xiYzsKKwl2b2xhdGlsZSBjY3NyX2d1cl90ICpndXIgPSAodm9pZCAqKShDRkdfTVBDODV4eF9HVVRTX0FERFIpOworCXZvbGF0aWxlIGNjc3JfbGJjX3QgKmxiYyA9ICh2b2lkICopKENGR19NUEM4NXh4X0xCQ19BRERSKTsKIAogCXVpbnQgY2xrZGl2OwogCXVpbnQgbGJjX2h6OwpkaWZmIC0tZ2l0IGEvYm9hcmQvdHFtOHh4L2ZsYXNoLmMgYi9ib2FyZC90cW04eHgvZmxhc2guYwppbmRleCBkYjBhN2U1Li40MzQyZWJjIDEwMDY0NAotLS0gYS9ib2FyZC90cW04eHgvZmxhc2guYworKysgYi9ib2FyZC90cW04eHgvZmxhc2guYwpAQCAtMzMsNiArMzMsOCBAQAogCiBERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKIAorI2lmICFkZWZpbmVkKENGR19GTEFTSF9DRklfRFJJVkVSKSAvKiBkbyBub3QgdXNlIGlmIENGSSBkcml2ZXIgaXMgY29uZmlndXJlZCAqLworCiAjaWYgZGVmaW5lZChDT05GSUdfVFFNOHh4TCkgJiYgIWRlZmluZWQoQ09ORklHX1RRTTg2Nk0pIFwKICAgICAmJiAhZGVmaW5lZChDT05GSUdfVFFNODg1RCkKICMgaWZuZGVmIENGR19PUl9USU1JTkdfRkxBU0hfQVRfNTBNSFoKQEAgLTgyOCwzICs4MzAsNSBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KKworI2VuZGlmIC8qICFkZWZpbmVkKENGR19GTEFTSF9DRklfRFJJVkVSKSAqLwpkaWZmIC0tZ2l0IGEvYm9hcmQvdHFtOHh4L3RxbTh4eC5jIGIvYm9hcmQvdHFtOHh4L3RxbTh4eC5jCmluZGV4IGNlYmRjYzAuLmZjZDk0MWUgMTAwNjQ0Ci0tLSBhL2JvYXJkL3RxbTh4eC90cW04eHguYworKysgYi9ib2FyZC90cW04eHgvdHFtOHh4LmMKQEAgLTM3LDYgKzM3LDcgQEAKIAogI2RlZmluZQlfTk9UX1VTRURfCTB4RkZGRkZGRkYKIAorLyogVVBNIGluaXRpYWxpemF0aW9uIHRhYmxlIGZvciBTRFJBTTogNDAsIDUwLCA2NiBNSHogQ0xLT1VUIEAgQ0FTIGxhdGVuY3kgMiwgdFdSPTIgKi8KIGNvbnN0IHVpbnQgc2RyYW1fdGFibGVbXSA9CiB7CiAJLyoKQEAgLTYzLDE0ICs2NCwxNCBAQAogCS8qCiAJICogU2luZ2xlIFdyaXRlLiAoT2Zmc2V0IDE4IGluIFVQTUEgUkFNKQogCSAqLwotCTB4MUYwREZDMDQsIDB4RUVBQkJDMDAsIDB4MDFCMjdDMDQsIDB4MUZGNUZDNDcsIC8qIGxhc3QgKi8KLQlfTk9UX1VTRURfLCBfTk9UX1VTRURfLCBfTk9UX1VTRURfLCBfTk9UX1VTRURfLAorCTB4MUYwREZDMDQsIDB4RUVBQkJDMDAsIDB4MTFCNzdDMDQsIDB4RUZGQUZDNDQsCisJMHgxRkY1RkM0NywgLyogbGFzdCAqLworCQkgICAgX05PVF9VU0VEXywgX05PVF9VU0VEXywgX05PVF9VU0VEXywKIAkvKgogCSAqIEJ1cnN0IFdyaXRlLiAoT2Zmc2V0IDIwIGluIFVQTUEgUkFNKQogCSAqLwogCTB4MUYwREZDMDQsIDB4RUVBQkJDMDAsIDB4MTBBNzdDMDAsIDB4RjBBRkZDMDAsCi0JMHhGMEFGRkMwMCwgMHhFMUJBRkMwNCwgMHgxRkY1RkM0NywgLyogbGFzdCAqLwotCQkJCQkgICAgX05PVF9VU0VEXywKKwkweEYwQUZGQzAwLCAweEYwQUZGQzA0LCAweEUxQkFGQzQ0LCAweDFGRjVGQzQ3LCAvKiBsYXN0ICovCiAJX05PVF9VU0VEXywgX05PVF9VU0VEXywgX05PVF9VU0VEXywgX05PVF9VU0VEXywKIAlfTk9UX1VTRURfLCBfTk9UX1VTRURfLCBfTk9UX1VTRURfLCBfTk9UX1VTRURfLAogCS8qCkBAIC04Myw3ICs4NCw3IEBACiAJLyoKIAkgKiBFeGNlcHRpb24uIChPZmZzZXQgM2MgaW4gVVBNQSBSQU0pCiAJICovCi0JMHg3RkZGRkMwNywgLyogbGFzdCAqLworCTB4RkZGRkZDMDcsIC8qIGxhc3QgKi8KIAkJICAgIF9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sCiB9OwogCkBAIC0xODMsNyArMTg0LDcgQEAKICNpZm5kZWYJQ09ORklHX0NBTl9EUklWRVIKIAlpZiAoKGJvYXJkX3R5cGUgIT0gJ0wnKSAmJgogCSAgICAoYm9hcmRfdHlwZSAhPSAnTScpICYmCi0JICAgIChib2FyZF90eXBlICE9ICdEJykgKSB7CS8qICJMIiBhbmQgIk0iIHR5cGUgYm9hcmRzIGhhdmUgb25seSBvbmUgYmFuayBTRFJBTSAqLworCSAgICAoYm9hcmRfdHlwZSAhPSAnRCcpICkgewkvKiBvbmx5IG9uZSBTRFJBTSBiYW5rIG9uIEwsIE0gYW5kIEQgbW9kdWxlcyAqLwogCQltZW1jdGwtPm1lbWNfb3IzID0gQ0ZHX09SM19QUkVMSU07CiAJCW1lbWN0bC0+bWVtY19icjMgPSBDRkdfQlIzX1BSRUxJTTsKIAl9CkBAIC0yNTksNyArMjYwLDcgQEAKICNpZm5kZWYJQ09ORklHX0NBTl9EUklWRVIKIAlpZiAoKGJvYXJkX3R5cGUgIT0gJ0wnKSAmJgogCSAgICAoYm9hcmRfdHlwZSAhPSAnTScpICYmCi0JICAgIChib2FyZF90eXBlICE9ICdEJykgKSB7CS8qICJMIiBhbmQgIk0iIHR5cGUgYm9hcmRzIGhhdmUgb25seSBvbmUgYmFuayBTRFJBTSAqLworCSAgICAoYm9hcmRfdHlwZSAhPSAnRCcpICkgewkvKiBvbmx5IG9uZSBTRFJBTSBiYW5rIG9uIEwsIE0gYW5kIEQgbW9kdWxlcyAqLwogCQkvKgogCQkgKiBDaGVjayBCYW5rIDEgTWVtb3J5IFNpemUKIAkJICogdXNlIGN1cnJlbnQgY29sdW1uIHNldHRpbmdzCmRpZmYgLS1naXQgYS9jb21tb24vTWFrZWZpbGUgYi9jb21tb24vTWFrZWZpbGUKaW5kZXggYWNlOGNjNy4uN2JlODlhNCAxMDA2NDQKLS0tIGEvY29tbW9uL01ha2VmaWxlCisrKyBiL2NvbW1vbi9NYWtlZmlsZQpAQCAtNTUsNyArNTUsNyBAQAogQ09CSlMtJChDT05GSUdfQ01EX0VYVDIpICs9IGNtZF9leHQyLm8KIENPQkpTLSQoQ09ORklHX0NNRF9GQVQpICs9IGNtZF9mYXQubwogQ09CSlMteSArPSBjbWRfZmRjLm8KLUNPQkpTLSQoQ09ORklHX09GX0xJQkZEVCkgKz0gY21kX2ZkdC5vCitDT0JKUy0kKENPTkZJR19PRl9MSUJGRFQpICs9IGNtZF9mZHQubyBmZHRfc3VwcG9ydC5vCiBDT0JKUy0kKENPTkZJR19DTURfRkRPUykgKz0gY21kX2Zkb3MubwogQ09CSlMtJChDT05GSUdfQ01EX0ZMQVNIKSArPSBjbWRfZmxhc2gubwogaWZkZWYgQ09ORklHX0ZQR0EKQEAgLTEwNSw3ICsxMDUsNiBAQAogQ09CSlMteSArPSBlbnZfbnZyYW0ubwogQ09CSlMteSArPSBlbnZfbm93aGVyZS5vCiBDT0JKUy15ICs9IGV4cG9ydHMubwotQ09CSlMteSArPSBmZHRfc3VwcG9ydC5vCiBDT0JKUy15ICs9IGZsYXNoLm8KIENPQkpTLXkgKz0gZnBnYS5vCiBDT0JKUy15ICs9IGZ0X2J1aWxkLm8KZGlmZiAtLWdpdCBhL2NvbW1vbi9jbWRfYm9vdG0uYyBiL2NvbW1vbi9jbWRfYm9vdG0uYwppbmRleCBkODE2MzQ5Li45NTQ2NzI5IDEwMDY0NAotLS0gYS9jb21tb24vY21kX2Jvb3RtLmMKKysrIGIvY29tbW9uL2NtZF9ib290bS5jCkBAIC0yNjAsNiArMjYwLDggQEAKIAlpZiAoaGRyLT5paF9hcmNoICE9IElIX0NQVV9OSU9TMikKICNlbGlmIGRlZmluZWQoX19QUENfXykKIAlpZiAoaGRyLT5paF9hcmNoICE9IElIX0NQVV9QUEMpCisjZWxpZiBkZWZpbmVkKF9fc2hfXykKKwlpZiAoaGRyLT5paF9hcmNoICE9IElIX0NQVV9TSCkKICNlbHNlCiAjIGVycm9yIFVua25vd24gQ1BVIHR5cGUKICNlbmRpZgpkaWZmIC0tZ2l0IGEvY29tbW9uL2NtZF9mZHQuYyBiL2NvbW1vbi9jbWRfZmR0LmMKaW5kZXggNjI5YzliNC4uNDYzOTEyNiAxMDA2NDQKLS0tIGEvY29tbW9uL2NtZF9mZHQuYworKysgYi9jb21tb24vY21kX2ZkdC5jCkBAIC01ODgsNyArNTg4LDcgQEAKIAkJCXByaW50ZigiJXMgJXNcbiIsIHBhdGhwLCBwcm9wKTsKIAkJCXJldHVybiAwOwogCQl9IGVsc2UgaWYgKGxlbiA+IDApIHsKLQkJCXByaW50ZigiJXM9IiwgcHJvcCk7CisJCQlwcmludGYoIiVzID0gIiwgcHJvcCk7CiAJCQlwcmludF9kYXRhIChub2RlcCwgbGVuKTsKIAkJCXByaW50ZigiXG4iKTsKIAkJCXJldHVybiAwOwpAQCAtNjQ5LDcgKzY0OSw3IEBACiAJCQkJCQlwYXRocCk7CiAJCQl9IGVsc2UgewogCQkJCWlmIChsZXZlbCA8PSBkZXB0aCkgewotCQkJCQlwcmludGYoIiVzJXM9IiwKKwkJCQkJcHJpbnRmKCIlcyVzID0gIiwKIAkJCQkJCSZ0YWJzW01BWF9MRVZFTCAtIGxldmVsXSwKIAkJCQkJCXBhdGhwKTsKIAkJCQkJcHJpbnRfZGF0YSAobm9kZXAsIGxlbik7CmRpZmYgLS1naXQgYS9jb21tb24vY21kX2lkZS5jIGIvY29tbW9uL2NtZF9pZGUuYwppbmRleCA4MjFkY2ZmLi5jMzhiZTRmIDEwMDY0NAotLS0gYS9jb21tb24vY21kX2lkZS5jCisrKyBiL2NvbW1vbi9jbWRfaWRlLmMKQEAgLTg4Niw3ICs4ODYsNyBAQAogI2VuZGlmCS8qIF9fTElUVExFX0VORElBTiB8fCBDT05GSUdfQVUxWDAwICovCiAKIAotI2lmIGRlZmluZWQoX19QUENfXykgfHwgZGVmaW5lZChDT05GSUdfUFhBX1BDTUNJQSkKKyNpZiBkZWZpbmVkKF9fUFBDX18pIHx8IGRlZmluZWQoQ09ORklHX1BYQV9QQ01DSUEpIHx8IGRlZmluZWQoQ09ORklHX1NIKQogc3RhdGljIHZvaWQKIG91dHB1dF9kYXRhKGludCBkZXYsIHVsb25nICpzZWN0X2J1ZiwgaW50IHdvcmRzKQogewpAQCAtOTM4LDcgKzkzOCw3IEBACiB9CiAjZW5kaWYJLyogX19QUENfXyAqLwogCi0jaWYgZGVmaW5lZChfX1BQQ19fKSB8fCBkZWZpbmVkKENPTkZJR19QWEFfUENNQ0lBKQorI2lmIGRlZmluZWQoX19QUENfXykgfHwgZGVmaW5lZChDT05GSUdfUFhBX1BDTUNJQSkgfHwgZGVmaW5lZChDT05GSUdfU0gpCiBzdGF0aWMgdm9pZAogaW5wdXRfZGF0YShpbnQgZGV2LCB1bG9uZyAqc2VjdF9idWYsIGludCB3b3JkcykKIHsKZGlmZiAtLWdpdCBhL2NvbW1vbi9mZHRfc3VwcG9ydC5jIGIvY29tbW9uL2ZkdF9zdXBwb3J0LmMKaW5kZXggYzY3YmIzZC4uYjVlZTZlOSAxMDA2NDQKLS0tIGEvY29tbW9uL2ZkdF9zdXBwb3J0LmMKKysrIGIvY29tbW9uL2ZkdF9zdXBwb3J0LmMKQEAgLTI0LDEzICsyNCwxMSBAQAogI2luY2x1ZGUgPGNvbW1vbi5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLQotI2lmZGVmIENPTkZJR19PRl9MSUJGRFQKLQogI2luY2x1ZGUgPGFzbS9nbG9iYWxfZGF0YS5oPgogI2luY2x1ZGUgPGZkdC5oPgogI2luY2x1ZGUgPGxpYmZkdC5oPgogI2luY2x1ZGUgPGZkdF9zdXBwb3J0Lmg+CisjaW5jbHVkZSA8ZXhwb3J0cy5oPgogCiAvKgogICogR2xvYmFsIGRhdGEgKGZvciB0aGUgZ2QtPmJkKQpAQCAtNzAsNiArNjgsNDMgQEAKIAlyZXR1cm4gZmR0X3NldHByb3AoZmR0LCBub2Rlb2ZmLCBwcm9wLCB2YWwsIGxlbik7CiB9CiAKKyNpZmRlZiBDT05GSUdfT0ZfU1RET1VUX1ZJQV9BTElBUworc3RhdGljIGludCBmZHRfZml4dXBfc3Rkb3V0KHZvaWQgKmZkdCwgaW50IGNob29zZW5vZmYpCit7CisJaW50IGVyciA9IDA7CisjaWZkZWYgQ09ORklHX0NPTlNfSU5ERVgKKwlpbnQgbm9kZTsKKwljaGFyIHNlcm5hbWVbOV0gPSB7IDAgfTsKKwljb25zdCBjaGFyICpwYXRoOworCisJc3ByaW50ZihzZXJuYW1lLCAic2VyaWFsJWQiLCBDT05GSUdfQ09OU19JTkRFWCAtIDEpOworCisJZXJyID0gbm9kZSA9IGZkdF9wYXRoX29mZnNldChmZHQsICIvYWxpYXNlcyIpOworCWlmIChub2RlID49IDApIHsKKwkJaW50IGxlbjsKKwkJcGF0aCA9IGZkdF9nZXRwcm9wKGZkdCwgbm9kZSwgc2VybmFtZSwgJmxlbik7CisJCWlmIChwYXRoKSB7CisJCQljaGFyICpwID0gbWFsbG9jKGxlbik7CisJCQllcnIgPSAtRkRUX0VSUl9OT1NQQUNFOworCQkJaWYgKHApIHsKKwkJCQltZW1jcHkocCwgcGF0aCwgbGVuKTsKKwkJCQllcnIgPSBmZHRfc2V0cHJvcChmZHQsIGNob29zZW5vZmYsCisJCQkJCSJsaW51eCxzdGRvdXQtcGF0aCIsIHAsIGxlbik7CisJCQkJZnJlZShwKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWVyciA9IGxlbjsKKwkJfQorCX0KKyNlbmRpZgorCWlmIChlcnIgPCAwKQorCQlwcmludGYoIldBUk5JTkc6IGNvdWxkIG5vdCBzZXQgbGludXgsc3Rkb3V0LXBhdGggJXMuXG4iLAorCQkJCWZkdF9zdHJlcnJvcihlcnIpKTsKKworCXJldHVybiBlcnI7Cit9CisjZW5kaWYKKwogaW50IGZkdF9jaG9zZW4odm9pZCAqZmR0LCB1bG9uZyBpbml0cmRfc3RhcnQsIHVsb25nIGluaXRyZF9lbmQsIGludCBmb3JjZSkKIHsKIAlpbnQgICBub2Rlb2Zmc2V0OwpAQCAtMTYwLDYgKzE5NSwxMSBAQAogCQkJcHJpbnRmKCJXQVJOSU5HOiBjb3VsZCBub3Qgc2V0IGxpbnV4LGluaXRyZC1lbmQgJXMuXG4iLAogCQkJCWZkdF9zdHJlcnJvcihlcnIpKTsKIAl9CisKKyNpZmRlZiBDT05GSUdfT0ZfU1RET1VUX1ZJQV9BTElBUworCWVyciA9IGZkdF9maXh1cF9zdGRvdXQoZmR0LCBub2Rlb2Zmc2V0KTsKKyNlbmRpZgorCiAjaWZkZWYgT0ZfU1RET1VUX1BBVEgKIAllcnIgPSBmZHRfc2V0cHJvcChmZHQsIG5vZGVvZmZzZXQsCiAJCSJsaW51eCxzdGRvdXQtcGF0aCIsIE9GX1NURE9VVF9QQVRILCBzdHJsZW4oT0ZfU1RET1VUX1BBVEgpKzEpOwpAQCAtNDQxLDYgKzQ4MSw4NyBAQAogCWRvX2ZpeHVwX2J5X2NvbXBhdChmZHQsIGNvbXBhdCwgcHJvcCwgJnZhbCwgNCwgY3JlYXRlKTsKIH0KIAoraW50IGZkdF9maXh1cF9tZW1vcnkodm9pZCAqYmxvYiwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSkKK3sKKwlpbnQgZXJyLCBub2Rlb2Zmc2V0LCBsZW4gPSAwOworCXU4IHRtcFsxNl07CisJY29uc3QgdTMyICphZGRyY2VsbCwgKnNpemVjZWxsOworCisJZXJyID0gZmR0X2NoZWNrX2hlYWRlcihibG9iKTsKKwlpZiAoZXJyIDwgMCkgeworCQlwcmludGYoIiVzOiAlc1xuIiwgX19GVU5DVElPTl9fLCBmZHRfc3RyZXJyb3IoZXJyKSk7CisJCXJldHVybiBlcnI7CisJfQorCisJLyogdXBkYXRlLCBvciBhZGQgYW5kIHVwZGF0ZSAvbWVtb3J5IG5vZGUgKi8KKwlub2Rlb2Zmc2V0ID0gZmR0X3BhdGhfb2Zmc2V0KGJsb2IsICIvbWVtb3J5Iik7CisJaWYgKG5vZGVvZmZzZXQgPCAwKSB7CisJCW5vZGVvZmZzZXQgPSBmZHRfYWRkX3N1Ym5vZGUoYmxvYiwgMCwgIm1lbW9yeSIpOworCQlpZiAobm9kZW9mZnNldCA8IDApCisJCQlwcmludGYoIldBUk5JTkc6IGNvdWxkIG5vdCBjcmVhdGUgL21lbW9yeTogJXMuXG4iLAorCQkJCQlmZHRfc3RyZXJyb3Iobm9kZW9mZnNldCkpOworCQlyZXR1cm4gbm9kZW9mZnNldDsKKwl9CisJZXJyID0gZmR0X3NldHByb3AoYmxvYiwgbm9kZW9mZnNldCwgImRldmljZV90eXBlIiwgIm1lbW9yeSIsCisJCQlzaXplb2YoIm1lbW9yeSIpKTsKKwlpZiAoZXJyIDwgMCkgeworCQlwcmludGYoIldBUk5JTkc6IGNvdWxkIG5vdCBzZXQgJXMgJXMuXG4iLCAiZGV2aWNlX3R5cGUiLAorCQkJCWZkdF9zdHJlcnJvcihlcnIpKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlhZGRyY2VsbCA9IGZkdF9nZXRwcm9wKGJsb2IsIDAsICIjYWRkcmVzcy1jZWxscyIsIE5VTEwpOworCS8qIHVzZSBzaGlmdHMgYW5kIG1hc2sgdG8gZW5zdXJlIGVuZGlhbm5lc3MgKi8KKwlpZiAoKGFkZHJjZWxsKSAmJiAoKmFkZHJjZWxsID09IDIpKSB7CisJCXRtcFswXSA9IChzdGFydCA+PiA1NikgJiAweGZmOworCQl0bXBbMV0gPSAoc3RhcnQgPj4gNDgpICYgMHhmZjsKKwkJdG1wWzJdID0gKHN0YXJ0ID4+IDQwKSAmIDB4ZmY7CisJCXRtcFszXSA9IChzdGFydCA+PiAzMikgJiAweGZmOworCQl0bXBbNF0gPSAoc3RhcnQgPj4gMjQpICYgMHhmZjsKKwkJdG1wWzVdID0gKHN0YXJ0ID4+IDE2KSAmIDB4ZmY7CisJCXRtcFs2XSA9IChzdGFydCA+PiAgOCkgJiAweGZmOworCQl0bXBbN10gPSAoc3RhcnQgICAgICApICYgMHhmZjsKKwkJbGVuID0gODsKKwl9IGVsc2UgeworCQl0bXBbMF0gPSAoc3RhcnQgPj4gMjQpICYgMHhmZjsKKwkJdG1wWzFdID0gKHN0YXJ0ID4+IDE2KSAmIDB4ZmY7CisJCXRtcFsyXSA9IChzdGFydCA+PiAgOCkgJiAweGZmOworCQl0bXBbM10gPSAoc3RhcnQgICAgICApICYgMHhmZjsKKwkJbGVuID0gNDsKKwl9CisKKwlzaXplY2VsbCA9IGZkdF9nZXRwcm9wKGJsb2IsIDAsICIjc2l6ZS1jZWxscyIsIE5VTEwpOworCS8qIHVzZSBzaGlmdHMgYW5kIG1hc2sgdG8gZW5zdXJlIGVuZGlhbm5lc3MgKi8KKwlpZiAoKHNpemVjZWxsKSAmJiAoKnNpemVjZWxsID09IDIpKSB7CisJCXRtcFswK2xlbl0gPSAoc2l6ZSA+PiA1NikgJiAweGZmOworCQl0bXBbMStsZW5dID0gKHNpemUgPj4gNDgpICYgMHhmZjsKKwkJdG1wWzIrbGVuXSA9IChzaXplID4+IDQwKSAmIDB4ZmY7CisJCXRtcFszK2xlbl0gPSAoc2l6ZSA+PiAzMikgJiAweGZmOworCQl0bXBbNCtsZW5dID0gKHNpemUgPj4gMjQpICYgMHhmZjsKKwkJdG1wWzUrbGVuXSA9IChzaXplID4+IDE2KSAmIDB4ZmY7CisJCXRtcFs2K2xlbl0gPSAoc2l6ZSA+PiAgOCkgJiAweGZmOworCQl0bXBbNytsZW5dID0gKHNpemUgICAgICApICYgMHhmZjsKKwkJbGVuICs9IDg7CisJfSBlbHNlIHsKKwkJdG1wWzArbGVuXSA9IChzaXplID4+IDI0KSAmIDB4ZmY7CisJCXRtcFsxK2xlbl0gPSAoc2l6ZSA+PiAxNikgJiAweGZmOworCQl0bXBbMitsZW5dID0gKHNpemUgPj4gIDgpICYgMHhmZjsKKwkJdG1wWzMrbGVuXSA9IChzaXplICAgICAgKSAmIDB4ZmY7CisJCWxlbiArPSA0OworCX0KKworCWVyciA9IGZkdF9zZXRwcm9wKGJsb2IsIG5vZGVvZmZzZXQsICJyZWciLCB0bXAsIGxlbik7CisJaWYgKGVyciA8IDApIHsKKwkJcHJpbnRmKCJXQVJOSU5HOiBjb3VsZCBub3Qgc2V0ICVzICVzLlxuIiwKKwkJCQkicmVnIiwgZmR0X3N0cmVycm9yKGVycikpOworCQlyZXR1cm4gZXJyOworCX0KKwlyZXR1cm4gMDsKK30KKworI2lmIGRlZmluZWQoQ09ORklHX0hBU19FVEgwKSB8fCBkZWZpbmVkKENPTkZJR19IQVNfRVRIMSkgfHxcCisgICAgZGVmaW5lZChDT05GSUdfSEFTX0VUSDIpIHx8IGRlZmluZWQoQ09ORklHX0hBU19FVEgzKQorCiB2b2lkIGZkdF9maXh1cF9ldGhlcm5ldCh2b2lkICpmZHQsIGJkX3QgKmJkKQogewogCWludCBub2RlOwpAQCAtNDg2LDUgKzYwNyw0IEBACiAjZW5kaWYKIAl9CiB9Ci0KLSNlbmRpZiAvKiBDT05GSUdfT0ZfTElCRkRUICovCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NwdS9hdDMyYXAvYXQzMmFwNzAwMC9NYWtlZmlsZSBiL2NwdS9hdDMyYXAvYXQzMmFwNzAweC9NYWtlZmlsZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gY3B1L2F0MzJhcC9hdDMyYXA3MDAwL01ha2VmaWxlCnJlbmFtZSB0byBjcHUvYXQzMmFwL2F0MzJhcDcwMHgvTWFrZWZpbGUKZGlmZiAtLWdpdCBhL2NwdS9hdDMyYXAvYXQzMmFwNzAwMC9ncGlvLmMgYi9jcHUvYXQzMmFwL2F0MzJhcDcwMHgvZ3Bpby5jCnNpbWlsYXJpdHkgaW5kZXggOTUlCnJlbmFtZSBmcm9tIGNwdS9hdDMyYXAvYXQzMmFwNzAwMC9ncGlvLmMKcmVuYW1lIHRvIGNwdS9hdDMyYXAvYXQzMmFwNzAweC9ncGlvLmMKaW5kZXggNTJmNTM3Mi4uODU5MTI0YSAxMDA2NDQKLS0tIGEvY3B1L2F0MzJhcC9hdDMyYXA3MDAwL2dwaW8uYworKysgYi9jcHUvYXQzMmFwL2F0MzJhcDcwMHgvZ3Bpby5jCkBAIC0yMSw2ICsyMSw3IEBACiAgKi8KICNpbmNsdWRlIDxjb21tb24uaD4KIAorI2luY2x1ZGUgPGFzbS9hcmNoL2NoaXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9ncGlvLmg+CiAKIC8qCkBAIC01Miw2ICs1Myw3IEBACiAjZW5kaWYKIH0KIAorI2lmZGVmIEFUMzJBUDcwMHhfQ0hJUF9IQVNfVVNBUlQKIHZvaWQgZ3Bpb19lbmFibGVfdXNhcnQwKHZvaWQpCiB7CiAJZ3Bpb19zZWxlY3RfcGVyaXBoX0IoR1BJT19QSU5fUEE4LCAwKTsKQEAgLTcyLDEwICs3NCwxMiBAQAogCiB2b2lkIGdwaW9fZW5hYmxlX3VzYXJ0Myh2b2lkKQogeworCWdwaW9fc2VsZWN0X3BlcmlwaF9CKEdQSU9fUElOX1BCMTcsIDApOwogCWdwaW9fc2VsZWN0X3BlcmlwaF9CKEdQSU9fUElOX1BCMTgsIDApOwotCWdwaW9fc2VsZWN0X3BlcmlwaF9CKEdQSU9fUElOX1BCMTksIDApOwogfQorI2VuZGlmCiAKKyNpZmRlZiBBVDMyQVA3MDB4X0NISVBfSEFTX01BQ0IKIHZvaWQgZ3Bpb19lbmFibGVfbWFjYjAodm9pZCkKIHsKIAlncGlvX3NlbGVjdF9wZXJpcGhfQShHUElPX1BJTl9QQzMsICAwKTsJLyogVFhEMAkqLwpAQCAtMTI1LDcgKzEyOSw5IEBACiAJZ3Bpb19zZWxlY3RfcGVyaXBoX0IoR1BJT19QSU5fUEQxNSwgMCk7CS8qIFNQRAkqLwogI2VuZGlmCiB9CisjZW5kaWYKIAorI2lmZGVmIEFUMzJBUDcwMHhfQ0hJUF9IQVNfTU1DSQogdm9pZCBncGlvX2VuYWJsZV9tbWNpKHZvaWQpCiB7CiAJZ3Bpb19zZWxlY3RfcGVyaXBoX0EoR1BJT19QSU5fUEExMCwgMCk7CS8qIENMSwkgKi8KQEAgLTEzNSwzICsxNDEsNCBAQAogCWdwaW9fc2VsZWN0X3BlcmlwaF9BKEdQSU9fUElOX1BBMTQsIDApOwkvKiBEQVRBMiAqLwogCWdwaW9fc2VsZWN0X3BlcmlwaF9BKEdQSU9fUElOX1BBMTUsIDApOwkvKiBEQVRBMyAqLwogfQorI2VuZGlmCmRpZmYgLS1naXQgYS9jcHUvYXQzMmFwL2F0bWVsX21jaS5jIGIvY3B1L2F0MzJhcC9hdG1lbF9tY2kuYwppbmRleCBjZjQ4YmUxLi5mNTlkZmI1IDEwMDY0NAotLS0gYS9jcHUvYXQzMmFwL2F0bWVsX21jaS5jCisrKyBiL2NwdS9hdDMyYXAvYXRtZWxfbWNpLmMKQEAgLTE5OCwxMSArMTk4LDExIEBACiAKIAkvKiBQdXQgdGhlIGRldmljZSBpbnRvIFRyYW5zZmVyIHN0YXRlICovCiAJcmV0ID0gbW1jX2NtZChNTUNfQ01EX1NFTEVDVF9DQVJELCBtbWNfcmNhIDw8IDE2LCByZXNwLCBSMSB8IE5DUik7Ci0JaWYgKHJldCkgZ290byBmYWlsOworCWlmIChyZXQpIGdvdG8gb3V0OwogCiAJLyogU2V0IGJsb2NrIGxlbmd0aCAqLwogCXJldCA9IG1tY19jbWQoTU1DX0NNRF9TRVRfQkxPQ0tMRU4sIG1tY19ibGtkZXYuYmxrc3osIHJlc3AsIFIxIHwgTkNSKTsKLQlpZiAocmV0KSBnb3RvIGZhaWw7CisJaWYgKHJldCkgZ290byBvdXQ7CiAKIAlwcl9kZWJ1ZygiTUNJX0RUT1IgPSAlMDhseFxuIiwgbW1jaV9yZWFkbChEVE9SKSk7CiAKQEAgLTIxMSw3ICsyMTEsNyBAQAogCQkJICAgICAgc3RhcnQgKiBtbWNfYmxrZGV2LmJsa3N6LCByZXNwLAogCQkJICAgICAgKFIxIHwgTkNSIHwgVFJDTURfU1RBUlQgfCBUUkRJUl9SRUFECiAJCQkgICAgICAgfCBUUlRZUF9CTE9DSykpOwotCQlpZiAocmV0KSBnb3RvIGZhaWw7CisJCWlmIChyZXQpIGdvdG8gb3V0OwogCiAJCXJldCA9IC1FSU87CiAJCXdvcmRjb3VudCA9IDA7CkBAIC0yMTksNyArMjE5LDcgQEAKIAkJCWRvIHsKIAkJCQlzdGF0dXMgPSBtbWNpX3JlYWRsKFNSKTsKIAkJCQlpZiAoc3RhdHVzICYgKEVSUk9SX0ZMQUdTIHwgTU1DSV9CSVQoT1ZSRSkpKQotCQkJCQlnb3RvIGZhaWw7CisJCQkJCWdvdG8gcmVhZF9lcnJvcjsKIAkJCX0gd2hpbGUgKCEoc3RhdHVzICYgTU1DSV9CSVQoUlhSRFkpKSk7CiAKIAkJCWlmIChzdGF0dXMgJiBNTUNJX0JJVChSWFJEWSkpIHsKQEAgLTI0NCw5ICsyNDQsMTAgQEAKIAltbWNfY21kKE1NQ19DTURfU0VMRUNUX0NBUkQsIDAsIHJlc3AsIE5DUik7CiAJcmV0dXJuIGk7CiAKLWZhaWw6CityZWFkX2Vycm9yOgogCW1tY19jbWQoTU1DX0NNRF9TRU5EX1NUQVRVUywgbW1jX3JjYSA8PCAxNiwgJmNhcmRfc3RhdHVzLCBSMSB8IE5DUik7Ci0JcHJpbnRmKCJtbWM6IGJyZWFkIGZhaWxlZCwgY2FyZCBzdGF0dXMgPSAlMDh4XG4iLCBjYXJkX3N0YXR1cyk7CisJcHJpbnRmKCJtbWM6IGJyZWFkIGZhaWxlZCwgc3RhdHVzID0gJTA4eCwgY2FyZCBzdGF0dXMgPSAlMDh4XG4iLAorCSAgICAgICBzdGF0dXMsIGNhcmRfc3RhdHVzKTsKIAlnb3RvIG91dDsKIH0KIApkaWZmIC0tZ2l0IGEvY3B1L21wYzgzeHgvY3B1LmMgYi9jcHUvbXBjODN4eC9jcHUuYwppbmRleCBiMmMzNWQzLi5mMWVhMTdkIDEwMDY0NAotLS0gYS9jcHUvbXBjODN4eC9jcHUuYworKysgYi9jcHUvbXBjODN4eC9jcHUuYwpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPGZ0X2J1aWxkLmg+CiAjZWxpZiBkZWZpbmVkKENPTkZJR19PRl9MSUJGRFQpCiAjaW5jbHVkZSA8bGliZmR0Lmg+CisjaW5jbHVkZSA8ZmR0X3N1cHBvcnQuaD4KICNlbmRpZgogCiBERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKQEAgLTUyNiw3ICs1MjcsNiBAQAogCWludCBub2Rlb2Zmc2V0OwogCWludCBlcnI7CiAJaW50IGo7Ci0JaW50IHRtcFsyXTsKIAogCWZvciAoaiA9IDA7IGogPCAoc2l6ZW9mKGZpeHVwX3Byb3BzKSAvIHNpemVvZihmaXh1cF9wcm9wc1swXSkpOyBqKyspIHsKIAkJbm9kZW9mZnNldCA9IGZkdF9wYXRoX29mZnNldChibG9iLCBmaXh1cF9wcm9wc1tqXS5ub2RlKTsKQEAgLTU0MywyMSArNTQzLDcgQEAKIAkJfQogCX0KIAotCS8qIHVwZGF0ZSwgb3IgYWRkIGFuZCB1cGRhdGUgL21lbW9yeSBub2RlICovCi0Jbm9kZW9mZnNldCA9IGZkdF9wYXRoX29mZnNldChibG9iLCAiL21lbW9yeSIpOwotCWlmIChub2Rlb2Zmc2V0IDwgMCkgewotCQlub2Rlb2Zmc2V0ID0gZmR0X2FkZF9zdWJub2RlKGJsb2IsIDAsICJtZW1vcnkiKTsKLQkJaWYgKG5vZGVvZmZzZXQgPCAwKQotCQkJZGVidWcoImZhaWxlZCB0byBhZGQgL21lbW9yeSBub2RlOiAlc1xuIiwKLQkJCSAgICAgIGZkdF9zdHJlcnJvcihub2Rlb2Zmc2V0KSk7Ci0JfQotCWlmIChub2Rlb2Zmc2V0ID49IDApIHsKLQkJZmR0X3NldHByb3AoYmxvYiwgbm9kZW9mZnNldCwgImRldmljZV90eXBlIiwKLQkJCSAgICAibWVtb3J5Iiwgc2l6ZW9mKCJtZW1vcnkiKSk7Ci0JCXRtcFswXSA9IGNwdV90b19iZTMyKGJkLT5iaV9tZW1zdGFydCk7Ci0JCXRtcFsxXSA9IGNwdV90b19iZTMyKGJkLT5iaV9tZW1zaXplKTsKLQkJZmR0X3NldHByb3AoYmxvYiwgbm9kZW9mZnNldCwgInJlZyIsIHRtcCwgc2l6ZW9mKHRtcCkpOwotCX0KKwlmZHRfZml4dXBfbWVtb3J5KGJsb2IsICh1NjQpYmQtPmJpX21lbXN0YXJ0LCAodTY0KWJkLT5iaV9tZW1zaXplKTsKIH0KICNlbGlmIGRlZmluZWQoQ09ORklHX09GX0ZMQVRfVFJFRSkKIHZvaWQKZGlmZiAtLWdpdCBhL2NwdS9tcGM4NXh4L01ha2VmaWxlIGIvY3B1L21wYzg1eHgvTWFrZWZpbGUKaW5kZXggMzIwOTFmYS4uZDE3OWQ3MCAxMDA2NDQKLS0tIGEvY3B1L21wYzg1eHgvTWFrZWZpbGUKKysrIGIvY3B1L21wYzg1eHgvTWFrZWZpbGUKQEAgLTI5LDggKzI5LDEwIEBACiBMSUIJPSAkKG9iailsaWIkKENQVSkuYQogCiBTVEFSVAk9IHN0YXJ0Lm8gcmVzZXR2ZWMubworQ09CSlMtJChDT05GSUdfT0ZfTElCRkRUKSArPSBmZHQubwogQ09CSlMJPSB0cmFwcy5vIGNwdS5vIGNwdV9pbml0Lm8gc3BlZWQubyBpbnRlcnJ1cHRzLm8gXAotCSAgcGNpLm8gc2VyaWFsX3NjYy5vIGNvbW1wcm9jLm8gZXRoZXJfZmNjLm8gc3BkX3NkcmFtLm8gcWVfaW8ubworCSAgcGNpLm8gc2VyaWFsX3NjYy5vIGNvbW1wcm9jLm8gZXRoZXJfZmNjLm8gc3BkX3NkcmFtLm8gcWVfaW8ubyBcCisJICAkKENPQkpTLXkpCiAKIFNSQ1MJOj0gJChTVEFSVDoubz0uUykgJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKIE9CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpICQoQ09CSlMpKQpkaWZmIC0tZ2l0IGEvY3B1L21wYzg1eHgvY29tbXByb2MuYyBiL2NwdS9tcGM4NXh4L2NvbW1wcm9jLmMKaW5kZXggMzUwNGQ1MC4uYjBlY2QyNSAxMDA2NDQKLS0tIGEvY3B1L21wYzg1eHgvY29tbXByb2MuYworKysgYi9jcHUvbXBjODV4eC9jb21tcHJvYy5jCkBAIC0zNyw3ICszNyw3IEBACiB2b2lkCiBtODU2MF9jcG1fcmVzZXQodm9pZCkKIHsKLQl2b2xhdGlsZSBpbW1hcF90ICppbW1yID0gKGltbWFwX3QgKilDRkdfSU1NUjsKKwl2b2xhdGlsZSBjY3NyX2NwbV90ICpjcG0gPSAoY2Nzcl9jcG1fdCAqKUNGR19NUEM4NXh4X0NQTV9BRERSOwogCXZvbGF0aWxlIHVsb25nIGNvdW50OwogCiAJZ2QgPSAoZ2RfdCAqKSAoQ0ZHX0lOSVRfUkFNX0FERFIgKyBDRkdfR0JMX0RBVEFfT0ZGU0VUKTsKQEAgLTUwLDExICs1MCwxMSBAQAogCS8qCiAJICogUmVzZXQgQ1BNCiAJICovCi0JaW1tci0+aW1fY3BtLmltX2NwbV9jcC5jcGNyID0gQ1BNX0NSX1JTVDsKKwljcG0tPmltX2NwbV9jcC5jcGNyID0gQ1BNX0NSX1JTVDsKIAljb3VudCA9IDA7CiAJZG8gewkJCS8qIFNwaW4gdW50aWwgY29tbWFuZCBwcm9jZXNzZWQJCSovCiAJCV9fYXNtX18gX192b2xhdGlsZV9fICgiZWllaW8iKTsKLQl9IHdoaWxlICgoaW1tci0+aW1fY3BtLmltX2NwbV9jcC5jcGNyICYgQ1BNX0NSX0ZMRykgJiYgKytjb3VudCA8IDEwMDAwMDApOworCX0gd2hpbGUgKChjcG0tPmltX2NwbV9jcC5jcGNyICYgQ1BNX0NSX0ZMRykgJiYgKytjb3VudCA8IDEwMDAwMDApOwogfQogCiAvKiBBbGxvY2F0ZSBzb21lIG1lbW9yeSBmcm9tIHRoZSBkdWFsIHBvcnRlZCByYW0uCkBAIC02NCw3ICs2NCw3IEBACiB1aW50CiBtODU2MF9jcG1fZHBhbGxvYyh1aW50IHNpemUsIHVpbnQgYWxpZ24pCiB7Ci0Jdm9sYXRpbGUgaW1tYXBfdCAqaW1tciA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CisJdm9sYXRpbGUgY2Nzcl9jcG1fdCAqY3BtID0gKGNjc3JfY3BtX3QgKilDRkdfTVBDODV4eF9DUE1fQUREUjsKIAl1aW50CXJldGxvYzsKIAl1aW50CWFsaWduX21hc2ssIG9mZjsKIAl1aW50CXNhdmViYXNlOwpAQCAtODYsNyArODYsNyBAQAogCXJldGxvYyA9IGdkLT5kcF9hbGxvY19iYXNlOwogCWdkLT5kcF9hbGxvY19iYXNlICs9IHNpemU7CiAKLQltZW1zZXQoKHZvaWQgKikmKGltbXItPmltX2NwbS5pbV9kcHJhbWJhc2VbcmV0bG9jXSksIDAsIHNpemUpOworCW1lbXNldCgodm9pZCAqKSYoY3BtLT5pbV9kcHJhbWJhc2VbcmV0bG9jXSksIDAsIHNpemUpOwogCiAJcmV0dXJuKHJldGxvYyk7CiB9CkBAIC0xMjAsMTYgKzEyMCwxNiBAQAogdm9pZAogbTg1NjBfY3BtX3NldGJyZyh1aW50IGJyZywgdWludCByYXRlKQogewotCXZvbGF0aWxlIGltbWFwX3QgKmltbXIgPSAoaW1tYXBfdCAqKUNGR19JTU1SOworCXZvbGF0aWxlIGNjc3JfY3BtX3QgKmNwbSA9IChjY3NyX2NwbV90ICopQ0ZHX01QQzg1eHhfQ1BNX0FERFI7CiAJdm9sYXRpbGUgdWludAkqYnA7CiAKIAkvKiBUaGlzIGlzIGdvb2QgZW5vdWdoIHRvIGdldCBTTUNzIHJ1bm5pbmcuLi4uLgogCSovCiAJaWYgKGJyZyA8IDQpIHsKLQkJYnAgPSAodWludCAqKSYoaW1tci0+aW1fY3BtLmltX2NwbV9icmcxLmJyZ2MxKTsKKwkJYnAgPSAodWludCAqKSYoY3BtLT5pbV9jcG1fYnJnMS5icmdjMSk7CiAJfQogCWVsc2UgewotCQlicCA9ICh1aW50ICopJihpbW1yLT5pbV9jcG0uaW1fY3BtX2JyZzIuYnJnYzUpOworCQlicCA9ICh1aW50ICopJihjcG0tPmltX2NwbV9icmcyLmJyZ2M1KTsKIAkJYnJnIC09IDQ7CiAJfQogCWJwICs9IGJyZzsKQEAgLTE0MiwxNiArMTQyLDE2IEBACiB2b2lkCiBtODU2MF9jcG1fZmFzdGJyZyh1aW50IGJyZywgdWludCByYXRlLCBpbnQgZGl2MTYpCiB7Ci0Jdm9sYXRpbGUgaW1tYXBfdCAqaW1tciA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CisJdm9sYXRpbGUgY2Nzcl9jcG1fdCAqY3BtID0gKGNjc3JfY3BtX3QgKilDRkdfTVBDODV4eF9DUE1fQUREUjsKIAl2b2xhdGlsZSB1aW50CSpicDsKIAogCS8qIFRoaXMgaXMgZ29vZCBlbm91Z2ggdG8gZ2V0IFNNQ3MgcnVubmluZy4uLi4uCiAJKi8KIAlpZiAoYnJnIDwgNCkgewotCQlicCA9ICh1aW50ICopJihpbW1yLT5pbV9jcG0uaW1fY3BtX2JyZzEuYnJnYzEpOworCQlicCA9ICh1aW50ICopJihjcG0tPmltX2NwbV9icmcxLmJyZ2MxKTsKIAl9CiAJZWxzZSB7Ci0JCWJwID0gKHVpbnQgKikmKGltbXItPmltX2NwbS5pbV9jcG1fYnJnMi5icmdjNSk7CisJCWJwID0gKHVpbnQgKikmKGNwbS0+aW1fY3BtX2JyZzIuYnJnYzUpOwogCQlicmcgLT0gNDsKIAl9CiAJYnAgKz0gYnJnOwpAQCAtMTY3LDE0ICsxNjcsMTQgQEAKIHZvaWQKIG04NTYwX2NwbV9leHRjYnJnKHVpbnQgYnJnLCB1aW50IHJhdGUsIHVpbnQgZXh0Y2xrLCBpbnQgcGluc2VsKQogewotCXZvbGF0aWxlIGltbWFwX3QgKmltbXIgPSAoaW1tYXBfdCAqKUNGR19JTU1SOworCXZvbGF0aWxlIGNjc3JfY3BtX3QgKmNwbSA9IChjY3NyX2NwbV90ICopQ0ZHX01QQzg1eHhfQ1BNX0FERFI7CiAJdm9sYXRpbGUgdWludAkqYnA7CiAKIAlpZiAoYnJnIDwgNCkgewotCQlicCA9ICh1aW50ICopJihpbW1yLT5pbV9jcG0uaW1fY3BtX2JyZzEuYnJnYzEpOworCQlicCA9ICh1aW50ICopJihjcG0tPmltX2NwbV9icmcxLmJyZ2MxKTsKIAl9CiAJZWxzZSB7Ci0JCWJwID0gKHVpbnQgKikmKGltbXItPmltX2NwbS5pbV9jcG1fYnJnMi5icmdjNSk7CisJCWJwID0gKHVpbnQgKikmKGNwbS0+aW1fY3BtX2JyZzIuYnJnYzUpOwogCQlicmcgLT0gNDsKIAl9CiAJYnAgKz0gYnJnOwpkaWZmIC0tZ2l0IGEvY3B1L21wYzg1eHgvY3B1LmMgYi9jcHUvbXBjODV4eC9jcHUuYwppbmRleCBiYmM1NDQ0Li5hYzhiMDE4IDEwMDY0NAotLS0gYS9jcHUvbXBjODV4eC9jcHUuYworKysgYi9jcHUvbXBjODV4eC9jcHUuYwpAQCAtMzAsMTEgKzMwLDYgQEAKICNpbmNsdWRlIDxjb21tYW5kLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlLmg+CiAKLSNpZiBkZWZpbmVkKENPTkZJR19PRl9GTEFUX1RSRUUpCi0jaW5jbHVkZSA8ZnRfYnVpbGQuaD4KLSNlbmRpZgotCi0KIGludCBjaGVja2NwdSAodm9pZCkKIHsKIAlzeXNfaW5mb190IHN5c2luZm87CkBAIC00NCw2ICszOSw4IEBACiAJdWludCBmYW07CiAJdWludCB2ZXI7CiAJdWludCBtYWpvciwgbWlub3I7CisJdTMyIGRkcl9yYXRpbzsKKwl2b2xhdGlsZSBjY3NyX2d1cl90ICpndXIgPSAodm9pZCAqKShDRkdfTVBDODV4eF9HVVRTX0FERFIpOwogCiAJc3ZyID0gZ2V0X3N2cigpOwogCXZlciA9IFNWUl9WRVIoc3ZyKTsKQEAgLTEwNywxNCArMTA0LDI1IEBACiAJcHV0cygiQ2xvY2sgQ29uZmlndXJhdGlvbjpcbiIpOwogCXByaW50ZigiICAgICAgIENQVTolNGx1IE1IeiwgIiwgc3lzaW5mby5mcmVxUHJvY2Vzc29yIC8gMTAwMDAwMCk7CiAJcHJpbnRmKCJDQ0I6JTRsdSBNSHosXG4iLCBzeXNpbmZvLmZyZXFTeXN0ZW1CdXMgLyAxMDAwMDAwKTsKLQlwcmludGYoIiAgICAgICBERFI6JTRsdSBNSHosICIsIHN5c2luZm8uZnJlcVN5c3RlbUJ1cyAvIDIwMDAwMDApOworCisJZGRyX3JhdGlvID0gKChndXItPnBvcnBsbHNyKSAmIDB4MDAwMDNlMDApID4+IDk7CisJc3dpdGNoIChkZHJfcmF0aW8pIHsKKwljYXNlIDB4MDoKKwkJcHJpbnRmKCIgICAgICAgRERSOiU0bHUgTUh6LCAiLCBzeXNpbmZvLmZyZXFERFJCdXMgLyAyMDAwMDAwKTsKKwkJYnJlYWs7CisJY2FzZSAweDc6CisJCXByaW50ZigiICAgICAgIEREUjolNGx1IE1IeiAoU3luY2hyb25vdXMpLCAiLCBzeXNpbmZvLmZyZXFERFJCdXMgLyAyMDAwMDAwKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRmKCIgICAgICAgRERSOiU0bHUgTUh6IChBc3luY2hyb25vdXMpLCAiLCBzeXNpbmZvLmZyZXFERFJCdXMgLyAyMDAwMDAwKTsKKwkJYnJlYWs7CisJfQogCiAjaWYgZGVmaW5lZChDRkdfTEJDX0xDUlIpCiAJbGNyciA9IENGR19MQkNfTENSUjsKICNlbHNlCiAJewotCSAgICB2b2xhdGlsZSBpbW1hcF90ICppbW1hcCA9IChpbW1hcF90ICopQ0ZHX0lNTVI7Ci0JICAgIHZvbGF0aWxlIGNjc3JfbGJjX3QgKmxiYz0gJmltbWFwLT5pbV9sYmM7CisJICAgIHZvbGF0aWxlIGNjc3JfbGJjX3QgKmxiYyA9ICh2b2lkICopKENGR19NUEM4NXh4X0xCQ19BRERSKTsKIAogCSAgICBsY3JyID0gbGJjLT5sY3JyOwogCX0KQEAgLTIxNCw4ICsyMjIsNyBAQAogCiAjaWYgZGVmaW5lZChDT05GSUdfRERSX0VDQykKIHZvaWQgZG1hX2luaXQodm9pZCkgewotCXZvbGF0aWxlIGltbWFwX3QgKmltbWFwID0gKGltbWFwX3QgKilDRkdfSU1NUjsKLQl2b2xhdGlsZSBjY3NyX2RtYV90ICpkbWEgPSAmaW1tYXAtPmltX2RtYTsKKwl2b2xhdGlsZSBjY3NyX2RtYV90ICpkbWEgPSAodm9pZCAqKShDRkdfTVBDODV4eF9ETUFfQUREUik7CiAKIAlkbWEtPnNhdHIwID0gMHgwMmM0MDAwMDsKIAlkbWEtPmRhdHIwID0gMHgwMmM0MDAwMDsKQEAgLTIyNSw4ICsyMzIsNyBAQAogfQogCiB1aW50IGRtYV9jaGVjayh2b2lkKSB7Ci0Jdm9sYXRpbGUgaW1tYXBfdCAqaW1tYXAgPSAoaW1tYXBfdCAqKUNGR19JTU1SOwotCXZvbGF0aWxlIGNjc3JfZG1hX3QgKmRtYSA9ICZpbW1hcC0+aW1fZG1hOworCXZvbGF0aWxlIGNjc3JfZG1hX3QgKmRtYSA9ICh2b2lkICopKENGR19NUEM4NXh4X0RNQV9BRERSKTsKIAl2b2xhdGlsZSB1aW50IHN0YXR1cyA9IGRtYS0+c3IwOwogCiAJLyogV2hpbGUgdGhlIGNoYW5uZWwgaXMgYnVzeSwgc3BpbiAqLwpAQCAtMjQ1LDggKzI1MSw3IEBACiB9CiAKIGludCBkbWFfeGZlcih2b2lkICpkZXN0LCB1aW50IGNvdW50LCB2b2lkICpzcmMpIHsKLQl2b2xhdGlsZSBpbW1hcF90ICppbW1hcCA9IChpbW1hcF90ICopQ0ZHX0lNTVI7Ci0Jdm9sYXRpbGUgY2Nzcl9kbWFfdCAqZG1hID0gJmltbWFwLT5pbV9kbWE7CisJdm9sYXRpbGUgY2Nzcl9kbWFfdCAqZG1hID0gKHZvaWQgKikoQ0ZHX01QQzg1eHhfRE1BX0FERFIpOwogCiAJZG1hLT5kYXIwID0gKHVpbnQpIGRlc3Q7CiAJZG1hLT5zYXIwID0gKHVpbnQpIHNyYzsKQEAgLTI1OCw5NCArMjYzLDMgQEAKIAlyZXR1cm4gZG1hX2NoZWNrKCk7CiB9CiAjZW5kaWYKLQotCi0jaWZkZWYgQ09ORklHX09GX0ZMQVRfVFJFRQotdm9pZAotZnRfY3B1X3NldHVwKHZvaWQgKmJsb2IsIGJkX3QgKmJkKQotewotCXUzMiAqcDsKLQl1bG9uZyBjbG9jazsKLQlpbnQgbGVuOwotCi0JY2xvY2sgPSBiZC0+YmlfYnVzZnJlcTsKLQlwID0gZnRfZ2V0X3Byb3AoYmxvYiwgIi9jcHVzLyIgT0ZfQ1BVICIvYnVzLWZyZXF1ZW5jeSIsICZsZW4pOwotCWlmIChwICE9IE5VTEwpCi0JCSpwID0gY3B1X3RvX2JlMzIoY2xvY2spOwotCi0JcCA9IGZ0X2dldF9wcm9wKGJsb2IsICIvcWVAZTAwODAwMDAvIiBPRl9DUFUgIi9idXMtZnJlcXVlbmN5IiwgJmxlbik7Ci0JaWYgKHAgIT0gTlVMTCkKLQkJKnAgPSBjcHVfdG9fYmUzMihjbG9jayk7Ci0KLQlwID0gZnRfZ2V0X3Byb3AoYmxvYiwgIi8iIE9GX1NPQyAiL3NlcmlhbEA0NTAwL2Nsb2NrLWZyZXF1ZW5jeSIsICZsZW4pOwotCWlmIChwICE9IE5VTEwpCi0JCSpwID0gY3B1X3RvX2JlMzIoY2xvY2spOwotCi0JcCA9IGZ0X2dldF9wcm9wKGJsb2IsICIvIiBPRl9TT0MgIi9zZXJpYWxANDYwMC9jbG9jay1mcmVxdWVuY3kiLCAmbGVuKTsKLQlpZiAocCAhPSBOVUxMKQotCQkqcCA9IGNwdV90b19iZTMyKGNsb2NrKTsKLQotI2lmIGRlZmluZWQoQ09ORklHX0hBU19FVEgwKQotCXAgPSBmdF9nZXRfcHJvcChibG9iLCAiLyIgT0ZfU09DICIvZXRoZXJuZXRAMjQwMDAvbWFjLWFkZHJlc3MiLCAmbGVuKTsKLQlpZiAocCkKLQkJbWVtY3B5KHAsIGJkLT5iaV9lbmV0YWRkciwgNik7Ci0KLQlwID0gZnRfZ2V0X3Byb3AoYmxvYiwgIi8iIE9GX1NPQyAiL2V0aGVybmV0QDI0MDAwL2xvY2FsLW1hYy1hZGRyZXNzIiwgJmxlbik7Ci0JaWYgKHApCi0JCW1lbWNweShwLCBiZC0+YmlfZW5ldGFkZHIsIDYpOwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19IQVNfRVRIMSkKLQlwID0gZnRfZ2V0X3Byb3AoYmxvYiwgIi8iIE9GX1NPQyAiL2V0aGVybmV0QDI1MDAwL21hYy1hZGRyZXNzIiwgJmxlbik7Ci0JaWYgKHApCi0JCW1lbWNweShwLCBiZC0+YmlfZW5ldDFhZGRyLCA2KTsKLQotCXAgPSBmdF9nZXRfcHJvcChibG9iLCAiLyIgT0ZfU09DICIvZXRoZXJuZXRAMjUwMDAvbG9jYWwtbWFjLWFkZHJlc3MiLCAmbGVuKTsKLQlpZiAocCkKLQkJbWVtY3B5KHAsIGJkLT5iaV9lbmV0MWFkZHIsIDYpOwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19IQVNfRVRIMikKLQlwID0gZnRfZ2V0X3Byb3AoYmxvYiwgIi8iIE9GX1NPQyAiL2V0aGVybmV0QDI2MDAwL21hYy1hZGRyZXNzIiwgJmxlbik7Ci0JaWYgKHApCi0JCW1lbWNweShwLCBiZC0+YmlfZW5ldDJhZGRyLCA2KTsKLQotCXAgPSBmdF9nZXRfcHJvcChibG9iLCAiLyIgT0ZfU09DICIvZXRoZXJuZXRAMjYwMDAvbG9jYWwtbWFjLWFkZHJlc3MiLCAmbGVuKTsKLQlpZiAocCkKLQkJbWVtY3B5KHAsIGJkLT5iaV9lbmV0MmFkZHIsIDYpOwotCi0jaWZkZWYgQ09ORklHX1VFQ19FVEgKLQlwID0gZnRfZ2V0X3Byb3AoYmxvYiwgIi8iIE9GX1FFICIvdWNjQDIwMDAvbWFjLWFkZHJlc3MiLCAmbGVuKTsKLQlpZiAocCkKLQkJbWVtY3B5KHAsIGJkLT5iaV9lbmV0MmFkZHIsIDYpOwotCi0JcCA9IGZ0X2dldF9wcm9wKGJsb2IsICIvIiBPRl9RRSAiL3VjY0AyMDAwL2xvY2FsLW1hYy1hZGRyZXNzIiwgJmxlbik7Ci0JaWYgKHApCi0JCW1lbWNweShwLCBiZC0+YmlfZW5ldDJhZGRyLCA2KTsKLQotI2VuZGlmCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX0hBU19FVEgzKQotCXAgPSBmdF9nZXRfcHJvcChibG9iLCAiLyIgT0ZfU09DICIvZXRoZXJuZXRAMjcwMDAvbWFjLWFkZHJlc3MiLCAmbGVuKTsKLQlpZiAocCkKLQkJbWVtY3B5KHAsIGJkLT5iaV9lbmV0M2FkZHIsIDYpOwotCi0JcCA9IGZ0X2dldF9wcm9wKGJsb2IsICIvIiBPRl9TT0MgIi9ldGhlcm5ldEAyNzAwMC9sb2NhbC1tYWMtYWRkcmVzcyIsICZsZW4pOwotCWlmIChwKQotCQltZW1jcHkocCwgYmQtPmJpX2VuZXQzYWRkciwgNik7Ci0KLSNpZmRlZiBDT05GSUdfVUVDX0VUSAotCXAgPSBmdF9nZXRfcHJvcChibG9iLCAiLyIgT0ZfUUUgIi91Y2NAMzAwMC9tYWMtYWRkcmVzcyIsICZsZW4pOwotCWlmIChwKQotCQltZW1jcHkocCwgYmQtPmJpX2VuZXQzYWRkciwgNik7Ci0KLQlwID0gZnRfZ2V0X3Byb3AoYmxvYiwgIi8iIE9GX1FFICIvdWNjQDMwMDAvbG9jYWwtbWFjLWFkZHJlc3MiLCAmbGVuKTsKLQlpZiAocCkKLQkJbWVtY3B5KHAsIGJkLT5iaV9lbmV0M2FkZHIsIDYpOwotCi0jZW5kaWYKLSNlbmRpZgotCi19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2NwdS9tcGM4NXh4L2NwdV9pbml0LmMgYi9jcHUvbXBjODV4eC9jcHVfaW5pdC5jCmluZGV4IDc5YWQyMGMuLmZkYjllY2IgMTAwNjQ0Ci0tLSBhL2NwdS9tcGM4NXh4L2NwdV9pbml0LmMKKysrIGIvY3B1L21wYzg1eHgvY3B1X2luaXQuYwpAQCAtNTksNyArNTksNyBAQAogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfQ1BNMgotc3RhdGljIHZvaWQgY29uZmlnXzg1NjBfaW9wb3J0cyAodm9sYXRpbGUgaW1tYXBfdCAqIGltbXIpCit2b2lkIGNvbmZpZ184NTYwX2lvcG9ydHMgKHZvbGF0aWxlIGNjc3JfY3BtX3QgKiBjcG0pCiB7CiAJaW50IHBvcnRudW07CiAKQEAgLTk5LDcgKzk5LDcgQEAKIAkJfQogCiAJCWlmIChwbXNrICE9IDApIHsKLQkJCXZvbGF0aWxlIGlvcG9ydF90ICppb3AgPSBpb3BvcnRfYWRkciAoaW1tciwgcG9ydG51bSk7CisJCQl2b2xhdGlsZSBpb3BvcnRfdCAqaW9wID0gaW9wb3J0X2FkZHIgKGNwbSwgcG9ydG51bSk7CiAJCQl1aW50IHRwbXNrID0gfnBtc2s7CiAKIAkJCS8qCkBAIC0xMzEsOCArMTMxLDcgQEAKIAogdm9pZCBjcHVfaW5pdF9mICh2b2lkKQogewotCXZvbGF0aWxlIGltbWFwX3QgICAgKmltbWFwID0gKGltbWFwX3QgKilDRkdfSU1NUjsKLQl2b2xhdGlsZSBjY3NyX2xiY190ICptZW1jdGwgPSAmaW1tYXAtPmltX2xiYzsKKwl2b2xhdGlsZSBjY3NyX2xiY190ICptZW1jdGwgPSAodm9pZCAqKShDRkdfTVBDODV4eF9MQkNfQUREUik7CiAJZXh0ZXJuIHZvaWQgbTg1NjBfY3BtX3Jlc2V0ICh2b2lkKTsKIAogCS8qIFBvaW50ZXIgaXMgd3JpdGFibGUgc2luY2Ugd2UgYWxsb2NhdGVkIGEgcmVnaXN0ZXIgZm9yIGl0ICovCkBAIC0xNDMsNyArMTQyLDcgQEAKIAogCiAjaWZkZWYgQ09ORklHX0NQTTIKLQljb25maWdfODU2MF9pb3BvcnRzKGltbWFwKTsKKwljb25maWdfODU2MF9pb3BvcnRzKChjY3NyX2NwbV90ICopQ0ZHX01QQzg1eHhfQ1BNX0FERFIpOwogI2VuZGlmCiAKIAkvKiBNYXAgYmFua3MgMCBhbmQgMSB0byB0aGUgRkxBU0ggYmFua3MgMCBhbmQgMSBhdCBwcmVsaW1pbmFyeQpAQCAtMjIyLDE4ICsyMjEsMTUgQEAKIAogaW50IGNwdV9pbml0X3Iodm9pZCkKIHsKLSNpZiBkZWZpbmVkKENPTkZJR19DTEVBUl9MQVcwKSB8fCBkZWZpbmVkKENPTkZJR19MMl9DQUNIRSkKLQl2b2xhdGlsZSBpbW1hcF90ICAgICppbW1hcCA9IChpbW1hcF90ICopQ0ZHX0lNTVI7Ci0jZW5kaWYKICNpZmRlZiBDT05GSUdfQ0xFQVJfTEFXMAotCXZvbGF0aWxlIGNjc3JfbG9jYWxfZWNtX3QgKmVjbSA9ICZpbW1hcC0+aW1fbG9jYWxfZWNtOworCXZvbGF0aWxlIGNjc3JfbG9jYWxfZWNtX3QgKmVjbSA9ICh2b2lkICopKENGR19NUEM4NXh4X0VDTV9BRERSKTsKIAogCS8qIGNsZWFyIGFsdGVybmF0ZSBib290IGxvY2F0aW9uIExBVyAodXNlZCBmb3Igc2RyYW0sIG9yIGRkciBiYW5rKSAqLwogCWVjbS0+bGF3YXIwID0gMDsKICNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfTDJfQ0FDSEUpCi0Jdm9sYXRpbGUgY2Nzcl9sMmNhY2hlX3QgKmwyY2FjaGUgPSAmaW1tYXAtPmltX2wyY2FjaGU7CisJdm9sYXRpbGUgY2Nzcl9sMmNhY2hlX3QgKmwyY2FjaGUgPSAodm9pZCAqKUNGR19NUEM4NXh4X0wyX0FERFI7CiAJdm9sYXRpbGUgdWludCBjYWNoZV9jdGw7CiAJdWludCBzdnIsIHZlcjsKIAl1aW50IGwyc3JiYXI7CmRpZmYgLS1naXQgYS9jcHUvbXBjODV4eC9ldGhlcl9mY2MuYyBiL2NwdS9tcGM4NXh4L2V0aGVyX2ZjYy5jCmluZGV4IDViMjNhODAuLmJkNjJhYWIgMTAwNjQ0Ci0tLSBhL2NwdS9tcGM4NXh4L2V0aGVyX2ZjYy5jCisrKyBiL2NwdS9tcGM4NXh4L2V0aGVyX2ZjYy5jCkBAIC0yMzAsOCArMjMwLDggQEAKIHsKICAgICBzdHJ1Y3QgZXRoZXJfZmNjX2luZm9fcyAqIGluZm8gPSBkZXYtPnByaXY7CiAgICAgaW50IGk7Ci0gICAgdm9sYXRpbGUgaW1tYXBfdCAqaW1tciA9IChpbW1hcF90ICopQ0ZHX0lNTVI7Ci0gICAgdm9sYXRpbGUgY2Nzcl9jcG1fY3BfdCAqY3AgPSAmKGltbXItPmltX2NwbS5pbV9jcG1fY3ApOworICAgIHZvbGF0aWxlIGNjc3JfY3BtX3QgKmNwbSA9IChjY3NyX2NwbV90ICopQ0ZHX01QQzg1eHhfQ1BNX0FERFI7CisgICAgdm9sYXRpbGUgY2Nzcl9jcG1fY3BfdCAqY3AgPSAmKGNwbS0+aW1fY3BtX2NwKTsKICAgICBmY2NfZW5ldF90ICpwcmFtX3B0cjsKICAgICB1bnNpZ25lZCBsb25nIG1lbV9hZGRyOwogCkBAIC0yNDIsMzUgKzI0MiwzNSBAQAogICAgIC8qIDI4LjkgLSAoMS0yKTogaW9wb3J0cyBoYXZlIGJlZW4gc2V0IHVwIGFscmVhZHkgKi8KIAogICAgIC8qIDI4LjkgLSAoMyk6IGNvbm5lY3QgRkNDJ3MgdHggYW5kIHJ4IGNsb2NrcyAqLwotICAgIGltbXItPmltX2NwbS5pbV9jcG1fbXV4LmNteHVhciA9IDA7IC8qIEFUTSAqLwotICAgIGltbXItPmltX2NwbS5pbV9jcG1fbXV4LmNteGZjciA9IChpbW1yLT5pbV9jcG0uaW1fY3BtX211eC5jbXhmY3IgJiB+aW5mby0+Y214ZmNyX21hc2spIHwKKyAgICBjcG0tPmltX2NwbV9tdXguY214dWFyID0gMDsgLyogQVRNICovCisgICAgY3BtLT5pbV9jcG1fbXV4LmNteGZjciA9IChjcG0tPmltX2NwbV9tdXguY214ZmNyICYgfmluZm8tPmNteGZjcl9tYXNrKSB8CiAJCQkJCQkJaW5mby0+Y214ZmNyX3ZhbHVlOwogCiAgICAgLyogMjguOSAtICg0KTogR0ZNUjogZGlzYWJsZSB0eC9yeCwgQ0NJVFQgQ1JDLCBzZXQgTW9kZSBFdGhlcm5ldCAqLwogICAgIGlmKGluZm8tPmV0aGVyX2luZGV4ID09IDApIHsKLQlpbW1yLT5pbV9jcG0uaW1fY3BtX2ZjYzEuZ2ZtciA9IEZDQ19HRk1SX01PREVfRU5FVCB8IEZDQ19HRk1SX1RDUkNfMzI7CisJY3BtLT5pbV9jcG1fZmNjMS5nZm1yID0gRkNDX0dGTVJfTU9ERV9FTkVUIHwgRkNDX0dGTVJfVENSQ18zMjsKICAgICB9IGVsc2UgaWYgKGluZm8tPmV0aGVyX2luZGV4ID09IDEpIHsKLQlpbW1yLT5pbV9jcG0uaW1fY3BtX2ZjYzIuZ2ZtciA9IEZDQ19HRk1SX01PREVfRU5FVCB8IEZDQ19HRk1SX1RDUkNfMzI7CisJY3BtLT5pbV9jcG1fZmNjMi5nZm1yID0gRkNDX0dGTVJfTU9ERV9FTkVUIHwgRkNDX0dGTVJfVENSQ18zMjsKICAgICB9IGVsc2UgaWYgKGluZm8tPmV0aGVyX2luZGV4ID09IDIpIHsKLQlpbW1yLT5pbV9jcG0uaW1fY3BtX2ZjYzMuZ2ZtciA9IEZDQ19HRk1SX01PREVfRU5FVCB8IEZDQ19HRk1SX1RDUkNfMzI7CisJY3BtLT5pbV9jcG1fZmNjMy5nZm1yID0gRkNDX0dGTVJfTU9ERV9FTkVUIHwgRkNDX0dGTVJfVENSQ18zMjsKICAgICB9CiAKICAgICAvKiAyOC45IC0gKDUpOiBGUFNNUjogZW5hYmxlIGZ1bGwgZHVwbGV4LCBzZWxlY3QgQ0NJVFQgQ1JDIGZvciBFdGhlcm5ldCxNSUkgKi8KICAgICBpZihpbmZvLT5ldGhlcl9pbmRleCA9PSAwKSB7Ci0JaW1tci0+aW1fY3BtLmltX2NwbV9mY2MxLmZwc21yID0gQ0ZHX0ZDQ19QU01SIHwgRkNDX1BTTVJfRU5DUkM7CisJY3BtLT5pbV9jcG1fZmNjMS5mcHNtciA9IENGR19GQ0NfUFNNUiB8IEZDQ19QU01SX0VOQ1JDOwogICAgIH0gZWxzZSBpZiAoaW5mby0+ZXRoZXJfaW5kZXggPT0gMSl7Ci0JaW1tci0+aW1fY3BtLmltX2NwbV9mY2MyLmZwc21yID0gQ0ZHX0ZDQ19QU01SIHwgRkNDX1BTTVJfRU5DUkM7CisJY3BtLT5pbV9jcG1fZmNjMi5mcHNtciA9IENGR19GQ0NfUFNNUiB8IEZDQ19QU01SX0VOQ1JDOwogICAgIH0gZWxzZSBpZiAoaW5mby0+ZXRoZXJfaW5kZXggPT0gMil7Ci0JaW1tci0+aW1fY3BtLmltX2NwbV9mY2MzLmZwc21yID0gQ0ZHX0ZDQ19QU01SIHwgRkNDX1BTTVJfRU5DUkM7CisJY3BtLT5pbV9jcG1fZmNjMy5mcHNtciA9IENGR19GQ0NfUFNNUiB8IEZDQ19QU01SX0VOQ1JDOwogICAgIH0KIAogICAgIC8qIDI4LjkgLSAoNik6IEZEU1I6IEV0aGVybmV0IFN5biAqLwogICAgIGlmKGluZm8tPmV0aGVyX2luZGV4ID09IDApIHsKLQlpbW1yLT5pbV9jcG0uaW1fY3BtX2ZjYzEuZmRzciA9IDB4RDU1NTsKKwljcG0tPmltX2NwbV9mY2MxLmZkc3IgPSAweEQ1NTU7CiAgICAgfSBlbHNlIGlmIChpbmZvLT5ldGhlcl9pbmRleCA9PSAxKSB7Ci0JaW1tci0+aW1fY3BtLmltX2NwbV9mY2MyLmZkc3IgPSAweEQ1NTU7CisJY3BtLT5pbV9jcG1fZmNjMi5mZHNyID0gMHhENTU1OwogICAgIH0gZWxzZSBpZiAoaW5mby0+ZXRoZXJfaW5kZXggPT0gMikgewotCWltbXItPmltX2NwbS5pbV9jcG1fZmNjMy5mZHNyID0gMHhENTU1OworCWNwbS0+aW1fY3BtX2ZjYzMuZmRzciA9IDB4RDU1NTsKICAgICB9CiAKICAgICAvKiByZXNldCBpbmRlY2VzIHRvIGN1cnJlbnQgcngvdHggYmQgKHNlZSBldGhfc2VuZCgpL2V0aF9yeCgpKSAqLwpAQCAtMjk2LDcgKzI5Niw3IEBACiAgICAgcnR4LnR4YmRbVFhfQlVGX0NOVCAtIDFdLmNiZF9zYyB8PSBCRF9FTkVUX1RYX1dSQVA7CiAKICAgICAvKiAyOC45IC0gKDcpOiBpbml0aWFsaXplIHBhcmFtZXRlciByYW0gKi8KLSAgICBwcmFtX3B0ciA9IChmY2NfZW5ldF90ICopJihpbW1yLT5pbV9jcG0uaW1fZHByYW1iYXNlW2luZm8tPnByb2ZmX2VuZXRdKTsKKyAgICBwcmFtX3B0ciA9IChmY2NfZW5ldF90ICopJihjcG0tPmltX2RwcmFtYmFzZVtpbmZvLT5wcm9mZl9lbmV0XSk7CiAKICAgICAvKiBjbGVhciB3aG9sZSBzdHJ1Y3R1cmUgdG8gbWFrZSBzdXJlIGFsbCByZXNlcnZlZCBmaWVsZHMgYXJlIHplcm8gKi8KICAgICBtZW1zZXQoKHZvaWQqKXByYW1fcHRyLCAwLCBzaXplb2YoZmNjX2VuZXRfdCkpOwpAQCAtMzg1LDE0ICszODUsMTQgQEAKICAgICAvKiAyOC45IC0gKDgpKDkpOiBjbGVhciBvdXQgZXZlbnRzIGluIEZDQ0UgKi8KICAgICAvKiAyOC45IC0gKDkpOiBGQ0NNOiBtYXNrIGFsbCBldmVudHMgKi8KICAgICBpZihpbmZvLT5ldGhlcl9pbmRleCA9PSAwKSB7Ci0JaW1tci0+aW1fY3BtLmltX2NwbV9mY2MxLmZjY2UgPSB+MHgwOwotCWltbXItPmltX2NwbS5pbV9jcG1fZmNjMS5mY2NtID0gMDsKKwljcG0tPmltX2NwbV9mY2MxLmZjY2UgPSB+MHgwOworCWNwbS0+aW1fY3BtX2ZjYzEuZmNjbSA9IDA7CiAgICAgfSBlbHNlIGlmIChpbmZvLT5ldGhlcl9pbmRleCA9PSAxKSB7Ci0JaW1tci0+aW1fY3BtLmltX2NwbV9mY2MyLmZjY2UgPSB+MHgwOwotCWltbXItPmltX2NwbS5pbV9jcG1fZmNjMi5mY2NtID0gMDsKKwljcG0tPmltX2NwbV9mY2MyLmZjY2UgPSB+MHgwOworCWNwbS0+aW1fY3BtX2ZjYzIuZmNjbSA9IDA7CiAgICAgfSBlbHNlIGlmIChpbmZvLT5ldGhlcl9pbmRleCA9PSAyKSB7Ci0JaW1tci0+aW1fY3BtLmltX2NwbV9mY2MzLmZjY2UgPSB+MHgwOwotCWltbXItPmltX2NwbS5pbV9jcG1fZmNjMy5mY2NtID0gMDsKKwljcG0tPmltX2NwbV9mY2MzLmZjY2UgPSB+MHgwOworCWNwbS0+aW1fY3BtX2ZjYzMuZmNjbSA9IDA7CiAgICAgfQogCiAgICAgLyogMjguOSAtICgxMC0xMik6IHdlIGRvbid0IHVzZSBldGhlcm5ldCBpbnRlcnJ1cHRzICovCkBAIC00MTMsMTEgKzQxMywxMSBAQAogCiAgICAgLyogMjguOSAtICgxNCk6IGVuYWJsZSB0eC9yeCBpbiBnZm1yICovCiAgICAgaWYoaW5mby0+ZXRoZXJfaW5kZXggPT0gMCkgewotCWltbXItPmltX2NwbS5pbV9jcG1fZmNjMS5nZm1yIHw9IEZDQ19HRk1SX0VOVCB8IEZDQ19HRk1SX0VOUjsKKwljcG0tPmltX2NwbV9mY2MxLmdmbXIgfD0gRkNDX0dGTVJfRU5UIHwgRkNDX0dGTVJfRU5SOwogICAgIH0gZWxzZSBpZiAoaW5mby0+ZXRoZXJfaW5kZXggPT0gMSkgewotCWltbXItPmltX2NwbS5pbV9jcG1fZmNjMi5nZm1yIHw9IEZDQ19HRk1SX0VOVCB8IEZDQ19HRk1SX0VOUjsKKwljcG0tPmltX2NwbV9mY2MyLmdmbXIgfD0gRkNDX0dGTVJfRU5UIHwgRkNDX0dGTVJfRU5SOwogICAgIH0gZWxzZSBpZiAoaW5mby0+ZXRoZXJfaW5kZXggPT0gMikgewotCWltbXItPmltX2NwbS5pbV9jcG1fZmNjMy5nZm1yIHw9IEZDQ19HRk1SX0VOVCB8IEZDQ19HRk1SX0VOUjsKKwljcG0tPmltX2NwbV9mY2MzLmdmbXIgfD0gRkNDX0dGTVJfRU5UIHwgRkNDX0dGTVJfRU5SOwogICAgIH0KIAogICAgIHJldHVybiAxOwpAQCAtNDI2LDE1ICs0MjYsMTUgQEAKIHN0YXRpYyB2b2lkIGZlY19oYWx0KHN0cnVjdCBldGhfZGV2aWNlKiBkZXYpCiB7CiAgICAgc3RydWN0IGV0aGVyX2ZjY19pbmZvX3MgKiBpbmZvID0gZGV2LT5wcml2OwotICAgIHZvbGF0aWxlIGltbWFwX3QgKmltbXIgPSAoaW1tYXBfdCAqKUNGR19JTU1SOworICAgIHZvbGF0aWxlIGNjc3JfY3BtX3QgKmNwbSA9IChjY3NyX2NwbV90ICopQ0ZHX01QQzg1eHhfQ1BNX0FERFI7CiAKICAgICAvKiB3cml0ZSBHRk1SOiBkaXNhYmxlIHR4L3J4ICovCiAgICAgaWYoaW5mby0+ZXRoZXJfaW5kZXggPT0gMCkgewotCWltbXItPmltX2NwbS5pbV9jcG1fZmNjMS5nZm1yICY9IH4oRkNDX0dGTVJfRU5UIHwgRkNDX0dGTVJfRU5SKTsKKwljcG0tPmltX2NwbV9mY2MxLmdmbXIgJj0gfihGQ0NfR0ZNUl9FTlQgfCBGQ0NfR0ZNUl9FTlIpOwogICAgIH0gZWxzZSBpZihpbmZvLT5ldGhlcl9pbmRleCA9PSAxKSB7Ci0JaW1tci0+aW1fY3BtLmltX2NwbV9mY2MyLmdmbXIgJj0gfihGQ0NfR0ZNUl9FTlQgfCBGQ0NfR0ZNUl9FTlIpOworCWNwbS0+aW1fY3BtX2ZjYzIuZ2ZtciAmPSB+KEZDQ19HRk1SX0VOVCB8IEZDQ19HRk1SX0VOUik7CiAgICAgfSBlbHNlIGlmKGluZm8tPmV0aGVyX2luZGV4ID09IDIpIHsKLQlpbW1yLT5pbV9jcG0uaW1fY3BtX2ZjYzMuZ2ZtciAmPSB+KEZDQ19HRk1SX0VOVCB8IEZDQ19HRk1SX0VOUik7CisJY3BtLT5pbV9jcG1fZmNjMy5nZm1yICY9IH4oRkNDX0dGTVJfRU5UIHwgRkNDX0dGTVJfRU5SKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL2NwdS9tcGM4NXh4L2ZkdC5jIGIvY3B1L21wYzg1eHgvZmR0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM3YTZjNAotLS0gL2Rldi9udWxsCisrKyBiL2NwdS9tcGM4NXh4L2ZkdC5jCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICoKKyAqIChDKSBDb3B5cmlnaHQgMjAwMAorICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8bGliZmR0Lmg+CisjaW5jbHVkZSA8ZmR0X3N1cHBvcnQuaD4KKwordm9pZCBmdF9jcHVfc2V0dXAodm9pZCAqYmxvYiwgYmRfdCAqYmQpCit7CisjaWYgZGVmaW5lZChDT05GSUdfSEFTX0VUSDApIHx8IGRlZmluZWQoQ09ORklHX0hBU19FVEgxKSB8fFwKKyAgICBkZWZpbmVkKENPTkZJR19IQVNfRVRIMikgfHwgZGVmaW5lZChDT05GSUdfSEFTX0VUSDMpCisJZmR0X2ZpeHVwX2V0aGVybmV0KGJsb2IsIGJkKTsKKyNlbmRpZgorCisJZG9fZml4dXBfYnlfcHJvcF91MzIoYmxvYiwgImRldmljZV90eXBlIiwgImNwdSIsIDQsCisJCSJ0aW1lYmFzZS1mcmVxdWVuY3kiLCBiZC0+YmlfYnVzZnJlcSAvIDgsIDEpOworCWRvX2ZpeHVwX2J5X3Byb3BfdTMyKGJsb2IsICJkZXZpY2VfdHlwZSIsICJjcHUiLCA0LAorCQkiYnVzLWZyZXF1ZW5jeSIsIGJkLT5iaV9idXNmcmVxLCAxKTsKKwlkb19maXh1cF9ieV9wcm9wX3UzMihibG9iLCAiZGV2aWNlX3R5cGUiLCAiY3B1IiwgNCwKKwkJImNsb2NrLWZyZXF1ZW5jeSIsIGJkLT5iaV9pbnRmcmVxLCAxKTsKKwlkb19maXh1cF9ieV9wcm9wX3UzMihibG9iLCAiZGV2aWNlX3R5cGUiLCAic29jIiwgNCwKKwkJImJ1cy1mcmVxdWVuY3kiLCBiZC0+YmlfYnVzZnJlcSwgMSk7CisjaWZkZWYgQ09ORklHX1FFCisJZG9fZml4dXBfYnlfcHJvcF91MzIoYmxvYiwgImRldmljZV90eXBlIiwgInNvYyIsIDQsCisJCSJidXMtZnJlcXVlbmN5IiwgYmQtPmJpX2J1c2ZyZXEsIDEpOworI2VuZGlmCisKKyNpZmRlZiBDRkdfTlMxNjU1MAorCWRvX2ZpeHVwX2J5X2NvbXBhdF91MzIoYmxvYiwgIm5zMTY1NTAiLAorCQkiY2xvY2stZnJlcXVlbmN5IiwgYmQtPmJpX2J1c2ZyZXEsIDEpOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BNMgorCWRvX2ZpeHVwX2J5X2NvbXBhdF91MzIoYmxvYiwgImZzbCxjcG0yLXNjYy11YXJ0IiwKKwkJImN1cnJlbnQtc3BlZWQiLCBiZC0+YmlfYmF1ZHJhdGUsIDEpOworCisJZG9fZml4dXBfYnlfY29tcGF0X3UzMihibG9iLCAiZnNsLGNwbTItYnJnIiwKKwkJImNsb2NrLWZyZXF1ZW5jeSIsIGJkLT5iaV9icmdmcmVxLCAxKTsKKyNlbmRpZgorCisJZmR0X2ZpeHVwX21lbW9yeShibG9iLCAodTY0KWJkLT5iaV9tZW1zdGFydCwgKHU2NCliZC0+YmlfbWVtc2l6ZSk7Cit9CmRpZmYgLS1naXQgYS9jcHUvbXBjODV4eC9pbnRlcnJ1cHRzLmMgYi9jcHUvbXBjODV4eC9pbnRlcnJ1cHRzLmMKaW5kZXggYmY3MzdkNi4uMThlNTM3NyAxMDA2NDQKLS0tIGEvY3B1L21wYzg1eHgvaW50ZXJydXB0cy5jCisrKyBiL2NwdS9tcGM4NXh4L2ludGVycnVwdHMuYwpAQCAtODAsMTkgKzgwLDE3IEBACiAKIGludCBpbnRlcnJ1cHRfaW5pdCAodm9pZCkKIHsKLQl2b2xhdGlsZSBpbW1hcF90ICppbW1yID0gKGltbWFwX3QgKilDRkdfSU1NUjsKKwl2b2xhdGlsZSBjY3NyX3BpY190ICpwaWMgPSAodm9pZCAqKShDRkdfTVBDODV4eF9QSUNfQUREUik7CiAKLQlpbW1yLT5pbV9waWMuZ2NyID0gTVBDODV4eF9QSUNHQ1JfUlNUOwotCXdoaWxlIChpbW1yLT5pbV9waWMuZ2NyICYgTVBDODV4eF9QSUNHQ1JfUlNUKTsKLQlpbW1yLT5pbV9waWMuZ2NyID0gTVBDODV4eF9QSUNHQ1JfTTsKKwlwaWMtPmdjciA9IE1QQzg1eHhfUElDR0NSX1JTVDsKKwl3aGlsZSAocGljLT5nY3IgJiBNUEM4NXh4X1BJQ0dDUl9SU1QpOworCXBpYy0+Z2NyID0gTVBDODV4eF9QSUNHQ1JfTTsKIAlkZWNyZW1lbnRlcl9jb3VudCA9IGdldF90YmNsaygpIC8gQ0ZHX0haOwogCW10c3ByKFNQUk5fVENSLCBUQ1JfUElFKTsKIAlzZXRfZGVjIChkZWNyZW1lbnRlcl9jb3VudCk7CiAJc2V0X21zciAoZ2V0X21zciAoKSB8IE1TUl9FRSk7CiAKICNpZmRlZiBDT05GSUdfSU5URVJSVVBUUwotCXZvbGF0aWxlIGNjc3JfcGljX3QgKnBpYyA9ICZpbW1yLT5pbV9waWM7Ci0KIAlwaWMtPmlpdnByMSA9IDB4ODEwMDAyOwkvKiA1MDIyMCBlbmFibGUgZWNtIGludGVycnVwdHMgKi8KIAlkZWJ1ZygiaWl2cHIxQCV4ID0gJXhcbiIsJnBpYy0+aWl2cHIxLCBwaWMtPmlpdnByMSk7CiAKZGlmZiAtLWdpdCBhL2NwdS9tcGM4NXh4L3BjaS5jIGIvY3B1L21wYzg1eHgvcGNpLmMKaW5kZXggZGIwOWU0NS4uYTUwNjBjZCAxMDA2NDQKLS0tIGEvY3B1L21wYzg1eHgvcGNpLmMKKysrIGIvY3B1L21wYzg1eHgvcGNpLmMKQEAgLTI5LDEwICsyOSw2IEBACiAjaW5jbHVkZSA8YXNtL2NwbV84NXh4Lmg+CiAjaW5jbHVkZSA8cGNpLmg+CiAKLSNpZiBkZWZpbmVkKENPTkZJR19PRl9GTEFUX1RSRUUpCi0jaW5jbHVkZSA8ZnRfYnVpbGQuaD4KLSNlbmRpZgotCiAjaWYgZGVmaW5lZChDT05GSUdfUENJKQogCiBzdGF0aWMgc3RydWN0IHBjaV9jb250cm9sbGVyICpwY2lfaG9zZTsKQEAgLTQzLDEyICszOSwxMSBAQAogCXUxNiByZWcxNjsKIAl1MzIgZGV2OwogCi0Jdm9sYXRpbGUgaW1tYXBfdCAgICAqaW1tYXAgPSAoaW1tYXBfdCAqKUNGR19DQ1NSQkFSOwotCXZvbGF0aWxlIGNjc3JfcGNpeF90ICpwY2l4ID0gJmltbWFwLT5pbV9wY2l4OworCXZvbGF0aWxlIGNjc3JfcGNpeF90ICpwY2l4ID0gKHZvaWQgKikoQ0ZHX01QQzg1eHhfUENJWF9BRERSKTsKICNpZmRlZiBDT05GSUdfTVBDODVYWF9QQ0kyCi0Jdm9sYXRpbGUgY2Nzcl9wY2l4X3QgKnBjaXgyID0gJmltbWFwLT5pbV9wY2l4MjsKKwl2b2xhdGlsZSBjY3NyX3BjaXhfdCAqcGNpeDIgPSAodm9pZCAqKShDRkdfTVBDODV4eF9QQ0lYMl9BRERSKTsKICNlbmRpZgotCXZvbGF0aWxlIGNjc3JfZ3VyX3QgKmd1ciA9ICZpbW1hcC0+aW1fZ3VyOworCXZvbGF0aWxlIGNjc3JfZ3VyX3QgKmd1ciA9ICh2b2lkICopKENGR19NUEM4NXh4X0dVVFNfQUREUik7CiAJc3RydWN0IHBjaV9jb250cm9sbGVyICogaG9zZTsKIAogCXBjaV9ob3NlID0gYm9hcmRfaG9zZTsKQEAgLTIxNiwyNyArMjExLDQgQEAKIAlob3NlLT5sYXN0X2J1c25vID0gcGNpX2hvc2Vfc2Nhbihob3NlKTsKICNlbmRpZgogfQotCi0jaWZkZWYgQ09ORklHX09GX0ZMQVRfVFJFRQotdm9pZAotZnRfcGNpX3NldHVwKHZvaWQgKmJsb2IsIGJkX3QgKmJkKQotewotCXUzMiAqcDsKLQlpbnQgbGVuOwotCi0JcCA9ICh1MzIgKilmdF9nZXRfcHJvcChibG9iLCAiLyIgT0ZfU09DICIvcGNpQDgwMDAvYnVzLXJhbmdlIiwgJmxlbik7Ci0JaWYgKHAgIT0gTlVMTCkgewotCQlwWzBdID0gcGNpX2hvc2VbMF0uZmlyc3RfYnVzbm87Ci0JCXBbMV0gPSBwY2lfaG9zZVswXS5sYXN0X2J1c25vOwotCX0KLQotI2lmZGVmIENPTkZJR19NUEM4NVhYX1BDSTIKLQlwID0gKHUzMiAqKWZ0X2dldF9wcm9wKGJsb2IsICIvIiBPRl9TT0MgIi9wY2lAOTAwMC9idXMtcmFuZ2UiLCAmbGVuKTsKLQlpZiAocCAhPSBOVUxMKSB7Ci0JCXBbMF0gPSBwY2lfaG9zZVsxXS5maXJzdF9idXNubzsKLQkJcFsxXSA9IHBjaV9ob3NlWzFdLmxhc3RfYnVzbm87Ci0JfQotI2VuZGlmCi19Ci0jZW5kaWYgLyogQ09ORklHX09GX0ZMQVRfVFJFRSAqLwogI2VuZGlmIC8qIENPTkZJR19QQ0kgKi8KZGlmZiAtLWdpdCBhL2NwdS9tcGM4NXh4L3FlX2lvLmMgYi9jcHUvbXBjODV4eC9xZV9pby5jCmluZGV4IDg4NzhiYzUuLjk4MDc1YmIgMTAwNjQ0Ci0tLSBhL2NwdS9tcGM4NXh4L3FlX2lvLmMKKysrIGIvY3B1L21wYzg1eHgvcWVfaW8uYwpAQCAtMzQsOSArMzQsOSBAQAogCXUzMgkJCXBpbl8yYml0X2Fzc2lnbjsKIAl1MzIJCQlwaW5fMWJpdF9tYXNrOwogCXUzMgkJCXRtcF92YWw7Ci0Jdm9sYXRpbGUgaW1tYXBfdAkqaW0gPSAodm9sYXRpbGUgaW1tYXBfdCAqKUNGR19JTU1SOworCXZvbGF0aWxlIGNjc3JfZ3VyX3QgCSpndXIgPSAodm9pZCAqKShDRkdfTVBDODV4eF9HVVRTX0FERFIpOwogCXZvbGF0aWxlIHBhcl9pb190CSpwYXJfaW8gPSAodm9sYXRpbGUgcGFyX2lvX3QgKikKLQkJCQkJCSYoaW0tPmltX2d1ci5xZV9wYXJfaW8pOworCQkJCQkJJihndXItPnFlX3Bhcl9pbyk7CiAKIAkvKiBDYWN1bGF0ZSBwaW4gbG9jYXRpb24gYW5kIDJiaXQgbWFzayBhbmQgZGlyICovCiAJcGluXzJiaXRfbWFzayA9ICh1MzIpKDB4MyA8PCAoTlVNX09GX1BJTlMtKHBpbiUoTlVNX09GX1BJTlMvMikrMSkqMikpOwpkaWZmIC0tZ2l0IGEvY3B1L21wYzg1eHgvc2VyaWFsX3NjYy5jIGIvY3B1L21wYzg1eHgvc2VyaWFsX3NjYy5jCmluZGV4IDRlOTI1ZjguLjdlZTNjYzggMTAwNjQ0Ci0tLSBhL2NwdS9tcGM4NXh4L3NlcmlhbF9zY2MuYworKysgYi9jcHUvbXBjODV4eC9zZXJpYWxfc2NjLmMKQEAgLTg4LDE3ICs4OCwxNyBAQAogCiBpbnQgc2VyaWFsX2luaXQgKHZvaWQpCiB7Ci0Jdm9sYXRpbGUgaW1tYXBfdCAqaW0gPSAoaW1tYXBfdCAqKUNGR19JTU1SOworCXZvbGF0aWxlIGNjc3JfY3BtX3QgKmNwbSA9IChjY3NyX2NwbV90ICopQ0ZHX01QQzg1eHhfQ1BNX0FERFI7CiAJdm9sYXRpbGUgY2Nzcl9jcG1fc2NjX3QgKnNwOwogCXZvbGF0aWxlIHNjY191YXJ0X3QgKnVwOwogCXZvbGF0aWxlIGNiZF90ICp0YmRmLCAqcmJkZjsKLQl2b2xhdGlsZSBjY3NyX2NwbV9jcF90ICpjcCA9ICYoaW0tPmltX2NwbS5pbV9jcG1fY3ApOworCXZvbGF0aWxlIGNjc3JfY3BtX2NwX3QgKmNwID0gJihjcG0tPmltX2NwbV9jcCk7CiAJdWludAlkcGFkZHI7CiAKIAkvKiBpbml0aWFsaXplIHBvaW50ZXJzIHRvIFNDQyAqLwogCi0Jc3AgPSAoY2Nzcl9jcG1fc2NjX3QgKikgJihpbS0+aW1fY3BtLmltX2NwbV9zY2NbU0NDX0lOREVYXSk7Ci0JdXAgPSAoc2NjX3VhcnRfdCAqKSYoaW0tPmltX2NwbS5pbV9kcHJhbWJhc2VbUFJPRkZfU0NDXSk7CisJc3AgPSAoY2Nzcl9jcG1fc2NjX3QgKikgJihjcG0tPmltX2NwbV9zY2NbU0NDX0lOREVYXSk7CisJdXAgPSAoc2NjX3VhcnRfdCAqKSYoY3BtLT5pbV9kcHJhbWJhc2VbUFJPRkZfU0NDXSk7CiAKIAkvKiBEaXNhYmxlIHRyYW5zbWl0dGVyL3JlY2VpdmVyLgogCSovCkBAIC0xMDcsOCArMTA3LDggQEAKIAkvKiBwdXQgdGhlIFNDQyBjaGFubmVsIGludG8gTk1TSSAobm9uIG11bHRpcGxleGQgc2VyaWFsIGludGVyZmFjZSkKIAkgKiBtb2RlIGFuZCB3aXJlIHRoZSBzZWxlY3RlZCBTQ0MgVHggYW5kIFJ4IGNsb2NrcyB0byBCUkd4ICgxNS0xNSkuCiAJICovCi0JaW0tPmltX2NwbS5pbV9jcG1fbXV4LmNteHNjciA9IFwKLQkJKGltLT5pbV9jcG0uaW1fY3BtX211eC5jbXhzY3ImfkNNWFNDUl9NQVNLKXxDTVhTQ1JfVkFMVUU7CisJY3BtLT5pbV9jcG1fbXV4LmNteHNjciA9IFwKKwkJKGNwbS0+aW1fY3BtX211eC5jbXhzY3ImfkNNWFNDUl9NQVNLKXxDTVhTQ1JfVkFMVUU7CiAKIAkvKiBTZXQgdXAgdGhlIGJhdWQgcmF0ZSBnZW5lcmF0b3IuCiAJKi8KQEAgLTEyMyw3ICsxMjMsNyBAQAogCS8qIFNldCB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgaG9zdCBtZW1vcnkgYnVmZmVycyBpbgogCSAqIHRoZSBidWZmZXIgZGVzY3JpcHRvcnMuCiAJICovCi0JcmJkZiA9IChjYmRfdCAqKSYoaW0tPmltX2NwbS5pbV9kcHJhbWJhc2VbZHBhZGRyXSk7CisJcmJkZiA9IChjYmRfdCAqKSYoY3BtLT5pbV9kcHJhbWJhc2VbZHBhZGRyXSk7CiAJcmJkZi0+Y2JkX2J1ZmFkZHIgPSAodWludCkgKHJiZGYrMik7CiAJcmJkZi0+Y2JkX3NjID0gQkRfU0NfRU1QVFkgfCBCRF9TQ19XUkFQOwogCXRiZGYgPSByYmRmICsgMTsKQEAgLTIwMSwxNCArMjAxLDEzIEBACiB7CiAJdm9sYXRpbGUgc2NjX3VhcnRfdAkqdXA7CiAJdm9sYXRpbGUgY2JkX3QJCSp0YmRmOwotCXZvbGF0aWxlIGltbWFwX3QJKmltOworCXZvbGF0aWxlIGNjc3JfY3BtX3QJKmNwbSA9IChjY3NyX2NwbV90ICopQ0ZHX01QQzg1eHhfQ1BNX0FERFI7CiAKIAlpZiAoYyA9PSAnXG4nKQogCQlzZXJpYWxfcHV0YyAoJ1xyJyk7CiAKLQlpbSA9IChpbW1hcF90ICopQ0ZHX0lNTVI7Ci0JdXAgPSAoc2NjX3VhcnRfdCAqKSYoaW0tPmltX2NwbS5pbV9kcHJhbWJhc2VbUFJPRkZfU0NDXSk7Ci0JdGJkZiA9IChjYmRfdCAqKSYoaW0tPmltX2NwbS5pbV9kcHJhbWJhc2VbdXAtPnNjY19nZW5zY2Muc2NjX3RiYXNlXSk7CisJdXAgPSAoc2NjX3VhcnRfdCAqKSYoY3BtLT5pbV9kcHJhbWJhc2VbUFJPRkZfU0NDXSk7CisJdGJkZiA9IChjYmRfdCAqKSYoY3BtLT5pbV9kcHJhbWJhc2VbdXAtPnNjY19nZW5zY2Muc2NjX3RiYXNlXSk7CiAKIAkvKiBXYWl0IGZvciBsYXN0IGNoYXJhY3RlciB0byBnby4KIAkgKi8KQEAgLTIzNSwxMiArMjM0LDExIEBACiB7CiAJdm9sYXRpbGUgY2JkX3QJCSpyYmRmOwogCXZvbGF0aWxlIHNjY191YXJ0X3QJKnVwOwotCXZvbGF0aWxlIGltbWFwX3QJKmltOworCXZvbGF0aWxlIGNjc3JfY3BtX3QJKmNwbSA9IChjY3NyX2NwbV90ICopQ0ZHX01QQzg1eHhfQ1BNX0FERFI7CiAJdW5zaWduZWQgY2hhcgkJYzsKIAotCWltID0gKGltbWFwX3QgKilDRkdfSU1NUjsKLQl1cCA9IChzY2NfdWFydF90ICopJihpbS0+aW1fY3BtLmltX2RwcmFtYmFzZVtQUk9GRl9TQ0NdKTsKLQlyYmRmID0gKGNiZF90ICopJihpbS0+aW1fY3BtLmltX2RwcmFtYmFzZVt1cC0+c2NjX2dlbnNjYy5zY2NfcmJhc2VdKTsKKwl1cCA9IChzY2NfdWFydF90ICopJihjcG0tPmltX2RwcmFtYmFzZVtQUk9GRl9TQ0NdKTsKKwlyYmRmID0gKGNiZF90ICopJihjcG0tPmltX2RwcmFtYmFzZVt1cC0+c2NjX2dlbnNjYy5zY2NfcmJhc2VdKTsKIAogCS8qIFdhaXQgZm9yIGNoYXJhY3RlciB0byBzaG93IHVwLgogCSAqLwpAQCAtMjYwLDExICsyNTgsMTAgQEAKIHsKIAl2b2xhdGlsZSBjYmRfdAkJKnJiZGY7CiAJdm9sYXRpbGUgc2NjX3VhcnRfdAkqdXA7Ci0Jdm9sYXRpbGUgaW1tYXBfdAkqaW07CisJdm9sYXRpbGUgY2Nzcl9jcG1fdAkqY3BtID0gKGNjc3JfY3BtX3QgKilDRkdfTVBDODV4eF9DUE1fQUREUjsKIAotCWltID0gKGltbWFwX3QgKilDRkdfSU1NUjsKLQl1cCA9IChzY2NfdWFydF90ICopJihpbS0+aW1fY3BtLmltX2RwcmFtYmFzZVtQUk9GRl9TQ0NdKTsKLQlyYmRmID0gKGNiZF90ICopJihpbS0+aW1fY3BtLmltX2RwcmFtYmFzZVt1cC0+c2NjX2dlbnNjYy5zY2NfcmJhc2VdKTsKKwl1cCA9IChzY2NfdWFydF90ICopJihjcG0tPmltX2RwcmFtYmFzZVtQUk9GRl9TQ0NdKTsKKwlyYmRmID0gKGNiZF90ICopJihjcG0tPmltX2RwcmFtYmFzZVt1cC0+c2NjX2dlbnNjYy5zY2NfcmJhc2VdKTsKIAogCXJldHVybiAoKHJiZGYtPmNiZF9zYyAmIEJEX1NDX0VNUFRZKSA9PSAwKTsKIH0KZGlmZiAtLWdpdCBhL2NwdS9tcGM4NXh4L3NwZF9zZHJhbS5jIGIvY3B1L21wYzg1eHgvc3BkX3NkcmFtLmMKaW5kZXggNWRjMjIzYS4uNTUzZjczNiAxMDA2NDQKLS0tIGEvY3B1L21wYzg1eHgvc3BkX3NkcmFtLmMKKysrIGIvY3B1L21wYzg1eHgvc3BkX3NkcmFtLmMKQEAgLTUzLDggKzUzLDggQEAKIHsKIAlpbnQgY2xrczsKIAotCWNsa3MgPSBwaWNvcyAvICgyMDAwMDAwMDAwIC8gKGdldF9idXNfZnJlcSgwKSAvIDEwMDApKTsKLQlpZiAocGljb3MgJSAoMjAwMDAwMDAwMCAvIChnZXRfYnVzX2ZyZXEoMCkgLyAxMDAwKSkgIT0gMCkgeworCWNsa3MgPSBwaWNvcyAvICgyMDAwMDAwMDAwIC8gKGdldF9kZHJfZnJlcSgwKSAvIDEwMDApKTsKKwlpZiAocGljb3MgJSAoMjAwMDAwMDAwMCAvIChnZXRfZGRyX2ZyZXEoMCkgLyAxMDAwKSkgIT0gMCkgewogCQljbGtzKys7CiAJfQogCkBAIC0xNzEsOCArMTcxLDcgQEAKIGxvbmcgaW50CiBzcGRfc2RyYW0odm9pZCkKIHsKLQl2b2xhdGlsZSBpbW1hcF90ICppbW1hcCA9IChpbW1hcF90ICopQ0ZHX0lNTVI7Ci0Jdm9sYXRpbGUgY2Nzcl9kZHJfdCAqZGRyID0gJmltbWFwLT5pbV9kZHI7CisJdm9sYXRpbGUgY2Nzcl9kZHJfdCAqZGRyID0gKHZvaWQgKikoQ0ZHX01QQzg1eHhfRERSX0FERFIpOwogCXNwZF9lZXByb21fdCBzcGQ7CiAJdW5zaWduZWQgaW50IG5fcmFua3M7CiAJdW5zaWduZWQgaW50IHJhbmtfZGVuc2l0eTsKQEAgLTMwOSw3ICszMDgsNyBAQAogCWlmICgoU1ZSX1ZFUihnZXRfc3ZyKCkpID09IFNWUl84NTQ4X0UpICYmCiAJCQkoU1ZSX01KUkVWKGdldF9zdnIoKSkgPT0gMSkgJiYKIAkJCShzcGQubWVtX3R5cGUgPT0gU1BEX01FTVRZUEVfRERSMikpIHsKLQkJdm9sYXRpbGUgY2Nzcl9ndXJfdCAqZ3VyID0gJmltbWFwLT5pbV9ndXI7CisJCXZvbGF0aWxlIGNjc3JfZ3VyX3QgKmd1ciA9ICh2b2lkICopKENGR19NUEM4NXh4X0dVVFNfQUREUik7CiAJCWd1ci0+ZGRyaW9vdmNyID0gKDB4ODAwMDAwMDAJLyogRW5hYmxlICovCiAJCQkJICB8IDB4MTAwMDAwMDApOy8qIFZTRUwgdG8gMS44ViAqLwogCX0KQEAgLTQyMiw3ICs0MjEsNyBAQAogCSAqIEFkanVzdCB0aGUgQ0FTIExhdGVuY3kgdG8gYWxsb3cgZm9yIGJ1cyBzcGVlZHMgdGhhdAogCSAqIGFyZSBzbG93ZXIgdGhhbiB0aGUgRERSIG1vZHVsZS4KIAkgKi8KLQlidXNmcmVxID0gZ2V0X2J1c19mcmVxKDApIC8gMTAwMDAwMDsJLyogTUh6ICovCisJYnVzZnJlcSA9IGdldF9kZHJfZnJlcSgwKSAvIDEwMDAwMDA7CS8qIE1IeiAqLwogCiAJZWZmZWN0aXZlX2RhdGFfcmF0ZSA9IG1heF9kYXRhX3JhdGU7CiAJaWYgKGJ1c2ZyZXEgPCA5MCkgewpAQCAtMTAyMyw4ICsxMDIyLDcgQEAKIHN0YXRpYyB1bnNpZ25lZCBpbnQKIHNldHVwX2xhd3NfYW5kX3RsYnModW5zaWduZWQgaW50IG1lbXNpemUpCiB7Ci0Jdm9sYXRpbGUgaW1tYXBfdCAqaW1tYXAgPSAoaW1tYXBfdCAqKUNGR19JTU1SOwotCXZvbGF0aWxlIGNjc3JfbG9jYWxfZWNtX3QgKmVjbSA9ICZpbW1hcC0+aW1fbG9jYWxfZWNtOworCXZvbGF0aWxlIGNjc3JfbG9jYWxfZWNtX3QgKmVjbSA9ICh2b2lkICopKENGR19NUEM4NXh4X0VDTV9BRERSKTsKIAl1bnNpZ25lZCBpbnQgdGxiX3NpemU7CiAJdW5zaWduZWQgaW50IGxhd19zaXplOwogCXVuc2lnbmVkIGludCByYW1fdGxiX2luZGV4OwpAQCAtMTEzMCw4ICsxMTI4LDcgQEAKIHsKIAl1aW50ICpwID0gMDsKIAl1aW50IGkgPSAwOwotCXZvbGF0aWxlIGltbWFwX3QgKmltbWFwID0gKGltbWFwX3QgKilDRkdfSU1NUjsKLQl2b2xhdGlsZSBjY3NyX2Rkcl90ICpkZHI9ICZpbW1hcC0+aW1fZGRyOworCXZvbGF0aWxlIGNjc3JfZGRyX3QgKmRkcj0gKHZvaWQgKikoQ0ZHX01QQzg1eHhfRERSX0FERFIpOwogCiAJZG1hX2luaXQoKTsKIApkaWZmIC0tZ2l0IGEvY3B1L21wYzg1eHgvc3BlZWQuYyBiL2NwdS9tcGM4NXh4L3NwZWVkLmMKaW5kZXggMTIzNTlhMi4uMjdkZTM3YSAxMDA2NDQKLS0tIGEvY3B1L21wYzg1eHgvc3BlZWQuYworKysgYi9jcHUvbXBjODV4eC9zcGVlZC5jCkBAIC0zNSw4ICszNSw3IEBACiAKIHZvaWQgZ2V0X3N5c19pbmZvIChzeXNfaW5mb190ICogc3lzSW5mbykKIHsKLQl2b2xhdGlsZSBpbW1hcF90ICAgICppbW1hcCA9IChpbW1hcF90ICopQ0ZHX0lNTVI7Ci0Jdm9sYXRpbGUgY2Nzcl9ndXJfdCAqZ3VyID0gJmltbWFwLT5pbV9ndXI7CisJdm9sYXRpbGUgY2Nzcl9ndXJfdCAqZ3VyID0gKHZvaWQgKikoQ0ZHX01QQzg1eHhfR1VUU19BRERSKTsKIAl1aW50IHBsYXRfcmF0aW8sZTUwMF9yYXRpbyxoYWxmX2ZyZXFTeXN0ZW1CdXM7CiAKIAlwbGF0X3JhdGlvID0gKGd1ci0+cG9ycGxsc3IpICYgMHgwMDAwMDAzZTsKQEAgLTQ5LDYgKzQ4LDE1IEBACiAJICogb3ZlcmZsb3cgZm9yIHByb2Nlc3NvciBzcGVlZHMgYWJvdmUgMkdIeiAqLwogCWhhbGZfZnJlcVN5c3RlbUJ1cyA9IHN5c0luZm8tPmZyZXFTeXN0ZW1CdXMvMjsKIAlzeXNJbmZvLT5mcmVxUHJvY2Vzc29yID0gZTUwMF9yYXRpbypoYWxmX2ZyZXFTeXN0ZW1CdXM7CisJc3lzSW5mby0+ZnJlcUREUkJ1cyA9IHN5c0luZm8tPmZyZXFTeXN0ZW1CdXM7CisKKyNpZmRlZiBDT05GSUdfRERSX0NMS19GUkVRCisJeworCQl1MzIgZGRyX3JhdGlvID0gKChndXItPnBvcnBsbHNyKSAmIDB4MDAwMDNlMDApID4+IDk7CisJCWlmIChkZHJfcmF0aW8gIT0gMHg3KQorCQkJc3lzSW5mby0+ZnJlcUREUkJ1cyA9IGRkcl9yYXRpbyAqIENPTkZJR19ERFJfQ0xLX0ZSRVE7CisJfQorI2VuZGlmCiB9CiAKIApAQCAtNTYsMTIgKzY0LDEyIEBACiB7CiAJc3lzX2luZm9fdCBzeXNfaW5mbzsKICNpZiBkZWZpbmVkKENPTkZJR19DUE0yKQotCXZvbGF0aWxlIGltbWFwX3QgKmltbWFwID0gKGltbWFwX3QgKikgQ0ZHX0lNTVI7CisJdm9sYXRpbGUgY2Nzcl9jcG1fdCAqY3BtID0gKGNjc3JfY3BtX3QgKilDRkdfTVBDODV4eF9DUE1fQUREUjsKIAl1aW50IHNjY3IsIGRmYnJnOwogCiAJLyogc2V0IFZDTyA9IDQgKiBCUkcgKi8KLQlpbW1hcC0+aW1fY3BtLmltX2NwbV9pbnRjdGwuc2NjciAmPSAweGZmZmZmZmZjOwotCXNjY3IgPSBpbW1hcC0+aW1fY3BtLmltX2NwbV9pbnRjdGwuc2NjcjsKKwljcG0tPmltX2NwbV9pbnRjdGwuc2NjciAmPSAweGZmZmZmZmZjOworCXNjY3IgPSBjcG0tPmltX2NwbV9pbnRjdGwuc2NjcjsKIAlkZmJyZyA9IChzY2NyICYgU0NDUl9ERkJSR19NU0spID4+IFNDQ1JfREZCUkdfU0hJRlQ7CiAjZW5kaWYKIAlnZXRfc3lzX2luZm8gKCZzeXNfaW5mbyk7CkBAIC05NCwzICsxMDIsMTkgQEAKIAogCXJldHVybiB2YWw7CiB9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogZ2V0X2Rkcl9mcmVxCisgKiByZXR1cm4gZGRyIGJ1cyBmcmVxIGluIEh6CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordWxvbmcgZ2V0X2Rkcl9mcmVxICh1bG9uZyBkdW1teSkKK3sKKwl1bG9uZyB2YWw7CisKKwlzeXNfaW5mb190IHN5c19pbmZvOworCisJZ2V0X3N5c19pbmZvICgmc3lzX2luZm8pOworCXZhbCA9IHN5c19pbmZvLmZyZXFERFJCdXM7CisKKwlyZXR1cm4gdmFsOworfQpkaWZmIC0tZ2l0IGEvY3B1L21wYzg1eHgvdHJhcHMuYyBiL2NwdS9tcGM4NXh4L3RyYXBzLmMKaW5kZXggZWZjODBjNy4uMjM4MWZiMCAxMDA2NDQKLS0tIGEvY3B1L21wYzg1eHgvdHJhcHMuYworKysgYi9jcHUvbXBjODV4eC90cmFwcy5jCkBAIC0yODgsOCArMjg4LDggQEAKIHZvaWQKIEV4dEludEV4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQl2b2xhdGlsZSBpbW1hcF90ICppbW1hcCA9IChpbW1hcF90ICopQ0ZHX0lNTVI7Ci0Jdm9sYXRpbGUgY2Nzcl9waWNfdCAqcGljID0gJmltbWFwLT5pbV9waWM7CisJdm9sYXRpbGUgY2Nzcl9waWNfdCAqcGljID0gKHZvaWQgKikoQ0ZHX01QQzg1eHhfUElDX0FERFIpOworCiAJdWludCB2ZWN0OwogCiAjaWYgZGVmaW5lZChDT05GSUdfQ01EX0tHREIpCmRpZmYgLS1naXQgYS9jcHUvbXBjOHh4L3NwZWVkLmMgYi9jcHUvbXBjOHh4L3NwZWVkLmMKaW5kZXggMTAxZDVmOS4uMTFiMDg5MyAxMDA2NDQKLS0tIGEvY3B1L21wYzh4eC9zcGVlZC5jCisrKyBiL2NwdS9tcGM4eHgvc3BlZWQuYwpAQCAtMjU5LDExICsyNTksOCBAQAogCSAqLwogCXNjY3JfcmVnID0gaW1tci0+aW1fY2xrcnN0LmNhcl9zY2NyOwogCXNjY3JfcmVnICY9IH5TQ0NSX0VCREYxMTsKLSNpZiBkZWZpbmVkKENPTkZJR19UUU04ODVEKQotCWlmIChnZC0+Y3B1X2NsayA8PSA4MDAwMDAwMCkgewotI2Vsc2UKKwogCWlmIChnZC0+Y3B1X2NsayA8PSA2NjAwMDAwMCkgewotI2VuZGlmCiAJCXNjY3JfcmVnIHw9IFNDQ1JfRUJERjAwOwkvKiBidXMgZGl2aXNpb24gZmFjdG9yID0gMSAqLwogCQlnZC0+YnVzX2NsayA9IGdkLT5jcHVfY2xrOwogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9ib2FyZC9tcGM4NTY4bWRzL01ha2VmaWxlIGIvY3B1L3NoNC9NYWtlZmlsZQpzaW1pbGFyaXR5IGluZGV4IDYzJQpjb3B5IGZyb20gYm9hcmQvbXBjODU2OG1kcy9NYWtlZmlsZQpjb3B5IHRvIGNwdS9zaDQvTWFrZWZpbGUKaW5kZXggYTc5OWFhNC4uMWJiOGJkNyAxMDA2NDQKLS0tIGEvYm9hcmQvbXBjODU2OG1kcy9NYWtlZmlsZQorKysgYi9jcHUvc2g0L01ha2VmaWxlCkBAIC0xLDggKzEsMTAgQEAKICMKLSMgQ29weXJpZ2h0IDIwMDQtMjAwNyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3Rvci4KLSMgKEMpIENvcHlyaWdodCAyMDAxLTIwMDYKKyMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDYKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKKyMgKEMpIENvcHlyaWdodCAyMDA3CisjIE5vYnVoaXJvIEl3YW1hdHN1IDxpd2FtYXRzdUBuaWdhdXJpLm9yZz4KKyMKICMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKICMgcHJvamVjdC4KICMKQEAgLTIzLDM2ICsyNSwyMiBAQAogIwogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKLWlmbmVxICgkKE9CSlRSRUUpLCQoU1JDVFJFRSkpCi0kKHNoZWxsIG1rZGlyIC1wICQob2JqKS4uL2NvbW1vbikKLWVuZGlmCiAKLUxJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQ1BVKS5hCiAKLUNPQkpTCTo9ICQoQk9BUkQpLm8gXAotCWJjc3IubyBcCi0JZnRfYm9hcmQubworU1RBUlQJPSBzdGFydC5vCitPQkpTCT0gY3B1Lm8gaW50ZXJydXB0cy5vIHdhdGNoZG9nLm8gdGltZS5vIGNhY2hlLm8KIAotU09CSlMJOj0gaW5pdC5vCithbGw6CS5kZXBlbmQgJChTVEFSVCkgJChMSUIpCiAKLVNSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKLU9CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQotU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQotCi0kKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKSAkKFNPQkpTKQotCSQoQVIpICQoQVJGTEFHUykgJEAgJChPQkpTKQotCi1jbGVhbjoKLQlybSAtZiAkKE9CSlMpICQoU09CSlMpCi0KLWRpc3RjbGVhbjoJY2xlYW4KLQlybSAtZiAkKExJQikgY29yZSAqLmJhayAuZGVwZW5kCiskKExJQik6CSQoT0JKUykKKwkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLSMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAotaW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCisuZGVwZW5kOglNYWtlZmlsZSAkKFNUQVJUOi5vPS5TKSAkKE9CSlM6Lm89LmMpCisJCSQoQ0MpIC1NICQoQ0ZMQUdTKSAkKFNUQVJUOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKIAotc2luY2x1ZGUgJChvYmopLmRlcGVuZAorc2luY2x1ZGUgLmRlcGVuZAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9jcHUvc2g0L2NhY2hlLmMgYi9jcHUvc2g0L2NhY2hlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU3NDRkNwotLS0gL2Rldi9udWxsCisrKyBiL2NwdS9zaDQvY2FjaGUuYwpAQCAtMCwwICsxLDEwOCBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNworICogTm9idWhpcm8gSXdhbWF0c3UgPGl3YW1hdHN1QG5pZ2F1cmkub3JnPgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxjb21tYW5kLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorCisvKgorICogSnVtcCB0byBQMiBhcmVhLgorICogV2hlbiBoYW5kbGluZyBUTEIgb3IgY2FjaGVzLCB3ZSBuZWVkIHRvIGRvIGl0IGZyb20gUDIgYXJlYS4KKyAqLworI2RlZmluZSBqdW1wX3RvX1AyKCkJCQlcCisgIGRvIHsJCQkJCVwKKyAgICB1bnNpZ25lZCBsb25nIF9fZHVtbXk7CQlcCisgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oCQlcCisJCSJtb3YubAkxZiwgJTBcblx0IglcCisJCSJvcgklMSwgJTBcblx0IglcCisJCSJqbXAJQCUwXG5cdCIJXAorCQkiIG5vcFxuXHQiCQlcCisJCSIuYmFsaWduIDRcbiIJCVwKKwkJIjE6CS5sb25nIDJmXG4iCVwKKwkJIjI6IgkJCVwKKwkJOiAiPSZyIiAoX19kdW1teSkJXAorCQk6ICJyIiAoMHgyMDAwMDAwMCkpOwlcCisgIH0gd2hpbGUgKDApCisKKy8qCisgKiBCYWNrIHRvIFAxIGFyZWEuCisgKi8KKyNkZWZpbmUgYmFja190b19QMSgpCQkJCQlcCisgIGRvIHsJCQkJCQkJXAorICAgIHVuc2lnbmVkIGxvbmcgX19kdW1teTsJCQkJXAorICAgIF9fYXNtX18gX192b2xhdGlsZV9fKAkJCQlcCisJCSJub3A7bm9wO25vcDtub3A7bm9wO25vcDtub3Bcblx0IglcCisJCSJtb3YubAkxZiwgJTBcblx0IgkJCVwKKwkJImptcAlAJTBcblx0IgkJCVwKKwkJIiBub3Bcblx0IgkJCQlcCisJCSIuYmFsaWduIDRcbiIJCQkJXAorCQkiMToJLmxvbmcgMmZcbiIJCQlcCisJCSIyOiIJCQkJCVwKKwkJOiAiPSZyIiAoX19kdW1teSkpOwkJCVwKKyAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBDQUNIRV9WQUxJRCAgICAgICAxCisjZGVmaW5lIENBQ0hFX1VQREFURUQgICAgIDIKKworc3RhdGljIGlubGluZSB2b2lkIGNhY2hlX3diYWNrX2FsbCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgYWRkciwgZGF0YSwgaSwgajsKKworCWp1bXBfdG9fUDIoKTsKKwlmb3IgKGkgPSAwOyBpIDwgQ0FDSEVfT0NfTlVNX0VOVFJJRVM7IGkrKyl7CisJCWZvciAoaiA9IDA7IGogPCBDQUNIRV9PQ19OVU1fV0FZUzsgaisrKSB7CisgICAgICAJCQlhZGRyID0gQ0FDSEVfT0NfQUREUkVTU19BUlJBWSB8IChqIDw8IENBQ0hFX09DX1dBWV9TSElGVCkKKwkJCQl8IChpIDw8IENBQ0hFX09DX0VOVFJZX1NISUZUKTsKKyAgICAgIAkJCWRhdGEgPSBpbmwoYWRkcik7CisJCQlpZiAoZGF0YSAmIENBQ0hFX1VQREFURUQpIHsKKwkJCQlkYXRhICY9IH5DQUNIRV9VUERBVEVEOworCQkJCW91dGwoZGF0YSwgYWRkcik7CisJCQl9CisJCX0KKwl9CisJYmFja190b19QMSgpOworfQorCisKKyNkZWZpbmUgQ0FDSEVfRU5BQkxFICAgICAgMAorI2RlZmluZSBDQUNIRV9ESVNBQkxFICAgICAxCisKK2ludCBjYWNoZV9jb250cm9sKHVuc2lnbmVkIGludCBjbWQpCit7CisJdW5zaWduZWQgbG9uZyBjY3I7CisKKwlqdW1wX3RvX1AyKCk7CisJY2NyID0gaW5sKENDUik7CisKKwlpZiAoY2NyICYgQ0NSX0NBQ0hFX0VOQUJMRSkKKwkJY2FjaGVfd2JhY2tfYWxsKCk7CisKKwlpZiAoY21kID09IENBQ0hFX0RJU0FCTEUpCisJCW91dGwoQ0NSX0NBQ0hFX1NUT1AsIENDUik7CisJZWxzZQorCQlvdXRsKENDUl9DQUNIRV9JTklULCBDQ1IpOworCWJhY2tfdG9fUDEoKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvY3B1L3NoNC9jb25maWcubWsgYi9jcHUvc2g0L2NvbmZpZy5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2ZlYjJhCi0tLSAvZGV2L251bGwKKysrIGIvY3B1L3NoNC9jb25maWcubWsKQEAgLTAsMCArMSwyOCBAQAorIworIyAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNAorIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgorIworIyAoQykgQ29weXJpZ2h0IDIwMDcKKyMgTm9idWhpcm8gSXdhbWF0c3UgPGl3YW1hdHN1QG5pZ2F1cmkub3JnPgorIworIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworIyBwcm9qZWN0LgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisjIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorIyBNQSAwMjExMS0xMzA3IFVTQQorIworIworUExBVEZPUk1fQ1BQRkxBR1MgKz0gLW00LW5vZnB1CitQTEFURk9STV9SRUxGTEFHUyArPSAtZmZpeGVkLXIxMwpkaWZmIC0tZ2l0IGEvY3B1L3NoNC9jcHUuYyBiL2NwdS9zaDQvY3B1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGViZjk1MQotLS0gL2Rldi9udWxsCisrKyBiL2NwdS9zaDQvY3B1LmMKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNworICogTm9idWhpcm8gSXdhbWF0c3UgPGl3YW1hdHN1QG5pZ2F1cmkub3JnPgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxjb21tYW5kLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorCitpbnQgY2hlY2tjcHUodm9pZCkKK3sKKwlwdXRzKCJDUFU6IFNINFxuIik7CisJcmV0dXJuIDA7Cit9CisKK2ludCBjcHVfaW5pdCAodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKworaW50IGNsZWFudXBfYmVmb3JlX2xpbnV4ICh2b2lkKQoreworCWRpc2FibGVfaW50ZXJydXB0cygpOworCXJldHVybiAwOworfQorCitpbnQgZG9fcmVzZXQgKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCWRpc2FibGVfaW50ZXJydXB0cygpOworCXJlc2V0X2NwdSAoMCk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgZmx1c2hfY2FjaGUgKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCit9CisKK3ZvaWQgaWNhY2hlX2VuYWJsZSAodm9pZCkKK3sKKwljYWNoZV9jb250cm9sKDApOworfQorCit2b2lkIGljYWNoZV9kaXNhYmxlICh2b2lkKQoreworCWNhY2hlX2NvbnRyb2woMSk7Cit9CisKK2ludCBpY2FjaGVfc3RhdHVzICh2b2lkKQoreworCXJldHVybiAwOworfQorCit2b2lkIGRjYWNoZV9lbmFibGUgKHZvaWQpCit7Cit9CisKK3ZvaWQgZGNhY2hlX2Rpc2FibGUgKHZvaWQpCit7Cit9CisKK2ludCBkY2FjaGVfc3RhdHVzICh2b2lkKQoreworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvY3B1L3NoNC9pbnRlcnJ1cHRzLmMgYi9jcHUvc2g0L2ludGVycnVwdHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTg4ZWNjCi0tLSAvZGV2L251bGwKKysrIGIvY3B1L3NoNC9pbnRlcnJ1cHRzLmMKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNworICogTm9idWhpcm8gSXdhbWF0c3UgPGl3YW1hdHN1QG5pZ2F1cmkub3JnPgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKworaW50IGludGVycnVwdF9pbml0ICh2b2lkKQoreworCXJldHVybiAwOworfQorCit2b2lkIGVuYWJsZV9pbnRlcnJ1cHRzICh2b2lkKQoreworCit9CisKK2ludCBkaXNhYmxlX2ludGVycnVwdHMgKHZvaWQpeworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvY3B1L3NoNC9zdGFydC5TIGIvY3B1L3NoNC9zdGFydC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2OGViYjgKLS0tIC9kZXYvbnVsbAorKysgYi9jcHUvc2g0L3N0YXJ0LlMKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNworICogTm9idWhpcm8gSXdhbWF0c3UgPGl3YW1hdHN1QG5pZ2F1cmkub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDx2ZXJzaW9uLmg+CisKKwkudGV4dAorCS5hbGlnbgkyCisKKwkuZ2xvYmFsCV9zdGFydAorX3N0YXJ0OgorCW1vdi5sCS5fbG93bGV2ZWxfaW5pdCwgcjAKKzEwMDoJYnNyZglyMAorCW5vcAorCisJYnNyCTFmCisJbm9wCisxOglzdHMJcHIsIHI1CisJbW92LmwJLl9yZWxvY19kc3QsIHI0CisJYWRkCSMoX3N0YXJ0LTFiKSwgcjUKKwltb3YubAkuX3JlbG9jX2RzdF9lbmQsIHI2CisKKzI6CW1vdi5sCUByNSssIHIxCisJbW92LmwJcjEsIEByNAorCWFkZAkjNCwgcjQKKwljbXAvaHMJcjYsIHI0CisJYmYJMmIKKworCW1vdi5sCS5fYnNzX3N0YXJ0LCByNAorCW1vdi5sCS5fYnNzX2VuZCwgcjUKKwltb3YJIzAsIHIxCisKKzM6CW1vdi5sCXIxLCBAcjQJCQkvKiBic3MgY2xlYXIgKi8KKwlhZGQJIzQsIHI0CisJY21wL2hzCXI1LCByNAorCWJmCTNiCisKKwltb3YubAkuX2dkX2luaXQsIHIxMwkJLyogZ2xvYmFsIGRhdGEgKi8KKwltb3YubAkuX3N0YWNrX2luaXQsIHIxNQkvKiBzdGFjayAqLworCisJbW92LmwJLl9zaF9nZW5lcmljX2luaXQsIHIwCisJanNyCUByMAorCW5vcAorCitsb29wOgorCWJyYQlsb29wCisKKwkuYWxpZ24JMgorCisuX2xvd2xldmVsX2luaXQ6CS5sb25nCShsb3dsZXZlbF9pbml0IC0gKDEwMGIgKyA0KSkKKy5fcmVsb2NfZHN0OgkJLmxvbmcJcmVsb2NfZHN0CisuX3JlbG9jX2RzdF9lbmQ6CS5sb25nCXJlbG9jX2RzdF9lbmQKKy5fYnNzX3N0YXJ0OgkJLmxvbmcJYnNzX3N0YXJ0CisuX2Jzc19lbmQ6CQkubG9uZwlic3NfZW5kCisuX2dkX2luaXQ6CQkubG9uZwkoX3N0YXJ0IC0gQ0ZHX0dCTF9EQVRBX1NJWkUpCisuX3N0YWNrX2luaXQ6CQkubG9uZwkoX3N0YXJ0IC0gQ0ZHX0dCTF9EQVRBX1NJWkUgLSBDRkdfTUFMTE9DX0xFTiAtIDE2KQorLl9zaF9nZW5lcmljX2luaXQ6CS5sb25nCXNoX2dlbmVyaWNfaW5pdApkaWZmIC0tZ2l0IGEvY3B1L3NoNC90aW1lLmMgYi9jcHUvc2g0L3RpbWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjhhM2EwCi0tLSAvZGV2L251bGwKKysrIGIvY3B1L3NoNC90aW1lLmMKQEAgLTAsMCArMSw5OCBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNworICogTm9ib2J1aGlybyBJd2FtYXRzdSA8aXdhbWF0c3VAbmlnYXVyaS5vcmc+CisgKgorICogKEMpIENvcHlyaWdodCAyMDAzCisgKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisKKyNkZWZpbmUgVE1VX01BWF9DT1VOVEVSICh+MFVMKQorCitzdGF0aWMgdm9pZCB0bXVfdGltZXJfc3RhcnQgKHVuc2lnbmVkIGludCB0aW1lcikKK3sKKwlpZiAodGltZXIgPiAyKQorCQlyZXR1cm47CisKKwkqKCh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopIFRTVFIpIHw9ICgxIDw8IHRpbWVyKTsKK30KKworc3RhdGljIHZvaWQgdG11X3RpbWVyX3N0b3AgKHVuc2lnbmVkIGludCB0aW1lcikKK3sKKwl1OCB2YWwgPSAqKCh2b2xhdGlsZSB1OCAqKVRTVFIpOworCWlmICh0aW1lciA+IDIpCisJCXJldHVybjsKKwkqKCh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopVFNUUikgPSB2YWwgJn4oMSA8PCB0aW1lcik7Cit9CisKK2ludCB0aW1lcl9pbml0ICh2b2lkKQoreworCS8qIERpdmlkZSBjbG9jayBieSA0ICovCisJKih2b2xhdGlsZSB1MTYgKilUQ1IwID0gMDsKKworCXRtdV90aW1lcl9zdG9wKDApOworCXRtdV90aW1lcl9zdGFydCgwKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAgIEluIHRoZW9yeSB3ZSBzaG91bGQgcmV0dXJuIGEgdHJ1ZSA2NGJpdCB2YWx1ZSAoaWUgc29tZXRoaW5nIHRoYXQgZG9lc24ndAorICAgb3ZlcmZsb3cpLiBIb3dldmVyLCB3ZSBkb24ndC4gVGhlcmVmb3JlIGlmIFRNVSBydW5zIGF0IGZhc3Rlc3QgcmF0ZSBvZgorICAgNi43NSBNSHogdGhpcyB2YWx1ZSB3aWxsIHdyYXAgYWZ0ZXIgdS1ib290IGhhcyBiZWVuIHJ1bm5pbmcgZm9yIGFwcHJveAorICAgMTAgbWludXRlcy4KKyovCit1bnNpZ25lZCBsb25nIGxvbmcgZ2V0X3RpY2tzICh2b2lkKQoreworCXJldHVybiAoMCAtICooKHZvbGF0aWxlIHUzMiAqKSBUQ05UMCkpOworfQorCit1bnNpZ25lZCBsb25nIGdldF90aW1lciAodW5zaWduZWQgbG9uZyBiYXNlKQoreworCXJldHVybiAoKDAgLSAqKCh2b2xhdGlsZSB1MzIgKikgVENOVDApKSAtIGJhc2UpOworfQorCit2b2lkIHNldF90aW1lciAodW5zaWduZWQgbG9uZyB0KQoreworCSooKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKSBUQ05UMCkgPSAoMCAtIHQpOworfQorCit2b2lkIHJlc2V0X3RpbWVyICh2b2lkKQoreworCXRtdV90aW1lcl9zdG9wKDApOworCXNldF90aW1lciAoMCk7CisJdG11X3RpbWVyX3N0YXJ0KDApOworfQorCit2b2lkIHVkZWxheSAodW5zaWduZWQgbG9uZyB1c2VjKQoreworCXVuc2lnbmVkIGludCBzdGFydCA9IGdldF90aW1lciAoMCk7CisJdW5zaWduZWQgaW50IGVuZCA9IHN0YXJ0ICsgKHVzZWMgKiAoKENGR19IWiArIDUwMDAwMCkgLyAxMDAwMDAwKSk7CisKKwl3aGlsZSAoZ2V0X3RpbWVyICgwKSA8IGVuZCkKKwkJY29udGludWU7Cit9CisKK3Vuc2lnbmVkIGxvbmcgZ2V0X3RiY2xrICh2b2lkKQoreworCXJldHVybiBDRkdfSFo7Cit9CmRpZmYgLS1naXQgYS9jcHUvc2g0L3dhdGNoZG9nLmMgYi9jcHUvc2g0L3dhdGNoZG9nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQ2ZTIxNwotLS0gL2Rldi9udWxsCisrKyBiL2NwdS9zaDQvd2F0Y2hkb2cuYwpAQCAtMCwwICsxLDUwIEBACisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKworI2RlZmluZSBXRFRfQkFTRQlXVENOVAorCitzdGF0aWMgdW5zaWduZWQgY2hhciBjbnRfcmVhZCAodm9pZCl7CisJcmV0dXJuICooKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoV0RUX0JBU0UgKyAweDAwKSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGNzcl9yZWFkICh2b2lkKXsKKwlyZXR1cm4gKigodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKShXRFRfQkFTRSArIDB4MDQpKTsKK30KKworc3RhdGljIHZvaWQgY250X3dyaXRlICh1bnNpZ25lZCBjaGFyIHZhbHVlKXsKKwl3aGlsZSAoY3NyX3JlYWQoKSAmICgxIDw8IDUpKSB7CisJCS8qIGRlbGF5ICovCisJfQorCSooKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKFdEVF9CQVNFICsgMHgwMCkpCisJCT0gKCh1bnNpZ25lZCBzaG9ydCkgdmFsdWUpIHwgMHg1QTAwOworfQorCitzdGF0aWMgdm9pZCBjc3Jfd3JpdGUgKHVuc2lnbmVkIGNoYXIgdmFsdWUpeworCSooKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKFdEVF9CQVNFICsgMHgwNCkpCisJCT0gKCh1bnNpZ25lZCBzaG9ydCkgdmFsdWUpIHwgMHhBNTAwOworfQorCisKK2ludCB3YXRjaGRvZ19pbml0ICh2b2lkKXsgcmV0dXJuIDA7IH0KKwordm9pZCByZXNldF9jcHUgKHVuc2lnbmVkIGxvbmcgaWdub3JlZCkKK3sKKwl3aGlsZSgxKTsKK30KZGlmZiAtLWdpdCBhL2RvYy9SRUFETUUubWFydWJ1bi1wY21jaWEgYi9kb2MvUkVBRE1FLm1hcnVidW4tcGNtY2lhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlZDVjZDMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvUkVBRE1FLm1hcnVidW4tcGNtY2lhCkBAIC0wLDAgKzEsNjUgQEAKKworVS1Cb290IE1BUlVCVU4gTVItU0hQQy0wMSBQQ01DSUEgY29udHJvbGxlciBkcml2ZXIKKwlMYXN0IHVwZGF0ZSAyMS8xMS8yMDA3IGJ5IE5vYnVoaXJvIEl3YW1hdHN1CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworMC4gV2hhdCdzIHRoaXM/CisgICAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgTUFSVUJVTiBNUi1TSFBDLTAxLgorCXVybDogaHR0cDovL3d3dy5tYXJ1YnVuLmNvLmpwL3Byb2R1Y3Qvc2VtaWNvbi9kZXZpY2VzL3FnYzE4ZTAwMDAwMDJuMnouaHRtbAorCShTb3JyeSBKYXBhbmVzZSBvbmx5LikKKworICAgIFRoaXMgY2hpcCBpcyB1c2VkIHdpdGggU3VwZXJIIHdlbGwsIGFuZCBhZG9wdGVkIGJ5IHRoZQorICAgIHJlZmVyZW5jZSBib2FyZC4KKwlleC4gKiBNUzc3NTBTRTAxCisJCSogTVM3NzIyU0UwMQorCQkqIG90aGVyCisKKyAgICBUaGlzIGNoaXAgZG9lc24ndCBzdXBwb3J0IENhcmRCdXMuCisKKzEuIGJhc2Ugc291cmNlIGNvZGUKKyAgICBUaGUgY29kZSBpcyBiYXNlZCBvbiBzb3VyY2VzIGZyb20gdGhlIExpbnV4IGtlcm5lbAorICAgIAkoIGFyY2gvc2gva2VybmVsL2NmLWVuYWJsZXIuYyApLgorCisyLiBIb3cgdG8gdXNlCisgICAgVGhlIG9wdGlvbnMgeW91IGhhdmUgdG8gc3BlY2lmeSBpbiB0aGUgY29uZmlnIGZpbGUgYXJlICh3aXRoIHRoZQorICAgIHZhbHVlIGZvciBteSBib2FyZCBhcyBhbiBleGFtcGxlKToKKworICAgICogQ09ORklHX01BUlVCVU5fUENDQVJECisJSWYgeW91IHdhbnQgdG8gdXNlIHRoaXMgZGV2aWNlIGRyaXZlciwgc2hvdWxkIGRlZmluZSBDT05GSUdfTUFSVUJVTl9QQ0NBUkQuCisJZXguIAkjZGVmaW5lIENPTkZJR19NQVJVQlVOX1BDQ0FSRAorCisgICAgKiBDT05GSUdfUENNQ0lBX1NMT1RfQQorICAgIAlNb3N0IGRldmljZXMgaGF2ZSBvbmx5IG9uZSBzbG90LiBZb3Ugc2hvdWxkIGRlZmluZSBDT05GSUdfUENNQ0lBX1NMT1RfQSAuCisJZXguCSNkZWZpbmUgQ09ORklHX1BDTUNJQV9TTE9UX0EgICAgMQorCisgICAgKiBDRkdfTUFSVUJVTl9NUlNIUEMKKyAgICAJVGhpcyBpcyBNUi1TSFBDLTAxIFBDTUNJQSBjb250cm9sZXIgYmFzZSBhZGRyZXNzLgorCVlvdSBzaG91bGQgZG8gdGhlIHNldHRpbmcgbWF0Y2hlZCB0byB5b3VyIGVudmlyb25tZW50LgorCWV4LiAgI2RlZmluZSBDRkdfTUFSVUJVTl9NUlNIUEMgMHhiMDNmZmZlMAorCSAgICAgKCBmb3IgTVM3NzIyU0UwMSBlbnZpcm9ubWVudCApCisKKyAgICAqIENGR19NQVJVQlVOX01XMQorCVRoaXMgaXMgTVItU0hQQy0wMSBtZW1vcnkgd2luZG93IGJhc2UgYWRkcmVzcy4KKwlZb3Ugc2hvdWxkIGRvIHRoZSBzZXR0aW5nIG1hdGNoZWQgdG8geW91ciBlbnZpcm9ubWVudC4KKwlleC4gI2RlZmluZSBDRkdfTUFSVUJVTl9NVzEgMHhiMDQwMDAwMAorCSAgICAgKCBmb3IgTVM3NzIyU0UwMSBlbnZpcm9ubWVudCApCisKKyAgICAqIENGR19NQVJVQlVOX01XMQorCVRoaXMgaXMgTVItU0hQQy0wMSBhdHRyaWJ1dGUgd2luZG93IGJhc2UgYWRkcmVzcy4KKwlZb3Ugc2hvdWxkIGRvIHRoZSBzZXR0aW5nIG1hdGNoZWQgdG8geW91ciBlbnZpcm9ubWVudC4KKwlleC4gI2RlZmluZSBDRkdfTUFSVUJVTl9NVzIgMHhiMDUwMDAwMAorCSAgICAgKCBmb3IgTVM3NzIyU0UwMSBlbnZpcm9ubWVudCApCisKKyAgICAqIENGR19NQVJVQlVOX01XMQorCVRoaXMgaXMgTVItU0hQQy0wMSBJL08gd2luZG93IGJhc2UgYWRkcmVzcy4KKwlZb3Ugc2hvdWxkIGRvIHRoZSBzZXR0aW5nIG1hdGNoZWQgdG8geW91ciBlbnZpcm9ubWVudC4KKwlleC4gI2RlZmluZSBDRkdfTUFSVUJVTl9JTyAgMHhiMDYwMDAwMAorCSAgICAgKCBmb3IgTVM3NzIyU0UwMSBlbnZpcm9ubWVudCApCisKKzMuIE90aGVyCisgICAgKiBDaGVjayBDb21wYWN0IEZsYXNoIG9ubHkuCisgICAgKiBNYXliZSwgTkUyMDAwIGNvbXBhdGlibGUgTklDIGlzIHN1cmUgdG8gbW92ZS4KKworQ29weXJpZ2h0IChjKSAyMDA3CisJTm9idWhpcm8gSXdhbWF0c3UgPGl3YW1hdHN1QG5pZ2F1ci5vcmc+CmRpZmYgLS1naXQgYS9kb2MvUkVBRE1FLnNoIGIvZG9jL1JFQURNRS5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzVkMzYwCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL1JFQURNRS5zaApAQCAtMCwwICsxLDYxIEBACisKK1UtQm9vdCBmb3IgUmVuZXNhcyBTdXBlckgKKwlMYXN0IHVwZGF0ZSAwOC8xMC8yMDA3IGJ5IE5vYnVoaXJvIEl3YW1hdHN1CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiswLiBXaGF0J3MgdGhpcz8KKwlUaGlzIGZpbGUgY29udGFpbnMgc3RhdHVzIGluZm9ybWF0aW9uIGZvciB0aGUgcG9ydCBvZiBVLUJvb3QgdG8gdGhlCisJUmVuZXNhcyBTdXBlckggc2VyaWVzIG9mIENQVXMuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisxLiBPdmVydmlldworCVN1cGVySCBoYXMgYW4gb3JpZ2luYWwgYm9vdCBsb2FkZXIuIEhvd2V2ZXIsIHNvdXJjZSBjb2RlIGlzIGRpcnR5LCBhbmQKKwltYWludGVuYW5jZSBpcyBub3QgZG9uZS4KKwlUbyBpbXByb3ZlIHNoYXJpbmcgYW5kIHRoZSBtYWludGVuYW5jZSBvZiB0aGUgY29kZSwgTm9idWhpcm8gSXdhbWF0c3UKKwlzdGFydGVkIHRoZSBwb3J0aW5nIHRvIHUtYm9vdCBpbiAyMDA3LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMi4gU3VwcG9ydGVkIENQVXMKKworCTIuMS4gUmVuZXNhcyBTSDc3NTAvU0g3NzUwUgorCTIuMi4gUmVuZXNhcyBTSDc3MjIKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzMuIFN1cHBvcnRlZCBCb2FyZHMKKworCTMuMS4gSGl0YWNoaSBVTCBNUzc3NTBTRTAxL01TNzc1MFJTRTAxCisJCUJvYXJkIHNwZWNpZmljIGNvZGUgaXMgaW4gYm9hcmQvbXM3NzUwc2UKKwkJVG8gdXNlIHRoaXMgYm9hcmQsIHR5cGUgIm1ha2UgbXM3NzUwc2VfY29uZmlnIi4KKworCTMuMi4gSGl0YWNoaSBVTCBNUzc3MjJTRTAxCisJCUJvYXJkIHNwZWNpZmljIGNvZGUgaXMgaW4gYm9hcmQvbXM3NzIyc2UKKwkJVG8gdXNlIHRoaXMgYm9hcmQsIHR5cGUgIm1ha2UgbXM3NzIyc2VfY29uZmlnIi4KKworCSoqIFJFQURNRSAqKgorCQlJbiBTdXBlckgsIFMtcmVjb3JkIGFuZCBiaW5hcnkgb2YgbWFkZSB1LWJvb3Qgd29yayBvbiB0aGUgbWVtb3J5LgorCQlXaGVuIHUtYm9vdCBpcyB3cml0dGVuIGluIHRoZSBmbGFzaCwgaXQgaXMgbmVjZXNzYXJ5IHRvIGNoYW5nZSB0aGUKKwkJYWRkcmVzcyBieSB1c2luZyAnb2JqY29weScuCisJCWV4KSBzaFgtbGludXgtb2JqY29weSAtSWJpbmFyeSAtT3NyZWMgdS1ib290LmJpbiB1LWJvb3QuZmxhc2guc3JlYworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNC4gQ29tcGlsZXIKKwlZb3UgY2FuIHVzZSB0aGUgZm9sbG93aW5nIG9mIHUtYm9vdCB0byBjb21waWxlLgorCQktIFN1cGVySCBMaW51eCBPcGVuIHNpdGUKKwkJCWh0dHA6Ly93d3cuc3VwZXJoLWxpbnV4Lm9yZy8KKwkJLSBLUElUIEdOVSB0b29scworCQkJaHR0cDovL3d3dy5rcGl0Z251dG9vbHMuY29tLworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNS4gRnV0dXJlCisJSSBwbGFuIHRvIHN1cHBvcnQgdGhlIGZvbGxvd2luZyBDUFVzIGFuZCBib2FyZHMuCisJCTUuMS4gQ1BVcworCQkJLSBTSDc3MTAvU0g3NzEyIChTSDMpCisJCQktIFNINzc4MChTSDQpCisJCQktIFNINzc4NShTSDQpCisKKwkJNS4yLiBCb2FyZHMKKwkJCS0gTWFueSBib2FyZHMgOy0pCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDb3B5cmlnaHQgKGMpIDIwMDcKKyAgICBOb2J1aGlybyBJd2FtYXRzdSA8aXdhbWF0c3VAbmlnYXVyLm9yZz4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL01ha2VmaWxlIGIvZHJpdmVycy9tdGQvTWFrZWZpbGUKaW5kZXggOTVjNWUwMi4uOTUyZTkxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tdGQvTWFrZWZpbGUKQEAgLTI5LDYgKzI5LDcgQEAKIENPQkpTLXkgKz0gY2ZpX2ZsYXNoLm8KIENPQkpTLXkgKz0gZGF0YWZsYXNoLm8KIENPQkpTLXkgKz0gbXdfZWVwcm9tLm8KK0NPQkpTLSQoQ09ORklHX0ZMQVNIX0NGSV9MRUdBQ1kpICs9IGplZGVjX2ZsYXNoLm8KIAogQ09CSlMJOj0gJChDT0JKUy15KQogU1JDUyAJOj0gJChDT0JKUzoubz0uYykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2NmaV9mbGFzaC5jIGIvZHJpdmVycy9tdGQvY2ZpX2ZsYXNoLmMKaW5kZXggNTU3OWExZS4uZjM3MGU0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvY2ZpX2ZsYXNoLmMKKysrIGIvZHJpdmVycy9tdGQvY2ZpX2ZsYXNoLmMKQEAgLTQyLDkgKzQyLDEyIEBACiAjaWZkZWYJQ0ZHX0ZMQVNIX0NGSV9EUklWRVIKIAogLyoKLSAqIFRoaXMgZmlsZSBpbXBsZW1lbnRzIGEgQ29tbW9uIEZsYXNoIEludGVyZmFjZSAoQ0ZJKSBkcml2ZXIgZm9yIFUtQm9vdC4KLSAqIFRoZSB3aWR0aCBvZiB0aGUgcG9ydCBhbmQgdGhlIHdpZHRoIG9mIHRoZSBjaGlwcyBhcmUgZGV0ZXJtaW5lZCBhdCBpbml0aWFsaXphdGlvbi4KLSAqIFRoZXNlIHdpZHRocyBhcmUgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGFkZHJlc3MgZm9yIGFjY2VzcyBDRkkgZGF0YSBzdHJ1Y3R1cmVzLgorICogVGhpcyBmaWxlIGltcGxlbWVudHMgYSBDb21tb24gRmxhc2ggSW50ZXJmYWNlIChDRkkpIGRyaXZlciBmb3IKKyAqIFUtQm9vdC4KKyAqCisgKiBUaGUgd2lkdGggb2YgdGhlIHBvcnQgYW5kIHRoZSB3aWR0aCBvZiB0aGUgY2hpcHMgYXJlIGRldGVybWluZWQgYXQKKyAqIGluaXRpYWxpemF0aW9uLiAgVGhlc2Ugd2lkdGhzIGFyZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgYWRkcmVzcyBmb3IKKyAqIGFjY2VzcyBDRkkgZGF0YSBzdHJ1Y3R1cmVzLgogICoKICAqIFJlZmVyZW5jZXMKICAqIEpFREVDIFN0YW5kYXJkIEpFU0Q2OCAtIENvbW1vbiBGbGFzaCBJbnRlcmZhY2UgKENGSSkKQEAgLTU1LDcgKzU4LDcgQEAKICAqIEFNRC9TcGFuc2lvbiBBcHBsaWNhdGlvbiBOb3RlOiBNaWdyYXRpb24gZnJvbSBTaW5nbGUtYnl0ZSB0byBUaHJlZS1ieXRlCiAgKiAgIERldmljZSBJRHMsIFB1YmxpY2F0aW9uIE51bWJlciAyNTUzOCBSZXZpc2lvbiBBLCBOb3ZlbWJlciA4LCAyMDAxCiAgKgotICogZGVmaW5lIENGR19XUklURV9TV0FQUEVEX0RBVEEsIGlmIHlvdSBoYXZlIHRvIHN3YXAgdGhlIEJ5dGVzIGJldHdlZW4KKyAqIERlZmluZSBDRkdfV1JJVEVfU1dBUFBFRF9EQVRBLCBpZiB5b3UgaGF2ZSB0byBzd2FwIHRoZSBCeXRlcyBiZXR3ZWVuCiAgKiByZWFkaW5nIGFuZCB3cml0aW5nIC4uLiAoeWVzIHRoZXJlIGlzIHN1Y2ggYSBIYXJkd2FyZSkuCiAgKi8KIApAQCAtOTgsMTAgKzEwMSw2IEBACiAjZGVmaW5lIEFNRF9TVEFUVVNfVE9HR0xFCQkweDQwCiAjZGVmaW5lIEFNRF9TVEFUVVNfRVJST1IJCTB4MjAKIAotI2RlZmluZSBBTURfQUREUl9FUkFTRV9TVEFSVAkoKGluZm8tPnBvcnR3aWR0aCA9PSBGTEFTSF9DRklfOEJJVCkgPyAweEFBQSA6IDB4NTU1KQotI2RlZmluZSBBTURfQUREUl9TVEFSVAkJKChpbmZvLT5wb3J0d2lkdGggPT0gRkxBU0hfQ0ZJXzhCSVQpID8gMHhBQUEgOiAweDU1NSkKLSNkZWZpbmUgQU1EX0FERFJfQUNLCQkoKGluZm8tPnBvcnR3aWR0aCA9PSBGTEFTSF9DRklfOEJJVCkgPyAweDU1NSA6IDB4MkFBKQotCiAjZGVmaW5lIEZMQVNIX09GRlNFVF9NQU5VRkFDVFVSRVJfSUQJMHgwMAogI2RlZmluZSBGTEFTSF9PRkZTRVRfREVWSUNFX0lECQkweDAxCiAjZGVmaW5lIEZMQVNIX09GRlNFVF9ERVZJQ0VfSUQyCQkweDBFCkBAIC0xMTAsNyArMTA5LDggQEAKICNkZWZpbmUgRkxBU0hfT0ZGU0VUX0NGSV9BTFQJCTB4NTU1CiAjZGVmaW5lIEZMQVNIX09GRlNFVF9DRklfUkVTUAkJMHgxMAogI2RlZmluZSBGTEFTSF9PRkZTRVRfUFJJTUFSWV9WRU5ET1IJMHgxMwotI2RlZmluZSBGTEFTSF9PRkZTRVRfRVhUX1FVRVJZX1RfUF9BRERSCTB4MTUJLyogZXh0ZW5kZWQgcXVlcnkgdGFibGUgcHJpbWFyeSBhZGRyICovCisvKiBleHRlbmRlZCBxdWVyeSB0YWJsZSBwcmltYXJ5IGFkZHJlc3MgKi8KKyNkZWZpbmUgRkxBU0hfT0ZGU0VUX0VYVF9RVUVSWV9UX1BfQUREUgkweDE1CiAjZGVmaW5lIEZMQVNIX09GRlNFVF9XVE9VVAkJMHgxRgogI2RlZmluZSBGTEFTSF9PRkZTRVRfV0JUT1VUCQkweDIwCiAjZGVmaW5lIEZMQVNIX09GRlNFVF9FVE9VVAkJMHgyMQpAQCAtMTQ5LDE2ICsxNDksOSBAQAogCXVuc2lnbmVkIGxvbmcgbG9uZyBsbDsKIH0gY2Zpd29yZF90OwogCi10eXBlZGVmIHVuaW9uIHsKLQl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICpjcDsKLQl2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqd3A7Ci0Jdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqbHA7Ci0Jdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBsb25nICpsbHA7Ci19IGNmaXB0cl90OwotCiAjZGVmaW5lIE5VTV9FUkFTRV9SRUdJT05TCTQgLyogbWF4LiBudW1iZXIgb2YgZXJhc2UgcmVnaW9ucyAqLwogCi1zdGF0aWMgdWludCBmbGFzaF9vZmZzZXRfY2ZpWzJdPXtGTEFTSF9PRkZTRVRfQ0ZJLEZMQVNIX09GRlNFVF9DRklfQUxUfTsKK3N0YXRpYyB1aW50IGZsYXNoX29mZnNldF9jZmlbMl0gPSB7IEZMQVNIX09GRlNFVF9DRkksIEZMQVNIX09GRlNFVF9DRklfQUxUIH07CiAKIC8qIHVzZSBDRkdfTUFYX0ZMQVNIX0JBTktTX0RFVEVDVCBpZiBkZWZpbmVkICovCiAjaWZkZWYgQ0ZHX01BWF9GTEFTSF9CQU5LU19ERVRFQ1QKQEAgLTE3NiwyNTAgKzE2OSw4MCBAQAogI2RlZmluZSBDRkdfRkxBU0hfQ0ZJX1dJRFRICUZMQVNIX0NGSV84QklUCiAjZW5kaWYKIAotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBGdW5jdGlvbnMKLSAqLwotCiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgZmxhc2hfc2VjdF90OwogCi1zdGF0aWMgdm9pZCBmbGFzaF9hZGRfYnl0ZSAoZmxhc2hfaW5mb190ICogaW5mbywgY2Zpd29yZF90ICogY3dvcmQsIHVjaGFyIGMpOwotc3RhdGljIHZvaWQgZmxhc2hfbWFrZV9jbWQgKGZsYXNoX2luZm9fdCAqIGluZm8sIHVjaGFyIGNtZCwgdm9pZCAqY21kYnVmKTsKLXN0YXRpYyB2b2lkIGZsYXNoX3dyaXRlX2NtZCAoZmxhc2hfaW5mb190ICogaW5mbywgZmxhc2hfc2VjdF90IHNlY3QsIHVpbnQgb2Zmc2V0LCB1Y2hhciBjbWQpOwotc3RhdGljIHZvaWQgZmxhc2hfdW5sb2NrX3NlcSAoZmxhc2hfaW5mb190ICogaW5mbywgZmxhc2hfc2VjdF90IHNlY3QpOwotc3RhdGljIGludCBmbGFzaF9pc2VxdWFsIChmbGFzaF9pbmZvX3QgKiBpbmZvLCBmbGFzaF9zZWN0X3Qgc2VjdCwgdWludCBvZmZzZXQsIHVjaGFyIGNtZCk7Ci1zdGF0aWMgaW50IGZsYXNoX2lzc2V0IChmbGFzaF9pbmZvX3QgKiBpbmZvLCBmbGFzaF9zZWN0X3Qgc2VjdCwgdWludCBvZmZzZXQsIHVjaGFyIGNtZCk7Ci1zdGF0aWMgaW50IGZsYXNoX3RvZ2dsZSAoZmxhc2hfaW5mb190ICogaW5mbywgZmxhc2hfc2VjdF90IHNlY3QsIHVpbnQgb2Zmc2V0LCB1Y2hhciBjbWQpOwotc3RhdGljIHZvaWQgZmxhc2hfcmVhZF9qZWRlY19pZHMgKGZsYXNoX2luZm9fdCAqIGluZm8pOwotc3RhdGljIGludCBmbGFzaF9kZXRlY3RfY2ZpIChmbGFzaF9pbmZvX3QgKiBpbmZvKTsKLXN0YXRpYyBpbnQgZmxhc2hfd3JpdGVfY2Zpd29yZCAoZmxhc2hfaW5mb190ICogaW5mbywgdWxvbmcgZGVzdCwgY2Zpd29yZF90IGN3b3JkKTsKLXN0YXRpYyBpbnQgZmxhc2hfZnVsbF9zdGF0dXNfY2hlY2sgKGZsYXNoX2luZm9fdCAqIGluZm8sIGZsYXNoX3NlY3RfdCBzZWN0b3IsCi0JCQkJICAgIHVsb25nIHRvdXQsIGNoYXIgKnByb21wdCk7Ci11bG9uZyBmbGFzaF9nZXRfc2l6ZSAodWxvbmcgYmFzZSwgaW50IGJhbmtudW0pOwotI2lmIGRlZmluZWQoQ0ZHX0VOVl9JU19JTl9GTEFTSCkgfHwgZGVmaW5lZChDRkdfRU5WX0FERFJfUkVEVU5EKSB8fCAoQ0ZHX01PTklUT1JfQkFTRSA+PSBDRkdfRkxBU0hfQkFTRSkKLXN0YXRpYyBmbGFzaF9pbmZvX3QgKmZsYXNoX2dldF9pbmZvKHVsb25nIGJhc2UpOwotI2VuZGlmCi0jaWZkZWYgQ0ZHX0ZMQVNIX1VTRV9CVUZGRVJfV1JJVEUKLXN0YXRpYyBpbnQgZmxhc2hfd3JpdGVfY2ZpYnVmZmVyIChmbGFzaF9pbmZvX3QgKiBpbmZvLCB1bG9uZyBkZXN0LCB1Y2hhciAqIGNwLCBpbnQgbGVuKTsKLSNlbmRpZgorLyogQ0ZJIHN0YW5kYXJkIHF1ZXJ5IHN0cnVjdHVyZSAqLworc3RydWN0IGNmaV9xcnkgeworCXU4CXFyeVszXTsKKwl1MTYJcF9pZDsKKwl1MTYJcF9hZHI7CisJdTE2CWFfaWQ7CisJdTE2CWFfYWRyOworCXU4CXZjY19taW47CisJdTgJdmNjX21heDsKKwl1OAl2cHBfbWluOworCXU4CXZwcF9tYXg7CisJdTgJd29yZF93cml0ZV90aW1lb3V0X3R5cDsKKwl1OAlidWZfd3JpdGVfdGltZW91dF90eXA7CisJdTgJYmxvY2tfZXJhc2VfdGltZW91dF90eXA7CisJdTgJY2hpcF9lcmFzZV90aW1lb3V0X3R5cDsKKwl1OAl3b3JkX3dyaXRlX3RpbWVvdXRfbWF4OworCXU4CWJ1Zl93cml0ZV90aW1lb3V0X21heDsKKwl1OAlibG9ja19lcmFzZV90aW1lb3V0X21heDsKKwl1OAljaGlwX2VyYXNlX3RpbWVvdXRfbWF4OworCXU4CWRldl9zaXplOworCXUxNglpbnRlcmZhY2VfZGVzYzsKKwl1MTYJbWF4X2J1Zl93cml0ZV9zaXplOworCXU4CW51bV9lcmFzZV9yZWdpb25zOworCXUzMgllcmFzZV9yZWdpb25faW5mb1tOVU1fRVJBU0VfUkVHSU9OU107Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBjcmVhdGUgYW4gYWRkcmVzcyBiYXNlZCBvbiB0aGUgb2Zmc2V0IGFuZCB0aGUgcG9ydCB3aWR0aAotICovCi1pbmxpbmUgdWNoYXIgKmZsYXNoX21ha2VfYWRkciAoZmxhc2hfaW5mb190ICogaW5mbywgZmxhc2hfc2VjdF90IHNlY3QsIHVpbnQgb2Zmc2V0KQorc3RydWN0IGNmaV9wcmlfaGRyIHsKKwl1OAlwcmlbM107CisJdTgJbWFqb3JfdmVyc2lvbjsKKwl1OAltaW5vcl92ZXJzaW9uOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RhdGljIHZvaWQgZmxhc2hfd3JpdGU4KHU4IHZhbHVlLCB2b2lkICphZGRyKQogewotCXJldHVybiAoKHVjaGFyICopIChpbmZvLT5zdGFydFtzZWN0XSArIChvZmZzZXQgKiBpbmZvLT5wb3J0d2lkdGgpKSk7CisJX19yYXdfd3JpdGViKHZhbHVlLCBhZGRyKTsKIH0KIAotI2lmZGVmIERFQlVHCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBEZWJ1ZyBzdXBwb3J0Ci0gKi8KLXZvaWQgcHJpbnRfbG9uZ2xvbmcgKGNoYXIgKnN0ciwgdW5zaWduZWQgbG9uZyBsb25nIGRhdGEpCitzdGF0aWMgdm9pZCBmbGFzaF93cml0ZTE2KHUxNiB2YWx1ZSwgdm9pZCAqYWRkcikKIHsKLQlpbnQgaTsKLQljaGFyICpjcDsKLQotCWNwID0gKHVuc2lnbmVkIGNoYXIgKikgJmRhdGE7Ci0JZm9yIChpID0gMDsgaSA8IDg7IGkrKykKLQkJc3ByaW50ZiAoJnN0cltpICogMl0sICIlMi4yeCIsICpjcCsrKTsKLX0KLXN0YXRpYyB2b2lkIGZsYXNoX3ByaW50cXJ5IChmbGFzaF9pbmZvX3QgKiBpbmZvLCBmbGFzaF9zZWN0X3Qgc2VjdCkKLXsKLQljZmlwdHJfdCBjcHRyOwotCWludCB4LCB5OwotCi0JZm9yICh4ID0gMDsgeCA8IDB4NDA7IHggKz0gMTZVIC8gaW5mby0+cG9ydHdpZHRoKSB7Ci0JCWNwdHIuY3AgPQotCQkJZmxhc2hfbWFrZV9hZGRyIChpbmZvLCBzZWN0LAotCQkJCQkgeCArIEZMQVNIX09GRlNFVF9DRklfUkVTUCk7Ci0JCWRlYnVnICgiJXAgOiAiLCBjcHRyLmNwKTsKLQkJZm9yICh5ID0gMDsgeSA8IDE2OyB5KyspIHsKLQkJCWRlYnVnICgiJTIuMnggIiwgY3B0ci5jcFt5XSk7Ci0JCX0KLQkJZGVidWcgKCIgIik7Ci0JCWZvciAoeSA9IDA7IHkgPCAxNjsgeSsrKSB7Ci0JCQlpZiAoY3B0ci5jcFt5XSA+PSAweDIwICYmIGNwdHIuY3BbeV0gPD0gMHg3ZSkgewotCQkJCWRlYnVnICgiJWMiLCBjcHRyLmNwW3ldKTsKLQkJCX0gZWxzZSB7Ci0JCQkJZGVidWcgKCIuIik7Ci0JCQl9Ci0JCX0KLQkJZGVidWcgKCJcbiIpOwotCX0KLX0KLSNlbmRpZgotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIHJlYWQgYSBjaGFyYWN0ZXIgYXQgYSBwb3J0IHdpZHRoIGFkZHJlc3MKLSAqLwotaW5saW5lIHVjaGFyIGZsYXNoX3JlYWRfdWNoYXIgKGZsYXNoX2luZm9fdCAqIGluZm8sIHVpbnQgb2Zmc2V0KQotewotCXVjaGFyICpjcDsKLQotCWNwID0gZmxhc2hfbWFrZV9hZGRyIChpbmZvLCAwLCBvZmZzZXQpOwotI2lmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKSB8fCBkZWZpbmVkKENGR19XUklURV9TV0FQUEVEX0RBVEEpCi0JcmV0dXJuIChjcFswXSk7Ci0jZWxzZQotCXJldHVybiAoY3BbaW5mby0+cG9ydHdpZHRoIC0gMV0pOwotI2VuZGlmCisJX19yYXdfd3JpdGV3KHZhbHVlLCBhZGRyKTsKIH0KIAotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogcmVhZCBhIHNob3J0IHdvcmQgYnkgc3dhcHBpbmcgZm9yIHBwYyBmb3JtYXQuCi0gKi8KLXVzaG9ydCBmbGFzaF9yZWFkX3VzaG9ydCAoZmxhc2hfaW5mb190ICogaW5mbywgZmxhc2hfc2VjdF90IHNlY3QsIHVpbnQgb2Zmc2V0KQorc3RhdGljIHZvaWQgZmxhc2hfd3JpdGUzMih1MzIgdmFsdWUsIHZvaWQgKmFkZHIpCiB7Ci0JdWNoYXIgKmFkZHI7Ci0JdXNob3J0IHJldHZhbDsKLQotI2lmZGVmIERFQlVHCi0JaW50IHg7Ci0jZW5kaWYKLQlhZGRyID0gZmxhc2hfbWFrZV9hZGRyIChpbmZvLCBzZWN0LCBvZmZzZXQpOwotCi0jaWZkZWYgREVCVUcKLQlkZWJ1ZyAoInVzaG9ydCBhZGRyIGlzIGF0ICVwIGluZm8tPnBvcnR3aWR0aCA9ICVkXG4iLCBhZGRyLAotCSAgICAgICBpbmZvLT5wb3J0d2lkdGgpOwotCWZvciAoeCA9IDA7IHggPCAyICogaW5mby0+cG9ydHdpZHRoOyB4KyspIHsKLQkJZGVidWcgKCJhZGRyWyV4XSA9IDB4JXhcbiIsIHgsIGFkZHJbeF0pOwotCX0KLSNlbmRpZgotI2lmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKSB8fCBkZWZpbmVkKENGR19XUklURV9TV0FQUEVEX0RBVEEpCi0JcmV0dmFsID0gKChhZGRyWyhpbmZvLT5wb3J0d2lkdGgpXSA8PCA4KSB8IGFkZHJbMF0pOwotI2Vsc2UKLQlyZXR2YWwgPSAoKGFkZHJbKDIgKiBpbmZvLT5wb3J0d2lkdGgpIC0gMV0gPDwgOCkgfAotCQkgIGFkZHJbaW5mby0+cG9ydHdpZHRoIC0gMV0pOwotI2VuZGlmCi0KLQlkZWJ1ZyAoInJldHZhbCA9IDB4JXhcbiIsIHJldHZhbCk7Ci0JcmV0dXJuIHJldHZhbDsKKwlfX3Jhd193cml0ZWwodmFsdWUsIGFkZHIpOwogfQogCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiByZWFkIGEgbG9uZyB3b3JkIGJ5IHBpY2tpbmcgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJ5dGUgb2YgZWFjaCBtYXhpbXVtCi0gKiBwb3J0IHNpemUgd29yZC4gU3dhcCBmb3IgcHBjIGZvcm1hdC4KLSAqLwotdWxvbmcgZmxhc2hfcmVhZF9sb25nIChmbGFzaF9pbmZvX3QgKiBpbmZvLCBmbGFzaF9zZWN0X3Qgc2VjdCwgdWludCBvZmZzZXQpCitzdGF0aWMgdm9pZCBmbGFzaF93cml0ZTY0KHU2NCB2YWx1ZSwgdm9pZCAqYWRkcikKIHsKLQl1Y2hhciAqYWRkcjsKLQl1bG9uZyByZXR2YWw7Ci0KLSNpZmRlZiBERUJVRwotCWludCB4OwotI2VuZGlmCi0JYWRkciA9IGZsYXNoX21ha2VfYWRkciAoaW5mbywgc2VjdCwgb2Zmc2V0KTsKLQotI2lmZGVmIERFQlVHCi0JZGVidWcgKCJsb25nIGFkZHIgaXMgYXQgJXAgaW5mby0+cG9ydHdpZHRoID0gJWRcbiIsIGFkZHIsCi0JICAgICAgIGluZm8tPnBvcnR3aWR0aCk7Ci0JZm9yICh4ID0gMDsgeCA8IDQgKiBpbmZvLT5wb3J0d2lkdGg7IHgrKykgewotCQlkZWJ1ZyAoImFkZHJbJXhdID0gMHgleFxuIiwgeCwgYWRkclt4XSk7Ci0JfQotI2VuZGlmCi0jaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pIHx8IGRlZmluZWQoQ0ZHX1dSSVRFX1NXQVBQRURfREFUQSkKLQlyZXR2YWwgPSAoYWRkclswXSA8PCAxNikgfCAoYWRkclsoaW5mby0+cG9ydHdpZHRoKV0gPDwgMjQpIHwKLQkJKGFkZHJbKDIgKiBpbmZvLT5wb3J0d2lkdGgpXSkgfCAoYWRkclsoMyAqIGluZm8tPnBvcnR3aWR0aCldIDw8IDgpOwotI2Vsc2UKLQlyZXR2YWwgPSAoYWRkclsoMiAqIGluZm8tPnBvcnR3aWR0aCkgLSAxXSA8PCAyNCkgfAotCQkoYWRkclsoaW5mby0+cG9ydHdpZHRoKSAtIDFdIDw8IDE2KSB8Ci0JCShhZGRyWyg0ICogaW5mby0+cG9ydHdpZHRoKSAtIDFdIDw8IDgpIHwKLQkJYWRkclsoMyAqIGluZm8tPnBvcnR3aWR0aCkgLSAxXTsKLSNlbmRpZgotCXJldHVybiByZXR2YWw7CisJLyogTm8gYXJjaGl0ZWN0dXJlcyBjdXJyZW50bHkgaW1wbGVtZW50IF9fcmF3X3dyaXRlcSgpICovCisJKih2b2xhdGlsZSB1NjQgKilhZGRyID0gdmFsdWU7CiB9CiAKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi11bnNpZ25lZCBsb25nIGZsYXNoX2luaXQgKHZvaWQpCitzdGF0aWMgdTggZmxhc2hfcmVhZDgodm9pZCAqYWRkcikKIHsKLQl1bnNpZ25lZCBsb25nIHNpemUgPSAwOwotCWludCBpOworCXJldHVybiBfX3Jhd19yZWFkYihhZGRyKTsKK30KIAotI2lmZGVmIENGR19GTEFTSF9QUk9URUNUSU9OCi0JY2hhciAqcyA9IGdldGVudigidW5sb2NrIik7Ci0jZW5kaWYKK3N0YXRpYyB1MTYgZmxhc2hfcmVhZDE2KHZvaWQgKmFkZHIpCit7CisJcmV0dXJuIF9fcmF3X3JlYWR3KGFkZHIpOworfQogCi0JLyogSW5pdDogbm8gRkxBU0hlcyBrbm93biAqLwotCWZvciAoaSA9IDA7IGkgPCBDRkdfTUFYX0ZMQVNIX0JBTktTOyArK2kpIHsKLQkJZmxhc2hfaW5mb1tpXS5mbGFzaF9pZCA9IEZMQVNIX1VOS05PV047Ci0JCXNpemUgKz0gZmxhc2hfaW5mb1tpXS5zaXplID0gZmxhc2hfZ2V0X3NpemUgKGJhbmtfYmFzZVtpXSwgaSk7Ci0JCWlmIChmbGFzaF9pbmZvW2ldLmZsYXNoX2lkID09IEZMQVNIX1VOS05PV04pIHsKLSNpZm5kZWYgQ0ZHX0ZMQVNIX1FVSUVUX1RFU1QKLQkJCXByaW50ZiAoIiMjIFVua25vd24gRkxBU0ggb24gQmFuayAlZCAtIFNpemUgPSAweCUwOGx4ID0gJWxkIE1CXG4iLAotCQkJCWkrMSwgZmxhc2hfaW5mb1tpXS5zaXplLCBmbGFzaF9pbmZvW2ldLnNpemUgPDwgMjApOwotI2VuZGlmIC8qIENGR19GTEFTSF9RVUlFVF9URVNUICovCi0JCX0KLSNpZmRlZiBDRkdfRkxBU0hfUFJPVEVDVElPTgotCQllbHNlIGlmICgocyAhPSBOVUxMKSAmJiAoc3RyY21wKHMsICJ5ZXMiKSA9PSAwKSkgewotCQkJLyoKLQkJCSAqIE9ubHkgdGhlIFUtQm9vdCBpbWFnZSBhbmQgaXQncyBlbnZpcm9ubWVudCBpcyBwcm90ZWN0ZWQsCi0JCQkgKiBhbGwgb3RoZXIgc2VjdG9ycyBhcmUgdW5wcm90ZWN0ZWQgKHVubG9ja2VkKSBpZiBmbGFzaAotCQkJICogaGFyZHdhcmUgcHJvdGVjdGlvbiBpcyB1c2VkIChDRkdfRkxBU0hfUFJPVEVDVElPTikgYW5kCi0JCQkgKiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgInVubG9jayIgaXMgc2V0IHRvICJ5ZXMiLgotCQkJICovCi0JCQlpZiAoZmxhc2hfaW5mb1tpXS5sZWdhY3lfdW5sb2NrKSB7Ci0JCQkJaW50IGs7CitzdGF0aWMgdTMyIGZsYXNoX3JlYWQzMih2b2lkICphZGRyKQoreworCXJldHVybiBfX3Jhd19yZWFkbChhZGRyKTsKK30KIAotCQkJCS8qCi0JCQkJICogRGlzYWJsZSBsZWdhY3lfdW5sb2NrIHRlbXBvcmFyaWx5LCBzaW5jZQotCQkJCSAqIGZsYXNoX3JlYWxfcHJvdGVjdCB3b3VsZCByZWxvY2sgYWxsIG90aGVyIHNlY3RvcnMKLQkJCQkgKiBhZ2FpbiBvdGhlcndpc2UuCi0JCQkJICovCi0JCQkJZmxhc2hfaW5mb1tpXS5sZWdhY3lfdW5sb2NrID0gMDsKLQotCQkJCS8qCi0JCQkJICogTGVnYWN5IHVubG9ja2luZyAoZS5nLiBJbnRlbCBKMykgLT4gdW5sb2NrIG9ubHkgb25lCi0JCQkJICogc2VjdG9yLiBUaGlzIHdpbGwgdW5sb2NrIGFsbCBzZWN0b3JzLgotCQkJCSAqLwotCQkJCWZsYXNoX3JlYWxfcHJvdGVjdCAoJmZsYXNoX2luZm9baV0sIDAsIDApOwotCi0JCQkJZmxhc2hfaW5mb1tpXS5sZWdhY3lfdW5sb2NrID0gMTsKLQotCQkJCS8qCi0JCQkJICogTWFudWFsbHkgbWFyayBvdGhlciBzZWN0b3JzIGFzIHVubG9ja2VkICh1bnByb3RlY3RlZCkKLQkJCQkgKi8KLQkJCQlmb3IgKGsgPSAxOyBrIDwgZmxhc2hfaW5mb1tpXS5zZWN0b3JfY291bnQ7IGsrKykKLQkJCQkJZmxhc2hfaW5mb1tpXS5wcm90ZWN0W2tdID0gMDsKLQkJCX0gZWxzZSB7Ci0JCQkJLyoKLQkJCQkgKiBObyBsZWdhbmN5IHVubG9ja2luZyAtPiB1bmxvY2sgYWxsIHNlY3RvcnMKLQkJCQkgKi8KLQkJCQlmbGFzaF9wcm90ZWN0IChGTEFHX1BST1RFQ1RfQ0xFQVIsCi0JCQkJCSAgICAgICBmbGFzaF9pbmZvW2ldLnN0YXJ0WzBdLAotCQkJCQkgICAgICAgZmxhc2hfaW5mb1tpXS5zdGFydFswXSArIGZsYXNoX2luZm9baV0uc2l6ZSAtIDEsCi0JCQkJCSAgICAgICAmZmxhc2hfaW5mb1tpXSk7Ci0JCQl9Ci0JCX0KLSNlbmRpZiAvKiBDRkdfRkxBU0hfUFJPVEVDVElPTiAqLwotCX0KLQotCS8qIE1vbml0b3IgcHJvdGVjdGlvbiBPTiBieSBkZWZhdWx0ICovCi0jaWYgKENGR19NT05JVE9SX0JBU0UgPj0gQ0ZHX0ZMQVNIX0JBU0UpCi0JZmxhc2hfcHJvdGVjdCAoRkxBR19QUk9URUNUX1NFVCwKLQkJICAgICAgIENGR19NT05JVE9SX0JBU0UsCi0JCSAgICAgICBDRkdfTU9OSVRPUl9CQVNFICsgbW9uaXRvcl9mbGFzaF9sZW4gIC0gMSwKLQkJICAgICAgIGZsYXNoX2dldF9pbmZvKENGR19NT05JVE9SX0JBU0UpKTsKLSNlbmRpZgotCi0JLyogRW52aXJvbm1lbnQgcHJvdGVjdGlvbiBPTiBieSBkZWZhdWx0ICovCi0jaWZkZWYgQ0ZHX0VOVl9JU19JTl9GTEFTSAotCWZsYXNoX3Byb3RlY3QgKEZMQUdfUFJPVEVDVF9TRVQsCi0JCSAgICAgICBDRkdfRU5WX0FERFIsCi0JCSAgICAgICBDRkdfRU5WX0FERFIgKyBDRkdfRU5WX1NFQ1RfU0laRSAtIDEsCi0JCSAgICAgICBmbGFzaF9nZXRfaW5mbyhDRkdfRU5WX0FERFIpKTsKLSNlbmRpZgotCi0JLyogUmVkdW5kYW50IGVudmlyb25tZW50IHByb3RlY3Rpb24gT04gYnkgZGVmYXVsdCAqLwotI2lmZGVmIENGR19FTlZfQUREUl9SRURVTkQKLQlmbGFzaF9wcm90ZWN0IChGTEFHX1BST1RFQ1RfU0VULAotCQkgICAgICAgQ0ZHX0VOVl9BRERSX1JFRFVORCwKLQkJICAgICAgIENGR19FTlZfQUREUl9SRURVTkQgKyBDRkdfRU5WX1NJWkVfUkVEVU5EIC0gMSwKLQkJICAgICAgIGZsYXNoX2dldF9pbmZvKENGR19FTlZfQUREUl9SRURVTkQpKTsKLSNlbmRpZgotCXJldHVybiAoc2l6ZSk7CitzdGF0aWMgdTY0IGZsYXNoX3JlYWQ2NCh2b2lkICphZGRyKQoreworCS8qIE5vIGFyY2hpdGVjdHVyZXMgY3VycmVudGx5IGltcGxlbWVudCBfX3Jhd19yZWFkcSgpICovCisJcmV0dXJuICoodm9sYXRpbGUgdTY0ICopYWRkcjsKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNDMwLDcgKzI1Myw3IEBACiAJaW50IGk7CiAJZmxhc2hfaW5mb190ICogaW5mbyA9IDA7CiAKLQlmb3IgKGkgPSAwOyBpIDwgQ0ZHX01BWF9GTEFTSF9CQU5LUzsgaSArKykgeworCWZvciAoaSA9IDA7IGkgPCBDRkdfTUFYX0ZMQVNIX0JBTktTOyBpKyspIHsKIAkJaW5mbyA9ICYgZmxhc2hfaW5mb1tpXTsKIAkJaWYgKGluZm8tPnNpemUgJiYgaW5mby0+c3RhcnRbMF0gPD0gYmFzZSAmJgogCQkgICAgYmFzZSA8PSBpbmZvLT5zdGFydFswXSArIGluZm8tPnNpemUgLSAxKQpAQCAtNDQxLDMzMCArMjY0LDMyNSBAQAogfQogI2VuZGlmCiAKLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotaW50IGZsYXNoX2VyYXNlIChmbGFzaF9pbmZvX3QgKiBpbmZvLCBpbnQgc19maXJzdCwgaW50IHNfbGFzdCkKK3Vuc2lnbmVkIGxvbmcgZmxhc2hfc2VjdG9yX3NpemUoZmxhc2hfaW5mb190ICppbmZvLCBmbGFzaF9zZWN0X3Qgc2VjdCkKIHsKLQlpbnQgcmNvZGUgPSAwOwotCWludCBwcm90OwotCWZsYXNoX3NlY3RfdCBzZWN0OwotCi0JaWYgKGluZm8tPmZsYXNoX2lkICE9IEZMQVNIX01BTl9DRkkpIHsKLQkJcHV0cyAoIkNhbid0IGVyYXNlIHVua25vd24gZmxhc2ggdHlwZSAtIGFib3J0ZWRcbiIpOwotCQlyZXR1cm4gMTsKLQl9Ci0JaWYgKChzX2ZpcnN0IDwgMCkgfHwgKHNfZmlyc3QgPiBzX2xhc3QpKSB7Ci0JCXB1dHMgKCItIG5vIHNlY3RvcnMgdG8gZXJhc2VcbiIpOwotCQlyZXR1cm4gMTsKLQl9Ci0KLQlwcm90ID0gMDsKLQlmb3IgKHNlY3QgPSBzX2ZpcnN0OyBzZWN0IDw9IHNfbGFzdDsgKytzZWN0KSB7Ci0JCWlmIChpbmZvLT5wcm90ZWN0W3NlY3RdKSB7Ci0JCQlwcm90Kys7Ci0JCX0KLQl9Ci0JaWYgKHByb3QpIHsKLQkJcHJpbnRmICgiLSBXYXJuaW5nOiAlZCBwcm90ZWN0ZWQgc2VjdG9ycyB3aWxsIG5vdCBiZSBlcmFzZWQhXG4iLCBwcm90KTsKLQl9IGVsc2UgewotCQlwdXRjICgnXG4nKTsKLQl9Ci0KLQotCWZvciAoc2VjdCA9IHNfZmlyc3Q7IHNlY3QgPD0gc19sYXN0OyBzZWN0KyspIHsKLQkJaWYgKGluZm8tPnByb3RlY3Rbc2VjdF0gPT0gMCkgeyAvKiBub3QgcHJvdGVjdGVkICovCi0JCQlzd2l0Y2ggKGluZm8tPnZlbmRvcikgewotCQkJY2FzZSBDRklfQ01EU0VUX0lOVEVMX1NUQU5EQVJEOgotCQkJY2FzZSBDRklfQ01EU0VUX0lOVEVMX0VYVEVOREVEOgotCQkJCWZsYXNoX3dyaXRlX2NtZCAoaW5mbywgc2VjdCwgMCwgRkxBU0hfQ01EX0NMRUFSX1NUQVRVUyk7Ci0JCQkJZmxhc2hfd3JpdGVfY21kIChpbmZvLCBzZWN0LCAwLCBGTEFTSF9DTURfQkxPQ0tfRVJBU0UpOwotCQkJCWZsYXNoX3dyaXRlX2NtZCAoaW5mbywgc2VjdCwgMCwgRkxBU0hfQ01EX0VSQVNFX0NPTkZJUk0pOwotCQkJCWJyZWFrOwotCQkJY2FzZSBDRklfQ01EU0VUX0FNRF9TVEFOREFSRDoKLQkJCWNhc2UgQ0ZJX0NNRFNFVF9BTURfRVhURU5ERUQ6Ci0JCQkJZmxhc2hfdW5sb2NrX3NlcSAoaW5mbywgc2VjdCk7Ci0JCQkJZmxhc2hfd3JpdGVfY21kIChpbmZvLCBzZWN0LCBBTURfQUREUl9FUkFTRV9TVEFSVCwKLQkJCQkJCQlBTURfQ01EX0VSQVNFX1NUQVJUKTsKLQkJCQlmbGFzaF91bmxvY2tfc2VxIChpbmZvLCBzZWN0KTsKLQkJCQlmbGFzaF93cml0ZV9jbWQgKGluZm8sIHNlY3QsIDAsIEFNRF9DTURfRVJBU0VfU0VDVE9SKTsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJZGVidWcgKCJVbmtvd24gZmxhc2ggdmVuZG9yICVkXG4iLAotCQkJCSAgICAgICBpbmZvLT52ZW5kb3IpOwotCQkJCWJyZWFrOwotCQkJfQotCi0JCQlpZiAoZmxhc2hfZnVsbF9zdGF0dXNfY2hlY2sKLQkJCSAgICAoaW5mbywgc2VjdCwgaW5mby0+ZXJhc2VfYmxrX3RvdXQsICJlcmFzZSIpKSB7Ci0JCQkJcmNvZGUgPSAxOwotCQkJfSBlbHNlCi0JCQkJcHV0YyAoJy4nKTsKLQkJfQotCX0KLQlwdXRzICgiIGRvbmVcbiIpOwotCXJldHVybiByY29kZTsKKwlpZiAoc2VjdCAhPSAoaW5mby0+c2VjdG9yX2NvdW50IC0gMSkpCisJCXJldHVybiBpbmZvLT5zdGFydFtzZWN0ICsgMV0gLSBpbmZvLT5zdGFydFtzZWN0XTsKKwllbHNlCisJCXJldHVybiBpbmZvLT5zdGFydFswXSArIGluZm8tPnNpemUgLSBpbmZvLT5zdGFydFtzZWN0XTsKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogY3JlYXRlIGFuIGFkZHJlc3MgYmFzZWQgb24gdGhlIG9mZnNldCBhbmQgdGhlIHBvcnQgd2lkdGgKICAqLwotdm9pZCBmbGFzaF9wcmludF9pbmZvIChmbGFzaF9pbmZvX3QgKiBpbmZvKQorc3RhdGljIGlubGluZSB2b2lkICoKK2ZsYXNoX21hcCAoZmxhc2hfaW5mb190ICogaW5mbywgZmxhc2hfc2VjdF90IHNlY3QsIHVpbnQgb2Zmc2V0KQoreworCXVuc2lnbmVkIGludCBieXRlX29mZnNldCA9IG9mZnNldCAqIGluZm8tPnBvcnR3aWR0aDsKKworCXJldHVybiBtYXBfcGh5c21lbShpbmZvLT5zdGFydFtzZWN0XSArIGJ5dGVfb2Zmc2V0LAorCQkJZmxhc2hfc2VjdG9yX3NpemUoaW5mbywgc2VjdCkgLSBieXRlX29mZnNldCwKKwkJCU1BUF9OT0NBQ0hFKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZsYXNoX3VubWFwKGZsYXNoX2luZm9fdCAqaW5mbywgZmxhc2hfc2VjdF90IHNlY3QsCisJCXVuc2lnbmVkIGludCBvZmZzZXQsIHZvaWQgKmFkZHIpCit7CisJdW5zaWduZWQgaW50IGJ5dGVfb2Zmc2V0ID0gb2Zmc2V0ICogaW5mby0+cG9ydHdpZHRoOworCisJdW5tYXBfcGh5c21lbShhZGRyLCBmbGFzaF9zZWN0b3Jfc2l6ZShpbmZvLCBzZWN0KSAtIGJ5dGVfb2Zmc2V0KTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogbWFrZSBhIHByb3BlciBzaXplZCBjb21tYW5kIGJhc2VkIG9uIHRoZSBwb3J0IGFuZCBjaGlwIHdpZHRocworICovCitzdGF0aWMgdm9pZCBmbGFzaF9tYWtlX2NtZCAoZmxhc2hfaW5mb190ICogaW5mbywgdWNoYXIgY21kLCB2b2lkICpjbWRidWYpCiB7CiAJaW50IGk7CisJdWNoYXIgKmNwID0gKHVjaGFyICopIGNtZGJ1ZjsKIAotCWlmIChpbmZvLT5mbGFzaF9pZCAhPSBGTEFTSF9NQU5fQ0ZJKSB7Ci0JCXB1dHMgKCJtaXNzaW5nIG9yIHVua25vd24gRkxBU0ggdHlwZVxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlwcmludGYgKCJDRkkgY29uZm9ybWFudCBGTEFTSCAoJWQgeCAlZCkiLAotCQkoaW5mby0+cG9ydHdpZHRoIDw8IDMpLCAoaW5mby0+Y2hpcHdpZHRoIDw8IDMpKTsKLQlwcmludGYgKCIgIFNpemU6ICVsZCBNQiBpbiAlZCBTZWN0b3JzXG4iLAotCQlpbmZvLT5zaXplID4+IDIwLCBpbmZvLT5zZWN0b3JfY291bnQpOwotCXByaW50ZiAoIiAgIik7Ci0Jc3dpdGNoIChpbmZvLT52ZW5kb3IpIHsKLQkJY2FzZSBDRklfQ01EU0VUX0lOVEVMX1NUQU5EQVJEOgotCQkJcHJpbnRmICgiSW50ZWwgU3RhbmRhcmQiKTsKLQkJCWJyZWFrOwotCQljYXNlIENGSV9DTURTRVRfSU5URUxfRVhURU5ERUQ6Ci0JCQlwcmludGYgKCJJbnRlbCBFeHRlbmRlZCIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgQ0ZJX0NNRFNFVF9BTURfU1RBTkRBUkQ6Ci0JCQlwcmludGYgKCJBTUQgU3RhbmRhcmQiKTsKLQkJCWJyZWFrOwotCQljYXNlIENGSV9DTURTRVRfQU1EX0VYVEVOREVEOgotCQkJcHJpbnRmICgiQU1EIEV4dGVuZGVkIik7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXByaW50ZiAoIlVua25vd24gKCVkKSIsIGluZm8tPnZlbmRvcik7Ci0JCQlicmVhazsKLQl9Ci0JcHJpbnRmICgiIGNvbW1hbmQgc2V0LCBNYW51ZmFjdHVyZXIgSUQ6IDB4JTAyWCwgRGV2aWNlIElEOiAweCUwMlgiLAotCQlpbmZvLT5tYW51ZmFjdHVyZXJfaWQsIGluZm8tPmRldmljZV9pZCk7Ci0JaWYgKGluZm8tPmRldmljZV9pZCA9PSAweDdFKSB7Ci0JCXByaW50ZigiJTA0WCIsIGluZm8tPmRldmljZV9pZDIpOwotCX0KLQlwcmludGYgKCJcbiAgRXJhc2UgdGltZW91dDogJWxkIG1zLCB3cml0ZSB0aW1lb3V0OiAlbGQgbXNcbiIsCi0JCWluZm8tPmVyYXNlX2Jsa190b3V0LAotCQlpbmZvLT53cml0ZV90b3V0KTsKLQlpZiAoaW5mby0+YnVmZmVyX3NpemUgPiAxKSB7Ci0JCXByaW50ZiAoIiAgQnVmZmVyIHdyaXRlIHRpbWVvdXQ6ICVsZCBtcywgYnVmZmVyIHNpemU6ICVkIGJ5dGVzXG4iLAotCQlpbmZvLT5idWZmZXJfd3JpdGVfdG91dCwKLQkJaW5mby0+YnVmZmVyX3NpemUpOwotCX0KLQotCXB1dHMgKCJcbiAgU2VjdG9yIFN0YXJ0IEFkZHJlc3NlczoiKTsKLQlmb3IgKGkgPSAwOyBpIDwgaW5mby0+c2VjdG9yX2NvdW50OyArK2kpIHsKLQkJaWYgKChpICUgNSkgPT0gMCkKLQkJCXByaW50ZiAoIlxuIik7Ci0jaWZkZWYgQ0ZHX0ZMQVNIX0VNUFRZX0lORk8KLQkJaW50IGs7Ci0JCWludCBzaXplOwotCQlpbnQgZXJhc2VkOwotCQl2b2xhdGlsZSB1bnNpZ25lZCBsb25nICpmbGFzaDsKLQotCQkvKgotCQkgKiBDaGVjayBpZiB3aG9sZSBzZWN0b3IgaXMgZXJhc2VkCi0JCSAqLwotCQlpZiAoaSAhPSAoaW5mby0+c2VjdG9yX2NvdW50IC0gMSkpCi0JCQlzaXplID0gaW5mby0+c3RhcnRbaSArIDFdIC0gaW5mby0+c3RhcnRbaV07Ci0JCWVsc2UKLQkJCXNpemUgPSBpbmZvLT5zdGFydFswXSArIGluZm8tPnNpemUgLSBpbmZvLT5zdGFydFtpXTsKLQkJZXJhc2VkID0gMTsKLQkJZmxhc2ggPSAodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKSBpbmZvLT5zdGFydFtpXTsKLQkJc2l6ZSA9IHNpemUgPj4gMjsJLyogZGl2aWRlIGJ5IDQgZm9yIGxvbmd3b3JkIGFjY2VzcyAqLwotCQlmb3IgKGsgPSAwOyBrIDwgc2l6ZTsgaysrKSB7Ci0JCQlpZiAoKmZsYXNoKysgIT0gMHhmZmZmZmZmZikgewotCQkJCWVyYXNlZCA9IDA7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQotCQkvKiBwcmludCBlbXB0eSBhbmQgcmVhZC1vbmx5IGluZm8gKi8KLQkJcHJpbnRmICgiICAlMDhsWCAlYyAlcyAiLAotCQkJaW5mby0+c3RhcnRbaV0sCi0JCQllcmFzZWQgPyAnRScgOiAnICcsCi0JCQlpbmZvLT5wcm90ZWN0W2ldID8gIlJPIiA6ICIgICIpOwotI2Vsc2UJLyogISBDRkdfRkxBU0hfRU1QVFlfSU5GTyAqLwotCQlwcmludGYgKCIgICUwOGxYICAgJXMgIiwKLQkJCWluZm8tPnN0YXJ0W2ldLAotCQkJaW5mby0+cHJvdGVjdFtpXSA/ICJSTyIgOiAiICAiKTsKLSNlbmRpZgotCX0KLQlwdXRjICgnXG4nKTsKLQlyZXR1cm47Ci19Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIENvcHkgbWVtb3J5IHRvIGZsYXNoLCByZXR1cm5zOgotICogMCAtIE9LCi0gKiAxIC0gd3JpdGUgdGltZW91dAotICogMiAtIEZsYXNoIG5vdCBlcmFzZWQKLSAqLwotaW50IHdyaXRlX2J1ZmYgKGZsYXNoX2luZm9fdCAqIGluZm8sIHVjaGFyICogc3JjLCB1bG9uZyBhZGRyLCB1bG9uZyBjbnQpCi17Ci0JdWxvbmcgd3A7Ci0JdWxvbmcgY3A7Ci0JaW50IGFsbjsKLQljZml3b3JkX3QgY3dvcmQ7Ci0JaW50IGksIHJjOwotCi0jaWZkZWYgQ0ZHX0ZMQVNIX1VTRV9CVUZGRVJfV1JJVEUKLQlpbnQgYnVmZmVyZWRfc2l6ZTsKLSNlbmRpZgotCS8qIGdldCBsb3dlciBhbGlnbmVkIGFkZHJlc3MgKi8KLQkvKiBnZXQgbG93ZXIgYWxpZ25lZCBhZGRyZXNzICovCi0Jd3AgPSAoYWRkciAmIH4oaW5mby0+cG9ydHdpZHRoIC0gMSkpOwotCi0JLyogaGFuZGxlIHVuYWxpZ25lZCBzdGFydCAqLwotCWlmICgoYWxuID0gYWRkciAtIHdwKSAhPSAwKSB7Ci0JCWN3b3JkLmwgPSAwOwotCQljcCA9IHdwOwotCQlmb3IgKGkgPSAwOyBpIDwgYWxuOyArK2ksICsrY3ApCi0JCQlmbGFzaF9hZGRfYnl0ZSAoaW5mbywgJmN3b3JkLCAoKih1Y2hhciAqKSBjcCkpOwotCi0JCWZvciAoOyAoaSA8IGluZm8tPnBvcnR3aWR0aCkgJiYgKGNudCA+IDApOyBpKyspIHsKLQkJCWZsYXNoX2FkZF9ieXRlIChpbmZvLCAmY3dvcmQsICpzcmMrKyk7Ci0JCQljbnQtLTsKLQkJCWNwKys7Ci0JCX0KLQkJZm9yICg7IChjbnQgPT0gMCkgJiYgKGkgPCBpbmZvLT5wb3J0d2lkdGgpOyArK2ksICsrY3ApCi0JCQlmbGFzaF9hZGRfYnl0ZSAoaW5mbywgJmN3b3JkLCAoKih1Y2hhciAqKSBjcCkpOwotCQlpZiAoKHJjID0gZmxhc2hfd3JpdGVfY2Zpd29yZCAoaW5mbywgd3AsIGN3b3JkKSkgIT0gMCkKLQkJCXJldHVybiByYzsKLQkJd3AgPSBjcDsKLQl9Ci0KLQkvKiBoYW5kbGUgdGhlIGFsaWduZWQgcGFydCAqLwotI2lmZGVmIENGR19GTEFTSF9VU0VfQlVGRkVSX1dSSVRFCi0JYnVmZmVyZWRfc2l6ZSA9IChpbmZvLT5wb3J0d2lkdGggLyBpbmZvLT5jaGlwd2lkdGgpOwotCWJ1ZmZlcmVkX3NpemUgKj0gaW5mby0+YnVmZmVyX3NpemU7Ci0Jd2hpbGUgKGNudCA+PSBpbmZvLT5wb3J0d2lkdGgpIHsKLQkJLyogcHJvaGliaXQgYnVmZmVyIHdyaXRlIHdoZW4gYnVmZmVyX3NpemUgaXMgMSAqLwotCQlpZiAoaW5mby0+YnVmZmVyX3NpemUgPT0gMSkgewotCQkJY3dvcmQubCA9IDA7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgaW5mby0+cG9ydHdpZHRoOyBpKyspCi0JCQkJZmxhc2hfYWRkX2J5dGUgKGluZm8sICZjd29yZCwgKnNyYysrKTsKLQkJCWlmICgocmMgPSBmbGFzaF93cml0ZV9jZml3b3JkIChpbmZvLCB3cCwgY3dvcmQpKSAhPSAwKQotCQkJCXJldHVybiByYzsKLQkJCXdwICs9IGluZm8tPnBvcnR3aWR0aDsKLQkJCWNudCAtPSBpbmZvLT5wb3J0d2lkdGg7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCS8qIHdyaXRlIGJ1ZmZlciB1bnRpbCBuZXh0IGJ1ZmZlcmVkX3NpemUgYWxpZ25lZCBib3VuZGFyeSAqLwotCQlpID0gYnVmZmVyZWRfc2l6ZSAtICh3cCAlIGJ1ZmZlcmVkX3NpemUpOwotCQlpZiAoaSA+IGNudCkKLQkJCWkgPSBjbnQ7Ci0JCWlmICgocmMgPSBmbGFzaF93cml0ZV9jZmlidWZmZXIgKGluZm8sIHdwLCBzcmMsIGkpKSAhPSBFUlJfT0spCi0JCQlyZXR1cm4gcmM7Ci0JCWkgLT0gaSAmIChpbmZvLT5wb3J0d2lkdGggLSAxKTsKLQkJd3AgKz0gaTsKLQkJc3JjICs9IGk7Ci0JCWNudCAtPSBpOwotCX0KKyNpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikgfHwgZGVmaW5lZChDRkdfV1JJVEVfU1dBUFBFRF9EQVRBKQorCWZvciAoaSA9IGluZm8tPnBvcnR3aWR0aDsgaSA+IDA7IGktLSkKICNlbHNlCi0Jd2hpbGUgKGNudCA+PSBpbmZvLT5wb3J0d2lkdGgpIHsKLQkJY3dvcmQubCA9IDA7Ci0JCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5wb3J0d2lkdGg7IGkrKykgewotCQkJZmxhc2hfYWRkX2J5dGUgKGluZm8sICZjd29yZCwgKnNyYysrKTsKKwlmb3IgKGkgPSAxOyBpIDw9IGluZm8tPnBvcnR3aWR0aDsgaSsrKQorI2VuZGlmCisJCSpjcCsrID0gKGkgJiAoaW5mby0+Y2hpcHdpZHRoIC0gMSkpID8gJ1wwJyA6IGNtZDsKK30KKworI2lmZGVmIERFQlVHCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBEZWJ1ZyBzdXBwb3J0CisgKi8KK3N0YXRpYyB2b2lkIHByaW50X2xvbmdsb25nIChjaGFyICpzdHIsIHVuc2lnbmVkIGxvbmcgbG9uZyBkYXRhKQoreworCWludCBpOworCWNoYXIgKmNwOworCisJY3AgPSAodW5zaWduZWQgY2hhciAqKSAmZGF0YTsKKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQorCQlzcHJpbnRmICgmc3RyW2kgKiAyXSwgIiUyLjJ4IiwgKmNwKyspOworfQorCitzdGF0aWMgdm9pZCBmbGFzaF9wcmludHFyeSAoc3RydWN0IGNmaV9xcnkgKnFyeSkKK3sKKwl1OCAqcCA9ICh1OCAqKXFyeTsKKwlpbnQgeCwgeTsKKworCWZvciAoeCA9IDA7IHggPCBzaXplb2Yoc3RydWN0IGNmaV9xcnkpOyB4ICs9IDE2KSB7CisJCWRlYnVnKCIlMDJ4IDogIiwgeCk7CisJCWZvciAoeSA9IDA7IHkgPCAxNjsgeSsrKQorCQkJZGVidWcoIiUyLjJ4ICIsIHBbeCArIHldKTsKKwkJZGVidWcoIiAiKTsKKwkJZm9yICh5ID0gMDsgeSA8IDE2OyB5KyspIHsKKwkJCXVuc2lnbmVkIGNoYXIgYyA9IHBbeCArIHldOworCQkJaWYgKGMgPj0gMHgyMCAmJiBjIDw9IDB4N2UpCisJCQkJZGVidWcoIiVjIiwgYyk7CisJCQllbHNlCisJCQkJZGVidWcoIi4iKTsKIAkJfQotCQlpZiAoKHJjID0gZmxhc2hfd3JpdGVfY2Zpd29yZCAoaW5mbywgd3AsIGN3b3JkKSkgIT0gMCkKLQkJCXJldHVybiByYzsKLQkJd3AgKz0gaW5mby0+cG9ydHdpZHRoOwotCQljbnQgLT0gaW5mby0+cG9ydHdpZHRoOworCQlkZWJ1ZygiXG4iKTsKIAl9Ci0jZW5kaWYgLyogQ0ZHX0ZMQVNIX1VTRV9CVUZGRVJfV1JJVEUgKi8KLQlpZiAoY250ID09IDApIHsKLQkJcmV0dXJuICgwKTsKLQl9Cit9CisjZW5kaWYKIAotCS8qCi0JICogaGFuZGxlIHVuYWxpZ25lZCB0YWlsIGJ5dGVzCi0JICovCi0JY3dvcmQubCA9IDA7Ci0JZm9yIChpID0gMCwgY3AgPSB3cDsgKGkgPCBpbmZvLT5wb3J0d2lkdGgpICYmIChjbnQgPiAwKTsgKytpLCArK2NwKSB7Ci0JCWZsYXNoX2FkZF9ieXRlIChpbmZvLCAmY3dvcmQsICpzcmMrKyk7Ci0JCS0tY250OwotCX0KLQlmb3IgKDsgaSA8IGluZm8tPnBvcnR3aWR0aDsgKytpLCArK2NwKSB7Ci0JCWZsYXNoX2FkZF9ieXRlIChpbmZvLCAmY3dvcmQsICgqKHVjaGFyICopIGNwKSk7Ci0JfQogCi0JcmV0dXJuIGZsYXNoX3dyaXRlX2NmaXdvcmQgKGluZm8sIHdwLCBjd29yZCk7CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiByZWFkIGEgY2hhcmFjdGVyIGF0IGEgcG9ydCB3aWR0aCBhZGRyZXNzCisgKi8KK3N0YXRpYyBpbmxpbmUgdWNoYXIgZmxhc2hfcmVhZF91Y2hhciAoZmxhc2hfaW5mb190ICogaW5mbywgdWludCBvZmZzZXQpCit7CisJdWNoYXIgKmNwOworCXVjaGFyIHJldHZhbDsKKworCWNwID0gZmxhc2hfbWFwIChpbmZvLCAwLCBvZmZzZXQpOworI2lmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKSB8fCBkZWZpbmVkKENGR19XUklURV9TV0FQUEVEX0RBVEEpCisJcmV0dmFsID0gZmxhc2hfcmVhZDgoY3ApOworI2Vsc2UKKwlyZXR2YWwgPSBmbGFzaF9yZWFkOChjcCArIGluZm8tPnBvcnR3aWR0aCAtIDEpOworI2VuZGlmCisJZmxhc2hfdW5tYXAgKGluZm8sIDAsIG9mZnNldCwgY3ApOworCXJldHVybiByZXR2YWw7CiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHJlYWQgYSBsb25nIHdvcmQgYnkgcGlja2luZyB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYnl0ZSBvZiBlYWNoIG1heGltdW0KKyAqIHBvcnQgc2l6ZSB3b3JkLiBTd2FwIGZvciBwcGMgZm9ybWF0LgogICovCi0jaWZkZWYgQ0ZHX0ZMQVNIX1BST1RFQ1RJT04KLQotaW50IGZsYXNoX3JlYWxfcHJvdGVjdCAoZmxhc2hfaW5mb190ICogaW5mbywgbG9uZyBzZWN0b3IsIGludCBwcm90KQorc3RhdGljIHVsb25nIGZsYXNoX3JlYWRfbG9uZyAoZmxhc2hfaW5mb190ICogaW5mbywgZmxhc2hfc2VjdF90IHNlY3QsCisJCQkgICAgICB1aW50IG9mZnNldCkKIHsKLQlpbnQgcmV0Y29kZSA9IDA7CisJdWNoYXIgKmFkZHI7CisJdWxvbmcgcmV0dmFsOwogCi0JZmxhc2hfd3JpdGVfY21kIChpbmZvLCBzZWN0b3IsIDAsIEZMQVNIX0NNRF9DTEVBUl9TVEFUVVMpOwotCWZsYXNoX3dyaXRlX2NtZCAoaW5mbywgc2VjdG9yLCAwLCBGTEFTSF9DTURfUFJPVEVDVCk7Ci0JaWYgKHByb3QpCi0JCWZsYXNoX3dyaXRlX2NtZCAoaW5mbywgc2VjdG9yLCAwLCBGTEFTSF9DTURfUFJPVEVDVF9TRVQpOwotCWVsc2UKLQkJZmxhc2hfd3JpdGVfY21kIChpbmZvLCBzZWN0b3IsIDAsIEZMQVNIX0NNRF9QUk9URUNUX0NMRUFSKTsKKyNpZmRlZiBERUJVRworCWludCB4OworI2VuZGlmCisJYWRkciA9IGZsYXNoX21hcCAoaW5mbywgc2VjdCwgb2Zmc2V0KTsKIAotCWlmICgocmV0Y29kZSA9Ci0JICAgICBmbGFzaF9mdWxsX3N0YXR1c19jaGVjayAoaW5mbywgc2VjdG9yLCBpbmZvLT5lcmFzZV9ibGtfdG91dCwKLQkJCQkgICAgICBwcm90ID8gInByb3RlY3QiIDogInVucHJvdGVjdCIpKSA9PSAwKSB7Ci0KLQkJaW5mby0+cHJvdGVjdFtzZWN0b3JdID0gcHJvdDsKLQotCQkvKgotCQkgKiBPbiBzb21lIG9mIEludGVsJ3MgZmxhc2ggY2hpcHMgKG1hcmtlZCB2aWEgbGVnYWN5X3VubG9jaykKLQkJICogdW5wcm90ZWN0IHVucHJvdGVjdHMgYWxsIGxvY2tpbmcuCi0JCSAqLwotCQlpZiAoKHByb3QgPT0gMCkgJiYgKGluZm8tPmxlZ2FjeV91bmxvY2spKSB7Ci0JCQlmbGFzaF9zZWN0X3QgaTsKLQotCQkJZm9yIChpID0gMDsgaSA8IGluZm8tPnNlY3Rvcl9jb3VudDsgaSsrKSB7Ci0JCQkJaWYgKGluZm8tPnByb3RlY3RbaV0pCi0JCQkJCWZsYXNoX3JlYWxfcHJvdGVjdCAoaW5mbywgaSwgMSk7Ci0JCQl9Ci0JCX0KKyNpZmRlZiBERUJVRworCWRlYnVnICgibG9uZyBhZGRyIGlzIGF0ICVwIGluZm8tPnBvcnR3aWR0aCA9ICVkXG4iLCBhZGRyLAorCSAgICAgICBpbmZvLT5wb3J0d2lkdGgpOworCWZvciAoeCA9IDA7IHggPCA0ICogaW5mby0+cG9ydHdpZHRoOyB4KyspIHsKKwkJZGVidWcgKCJhZGRyWyV4XSA9IDB4JXhcbiIsIHgsIGZsYXNoX3JlYWQ4KGFkZHIgKyB4KSk7CiAJfQotCXJldHVybiByZXRjb2RlOwotfQorI2VuZGlmCisjaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pIHx8IGRlZmluZWQoQ0ZHX1dSSVRFX1NXQVBQRURfREFUQSkKKwlyZXR2YWwgPSAoKGZsYXNoX3JlYWQ4KGFkZHIpIDw8IDE2KSB8CisJCSAgKGZsYXNoX3JlYWQ4KGFkZHIgKyBpbmZvLT5wb3J0d2lkdGgpIDw8IDI0KSB8CisJCSAgKGZsYXNoX3JlYWQ4KGFkZHIgKyAyICogaW5mby0+cG9ydHdpZHRoKSkgfAorCQkgIChmbGFzaF9yZWFkOChhZGRyICsgMyAqIGluZm8tPnBvcnR3aWR0aCkgPDwgOCkpOworI2Vsc2UKKwlyZXR2YWwgPSAoKGZsYXNoX3JlYWQ4KGFkZHIgKyAyICogaW5mby0+cG9ydHdpZHRoIC0gMSkgPDwgMjQpIHwKKwkJICAoZmxhc2hfcmVhZDgoYWRkciArIGluZm8tPnBvcnR3aWR0aCAtIDEpIDw8IDE2KSB8CisJCSAgKGZsYXNoX3JlYWQ4KGFkZHIgKyA0ICogaW5mby0+cG9ydHdpZHRoIC0gMSkgPDwgOCkgfAorCQkgIChmbGFzaF9yZWFkOChhZGRyICsgMyAqIGluZm8tPnBvcnR3aWR0aCAtIDEpKSk7CisjZW5kaWYKKwlmbGFzaF91bm1hcChpbmZvLCBzZWN0LCBvZmZzZXQsIGFkZHIpOwogCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBmbGFzaF9yZWFkX3VzZXJfc2VyaWFsIC0gcmVhZCB0aGUgT25lVGltZVByb2dyYW1taW5nIGNlbGxzCi0gKi8KLXZvaWQgZmxhc2hfcmVhZF91c2VyX3NlcmlhbCAoZmxhc2hfaW5mb190ICogaW5mbywgdm9pZCAqYnVmZmVyLCBpbnQgb2Zmc2V0LAotCQkJICAgICBpbnQgbGVuKQotewotCXVjaGFyICpzcmM7Ci0JdWNoYXIgKmRzdDsKLQotCWRzdCA9IGJ1ZmZlcjsKLQlzcmMgPSBmbGFzaF9tYWtlX2FkZHIgKGluZm8sIDAsIEZMQVNIX09GRlNFVF9VU0VSX1BST1RFQ1RJT04pOwotCWZsYXNoX3dyaXRlX2NtZCAoaW5mbywgMCwgMCwgRkxBU0hfQ01EX1JFQURfSUQpOwotCW1lbWNweSAoZHN0LCBzcmMgKyBvZmZzZXQsIGxlbik7Ci0JZmxhc2hfd3JpdGVfY21kIChpbmZvLCAwLCAwLCBpbmZvLT5jbWRfcmVzZXQpOworCXJldHVybiByZXR2YWw7CiB9CiAKIC8qCi0gKiBmbGFzaF9yZWFkX2ZhY3Rvcnlfc2VyaWFsIC0gcmVhZCB0aGUgZGV2aWNlIElkIGZyb20gdGhlIHByb3RlY3Rpb24gYXJlYQorICogV3JpdGUgYSBwcm9wZXIgc2l6ZWQgY29tbWFuZCB0byB0aGUgY29ycmVjdCBhZGRyZXNzCiAgKi8KLXZvaWQgZmxhc2hfcmVhZF9mYWN0b3J5X3NlcmlhbCAoZmxhc2hfaW5mb190ICogaW5mbywgdm9pZCAqYnVmZmVyLCBpbnQgb2Zmc2V0LAotCQkJCWludCBsZW4pCitzdGF0aWMgdm9pZCBmbGFzaF93cml0ZV9jbWQgKGZsYXNoX2luZm9fdCAqIGluZm8sIGZsYXNoX3NlY3RfdCBzZWN0LAorCQkJICAgICB1aW50IG9mZnNldCwgdWNoYXIgY21kKQogewotCXVjaGFyICpzcmM7CiAKLQlzcmMgPSBmbGFzaF9tYWtlX2FkZHIgKGluZm8sIDAsIEZMQVNIX09GRlNFVF9JTlRFTF9QUk9URUNUSU9OKTsKLQlmbGFzaF93cml0ZV9jbWQgKGluZm8sIDAsIDAsIEZMQVNIX0NNRF9SRUFEX0lEKTsKLQltZW1jcHkgKGJ1ZmZlciwgc3JjICsgb2Zmc2V0LCBsZW4pOwotCWZsYXNoX3dyaXRlX2NtZCAoaW5mbywgMCwgMCwgaW5mby0+Y21kX3Jlc2V0KTsKKwl2b2lkICphZGRyOworCWNmaXdvcmRfdCBjd29yZDsKKworCWFkZHIgPSBmbGFzaF9tYXAgKGluZm8sIHNlY3QsIG9mZnNldCk7CisJZmxhc2hfbWFrZV9jbWQgKGluZm8sIGNtZCwgJmN3b3JkKTsKKwlzd2l0Y2ggKGluZm8tPnBvcnR3aWR0aCkgeworCWNhc2UgRkxBU0hfQ0ZJXzhCSVQ6CisJCWRlYnVnICgiZndjIGFkZHIgJXAgY21kICV4ICV4IDhiaXQgeCAlZCBiaXRcbiIsIGFkZHIsIGNtZCwKKwkJICAgICAgIGN3b3JkLmMsIGluZm8tPmNoaXB3aWR0aCA8PCBDRklfRkxBU0hfU0hJRlRfV0lEVEgpOworCQlmbGFzaF93cml0ZTgoY3dvcmQuYywgYWRkcik7CisJCWJyZWFrOworCWNhc2UgRkxBU0hfQ0ZJXzE2QklUOgorCQlkZWJ1ZyAoImZ3YyBhZGRyICVwIGNtZCAleCAlNC40eCAxNmJpdCB4ICVkIGJpdFxuIiwgYWRkciwKKwkJICAgICAgIGNtZCwgY3dvcmQudywKKwkJICAgICAgIGluZm8tPmNoaXB3aWR0aCA8PCBDRklfRkxBU0hfU0hJRlRfV0lEVEgpOworCQlmbGFzaF93cml0ZTE2KGN3b3JkLncsIGFkZHIpOworCQlicmVhazsKKwljYXNlIEZMQVNIX0NGSV8zMkJJVDoKKwkJZGVidWcgKCJmd2MgYWRkciAlcCBjbWQgJXggJTguOGx4IDMyYml0IHggJWQgYml0XG4iLCBhZGRyLAorCQkgICAgICAgY21kLCBjd29yZC5sLAorCQkgICAgICAgaW5mby0+Y2hpcHdpZHRoIDw8IENGSV9GTEFTSF9TSElGVF9XSURUSCk7CisJCWZsYXNoX3dyaXRlMzIoY3dvcmQubCwgYWRkcik7CisJCWJyZWFrOworCWNhc2UgRkxBU0hfQ0ZJXzY0QklUOgorI2lmZGVmIERFQlVHCisJCXsKKwkJCWNoYXIgc3RyWzIwXTsKKworCQkJcHJpbnRfbG9uZ2xvbmcgKHN0ciwgY3dvcmQubGwpOworCisJCQlkZWJ1ZyAoImZ3cml0ZSBhZGRyICVwIGNtZCAleCAlcyA2NCBiaXQgeCAlZCBiaXRcbiIsCisJCQkgICAgICAgYWRkciwgY21kLCBzdHIsCisJCQkgICAgICAgaW5mby0+Y2hpcHdpZHRoIDw8IENGSV9GTEFTSF9TSElGVF9XSURUSCk7CisJCX0KKyNlbmRpZgorCQlmbGFzaF93cml0ZTY0KGN3b3JkLmxsLCBhZGRyKTsKKwkJYnJlYWs7CisJfQorCisJLyogRW5zdXJlIGFsbCB0aGUgaW5zdHJ1Y3Rpb25zIGFyZSBmdWxseSBmaW5pc2hlZCAqLworCXN5bmMoKTsKKworCWZsYXNoX3VubWFwKGluZm8sIHNlY3QsIG9mZnNldCwgYWRkcik7CiB9CiAKLSNlbmRpZiAvKiBDRkdfRkxBU0hfUFJPVEVDVElPTiAqLworc3RhdGljIHZvaWQgZmxhc2hfdW5sb2NrX3NlcSAoZmxhc2hfaW5mb190ICogaW5mbywgZmxhc2hfc2VjdF90IHNlY3QpCit7CisJZmxhc2hfd3JpdGVfY21kIChpbmZvLCBzZWN0LCBpbmZvLT5hZGRyX3VubG9jazEsIEFNRF9DTURfVU5MT0NLX1NUQVJUKTsKKwlmbGFzaF93cml0ZV9jbWQgKGluZm8sIHNlY3QsIGluZm8tPmFkZHJfdW5sb2NrMiwgQU1EX0NNRF9VTkxPQ0tfQUNLKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCitzdGF0aWMgaW50IGZsYXNoX2lzZXF1YWwgKGZsYXNoX2luZm9fdCAqIGluZm8sIGZsYXNoX3NlY3RfdCBzZWN0LAorCQkJICB1aW50IG9mZnNldCwgdWNoYXIgY21kKQoreworCXZvaWQgKmFkZHI7CisJY2Zpd29yZF90IGN3b3JkOworCWludCByZXR2YWw7CisKKwlhZGRyID0gZmxhc2hfbWFwIChpbmZvLCBzZWN0LCBvZmZzZXQpOworCWZsYXNoX21ha2VfY21kIChpbmZvLCBjbWQsICZjd29yZCk7CisKKwlkZWJ1ZyAoImlzPSBjbWQgJXgoJWMpIGFkZHIgJXAgIiwgY21kLCBjbWQsIGFkZHIpOworCXN3aXRjaCAoaW5mby0+cG9ydHdpZHRoKSB7CisJY2FzZSBGTEFTSF9DRklfOEJJVDoKKwkJZGVidWcgKCJpcz0gJXggJXhcbiIsIGZsYXNoX3JlYWQ4KGFkZHIpLCBjd29yZC5jKTsKKwkJcmV0dmFsID0gKGZsYXNoX3JlYWQ4KGFkZHIpID09IGN3b3JkLmMpOworCQlicmVhazsKKwljYXNlIEZMQVNIX0NGSV8xNkJJVDoKKwkJZGVidWcgKCJpcz0gJTQuNHggJTQuNHhcbiIsIGZsYXNoX3JlYWQxNihhZGRyKSwgY3dvcmQudyk7CisJCXJldHZhbCA9IChmbGFzaF9yZWFkMTYoYWRkcikgPT0gY3dvcmQudyk7CisJCWJyZWFrOworCWNhc2UgRkxBU0hfQ0ZJXzMyQklUOgorCQlkZWJ1ZyAoImlzPSAlOC44bHggJTguOGx4XG4iLCBmbGFzaF9yZWFkMzIoYWRkciksIGN3b3JkLmwpOworCQlyZXR2YWwgPSAoZmxhc2hfcmVhZDMyKGFkZHIpID09IGN3b3JkLmwpOworCQlicmVhazsKKwljYXNlIEZMQVNIX0NGSV82NEJJVDoKKyNpZmRlZiBERUJVRworCQl7CisJCQljaGFyIHN0cjFbMjBdOworCQkJY2hhciBzdHIyWzIwXTsKKworCQkJcHJpbnRfbG9uZ2xvbmcgKHN0cjEsIGZsYXNoX3JlYWQ2NChhZGRyKSk7CisJCQlwcmludF9sb25nbG9uZyAoc3RyMiwgY3dvcmQubGwpOworCQkJZGVidWcgKCJpcz0gJXMgJXNcbiIsIHN0cjEsIHN0cjIpOworCQl9CisjZW5kaWYKKwkJcmV0dmFsID0gKGZsYXNoX3JlYWQ2NChhZGRyKSA9PSBjd29yZC5sbCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHZhbCA9IDA7CisJCWJyZWFrOworCX0KKwlmbGFzaF91bm1hcChpbmZvLCBzZWN0LCBvZmZzZXQsIGFkZHIpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCitzdGF0aWMgaW50IGZsYXNoX2lzc2V0IChmbGFzaF9pbmZvX3QgKiBpbmZvLCBmbGFzaF9zZWN0X3Qgc2VjdCwKKwkJCXVpbnQgb2Zmc2V0LCB1Y2hhciBjbWQpCit7CisJdm9pZCAqYWRkcjsKKwljZml3b3JkX3QgY3dvcmQ7CisJaW50IHJldHZhbDsKKworCWFkZHIgPSBmbGFzaF9tYXAgKGluZm8sIHNlY3QsIG9mZnNldCk7CisJZmxhc2hfbWFrZV9jbWQgKGluZm8sIGNtZCwgJmN3b3JkKTsKKwlzd2l0Y2ggKGluZm8tPnBvcnR3aWR0aCkgeworCWNhc2UgRkxBU0hfQ0ZJXzhCSVQ6CisJCXJldHZhbCA9ICgoZmxhc2hfcmVhZDgoYWRkcikgJiBjd29yZC5jKSA9PSBjd29yZC5jKTsKKwkJYnJlYWs7CisJY2FzZSBGTEFTSF9DRklfMTZCSVQ6CisJCXJldHZhbCA9ICgoZmxhc2hfcmVhZDE2KGFkZHIpICYgY3dvcmQudykgPT0gY3dvcmQudyk7CisJCWJyZWFrOworCWNhc2UgRkxBU0hfQ0ZJXzMyQklUOgorCQlyZXR2YWwgPSAoKGZsYXNoX3JlYWQxNihhZGRyKSAmIGN3b3JkLmwpID09IGN3b3JkLmwpOworCQlicmVhazsKKwljYXNlIEZMQVNIX0NGSV82NEJJVDoKKwkJcmV0dmFsID0gKChmbGFzaF9yZWFkNjQoYWRkcikgJiBjd29yZC5sbCkgPT0gY3dvcmQubGwpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR2YWwgPSAwOworCQlicmVhazsKKwl9CisJZmxhc2hfdW5tYXAoaW5mbywgc2VjdCwgb2Zmc2V0LCBhZGRyKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworc3RhdGljIGludCBmbGFzaF90b2dnbGUgKGZsYXNoX2luZm9fdCAqIGluZm8sIGZsYXNoX3NlY3RfdCBzZWN0LAorCQkJIHVpbnQgb2Zmc2V0LCB1Y2hhciBjbWQpCit7CisJdm9pZCAqYWRkcjsKKwljZml3b3JkX3QgY3dvcmQ7CisJaW50IHJldHZhbDsKKworCWFkZHIgPSBmbGFzaF9tYXAgKGluZm8sIHNlY3QsIG9mZnNldCk7CisJZmxhc2hfbWFrZV9jbWQgKGluZm8sIGNtZCwgJmN3b3JkKTsKKwlzd2l0Y2ggKGluZm8tPnBvcnR3aWR0aCkgeworCWNhc2UgRkxBU0hfQ0ZJXzhCSVQ6CisJCXJldHZhbCA9ICgoZmxhc2hfcmVhZDgoYWRkcikgJiBjd29yZC5jKSAhPQorCQkJICAoZmxhc2hfcmVhZDgoYWRkcikgJiBjd29yZC5jKSk7CisJCWJyZWFrOworCWNhc2UgRkxBU0hfQ0ZJXzE2QklUOgorCQlyZXR2YWwgPSAoKGZsYXNoX3JlYWQxNihhZGRyKSAmIGN3b3JkLncpICE9CisJCQkgIChmbGFzaF9yZWFkMTYoYWRkcikgJiBjd29yZC53KSk7CisJCWJyZWFrOworCWNhc2UgRkxBU0hfQ0ZJXzMyQklUOgorCQlyZXR2YWwgPSAoKGZsYXNoX3JlYWQzMihhZGRyKSAmIGN3b3JkLmwpICE9CisJCQkgIChmbGFzaF9yZWFkMzIoYWRkcikgJiBjd29yZC5sKSk7CisJCWJyZWFrOworCWNhc2UgRkxBU0hfQ0ZJXzY0QklUOgorCQlyZXR2YWwgPSAoKGZsYXNoX3JlYWQ2NChhZGRyKSAmIGN3b3JkLmxsKSAhPQorCQkJICAoZmxhc2hfcmVhZDY0KGFkZHIpICYgY3dvcmQubGwpKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dmFsID0gMDsKKwkJYnJlYWs7CisJfQorCWZsYXNoX3VubWFwKGluZm8sIHNlY3QsIG9mZnNldCwgYWRkcik7CisKKwlyZXR1cm4gcmV0dmFsOworfQogCiAvKgogICogZmxhc2hfaXNfYnVzeSAtIGNoZWNrIHRvIHNlZSBpZiB0aGUgZmxhc2ggaXMgYnVzeQotICogVGhpcyByb3V0aW5lIGNoZWNrcyB0aGUgc3RhdHVzIG9mIHRoZSBjaGlwIGFuZCByZXR1cm5zIHRydWUgaWYgdGhlIGNoaXAgaXMgYnVzeQorICoKKyAqIFRoaXMgcm91dGluZSBjaGVja3MgdGhlIHN0YXR1cyBvZiB0aGUgY2hpcCBhbmQgcmV0dXJucyB0cnVlIGlmIHRoZQorICogY2hpcCBpcyBidXN5LgogICovCiBzdGF0aWMgaW50IGZsYXNoX2lzX2J1c3kgKGZsYXNoX2luZm9fdCAqIGluZm8sIGZsYXNoX3NlY3RfdCBzZWN0KQogewpAQCAtNzc3LDYgKzU5NSw5IEBACiAJCWJyZWFrOwogCWNhc2UgQ0ZJX0NNRFNFVF9BTURfU1RBTkRBUkQ6CiAJY2FzZSBDRklfQ01EU0VUX0FNRF9FWFRFTkRFRDoKKyNpZmRlZiBDT05GSUdfRkxBU0hfQ0ZJX0xFR0FDWQorCWNhc2UgQ0ZJX0NNRFNFVF9BTURfTEVHQUNZOgorI2VuZGlmCiAJCXJldHZhbCA9IGZsYXNoX3RvZ2dsZSAoaW5mbywgc2VjdCwgMCwgQU1EX1NUQVRVU19UT0dHTEUpOwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtODE1LDcgKzYzNiw5IEBACiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFdhaXQgZm9yIFhTUi43IHRvIGJlIHNldCwgaWYgaXQgdGltZXMgb3V0IHByaW50IGFuIGVycm9yLCBvdGhlcndpc2UgZG8gYSBmdWxsIHN0YXR1cyBjaGVjay4KKyAqIFdhaXQgZm9yIFhTUi43IHRvIGJlIHNldCwgaWYgaXQgdGltZXMgb3V0IHByaW50IGFuIGVycm9yLCBvdGhlcndpc2UKKyAqIGRvIGEgZnVsbCBzdGF0dXMgY2hlY2suCisgKgogICogVGhpcyByb3V0aW5lIHNldHMgdGhlIGZsYXNoIHRvIHJlYWQtYXJyYXkgbW9kZS4KICAqLwogc3RhdGljIGludCBmbGFzaF9mdWxsX3N0YXR1c19jaGVjayAoZmxhc2hfaW5mb190ICogaW5mbywgZmxhc2hfc2VjdF90IHNlY3RvciwKQEAgLTgzMiwxMiArNjU1LDE1IEBACiAJCQlyZXRjb2RlID0gRVJSX0lOVkFMOwogCQkJcHJpbnRmICgiRmxhc2ggJXMgZXJyb3IgYXQgYWRkcmVzcyAlbHhcbiIsIHByb21wdCwKIAkJCQlpbmZvLT5zdGFydFtzZWN0b3JdKTsKLQkJCWlmIChmbGFzaF9pc3NldCAoaW5mbywgc2VjdG9yLCAwLCBGTEFTSF9TVEFUVVNfRUNMQlMgfCBGTEFTSF9TVEFUVVNfUFNMQlMpKSB7CisJCQlpZiAoZmxhc2hfaXNzZXQgKGluZm8sIHNlY3RvciwgMCwgRkxBU0hfU1RBVFVTX0VDTEJTIHwKKwkJCQkJIEZMQVNIX1NUQVRVU19QU0xCUykpIHsKIAkJCQlwdXRzICgiQ29tbWFuZCBTZXF1ZW5jZSBFcnJvci5cbiIpOwotCQkJfSBlbHNlIGlmIChmbGFzaF9pc3NldCAoaW5mbywgc2VjdG9yLCAwLCBGTEFTSF9TVEFUVVNfRUNMQlMpKSB7CisJCQl9IGVsc2UgaWYgKGZsYXNoX2lzc2V0IChpbmZvLCBzZWN0b3IsIDAsCisJCQkJCQlGTEFTSF9TVEFUVVNfRUNMQlMpKSB7CiAJCQkJcHV0cyAoIkJsb2NrIEVyYXNlIEVycm9yLlxuIik7CiAJCQkJcmV0Y29kZSA9IEVSUl9OT1RfRVJBU0VEOwotCQkJfSBlbHNlIGlmIChmbGFzaF9pc3NldCAoaW5mbywgc2VjdG9yLCAwLCBGTEFTSF9TVEFUVVNfUFNMQlMpKSB7CisJCQl9IGVsc2UgaWYgKGZsYXNoX2lzc2V0IChpbmZvLCBzZWN0b3IsIDAsCisJCQkJCQlGTEFTSF9TVEFUVVNfUFNMQlMpKSB7CiAJCQkJcHV0cyAoIkxvY2tpbmcgRXJyb3JcbiIpOwogCQkJfQogCQkJaWYgKGZsYXNoX2lzc2V0IChpbmZvLCBzZWN0b3IsIDAsIEZMQVNIX1NUQVRVU19EUFMpKSB7CkBAIC04OTksMTgyICs3MjUsNTk4IEBACiAJfQogfQogCisvKiBsb29wIHRocm91Z2ggdGhlIHNlY3RvcnMgZnJvbSB0aGUgaGlnaGVzdCBhZGRyZXNzIHdoZW4gdGhlIHBhc3NlZAorICogYWRkcmVzcyBpcyBncmVhdGVyIG9yIGVxdWFsIHRvIHRoZSBzZWN0b3IgYWRkcmVzcyB3ZSBoYXZlIGEgbWF0Y2gKKyAqLworc3RhdGljIGZsYXNoX3NlY3RfdCBmaW5kX3NlY3RvciAoZmxhc2hfaW5mb190ICogaW5mbywgdWxvbmcgYWRkcikKK3sKKwlmbGFzaF9zZWN0X3Qgc2VjdG9yOworCisJZm9yIChzZWN0b3IgPSBpbmZvLT5zZWN0b3JfY291bnQgLSAxOyBzZWN0b3IgPj0gMDsgc2VjdG9yLS0pIHsKKwkJaWYgKGFkZHIgPj0gaW5mby0+c3RhcnRbc2VjdG9yXSkKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gc2VjdG9yOworfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBtYWtlIGEgcHJvcGVyIHNpemVkIGNvbW1hbmQgYmFzZWQgb24gdGhlIHBvcnQgYW5kIGNoaXAgd2lkdGhzCiAgKi8KLXN0YXRpYyB2b2lkIGZsYXNoX21ha2VfY21kIChmbGFzaF9pbmZvX3QgKiBpbmZvLCB1Y2hhciBjbWQsIHZvaWQgKmNtZGJ1ZikKK3N0YXRpYyBpbnQgZmxhc2hfd3JpdGVfY2Zpd29yZCAoZmxhc2hfaW5mb190ICogaW5mbywgdWxvbmcgZGVzdCwKKwkJCQljZml3b3JkX3QgY3dvcmQpCit7CisJdm9pZCAqZHN0YWRkcjsKKwlpbnQgZmxhZzsKKworCWRzdGFkZHIgPSBtYXBfcGh5c21lbShkZXN0LCBpbmZvLT5wb3J0d2lkdGgsIE1BUF9OT0NBQ0hFKTsKKworCS8qIENoZWNrIGlmIEZsYXNoIGlzIChzdWZmaWNpZW50bHkpIGVyYXNlZCAqLworCXN3aXRjaCAoaW5mby0+cG9ydHdpZHRoKSB7CisJY2FzZSBGTEFTSF9DRklfOEJJVDoKKwkJZmxhZyA9ICgoZmxhc2hfcmVhZDgoZHN0YWRkcikgJiBjd29yZC5jKSA9PSBjd29yZC5jKTsKKwkJYnJlYWs7CisJY2FzZSBGTEFTSF9DRklfMTZCSVQ6CisJCWZsYWcgPSAoKGZsYXNoX3JlYWQxNihkc3RhZGRyKSAmIGN3b3JkLncpID09IGN3b3JkLncpOworCQlicmVhazsKKwljYXNlIEZMQVNIX0NGSV8zMkJJVDoKKwkJZmxhZyA9ICgoZmxhc2hfcmVhZDMyKGRzdGFkZHIpICYgY3dvcmQubCkgPT0gY3dvcmQubCk7CisJCWJyZWFrOworCWNhc2UgRkxBU0hfQ0ZJXzY0QklUOgorCQlmbGFnID0gKChmbGFzaF9yZWFkNjQoZHN0YWRkcikgJiBjd29yZC5sbCkgPT0gY3dvcmQubGwpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlmbGFnID0gMDsKKwkJYnJlYWs7CisJfQorCWlmICghZmxhZykgeworCQl1bm1hcF9waHlzbWVtKGRzdGFkZHIsIGluZm8tPnBvcnR3aWR0aCk7CisJCXJldHVybiAyOworCX0KKworCS8qIERpc2FibGUgaW50ZXJydXB0cyB3aGljaCBtaWdodCBjYXVzZSBhIHRpbWVvdXQgaGVyZSAqLworCWZsYWcgPSBkaXNhYmxlX2ludGVycnVwdHMgKCk7CisKKwlzd2l0Y2ggKGluZm8tPnZlbmRvcikgeworCWNhc2UgQ0ZJX0NNRFNFVF9JTlRFTF9FWFRFTkRFRDoKKwljYXNlIENGSV9DTURTRVRfSU5URUxfU1RBTkRBUkQ6CisJCWZsYXNoX3dyaXRlX2NtZCAoaW5mbywgMCwgMCwgRkxBU0hfQ01EX0NMRUFSX1NUQVRVUyk7CisJCWZsYXNoX3dyaXRlX2NtZCAoaW5mbywgMCwgMCwgRkxBU0hfQ01EX1dSSVRFKTsKKwkJYnJlYWs7CisJY2FzZSBDRklfQ01EU0VUX0FNRF9FWFRFTkRFRDoKKwljYXNlIENGSV9DTURTRVRfQU1EX1NUQU5EQVJEOgorI2lmZGVmIENPTkZJR19GTEFTSF9DRklfTEVHQUNZCisJY2FzZSBDRklfQ01EU0VUX0FNRF9MRUdBQ1k6CisjZW5kaWYKKwkJZmxhc2hfdW5sb2NrX3NlcSAoaW5mbywgMCk7CisJCWZsYXNoX3dyaXRlX2NtZCAoaW5mbywgMCwgaW5mby0+YWRkcl91bmxvY2sxLCBBTURfQ01EX1dSSVRFKTsKKwkJYnJlYWs7CisJfQorCisJc3dpdGNoIChpbmZvLT5wb3J0d2lkdGgpIHsKKwljYXNlIEZMQVNIX0NGSV84QklUOgorCQlmbGFzaF93cml0ZTgoY3dvcmQuYywgZHN0YWRkcik7CisJCWJyZWFrOworCWNhc2UgRkxBU0hfQ0ZJXzE2QklUOgorCQlmbGFzaF93cml0ZTE2KGN3b3JkLncsIGRzdGFkZHIpOworCQlicmVhazsKKwljYXNlIEZMQVNIX0NGSV8zMkJJVDoKKwkJZmxhc2hfd3JpdGUzMihjd29yZC5sLCBkc3RhZGRyKTsKKwkJYnJlYWs7CisJY2FzZSBGTEFTSF9DRklfNjRCSVQ6CisJCWZsYXNoX3dyaXRlNjQoY3dvcmQubGwsIGRzdGFkZHIpOworCQlicmVhazsKKwl9CisKKwkvKiByZS1lbmFibGUgaW50ZXJydXB0cyBpZiBuZWNlc3NhcnkgKi8KKwlpZiAoZmxhZykKKwkJZW5hYmxlX2ludGVycnVwdHMgKCk7CisKKwl1bm1hcF9waHlzbWVtKGRzdGFkZHIsIGluZm8tPnBvcnR3aWR0aCk7CisKKwlyZXR1cm4gZmxhc2hfZnVsbF9zdGF0dXNfY2hlY2sgKGluZm8sIGZpbmRfc2VjdG9yIChpbmZvLCBkZXN0KSwKKwkJCQkJaW5mby0+d3JpdGVfdG91dCwgIndyaXRlIik7Cit9CisKKyNpZmRlZiBDRkdfRkxBU0hfVVNFX0JVRkZFUl9XUklURQorCitzdGF0aWMgaW50IGZsYXNoX3dyaXRlX2NmaWJ1ZmZlciAoZmxhc2hfaW5mb190ICogaW5mbywgdWxvbmcgZGVzdCwgdWNoYXIgKiBjcCwKKwkJCQkgIGludCBsZW4pCit7CisJZmxhc2hfc2VjdF90IHNlY3RvcjsKKwlpbnQgY250OworCWludCByZXRjb2RlOworCXZvaWQgKnNyYyA9IGNwOworCXZvaWQgKmRzdCA9IG1hcF9waHlzbWVtKGRlc3QsIGxlbiwgTUFQX05PQ0FDSEUpOworCisJc2VjdG9yID0gZmluZF9zZWN0b3IgKGluZm8sIGRlc3QpOworCisJc3dpdGNoIChpbmZvLT52ZW5kb3IpIHsKKwljYXNlIENGSV9DTURTRVRfSU5URUxfU1RBTkRBUkQ6CisJY2FzZSBDRklfQ01EU0VUX0lOVEVMX0VYVEVOREVEOgorCQlmbGFzaF93cml0ZV9jbWQgKGluZm8sIHNlY3RvciwgMCwgRkxBU0hfQ01EX0NMRUFSX1NUQVRVUyk7CisJCWZsYXNoX3dyaXRlX2NtZCAoaW5mbywgc2VjdG9yLCAwLCBGTEFTSF9DTURfV1JJVEVfVE9fQlVGRkVSKTsKKwkJcmV0Y29kZSA9IGZsYXNoX3N0YXR1c19jaGVjayAoaW5mbywgc2VjdG9yLAorCQkJCQkgICAgICBpbmZvLT5idWZmZXJfd3JpdGVfdG91dCwKKwkJCQkJICAgICAgIndyaXRlIHRvIGJ1ZmZlciIpOworCQlpZiAocmV0Y29kZSA9PSBFUlJfT0spIHsKKwkJCS8qIHJlZHVjZSB0aGUgbnVtYmVyIG9mIGxvb3BzIGJ5IHRoZSB3aWR0aCBvZgorCQkJICogdGhlIHBvcnQgKi8KKwkJCXN3aXRjaCAoaW5mby0+cG9ydHdpZHRoKSB7CisJCQljYXNlIEZMQVNIX0NGSV84QklUOgorCQkJCWNudCA9IGxlbjsKKwkJCQlicmVhazsKKwkJCWNhc2UgRkxBU0hfQ0ZJXzE2QklUOgorCQkJCWNudCA9IGxlbiA+PiAxOworCQkJCWJyZWFrOworCQkJY2FzZSBGTEFTSF9DRklfMzJCSVQ6CisJCQkJY250ID0gbGVuID4+IDI7CisJCQkJYnJlYWs7CisJCQljYXNlIEZMQVNIX0NGSV82NEJJVDoKKwkJCQljbnQgPSBsZW4gPj4gMzsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJcmV0Y29kZSA9IEVSUl9JTlZBTDsKKwkJCQlnb3RvIG91dF91bm1hcDsKKwkJCX0KKwkJCWZsYXNoX3dyaXRlX2NtZCAoaW5mbywgc2VjdG9yLCAwLCAodWNoYXIpIGNudCAtIDEpOworCQkJd2hpbGUgKGNudC0tID4gMCkgeworCQkJCXN3aXRjaCAoaW5mby0+cG9ydHdpZHRoKSB7CisJCQkJY2FzZSBGTEFTSF9DRklfOEJJVDoKKwkJCQkJZmxhc2hfd3JpdGU4KGZsYXNoX3JlYWQ4KHNyYyksIGRzdCk7CisJCQkJCXNyYyArPSAxLCBkc3QgKz0gMTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBGTEFTSF9DRklfMTZCSVQ6CisJCQkJCWZsYXNoX3dyaXRlMTYoZmxhc2hfcmVhZDE2KHNyYyksIGRzdCk7CisJCQkJCXNyYyArPSAyLCBkc3QgKz0gMjsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBGTEFTSF9DRklfMzJCSVQ6CisJCQkJCWZsYXNoX3dyaXRlMzIoZmxhc2hfcmVhZDMyKHNyYyksIGRzdCk7CisJCQkJCXNyYyArPSA0LCBkc3QgKz0gNDsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBGTEFTSF9DRklfNjRCSVQ6CisJCQkJCWZsYXNoX3dyaXRlNjQoZmxhc2hfcmVhZDY0KHNyYyksIGRzdCk7CisJCQkJCXNyYyArPSA4LCBkc3QgKz0gODsKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJcmV0Y29kZSA9IEVSUl9JTlZBTDsKKwkJCQkJZ290byBvdXRfdW5tYXA7CisJCQkJfQorCQkJfQorCQkJZmxhc2hfd3JpdGVfY21kIChpbmZvLCBzZWN0b3IsIDAsCisJCQkJCSBGTEFTSF9DTURfV1JJVEVfQlVGRkVSX0NPTkZJUk0pOworCQkJcmV0Y29kZSA9IGZsYXNoX2Z1bGxfc3RhdHVzX2NoZWNrICgKKwkJCQlpbmZvLCBzZWN0b3IsIGluZm8tPmJ1ZmZlcl93cml0ZV90b3V0LAorCQkJCSJidWZmZXIgd3JpdGUiKTsKKwkJfQorCisJCWJyZWFrOworCisJY2FzZSBDRklfQ01EU0VUX0FNRF9TVEFOREFSRDoKKwljYXNlIENGSV9DTURTRVRfQU1EX0VYVEVOREVEOgorCQlmbGFzaF91bmxvY2tfc2VxKGluZm8sMCk7CisJCWZsYXNoX3dyaXRlX2NtZCAoaW5mbywgc2VjdG9yLCAwLCBBTURfQ01EX1dSSVRFX1RPX0JVRkZFUik7CisKKwkJc3dpdGNoIChpbmZvLT5wb3J0d2lkdGgpIHsKKwkJY2FzZSBGTEFTSF9DRklfOEJJVDoKKwkJCWNudCA9IGxlbjsKKwkJCWZsYXNoX3dyaXRlX2NtZCAoaW5mbywgc2VjdG9yLCAwLCAgKHVjaGFyKSBjbnQgLSAxKTsKKwkJCXdoaWxlIChjbnQtLSA+IDApIHsKKwkJCQlmbGFzaF93cml0ZTgoZmxhc2hfcmVhZDgoc3JjKSwgZHN0KTsKKwkJCQlzcmMgKz0gMSwgZHN0ICs9IDE7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBGTEFTSF9DRklfMTZCSVQ6CisJCQljbnQgPSBsZW4gPj4gMTsKKwkJCWZsYXNoX3dyaXRlX2NtZCAoaW5mbywgc2VjdG9yLCAwLCAgKHVjaGFyKSBjbnQgLSAxKTsKKwkJCXdoaWxlIChjbnQtLSA+IDApIHsKKwkJCQlmbGFzaF93cml0ZTE2KGZsYXNoX3JlYWQxNihzcmMpLCBkc3QpOworCQkJCXNyYyArPSAyLCBkc3QgKz0gMjsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIEZMQVNIX0NGSV8zMkJJVDoKKwkJCWNudCA9IGxlbiA+PiAyOworCQkJZmxhc2hfd3JpdGVfY21kIChpbmZvLCBzZWN0b3IsIDAsICAodWNoYXIpIGNudCAtIDEpOworCQkJd2hpbGUgKGNudC0tID4gMCkgeworCQkJCWZsYXNoX3dyaXRlMzIoZmxhc2hfcmVhZDMyKHNyYyksIGRzdCk7CisJCQkJc3JjICs9IDQsIGRzdCArPSA0OworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgRkxBU0hfQ0ZJXzY0QklUOgorCQkJY250ID0gbGVuID4+IDM7CisJCQlmbGFzaF93cml0ZV9jbWQgKGluZm8sIHNlY3RvciwgMCwgICh1Y2hhcikgY250IC0gMSk7CisJCQl3aGlsZSAoY250LS0gPiAwKSB7CisJCQkJZmxhc2hfd3JpdGU2NChmbGFzaF9yZWFkNjQoc3JjKSwgZHN0KTsKKwkJCQlzcmMgKz0gOCwgZHN0ICs9IDg7CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldGNvZGUgPSBFUlJfSU5WQUw7CisJCQlnb3RvIG91dF91bm1hcDsKKwkJfQorCisJCWZsYXNoX3dyaXRlX2NtZCAoaW5mbywgc2VjdG9yLCAwLCBBTURfQ01EX1dSSVRFX0JVRkZFUl9DT05GSVJNKTsKKwkJcmV0Y29kZSA9IGZsYXNoX2Z1bGxfc3RhdHVzX2NoZWNrIChpbmZvLCBzZWN0b3IsCisJCQkJCQkgICBpbmZvLT5idWZmZXJfd3JpdGVfdG91dCwKKwkJCQkJCSAgICJidWZmZXIgd3JpdGUiKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlkZWJ1ZyAoIlVua25vd24gQ29tbWFuZCBTZXRcbiIpOworCQlyZXRjb2RlID0gRVJSX0lOVkFMOworCQlicmVhazsKKwl9CisKK291dF91bm1hcDoKKwl1bm1hcF9waHlzbWVtKGRzdCwgbGVuKTsKKwlyZXR1cm4gcmV0Y29kZTsKK30KKyNlbmRpZiAvKiBDRkdfRkxBU0hfVVNFX0JVRkZFUl9XUklURSAqLworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworaW50IGZsYXNoX2VyYXNlIChmbGFzaF9pbmZvX3QgKiBpbmZvLCBpbnQgc19maXJzdCwgaW50IHNfbGFzdCkKK3sKKwlpbnQgcmNvZGUgPSAwOworCWludCBwcm90OworCWZsYXNoX3NlY3RfdCBzZWN0OworCisJaWYgKGluZm8tPmZsYXNoX2lkICE9IEZMQVNIX01BTl9DRkkpIHsKKwkJcHV0cyAoIkNhbid0IGVyYXNlIHVua25vd24gZmxhc2ggdHlwZSAtIGFib3J0ZWRcbiIpOworCQlyZXR1cm4gMTsKKwl9CisJaWYgKChzX2ZpcnN0IDwgMCkgfHwgKHNfZmlyc3QgPiBzX2xhc3QpKSB7CisJCXB1dHMgKCItIG5vIHNlY3RvcnMgdG8gZXJhc2VcbiIpOworCQlyZXR1cm4gMTsKKwl9CisKKwlwcm90ID0gMDsKKwlmb3IgKHNlY3QgPSBzX2ZpcnN0OyBzZWN0IDw9IHNfbGFzdDsgKytzZWN0KSB7CisJCWlmIChpbmZvLT5wcm90ZWN0W3NlY3RdKSB7CisJCQlwcm90Kys7CisJCX0KKwl9CisJaWYgKHByb3QpIHsKKwkJcHJpbnRmICgiLSBXYXJuaW5nOiAlZCBwcm90ZWN0ZWQgc2VjdG9ycyB3aWxsIG5vdCBiZSBlcmFzZWQhXG4iLAorCQkJcHJvdCk7CisJfSBlbHNlIHsKKwkJcHV0YyAoJ1xuJyk7CisJfQorCisKKwlmb3IgKHNlY3QgPSBzX2ZpcnN0OyBzZWN0IDw9IHNfbGFzdDsgc2VjdCsrKSB7CisJCWlmIChpbmZvLT5wcm90ZWN0W3NlY3RdID09IDApIHsgLyogbm90IHByb3RlY3RlZCAqLworCQkJc3dpdGNoIChpbmZvLT52ZW5kb3IpIHsKKwkJCWNhc2UgQ0ZJX0NNRFNFVF9JTlRFTF9TVEFOREFSRDoKKwkJCWNhc2UgQ0ZJX0NNRFNFVF9JTlRFTF9FWFRFTkRFRDoKKwkJCQlmbGFzaF93cml0ZV9jbWQgKGluZm8sIHNlY3QsIDAsCisJCQkJCQkgRkxBU0hfQ01EX0NMRUFSX1NUQVRVUyk7CisJCQkJZmxhc2hfd3JpdGVfY21kIChpbmZvLCBzZWN0LCAwLAorCQkJCQkJIEZMQVNIX0NNRF9CTE9DS19FUkFTRSk7CisJCQkJZmxhc2hfd3JpdGVfY21kIChpbmZvLCBzZWN0LCAwLAorCQkJCQkJIEZMQVNIX0NNRF9FUkFTRV9DT05GSVJNKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQ0ZJX0NNRFNFVF9BTURfU1RBTkRBUkQ6CisJCQljYXNlIENGSV9DTURTRVRfQU1EX0VYVEVOREVEOgorCQkJCWZsYXNoX3VubG9ja19zZXEgKGluZm8sIHNlY3QpOworCQkJCWZsYXNoX3dyaXRlX2NtZCAoaW5mbywgc2VjdCwKKwkJCQkJCWluZm8tPmFkZHJfdW5sb2NrMSwKKwkJCQkJCUFNRF9DTURfRVJBU0VfU1RBUlQpOworCQkJCWZsYXNoX3VubG9ja19zZXEgKGluZm8sIHNlY3QpOworCQkJCWZsYXNoX3dyaXRlX2NtZCAoaW5mbywgc2VjdCwgMCwKKwkJCQkJCSBBTURfQ01EX0VSQVNFX1NFQ1RPUik7CisJCQkJYnJlYWs7CisjaWZkZWYgQ09ORklHX0ZMQVNIX0NGSV9MRUdBQ1kKKwkJCWNhc2UgQ0ZJX0NNRFNFVF9BTURfTEVHQUNZOgorCQkJCWZsYXNoX3VubG9ja19zZXEgKGluZm8sIDApOworCQkJCWZsYXNoX3dyaXRlX2NtZCAoaW5mbywgMCwgaW5mby0+YWRkcl91bmxvY2sxLAorCQkJCQkJQU1EX0NNRF9FUkFTRV9TVEFSVCk7CisJCQkJZmxhc2hfdW5sb2NrX3NlcSAoaW5mbywgMCk7CisJCQkJZmxhc2hfd3JpdGVfY21kIChpbmZvLCBzZWN0LCAwLAorCQkJCQkJQU1EX0NNRF9FUkFTRV9TRUNUT1IpOworCQkJCWJyZWFrOworI2VuZGlmCisJCQlkZWZhdWx0OgorCQkJCWRlYnVnICgiVW5rb3duIGZsYXNoIHZlbmRvciAlZFxuIiwKKwkJCQkgICAgICAgaW5mby0+dmVuZG9yKTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJaWYgKGZsYXNoX2Z1bGxfc3RhdHVzX2NoZWNrCisJCQkgICAgKGluZm8sIHNlY3QsIGluZm8tPmVyYXNlX2Jsa190b3V0LCAiZXJhc2UiKSkgeworCQkJCXJjb2RlID0gMTsKKwkJCX0gZWxzZQorCQkJCXB1dGMgKCcuJyk7CisJCX0KKwl9CisJcHV0cyAoIiBkb25lXG4iKTsKKwlyZXR1cm4gcmNvZGU7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLwordm9pZCBmbGFzaF9wcmludF9pbmZvIChmbGFzaF9pbmZvX3QgKiBpbmZvKQogewogCWludCBpOwotCXVjaGFyICpjcCA9ICh1Y2hhciAqKSBjbWRidWY7CiAKLSNpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikgfHwgZGVmaW5lZChDRkdfV1JJVEVfU1dBUFBFRF9EQVRBKQotCWZvciAoaSA9IGluZm8tPnBvcnR3aWR0aDsgaSA+IDA7IGktLSkKLSNlbHNlCi0JZm9yIChpID0gMTsgaSA8PSBpbmZvLT5wb3J0d2lkdGg7IGkrKykKKwlpZiAoaW5mby0+Zmxhc2hfaWQgIT0gRkxBU0hfTUFOX0NGSSkgeworCQlwdXRzICgibWlzc2luZyBvciB1bmtub3duIEZMQVNIIHR5cGVcbiIpOworCQlyZXR1cm47CisJfQorCisJcHJpbnRmICgiJXMgRkxBU0ggKCVkIHggJWQpIiwKKwkJaW5mby0+bmFtZSwKKwkJKGluZm8tPnBvcnR3aWR0aCA8PCAzKSwgKGluZm8tPmNoaXB3aWR0aCA8PCAzKSk7CisJaWYgKGluZm8tPnNpemUgPCAxMDI0KjEwMjQpCisJCXByaW50ZiAoIiAgU2l6ZTogJWxkIGtCIGluICVkIFNlY3RvcnNcbiIsCisJCQlpbmZvLT5zaXplID4+IDEwLCBpbmZvLT5zZWN0b3JfY291bnQpOworCWVsc2UKKwkJcHJpbnRmICgiICBTaXplOiAlbGQgTUIgaW4gJWQgU2VjdG9yc1xuIiwKKwkJCWluZm8tPnNpemUgPj4gMjAsIGluZm8tPnNlY3Rvcl9jb3VudCk7CisJcHJpbnRmICgiICAiKTsKKwlzd2l0Y2ggKGluZm8tPnZlbmRvcikgeworCQljYXNlIENGSV9DTURTRVRfSU5URUxfU1RBTkRBUkQ6CisJCQlwcmludGYgKCJJbnRlbCBTdGFuZGFyZCIpOworCQkJYnJlYWs7CisJCWNhc2UgQ0ZJX0NNRFNFVF9JTlRFTF9FWFRFTkRFRDoKKwkJCXByaW50ZiAoIkludGVsIEV4dGVuZGVkIik7CisJCQlicmVhazsKKwkJY2FzZSBDRklfQ01EU0VUX0FNRF9TVEFOREFSRDoKKwkJCXByaW50ZiAoIkFNRCBTdGFuZGFyZCIpOworCQkJYnJlYWs7CisJCWNhc2UgQ0ZJX0NNRFNFVF9BTURfRVhURU5ERUQ6CisJCQlwcmludGYgKCJBTUQgRXh0ZW5kZWQiKTsKKwkJCWJyZWFrOworI2lmZGVmIENPTkZJR19GTEFTSF9DRklfTEVHQUNZCisJCWNhc2UgQ0ZJX0NNRFNFVF9BTURfTEVHQUNZOgorCQkJcHJpbnRmICgiQU1EIExlZ2FjeSIpOworCQkJYnJlYWs7CiAjZW5kaWYKLQkJKmNwKysgPSAoaSAmIChpbmZvLT5jaGlwd2lkdGggLSAxKSkgPyAnXDAnIDogY21kOworCQlkZWZhdWx0OgorCQkJcHJpbnRmICgiVW5rbm93biAoJWQpIiwgaW5mby0+dmVuZG9yKTsKKwkJCWJyZWFrOworCX0KKwlwcmludGYgKCIgY29tbWFuZCBzZXQsIE1hbnVmYWN0dXJlciBJRDogMHglMDJYLCBEZXZpY2UgSUQ6IDB4JTAyWCIsCisJCWluZm8tPm1hbnVmYWN0dXJlcl9pZCwgaW5mby0+ZGV2aWNlX2lkKTsKKwlpZiAoaW5mby0+ZGV2aWNlX2lkID09IDB4N0UpIHsKKwkJcHJpbnRmKCIlMDRYIiwgaW5mby0+ZGV2aWNlX2lkMik7CisJfQorCXByaW50ZiAoIlxuICBFcmFzZSB0aW1lb3V0OiAlbGQgbXMsIHdyaXRlIHRpbWVvdXQ6ICVsZCBtc1xuIiwKKwkJaW5mby0+ZXJhc2VfYmxrX3RvdXQsCisJCWluZm8tPndyaXRlX3RvdXQpOworCWlmIChpbmZvLT5idWZmZXJfc2l6ZSA+IDEpIHsKKwkJcHJpbnRmICgiICBCdWZmZXIgd3JpdGUgdGltZW91dDogJWxkIG1zLCAiCisJCQkiYnVmZmVyIHNpemU6ICVkIGJ5dGVzXG4iLAorCQlpbmZvLT5idWZmZXJfd3JpdGVfdG91dCwKKwkJaW5mby0+YnVmZmVyX3NpemUpOworCX0KKworCXB1dHMgKCJcbiAgU2VjdG9yIFN0YXJ0IEFkZHJlc3NlczoiKTsKKwlmb3IgKGkgPSAwOyBpIDwgaW5mby0+c2VjdG9yX2NvdW50OyArK2kpIHsKKwkJaWYgKChpICUgNSkgPT0gMCkKKwkJCXByaW50ZiAoIlxuIik7CisjaWZkZWYgQ0ZHX0ZMQVNIX0VNUFRZX0lORk8KKwkJaW50IGs7CisJCWludCBzaXplOworCQlpbnQgZXJhc2VkOworCQl2b2xhdGlsZSB1bnNpZ25lZCBsb25nICpmbGFzaDsKKworCQkvKgorCQkgKiBDaGVjayBpZiB3aG9sZSBzZWN0b3IgaXMgZXJhc2VkCisJCSAqLworCQlzaXplID0gZmxhc2hfc2VjdG9yX3NpemUoaW5mbywgaSk7CisJCWVyYXNlZCA9IDE7CisJCWZsYXNoID0gKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikgaW5mby0+c3RhcnRbaV07CisJCXNpemUgPSBzaXplID4+IDI7CS8qIGRpdmlkZSBieSA0IGZvciBsb25nd29yZCBhY2Nlc3MgKi8KKwkJZm9yIChrID0gMDsgayA8IHNpemU7IGsrKykgeworCQkJaWYgKCpmbGFzaCsrICE9IDB4ZmZmZmZmZmYpIHsKKwkJCQllcmFzZWQgPSAwOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJLyogcHJpbnQgZW1wdHkgYW5kIHJlYWQtb25seSBpbmZvICovCisJCXByaW50ZiAoIiAgJTA4bFggJWMgJXMgIiwKKwkJCWluZm8tPnN0YXJ0W2ldLAorCQkJZXJhc2VkID8gJ0UnIDogJyAnLAorCQkJaW5mby0+cHJvdGVjdFtpXSA/ICJSTyIgOiAiICAiKTsKKyNlbHNlCS8qICEgQ0ZHX0ZMQVNIX0VNUFRZX0lORk8gKi8KKwkJcHJpbnRmICgiICAlMDhsWCAgICVzICIsCisJCQlpbmZvLT5zdGFydFtpXSwKKwkJCWluZm8tPnByb3RlY3RbaV0gPyAiUk8iIDogIiAgIik7CisjZW5kaWYKKwl9CisJcHV0YyAoJ1xuJyk7CisJcmV0dXJuOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBDb3B5IG1lbW9yeSB0byBmbGFzaCwgcmV0dXJuczoKKyAqIDAgLSBPSworICogMSAtIHdyaXRlIHRpbWVvdXQKKyAqIDIgLSBGbGFzaCBub3QgZXJhc2VkCisgKi8KK2ludCB3cml0ZV9idWZmIChmbGFzaF9pbmZvX3QgKiBpbmZvLCB1Y2hhciAqIHNyYywgdWxvbmcgYWRkciwgdWxvbmcgY250KQoreworCXVsb25nIHdwOworCXVjaGFyICpwOworCWludCBhbG47CisJY2Zpd29yZF90IGN3b3JkOworCWludCBpLCByYzsKKworI2lmZGVmIENGR19GTEFTSF9VU0VfQlVGRkVSX1dSSVRFCisJaW50IGJ1ZmZlcmVkX3NpemU7CisjZW5kaWYKKwkvKiBnZXQgbG93ZXIgYWxpZ25lZCBhZGRyZXNzICovCisJd3AgPSAoYWRkciAmIH4oaW5mby0+cG9ydHdpZHRoIC0gMSkpOworCisJLyogaGFuZGxlIHVuYWxpZ25lZCBzdGFydCAqLworCWlmICgoYWxuID0gYWRkciAtIHdwKSAhPSAwKSB7CisJCWN3b3JkLmwgPSAwOworCQlwID0gbWFwX3BoeXNtZW0od3AsIGluZm8tPnBvcnR3aWR0aCwgTUFQX05PQ0FDSEUpOworCQlmb3IgKGkgPSAwOyBpIDwgYWxuOyArK2kpCisJCQlmbGFzaF9hZGRfYnl0ZSAoaW5mbywgJmN3b3JkLCBmbGFzaF9yZWFkOChwICsgaSkpOworCisJCWZvciAoOyAoaSA8IGluZm8tPnBvcnR3aWR0aCkgJiYgKGNudCA+IDApOyBpKyspIHsKKwkJCWZsYXNoX2FkZF9ieXRlIChpbmZvLCAmY3dvcmQsICpzcmMrKyk7CisJCQljbnQtLTsKKwkJfQorCQlmb3IgKDsgKGNudCA9PSAwKSAmJiAoaSA8IGluZm8tPnBvcnR3aWR0aCk7ICsraSkKKwkJCWZsYXNoX2FkZF9ieXRlIChpbmZvLCAmY3dvcmQsIGZsYXNoX3JlYWQ4KHAgKyBpKSk7CisKKwkJcmMgPSBmbGFzaF93cml0ZV9jZml3b3JkIChpbmZvLCB3cCwgY3dvcmQpOworCQl1bm1hcF9waHlzbWVtKHAsIGluZm8tPnBvcnR3aWR0aCk7CisJCWlmIChyYyAhPSAwKQorCQkJcmV0dXJuIHJjOworCisJCXdwICs9IGk7CisJfQorCisJLyogaGFuZGxlIHRoZSBhbGlnbmVkIHBhcnQgKi8KKyNpZmRlZiBDRkdfRkxBU0hfVVNFX0JVRkZFUl9XUklURQorCWJ1ZmZlcmVkX3NpemUgPSAoaW5mby0+cG9ydHdpZHRoIC8gaW5mby0+Y2hpcHdpZHRoKTsKKwlidWZmZXJlZF9zaXplICo9IGluZm8tPmJ1ZmZlcl9zaXplOworCXdoaWxlIChjbnQgPj0gaW5mby0+cG9ydHdpZHRoKSB7CisJCS8qIHByb2hpYml0IGJ1ZmZlciB3cml0ZSB3aGVuIGJ1ZmZlcl9zaXplIGlzIDEgKi8KKwkJaWYgKGluZm8tPmJ1ZmZlcl9zaXplID09IDEpIHsKKwkJCWN3b3JkLmwgPSAwOworCQkJZm9yIChpID0gMDsgaSA8IGluZm8tPnBvcnR3aWR0aDsgaSsrKQorCQkJCWZsYXNoX2FkZF9ieXRlIChpbmZvLCAmY3dvcmQsICpzcmMrKyk7CisJCQlpZiAoKHJjID0gZmxhc2hfd3JpdGVfY2Zpd29yZCAoaW5mbywgd3AsIGN3b3JkKSkgIT0gMCkKKwkJCQlyZXR1cm4gcmM7CisJCQl3cCArPSBpbmZvLT5wb3J0d2lkdGg7CisJCQljbnQgLT0gaW5mby0+cG9ydHdpZHRoOworCQkJY29udGludWU7CisJCX0KKworCQkvKiB3cml0ZSBidWZmZXIgdW50aWwgbmV4dCBidWZmZXJlZF9zaXplIGFsaWduZWQgYm91bmRhcnkgKi8KKwkJaSA9IGJ1ZmZlcmVkX3NpemUgLSAod3AgJSBidWZmZXJlZF9zaXplKTsKKwkJaWYgKGkgPiBjbnQpCisJCQlpID0gY250OworCQlpZiAoKHJjID0gZmxhc2hfd3JpdGVfY2ZpYnVmZmVyIChpbmZvLCB3cCwgc3JjLCBpKSkgIT0gRVJSX09LKQorCQkJcmV0dXJuIHJjOworCQlpIC09IGkgJiAoaW5mby0+cG9ydHdpZHRoIC0gMSk7CisJCXdwICs9IGk7CisJCXNyYyArPSBpOworCQljbnQgLT0gaTsKKwl9CisjZWxzZQorCXdoaWxlIChjbnQgPj0gaW5mby0+cG9ydHdpZHRoKSB7CisJCWN3b3JkLmwgPSAwOworCQlmb3IgKGkgPSAwOyBpIDwgaW5mby0+cG9ydHdpZHRoOyBpKyspIHsKKwkJCWZsYXNoX2FkZF9ieXRlIChpbmZvLCAmY3dvcmQsICpzcmMrKyk7CisJCX0KKwkJaWYgKChyYyA9IGZsYXNoX3dyaXRlX2NmaXdvcmQgKGluZm8sIHdwLCBjd29yZCkpICE9IDApCisJCQlyZXR1cm4gcmM7CisJCXdwICs9IGluZm8tPnBvcnR3aWR0aDsKKwkJY250IC09IGluZm8tPnBvcnR3aWR0aDsKKwl9CisjZW5kaWYgLyogQ0ZHX0ZMQVNIX1VTRV9CVUZGRVJfV1JJVEUgKi8KKwlpZiAoY250ID09IDApIHsKKwkJcmV0dXJuICgwKTsKKwl9CisKKwkvKgorCSAqIGhhbmRsZSB1bmFsaWduZWQgdGFpbCBieXRlcworCSAqLworCWN3b3JkLmwgPSAwOworCXAgPSBtYXBfcGh5c21lbSh3cCwgaW5mby0+cG9ydHdpZHRoLCBNQVBfTk9DQUNIRSk7CisJZm9yIChpID0gMDsgKGkgPCBpbmZvLT5wb3J0d2lkdGgpICYmIChjbnQgPiAwKTsgKytpKSB7CisJCWZsYXNoX2FkZF9ieXRlIChpbmZvLCAmY3dvcmQsICpzcmMrKyk7CisJCS0tY250OworCX0KKwlmb3IgKDsgaSA8IGluZm8tPnBvcnR3aWR0aDsgKytpKQorCQlmbGFzaF9hZGRfYnl0ZSAoaW5mbywgJmN3b3JkLCBmbGFzaF9yZWFkOChwICsgaSkpOworCXVubWFwX3BoeXNtZW0ocCwgaW5mby0+cG9ydHdpZHRoKTsKKworCXJldHVybiBmbGFzaF93cml0ZV9jZml3b3JkIChpbmZvLCB3cCwgY3dvcmQpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZmRlZiBDRkdfRkxBU0hfUFJPVEVDVElPTgorCitpbnQgZmxhc2hfcmVhbF9wcm90ZWN0IChmbGFzaF9pbmZvX3QgKiBpbmZvLCBsb25nIHNlY3RvciwgaW50IHByb3QpCit7CisJaW50IHJldGNvZGUgPSAwOworCisJZmxhc2hfd3JpdGVfY21kIChpbmZvLCBzZWN0b3IsIDAsIEZMQVNIX0NNRF9DTEVBUl9TVEFUVVMpOworCWZsYXNoX3dyaXRlX2NtZCAoaW5mbywgc2VjdG9yLCAwLCBGTEFTSF9DTURfUFJPVEVDVCk7CisJaWYgKHByb3QpCisJCWZsYXNoX3dyaXRlX2NtZCAoaW5mbywgc2VjdG9yLCAwLCBGTEFTSF9DTURfUFJPVEVDVF9TRVQpOworCWVsc2UKKwkJZmxhc2hfd3JpdGVfY21kIChpbmZvLCBzZWN0b3IsIDAsIEZMQVNIX0NNRF9QUk9URUNUX0NMRUFSKTsKKworCWlmICgocmV0Y29kZSA9CisJICAgICBmbGFzaF9mdWxsX3N0YXR1c19jaGVjayAoaW5mbywgc2VjdG9yLCBpbmZvLT5lcmFzZV9ibGtfdG91dCwKKwkJCQkgICAgICBwcm90ID8gInByb3RlY3QiIDogInVucHJvdGVjdCIpKSA9PSAwKSB7CisKKwkJaW5mby0+cHJvdGVjdFtzZWN0b3JdID0gcHJvdDsKKworCQkvKgorCQkgKiBPbiBzb21lIG9mIEludGVsJ3MgZmxhc2ggY2hpcHMgKG1hcmtlZCB2aWEgbGVnYWN5X3VubG9jaykKKwkJICogdW5wcm90ZWN0IHVucHJvdGVjdHMgYWxsIGxvY2tpbmcuCisJCSAqLworCQlpZiAoKHByb3QgPT0gMCkgJiYgKGluZm8tPmxlZ2FjeV91bmxvY2spKSB7CisJCQlmbGFzaF9zZWN0X3QgaTsKKworCQkJZm9yIChpID0gMDsgaSA8IGluZm8tPnNlY3Rvcl9jb3VudDsgaSsrKSB7CisJCQkJaWYgKGluZm8tPnByb3RlY3RbaV0pCisJCQkJCWZsYXNoX3JlYWxfcHJvdGVjdCAoaW5mbywgaSwgMSk7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIHJldGNvZGU7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIGZsYXNoX3JlYWRfdXNlcl9zZXJpYWwgLSByZWFkIHRoZSBPbmVUaW1lUHJvZ3JhbW1pbmcgY2VsbHMKKyAqLwordm9pZCBmbGFzaF9yZWFkX3VzZXJfc2VyaWFsIChmbGFzaF9pbmZvX3QgKiBpbmZvLCB2b2lkICpidWZmZXIsIGludCBvZmZzZXQsCisJCQkgICAgIGludCBsZW4pCit7CisJdWNoYXIgKnNyYzsKKwl1Y2hhciAqZHN0OworCisJZHN0ID0gYnVmZmVyOworCXNyYyA9IGZsYXNoX21hcCAoaW5mbywgMCwgRkxBU0hfT0ZGU0VUX1VTRVJfUFJPVEVDVElPTik7CisJZmxhc2hfd3JpdGVfY21kIChpbmZvLCAwLCAwLCBGTEFTSF9DTURfUkVBRF9JRCk7CisJbWVtY3B5IChkc3QsIHNyYyArIG9mZnNldCwgbGVuKTsKKwlmbGFzaF93cml0ZV9jbWQgKGluZm8sIDAsIDAsIGluZm8tPmNtZF9yZXNldCk7CisJZmxhc2hfdW5tYXAoaW5mbywgMCwgRkxBU0hfT0ZGU0VUX1VTRVJfUFJPVEVDVElPTiwgc3JjKTsKIH0KIAogLyoKLSAqIFdyaXRlIGEgcHJvcGVyIHNpemVkIGNvbW1hbmQgdG8gdGhlIGNvcnJlY3QgYWRkcmVzcworICogZmxhc2hfcmVhZF9mYWN0b3J5X3NlcmlhbCAtIHJlYWQgdGhlIGRldmljZSBJZCBmcm9tIHRoZSBwcm90ZWN0aW9uIGFyZWEKICAqLwotc3RhdGljIHZvaWQgZmxhc2hfd3JpdGVfY21kIChmbGFzaF9pbmZvX3QgKiBpbmZvLCBmbGFzaF9zZWN0X3Qgc2VjdCwgdWludCBvZmZzZXQsIHVjaGFyIGNtZCkKK3ZvaWQgZmxhc2hfcmVhZF9mYWN0b3J5X3NlcmlhbCAoZmxhc2hfaW5mb190ICogaW5mbywgdm9pZCAqYnVmZmVyLCBpbnQgb2Zmc2V0LAorCQkJCWludCBsZW4pCiB7CisJdWNoYXIgKnNyYzsKIAotCXZvbGF0aWxlIGNmaXB0cl90IGFkZHI7Ci0JY2Zpd29yZF90IGN3b3JkOwotCi0JYWRkci5jcCA9IGZsYXNoX21ha2VfYWRkciAoaW5mbywgc2VjdCwgb2Zmc2V0KTsKLQlmbGFzaF9tYWtlX2NtZCAoaW5mbywgY21kLCAmY3dvcmQpOwotCXN3aXRjaCAoaW5mby0+cG9ydHdpZHRoKSB7Ci0JY2FzZSBGTEFTSF9DRklfOEJJVDoKLQkJZGVidWcgKCJmd2MgYWRkciAlcCBjbWQgJXggJXggOGJpdCB4ICVkIGJpdFxuIiwgYWRkci5jcCwgY21kLAotCQkgICAgICAgY3dvcmQuYywgaW5mby0+Y2hpcHdpZHRoIDw8IENGSV9GTEFTSF9TSElGVF9XSURUSCk7Ci0JCSphZGRyLmNwID0gY3dvcmQuYzsKLQkJYnJlYWs7Ci0JY2FzZSBGTEFTSF9DRklfMTZCSVQ6Ci0JCWRlYnVnICgiZndjIGFkZHIgJXAgY21kICV4ICU0LjR4IDE2Yml0IHggJWQgYml0XG4iLCBhZGRyLndwLAotCQkgICAgICAgY21kLCBjd29yZC53LAotCQkgICAgICAgaW5mby0+Y2hpcHdpZHRoIDw8IENGSV9GTEFTSF9TSElGVF9XSURUSCk7Ci0JCSphZGRyLndwID0gY3dvcmQudzsKLQkJYnJlYWs7Ci0JY2FzZSBGTEFTSF9DRklfMzJCSVQ6Ci0JCWRlYnVnICgiZndjIGFkZHIgJXAgY21kICV4ICU4LjhseCAzMmJpdCB4ICVkIGJpdFxuIiwgYWRkci5scCwKLQkJICAgICAgIGNtZCwgY3dvcmQubCwKLQkJICAgICAgIGluZm8tPmNoaXB3aWR0aCA8PCBDRklfRkxBU0hfU0hJRlRfV0lEVEgpOwotCQkqYWRkci5scCA9IGN3b3JkLmw7Ci0JCWJyZWFrOwotCWNhc2UgRkxBU0hfQ0ZJXzY0QklUOgotI2lmZGVmIERFQlVHCi0JCXsKLQkJCWNoYXIgc3RyWzIwXTsKLQotCQkJcHJpbnRfbG9uZ2xvbmcgKHN0ciwgY3dvcmQubGwpOwotCi0JCQlkZWJ1ZyAoImZ3cml0ZSBhZGRyICVwIGNtZCAleCAlcyA2NCBiaXQgeCAlZCBiaXRcbiIsCi0JCQkgICAgICAgYWRkci5sbHAsIGNtZCwgc3RyLAotCQkJICAgICAgIGluZm8tPmNoaXB3aWR0aCA8PCBDRklfRkxBU0hfU0hJRlRfV0lEVEgpOwotCQl9Ci0jZW5kaWYKLQkJKmFkZHIubGxwID0gY3dvcmQubGw7Ci0JCWJyZWFrOwotCX0KLQotCS8qIEVuc3VyZSBhbGwgdGhlIGluc3RydWN0aW9ucyBhcmUgZnVsbHkgZmluaXNoZWQgKi8KLQlzeW5jKCk7CisJc3JjID0gZmxhc2hfbWFwIChpbmZvLCAwLCBGTEFTSF9PRkZTRVRfSU5URUxfUFJPVEVDVElPTik7CisJZmxhc2hfd3JpdGVfY21kIChpbmZvLCAwLCAwLCBGTEFTSF9DTURfUkVBRF9JRCk7CisJbWVtY3B5IChidWZmZXIsIHNyYyArIG9mZnNldCwgbGVuKTsKKwlmbGFzaF93cml0ZV9jbWQgKGluZm8sIDAsIDAsIGluZm8tPmNtZF9yZXNldCk7CisJZmxhc2hfdW5tYXAoaW5mbywgMCwgRkxBU0hfT0ZGU0VUX0lOVEVMX1BST1RFQ1RJT04sIHNyYyk7CiB9CiAKLXN0YXRpYyB2b2lkIGZsYXNoX3VubG9ja19zZXEgKGZsYXNoX2luZm9fdCAqIGluZm8sIGZsYXNoX3NlY3RfdCBzZWN0KQotewotCWZsYXNoX3dyaXRlX2NtZCAoaW5mbywgc2VjdCwgQU1EX0FERFJfU1RBUlQsIEFNRF9DTURfVU5MT0NLX1NUQVJUKTsKLQlmbGFzaF93cml0ZV9jbWQgKGluZm8sIHNlY3QsIEFNRF9BRERSX0FDSywgQU1EX0NNRF9VTkxPQ0tfQUNLKTsKLX0KKyNlbmRpZiAvKiBDRkdfRkxBU0hfUFJPVEVDVElPTiAqLwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBSZXZlcnNlIHRoZSBvcmRlciBvZiB0aGUgZXJhc2UgcmVnaW9ucyBpbiB0aGUgQ0ZJIFFSWSBzdHJ1Y3R1cmUuCisgKiBUaGlzIGlzIG5lZWRlZCBmb3IgY2hpcHMgdGhhdCBhcmUgZWl0aGVyIGEpIGNvcnJlY3RseSBkZXRlY3RlZCBhcworICogdG9wLWJvb3QsIG9yIGIpIGJ1Z2d5LgogICovCi1zdGF0aWMgaW50IGZsYXNoX2lzZXF1YWwgKGZsYXNoX2luZm9fdCAqIGluZm8sIGZsYXNoX3NlY3RfdCBzZWN0LCB1aW50IG9mZnNldCwgdWNoYXIgY21kKQorc3RhdGljIHZvaWQgY2ZpX3JldmVyc2VfZ2VvbWV0cnkoc3RydWN0IGNmaV9xcnkgKnFyeSkKIHsKLQljZmlwdHJfdCBjcHRyOwotCWNmaXdvcmRfdCBjd29yZDsKLQlpbnQgcmV0dmFsOworCXVuc2lnbmVkIGludCBpLCBqOworCXUzMiB0bXA7CiAKLQljcHRyLmNwID0gZmxhc2hfbWFrZV9hZGRyIChpbmZvLCBzZWN0LCBvZmZzZXQpOwotCWZsYXNoX21ha2VfY21kIChpbmZvLCBjbWQsICZjd29yZCk7Ci0KLQlkZWJ1ZyAoImlzPSBjbWQgJXgoJWMpIGFkZHIgJXAgIiwgY21kLCBjbWQsIGNwdHIuY3ApOwotCXN3aXRjaCAoaW5mby0+cG9ydHdpZHRoKSB7Ci0JY2FzZSBGTEFTSF9DRklfOEJJVDoKLQkJZGVidWcgKCJpcz0gJXggJXhcbiIsIGNwdHIuY3BbMF0sIGN3b3JkLmMpOwotCQlyZXR2YWwgPSAoY3B0ci5jcFswXSA9PSBjd29yZC5jKTsKLQkJYnJlYWs7Ci0JY2FzZSBGTEFTSF9DRklfMTZCSVQ6Ci0JCWRlYnVnICgiaXM9ICU0LjR4ICU0LjR4XG4iLCBjcHRyLndwWzBdLCBjd29yZC53KTsKLQkJcmV0dmFsID0gKGNwdHIud3BbMF0gPT0gY3dvcmQudyk7Ci0JCWJyZWFrOwotCWNhc2UgRkxBU0hfQ0ZJXzMyQklUOgotCQlkZWJ1ZyAoImlzPSAlOC44bHggJTguOGx4XG4iLCBjcHRyLmxwWzBdLCBjd29yZC5sKTsKLQkJcmV0dmFsID0gKGNwdHIubHBbMF0gPT0gY3dvcmQubCk7Ci0JCWJyZWFrOwotCWNhc2UgRkxBU0hfQ0ZJXzY0QklUOgotI2lmZGVmIERFQlVHCi0JCXsKLQkJCWNoYXIgc3RyMVsyMF07Ci0JCQljaGFyIHN0cjJbMjBdOwotCi0JCQlwcmludF9sb25nbG9uZyAoc3RyMSwgY3B0ci5sbHBbMF0pOwotCQkJcHJpbnRfbG9uZ2xvbmcgKHN0cjIsIGN3b3JkLmxsKTsKLQkJCWRlYnVnICgiaXM9ICVzICVzXG4iLCBzdHIxLCBzdHIyKTsKLQkJfQotI2VuZGlmCi0JCXJldHZhbCA9IChjcHRyLmxscFswXSA9PSBjd29yZC5sbCk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHZhbCA9IDA7Ci0JCWJyZWFrOworCWZvciAoaSA9IDAsIGogPSBxcnktPm51bV9lcmFzZV9yZWdpb25zIC0gMTsgaSA8IGo7IGkrKywgai0tKSB7CisJCXRtcCA9IHFyeS0+ZXJhc2VfcmVnaW9uX2luZm9baV07CisJCXFyeS0+ZXJhc2VfcmVnaW9uX2luZm9baV0gPSBxcnktPmVyYXNlX3JlZ2lvbl9pbmZvW2pdOworCQlxcnktPmVyYXNlX3JlZ2lvbl9pbmZvW2pdID0gdG1wOwogCX0KLQlyZXR1cm4gcmV0dmFsOwotfQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLXN0YXRpYyBpbnQgZmxhc2hfaXNzZXQgKGZsYXNoX2luZm9fdCAqIGluZm8sIGZsYXNoX3NlY3RfdCBzZWN0LCB1aW50IG9mZnNldCwgdWNoYXIgY21kKQotewotCWNmaXB0cl90IGNwdHI7Ci0JY2Zpd29yZF90IGN3b3JkOwotCWludCByZXR2YWw7Ci0KLQljcHRyLmNwID0gZmxhc2hfbWFrZV9hZGRyIChpbmZvLCBzZWN0LCBvZmZzZXQpOwotCWZsYXNoX21ha2VfY21kIChpbmZvLCBjbWQsICZjd29yZCk7Ci0Jc3dpdGNoIChpbmZvLT5wb3J0d2lkdGgpIHsKLQljYXNlIEZMQVNIX0NGSV84QklUOgotCQlyZXR2YWwgPSAoKGNwdHIuY3BbMF0gJiBjd29yZC5jKSA9PSBjd29yZC5jKTsKLQkJYnJlYWs7Ci0JY2FzZSBGTEFTSF9DRklfMTZCSVQ6Ci0JCXJldHZhbCA9ICgoY3B0ci53cFswXSAmIGN3b3JkLncpID09IGN3b3JkLncpOwotCQlicmVhazsKLQljYXNlIEZMQVNIX0NGSV8zMkJJVDoKLQkJcmV0dmFsID0gKChjcHRyLmxwWzBdICYgY3dvcmQubCkgPT0gY3dvcmQubCk7Ci0JCWJyZWFrOwotCWNhc2UgRkxBU0hfQ0ZJXzY0QklUOgotCQlyZXR2YWwgPSAoKGNwdHIubGxwWzBdICYgY3dvcmQubGwpID09IGN3b3JkLmxsKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dmFsID0gMDsKLQkJYnJlYWs7Ci0JfQotCXJldHVybiByZXR2YWw7Ci19Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotc3RhdGljIGludCBmbGFzaF90b2dnbGUgKGZsYXNoX2luZm9fdCAqIGluZm8sIGZsYXNoX3NlY3RfdCBzZWN0LCB1aW50IG9mZnNldCwgdWNoYXIgY21kKQotewotCWNmaXB0cl90IGNwdHI7Ci0JY2Zpd29yZF90IGN3b3JkOwotCWludCByZXR2YWw7Ci0KLQljcHRyLmNwID0gZmxhc2hfbWFrZV9hZGRyIChpbmZvLCBzZWN0LCBvZmZzZXQpOwotCWZsYXNoX21ha2VfY21kIChpbmZvLCBjbWQsICZjd29yZCk7Ci0Jc3dpdGNoIChpbmZvLT5wb3J0d2lkdGgpIHsKLQljYXNlIEZMQVNIX0NGSV84QklUOgotCQlyZXR2YWwgPSAoKGNwdHIuY3BbMF0gJiBjd29yZC5jKSAhPSAoY3B0ci5jcFswXSAmIGN3b3JkLmMpKTsKLQkJYnJlYWs7Ci0JY2FzZSBGTEFTSF9DRklfMTZCSVQ6Ci0JCXJldHZhbCA9ICgoY3B0ci53cFswXSAmIGN3b3JkLncpICE9IChjcHRyLndwWzBdICYgY3dvcmQudykpOwotCQlicmVhazsKLQljYXNlIEZMQVNIX0NGSV8zMkJJVDoKLQkJcmV0dmFsID0gKChjcHRyLmxwWzBdICYgY3dvcmQubCkgIT0gKGNwdHIubHBbMF0gJiBjd29yZC5sKSk7Ci0JCWJyZWFrOwotCWNhc2UgRkxBU0hfQ0ZJXzY0QklUOgotCQlyZXR2YWwgPSAoKGNwdHIubGxwWzBdICYgY3dvcmQubGwpICE9Ci0JCQkgIChjcHRyLmxscFswXSAmIGN3b3JkLmxsKSk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHZhbCA9IDA7Ci0JCWJyZWFrOwotCX0KLQlyZXR1cm4gcmV0dmFsOwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xMDgyLDcgKzEzMjQsNjkgQEAKICAqCiAgKiBOb3RlOiBhc3N1bWUgY2ZpLT52ZW5kb3IsIGNmaS0+cG9ydHdpZHRoIGFuZCBjZmktPmNoaXB3aWR0aCBhcmUgY29ycmVjdAogICoKLSovCisgKi8KK3N0YXRpYyB2b2lkIGNtZHNldF9pbnRlbF9yZWFkX2plZGVjX2lkcyhmbGFzaF9pbmZvX3QgKmluZm8pCit7CisJZmxhc2hfd3JpdGVfY21kKGluZm8sIDAsIDAsIEZMQVNIX0NNRF9SRVNFVCk7CisJZmxhc2hfd3JpdGVfY21kKGluZm8sIDAsIDAsIEZMQVNIX0NNRF9SRUFEX0lEKTsKKwl1ZGVsYXkoMTAwMCk7IC8qIHNvbWUgZmxhc2ggYXJlIHNsb3cgdG8gcmVzcG9uZCAqLworCWluZm8tPm1hbnVmYWN0dXJlcl9pZCA9IGZsYXNoX3JlYWRfdWNoYXIgKGluZm8sCisJCQkJCUZMQVNIX09GRlNFVF9NQU5VRkFDVFVSRVJfSUQpOworCWluZm8tPmRldmljZV9pZCA9IGZsYXNoX3JlYWRfdWNoYXIgKGluZm8sCisJCQkJCUZMQVNIX09GRlNFVF9ERVZJQ0VfSUQpOworCWZsYXNoX3dyaXRlX2NtZChpbmZvLCAwLCAwLCBGTEFTSF9DTURfUkVTRVQpOworfQorCitzdGF0aWMgaW50IGNtZHNldF9pbnRlbF9pbml0KGZsYXNoX2luZm9fdCAqaW5mbywgc3RydWN0IGNmaV9xcnkgKnFyeSkKK3sKKwlpbmZvLT5jbWRfcmVzZXQgPSBGTEFTSF9DTURfUkVTRVQ7CisKKwljbWRzZXRfaW50ZWxfcmVhZF9qZWRlY19pZHMoaW5mbyk7CisJZmxhc2hfd3JpdGVfY21kKGluZm8sIDAsIGluZm8tPmNmaV9vZmZzZXQsIEZMQVNIX0NNRF9DRkkpOworCisjaWZkZWYgQ0ZHX0ZMQVNIX1BST1RFQ1RJT04KKwkvKiByZWFkIGxlZ2FjeSBsb2NrL3VubG9jayBiaXQgZnJvbSBpbnRlbCBmbGFzaCAqLworCWlmIChpbmZvLT5leHRfYWRkcikgeworCQlpbmZvLT5sZWdhY3lfdW5sb2NrID0gZmxhc2hfcmVhZF91Y2hhciAoaW5mbywKKwkJCQlpbmZvLT5leHRfYWRkciArIDUpICYgMHgwODsKKwl9CisjZW5kaWYKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjbWRzZXRfYW1kX3JlYWRfamVkZWNfaWRzKGZsYXNoX2luZm9fdCAqaW5mbykKK3sKKwlmbGFzaF93cml0ZV9jbWQoaW5mbywgMCwgMCwgQU1EX0NNRF9SRVNFVCk7CisJZmxhc2hfdW5sb2NrX3NlcShpbmZvLCAwKTsKKwlmbGFzaF93cml0ZV9jbWQoaW5mbywgMCwgaW5mby0+YWRkcl91bmxvY2sxLCBGTEFTSF9DTURfUkVBRF9JRCk7CisJdWRlbGF5KDEwMDApOyAvKiBzb21lIGZsYXNoIGFyZSBzbG93IHRvIHJlc3BvbmQgKi8KKwlpbmZvLT5tYW51ZmFjdHVyZXJfaWQgPSBmbGFzaF9yZWFkX3VjaGFyIChpbmZvLAorCQkJCQlGTEFTSF9PRkZTRVRfTUFOVUZBQ1RVUkVSX0lEKTsKKwlpbmZvLT5kZXZpY2VfaWQgPSBmbGFzaF9yZWFkX3VjaGFyIChpbmZvLAorCQkJCQlGTEFTSF9PRkZTRVRfREVWSUNFX0lEKTsKKwlpZiAoaW5mby0+ZGV2aWNlX2lkID09IDB4N0UpIHsKKwkJLyogQU1EIDMtYnl0ZSAoZXhwYW5kZWQpIGRldmljZSBpZHMgKi8KKwkJaW5mby0+ZGV2aWNlX2lkMiA9IGZsYXNoX3JlYWRfdWNoYXIgKGluZm8sCisJCQkJCUZMQVNIX09GRlNFVF9ERVZJQ0VfSUQyKTsKKwkJaW5mby0+ZGV2aWNlX2lkMiA8PD0gODsKKwkJaW5mby0+ZGV2aWNlX2lkMiB8PSBmbGFzaF9yZWFkX3VjaGFyIChpbmZvLAorCQkJCQlGTEFTSF9PRkZTRVRfREVWSUNFX0lEMyk7CisJfQorCWZsYXNoX3dyaXRlX2NtZChpbmZvLCAwLCAwLCBBTURfQ01EX1JFU0VUKTsKK30KKworc3RhdGljIGludCBjbWRzZXRfYW1kX2luaXQoZmxhc2hfaW5mb190ICppbmZvLCBzdHJ1Y3QgY2ZpX3FyeSAqcXJ5KQoreworCWluZm8tPmNtZF9yZXNldCA9IEFNRF9DTURfUkVTRVQ7CisKKwljbWRzZXRfYW1kX3JlYWRfamVkZWNfaWRzKGluZm8pOworCWZsYXNoX3dyaXRlX2NtZChpbmZvLCAwLCBpbmZvLT5jZmlfb2Zmc2V0LCBGTEFTSF9DTURfQ0ZJKTsKKworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX0ZMQVNIX0NGSV9MRUdBQ1kKIHN0YXRpYyB2b2lkIGZsYXNoX3JlYWRfamVkZWNfaWRzIChmbGFzaF9pbmZvX3QgKiBpbmZvKQogewogCWluZm8tPm1hbnVmYWN0dXJlcl9pZCA9IDA7CkBAIC0xMDkyLDM0ICsxMzk2LDExIEBACiAJc3dpdGNoIChpbmZvLT52ZW5kb3IpIHsKIAljYXNlIENGSV9DTURTRVRfSU5URUxfU1RBTkRBUkQ6CiAJY2FzZSBDRklfQ01EU0VUX0lOVEVMX0VYVEVOREVEOgotCQlmbGFzaF93cml0ZV9jbWQoaW5mbywgMCwgMCwgRkxBU0hfQ01EX1JFU0VUKTsKLQkJZmxhc2hfd3JpdGVfY21kKGluZm8sIDAsIDAsIEZMQVNIX0NNRF9SRUFEX0lEKTsKLQkJdWRlbGF5KDEwMDApOyAvKiBzb21lIGZsYXNoIGFyZSBzbG93IHRvIHJlc3BvbmQgKi8KLQkJaW5mby0+bWFudWZhY3R1cmVyX2lkID0gZmxhc2hfcmVhZF91Y2hhciAoaW5mbywKLQkJCQkJCUZMQVNIX09GRlNFVF9NQU5VRkFDVFVSRVJfSUQpOwotCQlpbmZvLT5kZXZpY2VfaWQgPSBmbGFzaF9yZWFkX3VjaGFyIChpbmZvLAotCQkJCQkJRkxBU0hfT0ZGU0VUX0RFVklDRV9JRCk7Ci0JCWZsYXNoX3dyaXRlX2NtZChpbmZvLCAwLCAwLCBGTEFTSF9DTURfUkVTRVQpOworCQlmbGFzaF9yZWFkX2plZGVjX2lkc19pbnRlbChpbmZvKTsKIAkJYnJlYWs7CiAJY2FzZSBDRklfQ01EU0VUX0FNRF9TVEFOREFSRDoKIAljYXNlIENGSV9DTURTRVRfQU1EX0VYVEVOREVEOgotCQlmbGFzaF93cml0ZV9jbWQoaW5mbywgMCwgMCwgQU1EX0NNRF9SRVNFVCk7Ci0JCWZsYXNoX3VubG9ja19zZXEoaW5mbywgMCk7Ci0JCWZsYXNoX3dyaXRlX2NtZChpbmZvLCAwLCBBTURfQUREUl9TVEFSVCwgRkxBU0hfQ01EX1JFQURfSUQpOwotCQl1ZGVsYXkoMTAwMCk7IC8qIHNvbWUgZmxhc2ggYXJlIHNsb3cgdG8gcmVzcG9uZCAqLwotCQlpbmZvLT5tYW51ZmFjdHVyZXJfaWQgPSBmbGFzaF9yZWFkX3VjaGFyIChpbmZvLAotCQkJCQkJRkxBU0hfT0ZGU0VUX01BTlVGQUNUVVJFUl9JRCk7Ci0JCWluZm8tPmRldmljZV9pZCA9IGZsYXNoX3JlYWRfdWNoYXIgKGluZm8sCi0JCQkJCQlGTEFTSF9PRkZTRVRfREVWSUNFX0lEKTsKLQkJaWYgKGluZm8tPmRldmljZV9pZCA9PSAweDdFKSB7Ci0JCQkvKiBBTUQgMy1ieXRlIChleHBhbmRlZCkgZGV2aWNlIGlkcyAqLwotCQkJaW5mby0+ZGV2aWNlX2lkMiA9IGZsYXNoX3JlYWRfdWNoYXIgKGluZm8sCi0JCQkJCQlGTEFTSF9PRkZTRVRfREVWSUNFX0lEMik7Ci0JCQlpbmZvLT5kZXZpY2VfaWQyIDw8PSA4OwotCQkJaW5mby0+ZGV2aWNlX2lkMiB8PSBmbGFzaF9yZWFkX3VjaGFyIChpbmZvLAotCQkJCQkJRkxBU0hfT0ZGU0VUX0RFVklDRV9JRDMpOwotCQl9Ci0JCWZsYXNoX3dyaXRlX2NtZChpbmZvLCAwLCAwLCBBTURfQ01EX1JFU0VUKTsKKwkJZmxhc2hfcmVhZF9qZWRlY19pZHNfYW1kKGluZm8pOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKQEAgLTExMjcsNDUgKzE0MDgsMTk1IEBACiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIENhbGwgYm9hcmQgY29kZSB0byByZXF1ZXN0IGluZm8gYWJvdXQgbm9uLUNGSSBmbGFzaC4KKyAqIGJvYXJkX2ZsYXNoX2dldF9sZWdhY3kgbmVlZHMgdG8gZmlsbCBpbiBhdCBsZWFzdDoKKyAqIGluZm8tPnBvcnR3aWR0aCwgaW5mby0+Y2hpcHdpZHRoIGFuZCBpbmZvLT5pbnRlcmZhY2UgZm9yIEplZGVjIHByb2JpbmcuCisgKi8KK3N0YXRpYyBpbnQgZmxhc2hfZGV0ZWN0X2xlZ2FjeSh1bG9uZyBiYXNlLCBpbnQgYmFua251bSkKK3sKKwlmbGFzaF9pbmZvX3QgKmluZm8gPSAmZmxhc2hfaW5mb1tiYW5rbnVtXTsKKworCWlmIChib2FyZF9mbGFzaF9nZXRfbGVnYWN5KGJhc2UsIGJhbmtudW0sIGluZm8pKSB7CisJCS8qIGJvYXJkIGNvZGUgbWF5IGhhdmUgZmlsbGVkIGluZm8gY29tcGxldGVseS4gSWYgbm90LCB3ZQorCQkgICB1c2UgSkVERUMgSUQgcHJvYmluZy4gKi8KKwkJaWYgKCFpbmZvLT52ZW5kb3IpIHsKKwkJCWludCBtb2Rlc1tdID0geworCQkJCUNGSV9DTURTRVRfQU1EX1NUQU5EQVJELAorCQkJCUNGSV9DTURTRVRfSU5URUxfU1RBTkRBUkQKKwkJCX07CisJCQlpbnQgaTsKKworCQkJZm9yIChpID0gMDsgaSA8IHNpemVvZihtb2RlcykgLyBzaXplb2YobW9kZXNbMF0pOyBpKyspIHsKKwkJCQlpbmZvLT52ZW5kb3IgPSBtb2Rlc1tpXTsKKwkJCQlpbmZvLT5zdGFydFswXSA9IGJhc2U7CisJCQkJaWYgKGluZm8tPnBvcnR3aWR0aCA9PSBGTEFTSF9DRklfOEJJVAorCQkJCQkmJiBpbmZvLT5pbnRlcmZhY2UgPT0gRkxBU0hfQ0ZJX1g4WDE2KSB7CisJCQkJCWluZm8tPmFkZHJfdW5sb2NrMSA9IDB4MkFBQTsKKwkJCQkJaW5mby0+YWRkcl91bmxvY2syID0gMHg1NTU1OworCQkJCX0gZWxzZSB7CisJCQkJCWluZm8tPmFkZHJfdW5sb2NrMSA9IDB4NTU1NTsKKwkJCQkJaW5mby0+YWRkcl91bmxvY2syID0gMHgyQUFBOworCQkJCX0KKwkJCQlmbGFzaF9yZWFkX2plZGVjX2lkcyhpbmZvKTsKKwkJCQlkZWJ1ZygiSkVERUMgUFJPQkU6IElEICV4ICV4ICV4XG4iLAorCQkJCQkJaW5mby0+bWFudWZhY3R1cmVyX2lkLAorCQkJCQkJaW5mby0+ZGV2aWNlX2lkLAorCQkJCQkJaW5mby0+ZGV2aWNlX2lkMik7CisJCQkJaWYgKGplZGVjX2ZsYXNoX21hdGNoKGluZm8sIGJhc2UpKQorCQkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCXN3aXRjaChpbmZvLT52ZW5kb3IpIHsKKwkJY2FzZSBDRklfQ01EU0VUX0lOVEVMX1NUQU5EQVJEOgorCQljYXNlIENGSV9DTURTRVRfSU5URUxfRVhURU5ERUQ6CisJCQlpbmZvLT5jbWRfcmVzZXQgPSBGTEFTSF9DTURfUkVTRVQ7CisJCQlicmVhazsKKwkJY2FzZSBDRklfQ01EU0VUX0FNRF9TVEFOREFSRDoKKwkJY2FzZSBDRklfQ01EU0VUX0FNRF9FWFRFTkRFRDoKKwkJY2FzZSBDRklfQ01EU0VUX0FNRF9MRUdBQ1k6CisJCQlpbmZvLT5jbWRfcmVzZXQgPSBBTURfQ01EX1JFU0VUOworCQkJYnJlYWs7CisJCX0KKwkJaW5mby0+Zmxhc2hfaWQgPSBGTEFTSF9NQU5fQ0ZJOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7IC8qIHVzZSBDRkkgKi8KK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBmbGFzaF9kZXRlY3RfbGVnYWN5KHVsb25nIGJhc2UsIGludCBiYW5rbnVtKQoreworCXJldHVybiAwOyAvKiB1c2UgQ0ZJICovCit9CisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogZGV0ZWN0IGlmIGZsYXNoIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgQ29tbW9uIEZsYXNoIEludGVyZmFjZSAoQ0ZJKQogICogaHR0cDovL3d3dy5qZWRlYy5vcmcvZG93bmxvYWQvc2VhcmNoL2plc2Q2OC5wZGYKLSAqCi0qLwotc3RhdGljIGludCBmbGFzaF9kZXRlY3RfY2ZpIChmbGFzaF9pbmZvX3QgKiBpbmZvKQorICovCitzdGF0aWMgdm9pZCBmbGFzaF9yZWFkX2NmaSAoZmxhc2hfaW5mb190ICppbmZvLCB2b2lkICpidWYsCisJCXVuc2lnbmVkIGludCBzdGFydCwgc2l6ZV90IGxlbikKK3sKKwl1OCAqcCA9IGJ1ZjsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKKwkJcFtpXSA9IGZsYXNoX3JlYWRfdWNoYXIoaW5mbywgc3RhcnQgKyBpKTsKK30KKworc3RhdGljIGludCBfX2ZsYXNoX2RldGVjdF9jZmkgKGZsYXNoX2luZm9fdCAqIGluZm8sIHN0cnVjdCBjZmlfcXJ5ICpxcnkpCiB7CiAJaW50IGNmaV9vZmZzZXQ7CisKKwlmbGFzaF93cml0ZV9jbWQgKGluZm8sIDAsIDAsIGluZm8tPmNtZF9yZXNldCk7CisJZm9yIChjZmlfb2Zmc2V0PTA7CisJICAgICBjZmlfb2Zmc2V0IDwgc2l6ZW9mKGZsYXNoX29mZnNldF9jZmkpIC8gc2l6ZW9mKHVpbnQpOworCSAgICAgY2ZpX29mZnNldCsrKSB7CisJCWZsYXNoX3dyaXRlX2NtZCAoaW5mbywgMCwgZmxhc2hfb2Zmc2V0X2NmaVtjZmlfb2Zmc2V0XSwKKwkJCQkgRkxBU0hfQ01EX0NGSSk7CisJCWlmIChmbGFzaF9pc2VxdWFsIChpbmZvLCAwLCBGTEFTSF9PRkZTRVRfQ0ZJX1JFU1AsICdRJykKKwkJICAgICYmIGZsYXNoX2lzZXF1YWwgKGluZm8sIDAsIEZMQVNIX09GRlNFVF9DRklfUkVTUCArIDEsICdSJykKKwkJICAgICYmIGZsYXNoX2lzZXF1YWwgKGluZm8sIDAsIEZMQVNIX09GRlNFVF9DRklfUkVTUCArIDIsICdZJykpIHsKKwkJCWZsYXNoX3JlYWRfY2ZpKGluZm8sIHFyeSwgRkxBU0hfT0ZGU0VUX0NGSV9SRVNQLAorCQkJCQlzaXplb2Yoc3RydWN0IGNmaV9xcnkpKTsKKwkJCWluZm8tPmludGVyZmFjZQk9IGxlMTZfdG9fY3B1KHFyeS0+aW50ZXJmYWNlX2Rlc2MpOworCisJCQlpbmZvLT5jZmlfb2Zmc2V0ID0gZmxhc2hfb2Zmc2V0X2NmaVtjZmlfb2Zmc2V0XTsKKwkJCWRlYnVnICgiZGV2aWNlIGludGVyZmFjZSBpcyAlZFxuIiwKKwkJCSAgICAgICBpbmZvLT5pbnRlcmZhY2UpOworCQkJZGVidWcgKCJmb3VuZCBwb3J0ICVkIGNoaXAgJWQgIiwKKwkJCSAgICAgICBpbmZvLT5wb3J0d2lkdGgsIGluZm8tPmNoaXB3aWR0aCk7CisJCQlkZWJ1ZyAoInBvcnQgJWQgYml0cyBjaGlwICVkIGJpdHNcbiIsCisJCQkgICAgICAgaW5mby0+cG9ydHdpZHRoIDw8IENGSV9GTEFTSF9TSElGVF9XSURUSCwKKwkJCSAgICAgICBpbmZvLT5jaGlwd2lkdGggPDwgQ0ZJX0ZMQVNIX1NISUZUX1dJRFRIKTsKKworCQkJLyogY2FsY3VsYXRlIGNvbW1hbmQgb2Zmc2V0cyBhcyBpbiB0aGUgTGludXggZHJpdmVyICovCisJCQlpbmZvLT5hZGRyX3VubG9jazEgPSAweDU1NTsKKwkJCWluZm8tPmFkZHJfdW5sb2NrMiA9IDB4MmFhOworCisJCQkvKgorCQkJICogbW9kaWZ5IHRoZSB1bmxvY2sgYWRkcmVzcyBpZiB3ZSBhcmUKKwkJCSAqIGluIGNvbXBhdGliaWxpdHkgbW9kZQorCQkJICovCisJCQlpZiAoCS8qIHg4L3gxNiBpbiB4OCBtb2RlICovCisJCQkJKChpbmZvLT5jaGlwd2lkdGggPT0gRkxBU0hfQ0ZJX0JZOCkgJiYKKwkJCQkJKGluZm8tPmludGVyZmFjZSA9PSBGTEFTSF9DRklfWDhYMTYpKSB8fAorCQkJCS8qIHgxNi94MzIgaW4geDE2IG1vZGUgKi8KKwkJCQkoKGluZm8tPmNoaXB3aWR0aCA9PSBGTEFTSF9DRklfQlkxNikgJiYKKwkJCQkJKGluZm8tPmludGVyZmFjZSA9PSBGTEFTSF9DRklfWDE2WDMyKSkpCisJCQl7CisJCQkJaW5mby0+YWRkcl91bmxvY2sxID0gMHhhYWE7CisJCQkJaW5mby0+YWRkcl91bmxvY2syID0gMHg1NTU7CisJCQl9CisKKwkJCWluZm8tPm5hbWUgPSAiQ0ZJIGNvbmZvcm1hbnQiOworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBmbGFzaF9kZXRlY3RfY2ZpIChmbGFzaF9pbmZvX3QgKiBpbmZvLCBzdHJ1Y3QgY2ZpX3FyeSAqcXJ5KQorewogCWRlYnVnICgiZmxhc2ggZGV0ZWN0IGNmaVxuIik7CiAKIAlmb3IgKGluZm8tPnBvcnR3aWR0aCA9IENGR19GTEFTSF9DRklfV0lEVEg7CiAJICAgICBpbmZvLT5wb3J0d2lkdGggPD0gRkxBU0hfQ0ZJXzY0QklUOyBpbmZvLT5wb3J0d2lkdGggPDw9IDEpIHsKIAkJZm9yIChpbmZvLT5jaGlwd2lkdGggPSBGTEFTSF9DRklfQlk4OwogCQkgICAgIGluZm8tPmNoaXB3aWR0aCA8PSBpbmZvLT5wb3J0d2lkdGg7Ci0JCSAgICAgaW5mby0+Y2hpcHdpZHRoIDw8PSAxKSB7Ci0JCQlmbGFzaF93cml0ZV9jbWQgKGluZm8sIDAsIDAsIGluZm8tPmNtZF9yZXNldCk7Ci0JCQlmb3IgKGNmaV9vZmZzZXQ9MDsgY2ZpX29mZnNldCA8IHNpemVvZihmbGFzaF9vZmZzZXRfY2ZpKS9zaXplb2YodWludCk7IGNmaV9vZmZzZXQrKykgewotCQkJCWZsYXNoX3dyaXRlX2NtZCAoaW5mbywgMCwgZmxhc2hfb2Zmc2V0X2NmaVtjZmlfb2Zmc2V0XSwgRkxBU0hfQ01EX0NGSSk7Ci0JCQkJaWYgKGZsYXNoX2lzZXF1YWwgKGluZm8sIDAsIEZMQVNIX09GRlNFVF9DRklfUkVTUCwgJ1EnKQotCQkJCSAmJiBmbGFzaF9pc2VxdWFsIChpbmZvLCAwLCBGTEFTSF9PRkZTRVRfQ0ZJX1JFU1AgKyAxLCAnUicpCi0JCQkJICYmIGZsYXNoX2lzZXF1YWwgKGluZm8sIDAsIEZMQVNIX09GRlNFVF9DRklfUkVTUCArIDIsICdZJykpIHsKLQkJCQkJaW5mby0+aW50ZXJmYWNlID0gZmxhc2hfcmVhZF91c2hvcnQgKGluZm8sIDAsIEZMQVNIX09GRlNFVF9JTlRFUkZBQ0UpOwotCQkJCQlpbmZvLT5jZmlfb2Zmc2V0PWZsYXNoX29mZnNldF9jZmlbY2ZpX29mZnNldF07Ci0JCQkJCWRlYnVnICgiZGV2aWNlIGludGVyZmFjZSBpcyAlZFxuIiwKLQkJCQkJCWluZm8tPmludGVyZmFjZSk7Ci0JCQkJCWRlYnVnICgiZm91bmQgcG9ydCAlZCBjaGlwICVkICIsCi0JCQkJCQlpbmZvLT5wb3J0d2lkdGgsIGluZm8tPmNoaXB3aWR0aCk7Ci0JCQkJCWRlYnVnICgicG9ydCAlZCBiaXRzIGNoaXAgJWQgYml0c1xuIiwKLQkJCQkJCWluZm8tPnBvcnR3aWR0aCA8PCBDRklfRkxBU0hfU0hJRlRfV0lEVEgsCi0JCQkJCQlpbmZvLT5jaGlwd2lkdGggPDwgQ0ZJX0ZMQVNIX1NISUZUX1dJRFRIKTsKLQkJCQkJcmV0dXJuIDE7Ci0JCQkJfQotCQkJfQotCQl9CisJCSAgICAgaW5mby0+Y2hpcHdpZHRoIDw8PSAxKQorCQkJaWYgKF9fZmxhc2hfZGV0ZWN0X2NmaShpbmZvLCBxcnkpKQorCQkJCXJldHVybiAxOwogCX0KIAlkZWJ1ZyAoIm5vdCBmb3VuZFxuIik7CiAJcmV0dXJuIDA7CiB9CiAKIC8qCisgKiBNYW51ZmFjdHVyZXItc3BlY2lmaWMgcXVpcmtzLiBBZGQgd29ya2Fyb3VuZHMgZm9yIGdlb21ldHJ5CisgKiByZXZlcnNhbCwgZXRjLiBoZXJlLgorICovCitzdGF0aWMgdm9pZCBmbGFzaF9maXh1cF9hbWQoZmxhc2hfaW5mb190ICppbmZvLCBzdHJ1Y3QgY2ZpX3FyeSAqcXJ5KQoreworCS8qIGNoZWNrIGlmIGZsYXNoIGdlb21ldHJ5IG5lZWRzIHJldmVyc2FsICovCisJaWYgKHFyeS0+bnVtX2VyYXNlX3JlZ2lvbnMgPiAxKSB7CisJCS8qIHJldmVyc2UgZ2VvbWV0cnkgaWYgdG9wIGJvb3QgcGFydCAqLworCQlpZiAoaW5mby0+Y2ZpX3ZlcnNpb24gPCAweDMxMzEpIHsKKwkJCS8qIENGSSA8IDEuMSwgdHJ5IHRvIGd1ZXNzIGZyb20gZGV2aWNlIGlkICovCisJCQlpZiAoKGluZm8tPmRldmljZV9pZCAmIDB4ODApICE9IDApCisJCQkJY2ZpX3JldmVyc2VfZ2VvbWV0cnkocXJ5KTsKKwkJfSBlbHNlIGlmIChmbGFzaF9yZWFkX3VjaGFyKGluZm8sIGluZm8tPmV4dF9hZGRyICsgMHhmKSA9PSAzKSB7CisJCQkvKiBDRkkgPj0gMS4xLCBkZWR1Y3QgZnJvbSB0b3AvYm90dG9tIGZsYWcgKi8KKwkJCS8qIG5vdGU6IGV4dF9hZGRyIGlzIHZhbGlkIHNpbmNlIGNmaV92ZXJzaW9uID4gMCAqLworCQkJY2ZpX3JldmVyc2VfZ2VvbWV0cnkocXJ5KTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgZmxhc2hfZml4dXBfYXRtZWwoZmxhc2hfaW5mb190ICppbmZvLCBzdHJ1Y3QgY2ZpX3FyeSAqcXJ5KQoreworCWludCByZXZlcnNlX2dlb21ldHJ5ID0gMDsKKworCS8qIENoZWNrIHRoZSAidG9wIGJvb3QiIGJpdCBpbiB0aGUgUFJJICovCisJaWYgKGluZm8tPmV4dF9hZGRyICYmICEoZmxhc2hfcmVhZF91Y2hhcihpbmZvLCBpbmZvLT5leHRfYWRkciArIDYpICYgMSkpCisJCXJldmVyc2VfZ2VvbWV0cnkgPSAxOworCisJLyogQVQ0OUJWNjQxNihUKSBsaXN0IHRoZSBlcmFzZSByZWdpb25zIGluIHRoZSB3cm9uZyBvcmRlci4KKwkgKiBIb3dldmVyLCB0aGUgZGV2aWNlIElEIGlzIGlkZW50aWNhbCB3aXRoIHRoZSBub24tYnJva2VuCisJICogQVQ0OUJWNjQyRCBzaW5jZSB1LWJvb3Qgb25seSByZWFkcyB0aGUgbG93IGJ5dGUgKHRoZXkKKwkgKiBkaWZmZXIgaW4gdGhlIGhpZ2ggYnl0ZS4pIFNvIGxlYXZlIG91dCB0aGlzIGZpeHVwIGZvciBub3cuCisJICovCisjaWYgMAorCWlmIChpbmZvLT5kZXZpY2VfaWQgPT0gMHhkNiB8fCBpbmZvLT5kZXZpY2VfaWQgPT0gMHhkMikKKwkJcmV2ZXJzZV9nZW9tZXRyeSA9ICFyZXZlcnNlX2dlb21ldHJ5OworI2VuZGlmCisKKwlpZiAocmV2ZXJzZV9nZW9tZXRyeSkKKwkJY2ZpX3JldmVyc2VfZ2VvbWV0cnkocXJ5KTsKK30KKworLyoKICAqIFRoZSBmb2xsb3dpbmcgY29kZSBjYW5ub3QgYmUgcnVuIGZyb20gRkxBU0ghCiAgKgogICovCkBAIC0xMTgwLDcgKzE2MTEsNyBAQAogCXVjaGFyIG51bV9lcmFzZV9yZWdpb25zOwogCWludCBlcmFzZV9yZWdpb25fc2l6ZTsKIAlpbnQgZXJhc2VfcmVnaW9uX2NvdW50OwotCWludCBnZW9tZXRyeV9yZXZlcnNlZCA9IDA7CisJc3RydWN0IGNmaV9xcnkgcXJ5OwogCiAJaW5mby0+ZXh0X2FkZHIgPSAwOwogCWluZm8tPmNmaV92ZXJzaW9uID0gMDsKQEAgLTExOTAsNTYgKzE2MjEsNTAgQEAKIAogCWluZm8tPnN0YXJ0WzBdID0gYmFzZTsKIAotCWlmIChmbGFzaF9kZXRlY3RfY2ZpIChpbmZvKSkgewotCQlpbmZvLT52ZW5kb3IgPSBmbGFzaF9yZWFkX3VzaG9ydCAoaW5mbywgMCwKLQkJCQkJRkxBU0hfT0ZGU0VUX1BSSU1BUllfVkVORE9SKTsKLQkJZmxhc2hfcmVhZF9qZWRlY19pZHMgKGluZm8pOwotCQlmbGFzaF93cml0ZV9jbWQgKGluZm8sIDAsIGluZm8tPmNmaV9vZmZzZXQsIEZMQVNIX0NNRF9DRkkpOwotCQludW1fZXJhc2VfcmVnaW9ucyA9IGZsYXNoX3JlYWRfdWNoYXIgKGluZm8sCi0JCQkJCUZMQVNIX09GRlNFVF9OVU1fRVJBU0VfUkVHSU9OUyk7Ci0JCWluZm8tPmV4dF9hZGRyID0gZmxhc2hfcmVhZF91c2hvcnQgKGluZm8sIDAsCi0JCQkJCUZMQVNIX09GRlNFVF9FWFRfUVVFUllfVF9QX0FERFIpOworCWlmIChmbGFzaF9kZXRlY3RfY2ZpIChpbmZvLCAmcXJ5KSkgeworCQlpbmZvLT52ZW5kb3IgPSBsZTE2X3RvX2NwdShxcnkucF9pZCk7CisJCWluZm8tPmV4dF9hZGRyID0gbGUxNl90b19jcHUocXJ5LnBfYWRyKTsKKwkJbnVtX2VyYXNlX3JlZ2lvbnMgPSBxcnkubnVtX2VyYXNlX3JlZ2lvbnM7CisKIAkJaWYgKGluZm8tPmV4dF9hZGRyKSB7CiAJCQlpbmZvLT5jZmlfdmVyc2lvbiA9ICh1c2hvcnQpIGZsYXNoX3JlYWRfdWNoYXIgKGluZm8sCiAJCQkJCQlpbmZvLT5leHRfYWRkciArIDMpIDw8IDg7CiAJCQlpbmZvLT5jZmlfdmVyc2lvbiB8PSAodXNob3J0KSBmbGFzaF9yZWFkX3VjaGFyIChpbmZvLAogCQkJCQkJaW5mby0+ZXh0X2FkZHIgKyA0KTsKIAkJfQorCiAjaWZkZWYgREVCVUcKLQkJZmxhc2hfcHJpbnRxcnkgKGluZm8sIDApOworCQlmbGFzaF9wcmludHFyeSAoJnFyeSk7CiAjZW5kaWYKKwogCQlzd2l0Y2ggKGluZm8tPnZlbmRvcikgewogCQljYXNlIENGSV9DTURTRVRfSU5URUxfU1RBTkRBUkQ6CiAJCWNhc2UgQ0ZJX0NNRFNFVF9JTlRFTF9FWFRFTkRFRDoKLQkJZGVmYXVsdDoKLQkJCWluZm8tPmNtZF9yZXNldCA9IEZMQVNIX0NNRF9SRVNFVDsKLSNpZmRlZiBDRkdfRkxBU0hfUFJPVEVDVElPTgotCQkJLyogcmVhZCBsZWdhY3kgbG9jay91bmxvY2sgYml0IGZyb20gaW50ZWwgZmxhc2ggKi8KLQkJCWlmIChpbmZvLT5leHRfYWRkcikgewotCQkJCWluZm8tPmxlZ2FjeV91bmxvY2sgPSBmbGFzaF9yZWFkX3VjaGFyIChpbmZvLAotCQkJCQkJaW5mby0+ZXh0X2FkZHIgKyA1KSAmIDB4MDg7Ci0JCQl9Ci0jZW5kaWYKKwkJCWNtZHNldF9pbnRlbF9pbml0KGluZm8sICZxcnkpOwogCQkJYnJlYWs7CiAJCWNhc2UgQ0ZJX0NNRFNFVF9BTURfU1RBTkRBUkQ6CiAJCWNhc2UgQ0ZJX0NNRFNFVF9BTURfRVhURU5ERUQ6Ci0JCQlpbmZvLT5jbWRfcmVzZXQgPSBBTURfQ01EX1JFU0VUOwotCQkJLyogY2hlY2sgaWYgZmxhc2ggZ2VvbWV0cnkgbmVlZHMgcmV2ZXJzYWwgKi8KLQkJCWlmIChudW1fZXJhc2VfcmVnaW9ucyA8PSAxKQotCQkJCWJyZWFrOwotCQkJLyogcmV2ZXJzZSBnZW9tZXRyeSBpZiB0b3AgYm9vdCBwYXJ0ICovCi0JCQlpZiAoaW5mby0+Y2ZpX3ZlcnNpb24gPCAweDMxMzEpIHsKLQkJCQkvKiBDRkkgPCAxLjEsIHRyeSB0byBndWVzcyBmcm9tIGRldmljZSBpZCAqLwotCQkJCWlmICgoaW5mby0+ZGV2aWNlX2lkICYgMHg4MCkgIT0gMCkgewotCQkJCQlnZW9tZXRyeV9yZXZlcnNlZCA9IDE7Ci0JCQkJfQotCQkJCWJyZWFrOwotCQkJfQotCQkJLyogQ0ZJID49IDEuMSwgZGVkdWN0IGZyb20gdG9wL2JvdHRvbSBmbGFnICovCi0JCQkvKiBub3RlOiBleHRfYWRkciBpcyB2YWxpZCBzaW5jZSBjZmlfdmVyc2lvbiA+IDAgKi8KLQkJCWlmIChmbGFzaF9yZWFkX3VjaGFyKGluZm8sIGluZm8tPmV4dF9hZGRyICsgMHhmKSA9PSAzKSB7Ci0JCQkJZ2VvbWV0cnlfcmV2ZXJzZWQgPSAxOwotCQkJfQorCQkJY21kc2V0X2FtZF9pbml0KGluZm8sICZxcnkpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwcmludGYoIkNGSTogVW5rbm93biBjb21tYW5kIHNldCAweCV4XG4iLAorCQkJCQlpbmZvLT52ZW5kb3IpOworCQkJLyoKKwkJCSAqIFVuZm9ydHVuYXRlbHksIHRoaXMgbWVhbnMgd2UgZG9uJ3Qga25vdyBob3cKKwkJCSAqIHRvIGdldCB0aGUgY2hpcCBiYWNrIHRvIFJlYWQgbW9kZS4gTWlnaHQKKwkJCSAqIGFzIHdlbGwgdHJ5IGFuIEludGVsLXN0eWxlIHJlc2V0Li4uCisJCQkgKi8KKwkJCWZsYXNoX3dyaXRlX2NtZChpbmZvLCAwLCAwLCBGTEFTSF9DTURfUkVTRVQpOworCQkJcmV0dXJuIDA7CisJCX0KKworCQkvKiBEbyBtYW51ZmFjdHVyZXItc3BlY2lmaWMgZml4dXBzICovCisJCXN3aXRjaCAoaW5mby0+bWFudWZhY3R1cmVyX2lkKSB7CisJCWNhc2UgMHgwMDAxOgorCQkJZmxhc2hfZml4dXBfYW1kKGluZm8sICZxcnkpOworCQkJYnJlYWs7CisJCWNhc2UgMHgwMDFmOgorCQkJZmxhc2hfZml4dXBfYXRtZWwoaW5mbywgJnFyeSk7CiAJCQlicmVhazsKIAkJfQogCkBAIC0xMjY3LDI2ICsxNjkyLDI3IEBACiAJCQkJCW51bV9lcmFzZV9yZWdpb25zLCBOVU1fRVJBU0VfUkVHSU9OUyk7CiAJCQkJYnJlYWs7CiAJCQl9Ci0JCQlpZiAoZ2VvbWV0cnlfcmV2ZXJzZWQpCi0JCQkJdG1wID0gZmxhc2hfcmVhZF9sb25nIChpbmZvLCAwLAotCQkJCQkgICAgICAgRkxBU0hfT0ZGU0VUX0VSQVNFX1JFR0lPTlMgKwotCQkJCQkgICAgICAgKG51bV9lcmFzZV9yZWdpb25zIC0gMSAtIGkpICogNCk7Ci0JCQllbHNlCi0JCQkJdG1wID0gZmxhc2hfcmVhZF9sb25nIChpbmZvLCAwLAotCQkJCQkgICAgICAgRkxBU0hfT0ZGU0VUX0VSQVNFX1JFR0lPTlMgKwotCQkJCQkgICAgICAgaSAqIDQpOworCisJCQl0bXAgPSBsZTMyX3RvX2NwdShxcnkuZXJhc2VfcmVnaW9uX2luZm9baV0pOworCQkJZGVidWcoImVyYXNlIHJlZ2lvbiAldTogMHglMDhseFxuIiwgaSwgdG1wKTsKKworCQkJZXJhc2VfcmVnaW9uX2NvdW50ID0gKHRtcCAmIDB4ZmZmZikgKyAxOworCQkJdG1wID4+PSAxNjsKIAkJCWVyYXNlX3JlZ2lvbl9zaXplID0KIAkJCQkodG1wICYgMHhmZmZmKSA/ICgodG1wICYgMHhmZmZmKSAqIDI1NikgOiAxMjg7Ci0JCQl0bXAgPj49IDE2OwotCQkJZXJhc2VfcmVnaW9uX2NvdW50ID0gKHRtcCAmIDB4ZmZmZikgKyAxOwogCQkJZGVidWcgKCJlcmFzZV9yZWdpb25fY291bnQgPSAlZCBlcmFzZV9yZWdpb25fc2l6ZSA9ICVkXG4iLAogCQkJCWVyYXNlX3JlZ2lvbl9jb3VudCwgZXJhc2VfcmVnaW9uX3NpemUpOwogCQkJZm9yIChqID0gMDsgaiA8IGVyYXNlX3JlZ2lvbl9jb3VudDsgaisrKSB7CisJCQkJaWYgKHNlY3RfY250ID49IENGR19NQVhfRkxBU0hfU0VDVCkgeworCQkJCQlwcmludGYoIkVSUk9SOiB0b28gbWFueSBmbGFzaCBzZWN0b3JzXG4iKTsKKwkJCQkJYnJlYWs7CisJCQkJfQogCQkJCWluZm8tPnN0YXJ0W3NlY3RfY250XSA9IHNlY3RvcjsKIAkJCQlzZWN0b3IgKz0gKGVyYXNlX3JlZ2lvbl9zaXplICogc2l6ZV9yYXRpbyk7CiAKIAkJCQkvKgotCQkJCSAqIE9ubHkgcmVhZCBwcm90ZWN0aW9uIHN0YXR1cyBmcm9tIHN1cHBvcnRlZCBkZXZpY2VzIChpbnRlbC4uLikKKwkJCQkgKiBPbmx5IHJlYWQgcHJvdGVjdGlvbiBzdGF0dXMgZnJvbQorCQkJCSAqIHN1cHBvcnRlZCBkZXZpY2VzIChpbnRlbC4uLikKIAkJCQkgKi8KIAkJCQlzd2l0Y2ggKGluZm8tPnZlbmRvcikgewogCQkJCWNhc2UgQ0ZJX0NNRFNFVF9JTlRFTF9FWFRFTkRFRDoKQEAgLTEyOTcsNyArMTcyMyw4IEBACiAJCQkJCQkJICAgICBGTEFTSF9TVEFUVVNfUFJPVEVDVCk7CiAJCQkJCWJyZWFrOwogCQkJCWRlZmF1bHQ6Ci0JCQkJCWluZm8tPnByb3RlY3Rbc2VjdF9jbnRdID0gMDsgLyogZGVmYXVsdDogbm90IHByb3RlY3RlZCAqLworCQkJCQkvKiBkZWZhdWx0OiBub3QgcHJvdGVjdGVkICovCisJCQkJCWluZm8tPnByb3RlY3Rbc2VjdF9jbnRdID0gMDsKIAkJCQl9CiAKIAkJCQlzZWN0X2NudCsrOwpAQCAtMTMwNSwyMCArMTczMiwyNyBAQAogCQl9CiAKIAkJaW5mby0+c2VjdG9yX2NvdW50ID0gc2VjdF9jbnQ7CisJCWluZm8tPnNpemUgPSAxIDw8IHFyeS5kZXZfc2l6ZTsKIAkJLyogbXVsdGlwbHkgdGhlIHNpemUgYnkgdGhlIG51bWJlciBvZiBjaGlwcyAqLwotCQlpbmZvLT5zaXplID0gKDEgPDwgZmxhc2hfcmVhZF91Y2hhciAoaW5mbywgRkxBU0hfT0ZGU0VUX1NJWkUpKSAqIHNpemVfcmF0aW87Ci0JCWluZm8tPmJ1ZmZlcl9zaXplID0gKDEgPDwgZmxhc2hfcmVhZF91c2hvcnQgKGluZm8sIDAsIEZMQVNIX09GRlNFVF9CVUZGRVJfU0laRSkpOwotCQl0bXAgPSAxIDw8IGZsYXNoX3JlYWRfdWNoYXIgKGluZm8sIEZMQVNIX09GRlNFVF9FVE9VVCk7Ci0JCWluZm8tPmVyYXNlX2Jsa190b3V0ID0gKHRtcCAqICgxIDw8IGZsYXNoX3JlYWRfdWNoYXIgKGluZm8sIEZMQVNIX09GRlNFVF9FTUFYX1RPVVQpKSk7Ci0JCXRtcCA9ICgxIDw8IGZsYXNoX3JlYWRfdWNoYXIgKGluZm8sIEZMQVNIX09GRlNFVF9XQlRPVVQpKSAqCi0JCQkoMSA8PCBmbGFzaF9yZWFkX3VjaGFyIChpbmZvLCBGTEFTSF9PRkZTRVRfV0JNQVhfVE9VVCkpOwotCQlpbmZvLT5idWZmZXJfd3JpdGVfdG91dCA9IHRtcCAvIDEwMDAgKyAodG1wICUgMTAwMCA/IDEgOiAwKTsgLyogcm91bmQgdXAgd2hlbiBjb252ZXJ0aW5nIHRvIG1zICovCi0JCXRtcCA9ICgxIDw8IGZsYXNoX3JlYWRfdWNoYXIgKGluZm8sIEZMQVNIX09GRlNFVF9XVE9VVCkpICoKLQkJICAgICAgKDEgPDwgZmxhc2hfcmVhZF91Y2hhciAoaW5mbywgRkxBU0hfT0ZGU0VUX1dNQVhfVE9VVCkpOwotCQlpbmZvLT53cml0ZV90b3V0ID0gdG1wIC8gMTAwMCArICh0bXAgJSAxMDAwID8gMSA6IDApOyAvKiByb3VuZCB1cCB3aGVuIGNvbnZlcnRpbmcgdG8gbXMgKi8KKwkJaW5mby0+c2l6ZSAqPSBzaXplX3JhdGlvOworCQlpbmZvLT5idWZmZXJfc2l6ZSA9IDEgPDwgbGUxNl90b19jcHUocXJ5Lm1heF9idWZfd3JpdGVfc2l6ZSk7CisJCXRtcCA9IDEgPDwgcXJ5LmJsb2NrX2VyYXNlX3RpbWVvdXRfdHlwOworCQlpbmZvLT5lcmFzZV9ibGtfdG91dCA9IHRtcCAqCisJCQkoMSA8PCBxcnkuYmxvY2tfZXJhc2VfdGltZW91dF9tYXgpOworCQl0bXAgPSAoMSA8PCBxcnkuYnVmX3dyaXRlX3RpbWVvdXRfdHlwKSAqCisJCQkoMSA8PCBxcnkuYnVmX3dyaXRlX3RpbWVvdXRfbWF4KTsKKworCQkvKiByb3VuZCB1cCB3aGVuIGNvbnZlcnRpbmcgdG8gbXMgKi8KKwkJaW5mby0+YnVmZmVyX3dyaXRlX3RvdXQgPSAodG1wICsgOTk5KSAvIDEwMDA7CisJCXRtcCA9ICgxIDw8IHFyeS53b3JkX3dyaXRlX3RpbWVvdXRfdHlwKSAqCisJCQkoMSA8PCBxcnkud29yZF93cml0ZV90aW1lb3V0X21heCk7CisJCS8qIHJvdW5kIHVwIHdoZW4gY29udmVydGluZyB0byBtcyAqLworCQlpbmZvLT53cml0ZV90b3V0ID0gKHRtcCArIDk5OSkgLyAxMDAwOwogCQlpbmZvLT5mbGFzaF9pZCA9IEZMQVNIX01BTl9DRkk7Ci0JCWlmICgoaW5mby0+aW50ZXJmYWNlID09IEZMQVNIX0NGSV9YOFgxNikgJiYgKGluZm8tPmNoaXB3aWR0aCA9PSBGTEFTSF9DRklfQlk4KSkgewotCQkJaW5mby0+cG9ydHdpZHRoID4+PSAxOwkvKiBYWFggLSBOZWVkIHRvIHRlc3Qgb24geDgveDE2IGluIHBhcmFsbGVsLiAqLworCQlpZiAoKGluZm8tPmludGVyZmFjZSA9PSBGTEFTSF9DRklfWDhYMTYpICYmCisJCSAgICAoaW5mby0+Y2hpcHdpZHRoID09IEZMQVNIX0NGSV9CWTgpKSB7CisJCQkvKiBYWFggLSBOZWVkIHRvIHRlc3Qgb24geDgveDE2IGluIHBhcmFsbGVsLiAqLworCQkJaW5mby0+cG9ydHdpZHRoID4+PSAxOwogCQl9CiAJfQogCkBAIC0xMzI2LDIwMyArMTc2MCwxMDYgQEAKIAlyZXR1cm4gKGluZm8tPnNpemUpOwogfQogCi0vKiBsb29wIHRocm91Z2ggdGhlIHNlY3RvcnMgZnJvbSB0aGUgaGlnaGVzdCBhZGRyZXNzCi0gKiB3aGVuIHRoZSBwYXNzZWQgYWRkcmVzcyBpcyBncmVhdGVyIG9yIGVxdWFsIHRvIHRoZSBzZWN0b3IgYWRkcmVzcwotICogd2UgaGF2ZSBhIG1hdGNoCi0gKi8KLXN0YXRpYyBmbGFzaF9zZWN0X3QgZmluZF9zZWN0b3IgKGZsYXNoX2luZm9fdCAqIGluZm8sIHVsb25nIGFkZHIpCi17Ci0JZmxhc2hfc2VjdF90IHNlY3RvcjsKLQotCWZvciAoc2VjdG9yID0gaW5mby0+c2VjdG9yX2NvdW50IC0gMTsgc2VjdG9yID49IDA7IHNlY3Rvci0tKSB7Ci0JCWlmIChhZGRyID49IGluZm8tPnN0YXJ0W3NlY3Rvcl0pCi0JCQlicmVhazsKLQl9Ci0JcmV0dXJuIHNlY3RvcjsKLX0KLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCi1zdGF0aWMgaW50IGZsYXNoX3dyaXRlX2NmaXdvcmQgKGZsYXNoX2luZm9fdCAqIGluZm8sIHVsb25nIGRlc3QsCi0JCQkJY2Zpd29yZF90IGN3b3JkKQordW5zaWduZWQgbG9uZyBmbGFzaF9pbml0ICh2b2lkKQogewotCWNmaXB0cl90IGN0bGFkZHI7Ci0JY2ZpcHRyX3QgY3B0cjsKLQlpbnQgZmxhZzsKKwl1bnNpZ25lZCBsb25nIHNpemUgPSAwOworCWludCBpOwogCi0JY3RsYWRkci5jcCA9IGZsYXNoX21ha2VfYWRkciAoaW5mbywgMCwgMCk7Ci0JY3B0ci5jcCA9ICh1Y2hhciAqKSBkZXN0OworI2lmZGVmIENGR19GTEFTSF9QUk9URUNUSU9OCisJY2hhciAqcyA9IGdldGVudigidW5sb2NrIik7CisjZW5kaWYKIAotCS8qIENoZWNrIGlmIEZsYXNoIGlzIChzdWZmaWNpZW50bHkpIGVyYXNlZCAqLwotCXN3aXRjaCAoaW5mby0+cG9ydHdpZHRoKSB7Ci0JY2FzZSBGTEFTSF9DRklfOEJJVDoKLQkJZmxhZyA9ICgoY3B0ci5jcFswXSAmIGN3b3JkLmMpID09IGN3b3JkLmMpOwotCQlicmVhazsKLQljYXNlIEZMQVNIX0NGSV8xNkJJVDoKLQkJZmxhZyA9ICgoY3B0ci53cFswXSAmIGN3b3JkLncpID09IGN3b3JkLncpOwotCQlicmVhazsKLQljYXNlIEZMQVNIX0NGSV8zMkJJVDoKLQkJZmxhZyA9ICgoY3B0ci5scFswXSAmIGN3b3JkLmwpID09IGN3b3JkLmwpOwotCQlicmVhazsKLQljYXNlIEZMQVNIX0NGSV82NEJJVDoKLQkJZmxhZyA9ICgoY3B0ci5sbHBbMF0gJiBjd29yZC5sbCkgPT0gY3dvcmQubGwpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gMjsKLQl9Ci0JaWYgKCFmbGFnKQotCQlyZXR1cm4gMjsKKwkvKiBJbml0OiBubyBGTEFTSGVzIGtub3duICovCisJZm9yIChpID0gMDsgaSA8IENGR19NQVhfRkxBU0hfQkFOS1M7ICsraSkgeworCQlmbGFzaF9pbmZvW2ldLmZsYXNoX2lkID0gRkxBU0hfVU5LTk9XTjsKIAotCS8qIERpc2FibGUgaW50ZXJydXB0cyB3aGljaCBtaWdodCBjYXVzZSBhIHRpbWVvdXQgaGVyZSAqLwotCWZsYWcgPSBkaXNhYmxlX2ludGVycnVwdHMgKCk7Ci0KLQlzd2l0Y2ggKGluZm8tPnZlbmRvcikgewotCWNhc2UgQ0ZJX0NNRFNFVF9JTlRFTF9FWFRFTkRFRDoKLQljYXNlIENGSV9DTURTRVRfSU5URUxfU1RBTkRBUkQ6Ci0JCWZsYXNoX3dyaXRlX2NtZCAoaW5mbywgMCwgMCwgRkxBU0hfQ01EX0NMRUFSX1NUQVRVUyk7Ci0JCWZsYXNoX3dyaXRlX2NtZCAoaW5mbywgMCwgMCwgRkxBU0hfQ01EX1dSSVRFKTsKLQkJYnJlYWs7Ci0JY2FzZSBDRklfQ01EU0VUX0FNRF9FWFRFTkRFRDoKLQljYXNlIENGSV9DTURTRVRfQU1EX1NUQU5EQVJEOgotCQlmbGFzaF91bmxvY2tfc2VxIChpbmZvLCAwKTsKLQkJZmxhc2hfd3JpdGVfY21kIChpbmZvLCAwLCBBTURfQUREUl9TVEFSVCwgQU1EX0NNRF9XUklURSk7Ci0JCWJyZWFrOwotCX0KLQotCXN3aXRjaCAoaW5mby0+cG9ydHdpZHRoKSB7Ci0JY2FzZSBGTEFTSF9DRklfOEJJVDoKLQkJY3B0ci5jcFswXSA9IGN3b3JkLmM7Ci0JCWJyZWFrOwotCWNhc2UgRkxBU0hfQ0ZJXzE2QklUOgotCQljcHRyLndwWzBdID0gY3dvcmQudzsKLQkJYnJlYWs7Ci0JY2FzZSBGTEFTSF9DRklfMzJCSVQ6Ci0JCWNwdHIubHBbMF0gPSBjd29yZC5sOwotCQlicmVhazsKLQljYXNlIEZMQVNIX0NGSV82NEJJVDoKLQkJY3B0ci5sbHBbMF0gPSBjd29yZC5sbDsKLQkJYnJlYWs7Ci0JfQotCi0JLyogcmUtZW5hYmxlIGludGVycnVwdHMgaWYgbmVjZXNzYXJ5ICovCi0JaWYgKGZsYWcpCi0JCWVuYWJsZV9pbnRlcnJ1cHRzICgpOwotCi0JcmV0dXJuIGZsYXNoX2Z1bGxfc3RhdHVzX2NoZWNrIChpbmZvLCBmaW5kX3NlY3RvciAoaW5mbywgZGVzdCksCi0JCQkJCWluZm8tPndyaXRlX3RvdXQsICJ3cml0ZSIpOwotfQotCi0jaWZkZWYgQ0ZHX0ZMQVNIX1VTRV9CVUZGRVJfV1JJVEUKLQotc3RhdGljIGludCBmbGFzaF93cml0ZV9jZmlidWZmZXIgKGZsYXNoX2luZm9fdCAqIGluZm8sIHVsb25nIGRlc3QsIHVjaGFyICogY3AsCi0JCQkJICBpbnQgbGVuKQotewotCWZsYXNoX3NlY3RfdCBzZWN0b3I7Ci0JaW50IGNudDsKLQlpbnQgcmV0Y29kZTsKLQl2b2xhdGlsZSBjZmlwdHJfdCBzcmM7Ci0Jdm9sYXRpbGUgY2ZpcHRyX3QgZHN0OwotCi0Jc3dpdGNoIChpbmZvLT52ZW5kb3IpIHsKLQljYXNlIENGSV9DTURTRVRfSU5URUxfU1RBTkRBUkQ6Ci0JY2FzZSBDRklfQ01EU0VUX0lOVEVMX0VYVEVOREVEOgotCQlzcmMuY3AgPSBjcDsKLQkJZHN0LmNwID0gKHVjaGFyICopIGRlc3Q7Ci0JCXNlY3RvciA9IGZpbmRfc2VjdG9yIChpbmZvLCBkZXN0KTsKLQkJZmxhc2hfd3JpdGVfY21kIChpbmZvLCBzZWN0b3IsIDAsIEZMQVNIX0NNRF9DTEVBUl9TVEFUVVMpOwotCQlmbGFzaF93cml0ZV9jbWQgKGluZm8sIHNlY3RvciwgMCwgRkxBU0hfQ01EX1dSSVRFX1RPX0JVRkZFUik7Ci0JCWlmICgocmV0Y29kZSA9IGZsYXNoX3N0YXR1c19jaGVjayAoaW5mbywgc2VjdG9yLCBpbmZvLT5idWZmZXJfd3JpdGVfdG91dCwKLQkJCQkJCSAgICJ3cml0ZSB0byBidWZmZXIiKSkgPT0gRVJSX09LKSB7Ci0JCQkvKiByZWR1Y2UgdGhlIG51bWJlciBvZiBsb29wcyBieSB0aGUgd2lkdGggb2YgdGhlIHBvcnQJKi8KLQkJCXN3aXRjaCAoaW5mby0+cG9ydHdpZHRoKSB7Ci0JCQljYXNlIEZMQVNIX0NGSV84QklUOgotCQkJCWNudCA9IGxlbjsKLQkJCQlicmVhazsKLQkJCWNhc2UgRkxBU0hfQ0ZJXzE2QklUOgotCQkJCWNudCA9IGxlbiA+PiAxOwotCQkJCWJyZWFrOwotCQkJY2FzZSBGTEFTSF9DRklfMzJCSVQ6Ci0JCQkJY250ID0gbGVuID4+IDI7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEZMQVNIX0NGSV82NEJJVDoKLQkJCQljbnQgPSBsZW4gPj4gMzsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJcmV0dXJuIEVSUl9JTlZBTDsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWZsYXNoX3dyaXRlX2NtZCAoaW5mbywgc2VjdG9yLCAwLCAodWNoYXIpIGNudCAtIDEpOwotCQkJd2hpbGUgKGNudC0tID4gMCkgewotCQkJCXN3aXRjaCAoaW5mby0+cG9ydHdpZHRoKSB7Ci0JCQkJY2FzZSBGTEFTSF9DRklfOEJJVDoKLQkJCQkJKmRzdC5jcCsrID0gKnNyYy5jcCsrOwotCQkJCQlicmVhazsKLQkJCQljYXNlIEZMQVNIX0NGSV8xNkJJVDoKLQkJCQkJKmRzdC53cCsrID0gKnNyYy53cCsrOwotCQkJCQlicmVhazsKLQkJCQljYXNlIEZMQVNIX0NGSV8zMkJJVDoKLQkJCQkJKmRzdC5scCsrID0gKnNyYy5scCsrOwotCQkJCQlicmVhazsKLQkJCQljYXNlIEZMQVNIX0NGSV82NEJJVDoKLQkJCQkJKmRzdC5sbHArKyA9ICpzcmMubGxwKys7Ci0JCQkJCWJyZWFrOwotCQkJCWRlZmF1bHQ6Ci0JCQkJCXJldHVybiBFUlJfSU5WQUw7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJCWZsYXNoX3dyaXRlX2NtZCAoaW5mbywgc2VjdG9yLCAwLAotCQkJCQkgRkxBU0hfQ01EX1dSSVRFX0JVRkZFUl9DT05GSVJNKTsKLQkJCXJldGNvZGUgPSBmbGFzaF9mdWxsX3N0YXR1c19jaGVjayAoaW5mbywgc2VjdG9yLAotCQkJCQkJCSAgIGluZm8tPmJ1ZmZlcl93cml0ZV90b3V0LAotCQkJCQkJCSAgICJidWZmZXIgd3JpdGUiKTsKKwkJaWYgKCFmbGFzaF9kZXRlY3RfbGVnYWN5IChiYW5rX2Jhc2VbaV0sIGkpKQorCQkJZmxhc2hfZ2V0X3NpemUgKGJhbmtfYmFzZVtpXSwgaSk7CisJCXNpemUgKz0gZmxhc2hfaW5mb1tpXS5zaXplOworCQlpZiAoZmxhc2hfaW5mb1tpXS5mbGFzaF9pZCA9PSBGTEFTSF9VTktOT1dOKSB7CisjaWZuZGVmIENGR19GTEFTSF9RVUlFVF9URVNUCisJCQlwcmludGYgKCIjIyBVbmtub3duIEZMQVNIIG9uIEJhbmsgJWQgIgorCQkJCSItIFNpemUgPSAweCUwOGx4ID0gJWxkIE1CXG4iLAorCQkJCWkrMSwgZmxhc2hfaW5mb1tpXS5zaXplLAorCQkJCWZsYXNoX2luZm9baV0uc2l6ZSA8PCAyMCk7CisjZW5kaWYgLyogQ0ZHX0ZMQVNIX1FVSUVUX1RFU1QgKi8KIAkJfQotCQlyZXR1cm4gcmV0Y29kZTsKKyNpZmRlZiBDRkdfRkxBU0hfUFJPVEVDVElPTgorCQllbHNlIGlmICgocyAhPSBOVUxMKSAmJiAoc3RyY21wKHMsICJ5ZXMiKSA9PSAwKSkgeworCQkJLyoKKwkJCSAqIE9ubHkgdGhlIFUtQm9vdCBpbWFnZSBhbmQgaXQncyBlbnZpcm9ubWVudAorCQkJICogaXMgcHJvdGVjdGVkLCBhbGwgb3RoZXIgc2VjdG9ycyBhcmUKKwkJCSAqIHVucHJvdGVjdGVkICh1bmxvY2tlZCkgaWYgZmxhc2ggaGFyZHdhcmUKKwkJCSAqIHByb3RlY3Rpb24gaXMgdXNlZCAoQ0ZHX0ZMQVNIX1BST1RFQ1RJT04pCisJCQkgKiBhbmQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlICJ1bmxvY2siIGlzCisJCQkgKiBzZXQgdG8gInllcyIuCisJCQkgKi8KKwkJCWlmIChmbGFzaF9pbmZvW2ldLmxlZ2FjeV91bmxvY2spIHsKKwkJCQlpbnQgazsKIAotCWNhc2UgQ0ZJX0NNRFNFVF9BTURfU1RBTkRBUkQ6Ci0JY2FzZSBDRklfQ01EU0VUX0FNRF9FWFRFTkRFRDoKLQkJc3JjLmNwID0gY3A7Ci0JCWRzdC5jcCA9ICh1Y2hhciAqKSBkZXN0OwotCQlzZWN0b3IgPSBmaW5kX3NlY3RvciAoaW5mbywgZGVzdCk7CisJCQkJLyoKKwkJCQkgKiBEaXNhYmxlIGxlZ2FjeV91bmxvY2sgdGVtcG9yYXJpbHksCisJCQkJICogc2luY2UgZmxhc2hfcmVhbF9wcm90ZWN0IHdvdWxkCisJCQkJICogcmVsb2NrIGFsbCBvdGhlciBzZWN0b3JzIGFnYWluCisJCQkJICogb3RoZXJ3aXNlLgorCQkJCSAqLworCQkJCWZsYXNoX2luZm9baV0ubGVnYWN5X3VubG9jayA9IDA7CiAKLQkJZmxhc2hfdW5sb2NrX3NlcShpbmZvLDApOwotCQlmbGFzaF93cml0ZV9jbWQgKGluZm8sIHNlY3RvciwgMCwgQU1EX0NNRF9XUklURV9UT19CVUZGRVIpOworCQkJCS8qCisJCQkJICogTGVnYWN5IHVubG9ja2luZyAoZS5nLiBJbnRlbCBKMykgLT4KKwkJCQkgKiB1bmxvY2sgb25seSBvbmUgc2VjdG9yLiBUaGlzIHdpbGwKKwkJCQkgKiB1bmxvY2sgYWxsIHNlY3RvcnMuCisJCQkJICovCisJCQkJZmxhc2hfcmVhbF9wcm90ZWN0ICgmZmxhc2hfaW5mb1tpXSwgMCwgMCk7CiAKLQkJc3dpdGNoIChpbmZvLT5wb3J0d2lkdGgpIHsKLQkJY2FzZSBGTEFTSF9DRklfOEJJVDoKLQkJCWNudCA9IGxlbjsKLQkJCWZsYXNoX3dyaXRlX2NtZCAoaW5mbywgc2VjdG9yLCAwLCAgKHVjaGFyKSBjbnQgLSAxKTsKLQkJCXdoaWxlIChjbnQtLSA+IDApICpkc3QuY3ArKyA9ICpzcmMuY3ArKzsKLQkJCWJyZWFrOwotCQljYXNlIEZMQVNIX0NGSV8xNkJJVDoKLQkJCWNudCA9IGxlbiA+PiAxOwotCQkJZmxhc2hfd3JpdGVfY21kIChpbmZvLCBzZWN0b3IsIDAsICAodWNoYXIpIGNudCAtIDEpOwotCQkJd2hpbGUgKGNudC0tID4gMCkgKmRzdC53cCsrID0gKnNyYy53cCsrOwotCQkJYnJlYWs7Ci0JCWNhc2UgRkxBU0hfQ0ZJXzMyQklUOgotCQkJY250ID0gbGVuID4+IDI7Ci0JCQlmbGFzaF93cml0ZV9jbWQgKGluZm8sIHNlY3RvciwgMCwgICh1Y2hhcikgY250IC0gMSk7Ci0JCQl3aGlsZSAoY250LS0gPiAwKSAqZHN0LmxwKysgPSAqc3JjLmxwKys7Ci0JCQlicmVhazsKLQkJY2FzZSBGTEFTSF9DRklfNjRCSVQ6Ci0JCQljbnQgPSBsZW4gPj4gMzsKLQkJCWZsYXNoX3dyaXRlX2NtZCAoaW5mbywgc2VjdG9yLCAwLCAgKHVjaGFyKSBjbnQgLSAxKTsKLQkJCXdoaWxlIChjbnQtLSA+IDApICpkc3QubGxwKysgPSAqc3JjLmxscCsrOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gRVJSX0lOVkFMOworCQkJCWZsYXNoX2luZm9baV0ubGVnYWN5X3VubG9jayA9IDE7CisKKwkJCQkvKgorCQkJCSAqIE1hbnVhbGx5IG1hcmsgb3RoZXIgc2VjdG9ycyBhcworCQkJCSAqIHVubG9ja2VkICh1bnByb3RlY3RlZCkKKwkJCQkgKi8KKwkJCQlmb3IgKGsgPSAxOyBrIDwgZmxhc2hfaW5mb1tpXS5zZWN0b3JfY291bnQ7IGsrKykKKwkJCQkJZmxhc2hfaW5mb1tpXS5wcm90ZWN0W2tdID0gMDsKKwkJCX0gZWxzZSB7CisJCQkJLyoKKwkJCQkgKiBObyBsZWdhbmN5IHVubG9ja2luZyAtPiB1bmxvY2sgYWxsIHNlY3RvcnMKKwkJCQkgKi8KKwkJCQlmbGFzaF9wcm90ZWN0IChGTEFHX1BST1RFQ1RfQ0xFQVIsCisJCQkJCSAgICAgICBmbGFzaF9pbmZvW2ldLnN0YXJ0WzBdLAorCQkJCQkgICAgICAgZmxhc2hfaW5mb1tpXS5zdGFydFswXQorCQkJCQkgICAgICAgKyBmbGFzaF9pbmZvW2ldLnNpemUgLSAxLAorCQkJCQkgICAgICAgJmZsYXNoX2luZm9baV0pOworCQkJfQogCQl9Ci0KLQkJZmxhc2hfd3JpdGVfY21kIChpbmZvLCBzZWN0b3IsIDAsIEFNRF9DTURfV1JJVEVfQlVGRkVSX0NPTkZJUk0pOwotCQlyZXRjb2RlID0gZmxhc2hfZnVsbF9zdGF0dXNfY2hlY2sgKGluZm8sIHNlY3RvciwgaW5mby0+YnVmZmVyX3dyaXRlX3RvdXQsCi0JCQkJCQkgICAiYnVmZmVyIHdyaXRlIik7Ci0JCXJldHVybiByZXRjb2RlOwotCi0JZGVmYXVsdDoKLQkJZGVidWcgKCJVbmtub3duIENvbW1hbmQgU2V0XG4iKTsKLQkJcmV0dXJuIEVSUl9JTlZBTDsKKyNlbmRpZiAvKiBDRkdfRkxBU0hfUFJPVEVDVElPTiAqLwogCX0KKworCS8qIE1vbml0b3IgcHJvdGVjdGlvbiBPTiBieSBkZWZhdWx0ICovCisjaWYgKENGR19NT05JVE9SX0JBU0UgPj0gQ0ZHX0ZMQVNIX0JBU0UpCisJZmxhc2hfcHJvdGVjdCAoRkxBR19QUk9URUNUX1NFVCwKKwkJICAgICAgIENGR19NT05JVE9SX0JBU0UsCisJCSAgICAgICBDRkdfTU9OSVRPUl9CQVNFICsgbW9uaXRvcl9mbGFzaF9sZW4gIC0gMSwKKwkJICAgICAgIGZsYXNoX2dldF9pbmZvKENGR19NT05JVE9SX0JBU0UpKTsKKyNlbmRpZgorCisJLyogRW52aXJvbm1lbnQgcHJvdGVjdGlvbiBPTiBieSBkZWZhdWx0ICovCisjaWZkZWYgQ0ZHX0VOVl9JU19JTl9GTEFTSAorCWZsYXNoX3Byb3RlY3QgKEZMQUdfUFJPVEVDVF9TRVQsCisJCSAgICAgICBDRkdfRU5WX0FERFIsCisJCSAgICAgICBDRkdfRU5WX0FERFIgKyBDRkdfRU5WX1NFQ1RfU0laRSAtIDEsCisJCSAgICAgICBmbGFzaF9nZXRfaW5mbyhDRkdfRU5WX0FERFIpKTsKKyNlbmRpZgorCisJLyogUmVkdW5kYW50IGVudmlyb25tZW50IHByb3RlY3Rpb24gT04gYnkgZGVmYXVsdCAqLworI2lmZGVmIENGR19FTlZfQUREUl9SRURVTkQKKwlmbGFzaF9wcm90ZWN0IChGTEFHX1BST1RFQ1RfU0VULAorCQkgICAgICAgQ0ZHX0VOVl9BRERSX1JFRFVORCwKKwkJICAgICAgIENGR19FTlZfQUREUl9SRURVTkQgKyBDRkdfRU5WX1NJWkVfUkVEVU5EIC0gMSwKKwkJICAgICAgIGZsYXNoX2dldF9pbmZvKENGR19FTlZfQUREUl9SRURVTkQpKTsKKyNlbmRpZgorCXJldHVybiAoc2l6ZSk7CiB9Ci0jZW5kaWYgLyogQ0ZHX0ZMQVNIX1VTRV9CVUZGRVJfV1JJVEUgKi8KIAogI2VuZGlmIC8qIENGR19GTEFTSF9DRkkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2plZGVjX2ZsYXNoLmMgYi9kcml2ZXJzL210ZC9qZWRlY19mbGFzaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0ZTg3Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL210ZC9qZWRlY19mbGFzaC5jCkBAIC0wLDAgKzEsMzExIEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA3CisgKiBNaWNoYWVsIFNjaHdpbmdlbiwgPG1pY2hhZWxAc2Nod2luZ2VuLm9yZz4KKyAqCisgKiBiYXNlZCBpbiBncmVhdCBwYXJ0IG9uIGplZGVjX3Byb2JlLmMgZnJvbSBsaW51eCBrZXJuZWw6CisgKiAoQykgMjAwMCBSZWQgSGF0LiBHUEwnZC4KKyAqIE9jY2FzaW9uYWxseSBtYWludGFpbmVkIGJ5IFRoYXluZSBIYXJiYXVnaCB0aGFyYmF1Z2ggYXQgbG54aSBkb3QgY29tCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCSBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKgorICovCisKKy8qIFRoZSBERUJVRyBkZWZpbmUgbXVzdCBiZSBiZWZvcmUgY29tbW9uIHRvIGVuYWJsZSBkZWJ1Z2dpbmcgKi8KKy8qI2RlZmluZSBERUJVRyovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorI2luY2x1ZGUgPGVudmlyb25tZW50Lmg+CisKKyNkZWZpbmUgUF9JRF9BTURfU1REIENGSV9DTURTRVRfQU1EX0xFR0FDWQorCisvKiBNYW51ZmFjdHVyZXJzICovCisjZGVmaW5lIE1BTlVGQUNUVVJFUl9BTUQJMHgwMDAxCisjZGVmaW5lIE1BTlVGQUNUVVJFUl9TU1QJMHgwMEJGCisKKy8qIEFNRCAqLworI2RlZmluZSBBTTI5REw4MDBCQgkweDIyQzgKKyNkZWZpbmUgQU0yOURMODAwQlQJMHgyMjRBCisKKyNkZWZpbmUgQU0yOUY4MDBCQgkweDIyNTgKKyNkZWZpbmUgQU0yOUY4MDBCVAkweDIyRDYKKyNkZWZpbmUgQU0yOUxWNDAwQkIJMHgyMkJBCisjZGVmaW5lIEFNMjlMVjQwMEJUCTB4MjJCOQorI2RlZmluZSBBTTI5TFY4MDBCQgkweDIyNUIKKyNkZWZpbmUgQU0yOUxWODAwQlQJMHgyMkRBCisjZGVmaW5lIEFNMjlMVjE2MERUCTB4MjJDNAorI2RlZmluZSBBTTI5TFYxNjBEQgkweDIyNDkKKyNkZWZpbmUgQU0yOUYwMTdECTB4MDAzRAorI2RlZmluZSBBTTI5RjAxNkQJMHgwMEFECisjZGVmaW5lIEFNMjlGMDgwCTB4MDBENQorI2RlZmluZSBBTTI5RjA0MAkweDAwQTQKKyNkZWZpbmUgQU0yOUxWMDQwQgkweDAwNEYKKyNkZWZpbmUgQU0yOUYwMzJCCTB4MDA0MQorI2RlZmluZSBBTTI5RjAwMlQJMHgwMEIwCisKKy8qIFNTVCAqLworI2RlZmluZSBTU1QzOUxGODAwCTB4Mjc4MQorI2RlZmluZSBTU1QzOUxGMTYwCTB4Mjc4MgorI2RlZmluZSBTU1QzOVZGMTYwMQkweDIzNGIKKyNkZWZpbmUgU1NUMzlMRjUxMgkweDAwRDQKKyNkZWZpbmUgU1NUMzlMRjAxMAkweDAwRDUKKyNkZWZpbmUgU1NUMzlMRjAyMAkweDAwRDYKKyNkZWZpbmUgU1NUMzlMRjA0MAkweDAwRDcKKyNkZWZpbmUgU1NUMzlTRjAxMEEJMHgwMEI1CisjZGVmaW5lIFNTVDM5U0YwMjBBCTB4MDBCNgorCisKKy8qCisgKiBVbmxvY2sgYWRkcmVzcyBzZXRzIGZvciBBTUQgY29tbWFuZCBzZXRzLgorICogSW50ZWwgY29tbWFuZCBzZXRzIHVzZSB0aGUgTVREX1VBRERSX1VOTkVDRVNTQVJZLgorICogRWFjaCBpZGVudGlmaWVyLCBleGNlcHQgTVREX1VBRERSX1VOTkVDRVNTQVJZLCBhbmQKKyAqIE1URF9VQUREUl9OT19TVVBQT1JUIG11c3QgYmUgZGVmaW5lZCBiZWxvdyBpbiB1bmxvY2tfYWRkcnNbXS4KKyAqIE1URF9VQUREUl9OT1RfU1VQUE9SVEVEIG11c3QgYmUgMCBzbyB0aGF0IHN0cnVjdHVyZQorICogaW5pdGlhbGl6YXRpb24gbmVlZCBub3QgcmVxdWlyZSBpbml0aWFsaXppbmcgYWxsIG9mIHRoZQorICogdW5sb2NrIGFkZHJlc3NlcyBmb3IgYWxsIGJpdCB3aWR0aHMuCisgKi8KK2VudW0gdWFkZHIgeworCU1URF9VQUREUl9OT1RfU1VQUE9SVEVEID0gMCwJLyogZGF0YSB3aWR0aCBub3Qgc3VwcG9ydGVkICovCisJTVREX1VBRERSXzB4MDU1NV8weDAyQUEsCisJTVREX1VBRERSXzB4MDU1NV8weDBBQUEsCisJTVREX1VBRERSXzB4NTU1NV8weDJBQUEsCisJTVREX1VBRERSXzB4MEFBQV8weDA1NTUsCisJTVREX1VBRERSX0RPTlRfQ0FSRSwJCS8qIFJlcXVpcmVzIGFuIGFyYml0cmFyeSBhZGRyZXNzICovCisJTVREX1VBRERSX1VOTkVDRVNTQVJZLAkJLyogRG9lcyBub3QgcmVxdWlyZSBhbnkgYWRkcmVzcyAqLworfTsKKworCitzdHJ1Y3QgdW5sb2NrX2FkZHIgeworCXUzMiBhZGRyMTsKKwl1MzIgYWRkcjI7Cit9OworCisKKy8qCisgKiBJIGRvbid0IGxpa2UgdGhlIGZhY3QgdGhhdCB0aGUgZmlyc3QgZW50cnkgaW4gdW5sb2NrX2FkZHJzW10KKyAqIGV4aXN0cywgYnV0IGlzIGZvciBNVERfVUFERFJfTk9UX1NVUFBPUlRFRCAtIGFuZCwgdGhlcmVmb3JlLAorICogc2hvdWxkIG5vdCBiZSB1c2VkLiAgVGhlICBwcm9ibGVtIGlzIHRoYXQgc3RydWN0dXJlcyB3aXRoCisgKiBpbml0aWFsaXplcnMgaGF2ZSBleHRyYSBmaWVsZHMgaW5pdGlhbGl6ZWQgdG8gMC4gIEl0IGlzIF92ZXJ5XworICogZGVzaXJlYWJsZSB0byBoYXZlIHRoZSB1bmxvY2sgYWRkcmVzcyBlbnRyaWVzIGZvciB1bnN1cHBvcnRlZAorICogZGF0YSB3aWR0aHMgYXV0b21hdGljYWxseSBpbml0aWFsaXplZCAtIHRoYXQgbWVhbnMgdGhhdAorICogTVREX1VBRERSX05PVF9TVVBQT1JURUQgbXVzdCBiZSAwIGFuZCB0aGUgZmlyc3QgZW50cnkgaGVyZQorICogbXVzdCBnbyB1bnVzZWQuCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdW5sb2NrX2FkZHIgIHVubG9ja19hZGRyc1tdID0geworCVtNVERfVUFERFJfTk9UX1NVUFBPUlRFRF0gPSB7CisJCS5hZGRyMSA9IDB4ZmZmZiwKKwkJLmFkZHIyID0gMHhmZmZmCisJfSwKKworCVtNVERfVUFERFJfMHgwNTU1XzB4MDJBQV0gPSB7CisJCS5hZGRyMSA9IDB4MDU1NSwKKwkJLmFkZHIyID0gMHgwMmFhCisJfSwKKworCVtNVERfVUFERFJfMHgwNTU1XzB4MEFBQV0gPSB7CisJCS5hZGRyMSA9IDB4MDU1NSwKKwkJLmFkZHIyID0gMHgwYWFhCisJfSwKKworCVtNVERfVUFERFJfMHg1NTU1XzB4MkFBQV0gPSB7CisJCS5hZGRyMSA9IDB4NTU1NSwKKwkJLmFkZHIyID0gMHgyYWFhCisJfSwKKworCVtNVERfVUFERFJfMHgwQUFBXzB4MDU1NV0gPSB7CisJCS5hZGRyMSA9IDB4MEFBQSwKKwkJLmFkZHIyID0gMHgwNTU1CisJfSwKKworCVtNVERfVUFERFJfRE9OVF9DQVJFXSA9IHsKKwkJLmFkZHIxID0gMHgwMDAwLCAgICAgIC8qIERvZXNuJ3QgbWF0dGVyIHdoaWNoIGFkZHJlc3MgKi8KKwkJLmFkZHIyID0gMHgwMDAwICAgICAgIC8qIGlzIHVzZWQgLSBtdXN0IGJlIGxhc3QgZW50cnkgKi8KKwl9LAorCisJW01URF9VQUREUl9VTk5FQ0VTU0FSWV0gPSB7CisJCS5hZGRyMSA9IDB4MDAwMCwKKwkJLmFkZHIyID0gMHgwMDAwCisJfQorfTsKKworCitzdHJ1Y3QgYW1kX2ZsYXNoX2luZm8geworCWNvbnN0IF9fdTE2IG1mcl9pZDsKKwljb25zdCBfX3UxNiBkZXZfaWQ7CisJY29uc3QgY2hhciAqbmFtZTsKKwljb25zdCBpbnQgRGV2U2l6ZTsKKwljb25zdCBpbnQgTnVtRXJhc2VSZWdpb25zOworCWNvbnN0IGludCBDbWRTZXQ7CisJY29uc3QgX191OCB1YWRkcls0XTsJCS8qIHVubG9jayBhZGRycyBmb3IgOCwgMTYsIDMyLCA2NCAqLworCWNvbnN0IHVsb25nIHJlZ2lvbnNbNl07Cit9OworCisjZGVmaW5lIEVSQVNFSU5GTyhzaXplLGJsb2NrcykgKHNpemU8PDgpfChibG9ja3MtMSkKKworI2RlZmluZSBTSVpFXzY0S2lCICAxNgorI2RlZmluZSBTSVpFXzEyOEtpQiAxNworI2RlZmluZSBTSVpFXzI1NktpQiAxOAorI2RlZmluZSBTSVpFXzUxMktpQiAxOQorI2RlZmluZSBTSVpFXzFNaUIgICAyMAorI2RlZmluZSBTSVpFXzJNaUIgICAyMQorI2RlZmluZSBTSVpFXzRNaUIgICAyMgorI2RlZmluZSBTSVpFXzhNaUIgICAyMworCitzdGF0aWMgY29uc3Qgc3RydWN0IGFtZF9mbGFzaF9pbmZvIGplZGVjX3RhYmxlW10gPSB7CisjaWZkZWYgQ0ZHX0ZMQVNIX0xFR0FDWV8yNTZLeDgKKwl7CisJCS5tZnJfaWQJCT0gTUFOVUZBQ1RVUkVSX1NTVCwKKwkJLmRldl9pZAkJPSBTU1QzOUxGMDIwLAorCQkubmFtZQkJPSAiU1NUIDM5TEYwMjAiLAorCQkudWFkZHIJCT0geworCQkJWzBdID0gTVREX1VBRERSXzB4NTU1NV8weDJBQUEgLyogeDggKi8KKwkJfSwKKwkJLkRldlNpemUJPSBTSVpFXzI1NktpQiwKKwkJLkNtZFNldAkJPSBQX0lEX0FNRF9TVEQsCisJCS5OdW1FcmFzZVJlZ2lvbnM9IDEsCisJCS5yZWdpb25zCT0geworCQkJRVJBU0VJTkZPKDB4MDEwMDAsNjQpLAorCQl9CisJfSwKKyNlbmRpZgorI2lmZGVmIENGR19GTEFTSF9MRUdBQ1lfNTEyS3g4CisJeworCQkubWZyX2lkCQk9IE1BTlVGQUNUVVJFUl9BTUQsCisJCS5kZXZfaWQJCT0gQU0yOUxWMDQwQiwKKwkJLm5hbWUJCT0gIkFNRCBBTTI5TFYwNDBCIiwKKwkJLnVhZGRyCQk9IHsKKwkJCVswXSA9IE1URF9VQUREUl8weDA1NTVfMHgwMkFBIC8qIHg4ICovCisJCX0sCisJCS5EZXZTaXplCT0gU0laRV81MTJLaUIsCisJCS5DbWRTZXQJCT0gUF9JRF9BTURfU1RELAorCQkuTnVtRXJhc2VSZWdpb25zPSAxLAorCQkucmVnaW9ucwk9IHsKKwkJCUVSQVNFSU5GTygweDEwMDAwLDgpLAorCQl9CisJfSwKKwl7CisJCS5tZnJfaWQJCT0gTUFOVUZBQ1RVUkVSX1NTVCwKKwkJLmRldl9pZAkJPSBTU1QzOUxGMDQwLAorCQkubmFtZQkJPSAiU1NUIDM5TEYwNDAiLAorCQkudWFkZHIJCT0geworCQkJWzBdID0gTVREX1VBRERSXzB4NTU1NV8weDJBQUEgLyogeDggKi8KKwkJfSwKKwkJLkRldlNpemUJPSBTSVpFXzUxMktpQiwKKwkJLkNtZFNldAkJPSBQX0lEX0FNRF9TVEQsCisJCS5OdW1FcmFzZVJlZ2lvbnM9IDEsCisJCS5yZWdpb25zCT0geworCQkJRVJBU0VJTkZPKDB4MDEwMDAsMTI4KSwKKwkJfQorCX0sCisjZW5kaWYKK307CisKKworI2RlZmluZSBBUlJBWV9TSVpFKHgpIChzaXplb2YoeCkgLyBzaXplb2YoKHgpWzBdKSkKKworCitzdGF0aWMgaW5saW5lIHZvaWQgZmlsbF9pbmZvKGZsYXNoX2luZm9fdCAqaW5mbywgY29uc3Qgc3RydWN0IGFtZF9mbGFzaF9pbmZvICpqZWRlY19lbnRyeSwgdWxvbmcgYmFzZSkKK3sKKwlpbnQgaSxqOworCWludCBzZWN0X2NudDsKKwlpbnQgc2l6ZV9yYXRpbzsKKwlpbnQgdG90YWxfc2l6ZTsKKwllbnVtIHVhZGRyIHVhZGRyX2lkeDsKKworCXNpemVfcmF0aW8gPSBpbmZvLT5wb3J0d2lkdGggLyBpbmZvLT5jaGlwd2lkdGg7CisKKwlkZWJ1ZygiRm91bmQgSkVERUMgRmxhc2g6ICVzXG4iLCBqZWRlY19lbnRyeS0+bmFtZSk7CisJaW5mby0+dmVuZG9yID0gamVkZWNfZW50cnktPkNtZFNldDsKKwkvKiBUb2RvOiBkbyB3ZSBuZWVkIGRldmljZS1zcGVjaWZpYyB0aW1lb3V0cz8gKi8KKwlpbmZvLT5lcmFzZV9ibGtfdG91dCA9IDMwMDAwOworCWluZm8tPmJ1ZmZlcl93cml0ZV90b3V0ID0gMTAwMDsKKwlpbmZvLT53cml0ZV90b3V0ID0gMTAwOworCWluZm8tPm5hbWUgPSBqZWRlY19lbnRyeS0+bmFtZTsKKworCS8qIGNvcHkgdW5sb2NrIGFkZHJlc3NlcyBmcm9tIGRldmljZSB0YWJsZSB0byBDRkkgaW5mbyBzdHJ1Y3QuIFRoaXMKKwkgICBpcyBqdXN0IGhlcmUgYmVjYXVzZSB0aGUgYWRkcmVzc2VzIGFyZSBpbiB0aGUgdGFibGUgYW55d2F5IC0gaWYKKwkgICB0aGUgZmxhc2ggaXMgbm90IGRldGVjdGVkIGR1ZSB0byB3cm9uZyB1bmxvY2sgYWRkcmVzc2VzLAorCSAgIGZsYXNoX2RldGVjdF9sZWdhY3kgd291bGQgaGF2ZSB0byB0cnkgYWxsIG9mIHRoZW0gYmVmb3JlIHdlIGV2ZW4KKwkgICBnZXQgaGVyZS4gKi8KKwlzd2l0Y2goaW5mby0+Y2hpcHdpZHRoKSB7CisJY2FzZSBGTEFTSF9DRklfOEJJVDoKKwkJdWFkZHJfaWR4ID0gamVkZWNfZW50cnktPnVhZGRyWzBdOworCQlicmVhazsKKwljYXNlIEZMQVNIX0NGSV8xNkJJVDoKKwkJdWFkZHJfaWR4ID0gamVkZWNfZW50cnktPnVhZGRyWzFdOworCQlicmVhazsKKwljYXNlIEZMQVNIX0NGSV8zMkJJVDoKKwkJdWFkZHJfaWR4ID0gamVkZWNfZW50cnktPnVhZGRyWzJdOworCQlicmVhazsKKwlkZWZhdWx0OgorCQl1YWRkcl9pZHggPSBNVERfVUFERFJfTk9UX1NVUFBPUlRFRDsKKwkJYnJlYWs7CisJfQorCisJZGVidWcoInVubG9jayBhZGRyZXNzIGluZGV4ICVkXG4iLCB1YWRkcl9pZHgpOworCWluZm8tPmFkZHJfdW5sb2NrMSA9IHVubG9ja19hZGRyc1t1YWRkcl9pZHhdLmFkZHIxOworCWluZm8tPmFkZHJfdW5sb2NrMiA9IHVubG9ja19hZGRyc1t1YWRkcl9pZHhdLmFkZHIyOworCWRlYnVnKCJ1bmxvY2sgYWRkcmVzc2VzIGFyZSAweCV4LzB4JXhcbiIsIGluZm8tPmFkZHJfdW5sb2NrMSwgaW5mby0+YWRkcl91bmxvY2syKTsKKworCXNlY3RfY250ID0gMDsKKwl0b3RhbF9zaXplID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgamVkZWNfZW50cnktPk51bUVyYXNlUmVnaW9uczsgaSsrKSB7CisJCXVsb25nIGVyYXNlX3JlZ2lvbl9zaXplID0gamVkZWNfZW50cnktPnJlZ2lvbnNbaV0gPj4gODsKKwkJdWxvbmcgZXJhc2VfcmVnaW9uX2NvdW50ID0gKGplZGVjX2VudHJ5LT5yZWdpb25zW2ldICYgMHhmZikgKyAxOworCisJCXRvdGFsX3NpemUgKz0gZXJhc2VfcmVnaW9uX3NpemUgKiBlcmFzZV9yZWdpb25fY291bnQ7CisJCWRlYnVnICgiZXJhc2VfcmVnaW9uX2NvdW50ID0gJWQgZXJhc2VfcmVnaW9uX3NpemUgPSAlZFxuIiwKKwkJICAgICAgIGVyYXNlX3JlZ2lvbl9jb3VudCwgZXJhc2VfcmVnaW9uX3NpemUpOworCQlmb3IgKGogPSAwOyBqIDwgZXJhc2VfcmVnaW9uX2NvdW50OyBqKyspIHsKKwkJCWlmIChzZWN0X2NudCA+PSBDRkdfTUFYX0ZMQVNIX1NFQ1QpIHsKKwkJCQlwcmludGYoIkVSUk9SOiB0b28gbWFueSBmbGFzaCBzZWN0b3JzXG4iKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWluZm8tPnN0YXJ0W3NlY3RfY250XSA9IGJhc2U7CisJCQliYXNlICs9IChlcmFzZV9yZWdpb25fc2l6ZSAqIHNpemVfcmF0aW8pOworCQkJc2VjdF9jbnQrKzsKKwkJfQorCX0KKwlpbmZvLT5zZWN0b3JfY291bnQgPSBzZWN0X2NudDsKKwlpbmZvLT5zaXplID0gdG90YWxfc2l6ZSAqIHNpemVfcmF0aW87Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIG1hdGNoIGplZGVjIGlkcyBhZ2FpbnN0IHRhYmxlLiBJZiBhIG1hdGNoIGlzIGZvdW5kLCBmaWxsIGZsYXNoX2luZm8gZW50cnkKKyAqLworaW50IGplZGVjX2ZsYXNoX21hdGNoKGZsYXNoX2luZm9fdCAqaW5mbywgdWxvbmcgYmFzZSkKK3sKKwlpbnQgcmV0ID0gMDsKKwlpbnQgaTsKKwl1bG9uZyBtYXNrID0gMHhGRkZGOworCWlmIChpbmZvLT5jaGlwd2lkdGggPT0gMSkKKwkJbWFzayA9IDB4RkY7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShqZWRlY190YWJsZSk7IGkrKykgeworCQlpZiAoKGplZGVjX3RhYmxlW2ldLm1mcl9pZCAmIG1hc2spID09IChpbmZvLT5tYW51ZmFjdHVyZXJfaWQgJiBtYXNrKSAmJgorCQkgICAgKGplZGVjX3RhYmxlW2ldLmRldl9pZCAmIG1hc2spID09IChpbmZvLT5kZXZpY2VfaWQgJiBtYXNrKSkgeworCQkJZmlsbF9pbmZvKGluZm8sICZqZWRlY190YWJsZVtpXSwgYmFzZSk7CisJCQlyZXQgPSAxOworCQkJYnJlYWs7CisJCX0KKwl9CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2ZzbF9wY2lfaW5pdC5jIGIvZHJpdmVycy9wY2kvZnNsX3BjaV9pbml0LmMKaW5kZXggMWU3Nzg4NC4uNjhlNDVlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvZnNsX3BjaV9pbml0LmMKKysrIGIvZHJpdmVycy9wY2kvZnNsX3BjaV9pbml0LmMKQEAgLTExMiw2ICsxMTIsMjkgQEAKIAkJcGNpX2hvc2VfcmVhZF9jb25maWdfd29yZChob3NlLCBkZXYsIFBDSV9MVFNTTSwgJmx0c3NtKTsKIAkJZW5hYmxlZCA9IGx0c3NtID49IFBDSV9MVFNTTV9MMDsKIAorI2lmZGVmIENPTkZJR19GU0xfUENJRV9SRVNFVAorCQlpZiAobHRzc20gPT0gMSkgeworCQkJaW50IGk7CisJCQlkZWJ1ZygiLi4uLlBDSWUgbGluayBlcnJvci4gIgorCQkJICAgICAgIkxUU1NNPTB4JTAyeC4iLCBsdHNzbSk7CisJCQlwY2ktPnBkYl9zdGF0IHw9IDB4MDgwMDAwMDA7IC8qIGFzc2VydCBQQ0llIHJlc2V0ICovCisJCQl0ZW1wMzIgPSBwY2ktPnBkYl9zdGF0OworCQkJdWRlbGF5KDEwMCk7CisJCQlkZWJ1ZygiICBBc3NlcnRpbmcgUENJZSByZXNldCBAJXggPSAleFxuIiwKKwkJCSAgICAgICZwY2ktPnBkYl9zdGF0LCBwY2ktPnBkYl9zdGF0KTsKKwkJCXBjaS0+cGRiX3N0YXQgJj0gfjB4MDgwMDAwMDA7IC8qIGNsZWFyIHJlc2V0ICovCisJCQlhc20oInN5bmM7aXN5bmMiKTsKKwkJCWZvciAoaT0wOyBpPDEwMCAmJiBsdHNzbSA8IFBDSV9MVFNTTV9MMDsgaSsrKSB7CisJCQkJcGNpX2hvc2VfcmVhZF9jb25maWdfd29yZChob3NlLCBkZXYsIFBDSV9MVFNTTSwKKwkJCQkJCQkmbHRzc20pOworCQkJCXVkZWxheSgxMDAwKTsKKwkJCQlkZWJ1ZygiLi4uLlBDSWUgbGluayBlcnJvci4gIgorCQkJCSAgICAgICJMVFNTTT0weCUwMnguXG4iLCBsdHNzbSk7CisJCQl9CisJCQllbmFibGVkID0gbHRzc20gPj0gUENJX0xUU1NNX0wwOworCQl9CisjZW5kaWYKKwogCQlpZiAoIWVuYWJsZWQpIHsKIAkJCWRlYnVnKCIuLi4uUENJRSBsaW5rIGVycm9yLiAgU2tpcHBpbmcgc2Nhbi4iCiAJCQkgICAgICAiTFRTU009MHglMDJ4XG4iLCBsdHNzbSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9NYWtlZmlsZSBiL2RyaXZlcnMvcGNtY2lhL01ha2VmaWxlCmluZGV4IDU1NTI4YzguLmJiYTFhYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvcGNtY2lhL01ha2VmaWxlCkBAIC0zMCw2ICszMCw3IEBACiBDT0JKUy15ICs9IHJweF9wY21jaWEubwogQ09CSlMteSArPSB0aV9wY2kxNDEwYS5vCiBDT0JKUy15ICs9IHRxbTh4eF9wY21jaWEubworQ09CSlMteSArPSBtYXJ1YnVuX3BjbWNpYS5vCiAKIENPQkpTCTo9ICQoQ09CSlMteSkKIFNSQ1MgCTo9ICQoQ09CSlM6Lm89LmMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9tYXJ1YnVuX3BjbWNpYS5jIGIvZHJpdmVycy9wY21jaWEvbWFydWJ1bl9wY21jaWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjExMmFmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9wY21jaWEvbWFydWJ1bl9wY21jaWEuYwpAQCAtMCwwICsxLDExMyBAQAorLyoKKyAqIE1hcnVidW4gTVItU0hQQy0wMSBQQ01DSUEgY29udHJvbGxlciBkZXZpY2UgZHJpdmVyCisgKgorICogKGMpIDIwMDcgTm9idWhpcm8gSXdhbWF0c3UgPGl3YW1hdHN1QG5pZ2F1cmkub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICoKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8cGNtY2lhLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKKyNpZgkoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9QQ01DSUEpCisjZGVmaW5lCUNPTkZJR19QQ01DSUEKKyNlbmRpZgorCisjaWYJKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfSURFKQorI2RlZmluZQlDT05GSUdfUENNQ0lBCisjZW5kaWYKKworI2lmCWRlZmluZWQoQ09ORklHX1BDTUNJQSkgIFwKKwkgICAgICAgICYmIChkZWZpbmVkKENPTkZJR19NQVJVQlVOX1BDQ0FSRCkpCisKKy8qIE1SLVNIUEMtMDEgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTVJTSFBDX01PREUgICAJKENGR19NQVJVQlVOX01SU0hQQyArIDQpCisjZGVmaW5lIE1SU0hQQ19PUFRJT04gICAoQ0ZHX01BUlVCVU5fTVJTSFBDICsgNikKKyNkZWZpbmUgTVJTSFBDX0NTUiAgICAgIChDRkdfTUFSVUJVTl9NUlNIUEMgKyA4KQorI2RlZmluZSBNUlNIUENfSVNSICAgICAgKENGR19NQVJVQlVOX01SU0hQQyArIDEwKQorI2RlZmluZSBNUlNIUENfSUNSICAgICAgKENGR19NQVJVQlVOX01SU0hQQyArIDEyKQorI2RlZmluZSBNUlNIUENfQ1BXQ1IgICAgKENGR19NQVJVQlVOX01SU0hQQyArIDE0KQorI2RlZmluZSBNUlNIUENfTVcwQ1IxICAgKENGR19NQVJVQlVOX01SU0hQQyArIDE2KQorI2RlZmluZSBNUlNIUENfTVcxQ1IxICAgKENGR19NQVJVQlVOX01SU0hQQyArIDE4KQorI2RlZmluZSBNUlNIUENfSU9XQ1IxICAgKENGR19NQVJVQlVOX01SU0hQQyArIDIwKQorI2RlZmluZSBNUlNIUENfTVcwQ1IyICAgKENGR19NQVJVQlVOX01SU0hQQyArIDIyKQorI2RlZmluZSBNUlNIUENfTVcxQ1IyICAgKENGR19NQVJVQlVOX01SU0hQQyArIDI0KQorI2RlZmluZSBNUlNIUENfSU9XQ1IyICAgKENGR19NQVJVQlVOX01SU0hQQyArIDI2KQorI2RlZmluZSBNUlNIUENfQ0RDUiAgICAgKENGR19NQVJVQlVOX01SU0hQQyArIDI4KQorI2RlZmluZSBNUlNIUENfUENJQ19JTkZPIChDRkdfTUFSVUJVTl9NUlNIUEMgKyAzMCkKKworaW50IHBjbWNpYV9vbiAodm9pZCkKK3sKKwlwcmludGYoIkVuYWJsZSBQQ01DSUEgIiBQQ01DSUFfU0xPVF9NU0cgIlxuIik7CisKKwkvKiBJbml0ICovCisJb3V0dyggMHgwMDAwICwgTVJTSFBDX01PREUgKTsKKworCWlmICgoaW53KE1SU0hQQ19DU1IpICYgMHgwMDBjKSA9PSAwKXsJLyogaWYgY2FyZCBkZXRlY3QgaXMgdHJ1ZSAqLworCQlpZiAoKGludyhNUlNIUENfQ1NSKSAmIDB4MDA4MCkgPT0gMCl7CisJCQlvdXR3KDB4MDY3NCAsTVJTSFBDX0NQV0NSKTsgIC8qIENhcmQgVmNjIGlzIDMuM3Y/ICovCisJCX1lbHNleworCQkJb3V0dygweDA2NzggLE1SU0hQQ19DUFdDUik7ICAvKiBDYXJkIFZjYyBpcyA1ViAqLworCQl9CisJCXVkZWxheSggMTAwMDAwICk7ICAgLyogd2FpdCBmb3IgcG93ZXIgb24gKi8KKwl9ZWxzZXsKKwkJcmV0dXJuIDE7CisJfQorCS8qCisJICoJUEMtQ2FyZCB3aW5kb3cgb3BlbgorCSAqCWZsYWcgPT0gQ09NTU9OL0FUVFJJQlVURS9JTworCSAqLworCS8qIGNvbW1vbiB3aW5kb3cgb3BlbiAqLworCW91dHcoMHg4YTg0LE1SU0hQQ19NVzBDUjEpOyAvKiB3aW5kb3cgMHhiODQwMDAwMCAqLworCWlmICgoaW53KE1SU0hQQ19DU1IpICYgMHg0MDAwKSAhPSAwKQorCQlvdXR3KDB4MGIwMCxNUlNIUENfTVcwQ1IyKTsgLyogY29tbW9uIG1vZGUgJiBidXMgd2lkdGggMTZiaXQgU1dBUCA9IDEgKi8KKwllbHNlCisJCW91dHcoMHgwMzAwLE1SU0hQQ19NVzBDUjIpOyAvKiBjb21tb24gbW9kZSAmIGJ1cyB3aWR0aCAxNmJpdCBTV0FQID0gMCAqLworCisJLyogYXR0cmlidXRlIHdpbmRvdyBvcGVuICovCisJb3V0dygweDhhODUsTVJTSFBDX01XMUNSMSk7IC8qIHdpbmRvdyAweGI4NTAwMDAwICovCisJaWYgKChpbncoTVJTSFBDX0NTUikgJiAweDQwMDApICE9IDApCisJCW91dHcoMHgwYTAwLE1SU0hQQ19NVzFDUjIpOyAvKiBhdHRyaWJ1dGUgbW9kZSAmIGJ1cyB3aWR0aCAxNmJpdCBTV0FQID0gMSAqLworCWVsc2UKKwkJb3V0dygweDAyMDAsTVJTSFBDX01XMUNSMik7IC8qIGF0dHJpYnV0ZSBtb2RlICYgYnVzIHdpZHRoIDE2Yml0IFNXQVAgPSAwICovCisKKwkvKiBJL08gd2luZG93IG9wZW4gKi8KKwlvdXR3KDB4OGE4NixNUlNIUENfSU9XQ1IxKTsgLyogSS9PIHdpbmRvdyAweGI4NjAwMDAwICovCisJb3V0dygweDAwMDgsTVJTSFBDX0NEQ1IpOyAgIC8qIEkvTyBjYXJkIG1vZGUgKi8KKwlpZiAoKGludyhNUlNIUENfQ1NSKSAmIDB4NDAwMCkgIT0gMCkKKwkJb3V0dygweDBhMDAsTVJTSFBDX0lPV0NSMik7IC8qIGJ1cyB3aWR0aCAxNmJpdCBTV0FQID0gMSAqLworCWVsc2UKKwkJb3V0dygweDAyMDAsTVJTSFBDX0lPV0NSMik7IC8qIGJ1cyB3aWR0aCAxNmJpdCBTV0FQID0gMCAqLworCisJb3V0dygweDAwMDAsTVJTSFBDX0lTUik7CisJb3V0dygweDIwMDAsTVJTSFBDX0lDUik7CisJb3V0YigweDAwLChDRkdfTUFSVUJVTl9NVzIgKyAweDIwNikpOworCW91dGIoMHg0MiwoQ0ZHX01BUlVCVU5fTVcyICsgMHgyMDApKTsKKworCXJldHVybiAwOworfQorCitpbnQgcGNtY2lhX29mZiAodm9pZCkKK3sKKwlwcmludGYgKCJEaXNhYmxlIFBDTUNJQSAiIFBDTUNJQV9TTE9UX01TRyAiXG4iKTsKKworCXJldHVybiAwOworfQorCisjZW5kaWYgLyogQ09ORklHX01BUlVCVU5fUENDQVJEICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9NYWtlZmlsZSBiL2RyaXZlcnMvc2VyaWFsL01ha2VmaWxlCmluZGV4IDczNWM2MzAuLmVlMmI3ODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc2VyaWFsL01ha2VmaWxlCkBAIC0zNSw2ICszNSw3IEBACiBDT0JKUy15ICs9IHNlcmlhbF9wbDAxMC5vCiBDT0JKUy15ICs9IHNlcmlhbF9wbDAxMS5vCiBDT0JKUy15ICs9IHNlcmlhbF94dWFydGxpdGUubworQ09CSlMteSArPSBzZXJpYWxfc2gubwogQ09CSlMteSArPSB1c2J0dHkubwogCiBDT0JKUwk6PSAkKENPQkpTLXkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfc2guYyBiL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9zaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlNDRiYTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfc2guYwpAQCAtMCwwICsxLDE3NyBAQAorLyoKKyAqIFN1cGVySCBTQ0lGIGRldmljZSBkcml2ZXIuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgTm9idWhpcm8gSXdhbWF0c3UKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKworI2lmZGVmIENGR19TQ0lGX0NPTlNPTEUKKworI2lmIGRlZmluZWQgKENPTkZJR19DT05TX1NDSUYwKQorI2RlZmluZSBTQ0lGX0JBU0UJU0NJRjBfQkFTRQorI2VsaWYgZGVmaW5lZCAoQ09ORklHX0NPTlNfU0NJRjEpCisjZGVmaW5lIFNDSUZfQkFTRQlTQ0lGMV9CQVNFCisjZWxzZQorI2Vycm9yICJEZWZhdWx0IFNDSUYgZG9lc24ndCBzZXQuLi4uLiIKKyNlbmRpZgorCisjZGVmaW5lIFNDU01SIAkodnVfc2hvcnQgKikoU0NJRl9CQVNFICsgMHgwKQorI2RlZmluZSBTQ0JSUiAJKHZ1X2NoYXIgICopKFNDSUZfQkFTRSArIDB4NCkKKyNkZWZpbmUgU0NTQ1IgCSh2dV9zaG9ydCAqKShTQ0lGX0JBU0UgKyAweDgpCisjZGVmaW5lIFNDRlREUiAJKHZ1X2NoYXIgICopKFNDSUZfQkFTRSArIDB4QykKKyNkZWZpbmUgU0NGU1IgCSh2dV9zaG9ydCAqKShTQ0lGX0JBU0UgKyAweDEwKQorI2RlZmluZSBTQ0ZSRFIgCSh2dV9jaGFyICAqKShTQ0lGX0JBU0UgKyAweDE0KQorI2RlZmluZSBTQ0ZDUiAJKHZ1X3Nob3J0ICopKFNDSUZfQkFTRSArIDB4MTgpCisjZGVmaW5lIFNDRkRSIAkodnVfc2hvcnQgKikoU0NJRl9CQVNFICsgMHgxQykKKyNpZiBkZWZpbmVkKENPTkZJR19TSDRBKQorI2RlZmluZSBTQ1JGRFIJKHZ1X3Nob3J0ICopKFNDSUZfQkFTRSArIDB4MjApCisjZGVmaW5lIFNDU1BUUgkodnVfc2hvcnQgKikoU0NJRl9CQVNFICsgMHgyNCkKKyNkZWZpbmUgU0NMU1IgICAodnVfc2hvcnQgKikoU0NJRl9CQVNFICsgMHgyOCkKKyNkZWZpbmUgU0NSRVIJKHZ1X3Nob3J0ICopKFNDSUZfQkFTRSArIDB4MkMpCisjZWxpZiBkZWZpbmVkIChDT05GSUdfU0g0KQorI2RlZmluZSBTQ1NQVFIgCSh2dV9zaG9ydCAqKShTQ0lGX0JBU0UgKyAweDIwKQorI2RlZmluZSBTQ0xTUiAJKHZ1X3Nob3J0ICopKFNDSUZfQkFTRSArIDB4MjQpCisjZWxpZiBkZWZpbmVkIChDT05GSUdfU0gzKQorI2RlZmluZSBTQ0xTUiAJKHZ1X3Nob3J0ICopKFNDSUZfQkFTRSArIDB4MjQpCisjZW5kaWYKKworI2RlZmluZSBTQ1JfUkUgCQkoMSA8PCA0KQorI2RlZmluZSBTQ1JfVEUgCQkoMSA8PCA1KQorI2RlZmluZSBGQ1JfUkZSU1QJKDEgPDwgMSkgLyogUkZDTCAqLworI2RlZmluZSBGQ1JfVEZSU1QJKDEgPDwgMikgLyogVEZDTCAqLworI2RlZmluZSBGU1JfRFIgICAJKDEgPDwgMCkKKyNkZWZpbmUgRlNSX1JERiAgCSgxIDw8IDEpCisjZGVmaW5lIEZTUl9GRVIgIAkoMSA8PCAzKQorI2RlZmluZSBGU1JfQlJLICAJKDEgPDwgNCkKKyNkZWZpbmUgRlNSX0ZFUiAgCSgxIDw8IDMpCisjZGVmaW5lIEZTUl9URU5EIAkoMSA8PCA2KQorI2RlZmluZSBGU1JfRVIgICAJKDEgPDwgNykKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwordm9pZCBzZXJpYWxfc2V0YnJnICh2b2lkKQoreworCURFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOworCWludCBkaXZpc29yID0gZ2QtPmJhdWRyYXRlICogMzI7CisKKwkqU0NCUlIgPSAoQ09ORklHX1NZU19DTEtfRlJFUSArIChkaXZpc29yIC8gMikpIC8KKwkJCQkJCShnZC0+YmF1ZHJhdGUgKiAzMikgLSAxOworfQorCitpbnQgc2VyaWFsX2luaXQgKHZvaWQpCit7CisJKlNDU0NSID0gKFNDUl9SRSB8IFNDUl9URSk7CisJKlNDU01SID0gMCA7CisJKlNDU01SID0gMDsKKwkqU0NGQ1IgPSAoRkNSX1JGUlNUIHwgRkNSX1RGUlNUKTsKKwkqU0NGQ1I7CisJKlNDRkNSID0gMDsKKworCXNlcmlhbF9zZXRicmcoKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZXJpYWxfdHhfZmlmb19sZXZlbCAodm9pZCkKK3sKKwlyZXR1cm4gKCpTQ0ZEUiA+PiA4KSAmIDB4MUY7Cit9CisKK3N0YXRpYyBpbnQgc2VyaWFsX3J4X2ZpZm9fbGV2ZWwgKHZvaWQpCit7CisJcmV0dXJuICgqU0NGRFIgPj4gMCkgJiAweDFGOworfQorCit2b2lkIHNlcmlhbF9yYXdfcHV0YyAoY29uc3QgY2hhciBjKQoreworCXVuc2lnbmVkIGludCBmc3JfYml0c190b19jbGVhcjsKKworCXdoaWxlICgxKSB7CisJCWlmICgqU0NGU1IgJiBGU1JfVEVORCkgewkJLyogVHggZmlmbyBpcyBlbXB0eSAqLworCQkJZnNyX2JpdHNfdG9fY2xlYXIgPSBGU1JfVEVORDsKKwkJCWJyZWFrOworCQl9CisJfQorCisJKlNDRlREUiA9IGM7CisJaWYgKGZzcl9iaXRzX3RvX2NsZWFyICE9IDApCisJCSpTQ0ZTUiAmPSB+ZnNyX2JpdHNfdG9fY2xlYXI7Cit9CisKK3ZvaWQgc2VyaWFsX3B1dGMgKGNvbnN0IGNoYXIgYykKK3sKKwlpZiAoYyA9PSAnXG4nKQorCQlzZXJpYWxfcmF3X3B1dGMgKCdccicpOworCXNlcmlhbF9yYXdfcHV0YyAoYyk7Cit9CisKK3ZvaWQgc2VyaWFsX3B1dHMgKGNvbnN0IGNoYXIgKnMpCit7CisJY2hhciBjOworCXdoaWxlICgoYyA9ICpzKyspICE9IDApCisJCXNlcmlhbF9wdXRjIChjKTsKK30KKworaW50IHNlcmlhbF90c3RjICh2b2lkKQoreworCXJldHVybiBzZXJpYWxfcnhfZmlmb19sZXZlbCgpID8gMSA6IDA7Cit9CisKKyNkZWZpbmUgRlNSX0VSUl9DTEVBUiAgIDB4MDA2MworI2RlZmluZSBSRFJGX0NMRUFSICAgICAgMHgwMGZjCisjZGVmaW5lIExTUl9PUkVSICAgICAgICAxCit2b2lkIGhhbmRsZV9lcnJvciggdm9pZCApeworCisJKHZvaWQpKlNDRlNSIDsKKwkqU0NGU1IgPSBGU1JfRVJSX0NMRUFSIDsKKwkodm9pZCkqU0NMU1IgOworCSpTQ0xTUiA9IDB4MDAgOworfQorCitpbnQgc2VyaWFsX2dldGNfY2hlY2soIHZvaWQgKXsKKwl1bnNpZ25lZCBzaG9ydCBzdGF0dXM7CisKKwlzdGF0dXMgPSAqU0NGU1IgOworCisJaWYgKHN0YXR1cyAmIChGU1JfRkVSIHwgRlNSX0ZFUiB8IEZTUl9FUiB8IEZTUl9CUkspKQorCQloYW5kbGVfZXJyb3IoKTsKKwlpZiggKlNDTFNSICYgTFNSX09SRVIgKQorCQloYW5kbGVfZXJyb3IoKTsKKwlyZXR1cm4gKHN0YXR1cyAmICggRlNSX0RSIHwgRlNSX1JERiApKTsKK30KKworaW50IHNlcmlhbF9nZXRjICh2b2lkKQoreworCXVuc2lnbmVkIHNob3J0IHN0YXR1cyA7CisJY2hhciBjaDsKKwl3aGlsZSghc2VyaWFsX2dldGNfY2hlY2soKSk7CisKKwljaCA9ICpTQ0ZSRFI7CisJc3RhdHVzID0gICpTQ0ZTUiA7CisKKwkqU0NGU1IgPSBSRFJGX0NMRUFSIDsKKworCWlmIChzdGF0dXMgJiAoRlNSX0ZFUiB8IEZTUl9GRVIgfCBGU1JfRVIgfCBGU1JfQlJLKSkKKwkJaGFuZGxlX2Vycm9yKCk7CisKKwlpZiggKlNDTFNSICYgTFNSX09SRVIgKQorCQloYW5kbGVfZXJyb3IoKTsKKworCXJldHVybiBjaCA7Cit9CisKKyNlbmRpZgkvKiBDRkdfU0NJRl9DT05TT0xFICovCmRpZmYgLS1naXQgYS9leGFtcGxlcy9NYWtlZmlsZSBiL2V4YW1wbGVzL01ha2VmaWxlCmluZGV4IGU5YjQ5NzQuLjcxYThjN2YgMTAwNjQ0Ci0tLSBhL2V4YW1wbGVzL01ha2VmaWxlCisrKyBiL2V4YW1wbGVzL01ha2VmaWxlCkBAIC02MSw2ICs2MSwxMSBAQAogTE9BRF9BRERSID0gMHgwMDAwMDAwMAogZW5kaWYKIAoraWZlcSAoJChBUkNIKSxzaCkKK0xPQURfQUREUiA9IDB4OEMwMDAwMDAKK2VuZGlmCisKKwogaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCiAKIEVMRgk9IGhlbGxvX3dvcmxkCmRpZmYgLS1naXQgYS9leGFtcGxlcy9zdHVicy5jIGIvZXhhbXBsZXMvc3R1YnMuYwppbmRleCAyNmRmNmUwLi41NzFjNGQ1IDEwMDY0NAotLS0gYS9leGFtcGxlcy9zdHVicy5jCisrKyBiL2V4YW1wbGVzL3N0dWJzLmMKQEAgLTEzMiw3ICsxMzIsNyBAQAogICovCiAjZGVmaW5lIEVYUE9SVF9GVU5DKHgpCQkJXAogCWFzbSB2b2xhdGlsZSAoCQkJXAotIiAgICAgICAuZ2xvYmwgXyIgI3ggIlxuXyIJCVwKKyIJLmdsb2JsIF8iICN4ICJcbl8iCQlcCiAjeCAiOlxuIgkJCQlcCiAiCVAwID0gW1A1ICsgJTBdXG4iCQlcCiAiCVAwID0gW1AwICsgJTFdXG4iCQlcCkBAIC0xNTEsNiArMTUxLDIyIEBACiAJCToJCQkJCVwKIAkJOiAiaSIob2Zmc2V0b2YoZ2RfdCwganQpKSwgImkiKFhGXyAjI3gpCVwKIAkJOiAicjgiKTsKKyNlbGlmIGRlZmluZWQoQ09ORklHX1NIKQorLyoKKyAqIHIxMyBob2xkcyB0aGUgcG9pbnRlciB0byB0aGUgZ2xvYmFsX2RhdGEuIHIxIGlzIGEgY2FsbCBjbG9iYmVyZWQuCisgKi8KKyNkZWZpbmUgRVhQT1JUX0ZVTkMoeCkJCQkJCVwKKwlhc20gdm9sYXRpbGUgKAkJCQkJXAorCQkiCS5hbGlnbgkyXG4iCQkJXAorCQkiCS5nbG9ibCAiICN4ICJcbiIJCVwKKwkJI3ggIjpcbiIJCQkJXAorCQkiCW1vdglyMTMsIHIxXG4iCQlcCisJCSIJYWRkCSUwLCByMVxuIgkJXAorCQkiCWFkZAklMSwgcjFcbiIJCVwKKwkJIglqbXAJQHIxXG4iCQkJXAorCQkiCW5vcFxuIgkJCQlcCisJCSIJbm9wXG4iCQkJCVwKKwkJOiA6ICJpIihvZmZzZXRvZihnZF90LCBqdCkpLCAiaSIoWEZfICMjIHggKiBzaXplb2Yodm9pZCAqKSkgOiAicjEiKTsKICNlbHNlCiAjZXJyb3Igc3R1YnMgZGVmaW5pdGlvbiBtaXNzaW5nIGZvciB0aGlzIGFyY2hpdGVjdHVyZQogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vaW8uaCBiL2luY2x1ZGUvYXNtLWFybS9pby5oCmluZGV4IDQ3YzE4ZTcuLjAyOWI3ZjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9pby5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9pby5oCkBAIC0zNCw2ICszNCwzMiBAQAogfQogCiAvKgorICogR2l2ZW4gYSBwaHlzaWNhbCBhZGRyZXNzIGFuZCBhIGxlbmd0aCwgcmV0dXJuIGEgdmlydHVhbCBhZGRyZXNzCisgKiB0aGF0IGNhbiBiZSB1c2VkIHRvIGFjY2VzcyB0aGUgbWVtb3J5IHJhbmdlIHdpdGggdGhlIGNhY2hpbmcKKyAqIHByb3BlcnRpZXMgc3BlY2lmaWVkIGJ5ICJmbGFncyIuCisgKi8KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBwaHlzX2FkZHJfdDsKKworI2RlZmluZSBNQVBfTk9DQUNIRQkoMCkKKyNkZWZpbmUgTUFQX1dSQ09NQklORQkoMCkKKyNkZWZpbmUgTUFQX1dSQkFDSwkoMCkKKyNkZWZpbmUgTUFQX1dSVEhST1VHSAkoMCkKKworc3RhdGljIGlubGluZSB2b2lkICoKK21hcF9waHlzbWVtKHBoeXNfYWRkcl90IHBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlyZXR1cm4gKHZvaWQgKilwYWRkcjsKK30KKworLyoKKyAqIFRha2UgZG93biBhIG1hcHBpbmcgc2V0IHVwIGJ5IG1hcF9waHlzbWVtKCkuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB1bm1hcF9waHlzbWVtKHZvaWQgKnZhZGRyLCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCit9CisKKy8qCiAgKiBHZW5lcmljIHZpcnR1YWwgcmVhZC93cml0ZS4gIE5vdGUgdGhhdCB3ZSBkb24ndCBzdXBwb3J0IGhhbGYtd29yZAogICogcmVhZC93cml0ZXMuICBXZSBkZWZpbmUgX19hcmNoXypbYmxdIGhlcmUsIGFuZCBsZWF2ZSBfX2FyY2hfKncKICAqIHRvIHRoZSBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgY29kZS4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWF2cjMyL2FyY2gtYXQzMmFwNzAweC9jaGlwLWZlYXR1cmVzLmggYi9pbmNsdWRlL2FzbS1hdnIzMi9hcmNoLWF0MzJhcDcwMHgvY2hpcC1mZWF0dXJlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5YjFmZDYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hdnIzMi9hcmNoLWF0MzJhcDcwMHgvY2hpcC1mZWF0dXJlcy5oCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXRtZWwgQ29ycG9yYXRpb24KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworI2lmbmRlZiBfX0FTTV9BVlIzMl9BUkNIX0NISVBfRkVBVFVSRVNfSF9fCisjZGVmaW5lIF9fQVNNX0FWUjMyX0FSQ0hfQ0hJUF9GRUFUVVJFU19IX18KKworLyogQ3VycmVudGx5LCBhbGwgdGhlIEFQNzAweCBjaGlwcyBoYXZlIHRoZXNlICovCisjZGVmaW5lIEFUMzJBUDcwMHhfQ0hJUF9IQVNfVVNBUlQKKyNkZWZpbmUgQVQzMkFQNzAweF9DSElQX0hBU19NTUNJCisKKy8qIE9ubHkgQVA3MDAwIGhhcyBldGhlcm5ldCBpbnRlcmZhY2UgKi8KKyNpZmRlZiBDT05GSUdfQVQzMkFQNzAwMAorI2RlZmluZSBBVDMyQVA3MDB4X0NISVBfSEFTX01BQ0IKKyNlbmRpZgorCisjZW5kaWYgLyogX19BU01fQVZSMzJfQVJDSF9DSElQX0ZFQVRVUkVTX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXZyMzIvYXJjaC1hdDMyYXA3MDAwL2Nsay5oIGIvaW5jbHVkZS9hc20tYXZyMzIvYXJjaC1hdDMyYXA3MDB4L2Nsay5oCnNpbWlsYXJpdHkgaW5kZXggOTIlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLWF2cjMyL2FyY2gtYXQzMmFwNzAwMC9jbGsuaApyZW5hbWUgdG8gaW5jbHVkZS9hc20tYXZyMzIvYXJjaC1hdDMyYXA3MDB4L2Nsay5oCmluZGV4IDdlMjBkOTcuLmVhODRjMDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWF2cjMyL2FyY2gtYXQzMmFwNzAwMC9jbGsuaAorKysgYi9pbmNsdWRlL2FzbS1hdnIzMi9hcmNoLWF0MzJhcDcwMHgvY2xrLmgKQEAgLTIyLDYgKzIyLDggQEAKICNpZm5kZWYgX19BU01fQVZSMzJfQVJDSF9DTEtfSF9fCiAjZGVmaW5lIF9fQVNNX0FWUjMyX0FSQ0hfQ0xLX0hfXwogCisjaW5jbHVkZSA8YXNtL2FyY2gvY2hpcC1mZWF0dXJlcy5oPgorCiAjaWZkZWYgQ09ORklHX1BMTAogI2RlZmluZSBNQUlOX0NMS19SQVRFICgoQ0ZHX09TQzBfSFogLyBDRkdfUExMMF9ESVYpICogQ0ZHX1BMTDBfTVVMKQogI2Vsc2UKQEAgLTUwLDEwICs1MiwxMyBAQAogewogCXJldHVybiBnZXRfaHNiX2Nsa19yYXRlKCk7CiB9CisjaWZkZWYgQVQzMkFQNzAweF9DSElQX0hBU19VU0FSVAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdldF91c2FydF9jbGtfcmF0ZSh1bnNpZ25lZCBpbnQgZGV2X2lkKQogewogCXJldHVybiBnZXRfcGJhX2Nsa19yYXRlKCk7CiB9CisjZW5kaWYKKyNpZmRlZiBBVDMyQVA3MDB4X0NISVBfSEFTX1VTQVJUCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2V0X21hY2JfcGNsa19yYXRlKHVuc2lnbmVkIGludCBkZXZfaWQpCiB7CiAJcmV0dXJuIGdldF9wYmJfY2xrX3JhdGUoKTsKQEAgLTYyLDkgKzY3LDEyIEBACiB7CiAJcmV0dXJuIGdldF9oc2JfY2xrX3JhdGUoKTsKIH0KKyNlbmRpZgorI2lmZGVmIEFUMzJBUDcwMHhfQ0hJUF9IQVNfTU1DSQogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdldF9tY2lfY2xrX3JhdGUodm9pZCkKIHsKIAlyZXR1cm4gZ2V0X3BiYl9jbGtfcmF0ZSgpOwogfQorI2VuZGlmCiAKICNlbmRpZiAvKiBfX0FTTV9BVlIzMl9BUkNIX0NMS19IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWF2cjMyL2FyY2gtYXQzMmFwNzAwMC9ncGlvLmggYi9pbmNsdWRlL2FzbS1hdnIzMi9hcmNoLWF0MzJhcDcwMHgvZ3Bpby5oCnNpbWlsYXJpdHkgaW5kZXggOTclCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLWF2cjMyL2FyY2gtYXQzMmFwNzAwMC9ncGlvLmgKcmVuYW1lIHRvIGluY2x1ZGUvYXNtLWF2cjMyL2FyY2gtYXQzMmFwNzAweC9ncGlvLmgKaW5kZXggZTQ4MTJkNC4uYjEwYTNlNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXZyMzIvYXJjaC1hdDMyYXA3MDAwL2dwaW8uaAorKysgYi9pbmNsdWRlL2FzbS1hdnIzMi9hcmNoLWF0MzJhcDcwMHgvZ3Bpby5oCkBAIC0yMiw2ICsyMiw3IEBACiAjaWZuZGVmIF9fQVNNX0FWUjMyX0FSQ0hfR1BJT19IX18KICNkZWZpbmUgX19BU01fQVZSMzJfQVJDSF9HUElPX0hfXwogCisjaW5jbHVkZSA8YXNtL2FyY2gvY2hpcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL21lbW9yeS1tYXAuaD4KIAogI2RlZmluZSBOUl9HUElPX0NPTlRST0xMRVJTCTUKQEAgLTIwMSwxMiArMjAyLDE5IEBACiB2b2lkIGdwaW9fc2VsZWN0X3BlcmlwaF9CKHVuc2lnbmVkIGludCBwaW4sIGludCB1c2VfcHVsbHVwKTsKIAogdm9pZCBncGlvX2VuYWJsZV9lYmkodm9pZCk7CisKKyNpZmRlZiBBVDMyQVA3MDB4X0NISVBfSEFTX1VTQVJUCiB2b2lkIGdwaW9fZW5hYmxlX3VzYXJ0MCh2b2lkKTsKIHZvaWQgZ3Bpb19lbmFibGVfdXNhcnQxKHZvaWQpOwogdm9pZCBncGlvX2VuYWJsZV91c2FydDIodm9pZCk7CiB2b2lkIGdwaW9fZW5hYmxlX3VzYXJ0Myh2b2lkKTsKKyNlbmRpZgorI2lmZGVmIEFUMzJBUDcwMHhfQ0hJUF9IQVNfTUFDQgogdm9pZCBncGlvX2VuYWJsZV9tYWNiMCh2b2lkKTsKIHZvaWQgZ3Bpb19lbmFibGVfbWFjYjEodm9pZCk7CisjZW5kaWYKKyNpZmRlZiBBVDMyQVA3MDB4X0NISVBfSEFTX01NQ0kKIHZvaWQgZ3Bpb19lbmFibGVfbW1jaSh2b2lkKTsKKyNlbmRpZgogCiAjZW5kaWYgLyogX19BU01fQVZSMzJfQVJDSF9HUElPX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXZyMzIvYXJjaC1hdDMyYXA3MDAwL2htYXRyaXgyLmggYi9pbmNsdWRlL2FzbS1hdnIzMi9hcmNoLWF0MzJhcDcwMHgvaG1hdHJpeDIuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tYXZyMzIvYXJjaC1hdDMyYXA3MDAwL2htYXRyaXgyLmgKcmVuYW1lIHRvIGluY2x1ZGUvYXNtLWF2cjMyL2FyY2gtYXQzMmFwNzAweC9obWF0cml4Mi5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hdnIzMi9hcmNoLWF0MzJhcDcwMDAvbWVtb3J5LW1hcC5oIGIvaW5jbHVkZS9hc20tYXZyMzIvYXJjaC1hdDMyYXA3MDB4L21lbW9yeS1tYXAuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tYXZyMzIvYXJjaC1hdDMyYXA3MDAwL21lbW9yeS1tYXAuaApyZW5hbWUgdG8gaW5jbHVkZS9hc20tYXZyMzIvYXJjaC1hdDMyYXA3MDB4L21lbW9yeS1tYXAuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXZyMzIvYXJjaC1hdDMyYXA3MDAwL21tYy5oIGIvaW5jbHVkZS9hc20tYXZyMzIvYXJjaC1hdDMyYXA3MDB4L21tYy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1hdnIzMi9hcmNoLWF0MzJhcDcwMDAvbW1jLmgKcmVuYW1lIHRvIGluY2x1ZGUvYXNtLWF2cjMyL2FyY2gtYXQzMmFwNzAweC9tbWMuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXZyMzIvaW8uaCBiL2luY2x1ZGUvYXNtLWF2cjMyL2lvLmgKaW5kZXggM2MwZDU2OS4uYmExNDY3NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXZyMzIvaW8uaAorKysgYi9pbmNsdWRlL2FzbS1hdnIzMi9pby5oCkBAIC05Myw0ICs5MywzNiBAQAogewogfQogCisvKgorICogR2l2ZW4gYSBwaHlzaWNhbCBhZGRyZXNzIGFuZCBhIGxlbmd0aCwgcmV0dXJuIGEgdmlydHVhbCBhZGRyZXNzCisgKiB0aGF0IGNhbiBiZSB1c2VkIHRvIGFjY2VzcyB0aGUgbWVtb3J5IHJhbmdlIHdpdGggdGhlIGNhY2hpbmcKKyAqIHByb3BlcnRpZXMgc3BlY2lmaWVkIGJ5ICJmbGFncyIuCisgKgorICogVGhpcyBpbXBsZW1lbnRhdGlvbiB3b3JrcyBmb3IgbWVtb3J5IGJlbG93IDUxMk1pQiAoZmxhc2gsIGV0Yy4pIGFzCisgKiB3ZWxsIGFzIGFib3ZlIDMuNUdpQiAoaW50ZXJuYWwgcGVyaXBoZXJhbHMuKQorICovCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyX3Q7CisKKyNkZWZpbmUgTUFQX05PQ0FDSEUJKDApCisjZGVmaW5lIE1BUF9XUkNPTUJJTkUJKDEgPDwgNykKKyNkZWZpbmUgTUFQX1dSQkFDSwkoTUFQX1dSQ09NQklORSB8ICgxIDw8IDkpKQorI2RlZmluZSBNQVBfV1JUSFJPVUdICShNQVBfV1JCQUNLIHwgKDEgPDwgMCkpCisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqCittYXBfcGh5c21lbShwaHlzX2FkZHJfdCBwYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJaWYgKGZsYWdzID09IE1BUF9XUkJBQ0spCisJCXJldHVybiAodm9pZCAqKVAxU0VHQUREUihwYWRkcik7CisJZWxzZQorCQlyZXR1cm4gKHZvaWQgKilQMlNFR0FERFIocGFkZHIpOworfQorCisvKgorICogVGFrZSBkb3duIGEgbWFwcGluZyBzZXQgdXAgYnkgbWFwX3BoeXNtZW0oKS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHVubWFwX3BoeXNtZW0odm9pZCAqdmFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuKQoreworCit9CisKICNlbmRpZiAvKiBfX0FTTV9BVlIzMl9JT19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1ibGFja2Zpbi9pby5oIGIvaW5jbHVkZS9hc20tYmxhY2tmaW4vaW8uaAppbmRleCAzMzJkMmM2Li41MTJlMTNkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1ibGFja2Zpbi9pby5oCisrKyBiL2luY2x1ZGUvYXNtLWJsYWNrZmluL2lvLmgKQEAgLTQxLDYgKzQxLDMyIEBACiB9CiAKIC8qCisgKiBHaXZlbiBhIHBoeXNpY2FsIGFkZHJlc3MgYW5kIGEgbGVuZ3RoLCByZXR1cm4gYSB2aXJ0dWFsIGFkZHJlc3MKKyAqIHRoYXQgY2FuIGJlIHVzZWQgdG8gYWNjZXNzIHRoZSBtZW1vcnkgcmFuZ2Ugd2l0aCB0aGUgY2FjaGluZworICogcHJvcGVydGllcyBzcGVjaWZpZWQgYnkgImZsYWdzIi4KKyAqLwordHlwZWRlZiB1bnNpZ25lZCBsb25nIHBoeXNfYWRkcl90OworCisjZGVmaW5lIE1BUF9OT0NBQ0hFCSgwKQorI2RlZmluZSBNQVBfV1JDT01CSU5FCSgwKQorI2RlZmluZSBNQVBfV1JCQUNLCSgwKQorI2RlZmluZSBNQVBfV1JUSFJPVUdICSgwKQorCitzdGF0aWMgaW5saW5lIHZvaWQgKgorbWFwX3BoeXNtZW0ocGh5c19hZGRyX3QgcGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXJldHVybiAodm9pZCAqKXBhZGRyOworfQorCisvKgorICogVGFrZSBkb3duIGEgbWFwcGluZyBzZXQgdXAgYnkgbWFwX3BoeXNtZW0oKS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHVubWFwX3BoeXNtZW0odm9pZCAqdmFkZHIsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisKK30KKworLyoKICAqIFRoZXNlIGFyZSBmb3IgSVNBL1BDSSBzaGFyZWQgbWVtb3J5IF9vbmx5XyBhbmQgc2hvdWxkIG5ldmVyIGJlIHVzZWQKICAqIG9uIGFueSBvdGhlciB0eXBlIG9mIG1lbW9yeSwgaW5jbHVkaW5nIFpvcnJvIG1lbW9yeS4gVGhleSBhcmUgbWVhbnQgdG8KICAqIGFjY2VzcyB0aGUgYnVzIGluIHRoZSBidXMgYnl0ZSBvcmRlciB3aGljaCBpcyBsaXR0bGUtZW5kaWFuIS4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvaW8uaCBiL2luY2x1ZGUvYXNtLWkzODYvaW8uaAppbmRleCBlNjRkNzg4Li5kYjRmNDQyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L2lvLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9pby5oCkBAIC0yMDUsNCArMjA1LDMwIEBACiB7CiB9CiAKKy8qCisgKiBHaXZlbiBhIHBoeXNpY2FsIGFkZHJlc3MgYW5kIGEgbGVuZ3RoLCByZXR1cm4gYSB2aXJ0dWFsIGFkZHJlc3MKKyAqIHRoYXQgY2FuIGJlIHVzZWQgdG8gYWNjZXNzIHRoZSBtZW1vcnkgcmFuZ2Ugd2l0aCB0aGUgY2FjaGluZworICogcHJvcGVydGllcyBzcGVjaWZpZWQgYnkgImZsYWdzIi4KKyAqLwordHlwZWRlZiB1bnNpZ25lZCBsb25nIHBoeXNfYWRkcl90OworCisjZGVmaW5lIE1BUF9OT0NBQ0hFCSgwKQorI2RlZmluZSBNQVBfV1JDT01CSU5FCSgwKQorI2RlZmluZSBNQVBfV1JCQUNLCSgwKQorI2RlZmluZSBNQVBfV1JUSFJPVUdICSgwKQorCitzdGF0aWMgaW5saW5lIHZvaWQgKgorbWFwX3BoeXNtZW0ocGh5c19hZGRyX3QgcGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXJldHVybiAodm9pZCAqKXBhZGRyOworfQorCisvKgorICogVGFrZSBkb3duIGEgbWFwcGluZyBzZXQgdXAgYnkgbWFwX3BoeXNtZW0oKS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHVubWFwX3BoeXNtZW0odm9pZCAqdmFkZHIsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisKK30KKwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL2lvLmggYi9pbmNsdWRlL2FzbS1tNjhrL2lvLmgKaW5kZXggZTE0YTU4MS4uOTFkNzU5MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4ay9pby5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvaW8uaApAQCAtMjgsNiArMjgsMjAgQEAKIAogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KIAorLyogKytyb21hbjogVGhlIGFzc2lnbm1lbnRzIHRvIHRlbXAuIHZhcnMgYXZvaWQgdGhhdCBnY2Mgc29tZXRpbWVzIGdlbmVyYXRlcworICogdHdvIGFjY2Vzc2VzIHRvIG1lbW9yeSwgd2hpY2ggbWF5IGJlIHVuZGVzaXJhYmxlIGZvciBzb21lIGRldmljZXMuCisgKi8KKyNkZWZpbmUgX19yYXdfcmVhZGIoYWRkcikgXAorICAgICh7IHU4IF9fdiA9ICgqKHZvbGF0aWxlIHU4ICopIChhZGRyKSk7IF9fdjsgfSkKKyNkZWZpbmUgX19yYXdfcmVhZHcoYWRkcikgXAorICAgICh7IHUxNiBfX3YgPSAoKih2b2xhdGlsZSB1MTYgKikgKGFkZHIpKTsgX192OyB9KQorI2RlZmluZSBfX3Jhd19yZWFkbChhZGRyKSBcCisgICAgKHsgdTMyIF9fdiA9ICgqKHZvbGF0aWxlIHUzMiAqKSAoYWRkcikpOyBfX3Y7IH0pCisKKyNkZWZpbmUgX19yYXdfd3JpdGViKGFkZHIsYikgKHZvaWQpKCgqKHZvbGF0aWxlIHU4ICopIChhZGRyKSkgPSAoYikpCisjZGVmaW5lIF9fcmF3X3dyaXRldyhhZGRyLHcpICh2b2lkKSgoKih2b2xhdGlsZSB1MTYgKikgKGFkZHIpKSA9ICh3KSkKKyNkZWZpbmUgX19yYXdfd3JpdGVsKGFkZHIsbCkgKHZvaWQpKCgqKHZvbGF0aWxlIHUzMiAqKSAoYWRkcikpID0gKGwpKQorCiAjZGVmaW5lIHJlYWRiKGFkZHIpCQlpbl84KCh2b2xhdGlsZSB1OCAqKShhZGRyKSkKICNkZWZpbmUgd3JpdGViKGIsYWRkcikJCW91dF84KCh2b2xhdGlsZSB1OCAqKShhZGRyKSwgKGIpKQogI2lmICFkZWZpbmVkKF9fQklHX0VORElBTikKQEAgLTIxOCw0ICsyMzIsMzEgQEAKIAkgKiBjb21wYXRpYmlsaXR5IChDRkkgZHJpdmVyKQogCSAqLwogfQorCisvKgorICogR2l2ZW4gYSBwaHlzaWNhbCBhZGRyZXNzIGFuZCBhIGxlbmd0aCwgcmV0dXJuIGEgdmlydHVhbCBhZGRyZXNzCisgKiB0aGF0IGNhbiBiZSB1c2VkIHRvIGFjY2VzcyB0aGUgbWVtb3J5IHJhbmdlIHdpdGggdGhlIGNhY2hpbmcKKyAqIHByb3BlcnRpZXMgc3BlY2lmaWVkIGJ5ICJmbGFncyIuCisgKi8KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBwaHlzX2FkZHJfdDsKKworI2RlZmluZSBNQVBfTk9DQUNIRQkoMCkKKyNkZWZpbmUgTUFQX1dSQ09NQklORQkoMCkKKyNkZWZpbmUgTUFQX1dSQkFDSwkoMCkKKyNkZWZpbmUgTUFQX1dSVEhST1VHSAkoMCkKKworc3RhdGljIGlubGluZSB2b2lkICoKK21hcF9waHlzbWVtKHBoeXNfYWRkcl90IHBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlyZXR1cm4gKHZvaWQgKilwYWRkcjsKK30KKworLyoKKyAqIFRha2UgZG93biBhIG1hcHBpbmcgc2V0IHVwIGJ5IG1hcF9waHlzbWVtKCkuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB1bm1hcF9waHlzbWVtKHZvaWQgKnZhZGRyLCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCit9CisKICNlbmRpZgkJCQkvKiBfX0FTTV9NNjhLX0lPX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWljcm9ibGF6ZS9pby5oIGIvaW5jbHVkZS9hc20tbWljcm9ibGF6ZS9pby5oCmluZGV4IDFjNzdhZGUuLjkwZDE4NDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pY3JvYmxhemUvaW8uaAorKysgYi9pbmNsdWRlL2FzbS1taWNyb2JsYXplL2lvLmgKQEAgLTEyOSw0ICsxMjksMzAgQEAKIHsKIH0KIAorLyoKKyAqIEdpdmVuIGEgcGh5c2ljYWwgYWRkcmVzcyBhbmQgYSBsZW5ndGgsIHJldHVybiBhIHZpcnR1YWwgYWRkcmVzcworICogdGhhdCBjYW4gYmUgdXNlZCB0byBhY2Nlc3MgdGhlIG1lbW9yeSByYW5nZSB3aXRoIHRoZSBjYWNoaW5nCisgKiBwcm9wZXJ0aWVzIHNwZWNpZmllZCBieSAiZmxhZ3MiLgorICovCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyX3Q7CisKKyNkZWZpbmUgTUFQX05PQ0FDSEUJKDApCisjZGVmaW5lIE1BUF9XUkNPTUJJTkUJKDApCisjZGVmaW5lIE1BUF9XUkJBQ0sJKDApCisjZGVmaW5lIE1BUF9XUlRIUk9VR0gJKDApCisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqCittYXBfcGh5c21lbShwaHlzX2FkZHJfdCBwYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJcmV0dXJuICh2b2lkICopcGFkZHI7Cit9CisKKy8qCisgKiBUYWtlIGRvd24gYSBtYXBwaW5nIHNldCB1cCBieSBtYXBfcGh5c21lbSgpLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgdW5tYXBfcGh5c21lbSh2b2lkICp2YWRkciwgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKworfQorCiAjZW5kaWYgLyogX19NSUNST0JMQVpFX0lPX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9pby5oIGIvaW5jbHVkZS9hc20tbWlwcy9pby5oCmluZGV4IDFlMDYwZjcuLmUyN2QxZjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvaW8uaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2lvLmgKQEAgLTQ2NSw0ICs0NjUsMzAgQEAKIHsKIH0KIAorLyoKKyAqIEdpdmVuIGEgcGh5c2ljYWwgYWRkcmVzcyBhbmQgYSBsZW5ndGgsIHJldHVybiBhIHZpcnR1YWwgYWRkcmVzcworICogdGhhdCBjYW4gYmUgdXNlZCB0byBhY2Nlc3MgdGhlIG1lbW9yeSByYW5nZSB3aXRoIHRoZSBjYWNoaW5nCisgKiBwcm9wZXJ0aWVzIHNwZWNpZmllZCBieSAiZmxhZ3MiLgorICovCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyX3Q7CisKKyNkZWZpbmUgTUFQX05PQ0FDSEUJKDApCisjZGVmaW5lIE1BUF9XUkNPTUJJTkUJKDApCisjZGVmaW5lIE1BUF9XUkJBQ0sJKDApCisjZGVmaW5lIE1BUF9XUlRIUk9VR0gJKDApCisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqCittYXBfcGh5c21lbShwaHlzX2FkZHJfdCBwYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJcmV0dXJuICh2b2lkICopcGFkZHI7Cit9CisKKy8qCisgKiBUYWtlIGRvd24gYSBtYXBwaW5nIHNldCB1cCBieSBtYXBfcGh5c21lbSgpLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgdW5tYXBfcGh5c21lbSh2b2lkICp2YWRkciwgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKworfQorCiAjZW5kaWYgLyogX0FTTV9JT19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1uaW9zL2lvLmggYi9pbmNsdWRlL2FzbS1uaW9zL2lvLmgKaW5kZXggZDc3Njk1YS4uNmZjMzM5ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbmlvcy9pby5oCisrKyBiL2luY2x1ZGUvYXNtLW5pb3MvaW8uaApAQCAtMjMsNiArMjMsMTQgQEAKICNpZm5kZWYgX19BU01fTklPU19JT19IXwogI2RlZmluZSBfX0FTTV9OSU9TX0lPX0hfCiAKKyNkZWZpbmUgX19yYXdfd3JpdGViKHYsYSkgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAgKikoYSkgPSAodikpCisjZGVmaW5lIF9fcmF3X3dyaXRldyh2LGEpICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKGEpID0gKHYpKQorI2RlZmluZSBfX3Jhd193cml0ZWwodixhKSAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQgICAqKShhKSA9ICh2KSkKKworI2RlZmluZSBfX3Jhd19yZWFkYihhKSAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICAqKShhKSkKKyNkZWZpbmUgX19yYXdfcmVhZHcoYSkgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoYSkpCisjZGVmaW5lIF9fcmF3X3JlYWRsKGEpICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGludCAgICopKGEpKQorCiAjZGVmaW5lIHJlYWRiKGFkZHIpXAogCSh7dW5zaWduZWQgY2hhciB2YWw7XAogCSBhc20gdm9sYXRpbGUoICAiCXBmeGlvCTAJCVxuIlwKQEAgLTEwMSw0ICsxMDksMzAgQEAKIHsKIH0KIAorLyoKKyAqIEdpdmVuIGEgcGh5c2ljYWwgYWRkcmVzcyBhbmQgYSBsZW5ndGgsIHJldHVybiBhIHZpcnR1YWwgYWRkcmVzcworICogdGhhdCBjYW4gYmUgdXNlZCB0byBhY2Nlc3MgdGhlIG1lbW9yeSByYW5nZSB3aXRoIHRoZSBjYWNoaW5nCisgKiBwcm9wZXJ0aWVzIHNwZWNpZmllZCBieSAiZmxhZ3MiLgorICovCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyX3Q7CisKKyNkZWZpbmUgTUFQX05PQ0FDSEUJKDApCisjZGVmaW5lIE1BUF9XUkNPTUJJTkUJKDApCisjZGVmaW5lIE1BUF9XUkJBQ0sJKDApCisjZGVmaW5lIE1BUF9XUlRIUk9VR0gJKDApCisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqCittYXBfcGh5c21lbShwaHlzX2FkZHJfdCBwYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJcmV0dXJuICh2b2lkICopcGFkZHI7Cit9CisKKy8qCisgKiBUYWtlIGRvd24gYSBtYXBwaW5nIHNldCB1cCBieSBtYXBfcGh5c21lbSgpLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgdW5tYXBfcGh5c21lbSh2b2lkICp2YWRkciwgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKworfQorCiAjZW5kaWYgLyogX19BU01fTklPU19JT19IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbmlvczIvaW8uaCBiL2luY2x1ZGUvYXNtLW5pb3MyL2lvLmgKaW5kZXggNWJiNTMyMi4uYTUyYjk1YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbmlvczIvaW8uaAorKysgYi9pbmNsdWRlL2FzbS1uaW9zMi9pby5oCkBAIC0yOSwxMCArMjksNDQgQEAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInN5bmMiIDogOiA6ICJtZW1vcnkiKTsKIH0KIAorLyoKKyAqIEdpdmVuIGEgcGh5c2ljYWwgYWRkcmVzcyBhbmQgYSBsZW5ndGgsIHJldHVybiBhIHZpcnR1YWwgYWRkcmVzcworICogdGhhdCBjYW4gYmUgdXNlZCB0byBhY2Nlc3MgdGhlIG1lbW9yeSByYW5nZSB3aXRoIHRoZSBjYWNoaW5nCisgKiBwcm9wZXJ0aWVzIHNwZWNpZmllZCBieSAiZmxhZ3MiLgorICovCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyX3Q7CisKKyNkZWZpbmUgTUFQX05PQ0FDSEUJKDApCisjZGVmaW5lIE1BUF9XUkNPTUJJTkUJKDApCisjZGVmaW5lIE1BUF9XUkJBQ0sJKDApCisjZGVmaW5lIE1BUF9XUlRIUk9VR0gJKDApCisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqCittYXBfcGh5c21lbShwaHlzX2FkZHJfdCBwYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJcmV0dXJuICh2b2lkICopcGFkZHI7Cit9CisKKy8qCisgKiBUYWtlIGRvd24gYSBtYXBwaW5nIHNldCB1cCBieSBtYXBfcGh5c21lbSgpLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgdW5tYXBfcGh5c21lbSh2b2lkICp2YWRkciwgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKworfQorCiBleHRlcm4gdW5zaWduZWQgY2hhciBpbmIgKHVuc2lnbmVkIGNoYXIgKnBvcnQpOwogZXh0ZXJuIHVuc2lnbmVkIHNob3J0IGludyAodW5zaWduZWQgc2hvcnQgKnBvcnQpOwogZXh0ZXJuIHVuc2lnbmVkIGlubCAodW5zaWduZWQgcG9ydCk7CiAKKyNkZWZpbmUgX19yYXdfd3JpdGViKHYsYSkgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAgKikoYSkgPSAodikpCisjZGVmaW5lIF9fcmF3X3dyaXRldyh2LGEpICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKGEpID0gKHYpKQorI2RlZmluZSBfX3Jhd193cml0ZWwodixhKSAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQgICAqKShhKSA9ICh2KSkKKworI2RlZmluZSBfX3Jhd19yZWFkYihhKSAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICAqKShhKSkKKyNkZWZpbmUgX19yYXdfcmVhZHcoYSkgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoYSkpCisjZGVmaW5lIF9fcmF3X3JlYWRsKGEpICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGludCAgICopKGEpKQorCiAjZGVmaW5lIHJlYWRiKGFkZHIpXAogCSh7dW5zaWduZWQgY2hhciB2YWw7XAogCSBhc20gdm9sYXRpbGUoICJsZGJpbyAlMCwgMCglMSkiIDoiPXIiKHZhbCkgOiAiciIgKGFkZHIpKTsgdmFsO30pCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvaW1tYXBfODV4eC5oIGIvaW5jbHVkZS9hc20tcHBjL2ltbWFwXzg1eHguaAppbmRleCA0OTZmYzcyLi5kNzY5ZDcwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGMvaW1tYXBfODV4eC5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9pbW1hcF84NXh4LmgKQEAgLTcyMCwxMSArNzIwLDEwIEBACiB9IGNjc3JfdHNlY190OwogCiAvKgotICogUElDIFJlZ2lzdGVycygweDJfNjAwMC0weDRfMDAwMC0weDhfMDAwMCkKKyAqIFBJQyBSZWdpc3RlcnMoMHg0XzAwMDAtMHg4XzAwMDApCiAgKi8KIHR5cGVkZWYgc3RydWN0IGNjc3JfcGljIHsKLQljaGFyIAlyZXMwWzEwNjQ5Nl07CS8qIDB4MjYwMDAtMHg0MDAwMCAqLwotCWNoYXIJcmVzMVs2NF07CisJY2hhcglyZXMxWzY0XTsJLyogMHg0MDAwMCAqLwogCXVpbnQJaXBpZHIwOwkJLyogMHg0MDA0MCAtIEludGVycHJvY2Vzc29yIEludGVycnVwdCBEaXNwYXRjaCBSZWdpc3RlciAwICovCiAJY2hhcglyZXMyWzEyXTsKIAl1aW50CWlwaWRyMTsJCS8qIDB4NDAwNTAgLSBJbnRlcnByb2Nlc3NvciBJbnRlcnJ1cHQgRGlzcGF0Y2ggUmVnaXN0ZXIgMSAqLwpAQCAtMTYxOSwyNSArMTYxOCwyNSBAQAogCiAjZGVmaW5lIFBPUkRFVlNSX1BDSQkoMHgwMDgwMDAwMCkJLyogUENJIE1vZGUgKi8KIAotdHlwZWRlZiBzdHJ1Y3QgaW1tYXAgewotCWNjc3JfbG9jYWxfZWNtX3QJaW1fbG9jYWxfZWNtOwotCWNjc3JfZGRyX3QJCWltX2RkcjsKLQljY3NyX2kyY190CQlpbV9pMmM7Ci0JY2Nzcl9kdWFydF90CQlpbV9kdWFydDsKLQljY3NyX2xiY190CQlpbV9sYmM7Ci0JY2Nzcl9wY2l4X3QJCWltX3BjaXg7Ci0JY2Nzcl9wY2l4X3QJCWltX3BjaXgyOwotCWNoYXIJCQlyZXNlcnZlZFs5MDExMl07Ci0JY2Nzcl9sMmNhY2hlX3QJCWltX2wyY2FjaGU7Ci0JY2Nzcl9kbWFfdAkJaW1fZG1hOwotCWNjc3JfdHNlY190CQlpbV90c2VjMTsKLQljY3NyX3RzZWNfdAkJaW1fdHNlYzI7Ci0JY2Nzcl9waWNfdAkJaW1fcGljOwotCWNjc3JfY3BtX3QJCWltX2NwbTsKLQljY3NyX3Jpb190CQlpbV9yaW87Ci0JY2Nzcl9ndXJfdAkJaW1fZ3VyOwotfSBpbW1hcF90OwotCi1leHRlcm4gaW1tYXBfdCAgKmltbXI7CisjZGVmaW5lIENGR19NUEM4NXh4X0dVVFNfT0ZGU0VUCSgweEUwMDAwKQorI2RlZmluZSBDRkdfTVBDODV4eF9HVVRTX0FERFIJKENGR19JTU1SICsgQ0ZHX01QQzg1eHhfR1VUU19PRkZTRVQpCisjZGVmaW5lIENGR19NUEM4NXh4X0VDTV9PRkZTRVQJKDB4MDAwMCkKKyNkZWZpbmUgQ0ZHX01QQzg1eHhfRUNNX0FERFIJKENGR19JTU1SICsgQ0ZHX01QQzg1eHhfRUNNX09GRlNFVCkKKyNkZWZpbmUgQ0ZHX01QQzg1eHhfRERSX09GRlNFVAkoMHgyMDAwKQorI2RlZmluZSBDRkdfTVBDODV4eF9ERFJfQUREUgkoQ0ZHX0lNTVIgKyBDRkdfTVBDODV4eF9ERFJfT0ZGU0VUKQorI2RlZmluZSBDRkdfTVBDODV4eF9MQkNfT0ZGU0VUCSgweDUwMDApCisjZGVmaW5lIENGR19NUEM4NXh4X0xCQ19BRERSCShDRkdfSU1NUiArIENGR19NUEM4NXh4X0xCQ19PRkZTRVQpCisjZGVmaW5lIENGR19NUEM4NXh4X1BDSVhfT0ZGU0VUCSgweDgwMDApCisjZGVmaW5lIENGR19NUEM4NXh4X1BDSVhfQUREUgkoQ0ZHX0lNTVIgKyBDRkdfTVBDODV4eF9QQ0lYX09GRlNFVCkKKyNkZWZpbmUgQ0ZHX01QQzg1eHhfUENJWDJfT0ZGU0VUCSgweDkwMDApCisjZGVmaW5lIENGR19NUEM4NXh4X1BDSVgyX0FERFIJKENGR19JTU1SICsgQ0ZHX01QQzg1eHhfUENJWDJfT0ZGU0VUKQorI2RlZmluZSBDRkdfTVBDODV4eF9MMl9PRkZTRVQJKDB4MjAwMDApCisjZGVmaW5lIENGR19NUEM4NXh4X0wyX0FERFIJKENGR19JTU1SICsgQ0ZHX01QQzg1eHhfTDJfT0ZGU0VUKQorI2RlZmluZSBDRkdfTVBDODV4eF9ETUFfT0ZGU0VUCSgweDIxMDAwKQorI2RlZmluZSBDRkdfTVBDODV4eF9ETUFfQUREUgkoQ0ZHX0lNTVIgKyBDRkdfTVBDODV4eF9ETUFfT0ZGU0VUKQorI2RlZmluZSBDRkdfTVBDODV4eF9QSUNfT0ZGU0VUCSgweDQwMDAwKQorI2RlZmluZSBDRkdfTVBDODV4eF9QSUNfQUREUgkoQ0ZHX0lNTVIgKyBDRkdfTVBDODV4eF9QSUNfT0ZGU0VUKQorI2RlZmluZSBDRkdfTVBDODV4eF9DUE1fT0ZGU0VUCSgweDgwMDAwKQorI2RlZmluZSBDRkdfTVBDODV4eF9DUE1fQUREUgkoQ0ZHX0lNTVIgKyBDRkdfTVBDODV4eF9DUE1fT0ZGU0VUKQogCiAjZW5kaWYgLypfX0lNTUFQXzg1eHhfXyovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvaW1tYXBfZnNsX3BjaS5oIGIvaW5jbHVkZS9hc20tcHBjL2ltbWFwX2ZzbF9wY2kuaAppbmRleCBiZDczMmI2Li42NzE1MDY0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGMvaW1tYXBfZnNsX3BjaS5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9pbW1hcF9mc2xfcGNpLmgKQEAgLTE0NCw3ICsxNDQsOSBAQAogCXUzMglwZXJyX2NhcDE7CS8qIDB4ZTJjIC0gUENJRSBFcnJvciBDYXB0dXJlIFJlZ2lzdGVyIDEgKi8KIAl1MzIJcGVycl9jYXAyOwkvKiAweGUzMCAtIFBDSUUgRXJyb3IgQ2FwdHVyZSBSZWdpc3RlciAyICovCiAJdTMyCXBlcnJfY2FwMzsJLyogMHhlMzQgLSBQQ0lFIEVycm9yIENhcHR1cmUgUmVnaXN0ZXIgMyAqLwotCWNoYXIJcmVzMjNbNDU2XTsJLyogICAgICgtICN4MTAwMCAjeGUzOCkgNDU2ICovCisJY2hhcglyZXMyM1syMDBdOworCXUzMglwZGJfc3RhdDsJLyogMHhmMDAgLSBQQ0lFIERlYnVnIFN0YXR1cyAqLworCWNoYXIJcmVzMjRbMjUyXTsKIH0gY2Nzcl9mc2xfcGNpX3Q7CiAKICNlbmRpZiAvKl9fSU1NQVBfZnNsX3BjaV9fKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9pby5oIGIvaW5jbHVkZS9hc20tcHBjL2lvLmgKaW5kZXggMTFkZmExYy4uOTFjOWMxZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjL2lvLmgKKysrIGIvaW5jbHVkZS9hc20tcHBjL2lvLmgKQEAgLTEyMSwxMyArMTIxLDQzIEBACiAjZGVmaW5lIGlvYmFycmllcl93KCkgIGVpZWlvKCkKIAogLyoKKyAqIE5vbiBvcmRlcmVkIGFuZCBub24tc3dhcHBpbmcgInJhdyIgYWNjZXNzb3JzCisgKi8KKyNkZWZpbmUgX19pb21lbQorI2RlZmluZSBQQ0lfRklYX0FERFIoYWRkcikJKGFkZHIpCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciBfX3Jhd19yZWFkYihjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJcmV0dXJuICoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKVBDSV9GSVhfQUREUihhZGRyKTsKK30KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgX19yYXdfcmVhZHcoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCXJldHVybiAqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopUENJX0ZJWF9BRERSKGFkZHIpOworfQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgX19yYXdfcmVhZGwoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCXJldHVybiAqKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKVBDSV9GSVhfQUREUihhZGRyKTsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3Jhd193cml0ZWIodW5zaWduZWQgY2hhciB2LCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopUENJX0ZJWF9BRERSKGFkZHIpID0gdjsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3Jhd193cml0ZXcodW5zaWduZWQgc2hvcnQgdiwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCSoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKilQQ0lfRklYX0FERFIoYWRkcikgPSB2OworfQorc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3dyaXRlbCh1bnNpZ25lZCBpbnQgdiwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCSoodm9sYXRpbGUgdW5zaWduZWQgaW50ICopUENJX0ZJWF9BRERSKGFkZHIpID0gdjsKK30KKworLyoKICAqIDgsIDE2IGFuZCAzMiBiaXQsIGJpZyBhbmQgbGl0dGxlIGVuZGlhbiBJL08gb3BlcmF0aW9ucywgd2l0aCBiYXJyaWVyLgogICoKICAqIFJlYWQgb3BlcmF0aW9ucyBoYXZlIGFkZGl0aW9uYWwgdHdpICYgaXN5bmMgdG8gbWFrZSBzdXJlIHRoZSByZWFkCiAgKiBpcyBhY3R1YWxseSBwZXJmb3JtZWQgKGkuZS4gdGhlIGRhdGEgaGFzIGNvbWUgYmFjaykgYmVmb3JlIHdlIHN0YXJ0CiAgKiBleGVjdXRpbmcgYW55IGZvbGxvd2luZyBpbnN0cnVjdGlvbnMuCiAgKi8KLSNkZWZpbmUgX19pb21lbQogZXh0ZXJuIGlubGluZSBpbnQgaW5fOChjb25zdCB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIF9faW9tZW0gKmFkZHIpCiB7CiAJaW50IHJldDsKQEAgLTIwOCw0ICsyMzgsMzAgQEAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3luYzsgc3R3JVUwJVgwICUxLCUwIiA6ICI9bSIgKCphZGRyKSA6ICJyIiAodmFsKSk7CiB9CiAKKy8qCisgKiBHaXZlbiBhIHBoeXNpY2FsIGFkZHJlc3MgYW5kIGEgbGVuZ3RoLCByZXR1cm4gYSB2aXJ0dWFsIGFkZHJlc3MKKyAqIHRoYXQgY2FuIGJlIHVzZWQgdG8gYWNjZXNzIHRoZSBtZW1vcnkgcmFuZ2Ugd2l0aCB0aGUgY2FjaGluZworICogcHJvcGVydGllcyBzcGVjaWZpZWQgYnkgImZsYWdzIi4KKyAqLwordHlwZWRlZiB1bnNpZ25lZCBsb25nIHBoeXNfYWRkcl90OworCisjZGVmaW5lIE1BUF9OT0NBQ0hFCSgwKQorI2RlZmluZSBNQVBfV1JDT01CSU5FCSgwKQorI2RlZmluZSBNQVBfV1JCQUNLCSgwKQorI2RlZmluZSBNQVBfV1JUSFJPVUdICSgwKQorCitzdGF0aWMgaW5saW5lIHZvaWQgKgorbWFwX3BoeXNtZW0ocGh5c19hZGRyX3QgcGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXJldHVybiAodm9pZCAqKXBhZGRyOworfQorCisvKgorICogVGFrZSBkb3duIGEgbWFwcGluZyBzZXQgdXAgYnkgbWFwX3BoeXNtZW0oKS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHVubWFwX3BoeXNtZW0odm9pZCAqdmFkZHIsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisKK30KKwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvaW9waW5fODV4eC5oIGIvaW5jbHVkZS9hc20tcHBjL2lvcGluXzg1eHguaAppbmRleCBmODU0ZGY2Li5kYWRkYjU1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGMvaW9waW5fODV4eC5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9pb3Bpbl84NXh4LmgKQEAgLTIzLDEyMSArMjMsMTIxIEBACiAKIGV4dGVybiBfX2lubGluZV9fIHZvaWQgaW9waW5fc2V0X2hpZ2ggKGlvcGluX3QgKiBpb3BpbikKIHsKLQl2b2xhdGlsZSB1aW50ICpkYXRwID0gJigoaW1tYXBfdCAqKSBDRkdfSU1NUiktPmltX2NwbS5pbV9jcG1faW9wLnBkYXRhOworCXZvbGF0aWxlIHVpbnQgKmRhdHAgPSAmKChjY3NyX2NwbV90ICopIENGR19NUEM4NXh4X0NQTV9BRERSKS0+aW1fY3BtX2lvcC5wZGF0YTsKIAlkYXRwW2lvcGluLT5wb3J0ICogOF0gfD0gKDEgPDwgKDMxIC0gaW9waW4tPnBpbikpOwogfQogCiBleHRlcm4gX19pbmxpbmVfXyB2b2lkIGlvcGluX3NldF9sb3cgKGlvcGluX3QgKiBpb3BpbikKIHsKLQl2b2xhdGlsZSB1aW50ICpkYXRwID0gJigoaW1tYXBfdCAqKSBDRkdfSU1NUiktPmltX2NwbS5pbV9jcG1faW9wLnBkYXRhOworCXZvbGF0aWxlIHVpbnQgKmRhdHAgPSAmKChjY3NyX2NwbV90ICopIENGR19NUEM4NXh4X0NQTV9BRERSKS0+aW1fY3BtX2lvcC5wZGF0YTsKIAlkYXRwW2lvcGluLT5wb3J0ICogOF0gJj0gfigxIDw8ICgzMSAtIGlvcGluLT5waW4pKTsKIH0KIAogZXh0ZXJuIF9faW5saW5lX18gdWludCBpb3Bpbl9pc19oaWdoIChpb3Bpbl90ICogaW9waW4pCiB7Ci0Jdm9sYXRpbGUgdWludCAqZGF0cCA9ICYoKGltbWFwX3QgKikgQ0ZHX0lNTVIpLT5pbV9jcG0uaW1fY3BtX2lvcC5wZGF0YTsKKwl2b2xhdGlsZSB1aW50ICpkYXRwID0gJigoY2Nzcl9jcG1fdCAqKSBDRkdfTVBDODV4eF9DUE1fQUREUiktPmltX2NwbV9pb3AucGRhdGE7CiAJcmV0dXJuIChkYXRwW2lvcGluLT5wb3J0ICogOF0gPj4gKDMxIC0gaW9waW4tPnBpbikpICYgMTsKIH0KIAogZXh0ZXJuIF9faW5saW5lX18gdWludCBpb3Bpbl9pc19sb3cgKGlvcGluX3QgKiBpb3BpbikKIHsKLQl2b2xhdGlsZSB1aW50ICpkYXRwID0gJigoaW1tYXBfdCAqKSBDRkdfSU1NUiktPmltX2NwbS5pbV9jcG1faW9wLnBkYXRhOworCXZvbGF0aWxlIHVpbnQgKmRhdHAgPSAmKChjY3NyX2NwbV90ICopIENGR19NUEM4NXh4X0NQTV9BRERSKS0+aW1fY3BtX2lvcC5wZGF0YTsKIAlyZXR1cm4gKChkYXRwW2lvcGluLT5wb3J0ICogOF0gPj4gKDMxIC0gaW9waW4tPnBpbikpICYgMSkgXiAxOwogfQogCiBleHRlcm4gX19pbmxpbmVfXyB2b2lkIGlvcGluX3NldF9vdXQgKGlvcGluX3QgKiBpb3BpbikKIHsKLQl2b2xhdGlsZSB1aW50ICpkaXJwID0gJigoaW1tYXBfdCAqKSBDRkdfSU1NUiktPmltX2NwbS5pbV9jcG1faW9wLnBkaXJhOworCXZvbGF0aWxlIHVpbnQgKmRpcnAgPSAmKChjY3NyX2NwbV90ICopIENGR19NUEM4NXh4X0NQTV9BRERSKS0+aW1fY3BtX2lvcC5wZGlyYTsKIAlkaXJwW2lvcGluLT5wb3J0ICogOF0gfD0gKDEgPDwgKDMxIC0gaW9waW4tPnBpbikpOwogfQogCiBleHRlcm4gX19pbmxpbmVfXyB2b2lkIGlvcGluX3NldF9pbiAoaW9waW5fdCAqIGlvcGluKQogewotCXZvbGF0aWxlIHVpbnQgKmRpcnAgPSAmKChpbW1hcF90ICopIENGR19JTU1SKS0+aW1fY3BtLmltX2NwbV9pb3AucGRpcmE7CisJdm9sYXRpbGUgdWludCAqZGlycCA9ICYoKGNjc3JfY3BtX3QgKikgQ0ZHX01QQzg1eHhfQ1BNX0FERFIpLT5pbV9jcG1faW9wLnBkaXJhOwogCWRpcnBbaW9waW4tPnBvcnQgKiA4XSAmPSB+KDEgPDwgKDMxIC0gaW9waW4tPnBpbikpOwogfQogCiBleHRlcm4gX19pbmxpbmVfXyB1aW50IGlvcGluX2lzX291dCAoaW9waW5fdCAqIGlvcGluKQogewotCXZvbGF0aWxlIHVpbnQgKmRpcnAgPSAmKChpbW1hcF90ICopIENGR19JTU1SKS0+aW1fY3BtLmltX2NwbV9pb3AucGRpcmE7CisJdm9sYXRpbGUgdWludCAqZGlycCA9ICYoKGNjc3JfY3BtX3QgKikgQ0ZHX01QQzg1eHhfQ1BNX0FERFIpLT5pbV9jcG1faW9wLnBkaXJhOwogCXJldHVybiAoZGlycFtpb3Bpbi0+cG9ydCAqIDhdID4+ICgzMSAtIGlvcGluLT5waW4pKSAmIDE7CiB9CiAKIGV4dGVybiBfX2lubGluZV9fIHVpbnQgaW9waW5faXNfaW4gKGlvcGluX3QgKiBpb3BpbikKIHsKLQl2b2xhdGlsZSB1aW50ICpkaXJwID0gJigoaW1tYXBfdCAqKSBDRkdfSU1NUiktPmltX2NwbS5pbV9jcG1faW9wLnBkaXJhOworCXZvbGF0aWxlIHVpbnQgKmRpcnAgPSAmKChjY3NyX2NwbV90ICopIENGR19NUEM4NXh4X0NQTV9BRERSKS0+aW1fY3BtX2lvcC5wZGlyYTsKIAlyZXR1cm4gKChkaXJwW2lvcGluLT5wb3J0ICogOF0gPj4gKDMxIC0gaW9waW4tPnBpbikpICYgMSkgXiAxOwogfQogCiBleHRlcm4gX19pbmxpbmVfXyB2b2lkIGlvcGluX3NldF9vZHIgKGlvcGluX3QgKiBpb3BpbikKIHsKLQl2b2xhdGlsZSB1aW50ICpvZHJwID0gJigoaW1tYXBfdCAqKSBDRkdfSU1NUiktPmltX2NwbS5pbV9jcG1faW9wLnBvZHJhOworCXZvbGF0aWxlIHVpbnQgKm9kcnAgPSAmKChjY3NyX2NwbV90ICopIENGR19NUEM4NXh4X0NQTV9BRERSKS0+aW1fY3BtX2lvcC5wb2RyYTsKIAlvZHJwW2lvcGluLT5wb3J0ICogOF0gfD0gKDEgPDwgKDMxIC0gaW9waW4tPnBpbikpOwogfQogCiBleHRlcm4gX19pbmxpbmVfXyB2b2lkIGlvcGluX3NldF9hY3QgKGlvcGluX3QgKiBpb3BpbikKIHsKLQl2b2xhdGlsZSB1aW50ICpvZHJwID0gJigoaW1tYXBfdCAqKSBDRkdfSU1NUiktPmltX2NwbS5pbV9jcG1faW9wLnBvZHJhOworCXZvbGF0aWxlIHVpbnQgKm9kcnAgPSAmKChjY3NyX2NwbV90ICopIENGR19NUEM4NXh4X0NQTV9BRERSKS0+aW1fY3BtX2lvcC5wb2RyYTsKIAlvZHJwW2lvcGluLT5wb3J0ICogOF0gJj0gfigxIDw8ICgzMSAtIGlvcGluLT5waW4pKTsKIH0KIAogZXh0ZXJuIF9faW5saW5lX18gdWludCBpb3Bpbl9pc19vZHIgKGlvcGluX3QgKiBpb3BpbikKIHsKLQl2b2xhdGlsZSB1aW50ICpvZHJwID0gJigoaW1tYXBfdCAqKSBDRkdfSU1NUiktPmltX2NwbS5pbV9jcG1faW9wLnBvZHJhOworCXZvbGF0aWxlIHVpbnQgKm9kcnAgPSAmKChjY3NyX2NwbV90ICopIENGR19NUEM4NXh4X0NQTV9BRERSKS0+aW1fY3BtX2lvcC5wb2RyYTsKIAlyZXR1cm4gKG9kcnBbaW9waW4tPnBvcnQgKiA4XSA+PiAoMzEgLSBpb3Bpbi0+cGluKSkgJiAxOwogfQogCiBleHRlcm4gX19pbmxpbmVfXyB1aW50IGlvcGluX2lzX2FjdCAoaW9waW5fdCAqIGlvcGluKQogewotCXZvbGF0aWxlIHVpbnQgKm9kcnAgPSAmKChpbW1hcF90ICopIENGR19JTU1SKS0+aW1fY3BtLmltX2NwbV9pb3AucG9kcmE7CisJdm9sYXRpbGUgdWludCAqb2RycCA9ICYoKGNjc3JfY3BtX3QgKikgQ0ZHX01QQzg1eHhfQ1BNX0FERFIpLT5pbV9jcG1faW9wLnBvZHJhOwogCXJldHVybiAoKG9kcnBbaW9waW4tPnBvcnQgKiA4XSA+PiAoMzEgLSBpb3Bpbi0+cGluKSkgJiAxKSBeIDE7CiB9CiAKIGV4dGVybiBfX2lubGluZV9fIHZvaWQgaW9waW5fc2V0X2RlZCAoaW9waW5fdCAqIGlvcGluKQogewotCXZvbGF0aWxlIHVpbnQgKnBhcnAgPSAmKChpbW1hcF90ICopIENGR19JTU1SKS0+aW1fY3BtLmltX2NwbV9pb3AucHBhcmE7CisJdm9sYXRpbGUgdWludCAqcGFycCA9ICYoKGNjc3JfY3BtX3QgKikgQ0ZHX01QQzg1eHhfQ1BNX0FERFIpLT5pbV9jcG1faW9wLnBwYXJhOwogCXBhcnBbaW9waW4tPnBvcnQgKiA4XSB8PSAoMSA8PCAoMzEgLSBpb3Bpbi0+cGluKSk7CiB9CiAKIGV4dGVybiBfX2lubGluZV9fIHZvaWQgaW9waW5fc2V0X2dlbiAoaW9waW5fdCAqIGlvcGluKQogewotCXZvbGF0aWxlIHVpbnQgKnBhcnAgPSAmKChpbW1hcF90ICopIENGR19JTU1SKS0+aW1fY3BtLmltX2NwbV9pb3AucHBhcmE7CisJdm9sYXRpbGUgdWludCAqcGFycCA9ICYoKGNjc3JfY3BtX3QgKikgQ0ZHX01QQzg1eHhfQ1BNX0FERFIpLT5pbV9jcG1faW9wLnBwYXJhOwogCXBhcnBbaW9waW4tPnBvcnQgKiA4XSAmPSB+KDEgPDwgKDMxIC0gaW9waW4tPnBpbikpOwogfQogCiBleHRlcm4gX19pbmxpbmVfXyB1aW50IGlvcGluX2lzX2RlZCAoaW9waW5fdCAqIGlvcGluKQogewotCXZvbGF0aWxlIHVpbnQgKnBhcnAgPSAmKChpbW1hcF90ICopIENGR19JTU1SKS0+aW1fY3BtLmltX2NwbV9pb3AucHBhcmE7CisJdm9sYXRpbGUgdWludCAqcGFycCA9ICYoKGNjc3JfY3BtX3QgKikgQ0ZHX01QQzg1eHhfQ1BNX0FERFIpLT5pbV9jcG1faW9wLnBwYXJhOwogCXJldHVybiAocGFycFtpb3Bpbi0+cG9ydCAqIDhdID4+ICgzMSAtIGlvcGluLT5waW4pKSAmIDE7CiB9CiAKIGV4dGVybiBfX2lubGluZV9fIHVpbnQgaW9waW5faXNfZ2VuIChpb3Bpbl90ICogaW9waW4pCiB7Ci0Jdm9sYXRpbGUgdWludCAqcGFycCA9ICYoKGltbWFwX3QgKikgQ0ZHX0lNTVIpLT5pbV9jcG0uaW1fY3BtX2lvcC5wcGFyYTsKKwl2b2xhdGlsZSB1aW50ICpwYXJwID0gJigoY2Nzcl9jcG1fdCAqKSBDRkdfTVBDODV4eF9DUE1fQUREUiktPmltX2NwbV9pb3AucHBhcmE7CiAJcmV0dXJuICgocGFycFtpb3Bpbi0+cG9ydCAqIDhdID4+ICgzMSAtIGlvcGluLT5waW4pKSAmIDEpIF4gMTsKIH0KIAogZXh0ZXJuIF9faW5saW5lX18gdm9pZCBpb3Bpbl9zZXRfb3B0MiAoaW9waW5fdCAqIGlvcGluKQogewotCXZvbGF0aWxlIHVpbnQgKnNvcnAgPSAmKChpbW1hcF90ICopIENGR19JTU1SKS0+aW1fY3BtLmltX2NwbV9pb3AucHNvcmE7CisJdm9sYXRpbGUgdWludCAqc29ycCA9ICYoKGNjc3JfY3BtX3QgKikgQ0ZHX01QQzg1eHhfQ1BNX0FERFIpLT5pbV9jcG1faW9wLnBzb3JhOwogCXNvcnBbaW9waW4tPnBvcnQgKiA4XSB8PSAoMSA8PCAoMzEgLSBpb3Bpbi0+cGluKSk7CiB9CiAKIGV4dGVybiBfX2lubGluZV9fIHZvaWQgaW9waW5fc2V0X29wdDEgKGlvcGluX3QgKiBpb3BpbikKIHsKLQl2b2xhdGlsZSB1aW50ICpzb3JwID0gJigoaW1tYXBfdCAqKSBDRkdfSU1NUiktPmltX2NwbS5pbV9jcG1faW9wLnBzb3JhOworCXZvbGF0aWxlIHVpbnQgKnNvcnAgPSAmKChjY3NyX2NwbV90ICopIENGR19NUEM4NXh4X0NQTV9BRERSKS0+aW1fY3BtX2lvcC5wc29yYTsKIAlzb3JwW2lvcGluLT5wb3J0ICogOF0gJj0gfigxIDw8ICgzMSAtIGlvcGluLT5waW4pKTsKIH0KIAogZXh0ZXJuIF9faW5saW5lX18gdWludCBpb3Bpbl9pc19vcHQyIChpb3Bpbl90ICogaW9waW4pCiB7Ci0Jdm9sYXRpbGUgdWludCAqc29ycCA9ICYoKGltbWFwX3QgKikgQ0ZHX0lNTVIpLT5pbV9jcG0uaW1fY3BtX2lvcC5wc29yYTsKKwl2b2xhdGlsZSB1aW50ICpzb3JwID0gJigoY2Nzcl9jcG1fdCAqKSBDRkdfTVBDODV4eF9DUE1fQUREUiktPmltX2NwbV9pb3AucHNvcmE7CiAJcmV0dXJuIChzb3JwW2lvcGluLT5wb3J0ICogOF0gPj4gKDMxIC0gaW9waW4tPnBpbikpICYgMTsKIH0KIAogZXh0ZXJuIF9faW5saW5lX18gdWludCBpb3Bpbl9pc19vcHQxIChpb3Bpbl90ICogaW9waW4pCiB7Ci0Jdm9sYXRpbGUgdWludCAqc29ycCA9ICYoKGltbWFwX3QgKikgQ0ZHX0lNTVIpLT5pbV9jcG0uaW1fY3BtX2lvcC5wc29yYTsKKwl2b2xhdGlsZSB1aW50ICpzb3JwID0gJigoY2Nzcl9jcG1fdCAqKSBDRkdfTVBDODV4eF9DUE1fQUREUiktPmltX2NwbV9pb3AucHNvcmE7CiAJcmV0dXJuICgoc29ycFtpb3Bpbi0+cG9ydCAqIDhdID4+ICgzMSAtIGlvcGluLT5waW4pKSAmIDEpIF4gMTsKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL21tdS5oIGIvaW5jbHVkZS9hc20tcHBjL21tdS5oCmluZGV4IGVkY2IzYjkuLmIxOWFiZTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYy9tbXUuaAorKysgYi9pbmNsdWRlL2FzbS1wcGMvbW11LmgKQEAgLTQxMyw3ICs0MTMsOSBAQAogI2RlZmluZSBMQVdBUl9UUkdUX0lGX1BDSTEJMHgwMDAwMDAwMAogI2RlZmluZSBMQVdBUl9UUkdUX0lGX1BDSVgJMHgwMDAwMDAwMAogI2RlZmluZSBMQVdBUl9UUkdUX0lGX1BDSTIJMHgwMDEwMDAwMAotI2RlZmluZSBMQVdBUl9UUkdUX0lGX1BFWAkweDAwMjAwMDAwCisjZGVmaW5lIExBV0FSX1RSR1RfSUZfUENJRTEJMHgwMDIwMDAwMAorI2RlZmluZSBMQVdBUl9UUkdUX0lGX1BDSUUyCTB4MDAxMDAwMDAKKyNkZWZpbmUgTEFXQVJfVFJHVF9JRl9QQ0lFMwkweDAwMzAwMDAwCiAjZGVmaW5lIExBV0FSX1RSR1RfSUZfTEJDCTB4MDA0MDAwMDAKICNkZWZpbmUgTEFXQVJfVFJHVF9JRl9DQ1NSCTB4MDA4MDAwMDAKICNkZWZpbmUgTEFXQVJfVFJHVF9JRl9ERFJfSU5URVJMRUFWRUQgMHgwMEIwMDAwMApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvYml0b3BzLmggYi9pbmNsdWRlL2FzbS1zaC9iaXRvcHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTBmYmE0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvYml0b3BzLmgKQEAgLTAsMCArMSwxNTEgQEAKKyNpZm5kZWYgX19BU01fU0hfQklUT1BTX0gKKyNkZWZpbmUgX19BU01fU0hfQklUT1BTX0gKKworI2lmZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxhc20vaXJxZmxhZ3MuaD4KKy8qIEZvciBfX3N3YWIzMiAqLworI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKworc3RhdGljIGlubGluZSB2b2lkIHNldF9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICogYWRkcikKK3sKKwlpbnQJbWFzazsKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKmEgPSBhZGRyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlhICs9IG5yID4+IDU7CisJbWFzayA9IDEgPDwgKG5yICYgMHgxZik7CisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCSphIHw9IG1hc2s7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCisvKgorICogY2xlYXJfYml0KCkgZG9lc24ndCBwcm92aWRlIGFueSBiYXJyaWVyIGZvciB0aGUgY29tcGlsZXIuCisgKi8KKyNkZWZpbmUgc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCkJYmFycmllcigpCisjZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCkJYmFycmllcigpCitzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCit7CisJaW50CW1hc2s7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50ICphID0gYWRkcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJYSArPSBuciA+PiA1OworCW1hc2sgPSAxIDw8IChuciAmIDB4MWYpOworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkqYSAmPSB+bWFzazsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGFuZ2VfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCit7CisJaW50CW1hc2s7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50ICphID0gYWRkcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJYSArPSBuciA+PiA1OworCW1hc2sgPSAxIDw8IChuciAmIDB4MWYpOworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkqYSBePSBtYXNrOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgdGVzdF9hbmRfc2V0X2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQoreworCWludAltYXNrLCByZXR2YWw7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50ICphID0gYWRkcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJYSArPSBuciA+PiA1OworCW1hc2sgPSAxIDw8IChuciAmIDB4MWYpOworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlyZXR2YWwgPSAobWFzayAmICphKSAhPSAwOworCSphIHw9IG1hc2s7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGlubGluZSBpbnQgdGVzdF9hbmRfY2xlYXJfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCit7CisJaW50CW1hc2ssIHJldHZhbDsKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKmEgPSBhZGRyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlhICs9IG5yID4+IDU7CisJbWFzayA9IDEgPDwgKG5yICYgMHgxZik7CisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCXJldHZhbCA9IChtYXNrICYgKmEpICE9IDA7CisJKmEgJj0gfm1hc2s7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGlubGluZSBpbnQgdGVzdF9hbmRfY2hhbmdlX2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQoreworCWludAltYXNrLCByZXR2YWw7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50ICphID0gYWRkcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJYSArPSBuciA+PiA1OworCW1hc2sgPSAxIDw8IChuciAmIDB4MWYpOworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlyZXR2YWwgPSAobWFzayAmICphKSAhPSAwOworCSphIF49IG1hc2s7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGZmeih1bnNpZ25lZCBsb25nIHdvcmQpCit7CisJdW5zaWduZWQgbG9uZyByZXN1bHQ7CisKKwlfX2FzbV9fKCIxOlxuXHQiCisJCSJzaGxyCSUxXG5cdCIKKwkJImJ0L3MJMWJcblx0IgorCQkiIGFkZAkjMSwgJTAiCisJCTogIj1yIiAocmVzdWx0KSwgIj1yIiAod29yZCkKKwkJOiAiMCIgKH4wTCksICIxIiAod29yZCkKKwkJOiAidCIpOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qKgorICogZmZzIC0gZmluZCBmaXJzdCBiaXQgaW4gd29yZC4KKyAqIEB3b3JkOiBUaGUgd29yZCB0byBzZWFyY2gKKyAqCisgKiBVbmRlZmluZWQgaWYgbm8gYml0IGV4aXN0cywgc28gY29kZSBzaG91bGQgY2hlY2sgYWdhaW5zdCAwIGZpcnN0LgorICovCitzdGF0aWMgaW5saW5lIGludCBmZnMgKGludCB4KQoreworCWludCByID0gMTsKKworCWlmICgheCkKKwkJcmV0dXJuIDA7CisJaWYgKCEoeCAmIDB4ZmZmZikpIHsKKwkJeCA+Pj0gMTY7CisJCXIgKz0gMTY7CisJfQorCWlmICghKHggJiAweGZmKSkgeworCQl4ID4+PSA4OworCQlyICs9IDg7CisJfQorCWlmICghKHggJiAweGYpKSB7CisJCXggPj49IDQ7CisJCXIgKz0gNDsKKwl9CisJaWYgKCEoeCAmIDMpKSB7CisJCXggPj49IDI7CisJCXIgKz0gMjsKKwl9CisJaWYgKCEoeCAmIDEpKSB7CisJCXggPj49IDE7CisJCXIgKz0gMTsKKwl9CisJcmV0dXJuIHI7Cit9CisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX19BU01fU0hfQklUT1BTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2J5dGVvcmRlci5oIGIvaW5jbHVkZS9hc20tc2gvYnl0ZW9yZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU2MjZhMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoL2J5dGVvcmRlci5oCkBAIC0wLDAgKzEsMzAgQEAKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaWZuZGVmIF9fQVNNX1NIX0JZVEVPUkRFUl9IXworI2RlZmluZSBfX0FTTV9TSF9CWVRFT1JERVJfSF8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNpbmNsdWRlIDxsaW51eC9ieXRlb3JkZXIvbGl0dGxlX2VuZGlhbi5oPgorI2Vsc2UKKyNpbmNsdWRlIDxsaW51eC9ieXRlb3JkZXIvYmlnX2VuZGlhbi5oPgorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvY3B1X3NoNC5oIGIvaW5jbHVkZS9hc20tc2gvY3B1X3NoNC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2NTgwMzkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9jcHVfc2g0LmgKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNyBOb2J1aGlybyBJd2FtYXRzdSA8aXdhbWF0c3VAbmlnYXVyaS5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaWZuZGVmIF9BU01fQ1BVX1NINF9IXworI2RlZmluZSBfQVNNX0NQVV9TSDRfSF8KKworLyogY2FjaGUgY29udHJvbCAqLworI2RlZmluZSBDQ1JfQ0FDSEVfU1RPUCAgIDB4MDAwMDA4MDgKKyNkZWZpbmUgQ0NSX0NBQ0hFX0VOQUJMRSAweDAwMDAwMTAxCisjZGVmaW5lIENDUl9DQUNIRV9JQ0kgICAgMHgwMDAwMDgwMAorCisjZGVmaW5lIENBQ0hFX09DX0FERFJFU1NfQVJSQVkJMHhmNDAwMDAwMAorI2RlZmluZSBDQUNIRV9PQ19XQVlfU0hJRlQJMTQKKyNkZWZpbmUgQ0FDSEVfT0NfTlVNX0VOVFJJRVMJNTEyCisjZGVmaW5lIENBQ0hFX09DX0VOVFJZX1NISUZUCTUKKworI2lmIGRlZmluZWQgKENPTkZJR19DUFVfU0g3NzUwKQorI2luY2x1ZGUgPGFzbS9jcHVfc2g3NzUwLmg+CisjZWxpZiBkZWZpbmVkIChDT05GSUdfQ1BVX1NINzcyMikKKyNpbmNsdWRlIDxhc20vY3B1X3NoNzcyMi5oPgorI2Vsc2UKKyNlcnJvciAiVW5rbm93biBTSDQgdmFyaWFudCIKKyNlbmRpZgorCisjZW5kaWYJLyogX0FTTV9DUFVfU0g0X0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9jcHVfc2g3NzIyLmggYi9pbmNsdWRlL2FzbS1zaC9jcHVfc2g3NzIyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNkNGE3NwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoL2NwdV9zaDc3MjIuaApAQCAtMCwwICsxLDEzMzcgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDcgTm9idWhpcm8gSXdhbWF0c3UgPGl3YW1hdHN1QG5pZ2F1cmkub3JnPgorICoKKyAqIFNINzcyMiBJbnRlcm5hbCBJL08gcmVnaXN0ZXIKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpZm5kZWYgX0FTTV9DUFVfU0g3NzIyX0hfCisjZGVmaW5lIF9BU01fQ1BVX1NINzcyMl9IXworCisjZGVmaW5lIENBQ0hFX09DX05VTV9XQVlTCTQKKyNkZWZpbmUgQ0NSX0NBQ0hFX0lOSVQJMHgwMDAwMDkwZAorCisvKglFWFAJKi8KKyNkZWZpbmUgVFJBCQkweEZGMDAwMDIwCisjZGVmaW5lIEVYUEVWVAkJMHhGRjAwMDAyNAorI2RlZmluZSBJTlRFVlQJCTB4RkYwMDAwMjgKKworLyoJTU1VCSovCisjZGVmaW5lIFBURUgJCTB4RkYwMDAwMDAKKyNkZWZpbmUgUFRFTAkJMHhGRjAwMDAwNAorI2RlZmluZSBUVEIJCTB4RkYwMDAwMDgKKyNkZWZpbmUgVEVBCQkweEZGMDAwMDBDCisjZGVmaW5lIE1NVUNSCQkweEZGMDAwMDEwCisjZGVmaW5lIFBBU0NSCQkweEZGMDAwMDcwCisjZGVmaW5lIElSTUNSCQkweEZGMDAwMDc4CisKKy8qCUNBQ0hFCSovCisjZGVmaW5lIENDUgkJMHhGRjAwMDAxQworI2RlZmluZSBSQU1DUgkJMHhGRjAwMDA3NAorCisvKglYWSBNRU1PUlkJKi8KKyNkZWZpbmUgWFNBCQkweEZGMDAwMDUwCisjZGVmaW5lIFlTQQkJMHhGRjAwMDA1NAorI2RlZmluZSBYREEJCTB4RkYwMDAwNTgKKyNkZWZpbmUgWURBCQkweEZGMDAwMDVDCisjZGVmaW5lIFhQUgkJMHhGRjAwMDA2MAorI2RlZmluZSBZUFIJCTB4RkYwMDAwNjQKKyNkZWZpbmUgWEVBCQkweEZGMDAwMDY4CisjZGVmaW5lIFlFQQkJMHhGRjAwMDA2QworCisvKglJTlRDCSovCisjZGVmaW5lIElDUjAJCTB4QTQxNDAwMDAKKyNkZWZpbmUgSUNSMQkJMHhBNDE0MDAxQworI2RlZmluZSBJTlRQUkkwCQkweEE0MTQwMDEwCisjZGVmaW5lIElOVFJFUTAJCTB4QTQxNDAwMjQKKyNkZWZpbmUgSU5UTVNLMAkJMHhBNDE0MDA0NAorI2RlZmluZSBJTlRNU0tDTFIwCTB4QTQxNDAwNjQKKyNkZWZpbmUgTk1JRkNSCQkweEE0MTQwMEMwCisjZGVmaW5lIFVTRVJJTUFTSwkweEE0NzAwMDAwCisjZGVmaW5lIElQUkEJCTB4QTQwODAwMDAKKyNkZWZpbmUgSVBSQgkJMHhBNDA4MDAwNAorI2RlZmluZSBJUFJDCQkweEE0MDgwMDA4CisjZGVmaW5lIElQUkQJCTB4QTQwODAwMEMKKyNkZWZpbmUgSVBSRQkJMHhBNDA4MDAxMAorI2RlZmluZSBJUFJGCQkweEE0MDgwMDE0CisjZGVmaW5lIElQUkcJCTB4QTQwODAwMTgKKyNkZWZpbmUgSVBSSAkJMHhBNDA4MDAxQworI2RlZmluZSBJUFJJCQkweEE0MDgwMDIwCisjZGVmaW5lIElQUkoJCTB4QTQwODAwMjQKKyNkZWZpbmUgSVBSSwkJMHhBNDA4MDAyOAorI2RlZmluZSBJUFJMCQkweEE0MDgwMDJDCisjZGVmaW5lIElNUjAJCTB4QTQwODAwODAKKyNkZWZpbmUgSU1SMQkJMHhBNDA4MDA4NAorI2RlZmluZSBJTVIyCQkweEE0MDgwMDg4CisjZGVmaW5lIElNUjMJCTB4QTQwODAwOEMKKyNkZWZpbmUgSU1SNAkJMHhBNDA4MDA5MAorI2RlZmluZSBJTVI1CQkweEE0MDgwMDk0CisjZGVmaW5lIElNUjYJCTB4QTQwODAwOTgKKyNkZWZpbmUgSU1SNwkJMHhBNDA4MDA5QworI2RlZmluZSBJTVI4CQkweEE0MDgwMEEwCisjZGVmaW5lIElNUjkJCTB4QTQwODAwQTQKKyNkZWZpbmUgSU1SMTAJCTB4QTQwODAwQTgKKyNkZWZpbmUgSU1SMTEJCTB4QTQwODAwQUMKKyNkZWZpbmUgSU1DUjAJCTB4QTQwODAwQzAKKyNkZWZpbmUgSU1DUjEJCTB4QTQwODAwQzQKKyNkZWZpbmUgSU1DUjIJCTB4QTQwODAwQzgKKyNkZWZpbmUgSU1DUjMJCTB4QTQwODAwQ0MKKyNkZWZpbmUgSU1DUjQJCTB4QTQwODAwRDAKKyNkZWZpbmUgSU1DUjUJCTB4QTQwODAwRDQKKyNkZWZpbmUgSU1DUjYJCTB4QTQwODAwRDgKKyNkZWZpbmUgSU1DUjcJCTB4QTQwODAwREMKKyNkZWZpbmUgSU1DUjgJCTB4QTQwODAwRTAKKyNkZWZpbmUgSU1DUjkJCTB4QTQwODAwRTQKKyNkZWZpbmUgSU1DUjEwCQkweEE0MDgwMEU4CisjZGVmaW5lIElNQ1IxMQkJMHhBNDA4MDBFQworI2RlZmluZSBNRklfSVBSQQkweEE0MEIwMDAwCisjZGVmaW5lIE1GSV9JUFJCCTB4QTQwQjAwMDQKKyNkZWZpbmUgTUZJX0lQUkMJMHhBNDBCMDAwOAorI2RlZmluZSBNRklfSVBSRAkweEE0MEIwMDBDCisjZGVmaW5lIE1GSV9JUFJFCTB4QTQwQjAwMTAKKyNkZWZpbmUgTUZJX0lQUkYJMHhBNDBCMDAxNAorI2RlZmluZSBNRklfSVBSRwkweEE0MEIwMDE4CisjZGVmaW5lIE1GSV9JUFJICTB4QTQwQjAwMUMKKyNkZWZpbmUgTUZJX0lQUkkJMHhBNDBCMDAyMAorI2RlZmluZSBNRklfSVBSSgkweEE0MEIwMDI0CisjZGVmaW5lIE1GSV9JUFJLCTB4QTQwQjAwMjgKKyNkZWZpbmUgTUZJX0lQUkwJMHhBNDBCMDAyQworI2RlZmluZSBNRklfSU1SMAkweEE0MEIwMDgwCisjZGVmaW5lIE1GSV9JTVIxCTB4QTQwQjAwODQKKyNkZWZpbmUgTUZJX0lNUjIJMHhBNDBCMDA4OAorI2RlZmluZSBNRklfSU1SMwkweEE0MEIwMDhDCisjZGVmaW5lIE1GSV9JTVI0CTB4QTQwQjAwOTAKKyNkZWZpbmUgTUZJX0lNUjUJMHhBNDBCMDA5NAorI2RlZmluZSBNRklfSU1SNgkweEE0MEIwMDk4CisjZGVmaW5lIE1GSV9JTVI3CTB4QTQwQjAwOUMKKyNkZWZpbmUgTUZJX0lNUjgJMHhBNDBCMDBBMAorI2RlZmluZSBNRklfSU1SOQkweEE0MEIwMEE0CisjZGVmaW5lIE1GSV9JTVIxMAkweEE0MEIwMEE4CisjZGVmaW5lIE1GSV9JTVIxMQkweEE0MEIwMEFDCisjZGVmaW5lIE1GSV9JTUNSMAkweEE0MEIwMEMwCisjZGVmaW5lIE1GSV9JTUNSMQkweEE0MEIwMEM0CisjZGVmaW5lIE1GSV9JTUNSMgkweEE0MEIwMEM4CisjZGVmaW5lIE1GSV9JTUNSMwkweEE0MEIwMENDCisjZGVmaW5lIE1GSV9JTUNSNAkweEE0MEIwMEQwCisjZGVmaW5lIE1GSV9JTUNSNQkweEE0MEIwMEQ0CisjZGVmaW5lIE1GSV9JTUNSNgkweEE0MEIwMEQ4CisjZGVmaW5lIE1GSV9JTUNSNwkweEE0MEIwMERDCisjZGVmaW5lIE1GSV9JTUNSOAkweEE0MEIwMEUwCisjZGVmaW5lIE1GSV9JTUNSOQkweEE0MEIwMEU0CisjZGVmaW5lIE1GSV9JTUNSMTAJMHhBNDBCMDBFOAorI2RlZmluZSBNRklfSU1DUjExCTB4QTQwQjAwRUMKKworLyoJQlNDCSovCisjZGVmaW5lIENNTkNSCSAgICAweEZFQzEwMDAwCisjZGVmaW5lCUNTMEJDUgkgICAgMHhGRUMxMDAwNAorI2RlZmluZSBDUzJCQ1IgICAgICAweEZFQzEwMDA4CisjZGVmaW5lIENTNEJDUiAgICAgIDB4RkVDMTAwMTAKKyNkZWZpbmUgQ1M1QUJDUiAgICAgMHhGRUMxMDAxNAorI2RlZmluZSBDUzVCQkNSICAgICAweEZFQzEwMDE4CisjZGVmaW5lIENTNkFCQ1IgICAgIDB4RkVDMTAwMUMKKyNkZWZpbmUgQ1M2QkJDUiAgICAgMHhGRUMxMDAyMAorI2RlZmluZSBDUzBXQ1IgICAgICAweEZFQzEwMDI0CisjZGVmaW5lIENTMldDUiAgICAgIDB4RkVDMTAwMjgKKyNkZWZpbmUgQ1M0V0NSICAgICAgMHhGRUMxMDAzMAorI2RlZmluZSBDUzVBV0NSICAgICAweEZFQzEwMDM0CisjZGVmaW5lIENTNUJXQ1IgICAgIDB4RkVDMTAwMzgKKyNkZWZpbmUgQ1M2QVdDUiAgICAgMHhGRUMxMDAzQworI2RlZmluZSBDUzZCV0NSICAgICAweEZFQzEwMDQwCisjZGVmaW5lIFJCV1RDTlQgICAgIDB4RkVDMTAwNTQKKworLyoJU0JTQwkqLworI2RlZmluZSBTQlNDX1NEQ1IgICAweEZFNDAwMDA4CisjZGVmaW5lIFNCU0NfU0RXQ1IgIDB4RkU0MDAwMEMKKyNkZWZpbmUgU0JTQ19TRFBDUiAgMHhGRTQwMDAxMAorI2RlZmluZSBTQlNDX1JUQ1NSICAweEZFNDAwMDE0CisjZGVmaW5lIFNCU0NfUlRDTlQgIDB4RkU0MDAwMTgKKyNkZWZpbmUgU0JTQ19SVENPUiAgMHhGRTQwMDAxQworI2RlZmluZSBTQlNDX1JGQ1IgICAweEZFNDAwMDIwCisKKy8qCURNQUMJKi8KKyNkZWZpbmUgU0FSXzAgICAgICAgMHhGRTAwODAyMAorI2RlZmluZSBEQVJfMCAgICAgICAweEZFMDA4MDI0CisjZGVmaW5lIFRDUl8wICAgICAgIDB4RkUwMDgwMjgKKyNkZWZpbmUgQ0hDUl8wICAgICAgMHhGRTAwODAyQworI2RlZmluZSBTQVJfMSAgICAgICAweEZFMDA4MDMwCisjZGVmaW5lIERBUl8xICAgICAgIDB4RkUwMDgwMzQKKyNkZWZpbmUgVENSXzEgICAgICAgMHhGRTAwODAzOAorI2RlZmluZSBDSENSXzEgICAgICAweEZFMDA4MDNDCisjZGVmaW5lIFNBUl8yICAgICAgIDB4RkUwMDgwNDAKKyNkZWZpbmUgREFSXzIgICAgICAgMHhGRTAwODA0NAorI2RlZmluZSBUQ1JfMiAgICAgICAweEZFMDA4MDQ4CisjZGVmaW5lIENIQ1JfMiAgICAgIDB4RkUwMDgwNEMKKyNkZWZpbmUgU0FSXzMgICAgICAgMHhGRTAwODA1MAorI2RlZmluZSBEQVJfMyAgICAgICAweEZFMDA4MDU0CisjZGVmaW5lIFRDUl8zICAgICAgIDB4RkUwMDgwNTgKKyNkZWZpbmUgQ0hDUl8zICAgICAgMHhGRTAwODA1QworI2RlZmluZSBTQVJfNCAgICAgICAweEZFMDA4MDcwCisjZGVmaW5lIERBUl80ICAgICAgIDB4RkUwMDgwNzQKKyNkZWZpbmUgVENSXzQgICAgICAgMHhGRTAwODA3OAorI2RlZmluZSBDSENSXzQgICAgICAweEZFMDA4MDdDCisjZGVmaW5lIFNBUl81ICAgICAgIDB4RkUwMDgwODAKKyNkZWZpbmUgREFSXzUgICAgICAgMHhGRTAwODA4NAorI2RlZmluZSBUQ1JfNSAgICAgICAweEZFMDA4MDg4CisjZGVmaW5lIENIQ1JfNSAgICAgIDB4RkUwMDgwOEMKKyNkZWZpbmUgU0FSQl8wICAgICAgMHhGRTAwODEyMAorI2RlZmluZSBEQVJCXzAgICAgICAweEZFMDA4MTI0CisjZGVmaW5lIFRDUkJfMCAgICAgIDB4RkUwMDgxMjgKKyNkZWZpbmUgU0FSQl8xICAgICAgMHhGRTAwODEzMAorI2RlZmluZSBEQVJCXzEgICAgICAweEZFMDA4MTM0CisjZGVmaW5lIFRDUkJfMSAgICAgIDB4RkUwMDgxMzgKKyNkZWZpbmUgU0FSQl8yICAgICAgMHhGRTAwODE0MAorI2RlZmluZSBEQVJCXzIgICAgICAweEZFMDA4MTQ0CisjZGVmaW5lIFRDUkJfMiAgICAgIDB4RkUwMDgxNDgKKyNkZWZpbmUgU0FSQl8zICAgICAgMHhGRTAwODE1MAorI2RlZmluZSBEQVJCXzMgICAgICAweEZFMDA4MTU0CisjZGVmaW5lIFRDUkJfMyAgICAgIDB4RkUwMDgxNTgKKyNkZWZpbmUgRE1BT1IgICAgICAgMHhGRTAwODA2MAorI2RlZmluZSBETUFSU18wICAgICAweEZFMDA5MDAwCisjZGVmaW5lIERNQVJTXzEgICAgIDB4RkUwMDkwMDQKKyNkZWZpbmUgRE1BUlNfMiAgICAgMHhGRTAwOTAwOAorCisvKglDUEcJKi8KKyNkZWZpbmUgRlJRQ1IgICAgICAgMHhBNDE1MDAwMAorI2RlZmluZSBWQ0xLQ1IgICAgICAweEE0MTUwMDA0CisjZGVmaW5lIFNDTEtBQ1IgICAgIDB4QTQxNTAwMDgKKyNkZWZpbmUgU0NMS0JDUiAgICAgMHhBNDE1MDAwQworI2RlZmluZSBQTExDUiAgICAgICAweEE0MTUwMDI0CisjZGVmaW5lIERMTEZSUSAgICAgIDB4QTQxNTAwNTAKKworLyoJTE9XIFBPV0VSIE1PREUJKi8KKyNkZWZpbmUgU1RCQ1IgICAgICAgMHhBNDE1MDAyMAorI2RlZmluZSBNU1RQQ1IwICAgICAweEE0MTUwMDMwCisjZGVmaW5lIE1TVFBDUjEgICAgIDB4QTQxNTAwMzQKKyNkZWZpbmUgTVNUUENSMiAgICAgMHhBNDE1MDAzOAorI2RlZmluZSBCQVIgICAgICAgICAweEE0MTUwMDQwCisKKy8qCVJXRFQJKi8KKyNkZWZpbmUgUldUQ05UICAgICAgMHhBNDUyMDAwMAorI2RlZmluZSBSV1RDU1IgICAgICAweEE0NTIwMDA0CisjZGVmaW5lIFdUQ05UCVJXVENOVAorCisKKy8qCVRNVQkqLworI2RlZmluZSBUU1RSICAgICAgICAweEZGRDgwMDA0CisjZGVmaW5lIFRDT1IwICAgICAgIDB4RkZEODAwMDgKKyNkZWZpbmUgVENOVDAgICAgICAgMHhGRkQ4MDAwQworI2RlZmluZSBUQ1IwICAgICAgICAweEZGRDgwMDEwCisjZGVmaW5lIFRDT1IxICAgICAgIDB4RkZEODAwMTQKKyNkZWZpbmUgVENOVDEgICAgICAgMHhGRkQ4MDAxOAorI2RlZmluZSBUQ1IxICAgICAgICAweEZGRDgwMDFDCisjZGVmaW5lIFRDT1IyICAgICAgIDB4RkZEODAwMjAKKyNkZWZpbmUgVENOVDIgICAgICAgMHhGRkQ4MDAyNAorI2RlZmluZSBUQ1IyICAgICAgICAweEZGRDgwMDI4CisKKy8qCVRQVQkqLworI2RlZmluZSBUUFVfVFNUUiAgICAweEE0QzkwMDAwCisjZGVmaW5lIFRQVV9UQ1IwICAgIDB4QTRDOTAwMTAKKyNkZWZpbmUgVFBVX1RNRFIwICAgMHhBNEM5MDAxNAorI2RlZmluZSBUUFVfVElPUjAgICAweEE0QzkwMDE4CisjZGVmaW5lIFRQVV9USUVSMCAgIDB4QTRDOTAwMUMKKyNkZWZpbmUgVFBVX1RTUjAgICAgMHhBNEM5MDAyMAorI2RlZmluZSBUUFVfVENOVDAgICAweEE0QzkwMDI0CisjZGVmaW5lIFRQVV9UR1IwQSAgIDB4QTRDOTAwMjgKKyNkZWZpbmUgVFBVX1RHUjBCICAgMHhBNEM5MDAyQworI2RlZmluZSBUUFVfVEdSMEMgICAweEE0QzkwMDMwCisjZGVmaW5lIFRQVV9UR1IwRCAgIDB4QTRDOTAwMzQKKyNkZWZpbmUgVFBVX1RDUjEgICAgMHhBNEM5MDA1MAorI2RlZmluZSBUUFVfVE1EUjEgICAweEE0QzkwMDU0CisjZGVmaW5lIFRQVV9USUVSMSAgIDB4QTRDOTAwNUMKKyNkZWZpbmUgVFBVX1RTUjEgICAgMHhBNEM5MDA2MAorI2RlZmluZSBUUFVfVENOVDEgICAweEE0QzkwMDY0CisjZGVmaW5lIFRQVV9UR1IxQSAgIDB4QTRDOTAwNjgKKyNkZWZpbmUgVFBVX1RHUjFCICAgMHhBNEM5MDA2QworI2RlZmluZSBUUFVfVEdSMUMgICAweEE0QzkwMDcwCisjZGVmaW5lIFRQVV9UR1IxRCAgIDB4QTRDOTAwNzQKKyNkZWZpbmUgVFBVX1RDUjIgICAgMHhBNEM5MDA5MAorI2RlZmluZSBUUFVfVE1EUjIgICAweEE0QzkwMDk0CisjZGVmaW5lIFRQVV9USUVSMiAgIDB4QTRDOTAwOUMKKyNkZWZpbmUgVFBVX1RTUjIgICAgMHhBNEM5MDBBMAorI2RlZmluZSBUUFVfVENOVDIgICAweEE0QzkwMEE0CisjZGVmaW5lIFRQVV9UR1IyQSAgIDB4QTRDOTAwQTgKKyNkZWZpbmUgVFBVX1RHUjJCICAgMHhBNEM5MDBBQworI2RlZmluZSBUUFVfVEdSMkMgICAweEE0QzkwMEIwCisjZGVmaW5lIFRQVV9UR1IyRCAgIDB4QTRDOTAwQjQKKyNkZWZpbmUgVFBVX1RDUjMgICAgMHhBNEM5MDBEMAorI2RlZmluZSBUUFVfVE1EUjMgICAweEE0QzkwMEQ0CisjZGVmaW5lIFRQVV9USUVSMyAgIDB4QTRDOTAwREMKKyNkZWZpbmUgVFBVX1RTUjMgICAgMHhBNEM5MDBFMAorI2RlZmluZSBUUFVfVENOVDMgICAweEE0QzkwMEU0CisjZGVmaW5lIFRQVV9UR1IzQSAgIDB4QTRDOTAwRTgKKyNkZWZpbmUgVFBVX1RHUjNCICAgMHhBNEM5MDBFQworI2RlZmluZSBUUFVfVEdSM0MgICAweEE0QzkwMEYwCisjZGVmaW5lIFRQVV9UR1IzRCAgIDB4QTRDOTAwRjQKKworLyoJQ01UCSovCisjZGVmaW5lIENNU1RSICAgICAgIDB4QTQ0QTAwMDAKKyNkZWZpbmUgQ01DU1IgICAgICAgMHhBNDRBMDA2MAorI2RlZmluZSBDTUNOVCAgICAgICAweEE0NEEwMDY0CisjZGVmaW5lIENNQ09SICAgICAgIDB4QTQ0QTAwNjgKKworLyoJU0lPCSovCisjZGVmaW5lIFNJT01EUiAgICAgIDB4QTQ1MDAwMDAKKyNkZWZpbmUgU0lPQ1RSICAgICAgMHhBNDUwMDAwNAorI2RlZmluZSBTSU9TVEJDUjAgICAweEE0NTAwMDA4CisjZGVmaW5lIFNJT1NUQkNSMSAgIDB4QTQ1MDAwMEMKKyNkZWZpbmUgU0lPVERSICAgICAgMHhBNDUwMDAxNAorI2RlZmluZSBTSU9SRFIgICAgICAweEE0NTAwMDE4CisjZGVmaW5lIFNJT1NUUiAgICAgIDB4QTQ1MDAwMUMKKyNkZWZpbmUgU0lPSUVSICAgICAgMHhBNDUwMDAyMAorI2RlZmluZSBTSU9TQ1IgICAgICAweEE0NTAwMDI0CisKKy8qCVNJT0YJKi8KKyNkZWZpbmUgU0lNRFIwICAgICAgMHhBNDQxMDAwMAorI2RlZmluZSBTSVNDUjAgICAgICAweEE0NDEwMDAyCisjZGVmaW5lIFNJVERBUjAgICAgIDB4QTQ0MTAwMDQKKyNkZWZpbmUgU0lSREFSMCAgICAgMHhBNDQxMDAwNgorI2RlZmluZSBTSUNEQVIwICAgICAweEE0NDEwMDA4CisjZGVmaW5lIFNJQ1RSMCAgICAgIDB4QTQ0MTAwMEMKKyNkZWZpbmUgU0lGQ1RSMCAgICAgMHhBNDQxMDAxMAorI2RlZmluZSBTSVNUUjAgICAgICAweEE0NDEwMDE0CisjZGVmaW5lIFNJSUVSMCAgICAgIDB4QTQ0MTAwMTYKKyNkZWZpbmUgU0lURFIwICAgICAgMHhBNDQxMDAyMAorI2RlZmluZSBTSVJEUjAgICAgICAweEE0NDEwMDI0CisjZGVmaW5lIFNJVENSMCAgICAgIDB4QTQ0MTAwMjgKKyNkZWZpbmUgU0lSQ1IwICAgICAgMHhBNDQxMDAyQworI2RlZmluZSBTUElDUjAgICAgICAweEE0NDEwMDMwCisjZGVmaW5lIFNJTURSMSAgICAgIDB4QTQ0MjAwMDAKKyNkZWZpbmUgU0lTQ1IxICAgICAgMHhBNDQyMDAwMgorI2RlZmluZSBTSVREQVIxICAgICAweEE0NDIwMDA0CisjZGVmaW5lIFNJUkRBUjEgICAgIDB4QTQ0MjAwMDYKKyNkZWZpbmUgU0lDREFSMSAgICAgMHhBNDQyMDAwOAorI2RlZmluZSBTSUNUUjEgICAgICAweEE0NDIwMDBDCisjZGVmaW5lIFNJRkNUUjEgICAgIDB4QTQ0MjAwMTAKKyNkZWZpbmUgU0lTVFIxICAgICAgMHhBNDQyMDAxNAorI2RlZmluZSBTSUlFUjEgICAgICAweEE0NDIwMDE2CisjZGVmaW5lIFNJVERSMSAgICAgIDB4QTQ0MjAwMjAKKyNkZWZpbmUgU0lSRFIxICAgICAgMHhBNDQyMDAyNAorI2RlZmluZSBTSVRDUjEgICAgICAweEE0NDIwMDI4CisjZGVmaW5lIFNJUkNSMSAgICAgIDB4QTQ0MjAwMkMKKyNkZWZpbmUgU1BJQ1IxICAgICAgMHhBNDQyMDAzMAorCisvKglTQ0lGCSovCisvKgorI2RlZmluZSBTQ1NNUiAgICAgICAweEZGRTAwMDAwCisjZGVmaW5lIFNDQlJSICAgICAgIDB4RkZFMDAwMDQKKyNkZWZpbmUgU0NTQ1IgICAgICAgMHhGRkUwMDAwOAorI2RlZmluZSBTQ0ZURFIgICAgICAweEZGRTAwMDBDCisjZGVmaW5lIFNDRlNSICAgICAgIDB4RkZFMDAwMTAKKyNkZWZpbmUgU0NGUkRSICAgICAgMHhGRkUwMDAxNAorI2RlZmluZSBTQ0ZDUiAgICAgICAweEZGRTAwMDE4CisjZGVmaW5lIFNDRkRSICAgICAgIDB4RkZFMDAwMUMKKyNkZWZpbmUgU0NMU1IgICAgICAgMHhGRkUwMDAyNAorI2RlZmluZSBTQ1NNUjEgICAgICAweEZGRTEwMDAwCisjZGVmaW5lIFNDQlJSMSAgICAgIDB4RkZFMTAwMDQKKyNkZWZpbmUgU0NTQ1IxICAgICAgMHhGRkUxMDAwOAorI2RlZmluZSBTQ0ZURFIxICAgICAweEZGRTEwMDBDCisjZGVmaW5lIFNDRlNSMSAgICAgIDB4RkZFMTAwMTAKKyNkZWZpbmUgU0NGUkRSMSAgICAgMHhGRkUxMDAxNAorI2RlZmluZSBTQ0ZDUjEgICAgICAweEZGRTEwMDE4CisjZGVmaW5lIFNDRkRSMSAgICAgIDB4RkZFMTAwMUMKKyNkZWZpbmUgU0NMU1IxICAgICAgMHhGRkUxMDAyNAorI2RlZmluZSBTQ1NNUjIgICAgICAweEZGRTIwMDAwCisjZGVmaW5lIFNDQlJSMiAgICAgIDB4RkZFMjAwMDQKKyNkZWZpbmUgU0NTQ1IyICAgICAgMHhGRkUyMDAwOAorI2RlZmluZSBTQ0ZURFIyICAgICAweEZGRTIwMDBDCisjZGVmaW5lIFNDRlNSMiAgICAgIDB4RkZFMjAwMTAKKyNkZWZpbmUgU0NGUkRSMiAgICAgMHhGRkUyMDAxNAorI2RlZmluZSBTQ0ZDUjIgICAgICAweEZGRTIwMDE4CisjZGVmaW5lIFNDRkRSMiAgICAgIDB4RkZFMjAwMUMKKyNkZWZpbmUgU0NMU1IyICAgICAgMHhGRkUyMDAyNAorI2RlZmluZSBTQ1NNUjMgICAgICAweEZGRTMwMDAwCisjZGVmaW5lIFNDQlJSMyAgICAgIDB4RkZFMzAwMDQKKyNkZWZpbmUgU0NTQ1IzICAgICAgMHhGRkUzMDAwOAorI2RlZmluZSBTQ0ZURFIzICAgICAweEZGRTMwMDBDCisjZGVmaW5lIFNDRlNSMyAgICAgIDB4RkZFMzAwMTAKKyNkZWZpbmUgU0NGUkRSMyAgICAgMHhGRkUzMDAxNAorI2RlZmluZSBTQ0ZDUjMgICAgICAweEZGRTMwMDE4CisjZGVmaW5lIFNDRkRSMyAgICAgIDB4RkZFMzAwMUMKKyNkZWZpbmUgU0NMU1IzICAgICAgMHhGRkUzMDAyNAorKi8KKyNkZWZpbmUgU0NJRjBfQkFTRSAgMHhGRkUwMDAwMAorCisvKglTSU0JKi8KKyNkZWZpbmUgU0lNX1NDU01SICAgICAgIDB4QTQ0OTAwMDAKKyNkZWZpbmUgU0lNX1NDQlJSICAgICAgIDB4QTQ0OTAwMDIKKyNkZWZpbmUgU0lNX1NDU0NSICAgICAgIDB4QTQ0OTAwMDQKKyNkZWZpbmUgU0lNX1NDVERSICAgICAgIDB4QTQ0OTAwMDYKKyNkZWZpbmUgU0lNX1NDU1NSICAgICAgIDB4QTQ0OTAwMDgKKyNkZWZpbmUgU0lNX1NDUkRSICAgICAgIDB4QTQ0OTAwMEEKKyNkZWZpbmUgU0lNX1NDU0NNUiAgICAgIDB4QTQ0OTAwMEMKKyNkZWZpbmUgU0lNX1NDU0MyUiAgICAgIDB4QTQ0OTAwMEUKKyNkZWZpbmUgU0lNX1NDV0FJVCAgICAgIDB4QTQ0OTAwMTAKKyNkZWZpbmUgU0lNX1NDR1JEICAgICAgIDB4QTQ0OTAwMTIKKyNkZWZpbmUgU0lNX1NDU01QTCAgICAgIDB4QTQ0OTAwMTQKKyNkZWZpbmUgU0lNX1NDRE1BRU4gICAgIDB4QTQ0OTAwMTYKKworLyoJSXJEQQkqLworI2RlZmluZSBJUklGX0lOSVQxICAgICAgMHhBNDVEMDAxMgorI2RlZmluZSBJUklGX0lOSVQyICAgICAgMHhBNDVEMDAxNAorI2RlZmluZSBJUklGX1JJTlRDTFIgICAgMHhBNDVEMDAxNgorI2RlZmluZSBJUklGX1RJTlRDTFIgICAgMHhBNDVEMDAxOAorI2RlZmluZSBJUklGX1NJUjAgICAgICAgMHhBNDVEMDAyMAorI2RlZmluZSBJUklGX1NJUjEgICAgICAgMHhBNDVEMDAyMgorI2RlZmluZSBJUklGX1NJUjIgICAgICAgMHhBNDVEMDAyNAorI2RlZmluZSBJUklGX1NJUjMgICAgICAgMHhBNDVEMDAyNgorI2RlZmluZSBJUklGX1NJUl9GUk0gICAgMHhBNDVEMDAyOAorI2RlZmluZSBJUklGX1NJUl9FT0YgICAgMHhBNDVEMDAyQQorI2RlZmluZSBJUklGX1NJUl9GTEcgICAgMHhBNDVEMDAyQworI2RlZmluZSBJUklGX1NJUl9TVFMyICAgMHhBNDVEMDAyRQorI2RlZmluZSBJUklGX1VBUlQwICAgICAgMHhBNDVEMDAzMAorI2RlZmluZSBJUklGX1VBUlQxICAgICAgMHhBNDVEMDAzMgorI2RlZmluZSBJUklGX1VBUlQyICAgICAgMHhBNDVEMDAzNAorI2RlZmluZSBJUklGX1VBUlQzICAgICAgMHhBNDVEMDAzNgorI2RlZmluZSBJUklGX1VBUlQ0ICAgICAgMHhBNDVEMDAzOAorI2RlZmluZSBJUklGX1VBUlQ1ICAgICAgMHhBNDVEMDAzQQorI2RlZmluZSBJUklGX1VBUlQ2ICAgICAgMHhBNDVEMDAzQworI2RlZmluZSBJUklGX1VBUlQ3ICAgICAgMHhBNDVEMDAzRQorI2RlZmluZSBJUklGX0NSQzAgICAgICAgMHhBNDVEMDA0MAorI2RlZmluZSBJUklGX0NSQzEgICAgICAgMHhBNDVEMDA0MgorI2RlZmluZSBJUklGX0NSQzIgICAgICAgMHhBNDVEMDA0NAorI2RlZmluZSBJUklGX0NSQzMgICAgICAgMHhBNDVEMDA0NgorI2RlZmluZSBJUklGX0NSQzQgICAgICAgMHhBNDVEMDA0OAorCisvKglJSUMJKi8KKyNkZWZpbmUgSUNEUjAgICAgICAgMHhBNDQ3MDAwMAorI2RlZmluZSBJQ0NSMCAgICAgICAweEE0NDcwMDA0CisjZGVmaW5lIElDU1IwICAgICAgIDB4QTQ0NzAwMDgKKyNkZWZpbmUgSUNJQzAgICAgICAgMHhBNDQ3MDAwQworI2RlZmluZSBJQ0NMMCAgICAgICAweEE0NDcwMDEwCisjZGVmaW5lIElDQ0gwICAgICAgIDB4QTQ0NzAwMTQKKyNkZWZpbmUgSUNEUjEgICAgICAgMHhBNDc1MDAwMAorI2RlZmluZSBJQ0NSMSAgICAgICAweEE0NzUwMDA0CisjZGVmaW5lIElDU1IxICAgICAgIDB4QTQ3NTAwMDgKKyNkZWZpbmUgSUNJQzEgICAgICAgMHhBNDc1MDAwQworI2RlZmluZSBJQ0NMMSAgICAgICAweEE0NzUwMDEwCisjZGVmaW5lIElDQ0gxICAgICAgIDB4QTQ3NTAwMTQKKworLyoJRkxDVEwJKi8KKyNkZWZpbmUgRkxDTU5DUiAgICAgMHhBNDUzMDAwMAorI2RlZmluZSBGTENNRENSICAgICAweEE0NTMwMDA0CisjZGVmaW5lIEZMQ01DRFIgICAgIDB4QTQ1MzAwMDgKKyNkZWZpbmUgRkxBRFIgICAgICAgMHhBNDUzMDAwQworI2RlZmluZSBGTERBVEFSICAgICAweEE0NTMwMDEwCisjZGVmaW5lIEZMRFRDTlRSICAgIDB4QTQ1MzAwMTQKKyNkZWZpbmUgRkxJTlRETUFDUiAgMHhBNDUzMDAxOAorI2RlZmluZSBGTEJTWVRNUiAgICAweEE0NTMwMDFDCisjZGVmaW5lIEZMQlNZQ05UICAgIDB4QTQ1MzAwMjAKKyNkZWZpbmUgRkxEVEZJRk8gICAgMHhBNDUzMDAyNAorI2RlZmluZSBGTEVDRklGTyAgICAweEE0NTMwMDI4CisjZGVmaW5lIEZMVFJDUiAgICAgIDB4QTQ1MzAwMkMKKyNkZWZpbmUgRkxBRFIyICAgICAgMHhBNDUzMDAzQworCisvKglNRkkJKi8KKyNkZWZpbmUgTUZJSURYICAgICAgMHhBNEMxMDAwMAorI2RlZmluZSBNRklHU1IgICAgICAweEE0QzEwMDA0CisjZGVmaW5lIE1GSVNDUiAgICAgIDB4QTRDMTAwMDgKKyNkZWZpbmUgTUZJTUNSICAgICAgMHhBNEMxMDAwQworI2RlZmluZSBNRklJSUNSICAgICAweEE0QzEwMDEwCisjZGVmaW5lIE1GSUVJQ1IgICAgIDB4QTRDMTAwMTQKKyNkZWZpbmUgTUZJQURSICAgICAgMHhBNEMxMDAxOAorI2RlZmluZSBNRklEQVRBICAgICAweEE0QzEwMDFDCisjZGVmaW5lIE1GSVJDUiAgICAgIDB4QTRDMTAwMjAKKyNkZWZpbmUgTUZJSU5URVZUICAgMHhBNEMxMDAyQworI2RlZmluZSBNRklJTUFTSyAgICAweEE0QzEwMDMwCisjZGVmaW5lIE1GSUJDUiAgICAgIDB4QTRDMTAwNDAKKyNkZWZpbmUgTUZJQURSVyAgICAgMHhBNEMxMDA0NAorI2RlZmluZSBNRklBRFJSICAgICAweEE0QzEwMDQ4CisjZGVmaW5lIE1GSURBVEFXICAgIDB4QTRDMTAwNEMKKyNkZWZpbmUgTUZJREFUQVIgICAgMHhBNEMxMDA1MAorI2RlZmluZSBNRklNQ1JXICAgICAweEE0QzEwMDU0CisjZGVmaW5lIE1GSU1DUlIgICAgIDB4QTRDMTAwNTgKKyNkZWZpbmUgTUZJRE5SVyAgICAgMHhBNEMxMDA1QworI2RlZmluZSBNRklETlJSICAgICAweEE0QzEwMDYwCisjZGVmaW5lIE1GSVNJWkVXICAgIDB4QTRDMTAwNjQKKyNkZWZpbmUgTUZJU0laRVIgICAgMHhBNEMxMDA2OAorI2RlZmluZSBNRklERVZDUiAgICAweEE0QzEwMDM4CisjZGVmaW5lIE1GSVNNNCAgICAgIDB4QTRDMTAwODAKKworLyoJVlBVCSovCisjZGVmaW5lIFZQNF9DVFJMICAgICAgICAweEZFOTAwMDAwCisjZGVmaW5lIFZQNF9WT0xfQ1RSTCAgICAweEZFOTAwMDA0CisjZGVmaW5lIFZQNF9JTUFHRV9TSVpFICAweEZFOTAwMDA4CisjZGVmaW5lIFZQNF9NQl9OVU0gICAgICAweEZFOTAwMDBDCisjZGVmaW5lIFZQNF9EV1lfQUREUiAgICAweEZFOTAwMDEwCisjZGVmaW5lIFZQNF9EV0NfQUREUiAgICAweEZFOTAwMDE0CisjZGVmaW5lIFZQNF9EMldZX0FERFIgICAweEZFOTAwMDE4CisjZGVmaW5lIFZQNF9EMldDX0FERFIgICAweEZFOTAwMDFDCisjZGVmaW5lIFZQNF9EUDFfQUREUiAgICAweEZFOTAwMDIwCisjZGVmaW5lIFZQNF9EUDJfQUREUiAgICAweEZFOTAwMDI0CisjZGVmaW5lIFZQNF9TVFJTX0FERFIgICAweEZFOTAwMDI4CisjZGVmaW5lIFZQNF9TVFJFX0FERFIgICAweEZFOTAwMDJDCisjZGVmaW5lIFZQNF9WT1BfQ1RSTCAgICAweEZFOTAwMDMwCisjZGVmaW5lIFZQNF9WT1BfVElNRSAgICAweEZFOTAwMDM0CisjZGVmaW5lIFZQNF8yNjNfQ1RSTCAgICAweEZFOTAwMDM4CisjZGVmaW5lIFZQNF8yNjRfQ1RSTCAgICAweEZFOTAwMDNDCisjZGVmaW5lIFZQNF9WTENfQ1RSTCAgICAweEZFOTAwMDQwCisjZGVmaW5lIFZQNF9FTkRJQU4gICAgICAweEZFOTAwMDQ0CisjZGVmaW5lIFZQNF9DTUQgICAgICAgICAweEZFOTAwMDQ4CisjZGVmaW5lIFZQNF9NRV9USDEgICAgICAweEZFOTAwMDRDCisjZGVmaW5lIFZQNF9NRV9USDIgICAgICAweEZFOTAwMDUwCisjZGVmaW5lIFZQNF9NRV9DT1NUTUIgICAweEZFOTAwMDU0CisjZGVmaW5lIFZQNF9NRV9TS0lQICAgICAweEZFOTAwMDU4CisjZGVmaW5lIFZQNF9NRV9DVFJMICAgICAweEZFOTAwMDVDCisjZGVmaW5lIFZQNF9NQlJGX0NUUkwgICAweEZFOTAwMDYwCisjZGVmaW5lIFZQNF9NQ19DVFJMICAgICAweEZFOTAwMDY0CisjZGVmaW5lIFZQNF9QUkVEX0NUUkwgICAweEZFOTAwMDY4CisjZGVmaW5lIFZQNF9TTENfU0laRSAgICAweEZFOTAwMDZDCisjZGVmaW5lIFZQNF9WT1BfTUlOQklUICAweEZFOTAwMDcwCisjZGVmaW5lIFZQNF9NQl9NQVhCSVQgICAweEZFOTAwMDc0CisjZGVmaW5lIFZQNF9NQl9UQklUICAgICAweEZFOTAwMDc4CisjZGVmaW5lIFZQNF9SQ1FOVCAgICAgICAweEZFOTAwMDdDCisjZGVmaW5lIFZQNF9SQ1JQICAgICAgICAweEZFOTAwMDgwCisjZGVmaW5lIFZQNF9SQ0RKICAgICAgICAweEZFOTAwMDg0CisjZGVmaW5lIFZQNF9SQ1dRICAgICAgICAweEZFOTAwMDg4CisjZGVmaW5lIFZQNF9GV0RfVElNRSAgICAweEZFOTAwMDk0CisjZGVmaW5lIFZQNF9CV0RfVElNRSAgICAweEZFOTAwMDk4CisjZGVmaW5lIFZQNF9QU1RfVElNRSAgICAweEZFOTAwMDlDCisjZGVmaW5lIFZQNF9JTFRGUkFNRSAgICAweEZFOTAwMEEwCisjZGVmaW5lIFZQNF9FQ19SRUYgICAgICAweEZFOTAwMEE0CisjZGVmaW5lIFZQNF9TVEFUVVMgICAgICAweEZFOTAwMTAwCisjZGVmaW5lIFZQNF9JUlFfRU5CICAgICAweEZFOTAwMTA0CisjZGVmaW5lIFZQNF9JUlFfU1RBICAgICAweEZFOTAwMTA4CisjZGVmaW5lIFZQNF9WT1BfQklUICAgICAweEZFOTAwMTBDCisjZGVmaW5lIFZQNF9QUlZfQklUICAgICAweEZFOTAwMTEwCisjZGVmaW5lIFZQNF9TTENfTUIgICAgICAweEZFOTAwMTE0CisjZGVmaW5lIFZQNF9RU1VNICAgICAgICAweEZFOTAwMTE4CisjZGVmaW5lIFZQNF9ERUNfRVJSICAgICAweEZFOTAwMTFDCisjZGVmaW5lIFZQNF9FUlJfQVJFQSAgICAweEZFOTAwMTIwCisjZGVmaW5lIFZQNF9ORVhUX0NPREUgICAweEZFOTAwMTI0CisjZGVmaW5lIFZQNF9NQl9BVFRSICAgICAweEZFOTAwMTI4CisjZGVmaW5lIFZQNF9EQk1PTiAgICAgICAweEZFOTAwMTJDCisjZGVmaW5lIFZQNF9ERUJVRyAgICAgICAweEZFOTAwMTMwCisjZGVmaW5lIFZQNF9FUlJfREVUICAgICAweEZFOTAwMTM0CisjZGVmaW5lIFZQNF9DTEtfU1RPUCAgICAweEZFOTAwMTM4CisjZGVmaW5lIFZQNF9NQl9TQURBICAgICAweEZFOTAwMTNDCisjZGVmaW5lIFZQNF9NQl9TQURSICAgICAweEZFOTAwMTQwCisjZGVmaW5lIFZQNF9NQVRfUkFNICAgICAweEZFOTAxMDAwCisjZGVmaW5lIFZQNF9OQ19SQU0gICAgICAweEZFOTAyMDAwCisjZGVmaW5lIFdUICAgICAgICAgICAgICAweEZFOTAyMENDCisjZGVmaW5lIFZQNF9DUFlfQUREUiAgICAweEZFOTAyMjY0CisjZGVmaW5lIFZQNF9DUENfQUREUiAgICAweEZFOTAyMjY4CisjZGVmaW5lIFZQNF9SMFlfQUREUiAgICAweEZFOTAyMjZDCisjZGVmaW5lIFZQNF9SMENfQUREUiAgICAweEZFOTAyMjcwCisjZGVmaW5lIFZQNF9SMVlfQUREUiAgICAweEZFOTAyMjc0CisjZGVmaW5lIFZQNF9SMUNfQUREUiAgICAweEZFOTAyMjc4CisjZGVmaW5lIFZQNF9SMllfQUREUiAgICAweEZFOTAyMjdDCisjZGVmaW5lIFZQNF9SMkNfQUREUiAgICAweEZFOTAyMjgwCisjZGVmaW5lIFZQNF9SM1lfQUREUiAgICAweEZFOTAyMjg0CisjZGVmaW5lIFZQNF9SM0NfQUREUiAgICAweEZFOTAyMjg4CisjZGVmaW5lIFZQNF9SNFlfQUREUiAgICAweEZFOTAyMjhDCisjZGVmaW5lIFZQNF9SNENfQUREUiAgICAweEZFOTAyMjkwCisjZGVmaW5lIFZQNF9SNVlfQUREUiAgICAweEZFOTAyMjk0CisjZGVmaW5lIFZQNF9SNUNfQUREUiAgICAweEZFOTAyMjk4CisjZGVmaW5lIFZQNF9SNllfQUREUiAgICAweEZFOTAyMjlDCisjZGVmaW5lIFZQNF9SNkNfQUREUiAgICAweEZFOTAyMkEwCisjZGVmaW5lIFZQNF9SN1lfQUREUiAgICAweEZFOTAyMkE0CisjZGVmaW5lIFZQNF9SN0NfQUREUiAgICAweEZFOTAyMkE4CisjZGVmaW5lIFZQNF9SOFlfQUREUiAgICAweEZFOTAyMkFDCisjZGVmaW5lIFZQNF9SOENfQUREUiAgICAweEZFOTAyMkIwCisjZGVmaW5lIFZQNF9SOVlfQUREUiAgICAweEZFOTAyMkI0CisjZGVmaW5lIFZQNF9SOUNfQUREUiAgICAweEZFOTAyMkI4CisjZGVmaW5lIFZQNF9SQVlfQUREUiAgICAweEZFOTAyMkJDCisjZGVmaW5lIFZQNF9SQUNfQUREUiAgICAweEZFOTAyMkMwCisjZGVmaW5lIFZQNF9SQllfQUREUiAgICAweEZFOTAyMkM0CisjZGVmaW5lIFZQNF9SQkNfQUREUiAgICAweEZFOTAyMkM4CisjZGVmaW5lIFZQNF9SQ1lfQUREUiAgICAweEZFOTAyMkNDCisjZGVmaW5lIFZQNF9SQ0NfQUREUiAgICAweEZFOTAyMkQwCisjZGVmaW5lIFZQNF9SRFlfQUREUiAgICAweEZFOTAyMkQ0CisjZGVmaW5lIFZQNF9SRENfQUREUiAgICAweEZFOTAyMkQ4CisjZGVmaW5lIFZQNF9SRVlfQUREUiAgICAweEZFOTAyMkRDCisjZGVmaW5lIFZQNF9SRUNfQUREUiAgICAweEZFOTAyMkUwCisjZGVmaW5lIFZQNF9SRllfQUREUiAgICAweEZFOTAyMkU0CisjZGVmaW5lIFZQNF9SRkNfQUREUiAgICAweEZFOTAyMkU4CisKKy8qCVZJTyhDRVUpCSovCisjZGVmaW5lIENBUFNSICAgICAgIDB4RkU5MTAwMDAKKyNkZWZpbmUgQ0FQQ1IgICAgICAgMHhGRTkxMDAwNAorI2RlZmluZSBDQU1DUiAgICAgICAweEZFOTEwMDA4CisjZGVmaW5lIENNQ1lSICAgICAgIDB4RkU5MTAwMEMKKyNkZWZpbmUgQ0FNT1IgICAgICAgMHhGRTkxMDAxMAorI2RlZmluZSBDQVBXUiAgICAgICAweEZFOTEwMDE0CisjZGVmaW5lIENBSUZSICAgICAgIDB4RkU5MTAwMTgKKyNkZWZpbmUgQ1NUQ1IgICAgICAgMHhGRTkxMDAyMAorI2RlZmluZSBDU0VDUiAgICAgICAweEZFOTEwMDI0CisjZGVmaW5lIENSQ05UUiAgICAgIDB4RkU5MTAwMjgKKyNkZWZpbmUgQ1JDTVBSICAgICAgMHhGRTkxMDAyQworI2RlZmluZSBDRkxDUiAgICAgICAweEZFOTEwMDMwCisjZGVmaW5lIENGU1pSICAgICAgIDB4RkU5MTAwMzQKKyNkZWZpbmUgQ0RXRFIgICAgICAgMHhGRTkxMDAzOAorI2RlZmluZSBDREFZUiAgICAgICAweEZFOTEwMDNDCisjZGVmaW5lIENEQUNSICAgICAgIDB4RkU5MTAwNDAKKyNkZWZpbmUgQ0RCWVIgICAgICAgMHhGRTkxMDA0NAorI2RlZmluZSBDREJDUiAgICAgICAweEZFOTEwMDQ4CisjZGVmaW5lIENCRFNSICAgICAgIDB4RkU5MTAwNEMKKyNkZWZpbmUgQ0xGQ1IgICAgICAgMHhGRTkxMDA2MAorI2RlZmluZSBDRE9DUiAgICAgICAweEZFOTEwMDY0CisjZGVmaW5lIENERENSICAgICAgIDB4RkU5MTAwNjgKKyNkZWZpbmUgQ0REQVIgICAgICAgMHhGRTkxMDA2QworI2RlZmluZSBDRUlFUiAgICAgICAweEZFOTEwMDcwCisjZGVmaW5lIENFVENSICAgICAgIDB4RkU5MTAwNzQKKyNkZWZpbmUgQ1NUU1IgICAgICAgMHhGRTkxMDA3QworI2RlZmluZSBDU1JUUiAgICAgICAweEZFOTEwMDgwCisjZGVmaW5lIENEQVlSMiAgICAgIDB4RkU5MTAwOTAKKyNkZWZpbmUgQ0RBQ1IyICAgICAgMHhGRTkxMDA5NAorI2RlZmluZSBDREJZUjIgICAgICAweEZFOTEwMDk4CisjZGVmaW5lIENEQkNSMiAgICAgIDB4RkU5MTAwOUMKKworLyoJVklPKFZFVSkJKi8KKyNkZWZpbmUgVkVTVFIgICAgICAgMHhGRTkyMDAwMAorI2RlZmluZSBWRVNXUiAgICAgICAweEZFOTIwMDEwCisjZGVmaW5lIFZFU1NSICAgICAgIDB4RkU5MjAwMTQKKyNkZWZpbmUgVlNBWVIgICAgICAgMHhGRTkyMDAxOAorI2RlZmluZSBWU0FDUiAgICAgICAweEZFOTIwMDFDCisjZGVmaW5lIFZCU1NSICAgICAgIDB4RkU5MjAwMjAKKyNkZWZpbmUgVkVEV1IgICAgICAgMHhGRTkyMDAzMAorI2RlZmluZSBWREFZUiAgICAgICAweEZFOTIwMDM0CisjZGVmaW5lIFZEQUNSICAgICAgIDB4RkU5MjAwMzgKKyNkZWZpbmUgVlRSQ1IgICAgICAgMHhGRTkyMDA1MAorI2RlZmluZSBWUkZDUiAgICAgICAweEZFOTIwMDU0CisjZGVmaW5lIFZSRlNSICAgICAgIDB4RkU5MjAwNTgKKyNkZWZpbmUgVkVOSFIgICAgICAgMHhGRTkyMDA1QworI2RlZmluZSBWRk1DUiAgICAgICAweEZFOTIwMDcwCisjZGVmaW5lIFZWVENSICAgICAgIDB4RkU5MjAwNzQKKyNkZWZpbmUgVkhUQ1IgICAgICAgMHhGRTkyMDA3OAorI2RlZmluZSBWQVBDUiAgICAgICAweEZFOTIwMDgwCisjZGVmaW5lIFZFQ0NSICAgICAgIDB4RkU5MjAwODQKKyNkZWZpbmUgVkFGWFIgICAgICAgMHhGRTkyMDA5MAorI2RlZmluZSBWU1dQUiAgICAgICAweEZFOTIwMDk0CisjZGVmaW5lIFZFSUVSICAgICAgIDB4RkU5MjAwQTAKKyNkZWZpbmUgVkVWVFIgICAgICAgMHhGRTkyMDBBNAorI2RlZmluZSBWU1RBUiAgICAgICAweEZFOTIwMEIwCisjZGVmaW5lIFZCU1JSICAgICAgIDB4RkU5MjAwQjQKKworLyoJVklPKEJFVSkJKi8KKyNkZWZpbmUgQkVTVFIgICAgICAgMHhGRTkzMDAwMAorI2RlZmluZSBCU01XUjEgICAgICAweEZFOTMwMDEwCisjZGVmaW5lIEJTU1pSMSAgICAgIDB4RkU5MzAwMTQKKyNkZWZpbmUgQlNBWVIxICAgICAgMHhGRTkzMDAxOAorI2RlZmluZSBCU0FDUjEgICAgICAweEZFOTMwMDFDCisjZGVmaW5lIEJTQUFSMSAgICAgIDB4RkU5MzAwMjAKKyNkZWZpbmUgQlNJRlIxICAgICAgMHhGRTkzMDAyNAorI2RlZmluZSBCU01XUjIgICAgICAweEZFOTMwMDI4CisjZGVmaW5lIEJTU1pSMiAgICAgIDB4RkU5MzAwMkMKKyNkZWZpbmUgQlNBWVIyICAgICAgMHhGRTkzMDAzMAorI2RlZmluZSBCU0FDUjIgICAgICAweEZFOTMwMDM0CisjZGVmaW5lIEJTQUFSMiAgICAgIDB4RkU5MzAwMzgKKyNkZWZpbmUgQlNJRlIyICAgICAgMHhGRTkzMDAzQworI2RlZmluZSBCU01XUjMgICAgICAweEZFOTMwMDQwCisjZGVmaW5lIEJTU1pSMyAgICAgIDB4RkU5MzAwNDQKKyNkZWZpbmUgQlNBWVIzICAgICAgMHhGRTkzMDA0OAorI2RlZmluZSBCU0FDUjMgICAgICAweEZFOTMwMDRDCisjZGVmaW5lIEJTQUFSMyAgICAgIDB4RkU5MzAwNTAKKyNkZWZpbmUgQlNJRlIzICAgICAgMHhGRTkzMDA1NAorI2RlZmluZSBCVFBTUiAgICAgICAweEZFOTMwMDU4CisjZGVmaW5lIEJNU01XUjEgICAgIDB4RkU5MzAwNzAKKyNkZWZpbmUgQk1TU1pSMSAgICAgMHhGRTkzMDA3NAorI2RlZmluZSBCTVNBWVIxICAgICAweEZFOTMwMDc4CisjZGVmaW5lIEJNU0FDUjEgICAgIDB4RkU5MzAwN0MKKyNkZWZpbmUgQk1TTVdSMiAgICAgMHhGRTkzMDA4MAorI2RlZmluZSBCTVNTWlIyICAgICAweEZFOTMwMDg0CisjZGVmaW5lIEJNU0FZUjIgICAgIDB4RkU5MzAwODgKKyNkZWZpbmUgQk1TQUNSMiAgICAgMHhGRTkzMDA4QworI2RlZmluZSBCTVNNV1IzICAgICAweEZFOTMwMDkwCisjZGVmaW5lIEJNU1NaUjMgICAgIDB4RkU5MzAwOTQKKyNkZWZpbmUgQk1TQVlSMyAgICAgMHhGRTkzMDA5OAorI2RlZmluZSBCTVNBQ1IzICAgICAweEZFOTMwMDlDCisjZGVmaW5lIEJNU01XUjQgICAgIDB4RkU5MzAwQTAKKyNkZWZpbmUgQk1TU1pSNCAgICAgMHhGRTkzMDBBNAorI2RlZmluZSBCTVNBWVI0ICAgICAweEZFOTMwMEE4CisjZGVmaW5lIEJNU0FDUjQgICAgIDB4RkU5MzAwQUMKKyNkZWZpbmUgQk1TSUZSICAgICAgMHhGRTkzMDBGMAorI2RlZmluZSBCQkxDUjAgICAgICAweEZFOTMwMTAwCisjZGVmaW5lIEJCTENSMSAgICAgIDB4RkU5MzAxMDQKKyNkZWZpbmUgQlBST0NSICAgICAgMHhGRTkzMDEwOAorI2RlZmluZSBCTVdDUjAgICAgICAweEZFOTMwMTBDCisjZGVmaW5lIEJMT0NSMSAgICAgIDB4RkU5MzAxMTQKKyNkZWZpbmUgQkxPQ1IyICAgICAgMHhGRTkzMDExOAorI2RlZmluZSBCTE9DUjMgICAgICAweEZFOTMwMTFDCisjZGVmaW5lIEJNTE9DUjEgICAgIDB4RkU5MzAxMjAKKyNkZWZpbmUgQk1MT0NSMiAgICAgMHhGRTkzMDEyNAorI2RlZmluZSBCTUxPQ1IzICAgICAweEZFOTMwMTI4CisjZGVmaW5lIEJNTE9DUjQgICAgIDB4RkU5MzAxMkMKKyNkZWZpbmUgQk1QQ0NSMSAgICAgMHhGRTkzMDEzMAorI2RlZmluZSBCTVBDQ1IyICAgICAweEZFOTMwMTM0CisjZGVmaW5lIEJQS0ZSICAgICAgIDB4RkU5MzAxNDAKKyNkZWZpbmUgQlBDQ1IwICAgICAgMHhGRTkzMDE0NAorI2RlZmluZSBCUENDUjExICAgICAweEZFOTMwMTQ4CisjZGVmaW5lIEJQQ0NSMTIgICAgIDB4RkU5MzAxNEMKKyNkZWZpbmUgQlBDQ1IyMSAgICAgMHhGRTkzMDE1MAorI2RlZmluZSBCUENDUjIyICAgICAweEZFOTMwMTU0CisjZGVmaW5lIEJQQ0NSMzEgICAgIDB4RkU5MzAxNTgKKyNkZWZpbmUgQlBDQ1IzMiAgICAgMHhGRTkzMDE1QworI2RlZmluZSBCRE1XUiAgICAgICAweEZFOTMwMTYwCisjZGVmaW5lIEJEQVlSICAgICAgIDB4RkU5MzAxNjQKKyNkZWZpbmUgQkRBQ1IgICAgICAgMHhGRTkzMDE2OAorI2RlZmluZSBCQUZYUiAgICAgICAweEZFOTMwMTgwCisjZGVmaW5lIEJTV1BSICAgICAgIDB4RkU5MzAxODQKKyNkZWZpbmUgQkVJRVIgICAgICAgMHhGRTkzMDE4OAorI2RlZmluZSBCRVZUUiAgICAgICAweEZFOTMwMThDCisjZGVmaW5lIEJSQ05UUiAgICAgIDB4RkU5MzAxOTQKKyNkZWZpbmUgQlNUQVIgICAgICAgMHhGRTkzMDE5OAorI2RlZmluZSBCQlJTVFIgICAgICAweEZFOTMwMTlDCisjZGVmaW5lIEJSQ0hSICAgICAgIDB4RkU5MzAxQTAKKyNkZWZpbmUgQ0xVVCAgICAgICAgMHhGRTkzMzAwMAorCisvKglKUFUJKi8KKyNkZWZpbmUgSkNNT0QgICAgICAgMHhGRUEwMDAwMAorI2RlZmluZSBKQ0NNRCAgICAgICAweEZFQTAwMDA0CisjZGVmaW5lIEpDU1RTICAgICAgIDB4RkVBMDAwMDgKKyNkZWZpbmUgSkNRVE4gICAgICAgMHhGRUEwMDAwQworI2RlZmluZSBKQ0hUTiAgICAgICAweEZFQTAwMDEwCisjZGVmaW5lIEpDRFJJVSAgICAgIDB4RkVBMDAwMTQKKyNkZWZpbmUgSkNEUklEICAgICAgMHhGRUEwMDAxOAorI2RlZmluZSBKQ1ZTWlUgICAgICAweEZFQTAwMDFDCisjZGVmaW5lIEpDVlNaRCAgICAgIDB4RkVBMDAwMjAKKyNkZWZpbmUgSkNIU1pVICAgICAgMHhGRUEwMDAyNAorI2RlZmluZSBKQ0hTWkQgICAgICAweEZFQTAwMDI4CisjZGVmaW5lIEpDRFRDVSAgICAgIDB4RkVBMDAwMkMKKyNkZWZpbmUgSkNEVENNICAgICAgMHhGRUEwMDAzMAorI2RlZmluZSBKQ0RUQ0QgICAgICAweEZFQTAwMDM0CisjZGVmaW5lIEpJTlRFICAgICAgIDB4RkVBMDAwMzgKKyNkZWZpbmUgSklOVFMgICAgICAgMHhGRUEwMDAzQworI2RlZmluZSBKQ0RFUlIgICAgICAweEZFQTAwMDQwCisjZGVmaW5lIEpDUlNUICAgICAgIDB4RkVBMDAwNDQKKyNkZWZpbmUgSklGQ05UICAgICAgMHhGRUEwMDA2MAorI2RlZmluZSBKSUZFQ05UICAgICAweEZFQTAwMDcwCisjZGVmaW5lIEpJRkVTWUExICAgIDB4RkVBMDAwNzQKKyNkZWZpbmUgSklGRVNDQTEgICAgMHhGRUEwMDA3OAorI2RlZmluZSBKSUZFU1lBMiAgICAweEZFQTAwMDdDCisjZGVmaW5lIEpJRkVTQ0EyICAgIDB4RkVBMDAwODAKKyNkZWZpbmUgSklGRVNNVyAgICAgMHhGRUEwMDA4NAorI2RlZmluZSBKSUZFU1ZTWiAgICAweEZFQTAwMDg4CisjZGVmaW5lIEpJRkVTSFNaICAgIDB4RkVBMDAwOEMKKyNkZWZpbmUgSklGRURBMSAgICAgMHhGRUEwMDA5MAorI2RlZmluZSBKSUZFREEyICAgICAweEZFQTAwMDk0CisjZGVmaW5lIEpJRkVEUlNaICAgIDB4RkVBMDAwOTgKKyNkZWZpbmUgSklGRENOVCAgICAgMHhGRUEwMDBBMAorI2RlZmluZSBKSUZEU0ExICAgICAweEZFQTAwMEE0CisjZGVmaW5lIEpJRkRTQTIgICAgIDB4RkVBMDAwQTgKKyNkZWZpbmUgSklGRERSU1ogICAgMHhGRUEwMDBBQworI2RlZmluZSBKSUZERE1XICAgICAweEZFQTAwMEIwCisjZGVmaW5lIEpJRkREVlNaICAgIDB4RkVBMDAwQjQKKyNkZWZpbmUgSklGRERIU1ogICAgMHhGRUEwMDBCOAorI2RlZmluZSBKSUZERFlBMSAgICAweEZFQTAwMEJDCisjZGVmaW5lIEpJRkREQ0ExICAgIDB4RkVBMDAwQzAKKyNkZWZpbmUgSklGRERZQTIgICAgMHhGRUEwMDBDNAorI2RlZmluZSBKSUZERENBMiAgICAweEZFQTAwMEM4CisjZGVmaW5lIEpDUVRCTDAgICAgIDB4RkVBMTAwMDAKKyNkZWZpbmUgSkNRVEJMMSAgICAgMHhGRUExMDA0MAorI2RlZmluZSBKQ1FUQkwyICAgICAweEZFQTEwMDgwCisjZGVmaW5lIEpDUVRCTDMgICAgIDB4RkVBMTAwQzAKKyNkZWZpbmUgSkNIVEJEMCAgICAgMHhGRUExMDEwMAorI2RlZmluZSBKQ0hUQkEwICAgICAweEZFQTEwMTIwCisjZGVmaW5lIEpDSFRCRDEgICAgIDB4RkVBMTAyMDAKKyNkZWZpbmUgSkNIVEJBMSAgICAgMHhGRUExMDIyMAorCisvKglMQ0RDCSovCisjZGVmaW5lIE1MRERDS1BBVDFSIDB4RkU5NDA0MDAKKyNkZWZpbmUgTUxERENLUEFUMlIgMHhGRTk0MDQwNAorI2RlZmluZSBTTEREQ0tQQVQxUiAweEZFOTQwNDA4CisjZGVmaW5lIFNMRERDS1BBVDJSIDB4RkU5NDA0MEMKKyNkZWZpbmUgTEREQ0tSICAgICAgMHhGRTk0MDQxMAorI2RlZmluZSBMRERDS1NUUFIgICAweEZFOTQwNDE0CisjZGVmaW5lIE1MRE1UMVIgICAgIDB4RkU5NDA0MTgKKyNkZWZpbmUgTUxETVQyUiAgICAgMHhGRTk0MDQxQworI2RlZmluZSBNTERNVDNSICAgICAweEZFOTQwNDIwCisjZGVmaW5lIE1MRERGUiAgICAgIDB4RkU5NDA0MjQKKyNkZWZpbmUgTUxEU00xUiAgICAgMHhGRTk0MDQyOAorI2RlZmluZSBNTERTTTJSICAgICAweEZFOTQwNDJDCisjZGVmaW5lIE1MRFNBMVIgICAgIDB4RkU5NDA0MzAKKyNkZWZpbmUgTUxEU0EyUiAgICAgMHhGRTk0MDQzNAorI2RlZmluZSBNTERNTFNSICAgICAweEZFOTQwNDM4CisjZGVmaW5lIE1MRFdCRlIgICAgIDB4RkU5NDA0M0MKKyNkZWZpbmUgTUxEV0JDTlRSICAgMHhGRTk0MDQ0MAorI2RlZmluZSBNTERXQkFSICAgICAweEZFOTQwNDQ0CisjZGVmaW5lIE1MREhDTlIgICAgIDB4RkU5NDA0NDgKKyNkZWZpbmUgTUxESFNZTlIgICAgMHhGRTk0MDQ0QworI2RlZmluZSBNTERWTE5SICAgICAweEZFOTQwNDUwCisjZGVmaW5lIE1MRFZTWU5SICAgIDB4RkU5NDA0NTQKKyNkZWZpbmUgTUxESFBEUiAgICAgMHhGRTk0MDQ1OAorI2RlZmluZSBNTERWUERSICAgICAweEZFOTQwNDVDCisjZGVmaW5lIE1MRFBNUiAgICAgIDB4RkU5NDA0NjAKKyNkZWZpbmUgTERQQUxDUiAgICAgMHhGRTk0MDQ2NAorI2RlZmluZSBMRElOVFIgICAgICAweEZFOTQwNDY4CisjZGVmaW5lIExEU1IgICAgICAgIDB4RkU5NDA0NkMKKyNkZWZpbmUgTERDTlQxUiAgICAgMHhGRTk0MDQ3MAorI2RlZmluZSBMRENOVDJSICAgICAweEZFOTQwNDc0CisjZGVmaW5lIExEUkNOVFIgICAgIDB4RkU5NDA0NzgKKyNkZWZpbmUgTERERFNSICAgICAgMHhGRTk0MDQ3QworI2RlZmluZSBMRFJDUiAgICAgICAweEZFOTQwNDg0CisjZGVmaW5lIExEQ01SS1JHQlIgIDB4RkU5NDA0QzQKKyNkZWZpbmUgTERDTVJLQ01ZUiAgMHhGRTk0MDRDOAorI2RlZmluZSBMRENNUksxUiAgICAweEZFOTQwNENDCisjZGVmaW5lIExEQ01SSzJSICAgIDB4RkU5NDA0RDAKKyNkZWZpbmUgTERDTUdLUkdCUiAgMHhGRTk0MDRENAorI2RlZmluZSBMRENNR0tDTVlSICAweEZFOTQwNEQ4CisjZGVmaW5lIExEQ01HSzFSICAgIDB4RkU5NDA0REMKKyNkZWZpbmUgTERDTUdLMlIgICAgMHhGRTk0MDRFMAorI2RlZmluZSBMRENNQktSR0JSICAweEZFOTQwNEU0CisjZGVmaW5lIExEQ01CS0NNWVIgIDB4RkU5NDA0RTgKKyNkZWZpbmUgTERDTUJLMVIgICAgMHhGRTk0MDRFQworI2RlZmluZSBMRENNQksyUiAgICAweEZFOTQwNEYwCisjZGVmaW5lIExEQ01IS1BSICAgIDB4RkU5NDA0RjQKKyNkZWZpbmUgTERDTUhLUVIgICAgMHhGRTk0MDRGOAorI2RlZmluZSBMRENNU0VMUiAgICAweEZFOTQwNEZDCisjZGVmaW5lIExEQ01UVlIgICAgIDB4RkU5NDA1MDAKKyNkZWZpbmUgTERDTVRWU0VMUiAgMHhGRTk0MDUwNAorI2RlZmluZSBMRENNRFRIUiAgICAweEZFOTQwNTA4CisjZGVmaW5lIExEQ01DTlRSICAgIDB4RkU5NDA1MEMKKyNkZWZpbmUgU0xETVQxUiAgICAgMHhGRTk0MDYwMAorI2RlZmluZSBTTERNVDJSICAgICAweEZFOTQwNjA0CisjZGVmaW5lIFNMRE1UM1IgICAgIDB4RkU5NDA2MDgKKyNkZWZpbmUgU0xEREZSICAgICAgMHhGRTk0MDYwQworI2RlZmluZSBTTERTTTFSICAgICAweEZFOTQwNjEwCisjZGVmaW5lIFNMRFNNMlIgICAgIDB4RkU5NDA2MTQKKyNkZWZpbmUgU0xEU0ExUiAgICAgMHhGRTk0MDYxOAorI2RlZmluZSBTTERTQTJSICAgICAweEZFOTQwNjFDCisjZGVmaW5lIFNMRE1MU1IgICAgIDB4RkU5NDA2MjAKKyNkZWZpbmUgU0xESENOUiAgICAgMHhGRTk0MDYyNAorI2RlZmluZSBTTERIU1lOUiAgICAweEZFOTQwNjI4CisjZGVmaW5lIFNMRFZMTlIgICAgIDB4RkU5NDA2MkMKKyNkZWZpbmUgU0xEVlNZTlIgICAgMHhGRTk0MDYzMAorI2RlZmluZSBTTERIUERSICAgICAweEZFOTQwNjM0CisjZGVmaW5lIFNMRFZQRFIgICAgIDB4RkU5NDA2MzgKKyNkZWZpbmUgU0xEUE1SICAgICAgMHhGRTk0MDYzQworI2RlZmluZSBMRERXRDBSICAgICAweEZFOTQwODAwCisjZGVmaW5lIExERFdEMVIgICAgIDB4RkU5NDA4MDQKKyNkZWZpbmUgTEREV0QyUiAgICAgMHhGRTk0MDgwOAorI2RlZmluZSBMRERXRDNSICAgICAweEZFOTQwODBDCisjZGVmaW5lIExERFdENFIgICAgIDB4RkU5NDA4MTAKKyNkZWZpbmUgTEREV0Q1UiAgICAgMHhGRTk0MDgxNAorI2RlZmluZSBMRERXRDZSICAgICAweEZFOTQwODE4CisjZGVmaW5lIExERFdEN1IgICAgIDB4RkU5NDA4MUMKKyNkZWZpbmUgTEREV0Q4UiAgICAgMHhGRTk0MDgyMAorI2RlZmluZSBMRERXRDlSICAgICAweEZFOTQwODI0CisjZGVmaW5lIExERFdEQVIgICAgIDB4RkU5NDA4MjgKKyNkZWZpbmUgTEREV0RCUiAgICAgMHhGRTk0MDgyQworI2RlZmluZSBMRERXRENSICAgICAweEZFOTQwODMwCisjZGVmaW5lIExERFdERFIgICAgIDB4RkU5NDA4MzQKKyNkZWZpbmUgTEREV0RFUiAgICAgMHhGRTk0MDgzOAorI2RlZmluZSBMRERXREZSICAgICAweEZFOTQwODNDCisjZGVmaW5lIExERFJEUiAgICAgIDB4RkU5NDA4NDAKKyNkZWZpbmUgTEREV0FSICAgICAgMHhGRTk0MDkwMAorI2RlZmluZSBMRERSQVIgICAgICAweEZFOTQwOTA0CisjZGVmaW5lIExEUFIwMCAgICAgIDB4RkU5NDAwMDAKKworLyoJVk9VCSovCisjZGVmaW5lIFZPVUVSICAgICAgIDB4RkU5NjAwMDAKKyNkZWZpbmUgVk9VQ1IgICAgICAgMHhGRTk2MDAwNAorI2RlZmluZSBWT1VTVFIgICAgICAweEZFOTYwMDA4CisjZGVmaW5lIFZPVVZDUiAgICAgIDB4RkU5NjAwMEMKKyNkZWZpbmUgVk9VSVNSICAgICAgMHhGRTk2MDAxMAorI2RlZmluZSBWT1VCQ1IgICAgICAweEZFOTYwMDE0CisjZGVmaW5lIFZPVURQUiAgICAgIDB4RkU5NjAwMTgKKyNkZWZpbmUgVk9VRFNSICAgICAgMHhGRTk2MDAxQworI2RlZmluZSBWT1VWUFIgICAgICAweEZFOTYwMDIwCisjZGVmaW5lIFZPVUlSICAgICAgIDB4RkU5NjAwMjQKKyNkZWZpbmUgVk9VU1JSICAgICAgMHhGRTk2MDAyOAorI2RlZmluZSBWT1VNU1IgICAgICAweEZFOTYwMDJDCisjZGVmaW5lIFZPVUhJUiAgICAgIDB4RkU5NjAwMzAKKyNkZWZpbmUgVk9VREZSICAgICAgMHhGRTk2MDAzNAorI2RlZmluZSBWT1VBRDFSICAgICAweEZFOTYwMDM4CisjZGVmaW5lIFZPVUFEMlIgICAgIDB4RkU5NjAwM0MKKyNkZWZpbmUgVk9VQUlSICAgICAgMHhGRTk2MDA0MAorI2RlZmluZSBWT1VTV1IgICAgICAweEZFOTYwMDQ0CisjZGVmaW5lIFZPVVJDUiAgICAgIDB4RkU5NjAwNDgKKyNkZWZpbmUgVk9VUlBSICAgICAgMHhGRTk2MDA1MAorCisvKglUU0lGCSovCisjZGVmaW5lIFRTQ1RMUiAgICAgIDB4QTRDODAwMDAKKyNkZWZpbmUgVFNQSURSICAgICAgMHhBNEM4MDAwNAorI2RlZmluZSBUU0NNRFIgICAgICAweEE0QzgwMDA4CisjZGVmaW5lIFRTU1RSICAgICAgIDB4QTRDODAwMEMKKyNkZWZpbmUgVFNUU0RSICAgICAgMHhBNEM4MDAxMAorI2RlZmluZSBUU0JVRkNMUlIgICAweEE0QzgwMDE0CisjZGVmaW5lIFRTSU5URVIgICAgIDB4QTRDODAwMTgKKyNkZWZpbmUgVFNQU0NBTEVSICAgMHhBNEM4MDAyMAorI2RlZmluZSBUU1BTQ0FMRVJSICAweEE0QzgwMDI0CisjZGVmaW5lIFRTUENSQURDTURSIDB4QTRDODAwMjgKKyNkZWZpbmUgVFNQQ1JBRENSICAgMHhBNEM4MDAyQworI2RlZmluZSBUU1RSUENSQURDUiAweEE0QzgwMDMwCisjZGVmaW5lIFRTRFBDUkFEQ1IgIDB4QTRDODAwMzQKKworLyoJU0lVCSovCisjZGVmaW5lIElGQ1RMICAgICAgIDB4QTQ1NEMwMDAKKyNkZWZpbmUgU1JDVEwgICAgICAgMHhBNDU0QzAwNAorI2RlZmluZSBTRk9STSAgICAgICAweEE0NTRDMDA4CisjZGVmaW5lIENLQ1RMICAgICAgIDB4QTQ1NEMwMEMKKyNkZWZpbmUgVFJEQVQgICAgICAgMHhBNDU0QzAxMAorI2RlZmluZSBTVEZJRk8gICAgICAweEE0NTRDMDE0CisjZGVmaW5lIERQQUsgICAgICAgIDB4QTQ1NEMwMUMKKyNkZWZpbmUgQ0tSRVYgICAgICAgMHhBNDU0QzAyMAorI2RlZmluZSBFVk5UQyAgICAgICAweEE0NTRDMDI4CisjZGVmaW5lIFNCQ1RMICAgICAgIDB4QTQ1NEMwNDAKKyNkZWZpbmUgU0JQU0VUICAgICAgMHhBNDU0QzA0NAorI2RlZmluZSBTQkJVUyAgICAgICAweEE0NTRDMDQ4CisjZGVmaW5lIFNCV0ZMRyAgICAgIDB4QTQ1NEMwNTgKKyNkZWZpbmUgU0JSRkxHICAgICAgMHhBNDU0QzA1QworI2RlZmluZSBTQldEQVQgICAgICAweEE0NTRDMDYwCisjZGVmaW5lIFNCUkRBVCAgICAgIDB4QTQ1NEMwNjQKKyNkZWZpbmUgU0JGU1RTICAgICAgMHhBNDU0QzA2OAorI2RlZmluZSBTQkRWQ0EgICAgICAweEE0NTRDMDZDCisjZGVmaW5lIFNCRFZDQiAgICAgIDB4QTQ1NEMwNzAKKyNkZWZpbmUgU0JBQ1RJViAgICAgMHhBNDU0QzA3NAorI2RlZmluZSBETUFJQSAgICAgICAweEE0NTRDMDkwCisjZGVmaW5lIERNQUlCICAgICAgIDB4QTQ1NEMwOTQKKyNkZWZpbmUgRE1BT0EgICAgICAgMHhBNDU0QzA5OAorI2RlZmluZSBETUFPQiAgICAgICAweEE0NTRDMDlDCisjZGVmaW5lIFNQTFJJICAgICAgIDB4QTQ1NEMwQjgKKyNkZWZpbmUgU1BSUkkgICAgICAgMHhBNDU0QzBCQworI2RlZmluZSBTUFVSSSAgICAgICAweEE0NTRDMEM0CisjZGVmaW5lIFNQVElTICAgICAgIDB4QTQ1NEMwQzgKKyNkZWZpbmUgU1BTVFMgICAgICAgMHhBNDU0QzBDQworI2RlZmluZSBTUENUTCAgICAgICAweEE0NTRDMEQwCisjZGVmaW5lIFNQSVJJICAgICAgIDB4QTQ1NEMwRDQKKyNkZWZpbmUgU1BRQ0YgICAgICAgMHhBNDU0QzBEOAorI2RlZmluZSBTUFFDUyAgICAgICAweEE0NTRDMERDCisjZGVmaW5lIFNQUUNUICAgICAgIDB4QTQ1NEMwRTAKKyNkZWZpbmUgRFBFQUsgICAgICAgMHhBNDU0QzBGMAorI2RlZmluZSBEU0xQRCAgICAgICAweEE0NTRDMEY0CisjZGVmaW5lIERTTExWICAgICAgIDB4QTQ1NEMwRjgKKyNkZWZpbmUgQlJHQVNFTCAgICAgMHhBNDU0QzEwMAorI2RlZmluZSBCUlJBICAgICAgICAweEE0NTRDMTA0CisjZGVmaW5lIEJSR0JTRUwgICAgIDB4QTQ1NEMxMDgKKyNkZWZpbmUgQlJSQiAgICAgICAgMHhBNDU0QzEwQworCisvKglVU0IJKi8KKyNkZWZpbmUgSUZSMCAgICAgICAgMHhBNDQ4MDAwMAorI2RlZmluZSBJU1IwICAgICAgICAweEE0NDgwMDEwCisjZGVmaW5lIElFUjAgICAgICAgIDB4QTQ0ODAwMjAKKyNkZWZpbmUgRVBEUjBJICAgICAgMHhBNDQ4MDAzMAorI2RlZmluZSBFUERSME8gICAgICAweEE0NDgwMDM0CisjZGVmaW5lIEVQRFIwUyAgICAgIDB4QTQ0ODAwMzgKKyNkZWZpbmUgRVBEUjEgICAgICAgMHhBNDQ4MDAzQworI2RlZmluZSBFUERSMiAgICAgICAweEE0NDgwMDQwCisjZGVmaW5lIEVQRFIzICAgICAgIDB4QTQ0ODAwNDQKKyNkZWZpbmUgRVBEUjQgICAgICAgMHhBNDQ4MDA0OAorI2RlZmluZSBFUERSNSAgICAgICAweEE0NDgwMDRDCisjZGVmaW5lIEVQRFI2ICAgICAgIDB4QTQ0ODAwNTAKKyNkZWZpbmUgRVBEUjcgICAgICAgMHhBNDQ4MDA1NAorI2RlZmluZSBFUERSOCAgICAgICAweEE0NDgwMDU4CisjZGVmaW5lIEVQRFI5ICAgICAgIDB4QTQ0ODAwNUMKKyNkZWZpbmUgRVBTWjBPICAgICAgMHhBNDQ4MDA4MAorI2RlZmluZSBFUFNaMyAgICAgICAweEE0NDgwMDg0CisjZGVmaW5lIEVQU1o2ICAgICAgIDB4QTQ0ODAwODgKKyNkZWZpbmUgRVBTWjkgICAgICAgMHhBNDQ4MDA4QworI2RlZmluZSBUUkcgICAgICAgICAweEE0NDgwMEEwCisjZGVmaW5lIERBU1RTICAgICAgIDB4QTQ0ODAwQTQKKyNkZWZpbmUgRkNMUiAgICAgICAgMHhBNDQ4MDBBQQorI2RlZmluZSBETUEgICAgICAgICAweEE0NDgwMEFDCisjZGVmaW5lIEVQU1RMICAgICAgIDB4QTQ0ODAwQjIKKyNkZWZpbmUgQ1ZSICAgICAgICAgMHhBNDQ4MDBCNAorI2RlZmluZSBUU1IgICAgICAgICAweEE0NDgwMEI4CisjZGVmaW5lIENUTFIgICAgICAgIDB4QTQ0ODAwQkMKKyNkZWZpbmUgRVBJUiAgICAgICAgMHhBNDQ4MDBDMAorI2RlZmluZSBYVkVSQ1IgICAgICAweEE0NDgwMEQwCisjZGVmaW5lIFNUTE1SICAgICAgIDB4QTQ0ODAwRDQKKworLyoJS0VZU0MJKi8KKyNkZWZpbmUgS1lDUjEgICAgICAgMHhBNDRCMDAwMAorI2RlZmluZSBLWUNSMiAgICAgICAweEE0NEIwMDA0CisjZGVmaW5lIEtZSU5EUiAgICAgIDB4QTQ0QjAwMDgKKyNkZWZpbmUgS1lPVVREUiAgICAgMHhBNDRCMDAwQworCisvKglNTUNJRgkqLworI2RlZmluZSBDTURSMCAgICAgICAweEE0NDQ4MDAwCisjZGVmaW5lIENNRFIxICAgICAgIDB4QTQ0NDgwMDEKKyNkZWZpbmUgQ01EUjIgICAgICAgMHhBNDQ0ODAwMgorI2RlZmluZSBDTURSMyAgICAgICAweEE0NDQ4MDAzCisjZGVmaW5lIENNRFI0ICAgICAgIDB4QTQ0NDgwMDQKKyNkZWZpbmUgQ01EUjUgICAgICAgMHhBNDQ0ODAwNQorI2RlZmluZSBDTURTVFJUICAgICAweEE0NDQ4MDA2CisjZGVmaW5lIE9QQ1IgICAgICAgIDB4QTQ0NDgwMEEKKyNkZWZpbmUgQ1NUUiAgICAgICAgMHhBNDQ0ODAwQgorI2RlZmluZSBJTlRDUjAgICAgICAweEE0NDQ4MDBDCisjZGVmaW5lIElOVENSMSAgICAgIDB4QTQ0NDgwMEQKKyNkZWZpbmUgSU5UU1RSMCAgICAgMHhBNDQ0ODAwRQorI2RlZmluZSBJTlRTVFIxICAgICAweEE0NDQ4MDBGCisjZGVmaW5lIENMS09OICAgICAgIDB4QTQ0NDgwMTAKKyNkZWZpbmUgQ1RPQ1IgICAgICAgMHhBNDQ0ODAxMQorI2RlZmluZSBWRENOVCAgICAgICAweEE0NDQ4MDEyCisjZGVmaW5lIFRCQ1IgICAgICAgIDB4QTQ0NDgwMTQKKyNkZWZpbmUgTU9ERVIgICAgICAgMHhBNDQ0ODAxNgorI2RlZmluZSBDTURUWVIgICAgICAweEE0NDQ4MDE4CisjZGVmaW5lIFJTUFRZUiAgICAgIDB4QTQ0NDgwMTkKKyNkZWZpbmUgVEJOQ1IgICAgICAgMHhBNDQ0ODAxQQorI2RlZmluZSBSU1BSMCAgICAgICAweEE0NDQ4MDIwCisjZGVmaW5lIFJTUFIxICAgICAgIDB4QTQ0NDgwMjEKKyNkZWZpbmUgUlNQUjIgICAgICAgMHhBNDQ0ODAyMgorI2RlZmluZSBSU1BSMyAgICAgICAweEE0NDQ4MDIzCisjZGVmaW5lIFJTUFI0ICAgICAgIDB4QTQ0NDgwMjQKKyNkZWZpbmUgUlNQUjUgICAgICAgMHhBNDQ0ODAyNQorI2RlZmluZSBSU1BSNiAgICAgICAweEE0NDQ4MDI2CisjZGVmaW5lIFJTUFI3ICAgICAgIDB4QTQ0NDgwMjcKKyNkZWZpbmUgUlNQUjggICAgICAgMHhBNDQ0ODAyOAorI2RlZmluZSBSU1BSOSAgICAgICAweEE0NDQ4MDI5CisjZGVmaW5lIFJTUFIxMCAgICAgIDB4QTQ0NDgwMkEKKyNkZWZpbmUgUlNQUjExICAgICAgMHhBNDQ0ODAyQgorI2RlZmluZSBSU1BSMTIgICAgICAweEE0NDQ4MDJDCisjZGVmaW5lIFJTUFIxMyAgICAgIDB4QTQ0NDgwMkQKKyNkZWZpbmUgUlNQUjE0ICAgICAgMHhBNDQ0ODAyRQorI2RlZmluZSBSU1BSMTUgICAgICAweEE0NDQ4MDJGCisjZGVmaW5lIFJTUFIxNiAgICAgIDB4QTQ0NDgwMzAKKyNkZWZpbmUgUlNQUkQgICAgICAgMHhBNDQ0ODAzMQorI2RlZmluZSBEVE9VVFIgICAgICAweEE0NDQ4MDMyCisjZGVmaW5lIERSICAgICAgICAgIDB4QTQ0NDgwNDAKKyNkZWZpbmUgRklGT0NMUiAgICAgMHhBNDQ0ODA0MgorI2RlZmluZSBETUFDUiAgICAgICAweEE0NDQ4MDQ0CisjZGVmaW5lIElOVENSMiAgICAgIDB4QTQ0NDgwNDYKKyNkZWZpbmUgSU5UU1RSMiAgICAgMHhBNDQ0ODA0OAorCisvKglaM0QzCSovCisjZGVmaW5lIERMQkkgICAgICAgIDB4RkQ5ODAwMDAKKyNkZWZpbmUgRExCRDAgICAgICAgMHhGRDk4MDA4MAorI2RlZmluZSBETEJEMSAgICAgICAweEZEOTgwMTAwCisjZGVmaW5lIEdFV00gICAgICAgIDB4RkQ5ODQwMDAKKyNkZWZpbmUgSUNEMCAgICAgICAgMHhGRDk4ODAwMAorI2RlZmluZSBJQ0QxICAgICAgICAweEZEOTg5MDAwCisjZGVmaW5lIElDVCAgICAgICAgIDB4RkQ5OEEwMDAKKyNkZWZpbmUgSUxNICAgICAgICAgMHhGRDk4QzAwMAorI2RlZmluZSBGTE0wICAgICAgICAweEZEOThDODAwCisjZGVmaW5lIEZMTTEgICAgICAgIDB4RkQ5OEQwMDAKKyNkZWZpbmUgRkxVVCAgICAgICAgMHhGRDk4RDgwMAorI2RlZmluZSBaM0RfUEMgICAgICAweEZEOThFNDAwCisjZGVmaW5lIFozRF9QQ1NQICAgIDB4RkQ5OEU0MDQKKyNkZWZpbmUgWjNEX1BBUiAgICAgMHhGRDk4RTQwOAorI2RlZmluZSBaM0RfSU1BRFIgICAweEZEOThFNDBDCisjZGVmaW5lIFozRF9CVFIwICAgIDB4RkQ5OEU0MTAKKyNkZWZpbmUgWjNEX0JUUjEgICAgMHhGRDk4RTQxNAorI2RlZmluZSBaM0RfQlRSMiAgICAweEZEOThFNDE4CisjZGVmaW5lIFozRF9CVFIzICAgIDB4RkQ5OEU0MUMKKyNkZWZpbmUgWjNEX0xDMCAgICAgMHhGRDk4RTQyMAorI2RlZmluZSBaM0RfTEMxICAgICAweEZEOThFNDI0CisjZGVmaW5lIFozRF9MQzIgICAgIDB4RkQ5OEU0MjgKKyNkZWZpbmUgWjNEX0xDMyAgICAgMHhGRDk4RTQyQworI2RlZmluZSBaM0RfRlIwICAgICAweEZEOThFNDMwCisjZGVmaW5lIFozRF9GUjEgICAgIDB4RkQ5OEU0MzQKKyNkZWZpbmUgWjNEX0ZSMiAgICAgMHhGRDk4RTQzOAorI2RlZmluZSBaM0RfU1IgICAgICAweEZEOThFNDQwCisjZGVmaW5lIFozRF9TTURSICAgIDB4RkQ5OEU0NDQKKyNkZWZpbmUgWjNEX1BCSVIgICAgMHhGRDk4RTQ0OAorI2RlZmluZSBaM0RfRE1EUiAgICAweEZEOThFNDRDCisjZGVmaW5lIFozRF9JUkVHICAgIDB4RkQ5OEU0NjAKKyNkZWZpbmUgWjNEX0FSMDAgICAgMHhGRDk4RTQ4MAorI2RlZmluZSBaM0RfQVIwMSAgICAweEZEOThFNDg0CisjZGVmaW5lIFozRF9BUjAyICAgIDB4RkQ5OEU0ODgKKyNkZWZpbmUgWjNEX0FSMDMgICAgMHhGRDk4RTQ4QworI2RlZmluZSBaM0RfQlIwMCAgICAweEZEOThFNDkwCisjZGVmaW5lIFozRF9CUjAxICAgIDB4RkQ5OEU0OTQKKyNkZWZpbmUgWjNEX0lYUjAwICAgMHhGRDk4RTRBMAorI2RlZmluZSBaM0RfSVhSMDEgICAweEZEOThFNEE0CisjZGVmaW5lIFozRF9JWFIwMiAgIDB4RkQ5OEU0QTgKKyNkZWZpbmUgWjNEX0lYUjAzICAgMHhGRDk4RTRBQworI2RlZmluZSBaM0RfQVIxMCAgICAweEZEOThFNEMwCisjZGVmaW5lIFozRF9BUjExICAgIDB4RkQ5OEU0QzQKKyNkZWZpbmUgWjNEX0FSMTIgICAgMHhGRDk4RTRDOAorI2RlZmluZSBaM0RfQVIxMyAgICAweEZEOThFNENDCisjZGVmaW5lIFozRF9CUjEwICAgIDB4RkQ5OEU0RDAKKyNkZWZpbmUgWjNEX0JSMTEgICAgMHhGRDk4RTRENAorI2RlZmluZSBaM0RfSVhSMTAgICAweEZEOThFNEUwCisjZGVmaW5lIFozRF9JWFIxMSAgIDB4RkQ5OEU0RTQKKyNkZWZpbmUgWjNEX0lYUjEyICAgMHhGRDk4RTRFOAorI2RlZmluZSBaM0RfSVhSMTMgICAweEZEOThFNEVDCisjZGVmaW5lIFozRF9BUjIwICAgIDB4RkQ5OEU1MDAKKyNkZWZpbmUgWjNEX0FSMjEgICAgMHhGRDk4RTUwNAorI2RlZmluZSBaM0RfQVIyMiAgICAweEZEOThFNTA4CisjZGVmaW5lIFozRF9BUjIzICAgIDB4RkQ5OEU1MEMKKyNkZWZpbmUgWjNEX0JSMjAgICAgMHhGRDk4RTUxMAorI2RlZmluZSBaM0RfQlIyMSAgICAweEZEOThFNTE0CisjZGVmaW5lIFozRF9JWFIyMCAgIDB4RkQ5OEU1MjAKKyNkZWZpbmUgWjNEX0lYUjIxICAgMHhGRDk4RTUyNAorI2RlZmluZSBaM0RfSVhSMjIgICAweEZEOThFNTI4CisjZGVmaW5lIFozRF9JWFIyMyAgIDB4RkQ5OEU1MkMKKyNkZWZpbmUgWjNEX01SMCAgICAgMHhGRDk4RTU0MAorI2RlZmluZSBaM0RfTVIxICAgICAweEZEOThFNTQ0CisjZGVmaW5lIFozRF9NUjIgICAgIDB4RkQ5OEU1NDgKKyNkZWZpbmUgWjNEX01SMyAgICAgMHhGRDk4RTU0QworI2RlZmluZSBaM0RfV09SS1JTVCAweEZEOThFNTU4CisjZGVmaW5lIFozRF9XT1JLV1NUIDB4RkQ5OEU1NUMKKyNkZWZpbmUgWjNEX0RCQURSICAgMHhGRDk4RTU2MAorI2RlZmluZSBaM0RfRExCUFJTVCAweEZEOThFNTY0CisjZGVmaW5lIFozRF9ETEJSU1QgIDB4RkQ5OEU1NjgKKyNkZWZpbmUgWjNEX0RMQldTVCAgMHhGRDk4RTU2QworI2RlZmluZSBaM0RfVURSMCAgICAweEZEOThFNTcwCisjZGVmaW5lIFozRF9VRFIxICAgIDB4RkQ5OEU1NzQKKyNkZWZpbmUgWjNEX1VEUjIgICAgMHhGRDk4RTU3OAorI2RlZmluZSBaM0RfVURSMyAgICAweEZEOThFNTdDCisjZGVmaW5lIFozRF9DQ1IwICAgIDB4RkQ5OEU1ODAKKyNkZWZpbmUgWjNEX0NDUjEgICAgMHhGRDk4RTU4NAorI2RlZmluZSBaM0RfRVhQUiAgICAweEZEOThFNTg4CisjZGVmaW5lIFozRF9WMF9YICAgIDB4RkQ5QTAwMDAKKyNkZWZpbmUgWjNEX1YwX1kgICAgMHhGRDlBMDAwNAorI2RlZmluZSBaM0RfVjBfWiAgICAweEZEOUEwMDA4CisjZGVmaW5lIFozRF9WMF9XICAgIDB4RkQ5QTAwMEMKKyNkZWZpbmUgWjNEX1YwX0EgICAgMHhGRDlBMDAxMAorI2RlZmluZSBaM0RfVjBfUiAgICAweEZEOUEwMDE0CisjZGVmaW5lIFozRF9WMF9HICAgIDB4RkQ5QTAwMTgKKyNkZWZpbmUgWjNEX1YwX0IgICAgMHhGRDlBMDAxQworI2RlZmluZSBaM0RfVjBfRiAgICAweEZEOUEwMDIwCisjZGVmaW5lIFozRF9WMF9TUiAgIDB4RkQ5QTAwMjQKKyNkZWZpbmUgWjNEX1YwX1NHICAgMHhGRDlBMDAyOAorI2RlZmluZSBaM0RfVjBfU0IgICAweEZEOUEwMDJDCisjZGVmaW5lIFozRF9WMF9VMCAgIDB4RkQ5QTAwMzAKKyNkZWZpbmUgWjNEX1YwX1YwICAgMHhGRDlBMDAzNAorI2RlZmluZSBaM0RfVjBfVTEgICAweEZEOUEwMDM4CisjZGVmaW5lIFozRF9WMF9WMSAgIDB4RkQ5QTAwM0MKKyNkZWZpbmUgWjNEX1YxX1ggICAgMHhGRDlBMDA4MAorI2RlZmluZSBaM0RfVjFfWSAgICAweEZEOUEwMDg0CisjZGVmaW5lIFozRF9WMV9aICAgIDB4RkQ5QTAwODgKKyNkZWZpbmUgWjNEX1YxX1cgICAgMHhGRDlBMDA4QworI2RlZmluZSBaM0RfVjFfQSAgICAweEZEOUEwMDkwCisjZGVmaW5lIFozRF9WMV9SICAgIDB4RkQ5QTAwOTQKKyNkZWZpbmUgWjNEX1YxX0cgICAgMHhGRDlBMDA5OAorI2RlZmluZSBaM0RfVjFfQiAgICAweEZEOUEwMDlDCisjZGVmaW5lIFozRF9WMV9GICAgIDB4RkQ5QTAwQTAKKyNkZWZpbmUgWjNEX1YxX1NSICAgMHhGRDlBMDBBNAorI2RlZmluZSBaM0RfVjFfU0cgICAweEZEOUEwMEE4CisjZGVmaW5lIFozRF9WMV9TQiAgIDB4RkQ5QTAwQUMKKyNkZWZpbmUgWjNEX1YxX1UwICAgMHhGRDlBMDBCMAorI2RlZmluZSBaM0RfVjFfVjAgICAweEZEOUEwMEI0CisjZGVmaW5lIFozRF9WMV9VMSAgIDB4RkQ5QTAwQjgKKyNkZWZpbmUgWjNEX1YxX1YxICAgMHhGRDlBMDBCQworI2RlZmluZSBaM0RfVjJfWCAgICAweEZEOUEwMTAwCisjZGVmaW5lIFozRF9WMl9ZICAgIDB4RkQ5QTAxMDQKKyNkZWZpbmUgWjNEX1YyX1ogICAgMHhGRDlBMDEwOAorI2RlZmluZSBaM0RfVjJfVyAgICAweEZEOUEwMTBDCisjZGVmaW5lIFozRF9WMl9BICAgIDB4RkQ5QTAxMTAKKyNkZWZpbmUgWjNEX1YyX1IgICAgMHhGRDlBMDExNAorI2RlZmluZSBaM0RfVjJfRyAgICAweEZEOUEwMTE4CisjZGVmaW5lIFozRF9WMl9CICAgIDB4RkQ5QTAxMUMKKyNkZWZpbmUgWjNEX1YyX0YgICAgMHhGRDlBMDEyMAorI2RlZmluZSBaM0RfVjJfU1IgICAweEZEOUEwMTI0CisjZGVmaW5lIFozRF9WMl9TRyAgIDB4RkQ5QTAxMjgKKyNkZWZpbmUgWjNEX1YyX1NCICAgMHhGRDlBMDEyQworI2RlZmluZSBaM0RfVjJfVTAgICAweEZEOUEwMTMwCisjZGVmaW5lIFozRF9WMl9WMCAgIDB4RkQ5QTAxMzQKKyNkZWZpbmUgWjNEX1YyX1UxICAgMHhGRDlBMDEzOAorI2RlZmluZSBaM0RfVjJfVjEgICAweEZEOUEwMTNDCisjZGVmaW5lIFozRF9SRU5ERVIgICAgICAgICAgICAgIDB4RkQ5QTAxODAKKyNkZWZpbmUgWjNEX1BPTFlHT05fT0ZGU0VUICAgICAgMHhGRDlBMDE4NAorI2RlZmluZSBaM0RfVkVSVEVYX0NPTlRST0wgICAgICAweEZEOUEwMjAwCisjZGVmaW5lIFozRF9TVEFURV9NT0RFICAgICAgICAgIDB4RkQ5QTAyMDQKKyNkZWZpbmUgWjNEX0ZQVV9NT0RFICAgICAgICAgICAgMHhGRDlBMDMxOAorI2RlZmluZSBaM0RfU0NJU1NPUl9NSU4gICAgICAgICAweEZEOUEwNDAwCisjZGVmaW5lIFozRF9TQ0lTU09SX01BWCAgICAgICAgIDB4RkQ5QTA0MDQKKyNkZWZpbmUgWjNEX1RFWFRVUkVfTU9ERV9BICAgICAgMHhGRDlBMDQwOAorI2RlZmluZSBaM0RfVEVYVFVSRV9NT0RFX0IgICAgICAweEZEOUEwNDBDCisjZGVmaW5lIFozRF9URVhUVVJFX0JBU0VfSElfQSAgIDB4RkQ5QTA0MTgKKyNkZWZpbmUgWjNEX1RFWFRVUkVfQkFTRV9MT19BICAgMHhGRDlBMDQxQworI2RlZmluZSBaM0RfVEVYVFVSRV9CQVNFX0hJX0IgICAweEZEOUEwNDIwCisjZGVmaW5lIFozRF9URVhUVVJFX0JBU0VfTE9fQiAgIDB4RkQ5QTA0MjQKKyNkZWZpbmUgWjNEX1RFWFRVUkVfQUxQSEFfQTAgICAgMHhGRDlBMDQzOAorI2RlZmluZSBaM0RfVEVYVFVSRV9BTFBIQV9BMSAgICAweEZEOUEwNDNDCisjZGVmaW5lIFozRF9URVhUVVJFX0FMUEhBX0EyICAgIDB4RkQ5QTA0NDAKKyNkZWZpbmUgWjNEX1RFWFRVUkVfQUxQSEFfQTMgICAgMHhGRDlBMDQ0NAorI2RlZmluZSBaM0RfVEVYVFVSRV9BTFBIQV9BNCAgICAweEZEOUEwNDQ4CisjZGVmaW5lIFozRF9URVhUVVJFX0FMUEhBX0E1ICAgIDB4RkQ5QTA0NEMKKyNkZWZpbmUgWjNEX1RFWFRVUkVfQUxQSEFfQjAgICAgMHhGRDlBMDQ1MAorI2RlZmluZSBaM0RfVEVYVFVSRV9BTFBIQV9CMSAgICAweEZEOUEwNDU0CisjZGVmaW5lIFozRF9URVhUVVJFX0FMUEhBX0IyICAgIDB4RkQ5QTA0NTgKKyNkZWZpbmUgWjNEX1RFWFRVUkVfQUxQSEFfQjMgICAgMHhGRDlBMDQ1QworI2RlZmluZSBaM0RfVEVYVFVSRV9BTFBIQV9CNCAgICAweEZEOUEwNDYwCisjZGVmaW5lIFozRF9URVhUVVJFX0FMUEhBX0I1ICAgIDB4RkQ5QTA0NjQKKyNkZWZpbmUgWjNEX1RFWFRVUkVfRkxVU0ggICAgICAgMHhGRDlBMDQ5OAorI2RlZmluZSBaM0RfR0FNTUFfVEFCTEUwICAgICAgICAweEZEOUEwNDlDCisjZGVmaW5lIFozRF9HQU1NQV9UQUJMRTEgICAgICAgIDB4RkQ5QTA0QTAKKyNkZWZpbmUgWjNEX0dBTU1BX1RBQkxFMiAgICAgICAgMHhGRDlBMDRBNAorI2RlZmluZSBaM0RfQUxQSEFfVEVTVCAgICAgICAgICAgICAgMHhGRDlBMDgwMAorI2RlZmluZSBaM0RfU1RFTkNJTF9URVNUICAgICAgICAgICAgMHhGRDlBMDgwNAorI2RlZmluZSBaM0RfREVQVEhfUk9QX0JMRU5EX0RJVEhFUiAgMHhGRDlBMDgwOAorI2RlZmluZSBaM0RfTUFTSyAgICAgICAgICAgICAgICAgICAgMHhGRDlBMDgwQworI2RlZmluZSBaM0RfRkJVU19NT0RFICAgICAgICAgICAgICAgMHhGRDlBMDgxMAorI2RlZmluZSBaM0RfR05UX1NFVCAgICAgICAgICAgICAgICAgMHhGRDlBMDgxNAorI2RlZmluZSBaM0RfQkVUV0VFTl9URVNUICAgICAgICAgICAgMHhGRDlBMDgxOAorI2RlZmluZSBaM0RfRkJfQkFTRSAgICAgICAgICAgICAgICAgMHhGRDlBMDgxQworI2RlZmluZSBaM0RfTENEX1NJWkUgICAgICAgICAgICAgICAgMHhGRDlBMDgyMAorI2RlZmluZSBaM0RfRkJfRkxVU0ggICAgICAgICAgICAgICAgMHhGRDlBMDgyNAorI2RlZmluZSBaM0RfQ0FDSEVfSU5WQUxJRCAgICAgICAgICAgMHhGRDlBMDgyOAorI2RlZmluZSBaM0RfU0NfTU9ERSAgICAgICAgIDB4RkQ5QTA4MzAKKyNkZWZpbmUgWjNEX1NDMF9NSU4gICAgICAgICAweEZEOUEwODM0CisjZGVmaW5lIFozRF9TQzBfTUFYICAgICAgICAgMHhGRDlBMDgzOAorI2RlZmluZSBaM0RfU0MxX01JTiAgICAgICAgIDB4RkQ5QTA4M0MKKyNkZWZpbmUgWjNEX1NDMV9NQVggICAgICAgICAweEZEOUEwODQwCisjZGVmaW5lIFozRF9TQzJfTUlOICAgICAgICAgMHhGRDlBMDg0NAorI2RlZmluZSBaM0RfU0MyX01BWCAgICAgICAgIDB4RkQ5QTA4NDgKKyNkZWZpbmUgWjNEX1NDM19NSU4gICAgICAgICAweEZEOUEwODRDCisjZGVmaW5lIFozRF9TQzNfTUFYICAgICAgICAgMHhGRDlBMDg1MAorI2RlZmluZSBaM0RfUkVBRFJFU0VUICAgICAgIDB4RkQ5QTA4NTQKKyNkZWZpbmUgWjNEX0RFVF9NSU4gICAgICAgICAweEZEOUEwODU4CisjZGVmaW5lIFozRF9ERVRfTUFYICAgICAgICAgMHhGRDlBMDg1QworI2RlZmluZSBaM0RfRkJfQkFTRV9TUiAgICAgIDB4RkQ5QTA4NjAKKyNkZWZpbmUgWjNEX0xDRF9TSVpFX1NSICAgICAweEZEOUEwODY0CisjZGVmaW5lIFozRF8yRF9DVFJMX1NUQVRVUyAgICAgICAgICAweEZEOUEwQzAwCisjZGVmaW5lIFozRF8yRF9TSVpFICAgICAgICAgICAgICAgICAweEZEOUEwQzA0CisjZGVmaW5lIFozRF8yRF9TUkNMT0MgICAgICAgICAgICAgICAweEZEOUEwQzA4CisjZGVmaW5lIFozRF8yRF9EU1RMT0MgICAgICAgICAgICAgICAweEZEOUEwQzBDCisjZGVmaW5lIFozRF8yRF9ETUFQT1JUICAgICAgICAgICAgICAweEZEOUEwQzEwCisjZGVmaW5lIFozRF8yRF9DT05TVEFOVF9TT1VSQ0UwICAgICAweEZEOUEwQzE0CisjZGVmaW5lIFozRF8yRF9DT05TVEFOVF9TT1VSQ0UxICAgICAweEZEOUEwQzE4CisjZGVmaW5lIFozRF8yRF9TVFBDT0xPUjAgICAgICAgICAgICAweEZEOUEwQzFDCisjZGVmaW5lIFozRF8yRF9TVFBDT0xPUjEgICAgICAgICAgICAweEZEOUEwQzIwCisjZGVmaW5lIFozRF8yRF9TVFBQQVJBTUVURVJfU0VUMCAgICAweEZEOUEwQzI0CisjZGVmaW5lIFozRF8yRF9TVFBQQVJBTUVURVJfU0VUMSAgICAweEZEOUEwQzI4CisjZGVmaW5lIFozRF8yRF9TVFBQQVRfMCAgICAgMHhGRDlBMEM0MAorI2RlZmluZSBaM0RfMkRfU1RQUEFUXzEgICAgIDB4RkQ5QTBDNDQKKyNkZWZpbmUgWjNEXzJEX1NUUFBBVF8yICAgICAweEZEOUEwQzQ4CisjZGVmaW5lIFozRF8yRF9TVFBQQVRfMyAgICAgMHhGRDlBMEM0QworI2RlZmluZSBaM0RfMkRfU1RQUEFUXzQgICAgIDB4RkQ5QTBDNTAKKyNkZWZpbmUgWjNEXzJEX1NUUFBBVF81ICAgICAweEZEOUEwQzU0CisjZGVmaW5lIFozRF8yRF9TVFBQQVRfNiAgICAgMHhGRDlBMEM1OAorI2RlZmluZSBaM0RfMkRfU1RQUEFUXzcgICAgIDB4RkQ5QTBDNUMKKyNkZWZpbmUgWjNEXzJEX1NUUFBBVF84ICAgICAweEZEOUEwQzYwCisjZGVmaW5lIFozRF8yRF9TVFBQQVRfOSAgICAgMHhGRDlBMEM2NAorI2RlZmluZSBaM0RfMkRfU1RQUEFUXzEwICAgIDB4RkQ5QTBDNjgKKyNkZWZpbmUgWjNEXzJEX1NUUFBBVF8xMSAgICAweEZEOUEwQzZDCisjZGVmaW5lIFozRF8yRF9TVFBQQVRfMTIgICAgMHhGRDlBMEM3MAorI2RlZmluZSBaM0RfMkRfU1RQUEFUXzEzICAgIDB4RkQ5QTBDNzQKKyNkZWZpbmUgWjNEXzJEX1NUUFBBVF8xNCAgICAweEZEOUEwQzc4CisjZGVmaW5lIFozRF8yRF9TVFBQQVRfMTUgICAgMHhGRDlBMEM3QworI2RlZmluZSBaM0RfMkRfU1RQUEFUXzE2ICAgIDB4RkQ5QTBDODAKKyNkZWZpbmUgWjNEXzJEX1NUUFBBVF8xNyAgICAweEZEOUEwQzg0CisjZGVmaW5lIFozRF8yRF9TVFBQQVRfMTggICAgMHhGRDlBMEM4OAorI2RlZmluZSBaM0RfMkRfU1RQUEFUXzE5ICAgIDB4RkQ5QTBDOEMKKyNkZWZpbmUgWjNEXzJEX1NUUFBBVF8yMCAgICAweEZEOUEwQzkwCisjZGVmaW5lIFozRF8yRF9TVFBQQVRfMjEgICAgMHhGRDlBMEM5NAorI2RlZmluZSBaM0RfMkRfU1RQUEFUXzIyICAgIDB4RkQ5QTBDOTgKKyNkZWZpbmUgWjNEXzJEX1NUUFBBVF8yMyAgICAweEZEOUEwQzlDCisjZGVmaW5lIFozRF8yRF9TVFBQQVRfMjQgICAgMHhGRDlBMENBMAorI2RlZmluZSBaM0RfMkRfU1RQUEFUXzI1ICAgIDB4RkQ5QTBDQTQKKyNkZWZpbmUgWjNEXzJEX1NUUFBBVF8yNiAgICAweEZEOUEwQ0E4CisjZGVmaW5lIFozRF8yRF9TVFBQQVRfMjcgICAgMHhGRDlBMENBQworI2RlZmluZSBaM0RfMkRfU1RQUEFUXzI4ICAgIDB4RkQ5QTBDQjAKKyNkZWZpbmUgWjNEXzJEX1NUUFBBVF8yOSAgICAweEZEOUEwQ0I0CisjZGVmaW5lIFozRF8yRF9TVFBQQVRfMzAgICAgMHhGRDlBMENCOAorI2RlZmluZSBaM0RfMkRfU1RQUEFUXzMxICAgIDB4RkQ5QTBDQkMKKyNkZWZpbmUgWjNEX1dSX0NUUkwgICAgICAgICAweEZEOUExMDAwCisjZGVmaW5lIFozRF9XUl9QMCAgICAgICAgICAgMHhGRDlBMTAwNAorI2RlZmluZSBaM0RfV1JfUDEgICAgICAgICAgIDB4RkQ5QTEwMDgKKyNkZWZpbmUgWjNEX1dSX1AyICAgICAgICAgICAweEZEOUExMDBDCisjZGVmaW5lIFozRF9XUl9GR0MgICAgICAgICAgMHhGRDlBMTAxMAorI2RlZmluZSBaM0RfV1JfQkdDICAgICAgICAgIDB4RkQ5QTEwMTQKKyNkZWZpbmUgWjNEX1dSX1NaICAgICAgICAgICAweEZEOUExMDE4CisjZGVmaW5lIFozRF9XUl9QQVRQQVJBTSAgICAgMHhGRDlBMTAxQworI2RlZmluZSBaM0RfV1JfUEFUICAgICAgICAgIDB4RkQ5QTEwMjAKKyNkZWZpbmUgWjNEX1NZU19TVEFUVVMgICAgICAweEZEOUExNDAwCisjZGVmaW5lIFozRF9TWVNfUkVTRVQgICAgICAgMHhGRDlBMTQwNAorI2RlZmluZSBaM0RfU1lTX0NMSyAgICAgICAgIDB4RkQ5QTE0MDgKKyNkZWZpbmUgWjNEX1NZU19DT05GICAgICAgICAweEZEOUExNDBDCisjZGVmaW5lIFozRF9TWVNfVkVSU0lPTiAgICAgMHhGRDlBMTQxMAorI2RlZmluZSBaM0RfU1lTX0RCSU5WICAgICAgIDB4RkQ5QTE0MTgKKyNkZWZpbmUgWjNEX1NZU19JMkZfRk1UICAgICAweEZEOUExNDIwCisjZGVmaW5lIFozRF9TWVNfSTJGX1NSQyAgICAgMHhGRDlBMTQyNAorI2RlZmluZSBaM0RfU1lTX0kyRl9EU1QgICAgIDB4RkQ5QTE0MjgKKyNkZWZpbmUgWjNEX1NZU19HQkNOVCAgICAgICAweEZEOUExNDMwCisjZGVmaW5lIFozRF9TWVNfQlNZQ05UICAgICAgMHhGRDlBMTQzNAorI2RlZmluZSBaM0RfU1lTX0lOVF9TVEFUVVMgIDB4RkQ5QTE0NTAKKyNkZWZpbmUgWjNEX1NZU19JTlRfTUFTSyAgICAweEZEOUExNDU0CisjZGVmaW5lIFozRF9TWVNfSU5UX0NMRUFSICAgMHhGRDlBMTQ1OAorI2RlZmluZSBUQ0QwICAgICAgICAweEZEOUMwMDAwCisjZGVmaW5lIFRDRDEgICAgICAgIDB4RkQ5QzA0MDAKKyNkZWZpbmUgVENEMiAgICAgICAgMHhGRDlDMDgwMAorI2RlZmluZSBUQ0QzICAgICAgICAweEZEOUMwQzAwCisjZGVmaW5lIFRDVDAgICAgICAgIDB4RkQ5QzEwMDAKKyNkZWZpbmUgVENUMSAgICAgICAgMHhGRDlDMTQwMAorI2RlZmluZSBUQ1QyICAgICAgICAweEZEOUMxODAwCisjZGVmaW5lIFRDVDMgICAgICAgIDB4RkQ5QzFDMDAKKworLyoJUEZDCSovCisjZGVmaW5lIFBBQ1IgICAgICAgIDB4QTQwNTAxMDAKKyNkZWZpbmUgUEJDUiAgICAgICAgMHhBNDA1MDEwMgorI2RlZmluZSBQQ0NSICAgICAgICAweEE0MDUwMTA0CisjZGVmaW5lIFBEQ1IgICAgICAgIDB4QTQwNTAxMDYKKyNkZWZpbmUgUEVDUiAgICAgICAgMHhBNDA1MDEwOAorI2RlZmluZSBQRkNSICAgICAgICAweEE0MDUwMTBBCisjZGVmaW5lIFBHQ1IgICAgICAgIDB4QTQwNTAxMEMKKyNkZWZpbmUgUEhDUiAgICAgICAgMHhBNDA1MDEwRQorI2RlZmluZSBQSkNSICAgICAgICAweEE0MDUwMTEwCisjZGVmaW5lIFBLQ1IgICAgICAgIDB4QTQwNTAxMTIKKyNkZWZpbmUgUExDUiAgICAgICAgMHhBNDA1MDExNAorI2RlZmluZSBQTUNSICAgICAgICAweEE0MDUwMTE2CisjZGVmaW5lIFBOQ1IgICAgICAgIDB4QTQwNTAxMTgKKyNkZWZpbmUgUFFDUiAgICAgICAgMHhBNDA1MDExQQorI2RlZmluZSBQUkNSICAgICAgICAweEE0MDUwMTFDCisjZGVmaW5lIFBTQ1IgICAgICAgIDB4QTQwNTAxMUUKKyNkZWZpbmUgUFRDUiAgICAgICAgMHhBNDA1MDE0MAorI2RlZmluZSBQVUNSICAgICAgICAweEE0MDUwMTQyCisjZGVmaW5lIFBWQ1IgICAgICAgIDB4QTQwNTAxNDQKKyNkZWZpbmUgUFdDUiAgICAgICAgMHhBNDA1MDE0NgorI2RlZmluZSBQWENSICAgICAgICAweEE0MDUwMTQ4CisjZGVmaW5lIFBZQ1IgICAgICAgIDB4QTQwNTAxNEEKKyNkZWZpbmUgUFpDUiAgICAgICAgMHhBNDA1MDE0QworI2RlZmluZSBQU0VMQSAgICAgICAweEE0MDUwMTRFCisjZGVmaW5lIFBTRUxCICAgICAgIDB4QTQwNTAxNTAKKyNkZWZpbmUgUFNFTEMgICAgICAgMHhBNDA1MDE1MgorI2RlZmluZSBQU0VMRCAgICAgICAweEE0MDUwMTU0CisjZGVmaW5lIFBTRUxFICAgICAgIDB4QTQwNTAxNTYKKyNkZWZpbmUgSElaQ1JBICAgICAgMHhBNDA1MDE1OAorI2RlZmluZSBISVpDUkIgICAgICAweEE0MDUwMTVBCisjZGVmaW5lIEhJWkNSQyAgICAgIDB4QTQwNTAxNUMKKyNkZWZpbmUgTVNFTENSICAgICAgMHhBNDA1MDE1QworI2RlZmluZSBQVUxDUiAgICAgICAweEE0MDUwMTVFCisjZGVmaW5lIERSVkNSICAgICAgIDB4QTQwNTAxODAKKyNkZWZpbmUgU0JTQ1IgICAgICAgMHhBNDA1MDE4MgorI2RlZmluZSBBVURUSENSICAgICAweEE0MDUwMTg0CisjZGVmaW5lIFBTRUxGICAgICAgIDB4QTQwNTAxODYKKworLyoJSS9PIFBvcnQJKi8KKyNkZWZpbmUgUEFEUiAgICAgICAgMHhBNDA1MDEyMAorI2RlZmluZSBQQkRSICAgICAgICAweEE0MDUwMTIyCisjZGVmaW5lIFBDRFIgICAgICAgIDB4QTQwNTAxMjQKKyNkZWZpbmUgUEREUiAgICAgICAgMHhBNDA1MDEyNgorI2RlZmluZSBQRURSICAgICAgICAweEE0MDUwMTI4CisjZGVmaW5lIFBGRFIgICAgICAgIDB4QTQwNTAxMkEKKyNkZWZpbmUgUEdEUiAgICAgICAgMHhBNDA1MDEyQworI2RlZmluZSBQSERSICAgICAgICAweEE0MDUwMTJFCisjZGVmaW5lIFBKRFIgICAgICAgIDB4QTQwNTAxMzAKKyNkZWZpbmUgUEtEUiAgICAgICAgMHhBNDA1MDEzMgorI2RlZmluZSBQTERSICAgICAgICAweEE0MDUwMTM0CisjZGVmaW5lIFBNRFIgICAgICAgIDB4QTQwNTAxMzYKKyNkZWZpbmUgUE5EUiAgICAgICAgMHhBNDA1MDEzOAorI2RlZmluZSBQUURSICAgICAgICAweEE0MDUwMTNBCisjZGVmaW5lIFBSRFIgICAgICAgIDB4QTQwNTAxM0MKKyNkZWZpbmUgUFNEUiAgICAgICAgMHhBNDA1MDEzRQorI2RlZmluZSBQVERSICAgICAgICAweEE0MDUwMTYwCisjZGVmaW5lIFBVRFIgICAgICAgIDB4QTQwNTAxNjIKKyNkZWZpbmUgUFZEUiAgICAgICAgMHhBNDA1MDE2NAorI2RlZmluZSBQV0RSICAgICAgICAweEE0MDUwMTY2CisjZGVmaW5lIFBZRFIgICAgICAgIDB4QTQwNTAxNjgKKyNkZWZpbmUgUFpEUiAgICAgICAgMHhBNDA1MDE2QQorCisvKglVQkMJKi8KKyNkZWZpbmUgQ0JSMCAgICAgICAgMHhGRjIwMDAwMAorI2RlZmluZSBDUlIwICAgICAgICAweEZGMjAwMDA0CisjZGVmaW5lIENBUjAgICAgICAgIDB4RkYyMDAwMDgKKyNkZWZpbmUgQ0FNUjAgICAgICAgMHhGRjIwMDAwQworI2RlZmluZSBDQlIxICAgICAgICAweEZGMjAwMDIwCisjZGVmaW5lIENSUjEgICAgICAgIDB4RkYyMDAwMjQKKyNkZWZpbmUgQ0FSMSAgICAgICAgMHhGRjIwMDAyOAorI2RlZmluZSBDQU1SMSAgICAgICAweEZGMjAwMDJDCisjZGVmaW5lIENEUjEgICAgICAgIDB4RkYyMDAwMzAKKyNkZWZpbmUgQ0RNUjEgICAgICAgMHhGRjIwMDAzNAorI2RlZmluZSBDRVRSMSAgICAgICAweEZGMjAwMDM4CisjZGVmaW5lIENDTUZSICAgICAgIDB4RkYyMDA2MDAKKyNkZWZpbmUgQ0JDUiAgICAgICAgMHhGRjIwMDYyMAorCisvKglILVVESQkqLworI2RlZmluZSBTRElSICAgICAgICAweEZDMTEwMDAwCisjZGVmaW5lIFNERFJIICAgICAgIDB4RkMxMTAwMDgKKyNkZWZpbmUgU0REUkwgICAgICAgMHhGQzExMDAwQQorI2RlZmluZSBTRElOVCAgICAgICAweEZDMTEwMDE4CisKKyNlbmRpZiAvKiBfQVNNX0NQVV9TSDc3MjJfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2NwdV9zaDc3NTAuaCBiL2luY2x1ZGUvYXNtLXNoL2NwdV9zaDc3NTAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjY0NjFhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvY3B1X3NoNzc1MC5oCkBAIC0wLDAgKzEsMTk2IEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA3IE5vYnVoaXJvIEl3YW1hdHN1IDxpd2FtYXRzdUBuaWdhdXJpLm9yZz4KKyAqCisgKiBTSDc3NTAvU0g3NzUwUy9TSDc3NTBSL1NINzc1MS9TSDc3NTFSCisgKiAgSW50ZXJuYWwgSS9PIHJlZ2lzdGVyCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaWZuZGVmIF9BU01fQ1BVX1NINzc1MF9IXworI2RlZmluZSBfQVNNX0NQVV9TSDc3NTBfSF8KKworI2lmZGVmIENPTkZJR19DUFVfVFlQRV9SCisjZGVmaW5lIENBQ0hFX09DX05VTV9XQVlTICAgICAyCisjZGVmaW5lIENDUl9DQUNIRV9JTklUICAgMHg4MDAwMDkwZCAgICAgLyogRU1PREUsSUNJLElDRSgxNmspLE9DSSxQMS13YixPQ0UoMzJrKSAqLworI2Vsc2UKKyNkZWZpbmUgQ0FDSEVfT0NfTlVNX1dBWVMgICAgIDEKKyNkZWZpbmUgQ0NSX0NBQ0hFX0lOSVQgICAweDAwMDAwOTBiCisjZW5kaWYKKworLyogICAgICBPQ04gICAgICovCisjZGVmaW5lIFBURUggCTB4RkYwMDAwMDAKKyNkZWZpbmUgUFRFTCAJMHhGRjAwMDAwNAorI2RlZmluZSBUVEIgCTB4RkYwMDAwMDgKKyNkZWZpbmUgVEVBIAkweEZGMDAwMDBDCisjZGVmaW5lIE1NVUNSIAkweEZGMDAwMDEwCisjZGVmaW5lIEJBU1JBIAkweEZGMDAwMDE0CisjZGVmaW5lIEJBU1JCCTB4RkYwMDAwMTgKKyNkZWZpbmUgQ0NSCTB4RkYwMDAwMUMKKyNkZWZpbmUgVFJBIAkweEZGMDAwMDIwCisjZGVmaW5lIEVYUEVWVCAJMHhGRjAwMDAyNAorI2RlZmluZSBJTlRFVlQgCTB4RkYwMDAwMjgKKyNkZWZpbmUgUFRFQSAJMHhGRjAwMDAzNAorI2RlZmluZSBRQUNSMCAJMHhGRjAwMDAzOAorI2RlZmluZSBRQUNSMSAJMHhGRjAwMDAzQworCisvKiAgICAgIFVCQyAgICAgKi8KKyNkZWZpbmUgQkFSQSAJMHhGRjIwMDAwMAorI2RlZmluZSBCQU1SQSAJMHhGRjIwMDAwNAorI2RlZmluZSBCQlJBIAkweEZGMjAwMDA4CisjZGVmaW5lIEJBUkIgCTB4RkYyMDAwMEMKKyNkZWZpbmUgQkFNUkIgCTB4RkYyMDAwMTAKKyNkZWZpbmUgQkJSQiAJMHhGRjIwMDAxNAorI2RlZmluZSBCRFJCIAkweEZGMjAwMDE4CisjZGVmaW5lIEJETVJCIAkweEZGMjAwMDFDCisjZGVmaW5lIEJSQ1IgCTB4RkYyMDAwMjAKKworLyogICAgICBCU0MgICAgICovCisjZGVmaW5lIEJDUjEJMHhGRjgwMDAwMAorI2RlZmluZSBCQ1IyCTB4RkY4MDAwMDQKKyNkZWZpbmUgQkNSMyAJMHhGRjgwMDA1MAorI2RlZmluZSBCQ1I0CTB4RkUwQTAwRjAKKyNkZWZpbmUgV0NSMSAJMHhGRjgwMDAwOAorI2RlZmluZSBXQ1IyIAkweEZGODAwMDBDCisjZGVmaW5lIFdDUjMgCTB4RkY4MDAwMTAKKyNkZWZpbmUgTUNSIAkweEZGODAwMDE0CisjZGVmaW5lIFBDUiAJMHhGRjgwMDAxOAorI2RlZmluZSBSVENTUiAJMHhGRjgwMDAxQworI2RlZmluZSBSVENOVCAJMHhGRjgwMDAyMAorI2RlZmluZSBSVENPUiAJMHhGRjgwMDAyNAorI2RlZmluZSBSRkNSIAkweEZGODAwMDI4CisjZGVmaW5lIFBDVFJBIAkweEZGODAwMDJDCisjZGVmaW5lIFBEVFJBIAkweEZGODAwMDMwCisjZGVmaW5lIFBDVFJCIAkweEZGODAwMDQwCisjZGVmaW5lIFBEVFJCIAkweEZGODAwMDQ0CisjZGVmaW5lIEdQSU9JQyAJMHhGRjgwMDA0OAorCisvKiAgICAgIERNQUMgICAgKi8KKyNkZWZpbmUgU0FSMCAJMHhGRkEwMDAwMAorI2RlZmluZSBEQVIwIAkweEZGQTAwMDA0CisjZGVmaW5lIERNQVRDUjAgMHhGRkEwMDAwOAorI2RlZmluZSBDSENSMAkweEZGQTAwMDBDCisjZGVmaW5lIFNBUjEgCTB4RkZBMDAwMTAKKyNkZWZpbmUgREFSMSAJMHhGRkEwMDAxNAorI2RlZmluZSBETUFUQ1IxIDB4RkZBMDAwMTgKKyNkZWZpbmUgQ0hDUjEgCTB4RkZBMDAwMUMKKyNkZWZpbmUgU0FSMiAJMHhGRkEwMDAyMAorI2RlZmluZSBEQVIyIAkweEZGQTAwMDI0CisjZGVmaW5lIERNQVRDUjIgMHhGRkEwMDAyOAorI2RlZmluZSBDSENSMiAJMHhGRkEwMDAyQworI2RlZmluZSBTQVIzIAkweEZGQTAwMDMwCisjZGVmaW5lIERBUjMgCTB4RkZBMDAwMzQKKyNkZWZpbmUgRE1BVENSMyAweEZGQTAwMDM4CisjZGVmaW5lIENIQ1IzIAkweEZGQTAwMDNDCisjZGVmaW5lIERNQU9SIAkweEZGQTAwMDQwCisjZGVmaW5lIFNBUjQJMHhGRkEwMDA1MAorI2RlZmluZSBEQVI0IAkweEZGQTAwMDU0CisjZGVmaW5lIERNQVRDUjQgMHhGRkEwMDA1OAorCisvKiAgICAgIENQRyAgICAgKi8KKyNkZWZpbmUgRlJRQ1IgCTB4RkZDMDAwMDAKKyNkZWZpbmUgU1RCQ1IgCTB4RkZDMDAwMDQKKyNkZWZpbmUgV1RDTlQgCTB4RkZDMDAwMDgKKyNkZWZpbmUgV1RDU1IgCTB4RkZDMDAwMEMKKyNkZWZpbmUgU1RCQ1IyIAkweEZGQzAwMDEwCisKKy8qICAgICAgUlRDICAgICAqLworI2RlZmluZSBSNjRDTlQJMHhGRkM4MDAwMAorI2RlZmluZSBSU0VDQ05UIDB4RkZDODAwMDQKKyNkZWZpbmUgUk1JTkNOVCAweEZGQzgwMDA4CisjZGVmaW5lIFJIUkNOVCAJMHhGRkM4MDAwQworI2RlZmluZSBSV0tDTlQgCTB4RkZDODAwMTAKKyNkZWZpbmUgUkRBWUNOVCAweEZGQzgwMDE0CisjZGVmaW5lIFJNT05DTlQgMHhGRkM4MDAxOAorI2RlZmluZSBSWVJDTlQgCTB4RkZDODAwMUMKKyNkZWZpbmUgUlNFQ0FSIAkweEZGQzgwMDIwCisjZGVmaW5lIFJNSU5BUiAJMHhGRkM4MDAyNAorI2RlZmluZSBSSFJBUiAJMHhGRkM4MDAyOAorI2RlZmluZSBSV0tBUiAJMHhGRkM4MDAyQworI2RlZmluZSBSREFZQVIgCTB4RkZDODAwMzAKKyNkZWZpbmUgUk1PTkFSIAkweEZGQzgwMDM0CisjZGVmaW5lIFJDUjEgCTB4RkZDODAwMzgKKyNkZWZpbmUgUkNSMiAJMHhGRkM4MDAzQworI2RlZmluZSBSQ1IzIAkweEZGQzgwMDUwCisjZGVmaW5lIFJZUkFSIAkweEZGQzgwMDU0CisKKy8qICAgICAgSUNSICAgICAqLworI2RlZmluZSBJQ1IgCTB4RkZEMDAwMDAKKyNkZWZpbmUgSVBSQSAJMHhGRkQwMDAwNAorI2RlZmluZSBJUFJCIAkweEZGRDAwMDA4CisjZGVmaW5lIElQUkMJMHhGRkQwMDAwQworI2RlZmluZSBJUFJEIAkweEZGRDAwMDEwCisjZGVmaW5lIElOVFBSSSAJMHhGRTA4MDAwMAorI2RlZmluZSBJTlRSRVEJMHhGRTA4MDAyMAorI2RlZmluZSBJTlRNU0sJMHhGRTA4MDA0MAorI2RlZmluZSBJTlRNU0tDTAkweEZFMDgwMDYwCisKKy8qICAgICAgQ1BHICAgICAqLworI2RlZmluZSBDTEtTVFAJCTB4RkUwQTAwMDAKKyNkZWZpbmUgQ0xLU1RQQ0xSCTB4RkUwQTAwMDgKKworLyogICAgICBUTVUgICAgICovCisjZGVmaW5lIFRTVFIyIAkweEZFMTAwMDA0CisjZGVmaW5lIFRDT1IzIAkweEZFMTAwMDA4CisjZGVmaW5lIFRDTlQzIAkweEZFMTAwMDBDCisjZGVmaW5lIFRDUjMgCTB4RkUxMDAwMTAKKyNkZWZpbmUgVENPUjQgCTB4RkUxMDAwMTQKKyNkZWZpbmUgVENOVDQgCTB4RkUxMDAwMTgKKyNkZWZpbmUgVENSNCAJMHhGRTEwMDAxQworI2RlZmluZSBUT0NSIAkweEZGRDgwMDAwCisjZGVmaW5lIFRTVFIwIAkweEZGRDgwMDA0CisjZGVmaW5lIFRDT1IwCTB4RkZEODAwMDgKKyNkZWZpbmUgVENOVDAgCTB4RkZEODAwMEMKKyNkZWZpbmUgVENSMCAJMHhGRkQ4MDAxMAorI2RlZmluZSBUQ09SMSAJMHhGRkQ4MDAxNAorI2RlZmluZSBUQ05UMSAJMHhGRkQ4MDAxOAorI2RlZmluZSBUQ1IxIAkweEZGRDgwMDFDCisjZGVmaW5lIFRDT1IyIAkweEZGRDgwMDIwCisjZGVmaW5lIFRDTlQyIAkweEZGRDgwMDI0CisjZGVmaW5lIFRDUjIgCTB4RkZEODAwMjgKKyNkZWZpbmUgVENQUjIgCTB4RkZEODAwMkMKKyNkZWZpbmUgVFNUUglUU1RSMAorCisvKiAgICAgIFNDSSAgICAgKi8KKyNkZWZpbmUgU0NTTVIxIAkweEZGRTAwMDAwCisjZGVmaW5lIFNDQlJSMSAJMHhGRkUwMDAwNAorI2RlZmluZSBTQ1NDUjEgCTB4RkZFMDAwMDgKKyNkZWZpbmUgU0NURFIxIAkweEZGRTAwMDBDCisjZGVmaW5lIFNDU1NSMSAJMHhGRkUwMDAxMAorI2RlZmluZSBTQ1JEUjEgCTB4RkZFMDAwMTQKKyNkZWZpbmUgU0NTQ01SMSAweEZGRTAwMDE4CisjZGVmaW5lIFNDU1BUUjEgMHhGRkUwMDAxQworI2RlZmluZSBTQ0YwX0JBU0UJU0NTTVIxCisKKy8qICAgICAgU0NJRiAgICAqLworI2RlZmluZSBTQ1NNUjIgCTB4RkZFODAwMDAKKyNkZWZpbmUgU0NCUlIyIAkweEZGRTgwMDA0CisjZGVmaW5lIFNDU0NSMiAJMHhGRkU4MDAwOAorI2RlZmluZSBTQ0ZURFIyIDB4RkZFODAwMEMKKyNkZWZpbmUgU0NGU1IyIAkweEZGRTgwMDEwCisjZGVmaW5lIFNDRlJEUjIJMHhGRkU4MDAxNAorI2RlZmluZSBTQ0ZDUjIgCTB4RkZFODAwMTgKKyNkZWZpbmUgU0NGRFIyIAkweEZGRTgwMDFDCisjZGVmaW5lIFNDU1BUUjIJMHhGRkU4MDAyMAorI2RlZmluZSBTQ0xTUjIgCTB4RkZFODAwMjQKKyNkZWZpbmUgU0NJRjFfQkFTRQlTQ1NNUjIKKworLyogICAgICBILVVESSAgICovCisjZGVmaW5lIFNESVIgCTB4RkZGMDAwMDAKKyNkZWZpbmUgU0REUiAJMHhGRkYwMDAwOAorI2RlZmluZSBTRElOVCAJMHhGRkYwMDAxNAorCisjZW5kaWYJLyogX0FTTV9DUFVfU0g3NzUwX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9lcnJuby5oIGIvaW5jbHVkZS9hc20tc2gvZXJybm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDJjNjE4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvZXJybm8uaApAQCAtMCwwICsxLDE1NiBAQAorLyoKKyAqIFUtYm9vdCAtIGVycm5vLmggRXJyb3IgbnVtYmVyIGRlZmluZXMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwNyBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sCisgKiBNQSAwMjExMC0xMzAxIFVTQQorICovCisKKyNpZm5kZWYgX0JMQUNLRklOX0VSUk5PX0gKKyNkZWZpbmUgX0JMQUNLRklOX0VSUk5PX0gKKworI2RlZmluZQlFUEVSTQkJMQkvKiBPcGVyYXRpb24gbm90IHBlcm1pdHRlZCAqLworI2RlZmluZQlFTk9FTlQJCTIJLyogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSAqLworI2RlZmluZQlFU1JDSAkJMwkvKiBObyBzdWNoIHByb2Nlc3MgKi8KKyNkZWZpbmUJRUlOVFIJCTQJLyogSW50ZXJydXB0ZWQgc3lzdGVtIGNhbGwgKi8KKyNkZWZpbmUJRUlPCQk1CS8qIEkvTyBlcnJvciAqLworI2RlZmluZQlFTlhJTwkJNgkvKiBObyBzdWNoIGRldmljZSBvciBhZGRyZXNzICovCisjZGVmaW5lCUUyQklHCQk3CS8qIEFyZyBsaXN0IHRvbyBsb25nICovCisjZGVmaW5lCUVOT0VYRUMJCTgJLyogRXhlYyBmb3JtYXQgZXJyb3IgKi8KKyNkZWZpbmUJRUJBREYJCTkJLyogQmFkIGZpbGUgbnVtYmVyICovCisjZGVmaW5lCUVDSElMRAkJMTAJLyogTm8gY2hpbGQgcHJvY2Vzc2VzICovCisjZGVmaW5lCUVBR0FJTgkJMTEJLyogVHJ5IGFnYWluICovCisjZGVmaW5lCUVOT01FTQkJMTIJLyogT3V0IG9mIG1lbW9yeSAqLworI2RlZmluZQlFQUNDRVMJCTEzCS8qIFBlcm1pc3Npb24gZGVuaWVkICovCisjZGVmaW5lCUVGQVVMVAkJMTQJLyogQmFkIGFkZHJlc3MgKi8KKyNkZWZpbmUJRU5PVEJMSwkJMTUJLyogQmxvY2sgZGV2aWNlIHJlcXVpcmVkICovCisjZGVmaW5lCUVCVVNZCQkxNgkvKiBEZXZpY2Ugb3IgcmVzb3VyY2UgYnVzeSAqLworI2RlZmluZQlFRVhJU1QJCTE3CS8qIEZpbGUgZXhpc3RzICovCisjZGVmaW5lCUVYREVWCQkxOAkvKiBDcm9zcy1kZXZpY2UgbGluayAqLworI2RlZmluZQlFTk9ERVYJCTE5CS8qIE5vIHN1Y2ggZGV2aWNlICovCisjZGVmaW5lCUVOT1RESVIJCTIwCS8qIE5vdCBhIGRpcmVjdG9yeSAqLworI2RlZmluZQlFSVNESVIJCTIxCS8qIElzIGEgZGlyZWN0b3J5ICovCisjZGVmaW5lCUVJTlZBTAkJMjIJLyogSW52YWxpZCBhcmd1bWVudCAqLworI2RlZmluZQlFTkZJTEUJCTIzCS8qIEZpbGUgdGFibGUgb3ZlcmZsb3cgKi8KKyNkZWZpbmUJRU1GSUxFCQkyNAkvKiBUb28gbWFueSBvcGVuIGZpbGVzICovCisjZGVmaW5lCUVOT1RUWQkJMjUJLyogTm90IGEgdHlwZXdyaXRlciAqLworI2RlZmluZQlFVFhUQlNZCQkyNgkvKiBUZXh0IGZpbGUgYnVzeSAqLworI2RlZmluZQlFRkJJRwkJMjcJLyogRmlsZSB0b28gbGFyZ2UgKi8KKyNkZWZpbmUJRU5PU1BDCQkyOAkvKiBObyBzcGFjZSBsZWZ0IG9uIGRldmljZSAqLworI2RlZmluZQlFU1BJUEUJCTI5CS8qIElsbGVnYWwgc2VlayAqLworI2RlZmluZQlFUk9GUwkJMzAJLyogUmVhZC1vbmx5IGZpbGUgc3lzdGVtICovCisjZGVmaW5lCUVNTElOSwkJMzEJLyogVG9vIG1hbnkgbGlua3MgKi8KKyNkZWZpbmUJRVBJUEUJCTMyCS8qIEJyb2tlbiBwaXBlICovCisjZGVmaW5lCUVET00JCTMzCS8qIE1hdGggYXJndW1lbnQgb3V0IG9mIGRvbWFpbiBvZiBmdW5jICovCisjZGVmaW5lCUVSQU5HRQkJMzQJLyogTWF0aCByZXN1bHQgbm90IHJlcHJlc2VudGFibGUgKi8KKyNkZWZpbmUJRURFQURMSwkJMzUJLyogUmVzb3VyY2UgZGVhZGxvY2sgd291bGQgb2NjdXIgKi8KKyNkZWZpbmUJRU5BTUVUT09MT05HCTM2CS8qIEZpbGUgbmFtZSB0b28gbG9uZyAqLworI2RlZmluZQlFTk9MQ0sJCTM3CS8qIE5vIHJlY29yZCBsb2NrcyBhdmFpbGFibGUgKi8KKyNkZWZpbmUJRU5PU1lTCQkzOAkvKiBGdW5jdGlvbiBub3QgaW1wbGVtZW50ZWQgKi8KKyNkZWZpbmUJRU5PVEVNUFRZCTM5CS8qIERpcmVjdG9yeSBub3QgZW1wdHkgKi8KKyNkZWZpbmUJRUxPT1AJCTQwCS8qIFRvbyBtYW55IHN5bWJvbGljIGxpbmtzIGVuY291bnRlcmVkICovCisjZGVmaW5lCUVXT1VMREJMT0NLCUVBR0FJTgkvKiBPcGVyYXRpb24gd291bGQgYmxvY2sgKi8KKyNkZWZpbmUJRU5PTVNHCQk0MgkvKiBObyBtZXNzYWdlIG9mIGRlc2lyZWQgdHlwZSAqLworI2RlZmluZQlFSURSTQkJNDMJLyogSWRlbnRpZmllciByZW1vdmVkICovCisjZGVmaW5lCUVDSFJORwkJNDQJLyogQ2hhbm5lbCBudW1iZXIgb3V0IG9mIHJhbmdlICovCisjZGVmaW5lCUVMMk5TWU5DCTQ1CS8qIExldmVsIDIgbm90IHN5bmNocm9uaXplZCAqLworI2RlZmluZQlFTDNITFQJCTQ2CS8qIExldmVsIDMgaGFsdGVkICovCisjZGVmaW5lCUVMM1JTVAkJNDcJLyogTGV2ZWwgMyByZXNldCAqLworI2RlZmluZQlFTE5STkcJCTQ4CS8qIExpbmsgbnVtYmVyIG91dCBvZiByYW5nZSAqLworI2RlZmluZQlFVU5BVENICQk0OQkvKiBQcm90b2NvbCBkcml2ZXIgbm90IGF0dGFjaGVkICovCisjZGVmaW5lCUVOT0NTSQkJNTAJLyogTm8gQ1NJIHN0cnVjdHVyZSBhdmFpbGFibGUgKi8KKyNkZWZpbmUJRUwySExUCQk1MQkvKiBMZXZlbCAyIGhhbHRlZCAqLworI2RlZmluZQlFQkFERQkJNTIJLyogSW52YWxpZCBleGNoYW5nZSAqLworI2RlZmluZQlFQkFEUgkJNTMJLyogSW52YWxpZCByZXF1ZXN0IGRlc2NyaXB0b3IgKi8KKyNkZWZpbmUJRVhGVUxMCQk1NAkvKiBFeGNoYW5nZSBmdWxsICovCisjZGVmaW5lCUVOT0FOTwkJNTUJLyogTm8gYW5vZGUgKi8KKyNkZWZpbmUJRUJBRFJRQwkJNTYJLyogSW52YWxpZCByZXF1ZXN0IGNvZGUgKi8KKyNkZWZpbmUJRUJBRFNMVAkJNTcJLyogSW52YWxpZCBzbG90ICovCisKKyNkZWZpbmUJRURFQURMT0NLCUVERUFETEsKKworI2RlZmluZQlFQkZPTlQJCTU5CS8qIEJhZCBmb250IGZpbGUgZm9ybWF0ICovCisjZGVmaW5lCUVOT1NUUgkJNjAJLyogRGV2aWNlIG5vdCBhIHN0cmVhbSAqLworI2RlZmluZQlFTk9EQVRBCQk2MQkvKiBObyBkYXRhIGF2YWlsYWJsZSAqLworI2RlZmluZQlFVElNRQkJNjIJLyogVGltZXIgZXhwaXJlZCAqLworI2RlZmluZQlFTk9TUgkJNjMJLyogT3V0IG9mIHN0cmVhbXMgcmVzb3VyY2VzICovCisjZGVmaW5lCUVOT05FVAkJNjQJLyogTWFjaGluZSBpcyBub3Qgb24gdGhlIG5ldHdvcmsgKi8KKyNkZWZpbmUJRU5PUEtHCQk2NQkvKiBQYWNrYWdlIG5vdCBpbnN0YWxsZWQgKi8KKyNkZWZpbmUJRVJFTU9URQkJNjYJLyogT2JqZWN0IGlzIHJlbW90ZSAqLworI2RlZmluZQlFTk9MSU5LCQk2NwkvKiBMaW5rIGhhcyBiZWVuIHNldmVyZWQgKi8KKyNkZWZpbmUJRUFEVgkJNjgJLyogQWR2ZXJ0aXNlIGVycm9yICovCisjZGVmaW5lCUVTUk1OVAkJNjkJLyogU3Jtb3VudCBlcnJvciAqLworI2RlZmluZQlFQ09NTQkJNzAJLyogQ29tbXVuaWNhdGlvbiBlcnJvciBvbiBzZW5kICovCisjZGVmaW5lCUVQUk9UTwkJNzEJLyogUHJvdG9jb2wgZXJyb3IgKi8KKyNkZWZpbmUJRU1VTFRJSE9QCTcyCS8qIE11bHRpaG9wIGF0dGVtcHRlZCAqLworI2RlZmluZQlFRE9URE9UCQk3MwkvKiBSRlMgc3BlY2lmaWMgZXJyb3IgKi8KKyNkZWZpbmUJRUJBRE1TRwkJNzQJLyogTm90IGEgZGF0YSBtZXNzYWdlICovCisjZGVmaW5lCUVPVkVSRkxPVwk3NQkvKiBWYWx1ZSB0b28gbGFyZ2UgZm9yIGRlZmluZWQgZGF0YSB0eXBlICovCisjZGVmaW5lCUVOT1RVTklRCTc2CS8qIE5hbWUgbm90IHVuaXF1ZSBvbiBuZXR3b3JrICovCisjZGVmaW5lCUVCQURGRAkJNzcJLyogRmlsZSBkZXNjcmlwdG9yIGluIGJhZCBzdGF0ZSAqLworI2RlZmluZQlFUkVNQ0hHCQk3OAkvKiBSZW1vdGUgYWRkcmVzcyBjaGFuZ2VkICovCisjZGVmaW5lCUVMSUJBQ0MJCTc5CS8qIENhbiBub3QgYWNjZXNzIGEgbmVlZGVkIHNoYXJlZCBsaWJyYXJ5ICovCisjZGVmaW5lCUVMSUJCQUQJCTgwCS8qIEFjY2Vzc2luZyBhIGNvcnJ1cHRlZCBzaGFyZWQgbGlicmFyeSAqLworI2RlZmluZQlFTElCU0NOCQk4MQkvKiAubGliIHNlY3Rpb24gaW4gYS5vdXQgY29ycnVwdGVkICovCisjZGVmaW5lCUVMSUJNQVgJCTgyCS8qIEF0dGVtcHRpbmcgdG8gbGluayBpbiB0b28gbWFueSBzaGFyZWQgbGlicmFyaWVzICovCisjZGVmaW5lCUVMSUJFWEVDCTgzCS8qIENhbm5vdCBleGVjIGEgc2hhcmVkIGxpYnJhcnkgZGlyZWN0bHkgKi8KKyNkZWZpbmUJRUlMU0VRCQk4NAkvKiBJbGxlZ2FsIGJ5dGUgc2VxdWVuY2UgKi8KKyNkZWZpbmUJRVJFU1RBUlQJODUJLyogSW50ZXJydXB0ZWQgc3lzdGVtIGNhbGwgc2hvdWxkIGJlIHJlc3RhcnRlZCAqLworI2RlZmluZQlFU1RSUElQRQk4NgkvKiBTdHJlYW1zIHBpcGUgZXJyb3IgKi8KKyNkZWZpbmUJRVVTRVJTCQk4NwkvKiBUb28gbWFueSB1c2VycyAqLworI2RlZmluZQlFTk9UU09DSwk4OAkvKiBTb2NrZXQgb3BlcmF0aW9uIG9uIG5vbi1zb2NrZXQgKi8KKyNkZWZpbmUJRURFU1RBRERSUkVRCTg5CS8qIERlc3RpbmF0aW9uIGFkZHJlc3MgcmVxdWlyZWQgKi8KKyNkZWZpbmUJRU1TR1NJWkUJOTAJLyogTWVzc2FnZSB0b28gbG9uZyAqLworI2RlZmluZQlFUFJPVE9UWVBFCTkxCS8qIFByb3RvY29sIHdyb25nIHR5cGUgZm9yIHNvY2tldCAqLworI2RlZmluZQlFTk9QUk9UT09QVAk5MgkvKiBQcm90b2NvbCBub3QgYXZhaWxhYmxlICovCisjZGVmaW5lCUVQUk9UT05PU1VQUE9SVAk5MwkvKiBQcm90b2NvbCBub3Qgc3VwcG9ydGVkICovCisjZGVmaW5lCUVTT0NLVE5PU1VQUE9SVAk5NAkvKiBTb2NrZXQgdHlwZSBub3Qgc3VwcG9ydGVkICovCisjZGVmaW5lCUVPUE5PVFNVUFAJOTUJLyogT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQgb24gdHJhbnNwb3J0IGVuZHBvaW50ICovCisjZGVmaW5lCUVQRk5PU1VQUE9SVAk5NgkvKiBQcm90b2NvbCBmYW1pbHkgbm90IHN1cHBvcnRlZCAqLworI2RlZmluZQlFQUZOT1NVUFBPUlQJOTcJLyogQWRkcmVzcyBmYW1pbHkgbm90IHN1cHBvcnRlZCBieSBwcm90b2NvbCAqLworI2RlZmluZQlFQUREUklOVVNFCTk4CS8qIEFkZHJlc3MgYWxyZWFkeSBpbiB1c2UgKi8KKyNkZWZpbmUJRUFERFJOT1RBVkFJTAk5OQkvKiBDYW5ub3QgYXNzaWduIHJlcXVlc3RlZCBhZGRyZXNzICovCisjZGVmaW5lCUVORVRET1dOCTEwMAkvKiBOZXR3b3JrIGlzIGRvd24gKi8KKyNkZWZpbmUJRU5FVFVOUkVBQ0gJMTAxCS8qIE5ldHdvcmsgaXMgdW5yZWFjaGFibGUgKi8KKyNkZWZpbmUJRU5FVFJFU0VUCTEwMgkvKiBOZXR3b3JrIGRyb3BwZWQgY29ubmVjdGlvbiBiZWNhdXNlIG9mIHJlc2V0ICovCisjZGVmaW5lCUVDT05OQUJPUlRFRAkxMDMJLyogU29mdHdhcmUgY2F1c2VkIGNvbm5lY3Rpb24gYWJvcnQgKi8KKyNkZWZpbmUJRUNPTk5SRVNFVAkxMDQJLyogQ29ubmVjdGlvbiByZXNldCBieSBwZWVyICovCisjZGVmaW5lCUVOT0JVRlMJCTEwNQkvKiBObyBidWZmZXIgc3BhY2UgYXZhaWxhYmxlICovCisjZGVmaW5lCUVJU0NPTk4JCTEwNgkvKiBUcmFuc3BvcnQgZW5kcG9pbnQgaXMgYWxyZWFkeSBjb25uZWN0ZWQgKi8KKyNkZWZpbmUJRU5PVENPTk4JMTA3CS8qIFRyYW5zcG9ydCBlbmRwb2ludCBpcyBub3QgY29ubmVjdGVkICovCisjZGVmaW5lCUVTSFVURE9XTgkxMDgJLyogQ2Fubm90IHNlbmQgYWZ0ZXIgdHJhbnNwb3J0IGVuZHBvaW50IHNodXRkb3duICovCisjZGVmaW5lCUVUT09NQU5ZUkVGUwkxMDkJLyogVG9vIG1hbnkgcmVmZXJlbmNlczogY2Fubm90IHNwbGljZSAqLworI2RlZmluZQlFVElNRURPVVQJMTEwCS8qIENvbm5lY3Rpb24gdGltZWQgb3V0ICovCisjZGVmaW5lCUVDT05OUkVGVVNFRAkxMTEJLyogQ29ubmVjdGlvbiByZWZ1c2VkICovCisjZGVmaW5lCUVIT1NURE9XTgkxMTIJLyogSG9zdCBpcyBkb3duICovCisjZGVmaW5lCUVIT1NUVU5SRUFDSAkxMTMJLyogTm8gcm91dGUgdG8gaG9zdCAqLworI2RlZmluZQlFQUxSRUFEWQkxMTQJLyogT3BlcmF0aW9uIGFscmVhZHkgaW4gcHJvZ3Jlc3MgKi8KKyNkZWZpbmUJRUlOUFJPR1JFU1MJMTE1CS8qIE9wZXJhdGlvbiBub3cgaW4gcHJvZ3Jlc3MgKi8KKyNkZWZpbmUJRVNUQUxFCQkxMTYJLyogU3RhbGUgTkZTIGZpbGUgaGFuZGxlICovCisjZGVmaW5lCUVVQ0xFQU4JCTExNwkvKiBTdHJ1Y3R1cmUgbmVlZHMgY2xlYW5pbmcgKi8KKyNkZWZpbmUJRU5PVE5BTQkJMTE4CS8qIE5vdCBhIFhFTklYIG5hbWVkIHR5cGUgZmlsZSAqLworI2RlZmluZQlFTkFWQUlMCQkxMTkJLyogTm8gWEVOSVggc2VtYXBob3JlcyBhdmFpbGFibGUgKi8KKyNkZWZpbmUJRUlTTkFNCQkxMjAJLyogSXMgYSBuYW1lZCB0eXBlIGZpbGUgKi8KKyNkZWZpbmUJRVJFTU9URUlPCTEyMQkvKiBSZW1vdGUgSS9PIGVycm9yICovCisjZGVmaW5lCUVEUVVPVAkJMTIyCS8qIFF1b3RhIGV4Y2VlZGVkICovCisKKyNkZWZpbmUJRU5PTUVESVVNCTEyMwkvKiBObyBtZWRpdW0gZm91bmQgKi8KKyNkZWZpbmUJRU1FRElVTVRZUEUJMTI0CS8qIFdyb25nIG1lZGl1bSB0eXBlICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvZ2xvYmFsX2RhdGEuaCBiL2luY2x1ZGUvYXNtLXNoL2dsb2JhbF9kYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGE0NGEzNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoL2dsb2JhbF9kYXRhLmgKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwMgorICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDcKKyAqIE5vYnVoaXJvIEl3YW1hdHN1IDxpd2FtYXRzdUBuaWdhdXJpLm9yZz4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaWZuZGVmCV9fQVNNX1NIX0dMT0JBTERBVEFfSF8KKyNkZWZpbmUgX19BU01fU0hfR0xPQkFMREFUQV9IXworCit0eXBlZGVmCXN0cnVjdCBnbG9iYWxfZGF0YQoreworCWJkX3QJCSpiZDsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCXVuc2lnbmVkIGxvbmcJYmF1ZHJhdGU7CisJdW5zaWduZWQgbG9uZwljcHVfY2xrOwkvKiBDUFUgY2xvY2sgaW4gSHohICovCisJdW5zaWduZWQgbG9uZwloYXZlX2NvbnNvbGU7CS8qIHNlcmlhbF9pbml0KCkgd2FzIGNhbGxlZCAqLworCXVuc2lnbmVkIGxvbmcJcmFtX3NpemU7CS8qIFJBTSBzaXplICovCisJdW5zaWduZWQgbG9uZwlyZWxvY19vZmY7CS8qIFJlbG9jYXRpb24gT2Zmc2V0ICovCisJdW5zaWduZWQgbG9uZwllbnZfYWRkcjsJLyogQWRkcmVzcyAgb2YgRW52aXJvbm1lbnQgc3RydWN0ICovCisJdW5zaWduZWQgbG9uZwllbnZfdmFsaWQ7CS8qIENoZWNrc3VtIG9mIEVudmlyb25tZW50IHZhbGlkICovCisJdm9pZAkJKipqdDsJCS8qIFN0YW5kYWxvbmUgYXBwIGp1bXAgdGFibGUgKi8KK31nZF90OworCisjZGVmaW5lCUdEX0ZMR19SRUxPQwkweDAwMDAxCQkvKiBDb2RlIHdhcyByZWxvY2F0ZWQgdG8gUkFNCQkqLworI2RlZmluZQlHRF9GTEdfREVWSU5JVAkweDAwMDAyCQkvKiBEZXZpY2VzIGhhdmUgYmVlbiBpbml0aWFsaXplZAkqLworI2RlZmluZQlHRF9GTEdfU0lMRU5UCTB4MDAwMDQJCS8qIFNpbGVudCBtb2RlCQkJCSovCisKKyNkZWZpbmUgREVDTEFSRV9HTE9CQUxfREFUQV9QVFIJcmVnaXN0ZXIgZ2RfdCAqZ2QgYXNtICgicjEzIikKKworI2VuZGlmIC8qIF9fQVNNX1NIX0dMT0JBTERBVEFfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2lvLmggYi9pbmNsdWRlL2FzbS1zaC9pby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzNDI3YWQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9pby5oCkBAIC0wLDAgKzEsMjMxIEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLXNoL2lvLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk2LTIwMDAgUnVzc2VsbCBLaW5nCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBNb2RpZmljYXRpb25zOgorICogIDE2LVNlcC0xOTk2CVJNSwlJbmxpbmVkIHRoZSBpbngvb3V0eCBmdW5jdGlvbnMgJiBvcHRpbWlzZWQgZm9yIGJvdGgKKyAqCQkJY29uc3RhbnQgYWRkcmVzc2VzIGFuZCB2YXJpYWJsZSBhZGRyZXNzZXMuCisgKiAgMDQtRGVjLTE5OTcJUk1LCU1vdmVkIGEgbG90IG9mIHRoaXMgc3R1ZmYgdG8gdGhlIG5ldyBhcmNoaXRlY3R1cmUKKyAqCQkJc3BlY2lmaWMgSU8gaGVhZGVyIGZpbGVzLgorICogIDI3LU1hci0xOTk5CVBKQglTZWNvbmQgcGFyYW1ldGVyIG9mIG1lbWNweV90b2lvIGlzIGNvbnN0Li4KKyAqICAwNC1BcHItMTk5OQlQSkIJQWRkZWQgY2hlY2tfc2lnbmF0dXJlLgorICogIDEyLURlYy0xOTk5CVJNSwlNb3JlIGNsZWFudXBzCisgKiAgMTgtSnVuLTIwMDAgUk1LCVJlbW92ZWQgdmlydF90b18qIGFuZCBmcmllbmRzIGRlZmluaXRpb25zCisgKi8KKyNpZm5kZWYgX19BU01fU0hfSU9fSAorI2RlZmluZSBfX0FTTV9TSF9JT19ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKworLyoKKyAqIEdlbmVyaWMgdmlydHVhbCByZWFkL3dyaXRlLiAgTm90ZSB0aGF0IHdlIGRvbid0IHN1cHBvcnQgaGFsZi13b3JkCisgKiByZWFkL3dyaXRlcy4gIFdlIGRlZmluZSBfX2FyY2hfKltibF0gaGVyZSwgYW5kIGxlYXZlIF9fYXJjaF8qdworICogdG8gdGhlIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBjb2RlLgorICovCisjZGVmaW5lIF9fYXJjaF9nZXRiKGEpCQkJKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKShhKSkKKyNkZWZpbmUgX19hcmNoX2dldHcoYSkJCQkoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKShhKSkKKyNkZWZpbmUgX19hcmNoX2dldGwoYSkJCQkoKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikoYSkpCisKKyNkZWZpbmUgX19hcmNoX3B1dGIodixhKQkJKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKShhKSA9ICh2KSkKKyNkZWZpbmUgX19hcmNoX3B1dHcodixhKQkJKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoYSkgPSAodikpCisjZGVmaW5lIF9fYXJjaF9wdXRsKHYsYSkJCSgqKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKShhKSA9ICh2KSkKKworZXh0ZXJuIHZvaWQgX19yYXdfd3JpdGVzYih1bnNpZ25lZCBpbnQgYWRkciwgY29uc3Qgdm9pZCAqZGF0YSwgaW50IGJ5dGVsZW4pOworZXh0ZXJuIHZvaWQgX19yYXdfd3JpdGVzdyh1bnNpZ25lZCBpbnQgYWRkciwgY29uc3Qgdm9pZCAqZGF0YSwgaW50IHdvcmRsZW4pOworZXh0ZXJuIHZvaWQgX19yYXdfd3JpdGVzbCh1bnNpZ25lZCBpbnQgYWRkciwgY29uc3Qgdm9pZCAqZGF0YSwgaW50IGxvbmdsZW4pOworCitleHRlcm4gdm9pZCBfX3Jhd19yZWFkc2IodW5zaWduZWQgaW50IGFkZHIsIHZvaWQgKmRhdGEsIGludCBieXRlbGVuKTsKK2V4dGVybiB2b2lkIF9fcmF3X3JlYWRzdyh1bnNpZ25lZCBpbnQgYWRkciwgdm9pZCAqZGF0YSwgaW50IHdvcmRsZW4pOworZXh0ZXJuIHZvaWQgX19yYXdfcmVhZHNsKHVuc2lnbmVkIGludCBhZGRyLCB2b2lkICpkYXRhLCBpbnQgbG9uZ2xlbik7CisKKyNkZWZpbmUgX19yYXdfd3JpdGViKHYsYSkJCV9fYXJjaF9wdXRiKHYsYSkKKyNkZWZpbmUgX19yYXdfd3JpdGV3KHYsYSkJCV9fYXJjaF9wdXR3KHYsYSkKKyNkZWZpbmUgX19yYXdfd3JpdGVsKHYsYSkJCV9fYXJjaF9wdXRsKHYsYSkKKworI2RlZmluZSBfX3Jhd19yZWFkYihhKQkJCV9fYXJjaF9nZXRiKGEpCisjZGVmaW5lIF9fcmF3X3JlYWR3KGEpCQkJX19hcmNoX2dldHcoYSkKKyNkZWZpbmUgX19yYXdfcmVhZGwoYSkJCQlfX2FyY2hfZ2V0bChhKQorCisvKgorICogVGhlIGNvbXBpbGVyIHNlZW1zIHRvIGJlIGluY2FwYWJsZSBvZiBvcHRpbWlzaW5nIGNvbnN0YW50cworICogcHJvcGVybHkuICBTcGVsbCBpdCBvdXQgdG8gdGhlIGNvbXBpbGVyIGluIHNvbWUgY2FzZXMuCisgKiBUaGVzZSBhcmUgb25seSB2YWxpZCBmb3Igc21hbGwgdmFsdWVzIG9mICJvZmYiICg8IDE8PDEyKQorICovCisjZGVmaW5lIF9fcmF3X2Jhc2Vfd3JpdGViKHZhbCxiYXNlLG9mZikJX19hcmNoX2Jhc2VfcHV0Yih2YWwsYmFzZSxvZmYpCisjZGVmaW5lIF9fcmF3X2Jhc2Vfd3JpdGV3KHZhbCxiYXNlLG9mZikJX19hcmNoX2Jhc2VfcHV0dyh2YWwsYmFzZSxvZmYpCisjZGVmaW5lIF9fcmF3X2Jhc2Vfd3JpdGVsKHZhbCxiYXNlLG9mZikJX19hcmNoX2Jhc2VfcHV0bCh2YWwsYmFzZSxvZmYpCisKKyNkZWZpbmUgX19yYXdfYmFzZV9yZWFkYihiYXNlLG9mZikJX19hcmNoX2Jhc2VfZ2V0YihiYXNlLG9mZikKKyNkZWZpbmUgX19yYXdfYmFzZV9yZWFkdyhiYXNlLG9mZikJX19hcmNoX2Jhc2VfZ2V0dyhiYXNlLG9mZikKKyNkZWZpbmUgX19yYXdfYmFzZV9yZWFkbChiYXNlLG9mZikJX19hcmNoX2Jhc2VfZ2V0bChiYXNlLG9mZikKKworLyoKKyAqIE5vdywgcGljayB1cCB0aGUgbWFjaGluZS1kZWZpbmVkIElPIGRlZmluaXRpb25zCisgKi8KKyNpZiAwCS8qIFhYWCMjI1hYWCAqLworI2luY2x1ZGUgPGFzbS9hcmNoL2lvLmg+CisjZW5kaWYJLyogWFhYIyMjWFhYICovCisKKy8qCisgKiAgSU8gcG9ydCBhY2Nlc3MgcHJpbWl0aXZlcworICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBUaGUgU0ggZG9lc24ndCBoYXZlIHNwZWNpYWwgSU8gYWNjZXNzIGluc3RydWN0aW9uczsgYWxsIElPIGlzIG1lbW9yeQorICogbWFwcGVkLiAgTm90ZSB0aGF0IHRoZXNlIGFyZSBkZWZpbmVkIHRvIHBlcmZvcm0gbGl0dGxlIGVuZGlhbiBhY2Nlc3NlcworICogb25seS4gIFRoZWlyIHByaW1hcnkgcHVycG9zZSBpcyB0byBhY2Nlc3MgUENJIGFuZCBJU0EgcGVyaXBoZXJhbHMuCisgKgorICogVGhlIG1hY2hpbmUgc3BlY2lmaWMgaW8uaCBpbmNsdWRlIGRlZmluZXMgX19pbyB0byB0cmFuc2xhdGUgYW4gIklPIgorICogYWRkcmVzcyB0byBhIG1lbW9yeSBhZGRyZXNzLgorICoKKyAqIE5vdGUgdGhhdCB3ZSBwcmV2ZW50IEdDQyByZS1vcmRlcmluZyBvciBjYWNoaW5nIHZhbHVlcyBpbiBleHByZXNzaW9ucworICogYnkgaW50cm9kdWNpbmcgc2VxdWVuY2UgcG9pbnRzIGludG8gdGhlIGluKigpIGRlZmluaXRpb25zLiAgTm90ZSB0aGF0CisgKiBfX3Jhd18qIGRvIG5vdCBndWFyYW50ZWUgdGhpcyBiZWhhdmlvdXIuCisgKgorICogVGhlIHtpbixvdXR9W2J3bF0gbWFjcm9zIGFyZSBmb3IgZW11bGF0aW5nIHg4Ni1zdHlsZSBQQ0kvSVNBIElPIHNwYWNlLgorICovCisjZGVmaW5lIG91dGIodixwKSAgICAgICAgICAgICAgIF9fcmF3X3dyaXRlYih2LCBwKQorI2RlZmluZSBvdXR3KHYscCkgICAgICAgICAgICAgICBfX3Jhd193cml0ZXcoY3B1X3RvX2xlMTYodikscCkKKyNkZWZpbmUgb3V0bCh2LHApICAgICAgICAgICAgICAgX19yYXdfd3JpdGVsKGNwdV90b19sZTMyKHYpLHApCisKKyNkZWZpbmUgaW5iKHApICAoeyB1bnNpZ25lZCBpbnQgX192ID0gX19yYXdfcmVhZGIocCk7IF9fdjsgfSkKKyNkZWZpbmUgaW53KHApICAoeyB1bnNpZ25lZCBpbnQgX192ID0gX19sZTE2X3RvX2NwdShfX3Jhd19yZWFkdyhwKSk7IF9fdjsgfSkKKyNkZWZpbmUgaW5sKHApICAoeyB1bnNpZ25lZCBpbnQgX192ID0gX19sZTMyX3RvX2NwdShfX3Jhd19yZWFkbChwKSk7IF9fdjsgfSkKKworI2RlZmluZSBvdXRzYihwLGQsbCkJCQlfX3Jhd193cml0ZXNiKHAsZCxsKQorI2RlZmluZSBvdXRzdyhwLGQsbCkJCQlfX3Jhd193cml0ZXN3KHAsZCxsKQorI2RlZmluZSBvdXRzbChwLGQsbCkJCQlfX3Jhd193cml0ZXNsKHAsZCxsKQorCisjZGVmaW5lIGluc2IocCxkLGwpCQkJX19yYXdfcmVhZHNiKHAsZCxsKQorI2RlZmluZSBpbnN3KHAsZCxsKQkJCV9fcmF3X3JlYWRzdyhwLGQsbCkKKyNkZWZpbmUgaW5zbChwLGQsbCkJCQlfX3Jhd19yZWFkc2wocCxkLGwpCisKKyNkZWZpbmUgb3V0Yl9wKHZhbCxwb3J0KQkJb3V0YigodmFsKSwocG9ydCkpCisjZGVmaW5lIG91dHdfcCh2YWwscG9ydCkJCW91dHcoKHZhbCksKHBvcnQpKQorI2RlZmluZSBvdXRsX3AodmFsLHBvcnQpCQlvdXRsKCh2YWwpLChwb3J0KSkKKyNkZWZpbmUgaW5iX3AocG9ydCkJCQlpbmIoKHBvcnQpKQorI2RlZmluZSBpbndfcChwb3J0KQkJCWludygocG9ydCkpCisjZGVmaW5lIGlubF9wKHBvcnQpCQkJaW5sKChwb3J0KSkKKworI2RlZmluZSBvdXRzYl9wKHBvcnQsZnJvbSxsZW4pCQlvdXRzYihwb3J0LGZyb20sbGVuKQorI2RlZmluZSBvdXRzd19wKHBvcnQsZnJvbSxsZW4pCQlvdXRzdyhwb3J0LGZyb20sbGVuKQorI2RlZmluZSBvdXRzbF9wKHBvcnQsZnJvbSxsZW4pCQlvdXRzbChwb3J0LGZyb20sbGVuKQorI2RlZmluZSBpbnNiX3AocG9ydCx0byxsZW4pCQlpbnNiKHBvcnQsdG8sbGVuKQorI2RlZmluZSBpbnN3X3AocG9ydCx0byxsZW4pCQlpbnN3KHBvcnQsdG8sbGVuKQorI2RlZmluZSBpbnNsX3AocG9ydCx0byxsZW4pCQlpbnNsKHBvcnQsdG8sbGVuKQorCisvKgorICogaW9yZW1hcCBhbmQgZnJpZW5kcy4KKyAqCisgKiBpb3JlbWFwIHRha2VzIGEgUENJIG1lbW9yeSBhZGRyZXNzLCBhcyBzcGVjaWZpZWQgaW4KKyAqIGxpbnV4L0RvY3VtZW50YXRpb24vSU8tbWFwcGluZy50eHQuICBJZiB5b3Ugd2FudCBhCisgKiBwaHlzaWNhbCBhZGRyZXNzLCB1c2UgX19pb3JlbWFwIGluc3RlYWQuCisgKi8KK2V4dGVybiB2b2lkICogX19pb3JlbWFwKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwgdW5zaWduZWQgbG9uZyBmbGFncyk7CitleHRlcm4gdm9pZCBfX2lvdW5tYXAodm9pZCAqYWRkcik7CisKKy8qCisgKiBHZW5lcmljIGlvcmVtYXAgc3VwcG9ydC4KKyAqCisgKiBEZWZpbmU6CisgKiAgaW9tZW1fdmFsaWRfYWRkcihvZmYsc2l6ZSkKKyAqICBpb21lbV90b19waHlzKG9mZikKKyAqLworI2lmZGVmIGlvbWVtX3ZhbGlkX2FkZHIKKyNkZWZpbmUgX19hcmNoX2lvcmVtYXAob2ZmLHN6LG5vY2FjaGUpCQkJCVwKKyAoewkJCQkJCQkJXAorCXVuc2lnbmVkIGxvbmcgX29mZiA9IChvZmYpLCBfc2l6ZSA9IChzeik7CQlcCisJdm9pZCAqX3JldCA9ICh2b2lkICopMDsJCQkJCVwKKwlpZiAoaW9tZW1fdmFsaWRfYWRkcihfb2ZmLCBfc2l6ZSkpCQkJXAorCQlfcmV0ID0gX19pb3JlbWFwKGlvbWVtX3RvX3BoeXMoX29mZiksX3NpemUsMCk7CVwKKwlfcmV0OwkJCQkJCQlcCisgfSkKKworI2RlZmluZSBfX2FyY2hfaW91bm1hcCBfX2lvdW5tYXAKKyNlbmRpZgorCisjZGVmaW5lIGlvcmVtYXAob2ZmLHN6KQkJCV9fYXJjaF9pb3JlbWFwKChvZmYpLChzeiksMCkKKyNkZWZpbmUgaW9yZW1hcF9ub2NhY2hlKG9mZixzeikJCV9fYXJjaF9pb3JlbWFwKChvZmYpLChzeiksMSkKKyNkZWZpbmUgaW91bm1hcChfYWRkcikJCQlfX2FyY2hfaW91bm1hcChfYWRkcikKKworLyoKKyAqIERNQS1jb25zaXN0ZW50IG1hcHBpbmcgZnVuY3Rpb25zLiAgVGhlc2UgYWxsb2NhdGUvZnJlZSBhIHJlZ2lvbiBvZgorICogdW5jYWNoZWQsIHVud3JpdGUtYnVmZmVyZWQgbWFwcGVkIG1lbW9yeSBzcGFjZSBmb3IgdXNlIHdpdGggRE1BCisgKiBkZXZpY2VzLiAgVGhpcyBpcyB0aGUgImdlbmVyaWMiIHZlcnNpb24uICBUaGUgUENJIHNwZWNpZmljIHZlcnNpb24KKyAqIGlzIGluIHBjaS5oCisgKi8KK2V4dGVybiB2b2lkICpjb25zaXN0ZW50X2FsbG9jKGludCBnZnAsIHNpemVfdCBzaXplLCBkbWFfYWRkcl90ICpoYW5kbGUpOworZXh0ZXJuIHZvaWQgY29uc2lzdGVudF9mcmVlKHZvaWQgKnZhZGRyLCBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCBoYW5kbGUpOworZXh0ZXJuIHZvaWQgY29uc2lzdGVudF9zeW5jKHZvaWQgKnZhZGRyLCBzaXplX3Qgc2l6ZSwgaW50IHJ3KTsKKworLyoKKyAqIFN0cmluZyB2ZXJzaW9uIG9mIElPIG1lbW9yeSBhY2Nlc3Mgb3BzOgorICovCitleHRlcm4gdm9pZCBfbWVtY3B5X2Zyb21pbyh2b2lkICosIHVuc2lnbmVkIGxvbmcsIHNpemVfdCk7CitleHRlcm4gdm9pZCBfbWVtY3B5X3RvaW8odW5zaWduZWQgbG9uZywgY29uc3Qgdm9pZCAqLCBzaXplX3QpOworZXh0ZXJuIHZvaWQgX21lbXNldF9pbyh1bnNpZ25lZCBsb25nLCBpbnQsIHNpemVfdCk7CisKKy8qCisgKiBJZiB0aGlzIGFyY2hpdGVjdHVyZSBoYXMgUENJIG1lbW9yeSBJTywgdGhlbiBkZWZpbmUgdGhlIHJlYWQvd3JpdGUKKyAqIG1hY3Jvcy4gIFRoZXNlIHNob3VsZCBvbmx5IGJlIHVzZWQgd2l0aCB0aGUgY29va2llIHBhc3NlZCBmcm9tCisgKiBpb3JlbWFwLgorICovCisjaWZkZWYgX19tZW1fcGNpCisKKyNkZWZpbmUgcmVhZGIoYykgKHsgdW5zaWduZWQgaW50IF9fdiA9IF9fcmF3X3JlYWRiKF9fbWVtX3BjaShjKSk7IF9fdjsgfSkKKyNkZWZpbmUgcmVhZHcoYykgKHsgdW5zaWduZWQgaW50IF9fdiA9IGxlMTZfdG9fY3B1KF9fcmF3X3JlYWR3KF9fbWVtX3BjaShjKSkpOyBfX3Y7IH0pCisjZGVmaW5lIHJlYWRsKGMpICh7IHVuc2lnbmVkIGludCBfX3YgPSBsZTMyX3RvX2NwdShfX3Jhd19yZWFkbChfX21lbV9wY2koYykpKTsgX192OyB9KQorCisjZGVmaW5lIHdyaXRlYih2LGMpCQlfX3Jhd193cml0ZWIodixfX21lbV9wY2koYykpCisjZGVmaW5lIHdyaXRldyh2LGMpCQlfX3Jhd193cml0ZXcoY3B1X3RvX2xlMTYodiksX19tZW1fcGNpKGMpKQorI2RlZmluZSB3cml0ZWwodixjKQkJX19yYXdfd3JpdGVsKGNwdV90b19sZTMyKHYpLF9fbWVtX3BjaShjKSkKKworI2RlZmluZSBtZW1zZXRfaW8oYyx2LGwpCQlfbWVtc2V0X2lvKF9fbWVtX3BjaShjKSwodiksKGwpKQorI2RlZmluZSBtZW1jcHlfZnJvbWlvKGEsYyxsKQkJX21lbWNweV9mcm9taW8oKGEpLF9fbWVtX3BjaShjKSwobCkpCisjZGVmaW5lIG1lbWNweV90b2lvKGMsYSxsKQkJX21lbWNweV90b2lvKF9fbWVtX3BjaShjKSwoYSksKGwpKQorCisjZGVmaW5lIGV0aF9pb19jb3B5X2FuZF9zdW0ocyxjLGwsYikgXAorCQkJCWV0aF9jb3B5X2FuZF9zdW0oKHMpLF9fbWVtX3BjaShjKSwobCksKGIpKQorCitzdGF0aWMgaW5saW5lIGludAorY2hlY2tfc2lnbmF0dXJlKHVuc2lnbmVkIGxvbmcgaW9fYWRkciwgY29uc3QgdW5zaWduZWQgY2hhciAqc2lnbmF0dXJlLAorCQlpbnQgbGVuZ3RoKQoreworCWludCByZXR2YWwgPSAwOworCWRvIHsKKwkJaWYgKHJlYWRiKGlvX2FkZHIpICE9ICpzaWduYXR1cmUpCisJCQlnb3RvIG91dDsKKwkJaW9fYWRkcisrOworCQlzaWduYXR1cmUrKzsKKwkJbGVuZ3RoLS07CisJfSB3aGlsZSAobGVuZ3RoKTsKKwlyZXR2YWwgPSAxOworb3V0OgorCXJldHVybiByZXR2YWw7Cit9CisKKyNlbGlmICFkZWZpbmVkKHJlYWRiKQorCisjZGVmaW5lIHJlYWRiKGFkZHIpCV9fcmF3X3JlYWRiKGFkZHIpCisjZGVmaW5lIHJlYWR3KGFkZHIpCV9fcmF3X3JlYWR3KGFkZHIpCisjZGVmaW5lIHJlYWRsKGFkZHIpCV9fcmF3X3JlYWRsKGFkZHIpCisjZGVmaW5lIHdyaXRlYih2LGFkZHIpCV9fcmF3X3dyaXRlYih2LCBhZGRyKQorI2RlZmluZSB3cml0ZXcodixhZGRyKQlfX3Jhd193cml0ZXcodiwgYWRkcikKKyNkZWZpbmUgd3JpdGVsKHYsYWRkcikJX19yYXdfd3JpdGVsKHYsIGFkZHIpCisKKyNkZWZpbmUgY2hlY2tfc2lnbmF0dXJlKGlvLHNpZyxsZW4pCSgwKQorCisjZW5kaWYJLyogX19tZW1fcGNpICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzeW5jKHZvaWQpCit7Cit9CisjZW5kaWYJLyogX19LRVJORUxfXyAqLworI2VuZGlmCS8qIF9fQVNNX1NIX0lPX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2lycWZsYWdzLmggYi9pbmNsdWRlL2FzbS1zaC9pcnFmbGFncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzMGU1NDgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9pcnFmbGFncy5oCkBAIC0wLDAgKzEsMTI2IEBACisjaWZuZGVmIF9fQVNNX1NIX0lSUUZMQUdTX0gKKyNkZWZpbmUgX19BU01fU0hfSVJRRkxBR1NfSAorCitzdGF0aWMgaW5saW5lIHZvaWQgcmF3X2xvY2FsX2lycV9lbmFibGUodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIF9fZHVtbXkwLCBfX2R1bW15MTsKKworCV9fYXNtX18gX192b2xhdGlsZV9fICgKKwkJInN0YwlzciwgJTBcblx0IgorCQkiYW5kCSUxLCAlMFxuXHQiCisjaWZkZWYgQ09ORklHX0NQVV9IQVNfU1JfUkIKKwkJInN0YwlyNl9iYW5rLCAlMVxuXHQiCisJCSJvcgklMSwgJTBcblx0IgorI2VuZGlmCisJCSJsZGMJJTAsIHNyXG5cdCIKKwkJOiAiPSZyIiAoX19kdW1teTApLCAiPXIiIChfX2R1bW15MSkKKwkJOiAiMSIgKH4weDAwMDAwMGYwKQorCQk6ICJtZW1vcnkiCisJKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJhd19sb2NhbF9pcnFfZGlzYWJsZSh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisJCSJzdGMJc3IsICUwXG5cdCIKKwkJIm9yCSMweGYwLCAlMFxuXHQiCisJCSJsZGMJJTAsIHNyXG5cdCIKKwkJOiAiPSZ6IiAoZmxhZ3MpCisJCTogLyogbm8gaW5wdXRzICovCisJCTogIm1lbW9yeSIKKwkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2JsX2JpdCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgX19kdW1teTAsIF9fZHVtbXkxOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAorCQkic3RjCXNyLCAlMFxuXHQiCisJCSJvcgklMiwgJTBcblx0IgorCQkiYW5kCSUzLCAlMFxuXHQiCisJCSJsZGMJJTAsIHNyXG5cdCIKKwkJOiAiPSZyIiAoX19kdW1teTApLCAiPXIiIChfX2R1bW15MSkKKwkJOiAiciIgKDB4MTAwMDAwMDApLCAiciIgKDB4ZmZmZmZmMGYpCisJCTogIm1lbW9yeSIKKwkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfYmxfYml0KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBfX2R1bW15MCwgX19kdW1teTE7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisJCSJzdGMJc3IsICUwXG5cdCIKKwkJImFuZAklMiwgJTBcblx0IgorCQkibGRjCSUwLCBzclxuXHQiCisJCTogIj0mciIgKF9fZHVtbXkwKSwgIj1yIiAoX19kdW1teTEpCisJCTogIjEiICh+MHgxMDAwMDAwMCkKKwkJOiAibWVtb3J5IgorCSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX3Jhd19sb2NhbF9zYXZlX2ZsYWdzKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCV9fYXNtX18gX192b2xhdGlsZV9fICgKKwkJInN0YwlzciwgJTBcblx0IgorCQkiYW5kCSMweGYwLCAlMFxuXHQiCisJCTogIj0meiIgKGZsYWdzKQorCQk6IC8qIG5vIGlucHV0cyAqLworCQk6ICJtZW1vcnkiCisJKTsKKworCXJldHVybiBmbGFnczsKK30KKworI2RlZmluZSByYXdfbG9jYWxfc2F2ZV9mbGFncyhmbGFncykgXAorCQlkbyB7IChmbGFncykgPSBfX3Jhd19sb2NhbF9zYXZlX2ZsYWdzKCk7IH0gd2hpbGUgKDApCisKK3N0YXRpYyBpbmxpbmUgaW50IHJhd19pcnFzX2Rpc2FibGVkX2ZsYWdzKHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJcmV0dXJuIChmbGFncyAhPSAwKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgcmF3X2lycXNfZGlzYWJsZWQodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gX19yYXdfbG9jYWxfc2F2ZV9mbGFncygpOworCisJcmV0dXJuIHJhd19pcnFzX2Rpc2FibGVkX2ZsYWdzKGZsYWdzKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fcmF3X2xvY2FsX2lycV9zYXZlKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFncywgX19kdW1teTsKKworCV9fYXNtX18gX192b2xhdGlsZV9fICgKKwkJInN0YwlzciwgJTFcblx0IgorCQkibW92CSUxLCAlMFxuXHQiCisJCSJvcgkjMHhmMCwgJTBcblx0IgorCQkibGRjCSUwLCBzclxuXHQiCisJCSJtb3YJJTEsICUwXG5cdCIKKwkJImFuZAkjMHhmMCwgJTBcblx0IgorCQk6ICI9JnoiIChmbGFncyksICI9JnIiIChfX2R1bW15KQorCQk6IC8qIG5vIGlucHV0cyAqLworCQk6ICJtZW1vcnkiCisJKTsKKworCXJldHVybiBmbGFnczsKK30KKworI2RlZmluZSByYXdfbG9jYWxfaXJxX3NhdmUoZmxhZ3MpIFwKKwkJZG8geyAoZmxhZ3MpID0gX19yYXdfbG9jYWxfaXJxX3NhdmUoKTsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBsb2NhbF9pcnFfc2F2ZSByYXdfbG9jYWxfaXJxX3NhdmUKKworc3RhdGljIGlubGluZSB2b2lkIHJhd19sb2NhbF9pcnFfcmVzdG9yZSh1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCWlmICgoZmxhZ3MgJiAweGYwKSAhPSAweGYwKQorCQlyYXdfbG9jYWxfaXJxX2VuYWJsZSgpOworfQorI2RlZmluZSBsb2NhbF9pcnFfcmVzdG9yZSByYXdfbG9jYWxfaXJxX3Jlc3RvcmUKKworI2VuZGlmIC8qIF9fQVNNX1NIX0lSUUZMQUdTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL3Bvc2l4X3R5cGVzLmggYi9pbmNsdWRlL2FzbS1zaC9wb3NpeF90eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5ZDlmYjgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9wb3NpeF90eXBlcy5oCkBAIC0wLDAgKzEsMTIzIEBACisjaWZuZGVmIF9fQVNNX1NIX1BPU0lYX1RZUEVTX0gKKyNkZWZpbmUgX19BU01fU0hfUE9TSVhfVFlQRVNfSAorCisvKgorICogVGhpcyBmaWxlIGlzIGdlbmVyYWxseSB1c2VkIGJ5IHVzZXItbGV2ZWwgc29mdHdhcmUsIHNvIHlvdSBuZWVkIHRvCisgKiBiZSBhIGxpdHRsZSBjYXJlZnVsIGFib3V0IG5hbWVzcGFjZSBwb2xsdXRpb24gZXRjLiAgQWxzbywgd2UgY2Fubm90CisgKiBhc3N1bWUgR0NDIGlzIGJlaW5nIHVzZWQuCisgKi8KKwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCAgX19rZXJuZWxfZGV2X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcJX19rZXJuZWxfaW5vX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0CV9fa2VybmVsX21vZGVfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQJX19rZXJuZWxfbmxpbmtfdDsKK3R5cGVkZWYgbG9uZwkJX19rZXJuZWxfb2ZmX3Q7Cit0eXBlZGVmIGludAkJX19rZXJuZWxfcGlkX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0CV9fa2VybmVsX2lwY19waWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQJX19rZXJuZWxfdWlkX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0CV9fa2VybmVsX2dpZF90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQJX19rZXJuZWxfc2l6ZV90OwordHlwZWRlZiBpbnQJCV9fa2VybmVsX3NzaXplX3Q7Cit0eXBlZGVmIGludAkJX19rZXJuZWxfcHRyZGlmZl90OwordHlwZWRlZiBsb25nCQlfX2tlcm5lbF90aW1lX3Q7Cit0eXBlZGVmIGxvbmcJCV9fa2VybmVsX3N1c2Vjb25kc190OwordHlwZWRlZiBsb25nCQlfX2tlcm5lbF9jbG9ja190OwordHlwZWRlZiBpbnQJCV9fa2VybmVsX3RpbWVyX3Q7Cit0eXBlZGVmIGludAkJX19rZXJuZWxfY2xvY2tpZF90OwordHlwZWRlZiBpbnQJCV9fa2VybmVsX2RhZGRyX3Q7Cit0eXBlZGVmIGNoYXIgKgkJX19rZXJuZWxfY2FkZHJfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQJX19rZXJuZWxfdWlkMTZfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQJX19rZXJuZWxfZ2lkMTZfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50CV9fa2VybmVsX3VpZDMyX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludAlfX2tlcm5lbF9naWQzMl90OworCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0CV9fa2VybmVsX29sZF91aWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQJX19rZXJuZWxfb2xkX2dpZF90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydAlfX2tlcm5lbF9vbGRfZGV2X3Q7CisKKyNpZmRlZiBfX0dOVUNfXwordHlwZWRlZiBsb25nIGxvbmcJX19rZXJuZWxfbG9mZl90OworI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IHsKKyNpZiBkZWZpbmVkKF9fS0VSTkVMX18pIHx8IGRlZmluZWQoX19VU0VfQUxMKQorCWludAl2YWxbMl07CisjZWxzZSAvKiAhZGVmaW5lZChfX0tFUk5FTF9fKSAmJiAhZGVmaW5lZChfX1VTRV9BTEwpICovCisJaW50CV9fdmFsWzJdOworI2VuZGlmIC8qICFkZWZpbmVkKF9fS0VSTkVMX18pICYmICFkZWZpbmVkKF9fVVNFX0FMTCkgKi8KK30gX19rZXJuZWxfZnNpZF90OworCisjaWYgZGVmaW5lZChfX0tFUk5FTF9fKSB8fCAhZGVmaW5lZChfX0dMSUJDX18pIHx8IChfX0dMSUJDX18gPCAyKQorCisjdW5kZWYJX19GRF9TRVQKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19GRF9TRVQodW5zaWduZWQgbG9uZyBfX2ZkLCBfX2tlcm5lbF9mZF9zZXQgKl9fZmRzZXRwKQoreworCXVuc2lnbmVkIGxvbmcgX190bXAgPSBfX2ZkIC8gX19ORkRCSVRTOworCXVuc2lnbmVkIGxvbmcgX19yZW0gPSBfX2ZkICUgX19ORkRCSVRTOworCV9fZmRzZXRwLT5mZHNfYml0c1tfX3RtcF0gfD0gKDFVTDw8X19yZW0pOworfQorCisjdW5kZWYJX19GRF9DTFIKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19GRF9DTFIodW5zaWduZWQgbG9uZyBfX2ZkLCBfX2tlcm5lbF9mZF9zZXQgKl9fZmRzZXRwKQoreworCXVuc2lnbmVkIGxvbmcgX190bXAgPSBfX2ZkIC8gX19ORkRCSVRTOworCXVuc2lnbmVkIGxvbmcgX19yZW0gPSBfX2ZkICUgX19ORkRCSVRTOworCV9fZmRzZXRwLT5mZHNfYml0c1tfX3RtcF0gJj0gfigxVUw8PF9fcmVtKTsKK30KKworCisjdW5kZWYJX19GRF9JU1NFVAorc3RhdGljIF9faW5saW5lX18gaW50IF9fRkRfSVNTRVQodW5zaWduZWQgbG9uZyBfX2ZkLCBjb25zdCBfX2tlcm5lbF9mZF9zZXQgKl9fcCkKK3sKKwl1bnNpZ25lZCBsb25nIF9fdG1wID0gX19mZCAvIF9fTkZEQklUUzsKKwl1bnNpZ25lZCBsb25nIF9fcmVtID0gX19mZCAlIF9fTkZEQklUUzsKKwlyZXR1cm4gKF9fcC0+ZmRzX2JpdHNbX190bXBdICYgKDFVTDw8X19yZW0pKSAhPSAwOworfQorCisvKgorICogVGhpcyB3aWxsIHVucm9sbCB0aGUgbG9vcCBmb3IgdGhlIG5vcm1hbCBjb25zdGFudCBjYXNlICg4IGludHMsCisgKiBmb3IgYSAyNTYtYml0IGZkX3NldCkKKyAqLworI3VuZGVmCV9fRkRfWkVSTworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0ZEX1pFUk8oX19rZXJuZWxfZmRfc2V0ICpfX3ApCit7CisJdW5zaWduZWQgbG9uZyAqX190bXAgPSBfX3AtPmZkc19iaXRzOworCWludCBfX2k7CisKKwlpZiAoX19idWlsdGluX2NvbnN0YW50X3AoX19GRFNFVF9MT05HUykpIHsKKwkJc3dpdGNoIChfX0ZEU0VUX0xPTkdTKSB7CisJCWNhc2UgMTY6CisJCQlfX3RtcFsgMF0gPSAwOyBfX3RtcFsgMV0gPSAwOworCQkJX190bXBbIDJdID0gMDsgX190bXBbIDNdID0gMDsKKwkJCV9fdG1wWyA0XSA9IDA7IF9fdG1wWyA1XSA9IDA7CisJCQlfX3RtcFsgNl0gPSAwOyBfX3RtcFsgN10gPSAwOworCQkJX190bXBbIDhdID0gMDsgX190bXBbIDldID0gMDsKKwkJCV9fdG1wWzEwXSA9IDA7IF9fdG1wWzExXSA9IDA7CisJCQlfX3RtcFsxMl0gPSAwOyBfX3RtcFsxM10gPSAwOworCQkJX190bXBbMTRdID0gMDsgX190bXBbMTVdID0gMDsKKwkJCXJldHVybjsKKworCQljYXNlIDg6CisJCQlfX3RtcFsgMF0gPSAwOyBfX3RtcFsgMV0gPSAwOworCQkJX190bXBbIDJdID0gMDsgX190bXBbIDNdID0gMDsKKwkJCV9fdG1wWyA0XSA9IDA7IF9fdG1wWyA1XSA9IDA7CisJCQlfX3RtcFsgNl0gPSAwOyBfX3RtcFsgN10gPSAwOworCQkJcmV0dXJuOworCisJCWNhc2UgNDoKKwkJCV9fdG1wWyAwXSA9IDA7IF9fdG1wWyAxXSA9IDA7CisJCQlfX3RtcFsgMl0gPSAwOyBfX3RtcFsgM10gPSAwOworCQkJcmV0dXJuOworCQl9CisJfQorCV9faSA9IF9fRkRTRVRfTE9OR1M7CisJd2hpbGUgKF9faSkgeworCQlfX2ktLTsKKwkJKl9fdG1wID0gMDsKKwkJX190bXArKzsKKwl9Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkKF9fS0VSTkVMX18pIHx8ICFkZWZpbmVkKF9fR0xJQkNfXykgfHwgKF9fR0xJQkNfXyA8IDIpICovCisKKyNlbmRpZiAvKiBfX0FTTV9TSF9QT1NJWF9UWVBFU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9wcm9jZXNzb3IuaCBiL2luY2x1ZGUvYXNtLXNoL3Byb2Nlc3Nvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiOWEzNWYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9wcm9jZXNzb3IuaApAQCAtMCwwICsxLDggQEAKKyNpZm5kZWYgX0FTTV9TSF9QUk9DRVNTT1JfSF8KKyNkZWZpbmUgX0FTTV9TSF9QUk9DRVNTT1JfSF8KKyNpZiBkZWZpbmVkIENPTkZJR19TSDMKKyMgaW5jbHVkZSA8YXNtL2NwdV9zaDMuaD4KKyNlbGlmIGRlZmluZWQgKENPTkZJR19TSDQpCisjIGluY2x1ZGUgPGFzbS9jcHVfc2g0Lmg+CisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvcHRyYWNlLmggYi9pbmNsdWRlL2FzbS1zaC9wdHJhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGNjMWFjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvcHRyYWNlLmgKQEAgLTAsMCArMSwxMTIgQEAKKyNpZm5kZWYgX19BU01fU0hfUFRSQUNFX0gKKyNkZWZpbmUgX19BU01fU0hfUFRSQUNFX0gKKworLyoKKyAqIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCAgTmlpYmUgWXV0YWthCisgKiBmcm9tIGxpbnV4IGtlcm5lbCBjb2RlLgorICovCisKKy8qCisgKiBHQ0MgZGVmaW5lcyByZWdpc3RlciBudW1iZXIgbGlrZSB0aGlzOgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCSAwIC0gMTUgYXJlIGludGVnZXIgcmVnaXN0ZXJzCisgKgkxNyAtIDIyIGFyZSBjb250cm9sL3NwZWNpYWwgcmVnaXN0ZXJzCisgKgkyNCAtIDM5IGZwIHJlZ2lzdGVycworICoJNDAgLSA0NyB4ZCByZWdpc3RlcnMKKyAqCTQ4IC0gICAgZnBzY3IgcmVnaXN0ZXIKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogV2UgZm9sbG93cyBhYm92ZSwgZXhjZXB0OgorICoJMTYgLS0tIHByb2dyYW0gY291bnRlciAoUEMpCisgKgkyMiAtLS0gc3lzY2FsbCAjCisgKgkyMyAtLS0gZmxvYXRpbmcgcG9pbnQgY29tbXVuaWNhdGlvbiByZWdpc3RlcgorICovCisjZGVmaW5lIFJFR19SRUcwCSAwCisjZGVmaW5lIFJFR19SRUcxNQkxNQorCisjZGVmaW5lIFJFR19QQwkJMTYKKworI2RlZmluZSBSRUdfUFIJCTE3CisjZGVmaW5lIFJFR19TUgkJMTgKKyNkZWZpbmUgUkVHX0dCUiAgICAgIAkxOQorI2RlZmluZSBSRUdfTUFDSAkyMAorI2RlZmluZSBSRUdfTUFDTAkyMQorCisjZGVmaW5lIFJFR19TWVNDQUxMCTIyCisKKyNkZWZpbmUgUkVHX0ZQUkVHMAkyMworI2RlZmluZSBSRUdfRlBSRUcxNQkzOAorI2RlZmluZSBSRUdfWEZSRUcwCTM5CisjZGVmaW5lIFJFR19YRlJFRzE1CTU0CisKKyNkZWZpbmUgUkVHX0ZQU0NSCTU1CisjZGVmaW5lIFJFR19GUFVMCTU2CisKKy8qIG9wdGlvbnMgc2V0IHVzaW5nIFBUUkFDRV9TRVRPUFRJT05TICovCisjZGVmaW5lIFBUUkFDRV9PX1RSQUNFU1lTR09PRCAgICAgMHgwMDAwMDAwMQorCisvKgorICogVGhpcyBzdHJ1Y3QgZGVmaW5lcyB0aGUgd2F5IHRoZSByZWdpc3RlcnMgYXJlIHN0b3JlZCBvbiB0aGUKKyAqIGtlcm5lbCBzdGFjayBkdXJpbmcgYSBzeXN0ZW0gY2FsbCBvciBvdGhlciBrZXJuZWwgZW50cnkuCisgKi8KK3N0cnVjdCBwdF9yZWdzIHsKKwl1bnNpZ25lZCBsb25nIHJlZ3NbMTZdOworCXVuc2lnbmVkIGxvbmcgcGM7CisJdW5zaWduZWQgbG9uZyBwcjsKKwl1bnNpZ25lZCBsb25nIHNyOworCXVuc2lnbmVkIGxvbmcgZ2JyOworCXVuc2lnbmVkIGxvbmcgbWFjaDsKKwl1bnNpZ25lZCBsb25nIG1hY2w7CisJbG9uZyB0cmE7Cit9OworCisvKgorICogVGhpcyBzdHJ1Y3QgZGVmaW5lcyB0aGUgd2F5IHRoZSBEU1AgcmVnaXN0ZXJzIGFyZSBzdG9yZWQgb24gdGhlCisgKiBrZXJuZWwgc3RhY2sgZHVyaW5nIGEgc3lzdGVtIGNhbGwgb3Igb3RoZXIga2VybmVsIGVudHJ5LgorICovCitzdHJ1Y3QgcHRfZHNwcmVncyB7CisJdW5zaWduZWQgbG9uZwlhMTsKKwl1bnNpZ25lZCBsb25nCWEwZzsKKwl1bnNpZ25lZCBsb25nCWExZzsKKwl1bnNpZ25lZCBsb25nCW0wOworCXVuc2lnbmVkIGxvbmcJbTE7CisJdW5zaWduZWQgbG9uZwlhMDsKKwl1bnNpZ25lZCBsb25nCXgwOworCXVuc2lnbmVkIGxvbmcJeDE7CisJdW5zaWduZWQgbG9uZwl5MDsKKwl1bnNpZ25lZCBsb25nCXkxOworCXVuc2lnbmVkIGxvbmcJZHNyOworCXVuc2lnbmVkIGxvbmcJcnM7CisJdW5zaWduZWQgbG9uZwlyZTsKKwl1bnNpZ25lZCBsb25nCW1vZDsKK307CisKKyNkZWZpbmUJUFRSQUNFX0dFVERTUFJFR1MJNTUKKyNkZWZpbmUJUFRSQUNFX1NFVERTUFJFR1MJNTYKKworI2lmZGVmIF9fS0VSTkVMX18KKyNkZWZpbmUgdXNlcl9tb2RlKHJlZ3MpICgoKHJlZ3MpLT5zciAmIDB4NDAwMDAwMDApPT0wKQorI2RlZmluZSBpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpICgocmVncyktPnBjKQorZXh0ZXJuIHZvaWQgc2hvd19yZWdzKHN0cnVjdCBwdF9yZWdzICopOworCisjaWZkZWYgQ09ORklHX1NIX0RTUAorI2RlZmluZSB0YXNrX3B0X3JlZ3ModGFzaykgXAorCSgoc3RydWN0IHB0X3JlZ3MgKikgKHRhc2tfc3RhY2tfcGFnZSh0YXNrKSArIFRIUkVBRF9TSVpFIFwKKwkJIC0gc2l6ZW9mKHN0cnVjdCBwdF9kc3ByZWdzKSAtIHNpemVvZih1bnNpZ25lZCBsb25nKSkgLSAxKQorI2Vsc2UKKyNkZWZpbmUgdGFza19wdF9yZWdzKHRhc2spIFwKKwkoKHN0cnVjdCBwdF9yZWdzICopICh0YXNrX3N0YWNrX3BhZ2UodGFzaykgKyBUSFJFQURfU0laRSBcCisJCSAtIHNpemVvZih1bnNpZ25lZCBsb25nKSkgLSAxKQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwcm9maWxlX3BjKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXVuc2lnbmVkIGxvbmcgcGMgPSBpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpOworCisJaWYgKHBjID49IDB4YTAwMDAwMDBVTCAmJiBwYyA8IDB4YzAwMDAwMDBVTCkKKwkJcGMgLT0gMHgyMDAwMDAwMDsKKwlyZXR1cm4gcGM7Cit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9fQVNNX1NIX1BUUkFDRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9zdHJpbmcuaCBiL2luY2x1ZGUvYXNtLXNoL3N0cmluZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3ZDk4MWIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9zdHJpbmcuaApAQCAtMCwwICsxLDE2MiBAQAorI2lmbmRlZiBfX0FTTV9TSF9TVFJJTkdfSAorI2RlZmluZSBfX0FTTV9TSF9TVFJJTkdfSAorCisvKgorICogQ29weXJpZ2h0IChDKSAxOTk5IE5paWJlIFl1dGFrYQorICogQnV0IGNvbnNpZGVyIHRoZXNlIHRyaXZpYWwgZnVuY3Rpb25zIHRvIGJlIHB1YmxpYyBkb21haW4uCisgKgorICogZnJvbSBsaW51eCBrZXJuZWwgY29kZS4KKyAqLworCisjaWZkZWYgX19LRVJORUxfXyAgICAgICAgICAgICAgIC8qIG9ubHkgc2V0IHRoZXNlIHVwIGZvciBrZXJuZWwgY29kZSAqLworCisjZGVmaW5lIF9fSEFWRV9BUkNIX1NUUkNQWQorc3RhdGljIGlubGluZSBjaGFyICpzdHJjcHkoY2hhciAqX19kZXN0LCBjb25zdCBjaGFyICpfX3NyYykKK3sKKwlyZWdpc3RlciBjaGFyICpfX3hkZXN0ID0gX19kZXN0OworCXVuc2lnbmVkIGxvbmcgX19kdW1teTsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKCIxOlxuXHQiCisJCQkgICAgICJtb3YuYglAJTErLCAlMlxuXHQiCisJCQkgICAgICJtb3YuYgklMiwgQCUwXG5cdCIKKwkJCSAgICAgImNtcC9lcQkjMCwgJTJcblx0IgorCQkJICAgICAiYmYvcwkxYlxuXHQiCisJCQkgICAgICIgYWRkCSMxLCAlMFxuXHQiCisJCQkgICAgIDogIj1yIiAoX19kZXN0KSwgIj1yIiAoX19zcmMpLCAiPSZ6IiAoX19kdW1teSkKKwkJCSAgICAgOiAiMCIgKF9fZGVzdCksICIxIiAoX19zcmMpCisJCQkgICAgIDogIm1lbW9yeSIsICJ0Iik7CisKKwlyZXR1cm4gX194ZGVzdDsKK30KKworI2RlZmluZSBfX0hBVkVfQVJDSF9TVFJOQ1BZCitzdGF0aWMgaW5saW5lIGNoYXIgKnN0cm5jcHkoY2hhciAqX19kZXN0LCBjb25zdCBjaGFyICpfX3NyYywgc2l6ZV90IF9fbikKK3sKKwlyZWdpc3RlciBjaGFyICpfX3hkZXN0ID0gX19kZXN0OworCXVuc2lnbmVkIGxvbmcgX19kdW1teTsKKworCWlmIChfX24gPT0gMCkKKwkJcmV0dXJuIF9feGRlc3Q7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJIjE6XG4iCisJCSJtb3YuYglAJTErLCAlMlxuXHQiCisJCSJtb3YuYgklMiwgQCUwXG5cdCIKKwkJImNtcC9lcQkjMCwgJTJcblx0IgorCQkiYnQvcwkyZlxuXHQiCisJCSIgY21wL2VxCSU1LCUxXG5cdCIKKwkJImJmL3MJMWJcblx0IgorCQkiIGFkZAkjMSwgJTBcbiIKKwkJIjI6IgorCQk6ICI9ciIgKF9fZGVzdCksICI9ciIgKF9fc3JjKSwgIj0meiIgKF9fZHVtbXkpCisJCTogIjAiIChfX2Rlc3QpLCAiMSIgKF9fc3JjKSwgInIiIChfX3NyYytfX24pCisJCTogIm1lbW9yeSIsICJ0Iik7CisKKwlyZXR1cm4gX194ZGVzdDsKK30KKworI2RlZmluZSBfX0hBVkVfQVJDSF9TVFJDTVAKK3N0YXRpYyBpbmxpbmUgaW50IHN0cmNtcChjb25zdCBjaGFyICpfX2NzLCBjb25zdCBjaGFyICpfX2N0KQoreworCXJlZ2lzdGVyIGludCBfX3JlczsKKwl1bnNpZ25lZCBsb25nIF9fZHVtbXk7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJIm1vdi5iCUAlMSssICUzXG4iCisJCSIxOlxuXHQiCisJCSJtb3YuYglAJTArLCAlMlxuXHQiCisJCSJjbXAvZXEgIzAsICUzXG5cdCIKKwkJImJ0CTJmXG5cdCIKKwkJImNtcC9lcSAlMiwgJTNcblx0IgorCQkiYnQvcwkxYlxuXHQiCisJCSIgbW92LmIJQCUxKywgJTNcblx0IgorCQkiYWRkCSMtMiwgJTFcblx0IgorCQkibW92LmIJQCUxLCAlM1xuXHQiCisJCSJzdWIJJTMsICUyXG4iCisJCSIyOiIKKwkJOiAiPXIiIChfX2NzKSwgIj1yIiAoX19jdCksICI9JnIiIChfX3JlcyksICI9JnoiIChfX2R1bW15KQorCQk6ICIwIiAoX19jcyksICIxIiAoX19jdCkKKwkJOiAidCIpOworCisJcmV0dXJuIF9fcmVzOworfQorCisjZGVmaW5lIF9fSEFWRV9BUkNIX1NUUk5DTVAKK3N0YXRpYyBpbmxpbmUgaW50IHN0cm5jbXAoY29uc3QgY2hhciAqX19jcywgY29uc3QgY2hhciAqX19jdCwgc2l6ZV90IF9fbikKK3sKKwlyZWdpc3RlciBpbnQgX19yZXM7CisJdW5zaWduZWQgbG9uZyBfX2R1bW15OworCisJaWYgKF9fbiA9PSAwKQorCQlyZXR1cm4gMDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkibW92LmIJQCUxKywgJTNcbiIKKwkJIjE6XG5cdCIKKwkJIm1vdi5iCUAlMCssICUyXG5cdCIKKwkJImNtcC9lcSAlNiwgJTBcblx0IgorCQkiYnQvcwkyZlxuXHQiCisJCSIgY21wL2VxICMwLCAlM1xuXHQiCisJCSJidC9zCTNmXG5cdCIKKwkJIiBjbXAvZXEgJTMsICUyXG5cdCIKKwkJImJ0L3MJMWJcblx0IgorCQkiIG1vdi5iCUAlMSssICUzXG5cdCIKKwkJImFkZAkjLTIsICUxXG5cdCIKKwkJIm1vdi5iCUAlMSwgJTNcbiIKKwkJIjI6XG5cdCIKKwkJInN1YgklMywgJTJcbiIKKwkJIjM6IgorCQk6Ij1yIiAoX19jcyksICI9ciIgKF9fY3QpLCAiPSZyIiAoX19yZXMpLCAiPSZ6IiAoX19kdW1teSkKKwkJOiAiMCIgKF9fY3MpLCAiMSIgKF9fY3QpLCAiciIgKF9fY3MrX19uKQorCQk6ICJ0Iik7CisKKwlyZXR1cm4gX19yZXM7Cit9CisKKyN1bmRlZiBfX0hBVkVfQVJDSF9NRU1TRVQKK2V4dGVybiB2b2lkICptZW1zZXQodm9pZCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19jb3VudCk7CisKKyN1bmRlZiBfX0hBVkVfQVJDSF9NRU1DUFkKK2V4dGVybiB2b2lkICptZW1jcHkodm9pZCAqX190bywgX19jb25zdF9fIHZvaWQgKl9fZnJvbSwgc2l6ZV90IF9fbik7CisKKyN1bmRlZiBfX0hBVkVfQVJDSF9NRU1NT1ZFCitleHRlcm4gdm9pZCAqbWVtbW92ZSh2b2lkICpfX2Rlc3QsIF9fY29uc3RfXyB2b2lkICpfX3NyYywgc2l6ZV90IF9fbik7CisKKyN1bmRlZiBfX0hBVkVfQVJDSF9NRU1DSFIKK2V4dGVybiB2b2lkICptZW1jaHIoY29uc3Qgdm9pZCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19uKTsKKworI3VuZGVmIF9fSEFWRV9BUkNIX1NUUkxFTgorZXh0ZXJuIHNpemVfdCBzdHJsZW4oY29uc3QgY2hhciAqKTsKKworLyogYXJjaC9zaC9saWIvc3RyY2FzZWNtcC5jICovCitleHRlcm4gaW50IHN0cmNhc2VjbXAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworCisjZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEtFUk5FTCAqLworCisvKgorICogbGV0IHVzZXIgbGlicmFyaWVzIGRlYWwgd2l0aCB0aGVzZSwKKyAqIElNSE8gdGhlIGtlcm5lbCBoYXMgbm8gcGxhY2UgZGVmaW5pbmcgdGhlc2UgZnVuY3Rpb25zIGZvciB1c2VyIGFwcHMKKyAqLworCisjZGVmaW5lIF9fSEFWRV9BUkNIX1NUUkNQWSAgICAgIDEKKyNkZWZpbmUgX19IQVZFX0FSQ0hfU1RSTkNQWSAgICAgMQorI2RlZmluZSBfX0hBVkVfQVJDSF9TVFJDQVQgICAgICAxCisjZGVmaW5lIF9fSEFWRV9BUkNIX1NUUk5DQVQgICAgIDEKKyNkZWZpbmUgX19IQVZFX0FSQ0hfU1RSQ01QICAgICAgMQorI2RlZmluZSBfX0hBVkVfQVJDSF9TVFJOQ01QICAgICAxCisjZGVmaW5lIF9fSEFWRV9BUkNIX1NUUk5JQ01QICAgIDEKKyNkZWZpbmUgX19IQVZFX0FSQ0hfU1RSQ0hSICAgICAgMQorI2RlZmluZSBfX0hBVkVfQVJDSF9TVFJSQ0hSICAgICAxCisjZGVmaW5lIF9fSEFWRV9BUkNIX1NUUlNUUiAgICAgIDEKKyNkZWZpbmUgX19IQVZFX0FSQ0hfU1RSTEVOICAgICAgMQorI2RlZmluZSBfX0hBVkVfQVJDSF9TVFJOTEVOICAgICAxCisjZGVmaW5lIF9fSEFWRV9BUkNIX01FTVNFVCAgICAgIDEKKyNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNQ1BZICAgICAgMQorI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1NT1ZFICAgICAxCisjZGVmaW5lIF9fSEFWRV9BUkNIX01FTVNDQU4gICAgIDEKKyNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNQ01QICAgICAgMQorI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1DSFIgICAgICAxCisjZGVmaW5lIF9fSEFWRV9BUkNIX1NUUlRPSyAgICAgIDEKKworI2VuZGlmIC8qIEtFUk5FTCAqLworI2VuZGlmIC8qIF9fQVNNX1NIX1NUUklOR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLXNoL3N5c3RlbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzNTNiYzUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9zeXN0ZW0uaApAQCAtMCwwICsxLDI3NSBAQAorI2lmbmRlZiBfX0FTTV9TSF9TWVNURU1fSAorI2RlZmluZSBfX0FTTV9TSF9TWVNURU1fSAorCisvKgorICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwICBOaWliZSBZdXRha2EgICYgIEtheiBLb2ppbWEKKyAqIENvcHlyaWdodCAoQykgMjAwMiBQYXVsIE11bmR0CisgKgorICogZnJvbSBsaW51eCBrZXJuZWwgY29kZS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaXJxZmxhZ3MuaD4KKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKworLyoKKyAqCXN3aXRjaF90bygpIHNob3VsZCBzd2l0Y2ggdGFza3MgdG8gdGFzayBuciBuLCBmaXJzdAorICovCisKKyNkZWZpbmUgc3dpdGNoX3RvKHByZXYsIG5leHQsIGxhc3QpIGRvIHsJCQkJXAorIHN0cnVjdCB0YXNrX3N0cnVjdCAqX19sYXN0OwkJCQkJCVwKKyByZWdpc3RlciB1bnNpZ25lZCBsb25nICpfX3RzMSBfX2FzbV9fICgicjEiKSA9ICZwcmV2LT50aHJlYWQuc3A7CVwKKyByZWdpc3RlciB1bnNpZ25lZCBsb25nICpfX3RzMiBfX2FzbV9fICgicjIiKSA9ICZwcmV2LT50aHJlYWQucGM7CVwKKyByZWdpc3RlciB1bnNpZ25lZCBsb25nICpfX3RzNCBfX2FzbV9fICgicjQiKSA9ICh1bnNpZ25lZCBsb25nICopcHJldjsJXAorIHJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgKl9fdHM1IF9fYXNtX18gKCJyNSIpID0gKHVuc2lnbmVkIGxvbmcgKiluZXh0OwlcCisgcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyAqX190czYgX19hc21fXyAoInI2IikgPSAmbmV4dC0+dGhyZWFkLnNwOwlcCisgcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX3RzNyBfX2FzbV9fICgicjciKSA9IG5leHQtPnRocmVhZC5wYzsJCVwKKyBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIi5iYWxpZ24gNFxuXHQiIAkJCQkJXAorCQkgICAgICAgInN0Yy5sCWdiciwgQC1yMTVcblx0IiAJCQlcCisJCSAgICAgICAic3RzLmwJcHIsIEAtcjE1XG5cdCIgCQkJCVwKKwkJICAgICAgICJtb3YubAlyOCwgQC1yMTVcblx0IiAJCQkJXAorCQkgICAgICAgIm1vdi5sCXI5LCBALXIxNVxuXHQiIAkJCQlcCisJCSAgICAgICAibW92LmwJcjEwLCBALXIxNVxuXHQiIAkJCVwKKwkJICAgICAgICJtb3YubAlyMTEsIEAtcjE1XG5cdCIgCQkJXAorCQkgICAgICAgIm1vdi5sCXIxMiwgQC1yMTVcblx0IiAJCQlcCisJCSAgICAgICAibW92LmwJcjEzLCBALXIxNVxuXHQiIAkJCVwKKwkJICAgICAgICJtb3YubAlyMTQsIEAtcjE1XG5cdCIgCQkJXAorCQkgICAgICAgIm1vdi5sCXIxNSwgQHIxCSEgc2F2ZSBTUFxuXHQiCQlcCisJCSAgICAgICAibW92LmwJQHI2LCByMTUJISBjaGFuZ2UgdG8gbmV3IHN0YWNrXG5cdCIgXAorCQkgICAgICAgIm1vdmEJMWYsICUwXG5cdCIgCQkJCVwKKwkJICAgICAgICJtb3YubAklMCwgQHIyCQkhIHNhdmUgUENcblx0IiAJCVwKKwkJICAgICAgICJtb3YubAkyZiwgJTBcblx0IiAJCQkJXAorCQkgICAgICAgImptcAlAJTAJCSEgY2FsbCBfX3N3aXRjaF90b1xuXHQiIFwKKwkJICAgICAgICIgbGRzCXI3LCBwcgkJISAgd2l0aCByZXR1cm4gdG8gbmV3IFBDXG5cdCIgXAorCQkgICAgICAgIi5iYWxpZ24JNFxuIgkJCQkJXAorCQkgICAgICAgIjI6XG5cdCIJCQkJCQlcCisJCSAgICAgICAiLmxvbmcJX19zd2l0Y2hfdG9cbiIJCQkJXAorCQkgICAgICAgIjE6XG5cdCIJCQkJCQlcCisJCSAgICAgICAibW92LmwJQHIxNSssIHIxNFxuXHQiCQkJCVwKKwkJICAgICAgICJtb3YubAlAcjE1KywgcjEzXG5cdCIJCQkJXAorCQkgICAgICAgIm1vdi5sCUByMTUrLCByMTJcblx0IgkJCQlcCisJCSAgICAgICAibW92LmwJQHIxNSssIHIxMVxuXHQiCQkJCVwKKwkJICAgICAgICJtb3YubAlAcjE1KywgcjEwXG5cdCIJCQkJXAorCQkgICAgICAgIm1vdi5sCUByMTUrLCByOVxuXHQiCQkJCVwKKwkJICAgICAgICJtb3YubAlAcjE1Kywgcjhcblx0IgkJCQlcCisJCSAgICAgICAibGRzLmwJQHIxNSssIHByXG5cdCIJCQkJXAorCQkgICAgICAgImxkYy5sCUByMTUrLCBnYnJcblx0IgkJCQlcCisJCSAgICAgICA6ICI9eiIgKF9fbGFzdCkJCQkJCVwKKwkJICAgICAgIDogInIiIChfX3RzMSksICJyIiAoX190czIpLCAiciIgKF9fdHM0KSwgCVwKKwkJCSAiciIgKF9fdHM1KSwgInIiIChfX3RzNiksICJyIiAoX190czcpIAkJXAorCQkgICAgICAgOiAicjMiLCAidCIpOwkJCQkJXAorCWxhc3QgPSBfX2xhc3Q7CQkJCQkJCVwKK30gd2hpbGUgKDApCisKKy8qCisgKiBPbiBTTVAgc3lzdGVtcywgd2hlbiB0aGUgc2NoZWR1bGVyIGRvZXMgbWlncmF0aW9uLWNvc3QgYXV0b2RldGVjdGlvbiwKKyAqIGl0IG5lZWRzIGEgd2F5IHRvIGZsdXNoIGFzIG11Y2ggb2YgdGhlIENQVSdzIGNhY2hlcyBhcyBwb3NzaWJsZS4KKyAqCisgKiBUT0RPOiBmaWxsIHRoaXMgaW4hCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBzY2hlZF9jYWNoZWZsdXNoKHZvaWQpCit7Cit9CisKKyNpZmRlZiBDT05GSUdfQ1BVX1NINEEKKyNkZWZpbmUgX19pY2JpKCkJCQlcCit7CQkJCQlcCisJdW5zaWduZWQgbG9uZyBfX2FkZHI7CQlcCisJX19hZGRyID0gMHhhODAwMDAwMDsJCVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCVwKKwkJImljYmkgICAlMFxuXHQiCQlcCisJCTogLyogbm8gb3V0cHV0ICovCVwKKwkJOiAibSIgKF9fbShfX2FkZHIpKSk7CVwKK30KKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdGFzKHZvbGF0aWxlIGludCAqbSkKK3sKKwl1bnNpZ25lZCBsb25nIHJldHZhbDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fICgidGFzLmIJQCUxXG5cdCIKKwkJCSAgICAgICJtb3Z0CSUwIgorCQkJICAgICAgOiAiPXIiIChyZXR2YWwpOiAiciIgKG0pOiAidCIsICJtZW1vcnkiKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKgorICogQSBicmllZiBub3RlIG9uIGN0cmxfYmFycmllcigpLCB0aGUgY29udHJvbCByZWdpc3RlciB3cml0ZSBiYXJyaWVyLgorICoKKyAqIExlZ2FjeSBTSCBjb3JlcyB0eXBpY2FsbHkgcmVxdWlyZSBhIHNlcXVlbmNlIG9mIDggbm9wcyBhZnRlcgorICogbW9kaWZpY2F0aW9uIG9mIGEgY29udHJvbCByZWdpc3RlciBpbiBvcmRlciBmb3IgdGhlIGNoYW5nZXMgdG8gdGFrZQorICogZWZmZWN0LiBPbiBuZXdlciBjb3JlcyAobGlrZSB0aGUgc2g0YSBhbmQgc2g1KSB0aGlzIGlzIGFjY29tcGxpc2hlZAorICogd2l0aCBpY2JpLgorICoKKyAqIEFsc28gbm90ZSB0aGF0IG9uIHNoNGEgaW4gdGhlIGljYmkgY2FzZSB3ZSBjYW4gZm9yZWdvIGEgc3luY28gZm9yIHRoZQorICogd3JpdGUgYmFycmllciwgYXMgaXQncyBub3QgbmVjZXNzYXJ5IGZvciBjb250cm9sIHJlZ2lzdGVycy4KKyAqCisgKiBIaXN0b3JpY2FsbHkgd2UgaGF2ZSBvbmx5IGRvbmUgdGhpcyB0eXBlIG9mIGJhcnJpZXIgZm9yIHRoZSBNTVVDUiwgYnV0CisgKiBpdCdzIGFsc28gbmVjZXNzYXJ5IGZvciB0aGUgQ0NSLCBzbyB3ZSBtYWtlIGl0IGdlbmVyaWMgaGVyZSBpbnN0ZWFkLgorICovCisjaWZkZWYgQ09ORklHX0NQVV9TSDRBCisjZGVmaW5lIG1iKCkJCV9fYXNtX18gX192b2xhdGlsZV9fICgic3luY28iOiA6IDoibWVtb3J5IikKKyNkZWZpbmUgcm1iKCkJCW1iKCkKKyNkZWZpbmUgd21iKCkJCV9fYXNtX18gX192b2xhdGlsZV9fICgic3luY28iOiA6IDoibWVtb3J5IikKKyNkZWZpbmUgY3RybF9iYXJyaWVyKCkJX19pY2JpKCkKKyNkZWZpbmUgcmVhZF9iYXJyaWVyX2RlcGVuZHMoKQlkbyB7IH0gd2hpbGUoMCkKKyNlbHNlCisjZGVmaW5lIG1iKCkJCV9fYXNtX18gX192b2xhdGlsZV9fICgiIjogOiA6Im1lbW9yeSIpCisjZGVmaW5lIHJtYigpCQltYigpCisjZGVmaW5lIHdtYigpCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIiI6IDogOiJtZW1vcnkiKQorI2RlZmluZSBjdHJsX2JhcnJpZXIoKQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm5vcDtub3A7bm9wO25vcDtub3A7bm9wO25vcDtub3AiKQorI2RlZmluZSByZWFkX2JhcnJpZXJfZGVwZW5kcygpCWRvIHsgfSB3aGlsZSgwKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfU01QCisjZGVmaW5lIHNtcF9tYigpCW1iKCkKKyNkZWZpbmUgc21wX3JtYigpCXJtYigpCisjZGVmaW5lIHNtcF93bWIoKQl3bWIoKQorI2RlZmluZSBzbXBfcmVhZF9iYXJyaWVyX2RlcGVuZHMoKQlyZWFkX2JhcnJpZXJfZGVwZW5kcygpCisjZWxzZQorI2RlZmluZSBzbXBfbWIoKQliYXJyaWVyKCkKKyNkZWZpbmUgc21wX3JtYigpCWJhcnJpZXIoKQorI2RlZmluZSBzbXBfd21iKCkJYmFycmllcigpCisjZGVmaW5lIHNtcF9yZWFkX2JhcnJpZXJfZGVwZW5kcygpCWRvIHsgfSB3aGlsZSgwKQorI2VuZGlmCisKKyNkZWZpbmUgc2V0X21iKHZhciwgdmFsdWUpIGRvIHsgeGNoZygmdmFyLCB2YWx1ZSk7IH0gd2hpbGUgKDApCisKKy8qCisgKiBKdW1wIHRvIFAyIGFyZWEuCisgKiBXaGVuIGhhbmRsaW5nIFRMQiBvciBjYWNoZXMsIHdlIG5lZWQgdG8gZG8gaXQgZnJvbSBQMiBhcmVhLgorICovCisjZGVmaW5lIGp1bXBfdG9fUDIoKQkJCVwKK2RvIHsJCQkJCVwKKwl1bnNpZ25lZCBsb25nIF9fZHVtbXk7CQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCQlcCisJCSJtb3YubAkxZiwgJTBcblx0IglcCisJCSJvcgklMSwgJTBcblx0IglcCisJCSJqbXAJQCUwXG5cdCIJXAorCQkiIG5vcFxuXHQiIAkJXAorCQkiLmJhbGlnbiA0XG4iCQlcCisJCSIxOgkubG9uZyAyZlxuIglcCisJCSIyOiIJCQlcCisJCTogIj0mciIgKF9fZHVtbXkpCVwKKwkJOiAiciIgKDB4MjAwMDAwMDApKTsJXAorfSB3aGlsZSAoMCkKKworLyoKKyAqIEJhY2sgdG8gUDEgYXJlYS4KKyAqLworI2RlZmluZSBiYWNrX3RvX1AxKCkJCQkJCVwKK2RvIHsJCQkJCQkJXAorCXVuc2lnbmVkIGxvbmcgX19kdW1teTsJCQkJXAorCWN0cmxfYmFycmllcigpOwkJCQkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQlcCisJCSJtb3YubAkxZiwgJTBcblx0IgkJCVwKKwkJImptcAlAJTBcblx0IgkJCVwKKwkJIiBub3Bcblx0IgkJCQlcCisJCSIuYmFsaWduIDRcbiIJCQkJXAorCQkiMToJLmxvbmcgMmZcbiIJCQlcCisJCSIyOiIJCQkJCVwKKwkJOiAiPSZyIiAoX19kdW1teSkpOwkJCVwKK30gd2hpbGUgKDApCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB4Y2hnX3UzMih2b2xhdGlsZSB1MzIgKm0sIHVuc2lnbmVkIGxvbmcgdmFsKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHJldHZhbDsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlyZXR2YWwgPSAqbTsKKwkqbSA9IHZhbDsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHhjaGdfdTgodm9sYXRpbGUgdTggKm0sIHVuc2lnbmVkIGxvbmcgdmFsKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHJldHZhbDsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlyZXR2YWwgPSAqbTsKKwkqbSA9IHZhbCAmIDB4ZmY7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCXJldHVybiByZXR2YWw7Cit9CisKK2V4dGVybiB2b2lkIF9feGNoZ19jYWxsZWRfd2l0aF9iYWRfcG9pbnRlcih2b2lkKTsKKworI2RlZmluZSBfX3hjaGcocHRyLCB4LCBzaXplKQkJCQlcCisoewkJCQkJCQlcCisJdW5zaWduZWQgbG9uZyBfX3hjaGdfX3JlczsJCQlcCisJdm9sYXRpbGUgdm9pZCAqX194Y2hnX3B0ciA9IChwdHIpOwkJXAorCXN3aXRjaCAoc2l6ZSkgewkJCQkJXAorCWNhc2UgNDoJCQkJCQlcCisJCV9feGNoZ19fcmVzID0geGNoZ191MzIoX194Y2hnX3B0ciwgeCk7CVwKKwkJYnJlYWs7CQkJCQlcCisJY2FzZSAxOgkJCQkJCVwKKwkJX194Y2hnX19yZXMgPSB4Y2hnX3U4KF9feGNoZ19wdHIsIHgpOwlcCisJCWJyZWFrOwkJCQkJXAorCWRlZmF1bHQ6CQkJCQlcCisJCV9feGNoZ19jYWxsZWRfd2l0aF9iYWRfcG9pbnRlcigpOwlcCisJCV9feGNoZ19fcmVzID0geDsJCQlcCisJCWJyZWFrOwkJCQkJXAorCX0JCQkJCQlcCisJCQkJCQkJXAorCV9feGNoZ19fcmVzOwkJCQkJXAorfSkKKworI2RlZmluZSB4Y2hnKHB0cix4KQlcCisJKChfX3R5cGVvZl9fKCoocHRyKSkpX194Y2hnKChwdHIpLCh1bnNpZ25lZCBsb25nKSh4KSwgc2l6ZW9mKCoocHRyKSkpKQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19jbXB4Y2hnX3UzMih2b2xhdGlsZSBpbnQgKiBtLCB1bnNpZ25lZCBsb25nIG9sZCwKKwl1bnNpZ25lZCBsb25nIG5ldykKK3sKKwlfX3UzMiByZXR2YWw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlyZXR2YWwgPSAqbTsKKwlpZiAocmV0dmFsID09IG9sZCkKKwkJKm0gPSBuZXc7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOyAgICAgICAvKiBpbXBsaWVzIG1lbW9yeSBiYXJyaWVyICAqLworCXJldHVybiByZXR2YWw7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gZG9lc24ndCBleGlzdCwgc28geW91J2xsIGdldCBhIGxpbmtlciBlcnJvcgorICogaWYgc29tZXRoaW5nIHRyaWVzIHRvIGRvIGFuIGludmFsaWQgY21weGNoZygpLiAqLworZXh0ZXJuIHZvaWQgX19jbXB4Y2hnX2NhbGxlZF93aXRoX2JhZF9wb2ludGVyKHZvaWQpOworCisjZGVmaW5lIF9fSEFWRV9BUkNIX0NNUFhDSEcgMQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19jbXB4Y2hnKHZvbGF0aWxlIHZvaWQgKiBwdHIsIHVuc2lnbmVkIGxvbmcgb2xkLAorCQl1bnNpZ25lZCBsb25nIG5ldywgaW50IHNpemUpCit7CisJc3dpdGNoIChzaXplKSB7CisJY2FzZSA0OgorCQlyZXR1cm4gX19jbXB4Y2hnX3UzMihwdHIsIG9sZCwgbmV3KTsKKwl9CisJX19jbXB4Y2hnX2NhbGxlZF93aXRoX2JhZF9wb2ludGVyKCk7CisJcmV0dXJuIG9sZDsKK30KKworI2RlZmluZSBjbXB4Y2hnKHB0cixvLG4pCQkJCQkJIFwKKyAgKHsJCQkJCQkJCQkgXAorICAgICBfX3R5cGVvZl9fKCoocHRyKSkgX29fID0gKG8pOwkJCQkJIFwKKyAgICAgX190eXBlb2ZfXygqKHB0cikpIF9uXyA9IChuKTsJCQkJCSBcCisgICAgIChfX3R5cGVvZl9fKCoocHRyKSkpIF9fY21weGNoZygocHRyKSwgKHVuc2lnbmVkIGxvbmcpX29fLAkJIFwKKwkJCQkgICAgKHVuc2lnbmVkIGxvbmcpX25fLCBzaXplb2YoKihwdHIpKSk7IFwKKyAgfSkKKworZXh0ZXJuIHZvaWQgKnNldF9leGNlcHRpb25fdGFibGVfdmVjKHVuc2lnbmVkIGludCB2ZWMsIHZvaWQgKmhhbmRsZXIpOworCitzdGF0aWMgaW5saW5lIHZvaWQgKnNldF9leGNlcHRpb25fdGFibGVfZXZ0KHVuc2lnbmVkIGludCBldnQsIHZvaWQgKmhhbmRsZXIpCit7CisJcmV0dXJuIHNldF9leGNlcHRpb25fdGFibGVfdmVjKGV2dCA+PiA1LCBoYW5kbGVyKTsKK30KKworLyogWFhYCisgKiBkaXNhYmxlIGhsdCBkdXJpbmcgY2VydGFpbiBjcml0aWNhbCBpL28gb3BlcmF0aW9ucworICovCisjZGVmaW5lIEhBVkVfRElTQUJMRV9ITFQKK3ZvaWQgZGlzYWJsZV9obHQodm9pZCk7Cit2b2lkIGVuYWJsZV9obHQodm9pZCk7CisKKyNkZWZpbmUgYXJjaF9hbGlnbl9zdGFjayh4KSAoeCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC90eXBlcy5oIGIvaW5jbHVkZS9hc20tc2gvdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDAwZGJiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvdHlwZXMuaApAQCAtMCwwICsxLDU5IEBACisjaWZuZGVmIF9fQVNNX1NIX1RZUEVTX0gKKyNkZWZpbmUgX19BU01fU0hfVFlQRVNfSAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVtb2RlX3Q7CisKKy8qCisgKiBfX3h4IGlzIG9rOiBpdCBkb2Vzbid0IHBvbGx1dGUgdGhlIFBPU0lYIG5hbWVzcGFjZS4gVXNlIHRoZXNlIGluIHRoZQorICogaGVhZGVyIGZpbGVzIGV4cG9ydGVkIHRvIHVzZXIgc3BhY2UKKyAqLworCit0eXBlZGVmIF9fc2lnbmVkX18gY2hhciBfX3M4OwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fdTg7CisKK3R5cGVkZWYgX19zaWduZWRfXyBzaG9ydCBfX3MxNjsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgX191MTY7CisKK3R5cGVkZWYgX19zaWduZWRfXyBpbnQgX19zMzI7Cit0eXBlZGVmIHVuc2lnbmVkIGludCBfX3UzMjsKKworI2lmIGRlZmluZWQoX19HTlVDX18pICYmICFkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykKK3R5cGVkZWYgX19zaWduZWRfXyBsb25nIGxvbmcgX19zNjQ7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3U2NDsKKyNlbmRpZgorCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKy8qCisgKiBUaGVzZSBhcmVuJ3QgZXhwb3J0ZWQgb3V0c2lkZSB0aGUga2VybmVsIHRvIGF2b2lkIG5hbWUgc3BhY2UgY2xhc2hlcworICovCisjaWZkZWYgX19LRVJORUxfXworCisjZGVmaW5lIEJJVFNfUEVSX0xPTkcgMzIKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworCit0eXBlZGVmIF9fc2lnbmVkX18gY2hhciBzODsKK3R5cGVkZWYgdW5zaWduZWQgY2hhciB1ODsKKwordHlwZWRlZiBfX3NpZ25lZF9fIHNob3J0IHMxNjsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgdTE2OworCit0eXBlZGVmIF9fc2lnbmVkX18gaW50IHMzMjsKK3R5cGVkZWYgdW5zaWduZWQgaW50IHUzMjsKKwordHlwZWRlZiBfX3NpZ25lZF9fIGxvbmcgbG9uZyBzNjQ7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyB1NjQ7CisKKy8qIERtYSBhZGRyZXNzZXMgYXJlIDMyLWJpdHMgd2lkZS4gICovCisKK3R5cGVkZWYgdTMyIGRtYV9hZGRyX3Q7CisKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qIF9fQVNNX1NIX1RZUEVTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL3UtYm9vdC5oIGIvaW5jbHVkZS9hc20tc2gvdS1ib290LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjc5NjQ0YwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoL3UtYm9vdC5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIE5PVEU6IFRoaXMgaGVhZGVyIGZpbGUgZGVmaW5lcyBhbiBpbnRlcmZhY2UgdG8gVS1Cb290LiBJbmNsdWRpbmcKKyAqIHRoaXMgKHVubW9kaWZpZWQpIGhlYWRlciBmaWxlIGluIGFub3RoZXIgZmlsZSBpcyBjb25zaWRlcmVkIG5vcm1hbAorICogdXNlIG9mIFUtQm9vdCwgYW5kIGRvZXMgKm5vdCogZmFsbCB1bmRlciB0aGUgaGVhZGluZyBvZiAiZGVyaXZlZAorICogd29yayIuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisjaWZuZGVmIF9fQVNNX1NIX1VfQk9PVF9IXworI2RlZmluZSBfX0FTTV9TSF9VX0JPT1RfSF8KKwordHlwZWRlZiBzdHJ1Y3QgYmRfaW5mbyB7CisJdW5zaWduZWQgbG9uZyAgIGJpX21lbXN0YXJ0OyAgICAvKiBzdGFydCBvZiBEUkFNIG1lbW9yeSAqLworCXVuc2lnbmVkIGxvbmcgICBiaV9tZW1zaXplOyAgICAgLyogc2l6ZSAgb2YgRFJBTSBtZW1vcnkgaW4gYnl0ZXMgKi8KKwl1bnNpZ25lZCBsb25nICAgYmlfZmxhc2hzdGFydDsgIC8qIHN0YXJ0IG9mIEZMQVNIIG1lbW9yeSAqLworCXVuc2lnbmVkIGxvbmcgICBiaV9mbGFzaHNpemU7ICAgLyogc2l6ZSAgb2YgRkxBU0ggbWVtb3J5ICovCisJdW5zaWduZWQgbG9uZyAgIGJpX2ZsYXNob2Zmc2V0OyAvKiByZXNlcnZlZCBhcmVhIGZvciBzdGFydHVwIG1vbml0b3IgKi8KKwl1bnNpZ25lZCBsb25nICAgYmlfc3JhbXN0YXJ0OyAgIC8qIHN0YXJ0IG9mIFNSQU0gbWVtb3J5ICovCisJdW5zaWduZWQgbG9uZyAgIGJpX3NyYW1zaXplOyAgICAvKiBzaXplICBvZiBTUkFNIG1lbW9yeSAqLworCXVuc2lnbmVkIGxvbmcgICBiaV9pcF9hZGRyOyAgICAgLyogSVAgQWRkcmVzcyAqLworCXVuc2lnbmVkIGNoYXIgICBiaV9lbmV0YWRkcls2XTsgLyogRXRoZXJuZXQgYWRyZXNzICovCisJdW5zaWduZWQgbG9uZyAgIGJpX2JhdWRyYXRlOyAgICAvKiBDb25zb2xlIEJhdWRyYXRlICovCisJdW5zaWduZWQgbG9uZwliaV9ib290X3BhcmFtczsgLyogd2hlcmUgdGhpcyBib2FyZCBleHBlY3RzIHBhcmFtcyAqLworfSBiZF90OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29tbW9uLmggYi9pbmNsdWRlL2NvbW1vbi5oCmluZGV4IGVkZDAwMjQuLjQ5MzQxN2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29tbW9uLmgKKysrIGIvaW5jbHVkZS9jb21tb24uaApAQCAtMTI5LDIwICsxMjksMjEgQEAKIAogLyoKICAqIGVuYWJsZSBjb21tb24gaGFuZGxpbmcgZm9yIGFsbCBUUU04eHhML00gYm9hcmRzOgotICogLSBDT05GSUdfVFFNOHh4TSB3aWxsIGJlIGRlZmluZWQgZm9yIGFsbCBUUU04eHhNIGFuZCBUUU04ODVEIGJvYXJkcworICogLSBDT05GSUdfVFFNOHh4TSB3aWxsIGJlIGRlZmluZWQgZm9yIGFsbCBUUU04eHhNIGJvYXJkcwogICogLSBDT05GSUdfVFFNOHh4TCB3aWxsIGJlIGRlZmluZWQgZm9yIGFsbCBUUU04eHhMIF9hbmRfIFRRTTh4eE0gYm9hcmRzCisgKiAgICAgICAgICAgICAgICAgIGFuZCBmb3IgdGhlIFRRTTg4NUQgYm9hcmQKICAqLwogI2lmIGRlZmluZWQoQ09ORklHX1RRTTgyM00pIHx8IGRlZmluZWQoQ09ORklHX1RRTTg1ME0pIHx8IFwKICAgICBkZWZpbmVkKENPTkZJR19UUU04NTVNKSB8fCBkZWZpbmVkKENPTkZJR19UUU04NjBNKSB8fCBcCi0gICAgZGVmaW5lZChDT05GSUdfVFFNODYyTSkgfHwgZGVmaW5lZChDT05GSUdfVFFNODY2TSkgfHwgXAotICAgIGRlZmluZWQoQ09ORklHX1RRTTg4NUQpCisgICAgZGVmaW5lZChDT05GSUdfVFFNODYyTSkgfHwgZGVmaW5lZChDT05GSUdfVFFNODY2TSkKICMgaWZuZGVmIENPTkZJR19UUU04eHhNCiAjICBkZWZpbmUgQ09ORklHX1RRTTh4eE0KICMgZW5kaWYKICNlbmRpZgogI2lmIGRlZmluZWQoQ09ORklHX1RRTTgyM0wpIHx8IGRlZmluZWQoQ09ORklHX1RRTTg1MEwpIHx8IFwKICAgICBkZWZpbmVkKENPTkZJR19UUU04NTVMKSB8fCBkZWZpbmVkKENPTkZJR19UUU04NjBMKSB8fCBcCi0gICAgZGVmaW5lZChDT05GSUdfVFFNODYyTCkgfHwgZGVmaW5lZChDT05GSUdfVFFNOHh4TSkKKyAgICBkZWZpbmVkKENPTkZJR19UUU04NjJMKSB8fCBkZWZpbmVkKENPTkZJR19UUU04eHhNKSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfVFFNODg1RCkKICMgaWZuZGVmIENPTkZJR19UUU04eHhMCiAjICBkZWZpbmUgQ09ORklHX1RRTTh4eEwKICMgZW5kaWYKQEAgLTQ5Nyw2ICs0OTgsNyBAQAogI2lmIGRlZmluZWQoQ09ORklHX01QQzg1eHgpCiB0eXBlZGVmIE1QQzg1eHhfU1lTX0lORk8gc3lzX2luZm9fdDsKIHZvaWQJZ2V0X3N5c19pbmZvICAoIHN5c19pbmZvX3QgKiApOwordWxvbmcJZ2V0X2Rkcl9mcmVxICAodWxvbmcpOwogI2VuZGlmCiAjaWYgZGVmaW5lZChDT05GSUdfTVBDODZ4eCkKIHR5cGVkZWYgTVBDODZ4eF9TWVNfSU5GTyBzeXNfaW5mb190OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL0hNSTEwLmggYi9pbmNsdWRlL2NvbmZpZ3MvSE1JMTAuaAppbmRleCAwMmFlNWQwLi5mOGIwMjYyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvSE1JMTAuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvSE1JMTAuaApAQCAtMjI0LDExICsyMjQsMTUgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIEZMQVNIIG9yZ2FuaXphdGlvbgogICovCi0jZGVmaW5lIENGR19NQVhfRkxBU0hfQkFOS1MJMgkvKiBtYXggbnVtYmVyIG9mIG1lbW9yeSBiYW5rcwkJKi8KLSNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9TRUNUCTcxCS8qIG1heCBudW1iZXIgb2Ygc2VjdG9ycyBvbiBvbmUgY2hpcAkqLwogCi0jZGVmaW5lIENGR19GTEFTSF9FUkFTRV9UT1VUCTEyMDAwMAkvKiBUaW1lb3V0IGZvciBGbGFzaCBFcmFzZSAoaW4gbXMpCSovCi0jZGVmaW5lIENGR19GTEFTSF9XUklURV9UT1VUCTUwMAkvKiBUaW1lb3V0IGZvciBGbGFzaCBXcml0ZSAoaW4gbXMpCSovCisvKiB1c2UgQ0ZJIGZsYXNoIGRyaXZlciAqLworI2RlZmluZSBDRkdfRkxBU0hfQ0ZJCQkxCS8qIEZsYXNoIGlzIENGSSBjb25mb3JtYW50ICovCisjZGVmaW5lIENGR19GTEFTSF9DRklfRFJJVkVSCTEJLyogVXNlIHRoZSBjb21tb24gZHJpdmVyICovCisjZGVmaW5lIENGR19GTEFTSF9CQU5LU19MSVNUCXsgQ0ZHX0ZMQVNIX0JBU0UgfQorI2RlZmluZSBDRkdfRkxBU0hfRU1QVFlfSU5GTworI2RlZmluZSBDRkdfRkxBU0hfVVNFX0JVRkZFUl9XUklURQkxCisjZGVmaW5lIENGR19NQVhfRkxBU0hfQkFOS1MJMgkvKiBtYXggbnVtYmVyIG9mIG1lbW9yeSBiYW5rcyAqLworI2RlZmluZSBDRkdfTUFYX0ZMQVNIX1NFQ1QJNzEJLyogbWF4IG51bWJlciBvZiBzZWN0b3JzIG9uIG9uZSBjaGlwICovCiAKICNkZWZpbmUgQ0ZHX0VOVl9JU19JTl9GTEFTSAkxCiAjZGVmaW5lIENGR19FTlZfT0ZGU0VUCQkweDgwMDAJLyogICBPZmZzZXQgICBvZiBFbnZpcm9ubWVudCBTZWN0b3IJKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9NUEM4NTQwQURTLmggYi9pbmNsdWRlL2NvbmZpZ3MvTVBDODU0MEFEUy5oCmluZGV4IGJlNjAzYWMuLjM1ZTFkNjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9NUEM4NTQwQURTLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL01QQzg1NDBBRFMuaApAQCAtMjk4LDEzICsyOTgsOSBAQAogI2VuZGlmCiAKIC8qIHBhc3Mgb3BlbiBmaXJtd2FyZSBmbGF0IHRyZWUgKi8KLSNkZWZpbmUgQ09ORklHX09GX0ZMQVRfVFJFRQkxCi0jZGVmaW5lIENPTkZJR19PRl9CT0FSRF9TRVRVUAkxCi0KLSNkZWZpbmUgT0ZfQ1BVCQkJIlBvd2VyUEMsODU0MEAwIgotI2RlZmluZSBPRl9TT0MJCQkic29jODU0MEBlMDAwMDAwMCIKLSNkZWZpbmUgT0ZfVEJDTEsJCShiZC0+YmlfYnVzZnJlcSAvIDgpCi0jZGVmaW5lIE9GX1NURE9VVF9QQVRICQkiL3NvYzg1NDBAZTAwMDAwMDAvc2VyaWFsQDQ1MDAiCisjZGVmaW5lIENPTkZJR19PRl9MSUJGRFQJCTEKKyNkZWZpbmUgQ09ORklHX09GX0JPQVJEX1NFVFVQCQkxCisjZGVmaW5lIENPTkZJR19PRl9TVERPVVRfVklBX0FMSUFTCTEKIAogI2RlZmluZSBDRkdfNjRCSVRfVlNQUklOVEYJMQogI2RlZmluZSBDRkdfNjRCSVRfU1RSVE9VTAkxCkBAIC00MjQsNiArNDIwLDcgQEAKIAogI2RlZmluZSBDT05GSUdfQ01EX1BJTkcKICNkZWZpbmUgQ09ORklHX0NNRF9JMkMKKyNkZWZpbmUgQ09ORklHX0NNRF9FTEYKIAogI2lmIGRlZmluZWQoQ09ORklHX1BDSSkKICAgICAjZGVmaW5lIENPTkZJR19DTURfUENJCkBAIC00NDEsNiArNDM4LDcgQEAKICAqIE1pc2NlbGxhbmVvdXMgY29uZmlndXJhYmxlIG9wdGlvbnMKICAqLwogI2RlZmluZSBDRkdfTE9OR0hFTFAJCQkvKiB1bmRlZiB0byBzYXZlIG1lbW9yeQkqLworI2RlZmluZSBDT05GSUdfQ01ETElORV9FRElUSU5HCQkvKiBDb21tYW5kLWxpbmUgZWRpdGluZyAqLwogI2RlZmluZSBDRkdfTE9BRF9BRERSCTB4MjAwMDAwMAkvKiBkZWZhdWx0IGxvYWQgYWRkcmVzcyAqLwogI2RlZmluZSBDRkdfUFJPTVBUCSI9PiAiCQkvKiBNb25pdG9yIENvbW1hbmQgUHJvbXB0ICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9NUEM4NTQxQ0RTLmggYi9pbmNsdWRlL2NvbmZpZ3MvTVBDODU0MUNEUy5oCmluZGV4IDhkZGE2NjUuLmQyZTcyMzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9NUEM4NTQxQ0RTLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL01QQzg1NDFDRFMuaApAQCAtMzA5LDE0ICszMDksOSBAQAogI2VuZGlmCiAKIC8qIHBhc3Mgb3BlbiBmaXJtd2FyZSBmbGF0IHRyZWUgKi8KLSNkZWZpbmUgQ09ORklHX09GX0ZMQVRfVFJFRQkxCi0jZGVmaW5lIENPTkZJR19PRl9CT0FSRF9TRVRVUAkxCi0KLSNkZWZpbmUgT0ZfQ1BVCQkJIlBvd2VyUEMsODU0MUAwIgotI2RlZmluZSBPRl9TT0MJCQkic29jODU0MUBlMDAwMDAwMCIKLSNkZWZpbmUgT0ZfVEJDTEsJCShiZC0+YmlfYnVzZnJlcSAvIDgpCi0jZGVmaW5lIE9GX1NURE9VVF9QQVRICQkiL3NvYzg1NDFAZTAwMDAwMDAvc2VyaWFsQDQ2MDAiCi0jZGVmaW5lIE9GX1BDSQkJCSJwY2lAZTAwMDgwMDAiCisjZGVmaW5lIENPTkZJR19PRl9MSUJGRFQJCTEKKyNkZWZpbmUgQ09ORklHX09GX0JPQVJEX1NFVFVQCQkxCisjZGVmaW5lIENPTkZJR19PRl9TVERPVVRfVklBX0FMSUFTCTEKIAogLyoKICAqIEkyQwpAQCAtNDIyLDYgKzQxNyw3IEBACiAjZGVmaW5lIENPTkZJR19DTURfUElORwogI2RlZmluZSBDT05GSUdfQ01EX0kyQwogI2RlZmluZSBDT05GSUdfQ01EX01JSQorI2RlZmluZSBDT05GSUdfQ01EX0VMRgogCiAjaWYgZGVmaW5lZChDT05GSUdfUENJKQogICAgICNkZWZpbmUgQ09ORklHX0NNRF9QQ0kKQEAgLTQzNCw2ICs0MzAsNyBAQAogICogTWlzY2VsbGFuZW91cyBjb25maWd1cmFibGUgb3B0aW9ucwogICovCiAjZGVmaW5lIENGR19MT05HSEVMUAkJCS8qIHVuZGVmIHRvIHNhdmUgbWVtb3J5CSovCisjZGVmaW5lIENPTkZJR19DTURMSU5FX0VESVRJTkcJCS8qIENvbW1hbmQtbGluZSBlZGl0aW5nICovCiAjZGVmaW5lIENGR19MT0FEX0FERFIJMHgyMDAwMDAwCS8qIGRlZmF1bHQgbG9hZCBhZGRyZXNzICovCiAjZGVmaW5lIENGR19QUk9NUFQJIj0+ICIJCS8qIE1vbml0b3IgQ29tbWFuZCBQcm9tcHQgKi8KICNpZiBkZWZpbmVkKENPTkZJR19DTURfS0dEQikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9NUEM4NTQ0RFMuaCBiL2luY2x1ZGUvY29uZmlncy9NUEM4NTQ0RFMuaAppbmRleCAxM2UyYTJjLi41NDVhNzZjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvTVBDODU0NERTLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL01QQzg1NDREUy5oCkBAIC00MCw2ICs0MCw3IEBACiAjZGVmaW5lIENPTkZJR19QQ0lFMgkJMQkvKiBQQ0lFIGNvbnRyb2xlciAyIChzbG90IDIpICovCiAjZGVmaW5lIENPTkZJR19QQ0lFMwkJMQkvKiBQQ0lFIGNvbnRyb2xlciAzIChVTEkgYnJpZGdlKSAqLwogI2RlZmluZSBDT05GSUdfRlNMX1BDSV9JTklUCTEJLyogVXNlIGNvbW1vbiBGU0wgaW5pdCBjb2RlICovCisjZGVmaW5lIENPTkZJR19GU0xfUENJRV9SRVNFVAkxCS8qIG5lZWQgUENJZSByZXNldCBlcnJhdGEgKi8KIAogI2RlZmluZSBDT05GSUdfVFNFQ19FTkVUCQkvKiB0c2VjIGV0aGVybmV0IHN1cHBvcnQgKi8KICNkZWZpbmUgQ09ORklHX0VOVl9PVkVSV1JJVEUKQEAgLTI1MSwxMyArMjUyLDkgQEAKICNlbmRpZgogCiAvKiBwYXNzIG9wZW4gZmlybXdhcmUgZmxhdCB0cmVlICovCi0jZGVmaW5lIENPTkZJR19PRl9GTEFUX1RSRUUJMQotI2RlZmluZSBDT05GSUdfT0ZfQk9BUkRfU0VUVVAJMQotCi0jZGVmaW5lIE9GX0NQVQkJCSJQb3dlclBDLDg1NDRAMCIKLSNkZWZpbmUgT0ZfU09DCQkJInNvYzg1NDRAZTAwMDAwMDAiCi0jZGVmaW5lIE9GX1RCQ0xLCQkoYmQtPmJpX2J1c2ZyZXEgLyA4KQotI2RlZmluZSBPRl9TVERPVVRfUEFUSAkJIi9zb2M4NTQ0QGUwMDAwMDAwL3NlcmlhbEA0NTAwIgorI2RlZmluZSBDT05GSUdfT0ZfTElCRkRUCQkxCisjZGVmaW5lIENPTkZJR19PRl9CT0FSRF9TRVRVUAkJMQorI2RlZmluZSBDT05GSUdfT0ZfU1RET1VUX1ZJQV9BTElBUwkxCiAKIC8qIEkyQyAqLwogI2RlZmluZSBDT05GSUdfRlNMX0kyQwkJLyogVXNlIEZTTCBjb21tb24gSTJDIGRyaXZlciAqLwpAQCAtNDEwLDYgKzQwNyw3IEBACiAjZGVmaW5lIENPTkZJR19DTURfUElORwogI2RlZmluZSBDT05GSUdfQ01EX0kyQwogI2RlZmluZSBDT05GSUdfQ01EX01JSQorI2RlZmluZSBDT05GSUdfQ01EX0VMRgogCiAjaWYgZGVmaW5lZChDT05GSUdfUENJKQogICAgICNkZWZpbmUgQ09ORklHX0NNRF9QQ0kKQEAgLTQyNiw2ICs0MjQsNyBAQAogICogTWlzY2VsbGFuZW91cyBjb25maWd1cmFibGUgb3B0aW9ucwogICovCiAjZGVmaW5lIENGR19MT05HSEVMUAkJCS8qIHVuZGVmIHRvIHNhdmUgbWVtb3J5CSovCisjZGVmaW5lIENPTkZJR19DTURMSU5FX0VESVRJTkcJCS8qIENvbW1hbmQtbGluZSBlZGl0aW5nICovCiAjZGVmaW5lIENGR19MT0FEX0FERFIJMHgyMDAwMDAwCS8qIGRlZmF1bHQgbG9hZCBhZGRyZXNzICovCiAjZGVmaW5lIENGR19QUk9NUFQJIj0+ICIJCS8qIE1vbml0b3IgQ29tbWFuZCBQcm9tcHQgKi8KICNpZiBkZWZpbmVkKENPTkZJR19DTURfS0dEQikKQEAgLTQ3NSwxMCArNDc0LDYgQEAKICNkZWZpbmUgQ09ORklHX0VUSEFERFIJMDA6RTA6MEM6MDI6MDA6RkQKICNkZWZpbmUgQ09ORklHX0hBU19FVEgxCiAjZGVmaW5lIENPTkZJR19FVEgxQUREUgkwMDpFMDowQzowMjowMTpGRAotI2RlZmluZSBDT05GSUdfSEFTX0VUSDIKLSNkZWZpbmUgQ09ORklHX0VUSDJBRERSCTAwOkUwOjBDOjAyOjAyOkZECi0jZGVmaW5lIENPTkZJR19IQVNfRVRIMwotI2RlZmluZSBDT05GSUdfRVRIM0FERFIJMDA6RTA6MEM6MDI6MDM6RkQKICNlbmRpZgogCiAjZGVmaW5lIENPTkZJR19JUEFERFIJMTkyLjE2OC4xLjI1MQpAQCAtNDg4LDggKzQ4Myw4IEBACiAjZGVmaW5lIENPTkZJR19CT09URklMRQk4NTQ0ZHMvdUltYWdlLnVib290CiAjZGVmaW5lIENPTkZJR19VQk9PVFBBVEgJODU0NGRzL3UtYm9vdC5iaW4JLyogVEZUUCBzZXJ2ZXIgKi8KIAotI2RlZmluZSBDT05GSUdfU0VSVkVSSVAJMTkyLjE2OC4wLjEKLSNkZWZpbmUgQ09ORklHX0dBVEVXQVlJUCAxOTIuMTY4LjAuMQorI2RlZmluZSBDT05GSUdfU0VSVkVSSVAJMTkyLjE2OC4xLjEKKyNkZWZpbmUgQ09ORklHX0dBVEVXQVlJUCAxOTIuMTY4LjEuMQogI2RlZmluZSBDT05GSUdfTkVUTUFTSwkyNTUuMjU1LjAuMAogCiAjZGVmaW5lIENPTkZJR19MT0FEQUREUgkxMDAwMDAwCS8qZGVmYXVsdCBsb2NhdGlvbiBmb3IgdGZ0cCBhbmQgYm9vdG0qLwpAQCAtNDk5LDY1ICs0OTQsNiBAQAogCiAjZGVmaW5lIENPTkZJR19CQVVEUkFURQkxMTUyMDAKIAotI2lmIGRlZmluZWQoQ09ORklHX1BDSUUxKSB8fCBkZWZpbmVkKENPTkZJR19QQ0lFMikgfHwgZGVmaW5lZChDT05GSUdfUENJRTMpCi0jZGVmaW5lIFBDSUVfRU5WIFwKLSAicGNpZXJlZz1tZCAke2F9MDAwIDY7IG1kICR7YX0wMjAgNDsgbWQgJHthfWJmOCAyOyBlY2hvIG87bWQgJHthfWMwMCAyNTsiIFwKLQkiZWNobyBpOyBtZCAke2F9ZGEwIDE1OyBlY2hvIGU7bWQgJHthfWUwMCBlOyBlY2hvIGQ7IG1kICR7YX1mMDAgY1wwIiBcCi0gInBjaWVlcnI9bWQgJHthfTAyMCAxOyBtZCAke2F9ZTAwIGU7IgkJXAotCSJwY2kgZC5iICRiLjAgNyAxOyBwY2kgZC53ICRiLjAgMWUgMTsiCVwKLQkicGNpIGQudyAkYi4wIDU2IDE7IgkJCVwKLQkicGNpIGQgJGIuMCAxMDQgMTtwY2kgZCAkYi4wIDExMCAxO3BjaSBkICRiLjAgMTMwIDFcMCIgXAotICJwY2llZXJyYz1tdyAke2F9MDIwIGZmZmZmZmZmOyBtdyAke2F9ZTAwIGZmZmZmZmZmOyIJXAotCSJwY2kgdy5iICRiLjAgNyBmZjsgcGNpIHcudyAkYi4wIDFlIGZmZmY7IHBjaSB3LncgJGIuMCA1NiBmZmZmOyIgXAotCSJwY2kgdyAkYi4wIDEwNCBmZmZmZmZmZjsgcGNpIHcgJGIuMCAxMTAgZmZmZmZmZmY7IiBcCi0JInBjaSB3ICRiLjAgMTMwIGZmZmZmZmZmXDAiIFwKLSAicGNpZWNmZz1wY2kgZCAkYi4wIDAgMjA7IHBjaSBkICRiLjAgMTAwIGU7IHBjaSBkICRiLjAgNDAwIDY5XDAiCVwKLSAicGNpZTFyZWdzPXNldGVudiBhIGUwMDBhOyBydW4gcGNpZXJlZ1wwIglcCi0gInBjaWUycmVncz1zZXRlbnYgYSBlMDAwOTsgcnVuIHBjaWVyZWdcMCIJXAotICJwY2llM3JlZ3M9c2V0ZW52IGEgZTAwMGI7IHJ1biBwY2llcmVnXDAiCVwKLSAicGNpZTFjZmc9c2V0ZW52IGIgMzsgcnVuIHBjaWVjZmdcMCIgXAotICJwY2llMmNmZz1zZXRlbnYgYiA1OyBydW4gcGNpZWNmZ1wwIiBcCi0gInBjaWUzY2ZnPXNldGVudiBiIDA7IHJ1biBwY2llY2ZnXDAiIFwKLSAicGNpZTFlcnI9c2V0ZW52IGEgZTAwMGE7IHNldGVudiBiIDM7IHJ1biBwY2llZXJyXDAiCVwKLSAicGNpZTJlcnI9c2V0ZW52IGEgZTAwMDk7IHNldGVudiBiIDU7IHJ1biBwY2llZXJyXDAiCVwKLSAicGNpZTNlcnI9c2V0ZW52IGEgZTAwMGI7IHNldGVudiBiIDA7IHJ1biBwY2llZXJyXDAiCVwKLSAicGNpZTFlcnJjPXNldGVudiBhIGUwMDBhOyBzZXRlbnYgYiAzOyBydW4gcGNpZWVycmNcMCIJXAotICJwY2llMmVycmM9c2V0ZW52IGEgZTAwMDk7IHNldGVudiBiIDU7IHJ1biBwY2llZXJyY1wwIglcCi0gInBjaWUzZXJyYz1zZXRlbnYgYSBlMDAwYjsgc2V0ZW52IGIgMDsgcnVuIHBjaWVlcnJjXDAiCi0jZWxzZQotI2RlZmluZQlQQ0lFX0VOViAiIgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19QQ0kxKQotI2RlZmluZSBQQ0lfRU5WIFwKLSAicGNpcmVnPW1kICR7YX0wMDAgMzsgZWNobyBvO21kICR7YX1jMDAgMjU7IGVjaG8gaTsgbWQgJHthfWRhMCAxNTsiIFwKLQkiZWNobyBlO21kICR7YX1lMDAgOVwwIgkJCVwKLSAicGNpMXJlZ3M9c2V0ZW52IGEgZTAwMDg7IHJ1biBwY2lyZWdcMCIJXAotICJwY2llcnI9bWQgJHthfWUwMCA4OyBwY2kgZC5iICRiLjAgNyAxOyBwY2kgZC53ICRiLjAgMWUgMTsiIFwKLQkicGNpIGQudyAkYi4wIDU2IDFcMCIJCQlcCi0gInBjaWVycmM9bXcgJHthfWUwMCBmZmZmZmZmZjsgbXcgJHthfWUwYyAwOyBwY2kgdy5iICRiLjAgNyBmZjsiIFwKLQkicGNpIHcudyAkYi4wIDFlIGZmZmY7IHBjaSB3LncgJGIuMCA1NiBmZmZmXDAiCQlcCi0gInBjaTFlcnI9c2V0ZW52IGEgZTAwMDg7IHNldGVudiBiIDc7IHJ1biBwY2llcnJcMCIJCVwKLSAicGNpMWVycmM9c2V0ZW52IGEgZTAwMDg7IHNldGVudiBiIDc7IHJ1biBwY2llcnJjXDAiCi0jZWxzZQotI2RlZmluZQlQQ0lfRU5WICIiCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX1RTRUNfRU5FVCkKLSNkZWZpbmUgRU5FVF9FTlYgXAotICJlbmV0cmVnMT1tZCAke2F9MDAwIDI7IG1kICR7YX0wMTAgOTsgbWQgJHthfTA1MCA0OyBtZCAke2F9MDhjIDE7IiBcCi0JIm1kICR7YX0wOTggMlwwIiBcCi0gImVuZXRyZWd0PWVjaG8gdDttZCAke2F9MTAwIDY7IG1kICR7YX0xNDAgMjsgbWQgJHthfTE4MCAxMDsgbWQgJHthfTIwMCAxMFwwIiBcCi0gImVuZXRyZWdyPWVjaG8gcjttZCAke2F9MzAwIDY7IG1kICR7YX0zMzAgNTsgbWQgJHthfTM4MCAxMDsgbWQgJHthfTQwMCAxMFwwIiBcCi0gImVuZXRyZWdtPWVjaG8gbWFjO21kICR7YX01MDAgNTsgbWQgJHthfTUyMCAyODtlY2hvIGZpZm87bWQgJHthfWEwMCAxOyIgXAotCSJlY2hvIG1pYjttZCAke2F9NjgwIDMxXDAiIFwKLSAiZW5ldHJlZz1ydW4gZW5ldHJlZzE7IHJ1biBlbmV0cmVnbTsgcnVuIGVuZXRyZWd0OyBydW4gZW5ldHJlZ3JcMCIgXAotICJlbmV0MXJlZ3M9c2V0ZW52IGEgZTAwMjQ7IHJ1biBlbmV0cmVnXDAiIFwKLSAiZW5ldDNyZWdzPXNldGVudiBhIGUwMDI2OyBydW4gZW5ldHJlZ1wwIgotI2Vsc2UKLSNkZWZpbmUgRU5FVF9FTlYgIiIKLSNlbmRpZgotCiAjZGVmaW5lCUNPTkZJR19FWFRSQV9FTlZfU0VUVElOR1MJCQkJXAogICJuZXRkZXY9ZXRoMFwwIgkJCQkJCVwKICAidWJvb3Q9IiBNS19TVFIoQ09ORklHX1VCT09UUEFUSCkgIlwwIgkJCQlcCkBAIC01NzAsMjkgKzUwNiw5IEBACiAgImNvbnNvbGVkZXY9dHR5UzBcMCIJCQkJXAogICJyYW1kaXNrYWRkcj0yMDAwMDAwXDAiCQkJXAogICJyYW1kaXNrZmlsZT04NTQ0ZHMvcmFtZGlzay51Ym9vdFwwIgkJXAotICJkdGJhZGRyPWMwMDAwMFwwIgkJCQlcCi0gImR0YmZpbGU9ODU0NGRzL21wYzg1NDRkcy5kdGJcMCIJCVwKLSAiYmRldj1zZGEzXDAiCQkJCQlcCi0gImVvaT1tdyBlMDA0MDBiMCAwXDAiCQkJCVwKLSAiaWFjaz1tZCBlMDA0MDBhMCAxXDAiCQkJCVwKLSAiZGRycmVnPW1kICR7YX0wMDAgODsgbWQgJHthfTA4MCA4O21kICR7YX0xMDAgZDsgbWQgJHthfTE0MCA0OyBtZCAke2F9YmYwIDQ7IiBcCi0JIm1kICR7YX1lMDAgMzsgbWQgJHthfWUyMCAzOyBtZCAke2F9ZTQwIDc7IG1kICR7YX1mMDAgNVwwIiBcCi0gImRkcnJlZ3M9c2V0ZW52IGEgZTAwMDI7IHJ1biBkZHJyZWdcMCIJCVwKLSAiZ3VyZWc9bWQgJHthfTAwMCAyYzsgbWQgJHthfTBiMCAxOyBtZCAke2F9MGMwIDE7IG1kICR7YX1iMjAgMzsiIFwKLQkibWQgJHthfWUwMCAxOyBtZCAke2F9ZTYwIDE7IG1kICR7YX1lZjAgMTVcMCIJXAotICJndXJlZ3M9c2V0ZW52IGEgZTAwZTA7IHJ1biBndXJlZ1wwIgkJXAotICJlY21yZWc9bWQgJHthfTAwMCAxOyBtZCAke2F9MDEwIDE7IG1kICR7YX1iZjggMjsgbWQgJHthfWUwMCA2XDAiIFwKLSAiZWNtcmVncz1zZXRlbnYgYSBlMDAwMTsgcnVuIGVjbXJlZ1wwIgkJXAotICJsYXdyZWdzPW1kIGUwMDAwYzA4IDRiXDAiIFwKLSAibGJjcmVncz1tZCBlMDAwNTAwMCAzNlwwIiBcCi0gImRtYTByZWdzPW1kIGUwMDIxMTAwIDEyXDAiIFwKLSAiZG1hMXJlZ3M9bWQgZTAwMjExODAgMTJcMCIgXAotICJkbWEycmVncz1tZCBlMDAyMTIwMCAxMlwwIiBcCi0gImRtYTNyZWdzPW1kIGUwMDIxMjgwIDEyXDAiIFwKLSBQQ0lFX0VOVglcCi0gUENJX0VOVglcCi0gRU5FVF9FTlYKLQorICJmZHRhZGRyPWMwMDAwMFwwIgkJCQlcCisgImZkdGZpbGU9ODU0NGRzL21wYzg1NDRkcy5kdGJcMCIJCVwKKyAiYmRldj1zZGEzXDAiCiAKICNkZWZpbmUgQ09ORklHX05GU0JPT1RDT01NQU5ECQlcCiAgInNldGVudiBib290YXJncyByb290PS9kZXYvbmZzIHJ3ICIJXApAQCAtNjAwLDIzICs1MTYsMjIgQEAKICAiaXA9JGlwYWRkcjokc2VydmVyaXA6JGdhdGV3YXlpcDokbmV0bWFzazokaG9zdG5hbWU6JG5ldGRldjpvZmYgIiBcCiAgImNvbnNvbGU9JGNvbnNvbGVkZXYsJGJhdWRyYXRlICRvdGhib290YXJnczsiCVwKICAidGZ0cCAkbG9hZGFkZHIgJGJvb3RmaWxlOyIJCVwKLSAidGZ0cCAkZHRiYWRkciAkZHRiZmlsZTsiCQlcCi0gImJvb3RtICRsb2FkYWRkciAtICRkdGJhZGRyIgotCisgInRmdHAgJGZkdGFkZHIgJGZkdGZpbGU7IgkJXAorICJib290bSAkbG9hZGFkZHIgLSAkZmR0YWRkciIKIAogI2RlZmluZSBDT05GSUdfUkFNQk9PVENPTU1BTkQJCVwKICAic2V0ZW52IGJvb3RhcmdzIHJvb3Q9L2Rldi9yYW0gcncgIglcCiAgImNvbnNvbGU9JGNvbnNvbGVkZXYsJGJhdWRyYXRlICRvdGhib290YXJnczsiCVwKICAidGZ0cCAkcmFtZGlza2FkZHIgJHJhbWRpc2tmaWxlOyIJXAogICJ0ZnRwICRsb2FkYWRkciAkYm9vdGZpbGU7IgkJXAotICJ0ZnRwICRkdGJhZGRyICRkdGJmaWxlOyIJCVwKLSAiYm9vdG0gJGxvYWRhZGRyICRyYW1kaXNrYWRkciAkZHRiYWRkciIKKyAidGZ0cCAkZmR0YWRkciAkZmR0ZmlsZTsiCQlcCisgImJvb3RtICRsb2FkYWRkciAkcmFtZGlza2FkZHIgJGZkdGFkZHIiCiAKICNkZWZpbmUgQ09ORklHX0JPT1RDT01NQU5ECQlcCiAgInNldGVudiBib290YXJncyByb290PS9kZXYvJGJkZXYgcncgIglcCiAgImNvbnNvbGU9JGNvbnNvbGVkZXYsJGJhdWRyYXRlICRvdGhib290YXJnczsiCVwKICAidGZ0cCAkbG9hZGFkZHIgJGJvb3RmaWxlOyIJCVwKLSAidGZ0cCAkZHRiYWRkciAkZHRiZmlsZTsiCQlcCi0gImJvb3RtICRsb2FkYWRkciAtICRkdGJhZGRyIgorICJ0ZnRwICRmZHRhZGRyICRmZHRmaWxlOyIJCVwKKyAiYm9vdG0gJGxvYWRhZGRyIC0gJGZkdGFkZHIiCiAKICNlbmRpZgkvKiBfX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvTVBDODU0OENEUy5oIGIvaW5jbHVkZS9jb25maWdzL01QQzg1NDhDRFMuaAppbmRleCA0ZWRjN2ZkLi4zZjM4MmU1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvTVBDODU0OENEUy5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9NUEM4NTQ4Q0RTLmgKQEAgLTQyLDYgKzQyLDcgQEAKICN1bmRlZiBDT05GSUdfUklPCiAjdW5kZWYgQ09ORklHX1BDSTIKICNkZWZpbmUgQ09ORklHX0ZTTF9QQ0lfSU5JVAkxCS8qIFVzZSBjb21tb24gRlNMIGluaXQgY29kZSAqLworI2RlZmluZSBDT05GSUdfRlNMX1BDSUVfUkVTRVQJMQkvKiBuZWVkIFBDSWUgcmVzZXQgZXJyYXRhICovCiAKICNkZWZpbmUgQ09ORklHX1RTRUNfRU5FVAkJLyogdHNlYyBldGhlcm5ldCBzdXBwb3J0ICovCiAjZGVmaW5lIENPTkZJR19FTlZfT1ZFUldSSVRFCkBAIC0zMzMsMTQgKzMzNCw5IEBACiAjZW5kaWYKIAogLyogcGFzcyBvcGVuIGZpcm13YXJlIGZsYXQgdHJlZSAqLwotI2RlZmluZSBDT05GSUdfT0ZfRkxBVF9UUkVFCTEKLSNkZWZpbmUgQ09ORklHX09GX0JPQVJEX1NFVFVQCTEKLQotI2RlZmluZSBPRl9DUFUJCQkiUG93ZXJQQyw4NTQ4QDAiCi0jZGVmaW5lIE9GX1NPQwkJCSJzb2M4NTQ4QGUwMDAwMDAwIgotI2RlZmluZSBPRl9UQkNMSwkJKGJkLT5iaV9idXNmcmVxIC8gOCkKLSNkZWZpbmUgT0ZfU1RET1VUX1BBVEgJCSIvc29jODU0OEBlMDAwMDAwMC9zZXJpYWxANDYwMCIKLSNkZWZpbmUgT0ZfUENJCQkJInBjaUBlMDAwODAwMCIKKyNkZWZpbmUgQ09ORklHX09GX0xJQkZEVAkJMQorI2RlZmluZSBDT05GSUdfT0ZfQk9BUkRfU0VUVVAJCTEKKyNkZWZpbmUgQ09ORklHX09GX1NURE9VVF9WSUFfQUxJQVMJMQogCiAvKgogICogSTJDCkBAIC00ODMsNiArNDc5LDcgQEAKICNkZWZpbmUgQ09ORklHX0NNRF9QSU5HCiAjZGVmaW5lIENPTkZJR19DTURfSTJDCiAjZGVmaW5lIENPTkZJR19DTURfTUlJCisjZGVmaW5lIENPTkZJR19DTURfRUxGCiAKICNpZiBkZWZpbmVkKENPTkZJR19QQ0kpCiAgICAgI2RlZmluZSBDT05GSUdfQ01EX1BDSQpAQCAtNDk1LDYgKzQ5Miw3IEBACiAgKiBNaXNjZWxsYW5lb3VzIGNvbmZpZ3VyYWJsZSBvcHRpb25zCiAgKi8KICNkZWZpbmUgQ0ZHX0xPTkdIRUxQCQkJLyogdW5kZWYgdG8gc2F2ZSBtZW1vcnkJKi8KKyNkZWZpbmUgQ09ORklHX0NNRExJTkVfRURJVElORwkJLyogQ29tbWFuZC1saW5lIGVkaXRpbmcgKi8KICNkZWZpbmUgQ0ZHX0xPQURfQUREUgkweDIwMDAwMDAJLyogZGVmYXVsdCBsb2FkIGFkZHJlc3MgKi8KICNkZWZpbmUgQ0ZHX1BST01QVAkiPT4gIgkJLyogTW9uaXRvciBDb21tYW5kIFByb21wdCAqLwogI2lmIGRlZmluZWQoQ09ORklHX0NNRF9LR0RCKQpAQCAtNTY4LDcyICs1NjYsNiBAQAogCiAjZGVmaW5lIENPTkZJR19CQVVEUkFURQkxMTUyMDAKIAotI2lmIGRlZmluZWQoQ09ORklHX1BDSUUxKQotI2RlZmluZSBQQ0lFX0VOViBcCi0gInBjaWVyZWc9bWQgJHthfTAwMCA2OyBtZCAke2F9MDIwIDQ7IG1kICR7YX1iZjggMjsgZWNobyBvO21kICR7YX1jMDAgMjU7IiBcCi0JImVjaG8gaTsgbWQgJHthfWRhMCAxNTsgZWNobyBlO21kICR7YX1lMDAgZTsgZWNobyBkOyBtZCAke2F9ZjAwIGNcMCIgXAotICJwY2llZXJyPW1kICR7YX0wMjAgMTsgbWQgJHthfWUwMCBlOyBwY2kgZC5iICRiLjAgNyAxOyBwY2kgZC53ICRiLjAgMWUgMTsiIFwKLQkicGNpIGQudyAkYi4wIDU2IDE7IHBjaSBkICRiLjAgMTA0IDE7IHBjaSBkICRiLjAgMTEwIDE7IiBcCi0JInBjaSBkICRiLjAgMTMwIDFcMCIgXAotICJwY2llZXJyYz1tdyAke2F9MDIwIGZmZmZmZmZmOyBtdyAke2F9ZTAwIGZmZmZmZmZmOyBwY2kgdy5iICRiLjAgNyBmZjsiIFwKLQkicGNpIHcudyAkYi4wIDFlIGZmZmY7IHBjaSB3LncgJGIuMCA1NiBmZmZmOyBwY2kgdyAkYi4wIDEwNCBmZmZmZmZmZjsiXAotCSJwY2kgdyAkYi4wIDExMCBmZmZmZmZmZjsgcGNpIHcgJGIuMCAxMzAgZmZmZmZmZmZcMCIgXAotICJwY2llY2ZnPXBjaSBkICRiLjAgMCAyMDsgcGNpIGQgJGIuMCAxMDAgZTsgcGNpIGQgJGIuMCA0MDAgNjlcMCIgXAotICJwY2llMXJlZ3M9c2V0ZW52IGEgZTAwMGE7IHJ1biBwY2llcmVnXDAiIFwKLSAicGNpZTFjZmc9c2V0ZW52IGIgMzsgcnVuIHBjaWVjZmdcMCIgXAotICJwY2llMWVycj1zZXRlbnYgYSBlMDAwYTsgc2V0ZW52IGIgMzsgcnVuIHBjaWVlcnJcMCIgXAotICJwY2llMWVycmM9c2V0ZW52IGEgZTAwMGE7IHNldGVudiBiIDM7IHJ1biBwY2llZXJyY1wwIgotI2Vsc2UKLSNkZWZpbmUJUENJRV9FTlYgIiIKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfUENJMSkgfHwgZGVmaW5lZChDT05GSUdfUENJMikKLSNkZWZpbmUgUENJX0VOViBcCi0gInBjaXJlZz1tZCAke2F9MDAwIDM7IGVjaG8gbzttZCAke2F9YzAwIDI1OyBlY2hvIGk7IG1kICR7YX1kYTAgMTU7IiBcCi0JImVjaG8gZTttZCAke2F9ZTAwIDlcMCIgXAotICJwY2llcnI9bWQgJHthfWUwMCA4OyBwY2kgZC5iICRiLjAgNyAxO3BjaSBkLncgJGIuMCAxZSAxOyIgXAotCSJwY2kgZC53ICRiLjAgNTYgMVwwIiBcCi0gInBjaWVycmM9bXcgJHthfWUwMCBmZmZmZmZmZjsgbXcgJHthfWUwYyAwOyBwY2kgdy5iICRiLjAgNyBmZjsiIFwKLQkicGNpIHcudyAkYi4wIDFlIGZmZmY7IHBjaSB3LncgJGIuMCA1NiBmZmZmXDAiCi0jZWxzZQotI2RlZmluZQlQQ0lfRU5WICIiCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX1BDSTEpCi0jZGVmaW5lIFBDSV9FTlYxIFwKLSAicGNpMXJlZ3M9c2V0ZW52IGEgZTAwMDg7IHJ1biBwY2lyZWdcMCIgXAotICJwY2kxZXJyPXNldGVudiBhIGUwMDA4OyBzZXRlbnYgYiAwOyBydW4gcGNpZXJyXDAiIFwKLSAicGNpMWVycmM9c2V0ZW52IGEgZTAwMDg7IHNldGVudiBiIDA7IHJ1biBwY2llcnJjXDAiCi0jZWxzZQotI2RlZmluZQlQQ0lfRU5WMSAiIgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19QQ0kyKQotI2RlZmluZSBQQ0lfRU5WMiBcCi0gInBjaTJyZWdzPXNldGVudiBhIGUwMDA5OyBydW4gcGNpcmVnXDAiIFwKLSAicGNpMmVycj1zZXRlbnYgYSBlMDAwOTsgc2V0ZW52IGIgMTIzOyBydW4gcGNpZXJyXDAiCVwKLSAicGNpMmVycmM9c2V0ZW52IGEgZTAwMDk7IHNldGVudiBiIDEyMzsgcnVuIHBjaWVycmNcMCIKLSNlbHNlCi0jZGVmaW5lCVBDSV9FTlYyICIiCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX1RTRUNfRU5FVCkKLSNkZWZpbmUgRU5FVF9FTlYgXAotICJlbmV0cmVnMT1tZCAke2F9MDAwIDI7IG1kICR7YX0wMTAgOTsgbWQgJHthfTA1MCA0OyBtZCAke2F9MDhjIDE7IiBcCi0JIm1kICR7YX0wOTggMlwwIiBcCi0gImVuZXRyZWd0PWVjaG8gdDttZCAke2F9MTAwIDY7IG1kICR7YX0xNDAgMjsgbWQgJHthfTE4MCAxMDsgbWQgJHthfTIwMCAxMFwwIiBcCi0gImVuZXRyZWdyPWVjaG8gcjttZCAke2F9MzAwIDY7IG1kICR7YX0zMzAgNTsgbWQgJHthfTM4MCAxMDsgbWQgJHthfTQwMCAxMFwwIiBcCi0gImVuZXRyZWdtPWVjaG8gbWFjO21kICR7YX01MDAgNTsgbWQgJHthfTUyMCAyODtlY2hvIGZpZm87bWQgJHthfWEwMCAxOyIgXAotCSJlY2hvIG1pYjttZCAke2F9NjgwIDMxXDAiIFwKLSAiZW5ldHJlZz1ydW4gZW5ldHJlZzE7IHJ1biBlbmV0cmVnbTsgcnVuIGVuZXRyZWd0OyBydW4gZW5ldHJlZ3JcMCIgXAotICJlbmV0MXJlZ3M9c2V0ZW52IGEgZTAwMjQ7IHJ1biBlbmV0cmVnXDAiIFwKLSAiZW5ldDJyZWdzPXNldGVudiBhIGUwMDI1OyBydW4gZW5ldHJlZ1wwIiBcCi0gImVuZXQzcmVncz1zZXRlbnYgYSBlMDAyNjsgcnVuIGVuZXRyZWdcMCIgXAotICJlbmV0NHJlZ3M9c2V0ZW52IGEgZTAwMjc7IHJ1biBlbmV0cmVnXDAiCi0jZWxzZQotI2RlZmluZSBFTkVUX0VOViAiIgotI2VuZGlmCi0KICNkZWZpbmUJQ09ORklHX0VYVFJBX0VOVl9TRVRUSU5HUwkJCQlcCiAgIm5ldGRldj1ldGgwXDAiCQkJCQkJXAogICJ1Ym9vdD0iIE1LX1NUUihDT05GSUdfVUJPT1RQQVRIKSAiXDAiCQkJCVwKQEAgLTY0NywyOCArNTc5LDcgQEAKICAicmFtZGlza2FkZHI9MjAwMDAwMFwwIgkJCVwKICAicmFtZGlza2ZpbGU9cmFtZGlzay51Ym9vdFwwIgkJCVwKICAiZmR0YWRkcj1jMDAwMDBcMCIJCQkJXAotICJmZHRmaWxlPW1wYzg1NDhjZHMuZHRiXDAiCQkJXAotICJlb2k9bXcgZTAwNDAwYjAgMFwwIgkJCQlcCi0gImlhY2s9bWQgZTAwNDAwYTAgMVwwIgkJCQlcCi0gImRkcnJlZz1tZCAke2F9MDAwIDg7IG1kICR7YX0wODAgODttZCAke2F9MTAwIGQ7IG1kICR7YX0xNDAgNDsgbWQgJHthfWJmMCA0OyIgXAotCSJtZCAke2F9ZTAwIDM7IG1kICR7YX1lMjAgMzsgbWQgJHthfWU0MCA3OyBtZCAke2F9ZjAwIDVcMCIgXAotICJkZHJyZWdzPXNldGVudiBhIGUwMDAyOyBydW4gZGRycmVnXDAiCQlcCi0gImd1cmVnPW1kICR7YX0wMDAgMmM7IG1kICR7YX0wYjAgMTsgbWQgJHthfTBjMCAxOyBtZCAke2F9YjIwIDM7IiBcCi0JIm1kICR7YX1lMDAgMTsgbWQgJHthfWU2MCAxOyBtZCAke2F9ZWYwIDE1XDAiCVwKLSAiZ3VyZWdzPXNldGVudiBhIGUwMGUwOyBydW4gZ3VyZWdcMCIJCVwKLSAiZWNtcmVnPW1kICR7YX0wMDAgMTsgbWQgJHthfTAxMCAxOyBtZCAke2F9YmY4IDI7IG1kICR7YX1lMDAgNlwwIiBcCi0gImVjbXJlZ3M9c2V0ZW52IGEgZTAwMDE7IHJ1biBlY21yZWdcMCIgXAotICJsYXdyZWdzPW1kIGUwMDAwYzA4IDRiXDAiIFwKLSAibGJjcmVncz1tZCBlMDAwNTAwMCAzNlwwIiBcCi0gImRtYTByZWdzPW1kIGUwMDIxMTAwIDEyXDAiIFwKLSAiZG1hMXJlZ3M9bWQgZTAwMjExODAgMTJcMCIgXAotICJkbWEycmVncz1tZCBlMDAyMTIwMCAxMlwwIiBcCi0gImRtYTNyZWdzPW1kIGUwMDIxMjgwIDEyXDAiIFwKLSBQQ0lFX0VOViBcCi0gUENJX0VOViBcCi0gUENJX0VOVjEgXAotIFBDSV9FTlYyIFwKLSBFTkVUX0VOVgorICJmZHRmaWxlPW1wYzg1NDhjZHMuZHRiXDAiCiAKICNkZWZpbmUgQ09ORklHX05GU0JPT1RDT01NQU5ECQkJCQkJXAogICAgInNldGVudiBib290YXJncyByb290PS9kZXYvbmZzIHJ3ICIJCQkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9NUEM4NTU1Q0RTLmggYi9pbmNsdWRlL2NvbmZpZ3MvTVBDODU1NUNEUy5oCmluZGV4IGM0MTRiZjAuLjkwZWYzZDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9NUEM4NTU1Q0RTLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL01QQzg1NTVDRFMuaApAQCAtMzA5LDE0ICszMDksOSBAQAogI2VuZGlmCiAKIC8qIHBhc3Mgb3BlbiBmaXJtd2FyZSBmbGF0IHRyZWUgKi8KLSNkZWZpbmUgQ09ORklHX09GX0ZMQVRfVFJFRQkxCi0jZGVmaW5lIENPTkZJR19PRl9CT0FSRF9TRVRVUAkxCi0KLSNkZWZpbmUgT0ZfQ1BVCQkJIlBvd2VyUEMsODU1NUAwIgotI2RlZmluZSBPRl9TT0MJCQkic29jODU1NUBlMDAwMDAwMCIKLSNkZWZpbmUgT0ZfVEJDTEsJCShiZC0+YmlfYnVzZnJlcSAvIDgpCi0jZGVmaW5lIE9GX1NURE9VVF9QQVRICQkiL3NvYzg1NTVAZTAwMDAwMDAvc2VyaWFsQDQ2MDAiCi0jZGVmaW5lIE9GX1BDSQkJCSJwY2lAZTAwMDgwMDAiCisjZGVmaW5lIENPTkZJR19PRl9MSUJGRFQJCTEKKyNkZWZpbmUgQ09ORklHX09GX0JPQVJEX1NFVFVQCQkxCisjZGVmaW5lIENPTkZJR19PRl9TVERPVVRfVklBX0FMSUFTCTEKIAogLyoKICAqIEkyQwpAQCAtNDIyLDYgKzQxNyw3IEBACiAjZGVmaW5lIENPTkZJR19DTURfUElORwogI2RlZmluZSBDT05GSUdfQ01EX0kyQwogI2RlZmluZSBDT05GSUdfQ01EX01JSQorI2RlZmluZSBDT05GSUdfQ01EX0VMRgogCiAjaWYgZGVmaW5lZChDT05GSUdfUENJKQogICAgICNkZWZpbmUgQ09ORklHX0NNRF9QQ0kKQEAgLTQzNCw2ICs0MzAsNyBAQAogICogTWlzY2VsbGFuZW91cyBjb25maWd1cmFibGUgb3B0aW9ucwogICovCiAjZGVmaW5lIENGR19MT05HSEVMUAkJCS8qIHVuZGVmIHRvIHNhdmUgbWVtb3J5CSovCisjZGVmaW5lIENPTkZJR19DTURMSU5FX0VESVRJTkcJCS8qIENvbW1hbmQtbGluZSBlZGl0aW5nICovCiAjZGVmaW5lIENGR19MT0FEX0FERFIJMHgyMDAwMDAwCS8qIGRlZmF1bHQgbG9hZCBhZGRyZXNzICovCiAjZGVmaW5lIENGR19QUk9NUFQJIj0+ICIJCS8qIE1vbml0b3IgQ29tbWFuZCBQcm9tcHQgKi8KICNpZiBkZWZpbmVkKENPTkZJR19DTURfS0dEQikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9NUEM4NTYwQURTLmggYi9pbmNsdWRlL2NvbmZpZ3MvTVBDODU2MEFEUy5oCmluZGV4IGE4ZjM2MmYuLmQ0ZTBkZTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9NUEM4NTYwQURTLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL01QQzg1NjBBRFMuaApAQCAtMjg5LDEzICsyODksOSBAQAogI2VuZGlmCiAKIC8qIHBhc3Mgb3BlbiBmaXJtd2FyZSBmbGF0IHRyZWUgKi8KLSNkZWZpbmUgQ09ORklHX09GX0ZMQVRfVFJFRQkxCi0jZGVmaW5lIENPTkZJR19PRl9CT0FSRF9TRVRVUAkxCi0KLSNkZWZpbmUgT0ZfQ1BVCQkJIlBvd2VyUEMsODU2MEAwIgotI2RlZmluZSBPRl9TT0MJCQkic29jODU2MEBlMDAwMDAwMCIKLSNkZWZpbmUgT0ZfVEJDTEsJCShiZC0+YmlfYnVzZnJlcSAvIDgpCi0jZGVmaW5lIE9GX1NURE9VVF9QQVRICQkiL3NvYzg1NjBAZTAwMDAwMDAvc2VyaWFsQDQ1MDAiCisjZGVmaW5lIENPTkZJR19PRl9MSUJGRFQJCTEKKyNkZWZpbmUgQ09ORklHX09GX0JPQVJEX1NFVFVQCQkxCisjZGVmaW5lIENPTkZJR19PRl9TVERPVVRfVklBX0FMSUFTCTEKIAogLyoKICAqIEkyQwpAQCAtNDUwLDYgKzQ0Niw3IEBACiAKICNkZWZpbmUgQ09ORklHX0NNRF9QSU5HCiAjZGVmaW5lIENPTkZJR19DTURfSTJDCisjZGVmaW5lIENPTkZJR19DTURfRUxGCiAKICNpZiBkZWZpbmVkKENPTkZJR19QQ0kpCiAgICAgI2RlZmluZSBDT05GSUdfQ01EX1BDSQpAQCAtNDcxLDYgKzQ2OCw3IEBACiAgKiBNaXNjZWxsYW5lb3VzIGNvbmZpZ3VyYWJsZSBvcHRpb25zCiAgKi8KICNkZWZpbmUgQ0ZHX0xPTkdIRUxQCQkJLyogdW5kZWYgdG8gc2F2ZSBtZW1vcnkJKi8KKyNkZWZpbmUgQ09ORklHX0NNRExJTkVfRURJVElORwkJLyogQ29tbWFuZC1saW5lIGVkaXRpbmcgKi8KICNkZWZpbmUgQ0ZHX0xPQURfQUREUgkweDEwMDAwMDAJLyogZGVmYXVsdCBsb2FkIGFkZHJlc3MgKi8KICNkZWZpbmUgQ0ZHX1BST01QVAkiPT4gIgkJLyogTW9uaXRvciBDb21tYW5kIFByb21wdCAqLwogCkBAIC01MjUsNiArNTIzLDggQEAKICNkZWZpbmUgQ09ORklHX0VUSDFBRERSICAwMDpFMDowQzowMDowMTpGRAogI2RlZmluZSBDT05GSUdfSEFTX0VUSDIKICNkZWZpbmUgQ09ORklHX0VUSDJBRERSICAwMDpFMDowQzowMDowMjpGRAorI2RlZmluZSBDT05GSUdfSEFTX0VUSDMKKyNkZWZpbmUgQ09ORklHX0VUSDNBRERSICAwMDpFMDowQzowMDowMzpGRAogI2VuZGlmCiAKICNkZWZpbmUgQ09ORklHX0lQQUREUiAgICAxOTIuMTY4LjEuMjUzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvTVBDODU2OE1EUy5oIGIvaW5jbHVkZS9jb25maWdzL01QQzg1NjhNRFMuaAppbmRleCBiOTM2NmNjLi41OWY0OTBlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvTVBDODU2OE1EUy5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9NUEM4NTY4TURTLmgKQEAgLTMzLDcgKzMzLDExIEBACiAjZGVmaW5lIENPTkZJR19NUEM4NTY4CQkxCS8qIE1QQzg1Njggc3BlY2lmaWMgKi8KICNkZWZpbmUgQ09ORklHX01QQzg1NjhNRFMJMQkvKiBNUEM4NTY4TURTIGJvYXJkIHNwZWNpZmljICovCiAKLSNkZWZpbmUgQ09ORklHX1BDSQorI2RlZmluZSBDT05GSUdfUENJCQkxCS8qIEVuYWJsZSBQQ0kvUENJRSAqLworI2RlZmluZSBDT05GSUdfUENJMQkJMQkvKiBQQ0kgY29udHJvbGxlciAqLworI2RlZmluZSBDT05GSUdfUENJRTEJCTEJLyogUENJRSBjb250cm9sbGVyICovCisjZGVmaW5lIENPTkZJR19GU0xfUENJX0lOSVQJMQkvKiB1c2UgY29tbW9uIGZzbCBwY2kgaW5pdCBjb2RlICovCisjZGVmaW5lIENPTkZJR19GU0xfUENJRV9SRVNFVAkxCS8qIG5lZWQgUENJZSByZXNldCBlcnJhdGEgKi8KICNkZWZpbmUgQ09ORklHX1RTRUNfRU5FVCAJCS8qIHRzZWMgZXRoZXJuZXQgc3VwcG9ydCAqLwogI2RlZmluZSBDT05GSUdfUUUJCQkvKiBFbmFibGUgUUUgKi8KICNkZWZpbmUgQ09ORklHX0VOVl9PVkVSV1JJVEUKQEAgLTg3LDYgKzkxLDkgQEAKICNkZWZpbmUgQ0ZHX0NDU1JCQVIJCTB4ZTAwMDAwMDAJLyogcmVsb2NhdGVkIENDU1JCQVIgKi8KICNkZWZpbmUgQ0ZHX0lNTVIJCUNGR19DQ1NSQkFSCS8qIFBRSUkgdXNlcyBDRkdfSU1NUiAqLwogCisjZGVmaW5lIENGR19QQ0kxX0FERFIgICAgICAgICAgIChDRkdfQ0NTUkJBUisweDgwMDApCisjZGVmaW5lIENGR19QQ0lFMV9BRERSICAgICAgICAgIChDRkdfQ0NTUkJBUisweGEwMDApCisKIC8qCiAgKiBERFIgU2V0dXAKICAqLwpAQCAtMjkwLDE0ICsyOTcsOSBAQAogI2VuZGlmCiAKIC8qIHBhc3Mgb3BlbiBmaXJtd2FyZSBmbGF0IHRyZWUgKi8KLSNkZWZpbmUgQ09ORklHX09GX0ZMQVRfVFJFRQkxCi0jZGVmaW5lIENPTkZJR19PRl9CT0FSRF9TRVRVUAkxCi0KLSNkZWZpbmUgT0ZfQ1BVCQkJIlBvd2VyUEMsODU2OEAwIgotI2RlZmluZSBPRl9TT0MJCQkic29jODU2OEBlMDAwMDAwMCIKLSNkZWZpbmUgT0ZfUUUJCQkicWVAZTAwODAwMDAiCi0jZGVmaW5lIE9GX1RCQ0xLCQkoYmQtPmJpX2J1c2ZyZXEgLyA4KQotI2RlZmluZSBPRl9TVERPVVRfUEFUSAkJIi9zb2M4NTY4QGUwMDAwMDAwL3NlcmlhbEA0NTAwIgorI2RlZmluZSBDT05GSUdfT0ZfTElCRkRUCQkxCisjZGVmaW5lIENPTkZJR19PRl9CT0FSRF9TRVRVUAkJMQorI2RlZmluZSBDT05GSUdfT0ZfU1RET1VUX1ZJQV9BTElBUwkxCiAKIC8qCiAgKiBJMkMKQEAgLTMyNSwxMiArMzI3LDEyIEBACiAjZGVmaW5lIENGR19QQ0kxX0lPX1BIWVMJMHhlMjAwMDAwMAogI2RlZmluZSBDRkdfUENJMV9JT19TSVpFCTB4MDA4MDAwMDAJLyogOE0gKi8KIAotI2RlZmluZSBDRkdfUEVYX01FTV9CQVNFCTB4YTAwMDAwMDAKLSNkZWZpbmUgQ0ZHX1BFWF9NRU1fUEhZUwlDRkdfUEVYX01FTV9CQVNFCi0jZGVmaW5lIENGR19QRVhfTUVNX1NJWkUJMHgxMDAwMDAwMAkvKiAyNTZNICovCi0jZGVmaW5lIENGR19QRVhfSU9fQkFTRQkJMHgwMDAwMDAwMAotI2RlZmluZSBDRkdfUEVYX0lPX1BIWVMJCTB4ZTI4MDAwMDAKLSNkZWZpbmUgQ0ZHX1BFWF9JT19TSVpFCQkweDAwODAwMDAwCS8qIDhNICovCisjZGVmaW5lIENGR19QQ0lFMV9NRU1fQkFTRQkweGEwMDAwMDAwCisjZGVmaW5lIENGR19QQ0lFMV9NRU1fUEhZUwlDRkdfUENJRTFfTUVNX0JBU0UKKyNkZWZpbmUgQ0ZHX1BDSUUxX01FTV9TSVpFCTB4MjAwMDAwMDAJLyogNTEyTSAqLworI2RlZmluZSBDRkdfUENJRTFfSU9fQkFTRQkweDAwMDAwMDAwCisjZGVmaW5lIENGR19QQ0lFMV9JT19QSFlTCTB4ZTI4MDAwMDAKKyNkZWZpbmUgQ0ZHX1BDSUUxX0lPX1NJWkUJMHgwMDgwMDAwMAkvKiA4TSAqLwogCiAjZGVmaW5lIENGR19TUklPX01FTV9CQVNFCTB4YzAwMDAwMDAKIApAQCAtMzgzLDYgKzM4NSwxMSBAQAogI3VuZGVmIENPTkZJR19QQ0lfU0NBTl9TSE9XCQkvKiBzaG93IHBjaSBkZXZpY2VzIG9uIHN0YXJ0dXAgKi8KICNkZWZpbmUgQ0ZHX1BDSV9TVUJTWVNfVkVORE9SSUQgMHgxMDU3ICAvKiBNb3Rvcm9sYSAqLwogCisvKiBQQ0kgdmlldyBvZiBTeXN0ZW0gTWVtb3J5ICovCisjZGVmaW5lIENGR19QQ0lfTUVNT1JZX0JVUyAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgQ0ZHX1BDSV9NRU1PUllfUEhZUyAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBDRkdfUENJX01FTU9SWV9TSVpFICAgICAweDgwMDAwMDAwCisKICNlbmRpZgkvKiBDT05GSUdfUENJICovCiAKICNpZm5kZWYgQ09ORklHX05FVF9NVUxUSQpAQCAtNDQwLDYgKzQ0Nyw3IEBACiAjZGVmaW5lIENPTkZJR19DTURfUElORwogI2RlZmluZSBDT05GSUdfQ01EX0kyQwogI2RlZmluZSBDT05GSUdfQ01EX01JSQorI2RlZmluZSBDT05GSUdfQ01EX0VMRgogCiAjaWYgZGVmaW5lZChDT05GSUdfUENJKQogICAgICNkZWZpbmUgQ09ORklHX0NNRF9QQ0kKQEAgLTQ1Miw2ICs0NjAsNyBAQAogICogTWlzY2VsbGFuZW91cyBjb25maWd1cmFibGUgb3B0aW9ucwogICovCiAjZGVmaW5lIENGR19MT05HSEVMUAkJCS8qIHVuZGVmIHRvIHNhdmUgbWVtb3J5CSovCisjZGVmaW5lIENPTkZJR19DTURMSU5FX0VESVRJTkcJCS8qIENvbW1hbmQtbGluZSBlZGl0aW5nICovCiAjZGVmaW5lIENGR19MT0FEX0FERFIJMHgyMDAwMDAwCS8qIGRlZmF1bHQgbG9hZCBhZGRyZXNzICovCiAjZGVmaW5lIENGR19QUk9NUFQJIj0+ICIJCS8qIE1vbml0b3IgQ29tbWFuZCBQcm9tcHQgKi8KICNpZiBkZWZpbmVkKENPTkZJR19DTURfS0dEQikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9UQjUyMDAuaCBiL2luY2x1ZGUvY29uZmlncy9UQjUyMDAuaAppbmRleCAxYzZhOWFlLi5hZThkOWFiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvVEI1MjAwLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL1RCNTIwMC5oCkBAIC0zMzUsNyArMzM1LDcgQEAKICNlbHNlCiAjZGVmaW5lIENGR19NT05JVE9SX0xFTgkJKDM4NCA8PCAxMCkJLyogUmVzZXJ2ZSAzODQga0IgZm9yIE1vbml0b3IJKi8KICNlbmRpZiAvKiBDT05GSUdfVFFNNTIwMF9CICovCi0jZGVmaW5lIENGR19NQUxMT0NfTEVOCQkoMjU2IDw8IDEwKQkvKiBSZXNlcnZlIDI1NiBrQiBmb3IgbWFsbG9jKCkJKi8KKyNkZWZpbmUgQ0ZHX01BTExPQ19MRU4JCSgxMDI0IDw8IDEwKQkvKiBSZXNlcnZlIDEwMjQga0IgZm9yIG1hbGxvYygpCSovCiAjZGVmaW5lIENGR19CT09UTUFQU1oJCSg4IDw8IDIwKQkvKiBJbml0aWFsIE1lbW9yeSBtYXAgZm9yIExpbnV4ICovCiAKIC8qCkBAIC0zOTIsNiArMzkyLDcgQEAKICAqLwogI2RlZmluZSBDRkdfTE9OR0hFTFAJCQkvKiB1bmRlZiB0byBzYXZlIG1lbW9yeQkgICAgKi8KICNkZWZpbmUgQ0ZHX1BST01QVAkJIj0+ICIJLyogTW9uaXRvciBDb21tYW5kIFByb21wdCAgICovCisjZGVmaW5lIENPTkZJR19DTURMSU5FX0VESVRJTkcJMQkvKiBhZGQgY29tbWFuZCBsaW5lIGhpc3RvcnkgKi8KICNpZiBkZWZpbmVkKENPTkZJR19DTURfS0dEQikKICNkZWZpbmUgQ0ZHX0NCU0laRQkJMTAyNAkvKiBDb25zb2xlIEkvTyBCdWZmZXIgU2l6ZSAgKi8KICNlbHNlCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvVFFNODIzTC5oIGIvaW5jbHVkZS9jb25maWdzL1RRTTgyM0wuaAppbmRleCA3YTM4MDEwLi5iZTViNGQzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvVFFNODIzTC5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9UUU04MjNMLmgKQEAgLTE5MiwxMSArMTkyLDE1IEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBGTEFTSCBvcmdhbml6YXRpb24KICAqLwotI2RlZmluZSBDRkdfTUFYX0ZMQVNIX0JBTktTCTIJLyogbWF4IG51bWJlciBvZiBtZW1vcnkgYmFua3MJCSovCi0jZGVmaW5lIENGR19NQVhfRkxBU0hfU0VDVAk3MQkvKiBtYXggbnVtYmVyIG9mIHNlY3RvcnMgb24gb25lIGNoaXAJKi8KIAotI2RlZmluZSBDRkdfRkxBU0hfRVJBU0VfVE9VVAkxMjAwMDAJLyogVGltZW91dCBmb3IgRmxhc2ggRXJhc2UgKGluIG1zKQkqLwotI2RlZmluZSBDRkdfRkxBU0hfV1JJVEVfVE9VVAk1MDAJLyogVGltZW91dCBmb3IgRmxhc2ggV3JpdGUgKGluIG1zKQkqLworLyogdXNlIENGSSBmbGFzaCBkcml2ZXIgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX0NGSQkJMQkvKiBGbGFzaCBpcyBDRkkgY29uZm9ybWFudCAqLworI2RlZmluZSBDRkdfRkxBU0hfQ0ZJX0RSSVZFUgkxCS8qIFVzZSB0aGUgY29tbW9uIGRyaXZlciAqLworI2RlZmluZSBDRkdfRkxBU0hfQkFOS1NfTElTVAl7IENGR19GTEFTSF9CQVNFIH0KKyNkZWZpbmUgQ0ZHX0ZMQVNIX0VNUFRZX0lORk8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX1VTRV9CVUZGRVJfV1JJVEUJMQorI2RlZmluZSBDRkdfTUFYX0ZMQVNIX0JBTktTCTIJLyogbWF4IG51bWJlciBvZiBtZW1vcnkgYmFua3MgKi8KKyNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9TRUNUCTcxCS8qIG1heCBudW1iZXIgb2Ygc2VjdG9ycyBvbiBvbmUgY2hpcCAqLwogCiAjZGVmaW5lCUNGR19FTlZfSVNfSU5fRkxBU0gJMQogI2RlZmluZQlDRkdfRU5WX09GRlNFVAkJMHg4MDAwCS8qICAgT2Zmc2V0ICAgb2YgRW52aXJvbm1lbnQgU2VjdG9yCSovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvVFFNODIzTS5oIGIvaW5jbHVkZS9jb25maWdzL1RRTTgyM00uaAppbmRleCBlOGI2YTgwLi5hMGMwMWI2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvVFFNODIzTS5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9UUU04MjNNLmgKQEAgLTE4OCwxNSArMTg4LDE5IEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBGTEFTSCBvcmdhbml6YXRpb24KICAqLwotI2RlZmluZSBDRkdfTUFYX0ZMQVNIX0JBTktTCTEJLyogbWF4IG51bWJlciBvZiBtZW1vcnkgYmFua3MJCSovCi0jZGVmaW5lIENGR19NQVhfRkxBU0hfU0VDVAkyNTYJLyogbWF4IG51bWJlciBvZiBzZWN0b3JzIG9uIG9uZSBjaGlwCSovCiAKLSNkZWZpbmUgQ0ZHX0ZMQVNIX0VSQVNFX1RPVVQJMTIwMDAwCS8qIFRpbWVvdXQgZm9yIEZsYXNoIEVyYXNlIChpbiBtcykJKi8KLSNkZWZpbmUgQ0ZHX0ZMQVNIX1dSSVRFX1RPVVQJNTAwCS8qIFRpbWVvdXQgZm9yIEZsYXNoIFdyaXRlIChpbiBtcykJKi8KKy8qIHVzZSBDRkkgZmxhc2ggZHJpdmVyICovCisjZGVmaW5lIENGR19GTEFTSF9DRkkJCTEJLyogRmxhc2ggaXMgQ0ZJIGNvbmZvcm1hbnQgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX0NGSV9EUklWRVIJMQkvKiBVc2UgdGhlIGNvbW1vbiBkcml2ZXIgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX0JBTktTX0xJU1QJeyBDRkdfRkxBU0hfQkFTRSB9CisjZGVmaW5lIENGR19GTEFTSF9FTVBUWV9JTkZPCisjZGVmaW5lIENGR19GTEFTSF9VU0VfQlVGRkVSX1dSSVRFCTEKKyNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9CQU5LUwkxCS8qIG1heCBudW1iZXIgb2YgbWVtb3J5IGJhbmtzICovCisjZGVmaW5lIENGR19NQVhfRkxBU0hfU0VDVAkyNTYJLyogbWF4IG51bWJlciBvZiBzZWN0b3JzIG9uIG9uZSBjaGlwICovCiAKICNkZWZpbmUJQ0ZHX0VOVl9JU19JTl9GTEFTSAkxCiAjZGVmaW5lCUNGR19FTlZfT0ZGU0VUCQkweDQwMDAwCS8qICAgT2Zmc2V0ICAgb2YgRW52aXJvbm1lbnQgU2VjdG9yCSovCi0jZGVmaW5lCUNGR19FTlZfU0laRQkJMHgwODAwMAkvKiBUb3RhbCBTaXplIG9mIEVudmlyb25tZW50IFNlY3RvcgkqLworI2RlZmluZQlDRkdfRU5WX1NJWkUJCTB4MDgwMDAJLyogVG90YWwgU2l6ZSBvZiBFbnZpcm9ubWVudAkJKi8KICNkZWZpbmUJQ0ZHX0VOVl9TRUNUX1NJWkUJMHgyMDAwMAkvKiBUb3RhbCBTaXplIG9mIEVudmlyb25tZW50IFNlY3RvcgkqLwogCiAvKiBBZGRyZXNzIGFuZCBzaXplIG9mIFJlZHVuZGFudCBFbnZpcm9ubWVudCBTZWN0b3IJKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9UUU04NTBMLmggYi9pbmNsdWRlL2NvbmZpZ3MvVFFNODUwTC5oCmluZGV4IGJlZWNhNjMuLmY1MWIxMmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9UUU04NTBMLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL1RRTTg1MEwuaApAQCAtMTc5LDExICsxNzksMTUgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIEZMQVNIIG9yZ2FuaXphdGlvbgogICovCi0jZGVmaW5lIENGR19NQVhfRkxBU0hfQkFOS1MJMgkvKiBtYXggbnVtYmVyIG9mIG1lbW9yeSBiYW5rcwkJKi8KLSNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9TRUNUCTcxCS8qIG1heCBudW1iZXIgb2Ygc2VjdG9ycyBvbiBvbmUgY2hpcAkqLwogCi0jZGVmaW5lIENGR19GTEFTSF9FUkFTRV9UT1VUCTEyMDAwMAkvKiBUaW1lb3V0IGZvciBGbGFzaCBFcmFzZSAoaW4gbXMpCSovCi0jZGVmaW5lIENGR19GTEFTSF9XUklURV9UT1VUCTUwMAkvKiBUaW1lb3V0IGZvciBGbGFzaCBXcml0ZSAoaW4gbXMpCSovCisvKiB1c2UgQ0ZJIGZsYXNoIGRyaXZlciAqLworI2RlZmluZSBDRkdfRkxBU0hfQ0ZJCQkxCS8qIEZsYXNoIGlzIENGSSBjb25mb3JtYW50ICovCisjZGVmaW5lIENGR19GTEFTSF9DRklfRFJJVkVSCTEJLyogVXNlIHRoZSBjb21tb24gZHJpdmVyICovCisjZGVmaW5lIENGR19GTEFTSF9CQU5LU19MSVNUCXsgQ0ZHX0ZMQVNIX0JBU0UgfQorI2RlZmluZSBDRkdfRkxBU0hfRU1QVFlfSU5GTworI2RlZmluZSBDRkdfRkxBU0hfVVNFX0JVRkZFUl9XUklURQkxCisjZGVmaW5lIENGR19NQVhfRkxBU0hfQkFOS1MJMgkvKiBtYXggbnVtYmVyIG9mIG1lbW9yeSBiYW5rcyAqLworI2RlZmluZSBDRkdfTUFYX0ZMQVNIX1NFQ1QJNzEJLyogbWF4IG51bWJlciBvZiBzZWN0b3JzIG9uIG9uZSBjaGlwICovCiAKICNkZWZpbmUJQ0ZHX0VOVl9JU19JTl9GTEFTSAkxCiAjZGVmaW5lCUNGR19FTlZfT0ZGU0VUCQkweDgwMDAJLyogICBPZmZzZXQgICBvZiBFbnZpcm9ubWVudCBTZWN0b3IJKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9UUU04NTBNLmggYi9pbmNsdWRlL2NvbmZpZ3MvVFFNODUwTS5oCmluZGV4IGQ1NjA5YzEuLmE3MjVlNzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9UUU04NTBNLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL1RRTTg1ME0uaApAQCAtMTc3LDE1ICsxNzcsMTkgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIEZMQVNIIG9yZ2FuaXphdGlvbgogICovCi0jZGVmaW5lIENGR19NQVhfRkxBU0hfQkFOS1MJMQkvKiBtYXggbnVtYmVyIG9mIG1lbW9yeSBiYW5rcwkJKi8KLSNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9TRUNUCTI1NgkvKiBtYXggbnVtYmVyIG9mIHNlY3RvcnMgb24gb25lIGNoaXAJKi8KIAotI2RlZmluZSBDRkdfRkxBU0hfRVJBU0VfVE9VVAkxMjAwMDAJLyogVGltZW91dCBmb3IgRmxhc2ggRXJhc2UgKGluIG1zKQkqLwotI2RlZmluZSBDRkdfRkxBU0hfV1JJVEVfVE9VVAk1MDAJLyogVGltZW91dCBmb3IgRmxhc2ggV3JpdGUgKGluIG1zKQkqLworLyogdXNlIENGSSBmbGFzaCBkcml2ZXIgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX0NGSQkJMQkvKiBGbGFzaCBpcyBDRkkgY29uZm9ybWFudCAqLworI2RlZmluZSBDRkdfRkxBU0hfQ0ZJX0RSSVZFUgkxCS8qIFVzZSB0aGUgY29tbW9uIGRyaXZlciAqLworI2RlZmluZSBDRkdfRkxBU0hfQkFOS1NfTElTVAl7IENGR19GTEFTSF9CQVNFIH0KKyNkZWZpbmUgQ0ZHX0ZMQVNIX0VNUFRZX0lORk8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX1VTRV9CVUZGRVJfV1JJVEUJMQorI2RlZmluZSBDRkdfTUFYX0ZMQVNIX0JBTktTCTEJLyogbWF4IG51bWJlciBvZiBtZW1vcnkgYmFua3MgKi8KKyNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9TRUNUCTI1NgkvKiBtYXggbnVtYmVyIG9mIHNlY3RvcnMgb24gb25lIGNoaXAgKi8KIAogI2RlZmluZQlDRkdfRU5WX0lTX0lOX0ZMQVNICTEKICNkZWZpbmUJQ0ZHX0VOVl9PRkZTRVQJCTB4NDAwMDAJLyogICBPZmZzZXQgICBvZiBFbnZpcm9ubWVudCBTZWN0b3IJKi8KLSNkZWZpbmUJQ0ZHX0VOVl9TSVpFCQkweDA4MDAwCS8qIFRvdGFsIFNpemUgb2YgRW52aXJvbm1lbnQgU2VjdG9yCSovCisjZGVmaW5lCUNGR19FTlZfU0laRQkJMHgwODAwMAkvKiBUb3RhbCBTaXplIG9mIEVudmlyb25tZW50CQkqLwogI2RlZmluZQlDRkdfRU5WX1NFQ1RfU0laRQkweDIwMDAwCS8qIFRvdGFsIFNpemUgb2YgRW52aXJvbm1lbnQgU2VjdG9yCSovCiAKIC8qIEFkZHJlc3MgYW5kIHNpemUgb2YgUmVkdW5kYW50IEVudmlyb25tZW50IFNlY3RvcgkqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL1RRTTg1NUwuaCBiL2luY2x1ZGUvY29uZmlncy9UUU04NTVMLmgKaW5kZXggZTM1YjViMi4uMTZkYzNlYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL1RRTTg1NUwuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvVFFNODU1TC5oCkBAIC0xODMsMTEgKzE4MywxNSBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogRkxBU0ggb3JnYW5pemF0aW9uCiAgKi8KLSNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9CQU5LUwkyCS8qIG1heCBudW1iZXIgb2YgbWVtb3J5IGJhbmtzCQkqLwotI2RlZmluZSBDRkdfTUFYX0ZMQVNIX1NFQ1QJNzEJLyogbWF4IG51bWJlciBvZiBzZWN0b3JzIG9uIG9uZSBjaGlwCSovCiAKLSNkZWZpbmUgQ0ZHX0ZMQVNIX0VSQVNFX1RPVVQJMTIwMDAwCS8qIFRpbWVvdXQgZm9yIEZsYXNoIEVyYXNlIChpbiBtcykJKi8KLSNkZWZpbmUgQ0ZHX0ZMQVNIX1dSSVRFX1RPVVQJNTAwCS8qIFRpbWVvdXQgZm9yIEZsYXNoIFdyaXRlIChpbiBtcykJKi8KKy8qIHVzZSBDRkkgZmxhc2ggZHJpdmVyICovCisjZGVmaW5lIENGR19GTEFTSF9DRkkJCTEJLyogRmxhc2ggaXMgQ0ZJIGNvbmZvcm1hbnQgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX0NGSV9EUklWRVIJMQkvKiBVc2UgdGhlIGNvbW1vbiBkcml2ZXIgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX0JBTktTX0xJU1QJeyBDRkdfRkxBU0hfQkFTRSB9CisjZGVmaW5lIENGR19GTEFTSF9FTVBUWV9JTkZPCisjZGVmaW5lIENGR19GTEFTSF9VU0VfQlVGRkVSX1dSSVRFCTEKKyNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9CQU5LUwkyCS8qIG1heCBudW1iZXIgb2YgbWVtb3J5IGJhbmtzICovCisjZGVmaW5lIENGR19NQVhfRkxBU0hfU0VDVAk3MQkvKiBtYXggbnVtYmVyIG9mIHNlY3RvcnMgb24gb25lIGNoaXAgKi8KIAogI2RlZmluZQlDRkdfRU5WX0lTX0lOX0ZMQVNICTEKICNkZWZpbmUJQ0ZHX0VOVl9PRkZTRVQJCTB4ODAwMAkvKiAgIE9mZnNldCAgIG9mIEVudmlyb25tZW50IFNlY3RvcgkqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL1RRTTg1NU0uaCBiL2luY2x1ZGUvY29uZmlncy9UUU04NTVNLmgKaW5kZXggY2Q1MjEyZS4uYzRiNDU5OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL1RRTTg1NU0uaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvVFFNODU1TS5oCkBAIC0yMTcsMTUgKzIxNywxOSBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogRkxBU0ggb3JnYW5pemF0aW9uCiAgKi8KLSNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9CQU5LUwkxCS8qIG1heCBudW1iZXIgb2YgbWVtb3J5IGJhbmtzCQkqLwotI2RlZmluZSBDRkdfTUFYX0ZMQVNIX1NFQ1QJMjU2CS8qIG1heCBudW1iZXIgb2Ygc2VjdG9ycyBvbiBvbmUgY2hpcAkqLwogCi0jZGVmaW5lIENGR19GTEFTSF9FUkFTRV9UT1VUCTEyMDAwMAkvKiBUaW1lb3V0IGZvciBGbGFzaCBFcmFzZSAoaW4gbXMpCSovCi0jZGVmaW5lIENGR19GTEFTSF9XUklURV9UT1VUCTUwMAkvKiBUaW1lb3V0IGZvciBGbGFzaCBXcml0ZSAoaW4gbXMpCSovCisvKiB1c2UgQ0ZJIGZsYXNoIGRyaXZlciAqLworI2RlZmluZSBDRkdfRkxBU0hfQ0ZJCQkxCS8qIEZsYXNoIGlzIENGSSBjb25mb3JtYW50ICovCisjZGVmaW5lIENGR19GTEFTSF9DRklfRFJJVkVSCTEJLyogVXNlIHRoZSBjb21tb24gZHJpdmVyICovCisjZGVmaW5lIENGR19GTEFTSF9CQU5LU19MSVNUCXsgQ0ZHX0ZMQVNIX0JBU0UgfQorI2RlZmluZSBDRkdfRkxBU0hfRU1QVFlfSU5GTworI2RlZmluZSBDRkdfRkxBU0hfVVNFX0JVRkZFUl9XUklURQkxCisjZGVmaW5lIENGR19NQVhfRkxBU0hfQkFOS1MJMQkvKiBtYXggbnVtYmVyIG9mIG1lbW9yeSBiYW5rcyAqLworI2RlZmluZSBDRkdfTUFYX0ZMQVNIX1NFQ1QJMjU2CS8qIG1heCBudW1iZXIgb2Ygc2VjdG9ycyBvbiBvbmUgY2hpcCAqLwogCiAjZGVmaW5lCUNGR19FTlZfSVNfSU5fRkxBU0gJMQogI2RlZmluZQlDRkdfRU5WX09GRlNFVAkJMHg0MDAwMAkvKiAgIE9mZnNldCAgIG9mIEVudmlyb25tZW50IFNlY3RvcgkqLwotI2RlZmluZQlDRkdfRU5WX1NJWkUJCTB4MDgwMDAJLyogVG90YWwgU2l6ZSBvZiBFbnZpcm9ubWVudCBTZWN0b3IJKi8KKyNkZWZpbmUJQ0ZHX0VOVl9TSVpFCQkweDA4MDAwCS8qIFRvdGFsIFNpemUgb2YgRW52aXJvbm1lbnQJCSovCiAjZGVmaW5lCUNGR19FTlZfU0VDVF9TSVpFCTB4MjAwMDAJLyogVG90YWwgU2l6ZSBvZiBFbnZpcm9ubWVudCBTZWN0b3IJKi8KIAogLyogQWRkcmVzcyBhbmQgc2l6ZSBvZiBSZWR1bmRhbnQgRW52aXJvbm1lbnQgU2VjdG9yCSovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvVFFNODYwTC5oIGIvaW5jbHVkZS9jb25maWdzL1RRTTg2MEwuaAppbmRleCBkNTgzOGRiLi5hYzIyYzFlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvVFFNODYwTC5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9UUU04NjBMLmgKQEAgLTE4NiwxMSArMTg2LDE1IEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBGTEFTSCBvcmdhbml6YXRpb24KICAqLwotI2RlZmluZSBDRkdfTUFYX0ZMQVNIX0JBTktTCTIJLyogbWF4IG51bWJlciBvZiBtZW1vcnkgYmFua3MJCSovCi0jZGVmaW5lIENGR19NQVhfRkxBU0hfU0VDVAk3MQkvKiBtYXggbnVtYmVyIG9mIHNlY3RvcnMgb24gb25lIGNoaXAJKi8KIAotI2RlZmluZSBDRkdfRkxBU0hfRVJBU0VfVE9VVAkxMjAwMDAJLyogVGltZW91dCBmb3IgRmxhc2ggRXJhc2UgKGluIG1zKQkqLwotI2RlZmluZSBDRkdfRkxBU0hfV1JJVEVfVE9VVAk1MDAJLyogVGltZW91dCBmb3IgRmxhc2ggV3JpdGUgKGluIG1zKQkqLworLyogdXNlIENGSSBmbGFzaCBkcml2ZXIgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX0NGSQkJMQkvKiBGbGFzaCBpcyBDRkkgY29uZm9ybWFudCAqLworI2RlZmluZSBDRkdfRkxBU0hfQ0ZJX0RSSVZFUgkxCS8qIFVzZSB0aGUgY29tbW9uIGRyaXZlciAqLworI2RlZmluZSBDRkdfRkxBU0hfQkFOS1NfTElTVAl7IENGR19GTEFTSF9CQVNFIH0KKyNkZWZpbmUgQ0ZHX0ZMQVNIX0VNUFRZX0lORk8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX1VTRV9CVUZGRVJfV1JJVEUJMQorI2RlZmluZSBDRkdfTUFYX0ZMQVNIX0JBTktTCTIJLyogbWF4IG51bWJlciBvZiBtZW1vcnkgYmFua3MgKi8KKyNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9TRUNUCTcxCS8qIG1heCBudW1iZXIgb2Ygc2VjdG9ycyBvbiBvbmUgY2hpcCAqLwogCiAjZGVmaW5lCUNGR19FTlZfSVNfSU5fRkxBU0gJMQogI2RlZmluZQlDRkdfRU5WX09GRlNFVAkJMHg4MDAwCS8qICAgT2Zmc2V0ICAgb2YgRW52aXJvbm1lbnQgU2VjdG9yCSovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvVFFNODYwTS5oIGIvaW5jbHVkZS9jb25maWdzL1RRTTg2ME0uaAppbmRleCBmZTNhMmYwLi44NjAxZGUxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvVFFNODYwTS5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9UUU04NjBNLmgKQEAgLTE4OSwxMSArMTg5LDE0IEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBGTEFTSCBvcmdhbml6YXRpb24KICAqLwotI2RlZmluZSBDRkdfTUFYX0ZMQVNIX0JBTktTCTEJLyogbWF4IG51bWJlciBvZiBtZW1vcnkgYmFua3MJCSovCi0jZGVmaW5lIENGR19NQVhfRkxBU0hfU0VDVAkyNTYJLyogbWF4IG51bWJlciBvZiBzZWN0b3JzIG9uIG9uZSBjaGlwCSovCi0KLSNkZWZpbmUgQ0ZHX0ZMQVNIX0VSQVNFX1RPVVQJMTIwMDAwCS8qIFRpbWVvdXQgZm9yIEZsYXNoIEVyYXNlIChpbiBtcykJKi8KLSNkZWZpbmUgQ0ZHX0ZMQVNIX1dSSVRFX1RPVVQJNTAwCS8qIFRpbWVvdXQgZm9yIEZsYXNoIFdyaXRlIChpbiBtcykJKi8KKy8qIHVzZSBDRkkgZmxhc2ggZHJpdmVyICovCisjZGVmaW5lIENGR19GTEFTSF9DRkkJCTEJLyogRmxhc2ggaXMgQ0ZJIGNvbmZvcm1hbnQgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX0NGSV9EUklWRVIJMQkvKiBVc2UgdGhlIGNvbW1vbiBkcml2ZXIgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX0JBTktTX0xJU1QJeyBDRkdfRkxBU0hfQkFTRSB9CisjZGVmaW5lIENGR19GTEFTSF9FTVBUWV9JTkZPCisjZGVmaW5lIENGR19GTEFTSF9VU0VfQlVGRkVSX1dSSVRFCTEKKyNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9CQU5LUwkxCS8qIG1heCBudW1iZXIgb2YgbWVtb3J5IGJhbmtzICovCisjZGVmaW5lIENGR19NQVhfRkxBU0hfU0VDVAkyNTYJLyogbWF4IG51bWJlciBvZiBzZWN0b3JzIG9uIG9uZSBjaGlwICovCiAKICNkZWZpbmUJQ0ZHX0VOVl9JU19JTl9GTEFTSAkxCiAjZGVmaW5lCUNGR19FTlZfT0ZGU0VUCQkweDQwMDAwCS8qICAgT2Zmc2V0ICAgb2YgRW52aXJvbm1lbnQgU2VjdG9yCSovCkBAIC0zNjgsNyArMzcxLDcgQEAKICAqLwogI2RlZmluZSBTRFJBTV9CQVNFMl9QUkVMSU0JMHgwMDAwMDAwMAkvKiBTRFJBTSBiYW5rICMwCSovCiAjZGVmaW5lIFNEUkFNX0JBU0UzX1BSRUxJTQkweDIwMDAwMDAwCS8qIFNEUkFNIGJhbmsgIzEJKi8KLSNkZWZpbmUJU0RSQU1fTUFYX1NJWkUJCTB4MDQwMDAwMDAJLyogbWF4IDY0IE1CIHBlciBiYW5rCSovCisjZGVmaW5lCVNEUkFNX01BWF9TSVpFCQkweDA4MDAwMDAwCS8qIG1heCAxMjggTUIgcGVyIGJhbmsJKi8KIAogLyogU0RSQU0gdGltaW5nOiBNdWx0aXBsZXhlZCBhZGRyZXNzZXMsIEdQTDUgb3V0cHV0IHRvIEdQTDVfQSAoZG9uJ3QgY2FyZSkJKi8KICNkZWZpbmUgQ0ZHX09SX1RJTUlOR19TRFJBTQkweDAwMDAwQTAwCkBAIC00NDQsNyArNDQ3LDEwIEBACiAjZGVmaW5lIENGR19NQU1SXzlDT0wJKChDRkdfTUFNUl9QVEEgPDwgTUFNUl9QVEFfU0hJRlQpICB8IE1BTVJfUFRBRQkgICAgfAlcCiAJCQkgTUFNUl9BTUFfVFlQRV8xIHwgTUFNUl9EU0FfMV9DWUNMIHwgTUFNUl9HMENMQV9BMTAgfAlcCiAJCQkgTUFNUl9STEZBXzFYCSB8IE1BTVJfV0xGQV8xWAkgICB8IE1BTVJfVExGQV80WCkKLQorLyogMTAgY29sdW1uIFNEUkFNICovCisjZGVmaW5lIENGR19NQU1SXzEwQ09MCSgoQ0ZHX01BTVJfUFRBIDw8IE1BTVJfUFRBX1NISUZUKSAgfCBNQU1SX1BUQUUJICAgIHwJXAorCQkJIE1BTVJfQU1BX1RZUEVfMiB8IE1BTVJfRFNBXzFfQ1lDTCB8IE1BTVJfRzBDTEFfQTkgIHwJXAorCQkJIE1BTVJfUkxGQV8xWAkgfCBNQU1SX1dMRkFfMVgJICAgfCBNQU1SX1RMRkFfNFgpCiAKIC8qCiAgKiBJbnRlcm5hbCBEZWZpbml0aW9ucwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL1RRTTg2MkwuaCBiL2luY2x1ZGUvY29uZmlncy9UUU04NjJMLmgKaW5kZXggZjA5ZDNkMS4uMmJmNGEyYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL1RRTTg2MkwuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvVFFNODYyTC5oCkBAIC0xODYsMTQgKzE4NiwxNyBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogRkxBU0ggb3JnYW5pemF0aW9uCiAgKi8KLSNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9CQU5LUwkyCS8qIG1heCBudW1iZXIgb2YgbWVtb3J5IGJhbmtzCQkqLwotI2RlZmluZSBDRkdfTUFYX0ZMQVNIX1NFQ1QJNzEJLyogbWF4IG51bWJlciBvZiBzZWN0b3JzIG9uIG9uZSBjaGlwCSovCiAKLSNkZWZpbmUgQ0ZHX0ZMQVNIX0VSQVNFX1RPVVQJMTIwMDAwCS8qIFRpbWVvdXQgZm9yIEZsYXNoIEVyYXNlIChpbiBtcykJKi8KLSNkZWZpbmUgQ0ZHX0ZMQVNIX1dSSVRFX1RPVVQJNTAwCS8qIFRpbWVvdXQgZm9yIEZsYXNoIFdyaXRlIChpbiBtcykJKi8KKy8qIHVzZSBDRkkgZmxhc2ggZHJpdmVyICovCisjZGVmaW5lIENGR19GTEFTSF9DRkkJCTEJLyogRmxhc2ggaXMgQ0ZJIGNvbmZvcm1hbnQgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX0NGSV9EUklWRVIJMQkvKiBVc2UgdGhlIGNvbW1vbiBkcml2ZXIgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX0JBTktTX0xJU1QJeyBDRkdfRkxBU0hfQkFTRSB9CisjZGVmaW5lIENGR19GTEFTSF9FTVBUWV9JTkZPCisjZGVmaW5lIENGR19GTEFTSF9VU0VfQlVGRkVSX1dSSVRFCTEKKyNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9CQU5LUwkyCS8qIG1heCBudW1iZXIgb2YgbWVtb3J5IGJhbmtzICovCisjZGVmaW5lIENGR19NQVhfRkxBU0hfU0VDVAk3MQkvKiBtYXggbnVtYmVyIG9mIHNlY3RvcnMgb24gb25lIGNoaXAgKi8KIAogI2RlZmluZQlDRkdfRU5WX0lTX0lOX0ZMQVNICTEKLQogI2RlZmluZQlDRkdfRU5WX09GRlNFVAkJMHg4MDAwCS8qICAgT2Zmc2V0ICAgb2YgRW52aXJvbm1lbnQgU2VjdG9yCSovCiAjZGVmaW5lCUNGR19FTlZfU0laRQkJMHg0MDAwCS8qIFRvdGFsIFNpemUgb2YgRW52aXJvbm1lbnQgU2VjdG9yCSovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9UUU04NjJNLmggYi9pbmNsdWRlL2NvbmZpZ3MvVFFNODYyTS5oCmluZGV4IDAzOWFhM2EuLmQ0MmZmYzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9UUU04NjJNLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL1RRTTg2Mk0uaApAQCAtMTg2LDE2ICsxODYsMTkgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIEZMQVNIIG9yZ2FuaXphdGlvbgogICovCi0jZGVmaW5lIENGR19NQVhfRkxBU0hfQkFOS1MJMQkvKiBtYXggbnVtYmVyIG9mIG1lbW9yeSBiYW5rcwkJKi8KLSNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9TRUNUCTI1NgkvKiBtYXggbnVtYmVyIG9mIHNlY3RvcnMgb24gb25lIGNoaXAJKi8KIAotI2RlZmluZSBDRkdfRkxBU0hfRVJBU0VfVE9VVAkxMjAwMDAJLyogVGltZW91dCBmb3IgRmxhc2ggRXJhc2UgKGluIG1zKQkqLwotI2RlZmluZSBDRkdfRkxBU0hfV1JJVEVfVE9VVAk1MDAJLyogVGltZW91dCBmb3IgRmxhc2ggV3JpdGUgKGluIG1zKQkqLworLyogdXNlIENGSSBmbGFzaCBkcml2ZXIgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX0NGSQkJMQkvKiBGbGFzaCBpcyBDRkkgY29uZm9ybWFudCAqLworI2RlZmluZSBDRkdfRkxBU0hfQ0ZJX0RSSVZFUgkxCS8qIFVzZSB0aGUgY29tbW9uIGRyaXZlciAqLworI2RlZmluZSBDRkdfRkxBU0hfQkFOS1NfTElTVAl7IENGR19GTEFTSF9CQVNFIH0KKyNkZWZpbmUgQ0ZHX0ZMQVNIX0VNUFRZX0lORk8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX1VTRV9CVUZGRVJfV1JJVEUJMQorI2RlZmluZSBDRkdfTUFYX0ZMQVNIX0JBTktTCTEJLyogbWF4IG51bWJlciBvZiBtZW1vcnkgYmFua3MgKi8KKyNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9TRUNUCTI1NgkvKiBtYXggbnVtYmVyIG9mIHNlY3RvcnMgb24gb25lIGNoaXAgKi8KIAogI2RlZmluZQlDRkdfRU5WX0lTX0lOX0ZMQVNICTEKLQogI2RlZmluZQlDRkdfRU5WX09GRlNFVAkJMHg0MDAwMAkvKiAgIE9mZnNldCAgIG9mIEVudmlyb25tZW50IFNlY3RvcgkqLwotI2RlZmluZQlDRkdfRU5WX1NJWkUJCTB4MDgwMDAJLyogVG90YWwgU2l6ZSBvZiBFbnZpcm9ubWVudCBTZWN0b3IJKi8KKyNkZWZpbmUJQ0ZHX0VOVl9TSVpFCQkweDA4MDAwCS8qIFRvdGFsIFNpemUgb2YgRW52aXJvbm1lbnQJCSovCiAjZGVmaW5lCUNGR19FTlZfU0VDVF9TSVpFCTB4MjAwMDAJLyogVG90YWwgU2l6ZSBvZiBFbnZpcm9ubWVudCBTZWN0b3IJKi8KIAogLyogQWRkcmVzcyBhbmQgc2l6ZSBvZiBSZWR1bmRhbnQgRW52aXJvbm1lbnQgU2VjdG9yCSovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvVFFNODY2TS5oIGIvaW5jbHVkZS9jb25maWdzL1RRTTg2Nk0uaAppbmRleCBjYTNjMTY2Li5kN2U1ZWViIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvVFFNODY2TS5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9UUU04NjZNLmgKQEAgLTIzMiwxMSArMjMyLDE0IEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBGTEFTSCBvcmdhbml6YXRpb24KICAqLwotI2RlZmluZSBDRkdfTUFYX0ZMQVNIX0JBTktTCTIJLyogbWF4IG51bWJlciBvZiBtZW1vcnkgYmFua3MJCSovCi0jZGVmaW5lIENGR19NQVhfRkxBU0hfU0VDVAkyNTYJLyogbWF4IG51bWJlciBvZiBzZWN0b3JzIG9uIG9uZSBjaGlwCSovCi0KLSNkZWZpbmUgQ0ZHX0ZMQVNIX0VSQVNFX1RPVVQJMTIwMDAwCS8qIFRpbWVvdXQgZm9yIEZsYXNoIEVyYXNlIChpbiBtcykJKi8KLSNkZWZpbmUgQ0ZHX0ZMQVNIX1dSSVRFX1RPVVQJNTAwCS8qIFRpbWVvdXQgZm9yIEZsYXNoIFdyaXRlIChpbiBtcykJKi8KKy8qIHVzZSBDRkkgZmxhc2ggZHJpdmVyICovCisjZGVmaW5lIENGR19GTEFTSF9DRkkJCTEJLyogRmxhc2ggaXMgQ0ZJIGNvbmZvcm1hbnQgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX0NGSV9EUklWRVIJMQkvKiBVc2UgdGhlIGNvbW1vbiBkcml2ZXIgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX0JBTktTX0xJU1QJeyBDRkdfRkxBU0hfQkFTRSB9CisjZGVmaW5lIENGR19GTEFTSF9FTVBUWV9JTkZPCisjZGVmaW5lIENGR19GTEFTSF9VU0VfQlVGRkVSX1dSSVRFCTEKKyNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9CQU5LUwkxCS8qIG1heCBudW1iZXIgb2YgbWVtb3J5IGJhbmtzICovCisjZGVmaW5lIENGR19NQVhfRkxBU0hfU0VDVAkyNTYJLyogbWF4IG51bWJlciBvZiBzZWN0b3JzIG9uIG9uZSBjaGlwICovCiAKICNkZWZpbmUgQ0ZHX0VOVl9JU19JTl9GTEFTSAkxCiAjZGVmaW5lIENGR19FTlZfT0ZGU0VUCQkweDQwMDAwIC8qICAgT2Zmc2V0ICAgb2YgRW52aXJvbm1lbnQgU2VjdG9yCSovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvVFFNODg1RC5oIGIvaW5jbHVkZS9jb25maWdzL1RRTTg4NUQuaAppbmRleCBmMzZiNzI5Li44YTNhYTRiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvVFFNODg1RC5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9UUU04ODVELmgKQEAgLTQyLDE3ICs0MiwxMCBAQAogI2RlZmluZSBDT05GSUdfOHh4X09TQ0xLCQkxMDAwMDAwMAkvKiAgMTAgTUh6IC0gUExMIGlucHV0IGNsb2NrCSovCiAjZGVmaW5lIENGR184eHhfQ1BVQ0xLX01JTgkJMTUwMDAwMDAJLyogIDE1IE1IeiAtIENQVSBtaW5pbXVtIGNsb2NrCSovCiAjZGVmaW5lIENGR184eHhfQ1BVQ0xLX01BWAkJMTMzMDAwMDAwCS8qIDEzMyBNSHogLSBDUFUgbWF4aW11bSBjbG9jawkqLwotI2RlZmluZSBDT05GSUdfOHh4X0NQVUNMS19ERUZBVUxUCTY2MDAwMDAwCS8qICA1MCBNSHogLSBDUFUgZGVmYXVsdCBjbG9jawkqLworI2RlZmluZSBDT05GSUdfOHh4X0NQVUNMS19ERUZBVUxUCTY2MDAwMDAwCS8qICA2NiBNSHogLSBDUFUgZGVmYXVsdCBjbG9jawkqLwogCQkJCQkJLyogKGl0IHdpbGwgYmUgdXNlZCBpZiB0aGVyZSBpcyBubwkqLwogCQkJCQkJLyogJ2NwdWNsaycgdmFyaWFibGUgd2l0aCB2YWxpZCB2YWx1ZSkJKi8KIAotI2RlZmluZSBDRkdfTUVBU1VSRV9DUFVDTEsJCQkvKiBNZWFzdXJlIHJlYWwgY3B1IGNsb2NrCSovCi0JCQkJCQkvKiAoZnVuY3Rpb24gbWVhc3VyZV9nY2xrKCkJKi8KLQkJCQkJCS8qIHdpbGwgYmUgY2FsbGVkKQkJKi8KLSNpZmRlZiBDRkdfTUVBU1VSRV9DUFVDTEsKLSNkZWZpbmUgQ0ZHXzhYWF9YSU4JCTEwMDAwMDAwCS8qIG1lYXN1cmVfZ2NsaygpIG5lZWRzIHRoaXMJKi8KLSNlbmRpZgotCiAjZGVmaW5lIENPTkZJR184eHhfQ09OU19TTUMxCTEJLyogQ29uc29sZSBpcyBvbiBTTUMxCQkqLwogCiAjZGVmaW5lIENPTkZJR19CQVVEUkFURQkJMTE1MjAwCS8qIGNvbnNvbGUgYmF1ZHJhdGUgPSAxMTVrYnBzCSovCkBAIC04Myw5ICs3NiwxNSBAQAogCQkiYm9vdG0gJHtrZXJuZWxfYWRkcn0gJHtyYW1kaXNrX2FkZHJ9XDAiCQlcCiAJIm5ldF9uZnM9dGZ0cCAyMDAwMDAgJHtib290ZmlsZX07cnVuIG5mc2FyZ3MgYWRkaXA7Ym9vdG1cMCIJXAogCSJyb290cGF0aD0vb3B0L2VsZGsvcHBjXzh4eFwwIgkJCQkJXAotCSJib290ZmlsZT0vdGZ0cGJvb3QvVFFNODY2TS91SW1hZ2VcMCIJCQkJXAotCSJrZXJuZWxfYWRkcj00MDA4MDAwMFwwIgkJCQkJXAotCSJyYW1kaXNrX2FkZHI9NDAxODAwMDBcMCIJCQkJCVwKKwkiYm9vdGZpbGU9L3RmdHBib290L1RRTTg4NUQvdUltYWdlXDAiCQkJCVwKKwkiZmR0X2FkZHI9NDAwQzAwMDBcMCIJCQkJCQlcCisJImtlcm5lbF9hZGRyPTQwMTAwMDAwXDAiCQkJCQlcCisJInJhbWRpc2tfYWRkcj00MDI4MDAwMFwwIgkJCQkJXAorCSJsb2FkPXRmdHAgMjAwMDAwICR7dS1ib290fVwwIgkJCQkJXAorCSJ1cGRhdGU9cHJvdGVjdCBvZmYgNDAwMDAwMDAgKyR7ZmlsZXNpemV9OyIJCQlcCisJCSJlcmFzZSA0MDAwMDAwMCArJHtmaWxlc2l6ZX07IgkJCQlcCisJCSJjcC5iIDIwMDAwMCA0MDAwMDAwMCAke2ZpbGVzaXplfTsiCQkJXAorCQkicHJvdGVjdCBvbiA0MDAwMDAwMCArJHtmaWxlc2l6ZX1cMCIJCQlcCiAJIiIKICNkZWZpbmUgQ09ORklHX0JPT1RDT01NQU5ECSJydW4gZmxhc2hfc2VsZiIKIApAQCAtMTQ0LDcgKzE0Myw3IEBACiAjZGVmaW5lIENPTkZJR19NQUNfUEFSVElUSU9OCiAjZGVmaW5lIENPTkZJR19ET1NfUEFSVElUSU9OCiAKLSN1bmRlZiBDT05GSUdfUlRDX01QQzh4eAkJLyogTVBDODY2IGRvZXMgbm90IHN1cHBvcnQgUlRDCSovCisjdW5kZWYgQ09ORklHX1JUQ19NUEM4eHgJCS8qIE1QQzg4NSBkb2VzIG5vdCBzdXBwb3J0IFJUQwkqLwogCiAjZGVmaW5lCUNPTkZJR19USU1FU1RBTVAJCS8qIGJ1dCBwcmludCBpbWFnZSB0aW1lc3RtcHMJKi8KIApAQCAtMjMwLDcgKzIyOSw3IEBACiAjZGVmaW5lIENGR19GTEFTSF9CQVNFCQkweDQwMDAwMDAwCiAjZGVmaW5lIENGR19NT05JVE9SX0xFTgkJKDI1NiA8PCAxMCkJLyogUmVzZXJ2ZSAyNTYga0IgZm9yIE1vbml0b3IJKi8KICNkZWZpbmUgQ0ZHX01PTklUT1JfQkFTRQlDRkdfRkxBU0hfQkFTRQotI2RlZmluZSBDRkdfTUFMTE9DX0xFTgkJKDEyOCA8PCAxMCkJLyogUmVzZXJ2ZSAxMjgga0IgZm9yIG1hbGxvYygpCSovCisjZGVmaW5lIENGR19NQUxMT0NfTEVOCQkoMjU2IDw8IDEwKQkvKiBSZXNlcnZlIDEyOCBrQiBmb3IgbWFsbG9jKCkJKi8KIAogLyoKICAqIEZvciBib290aW5nIExpbnV4LCB0aGUgYm9hcmQgaW5mbyBhbmQgY29tbWFuZCBsaW5lIGRhdGEKQEAgLTI0MiwxNiArMjQxLDIwIEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBGTEFTSCBvcmdhbml6YXRpb24KICAqLwotI2RlZmluZSBDRkdfTUFYX0ZMQVNIX0JBTktTCTIJLyogbWF4IG51bWJlciBvZiBtZW1vcnkgYmFua3MJCSovCi0jZGVmaW5lIENGR19NQVhfRkxBU0hfU0VDVAkyNTYJLyogbWF4IG51bWJlciBvZiBzZWN0b3JzIG9uIG9uZSBjaGlwCSovCiAKLSNkZWZpbmUgQ0ZHX0ZMQVNIX0VSQVNFX1RPVVQJMTIwMDAwCS8qIFRpbWVvdXQgZm9yIEZsYXNoIEVyYXNlIChpbiBtcykJKi8KLSNkZWZpbmUgQ0ZHX0ZMQVNIX1dSSVRFX1RPVVQJNTAwCS8qIFRpbWVvdXQgZm9yIEZsYXNoIFdyaXRlIChpbiBtcykJKi8KKy8qIHVzZSBDRkkgZmxhc2ggZHJpdmVyICovCisjZGVmaW5lIENGR19GTEFTSF9DRkkJCTEJLyogRmxhc2ggaXMgQ0ZJIGNvbmZvcm1hbnQgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX0NGSV9EUklWRVIJMQkvKiBVc2UgdGhlIGNvbW1vbiBkcml2ZXIgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX0JBTktTX0xJU1QJeyBDRkdfRkxBU0hfQkFTRSB9CisjZGVmaW5lIENGR19GTEFTSF9FTVBUWV9JTkZPCisjZGVmaW5lIENGR19GTEFTSF9VU0VfQlVGRkVSX1dSSVRFCTEKKyNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9CQU5LUwkxCS8qIG1heCBudW1iZXIgb2YgbWVtb3J5IGJhbmtzICovCisjZGVmaW5lIENGR19NQVhfRkxBU0hfU0VDVAkyNTYJLyogbWF4IG51bWJlciBvZiBzZWN0b3JzIG9uIG9uZSBjaGlwICovCiAKICNkZWZpbmUgQ0ZHX0VOVl9JU19JTl9GTEFTSAkxCiAjZGVmaW5lIENGR19FTlZfT0ZGU0VUCQkweDQwMDAwIC8qICAgT2Zmc2V0ICAgb2YgRW52aXJvbm1lbnQgU2VjdG9yCSovCi0jZGVmaW5lIENGR19FTlZfU0laRQkJMHgwODAwMCAvKiBUb3RhbCBTaXplIG9mIEVudmlyb25tZW50IFNlY3RvcgkqLwotI2RlZmluZSBDRkdfRU5WX1NFQ1RfU0laRQkweDIwMDAwIC8qIFRvdGFsIFNpemUgb2YgRW52aXJvbm1lbnQgU2VjdG9yCSovCisjZGVmaW5lIENGR19FTlZfU0laRQkJMHgwODAwMCAvKiBUb3RhbCBTaXplIG9mIEVudmlyb25tZW50CQkqLworI2RlZmluZSBDRkdfRU5WX1NFQ1RfU0laRQkweDQwMDAwIC8qIFRvdGFsIFNpemUgb2YgRW52aXJvbm1lbnQgU2VjdG9yCSovCiAKIC8qIEFkZHJlc3MgYW5kIHNpemUgb2YgUmVkdW5kYW50IEVudmlyb25tZW50IFNlY3RvcgkqLwogI2RlZmluZSBDRkdfRU5WX09GRlNFVF9SRURVTkQJKENGR19FTlZfT0ZGU0VUK0NGR19FTlZfU0VDVF9TSVpFKQpAQCAtNDM0LDI2ICs0MzcsMzAgQEAKICNkZWZpbmUgQ0ZHX1BUQV9QRVJfQ0xLCSgoNDA5NiAqIDY0ICogMTAwMCkgLyAoNCAqIDY0KSkKIAogLyoKLSAqIE1lbW9yeSBQZXJpb2RpYyBUaW1lciBQcmVzY2FsZXIKLSAqIFBlcmlvZGljIHRpbWVyIGZvciByZWZyZXNoLCBzdGFydCB3aXRoIHJlZnJlc2ggcmF0ZSBmb3IgNDAgTUh6IGNsb2NrCi0gKiAoQ0ZHXzh4eF9DUFVDTEtfTUlOIC8gQ0ZHX1BUQV9QRVJfQ0xLKQorICogUGVyaW9kaWMgdGltZXIgKE1BTVJbUFR4XSkgZm9yIDQgKiA3LjggdXMgcmVmcmVzaCAoPSAzMS4yIHVzIHBlciBxdWFkKQorICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgQ1BVY2xvY2soTUh6KSAqIDMxLjIKKyAqIENGR19NQU1SX1BUQSA9IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgICB3aXRoIERGQlJHID0gMAorICogICAgICAgICAgICAgICAgMl4oMipTQ0NSW0RGQlJHXSkgKiBNUFRQUl9QVFBfRElWMTYKKyAqCisgKiBDUFUgY2xvY2sgPSAgMTUgTUh6OiAgQ0ZHX01BTVJfUFRBID0gIDI5ICAgLT4gIDQgKiA3LjczIHVzCisgKiBDUFUgY2xvY2sgPSAgNTAgTUh6OiAgQ0ZHX01BTVJfUFRBID0gIDk3ICAgLT4gIDQgKiA3Ljc2IHVzCisgKiBDUFUgY2xvY2sgPSAgNjYgTUh6OiAgQ0ZHX01BTVJfUFRBID0gMTI4ICAgLT4gIDQgKiA3Ljc1IHVzCisgKiBDUFUgY2xvY2sgPSAxMzMgTUh6OiAgQ0ZHX01BTVJfUFRBID0gMjU1ICAgLT4gIDQgKiA3LjY3IHVzCisgKgorICogVmFsdWUgOTcgaXMgZm9yIDQgKiA3LjggdXMgYXQgNTAgTUh6LiBTbyB0aGUgcmVmcmVzaCBjeWNsZSByZXF1aXJlbWVudCB3aWxsCisgKiBiZSBtZXQgYWxzbyBpbiB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uLCBpLmUuIGlmIGVudmlyb25tZW50IHZhcmlhYmxlCisgKiAnY3B1Y2xrJyBpcyBub3Qgc2V0LgogICovCi0jZGVmaW5lIENGR19NQU1SX1BUQQkJMzkKKyNkZWZpbmUgQ0ZHX01BTVJfUFRBCQkxMjgKIAogLyoKLSAqIEZvciAxNiBNQml0LCByZWZyZXNoIHJhdGVzIGNvdWxkIGJlIDMxLjMgdXMKLSAqICg9IDY0IG1zIC8gMksgPSAxMjUgLyBxdWFkIGJ1cnN0cykuCi0gKiBGb3IgYSBzaW1wbGVyIGluaXRpYWxpemF0aW9uLCAxNS42IHVzIGlzIHVzZWQgaW5zdGVhZC4KLSAqCi0gKiAjZGVmaW5lIENGR19NUFRQUl8yQktfMksJTVBUUFJfUFRQX0RJVjMyCQlmb3IgMiBiYW5rcwotICogI2RlZmluZSBDRkdfTVBUUFJfMUJLXzJLCU1QVFBSX1BUUF9ESVY2NAkJZm9yIDEgYmFuaworICogTWVtb3J5IFBlcmlvZGljIFRpbWVyIFByZXNjYWxlciBSZWdpc3RlciAoTVBUUFIpIHZhbHVlcy4KICAqLwotI2RlZmluZSBDRkdfTVBUUFJfMkJLXzRLCU1QVFBSX1BUUF9ESVYxNgkJLyogc2V0dGluZyBmb3IgMiBiYW5rcwkqLwotI2RlZmluZSBDRkdfTVBUUFJfMUJLXzRLCU1QVFBSX1BUUF9ESVYzMgkJLyogc2V0dGluZyBmb3IgMSBiYW5rCSovCi0KLS8qIHJlZnJlc2ggcmF0ZSA3LjggdXMgKD0gNjQgbXMgLyA4SyA9IDMxLjIgLyBxdWFkIGJ1cnN0cykgZm9yIDI1NiBNQml0CQkqLwotI2RlZmluZSBDRkdfTVBUUFJfMkJLXzhLCU1QVFBSX1BUUF9ESVY4CQkvKiBzZXR0aW5nIGZvciAyIGJhbmtzCSovCi0jZGVmaW5lIENGR19NUFRQUl8xQktfOEsJTVBUUFJfUFRQX0RJVjE2CQkvKiBzZXR0aW5nIGZvciAxIGJhbmsJKi8KKy8qIDQgKiA3LjggdXMgcmVmcmVzaCAoPSAzMS4yIHVzIHBlciBxdWFkKSBhdCA1MCBNSHogYW5kIFBUQSA9IDk3ICovCisjZGVmaW5lIENGR19NUFRQUl8yQktfNEsJTVBUUFJfUFRQX0RJVjE2CisvKiA0ICogMy45IHVzIHJlZnJlc2ggKD0gMTUuNiB1cyBwZXIgcXVhZCkgYXQgNTAgTUh6IGFuZCBQVEEgPSA5NyAqLworI2RlZmluZSBDRkdfTVBUUFJfMkJLXzhLCU1QVFBSX1BUUF9ESVY4CiAKIC8qCiAgKiBNQU1SIHNldHRpbmdzIGZvciBTRFJBTQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL2F0c3RrMTAwMy5oIGIvaW5jbHVkZS9jb25maWdzL2F0c3RrMTAwMy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5NDc4OGIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvYXRzdGsxMDAzLmgKQEAgLTAsMCArMSwxODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXRtZWwgQ29ycG9yYXRpb24KKyAqCisgKiBDb25maWd1cmF0aW9uIHNldHRpbmdzIGZvciB0aGUgQVRTVEsxMDAzIENQVSBkYXVnaHRlcmJvYXJkCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKyNpZm5kZWYgX19DT05GSUdfSAorI2RlZmluZSBfX0NPTkZJR19ICisKKyNkZWZpbmUgQ09ORklHX0FWUjMyCQkJMQorI2RlZmluZSBDT05GSUdfQVQzMkFQCQkJMQorI2RlZmluZSBDT05GSUdfQVQzMkFQNzAwMQkJMQorI2RlZmluZSBDT05GSUdfQVRTVEsxMDAzCQkxCisjZGVmaW5lIENPTkZJR19BVFNUSzEwMDAJCTEKKworI2RlZmluZSBDT05GSUdfQVRTVEsxMDAwX0VYVF9GTEFTSAkxCisKKy8qCisgKiBUaW1lciBjbG9jayBmcmVxdWVuY3kuIFdlJ3JlIHVzaW5nIHRoZSBDUFUtaW50ZXJuYWwgQ09VTlQgcmVnaXN0ZXIKKyAqIGZvciB0aGlzLCBzbyB0aGlzIGlzIGVxdWl2YWxlbnQgdG8gdGhlIENQVSBjb3JlIGNsb2NrIGZyZXF1ZW5jeQorICovCisjZGVmaW5lIENGR19IWgkJCQkxMDAwCisKKy8qCisgKiBTZXQgdXAgdGhlIFBMTCB0byBydW4gYXQgMTQwIE1IeiwgdGhlIENQVSB0byBydW4gYXQgdGhlIFBMTAorICogZnJlcXVlbmN5LCB0aGUgSFNCIGFuZCBQQkIgYXQgMS8yLCBhbmQgdGhlIFBCQSB0byBydW4gYXQgMS80IHRoZQorICogUExMIGZyZXF1ZW5jeS4KKyAqIChDRkdfT1NDMF9IWiAqIENGR19QTEwwX01VTCkgLyBDRkdfUExMMF9ESVYgPSBQTEwgTUh6CisgKi8KKyNkZWZpbmUgQ09ORklHX1BMTAkJCTEKKyNkZWZpbmUgQ0ZHX1BPV0VSX01BTkFHRVIJCTEKKyNkZWZpbmUgQ0ZHX09TQzBfSFoJCQkyMDAwMDAwMAorI2RlZmluZSBDRkdfUExMMF9ESVYJCQkxCisjZGVmaW5lIENGR19QTEwwX01VTAkJCTcKKyNkZWZpbmUgQ0ZHX1BMTDBfU1VQUFJFU1NfQ1lDTEVTCTE2CisvKgorICogU2V0IHRoZSBDUFUgcnVubmluZyBhdDoKKyAqIFBMTCAvICgyXkNGR19DTEtESVZfQ1BVKSA9IENQVSBNSHoKKyAqLworI2RlZmluZSBDRkdfQ0xLRElWX0NQVQkJCTAKKy8qCisgKiBTZXQgdGhlIEhTQiBydW5uaW5nIGF0OgorICogUExMIC8gKDJeQ0ZHX0NMS0RJVl9IU0IpID0gSFNCIE1IegorICovCisjZGVmaW5lIENGR19DTEtESVZfSFNCCQkJMQorLyoKKyAqIFNldCB0aGUgUEJBIHJ1bm5pbmcgYXQ6CisgKiBQTEwgLyAoMl5DRkdfQ0xLRElWX1BCQSkgPSBQQkEgTUh6CisgKi8KKyNkZWZpbmUgQ0ZHX0NMS0RJVl9QQkEJCQkyCisvKgorICogU2V0IHRoZSBQQkIgcnVubmluZyBhdDoKKyAqIFBMTCAvICgyXkNGR19DTEtESVZfUEJCKSA9IFBCQiBNSHoKKyAqLworI2RlZmluZSBDRkdfQ0xLRElWX1BCQgkJCTEKKworLyoKKyAqIFRoZSBQTExPUFQgcmVnaXN0ZXIgY29udHJvbHMgdGhlIFBMTCBsaWtlIHRoaXM6CisgKiAgIGljcCA9IFBMTE9QVDwyPgorICogICBpdmNvID0gUExMT1BUPDE6MD4KKyAqCisgKiBXZSB3YW50IGljcD0xIChkZWZhdWx0KSBhbmQgaXZjbz0wICg4MC0xNjAgTUh6KSBvciBpdmNvPTIgKDE1MC0yNDBNSHopLgorICovCisjZGVmaW5lIENGR19QTEwwX09QVAkJCTB4MDQKKworI3VuZGVmIENPTkZJR19VU0FSVDAKKyNkZWZpbmUgQ09ORklHX1VTQVJUMQkJCTEKKyN1bmRlZiBDT05GSUdfVVNBUlQyCisjdW5kZWYgQ09ORklHX1VTQVJUMworCisvKiBVc2VyIHNlcnZpY2VhYmxlIHN0dWZmICovCisjZGVmaW5lIENPTkZJR19ET1NfUEFSVElUSU9OCQkxCisKKyNkZWZpbmUgQ09ORklHX0NNRExJTkVfVEFHCQkxCisjZGVmaW5lIENPTkZJR19TRVRVUF9NRU1PUllfVEFHUwkxCisjZGVmaW5lIENPTkZJR19JTklUUkRfVEFHCQkxCisKKyNkZWZpbmUgQ09ORklHX1NUQUNLU0laRQkJKDIwNDgpCisKKyNkZWZpbmUgQ09ORklHX0JBVURSQVRFCQkJMTE1MjAwCisjZGVmaW5lIENPTkZJR19CT09UQVJHUwkJCQkJCQlcCisJImNvbnNvbGU9dHR5UzAgcm9vdD0vZGV2L21tY2JsazBwMSByb290d2FpdCIKKworI2RlZmluZSBDT05GSUdfQk9PVENPTU1BTkQJCQkJCQlcCisJIm1tY2luaXQ7IGV4dDJsb2FkIG1tYyAwOjEgMHgxMDQwMDAwMCAvYm9vdC91SW1hZ2U7IGJvb3RtIgorCisvKgorICogT25seSBpbnRlcnJ1cHQgYXV0b2Jvb3QgaWYgPHNwYWNlPiBpcyBwcmVzc2VkLiBPdGhlcndpc2UsIGdhcmJhZ2UKKyAqIGRhdGEgb24gdGhlIHNlcmlhbCBsaW5lIG1heSBpbnRlcnJ1cHQgdGhlIGJvb3Qgc2VxdWVuY2UuCisgKi8KKyNkZWZpbmUgQ09ORklHX0JPT1RERUxBWQkJMQorI2RlZmluZSBDT05GSUdfQVVUT0JPT1QJCQkxCisjZGVmaW5lIENPTkZJR19BVVRPQk9PVF9LRVlFRAkJMQorI2RlZmluZSBDT05GSUdfQVVUT0JPT1RfUFJPTVBUCQkJCVwKKwkiUHJlc3MgU1BBQ0UgdG8gYWJvcnQgYXV0b2Jvb3QgaW4gJWQgc2Vjb25kc1xuIgorI2RlZmluZSBDT05GSUdfQVVUT0JPT1RfREVMQVlfU1RSCSJkIgorI2RlZmluZSBDT05GSUdfQVVUT0JPT1RfU1RPUF9TVFIJIiAiCisKKy8qCisgKiBDb21tYW5kIGxpbmUgY29uZmlndXJhdGlvbi4KKyAqLworI2luY2x1ZGUgPGNvbmZpZ19jbWRfZGVmYXVsdC5oPgorCisjZGVmaW5lIENPTkZJR19DTURfQVNLRU5WCisjZGVmaW5lIENPTkZJR19DTURfRVhUMgorI2RlZmluZSBDT05GSUdfQ01EX0ZBVAorI2RlZmluZSBDT05GSUdfQ01EX0pGRlMyCisjZGVmaW5lIENPTkZJR19DTURfTU1DCisKKyN1bmRlZiBDT05GSUdfQ01EX0ZQR0EKKyN1bmRlZiBDT05GSUdfQ01EX05FVAorI3VuZGVmIENPTkZJR19DTURfTkZTCisjdW5kZWYgQ09ORklHX0NNRF9TRVRHRVREQ1IKKyN1bmRlZiBDT05GSUdfQ01EX1hJTUcKKworI2RlZmluZSBDT05GSUdfQVRNRUxfVVNBUlQJCTEKKyNkZWZpbmUgQ09ORklHX1BJTzIJCQkxCisjZGVmaW5lIENGR19IU0RSQU1DCQkJMQorI2RlZmluZSBDT05GSUdfTU1DCQkJMQorCisjZGVmaW5lIENGR19EQ0FDSEVfTElORVNaCQkzMgorI2RlZmluZSBDRkdfSUNBQ0hFX0xJTkVTWgkJMzIKKworI2RlZmluZSBDT05GSUdfTlJfRFJBTV9CQU5LUwkJMQorCisvKiBFeHRlcm5hbCBmbGFzaCBvbiBTVEsxMDAwICovCisjaWYgMAorI2RlZmluZSBDRkdfRkxBU0hfQ0ZJCQkJMQorI2RlZmluZSBDRkdfRkxBU0hfQ0ZJX0RSSVZFUgkJMQorI2VuZGlmCisKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0JBU0UJCQkweDAwMDAwMDAwCisjZGVmaW5lIENGR19GTEFTSF9TSVpFCQkJMHg4MDAwMDAKKyNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9CQU5LUwkJMQorI2RlZmluZSBDRkdfTUFYX0ZMQVNIX1NFQ1QJCTEzNQorCisjZGVmaW5lIENGR19NT05JVE9SX0JBU0UJCUNGR19GTEFTSF9CQVNFCisKKyNkZWZpbmUgQ0ZHX0lOVFJBTV9CQVNFCQkJMHgyNDAwMDAwMAorI2RlZmluZSBDRkdfSU5UUkFNX1NJWkUJCQkweDgwMDAKKworI2RlZmluZSBDRkdfU0RSQU1fQkFTRQkJCTB4MTAwMDAwMDAKKworI2RlZmluZSBDRkdfRU5WX0lTX0lOX0ZMQVNICQkxCisjZGVmaW5lIENGR19FTlZfU0laRQkJCTY1NTM2CisjZGVmaW5lIENGR19FTlZfQUREUgkJCShDRkdfRkxBU0hfQkFTRSArIENGR19GTEFTSF9TSVpFIC0gQ0ZHX0VOVl9TSVpFKQorCisjZGVmaW5lIENGR19JTklUX1NQX0FERFIJCShDRkdfSU5UUkFNX0JBU0UgKyBDRkdfSU5UUkFNX1NJWkUpCisKKyNkZWZpbmUgQ0ZHX01BTExPQ19MRU4JCQkoMjU2KjEwMjQpCisKKy8qIEFsbG93IDRNQiBmb3IgdGhlIGtlcm5lbCBydW4tdGltZSBpbWFnZSAqLworI2RlZmluZSBDRkdfTE9BRF9BRERSCQkJKENGR19TRFJBTV9CQVNFICsgMHgwMDQwMDAwMCkKKyNkZWZpbmUgQ0ZHX0JPT1RQQVJBTVNfTEVOCQkoMTYgKiAxMDI0KQorCisvKiBPdGhlciBjb25maWd1cmF0aW9uIHNldHRpbmdzIHRoYXQgc2hvdWxkbid0IGhhdmUgdG8gY2hhbmdlIGFsbCB0aGF0IG9mdGVuICovCisjZGVmaW5lIENGR19QUk9NUFQJCQkiVWJvb3Q+ICIKKyNkZWZpbmUgQ0ZHX0NCU0laRQkJCTI1NgorI2RlZmluZSBDRkdfTUFYQVJHUwkJCTE2CisjZGVmaW5lIENGR19QQlNJWkUJCQkoQ0ZHX0NCU0laRSArIHNpemVvZihDRkdfUFJPTVBUKSArIDE2KQorI2RlZmluZSBDRkdfTE9OR0hFTFAJCQkxCisKKyNkZWZpbmUgQ0ZHX01FTVRFU1RfU1RBUlQJCUNGR19TRFJBTV9CQVNFCisjZGVmaW5lIENGR19NRU1URVNUX0VORAkJCShDRkdfTUVNVEVTVF9TVEFSVCArIDB4NzAwMDAwKQorI2RlZmluZSBDRkdfQkFVRFJBVEVfVEFCTEUgeyAxMTUyMDAsIDM4NDAwLCAxOTIwMCwgOTYwMCwgMjQwMCB9CisKKyNlbmRpZiAvKiBfX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvYXRzdGsxMDA0LmggYi9pbmNsdWRlL2NvbmZpZ3MvYXRzdGsxMDA0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJhZDE3MQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvY29uZmlncy9hdHN0azEwMDQuaApAQCAtMCwwICsxLDE4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBdG1lbCBDb3Jwb3JhdGlvbgorICoKKyAqIENvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIHRoZSBBVFNUSzEwMDMgQ1BVIGRhdWdodGVyYm9hcmQKKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworI2lmbmRlZiBfX0NPTkZJR19ICisjZGVmaW5lIF9fQ09ORklHX0gKKworI2RlZmluZSBDT05GSUdfQVZSMzIJCQkxCisjZGVmaW5lIENPTkZJR19BVDMyQVAJCQkxCisjZGVmaW5lIENPTkZJR19BVDMyQVA3MDAyCQkxCisjZGVmaW5lIENPTkZJR19BVFNUSzEwMDQJCTEKKyNkZWZpbmUgQ09ORklHX0FUU1RLMTAwMAkJMQorCisjZGVmaW5lIENPTkZJR19BVFNUSzEwMDBfRVhUX0ZMQVNICTEKKworLyoKKyAqIFRpbWVyIGNsb2NrIGZyZXF1ZW5jeS4gV2UncmUgdXNpbmcgdGhlIENQVS1pbnRlcm5hbCBDT1VOVCByZWdpc3RlcgorICogZm9yIHRoaXMsIHNvIHRoaXMgaXMgZXF1aXZhbGVudCB0byB0aGUgQ1BVIGNvcmUgY2xvY2sgZnJlcXVlbmN5CisgKi8KKyNkZWZpbmUgQ0ZHX0haCQkJCTEwMDAKKworLyoKKyAqIFNldCB1cCB0aGUgUExMIHRvIHJ1biBhdCAxNDAgTUh6LCB0aGUgQ1BVIHRvIHJ1biBhdCB0aGUgUExMCisgKiBmcmVxdWVuY3ksIHRoZSBIU0IgYW5kIFBCQiBhdCAxLzIsIGFuZCB0aGUgUEJBIHRvIHJ1biBhdCAxLzQgdGhlCisgKiBQTEwgZnJlcXVlbmN5LgorICogKENGR19PU0MwX0haICogQ0ZHX1BMTDBfTVVMKSAvIENGR19QTEwwX0RJViA9IFBMTCBNSHoKKyAqLworI2RlZmluZSBDT05GSUdfUExMCQkJMQorI2RlZmluZSBDRkdfUE9XRVJfTUFOQUdFUgkJMQorI2RlZmluZSBDRkdfT1NDMF9IWgkJCTIwMDAwMDAwCisjZGVmaW5lIENGR19QTEwwX0RJVgkJCTEKKyNkZWZpbmUgQ0ZHX1BMTDBfTVVMCQkJNworI2RlZmluZSBDRkdfUExMMF9TVVBQUkVTU19DWUNMRVMJMTYKKy8qCisgKiBTZXQgdGhlIENQVSBydW5uaW5nIGF0OgorICogUExMIC8gKDJeQ0ZHX0NMS0RJVl9DUFUpID0gQ1BVIE1IegorICovCisjZGVmaW5lIENGR19DTEtESVZfQ1BVCQkJMAorLyoKKyAqIFNldCB0aGUgSFNCIHJ1bm5pbmcgYXQ6CisgKiBQTEwgLyAoMl5DRkdfQ0xLRElWX0hTQikgPSBIU0IgTUh6CisgKi8KKyNkZWZpbmUgQ0ZHX0NMS0RJVl9IU0IJCQkxCisvKgorICogU2V0IHRoZSBQQkEgcnVubmluZyBhdDoKKyAqIFBMTCAvICgyXkNGR19DTEtESVZfUEJBKSA9IFBCQSBNSHoKKyAqLworI2RlZmluZSBDRkdfQ0xLRElWX1BCQQkJCTIKKy8qCisgKiBTZXQgdGhlIFBCQiBydW5uaW5nIGF0OgorICogUExMIC8gKDJeQ0ZHX0NMS0RJVl9QQkIpID0gUEJCIE1IegorICovCisjZGVmaW5lIENGR19DTEtESVZfUEJCCQkJMQorCisvKgorICogVGhlIFBMTE9QVCByZWdpc3RlciBjb250cm9scyB0aGUgUExMIGxpa2UgdGhpczoKKyAqICAgaWNwID0gUExMT1BUPDI+CisgKiAgIGl2Y28gPSBQTExPUFQ8MTowPgorICoKKyAqIFdlIHdhbnQgaWNwPTEgKGRlZmF1bHQpIGFuZCBpdmNvPTAgKDgwLTE2MCBNSHopIG9yIGl2Y289MiAoMTUwLTI0ME1IeikuCisgKi8KKyNkZWZpbmUgQ0ZHX1BMTDBfT1BUCQkJMHgwNAorCisjdW5kZWYgQ09ORklHX1VTQVJUMAorI2RlZmluZSBDT05GSUdfVVNBUlQxCQkJMQorI3VuZGVmIENPTkZJR19VU0FSVDIKKyN1bmRlZiBDT05GSUdfVVNBUlQzCisKKy8qIFVzZXIgc2VydmljZWFibGUgc3R1ZmYgKi8KKyNkZWZpbmUgQ09ORklHX0RPU19QQVJUSVRJT04JCTEKKworI2RlZmluZSBDT05GSUdfQ01ETElORV9UQUcJCTEKKyNkZWZpbmUgQ09ORklHX1NFVFVQX01FTU9SWV9UQUdTCTEKKyNkZWZpbmUgQ09ORklHX0lOSVRSRF9UQUcJCTEKKworI2RlZmluZSBDT05GSUdfU1RBQ0tTSVpFCQkoMjA0OCkKKworI2RlZmluZSBDT05GSUdfQkFVRFJBVEUJCQkxMTUyMDAKKyNkZWZpbmUgQ09ORklHX0JPT1RBUkdTCQkJCQkJCVwKKwkiY29uc29sZT10dHlTMCByb290PS9kZXYvbW1jYmxrMHAxIHJvb3R3YWl0IgorCisjZGVmaW5lIENPTkZJR19CT09UQ09NTUFORAkJCQkJCVwKKwkibW1jaW5pdDsgZXh0MmxvYWQgbW1jIDA6MSAweDEwMjAwMDAwIC9ib290L3VJbWFnZTsgYm9vdG0iCisKKy8qCisgKiBPbmx5IGludGVycnVwdCBhdXRvYm9vdCBpZiA8c3BhY2U+IGlzIHByZXNzZWQuIE90aGVyd2lzZSwgZ2FyYmFnZQorICogZGF0YSBvbiB0aGUgc2VyaWFsIGxpbmUgbWF5IGludGVycnVwdCB0aGUgYm9vdCBzZXF1ZW5jZS4KKyAqLworI2RlZmluZSBDT05GSUdfQk9PVERFTEFZCQkxCisjZGVmaW5lIENPTkZJR19BVVRPQk9PVAkJCTEKKyNkZWZpbmUgQ09ORklHX0FVVE9CT09UX0tFWUVECQkxCisjZGVmaW5lIENPTkZJR19BVVRPQk9PVF9QUk9NUFQJCQkJXAorCSJQcmVzcyBTUEFDRSB0byBhYm9ydCBhdXRvYm9vdCBpbiAlZCBzZWNvbmRzXG4iCisjZGVmaW5lIENPTkZJR19BVVRPQk9PVF9ERUxBWV9TVFIJImQiCisjZGVmaW5lIENPTkZJR19BVVRPQk9PVF9TVE9QX1NUUgkiICIKKworLyoKKyAqIENvbW1hbmQgbGluZSBjb25maWd1cmF0aW9uLgorICovCisjaW5jbHVkZSA8Y29uZmlnX2NtZF9kZWZhdWx0Lmg+CisKKyNkZWZpbmUgQ09ORklHX0NNRF9BU0tFTlYKKyNkZWZpbmUgQ09ORklHX0NNRF9FWFQyCisjZGVmaW5lIENPTkZJR19DTURfRkFUCisjZGVmaW5lIENPTkZJR19DTURfSkZGUzIKKyNkZWZpbmUgQ09ORklHX0NNRF9NTUMKKworI3VuZGVmIENPTkZJR19DTURfRlBHQQorI3VuZGVmIENPTkZJR19DTURfTkVUCisjdW5kZWYgQ09ORklHX0NNRF9ORlMKKyN1bmRlZiBDT05GSUdfQ01EX1NFVEdFVERDUgorI3VuZGVmIENPTkZJR19DTURfWElNRworCisjZGVmaW5lIENPTkZJR19BVE1FTF9VU0FSVAkJMQorI2RlZmluZSBDT05GSUdfUElPMgkJCTEKKyNkZWZpbmUgQ0ZHX0hTRFJBTUMJCQkxCisjZGVmaW5lIENPTkZJR19NTUMJCQkxCisKKyNkZWZpbmUgQ0ZHX0RDQUNIRV9MSU5FU1oJCTMyCisjZGVmaW5lIENGR19JQ0FDSEVfTElORVNaCQkzMgorCisjZGVmaW5lIENPTkZJR19OUl9EUkFNX0JBTktTCQkxCisKKy8qIEV4dGVybmFsIGZsYXNoIG9uIFNUSzEwMDAgKi8KKyNpZiAwCisjZGVmaW5lIENGR19GTEFTSF9DRkkJCQkxCisjZGVmaW5lIENGR19GTEFTSF9DRklfRFJJVkVSCQkxCisjZW5kaWYKKworI2RlZmluZSBDRkdfRkxBU0hfQkFTRQkJCTB4MDAwMDAwMDAKKyNkZWZpbmUgQ0ZHX0ZMQVNIX1NJWkUJCQkweDgwMDAwMAorI2RlZmluZSBDRkdfTUFYX0ZMQVNIX0JBTktTCQkxCisjZGVmaW5lIENGR19NQVhfRkxBU0hfU0VDVAkJMTM1CisKKyNkZWZpbmUgQ0ZHX01PTklUT1JfQkFTRQkJQ0ZHX0ZMQVNIX0JBU0UKKworI2RlZmluZSBDRkdfSU5UUkFNX0JBU0UJCQkweDI0MDAwMDAwCisjZGVmaW5lIENGR19JTlRSQU1fU0laRQkJCTB4ODAwMAorCisjZGVmaW5lIENGR19TRFJBTV9CQVNFCQkJMHgxMDAwMDAwMAorI2RlZmluZSBDRkdfU0RSQU1fMTZCSVQJCQkxCisKKyNkZWZpbmUgQ0ZHX0VOVl9JU19JTl9GTEFTSAkJMQorI2RlZmluZSBDRkdfRU5WX1NJWkUJCQk2NTUzNgorI2RlZmluZSBDRkdfRU5WX0FERFIJCQkoQ0ZHX0ZMQVNIX0JBU0UgKyBDRkdfRkxBU0hfU0laRSAtIENGR19FTlZfU0laRSkKKworI2RlZmluZSBDRkdfSU5JVF9TUF9BRERSCQkoQ0ZHX0lOVFJBTV9CQVNFICsgQ0ZHX0lOVFJBTV9TSVpFKQorCisjZGVmaW5lIENGR19NQUxMT0NfTEVOCQkJKDI1NioxMDI0KQorCisvKiBBbGxvdyA0TUIgZm9yIHRoZSBrZXJuZWwgcnVuLXRpbWUgaW1hZ2UgKi8KKyNkZWZpbmUgQ0ZHX0xPQURfQUREUgkJCShDRkdfU0RSQU1fQkFTRSArIDB4MDAyMDAwMDApCisjZGVmaW5lIENGR19CT09UUEFSQU1TX0xFTgkJKDE2ICogMTAyNCkKKworLyogT3RoZXIgY29uZmlndXJhdGlvbiBzZXR0aW5ncyB0aGF0IHNob3VsZG4ndCBoYXZlIHRvIGNoYW5nZSBhbGwgdGhhdCBvZnRlbiAqLworI2RlZmluZSBDRkdfUFJPTVBUCQkJIlVib290PiAiCisjZGVmaW5lIENGR19DQlNJWkUJCQkyNTYKKyNkZWZpbmUgQ0ZHX01BWEFSR1MJCQkxNgorI2RlZmluZSBDRkdfUEJTSVpFCQkJKENGR19DQlNJWkUgKyBzaXplb2YoQ0ZHX1BST01QVCkgKyAxNikKKyNkZWZpbmUgQ0ZHX0xPTkdIRUxQCQkJMQorCisjZGVmaW5lIENGR19NRU1URVNUX1NUQVJUCQlDRkdfU0RSQU1fQkFTRQorI2RlZmluZSBDRkdfTUVNVEVTVF9FTkQJCQkoQ0ZHX01FTVRFU1RfU1RBUlQgKyAweDcwMDAwMCkKKyNkZWZpbmUgQ0ZHX0JBVURSQVRFX1RBQkxFIHsgMTE1MjAwLCAzODQwMCwgMTkyMDAsIDk2MDAsIDI0MDAgfQorCisjZW5kaWYgLyogX19DT05GSUdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL21zNzcyMnNlLmggYi9pbmNsdWRlL2NvbmZpZ3MvbXM3NzIyc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTBkMDE4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9jb25maWdzL21zNzcyMnNlLmgKQEAgLTAsMCArMSwxMzYgQEAKKy8qCisgKiBDb25maWd1YXRpb24gc2V0dGluZ3MgZm9yIHRoZSBIaXRhY2hpIFNvbHV0aW9uIEVuZ2luZSA3NzIyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IE5vYnVoaXJvIEl3YW1hdHN1IDxpd2FtYXRzdUBuaWdhdXJpLm9yZz4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaWZuZGVmIF9fTVM3NzIyU0VfSAorI2RlZmluZSBfX01TNzcyMlNFX0gKKworI3VuZGVmIERFQlVHCisjZGVmaW5lIENPTkZJR19TSAkJMQorI2RlZmluZSBDT05GSUdfU0g0CQkxCisjZGVmaW5lIENPTkZJR19DUFVfU0g3NzIyCTEKKyNkZWZpbmUgQ09ORklHX01TNzcyMlNFCQkxCisKKyNkZWZpbmUgQ09ORklHX0NNRF9GTEFTSAorI2RlZmluZSBDT05GSUdfQ01EX05FVAorI2RlZmluZSBDT05GSUdfQ01EX1BJTkcKKyNkZWZpbmUgQ09ORklHX0NNRF9ERkwKKyNkZWZpbmUgQ09ORklHX0NNRF9TRFJBTQorI2RlZmluZSBDT05GSUdfQ01EX0VOVgorCisjZGVmaW5lIENPTkZJR19CQVVEUkFURQkJMTE1MjAwCisjZGVmaW5lIENPTkZJR19CT09UREVMQVkJMworI2RlZmluZSBDT05GSUdfQk9PVEFSR1MgICAgCSJjb25zb2xlPXR0eVNDMCwxMTUyMDAgcm9vdD0xZjAxIgorI2RlZmluZSBDT05GSUdfTkVUTUFTSyAgICAgICAgICAyNTUuMjU1LjI1NS4wCisjZGVmaW5lIENPTkZJR19JUEFERFIJCTE5Mi4xNjguMC4yMgorI2RlZmluZSBDT05GSUdfU0VSVkVSSVAJCTE5Mi4xNjguMC4xCisjZGVmaW5lIENPTkZJR19HQVRFV0FZSVAJMTkyLjE2OC4wLjEKKworI2RlZmluZSBDT05GSUdfVkVSU0lPTl9WQVJJQUJMRQorI3VuZGVmICBDT05GSUdfU0hPV19CT09UX1BST0dSRVNTCisKKy8qIFNNQzkxMTEgKi8KKyNkZWZpbmUgQ09ORklHX0RSSVZFUl9TTUM5MTExMQorI2RlZmluZSBDT05GSUdfU01DOTExMTFfQkFTRSAgICAoMHhCODAwMDAwMCkKKworLyogTUVNT1JZICovCisjZGVmaW5lIE1TNzcyMlNFX1NEUkFNX0JBU0UJKDB4OEMwMDAwMDApCisjZGVmaW5lIE1TNzcyMlNFX0ZMQVNIX0JBU0VfMQkoMHhBMDAwMDAwMCkKKyNkZWZpbmUgTVM3NzIyU0VfRkxBU0hfQkFOS19TSVpFCSg4KjEwMjQgKiAxMDI0KQorCisjZGVmaW5lIENGR19MT05HSEVMUAkJCQkvKiB1bmRlZiB0byBzYXZlIG1lbW9yeQkqLworI2RlZmluZSBDRkdfUFJPTVBUCQkiPT4gIgkJLyogTW9uaXRvciBDb21tYW5kIFByb21wdCAqLworI2RlZmluZSBDRkdfQ0JTSVpFCQkyNTYJCS8qIEJ1ZmZlciBzaXplIGZvciBpbnB1dCBmcm9tIHRoZSBDb25zb2xlICovCisjZGVmaW5lIENGR19QQlNJWkUJCTI1NgkJLyogQnVmZmVyIHNpemUgZm9yIENvbnNvbGUgb3V0cHV0ICovCisjZGVmaW5lIENGR19NQVhBUkdTCQkxNgkJLyogbWF4IGFyZ3MgYWNjZXB0ZWQgZm9yIG1vbml0b3IgY29tbWFuZHMgKi8KKyNkZWZpbmUgQ0ZHX0JBUkdTSVpFCQk1MTIJCS8qIEJ1ZmZlciBzaXplIGZvciBCb290IEFyZ3VtZW50cyBwYXNzZWQgdG8ga2VybmVsICovCisjZGVmaW5lIENGR19CQVVEUkFURV9UQUJMRQl7IDExNTIwMCB9CS8qIExpc3Qgb2YgbGVnYWwgYmF1ZHJhdGUgc2V0dGluZ3MgZm9yIHRoaXMgYm9hcmQgKi8KKworLyogU0NJRiAqLworI2RlZmluZSBDRkdfU0NJRl9DT05TT0xFCTEKKyNkZWZpbmUgQ09ORklHX0NPTlNfU0NJRjAJMQorI3VuZGVmICBDRkdfQ09OU09MRV9JTkZPX1FVSUVUCQkJLyogU3VwcHJlc3MgZGlzcGxheSBvZiBjb25zb2xlIGluZm9ybWF0aW9uIGF0IGJvb3QgKi8KKyN1bmRlZiAgQ0ZHX0NPTlNPTEVfT1ZFUldSSVRFX1JPVVRJTkUKKyN1bmRlZiAgQ0ZHX0NPTlNPTEVfRU5WX09WRVJXUklURQorCisjZGVmaW5lIENGR19NRU1URVNUX1NUQVJUCShNUzc3MjJTRV9TRFJBTV9CQVNFKQorI2RlZmluZSBDRkdfTUVNVEVTVF9FTkQJCShDRkdfTUVNVEVTVF9TVEFSVCArICg2MCAqIDEwMjQgKiAxMDI0KSkKKworI3VuZGVmICBDRkdfQUxUX01FTVRFU1QJCS8qIEVuYWJsZSBhbHRlcm5hdGUsIG1vcmUgZXh0ZW5zaXZlLCBtZW1vcnkgdGVzdCAqLworI3VuZGVmICBDRkdfTUVNVEVTVF9TQ1JBVENICS8qIFNjcmF0Y2ggYWRkcmVzcyB1c2VkIGJ5IHRoZSBhbHRlcm5hdGUgbWVtb3J5IHRlc3QgKi8KKworI3VuZGVmICBDRkdfTE9BRFNfQkFVRF9DSEFOR0UJLyogRW5hYmxlIHRlbXBvcmFyeSBiYXVkcmF0ZSBjaGFuZ2Ugd2hpbGUgc2VyaWFsIGRvd25sb2FkICovCisKKyNkZWZpbmUgQ0ZHX1NEUkFNX0JBU0UJKE1TNzcyMlNFX1NEUkFNX0JBU0UpCisjZGVmaW5lIENGR19TRFJBTV9TSVpFCSg2NCAqIDEwMjQgKiAxMDI0KQkvKiBtYXliZSBtb3JlLCBidXQgaWYgc28gdS1ib290IGRvZXNuJ3Qga25vdyBhYm91dCBpdC4uLiAqLworCisjZGVmaW5lIENGR19MT0FEX0FERFIJKENGR19TRFJBTV9CQVNFICsgNCAqIDEwMjQgKiAxMDI0KQkvKiBkZWZhdWx0IGxvYWQgYWRkcmVzcyBmb3Igc2NyaXB0cyA/IT8gKi8KKworI2RlZmluZSBDRkdfTU9OSVRPUl9CQVNFCShNUzc3MjJTRV9GTEFTSF9CQVNFXzEpCS8qIEFkZHJlc3Mgb2YgdS1ib290IGltYWdlCisJCQkJCQkgICAJaW4gRmxhc2ggKE5PVCBydW4gdGltZSBhZGRyZXNzIGluIFNEUkFNKSA/IT8gKi8KKyNkZWZpbmUgQ0ZHX01PTklUT1JfTEVOCSgxMjggKiAxMDI0KQkJLyogKi8KKyNkZWZpbmUgQ0ZHX01BTExPQ19MRU4JKDI1NiAqIDEwMjQpCQkvKiBTaXplIG9mIERSQU0gcmVzZXJ2ZWQgZm9yIG1hbGxvYygpIHVzZSAqLworI2RlZmluZSBDRkdfR0JMX0RBVEFfU0laRQkoMjU2KQkJLyogc2l6ZSBpbiBieXRlcyByZXNlcnZlZCBmb3IgaW5pdGlhbCBkYXRhICovCisjZGVmaW5lIENGR19CT09UTUFQU1oJKDggKiAxMDI0ICogMTAyNCkKKworLyogRkxBU0ggKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX0NGSQorI2RlZmluZSBDRkdfRkxBU0hfQ0ZJX0RSSVZFUgorI3VuZGVmICBDRkdfRkxBU0hfUVVJRVRfVEVTVAorI2RlZmluZSBDRkdfRkxBU0hfRU1QVFlfSU5GTwkJCS8qIHByaW50ICdFJyBmb3IgZW1wdHkgc2VjdG9yIG9uIGZsaW5mbyAqLworCisjZGVmaW5lIENGR19GTEFTSF9CQVNFCQkoTVM3NzIyU0VfRkxBU0hfQkFTRV8xKQkvKiBQaHlzaWNhbCBzdGFydCBhZGRyZXNzIG9mIEZsYXNoIG1lbW9yeSAqLworCisjZGVmaW5lIENGR19NQVhfRkxBU0hfU0VDVAkxNTAJCS8qIE1heCBudW1iZXIgb2Ygc2VjdG9ycyBvbiBlYWNoCisJCQkJICAgCQkJRmxhc2ggY2hpcCAqLworCisvKiBpZiB5b3UgdXNlIGFsbCBOT1IgRmxhc2ggLCB5b3UgY2hhbmdlIGRpcC1zd2l0Y2guIFBsZWFzZSBzZWUgTVM3NzIyU0UwMSBNYW51YWwuICovCisjZGVmaW5lIENGR19NQVhfRkxBU0hfQkFOS1MJMgorI2RlZmluZSBDRkdfRkxBU0hfQkFOS1NfTElTVAl7IENGR19GTEFTSF9CQVNFICsgKDAgKiBNUzc3MjJTRV9GTEFTSF9CQU5LX1NJWkUpLCBcCisJCQkJICBDRkdfRkxBU0hfQkFTRSArICgxICogTVM3NzIyU0VfRkxBU0hfQkFOS19TSVpFKSwgXAorCQkJCX0KKworI2RlZmluZSBDRkdfRkxBU0hfRVJBU0VfVE9VVAkoMyAqIDEwMDApCS8qIFRpbWVvdXQgZm9yIEZsYXNoIGVyYXNlIG9wZXJhdGlvbnMgKGluIG1zKSAqLworI2RlZmluZSBDRkdfRkxBU0hfV1JJVEVfVE9VVAkoMyAqIDEwMDApCS8qIFRpbWVvdXQgZm9yIEZsYXNoIHdyaXRlIG9wZXJhdGlvbnMgKGluIG1zKSAqLworI2RlZmluZSBDRkdfRkxBU0hfTE9DS19UT1VUCSgzICogMTAwMCkJLyogVGltZW91dCBmb3IgRmxhc2ggc2V0IHNlY3RvciBsb2NrIGJpdCBvcGVyYXRpb25zIChpbiBtcykgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX1VOTE9DS19UT1VUCSgzICogMTAwMCkJLyogVGltZW91dCBmb3IgRmxhc2ggY2xlYXIgbG9jayBiaXQgb3BlcmF0aW9ucyAoaW4gbXMpICovCisKKyN1bmRlZiAgQ0ZHX0ZMQVNIX1BST1RFQ1RJT04JCQkvKiBVc2UgaGFyZHdhcmUgZmxhc2ggc2VjdG9ycyBwcm90ZWN0aW9uIGluc3RlYWQgb2YgVS1Cb290IHNvZnR3YXJlIHByb3RlY3Rpb24gKi8KKworI3VuZGVmICBDRkdfRElSRUNUX0ZMQVNIX1RGVFAKKworI2RlZmluZSBDRkdfRU5WX0lTX0lOX0ZMQVNICisjZGVmaW5lIENPTkZJR19FTlZfT1ZFUldSSVRFCTEKKyNkZWZpbmUgQ0ZHX0VOVl9TRUNUX1NJWkUJKDggKiAxMDI0KQorI2RlZmluZSBDRkdfRU5WX1NJWkUJCShDRkdfRU5WX1NFQ1RfU0laRSkKKyNkZWZpbmUgQ0ZHX0VOVl9BRERSCQkoQ0ZHX0ZMQVNIX0JBU0UgKyAoMSAqIENGR19FTlZfU0VDVF9TSVpFKSkKKyNkZWZpbmUgQ0ZHX0VOVl9PRkZTRVQJCShDRkdfRU5WX0FERFIgLSBDRkdfRkxBU0hfQkFTRSkgCS8qIE9mZnNldCBvZiBlbnYgRmxhc2ggc2VjdG9yIHJlbGF0aXZlIHRvIENGR19GTEFTSF9CQVNFICovCisjZGVmaW5lIENGR19FTlZfU0laRV9SRURVTkQJKENGR19FTlZfU0VDVF9TSVpFKQorI2RlZmluZSBDRkdfRU5WX0FERFJfUkVEVU5ECShDRkdfRkxBU0hfQkFTRSArICgyICogQ0ZHX0VOVl9TRUNUX1NJWkUpKQorCisvKiBCb2FyZCBDbG9jayAqLworI2RlZmluZSBDT05GSUdfU1lTX0NMS19GUkVRCTMzMzMzMzMzCisjZGVmaW5lIFRNVV9DTEtfRElWSURFUgkJKDQpCS8qIDQgKGRlZmF1bHQpLCAxNiwgNjQsIDI1NiBvciAxMDI0ICovCisjZGVmaW5lIENGR19IWgkJCShDT05GSUdfU1lTX0NMS19GUkVRIC8gVE1VX0NMS19ESVZJREVSKQorCisjZW5kaWYJLyogX19NUzc3MjJTRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvbXM3NzUwc2UuaCBiL2luY2x1ZGUvY29uZmlncy9tczc3NTBzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2NjgxNTYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvbXM3NzUwc2UuaApAQCAtMCwwICsxLDEwOCBAQAorLyoKKyAqIENvbmZpZ3VhdGlvbiBzZXR0aW5ncyBmb3IgdGhlIEhpdGFjaGkgU29sdXRpb24gRW5naW5lIDc3NTAKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgTm9idWhpcm8gSXdhbWF0c3UgPGl3YW1hdHN1QG5pZ2F1cmkub3JnPgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpZm5kZWYgX19NUzc3NTBTRV9ICisjZGVmaW5lIF9fTVM3NzUwU0VfSAorCisjdW5kZWYgREVCVUcKKyNkZWZpbmUgQ09ORklHX1NICQkxCisjZGVmaW5lIENPTkZJR19TSDQJCTEKKyNkZWZpbmUgQ09ORklHX0NQVV9TSDc3NTAJMQorLyogI2RlZmluZSBDT05GSUdfQ1BVX1NINzc1MQkxICovCisvKiAjZGVmaW5lIENPTkZJR19DUFVfVFlQRV9SCTEgKi8KKyNkZWZpbmUgQ09ORklHX01TNzc1MFNFCQkxCisjZGVmaW5lIF9fTElUVExFX0VORElBTl9fCTEKKworLyoKKyAqIENvbW1hbmQgbGluZSBjb25maWd1cmF0aW9uLgorICovCisvKiNpbmNsdWRlIDxjb25maWdfY21kX2RlZmF1bHQuaD4qLworCisjZGVmaW5lIENPTkZJR19DTURfREZMCisjZGVmaW5lIENPTkZJR19DTURfRkxBU0gKKyNkZWZpbmUgQ09ORklHX0NNRF9FTlYKKworI2RlZmluZSBDRkdfU0NJRl9DT05TT0xFCTEKKyNkZWZpbmUgQ09ORklHX0JBVURSQVRFCQkzODQwMAorI2RlZmluZSBDT05GSUdfQ09OU19TQ0lGMQkxCisjZGVmaW5lIEJPQVJEX0xBVEVfSU5JVAkJMQorCisjZGVmaW5lIENPTkZJR19CT09UREVMQVkJLTEKKyNkZWZpbmUgQ09ORklHX0JPT1RBUkdTICAgIAkiY29uc29sZT10dHlTQzAsMzg0MDAiCisjZGVmaW5lIENPTkZJR19FTlZfT1ZFUldSSVRFCTEKKworLyogU0RSQU0gKi8KKyNkZWZpbmUgQ0ZHX1NEUkFNX0JBU0UJCSgweDhDMDAwMDAwKQorI2RlZmluZSBDRkdfU0RSQU1fU0laRQkJKDY0ICogMTAyNCAqIDEwMjQpCisKKyNkZWZpbmUgQ0ZHX0xPTkdIRUxQCisjZGVmaW5lIENGR19QUk9NUFQJCSI9PiAiCisjZGVmaW5lIENGR19DQlNJWkUJCTI1NgorI2RlZmluZSBDRkdfUEJTSVpFCQkyNTYKKyNkZWZpbmUgQ0ZHX01BWEFSR1MJCTE2CisjZGVmaW5lIENGR19CQVJHU0laRQkJNTEyCisvKiBMaXN0IG9mIGxlZ2FsIGJhdWRyYXRlIHNldHRpbmdzIGZvciB0aGlzIGJvYXJkICovCisjZGVmaW5lIENGR19CQVVEUkFURV9UQUJMRQl7IDExNTIwMCwgNTc2MDAsIDM4NDAwLCAxOTIwMCwgOTYwMCB9CisKKyNkZWZpbmUgQ0ZHX01FTVRFU1RfU1RBUlQJKENGR19TRFJBTV9CQVNFKQorI2RlZmluZSBDRkdfTUVNVEVTVF9FTkQJCShURVhUX0JBU0UgLSAweDEwMDAwMCkKKworLyogTk9SIEZsYXNoICovCisvKiAjZGVmaW5lIENGR19GTEFTSF9CQVNFCQkoMHhBMTAwMDAwMCkqLworI2RlZmluZSBDRkdfRkxBU0hfQkFTRQkJKDB4QTAwMDAwMDApCisjZGVmaW5lIENGR19NQVhfRkxBU0hfQkFOS1MJKDEpCS8qIE1heCBudW1iZXIgb2YKKwkJCQkgCSAqIEZsYXNoIG1lbW9yeSBiYW5rcworCQkJCSAJICovCisjZGVmaW5lIENGR19NQVhfRkxBU0hfU0VDVAkxNDIKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0JBTktTX0xJU1QJeyBDRkdfRkxBU0hfQkFTRSB9CisKKyNkZWZpbmUgQ0ZHX0xPQURfQUREUgkJKENGR19TRFJBTV9CQVNFICsgNCAqIDEwMjQgKiAxMDI0KQorI2RlZmluZSBDRkdfTU9OSVRPUl9CQVNFCShDRkdfRkxBU0hfQkFTRSkJLyogQWRkcmVzcyBvZiB1LWJvb3QgaW1hZ2UgaW4gRmxhc2ggKi8KKyNkZWZpbmUgQ0ZHX01PTklUT1JfTEVOCQkoMTI4ICogMTAyNCkKKyNkZWZpbmUgQ0ZHX01BTExPQ19MRU4JCSgyNTYgKiAxMDI0KQkJLyogU2l6ZSBvZiBEUkFNIHJlc2VydmVkIGZvciBtYWxsb2MoKSB1c2UgKi8KKworI2RlZmluZSBDRkdfR0JMX0RBVEFfU0laRQkoMjU2KQkJCS8qIHNpemUgaW4gYnl0ZXMgcmVzZXJ2ZWQgZm9yIGluaXRpYWwgZGF0YSAqLworI2RlZmluZSBDRkdfQk9PVE1BUFNaCQkoOCAqIDEwMjQgKiAxMDI0KQorI2RlZmluZSBDRkdfUlhfRVRIX0JVRkZFUgkoOCkKKworI2RlZmluZSBDRkdfRkxBU0hfQ0ZJCisjZGVmaW5lIENGR19GTEFTSF9DRklfRFJJVkVSCisjdW5kZWYgQ0ZHX0ZMQVNIX0NGSV9CUk9LRU5fVEFCTEUKKyN1bmRlZiAgQ0ZHX0ZMQVNIX1FVSUVUX1RFU1QKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0VNUFRZX0lORk8JCQkJLyogcHJpbnQgJ0UnIGZvciBlbXB0eSBzZWN0b3Igb24gZmxpbmZvICovCisKKworI2RlZmluZSBDRkdfRU5WX0lTX0lOX0ZMQVNICisjZGVmaW5lIENGR19FTlZfU0VDVF9TSVpFCTB4MjAwMDAKKyNkZWZpbmUgQ0ZHX0VOVl9TSVpFCQkoQ0ZHX0VOVl9TRUNUX1NJWkUpCisjZGVmaW5lIENGR19FTlZfQUREUgkJKENGR19NT05JVE9SX0JBU0UgKyBDRkdfTU9OSVRPUl9MRU4pCisjZGVmaW5lIENGR19GTEFTSF9FUkFTRV9UT1VUICAJMTIwMDAwCisjZGVmaW5lIENGR19GTEFTSF9XUklURV9UT1VUCTUwMAorCisvKiBCb2FyZCBDbG9jayAqLworI2RlZmluZSBDT05GSUdfU1lTX0NMS19GUkVRCTMzMzMzMzMzCisjZGVmaW5lIFRNVV9DTEtfRElWSURFUgkJNAorI2RlZmluZSBDRkdfSFoJCQkoQ09ORklHX1NZU19DTEtfRlJFUSAvIFRNVV9DTEtfRElWSURFUikKKworI2VuZGlmIC8qIF9fTVM3NzUwU0VfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL3ZpcnRsYWIyLmggYi9pbmNsdWRlL2NvbmZpZ3MvdmlydGxhYjIuaAppbmRleCBlZGFlNmY0Li44MjdhMjhmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvdmlydGxhYjIuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvdmlydGxhYjIuaApAQCAtMTkzLDExICsxOTMsMTUgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIEZMQVNIIG9yZ2FuaXphdGlvbgogICovCi0jZGVmaW5lIENGR19NQVhfRkxBU0hfQkFOS1MJMgkvKiBtYXggbnVtYmVyIG9mIG1lbW9yeSBiYW5rcwkJKi8KLSNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9TRUNUCTcxCS8qIG1heCBudW1iZXIgb2Ygc2VjdG9ycyBvbiBvbmUgY2hpcAkqLwogCi0jZGVmaW5lIENGR19GTEFTSF9FUkFTRV9UT1VUCTEyMDAwMAkvKiBUaW1lb3V0IGZvciBGbGFzaCBFcmFzZSAoaW4gbXMpCSovCi0jZGVmaW5lIENGR19GTEFTSF9XUklURV9UT1VUCTUwMAkvKiBUaW1lb3V0IGZvciBGbGFzaCBXcml0ZSAoaW4gbXMpCSovCisvKiB1c2UgQ0ZJIGZsYXNoIGRyaXZlciAqLworI2RlZmluZSBDRkdfRkxBU0hfQ0ZJCQkxCS8qIEZsYXNoIGlzIENGSSBjb25mb3JtYW50ICovCisjZGVmaW5lIENGR19GTEFTSF9DRklfRFJJVkVSCTEJLyogVXNlIHRoZSBjb21tb24gZHJpdmVyICovCisjZGVmaW5lIENGR19GTEFTSF9CQU5LU19MSVNUCXsgQ0ZHX0ZMQVNIX0JBU0UgfQorI2RlZmluZSBDRkdfRkxBU0hfRU1QVFlfSU5GTworI2RlZmluZSBDRkdfRkxBU0hfVVNFX0JVRkZFUl9XUklURQkxCisjZGVmaW5lIENGR19NQVhfRkxBU0hfQkFOS1MJMgkvKiBtYXggbnVtYmVyIG9mIG1lbW9yeSBiYW5rcyAqLworI2RlZmluZSBDRkdfTUFYX0ZMQVNIX1NFQ1QJNzEJLyogbWF4IG51bWJlciBvZiBzZWN0b3JzIG9uIG9uZSBjaGlwICovCiAKICNkZWZpbmUJQ0ZHX0VOVl9JU19JTl9GTEFTSAkxCiAjZGVmaW5lCUNGR19FTlZfT0ZGU0VUCQkweDgwMDAJLyogICBPZmZzZXQgICBvZiBFbnZpcm9ubWVudCBTZWN0b3IJKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZTUwMC5oIGIvaW5jbHVkZS9lNTAwLmgKaW5kZXggOGUzYmY4Yy4uMGQ3MzI2MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9lNTAwLmgKKysrIGIvaW5jbHVkZS9lNTAwLmgKQEAgLTEyLDYgKzEyLDcgQEAKIHsKICAgdW5zaWduZWQgbG9uZyBmcmVxUHJvY2Vzc29yOwogICB1bnNpZ25lZCBsb25nIGZyZXFTeXN0ZW1CdXM7CisgIHVuc2lnbmVkIGxvbmcgZnJlcUREUkJ1czsKIH0gTVBDODV4eF9TWVNfSU5GTzsKIAogI2VuZGlmICAvKiBfQVNNTEFOR1VBR0UgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZmR0X3N1cHBvcnQuaCBiL2luY2x1ZGUvZmR0X3N1cHBvcnQuaAppbmRleCA4Zjc4MWQ0Li4zZDZjMWE4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZkdF9zdXBwb3J0LmgKKysrIGIvaW5jbHVkZS9mZHRfc3VwcG9ydC5oCkBAIC00NCw2ICs0NCw3IEBACiAJCQljb25zdCBjaGFyICpwcm9wLCBjb25zdCB2b2lkICp2YWwsIGludCBsZW4sIGludCBjcmVhdGUpOwogdm9pZCBkb19maXh1cF9ieV9jb21wYXRfdTMyKHZvaWQgKmZkdCwgY29uc3QgY2hhciAqY29tcGF0LAogCQkJICAgIGNvbnN0IGNoYXIgKnByb3AsIHUzMiB2YWwsIGludCBjcmVhdGUpOworaW50IGZkdF9maXh1cF9tZW1vcnkodm9pZCAqYmxvYiwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSk7CiB2b2lkIGZkdF9maXh1cF9ldGhlcm5ldCh2b2lkICpmZHQsIGJkX3QgKmJkKTsKIAogI2lmZGVmIENPTkZJR19PRl9IQVNfVUJPT1RfRU5WCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZsYXNoLmggYi9pbmNsdWRlL2ZsYXNoLmgKaW5kZXggYjBiZjczMy4uMmVkMWUyMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mbGFzaC5oCisrKyBiL2luY2x1ZGUvZmxhc2guaApAQCAtNTIsNiArNTIsOSBAQAogCXVzaG9ydAlleHRfYWRkcjsJCS8qIGV4dGVuZGVkIHF1ZXJ5IHRhYmxlIGFkZHJlc3MJCSovCiAJdXNob3J0CWNmaV92ZXJzaW9uOwkJLyogY2ZpIHZlcnNpb24JCQkJKi8KIAl1c2hvcnQJY2ZpX29mZnNldDsJCS8qIG9mZnNldCBmb3IgY2ZpIHF1ZXJ5IAkJKi8KKwl1bG9uZyAgIGFkZHJfdW5sb2NrMTsJCS8qIHVubG9jayBhZGRyZXNzIDEgZm9yIEFNRCBmbGFzaCByb21zICAqLworCXVsb25nICAgYWRkcl91bmxvY2syOwkJLyogdW5sb2NrIGFkZHJlc3MgMiBmb3IgQU1EIGZsYXNoIHJvbXMgICovCisJY29uc3QgY2hhciAqbmFtZTsJCS8qIGh1bWFuLXJlYWRhYmxlIG5hbWUgCSAgICAgICAgICAgICAgICAqLwogI2VuZGlmCiB9IGZsYXNoX2luZm9fdDsKIApAQCAtNzcsNiArODAsNyBAQAogI2RlZmluZSBGTEFTSF9DRklfWDgJCTB4MDAKICNkZWZpbmUgRkxBU0hfQ0ZJX1gxNgkJMHgwMQogI2RlZmluZSBGTEFTSF9DRklfWDhYMTYJCTB4MDIKKyNkZWZpbmUgRkxBU0hfQ0ZJX1gxNlgzMgkweDA1CiAKIC8qIGNvbnZlcnQgYmV0d2VlbiBiaXQgdmFsdWUgYW5kIG51bWVyaWMgdmFsdWUgKi8KICNkZWZpbmUgQ0ZJX0ZMQVNIX1NISUZUX1dJRFRICTMKQEAgLTEwMSw2ICsxMDUsMTMgQEAKIGV4dGVybiB2b2lkIGZsYXNoX3JlYWRfZmFjdG9yeV9zZXJpYWwoZmxhc2hfaW5mb190ICogaW5mbywgdm9pZCAqIGJ1ZmZlciwgaW50IG9mZnNldCwgaW50IGxlbik7CiAjZW5kaWYJLyogQ0ZHX0ZMQVNIX1BST1RFQ1RJT04gKi8KIAorI2lmZGVmIENPTkZJR19GTEFTSF9DRklfTEVHQUNZCitleHRlcm4gdWxvbmcgYm9hcmRfZmxhc2hfZ2V0X2xlZ2FjeSh1bG9uZyBiYXNlLCBpbnQgYmFua251bSwgZmxhc2hfaW5mb190ICppbmZvKTsKK2V4dGVybiBpbnQgamVkZWNfZmxhc2hfbWF0Y2goZmxhc2hfaW5mb190ICppbmZvLCB1bG9uZyBiYXNlKTsKKyNkZWZpbmUgQ0ZJX0NNRFNFVF9BTURfTEVHQUNZCQkweEZGRjAKKyNlbmRpZgorCisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIHJldHVybiBjb2RlcyBmcm9tIGZsYXNoX3dyaXRlKCk6CiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW9wb3J0cy5oIGIvaW5jbHVkZS9pb3BvcnRzLmgKaW5kZXggY2ZiYTY2Ny4uMTEzNGVhNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9pb3BvcnRzLmgKKysrIGIvaW5jbHVkZS9pb3BvcnRzLmgKQEAgLTI2LDcgKzI2LDcgQEAKICAqIGEgMHgyMCBieXRlIGJvdW5kYXJ5CiAgKi8KICNpZmRlZiBDT05GSUdfTVBDODV4eAotI2RlZmluZSBpb3BvcnRfYWRkcihpbSwgaWR4KSAoaW9wb3J0X3QgKikoKHVpbnQpJigoaW0pLT5pbV9jcG0uaW1fY3BtX2lvcCkgKyAoKGlkeCkqMHgyMCkpCisjZGVmaW5lIGlvcG9ydF9hZGRyKGltLCBpZHgpIChpb3BvcnRfdCAqKSgodWludCkmKGltLT5pbV9jcG1faW9wKSArICgoaWR4KSoweDIwKSkKICNlbHNlCiAjZGVmaW5lIGlvcG9ydF9hZGRyKGltLCBpZHgpIChpb3BvcnRfdCAqKSgodWludCkmKGltKS0+aW1faW9wb3J0ICsgKChpZHgpKjB4MjApKQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJfYXZyMzIvYm9hcmQuYyBiL2xpYl9hdnIzMi9ib2FyZC5jCmluZGV4IDExZDg2NGYuLjgwOWVlM2IgMTAwNjQ0Ci0tLSBhL2xpYl9hdnIzMi9ib2FyZC5jCisrKyBiL2xpYl9hdnIzMi9ib2FyZC5jCkBAIC0zMTEsNiArMzExLDggQEAKIAlkbWFfYWxsb2NfaW5pdCgpOwogCWJvYXJkX2luaXRfaW5mbygpOwogCisJZW5hYmxlX2ludGVycnVwdHMoKTsKKwogCWJkLT5iaV9mbGFzaHN0YXJ0ID0gMDsKIAliZC0+YmlfZmxhc2hzaXplID0gMDsKIAliZC0+YmlfZmxhc2hvZmZzZXQgPSAwOwpkaWZmIC0tZ2l0IGEvbGliX2F2cjMyL2ludGVycnVwdHMuYyBiL2xpYl9hdnIzMi9pbnRlcnJ1cHRzLmMKaW5kZXggY2U1MzhmMy4uMjhkZjIwZCAxMDA2NDQKLS0tIGEvbGliX2F2cjMyL2ludGVycnVwdHMuYworKysgYi9saWJfYXZyMzIvaW50ZXJydXB0cy5jCkBAIC0zNSw1ICszNSw1IEBACiAJc3IgPSBzeXNyZWdfcmVhZChTUik7CiAJYXNtIHZvbGF0aWxlKCJzc3JmCSUwIiA6IDogIm4iKFNZU1JFR19HTV9PRkZTRVQpKTsKIAotCXJldHVybiBTWVNSRUdfQkZFWFQoR00sIHNyKTsKKwlyZXR1cm4gIVNZU1JFR19CRkVYVChHTSwgc3IpOwogfQpkaWZmIC0tZ2l0IGEvYm9hcmQvbXBjODU2OG1kcy9NYWtlZmlsZSBiL2xpYl9zaC9NYWtlZmlsZQpzaW1pbGFyaXR5IGluZGV4IDYyJQpjb3B5IGZyb20gYm9hcmQvbXBjODU2OG1kcy9NYWtlZmlsZQpjb3B5IHRvIGxpYl9zaC9NYWtlZmlsZQppbmRleCBhNzk5YWE0Li5jZjEyN2E4IDEwMDY0NAotLS0gYS9ib2FyZC9tcGM4NTY4bWRzL01ha2VmaWxlCisrKyBiL2xpYl9zaC9NYWtlZmlsZQpAQCAtMSwxMCArMSw2IEBACiAjCi0jIENvcHlyaWdodCAyMDA0LTIwMDcgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IuCi0jIChDKSBDb3B5cmlnaHQgMjAwMS0yMDA2Ci0jIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCi0jCi0jIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCi0jIHByb2plY3QuCisjIENvcHlyaWdodCAoYykgMjAwNworIyBOb2J1aGlybyBJd2FtYXRzdSA8aXdhbWF0c3VAbmlnYXVyaS5vcmc+CiAjCiAjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTIzLDMxICsxOSwxOSBAQAogIwogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKLWlmbmVxICgkKE9CSlRSRUUpLCQoU1JDVFJFRSkpCi0kKHNoZWxsIG1rZGlyIC1wICQob2JqKS4uL2NvbW1vbikKLWVuZGlmCiAKLUxJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKK0xJQgk9ICQob2JqKWxpYiQoQVJDSCkuYQogCi1DT0JKUwk6PSAkKEJPQVJEKS5vIFwKLQliY3NyLm8gXAotCWZ0X2JvYXJkLm8KK1NPQkpTCT0KIAotU09CSlMJOj0gaW5pdC5vCitDT0JKUwk9IGJvYXJkLm8gc2hfbGludXgubyAjIHRpbWUubwogCi1TUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCi1PQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKLVNPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKK1NSQ1MgCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSAkKENPQkpTKSkKIAotJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykgJChTT0JKUykKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpCiAJJChBUikgJChBUkZMQUdTKSAkQCAkKE9CSlMpCiAKLWNsZWFuOgotCXJtIC1mICQoT0JKUykgJChTT0JKUykKLQotZGlzdGNsZWFuOgljbGVhbgotCXJtIC1mICQoTElCKSBjb3JlICouYmFrIC5kZXBlbmQKLQogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCiAjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKZGlmZiAtLWdpdCBhL2xpYl9zaC9ib2FyZC5jIGIvbGliX3NoL2JvYXJkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmNkNjBkNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYl9zaC9ib2FyZC5jCkBAIC0wLDAgKzEsMjEwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3CisgKiBOb2J1aGlybyBJd2FtYXRzdSA8aXdhbWF0c3VAbmlnYXVyaS5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPGNvbW1hbmQuaD4KKyNpbmNsdWRlIDxtYWxsb2MuaD4KKyNpbmNsdWRlIDxkZXZpY2VzLmg+CisjaW5jbHVkZSA8dmVyc2lvbi5oPgorI2luY2x1ZGUgPG5ldC5oPgorI2luY2x1ZGUgPGVudmlyb25tZW50Lmg+CisKK2V4dGVybiB2b2lkIG1hbGxvY19iaW5fcmVsb2MgKHZvaWQpOworZXh0ZXJuIGludCBjcHVfaW5pdCh2b2lkKTsKK2V4dGVybiBpbnQgYm9hcmRfaW5pdCh2b2lkKTsKK2V4dGVybiBpbnQgZHJhbV9pbml0KHZvaWQpOworZXh0ZXJuIGludCB3YXRjaGRvZ19pbml0KHZvaWQpOworZXh0ZXJuIGludCB0aW1lcl9pbml0KHZvaWQpOworCitjb25zdCBjaGFyIHZlcnNpb25fc3RyaW5nW10gPSBVX0JPT1RfVkVSU0lPTiIgKCIgX19EQVRFX18gIiAtICIgX19USU1FX18gIikiOworCit1bnNpZ25lZCBsb25nIG1vbml0b3JfZmxhc2hfbGVuID0gQ0ZHX01PTklUT1JfTEVOOworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBtZW1fbWFsbG9jX3N0YXJ0Oworc3RhdGljIHVuc2lnbmVkIGxvbmcgbWVtX21hbGxvY19lbmQ7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBtZW1fbWFsbG9jX2JyazsKKworc3RhdGljIHZvaWQgbWVtX21hbGxvY19pbml0ICh2b2lkKQoreworCisJbWVtX21hbGxvY19zdGFydCA9IChURVhUX0JBU0UgLSBDRkdfR0JMX0RBVEFfU0laRSAtIENGR19NQUxMT0NfTEVOKTsKKwltZW1fbWFsbG9jX2VuZCA9IChtZW1fbWFsbG9jX3N0YXJ0ICsgQ0ZHX01BTExPQ19MRU4gLSAxNik7CisJbWVtX21hbGxvY19icmsgPSBtZW1fbWFsbG9jX3N0YXJ0OworCW1lbXNldCAoKHZvaWQgKikgbWVtX21hbGxvY19zdGFydCwgMCwKKwkJKG1lbV9tYWxsb2NfZW5kIC0gbWVtX21hbGxvY19zdGFydCkpOworfQorCit2b2lkICpzYnJrIChwdHJkaWZmX3QgaW5jcmVtZW50KQoreworCXVuc2lnbmVkIGxvbmcgb2xkID0gbWVtX21hbGxvY19icms7CisJdW5zaWduZWQgbG9uZyBuZXcgPSBvbGQgKyBpbmNyZW1lbnQ7CisKKwlpZiAoKG5ldyA8IG1lbV9tYWxsb2Nfc3RhcnQpIHx8CisJICAgIChuZXcgPiBtZW1fbWFsbG9jX2VuZCkpIHsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJbWVtX21hbGxvY19icmsgPSBuZXc7CisJcmV0dXJuICh2b2lkICopIG9sZDsKK30KKworc3RhdGljIGludCBzaF9mbGFzaF9pbml0KHZvaWQpCit7CisJREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CisKKwlnZC0+YmQtPmJpX2ZsYXNoc2l6ZSA9IGZsYXNoX2luaXQoKTsKKwlwcmludGYoIkZMQVNIOiAlZE1CXG4iLCBnZC0+YmQtPmJpX2ZsYXNoc2l6ZSAvICgxMDI0KjEwMjQpKTsKKworCXJldHVybiAwOworfQorCisjaWYgZGVmaW5lZChDT05GSUdfQ01EX05BTkQpCit2b2lkIG5hbmRfaW5pdCAodm9pZCk7CitzdGF0aWMgaW50IHNoX25hbmRfaW5pdCh2b2lkKQoreworCXByaW50ZigiTkFORDogIik7CisJbmFuZF9pbml0KCk7CS8qIGdvIGluaXQgdGhlIE5BTkQgKi8KKwlyZXR1cm4gMDsKK30KKyNlbmRpZiAvKiBDT05GSUdfQ01EX05BTkQgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX0NNRF9JREUpCisjaW5jbHVkZSA8aWRlLmg+CitzdGF0aWMgaW50IHNoX21hcnVidW5faW5pdCh2b2lkKQoreworCXB1dHMgKCJJREU6ICAgIik7CisJaWRlX2luaXQoKTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZiAvKiAoQ09ORklHX0NNRF9JREUpICovCisKK3N0YXRpYyBpbnQgc2hfbWVtX2Vudl9pbml0KHZvaWQpCit7CisJbWVtX21hbGxvY19pbml0KCk7CisJbWFsbG9jX2Jpbl9yZWxvYygpOworCWVudl9yZWxvY2F0ZSgpOworCWp1bXB0YWJsZV9pbml0KCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2hfbmV0X2luaXQodm9pZCkKK3sKKwlERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKKwljaGFyICpzLCAqZTsKKwlpbnQgaTsKKworCWdkLT5iZC0+YmlfaXBfYWRkciA9IGdldGVudl9JUGFkZHIoImlwYWRkciIpOworCXMgPSBnZXRlbnYoImV0aGFkZHIiKTsKKwlmb3IgKGkgPSAwOyBpIDwgNjsgKytpKSB7CisJCWdkLT5iZC0+YmlfZW5ldGFkZHJbaV0gPSBzID8gc2ltcGxlX3N0cnRvdWwocywgJmUsIDE2KSA6IDA7CisJCWlmIChzKSBzID0gKCplKSA/IGUgKyAxIDogZTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwordHlwZWRlZiBpbnQgKGluaXRfZm5jX3QpICh2b2lkKTsKKworaW5pdF9mbmNfdCAqaW5pdF9zZXF1ZW5jZVtdID0KK3sKKwljcHVfaW5pdCwJCS8qIGJhc2ljIGNwdSBkZXBlbmRlbnQgc2V0dXAgKi8KKwlib2FyZF9pbml0LAkJLyogYmFzaWMgYm9hcmQgZGVwZW5kZW50IHNldHVwICovCisJaW50ZXJydXB0X2luaXQsCQkvKiBzZXQgdXAgZXhjZXB0aW9ucyAqLworCWVudl9pbml0LAkJLyogZXZlbnQgaW5pdCAqLworCXNlcmlhbF9pbml0LAkJLyogU0NJRiBpbml0ICovCisJd2F0Y2hkb2dfaW5pdCwJCS8qIHdhdGNoZG9nIGluaXQgKi8KKwljb25zb2xlX2luaXRfZiwKKwlkaXNwbGF5X29wdGlvbnMsCisJY2hlY2tjcHUsCisJY2hlY2tib2FyZCwJCS8qIENoZWNrIHN1cHBvcnQgYm9hcmQgKi8KKwlkcmFtX2luaXQsCQkvKiBTRFJBTSBpbml0ICovCisJdGltZXJfaW5pdCwJCS8qIFN1cGVySCBUaW1lciAoVENOVDAgb25seSkgaW5pdCAqLworCXNoX2ZsYXNoX2luaXQsCQkvKiBGbGFzaCBtZW1vcnkoTk9SKSBpbml0Ki8KKwlzaF9tZW1fZW52X2luaXQsCisjaWYgZGVmaW5lZChDT05GSUdfQ01EX05BTkQpCisJc2hfbmFuZF9pbml0LAkJLyogRmxhc2ggbWVtb3J5IChOQU5EKSBpbml0ICovCisjZW5kaWYKKwlkZXZpY2VzX2luaXQsCisJY29uc29sZV9pbml0X3IsCisJaW50ZXJydXB0X2luaXQsCisjaWZkZWYgQk9BUkRfTEFURV9JTklUCisJYm9hcmRfbGF0ZV9pbml0LAorI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfQ01EX05FVCkKKwlzaF9uZXRfaW5pdCwJCS8qIFNIIHNwZWNpZmljIGV0aCBpbml0ICovCisjZW5kaWYKKwlOVUxMCQkJLyogVGVybWluYXRlIHRoaXMgbGlzdCAqLworfTsKKwordm9pZCBzaF9nZW5lcmljX2luaXQgKHZvaWQpCit7CisJREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CisKKwliZF90ICpiZDsKKwlpbml0X2ZuY190ICoqaW5pdF9mbmNfcHRyOworCWNoYXIgKnM7CisJaW50IGk7CisKKwltZW1zZXQgKGdkLCAwLCBDRkdfR0JMX0RBVEFfU0laRSk7CisKKwlnZC0+ZmxhZ3MgfD0gR0RfRkxHX1JFTE9DOwkvKiB0ZWxsIG90aGVyczogcmVsb2NhdGlvbiBkb25lICovCisKKwlnZC0+YmQgPSAoYmRfdCAqKSAoZ2QgKyAxKTsJLyogQXQgZW5kIG9mIGdsb2JhbCBkYXRhICovCisJZ2QtPmJhdWRyYXRlID0gQ09ORklHX0JBVURSQVRFOworCisJZ2QtPmNwdV9jbGsgPSBDT05GSUdfU1lTX0NMS19GUkVROworCisJYmQgPSBnZC0+YmQ7CisJYmQtPmJpX21lbXN0YXJ0CT0gQ0ZHX1NEUkFNX0JBU0U7CisJYmQtPmJpX21lbXNpemUgPSBDRkdfU0RSQU1fU0laRTsKKwliZC0+YmlfZmxhc2hzdGFydCA9IENGR19GTEFTSF9CQVNFOworI2lmIGRlZmluZWQoQ0ZHX1NSQU1fQkFTRSkgJiYgZGVmaW5lZChDRkdfU1JBTV9TSVpFKQorCWJkLT5iaV9zcmFtc3RhcnQ9IENGR19TUkFNX0JBU0U7CisJYmQtPmJpX3NyYW1zaXplCT0gQ0ZHX1NSQU1fU0laRTsKKyNlbmRpZgorCWJkLT5iaV9iYXVkcmF0ZQk9IENPTkZJR19CQVVEUkFURTsKKworCWZvciAoaW5pdF9mbmNfcHRyID0gaW5pdF9zZXF1ZW5jZTsgKmluaXRfZm5jX3B0cjsgKytpbml0X2ZuY19wdHIgLCBpKyspIHsKKwkJaWYgKCgqaW5pdF9mbmNfcHRyKSAoKSAhPSAwKSB7CisJCQloYW5nKCk7CisJCX0KKwl9CisKKyNpZiBkZWZpbmVkKENPTkZJR19DTURfTkVUKQorCXB1dHMgKCJOZXQ6ICAgIik7CisJZXRoX2luaXRpYWxpemUoZ2QtPmJkKTsKKworCWlmICgocyA9IGdldGVudiAoImJvb3RmaWxlIikpICE9IE5VTEwpIHsKKwkJY29weV9maWxlbmFtZSAoQm9vdEZpbGUsIHMsIHNpemVvZiAoQm9vdEZpbGUpKTsKKwl9CisjZW5kaWYgLyogQ09ORklHX0NNRF9ORVQgKi8KKworCXdoaWxlICgxKSB7CisJCW1haW5fbG9vcCgpOworCX0KK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit2b2lkIGhhbmcgKHZvaWQpCit7CisJcHV0cyAoIkJvYXJkIEVSUk9SXG4iKTsKKwlmb3IgKDs7KTsKK30KZGlmZiAtLWdpdCBhL2xpYl9zaC9zaF9saW51eC5jIGIvbGliX3NoL3NoX2xpbnV4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRiNjgxNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYl9zaC9zaF9saW51eC5jCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDMKKyAqIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8Y29tbWFuZC5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKworZXh0ZXJuIGltYWdlX2hlYWRlcl90IGhlYWRlcjsJLyogY29tbW9uL2NtZF9ib290bS5jICovCisKKy8qIFRoZSBTSCBrZXJuZWwgcmVhZHMgYXJndW1lbnRzIGZyb20gdGhlIGVtcHR5IHplcm8gcGFnZSBhdCBsb2NhdGlvbgorICogMCBhdCB0aGUgc3RhcnQgb2YgU0RSQU0uIFRoZSBmb2xsb3dpbmcgYXJlIGNvcGllZCBmcm9tCisgKiBhcmNoL3NoL2tlcm5lbC9zZXR1cC5jIGFuZCBtYXkgcmVxdWlyZSB0d2Vha2luZyBpZiB0aGUga2VybmVsIHNvdXJjZXMKKyAqIGNoYW5nZS4KKyAqLworI2RlZmluZSBQQVJBTSAgICgodW5zaWduZWQgY2hhciAqKUNGR19TRFJBTV9CQVNFICsgMHgxMDAwKQorCisjZGVmaW5lIE1PVU5UX1JPT1RfUkRPTkxZICgqKHVuc2lnbmVkIGxvbmcgKikgKFBBUkFNKzB4MDAwKSkKKyNkZWZpbmUgUkFNRElTS19GTEFHUyAoKih1bnNpZ25lZCBsb25nICopIChQQVJBTSsweDAwNCkpCisjZGVmaW5lIE9SSUdfUk9PVF9ERVYgKCoodW5zaWduZWQgbG9uZyAqKSAoUEFSQU0rMHgwMDgpKQorI2RlZmluZSBMT0FERVJfVFlQRSAoKih1bnNpZ25lZCBsb25nICopIChQQVJBTSsweDAwYykpCisjZGVmaW5lIElOSVRSRF9TVEFSVCAoKih1bnNpZ25lZCBsb25nICopIChQQVJBTSsweDAxMCkpCisjZGVmaW5lIElOSVRSRF9TSVpFICgqKHVuc2lnbmVkIGxvbmcgKikgKFBBUkFNKzB4MDE0KSkKKy8qIC4uLiAqLworI2RlZmluZSBDT01NQU5EX0xJTkUgKChjaGFyICopIChQQVJBTSsweDEwMCkpCisKKyNkZWZpbmUgUkFNRElTS19JTUFHRV9TVEFSVF9NQVNLICAgICAgICAweDA3RkYKKworI2lmZGVmIENGR19ERUJVRworc3RhdGljIHZvaWQgaGV4ZHVtcCAodW5zaWduZWQgY2hhciAqYnVmLCBpbnQgbGVuKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCWlmICgoaSAlIDE2KSA9PSAwKQorCQkJcHJpbnRmICgiJXMlMDh4OiAiLCBpID8gIlxuIiA6ICIiLCAodW5zaWduZWQgaW50KSAmYnVmW2ldKTsKKwkJcHJpbnRmICgiJTAyeCAiLCBidWZbaV0pOworCX0KKwlwcmludGYgKCJcbiIpOworfQorI2VuZGlmCisKK3ZvaWQgZG9fYm9vdG1fbGludXggKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdLAorCQkgICAgIHVsb25nIGFkZHIsIHVsb25nICpsZW5fcHRyLCBpbnQgdmVyaWZ5KQoreworCWltYWdlX2hlYWRlcl90ICpoZHIgPSAmaGVhZGVyOworCWNoYXIgKmJvb3RhcmdzID0gZ2V0ZW52KCJib290YXJncyIpOworCXZvaWQgKCprZXJuZWwpICh2b2lkKSA9ICh2b2lkICgqKSh2b2lkKSkgbnRvaGwgKGhkci0+aWhfZXApOworCisJLyogU2V0dXAgcGFyYW1ldGVycyAqLworCW1lbXNldChQQVJBTSwgMCwgMHgxMDAwKTsJLyogQ2xlYXIgemVybyBwYWdlICovCisJc3RyY3B5KENPTU1BTkRfTElORSwgYm9vdGFyZ3MpOworCisJa2VybmVsKCk7Cit9CmRpZmYgLS1naXQgYS9saWJfc2gvdGltZS5jIGIvbGliX3NoL3RpbWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDMzOTE4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliX3NoL3RpbWUuYwpAQCAtMCwwICsxLDc1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA3CisgKiBOb2J1aGlybyBJd2FtYXRzdSA8aXdhbWF0c3VAbmlnYXVyaS5vcmc+CisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzZXIuaD4KKworc3RhdGljIHZvaWQgdG11X3RpbWVyX3N0YXJ0ICh1bnNpZ25lZCBpbnQgdGltZXIpCit7CisJaWYgKHRpbWVyID4gMikKKwkJcmV0dXJuOworCisJKigodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSBUU1RSMCkgfD0gKDEgPDwgdGltZXIpOworfQorCitpbnQgdGltZXJfaW5pdCAodm9pZCkKK3sKKwkqKHZvbGF0aWxlIHUxNiAqKVRDUjAgPSAwOworCisJdG11X3RpbWVyX3N0YXJ0ICgwKTsKKwlyZXR1cm4gMDsKK30KKwordW5zaWduZWQgbG9uZyBsb25nIGdldF90aWNrcyAodm9pZCkKK3sKKwlyZXR1cm4gKDAgLSAqKCh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgVENOVDApKTsKK30KKwordW5zaWduZWQgbG9uZyBnZXRfdGltZXIgKHVuc2lnbmVkIGxvbmcgYmFzZSkKK3sKKwlyZXR1cm4gKCgwIC0gKigodm9sYXRpbGUgdW5zaWduZWQgaW50ICopIFRDTlQwKSkgLSBiYXNlKTsKK30KKwordm9pZCBzZXRfdGltZXIgKHVuc2lnbmVkIGxvbmcgdCkKK3sKKwkqKCh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgVENOVDApID0gKDAgLSB0KTsKK30KKwordm9pZCByZXNldF90aW1lciAodm9pZCkKK3sKKwlzZXRfdGltZXIgKDApOworfQorCit2b2lkIHVkZWxheSAodW5zaWduZWQgbG9uZyB1c2VjKQoreworCXVuc2lnbmVkIGludCBzdGFydCA9IGdldF90aW1lciAoMCk7CisJdW5zaWduZWQgaW50IGVuZCA9IHN0YXJ0ICsgKHVzZWMgKiAoKENGR19IWiArIDUwMDAwMCkgLyAxMDAwMDAwKSk7CisKKwl3aGlsZSAoZ2V0X3RpbWVyICgwKSA8IGVuZCkKKwkJY29udGludWU7Cit9CisKK3Vuc2lnbmVkIGxvbmcgZ2V0X3RiY2xrICh2b2lkKQoreworCXJldHVybiBDRkdfSFo7Cit9CmRpZmYgLS1naXQgYS9zaF9jb25maWcubWsgYi9zaF9jb25maWcubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDlkNTBmNwotLS0gL2Rldi9udWxsCisrKyBiL3NoX2NvbmZpZy5tawpAQCAtMCwwICsxLDI0IEBACisjCisjIChDKSBDb3B5cmlnaHQgMjAwMC0yMDAyCisjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCisjCisjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisjIHByb2plY3QuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyMgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisjIE1BIDAyMTExLTEzMDcgVVNBCisjCisKK1BMQVRGT1JNX0NQUEZMQUdTICs9IC1EQ09ORklHX1NIIC1EX19TSF9fCg==