From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTPS id 54AA0891C3 for ; Mon, 8 Apr 2019 12:27:04 +0000 (UTC) From: Arkadiusz Hiler Date: Mon, 8 Apr 2019 15:26:46 +0300 Message-Id: <20190408122646.12948-1-arkadiusz.hiler@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t] debugger: Remove shader debugger List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: igt-dev@lists.freedesktop.org Cc: Petri Latvala List-ID: Q29tcGlsYXRpb24gc3VwcG9ydCB3YXMgZHJvcHBlZCBpbiBKYW51YXJ5IDIwMTksIHNpbmNlIHRo ZW4gaXQncyBqdXN0IGEKZGVhZCBjb2RlIGluIHRoZSByZXBvIGFuZCBubyBvbmUgc2VlbXMgdG8g YmUgbWlzc2luZyBpdC4KCkFueXdheSwgaXQgY2FuIGFsd2F5cyBiZSByZWludHJvZHVjZWQgZnJv bSB0aGUgY2hhc21zIG9mIGdpdCBoaXN0b3J5LgoKQ2M6IERhbmllbCBWZXR0ZXIgPGRhbmllbC52 ZXR0ZXJAZmZ3bGwuY2g+CkNjOiBQZXRyaSBMYXR2YWxhIDxwZXRyaS5sYXR2YWxhQGludGVsLmNv bT4KU2lnbmVkLW9mZi1ieTogQXJrYWRpdXN6IEhpbGVyIDxhcmthZGl1c3ouaGlsZXJAaW50ZWwu Y29tPgotLS0KIFJFQURNRS5tZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTAg LQogZGVidWdnZXIvLmdpdGlnbm9yZSAgICAgICAgICAgICAgICAgICAgICB8ICAgMiAtCiBkZWJ1 Z2dlci9kZWJ1Z19yZGF0YS5jICAgICAgICAgICAgICAgICAgIHwgMTQyIC0tLS0tLQogZGVidWdn ZXIvZXVkYi5jICAgICAgICAgICAgICAgICAgICAgICAgICB8IDYwMiAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQogZGVidWdnZXIvc3lzdGVtX3JvdXRpbmUvLmdpdGlnbm9yZSAgICAgICB8ICAxMCAt CiBkZWJ1Z2dlci9zeXN0ZW1fcm91dGluZS9ldmljdGlvbl9tYWNyby5jIHwgIDQ4IC0tCiBkZWJ1 Z2dlci9zeXN0ZW1fcm91dGluZS9wcmVfY3BwLnB5ICAgICAgIHwgMTI2IC0tLS0tCiBkZWJ1Z2dl ci9zeXN0ZW1fcm91dGluZS9zci5nNGEgICAgICAgICAgIHwgMjc3IC0tLS0tLS0tLS0tCiBkZWJ1 Z2dlci9zeXN0ZW1fcm91dGluZS90ZXN0Lmc0YSAgICAgICAgIHwgIDY0IC0tLQogOSBmaWxlcyBj aGFuZ2VkLCAxMjgxIGRlbGV0aW9ucygtKQogZGVsZXRlIG1vZGUgMTAwNjQ0IGRlYnVnZ2VyLy5n aXRpZ25vcmUKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkZWJ1Z2dlci9kZWJ1Z19yZGF0YS5jCiBkZWxl dGUgbW9kZSAxMDA2NDQgZGVidWdnZXIvZXVkYi5jCiBkZWxldGUgbW9kZSAxMDA2NDQgZGVidWdn ZXIvc3lzdGVtX3JvdXRpbmUvLmdpdGlnbm9yZQogZGVsZXRlIG1vZGUgMTAwNjQ0IGRlYnVnZ2Vy L3N5c3RlbV9yb3V0aW5lL2V2aWN0aW9uX21hY3JvLmMKIGRlbGV0ZSBtb2RlIDEwMDc1NSBkZWJ1 Z2dlci9zeXN0ZW1fcm91dGluZS9wcmVfY3BwLnB5CiBkZWxldGUgbW9kZSAxMDA2NDQgZGVidWdn ZXIvc3lzdGVtX3JvdXRpbmUvc3IuZzRhCiBkZWxldGUgbW9kZSAxMDA2NDQgZGVidWdnZXIvc3lz dGVtX3JvdXRpbmUvdGVzdC5nNGEKCmRpZmYgLS1naXQgYS9SRUFETUUubWQgYi9SRUFETUUubWQK aW5kZXggMmQ1ODMwOTUuLjliZTg0MGM4IDEwMDY0NAotLS0gYS9SRUFETUUubWQKKysrIGIvUkVB RE1FLm1kCkBAIC0xMDcsMTYgKzEwNyw2IEBAIHBlb3BsZSBkZWJ1Z2dpbmcgdGhlIGRyaXZlci4K IFRoZXNlIHRvb2xzIGdlbmVyYWxseSBtdXN0IGJlIHJ1biBhcyByb290LCBleGNlcHQgZm9yIHRo ZSBvbmVzIHRoYXQganVzdAogZGVjb2RlIGR1bXBzLgogCi0qKmRlYnVnZ2VyLyoqCi0KLVRoaXMg dG9vbCBpcyB0byBiZSB1c2VkIHRvIGRvIHNoYWRlciBkZWJ1Z2dpbmcuIEl0IGFjdHMgbGlrZSBh Ci1kZWJ1ZyBzZXJ2ZXIgYWNjZXB0aW5nIGNvbm5lY3Rpb25zIGZyb20gZGVidWcgY2xpZW50cyBz dWNoIGFzCi1tZXNhLiBUaGUgY29ubmVjdGlvbnMgaXMgbWFkZSB3aXRoIHVuaXggZG9tYWluIHNv Y2tldHMsIGFuZCBhdCBzb21lCi1wb2ludCBpdCB3b3VsZCBiZSBuaWNlIGlmIHRoaXMgZGlyZWN0 b3J5IGNvbnRhaW5lZCBhIGxpYnJhcnkgZm9yCi1pbml0aWF0aW5nIGNvbm5lY3Rpb25zIHdpdGgg ZGVidWcgY2xpZW50cy4uCi0KLVRoZSBkZWJ1Z2dlciBtdXN0IGJlIHJ1biBhcyByb290OiAic3Vk byBkZWJ1Z2dlci9ldWRiIgotCiAqKmRvY3MvKioKIAogQ29udGFpbnMgdGhlIGF1dG9tYXRpY2Fs bHkgZ2VuZXJhdGVkIGlndC1ncHUtdG9vbHMgbGlicmFyaWVzCmRpZmYgLS1naXQgYS9kZWJ1Z2dl ci8uZ2l0aWdub3JlIGIvZGVidWdnZXIvLmdpdGlnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggODczY2QyNzMuLjAwMDAwMDAwCi0tLSBhL2RlYnVnZ2VyLy5naXRpZ25vcmUKKysr IC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLWRlYnVnX3JkYXRhCi1ldWRiCmRpZmYgLS1naXQg YS9kZWJ1Z2dlci9kZWJ1Z19yZGF0YS5jIGIvZGVidWdnZXIvZGVidWdfcmRhdGEuYwpkZWxldGVk IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjFkODJkOWUuLjAwMDAwMDAwCi0tLSBhL2RlYnVnZ2Vy L2RlYnVnX3JkYXRhLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDIgKzAsMCBAQAotLyoKLSAqIENv cHlyaWdodCDCqSAyMDExIEludGVsIENvcnBvcmF0aW9uCi0gKgotICogUGVybWlzc2lvbiBpcyBo ZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEK LSAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZp bGVzICh0aGUgIlNvZnR3YXJlIiksCi0gKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0 IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCi0gKiB0aGUgcmlnaHRz IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGlj ZW5zZSwKLSAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJt aXQgcGVyc29ucyB0byB3aG9tIHRoZQotICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNv LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJvdmUg Y29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRo ZSBuZXh0Ci0gKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Ig c3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCi0gKiBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09G VFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwg RVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUg V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKLSAqIFRI RSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBE QU1BR0VTIE9SIE9USEVSCi0gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENP TlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwotICogRlJPTSwgT1VUIE9GIE9SIElO IENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5H UwotICogSU4gVEhFIFNPRlRXQVJFLgotICoKLSAqIEF1dGhvcnM6Ci0gKiAgICBCZW4gV2lkYXdz a3kgPGJlbkBid2lkYXdzay5uZXQ+Ci0gKgotICovCi0KLSNpbmNsdWRlIDxzdGRpbnQuaD4KLSNp bmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgImludGVsX2lv LmgiCi0jaW5jbHVkZSAiaW50ZWxfY2hpcHNldC5oIgotCi1zdHJ1Y3QgZXVfcmRhdGEgewotCXVu aW9uIHsKLQkJc3RydWN0IHsKLQkJCXVpbnQ4X3Qgc2VuZGNfZGVwIDogMTsKLQkJCXVpbnQ4X3Qg c3doX2RlcCA6IDE7Ci0JCQl1aW50OF90IHB3Y19kZXAgOiAxOwotCQkJdWludDhfdCBuMl9kZXAg OiAxOwotCQkJdWludDhfdCBuMV9kZXAgOiAxOwotCQkJdWludDhfdCBuMF9kZXAgOiAxOwotCQkJ dWludDhfdCBmbGFnMV9kZXAgOiAxOwotCQkJdWludDhfdCBmbGFnMF9kZXAgOiAxOwotCQkJdWlu dDhfdCBpbmR4X2RlcCA6IDE7Ci0JCQl1aW50OF90IG1yZl9kZXAgOiAxOwotCQkJdWludDhfdCBk c3RfZGVwIDogMTsKLQkJCXVpbnQ4X3Qgc3JjMl9kZXAgOiAxOwotCQkJdWludDhfdCBzcmMxX2Rl cCA6IDE7Ci0JCQl1aW50OF90IHNyYzBfZGVwIDogMTsKLQkJCXVpbnQ4X3QgbXBfZGVwX3BpbiA6 IDE7Ci0JCQl1aW50OF90IHNwX2RlcF9waW4gOiAxOwotCQkJdWludDhfdCBmZnRpZCA6IDg7Ci0J CQl1aW50OF90IGZmaWQgOiA0OwotCQkJdWludDhfdCBpbnN0cnVjdGlvbl92YWxpZCA6IDE7Ci0J CQl1aW50OF90IHRocmVhZF9zdGF0dXMgOiAzOwotCQl9OwotCQl1aW50MzJfdCBkd29yZDsKLQl9 IHVkMDsKLQotCXVuaW9uIHsKLQkJc3RydWN0IHsKLQkJCXVpbnQ4X3QgbXJmX2FkZHIgOiA0Owot CQkJdWludDhfdCBkc3RfYWRkciA6IDc7Ci0JCQl1aW50OF90IHNyYzJfYWRkciA6IDc7Ci0JCQl1 aW50OF90IHNyYzFfYWRkciA6IDc7Ci0JCQl1aW50OF90IHNyYzBfYWRkciA6IDc7Ci0JCX07Ci0J CXVpbnQzMl90IGR3b3JkOwotCX0gdWQxOwotCi0JdW5pb24gewotCQlzdHJ1Y3QgewotCQkJdWlu dDE2X3QgZXhpcCA6IDEyOwotCQkJdWludDhfdCBvcGNvZGUgOiA3OwotCQkJdWludDhfdCBwd2Mg OiA4OwotCQkJdWludDhfdCBpbnN0cnVjdGlvbl92YWxpZCA6IDE7Ci0JCQl1aW50OF90IG1ieiA6 IDQ7Ci0JCX07Ci0JCXVpbnQzMl90IGR3b3JkOwotCX0gdWQyOwotfTsKLQotY29uc3QgY2hhciAq dGhyZWFkX3N0YXR1c1tdID0gCi0JeyJJTlZBTElEIiwgImludmFsaWQvbm8gdGhyZWFkIiwgInN0 YW5kYnkgKGRlcGVuZGVuY3kpIiwgIklOVkFMSUQiLCAiRXhlY3V0aW5nIiwKLQkgIklOVkFMSUQi ICwgIklOVkFMSUQiICwgIklOVkFMSUQifTsKLQotc3RhdGljIHN0cnVjdCBldV9yZGF0YQotY29s bGVjdF9yZGF0YShpbnQgZXUsIGludCB0aWQpIHsKLQlzdHJ1Y3QgZXVfcmRhdGEgcmRhdGE7Ci0K LQlpbnRlbF9yZWdpc3Rlcl93cml0ZSgweDc4MDAsIGV1IDw8IDE2IHwgKDMgKiB0aWQpIDw8IDgp OwotCXJkYXRhLnVkMC5kd29yZCA9IGludGVsX3JlZ2lzdGVyX3JlYWQoMHg3ODQwKTsKLQotCWlu dGVsX3JlZ2lzdGVyX3dyaXRlKDB4NzgwMCwgZXUgPDwgMTYgfCAoMyAqIHRpZCArIDEpIDw8IDgp OwotCXJkYXRhLnVkMS5kd29yZCA9IGludGVsX3JlZ2lzdGVyX3JlYWQoMHg3ODQwKTsKLQotCWlu dGVsX3JlZ2lzdGVyX3dyaXRlKDB4NzgwMCwgZXUgPDwgMTYgfCAoMyAqIHRpZCArIDIpIDw8IDgp OwotCXJkYXRhLnVkMi5kd29yZCA9IGludGVsX3JlZ2lzdGVyX3JlYWQoMHg3ODQwKTsKLQotCXJl dHVybiByZGF0YTsKLX0KLXN0YXRpYyB2b2lkCi1wcmludF9yZGF0YShzdHJ1Y3QgZXVfcmRhdGEg cmRhdGEpIHsKLQlwcmludGYoIlx0JXNcbiIsIHRocmVhZF9zdGF0dXNbcmRhdGEudWQwLnRocmVh ZF9zdGF0dXNdKTsKLQlwcmludGYoIlx0bjFfZGVwOiAlZFxuIiwgcmRhdGEudWQwLm4xX2RlcCk7 Ci0JcHJpbnRmKCJcdHB3Y19kZXA6ICVkXG4iLCByZGF0YS51ZDAucHdjX2RlcCk7Ci0JcHJpbnRm KCJcdHN3aF9kZXA6ICVkXG4iLCByZGF0YS51ZDAuc3doX2RlcCk7Ci0JcHJpbnRmKCJcdHNvdXJj ZSAwICV4XG4iLCByZGF0YS51ZDEuc3JjMF9hZGRyKTsKLQlwcmludGYoIlx0c291cmNlIDEgJXhc biIsIHJkYXRhLnVkMS5zcmMxX2FkZHIpOwotCXByaW50ZigiXHRzb3VyY2UgMiAleFxuIiwgcmRh dGEudWQxLnNyYzJfYWRkcik7Ci0JcHJpbnRmKCJcdGRlc3QgICV4XG4iLCByZGF0YS51ZDEuZHN0 X2FkZHIpOwotCXByaW50ZigiXHRtcmYgICV4XG4iLCByZGF0YS51ZDEubXJmX2FkZHIpOwotCXBy aW50ZigiXHRJUDogJXhcbiIsIHJkYXRhLnVkMi5leGlwKTsKLQlwcmludGYoIlx0b3Bjb2RlOiAl eFxuIiwgcmRhdGEudWQyLm9wY29kZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1maW5kX3N0dWNrX3Ro cmVhZHModm9pZCkKLXsKLQlpbnQgaSwgajsKLQlmb3IgKGkgPSAwOyBpIDwgMTU7IGkrKykKLQkJ Zm9yIChqID0gMDsgaiA8IDU7IGorKykgewotCQkJc3RydWN0IGV1X3JkYXRhIHJkYXRhOwotCQkJ cmRhdGEgPSBjb2xsZWN0X3JkYXRhKGksIGopOwotCQkJaWYgKHJkYXRhLnVkMC50aHJlYWRfc3Rh dHVzID09IDIgfHwKLQkJCSAgICByZGF0YS51ZDAudGhyZWFkX3N0YXR1cyA9PSA0KSB7Ci0JCQkJ cHJpbnRmKCIlZCAlZDpcbiIsIGksIGopOwotCQkJCXByaW50X3JkYXRhKHJkYXRhKTsKLQkJCX0K LQl9Ci19Ci0KLWludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pIHsKLQlzdHJ1Y3QgcGNp X2RldmljZSAqcGNpX2RldjsKLQlwY2lfZGV2ID0gaW50ZWxfZ2V0X3BjaV9kZXZpY2UoKTsKLQot CWludGVsX3JlZ2lzdGVyX2FjY2Vzc19pbml0KHBjaV9kZXYsIDEpOwotCWZpbmRfc3R1Y2tfdGhy ZWFkcygpOwotLy8JY29sbGVjdF9yZGF0YShhdG9pKGFyZ3ZbMV0pLCBhdG9pKGFyZ3ZbMl0pKTsK LQlyZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2RlYnVnZ2VyL2V1ZGIuYyBiL2RlYnVnZ2VyL2V1 ZGIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODY2ZDRiNTIuLjAwMDAwMDAwCi0t LSBhL2RlYnVnZ2VyL2V1ZGIuYworKysgL2Rldi9udWxsCkBAIC0xLDYwMiArMCwwIEBACi0vKgot ICogQ29weXJpZ2h0IMKpIDIwMTEgSW50ZWwgQ29ycG9yYXRpb24KLSAqCi0gKiBQZXJtaXNzaW9u IGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5p bmcgYQotICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRp b24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKLSAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdp dGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KLSAqIHRoZSBy aWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBz dWJsaWNlbnNlLAotICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRv IHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCi0gKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8g ZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBh Ym92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRp bmcgdGhlIG5leHQKLSAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGll cyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKLSAqIFNvZnR3YXJlLgotICoKLSAqIFRI RSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBL SU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRP IFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAot ICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xB SU0sIERBTUFHRVMgT1IgT1RIRVIKLSAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04g T0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCi0gKiBGUk9NLCBPVVQgT0Yg T1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERF QUxJTkdTCi0gKiBJTiBUSEUgU09GVFdBUkUuCi0gKgotICogQXV0aG9yczoKLSAqICAgIEJlbiBX aWRhd3NreSA8YmVuQGJ3aWRhd3NrLm5ldD4KLSAqCi0gKiBOb3RlczoKLSAqCi0gKi8KLQotI2lu Y2x1ZGUgPHNpZ25hbC5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPGZjbnRsLmg+ Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8c3Ry aW5ncy5oPgotI2luY2x1ZGUgPGFzc2VydC5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lu Y2x1ZGUgPHN5cy9zdGF0Lmg+Ci0jaW5jbHVkZSA8c3lzL21tYW4uaD4KLSNpbmNsdWRlIDxzeXMv dW4uaD4KLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jaW5jbHVkZSAiZHJtLmgiCi0jaW5jbHVk ZSAiaTkxNV9kcm0uaCIKLSNpbmNsdWRlICJkcm10ZXN0LmgiCi0jaW5jbHVkZSAiaW50ZWxfY2hp cHNldC5oIgotI2luY2x1ZGUgImludGVsX2J1Zm1nci5oIgotI2luY2x1ZGUgImludGVsX2lvLmgi Ci0jaW5jbHVkZSAiaW50ZWxfYmF0Y2hidWZmZXIuaCIKLSNpbmNsdWRlICJpbnRlbF9kZWJ1Zy5o IgotI2luY2x1ZGUgImRlYnVnLmgiCi0KLSNkZWZpbmUgRVVfQVRUCQkweDc4MTAKLSNkZWZpbmUg RVVfQVRUX0NMUgkweDc4MzAKLQotI2RlZmluZSBSU1ZEX0VVIC0xCi0jZGVmaW5lIFJTVkRfVEhS RUFEIC0xCi0jZGVmaW5lIFJTVkRfSUQgRVVJRCgtMSwgLTEsIC0xKQotCi1lbnVtIHsKLQlFQkFE X1NITUVNLAotCUVCQURfUFJPVE9DT0wsCi0JRUJBRF9NQUdJQywKLQlFQkFEX1dSSVRFCi19Owot Ci1zdHJ1Y3QgZGVidWdnZWUgewotCWludCBldWlkOwotCWludCB0aWQ7Ci0JaW50IGZkOwotCWlu dCBjbHI7Ci0JdWludDMyX3QgcmVnOwotfTsKLQotc3RydWN0IGRlYnVnZ2VyIHsKLQlzdHJ1Y3Qg ZGVidWdnZWUgKmRlYnVnZ2VlczsKLQlpbnQgbnVtX3RocmVhZHM7Ci0JaW50IHJlYWxfbnVtX3Ro cmVhZHM7Ci0JaW50IHRocmVhZHNfcGVyX2V1OwotfSAqZXVfaW5mbzsKLQotZHJtX2ludGVsX2J1 Zm1nciAqYnVmbWdyOwotc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaDsKLWRybV9pbnRl bF9ibyAqc2NyYXRjaF9ibzsKLQotaW50IGhhbmRsZTsKLWludCBkcm1fZmQ7Ci1pbnQgZGVidWdf ZmQgPSAwOwotY29uc3QgY2hhciAqZGVidWdfZmlsZSA9ICJkdW1wX2RlYnVnLmJpbiI7Ci1pbnQg ZGVidWc7Ci1pbnQgY2xlYXJfd2FpdHM7Ci1pbnQgc2h1dHRpbmdfZG93biA9IDA7Ci1zdHJ1Y3Qg aW50ZWxfZGVidWdfaGFuZHNoYWtlIGRoOwotaW50IGZvcmNlX2NsZWFyID0gMDsKLXVpbnQzMl90 IG9sZF90ZF9jdGw7Ci0KLS8qCi0gKiBUaGUgZG9jcyBhcmUgd3JvbmcgYWJvdXQgdGhlIGF0dGVu dGlvbiBjbGVhciBiaXRzLiBUaGUgY2xlYXIgYml0cyBhcmUKLSAqIHByb3ZpZGVkIGFzIHBhcnQg b2YgdGhlIHN0cnVjdHVyZSBpbiBjYXNlIHRoZXkgY2hhbmdlIGluIGZ1dHVyZSBnZW5lcmF0aW9u cy4KLSAqLwotI2RlZmluZSBFVUlEKGV1LCB0ZCwgY2xlYXIpIFwKLQl7IC5ldWlkID0gZXUsIC50 aWQgPSB0ZCwgLnJlZyA9IEVVX0FUVCwgLmZkID0gLTEsIC5jbHIgPSBjbGVhciB9Ci0jZGVmaW5l IEVVSUQyKGV1LCB0ZCwgY2xlYXIpIFwKLQl7IC5ldWlkID0gZXUsIC50aWQgPSB0ZCwgLnJlZyA9 IEVVX0FUVCArIDQsIC5mZCA9IC0xLCAuY2xyID0gY2xlYXIgfQotc3RydWN0IGRlYnVnZ2VlIGd0 MV9kZWJ1Z19pZHNbXSA9IHsKLQlSU1ZEX0lELCBSU1ZEX0lELAotCVJTVkRfSUQsIEVVSUQoNiwg MywgMjgpLCBFVUlEKDYsIDIsIDI3KSwgRVVJRCg2LCAxLCAyNiksIEVVSUQoNiwgMCwgMjUpLAot CVJTVkRfSUQsIEVVSUQoNSwgMywgMjMpLCBFVUlEKDUsIDIsIDIyKSwgRVVJRCg1LCAxLCAyMSks IEVVSUQoNSwgMCwgMjApLAotCVJTVkRfSUQsIEVVSUQoNCwgMywgMTgpLCBFVUlEKDQsIDIsIDE3 KSwgRVVJRCg0LCAxLCAxNiksIEVVSUQoNCwgMCwgMTUpLAotCVJTVkRfSUQsIEVVSUQoMiwgMywg MTMpLCBFVUlEKDIsIDIsIDEyKSwgRVVJRCgyLCAxLCAxMSksIEVVSUQoMiwgMCwgMTApLAotCVJT VkRfSUQsIEVVSUQoMSwgMywgOCksIEVVSUQoMSwgMiwgNyksIEVVSUQoMSwgMSwgNiksIEVVSUQo MSwgMCwgNSksCi0JUlNWRF9JRCwgRVVJRCgwLCAzLCAzKSwgRVVJRCgwLCAyLCAyKSwgRVVJRCgw LCAxLCAxKSwgRVVJRCgwLCAwLCAwKQotfTsKLQotc3RydWN0IGRlYnVnZ2VlIGd0Ml9kZWJ1Z19p ZHNbXSA9IHsKLQlFVUlEKDgsIDEsIDMxKSwgRVVJRCg4LCAwLCAzMCksCi0JRVVJRCg2LCA0LCAy OSksIEVVSUQoNiwgMywgMjgpLCBFVUlEKDYsIDIsIDI3KSwgRVVJRCg2LCAxLCAyNiksIEVVSUQo NiwgMCwgMjUpLAotCUVVSUQoNSwgNCwgMjQpLCBFVUlEKDUsIDMsIDIzKSwgRVVJRCg1LCAyLCAy MiksIEVVSUQoNSwgMSwgMjEpLCBFVUlEKDUsIDAsIDIwKSwKLQlFVUlEKDQsIDQsIDE5KSwgRVVJ RCg0LCAzLCAxOCksIEVVSUQoNCwgMiwgMTcpLCBFVUlEKDQsIDEsIDE2KSwgRVVJRCg0LCAwLCAx NSksCi0JRVVJRCgyLCA0LCAxNCksIEVVSUQoMiwgMywgMTMpLCBFVUlEKDIsIDIsIDEyKSwgRVVJ RCgyLCAxLCAxMSksIEVVSUQoMiwgMCwgMTApLAotCUVVSUQoMSwgNCwgOSksIEVVSUQoMSwgMywg OCksIEVVSUQoMSwgMiwgNyksIEVVSUQoMSwgMSwgNiksIEVVSUQoMSwgMCwgNSksCi0JRVVJRCgw LCA0LCA0KSwgRVVJRCgwLCAzLCAzKSwgRVVJRCgwLCAyLCAyKSwgRVVJRCgwLCAxLCAxKSwgRVVJ RCgwLCAwLCAwKSwKLQlSU1ZEX0lELCBSU1ZEX0lELCBSU1ZEX0lELCBSU1ZEX0lELAotCUVVSUQy KDE0LCA0LCAyNyksIEVVSUQyKDE0LCAzLCAyNiksIEVVSUQyKDE0LCAyLCAyNSksIEVVSUQyKDE0 LCAxLCAyNCksIEVVSUQyKDE0LCAwLCAyMyksCi0JRVVJRDIoMTMsIDQsIDIyKSwgRVVJRDIoMTMs IDMsIDIxKSwgRVVJRDIoMTMsIDIsIDIwKSwgRVVJRDIoMTMsIDEsIDE5KSwgRVVJRDIoMTMsIDAs IDE4KSwKLQlFVUlEMigxMiwgNCwgMTcpLCBFVUlEMigxMiwgMywgMTYpLCBFVUlEMigxMiwgMiwg MTUpLCBFVUlEMigxMiwgMSwgMTQpLCBFVUlEMigxMiwgMCwgMTMpLAotCUVVSUQyKDEwLCA0LCAx MiksIEVVSUQyKDEwLCAzLCAxMSksIEVVSUQyKDEwLCAyLCAxMCksIEVVSUQyKDEwLCAxLCA5KSwg RVVJRDIoMTAsIDAsIDgpLAotCUVVSUQyKDksIDQsIDcpLCBFVUlEMig5LCAzLCA2KSwgRVVJRDIo OSwgMiwgNSksIEVVSUQyKDksIDEsIDQpLCBFVUlEMig5LCAwLCAzKSwKLQlFVUlEMig4LCA0LCAy KSwgRVVJRDIoOCwgMywgMSksIEVVSUQyKDgsIDIsIDApCi19OwotCi1zdHJ1Y3QgZGVidWdnZXIg Z3QxID0gewotCS5kZWJ1Z2dlZXMgPSBndDFfZGVidWdfaWRzLAotCS5udW1fdGhyZWFkcyA9IDMy LAotCS5yZWFsX251bV90aHJlYWRzID0gMjQsCi0JLnRocmVhZHNfcGVyX2V1ID0gNAotfTsKLQot c3RydWN0IGRlYnVnZ2VyIGd0MiA9IHsKLQkuZGVidWdnZWVzID0gZ3QyX2RlYnVnX2lkcywKLQku bnVtX3RocmVhZHMgPSA2NCwKLQkucmVhbF9udW1fdGhyZWFkcyA9IDYwLAotCS50aHJlYWRzX3Bl cl9ldSA9IDUKLX07Ci0KLXN0YXRpYyB2b2lkCi1kdW1wX2RlYnVnKHZvaWQgKmJ1Ziwgc2l6ZV90 IGNvdW50KSB7Ci0JaWYgKCFkZWJ1Z19mZCkKLQkJZGVidWdfZmQgPSBvcGVuKGRlYnVnX2ZpbGUs IE9fQ1JFQVQgfCBPX1dST05MWSB8IE9fVFJVTkMsIFNfSVJXWE8pOwotCi0JaWYgKHdyaXRlKGRl YnVnX2ZkLCBidWYsIGNvdW50KSA9PSAtMSkKLQkJZnByaW50ZihzdGRlcnIsICJFcnJvciB3cml0 aW5nIHRvIGRlYnVnIGZpbGU6ICVzXG4iLAotCQkJc3RyZXJyb3IoZXJybm8pKTsKLX0KLQotc3Rh dGljIHZvbGF0aWxlIHZvaWQgKgotbWFwX2RlYnVnX2J1ZmZlcih2b2lkKSB7Ci0JaW50IHJldDsK LQotCXJldCA9IGRybV9pbnRlbF9ib19tYXAoc2NyYXRjaF9ibywgMCk7Ci0JYXNzZXJ0KHJldCA9 PSAwKTsKLQlyZXR1cm4gc2NyYXRjaF9iby0+dmlydHVhbDsKLX0KLQotc3RhdGljIHZvaWQKLXVu bWFwX2RlYnVnX2J1ZmZlcih2b2lkKSB7Ci0JZHJtX2ludGVsX2JvX3VubWFwKHNjcmF0Y2hfYm8p OwotfQotCi1zdGF0aWMgaW50Ci13YWl0X2Zvcl9hdHRuKGludCB0aW1lb3V0LCBpbnQgKm91dF9i aXRzKSB7Ci0JaW50IHN0ZXAgPSAxOwotCWludCBldXNfd2FpdGluZyA9IDA7Ci0JaW50IGksajsK LQotCWlmICh0aW1lb3V0IDw9IDApIHsKLQkJdGltZW91dCA9IDE7Ci0JCXN0ZXAgPSAwOwotCX0K LQotCWZvciAoaSA9IDA7IGkgPCB0aW1lb3V0OyBpICs9IHN0ZXApIHsKLQkJZm9yIChqID0gMDsg aiA8IDg7IGogKz0gNCkgewotCQkJdWludDMyX3QgYXR0biA9IGludGVsX3JlZ2lzdGVyX3JlYWQo RVVfQVRUICsgaik7Ci0JCQlpZiAoYXR0bikgewotCQkJCWludCBiaXQgPSAwOwotCQkJCXdoaWxl KCAoYml0ID0gZmZzKGF0dG4pKSAhPSAwKSB7Ci0JCQkJCWJpdC0tOyAvLyBmZnMgaXMgMSBiYXNl ZAotCQkJCQlhc3NlcnQoYml0ID49IDApOwotCQkJCQlvdXRfYml0c1tldXNfd2FpdGluZ10gPSBi aXQgKyAoaiAqIDgpOwotCQkJCQlhdHRuICY9IH4oMSA8PCBiaXQpOwotCQkJCQlldXNfd2FpdGlu ZysrOwotCQkJCX0KLQkJCX0KLQkJfQotCi0JCWlmIChpbnRlbF9yZWdpc3Rlcl9yZWFkKEVVX0FU VCArIDgpIHx8Ci0JCSAgICBpbnRlbF9yZWdpc3Rlcl9yZWFkKEVVX0FUVCArIDB4YykpIHsKLQkJ CWZwcmludGYoc3RkZXJyLCAiVW5rbm93biBhdHRlbnRpb24gYml0c1xuIik7Ci0JCX0KLQotCQlp ZiAoZXVzX3dhaXRpbmcgfHwgc2h1dHRpbmdfZG93bikKLQkJCWJyZWFrOwotCX0KLQotCXJldHVy biBldXNfd2FpdGluZzsKLX0KLQotI2RlZmluZSBldV9mZChiaXQpIGV1X2luZm8tPmRlYnVnZ2Vl c1tiaXRdLmZkCi0jZGVmaW5lIGV1X2lkKGJpdCkgZXVfaW5mby0+ZGVidWdnZWVzW2JpdF0uZXVp ZAotI2RlZmluZSBldV90aWQoYml0KSBldV9pbmZvLT5kZWJ1Z2dlZXNbYml0XS50aWQKLXN0YXRp YyBzdHJ1Y3QgZXVfc3RhdGUgKgotZmluZF9ldV9zaG1lbShpbnQgYml0LCB2b2xhdGlsZSB1aW50 OF90ICpidWYpIHsKLQlzdHJ1Y3QgZXVfc3RhdGUgKmV1OwotCWludCBtZW1fdGlkLCBtZW1fZXVp ZCwgaTsKLQotCWZvcihpID0gMDsgaSA8IGV1X2luZm8tPm51bV90aHJlYWRzOyBpKyspIHsKLQkJ ZXUgPSAoc3RydWN0IGV1X3N0YXRlICopKGJ1ZiArIGkgKiBkaC5wZXJfdGhyZWFkX3NjcmF0Y2gp OwotCQltZW1fdGlkID0gZXUtPnNyMCAmIDB4NzsKLQkJbWVtX2V1aWQgPSAoZXUtPnNyMCA+PiA4 KSAmIDB4ZjsKLQkJaWYgKG1lbV90aWQgPT0gZXVfdGlkKGJpdCkgJiYgbWVtX2V1aWQgPT0gZXVf aWQoYml0KSkKLQkJCWJyZWFrOwotCQlldSA9IE5VTEw7Ci0JfQotCi0JcmV0dXJuIGV1OwotfQot Ci0jZGVmaW5lIEdSRl9DTVAoYSwgYikgbWVtY21wKGEsIGIsIHNpemVvZihncmYpKQotI2RlZmlu ZSBHUkZfQ1BZKGEsIGIpIG1lbWNweShhLCBiLCBzaXplb2YoZ3JmKSkKLXN0YXRpYyBpbnQKLXZl cmlmeShzdHJ1Y3QgZXVfc3RhdGUgKmV1KSB7Ci0JaWYgKEdSRl9DTVAoZXUtPnZlcnNpb24sIHBy b3RvY29sX3ZlcnNpb24pKSB7Ci0JCWlmIChkZWJ1ZykgewotCQkJcHJpbnRmKCJCYWQgRVUgcHJv dG9jb2wgdmVyc2lvbiAleCAleFxuIiwKLQkJCQkoKHVpbnQzMl90ICopJmV1LT52ZXJzaW9uKVsw XSwKLQkJCQlERUJVR19QUk9UT0NPTF9WRVJTSU9OKTsKLQkJCWR1bXBfZGVidWcoKHZvaWQgKill dSwgc2l6ZW9mKCpldSkpOwotCQl9Ci0JCXJldHVybiAtRUJBRF9QUk9UT0NPTDsKLQl9Ci0KLQlp ZiAoR1JGX0NNUChldS0+c3RhdGVfbWFnaWMsIGV1X21zZykpIHsKLQkJaWYgKGRlYnVnKSB7Ci0J CQlwcmludGYoIkJhZCBFVSBzdGF0ZSBtYWdpYyAleCAleFxuIiwKLQkJCQkoKHVpbnQzMl90ICop JmV1LT5zdGF0ZV9tYWdpYylbMF0sCi0JCQkJKCh1aW50MzJfdCAqKSZldS0+c3RhdGVfbWFnaWMp WzFdKTsKLQkJCWR1bXBfZGVidWcoKHZvaWQgKilldSwgc2l6ZW9mKCpldSkpOwotCQl9Ci0JCXJl dHVybiAtRUJBRF9NQUdJQzsKLQl9IGVsc2UgewotCQlHUkZfQ1BZKGV1LT5zdGF0ZV9tYWdpYywg Y3B1X2Fjayk7Ci0JfQotCi0JZXUtPnNyMCA9IFJTVkRfRVUgPDwgOCB8IFJTVkRfVEhSRUFEOwot CXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci1jb2xsZWN0X2RhdGEoaW50IGJpdCwgdm9sYXRp bGUgdWludDhfdCAqYnVmKSB7Ci0Jc3RydWN0IGV1X3N0YXRlICpldTsKLQlzc2l6ZV90IG51bTsK LQlpbnQgcmV0OwotCi0JYXNzZXJ0KGV1X2lkKGJpdCkgIT0gUlNWRF9FVSk7Ci0KLQlpZiAoZXVf ZmQoYml0KSA9PSAtMSkgewotCQljaGFyIG5hbWVbMTI4XTsKLQkJc3ByaW50ZihuYW1lLCAiZHVt cF9ldV8lMDJkXyVkLmJpbiIsIGV1X2lkKGJpdCksIGV1X3RpZChiaXQpKTsKLQkJZXVfZmQoYml0 KSA9IG9wZW4obmFtZSwgT19DUkVBVCB8IE9fV1JPTkxZIHwgT19UUlVOQywgU19JUldYTyk7Ci0J CWlmIChldV9mZChiaXQpID09IC0xKQotCQkJcmV0dXJuIC0xOwotCX0KLQotCWV1ID0gZmluZF9l dV9zaG1lbShiaXQsIGJ1Zik7Ci0KLQlpZiAoZXUgPT0gTlVMTCkgewotCQlpZiAoZGVidWcpCi0J CQlwcmludGYoIkJhZCBvZmZzZXQgJWQgJWRcbiIsIGV1X2lkKGJpdCksIGV1X3RpZChiaXQpKTsK LQkJcmV0dXJuIC1FQkFEX1NITUVNOwotCX0KLQotCXJldCA9IHZlcmlmeShldSk7Ci0JaWYgKHJl dCkKLQkJcmV0dXJuIHJldDsKLQotCW51bSA9IHdyaXRlKGV1X2ZkKGJpdCksICh2b2lkICopZXUs IHNpemVvZigqZXUpKTsKLQlpZiAobnVtICE9IHNpemVvZigqZXUpKSB7Ci0JCXBlcnJvcigidW5o YW5kbGVkIHdyaXRlIGZhaWx1cmUiKTsKLQkJcmV0dXJuIEVCQURfV1JJVEU7Ci0JfQotCi0KLQly ZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQKLWNsZWFyX2F0dG4oaW50IGJpdCkgewotI2lmIDAK LS8qCi0gKiBUaGlzIHdvcmtzIGJ1dCBkb2Vzbid0IGFsbG93IGZvciBlYXNpbHkgY2hhbmdlZCBj bGVhcmluZyBiaXRzCi0gKi8KLXN0YXRpYyB2b2lkCi1jbGVhcl9hdHRuX29sZChpbnQgYml0KSB7 Ci0JaW50IGJpdF90b19jbGVhciA9IGJpdCAlIDMyOwotCWJpdF90b19jbGVhciA9IDMxIC0gYml0 X3RvX2NsZWFyOwotCWludGVsX3JlZ2lzdGVyX3dyaXRlKDB4NzgzMCArIChiaXQvMzIpICogNCwg MCk7Ci0JaW50ZWxfcmVnaXN0ZXJfd3JpdGUoMHg3ODMwICsgKGJpdC8zMikgKiA0LCAxIDw8IGJp dF90b19jbGVhcik7Ci19Ci0jZWxzZQotCWlmICghZm9yY2VfY2xlYXIpIHsKLQkJaW50IGJpdF90 b19jbGVhcjsKLQkJYml0X3RvX2NsZWFyID0gZXVfaW5mby0+ZGVidWdnZWVzW2JpdF0uY2xyOwot CQlpbnRlbF9yZWdpc3Rlcl93cml0ZShFVV9BVFRfQ0xSICsgKGJpdC8zMikgKiA0LCAwKTsKLQkJ aW50ZWxfcmVnaXN0ZXJfd3JpdGUoRVVfQVRUX0NMUiArIChiaXQvMzIpICogNCwgMSA8PCBiaXRf dG9fY2xlYXIpOwotCX0gZWxzZSB7Ci0JCWludGVsX3JlZ2lzdGVyX3dyaXRlKEVVX0FUVF9DTFIg KyAwLCAwKTsKLQkJaW50ZWxfcmVnaXN0ZXJfd3JpdGUoRVVfQVRUX0NMUiArIDQsIDApOwotCQlp bnRlbF9yZWdpc3Rlcl93cml0ZShFVV9BVFRfQ0xSICsgMCwgMHhmZmZmZmZmZik7Ci0JCWludGVs X3JlZ2lzdGVyX3dyaXRlKEVVX0FUVF9DTFIgKyA0LCAweGZmZmZmZmZmKTsKLQl9Ci0jZW5kaWYK LX0KLQotc3RhdGljIHZvaWQKLWRiX3NodXRkb3duKGludCBzaWcpIHsKLQlzaHV0dGluZ19kb3du ID0gMTsKLQlwcmludGYoIlNodXR0aW5nIGRvd24uLi5cbiIpOwotfQotCi1zdGF0aWMgdm9pZCBf X2F0dHJpYnV0ZV9fKChub3JldHVybikpCi1kaWUoaW50IHJlYXNvbikgewotCWludCBpID0gMDsK LQotCWludGVsX3JlZ2lzdGVyX3dyaXRlKEVVX0FUVF9DTFIsIDApOwotCWludGVsX3JlZ2lzdGVy X3dyaXRlKEVVX0FUVF9DTFIgKyA0LCAwKTsKLQotCWlmIChkZWJ1Z19mZCkKLQkJY2xvc2UoZGVi dWdfZmQpOwotCi0JZm9yIChpID0gMDsgaSA8IGV1X2luZm8tPm51bV90aHJlYWRzOyBpKyspIHsK LQkJaWYgKGV1X2luZm8tPmRlYnVnZ2Vlc1tpXS5mZCAhPSAtMSkKLQkJCWNsb3NlKGV1X2luZm8t PmRlYnVnZ2Vlc1tpXS5mZCk7Ci0JfQotCi0JdW5tYXBfZGVidWdfYnVmZmVyKCk7Ci0KLQlpZiAo b2xkX3RkX2N0bCkKLQkJaW50ZWxfcmVnaXN0ZXJfd3JpdGUoVERfQ1RMLCBvbGRfdGRfY3RsKTsK LQlpbnRlbF9yZWdpc3Rlcl9hY2Nlc3NfZmluaSgpOwotCWV4aXQocmVhc29uKTsKLX0KLQotc3Rh dGljIGludAotaWRlbnRpZnlfZGV2aWNlKGludCBkZXZpZCkgewotCWlmICghSVNfU0FORFlCUklE R0UoZGV2aWQpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCXN3aXRjaCAoaW50ZWxfZ3QoZGV2aWQp KSB7Ci0JY2FzZSAwOgotCQlldV9pbmZvID0gJmd0MTsKLQkJYnJlYWs7Ci0JY2FzZSAxOgotCQll dV9pbmZvID0gJmd0MjsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIDE7Ci0JfQotCi0J cmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkCi1wYXJzZV9kYXRhKGNvbnN0IGNoYXIgKmZpbGVf bmFtZSkgewotCXN0cnVjdCBldV9zdGF0ZSAqZXVfc3RhdGUgPSBOVUxMOwotCXN0cnVjdCBzdGF0 IHN0OwotCWludCBmZCA9IC0xOwotCWludCByZXQsIGksIGVsZW1lbnRzOwotCi0JZmQgPSBvcGVu KGZpbGVfbmFtZSwgT19SRE9OTFkpOwotCWlmIChmZCA9PSAtMSkgewotCQlwZXJyb3IoIm9wZW4i KTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JcmV0ID0gZnN0YXQoZmQsICZzdCk7Ci0JaWYgKHJldCA9 PSAtMSkgewotCQlwZXJyb3IoImZzdGF0Iik7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWVsZW1lbnRz ID0gc3Quc3Rfc2l6ZSAvIHNpemVvZihzdHJ1Y3QgZXVfc3RhdGUpOwotCWlmIChlbGVtZW50cyA9 PSAwKSB7Ci0JCWZwcmludGYoc3RkZXJyLCAiRmlsZSBub3QgYmlnIGVub3VnaCBmb3IgMSBlbnRy eVxuIik7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWV1X3N0YXRlID0gbW1hcCgwLCBzdC5zdF9zaXpl LCBQUk9UX1JFQUQsIE1BUF9TSEFSRUQsIGZkLCAwKTsKLQlpZiAoZXVfc3RhdGUgPT0gTUFQX0ZB SUxFRCkgewotCQlwZXJyb3IoIm1tYXAiKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JZm9yKGkgPSAw OyBpIDwgZWxlbWVudHM7IGkrKykgewotCQlwcmludGYoIkFJUDogIik7Ci0JCQlwcmludGYoIiV4 XG4iLCAoKHVpbnQzMl90ICopZXVfc3RhdGVbaV0uY3IwKVsyXSk7Ci0JfQotb3V0OgotCWlmIChl dV9zdGF0ZSkKLQkJbXVubWFwKGV1X3N0YXRlLCBzdC5zdF9zaXplKTsKLQlpZiAoZmQgIT0gLTEp Ci0JCWNsb3NlKGZkKTsKLX0KLQotc3RhdGljIGludAotd2FpdF9mb3Jfc2NyYXRjaF9ibyh2b2lk KSB7Ci0Jc3RydWN0IHNvY2thZGRyX3VuIGFkZHI7Ci0JdWludDMyX3QgdmVyc2lvbjsKLQlpbnQg ZmQsIHJldCwgZGhfaGFuZGxlID0gLTE7Ci0KLQlhc3NlcnQoc2l6ZW9mKHZlcnNpb24pID09IHNp emVvZihkaC52ZXJzaW9uKSk7Ci0KLQlmZCA9IHNvY2tldChBRl9VTklYLCBTT0NLX1NUUkVBTSwg MCk7Ci0JaWYgKGZkID09IC0xKQotCQlyZXR1cm4gLTE7Ci0KLQkvKiBDbGVhbiB1cCBwcmV2aW91 cyBydW5zICovCi0JcmVtb3ZlKFNIQURFUl9ERUJVR19TT0NLRVQpOwotCi0JbWVtc2V0KCZhZGRy LCAwLCBzaXplb2YoYWRkcikpOwotCWFkZHIuc3VuX2ZhbWlseSA9IEFGX1VOSVg7Ci0Jc3RybmNw eShhZGRyLnN1bl9wYXRoLCBTSEFERVJfREVCVUdfU09DS0VULCBzaXplb2YoYWRkci5zdW5fcGF0 aCkgLSAxKTsKLQotCXJldCA9IGJpbmQoZmQsIChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKikmYWRk ciwgc2l6ZW9mKGFkZHIpKTsKLQlpZiAocmV0ID09IC0xKSB7Ci0JCXBlcnJvcigibGlzdGVuIik7 Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlyZXQgPSBsaXN0ZW4oZmQsIDEpOwotCWlmIChyZXQgPT0g LTEpIHsKLQkJcGVycm9yKCJsaXN0ZW4iKTsKLQkJZ290byBkb25lOwotCX0KLQotCXdoaWxlKDEp IHsKLQkJaW50IGNsaWVudF9mZDsKLQkJc2l6ZV90IGNvdW50OwotCQljaGFyIGFja1tdID0gREVC VUdfSEFORFNIQUtFX0FDSzsKLQotCQljbGllbnRfZmQgPSBhY2NlcHQoZmQsIE5VTEwsIE5VTEwp OwotCQlpZiAoY2xpZW50X2ZkID09IC0xKSB7Ci0JCQlwZXJyb3IoImFjY2VwdCIpOwotCQkJZ290 byBkb25lOwotCQl9Ci0KLQkJY291bnQgPSByZWFkKGNsaWVudF9mZCwgJnZlcnNpb24sIHNpemVv Zih2ZXJzaW9uKSk7Ci0JCWlmIChjb3VudCAhPSBzaXplb2YodmVyc2lvbikpIHsKLQkJCXBlcnJv cigicmVhZCB2ZXJzaW9uIik7Ci0JCQlnb3RvIGxvb3Bfb3V0OwotCQl9Ci0KLQkJaWYgKHZlcnNp b24gIT0gREVCVUdfSEFORFNIQUtFX1ZFUlNJT04pIHsKLQkJCWZwcmludGYoc3RkZXJyLCAiQmFk IGRlYnVnIGhhbmRzaGFrZVxuIik7Ci0JCQlnb3RvIGxvb3Bfb3V0OwotCQl9Ci0KLQkJY291bnQg PSByZWFkKGNsaWVudF9mZCwgKChjaGFyICopJmRoKSArIDEsIHNpemVvZihkaCkgLSAxKTsKLQkJ aWYgKGNvdW50ICE9IHNpemVvZihkaCkgLSAxKSB7Ci0JCQlwZXJyb3IoInJlYWQgaGFuZHNoYWtl Iik7Ci0JCQlnb3RvIGxvb3Bfb3V0OwotCQl9Ci0KLQkJY291bnQgPSB3cml0ZShjbGllbnRfZmQs IGFjaywgc2l6ZW9mKGFjaykpOwotCQlpZiAoY291bnQgIT0gc2l6ZW9mKGFjaykpIHsKLQkJCXBl cnJvcigid3JpdGUgYWNrIik7Ci0JCQlnb3RvIGxvb3Bfb3V0OwotCQl9Ci0JCWRoX2hhbmRsZSA9 IGRoLmZsaW5rX2hhbmRsZTsKLQkJaWYgKGRlYnVnID4gMCkgewotCQkJcHJpbnRmKCJIYW5kc2hh a2UgY29tcGxldGVkIHN1Y2Nlc3NmdWxseVxuIgotCQkJCSJcdHByb3RvY29sIHZlcnNpb24gPSAl ZFxuIgotCQkJCSJcdGZsaW5rIGhhbmRsZSA9ICVkXG4iCi0JCQkJIlx0cGVyIHRocmVhZCBzY3Jh dGNoID0gJXhcbiIsIHZlcnNpb24sCi0JCQkJZGguZmxpbmtfaGFuZGxlLCBkaC5wZXJfdGhyZWFk X3NjcmF0Y2gpOwotCQl9Ci0KLQlsb29wX291dDoKLQkJY2xvc2UoY2xpZW50X2ZkKTsKLQkJYnJl YWs7Ci0JfQotCi1kb25lOgotCWNsb3NlKGZkKTsKLQlyZXR1cm4gZGhfaGFuZGxlOwotfQotCi1z dGF0aWMgdm9pZAotc2V0dXBfaHdfYml0cyh2b2lkKQotewotCWludGVsX3JlZ2lzdGVyX3dyaXRl KElOU1RfUE0sIEdFTjZfR0xPQkFMX0RFQlVHX0VOQUJMRSB8Ci0JCQkJICAgICAgR0VONl9HTE9C QUxfREVCVUdfRU5BQkxFIDw8IDE2KTsKLQlvbGRfdGRfY3RsID0gaW50ZWxfcmVnaXN0ZXJfcmVh ZChHRU42X1REX0NUTCk7Ci0JaW50ZWxfcmVnaXN0ZXJfd3JpdGUoR0VONl9URF9DVEwsIEdFTjZf VERfQ1RMX0ZPUkNFX1REX0JLUFQpOwotfQotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJn dltdKSB7Ci0Jc3RydWN0IHBjaV9kZXZpY2UgKnBjaV9kZXY7Ci0Jdm9sYXRpbGUgdWludDhfdCAq c2NyYXRjaCA9IE5VTEw7Ci0JaW50IGJpdHNbNjRdOwotCWludCBkZXZpZCA9IC0xLCBvcHQ7Ci0K LQl3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCAiY2RyOnBmP2giKSkgIT0gLTEpIHsK LQkJc3dpdGNoIChvcHQpIHsKLQkJY2FzZSAnYyc6Ci0JCQljbGVhcl93YWl0cyA9IDE7Ci0JCQli cmVhazsKLQkJY2FzZSAnZCc6Ci0JCQlkZWJ1ZyA9IDE7Ci0JCQlicmVhazsKLQkJY2FzZSAncic6 Ci0JCQlwYXJzZV9kYXRhKG9wdGFyZyk7Ci0JCQlleGl0KDApOwotCQkJYnJlYWs7Ci0JCWNhc2Ug J3AnOgotCQkJZGV2aWQgPSBhdG9pKG9wdGFyZyk7Ci0JCQlicmVhazsKLQkJY2FzZSAnZic6Ci0J CQlmb3JjZV9jbGVhciAgPSAxOwotCQkJYnJlYWs7Ci0JCWNhc2UgJz8nOgotCQljYXNlICdoJzoK LQkJZGVmYXVsdDoKLQkJCWV4aXQoMCk7Ci0JCX0KLQl9Ci0KLQlwY2lfZGV2ID0gaW50ZWxfZ2V0 X3BjaV9kZXZpY2UoKTsKLQlpZiAoZGV2aWQgPT0gLTEpCi0JCWRldmlkID0gcGNpX2Rldi0+ZGV2 aWNlX2lkOwotCWlmIChpZGVudGlmeV9kZXZpY2UoZGV2aWQpKSB7Ci0JCWFib3J0KCk7Ci0JfQot Ci0JYXNzZXJ0KGludGVsX3JlZ2lzdGVyX2FjY2Vzc19pbml0KHBjaV9kZXYsIDEpID09IDApOwot Ci0JbWVtc2V0KGJpdHMsIC0xLCBzaXplb2YoYml0cykpOwotCS8qCi0JICogVGhlc2UgZXZlbnRz IGhhdmUgdG8gb2NjdXIgYmVmb3JlIHRoZSBTUiBydW5zLCBvciB3ZSBuZWVkCi0JICogbm9uLWJs b2NraW5nIHZlcnNpb25zIG9mIHRoZSBmdW5jdGlvbnMuCi0JICovCi0JaWYgKCFjbGVhcl93YWl0 cykgewotCQlpbnQgZGhfaGFuZGxlOwotCQlkcm1fZmQgPSBkcm1fb3Blbl9kcml2ZXIoRFJJVkVS X0lOVEVMKTsKLQkJYnVmbWdyID0gZHJtX2ludGVsX2J1Zm1ncl9nZW1faW5pdChkcm1fZmQsIDQw OTYpOwotCi0JCXNldHVwX2h3X2JpdHMoKTsKLQotCQkvKiBXZSBhcmUgcHJvYmFibHkgcm9vdCwg bWFrZSBmaWxlcyB3b3JsZCBmcmllbmRseSAqLwotCQl1bWFzaygwKTsKLQkJZGhfaGFuZGxlID0g d2FpdF9mb3Jfc2NyYXRjaF9ibygpOwotCQlpZiAoZGhfaGFuZGxlID09IC0xKSB7Ci0JCQlwcmlu dGYoIk5vIGhhbmRsZSBmcm9tIG1lc2EsIHBsZWFzZSBlbnRlciBtYW51YWxseTogIik7Ci0JCQlp ZiAoZnNjYW5mKHN0ZGluLCAiJTFkIiwgJmRoX2hhbmRsZSkgPT0gMCkKLQkJCQlleGl0KDEpOwot CQl9Ci0JCXNjcmF0Y2hfYm8gPSBpbnRlbF9ib19nZW1fY3JlYXRlX2Zyb21fbmFtZShidWZtZ3Is ICJzY3JhdGNoIiwgZGhfaGFuZGxlKTsKLQkJaWYgKHNjcmF0Y2hfYm8gPT0gTlVMTCkgewotCQkJ ZnByaW50ZihzdGRlcnIsICJDb3VsZG4ndCBmbGluayBidWZmZXJcbiIpOwotCQkJYWJvcnQoKTsK LQkJfQotCQlzaWduYWwoU0lHSU5ULCBkYl9zaHV0ZG93bik7Ci0JCXByaW50ZigiUHJlc3MgQ3Ry bC1DIHRvIHN0b3BcbiIpOwotCX0gZWxzZSB7Ci0JCWludCB0aW1lID0gZm9yY2VfY2xlYXIgPyAw IDogMjAwMDA7Ci0JCXdoaWxlICh3YWl0X2Zvcl9hdHRuKHRpbWUsIGJpdHMpKSB7Ci0JCQljbGVh cl9hdHRuKGJpdHNbMF0pOwotCQkJbWVtc2V0KGJpdHMsIC0xLCBzaXplb2YoYml0cykpOwotCQl9 Ci0JCWRpZSgwKTsKLQl9Ci0KLQlzY3JhdGNoID0gbWFwX2RlYnVnX2J1ZmZlcigpOwotCXdoaWxl IChzaHV0dGluZ19kb3duID09IDApIHsKLQkJaW50IG51bV9ldmVudHMsIGk7Ci0KLQkJbWVtc2V0 KGJpdHMsIC0xLCBzaXplb2YoYml0cykpOwotCQludW1fZXZlbnRzID0gd2FpdF9mb3JfYXR0bigt MSwgYml0cyk7Ci0JCWlmIChudW1fZXZlbnRzID09IDApCi0JCQlicmVhazsKLQotCQlmb3IgKGkg PSAwOyBpIDwgbnVtX2V2ZW50czsgaSsrKSB7Ci0JCQlhc3NlcnQoYml0c1tpXSA8IDY0ICYmIGJp dHNbaV0gPj0gMCk7Ci0JCQlpZiAoY29sbGVjdF9kYXRhKGJpdHNbaV0sIHNjcmF0Y2gpKSB7Ci0J CQkJYml0c1tpXSA9IC0xOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJY2xlYXJfYXR0bihiaXRz W2ldKTsKLQkJfQotCX0KLQotCWRpZSgwKTsKLQlyZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2Rl YnVnZ2VyL3N5c3RlbV9yb3V0aW5lLy5naXRpZ25vcmUgYi9kZWJ1Z2dlci9zeXN0ZW1fcm91dGlu ZS8uZ2l0aWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMTk1MDBjZi4uMDAw MDAwMDAKLS0tIGEvZGVidWdnZXIvc3lzdGVtX3JvdXRpbmUvLmdpdGlnbm9yZQorKysgL2Rldi9u dWxsCkBAIC0xLDEwICswLDAgQEAKLWV2aWN0LmgKLWV2aWN0aW9uX21hY3JvCi1zcgotc3IuYXNt Ci1zci5jCi1zci5jcHAKLXRpbnkKLXRpbnkuYXNtCi10aW55LmMKLXRpbnkuY3BwCmRpZmYgLS1n aXQgYS9kZWJ1Z2dlci9zeXN0ZW1fcm91dGluZS9ldmljdGlvbl9tYWNyby5jIGIvZGVidWdnZXIv c3lzdGVtX3JvdXRpbmUvZXZpY3Rpb25fbWFjcm8uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMWRhMjIzMzIuLjAwMDAwMDAwCi0tLSBhL2RlYnVnZ2VyL3N5c3RlbV9yb3V0aW5lL2V2 aWN0aW9uX21hY3JvLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKgotICogQ29w eXJpZ2h0IMKpIDIwMTEgSW50ZWwgQ29ycG9yYXRpb24KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhl cmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQot ICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmls ZXMgKHRoZSAiU29mdHdhcmUiKSwKLSAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQg cmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KLSAqIHRoZSByaWdodHMg dG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNl bnNlLAotICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1p dCBwZXJzb25zIHRvIHdob20gdGhlCi0gKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28s IHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBj b3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhl IG5leHQKLSAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBz dWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKLSAqIFNvZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZU V0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBF WFBSRVNTIE9SCi0gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBX QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAotICogVEhF IEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERB TUFHRVMgT1IgT1RIRVIKLSAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09O VFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCi0gKiBGUk9NLCBPVVQgT0YgT1IgSU4g Q09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdT Ci0gKiBJTiBUSEUgU09GVFdBUkUuCi0gKgotICogQXV0aG9yczoKLSAqICAgIEJlbiBXaWRhd3Nr eSA8YmVuQGJ3aWRhd3NrLm5ldD4KLSAqCi0gKi8KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLSNk ZWZpbmUgU1RBUlQgMHgxMDAKLSNkZWZpbmUgRU5EICgoMTI4IDw8IDEwKSAvIDQpCi0KLWludCBt YWluKGludCBhcmdjLCBjaGFyICphcmd2W10pIHsKLQlpbnQgaTsKLQlwcmludGYoIiNpZmRlZiBT QU5EWUJSSURHRVxuIik7Ci0JcHJpbnRmKCIjZGVmaW5lIEVWSUNUX0NBQ0hFIFxcXG4iKTsKLQlw cmludGYoIlx0bW92ICgxKSBtMC41OnVkIGcwLjU6dWQgRkxBR1M7IFxcXG4iKTsKLQlmb3IgKGkg PSBTVEFSVDsgaSA8IEVORCAtIDg7IGkrPTB4OCkgewotCQlwcmludGYoIlx0bW92ICgxKSBtMC4y OnVkIDB4JTA0eDp1ZCBGTEFHUzsgXFxcbiIsIGkpOwotCQlwcmludGYoIlx0V1JJVEVfU0NSQVRD SDQobTApOyBcXFxuIik7Ci0JfQotCi0JcHJpbnRmKCJcdG1vdiAoMSkgbTAuMjp1ZCAweCUwNHg6 dWQgRkxBR1M7IFxcXG4iLCBpKTsKLQlwcmludGYoIlx0V1JJVEVfU0NSQVRDSDQobTApXG4iKTsK LQlwcmludGYoIiNlbHNlXG4iKTsKLQlwcmludGYoIiNkZWZpbmUgRVZJQ1RfQ0FDSEVcbiIpOwot CXByaW50ZigiI2VuZGlmXG4iKTsKLX0KZGlmZiAtLWdpdCBhL2RlYnVnZ2VyL3N5c3RlbV9yb3V0 aW5lL3ByZV9jcHAucHkgYi9kZWJ1Z2dlci9zeXN0ZW1fcm91dGluZS9wcmVfY3BwLnB5CmRlbGV0 ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA1ODRkMmFmMC4uMDAwMDAwMDAKLS0tIGEvZGVidWdn ZXIvc3lzdGVtX3JvdXRpbmUvcHJlX2NwcC5weQorKysgL2Rldi9udWxsCkBAIC0xLDEyNiArMCww IEBACi0jIS91c3IvYmluL2VudiBweXRob24zCi0KLSMgQ29weXJpZ2h0IMKpIDIwMTEgSW50ZWwg Q29ycG9yYXRpb24KLSMKLSMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBj aGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQotIyBvZiB0aGlzIHNvZnR3YXJl IGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8g ZGVhbAotIyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdp dGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCi0jIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJn ZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKLSMgY29waWVz IG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3 YXJlIGlzCi0jIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNv bmRpdGlvbnM6Ci0jCi0jIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1p c3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKLSMgcGFyYWdyYXBoKSBzaGFsbCBiZSBp bmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQotIyBT b2Z0d2FyZS4KLSMKLSMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQg V0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKLSMgSU1QTElFRCwgSU5DTFVESU5HIEJV VCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0jIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBO TyBFVkVOVCBTSEFMTCBUSEUKLSMgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFC TEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgotIyBMSUFCSUxJVFksIFdIRVRIRVIg SU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9N LAotIyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNF IE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQotIyBTT0ZUV0FSRS4KLSMKLSMgQXV0aG9yczoKLSMg ICAgQmVuIFdpZGF3c2t5IDxiZW5AYndpZGF3c2submV0PgotCi0jdmVyeSBsaW1pdGVkIEMtbGlr ZSBwcmVwcm9jZXNzb3IKLQotI2xpbWl0YXRpb25zOgotIyBubyBtYWNybyBzdWJzdGl0dXRpb25z Ci0jIG5vIG11bHRpbGluZSBkZWZpbml0aW9ucwotIyBkaXZpZGUgb3BlcmF0b3IgaXMgLy8KLQot aW1wb3J0IHN5cyxyZQotCi0jIG1ha2Ugc3VyZSBib3RoIGlucHV0IGZpbGUgYW5kIHN0ZG91dCBh cmUgaGFuZGxlZCBhcyB1dGYtOCB0ZXh0LCByZWdhcmRsZXNzCi0jIG9mIGN1cnJlbnQgbG9jYWxl IChlZy4gTEFORz1DIHdoaWNoIHRlbGxzIHB5dGhvbiB0byB1c2UgYXNjaWkgZW5jb2RpbmcpCi1z eXMuc3Rkb3V0ID0gb3BlbihzeXMuX19zdGRvdXRfXy5maWxlbm8oKSwgImEiLCBlbmNvZGluZz0i dXRmLTgiKQotZmlsZSA9IG9wZW4oc3lzLmFyZ3ZbMV0sICJyIiwgZW5jb2Rpbmc9InV0Zi04IikK LQotbGluZXMgPSBmaWxlLnJlYWRsaW5lcygpCi1sZW4obGluZXMpCi1vdXQgPSBkaWN0KCkKLWRl ZmluZXMgPSBkaWN0KCkKLQotY291bnQgPSAwCi0jY3JlYXRlIGEgZGljdCBmb3Igb3VyIG91dHB1 dAotZm9yIGxpbmUgaW4gbGluZXM6Ci0gICAgb3V0W2NvdW50XSA9IGxpbmUKLSAgICBjb3VudCA9 IGNvdW50ICsgMQotCi0jZG9uZSBpcyBjb25zaWRlcmVkICNkZWZpbmUgPG5hbWU+IDxudW1iZXI+ Ci1kZWYgaXNfZG9uZShzdHJpbmcpOgotICAgIG0gPSByZS5tYXRjaCgiI2RlZmluZVxzKyhcdys/ KVxzKyhbYS1mQS1GMC05XC1dKz8pXHMqJCIsIHN0cmluZykKLSAgICByZXR1cm4gbQotCi0jc2tp cCBtYWNyb3MsIHRoZSByZWFsIGNwcCB3aWxsIGhhbmRsZSBpdAotZGVmIHNraXAoc3RyaW5nKToK LSAgICAjbWFjcm8KLSAgICBtID0gcmUubWF0Y2goIiNkZWZpbmVccytcdytcKC4rIiwgc3RyaW5n KQotICAgIHJldHVybiBtICE9IE5vbmUKLQotI3B1dCBjb250YW50cyB3aGljaCBhcmUgZG9uZSBi ZWluZyBldmFsdWF0ZWQgaW50byB0aGUgZGljdGlvbmFyeQotZGVmIGVhc3lfY29uc3RhbnRzKCk6 Ci0gICAgcmV0ID0gMAotICAgIGZvciBsaW5lbm8sIHN0cmluZyBpbiBvdXQuaXRlbXMoKToKLSAg ICAgICAgaWYgc2tpcChzdHJpbmcpOgotICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgbSA9 IGlzX2RvbmUoc3RyaW5nKQotICAgICAgICBpZiBtICE9IE5vbmU6Ci0gICAgICAgICAgICBrZXkg PSBtLmdyb3VwKDEpCi0gICAgICAgICAgICB2YWx1ZSA9IG0uZ3JvdXAoMikKLSAgICAgICAgICAg IGlmIG5vdCBrZXkgaW4gZGVmaW5lczoKLSAgICAgICAgICAgICAgICAgICAgZGVmaW5lc1trZXld ID0gaW50KGV2YWwodmFsdWUpKQotICAgICAgICAgICAgICAgICAgICByZXQgPSAxCi0gICAgcmV0 dXJuIHJldAotCi0jcmVwbGFjZSBuYW1lcyB3aXRoIGRpY3Rpb25hcnkgdmFsdWVzCi1kZWYgc2lt cGxlX3JlcGxhY2UoKToKLSAgICByZXQgPSAwCi0gICAgZm9yIGxpbmVubywgc3RyaW5nIGluIG91 dC5pdGVtcygpOgotICAgICAgICBpZiBza2lwKHN0cmluZyk6Ci0gICAgICAgICAgICBjb250aW51 ZQotICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBkZWZpbmVzLml0ZW1zKCk6Ci0gICAgICAgICAg ICBpZiBpc19kb25lKHN0cmluZyk6Ci0gICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAg ICAgIHMgPSByZS5zdWJuKGtleSwgcmVwcih2YWx1ZSksIHN0cmluZykKLSAgICAgICAgICAgIGlm IHNbMV0gPiAwOgotICAgICAgICAgICAgICAgIG91dFtsaW5lbm9dID0gc1swXQotICAgICAgICAg ICAgICAgIHJldCA9IHNbMV0KLSAgICByZXR1cm4gcmV0Ci0KLSNldmFsdWF0ZSBleHByZXNzaW9u cyB0byB0cnkgdG8gc2ltcGxpZnkgdGhlbQotZGVmIGNvbGxhcHNlX2NvbnN0YW50cygpOgotICAg IHJldCA9IDAKLSAgICBmb3IgbGluZW5vLCBzdHJpbmcgaW4gb3V0Lml0ZW1zKCk6Ci0gICAgICAg IGlmIHNraXAoc3RyaW5nKToKLSAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgIGlmIGlzX2Rv bmUoc3RyaW5nKToKLSAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgIG0gPSByZS5tYXRjaCgi I2RlZmluZVxzKyguKz8pXHMrKC4rKSQiLCBzdHJpbmcpCi0gICAgICAgIGlmIG0gIT0gTm9uZToK LSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBvdXRbbGluZW5vXSA9ICIjZGVmaW5l ICIgKyBtLmdyb3VwKDEpICsgIiAiICsgcmVwcihldmFsKG0uZ3JvdXAoMikpKQotICAgICAgICAg ICAgICAgIHJldCA9IDEKLSAgICAgICAgICAgIGV4Y2VwdCBOYW1lRXJyb3IgYXMgbmU6Ci0gICAg ICAgICAgICAgICAgI3RoaXMgaGFwcGVucyBiZWZvcmUgYSB2YXJpYWJsZSBpcyByZXNvbHZlZCBp biBzaW1wbGVfcmVwbGFjZQotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBl eGNlcHQgU3ludGF4RXJyb3I6Ci0gICAgICAgICAgICAgICAgI3RoaXMgaGFwcGVucyB3aXRoIHNv bWV0aGluZyBsaWtlICNkZWZpbmUgZm9vIGJhciwgd2hpY2ggdGhlCi0gICAgICAgICAgICAgICAg I3JlZ3VsYXIgY3BwIGNhbiBoYW5kbGUKLSAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAg ICAgICAgZXhjZXB0OgotICAgICAgICAgICAgICAgIHJhaXNlIEtleWJvYXJkSW50ZXJydXB0Ci0g ICAgcmV0dXJuIHJldDsKLQotd2hpbGUgVHJ1ZToKLSAgICByZXQgPSAwCi0gICAgcmV0ICs9IGVh c3lfY29uc3RhbnRzKCkKLSAgICByZXQgKz0gc2ltcGxlX3JlcGxhY2UoKQotICAgIHJldCArPSBj b2xsYXBzZV9jb25zdGFudHMoKQotICAgIGlmIHJldCA9PSAwOgotICAgICAgICBicmVhazsKLQot Zm9yIGxpbmVubywgc3RyaW5nIGluIG91dC5pdGVtcygpOgotICAgIHByaW50KHN0cmluZy5yc3Ry aXAoKSkKZGlmZiAtLWdpdCBhL2RlYnVnZ2VyL3N5c3RlbV9yb3V0aW5lL3NyLmc0YSBiL2RlYnVn Z2VyL3N5c3RlbV9yb3V0aW5lL3NyLmc0YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg YTcwZTc3MTIuLjAwMDAwMDAwCi0tLSBhL2RlYnVnZ2VyL3N5c3RlbV9yb3V0aW5lL3NyLmc0YQor KysgL2Rldi9udWxsCkBAIC0xLDI3NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IMKpIDIwMTEg SW50ZWwgQ29ycG9yYXRpb24KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBm cmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQotICogY29weSBvZiB0aGlz IHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdh cmUiKSwKLSAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGlu Y2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KLSAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBt b2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAotICogYW5kL29y IHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdo b20gdGhlCi0gKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhl IGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNl IGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKLSAqIHBhcmFn cmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0 aW9ucyBvZiB0aGUKLSAqIFNvZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURF RCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJ TVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1F UkNIQU5UQUJJTElUWSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBO T05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAotICogVEhFIEFVVEhPUlMgT1IgQ09Q WVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIK LSAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Ig T1RIRVJXSVNFLCBBUklTSU5HCi0gKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRI IFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCi0gKiBJTiBUSEUgU09G VFdBUkUuCi0gKgotICogQXV0aG9yczoKLSAqICAgIEJlbiBXaWRhd3NreSA8YmVuQGJ3aWRhd3Nr Lm5ldD4KLSAqCi0gKi8KLQotI2luY2x1ZGUgImRlYnVnLmgiCi0jaW5jbHVkZSAiZXZpY3QuaCIK LQotI2RlZmluZSBDUjBfMF9NRV9TVEFURV9DVFJMICgxIDw8IDMxKQotI2RlZmluZSBDUjBfMF9C UF9TVVBQUkVTUyAoMSA8PCAxNSkKLSNkZWZpbmUgQ1IwXzBfU1BGX0VOICgxIDw8IDIpCi0jZGVm aW5lIENSMF8wX0FDQ19ESVMgKDEgPDwgMSkKLSNkZWZpbmUgQ1IwXzFfQkVTX0NUUkwgKDEgPDwg MzEpCi0jZGVmaW5lIENSMF8xX0hBTFRfQ1RSTCAoMSA8PCAzMCkKLSNkZWZpbmUgQ1IwXzFfU09G VF9FWENFUFRJT05fQ1RSTCAoMSA8PCAyOSkKLSNkZWZpbmUgQ1IwXzFfSUxMR0xfT1BfU1RTICgx IDw8IDI4KQotI2RlZmluZSBDUjBfMV9TVEFDS19PVlJGTFdfU1RTICgxIDw8IDI3KQotCi0jZGVm aW5lIENSMF8wX0VOVFJZX1VOTUFTSyAoQ1IwXzBfU1BGX0VOIHwgQ1IwXzBfQUNDX0RJUykKLS8v IFRPRE86IE5lZWQgdG8gZml4IHRoaXMgZm9yIG5vbiBicmVha3BvaW50IGNhc2UKLSNkZWZpbmUg Q1IwXzFfRU5UUllfVU5NQVNLIH4oQ1IwXzFfQkVTX0NUUkwpCi0jZGVmaW5lIENSMF8wX1JFVFVS Tl9NQVNLIH4oQ1IwXzBfTUVfU1RBVEVfQ1RSTCB8IENSMF8wX1NQRl9FTiB8IENSMF8wX0FDQ19E SVMpCi0KLS8vIFRPRE86IG5vdCBzdXJlIGhvdyB0byBtYWtlIHRoaXMgbm90IGhhcmRjb2RlZAot I2RlZmluZSBQRVJfVEhSRUFEX1NDUkFUQ0hfU0laRSAoMSA8PCAyMCkKLSNkZWZpbmUgUEVSX1RI UkVBRF9RV09SRFMgKFBFUl9USFJFQURfU0NSQVRDSF9TSVpFID4+IDQpCi0KLS8qIFNob3VsZCBn ZXQgdGhpcyBmcm9tIGJyd19kZWZpbmVzLmggKi8KLSNkZWZpbmUgQlJXX0RBVEFQT1JUX09XT1JE X0JMT0NLXzJfT1dPUkRTICAgICAJCTIKLSNkZWZpbmUgQlJXX0RBVEFQT1JUX09XT1JEX0JMT0NL XzRfT1dPUkRTICAgICAJCTMKLSNkZWZpbmUgQlJXX0RBVEFQT1JUX09XT1JEX0JMT0NLXzhfT1dP UkRTICAgICAJCTQKLSNkZWZpbmUgR0VONl9EQVRBUE9SVF9XUklURV9NRVNTQUdFX09XT1JEX0JM T0NLX1dSSVRFCTgKLSNkZWZpbmUgQlJXX0RBVEFQT1JUX1JFQURfTUVTU0FHRV9PV09SRF9CTE9D S19SRUFECTAKLQotLyogZGVzYyBmaWVsZCwgaWUuIGR3b3JkMyA2LjMuNjYuMiBhbmQgMi4xMS4y LjEuNCAqLwotI2RlZmluZSBTRU5EX01MRU5fNQkJKDU8PDI1KQotI2RlZmluZSBTRU5EX01MRU5f MwkJKDM8PDI1KQotI2RlZmluZSBTRU5EX01MRU5fMgkJKDI8PDI1KQotI2RlZmluZSBTRU5EX01M RU5fMQkJKDE8PDI1KQotI2RlZmluZSBTRU5EX1JMRU5fMQkJKDE8PDIwKQotI2RlZmluZSBTRU5E X1JMRU5fMAkJKDA8PDIwKQotI2RlZmluZSBTRU5EX0hFQURFUl9QUkVTRU5UCSgxPDwxOSkKLSNk ZWZpbmUgU0VORF9XUklURV9DT01NSVQJKDE8PDE3KQotI2RlZmluZSBTRU5EX1RZUEVfV1JJVEUJ KEdFTjZfREFUQVBPUlRfV1JJVEVfTUVTU0FHRV9PV09SRF9CTE9DS19XUklURTw8MTMpCi0jZGVm aW5lIFNFTkRfVFlQRV9SRUFECShCUldfREFUQVBPUlRfUkVBRF9NRVNTQUdFX09XT1JEX0JMT0NL X1JFQUQ8PDEzKQotI2RlZmluZSBTRU5EX0JMT0NLX1NJWkUxCShCUldfREFUQVBPUlRfT1dPUkRf QkxPQ0tfMl9PV09SRFM8PDgpCi0jZGVmaW5lIFNFTkRfQkxPQ0tfU0laRTIJKEJSV19EQVRBUE9S VF9PV09SRF9CTE9DS180X09XT1JEUzw8OCkKLSNkZWZpbmUgU0VORF9CTE9DS19TSVpFNAkoQlJX X0RBVEFQT1JUX09XT1JEX0JMT0NLXzhfT1dPUkRTPDw4KQotI2RlZmluZSBTRU5EX0JJTkRJTkdf VEFCTEUJKDI1NTw8MCkKLS8vIE5vIHdyaXRlIGNvbW1pdAotI2RlZmluZSBXUklURV9ERVNDMV9Y WFggU0VORF9CSU5ESU5HX1RBQkxFIHwgU0VORF9CTE9DS19TSVpFMSB8IFNFTkRfVFlQRV9XUklU RSB8IFNFTkRfSEVBREVSX1BSRVNFTlQgfCBTRU5EX01MRU5fMgotI2RlZmluZSBXUklURV9ERVND MV9XQyBTRU5EX0JJTkRJTkdfVEFCTEUgfCBTRU5EX0JMT0NLX1NJWkUxIHwgU0VORF9UWVBFX1dS SVRFIHwgU0VORF9IRUFERVJfUFJFU0VOVCB8IFNFTkRfTUxFTl8yIHwgU0VORF9XUklURV9DT01N SVQKLSNkZWZpbmUgV1JJVEVfREVTQzIgU0VORF9CSU5ESU5HX1RBQkxFIHwgU0VORF9CTE9DS19T SVpFMiB8IFNFTkRfVFlQRV9XUklURSB8IFNFTkRfSEVBREVSX1BSRVNFTlQgfCBTRU5EX01MRU5f MwotI2RlZmluZSBXUklURV9ERVNDNCBTRU5EX0JJTkRJTkdfVEFCTEUgfCBTRU5EX0JMT0NLX1NJ WkU0IHwgU0VORF9UWVBFX1dSSVRFIHwgU0VORF9IRUFERVJfUFJFU0VOVCB8IFNFTkRfTUxFTl81 Ci0jZGVmaW5lIFJFQ1ZfREVTQzEgU0VORF9CSU5ESU5HX1RBQkxFIHwgU0VORF9CTE9DS19TSVpF MSB8IFNFTkRfVFlQRV9SRUFEIHwgU0VORF9IRUFERVJfUFJFU0VOVCB8IFNFTkRfTUxFTl8xIHwg U0VORF9STEVOXzEKLS8vI2RlZmluZSBTRU5EX0RFU0MxIDB4NDA5MDJGRgotI2RlZmluZSBTRU5E X0RFU0MxX1dDIDB4NDBiMDJGRgotCi0vKiBleF9kZXNjIGZpZWxkIDYuMy42Ni4yICovCi0jZGVm aW5lIFNFTkRfRFBfUkVOREVSX0NBQ0hFCSg1PDwwKQotI2RlZmluZSBTRU5EX0VPVAkJKDE8PDUp Ci0jZGVmaW5lIFNFTkRfRVhfREVTQyBTRU5EX0RQX1JFTkRFUl9DQUNIRQotCi0vKioKLSAqIFdS SVRFX1NDUkFUQ0gxIC0gV3JpdGUgMiBvd29yZHMuCi0gKiBjZHN0LjIgLSBvZmZzZXQKLSAqIGNk c3QuNSAtIHBlciB0aHJlYWQgc2NyYXRjaCBiYXNlLCByZWxhdGl2ZSB0byBnc2JhPz8KLSAqIGNk c3QrMSAtIGRhdGEgdG8gYmUgd3JpdHRlbi4KLSAqLwotI2RlZmluZSBXUklURV9TQ1JBVENIMShj ZHN0KSBcCi0Jc2VuZCAoMTYpIG51bGwgY2RzdCBTRU5EX0VYX0RFU0MgV1JJVEVfREVTQzFfWFhY IEZMQUdTCi0jZGVmaW5lIFdSSVRFX1NDUkFUQ0gxX1dDKGNkc3QpIFwKLQlzZW5kICgxNikgZzEg Y2RzdCBTRU5EX0VYX0RFU0MgV1JJVEVfREVTQzFfV0MgRkxBR1MKLSNkZWZpbmUgV1JJVEVfU0NS QVRDSDIoY2RzdCkgXAotCXNlbmQgKDE2KSBudWxsIGNkc3QgU0VORF9FWF9ERVNDIFdSSVRFX0RF U0MyIEZMQUdTCi0jZGVmaW5lIFdSSVRFX1NDUkFUQ0g0KGNkc3QpIFwKLQlzZW5kICgxNikgbnVs bCBjZHN0IFNFTkRfRVhfREVTQyBXUklURV9ERVNDNCBGTEFHUwotCi0vKioKLSAqIFJFQURfU0NS QVRDSDEgLSBSZWFkIDIgb3dvcmRzLgotICogY2RzdC4yIC0gb2Zmc2V0Ci0gKiBjZHN0LjUgLSBw ZXIgdGhyZWFkIHNjcmF0Y2ggYmFzZSwgcmVsYXRpdmUgdG8gZ3NiYT8/Ci0gKiBncmYgLSByZWdp c3RlciB3aGVyZSByZWFkIGRhdGEgaXMgcG9wdWxhdGVkLgotICovCi0jZGVmaW5lIFJFQURfU0NS QVRDSDEoZ3JmLCBjZHN0KSBcCi0Jc2VuZCAoMTYpIGdyZjp1ZCBjZHN0IFNFTkRfRVhfREVTQyBS RUNWX0RFU0MxIEZMQUdTCi0KLS8qKgotICogU0VUX09GRlNFVCAtIHNldHVwIG1yZiBmb3IgdGhl IGdpdmVuIG9mZnNldCBwcmlvciB0byBhIHNlbmQgaW5zdHJ1Y3Rpb24uCi0gKiBtcmYgLSBtZXNz YWdlIHJlZ2lzdGVyIHRvIGJlIHVzZWQgYXMgdGhlIGhlYWRlci4KLSAqIG9mZnNldCAtIG9mZnNl dC4KLSAqCi0gKiBJZiBhIFdSSVRFX1NDUkFUQ0ggZm9sbG93cywgbXJmKzEgLT4gbXJmKzErbiBz aG91bGQgY29udGFpbiB0aGUgZGF0YSB0byBiZQotICogd3JpdHRlbi4KLSAqLwotI2RlZmluZSBT RVRfT0ZGU0VUKG1yZiwgb2Zmc2V0KSBcCi0JbW92ICgxKSBtcmYuNTp1ZCBnMC41OnVkIEZMQUdT OyBcCi0JbW92ICgxKSBtcmYuMjp1ZCBvZmZzZXQ6dWQgRkxBR1MKLQotLyoqCi0gKiBTQVZFX0NS RiAtIHNhdmUgdGhlIGNvbnRyb2wgcmVnaXN0ZXIKLSAqIGNsb2JiZXJzOiBtMC4yLCBtMC41Ci0g Ki8KLSNkZWZpbmUgQ1JfT0ZGU0VUIDB4NDAKLSNkZWZpbmUgU0FWRV9DUkYgXAotCVNFVF9PRkZT RVQobTAsIENSX09GRlNFVCk7IFwKLQltb3YgKDgpIG0xOnVkIDB4ZGVhZGJlZWY6dWQgRkxBR1M7 IFwKLQltb3YgKDEpIG0xLjA6dWQgY3IwLjAgRkxBR1M7IFwKLQltb3YgKDEpIG0xLjE6dWQgY3Iw LjEgRkxBR1M7IFwKLQltb3YgKDEpIG0xLjI6dWQgY3IwLjIgRkxBR1M7IFwKLQltb3YgKDEpIG0x LjM6dWQgc3IwOnVkIEZMQUdTOyBcCi0JV1JJVEVfU0NSQVRDSDEobTApCi0KLS8qCi0gKiBjbG9i YmVyczogbTAuMiwgbTAuNQotICovCi0jZGVmaW5lIFNUT1JFX0dSRihncmYsIG9mZnNldCkgXAot CVNFVF9PRkZTRVQobTAsIG9mZnNldCk7IFwKLQltb3YgKDgpIG0xOnVkIGdyZjp1ZCBGTEFHUzsg XAotCVdSSVRFX1NDUkFUQ0gxKG0wKQotCi0vKgotICogY2xvYmJlcnM6IG0wLjIsIG0wLjUKLSAq LwotI2RlZmluZSBMT0FEX0dSRihncmYsIG9mZnNldCkgXAotCVNFVF9PRkZTRVQobTAsIG9mZnNl dCk7IFwKLQlSRUFEX1NDUkFUQ0gxKGdyZiwgbTApCi0KLS8qCi0gKiBjbG9iYmVyczogbXJmLjIg bXJmLjUKLSAqLwotI2RlZmluZSBTVE9SRV9NUkYobXJmLCBvZmZzZXQpIFwKLQlTRVRfT0ZGU0VU KG1yZiwgb2Zmc2V0KTsgXAotCVdSSVRFX1NDUkFUQ0gxKG1yZikKLQotLyoKLSAqIG5vbi1xdWly a3kgc2VtYW50aWNzLCB1bmxpa2UgU1RPUkVfTVJGCi0gKiBjbG9iYmVyczogZzEKLSAqLwotI2Rl ZmluZSBMT0FEX01SRihtcmYsIG9mZnNldCkgXAotCUxPQURfR1JGKGcxLCBvZmZzZXQpOyBcCi0J bW92ICg4KSBtcmY6dWQgZzE6dWQgRkxBR1MKLQotI2RlZmluZSBTQVZFX0FMTF9NUkYgXAotCS8q IG0xIGlzIHNhdmVkIGFscmVhZHkgKi8gXAotCVNUT1JFX01SRihtMSwgMHgyKTsgXAotCVNUT1JF X01SRihtMiwgMHg0KTsgXAotCVNUT1JFX01SRihtMywgMHg2KTsgXAotCVNUT1JFX01SRihtNCwg MHg4KTsgXAotCVNUT1JFX01SRihtNSwgMHhhKTsgXAotCVNUT1JFX01SRihtNiwgMHhjKTsgXAot CVNUT1JFX01SRihtNywgMHhlKTsgXAotCVNUT1JFX01SRihtOCwgMHgxMCk7IFwKLQlTVE9SRV9N UkYobTksIDB4MTIpOyBcCi0JU1RPUkVfTVJGKG0xMCwgMHgxNCk7IFwKLQlTVE9SRV9NUkYobTEx LCAweDE2KTsgXAotCVNUT1JFX01SRihtMTIsIDB4MTgpOyBcCi0JU1RPUkVfTVJGKG0xMywgMHgx YSk7IFwKLQlTVE9SRV9NUkYobTE0LCAweDFjKQotCi0jZGVmaW5lIFJFU1RPUkVfQUxMX01SRiBc Ci0JTE9BRF9NUkYobTE1LCAweDFjKTsgXAotCUxPQURfTVJGKG0xNCwgMHgxYSk7IFwKLQlMT0FE X01SRihtMTMsIDB4MTgpOyBcCi0JTE9BRF9NUkYobTEyLCAweDE2KTsgXAotCUxPQURfTVJGKG0x MSwgMHgxNCk7IFwKLQlMT0FEX01SRihtMTAsIDB4MTIpOyBcCi0JTE9BRF9NUkYobTksIDB4MTAp OyBcCi0JTE9BRF9NUkYobTgsIDB4ZSk7IFwKLQlMT0FEX01SRihtNywgMHhjKTsgXAotCUxPQURf TVJGKG02LCAweGEpOyBcCi0JTE9BRF9NUkYobTUsIDB4OCk7IFwKLQlMT0FEX01SRihtNCwgMHg2 KTsgXAotCUxPQURfTVJGKG0zLCAweDQpOyBcCi0JTE9BRF9NUkYobTIsIDB4Mik7IFwKLQlMT0FE X01SRihtMSwgMHgwKQotCi0jaWZuZGVmIFNBTkRZQlJJREdFCi0JI2Vycm9yIE9ubHkgU2FuZHlC cmlkZ2UgaXMgc3VwcG9ydGVkCi0jZW5kaWYKLQotLyogRGVmYXVsdCBmbGFncyBmb3IgYW4gaW5z dHJ1Y3Rpb24gKi8KLSNkZWZpbmUgRkxBR1MgeyBBTElHTjEsIFNXSVRDSCwgTUFTS19ESVNBQkxF LCBBQ0NXUkNUUkx9Ci0KLS8qCi0gKiBXZSBjYW4gY2xvYmJlciBtMCwgYW5kIGcwLjQsIGV2ZXJ5 dGhpbmcgZWxzZSBtdXN0IGJlIHNhdmVkLgotICovCi1FbnRlcjoKLQlub3A7Ci0KLQlvciAoMSkg Y3IwLjAgY3IwLjAgQ1IwXzBfRU5UUllfVU5NQVNLOnVkIEZMQUdTOwotCi0JLyoKLQkgKiBnMC41 IGhhcyB0aGUgcGVyIHRocmVhZCBzY3JhdGNoIHNwYWNlIHdoZW4gcnVubmluZyBpbiBGUyBvciBW Uy4KLQkgKiBJZiB3ZSBkb24ndCBoYXZlIGEgdmFsaWQgZzAuNSwgd2UgY2FuIGNhbGN1bGF0ZSBh IHBlciB0aHJlYWQgc2NyYXRjaCBvZmZzZXQKLQkgKiB1c2luZyB0aGUgc3lzdGVtIHJlZ2lzdGVy cy4gVGhlIHByb2JsZW0gaXMgd2UgZG8gbm90IGhhdmUgYSBnb29kIHdheSB0byBrbm93Ci0JICog dGhlIG9mZnNldCBmcm9tIEdTQkEuIFRoZSBzeXN0ZW0gcm91dGluZSB3aWxsIGhhdmUgdG8gYmUg aGFyZGNvZGVkIG9yCi0JICogZHluYW1pY2FsbHkgcGF0Y2hlZCB3aXRoIHRoZSBjb3JyZWN0IG9m ZnNldC4KLQkgKiBUSUQgaXMgaW4gc3IwLjBbMjowXQotCSAqIEVVSUQgaXMgaW4gc3IwLjBbMTE6 OF0KLQkgKi8KLQotI2lmZGVmIEdQR1BVCi0JbW92ICgxKSBnMC40OnVkIDA6dWQJCQkJRkxBR1M7 Ci0jaWYgMAotCS8qIFRoaXMgc2hvdWxkIHdvcmsgYWNjb3JkaW5nIHRvIHRoZSBkb2NzLCB0aGUg YWRkIGJsb3dzIHVwICovCi0Jc2hyICgxKSBnMC44OnV3IHNyMC4wOnV3IDUJCQlGTEFHUzsKLQlh ZGQgKDEpIGcwLjE2OnViIGdyMC4xNjp1YiBzcjAuMDp1YgkJRkxBR1M7Ci0jZWxzZQotCXNociAo MSkgZzAuODp1dyBzcjAuMDp1dyA1CQkJRkxBR1M7Ci0JbW92ICgxKSBnMC45OnV3IHNyMC4wOnV3 CQkJRkxBR1M7Ci0JYW5kICgxKSBnMC45OnV3IGcwLjk6dXcgMHg3OnV3CQkJRkxBR1M7Ci0JYWRk ICgxKSBnMC44OnV3IGcwLjg6dXcgZzAuOTp1dwkJCUZMQUdTOwotCW1vdiAoMSkgZzAuOTp1dyAw OnV3CQkJCUZMQUdTOwotCW11bCAoMSkgZzAuNDp1ZCBnMC40OnVkIFBFUl9USFJFQURfUVdPUkRT CUZMQUdTOwotI2VuZGlmCi0jZW5kaWYKLQotCW1vdiAoOCkgbTA6dWQgMDp1ZCBGTEFHUzsKLQot CS8qIFNhdmVzIG11c3Qgb2NjdXIgaW4gb3JkZXIgc28gYXMgbm90IHRvIGNsb2JiZXIgdGhlIG5l eHQgcmVnaXN0ZXIgKi8KLQlTVE9SRV9NUkYobTAsIDApOwotCVNUT1JFX0dSRihnMCwgMHgyMCk7 Ci0JU1RPUkVfR1JGKGcxLCAweDIyKTsKLQlTQVZFX0FMTF9NUkY7Ci0KLQltb3YgKDgpIGcxOnVk IFNUQVRFX0VVX01TRzp1ZCBGTEFHUzsKLQlTVE9SRV9HUkYoZzEsIFNUQVRFX1FXT1JEKTsKLQot CW1vdiAoOCkgZzE6dWQgREVCVUdfUFJPVE9DT0xfVkVSU0lPTjp1ZCBGTEFHUzsKLQlTVE9SRV9H UkYoZzEsIENPTU1VTklDQVRJT05fUVdPUkQpOwotCi0JU0FWRV9DUkY7Ci0KLQlFVklDVF9DQUNI RTsKLQl3YWl0IG4xOnVkOwotCUVWSUNUX0NBQ0hFOwotCi0JLyogVXNpbmcgdGhpcyB0byB0cnkg dG8ga2VlcCBjb2hlcmVuY3kgKi8KLQlMT0FEX0dSRihnMSwgQ1JfT0ZGU0VUKTsKLQlMT0FEX0dS RihnMSwgQ09NTVVOSUNBVElPTl9RV09SRCk7Ci0JTE9BRF9HUkYoZzEsIFNUQVRFX1FXT1JEKTsK LQotCVJFU1RPUkVfQUxMX01SRjsKLQlMT0FEX0dSRihnMSwgMHgyMik7Ci0JTE9BRF9HUkYoZzAs IDB4MjApOwotCi0JLyogQ2xlYXIgYnJlYWtwb2ludCBzdGF0dXMgKi8KLQlhbmQgKDEpIGNyMC4x IGNyMC4xIENSMF8xX0VOVFJZX1VOTUFTSzp1ZCBGTEFHUzsKLQotCS8qIHNldCBicmVha3BvaW50 IHN1cHByZXNzIHRoaXMgc2hvdWxkIGJlIGNvbmRpdGlvbmFsIG9uIGJlcyAqLwotCW9yICAoMSkg Y3IwLjAgY3IwLjAgQ1IwXzBfQlBfU1VQUFJFU1M6dWQgRkxBR1M7Ci0KLQlhbmQgKDEpIGNyMC4w IGNyMC4wIENSMF8wX1JFVFVSTl9NQVNLOnVkIEZMQUdTOwotCW5vcDsKZGlmZiAtLWdpdCBhL2Rl YnVnZ2VyL3N5c3RlbV9yb3V0aW5lL3Rlc3QuZzRhIGIvZGVidWdnZXIvc3lzdGVtX3JvdXRpbmUv dGVzdC5nNGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0Mjk2ZTAxLi4wMDAwMDAw MAotLS0gYS9kZWJ1Z2dlci9zeXN0ZW1fcm91dGluZS90ZXN0Lmc0YQorKysgL2Rldi9udWxsCkBA IC0xLDY0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgwqkgMjAxMSBJbnRlbCBDb3Jwb3JhdGlv bgotICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0 byBhbnkgcGVyc29uIG9idGFpbmluZyBhCi0gKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFz c29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAotICogdG8gZGVh bCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQg bGltaXRhdGlvbgotICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1 Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCi0gKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2Yg dGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKLSAqIFNvZnR3 YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRp dGlvbnM6Ci0gKgotICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlz c2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAotICogcGFyYWdyYXBoKSBzaGFsbCBiZSBp bmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQotICog U29mdHdhcmUuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhP VVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKLSAqIElNUExJRUQsIElOQ0xVRElO RyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAot ICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4g IElOIE5PIEVWRU5UIFNIQUxMCi0gKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBC RSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgotICogTElBQklMSVRZLCBX SEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJ TkcKLSAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9S IFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKLSAqIElOIFRIRSBTT0ZUV0FSRS4KLSAqCi0gKiBB dXRob3JzOgotICogICAgQmVuIFdpZGF3c2t5IDxiZW5AYndpZGF3c2submV0PgotICoKLSAqLwot Ci0jaW5jbHVkZSAiZGVidWcuaCIKLQotI2RlZmluZSBDUjBfMF9NRV9TVEFURV9DVFJMICgxIDw8 IDMxKQotI2RlZmluZSBDUjBfMF9CUF9TVVBQUkVTUyAoMSA8PCAxNSkKLSNkZWZpbmUgQ1IwXzBf U1BGX0VOICgxIDw8IDIpCi0jZGVmaW5lIENSMF8wX0FDQ19ESVMgKDEgPDwgMSkKLSNkZWZpbmUg Q1IwXzFfQkVTX0NUUkwgKDEgPDwgMzEpCi0jZGVmaW5lIENSMF8xX0hBTFRfQ1RSTCAoMSA8PCAz MCkKLSNkZWZpbmUgQ1IwXzFfU09GVF9FWENFUFRJT05fQ1RSTCAoMSA8PCAyOSkKLSNkZWZpbmUg Q1IwXzFfSUxMR0xfT1BfU1RTICgxIDw8IDI4KQotI2RlZmluZSBDUjBfMV9TVEFDS19PVlJGTFdf U1RTICgxIDw8IDI3KQotCi0jZGVmaW5lIENSMF8wX0VOVFJZX1VOTUFTSyAoQ1IwXzBfU1BGX0VO IHwgQ1IwXzBfQUNDX0RJUykKLS8vIFRPRE86IE5lZWQgdG8gZml4IHRoaXMgZm9yIG5vbiBicmVh a3BvaW50IGNhc2UKLSNkZWZpbmUgQ1IwXzFfRU5UUllfVU5NQVNLIH4oQ1IwXzFfQkVTX0NUUkwp Ci0jZGVmaW5lIENSMF8wX1JFVFVSTl9NQVNLIH4oQ1IwXzBfTUVfU1RBVEVfQ1RSTCB8IENSMF8w X1NQRl9FTiB8IENSMF8wX0FDQ19ESVMpCi0KLSNpZm5kZWYgU0FORFlCUklER0UKLQkjZXJyb3Ig T25seSBTYW5keUJyaWRnZSBpcyBzdXBwb3J0ZWQKLSNlbmRpZgotCi0vKiBEZWZhdWx0IGZsYWdz IGZvciBhbiBpbnN0cnVjdGlvbiAqLwotI2RlZmluZSBGTEFHUyB7IEFMSUdOMSwgU1dJVENILCBN QVNLX0RJU0FCTEUsIEFDQ1dSQ1RSTH0KLQotRW50ZXI6Ci0Jbm9wOwotCi0Jb3IgKDEpIGNyMC4w IGNyMC4wIENSMF8wX0VOVFJZX1VOTUFTSzp1ZCBGTEFHUzsKLQotCS8qIENsZWFyIGJyZWFrcG9p bnQgc3RhdHVzICovCi0JYW5kICgxKSBjcjAuMSBjcjAuMSBDUjBfMV9FTlRSWV9VTk1BU0s6dWQg RkxBR1M7Ci0KLQkvKiBzZXQgYnJlYWtwb2ludCBzdXBwcmVzcyB0aGlzIHNob3VsZCBiZSBjb25k aXRpb25hbCBvbiBiZXMgKi8KLQlvciAgKDEpIGNyMC4wIGNyMC4wIENSMF8wX0JQX1NVUFBSRVNT OnVkIEZMQUdTOwotCi0JYW5kICgxKSBjcjAuMCBjcjAuMCBDUjBfMF9SRVRVUk5fTUFTSzp1ZCBG TEFHUzsKLQlub3A7Ci0tIAoyLjIwLjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCmlndC1kZXYgbWFpbGluZyBsaXN0CmlndC1kZXZAbGlzdHMuZnJlZWRl c2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8v aWd0LWRldg==